%global appLoc;
%let compiled_apploc=/Public/app/dc;
%let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc));
%let sasjs_clickmeservice=clickme;
%let syscc=0;
options ps=max nonotes nosgen nomprint nomlogic nosource2 nosource noquotelenmax;
/* user supplied build vars */
/* user supplied build vars end */
/* system macro dependencies for build process */
%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)
, errds=work.mp_abort_errds
, mode=REGULAR
)/*/STORE SOURCE*/;
%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;
%local fref fid i;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mp_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds;
iftrue='1=1';
length mac $100 msg $5000;
mac=symget('mac');
msg=symget('msg');
run;
data _null_;
abort cancel FILE;
run;
%return;
%end;
%end;
/* Web App Context */
%if %symexist(_PROGRAM)
or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE
%then %do;
options obs=max replace mprint;
%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"
%then %do;
options nosyntaxcheck;
%end;
%if &mode=INCLUDE %then %do;
%if %sysfunc(exist(&errds))=1 %then %do;
data _null_;
set &errds;
call symputx('iftrue',iftrue,'l');
call symputx('mac',mac,'l');
call symputx('msg',msg,'l');
putlog (_all_)(=);
run;
%if (&iftrue)=0 %then %return;
%end;
%else %do;
%put &sysmacroname: No include errors found;
%return;
%end;
%end;
/* extract log errs / warns, if exist */
%local logloc logline;
%global logmsg; /* capture global messages */
%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;
%else %let logloc=%qsysfunc(getoption(LOG));
proc printto log=log;run;
%let logline=0;
%if %length(&logloc)>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input; putlog _infile_;
i=1;
retain logonce 0;
if (
_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"
) and logonce=0 then
do;
call symputx('logline',_n_);
logonce+1;
end;
run;
/* capture log including lines BEFORE the err */
%if &logline>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input;
i=1;
stoploop=0;
if _n_ ge &logline-15 and stoploop=0 then do until (i>22);
call symputx('logmsg',catx('\n',symget('logmsg'),_infile_));
input;
i+1;
stoploop=1;
end;
if stoploop=1 then stop;
run;
%end;
%end;
%if %symexist(SYS_JES_JOB_URI) %then %do;
/* setup webout for Viya */
options nobomfile;
%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;
filename _webout temp lrecl=999999 mod;
%end;
%else %do;
filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"
name="_webout.json" lrecl=999999 mod;
%end;
%end;
%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;
options nobomfile;
/* set up http header for SASjs Server */
%let fid=%sysfunc(fopen(&fref,A));
%if &fid=0 %then %do;
%put %str(ERR)OR: %sysfunc(sysmsg());
%return;
%end;
%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));
%let rc=%sysfunc(fwrite(&fid));
%let rc=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(&fref));
%end;
/* send response in SASjs JSON format */
data _null_;
file _webout mod lrecl=32000 encoding='utf-8';
length msg syswarningtext syserrortext $32767 mode $10 ;
sasdatetime=datetime();
msg=symget('msg');
%if &logline>0 %then %do;
msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg'));
%end;
/* escape the escapes */
msg=tranwrd(msg,'\','\\');
/* escape the quotes */
msg=tranwrd(msg,'"','\"');
/* ditch the CRLFs as chrome complains */
msg=compress(msg,,'kw');
/* quote without quoting the quotes (which are escaped instead) */
msg=cats('"',msg,'"');
if symexist('_debug') then debug=quote(trim(symget('_debug')));
else debug='""';
if symget('sasjsprocessmode')='Stored Program' then mode='SASJS';
if mode ne 'SASJS' then put '>>weboutBEGIN<<';
put '{"SYSDATE" : "' "&SYSDATE" '"';
put ',"SYSTIME" : "' "&SYSTIME" '"';
put ',"sasjsAbort" : [{';
put ' "MSG":' msg ;
put ' ,"MAC": "' "&mac" '"}]';
put ",""SYSUSERID"" : ""&sysuserid"" ";
put ',"_DEBUG":' debug ;
if symexist('_metauser') then do;
_METAUSER=quote(trim(symget('_METAUSER')));
put ",""_METAUSER"": " _METAUSER;
_METAPERSON=quote(trim(symget('_METAPERSON')));
put ',"_METAPERSON": ' _METAPERSON;
end;
if symexist('SYS_JES_JOB_URI') then do;
SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI')));
put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI;
end;
_PROGRAM=quote(trim(resolve(symget('_PROGRAM'))));
put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" ";
syserrortext=cats(symget('syserrortext'));
if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syserrortext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syserrortext)
)))))))))))))!!'"';
end;
else syserrortext=cats('"',syserrortext,'"');
put ',"SYSERRORTEXT" : ' syserrortext;
put ",""SYSHOSTNAME"" : ""&syshostname"" ";
put ",""SYSJOBID"" : ""&sysjobid"" ";
put ",""SYSSCPL"" : ""&sysscpl"" ";
put ",""SYSSITE"" : ""&syssite"" ";
sysvlong=quote(trim(symget('sysvlong')));
put ',"SYSVLONG" : ' sysvlong;
syswarningtext=cats(symget('syswarningtext'));
if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syswarningtext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syswarningtext)
)))))))))))))!!'"';
end;
else syswarningtext=cats('"',syswarningtext,'"');
put ",""SYSWARNINGTEXT"" : " syswarningtext;
put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" ';
put "}" ;
if mode ne 'SASJS' then put '>>weboutEND<<';
run;
%put _all_;
%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;
data _null_;
putlog 'stpsrvset program err and syscc';
rc=stpsrvset('program error', 0);
call symputx("syscc",0,"g");
run;
%if &sysscp=WIN
and 1=0 /* deprecating this logic until we figure out a consistent abort */
and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"
and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;
/* skip approach (below) does not work in windows m6+ envs */
endsas;
%end;
%else %do;
/**
* endsas kills 9.4m3 deployments by orphaning multibridges.
* Abort variants are ungraceful (non zero return code)
* This approach lets SAS run silently until the end :-)
* Caution - fails when called within a %include within a macro
* Use mp_include() to handle this.
*/
filename skip temp;
data _null_;
file skip;
put '%macro skip();';
comment '%mend skip; -> fix lint ';
put '%macro skippy();';
comment '%mend skippy; -> fix lint ';
run;
%inc skip;
%end;
%end;
%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;
/* endsas kills the session making it harder to fetch results */
data _null_;
syswarningtext=symget('syswarningtext');
syserrortext=symget('syserrortext');
abort_msg=symget('msg');
syscc=symget('syscc');
sysuserid=symget('sysuserid');
iftrue=symget('iftrue');
put (_all_)(/=);
call symputx('syscc',0);
abort cancel nolist;
run;
%end;
%else %do;
%abort cancel;
%end;
%end;
%else %do;
%put _all_;
%abort cancel;
%end;
%mend mp_abort;
/** @endcond */
%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);
%local rc fname;
%if &prefix=0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%end;
%else %do;
%local x len;
%let len=%eval(8-%length(&prefix));
%let x=0;
%do x=0 %to &maxtries;
%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);
%if %sysfunc(fileref(&fname)) > 0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%return;
%end;
%end;
%put unable to find available fileref after &maxtries attempts;
%end;
%mend mf_getuniquefileref;
%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);
%local x;
%if ( %length(&prefix) gt 7 ) %then %do;
%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;
0
%return;
%end;
%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;
%put %str(ERR)OR: Invalid prefix (&prefix);
0
%return;
%end;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
%let maxtries=%eval(10**(8-%length(&prefix))-1);
%do x = 0 %to &maxtries;
%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;
&prefix&x
%return;
%end;
%let x = %eval(&x + 1);
%end;
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
0
%mend mf_getuniquelibref;
%macro mf_isblank(param
)/*/STORE SOURCE*/;
%sysevalf(%superq(param)=,boolean)
%mend mf_isblank;
%macro mf_mval(var);
%if %symexist(&var) %then %do;
%superq(&var)
%end;
%mend mf_mval;
%macro mf_trimstr(basestr,trimstr);
%local baselen trimlen trimval;
/* return if basestr is shorter than trimstr (or 0) */
%let baselen=%length(%superq(basestr));
%let trimlen=%length(%superq(trimstr));
%if &baselen < &trimlen or &baselen=0 %then %return;
/* obtain the characters from the end of basestr */
%let trimval=%qsubstr(%superq(basestr)
,%length(%superq(basestr))-&trimlen+1
,&trimlen);
/* compare and if matching, chop it off! */
%if %superq(basestr)=%superq(trimstr) %then %do;
%return;
%end;
%else %if %superq(trimval)=%superq(trimstr) %then %do;
%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)
%end;
%else %do;
&basestr
%end;
%mend mf_trimstr;
%macro mf_getplatform(switch
)/*/STORE SOURCE*/;
%local a b c;
%if &switch.NONE=NONE %then %do;
%if %symexist(sasjsprocessmode) %then %do;
%if &sasjsprocessmode=Stored Program %then %do;
SASJS
%return;
%end;
%end;
%if %symexist(sysprocessmode) %then %do;
%if "&sysprocessmode"="SAS Object Server"
or "&sysprocessmode"= "SAS Compute Server" %then %do;
SASVIYA
%end;
%else %if "&sysprocessmode"="SAS Stored Process Server"
or "&sysprocessmode"="SAS Workspace Server"
%then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if &switch=SASSTUDIO %then %do;
/* return the version of SAS Studio else 0 */
%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;
%let a=%mf_mval(_CLIENTVERSION);
%let b=%scan(&a,1,.);
%if %eval(&b >2) %then %do;
&b
%end;
%else 0;
%end;
%else 0;
%end;
%else %if &switch=VIYARESTAPI %then %do;
%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)
%end;
%mend mf_getplatform;
%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)
)/des='ungraceful abort' /*STORE SOURCE*/;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mf_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%abort;
%mend mf_abort;
/** @endcond */
%macro mfv_existfolder(path
)/*/STORE SOURCE*/;
%mf_abort(
iftrue=(&syscc ne 0),
msg=Cannot enter mfv_existfolder.sas with syscc=&syscc
)
%local fref rc;
%let fref=%mf_getuniquefileref();
%if %sysfunc(filename(fref,,filesrvc,folderPath="&path"))=0 %then %do;
1
%let rc=%sysfunc(filename(fref));
%end;
%else %do;
0
%let syscc=0;
%end;
%mend mfv_existfolder;
%macro mv_createfolder(path=
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%if %mfv_existfolder(&path)=1 %then %do;
%put &sysmacroname: &path already exists;
%return;
%end;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
options noquotelenmax;
%local subfolder_cnt; /* determine the number of subfolders */
%let subfolder_cnt=%sysfunc(countw(&path,/));
%local href; /* resource address (none for root) */
%let href="/folders/folders?parentFolderUri=/folders/folders/none";
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%local x newpath subfolder;
%do x=1 %to &subfolder_cnt;
%let subfolder=%scan(&path,&x,%str(/));
%let newpath=&newpath/&subfolder;
%local fname1;
%let fname1=%mf_getuniquefileref();
%put &sysmacroname checking to see if &newpath exists;
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&newpath";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
%mp_abort(
iftrue=(
&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 404
)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%if &mdebug=1 %then %do;
%put &sysmacroname following check to see if &newpath exists:;
%put _local_;
data _null_;
set &fname1;
input;
putlog _infile_;
run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE=200 %then %do;
%*put &sysmacroname &newpath exists so grab the follow on link ;
data _null_;
set &libref1..links;
if rel='createChild' then
call symputx('href',quote(cats("&base_uri",href)),'l');
run;
%end;
%else %if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;
%put &sysmacroname &newpath not found - creating it now;
%local fname2;
%let fname2=%mf_getuniquefileref();
data _null_;
length json $1000;
json=cats("'"
,'{"name":'
,quote(trim(symget('subfolder')))
,',"description":'
,quote("&subfolder, created by &sysmacroname")
,',"type":"folder"}'
,"'"
);
call symputx('json',json,'l');
run;
proc http method='POST'
in=&json
out=&fname2
&oauth_bearer
url=%unquote(%superq(href));
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
'Content-Type'='application/vnd.sas.content.folder+json'
'Accept'='application/vnd.sas.content.folder+json';
run;
%put &=SYS_PROCHTTP_STATUS_CODE;
%put &=SYS_PROCHTTP_STATUS_PHRASE;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%local libref2;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
%put &sysmacroname &newpath now created. Grabbing the follow on link ;
data _null_;
set &libref2..links;
if rel='createChild' then do;
call symputx('href',quote(cats("&base_uri",href)),'l');
&dbg put (_all_)(=);
end;
run;
libname &libref2 clear;
filename &fname2 clear;
%end;
filename &fname1 clear;
libname &libref1 clear;
%end;
%mend mv_createfolder;
%macro mv_deletejes(path=
,name=
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
);
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1)
,mac=&sysmacroname
,msg=%str(name value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%put &sysmacroname: fetching details for &path ;
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&path";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;
%put &sysmacroname: Folder &path NOT FOUND - nothing to delete!;
%return;
%end;
%else %if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;
/*data _null_;infile &fname1;input;putlog _infile_;run;*/
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%put &sysmacroname: grab the follow on link ;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..links;
if rel='members' then call symputx('mref',quote("&base_uri"!!trim(href)),'l');
run;
/* get the children */
%local fname1a;
%let fname1a=%mf_getuniquefileref();
proc http method='GET' out=&fname1a &oauth_bearer
url=%unquote(%superq(mref));
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%put &=SYS_PROCHTTP_STATUS_CODE;
%local libref1a;
%let libref1a=%mf_getuniquelibref();
libname &libref1a JSON fileref=&fname1a;
%local uri found;
%let found=0;
%put Getting object uri from &libref1a..items;
data _null_;
length contenttype name $1000;
set &libref1a..items;
if contenttype='jobDefinition' and upcase(name)="%upcase(&name)" then do;
call symputx('uri',cats("&base_uri",uri),'l');
call symputx('found',1,'l');
end;
run;
%if &found=0 %then %do;
%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;
%return;
%end;
proc http method="DELETE" url="&uri" &oauth_bearer;
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
"Accept"="*/*";/**/
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 204 %then %do;
data _null_; infile &fname2; input; putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%else %put &sysmacroname: &path/&name successfully deleted;
/* clear refs */
filename &fname1 clear;
libname &libref1 clear;
filename &fname1a clear;
libname &libref1a clear;
%mend mv_deletejes;
%macro mp_base64copy(
inref=0,
outref=0,
action=ENCODE
)/*/STORE SOURCE*/;
%let inref=%upcase(&inref);
%let outref=%upcase(&outref);
%let action=%upcase(&action);
%local infound outfound;
%let infound=0;
%let outfound=0;
data _null_;
set sashelp.vextfl(where=(fileref="&inref" or fileref="&outref"));
if fileref="&inref" then call symputx('infound',1,'l');
if fileref="&outref" then call symputx('outfound',1,'l');
run;
%mp_abort(iftrue= (&infound=0)
,mac=&sysmacroname
,msg=%str(INREF &inref NOT FOUND!)
)
%mp_abort(iftrue= (&outref=0)
,mac=&sysmacroname
,msg=%str(OUTREF NOT PROVIDED!)
)
%mp_abort(iftrue= (&action ne ENCODE and &action ne DECODE)
,mac=&sysmacroname
,msg=%str(Invalid action! Should be ENCODE OR DECODE)
)
%if &outfound=0 %then %do;
filename &outref temp lrecl=2097088;
%end;
%if &action=ENCODE %then %do;
data _null_;
length b64 $ 76 line $ 57;
retain line "";
infile &inref recfm=F lrecl= 1 end=eof;
input @1 stream $char1.;
file &outref recfm=N;
substr(line,(_N_-(CEIL(_N_/57)-1)*57),1) = byte(rank(stream));
if mod(_N_,57)=0 or EOF then do;
if eof then b64=put(trim(line),$base64X76.);
else b64=put(line, $base64X76.);
put b64 + (-1) @;
line="";
end;
run;
%end;
%else %if &action=DECODE %then %do;
data _null_;
length filein 8 fileout 8;
filein = fopen("&inref",'I',4,'B');
fileout = fopen("&outref",'O',3,'B');
char= '20'x;
do while(fread(filein)=0);
length raw $4;
do i=1 to 4;
rc=fget(filein,char,1);
substr(raw,i,1)=char;
end;
rc = fput(fileout,input(raw,$base64X4.));
rc = fwrite(fileout);
end;
rc = fclose(filein);
rc = fclose(fileout);
run;
%end;
%mend mp_base64copy;
%macro mp_binarycopy(
inloc= /* full path and filename of the object to be copied */
,outloc= /* full path and filename of object to be created */
,inref=____in /* override default to use own filerefs */
,outref=____out /* override default to use own filerefs */
,mode=CREATE
,iftrue=%str(1=1)
)/*/STORE SOURCE*/;
%local mod;
%if not(%eval(%unquote(&iftrue))) %then %return;
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
%end;
%if &outref=____out %then %do;
filename &outref &outloc lrecl=1048576 &mod;
%end;
/* copy the file byte-for-byte */
data _null_;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @@;
format sourcechar hex2.;
put sourcechar char1. @@;
run;
%if &inref = ____in %then %do;
filename &inref clear;
%end;
%if &outref=____out %then %do;
filename &outref clear;
%end;
%mend mp_binarycopy;
%macro mf_getuniquename(prefix=MC);
&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))
%mend mf_getuniquename;
/* system macro dependencies for build process end*/
/* system macros for build process */
%macro mv_createwebservice(path=
,name=
,desc=Created by the mv_createwebservice.sas macro
,precode=
,code=ft15f001
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,replace=YES
,adapter=sasjs
,mdebug=0
,contextname=
,debug=0 /* @TODO - Deprecate */
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
/* initial validation checking */
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1)
,mac=&sysmacroname
,msg=%str(name value must be provided)
)
options noquotelenmax;
* remove any trailing slash ;
%if "%substr(&path,%length(&path),1)" = "/" %then
%let path=%substr(&path,1,%length(&path)-1);
/* ensure folder exists */
%put &sysmacroname: Path &path being checked / created;
%mv_createfolder(path=&path)
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* fetching folder details for provided path */
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&path";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%if &mdebug=1 %then %do;
data _null_;
infile &fname1;
input;
putlog _infile_;
run;
%end;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* path exists. Grab follow on link to check members */
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..links;
if rel='members' then
call symputx('membercheck',quote("&base_uri"!!trim(href)),'l');
else if rel='self' then call symputx('parentFolderUri',href,'l');
run;
data _null_;
set &libref1..root;
call symputx('folderid',id,'l');
run;
%local fname2;
%let fname2=%mf_getuniquefileref();
proc http method='GET'
out=&fname2
&oauth_bearer
url=%unquote(%superq(membercheck));
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
'Accept'='application/vnd.sas.collection+json'
'Accept-Language'='string';
%if &mdebug=1 %then %do;
debug level = 3;
%end;
run;
/*data _null_;infile &fname2;input;putlog _infile_;run;*/
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%if %upcase(&replace)=YES %then %do;
%mv_deletejes(path=&path, name=&name)
%end;
%else %do;
/* check that job does not already exist in that folder */
%local libref2;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
%local exists; %let exists=0;
data _null_;
set &libref2..items;
if contenttype='jobDefinition' and upcase(name)="%upcase(&name)" then
call symputx('exists',1,'l');
run;
%mp_abort(iftrue=(&exists=1)
,mac=&sysmacroname
,msg=%str(Job &name already exists in &path)
)
libname &libref2 clear;
%end;
/* set up the body of the request to create the service */
%local fname3;
%let fname3=%mf_getuniquefileref();
data _null_;
file &fname3 TERMSTR=' ';
length string $32767;
string=cats('{"version": 0,"name":"'
,"&name"
,'","type":"Compute","parameters":[{"name":"_addjesbeginendmacros"'
,',"type":"CHARACTER","defaultValue":"false"}');
context=quote(cats(symget('contextname')));
if context ne '""' then do;
string=cats(string,',{"version": 1,"name": "_contextName","defaultValue":'
,context,',"type":"CHARACTER","label":"Context Name","required": false}');
end;
string=cats(string,'],"code":"');
put string;
run;
/**
* Add webout macro
* These put statements are auto generated - to change the macro, change the
* source (mv_webout) and run `build.py`
*/
filename &adapter temp lrecl=3000;
data _null_;
file &adapter;
put "/* Created on %sysfunc(datetime(),datetime19.) by &sysuserid */";
/* WEBOUT BEGIN */
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y ';
put ' ,engine=DATASTEP ';
put ' ,missing=NULL ';
put ' ,showmeta=N ';
put ' ,maxobs=MAX ';
put ')/*/STORE SOURCE*/; ';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval ';
put ' tmpds1 tmpds2 tmpds3 tmpds4; ';
put '%let numcols=0; ';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;); ';
put ' ';
put '%if &action=OPEN %then %do; ';
put ' options nobomfile; ';
put ' data _null_;file &jref encoding=''utf-8'' lrecl=200; ';
put ' put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"''; ';
put ' run; ';
put '%end; ';
put '%else %if (&action=ARR or &action=OBJ) %then %do; ';
put ' /* force variable names to always be uppercase in the JSON */ ';
put ' options validvarname=upcase; ';
put ' /* To avoid issues with _webout on EBI - such as encoding diffs and truncation ';
put ' (https://support.sas.com/kb/49/325.html) we use temporary files */ ';
put ' filename _sjs1 temp lrecl=200 ; ';
put ' data _null_; file _sjs1 encoding=''utf-8''; ';
put ' put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":"; ';
put ' run; ';
put ' /* now write to _webout 1 char at a time */ ';
put ' data _null_; ';
put ' infile _sjs1 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs1 clear; ';
put ' ';
put ' /* grab col defs */ ';
put ' proc contents noprint data=&ds ';
put ' out=_data_(keep=name type length format formatl formatd varnum label); ';
put ' run; ';
put ' %let colinfo=%scan(&syslast,2,.); ';
put ' proc sort data=&colinfo; ';
put ' by varnum; ';
put ' run; ';
put ' /* move meta to mac vars */ ';
put ' data &colinfo; ';
put ' if _n_=1 then call symputx(''numcols'',nobs,''l''); ';
put ' set &colinfo end=last nobs=nobs; ';
put ' name=upcase(name); ';
put ' /* fix formats */ ';
put ' if type=2 or type=6 then do; ';
put ' typelong=''char''; ';
put ' length fmt $49.; ';
put ' if format='''' then fmt=cats(''$'',length,''.''); ';
put ' else if formatl=0 then fmt=cats(format,''.''); ';
put ' else fmt=cats(format,formatl,''.''); ';
put ' end; ';
put ' else do; ';
put ' typelong=''num''; ';
put ' if format='''' then fmt=''best.''; ';
put ' else if formatl=0 then fmt=cats(format,''.''); ';
put ' else if formatd=0 then fmt=cats(format,formatl,''.''); ';
put ' else fmt=cats(format,formatl,''.'',formatd); ';
put ' end; ';
put ' /* 32 char unique name */ ';
put ' newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27); ';
put ' ';
put ' call symputx(cats(''name'',_n_),name,''l''); ';
put ' call symputx(cats(''newname'',_n_),newname,''l''); ';
put ' call symputx(cats(''length'',_n_),length,''l''); ';
put ' call symputx(cats(''fmt'',_n_),fmt,''l''); ';
put ' call symputx(cats(''type'',_n_),type,''l''); ';
put ' call symputx(cats(''typelong'',_n_),typelong,''l''); ';
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); ';
put ' run; ';
put ' ';
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' proc sql; ';
put ' select count(*) into: lastobs from &ds; ';
put ' %if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs)); ';
put ' ';
put ' %if &engine=PROCJSON %then %do; ';
put ' %if &missing=STRING %then %do; ';
put ' %put &sysmacroname: Special Missings not supported in proc json.; ';
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
put ' %goto datastep; ';
put ' %end; ';
put ' data &tempds; ';
put ' set &ds; ';
put ' &stmt_obs; ';
put ' %if &fmt=N %then format _numeric_ best32.;; ';
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
put ' filename _sjs2 temp lrecl=131068 encoding=''utf-8''; ';
put ' proc json out=_sjs2 pretty ';
put ' %if &action=ARR %then nokeys ; ';
put ' ;export &tempds / nosastags fmtnumeric; ';
put ' run; ';
put ' /* send back to webout */ ';
put ' data _null_; ';
put ' infile _sjs2 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs2 clear; ';
put ' %end; ';
put ' %else %if &engine=DATASTEP %then %do; ';
put ' %datastep: ';
put ' %if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1 ';
put ' %then %do; ';
put ' %put &sysmacroname: &ds NOT FOUND!!!; ';
put ' %return; ';
put ' %end; ';
put ' ';
put ' %if &fmt=Y %then %do; ';
put ' /** ';
put ' * Extract format definitions ';
put ' * First, by getting library locations from dictionary.formats ';
put ' * Then, by exporting the width using proc format ';
put ' * Cannot use maxw from sashelp.vformat as not always populated ';
put ' * Cannot use fmtinfo() as not supported in all flavours ';
put ' */ ';
put ' %let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' proc sql noprint; ';
put ' create table &tmpds1 as ';
put ' select cats(libname,''.'',memname) as FMTCAT, ';
put ' FMTNAME ';
put ' from dictionary.formats ';
put ' where fmttype=''F'' and libname is not null ';
put ' and fmtname in (select format from &colinfo where format is not null) ';
put ' order by 1; ';
put ' create table &tmpds2( ';
put ' FMTNAME char(32), ';
put ' LENGTH num ';
put ' ); ';
put ' %local catlist cat fmtlist i; ';
put ' select distinct fmtcat into: catlist separated by '' '' from &tmpds1; ';
put ' %do i=1 %to %sysfunc(countw(&catlist,%str( ))); ';
put ' %let cat=%scan(&catlist,&i,%str( )); ';
put ' proc sql; ';
put ' select distinct fmtname into: fmtlist separated by '' '' ';
put ' from &tmpds1 where fmtcat="&cat"; ';
put ' proc format lib=&cat cntlout=&tmpds3(keep=fmtname length); ';
put ' select &fmtlist; ';
put ' run; ';
put ' proc sql; ';
put ' insert into &tmpds2 select distinct fmtname,length from &tmpds3; ';
put ' %end; ';
put ' ';
put ' proc sql; ';
put ' create table &tmpds4 as ';
put ' select a.*, b.length as MAXW ';
put ' from &colinfo a ';
put ' left join &tmpds2 b ';
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
put ' order by a.varnum; ';
put ' data _null_; ';
put ' set &tmpds4; ';
put ' if not missing(maxw); ';
put ' call symputx( ';
put ' cats(''fmtlen'',_n_), ';
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
put ' min(32767,ceil((max(length,maxw)+10)*1.5)) ';
put ' ,''l'' ';
put ' ); ';
put ' run; ';
put ' ';
put ' /* configure varlenchk - as we are explicitly shortening the variables */ ';
put ' %let optval=%sysfunc(getoption(varlenchk)); ';
put ' options varlenchk=NOWARN; ';
put ' data _data_(compress=char); ';
put ' /* shorten the new vars */ ';
put ' length ';
put ' %do i=1 %to &numcols; ';
put ' &&name&i $&&fmtlen&i ';
put ' %end; ';
put ' ; ';
put ' /* rename on entry */ ';
put ' set &ds(rename=( ';
put ' %do i=1 %to &numcols; ';
put ' &&name&i=&&newname&i ';
put ' %end; ';
put ' )); ';
put ' &stmt_obs; ';
put ' ';
put ' drop ';
put ' %do i=1 %to &numcols; ';
put ' &&newname&i ';
put ' %end; ';
put ' ; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=num %then %do; ';
put ' &&name&i=cats(put(&&newname&i,&&fmt&i)); ';
put ' %end; ';
put ' %else %do; ';
put ' &&name&i=put(&&newname&i,&&fmt&i); ';
put ' %end; ';
put ' %end; ';
put ' if _error_ then do; ';
put ' call symputx(''syscc'',1012); ';
put ' stop; ';
put ' end; ';
put ' run; ';
put ' %let fmtds=&syslast; ';
put ' options varlenchk=&optval; ';
put ' %end; ';
put ' ';
put ' proc format; /* credit yabwon for special null removal */ ';
put ' value bart (default=40) ';
put ' %if &missing=NULL %then %do; ';
put ' ._ - .z = null ';
put ' %end; ';
put ' %else %do; ';
put ' ._ = [quote()] ';
put ' . = null ';
put ' .a - .z = [quote()] ';
put ' %end; ';
put ' other = [best.]; ';
put ' ';
put ' data &tempds; ';
put ' attrib _all_ label=''''; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
put ' length &&name&i $&&fmtlen&i...; ';
put ' format &&name&i $&&fmtlen&i...; ';
put ' %end; ';
put ' %end; ';
put ' %if &fmt=Y %then %do; ';
put ' set &fmtds; ';
put ' %end; ';
put ' %else %do; ';
put ' set &ds; ';
put ' %end; ';
put ' &stmt_obs; ';
put ' format _numeric_ bart.; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' &&name&i=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else &&name&i=quote(cats(&&name&i)); ';
put ' %end; ';
put ' %end; ';
put ' run; ';
put ' ';
put ' filename _sjs3 temp lrecl=131068 ; ';
put ' data _null_; ';
put ' file _sjs3 encoding=''utf-8''; ';
put ' if _n_=1 then put "["; ';
put ' set &tempds; ';
put ' if _n_>1 then put "," @; put ';
put ' %if &action=ARR %then "[" ; %else "{" ; ';
put ' %do i=1 %to &numcols; ';
put ' %if &i>1 %then "," ; ';
put ' %if &action=OBJ %then """&&name&i"":" ; ';
put ' "&&name&i"n /* name literal for reserved variable names */ ';
put ' %end; ';
put ' %if &action=ARR %then "]" ; %else "}" ; ; ';
put ' ';
put ' /* close out the table */ ';
put ' data _null_; ';
put ' file _sjs3 mod encoding=''utf-8''; ';
put ' put '']''; ';
put ' run; ';
put ' data _null_; ';
put ' infile _sjs3 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs3 clear; ';
put ' %end; ';
put ' ';
put ' proc sql; ';
put ' drop table &colinfo, &tempds; ';
put ' ';
put ' %if %substr(&showmeta,1,1)=Y %then %do; ';
put ' filename _sjs4 temp lrecl=131068 encoding=''utf-8''; ';
put ' data _null_; ';
put ' file _sjs4; ';
put ' length label $350; ';
put ' put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{"; ';
put ' do i=1 to &numcols; ';
put ' name=quote(trim(symget(cats(''name'',i)))); ';
put ' format=quote(trim(symget(cats(''fmt'',i)))); ';
put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); ';
put ' length=quote(trim(symget(cats(''length'',i)))); ';
put ' type=quote(trim(symget(cats(''typelong'',i)))); ';
put ' if i>1 then put "," @@; ';
put ' put name '':{"format":'' format '',"label":'' label ';
put ' '',"length":'' length '',"type":'' type ''}''; ';
put ' end; ';
put ' put ''}}''; ';
put ' run; ';
put ' /* send back to webout */ ';
put ' data _null_; ';
put ' infile _sjs4 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs4 clear; ';
put ' %end; ';
put '%end; ';
put ' ';
put '%else %if &action=CLOSE %then %do; ';
put ' data _null_; file &jref encoding=''utf-8'' mod ; ';
put ' put "}"; ';
put ' run; ';
put '%end; ';
put '%mend mp_jsonout; ';
put ' ';
put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; ';
put ' %local user; ';
put ' ';
put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; ';
put ' %else %let user=&sysuserid; ';
put ' ';
put ' %quote(&user) ';
put ' ';
put '%mend mf_getuser; ';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL ';
put ' ,showmeta=N,maxobs=MAX,workobs=0 ';
put '); ';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name ';
put ' sasjs_tables SYS_JES_JOB_URI; ';
put '%if %index("&_debug",log) %then %let _debug=131; ';
put ' ';
put '%local i tempds table; ';
put '%let action=%upcase(&action); ';
put ' ';
put '%if &action=FETCH %then %do; ';
put ' %if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do; ';
put ' options mprint notes mprintnest; ';
put ' %end; ';
put ' ';
put ' %if not %symexist(_webin_fileuri1) %then %do; ';
put ' %let _webin_file_count=%eval(&_webin_file_count+0); ';
put ' %let _webin_fileuri1=&_webin_fileuri; ';
put ' %let _webin_name1=&_webin_name; ';
put ' %end; ';
put ' ';
put ' /* if the sasjs_tables param is passed, we expect param based upload */ ';
put ' %if %length(&sasjs_tables.X)>1 %then %do; ';
put ' ';
put ' /* convert data from macro variables to datasets */ ';
put ' %do i=1 %to %sysfunc(countw(&sasjs_tables)); ';
put ' %let table=%scan(&sasjs_tables,&i,%str( )); ';
put ' %if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1; ';
put ' data _null_; ';
put ' file "%sysfunc(pathname(work))/&table..csv" recfm=n; ';
put ' retain nrflg 0; ';
put ' length line $32767; ';
put ' do i=1 to &&sasjs&i.data0; ';
put ' if &&sasjs&i.data0=1 then line=symget("sasjs&i.data"); ';
put ' else line=symget(cats("sasjs&i.data",i)); ';
put ' if i=1 and substr(line,1,7)=''%nrstr('' then do; ';
put ' nrflg=1; ';
put ' line=substr(line,8); ';
put ' end; ';
put ' if i=&&sasjs&i.data0 and nrflg=1 then do; ';
put ' line=substr(line,1,length(line)-1); ';
put ' end; ';
put ' put line +(-1) @; ';
put ' end; ';
put ' run; ';
put ' data _null_; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ; ';
put ' input; ';
put ' if _n_=1 then call symputx(''input_statement'',_infile_); ';
put ' list; ';
put ' data work.&table; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd ';
put ' termstr=crlf; ';
put ' input &input_statement; ';
put ' run; ';
put ' %end; ';
put ' %end; ';
put ' %else %do i=1 %to &_webin_file_count; ';
put ' /* read in any files that are sent */ ';
put ' /* this part needs refactoring for wide files */ ';
put ' filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999; ';
put ' data _null_; ';
put ' infile indata termstr=crlf lrecl=32767; ';
put ' input; ';
put ' if _n_=1 then call symputx(''input_statement'',_infile_); ';
put ' %if %str(&_debug) ge 131 %then %do; ';
put ' if _n_<20 then putlog _infile_; ';
put ' else stop; ';
put ' %end; ';
put ' %else %do; ';
put ' stop; ';
put ' %end; ';
put ' run; ';
put ' data &&_webin_name&i; ';
put ' infile indata firstobs=2 dsd termstr=crlf ; ';
put ' input &input_statement; ';
put ' run; ';
put ' %let sasjs_tables=&sasjs_tables &&_webin_name&i; ';
put ' %end; ';
put '%end; ';
put '%else %if &action=OPEN %then %do; ';
put ' /* setup webout */ ';
put ' OPTIONS NOBOMFILE; ';
put ' %if "X&SYS_JES_JOB_URI.X"="XX" %then %do; ';
put ' filename _webout temp lrecl=999999 mod; ';
put ' %end; ';
put ' %else %do; ';
put ' filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" ';
put ' name="_webout.json" lrecl=999999 mod; ';
put ' %end; ';
put ' ';
put ' /* setup temp ref */ ';
put ' %if %upcase(&fref) ne _WEBOUT %then %do; ';
put ' filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---''; ';
put ' %end; ';
put ' ';
put ' /* setup json */ ';
put ' data _null_;file &fref; ';
put ' put ''{"SYSDATE" : "'' "&SYSDATE" ''"''; ';
put ' put '',"SYSTIME" : "'' "&SYSTIME" ''"''; ';
put ' run; ';
put '%end; ';
put '%else %if &action=ARR or &action=OBJ %then %do; ';
put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref ';
put ' ,engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs ';
put ' ) ';
put '%end; ';
put '%else %if &action=CLOSE %then %do; ';
put ' %if %str(&workobs) > 0 %then %do; ';
put ' /* send back first XX records of each work table for debugging */ ';
put ' data;run;%let tempds=%scan(&syslast,2,.); ';
put ' ods output Members=&tempds; ';
put ' proc datasets library=WORK memtype=data; ';
put ' %local wtcnt;%let wtcnt=0; ';
put ' data _null_; ';
put ' set &tempds; ';
put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ ';
put ' i+1; ';
put ' call symputx(cats(''wt'',i),name,''l''); ';
put ' call symputx(''wtcnt'',i,''l''); ';
put ' data _null_; file &fref mod; put ",""WORK"":{"; ';
put ' %do i=1 %to &wtcnt; ';
put ' %let wt=&&wt&i; ';
put ' data _null_; file &fref mod; ';
put ' dsid=open("WORK.&wt",''is''); ';
put ' nlobs=attrn(dsid,''NLOBS''); ';
put ' nvars=attrn(dsid,''NVARS''); ';
put ' rc=close(dsid); ';
put ' if &i>1 then put '',''@; ';
put ' put " ""&wt"" : {"; ';
put ' put ''"nlobs":'' nlobs; ';
put ' put '',"nvars":'' nvars; ';
put ' %mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y ';
put ' ,maxobs=&workobs ';
put ' ) ';
put ' data _null_; file &fref mod;put "}"; ';
put ' %end; ';
put ' data _null_; file &fref mod;put "}";run; ';
put ' %end; ';
put ' ';
put ' /* close off json */ ';
put ' data _null_;file &fref mod; ';
put ' length SYSPROCESSNAME syserrortext syswarningtext autoexec $512; ';
put ' put ",""_DEBUG"" : ""&_debug"" "; ';
put ' _PROGRAM=quote(trim(resolve(symget(''_PROGRAM'')))); ';
put ' put '',"_PROGRAM" : '' _PROGRAM ; ';
put ' autoexec=quote(urlencode(trim(getoption(''autoexec'')))); ';
put ' put '',"AUTOEXEC" : '' autoexec; ';
put ' put ",""MF_GETUSER"" : ""%mf_getuser()"" "; ';
put ' SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI'')))); ';
put ' put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ; ';
put ' put ",""SYSJOBID"" : ""&sysjobid"" "; ';
put ' put ",""SYSCC"" : ""&syscc"" "; ';
put ' syserrortext=cats(symget(''syserrortext'')); ';
put ' if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' syserrortext=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,syserrortext) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else syserrortext=cats(''"'',syserrortext,''"''); ';
put ' put '',"SYSERRORTEXT" : '' syserrortext; ';
put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; ';
put ' put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" "; ';
put ' put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" "; ';
put ' SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME))); ';
put ' put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME; ';
put ' put ",""SYSJOBID"" : ""&sysjobid"" "; ';
put ' put ",""SYSSCPL"" : ""&sysscpl"" "; ';
put ' put ",""SYSSITE"" : ""&syssite"" "; ';
put ' put ",""SYSUSERID"" : ""&sysuserid"" "; ';
put ' sysvlong=quote(trim(symget(''sysvlong''))); ';
put ' put '',"SYSVLONG" : '' sysvlong; ';
put ' syswarningtext=cats(symget(''syswarningtext'')); ';
put ' if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' syswarningtext=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,syswarningtext) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else syswarningtext=cats(''"'',syswarningtext,''"''); ';
put ' put '',"SYSWARNINGTEXT" : '' syswarningtext; ';
put ' put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" ''; ';
put ' length memsize $32; ';
put ' memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)"; ';
put ' memsize=quote(cats(memsize)); ';
put ' put '',"MEMSIZE" : '' memsize; ';
put ' put "}"; ';
put ' ';
put ' %if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do; ';
put ' data _null_; rc=fcopy("&fref","_webout");run; ';
put ' %end; ';
put ' ';
put '%end; ';
put ' ';
put '%mend mv_webout; ';
/* WEBOUT END */
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so it is provided by SASjs instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put ' ';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO';
put ' ,maxobs=MAX';
put ');';
put ' %mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing';
put ' ,showmeta=&showmeta,maxobs=&maxobs';
put ' )';
put '%mend;';
run;
/* insert the code, escaping double quotes and carriage returns */
%&dbg.put &sysmacroname: Creating final input file;
%local x fref freflist;
%let freflist= &adapter &precode &code ;
%do x=1 %to %sysfunc(countw(&freflist));
%let fref=%scan(&freflist,&x);
%&dbg.put &sysmacroname: adding &fref fileref;
data _null_;
length filein 8 fileid 8;
filein = fopen("&fref","I",1,"B");
fileid = fopen("&fname3","A",1,"B");
rec = "20"x;
do while(fread(filein)=0);
rc = fget(filein,rec,1);
if rec='"' then do; /* DOUBLE QUOTE */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'"');rc =fwrite(fileid);
end;
else if rec='0A'x then do; /* LF */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'n');rc =fwrite(fileid);
end;
else if rec='0D'x then do; /* CR */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'r');rc =fwrite(fileid);
end;
else if rec='09'x then do; /* TAB */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'t');rc =fwrite(fileid);
end;
else if rec='5C'x then do; /* BACKSLASH */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'\');rc =fwrite(fileid);
end;
else if rec='01'x then do; /* Unprintable */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'1');rc =fwrite(fileid);
end;
else if rec='07'x then do; /* Bell Char */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'7');rc =fwrite(fileid);
end;
else if rec='1B'x then do; /* escape char */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'1');rc =fwrite(fileid);
rc =fput(fileid,'B');rc =fwrite(fileid);
end;
else do;
rc =fput(fileid,rec);
rc =fwrite(fileid);
end;
end;
rc=fclose(filein);
rc=fclose(fileid);
run;
%end;
/* finish off the body of the code file loaded to JES */
data _null_;
file &fname3 mod TERMSTR=' ';
put '"}';
run;
%if &mdebug=1 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then %do;
%put &sysmacroname: input about to be POSTed;
data _null_;infile &fname3;input;putlog _infile_;run;
%end;
%&dbg.put &sysmacroname: Creating the actual service!;
%local fname4;
%let fname4=%mf_getuniquefileref();
proc http method='POST'
in=&fname3
out=&fname4
&oauth_bearer
url="&base_uri/jobDefinitions/definitions?parentFolderUri=&parentFolderUri";
headers 'Content-Type'='application/vnd.sas.job.definition+json'
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
"Accept"="application/vnd.sas.job.definition+json";
%if &mdebug=1 %then %do;
debug level = 3;
%end;
run;
%if &mdebug=1 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then %do;
%put &sysmacroname: output from POSTing job definition;
data _null_;infile &fname4;input;putlog _infile_;run;
%end;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* get the url so we can give a helpful log message */
%local url;
data _null_;
if symexist('_baseurl') then do;
url=symget('_baseurl');
if subpad(url,length(url)-9,9)='SASStudio'
then url=substr(url,1,length(url)-11);
else url="&systcpiphostname";
end;
else url="&systcpiphostname";
call symputx('url',url);
run;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname1 clear;
filename &fname2 clear;
filename &fname3 clear;
filename &fname4 clear;
filename &adapter clear;
libname &libref1 clear;
%end;
%put &sysmacroname: Job &name successfully created in &path;
%put &sysmacroname:;
%put &sysmacroname: Check it out here:;
%put &sysmacroname:;%put;
%put &url/SASJobExecution?_PROGRAM=&path/&name;%put;
%put &sysmacroname:;
%put &sysmacroname:;
%mend mv_createwebservice;
/**
@file
@brief Creates a file in SAS Drive
@details Creates a file in SAS Drive and adds the appropriate content type.
If the parent folder does not exist, it is created.
Usage:
filename myfile temp;
data _null_;
file myfile;
put 'something';
run;
%mv_createfile(path=/Public/temp,name=newfile.txt,inref=myfile)
@param [in] path= The parent folder in which to create the file
@param [in] name= The name of the file to be created
@param [in] inref= The fileref pointing to the file to be uploaded
@param [in] intype= (BINARY) The type of the input data. Valid values:
@li BINARY File is copied byte for byte using the mp_binarycopy.sas macro.
@li BASE64 File will be first decoded using the mp_base64.sas macro, then
loaded byte by byte to SAS Drive.
@param [in] contentdisp= (inline) Content Disposition. Example values:
@li inline
@li attachment
@param [in] ctype= (0) Set a default HTTP Content-Type header to be returned
with the file when the content is retrieved from the Files service.
@param [in] access_token_var= The global macro variable to contain the access
token, if using authorization_code grant type.
@param [in] grant_type= (sas_services) Valid values are:
@li password
@li authorization_code
@li sas_services
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
@version VIYA V.03.05
@author Allan Bowe, source: https://github.com/sasjs/core
SAS Macros
@li mf_getuniquefileref.sas
@li mf_isblank.sas
@li mp_abort.sas
@li mp_base64copy.sas
@li mp_binarycopy.sas
@li mv_createfolder.sas
**/
%macro mv_createfile(path=
,name=
,inref=
,intype=BINARY
,contentdisp=inline
,ctype=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1 or %length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1 or %length(&name)=1)
,mac=&sysmacroname
,msg=%str(name value with length >1 must be provided)
)
/* create folder if it does not already exist */
%mv_createfolder(path=&path
,access_token_var=&access_token_var
,grant_type=&grant_type
,mdebug=&mdebug
)
/* create file with relevant options */
%local fref;
%let fref=%mf_getuniquefileref();
filename &fref filesrvc
folderPath="&path"
filename="&name"
cdisp="&contentdisp"
%if "&ctype" ne "0" %then %do;
ctype="&ctype"
%end;
lrecl=1048544;
%if &intype=BINARY %then %do;
%mp_binarycopy(inref=&inref, outref=&fref)
%end;
%else %if &intype=BASE64 %then %do;
%mp_base64copy(inref=&inref, outref=&fref, action=DECODE)
%end;
filename &fref clear;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%put &sysmacroname: File &name successfully created in &path;
%put &sysmacroname:;%put;
%put &base_uri/SASJobExecution?_file=&path/&name;%put;
%put &sysmacroname:;
%mend mv_createfile;
/**
@file
@brief Performs a text substitution on a file
@details Performs a find and replace on a file, either in place or to a new
file. Can be used on files where lines are longer than 32767.
Works by reading in the file byte by byte, then marking the beginning and end
of each matched string, before finally doing the replace.
Full credit for this highly efficient and syntactically satisfying SAS logic
goes to [Bartosz Jabłoński](https://www.linkedin.com/in/yabwon), founder of
the [SAS Packages](https://github.com/yabwon/SAS_PACKAGES) framework.
Usage:
%let file="%sysfunc(pathname(work))/file.txt";
%let str=replace/me;
%let rep=with/this;
data _null_;
file &file;
put 'blahblah';
put "blahblah&str.blah";
put 'blahblahblah';
run;
%mp_replace(&file, findvar=str, replacevar=rep)
data _null_;
infile &file;
input;
list;
run;
Note - if you are running a version of SAS that will allow the io package in
LUA, you can also use this macro: mp_gsubfile.sas
@param [in] infile The QUOTED path to the file on which to perform the
substitution
@param [in] findvar= Macro variable NAME containing the string to search for
@param [in] replacevar= Macro variable NAME containing the replacement string
@param [out] outfile= (0) Optional QUOTED path to the adjusted output file (to
avoid overwriting the first file).
SAS Macros
@li mf_getuniquefileref.sas
@li mf_getuniquename.sas
Related Macros
@li mp_chop.sas
@li mp_gsubfile.sas
@li mp_replace.test.sas
@version 9.4
@author Bartosz Jabłoński
@author Allan Bowe
**/
%macro mp_replace(infile,
findvar=,
replacevar=,
outfile=0
)/*/STORE SOURCE*/;
%local inref dttm ds1;
%let inref=%mf_getuniquefileref();
%let outref=%mf_getuniquefileref();
%if &outfile=0 %then %let outfile=&infile;
%let ds1=%mf_getuniquename(prefix=allchars);
%let ds2=%mf_getuniquename(prefix=startmark);
/* START */
%let dttm=%sysfunc(datetime());
filename &inref &infile lrecl=1 recfm=n;
data &ds1;
infile &inref;
input sourcechar $char1. @@;
format sourcechar hex2.;
run;
data &ds2;
/* set find string to length in bytes to cover trailing spaces */
length string $ %length(%superq(&findvar));
string =symget("&findvar");
drop string;
firstchar=char(string,1);
findlen=lengthm(string); /* <- for trailing bytes */
do _N_=1 to nobs;
set &ds1 nobs=nobs point=_N_;
if sourcechar=firstchar then do;
pos=1;
s=0;
do point=_N_ to min(_N_ + findlen -1,nobs);
set &ds1 point=point;
if sourcechar=char(string, pos) then s + 1;
else goto _leave_;
pos+1;
end;
_leave_:
if s=findlen then do;
START =_N_;
_N_ =_N_+ s - 1;
STOP =_N_;
output;
end;
end;
end;
stop;
keep START STOP;
run;
data &ds1;
declare hash HS(dataset:"&ds2(keep=start)");
HS.defineKey("start");
HS.defineDone();
declare hash HE(dataset:"&ds2(keep=stop)");
HE.defineKey("stop");
HE.defineDone();
do until(eof);
set &ds1 end=eof curobs =n;
start = ^HS.check(key:n);
stop = ^HE.check(key:n);
length strt $ 1;
strt =put(start,best. -L);
retain out 1;
if out then output;
if start then out=0;
if stop then out=1;
end;
stop;
keep sourcechar strt;
run;
filename &outref &outfile recfm=n;
data _null_;
length replace $ %length(%superq(&replacevar));
replace=symget("&replacevar");
file &outref;
do until(eof);
set &ds1 end=eof;
if strt ="1" then put replace char.;
else put sourcechar char1.;
end;
stop;
run;
/* END */
%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;
%mend mp_replace;
/* system macros for build process end */
%macro mf_mval(var);
%if %symexist(&var) %then %do;
%superq(&var)
%end;
%mend mf_mval;
%macro mf_trimstr(basestr,trimstr);
%local baselen trimlen trimval;
/* return if basestr is shorter than trimstr (or 0) */
%let baselen=%length(%superq(basestr));
%let trimlen=%length(%superq(trimstr));
%if &baselen < &trimlen or &baselen=0 %then %return;
/* obtain the characters from the end of basestr */
%let trimval=%qsubstr(%superq(basestr)
,%length(%superq(basestr))-&trimlen+1
,&trimlen);
/* compare and if matching, chop it off! */
%if %superq(basestr)=%superq(trimstr) %then %do;
%return;
%end;
%else %if %superq(trimval)=%superq(trimstr) %then %do;
%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)
%end;
%else %do;
&basestr
%end;
%mend mf_trimstr;
%macro mf_getplatform(switch
)/*/STORE SOURCE*/;
%local a b c;
%if &switch.NONE=NONE %then %do;
%if %symexist(sasjsprocessmode) %then %do;
%if &sasjsprocessmode=Stored Program %then %do;
SASJS
%return;
%end;
%end;
%if %symexist(sysprocessmode) %then %do;
%if "&sysprocessmode"="SAS Object Server"
or "&sysprocessmode"= "SAS Compute Server" %then %do;
SASVIYA
%end;
%else %if "&sysprocessmode"="SAS Stored Process Server"
or "&sysprocessmode"="SAS Workspace Server"
%then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if &switch=SASSTUDIO %then %do;
/* return the version of SAS Studio else 0 */
%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;
%let a=%mf_mval(_CLIENTVERSION);
%let b=%scan(&a,1,.);
%if %eval(&b >2) %then %do;
&b
%end;
%else 0;
%end;
%else 0;
%end;
%else %if &switch=VIYARESTAPI %then %do;
%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)
%end;
%mend mf_getplatform;
%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);
%local rc fname;
%if &prefix=0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%end;
%else %do;
%local x len;
%let len=%eval(8-%length(&prefix));
%let x=0;
%do x=0 %to &maxtries;
%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);
%if %sysfunc(fileref(&fname)) > 0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%return;
%end;
%end;
%put unable to find available fileref after &maxtries attempts;
%end;
%mend mf_getuniquefileref;
%macro mf_getuniquename(prefix=MC);
&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))
%mend mf_getuniquename;
%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)
, errds=work.mp_abort_errds
, mode=REGULAR
)/*/STORE SOURCE*/;
%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;
%local fref fid i;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mp_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds;
iftrue='1=1';
length mac $100 msg $5000;
mac=symget('mac');
msg=symget('msg');
run;
data _null_;
abort cancel FILE;
run;
%return;
%end;
%end;
/* Web App Context */
%if %symexist(_PROGRAM)
or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE
%then %do;
options obs=max replace mprint;
%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"
%then %do;
options nosyntaxcheck;
%end;
%if &mode=INCLUDE %then %do;
%if %sysfunc(exist(&errds))=1 %then %do;
data _null_;
set &errds;
call symputx('iftrue',iftrue,'l');
call symputx('mac',mac,'l');
call symputx('msg',msg,'l');
putlog (_all_)(=);
run;
%if (&iftrue)=0 %then %return;
%end;
%else %do;
%put &sysmacroname: No include errors found;
%return;
%end;
%end;
/* extract log errs / warns, if exist */
%local logloc logline;
%global logmsg; /* capture global messages */
%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;
%else %let logloc=%qsysfunc(getoption(LOG));
proc printto log=log;run;
%let logline=0;
%if %length(&logloc)>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input; putlog _infile_;
i=1;
retain logonce 0;
if (
_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"
) and logonce=0 then
do;
call symputx('logline',_n_);
logonce+1;
end;
run;
/* capture log including lines BEFORE the err */
%if &logline>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input;
i=1;
stoploop=0;
if _n_ ge &logline-15 and stoploop=0 then do until (i>22);
call symputx('logmsg',catx('\n',symget('logmsg'),_infile_));
input;
i+1;
stoploop=1;
end;
if stoploop=1 then stop;
run;
%end;
%end;
%if %symexist(SYS_JES_JOB_URI) %then %do;
/* setup webout for Viya */
options nobomfile;
%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;
filename _webout temp lrecl=999999 mod;
%end;
%else %do;
filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"
name="_webout.json" lrecl=999999 mod;
%end;
%end;
%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;
options nobomfile;
/* set up http header for SASjs Server */
%let fid=%sysfunc(fopen(&fref,A));
%if &fid=0 %then %do;
%put %str(ERR)OR: %sysfunc(sysmsg());
%return;
%end;
%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));
%let rc=%sysfunc(fwrite(&fid));
%let rc=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(&fref));
%end;
/* send response in SASjs JSON format */
data _null_;
file _webout mod lrecl=32000 encoding='utf-8';
length msg syswarningtext syserrortext $32767 mode $10 ;
sasdatetime=datetime();
msg=symget('msg');
%if &logline>0 %then %do;
msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg'));
%end;
/* escape the escapes */
msg=tranwrd(msg,'\','\\');
/* escape the quotes */
msg=tranwrd(msg,'"','\"');
/* ditch the CRLFs as chrome complains */
msg=compress(msg,,'kw');
/* quote without quoting the quotes (which are escaped instead) */
msg=cats('"',msg,'"');
if symexist('_debug') then debug=quote(trim(symget('_debug')));
else debug='""';
if symget('sasjsprocessmode')='Stored Program' then mode='SASJS';
if mode ne 'SASJS' then put '>>weboutBEGIN<<';
put '{"SYSDATE" : "' "&SYSDATE" '"';
put ',"SYSTIME" : "' "&SYSTIME" '"';
put ',"sasjsAbort" : [{';
put ' "MSG":' msg ;
put ' ,"MAC": "' "&mac" '"}]';
put ",""SYSUSERID"" : ""&sysuserid"" ";
put ',"_DEBUG":' debug ;
if symexist('_metauser') then do;
_METAUSER=quote(trim(symget('_METAUSER')));
put ",""_METAUSER"": " _METAUSER;
_METAPERSON=quote(trim(symget('_METAPERSON')));
put ',"_METAPERSON": ' _METAPERSON;
end;
if symexist('SYS_JES_JOB_URI') then do;
SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI')));
put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI;
end;
_PROGRAM=quote(trim(resolve(symget('_PROGRAM'))));
put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" ";
syserrortext=cats(symget('syserrortext'));
if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syserrortext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syserrortext)
)))))))))))))!!'"';
end;
else syserrortext=cats('"',syserrortext,'"');
put ',"SYSERRORTEXT" : ' syserrortext;
put ",""SYSHOSTNAME"" : ""&syshostname"" ";
put ",""SYSJOBID"" : ""&sysjobid"" ";
put ",""SYSSCPL"" : ""&sysscpl"" ";
put ",""SYSSITE"" : ""&syssite"" ";
sysvlong=quote(trim(symget('sysvlong')));
put ',"SYSVLONG" : ' sysvlong;
syswarningtext=cats(symget('syswarningtext'));
if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syswarningtext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syswarningtext)
)))))))))))))!!'"';
end;
else syswarningtext=cats('"',syswarningtext,'"');
put ",""SYSWARNINGTEXT"" : " syswarningtext;
put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" ';
put "}" ;
if mode ne 'SASJS' then put '>>weboutEND<<';
run;
%put _all_;
%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;
data _null_;
putlog 'stpsrvset program err and syscc';
rc=stpsrvset('program error', 0);
call symputx("syscc",0,"g");
run;
%if &sysscp=WIN
and 1=0 /* deprecating this logic until we figure out a consistent abort */
and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"
and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;
/* skip approach (below) does not work in windows m6+ envs */
endsas;
%end;
%else %do;
/**
* endsas kills 9.4m3 deployments by orphaning multibridges.
* Abort variants are ungraceful (non zero return code)
* This approach lets SAS run silently until the end :-)
* Caution - fails when called within a %include within a macro
* Use mp_include() to handle this.
*/
filename skip temp;
data _null_;
file skip;
put '%macro skip();';
comment '%mend skip; -> fix lint ';
put '%macro skippy();';
comment '%mend skippy; -> fix lint ';
run;
%inc skip;
%end;
%end;
%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;
/* endsas kills the session making it harder to fetch results */
data _null_;
syswarningtext=symget('syswarningtext');
syserrortext=symget('syserrortext');
abort_msg=symget('msg');
syscc=symget('syscc');
sysuserid=symget('sysuserid');
iftrue=symget('iftrue');
put (_all_)(/=);
call symputx('syscc',0);
abort cancel nolist;
run;
%end;
%else %do;
%abort cancel;
%end;
%end;
%else %do;
%put _all_;
%abort cancel;
%end;
%mend mp_abort;
/** @endcond */
%macro mp_binarycopy(
inloc= /* full path and filename of the object to be copied */
,outloc= /* full path and filename of object to be created */
,inref=____in /* override default to use own filerefs */
,outref=____out /* override default to use own filerefs */
,mode=CREATE
,iftrue=%str(1=1)
)/*/STORE SOURCE*/;
%local mod;
%if not(%eval(%unquote(&iftrue))) %then %return;
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
%end;
%if &outref=____out %then %do;
filename &outref &outloc lrecl=1048576 &mod;
%end;
/* copy the file byte-for-byte */
data _null_;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @@;
format sourcechar hex2.;
put sourcechar char1. @@;
run;
%if &inref = ____in %then %do;
filename &inref clear;
%end;
%if &outref=____out %then %do;
filename &outref clear;
%end;
%mend mp_binarycopy;
%macro mp_chop(infile,
matchvar=,
matchpoint=START,
keep=FIRST,
offset=0,
mdebug=0,
outfile=0
)/*/STORE SOURCE*/;
%local fref0 dttm ds1 outref;
%let fref0=%mf_getuniquefileref();
%let ds1=%mf_getuniquename(prefix=allchars);
%let ds2=%mf_getuniquename(prefix=startmark);
%if &outfile=0 %then %let outfile=&infile;
%mp_abort(iftrue= (%length(%superq(&matchvar))=0)
,mac=mp_chop.sas
,msg=%str(&matchvar is an empty variable)
)
/* START */
%let dttm=%sysfunc(datetime());
filename &fref0 &infile lrecl=1 recfm=n;
/* create dataset with one char per row */
data &ds1;
infile &fref0;
input sourcechar $char1. @@;
format sourcechar hex2.;
run;
/* get start & stop position of first matchvar string (one row, two vars) */
data &ds2;
/* set find string to length in bytes to cover trailing spaces */
length string $ %length(%superq(&matchvar));
string =symget("&matchvar");
drop string;
firstchar=char(string,1);
findlen=lengthm(string); /* <- for trailing bytes */
do _N_=1 to nobs;
set &ds1 nobs=nobs point=_N_;
if sourcechar=firstchar then do;
pos=1;
s=0;
do point=_N_ to min(_N_ + findlen -1,nobs);
set &ds1 point=point;
if sourcechar=char(string, pos) then s + 1;
else goto _leave_;
pos+1;
end;
_leave_:
if s=findlen then do;
START =_N_;
_N_ =_N_+ s - 1;
STOP =_N_;
output;
/* matched! */
stop;
end;
end;
end;
stop;
keep START STOP;
run;
%local split;
%let split=0;
data _null_;
set &ds2;
if "&matchpoint"='START' then do;
if "&keep"='FIRST' then mp=start;
else if "&keep"='LAST' then mp=start-1;
end;
else if "&matchpoint"='END' then do;
if "&keep"='FIRST' then mp=stop+1;
else if "&keep"='LAST' then mp=stop;
end;
split=mp+&offset;
call symputx('split',split,'l');
%if &mdebug=1 %then %do;
put (_all_)(=);
%put &=offset;
%end;
run;
%if &split=0 %then %do;
%put &sysmacroname: No match found in &infile for string %superq(&matchvar);
%return;
%end;
data _null_;
file &outfile recfm=n;
set &ds1;
%if &keep=FIRST %then %do;
if _n_ ge &split then stop;
%end;
%else %do;
if _n_ gt &split;
%end;
put sourcechar char1.;
run;
%if &mdebug=0 %then %do;
filename &fref0 clear;
%end;
%else %do;
data _null_;
infile &outfile lrecl=32767;
input;
list;
if _n_>200 then stop;
run;
%end;
/* END */
%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;
%mend mp_chop;
%macro mcf_init(func
)/*/STORE SOURCE*/;
%if not (%symexist(SASJS_PREFIX)) %then %do;
%global SASJS_PREFIX;
%let SASJS_PREFIX=SASJS;
%end;
%let func=%upcase(&func);
/* the / character is just a seperator */
%global &sasjs_prefix._FUNCTIONS;
%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;
1
%return;
%end;
%else %do;
%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;
0
%end;
%mend mcf_init;
%macro mcf_getfmttype(wrap=NO
,insert_cmplib=DEPRECATED
,lib=WORK
,cat=SASJS
,pkg=UTILS
)/*/STORE SOURCE*/;
%local i var cmpval found;
%if %mcf_init(mcf_getfmttype)=1 %then %return;
%if &wrap=YES %then %do;
proc fcmp outlib=&lib..&cat..&pkg;
%end;
function mcf_getfmttype(fmtnm $) $8;
if substr(fmtnm,1,1)='$' then return('CHAR');
else do;
/* extract NAME */
length fmt $32;
fmt=scan(fmtnm,1,'.');
do while (
substr(fmt,length(fmt),1) in ('1','2','3','4','5','6','7','8','9','0')
);
if length(fmt)=1 then fmt='W';
else fmt=substr(fmt,1,length(fmt)-1);
end;
/* apply lookups */
if cats(fmt) in ('DATETIME','B8601DN','B8601DN','B8601DT','B8601DT'
,'B8601DZ','B8601DZ','DATEAMPM','DTDATE','DTMONYY','DTWKDATX','DTYEAR'
,'DTYYQC','E8601DN','E8601DN','E8601DT','E8601DT','E8601DZ','E8601DZ'
,'NLDATM') then return('DATETIME');
else if fmt in ('DATE','YYMMDD','B8601DA','B8601DA','DAY','DDMMYY'
,'DDMMYYB','DDMMYYC','DDMMYYD','DDMMYYN','DDMMYYP','DDMMYYS','DDMMYYx'
,'DOWNAME','E8601DA','E8601DA','JULDAY','JULIAN','MMDDYY','MMDDYYB'
,'MMDDYYC','MMDDYYD','MMDDYYN','MMDDYYP','MMDDYYS','MMDDYYx','MMYY'
,'MMYYC','MMYYD','MMYYN','MMYYP','MMYYS','MMYYx','MONNAME','MONTH'
,'MONYY','PDJULG','PDJULI','QTR','QTRR','WEEKDATE','WEEKDATX','WEEKDAY'
,'WEEKU','WEEKV','WEEKW','WORDDATE','WORDDATX','YEAR','YYMM','YYMMC'
,'YYMMD','YYMMDDB','YYMMDDC','YYMMDDD','YYMMDDN','YYMMDDP','YYMMDDS'
,'YYMMDDx','YYMMN','YYMMP','YYMMS','YYMMx','YYMON','YYQ','YYQC','YYQD'
,'YYQN','YYQP','YYQR','YYQRC','YYQRD','YYQRN','YYQRP','YYQRS','YYQRx'
,'YYQS','YYQx','YYQZ','NLDATE') then return('DATE');
else if fmt in ('TIME','B8601LZ','B8601LZ','B8601TM','B8601TM','B8601TZ'
,'B8601TZ','E8601LZ','E8601LZ','E8601TM','E8601TM','E8601TZ','E8601TZ'
,'HHMM','HOUR','MMSS','TIMEAMPM','TOD') then return('TIME');
else return('NUM');
end;
endsub;
%if &wrap=YES %then %do;
quit;
%end;
/* insert the CMPLIB if not already there */
%let cmpval=%sysfunc(getoption(cmplib));
%let found=0;
%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));
%let var=%scan(&cmpval,&i,%str( %(%)));
%if &var=&lib..&cat %then %let found=1;
%end;
%if &found=0 %then %do;
options insert=(CMPLIB=(&lib..&cat));
%end;
%mend mcf_getfmttype;
%macro mf_getVarFormat(libds /* two level ds name */
, var /* variable name from which to return the format */
, force=0
)/*/STORE SOURCE*/;
%local dsid vnum vformat rc vlen vtype;
/* Open dataset */
%let dsid = %sysfunc(open(&libds));
%if &dsid > 0 %then %do;
/* Get variable number */
%let vnum = %sysfunc(varnum(&dsid, &var));
/* Get variable format */
%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));
%else %do;
%put NOTE: Variable &var does not exist in &libds;
%let rc = %sysfunc(close(&dsid));
%return;
%end;
%end;
%else %do;
%put &sysmacroname: dataset &libds not opened! (rc=&dsid);
%put &sysmacroname: %sysfunc(sysmsg());
%return;
%end;
/* supply a default if no format available */
%if %length(&vformat)<2 & &force=1 %then %do;
%let vlen = %sysfunc(varlen(&dsid, &vnum));
%let vtype = %sysfunc(vartype(&dsid, &vnum.));
%if &vtype=C %then %let vformat=$&vlen..;
%else %let vformat=best.;
%end;
/* Close dataset */
%let rc = %sysfunc(close(&dsid));
/* Return variable format */
&vformat
%mend mf_getVarFormat;
%macro mf_getvarlist(libds
,dlm=%str( )
,quote=no
,typefilter=A
)/*/STORE SOURCE*/;
/* declare local vars */
%local outvar dsid nvars x rc dlm q var vtype;
/* credit Rowland Hale - byte34 is double quote, 39 is single quote */
%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));
%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));
/* open dataset in macro */
%let dsid=%sysfunc(open(&libds));
%if &dsid %then %do;
%let nvars=%sysfunc(attrn(&dsid,NVARS));
%if &nvars>0 %then %do;
/* add variables with supplied delimeter */
%do x=1 %to &nvars;
/* get variable type */
%let vtype=%sysfunc(vartype(&dsid,&x));
%if &vtype=&typefilter or &typefilter=A %then %do;
%let var=&q.%sysfunc(varname(&dsid,&x))&q.;
%if &var=&q&q %then %do;
%put &sysmacroname: Empty column found in &libds!;
%let var=&q. &q.;
%end;
%if %quote(&outvar)=%quote() %then %let outvar=&var;
%else %let outvar=&outvar.&dlm.&var.;
%end;
%end;
%end;
%let rc=%sysfunc(close(&dsid));
%end;
%else %do;
%put &sysmacroname: Unable to open &libds (rc=&dsid);
%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());
%let rc=%sysfunc(close(&dsid));
%end;
%do;%unquote(&outvar)%end;
%mend mf_getvarlist;
%macro mf_getvartype(libds /* two level name */
, var /* variable name from which to return the type */
)/*/STORE SOURCE*/;
%local dsid vnum vtype rc;
/* Open dataset */
%let dsid = %sysfunc(open(&libds));
%if &dsid. > 0 %then %do;
/* Get variable number */
%let vnum = %sysfunc(varnum(&dsid, &var));
/* Get variable type (C/N) */
%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));
%else %do;
%put NOTE: Variable &var does not exist in &libds;
%let vtype = %str( );
%end;
%end;
%else %do;
%put &sysmacroname: dataset &libds not opened! (rc=&dsid);
%put &sysmacroname: %sysfunc(sysmsg());
%return;
%end;
/* Close dataset */
%let rc = %sysfunc(close(&dsid));
/* Return variable type */
&vtype
%mend mf_getvartype;
%macro mp_ds2csv(ds
,dlm=COMMA
,outref=0
,outfile=
,outencoding=0
,headerformat=LABEL
,termstr=CRLF
)/*/STORE SOURCE*/;
%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;
%if not %sysfunc(exist(&ds)) %then %do;
%put %str(WARN)ING: &ds does not exist;
%return;
%end;
%if %index(&ds,.)=0 %then %let ds=WORK.&ds;
%if &outencoding=0 %then %let outencoding=;
%else %let outencoding=encoding=&outencoding;
%if &outref=0 %then %let outloc=&outfile;
%else %let outloc=&outref;
%if &headerformat=SASJS %then %do;
%let delim=",";
%let termstr=CRLF;
%mcf_getfmttype(wrap=YES)
%end;
%else %if &dlm=COMMA %then %let delim=",";
%else %let delim=";";
/* credit to mjsq - https://stackoverflow.com/a/55642267 */
/* first get headers */
data _null_;
file &outloc &outencoding lrecl=32767 termstr=&termstr;
length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;
call missing(of _all_);
dsid=open("&ds.","i");
num=attrn(dsid,"nvars");
dlm=&delim;
do i=1 to num;
varnm=upcase(varname(dsid,i));
if i=num then dlm='';
%if &headerformat=NAME %then %do;
header=cats(varnm,dlm);
%end;
%else %if &headerformat=LABEL %then %do;
header = cats(coalescec(varlabel(dsid,i),varnm),dlm);
%end;
%else %if &headerformat=SASJS %then %do;
vlen=varlen(dsid,i);
if vartype(dsid,i)='C' then header=cats(varnm,':$char',vlen,'.');
else do;
vfmt=coalescec(varfmt(dsid,i),'0');
fmttype=mcf_getfmttype(vfmt);
if fmttype='DATE' then header=cats(varnm,':date9.');
else if fmttype='DATETIME' then header=cats(varnm,':E8601DT26.6');
else if fmttype='TIME' then header=cats(varnm,':TIME12.');
/**
* there is not much point importing a short length numeric like this,
* eg with best4., as the resulting variable will still be stored as
* length 8. We need a length or format statement to ensure variable
* is creatd with the smaller length...
**/
else if vlen<8 then header=cats(varnm,':best',vlen,'.');
else header=cats(varnm,':best.');
end;
%end;
%else %do;
%put &sysmacroname: Invalid headerformat value (&headerformat);
%return;
%end;
put header @;
end;
rc=close(dsid);
run;
%let varlist=%mf_getvarlist(&ds);
%let vcnt=%sysfunc(countw(&varlist));
/**
* The $quote modifier (without a width) will take the length from the variable
* and increase by two. However this will lead to truncation where the value
* contains double quotes (which are doubled up). To get around this, scan the
* data to see the max number of double quotes, so that the appropriate width
* can be applied in the subsequent step.
*/
data _null_;
set &ds end=last;
%do i=1 %to &vcnt;
%let var=%scan(&varlist,&i);
%local vlen&i;
%if %mf_getvartype(&ds,&var)=C %then %do;
%let dsv1=%mf_getuniquename(prefix=csvcol1_);
%let dsv2=%mf_getuniquename(prefix=csvcol2_);
retain &dsv1 0;
&dsv2=length(&var)+countc(&var,'"');
if &dsv2>&dsv1 then &dsv1=&dsv2;
if last then call symputx(
"vlen&i"
/* should be no shorter than varlen, and no longer than 32767 */
,cats('$quote',min(&dsv1+2,32767),'.')
,'l'
);
%end;
%end;
%let vat=@;
%let vcom=&delim;
%let vmiss=%mf_getuniquename(prefix=csvcol3_);
/* next, export data */
data _null_;
set &ds.;
file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;
if _n_=1 then &vmiss=' ';
%do i=1 %to &vcnt;
%let var=%scan(&varlist,&i);
%if &i=&vcnt %then %do;
%let vat=;
%let vcom=;
%end;
%if %mf_getvartype(&ds,&var)=N %then %do;
%if &headerformat = SASJS %then %do;
%let vcom=&delim;
%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));
%if &fmttype=DATE %then %let vfmt=DATE9.;
%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;
%else %if &fmttype=TIME %then %let vfmt=TIME12.;
%else %do;
%let vfmt=;
%let vcom=;
%end;
%end;
%else %let vcom=;
/* must use period - in order to work in both 9.4 and Viya 3.5 */
if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;
&vmiss=cats('.',&var);
put &vmiss &vat;
end;
else put &var &vfmt &vcom &vat;
%end;
%else %do;
%if &i ne &vcnt %then %let vcom=&delim;
put &var &&vlen&i &vcom &vat;
%end;
%end;
run;
%mend mp_ds2csv;
%macro ms_runstp(pgm
,debug=131
,inputparams=_null_
,inputfiles=_null_
,outref=outweb
,outlogds=_null_
,mdebug=0
);
%local dbg mainref authref boundary;
%let mainref=%mf_getuniquefileref();
%let authref=%mf_getuniquefileref();
%let boundary=%mf_getuniquename();
%if &inputparams=0 %then %let inputparams=_null_;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%mp_abort(iftrue=("&pgm"="")
,mac=&sysmacroname
,msg=%str(Program not provided)
)
/* avoid sending bom marker to API */
%local optval;
%let optval=%sysfunc(getoption(bomfile));
options nobomfile;
/* add params */
data _null_;
file &mainref termstr=crlf lrecl=32767 mod;
length line $1000 name $32 value $32767;
if _n_=1 then call missing(of _all_);
set &inputparams;
put "--&boundary";
line=cats('Content-Disposition: form-data; name="',name,'"');
put line;
put ;
put value;
run;
/* parse input file list */
%local webcount;
%let webcount=0;
data _null_;
set &inputfiles end=last;
length fileref $8 name $32 filename $256;
call symputx(cats('webref',_n_),fileref,'l');
call symputx(cats('webname',_n_),name,'l');
call symputx(cats('webfilename',_n_),filename,'l');
if last then do;
call symputx('webcount',_n_);
call missing(of _all_);
end;
run;
/* write out the input files */
%local i;
%do i=1 %to &webcount;
data _null_;
file &mainref termstr=crlf lrecl=32767 mod;
infile &&webref&i lrecl=32767;
if _n_ = 1 then do;
length line $32767;
line=cats(
'Content-Disposition: form-data; name="'
,"&&webname&i"
,'"; filename="'
,"&&webfilename&i"
,'"'
);
put "--&boundary";
put line;
put "Content-Type: text/plain";
put ;
end;
input;
put _infile_; /* add the actual file to be sent */
run;
%end;
data _null_;
file &mainref termstr=crlf mod;
put "--&boundary--";
run;
data _null_;
file &authref lrecl=1000;
infile "&_sasjs_tokenfile" lrecl=1000;
input;
if _n_=1 then put "Content-Type: multipart/form-data; boundary=&boundary";
put _infile_;
run;
%if &mdebug=1 %then %do;
data _null_;
infile &authref;
input;
put _infile_;
data _null_;
infile &mainref;
input;
put _infile_;
run;
%end;
%local resp_path;
%let resp_path=%sysfunc(pathname(work))/%mf_getuniquename();
filename &outref "&resp_path" lrecl=32767;
/* prepare request*/
proc http method='POST' headerin=&authref in=&mainref out=&outref
url="&_sasjs_apiserverurl.&_sasjs_apipath?_program=&pgm%str(&)_debug=131";
%if &mdebug=1 %then %do;
debug level=2;
%end;
run;
%if (&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)
or &mdebug=1
%then %do;
data _null_;infile &outref;input;putlog _infile_;run;
%end;
%mp_abort(
iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* reset options */
options &optval;
%if &outlogds ne _null_ or &mdebug=1 %then %do;
%local matchstr chopout;
%let matchstr=SASJS_LOGS_SEPARATOR_163ee17b6ff24f028928972d80a26784;
%let chopout=%sysfunc(pathname(work))/%mf_getuniquename(prefix=chop);
%mp_chop("&resp_path"
,matchvar=matchstr
,keep=LAST
,matchpoint=END
,outfile="&chopout"
,mdebug=&mdebug
)
data &outlogds;
infile "&chopout" lrecl=2000;
length line $2000;
line=_infile_;
%if &mdebug=1 %then %do;
putlog line=;
%end;
run;
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &authref;
filename &mainref;
%end;
%mend ms_runstp;
%macro ms_testservice(program,
inputfiles=0,
inputdatasets=0,
inputparams=0,
debug=0,
mdebug=0,
outlib=0,
outref=0,
outlogds=_null_
)/*/STORE SOURCE*/;
%local dbg i var ds1 fref1 chopout1 chopout2;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
/* convert inputdatasets to filerefs */
%if "&inputdatasets" ne "0" %then %do;
%if %quote(&inputfiles)=0 %then %let inputfiles=;
%do i=1 %to %sysfunc(countw(&inputdatasets,%str( )));
%let var=%scan(&inputdatasets,&i,%str( ));
%local dsref&i;
%let dsref&i=%mf_getuniquefileref();
%mp_ds2csv(&var,outref=&&dsref&i,headerformat=SASJS)
%let inputfiles=&inputfiles &&dsref&i:%scan(&var,-1,.);
%end;
%end;
/* parse the filerefs - convert to a dataset */
%let ds1=%mf_getuniquename();
data &ds1;
length fileref $8 name $32 filename $256 var $300;
if "&inputfiles" ne "0" then do;
webcount=countw("&inputfiles");
do i=1 to webcount;
var=scan("&inputfiles",i,' ');
fileref=scan(var,1,':');
name=scan(var,2,':');
filename=cats(name,'.csv');
output;
end;
end;
run;
/* execute the STP */
%let fref1=%mf_getuniquefileref();
%ms_runstp(&program
,debug=&debug
,inputparams=&inputparams
,inputfiles=&ds1
,outref=&fref1
,mdebug=&mdebug
,outlogds=&outlogds
)
/* chop out JSON section */
%local matchstr chopout;
%let matchstr=SASJS_LOGS_SEPARATOR_163ee17b6ff24f028928972d80a26784;
%let chopout=%sysfunc(pathname(work))/%mf_getuniquename(prefix=chop);
%mp_chop("%sysfunc(pathname(&fref1,F))"
,matchvar=matchstr
,keep=FIRST
,matchpoint=START
,offset=-1
,outfile="&chopout"
,mdebug=&mdebug
)
%if &outlib ne 0 %then %do;
libname &outlib json "&chopout";
%end;
%if &outref ne 0 %then %do;
filename &outref "&chopout";
%end;
%if &mdebug=0 %then %do;
filename &webref clear;
filename &fref1 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend ms_testservice;
%macro mf_existfileref(fref
)/*/STORE SOURCE*/;
%local rc;
%let rc=%sysfunc(fileref(&fref));
%if &rc=0 %then %do;
1
%end;
%else %if &rc<0 %then %do;
%put &sysmacroname: Fileref &fref exists but the underlying file does not;
1
%end;
%else %do;
0
%end;
%mend mf_existfileref;
%macro mv_getjobresult(uri=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
,result=WEBOUT_JSON
,outref=0
,outlib=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
/* validation in datastep for better character safety */
%local errmsg errflg;
data _null_;
uri=symget('uri');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
if scan(uri,-1)='state' or scan(uri,1) ne 'jobExecution' then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /jobExecution/jobs/$$$$UUID$$$$"
!!" but is actually like: &uri",'l');
end;
run;
%mp_abort(iftrue=(&errflg=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
%if &outref ne 0 and %mf_existfileref(&outref) ne 1 %then %do;
filename &outref temp;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* fetch job info */
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri&uri";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%if &mdebug=1 %then %do;
data _null_;
infile &fname1 lrecl=32767;
input;
putlog _infile_;
run;
%end;
/* extract results link */
%local lib1 resuri;
%let lib1=%mf_getuniquelibref();
libname &lib1 JSON fileref=&fname1;
data _null_;
set &lib1..results;
call symputx('resuri',_&result,'l');
&dbg putlog "&sysmacroname results: " (_all_)(=);
run;
%mp_abort(iftrue=("&resuri"=".")
,mac=&sysmacroname
,msg=%str(Variable _&result did not exist in the response json)
)
/* extract results */
%local fname2;
%let fname2=%mf_getuniquefileref();
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&resuri/content?limit=10000";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
/* send one char at a time as the json can be very wide */
data _null_;
infile &fname2 recfm=n;
input char $char1. ;
putlog char $char1. @;
run;
%end;
%if &outref ne 0 %then %do;
filename &outref temp;
%mp_binarycopy(inref=&fname2,outref=&outref)
%end;
%if &outlib ne 0 %then %do;
libname &outlib JSON fileref=&fname2;
%end;
%if &mdebug=0 %then %do;
filename &fname1 clear;
filename &fname2 clear;
libname &lib1 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_getjobresult;
%macro mf_getattrn(
libds
,attr
)/*/STORE SOURCE*/;
%local dsid rc;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid = 0 %then %do;
%put %str(WARN)ING: Cannot open %trim(&libds), system message below;
%put %sysfunc(sysmsg());
-1
%end;
%else %do;
%sysfunc(attrn(&dsid,&attr))
%let rc=%sysfunc(close(&dsid));
%end;
%mend mf_getattrn;
%macro mf_nobs(libds
)/*/STORE SOURCE*/;
%mf_getattrn(&libds,NLOBS)
%mend mf_nobs;
%macro mf_existvarlist(libds, varlist
)/*/STORE SOURCE*/;
%if %str(&libds)=%str() or %str(&varlist)=%str() %then %do;
%mf_abort(msg=No value provided to libds(&libds) or varlist (&varlist)!
,mac=mf_existvarlist.sas)
%end;
%local dsid rc i var found;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid=0 %then %do;
%put %str(WARN)ING: unable to open &libds in mf_existvarlist (&dsid);
%end;
%if %sysfunc(attrn(&dsid,NVARS))=0 %then %do;
%put MF_EXISTVARLIST: No variables in &libds ;
0
%return;
%end;
%else %do i=1 %to %sysfunc(countw(&varlist));
%let var=%scan(&varlist,&i);
%if %sysfunc(varnum(&dsid,&var))=0 %then %do;
%let found=&found &var;
%end;
%end;
%let rc=%sysfunc(close(&dsid));
%if %str(&found)=%str() %then %do;
1
%end;
%else %do;
0
%put Vars not found: &found;
%end;
%mend mf_existvarlist;
/** @endcond */
%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);
%local x;
%if ( %length(&prefix) gt 7 ) %then %do;
%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;
0
%return;
%end;
%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;
%put %str(ERR)OR: Invalid prefix (&prefix);
0
%return;
%end;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
%let maxtries=%eval(10**(8-%length(&prefix))-1);
%do x = 0 %to &maxtries;
%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;
&prefix&x
%return;
%end;
%let x = %eval(&x + 1);
%end;
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
0
%mend mf_getuniquelibref;
/** @cond */
%macro mf_existvar(libds /* 2 part dataset name */
, var /* variable name */
)/*/STORE SOURCE*/;
%local dsid rc;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid=0 %then %do;
%put %sysfunc(sysmsg());
0
%end;
%else %if %length(&var)=0 %then %do;
0
%let rc=%sysfunc(close(&dsid));
%end;
%else %do;
%sysfunc(varnum(&dsid,&var))
%let rc=%sysfunc(close(&dsid));
%end;
%mend mf_existvar;
/** @endcond */
%macro mv_getjoblog(uri=0,outref=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg libref1 libref2 loglocation fname1 fname2;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
/* validation in datastep for better character safety */
%local errmsg errflg;
data _null_;
uri=symget('uri');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
if scan(uri,-1)='state' or scan(uri,1) ne 'jobExecution' then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /jobExecution/jobs/$$$$UUID$$$$"
!!" but is actually like:"!!uri,'l');
end;
run;
%mp_abort(iftrue=(&errflg=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
%mp_abort(iftrue=(&outref=0)
,mac=&sysmacroname
,msg=%str(Output fileref should be provided)
)
%if %mf_existfileref(&outref) ne 1 %then %do;
filename &outref temp;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* prepare request*/
%let fname1=%mf_getuniquefileref();
%let fname2=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri&uri";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log loc from &uri;
data _null_;infile &fname1;input;putlog _infile_;run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..root;
call symputx('loglocation',loglocation,'l');
run;
/* validate log path*/
%let errflg=1;
%let errmsg=No loglocation entry in &fname1 fileref;
data _null_;
uri=symget('loglocation');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
else if (scan(uri,1,'/') ne 'compute' or scan(uri,2,'/') ne 'sessions')
and (scan(uri,1,'/') ne 'files' or scan(uri,2,'/') ne 'files')
then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /compute/sessions/$$$$UUID$$$$/jobs/$$$$UUID$$$$"
!!" or /files/files/$$$$UUID$$$$"
!!" but is actually like:"!!uri,'l');
end;
else do;
call symputx('errflg',0,'l');
call symputx('logloc',uri,'l');
end;
run;
%mp_abort(iftrue=(%str(&errflg)=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
/* we have a log uri - now fetch the log */
%&dbg.put &sysmacroname: querying &base_uri&logloc/content;
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&logloc/content?limit=10000";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log content from &base_uri&logloc/content;
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE=400 %then %do;
/* fetch log from parent session */
%let logloc=%substr(&logloc,1,%index(&logloc,%str(/jobs/))-1);
%&dbg.put &sysmacroname: Now querying &base_uri&logloc/log/content;
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&logloc/log/content?limit=10000";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log content from &base_uri&logloc/log/content;
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%end;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201
%then %do;
%if &mdebug ne 1 %then %do; /* have already output above */
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%mp_abort(mac=&sysmacroname
,msg=%str(logfetch: &SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
data _null_;
file &outref mod;
if _n_=1 then do;
put "/** SASJS Viya Job Log Extract start: &uri **/";
end;
set &libref2..items end=last;
%if &mdebug=1 %then %do;
putlog line;
%end;
put line;
if last then do;
put "/** SASJS Viya Job Log Extract end: &uri **/";
end;
run;
%if &mdebug=0 %then %do;
filename &fname1 clear;
filename &fname2 clear;
libname &libref1 clear;
libname &libref2 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_getjoblog;
%macro mv_jobwaitfor(action
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,inds=0
,outds=work.mv_jobwaitfor
,outref=0
,raise_err=0
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&inds"="0")
,mac=&sysmacroname
,msg=%str(input dataset not provided)
)
%mp_abort(iftrue=(%mf_existvar(&inds,uri)=0)
,mac=&sysmacroname
,msg=%str(The URI variable was not found in the input dataset(&inds))
)
%mp_abort(iftrue=(%mf_existvar(&inds,_program)=0)
,mac=&sysmacroname
,msg=%str(The _PROGRAM variable was not found in the input dataset(&inds))
)
%if %mf_nobs(&inds)=0 %then %do;
%put NOTE: Zero observations in &inds, &sysmacroname will now exit;
%return;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
data _null_;
length jobparams $32767;
set &inds end=last;
call symputx(cats('joburi',_n_),substr(uri,1,55),'l');
call symputx(cats('jobname',_n_),_program,'l');
call symputx(cats('jobparams',_n_),jobparams,'l');
if last then call symputx('uricnt',_n_,'l');
run;
%local runcnt;
%if &action=ALL %then %let runcnt=&uricnt;
%else %if &action=ANY %then %let runcnt=1;
%else %let runcnt=&uricnt;
%local fname0 ;
%let fname0=%mf_getuniquefileref();
data &outds;
format _program uri $128. state $32. stateDetails $32. timestamp datetime19.
jobparams $32767.;
call missing (of _all_);
stop;
run;
%local i;
%do i=1 %to &uricnt;
%if "&&joburi&i" ne "0" %then %do;
proc http method='GET' out=&fname0 &oauth_bearer url="&base_uri/&&joburi&i";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end; ;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201
%then %do;
data _null_;infile &fname0;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let status=notset;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 json fileref=&fname0;
data _null_;
length state stateDetails $32;
set &libref1..root;
call symputx('status',state,'l');
call symputx('stateDetails',stateDetails,'l');
run;
libname &libref1 clear;
%if &status=completed or &status=failed or &status=canceled %then %do;
%local plainuri;
%let plainuri=%substr(&&joburi&i,1,55);
proc sql;
insert into &outds set
_program="&&jobname&i",
uri="&plainuri",
state="&status",
stateDetails=symget("stateDetails"),
timestamp=datetime(),
jobparams=symget("jobparams&i");
%let joburi&i=0; /* do not re-check */
/* fetch log */
%if %str(&outref) ne 0 %then %do;
%mv_getjoblog(uri=&plainuri,outref=&outref,mdebug=&mdebug)
%end;
%end;
%else %if &status=idle or &status=pending or &status=running %then %do;
data _null_;
call sleep(1,1);
run;
%end;
%else %do;
%mp_abort(mac=&sysmacroname
,msg=%str(status &status not expected!!)
)
%end;
%if (&raise_err) %then %do;
%if (&status = canceled or &status = failed or %length(&stateDetails)>0)
%then %do;
%if ("&stateDetails" = "%str(war)ning") %then %let SYSCC=4;
%else %let SYSCC=5;
%put %str(ERR)OR: Job &&jobname&i. did not complete. &stateDetails;
%return;
%end;
%end;
%end;
%if &i=&uricnt %then %do;
%local goback;
%let goback=0;
proc sql noprint;
select count(*) into:goback from &outds;
%if &goback lt &runcnt %then %let i=0;
%end;
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname0 clear;
%end;
%mend mv_jobwaitfor;
%macro mf_isblank(param
)/*/STORE SOURCE*/;
%sysevalf(%superq(param)=,boolean)
%mend mf_isblank;
%macro mv_getfoldermembers(root=/
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,outds=mv_getfolders
);
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%if %mf_isblank(&root)=1 %then %let root=/;
options noquotelenmax;
/* request the client details */
%local fname1 libref1;
%let fname1=%mf_getuniquefileref();
%let libref1=%mf_getuniquelibref();
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%if "&root"="/" %then %do;
/* if root just list root folders */
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/rootFolders?limit=1000";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
libname &libref1 JSON fileref=&fname1;
data &outds;
set &libref1..items;
run;
%end;
%else %do;
/* first get parent folder id */
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&root";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
/*data _null_;infile &fname1;input;putlog _infile_;run;*/
libname &libref1 JSON fileref=&fname1;
/* now get the followon link to list members */
%local href cnt;
%let cnt=0;
data _null_;
length rel href $512;
call missing(rel,href);
set &libref1..links;
if rel='members' then do;
url=cats("'","&base_uri",href,"?limit=10000'");
call symputx('href',url,'l');
call symputx('cnt',1,'l');
end;
run;
%if &cnt=0 %then %do;
%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;
%return;
%end;
%local fname2 libref2;
%let fname2=%mf_getuniquefileref();
%let libref2=%mf_getuniquelibref();
proc http method='GET' out=&fname2 &oauth_bearer
url=%unquote(%superq(href));
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
libname &libref2 JSON fileref=&fname2;
data &outds;
length id $36 name $128 uri $64 type $32 description $256;
if _n_=1 then call missing (of _all_);
set &libref2..items;
run;
filename &fname2 clear;
libname &libref2 clear;
%end;
/* clear refs */
filename &fname1 clear;
libname &libref1 clear;
%mend mv_getfoldermembers;
%macro mv_jobexecute(path=0
,name=0
,contextName=SAS Job Execution compute context
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,paramstring=0
,outds=work.mv_jobexecute
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&path"="0")
,mac=&sysmacroname
,msg=%str(Path not provided)
)
%mp_abort(iftrue=("&name"="0")
,mac=&sysmacroname
,msg=%str(Job Name not provided)
)
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
data;run;
%local foldermembers;
%let foldermembers=&syslast;
%mv_getfoldermembers(root=&path
,access_token_var=&access_token_var
,grant_type=&grant_type
,outds=&foldermembers
)
%local joburi;
%let joburi=0;
data _null_;
length name uri $512;
call missing(name,uri);
set &foldermembers;
if name="&name" and uri=:'/jobDefinitions/definitions'
then call symputx('joburi',uri);
run;
%mp_abort(iftrue=("&joburi"="0")
,mac=&sysmacroname
,msg=%str(Job &path/&name not found)
)
/* prepare request*/
%local fname0 fname1;
%let fname0=%mf_getuniquefileref();
%let fname1=%mf_getuniquefileref();
data _null_;
file &fname0;
length joburi contextname $128 paramstring $32765;
joburi=quote(trim(symget('joburi')));
contextname=quote(trim(symget('contextname')));
_program=quote("&path/&name");
paramstring=symget('paramstring');
put '{"jobDefinitionUri":' joburi ;
put ' ,"arguments":{"_contextName":' contextname;
put ' ,"_program":' _program;
if paramstring ne "0" then do;
put ' ,' paramstring;
end;
put '}}';
run;
proc http method='POST' in=&fname0 out=&fname1 &oauth_bearer
url="&base_uri/jobExecution/jobs";
headers "Content-Type"="application/vnd.sas.job.execution.job.request+json"
"Accept"="application/vnd.sas.job.execution.job+json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname0;input;putlog _infile_;run;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%local libref;
%let libref=%mf_getuniquelibref();
libname &libref JSON fileref=&fname1;
data &outds;
set &libref..links;
_program="&path/&name";
run;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname0 clear;
filename &fname1 clear;
libname &libref;
%end;
%mend mv_jobexecute;
%macro mv_jobflow(inds=0,outds=work.mv_jobflow
,maxconcurrency=8
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,outref=0
,raise_err=0
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%put inds vars:;
data _null_;
set &inds;
putlog (_all_)(=);
run;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&inds"="0")
,mac=&sysmacroname
,msg=%str(Input dataset was not provided)
)
%mp_abort(iftrue=(%mf_existVarList(&inds,_PROGRAM)=0)
,mac=&sysmacroname
,msg=%str(The _PROGRAM column must exist on input dataset &inds)
)
%mp_abort(iftrue=(&maxconcurrency<1)
,mac=&sysmacroname
,msg=%str(The maxconcurrency variable should be a positive integer)
)
/* set defaults if not provided */
%if %mf_existVarList(&inds,_CONTEXTNAME FLOW_ID)=0 %then %do;
data &inds;
%if %mf_existvarList(&inds,_CONTEXTNAME)=0 %then %do;
length _CONTEXTNAME $128;
retain _CONTEXTNAME "SAS Job Execution compute context";
%end;
%if %mf_existvarList(&inds,FLOW_ID)=0 %then %do;
retain FLOW_ID 0;
%end;
set &inds;
&dbg. putlog (_all_)(=);
run;
%end;
%local missings;
proc sql noprint;
select count(*) into: missings
from &inds
where flow_id is null or _program is null;
%mp_abort(iftrue=(&missings>0)
,mac=&sysmacroname
,msg=%str(input dataset has &missings missing values for FLOW_ID or _PROGRAM)
)
%if %mf_nobs(&inds)=0 %then %do;
%put No observations in &inds! Leaving macro &sysmacroname;
%return;
%end;
/* ensure output table is available */
data &outds;run;
proc sql;
drop table &outds;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* get flows */
proc sort data=&inds;
by flow_id;
run;
data _null_;
set &inds (keep=flow_id) end=last;
by flow_id;
if last.flow_id then do;
cnt+1;
call symputx(cats('flow',cnt),flow_id,'l');
end;
if last then call symputx('flowcnt',cnt,'l');
run;
/* prepare temporary datasets and frefs */
%local fid jid jds jjson jdsapp jdsrunning jdswaitfor jfref;
data;run;%let jds=&syslast;
data;run;%let jjson=&syslast;
data;run;%let jdsapp=&syslast;
data;run;%let jdsrunning=&syslast;
data;run;%let jdswaitfor=&syslast;
%let jfref=%mf_getuniquefileref();
/* start loop */
%do fid=1 %to &flowcnt;
%if not ( &raise_err and &syscc ) %then %do;
%put preparing job attributes for flow &&flow&fid;
%local jds jcnt;
data &jds(drop=_contextName _program);
set &inds(where=(flow_id=&&flow&fid));
if _contextName='' then _contextName="SAS Job Execution compute context";
call symputx(cats('job',_n_),_program,'l');
call symputx(cats('context',_n_),_contextName,'l');
call symputx('jcnt',_n_,'l');
&dbg. if _n_= 1 then putlog "Loop &fid";
&dbg. putlog (_all_)(=);
run;
%put exporting job variables in json format;
%do jid=1 %to &jcnt;
data &jjson;
set &jds;
if _n_=&jid then do;
output;
stop;
end;
run;
proc json out=&jfref;
export &jjson / nosastags fmtnumeric;
run;
data _null_;
infile &jfref lrecl=32767;
input;
jparams=cats('jparams',symget('jid'));
call symputx(jparams,substr(_infile_,3,length(_infile_)-4));
run;
%local jobuid&jid;
%let jobuid&jid=0; /* used in next loop */
%end;
%local concurrency completed;
%let concurrency=0;
%let completed=0;
proc sql; drop table &jdsrunning;
%do jid=1 %to &jcnt;
/**
* now we can execute the jobs up to the maxconcurrency setting
*/
%if "&&job&jid" ne "0" %then %do; /* this var is zero if job finished */
/* check to see if the job finished in the previous round */
%if %sysfunc(exist(&outds))=1 %then %do;
%local jobcheck; %let jobcheck=0;
proc sql noprint;
select count(*) into: jobcheck
from &outds where uuid="&&jobuid&jid";
%if &jobcheck>0 %then %do;
%put &&job&jid in flow &fid with uid &&jobuid&jid completed!;
%let job&jid=0;
%end;
%end;
/* check if job was triggered and, if
so, if we have enough slots to run? */
%if ("&&jobuid&jid"="0") and (&concurrency<&maxconcurrency) %then %do;
/* But only start if no issues detected so far */
%if not ( &raise_err and &syscc ) %then %do;
%local jobname jobpath;
%let jobname=%scan(&&job&jid,-1,/);
%let jobpath=
%substr(&&job&jid,1,%length(&&job&jid)-%length(&jobname)-1);
%put executing &jobpath/&jobname with paramstring &&jparams&jid;
%mv_jobexecute(path=&jobpath
,name=&jobname
,paramstring=%superq(jparams&jid)
,outds=&jdsapp
,contextname=&&context&jid
)
data &jdsapp;
format jobparams $32767.;
set &jdsapp(where=(method='GET' and rel='state'));
jobparams=symget("jparams&jid");
/* uri here has the /state suffix */
uuid=scan(uri,-2,'/');
call symputx("jobuid&jid",uuid,'l');
run;
proc append base=&jdsrunning data=&jdsapp;
run;
%let concurrency=%eval(&concurrency+1);
/* sleep one second after every request to smooth the impact */
data _null_;
call sleep(1,1);
run;
%end;
%else %do; /* Job was skipped due to problems */
%put jobid &&job&jid in flow &fid skipped due to SYSCC (&syscc);
%let completed = %eval(&completed+1);
%let job&jid=0; /* Indicate job has finished */
%end;
%end;
%end;
%if &jid=&jcnt %then %do;
/* we are at the end of the loop - check which jobs have finished */
%mv_jobwaitfor(ANY,inds=&jdsrunning,outds=&jdswaitfor,outref=&outref
,raise_err=&raise_err,mdebug=&mdebug)
%local done;
%let done=%mf_nobs(&jdswaitfor);
%if &done>0 %then %do;
%let completed=%eval(&completed+&done);
%let concurrency=%eval(&concurrency-&done);
data &jdsapp;
set &jdswaitfor;
flow_id=&&flow&fid;
uuid=scan(uri,-1,'/');
run;
proc append base=&outds data=&jdsapp;
run;
%end;
proc sql;
delete from &jdsrunning
where uuid in (select uuid from &outds
where state in ('canceled','completed','failed')
);
/* loop again if jobs are left */
%if &completed < &jcnt %then %do;
%let jid=0;
%put looping flow &fid again;
%put &completed of &jcnt jobs completed, &concurrency jobs running;
%end;
%end;
%end;
%end;
%else %do;
%put Flow &&flow&fid skipped due to SYSCC (&syscc);
%end;
/* back up and execute the next flow */
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_jobflow;
%macro mx_testservice(program,
inputfiles=0,
inputdatasets=0,
inputparams=0,
debug=log,
mdebug=0,
outlib=0,
outref=0,
viyaresult=WEBOUT_JSON,
viyacontext=SAS Job Execution compute context
);
%local dbg pcnt fref1 fref2 webref webrefpath i webcount var platform;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
/* sanitise inputparams */
%let pcnt=0;
%if &inputparams ne 0 %then %do;
data _null_;
set &inputparams;
if not nvalid(name,'v7') then putlog (_all_)(=);
else if name in (
'program','inputfiles','inputparams','debug','outlib','outref'
) then putlog (_all_)(=);
else do;
x+1;
call symputx(name,quote(cats(value)),'l');
call symputx(cats('pval',x),name,'l');
call symputx('pcnt',x,'l');
end;
run;
%mp_abort(iftrue= (%mf_nobs(&inputparams) ne &pcnt)
,mac=&sysmacroname
,msg=%str(Invalid values in &inputparams)
)
%end;
/* convert inputdatasets to filerefs */
%if "&inputdatasets" ne "0" %then %do;
%if %quote(&inputfiles)=0 %then %let inputfiles=;
%do i=1 %to %sysfunc(countw(&inputdatasets,%str( )));
%let var=%scan(&inputdatasets,&i,%str( ));
%local dsref&i;
%let dsref&i=%mf_getuniquefileref();
%mp_ds2csv(&var,outref=&&dsref&i,headerformat=SASJS)
%let inputfiles=&inputfiles &&dsref&i:%scan(&var,-1,.);
%end;
%end;
%let platform=%mf_getplatform();
%let fref1=%mf_getuniquefileref();
%let fref2=%mf_getuniquefileref();
%let webref=%mf_getuniquefileref();
%let webrefpath=%sysfunc(pathname(work))/%mf_getuniquename();
/* mp_chop requires a physical path as input */
filename &webref "&webrefpath";
%if &platform=SASMETA %then %do;
/* parse the input files */
%if %quote(&inputfiles) ne 0 %then %do;
%let webcount=%sysfunc(countw(&inputfiles));
%put &=webcount;
%do i=1 %to &webcount;
%let var=%scan(&inputfiles,&i,%str( ));
%local webfref&i webname&i;
%let webref&i=%scan(&var,1,%str(:));
%let webname&i=%scan(&var,2,%str(:));
%put webref&i=&&webref&i;
%put webname&i=&&webname&i;
%end;
%end;
%else %let webcount=0;
proc stp program="&program";
inputparam _program="&program"
%do i=1 %to &webcount;
%if &webcount=1 %then %do;
_webin_fileref="&&webref&i"
_webin_name="&&webname&i"
%end;
%else %do;
_webin_fileref&i="&&webref&i"
_webin_name&i="&&webname&i"
%end;
%end;
_webin_file_count="&webcount"
_debug="&debug"
%do i=1 %to &pcnt;
/* resolve name only, proc stp fetches value */
&&pval&i=&&&&&&pval&i
%end;
;
%do i=1 %to &webcount;
inputfile &&webref&i;
%end;
outputfile _webout=&webref;
run;
data _null_;
infile &webref;
file &fref1;
input;
length line $10000;
if index(_infile_,'>>weboutBEGIN<<') then do;
line=tranwrd(_infile_,'>>weboutBEGIN<<','');
put line;
end;
else if index(_infile_,'>>weboutEND<<') then do;
line=tranwrd(_infile_,'>>weboutEND<<','');
put line;
stop;
end;
else put _infile_;
run;
data _null_;
infile &fref1;
input;
put _infile_;
run;
%if &outlib ne 0 %then %do;
libname &outlib json (&fref1);
%end;
%if &outref ne 0 %then %do;
filename &outref temp;
%mp_binarycopy(inref=&webref,outref=&outref)
%end;
%end;
%else %if &platform=SASVIYA %then %do;
/* prepare inputparams */
%local ds1;
%let ds1=%mf_getuniquename();
%if "&inputparams" ne "0" %then %do;
proc transpose data=&inputparams out=&ds1;
id name;
var value;
run;
%end;
%else %do;
data &ds1;run;
%end;
/* parse the input files - convert to sasjs params */
%local webcount i var sasjs_tables;
%if %quote(&inputfiles) ne 0 %then %do;
%let webcount=%sysfunc(countw(&inputfiles));
%put &=webcount;
%do i=1 %to &webcount;
%let var=%scan(&inputfiles,&i,%str( ));
%local webfref&i webname&i sasjs&i.data;
%let webref&i=%scan(&var,1,%str(:));
%let webname&i=%scan(&var,2,%str(:));
%put webref&i=&&webref&i;
%put webname&i=&&webname&i;
%let sasjs_tables=&sasjs_tables &&webname&i;
data _null_;
infile &&webref&i lrecl=32767;
input;
if _n_=1 then call symputx("sasjs&i.data",_infile_);
else call symputx(
"sasjs&i.data",cats(symget("sasjs&i.data"),'0D0A'x,_infile_)
);
putlog "&sysmacroname infile: " _infile_;
run;
data &ds1;
set &ds1;
length sasjs&i.data $32767 sasjs_tables $1000;
sasjs&i.data=symget("sasjs&i.data");
sasjs_tables=symget("sasjs_tables");
run;
%end;
%end;
%else %let webcount=0;
data &ds1;
retain _program "&program";
retain _contextname "&viyacontext";
set &ds1;
putlog "&sysmacroname inputparams:";
putlog (_all_)(=);
run;
%mv_jobflow(inds=&ds1
,maxconcurrency=1
,outds=work.results
,outref=&fref1
,mdebug=&mdebug
)
/* show the log */
data _null_;
infile &fref1;
input;
putlog _infile_;
run;
/* get the uri to fetch results */
data _null_;
set work.results;
call symputx('uri',uri);
putlog "&sysmacroname: fetching results for " uri;
run;
/* fetch results from webout.json */
%mv_getjobresult(uri=&uri,
result=&viyaresult,
outref=&outref,
outlib=&outlib,
mdebug=&mdebug
)
%end;
%else %if &platform=SASJS %then %do;
%ms_testservice(&program
,inputfiles=&inputfiles
,inputdatasets=&inputdatasets
,inputparams=&inputparams
,debug=&debug
,mdebug=&mdebug
,outlib=&outlib
,outref=&outref
)
%end;
%else %do;
%put %str(ERR)OR: Unrecognised platform: &platform;
%end;
%if &mdebug=0 %then %do;
filename &fref1 clear;
%if &platform ne SASJS %then %do;
filename &fref2 clear;
filename &webref clear;
%end;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mx_testservice;
* BuildInit start;
/**
@file buildinitviya.sas
@brief initialisation for viya build program
**/
options nonotes nomprint;
* BuildInit end;
%let path=services;
%let filename=clickme.html;
filename filecode temp lrecl=32767;
data _null_;
file filecode;
put 'PCFET0NUWVBFIGh0bWw+PGh0bWwgbGFuZz0iZW4iPjxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHRpdGxlPkRhdGEgQ29udHJvbGxlcjwvdGl0bGU+CiAgICA8IS0tIDxiYXNlIGhyZWY9Ii8iPiAtLT4KCiAgICA8IS0tIG1ldGEgdGFncyAtLT4KICAgIDxtZXRhIG5h'@;
put 'bWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIj4KICAgIDxtZXRhIGl0ZW1wcm9wPSJuYW1lIiBjb250ZW50PSJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU8KuIj4KICAgIDxtZXRhIGl0ZW1wcm9wPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQ2Fw'@;
put 'dHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSI+CiAgICA8bWV0YSBpdGVtcHJvcD0iaW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9pbWcvZGNfYmdfQXNzZXQtNUAyeC5wbmciPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVudD0iaHR0cDov'@;
put 'L2RlbW8uZGF0YWNvbnRyb2xsZXIuaW8iPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnRpdGxlIiBjb250ZW50PSJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU8KuIj4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzpk'@;
put 'ZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9pbWcvZGNfYmdfQXNzZXQtNUAyeC5wbmciPgoKICAgIDxtZXRhIG5hbWU9'@;
put 'InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgogICAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9Ii9T'@;
put 'QVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL2ltYWdlcy9mYXZpY29uLmljbyI+CiAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9zdHlsZXMuNThkZDRj'@;
put 'N2Y2YTViNDg1NS5jc3MiPjwvaGVhZD4KCiAgPCEtLQogICAgIyMgU0FTSlMgQWRhcHRlciBjb25maWcgZGV0YWlscyAjIwoKICAgICogYXBwTG9jOiBUaGUgbG9jYXRpb24gaW4gbWV0YWRhdGEgb3IgU0FTIGRyaXZlIHdoZXJlIERDIHdpbGwgYmUgZGVwbG95ZWQKICAgICogc2VydmVyVHlw'@;
put 'ZTogZWl0aGVyIFNBUzksIFNBU1ZJWUEgb3IgU0FTSlMKICAgICogbG9naW5NZWNoYW5pc206IFVzZSAnRGVmYXVsdCcgZm9yIHJlZ3VsYXIgKHVzZXIvcGFzcykgbG9naW5zLCBvciAnUmVkaXJlY3RlZCcgZm9yIDJGQS9TU08KICAgICogZGVidWc6IFdoZXRoZXIgdG8gZW5hYmxlIGRlYnVn'@;
put 'IG9uIHN0YXJ0dXAKCiAgICAjIyBWaXlhIG9ubHkgc2V0dGluZ3MgIyMKICAgICogYWRtaW5Hcm91cDogVGhpcyBncm91cCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyAoVml5YSBPbmx5KQogICAgKiBkY1BhdGg6IFRoZSBwaHlzaWNhbCBsb2NhdGlvbiBpbiB3aGljaCB0byBkZXBs'@;
put 'b3kgdGhlIHN0YWdpbmcgYXJlYSAoVml5YSBvbmx5KQogICAgKiB1c2VDb21wdXRlQXBpOiBDb25uZWN0aW9uIG1ldGhvZCAoVml5YSBvbmx5KQogICAgKiBjb250ZXh0TmFtZTogQ29tcHV0ZSBDb250ZXh0IChWaXlhIG9ubHkpCgogIC0tPgoKICA8Ym9keSBjZHMtdGhlbWU9ImxpZ2h0IiBj'@;
put 'bGFzcz0ibS0wIj48c2FzanMgc2VydmVydXJsPSIiIGFwcGxvYz0iL1B1YmxpYy9hcHAvZGMiIHNlcnZlcnR5cGU9IlNBU1ZJWUEiIGxvZ2lubWVjaGFuaXNtPSJEZWZhdWx0IiBkZWJ1Zz0iZmFsc2UiIHVzZWNvbXB1dGVhcGk9InRydWUiIGNvbnRleHRuYW1lPSJTQVMgSm9iIEV4ZWN1dGlv'@;
put 'biBjb21wdXRlIGNvbnRleHQiIGFkbWluZ3JvdXA9InNlYy1zYXM5LXByZC1pbnQtc2FzcGxhdGZvcm0tMzAwMTE0c2FzanMiIGRjcGF0aD0iL3RtcC9kYyIgaG90bGljZW5jZWtleT0ibm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24iPgogIDwvc2FzanM+CgogIAogICAgPG15LWFwcD48'@;
put 'L215LWFwcD4KICA8c2NyaXB0IHNyYz0iL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvcnVudGltZS40MDJmYzNjZmJjN2UxYmQ0LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9Q'@;
put 'dWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9wb2x5ZmlsbHMuZGYyN2EyNDY1NDBlYTVlZS5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvc2NyaXB0cy5mNDE4ZDdlNzFkYmZk'@;
put 'MzA5LmpzIiBkZWZlcj0iIj48L3NjcmlwdD48c2NyaXB0IHNyYz0iL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvbWFpbi4yY2Q0YjRiN2U0ODE5ZGMxLmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PgoKCiAgICA8IS0tIAogICAgICBUbyBwcmV2'@;
put 'ZW50IHJlZGlyZWN0cyAvIHByZXNlcnZlIHRoZSBVUkwgd2hlbiBzdHJlYW1pbmcgCiAgICAgIEhUTUwgZnJvbSBWaXlhLCB3ZSByZWNvbW1lbmQgdXNpbmcgdGhlIF9kZWJ1Zz0yIHBhcmFtZXRlcgogICAgICB3aGljaCB3aWxsIHNlcnZlIHRoZSBjb250ZW50IGluIGFuIGlmcmFtZS4gIFRo'@;
put 'ZSBmb2xsb3dpbmcgCiAgICAgIGNvZGUgd2lsbCB0aGVuIG1vZGlmeSB0aGUgcGFyZW50IGlmcmFtZSB0byBzZXJ2ZSB0aGUgY29udGVudAogICAgICBpbiBmdWxsIHNjcmVlbi4KICAgIC0tPgogICAgPHNjcmlwdD4KICAgIGlmICh3aW5kb3cuZnJhbWVFbGVtZW50KXsKICAgICAgd2luZG93'@;
put 'LmZyYW1lRWxlbWVudC5zdHlsZT0iaGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtwb3NpdGlvbjphYnNvbHV0ZSI7CiAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJhbGxvd2Z1bGxzY3JlZW4iLCIiKQogICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgi'@;
put 'ZnJhbWVib3JkZXIiLCIwIikKICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbmhlaWdodCIsIjAiKQogICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2lud2lkdGgiLCIwIikKICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zZXRB'@;
put 'dHRyaWJ1dGUoInNjcm9sbGluZyIsImF1dG8iKQogICAgICB3aW5kb3cuZm9jdXMoKQogICAgfQogICAgPC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let path=services/admin;
%let service=exportconfig;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_ds2cards(base_ds, tgt_ds=';
put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"';
put ',maxobs=max';
put ',random_sample=NO';
put ',showlog=YES';
put ',outencoding=';
put ',append=NO';
put ')/*/STORE SOURCE*/;';
put '%local i setds nvars;';
put '%if not %sysfunc(exist(&base_ds)) %then %do;';
put '%put %str(WARN)ING: &base_ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;';
put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;';
put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);';
put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";';
put '%if ("&append" = "" or "&append" = "NO") %then %let append=;';
put '%else %let append=mod;';
put '/* get varcount */';
put '%let nvars=0;';
put 'proc sql noprint;';
put 'select count(*) into: nvars from dictionary.columns';
put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";';
put '%if &nvars=0 %then %do;';
put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;';
put '%return;';
put '%end;';
put '/* get indexes */';
put 'proc sort';
put 'data=sashelp.vindex(';
put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")';
put ')';
put 'out=_data_;';
put 'by indxname indxpos;';
put 'run;';
put '%local indexes;';
put 'data _null_;';
put 'set &syslast end=last;';
put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');';
put 'by indxname indxpos;';
put 'length vars $32767 nom uni $8;';
put 'retain vars;';
put 'if first.indxname then do;';
put 'idxcnt+1;';
put 'nom='''';';
put 'uni='''';';
put 'vars=name;';
put 'end;';
put 'else vars=catx('' '',vars,name);';
put 'if last.indxname then do;';
put 'if nomiss=''yes'' then nom=''/nomiss'';';
put 'if unique=''yes'' then uni=''/unique'';';
put 'call symputx(''indexes''';
put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)';
put ',''l'');';
put 'end;';
put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');';
put 'run;';
put 'data;run;';
put '%let setds=&syslast;';
put 'proc sql';
put '%if %datatyp(&maxobs)=NUMERIC %then %do;';
put 'outobs=&maxobs;';
put '%end;';
put ';';
put 'create table &setds as select * from &base_ds';
put '%if &random_sample=YES %then %do;';
put 'order by ranuni(42)';
put '%end;';
put ';';
put 'reset outobs=max;';
put 'create table datalines1 as';
put 'select name,type,length,varnum,format,label from dictionary.columns';
put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"';
put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";';
put '/**';
put 'Due to long decimals cannot use best. format';
put 'So - use bestd. format and then use character functions to strip trailing';
put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets';
put 'note2err when there are missings.';
put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0';
put ',put(VARIABLE,best32.)';
put ',substrn(put(VARIABLE,bestd32.),1';
put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));';
put '**/';
put 'data datalines_2;';
put 'format dataline $32000.;';
put 'set datalines1 (where=(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));';
put 'if type=''num'' then dataline=';
put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0';
put ',put('',name,'',best32.-l)';
put ',substrn(put('',name,'',bestd32.-l),1';
put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');';
put '/**';
put '* binary data must be converted, to store in text format. It is identified';
put '* by the presence of the $HEX keyword in the format.';
put '*/';
put 'else if upcase(format)=:''$HEX'' then';
put 'dataline=cats(''put(trim('',name,''),'',format,'')'');';
put '/**';
put '* There is no easy way to store line breaks in a cards file.';
put '* To discuss this, use: https://github.com/sasjs/core/issues/80';
put '* Removing all nonprintables with kw (keep writeable)';
put '*/';
put 'else dataline=cats(''compress('',name,'', ,"kw")'');';
put 'run;';
put 'proc sql noprint;';
put 'select dataline into: datalines separated by '','' from datalines_2;';
put '%local';
put 'process_dttm_flg';
put 'valid_from_dttm_flg';
put 'valid_to_dttm_flg';
put ';';
put '%let process_dttm_flg = N;';
put '%let valid_from_dttm_flg = N;';
put '%let valid_to_dttm_flg = N;';
put 'data _null_;';
put 'set datalines1 ;';
put '/* build attrib statement */';
put 'if type=''char'' then type2=''$'';';
put 'if strip(format) ne '''' then format2=cats(''format='',format);';
put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));';
put 'str1=catx('' '',(put(name,$33.)||''length='')';
put ',put(cats(type2,length),$7.)||format2,label2);';
put '/* Build input statement */';
put 'if upcase(format)=:''$HEX'' then type3='':''!!format;';
put 'else if type=''char'' then type3='':$char.'';';
put 'str2=put(name,$33.)||type3;';
put 'if(upcase(name) = "PROCESSED_DTTM") then';
put 'call symputx("process_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_FROM_DTTM") then';
put 'call symputx("valid_from_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_TO_DTTM") then';
put 'call symputx("valid_to_dttm_flg", "Y", "L");';
put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");';
put 'call symputx(cats("input_stmt_", put(_N_, 8.))';
put ', ifc(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");';
put 'run;';
put 'data _null_;';
put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;';
put 'length __attrib $32767;';
put 'if _n_=1 then do;';
put 'put ''/**'';';
put 'put '' @file'';';
put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";';
put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";';
put 'put " Source: https://github.com/sasjs/core";';
put 'put '' @cond '';';
put 'put ''**/'';';
put 'put "data &tgt_ds &indexes;";';
put 'put "attrib ";';
put '%do i = 1 %to &nvars;';
put '__attrib=symget("attrib_stmt_&i");';
put 'put __attrib;';
put '%end;';
put 'put ";";';
put '%if &process_dttm_flg. eq Y %then %do;';
put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';';
put '%end;';
put '%if &valid_from_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_FROM_DTTM &low_date;'';';
put '%end;';
put '%if &valid_to_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_TO_DTTM &high_date;'';';
put '%end;';
put 'if __nobs=0 then do;';
put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';';
put 'put ''stop;'';';
put 'put ''run;'';';
put 'end;';
put 'else do;';
put 'put "infile cards dsd;";';
put 'put "input ";';
put '%do i = 1 %to &nvars.;';
put '%if(%length(&&input_stmt_&i..)) %then';
put 'put " &&input_stmt_&i..";';
put ';';
put '%end;';
put 'put ";";';
put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';';
put 'put "datalines4;";';
put 'end;';
put 'end;';
put 'set &setds end=__lastobs nobs=__nobs;';
put '/* remove all formats for write purposes - some have long underlying decimals */';
put 'format _numeric_ best30.29;';
put 'length __dataline $32767;';
put '__dataline=catq(''cqtmb'',&datalines);';
put 'put __dataline;';
put 'if __lastobs then do;';
put 'put '';;;;'';';
put 'put ''run;'';';
put 'put ''/** @endcond **/'';';
put 'stop;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &setds;';
put 'quit;';
put '%if &showlog=YES %then %do;';
put 'data _null_;';
put 'infile &cards_file lrecl=32767;';
put 'input;';
put 'put _infile_;';
put 'run;';
put '%end;';
put '%put NOTE: CARDS FILE SAVED IN:;';
put '%put NOTE-;%put NOTE-;';
put '%put NOTE- %sysfunc(dequote(&cards_file.));';
put '%put NOTE-;%put NOTE-;';
put '%mend mp_ds2cards;';
put '/** @endcond **/';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Downloads zip file of DC customer configurations';
put '@details Zip contains several excel files, containing the customer specific';
put '(non-DC) configurations. Useful when migrating to a new instance of';
put 'Data Controller.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li mp_ds2cards.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let work=%sysfunc(pathname(work));';
put '/* excel does not work in all envs */';
put '%let mime=application/vnd.ms-excel;';
put '%let dbms=EXCEL;';
put '%let mime=application/csv;';
put '%let dbms=CSV;';
put '%let ext=csv;';
put '%macro conditional_export(ds);';
put '%if %mf_nobs(&ds)>0 %then %do;';
put 'PROC EXPORT DATA= &ds OUTFILE= "&work/&ds..&ext"';
put 'DBMS=&dbms REPLACE;';
put 'RUN;';
put 'ods package(ProdOutput) add file="&work/&ds..&ext" mimetype="&mime";';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%nrstr(syscc=&syscc after &ds prep)';
put ')';
put '%mend conditional_export;';
put 'ods package(ProdOutput) open nopf;';
put 'data MPE_ALERTS;';
put 'set &mpelib..MPE_ALERTS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_ALERTS)';
put 'data MPE_COLUMN_LEVEL_SECURITY;';
put 'set &mpelib..MPE_COLUMN_LEVEL_SECURITY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'where also CLS_LIBREF ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_COLUMN_LEVEL_SECURITY)';
put 'data MPE_CONFIG;';
put 'set &mpelib..MPE_CONFIG;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_CONFIG)';
put 'data MPE_DATADICTIONARY;';
put 'set &mpelib..MPE_DATADICTIONARY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'if DD_SOURCE=:"&mpelib" then do;';
put '/* nothing */';
put 'end;';
put 'else output;';
put 'run;';
put '%conditional_export(MPE_DATADICTIONARY)';
put 'data MPE_EMAILS;';
put 'set &mpelib..MPE_EMAILS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_EMAILS)';
put 'data MPE_EXCEL_CONFIG;';
put 'set &mpelib..MPE_EXCEL_CONFIG;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_EXCEL_CONFIG)';
put 'data MPE_GROUPS;';
put 'set &mpelib..MPE_GROUPS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_GROUPS)';
put 'data MPE_ROW_LEVEL_SECURITY;';
put 'set &mpelib..MPE_ROW_LEVEL_SECURITY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_ROW_LEVEL_SECURITY)';
put 'data MPE_SECURITY;';
put 'set &mpelib..MPE_SECURITY;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_SECURITY)';
put 'data MPE_SELECTBOX;';
put 'set &mpelib..MPE_SELECTBOX;';
put 'where &dc_dttmtfmt. le ver_to_dttm;';
put 'where also select_lib ne "&mpelib";';
put 'drop ver_: selectbox_rk;';
put 'run;';
put '%conditional_export(MPE_SELECTBOX)';
put 'data MPE_TABLES;';
put 'set &mpelib..MPE_TABLES;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'where also LIBREF ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_TABLES)';
put 'data MPE_VALIDATIONS;';
put 'set &mpelib..MPE_VALIDATIONS;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'where also BASE_LIB ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_VALIDATIONS)';
put '/* finish up zip file */';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name="DCBACKUP.zip" archive_path="&work");';
put 'ods package(ProdOutput) close;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%nrstr(syscc=&syscc after zip prep)';
put ')';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&work/DCBACKUP.zip)';
put ',outname=DCBACKUP.zip';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=exportdb;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_existfileref(fref';
put ')/*/STORE SOURCE*/;';
put '%local rc;';
put '%let rc=%sysfunc(fileref(&fref));';
put '%if &rc=0 %then %do;';
put '1';
put '%end;';
put '%else %if &rc<0 %then %do;';
put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;';
put '1';
put '%end;';
put '%else %do;';
put '0';
put '%end;';
put '%mend mf_existfileref;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema=';
put ',applydttm=NO';
put ')/*/STORE SOURCE*/;';
put '/* check fileref is assigned */';
put '%if %mf_existfileref(&fref)=0 %then %do;';
put 'filename &fref temp ;';
put '%end;';
put '%if %length(&libref)=0 %then %let libref=WORK;';
put '%let flavour=%upcase(&flavour);';
put 'proc sql noprint;';
put 'create table _data_ as';
put 'select * from dictionary.tables';
put 'where upcase(libname)="%upcase(&libref)"';
put 'and memtype=''DATA'' /* views not currently supported */';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local tabinfo; %let tabinfo=&syslast;';
put 'create table _data_ as';
put 'select * from dictionary.columns';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local colinfo; %let colinfo=&syslast;';
put '%local dsnlist;';
put 'select distinct upcase(memname) into: dsnlist';
put 'separated by '' ''';
put 'from &syslast';
put ';';
put 'create table _data_ as';
put 'select * from dictionary.indexes';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put 'order by idxusage, indxname, indxpos';
put ';';
put '%local idxinfo; %let idxinfo=&syslast;';
put '/* Extract all Primary Key and Unique data constraints */';
put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)';
put '%local colconst; %let colconst=&syslast;';
put '%macro addConst();';
put '%global constraints_used;';
put 'data _null_;';
put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;';
put 'set &colconst(';
put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))';
put ') end=last;';
put 'file &fref mod;';
put 'by constraint_type constraint_name;';
put 'retain constraints_used;';
put 'constraint_name_orig=constraint_name;';
put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';';
put 'else ctype=strip(constraint_type);';
put '%if &flavour=TSQL %then %do;';
put 'column_name=catt(''['',column_name,'']'');';
put 'constraint_name=catt(''['',constraint_name,'']'');';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'column_name=catt(''"'',column_name,''"'');';
put 'constraint_name=catt(''"'',constraint_name,''"'');';
put '%end;';
put 'if first.constraint_name then do;';
put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);';
put 'put " ,CONSTRAINT " constraint_name ctype "(" ;';
put 'put '' '' column_name;';
put 'end;';
put 'else put '' ,'' column_name;';
put 'if last.constraint_name then do;';
put 'put " )";';
put 'call symput(''constraints_used'',strip(constraints_used));';
put 'end;';
put 'run;';
put '%put &=constraints_used;';
put '%mend addConst;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";';
put 'run;';
put '%local x curds;';
put '%if &flavour=SAS %then %do;';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";';
put 'put "proc sql;";';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'length lab $1024 typ $20;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table &libref..&curds(";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view &libref..&curds(";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'if length(format)>1 then fmt=" format="!!cats(format);';
put 'if length(label)>1 then';
put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");';
put 'if notnull=''yes'' then notnul='' not null'';';
put 'if type=''char'' then typ=cats(''char('',length,'')'');';
put 'else if length ne 8 then typ=''num length=''!!cats(length);';
put 'else typ=''num'';';
put 'put name typ fmt notnul lab;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '/* ds=cats(libname,''.'',memname); */';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;';
put 'put '' '' name ;';
put 'end;';
put 'else put '' ,'' name ;';
put '*else put '' ,'' name ;';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '/*';
put 'ods output IntegrityConstraints=ic;';
put 'proc contents data=testali out2=info;';
put 'run;';
put '*/';
put '%end;';
put '%end;';
put '%else %if &flavour=TSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''SQLSVR'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* TSQL Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table [&schema].[&curds](";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view [&schema].[&curds](";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';';
put '%end;';
put 'else if type=''num'' then fmt=''[decimal](18,2)'';';
put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';';
put 'else fmt=cats(''[varchar](max)'');';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put 'put "[" name +(-1) "]" fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '*ds=cats(libname,''.'',memname);';
put 'if first.indxname then do;';
put '/* add nonclustered in case of multiple unique indexes */';
put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';';
put 'put '' ['' name +(-1) '']'';';
put 'end;';
put 'else put '' ,['' name +(-1) '']'';';
put 'if last.indxname then do;';
put 'put '' )'';';
put 'end;';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'put '')'';';
put 'put ''GO'';';
put 'run;';
put '/* add extended properties for labels */';
put 'data _null_;';
put 'file &fref mod;';
put 'length nm $64 lab $1024;';
put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;';
put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");';
put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");';
put 'put '' '';';
put 'put "EXEC sys.sp_addextendedproperty ";';
put 'put " @name=N''MS_Description'',@value=" lab ;';
put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";';
put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";';
put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;';
put 'if last then put ''GO'';';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''POSTGRES'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put 'data _null_;';
put 'file &fref mod;';
put 'put "CREATE SCHEMA &schema;";';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put '%local curdsvarcount;';
put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);';
put '%if &curdsvarcount>1600 %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &libref..&curds contains &curdsvarcount vars */";';
put 'put "/* Postgres cannot create tables with over 1600 vars */";';
put 'put "/* No DDL will be generated for this table";';
put 'run;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* Postgres Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'length fmt $32;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "CREATE TABLE &schema..&curds (";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "CREATE VIEW &schema..&curds (";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';';
put '%end;';
put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';';
put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put '/* quote column names in case they represent reserved words */';
put 'name2=quote(trim(name));';
put 'put name2 fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";';
put 'put '' "'' name +(-1) ''"'' ;';
put 'end;';
put 'else put '' ,"'' name +(-1) ''"'';';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%if %upcase(&showlog)=YES %then %do;';
put 'options ps=max;';
put 'data _null_;';
put 'infile &fref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mend mp_getddl;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_ds2inserts(ds, outref=0,schema=0,outds=0,flavour=SAS,maxobs=max';
put ',applydttm=YES';
put ')/*/STORE SOURCE*/;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WAR)NING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WAR)NING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;';
put '%let flavour=%upcase(&flavour);';
put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;';
put '%put %str(WAR)NING: &flavour is not supported;';
put '%return;';
put '%end;';
put '%if &outref=0 %then %do;';
put '%put %str(WAR)NING: Please provide a fileref;';
put '%return;';
put '%end;';
put '%if %mf_existfileref(&outref)=0 %then %do;';
put 'filename &outref temp lrecl=66000;';
put '%end;';
put '%if &schema=0 %then %let schema=;';
put '%else %let schema=&schema..;';
put '%if &outds=0 %then %let outds=%scan(&ds,2,.);';
put '%local nobs;';
put 'proc sql noprint;';
put 'select count(*) into: nobs TRIMMED from &ds;';
put '%if &nobs=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'put "/* No rows found in &ds */";';
put 'run;';
put '%end;';
put '%local vars;';
put '%let vars=%mf_getvarcount(&ds);';
put '%if &vars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'put "/* No columns found in &schema.&ds */";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &vars>1600 and &flavour=PGSQL %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &schema.&ds contains &vars vars */";';
put 'put "/* Postgres cannot handle tables with over 1600 vars */";';
put 'put "/* No inserts will be generated for this table */";';
put 'run;';
put '%return;';
put '%end;';
put '%local varlist varlistcomma;';
put '%let varlist=%mf_getvarlist(&ds);';
put '%let varlistcomma=%mf_getvarlist(&ds,dlm=%str(,),quote=double);';
put '/* next, export data */';
put 'data _null_;';
put 'file &outref mod ;';
put 'if _n_=1 then put "/* &schema.&outds (&nobs rows, &vars columns) */";';
put 'set &ds;';
put '%if &maxobs ne max %then %do;';
put 'if _n_>&maxobs then stop;';
put '%end;';
put 'length _____str $32767;';
put 'call missing(_____str);';
put 'format _numeric_ best.;';
put 'format _character_ ;';
put '%local i comma var vtype vfmt;';
put '%do i=1 %to %sysfunc(countw(&varlist));';
put '%let var=%scan(&varlist,&i);';
put '%let vtype=%mf_getvartype(&ds,&var);';
put '%let vfmt=%upcase(%mf_getvarformat(&ds,&var,force=1));';
put '%if &i=1 %then %do;';
put '%if &flavour=SAS %then %do;';
put 'put "insert into &schema.&outds set ";';
put 'put " &var="@;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '_____str=cats(';
put '"INSERT INTO &schema.&outds ("';
put ',symget(''varlistcomma'')';
put ',") VALUES ("';
put ');';
put 'put _____str;';
put 'put " "@;';
put '%end;';
put '%end;';
put '%else %do;';
put '%if &flavour=SAS %then %do;';
put 'put " ,&var="@;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'put " ,"@;';
put '%end;';
put '%end;';
put '%if &vtype=N %then %do;';
put '%if &flavour=SAS %then %do;';
put 'put &var;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'if missing(&var) then put ''NULL'';';
put '%if &applydttm=YES and "%substr(&vfmt.xxxxxxxx,1,8)"="DATETIME"';
put '%then %do;';
put 'else put "TIMESTAMP ''" &var E8601DT25.6 "''";';
put '%end;';
put '%else %do;';
put 'else put &var;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '_____str="''"!!trim(tranwrd(&var,"''","''''"))!!"''";';
put 'put _____str;';
put '%end;';
put '%end;';
put '%if &flavour=SAS %then %do;';
put 'put '';'';';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'put '');'';';
put '%end;';
put 'if _n_=&nobs then put /;';
put 'run;';
put '%mend mp_ds2inserts;';
put '%macro mp_lib2inserts(lib';
put ',flavour=SAS';
put ',outref=0';
put ',schema=0';
put ',maxobs=max';
put ',applydttm=YES';
put ')/*/STORE SOURCE*/;';
put '/* Find the tables */';
put '%local x ds memlist;';
put 'proc sql noprint;';
put 'select distinct lowcase(memname)';
put 'into: memlist';
put 'separated by '' ''';
put 'from dictionary.tables';
put 'where upcase(libname)="%upcase(&lib)"';
put 'and memtype=''DATA''; /* exclude views */';
put '%let flavour=%upcase(&flavour);';
put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;';
put '%put %str(WAR)NING: &flavour is not supported;';
put '%return;';
put '%end;';
put '/* create the inserts */';
put '%do x=1 %to %sysfunc(countw(&memlist));';
put '%let ds=%scan(&memlist,&x);';
put '%mp_ds2inserts(&lib..&ds';
put ',outref=&outref';
put ',schema=&schema';
put ',outds=&ds';
put ',flavour=&flavour';
put ',maxobs=&maxobs';
put ',applydttm=&applydttm';
put ')';
put '%end;';
put '%mend mp_lib2inserts;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Exports the data controller library in DB specific DDL';
put '@details If user is in the administrator group, they can call this';
put 'service directly adding the following URL params:';
put '@li &flavour= (only PGSQL supported at this time)';
put '@li &schema= (optional, if target schema is needed)';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mp_getddl.sas';
put '@li mp_lib2inserts.sas';
put '@li mp_streamfile.sas';
put '@li mpe_getgroups.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global flavour schema;';
put '/* if no flavour is specified, default to SAS */';
put '%let flavour=%sysfunc(coalescec(&flavour,SAS));';
put '/* if no schema var provided, DC Libref is used */';
put '%let schema=%sysfunc(coalescec(&schema,&dc_libref));';
put '/* check user is in admin group */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)';
put 'data work.admins;';
put 'set work.usergroups;';
put 'put (_all_)(=);';
put 'run;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into:cnt';
put 'from usergroups';
put 'where groupname="&mpeadmins";';
put '%put &=cnt;';
put '%mp_abort(iftrue= (&cnt=0)';
put ',mac=&_program';
put ',msg=%str(The &DC_LIBREF library can only be exported by &mpeadmins members)';
put ')';
put '%mp_getddl(&DC_LIBREF';
put ',flavour=&flavour';
put ',schema=&schema';
put ',applydttm=YES';
put ',fref=tmpref';
put ')';
put '%mp_lib2inserts(&DC_LIBREF,flavour=&flavour,schema=&schema, outref=tmpref)';
put '%mp_streamfile(contenttype=TEXT';
put ',inref=tmpref';
put ',outname=&dc_libref..ddl';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=makedata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_increment(macro_name,incr=1);';
put '/* iterate the value */';
put '%let ¯o_name=%eval(&&¯o_name+&incr);';
put '/* return the value */';
put '&&¯o_name';
put '%mend mf_increment;';
put '%macro mpe_makedata(lib=,mpeadmins=,path=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &lib..mpe_column_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',CLS_SCOPE=''EDIT''';
put ',CLS_GROUP=''AllUsers''';
put ',CLS_LIBREF="&lib"';
put ',CLS_TABLE=''MPE_LOCKANYTABLE''';
put ',CLS_VARIABLE_NM=''LOCK_STATUS_CD''';
put ',CLS_ACTIVE=1';
put ',CLS_HIDE=0;';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_EMAIL_ALERTS"';
put ',var_value=''NO''';
put ',var_active=1';
put ',var_desc=''YES or NO to enable email alerts. Note - this requires email ''';
put '!!''options to be preconfigured! They can be configured in the ''';
put '!!''settings stp if needed.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_VIEWLIB_CHECK"';
put ',var_value=''NO''';
put ',var_active=1';
put ',var_desc=';
put '''Set to YES to enable library validity checking in viewLibs service.''';
put '!!'' Note: this can make the service very slow if there are lots of ''';
put '!!''external libraries. If enabled, this removes empty libraries from ''';
put '!!''the viewer library dropdown. To switch off, set to NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_MACROS"';
put ',var_value=cats(symget(''path''),"/dc_macros")';
put ',var_active=1';
put ',var_desc=''Location of underlying macros - EUC feature.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_MAXOBS_WEBEDIT"';
put ',var_value="100"';
put ',var_active=1';
put ',var_desc=''This sets the maximum number of observations that can be loaded''';
put '!!'' into the browser for editing in the EDIT screen. A higher number''';
put '!!'' will require a decent browser (ie, not IE) and more memory on the''';
put '!!'' client side.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_REQUEST_LOGS"';
put ',var_value="YES"';
put ',var_active=1';
put ',var_desc=''Setting to NO will prevent each request being logged to the''';
put '!!'' MPE_REQUESTS table Default=YES.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_RESTRICT_VIEWER"';
put ',var_value="NO"';
put ',var_active=1';
put ',var_desc=''YES will restrict the list of libraries and tables in VIEWER to''';
put '!!'' those explicitly set to VIEW in the MPE_SECURITY table. Default=NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_RESTRICT_EDITRECORD"';
put ',var_value="NO"';
put ',var_active=1';
put ',var_desc=''Setting YES will prevent the EDIT RECORD dialog appearing in the''';
put '!!'' EDIT screen by removing the "Edit Row" option in the right click menu''';
put '!!'', and the "ADD RECORD" button in the bottom left. Default=NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC_CATALOG"';
put ',var_name="DC_IGNORELIBS"';
put ',var_value="|MAPSSAS|MAPS|"';
put ',var_active=1';
put ',var_desc=''Pipe seperated list of librefs (uppercase) to be ignored when''';
put '!!'' running the Data Catalog refresh process. This can enable a clean''';
put '!!'' run when invalid librefs are returned by the mpe_refreshlibs macro.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_LOCALE"';
put ',var_value="SYSTEM"';
put ',var_active=1';
put ',var_desc=''Set to a locale (such as en_gb or en_be) to override the system''';
put '!!'' value (which can be driven from the browser settings). This is ''';
put '!!''useful when importing ambiguous dates from CSV or Excel (eg 1/2/20 vs ''';
put '!!''2/1/20) as DC uses the anydtdtm informats for import. Default=SYSTEM.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BULKLOAD"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to enable BULKLOAD=YES in redshift'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_BUCKET"';
put ',var_value="''your-aws-bucket/Exchange''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) value of the AWS bucket to''';
put '!!'' use for s3 uploads in redshift'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_AWS_CREDENTIALS_FILE"';
put ',var_value="''/path/to/your/aws/s3/.credentials''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) value of the AWS creds file'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_REGION"';
put ',var_value="''eu-west-1''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) AWS region in use'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_COMPRESS"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to perform compression ahead of the COPY command'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_USE_SSL"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to use SSL encryption'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC_REVIEW"';
put ',var_name="HISTORY_ROWS"';
put ',var_value=''100''';
put ',var_active=1';
put ',var_desc=''Number of rows (or additional rows) to return in the HISTORY ''';
put '!!''page'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_LICENCE_KEY"';
put ',var_value='' ''';
put ',var_active=1';
put ',var_desc=''Licence Key'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_ACTIVATION_KEY"';
put ',var_value='' ''';
put ',var_active=1';
put ',var_desc=''Activation Key'';';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''LIBRARY''';
put ',DD_SOURCE="&lib"';
put ',DD_SHORTDESC="Data Controller Control Tables"';
put ',DD_LONGDESC="# The Data Controller Library"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''TABLE''';
put ',DD_SOURCE="&lib..MPE_TABLES"';
put ',DD_SHORTDESC="Configuration of new tables for Data Controller"';
put ',DD_LONGDESC="# MPE_TABLES - adding new tabels to Data Controller"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''COLUMN''';
put ',DD_SOURCE="&lib..MPE_TABLES.DSN"';
put ',DD_SHORTDESC="Dataset Name to be edited"';
put ',DD_LONGDESC="_DSN_ - must be UPCASE"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''DIRECTORY''';
put ',DD_SOURCE="/some/directory"';
put ',DD_SHORTDESC="Directory for some purpose"';
put ',DD_LONGDESC="This directory is great. It''s great directory.';
put 'It trumps all other directories."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''TABLE''';
put ',DD_SOURCE="&lib"';
put ',DD_SHORTDESC="Transaction table for capturing Data Controller users"';
put ',DD_LONGDESC="After a user accepts the Data Controller EULA they are "';
put '!!"registered as a user in this table."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''COLUMN''';
put ',DD_SOURCE="&lib..MPE_CONFIG.VAR_ACTIVE"';
put ',DD_SHORTDESC="Set to 1 to make an option active"';
put ',DD_LONGDESC="This value is used as a filter by data controller whenever "';
put '!!"querying for option settings."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* mpe_xlmap_info';
put '*/';
put 'insert into &lib..mpe_xlmap_info set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_description=''Basel 3 Key Metrics report''';
put ',XLMAP_TARGETLIBDS="&lib..MPE_XLMAP_DATA";';
put '/**';
put '* mpe_xlmap_rules';
put '*/';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:a'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:b''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:b'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:c''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:c'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:d''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:d'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:e'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:f'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[1]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/b''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[2]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/c''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[3]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/d''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[4]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[5]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[6]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1a/e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[1]C[5]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1a/f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[1]C[6]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''ABSOLUTE D10'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/b''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''ABSOLUTE E10'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/c''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[6]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/d''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[8]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/e''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[9]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/f''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[10]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''ABSOLUTE H11''';
put ',xlmap_finish=''RELATIVE R[0]C[1]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:3''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''RELATIVE R[12]C[4]''';
put ',xlmap_finish=''ABSOLUTE I13'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-CR2''';
put ',xlmap_range_id=''CR2-sec1''';
put ',xlmap_sheet=''CR2''';
put ',xlmap_start=''ABSOLUTE D8''';
put ',xlmap_finish=''BLANKROW'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-CR2''';
put ',xlmap_range_id=''CR2-sec2''';
put ',xlmap_sheet=''CR2''';
put ',xlmap_start=''ABSOLUTE D18''';
put ',xlmap_finish=''LASTDOWN'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''SAMPLE''';
put ',xlmap_range_id=''header''';
put ',xlmap_sheet=''/1''';
put ',xlmap_start=''ABSOLUTE B3''';
put ',xlmap_finish=''ABSOLUTE B8'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''SAMPLE''';
put ',xlmap_range_id=''data''';
put ',xlmap_sheet=''/1''';
put ',xlmap_start=''ABSOLUTE B13''';
put ',xlmap_finish=''ABSOLUTE E16'';';
put '/**';
put '* MPE_GROUPS';
put '*/';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="allbow"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="dctestuser1"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="mihmed"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="sec-sas9-prd-ext-sasplatform-300115datacontroller"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="DCTest"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_ROW_LEVEL_SECURITY';
put '*/';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=1';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_GROUPS"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''GROUP_NAME''';
put ',RLS_OPERATOR_NM=''NE''';
put ',RLS_RAW_VALUE="''-1''"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=2';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib"';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''RLS_RK''';
put ',RLS_OPERATOR_NM=''>''';
put ',RLS_RAW_VALUE=''0''';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=3';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''DC Demo Group''';
put ',RLS_LIBREF="&lib"';
put ',RLS_TABLE="MPE_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''ACCESS_LEVEL''';
put ',RLS_OPERATOR_NM=''NE''';
put ',RLS_RAW_VALUE="''N/A''"';
put ',RLS_ACTIVE=1;';
put '/**';
put '* MPE_SECURITY';
put '*/';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="dc-admin"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="dc-admin"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/* mpe_selectbox */';
put '%let rk=1;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=&rk';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_LOCKANYTABLE"';
put ',base_column="LOCK_STATUS_CD"';
put ',selectbox_value=''LOCKED''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_LOCKANYTABLE"';
put ',base_column="LOCK_STATUS_CD"';
put ',selectbox_value=''UNLOCKED''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''EDIT''';
put ',selectbox_order=0';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''APPROVE''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''VIEW''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''SIGNOFF''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''UPDATE''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''REPLACE''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''TXTEMPORAL''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''BITEMPORAL''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''FORMAT_CAT''';
put ',selectbox_order=5';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''*ALL*''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''SUBMITTED''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''APPROVED''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''REJECTED''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 1''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 2''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 3''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value="This is a long option. This option is very long. "';
put '!!"It is optional, though."';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="CASE"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="MINVAL"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="MAXVAL"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="HARDSELECT"';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="SOFTSELECT"';
put ',selectbox_order=5';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="NOTNULL"';
put ',selectbox_order=6';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="DSN"';
put ',selectbox_value="SOME_DATASET"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="DSN"';
put ',selectbox_value="EXAMPLE"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="COLUMN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="TABLE"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="LIBRARY"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="CATALOG"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="FORMAT"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="LIBREF"';
put ',selectbox_value=''*ALL*''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''AUDIT''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="HARDSELECT_HOOK"';
put ',selectbox_order=7';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="SOFTSELECT_HOOK"';
put ',selectbox_order=7';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="ALL"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="EDIT"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="VIEW"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_GROUP_LOGIC"';
put ',selectbox_value="AND"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_GROUP_LOGIC"';
put ',selectbox_value="OR"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SUBGROUP_LOGIC"';
put ',selectbox_value="AND"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SUBGROUP_LOGIC"';
put ',selectbox_value="OR"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="="';
put ',selectbox_order=0';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value=">"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="<"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="<="';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value=">="';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="BETWEEN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="IN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="NOT IN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="NE"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="CONTAINS"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_EXCEL_CONFIG"';
put ',base_column="XL_RULE"';
put ',selectbox_value="FORMULA"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_ACTIVE"';
put ',selectbox_value="1"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_ACTIVE"';
put ',selectbox_value="0"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_ACTIVE"';
put ',selectbox_value="1"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_ACTIVE"';
put ',selectbox_value="0"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="EDIT"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="VIEW"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="ALL"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_HIDE"';
put ',selectbox_value="0"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_HIDE"';
put ',selectbox_value="1"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_TABLES';
put '*/';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_COLUMN_LEVEL_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM''';
put ',notes=''Docs: https://docs.datacontroller.io/column-level-security''';
put ',post_edit_hook=''services/hooks/mpe_column_level_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_INFO''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''XLMAP_ID''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ',post_edit_hook=''services/hooks/mpe_xlmap_info_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_RULES''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''XLMAP_ID XLMAP_RANGE_ID''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ',post_edit_hook=''services/hooks/mpe_xlmap_rules_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_DATA''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''LOAD_REF XLMAP_ID XLMAP_RANGE_ID ROW_NO COL_NO''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_LOCKANYTABLE''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''LOCK_LIB LOCK_DS''';
put ',notes=''This table may be edited when a process failed and left a lock''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_TABLES''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''LIBREF DSN''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',notes=''This entry allows the MP Editor to edit itself!''';
put ',post_edit_hook=''services/hooks/mpe_tables_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''LIBREF DSN ACCESS_LEVEL SAS_GROUP''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',notes=''Determines which groups can view/edit/approve which tables''';
put ',post_edit_hook=''services/hooks/mpe_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_SELECTBOX''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''SELECTBOX_RK''';
put ',var_txfrom=''VER_FROM_DTTM''';
put ',var_txto=''VER_TO_DTTM''';
put ',notes=''Can configure dropdowns for the front end''';
put ',rk_underlying=''SELECT_LIB SELECT_DS BASE_COLUMN SELECTBOX_VALUE''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_X_TEST''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''PRIMARY_KEY_FIELD''';
put ',notes=''Test table for controller''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_EMAILS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''USER_NAME''';
put ',notes=''Primary Emails Table (backup is metadata)''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_CONFIG''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''VAR_SCOPE VAR_NAME''';
put ',notes=''Configuration variables for Data Controller''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_ALERTS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''ALERT_EVENT ALERT_LIB ALERT_DS ALERT_USER''';
put ',notes=''Configuration for alert email events''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_GROUPS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''GROUP_NAME USER_NAME''';
put ',notes=''Configuration for additional groups within Data Controller''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_VALIDATIONS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''BASE_LIB BASE_DS BASE_COL RULE_TYPE''';
put ',notes=''Configuration of data quality rules in Editor component''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',post_edit_hook=''services/hooks/mpe_validations_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_DATADICTIONARY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''DD_TYPE DD_SOURCE''';
put ',notes=''Configuration of data dictionary''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_EXCEL_CONFIG''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''XL_LIBREF XL_TABLE XL_COLUMN''';
put ',notes=''Configuration of the excel import rules''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_ROW_LEVEL_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''RLS_RK''';
put ',notes=''Configuration of Row Level Security''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',rk_underlying=''RLS_SCOPE RLS_GROUP RLS_LIBREF RLS_TABLE RLS_GROUP_LOGIC ''';
put '!!''RLS_SUBGROUP_LOGIC RLS_SUBGROUP_ID RLS_VARIABLE_NM RLS_OPERATOR_NM ''';
put '!!''RLS_RAW_VALUE ''';
put ',post_edit_hook=''services/hooks/mpe_row_level_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_X_CATALOG-FC''';
put ',num_of_approvals_required=1';
put ',loadtype=''FORMAT_CAT''';
put ',buskey=''TYPE FMTNAME FMTROW''';
put ',notes=''Sample Format Catalog''';
put ';';
put '/* mpe_validations */';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_SCOPE"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_TABLE"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_VARIABLE_NM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_VARIABLE_NM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_HIDE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ALERTS"';
put ',base_col="ALERT_LIB"';
put ',rule_type=''HARDSELECT_HOOK''';
put ',rule_value="services/validations/mpe_alerts.alert_lib"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_INFO"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_RULES"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''NOTNULL''';
put ',rule_value='' ''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''NOTNULL''';
put ',rule_value='' ''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="NUM_OF_APPROVALS_REQUIRED"';
put ',rule_type=''MINVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="BUSKEY"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="BUSKEY"';
put ',rule_type=''NOTNULL''';
put ',rule_value=" "';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXFROM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXTO"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSFROM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSTO"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value="UPCASE"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_PROCESSED"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="LIBREF"';
put ',rule_type=''HARDSELECT''';
put ',rule_value="&lib..MPE_TABLES.LIBREF"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="DSN"';
put ',rule_type=''CASE''';
put ',rule_value="UPCASE"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="DSN"';
put ',rule_type=''SOFTSELECT''';
put ',rule_value="&lib..MPE_TABLES.DSN"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="SAS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_LIB"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_DS"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_COL"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="RULE_ACTIVE"';
put ',rule_type=''MINVAL''';
put ',rule_value="0"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="RULE_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value="1"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_COLUMN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/mpe_tables.dsn"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXFROM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXTO"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSFROM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSTO"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_PROCESSED"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="SELECT_LIB"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="SELECT_DS"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="BASE_COLUMN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_SUBGROUP_ID"';
put ',rule_type=''MINVAL''';
put ',rule_value=''0''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_VARIABLE_NM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/* test softselect on numeric var (should be ordered numerically) */';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_X_TEST"';
put ',base_col="SOME_BESTNUM"';
put ',rule_type=''SOFTSELECT''';
put ',rule_value="&lib..MPE_X_TEST.SOME_BESTNUM"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_X_TEST"';
put ',base_col="SOME_NUM"';
put ',rule_type=''HARDSELECT_HOOK''';
put ',rule_value="services/validations/mpe_x_test.some_num"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_ACTIVE"';
put ',rule_type=''MINVAL''';
put ',rule_value=''0''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_INFO"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''SOFTSELECT''';
put ',rule_value="&lib..MPE_XLMAP_RULES.XLMAP_ID"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_X_TEST';
put '*/';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=0';
put ',some_char=''this is dummy data''';
put ',some_dropdown=''Option 1''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=42';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=1';
put ',some_char=''more dummy data''';
put ',some_dropdown=''Option 2''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=422';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=2';
put ',some_char=''even more dummy data''';
put ',some_dropdown=''Option 3''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=142';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=3';
put ',some_char=repeat(''It was a dark and stormy night. The wind was blowing''';
put '!!'' a gale! The captain said to his mate - mate, tell us a tale. And''';
put '!!'' this, is the tale he told: '',3)';
put ',some_dropdown=''Option 2''';
put ',some_num=1613.001';
put ',some_date=423';
put ',some_datetime=423';
put ',some_time=44';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=4';
put ',some_char=''if you can fill the unforgiving minute''';
put ',some_dropdown=''Option 1''';
put ',some_num=1613.001123456';
put ',some_date=4231';
put ',some_datetime=423123123';
put ',some_time=412';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put '%do x=10 %to 500;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=10&x';
put ',some_char="&x bottles of beer on the wall"';
put ',some_dropdown=''Option 1''';
put ',some_num=ranuni(0)';
put ',some_date=round(ranuni(0)*1000,1)';
put ',some_datetime=round(ranuni(0)*50000,1)';
put ',some_time=round(ranuni(0)*100,1)';
put ',some_shortnum=round(ranuni(0)*100,1)';
put ',some_bestnum=round(ranuni(0)*100,1);';
put '%end;';
put '/* https://support.sas.com/resources/papers/proceedings/proceedings/sugi27/p056-27.pdf */';
put 'proc format library=&lib..mpe_x_catalog;';
put 'value otdate';
put '.Z = ''Some Zs''';
put '.N = ''Some 9s''';
put 'other = [date9.]';
put ';';
put 'invalue disc';
put '''ABC'' = 0.20';
put '''DEF'' = 0.25';
put '''XYZ'' = 0.00';
put 'other = 0.00';
put ';';
put 'invalue indate';
put '''00000000'' = .Z';
put '''99999999'' = .N';
put 'other = [yymmdd8.]';
put ';';
put 'value age(multilabel)';
put '20 - 29 = ''20 - 29''';
put '30 - 39 = ''30 - 39''';
put '40 - 49 = ''40 - 49''';
put '50 - 59 = ''50 - 59''';
put '60 - high = ''60 +++''';
put '20 - 35 = ''20 - 35''';
put '36 - 55 = ''36 - 55''';
put '55 - high = ''55 +++''';
put ';';
put '/* https://libguides.library.kent.edu/SAS/UserDefinedFormats */';
put 'VALUE $GENDERLABEL';
put '"M" = "Male"';
put '"F" = "Female"';
put ';';
put 'VALUE LIKERT_SEVEN';
put '1 = "Strongly Disagree"';
put '2 = "Disagree"';
put '3 = "Slightly Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5 = "Slightly Agree"';
put '6 = "Agree"';
put '7 = "Strongly Agree"';
put ';';
put 'VALUE LIKERT7_ELEVEN';
put '1,2,3 = "Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5,6,7 = "Agree"';
put ';';
put 'VALUE LIKERT7_SISTERS';
put '1-3 = "Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5-7 = "Agree"';
put ';';
put 'VALUE INCOME';
put 'LOW -< 20000 = "Low"';
put '20000 -< 60000 = "Middle"';
put '60000 - HIGH = "High"';
put ';';
put 'VALUE RACE';
put '1 = "White"';
put '2 = "Black"';
put 'OTHER = "Other"';
put ';';
put 'VALUE GENDERCODE';
put '0 = ''Male''';
put '1 = ''Female'';';
put 'VALUE ATHLETECODE';
put '0 = ''Non-athlete''';
put '1 = ''Athlete'';';
put 'VALUE SMOKINGCODE';
put '0 = ''Nonsmoker''';
put '1 = ''Past smoker''';
put '2 = ''Current smoker'';';
put '/* https://documentation.sas.com/doc/en/pgmsascdc/v_017/proc/p1upn25lbfo6mkn1wncu4dyh9q91.htm */';
put 'value $state';
put '''Delaware''=''DE''';
put '''Florida''=''FL''';
put '''Ohio''=''OH'';';
put 'value MYfmt';
put '/* Format dates prior to 31DEC2011 using only a year. */';
put 'low-''31DEC2011''d=[year4.]';
put '/* Format 2012 dates using the month and year. */';
put '''01jan2012''d-''31DEC12''d=[monyy7.]';
put '/* Format dates 01JAN2013 and beyond using the day, month, and year. */';
put '''01JAN2013''d-high=[date9.]';
put '/* Catch missing values. */';
put 'other=''n/a'';';
put 'value newfmt .=''N/A'' other=[12.1];';
put '/* https://www.lexjansen.com/nesug/nesug08/cc/cc14.pdf */';
put 'value $genderml (multilabel)';
put '''1''=''Male''';
put '''2''=''Female''';
put '''1'',''2'','' ''=''Total people'';';
put 'value agemla (multilabel)';
put '1-4=''Preschool''';
put '1-18=''Children''';
put '19-120=''Adults'';';
put 'value agemlb (multilabel)';
put '19-120=''Adults''';
put '1-18=''Children''';
put '1-4=''Preschool'';';
put 'value agemlc (multilabel notsorted)';
put '19-120=''Adults''';
put '1-18=''Children''';
put '1-4=''Preschool'';';
put '%mend mpe_makedata;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mpe_makedatamodel(lib=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put '%local notnull;';
put '%if %mf_existfeature(COLCONSTRAINTS)=1 %then %let notnull=not null;';
put '%put &=notnull;';
put 'proc sql;';
put 'create table &lib..mpe_alerts(';
put 'tx_from num format=datetime19.3,';
put 'alert_event char(20),';
put 'alert_lib char(8),';
put 'alert_ds char(32),';
put 'alert_user char(100) ,';
put 'tx_to num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_alerts;';
put 'index create';
put 'pk_mpealerts=(tx_from alert_event alert_lib alert_ds alert_user)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_audit(';
put 'load_ref char(36) label=''unique load reference'',';
put 'libref char(8) label=''Library Reference (8 chars)'',';
put 'dsn char(32) label=''Dataset Name (32 chars)'',';
put 'key_hash char(32) label=';
put '''MD5 Hash of primary key values (pipe seperated)'',';
put 'tgtvar_nm char(32) label=''Target variable name (32 chars)'',';
put 'move_type char(1) label=''Either (A)ppended, (D)eleted or (M)odified'',';
put 'processed_dttm num format=E8601DT26.6 label=''Processed at timestamp'',';
put 'is_pk num label=''Is Primary Key Field? (1/0)'',';
put 'is_diff num label=';
put '''Did value change? (1/0/-1). Always -1 for appends and deletes.'',';
put 'tgtvar_type char(1) label=''Either (C)haracter or (N)umeric'',';
put 'oldval_num num format=best32. label=''Old (numeric) value'',';
put 'newval_num num format=best32. label=''New (numeric) value'',';
put 'oldval_char char(32765) label=''Old (character) value'',';
put 'newval_char char(32765) label=''New (character) value''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_audit;';
put 'index create';
put 'pk_mpe_audit=(load_ref libref dsn key_hash tgtvar_nm)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_column_level_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'CLS_SCOPE char(4) ¬null,';
put 'CLS_GROUP char(64) ¬null,';
put 'CLS_LIBREF char(8) ¬null,';
put 'CLS_TABLE char(32) ¬null,';
put 'CLS_VARIABLE_NM char(32) ¬null,';
put 'CLS_ACTIVE num ¬null,';
put 'CLS_HIDE num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_column_level_security;';
put 'index create';
put 'pk_mpe_column_level_security=';
put '(tx_to CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_config(';
put 'tx_from num ¬null format=datetime19.3';
put ',tx_to num ¬null format=datetime19.3';
put ',var_scope varchar(10) ¬null';
put ',var_name varchar(32) ¬null';
put ',var_value varchar(5000)';
put ',var_active num';
put ',var_desc varchar(300)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_config;';
put 'index create';
put 'pk_mpe_config=(tx_to var_scope var_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_libs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Ref'',';
put 'engine char(32) label=''Library Engine'',';
put 'libname char(256) format=$256. label=''Library Name'',';
put 'paths char(8192) label=''Library Paths'',';
put 'perms char(500) label=''Library Permissions (if BASE)'',';
put 'owners char(500) label=''Library Owners (if BASE)'',';
put 'schemas char(500) label=''Library Schemas (if DB)'',';
put 'libid char(17) label=''LibraryId''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_libs;';
put 'index create';
put 'pk_mpe_datacatalog_libs=(libref tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_TABS(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Member Name'',';
put 'memtype char(8) label=''Member Type'',';
put 'dbms_memtype char(32) label=''DBMS Member Type'',';
put 'memlabel char(512) label=''Data Set Label'',';
put 'typemem char(8) label=''Data Set Type'',';
put 'nvar num label=''Number of Variables'',';
put 'compress char(8) label=''Compression Routine'',';
put 'pk_fields char(512)';
put 'label=''Primary Key Fields (identified by being in a constraint that is both Unique and Not Null)''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_TABS;';
put 'index create';
put 'pk_mpe_datacatalog_TABS=(libref dsn tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_vars(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Table Name'',';
put 'name char(64) label=''Column Name'',';
put 'memtype char(8) label=''Member Type'',';
put 'type char(16) label=''Column Type'',';
put 'length num label=''Column Length'',';
put 'varnum num label=''Column Number in Table'',';
put 'label char(512) label=''Column Label'',';
put 'format char(49) label=''Column Format'',';
put 'idxusage char(9) label=''Column Index Type'',';
put 'notnull char(3) label=''Not NULL?'',';
put 'pk_ind num label=''Primary Key Indicator (1=Primary Key field)''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_vars;';
put 'index create';
put 'pk_mpe_datacatalog_vars=(libref dsn name tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datastatus_libs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'libsize num format=SIZEKMG. label=''Size of library'',';
put 'table_cnt num label=''Number of Tables''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datastatus_libs;';
put 'index create';
put 'pk_mpe_datastatus_libs=(libref tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datastatus_tabs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Member Name'',';
put 'filesize num format=SIZEKMG. label=''Size of file'',';
put 'crdate num format=DATETIME. informat=DATETIME. label=''Date Created'',';
put 'modate num format=DATETIME. informat=DATETIME. label=''Date Modified'',';
put 'nobs num label=''Number of Physical (Actual, inc. deleted) Observations''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datastatus_tabs;';
put 'index create';
put 'pk_mpe_datastatus_tabs=(libref dsn tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datadictionary';
put '(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'DD_TYPE char(16),';
put 'DD_SOURCE char(1024),';
put 'DD_SHORTDESC char(256),';
put 'DD_LONGDESC char(32767),';
put 'DD_OWNER char(128),';
put 'DD_RESPONSIBLE char(128),';
put 'DD_SENSITIVITY char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datadictionary;';
put 'index create';
put 'pk_mpe_datadictionary=(tx_to dd_type dd_source)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_dataloads(';
put 'libref varchar(8) ¬null,';
put 'dsn varchar(32) ¬null,';
put 'etlsource varchar(100) ¬null,';
put 'loadtype varchar(20) ¬null,';
put 'changed_records int,';
put 'new_records int,';
put 'deleted_records int,';
put 'duration num,';
put 'user_nm varchar(50) ¬null,';
put 'processed_dttm num format=datetime19.3,';
put 'mac_ver varchar(5)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_dataloads;';
put 'index create';
put 'pk_mpe_dataloads=(processed_dttm libref dsn etlsource)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_emails(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'user_name char(50) ¬null,';
put 'user_displayname char(100),';
put 'user_email char(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_emails;';
put 'index create';
put 'pk_mpe_emails=(tx_to user_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_excel_config(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'xl_libref char(8),';
put 'xl_table char(32),';
put 'xl_column char(32),';
put 'xl_rule char(32),';
put 'xl_active num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_excel_config;';
put 'index create';
put 'pk_mpe_excel_config=(tx_to xl_libref xl_table xl_column)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_XLMAP_DATA(';
put 'LOAD_REF char(32) ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_RANGE_ID char(32) ¬null,';
put 'ROW_NO num ¬null,';
put 'COL_NO num ¬null,';
put 'VALUE_TXT char(4000)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify MPE_XLMAP_DATA;';
put 'index create';
put 'pk_MPE_XLMAP_DATA=(load_ref xlmap_id xlmap_range_id row_no col_no)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_xlmap_info(';
put 'tx_from num ¬null,';
put 'tx_to num ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_DESCRIPTION char(1000) ¬null,';
put 'XLMAP_TARGETLIBDS char(41) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_xlmap_info;';
put 'index create';
put 'pk_mpe_xlmap_info=(tx_to xlmap_id)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_xlmap_rules(';
put 'tx_from num ¬null,';
put 'tx_to num ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_RANGE_ID char(32) ¬null,';
put 'XLMAP_SHEET char(32) ¬null,';
put 'XLMAP_START char(1000) ¬null,';
put 'XLMAP_FINISH char(1000)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_xlmap_rules;';
put 'index create';
put 'pk_mpe_xlmap_rules=(tx_to xlmap_id xlmap_range_id)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_filteranytable(';
put 'filter_rk num ¬null,';
put 'filter_hash char(32) ¬null,';
put 'filter_table char(41) ¬null,';
put 'processed_dttm num ¬null format=datetime19.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_filteranytable;';
put 'index create filter_rk /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_filtersource(';
put 'filter_hash char(32) ¬null,';
put 'filter_line num ¬null,';
put 'group_logic char(3) ¬null,';
put 'subgroup_logic char(3) ¬null,';
put 'subgroup_id num ¬null,';
put 'variable_nm varchar(32) ¬null,';
put 'operator_nm varchar(12) ¬null,';
put 'raw_value varchar(4000) ¬null,';
put 'processed_dttm num ¬null format=datetime19.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_filtersource;';
put 'index create';
put 'pk_mpe_filtersource=(filter_hash filter_line)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_groups(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'group_name char(100) ¬null,';
put 'user_name char(50) ¬null,';
put 'group_desc char(256)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_groups;';
put 'index create';
put 'pk_mpe_groups=(tx_to group_name user_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_lineage_cols';
put '(';
put 'col_id char(32),';
put 'direction char(1),';
put 'sourcecoluri char(256),';
put 'map_type char(256),';
put 'map_transform char(256),';
put 'jobname char(256),';
put 'sourcetablename char(256),';
put 'sourcecolname char(256),';
put 'targettablename char(256),';
put 'targetcolname char(256),';
put 'targetcoluri char(256),';
put 'Derived_Rule char(500),';
put 'level int,';
put 'modified_dttm num format=datetime19.3,';
put 'modified_by char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lineage_cols;';
put 'index create';
put 'pk_mpe_lineage_cols=(col_id direction sourcecoluri targetcoluri map_type map_transform)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_LINEAGE_TABS';
put '(';
put 'tx_from num ¬null format=datetime19.3,';
put 'jobid char(17),';
put 'srctableid char(17),';
put 'tgttableid char(17),';
put 'jobname char(128),';
put 'srctabletype char(16),';
put 'srctablename char(64),';
put 'srclibref char(8),';
put 'tgttabletype char(16),';
put 'tgttablename char(64),';
put 'tgtlibref char(8),';
put 'tx_to num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lineage_tabs;';
put 'index create';
put 'pk_mpe_lineage_tabs=(tx_to jobid srctableid tgttableid)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_loads(';
put 'csv_dir char(255),';
put 'user_nm char(50) ,';
put 'status char(15) ,';
put 'duration num ,';
put 'processed_dttm num format=datetime19.3,';
put 'reason_txt char(2048) ,';
put 'approvals char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_loads;';
put 'index create csv_dir /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_lockanytable(';
put 'lock_lib varchar(8) ¬null ,';
put 'lock_ds varchar(32) ¬null,';
put 'lock_status_cd varchar(10) ¬null,';
put 'lock_user_nm varchar(100) ¬null ,';
put 'lock_ref varchar(200),';
put 'lock_pid varchar(10),';
put 'lock_start_dttm num format=E8601DT26.6,';
put 'lock_end_dttm num format=E8601DT26.6';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lockanytable;';
put 'index create';
put 'pk_mpe_lockanytable=(lock_lib lock_ds)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_maxkeyvalues(';
put 'keytable varchar(41) label=''Base table in libref.dataset format'',';
put 'keycolumn char(32) format=$32.';
put 'label=''The Surrogate / Retained key field containing the key values.'',';
put 'max_key num label=';
put '''Integer value representing current max RK or SK value in the KEYTABLE'',';
put 'processed_dttm num format=E8601DT26.6';
put 'label=''Datetime this value was last updated''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_maxkeyvalues;';
put 'index create keytable /nomiss unique;';
put 'quit;';
put '/* no PK defined as it is a transaction table */';
put 'proc sql;';
put 'create table &lib..mpe_requests(';
put 'request_dttm num ¬null format=datetime19.,';
put 'request_user char(64) ¬null,';
put 'request_service char(64) ¬null,';
put 'request_params char(128)';
put ');';
put 'proc sql;';
put 'create table &lib..mpe_review(';
put 'table_id varchar(32) ¬null,';
put 'reviewed_by_nm varchar(100) ¬null,';
put 'base_table varchar(41) ¬null,';
put 'review_status_id varchar(10) ¬null,';
put 'reviewed_on_dttm num ¬null format=datetime19.3,';
put 'review_reason_txt varchar(400)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_review;';
put 'index create';
put 'pk_mpe_review=(table_id reviewed_by_nm)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_row_level_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'RLS_RK num ¬null,';
put 'RLS_SCOPE char(8) ¬null,';
put 'RLS_GROUP char(128) ¬null,';
put 'RLS_LIBREF char(8) ¬null,';
put 'RLS_TABLE char(32) ¬null,';
put 'RLS_GROUP_LOGIC char(3) ¬null,';
put 'RLS_SUBGROUP_LOGIC char(3) ¬null,';
put 'RLS_SUBGROUP_ID num ¬null,';
put 'RLS_VARIABLE_NM varchar(32) ¬null,';
put 'RLS_OPERATOR_NM varchar(12) ¬null,';
put 'RLS_RAW_VALUE varchar(4000) ¬null,';
put 'RLS_ACTIVE num ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_row_level_security;';
put 'index create';
put 'pk_mpe_row_level_security=(tx_to RLS_RK)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'libref char(8) ¬null,';
put 'dsn char(32) ¬null,';
put 'access_level char(10) ¬null,';
put 'sas_group char(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_security;';
put 'index create';
put 'pk_mpe_security=(tx_to libref dsn access_level sas_group)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_selectbox(';
put 'ver_from_dttm num ¬null format=datetime19.3,/* timestamp for versioning*/';
put 'ver_to_dttm num ¬null format=datetime19.3, /* timestamp for versioning */';
put 'selectbox_rk num ¬null, /* surrogate key */';
put 'select_lib varchar(17) ¬null, /* libref (big enough for uri)*/';
put 'select_ds varchar(32) ¬null,';
put 'base_column varchar(36) ¬null, /* variable name against which to apply selectbox */';
put 'selectbox_value varchar(500) ¬null, /* selectbox value */';
put 'selectbox_order num , /* optional ordering (1 comes before 2) */';
put 'selectbox_type varchar(32) /* column type (blank for default, else';
put 'sas or js to indicate relevant system functions)*/';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_selectbox;';
put 'index create';
put 'pk_mpe_selectbox=(ver_to_dttm selectbox_rk)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_signoffs(';
put 'tech_from_dttm num ¬null format=datetime19.3,';
put 'tech_to_dttm num ¬null format=datetime19.3,';
put 'signoff_table varchar(50) ¬null,';
put 'signoff_section_rk num ¬null,';
put 'signoff_version_rk num ¬null,';
put 'signoff_name varchar(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_signoffs;';
put 'index create';
put 'pk_mpe_signoffs=(tech_to_dttm signoff_table signoff_section_rk)';
put '/nomiss unique;';
put 'quit;';
put '/* mpe_submit */';
put 'proc sql;';
put 'create table &lib..mpe_submit(';
put 'table_id varchar(32) ¬null,';
put 'submit_status_cd varchar(10) ¬null,';
put 'base_lib char(8) ¬null,';
put 'base_ds char(32) ¬null,';
put 'submitted_by_nm varchar(100) ¬null,';
put 'submitted_on_dttm num ¬null format=datetime19.3,';
put 'submitted_reason_txt varchar(400),';
put 'input_obs num,';
put 'input_vars num,';
put 'num_of_approvals_required num ¬null ,';
put 'num_of_approvals_remaining num ¬null ,';
put 'reviewed_by_nm char(100),';
put 'reviewed_on_dttm num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_submit;';
put 'index create table_id /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_tables(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'libref char(8) ¬null,';
put 'dsn char(32) ¬null,';
put 'num_of_approvals_required int,';
put 'loadtype char(12) ,';
put 'buskey char(1000) ,';
put 'var_txfrom char(32) ,';
put 'var_txto char(32) ,';
put 'var_busfrom char(32) ,';
put 'var_busto char(32) ,';
put 'var_processed char(32) ,';
put 'close_vars varchar(500),';
put 'pre_edit_hook char(200),';
put 'post_edit_hook char(200),';
put 'pre_approve_hook char(200) ,';
put 'post_approve_hook char(200) ,';
put 'signoff_cols varchar(500),';
put 'signoff_hook varchar(200),';
put 'notes char(1000) ,';
put 'rk_underlying char(1000) ,';
put 'audit_libds char(41)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_tables;';
put 'index create';
put 'pk_mpe_tables=(tx_to libref dsn)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_users(';
put 'user_id char(50) ¬null,';
put 'last_seen_dt num ¬null format=date9.,';
put 'registered_dt num ¬null format=date9.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_users;';
put 'index create user_id /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_VALIDATIONS';
put '(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'BASE_LIB varchar(8),';
put 'BASE_DS varchar(32),';
put 'BASE_COL varchar(32),';
put 'RULE_TYPE varchar(32),';
put 'RULE_VALUE varchar(128),';
put 'RULE_ACTIVE num ,';
put 'TX_TO num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_validations;';
put 'index create';
put 'pk_mpe_validations=(tx_from base_lib base_ds base_col rule_type)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_x_test(';
put 'primary_key_field num ¬null,';
put 'some_char char(32767) ,';
put 'some_dropdown char(128),';
put 'some_num num ,';
put 'some_date num format=date9.,';
put 'some_datetime num format=datetime19. informat=ANYDTDTM19.,';
put 'some_time num format=time8.,';
put 'some_shortnum num length=4,';
put 'some_bestnum num format=best.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_x_test;';
put 'index create primary_key_field /nomiss unique;';
put 'quit;';
put '%mend mpe_makedatamodel;';
put '%macro mpe_makesampledata(outlib=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put '%if &syssite ne 70221618 and &syssite ne 70253615 %then %do;';
put '%put syssite=&syssite, exiting &sysmacroname;';
put '%return;';
put '%end;';
put 'data &outlib..class(index=(name /unique));';
put 'set sashelp.class;';
put 'run;';
put 'data &outlib..cars(index=(carspk=(make model drivetrain) /unique));';
put 'set sashelp.cars;';
put 'run;';
put 'data &outlib..springs(index=(springspk=(name area latitude) /unique));';
put 'set sashelp.springs;';
put 'run;';
put 'data &outlib..fmt_checks;;';
put 'pk=1; E8601DA=date();';
put 'format E8601DA E8601DA10.;';
put 'run;';
put 'data append;';
put 'if 0 then set &dc_libref..mpe_tables;';
put 'TX_FROM=0;';
put 'TX_TO=''31DEC9999:23:59:59''dt;';
put 'LIBREF=%upcase("&outlib");';
put 'LOADTYPE=''UPDATE'';';
put 'NUM_OF_APPROVALS_REQUIRED=1;';
put 'DSN=''SPRINGS''; BUSKEY=''NAME AREA LATITUDE''; output;';
put 'DSN=''CARS''; BUSKEY=''MAKE MODEL DRIVETRAIN''; output;';
put 'DSN=''CLASS''; BUSKEY=''NAME''; output;';
put 'DSN=''FMT_CHECKS''; BUSKEY=''PK''; output;';
put 'run;';
put 'proc append base=&dc_libref..MPE_TABLES data=&syslast;';
put 'run;';
put '/**';
put '* DC data extra';
put '*/';
put '%local lib;';
put '%let lib=&dc_libref;';
put 'proc sql;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=4';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_TABLES"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''NUM_OF_APPROVALS_REQUIRED''';
put ',RLS_OPERATOR_NM=''>''';
put ',RLS_RAW_VALUE=''0''';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=5';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=6';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=7';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=2';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=8';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=3';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=9';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=4';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=10';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=5';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=11';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=6';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=12';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=7';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=13';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=5';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=14';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=6';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=15';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=7';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=2';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=16';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=8';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=3';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=17';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=9';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=4';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=18';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=10';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=5';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=19';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=6';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=20';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=7';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put '/** create excel config */';
put 'insert into &lib..MPE_EXCEL_CONFIG set';
put 'tx_from=0';
put ',xl_libref="&lib"';
put ',xl_table="MPE_DATADICTIONARY"';
put ',xl_column="DD_LONGDESC"';
put ',xl_rule="FORMULA"';
put ',xl_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/** mpe_security table */';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="303001.DataController"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="303001.DataController"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'data append;';
put 'if 0 then set &dc_libref..mpe_tables;';
put 'TX_FROM=0;';
put 'TX_TO=''31DEC9999:23:59:59''dt;';
put 'LIBREF=%upcase("&dc_libref");';
put 'LOADTYPE=''UPDATE'';';
put 'NUM_OF_APPROVALS_REQUIRED=1;';
put 'DSN=''MPE_USERS''; BUSKEY=''USER_ID''; output;';
put 'run;';
put 'proc append base=&dc_libref..MPE_TABLES data=&syslast;';
put 'run;';
put '%mend mpe_makesampledata;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_deletejes(path=';
put ',name=';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=(%mf_isblank(&path)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(path value must be provided)';
put ')';
put '%mp_abort(iftrue=(%mf_isblank(&name)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(name value must be provided)';
put ')';
put '%mp_abort(iftrue=(%length(&path)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(path value must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%put &sysmacroname: fetching details for &path ;';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&path";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put &sysmacroname: Folder &path NOT FOUND - nothing to delete!;';
put '%return;';
put '%end;';
put '%else %if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put '%put &sysmacroname: grab the follow on link ;';
put '%local libref1;';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data _null_;';
put 'set &libref1..links;';
put 'if rel=''members'' then call symputx(''mref'',quote("&base_uri"!!trim(href)),''l'');';
put 'run;';
put '/* get the children */';
put '%local fname1a;';
put '%let fname1a=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1a &oauth_bearer';
put 'url=%unquote(%superq(mref));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '%put &=SYS_PROCHTTP_STATUS_CODE;';
put '%local libref1a;';
put '%let libref1a=%mf_getuniquelibref();';
put 'libname &libref1a JSON fileref=&fname1a;';
put '%local uri found;';
put '%let found=0;';
put '%put Getting object uri from &libref1a..items;';
put 'data _null_;';
put 'length contenttype name $1000;';
put 'set &libref1a..items;';
put 'if contenttype=''jobDefinition'' and upcase(name)="%upcase(&name)" then do;';
put 'call symputx(''uri'',cats("&base_uri",uri),''l'');';
put 'call symputx(''found'',1,''l'');';
put 'end;';
put 'run;';
put '%if &found=0 %then %do;';
put '%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;';
put '%return;';
put '%end;';
put 'proc http method="DELETE" url="&uri" &oauth_bearer;';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="*/*";/**/';
put 'run;';
put '%if &SYS_PROCHTTP_STATUS_CODE ne 204 %then %do;';
put 'data _null_; infile &fname2; input; putlog _infile_;run;';
put '%mp_abort(mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put '%else %put &sysmacroname: &path/&name successfully deleted;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put 'filename &fname1a clear;';
put 'libname &libref1a clear;';
put '%mend mv_deletejes;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief self destructing setup service';
put '@details Will create the database and perform config activities';
put ' SAS Macros
';
put '@li mf_getapploc.sas';
put '@li mf_mkdir.sas';
put '@li mf_trimstr.sas';
put '@li mpe_getvars.sas';
put '@li mpe_makedata.sas';
put '@li mpe_makedatamodel.sas';
put '@li mpe_makesampledata.sas';
put '@li mv_deletejes.sas';
put '@version 3.5';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global dcpath ADMIN ;';
put '%webout(FETCH)';
put '/* enable vars to be passed as url params */';
put '%let exist=%sysfunc(exist(work.fromjs));';
put '%let inds=%sysfunc(ifc(&exist=1,fromjs,_null_));';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''dcpath'',dcpath);';
put 'call symputx(''ADMIN'',ADMIN);';
put 'run;';
put 'options noquotelenmax;';
put '%let dclib=%upcase(VIYA%substr(%sysevalf(%sysfunc(datetime())/60),3,4));';
put '%let dclibname=Data Controller (&dclib);';
put '%let DC_LIBREF=&dclib;';
put '%let work=%sysfunc(pathname(work));';
put '%let dcpath=%mf_trimstr(&dcpath,/)/&dclib;';
put '%put &=sysuserid;';
put '%put &=dcpath;';
put '%put &=admin;';
put '%mf_mkdir(&dcpath)';
put '%mf_mkdir(&dcpath/secret)';
put '%mf_mkdir(&dcpath/dc_staging)';
put 'libname &dclib "&dcpath";';
put '%global admin;';
put '%let admin=%sysfunc(coalescec(&admin,All Users));';
put '%mpe_makedatamodel(lib=&dclib)';
put '%mpe_makedata(lib=&dclib,mpeadmins=&admin,path=%str(&dcpath))';
put '/* sample data library */';
put '%mf_mkdir(&dcpath/dc_demo)';
put 'libname dcdemo "&dcpath/dc_demo";';
put '%mpe_makesampledata(outlib=DCDEMO)';
put '/* the DC precode is stored in the root of the project */';
put '%let root=%mf_getapploc(&_program)/services;';
put '%put &=root;';
put 'filename jobout filesrvc folderpath="&root";';
put 'data _null_;';
put 'file jobout(''settings.sas'');';
put 'put ''/* these values are ignored if DC_LIBREF was declared in autoexec */'';';
put 'put '' '';';
put 'put ''%global DC_LIBREF dc_admin_group dc_staging_area ;'';';
put 'put ''/* This library (libref) contains the control datasets for DC */'';';
put 'put ''/* If a different libref must be used, configure it below */'';';
put 'put ''%let DC_LIBREF='' "&dclib;";';
put 'put '' '';';
put 'put "libname &dclib ''&dcpath'' ;";';
put 'put '' '';';
put 'put ''/* This group has unrestricted access to Data Controller */'';';
put 'put ''%let dc_admin_group='' "&admin;";';
put 'put '' '';';
put 'put ''/* This physical location is used for staging data and audit history */'';';
put 'put ''%let dc_staging_area='' "&dcpath/dc_staging;";';
put 'put '' '';';
put 'if &syssite in (70221618,70253615) then do;';
put 'put "libname dcdemo ''&dcpath/dc_demo'';";';
put 'end;';
put 'run;';
put '/* create demo data';
put 'cas dcsession;';
put 'caslib _all_ assign;';
put 'caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic GLOBAL;';
put 'proc casutil;';
put 'LOAD DATA=dcdemo.cars';
put 'CASOUT="cars"';
put 'OUTCASLIB="casmusic" PROMOTE ;';
put 'run;';
put '*/';
put '/*';
put 'cas mysess;';
put 'caslib _all_ assign;';
put 'data casmusic.artists(promote=yes);';
put 'length name varchar(30);';
put 'do tracks=1 to 100;';
put 'name=''Phil Collins''!!cats(tracks);';
put 'output;';
put 'end;';
put 'run;';
put '*/';
put '/*';
put '%let url=http://millionsongdataset.com/sites/default/files/AdditionalFiles%trim(';
put ')/unique_tracks.txt;';
put 'filename test url "&url" lrecl=3000 ;';
put 'proc sql;';
put 'drop table casmusic.tunes;';
put 'data tracks;';
put 'infile test dlmstr='''' dsd end=lastobs;';
put 'input track_id:$32. song_id:$32. artist_nm:$128. title:$256.;';
put 'output;';
put 'if lastobs then do;';
put 'track_id=''dummyrecords'';';
put 'title=''none'';';
put 'artist_nm=''none'';';
put 'do x=1 to 4000000;';
put 'drop x;';
put 'song_id=cats(x);';
put 'output;';
put 'end;';
put 'stop;';
put 'end;';
put 'run;';
put 'proc casutil;';
put 'LOAD DATA=tracks';
put 'CASOUT="tunes"';
put 'OUTCASLIB="casmusic" PROMOTE ;';
put 'run;';
put '/*';
put 'data append;';
put 'if 0 then set &dclib..MPE_TABLES;';
put 'libref="CASMUSIC";';
put 'dsn=''TUNES'';';
put 'num_of_approvals_required=1;';
put 'loadtype=''UPDATE'';';
put 'buskey=''TRACK_ID SONG_ID'';';
put 'tx_from=0;';
put 'tx_to=''31DEC9999:23:59:59''dt;';
put 'output;';
put 'dsn=''ARTISTS'';';
put 'buskey=''NAME'';';
put 'output;';
put 'run;';
put 'proc append base=&dclib..MPE_tABLES data=append;';
put 'run;';
put '*/';
put '%mp_abort(iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Err during DB build)';
put ')';
put '%webout(OPEN)';
put 'data result;';
put 'dclib="&dclib";';
put 'admingroup="&admin";';
put 'dcpath="&dcpath";';
put 'run;';
put '%webout(OBJ,result)';
put '%webout(CLOSE)';
put '%mv_deletejes(path=&root/admin, name=makedata)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshcatalog;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data work.bitemp5a_lkp (keep=&md5_col)';
put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'set work.bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[&temp_table];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mpe_refreshtables(lib,ds=#all);';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%local engine; %let engine=%mf_getengine(&lib);';
put '%local schema; %let schema=%mf_getschema(&lib);';
put '%put running &sysmacroname &lib(&engine &schema) for &ds;';
put 'proc sql;';
put 'create table cols as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib cols extraction)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib indexes extraction)';
put ')';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.indexes as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table finalcols as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.indexes b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%local dsn;';
put '%if &ds = #ALL %then %let dsn=;';
put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table work.pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.constraints';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table work.sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table work.pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from work.sum a';
put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table work.pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data work.finalpks;';
put 'set pkdefault pk4sure pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table finalcols as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* load columns */';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_vars';
put ',append_dsn=finalcols';
put ',PK=LIBREF DSN NAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF DSN';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.tabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data tabs2;';
put 'set finalcols;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table work.finaltabs as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.tabs a';
put 'left join work.tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_tabs';
put ',append_dsn=finaltabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '/* prepare table frequently changing attributes */';
put 'proc sql;';
put '%if &engine=SQLSVR %then %do;';
put 'connect using &lib;';
put 'create table work.attrs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date';
put 'FROM sys.tables ;';
put ');';
put 'create table work.nobs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema''';
put ',A.Name, AVG(B.rows) AS ''RowCount''';
put 'FROM sys.objects A';
put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id';
put 'WHERE A.type = ''U''';
put 'GROUP BY A.schema_id, A.Name';
put ');';
put 'disconnect from &lib;';
put 'create table statustabs as select';
put 'a.libref';
put ',a.dsn';
put ',b.create_date as crdate';
put ',b.modify_date as modate';
put ',. as filesize';
put ',c.RowCount as nobs';
put 'from work.tabs a';
put 'left join work.attrs(where=(schema="&schema")) b';
put 'on upcase(a.dsn)=upcase(b.name)';
put 'left join work.nobs(where=(schema="&schema")) c';
put 'on upcase(a.dsn)=upcase(c.name);';
put '%end;';
put '%else %do;';
put 'create table statustabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',crdate';
put ',modate';
put ',filesize';
put ',nobs';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%end;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_tabs';
put ',append_dsn=statustabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '%if &ds = #ALL %then %do;';
put 'proc sql;';
put 'create table statuslibs as select';
put 'libref';
put ',sum(filesize) as libsize';
put ',count(*) as table_cnt';
put 'from statustabs';
put 'group by 1;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_libs';
put ',append_dsn=statuslibs';
put ',PK=LIBREF';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put ')';
put '%end;';
put '%mend mpe_refreshtables;';
put '%macro dc_refreshcatalog();';
put '%mpe_refreshlibs()';
put 'filename executor catalog ''work.code.code.source'';';
put 'data libraries;';
put 'set &mpelib..mpe_datacatalog_libs;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'file executor;';
put 'str=cats(''%mpe_refreshtables('',libref,'')'');';
put 'put str;';
put 'putlog str;';
put 'run;';
put '%inc executor;';
put '%mend dc_refreshcatalog;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshcatalog.sas';
put '@brief Refreshes the library data catalog';
put '@details A library may be passed in a LIBREF url param.';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li dc_refreshcatalog.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global libref;';
put '%mpeinit()';
put '%dc_refreshcatalog(&libref)';
put 'data _null_;';
put 'file _webout;';
put 'put '' Catalog Refresh Complete
'';';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshlibs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data work.bitemp5a_lkp (keep=&md5_col)';
put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'set work.bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[&temp_table];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshlibs.sas';
put '@brief Refreshes the library data catalog';
put '@details';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li mpe_refreshlibs.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mpe_refreshlibs()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=registerkey;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data work.bitemp5a_lkp (keep=&md5_col)';
put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'set work.bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[&temp_table];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Register a new licence key';
put '@details';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li bitemporal_dataloader.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '@test';
put 'echo ''{"keyupload":[{"activation_key":"slfdjasfda;dslf","licence_key":"asdfasdlfkajsfdas"}]}''>in.json';
put 'sasjs request admin/registerkey -d in.json';
put '**/';
put '%mpeinit()';
put '/* determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%global admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from groups where groupname="&mpeadmins";';
put '%mp_abort(iftrue= (&admin_check = 0)';
put ',mac=%str(&_program)';
put ',msg=%str(Only members of &mpeadmins may register a key)';
put ')';
put '%global licencekey activation_key;';
put 'data _null_;';
put 'set work.keyupload;';
put 'call symputx(''activation_key'',activation_key);';
put 'call symputx(''licencekey'',licence_key);';
put 'call symputx(''activlen'',length(activation_key));';
put 'call symputx(''liclen'',length(licence_key));';
put 'run;';
put '%mp_abort(iftrue= (&activlen< 10)';
put ',mac=%str(&_program)';
put ',msg=%str(Invalid activation_key)';
put ')';
put '%mp_abort(iftrue= (&liclen < 10)';
put ',mac=%str(&_program)';
put ',msg=%str(Invalid licencekey)';
put ')';
put 'data work.loadme;';
put 'if 0 then set &mpelib..mpe_config;';
put 'VAR_SCOPE=''DC'';';
put 'VAR_NAME=''DC_ACTIVATION_KEY'';';
put 'VAR_VALUE=symget(''activation_key'');';
put 'VAR_ACTIVE=1;';
put 'output;';
put 'VAR_NAME=''DC_LICENCE_KEY'';';
put 'VAR_VALUE=symget(''licencekey'');';
put 'VAR_ACTIVE=1;';
put 'output;';
put 'keep VAR_: ;';
put 'run;';
put '%bitemporal_dataloader(';
put 'tech_from=tx_from';
put ',tech_to = tx_to';
put ',base_lib=&mpelib';
put ',base_dsn=mpe_config';
put ',append_lib=WORK';
put ',append_dsn=loadme';
put ',PK= VAR_SCOPE VAR_NAME';
put ',ETLSOURCE=%str(&_program STP)';
put ',LOADTYPE=TXTEMPORAL';
put ',dclib=&mpelib';
put ')';
put 'data work.return;';
put 'msg=''SUCCESS'';';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,return)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/approvers;
%let service=getapprovals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getapprovals.sas';
put '@brief Returns a list of staged data items that need to be approved';
put '@details';
put ' SAS Macros
';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* determine users group membership */';
put '%let user=%mf_getuser();';
put '%mpe_getgroups(user=&user,outds=work.groups)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put 'proc sql noprint;';
put 'create table out1 (rename=(SUBMITTED_ON_DTTM1=SUBMITTED_ON_DTTM)) as';
put 'select table_id';
put ',submit_status_cd as REVIEW_STATUS_ID';
put ',SUBMITTED_BY_NM';
put ',cats(base_lib,''.'',base_ds) as base_table';
put ',put(submitted_on_dttm,yymmddhhmmss.) as SUBMITTED_ON_DTTM1';
put ',submitted_on_dttm as SUBMITTED_ON_DTTM2';
put ',submitted_reason_txt';
put ',num_of_approvals_required';
put ',num_of_approvals_remaining';
put ',base_lib as libref';
put ',base_ds as dsn';
put 'from &mpelib..mpe_submit (where=(submit_status_cd=''SUBMITTED''))';
put '/* filter out any submits for which approval is already made */';
put 'where table_id not in (';
put 'select table_id from &mpelib..mpe_review where submitted_by_nm="&user"';
put ');';
put '%macro getapprovals();';
put '%local admin_check;';
put 'select count(*) into: admin_check';
put 'from groups';
put 'where groupname="&mpeadmins"';
put 'or groupname in (';
put 'select sas_group from &mpelib..mpe_security';
put 'where libref=''*ALL*''';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and access_level in (''APPROVE'')';
put ');';
put '%if &admin_check >0 %then %do;';
put 'create table fromSAS as';
put 'select distinct * from out1';
put 'order by SUBMITTED_ON_DTTM2 desc;';
put '%end;';
put '%else %do;';
put 'create table fromSAS as';
put 'select distinct a.*';
put 'from out1 a';
put 'inner join &mpelib..mpe_security b';
put 'on a.libref=b.libref';
put 'and (a.dsn=b.dsn or b.dsn=''*ALL*'')';
put 'and &dc_dttmtfmt. lt b.tx_to';
put 'and b.ACCESS_LEVEL =''APPROVE''';
put 'and b.SAS_GROUP in (select groupname from work.groups)';
put 'order by SUBMITTED_ON_DTTM2 desc;';
put '%end;';
put '%mend getapprovals;';
put '%getapprovals()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS,missing=STRING)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=gethistory;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Returns the list of previously approved / rejected items.';
put '@details History is taken from MPE_SUBMIT (where status_cd ne ''SUBMITTED'') and';
put 'filtered according to the groups in MPE_SECURITY (unless the user is in the';
put 'DC admin group).';
put ' SAS Macros
';
put '@li mpe_getvars.sas';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put ' Service Inputs
';
put ' BROWSERPARAMS
';
put 'The following variables MAY be provided from frontend (HIST can also be set';
put 'in MPE_CONFIG):';
put '@li HIST - number of records to return';
put '@li STARTROW - the starting row (default is 1)';
put ' Service Outputs
';
put ' FROMSAS
';
put 'This table is returned, starting from &STARTROW for &HIST rows (ordered';
put 'descending on SUBMITTED datetime)';
put '@li TABLE_ID';
put '@li BASE_TABLE';
put '@li SUBMITTED';
put '@li SUBMITTED_REASON_TXT';
put '@li SUBMITTER';
put '@li REVIEWED';
put '@li STATUS';
put '@li REVIEWED_ON_DTTM';
put '@li APPROVER';
put ' HISTPARAMS
';
put '@li HIST - rows returned';
put '@li STARTROW - starting row used';
put '@li NOBS - Number of observations (rows) available';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* hard coded HIST value */';
put '%let hist=40;';
put '%let startrow=1;';
put '/* load parameters from frontend (HIST and STARTROW) */';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC_REVIEW"';
put 'and var_name=''HISTORY_ROWS''';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(''hist'',var_value,''G'');';
put 'putlog ''mpe_config: '' var_name "=" var_value;';
put 'run;';
put '/* load parameters (override HIST again if provided) */';
put '%mpe_getvars(BrowserParams, BrowserParams)';
put '/* determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '/* check to see if the user is an admin, or has *ALL* access rights */';
put '%let authcheck=0;';
put 'proc sql noprint;';
put 'create table work.authcheck';
put 'as select *';
put 'from usergroups';
put 'where upcase(groupname)="%upcase(&mpeadmins)"';
put 'or upcase(groupname) in (';
put 'select upcase(sas_group) from &mpelib..mpe_security';
put 'where libref=''*ALL*'' and &dc_dttmtfmt. lt tx_to';
put ');';
put 'select count(*) into: authcheck from &syslast;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after auth check)';
put ')';
put '/* now get the previous &hist records from mpe_submit */';
put 'proc sql;';
put 'create view work.submits as';
put 'select distinct a.TABLE_ID';
put ',cats(a.base_lib,''.'',a.base_ds) as base_table';
put ',put(a.SUBMITTED_ON_DTTM,yymmddhhmmss.) as submitted';
put ',a.submitted_reason_txt';
put ',a.submitted_by_nm as submitter';
put ',put(a.REVIEWED_ON_DTTM,yymmddhhmmss.) as REVIEWED';
put ',a.submit_status_cd as status';
put 'from &mpelib..mpe_submit(where=(submit_status_cd ne ''SUBMITTED'')) a';
put '%macro gethistory();';
put '%if &authcheck=0 %then %do;';
put '/* filter for allowed items */';
put 'left join &mpelib..mpe_security(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.base_lib=b.libref';
put 'and (a.base_ds=b.dsn or b.dsn=''*ALL*'')';
put 'where upcase(b.SAS_GROUP) in (select upcase(groupname) from work.usergroups)';
put 'and b.access_level in (''VIEW'',''AUDIT'',''EDIT'',''APPROVE'')';
put '%end;';
put '%mend gethistory;';
put '%gethistory()';
put ';';
put '/* get latest reason text */';
put 'create table work.reviews as';
put 'select a.*';
put ',b.reviewed_on_dttm';
put ',b.reviewed_by_nm as approver';
put ',b.review_reason_txt';
put 'from work.submits a';
put 'left join &mpelib..mpe_review b';
put 'on a.table_id=b.table_id';
put 'order by a.table_id desc, b.reviewed_on_dttm desc;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after fetching submits)';
put ')';
put 'data work.fromsas;';
put 'set work.reviews;';
put 'by descending table_id descending reviewed_on_dttm;';
put 'if first.table_id;';
put 'if _n_ ge &startrow;';
put 'n+1;';
put 'if n>&hist then stop;';
put 'drop n;';
put 'run;';
put 'proc sql noprint;';
put 'select count(*) into: nobs from work.submits;';
put 'data work.histparams;';
put 'hist=&hist;';
put 'startrow=&startrow;';
put 'nobs=&nobs;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS,missing=STRING)';
put '%webout(OBJ,histparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=rejection;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'end;';
put 'else do;';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Removes a staged data package from approval screen';
put '@details';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_lockanytable.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_alerts.sas';
put '@li mpe_getvars.sas';
put '@li removecolsfromwork.sas';
put ' Service Outputs
';
put ' fromsas
';
put '@li TABLE_ID';
put '@li SUBMITTED_REASON_TXT';
put '@li RESPONSE';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global STP_ACTION TABLE STP_REASON;';
put '%mpeinit()';
put '%mpe_getvars(BrowserParams, BrowserParams)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '/* get current status and base table */';
put 'data _null_;';
put 'set &mpelib..mpe_submit(where=(TABLE_ID="&TABLE"));';
put 'call symputx(''BASE_TABLE'',cats(base_lib,''.'',base_ds));';
put 'call symputx(''submit_status_cd'',submit_status_cd);';
put 'run;';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: base_table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%quote(&submit_status_cd)=%quote(REJECTED))';
put ',mac=&_program';
put ',msg=%str(&table is already rejected!)';
put ')';
put '%mp_abort(iftrue= (&syscc ge 4)';
put ',mac=&_program';
put ',msg=%str(Issue on setup)';
put ')';
put '/**';
put '* determine if user is authorised to reject table';
put '*/';
put '%let user=%mf_getuser();';
put '%global authcheck; %let authcheck=0;';
put '%mpe_accesscheck(&base_table,outds=authAPP,user=&user,access_level=APPROVE)';
put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);';
put '%mp_abort(iftrue= (&authcheck=0)';
put ',mac=&_program..sas';
put ',msg=%str(User &user does not have APPROVE rights on &base_table and is not';
put 'in the &mpeadmins group)';
put ')';
put '/* update the control table to show table as rejected (and why) */';
put '%let now=%sysfunc(datetime());';
put 'data work.reject;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&table";';
put 'BASE_TABLE="&base_table";';
put 'REVIEW_STATUS_ID="REJECTED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&now;';
put 'REVIEW_REASON_TXT=symget(''STP_REASON'');';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&table rejection),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.reject;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&table rejection),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set submit_status_cd=''REJECTED'',';
put 'num_of_approvals_remaining=0,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&now';
put 'where table_id="&table";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc AFTER update...)';
put ')';
put '%mpe_alerts(alert_event=REJECTED';
put ', alert_lib=%scan(&BASE_TABLE,1,.)';
put ', alert_ds=%scan(&BASE_TABLE,2,.)';
put ', dsid=&TABLE';
put ')';
put 'data fromSAS;';
put 'RESPONSE=''SUCCESS!'';';
put 'set REJECT;';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/auditors;
%let service=getauditfile;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getauditfile.sas';
put '@brief Downloads a zip file containing audit info.';
put '@details The staging location from the &mpelocapprovals location';
put 'is zipped and returned as a file download. A user can only request the';
put 'audit pack if they have EDIT or APPROVE rights on the target table.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_verifymacvars.sas';
put '@li mpe_accesscheck.sas';
put '@li mp_abort.sas';
put '@li mp_dirlist.sas';
put '@li mp_binarycopy.sas';
put '@li mf_getattrn.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'options mprint;';
put '/* security checks */';
put '%let user=%mf_getuser();';
put 'proc sql noprint;';
put 'select cats(base_lib,''.'',base_ds) into: libds';
put 'from &mpelib..mpe_submit';
put 'where table_id="&table";';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(libds table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: libds table)';
put ')';
put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT);';
put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE);';
put '%mp_abort(';
put 'iftrue=(';
put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put ')';
put ',mac=mpestp_audit';
put ',msg=%str(&user not authorised to download audit data for &table)';
put ')';
put 'ods package(ProdOutput) open nopf;';
put 'options notes source2 mprint;';
put '%let table=%unquote(&table);';
put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE);';
put 'data _null_;';
put 'set dirs;';
put 'retain str1';
put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";';
put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";';
put 'call execute(cats(str1,filename,str2));';
put 'run;';
put '%let archive_path=%sysfunc(pathname(work));';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name= "&table..zip" archive_path="&archive_path");';
put 'ods package(ProdOutput) close;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%nrstr(syscc=&syscc)';
put ')';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&archive_path/&table..zip)';
put ',outname=&table..zip';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getdiffs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdiffs.sas';
put '@brief Retrieves the diff file for viewing';
put '@details';
put ' SAS Macros
';
put '@li mpe_getvars.sas';
put '@li mpe_accesscheck.sas';
put '@li mf_getattrn.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mpe_getvars(BrowserParams, BrowserParams);';
put '/* security checks */';
put '%let user=%mf_getuser();';
put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT)';
put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE)';
put '%macro mpestp_diffs();';
put '%if %mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put '%then %do;';
put '%mp_abort(msg=%str(';
put '&user not authorised to download diffs data for &stp_table)';
put ',mac=mpestp_diffs.sas);';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/* stream diffs csv to client */';
put '%mp_streamfile(contenttype=EXCEL';
put ',inloc=%str(&mpelocapprovals/&TABLE/&STP_DIFFS_CSV)';
put ',outname=&STP_DIFFS_CSV';
put ')';
put '%mend mpestp_diffs;';
put '%mpestp_diffs()';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getstagetable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getstagetable.sas';
put '@brief Retrieves the actual table that is being sent for update';
put '@details';
put ' SAS Macros
';
put '@li mf_getvalue.sas';
put '@li mp_abort.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let table_id=%mf_getvalue(work.iwant,table_id);';
put 'libname loc "&mpelocapprovals/&table_id";';
put 'data stagetable;';
put 'set loc.&table_id;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,stagetable,missing=STRING)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=postdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data work.bitemp5a_lkp (keep=&md5_col)';
put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'set work.bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[&temp_table];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'end;';
put 'else do;';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_md5(cvars=,nvars=);';
put '%local i var sep;';
put 'put(md5(';
put '%do i=1 %to %sysfunc(countw(&cvars));';
put '%let var=%scan(&cvars,&i,%str( ));';
put '&sep put(md5(trim(&var)),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '%do i=1 %to %sysfunc(countw(&nvars));';
put '%let var=%scan(&nvars,&i,%str( ));';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '),$hex32.)';
put '%mend mp_md5;';
put '%macro mp_loadformat(libcat,libds';
put ',loadtarget=NO';
put ',auditlibds=0';
put ',locklibds=0';
put ',delete_col=_____DELETE__THIS__RECORD_____';
put ',outds_add=0';
put ',outds_del=0';
put ',outds_mod=0';
put ',mdebug=0';
put ');';
put '/* set up local macro variables and temporary tables (with a prefix) */';
put '%local err msg prefix dslist i var fmtlist ibufsize;';
put '%let dslist=base_fmts template inlibds ds1 stagedata storediffs del1 del2;';
put '%if &outds_add=0 %then %let dslist=&dslist outds_add;';
put '%if &outds_del=0 %then %let dslist=&dslist outds_del;';
put '%if &outds_mod=0 %then %let dslist=&dslist outds_mod;';
put '%let prefix=%substr(%mf_getuniquename(),1,21);';
put '%do i=1 %to %sysfunc(countw(&dslist));';
put '%let var=%scan(&dslist,&i);';
put '%local &var;';
put '%let &var=%upcase(&prefix._&var);';
put '%end;';
put '/* in DC, format catalogs maybe specified in the libds with a -FC extension */';
put '%let libcat=%scan(&libcat,1,-);';
put '/* perform input validations */';
put '%mp_abort(';
put 'iftrue=(%mf_existds(&libds)=0)';
put ',mac=&sysmacroname';
put ',msg=%str(&libds could not be found)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_existvar(&libds,FMTROW)=0)';
put ',mac=&sysmacroname';
put ',msg=%str(FMTROW not found in &libds)';
put ')';
put '%let err=0;';
put '%let msg=0;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'value=upcase(value);';
put 'if &mdebug=0 then put name ''='' value;';
put 'if name=:''LOAD'' and value not in (''YES'',''NO'') then do;';
put 'call symputx(''msg'',"invalid value for "!!name!!":"!!value);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'else if name=''LIBCAT'' then do;';
put 'if exist(value,''CATALOG'') le 0 then do;';
put 'call symputx(''msg'',"Unable to open catalog: "!!value);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if (name=:''OUTDS'' or name in (''DELETE_COL'',''LOCKLIBDS'',''AUDITLIBDS''))';
put 'and missing(value) then do;';
put 'call symputx(''msg'',"missing value in var: "!!name);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'set &libds;';
put 'if missing(fmtrow) then do;';
put 'call symputx(''msg'',"missing fmtrow in format: "!!FMTNAME);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'run;';
put '%mp_abort(';
put 'iftrue=(&err ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(&msg)';
put ')';
put '%local cnt;';
put 'proc sql noprint;';
put 'select count(distinct catx(''|'',type,fmtname,fmtrow)) into: cnt from &libds;';
put '%mp_abort(';
put 'iftrue=(&cnt ne %mf_nobs(&libds))';
put ',mac=&sysmacroname';
put ',msg=%str(Non-unique primary key on &libds)';
put ')';
put '/**';
put '* First, extract only relevant formats from the catalog';
put '*/';
put 'proc sql noprint;';
put 'select distinct';
put 'case';
put 'when type=''N'' then upcase(fmtname)';
put 'when type=''C'' then cats(''$'',upcase(fmtname))';
put 'when type=''I'' then cats(''@'',upcase(fmtname))';
put 'when type=''J'' then cats(''@$'',upcase(fmtname))';
put 'else "&sysmacroname:UNHANDLED"';
put 'end';
put 'into: fmtlist separated by '' ''';
put 'from &libds;';
put '%mp_cntlout(libcat=&libcat,fmtlist=&fmtlist,cntlout=&base_fmts)';
put '/* get a hash of the row */';
put '%local cvars nvars;';
put '%let cvars=TYPE FMTNAME START END LABEL PREFIX FILL SEXCL EEXCL HLO DECSEP';
put 'DIG3SEP DATATYPE LANGUAGE;';
put '%let nvars=FMTROW MIN MAX DEFAULT LENGTH FUZZ MULT NOEDIT;';
put 'data &base_fmts/note2err;';
put 'set &base_fmts;';
put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);';
put 'run;';
put '/**';
put '* Ensure input table and base_formats have consistent lengths and types';
put '*/';
put 'data &inlibds/nonote2err;';
put 'length &delete_col $3 FMTROW 8 start end label $32767;';
put 'if 0 then set &base_fmts;';
put 'set &libds;';
put 'by type fmtname notsorted;';
put 'if &delete_col='''' then &delete_col=''No'';';
put 'fmtname=upcase(fmtname);';
put 'type=upcase(type);';
put 'if missing(type) then do;';
put 'if substr(fmtname,1,1)=''@'' then do;';
put 'if substr(fmtname,2,1)=''$'' then type=''J'';';
put 'else type=''I'';';
put 'end;';
put 'else do;';
put 'if substr(fmtname,1,1)=''$'' then type=''C'';';
put 'else type=''N'';';
put 'end;';
put 'end;';
put 'if type in (''N'',''I'') then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);';
put 'run;';
put '/**';
put '* Identify new records';
put '*/';
put 'proc sql;';
put 'create table &outds_add(drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'left join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where b.fmtname is null';
put 'and upcase(a.&delete_col) ne "YES"';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify modified records';
put '*/';
put 'create table &outds_mod (drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'inner join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where upcase(a.&delete_col) ne "YES"';
put 'and a.fmthash ne b.fmthash';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify deleted records';
put '*/';
put 'create table &outds_del(drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'inner join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where upcase(a.&delete_col)="YES"';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify fully deleted formats (where every record is removed)';
put '* These require to be explicitly deleted in proc format';
put '* del1 - identify _partial_ deletes';
put '* del2 - exclude these, and also formats that come with _additions_';
put '*/';
put 'create table &del1 as';
put 'select a.*';
put 'from &base_fmts a';
put 'left join &outds_del b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where b.fmtrow is null;';
put 'create table &del2 as';
put 'select * from &outds_del';
put 'where cats(type,fmtname) not in (select cats(type,fmtname) from &outds_add)';
put 'and cats(type,fmtname) not in (select cats(type,fmtname) from &del1);';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc prior to load prep)';
put ')';
put '%if &loadtarget=YES %then %do;';
put '/* new records plus base records that are not deleted or modified */';
put 'data &ds1;';
put 'merge &base_fmts(in=base)';
put '&outds_mod(in=mod)';
put '&outds_add(in=add)';
put '&outds_del(in=del);';
put 'if not del and not mod;';
put 'by type fmtname fmtrow;';
put 'run;';
put '/* add back the modified records */';
put 'data &stagedata;';
put 'set &ds1 &outds_mod;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put '%end;';
put '/* mp abort needs to run outside of conditional blocks */';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc prior to actual load)';
put ')';
put '%if &loadtarget=YES %then %do;';
put '%if %mf_nobs(&stagedata)=0 and %mf_nobs(&del2)=0 %then %do;';
put '%put There are no changes to load in &libcat!;';
put '%return;';
put '%end;';
put '%if &locklibds ne 0 %then %do;';
put '/* prevent parallel updates */';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&libcat,1,.)';
put ',ds=%scan(&libcat,2,.)-FC';
put ',ref=MP_LOADFORMAT commencing format load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '/* do the actual load */';
put 'proc format lib=&libcat cntlin=&stagedata;';
put 'run;';
put '/* apply any full deletes */';
put '%if %mf_nobs(&del2)>0 %then %do;';
put '%local delfmtlist;';
put 'proc sql noprint;';
put 'select distinct case when type=''N'' then cats(fmtname,''.FORMAT'')';
put 'when type=''C'' then cats(fmtname,''.FORMATC'')';
put 'when type=''J'' then cats(fmtname,''.INFMTC'')';
put 'when type=''I'' then cats(fmtname,''.INFMT'')';
put 'else cats(fmtname,''.BADENTRY!!!'') end';
put 'into: delfmtlist';
put 'separated by '' ''';
put 'from &del2;';
put 'proc catalog catalog=&libcat;';
put 'delete &delfmtlist;';
put 'quit;';
put '%end;';
put '%if &locklibds ne 0 %then %do;';
put '/* unlock the table */';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&libcat,1,.)';
put ',ds=%scan(&libcat,2,.)-FC';
put ',ref=MP_LOADFORMAT completed format load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '/* track the changes */';
put '%if &auditlibds ne 0 %then %do;';
put '%if &locklibds ne 0 %then %do;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&auditlibds,1,.)';
put ',ds=%scan(&auditlibds,2,.)';
put ',ref=MP_LOADFORMAT commencing audit table load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '%mp_storediffs(&libcat-FC';
put ',&base_fmts';
put ',TYPE FMTNAME FMTROW';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=&storediffs';
put ',mdebug=&mdebug';
put ')';
put 'proc append base=&auditlibds data=&storediffs;';
put 'run;';
put '%if &locklibds ne 0 %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&auditlibds,1,.)';
put ',ds=%scan(&auditlibds,2,.)';
put ',ref=MP_LOADFORMAT commencing audit table load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '%end;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc after load)';
put ')';
put '%if &mdebug=0 %then %do;';
put 'proc datasets lib=work;';
put 'delete &prefix:;';
put 'run;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%mend mp_loadformat;';
put '%macro mpe_targetloader(libds= /* library.dataset to LOAD (target) */';
put ',now= %sysfunc(datetime()) /* static processed timestamp */';
put ',etlsource= /* process from whence the data came */';
put ',STAGING_DS= STAGING_DS /* name of staging (work) dataset which should';
put 'be appended into the target. */';
put ',LOADTARGET=NO /* set to yes to actually load the target */';
put ',CLOSE_VARS= /* provide close vars to override defaults */';
put ',dclib=NOTPROVIDED';
put ',mdebug=0';
put ',dc_dttmtfmt=%sysfunc(datetime())';
put ');';
put '%local lib ds nobs;';
put '/**';
put '* if a format catalog (suffix "-FC") we assume the catalog has already been';
put '* created by the calling program with a libds of work.fmtextract';
put '*/';
put '%let orig_lib=%upcase(%scan(&libds,1,.));';
put '%let orig_ds=%upcase(%scan(&libds,2,.));';
put '%let orig_libds=&libds;';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%let lib=WORK;';
put '%let ds=FMTEXTRACT;';
put '%let libds=&lib..&ds;';
put '%end;';
put '%else %do;';
put '%let lib=&orig_lib;';
put '%let ds=&orig_ds;';
put '%end;';
put '%mp_abort(iftrue= (&dclib=NOTPROVIDED)';
put ',mac=&sysmacroname';
put ',msg=%str(dclib=NOTPROVIDED)';
put ')';
put '/* get table attributes */';
put '%let nobs=0;';
put 'data work.sumo_config;';
put 'set &mpelib..mpe_tables;';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="&orig_lib"';
put 'and dsn="&orig_ds";';
put 'call symputx(''LOADTYPE'',loadtype,''l'');';
put 'call symputx(''BUSKEY'',buskey,''l'');';
put 'call symputx(''VAR_TXFROM'',var_txfrom,''l'');';
put 'call symputx(''VAR_TXTO'',var_txto,''l'');';
put 'call symputx(''VAR_BUSFROM'',var_busfrom,''l'');';
put 'call symputx(''VAR_BUSTO'',var_busto,''l'');';
put 'call symputx(''VAR_PROCESSED'',VAR_PROCESSED,''l'');';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING,''l'');';
put '%if %length(&CLOSE_VARS)=0 %then %do;';
put 'call symputx(''CLOSE_VARS'',CLOSE_VARS,''l'');';
put '%end;';
put 'call symputx(''nobs'',_n_,''l'');';
put 'if missing(AUDIT_LIBDS) then AUDIT_LIBDS="&dclib..MPE_AUDIT";';
put 'call symputx(''AUDIT_LIBDS'',AUDIT_LIBDS,''l'');';
put 'put (_all_)(=);';
put 'run;';
put '/* check if table is actually configured to load */';
put '%if &nobs ne 1 %then %do;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="%mf_getuser()"';
put ',STATUS=''FAILED (BAD DS)''';
put ',CSV_DIR=symget(''ETLSOURCE'')';
put ',PROCESSED_DTTM=&now;';
put '%end;';
put '%mp_abort(iftrue= (&nobs=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Table not registered in &mpelib..mpe_tables)';
put ')';
put '%mp_abort(iftrue= (&nobs>1)';
put ',mac=&sysmacroname';
put ',msg=%str(Something is very wrong with the PK in &mpelib..mpe_tables)';
put ')';
put '%if &LOADTYPE=TXTEMPORAL %then %do;';
put '%bitemporal_dataloader(bus_from=,bus_to= /* explicitly empty*/';
put ',tech_from=&VAR_TXFROM';
put ',tech_to = &VAR_TXTO';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=&ETLSOURCE';
put ',LOADTYPE=&loadtype';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',CLOSE_VARS=&CLOSE_VARS';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %if &loadtype=REPLACE %then %do;';
put '%if &LOADTARGET=YES %then %do;';
put '%mp_lockanytable(LOCK,lib=&lib,ds=&ds,ref=%str(&etlsource),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put 'data WORK.&STAGING_DS;';
put 'set WORK.&STAGING_DS;';
put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;';
put '&VAR_PROCESSED = &now;';
put '%end;';
put 'drop _____DELETE__THIS__RECORD_____;';
put 'run;';
put 'proc sql; delete * from &libds;';
put 'proc append base=&libds data=WORK.&STAGING_DS force nowarn;run;';
put '%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ctl_ds=&dclib..mpe_lockanytable)';
put '%end;';
put '%else %do;';
put '/* is full replace so treat all staged records as new in diff screen */';
put 'data work.outds_mod work.outds_add ;';
put 'set work.&staging_ds;';
put 'output work.outds_add;';
put 'run;';
put '/* previous table will be considered fully deleted */';
put 'data work.outds_del;';
put 'set &lib..&ds;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '%bitemporal_dataloader(bus_from=,bus_to=';
put ',tech_from= ,tech_to = /* explicitly empty*/';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=%superq(etlsource)';
put ',LOADTYPE=UPDATE';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %if &loadtype=FORMAT_CAT %then %do;';
put '/**';
put '* run mp_formatload';
put '* inputs:';
put '* - LOADTARGET';
put '* - CATALOG';
put '* - STAGEDATA';
put '* - LOADAUDIT';
put '* outputs:';
put '* work.outds_add';
put '* work.outds_del';
put '* work.outds_mod';
put '*/';
put '%mp_loadformat(&orig_libds';
put ',&staging_ds';
put ',loadtarget=&LOADTARGET';
put ',auditlibds=&AUDIT_LIBDS';
put ',locklibds=&dclib..mpe_lockanytable';
put ',delete_col=_____DELETE__THIS__RECORD_____';
put ',outds_add=outds_add';
put ',outds_del=outds_del';
put ',outds_mod=outds_mod';
put ',mdebug=&mdebug';
put ')';
put '%end;';
put '%else %if &loadtype=BITEMPORAL %then %do;';
put '%bitemporal_dataloader(bus_from=&VAR_BUSFROM,bus_to=&VAR_BUSTO';
put ',tech_from=&VAR_TXFROM';
put ',tech_to = &VAR_TXTO';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=%superq(etlsource)';
put ',LOADTYPE=BITEMPORAL';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',CLOSE_VARS=&CLOSE_VARS';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %do;';
put '%put %str(WARN)ING: LOADTYPE &LOADTYPE not supported;';
put '%let syscc=4;';
put '%mp_abort(msg=LOADTYPE &LOADTYPE not supported,mac=mpe_targetloader.sas)';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc exiting MPE_TARGETLOADER macro)';
put ')';
put '%mend mpe_targetloader;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file postdata.sas';
put '@brief Either returns the file diffs or actually loads the data to target';
put '@details Before loading the target, a check is made against the time the';
put 'target was last updated (backend) and the time the DIFF was generated';
put '(frontend). If the target was updated whilst the DIFF was on the screen,';
put 'then the provided diff may have been incorrect and so a new DIFF should be';
put 'generated and approved before load.';
put 'Only 100 rows (of each DIFF type) are displayed on the DIFF screen.';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|ACTION:$char10.|TABLE:$char32.|DIFFTIME:$char29.|';
put '|---|---|---|';
put '|SHOW_DIFFS|DC20220208T142124517_124703_1184|"Tue, 08 Feb 2022 14:23:05 GMT"|';
put ' SAS Macros
';
put '@li bitemporal_dataloader.sas';
put '@li dc_assignlib.sas';
put '@li mf_existds.sas';
put '@li mf_existvar.sas';
put '@li mf_getattrn.sas';
put '@li mf_getengine.sas';
put '@li mf_getquotedstr.sas';
put '@li mf_getuniquelibref.sas';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_lockanytable.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_alerts.sas';
put '@li mpe_runhook.sas';
put '@li mpe_targetloader.sas';
put '@li removecolsfromwork.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '/* this could be a config setting if required */';
put '%let maxdiff=100;';
put '%mpeinit()';
put '/* load parameters */';
put 'data _null_;';
put 'set work.sascontroltable;';
put 'call symputx(''ACTION'',ACTION);';
put 'call symputx(''LOAD_REF'',TABLE);';
put '/* DIFFTIME is when the DIFF was generated on the frontend */';
put 'call symputx(''DIFFTIME'',DIFFTIME);';
put 'putlog (_all_)(=);';
put 'run;';
put '%global action is_err err_msg msg;';
put '%let is_err=0;';
put '%let user=%mf_getuser();';
put '%let sastime=%sysfunc(datetime());';
put 'data sastime;';
put 'dt_sastime=&sastime;';
put 'run;';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'picture flatdate other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/* SHOW_DIFFS works by getting the temp tables from the bitemporal loader */';
put '/* so we share much of the logic from the actual load process */';
put '%let isfmtcat=0;';
put 'data APPROVE1;';
put 'set &mpelib..mpe_submit;';
put 'where TABLE_ID="&LOAD_REF";';
put '/* fetch mpe_submit data */';
put 'libds=cats(base_lib,''.'',base_ds);';
put 'REVIEWED_ON=put(reviewed_on_dttm,datetime19.);';
put 'call symputx(''REVIEW_STATUS_ID'',submit_status_cd,''l'');';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED);';
put 'call symputx(''num_of_approvals_remaining'',num_of_approvals_remaining);';
put '/* other stuff that''s useful to do in data step */';
put 'call symputx(''orig_libds'',libds);';
put 'call symputx(''libds'',libds);';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''isfmtcat'',1);';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'putlog (_all_)(=);';
put '/* convert provided string DIFFTIME back to a numeric SAS datetime */';
put 'if "&action" ne "SHOW_DIFFS" then do;';
put 'call symputx(''DIFFTIME'',input(symget(''DIFFTIME''),anydtdtm18.));';
put 'end;';
put 'length difftime $32;';
put 'DIFFTIME=put(&sastime,datetime19.2);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&isfmtcat=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(difftime orig_libds libds load_ref)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: difftime orig_libds libds load_ref)';
put ')';
put '/* security checks */';
put '%mpe_accesscheck(&orig_libds,outds=authEDIT,user=&user,access_level=EDIT)';
put '%mpe_accesscheck(&orig_libds,outds=authAPP,user=&user,access_level=APPROVE)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc Before entering postdata macro)';
put ')';
put '%mp_abort(';
put 'iftrue=(';
put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put ')';
put ',mac=&_program';
put ',msg=%str(&user not authorised to view approval screen for &orig_libds)';
put ')';
put '%macro quickmacro(inds,outds);';
put 'data &outds ;';
put '%if %length(&VAR_BUSFROM)>0 %then %do;';
put 'format &VAR_BUSFROM &VAR_BUSTO yymmddhhmmss.;';
put '%end;';
put 'if 0 then set &emptybasetable;';
put 'set &inds;';
put '%if %mf_existvar(&libds,&var_txfrom) %then %do;';
put 'drop &var_txfrom &var_txto;';
put '%end;';
put '%if %mf_existvar(&inds,_____DELETE__THIS__RECORD_____) %then %do;';
put 'drop _____DELETE__THIS__RECORD_____;';
put '%end;';
put '%if %mf_existvar(&inds,&VAR_PROCESSED) %then %do;';
put 'drop &VAR_PROCESSED;';
put '%end;';
put 'run;';
put '%mend quickmacro;';
put '%macro postdata();';
put '%if %quote(&REVIEW_STATUS_ID)=%quote(REJECTED)';
put 'or %quote(&REVIEW_STATUS_ID)=%quote(APPROVED) %then';
put '%do;';
put 'data params; set approve1; run;';
put '%webout(OPEN)';
put '%webout(OBJ,PARAMS)';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if &action=APPROVE_TABLE %then %do;';
put '/* check user is authorised to approve table */';
put '/* user could be an editor but not an approver */';
put '%mp_abort(iftrue= (%mf_getattrn(work.authAPP,NLOBS)=0)';
put ',mac=&_program';
put ',msg=%str(&user may not APPROVE changes)';
put ')';
put '/* see if this user has already submitted an approval */';
put '%let prev_upload_check=1;';
put 'proc sql;';
put 'select count(*) into: prev_upload_check from &mpelib..mpe_review';
put 'where TABLE_ID="&LOAD_REF" and REVIEWED_BY_NM="&user"';
put 'and REVIEW_STATUS_ID ne "SUBMITTED";';
put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);';
put '%if &authcheck=0 or &prev_upload_check=1 %then %do;';
put '%put %str(WARN)ING: &=authcheck &=prev_upload_check;';
put 'data apPARAMS;';
put 'AUTHORISED=&authcheck;';
put 'PREV_UPLOAD_CHECK=&prev_upload_check;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,apPARAMS);';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '/* now check if table has been updated since DIFF screen shown */';
put '%local fmt_tm usernm last_load etlsource;';
put '%let last_load=0;';
put 'proc sql noprint;';
put 'select max(processed_dttm) format=16.2 into: last_load';
put 'from &mpelib..mpe_dataloads';
put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)";';
put 'select processed_dttm format=datetime19., user_nm, etlsource';
put 'into: fmt_tm, :usernm, :etlsource';
put 'from &mpelib..mpe_dataloads';
put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)"';
put 'and processed_dttm=&last_load;';
put '%put TIMECHECK: &last_load>&difftime;';
put '%if %sysevalf(&last_load>&difftime,boolean)=1 %then %do;';
put '%let is_err=1;';
put '%let err_msg=&orig_libds was updated in batch %trim(&etlsource';
put ') by %trim(&usernm) on &fmt_tm - please refresh the page!!;';
put '%return;';
put '%end;';
put '%if &syscc ne 0 %then %do;';
put '%let is_err=1;';
put '%let err_msg=syscc=&syscc before logchange;';
put '%return;';
put '%end;';
put '/* upload about to commence so ensure logs */';
put 'options notes mprint source2;';
put '%local oldloc;';
put '%if %symexist(SYSPRINTTOLOG) %then %let oldloc=&SYSPRINTTOLOG;';
put '%else %let oldloc=%qsysfunc(getoption(LOG));';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto';
put 'log="&mpelocapprovals/&LOAD_REF/approval.log";';
put 'run;';
put 'data _null_;';
put 'if _n_=1 then do;';
put 'length oldloc $1000;';
put 'oldloc=symget(''oldloc'');';
put 'putlog "****** redirected:" oldloc " *****";';
put 'end;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc printto';
put 'log="&mpelocapprovals/&LOAD_REF/approval.log";';
put 'run;';
put '%end;';
put '%if &syscc ne 0 %then %do;';
put '%let is_err=1;';
put '%let err_msg=syscc=&syscc after logchange;';
put '%return;';
put '%end;';
put '%end;';
put '/**';
put '* upload the actual table';
put '*/';
put '%local libref ds;';
put '%let libref=%scan(&orig_libds,1,.);';
put '%let ds=%scan(&orig_libds,2,.);';
put 'proc sql noprint;';
put 'select PRE_APPROVE_HOOK, POST_APPROVE_HOOK, LOADTYPE, var_txfrom, var_txto';
put ',BUSKEY, VAR_BUSFROM, VAR_BUSTO';
put ',AUDIT_LIBDS, NOTES, coalesce(NUM_OF_APPROVALS_REQUIRED,1)';
put ',VAR_PROCESSED';
put 'into: PRE_APPROVE_HOOK, :POST_APPROVE_HOOK, :LOADTYPE,:var_txfrom,:var_txto';
put ',:BUSKEY,:VAR_BUSFROM,:VAR_BUSTO';
put ',:AUDIT_LIBDS, :TABLE_DESC, :NUM_OF_APPROVALS_REQUIRED_TOT';
put ',:VAR_PROCESSED';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="&libref"';
put 'and dsn="&ds";';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mpelocapprovals orig_libds)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: mpelocapprovals orig_libds)';
put ')';
put '/* get dataset from approvals location (has same name as load_ref) */';
put '%let tmplib=%mf_getuniquelibref();';
put 'libname &tmplib "&mpelocapprovals/&LOAD_REF";';
put 'data STAGING_DS;';
put 'set &tmplib..&LOAD_REF;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc before preapprove)';
put ')';
put '%dc_assignlib(WRITE,&libref)';
put '/* run pre-approve hook - occurs both BEFORE _and_ AFTER the diff */';
put '%mpe_runhook(PRE_APPROVE_HOOK)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc after preapprove)';
put ')';
put '%if &num_of_approvals_remaining>1 and &action=APPROVE_TABLE %then %do;';
put '/* append to mpe_review table */';
put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);';
put 'data work.append_review;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&LOAD_REF";';
put 'BASE_TABLE="&orig_libds";';
put 'REVIEW_STATUS_ID="APPROVED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&sastime;';
put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.append_review;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* update mpe_submit table */';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set num_of_approvals_remaining=&num_of_approvals_remaining-1,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&sastime';
put 'where table_id="&LOAD_REF";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'data apReqd;';
put 'AUTHORISED=1;';
put 'ALREADY_UPDATED=0;';
put 'ALREADY_UPDATED_DTTM=.;';
put 'set approve1; /* js will test for NUM_OF_APPROVALS_REQUIRED */';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,apReqd);';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc entering TARGETLOADER)';
put ')';
put '%mpe_targetloader(libds=&orig_libds';
put ',now= &sastime';
put ',etlsource=&LOAD_REF';
put ',STAGING_DS=STAGING_DS';
put ',dclib=&mpelib';
put '%if &action=APPROVE_TABLE %then %do;';
put ',LOADTARGET=YES';
put '%end;';
put '%else %do;';
put ',LOADTARGET=NO';
put '%end;';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%if %mf_getattrn(STAGING_DS,NLOBS)=0 %then %do;';
put '/* empty dataset! */';
put 'data out;';
put 'set STAGING_DS;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc entering SHOWDIFFS)';
put ')';
put '%if &action=SHOW_DIFFS %then %do;';
put '/**';
put '* Now prepare the SHOW DIFFS (approve) screen';
put '*/';
put '/*To create the CURRENT diffs, we compare with the ACTUAL data. But first';
put 'need to find out what version TIME to query it for.. */';
put 'proc sql noprint;';
put 'select max(processed_dttm)-1 format=datetime19. into: tstamp';
put 'from &mpelib..mpe_dataloads';
put 'where libref="&libref" and dsn="&ds" and ETLSOURCE="&LOAD_REF";';
put 'quit;';
put '%if &tstamp=. %then %let tstamp=%sysfunc(datetime(),datetime19.);';
put '/**';
put '* now create the DIFFS dataset';
put '* If using a database, then utilise pass through!';
put '* Create a temporary table inside the database for joins..';
put '*/';
put 'options mprint;';
put '%let engine_type=%mf_getEngine(%scan(&libds,1,.));';
put '%put &libds engine type = &engine_type;';
put '%local inner_table ;';
put '%if &engine_type=OLEDB %then %do;';
put '/* generate a unique ID for the temporary table */';
put 'data _null_;';
put 'call symputx(''UNIQUE_REF''';
put ',cats(round(datetime(),1)';
put ',''_''';
put ',round(ranuni(0)*100000,1)';
put ')';
put ',''l''';
put ');';
put 'run;';
put '%let inner_table=&libref.."##DIFF_&UNIQUE_REF"n;';
put 'proc sql;';
put 'create table &inner_table as';
put 'select * from work.outds_mod;';
put '%end;';
put '%else %let inner_table=work.outds_mod;';
put 'proc sql;';
put 'create view work.originals2 as';
put 'select b.*';
put 'from &inner_table a';
put 'inner join &libds';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '(where=("&tstamp"dt < &VAR_TXTO))';
put '%end;';
put 'b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&buskey));';
put '%let idx_val=%scan(&buskey,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)';
put ';';
put 'create view bitemp5c_updates2 as';
put 'select * from work.outds_mod';
put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)';
put ';';
put 'data; set &libds;stop;run;';
put '%let emptybasetable=&syslast;';
put 'options varlenchk=nowarn; /* for small numerics (<8) */';
put '%quickmacro(work.outds_del,deleted)';
put '%quickmacro(work.outds_add,new)';
put '%quickmacro(bitemp5c_updates2,updates)';
put '%quickmacro(originals2,originals)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc in quickmacro)';
put ')';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=work.updates';
put 'out=cols (keep=name type length varnum format);';
put 'run;';
put 'proc sort data=cols out=cols(drop=varnum); by varnum;run;';
put 'data cols; set cols; name=upcase(name);run;';
put '%let tempDIFFS_CSV=tempDiffs_%trim(';
put '%sysfunc(datetime(),flatdate.)).csv;';
put '/**';
put '* Store temp tables so we have a record of diffs';
put '* do not change this libname or table name as it is used in some';
put '* post approve hooks';
put '*/';
put 'data TEMPDIFFS (compress=no) /* for realistic file size */;';
put 'length _____status $10;';
put 'set work.deleted (in=_____del)';
put 'work.new(in=_____new)';
put 'work.updates (in=_____upd)';
put 'work.originals2 (in=_____orig);';
put 'if _____del then _____status=''DELETED '';';
put 'else if _____new then _____status=''NEW'';';
put 'else if _____upd then _____status=''UPDATED'';';
put 'else if _____orig then _____status=''ORIGINAL'';';
put 'run;';
put 'proc export data=TEMPDIFFS dbms=csv replace';
put 'outfile="&mpelocapprovals/&LOAD_REF/&tempDIFFS_CSV" ;';
put 'run;';
put 'proc sql noprint;';
put 'select filesize format=sizekmg10.1, filesize as filesize_raw';
put 'into: filesize,:filesize_raw';
put 'from dictionary.tables';
put 'where libname=''WORK'' and memtype=''DATA'' and memname=''TEMPDIFFS'';';
put 'data params;';
put 'set approve1;';
put 'DIFFS_CSV="&tempDIFFS_CSV";';
put 'FILESIZE="&filesize";';
put 'FILESIZE_RAW=&filesize_raw;';
put 'if %mf_nobs(work.originals)>&maxdiff';
put 'or %mf_nobs(work.new)>&maxdiff';
put 'or %mf_nobs(work.deleted)>&maxdiff';
put 'or %mf_nobs(work.updates)>&maxdiff';
put 'then TRUNCATED="YES";';
put 'else TRUNCATED="NO";';
put 'NUM_ADDED=%mf_getattrn(work.new,NLOBS);';
put 'NUM_DELETED=%mf_getattrn(work.deleted,NLOBS);';
put 'NUM_UPDATED=%mf_getattrn(work.updates,NLOBS);';
put 'SUBMITTED_ON=put(submitted_on_dttm,datetime19.);';
put '%if %mf_getattrn(work.authAPP,NLOBS)>0 %then %do;';
put 'ISAPPROVER=''YES'';';
put '%end;';
put '%else %do;';
put 'ISAPPROVER=''NO'';';
put '%end;';
put 'run;';
put '/*';
put '* The PRE_APPROVE_HOOK may have applied custom formats to the staged table.';
put '* To ensure consistency in the DIFF screen, we should apply the same formats';
put '* to the base table. Limit rows at the same time.';
put '*/';
put 'data work.originals;';
put 'if 0 then set deleted new updates;';
put 'set work.originals;';
put 'if _n_>&maxdiff then stop;';
put 'run;';
put '/* get additional submits against the same base table */';
put 'proc sort data=&mpelib..mpe_submit(where=(';
put 'submit_status_cd=''SUBMITTED''';
put 'and cats(base_lib,''.'',base_ds)="&orig_libds"';
put 'and table_id ne "&LOAD_REF"';
put ')) out=submits;';
put 'by descending submitted_on_dttm;';
put 'run;';
put '/* filter last 10 */';
put 'data submits;';
put 'set submits;';
put 'if _n_>10 then stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc SHOWDIFFS prior to streamout)';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,params)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,submits)';
put '%webout(OBJ,deleted,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,new,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,updates,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,ORIGINALS,fmt=N,missing=STRING)';
put '/* need same for formatted view */';
put '%webout(OBJ,deleted,dslabel=fmt_deleted,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,new,dslabel=fmt_new,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,updates,dslabel=fmt_updates,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,originals,dslabel=fmt_ORIGINALS,fmt=Y,missing=STRING)';
put '%webout(CLOSE)';
put '%if &engine_type=OLEDB %then %do;';
put 'proc sql; /* needs to be dropped AFTER view execution */';
put 'drop table &inner_table;';
put '%end;';
put '%return;';
put '%end;';
put '%if &action=APPROVE_TABLE %then %do;';
put '%approve:';
put '/**';
put '* store temp tables so we have a record of diffs';
put '* do not change this libname or table name as it is used in some';
put '* post approve hooks';
put '* for REPLACE loads, temp tables not made, so make them';
put '*/';
put '%if &LOADTYPE=REPLACE %then %do;';
put 'data work.outds_add; run;';
put 'data work.outds_mod; run;';
put 'data work.outds_del; run;';
put '%end;';
put 'libname approve "&mpelocapprovals/&LOAD_REF";';
put 'data; set &libds;stop;run;';
put '%let emptybasetable=&syslast;';
put 'data approve.ActualDiffs;';
put 'length _____STATUS_____ $10;';
put 'if 0 then set &emptybasetable;';
put 'set work.outds_del (in=_____del)';
put 'work.outds_add (in=_____new)';
put 'work.outds_mod (in=_____upd);';
put 'if _____del then _____STATUS_____=''DELETED'';';
put 'else if _____new then _____STATUS_____=''NEW'';';
put 'else if _____upd then _____STATUS_____=''UPDATED'';';
put '%if %mf_existvar(&libds,&var_txfrom) %then %do;';
put 'drop &var_txfrom &var_txto;';
put '%end;';
put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;';
put 'drop &VAR_PROCESSED;';
put '%end;';
put 'run;';
put 'proc export data=approve.ActualDiffs';
put 'outfile="&mpelocapprovals/&LOAD_REF/ActualDiffs.csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control table to show table as approved */';
put '/* append to mpe_review table */';
put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);';
put 'data work.append_review;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&LOAD_REF";';
put 'BASE_TABLE="&orig_libds";';
put 'REVIEW_STATUS_ID="APPROVED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&sastime;';
put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.append_review;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* update mpe_submit table */';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval in auditors/postdata),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set submit_status_cd=''APPROVED'',';
put 'num_of_approvals_remaining=&num_of_approvals_remaining-1,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&sastime';
put 'where table_id="&LOAD_REF";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* run post-approve hook */';
put '%mpe_runhook(POST_APPROVE_HOOK)';
put 'data apPARAMS;';
put 'AUTHORISED=1;';
put 'ALREADY_UPDATED=0;';
put 'ALREADY_UPDATED_DTTM=.;';
put 'DIFFTIME="&difftime";';
put 'if &syscc=0 then RESPONSE=''SUCCESS!'';';
put 'else response="SYSCC=&syscc.";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program 582';
put ',msg=%superq(msg)';
put ')';
put '%mpe_alerts(alert_event=APPROVED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&LOAD_REF';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,apPARAMS)';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mend postdata;';
put '%postdata()';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(iftrue= (&is_err=1)';
put ',mac=&_program';
put ',msg=%superq(err_msg)';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/editors;
%let service=getdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds';
put ',mode=VIEW';
put ',groupds=work.groups';
put ',clsds=work.clsview';
put ',outds=CLSVIEW';
put ',outmeta=work.cls_rules';
put ');';
put '%local col_list is_admin;';
put '/* filter for the appropriate rules */';
put 'proc sql;';
put 'create table &outmeta as';
put 'select CLS_VARIABLE_NM,';
put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE';
put 'from &clsds';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("&mode",''ALL'')';
put 'and CLS_ACTIVE=1';
put '%if &mode=VIEW %then %do;';
put 'and CLS_HIDE ne 1';
put '%end;';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)';
put 'and CLS_LIBREF="%upcase(&tgtlib)"';
put 'and CLS_TABLE="%upcase(&tgtds)"';
put 'group by CLS_VARIABLE_NM;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";';
put '%put &sysmacroname: &=is_admin;';
put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;';
put '%put &sysmacroname: no CLS rules to apply;';
put '%put &=is_admin;';
put '/* copy using append for speed */';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '/* ensure CLS_RULES is empty in case of admin */';
put 'data &outmeta;';
put 'set &outmeta;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &mode=VIEW %then %do;';
put '/* just send back the relevant columns */';
put '%let col_list=0;';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=0;';
put '%if &col_list=0 %then %do;';
put '/*';
put 'We have columns that are set to CLS_HIDE=1 but we do not have any to';
put 'explicitly show. Therefore we assume all columns are to be shown except';
put 'those that are explicitly hidden.';
put '*/';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=1;';
put 'data &outds;';
put 'set &inds;';
put 'drop &col_list;';
put 'run;';
put '%end;';
put '%else %do;';
put 'data &outds;';
put 'set &inds;';
put 'keep &col_list;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &mode=EDIT %then %do;';
put '/*';
put 'In this case we pass all columns and the frontend will filter out the';
put 'ones that are not allowed to be edited.';
put '*/';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: invalid mode - &mode!;';
put '%abort;';
put '%end;';
put '%mend mpe_columnlevelsecurity;';
put '%macro mp_dsmeta(libds,outds=work.dsmeta);';
put '%local ds1 ds2;';
put 'data;run; %let ds1=&syslast;';
put 'data;run; %let ds2=&syslast;';
put '/* setup the ODS capture */';
put 'ods output attributes=&ds1 enginehost=&ds2;';
put '/* export the metadata */';
put 'proc contents data=&libds;';
put 'run;';
put '/* load it into a single table */';
put 'data &outds (keep=ods_table name value);';
put 'length ods_table $10 name label2 label1 label $100';
put 'value cvalue cvalue1 cvalue2 $1000';
put 'nvalue nvalue1 nvalue2 8;';
put 'if _n_=1 then call missing (of _all_);';
put '* putlog (_all_)(=);';
put 'set &ds1 (in=atrs) &ds2 (in=eng);';
put 'if atrs then do;';
put 'ods_table=''ATTRIBUTES'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'if label2 ne '''' then do;';
put 'name=label2;';
put 'value=coalescec(cvalue2,put(nvalue2,best.));';
put 'output;';
put 'end;';
put 'end;';
put 'else if eng then do;';
put 'ods_table=''ENGINEHOST'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &ds1, &ds2;';
put '%mend mp_dsmeta;';
put '%macro mpe_dsmeta(libds, outds=dsmeta);';
put '%local ddsd ddld notes lenstmt;';
put '%let lenstmt=length ods_table $18 name $100 value $1000;';
put '%let libds=%upcase(&libds);';
put '%mp_dsmeta(&libds, outds=&outds)';
put 'data _null_;';
put 'set &mpelib..mpe_datadictionary;';
put 'where &dc_dttmtfmt < tx_to & dd_source=%upcase("&libds") & dd_type=''TABLE'';';
put 'call symputx(''ddsd'',dd_shortdesc,''l'');';
put 'call symputx(''ddld'',dd_longdesc,''l'');';
put 'run;';
put 'data &outds;';
put '&lenstmt;';
put 'if last then do;';
put 'ODS_TABLE=''MPE_DATADICTIONARY'';';
put 'NAME=''DD_SHORTDESC'';';
put 'VALUE="&ddsd";';
put 'output;';
put 'NAME=''DD_LONGDESC'';';
put 'VALUE="&ddld";';
put 'output;';
put 'end;';
put 'set &outds end=last;';
put 'output;';
put 'run;';
put 'data _data_;';
put 'set &mpelib..mpe_tables;';
put 'where libref="%scan(&libds,1,.)"';
put '& dsn="%scan(&libds,2,.)"';
put '& &dc_dttmtfmt 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mv_getgroupmembers(group';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroupmembers';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups/&group/members?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: Group &group not found!!;';
put 'data &outds;';
put 'length id name $43;';
put 'call missing(of _all_);';
put 'run;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'length id name $43;';
put 'set &libref1..items;';
put 'run;';
put 'libname &libref1 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put '%mend mv_getgroupmembers;';
put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);';
put '%mv_getgroupmembers(%str(&group),outds=&outds)';
put 'data &outds ;';
put 'length membername $64;';
put 'set &outds(rename=(name=MemberName));';
put 'run;';
put '%mend dc_getgroupmembers;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_getcols(ds, outds=work.cols);';
put '%local dropds;';
put 'proc contents noprint data=&ds';
put 'out=_data_ (keep=name type length label varnum format:);';
put 'run;';
put '%let dropds=&syslast;';
put 'data &outds(keep=name type length varnum format label ddtype fmtname);';
put 'set &dropds(rename=(format=fmtname type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if fmtname='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else format=cats(fmtname,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if fmtname='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');';
put 'else format=cats(fmtname,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM''';
put 'then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY'' or format=:''NLDATE''';
put 'then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put 'proc sql;';
put 'drop table &dropds;';
put '%mend mp_getcols;';
put '%macro mcf_init(func';
put ')/*/STORE SOURCE*/;';
put '%if not (%symexist(SASJS_PREFIX)) %then %do;';
put '%global SASJS_PREFIX;';
put '%let SASJS_PREFIX=SASJS;';
put '%end;';
put '%let func=%upcase(&func);';
put '/* the / character is just a seperator */';
put '%global &sasjs_prefix._FUNCTIONS;';
put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;';
put '1';
put '%return;';
put '%end;';
put '%else %do;';
put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;';
put '0';
put '%end;';
put '%mend mcf_init;';
put '%macro mcf_length(wrap=NO';
put ',insert_cmplib=DEPRECATED';
put ',lib=WORK';
put ',cat=SASJS';
put ',pkg=UTILS';
put ')/*/STORE SOURCE*/;';
put '%local i var cmpval found;';
put '%if %mcf_init(mcf_length)=1 %then %return;';
put '%if &wrap=YES %then %do;';
put 'proc fcmp outlib=&lib..&cat..&pkg;';
put '%end;';
put 'function mcf_length(var);';
put 'if var=. then len=0;';
put 'else if missing(var) or trunc(var,3)=var then len=3;';
put 'else if trunc(var,4)=var then len=4;';
put 'else if trunc(var,5)=var then len=5;';
put 'else if trunc(var,6)=var then len=6;';
put 'else if trunc(var,7)=var then len=7;';
put 'else len=8;';
put 'return(len);';
put 'endsub;';
put '%if &wrap=YES %then %do;';
put 'quit;';
put '%end;';
put '/* insert the CMPLIB if not already there */';
put '%let cmpval=%sysfunc(getoption(cmplib));';
put '%let found=0;';
put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));';
put '%let var=%scan(&cmpval,&i,%str( %(%)));';
put '%if &var=&lib..&cat %then %let found=1;';
put '%end;';
put '%if &found=0 %then %do;';
put 'options insert=(CMPLIB=(&lib..&cat));';
put '%end;';
put '%mend mcf_length;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mp_getmaxvarlengths(';
put 'libds';
put ',num2char=NO';
put ',outds=work.mp_getmaxvarlengths';
put ')/*/STORE SOURCE*/;';
put '%local vars prefix x var fmt srcds;';
put '%let vars=%mf_getvarlist(libds=&libds);';
put '%let prefix=%substr(%mf_getuniquename(),1,25);';
put '%let num2char=%upcase(&num2char);';
put '%if &num2char=NO %then %do;';
put '/* compile length function for numeric fields */';
put '%mcf_length(wrap=YES, insert_cmplib=YES)';
put '%end;';
put '%if &num2char=NO';
put 'and ("%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5")';
put 'and %mf_getvarcount(&libds,typefilter=N) gt 0';
put '%then %do;';
put '/* custom functions not supported in summary operations */';
put '%let srcds=%mf_getuniquename();';
put 'data &srcds/view=&srcds;';
put 'set &libds;';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let var=%scan(&vars,&x);';
put '%if %mf_getvartype(&libds,&var)=N %then %do;';
put '&prefix.&x=mcf_length(&var);';
put '%end;';
put '%end;';
put 'run;';
put '%end;';
put '%else %let srcds=&libds;';
put 'proc sql;';
put 'create table &outds (rename=(';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '&prefix.&x=%scan(&vars,&x)';
put '%end;';
put '))';
put 'as select';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let var=%scan(&vars,&x);';
put '%if &x>1 %then ,;';
put '%if %mf_getvartype(&libds,&var)=C %then %do;';
put 'max(lengthn(&var)) as &prefix.&x';
put '%end;';
put '%else %if &num2char=YES %then %do;';
put '%let fmt=%mf_getvarformat(&libds,&var);';
put '%put fmt=&fmt;';
put '%if %str(&fmt)=%str() %then %do;';
put 'max(lengthn(cats(&var))) as &prefix.&x';
put '%end;';
put '%else %do;';
put 'max(lengthn(put(&var,&fmt))) as &prefix.&x';
put '%end;';
put '%end;';
put '%else %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do;';
put 'max(&prefix.&x) as &prefix.&x';
put '%end;';
put '%else %do;';
put 'max(mcf_length(&var)) as &prefix.&x';
put '%end;';
put '%end;';
put '%end;';
put 'from &srcds;';
put 'proc transpose data=&outds';
put 'out=&outds(rename=(_name_=NAME COL1=MAXLEN));';
put 'run;';
put '%mend mp_getmaxvarlengths;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdata.sas';
put '@brief Returns a dataset to the editor front end';
put '@details';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|FILTER_RK:$5.|';
put '|---|---|';
put '|DC258467.MPE_X_TEST|-1|';
put ' Service Outputs
';
put ' sasdata
';
put ' sasparams
';
put 'Contains info on the request. One row is returned.';
put '@li CLS_FLG - set to 0 if there are no CLS rules (everything editable)';
put 'else set to 1 (CLS rules exist)';
put '@li ISMAP - set to 1 if the target DS is an excel map target, else 0';
put ' approvers
';
put ' dqrules
';
put ' dqdata
';
put ' cols
';
put 'Contains column level attributes.';
put '@li NAME - column name';
put '@li VARNUM - variable position. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li LABEL - variable label. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li FMTNAME - derived format name. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li DDTYPE - derived dropdown type. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li CLS_RULE - values include:';
put '- EDIT - the column is editable';
put '- READ - the column should be readonly';
put '- HIDE - the column should be hidden';
put '@li memlabel';
put '@li desc- augmented with MPE_DATADICTIONARY if exists, else label';
put '@li longdesc - from MPE_DATADICTIONARY';
put ' maxvarlengths
';
put ' xl_rules
';
put ' query
';
put ' versions
';
put 'history of DC versions for this particular table';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_getgroupmembers.sas';
put '@li mf_existvar.sas';
put '@li mf_getattrn.sas';
put '@li mf_getvarlist.sas';
put '@li mf_existds.sas';
put '@li mf_getquotedstr.sas';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_getcols.sas';
put '@li mp_getmaxvarlengths.sas';
put '@li mp_validatecol.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_columnlevelsecurity.sas';
put '@li mpe_dsmeta.sas';
put '@li mpe_getlabels.sas';
put '@li mpe_getversions.sas';
put '@li mpe_filtermaster.sas';
put '@li mpe_runhook.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* Validate inputs';
put '*/';
put 'data work.intest;';
put 'length filter_rk 8;';
put 'set work.SASCONTROLTABLE;';
put '/* validate filter_rk */';
put 'if filter_rk le 0 then filter_rk=-1;';
put 'call symputx(''orig_libds'',upcase(libds));';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'is_fmt=1;';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put 'if is_libds=0 then do;';
put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''filter_rk'',filter_rk);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(Some err with service inputs)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(libds filter_rk)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: libds filter_rk)';
put ')';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* stream back meta info, further calls will return col metadata and actual data';
put '*/';
put '%let libref=%upcase(%scan(&libds,1,.));';
put '%let dsn=%upcase(%scan(&libds,2,.));';
put '%dc_assignlib(WRITE,&libref)';
put '/**';
put '* First check user has access permission to edit the table';
put '*/';
put '%put checking access;';
put '%let user=%mf_getuser();';
put '%mpe_accesscheck(&orig_libds,outds=mw_auth,user=&user,access_level=EDIT)';
put '%mp_abort(iftrue= (%mf_getattrn(work.mw_auth,NLOBS)=0)';
put ',mac=mpestp_getdata.sas';
put ',msg=&user is not authorised to edit &orig_libds %trim(';
put ')in the &mpelib..MPE_SECURITY table';
put ')';
put '%mp_abort(iftrue= ( %mf_existds(libds=&libds) ne 1)';
put ',mac=mpestp_getdata.sas';
put ',msg=dataset &libds does not exist!!';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at line 60 )';
put ')';
put '%global loadtype var_txfrom var_txto var_processed filter_text pk coltype';
put 'sortpk;';
put '%put getting table attributes;';
put 'proc sql noprint;';
put 'select upcase(loadtype)';
put ',var_txfrom,var_txto';
put ',var_busfrom,var_busto';
put ',var_processed,rk_underlying,buskey';
put ',coalesce(rk_underlying,buskey)';
put ',pre_edit_hook';
put ',case when missing(rk_underlying) then buskey else rk_underlying end';
put 'into: loadtype,:var_txfrom,:var_txto';
put ',:var_busfrom ,:var_busto';
put ',:var_processed,:rk_underlying,:buskey, :sortPK, :pre_edit_hook,:pk';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt TX_TO';
put 'and upcase(dsn)="%scan(&orig_libds,2,.)"';
put 'and upcase(libref)="%scan(&orig_libds,1,.)";';
put '%put preparing filter query:;';
put '%mpe_filtermaster(EDIT,&orig_libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter_rk,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%macro mpestp_getdata();';
put '%if not %symexist(DC_MAXOBS_WEBEDIT) %then %do;';
put '%put NOTE:;%put NOTE- DC_MAXOBS_WEBEDIT not found!;';
put '%put NOTE- Please add to &mpelib..MPE_CONFIG table;';
put '%put NOTE-;%put NOTE-;';
put '%global DC_MAXOBS_WEBEDIT;';
put '%let DC_MAXOBS_WEBEDIT=500;';
put '%end;';
put '/* for tables which use RKs/SKs then we just expose the business key to';
put 'users - this lets uploads be sent to multiple environments (with';
put 'potentially different RK/SK values for the same business key).';
put 'Note that the config table has the RK column in the buskey field in';
put 'this scenario. */';
put '%if %length(&rk_underlying)>0 %then %let drop_rk=&buskey;';
put '%else %let drop_rk=;';
put '/* always remove the PROCESSED_DTTM column, if it exists */';
put '%if %length(&var_processed)=0 %then %do;';
put '%if %mf_existvar(&libds,PROCESSED_DTTM)>0 %then';
put '%let var_processed=PROCESSED_DTTM;';
put '%end;';
put '/**';
put '* Now get the slice of the actual table';
put '*/';
put 'options obs=10000;';
put '%if &loadtype=BITEMPORAL %then %do;';
put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk );';
put '_____DELETE__THIS__RECORD_____="No";';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put 'proc sort data=out;';
put 'by &pk &var_busfrom;';
put 'run;';
put 'data out;';
put 'set out;';
put 'by &pk &var_busfrom;';
put 'if last.%scan(&pk,-1);';
put 'run;';
put '%end;';
put '%else %do;';
put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk);';
put '_____DELETE__THIS__RECORD_____="No";';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put '%end;';
put 'options obs=max;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Issue with filtering (line 165) )';
put ')';
put 'options obs=&DC_MAXOBS_WEBEDIT;';
put '%let sortpk=%sysfunc(coalescec(&sortpk &var_busfrom,_ALL_));';
put 'proc sort data=work.out; by &sortPK; run;';
put 'options obs=max;';
put '%mpe_runhook(PRE_EDIT_HOOK)';
put '%let obscnt=%mf_getattrn(work.out,NLOBS);';
put '%mp_abort(iftrue=(&obscnt>&DC_MAXOBS_WEBEDIT)';
put ',mac=&_program';
put ',msg=Table is too big (&obscnt rows) - please filter and try again!';
put ')';
put '/* order delete var and pk fields at start of table */';
put '%let sourcevars=%mf_wordsInStr1ButNotStr2(';
put 'Str1=%mf_getvarlist(work.out)';
put ',Str2= _____DELETE__THIS__RECORD_____ &pk';
put ');';
put '%put sourcevars=&sourcevars;';
put 'data outdata;';
put '/* delete & pk fields come first */';
put 'attrib _____DELETE__THIS__RECORD_____ &pk label='''';';
put '/* keep remaining variable order */';
put '%if %length(&sourcevars)>0 %then %do;';
put 'attrib &sourcevars label='''';';
put '%end;';
put '_____DELETE__THIS__RECORD_____="No ";';
put '%if %mf_nobs(work.out)=0 %then %do;';
put '/* send empty row if empty table to help with hot rendering */';
put 'output;';
put '%end;';
put 'set work.out ;';
put 'run;';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=outdata';
put 'out=vars(keep=name type length varnum format: label);';
put 'run;';
put 'proc sort;';
put 'by varnum;';
put 'run;';
put 'data vars3(keep=name type length format label pk varnum ctrloptions formatd);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED");';
put 'if type2=2 or type2=6 then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,formatl,''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if upcase(format2)=''DATETIME'' and formatl=0 then format=''DATETIME.'';';
put 'else format=cats(format2,formatl,''.'',formatd);';
put 'type=''num'';';
put 'end;';
put 'if name in ('''',%upcase(%mf_getQuotedStr(&pk,dlm=%str(,),quote=S)))';
put 'then PK=''YES'';';
put 'length ctrlOptions $500;';
put 'if name="_____DELETE__THIS__RECORD_____" then ctrlOptions=''["No","Yes"]'';';
put 'else ctrlOptions='''';';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at 242 (vars3 step) in &_program \n';
put '%superq(syserrortext)';
put ')';
put ')';
put '%global jsdttmvars jsdtvars jstmvars;';
put 'data _null_;';
put 'set vars3 end=last;';
put 'if _n_>1 then comma='','';';
put 'length coltype $500.;';
put 'format=upcase(format);';
put 'coltype=cats(comma,''{"data":"'',name,''"'');';
put 'if ctrlOptions ne '''' then';
put 'colType=cats(coltype,'',"type":"dropdown","source":'',ctrlOptions,"}");';
put 'else if type=''num'' then do;';
put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM''';
put 'then do;';
put 'colType=cats(coltype';
put ','',"type":"date","dateFormat":"YYYY-MM-DD HH:mm:ss"''';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat datetimes in javascript format */';
put 'call symput(''jsdttmvars'',symget(''jsdttmvars'')!!'' ''!!name);';
put 'end;';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY'' or format=:''NLDATE''';
put 'then do;';
put '/* see bottom of file for more date formats!! */';
put '/* also when updating, update stagedata.sas and mp_getcols.sas';
put 'and mpe_loader.sas */';
put 'colType=cats(coltype,'',"type":"date","dateFormat":"YYYY-MM-DD"''';
put '/*colType=cats(coltype,'',"type":"date","dateFormat":"MM/DD/YYYY"''*/';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat as javascript dates */';
put 'call symput(''jsdtvars'',symget(''jsdtvars'')!!'' ''!!name);';
put 'end;';
put 'else if format=:''TIME'' or format=:''HHMM'' then do;';
put 'colType=cats(coltype,'',"type":"time","timeFormat":"HH:mm:ss"''';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat as javascript times */';
put 'call symput(''jstmvars'',symget(''jstmvars'')!!'' ''!!name);';
put 'end;';
put 'else do;';
put '/* is standard numeric but need to ascertain precision */';
put 'retain base ''000000000000000000'';';
put 'if formatd>0 then numFormat=cats(''.'',substr(base,1,formatd));';
put 'colType=cats(coltype,'',"type":"numeric","format":"0'',numFormat,''"}'');';
put 'end;';
put 'end;';
put 'else colType=cats(coltype,''}'');';
put 'length concatcoltype $32767;';
put 'retain concatcoltype;';
put 'concatcoltype=cats(concatcoltype,coltype);';
put 'if last then call symputx(''colType'',strip(concatcoltype),''g'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at 283 (null step) in &_program)';
put ')';
put 'PROC FORMAT;';
put 'picture yymmddThhmmss (default=28) other=''%0Y-%0m-%0d %0H:%0M:%0s''';
put '(datatype=datetime);';
put 'picture JSyymmdd other=''%0Y-%0m-%0d'' (datatype=date);';
put 'picture JShhmmss (default=16) other=''%0H:%0M:%0s'' (datatype=time);';
put 'RUN;';
put '/* before we send the data, need to rebuild all date & datetime vars as char*/';
put '%let finalvars=%mf_getvarlist(work.outdata);';
put 'data sasdata;';
put '/* set formats & col order ahead of rename+import */';
put 'informat &finalvars ;';
put '/* read dataset and rename date / datetime vars as necessary */';
put 'set outdata';
put '%if %length(&jsdttmvars&jsdtvars&jstmvars)>0 %then %do;';
put '(rename=(';
put '%local dtvarnum dtvar tmvar;';
put '/* temp datetime vars end in _____ */';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));';
put '%let dtvar=%scan(&jsdttmvars ,&dtvarnum);';
put '&dtvar=_____&dtvarnum._____';
put '%end;';
put '/* temp date vars do not end in _____ */';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));';
put '%let dtvar=%scan( &jsdtvars,&dtvarnum);';
put '&dtvar=_____&dtvarnum';
put '%end;';
put '/* temp time vars end in ___tm */';
put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));';
put '%let tmvar=%scan( &jstmvars,&tmvarnum);';
put '&tmvar=_____&tmvarnum.___tm';
put '%end;';
put '))';
put '%end;';
put ';';
put '%if %length(&jsdttmvars)>0 %then %do ;';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));';
put '%let dtvar=%scan(&jsdttmvars,&dtvarnum);';
put '&dtvar=cats(put(_____&dtvarnum._____,yymmddThhmmss28.));';
put 'if &dtvar="ERROR" then call missing(&dtvar);';
put 'drop _____&dtvarnum._____;';
put '%end;';
put '%end;';
put '%if %length(&jsdtvars)>0 %then %do;';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));';
put '%let dtvar=%scan(&jsdtvars,&dtvarnum);';
put '&dtvar=cats(put(_____&dtvarnum,JSyymmdd.));';
put 'if &dtvar="ERROR" then call missing(&dtvar);';
put 'drop _____&dtvarnum;';
put '%end;';
put '%end;';
put '%if %length(&jstmvars)>0 %then %do;';
put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));';
put '%let tmvar=%scan(&jstmvars,&tmvarnum);';
put '&tmvar=cats(put(_____&tmvarnum.___tm,JShhmmss14.));';
put 'if &tmvar="ERROR" then call missing(&tmvar);';
put 'drop _____&tmvarnum.___tm;';
put '%end;';
put '%end;';
put 'output;';
put 'run;';
put '/* get the relevant approvers for the drop down */';
put '%put getting approvers;';
put '%local sas_groups sas_i sas_group;';
put 'proc sql noprint;';
put 'select distinct sas_Group into: sas_groups separated by "|"';
put 'from &mpelib..mpe_security';
put 'where libref="%scan(&orig_libds,1,.)"';
put 'and dsn="%scan(&orig_libds,2,.)"';
put 'and access_level=''APPROVE''';
put 'and &dc_dttmtfmt. lt TX_TO;';
put '%if %length(&sas_groups)=0 %then %do;';
put '%dc_getgroupmembers(&dc_admin_group,outds=work.access1)';
put '%end;';
put '%else %do sas_i=1 %to %sysfunc(countw(&sas_groups,%str(|)));';
put '%let sas_group=%scan(&sas_Groups,&sas_i,%str(|));';
put '%dc_getgroupmembers(&sas_group,outds=work.temp&sas_i)';
put 'proc append base=work.access1 data=work.temp&sas_i;run;';
put '%end;';
put '%mend mpestp_getdata;';
put '%mpestp_getdata()';
put '%mp_abort(mode=INCLUDE)';
put '/* extract column level security rules */';
put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.sasdata';
put ',mode=EDIT';
put ',clsds=&mpelib..mpe_column_level_security';
put ',groupds=work.groups /* was created in mpe_filtermaster */';
put ',outds=work.sasdata1';
put ',outmeta=work.cls_rules';
put ')';
put '/* get labels */';
put '%mpe_getlabels(COLUMNS,sasdata1,outds=spec)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc extracting spec info)';
put ')';
put '/* extract col info */';
put '%mp_getcols(&libds, outds=cols1)';
put '/* join with cls rules */';
put 'proc sql;';
put 'create table work.cols as';
put 'select a.NAME';
put ',a.VARNUM';
put ',a.LABEL';
put ',a.FMTNAME';
put ',a.DDTYPE';
put ',case b.cls_hide';
put 'when 1 then ''HIDE''';
put 'when 0 then ''EDIT''';
put 'else ''READ'' end as CLS_RULE';
put ',c.memlabel';
put ',c.desc';
put ',c.longdesc';
put 'from work.cols1 a';
put 'left join work.cls_rules b';
put 'on a.NAME=b.CLS_VARIABLE_NM';
put 'left join work.spec c';
put 'on a.NAME=c.NAME;';
put 'proc sql;';
put 'create table approvers as select distinct membername as personname';
put ',membername as email, membername as userid';
put 'from work.access1;';
put '/*';
put 'create table access3 as select b.userid,b.email';
put 'from access2 a';
put ',support.users b';
put 'where a.personname=b.userid';
put 'and a.personname ne "%mf_getuser()"';
put 'and %sysfunc(datetime()) lt b.tx_to_dttm';
put 'order by 1;';
put '*/';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'input;';
put 'length filter_text $32767;';
put 'retain filter_text;';
put 'filter_text=catx('' '',filter_text,_infile_);';
put 'if eof then do;';
put 'if cats(filter_text)=''1=1'' then filter_text='''';';
put 'call symputx(''filter_text'',filter_text);';
put 'end;';
put 'run;';
put '%put params;';
put '%let ismap=0;';
put 'proc sql noprint;';
put 'select count(*) into: ismap from &mpelib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&orig_libds" and &dc_dttmtfmt. le TX_TO;';
put 'data sasparams;';
put 'length colHeaders $20000 filter_text $32767;';
put 'colHeaders=cats(upcase("%mf_getvarlist(sasdata1,dlm=%str(,))"));';
put 'pkCnt=countw("&pk");';
put 'pk="&pk";';
put 'dtvars=compbl("&jsdtvars");';
put 'dttmvars=compbl("&jsdttmvars");';
put 'tmvars=compbl("&jstmvars");';
put 'length coltype $32000;';
put 'coltype=symget(''coltype'');';
put 'loadtype=symget(''loadtype'');';
put 'if trim(symget(''rk_underlying'')) ne '''' then rk_flag=1;';
put 'else rk_flag=0;';
put 'filter_text=symget(''filter_text'');';
put 'if %mf_nobs(work.cls_rules)=0 then cls_flag=0;';
put 'else cls_flag=1;';
put 'put (_all_)(=);';
put 'if "&orig_libds"="&mpelib..MPE_XLMAP_DATA" or &ismap ne 0 then ismap=1;';
put 'else ismap=0;';
put 'run;';
put '/* Extract validation DQ Rules */';
put 'proc sort data=&mpelib..mpe_validations';
put '(where=(&dc_dttmtfmt. le TX_TO';
put 'and BASE_LIB="%scan(&orig_libds,1,.)" and BASE_DS="%scan(&orig_libds,2,.)"';
put 'and rule_active=1))';
put 'out=dqrules (keep=base_col rule_type rule_value);';
put 'by base_col rule_type rule_value;';
put 'run;';
put '/* merge with NOTNULL constraints in the physical table */';
put 'proc sql;';
put 'create table _data_ as';
put 'select * from dqrules';
put 'union';
put 'select upcase(name) as base_col';
put ',''NOTNULL'' as rule_type';
put ','''' as rule_value';
put 'from dictionary.columns';
put 'where upcase(libname)="%scan(&orig_libds,1,.)"';
put 'and upcase(memname)="%scan(&orig_libds,2,.)"';
put 'and upcase(name) in (select name from vars3)';
put 'and notnull=''yes''';
put 'order by 1,2,3;';
put 'data dqrules;';
put 'set &syslast;';
put 'by base_col rule_type rule_value;';
put 'if last.rule_type;';
put 'if rule_type in (''HARDSELECT'',''SOFTSELECT'') and countw(rule_value)=3 then';
put 'do;';
put 'retain x 0; x+1;';
put 'call symputx(cats(''source'',x),rule_value);';
put '%let sourcecnt=0;';
put 'call symputx(''sourcecnt'',x);';
put 'call symputx(cats(''base_col'',x),base_col);';
put 'end;';
put 'run;';
put 'proc sql;';
put 'create table dqdata as';
put 'select distinct base_column as base_col length=32';
put ',upcase(base_column) as rule_value length=74 /* deprecated */';
put ',selectbox_value as rule_data length=1000';
put ',selectbox_order';
put 'from &mpelib..mpe_selectbox';
put 'where &dc_dttmtfmt. lt ver_to_dttm';
put 'and select_lib="%scan(&orig_libds,1,.)"';
put 'and select_ds="%scan(&orig_libds,2,.)";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc during DQ rule validation)';
put ')';
put '/* extract selectbox data */';
put '%macro dq_selects();';
put '%local x source lib ds col;';
put '%do x=1 %to &sourcecnt;';
put '%let source=&&source&x;';
put '%let lib=%scan(&source,1,.);';
put '%let ds=%scan(&source,2,.);';
put '%let col=%scan(&source,3,.);';
put '%put &=source;';
put '%put &=lib;';
put '%dc_assignlib(READ,&lib)';
put 'proc sql;';
put 'create table dqdata&x as';
put 'select distinct "&&base_col&x" as base_col length=32';
put ',"&source" as rule_value length=74';
put ',cats(&col) as rule_data length=1000';
put ',&col as tmp_order';
put 'from &lib..&ds';
put 'order by tmp_order;';
put '/* ensure both numerics and char vals are ordered correctly */';
put 'data work.dqdata&x (drop=tmp_order);';
put 'set work.dqdata&x;';
put 'selectbox_order=_n_;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)';
put ')';
put 'proc append base=dqdata data=dqdata&x;run;';
put 'proc sql; drop table dqdata&x;';
put '%end;';
put '%mend dq_selects;';
put '%dq_selects()';
put 'proc sort data=dqdata;';
put '/* order by selectbox_order then the value */';
put 'by base_col selectbox_order rule_data;';
put 'run;';
put '%mp_getmaxvarlengths(work.sasdata1,outds=maxvarlengths)';
put 'data maxvarlengths;';
put 'set maxvarlengths;';
put 'if name=''_____DELETE__THIS__RECORD_____'' then mAXLEN=3;';
put 'run;';
put 'data xl_rules;';
put 'set &mpelib..mpe_excel_config;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(xl_libref)="%scan(&orig_libds,1,.)";';
put 'where also upcase(xl_table)="%scan(&orig_libds,2,.)";';
put 'where also xl_active=1;';
put 'keep xl_column xl_rule;';
put 'run;';
put '%mpe_dsmeta(&libds, outds=dsmeta)';
put '%mpe_getversions(&mpelib,';
put '%scan(&orig_libds,1,.),';
put '%scan(&orig_libds,2,.),';
put 'outds=versions';
put ')';
put '/* send to the client */';
put '%webout(OPEN)';
put '%webout(OBJ,approvers)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,dqdata,missing=STRING)';
put '%webout(OBJ,dqrules)';
put '%webout(OBJ,dsmeta)';
put '%webout(OBJ,maxvarlengths)';
put '%webout(OBJ,query)';
put '%webout(OBJ,sasdata1,fmt=N,missing=STRING,showmeta=YES,dslabel=sasdata)';
put '%webout(OBJ,sasparams)';
put '%webout(OBJ,versions)';
put '%webout(OBJ,xl_rules)';
put '%webout(CLOSE)';
put '/*';
put '$N8601Bw';
put '$N8601BAw';
put '$N8601Ew';
put '$N8601EAw';
put '$N8601EHw';
put '$N8601EXw';
put '$N8601Hw';
put '$N8601Xw';
put 'B8601DAw';
put 'B8601DNw';
put 'B8601DTw';
put 'B8601DZw';
put 'B8601LZw';
put 'B8601TMw';
put 'B8601TZw';
put 'DATEw';
put 'DATEAMPMw';
put 'DATETIMEw';
put 'DAYw';
put 'DDMMYYw';
put 'DDMMYYxw';
put 'DOWNAMEw';
put 'DTDATEw';
put 'DTMONYYw';
put 'DTWKDATXw';
put 'DTYEARw';
put 'DTYYQCw';
put 'E8601DAw';
put 'E8601DNw';
put 'E8601DTw';
put 'E8601DZw';
put 'E8601LZw';
put 'E8601TMw';
put 'E8601TZw';
put 'HHMMw';
put 'HOURw';
put 'JULDAYw';
put 'JULIANw';
put 'MMDDYYw';
put 'MMDDYYxw';
put 'MMSSw';
put 'MMYYw';
put 'MMYYxw';
put 'MONNAMEw';
put 'MONTHw';
put 'MONYYw';
put 'PDJULGw';
put 'PDJULIw';
put 'QTRw';
put 'QTRRw';
put 'TIMEw';
put 'TIMEAMPMw';
put 'TODw';
put 'WEEKDATEw';
put 'WEEKDATXw';
put 'WEEKDAYw';
put 'WEEKUw';
put 'WEEKVw';
put 'WEEKWw';
put 'WORDDATEw';
put 'WORDDATXw';
put 'YEARw';
put 'YYMMw';
put 'YYMMxw';
put 'YYMMDDw';
put 'YYMMDDxw';
put 'YYMONw';
put 'YYQw';
put 'YYQxw';
put 'YYQRw';
put 'YYQRxw';
put '$N8601BAw';
put '$N8601Ew';
put '$N8601EAw';
put '$N8601EHw';
put '$N8601EXw';
put '$N8601Hw';
put '$N8601Xw';
put 'B8601DAw';
put 'B8601DNw';
put 'B8601DTw';
put 'B8601DZw';
put 'B8601LZw';
put 'B8601TMw';
put 'B8601TZw';
put 'E8601DAw';
put 'E8601DNw';
put 'E8601DTw';
put 'E8601DZw';
put 'E8601LZw';
put 'E8601TMw';
put 'E8601TZw';
put '*/';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getdynamiccolvals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdynamiccolvals.sas';
put '@brief Provide dynamic list of values according to a SAS program or service';
put '@details Configuration is made in the MPE_VALIDATIONS table, the dropdown';
put 'can be either a SOFTSELECT_HOOK or HARDSELECT_HOOK.';
put 'Results are sent in ARRAY format for efficiency.';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|VARIABLE_NM:$32.|';
put '|---|---|';
put '|DC258467.MPE_SECURITY|SAS_GROUP|';
put ' SOURCE_ROW
';
put 'This contains the raw values from the source table.';
put ' Service Outputs
';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_getservicecode.sas';
put '@li mf_nobs.sas';
put '@li mp_abort.sas';
put '@li mp_include.sas';
put '@li mp_validatecol.sas';
put '@li mf_getapploc.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* Validate inputs';
put '*/';
put '%let err_msg=;';
put 'data work.intest;';
put 'set work.SASCONTROLTABLE;';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put '/* validate varname */';
put 'is_name=nvalid(variable_nm,''v7'');';
put 'putlog (_all_)(=);';
put 'if is_libds ne 1 then do;';
put 'msg=''ERR''!!''OR: Invalid libds:''!!libds;';
put 'call symputx(''err_msg'',msg);';
put 'stop;';
put 'end;';
put 'else if is_name ne 1 then do;';
put 'msg=''ERR''!!''OR: Invalid name:''!!variable_nm;';
put 'call symputx(''err_msg'',msg);';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''variable_nm'',variable_nm);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc after reading work.sascontroltable)';
put ')';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(&err_msg)';
put ')';
put '%dc_assignlib(READ,%scan(&libds,1,.))';
put '/* ensure that work.dynamic_extended_values exists */';
put 'data work.dynamic_extended_values;';
put 'run;';
put '/**';
put '* Get the code to execute';
put '*/';
put 'data work.codetest;';
put 'set &mpelib..MPE_VALIDATIONS;';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and base_lib="%scan(&libds,1,.)"';
put 'and base_ds="%scan(&libds,2,.)"';
put 'and base_col="&variable_nm"';
put 'and RULE_TYPE in (''HARDSELECT_HOOK'',''SOFTSELECT_HOOK'')';
put 'and RULE_ACTIVE=1;';
put 'putlog (_all_)(=);';
put 'if length(rule_value)>1 then do;';
put 'call symputx(''pgmloc'',rule_value);';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'output;';
put 'stop;';
put 'end;';
put 'else stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.codetest)=0)';
put ',mac=&_program';
put ',msg=%str(Hook not found in &mpelib..mpe_validations for &libds..&variable_nm)';
put ')';
put '%macro getdynamiccolvals();';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '%mend getdynamiccolvals;';
put '%getdynamiccolvals()';
put '/* execute the dynamic code */';
put '%mp_include(sascode)';
put '%mp_abort(mode=INCLUDE)';
put '/* ensure that the DISPLAY_INDEX variable exists */';
put 'data work.dynamic_values;';
put 'length DISPLAY_INDEX 8 DISPLAY_VALUE $32767;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.dynamic_values;';
put 'display_index=coalesce(display_index,_n_);';
put 'keep DISPLAY_INDEX DISPLAY_VALUE RAW_VALUE;';
put 'run;';
put '/* ensure that work.dynamic_extended_values exists with correct types */';
put 'data work.dynamic_extended_values;';
put 'length DISPLAY_INDEX 8 EXTRA_COL_NAME $32 DISPLAY_VALUE $5000 DISPLAY_TYPE $1';
put 'RAW_VALUE_NUM 8 RAW_VALUE_CHAR $5000 FORCED_VALUE 8;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.dynamic_extended_values;';
put 'run;';
put '%webout(OPEN)';
put '%webout(ARR,dynamic_values,fmt=N)';
put '%webout(ARR,dynamic_extended_values,fmt=N)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getlog;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getlog.sas';
put '@brief Downloads the submission, useful if there is an error';
put '@details';
put ' SAS Macros
';
put '@li mf_verifymacvars.sas';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mp_dirlist.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: table)';
put ')';
put '/* security checks */';
put '%let user=%mf_getuser();';
put '%let check_access=0;';
put 'proc sql noprint;';
put 'select count(*) into: check_access from &mpelib..mpe_loads';
put 'where csv_dir="&table" and user_nm="&user";';
put '%mp_abort(iftrue= (&check_access=0 )';
put ',msg=%str(&user not authorised to download audit data for &table)';
put ',mac=mpestp_getlog.sas';
put ')';
put 'ods package(ProdOutput) open nopf;';
put 'options notes source2 mprint;';
put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE)';
put 'data _null_;';
put 'set dirs;';
put 'if scan(filename,-1,''.'') not in (''sas7bdat'',''wpd'');';
put 'retain str1';
put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";';
put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";';
put 'call execute(cats(str1,filename,str2));';
put 'run;';
put '%let archive_path=%sysfunc(pathname(work));';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name= "&table..zip" archive_path="&archive_path");';
put 'ods package(ProdOutput) close;';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&archive_path/&table..zip)';
put ',outname=&table..zip';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getsubmits;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getsubmits.sas';
put '@brief Returns a list of staged data items that need to be approved';
put '@details';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put 'proc sql noprint;';
put 'create table work.fromsas (rename=(SUBMITTED_ON=SUBMITTED_ON_DTTM)) as';
put 'select table_id';
put ',cats(base_lib,''.'',base_ds) as base_table';
put ',input_vars';
put ',input_obs';
put ',submitted_by_nm';
put ',submitted_reason_txt';
put ',''DEPRECATED'' as approve_group';
put ',submit_status_cd as review_status_id';
put ',reviewed_by_nm';
put ',reviewed_on_dttm';
put ',cats(put(SUBMITTED_ON_DTTM,yymmddhhmmss.)) as SUBMITTED_ON';
put 'from &mpelib..mpe_submit';
put 'where submitted_by_nm="%mf_getuser()" and submit_status_cd=''SUBMITTED''';
put 'order by submitted_on_dttm desc;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS,missing=STRING)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getxlmaps;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getxlmaps.sas';
put '@brief Returns a list of rules and other info for a specific xlmap_id';
put ' Service Inputs
';
put ' getxlmaps_in
';
put '|XLMAP_ID|';
put '|---|';
put '|Sample|';
put ' Service Outputs
';
put ' xlmaprules
';
put 'Filtered output of the dc.MPE_XLMAP_RULES table';
put '|XLMAP_ID|XLMAP_RANGE_ID|XLMAP_SHEET|XLMAP_START|XLMAP_FINISH|';
put '|---|---|---|---|---|';
put '|Sample|Range1|Sheet1|ABSOLUTE A1| |';
put '|Sample|Range2|Sheet1|RELATIVE R[2]C[2]|ABSOLUTE H11|';
put ' xlmapinfo
';
put 'Extra info for a map id';
put '|TARGET_DS|';
put '|---|';
put '|DCXXX.MPE_XLMAP_DATA|';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'data _null_;';
put 'set work.getxlmaps_in;';
put 'putlog (_all_)(=);';
put 'call symputx(''xlmap_id'',xlmap_id);';
put 'run;';
put 'proc sql noprint;';
put 'create table work.xlmaprules as';
put 'select xlmap_id';
put ',XLMAP_RANGE_ID';
put ',XLMAP_SHEET';
put ',XLMAP_START';
put ',XLMAP_FINISH';
put 'from &mpelib..MPE_XLMAP_RULES';
put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id"';
put 'order by xlmap_sheet, xlmap_range_id;';
put '%global target_ds;';
put 'select XLMAP_TARGETLIBDS into: target_ds';
put 'from &mpelib..MPE_XLMAP_INFO';
put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'data work.xlmapinfo;';
put 'target_ds=coalescec("&target_ds","&mpelib..MPE_XLMAP_DATA");';
put 'output;';
put 'stop;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,xlmaprules)';
put '%webout(OBJ,xlmapinfo)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=loadfile;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'end;';
put 'else do;';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);';
put '%local ismap;';
put 'proc sql noprint;';
put 'select count(*) into: ismap';
put 'from &dclib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;';
put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;';
put 'data &inds;';
put 'set &inds;';
put 'LOAD_REF="&mperef";';
put 'run;';
put '%end;';
put '%mend mpe_xlmapvalidate;';
put '%macro mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=%sysfunc(datetime())';
put ',approvals=';
put ',mperef=';
put ',reason_txt=';
put ',mac=mpe_loadfail.sas';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads';
put 'set STATUS=symget(''status'')';
put ', duration=&dur';
put ', processed_dttm=&dc_dttmtfmt.';
put ', approvals = symget(''approvals'')';
put ', reason_txt= symget(''reason_txt'')';
put 'where CSV_DIR="&mperef";';
put '%let syscc=666;';
put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)';
put '%mend mpe_loadfail;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mpe_loader(';
put 'mperef= /* name of subfolder containing the staged data */';
put ',mDebug=0 /* set to 1 for development or debugging */';
put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/';
put ',approver= /* allows a userid to be provided for direct approval email */';
put ',url= /* optional - url for debugging */';
put ',dlm=%str(,)';
put ',termstr=crlf';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%put entered mpe_loader from &=_program;';
put '%put &=url;';
put '%put &=termstr;';
put '%put &=dlm;';
put '/* determine full path to CSV directory */';
put '%local now;';
put '%let now=&dc_dttmtfmt;';
put '%put &=now;';
put '/**';
put '* get full path to package (only subdirectory passed through)';
put '*/';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing: mperef mpelocapprovals)';
put ')';
put '%let csv_dir=%trim(&mpelocapprovals/&mperef);';
put '/* exit if package has already been uploaded */';
put '%local check;';
put 'proc sql noprint;';
put 'select count(*) into: check';
put 'from &mpelib..mpe_loads';
put 'where csv_dir="&mperef";';
put '%if &check %then %do;';
put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads';
put ',mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* get CSV directory contents */';
put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)';
put 'data WORK.csvs;';
put 'set WORK.getfiles;';
put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;';
put 'lib=upcase(scan(filename,1,''.''));';
put 'ds=upcase(scan(filename,2,''.''));';
put 'output;';
put 'end;';
put 'run;';
put '/* get table attributes */';
put 'proc sql noprint;';
put 'create table WORK.sumo_tables as';
put 'select a.filename, b.*';
put 'from WORK.csvs a';
put 'left join &mpelib..mpe_tables b';
put 'on a.lib=b.libref';
put 'and a.ds=b.dsn';
put 'where b.tx_from le &now';
put 'and &now lt b.tx_to;';
put '/* define user as meta user if available */';
put '%local user;';
put '%let user=%mf_getuser();';
put '/* check if there is actually a table to load */';
put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;';
put '%let msg=Table not registered in &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=&msg';
put ',now=&now';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="&user"';
put ',STATUS=''IN PROGRESS''';
put ',CSV_dir="&mperef"';
put ',PROCESSED_DTTM=&now';
put ',reason_txt = symget(''submitted_reason_txt'');';
put '/* import CSV */';
put '%let droplist=;';
put '%let attrib=;';
put '%let droplist=;';
put '%let libref=;';
put '%let DS=;';
put '/* get table info */';
put 'data _null_;';
put 'set sumo_tables;';
put 'libds=upcase(cats(libref,''.'',dsn));';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''libds'',libds);';
put 'call symputx(''FNAME'',filename);';
put 'call symputx(''LIBREF'',libref);';
put 'call symputx(''DS'',dsn);';
put 'call symputx(''LOADTYPE'',loadtype);';
put 'call symputx(''BUSKEY'',buskey);';
put 'call symputx(''VAR_TXFROM'',var_txfrom);';
put 'call symputx(''VAR_TXTO'',var_txto);';
put 'call symputx(''VAR_BUSFROM'',var_busfrom);';
put 'call symputx(''VAR_BUSTO'',var_busto);';
put 'call symputx(''VAR_PROCESSED'',var_processed);';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);';
put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);';
put 'call symputx(''NOTES'',NOTES);';
put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');';
put 'put (_all_)(=);';
put 'stop;';
put 'run;';
put '%if %length(&ds)=0 %then %do;';
put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* user must have EDIT access to load a table */';
put '%mpe_accesscheck(&orig_libds';
put ',outds=work.sumo_access';
put ',user=&user';
put ',access_level=EDIT )';
put '%put exiting accesscheck;';
put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;';
put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;';
put '%mpe_loadfail(';
put 'status=UNAUTHORISED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%put now importing: "&csv_dir/&fname" termstr=&termstr;';
put '/* get the variables from the CSV */';
put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);';
put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';';
put 'input;';
put 'length infile $32767;';
put 'infile=compress(_infile_,''"'',);';
put 'infile=compress(infile,"''",);';
put 'format name $32.;';
put 'putlog ''received vars: '' infile;';
put 'call symputx(''received_vars'',infile,''l'');';
put 'do varnum=1 to countw(infile,"&dlm");';
put '/* keep writeable chars */';
put 'name=compress(upcase(scan(infile,varnum)),,''kw'');';
put 'if name ne "_____DELETE__THIS__RECORD_____" then output;';
put 'end;';
put 'stop;';
put 'run;';
put '%put received_vars = &received_vars;';
put '%dc_assignlib(WRITE,&libref)';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=&libds';
put 'out=vars(keep=name type length varnum format:);';
put 'run;';
put 'data vars(keep=name type length varnum format);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'format2=upcase(format2);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"';
put ',"_____DELETE__THIS__RECORD_____");';
put 'if type2 in (2,6) then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,max(formatl,length),''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM''';
put 'then do;';
put 'format=''DATETIME19.'';';
put 'end;';
put 'else if format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD''';
put 'or format2=:''E8601DA'' or format2=:''B8601DA''';
put 'or format2=:''NLDATE''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put 'else do;';
put 'if formatl=0 then formatl=length;';
put 'format=cats(format2,formatl,''.'',formatd);';
put 'end;';
put 'type=''num'';';
put 'end;';
put 'put (_all_)(=);';
put 'run;';
put '/* build attrib statement */';
put 'data vars_attrib;';
put 'length attrib_statement $32767 type2 $20;';
put 'set vars end=lastobs;';
put 'retain attrib_statement;';
put 'if type=''char'' then type2=''$'';';
put 'str1=catx('' '',name,''length='',cats(type2,length));';
put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);';
put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');';
put 'run;';
put '/* build input statement - first get vars in right order';
put 'and join with target formats*/';
put 'proc sql noprint;';
put 'create table vars_csv2 as';
put 'select b.*';
put 'from vars_csv1 a';
put 'left join vars_attrib b';
put 'on a.name=b.name';
put 'order by a.varnum;';
put '/* now build input statement */';
put 'data final_check;';
put 'set vars_csv2 end=lastobs;';
put 'length input_statement $32767 type2 $20 droplist $32767;';
put 'retain input_statement droplist;';
put '/* Build input statement - CATCH EXCEPTIONS HERE!*/';
put 'if name in (''QUOTE_DTTM'') then do;';
put 'name=cats(name,''2'');';
put 'droplist=catx('' '',trim(droplist),name);';
put 'type2=''$20.'';/* converted below */';
put 'end;';
put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');';
put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';';
put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';';
put 'else if format=:''TIME'' then type2=''ANYDTTME.'';';
put 'else if name='''' then do;/* additional vars in input data */';
put 'name=''_____DELETE__THIS__VARIABLE_____'';';
put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');';
put 'type2=''$1.'';';
put 'end;';
put 'else type2=''best32.'';';
put '* else type2=cats(length,''.'');';
put 'input_statement=catx('' '',input_statement,name,'':'',type2);';
put 'if lastobs then do;';
put 'call symputx(''INPUT'', input_statement,''L'');';
put 'if trim(droplist) ne '''' then';
put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');';
put 'end;';
put 'run;';
put '%let mpeloadstop=0;';
put 'data work.STAGING_DS;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767';
put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';';
put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;';
put 'if _n_=1 then call missing (of _all_);';
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;';
put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/';
put '/* SPECIAL LOGIC FOR SPECIAL VARS */';
put '%end;';
put 'if _error_ ne 0 then do;';
put 'putlog _infile_;';
put 'call symputx(''mpeloadstop'',_n_);';
put 'stop;';
put 'end;';
put '/* remove all blank rows */';
put 'if compress(cats(of _all_),''.'')='' '' then delete;';
put 'run;';
put '%if &mpeloadstop>0 %then %do;';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put '%put redirecting log output to capture return message;';
put '%put currentloc=&logloc;';
put 'filename tmp temp;';
put 'proc printto log=tmp;run;';
put 'data _null_;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2';
put 'missover termstr=&termstr;';
put 'attrib &attrib ;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____';
put '%then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put 'if _error_ then stop;';
put 'run;';
put '/* get log back */';
put 'proc printto log=&logloc;run;';
put 'data _null_; infile tmp; input; putlog _infile_;run;';
put '/* scan log for invalid data warnings */';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;';
put 'if index(_infile_,''NOTE: Invalid data for'') then do;';
put 'msg1=_infile_;';
put 'input;';
put 'msg2=_infile_;';
put 'input;';
put 'msg3=_infile_;';
put 'input;';
put 'msg4=_infile_;';
put 'input;';
put 'msg5=_infile_;';
put 'url=symget(''url'');';
put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);';
put 'call symputx(''msg'',msg);';
put 'stop;';
put 'end;';
put 'run;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* check that the table is unique on PK */';
put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;';
put '%local duplist;';
put 'data _null_;';
put 'set work.mpe_dups;';
put '%do i=1 %to %sysfunc(countw(&pk));';
put '%let iWord=%scan(&pk,&i);';
put 'call symputx(''duplist'',symget(''duplist'')!!';
put '" &iWord="!!cats(&iWord));';
put '%end;';
put 'run;';
put '%let msg=This upload contains duplicates on the Primary Key columns %trim(';
put ')(&pk) \n Please remove the duplicates and try again. %trim(';
put ')\n &duplist \n ;';
put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%if &syscc gt 4 %then %do;';
put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* If a Complex Excel Upload, needs to have the load ref added to the table */';
put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)';
put '/* Run the Post Edit Hook prior to creation of staging folder */';
put '%mpe_runhook(POST_EDIT_HOOK)';
put '/* stop if err */';
put '%if &syscc gt 4 %then %do;';
put '%let msg=ERR in post edit hook (&post_edit_hook);';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/**';
put '* send to approve process';
put '*/';
put '/* create a dataset key (datetime plus 3 digit random number plus PID) */';
put '/* send dataset to approvals subfolder with same name as subfolder */';
put 'libname approval "&mpelocapprovals/&mperef";';
put 'data approval.&mperef;';
put 'set work.staging_ds;';
put 'run;';
put 'proc export data=approval.&mperef';
put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control dataset with relevant info */';
put 'data append_app;';
put 'if 0 then set &mpelib..mpe_submit;/* get formats */';
put 'call missing (of _all_);';
put 'TABLE_ID="&mperef";';
put 'submit_status_cd=''SUBMITTED'';';
put 'submitted_by_nm="%mf_getuser()";';
put 'base_lib="&libref";';
put 'base_ds="&ds";';
put 'submitted_on_dttm=&now;';
put 'submitted_reason_txt=symget(''submitted_reason_txt'');';
put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);';
put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);';
put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;';
put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;';
put 'reviewed_by_nm='''';';
put 'reviewed_on_dttm=.;';
put 'run;';
put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,';
put 'ref=%str(&mperef update in &_program),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base= &mpelib..mpe_submit data=append_app;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* send email to REVIEW members */';
put '%put sending mpe_alerts;';
put '%mpe_alerts(alert_event=SUBMITTED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&mperef';
put ')';
put '/* DISABLE EMAIL FOR NOW';
put '%let b2=REASON: %quote(&submitted_reason_txt);';
put '%local URLNOTES;';
put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));';
put '%let b3=%str(Click to review / approve: )%trim(';
put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim(';
put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;';
put '%let b4=%str(Reference ID: &mperef);';
put '*/';
put '%put mpe_loader finishing up with syscc=&syscc;';
put '%if &syscc le 4 %then %do;';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'putlog ''Updating mpe_loads with the following query:'';';
put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";';
put 'putlog " , duration=" dur;';
put 'putlog " , processed_dttm=" now;';
put 'putlog " , approvals = ''&libref..&ds''";';
put 'putlog " where CSV_DIR=''&mperef'';";';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads set STATUS=''SUCCESS''';
put ', duration=&dur';
put ', processed_dttm=&now';
put ', approvals = "&libref..&ds"';
put 'where CSV_DIR="&mperef";';
put '%end;';
put '%else %do;';
put '%mpe_loadfail(';
put 'status="FAILED - &syscc"';
put ',now=&now';
put ',approvals=&libref..&ds';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '%mend mpe_loader;';
put '%macro mp_cleancsv(in=NOTPROVIDED,out=NOTPROVIDED,qchar=''22''x);';
put '%if "&in"="NOTPROVIDED" or "&out"="NOTPROVIDED" %then %do;';
put '%put %str(ERR)OR: Please provide valid input (&in) & output (&out) locations;';
put '%return;';
put '%end;';
put '/* presence of a period(.) indicates a physical location */';
put '%if %index(&in,.) %then %let in="&in";';
put '%if %index(&out,.) %then %let out="&out";';
put '/**';
put '* convert all cr and crlf within quotes to lf';
put '* convert all other cr or lf to crlf';
put '*/';
put 'data _null_;';
put 'infile &in recfm=n ;';
put 'file &out recfm=n;';
put 'retain isq iscrlf 0 qchar &qchar;';
put 'input inchar $char1. ;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'if isq then do;';
put '/* inside a quote change cr and crlf to lf */';
put 'if inchar=''0D''x then do;';
put 'put ''0A''x;';
put 'input inchar $char1.;';
put 'if inchar ne ''0A''x then do;';
put 'put inchar $char1.;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'end;';
put 'end;';
put 'else put inchar $char1.;';
put 'end;';
put 'else do;';
put '/* outside a quote, change cr and lf to crlf */';
put 'if inchar=''0D''x then do;';
put 'crblank:';
put 'put ''0D0A''x;';
put 'input inchar $char1.;';
put 'if inchar=''0D''x then do;';
put '/* multiple CR indicates CR formatted file with blank lines */';
put 'goto crblank;';
put 'end;';
put 'else if inchar ne ''0A''x then do;';
put 'put inchar $char1.;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'end;';
put 'end;';
put 'else if inchar=''0A''x then put ''0D0A''x;';
put 'else put inchar $char1.;';
put 'end;';
put 'run;';
put '%mend mp_cleancsv;';
put '/** @endcond */';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file loadfile.sas';
put '@brief Loads a file';
put '@details';
put ' SAS Macros
';
put '@li mddl_sas_cntlout.sas';
put '@li mp_abort.sas';
put '@li mf_getplatform.sas';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_mkdir.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li dc_assignlib.sas';
put '@li mpe_getgroups.sas';
put '@li mp_lockfilecheck.sas';
put '@li mpe_loader.sas';
put '@li mp_cleancsv.sas';
put '@li mp_binarycopy.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global table dlm;';
put '%mpeinit(fetch=NO)';
put '%global _WEBIN_FILENAME1 _WEBIN_FILENAME2';
put '_WEBIN_FILEREF _WEBIN_FILEREF1 _WEBIN_FILEREF2;';
put '%macro load();';
put '%if %mf_getplatform()=SASVIYA %then %do;';
put '%global _webin_fileuri _webin_fileuri1 _webin_fileuri2;';
put '%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri));';
put '%if "&_webin_fileuri1" ne "" %then %do;';
put '%put &=_webin_fileuri1;';
put 'filename sjfref1 filesrvc "&_webin_fileuri1";';
put '%let _WEBIN_FILEREF1=sjfref1;';
put '%end;';
put '%if "&_webin_fileuri2" ne "" %then %do;';
put '%put &=_webin_fileuri2;';
put 'filename sjfref2 filesrvc "&_webin_fileuri2";';
put '%let _WEBIN_FILEREF2=sjfref2;';
put '%end;';
put '%end;';
put '%mend load;';
put '%load()';
put '%let _WEBIN_FILENAME1=%sysfunc(coalescec(&_WEBIN_FILENAME1,&_WEBIN_FILENAME));';
put '%let _WEBIN_FILEREF1=%sysfunc(coalescec(&_WEBIN_FILEREF1,&_WEBIN_FILEREF));';
put '%let abort=0;';
put '/* we do not know if the excel file will be first or second fileref */';
put 'data _null_;';
put 'ext1=upcase(scan(symget(''_WEBIN_FILENAME1''),-1,''.''));';
put 'ext2=upcase(scan(symget(''_WEBIN_FILENAME2''),-1,''.''));';
put 'if ext1=''CSV'' then do;';
put 'csvname=symget(''_WEBIN_FILENAME1'');';
put 'csvref=symget(''_WEBIN_FILEREF1'');';
put 'xlsname=symget(''_WEBIN_FILENAME2'');';
put 'xlsref=symget(''_WEBIN_FILEREF2'');';
put 'end;';
put 'else if ext2=''CSV'' then do;';
put 'csvname=symget(''_WEBIN_FILENAME2'');';
put 'csvref=symget(''_WEBIN_FILEREF2'');';
put 'xlsname=symget(''_WEBIN_FILENAME1'');';
put 'xlsref=symget(''_WEBIN_FILEREF1'');';
put 'end;';
put 'else call symputx(''abort'',1);';
put 'call symputx(''csvname'',csvname);';
put 'call symputx(''csvref'',csvref);';
put 'call symputx(''xlsname'',xlsname);';
put 'call symputx(''xlsref'',coalescec(xlsref,''0''));';
put 'run;';
put '%mp_abort(iftrue= (&abort=1)';
put ',mac=&_program';
put ',msg=%str(File "&csvname" or "&xlsname" must be a CSV!';
put '(Comma separated with .csv extension))';
put ')';
put '%let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: table)';
put ')';
put '%let table=%upcase(%trim(&table));';
put '/* load parameters */';
put 'data _null_;';
put 'libds=upcase(symget(''table''));';
put 'call symputx(''orig_libds'',libds);';
put 'call symputx(''orig_lib'',scan(libds,1,''.''));';
put 'call symputx(''orig_ds'',scan(libds,2,''.''));';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');';
put 'is_fmt=1;';
put 'end;';
put 'else call symputx(''libds'',libds);';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '/* check that the user has the requisite access */';
put '%mpe_getgroups(user=&user,outds=groups)';
put 'proc sql;';
put 'create table accesscheck as';
put 'select * from groups';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select sas_group from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="EDIT"';
put 'and (';
put '(libref="&orig_lib" and dsn="&orig_ds")';
put 'or (libref="&orig_lib" and dsn="*ALL*")';
put 'or (libref="*ALL*" and dsn="*ALL*")';
put 'or (libref="*ALL*" and dsn="&orig_ds")';
put '));';
put '%let nobs=;';
put 'select count(*) into: nobs from &syslast;';
put '%mp_abort(iftrue= (&nobs=0)';
put ',mac=&sysmacroname';
put ',msg=%str(&user not authorised to load &orig_libds per &mpelib..mpe_security)';
put ')';
put '%dc_assignlib(WRITE,&orig_lib)';
put '%mp_abort(iftrue= (&syscc ge 4)';
put ',mac=loadfile';
put ',msg=%str(Issue assigning library &orig_lib)';
put ')';
put '%global txfrom txto processed rk;';
put 'data _null_;';
put 'set &mpelib..MPE_TABLES;';
put 'where libref="&orig_lib" and dsn="&orig_ds";';
put 'call symputx(''txfrom'',var_txfrom);';
put 'call symputx(''txto'',var_txto);';
put 'call symputx(''processed'',var_processed);';
put 'if not missing(RK_UNDERLYING) then call symputx(''rk'',buskey);';
put 'run;';
put '%mp_lockfilecheck(libds=&orig_libds)';
put 'data compare;';
put 'set &libds(drop=&txfrom &txto &processed &rk);';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc line 80)';
put ')';
put '/* get line terminator, assume it''s the first cr, lf, or crlf */';
put 'data _null_;';
put 'length text $32767 term $4;';
put 'call missing (of _all_);';
put 'fid=fopen("&csvref",''I'',32767,''b'');';
put 'rc=fread(fid);';
put 'rc2=fget(fid,text,32767);';
put 'cr=find(text,''0D''x );';
put 'lf=find(text,''0A''x );';
put 'crlf=find(text,''0D0A''x);';
put 'rc=fclose(fid);';
put 'if crlf>0 & cr0 & crlf0 & cr>0 & lf0 then term=''LF'';';
put 'else term=''CR'';';
put 'call symputx(''termstr'',term);';
put 'run;';
put 'data _null_;';
put 'infile &csvref lrecl=32000 dsd termstr=&termstr;';
put 'input;';
put 'length incols_unsorted $32000 dlm $1;';
put 'incols_unsorted=compress(upcase(_infile_),"''"!!''"'');';
put '/* dlm has length 1 so will be the first non alpha / digit char */';
put '/* expectation is that there will not be any crazy characters in first col! */';
put 'dlm=compress(incols_unsorted,''_ '',''ad'');';
put 'incols_unsorted=compress(incols_unsorted,dlm!!''_'',''kado'');';
put 'incols_unsorted=tranwrd(incols_unsorted,dlm,'' '');';
put 'call symputx(''incols_unsorted'',incols_unsorted);';
put 'call symputx(''dlm'',dlm);';
put 'putlog incols_unsorted=;';
put 'putlog dlm=;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc line 99)';
put ')';
put '%let basecols=%upcase(%mf_getvarlist(work.compare,dlm=%str( )));';
put '%let missing_cols=%trim(';
put '%mf_wordsInStr1ButNotStr2(';
put 'Str1=&basecols';
put ',Str2=&incols_unsorted';
put '));';
put '%let msg=';
put 'Expected cols: &basecols';
put 'Received cols: &incols_unsorted';
put 'Missing cols: &missing_cols';
put ';';
put '%mp_abort(iftrue= (%length(%trim(&missing_cols)) > 1 or &syscc ne 0)';
put ',mac=mpestp_loadfile.sas';
put ',msg=%superq(msg)';
put ')';
put '%let msg=0;';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/* create a dataset key (datetime plus 6 digit random number plus PID) */';
put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr(';
put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);';
put '/* Create package folder and redirect the log */';
put '%let dir=&mpelocapprovals/&mperef;';
put '%mf_mkdir(&dir)';
put '/* clean embedded line breaks and force CRLF line endings */';
put '%mp_cleancsv(in=&csvref, out=&dir/&orig_libds..csv)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(issue in mp_cleancsv)';
put ')';
put '%put; %put; %put log is being redirected;';
put '%let url=_program=%substr(&_program';
put ',1,%length(&_program)-8)getlog%nrstr(&)table=&mperef;';
put '%put to retrieve, visit this url:; %put;%put;';
put '%put &url;';
put '%put;';
put '/* proc printto log="&dir/weblog.txt";run; */';
put 'libname approve "&dir";';
put 'options mprint;';
put '%put &=mperef;';
put '%put &=termstr;';
put '%put &=dlm;';
put '%mpe_loader(mperef=&mperef';
put ',submitted_reason_txt=%quote(File upload: %superq(csvname))';
put ',dlm=%superq(dlm)';
put ',url=%superq(url)';
put ',termstr=CRLF';
put ',dc_dttmtfmt=&dc_dttmtfmt';
put ')';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(';
put 'iftrue= (%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error)) ne 0)';
put ',mac=&_program';
put ',msg=%nrstr(Problem occurred in &sysmacroname (mf_abort.error file found))';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mpestp_loadfile.sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename outref "&dir/BKP_&xlsname";';
put '%mp_binarycopy(iftrue=("&xlsref" ne "0"),inref=&xlsref,outref=outref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc when backing up source file &xlsname)';
put ')';
put 'data sasparams;';
put 'STATUS=''SUCCESS'';';
put 'DSID="&mperef";';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,sasparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=restore;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mpe_checkrestore(load_ref,';
put 'outresult=ALLOW_RESTORE,';
put 'outreason=REASON';
put ');';
put '%global &outresult &outreason;';
put '%let &outresult=NO;';
put '%let &outreason=NOTFOUND;';
put '/* check if there is actually a version to restore */';
put '%local chk;';
put '%let chk=0;';
put 'proc sql noprint;';
put 'select count(*) into: chk from &dc_libref..mpe_audit';
put 'where load_ref="&load_ref";';
put '%if &chk=0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=No entry for &load_ref in MPE_AUDIT;';
put '%return;';
put '%end;';
put '/* grab user groups */';
put '%local user;';
put '%let user=%mf_getuser();';
put '%mpe_getgroups(user=&user,outds=work.groups)';
put '/* check if user is admin */';
put '%local is_admin;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from work.groups';
put 'where groupname="&dc_admin_group";';
put '%if &is_admin>0 %then %do;';
put '%let allow_restore=YES;';
put '%let reason=IS ADMIN;';
put '%return;';
put '%end;';
put '/* check if user has basic access */';
put '%local libds;';
put 'proc sql noprint;';
put 'select cats(base_lib,''.'',base_ds) into: libds';
put 'from &mpelib..mpe_submit';
put 'where TABLE_ID="&load_ref";';
put '%mpe_accesscheck(&libds,outds=work.access_check';
put ',user=&user';
put ',access_level=EDIT';
put ')';
put '%if %mf_nobs(access_check)=0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=No access in MPE_TABLES;';
put '%return;';
put '%end;';
put '/* check if user has column level security rules */';
put 'proc sql;';
put 'create table work.cls_rules as';
put 'select *';
put 'from &mpelib..mpe_column_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("EDIT",''ALL'')';
put 'and CLS_ACTIVE=1';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)';
put 'and CLS_LIBREF="%upcase(&base_lib)"';
put 'and CLS_TABLE="%upcase(&base_ds)";';
put '%if %mf_nobs(work.cls_rules)>0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;';
put 'data _null_;';
put 'set work.cls_rules;';
put 'putlog (_all_)(=);';
put 'if _n_>5 then stop;';
put 'run;';
put '%return;';
put '%end;';
put '/* check if user has row level security rules */';
put 'proc sql;';
put 'create table work.rls_rules as';
put 'select *';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("EDIT",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="&base_lib"';
put 'and rls_table="&base_ds"';
put 'and rls_active=1;';
put '%if %mf_nobs(work.rls_rules)>0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=User has restrictions in MPE_ROW_LEVEL_SECURITY;';
put 'data _null_;';
put 'set work.rls_rules;';
put 'putlog (_all_)(=);';
put 'if _n_>5 then stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %do;';
put '%let allow_restore=YES;';
put '%let reason=CHECKS PASSED;';
put '%end;';
put '%mend mpe_checkrestore;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'end;';
put 'else do;';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);';
put '%local ismap;';
put 'proc sql noprint;';
put 'select count(*) into: ismap';
put 'from &dclib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;';
put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;';
put 'data &inds;';
put 'set &inds;';
put 'LOAD_REF="&mperef";';
put 'run;';
put '%end;';
put '%mend mpe_xlmapvalidate;';
put '%macro mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=%sysfunc(datetime())';
put ',approvals=';
put ',mperef=';
put ',reason_txt=';
put ',mac=mpe_loadfail.sas';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads';
put 'set STATUS=symget(''status'')';
put ', duration=&dur';
put ', processed_dttm=&dc_dttmtfmt.';
put ', approvals = symget(''approvals'')';
put ', reason_txt= symget(''reason_txt'')';
put 'where CSV_DIR="&mperef";';
put '%let syscc=666;';
put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)';
put '%mend mpe_loadfail;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mpe_loader(';
put 'mperef= /* name of subfolder containing the staged data */';
put ',mDebug=0 /* set to 1 for development or debugging */';
put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/';
put ',approver= /* allows a userid to be provided for direct approval email */';
put ',url= /* optional - url for debugging */';
put ',dlm=%str(,)';
put ',termstr=crlf';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%put entered mpe_loader from &=_program;';
put '%put &=url;';
put '%put &=termstr;';
put '%put &=dlm;';
put '/* determine full path to CSV directory */';
put '%local now;';
put '%let now=&dc_dttmtfmt;';
put '%put &=now;';
put '/**';
put '* get full path to package (only subdirectory passed through)';
put '*/';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing: mperef mpelocapprovals)';
put ')';
put '%let csv_dir=%trim(&mpelocapprovals/&mperef);';
put '/* exit if package has already been uploaded */';
put '%local check;';
put 'proc sql noprint;';
put 'select count(*) into: check';
put 'from &mpelib..mpe_loads';
put 'where csv_dir="&mperef";';
put '%if &check %then %do;';
put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads';
put ',mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* get CSV directory contents */';
put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)';
put 'data WORK.csvs;';
put 'set WORK.getfiles;';
put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;';
put 'lib=upcase(scan(filename,1,''.''));';
put 'ds=upcase(scan(filename,2,''.''));';
put 'output;';
put 'end;';
put 'run;';
put '/* get table attributes */';
put 'proc sql noprint;';
put 'create table WORK.sumo_tables as';
put 'select a.filename, b.*';
put 'from WORK.csvs a';
put 'left join &mpelib..mpe_tables b';
put 'on a.lib=b.libref';
put 'and a.ds=b.dsn';
put 'where b.tx_from le &now';
put 'and &now lt b.tx_to;';
put '/* define user as meta user if available */';
put '%local user;';
put '%let user=%mf_getuser();';
put '/* check if there is actually a table to load */';
put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;';
put '%let msg=Table not registered in &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=&msg';
put ',now=&now';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="&user"';
put ',STATUS=''IN PROGRESS''';
put ',CSV_dir="&mperef"';
put ',PROCESSED_DTTM=&now';
put ',reason_txt = symget(''submitted_reason_txt'');';
put '/* import CSV */';
put '%let droplist=;';
put '%let attrib=;';
put '%let droplist=;';
put '%let libref=;';
put '%let DS=;';
put '/* get table info */';
put 'data _null_;';
put 'set sumo_tables;';
put 'libds=upcase(cats(libref,''.'',dsn));';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''libds'',libds);';
put 'call symputx(''FNAME'',filename);';
put 'call symputx(''LIBREF'',libref);';
put 'call symputx(''DS'',dsn);';
put 'call symputx(''LOADTYPE'',loadtype);';
put 'call symputx(''BUSKEY'',buskey);';
put 'call symputx(''VAR_TXFROM'',var_txfrom);';
put 'call symputx(''VAR_TXTO'',var_txto);';
put 'call symputx(''VAR_BUSFROM'',var_busfrom);';
put 'call symputx(''VAR_BUSTO'',var_busto);';
put 'call symputx(''VAR_PROCESSED'',var_processed);';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);';
put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);';
put 'call symputx(''NOTES'',NOTES);';
put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');';
put 'put (_all_)(=);';
put 'stop;';
put 'run;';
put '%if %length(&ds)=0 %then %do;';
put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* user must have EDIT access to load a table */';
put '%mpe_accesscheck(&orig_libds';
put ',outds=work.sumo_access';
put ',user=&user';
put ',access_level=EDIT )';
put '%put exiting accesscheck;';
put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;';
put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;';
put '%mpe_loadfail(';
put 'status=UNAUTHORISED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%put now importing: "&csv_dir/&fname" termstr=&termstr;';
put '/* get the variables from the CSV */';
put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);';
put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';';
put 'input;';
put 'length infile $32767;';
put 'infile=compress(_infile_,''"'',);';
put 'infile=compress(infile,"''",);';
put 'format name $32.;';
put 'putlog ''received vars: '' infile;';
put 'call symputx(''received_vars'',infile,''l'');';
put 'do varnum=1 to countw(infile,"&dlm");';
put '/* keep writeable chars */';
put 'name=compress(upcase(scan(infile,varnum)),,''kw'');';
put 'if name ne "_____DELETE__THIS__RECORD_____" then output;';
put 'end;';
put 'stop;';
put 'run;';
put '%put received_vars = &received_vars;';
put '%dc_assignlib(WRITE,&libref)';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=&libds';
put 'out=vars(keep=name type length varnum format:);';
put 'run;';
put 'data vars(keep=name type length varnum format);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'format2=upcase(format2);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"';
put ',"_____DELETE__THIS__RECORD_____");';
put 'if type2 in (2,6) then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,max(formatl,length),''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM''';
put 'then do;';
put 'format=''DATETIME19.'';';
put 'end;';
put 'else if format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD''';
put 'or format2=:''E8601DA'' or format2=:''B8601DA''';
put 'or format2=:''NLDATE''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put 'else do;';
put 'if formatl=0 then formatl=length;';
put 'format=cats(format2,formatl,''.'',formatd);';
put 'end;';
put 'type=''num'';';
put 'end;';
put 'put (_all_)(=);';
put 'run;';
put '/* build attrib statement */';
put 'data vars_attrib;';
put 'length attrib_statement $32767 type2 $20;';
put 'set vars end=lastobs;';
put 'retain attrib_statement;';
put 'if type=''char'' then type2=''$'';';
put 'str1=catx('' '',name,''length='',cats(type2,length));';
put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);';
put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');';
put 'run;';
put '/* build input statement - first get vars in right order';
put 'and join with target formats*/';
put 'proc sql noprint;';
put 'create table vars_csv2 as';
put 'select b.*';
put 'from vars_csv1 a';
put 'left join vars_attrib b';
put 'on a.name=b.name';
put 'order by a.varnum;';
put '/* now build input statement */';
put 'data final_check;';
put 'set vars_csv2 end=lastobs;';
put 'length input_statement $32767 type2 $20 droplist $32767;';
put 'retain input_statement droplist;';
put '/* Build input statement - CATCH EXCEPTIONS HERE!*/';
put 'if name in (''QUOTE_DTTM'') then do;';
put 'name=cats(name,''2'');';
put 'droplist=catx('' '',trim(droplist),name);';
put 'type2=''$20.'';/* converted below */';
put 'end;';
put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');';
put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';';
put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';';
put 'else if format=:''TIME'' then type2=''ANYDTTME.'';';
put 'else if name='''' then do;/* additional vars in input data */';
put 'name=''_____DELETE__THIS__VARIABLE_____'';';
put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');';
put 'type2=''$1.'';';
put 'end;';
put 'else type2=''best32.'';';
put '* else type2=cats(length,''.'');';
put 'input_statement=catx('' '',input_statement,name,'':'',type2);';
put 'if lastobs then do;';
put 'call symputx(''INPUT'', input_statement,''L'');';
put 'if trim(droplist) ne '''' then';
put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');';
put 'end;';
put 'run;';
put '%let mpeloadstop=0;';
put 'data work.STAGING_DS;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767';
put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';';
put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;';
put 'if _n_=1 then call missing (of _all_);';
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;';
put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/';
put '/* SPECIAL LOGIC FOR SPECIAL VARS */';
put '%end;';
put 'if _error_ ne 0 then do;';
put 'putlog _infile_;';
put 'call symputx(''mpeloadstop'',_n_);';
put 'stop;';
put 'end;';
put '/* remove all blank rows */';
put 'if compress(cats(of _all_),''.'')='' '' then delete;';
put 'run;';
put '%if &mpeloadstop>0 %then %do;';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put '%put redirecting log output to capture return message;';
put '%put currentloc=&logloc;';
put 'filename tmp temp;';
put 'proc printto log=tmp;run;';
put 'data _null_;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2';
put 'missover termstr=&termstr;';
put 'attrib &attrib ;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____';
put '%then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put 'if _error_ then stop;';
put 'run;';
put '/* get log back */';
put 'proc printto log=&logloc;run;';
put 'data _null_; infile tmp; input; putlog _infile_;run;';
put '/* scan log for invalid data warnings */';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;';
put 'if index(_infile_,''NOTE: Invalid data for'') then do;';
put 'msg1=_infile_;';
put 'input;';
put 'msg2=_infile_;';
put 'input;';
put 'msg3=_infile_;';
put 'input;';
put 'msg4=_infile_;';
put 'input;';
put 'msg5=_infile_;';
put 'url=symget(''url'');';
put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);';
put 'call symputx(''msg'',msg);';
put 'stop;';
put 'end;';
put 'run;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* check that the table is unique on PK */';
put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;';
put '%local duplist;';
put 'data _null_;';
put 'set work.mpe_dups;';
put '%do i=1 %to %sysfunc(countw(&pk));';
put '%let iWord=%scan(&pk,&i);';
put 'call symputx(''duplist'',symget(''duplist'')!!';
put '" &iWord="!!cats(&iWord));';
put '%end;';
put 'run;';
put '%let msg=This upload contains duplicates on the Primary Key columns %trim(';
put ')(&pk) \n Please remove the duplicates and try again. %trim(';
put ')\n &duplist \n ;';
put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%if &syscc gt 4 %then %do;';
put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* If a Complex Excel Upload, needs to have the load ref added to the table */';
put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)';
put '/* Run the Post Edit Hook prior to creation of staging folder */';
put '%mpe_runhook(POST_EDIT_HOOK)';
put '/* stop if err */';
put '%if &syscc gt 4 %then %do;';
put '%let msg=ERR in post edit hook (&post_edit_hook);';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/**';
put '* send to approve process';
put '*/';
put '/* create a dataset key (datetime plus 3 digit random number plus PID) */';
put '/* send dataset to approvals subfolder with same name as subfolder */';
put 'libname approval "&mpelocapprovals/&mperef";';
put 'data approval.&mperef;';
put 'set work.staging_ds;';
put 'run;';
put 'proc export data=approval.&mperef';
put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control dataset with relevant info */';
put 'data append_app;';
put 'if 0 then set &mpelib..mpe_submit;/* get formats */';
put 'call missing (of _all_);';
put 'TABLE_ID="&mperef";';
put 'submit_status_cd=''SUBMITTED'';';
put 'submitted_by_nm="%mf_getuser()";';
put 'base_lib="&libref";';
put 'base_ds="&ds";';
put 'submitted_on_dttm=&now;';
put 'submitted_reason_txt=symget(''submitted_reason_txt'');';
put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);';
put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);';
put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;';
put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;';
put 'reviewed_by_nm='''';';
put 'reviewed_on_dttm=.;';
put 'run;';
put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,';
put 'ref=%str(&mperef update in &_program),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base= &mpelib..mpe_submit data=append_app;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* send email to REVIEW members */';
put '%put sending mpe_alerts;';
put '%mpe_alerts(alert_event=SUBMITTED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&mperef';
put ')';
put '/* DISABLE EMAIL FOR NOW';
put '%let b2=REASON: %quote(&submitted_reason_txt);';
put '%local URLNOTES;';
put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));';
put '%let b3=%str(Click to review / approve: )%trim(';
put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim(';
put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;';
put '%let b4=%str(Reference ID: &mperef);';
put '*/';
put '%put mpe_loader finishing up with syscc=&syscc;';
put '%if &syscc le 4 %then %do;';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'putlog ''Updating mpe_loads with the following query:'';';
put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";';
put 'putlog " , duration=" dur;';
put 'putlog " , processed_dttm=" now;';
put 'putlog " , approvals = ''&libref..&ds''";';
put 'putlog " where CSV_DIR=''&mperef'';";';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads set STATUS=''SUCCESS''';
put ', duration=&dur';
put ', processed_dttm=&now';
put ', approvals = "&libref..&ds"';
put 'where CSV_DIR="&mperef";';
put '%end;';
put '%else %do;';
put '%mpe_loadfail(';
put 'status="FAILED - &syscc"';
put ',now=&now';
put ',approvals=&libref..&ds';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '%mend mpe_loader;';
put '%macro mcf_init(func';
put ')/*/STORE SOURCE*/;';
put '%if not (%symexist(SASJS_PREFIX)) %then %do;';
put '%global SASJS_PREFIX;';
put '%let SASJS_PREFIX=SASJS;';
put '%end;';
put '%let func=%upcase(&func);';
put '/* the / character is just a seperator */';
put '%global &sasjs_prefix._FUNCTIONS;';
put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;';
put '1';
put '%return;';
put '%end;';
put '%else %do;';
put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;';
put '0';
put '%end;';
put '%mend mcf_init;';
put '%macro mcf_getfmttype(wrap=NO';
put ',insert_cmplib=DEPRECATED';
put ',lib=WORK';
put ',cat=SASJS';
put ',pkg=UTILS';
put ')/*/STORE SOURCE*/;';
put '%local i var cmpval found;';
put '%if %mcf_init(mcf_getfmttype)=1 %then %return;';
put '%if &wrap=YES %then %do;';
put 'proc fcmp outlib=&lib..&cat..&pkg;';
put '%end;';
put 'function mcf_getfmttype(fmtnm $) $8;';
put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');';
put 'else do;';
put '/* extract NAME */';
put 'length fmt $32;';
put 'fmt=scan(fmtnm,1,''.'');';
put 'do while (';
put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')';
put ');';
put 'if length(fmt)=1 then fmt=''W'';';
put 'else fmt=substr(fmt,1,length(fmt)-1);';
put 'end;';
put '/* apply lookups */';
put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT''';
put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR''';
put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ''';
put ',''NLDATM'') then return(''DATETIME'');';
put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY''';
put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx''';
put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB''';
put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY''';
put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH''';
put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY''';
put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC''';
put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS''';
put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD''';
put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx''';
put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');';
put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ''';
put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ''';
put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');';
put 'else return(''NUM'');';
put 'end;';
put 'endsub;';
put '%if &wrap=YES %then %do;';
put 'quit;';
put '%end;';
put '/* insert the CMPLIB if not already there */';
put '%let cmpval=%sysfunc(getoption(cmplib));';
put '%let found=0;';
put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));';
put '%let var=%scan(&cmpval,&i,%str( %(%)));';
put '%if &var=&lib..&cat %then %let found=1;';
put '%end;';
put '%if &found=0 %then %do;';
put 'options insert=(CMPLIB=(&lib..&cat));';
put '%end;';
put '%mend mcf_getfmttype;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_ds2csv(ds';
put ',dlm=COMMA';
put ',outref=0';
put ',outfile=';
put ',outencoding=0';
put ',headerformat=LABEL';
put ',termstr=CRLF';
put ')/*/STORE SOURCE*/;';
put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WARN)ING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;';
put '%if &outencoding=0 %then %let outencoding=;';
put '%else %let outencoding=encoding=&outencoding;';
put '%if &outref=0 %then %let outloc=&outfile;';
put '%else %let outloc=&outref;';
put '%if &headerformat=SASJS %then %do;';
put '%let delim=",";';
put '%let termstr=CRLF;';
put '%mcf_getfmttype(wrap=YES)';
put '%end;';
put '%else %if &dlm=COMMA %then %let delim=",";';
put '%else %let delim=";";';
put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */';
put '/* first get headers */';
put 'data _null_;';
put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;';
put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;';
put 'call missing(of _all_);';
put 'dsid=open("&ds.","i");';
put 'num=attrn(dsid,"nvars");';
put 'dlm=&delim;';
put 'do i=1 to num;';
put 'varnm=upcase(varname(dsid,i));';
put 'if i=num then dlm='''';';
put '%if &headerformat=NAME %then %do;';
put 'header=cats(varnm,dlm);';
put '%end;';
put '%else %if &headerformat=LABEL %then %do;';
put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);';
put '%end;';
put '%else %if &headerformat=SASJS %then %do;';
put 'vlen=varlen(dsid,i);';
put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');';
put 'else do;';
put 'vfmt=coalescec(varfmt(dsid,i),''0'');';
put 'fmttype=mcf_getfmttype(vfmt);';
put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');';
put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');';
put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');';
put '/**';
put '* there is not much point importing a short length numeric like this,';
put '* eg with best4., as the resulting variable will still be stored as';
put '* length 8. We need a length or format statement to ensure variable';
put '* is creatd with the smaller length...';
put '**/';
put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');';
put 'else header=cats(varnm,'':best.'');';
put 'end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Invalid headerformat value (&headerformat);';
put '%return;';
put '%end;';
put 'put header @;';
put 'end;';
put 'rc=close(dsid);';
put 'run;';
put '%let varlist=%mf_getvarlist(&ds);';
put '%let vcnt=%sysfunc(countw(&varlist));';
put '/**';
put '* The $quote modifier (without a width) will take the length from the variable';
put '* and increase by two. However this will lead to truncation where the value';
put '* contains double quotes (which are doubled up). To get around this, scan the';
put '* data to see the max number of double quotes, so that the appropriate width';
put '* can be applied in the subsequent step.';
put '*/';
put 'data _null_;';
put 'set &ds end=last;';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%local vlen&i;';
put '%if %mf_getvartype(&ds,&var)=C %then %do;';
put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);';
put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);';
put 'retain &dsv1 0;';
put '&dsv2=length(&var)+countc(&var,''"'');';
put 'if &dsv2>&dsv1 then &dsv1=&dsv2;';
put 'if last then call symputx(';
put '"vlen&i"';
put '/* should be no shorter than varlen, and no longer than 32767 */';
put ',cats(''$quote'',min(&dsv1+2,32767),''.'')';
put ',''l''';
put ');';
put '%end;';
put '%end;';
put '%let vat=@;';
put '%let vcom=&delim;';
put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);';
put '/* next, export data */';
put 'data _null_;';
put 'set &ds.;';
put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;';
put 'if _n_=1 then &vmiss='' '';';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%if &i=&vcnt %then %do;';
put '%let vat=;';
put '%let vcom=;';
put '%end;';
put '%if %mf_getvartype(&ds,&var)=N %then %do;';
put '%if &headerformat = SASJS %then %do;';
put '%let vcom=&delim;';
put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));';
put '%if &fmttype=DATE %then %let vfmt=DATE9.;';
put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;';
put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;';
put '%else %do;';
put '%let vfmt=;';
put '%let vcom=;';
put '%end;';
put '%end;';
put '%else %let vcom=;';
put '/* must use period - in order to work in both 9.4 and Viya 3.5 */';
put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;';
put '&vmiss=cats(''.'',&var);';
put 'put &vmiss &vat;';
put 'end;';
put 'else put &var &vfmt &vcom &vat;';
put '%end;';
put '%else %do;';
put '%if &i ne &vcnt %then %let vcom=&delim;';
put 'put &var &&vlen&i &vcom &vat;';
put '%end;';
put '%end;';
put 'run;';
put '%mend mp_ds2csv;';
put '%macro mf_islibds(libds';
put ')/*/STORE SOURCE*/;';
put '%local regex;';
put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));';
put '%sysfunc(prxmatch(®ex,&libds))';
put '%mend mf_islibds;';
put '/** @cond */';
put '%macro mp_stripdiffs(libds';
put ',loadref';
put ',difftable';
put ',filtervar=0';
put ',outds=work.mp_stripdiffs';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%let libds=%upcase(&libds);';
put '/* safety checks */';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc on entry. Clean session required!)';
put ')';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (%mf_islibds(&libds)=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid library.dataset reference - %superq(libds))';
put ')';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 ds5 fref1 filterstr;';
put '%let fref1=%mf_getuniquefileref();';
put '%if &filtervar ne 0 %then %let filterstr=%superq(&filtervar);';
put '%else %let filterstr=%str(1=1);';
put '/* get timestamp of the diff to be reverted */';
put '%local ts;';
put 'proc sql noprint;';
put 'select put(processed_dttm,datetime19.6) into: ts';
put 'from &difftable where load_ref="&loadref";';
put '%mp_abort(iftrue= (&sqlobs=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Load ref %superq(loadref) not found!)';
put ')';
put '/* extract diffs for this base table from this timestamp onwards */';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_diffs));';
put 'create table &ds1 (drop=libref dsn) as';
put 'select * from &difftable';
put 'where upcase(cats(libref))="%scan(&libds,1,.)"';
put 'and upcase(cats(dsn))="%scan(&libds,2,.)"';
put 'and processed_dttm ge "&ts"dt';
put 'order by processed_dttm desc, key_hash, is_pk;';
put '/* extract key values only */';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_pks));';
put '%local keyhash processed;';
put '%let keyhash=%upcase(%mf_getuniquename(prefix=mpsdvar_keyhash));';
put '%let processed=%upcase(%mf_getuniquename(prefix=mpsdvar_processed));';
put 'create table &ds2 as';
put 'select key_hash as &keyhash,';
put 'tgtvar_nm,';
put 'tgtvar_type,';
put 'coalescec(oldval_char,newval_char) as charval,';
put 'coalesce(oldval_num, newval_num) as numval,';
put 'processed_dttm as &processed';
put 'from &ds1';
put 'where is_pk=1';
put 'order by &keyhash, &processed;';
put '/* grab pk values */';
put '%local pk;';
put 'select distinct upcase(tgtvar_nm) into: pk separated by '' '' from &ds2;';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_keychar));';
put 'proc transpose data=&ds2(where=(tgtvar_type=''C''))';
put 'out=&ds3(drop=_name_);';
put 'by &keyhash &processed;';
put 'id TGTVAR_NM;';
put 'var charval;';
put 'run;';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_keynum));';
put 'proc transpose data=&ds2(where=(tgtvar_type=''N''))';
put 'out=&ds4(drop=_name_);';
put 'by &keyhash &processed;';
put 'id TGTVAR_NM;';
put 'var numval;';
put 'run;';
put '/* shorten the lengths */';
put '%mp_ds2squeeze(&ds3,outds=&ds3)';
put '%mp_ds2squeeze(&ds4,outds=&ds4)';
put '/* now merge to get all key values and de-dup */';
put '%let ds5=%upcase(work.%mf_getuniquename(prefix=mpsd_merged));';
put 'data &ds5;';
put 'length &keyhash $32 &processed 8;';
put 'merge &ds3 &ds4;';
put 'by &keyhash &processed;';
put 'if not missing(&keyhash);';
put 'run;';
put 'proc sort data=&ds5 nodupkey;';
put 'by &pk;';
put 'run;';
put '/* join to base table for preliminary stage DS */';
put 'proc sql;';
put 'create table &outds as select "No " as _____DELETE__THIS__RECORD_____';
put '%do x=1 %to %sysfunc(countw(&pk,%str( )));';
put ',a.%scan(&pk,&x,%str( ))';
put '%end;';
put '%local notpkcols;';
put '%let notpkcols=%upcase(%mf_getvarlist(&libds));';
put '%let notpkcols=%mf_wordsinstr1butnotstr2(str1=¬pkcols,str2=&pk);';
put '%do x=1 %to %sysfunc(countw(¬pkcols,%str( )));';
put ',b.%scan(¬pkcols,&x,%str( ))';
put '%end;';
put 'from &ds5 a';
put 'left join &libds (where=(&filterstr)) b';
put 'on 1=1';
put '%do x=1 %to %sysfunc(countw(&pk,%str( )));';
put 'and a.%scan(&pk,&x,%str( ))=b.%scan(&pk,&x,%str( ))';
put '%end;';
put ';';
put '/* create SAS code to apply to stage_ds */';
put 'data _null_;';
put 'set &ds1;';
put 'file &fref1 lrecl=33000;';
put 'length charval $32767;';
put 'if _n_=1 then put ''proc sql noprint;'';';
put 'by descending processed_dttm key_hash is_pk;';
put 'if move_type=''M'' then do;';
put 'if first.key_hash then do;';
put 'put "update &outds set " @@;';
put 'end;';
put 'if IS_PK=0 then do;';
put 'put " " tgtvar_nm ''='' @@;';
put 'cnt=count(oldval_char,''"'');';
put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));';
put 'if tgtvar_type=''C'' then put charval @@;';
put 'else put oldval_num @@;';
put 'if not last.is_pk then put '','';';
put 'end;';
put 'else do;';
put 'if first.is_pk then put " where 1=1 " @@;';
put 'put " and " tgtvar_nm ''='' @@;';
put 'cnt=count(oldval_char,''"'');';
put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));';
put 'if tgtvar_type=''C'' then put charval @@;';
put 'else put oldval_num @@;';
put 'end;';
put 'end;';
put 'else if move_type=''A'' then do;';
put 'if first.key_hash then do;';
put 'put "update &outds set _____DELETE__THIS__RECORD_____=''Yes'' where 1=1 "@@;';
put 'end;';
put '/* gating if - as only need PK now */';
put 'if is_pk=1;';
put 'put '' AND '' tgtvar_nm ''='' @@;';
put 'cnt=count(newval_char,''"'');';
put 'charval=quote(trim(substr(newval_char,1,32765-cnt)));';
put 'if tgtvar_type=''C'' then put charval @@;';
put 'else put newval_num @@;';
put 'end;';
put 'else if move_type=''D'' then do;';
put 'if first.key_hash then do;';
put 'put "update &outds set _____DELETE__THIS__RECORD_____=''No'' " @@;';
put 'end;';
put 'if IS_PK=0 then do;';
put 'put " ," tgtvar_nm ''='' @@;';
put 'cnt=count(oldval_char,''"'');';
put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));';
put 'if tgtvar_type=''C'' then put charval @@;';
put 'else put oldval_num @@;';
put 'end;';
put 'else do;';
put 'if first.is_pk then put " where 1=1 " @@;';
put 'put " and " tgtvar_nm ''='' @@;';
put 'cnt=count(oldval_char,''"'');';
put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));';
put 'if tgtvar_type=''C'' then put charval @@;';
put 'else put oldval_num @@;';
put 'end;';
put 'end;';
put 'if last.key_hash then put '';'';';
put 'run;';
put '/* apply the modification statements */';
put '%inc &fref1/source2 lrecl=33000;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4, &ds5;';
put 'file &fref1 clear;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'infile &fref1;';
put 'input;';
put 'if _n_=1 then putlog "Contents of SQL adjustments";';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mend mp_stripdiffs;';
put '/** @endcond */';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file restore.sas';
put '@brief Restores a data version';
put '@details Only applies if the history is stored in the audit table';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_nobs.sas';
put '@li mp_abort.sas';
put '@li mp_ds2csv.sas';
put '@li mp_stripdiffs.sas';
put '@li mpeinit.sas';
put '@li mpe_checkrestore.sas';
put '@li mpe_loader.sas';
put ' Service Inputs
';
put ' restore_in
';
put '|LOAD_REF:$32|';
put '|---|';
put '|DCXXXXXX|';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let loadref=;';
put 'data _null_;';
put 'set work.restore_in;';
put 'call symputx(''loadref'',load_ref);';
put 'run;';
put '/**';
put '* Check if user has basic access permission to RESTORE the table';
put '*/';
put '%put checking access;';
put '%global allow_restore reason;';
put '%mpe_checkrestore(&loadref,outresult=ALLOW_RESTORE,outreason=REASON)';
put '%mp_abort(iftrue= (&ALLOW_RESTORE ne YES)';
put ',mac=&_program..sas';
put ',msg=%str(Cannot restore because: &reason)';
put ')';
put '/* grab the base DS */';
put 'proc sql noprint;';
put 'select cats(base_lib,''.'',base_ds) into: tgtds';
put 'from &mpelib..mpe_submit';
put 'where TABLE_ID="&loadref";';
put '/* find the audit table */';
put 'select coalescec(audit_libds,"&mpelib..MPE_AUDIT"), loadtype, var_txto';
put 'into: difftable, :loadtype, :txto';
put 'from &mpelib..MPE_TABLES';
put 'where libref="%scan(&tgtds,1,.)"';
put '& dsn="%scan(&tgtds,2,.)"';
put '& &dc_dttmtfmt0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc after stripdiffs)';
put ')';
put '%mp_abort(iftrue= (%mf_nobs(work.mp_stripdiffs)=0)';
put ',mac=&_program..sas';
put ',msg=%str(THERE ARE NO DIFFERENCES TO APPLY)';
put ')';
put '/* create a new load ref */';
put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr(';
put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);';
put '/* Create package folder */';
put '%let dir=&mpelocapprovals/&mperef;';
put '%mf_mkdir(&dir)';
put 'options notes mprint;';
put 'libname approve "&dir";';
put '/* take copy of macvars */';
put 'data _null_;';
put 'file "&dir/macvars.sas";';
put 'set sashelp.vmacro;';
put 'where scope=''GLOBAL'';';
put 'put ''%let '' name ''='' value '';'';';
put 'run;';
put '/* copy the diffs dataset */';
put 'data approve.jsdset;';
put 'length _____DELETE__THIS__RECORD_____ $3;';
put 'if 0 then call missing(_____DELETE__THIS__RECORD_____);';
put 'set work.mp_stripdiffs;';
put 'run;';
put '/* export to csv */';
put '%mp_ds2csv(approve.jsdset';
put ',dlm=COMMA';
put ',outfile="&dir/%trim(&tgtds).csv"';
put ',outencoding="UTF-8"';
put ',headerformat=NAME';
put ',termstr=CRLF';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc when writing the CSV)';
put ')';
put '%mpe_loader(mperef=&mperef';
put ',submitted_reason_txt=Restoring &loadref';
put ',dc_dttmtfmt=&dc_dttmtfmt';
put ')';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(';
put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)';
put ',mac=&_program..sas';
put ',msg=%str(mf_abort.error=1)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/* send relevant SUCCESS values */';
put 'data work.restore_out;';
put 'loadref="&mperef";';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,restore_out)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=stagedata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'end;';
put 'else do;';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);';
put '%local ismap;';
put 'proc sql noprint;';
put 'select count(*) into: ismap';
put 'from &dclib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;';
put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;';
put 'data &inds;';
put 'set &inds;';
put 'LOAD_REF="&mperef";';
put 'run;';
put '%end;';
put '%mend mpe_xlmapvalidate;';
put '%macro mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=%sysfunc(datetime())';
put ',approvals=';
put ',mperef=';
put ',reason_txt=';
put ',mac=mpe_loadfail.sas';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads';
put 'set STATUS=symget(''status'')';
put ', duration=&dur';
put ', processed_dttm=&dc_dttmtfmt.';
put ', approvals = symget(''approvals'')';
put ', reason_txt= symget(''reason_txt'')';
put 'where CSV_DIR="&mperef";';
put '%let syscc=666;';
put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)';
put '%mend mpe_loadfail;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $2000 fref fref2 $8 file_or_folder $6 filename $255';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mpe_loader(';
put 'mperef= /* name of subfolder containing the staged data */';
put ',mDebug=0 /* set to 1 for development or debugging */';
put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/';
put ',approver= /* allows a userid to be provided for direct approval email */';
put ',url= /* optional - url for debugging */';
put ',dlm=%str(,)';
put ',termstr=crlf';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%put entered mpe_loader from &=_program;';
put '%put &=url;';
put '%put &=termstr;';
put '%put &=dlm;';
put '/* determine full path to CSV directory */';
put '%local now;';
put '%let now=&dc_dttmtfmt;';
put '%put &=now;';
put '/**';
put '* get full path to package (only subdirectory passed through)';
put '*/';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing: mperef mpelocapprovals)';
put ')';
put '%let csv_dir=%trim(&mpelocapprovals/&mperef);';
put '/* exit if package has already been uploaded */';
put '%local check;';
put 'proc sql noprint;';
put 'select count(*) into: check';
put 'from &mpelib..mpe_loads';
put 'where csv_dir="&mperef";';
put '%if &check %then %do;';
put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads';
put ',mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* get CSV directory contents */';
put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)';
put 'data WORK.csvs;';
put 'set WORK.getfiles;';
put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;';
put 'lib=upcase(scan(filename,1,''.''));';
put 'ds=upcase(scan(filename,2,''.''));';
put 'output;';
put 'end;';
put 'run;';
put '/* get table attributes */';
put 'proc sql noprint;';
put 'create table WORK.sumo_tables as';
put 'select a.filename, b.*';
put 'from WORK.csvs a';
put 'left join &mpelib..mpe_tables b';
put 'on a.lib=b.libref';
put 'and a.ds=b.dsn';
put 'where b.tx_from le &now';
put 'and &now lt b.tx_to;';
put '/* define user as meta user if available */';
put '%local user;';
put '%let user=%mf_getuser();';
put '/* check if there is actually a table to load */';
put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;';
put '%let msg=Table not registered in &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=&msg';
put ',now=&now';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="&user"';
put ',STATUS=''IN PROGRESS''';
put ',CSV_dir="&mperef"';
put ',PROCESSED_DTTM=&now';
put ',reason_txt = symget(''submitted_reason_txt'');';
put '/* import CSV */';
put '%let droplist=;';
put '%let attrib=;';
put '%let droplist=;';
put '%let libref=;';
put '%let DS=;';
put '/* get table info */';
put 'data _null_;';
put 'set sumo_tables;';
put 'libds=upcase(cats(libref,''.'',dsn));';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''libds'',libds);';
put 'call symputx(''FNAME'',filename);';
put 'call symputx(''LIBREF'',libref);';
put 'call symputx(''DS'',dsn);';
put 'call symputx(''LOADTYPE'',loadtype);';
put 'call symputx(''BUSKEY'',buskey);';
put 'call symputx(''VAR_TXFROM'',var_txfrom);';
put 'call symputx(''VAR_TXTO'',var_txto);';
put 'call symputx(''VAR_BUSFROM'',var_busfrom);';
put 'call symputx(''VAR_BUSTO'',var_busto);';
put 'call symputx(''VAR_PROCESSED'',var_processed);';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);';
put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);';
put 'call symputx(''NOTES'',NOTES);';
put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');';
put 'put (_all_)(=);';
put 'stop;';
put 'run;';
put '%if %length(&ds)=0 %then %do;';
put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* user must have EDIT access to load a table */';
put '%mpe_accesscheck(&orig_libds';
put ',outds=work.sumo_access';
put ',user=&user';
put ',access_level=EDIT )';
put '%put exiting accesscheck;';
put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;';
put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;';
put '%mpe_loadfail(';
put 'status=UNAUTHORISED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%put now importing: "&csv_dir/&fname" termstr=&termstr;';
put '/* get the variables from the CSV */';
put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);';
put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';';
put 'input;';
put 'length infile $32767;';
put 'infile=compress(_infile_,''"'',);';
put 'infile=compress(infile,"''",);';
put 'format name $32.;';
put 'putlog ''received vars: '' infile;';
put 'call symputx(''received_vars'',infile,''l'');';
put 'do varnum=1 to countw(infile,"&dlm");';
put '/* keep writeable chars */';
put 'name=compress(upcase(scan(infile,varnum)),,''kw'');';
put 'if name ne "_____DELETE__THIS__RECORD_____" then output;';
put 'end;';
put 'stop;';
put 'run;';
put '%put received_vars = &received_vars;';
put '%dc_assignlib(WRITE,&libref)';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=&libds';
put 'out=vars(keep=name type length varnum format:);';
put 'run;';
put 'data vars(keep=name type length varnum format);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'format2=upcase(format2);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"';
put ',"_____DELETE__THIS__RECORD_____");';
put 'if type2 in (2,6) then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,max(formatl,length),''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' or format2=:''NLDATM''';
put 'then do;';
put 'format=''DATETIME19.'';';
put 'end;';
put 'else if format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD''';
put 'or format2=:''E8601DA'' or format2=:''B8601DA''';
put 'or format2=:''NLDATE''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put 'else do;';
put 'if formatl=0 then formatl=length;';
put 'format=cats(format2,formatl,''.'',formatd);';
put 'end;';
put 'type=''num'';';
put 'end;';
put 'put (_all_)(=);';
put 'run;';
put '/* build attrib statement */';
put 'data vars_attrib;';
put 'length attrib_statement $32767 type2 $20;';
put 'set vars end=lastobs;';
put 'retain attrib_statement;';
put 'if type=''char'' then type2=''$'';';
put 'str1=catx('' '',name,''length='',cats(type2,length));';
put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);';
put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');';
put 'run;';
put '/* build input statement - first get vars in right order';
put 'and join with target formats*/';
put 'proc sql noprint;';
put 'create table vars_csv2 as';
put 'select b.*';
put 'from vars_csv1 a';
put 'left join vars_attrib b';
put 'on a.name=b.name';
put 'order by a.varnum;';
put '/* now build input statement */';
put 'data final_check;';
put 'set vars_csv2 end=lastobs;';
put 'length input_statement $32767 type2 $20 droplist $32767;';
put 'retain input_statement droplist;';
put '/* Build input statement - CATCH EXCEPTIONS HERE!*/';
put 'if name in (''QUOTE_DTTM'') then do;';
put 'name=cats(name,''2'');';
put 'droplist=catx('' '',trim(droplist),name);';
put 'type2=''$20.'';/* converted below */';
put 'end;';
put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');';
put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';';
put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';';
put 'else if format=:''TIME'' then type2=''ANYDTTME.'';';
put 'else if name='''' then do;/* additional vars in input data */';
put 'name=''_____DELETE__THIS__VARIABLE_____'';';
put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');';
put 'type2=''$1.'';';
put 'end;';
put 'else type2=''best32.'';';
put '* else type2=cats(length,''.'');';
put 'input_statement=catx('' '',input_statement,name,'':'',type2);';
put 'if lastobs then do;';
put 'call symputx(''INPUT'', input_statement,''L'');';
put 'if trim(droplist) ne '''' then';
put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');';
put 'end;';
put 'run;';
put '%let mpeloadstop=0;';
put 'data work.STAGING_DS;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767';
put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';';
put 'attrib _____DELETE__THIS__RECORD_____ length=$3 &attrib ;';
put 'if _n_=1 then call missing (of _all_);';
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;';
put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/';
put '/* SPECIAL LOGIC FOR SPECIAL VARS */';
put '%end;';
put 'if _error_ ne 0 then do;';
put 'putlog _infile_;';
put 'call symputx(''mpeloadstop'',_n_);';
put 'stop;';
put 'end;';
put '/* remove all blank rows */';
put 'if compress(cats(of _all_),''.'')='' '' then delete;';
put 'run;';
put '%if &mpeloadstop>0 %then %do;';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put '%put redirecting log output to capture return message;';
put '%put currentloc=&logloc;';
put 'filename tmp temp;';
put 'proc printto log=tmp;run;';
put 'data _null_;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2';
put 'missover termstr=&termstr;';
put 'attrib &attrib ;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____';
put '%then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put 'if _error_ then stop;';
put 'run;';
put '/* get log back */';
put 'proc printto log=&logloc;run;';
put 'data _null_; infile tmp; input; putlog _infile_;run;';
put '/* scan log for invalid data warnings */';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;';
put 'if index(_infile_,''NOTE: Invalid data for'') then do;';
put 'msg1=_infile_;';
put 'input;';
put 'msg2=_infile_;';
put 'input;';
put 'msg3=_infile_;';
put 'input;';
put 'msg4=_infile_;';
put 'input;';
put 'msg5=_infile_;';
put 'url=symget(''url'');';
put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);';
put 'call symputx(''msg'',msg);';
put 'stop;';
put 'end;';
put 'run;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* check that the table is unique on PK */';
put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;';
put '%local duplist;';
put 'data _null_;';
put 'set work.mpe_dups;';
put '%do i=1 %to %sysfunc(countw(&pk));';
put '%let iWord=%scan(&pk,&i);';
put 'call symputx(''duplist'',symget(''duplist'')!!';
put '" &iWord="!!cats(&iWord));';
put '%end;';
put 'run;';
put '%let msg=This upload contains duplicates on the Primary Key columns %trim(';
put ')(&pk) \n Please remove the duplicates and try again. %trim(';
put ')\n &duplist \n ;';
put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%if &syscc gt 4 %then %do;';
put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* If a Complex Excel Upload, needs to have the load ref added to the table */';
put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)';
put '/* Run the Post Edit Hook prior to creation of staging folder */';
put '%mpe_runhook(POST_EDIT_HOOK)';
put '/* stop if err */';
put '%if &syscc gt 4 %then %do;';
put '%let msg=ERR in post edit hook (&post_edit_hook);';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/**';
put '* send to approve process';
put '*/';
put '/* create a dataset key (datetime plus 3 digit random number plus PID) */';
put '/* send dataset to approvals subfolder with same name as subfolder */';
put 'libname approval "&mpelocapprovals/&mperef";';
put 'data approval.&mperef;';
put 'set work.staging_ds;';
put 'run;';
put 'proc export data=approval.&mperef';
put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control dataset with relevant info */';
put 'data append_app;';
put 'if 0 then set &mpelib..mpe_submit;/* get formats */';
put 'call missing (of _all_);';
put 'TABLE_ID="&mperef";';
put 'submit_status_cd=''SUBMITTED'';';
put 'submitted_by_nm="%mf_getuser()";';
put 'base_lib="&libref";';
put 'base_ds="&ds";';
put 'submitted_on_dttm=&now;';
put 'submitted_reason_txt=symget(''submitted_reason_txt'');';
put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);';
put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);';
put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;';
put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;';
put 'reviewed_by_nm='''';';
put 'reviewed_on_dttm=.;';
put 'run;';
put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,';
put 'ref=%str(&mperef update in &_program),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base= &mpelib..mpe_submit data=append_app;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* send email to REVIEW members */';
put '%put sending mpe_alerts;';
put '%mpe_alerts(alert_event=SUBMITTED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&mperef';
put ')';
put '/* DISABLE EMAIL FOR NOW';
put '%let b2=REASON: %quote(&submitted_reason_txt);';
put '%local URLNOTES;';
put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));';
put '%let b3=%str(Click to review / approve: )%trim(';
put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim(';
put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;';
put '%let b4=%str(Reference ID: &mperef);';
put '*/';
put '%put mpe_loader finishing up with syscc=&syscc;';
put '%if &syscc le 4 %then %do;';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'putlog ''Updating mpe_loads with the following query:'';';
put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";';
put 'putlog " , duration=" dur;';
put 'putlog " , processed_dttm=" now;';
put 'putlog " , approvals = ''&libref..&ds''";';
put 'putlog " where CSV_DIR=''&mperef'';";';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads set STATUS=''SUCCESS''';
put ', duration=&dur';
put ', processed_dttm=&now';
put ', approvals = "&libref..&ds"';
put 'where CSV_DIR="&mperef";';
put '%end;';
put '%else %do;';
put '%mpe_loadfail(';
put 'status="FAILED - &syscc"';
put ',now=&now';
put ',approvals=&libref..&ds';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '%mend mpe_loader;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mcf_init(func';
put ')/*/STORE SOURCE*/;';
put '%if not (%symexist(SASJS_PREFIX)) %then %do;';
put '%global SASJS_PREFIX;';
put '%let SASJS_PREFIX=SASJS;';
put '%end;';
put '%let func=%upcase(&func);';
put '/* the / character is just a seperator */';
put '%global &sasjs_prefix._FUNCTIONS;';
put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;';
put '1';
put '%return;';
put '%end;';
put '%else %do;';
put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;';
put '0';
put '%end;';
put '%mend mcf_init;';
put '%macro mcf_getfmttype(wrap=NO';
put ',insert_cmplib=DEPRECATED';
put ',lib=WORK';
put ',cat=SASJS';
put ',pkg=UTILS';
put ')/*/STORE SOURCE*/;';
put '%local i var cmpval found;';
put '%if %mcf_init(mcf_getfmttype)=1 %then %return;';
put '%if &wrap=YES %then %do;';
put 'proc fcmp outlib=&lib..&cat..&pkg;';
put '%end;';
put 'function mcf_getfmttype(fmtnm $) $8;';
put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');';
put 'else do;';
put '/* extract NAME */';
put 'length fmt $32;';
put 'fmt=scan(fmtnm,1,''.'');';
put 'do while (';
put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')';
put ');';
put 'if length(fmt)=1 then fmt=''W'';';
put 'else fmt=substr(fmt,1,length(fmt)-1);';
put 'end;';
put '/* apply lookups */';
put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT''';
put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR''';
put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ''';
put ',''NLDATM'') then return(''DATETIME'');';
put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY''';
put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx''';
put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB''';
put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY''';
put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH''';
put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY''';
put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC''';
put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS''';
put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD''';
put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx''';
put ',''YYQS'',''YYQx'',''YYQZ'',''NLDATE'') then return(''DATE'');';
put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ''';
put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ''';
put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');';
put 'else return(''NUM'');';
put 'end;';
put 'endsub;';
put '%if &wrap=YES %then %do;';
put 'quit;';
put '%end;';
put '/* insert the CMPLIB if not already there */';
put '%let cmpval=%sysfunc(getoption(cmplib));';
put '%let found=0;';
put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));';
put '%let var=%scan(&cmpval,&i,%str( %(%)));';
put '%if &var=&lib..&cat %then %let found=1;';
put '%end;';
put '%if &found=0 %then %do;';
put 'options insert=(CMPLIB=(&lib..&cat));';
put '%end;';
put '%mend mcf_getfmttype;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_ds2csv(ds';
put ',dlm=COMMA';
put ',outref=0';
put ',outfile=';
put ',outencoding=0';
put ',headerformat=LABEL';
put ',termstr=CRLF';
put ')/*/STORE SOURCE*/;';
put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WARN)ING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;';
put '%if &outencoding=0 %then %let outencoding=;';
put '%else %let outencoding=encoding=&outencoding;';
put '%if &outref=0 %then %let outloc=&outfile;';
put '%else %let outloc=&outref;';
put '%if &headerformat=SASJS %then %do;';
put '%let delim=",";';
put '%let termstr=CRLF;';
put '%mcf_getfmttype(wrap=YES)';
put '%end;';
put '%else %if &dlm=COMMA %then %let delim=",";';
put '%else %let delim=";";';
put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */';
put '/* first get headers */';
put 'data _null_;';
put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;';
put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;';
put 'call missing(of _all_);';
put 'dsid=open("&ds.","i");';
put 'num=attrn(dsid,"nvars");';
put 'dlm=&delim;';
put 'do i=1 to num;';
put 'varnm=upcase(varname(dsid,i));';
put 'if i=num then dlm='''';';
put '%if &headerformat=NAME %then %do;';
put 'header=cats(varnm,dlm);';
put '%end;';
put '%else %if &headerformat=LABEL %then %do;';
put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);';
put '%end;';
put '%else %if &headerformat=SASJS %then %do;';
put 'vlen=varlen(dsid,i);';
put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');';
put 'else do;';
put 'vfmt=coalescec(varfmt(dsid,i),''0'');';
put 'fmttype=mcf_getfmttype(vfmt);';
put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');';
put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');';
put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');';
put '/**';
put '* there is not much point importing a short length numeric like this,';
put '* eg with best4., as the resulting variable will still be stored as';
put '* length 8. We need a length or format statement to ensure variable';
put '* is creatd with the smaller length...';
put '**/';
put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');';
put 'else header=cats(varnm,'':best.'');';
put 'end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Invalid headerformat value (&headerformat);';
put '%return;';
put '%end;';
put 'put header @;';
put 'end;';
put 'rc=close(dsid);';
put 'run;';
put '%let varlist=%mf_getvarlist(&ds);';
put '%let vcnt=%sysfunc(countw(&varlist));';
put '/**';
put '* The $quote modifier (without a width) will take the length from the variable';
put '* and increase by two. However this will lead to truncation where the value';
put '* contains double quotes (which are doubled up). To get around this, scan the';
put '* data to see the max number of double quotes, so that the appropriate width';
put '* can be applied in the subsequent step.';
put '*/';
put 'data _null_;';
put 'set &ds end=last;';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%local vlen&i;';
put '%if %mf_getvartype(&ds,&var)=C %then %do;';
put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);';
put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);';
put 'retain &dsv1 0;';
put '&dsv2=length(&var)+countc(&var,''"'');';
put 'if &dsv2>&dsv1 then &dsv1=&dsv2;';
put 'if last then call symputx(';
put '"vlen&i"';
put '/* should be no shorter than varlen, and no longer than 32767 */';
put ',cats(''$quote'',min(&dsv1+2,32767),''.'')';
put ',''l''';
put ');';
put '%end;';
put '%end;';
put '%let vat=@;';
put '%let vcom=&delim;';
put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);';
put '/* next, export data */';
put 'data _null_;';
put 'set &ds.;';
put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;';
put 'if _n_=1 then &vmiss='' '';';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%if &i=&vcnt %then %do;';
put '%let vat=;';
put '%let vcom=;';
put '%end;';
put '%if %mf_getvartype(&ds,&var)=N %then %do;';
put '%if &headerformat = SASJS %then %do;';
put '%let vcom=&delim;';
put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));';
put '%if &fmttype=DATE %then %let vfmt=DATE9.;';
put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;';
put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;';
put '%else %do;';
put '%let vfmt=;';
put '%let vcom=;';
put '%end;';
put '%end;';
put '%else %let vcom=;';
put '/* must use period - in order to work in both 9.4 and Viya 3.5 */';
put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;';
put '&vmiss=cats(''.'',&var);';
put 'put &vmiss &vat;';
put 'end;';
put 'else put &var &vfmt &vcom &vat;';
put '%end;';
put '%else %do;';
put '%if &i ne &vcnt %then %let vcom=&delim;';
put 'put &var &&vlen&i &vcom &vat;';
put '%end;';
put '%end;';
put 'run;';
put '%mend mp_ds2csv;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sends a changeset to staging area';
put '@details This is the service that is called when submitting a new edit.';
put ' Service Inputs
';
put ' jsdata
';
put 'This is the staged data table, plus an _____DELETE__THIS__RECORD_____ column';
put ' SASControlTable
';
put '|ACTION:$char4.|MESSAGE:$char1.|LIBDS:$char19.|';
put '|---|---|---|';
put '|LOAD|User-Provided message|LIBREF.DATASET_NAME|';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li dc_assignlib.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_mkdir.sas';
put '@li mf_getuniquefileref.sas';
put '@li mpe_loader.sas';
put '@li mpe_filtermaster.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_cntlout.sas';
put '@li mp_ds2csv.sas';
put '@li mf_getplatform.sas';
put '@li removecolsfromwork.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global approver; %let approver=;';
put '%global libref; %let libref=;';
put '%global dsn; %let dsn=;';
put '%global user; %let user=;';
put '%let user=%mf_getuser();';
put '/* load parameters */';
put 'data _null_;';
put 'set work.sascontroltable;';
put 'call symputx(''action'',action);';
put 'call symputx(''message'',message);';
put 'libds=upcase(libds);';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'is_fmt=1;';
put 'end;';
put 'else call symputx(''libds'',libds);';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* stream back meta info, further jquery calls will return col metadata and';
put 'actual data */';
put '%let libref=%upcase(%scan(&libds,1,.));';
put '%let dsn=%upcase(%scan(&libds,2,.));';
put '%dc_assignlib(WRITE,&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc - unable to assign library &libref)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mpelocapprovals libds)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: mpelocapprovals libds)';
put ')';
put '%put Verify that the upload does not violate Row Level Security checks:;';
put '%mpe_filtermaster(ULOAD,&libds,';
put 'dclib=&mpelib,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc during filtering process)';
put ')';
put '/* prepare inverse query */';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'file &tempref;';
put 'if _n_=1 then put ''where not('';';
put 'input;';
put 'put _infile_;';
put 'if eof then put '')'';';
put 'run;';
put '/* apply the query */';
put 'data work.badrecords;';
put 'set work.jsdata;';
put '%inc &tempref/source2;;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.badrecords)>0)';
put ',mac=&_program';
put ',msg=%str(';
put 'Security Problem - %mf_nobs(work.badrecords) unauthorised records submitted';
put ')';
put ')';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/**';
put '* Create package folder and redirect the log';
put '*/';
put '/* create a dataset key (datetime plus 6 digit random number plus PID) */';
put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr(';
put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);';
put '/* get web url */';
put '%global url;';
put '%let url=localhost/SASStoredProcess;';
put '%let platform=%mf_getplatform();';
put '%put &=platform;';
put 'data _null_;';
put 'length url $128;';
put '%macro stagedata();';
put '%if &platform=SASVIYA %then %do;';
put 'if symexist(''_baseurl'') then do;';
put 'url=symget(''_baseurl'');';
put 'if subpad(url,length(url)-9,9)=''SASStudio''';
put 'then url=substr(url,1,length(url)-11);';
put 'else url="&systcpiphostname/SASJobExecution";';
put 'end;';
put 'else url="&systcpiphostname/SASJobExecution";';
put '%end;';
put '%else %if &platform=SASMETA %then %do;';
put 'rc=METADATA_GETURI("Stored Process Web App",url);';
put '%end;';
put '%mend stagedata;';
put '%stagedata()';
put 'call symputx(''url'',url);';
put 'putlog url=;';
put 'run;';
put '/* Create package folder */';
put '%let dir=&mpelocapprovals/&mperef;';
put '%mf_mkdir(&dir)';
put '/* redirect the log */';
put '%put; %put; %put log is being redirected;';
put '%put to retrieve, visit this url:; %put;%put;';
put '%let url=&url?_program=%substr(&_program';
put ',1,%length(&_program)-9)getlog%str(&)table=&mperef;';
put '%put &url;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to log redirection)';
put ')';
put 'proc printto log="&dir/weblog.txt";run;';
put 'options notes mprint;';
put 'libname approve "&dir";';
put '/* take copy of webin file */';
put 'data _null_;';
put 'if symexist(''_WEBIN_FILEREF1'') then ref=symget(''_WEBIN_FILEREF1'');';
put 'else if symexist(''sasjs_tables'') then ref=''0ref''; /* no fileref created */';
put 'else ref=''indata1'';';
put 'call symputx(''ref'',ref);';
put 'putlog ref=;';
put 'run;';
put '%mp_binarycopy(inref=&ref,outloc="&dir/_WEBIN_FILEREF1.txt",iftrue=&ref ne 0ref)';
put '/* take copy of macvars */';
put 'data _null_;';
put 'file "&dir/macvars.sas";';
put 'set sashelp.vmacro;';
put 'where scope=''GLOBAL'';';
put 'put ''%let '' name ''='' value '';'';';
put 'run;';
put 'data approve.jsdset;';
put 'length _____DELETE__THIS__RECORD_____ $3;';
put 'set jsdata;';
put 'run;';
put '/**';
put '* mf_getvarXXX functions will fail if the target is locked - so take a copy';
put '* and reference that (this will also explicitly throw the lock situation)';
put '*/';
put '%let dscopy=work.dscopy;';
put 'data &dscopy;';
put 'set &libds;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Issue getting lock on &libds)';
put ')';
put '%mp_ds2csv(approve.jsdset';
put ',dlm=COMMA';
put ',outfile="&dir/&orig_libds..csv"';
put ',outencoding="UTF-8"';
put ',headerformat=NAME';
put ',termstr=CRLF';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc when writing the CSV)';
put ')';
put '%mpe_loader(mperef=&mperef';
put ',submitted_reason_txt=%superq(message)';
put ',approver=%quote(%trim(&approver))';
put ',url=%superq(url)';
put ',dc_dttmtfmt=&dc_dttmtfmt';
put ')';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(';
put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)';
put ',mac=&_program..sas';
put ',msg=%str(mf_abort.error=1)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/* send relevant SUCCESS values */';
put 'data sasparams;';
put 'STATUS=''SUCCESS'';';
put 'DSID="&mperef";';
put 'url="&url";';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,sasparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/hooks;
%let service=mpe_column_level_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_COLUMN_LEVEL_SECURITY table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming column_level_security settings to ensure';
put 'each individual filter is valid';
put '**/';
put '/* check scope values and ensure uppercasing */';
put '%let errflag=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'cls_scope=upcase(cls_scope);';
put 'CLS_LIBREF=upcase(CLS_LIBREF);';
put 'cls_table=upcase(CLS_TABLE);';
put 'CLS_VARIABLE_NM=upcase(CLS_VARIABLE_NM);';
put 'if cls_scope not in (''ALL'',''VIEW'',''EDIT'') then do;';
put 'call symputx(''errflag'',1);';
put 'call symputx(''errmsg'',"Invalid scope: "!!cls_scope);';
put 'stop;';
put 'end;';
put 'if cls_hide<1 then cls_hide=0;';
put 'else cls_hide=1;';
put 'if CLS_ACTIVE<1 then CLS_ACTIVE=0;';
put 'else CLS_ACTIVE=1;';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_column_level_security_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_row_level_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_ROW_LEVEL_SECURITY table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming row_level_security settings to ensure';
put 'each individual filter is';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mp_filtercheck.sas';
put ' Related Macros
';
put '@li mpe_loader.sas';
put '**/';
put '/* ignore scope and group for validation */';
put 'proc sql;';
put 'create table work.batches as';
put 'select distinct upcase(rls_libref) as rls_libref,';
put 'upcase(rls_table) as rls_table,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from work.staging_ds';
put 'where rls_active=1';
put 'order by rls_libref, rls_table;';
put '%let cnt=0;';
put 'data _null_;';
put 'set work.batches;';
put 'by rls_libref rls_table;';
put 'putlog (_all_)(=);';
put 'if last.rls_table then do;';
put 'x+1;';
put 'call symputx(cats(''libds'',x),cats(rls_libref,''.'',rls_table));';
put 'call symputx(''cnt'',x);';
put 'end;';
put 'run;';
put '%macro quickloop();';
put '%do i=1 %to &cnt;';
put 'data work.inds&i;';
put 'set work.batches;';
put 'if cats(rls_libref,''.'',rls_table)="&&libds&i";';
put 'keep group_logic subgroup_logic subgroup_id variable_nm operator_nm';
put 'raw_value;';
put 'run;';
put '%dc_assignlib(READ,%scan(&&libds&i,1,.))';
put '%mp_filtercheck(work.inds&i';
put ',targetds=&&libds&i';
put ',outds=work.badrecords';
put ',abort=YES';
put ')';
put '%end;';
put '%mend quickloop;';
put '%quickloop()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_SECURITY table';
put '@details Post edit hooks provide additional backend validation against';
put 'user-sourced data. The incoming dataset is always `work.staging_ds` and this';
put 'file is included from the mpe_loader.sas macro.';
put 'Available (at runtime) macro variables:';
put '@li DC_LIBREF - The DC control library for your site';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put '**/';
put '/* ensure upcase and check access level values*/';
put '%let errval=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'LIBREF=upcase(LIBREF);';
put 'DSN=upcase(DSN);';
put 'ACCESS_LEVEL=upcase(ACCESS_LEVEL);';
put 'if ACCESS_LEVEL not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;';
put 'putlog "ERR" +(-1) "OR: invalid ACCESS_LEVEL - " access_level;';
put 'call symputx(''errval'',1);';
put 'call symputx(''errmsg'',"Invalid ACCESS_LEVEL: "!!access_level);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&errval=1)';
put ',mac=mpe_security_postedit.sas';
put ',msg=%str(&errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_tables_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_TABLES table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks MPE_TABLES to ensure modified / added records are';
put 'valid. If a non-default AUDIT_LIBDS is being used, there is also a check';
put 'to ensure that this table already exists.';
put '**/';
put '%let errmsg=;';
put '%let errflag=0;';
put '/* ensure uppercasing */';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put '/* PK fields should not be upcased if we are trying to delete records */';
put 'if upcase(_____DELETE__THIS__RECORD_____) ne "YES" then do;';
put 'LIBREF=upcase(LIBREF);';
put 'DSN=upcase(DSN);';
put 'end;';
put 'loadtype=upcase(loadtype);';
put 'buskey=upcase(buskey);';
put 'var_txfrom=upcase(var_txfrom);';
put 'var_txto=upcase(var_txto);';
put 'var_busfrom=upcase(var_busfrom);';
put 'var_busto=upcase(var_busto);';
put 'var_processed=upcase(var_processed);';
put 'close_vars=upcase(close_vars);';
put 'audit_libds=upcase(audit_libds);';
put 'rk_underlying=upcase(rk_underlying);';
put '/* check for valid loadtype */';
put 'if LOADTYPE not in (''UPDATE'',''TXTEMPORAL'',''FORMAT_CAT'',''BITEMPORAL'',''REPLACE'')';
put 'then do;';
put 'call symputx(''errmsg'',"Invalid LOADTYPE: "!!LOADTYPE);';
put 'call symputx(''errflag'',1);';
put 'end;';
put '/* force correct BUSKEY and DSN when loading format catalogs */';
put 'if LOADTYPE=''FORMAT_CAT'' then do;';
put 'BUSKEY=''TYPE FMTNAME FMTROW'';';
put 'DSN=scan(dsn,1,''-'')!!''-FC'';';
put 'end;';
put '/* convert tabs into spaces */';
put 'buskey=translate(buskey," ","09"x);';
put 'rk_underlying=translate(rk_underlying," ","09"x);';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_tables_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '/* get distinct list of audit libs */';
put 'proc sql;';
put 'create table work.liblist as';
put 'select distinct audit_libds';
put 'from work.staging_ds';
put 'where audit_libds not in ('''',''0'', "&dc_libref..MPE_AUDIT")';
put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";';
put '/* assign the libs */';
put 'data _null_;';
put 'set work.liblist;';
put 'call symputx(cats(''lib'',_n_),audit_libds);';
put 'libref=scan(audit_libds,1,''.'');';
put 'call execute(''%dc_assignlib(WRITE,''!!libref!!'')'');';
put 'run;';
put '/* check the audit tables exist */';
put 'data _null_;';
put 'set work.liblist;';
put 'if exist(audit_libds,"DATA")=0 then do;';
put 'call symputx(''errmsg'',';
put '"Audit Table "!!audit_libds!!" does not exist, or could not be assigned."';
put ');';
put 'call symputx(''errflag'',1);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_tables_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_validations_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_VALIDATIONS table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming mpe_validations settings to ensure';
put 'there are no columns that have both HARDSELECT_HOOK and SOFTSELECT_HOOK.';
put ' SAS Macros
';
put '@li mf_nobs.sas';
put ' Related Macros
';
put '@li mpe_loader.sas';
put '**/';
put '/** check to avoid a colum having both HARDSELECT_HOOK and SOFTSELECT_HOOK */';
put '/* need to merge with base table in the case of a single row being added */';
put '%global src_list1 src_list2;';
put '%let src_list1='''';';
put 'proc sql noprint;';
put 'create table work.check1 as';
put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source';
put ',rule_type';
put 'from work.staging_ds';
put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')';
put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";';
put 'select distinct cats(source) into: src_list1 separated by '',''';
put 'from work.check1;';
put 'create table work.check2 as';
put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source';
put ',rule_type';
put 'from &DC_LIBREF..MPE_VALIDATIONS';
put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and catx(''.'',base_lib,base_ds,base_col) in (&src_list1);';
put 'create table work.check3 as';
put 'select * from work.check1';
put 'union';
put 'select * from work.check2;';
put 'create table work.validation_checker as';
put 'select source';
put ',count(*) as cnt';
put 'from work.check3';
put 'group by 1';
put 'having cnt>1;';
put 'select distinct source into: src_list2 from work.validation_checker;';
put 'data _null_;';
put 'set work.validation_checker;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.validation_checker)>0)';
put ',mac=mpe_validations_postedit';
put ',msg=%str(The following vars have duplicate HOOKS: &src_list2)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_xlmap_info_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_XLMAP_INFO table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put ' SAS Macros
';
put '@li mf_existds.sas';
put '@li mf_getvarlist.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li dc_assignlib.sas';
put '@li mp_validatecol.sas';
put '**/';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put '/* apply the first excel map to all cells */';
put 'length tgtds $41;';
put 'retain tgtds;';
put 'drop tgtds is_libds;';
put 'if _n_=1 then do;';
put 'if missing(XLMAP_TARGETLIBDS) then tgtds="&dc_libref..MPE_XLMAP_DATA";';
put 'else tgtds=upcase(XLMAP_TARGETLIBDS);';
put '%mp_validatecol(XLMAP_TARGETLIBDS,LIBDS,is_libds)';
put 'call symputx(''tgtds'',tgtds);';
put 'call symputx(''is_libds'',is_libds);';
put 'end;';
put 'XLMAP_TARGETLIBDS=tgtds;';
put 'run;';
put '%mp_abort(iftrue=(&is_libds ne 1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=Invalid target dataset (&tgtds)';
put ')';
put '/**';
put '* make sure that the supplied target dataset exists and';
put '* has the necessary columns';
put '*/';
put '%dc_assignlib(READ,%scan(&tgtds,1,.))';
put '%mp_abort(iftrue=(%mf_existds(libds=&tgtds) ne 1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=Target dataset (&tgtds) could not be opened';
put ')';
put '%let tgtvars=%upcase(%mf_getvarlist(&tgtds));';
put '%let srcvars=%upcase(%mf_getvarlist(&dc_libref..MPE_XLMAP_DATA));';
put '%let badvars1=%mf_wordsInStr1ButNotStr2(Str1=&srcvars,Str2=&tgtvars);';
put '%let badvars2=%mf_wordsInStr1ButNotStr2(Str1=&tgtvars,Str2=&srcvars);';
put '%mp_abort(iftrue=(%length(&badvars1.X)>1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=%str(Target dataset (&tgtds) has missing vars: &badvars1)';
put ')';
put '%mp_abort(iftrue=(%length(&badvars2.X)>1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=%str(Target dataset (&tgtds) has unrecognised vars: &badvars2)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_xlmap_rules_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_XLMAP_RULES table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put '**/';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put '/* ensure uppercasing */';
put 'XLMAP_ID=upcase(XLMAP_ID);';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sample_xlmap_data_postapprove;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sample XLMAP Data hook program (sample_xlmap_data_postapprove)';
put '@details This hook script should NOT be modified in place, as the changes';
put 'would be lost in your next Data Controller deployment.';
put 'Instead, create a copy of this hook script and place it OUTSIDE the';
put 'Data Controller metadata folder.';
put 'Available macro variables:';
put '@li LOAD_REF - The Load Reference (unique upload id)';
put '@li ORIG_LIBDS - The target library.dataset that was just loaded';
put '**/';
put 'data _null_;';
put 'set work.staging_ds;';
put 'putlog ''load ref is in the staged data: '' load_ref;';
put 'stop;';
put 'run;';
put '%put the unique identifier (LOAD_REF) is also a macro variable: &LOAD_REF;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sample_xlmap_data_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sample XLMAP Data hook program';
put '@details This hook script should NOT be modified in place, as the changes';
put 'would be lost in your next Data Controller deployment.';
put 'Instead, create a copy of this hook script and place it OUTSIDE the';
put 'Data Controller metadata folder.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The target dataset being loaded';
put '**/';
put '%let abort=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'length errmsg $1000;';
put 'drop err:;';
put '/* KM1 validations */';
put 'if XLMAP_ID=''BASEL-KM1'' then do;';
put 'if XLMAP_RANGE_ID=''KM1:a'' & input(value_txt,8.)<100 then do;';
put 'errmsg=''Should be greater than 100'';';
put 'err=1;';
put 'end;';
put 'end;';
put '/* CR2 Validations */';
put 'if XLMAP_ID=''BASEL-CR2'' then do;';
put 'if XLMAP_RANGE_ID=''CR2-sec1'' & row_no=3 & input(value_txt,8.)>0 then do;';
put 'errmsg=''Should be negative'';';
put 'err=1;';
put 'end;';
put 'end;';
put '/* publish error message */';
put 'if err=1 then do;';
put 'errmsg=catx('' '',xlmap_range_id,'':'',value_txt,''->'',errmsg);';
put 'call symputx(''errmsg'',errmsg);';
put 'call symputx(''abort'',1);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&abort ne 0)';
put ',mac=xlmap_data_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/public;
%let service=getchangeinfo;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mpe_checkrestore(load_ref,';
put 'outresult=ALLOW_RESTORE,';
put 'outreason=REASON';
put ');';
put '%global &outresult &outreason;';
put '%let &outresult=NO;';
put '%let &outreason=NOTFOUND;';
put '/* check if there is actually a version to restore */';
put '%local chk;';
put '%let chk=0;';
put 'proc sql noprint;';
put 'select count(*) into: chk from &dc_libref..mpe_audit';
put 'where load_ref="&load_ref";';
put '%if &chk=0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=No entry for &load_ref in MPE_AUDIT;';
put '%return;';
put '%end;';
put '/* grab user groups */';
put '%local user;';
put '%let user=%mf_getuser();';
put '%mpe_getgroups(user=&user,outds=work.groups)';
put '/* check if user is admin */';
put '%local is_admin;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from work.groups';
put 'where groupname="&dc_admin_group";';
put '%if &is_admin>0 %then %do;';
put '%let allow_restore=YES;';
put '%let reason=IS ADMIN;';
put '%return;';
put '%end;';
put '/* check if user has basic access */';
put '%local libds;';
put 'proc sql noprint;';
put 'select cats(base_lib,''.'',base_ds) into: libds';
put 'from &mpelib..mpe_submit';
put 'where TABLE_ID="&load_ref";';
put '%mpe_accesscheck(&libds,outds=work.access_check';
put ',user=&user';
put ',access_level=EDIT';
put ')';
put '%if %mf_nobs(access_check)=0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=No access in MPE_TABLES;';
put '%return;';
put '%end;';
put '/* check if user has column level security rules */';
put 'proc sql;';
put 'create table work.cls_rules as';
put 'select *';
put 'from &mpelib..mpe_column_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("EDIT",''ALL'')';
put 'and CLS_ACTIVE=1';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)';
put 'and CLS_LIBREF="%upcase(&base_lib)"';
put 'and CLS_TABLE="%upcase(&base_ds)";';
put '%if %mf_nobs(work.cls_rules)>0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;';
put 'data _null_;';
put 'set work.cls_rules;';
put 'putlog (_all_)(=);';
put 'if _n_>5 then stop;';
put 'run;';
put '%return;';
put '%end;';
put '/* check if user has row level security rules */';
put 'proc sql;';
put 'create table work.rls_rules as';
put 'select *';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("EDIT",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="&base_lib"';
put 'and rls_table="&base_ds"';
put 'and rls_active=1;';
put '%if %mf_nobs(work.rls_rules)>0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=User has restrictions in MPE_ROW_LEVEL_SECURITY;';
put 'data _null_;';
put 'set work.rls_rules;';
put 'putlog (_all_)(=);';
put 'if _n_>5 then stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %do;';
put '%let allow_restore=YES;';
put '%let reason=CHECKS PASSED;';
put '%end;';
put '%mend mpe_checkrestore;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getchangeinfo.sas';
put '@brief Returns the details for an approval diff';
put '@details';
put ' SAS Macros
';
put '@li mf_getengine.sas';
put '@li mp_abort.sas';
put '@li mpe_checkrestore.sas';
put ' Service Inputs
';
put ' sascontroltable
';
put '@li table table ID or LOAD_REF used to uniquely identify a staged change';
put ' Service Outputs
';
put ' work.jsparams
';
put 'Mainly sourced from MPE_SUBMIT plus some extra cols:';
put '@li LIB_ENGINE Library engine';
put '@li allow_restore YES if a user can restore, else NO';
put '@li REASON reason why a restore is / is no possible';
put ' Data Inputs
';
put '@li MPE_AUDIT';
put '@li MPE_COLUMN_LEVEL_SECURITY';
put '@li MPE_ROW_LEVEL_SECURITY';
put '@li MPE_SUBMIT';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let table=;';
put 'data _null_;';
put 'set SASControlTable;';
put 'call symputx(''table'',table);';
put 'run;';
put 'data APPROVE1;';
put 'set &mpelib..mpe_submit';
put '(rename=(SUBMITTED_ON_DTTM=submitted_on REVIEWED_ON_DTTM=REVIEWED_ON));';
put 'where TABLE_ID="&TABLE";';
put 'TABLE_NM=cats(base_lib,''.'',base_ds);';
put 'BASE_TABLE=table_nm;';
put 'call symputx(''base_lib'',base_lib);';
put 'REVIEWED_ON_DTTM=put(reviewed_on,datetime19.);';
put 'SUBMITTED_ON_DTTM=put(submitted_on,datetime19.);';
put 'run;';
put '/**';
put '* Check if user has basic access permission to RESTORE the table';
put '*/';
put '%put checking access;';
put '%global allow_restore reason;';
put '%mpe_checkrestore(&table,outresult=ALLOW_RESTORE,outreason=REASON)';
put 'data work.jsParams;';
put 'set approve1;';
put 'LIB_ENGINE="%mf_getEngine(&base_lib)";';
put 'allow_restore="&allow_restore";';
put 'REASON="&reason";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,jsParams,missing=STRING)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getcols;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getcols.sas';
put '@brief Retrieves column info to enable population of dropdowns';
put '@details';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getvalue.sas';
put '@li mp_abort.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let ds=%mf_getvalue(work.iwant,libds);';
put '%dc_assignlib(READ,%scan(&ds,1,.))';
put 'proc contents noprint data=&ds';
put 'out=droplist1 (keep=name type length label varnum format:);';
put 'run;';
put 'data cols(keep=name type length varnum format label);';
put 'set droplist1(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(format2,''.'');';
put 'else format=cats(format2,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(format2,''.'');';
put 'else if formatd=0 then format=cats(format2,formatl,''.'');';
put 'else format=cats(format2,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,cols)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getcolvals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Retrieves column info to enable population of dropdowns';
put '@details An optional filterquery may be provided, if so then it is validated';
put 'and then used to filter the subsequent results.';
put ' Service Inputs
';
put ' IWANT
';
put 'The STARTROW and ROWS variables are used to fetch additional values beyond';
put 'the initial default (4000).';
put '|libds:$19.|col:$9.|STARTROW:8.|ROWS:8.|';
put '|---|---|---|---|';
put '|DC258467.MPE_X_TEST|SOME_TIME|4001|1000';
put ' FILTERQUERY
';
put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|';
put '|---|---|---|---|---|---|';
put '|AND|AND|1|SOME_BESTNUM|>|1|';
put '|AND|AND|1|SOME_TIME|=|77333|';
put ' Service Outputs
';
put ' VALS
';
put 'The type of this column actually depends on the underlying column type, so it can change';
put '|FORMATTED|UNFORMATTED|';
put '|---|---|';
put '|$44.00|44|';
put ' META
';
put '|COLUMN:$32.|SASFORMAT:$32.|STARTROW:8.|ROWS:8.|';
put '|---|---|---|---|';
put '|COL_NAME|DOLLAR8.2|4001|1000';
put ' SAS Macros
';
put '@li mf_existds.sas';
put '@li mf_getvalue.sas';
put '@li mf_verifymacvars.sas';
put '@li dc_assignlib.sas';
put '@li mf_getvarformat.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_filtercheck.sas';
put '@li mp_filtergenerate.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd.';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* input table may or may not exist */';
put 'data work.initvars;';
put 'length GROUP_LOGIC $3 SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $32767;';
put 'call missing(of _all_);';
put 'stop;';
put 'data work.filterquery;';
put 'set %sysfunc(ifc(';
put '%mf_existds(work.filterquery)=1';
put ',work.filterquery';
put ',work.initvars';
put '));';
put 'run;';
put '/* print data for debugging */';
put 'data _null_;';
put 'set work.iwant;';
put 'put (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set work.filterquery;';
put 'put (_all_)(=);';
put 'run;';
put '%let libds=%mf_getvalue(work.iwant,libds);';
put '%let col2=%mf_getvalue(work.iwant,col);';
put '%let is_fmt=0;';
put '%let startrow=1;';
put '%let rows=4000;';
put '%put &=libds;';
put '%put &=col2;';
put '%mp_abort(iftrue= (%mf_verifymacvars(libds col2)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Missing inputs from iwant. Libds=&libds col=&col2 )';
put ')';
put '%dc_assignlib(WRITE,%scan(&libds,1,.))';
put 'data _null_;';
put 'call missing(startrow,rows);';
put 'set work.iwant;';
put '/* check if the request is for a format catalog */';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''libds'',''work.fmtextract'');';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''startrow'',coalesce(startrow,&startrow));';
put 'call symputx(''rows'',coalesce(rows,&rows));';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/**';
put '* Validate the filter query';
put '*/';
put '%mp_filtercheck(work.filterquery,targetds=&libds,abort=YES)';
put '/**';
put '* Prepare the query';
put '*/';
put '%mp_filtergenerate(work.filterquery,outref=myfilter)';
put '/* cannot %inc in a sql where clause, only data step, so - use a view */';
put 'data work.vw_vals/view=work.vw_vals;';
put 'set &libds;';
put 'where %inc myfilter;;';
put 'run;';
put 'proc sql;';
put 'create view work.vw_vals_sorted as';
put 'select distinct';
put 'put(&col2,%mf_getVarFormat(&libds,&col2,force=1)) as formatted,';
put '&col2 as unformatted';
put 'from work.vw_vals;';
put '/* restrict num of output values */';
put 'data work.vals;';
put 'set work.vw_vals_sorted;';
put 'if _n_ ge &startrow;';
put 'x+1;';
put 'if x>&rows then stop;';
put 'drop x;';
put 'run;';
put 'data vals;';
put '/* ensure empty value if table is empty, for dropdowns */';
put 'if nobs=0 then output;';
put 'set vals nobs=nobs;';
put 'format unformatted ;';
put 'output;';
put 'run;';
put 'proc sql noprint;';
put 'select count(*) into: nobs from work.vw_vals_sorted;';
put 'data meta;';
put 'column="&col2";';
put 'sasformat="%mf_getVarFormat(&libds,&col2)";';
put 'startrow=&startrow;';
put 'rows=&rows;';
put 'nobs=&nobs;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,vals,missing=STRING,showmeta=YES)';
put '%webout(OBJ,meta)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getddl;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_existfileref(fref';
put ')/*/STORE SOURCE*/;';
put '%local rc;';
put '%let rc=%sysfunc(fileref(&fref));';
put '%if &rc=0 %then %do;';
put '1';
put '%end;';
put '%else %if &rc<0 %then %do;';
put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;';
put '1';
put '%end;';
put '%else %do;';
put '0';
put '%end;';
put '%mend mf_existfileref;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema=';
put ',applydttm=NO';
put ')/*/STORE SOURCE*/;';
put '/* check fileref is assigned */';
put '%if %mf_existfileref(&fref)=0 %then %do;';
put 'filename &fref temp ;';
put '%end;';
put '%if %length(&libref)=0 %then %let libref=WORK;';
put '%let flavour=%upcase(&flavour);';
put 'proc sql noprint;';
put 'create table _data_ as';
put 'select * from dictionary.tables';
put 'where upcase(libname)="%upcase(&libref)"';
put 'and memtype=''DATA'' /* views not currently supported */';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local tabinfo; %let tabinfo=&syslast;';
put 'create table _data_ as';
put 'select * from dictionary.columns';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local colinfo; %let colinfo=&syslast;';
put '%local dsnlist;';
put 'select distinct upcase(memname) into: dsnlist';
put 'separated by '' ''';
put 'from &syslast';
put ';';
put 'create table _data_ as';
put 'select * from dictionary.indexes';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put 'order by idxusage, indxname, indxpos';
put ';';
put '%local idxinfo; %let idxinfo=&syslast;';
put '/* Extract all Primary Key and Unique data constraints */';
put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)';
put '%local colconst; %let colconst=&syslast;';
put '%macro addConst();';
put '%global constraints_used;';
put 'data _null_;';
put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;';
put 'set &colconst(';
put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))';
put ') end=last;';
put 'file &fref mod;';
put 'by constraint_type constraint_name;';
put 'retain constraints_used;';
put 'constraint_name_orig=constraint_name;';
put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';';
put 'else ctype=strip(constraint_type);';
put '%if &flavour=TSQL %then %do;';
put 'column_name=catt(''['',column_name,'']'');';
put 'constraint_name=catt(''['',constraint_name,'']'');';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'column_name=catt(''"'',column_name,''"'');';
put 'constraint_name=catt(''"'',constraint_name,''"'');';
put '%end;';
put 'if first.constraint_name then do;';
put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);';
put 'put " ,CONSTRAINT " constraint_name ctype "(" ;';
put 'put '' '' column_name;';
put 'end;';
put 'else put '' ,'' column_name;';
put 'if last.constraint_name then do;';
put 'put " )";';
put 'call symput(''constraints_used'',strip(constraints_used));';
put 'end;';
put 'run;';
put '%put &=constraints_used;';
put '%mend addConst;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";';
put 'run;';
put '%local x curds;';
put '%if &flavour=SAS %then %do;';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";';
put 'put "proc sql;";';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'length lab $1024 typ $20;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table &libref..&curds(";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view &libref..&curds(";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'if length(format)>1 then fmt=" format="!!cats(format);';
put 'if length(label)>1 then';
put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");';
put 'if notnull=''yes'' then notnul='' not null'';';
put 'if type=''char'' then typ=cats(''char('',length,'')'');';
put 'else if length ne 8 then typ=''num length=''!!cats(length);';
put 'else typ=''num'';';
put 'put name typ fmt notnul lab;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '/* ds=cats(libname,''.'',memname); */';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;';
put 'put '' '' name ;';
put 'end;';
put 'else put '' ,'' name ;';
put '*else put '' ,'' name ;';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '/*';
put 'ods output IntegrityConstraints=ic;';
put 'proc contents data=testali out2=info;';
put 'run;';
put '*/';
put '%end;';
put '%end;';
put '%else %if &flavour=TSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''SQLSVR'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* TSQL Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table [&schema].[&curds](";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view [&schema].[&curds](";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';';
put '%end;';
put 'else if type=''num'' then fmt=''[decimal](18,2)'';';
put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';';
put 'else fmt=cats(''[varchar](max)'');';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put 'put "[" name +(-1) "]" fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '*ds=cats(libname,''.'',memname);';
put 'if first.indxname then do;';
put '/* add nonclustered in case of multiple unique indexes */';
put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';';
put 'put '' ['' name +(-1) '']'';';
put 'end;';
put 'else put '' ,['' name +(-1) '']'';';
put 'if last.indxname then do;';
put 'put '' )'';';
put 'end;';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'put '')'';';
put 'put ''GO'';';
put 'run;';
put '/* add extended properties for labels */';
put 'data _null_;';
put 'file &fref mod;';
put 'length nm $64 lab $1024;';
put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;';
put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");';
put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");';
put 'put '' '';';
put 'put "EXEC sys.sp_addextendedproperty ";';
put 'put " @name=N''MS_Description'',@value=" lab ;';
put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";';
put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";';
put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;';
put 'if last then put ''GO'';';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''POSTGRES'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put 'data _null_;';
put 'file &fref mod;';
put 'put "CREATE SCHEMA &schema;";';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put '%local curdsvarcount;';
put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);';
put '%if &curdsvarcount>1600 %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &libref..&curds contains &curdsvarcount vars */";';
put 'put "/* Postgres cannot create tables with over 1600 vars */";';
put 'put "/* No DDL will be generated for this table";';
put 'run;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* Postgres Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'length fmt $32;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "CREATE TABLE &schema..&curds (";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "CREATE VIEW &schema..&curds (";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';';
put '%end;';
put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';';
put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put '/* quote column names in case they represent reserved words */';
put 'name2=quote(trim(name));';
put 'put name2 fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";';
put 'put '' "'' name +(-1) ''"'' ;';
put 'end;';
put 'else put '' ,"'' name +(-1) ''"'';';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%if %upcase(&showlog)=YES %then %do;';
put 'options ps=max;';
put 'data _null_;';
put 'infile &fref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mend mp_getddl;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Download DDL for a table or entire library in a particular flavour.';
put '@details';
put ' SAS Macros
';
put '@li mddl_sas_cntlout.sas';
put '@li dc_assignlib.sas';
put '@li mf_existds.sas';
put '@li mp_abort.sas';
put '@li mp_getddl.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global libref ds flavour;';
put '%let flavour=%sysfunc(coalescec(&flavour,SAS));';
put '%mpeinit()';
put '%dc_assignlib(READ,&libref)';
put 'data _null_;';
put '/* check if the request is for a format catalog */';
put 'ds=symget(''ds'');';
put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;';
put 'ds=scan(ds,1,''-'');';
put 'libds=cats(symget(''libref''),''.'',ds);';
put 'putlog "Format Catalog Captured";';
put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');';
put 'call symputx(''libref'',''work'');';
put 'call symputx(''ds'',''fmtextract'');';
put 'end;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=("exist&ds" ne "exist" and %mf_existds(libds=&libref..&ds)<1)';
put ',mac=&_program';
put ',msg=%str(Dataset &libref..&ds was not found)';
put ')';
put '%let tmploc=%sysfunc(pathname(work))/temp.txt;';
put 'filename tmp "&tmploc";';
put '%mp_getddl(&libref,&ds,flavour=&flavour, fref=tmp, applydttm=YES)';
put '%mp_streamfile(contenttype=TEXT';
put ',inloc=%str(&tmploc)';
put ',outname=&libref._&ds..ddl';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getgroups;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroups(access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroups';
put ');';
put '%local oauth_bearer base_uri fname1 libref1;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '/* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getgroups;';
put '%macro dc_getgroups(outds=mm_getgroups);';
put '%mv_getgroups(outds=&outds)';
put 'proc sort';
put 'data=&outds(rename=(id=groupuri name=groupname description=groupdesc))';
put 'out=&outds (keep=groupuri groupname groupdesc);';
put 'by groupname;';
put 'run;';
put '%mend dc_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getgroups.sas';
put '@brief List all SAS Groups';
put '@details Gets a list of all SAS Groups. Runs without mpeinit() so that it';
put 'can be available to the sasjs/server configurator';
put ' SAS Macros
';
put '@li dc_getgroups.sas';
put ' Data Outputs
';
put ' groups
';
put '|NAME:$32.|DESCRIPTION:$64.|GROUPID:best.|';
put '|---|---|---|';
put '|`SomeGroup `|`A group `|`1`|';
put '|`Another Group`|`this is a different group`|`2`|';
put '|`admin`|`Administrators `|`3`|';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%dc_getgroups(outds=groups)';
put '%webout(OPEN)';
put '%webout(OBJ,groups)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getrawdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_ds2cards(base_ds, tgt_ds=';
put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"';
put ',maxobs=max';
put ',random_sample=NO';
put ',showlog=YES';
put ',outencoding=';
put ',append=NO';
put ')/*/STORE SOURCE*/;';
put '%local i setds nvars;';
put '%if not %sysfunc(exist(&base_ds)) %then %do;';
put '%put %str(WARN)ING: &base_ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;';
put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;';
put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);';
put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";';
put '%if ("&append" = "" or "&append" = "NO") %then %let append=;';
put '%else %let append=mod;';
put '/* get varcount */';
put '%let nvars=0;';
put 'proc sql noprint;';
put 'select count(*) into: nvars from dictionary.columns';
put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";';
put '%if &nvars=0 %then %do;';
put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;';
put '%return;';
put '%end;';
put '/* get indexes */';
put 'proc sort';
put 'data=sashelp.vindex(';
put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")';
put ')';
put 'out=_data_;';
put 'by indxname indxpos;';
put 'run;';
put '%local indexes;';
put 'data _null_;';
put 'set &syslast end=last;';
put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');';
put 'by indxname indxpos;';
put 'length vars $32767 nom uni $8;';
put 'retain vars;';
put 'if first.indxname then do;';
put 'idxcnt+1;';
put 'nom='''';';
put 'uni='''';';
put 'vars=name;';
put 'end;';
put 'else vars=catx('' '',vars,name);';
put 'if last.indxname then do;';
put 'if nomiss=''yes'' then nom=''/nomiss'';';
put 'if unique=''yes'' then uni=''/unique'';';
put 'call symputx(''indexes''';
put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)';
put ',''l'');';
put 'end;';
put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');';
put 'run;';
put 'data;run;';
put '%let setds=&syslast;';
put 'proc sql';
put '%if %datatyp(&maxobs)=NUMERIC %then %do;';
put 'outobs=&maxobs;';
put '%end;';
put ';';
put 'create table &setds as select * from &base_ds';
put '%if &random_sample=YES %then %do;';
put 'order by ranuni(42)';
put '%end;';
put ';';
put 'reset outobs=max;';
put 'create table datalines1 as';
put 'select name,type,length,varnum,format,label from dictionary.columns';
put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"';
put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";';
put '/**';
put 'Due to long decimals cannot use best. format';
put 'So - use bestd. format and then use character functions to strip trailing';
put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets';
put 'note2err when there are missings.';
put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0';
put ',put(VARIABLE,best32.)';
put ',substrn(put(VARIABLE,bestd32.),1';
put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));';
put '**/';
put 'data datalines_2;';
put 'format dataline $32000.;';
put 'set datalines1 (where=(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));';
put 'if type=''num'' then dataline=';
put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0';
put ',put('',name,'',best32.-l)';
put ',substrn(put('',name,'',bestd32.-l),1';
put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');';
put '/**';
put '* binary data must be converted, to store in text format. It is identified';
put '* by the presence of the $HEX keyword in the format.';
put '*/';
put 'else if upcase(format)=:''$HEX'' then';
put 'dataline=cats(''put(trim('',name,''),'',format,'')'');';
put '/**';
put '* There is no easy way to store line breaks in a cards file.';
put '* To discuss this, use: https://github.com/sasjs/core/issues/80';
put '* Removing all nonprintables with kw (keep writeable)';
put '*/';
put 'else dataline=cats(''compress('',name,'', ,"kw")'');';
put 'run;';
put 'proc sql noprint;';
put 'select dataline into: datalines separated by '','' from datalines_2;';
put '%local';
put 'process_dttm_flg';
put 'valid_from_dttm_flg';
put 'valid_to_dttm_flg';
put ';';
put '%let process_dttm_flg = N;';
put '%let valid_from_dttm_flg = N;';
put '%let valid_to_dttm_flg = N;';
put 'data _null_;';
put 'set datalines1 ;';
put '/* build attrib statement */';
put 'if type=''char'' then type2=''$'';';
put 'if strip(format) ne '''' then format2=cats(''format='',format);';
put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));';
put 'str1=catx('' '',(put(name,$33.)||''length='')';
put ',put(cats(type2,length),$7.)||format2,label2);';
put '/* Build input statement */';
put 'if upcase(format)=:''$HEX'' then type3='':''!!format;';
put 'else if type=''char'' then type3='':$char.'';';
put 'str2=put(name,$33.)||type3;';
put 'if(upcase(name) = "PROCESSED_DTTM") then';
put 'call symputx("process_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_FROM_DTTM") then';
put 'call symputx("valid_from_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_TO_DTTM") then';
put 'call symputx("valid_to_dttm_flg", "Y", "L");';
put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");';
put 'call symputx(cats("input_stmt_", put(_N_, 8.))';
put ', ifc(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");';
put 'run;';
put 'data _null_;';
put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;';
put 'length __attrib $32767;';
put 'if _n_=1 then do;';
put 'put ''/**'';';
put 'put '' @file'';';
put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";';
put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";';
put 'put " Source: https://github.com/sasjs/core";';
put 'put '' @cond '';';
put 'put ''**/'';';
put 'put "data &tgt_ds &indexes;";';
put 'put "attrib ";';
put '%do i = 1 %to &nvars;';
put '__attrib=symget("attrib_stmt_&i");';
put 'put __attrib;';
put '%end;';
put 'put ";";';
put '%if &process_dttm_flg. eq Y %then %do;';
put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';';
put '%end;';
put '%if &valid_from_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_FROM_DTTM &low_date;'';';
put '%end;';
put '%if &valid_to_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_TO_DTTM &high_date;'';';
put '%end;';
put 'if __nobs=0 then do;';
put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';';
put 'put ''stop;'';';
put 'put ''run;'';';
put 'end;';
put 'else do;';
put 'put "infile cards dsd;";';
put 'put "input ";';
put '%do i = 1 %to &nvars.;';
put '%if(%length(&&input_stmt_&i..)) %then';
put 'put " &&input_stmt_&i..";';
put ';';
put '%end;';
put 'put ";";';
put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';';
put 'put "datalines4;";';
put 'end;';
put 'end;';
put 'set &setds end=__lastobs nobs=__nobs;';
put '/* remove all formats for write purposes - some have long underlying decimals */';
put 'format _numeric_ best30.29;';
put 'length __dataline $32767;';
put '__dataline=catq(''cqtmb'',&datalines);';
put 'put __dataline;';
put 'if __lastobs then do;';
put 'put '';;;;'';';
put 'put ''run;'';';
put 'put ''/** @endcond **/'';';
put 'stop;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &setds;';
put 'quit;';
put '%if &showlog=YES %then %do;';
put 'data _null_;';
put 'infile &cards_file lrecl=32767;';
put 'input;';
put 'put _infile_;';
put 'run;';
put '%end;';
put '%put NOTE: CARDS FILE SAVED IN:;';
put '%put NOTE-;%put NOTE-;';
put '%put NOTE- %sysfunc(dequote(&cards_file.));';
put '%put NOTE-;%put NOTE-;';
put '%mend mp_ds2cards;';
put '/** @endcond **/';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Downloads data in a variety of formats';
put '@details To enable direct download, this service runs in a dedicated stream';
put 'as a GET request using URL parameters as inputs.';
put 'The inputs are:';
put '@li table - the libds of the table to be downloaded';
put '@li type - either SAS, CSV, EXCEL, MARKDOWN, WEBCSV or WEBTAB';
put '@li filter - the filter RK if used';
put ' SAS Macros
';
put '@li mf_verifymacvars.sas';
put '@li mf_getuser.sas';
put '@li mf_existfeature.sas';
put '@li dc_assignlib.sas';
put '@li mp_ds2cards.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_cntlout.sas';
put '@li mp_streamfile.sas';
put '@li mpe_filtermaster.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global table type filter ds format is_fmt txfrom txto;';
put '%mpeinit()';
put '%let user=%mf_getuser();';
put '%let is_fmt=0;';
put '%mp_abort(iftrue= (%mf_verifymacvars(type table)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Invalid inputs: type table)';
put ')';
put '%let libds=%upcase(&table); /* actual source */';
put '%let table=%upcase(&table); /* used as label for fmt catalogs */';
put '%let lib=%scan(&table,1,.);';
put '%let ds=%scan(&table,2,.);';
put '%dc_assignlib(READ,&lib)';
put 'data _null_;';
put 'set &mpelib..MPE_TABLES;';
put 'where upcase(libref)="&lib" and upcase(dsn)="&ds";';
put '/* if a TXTEMPORAL table then filter as such */';
put 'call symputx(''txfrom'',var_txfrom);';
put 'call symputx(''txto'',var_txto);';
put 'ds=symget(''ds'');';
put 'is_fmt=0;';
put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;';
put 'ds=scan(ds,1,''-'');';
put 'table=cats("&lib..",ds);';
put 'putlog "Format Catalog Captured";';
put 'is_fmt=1;';
put 'call symputx(''libds'',''work.fmtextract'');';
put 'call symputx(''table'',table);';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&table';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%put preparing query;';
put '%mpe_filtermaster(DLOAD,&libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%put printing generated filterquery:;';
put 'data _null_;';
put 'infile filtref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put 'options obs=200000;/* stop limit */';
put 'data staged(drop=&txfrom &txto);';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put 'options obs=max;';
put 'options validvarname=upcase;';
put '%macro mpestp_getrawdata();';
put '%local outfile;';
put '%if &type=SAS %then %do;';
put '%let outfile=%sysfunc(pathname(work))/&table..sas;';
put '%mp_ds2cards(base_ds=staged';
put ', tgt_ds=&table';
put ', cards_file= "&outfile"';
put ', maxobs=100000)';
put '%let ext=sas;';
put '%let mimetype=text;';
put '%end;';
put '%else %if &type=CSV or (&type=EXCEL and %mf_existfeature(EXPORTXLS) ne 1)';
put '/* cannot proc export excel if PC Files is not licensed */';
put '%then %do;';
put '%let outfile=%sysfunc(pathname(work))/&table..csv;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= "&outfile"';
put 'DBMS=csv REPLACE;';
put 'RUN;';
put '%let ext=csv;';
put '%let mimetype=csv;';
put '%end;';
put '%else %if &type=EXCEL %then %do;';
put '%let ext=xlsx;';
put '%let outfile=%sysfunc(pathname(work))/&table..&ext;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= "&outfile"';
put 'DBMS=xlsx ;';
put 'RUN;';
put '%let mimetype=XLSX;';
put '%end;';
put '%else %if &type=MARKDOWN %then %do;';
put '%let ext=md;';
put '%let outfile=%sysfunc(pathname(work))/&table..&ext;';
put 'filename mdref "&outfile" lrecl=32767;';
put '%mp_ds2md(staged,outref=mdref,showlog=NO)';
put '%let mimetype=MARKDOWN;';
put '%end;';
put '%else %if &type=WEBCSV %then %do;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= _webout';
put 'DBMS=csv REPLACE;';
put 'RUN;';
put '/* don''t set headers */';
put '%return;';
put '%end;';
put '%else %if &type=WEBTAB %then %do;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= _webout';
put 'DBMS=tab REPLACE;';
put 'RUN;';
put '/* don''t set headers */';
put '%return;';
put '%end;';
put '%else %do;';
put '%mp_abort(msg=type &type not supported,mac=mpestp_getrawdata.sas);';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mp_streamfile(contenttype=&mimetype';
put ',inloc=%str(&outfile)';
put ',outname=&table..&ext';
put ')';
put '%mend mpestp_getrawdata;';
put '%mpestp_getrawdata()';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getversion;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getversion.sas';
put '@brief get a specific (previous) version of a particular table';
put '@details Used to fetch a version of a table as at a previous point in time';
put 'Delivered as part of this issue: https://git.datacontroller.io/dc/dc/issues/84';
put ' Service Inputs
';
put ' getversion_input
';
put '|LIBREF:$char8.|DS:$char32.|TS: 8.|';
put '|---|---|---|';
put '|SOMELIB|SOMEDS|1341344.804|';
put ' Service Outputs
';
put ' work.getversion_output
';
put 'The data for a particular version';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mpeinit.sas';
put '@li mpe_getvars.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '**/';
put '%mpeinit()';
put '%global LIBREF DS;';
put '/* load parameters */';
put '%mpe_getvars(getversion_input, getversion_input)';
put '%mp_abort(iftrue= (&syscc ne 0 )';
put ',mac=&_program';
put ',msg=%str(Issue on startup)';
put ')';
put '/* todo */';
put '%webout(OPEN)';
put '%webout(OBJ,getversion_output)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshlibinfo;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##%mf_getuniquefileref(prefix=BTMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data work.bitemp5a_lkp (keep=&md5_col)';
put '%if "%substr(&sysver,1,1)" ne "4" & "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'set work.bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[&temp_table];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mpe_refreshtables(lib,ds=#all);';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%local engine; %let engine=%mf_getengine(&lib);';
put '%local schema; %let schema=%mf_getschema(&lib);';
put '%put running &sysmacroname &lib(&engine &schema) for &ds;';
put 'proc sql;';
put 'create table cols as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib cols extraction)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib indexes extraction)';
put ')';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.indexes as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table finalcols as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.indexes b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%local dsn;';
put '%if &ds = #ALL %then %let dsn=;';
put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table work.pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.constraints';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table work.sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table work.pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from work.sum a';
put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table work.pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data work.finalpks;';
put 'set pkdefault pk4sure pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table finalcols as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* load columns */';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_vars';
put ',append_dsn=finalcols';
put ',PK=LIBREF DSN NAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF DSN';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.tabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data tabs2;';
put 'set finalcols;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table work.finaltabs as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.tabs a';
put 'left join work.tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_tabs';
put ',append_dsn=finaltabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '/* prepare table frequently changing attributes */';
put 'proc sql;';
put '%if &engine=SQLSVR %then %do;';
put 'connect using &lib;';
put 'create table work.attrs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date';
put 'FROM sys.tables ;';
put ');';
put 'create table work.nobs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema''';
put ',A.Name, AVG(B.rows) AS ''RowCount''';
put 'FROM sys.objects A';
put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id';
put 'WHERE A.type = ''U''';
put 'GROUP BY A.schema_id, A.Name';
put ');';
put 'disconnect from &lib;';
put 'create table statustabs as select';
put 'a.libref';
put ',a.dsn';
put ',b.create_date as crdate';
put ',b.modify_date as modate';
put ',. as filesize';
put ',c.RowCount as nobs';
put 'from work.tabs a';
put 'left join work.attrs(where=(schema="&schema")) b';
put 'on upcase(a.dsn)=upcase(b.name)';
put 'left join work.nobs(where=(schema="&schema")) c';
put 'on upcase(a.dsn)=upcase(c.name);';
put '%end;';
put '%else %do;';
put 'create table statustabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',crdate';
put ',modate';
put ',filesize';
put ',nobs';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%end;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_tabs';
put ',append_dsn=statustabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '%if &ds = #ALL %then %do;';
put 'proc sql;';
put 'create table statuslibs as select';
put 'libref';
put ',sum(filesize) as libsize';
put ',count(*) as table_cnt';
put 'from statustabs';
put 'group by 1;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_libs';
put ',append_dsn=statuslibs';
put ',PK=LIBREF';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put ')';
put '%end;';
put '%mend mpe_refreshtables;';
put '%macro dc_refreshcatalog();';
put '%mpe_refreshlibs()';
put 'filename executor catalog ''work.code.code.source'';';
put 'data libraries;';
put 'set &mpelib..mpe_datacatalog_libs;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'file executor;';
put 'str=cats(''%mpe_refreshtables('',libref,'')'');';
put 'put str;';
put 'putlog str;';
put 'run;';
put '%inc executor;';
put '%mend dc_refreshcatalog;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshlibinfo.sas';
put '@brief Refresh the Data Catalog for a particular library';
put '@details When showing library info in the VIEW menu, the data is taken from';
put 'the Data Catalog tables. These may be empty or outdated, and so this service';
put 'allows end users to run a refresh of the data.';
put ' Service Inputs
';
put ' lib2refresh
';
put 'Should contain the libref to be refreshed.';
put '|libref:$8.|';
put '|---|';
put '|SOMELIB|';
put ' Service Outputs
';
put ' libinfo
';
put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |';
put '|---|---|---|---|---|---|---|---|---|';
put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_refreshcatalog.sas';
put '@li mp_abort.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%webout(FETCH)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem on startup)';
put ')';
put '%let libref=;';
put 'data _null_;';
put 'set work.lib2refresh;';
put 'call symputx(''libref'',libref);';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem with inputs - was lib2refresh object sent?)';
put ')';
put '%dc_assignlib(WRITE,&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc after lib assignment)';
put ')';
put '%dc_refreshcatalog(&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem when running the catalog refresh)';
put ')';
put '/* get libinfo */';
put 'proc sql;';
put 'create table work.libinfo as';
put 'select a.engine,';
put 'a.libname,';
put 'a.paths,';
put 'a.perms,';
put 'a.owners,';
put 'a.schemas,';
put 'a.libid,';
put 'b.libsize,';
put 'b.table_cnt';
put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'inner join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.libref=b.libref';
put 'where a.libref="&libref";';
put '%webout(OPEN)';
put '%webout(OBJ,libinfo)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=registeruser;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file registeruser.sas';
put '@brief Registers a new user in Data Controller';
put '@details New users are logged after accepting EULA terms.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let userid=%mf_getuser();';
put '/* confirm the user is not registered */';
put '%let isRegistered=0;';
put 'proc sql noprint;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem accessing &mpelib..mpe_users table)';
put ')';
put '%mp_abort(iftrue= (&isregistered > 0)';
put ',mac=&_program..sas';
put ',msg=%str(User &userid is already registered on &mpelib..mpe_users!)';
put ')';
put 'data work.append;';
put 'if 0 then set &mpelib..mpe_users;';
put 'user_id=symget(''userid'');';
put 'registered_dt=today();';
put 'last_seen_dt=today();';
put 'run;';
put 'proc append base=&mpelib..mpe_users data=work.append;';
put '%let isRegistered=0;';
put 'proc sql noprint;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '%mp_abort(iftrue= (&syscc ne 0 or &isregistered ne 1)';
put ',mac=&_program..sas';
put ',msg=%str(Problem appending to &mpelib..mpe_users table)';
put ')';
put 'data work.return;';
put 'msg=''SUCCESS'';';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,return)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=startupservice;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file startupservice.sas';
put '@brief List the libraries and tables the mp-editor user can access';
put '@details If user is in a control group (&mpeadmins, configured in mpeinit.sas)';
put 'then they have access to all libraries / tables. Otherwise a join is made';
put 'to the &mpelib..mpe_security table.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Issue on startup in startupService)';
put ')';
put '%let userid=%mf_getuser();';
put '%put userid is &userid;';
put '%mpe_getgroups(user=&userid,outds=groups)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Issue with Groups syscc=&syscc for user &userid)';
put ')';
put '/* check if user is an admin */';
put '%let admin_check=0;';
put 'proc sql noprint;';
put 'select count(*) into: admin_check';
put 'from groups';
put 'where groupname="&mpeadmins";';
put '/* check if user is registered or not */';
put '%let isRegistered=0;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '/* get number of registered users */';
put '%let registerCount=0;';
put 'select count(*) into: registercount';
put 'from &mpelib..mpe_users';
put 'where last_seen_dt>%sysfunc(today())-365;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem accessing &mpelib..mpe_users table)';
put ')';
put '%global dc_restrict_editrecord;';
put 'data work.globvars;';
put 'dclib="&mpelib";';
put 'sas9lineage_enabled=1;';
put 'isadmin=&admin_check;';
put 'isregistered=&isregistered;';
put 'registercount=®isterCount;';
put 'dc_admin_group="&mpeadmins";';
put '/* fetched from mpe_config in dc_getsettings */';
put 'licence_key="&dc_licence_key";';
put 'activation_key="&dc_activation_key";';
put 'dc_restrict_editrecord="&dc_restrict_editrecord";';
put 'run;';
put '%macro mstp_mpeditorstartup();';
put 'data _null_;';
put 'putlog "entering &sysmacroname";';
put 'run;';
put 'proc sql noprint;';
put '/* update last seen, if seen */';
put '%if &isregistered>0 %then %do;';
put 'update &mpelib..mpe_users';
put 'set last_seen_dt=%sysfunc(today())';
put 'where user_id="&userid";';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem updating &mpelib..mpe_users table)';
put ')';
put '%local all_cnt;';
put 'select count(*) into: all_cnt';
put 'from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and ACCESS_LEVEL in (''EDIT'')';
put 'and libref=''*ALL*''';
put 'and SAS_GROUP in (select groupname from groups);';
put '%if &admin_check >0 or &all_cnt>0 %then %do;';
put 'create table sasDatasets as';
put 'select distinct libref, dsn';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt tx_to';
put 'order by 1;';
put '%end;';
put '%else %do;';
put 'create table sasDatasets as';
put 'select distinct a.libref,a.dsn';
put 'from &mpelib..mpe_tables a';
put 'left join &mpelib..mpe_security b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn';
put 'where &dc_dttmtfmt. lt a.tx_to';
put 'and &dc_dttmtfmt. lt b.tx_to';
put 'and b.ACCESS_LEVEL in (''EDIT'')';
put 'and b.SAS_GROUP in (select groupname from groups)';
put 'order by 1;';
put '%end;';
put '%mend mstp_mpeditorstartup;';
put '%mstp_mpeditorstartup()';
put 'create table saslibs as';
put 'select distinct libref';
put 'from &syslast;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(issue with security validation)';
put ')';
put 'proc sql;';
put 'create table work.xlmaps as';
put 'select distinct a.XLMAP_ID';
put ',b.XLMAP_DESCRIPTION';
put ',coalescec(b.XLMAP_TARGETLIBDS,"&mpelib..MPE_XLMAP_DATA")';
put 'as XLMAP_TARGETLIBDS';
put 'from &mpelib..MPE_XLMAP_RULES a';
put 'left join &mpelib..MPE_XLMAP_INFO(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.XLMAP_ID=b.XLMAP_ID';
put 'where &dc_dttmtfmt. lt a.tx_to;';
put '/* we don''t want the XLMAP target datasets to be directly editable */';
put 'delete from sasdatasets';
put 'where cats(libref,''.'',dsn) in (select XLMAP_TARGETLIBDS from xlmaps);';
put '%webout(OPEN)';
put '%webout(OBJ,sasDatasets)';
put '%webout(OBJ,saslibs)';
put '%webout(OBJ,globvars)';
put '%webout(ARR,xlmaps)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tokenauth;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mv_tokenauth(inds=mv_registerclient';
put ',outds=mv_tokenauth';
put ',client_id=someclient';
put ',client_secret=somesecret';
put ',grant_type=authorization_code';
put ',code=';
put ',user=';
put ',pass=';
put ',access_token_var=ACCESS_TOKEN';
put ',refresh_token_var=REFRESH_TOKEN';
put ',base_uri=#NOTSET#';
put ');';
put '%global &access_token_var &refresh_token_var;';
put '%local fref1 fref2 libref;';
put '/* test the validity of inputs */';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_existds(&inds) %then %do;';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''client_id'',client_id,''l'');';
put 'call symputx(''client_secret'',client_secret,''l'');';
put 'if not missing(auth_code) then call symputx(''code'',auth_code,''l'');';
put 'run;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type=authorization_code and %str(&code)=%str())';
put ',mac=&sysmacroname';
put ',msg=%str(Authorization code required)';
put ')';
put '%mp_abort(iftrue=(';
put '&grant_type=password and (%str(&user)=%str() or %str(&pass)=%str()))';
put ',mac=&sysmacroname';
put ',msg=%str(username / password required)';
put ')';
put '/* prepare appropriate grant type */';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'if "&grant_type"=''authorization_code'' then string=cats(';
put '''grant_type=authorization_code&code='',symget(''code''));';
put 'else string=cats(''grant_type=password&username='',symget(''user'')';
put ',''&password='',symget(pass));';
put 'call symputx(''grantstring'',cats("''",string,"''"));';
put 'run;';
put '/*data _null_;infile &fref1;input;put _infile_;run;*/';
put '/**';
put '* Request access token';
put '*/';
put '%if &base_uri=#NOTSET# %then %let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%let fref2=%mf_getuniquefileref();';
put 'proc http method=''POST'' in=&grantstring out=&fref2';
put 'url="&base_uri/SASLogon/oauth/token"';
put 'WEBUSERNAME="&client_id"';
put 'WEBPASSWORD="&client_secret"';
put 'AUTH_BASIC;';
put 'headers "Accept"="application/json"';
put '"Content-Type"="application/x-www-form-urlencoded";';
put 'run;';
put '/*data _null_;infile &fref2;input;put _infile_;run;*/';
put '/**';
put '* Extract access / refresh tokens';
put '*/';
put '%let libref=%mf_getuniquelibref();';
put 'libname &libref JSON fileref=&fref2;';
put '/* extract the tokens */';
put 'data &outds;';
put 'set &libref..root;';
put 'call symputx("&access_token_var",access_token);';
put 'call symputx("&refresh_token_var",refresh_token);';
put 'run;';
put 'libname &libref clear;';
put 'filename &fref1 clear;';
put 'filename &fref2 clear;';
put '%mend mv_tokenauth;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file tokenauth.sas';
put '@brief Get initial tokens using an auth code - DEPRECATED';
put ' SAS Macros
';
put '@li mv_tokenauth.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%webout(FETCH)';
put 'data _null_;';
put 'set work.fromjs;';
put 'call symputx(''viyasettings'',viyasettings);';
put 'call symputx(''client_id'',client_id);';
put 'call symputx(''auth_code'',auth_code);';
put 'run;';
put 'data authme;';
put '/* get client info from special location */';
put 'infile "&viyasettings" dsd;';
put 'input client_secret:$100.;';
put 'client_id="&client_id";';
put 'auth_code="&auth_code";';
put 'run;';
put '/* get tokens */';
put '%mv_tokenauth(inds=authme, outds=fromSAS(keep=access_token refresh_token))';
put '/* send back to frontend */';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tokenrefresh;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mv_tokenrefresh(inds=mv_registerclient';
put ',outds=mv_tokenrefresh';
put ',client_id=someclient';
put ',client_secret=somesecret';
put ',grant_type=authorization_code';
put ',user=';
put ',pass=';
put ',access_token_var=ACCESS_TOKEN';
put ',refresh_token_var=REFRESH_TOKEN';
put ');';
put '%global &access_token_var &refresh_token_var;';
put 'options noquotelenmax;';
put '%local fref1 libref;';
put '/* test the validity of inputs */';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(';
put 'iftrue=(&grant_type=password and (%str(&user)=%str() or %str(&pass)=%str()))';
put ',mac=&sysmacroname';
put ',msg=%str(username / password required)';
put ')';
put '%if %mf_existds(&inds) %then %do;';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''client_id'',client_id,''l'');';
put 'call symputx(''client_secret'',client_secret,''l'');';
put 'call symputx("&refresh_token_var",&refresh_token_var,''l'');';
put 'run;';
put '%end;';
put '%mp_abort(iftrue=(%str(&client_id)=%str() or %str(&client_secret)=%str())';
put ',mac=&sysmacroname';
put ',msg=%str(client / secret must both be provided)';
put ')';
put '/**';
put '* Request access token';
put '*/';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%let fref1=%mf_getuniquefileref();';
put 'proc http method=''POST''';
put 'in="grant_type=refresh_token%nrstr(&)refresh_token=&&&refresh_token_var"';
put 'out=&fref1';
put 'url="&base_uri/SASLogon/oauth/token"';
put 'WEBUSERNAME="&client_id"';
put 'WEBPASSWORD="&client_secret"';
put 'AUTH_BASIC;';
put 'headers "Accept"="application/json"';
put '"Content-Type"="application/x-www-form-urlencoded";';
put 'run;';
put '/*data _null_;infile &fref1;input;put _infile_;run;*/';
put '/**';
put '* Extract access / refresh tokens';
put '*/';
put '%let libref=%mf_getuniquelibref();';
put 'libname &libref JSON fileref=&fref1;';
put '/* extract the token */';
put 'data &outds;';
put 'set &libref..root;';
put 'call symputx("&access_token_var",access_token);';
put 'call symputx("&refresh_token_var",refresh_token);';
put 'run;';
put 'libname &libref clear;';
put 'filename &fref1 clear;';
put '%mend mv_tokenrefresh;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file tokenauth.sas';
put '@brief Get initial tokens using an auth code - DEPRECATED';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li mv_tokenrefresh.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%webout(FETCH)';
put 'data _null_;';
put 'set work.fromjs;';
put 'call symputx(''viyasettings'',viyasettings);';
put 'call symputx(''client_id'',client_id);';
put 'call symputx(''refresh_token'',refresh_token);';
put 'run;';
put 'data authme;';
put '/* get client info from special location */';
put 'infile "&viyasettings" dsd;';
put 'input client_secret:$100.;';
put 'client_id="&client_id";';
put 'refresh_token="&refresh_token";';
put 'run;';
put '/* get tokens */';
put '%mv_tokenrefresh(inds=authme, outds=fromSAS(keep=refresh_token access_token))';
put '/* send back to frontend */';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=validatefilter;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_islibds(libds';
put ')/*/STORE SOURCE*/;';
put '%local regex;';
put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));';
put '%sysfunc(prxmatch(®ex,&libds))';
put '%mend mf_islibds;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '%macro mp_md5(cvars=,nvars=);';
put '%local i var sep;';
put 'put(md5(';
put '%do i=1 %to %sysfunc(countw(&cvars));';
put '%let var=%scan(&cvars,&i,%str( ));';
put '&sep put(md5(trim(&var)),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '%do i=1 %to %sysfunc(countw(&nvars));';
put '%let var=%scan(&nvars,&i,%str( ));';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '),$hex32.)';
put '%mend mp_md5;';
put '%macro mp_hashdataset(';
put 'libds,';
put 'outds=work._data_,';
put 'salt=,';
put 'iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local keyvar /* roll up the md5 */';
put 'prevkeyvar /* retain prev record md5 */';
put 'lastvar /* last var in input ds */';
put 'cvars nvars;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '/* avoid naming conflict for hash key vars */';
put '%let keyvar=%mf_getuniquename();';
put '%let prevkeyvar=%mf_getuniquename();';
put '%let lastvar=%mf_getuniquename();';
put '%if %mf_getattrn(&libds,NLOBS)=0 %then %do;';
put 'data &outds;';
put 'length hashkey $32;';
put 'hashkey=put(md5("&salt"),$hex32.);';
put 'output;';
put 'stop;';
put 'run;';
put '%put &sysmacroname: Dataset &libds is empty, or is not a dataset;';
put '%put &sysmacroname: hashkey of &outds is based on salt (&salt) only;';
put '%end;';
put '%else %if %mf_getattrn(&libds,NLOBS)<0 %then %do;';
put '%put %str(ERR)OR: Dataset &libds is not a dataset;';
put '%end;';
put '%else %do;';
put 'data &outds(rename=(&keyvar=hashkey) keep=&keyvar)';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'length &prevkeyvar &keyvar $32;';
put 'retain &prevkeyvar;';
put 'if _n_=1 then &prevkeyvar=put(md5("&salt"),$hex32.);';
put 'set &libds end=&lastvar;';
put '/* hash should include previous row */';
put '&keyvar=%mp_md5(';
put 'cvars=%mf_getvarlist(&libds,typefilter=C) &prevkeyvar,';
put 'nvars=%mf_getvarlist(&libds,typefilter=N)';
put ');';
put '&prevkeyvar=&keyvar;';
put 'if &lastvar then output;';
put 'run;';
put '%end;';
put '%mend mp_hashdataset;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '%macro mp_filterstore(libds=,';
put 'queryds=work.filterquery,';
put 'filter_summary=PERM.FILTER_SUMMARY,';
put 'filter_detail=PERM.FILTER_DETAIL,';
put 'lock_table=PERM.LOCK_TABLE,';
put 'maxkeytable=PERM.MAXKEYTABLE,';
put 'outresult=work.result,';
put 'outquery=work.query,';
put 'mdebug=1';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local ds0 ds1 ds2 ds3 ds4 filter_hash orig_libds;';
put '%let libds=%upcase(&libds);';
put '%let orig_libds=&libds;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc on macro entry)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&filter_summary)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid filter_summary value: &filter_summary)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&filter_detail)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid filter_detail value: &filter_detail)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&lock_table)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid lock_table value: &lock_table)';
put ')';
put '/**';
put '* validate query';
put '* use format catalog export, if a format';
put '*/';
put '%if "%substr(&libds,%length(&libds)-2,3)"="-FC" %then %do;';
put '%let libds=%scan(&libds,1,-); /* chop off -FC extension */';
put '%let ds0=%mf_getuniquename(prefix=fmtds_);';
put '%let libds=&ds0;';
put '/*';
put 'There is no need to export the entire format catalog here - the validations';
put 'are done against the data model, not the data values. So we can simply';
put 'hardcode the structure based on the cntlout dataset.';
put '*/';
put '%mddl_sas_cntlout(libds=&ds0)';
put '%end;';
put '%mp_filtercheck(&queryds,targetds=&libds,abort=YES)';
put '/* hash the result */';
put '%let ds1=%mf_getuniquename(prefix=hashds);';
put '%mp_hashdataset(&queryds,outds=&ds1,salt=&orig_libds)';
put '%let filter_hash=%upcase(%mf_getvalue(&ds1,hashkey));';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'putlog "filter_hash=&filter_hash";';
put 'set &ds1;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '/* check if data already exists for this hash */';
put 'data &outresult;';
put 'set &filter_summary;';
put 'where filter_hash="&filter_hash";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc after hash check)';
put ')';
put '%mp_abort(iftrue= ("&filter_hash "=" ")';
put ',mac=mp_filterstore';
put ',msg=%str(problem with filter_hash generation)';
put ')';
put '%if %mf_nobs(&outresult)=0 %then %do;';
put '/* first update summary table */';
put '%let ds3=%mf_getuniquename(prefix=filtersum);';
put 'data work.&ds3;';
put 'if 0 then set &filter_summary;';
put 'filter_table="&orig_libds";';
put 'filter_hash="&filter_hash";';
put 'PROCESSED_DTTM=%sysfunc(datetime());';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=%scan(&filter_summary,1,.)';
put ',ds=%scan(&filter_summary,2,.)';
put ',ref=MP_FILTERSTORE summary update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%let ds4=%mf_getuniquename(prefix=filtersumappend);';
put '%mp_retainedkey(';
put 'base_lib=%scan(&filter_summary,1,.)';
put ',base_dsn=%scan(&filter_summary,2,.)';
put ',append_lib=work';
put ',append_dsn=&ds3';
put ',retained_key=filter_rk';
put ',business_key=filter_hash';
put ',maxkeytable=&maxkeytable';
put ',locktable=&lock_table';
put ',outds=work.&ds4';
put ')';
put 'proc append base=&filter_summary data=&ds4;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=%scan(&filter_summary,1,.)';
put ',ds=%scan(&filter_summary,2,.)';
put ',ref=MP_FILTERSTORE summary update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%if &syscc ne 0 %then %do;';
put 'data _null_;';
put 'set &ds4;';
put 'putlog (_all_)(=);';
put 'run;';
put '%goto err;';
put '%end;';
put 'data &outresult;';
put 'set &filter_summary;';
put 'where filter_hash="&filter_hash";';
put 'run;';
put '/* Next, update detail table */';
put '%let ds2=%mf_getuniquename(prefix=filterdetail);';
put 'data &ds2;';
put 'if 0 then set &filter_detail;';
put 'set &queryds;';
put 'format filter_hash $hex32. filter_line 8.;';
put 'filter_hash="&filter_hash";';
put 'filter_line=_n_;';
put 'PROCESSED_DTTM=%sysfunc(datetime());';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=%scan(&filter_detail,1,.)';
put ',ds=%scan(&filter_detail,2,.)';
put ',ref=MP_FILTERSTORE update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put 'proc append base=&filter_detail data=&ds2;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=%scan(&filter_detail,1,.)';
put ',ds=%scan(&filter_detail,2,.)';
put ',ref=MP_FILTERSTORE detail update &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%if &syscc ne 0 %then %do;';
put 'data _null_;';
put 'set &ds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%goto err;';
put '%end;';
put '%end;';
put 'proc sort data=&filter_detail(where=(filter_hash="&filter_hash")) out=&outquery;';
put 'by filter_line;';
put 'run;';
put '%err:';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc on macro exit)';
put ')';
put '%mend mp_filterstore;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Validates a filter clause before it gets hashified, returns the RK';
put '@details Used to generate a FILTER_RK from an input query dataset.';
put 'Raw values are stored in dc.mpe_filtersource and the meta values are stored';
put 'in dc.mpe_filteranytable';
put ' Service Inputs
';
put ' IWANT
';
put '|FILTER_TABLE:$41.|';
put '|---|';
put '|DC258467.MPE_X_TEST|';
put ' FILTERQUERY
';
put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|';
put '|---|---|---|---|---|---|';
put '|AND|AND|1|SOME_BESTNUM|>|1|';
put '|AND|AND|1|SOME_TIME|=|77333|';
put ' Service Outputs
';
put ' result
';
put '@li FILTER_HASH';
put '@li FILTER_RK';
put '@li FILTER_TABLE';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getvalue.sas';
put '@li mp_filterstore.sas';
put '@li removecolsfromwork.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let ds=%upcase(%mf_getvalue(work.iwant,filter_table));';
put '%dc_assignlib(WRITE,%scan(&ds,1,.))';
put '%mp_filterstore(';
put 'libds=&ds,';
put 'queryds=work.filterquery,';
put 'filter_summary=&dc_libref..mpe_filteranytable,';
put 'filter_detail=&dc_libref..mpe_filtersource,';
put 'lock_table=&dc_libref..mpe_lockanytable,';
put 'maxkeytable=&dc_libref..mpe_maxkeyvalues,';
put 'outresult=work.result,';
put 'outquery=work.query, /* not used */';
put 'mdebug=1';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put 'proc sql;';
put 'alter table work.result drop PROCESSED_DTTM;';
put '%webout(OPEN)';
put '%webout(OBJ,result)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds';
put ',mode=VIEW';
put ',groupds=work.groups';
put ',clsds=work.clsview';
put ',outds=CLSVIEW';
put ',outmeta=work.cls_rules';
put ');';
put '%local col_list is_admin;';
put '/* filter for the appropriate rules */';
put 'proc sql;';
put 'create table &outmeta as';
put 'select CLS_VARIABLE_NM,';
put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE';
put 'from &clsds';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("&mode",''ALL'')';
put 'and CLS_ACTIVE=1';
put '%if &mode=VIEW %then %do;';
put 'and CLS_HIDE ne 1';
put '%end;';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)';
put 'and CLS_LIBREF="%upcase(&tgtlib)"';
put 'and CLS_TABLE="%upcase(&tgtds)"';
put 'group by CLS_VARIABLE_NM;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";';
put '%put &sysmacroname: &=is_admin;';
put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;';
put '%put &sysmacroname: no CLS rules to apply;';
put '%put &=is_admin;';
put '/* copy using append for speed */';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '/* ensure CLS_RULES is empty in case of admin */';
put 'data &outmeta;';
put 'set &outmeta;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &mode=VIEW %then %do;';
put '/* just send back the relevant columns */';
put '%let col_list=0;';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=0;';
put '%if &col_list=0 %then %do;';
put '/*';
put 'We have columns that are set to CLS_HIDE=1 but we do not have any to';
put 'explicitly show. Therefore we assume all columns are to be shown except';
put 'those that are explicitly hidden.';
put '*/';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=1;';
put 'data &outds;';
put 'set &inds;';
put 'drop &col_list;';
put 'run;';
put '%end;';
put '%else %do;';
put 'data &outds;';
put 'set &inds;';
put 'keep &col_list;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &mode=EDIT %then %do;';
put '/*';
put 'In this case we pass all columns and the frontend will filter out the';
put 'ones that are not allowed to be edited.';
put '*/';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: invalid mode - &mode!;';
put '%abort;';
put '%end;';
put '%mend mpe_columnlevelsecurity;';
put '%macro mp_dsmeta(libds,outds=work.dsmeta);';
put '%local ds1 ds2;';
put 'data;run; %let ds1=&syslast;';
put 'data;run; %let ds2=&syslast;';
put '/* setup the ODS capture */';
put 'ods output attributes=&ds1 enginehost=&ds2;';
put '/* export the metadata */';
put 'proc contents data=&libds;';
put 'run;';
put '/* load it into a single table */';
put 'data &outds (keep=ods_table name value);';
put 'length ods_table $10 name label2 label1 label $100';
put 'value cvalue cvalue1 cvalue2 $1000';
put 'nvalue nvalue1 nvalue2 8;';
put 'if _n_=1 then call missing (of _all_);';
put '* putlog (_all_)(=);';
put 'set &ds1 (in=atrs) &ds2 (in=eng);';
put 'if atrs then do;';
put 'ods_table=''ATTRIBUTES'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'if label2 ne '''' then do;';
put 'name=label2;';
put 'value=coalescec(cvalue2,put(nvalue2,best.));';
put 'output;';
put 'end;';
put 'end;';
put 'else if eng then do;';
put 'ods_table=''ENGINEHOST'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &ds1, &ds2;';
put '%mend mp_dsmeta;';
put '%macro mpe_dsmeta(libds, outds=dsmeta);';
put '%local ddsd ddld notes lenstmt;';
put '%let lenstmt=length ods_table $18 name $100 value $1000;';
put '%let libds=%upcase(&libds);';
put '%mp_dsmeta(&libds, outds=&outds)';
put 'data _null_;';
put 'set &mpelib..mpe_datadictionary;';
put 'where &dc_dttmtfmt < tx_to & dd_source=%upcase("&libds") & dd_type=''TABLE'';';
put 'call symputx(''ddsd'',dd_shortdesc,''l'');';
put 'call symputx(''ddld'',dd_longdesc,''l'');';
put 'run;';
put 'data &outds;';
put '&lenstmt;';
put 'if last then do;';
put 'ODS_TABLE=''MPE_DATADICTIONARY'';';
put 'NAME=''DD_SHORTDESC'';';
put 'VALUE="&ddsd";';
put 'output;';
put 'NAME=''DD_LONGDESC'';';
put 'VALUE="&ddld";';
put 'output;';
put 'end;';
put 'set &outds end=last;';
put 'output;';
put 'run;';
put 'data _data_;';
put 'set &mpelib..mpe_tables;';
put 'where libref="%scan(&libds,1,.)"';
put '& dsn="%scan(&libds,2,.)"';
put '& &dc_dttmtfmt 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro dc_createdataset(libds=mm_getlibs);';
put 'data viewdata;';
put 'var1=''Table'';';
put 'var2="&libds";';
put 'var3="does not exist!";';
put 'run;';
put '%mend dc_createdataset;';
put '%macro dc_gettableid(libref=';
put ',ds=';
put ',outds=);';
put 'data &outds;';
put 'tableuri='''';';
put 'tablename="&ds";';
put 'run;';
put '%mend dc_gettableid;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_getcols(ds, outds=work.cols);';
put '%local dropds;';
put 'proc contents noprint data=&ds';
put 'out=_data_ (keep=name type length label varnum format:);';
put 'run;';
put '%let dropds=&syslast;';
put 'data &outds(keep=name type length varnum format label ddtype fmtname);';
put 'set &dropds(rename=(format=fmtname type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if fmtname='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else format=cats(fmtname,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if fmtname='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');';
put 'else format=cats(fmtname,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' or format=:''E8601DT'' or format=:''NLDATM''';
put 'then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY'' or format=:''NLDATE''';
put 'then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put 'proc sql;';
put 'drop table &dropds;';
put '%mend mp_getcols;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getpk(';
put 'lib,';
put 'ds=0,';
put 'outds=work.mp_getpk,';
put 'mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks';
put 'pkfromindex;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let engine=%mf_getengine(&lib);';
put '%let schema=%mf_getschema(&lib);';
put '%let ds1=%mf_getuniquename(prefix=getpk_ds1);';
put '%let ds2=%mf_getuniquename(prefix=getpk_ds2);';
put '%let ds3=%mf_getuniquename(prefix=getpk_ds3);';
put '%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);';
put '%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);';
put '%let sum=%mf_getuniquename(prefix=getpk_sum);';
put '%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);';
put '%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);';
put '%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);';
put '%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put 'proc sql;';
put 'create table &ds1 as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.&ds2 as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table &ds3 as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.&ds1 a';
put 'left join work.&ds2 b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%if &ds = 0 %then %let dsn=;';
put '/* get all constraints, in constraint order*/';
put '%mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table &pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.&ds2';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table &sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.&ds2(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.&ds2(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table &pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from &sum a';
put 'left join &ds2(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table &pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data &finalpks;';
put 'set &pkdefault &pk4sure &pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table &ds3 as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.&ds1 a';
put 'left join work.&finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.&tabs1 as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data &tabs2;';
put 'set &ds3;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn constraint_order;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table &outds as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.&tabs1 a';
put 'left join work.&tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getpk;';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mp_searchdata(lib=';
put ',ds=';
put ',string= /* the query will use a contains (?) operator */';
put ',numval= /* numeric must match exactly */';
put ',outloc=0';
put ',outlib=MPSEARCH';
put ',outobs=-1';
put ',filter_text=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local table_list table table_num table colnum col start_tm check_tm vars type';
put 'coltype;';
put '%put process began at %sysfunc(datetime(),datetime19.);';
put '%if &syscc ge 4 %then %do;';
put '%put %str(WAR)NING: SYSCC=&syscc on macro entry;';
put '%return;';
put '%end;';
put '%if &string = %then %let type=N;';
put '%else %let type=C;';
put '%if "&outloc"="0" %then %do;';
put '%let outloc=%sysfunc(pathname(work))/%mf_getuniquename();';
put '%end;';
put '%mf_mkdir(&outloc)';
put 'libname &outlib "&outloc";';
put '/* get the list of tables in the library */';
put 'proc sql noprint;';
put 'select distinct memname into: table_list separated by '' ''';
put 'from dictionary.tables';
put 'where upcase(libname)="%upcase(&lib)"';
put '%if &ds ne %then %do;';
put 'and upcase(memname)=%upcase("&ds")';
put '%end;';
put ';';
put '/* check that we have something to check */';
put '%if %length(&table_list)=0 %then %put library &lib contains no tables!;';
put '/* loop through each table */';
put '%else %do table_num=1 %to %sysfunc(countw(&table_list,%str( )));';
put '%let table=%scan(&table_list,&table_num,%str( ));';
put '%let vars=%mf_getvarlist(&lib..&table);';
put '%if %length(&vars)=0 %then %do;';
put '%put NO COLUMNS IN &lib..&table! This will be skipped.;';
put '%end;';
put '%else %do;';
put '%let check_tm=%sysfunc(datetime());';
put '/* prep input */';
put 'data &outlib..&table;';
put 'set &lib..&table;';
put 'where %unquote(&filter_text) and ( 0';
put '/* loop through columns */';
put '%do colnum=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let col=%scan(&vars,&colnum,%str( ));';
put '%let coltype=%mf_getvartype(&lib..&table,&col);';
put '%if &type=C and &coltype=C %then %do;';
put '/* if a char column, see if it contains the string */';
put 'or ("&col"n ? "&string")';
put '%end;';
put '%else %if &type=N and &coltype=N %then %do;';
put '/* if numeric match exactly */';
put 'or ("&col"n = &numval)';
put '%end;';
put '%end;';
put ');';
put '%if &outobs>-1 %then %do;';
put 'if _n_ > &outobs then stop;';
put '%end;';
put 'run;';
put '%put Search query for &table took';
put '%sysevalf(%sysfunc(datetime())-&check_tm) seconds;';
put '%if &syscc ne 0 %then %do;';
put '%put %str(ERR)ROR: SYSCC=&syscc when processing &lib..&table;';
put '%return;';
put '%end;';
put '%if %mf_nobs(&outlib..&table)=0 %then %do;';
put 'proc sql;';
put 'drop table &outlib..&table;';
put '%end;';
put '%end;';
put '%end;';
put '%put process finished at %sysfunc(datetime(),datetime19.);';
put '%mend mp_searchdata;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewdata.sas';
put '@brief Provide the raw view of the data';
put '@details Pass a LIBDS and FILTER_RK to return a dataset for viewing.';
put 'VIEW datasets include all columns / rows (unlike EDIT, which are filtered';
put 'for current records and don''t include the SCD2 etc cols).';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|FILTER_RK:$5.|SEARCHTYPE:$4|SEARCHVAL:$1000';
put '|---|---|---|---';
put '|DC258467.MPE_X_TEST|-1|CHAR|Some String|';
put ' Service Outputs
';
put ' cols
';
put '@li DDTYPE';
put '@li FORMAT';
put '@li LABEL';
put '@li LENGTH';
put '@li NAME';
put '@li TYPE';
put '@li VARNUM';
put ' sasparams
';
put '@li FILTER_TEXT';
put '@li NOBS';
put '@li PK_FIELDS - string seperated list of primary key fields, if they exist';
put '@li TABLENAME';
put '@li TABLEURI';
put '@li VARS';
put ' versions
';
put 'history of DC versions for this particular table';
put ' viewdata
';
put 'The raw data from the target table.';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_createdataset.sas';
put '@li dc_gettableid.sas';
put '@li mf_existds.sas';
put '@li mf_getvarcount.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_getcols.sas';
put '@li mp_getpk.sas';
put '@li mp_jsonout.sas';
put '@li mp_searchdata.sas';
put '@li mp_validatecol.sas';
put '@li mpe_columnlevelsecurity.sas';
put '@li mpe_dsmeta.sas';
put '@li mpe_getversions.sas';
put '@li mpe_filtermaster.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* configure macvars */';
put '%global LIBDS FILTER_RK SEARCHVAL SEARCHTYPE FMT_IND;';
put '%let maxrows=250;';
put '/* avoid code injection */';
put '%let FMT_IND=0;';
put '%let SEARCHTYPE=;';
put '%let SEARCHVAL=;';
put '%let FILTER_RK=;';
put '%let LIBDS=;';
put '/**';
put '* Validate inputs';
put '*/';
put 'data work.intest;';
put 'length libds $41 filter_rk 8. searchval $100 searchtype $4;';
put 'set work.SASCONTROLTABLE;';
put 'call symputx(''orig_libds'',libds);';
put '/* validate filter_rk */';
put 'if filter_rk le 0 then filter_rk=-1;';
put '/* check if the request is for a format catalog */';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''fmt_ind'',1);';
put 'end;';
put 'putlog (_all_)(=);';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put 'if searchtype in (''CHAR'',''NUM'') then do;';
put 'searchval=tranwrd(searchval,''%'','''');';
put 'searchval=tranwrd(searchval,''&'','''');';
put 'searchval=tranwrd(searchval,'';'','''');';
put 'searchval=tranwrd(searchval,''"'','''');';
put 'call symputx(''searchtype'',searchtype);';
put 'call symputx(''searchval'',searchval);';
put 'end;';
put 'else if searchtype not in ('''',''NONE'') then do;';
put 'putlog ''ERR'' ''OR: Invalid searchtype:'' searchtype;';
put 'stop;';
put 'end;';
put 'if is_libds=0 then do;';
put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''filter_rk'',filter_rk);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_verifymacvars(libds filter_rk fmt_ind)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem with macro inputs)';
put ')';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(Some err with service inputs)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/**';
put '* assign the Library';
put '*/';
put '%dc_assignlib(READ,%scan(&LIBDS,1,.))';
put '/* abort if looking for a format and the catalog doesn''t exist */';
put '%mp_abort(iftrue= (&fmt_ind=1 and %sysfunc(exist(&libds,CATALOG))=0)';
put ',mac=&_program..sas';
put ',msg=%str(Catalog &libds does not exist!)';
put ')';
put '/**';
put 'check if dataset can actually be opened - as library may exist but it may not';
put 'be possible to assign, and even if it can, the physical table may not exist';
put '**/';
put 'data _null_;';
put 'if &fmt_ind=0 then do;';
put 'dsid=open("&libds");';
put 'rc=close(dsid);';
put 'end;';
put 'else dsid=42;';
put 'call symputx(''existds'',dsid,''l'');';
put 'putlog ''dataset exists check:'' dsid;';
put 'run;';
put '/**';
put '* get the data';
put '*/';
put '%global dsobs;';
put '%let dsobs=0;';
put '%macro x();';
put '%if &existds>0 %then %do;';
put '%if &fmt_ind=1 %then %do;';
put '/* export format and point the libds to the output table from here on */';
put '%mp_cntlout(';
put 'libcat=&libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%let libds=WORK.FMTEXTRACT;';
put 'proc datasets lib=work noprint;';
put 'modify FMTEXTRACT;';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%end;';
put 'proc sql noprint;';
put 'select count(*) into: dsobs from &libds;';
put '%put preparing query;';
put '%mpe_filtermaster(VIEW,&libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter_rk,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%put printing generated filterquery:;';
put 'data _null_;';
put 'infile filtref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &searchtype=NONE or "%trim(&searchtype) " = " " %then %do;';
put '/* get row count */';
put 'filename rows temp;';
put 'data _null_;';
put 'file rows;';
put 'infile filtref end=eof;';
put 'input;';
put 'if _n_=1 then do;';
put 'put ''proc sql;'';';
put 'put "select count(*) into: dsobs from &libds where";';
put 'end;';
put 'put _infile_;';
put 'if eof then put '';'';';
put 'run;';
put 'data _null_;';
put 'infile rows;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%inc rows;';
put '/* send actual data, filtered and row-capped */';
put 'data work.viewdata;';
put 'set &libds;';
put 'where %inc filtref;;';
put 'if _n_>&maxrows then stop;';
put 'run;';
put '%if %mf_nobs(work.viewdata)=0 %then %do;';
put 'data work.viewdata;';
put '/* send empty row if empty table to help with hot rendering */';
put 'output;';
put 'set work.viewdata;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data work.vwsearch/view=work.vwsearch;';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put '%if %upcase(&searchtype)=CHAR %then %do;';
put '%mp_searchdata(lib=work';
put ',ds=vwsearch';
put ',string=%superq(searchval)';
put ',outobs=&maxrows';
put ')';
put '%end;';
put '%else %if %upcase(&searchtype)=NUM %then %do;';
put '%mp_searchdata(lib=work';
put ',ds=vwsearch';
put ',numval=%superq(searchval)';
put ',outobs=&maxrows';
put ')';
put '%end;';
put '%if %mf_existds(libds=MPSEARCH.vwsearch) %then %do;';
put '%let dsobs=%mf_nobs(MPSEARCH.vwsearch);';
put 'data viewdata;';
put 'set MPSEARCH.vwsearch;';
put 'if _n_<&maxrows;';
put 'run;';
put '%end;';
put '%else %do;';
put '%let dsobs=0;';
put 'data viewdata;';
put 'set &libds;';
put 'stop;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '/* physical table is not accessible so create from metatadata definition */';
put '%dc_createdataset(libds=&libds,outds=viewdata)';
put 'data viewData;';
put 'output;';
put 'set viewdata;';
put 'run;';
put '/* make filtref / work.query / work.groups to avoid downstream issues */';
put 'filename filtref temp;';
put 'data work.query;';
put 'file filtref;';
put 'x=0;';
put 'put x;';
put 'run;';
put 'data work.groups;';
put 'length groupuri groupname $32 groupdesc $128 ;';
put 'call missing (of _all_);';
put 'output;';
put 'stop;';
put 'run;';
put '%end;';
put '%mend x; %x()';
put '/* apply column level security */';
put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.viewdata';
put ',mode=VIEW';
put ',clsds=&mpelib..mpe_column_level_security';
put ',groupds=work.groups /* was created in mpe_filtermaster */';
put ',outds=work.viewdata2';
put ',outmeta=work.cls_rules';
put ')';
put '/* get table uri (if sas 9) to enable linking direct to lineage */';
put '%dc_gettableid(libref=%scan(&libds,1,.)';
put ',ds=%scan(&libds,2,.)';
put ',outds=work.parambase';
put ')';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'input;';
put 'length filter_text $32767;';
put 'retain filter_text;';
put 'filter_text=catx('' '',filter_text,_infile_);';
put 'if eof then do;';
put 'if cats(filter_text)=''1=1'' then filter_text='''';';
put 'call symputx(''filter_text'',filter_text);';
put 'end;';
put 'run;';
put '%mp_getpk(%scan(&libds,1,.), ds=%scan(&libds,2,.), outds=work.pk_fields)';
put '%let pk_fields=;';
put 'data _null_;';
put 'set work.pk_fields;';
put 'call symputx(''pk_fields'',pk_fields);';
put 'run;';
put 'data work.sasparams;';
put 'set work.parambase;';
put 'format FILTER_TEXT $32767.;';
put 'FILTER_TEXT=symget(''FILTER_TEXT'');';
put 'length PK_FIELDS $512;';
put 'PK_FIELDS=symget(''PK_FIELDS'');';
put 'nobs=&dsobs;';
put 'vars=%mf_getvarcount(viewdata);';
put 'maxrows=&maxrows;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mp_getcols(&libds, outds=cols)';
put '%mpe_dsmeta(&libds, outds=dsmeta)';
put '%mpe_getversions(&mpelib,';
put '%scan(&orig_libds,1,.),';
put '%scan(&orig_libds,2,.),';
put 'outds=versions';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,cls_rules)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,dsmeta)';
put '%webout(OBJ,query)';
put '%webout(OBJ,sasparams)';
put '%webout(OBJ,versions)';
put '%webout(OBJ,viewData2,fmt=Y,missing=STRING,showmeta=YES,dslabel=viewdata)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewlibarray;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug';
put 'sasjs_tables;';
put '%local i tempds jsonengine;';
put '/* see https://github.com/sasjs/core/issues/41 */';
put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;';
put '%else %let jsonengine=DATASTEP;';
put '%if &action=FETCH %then %do;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '/* now read in the data */';
put '%do i=1 %to &_webin_file_count;';
put '%if &_webin_file_count=1 %then %do;';
put '%let _webin_fileref1=&_webin_fileref;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put 'data _null_;';
put 'infile &&_webin_fileref&i termstr=crlf;';
put 'input;';
put 'call symputx(''input_statement'',_infile_);';
put 'putlog "&&_webin_name&i input statement: " _infile_;';
put 'stop;';
put 'data &&_webin_name&i;';
put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';';
put 'input &input_statement;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put '%end;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* fix encoding */';
put 'OPTIONS NOBOMFILE;';
put '/**';
put '* check xengine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put 'data _null_;';
put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));';
put 'if xengine=''STREAM'' then do;';
put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");';
put 'end;';
put 'run;';
put '/* setup json */';
put 'data _null_;file &fref encoding=''utf-8'';';
put '%if %str(&_debug) ge 131 %then %do;';
put 'put ''>>weboutBEGIN<<'';';
put '%end;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '/* To avoid issues with _webout on EBI we use a temporary file */';
put 'filename _sjsref temp lrecl=131068;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* if debug mode, send back first XX records of each work table also */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put "}";';
put '%end;';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put "}";';
put 'run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file _sjsref mod encoding=''utf-8'';';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'put ",""SYSENCODING"" : ""&sysencoding"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}" @;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'put ''>>weboutEND<<'';';
put '%end;';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjsref lrecl=1 recfm=n;';
put 'file &fref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjsref clear;';
put '%end;';
put '%mend mm_webout;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewlibarray.sas';
put '@brief List the libraries for view access';
put '@details';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mm_webout.sas';
put '@li mf_existds.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let keepvars=libraryref libraryname;';
put 'data _null_;';
put 'length keepvars $32;';
put 'set %sysfunc(ifc(%mf_existds(iwant),iwant,_null_));';
put 'call symputx(''keepvars'',keepvars);';
put 'run;';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';';
put '%put securitygroupscount=&securitygroupscount;';
put '%put ALL_CNT=&ALL_CNT;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewlibs();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %do;';
put '%put user in admin group (scenario1=&scenario1);';
put '%return;';
put '%end;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put '%return;';
put '%end;';
put '/* scenario 3 - an *ALL* libref is listed */';
put '%if &all_cnt>0 %then %do;';
put '%put all_cnt=&all_cnt;';
put '%return;';
put '%end;';
put '/* scenario 4 - specific librefs listed */';
put '%if &securitygroupscount>0 %then %do;';
put '%put scenario 4;';
put '%put securitygroupscount=&securitygroupscount;';
put 'proc sql;';
put 'delete from mm_getLibs';
put 'where upcase(libraryref) not in (select upcase(libref) from matches);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic error!)';
put ')';
put '%mend mpestp_viewlibs;';
put '%mpestp_viewlibs()';
put '%global dc_viewlib_check;';
put '/**';
put '* deal with invalid and duplicate library definitions';
put '*/';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'by libraryref;';
put 'if symget(''dc_viewlib_check'')=''YES'' then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings';
put '*/';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sort data=mm_getlibs (keep=&keepvars);';
put 'by libraryname;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mm_webout(OPEN)';
put '%mm_webout(ARR, mm_getLibs)';
put '%mm_webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewlibs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewlibs.sas';
put '@brief List the libraries for view access';
put '@details';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt.lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';';
put '%put securitygroupscount=&securitygroupscount;';
put '%put ALL_CNT=&ALL_CNT;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewlibs();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %do;';
put '%put user in admin group (scenario1=&scenario1);';
put '%return;';
put '%end;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put '%return;';
put '%end;';
put '/* scenario 3 - an *ALL* libref is listed */';
put '%if &all_cnt>0 %then %do;';
put '%put all_cnt=&all_cnt;';
put '%return;';
put '%end;';
put '/* scenario 4 - specific librefs listed */';
put '%if &securitygroupscount>0 %then %do;';
put '%put scenario 4;';
put '%put securitygroupscount=&securitygroupscount;';
put 'proc sql;';
put 'delete from mm_getLibs';
put 'where upcase(libraryref) not in (select upcase(libref) from matches);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic err!)';
put ')';
put '%mend mpestp_viewlibs;';
put '%mpestp_viewlibs()';
put '%global dc_viewlib_check;';
put '/**';
put '* deal with invalid and duplicate library definitions';
put '*/';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'by libraryref;';
put 'if symget(''dc_viewlib_check'')=''YES'' then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings';
put '*/';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sort data=mm_getlibs out=saslibs;';
put 'by libraryname;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,saslibs,missing=STRING)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewtables;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewtables.sas';
put '@brief List the tables and format catalogs the user can view';
put '@details Provide a library and get list of tables and catalogs. Also return';
put 'the libinfo details.';
put ' Service Inputs
';
put ' SASControlTable
';
put 'Just one input - MPLIB (the libref to get tables and info for)';
put '|MPLIB:$char8.|';
put '|---|';
put '|SOMELIB|';
put ' Service Outputs
';
put ' work.mptables
';
put '|MEMNAME:$char32.|';
put '|---|';
put '|DS1|';
put '|DS2|';
put '|DS3|';
put 'etc';
put ' work.libinfo
';
put 'If attributes are empty, they don''t need to be shown on screen.';
put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |';
put '|---|---|---|---|---|---|---|---|---|';
put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mpe_getvars.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global MPLIB;';
put '/* load parameters */';
put '%mpe_getvars(SASControlTable, SASControlTable)';
put '/**';
put '* assign the Library';
put '*/';
put '%put &=MPLIB;';
put '%dc_assignlib(READ,&MPLIB)';
put '%mp_abort(iftrue= (&syscc ne 0 )';
put ',mac=&_program..sas';
put ',msg=%str(Unable to assign &mplib library)';
put ')';
put '/**';
put '* get the tables';
put '*/';
put 'data members; /* empty table */';
put 'name='''';';
put 'memtype='''';';
put 'run;';
put 'ods output Members=Members;';
put 'proc datasets library=&mplib ;';
put 'quit;';
put '/* cannot avoid the proc datasets warn!ng for an empty lib */';
put '/* nolist means no output and nowarn has no effect */';
put '%put &=syscc;';
put 'data _null_;';
put 'if "&syscc" ne "0" then do;';
put 'putlog "Library &mplib is empty, setting syscc to zero";';
put 'call symputx(''syscc'',0);';
put 'end;';
put 'run;';
put '%put &=syscc;';
put 'proc sql;';
put 'create table work.mptables as';
put 'select distinct case when memtype=''CATALOG'' then cats(name,''-FC'')';
put 'else name end as memname';
put 'from members;';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'where also libref in (''*ALL*'',"%upcase(&mplib)");';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches';
put 'where libref=''*ALL*''';
put 'or (libref="&mplib" and dsn=''*ALL*'');';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewtables();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %return;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %return;';
put '/* scenario 3 - an *ALL* libref or DSN is listed */';
put '%if &all_cnt>0 %then %return;';
put '/* scenario 4 - specific tables listed */';
put '%if &securitygroupscount>0 %then %do;';
put 'proc sql;';
put 'delete from mptables';
put 'where upcase(memname) not in (select upcase(dsn) from sec);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put 'data mptables;';
put 'set mptables;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic error!)';
put ')';
put '%mend mpestp_viewtables;';
put '%mpestp_viewtables()';
put '/* get libinfo */';
put 'proc sql;';
put 'create table work.libinfo as';
put 'select a.engine,';
put 'a.libname,';
put 'a.paths,';
put 'a.perms,';
put 'a.owners,';
put 'a.schemas,';
put 'a.libid,';
put 'coalesce(b.libsize,0) as libsize,';
put 'coalesce(b.table_cnt,0) as table_cnt';
put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.libref=b.libref';
put 'where a.libref="&MPLIB";';
put '%webout(OPEN)';
put '%webout(OBJ,mptables)';
put '%webout(OBJ,libinfo)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/validations;
%let service=columns_in_libds;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for table columns';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Inputs
';
put ' work.sourcerow
';
put 'Has source table structure.';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getuniquename.sas';
put '@li mp_abort.sas';
put '@li mp_validatecol.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlibds=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlibds=%mf_getuniquename();';
put '%let var_is_libds=%mf_getuniquename();';
put 'data _null_;';
put 'length xl_libref base_lib select_lib rls_libref cls_libref libref $8';
put 'xl_table base_ds select_ds rls_table cls_table dsn $32;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.source_row;';
put '&varlibds=symget(''libds'');';
put 'if &varlibds="&mpelib..MPE_EXCEL_CONFIG"';
put 'then &vartgtlibds=cats(xl_libref,''.'',xl_table);';
put 'else if &varlibds="&mpelib..MPE_VALIDATIONS"';
put 'then &vartgtlibds=cats(BASE_LIB,''.'',BASE_DS);';
put 'else if &varlibds="&mpelib..MPE_SELECTBOX"';
put 'then &vartgtlibds=cats(select_lib,''.'',select_ds);';
put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"';
put 'then &vartgtlibds=cats(RLS_LIBREF,''.'',RLS_TABLE);';
put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"';
put 'then &vartgtlibds=cats(CLS_LIBREF,''.'',CLS_TABLE);';
put 'else if &varlibds="&mpelib..MPE_TABLES"';
put 'then &vartgtlibds=cats(LIBREF,''.'',DSN);';
put '/* validate libds */';
put '%mp_validatecol(&vartgtlibds,LIBDS,&var_is_libds)';
put 'if &var_is_libds=1 then call symputx(''tgtlibds'',&vartgtlibds);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlibds" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Unable to extract libds vars from &libds inputs for &variable_nm)';
put ')';
put '%dc_assignlib(READ,%scan(&tgtlibds,1,.))';
put 'proc contents noprint data=&tgtlibds';
put 'out=work.DYNAMIC_VALUES (keep=name rename=(name=display_value) );';
put 'run;';
put 'data work.DYNAMIC_VALUES;';
put 'set work.DYNAMIC_VALUES;';
put 'raw_value=upcase(display_value);';
put 'format raw_value;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=libraries_all;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct libraryname as display_value,';
put 'upcase(libraryref) as raw_value';
put 'from work.mm_getLibs';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=libraries_editable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for editable libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put '**/';
put '/* send back the raw and formatted values */';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct libref as display_value,';
put 'upcase(libref) as raw_value';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. < tx_to';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_alerts.alert_lib;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief fetch extended values for alert_lib';
put '@details Fetches libraries from mpe_tables, creates extended values for';
put 'alert_ds, and marks "*ALL*" as the forced (default) value.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put 'The FORCED_VALUE column can be used to force an extended value to be selected';
put 'by default when a particular value is chosen.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|';
put '|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|1|DISCOUNT_RT|"40%"|N|0.4||0|';
put '|1|DISCOUNT_RT|"30%"|N|0.3||1|';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|2|DISCOUNT_RT|"40%"|N|0.4||1|';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '%mp_abort(iftrue= ("%upcase(&libds)" ne "&DC_LIBREF..MPE_ALERTS" )';
put ',mac=&_program';
put ',msg=%str(';
put 'Invalid validation, expected MPE_ALERTS.ALERT_LIB, got %superq(libds)';
put ')';
put ')';
put 'proc sql;';
put 'create table work.source as';
put 'select libref,dsn';
put 'from &DC_LIBREF..MPE_TABLES';
put 'where tx_to > &dc_dttmtfmt.';
put 'order by 1,2;';
put 'data work.DYNAMIC_VALUES (keep=display_index raw_value display_value);';
put 'set work.source end=last;';
put 'by libref;';
put 'if last.libref then do;';
put 'display_index+1;';
put 'raw_value=libref;';
put 'display_value=libref;';
put 'output;';
put 'end;';
put 'if last then do;';
put 'display_index+1;';
put 'raw_value=''*ALL*'';';
put 'display_value=''*ALL*'';';
put 'output;';
put 'end;';
put 'run;';
put 'data work.dynamic_extended_values(keep=display_index extra_col_name display_type';
put 'display_value RAW_VALUE_CHAR raw_value_num forced_value);';
put 'set work.source end=last;';
put 'by libref dsn;';
put 'retain extra_col_name ''ALERT_DS'';';
put 'retain display_type ''C'';';
put 'retain raw_value_num .;';
put 'raw_value_char=dsn;';
put 'display_value=dsn;';
put 'forced_value=0;';
put 'if first.libref then display_index+1;';
put 'if last.libref then do;';
put 'display_value=''*ALL*'';';
put 'raw_value_char=''*ALL*'';';
put 'forced_value=1;';
put 'output;';
put 'end;';
put 'else output;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_tables.dsn;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief fetch extended values for DSN';
put '@details Fetches datasets in a library, and ALSO fetches a list of numeric';
put 'vars for each dataset for use in adjacent columns (such as VAR_PROCESSED,';
put 'TX_TO etc).';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put 'The FORCED_VALUE column can be used to force an extended value to be selected';
put 'by default when a particular value is chosen.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|';
put '|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|1|DISCOUNT_RT|"40%"|N|0.4||0|';
put '|1|DISCOUNT_RT|"30%"|N|0.3||1|';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|2|DISCOUNT_RT|"40%"|N|0.4||1|';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlib=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlib=%mf_getuniquename();';
put '%let var_is_lib=%mf_getuniquename();';
put 'data _null_;';
put 'length &varlibds $41 &vartgtlib $8;';
put 'set work.source_row;';
put '&varlibds=upcase(symget(''libds''));';
put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;';
put 'else putlog "something unexpected happened";';
put '/* validate name */';
put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);';
put 'call symputx(''vartgtlib'',&vartgtlib);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlib" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Invalid library - %superq(vartgtlib))';
put ',errds=work.dc_error_response';
put ')';
put '%dc_assignlib(READ,&tgtlib)';
put 'proc sql;';
put 'create table work.source as';
put 'select upcase(memname) as memname';
put ',upcase(name) as name';
put ',type';
put 'from dictionary.columns';
put 'where libname="&TGTLIB"';
put 'and memtype=''DATA'';';
put 'create table work.members as';
put 'select distinct memname as display_value';
put 'from work.source;';
put 'data work.DYNAMIC_VALUES;';
put 'set work.members;';
put 'raw_value=display_value;';
put 'display_index=_n_;';
put 'run;';
put 'proc sql;';
put 'create table work.dynamic_extended_values as';
put 'select a.display_index';
put ',b.name as display_value';
put ',"C" as display_type';
put ',b.name as RAW_VALUE_CHAR';
put ',. as RAW_VALUE_NUM';
put 'from work.dynamic_values a';
put 'left join work.source b';
put 'on a.display_value=b.memname';
put 'where b.type=''num'';';
put 'data work.dynamic_extended_values;';
put 'set work.DYNAMIC_EXTENDED_VALUES;';
put 'extra_col_name=''VAR_PROCESSED'';output;';
put 'extra_col_name=''VAR_TXFROM'';output;';
put 'extra_col_name=''VAR_TXTO'';output;';
put 'extra_col_name=''VAR_BUSFROM'';output;';
put 'extra_col_name=''VAR_BUSTO'';output;';
put 'run;';
put '/* set some force flags */';
put 'data work.dynamic_extended_values;';
put 'set work.DYNAMIC_EXTENDED_VALUES;';
put 'forced_value=0;';
put 'if extra_col_name=''VAR_TXFROM'' & raw_value_char=''TX_FROM'' then forced_value=1;';
put 'if extra_col_name=''VAR_TXTO'' & raw_value_char=''TX_TO'' then forced_value=1;';
put 'run;';
put 'proc sort;';
put 'by extra_col_name display_index;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_x_test.some_num;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put '|DISPLAY_VALUE:$|RAW_VALUE:??|';
put '|---|---|';
put '|$44.00|44|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct cats(some_num) as display_value,';
put 'some_num as raw_value';
put 'from &libds';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sas_groups;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroups(access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroups';
put ');';
put '%local oauth_bearer base_uri fname1 libref1;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '/* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getgroups;';
put '%macro dc_getgroups(outds=mm_getgroups);';
put '%mv_getgroups(outds=&outds)';
put 'proc sort';
put 'data=&outds(rename=(id=groupuri name=groupname description=groupdesc))';
put 'out=&outds (keep=groupuri groupname groupdesc);';
put 'by groupname;';
put 'run;';
put '%mend dc_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief validating the mpe_security.sas_group column';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_getgroups.sas';
put '**/';
put '%dc_getgroups(outds=groups)';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct groupname as display_value,';
put 'groupname as raw_value';
put 'from work.groups';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tables_all;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for tables in a library';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlib=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlib=%mf_getuniquename();';
put '%let var_is_lib=%mf_getuniquename();';
put 'data _null_;';
put 'length &varlibds $41 &vartgtlib $8 libref $8 rls_libref $8;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.source_row;';
put '&varlibds=upcase(symget(''libds''));';
put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;';
put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"';
put 'then &vartgtlib=RLS_LIBREF;';
put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"';
put 'then &vartgtlib=CLS_LIBREF;';
put '/* validate name */';
put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);';
put 'call symputx(''vartgtlib'',&vartgtlib);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlib" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Invalid library - %superq(vartgtlib))';
put ',errds=work.dc_error_response';
put ')';
put '%dc_assignlib(READ,&tgtlib)';
put 'data members; /* empty table */';
put 'name='' '';';
put 'run;';
put 'ods output Members=Members;';
put 'proc datasets library=&tgtlib ;';
put 'run;';
put '/* send back the raw and formatted values */';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct name as display_value,';
put 'upcase(name) as raw_value';
put 'from work.members';
put 'where MemType=''DATA''';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tables_editable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for editable libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Inputs
';
put ' work.source_row
';
put '|libref:$8|';
put '|somelib|';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5|` `|';
put '|1|DISCOUNT_RT|"40%"|N|0.4|` `|';
put '|1|DISCOUNT_RT|"30%"|N|0.3|` `|';
put '|1|CURRENCY_SYMBOL|"GBP"|C|` `|"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C|` `|"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5|` `|';
put '|2|DISCOUNT_RT|"40%"|N|0.4|` `|';
put '|2|CURRENCY_SYMBOL|"EUR"|C|` `|"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C|` `|"HKD"|';
put '**/';
put '/* send back the raw and formatted values */';
put 'data _null_;';
put 'var=symget(''variable_nm'');';
put 'libds=symget(''libds'');';
put 'if libds="&mpelib..MPE_EXCEL_CONFIG" and var=''XL_TABLE'' then do;';
put 'call symputx(''srccol'',''XL_LIBREF'');';
put 'end;';
put 'else call symputx(''srccol'',''libref'');';
put 'run;';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct dsn as display_value,';
put 'upcase(dsn) as raw_value';
put 'from &mpelib..mpe_tables';
put '(where=(&dc_dttmtfmt. < tx_to))';
put 'where libref in (select &srccol from work.source_row)';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/viya_users;
%let service=usergroupsbymember;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usergroupsbymember.sas';
put '@brief List the groups a member is in';
put '@details Runs without \%mpeinit() - this enables the dropdown to be populated';
put 'during configuration, when the settings service does not yet exist.';
put ' SAS Macros
';
put '@li mv_getusergroups.sas';
put '@li mf_getuser.sas';
put '@version 3.4';
put '@author 4GL Apps Ltd';
put '**/';
put '%mv_getusergroups(%mf_getuser(),outds=groups)';
put 'proc sort data=groups(rename=(id=uri name=groupname providerid=groupdesc))';
put 'out=groups;';
put 'by groupname;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,groups)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=usermembers;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusers(outds=work.mv_getusers';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users?limit=10000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var"';
put '"Accept"="application/json";';
put '%end;';
put '%else %do;';
put 'headers "Accept"="application/json";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusers;';
put '%macro dc_getusers(outds=mm_getlibs);';
put '%mv_getusers(outds=&outds)';
put 'proc sort data=&outds(rename=(id=uri)) out=&outds(keep=uri name);';
put 'by name;';
put 'run;';
put '%mend dc_getusers;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usermembers.sas';
put '@brief List all SAS users';
put '@details Gets a list of all SAS users';
put ' SAS Macros
';
put '@li dc_getusers.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%dc_getusers(outds=users)';
put '%webout(OPEN)';
put '%webout(OBJ,users)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=usermembersbygroup;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '/* turn off with dsoptions=nonote2err */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put '/* extracted in dc_getsettings */';
put 'dc_activation_key';
put 'dc_licence_key';
put 'dc_locale';
put 'dc_request_logs';
put 'dc_restrict_viewer';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put 'sqlrc /* avoid errors when using DI jobs in HOOK scripts */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put 'and &DC_REQUEST_LOGS ne NO';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put '/* sleep random amount to avoid parallel update attempts */';
put 'call sleep(ranuni(0)*0.1,1);';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroupmembers(group';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroupmembers';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups/&group/members?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: Group &group not found!!;';
put 'data &outds;';
put 'length id name $43;';
put 'call missing(of _all_);';
put 'run;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'length id name $43;';
put 'set &libref1..items;';
put 'run;';
put 'libname &libref1 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put '%mend mv_getgroupmembers;';
put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);';
put '%mv_getgroupmembers(%str(&group),outds=&outds)';
put 'data &outds ;';
put 'length membername $64;';
put 'set &outds(rename=(name=MemberName));';
put 'run;';
put '%mend dc_getgroupmembers;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usermembersbygroup.sas';
put '@brief List the members of a group';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@li dc_getgroupmembers.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'data _null_;';
put 'set iwant;';
put 'call symputx(''groupid'',groupid);';
put 'run;';
put '%dc_getgroupmembers(%str(&groupid),outds=sasMembers)';
put 'proc sort data=sasMembers;';
put 'by membername;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,sasMembers)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/web;
%let filename=411.26896d93e056dcb9.js;
filename filecode temp lrecl=427440;
data _null_;
file filecode;
put 'KCgpPT57InVzZSBzdHJpY3QiO3ZhciBEcj0xMjAwLFJ0PTEyNTIsRGM9Wzg3NCw5MzIsOTM2LDk0OSw5NTAsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxMjU3LDEyNTgsMWU0XSxMMD17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEz'@;
put 'MDoxMzYxLDEzNDo5MzYsMTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LGUwPWZ1bmN0aW9uKGUpey0xIT1EYy5pbmRleE9mKGUpJiYoUnQ9TDBbMF09'@;
put 'ZSl9LE1yPWZ1bmN0aW9uKGUpe0RyPWUsZTAoZSl9O2Z1bmN0aW9uIHIwKCl7TXIoMTIwMCksZnVuY3Rpb24gT2MoKXtlMCgxMjUyKX0oKX1mdW5jdGlvbiB0MChlKXtmb3IodmFyIHQ9W10scj0wLGE9ZS5sZW5ndGg7cjxhOysrcil0W3JdPWUuY2hhckNvZGVBdChyKTtyZXR1cm4gdH1mdW5j'@;
put 'dGlvbiBhaShlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg+PjE7KytyKXRbcl09U3RyaW5nLmZyb21DaGFyQ29kZShlLmNoYXJDb2RlQXQoMipyKzEpKyhlLmNoYXJDb2RlQXQoMipyKTw8OCkpO3JldHVybiB0LmpvaW4oIiIpfXZhciBPZSxRdD1mdW5jdGlvbihlKXt2YXIgdD1lLmNo'@;
put 'YXJDb2RlQXQoMCkscj1lLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09dCYmMjU0PT1yP2Z1bmN0aW9uIEljKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aD4+MTsrK3IpdFtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCgyKnIpKyhlLmNoYXJDb2RlQXQoMipyKzEp'@;
put 'PDw4KSk7cmV0dXJuIHQuam9pbigiIil9KGUuc2xpY2UoMikpOjI1ND09dCYmMjU1PT1yP2FpKGUuc2xpY2UoMikpOjY1Mjc5PT10P2Uuc2xpY2UoMSk6ZX0scGE9ZnVuY3Rpb24odCl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCl9LEIwPWZ1bmN0aW9uKHQpe3JldHVybiBTdHJpbmcu'@;
put 'ZnJvbUNoYXJDb2RlKHQpfSx6ZT1udWxsLGd0PSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7ZnVuY3Rpb24gZ2EoZSl7Zm9yKHZhciB0PSIiLHI9MCxhPTAsbj0wLGk9MCxzPTAsZj0wLGM9MCxvPTA7bzxlLmxlbmd0'@;
put 'aDspaT0ocj1lLmNoYXJDb2RlQXQobysrKSk+PjIscz0oMyZyKTw8NHwoYT1lLmNoYXJDb2RlQXQobysrKSk+PjQsZj0oMTUmYSk8PDJ8KG49ZS5jaGFyQ29kZUF0KG8rKykpPj42LGM9NjMmbixpc05hTihhKT9mPWM9NjQ6aXNOYU4obikmJihjPTY0KSx0Kz1ndC5jaGFyQXQoaSkrZ3QuY2hh'@;
put 'ckF0KHMpK2d0LmNoYXJBdChmKStndC5jaGFyQXQoYyk7cmV0dXJuIHR9ZnVuY3Rpb24gT3IoZSl7dmFyIHQ9IiIsaT0wLHM9MCxmPTAsYz0wO2U9ZS5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIiKTtmb3IodmFyIG89MDtvPGUubGVuZ3RoOylpPWd0LmluZGV4T2YoZS5jaGFyQXQobysrKSks'@;
put 'cz1ndC5pbmRleE9mKGUuY2hhckF0KG8rKykpLHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaTw8MnxzPj40KSw2NCE9PShmPWd0LmluZGV4T2YoZS5jaGFyQXQobysrKSkpJiYodCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmcyk8PDR8Zj4+MikpLDY0IT09KGM9Z3QuaW5kZXhPZihlLmNoYXJB'@;
put 'dChvKyspKSkmJih0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzJmYpPDw2fGMpKTtyZXR1cm4gdH12YXIgU2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEJ1ZmZlcjwidSImJnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYhIXByb2Nlc3MudmVyc2lv'@;
put 'bnMubm9kZX0oKSxvdD1mdW5jdGlvbigpe2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgZT0hQnVmZmVyLmZyb207aWYoIWUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7ZT0hMH1yZXR1cm4gZT9mdW5jdGlvbih0LHIpe3JldHVybiByP25ldyBCdWZmZXIodCxyKTpuZXcg'@;
put 'QnVmZmVyKHQpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlcil9cmV0dXJuIGZ1bmN0aW9uKCl7fX0oKTtmdW5jdGlvbiBfdChlKXtyZXR1cm4gU2U/QnVmZmVyLmFsbG9jP0J1ZmZlci5hbGxvYyhlKTpuZXcgQnVmZmVyKGUpOnR5cGVvZiBVaW50OEFycmF5PCJ1Ij9uZXcgVWludDhBcnJheShl'@;
put 'KTpuZXcgQXJyYXkoZSl9ZnVuY3Rpb24gbmkoZSl7cmV0dXJuIFNlP0J1ZmZlci5hbGxvY1Vuc2FmZT9CdWZmZXIuYWxsb2NVbnNhZmUoZSk6bmV3IEJ1ZmZlcihlKTp0eXBlb2YgVWludDhBcnJheTwidSI/bmV3IFVpbnQ4QXJyYXkoZSk6bmV3IEFycmF5KGUpfXZhciBJcj1mdW5jdGlvbih0'@;
put 'KXtyZXR1cm4gU2U/b3QodCwiYmluYXJ5Iik6dC5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKHIpe3JldHVybiAyNTUmci5jaGFyQ29kZUF0KDApfSl9O2Z1bmN0aW9uIHd0KGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGUubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcuZnJvbUNo'@;
put 'YXJDb2RlKGEpfSkuam9pbigiIik7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0W3JdPVN0cmluZy5mcm9tQ2hhckNvZGUoZVtyXSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gTTAoZSl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3Vw'@;
put 'cG9ydGVkIik7aWYoZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBNMChuZXcgVWludDhBcnJheShlKSk7Zm9yKHZhciB0PW5ldyBBcnJheShlLmxlbmd0aCkscj0wO3I8ZS5sZW5ndGg7KytyKXRbcl09ZVtyXTtyZXR1cm4gdH12YXIgZnI9U2U/ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1'@;
put 'ZmZlci5jb25jYXQoZS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KT90Om90KHQpfSkpfTpmdW5jdGlvbihlKXtpZih0eXBlb2YgVWludDhBcnJheTwidSIpe3ZhciB0PTAscj0wO2Zvcih0PTA7dDxlLmxlbmd0aDsrK3Qpcis9ZVt0XS5sZW5ndGg7dmFyIGE9bmV3'@;
put 'IFVpbnQ4QXJyYXkociksbj0wO2Zvcih0PTAscj0wO3Q8ZS5sZW5ndGg7cis9biwrK3QpaWYobj1lW3RdLmxlbmd0aCxlW3RdaW5zdGFuY2VvZiBVaW50OEFycmF5KWEuc2V0KGVbdF0scik7ZWxzZXtpZigic3RyaW5nIj09dHlwZW9mIGVbdF0pdGhyb3cid3RmIjthLnNldChuZXcgVWludDhB'@;
put 'cnJheShlW3RdKSxyKX1yZXR1cm4gYX1yZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sZS5tYXAoZnVuY3Rpb24oaSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoaSk/aTpbXS5zbGljZS5jYWxsKGkpfSkpfSxkcj0vXHUwMDAwL2csd2E9L1tcdTAwMDEtXHUwMDA2XS9nO2Z1bmN0aW9uIGVhKGUpe2Zv'@;
put 'cih2YXIgdD0iIixyPWUubGVuZ3RoLTE7cj49MDspdCs9ZS5jaGFyQXQoci0tKTtyZXR1cm4gdH1mdW5jdGlvbiBZcihlLHQpe3ZhciByPSIiK2U7cmV0dXJuIHIubGVuZ3RoPj10P3I6amUoIjAiLHQtci5sZW5ndGgpK3J9ZnVuY3Rpb24gVTAoZSx0KXt2YXIgcj0iIitlO3JldHVybiByLmxl'@;
put 'bmd0aD49dD9yOmplKCIgIix0LXIubGVuZ3RoKStyfWZ1bmN0aW9uIGEwKGUsdCl7dmFyIHI9IiIrZTtyZXR1cm4gci5sZW5ndGg+PXQ/cjpyK2plKCIgIix0LXIubGVuZ3RoKX12YXIgaWk9TWF0aC5wb3coMiwzMik7ZnVuY3Rpb24gcmEoZSx0KXtyZXR1cm4gZT5paXx8ZTwtaWk/ZnVuY3Rp'@;
put 'b24gYmMoZSx0KXt2YXIgcj0iIitNYXRoLnJvdW5kKGUpO3JldHVybiByLmxlbmd0aD49dD9yOmplKCIwIix0LXIubGVuZ3RoKStyfShlLHQpOmZ1bmN0aW9uIFBjKGUsdCl7dmFyIHI9IiIrZTtyZXR1cm4gci5sZW5ndGg+PXQ/cjpqZSgiMCIsdC1yLmxlbmd0aCkrcn0oTWF0aC5yb3VuZChl'@;
put 'KSx0KX1mdW5jdGlvbiBuMChlLHQpe3JldHVybiBlLmxlbmd0aD49NysodD10fHwwKSYmMTAzPT0oMzJ8ZS5jaGFyQ29kZUF0KHQpKSYmMTAxPT0oMzJ8ZS5jaGFyQ29kZUF0KHQrMSkpJiYxMTA9PSgzMnxlLmNoYXJDb2RlQXQodCsyKSkmJjEwMT09KDMyfGUuY2hhckNvZGVBdCh0KzMpKSYm'@;
put 'MTE0PT0oMzJ8ZS5jaGFyQ29kZUF0KHQrNCkpJiY5Nz09KDMyfGUuY2hhckNvZGVBdCh0KzUpKSYmMTA4PT0oMzJ8ZS5jaGFyQ29kZUF0KHQrNikpfXZhciBzaT1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwiV2VkbmVzZGF5Il0s'@;
put 'WyJUaHUiLCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxXMD1bWyJKIiwiSmFuIiwiSmFudWFyeSJdLFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1heSIsIk1heSJdLFsi'@;
put 'SiIsIkp1biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0sWyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV0scGU9ezA6IkdlbmVyYWwi'@;
put 'LDE6IjAiLDI6IjAuMDAiLDM6IiMsIyMwIiw0OiIjLCMjMC4wMCIsOToiMCUiLDEwOiIwLjAwJSIsMTE6IjAuMDBFKzAwIiwxMjoiIyA/Lz8iLDEzOiIjID8/Lz8/IiwxNDoibS9kL3l5IiwxNToiZC1tbW0teXkiLDE2OiJkLW1tbSIsMTc6Im1tbS15eSIsMTg6Img6bW0gQU0vUE0iLDE5OiJo'@;
put 'Om1tOnNzIEFNL1BNIiwyMDoiaDptbSIsMjE6Img6bW06c3MiLDIyOiJtL2QveXkgaDptbSIsMzc6IiMsIyMwIDsoIywjIzApIiwzODoiIywjIzAgO1tSZWRdKCMsIyMwKSIsMzk6IiMsIyMwLjAwOygjLCMjMC4wMCkiLDQwOiIjLCMjMC4wMDtbUmVkXSgjLCMjMC4wMCkiLDQ1OiJtbTpzcyIs'@;
put 'NDY6IltoXTptbTpzcyIsNDc6Im1tc3MuMCIsNDg6IiMjMC4wRSswIiw0OToiQCIsNTY6JyJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4ICJoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiAiJ30sZmk9ezU6MzcsNjozOCw3OjM5LDg6NDAsMjM6MCwyNDowLDI1OjAsMjY6MCwyNzoxNCwy'@;
put 'ODoxNCwyOToxNCwzMDoxNCwzMToxNCw1MDoxNCw1MToxNCw1MjoxNCw1MzoxNCw1NDoxNCw1NToxNCw1NjoxNCw1NzoxNCw1ODoxNCw1OToxLDYwOjIsNjE6Myw2Mjo0LDY3OjksNjg6MTAsNjk6MTIsNzA6MTMsNzE6MTQsNzI6MTQsNzM6MTUsNzQ6MTYsNzU6MTcsNzY6MjAsNzc6MjEsNzg6'@;
put 'MjIsNzk6NDUsODA6NDYsODE6NDcsODI6MH0sQmM9ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDY0OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDc6'@;
put 'JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDQxOidfKCogIywj'@;
put 'IzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiBcXCgjLCMjMC4wMFxcKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAj'@;
put 'LCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKSd9O2Z1bmN0aW9uIGkwKGUsdCxyKXtmb3IodmFyIGE9ZTwwPy0xOjEsbj1lKmEsaT0wLHM9MSxmPTAsYz0xLG89MCxsPTAsaD1NYXRoLmZsb29yKG4pO288dCYmKGY9KGg9TWF0aC5mbG9vcihuKSkq'@;
put 'cytpLGw9aCpvK2MsIShuLWg8NWUtOCkpOyluPTEvKG4taCksaT1zLHM9ZixjPW8sbz1sO2lmKGw+dCYmKG8+dD8obD1jLGY9aSk6KGw9byxmPXMpKSwhcilyZXR1cm5bMCxhKmYsbF07dmFyIHg9TWF0aC5mbG9vcihhKmYvbCk7cmV0dXJuW3gsYSpmLXgqbCxsXX1mdW5jdGlvbiBrdChlLHQs'@;
put 'cil7aWYoZT4yOTU4NDY1fHxlPDApcmV0dXJuIG51bGw7dmFyIGE9MHxlLG49TWF0aC5mbG9vcig4NjQwMCooZS1hKSksaT0wLHM9W10sZj17RDphLFQ6bix1Ojg2NDAwKihlLWEpLW4seTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhmLnUpPDFlLTYmJihmLnU9MCks'@;
put 'dCYmdC5kYXRlMTkwNCYmKGErPTE0NjIpLGYudT4uOTk5OSYmKGYudT0wLDg2NDAwPT0rK24mJihmLlQ9bj0wLCsrYSwrK2YuRCkpLDYwPT09YSlzPXI/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLGk9MztlbHNlIGlmKDA9PT1hKXM9cj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLGk9NjtlbHNl'@;
put 'e2E+NjAmJi0tYTt2YXIgYz1uZXcgRGF0ZSgxOTAwLDAsMSk7Yy5zZXREYXRlKGMuZ2V0RGF0ZSgpK2EtMSkscz1bYy5nZXRGdWxsWWVhcigpLGMuZ2V0TW9udGgoKSsxLGMuZ2V0RGF0ZSgpXSxpPWMuZ2V0RGF5KCksYTw2MCYmKGk9KGkrNiklNyksciYmKGk9ZnVuY3Rpb24gWGMoZSx0KXt0'@;
put 'WzBdLT01ODE7dmFyIHI9ZS5nZXREYXkoKTtyZXR1cm4gZTw2MCYmKHI9KHIrNiklNykscn0oYyxzKSl9cmV0dXJuIGYueT1zWzBdLGYubT1zWzFdLGYuZD1zWzJdLGYuUz1uJTYwLG49TWF0aC5mbG9vcihuLzYwKSxmLk09biU2MCxuPU1hdGguZmxvb3Iobi82MCksZi5IPW4sZi5xPWksZn12'@;
put 'YXIgY2k9bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksTWM9Y2kuZ2V0VGltZSgpLFVjPW5ldyBEYXRlKDE5MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiBvaShlLHQpe3ZhciByPWUuZ2V0VGltZSgpO3JldHVybiB0P3ItPTEyNjIzMDRlNTplPj1VYyYmKHIrPTg2NGU1KSwoci0oTWMrNmU0Kihl'@;
put 'LmdldFRpbWV6b25lT2Zmc2V0KCktY2kuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX1mdW5jdGlvbiBIMChlKXtyZXR1cm4tMT09ZS5pbmRleE9mKCIuIik/ZTplLnJlcGxhY2UoLyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspJC8sIiQxIil9ZnVuY3Rpb24ga2EoZSl7dmFyIHIsdD1NYXRo'@;
put 'LmZsb29yKE1hdGgubG9nKE1hdGguYWJzKGUpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIHI9dD49LTQmJnQ8PS0xP2UudG9QcmVjaXNpb24oMTArdCk6TWF0aC5hYnModCk8PTk/ZnVuY3Rpb24gSGMoZSl7dmFyIHQ9ZTwwPzEyOjExLHI9SDAoZS50b0ZpeGVkKDEyKSk7cmV0dXJuIHIubGVuZ3Ro'@;
put 'PD10fHwocj1lLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD10P3I6ZS50b0V4cG9uZW50aWFsKDUpfShlKToxMD09PXQ/ZS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gVmMoZSl7dmFyIHQ9SDAoZS50b0ZpeGVkKDExKSk7cmV0dXJuIHQubGVuZ3RoPihlPDA/MTI6MTEpfHwi'@;
put 'MCI9PT10fHwiLTAiPT09dD9lLnRvUHJlY2lzaW9uKDYpOnR9KGUpLEgwKGZ1bmN0aW9uIFdjKGUpe3JldHVybi0xPT1lLmluZGV4T2YoIkUiKT9lOmUucmVwbGFjZSgvKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLywiJDFFIikucmVwbGFjZSgvKEVbKy1dKShcZCkkLywiJDEwJDIiKX0o'@;
put 'ci50b1VwcGVyQ2FzZSgpKSl9ZnVuY3Rpb24gTnQoZSx0KXtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjpyZXR1cm4gZTtjYXNlImJvb2xlYW4iOnJldHVybiBlPyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxlKT09PWU/ZS50b1N0cmluZygxMCk6a2EoZSk7Y2Fz'@;
put 'ZSJ1bmRlZmluZWQiOnJldHVybiIiO2Nhc2Uib2JqZWN0IjppZihudWxsPT1lKXJldHVybiIiO2lmKGUgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBScigxNCxvaShlLHQmJnQuZGF0ZTE5MDQpLHQpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgdmFsdWUgaW4gR2VuZXJhbCBmb3JtYXQ6'@;
put 'ICIrZSl9ZnVuY3Rpb24gR2MoZSx0LHIsYSl7dmFyIGMsbj0iIixpPTAscz0wLGY9ci55LG89MDtzd2l0Y2goZSl7Y2FzZSA5ODpmPXIueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ZiUxMDAsbz0yO2JyZWFrO2RlZmF1bHQ6Yz1mJTFlNCxvPTR9YnJl'@;
put 'YWs7Y2FzZSAxMDk6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ci5tLG89dC5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBXMFtyLm0tMV1bMV07Y2FzZSA1OnJldHVybiBXMFtyLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4gVzBbci5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3'@;
put 'aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIuZCxvPXQubGVuZ3RoO2JyZWFrO2Nhc2UgMzpyZXR1cm4gc2lbci5xXVswXTtkZWZhdWx0OnJldHVybiBzaVtyLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPTErKHIuSCsxMSklMTIs'@;
put 'bz10Lmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIit0fWJyZWFrO2Nhc2UgNzI6c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOmM9ci5ILG89dC5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrdH1icmVhaztjYXNl'@;
put 'IDc3OnN3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpjPXIuTSxvPXQubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrdH1icmVhaztjYXNlIDExNTppZigicyIhPXQmJiJzcyIhPXQmJiIuMCIhPXQmJiIuMDAiIT10JiYiLjAwMCIhPXQpdGhyb3ci'@;
put 'YmFkIHNlY29uZCBmb3JtYXQ6ICIrdDtyZXR1cm4gMCE9PXIudXx8InMiIT10JiYic3MiIT10PyhzPWE+PTI/Mz09PWE/MWUzOjEwMDoxPT09YT8xMDoxLChpPU1hdGgucm91bmQocyooci5TK3IudSkpKT49NjAqcyYmKGk9MCksInMiPT09dD8wPT09aT8iMCI6IiIraS9zOihuPVlyKGksMith'@;
put 'KSwic3MiPT09dD9uLnN1YnN0cigwLDIpOiIuIituLnN1YnN0cigyLHQubGVuZ3RoLTEpKSk6WXIoci5TLHQubGVuZ3RoKTtjYXNlIDkwOnN3aXRjaCh0KXtjYXNlIltoXSI6Y2FzZSJbaGhdIjpjPTI0KnIuRCtyLkg7YnJlYWs7Y2FzZSJbbV0iOmNhc2UiW21tXSI6Yz02MCooMjQqci5EK3Iu'@;
put 'SCkrci5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmM9NjAqKDYwKigyNCpyLkQrci5IKStyLk0pK01hdGgucm91bmQoci5TK3IudSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIrdH1vPTM9PT10Lmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6Yz1mLG89'@;
put 'MX1yZXR1cm4gbz4wP1lyKGMsbyk6IiJ9ZnVuY3Rpb24gRXQoZSl7aWYoZS5sZW5ndGg8PTMpcmV0dXJuIGU7Zm9yKHZhciByPWUubGVuZ3RoJTMsYT1lLnN1YnN0cigwLHIpO3IhPWUubGVuZ3RoO3IrPTMpYSs9KGEubGVuZ3RoPjA/IiwiOiIiKStlLnN1YnN0cihyLDMpO3JldHVybiBhfXZh'@;
put 'ciBsaT0vJS9nO2Z1bmN0aW9uIHVpKGUsdCl7dmFyIHIsYT1lLmluZGV4T2YoIkUiKS1lLmluZGV4T2YoIi4iKS0xO2lmKGUubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PXQpcmV0dXJuIjAuMEUrMCI7aWYodDwwKXJldHVybiItIit1aShlLC10KTt2YXIgbj1lLmluZGV4T2YoIi4iKTst'@;
put 'MT09PW4mJihuPWUuaW5kZXhPZigiRSIpKTt2YXIgaT1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKSVuO2lmKGk8MCYmKGkrPW4pLC0xPT09KHI9KHQvTWF0aC5wb3coMTAsaSkpLnRvUHJlY2lzaW9uKGErMSsobitpKSVuKSkuaW5kZXhPZigiZSIpKXt2YXIgcz1NYXRoLmZs'@;
put 'b29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1yLmluZGV4T2YoIi4iKT9yPXIuY2hhckF0KDApKyIuIityLnN1YnN0cigxKSsiRSsiKyhzLXIubGVuZ3RoK2kpOnIrPSJFKyIrKHMtaSk7IjAuIj09PXIuc3Vic3RyKDAsMik7KXI9KHI9ci5jaGFyQXQoMCkrci5zdWJzdHIo'@;
put 'MixuKSsiLiIrci5zdWJzdHIoMituKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO3I9ci5yZXBsYWNlKC9cKy0vLCItIil9cj1yLnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oZixjLG8sbCl7cmV0dXJuIGMrbyts'@;
put 'LnN1YnN0cigwLChuK2kpJW4pKyIuIitsLnN1YnN0cihpKSsiRSJ9KX1lbHNlIHI9dC50b0V4cG9uZW50aWFsKGEpO3JldHVybiBlLm1hdGNoKC9FXCswMCQvKSYmci5tYXRjaCgvZVsrLV1cZCQvKSYmKHI9ci5zdWJzdHIoMCxyLmxlbmd0aC0xKSsiMCIrci5jaGFyQXQoci5sZW5ndGgtMSkp'@;
put 'LGUubWF0Y2goL0VcLS8pJiZyLm1hdGNoKC9lXCsvKSYmKHI9ci5yZXBsYWNlKC9lXCsvLCJlIikpLHIucmVwbGFjZSgiZSIsIkUiKX12YXIgaGk9LyMgKFw/KykoID8pXC8oID8pKFxkKykvLHhpPS9eIyowKlwuKFswI10rKS8sZGk9L1wpLipbMCNdLyx2aT0vXCgjIyNcKSAjIyNcXD8tIyMj'@;
put 'Iy87ZnVuY3Rpb24gVHIoZSl7Zm9yKHZhciByLHQ9IiIsYT0wO2EhPWUubGVuZ3RoOysrYSlzd2l0Y2gocj1lLmNoYXJDb2RlQXQoYSkpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2Mzp0Kz0iICI7YnJlYWs7Y2FzZSA0ODp0Kz0iMCI7YnJlYWs7ZGVmYXVsdDp0Kz1TdHJpbmcuZnJvbUNoYXJDb2Rl'@;
put 'KHIpfXJldHVybiB0fWZ1bmN0aW9uIHBpKGUsdCl7dmFyIHI9TWF0aC5wb3coMTAsdCk7cmV0dXJuIiIrTWF0aC5yb3VuZChlKnIpL3J9ZnVuY3Rpb24gbWkoZSx0KXt2YXIgcj1lLU1hdGguZmxvb3IoZSksYT1NYXRoLnBvdygxMCx0KTtyZXR1cm4gdDwoIiIrTWF0aC5yb3VuZChyKmEpKS5s'@;
put 'ZW5ndGg/MDpNYXRoLnJvdW5kKHIqYSl9ZnVuY3Rpb24gVXIoZSx0LHIpe2lmKDQwPT09ZS5jaGFyQ29kZUF0KDApJiYhdC5tYXRjaChkaSkpe3ZhciBhPXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHI+PTA/VXIoIm4iLGEs'@;
put 'cik6IigiK1VyKCJuIixhLC1yKSsiKSJ9aWYoNDQ9PT10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uICRjKGUsdCxyKXtmb3IodmFyIGE9dC5sZW5ndGgtMTs0ND09PXQuY2hhckNvZGVBdChhLTEpOyktLWE7cmV0dXJuIGx0KGUsdC5zdWJzdHIoMCxhKSxyL01hdGgu'@;
put 'cG93KDEwLDMqKHQubGVuZ3RoLWEpKSl9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiB6YyhlLHQscil7dmFyIGE9dC5yZXBsYWNlKGxpLCIiKSxuPXQubGVuZ3RoLWEubGVuZ3RoO3JldHVybiBsdChlLGEscipNYXRoLnBvdygxMCwyKm4pKStqZSgiJSIs'@;
put 'bil9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiRSIpKXJldHVybiB1aSh0LHIpO2lmKDM2PT09dC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitVcihlLHQuc3Vic3RyKCIgIj09dC5jaGFyQXQoMSk/MjoxKSxyKTt2YXIgbixpLHMsZixjPU1hdGguYWJzKHIpLG89cjwwPyItIjoiIjtpZih0'@;
put 'Lm1hdGNoKC9eMDArJC8pKXJldHVybiBvK3JhKGMsdC5sZW5ndGgpO2lmKHQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4iMCI9PT0obj1yYShyLDApKSYmKG49IiIpLG4ubGVuZ3RoPnQubGVuZ3RoP246VHIodC5zdWJzdHIoMCx0Lmxlbmd0aC1uLmxlbmd0aCkpK247aWYoaT10Lm1hdGNoKGhp'@;
put 'KSlyZXR1cm4gZnVuY3Rpb24gamMoZSx0LHIpe3ZhciBhPXBhcnNlSW50KGVbNF0sMTApLG49TWF0aC5yb3VuZCh0KmEpLGk9TWF0aC5mbG9vcihuL2EpLHM9bi1pKmEsZj1hO3JldHVybiByKygwPT09aT8iIjoiIitpKSsiICIrKDA9PT1zP2plKCIgIixlWzFdLmxlbmd0aCsxK2VbNF0ubGVu'@;
put 'Z3RoKTpVMChzLGVbMV0ubGVuZ3RoKStlWzJdKyIvIitlWzNdK1lyKGYsZVs0XS5sZW5ndGgpKX0oaSxjLG8pO2lmKHQubWF0Y2goL14jKzArJC8pKXJldHVybiBvK3JhKGMsdC5sZW5ndGgtdC5pbmRleE9mKCIwIikpO2lmKGk9dC5tYXRjaCh4aSkpcmV0dXJuIG49cGkocixpWzFdLmxlbmd0'@;
put 'aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrVHIoaVsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK1RyKGlbMV0pKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24odix1KXtyZXR1cm4iLiIrdStqZSgiMCIsVHIoaVsxXSkubGVuZ3RoLXUubGVuZ3RoKX0pLC0xIT09dC5pbmRleE9mKCIw'@;
put 'LiIpP246bi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKHQ9dC5yZXBsYWNlKC9eIysoWzAuXSkvLCIkMSIpLGk9dC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIG8rcGkoYyxpWzJdLmxlbmd0aCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikk'@;
put 'LywiJDEuIikucmVwbGFjZSgvXjBcLi8saVsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGk9dC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gbytFdChyYShjLDApKTtpZihpPXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrVXIoZSx0LC1yKTpFdCgi'@;
put 'IisoTWF0aC5mbG9vcihyKStmdW5jdGlvbiBZYyhlLHQpe3JldHVybiB0PCgiIitNYXRoLnJvdW5kKChlLU1hdGguZmxvb3IoZSkpKk1hdGgucG93KDEwLHQpKSkubGVuZ3RoPzE6MH0ocixpWzFdLmxlbmd0aCkpKSsiLiIrWXIobWkocixpWzFdLmxlbmd0aCksaVsxXS5sZW5ndGgpO2lmKGk9'@;
put 'dC5tYXRjaCgvXiMsIyosIzAvKSlyZXR1cm4gVXIoZSx0LnJlcGxhY2UoL14jLCMqLC8sIiIpLHIpO2lmKGk9dC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gbj1lYShVcihlLHQucmVwbGFjZSgvW1xcLV0vZywiIikscikpLHM9MCxlYShlYSh0LnJlcGxhY2UoL1xc'@;
put 'L2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24odil7cmV0dXJuIHM8bi5sZW5ndGg/bi5jaGFyQXQocysrKToiMCI9PT12PyIwIjoiIn0pKTtpZih0Lm1hdGNoKHZpKSlyZXR1cm4iKCIrKG49VXIoZSwiIyMjIyMjIyMjIyIscikpLnN1YnN0cigwLDMpKyIpICIrbi5zdWJzdHIoMywz'@;
put 'KSsiLSIrbi5zdWJzdHIoNik7dmFyIGw9IiI7aWYoaT10Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gcz1NYXRoLm1pbihpWzRdLmxlbmd0aCw3KSxmPWkwKGMsTWF0aC5wb3coMTAscyktMSwhMSksbj0iIitvLCIgIj09KGw9bHQoIm4iLGlbMV0sZlsxXSkp'@;
put 'LmNoYXJBdChsLmxlbmd0aC0xKSYmKGw9bC5zdWJzdHIoMCxsLmxlbmd0aC0xKSsiMCIpLG4rPWwraVsyXSsiLyIraVszXSwobD1hMChmWzJdLHMpKS5sZW5ndGg8aVs0XS5sZW5ndGgmJihsPVRyKGlbNF0uc3Vic3RyKGlbNF0ubGVuZ3RoLWwubGVuZ3RoKSkrbCksbis9bDtpZihpPXQubWF0'@;
put 'Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHM9TWF0aC5taW4oTWF0aC5tYXgoaVsxXS5sZW5ndGgsaVs0XS5sZW5ndGgpLDcpLG8rKChmPWkwKGMsTWF0aC5wb3coMTAscyktMSwhMCkpWzBdfHwoZlsxXT8iIjoiMCIpKSsiICIrKGZbMV0/VTAoZlsxXSxzKStp'@;
put 'WzJdKyIvIitpWzNdK2EwKGZbMl0scyk6amUoIiAiLDIqcysxK2lbMl0ubGVuZ3RoK2lbM10ubGVuZ3RoKSk7aWYoaT10Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBuPXJhKHIsMCksdC5sZW5ndGg8PW4ubGVuZ3RoP246VHIodC5zdWJzdHIoMCx0Lmxlbmd0aC1uLmxlbmd0aCkpK247aWYo'@;
put 'aT10Lm1hdGNoKC9eKFsjMD9dKylcLihbIzBdKykkLykpe249IiIrci50b0ZpeGVkKE1hdGgubWluKGlbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxzPW4uaW5kZXhPZigiLiIpO3ZhciBoPXQuaW5kZXhPZigiLiIpLXMseD10Lmxlbmd0aC1uLmxlbmd0aC1oO3Jl'@;
put 'dHVybiBUcih0LnN1YnN0cigwLGgpK24rdC5zdWJzdHIodC5sZW5ndGgteCkpfWlmKGk9dC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHM9bWkocixpWzFdLmxlbmd0aCkscjwwPyItIitVcihlLHQsLXIpOkV0KGZ1bmN0aW9uIEpjKGUpe3JldHVybiBlPDIxNDc0ODM2NDcm'@;
put 'JmU+LTIxNDc0ODM2NDg/IiIrKGU+PTA/MHxlOmUtMXwwKToiIitNYXRoLmZsb29yKGUpfShyKSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbih2KXtyZXR1cm4iMDAsIisodi5sZW5ndGg8Mz9ZcigwLDMtdi5sZW5ndGgpOiIiKSt2fSkrIi4i'@;
put 'K1lyKHMsaVsxXS5sZW5ndGgpO3N3aXRjaCh0KXtjYXNlIiMjIywjIzAuMDAiOnJldHVybiBVcihlLCIjLCMjMC4wMCIscik7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIGQ9RXQocmEoYywwKSk7cmV0dXJuIjAiIT09ZD9vK2Q6IiI7Y2FzZSIjIyMsIyMjLjAw'@;
put 'IjpyZXR1cm4gVXIoZSwiIyMjLCMjMC4wMCIscikucmVwbGFjZSgvXjBcLi8sIi4iKTtjYXNlIiMsIyMjLjAwIjpyZXR1cm4gVXIoZSwiIywjIzAuMDAiLHIpLnJlcGxhY2UoL14wXC4vLCIuIil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrdCsifCIpfWZ1bmN0aW9u'@;
put 'IGdpKGUsdCl7dmFyIHIsYT1lLmluZGV4T2YoIkUiKS1lLmluZGV4T2YoIi4iKS0xO2lmKGUubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PXQpcmV0dXJuIjAuMEUrMCI7aWYodDwwKXJldHVybiItIitnaShlLC10KTt2YXIgbj1lLmluZGV4T2YoIi4iKTstMT09PW4mJihuPWUuaW5kZXhP'@;
put 'ZigiRSIpKTt2YXIgaT1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGguTE9HMTBFKSVuO2lmKGk8MCYmKGkrPW4pLCEocj0odC9NYXRoLnBvdygxMCxpKSkudG9QcmVjaXNpb24oYSsxKyhuK2kpJW4pKS5tYXRjaCgvW0VlXS8pKXt2YXIgcz1NYXRoLmZsb29yKE1hdGgubG9nKHQpKk1hdGgu'@;
put 'TE9HMTBFKTstMT09PXIuaW5kZXhPZigiLiIpP3I9ci5jaGFyQXQoMCkrIi4iK3Iuc3Vic3RyKDEpKyJFKyIrKHMtci5sZW5ndGgraSk6cis9IkUrIisocy1pKSxyPXIucmVwbGFjZSgvXCstLywiLSIpfXI9ci5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKGYs'@;
put 'YyxvLGwpe3JldHVybiBjK28rbC5zdWJzdHIoMCwobitpKSVuKSsiLiIrbC5zdWJzdHIoaSkrIkUifSl9ZWxzZSByPXQudG9FeHBvbmVudGlhbChhKTtyZXR1cm4gZS5tYXRjaCgvRVwrMDAkLykmJnIubWF0Y2goL2VbKy1dXGQkLykmJihyPXIuc3Vic3RyKDAsci5sZW5ndGgtMSkrIjAiK3Iu'@;
put 'Y2hhckF0KHIubGVuZ3RoLTEpKSxlLm1hdGNoKC9FXC0vKSYmci5tYXRjaCgvZVwrLykmJihyPXIucmVwbGFjZSgvZVwrLywiZSIpKSxyLnJlcGxhY2UoImUiLCJFIil9ZnVuY3Rpb24gUXIoZSx0LHIpe2lmKDQwPT09ZS5jaGFyQ29kZUF0KDApJiYhdC5tYXRjaChkaSkpe3ZhciBhPXQucmVw'@;
put 'bGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHI+PTA/UXIoIm4iLGEscik6IigiK1FyKCJuIixhLC1yKSsiKSJ9aWYoNDQ9PT10LmNoYXJDb2RlQXQodC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIHFjKGUsdCxyKXtmb3IodmFyIGE9'@;
put 'dC5sZW5ndGgtMTs0ND09PXQuY2hhckNvZGVBdChhLTEpOyktLWE7cmV0dXJuIGx0KGUsdC5zdWJzdHIoMCxhKSxyL01hdGgucG93KDEwLDMqKHQubGVuZ3RoLWEpKSl9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBaYyhlLHQscil7dmFyIGE9dC5yZXBs'@;
put 'YWNlKGxpLCIiKSxuPXQubGVuZ3RoLWEubGVuZ3RoO3JldHVybiBsdChlLGEscipNYXRoLnBvdygxMCwyKm4pKStqZSgiJSIsbil9KGUsdCxyKTtpZigtMSE9PXQuaW5kZXhPZigiRSIpKXJldHVybiBnaSh0LHIpO2lmKDM2PT09dC5jaGFyQ29kZUF0KDApKXJldHVybiIkIitRcihlLHQuc3Vi'@;
put 'c3RyKCIgIj09dC5jaGFyQXQoMSk/MjoxKSxyKTt2YXIgbixpLHMsZixjPU1hdGguYWJzKHIpLG89cjwwPyItIjoiIjtpZih0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBvK1lyKGMsdC5sZW5ndGgpO2lmKHQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4gbj0iIityLDA9PT1yJiYobj0iIiksbi5s'@;
put 'ZW5ndGg+dC5sZW5ndGg/bjpUcih0LnN1YnN0cigwLHQubGVuZ3RoLW4ubGVuZ3RoKSkrbjtpZihpPXQubWF0Y2goaGkpKXJldHVybiBmdW5jdGlvbiBLYyhlLHQscil7cmV0dXJuIHIrKDA9PT10PyIiOiIiK3QpK2plKCIgIixlWzFdLmxlbmd0aCsyK2VbNF0ubGVuZ3RoKX0oaSxjLG8pO2lm'@;
put 'KHQubWF0Y2goL14jKzArJC8pKXJldHVybiBvK1lyKGMsdC5sZW5ndGgtdC5pbmRleE9mKCIwIikpO2lmKGk9dC5tYXRjaCh4aSkpcmV0dXJuIG49KG49KCIiK3IpLnJlcGxhY2UoL14oW15cLl0rKSQvLCIkMS4iK1RyKGlbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitUcihpWzFdKSkpLnJlcGxh'@;
put 'Y2UoL1wuKFxkKikkLyxmdW5jdGlvbih2LHUpe3JldHVybiIuIit1K2plKCIwIixUcihpWzFdKS5sZW5ndGgtdS5sZW5ndGgpfSksLTEhPT10LmluZGV4T2YoIjAuIik/bjpuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYodD10LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksaT10Lm1hdGNoKC9e'@;
put 'KDAqKVwuKCMqKSQvKSlyZXR1cm4gbysoIiIrYykucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8saVsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKGk9dC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1'@;
put 'cm4gbytFdCgiIitjKTtpZihpPXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrUXIoZSx0LC1yKTpFdCgiIityKSsiLiIramUoIjAiLGlbMV0ubGVuZ3RoKTtpZihpPXQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIFFyKGUsdC5yZXBsYWNlKC9eIywjKiwvLCIi'@;
put 'KSxyKTtpZihpPXQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIG49ZWEoUXIoZSx0LnJlcGxhY2UoL1tcXC1dL2csIiIpLHIpKSxzPTAsZWEoZWEodC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKHYpe3JldHVybiBzPG4ubGVuZ3Ro'@;
put 'P24uY2hhckF0KHMrKyk6IjAiPT09dj8iMCI6IiJ9KSk7aWYodC5tYXRjaCh2aSkpcmV0dXJuIigiKyhuPVFyKGUsIiMjIyMjIyMjIyMiLHIpKS5zdWJzdHIoMCwzKSsiKSAiK24uc3Vic3RyKDMsMykrIi0iK24uc3Vic3RyKDYpO3ZhciBsPSIiO2lmKGk9dC5tYXRjaCgvXihbIzA/XSspKCA/'@;
put 'KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHM9TWF0aC5taW4oaVs0XS5sZW5ndGgsNyksZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITEpLG49IiIrbywiICI9PShsPWx0KCJuIixpWzFdLGZbMV0pKS5jaGFyQXQobC5sZW5ndGgtMSkmJihsPWwuc3Vic3RyKDAsbC5sZW5ndGgtMSkrIjAiKSxu'@;
put 'Kz1sK2lbMl0rIi8iK2lbM10sKGw9YTAoZlsyXSxzKSkubGVuZ3RoPGlbNF0ubGVuZ3RoJiYobD1UcihpWzRdLnN1YnN0cihpWzRdLmxlbmd0aC1sLmxlbmd0aCkpK2wpLG4rPWw7aWYoaT10Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBzPU1hdGgubWlu'@;
put 'KE1hdGgubWF4KGlbMV0ubGVuZ3RoLGlbNF0ubGVuZ3RoKSw3KSxvKygoZj1pMChjLE1hdGgucG93KDEwLHMpLTEsITApKVswXXx8KGZbMV0/IiI6IjAiKSkrIiAiKyhmWzFdP1UwKGZbMV0scykraVsyXSsiLyIraVszXSthMChmWzJdLHMpOmplKCIgIiwyKnMrMStpWzJdLmxlbmd0aCtpWzNd'@;
put 'Lmxlbmd0aCkpO2lmKGk9dC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gdC5sZW5ndGg8PShuPSIiK3IpLmxlbmd0aD9uOlRyKHQuc3Vic3RyKDAsdC5sZW5ndGgtbi5sZW5ndGgpKStuO2lmKGk9dC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe249IiIrci50b0ZpeGVkKE1hdGgubWlu'@;
put 'KGlbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCskLywiJDEiKSxzPW4uaW5kZXhPZigiLiIpO3ZhciBoPXQuaW5kZXhPZigiLiIpLXMseD10Lmxlbmd0aC1uLmxlbmd0aC1oO3JldHVybiBUcih0LnN1YnN0cigwLGgpK24rdC5zdWJzdHIodC5sZW5ndGgteCkpfWlmKGk9dC5tYXRj'@;
put 'aCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHI8MD8iLSIrUXIoZSx0LC1yKTpFdCgiIityKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKHYpe3JldHVybiIwMCwiKyh2Lmxlbmd0aDwzP1lyKDAsMy12Lmxlbmd0aCk6IiIpK3Z9KSsi'@;
put 'LiIrWXIoMCxpWzFdLmxlbmd0aCk7c3dpdGNoKHQpe2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciBkPUV0KCIiK2MpO3JldHVybiIwIiE9PWQ/bytkOiIiO2RlZmF1bHQ6aWYodC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIFFyKGUsdC5zbGljZSgwLHQubGFz'@;
put 'dEluZGV4T2YoIi4iKSkscikrVHIodC5zbGljZSh0Lmxhc3RJbmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8Iit0KyJ8Iil9ZnVuY3Rpb24gbHQoZSx0LHIpe3JldHVybigwfHIpPT09cj9RcihlLHQscik6VXIoZSx0LHIpfXZhciBfaT0vXFtbSGhN'@;
put 'bVNzXHUwRTBBXHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gYnQoZSl7Zm9yKHZhciB0PTAscj0iIixhPSIiO3Q8ZS5sZW5ndGg7KXN3aXRjaChyPWUuY2hhckF0KHQpKXtjYXNlIkciOm4wKGUsdCkmJih0Kz02KSx0Kys7YnJlYWs7Y2FzZSciJzpmb3IoOzM0IT09ZS5jaGFyQ29kZUF0KCsr'@;
put 'dCkmJnQ8ZS5sZW5ndGg7KTsrK3Q7YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjp0Kz0yO2JyZWFrO2Nhc2UiQCI6Kyt0O2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1lLmNoYXJBdCh0KzEpfHwiMiI9PT1lLmNoYXJBdCh0KzEpKXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJEIjpjYXNlIlki'@;
put 'OmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjppZigiQS9QIj09PWUuc3Vic3RyKHQsMykudG9VcHBlckNhc2UoKXx8IkFNL1BN'@;
put 'Ij09PWUuc3Vic3RyKHQsNSkudG9VcHBlckNhc2UoKXx8Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09ZS5zdWJzdHIodCw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysrdDticmVhaztjYXNlIlsiOmZvcihhPXI7Il0iIT09ZS5jaGFyQXQodCsrKSYmdDxlLmxlbmd0aDspYSs9ZS5j'@;
put 'aGFyQXQodCk7aWYoYS5tYXRjaChfaSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpjYXNlIjAiOmNhc2UiIyI6Zm9yKDt0PGUubGVuZ3RoJiYoIjAjPy4sRSstJSIuaW5kZXhPZihyPWUuY2hhckF0KCsrdCkpPi0xfHwiXFwiPT1yJiYiLSI9PWUuY2hhckF0KHQrMSkmJiIwIyIuaW5kZXhPZihl'@;
put 'LmNoYXJBdCh0KzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7ZS5jaGFyQXQoKyt0KT09PXI7KTticmVhaztjYXNlIioiOisrdCwoIiAiPT1lLmNoYXJBdCh0KXx8IioiPT1lLmNoYXJBdCh0KSkmJisrdDticmVhaztjYXNlIigiOmNhc2UiKSI6Kyt0O2JyZWFrO2Nhc2UiMSI6Y2FzZSIy'@;
put 'IjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcig7dDxlLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YoZS5jaGFyQXQoKyt0KSk+LTE7KTticmVhaztkZWZhdWx0OisrdH1yZXR1cm4hMX12YXIgd2k9L1xbKD18Pls9XT98PFs+'@;
put 'PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIGtpKGUsdCl7aWYobnVsbD09dClyZXR1cm4hMTt2YXIgcj1wYXJzZUZsb2F0KHRbMl0pO3N3aXRjaCh0WzFdKXtjYXNlIj0iOmlmKGU9PXIpcmV0dXJuITA7YnJlYWs7Y2FzZSI+IjppZihlPnIpcmV0dXJuITA7YnJlYWs7Y2FzZSI8'@;
put 'IjppZihlPHIpcmV0dXJuITA7YnJlYWs7Y2FzZSI8PiI6aWYoZSE9cilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihlPj1yKXJldHVybiEwO2JyZWFrO2Nhc2UiPD0iOmlmKGU8PXIpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gUnIoZSx0LHIpe251bGw9PXImJihyPXt9KTt2YXIgYT0i'@;
put 'Ijtzd2l0Y2godHlwZW9mIGUpe2Nhc2Uic3RyaW5nIjphPSJtL2QveXkiPT1lJiZyLmRhdGVORj9yLmRhdGVORjplO2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oYT0xND09ZSYmci5kYXRlTkY/ci5kYXRlTkY6KG51bGwhPXIudGFibGU/ci50YWJsZTpwZSlbZV0pJiYoYT1yLnRhYmxlJiZy'@;
put 'LnRhYmxlW2ZpW2VdXXx8cGVbZmlbZV1dKSxudWxsPT1hJiYoYT1CY1tlXXx8IkdlbmVyYWwiKX1pZihuMChhLDApKXJldHVybiBOdCh0LHIpO3QgaW5zdGFuY2VvZiBEYXRlJiYodD1vaSh0LHIuZGF0ZTE5MDQpKTt2YXIgbj1mdW5jdGlvbiBybyhlLHQpe3ZhciByPWZ1bmN0aW9uIFFjKGUp'@;
put 'e2Zvcih2YXIgdD1bXSxyPSExLGE9MCxuPTA7YTxlLmxlbmd0aDsrK2Epc3dpdGNoKGUuY2hhckNvZGVBdChhKSl7Y2FzZSAzNDpyPSFyO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrYTticmVhaztjYXNlIDU5OnRbdC5sZW5ndGhdPWUuc3Vic3RyKG4sYS1uKSxuPWErMX1pZih0'@;
put 'W3QubGVuZ3RoXT1lLnN1YnN0cihuKSwhMD09PXIpdGhyb3cgbmV3IEVycm9yKCJGb3JtYXQgfCIrZSsifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiB0fShlKSxhPXIubGVuZ3RoLG49clthLTFdLmluZGV4T2YoIkAiKTtpZihhPDQmJm4+LTEmJi0tYSxyLmxlbmd0aD40KXRocm93'@;
put 'IG5ldyBFcnJvcigiY2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8IityLmpvaW4oInwiKSsifCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm5bNCw0PT09ci5sZW5ndGh8fG4+LTE/cltyLmxlbmd0aC0xXToiQCJdO3N3aXRjaChyLmxlbmd0aCl7Y2FzZSAxOnI9bj4tMT9bIkdl'@;
put 'bmVyYWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsclswXV06W3JbMF0sclswXSxyWzBdLCJAIl07YnJlYWs7Y2FzZSAyOnI9bj4tMT9bclswXSxyWzBdLHJbMF0sclsxXV06W3JbMF0sclsxXSxyWzBdLCJAIl07YnJlYWs7Y2FzZSAzOnI9bj4tMT9bclswXSxyWzFdLHJbMF0sclsyXV06W3JbMF0s'@;
put 'clsxXSxyWzJdLCJAIl19dmFyIGk9dD4wP3JbMF06dDwwP3JbMV06clsyXTtpZigtMT09PXJbMF0uaW5kZXhPZigiWyIpJiYtMT09PXJbMV0uaW5kZXhPZigiWyIpKXJldHVyblthLGldO2lmKG51bGwhPXJbMF0ubWF0Y2goL1xbWz08Pl0vKXx8bnVsbCE9clsxXS5tYXRjaCgvXFtbPTw+XS8p'@;
put 'KXt2YXIgcz1yWzBdLm1hdGNoKHdpKSxmPXJbMV0ubWF0Y2god2kpO3JldHVybiBraSh0LHMpP1thLHJbMF1dOmtpKHQsZik/W2EsclsxXV06W2EscltudWxsIT1zJiZudWxsIT1mPzI6MV1dfXJldHVyblthLGldfShhLHQpO2lmKG4wKG5bMV0pKXJldHVybiBOdCh0LHIpO2lmKCEwPT09dCl0'@;
put 'PSJUUlVFIjtlbHNlIGlmKCExPT09dCl0PSJGQUxTRSI7ZWxzZSBpZigiIj09PXR8fG51bGw9PXQpcmV0dXJuIiI7cmV0dXJuIGZ1bmN0aW9uIGVvKGUsdCxyLGEpe2Zvcih2YXIgbyxsLGgsbj1bXSxpPSIiLHM9MCxmPSIiLGM9InQiLHg9IkgiO3M8ZS5sZW5ndGg7KXN3aXRjaChmPWUuY2hh'@;
put 'ckF0KHMpKXtjYXNlIkciOmlmKCFuMChlLHMpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK2YrIiBpbiAiK2UpO25bbi5sZW5ndGhdPXt0OiJHIix2OiJHZW5lcmFsIn0scys9NzticmVhaztjYXNlJyInOmZvcihpPSIiOzM0IT09KGg9ZS5jaGFyQ29kZUF0KCsr'@;
put 'cykpJiZzPGUubGVuZ3RoOylpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGgpO25bbi5sZW5ndGhdPXt0OiJ0Iix2Oml9LCsrczticmVhaztjYXNlIlxcIjp2YXIgZD1lLmNoYXJBdCgrK3MpO25bbi5sZW5ndGhdPXt0OiIoIj09PWR8fCIpIj09PWQ/ZDoidCIsdjpkfSwrK3M7YnJlYWs7Y2FzZSJf'@;
put 'IjpuW24ubGVuZ3RoXT17dDoidCIsdjoiICJ9LHMrPTI7YnJlYWs7Y2FzZSJAIjpuW24ubGVuZ3RoXT17dDoiVCIsdjp0fSwrK3M7YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PWUuY2hhckF0KHMrMSl8fCIyIj09PWUuY2hhckF0KHMrMSkpe2lmKG51bGw9PW8mJm51bGw9PShvPWt0'@;
put 'KHQsciwiMiI9PT1lLmNoYXJBdChzKzEpKSkpcmV0dXJuIiI7bltuLmxlbmd0aF09e3Q6IlgiLHY6ZS5zdWJzdHIocywyKX0sYz1mLHMrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Zj1mLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNl'@;
put 'ImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjppZih0PDB8fG51bGw9PW8mJm51bGw9PShvPWt0KHQscikpKXJldHVybiIiO2ZvcihpPWY7KytzPGUubGVuZ3RoJiZlLmNoYXJBdChzKS50b0xvd2VyQ2FzZSgpPT09ZjspaSs9ZjsibSI9PT1mJiYiaCI9PT1jLnRv'@;
put 'TG93ZXJDYXNlKCkmJihmPSJNIiksImgiPT09ZiYmKGY9eCksbltuLmxlbmd0aF09e3Q6Zix2Oml9LGM9ZjticmVhaztjYXNlIkEiOmNhc2UiYSI6Y2FzZSJcdTRlMGEiOnZhciB1PXt0OmYsdjpmfTtpZihudWxsPT1vJiYobz1rdCh0LHIpKSwiQS9QIj09PWUuc3Vic3RyKHMsMykudG9VcHBl'@;
put 'ckNhc2UoKT8obnVsbCE9byYmKHUudj1vLkg+PTEyPyJQIjoiQSIpLHUudD0iVCIseD0iaCIscys9Myk6IkFNL1BNIj09PWUuc3Vic3RyKHMsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9byYmKHUudj1vLkg+PTEyPyJQTSI6IkFNIiksdS50PSJUIixzKz01LHg9ImgiKToiXHU0ZTBhXHU1MzQ4'@;
put 'L1x1NGUwYlx1NTM0OCI9PT1lLnN1YnN0cihzLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPW8mJih1LnY9by5IPj0xMj8iXHU0ZTBiXHU1MzQ4IjoiXHU0ZTBhXHU1MzQ4IiksdS50PSJUIixzKz01LHg9ImgiKToodS50PSJ0IiwrK3MpLG51bGw9PW8mJiJUIj09PXUudClyZXR1cm4iIjtuW24u'@;
put 'bGVuZ3RoXT11LGM9ZjticmVhaztjYXNlIlsiOmZvcihpPWY7Il0iIT09ZS5jaGFyQXQocysrKSYmczxlLmxlbmd0aDspaSs9ZS5jaGFyQXQocyk7aWYoIl0iIT09aS5zbGljZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVkICJbIiBibG9jazogfCcraSsifCI7aWYoaS5tYXRjaChfaSkpe2lmKG51'@;
put 'bGw9PW8mJm51bGw9PShvPWt0KHQscikpKXJldHVybiIiO25bbi5sZW5ndGhdPXt0OiJaIix2OmkudG9Mb3dlckNhc2UoKX0sYz1pLmNoYXJBdCgxKX1lbHNlIGkuaW5kZXhPZigiJCIpPi0xJiYoaT0oaS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIixidChlKXx8KG5bbi5s'@;
put 'ZW5ndGhdPXt0OiJ0Iix2Oml9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1vKXtmb3IoaT1mOysrczxlLmxlbmd0aCYmIjAiPT09KGY9ZS5jaGFyQXQocykpOylpKz1mO25bbi5sZW5ndGhdPXt0OiJzIix2Oml9O2JyZWFrfWNhc2UiMCI6Y2FzZSIjIjpmb3IoaT1mOysrczxlLmxlbmd0aCYm'@;
put 'IjAjPy4sRSstJSIuaW5kZXhPZihmPWUuY2hhckF0KHMpKT4tMTspaSs9ZjtuW24ubGVuZ3RoXT17dDoibiIsdjppfTticmVhaztjYXNlIj8iOmZvcihpPWY7ZS5jaGFyQXQoKytzKT09PWY7KWkrPWY7bltuLmxlbmd0aF09e3Q6Zix2Oml9LGM9ZjticmVhaztjYXNlIioiOisrcywoIiAiPT1l'@;
put 'LmNoYXJBdChzKXx8IioiPT1lLmNoYXJBdChzKSkmJisrczticmVhaztjYXNlIigiOmNhc2UiKSI6bltuLmxlbmd0aF09e3Q6MT09PWE/InQiOmYsdjpmfSwrK3M7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNh'@;
put 'c2UiOSI6Zm9yKGk9ZjtzPGUubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihlLmNoYXJBdCgrK3MpKT4tMTspaSs9ZS5jaGFyQXQocyk7bltuLmxlbmd0aF09e3Q6IkQiLHY6aX07YnJlYWs7Y2FzZSIgIjpuW24ubGVuZ3RoXT17dDpmLHY6Zn0sKytzO2JyZWFrO2Nhc2UiJCI6bltuLmxl'@;
put 'bmd0aF09e3Q6InQiLHY6IiQifSwrK3M7YnJlYWs7ZGVmYXVsdDppZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YoZikpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrZisiIGluICIrZSk7bltuLmxlbmd0'@;
put 'aF09e3Q6InQiLHY6Zn0sKytzfXZhciBULHA9MCxrPTA7Zm9yKHM9bi5sZW5ndGgtMSxjPSJ0IjtzPj0wOy0tcylzd2l0Y2gobltzXS50KXtjYXNlImgiOmNhc2UiSCI6bltzXS50PXgsYz0iaCIscDwxJiYocD0xKTticmVhaztjYXNlInMiOihUPW5bc10udi5tYXRjaCgvXC4wKyQvKSkmJihr'@;
put 'PU1hdGgubWF4KGssVFswXS5sZW5ndGgtMSkpLHA8MyYmKHA9Myk7Y2FzZSJkIjpjYXNlInkiOmNhc2UiTSI6Y2FzZSJlIjpjPW5bc10udDticmVhaztjYXNlIm0iOiJzIj09PWMmJihuW3NdLnQ9Ik0iLHA8MiYmKHA9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjpwPDEmJm5bc10u'@;
put 'di5tYXRjaCgvW0hoXS8pJiYocD0xKSxwPDImJm5bc10udi5tYXRjaCgvW01tXS8pJiYocD0yKSxwPDMmJm5bc10udi5tYXRjaCgvW1NzXS8pJiYocD0zKX1zd2l0Y2gocCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpvLnU+PS41JiYoby51PTAsKytvLlMpLG8uUz49NjAmJihvLlM9MCwrK28uTSks'@;
put 'by5NPj02MCYmKG8uTT0wLCsrby5IKTticmVhaztjYXNlIDI6by51Pj0uNSYmKG8udT0wLCsrby5TKSxvLlM+PTYwJiYoby5TPTAsKytvLk0pfXZhciBOLGc9IiI7Zm9yKHM9MDtzPG4ubGVuZ3RoOysrcylzd2l0Y2gobltzXS50KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJy'@;
put 'ZWFrO2Nhc2UiWCI6bltzXS52PSIiLG5bc10udD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpuW3NdLnY9R2MobltzXS50LmNoYXJDb2RlQXQoMCksbltzXS52LG8sayksbltz'@;
put 'XS50PSJ0IjticmVhaztjYXNlIm4iOmNhc2UiPyI6Zm9yKE49cysxO251bGwhPW5bTl0mJigiPyI9PT0oZj1uW05dLnQpfHwiRCI9PT1mfHwoIiAiPT09Znx8InQiPT09ZikmJm51bGwhPW5bTisxXSYmKCI/Ij09PW5bTisxXS50fHwidCI9PT1uW04rMV0udCYmIi8iPT09bltOKzFdLnYpfHwi'@;
put 'KCI9PT1uW3NdLnQmJigiICI9PT1mfHwibiI9PT1mfHwiKSI9PT1mKXx8InQiPT09ZiYmKCIvIj09PW5bTl0udnx8IiAiPT09bltOXS52JiZudWxsIT1uW04rMV0mJiI/Ij09bltOKzFdLnQpKTspbltzXS52Kz1uW05dLnYsbltOXT17djoiIix0OiI7In0sKytOO2crPW5bc10udixzPU4tMTti'@;
put 'cmVhaztjYXNlIkciOm5bc10udD0idCIsbltzXS52PU50KHQscil9dmFyIEkseSxNPSIiO2lmKGcubGVuZ3RoPjApezQwPT1nLmNoYXJDb2RlQXQoMCk/KEk9dDwwJiY0NT09PWcuY2hhckNvZGVBdCgwKT8tdDp0LHk9bHQoIm4iLGcsSSkpOih5PWx0KCJuIixnLEk9dDwwJiZhPjE/LXQ6dCks'@;
put 'STwwJiZuWzBdJiYidCI9PW5bMF0udCYmKHk9eS5zdWJzdHIoMSksblswXS52PSItIituWzBdLnYpKSxOPXkubGVuZ3RoLTE7dmFyIFA9bi5sZW5ndGg7Zm9yKHM9MDtzPG4ubGVuZ3RoOysrcylpZihudWxsIT1uW3NdJiYidCIhPW5bc10udCYmbltzXS52LmluZGV4T2YoIi4iKT4tMSl7UD1z'@;
put 'O2JyZWFrfXZhciBSPW4ubGVuZ3RoO2lmKFA9PT1uLmxlbmd0aCYmLTE9PT15LmluZGV4T2YoIkUiKSl7Zm9yKHM9bi5sZW5ndGgtMTtzPj0wOy0tcyludWxsPT1uW3NdfHwtMT09PSJuPyIuaW5kZXhPZihuW3NdLnQpfHwoTj49bltzXS52Lmxlbmd0aC0xP25bc10udj15LnN1YnN0cigxKyhO'@;
put 'LT1uW3NdLnYubGVuZ3RoKSxuW3NdLnYubGVuZ3RoKTpOPDA/bltzXS52PSIiOihuW3NdLnY9eS5zdWJzdHIoMCxOKzEpLE49LTEpLG5bc10udD0idCIsUj1zKTtOPj0wJiZSPG4ubGVuZ3RoJiYobltSXS52PXkuc3Vic3RyKDAsTisxKStuW1JdLnYpfWVsc2UgaWYoUCE9PW4ubGVuZ3RoJiYt'@;
put 'MT09PXkuaW5kZXhPZigiRSIpKXtmb3IoTj15LmluZGV4T2YoIi4iKS0xLHM9UDtzPj0wOy0tcylpZihudWxsIT1uW3NdJiYtMSE9PSJuPyIuaW5kZXhPZihuW3NdLnQpKXtmb3IobD1uW3NdLnYuaW5kZXhPZigiLiIpPi0xJiZzPT09UD9uW3NdLnYuaW5kZXhPZigiLiIpLTE6bltzXS52Lmxl'@;
put 'bmd0aC0xLE09bltzXS52LnN1YnN0cihsKzEpO2w+PTA7LS1sKU4+PTAmJigiMCI9PT1uW3NdLnYuY2hhckF0KGwpfHwiIyI9PT1uW3NdLnYuY2hhckF0KGwpKSYmKE09eS5jaGFyQXQoTi0tKStNKTtuW3NdLnY9TSxuW3NdLnQ9InQiLFI9c31mb3IoTj49MCYmUjxuLmxlbmd0aCYmKG5bUl0u'@;
put 'dj15LnN1YnN0cigwLE4rMSkrbltSXS52KSxOPXkuaW5kZXhPZigiLiIpKzEscz1QO3M8bi5sZW5ndGg7KytzKWlmKG51bGwhPW5bc10mJigtMSE9PSJuPygiLmluZGV4T2YobltzXS50KXx8cz09PVApKXtmb3IobD1uW3NdLnYuaW5kZXhPZigiLiIpPi0xJiZzPT09UD9uW3NdLnYuaW5kZXhP'@;
put 'ZigiLiIpKzE6MCxNPW5bc10udi5zdWJzdHIoMCxsKTtsPG5bc10udi5sZW5ndGg7KytsKU48eS5sZW5ndGgmJihNKz15LmNoYXJBdChOKyspKTtuW3NdLnY9TSxuW3NdLnQ9InQiLFI9c319fWZvcihzPTA7czxuLmxlbmd0aDsrK3MpbnVsbCE9bltzXSYmIm4/Ii5pbmRleE9mKG5bc10udCk+'@;
put 'LTEmJihuW3NdLnY9bHQobltzXS50LG5bc10udixJPWE+MSYmdDwwJiZzPjAmJiItIj09PW5bcy0xXS52Py10OnQpLG5bc10udD0idCIpO3ZhciBWPSIiO2ZvcihzPTA7cyE9PW4ubGVuZ3RoOysrcyludWxsIT1uW3NdJiYoVis9bltzXS52KTtyZXR1cm4gVn0oblsxXSx0LHIsblswXSl9ZnVu'@;
put 'Y3Rpb24gZXQoZSx0KXtpZigibnVtYmVyIiE9dHlwZW9mIHQpe3Q9K3R8fC0xO2Zvcih2YXIgcj0wO3I8MzkyOysrcilpZihudWxsIT1wZVtyXSl7aWYocGVbcl09PWUpe3Q9cjticmVha319ZWxzZSB0PDAmJih0PXIpO3Q8MCYmKHQ9MzkxKX1yZXR1cm4gcGVbdF09ZSx0fWZ1bmN0aW9uIHRh'@;
put 'KCl7cGU9ZnVuY3Rpb24gTGMoZSl7cmV0dXJuIGV8fChlPXt9KSxlWzBdPSJHZW5lcmFsIixlWzFdPSIwIixlWzJdPSIwLjAwIixlWzNdPSIjLCMjMCIsZVs0XT0iIywjIzAuMDAiLGVbOV09IjAlIixlWzEwXT0iMC4wMCUiLGVbMTFdPSIwLjAwRSswMCIsZVsxMl09IiMgPy8/IixlWzEzXT0i'@;
put 'IyA/Py8/PyIsZVsxNF09Im0vZC95eSIsZVsxNV09ImQtbW1tLXl5IixlWzE2XT0iZC1tbW0iLGVbMTddPSJtbW0teXkiLGVbMThdPSJoOm1tIEFNL1BNIixlWzE5XT0iaDptbTpzcyBBTS9QTSIsZVsyMF09Img6bW0iLGVbMjFdPSJoOm1tOnNzIixlWzIyXT0ibS9kL3l5IGg6bW0iLGVbMzdd'@;
put 'PSIjLCMjMCA7KCMsIyMwKSIsZVszOF09IiMsIyMwIDtbUmVkXSgjLCMjMCkiLGVbMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixlWzQwXT0iIywjIzAuMDA7W1JlZF0oIywjIzAuMDApIixlWzQ1XT0ibW06c3MiLGVbNDZdPSJbaF06bW06c3MiLGVbNDddPSJtbXNzLjAiLGVbNDhdPSIjIzAu'@;
put 'MEUrMCIsZVs0OV09IkAiLGVbNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsZX0oKX12YXIgYW89ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNzon'@;
put 'IiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJywyMzoiR2VuZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJHZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6Im0vZC95eSIsMzA6'@;
put 'Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJoOm1tOnNzIiwzNDoiaDptbTpzcyIsMzU6Img6bW06c3MiLDM2OiJtL2QveXkiLDQxOidfKCogIywjIzBfKTtfKCogKCMsIyMwKTtfKCogIi0iXyk7XyhAXyknLDQyOidfKCIkIiogIywjIzBfKTtfKCIkIiogKCMsIyMwKTtf'@;
put 'KCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogKCMsIyMwLjAwKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiAoIywjIzAuMDApO18oIiQiKiAiLSI/P18pO18oQF8pJyw1MDoibS9kL3l5Iiw1MToibS9kL3l5Iiw1MjoibS9k'@;
put 'L3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5Iiw1NjoibS9kL3l5Iiw1NzoibS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToiMCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIsNjI6IiMsIyMwLjAwIiw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6JyIkIiMsIyMwXyk7'@;
put 'W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDY3OiIwJSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8iLDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5Iiw3MjoibS9kL3l5'@;
put 'Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIsNzY6Img6bW0iLDc3OiJoOm1tOnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5OiJtbTpzcyIsODA6IltoXTptbTpzcyIsODE6Im1tc3MuMCJ9LEVpPS9bZERdK3xbbU1dK3xbeVllRV0rfFtIaF0rfFtTc10rL2csc289ZnVuY3Rp'@;
put 'b24oKXt2YXIgZT17dmVyc2lvbjoiMS4yLjAifSxyPWZ1bmN0aW9uIHQoKXtmb3IodmFyIHk9MCxQPW5ldyBBcnJheSgyNTYpLFI9MDsyNTYhPVI7KytSKVBbUl09eT0xJih5PTEmKHk9MSYoeT0xJih5PTEmKHk9MSYoeT0xJih5PTEmKHk9Uik/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMw'@;
put 'NjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MSk/LTMwNjY3NDkxMl55Pj4+MTp5Pj4+MTty'@;
put 'ZXR1cm4gdHlwZW9mIEludDMyQXJyYXk8InUiP25ldyBJbnQzMkFycmF5KFApOlB9KCksbj1mdW5jdGlvbiBhKHkpe3ZhciBQPTAsUj0wLFY9MCxYPXR5cGVvZiBJbnQzMkFycmF5PCJ1Ij9uZXcgSW50MzJBcnJheSg0MDk2KTpuZXcgQXJyYXkoNDA5Nik7Zm9yKFY9MDsyNTYhPVY7KytWKVhb'@;
put 'Vl09eVtWXTtmb3IoVj0wOzI1NiE9VjsrK1YpZm9yKFI9eVtWXSxQPTI1NitWO1A8NDA5NjtQKz0yNTYpUj1YW1BdPVI+Pj44XnlbMjU1JlJdO3ZhciBiPVtdO2ZvcihWPTE7MTYhPVY7KytWKWJbVi0xXT10eXBlb2YgSW50MzJBcnJheTwidSI/WC5zdWJhcnJheSgyNTYqViwyNTYqVisyNTYp'@;
put 'Olguc2xpY2UoMjU2KlYsMjU2KlYrMjU2KTtyZXR1cm4gYn0ociksaT1uWzBdLHM9blsxXSxmPW5bMl0sYz1uWzNdLG89bls0XSxsPW5bNV0saD1uWzZdLHg9bls3XSxkPW5bOF0sdj1uWzldLHU9blsxMF0scD1uWzExXSxrPW5bMTJdLFQ9blsxM10sZz1uWzE0XTtyZXR1cm4gZS50YWJsZT1y'@;
put 'LGUuYnN0cj1mdW5jdGlvbiBOKHksUCl7Zm9yKHZhciBSPX5QLFY9MCxYPXkubGVuZ3RoO1Y8WDspUj1SPj4+OF5yWzI1NSYoUl55LmNoYXJDb2RlQXQoVisrKSldO3JldHVybn5SfSxlLmJ1Zj1mdW5jdGlvbiBNKHksUCl7Zm9yKHZhciBSPX5QLFY9eS5sZW5ndGgtMTUsWD0wO1g8VjspUj1n'@;
put 'W3lbWCsrXV4yNTUmUl1eVFt5W1grK11eUj4+OCYyNTVdXmtbeVtYKytdXlI+PjE2JjI1NV1ecFt5W1grK11eUj4+PjI0XV51W3lbWCsrXV1edlt5W1grK11dXmRbeVtYKytdXV54W3lbWCsrXV1eaFt5W1grK11dXmxbeVtYKytdXV5vW3lbWCsrXV1eY1t5W1grK11dXmZbeVtYKytdXV5zW3lb'@;
put 'WCsrXV1eaVt5W1grK11dXnJbeVtYKytdXTtmb3IoVis9MTU7WDxWOylSPVI+Pj44XnJbMjU1JihSXnlbWCsrXSldO3JldHVybn5SfSxlLnN0cj1mdW5jdGlvbiBJKHksUCl7Zm9yKHZhciBSPX5QLFY9MCxYPXkubGVuZ3RoLGI9MCxlZT0wO1Y8WDspKGI9eS5jaGFyQ29kZUF0KFYrKykpPDEy'@;
put 'OD9SPVI+Pj44XnJbMjU1JihSXmIpXTpiPDIwNDg/Uj0oUj1SPj4+OF5yWzI1NSYoUl4oMTkyfGI+PjYmMzEpKV0pPj4+OF5yWzI1NSYoUl4oMTI4fDYzJmIpKV06Yj49NTUyOTYmJmI8NTczNDQ/KGI9NjQrKDEwMjMmYiksZWU9MTAyMyZ5LmNoYXJDb2RlQXQoVisrKSxSPShSPShSPShSPVI+'@;
put 'Pj44XnJbMjU1JihSXigyNDB8Yj4+OCY3KSldKT4+PjheclsyNTUmKFJeKDEyOHxiPj4yJjYzKSldKT4+PjheclsyNTUmKFJeKDEyOHxlZT4+NiYxNXwoMyZiKTw8NCkpXSk+Pj44XnJbMjU1JihSXigxMjh8NjMmZWUpKV0pOlI9KFI9KFI9Uj4+PjheclsyNTUmKFJeKDIyNHxiPj4xMiYxNSkp'@;
put 'XSk+Pj44XnJbMjU1JihSXigxMjh8Yj4+NiY2MykpXSk+Pj44XnJbMjU1JihSXigxMjh8NjMmYikpXTtyZXR1cm5+Un0sZX0oKSx2ZT1mdW5jdGlvbigpe3ZhciBjLHQ9e307ZnVuY3Rpb24gYShtKXtpZigiLyI9PW0uY2hhckF0KG0ubGVuZ3RoLTEpKXJldHVybi0xPT09bS5zbGljZSgwLC0x'@;
put 'KS5pbmRleE9mKCIvIik/bTphKG0uc2xpY2UoMCwtMSkpO3ZhciBFPW0ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PUU/bTptLnNsaWNlKDAsRSsxKX1mdW5jdGlvbiBuKG0pe2lmKCIvIj09bS5jaGFyQXQobS5sZW5ndGgtMSkpcmV0dXJuIG4obS5zbGljZSgwLC0xKSk7dmFyIEU9bS5s'@;
put 'YXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09RT9tOm0uc2xpY2UoRSsxKX1mdW5jdGlvbiBpKG0sRSl7InN0cmluZyI9PXR5cGVvZiBFJiYoRT1uZXcgRGF0ZShFKSk7dmFyIF89RS5nZXRIb3VycygpO189KF89Xzw8NnxFLmdldE1pbnV0ZXMoKSk8PDV8RS5nZXRTZWNvbmRzKCk+Pj4xLG0u'@;
put 'd3JpdGVfc2hpZnQoMixfKTt2YXIgdz1FLmdldEZ1bGxZZWFyKCktMTk4MDt3PSh3PXc8PDR8RS5nZXRNb250aCgpKzEpPDw1fEUuZ2V0RGF0ZSgpLG0ud3JpdGVfc2hpZnQoMix3KX1mdW5jdGlvbiBmKG0pe2hyKG0sMCk7Zm9yKHZhciBFPXt9LF89MDttLmw8PW0ubGVuZ3RoLTQ7KXt2YXIg'@;
put 'dz1tLnJlYWRfc2hpZnQoMiksUz1tLnJlYWRfc2hpZnQoMiksRj1tLmwrUyxMPXt9OzIxNTg5PT09dyYmKDEmKF89bS5yZWFkX3NoaWZ0KDEpKSYmKEwubXRpbWU9bS5yZWFkX3NoaWZ0KDQpKSxTPjUmJigyJl8mJihMLmF0aW1lPW0ucmVhZF9zaGlmdCg0KSksNCZfJiYoTC5jdGltZT1tLnJl'@;
put 'YWRfc2hpZnQoNCkpKSxMLm10aW1lJiYoTC5tdD1uZXcgRGF0ZSgxZTMqTC5tdGltZSkpKSxtLmw9RixFW3ddPUx9cmV0dXJuIEV9ZnVuY3Rpb24gbygpe3JldHVybiBjfHwoYz17fSl9ZnVuY3Rpb24gbChtLEUpe2lmKDgwPT1tWzBdJiY3NT09bVsxXSlyZXR1cm4gQ2MobSxFKTtpZigxMDk9'@;
put 'PSgzMnxtWzBdKSYmMTA1PT0oMzJ8bVsxXSkpcmV0dXJuIGZ1bmN0aW9uIE5nKG0sRSl7aWYoIm1pbWUtdmVyc2lvbjoiIT1jZShtLnNsaWNlKDAsMTMpKS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTUFEIGhlYWRlciIpO3ZhciBfPUUmJkUucm9vdHx8IiIs'@;
put 'dz0oU2UmJkJ1ZmZlci5pc0J1ZmZlcihtKT9tLnRvU3RyaW5nKCJiaW5hcnkiKTpjZShtKSkuc3BsaXQoIlxyXG4iKSxTPTAsRj0iIjtmb3IoUz0wO1M8dy5sZW5ndGg7KytTKWlmKC9eQ29udGVudC1Mb2NhdGlvbjovaS50ZXN0KEY9d1tTXSkmJihGPUYuc2xpY2UoRi5pbmRleE9mKCJmaWxl'@;
put 'IikpLF98fChfPUYuc2xpY2UoMCxGLmxhc3RJbmRleE9mKCIvIikrMSkpLEYuc2xpY2UoMCxfLmxlbmd0aCkhPV8pKWZvcig7Xy5sZW5ndGg+MCYmKF89KF89Xy5zbGljZSgwLF8ubGVuZ3RoLTEpKS5zbGljZSgwLF8ubGFzdEluZGV4T2YoIi8iKSsxKSxGLnNsaWNlKDAsXy5sZW5ndGgpIT1f'@;
put 'KTspO3ZhciBMPSh3WzFdfHwiIikubWF0Y2goL2JvdW5kYXJ5PSIoLio/KSIvKTtpZighTCl0aHJvdyBuZXcgRXJyb3IoIk1BRCBjYW5ub3QgZmluZCBib3VuZGFyeSIpO3ZhciB6PSItLSIrKExbMV18fCIiKSxIPXtGaWxlSW5kZXg6W10sRnVsbFBhdGhzOltdfTt5KEgpO3ZhciBxLG5lPTA7'@;
put 'Zm9yKFM9MDtTPHcubGVuZ3RoOysrUyl7dmFyIGhlPXdbU107aGUhPT16JiZoZSE9PXorIi0tInx8KG5lKysmJlJnKEgsdy5zbGljZShxLFMpLF8pLHE9Uyl9cmV0dXJuIEh9KG0sRSk7aWYobS5sZW5ndGg8NTEyKXRocm93IG5ldyBFcnJvcigiQ0ZCIGZpbGUgc2l6ZSAiK20ubGVuZ3RoKyIg'@;
put 'PCA1MTIiKTt2YXIgXyxTLEYsTCx6LFcsdz01MTIsQj1bXSxIPW0uc2xpY2UoMCw1MTIpO2hyKEgsMCk7dmFyIHE9ZnVuY3Rpb24gaChtKXtpZig4MD09bVttLmxdJiY3NT09bVttLmwrMV0pcmV0dXJuWzAsMF07bS5jaGsobGUsIkhlYWRlciBTaWduYXR1cmU6ICIpLG0ubCs9MTY7dmFyIEU9'@;
put 'bS5yZWFkX3NoaWZ0KDIsInUiKTtyZXR1cm5bbS5yZWFkX3NoaWZ0KDIsInUiKSxFXX0oSCk7c3dpdGNoKF89cVswXSl7Y2FzZSAzOnc9NTEyO2JyZWFrO2Nhc2UgNDp3PTQwOTY7YnJlYWs7Y2FzZSAwOmlmKDA9PXFbMV0pcmV0dXJuIENjKG0sRSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3Io'@;
put 'Ik1ham9yIFZlcnNpb246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIitfKX01MTIhPT13JiZocihIPW0uc2xpY2UoMCx3KSwyOCk7dmFyIG5lPW0uc2xpY2UoMCx3KTshZnVuY3Rpb24geChtLEUpe3ZhciBfO3N3aXRjaChtLmwrPTIsXz1tLnJlYWRfc2hpZnQoMikpe2Nhc2UgOTppZigzIT1FKXRo'@;
put 'cm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IHNhdyAiK18pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9RSl0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgMTIgc2F3ICIrXyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlm'@;
put 'dDogRXhwZWN0ZWQgOSBvciAxMiBzYXcgIitfKX1tLmNoaygiMDYwMCIsIk1pbmkgU2VjdG9yIFNoaWZ0OiAiKSxtLmNoaygiMDAwMDAwMDAwMDAwIiwiUmVzZXJ2ZWQ6ICIpfShILF8pO3ZhciBoZT1ILnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT1fJiYwIT09aGUpdGhyb3cgbmV3IEVycm9y'@;
put 'KCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK2hlKTtILmwrPTQsTD1ILnJlYWRfc2hpZnQoNCwiaSIpLEgubCs9NCxILmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZTogIiksej1ILnJlYWRfc2hpZnQoNCwiaSIpLFM9SC5yZWFkX3NoaWZ0KDQs'@;
put 'ImkiKSxXPUgucmVhZF9zaGlmdCg0LCJpIiksRj1ILnJlYWRfc2hpZnQoNCwiaSIpO2Zvcih2YXIgaWU9LTEsZmU9MDtmZTwxMDkmJiEoKGllPUgucmVhZF9zaGlmdCg0LCJpIikpPDApOysrZmUpQltmZV09aWU7dmFyIF9lPWZ1bmN0aW9uIGQobSxFKXtmb3IodmFyIF89TWF0aC5jZWlsKG0u'@;
put 'bGVuZ3RoL0UpLTEsdz1bXSxTPTE7UzxfOysrUyl3W1MtMV09bS5zbGljZShTKkUsKFMrMSkqRSk7cmV0dXJuIHdbXy0xXT1tLnNsaWNlKF8qRSksd30obSx3KTtwKFcsRixfZSx3LEIpO3ZhciBWZT1mdW5jdGlvbiBUKG0sRSxfLHcpe3ZhciBTPW0ubGVuZ3RoLEY9W10sTD1bXSx6PVtdLFc9'@;
put 'W10sQj13LTEsSD0wLHE9MCxuZT0wLGhlPTA7Zm9yKEg9MDtIPFM7KytIKWlmKHo9W10sKG5lPUgrRSk+PVMmJihuZS09UyksIUxbbmVdKXtXPVtdO3ZhciBpZT1bXTtmb3IocT1uZTtxPj0wOyl7aWVbcV09ITAsTFtxXT0hMCx6W3oubGVuZ3RoXT1xLFcucHVzaChtW3FdKTt2YXIgZmU9X1tN'@;
put 'YXRoLmZsb29yKDQqcS93KV07aWYodzw0KyhoZT00KnEmQikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitxKyIgNCAiK3cpO2lmKCFtW2ZlXXx8aWVbcT1MdChtW2ZlXSxoZSldKWJyZWFrfUZbbmVdPXtub2Rlczp6LGRhdGE6emkoW1ddKX19cmV0dXJuIEZ9KF9l'@;
put 'LEwsQix3KTtWZVtMXS5uYW1lPSIhRGlyZWN0b3J5IixTPjAmJnohPT1lZSYmKFZlW3pdLm5hbWU9IiFNaW5pRkFUIiksVmVbQlswXV0ubmFtZT0iIUZBVCIsVmUuZmF0X2FkZHJzPUIsVmUuc3N6PXc7dmFyIG5yPVtdLEJyPVtdLFphPVtdOyhmdW5jdGlvbiBnKG0sRSxfLHcsUyxGLEwseil7'@;
put 'Zm9yKHZhciBoZSxXPTAsQj13Lmxlbmd0aD8yOjAsSD1FW21dLmRhdGEscT0wLG5lPTA7cTxILmxlbmd0aDtxKz0xMjgpe3ZhciBpZT1ILnNsaWNlKHEscSsxMjgpO2hyKGllLDY0KSxuZT1pZS5yZWFkX3NoaWZ0KDIpLGhlPXUwKGllLDAsbmUtQiksdy5wdXNoKGhlKTt2YXIgZmU9e25hbWU6'@;
put 'aGUsdHlwZTppZS5yZWFkX3NoaWZ0KDEpLGNvbG9yOmllLnJlYWRfc2hpZnQoMSksTDppZS5yZWFkX3NoaWZ0KDQsImkiKSxSOmllLnJlYWRfc2hpZnQoNCwiaSIpLEM6aWUucmVhZF9zaGlmdCg0LCJpIiksY2xzaWQ6aWUucmVhZF9zaGlmdCgxNiksc3RhdGU6aWUucmVhZF9zaGlmdCg0LCJp'@;
put 'Iiksc3RhcnQ6MCxzaXplOjB9OzAhPT1pZS5yZWFkX3NoaWZ0KDIpK2llLnJlYWRfc2hpZnQoMikraWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpJiYoZmUuY3Q9TihpZSxpZS5sLTgpKSwwIT09aWUucmVhZF9zaGlmdCgyKStpZS5yZWFkX3NoaWZ0KDIpK2llLnJlYWRfc2hpZnQo'@;
put 'MikraWUucmVhZF9zaGlmdCgyKSYmKGZlLm10PU4oaWUsaWUubC04KSksZmUuc3RhcnQ9aWUucmVhZF9zaGlmdCg0LCJpIiksZmUuc2l6ZT1pZS5yZWFkX3NoaWZ0KDQsImkiKSxmZS5zaXplPDAmJmZlLnN0YXJ0PDAmJihmZS5zaXplPWZlLnR5cGU9MCxmZS5zdGFydD1lZSxmZS5uYW1lPSIi'@;
put 'KSw1PT09ZmUudHlwZT8oVz1mZS5zdGFydCxTPjAmJlchPT1lZSYmKEVbV10ubmFtZT0iIVN0cmVhbURhdGEiKSk6ZmUuc2l6ZT49NDA5Nj8oZmUuc3RvcmFnZT0iZmF0Iix2b2lkIDA9PT1FW2ZlLnN0YXJ0XSYmKEVbZmUuc3RhcnRdPWsoXyxmZS5zdGFydCxFLmZhdF9hZGRycyxFLnNzeikp'@;
put 'LEVbZmUuc3RhcnRdLm5hbWU9ZmUubmFtZSxmZS5jb250ZW50PUVbZmUuc3RhcnRdLmRhdGEuc2xpY2UoMCxmZS5zaXplKSk6KGZlLnN0b3JhZ2U9Im1pbmlmYXQiLGZlLnNpemU8MD9mZS5zaXplPTA6VyE9PWVlJiZmZS5zdGFydCE9PWVlJiZFW1ddJiYoZmUuY29udGVudD11KGZlLEVbV10u'@;
put 'ZGF0YSwoRVt6XXx8e30pLmRhdGEpKSksZmUuY29udGVudCYmaHIoZmUuY29udGVudCwwKSxGW2hlXT1mZSxMLnB1c2goZmUpfX0pKEwsVmUsX2UsbnIsUyx7fSxCcix6KSxmdW5jdGlvbiB2KG0sRSxfKXtmb3IodmFyIHc9MCxTPTAsRj0wLEw9MCx6PTAsVz1fLmxlbmd0aCxCPVtdLEg9W107'@;
put 'dzxXOysrdylCW3ddPUhbd109dyxFW3ddPV9bd107Zm9yKDt6PEgubGVuZ3RoOysreilTPW1bdz1IW3pdXS5MLEY9bVt3XS5SLEw9bVt3XS5DLEJbd109PT13JiYoLTEhPT1TJiZCW1NdIT09UyYmKEJbd109QltTXSksLTEhPT1GJiZCW0ZdIT09RiYmKEJbd109QltGXSkpLC0xIT09TCYmKEJb'@;
put 'TF09dyksLTEhPT1TJiZ3IT1CW3ddJiYoQltTXT1CW3ddLEgubGFzdEluZGV4T2YoUyk8eiYmSC5wdXNoKFMpKSwtMSE9PUYmJnchPUJbd10mJihCW0ZdPUJbd10sSC5sYXN0SW5kZXhPZihGKTx6JiZILnB1c2goRikpO2Zvcih3PTE7dzxXOysrdylCW3ddPT09dyYmKC0xIT09RiYmQltGXSE9'@;
put 'PUY/Qlt3XT1CW0ZdOi0xIT09UyYmQltTXSE9PVMmJihCW3ddPUJbU10pKTtmb3Iodz0xO3c8VzsrK3cpaWYoMCE9PW1bd10udHlwZSl7aWYoKHo9dykhPUJbel0pZG97RVt3XT1FW3o9Qlt6XV0rIi8iK0Vbd119d2hpbGUoMCE9PXomJi0xIT09Qlt6XSYmeiE9Qlt6XSk7Qlt3XT0tMX1mb3Io'@;
put 'RVswXSs9Ii8iLHc9MTt3PFc7Kyt3KTIhPT1tW3ddLnR5cGUmJihFW3ddKz0iLyIpfShCcixaYSxuciksbnIuc2hpZnQoKTt2YXIgUWE9e0ZpbGVJbmRleDpCcixGdWxsUGF0aHM6WmF9O3JldHVybiBFJiZFLnJhdyYmKFFhLnJhdz17aGVhZGVyOm5lLHNlY3RvcnM6X2V9KSxRYX1mdW5jdGlv'@;
put 'biB1KG0sRSxfKXtmb3IodmFyIFM9bS5zaXplLEY9W10sTD1tLnN0YXJ0O18mJlM+MCYmTD49MDspRi5wdXNoKEUuc2xpY2UoTCpiLEwqYitiKSksUy09YixMPUx0KF8sNCpMKTtyZXR1cm4gMD09PUYubGVuZ3RoP0coMCk6ZnIoRikuc2xpY2UoMCxtLnNpemUpfWZ1bmN0aW9uIHAobSxFLF8s'@;
put 'dyxTKXt2YXIgRj1lZTtpZihtPT09ZWUpe2lmKDAhPT1FKXRocm93IG5ldyBFcnJvcigiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigtMSE9PW0pe3ZhciBMPV9bbV0sej0odz4+PjIpLTE7aWYoIUwpcmV0dXJuO2Zvcih2YXIgVz0wO1c8eiYmKEY9THQoTCw0'@;
put 'KlcpKSE9PWVlOysrVylTLnB1c2goRik7cChMdChMLHctNCksRS0xLF8sdyxTKX19ZnVuY3Rpb24gayhtLEUsXyx3LFMpe3ZhciBGPVtdLEw9W107U3x8KFM9W10pO3ZhciB6PXctMSxXPTAsQj0wO2ZvcihXPUU7Vz49MDspe1NbV109ITAsRltGLmxlbmd0aF09VyxMLnB1c2gobVtXXSk7dmFy'@;
put 'IEg9X1tNYXRoLmZsb29yKDQqVy93KV07aWYodzw0KyhCPTQqVyZ6KSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK1crIiA0ICIrdyk7aWYoIW1bSF0pYnJlYWs7Vz1MdChtW0hdLEIpfXJldHVybntub2RlczpGLGRhdGE6emkoW0xdKX19ZnVuY3Rpb24gTihtLEUp'@;
put 'e3JldHVybiBuZXcgRGF0ZSgxZTMqKGNyKG0sRSs0KS8xZTcqTWF0aC5wb3coMiwzMikrY3IobSxFKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiB5KG0sRSl7dmFyIF89RXx8e30sdz1fLnJvb3R8fCJSb290IEVudHJ5IjtpZihtLkZ1bGxQYXRoc3x8KG0uRnVsbFBhdGhzPVtdKSxtLkZp'@;
put 'bGVJbmRleHx8KG0uRmlsZUluZGV4PVtdKSxtLkZ1bGxQYXRocy5sZW5ndGghPT1tLkZpbGVJbmRleC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpbmNvbnNpc3RlbnQgQ0ZCIHN0cnVjdHVyZSIpOzA9PT1tLkZ1bGxQYXRocy5sZW5ndGgmJihtLkZ1bGxQYXRoc1swXT13KyIvIixtLkZpbGVJ'@;
put 'bmRleFswXT17bmFtZTp3LHR5cGU6NX0pLF8uQ0xTSUQmJihtLkZpbGVJbmRleFswXS5jbHNpZD1fLkNMU0lEKSxmdW5jdGlvbiBQKG0pe3ZhciBFPSJceDAxU2gzM3RKNSI7aWYoIXZlLmZpbmQobSwiLyIrRSkpe3ZhciBfPUcoNCk7X1swXT01NSxfWzFdPV9bM109NTAsX1syXT01NCxtLkZp'@;
put 'bGVJbmRleC5wdXNoKHtuYW1lOkUsdHlwZToyLGNvbnRlbnQ6XyxzaXplOjQsTDo2OSxSOjY5LEM6Njl9KSxtLkZ1bGxQYXRocy5wdXNoKG0uRnVsbFBhdGhzWzBdK0UpLFIobSl9fShtKX1mdW5jdGlvbiBSKG0sRSl7eShtKTtmb3IodmFyIF89ITEsdz0hMSxTPW0uRnVsbFBhdGhzLmxlbmd0'@;
put 'aC0xO1M+PTA7LS1TKXt2YXIgRj1tLkZpbGVJbmRleFtTXTtzd2l0Y2goRi50eXBlKXtjYXNlIDA6dz9fPSEwOihtLkZpbGVJbmRleC5wb3AoKSxtLkZ1bGxQYXRocy5wb3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNlIDU6dz0hMCxpc05hTihGLlIqRi5MKkYuQykmJihfPSEwKSxGLlI+'@;
put 'LTEmJkYuTD4tMSYmRi5SPT1GLkwmJihfPSEwKTticmVhaztkZWZhdWx0Ol89ITB9fWlmKF98fEUpe3ZhciBMPW5ldyBEYXRlKDE5ODcsMSwxOSksej0wLFc9T2JqZWN0LmNyZWF0ZT9PYmplY3QuY3JlYXRlKG51bGwpOnt9LEI9W107Zm9yKFM9MDtTPG0uRnVsbFBhdGhzLmxlbmd0aDsrK1Mp'@;
put 'V1ttLkZ1bGxQYXRoc1tTXV09ITAsMCE9PW0uRmlsZUluZGV4W1NdLnR5cGUmJkIucHVzaChbbS5GdWxsUGF0aHNbU10sbS5GaWxlSW5kZXhbU11dKTtmb3IoUz0wO1M8Qi5sZW5ndGg7KytTKXt2YXIgSD1hKEJbU11bMF0pOyh3PVdbSF0pfHwoQi5wdXNoKFtILHtuYW1lOm4oSCkucmVwbGFj'@;
put 'ZSgiLyIsIiIpLHR5cGU6MSxjbHNpZDpkZSxjdDpMLG10OkwsY29udGVudDpudWxsfV0pLFdbSF09ITApfWZvcihCLnNvcnQoZnVuY3Rpb24oaGUsaWUpe3JldHVybiBmdW5jdGlvbiByKG0sRSl7Zm9yKHZhciBfPW0uc3BsaXQoIi8iKSx3PUUuc3BsaXQoIi8iKSxTPTAsRj0wLEw9TWF0aC5t'@;
put 'aW4oXy5sZW5ndGgsdy5sZW5ndGgpO1M8TDsrK1Mpe2lmKEY9X1tTXS5sZW5ndGgtd1tTXS5sZW5ndGgpcmV0dXJuIEY7aWYoX1tTXSE9d1tTXSlyZXR1cm4gX1tTXTx3W1NdPy0xOjF9cmV0dXJuIF8ubGVuZ3RoLXcubGVuZ3RofShoZVswXSxpZVswXSl9KSxtLkZ1bGxQYXRocz1bXSxtLkZp'@;
put 'bGVJbmRleD1bXSxTPTA7UzxCLmxlbmd0aDsrK1MpbS5GdWxsUGF0aHNbU109QltTXVswXSxtLkZpbGVJbmRleFtTXT1CW1NdWzFdO2ZvcihTPTA7UzxCLmxlbmd0aDsrK1Mpe3ZhciBxPW0uRmlsZUluZGV4W1NdLG5lPW0uRnVsbFBhdGhzW1NdO2lmKHEubmFtZT1uKG5lKS5yZXBsYWNlKCIv'@;
put 'IiwiIikscS5MPXEuUj1xLkM9LShxLmNvbG9yPTEpLHEuc2l6ZT1xLmNvbnRlbnQ/cS5jb250ZW50Lmxlbmd0aDowLHEuc3RhcnQ9MCxxLmNsc2lkPXEuY2xzaWR8fGRlLDA9PT1TKXEuQz1CLmxlbmd0aD4xPzE6LTEscS5zaXplPTAscS50eXBlPTU7ZWxzZSBpZigiLyI9PW5lLnNsaWNlKC0x'@;
put 'KSl7Zm9yKHo9UysxO3o8Qi5sZW5ndGgmJmEobS5GdWxsUGF0aHNbel0pIT1uZTsrK3opO2ZvcihxLkM9ej49Qi5sZW5ndGg/LTE6eix6PVMrMTt6PEIubGVuZ3RoJiZhKG0uRnVsbFBhdGhzW3pdKSE9YShuZSk7Kyt6KTtxLlI9ej49Qi5sZW5ndGg/LTE6eixxLnR5cGU9MX1lbHNlIGEobS5G'@;
put 'dWxsUGF0aHNbUysxXXx8IiIpPT1hKG5lKSYmKHEuUj1TKzEpLHEudHlwZT0yfX19ZnVuY3Rpb24gVihtLEUpe3ZhciBfPUV8fHt9O2lmKCJtYWQiPT1fLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiBiZyhtLEUpe2Zvcih2YXIgXz1FfHx7fSx3PV8uYm91bmRhcnl8fCJTaGVldEpTIixTPVsi'@;
put 'TUlNRS1WZXJzaW9uOiAxLjAiLCdDb250ZW50LVR5cGU6IG11bHRpcGFydC9yZWxhdGVkOyBib3VuZGFyeT0iJysodz0iLS0tLS0tPSIrdykuc2xpY2UoMikrJyInLCIiLCIiLCIiXSxGPW0uRnVsbFBhdGhzWzBdLEw9Rix6PW0uRmlsZUluZGV4WzBdLFc9MTtXPG0uRnVsbFBhdGhzLmxlbmd0'@;
put 'aDsrK1cpaWYoTD1tLkZ1bGxQYXRoc1tXXS5zbGljZShGLmxlbmd0aCksKHo9bS5GaWxlSW5kZXhbV10pLnNpemUmJnouY29udGVudCYmIlx4MDFTaDMzdEo1IiE9TCl7TD1MLnJlcGxhY2UoL1tceDAwLVx4MDhceDBCXHgwQ1x4MEUtXHgxRlx4N0UtXHhGRl0vZyxmdW5jdGlvbihfZSl7cmV0'@;
put 'dXJuIl94IitfZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiXyJ9KS5yZXBsYWNlKC9bXHUwMDgwLVx1RkZGRl0vZyxmdW5jdGlvbihfZSl7cmV0dXJuIl91IitfZS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSsiXyJ9KTtmb3IodmFyIEI9ei5jb250ZW50LEg9U2UmJkJ1ZmZlci5p'@;
put 'c0J1ZmZlcihCKT9CLnRvU3RyaW5nKCJiaW5hcnkiKTpjZShCKSxxPTAsbmU9TWF0aC5taW4oMTAyNCxILmxlbmd0aCksaGU9MCxpZT0wO2llPD1uZTsrK2llKShoZT1ILmNoYXJDb2RlQXQoaWUpKT49MzImJmhlPDEyOCYmKytxO3ZhciBmZT1xPj00Km5lLzU7Uy5wdXNoKHcpLFMucHVzaCgi'@;
put 'Q29udGVudC1Mb2NhdGlvbjogIisoXy5yb290fHwiZmlsZTovLy9DOi9TaGVldEpTLyIpK0wpLFMucHVzaCgiQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogIisoZmU/InF1b3RlZC1wcmludGFibGUiOiJiYXNlNjQiKSksUy5wdXNoKCJDb250ZW50LVR5cGU6ICIrQ2coeixMKSksUy5wdXNo'@;
put 'KCIiKSxTLnB1c2goZmU/T2coSCk6RGcoSCkpfXJldHVybiBTLnB1c2godysiLS1cclxuIiksUy5qb2luKCJcclxuIil9KG0sXyk7aWYoInppcCI9PT0oUihtKSxfLmZpbGVUeXBlKSlyZXR1cm4gZnVuY3Rpb24gQWcobSxFKXt2YXIgXz1FfHx7fSx3PVtdLFM9W10sRj1HKDEpLEw9Xy5jb21w'@;
put 'cmVzc2lvbj84OjAsej0wLEI9MCxIPTAscT0wLG5lPTAsaGU9bS5GdWxsUGF0aHNbMF0saWU9aGUsZmU9bS5GaWxlSW5kZXhbMF0sX2U9W10sVmU9MDtmb3IoQj0xO0I8bS5GdWxsUGF0aHMubGVuZ3RoOysrQilpZihpZT1tLkZ1bGxQYXRoc1tCXS5zbGljZShoZS5sZW5ndGgpLChmZT1tLkZp'@;
put 'bGVJbmRleFtCXSkuc2l6ZSYmZmUuY29udGVudCYmIlx4MDFTaDMzdEo1IiE9aWUpe3ZhciBDcj1xLG5yPUcoaWUubGVuZ3RoKTtmb3IoSD0wO0g8aWUubGVuZ3RoOysrSCluci53cml0ZV9zaGlmdCgxLDEyNyZpZS5jaGFyQ29kZUF0KEgpKTtucj1uci5zbGljZSgwLG5yLmwpLF9lW25lXT1z'@;
put 'by5idWYoZmUuY29udGVudCwwKTt2YXIgQnI9ZmUuY29udGVudDs4PT1MJiYoQnI9TyhCcikpLChGPUcoMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSxGLndyaXRlX3NoaWZ0KDIsMjApLEYud3JpdGVfc2hpZnQoMix6KSxGLndyaXRlX3NoaWZ0KDIsTCksZmUubXQ/aShGLGZlLm10KTpG'@;
put 'LndyaXRlX3NoaWZ0KDQsMCksRi53cml0ZV9zaGlmdCgtNCw4Jno/MDpfZVtuZV0pLEYud3JpdGVfc2hpZnQoNCw4Jno/MDpCci5sZW5ndGgpLEYud3JpdGVfc2hpZnQoNCw4Jno/MDpmZS5jb250ZW50Lmxlbmd0aCksRi53cml0ZV9zaGlmdCgyLG5yLmxlbmd0aCksRi53cml0ZV9zaGlmdCgy'@;
put 'LDApLHErPUYubGVuZ3RoLHcucHVzaChGKSxxKz1uci5sZW5ndGgsdy5wdXNoKG5yKSxxKz1Cci5sZW5ndGgsdy5wdXNoKEJyKSw4JnomJigoRj1HKDEyKSkud3JpdGVfc2hpZnQoLTQsX2VbbmVdKSxGLndyaXRlX3NoaWZ0KDQsQnIubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDQsZmUuY29udGVu'@;
put 'dC5sZW5ndGgpLHErPUYubCx3LnB1c2goRikpLChGPUcoNDYpKS53cml0ZV9zaGlmdCg0LDMzNjM5MjQ4KSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCgyLDIwKSxGLndyaXRlX3NoaWZ0KDIseiksRi53cml0ZV9zaGlmdCgyLEwpLEYud3JpdGVfc2hpZnQoNCwwKSxGLndyaXRl'@;
put 'X3NoaWZ0KC00LF9lW25lXSksRi53cml0ZV9zaGlmdCg0LEJyLmxlbmd0aCksRi53cml0ZV9zaGlmdCg0LGZlLmNvbnRlbnQubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDIsbnIubGVuZ3RoKSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMiwwKSxG'@;
put 'LndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCg0LDApLEYud3JpdGVfc2hpZnQoNCxDciksVmUrPUYubCxTLnB1c2goRiksVmUrPW5yLmxlbmd0aCxTLnB1c2gobnIpLCsrbmV9cmV0dXJuKEY9RygyMikpLndyaXRlX3NoaWZ0KDQsMTAxMDEwMjU2KSxGLndyaXRlX3NoaWZ0KDIsMCks'@;
put 'Ri53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMixuZSksRi53cml0ZV9zaGlmdCgyLG5lKSxGLndyaXRlX3NoaWZ0KDQsVmUpLEYud3JpdGVfc2hpZnQoNCxxKSxGLndyaXRlX3NoaWZ0KDIsMCksZnIoW2ZyKHcpLGZyKFMpLEZdKX0obSxfKTt2YXIgdz1mdW5jdGlvbihoZSl7Zm9y'@;
put 'KHZhciBpZT0wLGZlPTAsX2U9MDtfZTxoZS5GaWxlSW5kZXgubGVuZ3RoOysrX2Upe3ZhciBWZT1oZS5GaWxlSW5kZXhbX2VdO2lmKFZlLmNvbnRlbnQpe3ZhciBDcj1WZS5jb250ZW50Lmxlbmd0aDtDcj4wJiYoQ3I8NDA5Nj9pZSs9Q3IrNjM+PjY6ZmUrPUNyKzUxMT4+OSl9fWZvcih2YXIg'@;
put 'bnI9aGUuRnVsbFBhdGhzLmxlbmd0aCszPj4yLFphPWllKzEyNz4+NyxRYT0oaWUrNz4+MykrZmUrbnIrWmEsWnQ9UWErMTI3Pj43LHRpPVp0PD0xMDk/MDpNYXRoLmNlaWwoKFp0LTEwOSkvMTI3KTtRYStadCt0aSsxMjc+Pjc+WnQ7KXRpPSsrWnQ8PTEwOT8wOk1hdGguY2VpbCgoWnQtMTA5'@;
put 'KS8xMjcpO3ZhciBtdD1bMSx0aSxadCxaYSxucixmZSxpZSwwXTtyZXR1cm4gaGUuRmlsZUluZGV4WzBdLnNpemU9aWU8PDYsbXRbN109KGhlLkZpbGVJbmRleFswXS5zdGFydD1tdFswXSttdFsxXSttdFsyXSttdFszXSttdFs0XSttdFs1XSkrKG10WzZdKzc+PjMpLG10fShtKSxTPUcod1s3'@;
put 'XTw8OSksRj0wLEw9MDtmb3IoRj0wO0Y8ODsrK0YpUy53cml0ZV9zaGlmdCgxLHJlW0ZdKTtmb3IoRj0wO0Y8ODsrK0YpUy53cml0ZV9zaGlmdCgyLDApO2ZvcihTLndyaXRlX3NoaWZ0KDIsNjIpLFMud3JpdGVfc2hpZnQoMiwzKSxTLndyaXRlX3NoaWZ0KDIsNjU1MzQpLFMud3JpdGVfc2hp'@;
put 'ZnQoMiw5KSxTLndyaXRlX3NoaWZ0KDIsNiksRj0wO0Y8MzsrK0YpUy53cml0ZV9zaGlmdCgyLDApO2ZvcihTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LHdbMl0pLFMud3JpdGVfc2hpZnQoNCx3WzBdK3dbMV0rd1syXSt3WzNdLTEpLFMud3JpdGVfc2hpZnQoNCwwKSxTLndy'@;
put 'aXRlX3NoaWZ0KDQsNDA5NiksUy53cml0ZV9zaGlmdCg0LHdbM10/d1swXSt3WzFdK3dbMl0tMTplZSksUy53cml0ZV9zaGlmdCg0LHdbM10pLFMud3JpdGVfc2hpZnQoLTQsd1sxXT93WzBdLTE6ZWUpLFMud3JpdGVfc2hpZnQoNCx3WzFdKSxGPTA7RjwxMDk7KytGKVMud3JpdGVfc2hpZnQo'@;
put 'LTQsRjx3WzJdP3dbMV0rRjotMSk7aWYod1sxXSlmb3IoTD0wO0w8d1sxXTsrK0wpe2Zvcig7RjwyMzYrMTI3Kkw7KytGKVMud3JpdGVfc2hpZnQoLTQsRjx3WzJdP3dbMV0rRjotMSk7Uy53cml0ZV9zaGlmdCgtNCxMPT09d1sxXS0xP2VlOkwrMSl9dmFyIHo9ZnVuY3Rpb24oaGUpe2ZvcihM'@;
put 'Kz1oZTtGPEwtMTsrK0YpUy53cml0ZV9zaGlmdCgtNCxGKzEpO2hlJiYoKytGLFMud3JpdGVfc2hpZnQoLTQsZWUpKX07Zm9yKEw9Rj0wLEwrPXdbMV07RjxMOysrRilTLndyaXRlX3NoaWZ0KC00LHVlLkRJRlNFQ1QpO2ZvcihMKz13WzJdO0Y8TDsrK0YpUy53cml0ZV9zaGlmdCgtNCx1ZS5G'@;
put 'QVRTRUNUKTt6KHdbM10pLHood1s0XSk7Zm9yKHZhciBXPTAsQj0wLEg9bS5GaWxlSW5kZXhbMF07VzxtLkZpbGVJbmRleC5sZW5ndGg7KytXKShIPW0uRmlsZUluZGV4W1ddKS5jb250ZW50JiYhKChCPUguY29udGVudC5sZW5ndGgpPDQwOTYpJiYoSC5zdGFydD1MLHooQis1MTE+PjkpKTtm'@;
put 'b3Ioeih3WzZdKzc+PjMpOzUxMSZTLmw7KVMud3JpdGVfc2hpZnQoLTQsdWUuRU5ET0ZDSEFJTik7Zm9yKEw9Rj0wLFc9MDtXPG0uRmlsZUluZGV4Lmxlbmd0aDsrK1cpKEg9bS5GaWxlSW5kZXhbV10pLmNvbnRlbnQmJihCPUguY29udGVudC5sZW5ndGgpJiYhKEI+PTQwOTYpJiYoSC5zdGFy'@;
put 'dD1MLHooQis2Mz4+NikpO2Zvcig7NTExJlMubDspUy53cml0ZV9zaGlmdCgtNCx1ZS5FTkRPRkNIQUlOKTtmb3IoRj0wO0Y8d1s0XTw8MjsrK0Ype3ZhciBxPW0uRnVsbFBhdGhzW0ZdO2lmKHEmJjAhPT1xLmxlbmd0aCl7SD1tLkZpbGVJbmRleFtGXSwwPT09RiYmKEguc3RhcnQ9SC5zaXpl'@;
put 'P0guc3RhcnQtMTplZSk7dmFyIG5lPTA9PT1GJiZfLnJvb3R8fEgubmFtZTtpZihCPTIqKG5lLmxlbmd0aCsxKSxTLndyaXRlX3NoaWZ0KDY0LG5lLCJ1dGYxNmxlIiksUy53cml0ZV9zaGlmdCgyLEIpLFMud3JpdGVfc2hpZnQoMSxILnR5cGUpLFMud3JpdGVfc2hpZnQoMSxILmNvbG9yKSxT'@;
put 'LndyaXRlX3NoaWZ0KC00LEguTCksUy53cml0ZV9zaGlmdCgtNCxILlIpLFMud3JpdGVfc2hpZnQoLTQsSC5DKSxILmNsc2lkKVMud3JpdGVfc2hpZnQoMTYsSC5jbHNpZCwiaGV4Iik7ZWxzZSBmb3IoVz0wO1c8NDsrK1cpUy53cml0ZV9zaGlmdCg0LDApO1Mud3JpdGVfc2hpZnQoNCxILnN0'@;
put 'YXRlfHwwKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LDApLFMud3JpdGVfc2hpZnQoNCwwKSxTLndyaXRlX3NoaWZ0KDQsMCksUy53cml0ZV9zaGlmdCg0LEguc3RhcnQpLFMud3JpdGVfc2hpZnQoNCxILnNpemUpLFMud3JpdGVfc2hpZnQoNCwwKX1lbHNle2ZvcihXPTA7'@;
put 'VzwxNzsrK1cpUy53cml0ZV9zaGlmdCg0LDApO2ZvcihXPTA7VzwzOysrVylTLndyaXRlX3NoaWZ0KDQsLTEpO2ZvcihXPTA7VzwxMjsrK1cpUy53cml0ZV9zaGlmdCg0LDApfX1mb3IoRj0xO0Y8bS5GaWxlSW5kZXgubGVuZ3RoOysrRilpZigoSD1tLkZpbGVJbmRleFtGXSkuc2l6ZT49NDA5'@;
put 'NilpZihTLmw9SC5zdGFydCsxPDw5LFNlJiZCdWZmZXIuaXNCdWZmZXIoSC5jb250ZW50KSlILmNvbnRlbnQuY29weShTLFMubCwwLEguc2l6ZSksUy5sKz1ILnNpemUrNTExJi01MTI7ZWxzZXtmb3IoVz0wO1c8SC5zaXplOysrVylTLndyaXRlX3NoaWZ0KDEsSC5jb250ZW50W1ddKTtmb3Io'@;
put 'OzUxMSZXOysrVylTLndyaXRlX3NoaWZ0KDEsMCl9Zm9yKEY9MTtGPG0uRmlsZUluZGV4Lmxlbmd0aDsrK0YpaWYoKEg9bS5GaWxlSW5kZXhbRl0pLnNpemU+MCYmSC5zaXplPDQwOTYpaWYoU2UmJkJ1ZmZlci5pc0J1ZmZlcihILmNvbnRlbnQpKUguY29udGVudC5jb3B5KFMsUy5sLDAsSC5z'@;
put 'aXplKSxTLmwrPUguc2l6ZSs2MyYtNjQ7ZWxzZXtmb3IoVz0wO1c8SC5zaXplOysrVylTLndyaXRlX3NoaWZ0KDEsSC5jb250ZW50W1ddKTtmb3IoOzYzJlc7KytXKVMud3JpdGVfc2hpZnQoMSwwKX1pZihTZSlTLmw9Uy5sZW5ndGg7ZWxzZSBmb3IoO1MubDxTLmxlbmd0aDspUy53cml0ZV9z'@;
put 'aGlmdCgxLDApO3JldHVybiBTfXQudmVyc2lvbj0iMS4yLjEiO3ZhciBLLGI9NjQsZWU9LTIsbGU9ImQwY2YxMWUwYTFiMTFhZTEiLHJlPVsyMDgsMjA3LDE3LDIyNCwxNjEsMTc3LDI2LDIyNV0sZGU9IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIix1ZT17TUFYUkVHU0VDVDot'@;
put 'NixESUZTRUNUOi00LEZBVFNFQ1Q6LTMsRU5ET0ZDSEFJTjplZSxGUkVFU0VDVDotMSxIRUFERVJfU0lHTkFUVVJFOmxlLEhFQURFUl9NSU5PUl9WRVJTSU9OOiIzZTAwIixNQVhSRUdTSUQ6LTYsTk9TVFJFQU06LTEsSEVBREVSX0NMU0lEOmRlLEVudHJ5VHlwZXM6WyJ1bmtub3duIiwic3Rv'@;
put 'cmFnZSIsInN0cmVhbSIsImxvY2tieXRlcyIsInByb3BlcnR5Iiwicm9vdCJdfTtmdW5jdGlvbiBjZShtKXtmb3IodmFyIEU9bmV3IEFycmF5KG0ubGVuZ3RoKSxfPTA7XzxtLmxlbmd0aDsrK18pRVtfXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG1bX10pO3JldHVybiBFLmpvaW4oIiIpfWZ1bmN0'@;
put 'aW9uIE8obSl7cmV0dXJuIEs/Sy5kZWZsYXRlUmF3U3luYyhtKTp5ZShtKX1mb3IodmFyIG0sRSxEPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxqPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3'@;
put 'LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4XSxzZT1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3XSxRPXR5cGVvZiBVaW50OEFy'@;
put 'cmF5PCJ1IixZPVE/bmV3IFVpbnQ4QXJyYXkoMjU2KTpbXSxFZT0wO0VlPDI1NjsrK0VlKVlbRWVdPSh2b2lkIDAsMjU1JigoRT0xMzk1MzYmKChtPUVlKTw8MXxtPDwxMSl8NTU4MTQ0JihtPDw1fG08PDE1KSk+PjE2fEU+Pjh8RSkpO2Z1bmN0aW9uIEEobSxFKXt2YXIgXz1ZWzI1NSZtXTty'@;
put 'ZXR1cm4gRTw9OD9fPj4+OC1FOihfPV88PDh8WVttPj44JjI1NV0sRTw9MTY/Xz4+PjE2LUU6KF89Xzw8OHxZW20+PjE2JjI1NV0pPj4+MjQtRSl9ZnVuY3Rpb24gUGUobSxFKXt2YXIgXz03JkUsdz1FPj4+MztyZXR1cm4obVt3XXwoXzw9Nj8wOm1bdysxXTw8OCkpPj4+XyYzfWZ1bmN0aW9u'@;
put 'IEFlKG0sRSl7dmFyIF89NyZFLHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTU/MDptW3crMV08PDgpKT4+Pl8mN31mdW5jdGlvbiBDZShtLEUpe3ZhciBfPTcmRSx3PUU+Pj4zO3JldHVybihtW3ddfChfPD0zPzA6bVt3KzFdPDw4KSk+Pj5fJjMxfWZ1bmN0aW9uIG9lKG0sRSl7dmFyIF89NyZF'@;
put 'LHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTE/MDptW3crMV08PDgpKT4+Pl8mMTI3fWZ1bmN0aW9uIHFlKG0sRSxfKXt2YXIgdz03JkUsUz1FPj4+MyxMPW1bU10+Pj53O3JldHVybiBfPDgtd3x8KEx8PW1bUysxXTw8OC13LF88MTYtdyl8fChMfD1tW1MrMl08PDE2LXcsXzwyNC13KXx8KEx8'@;
put 'PW1bUyszXTw8MjQtdyksTCYoMTw8XyktMX1mdW5jdGlvbiBqcihtLEUsXyl7dmFyIHc9NyZFLFM9RT4+PjM7cmV0dXJuIHc8PTU/bVtTXXw9KDcmXyk8PHc6KG1bU118PV88PHcmMjU1LG1bUysxXT0oNyZfKT4+OC13KSxFKzN9ZnVuY3Rpb24gZnQobSxFLF8pe3JldHVybiBtW0U+Pj4zXXw9'@;
put 'Xz0oMSZfKTw8KDcmRSksRSsxfWZ1bmN0aW9uIHZ0KG0sRSxfKXt2YXIgUz1FPj4+MztyZXR1cm4gbVtTXXw9MjU1JihfPDw9NyZFKSxtW1MrMV09Xz4+Pj04LEUrOH1mdW5jdGlvbiBKYShtLEUsXyl7dmFyIFM9RT4+PjM7cmV0dXJuIG1bU118PTI1NSYoXzw8PTcmRSksbVtTKzFdPTI1NSYo'@;
put 'Xz4+Pj04KSxtW1MrMl09Xz4+PjgsRSsxNn1mdW5jdGlvbiBPdChtLEUpe3ZhciBfPW0ubGVuZ3RoLHc9MipfPkU/MipfOkUrNSxTPTA7aWYoXz49RSlyZXR1cm4gbTtpZihTZSl7dmFyIEY9bmkodyk7aWYobS5jb3B5KW0uY29weShGKTtlbHNlIGZvcig7UzxtLmxlbmd0aDsrK1MpRltTXT1t'@;
put 'W1NdO3JldHVybiBGfWlmKFEpe3ZhciBMPW5ldyBVaW50OEFycmF5KHcpO2lmKEwuc2V0KUwuc2V0KG0pO2Vsc2UgZm9yKDtTPF87KytTKUxbU109bVtTXTtyZXR1cm4gTH1yZXR1cm4gbS5sZW5ndGg9dyxtfWZ1bmN0aW9uIExyKG0pe2Zvcih2YXIgRT1uZXcgQXJyYXkobSksXz0wO188bTsr'@;
put 'K18pRVtfXT0wO3JldHVybiBFfWZ1bmN0aW9uIHB0KG0sRSxfKXt2YXIgdz0xLFM9MCxGPTAsTD0wLHo9MCxXPW0ubGVuZ3RoLEI9UT9uZXcgVWludDE2QXJyYXkoMzIpOkxyKDMyKTtmb3IoRj0wO0Y8MzI7KytGKUJbRl09MDtmb3IoRj1XO0Y8XzsrK0YpbVtGXT0wO1c9bS5sZW5ndGg7dmFy'@;
put 'IEg9UT9uZXcgVWludDE2QXJyYXkoVyk6THIoVyk7Zm9yKEY9MDtGPFc7KytGKUJbUz1tW0ZdXSsrLHc8UyYmKHc9UyksSFtGXT0wO2ZvcihCWzBdPTAsRj0xO0Y8PXc7KytGKUJbRisxNl09ej16K0JbRi0xXTw8MTtmb3IoRj0wO0Y8VzsrK0YpMCE9KHo9bVtGXSkmJihIW0ZdPUJbeisxNl0r'@;
put 'Kyk7dmFyIHE9MDtmb3IoRj0wO0Y8VzsrK0YpaWYoMCE9KHE9bVtGXSkpZm9yKHo9QShIW0ZdLHcpPj53LXEsTD0oMTw8dys0LXEpLTE7TD49MDstLUwpRVt6fEw8PHFdPTE1JnF8Rjw8NDtyZXR1cm4gd312YXIgSXQ9UT9uZXcgVWludDE2QXJyYXkoNTEyKTpMcig1MTIpLHFhPVE/bmV3IFVp'@;
put 'bnQxNkFycmF5KDMyKTpMcigzMik7aWYoIVEpe2Zvcih2YXIgeXI9MDt5cjw1MTI7Kyt5cilJdFt5cl09MDtmb3IoeXI9MDt5cjwzMjsrK3lyKXFhW3lyXT0wfSFmdW5jdGlvbigpe2Zvcih2YXIgbT1bXSxFPTA7RTwzMjtFKyspbS5wdXNoKDUpO3B0KG0scWEsMzIpO3ZhciBfPVtdO2ZvcihF'@;
put 'PTA7RTw9MTQzO0UrKylfLnB1c2goOCk7Zm9yKDtFPD0yNTU7RSsrKV8ucHVzaCg5KTtmb3IoO0U8PTI3OTtFKyspXy5wdXNoKDcpO2Zvcig7RTw9Mjg3O0UrKylfLnB1c2goOCk7cHQoXyxJdCwyODgpfSgpO3ZhciBjdD1mdW5jdGlvbigpe2Zvcih2YXIgRT1RP25ldyBVaW50OEFycmF5KDMy'@;
put 'NzY4KTpbXSxfPTAsdz0wO188c2UubGVuZ3RoLTE7KytfKWZvcig7dzxzZVtfKzFdOysrdylFW3ddPV87Zm9yKDt3PDMyNzY4OysrdylFW3ddPTI5O3ZhciBTPVE/bmV3IFVpbnQ4QXJyYXkoMjU5KTpbXTtmb3IoXz0wLHc9MDtfPGoubGVuZ3RoLTE7KytfKWZvcig7dzxqW18rMV07Kyt3KVNb'@;
put 'd109XztyZXR1cm4gZnVuY3Rpb24oVyxCKXtyZXR1cm4gVy5sZW5ndGg8OD9mdW5jdGlvbiBGKHosVyl7Zm9yKHZhciBCPTA7Qjx6Lmxlbmd0aDspe3ZhciBIPU1hdGgubWluKDY1NTM1LHoubGVuZ3RoLUIpO2ZvcihXLndyaXRlX3NoaWZ0KDEsKyhCK0g9PXoubGVuZ3RoKSksVy53cml0ZV9z'@;
put 'aGlmdCgyLEgpLFcud3JpdGVfc2hpZnQoMiw2NTUzNSZ+SCk7SC0tID4wOylXW1cubCsrXT16W0IrK119cmV0dXJuIFcubH0oVyxCKTpmdW5jdGlvbiBMKHosVyl7Zm9yKHZhciBCPTAsSD0wLHE9UT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOltdO0g8ei5sZW5ndGg7KXt2YXIgbmU9TWF0aC5t'@;
put 'aW4oNjU1MzUsei5sZW5ndGgtSCk7aWYobmU8MTApe2Zvcig3JihCPWpyKFcsQiwrKEgrbmU9PXoubGVuZ3RoKSkpJiYoQis9OC0oNyZCKSksVy5sPUIvOHwwLFcud3JpdGVfc2hpZnQoMixuZSksVy53cml0ZV9zaGlmdCgyLDY1NTM1Jn5uZSk7bmUtLSA+MDspV1tXLmwrK109eltIKytdO0I9'@;
put 'OCpXLmx9ZWxzZXtCPWpyKFcsQiwrKEgrbmU9PXoubGVuZ3RoKSsyKTtmb3IodmFyIGhlPTA7bmUtLSA+MDspe3ZhciBpZT16W0hdLGZlPS0xLF9lPTA7aWYoKGZlPXFbaGU9MzI3NjcmKGhlPDw1XmllKV0pJiYoKGZlfD0tMzI3NjgmSCk+SCYmKGZlLT0zMjc2OCksZmU8SCkpZm9yKDt6W2Zl'@;
put 'K19lXT09eltIK19lXSYmX2U8MjUwOykrK19lO2lmKF9lPjIpeyhpZT1TW19lXSk8PTIyP0I9dnQoVyxCLFlbaWUrMV0+PjEpLTE6KHZ0KFcsQiwzKSx2dChXLEIrPTUsWVtpZS0yM10+PjUpLEIrPTMpO3ZhciBWZT1pZTw4PzA6aWUtND4+MjtWZT4wJiYoSmEoVyxCLF9lLWpbaWVdKSxCKz1W'@;
put 'ZSksQj12dChXLEIsWVtpZT1FW0gtZmVdXT4+MyksQi09Mzt2YXIgQ3I9aWU8ND8wOmllLTI+PjE7Q3I+MCYmKEphKFcsQixILWZlLXNlW2llXSksQis9Q3IpO2Zvcih2YXIgbnI9MDtucjxfZTsrK25yKXFbaGVdPTMyNzY3JkgsaGU9MzI3NjcmKGhlPDw1XnpbSF0pLCsrSDtuZS09X2UtMX1l'@;
put 'bHNlIGllPD0xNDM/aWUrPTQ4OkI9ZnQoVyxCLDEpLEI9dnQoVyxCLFlbaWVdKSxxW2hlXT0zMjc2NyZILCsrSH1CPXZ0KFcsQiwwKS0xfX1yZXR1cm4gVy5sPShCKzcpLzh8MCxXLmx9KFcsQil9fSgpO2Z1bmN0aW9uIHllKG0pe3ZhciBFPUcoNTArTWF0aC5mbG9vcigxLjEqbS5sZW5ndGgp'@;
put 'KSxfPWN0KG0sRSk7cmV0dXJuIEUuc2xpY2UoMCxfKX12YXIgWmU9UT9uZXcgVWludDE2QXJyYXkoMzI3NjgpOkxyKDMyNzY4KSxLcj1RP25ldyBVaW50MTZBcnJheSgzMjc2OCk6THIoMzI3NjgpLHNyPVE/bmV3IFVpbnQxNkFycmF5KDEyOCk6THIoMTI4KSxxdD0xLEZjPTE7ZnVuY3Rpb24g'@;
put 'U2cobSxFKXt2YXIgXz1DZShtLEUpKzI1Nyx3PUNlKG0sRSs9NSkrMSxTPWZ1bmN0aW9uIExlKG0sRSl7dmFyIF89NyZFLHc9RT4+PjM7cmV0dXJuKG1bd118KF88PTQ/MDptW3crMV08PDgpKT4+Pl8mMTV9KG0sRSs9NSkrNDtFKz00O2Zvcih2YXIgRj0wLEw9UT9uZXcgVWludDhBcnJheSgx'@;
put 'OSk6THIoMTkpLHo9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdLFc9MSxCPVE/bmV3IFVpbnQ4QXJyYXkoOCk6THIoOCksSD1RP25ldyBVaW50OEFycmF5KDgpOkxyKDgpLHE9TC5sZW5ndGgsbmU9MDtuZTxTOysrbmUpTFtEW25lXV09Rj1BZShtLEUpLFc8RiYmKFc9'@;
put 'RiksQltGXSsrLEUrPTM7dmFyIGhlPTA7Zm9yKEJbMF09MCxuZT0xO25lPD1XOysrbmUpSFtuZV09aGU9aGUrQltuZS0xXTw8MTtmb3IobmU9MDtuZTxxOysrbmUpMCE9KGhlPUxbbmVdKSYmKHpbbmVdPUhbaGVdKyspO3ZhciBpZT0wO2ZvcihuZT0wO25lPHE7KytuZSlpZigwIT0oaWU9TFtu'@;
put 'ZV0pKXtoZT1ZW3pbbmVdXT4+OC1pZTtmb3IodmFyIGZlPSgxPDw3LWllKS0xO2ZlPj0wOy0tZmUpc3JbaGV8ZmU8PGllXT03JmllfG5lPDwzfXZhciBfZT1bXTtmb3IoVz0xO19lLmxlbmd0aDxfK3c7KXN3aXRjaChoZT1zcltvZShtLEUpXSxFKz03JmhlLGhlPj4+PTMpe2Nhc2UgMTY6Zm9y'@;
put 'KEY9MytQZShtLEUpLEUrPTIsaGU9X2VbX2UubGVuZ3RoLTFdO0YtLSA+MDspX2UucHVzaChoZSk7YnJlYWs7Y2FzZSAxNzpmb3IoRj0zK0FlKG0sRSksRSs9MztGLS0gPjA7KV9lLnB1c2goMCk7YnJlYWs7Y2FzZSAxODpmb3IoRj0xMStvZShtLEUpLEUrPTc7Ri0tID4wOylfZS5wdXNoKDAp'@;
put 'O2JyZWFrO2RlZmF1bHQ6X2UucHVzaChoZSksVzxoZSYmKFc9aGUpfXZhciBWZT1fZS5zbGljZSgwLF8pLENyPV9lLnNsaWNlKF8pO2ZvcihuZT1fO25lPDI4NjsrK25lKVZlW25lXT0wO2ZvcihuZT13O25lPDMwOysrbmUpQ3JbbmVdPTA7cmV0dXJuIHF0PXB0KFZlLFplLDI4NiksRmM9cHQo'@;
put 'Q3IsS3IsMzApLEV9ZnVuY3Rpb24geWMobSxFKXt2YXIgdz1mdW5jdGlvbiBGZyhtLEUpe2lmKDM9PW1bMF0mJiEoMyZtWzFdKSlyZXR1cm5bX3QoRSksMl07Zm9yKHZhciBfPTAsdz0wLFM9bmkoRXx8MTw8MTgpLEY9MCxMPVMubGVuZ3RoPj4+MCx6PTAsVz0wOyEoMSZ3KTspaWYodz1BZSht'@;
put 'LF8pLF8rPTMsdz4+PjEpZm9yKHc+PjE9PTE/KHo9OSxXPTUpOihfPVNnKG0sXyksej1xdCxXPUZjKTs7KXshRSYmTDxGKzMyNzY3JiYoTD0oUz1PdChTLEYrMzI3NjcpKS5sZW5ndGgpO3ZhciBIPXFlKG0sXyx6KSxxPXc+Pj4xPT0xP0l0W0hdOlplW0hdO2lmKF8rPTE1JnEsKHE+Pj49NCk+'@;
put 'Pj44JjI1NSl7aWYoMjU2PT1xKWJyZWFrO3ZhciBuZT0ocS09MjU3KTw4PzA6cS00Pj4yO25lPjUmJihuZT0wKTt2YXIgaGU9RitqW3FdO25lPjAmJihoZSs9cWUobSxfLG5lKSxfKz1uZSksSD1xZShtLF8sVyksXys9MTUmKHE9dz4+PjE9PTE/cWFbSF06S3JbSF0pO3ZhciBpZT0ocT4+Pj00'@;
put 'KTw0PzA6cS0yPj4xLGZlPXNlW3FdO2ZvcihpZT4wJiYoZmUrPXFlKG0sXyxpZSksXys9aWUpLCFFJiZMPGhlJiYoTD0oUz1PdChTLGhlKzEwMCkpLmxlbmd0aCk7RjxoZTspU1tGXT1TW0YtZmVdLCsrRn1lbHNlIFNbRisrXT1xfWVsc2V7NyZfJiYoXys9OC0oNyZfKSk7dmFyIEI9bVtfPj4+'@;
put 'M118bVsxKyhfPj4+MyldPDw4O2lmKF8rPTMyLEI+MClmb3IoIUUmJkw8RitCJiYoTD0oUz1PdChTLEYrQikpLmxlbmd0aCk7Qi0tID4wOylTW0YrK109bVtfPj4+M10sXys9OH1yZXR1cm4gRT9bUyxfKzc+Pj4zXTpbUy5zbGljZSgwLEYpLF8rNz4+PjNdfShtLnNsaWNlKG0ubHx8MCksRSk7'@;
put 'cmV0dXJuIG0ubCs9d1sxXSx3WzBdfWZ1bmN0aW9uIEFjKG0sRSl7aWYoIW0pdGhyb3cgbmV3IEVycm9yKEUpO3R5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS5lcnJvcihFKX1mdW5jdGlvbiBDYyhtLEUpe3ZhciBfPW07aHIoXywwKTt2YXIgRj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpb'@;
put 'XX07eShGLHtyb290OkUucm9vdH0pO2Zvcih2YXIgTD1fLmxlbmd0aC00Oyg4MCE9X1tMXXx8NzUhPV9bTCsxXXx8NSE9X1tMKzJdfHw2IT1fW0wrM10pJiZMPj0wOyktLUw7Xy5sPUwrNCxfLmwrPTQ7dmFyIHo9Xy5yZWFkX3NoaWZ0KDIpO18ubCs9Njt2YXIgVz1fLnJlYWRfc2hpZnQoNCk7'@;
put 'Zm9yKF8ubD1XLEw9MDtMPHo7KytMKXtfLmwrPTIwO3ZhciBCPV8ucmVhZF9zaGlmdCg0KSxIPV8ucmVhZF9zaGlmdCg0KSxxPV8ucmVhZF9zaGlmdCgyKSxuZT1fLnJlYWRfc2hpZnQoMiksaGU9Xy5yZWFkX3NoaWZ0KDIpO18ubCs9ODt2YXIgaWU9Xy5yZWFkX3NoaWZ0KDQpLGZlPWYoXy5z'@;
put 'bGljZShfLmwrcSxfLmwrcStuZSkpO18ubCs9cStuZStoZTt2YXIgX2U9Xy5sO18ubD1pZSs0LHlnKF8sQixILEYsZmUpLF8ubD1fZX1yZXR1cm4gRn1mdW5jdGlvbiB5ZyhtLEUsXyx3LFMpe20ubCs9Mjt2YXIgRj1tLnJlYWRfc2hpZnQoMiksTD1tLnJlYWRfc2hpZnQoMiksej1mdW5jdGlv'@;
put 'biBzKG0pe3ZhciBFPTY1NTM1Jm0ucmVhZF9zaGlmdCgyKSxfPTY1NTM1Jm0ucmVhZF9zaGlmdCgyKSx3PW5ldyBEYXRlLFM9MzEmXyxGPTE1JihfPj4+PTUpO18+Pj49NCx3LnNldE1pbGxpc2Vjb25kcygwKSx3LnNldEZ1bGxZZWFyKF8rMTk4MCksdy5zZXRNb250aChGLTEpLHcuc2V0RGF0'@;
put 'ZShTKTt2YXIgTD0zMSZFLHo9NjMmKEU+Pj49NSk7cmV0dXJuIHcuc2V0SG91cnMoRT4+Pj02KSx3LnNldE1pbnV0ZXMoeiksdy5zZXRTZWNvbmRzKEw8PDEpLHd9KG0pO2lmKDgyNTcmRil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7bS5yZWFkX3NoaWZ0'@;
put 'KDQpO2Zvcih2YXIgQj1tLnJlYWRfc2hpZnQoNCksSD1tLnJlYWRfc2hpZnQoNCkscT1tLnJlYWRfc2hpZnQoMiksbmU9bS5yZWFkX3NoaWZ0KDIpLGhlPSIiLGllPTA7aWU8cTsrK2llKWhlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG1bbS5sKytdKTtpZihuZSl7dmFyIGZlPWYobS5zbGljZSht'@;
put 'LmwsbS5sK25lKSk7KGZlWzIxNTg5XXx8e30pLm10JiYoej1mZVsyMTU4OV0ubXQpLCgoU3x8e30pWzIxNTg5XXx8e30pLm10JiYoej1TWzIxNTg5XS5tdCl9bS5sKz1uZTt2YXIgX2U9bS5zbGljZShtLmwsbS5sK0IpO3N3aXRjaChMKXtjYXNlIDg6X2U9ZnVuY3Rpb24gVShtLEUpe2lmKCFL'@;
put 'KXJldHVybiB5YyhtLEUpO3ZhciB3PW5ldygwLEsuSW5mbGF0ZVJhdyksUz13Ll9wcm9jZXNzQ2h1bmsobS5zbGljZShtLmwpLHcuX2ZpbmlzaEZsdXNoRmxhZyk7cmV0dXJuIG0ubCs9dy5ieXRlc1JlYWQsU30obSxIKTticmVhaztjYXNlIDA6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJy'@;
put 'b3IoIlVuc3VwcG9ydGVkIFpJUCBDb21wcmVzc2lvbiBtZXRob2QgIitMKX12YXIgVmU9ITE7OCZGJiYoMTM0Njk1NzYwPT1tLnJlYWRfc2hpZnQoNCkmJihtLnJlYWRfc2hpZnQoNCksVmU9ITApLEI9bS5yZWFkX3NoaWZ0KDQpLEg9bS5yZWFkX3NoaWZ0KDQpKSxCIT1FJiZBYyhWZSwiQmFk'@;
put 'IGNvbXByZXNzZWQgc2l6ZTogIitFKyIgIT0gIitCKSxIIT1fJiZBYyhWZSwiQmFkIHVuY29tcHJlc3NlZCBzaXplOiAiK18rIiAhPSAiK0gpLHJpKHcsaGUsX2Use3Vuc2FmZTohMCxtdDp6fSl9dmFyIFAwPXtodG06InRleHQvaHRtbCIseG1sOiJ0ZXh0L3htbCIsZ2lmOiJpbWFnZS9naWYi'@;
put 'LGpwZzoiaW1hZ2UvanBlZyIscG5nOiJpbWFnZS9wbmciLG1zbzoiYXBwbGljYXRpb24veC1tc28iLHRobXg6ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2V0aGVtZSIsc2gzM3RqNToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn07ZnVuY3Rpb24gQ2cobSxFKXtpZihtLmN0eXBlKXJldHVy'@;
put 'biBtLmN0eXBlO3ZhciBfPW0ubmFtZXx8IiIsdz1fLm1hdGNoKC9cLihbXlwuXSspJC8pO3JldHVybiB3JiZQMFt3WzFdXXx8RSYmKHc9KF89RSkubWF0Y2goL1tcLlxcXShbXlwuXFxdKSskLykpJiZQMFt3WzFdXT9QMFt3WzFdXToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn1mdW5jdGlv'@;
put 'biBEZyhtKXtmb3IodmFyIEU9Z2EobSksXz1bXSx3PTA7dzxFLmxlbmd0aDt3Kz03NilfLnB1c2goRS5zbGljZSh3LHcrNzYpKTtyZXR1cm4gXy5qb2luKCJcclxuIikrIlxyXG4ifWZ1bmN0aW9uIE9nKG0pe3ZhciBFPW0ucmVwbGFjZSgvW1x4MDAtXHgwOFx4MEJceDBDXHgwRS1ceDFGXHg3'@;
put 'RS1ceEZGPV0vZyxmdW5jdGlvbihCKXt2YXIgSD1CLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIj0iKygxPT1ILmxlbmd0aD8iMCIrSDpIKX0pOyJcbiI9PShFPUUucmVwbGFjZSgvICQvZ20sIj0yMCIpLnJlcGxhY2UoL1x0JC9nbSwiPTA5IikpLmNo'@;
put 'YXJBdCgwKSYmKEU9Ij0wRCIrRS5zbGljZSgxKSk7Zm9yKHZhciBfPVtdLHc9KEU9RS5yZXBsYWNlKC9ccig/IVxuKS9nbSwiPTBEIikucmVwbGFjZSgvXG5cbi9nbSwiXG49MEEiKS5yZXBsYWNlKC8oW15cclxuXSlcbi9nbSwiJDE9MEEiKSkuc3BsaXQoIlxyXG4iKSxTPTA7Uzx3Lmxlbmd0'@;
put 'aDsrK1Mpe3ZhciBGPXdbU107aWYoMCE9Ri5sZW5ndGgpZm9yKHZhciBMPTA7TDxGLmxlbmd0aDspe3ZhciB6PTc2LFc9Ri5zbGljZShMLEwreik7Ij0iPT1XLmNoYXJBdCh6LTEpP3otLToiPSI9PVcuY2hhckF0KHotMik/ei09MjoiPSI9PVcuY2hhckF0KHotMykmJih6LT0zKSxXPUYuc2xp'@;
put 'Y2UoTCxMK3opLChMKz16KTxGLmxlbmd0aCYmKFcrPSI9IiksXy5wdXNoKFcpfWVsc2UgXy5wdXNoKCIiKX1yZXR1cm4gXy5qb2luKCJcclxuIil9ZnVuY3Rpb24gUmcobSxFLF8pe2Zvcih2YXIgTCx3PSIiLFM9IiIsRj0iIix6PTA7ejwxMDsrK3ope3ZhciBXPUVbel07aWYoIVd8fFcubWF0'@;
put 'Y2goL15ccyokLykpYnJlYWs7dmFyIEI9Vy5tYXRjaCgvXiguKj8pOlxzKihbXlxzXS4qKSQvKTtpZihCKXN3aXRjaChCWzFdLnRvTG93ZXJDYXNlKCkpe2Nhc2UiY29udGVudC1sb2NhdGlvbiI6dz1CWzJdLnRyaW0oKTticmVhaztjYXNlImNvbnRlbnQtdHlwZSI6Rj1CWzJdLnRyaW0oKTti'@;
put 'cmVhaztjYXNlImNvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmciOlM9QlsyXS50cmltKCl9fXN3aXRjaCgrK3osUy50b0xvd2VyQ2FzZSgpKXtjYXNlImJhc2U2NCI6TD1JcihPcihFLnNsaWNlKHopLmpvaW4oIiIpKSk7YnJlYWs7Y2FzZSJxdW90ZWQtcHJpbnRhYmxlIjpMPWZ1bmN0aW9uIEln'@;
put 'KG0pe2Zvcih2YXIgRT1bXSxfPTA7XzxtLmxlbmd0aDsrK18pe2Zvcih2YXIgdz1tW19dO188PW0ubGVuZ3RoJiYiPSI9PXcuY2hhckF0KHcubGVuZ3RoLTEpOyl3PXcuc2xpY2UoMCx3Lmxlbmd0aC0xKSttWysrX107RS5wdXNoKHcpfWZvcih2YXIgUz0wO1M8RS5sZW5ndGg7KytTKUVbU109'@;
put 'RVtTXS5yZXBsYWNlKC9bPV1bMC05QS1GYS1mXXsyfS9nLGZ1bmN0aW9uKEYpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KEYuc2xpY2UoMSksMTYpKX0pO3JldHVybiBJcihFLmpvaW4oIlxyXG4iKSl9KEUuc2xpY2UoeikpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVy'@;
put 'cm9yKCJVbnN1cHBvcnRlZCBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nICIrUyl9dmFyIEg9cmkobSx3LnNsaWNlKF8ubGVuZ3RoKSxMLHt1bnNhZmU6ITB9KTtGJiYoSC5jdHlwZT1GKX1mdW5jdGlvbiByaShtLEUsXyx3KXt2YXIgUz13JiZ3LnVuc2FmZTtTfHx5KG0pO3ZhciBGPSFTJiZ2'@;
put 'ZS5maW5kKG0sRSk7aWYoIUYpe3ZhciBMPW0uRnVsbFBhdGhzWzBdO0Uuc2xpY2UoMCxMLmxlbmd0aCk9PUw/TD1FOigiLyIhPUwuc2xpY2UoLTEpJiYoTCs9Ii8iKSxMPShMK0UpLnJlcGxhY2UoIi8vIiwiLyIpKSxGPXtuYW1lOm4oRSksdHlwZToyfSxtLkZpbGVJbmRleC5wdXNoKEYpLG0u'@;
put 'RnVsbFBhdGhzLnB1c2goTCksU3x8dmUudXRpbHMuY2ZiX2djKG0pfXJldHVybiBGLmNvbnRlbnQ9XyxGLnNpemU9Xz9fLmxlbmd0aDowLHcmJih3LkNMU0lEJiYoRi5jbHNpZD13LkNMU0lEKSx3Lm10JiYoRi5tdD13Lm10KSx3LmN0JiYoRi5jdD13LmN0KSksRn1yZXR1cm4gdC5maW5kPWZ1'@;
put 'bmN0aW9uIFgobSxFKXt2YXIgXz1tLkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oVyl7cmV0dXJuIFcudG9VcHBlckNhc2UoKX0pLHc9Xy5tYXAoZnVuY3Rpb24oVyl7dmFyIEI9Vy5zcGxpdCgiLyIpO3JldHVybiBCW0IubGVuZ3RoLSgiLyI9PVcuc2xpY2UoLTEpPzI6MSldfSksUz0hMTs0Nz09'@;
put 'PUUuY2hhckNvZGVBdCgwKT8oUz0hMCxFPV9bMF0uc2xpY2UoMCwtMSkrRSk6Uz0tMSE9PUUuaW5kZXhPZigiLyIpO3ZhciBGPUUudG9VcHBlckNhc2UoKSxMPSEwPT09Uz9fLmluZGV4T2YoRik6dy5pbmRleE9mKEYpO2lmKC0xIT09TClyZXR1cm4gbS5GaWxlSW5kZXhbTF07dmFyIHo9IUYu'@;
put 'bWF0Y2god2EpO2ZvcihGPUYucmVwbGFjZShkciwiIikseiYmKEY9Ri5yZXBsYWNlKHdhLCIhIikpLEw9MDtMPF8ubGVuZ3RoOysrTClpZigoej9fW0xdLnJlcGxhY2Uod2EsIiEiKTpfW0xdKS5yZXBsYWNlKGRyLCIiKT09Rnx8KHo/d1tMXS5yZXBsYWNlKHdhLCIhIik6d1tMXSkucmVwbGFj'@;
put 'ZShkciwiIik9PUYpcmV0dXJuIG0uRmlsZUluZGV4W0xdO3JldHVybiBudWxsfSx0LnJlYWQ9ZnVuY3Rpb24gSShtLEUpe3ZhciBfPUUmJkUudHlwZTtzd2l0Y2goX3x8U2UmJkJ1ZmZlci5pc0J1ZmZlcihtKSYmKF89ImJ1ZmZlciIpLF98fCJiYXNlNjQiKXtjYXNlImZpbGUiOnJldHVybiBm'@;
put 'dW5jdGlvbiBNKG0sRSl7cmV0dXJuIG8oKSxsKGMucmVhZEZpbGVTeW5jKG0pLEUpfShtLEUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gbChJcihPcihtKSksRSk7Y2FzZSJiaW5hcnkiOnJldHVybiBsKElyKG0pLEUpfXJldHVybiBsKG0sRSl9LHQucGFyc2U9bCx0LndyaXRlPWZ1bmN0aW9uIHhl'@;
put 'KG0sRSl7dmFyIF89VihtLEUpO3N3aXRjaChFJiZFLnR5cGV8fCJidWZmZXIiKXtjYXNlImZpbGUiOnJldHVybiBvKCksYy53cml0ZUZpbGVTeW5jKEUuZmlsZW5hbWUsXyksXztjYXNlImJpbmFyeSI6cmV0dXJuInN0cmluZyI9PXR5cGVvZiBfP186Y2UoXyk7Y2FzZSJiYXNlNjQiOnJldHVy'@;
put 'biBnYSgic3RyaW5nIj09dHlwZW9mIF8/XzpjZShfKSk7Y2FzZSJidWZmZXIiOmlmKFNlKXJldHVybiBCdWZmZXIuaXNCdWZmZXIoXyk/XzpvdChfKTtjYXNlImFycmF5IjpyZXR1cm4ic3RyaW5nIj09dHlwZW9mIF8/SXIoXyk6X31yZXR1cm4gX30sdC53cml0ZUZpbGU9ZnVuY3Rpb24gRmUo'@;
put 'bSxFLF8pe28oKTt2YXIgdz1WKG0sXyk7Yy53cml0ZUZpbGVTeW5jKEUsdyl9LHQudXRpbHM9e2NmYl9uZXc6ZnVuY3Rpb24gUGcobSl7dmFyIEU9e307cmV0dXJuIHkoRSxtKSxFfSxjZmJfYWRkOnJpLGNmYl9kZWw6ZnVuY3Rpb24gTGcobSxFKXt5KG0pO3ZhciBfPXZlLmZpbmQobSxFKTtp'@;
put 'ZihfKWZvcih2YXIgdz0wO3c8bS5GaWxlSW5kZXgubGVuZ3RoOysrdylpZihtLkZpbGVJbmRleFt3XT09XylyZXR1cm4gbS5GaWxlSW5kZXguc3BsaWNlKHcsMSksbS5GdWxsUGF0aHMuc3BsaWNlKHcsMSksITA7cmV0dXJuITF9LGNmYl9tb3Y6ZnVuY3Rpb24gQmcobSxFLF8pe3kobSk7dmFy'@;
put 'IHc9dmUuZmluZChtLEUpO2lmKHcpZm9yKHZhciBTPTA7UzxtLkZpbGVJbmRleC5sZW5ndGg7KytTKWlmKG0uRmlsZUluZGV4W1NdPT13KXJldHVybiBtLkZpbGVJbmRleFtTXS5uYW1lPW4oXyksbS5GdWxsUGF0aHNbU109XywhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIE1nKG0pe1Io'@;
put 'bSwhMCl9LFJlYWRTaGlmdDpBYSxDaGVja0ZpZWxkOmFzLHByZXBfYmxvYjpocixiY29uY2F0OmZyLHVzZV96bGliOmZ1bmN0aW9uIEMobSl7dHJ5e3ZhciBfPW5ldygwLG0uSW5mbGF0ZVJhdyk7aWYoXy5fcHJvY2Vzc0NodW5rKG5ldyBVaW50OEFycmF5KFszLDBdKSxfLl9maW5pc2hGbHVz'@;
put 'aEZsYWcpLCFfLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO0s9bX1jYXRjaCh3KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyh3Lm1lc3NhZ2V8fHcpKX19LF9kZWZsYXRlUmF3OnllLF9pbmZsYXRl'@;
put 'UmF3OnljLGNvbnN0czp1ZX0sdH0oKTtmdW5jdGlvbiAkZShlKXtmb3IodmFyIHQ9T2JqZWN0LmtleXMoZSkscj1bXSxhPTA7YTx0Lmxlbmd0aDsrK2EpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdFthXSkmJnIucHVzaCh0W2FdKTtyZXR1cm4gcn1mdW5jdGlvbiBz'@;
put 'MChlKXtmb3IodmFyIHQ9W10scj0kZShlKSxhPTA7YSE9PXIubGVuZ3RoOysrYSl0W2VbclthXV1dPXJbYV07cmV0dXJuIHR9dmFyIGMwPW5ldyBEYXRlKDE4OTksMTEsMzAsMCwwLDApO2Z1bmN0aW9uIGlyKGUsdCl7dmFyIHI9ZS5nZXRUaW1lKCk7cmV0dXJuIHQmJihyLT0xMjYzMTY4ZTUp'@;
put 'LChyLShjMC5nZXRUaW1lKCkrNmU0KihlLmdldFRpbWV6b25lT2Zmc2V0KCktYzAuZ2V0VGltZXpvbmVPZmZzZXQoKSkpKS84NjRlNX12YXIgU2k9bmV3IERhdGUsbG89YzAuZ2V0VGltZSgpKzZlNCooU2kuZ2V0VGltZXpvbmVPZmZzZXQoKS1jMC5nZXRUaW1lem9uZU9mZnNldCgpKSxGaT1T'@;
put 'aS5nZXRUaW1lem9uZU9mZnNldCgpO2Z1bmN0aW9uIG8wKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldFRpbWUoMjQqZSo2MCo2MCoxZTMrbG8pLHQuZ2V0VGltZXpvbmVPZmZzZXQoKSE9PUZpJiZ0LnNldFRpbWUodC5nZXRUaW1lKCkrNmU0Kih0LmdldFRpbWV6b25lT2Zmc2V0KCkt'@;
put 'RmkpKSx0fWZ1bmN0aW9uIHVvKGUpe3ZhciB0PTAscj0wLGE9ITEsbj1lLm1hdGNoKC9QKFswLTlcLl0rWSk/KFswLTlcLl0rTSk/KFswLTlcLl0rRCk/VChbMC05XC5dK0gpPyhbMC05XC5dK00pPyhbMC05XC5dK1MpPy8pO2lmKCFuKXRocm93IG5ldyBFcnJvcigifCIrZSsifCBpcyBub3Qg'@;
put 'YW4gSVNPODYwMSBEdXJhdGlvbiIpO2Zvcih2YXIgaT0xO2khPW4ubGVuZ3RoOysraSlpZihuW2ldKXtzd2l0Y2gocj0xLGk+MyYmKGE9ITApLG5baV0uc2xpY2UobltpXS5sZW5ndGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6'@;
put 'ICIrbltpXS5zbGljZShuW2ldLmxlbmd0aC0xKSk7Y2FzZSJEIjpyKj0yNDtjYXNlIkgiOnIqPTYwO2Nhc2UiTSI6aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6IE0iKTtyKj02MH10Kz1yKnBhcnNlSW50KG5baV0sMTApfXJldHVybiB0fXZh'@;
put 'ciB5aT1uZXcgRGF0ZSgiMjAxNy0wMi0xOVQxOTowNjowOS4wMDBaIiksQWk9aXNOYU4oeWkuZ2V0RnVsbFllYXIoKSk/bmV3IERhdGUoIjIvMTkvMTciKTp5aSxobz0yMDE3PT1BaS5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIFhlKGUsdCl7dmFyIHI9bmV3IERhdGUoZSk7aWYoaG8pcmV0dXJu'@;
put 'IHQ+MD9yLnNldFRpbWUoci5nZXRUaW1lKCkrNjAqci5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6dDwwJiZyLnNldFRpbWUoci5nZXRUaW1lKCktNjAqci5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykscjtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZTtpZigxOTE3PT1BaS5nZXRGdWxs'@;
put 'WWVhcigpJiYhaXNOYU4oci5nZXRGdWxsWWVhcigpKSl7dmFyIGE9ci5nZXRGdWxsWWVhcigpO3JldHVybiBlLmluZGV4T2YoIiIrYSk+LTF8fHIuc2V0RnVsbFllYXIoci5nZXRGdWxsWWVhcigpKzEwMCkscn12YXIgbj1lLm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIiLCIxOSIsIjAiLCIw'@;
put 'IiwiMCJdLGk9bmV3IERhdGUoK25bMF0sK25bMV0tMSwrblsyXSwrblszXXx8MCwrbls0XXx8MCwrbls1XXx8MCk7cmV0dXJuIGUuaW5kZXhPZigiWiIpPi0xJiYoaT1uZXcgRGF0ZShpLmdldFRpbWUoKS02MCppLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSksaX1mdW5jdGlvbiBQdChlLHQp'@;
put 'e2lmKFNlJiZCdWZmZXIuaXNCdWZmZXIoZSkpe2lmKHQpe2lmKDI1NT09ZVswXSYmMjU0PT1lWzFdKXJldHVybiB0dChlLnNsaWNlKDIpLnRvU3RyaW5nKCJ1dGYxNmxlIikpO2lmKDI1ND09ZVsxXSYmMjU1PT1lWzJdKXJldHVybiB0dChhaShlLnNsaWNlKDIpLnRvU3RyaW5nKCJiaW5hcnki'@;
put 'KSkpfXJldHVybiBlLnRvU3RyaW5nKCJiaW5hcnkiKX1pZih0eXBlb2YgVGV4dERlY29kZXI8InUiKXRyeXtpZih0KXtpZigyNTU9PWVbMF0mJjI1ND09ZVsxXSlyZXR1cm4gdHQobmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpLmRlY29kZShlLnNsaWNlKDIpKSk7aWYoMjU0PT1lWzBdJiYy'@;
put 'NTU9PWVbMV0pcmV0dXJuIHR0KG5ldyBUZXh0RGVjb2RlcigidXRmLTE2YmUiKS5kZWNvZGUoZS5zbGljZSgyKSkpfXZhciByPXsiXHUyMGFjIjoiXHg4MCIsIlx1MjAxYSI6Ilx4ODIiLFx1MDE5MjoiXHg4MyIsIlx1MjAxZSI6Ilx4ODQiLCJcdTIwMjYiOiJceDg1IiwiXHUyMDIwIjoiXHg4'@;
put 'NiIsIlx1MjAyMSI6Ilx4ODciLFx1MDJjNjoiXHg4OCIsIlx1MjAzMCI6Ilx4ODkiLFx1MDE2MDoiXHg4YSIsIlx1MjAzOSI6Ilx4OGIiLFx1MDE1MjoiXHg4YyIsXHUwMTdkOiJceDhlIiwiXHUyMDE4IjoiXHg5MSIsIlx1MjAxOSI6Ilx4OTIiLCJcdTIwMWMiOiJceDkzIiwiXHUyMDFkIjoi'@;
put 'XHg5NCIsIlx1MjAyMiI6Ilx4OTUiLCJcdTIwMTMiOiJceDk2IiwiXHUyMDE0IjoiXHg5NyIsIlx1MDJkYyI6Ilx4OTgiLCJcdTIxMjIiOiJceDk5IixcdTAxNjE6Ilx4OWEiLCJcdTIwM2EiOiJceDliIixcdTAxNTM6Ilx4OWMiLFx1MDE3ZToiXHg5ZSIsXHUwMTc4OiJceDlmIn07cmV0dXJu'@;
put 'IEFycmF5LmlzQXJyYXkoZSkmJihlPW5ldyBVaW50OEFycmF5KGUpKSxuZXcgVGV4dERlY29kZXIoImxhdGluMSIpLmRlY29kZShlKS5yZXBsYWNlKC9bXHUyMGFjXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHUwMTdk'@;
put 'XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHUwMTdlXHUwMTc4XS9nLGZ1bmN0aW9uKGkpe3JldHVybiByW2ldfHxpfSl9Y2F0Y2h7fWZvcih2YXIgYT1bXSxuPTA7biE9ZS5sZW5ndGg7KytuKWEucHVzaChT'@;
put 'dHJpbmcuZnJvbUNoYXJDb2RlKGVbbl0pKTtyZXR1cm4gYS5qb2luKCIiKX1mdW5jdGlvbiBNZShlKXtpZih0eXBlb2YgSlNPTjwidSImJiFBcnJheS5pc0FycmF5KGUpKXJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGUpKTtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PWUp'@;
put 'cmV0dXJuIGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUuZ2V0VGltZSgpKTt2YXIgdD17fTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKHRbcl09TWUoZVtyXSkpO3JldHVybiB0fWZ1bmN0aW9uIGplKGUs'@;
put 'dCl7Zm9yKHZhciByPSIiO3IubGVuZ3RoPHQ7KXIrPWU7cmV0dXJuIHJ9ZnVuY3Rpb24gSnIoZSl7dmFyIHQ9TnVtYmVyKGUpO2lmKCFpc05hTih0KSlyZXR1cm4gaXNGaW5pdGUodCk/dDpOYU47aWYoIS9cZC8udGVzdChlKSlyZXR1cm4gdDt2YXIgcj0xLGE9ZS5yZXBsYWNlKC8oW1xkXSks'@;
put 'KFtcZF0pL2csIiQxJDIiKS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gcio9MTAwLCIifSk7cmV0dXJuIGlzTmFOKHQ9TnVtYmVyKGEpKSYmKGE9YS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihuLGkpe3JldHVybiByPS1yLGl9KSxp'@;
put 'c05hTih0PU51bWJlcihhKSkpP3Q6dC9yfXZhciB4bz1bImphbnVhcnkiLCJmZWJydWFyeSIsIm1hcmNoIiwiYXByaWwiLCJtYXkiLCJqdW5lIiwianVseSIsImF1Z3VzdCIsInNlcHRlbWJlciIsIm9jdG9iZXIiLCJub3ZlbWJlciIsImRlY2VtYmVyIl07ZnVuY3Rpb24gYWEoZSl7dmFyIHQ9'@;
put 'bmV3IERhdGUoZSkscj1uZXcgRGF0ZShOYU4pLGE9dC5nZXRZZWFyKCksbj10LmdldE1vbnRoKCksaT10LmdldERhdGUoKTtpZihpc05hTihpKSlyZXR1cm4gcjt2YXIgcz1lLnRvTG93ZXJDYXNlKCk7aWYocy5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0'@;
put 'fG5vdnxkZWMvKSl7aWYoKHM9cy5yZXBsYWNlKC9bXmEtel0vZywiIikucmVwbGFjZSgvKFteYS16XXxeKVthcF1tPyhbXmEtel18JCkvLCIiKSkubGVuZ3RoPjMmJi0xPT14by5pbmRleE9mKHMpKXJldHVybiByfWVsc2UgaWYocy5tYXRjaCgvW2Etel0vKSlyZXR1cm4gcjtyZXR1cm4gYTww'@;
put 'fHxhPjgwOTk/cjoobj4wfHxpPjEpJiYxMDEhPWE/dDplLm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/cjp0fXZhciB2bz1mdW5jdGlvbigpe3ZhciBlPTU9PSJhYmFjYWJhIi5zcGxpdCgvKDo/YikvaSkubGVuZ3RoO3JldHVybiBmdW5jdGlvbihyLGEsbil7aWYoZXx8InN0cmluZyI9PXR5cGVv'@;
put 'ZiBhKXJldHVybiByLnNwbGl0KGEpO2Zvcih2YXIgaT1yLnNwbGl0KGEpLHM9W2lbMF1dLGY9MTtmPGkubGVuZ3RoOysrZilzLnB1c2gobikscy5wdXNoKGlbZl0pO3JldHVybiBzfX0oKTtmdW5jdGlvbiBDaShlKXtyZXR1cm4gZT9lLmNvbnRlbnQmJmUudHlwZT9QdChlLmNvbnRlbnQsITAp'@;
put 'OmUuZGF0YT9RdChlLmRhdGEpOmUuYXNOb2RlQnVmZmVyJiZTZT9RdChlLmFzTm9kZUJ1ZmZlcigpLnRvU3RyaW5nKCJiaW5hcnkiKSk6ZS5hc0JpbmFyeT9RdChlLmFzQmluYXJ5KCkpOmUuX2RhdGEmJmUuX2RhdGEuZ2V0Q29udGVudD9RdChQdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs'@;
put 'bChlLl9kYXRhLmdldENvbnRlbnQoKSwwKSkpOm51bGw6bnVsbH1mdW5jdGlvbiBEaShlKXtpZighZSlyZXR1cm4gbnVsbDtpZihlLmRhdGEpcmV0dXJuIHQwKGUuZGF0YSk7aWYoZS5hc05vZGVCdWZmZXImJlNlKXJldHVybiBlLmFzTm9kZUJ1ZmZlcigpO2lmKGUuX2RhdGEmJmUuX2RhdGEu'@;
put 'Z2V0Q29udGVudCl7dmFyIHQ9ZS5fZGF0YS5nZXRDb250ZW50KCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3QwKHQpOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpfXJldHVybiBlLmNvbnRlbnQmJmUudHlwZT9lLmNvbnRlbnQ6bnVsbH1mdW5jdGlvbiBXcihlLHQpe2Zvcih2YXIg'@;
put 'cj1lLkZ1bGxQYXRoc3x8JGUoZS5maWxlcyksYT10LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW1wvXS9nLCJcXCIpLG49YS5yZXBsYWNlKC9cXC9nLCIvIiksaT0wO2k8ci5sZW5ndGg7KytpKXt2YXIgcz1yW2ldLnJlcGxhY2UoL15Sb290IEVudHJ5W1wvXS8sIiIpLnRvTG93ZXJDYXNlKCk7'@;
put 'aWYoYT09c3x8bj09cylyZXR1cm4gZS5maWxlcz9lLmZpbGVzW3JbaV1dOmUuRmlsZUluZGV4W2ldfXJldHVybiBudWxsfWZ1bmN0aW9uIFYwKGUsdCl7dmFyIHI9V3IoZSx0KTtpZihudWxsPT1yKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZmlsZSAiK3QrIiBpbiB6aXAiKTtyZXR1'@;
put 'cm4gcn1mdW5jdGlvbiBRZShlLHQscil7aWYoIXIpcmV0dXJuIGZ1bmN0aW9uIHBvKGUpe3JldHVybiBlJiYiLmJpbiI9PT1lLm5hbWUuc2xpY2UoLTQpP0RpKGUpOkNpKGUpfShWMChlLHQpKTtpZighdClyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFFlKGUsdCl9Y2F0Y2h7cmV0dXJuIG51bGx9'@;
put 'fWZ1bmN0aW9uIE5yKGUsdCxyKXtpZighcilyZXR1cm4gQ2koVjAoZSx0KSk7aWYoIXQpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBOcihlLHQpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBPaShlLHQscil7aWYoIXIpcmV0dXJuIERpKFYwKGUsdCkpO2lmKCF0KXJldHVybiBudWxsO3Ry'@;
put 'eXtyZXR1cm4gT2koZSx0KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gSWkoZSl7Zm9yKHZhciB0PWUuRnVsbFBhdGhzfHwkZShlLmZpbGVzKSxyPVtdLGE9MDthPHQubGVuZ3RoOysrYSkiLyIhPXRbYV0uc2xpY2UoLTEpJiZyLnB1c2godFthXS5yZXBsYWNlKC9eUm9vdCBFbnRyeVtc'@;
put 'L10vLCIiKSk7cmV0dXJuIHIuc29ydCgpfWZ1bmN0aW9uIFJpKGUsdCl7c3dpdGNoKHQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiB2ZS5yZWFkKGUse3R5cGU6ImJhc2U2NCJ9KTtjYXNlImJpbmFyeSI6cmV0dXJuIHZlLnJlYWQoZSx7dHlwZToiYmluYXJ5In0pO2Nhc2UiYnVmZmVyIjpj'@;
put 'YXNlImFycmF5IjpyZXR1cm4gdmUucmVhZChlLHt0eXBlOiJidWZmZXIifSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK3QudHlwZSl9ZnVuY3Rpb24gU2EoZSx0KXtpZigiLyI9PWUuY2hhckF0KDApKXJldHVybiBlLnNsaWNlKDEpO3ZhciByPXQuc3BsaXQoIi8iKTsi'@;
put 'LyIhPXQuc2xpY2UoLTEpJiZyLnBvcCgpO2Zvcih2YXIgYT1lLnNwbGl0KCIvIik7MCE9PWEubGVuZ3RoOyl7dmFyIG49YS5zaGlmdCgpOyIuLiI9PT1uP3IucG9wKCk6Ii4iIT09biYmci5wdXNoKG4pfXJldHVybiByLmpvaW4oIi8iKX12YXIgZXI9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5j'@;
put 'b2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz5cclxuJyxtbz0vKFteIlxzPz5cL10rKVxzKj1ccyooKD86IikoW14iXSopKD86Iil8KD86JykoW14nXSopKD86Jyl8KFteJyI+XHNdKykpL2csTmk9LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/PlwvXStccyo9XHMq'@;
put 'KD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccypbXC9cP10/Pi9nbSx2cj1lci5tYXRjaChOaSk/Tmk6LzxbXj5dKj4vZyxfbz0vPFx3KjovLHdvPS88KFwvPylcdys6LztmdW5jdGlvbiBtZShlLHQscil7Zm9yKHZhciBhPXt9LG49MCxpPTA7biE9PWUubGVuZ3RoJiYzMiE9PShp'@;
put 'PWUuY2hhckNvZGVBdChuKSkmJjEwIT09aSYmMTMhPT1pOysrbik7aWYodHx8KGFbMF09ZS5zbGljZSgwLG4pKSxuPT09ZS5sZW5ndGgpcmV0dXJuIGE7dmFyIHM9ZS5tYXRjaChtbyksZj0wLGM9IiIsbz0wLGw9IiIsaD0iIix4PTE7aWYocylmb3Iobz0wO28hPXMubGVuZ3RoOysrbyl7Zm9y'@;
put 'KGg9c1tvXSxpPTA7aSE9aC5sZW5ndGgmJjYxIT09aC5jaGFyQ29kZUF0KGkpOysraSk7Zm9yKGw9aC5zbGljZSgwLGkpLnRyaW0oKTszMj09aC5jaGFyQ29kZUF0KGkrMSk7KSsraTtmb3IoeD0zND09KG49aC5jaGFyQ29kZUF0KGkrMSkpfHwzOT09bj8xOjAsYz1oLnNsaWNlKGkrMSt4LGgu'@;
put 'bGVuZ3RoLXgpLGY9MDtmIT1sLmxlbmd0aCYmNTghPT1sLmNoYXJDb2RlQXQoZik7KytmKTtpZihmPT09bC5sZW5ndGgpbC5pbmRleE9mKCJfIik+MCYmKGw9bC5zbGljZSgwLGwuaW5kZXhPZigiXyIpKSksYVtsXT1jLHJ8fChhW2wudG9Mb3dlckNhc2UoKV09Yyk7ZWxzZXt2YXIgZD0oNT09'@;
put 'PWYmJiJ4bWxucyI9PT1sLnNsaWNlKDAsNSk/InhtbG5zIjoiIikrbC5zbGljZShmKzEpO2lmKGFbZF0mJiJleHQiPT1sLnNsaWNlKGYtMyxmKSljb250aW51ZTthW2RdPWMscnx8KGFbZC50b0xvd2VyQ2FzZSgpXT1jKX19cmV0dXJuIGF9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIGUucmVwbGFj'@;
put 'ZSh3bywiPCQxIil9dmFyIGJpPXsiJnF1b3Q7IjonIicsIiZhcG9zOyI6IiciLCImZ3Q7IjoiPiIsIiZsdDsiOiI8IiwiJmFtcDsiOiImIn0sRzA9czAoYmkpLEllPWZ1bmN0aW9uKCl7dmFyIGU9LyYoPzpxdW90fGFwb3N8Z3R8bHR8YW1wfCN4PyhbXGRhLWZBLUZdKykpOy9naSx0PS9feChb'@;
put 'XGRhLWZBLUZdezR9KV8vZ2k7cmV0dXJuIGZ1bmN0aW9uIHIoYSl7dmFyIG49YSsiIixpPW4uaW5kZXhPZigiPCFbQ0RBVEFbIik7aWYoLTE9PWkpcmV0dXJuIG4ucmVwbGFjZShlLGZ1bmN0aW9uKGYsYyl7cmV0dXJuIGJpW2ZdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMsZi5p'@;
put 'bmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8Zn0pLnJlcGxhY2UodCxmdW5jdGlvbihmLGMpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMsMTYpKX0pO3ZhciBzPW4uaW5kZXhPZigiXV0+Iik7cmV0dXJuIHIobi5zbGljZSgwLGkpKStuLnNsaWNlKGkrOSxzKStyKG4uc2xp'@;
put 'Y2UocyszKSl9fSgpLHowPS9bJjw+JyJdL2csTGk9L1tcdTAwMDAtXHUwMDFmXS9nO2Z1bmN0aW9uICQwKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKHowLGZ1bmN0aW9uKHIpe3JldHVybiBHMFtyXX0pLnJlcGxhY2UoL1xuL2csIjxici8+IikucmVwbGFjZShMaSxmdW5jdGlvbihyKXtyZXR1'@;
put 'cm4iJiN4IisoIjAwMCIrci5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyI7In0pfXZhciBCaT1mdW5jdGlvbigpe3ZhciBlPS8mIyhcZCspOy9nO2Z1bmN0aW9uIHQocixhKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhLDEwKSl9cmV0dXJuIGZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoZSx0KX19KCk7ZnVuY3Rpb24gV2UoZSl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlITA6Y2FzZSIxIjpjYXNlInRydWUiOmNhc2UiVFJVRSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gajAoZSl7Zm9yKHZhciB0PSIiLHI9MCxh'@;
put 'PTAsbj0wLGk9MCxzPTAsZj0wO3I8ZS5sZW5ndGg7KShhPWUuY2hhckNvZGVBdChyKyspKTwxMjg/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShhKToobj1lLmNoYXJDb2RlQXQocisrKSxhPjE5MSYmYTwyMjQ/KHM9KDMxJmEpPDw2LHN8PTYzJm4sdCs9U3RyaW5nLmZyb21DaGFyQ29kZShzKSk6'@;
put 'KGk9ZS5jaGFyQ29kZUF0KHIrKyksYTwyNDA/dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmYSk8PDEyfCg2MyZuKTw8Nnw2MyZpKTooZj0oKDcmYSk8PDE4fCg2MyZuKTw8MTJ8KDYzJmkpPDw2fDYzJihzPWUuY2hhckNvZGVBdChyKyspKSktNjU1MzYsdCs9U3RyaW5nLmZyb21DaGFyQ29k'@;
put 'ZSg1NTI5NisoZj4+PjEwJjEwMjMpKSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJmYpKSkpKTtyZXR1cm4gdH1mdW5jdGlvbiBNaShlKXt2YXIgcixhLGYsdD1fdCgyKmUubGVuZ3RoKSxuPTEsaT0wLHM9MDtmb3IoYT0wO2E8ZS5sZW5ndGg7YSs9biluPTEsKGY9ZS5jaGFy'@;
put 'Q29kZUF0KGEpKTwxMjg/cj1mOmY8MjI0PyhyPTY0KigzMSZmKSsoNjMmZS5jaGFyQ29kZUF0KGErMSkpLG49Mik6ZjwyNDA/KHI9NDA5NiooMTUmZikrNjQqKDYzJmUuY2hhckNvZGVBdChhKzEpKSsoNjMmZS5jaGFyQ29kZUF0KGErMikpLG49Myk6KG49NCxyPTI2MjE0NCooNyZmKSs0MDk2'@;
put 'Kig2MyZlLmNoYXJDb2RlQXQoYSsxKSkrNjQqKDYzJmUuY2hhckNvZGVBdChhKzIpKSsoNjMmZS5jaGFyQ29kZUF0KGErMykpLHM9NTUyOTYrKChyLT02NTUzNik+Pj4xMCYxMDIzKSxyPTU2MzIwKygxMDIzJnIpKSwwIT09cyYmKHRbaSsrXT0yNTUmcyx0W2krK109cz4+Pjgscz0wKSx0W2kr'@;
put 'K109ciUyNTYsdFtpKytdPXI+Pj44O3JldHVybiB0LnNsaWNlKDAsaSkudG9TdHJpbmcoInVjczIiKX1mdW5jdGlvbiBVaShlKXtyZXR1cm4gb3QoZSwiYmluYXJ5IikudG9TdHJpbmcoInV0ZjgiKX12YXIgbDA9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyIsQmU9'@;
put 'U2UmJihVaShsMCk9PWowKGwwKSYmVWl8fE1pKGwwKT09ajAobDApJiZNaSl8fGowLHR0PVNlP2Z1bmN0aW9uKGUpe3JldHVybiBvdChlLCJ1dGY4IikudG9TdHJpbmcoImJpbmFyeSIpfTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLGE9MCxuPTA7cjxlLmxlbmd0aDspc3dpdGNoKGE9'@;
put 'ZS5jaGFyQ29kZUF0KHIrKyksITApe2Nhc2UgYTwxMjg6dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYSkpO2JyZWFrO2Nhc2UgYTwyMDQ4OnQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5MisoYT4+NikpKSx0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJmEpKSk7YnJl'@;
put 'YWs7Y2FzZSBhPj01NTI5NiYmYTw1NzM0NDphLT01NTI5NixuPWUuY2hhckNvZGVBdChyKyspLTU2MzIwKyhhPDwxMCksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhuPj4xOCY3KSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsobj4+MTImNjMpKSksdC5wdXNoKFN0'@;
put 'cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhuPj42JjYzKSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmbikpKTticmVhaztkZWZhdWx0OnQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoYT4+MTIpKSksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhhPj42'@;
put 'JjYzKSkpLHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmYSkpKX1yZXR1cm4gdC5qb2luKCIiKX0sRmE9ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZnVuY3Rpb24ocixhKXt2YXIgbj1yKyJ8IisoYXx8IiIpO3JldHVybiBlW25dP2Vbbl06ZVtuXT1uZXcgUmVnRXhwKCI8'@;
put 'KD86XFx3KzopPyIrcisnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytyKyI+IixhfHwiIil9fSgpLFdpPWZ1bmN0aW9uKCl7dmFyIGU9W1sibmJzcCIsIiAiXSxbIm1pZGRvdCIsIlx4YjciXSxbInF1b3QiLCciJ10sWyJhcG9z'@;
put 'IiwiJyJdLFsiZ3QiLCI+Il0sWyJsdCIsIjwiXSxbImFtcCIsIiYiXV0ubWFwKGZ1bmN0aW9uKHQpe3JldHVybltuZXcgUmVnRXhwKCImIit0WzBdKyI7IiwiaWciKSx0WzFdXX0pO3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIGE9ci5yZXBsYWNlKC9eW1x0XG5cciBdKy8sIiIpLnJlcGxh'@;
put 'Y2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvPlxzKy9nLCI+IikucmVwbGFjZSgvXHMrPC9nLCI8IikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2UoLzxbXj5dKj4vZywiIiksbj0wO248ZS5sZW5ndGg7'@;
put 'KytuKWE9YS5yZXBsYWNlKGVbbl1bMF0sZVtuXVsxXSk7cmV0dXJuIGF9fSgpLFNvPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB2b2lkIDAhPT1lW3JdP2Vbcl06ZVtyXT1uZXcgUmVnRXhwKCI8KD86dnQ6KT8iK3IrIj4oW1xcc1xcU10qPyk8Lyg/OnZ0'@;
put 'Oik/IityKyI+IiwiZyIpfX0oKSxGbz0vPFwvPyg/OnZ0Oik/dmFyaWFudD4vZyx5bz0vPCg/OnZ0OikoW14+XSopPihbXHNcU10qKTwvO2Z1bmN0aW9uIEhpKGUsdCl7dmFyIHI9bWUoZSksYT1lLm1hdGNoKFNvKHIuYmFzZVR5cGUpKXx8W10sbj1bXTtpZihhLmxlbmd0aCE9ci5zaXplKXtp'@;
put 'Zih0LldURil0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdmVjdG9yIGxlbmd0aCAiK2EubGVuZ3RoKyIgIT0gIityLnNpemUpO3JldHVybiBufXJldHVybiBhLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9aS5yZXBsYWNlKEZvLCIiKS5tYXRjaCh5byk7cyYmbi5wdXNoKHt2OkJlKHNb'@;
put 'Ml0pLHQ6c1sxXX0pfSksbn1mdW5jdGlvbiBZMChlKXtpZihTZSYmQnVmZmVyLmlzQnVmZmVyKGUpKXJldHVybiBlLnRvU3RyaW5nKCJ1dGY4Iik7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkp'@;
put 'cmV0dXJuIEJlKHd0KE0wKGUpKSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIHlhPS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXSspKD86W1xzPzpcL11bXj5dKik/Pi9nbSxycj17Q09SRV9QUk9Q'@;
put 'UzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLENVU1RfUFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIixFWFRf'@;
put 'UFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLENUOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L2NvbnRlbnQtdHlwZXMiLFJFTFM6Imh0dHA6Ly9zY2hl'@;
put 'bWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcyIsVENNTlQ6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL3NwcmVhZHNoZWV0bWwvMjAxOC90aHJlYWRlZGNvbW1lbnRzIixkYzoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEu'@;
put 'MS8iLGRjdGVybXM6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLGRjbWl0eXBlOiJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvIixteDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvbWFjL2V4Y2VsLzIwMDgvbWFpbiIscjoiaHR0cDovL3NjaGVtYXMub3Blbnht'@;
put 'bGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsc2pzOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzIix2dDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m'@;
put 'ZmljZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiLHhzaToiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLHhzZDoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEifSxTdD1bImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJl'@;
put 'YWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2Vs'@;
put 'LzIwMDYvMiJdLEdpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxhPTA7YTxlWzBdLmxlbmd0aDsrK2EpaWYoZVswXVthXSlmb3IodmFyIG49MCxpPWVbMF1bYV0ubGVuZ3RoO248aTtuKz0xMDI0MCl0LnB1c2guYXBwbHkodCxlWzBdW2FdLnNsaWNlKG4sbisxMDI0MCkpO3JldHVybiB0fSx6'@;
put 'aT1TZT9mdW5jdGlvbihlKXtyZXR1cm4gZVswXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKGVbMF1bMF0pP0J1ZmZlci5jb25jYXQoZVswXS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcih0KT90Om90KHQpfSkpOkdpKGUpfTpHaSwkaT1mdW5jdGlvbihlLHQscil7'@;
put 'Zm9yKHZhciBhPVtdLG49dDtuPHI7bis9MilhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh1dChlLG4pKSk7cmV0dXJuIGEuam9pbigiIikucmVwbGFjZShkciwiIil9LHUwPVNlP2Z1bmN0aW9uKGUsdCxyKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpP2UudG9TdHJpbmcoInV0ZjE2bGUi'@;
put 'LHQscikucmVwbGFjZShkciwiIik6JGkoZSx0LHIpfTokaSxqaT1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhPVtdLG49dDtuPHQrcjsrK24pYS5wdXNoKCgiMCIrZVtuXS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7cmV0dXJuIGEuam9pbigiIil9LEtpPVNlP2Z1bmN0aW9uKGUsdCxyKXty'@;
put 'ZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGUpP2UudG9TdHJpbmcoImhleCIsdCx0K3IpOmppKGUsdCxyKX06amksWWk9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT1bXSxuPXQ7bjxyO24rKylhLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpYShlLG4pKSk7cmV0dXJuIGEuam9pbigiIil9LG5h'@;
put 'PVNlP2Z1bmN0aW9uKHQscixhKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKHQpP3QudG9TdHJpbmcoInV0ZjgiLHIsYSk6WWkodCxyLGEpfTpZaSxKaT1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9uYShlLHQrNCx0KzQrci0xKToiIn0sSjA9SmkscWk9ZnVuY3Rpb24o'@;
put 'ZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3ItMSk6IiJ9LHEwPXFpLFppPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MipjcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3ItMSk6IiJ9LFowPVppLFFpPWZ1bmN0aW9uKHQscil7dmFyIGE9Y3IodCxyKTtyZXR1'@;
put 'cm4gYT4wP3UwKHQscis0LHIrNCthKToiIn0sUTA9UWksZXM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/bmEoZSx0KzQsdCs0K3IpOiIifSxlbj1lcyxycz1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbiBDbyhlLHQpe2Zvcih2YXIgcj0xLTIqKGVbdCs3XT4+'@;
put 'PjcpLGE9KCgxMjcmZVt0KzddKTw8NCkrKGVbdCs2XT4+PjQmMTUpLG49MTUmZVt0KzZdLGk9NTtpPj0wOy0taSluPTI1NipuK2VbdCtpXTtyZXR1cm4gMjA0Nz09YT8wPT1uP3IqKDEvMCk6TmFOOigwPT1hP2E9LTEwMjI6KGEtPTEwMjMsbis9TWF0aC5wb3coMiw1MikpLHIqTWF0aC5wb3co'@;
put 'MixhLTUyKSpuKX0oZSx0KX0saDA9cnMscm49ZnVuY3Rpb24odCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl8fHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl9O1NlJiYoSjA9ZnVuY3Rpb24odCxyKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXJldHVybiBK'@;
put 'aSh0LHIpO3ZhciBhPXQucmVhZFVJbnQzMkxFKHIpO3JldHVybiBhPjA/dC50b1N0cmluZygidXRmOCIscis0LHIrNCthLTEpOiIifSxxMD1mdW5jdGlvbih0LHIpe2lmKCFCdWZmZXIuaXNCdWZmZXIodCkpcmV0dXJuIHFpKHQscik7dmFyIGE9dC5yZWFkVUludDMyTEUocik7cmV0dXJuIGE+'@;
put 'MD90LnRvU3RyaW5nKCJ1dGY4IixyKzQscis0K2EtMSk6IiJ9LFowPWZ1bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSlyZXR1cm4gWmkodCxyKTt2YXIgYT0yKnQucmVhZFVJbnQzMkxFKHIpO3JldHVybiB0LnRvU3RyaW5nKCJ1dGYxNmxlIixyKzQscis0K2EtMSl9LFEwPWZ1'@;
put 'bmN0aW9uKHQscil7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0KSlyZXR1cm4gUWkodCxyKTt2YXIgYT10LnJlYWRVSW50MzJMRShyKTtyZXR1cm4gdC50b1N0cmluZygidXRmMTZsZSIscis0LHIrNCthKX0sZW49ZnVuY3Rpb24odCxyKXtpZighQnVmZmVyLmlzQnVmZmVyKHQpKXJldHVybiBlcyh0'@;
put 'LHIpO3ZhciBhPXQucmVhZFVJbnQzMkxFKHIpO3JldHVybiB0LnRvU3RyaW5nKCJ1dGY4IixyKzQscis0K2EpfSxoMD1mdW5jdGlvbih0LHIpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIodCk/dC5yZWFkRG91YmxlTEUocik6cnModCxyKX0scm49ZnVuY3Rpb24odCl7cmV0dXJuIEJ1ZmZlci5p'@;
put 'c0J1ZmZlcih0KXx8QXJyYXkuaXNBcnJheSh0KXx8dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0IGluc3RhbmNlb2YgVWludDhBcnJheX0pLHR5cGVvZiBPZTwidSImJmZ1bmN0aW9uIHRzKCl7dTA9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBPZS51dGlscy5kZWNvZGUoMTIwMCxlLnNsaWNlKHQs'@;
put 'cikpLnJlcGxhY2UoZHIsIiIpfSxuYT1mdW5jdGlvbihlLHQscil7cmV0dXJuIE9lLnV0aWxzLmRlY29kZSg2NTAwMSxlLnNsaWNlKHQscikpfSxKMD1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9PZS51dGlscy5kZWNvZGUoUnQsZS5zbGljZSh0KzQsdCs0K3ItMSkp'@;
put 'OiIifSxxMD1mdW5jdGlvbihlLHQpe3ZhciByPWNyKGUsdCk7cmV0dXJuIHI+MD9PZS51dGlscy5kZWNvZGUoRHIsZS5zbGljZSh0KzQsdCs0K3ItMSkpOiIifSxaMD1mdW5jdGlvbihlLHQpe3ZhciByPTIqY3IoZSx0KTtyZXR1cm4gcj4wP09lLnV0aWxzLmRlY29kZSgxMjAwLGUuc2xpY2Uo'@;
put 'dCs0LHQrNCtyLTEpKToiIn0sUTA9ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/T2UudXRpbHMuZGVjb2RlKDEyMDAsZS5zbGljZSh0KzQsdCs0K3IpKToiIn0sZW49ZnVuY3Rpb24oZSx0KXt2YXIgcj1jcihlLHQpO3JldHVybiByPjA/T2UudXRpbHMuZGVjb2RlKDY1'@;
put 'MDAxLGUuc2xpY2UodCs0LHQrNCtyKSk6IiJ9fSgpO3ZhciBpYT1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdfSx1dD1mdW5jdGlvbihlLHQpe3JldHVybiAyNTYqZVt0KzFdK2VbdF19LE9vPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MjU2KmVbdCsxXStlW3RdO3JldHVybiByPDMyNzY4P3I6LTEq'@;
put 'KDY1NTM1LXIrMSl9LGNyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdCszXSooMTw8MjQpKyhlW3QrMl08PDE2KSsoZVt0KzFdPDw4KStlW3RdfSxMdD1mdW5jdGlvbihlLHQpe3JldHVybiBlW3QrM108PDI0fGVbdCsyXTw8MTZ8ZVt0KzFdPDw4fGVbdF19LElvPWZ1bmN0aW9uKGUsdCl7cmV0'@;
put 'dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX07ZnVuY3Rpb24gQWEoZSx0KXt2YXIgYSxuLHMsZixjLG8scj0iIixpPVtdO3N3aXRjaCh0KXtjYXNlImRiY3MiOmlmKG89dGhpcy5sLFNlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpcj10aGlzLnNsaWNlKHRoaXMubCx0'@;
put 'aGlzLmwrMiplKS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKGM9MDtjPGU7KytjKXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodXQodGhpcyxvKSksbys9MjtlKj0yO2JyZWFrO2Nhc2UidXRmOCI6cj1uYSh0aGlzLHRoaXMubCx0aGlzLmwrZSk7YnJlYWs7Y2FzZSJ1dGYxNmxlIjpyPXUw'@;
put 'KHRoaXMsdGhpcy5sLHRoaXMubCsoZSo9MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgT2U8InUiKSlyZXR1cm4gQWEuY2FsbCh0aGlzLGUsImRiY3MiKTtyPU9lLnV0aWxzLmRlY29kZShEcix0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMiplKSksZSo9MjticmVhaztjYXNlImxw'@;
put 'c3RyLWFuc2kiOnI9SjAodGhpcyx0aGlzLmwpLGU9NCtjcih0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHN0ci1jcCI6cj1xMCh0aGlzLHRoaXMubCksZT00K2NyKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwd3N0ciI6cj1aMCh0aGlzLHRoaXMubCksZT00KzIqY3IodGhpcyx0aGlzLmwp'@;
put 'O2JyZWFrO2Nhc2UibHBwNCI6ZT00K2NyKHRoaXMsdGhpcy5sKSxyPVEwKHRoaXMsdGhpcy5sKSwyJmUmJihlKz0yKTticmVhaztjYXNlIjhscHA0IjplPTQrY3IodGhpcyx0aGlzLmwpLHI9ZW4odGhpcyx0aGlzLmwpLDMmZSYmKGUrPTQtKDMmZSkpO2JyZWFrO2Nhc2UiY3N0ciI6Zm9yKGU9'@;
put 'MCxyPSIiOzAhPT0ocz1pYSh0aGlzLHRoaXMubCtlKyspKTspaS5wdXNoKHBhKHMpKTtyPWkuam9pbigiIik7YnJlYWs7Y2FzZSJfd3N0ciI6Zm9yKGU9MCxyPSIiOzAhPT0ocz11dCh0aGlzLHRoaXMubCtlKSk7KWkucHVzaChwYShzKSksZSs9MjtlKz0yLHI9aS5qb2luKCIiKTticmVhaztj'@;
put 'YXNlImRiY3MtY29udCI6Zm9yKHI9IiIsbz10aGlzLmwsYz0wO2M8ZTsrK2Mpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihvKSlyZXR1cm4gcz1pYSh0aGlzLG8pLHRoaXMubD1vKzEsZj1BYS5jYWxsKHRoaXMsZS1jLHM/ImRiY3MtY29udCI6InNiY3MtY29udCIpLGku'@;
put 'am9pbigiIikrZjtpLnB1c2gocGEodXQodGhpcyxvKSkpLG8rPTJ9cj1pLmpvaW4oIiIpLGUqPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIE9lPCJ1Iil7cj1PZS51dGlscy5kZWNvZGUoRHIsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sK2UpKTticmVha31jYXNlInNiY3MtY29udCI6'@;
put 'Zm9yKHI9IiIsbz10aGlzLmwsYz0wO2MhPWU7KytjKXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5zLmluZGV4T2YobykpcmV0dXJuIHM9aWEodGhpcyxvKSx0aGlzLmw9bysxLGY9QWEuY2FsbCh0aGlzLGUtYyxzPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxpLmpvaW4oIiIpK2Y7aS5w'@;
put 'dXNoKHBhKGlhKHRoaXMsbykpKSxvKz0xfXI9aS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaChlKXtjYXNlIDE6cmV0dXJuIGE9aWEodGhpcyx0aGlzLmwpLHRoaXMubCsrLGE7Y2FzZSAyOnJldHVybiBhPSgiaSI9PT10P09vOnV0KSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLGE7Y2Fz'@;
put 'ZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT10JiYxMjgmdGhpc1t0aGlzLmwrM10/KG49Y3IodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxuKTooYT0oZT4wP0x0OklvKSh0aGlzLHRoaXMubCksdGhpcy5sKz00LGEpO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09dClyZXR1cm4gbj04PT1lP2gwKHRoaXMs'@;
put 'dGhpcy5sKTpoMChbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlzLmwrNF0sdGhpc1t0aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxuO2U9ODtjYXNlIDE2OnI9S2ko'@;
put 'dGhpcyx0aGlzLmwsZSl9fXJldHVybiB0aGlzLmwrPWUscn12YXIgUm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pj44JjI1NSxlW3IrMl09dD4+PjE2JjI1NSxlW3IrM109dD4+PjI0JjI1NX0sTm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pjgm'@;
put 'MjU1LGVbcisyXT10Pj4xNiYyNTUsZVtyKzNdPXQ+PjI0JjI1NX0sYm89ZnVuY3Rpb24oZSx0LHIpe2Vbcl09MjU1JnQsZVtyKzFdPXQ+Pj44JjI1NX07ZnVuY3Rpb24gUG8oZSx0LHIpe3ZhciBhPTAsbj0wO2lmKCJkYmNzIj09PXIpe2ZvcihuPTA7biE9dC5sZW5ndGg7KytuKWJvKHRoaXMs'@;
put 'dC5jaGFyQ29kZUF0KG4pLHRoaXMubCsyKm4pO2E9Mip0Lmxlbmd0aH1lbHNlIGlmKCJzYmNzIj09PXIpe2lmKHR5cGVvZiBPZTwidSImJjg3ND09UnQpZm9yKG49MDtuIT10Lmxlbmd0aDsrK24pe3ZhciBpPU9lLnV0aWxzLmVuY29kZShSdCx0LmNoYXJBdChuKSk7dGhpc1t0aGlzLmwrbl09'@;
put 'aVswXX1lbHNlIGZvcih0PXQucmVwbGFjZSgvW15ceDAwLVx4N0ZdL2csIl8iKSxuPTA7biE9dC5sZW5ndGg7KytuKXRoaXNbdGhpcy5sK25dPTI1NSZ0LmNoYXJDb2RlQXQobik7YT10Lmxlbmd0aH1lbHNle2lmKCJoZXgiPT09cil7Zm9yKDtuPGU7KytuKXRoaXNbdGhpcy5sKytdPXBhcnNl'@;
put 'SW50KHQuc2xpY2UoMipuLDIqbisyKSwxNil8fDA7cmV0dXJuIHRoaXN9aWYoInV0ZjE2bGUiPT09cil7dmFyIHM9TWF0aC5taW4odGhpcy5sK2UsdGhpcy5sZW5ndGgpO2ZvcihuPTA7bjxNYXRoLm1pbih0Lmxlbmd0aCxlKTsrK24pe3ZhciBmPXQuY2hhckNvZGVBdChuKTt0aGlzW3RoaXMu'@;
put 'bCsrXT0yNTUmZix0aGlzW3RoaXMubCsrXT1mPj44fWZvcig7dGhpcy5sPHM7KXRoaXNbdGhpcy5sKytdPTA7cmV0dXJuIHRoaXN9c3dpdGNoKGUpe2Nhc2UgMTphPTEsdGhpc1t0aGlzLmxdPTI1NSZ0O2JyZWFrO2Nhc2UgMjphPTIsdGhpc1t0aGlzLmxdPTI1NSZ0LHRoaXNbdGhpcy5sKzFd'@;
put 'PTI1NSYodD4+Pj04KTticmVhaztjYXNlIDM6YT0zLHRoaXNbdGhpcy5sXT0yNTUmdCx0aGlzW3RoaXMubCsxXT0yNTUmKHQ+Pj49OCksdGhpc1t0aGlzLmwrMl09MjU1Jih0Pj4+PTgpO2JyZWFrO2Nhc2UgNDphPTQsUm8odGhpcyx0LHRoaXMubCk7YnJlYWs7Y2FzZSA4OmlmKGE9OCwiZiI9'@;
put 'PT1yKXshZnVuY3Rpb24gRG8oZSx0LHIpe3ZhciBhPSh0PDB8fDEvdD09LTEvMD8xOjApPDw3LG49MCxpPTAscz1hPy10OnQ7aXNGaW5pdGUocyk/MD09cz9uPWk9MDoobj1NYXRoLmZsb29yKE1hdGgubG9nKHMpL01hdGguTE4yKSxpPXMqTWF0aC5wb3coMiw1Mi1uKSxuPD0tMTAyMyYmKCFp'@;
put 'c0Zpbml0ZShpKXx8aTxNYXRoLnBvdygyLDUyKSk/bj0tMTAyMjooaS09TWF0aC5wb3coMiw1Miksbis9MTAyMykpOihuPTIwNDcsaT1pc05hTih0KT8yNjk4NTowKTtmb3IodmFyIGY9MDtmPD01OysrZixpLz0yNTYpZVtyK2ZdPTI1NSZpO2Vbcis2XT0oMTUmbik8PDR8MTUmaSxlW3IrN109'@;
put 'bj4+NHxhfSh0aGlzLHQsdGhpcy5sKTticmVha31jYXNlIDE2OmJyZWFrO2Nhc2UtNDphPTQsTm8odGhpcyx0LHRoaXMubCl9fXJldHVybiB0aGlzLmwrPWEsdGhpc31mdW5jdGlvbiBhcyhlLHQpe3ZhciByPUtpKHRoaXMsdGhpcy5sLGUubGVuZ3RoPj4xKTtpZihyIT09ZSl0aHJvdyBuZXcg'@;
put 'RXJyb3IodCsiRXhwZWN0ZWQgIitlKyIgc2F3ICIrcik7dGhpcy5sKz1lLmxlbmd0aD4+MX1mdW5jdGlvbiBocihlLHQpe2UubD10LGUucmVhZF9zaGlmdD1BYSxlLmNoaz1hcyxlLndyaXRlX3NoaWZ0PVBvfWZ1bmN0aW9uIHByKGUsdCl7ZS5sKz10fWZ1bmN0aW9uIEcoZSl7dmFyIHQ9X3Qo'@;
put 'ZSk7cmV0dXJuIGhyKHQsMCksdH1mdW5jdGlvbiBodChlLHQscil7aWYoZSl7dmFyIGEsbixpO2hyKGUsZS5sfHwwKTtmb3IodmFyIHM9ZS5sZW5ndGgsZj0wLGM9MDtlLmw8czspezEyOCYoZj1lLnJlYWRfc2hpZnQoMSkpJiYoZj0oMTI3JmYpKygoMTI3JmUucmVhZF9zaGlmdCgxKSk8PDcp'@;
put 'KTt2YXIgbz0kYVtmXXx8JGFbNjU1MzVdO2ZvcihpPTEyNyYoYT1lLnJlYWRfc2hpZnQoMSkpLG49MTtuPDQmJjEyOCZhOysrbilpKz0oMTI3JihhPWUucmVhZF9zaGlmdCgxKSkpPDw3Km47Yz1lLmwraTt2YXIgbD1vLmYmJm8uZihlLGkscik7aWYoZS5sPWMsdChsLG8sZikpcmV0dXJufX19'@;
put 'ZnVuY3Rpb24gU3IoKXt2YXIgZT1bXSx0PVNlPzI1NjoyMDQ4LHI9ZnVuY3Rpb24obyl7dmFyIGw9RyhvKTtyZXR1cm4gaHIobCwwKSxsfSxhPXIodCksbj1mdW5jdGlvbigpe2EmJihhLmxlbmd0aD5hLmwmJigoYT1hLnNsaWNlKDAsYS5sKSkubD1hLmxlbmd0aCksYS5sZW5ndGg+MCYmZS5w'@;
put 'dXNoKGEpLGE9bnVsbCl9LGk9ZnVuY3Rpb24obyl7cmV0dXJuIGEmJm88YS5sZW5ndGgtYS5sP2E6KG4oKSxhPXIoTWF0aC5tYXgobysxLHQpKSl9O3JldHVybntuZXh0OmkscHVzaDpmdW5jdGlvbihvKXtuKCksbnVsbD09KGE9bykubCYmKGEubD1hLmxlbmd0aCksaSh0KX0sZW5kOmZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIG4oKSxmcihlKX0sX2J1ZnM6ZX19ZnVuY3Rpb24gQ2EoZSx0LHIpe3ZhciBhPU1lKGUpO2lmKHQucz8oYS5jUmVsJiYoYS5jKz10LnMuYyksYS5yUmVsJiYoYS5yKz10LnMucikpOihhLmNSZWwmJihhLmMrPXQuYyksYS5yUmVsJiYoYS5yKz10LnIpKSwhcnx8ci5iaWZm'@;
put 'PDEyKXtmb3IoO2EuYz49MjU2OylhLmMtPTI1Njtmb3IoO2Eucj49NjU1MzY7KWEuci09NjU1MzZ9cmV0dXJuIGF9ZnVuY3Rpb24gbnMoZSx0LHIpe3ZhciBhPU1lKGUpO3JldHVybiBhLnM9Q2EoYS5zLHQucyxyKSxhLmU9Q2EoYS5lLHQucyxyKSxhfWZ1bmN0aW9uIERhKGUsdCl7aWYoZS5j'@;
put 'UmVsJiZlLmM8MClmb3IoZT1NZShlKTtlLmM8MDspZS5jKz10Pjg/MTYzODQ6MjU2O2lmKGUuclJlbCYmZS5yPDApZm9yKGU9TWUoZSk7ZS5yPDA7KWUucis9dD44PzEwNDg1NzY6dD41PzY1NTM2OjE2Mzg0O3ZhciByPWdlKGUpO3JldHVybiFlLmNSZWwmJm51bGwhPWUuY1JlbCYmKHI9ZnVu'@;
put 'Y3Rpb24gTW8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KHIpKSwhZS5yUmVsJiZudWxsIT1lLnJSZWwmJihyPWZ1bmN0aW9uIExvKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbQS1aXXxeKShcZCspJC8sIiQxJCQkMiIpfShyKSkscn1mdW5jdGlvbiB0bihlLHQpe3Jl'@;
put 'dHVybiAwIT1lLnMucnx8ZS5zLnJSZWx8fGUuZS5yIT0odC5iaWZmPj0xMj8xMDQ4NTc1OnQuYmlmZj49OD82NTUzNjoxNjM4NCl8fGUuZS5yUmVsPzAhPWUucy5jfHxlLnMuY1JlbHx8ZS5lLmMhPSh0LmJpZmY+PTEyPzE2MzgzOjI1NSl8fGUuZS5jUmVsP0RhKGUucyx0LmJpZmYpKyI6IitE'@;
put 'YShlLmUsdC5iaWZmKTooZS5zLnJSZWw/IiI6IiQiKStLZShlLnMucikrIjoiKyhlLmUuclJlbD8iIjoiJCIpK0tlKGUuZS5yKTooZS5zLmNSZWw/IiI6IiQiKStIZShlLnMuYykrIjoiKyhlLmUuY1JlbD8iIjoiJCIpK0hlKGUuZS5jKX1mdW5jdGlvbiBhbihlKXtyZXR1cm4gcGFyc2VJbnQo'@;
put 'ZnVuY3Rpb24gQm8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXCQoXGQrKSQvLCIkMSIpfShlKSwxMCktMX1mdW5jdGlvbiBLZShlKXtyZXR1cm4iIisoZSsxKX1mdW5jdGlvbiBubihlKXtmb3IodmFyIHQ9ZnVuY3Rpb24gVW8oZSl7cmV0dXJuIGUucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9'@;
put 'KGUpLHI9MCxhPTA7YSE9PXQubGVuZ3RoOysrYSlyPTI2KnIrdC5jaGFyQ29kZUF0KGEpLTY0O3JldHVybiByLTF9ZnVuY3Rpb24gSGUoZSl7aWYoZTwwKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb2x1bW4gIitlKTt2YXIgdD0iIjtmb3IoKytlO2U7ZT1NYXRoLmZsb29yKChlLTEpLzI2'@;
put 'KSl0PVN0cmluZy5mcm9tQ2hhckNvZGUoKGUtMSklMjYrNjUpK3Q7cmV0dXJuIHR9ZnVuY3Rpb24gR2UoZSl7Zm9yKHZhciB0PTAscj0wLGE9MDthPGUubGVuZ3RoOysrYSl7dmFyIG49ZS5jaGFyQ29kZUF0KGEpO24+PTQ4JiZuPD01Nz90PTEwKnQrKG4tNDgpOm4+PTY1JiZuPD05MCYmKHI9'@;
put 'MjYqcisobi02NCkpfXJldHVybntjOnItMSxyOnQtMX19ZnVuY3Rpb24gZ2UoZSl7Zm9yKHZhciB0PWUuYysxLHI9IiI7dDt0PSh0LTEpLzI2fDApcj1TdHJpbmcuZnJvbUNoYXJDb2RlKCh0LTEpJTI2KzY1KStyO3JldHVybiByKyhlLnIrMSl9ZnVuY3Rpb24gUHIoZSl7dmFyIHQ9ZS5pbmRl'@;
put 'eE9mKCI6Iik7cmV0dXJuLTE9PXQ/e3M6R2UoZSksZTpHZShlKX06e3M6R2UoZS5zbGljZSgwLHQpKSxlOkdlKGUuc2xpY2UodCsxKSl9fWZ1bmN0aW9uIHdlKGUsdCl7cmV0dXJuIHR5cGVvZiB0PiJ1Inx8Im51bWJlciI9PXR5cGVvZiB0P3dlKGUucyxlLmUpOigic3RyaW5nIiE9dHlwZW9m'@;
put 'IGUmJihlPWdlKGUpKSwic3RyaW5nIiE9dHlwZW9mIHQmJih0PWdlKHQpKSxlPT10P2U6ZSsiOiIrdCl9ZnVuY3Rpb24gRGUoZSl7dmFyIHQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSxyPTAsYT0wLG49MCxpPWUubGVuZ3RoO2ZvcihyPTA7YTxpJiYhKChuPWUuY2hhckNvZGVBdChhKS02'@;
put 'NCk8MXx8bj4yNik7KythKXI9MjYqcituO2Zvcih0LnMuYz0tLXIscj0wO2E8aSYmISgobj1lLmNoYXJDb2RlQXQoYSktNDgpPDB8fG4+OSk7KythKXI9MTAqcituO2lmKHQucy5yPS0tcixhPT09aXx8MTAhPW4pcmV0dXJuIHQuZS5jPXQucy5jLHQuZS5yPXQucy5yLHQ7Zm9yKCsrYSxyPTA7'@;
put 'YSE9aSYmISgobj1lLmNoYXJDb2RlQXQoYSktNjQpPDF8fG4+MjYpOysrYSlyPTI2KnIrbjtmb3IodC5lLmM9LS1yLHI9MDthIT1pJiYhKChuPWUuY2hhckNvZGVBdChhKS00OCk8MHx8bj45KTsrK2Epcj0xMCpyK247cmV0dXJuIHQuZS5yPS0tcix0fWZ1bmN0aW9uIGF0KGUsdCxyKXtyZXR1'@;
put 'cm4gbnVsbD09ZXx8bnVsbD09ZS50fHwieiI9PWUudD8iIjp2b2lkIDAhPT1lLnc/ZS53OigiZCI9PWUudCYmIWUueiYmciYmci5kYXRlTkYmJihlLno9ci5kYXRlTkYpLCJlIj09ZS50P3h0W2Uudl18fGUudjpmdW5jdGlvbiBpcyhlLHQpe3ZhciByPSJkIj09ZS50JiZ0IGluc3RhbmNlb2Yg'@;
put 'RGF0ZTtpZihudWxsIT1lLnopdHJ5e3JldHVybiBlLnc9UnIoZS56LHI/aXIodCk6dCl9Y2F0Y2h7fXRyeXtyZXR1cm4gZS53PVJyKChlLlhGfHx7fSkubnVtRm10SWR8fChyPzE0OjApLHI/aXIodCk6dCl9Y2F0Y2h7cmV0dXJuIiIrdH19KGUsbnVsbD09dD9lLnY6dCkpfWZ1bmN0aW9uIEZ0'@;
put 'KGUsdCl7dmFyIHI9dCYmdC5zaGVldD90LnNoZWV0OiJTaGVldDEiLGE9e307cmV0dXJuIGFbcl09ZSx7U2hlZXROYW1lczpbcl0sU2hlZXRzOmF9fWZ1bmN0aW9uIHNhKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIHNzKGUsdCxyKXt2YXIgYT1yfHx7fSxuPWU/QXJyYXkuaXNBcnJheShlKTphLmRl'@;
put 'bnNlO251bGwhPXplJiZudWxsPT1uJiYobj16ZSk7dmFyIGk9ZXx8KG4/W106e30pLHM9MCxmPTA7aWYoaSYmbnVsbCE9YS5vcmlnaW4pe2lmKCJudW1iZXIiPT10eXBlb2YgYS5vcmlnaW4pcz1hLm9yaWdpbjtlbHNle3ZhciBjPSJzdHJpbmciPT10eXBlb2YgYS5vcmlnaW4/R2UoYS5vcmln'@;
put 'aW4pOmEub3JpZ2luO3M9Yy5yLGY9Yy5jfWlbIiFyZWYiXXx8KGlbIiFyZWYiXT0iQTE6QTEiKX12YXIgbz17czp7YzoxZTcscjoxZTd9LGU6e2M6MCxyOjB9fTtpZihpWyIhcmVmIl0pe3ZhciBsPURlKGlbIiFyZWYiXSk7by5zLmM9bC5zLmMsby5zLnI9bC5zLnIsby5lLmM9TWF0aC5tYXgo'@;
put 'by5lLmMsbC5lLmMpLG8uZS5yPU1hdGgubWF4KG8uZS5yLGwuZS5yKSwtMT09cyYmKG8uZS5yPXM9bC5lLnIrMSl9Zm9yKHZhciBoPTA7aCE9dC5sZW5ndGg7KytoKWlmKHRbaF0pe2lmKCFBcnJheS5pc0FycmF5KHRbaF0pKXRocm93IG5ldyBFcnJvcigiYW9hX3RvX3NoZWV0IGV4cGVjdHMg'@;
put 'YW4gYXJyYXkgb2YgYXJyYXlzIik7Zm9yKHZhciB4PTA7eCE9dFtoXS5sZW5ndGg7Kyt4KWlmKCEodHlwZW9mIHRbaF1beF0+InUiKSl7dmFyIGQ9e3Y6dFtoXVt4XX0sdj1zK2gsdT1mK3g7aWYoby5zLnI+diYmKG8ucy5yPXYpLG8ucy5jPnUmJihvLnMuYz11KSxvLmUucjx2JiYoby5lLnI9'@;
put 'diksby5lLmM8dSYmKG8uZS5jPXUpLCF0W2hdW3hdfHwib2JqZWN0IiE9dHlwZW9mIHRbaF1beF18fEFycmF5LmlzQXJyYXkodFtoXVt4XSl8fHRbaF1beF1pbnN0YW5jZW9mIERhdGUpaWYoQXJyYXkuaXNBcnJheShkLnYpJiYoZC5mPXRbaF1beF1bMV0sZC52PWQudlswXSksbnVsbD09PWQu'@;
put 'dilpZihkLmYpZC50PSJuIjtlbHNlIGlmKGEubnVsbEVycm9yKWQudD0iZSIsZC52PTA7ZWxzZXtpZighYS5zaGVldFN0dWJzKWNvbnRpbnVlO2QudD0ieiJ9ZWxzZSJudW1iZXIiPT10eXBlb2YgZC52P2QudD0ibiI6ImJvb2xlYW4iPT10eXBlb2YgZC52P2QudD0iYiI6ZC52IGluc3RhbmNl'@;
put 'b2YgRGF0ZT8oZC56PWEuZGF0ZU5GfHxwZVsxNF0sYS5jZWxsRGF0ZXM/KGQudD0iZCIsZC53PVJyKGQueixpcihkLnYpKSk6KGQudD0ibiIsZC52PWlyKGQudiksZC53PVJyKGQueixkLnYpKSk6ZC50PSJzIjtlbHNlIGQ9dFtoXVt4XTtpZihuKWlbdl18fChpW3ZdPVtdKSxpW3ZdW3VdJiZp'@;
put 'W3ZdW3VdLnomJihkLno9aVt2XVt1XS56KSxpW3ZdW3VdPWQ7ZWxzZXt2YXIgcD1nZSh7Yzp1LHI6dn0pO2lbcF0mJmlbcF0ueiYmKGQuej1pW3BdLnopLGlbcF09ZH19fXJldHVybiBvLnMuYzwxZTcmJihpWyIhcmVmIl09d2UobykpLGl9KG51bGwsZSx0KX1mdW5jdGlvbiBtcihlKXt2YXIg'@;
put 'dD1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT10PyIiOmUucmVhZF9zaGlmdCh0LCJkYmNzIil9ZnVuY3Rpb24gVm8oZSl7cmV0dXJue2ljaDplLnJlYWRfc2hpZnQoMiksaWZudDplLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIHNuKGUsdCl7dmFyIHI9ZS5sLGE9ZS5yZWFkX3NoaWZ0KDEp'@;
put 'LG49bXIoZSksaT1bXSxzPXt0Om4saDpufTtpZigxJmEpe2Zvcih2YXIgZj1lLnJlYWRfc2hpZnQoNCksYz0wO2MhPWY7KytjKWkucHVzaChWbyhlKSk7cy5yPWl9ZWxzZSBzLnI9W3tpY2g6MCxpZm50OjB9XTtyZXR1cm4gZS5sPXIrdCxzfXZhciBHbz1zbjtmdW5jdGlvbiBIcihlKXt2YXIg'@;
put 'dD1lLnJlYWRfc2hpZnQoNCkscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIHIrPWUucmVhZF9zaGlmdCgxKTw8MTYsZS5sKysse2M6dCxpU3R5bGVSZWY6cn19ZnVuY3Rpb24gTXQoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiB0Kz1lLnJlYWRfc2hpZnQoMSk8PDE2LGUubCsrLHtj'@;
put 'Oi0xLGlTdHlsZVJlZjp0fX12YXIgJG89bXI7ZnVuY3Rpb24gZm4oZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09dHx8NDI5NDk2NzI5NT09PXQ/IiI6ZS5yZWFkX3NoaWZ0KHQsImRiY3MiKX12YXIgam89bXIsb249Zm47ZnVuY3Rpb24gdW4oZSl7dmFyIHQ9ZS5zbGljZShl'@;
put 'LmwsZS5sKzQpLHI9MSZ0WzBdLGE9MiZ0WzBdO2UubCs9NDt2YXIgbj0wPT09YT9oMChbMCwwLDAsMCwyNTImdFswXSx0WzFdLHRbMl0sdFszXV0sMCk6THQodCwwKT4+MjtyZXR1cm4gcj9uLzEwMDpufWZ1bmN0aW9uIG9zKGUpe3ZhciB0PXtzOnt9LGU6e319O3JldHVybiB0LnMucj1lLnJl'@;
put 'YWRfc2hpZnQoNCksdC5lLnI9ZS5yZWFkX3NoaWZ0KDQpLHQucy5jPWUucmVhZF9zaGlmdCg0KSx0LmUuYz1lLnJlYWRfc2hpZnQoNCksdH12YXIgV3Q9b3M7ZnVuY3Rpb24gZ3IoZSl7aWYoZS5sZW5ndGgtZS5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVuZGVyZmxvdyI7cmV0dXJuIGUu'@;
put 'cmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24gbHMoZSx0KXt2YXIgYT1lLnJlYWRfc2hpZnQoNCk7c3dpdGNoKGEpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5I'@;
put 'TUVUQUZJTEUifVtlLnJlYWRfc2hpZnQoNCldfHwiIn1pZihhPjQwMCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENsaXBib2FyZDogIithLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGUubC09NCxlLnJlYWRfc2hpZnQoMCwxPT10PyJscHN0ciI6Imxwd3N0ciIpfXZhciBobj0yLEFyPTMs'@;
put 'dXM9MTIsaHM9ODEsYWw9WzgwLGhzXSx4bj17MTp7bjoiQ29kZVBhZ2UiLHQ6aG59LDI6e246IkNhdGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDpBcn0sNTp7bjoiTGluZUNvdW50Iix0OkFyfSw2OntuOiJQYXJhZ3JhcGhD'@;
put 'b3VudCIsdDpBcn0sNzp7bjoiU2xpZGVDb3VudCIsdDpBcn0sODp7bjoiTm90ZUNvdW50Iix0OkFyfSw5OntuOiJIaWRkZW5Db3VudCIsdDpBcn0sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6QXJ9LDExOntuOiJTY2FsZUNyb3AiLHQ6MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6'@;
put 'NDEwOH0sMTM6e246IlRpdGxlc09mUGFydHMiLHQ6NDEyNn0sMTQ6e246Ik1hbmFnZXIiLHQ6ODB9LDE1OntuOiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNoYXJhY3RlckNvdW50Iix0OkFyfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7'@;
put 'bjoiSHlwZXJsaW5rc0NoYW5nZWQiLHQ6MTF9LDIzOntuOiJBcHBWZXJzaW9uIix0OkFyLHA6InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5'@;
put 'OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sZG49ezE6e246IkNvZGVQYWdlIix0OmhufSwyOntuOiJUaXRsZSIsdDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4'@;
put 'MH0sNDp7bjoiQXV0aG9yIix0OjgwfSw1OntuOiJLZXl3b3JkcyIsdDo4MH0sNjp7bjoiQ29tbWVudHMiLHQ6ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5OntuOiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntuOiJFZGl0VGltZSIsdDo2NH0sMTE6e246'@;
put 'Ikxhc3RQcmludGVkIix0OjY0fSwxMjp7bjoiQ3JlYXRlZERhdGUiLHQ6NjR9LDEzOntuOiJNb2RpZmllZERhdGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6QXJ9LDE1OntuOiJXb3JkQ291bnQiLHQ6QXJ9LDE2OntuOiJDaGFyQ291bnQiLHQ6QXJ9LDE3OntuOiJUaHVtYm5haWwiLHQ6'@;
put 'NzF9LDE4OntuOiJBcHBsaWNhdGlvbiIsdDo4MH0sMTk6e246IkRvY1NlY3VyaXR5Iix0OkFyfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0seHM9ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJS'@;
put 'VSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQxOiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2'@;
put 'OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoiTUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oiLDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2'@;
put 'NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LG5sPVtudWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJr'@;
put 'VXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiBpbChlKXtyZXR1cm4gZS5tYXAoZnVu'@;
put 'Y3Rpb24odCl7cmV0dXJuW3Q+PjE2JjI1NSx0Pj44JjI1NSwyNTUmdF19KX12YXIgVnQ9TWUoaWwoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1'@;
put 'LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQwMTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4'@;
put 'ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2'@;
put 'LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDE2Nzc3MjE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSx4dD17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToiI1ZBTFVFISIsMjM6IiNSRUYhIiwyOToiI05BTUU/IiwzNjoiI05V'@;
put 'TSEiLDQyOiIjTi9BIiw0MzoiI0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9LGRzPXsiI05VTEwhIjowLCIjRElWLzAhIjo3LCIjVkFMVUUhIjoxNSwiI1JFRiEiOjIzLCIjTkFNRT8iOjI5LCIjTlVNISI6MzYsIiNOL0EiOjQyLCIjR0VUVElOR19EQVRBIjo0MywiI1dURj8iOjI1NX0sdm49'@;
put 'eyJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNh'@;
put 'dGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGluLm1hY3JvRW5hYmxlZC5tYWluK3htbCI6Indvcmtib29rcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZp'@;
put 'Y2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbCI6InNoZWV0cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl'@;
put 'bC53b3Jrc2hlZXQiOiJzaGVldHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbCI6ImNoYXJ0cyIsImFwcGxpY2F0aW9u'@;
put 'L3ZuZC5tcy1leGNlbC5jaGFydHNoZWV0IjoiY2hhcnRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQreG1sIjoibWFjcm9zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQiOiJtYWNyb3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuaW50bG1h'@;
put 'Y3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sIjoiZGlhbG9ncyIsImFwcGxpY2F0aW9uL3Zu'@;
put 'ZC5tcy1leGNlbC5kaWFsb2dzaGVldCI6ImRpYWxvZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCI6InN0cnMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hhcmVkU3RyaW5ncyI6InN0'@;
put 'cnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIjoic3R5bGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlcyI6InN0eWxlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNr'@;
put 'YWdlLmNvcmUtcHJvcGVydGllcyt4bWwiOiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50'@;
put 'LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sIjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNw'@;
put 'cmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sIjoiY29tbWVudHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMiOiJjb21tZW50'@;
put 'cyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50aHJlYWRlZGNvbW1lbnRzK3htbCI6InRocmVhZGVkY29tbWVudHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGVyc29uK3htbCI6InBlb3BsZSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5z'@;
put 'cHJlYWRzaGVldG1sLnNoZWV0TWV0YWRhdGEreG1sIjoibWV0YWRhdGEiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRhZGF0YSI6Im1ldGFkYXRhIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxm'@;
put 'b3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFy'@;
put 'dGNvbG9yc3R5bGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRzdHlsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGV4K3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2No'@;
put 'YWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwiOiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNl'@;
put 'dHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0'@;
put 'aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayI6Imxp'@;
put 'bmtzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t'@;
put 'cy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmlj'@;
put 'ZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5'@;
put 'VGFibGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJUT0RPIiwiYXBwbGlj'@;
put 'YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWwiOiJUT0RP'@;
put 'IiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1h'@;
put 'dHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZVNpbmdsZUNlbGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu'@;
put 'bXMtZXhjZWwuc2xpY2VyK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIjoiVE9ETyIsImFw'@;
put 'cGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54'@;
put 'bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3Zu'@;
put 'ZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVyZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVwZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s'@;
put 'Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk'@;
put 'b2N1bWVudC5tb2RlbCtkYXRhIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdpbmdzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54'@;
put 'bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3Blbnht'@;
put 'bGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s'@;
put 'Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5y'@;
put 'ZWxhdGlvbnNoaXBzK3htbCI6InJlbHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0IjoiVE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LGtlPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m'@;
put 'ZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVu'@;
put 'eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1h'@;
put 'cy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3Np'@;
put 'bmciLFhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw'@;
put 'cy9jdXN0b21YbWwiLENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixDTU5UOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9y'@;
put 'ZWxhdGlvbnNoaXBzL2NvbW1lbnRzIixDT1JFX1BST1BTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIixFWFRfUFJPUFM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9y'@;
put 'Zy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyIsQ1VTVF9QUk9QUzoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b20tcHJvcGVydGllcyIsU1NUOiJodHRw'@;
put 'Oi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3MiLFNUWToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiLFRIRU1F'@;
put 'OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIixDSEFSVDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIsQ0hBUlRF'@;
put 'WDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiLENTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0c2hlZXQiLFdTOlsiaHR0cDovL3Nj'@;
put 'aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdLERTOiJodHRwOi8vc2NoZW1hcy5vcGVueG1s'@;
put 'Zm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0IixNUzoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9zaGVldCIsSU1HOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0'@;
put 'cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixEUkFXOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RyYXdpbmciLFhMTUVUQToiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h'@;
put 'dHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGVldE1ldGFkYXRhIixUQ01OVDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNy8xMC9yZWxhdGlvbnNoaXBzL3RocmVhZGVkQ29tbWVudCIsUEVPUExFOiJodHRwOi8vc2NoZW1hcy5taWNy'@;
put 'b3NvZnQuY29tL29mZmljZS8yMDE3LzEwL3JlbGF0aW9uc2hpcHMvcGVyc29uIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07ZnVuY3Rpb24gT2EoZSl7dmFyIHQ9ZS5sYXN0SW5kZXhPZigiLyIpO3JldHVy'@;
put 'biBlLnNsaWNlKDAsdCsxKSsiX3JlbHMvIitlLnNsaWNlKHQrMSkrIi5yZWxzIn1mdW5jdGlvbiBJYShlLHQpe3ZhciByPXsiIWlkIjp7fX07aWYoIWUpcmV0dXJuIHI7Ii8iIT09dC5jaGFyQXQoMCkmJih0PSIvIit0KTt2YXIgYT17fTtyZXR1cm4oZS5tYXRjaCh2cil8fFtdKS5mb3JFYWNo'@;
put 'KGZ1bmN0aW9uKG4pe3ZhciBpPW1lKG4pO2lmKCI8UmVsYXRpb25zaGlwIj09PWlbMF0pe3ZhciBzPXt9O3MuVHlwZT1pLlR5cGUscy5UYXJnZXQ9aS5UYXJnZXQscy5JZD1pLklkLGkuVGFyZ2V0TW9kZSYmKHMuVGFyZ2V0TW9kZT1pLlRhcmdldE1vZGUpO3ZhciBmPSJFeHRlcm5hbCI9PT1p'@;
put 'LlRhcmdldE1vZGU/aS5UYXJnZXQ6U2EoaS5UYXJnZXQsdCk7cltmXT1zLGFbaS5JZF09c319KSxyWyIhaWQiXT1hLHJ9dmFyIGNsPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0IixWcj1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250'@;
put 'ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxhc3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIs'@;
put 'IlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIsIkxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRs'@;
put 'ZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXSxkbD1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgQXJyYXkoVnIubGVuZ3RoKSx0PTA7dDxWci5sZW5ndGg7Kyt0KXt2YXIgcj1Wclt0'@;
put 'XSxhPSIoPzoiK3JbMF0uc2xpY2UoMCxyWzBdLmluZGV4T2YoIjoiKSkrIjopIityWzBdLnNsaWNlKHJbMF0uaW5kZXhPZigiOiIpKzEpO2VbdF09bmV3IFJlZ0V4cCgiPCIrYSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK2ErIj4iKX1yZXR1cm4gZX0oKTtmdW5jdGlvbiBtcyhlKXt2YXIgdD17'@;
put 'fTtlPUJlKGUpO2Zvcih2YXIgcj0wO3I8VnIubGVuZ3RoOysrcil7dmFyIGE9VnJbcl0sbj1lLm1hdGNoKGRsW3JdKTtudWxsIT1uJiZuLmxlbmd0aD4wJiYodFthWzFdXT1JZShuWzFdKSksImRhdGUiPT09YVsyXSYmdFthWzFdXSYmKHRbYVsxXV09WGUodFthWzFdXSkpfXJldHVybiB0fXZh'@;
put 'ciBYdD1bWyJBcHBsaWNhdGlvbiIsIkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJpbmciXSxbIkRvY1NlY3VyaXR5IiwiRG9jU2VjdXJpdHkiLCJzdHJpbmciXSxbIk1hbmFnZXIiLCJN'@;
put 'YW5hZ2VyIiwic3RyaW5nIl0sWyJIeXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NVcFRvRGF0ZSIsIkxpbmtzVXBUb0RhdGUiLCJib29sIl0sWyJTY2FsZUNyb3AiLCJTY2FsZUNyb3Ai'@;
put 'LCJib29sIl0sWyJIZWFkaW5nUGFpcnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIHdzKGUsdCxyLGEpe3ZhciBuPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgZSluPUhpKGUsYSk7ZWxzZSBmb3IodmFyIGk9'@;
put 'MDtpPGUubGVuZ3RoOysraSluPW4uY29uY2F0KGVbaV0ubWFwKGZ1bmN0aW9uKGwpe3JldHVybnt2Omx9fSkpO3ZhciBzPSJzdHJpbmciPT10eXBlb2YgdD9IaSh0LGEpLm1hcChmdW5jdGlvbihsKXtyZXR1cm4gbC52fSk6dCxmPTAsYz0wO2lmKHMubGVuZ3RoPjApZm9yKHZhciBvPTA7byE9'@;
put 'PW4ubGVuZ3RoO28rPTIpe3N3aXRjaChjPStuW28rMV0udixuW29dLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRiIjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2Mjdc'@;
put 'dTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhl'@;
put 'NHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMg'@;
put 'ZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjpyLldvcmtzaGVldHM9YyxyLlNoZWV0TmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJOYW1lZCBSYW5nZXMiOmNhc2UiUmFuZ29zIGNvbiBub21icmUiOmNhc2UiXHU1NDBkXHU1MjRkXHU0ZWQ4XHUzMDRkXHU0ZTAwXHU4OWE3'@;
put 'IjpjYXNlIkJlbmFubnRlIEJlcmVpY2hlIjpjYXNlIk5hdm5naXZuZSBvbXJceGU1ZGVyIjpyLk5hbWVkUmFuZ2VzPWMsci5EZWZpbmVkTmFtZXM9cy5zbGljZShmLGYrYyk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjpyLkNoYXJ0c2hlZXRzPWMsci5DaGFydE5hbWVzPXMu'@;
put 'c2xpY2UoZixmK2MpfWYrPWN9fXZhciBfbixwbD0vPFtePl0rPltePF0qL2csZ249e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixS'@;
put 'ZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3JlYXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29t'@;
put 'cGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFuZ3VhZ2U6Ikxhbmd1YWdlIn07ZnVuY3Rpb24gZ2woZSx0LHIpe19ufHwoX249czAoZ24pKSxlW3Q9X25bdF18fHRdPXJ9ZnVuY3Rpb24gd24o'@;
put 'ZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKHIvMWU3Kk1hdGgucG93KDIsMzIpK3QvMWU3LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIFRzKGUsdCxyKXt2YXIgYT1l'@;
put 'Lmwsbj1lLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihyKWZvcig7ZS5sLWEmMzspKytlLmw7cmV0dXJuIG59ZnVuY3Rpb24gU3MoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgwLCJscHdzdHIiKTtyZXR1cm4gciYmKGUubCs9NC0oYS5sZW5ndGgrMSYzKSYzKSxhfWZ1bmN0aW9uIEZz'@;
put 'KGUsdCxyKXtyZXR1cm4gMzE9PT10P1NzKGUpOlRzKGUsMCxyKX1mdW5jdGlvbiBrbihlLHQscil7cmV0dXJuIEZzKGUsdCwhMT09PXI/MDo0KX1mdW5jdGlvbiBGbChlKXt2YXIgdD1lLmwscj1fMChlLGhzKTtyZXR1cm4gMD09ZVtlLmxdJiYwPT1lW2UubCsxXSYmZS5sLXQmMiYmKGUubCs9'@;
put 'MiksW3IsXzAoZSxBcildfWZ1bmN0aW9uIHlzKGUsdCl7Zm9yKHZhciByPWUucmVhZF9zaGlmdCg0KSxhPXt9LG49MDtuIT1yOysrbil7dmFyIGk9ZS5yZWFkX3NoaWZ0KDQpLHM9ZS5yZWFkX3NoaWZ0KDQpO2FbaV09ZS5yZWFkX3NoaWZ0KHMsMTIwMD09PXQ/InV0ZjE2bGUiOiJ1dGY4Iiku'@;
put 'cmVwbGFjZShkciwiIikucmVwbGFjZSh3YSwiISIpLDEyMDA9PT10JiZzJTImJihlLmwrPTIpfXJldHVybiAzJmUubCYmKGUubD1lLmw+PjM8PDIpLGF9ZnVuY3Rpb24gQXMoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9ZS5zbGljZShlLmwsZS5sK3QpO3JldHVybiBlLmwrPXQsKDMmdCk+'@;
put 'MCYmKGUubCs9NC0oMyZ0KSYzKSxyfWZ1bmN0aW9uIF8wKGUsdCxyKXt2YXIgbixhPWUucmVhZF9zaGlmdCgyKSxpPXJ8fHt9O2lmKGUubCs9Mix0IT09dXMmJmEhPT10JiYtMT09PWFsLmluZGV4T2YodCkmJig0MTI2IT0oNjU1MzQmdCl8fDQxMjYhPSg2NTUzNCZhKSkpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJFeHBlY3RlZCB0eXBlICIrdCsiIHNhdyAiK2EpO3N3aXRjaCh0PT09dXM/YTp0KXtjYXNlIDI6cmV0dXJuIG49ZS5yZWFkX3NoaWZ0KDIsImkiKSxpLnJhd3x8KGUubCs9MiksbjtjYXNlIDM6cmV0dXJuIGUucmVhZF9zaGlmdCg0LCJpIik7Y2FzZSAxMTpyZXR1cm4gMCE9PWUucmVh'@;
put 'ZF9zaGlmdCg0KTtjYXNlIDE5OnJldHVybiBlLnJlYWRfc2hpZnQoNCk7Y2FzZSAzMDpyZXR1cm4gVHMoZSwwLDQpLnJlcGxhY2UoZHIsIiIpO2Nhc2UgMzE6cmV0dXJuIFNzKGUpO2Nhc2UgNjQ6cmV0dXJuIHduKGUpO2Nhc2UgNjU6cmV0dXJuIEFzKGUpO2Nhc2UgNzE6cmV0dXJuIGZ1bmN0'@;
put 'aW9uIEFsKGUpe3ZhciB0PXt9O3JldHVybiB0LlNpemU9ZS5yZWFkX3NoaWZ0KDQpLGUubCs9dC5TaXplKzMtKHQuU2l6ZS0xKSU0LHR9KGUpO2Nhc2UgODA6cmV0dXJuIGtuKGUsYSwhaS5yYXcpLnJlcGxhY2UoZHIsIiIpO2Nhc2UgODE6cmV0dXJuIGZ1bmN0aW9uIEVsKGUsdCl7aWYoIXQp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJWdFVuYWxpZ25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIEZzKGUsdCwwKX0oZSxhKS5yZXBsYWNlKGRyLCIiKTtjYXNlIDQxMDg6cmV0dXJuIGZ1bmN0aW9uIHlsKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1bXSxh'@;
put 'PTA7YTx0LzI7KythKXIucHVzaChGbChlKSk7cmV0dXJuIHJ9KGUpO2Nhc2UgNDEyNjpjYXNlIDQxMjc6cmV0dXJuIDQxMjc9PWE/ZnVuY3Rpb24gVGwoZSl7Zm9yKHZhciB0PWUucmVhZF9zaGlmdCg0KSxyPVtdLGE9MDthIT10OysrYSl7dmFyIG49ZS5sO3JbYV09ZS5yZWFkX3NoaWZ0KDAs'@;
put 'Imxwd3N0ciIpLnJlcGxhY2UoZHIsIiIpLGUubC1uJjImJihlLmwrPTIpfXJldHVybiByfShlKTpmdW5jdGlvbiBTbChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDQpLHI9W10sYT0wO2EhPXQ7KythKXJbYV09ZS5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIikucmVwbGFjZShkciwiIik7cmV0'@;
put 'dXJuIHJ9KGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIit0KyIgIithKX19ZnVuY3Rpb24gRHMoZSx0KXt2YXIgcj1lLmwsYT1lLnJlYWRfc2hpZnQoNCksbj1lLnJlYWRfc2hpZnQoNCksaT1bXSxzPTAsZj0wLGM9LTEs'@;
put 'bz17fTtmb3Iocz0wO3MhPW47KytzKXt2YXIgbD1lLnJlYWRfc2hpZnQoNCksaD1lLnJlYWRfc2hpZnQoNCk7aVtzXT1bbCxoK3JdfWkuc29ydChmdW5jdGlvbihULGcpe3JldHVybiBUWzFdLWdbMV19KTt2YXIgeD17fTtmb3Iocz0wO3MhPW47KytzKXtpZihlLmwhPT1pW3NdWzFdKXt2YXIg'@;
put 'ZD0hMDtpZihzPjAmJnQpc3dpdGNoKHRbaVtzLTFdWzBdXS50KXtjYXNlIDI6ZS5sKzI9PT1pW3NdWzFdJiYoZS5sKz0yLGQ9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OmUubDw9aVtzXVsxXSYmKGUubD1pW3NdWzFdLGQ9ITEpfWlmKCghdHx8MD09cykmJmUubDw9aVtzXVsxXSYmKGQ9'@;
put 'ITEsZS5sPWlbc11bMV0pLGQpdGhyb3cgbmV3IEVycm9yKCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzICIraVtzXVsxXSsiIGF0ICIrZS5sKyIgOiIrcyl9aWYodCl7dmFyIHY9dFtpW3NdWzBdXTtpZih4W3Yubl09XzAoZSx2LnQse3JhdzohMH0pLCJ2ZXJzaW9uIj09PXYucCYmKHhb'@;
put 'di5uXT1TdHJpbmcoeFt2Lm5dPj4xNikrIi4iKygiMDAwMCIrU3RyaW5nKDY1NTM1Jnhbdi5uXSkpLnNsaWNlKC00KSksIkNvZGVQYWdlIj09di5uKXN3aXRjaCh4W3Yubl0pe2Nhc2UgMDp4W3Yubl09MTI1MjtjYXNlIDg3NDpjYXNlIDkzMjpjYXNlIDkzNjpjYXNlIDk0OTpjYXNlIDk1MDpj'@;
put 'YXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2FzZSAxMjU4OmNhc2UgMWU0OmNhc2UgMTIwMDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVlMzpjYXNlLTUzNjpjYXNlIDY1MDAxOmNhc2UtNTM1Ok1yKGY9eFt2'@;
put 'Lm5dPj4+MCY2NTUzNSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIENvZGVQYWdlOiAiK3hbdi5uXSl9fWVsc2UgaWYoMT09PWlbc11bMF0pe2lmKGY9eC5Db2RlUGFnZT1fMChlLGhuKSxNcihmKSwtMSE9PWMpe3ZhciB1PWUubDtlLmw9aVtjXVsxXSxvPXlz'@;
put 'KGUsZiksZS5sPXV9fWVsc2UgaWYoMD09PWlbc11bMF0pe2lmKDA9PT1mKXtjPXMsZS5sPWlbcysxXVsxXTtjb250aW51ZX1vPXlzKGUsZil9ZWxzZXt2YXIgayxwPW9baVtzXVswXV07c3dpdGNoKGVbZS5sXSl7Y2FzZSA2NTplLmwrPTQsaz1BcyhlKTticmVhaztjYXNlIDMwOmNhc2UgMzE6'@;
put 'ZS5sKz00LGs9a24oZSxlW2UubC00XSkucmVwbGFjZSgvXHUwMDAwKyQvLCIiKTticmVhaztjYXNlIDM6ZS5sKz00LGs9ZS5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIDE5OmUubCs9NCxrPWUucmVhZF9zaGlmdCg0KTticmVhaztjYXNlIDU6ZS5sKz00LGs9ZS5yZWFkX3NoaWZ0KDgs'@;
put 'ImYiKTticmVhaztjYXNlIDExOmUubCs9NCxrPUplKGUsNCk7YnJlYWs7Y2FzZSA2NDplLmwrPTQsaz1YZSh3bihlKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucGFyc2VkIHZhbHVlOiAiK2VbZS5sXSl9eFtwXT1rfX1yZXR1cm4gZS5sPXIrYSx4fWZ1bmN0aW9uIFJzKGUs'@;
put 'dCxyKXt2YXIgYT1lLmNvbnRlbnQ7aWYoIWEpcmV0dXJue307aHIoYSwwKTt2YXIgbixpLHMsZixjPTA7YS5jaGsoImZlZmYiLCJCeXRlIE9yZGVyOiAiKSxhLnJlYWRfc2hpZnQoMik7dmFyIG89YS5yZWFkX3NoaWZ0KDQpLGw9YS5yZWFkX3NoaWZ0KDE2KTtpZihsIT09dmUudXRpbHMuY29u'@;
put 'c3RzLkhFQURFUl9DTFNJRCYmbCE9PXIpdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitsKTtpZigxIT09KG49YS5yZWFkX3NoaWZ0KDQpKSYmMiE9PW4pdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrbik7aWYoaT1hLnJlYWRfc2hpZnQoMTYp'@;
put 'LGY9YS5yZWFkX3NoaWZ0KDQpLDE9PT1uJiZmIT09YS5sKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoOiAiK2YrIiAhPT0gIithLmwpOzI9PT1uJiYocz1hLnJlYWRfc2hpZnQoMTYpLGM9YS5yZWFkX3NoaWZ0KDQpKTt2YXIgdixoPURzKGEsdCkseD17U3lzdGVtSWRlbnRpZmll'@;
put 'cjpvfTtmb3IodmFyIGQgaW4gaCl4W2RdPWhbZF07aWYoeC5GTVRJRD1pLDE9PT1uKXJldHVybiB4O2lmKGMtYS5sPT0yJiYoYS5sKz0yKSxhLmwhPT1jKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrYS5sKyIgIT09ICIrYyk7dHJ5e3Y9RHMoYSxudWxsKX1jYXRjaHt9'@;
put 'Zm9yKGQgaW4gdil4W2RdPXZbZF07cmV0dXJuIHguRk1USUQ9W2ksc10seH1mdW5jdGlvbiB5dChlLHQpe3JldHVybiBlLnJlYWRfc2hpZnQodCksbnVsbH1mdW5jdGlvbiBKZShlLHQpe3JldHVybiAxPT09ZS5yZWFkX3NoaWZ0KHQpfWZ1bmN0aW9uIHRyKGUpe3JldHVybiBlLnJlYWRfc2hp'@;
put 'ZnQoMiwidSIpfWZ1bmN0aW9uIGJzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uIE9sKGUsdCxyKXtmb3IodmFyIGE9W10sbj1lLmwrdDtlLmw8bjspYS5wdXNoKHIoZSxuLWUubCkpO2lmKG4hPT1lLmwpdGhyb3cgbmV3IEVycm9yKCJTbHVycCBlcnJvciIpO3JldHVybiBhfShlLHQsdHIpfWZ1bmN0'@;
put 'aW9uIFJhKGUsdCxyKXt2YXIgYT1lLnJlYWRfc2hpZnQociYmci5iaWZmPj0xMj8yOjEpLG49InNiY3MtY29udCIsaT1EcjtyJiZyLmJpZmY+PTgmJihEcj0xMjAwKSxyJiY4IT1yLmJpZmY/MTI9PXIuYmlmZiYmKG49IndzdHIiKTplLnJlYWRfc2hpZnQoMSkmJihuPSJkYmNzLWNvbnQiKSxy'@;
put 'LmJpZmY+PTImJnIuYmlmZjw9NSYmKG49ImNwc3RyIik7dmFyIGY9YT9lLnJlYWRfc2hpZnQoYSxuKToiIjtyZXR1cm4gRHI9aSxmfWZ1bmN0aW9uIFJsKGUpe3ZhciB0PURyO0RyPTEyMDA7dmFyIGMscj1lLnJlYWRfc2hpZnQoMiksYT1lLnJlYWRfc2hpZnQoMSksbj00JmEsaT04JmEscz0x'@;
put 'KygxJmEpLGY9MCxvPXt9O2kmJihmPWUucmVhZF9zaGlmdCgyKSksbiYmKGM9ZS5yZWFkX3NoaWZ0KDQpKTt2YXIgaD0wPT09cj8iIjplLnJlYWRfc2hpZnQociwyPT1zPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtyZXR1cm4gaSYmKGUubCs9NCpmKSxuJiYoZS5sKz1jKSxvLnQ9aCxpfHwo'@;
put 'by5yYXc9Ijx0PiIrby50KyI8L3Q+IixvLnI9by50KSxEcj10LG99ZnVuY3Rpb24gR3QoZSx0LHIpe2lmKHIpe2lmKHIuYmlmZj49MiYmci5iaWZmPD01KXJldHVybiBlLnJlYWRfc2hpZnQodCwiY3BzdHIiKTtpZihyLmJpZmY+PTEyKXJldHVybiBlLnJlYWRfc2hpZnQodCwiZGJjcy1jb250'@;
put 'Iil9dmFyIG49ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLnJlYWRfc2hpZnQodCwwPT09bj8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rpb24gTmEoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKTtyZXR1cm4gMD09PWE/KGUubCsrLCIiKTpHdChlLGEs'@;
put 'cil9ZnVuY3Rpb24genQoZSx0LHIpe2lmKHIuYmlmZj41KXJldHVybiBOYShlLDAscik7dmFyIGE9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09YT8oZS5sKyssIiIpOmUucmVhZF9zaGlmdChhLHIuYmlmZjw9NHx8IWUubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiB3MChl'@;
put 'KXt2YXIgdD1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHQ+MD9lLnJlYWRfc2hpZnQodCwidXRmMTZsZSIpLnJlcGxhY2UoZHIsIiIpOiIifWZ1bmN0aW9uIE1zKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMSksZS5yZWFkX3NoaWZ0KDEpLGUucmVhZF9zaGlmdCgxKSxlLnJlYWRfc2hpZnQoMSld'@;
put 'fWZ1bmN0aW9uIFVzKGUsdCl7dmFyIHI9TXMoZSk7cmV0dXJuIHJbM109MCxyfWZ1bmN0aW9uIG50KGUpe3JldHVybntyOmUucmVhZF9zaGlmdCgyKSxjOmUucmVhZF9zaGlmdCgyKSxpeGZlOmUucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24gVmwoZSx0LHIpe3ZhciBhPXIuYmlmZj44PzQ6Mjty'@;
put 'ZXR1cm5bZS5yZWFkX3NoaWZ0KGEpLGUucmVhZF9zaGlmdChhLCJpIiksZS5yZWFkX3NoaWZ0KGEsImkiKV19ZnVuY3Rpb24gV3MoZSl7cmV0dXJuW2UucmVhZF9zaGlmdCgyKSx1bihlKV19ZnVuY3Rpb24gazAoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpO3Jl'@;
put 'dHVybntzOntjOmUucmVhZF9zaGlmdCgyKSxyOnR9LGU6e2M6ZS5yZWFkX3NoaWZ0KDIpLHJ9fX1mdW5jdGlvbiBWcyhlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6ZS5yZWFkX3NoaWZ0KDEpLHI6dH0sZTp7YzplLnJlYWRfc2hpZnQoMSks'@;
put 'cn19fXZhciBHbD1WcztmdW5jdGlvbiBYcyhlKXtlLmwrPTQ7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTEyLFtyLHQsYV19ZnVuY3Rpb24gX3IoZSl7ZS5sKz0yLGUubCs9ZS5yZWFkX3NoaWZ0KDIpfXZhciBq'@;
put 'bD17MDpfciw0Ol9yLDU6X3IsNjpfciw3OmZ1bmN0aW9uICRsKGUpe3JldHVybiBlLmwrPTQsZS5jZj1lLnJlYWRfc2hpZnQoMikse319LDg6X3IsOTpfciwxMDpfciwxMTpfciwxMjpfciwxMzpmdW5jdGlvbiB6bChlKXt2YXIgdD17fTtyZXR1cm4gZS5sKz00LGUubCs9MTYsdC5mU2hhcmVk'@;
put 'Tm90ZT1lLnJlYWRfc2hpZnQoMiksZS5sKz00LHR9LDE0Ol9yLDE1Ol9yLDE2Ol9yLDE3Ol9yLDE4Ol9yLDE5Ol9yLDIwOl9yLDIxOlhzfTtmdW5jdGlvbiBFMChlLHQpe3ZhciByPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKHIuQklGRlZlcj1lLnJlYWRfc2hpZnQoMiksKHQtPTIpPj0yJiYo'@;
put 'ci5kdD1lLnJlYWRfc2hpZnQoMiksZS5sLT0yKSxyLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZih0PjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIrci5C'@;
put 'SUZGVmVyKX1yZXR1cm4gZS5yZWFkX3NoaWZ0KHQpLHJ9ZnVuY3Rpb24gR3MoZSx0LHIpe3ZhciBhPTA7ciYmMj09ci5iaWZmfHwoYT1lLnJlYWRfc2hpZnQoMikpO3ZhciBuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gciYmMj09ci5iaWZmJiYoYT0xLShuPj4xNSksbiY9MzI3NjcpLFt7VW5z'@;
put 'eW5jZWQ6MSZhLER5WmVybzooMiZhKT4+MSxFeEFzYzooNCZhKT4+MixFeERzYzooOCZhKT4+M30sbl19dmFyIHd1PXp0O2Z1bmN0aW9uIHpzKGUsdCxyKXt2YXIgYT1lLmwrdCxuPTghPXIuYmlmZiYmci5iaWZmPzI6NCxpPWUucmVhZF9zaGlmdChuKSxzPWUucmVhZF9zaGlmdChuKSxmPWUu'@;
put 'cmVhZF9zaGlmdCgyKSxjPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gZS5sPWEse3M6e3I6aSxjOmZ9LGU6e3I6cyxjfX19ZnVuY3Rpb24ganMoZSx0LHIpe3ZhciBhPW50KGUpOygyPT1yLmJpZmZ8fDk9PXQpJiYrK2UubDt2YXIgbj1mdW5jdGlvbiBJbChlKXt2YXIgdD1lLnJlYWRfc2hpZnQo'@;
put 'MSk7cmV0dXJuIDE9PT1lLnJlYWRfc2hpZnQoMSk/dDoxPT09dH0oZSk7cmV0dXJuIGEudmFsPW4sYS50PSEwPT09bnx8ITE9PT1uPyJiIjoiZSIsYX12YXIgS3M9ZnVuY3Rpb24gSGwoZSx0LHIpe3JldHVybiAwPT09dD8iIjp6dChlLDAscil9O2Z1bmN0aW9uIFlzKGUsdCxyKXt2YXIgbixh'@;
put 'PWUucmVhZF9zaGlmdCgyKSxpPXtmQnVpbHRJbjoxJmEsZldhbnRBZHZpc2U6YT4+PjEmMSxmV2FudFBpY3Q6YT4+PjImMSxmT2xlOmE+Pj4zJjEsZk9sZUxpbms6YT4+PjQmMSxjZjphPj4+NSYxMDIzLGZJY29uOmE+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1yLnNiY2NoJiYobj1mdW5jdGlv'@;
put 'biBYbChlLHQscil7ZS5sKz00O3ZhciBhPWUubCsodC09NCksbj1SYShlLDAsciksaT1lLnJlYWRfc2hpZnQoMik7aWYoaSE9PShhLT1lLmwpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIithKyIgIT0gIitpKTtyZXR1cm4gZS5sKz1pLG59KGUsdC0y'@;
put 'LHIpKSxpLmJvZHk9bnx8ZS5yZWFkX3NoaWZ0KHQtMiksInN0cmluZyI9PXR5cGVvZiBuJiYoaS5OYW1lPW4pLGl9dmFyIE51PVsiX3hsbm0uQ29uc29saWRhdGVfQXJlYSIsIl94bG5tLkF1dG9fT3BlbiIsIl94bG5tLkF1dG9fQ2xvc2UiLCJfeGxubS5FeHRyYWN0IiwiX3hsbm0uRGF0YWJh'@;
put 'c2UiLCJfeGxubS5Dcml0ZXJpYSIsIl94bG5tLlByaW50X0FyZWEiLCJfeGxubS5QcmludF9UaXRsZXMiLCJfeGxubS5SZWNvcmRlciIsIl94bG5tLkRhdGFfRm9ybSIsIl94bG5tLkF1dG9fQWN0aXZhdGUiLCJfeGxubS5BdXRvX0RlYWN0aXZhdGUiLCJfeGxubS5TaGVldF9UaXRsZSIsIl94'@;
put 'bG5tLl9GaWx0ZXJEYXRhYmFzZSJdO2Z1bmN0aW9uIEpzKGUsdCxyKXt2YXIgYT1lLmwrdCxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgxKSxzPWUucmVhZF9zaGlmdCgxKSxmPWUucmVhZF9zaGlmdChyJiYyPT1yLmJpZmY/MToyKSxjPTA7KCFyfHxyLmJpZmY+PTUpJiYoNSE9'@;
put 'ci5iaWZmJiYoZS5sKz0yKSxjPWUucmVhZF9zaGlmdCgyKSw1PT1yLmJpZmYmJihlLmwrPTIpLGUubCs9NCk7dmFyIG89R3QoZSxzLHIpOzMyJm4mJihvPU51W28uY2hhckNvZGVBdCgwKV0pO3ZhciBsPWEtZS5sO3ImJjI9PXIuYmlmZiYmLS1sO3ZhciBoPWEhPWUubCYmMCE9PWYmJmw+MD9m'@;
put 'dW5jdGlvbiBLZChlLHQscixhKXt2YXIgcyxuPWUubCt0LGk9SGEoZSxhLHIpO3JldHVybiBuIT09ZS5sJiYocz1XYShlLG4tZS5sLGkscikpLFtpLHNdfShlLGwscixmKTpbXTtyZXR1cm57Y2hLZXk6aSxOYW1lOm8saXRhYjpjLHJnY2U6aH19ZnVuY3Rpb24gcXMoZSx0LHIpe2lmKHIuYmlm'@;
put 'Zjw4KXJldHVybiBmdW5jdGlvbiBidShlLHQscil7Mz09ZVtlLmwrMV0mJmVbZS5sXSsrO3ZhciBhPVJhKGUsMCxyKTtyZXR1cm4gMz09YS5jaGFyQ29kZUF0KDApP2Euc2xpY2UoMSk6YX0oZSwwLHIpO2Zvcih2YXIgYT1bXSxuPWUubCt0LGk9ZS5yZWFkX3NoaWZ0KHIuYmlmZj44PzQ6Mik7'@;
put 'MCE9aS0tOylhLnB1c2goVmwoZSwwLHIpKTtpZihlLmwhPW4pdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6ICIrZS5sKyIgIT0gIituKTtyZXR1cm4gYX1mdW5jdGlvbiBacyhlLHQscil7dmFyIGE9R2woZSw2KTtzd2l0Y2goci5iaWZmKXtjYXNlIDI6ZS5sKyssdC09NzticmVh'@;
put 'aztjYXNlIDM6Y2FzZSA0OmUubCs9Mix0LT04O2JyZWFrO2RlZmF1bHQ6ZS5sKz02LHQtPTEyfXJldHVyblthLCRkKGUsdCxyKV19dmFyIFh1PXs4OmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5sK3Q7ZS5sKz0xMDt2YXIgYT1lLnJlYWRfc2hpZnQoMik7ZS5sKz00LGUubCs9MixlLmwrPTIsZS5s'@;
put 'Kz0yLGUubCs9NDt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUubCs9bixlLmw9cix7Zm10OmF9fX07ZnVuY3Rpb24gUXMoZSx0LHIpe2lmKCFyLmNlbGxTdHlsZXMpcmV0dXJuIHByKGUsdCk7dmFyIGE9ciYmci5iaWZmPj0xMj80OjIsbj1lLnJlYWRfc2hpZnQoYSksaT1lLnJlYWRf'@;
put 'c2hpZnQoYSkscz1lLnJlYWRfc2hpZnQoYSksZj1lLnJlYWRfc2hpZnQoYSksYz1lLnJlYWRfc2hpZnQoMik7Mj09YSYmKGUubCs9Mik7dmFyIG89e3M6bixlOmksdzpzLGl4ZmU6ZixmbGFnczpjfTtyZXR1cm4oci5iaWZmPj01fHwhci5iaWZmKSYmKG8ubGV2ZWw9Yz4+OCY3KSxvfXZhciBp'@;
put 'aD1udCxzaD1icyxmaD1OYSxtaD1bMiwzLDQ4LDQ5LDEzMSwxMzksMTQwLDI0NV0sVG49ZnVuY3Rpb24oKXt2YXIgZT17MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUw'@;
put 'LDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyNyw4Ojg2NSw5OjQzNywxMDo4NTAsMTE6NDM3LDEzOjQzNywxNDo4NTAs'@;
put 'MTU6NDM3LDE2Ojg1MCwxNzo0MzcsMTg6ODUwLDE5OjkzMiwyMDo4NTAsMjE6NDM3LDIyOjg1MCwyMzo4NjUsMjQ6NDM3LDI1OjQzNywyNjo4NTAsMjc6NDM3LDI4Ojg2MywyOTo4NTAsMzE6ODUyLDM0Ojg1MiwzNTo4NTIsMzY6ODYwLDM3Ojg1MCwzODo4NjYsNTU6ODUwLDY0Ojg1Miw3Nzo5'@;
put 'MzYsNzg6OTQ5LDc5Ojk1MCw4MDo4NzQsODc6MTI1Miw4ODoxMjUyLDg5OjEyNTIsMTA4Ojg2MywxMzQ6NzM3LDEzNTo4NTIsMTM2Ojg1NywyMDQ6MTI1NywyNTU6MTY5Njl9LHQ9czAoezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEw'@;
put 'NDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjd9KTtm'@;
put 'dW5jdGlvbiBhKGYsYyl7dmFyIG89Y3x8e307by5kYXRlTkZ8fChvLmRhdGVORj0ieXl5eW1tZGQiKTt2YXIgbD1zYShmdW5jdGlvbiByKGYsYyl7dmFyIG89W10sbD1fdCgxKTtzd2l0Y2goYy50eXBlKXtjYXNlImJhc2U2NCI6bD1JcihPcihmKSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmw9SXIo'@;
put 'Zik7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOmw9Zn1ocihsLDApO3ZhciBoPWwucmVhZF9zaGlmdCgxKSx4PSEhKDEzNiZoKSxkPSExLHY9ITE7c3dpdGNoKGgpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmQ9'@;
put 'ITAseD0hMDticmVhaztjYXNlIDE0MDp2PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitoLnRvU3RyaW5nKDE2KSl9dmFyIHU9MCxwPTUyMTsyPT1oJiYodT1sLnJlYWRfc2hpZnQoMikpLGwubCs9MywyIT1oJiYodT1sLnJlYWRf'@;
put 'c2hpZnQoNCkpLHU+MTA0ODU3NiYmKHU9MWU2KSwyIT1oJiYocD1sLnJlYWRfc2hpZnQoMikpO3ZhciBrPWwucmVhZF9zaGlmdCgyKSxUPWMuY29kZXBhZ2V8fDEyNTI7MiE9aCYmKGwubCs9MTYsbC5yZWFkX3NoaWZ0KDEpLDAhPT1sW2wubF0mJihUPWVbbFtsLmxdXSksbC5sKz0xLGwubCs9'@;
put 'MiksdiYmKGwubCs9MzYpO2Zvcih2YXIgZz1bXSxOPXt9LE09TWF0aC5taW4obC5sZW5ndGgsMj09aD81MjE6cC0xMC0oZD8yNjQ6MCkpLEk9dj8zMjoxMTtsLmw8TSYmMTMhPWxbbC5sXTspc3dpdGNoKE49e30sTi5uYW1lPU9lLnV0aWxzLmRlY29kZShULGwuc2xpY2UobC5sLGwubCtJKSku'@;
put 'cmVwbGFjZSgvW1x1MDAwMFxyXG5dLiokL2csIiIpLGwubCs9SSxOLnR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZShsLnJlYWRfc2hpZnQoMSkpLDIhPWgmJiF2JiYoTi5vZmZzZXQ9bC5yZWFkX3NoaWZ0KDQpKSxOLmxlbj1sLnJlYWRfc2hpZnQoMSksMj09aCYmKE4ub2Zmc2V0PWwucmVhZF9z'@;
put 'aGlmdCgyKSksTi5kZWM9bC5yZWFkX3NoaWZ0KDEpLE4ubmFtZS5sZW5ndGgmJmcucHVzaChOKSwyIT1oJiYobC5sKz12PzEzOjE0KSxOLnR5cGUpe2Nhc2UiQiI6KCFkfHw4IT1OLmxlbikmJmMuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitOLm5hbWUrIjoiK04udHlwZSk7YnJlYWs7'@;
put 'Y2FzZSJHIjpjYXNlIlAiOmMuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitOLm5hbWUrIjoiK04udHlwZSk7YnJlYWs7Y2FzZSIrIjpjYXNlIjAiOmNhc2UiQCI6Y2FzZSJDIjpjYXNlIkQiOmNhc2UiRiI6Y2FzZSJJIjpjYXNlIkwiOmNhc2UiTSI6Y2FzZSJOIjpjYXNlIk8iOmNhc2Ui'@;
put 'VCI6Y2FzZSJZIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBGaWVsZCBUeXBlOiAiK04udHlwZSl9aWYoMTMhPT1sW2wubF0mJihsLmw9cC0xKSwxMyE9PWwucmVhZF9zaGlmdCgxKSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBUZXJtaW5hdG9yIG5vdCBmb3VuZCAiK2wu'@;
put 'bCsiICIrbFtsLmxdKTtsLmw9cDt2YXIgeT0wLFA9MDtmb3Iob1swXT1bXSxQPTA7UCE9Zy5sZW5ndGg7KytQKW9bMF1bUF09Z1tQXS5uYW1lO2Zvcig7dS0tID4wOylpZig0MiE9PWxbbC5sXSlmb3IoKytsLmwsb1srK3ldPVtdLFA9MCxQPTA7UCE9Zy5sZW5ndGg7KytQKXt2YXIgUj1sLnNs'@;
put 'aWNlKGwubCxsLmwrZ1tQXS5sZW4pO2wubCs9Z1tQXS5sZW4saHIoUiwwKTt2YXIgVj1PZS51dGlscy5kZWNvZGUoVCxSKTtzd2l0Y2goZ1tQXS50eXBlKXtjYXNlIkMiOlYudHJpbSgpLmxlbmd0aCYmKG9beV1bUF09Vi5yZXBsYWNlKC9ccyskLywiIikpO2JyZWFrO2Nhc2UiRCI6b1t5XVtQ'@;
put 'XT04PT09Vi5sZW5ndGg/bmV3IERhdGUoK1Yuc2xpY2UoMCw0KSwrVi5zbGljZSg0LDYpLTEsK1Yuc2xpY2UoNiw4KSk6VjticmVhaztjYXNlIkYiOm9beV1bUF09cGFyc2VGbG9hdChWLnRyaW0oKSk7YnJlYWs7Y2FzZSIrIjpjYXNlIkkiOm9beV1bUF09dj8yMTQ3NDgzNjQ4XlIucmVhZF9z'@;
put 'aGlmdCgtNCwiaSIpOlIucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSJMIjpzd2l0Y2goVi50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZIjpjYXNlIlQiOm9beV1bUF09ITA7YnJlYWs7Y2FzZSJOIjpjYXNlIkYiOm9beV1bUF09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7'@;
put 'ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8IitWKyJ8Iil9YnJlYWs7Y2FzZSJNIjppZigheCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgIitoLnRvU3RyaW5nKDE2KSk7b1t5XVtQXT0iIyNNRU1PIyMiKyh2P3BhcnNl'@;
put 'SW50KFYudHJpbSgpLDEwKTpSLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiTiI6KFY9Vi5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT1WJiYob1t5XVtQXT0rVnx8MCk7YnJlYWs7Y2FzZSJAIjpvW3ldW1BdPW5ldyBEYXRlKFIucmVhZF9zaGlmdCgtOCwiZiIpLTYyMTM1'@;
put 'NjgzMmU1KTticmVhaztjYXNlIlQiOm9beV1bUF09bmV3IERhdGUoODY0ZTUqKFIucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStSLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiWSI6b1t5XVtQXT1SLnJlYWRfc2hpZnQoNCwiaSIpLzFlNCtSLnJlYWRfc2hpZnQoNCwiaSIpLzFlNCpNYXRoLnBv'@;
put 'dygyLDMyKTticmVhaztjYXNlIk8iOm9beV1bUF09LVIucmVhZF9zaGlmdCgtOCwiZiIpO2JyZWFrO2Nhc2UiQiI6aWYoZCYmOD09Z1tQXS5sZW4pe29beV1bUF09Ui5yZWFkX3NoaWZ0KDgsImYiKTticmVha31jYXNlIkciOmNhc2UiUCI6Ui5sKz1nW1BdLmxlbjticmVhaztjYXNlIjAiOmlm'@;
put 'KCJfTnVsbEZsYWdzIj09PWdbUF0ubmFtZSlicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAiK2dbUF0udHlwZSl9fWVsc2UgbC5sKz1rO2lmKDIhPWgmJmwubDxsLmxlbmd0aCYmMjYhPWxbbC5sKytdKXRocm93IG5ldyBFcnJvcigiREJG'@;
put 'IEVPRiBNYXJrZXIgbWlzc2luZyAiKyhsLmwtMSkrIiBvZiAiK2wubGVuZ3RoKyIgIitsW2wubC0xXS50b1N0cmluZygxNikpO3JldHVybiBjJiZjLnNoZWV0Um93cyYmKG89by5zbGljZSgwLGMuc2hlZXRSb3dzKSksYy5EQkY9ZyxvfShmLG8pLG8pO3JldHVybiBsWyIhY29scyJdPW8uREJG'@;
put 'Lm1hcChmdW5jdGlvbihoKXtyZXR1cm57d2NoOmgubGVuLERCRjpofX0pLGRlbGV0ZSBvLkRCRixsfXZhciBpPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gbihmLGMpe3RyeXtyZXR1cm4gRnQoYShmLGMpLGMpfWNhdGNoKG8pe2lm'@;
put 'KGMmJmMuV1RGKXRocm93IG99cmV0dXJue1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fX0sdG9fc2hlZXQ6YSxmcm9tX3NoZWV0OmZ1bmN0aW9uIHMoZixjKXt2YXIgbz1jfHx7fTtpZigrby5jb2RlcGFnZT49MCYmTXIoK28uY29kZXBhZ2UpLCJzdHJpbmciPT1vLnR5cGUpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBsPVNyKCksaD1mdW5jdGlvbiBOMChlLHQpe2lmKG51bGw9PWV8fG51bGw9PWVbIiFyZWYiXSlyZXR1cm5bXTt2YXIgcj17dDoibiIsdjowfSxhPTAsbj0xLGk9W10scz0wLGY9IiIsYz17czp7cjowLGM6MH0sZTp7cjow'@;
put 'LGM6MH19LG89dHx8e30sbD1udWxsIT1vLnJhbmdlP28ucmFuZ2U6ZVsiIXJlZiJdO3N3aXRjaCgxPT09by5oZWFkZXI/YT0xOiJBIj09PW8uaGVhZGVyP2E9MjpBcnJheS5pc0FycmF5KG8uaGVhZGVyKT9hPTM6bnVsbD09by5oZWFkZXImJihhPTApLHR5cGVvZiBsKXtjYXNlInN0cmluZyI6'@;
put 'Yz1EZShsKTticmVhaztjYXNlIm51bWJlciI6KGM9RGUoZVsiIXJlZiJdKSkucy5yPWw7YnJlYWs7ZGVmYXVsdDpjPWx9YT4wJiYobj0wKTt2YXIgaD1LZShjLnMucikseD1bXSxkPVtdLHY9MCx1PTAscD1BcnJheS5pc0FycmF5KGUpLGs9Yy5zLnIsVD0wLGc9e307cCYmIWVba10mJihlW2td'@;
put 'PVtdKTt2YXIgTj1vLnNraXBIaWRkZW4mJmVbIiFjb2xzIl18fFtdLE09by5za2lwSGlkZGVuJiZlWyIhcm93cyJdfHxbXTtmb3IoVD1jLnMuYztUPD1jLmUuYzsrK1QpaWYoIShOW1RdfHx7fSkuaGlkZGVuKXN3aXRjaCh4W1RdPUhlKFQpLHI9cD9lW2tdW1RdOmVbeFtUXStoXSxhKXtjYXNl'@;
put 'IDE6aVtUXT1ULWMucy5jO2JyZWFrO2Nhc2UgMjppW1RdPXhbVF07YnJlYWs7Y2FzZSAzOmlbVF09by5oZWFkZXJbVC1jLnMuY107YnJlYWs7ZGVmYXVsdDppZihudWxsPT1yJiYocj17dzoiX19FTVBUWSIsdDoicyJ9KSxmPXM9YXQocixudWxsLG8pLHU9Z1tzXXx8MCl7ZG97Zj1zKyJfIit1'@;
put 'Kyt9d2hpbGUoZ1tmXSk7Z1tzXT11LGdbZl09MX1lbHNlIGdbc109MTtpW1RdPWZ9Zm9yKGs9Yy5zLnIrbjtrPD1jLmUucjsrK2spaWYoIShNW2tdfHx7fSkuaGlkZGVuKXt2YXIgST1fYyhlLGMsayx4LGEsaSxwLG8pOyghMT09PUkuaXNlbXB0eXx8KDE9PT1hPyExIT09by5ibGFua3Jvd3M6'@;
put 'by5ibGFua3Jvd3MpKSYmKGRbdisrXT1JLnJvdyl9cmV0dXJuIGQubGVuZ3RoPXYsZH0oZix7aGVhZGVyOjEscmF3OiEwLGNlbGxEYXRlczohMH0pLHg9aFswXSxkPWguc2xpY2UoMSksdj1mWyIhY29scyJdfHxbXSx1PTAscD0wLGs9MCxUPTE7Zm9yKHU9MDt1PHgubGVuZ3RoOysrdSlpZigo'@;
put 'KHZbdV18fHt9KS5EQkZ8fHt9KS5uYW1lKXhbdV09dlt1XS5EQkYubmFtZSwrK2s7ZWxzZSBpZihudWxsIT14W3VdKXtpZigrK2ssIm51bWJlciI9PXR5cGVvZiB4W3VdJiYoeFt1XT14W3VdLnRvU3RyaW5nKDEwKSksInN0cmluZyIhPXR5cGVvZiB4W3VdKXRocm93IG5ldyBFcnJvcigiREJG'@;
put 'IEludmFsaWQgY29sdW1uIG5hbWUgIit4W3VdKyIgfCIrdHlwZW9mIHhbdV0rInwiKTtpZih4LmluZGV4T2YoeFt1XSkhPT11KWZvcihwPTA7cDwxMDI0OysrcClpZigtMT09eC5pbmRleE9mKHhbdV0rIl8iK3ApKXt4W3VdKz0iXyIrcDticmVha319dmFyIGc9RGUoZlsiIXJlZiJdKSxOPVtd'@;
put 'LE09W10sST1bXTtmb3IodT0wO3U8PWcuZS5jLWcucy5jOysrdSl7dmFyIHk9IiIsUD0iIixSPTAsVj1bXTtmb3IocD0wO3A8ZC5sZW5ndGg7KytwKW51bGwhPWRbcF1bdV0mJlYucHVzaChkW3BdW3VdKTtpZigwIT1WLmxlbmd0aCYmbnVsbCE9eFt1XSl7Zm9yKHA9MDtwPFYubGVuZ3RoOysr'@;
put 'cCl7c3dpdGNoKHR5cGVvZiBWW3BdKXtjYXNlIm51bWJlciI6UD0iQiI7YnJlYWs7Y2FzZSJzdHJpbmciOmRlZmF1bHQ6UD0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjpQPSJMIjticmVhaztjYXNlIm9iamVjdCI6UD1WW3BdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9Uj1NYXRoLm1heChSLFN0'@;
put 'cmluZyhWW3BdKS5sZW5ndGgpLHk9eSYmeSE9UD8iQyI6UH1SPjI1MCYmKFI9MjUwKSwiQyI9PShQPSgodlt1XXx8e30pLkRCRnx8e30pLnR5cGUpJiZ2W3VdLkRCRi5sZW4+UiYmKFI9dlt1XS5EQkYubGVuKSwiQiI9PXkmJiJOIj09UCYmKHk9Ik4iLElbdV09dlt1XS5EQkYuZGVjLFI9dlt1'@;
put 'XS5EQkYubGVuKSxNW3VdPSJDIj09eXx8Ik4iPT1QP1I6aVt5XXx8MCxUKz1NW3VdLE5bdV09eX1lbHNlIE5bdV09Ij8ifXZhciBYPWwubmV4dCgzMik7Zm9yKFgud3JpdGVfc2hpZnQoNCwzMTg5MDI1NzYpLFgud3JpdGVfc2hpZnQoNCxkLmxlbmd0aCksWC53cml0ZV9zaGlmdCgyLDI5Nisz'@;
put 'MiprKSxYLndyaXRlX3NoaWZ0KDIsVCksdT0wO3U8NDsrK3UpWC53cml0ZV9zaGlmdCg0LDApO2ZvcihYLndyaXRlX3NoaWZ0KDQsKCt0W1J0XXx8Myk8PDgpLHU9MCxwPTA7dTx4Lmxlbmd0aDsrK3UpaWYobnVsbCE9eFt1XSl7dmFyIGI9bC5uZXh0KDMyKSxlZT0oeFt1XS5zbGljZSgtMTAp'@;
put 'KyJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIikuc2xpY2UoMCwxMSk7Yi53cml0ZV9zaGlmdCgxLGVlLCJzYmNzIiksYi53cml0ZV9zaGlmdCgxLCI/Ij09Tlt1XT8iQyI6Tlt1XSwic2JjcyIpLGIud3JpdGVfc2hpZnQoNCxwKSxiLndyaXRlX3NoaWZ0KDEsTVt1XXx8aVtOW3VdXXx8MCksYi53'@;
put 'cml0ZV9zaGlmdCgxLElbdV18fDApLGIud3JpdGVfc2hpZnQoMSwyKSxiLndyaXRlX3NoaWZ0KDQsMCksYi53cml0ZV9zaGlmdCgxLDApLGIud3JpdGVfc2hpZnQoNCwwKSxiLndyaXRlX3NoaWZ0KDQsMCkscCs9TVt1XXx8aVtOW3VdXXx8MH12YXIgbGU9bC5uZXh0KDI2NCk7Zm9yKGxlLndy'@;
put 'aXRlX3NoaWZ0KDQsMTMpLHU9MDt1PDY1OysrdSlsZS53cml0ZV9zaGlmdCg0LDApO2Zvcih1PTA7dTxkLmxlbmd0aDsrK3Upe3ZhciByZT1sLm5leHQoVCk7Zm9yKHJlLndyaXRlX3NoaWZ0KDEsMCkscD0wO3A8eC5sZW5ndGg7KytwKWlmKG51bGwhPXhbcF0pc3dpdGNoKE5bcF0pe2Nhc2Ui'@;
put 'TCI6cmUud3JpdGVfc2hpZnQoMSxudWxsPT1kW3VdW3BdPzYzOmRbdV1bcF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6cmUud3JpdGVfc2hpZnQoOCxkW3VdW3BdfHwwLCJmIik7YnJlYWs7Y2FzZSJOIjp2YXIgZGU9IjAiO2ZvcigibnVtYmVyIj09dHlwZW9mIGRbdV1bcF0mJihkZT1kW3VdW3Bd'@;
put 'LnRvRml4ZWQoSVtwXXx8MCkpLGs9MDtrPE1bcF0tZGUubGVuZ3RoOysraylyZS53cml0ZV9zaGlmdCgxLDMyKTtyZS53cml0ZV9zaGlmdCgxLGRlLCJzYmNzIik7YnJlYWs7Y2FzZSJEIjpkW3VdW3BdPyhyZS53cml0ZV9zaGlmdCg0LCgiMDAwMCIrZFt1XVtwXS5nZXRGdWxsWWVhcigpKS5z'@;
put 'bGljZSgtNCksInNiY3MiKSxyZS53cml0ZV9zaGlmdCgyLCgiMDAiKyhkW3VdW3BdLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSwic2JjcyIpLHJlLndyaXRlX3NoaWZ0KDIsKCIwMCIrZFt1XVtwXS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2JjcyIpKTpyZS53cml0ZV9zaGlmdCg4LCIwMDAw'@;
put 'MDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciB1ZT1TdHJpbmcobnVsbCE9ZFt1XVtwXT9kW3VdW3BdOiIiKS5zbGljZSgwLE1bcF0pO2ZvcihyZS53cml0ZV9zaGlmdCgxLHVlLCJzYmNzIiksaz0wO2s8TVtwXS11ZS5sZW5ndGg7KytrKXJlLndyaXRlX3NoaWZ0KDEsMzIpfX1yZXR1'@;
put 'cm4gbC5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLGwuZW5kKCl9fX0oKSxlZj1mdW5jdGlvbigpe3ZhciBlPXtBQToiXHhjMCIsQkE6Ilx4YzEiLENBOiJceGMyIixEQToxOTUsSEE6Ilx4YzQiLEpBOjE5NyxBRToiXHhjOCIsQkU6Ilx4YzkiLENFOiJceGNhIixIRToiXHhjYiIsQUk6Ilx4'@;
put 'Y2MiLEJJOiJceGNkIixDSToiXHhjZSIsSEk6Ilx4Y2YiLEFPOiJceGQyIixCTzoiXHhkMyIsQ086Ilx4ZDQiLERPOjIxMyxITzoiXHhkNiIsQVU6Ilx4ZDkiLEJVOiJceGRhIixDVToiXHhkYiIsSFU6Ilx4ZGMiLEFhOiJceGUwIixCYToiXHhlMSIsQ2E6Ilx4ZTIiLERhOjIyNyxIYToiXHhl'@;
put 'NCIsSmE6MjI5LEFlOiJceGU4IixCZToiXHhlOSIsQ2U6Ilx4ZWEiLEhlOiJceGViIixBaToiXHhlYyIsQmk6Ilx4ZWQiLENpOiJceGVlIixIaToiXHhlZiIsQW86Ilx4ZjIiLEJvOiJceGYzIixDbzoiXHhmNCIsRG86MjQ1LEhvOiJceGY2IixBdToiXHhmOSIsQnU6Ilx4ZmEiLEN1OiJceGZi'@;
put 'IixIdToiXHhmYyIsS0M6Ilx4YzciLEtjOiJceGU3IixxOiJceGU2Iix6OiJcdTAxNTMiLGE6Ilx4YzYiLGo6Ilx1MDE1MiIsRE46MjA5LERuOjI0MSxIeToyNTUsUzoxNjksYzoxNzAsUjoxNzQsIkIgIjoxODAsMDoxNzYsMToxNzcsMjoxNzgsMzoxNzksNToxODEsNjoxODIsNzoxODMsUTox'@;
put 'ODUsazoxODYsYjoyMDgsaToyMTYsbDoyMjIsczoyNDAseToyNDgsIiEiOjE2MSwnIic6MTYyLCIjIjoxNjMsIigiOjE2NCwiJSI6MTY1LCInIjoxNjcsIkggIjoxNjgsIisiOjE3MSwiOyI6MTg3LCI8IjoxODgsIj0iOjE4OSwiPiI6MTkwLCI/IjoxOTEsInsiOjIyM30sdD1uZXcgUmVnRXhw'@;
put 'KCJceDFiTigiKyRlKGUpLmpvaW4oInwiKS5yZXBsYWNlKC9cfFx8XHwvLCJ8XFx8fCIpLnJlcGxhY2UoLyhbPygpK10pL2csIlxcJDEiKSsifFxcfCkiLCJnbSIpLHI9ZnVuY3Rpb24oeCxkKXt2YXIgdj1lW2RdO3JldHVybiJudW1iZXIiPT10eXBlb2Ygdj9CMCh2KTp2fSxhPWZ1bmN0aW9u'@;
put 'KHgsZCx2KXt2YXIgdT1kLmNoYXJDb2RlQXQoMCktMzI8PDR8di5jaGFyQ29kZUF0KDApLTQ4O3JldHVybiA1OT09dT94OkIwKHUpfTtmdW5jdGlvbiBpKHgsZCl7dmFyIFgsdj14LnNwbGl0KC9bXG5ccl0rLyksdT0tMSxwPS0xLGs9MCxUPTAsZz1bXSxOPVtdLE09bnVsbCxJPXt9LHk9W10s'@;
put 'UD1bXSxSPVtdLFY9MDtmb3IoK2QuY29kZXBhZ2U+PTAmJk1yKCtkLmNvZGVwYWdlKTtrIT09di5sZW5ndGg7KytrKXtWPTA7dmFyIHJlLGI9dltrXS50cmltKCkucmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAtXHgzRl0pL2csYSkucmVwbGFjZSh0LHIpLGVlPWIucmVwbGFjZSgv'@;
put 'OzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5yZXBsYWNlKC9cdTAwMDAvZywiOyIpfSk7aWYoYi5sZW5ndGg+MClzd2l0Y2goZWVbMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2FzZSJQIjoiUCI9PWVlWzFd'@;
put 'LmNoYXJBdCgwKSYmTi5wdXNoKGIuc2xpY2UoMykucmVwbGFjZSgvOzsvZywiOyIpKTticmVhaztjYXNlIkMiOnZhciBkZT0hMSx1ZT0hMSxGZT0hMSxjZT0hMSx4ZT0tMSxLPS0xO2ZvcihUPTE7VDxlZS5sZW5ndGg7KytUKXN3aXRjaChlZVtUXS5jaGFyQXQoMCkpe2Nhc2UiQSI6Y2FzZSJH'@;
put 'IjpicmVhaztjYXNlIlgiOnA9cGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpLTEsdWU9ITA7YnJlYWs7Y2FzZSJZIjpmb3IodT1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMSx1ZXx8KHA9MCksWD1nLmxlbmd0aDtYPD11OysrWClnW1hdPVtdO2JyZWFrO2Nhc2UiSyI6JyInPT09KHJlPWVlW1Rd'@;
put 'LnNsaWNlKDEpKS5jaGFyQXQoMCk/cmU9cmUuc2xpY2UoMSxyZS5sZW5ndGgtMSk6IlRSVUUiPT09cmU/cmU9ITA6IkZBTFNFIj09PXJlP3JlPSExOmlzTmFOKEpyKHJlKSk/aXNOYU4oYWEocmUpLmdldERhdGUoKSl8fChyZT1YZShyZSkpOihyZT1KcihyZSksbnVsbCE9PU0mJmJ0KE0pJiYo'@;
put 'cmU9bzAocmUpKSksdHlwZW9mIE9lPCJ1IiYmInN0cmluZyI9PXR5cGVvZiByZSYmInN0cmluZyIhPShkfHx7fSkudHlwZSYmKGR8fHt9KS5jb2RlcGFnZSYmKHJlPU9lLnV0aWxzLmRlY29kZShkLmNvZGVwYWdlLHJlKSksZGU9ITA7YnJlYWs7Y2FzZSJFIjpjZT0hMDt2YXIgQz11YShlZVtU'@;
put 'XS5zbGljZSgxKSx7cjp1LGM6cH0pO2dbdV1bcF09W2dbdV1bcF0sQ107YnJlYWs7Y2FzZSJTIjpGZT0hMCxnW3VdW3BdPVtnW3VdW3BdLCJTNVMiXTticmVhaztjYXNlIlIiOnhlPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xO2JyZWFrO2Nhc2UiQyI6Sz1wYXJzZUludChlZVtUXS5zbGlj'@;
put 'ZSgxKSktMTticmVhaztkZWZhdWx0OmlmKGQmJmQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYil9aWYoZGUmJihnW3VdW3BdJiYyPT1nW3VdW3BdLmxlbmd0aD9nW3VdW3BdWzBdPXJlOmdbdV1bcF09cmUsTT1udWxsKSxGZSl7aWYoY2UpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIFU9eGU+LTEmJmdbeGVdW0tdO2lmKCFVfHwhVVsxXSl0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGZpbmQgYmFzZSIpO2dbdV1bcF1bMV09a2YoVVsxXSx7cjp1LXhl'@;
put 'LGM6cC1LfSl9YnJlYWs7Y2FzZSJGIjp2YXIgTz0wO2ZvcihUPTE7VDxlZS5sZW5ndGg7KytUKXN3aXRjaChlZVtUXS5jaGFyQXQoMCkpe2Nhc2UiWCI6cD1wYXJzZUludChlZVtUXS5zbGljZSgxKSktMSwrK087YnJlYWs7Y2FzZSJZIjpmb3IodT1wYXJzZUludChlZVtUXS5zbGljZSgxKSkt'@;
put 'MSxYPWcubGVuZ3RoO1g8PXU7KytYKWdbWF09W107YnJlYWs7Y2FzZSJNIjpWPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS8yMDticmVhaztjYXNlIkYiOmNhc2UiRyI6Y2FzZSJTIjpjYXNlIkQiOmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjpNPU5bcGFyc2VJbnQoZWVbVF0uc2xpY2UoMSkpXTti'@;
put 'cmVhaztjYXNlIlciOmZvcihSPWVlW1RdLnNsaWNlKDEpLnNwbGl0KCIgIiksWD1wYXJzZUludChSWzBdLDEwKTtYPD1wYXJzZUludChSWzFdLDEwKTsrK1gpVj1wYXJzZUludChSWzJdLDEwKSxQW1gtMV09MD09PVY/e2hpZGRlbjohMH06e3djaDpWfSxLdChQW1gtMV0pO2JyZWFrO2Nhc2Ui'@;
put 'QyI6UFtwPXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xXXx8KFBbcF09e30pO2JyZWFrO2Nhc2UiUiI6eVt1PXBhcnNlSW50KGVlW1RdLnNsaWNlKDEpKS0xXXx8KHlbdV09e30pLFY+MD8oeVt1XS5ocHQ9Vix5W3VdLmhweD1vYShWKSk6MD09PVYmJih5W3VdLmhpZGRlbj0hMCk7YnJlYWs7'@;
put 'ZGVmYXVsdDppZihkJiZkLldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2IpfU88MSYmKE09bnVsbCk7YnJlYWs7ZGVmYXVsdDppZihkJiZkLldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2IpfX1yZXR1cm4geS5sZW5ndGg+MCYmKElbIiFyb3dz'@;
put 'Il09eSksUC5sZW5ndGg+MCYmKElbIiFjb2xzIl09UCksZCYmZC5zaGVldFJvd3MmJihnPWcuc2xpY2UoMCxkLnNoZWV0Um93cykpLFtnLEldfWZ1bmN0aW9uIHMoeCxkKXt2YXIgdj1mdW5jdGlvbiBuKHgsZCl7c3dpdGNoKGQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBpKE9yKHgpLGQp'@;
put 'O2Nhc2UiYmluYXJ5IjpyZXR1cm4gaSh4LGQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gaShTZSYmQnVmZmVyLmlzQnVmZmVyKHgpP3gudG9TdHJpbmcoImJpbmFyeSIpOnd0KHgpLGQpO2Nhc2UiYXJyYXkiOnJldHVybiBpKFB0KHgpLGQpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5'@;
put 'cGUgIitkLnR5cGUpfSh4LGQpLHA9dlsxXSxrPXNhKHZbMF0sZCk7cmV0dXJuICRlKHApLmZvckVhY2goZnVuY3Rpb24oVCl7a1tUXT1wW1RdfSksa31mdW5jdGlvbiBjKHgsZCx2LHUpe3ZhciBwPSJDO1kiKyh2KzEpKyI7WCIrKHUrMSkrIjtLIjtzd2l0Y2goeC50KXtjYXNlIm4iOnArPXgu'@;
put 'dnx8MCx4LmYmJiF4LkYmJihwKz0iO0UiK0luKHguZix7cjp2LGM6dX0pKTticmVhaztjYXNlImIiOnArPXgudj8iVFJVRSI6IkZBTFNFIjticmVhaztjYXNlImUiOnArPXgud3x8eC52O2JyZWFrO2Nhc2UiZCI6cCs9JyInKyh4Lnd8fHgudikrJyInO2JyZWFrO2Nhc2UicyI6cCs9JyInK3gu'@;
put 'di5yZXBsYWNlKC8iL2csIiIpLnJlcGxhY2UoLzsvZywiOzsiKSsnIid9cmV0dXJuIHB9cmV0dXJuIGVbInwiXT0yNTQse3RvX3dvcmtib29rOmZ1bmN0aW9uIGYoeCxkKXtyZXR1cm4gRnQocyh4LGQpLGQpfSx0b19zaGVldDpzLGZyb21fc2hlZXQ6ZnVuY3Rpb24gaCh4LGQpe3ZhciBrLHY9'@;
put 'WyJJRDtQV1hMO047RSJdLHU9W10scD1EZSh4WyIhcmVmIl0pLFQ9QXJyYXkuaXNBcnJheSh4KSxnPSJcclxuIjt2LnB1c2goIlA7UEdlbmVyYWwiKSx2LnB1c2goIkY7UDA7REcwRzg7TTI1NSIpLHhbIiFjb2xzIl0mJmZ1bmN0aW9uIG8oeCxkKXtkLmZvckVhY2goZnVuY3Rpb24odix1KXt2'@;
put 'YXIgcD0iRjtXIisodSsxKSsiICIrKHUrMSkrIiAiO3YuaGlkZGVuP3ArPSIwIjooIm51bWJlciI9PXR5cGVvZiB2LndpZHRoJiYhdi53cHgmJih2LndweD1QYSh2LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiB2LndweCYmIXYud2NoJiYodi53Y2g9TGEodi53cHgpKSwibnVtYmVyIj09dHlw'@;
put 'ZW9mIHYud2NoJiYocCs9TWF0aC5yb3VuZCh2LndjaCkpKSwiICIhPXAuY2hhckF0KHAubGVuZ3RoLTEpJiZ4LnB1c2gocCl9KX0odix4WyIhY29scyJdKSx4WyIhcm93cyJdJiZmdW5jdGlvbiBsKHgsZCl7ZC5mb3JFYWNoKGZ1bmN0aW9uKHYsdSl7dmFyIHA9IkY7Ijt2LmhpZGRlbj9wKz0i'@;
put 'TTA7Ijp2LmhwdD9wKz0iTSIrMjAqdi5ocHQrIjsiOnYuaHB4JiYocCs9Ik0iKzIwKkJhKHYuaHB4KSsiOyIpLHAubGVuZ3RoPjImJngucHVzaChwKyJSIisodSsxKSl9KX0odix4WyIhcm93cyJdKSx2LnB1c2goIkI7WSIrKHAuZS5yLXAucy5yKzEpKyI7WCIrKHAuZS5jLXAucy5jKzEpKyI7'@;
put 'RCIrW3Aucy5jLHAucy5yLHAuZS5jLHAuZS5yXS5qb2luKCIgIikpO2Zvcih2YXIgTj1wLnMucjtOPD1wLmUucjsrK04pZm9yKHZhciBNPXAucy5jO008PXAuZS5jOysrTSl7dmFyIEk9Z2Uoe3I6TixjOk19KTsoaz1UPyh4W05dfHxbXSlbTV06eFtJXSkmJihudWxsIT1rLnZ8fGsuZiYmIWsu'@;
put 'RikmJnUucHVzaChjKGssMCxOLE0pKX1yZXR1cm4gdi5qb2luKGcpK2crdS5qb2luKGcpK2crIkUiK2d9fX0oKSxyZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoaSxzKXtmb3IodmFyIGY9aS5zcGxpdCgiXG4iKSxjPS0xLG89LTEsbD0wLGg9W107bCE9PWYubGVuZ3RoOysrbClpZigiQk9UIiE9'@;
put 'PWZbbF0udHJpbSgpKXtpZighKGM8MCkpe2Zvcih2YXIgeD1mW2xdLnRyaW0oKS5zcGxpdCgiLCIpLGQ9eFswXSx2PXhbMV0sdT1mWysrbF18fCIiOzEmKHUubWF0Y2goL1siXS9nKXx8W10pLmxlbmd0aCYmbDxmLmxlbmd0aC0xOyl1Kz0iXG4iK2ZbKytsXTtzd2l0Y2godT11LnRyaW0oKSwr'@;
put 'ZCl7Y2FzZS0xOmlmKCJCT1QiPT09dSl7aFsrK2NdPVtdLG89MDtjb250aW51ZX1pZigiRU9EIiE9PXUpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK3UpO2JyZWFrO2Nhc2UgMDpoW2NdW29dPSJUUlVFIj09PXV8fCJGQUxTRSIhPT11JiYoaXNO'@;
put 'YU4oSnIodikpP2lzTmFOKGFhKHYpLmdldERhdGUoKSk/djpYZSh2KTpKcih2KSksKytvO2JyZWFrO2Nhc2UgMToodT0odT11LnNsaWNlKDEsdS5sZW5ndGgtMSkpLnJlcGxhY2UoLyIiL2csJyInKSkmJnUubWF0Y2goL149Ii4qIiQvKSYmKHU9dS5zbGljZSgyLC0xKSksaFtjXVtvKytdPSIi'@;
put 'IT09dT91Om51bGx9aWYoIkVPRCI9PT11KWJyZWFrfX1lbHNlIGhbKytjXT1bXSxvPTA7cmV0dXJuIHMmJnMuc2hlZXRSb3dzJiYoaD1oLnNsaWNlKDAscy5zaGVldFJvd3MpKSxofWZ1bmN0aW9uIHIoaSxzKXtyZXR1cm4gc2EoZnVuY3Rpb24gZShpLHMpe3N3aXRjaChzLnR5cGUpe2Nhc2Ui'@;
put 'YmFzZTY0IjpyZXR1cm4gdChPcihpKSxzKTtjYXNlImJpbmFyeSI6cmV0dXJuIHQoaSxzKTtjYXNlImJ1ZmZlciI6cmV0dXJuIHQoU2UmJkJ1ZmZlci5pc0J1ZmZlcihpKT9pLnRvU3RyaW5nKCJiaW5hcnkiKTp3dChpKSxzKTtjYXNlImFycmF5IjpyZXR1cm4gdChQdChpKSxzKX10aHJvdyBu'@;
put 'ZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrcy50eXBlKX0oaSxzKSxzKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gYShpLHMpe3JldHVybiBGdChyKGkscykscyl9LHRvX3NoZWV0OnIsZnJvbV9zaGVldDpmdW5jdGlvbigpe3ZhciBpPWZ1bmN0aW9uKGMsbyxsLGgseCl7Yy5w'@;
put 'dXNoKG8pLGMucHVzaChsKyIsIitoKSxjLnB1c2goJyInK3gucmVwbGFjZSgvIi9nLCciIicpKyciJyl9LHM9ZnVuY3Rpb24oYyxvLGwsaCl7Yy5wdXNoKG8rIiwiK2wpLGMucHVzaCgxPT1vPyciJytoLnJlcGxhY2UoLyIvZywnIiInKSsnIic6aCl9O3JldHVybiBmdW5jdGlvbihjKXt2YXIg'@;
put 'aCxvPVtdLGw9RGUoY1siIXJlZiJdKSx4PUFycmF5LmlzQXJyYXkoYyk7aShvLCJUQUJMRSIsMCwxLCJzaGVldGpzIiksaShvLCJWRUNUT1JTIiwwLGwuZS5yLWwucy5yKzEsIiIpLGkobywiVFVQTEVTIiwwLGwuZS5jLWwucy5jKzEsIiIpLGkobywiREFUQSIsMCwwLCIiKTtmb3IodmFyIGQ9'@;
put 'bC5zLnI7ZDw9bC5lLnI7KytkKXtzKG8sLTEsMCwiQk9UIik7Zm9yKHZhciB2PWwucy5jO3Y8PWwuZS5jOysrdil7dmFyIHU9Z2Uoe3I6ZCxjOnZ9KTtpZihoPXg/KGNbZF18fFtdKVt2XTpjW3VdKXN3aXRjaChoLnQpe2Nhc2UibiI6dmFyIHA9aC53OyFwJiZudWxsIT1oLnYmJihwPWgudiks'@;
put 'bnVsbD09cD9zKG8sMSwwLGguZiYmIWguRj8iPSIraC5mOiIiKTpzKG8sMCxwLCJWIik7YnJlYWs7Y2FzZSJiIjpzKG8sMCxoLnY/MTowLGgudj8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJzIjpzKG8sMSwwLGlzTmFOKGgudik/aC52Oic9IicraC52KyciJyk7YnJlYWs7Y2FzZSJkIjpo'@;
put 'Lnd8fChoLnc9UnIoaC56fHxwZVsxNF0saXIoWGUoaC52KSkpKSxzKG8sMCxoLncsIlYiKTticmVhaztkZWZhdWx0OnMobywxLDAsIiIpfWVsc2UgcyhvLDEsMCwiIil9fXJldHVybiBzKG8sLTEsMCwiRU9EIiksby5qb2luKCJcclxuIil9fSgpfX0oKSx0Zj1mdW5jdGlvbigpe2Z1bmN0aW9u'@;
put 'IGUoaCl7cmV0dXJuIGgucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlvbiB0KGgpe3JldHVybiBoLnJlcGxhY2UoL1xcL2csIlxcYiIpLnJlcGxhY2UoLzovZywiXFxjIikucmVwbGFjZSgvXG4vZywiXFxuIil9ZnVu'@;
put 'Y3Rpb24gYShoLHgpe3JldHVybiBzYShmdW5jdGlvbiByKGgseCl7Zm9yKHZhciBkPWguc3BsaXQoIlxuIiksdj0tMSx1PS0xLHA9MCxrPVtdO3AhPT1kLmxlbmd0aDsrK3Ape3ZhciBUPWRbcF0udHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09VFswXSl7dmFyIGc9R2UoVFsxXSk7aWYo'@;
put 'ay5sZW5ndGg8PWcucilmb3Iodj1rLmxlbmd0aDt2PD1nLnI7Kyt2KWtbdl18fChrW3ZdPVtdKTtzd2l0Y2godj1nLnIsdT1nLmMsVFsyXSl7Y2FzZSJ0IjprW3ZdW3VdPWUoVFszXSk7YnJlYWs7Y2FzZSJ2IjprW3ZdW3VdPStUWzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgTj1UW1QubGVuZ3Ro'@;
put 'LTFdO2Nhc2UidnRjIjprW3ZdW3VdPSJubCI9PT1UWzNdPyEhK1RbNF06K1RbNF0sInZ0ZiI9PVRbMl0mJihrW3ZdW3VdPVtrW3ZdW3VdLE5dKX19fXJldHVybiB4JiZ4LnNoZWV0Um93cyYmKGs9ay5zbGljZSgwLHguc2hlZXRSb3dzKSksa30oaCx4KSx4KX12YXIgaT1bInNvY2lhbGNhbGM6'@;
put 'dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIikscz1bIi0tU29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiLCJDb250'@;
put 'ZW50LXR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgiXS5qb2luKCJcbiIpKyJcbiIsZj1bIiMgU29jaWFsQ2FsYyBTcHJlYWRzaGVldCBDb250cm9sIFNhdmUiLCJwYXJ0OnNoZWV0Il0uam9pbigiXG4iKSxjPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1'@;
put 'bmN0aW9uIG8oaCl7aWYoIWh8fCFoWyIhcmVmIl0pcmV0dXJuIiI7Zm9yKHZhciB2LHg9W10sZD1bXSx1PSIiLHA9UHIoaFsiIXJlZiJdKSxrPUFycmF5LmlzQXJyYXkoaCksVD1wLnMucjtUPD1wLmUucjsrK1QpZm9yKHZhciBnPXAucy5jO2c8PXAuZS5jOysrZylpZih1PWdlKHtyOlQsYzpn'@;
put 'fSksKHY9az8oaFtUXXx8W10pW2ddOmhbdV0pJiZudWxsIT12LnYmJiJ6IiE9PXYudCl7c3dpdGNoKGQ9WyJjZWxsIix1LCJ0Il0sdi50KXtjYXNlInMiOmNhc2Uic3RyIjpkLnB1c2godCh2LnYpKTticmVhaztjYXNlIm4iOnYuZj8oZFsyXT0idnRmIixkWzNdPSJuIixkWzRdPXYudixkWzVd'@;
put 'PXQodi5mKSk6KGRbMl09InYiLGRbM109di52KTticmVhaztjYXNlImIiOmRbMl09InZ0Iisodi5mPyJmIjoiYyIpLGRbM109Im5sIixkWzRdPXYudj8iMSI6IjAiLGRbNV09dCh2LmZ8fCh2LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBOPWlyKFhlKHYudikpO2RbMl09'@;
put 'InZ0YyIsZFszXT0ibmQiLGRbNF09IiIrTixkWzVdPXYud3x8UnIodi56fHxwZVsxNF0sTik7YnJlYWs7Y2FzZSJlIjpjb250aW51ZX14LnB1c2goZC5qb2luKCI6IikpfXJldHVybiB4LnB1c2goInNoZWV0OmM6IisocC5lLmMtcC5zLmMrMSkrIjpyOiIrKHAuZS5yLXAucy5yKzEpKyI6dHZm'@;
put 'OjEiKSx4LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIikseC5qb2luKCJcbiIpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBuKGgseCl7cmV0dXJuIEZ0KGEoaCx4KSx4KX0sdG9fc2hlZXQ6YSxmcm9tX3NoZWV0OmZ1bmN0aW9uIGwoaCl7cmV0dXJuW2kscyxmLHMsbyhoKSxj'@;
put 'XS5qb2luKCJcbiIpfX19KCksY2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGwsaCx4LGQsdil7di5yYXc/aFt4XVtkXT1sOiIiPT09bHx8KGhbeF1bZF09IlRSVUUiPT09bHx8IkZBTFNFIiE9PWwmJihpc05hTihKcihsKSk/aXNOYU4oYWEobCkuZ2V0RGF0ZSgpKT9sOlhlKGwpOkpyKGwpKSl9'@;
put 'dmFyIHI9ezQ0OiIsIiw5OiJcdCIsNTk6IjsiLDEyNDoifCJ9LGE9ezQ0OjMsOToyLDU5OjEsMTI0OjB9O2Z1bmN0aW9uIG4obCl7Zm9yKHZhciBoPXt9LHg9ITEsZD0wLHY9MDtkPGwubGVuZ3RoOysrZCkzND09KHY9bC5jaGFyQ29kZUF0KGQpKT94PSF4OiF4JiZ2IGluIHImJihoW3ZdPSho'@;
put 'W3ZdfHwwKSsxKTtmb3IoZCBpbiB2PVtdLGgpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGgsZCkmJnYucHVzaChbaFtkXSxkXSk7aWYoIXYubGVuZ3RoKWZvcihkIGluIGg9YSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaCxkKSYmdi5wdXNoKFto'@;
put 'W2RdLGRdKTtyZXR1cm4gdi5zb3J0KGZ1bmN0aW9uKHUscCl7cmV0dXJuIHVbMF0tcFswXXx8YVt1WzFdXS1hW3BbMV1dfSksclt2LnBvcCgpWzFdXXx8NDR9ZnVuY3Rpb24gcyhsLGgpe3JldHVybiFofHwhaC5QUk58fGguRlN8fCJzZXA9Ij09bC5zbGljZSgwLDQpfHxsLmluZGV4T2YoIlx0'@;
put 'Iik+PTB8fGwuaW5kZXhPZigiLCIpPj0wfHxsLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBpKGwsaCl7dmFyIHg9aHx8e30sZD0iIjtudWxsIT16ZSYmbnVsbD09eC5kZW5zZSYmKHguZGVuc2U9emUpO3ZhciB2PXguZGVuc2U/W106e30sdT17czp7YzowLHI6MH0sZTp7YzowLHI6MH19OyJz'@;
put 'ZXA9Ij09bC5zbGljZSgwLDQpPzEzPT1sLmNoYXJDb2RlQXQoNSkmJjEwPT1sLmNoYXJDb2RlQXQoNik/KGQ9bC5jaGFyQXQoNCksbD1sLnNsaWNlKDcpKToxMz09bC5jaGFyQ29kZUF0KDUpfHwxMD09bC5jaGFyQ29kZUF0KDUpPyhkPWwuY2hhckF0KDQpLGw9bC5zbGljZSg2KSk6ZD1uKGwu'@;
put 'c2xpY2UoMCwxMDI0KSk6ZD14JiZ4LkZTP3guRlM6bihsLnNsaWNlKDAsMTAyNCkpO3ZhciBwPTAsaz0wLFQ9MCxnPTAsTj0wLE09ZC5jaGFyQ29kZUF0KDApLEk9ITEseT0wLFA9bC5jaGFyQ29kZUF0KDApO2w9bC5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciBSPW51bGwhPXguZGF0ZU5G'@;
put 'P2Z1bmN0aW9uIG5vKGUpe3ZhciB0PSJudW1iZXIiPT10eXBlb2YgZT9wZVtlXTplO3JldHVybiB0PXQucmVwbGFjZShFaSwiKFxcZCspIiksbmV3IFJlZ0V4cCgiXiIrdCsiJCIpfSh4LmRhdGVORik6bnVsbDtmdW5jdGlvbiBWKCl7dmFyIFg9bC5zbGljZShnLE4pLGI9e307aWYoJyInPT1Y'@;
put 'LmNoYXJBdCgwKSYmJyInPT1YLmNoYXJBdChYLmxlbmd0aC0xKSYmKFg9WC5zbGljZSgxLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpLDA9PT1YLmxlbmd0aCliLnQ9InoiO2Vsc2UgaWYoeC5yYXcpYi50PSJzIixiLnY9WDtlbHNlIGlmKDA9PT1YLnRyaW0oKS5sZW5ndGgpYi50PSJzIixiLnY9'@;
put 'WDtlbHNlIGlmKDYxPT1YLmNoYXJDb2RlQXQoMCkpMzQ9PVguY2hhckNvZGVBdCgxKSYmMzQ9PVguY2hhckNvZGVBdChYLmxlbmd0aC0xKT8oYi50PSJzIixiLnY9WC5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIFJ4KGUpe3JldHVybiAxIT1lLmxlbmd0aH0oWCk/'@;
put 'KGIudD0ibiIsYi5mPVguc2xpY2UoMSkpOihiLnQ9InMiLGIudj1YKTtlbHNlIGlmKCJUUlVFIj09WCliLnQ9ImIiLGIudj0hMDtlbHNlIGlmKCJGQUxTRSI9PVgpYi50PSJiIixiLnY9ITE7ZWxzZSBpZihpc05hTihUPUpyKFgpKSlpZighaXNOYU4oYWEoWCkuZ2V0RGF0ZSgpKXx8UiYmWC5t'@;
put 'YXRjaChSKSl7Yi56PXguZGF0ZU5GfHxwZVsxNF07dmFyIGVlPTA7UiYmWC5tYXRjaChSKSYmKFg9ZnVuY3Rpb24gaW8oZSx0LHIpe3ZhciBhPS0xLG49LTEsaT0tMSxzPS0xLGY9LTEsYz0tMTsodC5tYXRjaChFaSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGgseCl7dmFyIGQ9cGFyc2VJbnQo'@;
put 'clt4KzFdLDEwKTtzd2l0Y2goaC50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjphPWQ7YnJlYWs7Y2FzZSJkIjppPWQ7YnJlYWs7Y2FzZSJoIjpzPWQ7YnJlYWs7Y2FzZSJzIjpjPWQ7YnJlYWs7Y2FzZSJtIjpzPj0wP2Y9ZDpuPWR9fSksYz49MCYmLTE9PWYmJm4+PTAmJihmPW4s'@;
put 'bj0tMSk7dmFyIG89KCIiKyhhPj0wP2E6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSkuc2xpY2UoLTQpKyItIisoIjAwIisobj49MT9uOjEpKS5zbGljZSgtMikrIi0iKygiMDAiKyhpPj0xP2k6MSkpLnNsaWNlKC0yKTs3PT1vLmxlbmd0aCYmKG89IjAiK28pLDg9PW8ubGVuZ3RoJiYobz0i'@;
put 'MjAiK28pO3ZhciBsPSgiMDAiKyhzPj0wP3M6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIrKGY+PTA/ZjowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoYz49MD9jOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PXMmJi0xPT1mJiYtMT09Yz9vOi0xPT1hJiYtMT09biYmLTE9PWk/bDpvKyJUIitsfSgw'@;
put 'LHguZGF0ZU5GLFgubWF0Y2goUil8fFtdKSxlZT0xKSx4LmNlbGxEYXRlcz8oYi50PSJkIixiLnY9WGUoWCxlZSkpOihiLnQ9Im4iLGIudj1pcihYZShYLGVlKSkpLCExIT09eC5jZWxsVGV4dCYmKGIudz1ScihiLnosYi52IGluc3RhbmNlb2YgRGF0ZT9pcihiLnYpOmIudikpLHguY2VsbE5G'@;
put 'fHxkZWxldGUgYi56fWVsc2UgYi50PSJzIixiLnY9WDtlbHNlIGIudD0ibiIsITEhPT14LmNlbGxUZXh0JiYoYi53PVgpLGIudj1UO2lmKCJ6Ij09Yi50fHwoeC5kZW5zZT8odltwXXx8KHZbcF09W10pLHZbcF1ba109Yik6dltnZSh7YzprLHI6cH0pXT1iKSxQPWwuY2hhckNvZGVBdChnPU4r'@;
put 'MSksdS5lLmM8ayYmKHUuZS5jPWspLHUuZS5yPHAmJih1LmUucj1wKSx5PT1NKSsraztlbHNlIGlmKGs9MCwrK3AseC5zaGVldFJvd3MmJnguc2hlZXRSb3dzPD1wKXJldHVybiEwfWU6Zm9yKDtOPGwubGVuZ3RoOysrTilzd2l0Y2goeT1sLmNoYXJDb2RlQXQoTikpe2Nhc2UgMzQ6MzQ9PT1Q'@;
put 'JiYoST0hSSk7YnJlYWs7Y2FzZSBNOmNhc2UgMTA6Y2FzZSAxMzppZighSSYmVigpKWJyZWFrIGV9cmV0dXJuIE4tZz4wJiZWKCksdlsiIXJlZiJdPXdlKHUpLHZ9KGwsaCk6c2EoZnVuY3Rpb24gdChsLGgpe3ZhciB4PWh8fHt9LGQ9W107aWYoIWx8fDA9PT1sLmxlbmd0aClyZXR1cm4gZDtm'@;
put 'b3IodmFyIHY9bC5zcGxpdCgvW1xyXG5dLyksdT12Lmxlbmd0aC0xO3U+PTAmJjA9PT12W3VdLmxlbmd0aDspLS11O2Zvcih2YXIgcD0xMCxrPTAsVD0wO1Q8PXU7KytUKS0xPT0oaz12W1RdLmluZGV4T2YoIiAiKSk/az12W1RdLmxlbmd0aDprKysscD1NYXRoLm1heChwLGspO2ZvcihUPTA7'@;
put 'VDw9dTsrK1Qpe2RbVF09W107dmFyIGc9MDtmb3IoZSh2W1RdLnNsaWNlKDAscCkudHJpbSgpLGQsVCxnLHgpLGc9MTtnPD0odltUXS5sZW5ndGgtcCkvMTArMTsrK2cpZSh2W1RdLnNsaWNlKHArMTAqKGctMSkscCsxMCpnKS50cmltKCksZCxULGcseCl9cmV0dXJuIHguc2hlZXRSb3dzJiYo'@;
put 'ZD1kLnNsaWNlKDAseC5zaGVldFJvd3MpKSxkfShsLGgpLGgpfWZ1bmN0aW9uIGYobCxoKXt2YXIgeD0iIixkPSJzdHJpbmciPT1oLnR5cGU/WzAsMCwwLDBdOktuKGwsaCk7c3dpdGNoKGgudHlwZSl7Y2FzZSJiYXNlNjQiOng9T3IobCk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5n'@;
put 'Ijp4PWw7YnJlYWs7Y2FzZSJidWZmZXIiOng9NjUwMDE9PWguY29kZXBhZ2U/bC50b1N0cmluZygidXRmOCIpOmguY29kZXBhZ2UmJnR5cGVvZiBPZTwidSI/T2UudXRpbHMuZGVjb2RlKGguY29kZXBhZ2UsbCk6U2UmJkJ1ZmZlci5pc0J1ZmZlcihsKT9sLnRvU3RyaW5nKCJiaW5hcnkiKTp3'@;
put 'dChsKTticmVhaztjYXNlImFycmF5Ijp4PVB0KGwpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2gudHlwZSl9cmV0dXJuIDIzOT09ZFswXSYmMTg3PT1kWzFdJiYxOTE9PWRbMl0/eD1CZSh4LnNsaWNlKDMpKToic3RyaW5nIiE9aC50eXBlJiYi'@;
put 'YnVmZmVyIiE9aC50eXBlJiY2NTAwMT09aC5jb2RlcGFnZT94PUJlKHgpOiJiaW5hcnkiPT1oLnR5cGUmJnR5cGVvZiBPZTwidSImJmguY29kZXBhZ2UmJih4PU9lLnV0aWxzLmRlY29kZShoLmNvZGVwYWdlLE9lLnV0aWxzLmVuY29kZSgyODU5MSx4KSkpLCJzb2NpYWxjYWxjOnZlcnNpb246'@;
put 'Ij09eC5zbGljZSgwLDE5KT90Zi50b19zaGVldCgic3RyaW5nIj09aC50eXBlP3g6QmUoeCksaCk6cyh4LGgpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBjKGwsaCl7cmV0dXJuIEZ0KGYobCxoKSxoKX0sdG9fc2hlZXQ6Zixmcm9tX3NoZWV0OmZ1bmN0aW9uIG8obCl7Zm9yKHZhciBk'@;
put 'LGg9W10seD1EZShsWyIhcmVmIl0pLHY9QXJyYXkuaXNBcnJheShsKSx1PXgucy5yO3U8PXguZS5yOysrdSl7Zm9yKHZhciBwPVtdLGs9eC5zLmM7azw9eC5lLmM7KytrKXt2YXIgVD1nZSh7cjp1LGM6a30pO2lmKChkPXY/KGxbdV18fFtdKVtrXTpsW1RdKSYmbnVsbCE9ZC52KXtmb3IodmFy'@;
put 'IGc9KGQud3x8KGF0KGQpLGQudyl8fCIiKS5zbGljZSgwLDEwKTtnLmxlbmd0aDwxMDspZys9IiAiO3AucHVzaChnKygwPT09az8iICI6IiIpKX1lbHNlIHAucHVzaCgiICAgICAgICAgICIpfWgucHVzaChwLmpvaW4oIiIpKX1yZXR1cm4gaC5qb2luKCJcbiIpfX19KCksanQ9ZnVuY3Rpb24o'@;
put 'KXtmdW5jdGlvbiBlKEMsVSxPKXtpZihDKXtocihDLEMubHx8MCk7Zm9yKHZhciBEPU8uRW51bXx8eGU7Qy5sPEMubGVuZ3RoOyl7dmFyIGo9Qy5yZWFkX3NoaWZ0KDIpLHNlPURbal18fERbNjU1MzVdLFo9Qy5yZWFkX3NoaWZ0KDIpLFE9Qy5sK1osWT1zZS5mJiZzZS5mKEMsWixPKTtpZihD'@;
put 'Lmw9USxVKFksc2UsaikpcmV0dXJufX19ZnVuY3Rpb24gcihDLFUpe2lmKCFDKXJldHVybiBDO3ZhciBPPVV8fHt9O251bGwhPXplJiZudWxsPT1PLmRlbnNlJiYoTy5kZW5zZT16ZSk7dmFyIEQ9Ty5kZW5zZT9bXTp7fSxqPSJTaGVldDEiLHNlPSIiLFo9MCxRPXt9LFk9W10sRWU9W10sQT17'@;
put 'czp7cjowLGM6MH0sZTp7cjowLGM6MH19LFBlPU8uc2hlZXRSb3dzfHwwO2lmKDA9PUNbMl0mJig4PT1DWzNdfHw5PT1DWzNdKSYmQy5sZW5ndGg+PTE2JiY1PT1DWzE0XSYmMTA4PT09Q1sxNV0pdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBXb3JrcyAzIGZvciBNYWMgZmlsZSIpO2lm'@;
put 'KDI9PUNbMl0pTy5FbnVtPXhlLGUoQyxmdW5jdGlvbihvZSxxZSxqcil7c3dpdGNoKGpyKXtjYXNlIDA6Ty52ZXJzPW9lLG9lPj00MDk2JiYoTy5xcHJvPSEwKTticmVhaztjYXNlIDY6QT1vZTticmVhaztjYXNlIDIwNDpvZSYmKHNlPW9lKTticmVhaztjYXNlIDIyMjpzZT1vZTticmVhaztj'@;
put 'YXNlIDE1OmNhc2UgNTE6Ty5xcHJvfHwob2VbMV0udj1vZVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09anImJiEoMTEyJn5vZVsyXSkmJigxNSZvZVsyXSk+MSYmKDE1Jm9lWzJdKTwxNSYmKG9lWzFdLno9Ty5kYXRlTkZ8fHBlWzE0XSxPLmNlbGxEYXRlcyYm'@;
put 'KG9lWzFdLnQ9ImQiLG9lWzFdLnY9bzAob2VbMV0udikpKSxPLnFwcm8mJm9lWzNdPlomJihEWyIhcmVmIl09d2UoQSksUVtqXT1ELFkucHVzaChqKSxEPU8uZGVuc2U/W106e30sQT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LFo9b2VbM10saj1zZXx8IlNoZWV0IisoWisxKSxzZT0iIik7'@;
put 'dmFyIGZ0PU8uZGVuc2U/KERbb2VbMF0ucl18fFtdKVtvZVswXS5jXTpEW2dlKG9lWzBdKV07aWYoZnQpe2Z0LnQ9b2VbMV0udCxmdC52PW9lWzFdLnYsbnVsbCE9b2VbMV0ueiYmKGZ0Lno9b2VbMV0ueiksbnVsbCE9b2VbMV0uZiYmKGZ0LmY9b2VbMV0uZik7YnJlYWt9Ty5kZW5zZT8oRFtv'@;
put 'ZVswXS5yXXx8KERbb2VbMF0ucl09W10pLERbb2VbMF0ucl1bb2VbMF0uY109b2VbMV0pOkRbZ2Uob2VbMF0pXT1vZVsxXX19LE8pO2Vsc2V7aWYoMjYhPUNbMl0mJjE0IT1DWzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK0NbMl0pO08uRW51bT1LLDE0PT1D'@;
put 'WzJdJiYoTy5xcHJvPSEwLEMubD0wKSxlKEMsZnVuY3Rpb24ob2UscWUsanIpe3N3aXRjaChqcil7Y2FzZSAyMDQ6aj1vZTticmVhaztjYXNlIDIyOm9lWzFdLnY9b2VbMV0udi5zbGljZSgxKTtjYXNlIDIzOmNhc2UgMjQ6Y2FzZSAyNTpjYXNlIDM3OmNhc2UgMzk6Y2FzZSA0MDppZihvZVsz'@;
put 'XT5aJiYoRFsiIXJlZiJdPXdlKEEpLFFbal09RCxZLnB1c2goaiksRD1PLmRlbnNlP1tdOnt9LEE9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxqPSJTaGVldCIrKChaPW9lWzNdKSsxKSksUGU+MCYmb2VbMF0ucj49UGUpYnJlYWs7Ty5kZW5zZT8oRFtvZVswXS5yXXx8KERbb2VbMF0ucl09'@;
put 'W10pLERbb2VbMF0ucl1bb2VbMF0uY109b2VbMV0pOkRbZ2Uob2VbMF0pXT1vZVsxXSxBLmUuYzxvZVswXS5jJiYoQS5lLmM9b2VbMF0uYyksQS5lLnI8b2VbMF0uciYmKEEuZS5yPW9lWzBdLnIpO2JyZWFrO2Nhc2UgMjc6b2VbMTRlM10mJihFZVtvZVsxNGUzXVswXV09b2VbMTRlM11bMV0p'@;
put 'O2JyZWFrO2Nhc2UgMTUzNzpFZVtvZVswXV09b2VbMV0sb2VbMF09PVomJihqPW9lWzFdKX19LE8pfWlmKERbIiFyZWYiXT13ZShBKSxRW3NlfHxqXT1ELFkucHVzaChzZXx8aiksIUVlLmxlbmd0aClyZXR1cm57U2hlZXROYW1lczpZLFNoZWV0czpRfTtmb3IodmFyIEFlPXt9LExlPVtdLENl'@;
put 'PTA7Q2U8RWUubGVuZ3RoOysrQ2UpUVtZW0NlXV0/KExlLnB1c2goRWVbQ2VdfHxZW0NlXSksQWVbRWVbQ2VdXT1RW0VlW0NlXV18fFFbWVtDZV1dKTooTGUucHVzaChFZVtDZV0pLEFlW0VlW0NlXV09eyIhcmVmIjoiQTEifSk7cmV0dXJue1NoZWV0TmFtZXM6TGUsU2hlZXRzOkFlfX1mdW5j'@;
put 'dGlvbiBvKEMsVSxPKXt2YXIgRD1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDAsMF07cmV0dXJuIE8ucXBybyYmMjA3NjghPU8udmVycz8oRFswXS5jPUMucmVhZF9zaGlmdCgxKSxEWzNdPUMucmVhZF9zaGlmdCgxKSxEWzBdLnI9Qy5yZWFkX3NoaWZ0KDIpLEMubCs9Mik6KERbMl09Qy5yZWFk'@;
put 'X3NoaWZ0KDEpLERbMF0uYz1DLnJlYWRfc2hpZnQoMiksRFswXS5yPUMucmVhZF9zaGlmdCgyKSksRH1mdW5jdGlvbiBsKEMsVSxPKXt2YXIgRD1DLmwrVSxqPW8oQywwLE8pO2lmKGpbMV0udD0icyIsMjA3Njg9PU8udmVycyl7Qy5sKys7dmFyIHNlPUMucmVhZF9zaGlmdCgxKTtyZXR1cm4g'@;
put 'alsxXS52PUMucmVhZF9zaGlmdChzZSwidXRmOCIpLGp9cmV0dXJuIE8ucXBybyYmQy5sKyssalsxXS52PUMucmVhZF9zaGlmdChELUMubCwiY3N0ciIpLGp9ZnVuY3Rpb24gaChDLFUsTyl7dmFyIEQ9Ryg3K08ubGVuZ3RoKTtELndyaXRlX3NoaWZ0KDEsMjU1KSxELndyaXRlX3NoaWZ0KDIs'@;
put 'VSksRC53cml0ZV9zaGlmdCgyLEMpLEQud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBqPTA7ajxELmxlbmd0aDsrK2ope3ZhciBzZT1PLmNoYXJDb2RlQXQoaik7RC53cml0ZV9zaGlmdCgxLHNlPj0xMjg/OTU6c2UpfXJldHVybiBELndyaXRlX3NoaWZ0KDEsMCksRH1mdW5jdGlvbiBkKEMs'@;
put 'VSxPKXt2YXIgRD1HKDcpO3JldHVybiBELndyaXRlX3NoaWZ0KDEsMjU1KSxELndyaXRlX3NoaWZ0KDIsVSksRC53cml0ZV9zaGlmdCgyLEMpLEQud3JpdGVfc2hpZnQoMixPLCJpIiksRH1mdW5jdGlvbiB1KEMsVSxPKXt2YXIgRD1HKDEzKTtyZXR1cm4gRC53cml0ZV9zaGlmdCgxLDI1NSks'@;
put 'RC53cml0ZV9zaGlmdCgyLFUpLEQud3JpdGVfc2hpZnQoMixDKSxELndyaXRlX3NoaWZ0KDgsTywiZiIpLER9ZnVuY3Rpb24gayhDLFUsTyl7dmFyIEQ9MzI3NjgmVTtyZXR1cm4gVT0oRD9DOjApKygoVSY9LTMyNzY5KT49ODE5Mj9VLTE2Mzg0OlUpLChEPyIiOiIkIikrKE8/SGUoVSk6S2Uo'@;
put 'VSkpfXZhciBUPXs1MTpbIkZBTFNFIiwwXSw1MjpbIlRSVUUiLDBdLDcwOlsiTEVOIiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0OlsiTUFYQSIsNjldLDExMTpbIlQiLDFdfSxnPVsiIiwiIiwiIiwiIiwiIiwi'@;
put 'IiwiIiwiIiwiIiwiKyIsIi0iLCIqIiwiLyIsIl4iLCI9IiwiPD4iLCI8PSIsIj49IiwiPCIsIj4iLCIiLCIiLCIiLCIiLCImIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl07ZnVuY3Rpb24gTShDKXt2YXIgVT1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiBVWzBdLnI9Qy5yZWFkX3No'@;
put 'aWZ0KDIpLFVbM109Q1tDLmwrK10sVVswXS5jPUNbQy5sKytdLFV9ZnVuY3Rpb24geShDLFUsTyxEKXt2YXIgaj1HKDYrRC5sZW5ndGgpO2oud3JpdGVfc2hpZnQoMixDKSxqLndyaXRlX3NoaWZ0KDEsTyksai53cml0ZV9zaGlmdCgxLFUpLGoud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBz'@;
put 'ZT0wO3NlPEQubGVuZ3RoOysrc2Upe3ZhciBaPUQuY2hhckNvZGVBdChzZSk7ai53cml0ZV9zaGlmdCgxLFo+PTEyOD85NTpaKX1yZXR1cm4gai53cml0ZV9zaGlmdCgxLDApLGp9ZnVuY3Rpb24gUihDLFUpe3ZhciBPPU0oQyksRD1DLnJlYWRfc2hpZnQoNCksaj1DLnJlYWRfc2hpZnQoNCks'@;
put 'c2U9Qy5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1zZSlyZXR1cm4gMD09PUQmJjMyMjEyMjU0NzI9PT1qPyhPWzFdLnQ9ImUiLE9bMV0udj0xNSk6MD09PUQmJjM0ODk2NjA5Mjg9PT1qPyhPWzFdLnQ9ImUiLE9bMV0udj00Mik6T1sxXS52PTAsTzt2YXIgWj0zMjc2OCZzZTtyZXR1cm4gc2U9'@;
put 'KDMyNzY3JnNlKS0xNjQ0NixPWzFdLnY9KDEtMipaKSooaipNYXRoLnBvdygyLHNlKzMyKStEKk1hdGgucG93KDIsc2UpKSxPfWZ1bmN0aW9uIFYoQyxVLE8sRCl7dmFyIGo9RygxNCk7aWYoai53cml0ZV9zaGlmdCgyLEMpLGoud3JpdGVfc2hpZnQoMSxPKSxqLndyaXRlX3NoaWZ0KDEsVSks'@;
put 'MD09RClyZXR1cm4gai53cml0ZV9zaGlmdCg0LDApLGoud3JpdGVfc2hpZnQoNCwwKSxqLndyaXRlX3NoaWZ0KDIsNjU1MzUpLGo7dmFyIHNlPTAsWj0wLFk9MDtyZXR1cm4gRDwwJiYoc2U9MSxEPS1EKSxaPTB8TWF0aC5sb2cyKEQpLDIxNDc0ODM2NDgmKFk9KEQvPU1hdGgucG93KDIsWi0z'@;
put 'MSkpPj4+MCl8fCgrK1osWT0oRC89Mik+Pj4wKSxELT1ZLFl8PTIxNDc0ODM2NDgsWT4+Pj0wLEQqPU1hdGgucG93KDIsMzIpLGoud3JpdGVfc2hpZnQoNCxEPj4+MCksai53cml0ZV9zaGlmdCg0LFkpLGoud3JpdGVfc2hpZnQoMixaKz0xNjM4Mysoc2U/MzI3Njg6MCkpLGp9ZnVuY3Rpb24g'@;
put 'ZWUoQyxVKXt2YXIgTz1NKEMpLEQ9Qy5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gT1sxXS52PUQsT31mdW5jdGlvbiByZShDLFUpe3JldHVybiAwPT1DW0MubCtVLTFdP0MucmVhZF9zaGlmdChVLCJjc3RyIik6IiJ9ZnVuY3Rpb24gY2UoQyxVKXt2YXIgTz1HKDUrQy5sZW5ndGgpO08ud3Jp'@;
put 'dGVfc2hpZnQoMiwxNGUzKSxPLndyaXRlX3NoaWZ0KDIsVSk7Zm9yKHZhciBEPTA7RDxDLmxlbmd0aDsrK0Qpe3ZhciBqPUMuY2hhckNvZGVBdChEKTtPW08ubCsrXT1qPjEyNz85NTpqfXJldHVybiBPW08ubCsrXT0wLE99dmFyIHhlPXswOntuOiJCT0YiLGY6dHJ9LDE6e246IkVPRiJ9LDI6'@;
put 'e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BMSVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gZihDLFUsTyl7dmFyIEQ9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTtyZXR1cm4gOD09VSYmTy5xcHJvPyhELnMuYz1DLnJlYWRfc2hpZnQo'@;
put 'MSksQy5sKyssRC5zLnI9Qy5yZWFkX3NoaWZ0KDIpLEQuZS5jPUMucmVhZF9zaGlmdCgxKSxDLmwrKyxELmUucj1DLnJlYWRfc2hpZnQoMiksRCk6KEQucy5jPUMucmVhZF9zaGlmdCgyKSxELnMucj1DLnJlYWRfc2hpZnQoMiksMTI9PVUmJk8ucXBybyYmKEMubCs9MiksRC5lLmM9Qy5yZWFk'@;
put 'X3NoaWZ0KDIpLEQuZS5yPUMucmVhZF9zaGlmdCgyKSwxMj09VSYmTy5xcHJvJiYoQy5sKz0yKSw2NTUzNT09RC5zLmMmJihELnMuYz1ELmUuYz1ELnMucj1ELmUucj0wKSxEKX19LDc6e246IldJTkRPVzEifSw4OntuOiJDT0xXMSJ9LDk6e246IldJTlRXTyJ9LDEwOntuOiJDT0xXMiJ9LDEx'@;
put 'OntuOiJOQU1FIn0sMTI6e246IkJMQU5LIn0sMTM6e246IklOVEVHRVIiLGY6ZnVuY3Rpb24geChDLFUsTyl7dmFyIEQ9byhDLDAsTyk7cmV0dXJuIERbMV0udj1DLnJlYWRfc2hpZnQoMiwiaSIpLER9fSwxNDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIHYoQyxVLE8pe3ZhciBEPW8oQywwLE8p'@;
put 'O3JldHVybiBEWzFdLnY9Qy5yZWFkX3NoaWZ0KDgsImYiKSxEfX0sMTU6e246IkxBQkVMIixmOmx9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0aW9uIHAoQyxVLE8pe3ZhciBEPUMubCtVLGo9byhDLDAsTyk7aWYoalsxXS52PUMucmVhZF9zaGlmdCg4LCJmIiksTy5xcHJvKUMubD1EO2Vsc2V7'@;
put 'dmFyIHNlPUMucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gTihDLFUpe2hyKEMsMCk7Zm9yKHZhciBPPVtdLEQ9MCxqPSIiLHNlPSIiLFo9IiIsUT0iIjtDLmw8Qy5sZW5ndGg7KXt2YXIgWT1DW0MubCsrXTtzd2l0Y2goWSl7Y2FzZSAwOk8ucHVzaChDLnJlYWRfc2hpZnQoOCwiZiIpKTticmVh'@;
put 'aztjYXNlIDE6c2U9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxqPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSksTy5wdXNoKHNlK2opO2JyZWFrO2Nhc2UgMjp2YXIgRWU9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxBPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSk7'@;
put 'c2U9ayhVWzBdLmMsQy5yZWFkX3NoaWZ0KDIpLCEwKSxqPWsoVVswXS5yLEMucmVhZF9zaGlmdCgyKSwhMSksTy5wdXNoKEVlK0ErIjoiK3NlK2opO2JyZWFrO2Nhc2UgMzppZihDLmw8Qy5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVu'@;
put 'ZCIpO2JyZWFrO2Nhc2UgNDpPLnB1c2goIigiK08ucG9wKCkrIikiKTticmVhaztjYXNlIDU6Ty5wdXNoKEMucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgUGU9IiI7WT1DW0MubCsrXTspUGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoWSk7Ty5wdXNoKCciJytQZS5yZXBsYWNl'@;
put 'KC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6Ty5wdXNoKCItIitPLnBvcCgpKTticmVhaztjYXNlIDIzOk8ucHVzaCgiKyIrTy5wb3AoKSk7YnJlYWs7Y2FzZSAyMjpPLnB1c2goIk5PVCgiK08ucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6UT1PLnBvcCgpLFo9Ty5wb3Ao'@;
put 'KSxPLnB1c2goWyJBTkQiLCJPUiJdW1ktMjBdKyIoIitaKyIsIitRKyIpIik7YnJlYWs7ZGVmYXVsdDppZihZPDMyJiZnW1ldKVE9Ty5wb3AoKSxaPU8ucG9wKCksTy5wdXNoKForZ1tZXStRKTtlbHNle2lmKCFUW1ldKXJldHVybiBZPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9w'@;
put 'Y29kZSAiK1kudG9TdHJpbmcoMTYpKTpZPD0yND9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgb3AgIitZLnRvU3RyaW5nKDE2KSk6WTw9MzA/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIrWS50b1N0cmluZygxNikpOlk8PTExNT9jb25zb2xlLmVycm9yKCJXSzEg'@;
put 'dW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIrWS50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bjb2RlICIrWS50b1N0cmluZygxNikpO2lmKDY5PT0oRD1UW1ldWzFdKSYmKEQ9Q1tDLmwrK10pLEQ+Ty5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29s'@;
put 'ZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4IitZLnRvU3RyaW5nKDE2KSsiOnwiK08uam9pbigifCIpKyJ8Iik7dmFyIEFlPU8uc2xpY2UoLUQpO08ubGVuZ3RoLT1ELE8ucHVzaChUW1ldWzBdKyIoIitBZS5qb2luKCIsIikrIikiKX19fTE9PU8ubGVuZ3RoP1VbMV0uZj0iIitP'@;
put 'WzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8IitPLmpvaW4oInwiKSsifCIpfSkoQy5zbGljZShDLmwsQy5sK3NlKSxqKSxDLmwrPXNlfXJldHVybiBqfX0sMjQ6e246IlRBQkxFIn0sMjU6e246Ik9SQU5HRSJ9LDI2OntuOiJQUkFOR0UifSwyNzp7bjoiU1JBTkdF'@;
put 'In0sMjg6e246IkZSQU5HRSJ9LDI5OntuOiJLUkFOR0UxIn0sMzI6e246IkhSQU5HRSJ9LDM1OntuOiJLUkFOR0UyIn0sMzY6e246IlBST1RFQyJ9LDM3OntuOiJGT09URVIifSwzODp7bjoiSEVBREVSIn0sMzk6e246IlNFVFVQIn0sNDA6e246Ik1BUkdJTlMifSw0MTp7bjoiTEFCRUxGTVQi'@;
put 'fSw0Mjp7bjoiVElUTEVTIn0sNDM6e246IlNIRUVUSlMifSw0NTp7bjoiR1JBUEgifSw0Njp7bjoiTkdSQVBIIn0sNDc6e246IkNBTENDT1VOVCJ9LDQ4OntuOiJVTkZPUk1BVFRFRCJ9LDQ5OntuOiJDVVJTT1JXMTIifSw1MDp7bjoiV0lORE9XIn0sNTE6e246IlNUUklORyIsZjpsfSw1NTp7'@;
put 'bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0sNjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0s'@;
put 'Njg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIifSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9'@;
put 'LDEwNTp7bjoiTVJBTkdFUz8/In0sMjA0OntuOiJTSEVFVE5BTUVDUyIsZjpyZX0sMjIyOntuOiJTSEVFVE5BTUVMUCIsZjpmdW5jdGlvbiBkZShDLFUpe3ZhciBPPUNbQy5sKytdO08+VS0xJiYoTz1VLTEpO2Zvcih2YXIgRD0iIjtELmxlbmd0aDxPOylEKz1TdHJpbmcuZnJvbUNoYXJDb2Rl'@;
put 'KENbQy5sKytdKTtyZXR1cm4gRH19LDY1NTM1OntuOiIifX0sSz17MDp7bjoiQk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xV'@;
put 'TU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5HRSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlO'@;
put 'In0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIEkoQyxVKXt2YXIgTz1NKEMpO3JldHVybiBPWzFd'@;
put 'LnQ9InMiLE9bMV0udj1DLnJlYWRfc2hpZnQoVS00LCJjc3RyIiksT319LDIzOntuOiJOVU1CRVIxNyIsZjpSfSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gUChDLFUpe3ZhciBPPU0oQyk7T1sxXS52PUMucmVhZF9zaGlmdCgyKTt2YXIgRD1PWzFdLnY+PjE7aWYoMSZPWzFdLnYpc3dp'@;
put 'dGNoKDcmRCl7Y2FzZSAwOkQ9NWUzKihEPj4zKTticmVhaztjYXNlIDE6RD01MDAqKEQ+PjMpO2JyZWFrO2Nhc2UgMjpEPShEPj4zKS8yMDticmVhaztjYXNlIDM6RD0oRD4+MykvMjAwO2JyZWFrO2Nhc2UgNDpEPShEPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OkQ9KEQ+PjMpLzJlNDticmVhaztj'@;
put 'YXNlIDY6RD0oRD4+MykvMTY7YnJlYWs7Y2FzZSA3OkQ9KEQ+PjMpLzY0fXJldHVybiBPWzFdLnY9RCxPfX0sMjU6e246IkZPUk1VTEExOSIsZjpmdW5jdGlvbiBYKEMsVSl7dmFyIE89UihDKTtyZXR1cm4gQy5sKz1VLTE0LE99fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQi'@;
put 'LGY6ZnVuY3Rpb24gRmUoQyxVKXtmb3IodmFyIE89e30sRD1DLmwrVTtDLmw8RDspe3ZhciBqPUMucmVhZF9zaGlmdCgyKTtpZigxNGUzPT1qKXtmb3IoT1tqXT1bMCwiIl0sT1tqXVswXT1DLnJlYWRfc2hpZnQoMik7Q1tDLmxdOylPW2pdWzFdKz1TdHJpbmcuZnJvbUNoYXJDb2RlKENbQy5s'@;
put 'XSksQy5sKys7Qy5sKyt9fXJldHVybiBPfX0sMjg6e246IkRUTEFCRUxNSVNDIn0sMjk6e246IkRUTEFCRUxDRUxMIn0sMzA6e246IkdSQVBIV0lORE9XIn0sMzE6e246IkNQQSJ9LDMyOntuOiJMUExBVVRPIn0sMzM6e246IlFVRVJZIn0sMzQ6e246IkhJRERFTlNIRUVUIn0sMzU6e246Ij8/'@;
put 'In0sMzc6e246Ik5VTUJFUjI1IixmOmZ1bmN0aW9uIGIoQyxVKXt2YXIgTz1NKEMpLEQ9Qy5yZWFkX3NoaWZ0KDQpO3JldHVybiBPWzFdLnY9RD4+NixPfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOmVlfSw0MDp7bjoiRk9STVVMQTI4IixmOmZ1bmN0aW9uIGxlKEMsVSl7dmFy'@;
put 'IE89ZWUoQyk7cmV0dXJuIEMubCs9VS0xMCxPfX0sMTQyOntuOiI/PyJ9LDE0Nzp7bjoiPz8ifSwxNTA6e246Ij8/In0sMTUxOntuOiI/PyJ9LDE1Mjp7bjoiPz8ifSwxNTM6e246Ij8/In0sMTU0OntuOiI/PyJ9LDE1NTp7bjoiPz8ifSwxNTY6e246Ij8/In0sMTYzOntuOiI/PyJ9LDE3NDp7'@;
put 'bjoiPz8ifSwxNzU6e246Ij8/In0sMTc2OntuOiI/PyJ9LDE3Nzp7bjoiPz8ifSwxODQ6e246Ij8/In0sMTg1OntuOiI/PyJ9LDE4Njp7bjoiPz8ifSwxODc6e246Ij8/In0sMTg4OntuOiI/PyJ9LDE5NTp7bjoiPz8ifSwyMDE6e246Ij8/In0sMjA0OntuOiJTSEVFVE5BTUVDUyIsZjpyZX0s'@;
put 'MjA1OntuOiI/PyJ9LDIwNjp7bjoiPz8ifSwyMDc6e246Ij8/In0sMjA4OntuOiI/PyJ9LDI1Njp7bjoiPz8ifSwyNTk6e246Ij8/In0sMjYwOntuOiI/PyJ9LDI2MTp7bjoiPz8ifSwyNjI6e246Ij8/In0sMjYzOntuOiI/PyJ9LDI2NTp7bjoiPz8ifSwyNjY6e246Ij8/In0sMjY3OntuOiI/'@;
put 'PyJ9LDI2ODp7bjoiPz8ifSwyNzA6e246Ij8/In0sMjcxOntuOiI/PyJ9LDM4NDp7bjoiPz8ifSwzODk6e246Ij8/In0sMzkwOntuOiI/PyJ9LDM5Mzp7bjoiPz8ifSwzOTY6e246Ij8/In0sNTEyOntuOiI/PyJ9LDUxNDp7bjoiPz8ifSw1MTM6e246Ij8/In0sNTE2OntuOiI/PyJ9LDUxNzp7'@;
put 'bjoiPz8ifSw2NDA6e246Ij8/In0sNjQxOntuOiI/PyJ9LDY0Mjp7bjoiPz8ifSw2NDM6e246Ij8/In0sNjQ0OntuOiI/PyJ9LDY0NTp7bjoiPz8ifSw2NDY6e246Ij8/In0sNjQ3OntuOiI/PyJ9LDY0ODp7bjoiPz8ifSw2NTg6e246Ij8/In0sNjU5OntuOiI/PyJ9LDY2MDp7bjoiPz8ifSw2'@;
put 'NjE6e246Ij8/In0sNjYyOntuOiI/PyJ9LDY2NTp7bjoiPz8ifSw2NjY6e246Ij8/In0sNzY4OntuOiI/PyJ9LDc3Mjp7bjoiPz8ifSwxNTM3OntuOiJTSEVFVElORk9RUCIsZjpmdW5jdGlvbiB1ZShDLFUsTyl7aWYoTy5xcHJvJiYhKFU8MjEpKXt2YXIgRD1DLnJlYWRfc2hpZnQoMSk7cmV0'@;
put 'dXJuIEMubCs9MTcsQy5sKz0xLEMubCs9MixbRCxDLnJlYWRfc2hpZnQoVS0yMSwiY3N0ciIpXX19fSwxNjAwOntuOiI/PyJ9LDE2MDI6e246Ij8/In0sMTc5Mzp7bjoiPz8ifSwxNzk0OntuOiI/PyJ9LDE3OTU6e246Ij8/In0sMTc5Njp7bjoiPz8ifSwxOTIwOntuOiI/PyJ9LDIwNDg6e246'@;
put 'Ij8/In0sMjA0OTp7bjoiPz8ifSwyMDUyOntuOiI/PyJ9LDI2ODg6e246Ij8/In0sMTA5OTg6e246Ij8/In0sMTI4NDk6e246Ij8/In0sMjgyMzM6e246Ij8/In0sMjg0ODQ6e246Ij8/In0sNjU1MzU6e246IiJ9fTtyZXR1cm57c2hlZXRfdG9fd2sxOmZ1bmN0aW9uIGEoQyxVKXt2YXIgTz1V'@;
put 'fHx7fTtpZigrTy5jb2RlcGFnZT49MCYmTXIoK08uY29kZXBhZ2UpLCJzdHJpbmciPT1PLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0sxIHRvIEpTIHN0cmluZyIpO3ZhciBEPVNyKCksaj1EZShDWyIhcmVmIl0pLHNlPUFycmF5LmlzQXJyYXkoQyksWj1bXTthZShELDAs'@;
put 'ZnVuY3Rpb24gaShDKXt2YXIgVT1HKDIpO3JldHVybiBVLndyaXRlX3NoaWZ0KDIsQyksVX0oMTAzMCkpLGFlKEQsNixmdW5jdGlvbiBjKEMpe3ZhciBVPUcoOCk7cmV0dXJuIFUud3JpdGVfc2hpZnQoMixDLnMuYyksVS53cml0ZV9zaGlmdCgyLEMucy5yKSxVLndyaXRlX3NoaWZ0KDIsQy5l'@;
put 'LmMpLFUud3JpdGVfc2hpZnQoMixDLmUuciksVX0oaikpO2Zvcih2YXIgUT1NYXRoLm1pbihqLmUuciw4MTkxKSxZPWoucy5yO1k8PVE7KytZKWZvcih2YXIgRWU9S2UoWSksQT1qLnMuYztBPD1qLmUuYzsrK0Epe1k9PT1qLnMuciYmKFpbQV09SGUoQSkpO3ZhciBBZT1zZT8oQ1tZXXx8W10p'@;
put 'W0FdOkNbWltBXStFZV07QWUmJiJ6IiE9QWUudCYmKCJuIj09QWUudD8oMHxBZS52KT09QWUudiYmQWUudj49LTMyNzY4JiZBZS52PD0zMjc2Nz9hZShELDEzLGQoWSxBLEFlLnYpKTphZShELDE0LHUoWSxBLEFlLnYpKTphZShELDE1LGgoWSxBLGF0KEFlKS5zbGljZSgwLDIzOSkpKSl9cmV0'@;
put 'dXJuIGFlKEQsMSksRC5lbmQoKX0sYm9va190b193azM6ZnVuY3Rpb24gbihDLFUpe3ZhciBPPVV8fHt9O2lmKCtPLmNvZGVwYWdlPj0wJiZNcigrTy5jb2RlcGFnZSksInN0cmluZyI9PU8udHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzMgdG8gSlMgc3RyaW5nIik7dmFy'@;
put 'IEQ9U3IoKTthZShELDAsZnVuY3Rpb24gcyhDKXt2YXIgVT1HKDI2KTtVLndyaXRlX3NoaWZ0KDIsNDA5NiksVS53cml0ZV9zaGlmdCgyLDQpLFUud3JpdGVfc2hpZnQoNCwwKTtmb3IodmFyIE89MCxEPTAsaj0wLHNlPTA7c2U8Qy5TaGVldE5hbWVzLmxlbmd0aDsrK3NlKXt2YXIgUT1DLlNo'@;
put 'ZWV0c1tDLlNoZWV0TmFtZXNbc2VdXTtpZihRJiZRWyIhcmVmIl0peysrajt2YXIgWT1QcihRWyIhcmVmIl0pO088WS5lLnImJihPPVkuZS5yKSxEPFkuZS5jJiYoRD1ZLmUuYyl9fXJldHVybiBPPjgxOTEmJihPPTgxOTEpLFUud3JpdGVfc2hpZnQoMixPKSxVLndyaXRlX3NoaWZ0KDEsaiks'@;
put 'VS53cml0ZV9zaGlmdCgxLEQpLFUud3JpdGVfc2hpZnQoMiwwKSxVLndyaXRlX3NoaWZ0KDIsMCksVS53cml0ZV9zaGlmdCgxLDEpLFUud3JpdGVfc2hpZnQoMSwyKSxVLndyaXRlX3NoaWZ0KDQsMCksVS53cml0ZV9zaGlmdCg0LDApLFV9KEMpKTtmb3IodmFyIGo9MCxzZT0wO2o8Qy5TaGVl'@;
put 'dE5hbWVzLmxlbmd0aDsrK2opKEMuU2hlZXRzW0MuU2hlZXROYW1lc1tqXV18fHt9KVsiIXJlZiJdJiZhZShELDI3LGNlKEMuU2hlZXROYW1lc1tqXSxzZSsrKSk7dmFyIFo9MDtmb3Ioaj0wO2o8Qy5TaGVldE5hbWVzLmxlbmd0aDsrK2ope3ZhciBRPUMuU2hlZXRzW0MuU2hlZXROYW1lc1tq'@;
put 'XV07aWYoUSYmUVsiIXJlZiJdKXtmb3IodmFyIFk9RGUoUVsiIXJlZiJdKSxFZT1BcnJheS5pc0FycmF5KFEpLEE9W10sUGU9TWF0aC5taW4oWS5lLnIsODE5MSksQWU9WS5zLnI7QWU8PVBlOysrQWUpZm9yKHZhciBMZT1LZShBZSksQ2U9WS5zLmM7Q2U8PVkuZS5jOysrQ2Upe0FlPT09WS5z'@;
put 'LnImJihBW0NlXT1IZShDZSkpO3ZhciBxZT1FZT8oUVtBZV18fFtdKVtDZV06UVtBW0NlXStMZV07cWUmJiJ6IiE9cWUudCYmKCJuIj09cWUudD9hZShELDIzLFYoQWUsQ2UsWixxZS52KSk6YWUoRCwyMix5KEFlLENlLFosYXQocWUpLnNsaWNlKDAsMjM5KSkpKX0rK1p9fXJldHVybiBhZShE'@;
put 'LDEpLEQuZW5kKCl9LHRvX3dvcmtib29rOmZ1bmN0aW9uIHQoQyxVKXtzd2l0Y2goVS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHIoSXIoT3IoQykpLFUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gcihJcihDKSxVKTtjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6cmV0dXJuIHIoQyxVKX10aHJv'@;
put 'dyJVbnN1cHBvcnRlZCB0eXBlICIrVS50eXBlfX19KCksd2g9ZnVuY3Rpb24oKXt2YXIgZT1GYSgidCIpLHQ9RmEoInJQciIpO2Z1bmN0aW9uIHIoaSl7dmFyIHM9aS5tYXRjaChlKTtpZighcylyZXR1cm57dDoicyIsdjoiIn07dmFyIGY9e3Q6InMiLHY6SWUoc1sxXSl9LGM9aS5tYXRjaCh0'@;
put 'KTtyZXR1cm4gYyYmKGYucz1mdW5jdGlvbiBfaChlKXt2YXIgdD17fSxyPWUubWF0Y2godnIpLGE9MCxuPSExO2lmKHIpZm9yKDthIT1yLmxlbmd0aDsrK2Epe3ZhciBpPW1lKHJbYV0pO3N3aXRjaChpWzBdLnJlcGxhY2UoL1x3KjovZywiIikpe2Nhc2UiPGNvbmRlbnNlIjpjYXNlIjxleHRl'@;
put 'bmQiOmJyZWFrO2Nhc2UiPHNoYWRvdyI6aWYoIWkudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+Ijp0LnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PWkudmFsKWJyZWFrO3QuY3A9TDBbcGFyc2VJbnQoaS52'@;
put 'YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZighaS52YWwpYnJlYWs7Y2FzZSI8b3V0bGluZT4iOmNhc2UiPG91dGxpbmUvPiI6dC5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8L291dGxpbmU+IjpicmVhaztjYXNlIjxyRm9udCI6dC5uYW1lPWkudmFsO2JyZWFrO2Nhc2UiPHN6Ijp0LnN6'@;
put 'PWkudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYoIWkudmFsKWJyZWFrO2Nhc2UiPHN0cmlrZT4iOmNhc2UiPHN0cmlrZS8+Ijp0LnN0cmlrZT0xO2JyZWFrO2Nhc2UiPC9zdHJpa2U+IjpicmVhaztjYXNlIjx1IjppZighaS52YWwpYnJlYWs7c3dpdGNoKGkudmFsKXtjYXNlImRvdWJsZSI6'@;
put 'dC51dmFsPSJkb3VibGUiO2JyZWFrO2Nhc2Uic2luZ2xlQWNjb3VudGluZyI6dC51dmFsPSJzaW5nbGUtYWNjb3VudGluZyI7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjp0LnV2YWw9ImRvdWJsZS1hY2NvdW50aW5nIn1jYXNlIjx1PiI6Y2FzZSI8dS8+Ijp0LnU9MTticmVhaztjYXNl'@;
put 'IjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09aS52YWwpYnJlYWs7Y2FzZSI8Yj4iOmNhc2UiPGIvPiI6dC5iPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjppZigiMCI9PWkudmFsKWJyZWFrO2Nhc2UiPGk+IjpjYXNlIjxpLz4iOnQuaT0xO2JyZWFrO2Nhc2UiPC9pPiI6'@;
put 'YnJlYWs7Y2FzZSI8Y29sb3IiOmkucmdiJiYodC5jb2xvcj1pLnJnYi5zbGljZSgyLDgpKTticmVhaztjYXNlIjxjb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmJyZWFrO2Nhc2UiPGZhbWlseSI6dC5mYW1pbHk9aS52YWw7YnJlYWs7Y2FzZSI8ZmFtaWx5PiI6Y2FzZSI8'@;
put 'ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOnQudmFsaWduPWkudmFsO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbj4iOmNhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6Y2FzZSI8c2NoZW1lIjpjYXNlIjxzY2hlbWU+IjpjYXNlIjxzY2hl'@;
put 'bWUvPiI6Y2FzZSI8L3NjaGVtZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6bj0hMDticmVhaztjYXNlIjwvZXh0PiI6bj0hMTticmVhaztkZWZhdWx0OmlmKDQ3IT09aVswXS5jaGFyQ29kZUF0KDEpJiYhbil0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK2lbMF0pfX1yZXR1cm4gdH0oY1sxXSkpLGZ9dmFyIGE9LzwoPzpcdys6KT9yPi9nLG49LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24ocyl7cmV0dXJuIHMucmVwbGFjZShhLCIiKS5zcGxpdChuKS5tYXAocikuZmls'@;
put 'dGVyKGZ1bmN0aW9uKGYpe3JldHVybiBmLnZ9KX19KCksa2g9ZnVuY3Rpb24oKXt2YXIgdD0vKFxyXG58XG4pL2c7ZnVuY3Rpb24gYShuKXt2YXIgaT1bW10sbi52LFtdXTtyZXR1cm4gbi52PyhuLnMmJmZ1bmN0aW9uIHIobixpLHMpe3ZhciBmPVtdO24udSYmZi5wdXNoKCJ0ZXh0LWRlY29y'@;
put 'YXRpb246IHVuZGVybGluZTsiKSxuLnV2YWwmJmYucHVzaCgidGV4dC11bmRlcmxpbmUtc3R5bGU6IituLnV2YWwrIjsiKSxuLnN6JiZmLnB1c2goImZvbnQtc2l6ZToiK24uc3orInB0OyIpLG4ub3V0bGluZSYmZi5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxuLnNoYWRvdyYmZi5w'@;
put 'dXNoKCJ0ZXh0LXNoYWRvdzogYXV0bzsiKSxpLnB1c2goJzxzcGFuIHN0eWxlPSInK2Yuam9pbigiIikrJyI+Jyksbi5iJiYoaS5wdXNoKCI8Yj4iKSxzLnB1c2goIjwvYj4iKSksbi5pJiYoaS5wdXNoKCI8aT4iKSxzLnB1c2goIjwvaT4iKSksbi5zdHJpa2UmJihpLnB1c2goIjxzPiIpLHMu'@;
put 'cHVzaCgiPC9zPiIpKTt2YXIgYz1uLnZhbGlnbnx8IiI7InN1cGVyc2NyaXB0Ij09Y3x8InN1cGVyIj09Yz9jPSJzdXAiOiJzdWJzY3JpcHQiPT1jJiYoYz0ic3ViIiksIiIhPWMmJihpLnB1c2goIjwiK2MrIj4iKSxzLnB1c2goIjwvIitjKyI+IikpLHMucHVzaCgiPC9zcGFuPiIpfShuLnMs'@;
put 'aVswXSxpWzJdKSxpWzBdLmpvaW4oIiIpK2lbMV0ucmVwbGFjZSh0LCI8YnIvPiIpK2lbMl0uam9pbigiIikpOiIifXJldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gaS5tYXAoYSkuam9pbigiIil9fSgpLEVoPS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLFRoPS88'@;
put 'KD86XHcrOik/cj4vLFNoPS88KD86XHcrOik/clBoLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT9yUGg+L2c7ZnVuY3Rpb24gU24oZSx0KXt2YXIgcj0hdHx8dC5jZWxsSFRNTCxhPXt9O3JldHVybiBlPyhlLm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5dKj4vKT8oYS50PUllKEJlKGUuc2xp'@;
put 'Y2UoZS5pbmRleE9mKCI+IikrMSkuc3BsaXQoLzxcLyg/Olx3KzopP3Q+LylbMF18fCIiKSksYS5yPUJlKGUpLHImJihhLmg9JDAoYS50KSkpOmUubWF0Y2goVGgpJiYoYS5yPUJlKGUpLGEudD1JZShCZSgoZS5yZXBsYWNlKFNoLCIiKS5tYXRjaChFaCl8fFtdKS5qb2luKCIiKS5yZXBsYWNl'@;
put 'KHZyLCIiKSkpLHImJihhLmg9a2god2goYS5yKSkpKSxhKTp7dDoiIn19dmFyIEZoPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+Lyx5aD0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLEFoPS88XC8oPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4vO2Z1'@;
put 'bmN0aW9uIG5mKGUpe2lmKHR5cGVvZiBPZTwidSIpcmV0dXJuIE9lLnV0aWxzLmVuY29kZShSdCxlKTtmb3IodmFyIHQ9W10scj1lLnNwbGl0KCIiKSxhPTA7YTxyLmxlbmd0aDsrK2EpdFthXT1yW2FdLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHR9ZnVuY3Rpb24gZHQoZSx0KXt2YXIgcj17fTty'@;
put 'ZXR1cm4gci5NYWpvcj1lLnJlYWRfc2hpZnQoMiksci5NaW5vcj1lLnJlYWRfc2hpZnQoMiksdD49NCYmKGUubCs9dC00KSxyfWZ1bmN0aW9uIExoKGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoNCkscj1lLmwrdC00LGE9e30sbj1lLnJlYWRfc2hpZnQoNCksaT1bXTtuLS0gPjA7KWkucHVz'@;
put 'aCh7dDplLnJlYWRfc2hpZnQoNCksdjplLnJlYWRfc2hpZnQoMCwibHBwNCIpfSk7aWYoYS5uYW1lPWUucmVhZF9zaGlmdCgwLCJscHA0IiksYS5jb21wcz1pLGUubCE9cil0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTogIitlLmwrIiAhPSAiK3IpO3JldHVybiBhfWZ1'@;
put 'bmN0aW9uIHNmKGUsdCl7dmFyIHI9ZS5sK3QsYT17fTthLkZsYWdzPTYzJmUucmVhZF9zaGlmdCg0KSxlLmwrPTQsYS5BbGdJRD1lLnJlYWRfc2hpZnQoNCk7dmFyIG49ITE7c3dpdGNoKGEuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4Om49MzY9PWEuRmxhZ3M7YnJl'@;
put 'YWs7Y2FzZSAyNjYyNTpuPTQ9PWEuRmxhZ3M7YnJlYWs7Y2FzZSAwOm49MTY9PWEuRmxhZ3N8fDQ9PWEuRmxhZ3N8fDM2PT1hLkZsYWdzO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkIGVuY3J5cHRpb24gYWxnb3JpdGhtOiAiK2EuQWxnSUR9aWYoIW4pdGhyb3cgbmV3IEVycm9y'@;
put 'KCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21hdGNoIik7cmV0dXJuIGEuQWxnSURIYXNoPWUucmVhZF9zaGlmdCg0KSxhLktleVNpemU9ZS5yZWFkX3NoaWZ0KDQpLGEuUHJvdmlkZXJUeXBlPWUucmVhZF9zaGlmdCg0KSxlLmwrPTgsYS5DU1BOYW1lPWUucmVhZF9zaGlmdChyLWUubD4+'@;
put 'MSwidXRmMTZsZSIpLGUubD1yLGF9ZnVuY3Rpb24gZmYoZSx0KXt2YXIgcj17fSxhPWUubCt0O3JldHVybiBlLmwrPTQsci5TYWx0PWUuc2xpY2UoZS5sLGUubCsxNiksZS5sKz0xNixyLlZlcmlmaWVyPWUuc2xpY2UoZS5sLGUubCsxNiksZS5sKz0xNixlLnJlYWRfc2hpZnQoNCksci5WZXJp'@;
put 'Zmllckhhc2g9ZS5zbGljZShlLmwsYSksZS5sPWEscn1mdW5jdGlvbiBWaChlKXtpZigzNiE9KDYzJmUucmVhZF9zaGlmdCg0KSkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uSW5mbyBtaXNtYXRjaCIpO3ZhciByPWUucmVhZF9zaGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOnNmKGUsciks'@;
put 'djpmZihlLGUubGVuZ3RoLWUubCl9fWZ1bmN0aW9uIFhoKCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIEdoKGUpe3ZhciB0PVsic2FsdFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNp'@;
put 'emUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJDaGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTtlLmwrPTQ7dmFyIHI9ZS5yZWFkX3NoaWZ0KGUubGVuZ3RoLWUubCwidXRmOCIpLGE9e307cmV0dXJuIHIucmVwbGFjZSh2cixmdW5jdGlvbihpKXt2YXIgcz1tZShpKTtz'@;
put 'd2l0Y2gocnQoc1swXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5cHRpb24iOmNhc2UiPC9lbmNyeXB0aW9uPiI6Y2FzZSI8L2tleUVuY3J5cHRvcnM+IjpjYXNlIjwva2V5RW5jcnlwdG9yPiI6YnJlYWs7Y2FzZSI8a2V5RGF0YSI6dC5mb3JFYWNoKGZ1bmN0aW9uKGYpe2FbZl09c1tmXX0p'@;
put 'O2JyZWFrO2Nhc2UiPGRhdGFJbnRlZ3JpdHkiOmEuZW5jcnlwdGVkSG1hY0tleT1zLmVuY3J5cHRlZEhtYWNLZXksYS5lbmNyeXB0ZWRIbWFjVmFsdWU9cy5lbmNyeXB0ZWRIbWFjVmFsdWU7YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMiOmEuZW5jcz1b'@;
put 'XTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOmEudXJpPXMudXJpO2JyZWFrO2Nhc2UiPGVuY3J5cHRlZEtleSI6YS5lbmNzLnB1c2gocyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBzWzBdfX0pLGF9dmFyIGNmPWZ1bmN0aW9uKCl7dmFyIGU9WzE4NywyNTUsMjU1LDE4NiwyNTUsMjU1LDE4NSwx'@;
put 'MjgsMCwxOTAsMTUsMCwxOTEsMTUsMF0sdD1bNTc4NDAsNzQzOSw1MjM4MCwzMzk4NCw0MzY0LDM2MDAsNjE5MDIsMTI2MDYsNjI1OCw1NzY1Nyw1NDI4NywzNDA0MSwxMDI1Miw0MzM3MCwyMDE2M10scj1bNDQ3OTYsMTk5MjksMzk4NTgsMTAwNTMsMjAxMDYsNDAyMTIsMTA3NjEsMzE1ODUs'@;
put 'NjMxNzAsNjQ5MzMsNjAyNjcsNTA5MzUsNDAzOTksMTExOTksMTc3NjMsMzU1MjYsMTQ1MywyOTA2LDU4MTIsMTE2MjQsMjMyNDgsODg1LDE3NzAsMzU0MCw3MDgwLDE0MTYwLDI4MzIwLDU2NjQwLDU1MzY5LDQxMTM5LDIwODA3LDQxNjE0LDIxODIxLDQzNjQyLDE3NjIxLDI4NDg1LDU2OTcw'@;
put 'LDQ0MzQxLDE5MDE5LDM4MDM4LDE0NjA1LDI5MjEwLDYwMTk1LDUwNzkxLDQwMTc1LDEwNzUxLDIxNTAyLDQzMDA0LDI0NTM3LDE4Mzg3LDM2Nzc0LDM5NDksNzg5OCwxNTc5NiwzMTU5Miw2MzE4NCw0NzIwMSwyNDgwMyw0OTYwNiwzNzgwNSwxNDIwMywyODQwNiw1NjgxMiwxNzgyNCwzNTY0'@;
put 'OCwxNjk3LDMzOTQsNjc4OCwxMzU3NiwyNzE1Miw0MzYwMSwxNzUzOSwzNTA3OCw1NTcsMTExNCwyMjI4LDQ0NTYsMzAzODgsNjA3NzYsNTE5NTMsMzQyNDMsNzA3OSwxNDE1OCwyODMxNiwxNDEyOCwyODI1Niw1NjUxMiw0MzQyNSwxNzI1MSwzNDUwMiw3NTk3LDEzMTA1LDI2MjEwLDUyNDIw'@;
put 'LDM1MjQxLDg4MywxNzY2LDM1MzIsNDEyOSw4MjU4LDE2NTE2LDMzMDMyLDQ2NTcsOTMxNCwxODYyOF0sbj1mdW5jdGlvbihzLGYpe3JldHVybiBmdW5jdGlvbihzKXtyZXR1cm4gMjU1JihzLzJ8MTI4KnMpfShzXmYpfTtyZXR1cm4gZnVuY3Rpb24ocyl7Zm9yKHZhciBmPW5mKHMpLGM9ZnVu'@;
put 'Y3Rpb24ocyl7Zm9yKHZhciBmPXRbcy5sZW5ndGgtMV0sYz0xMDQsbz1zLmxlbmd0aC0xO28+PTA7LS1vKWZvcih2YXIgbD1zW29dLGg9MDs3IT1oOysraCk2NCZsJiYoZl49cltjXSksbCo9MiwtLWM7cmV0dXJuIGZ9KGYpLG89Zi5sZW5ndGgsbD1fdCgxNiksaD0wOzE2IT1oOysraClsW2hd'@;
put 'PTA7dmFyIHY7Zm9yKCEoMSZ+bykmJihsW29dPW4oZVswXSxjPj44KSxsWy0tb109bihmW2YubGVuZ3RoLTFdLDI1NSZjKSk7bz4wOylsWy0tb109bihmW29dLGM+PjgpLGxbLS1vXT1uKGZbb10sMjU1JmMpO2ZvcihvPTE1LHY9MTUtZi5sZW5ndGg7dj4wOylsW29dPW4oZVt2XSxjPj44KSwt'@;
put 'LXYsbFstLW9dPW4oZltvXSwyNTUmYyksLS1vLC0tdjtyZXR1cm4gbH19KCk7dmFyIG9mPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShuLGkpe3N3aXRjaChpLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gdChPcihuKSxpKTtjYXNlImJpbmFyeSI6cmV0dXJuIHQobixpKTtjYXNlImJ1ZmZlciI6'@;
put 'cmV0dXJuIHQoU2UmJkJ1ZmZlci5pc0J1ZmZlcihuKT9uLnRvU3RyaW5nKCJiaW5hcnkiKTp3dChuKSxpKTtjYXNlImFycmF5IjpyZXR1cm4gdChQdChuKSxpKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIraS50eXBlKX1mdW5jdGlvbiB0KG4saSl7dmFyIGY9KGl8fHt9'@;
put 'KS5kZW5zZT9bXTp7fSxjPW4ubWF0Y2goL1xcdHJvd2QuKj9cXHJvd1xiL2cpO2lmKCFjLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlJURiBtaXNzaW5nIHRhYmxlIik7dmFyIG89e3M6e2M6MCxyOjB9LGU6e2M6MCxyOmMubGVuZ3RoLTF9fTtyZXR1cm4gYy5mb3JFYWNoKGZ1bmN0aW9uKGws'@;
put 'aCl7QXJyYXkuaXNBcnJheShmKSYmKGZbaF09W10pO2Zvcih2YXIgdix4PS9cXFx3K1xiL2csZD0wLHU9LTE7dj14LmV4ZWMobCk7KXtpZigiXFxjZWxsIj09PXZbMF0pe3ZhciBwPWwuc2xpY2UoZCx4Lmxhc3RJbmRleC12WzBdLmxlbmd0aCk7aWYoIiAiPT1wWzBdJiYocD1wLnNsaWNlKDEp'@;
put 'KSwrK3UscC5sZW5ndGgpe3ZhciBrPXt2OnAsdDoicyJ9O0FycmF5LmlzQXJyYXkoZik/ZltoXVt1XT1rOmZbZ2Uoe3I6aCxjOnV9KV09a319ZD14Lmxhc3RJbmRleH11Pm8uZS5jJiYoby5lLmM9dSl9KSxmWyIhcmVmIl09d2UobyksZn1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gcihu'@;
put 'LGkpe3JldHVybiBGdChlKG4saSksaSl9LHRvX3NoZWV0OmUsZnJvbV9zaGVldDpmdW5jdGlvbiBhKG4pe2Zvcih2YXIgZixpPVsie1xccnRmMVxcYW5zaSJdLHM9RGUoblsiIXJlZiJdKSxjPUFycmF5LmlzQXJyYXkobiksbz1zLnMucjtvPD1zLmUucjsrK28pe2kucHVzaCgiXFx0cm93ZFxc'@;
put 'dHJhdXRvZml0MSIpO2Zvcih2YXIgbD1zLnMuYztsPD1zLmUuYzsrK2wpaS5wdXNoKCJcXGNlbGx4IisobCsxKSk7Zm9yKGkucHVzaCgiXFxwYXJkXFxpbnRibCIpLGw9cy5zLmM7bDw9cy5lLmM7KytsKXt2YXIgaD1nZSh7cjpvLGM6bH0pOyhmPWM/KG5bb118fFtdKVtsXTpuW2hdKSYmKG51'@;
put 'bGwhPWYudnx8Zi5mJiYhZi5GKSYmKGkucHVzaCgiICIrKGYud3x8KGF0KGYpLGYudykpKSxpLnB1c2goIlxcY2VsbCIpKX1pLnB1c2goIlxccGFyZFxcaW50YmxcXHJvdyIpfXJldHVybiBpLmpvaW4oIiIpKyJ9In19fSgpO2Z1bmN0aW9uIGJhKGUpe2Zvcih2YXIgdD0wLHI9MTszIT10Oysr'@;
put 'dClyPTI1NipyKyhlW3RdPjI1NT8yNTU6ZVt0XTwwPzA6ZVt0XSk7cmV0dXJuIHIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gVDAoZSx0KXtpZigwPT09dClyZXR1cm4gZTt2YXIgcj1mdW5jdGlvbiBRaChlKXt2YXIgdD1lWzBdLzI1NSxyPWVbMV0vMjU1'@;
put 'LGE9ZVsyXS8yNTUsbj1NYXRoLm1heCh0LHIsYSksaT1NYXRoLm1pbih0LHIsYSkscz1uLWk7aWYoMD09PXMpcmV0dXJuWzAsMCx0XTt2YXIgYyxmPTAsbz1uK2k7c3dpdGNoKGM9cy8obz4xPzItbzpvKSxuKXtjYXNlIHQ6Zj0oKHItYSkvcys2KSU2O2JyZWFrO2Nhc2UgcjpmPShhLXQpL3Mr'@;
put 'MjticmVhaztjYXNlIGE6Zj0odC1yKS9zKzR9cmV0dXJuW2YvNixjLG8vMl19KGZ1bmN0aW9uIFpoKGUpe3ZhciB0PWUuc2xpY2UoIiMiPT09ZVswXT8xOjApLnNsaWNlKDAsNik7cmV0dXJuW3BhcnNlSW50KHQuc2xpY2UoMCwyKSwxNikscGFyc2VJbnQodC5zbGljZSgyLDQpLDE2KSxwYXJz'@;
put 'ZUludCh0LnNsaWNlKDQsNiksMTYpXX0oZSkpO3JldHVybiByWzJdPXQ8MD9yWzJdKigxK3QpOjEtKDEtclsyXSkqKDEtdCksYmEoZnVuY3Rpb24gZTEoZSl7dmFyIGMscj1lWzFdLGE9ZVsyXSxuPTIqciooYTwuNT9hOjEtYSksaT1hLW4vMixzPVtpLGksaV0sZj02KmVbMF07aWYoMCE9PXIp'@;
put 'c3dpdGNoKDB8Zil7Y2FzZSAwOmNhc2UgNjpjPW4qZixzWzBdKz1uLHNbMV0rPWM7YnJlYWs7Y2FzZSAxOnNbMF0rPWM9biooMi1mKSxzWzFdKz1uO2JyZWFrO2Nhc2UgMjpjPW4qKGYtMiksc1sxXSs9bixzWzJdKz1jO2JyZWFrO2Nhc2UgMzpzWzFdKz1jPW4qKDQtZiksc1syXSs9bjticmVh'@;
put 'aztjYXNlIDQ6Yz1uKihmLTQpLHNbMl0rPW4sc1swXSs9YzticmVhaztjYXNlIDU6c1syXSs9Yz1uKig2LWYpLHNbMF0rPW59Zm9yKHZhciBvPTA7MyE9bzsrK28pc1tvXT1NYXRoLnJvdW5kKDI1NSpzW29dKTtyZXR1cm4gc30ocikpfXZhciBsZj02LHIxPTE1LHQxPTEsd3I9bGY7ZnVuY3Rp'@;
put 'b24gUGEoZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUrTWF0aC5yb3VuZCgxMjgvd3IpLzI1Nikqd3IpfWZ1bmN0aW9uIExhKGUpe3JldHVybiBNYXRoLmZsb29yKChlLTUpL3dyKjEwMCsuNSkvMTAwfWZ1bmN0aW9uIFMwKGUpe3JldHVybiBNYXRoLnJvdW5kKChlKndyKzUpL3dyKjI1NikvMjU2'@;
put 'fWZ1bmN0aW9uIHluKGUpe3JldHVybiBTMChMYShQYShlKSkpfWZ1bmN0aW9uIEFuKGUpe3ZhciB0PU1hdGguYWJzKGUteW4oZSkpLHI9d3I7aWYodD4uMDA1KWZvcih3cj10MTt3cjxyMTsrK3dyKU1hdGguYWJzKGUteW4oZSkpPD10JiYodD1NYXRoLmFicyhlLXluKGUpKSxyPXdyKTt3cj1y'@;
put 'fWZ1bmN0aW9uIEt0KGUpe2Uud2lkdGg/KGUud3B4PVBhKGUud2lkdGgpLGUud2NoPUxhKGUud3B4KSxlLk1EVz13cik6ZS53cHg/KGUud2NoPUxhKGUud3B4KSxlLndpZHRoPVMwKGUud2NoKSxlLk1EVz13cik6Im51bWJlciI9PXR5cGVvZiBlLndjaCYmKGUud2lkdGg9UzAoZS53Y2gpLGUu'@;
put 'd3B4PVBhKGUud2lkdGgpLGUuTURXPXdyKSxlLmN1c3RvbVdpZHRoJiZkZWxldGUgZS5jdXN0b21XaWR0aH12YXIgdWY9OTY7ZnVuY3Rpb24gQmEoZSl7cmV0dXJuIDk2KmUvdWZ9ZnVuY3Rpb24gb2EoZSl7cmV0dXJuIGUqdWYvOTZ9dmFyIG4xPXtOb25lOiJub25lIixTb2xpZDoic29saWQi'@;
put 'LEdyYXk1MDoibWVkaXVtR3JheSIsR3JheTc1OiJkYXJrR3JheSIsR3JheTI1OiJsaWdodEdyYXkiLEhvcnpTdHJpcGU6ImRhcmtIb3Jpem9udGFsIixWZXJ0U3RyaXBlOiJkYXJrVmVydGljYWwiLFJldmVyc2VEaWFnU3RyaXBlOiJkYXJrRG93biIsRGlhZ1N0cmlwZToiZGFya1VwIixEaWFn'@;
put 'Q3Jvc3M6ImRhcmtHcmlkIixUaGlja0RpYWdDcm9zczoiZGFya1RyZWxsaXMiLFRoaW5Ib3J6U3RyaXBlOiJsaWdodEhvcml6b250YWwiLFRoaW5WZXJ0U3RyaXBlOiJsaWdodFZlcnRpY2FsIixUaGluUmV2ZXJzZURpYWdTdHJpcGU6ImxpZ2h0RG93biIsVGhpbkhvcnpDcm9zczoibGlnaHRH'@;
put 'cmlkIn0sRjA9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRlcklkIiwieGZJZCJdLHkwPVsiYXBwbHlBbGlnbm1lbnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIsImFwcGx5Rm9udCIsImFwcGx5TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0aW9uIiwicGl2b3RCdXR0'@;
put 'b24iLCJxdW90ZVByZWZpeCJdLGgxPWZ1bmN0aW9uKCl7dmFyIHQ9LzwoPzpcdys6KT9udW1GbXRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP251bUZtdHM+LyxyPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZzPi8sYT0vPCg/Olx3Kzop'@;
put 'P2ZpbGxzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZpbGxzPi8sbj0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnRzPi8saT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vO3JldHVybiBmdW5j'@;
put 'dGlvbihmLGMsbyl7dmFyIGgsbD17fTtyZXR1cm4gZj8oKGg9KGY9Zi5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaCh0KSkmJmZ1bmN0aW9uIGMxKGUsdCxyKXt0Lk51bWJlckZtdD1bXTtm'@;
put 'b3IodmFyIGE9JGUocGUpLG49MDtuPGEubGVuZ3RoOysrbil0Lk51bWJlckZtdFthW25dXT1wZVthW25dXTt2YXIgaT1lWzBdLm1hdGNoKHZyKTtpZihpKWZvcihuPTA7bjxpLmxlbmd0aDsrK24pe3ZhciBzPW1lKGlbbl0pO3N3aXRjaChydChzWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8'@;
put 'L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgZj1JZShCZShzLmZvcm1hdENvZGUpKSxjPXBhcnNlSW50KHMubnVtRm10SWQsMTApO2lmKHQuTnVtYmVyRm10W2NdPWYsYz4wKXtpZihjPjM5'@;
put 'Mil7Zm9yKGM9MzkyO2M+NjAmJm51bGwhPXQuTnVtYmVyRm10W2NdOy0tYyk7dC5OdW1iZXJGbXRbY109Zn1ldChmLGMpfWJyZWFrO2RlZmF1bHQ6aWYoci5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzWzBdKyIgaW4gbnVtRm10cyIpfX19KGgsbCxvKSwoaD1mLm1hdGNo'@;
put 'KG4pKSYmZnVuY3Rpb24gZjEoZSx0LHIsYSl7dC5Gb250cz1bXTt2YXIgbj17fSxpPSExOyhlWzBdLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9bWUocyk7c3dpdGNoKHJ0KGZbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+Ijpj'@;
put 'YXNlIjxmb250IjpjYXNlIjxmb250PiI6Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4iOmNhc2UiPHN6Lz4iOmNhc2UiPC9zej4iOmNhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6Y2FzZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpjYXNlIjxzY2hlbWUvPiI6Y2Fz'@;
put 'ZSI8L3NjaGVtZT4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+Ijp0LkZvbnRzLnB1c2gobiksbj17fTticmVhaztjYXNlIjxuYW1lIjpmLnZh'@;
put 'bCYmKG4ubmFtZT1CZShmLnZhbCkpO2JyZWFrO2Nhc2UiPGIiOm4uYm9sZD1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOm4uYm9sZD0xO2JyZWFrO2Nhc2UiPGkiOm4uaXRhbGljPWYudmFsP1dlKGYudmFsKToxO2JyZWFrO2Nhc2UiPGkvPiI6bi5pdGFsaWM9MTticmVhaztj'@;
put 'YXNlIjx1Ijpzd2l0Y2goZi52YWwpe2Nhc2Uibm9uZSI6bi51bmRlcmxpbmU9MDticmVhaztjYXNlInNpbmdsZSI6bi51bmRlcmxpbmU9MTticmVhaztjYXNlImRvdWJsZSI6bi51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOm4udW5kZXJsaW5lPTMzO2JyZWFrO2Nh'@;
put 'c2UiZG91YmxlQWNjb3VudGluZyI6bi51bmRlcmxpbmU9MzR9YnJlYWs7Y2FzZSI8dS8+IjpuLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiPHN0cmlrZSI6bi5zdHJpa2U9Zi52YWw/V2UoZi52YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOm4uc3RyaWtlPTE7YnJlYWs7Y2FzZSI8b3V0bGlu'@;
put 'ZSI6bi5vdXRsaW5lPWYudmFsP1dlKGYudmFsKToxO2JyZWFrO2Nhc2UiPG91dGxpbmUvPiI6bi5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8c2hhZG93IjpuLnNoYWRvdz1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6bi5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5z'@;
put 'ZSI6bi5jb25kZW5zZT1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjpuLmNvbmRlbnNlPTE7YnJlYWs7Y2FzZSI8ZXh0ZW5kIjpuLmV4dGVuZD1mLnZhbD9XZShmLnZhbCk6MTticmVhaztjYXNlIjxleHRlbmQvPiI6bi5leHRlbmQ9MTticmVhaztjYXNlIjxzeiI6'@;
put 'Zi52YWwmJihuLnN6PStmLnZhbCk7YnJlYWs7Y2FzZSI8dmVydEFsaWduIjpmLnZhbCYmKG4udmVydEFsaWduPWYudmFsKTticmVhaztjYXNlIjxmYW1pbHkiOmYudmFsJiYobi5mYW1pbHk9cGFyc2VJbnQoZi52YWwsMTApKTticmVhaztjYXNlIjxzY2hlbWUiOmYudmFsJiYobi5zY2hlbWU9'@;
put 'Zi52YWwpO2JyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09Zi52YWwpYnJlYWs7Zi5jb2RlcGFnZT1MMFtwYXJzZUludChmLnZhbCwxMCldO2JyZWFrO2Nhc2UiPGNvbG9yIjppZihuLmNvbG9yfHwobi5jb2xvcj17fSksZi5hdXRvJiYobi5jb2xvci5hdXRvPVdlKGYuYXV0bykpLGYucmdi'@;
put 'KW4uY29sb3IucmdiPWYucmdiLnNsaWNlKC02KTtlbHNlIGlmKGYuaW5kZXhlZCl7bi5jb2xvci5pbmRleD1wYXJzZUludChmLmluZGV4ZWQsMTApO3ZhciBjPVZ0W24uY29sb3IuaW5kZXhdOzgxPT1uLmNvbG9yLmluZGV4JiYoYz1WdFsxXSksY3x8KGM9VnRbMV0pLG4uY29sb3IucmdiPWNb'@;
put 'MF0udG9TdHJpbmcoMTYpK2NbMV0udG9TdHJpbmcoMTYpK2NbMl0udG9TdHJpbmcoMTYpfWVsc2UgZi50aGVtZSYmKG4uY29sb3IudGhlbWU9cGFyc2VJbnQoZi50aGVtZSwxMCksZi50aW50JiYobi5jb2xvci50aW50PXBhcnNlRmxvYXQoZi50aW50KSksZi50aGVtZSYmci50aGVtZUVsZW1l'@;
put 'bnRzJiZyLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lJiYobi5jb2xvci5yZ2I9VDAoci50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtuLmNvbG9yLnRoZW1lXS5yZ2Isbi5jb2xvci50aW50fHwwKSkpO2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6aT0hMDticmVhaztj'@;
put 'YXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmNhc2UiPC9leHQ+IjppPSExO2JyZWFrO2RlZmF1bHQ6aWYoYSYmYS5XVEYmJiFpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZlswXSsiIGluIGZvbnRzIil9fSl9KGgsbCxjLG8pLChoPWYubWF0Y2goYSkpJiZmdW5jdGlvbiBzMShl'@;
put 'LHQscixhKXt0LkZpbGxzPVtdO3ZhciBuPXt9LGk9ITE7KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgZj1tZShzKTtzd2l0Y2gocnQoZlswXSkpe2Nhc2UiPGZpbGxzIjpjYXNlIjxmaWxscz4iOmNhc2UiPC9maWxscz4iOmNhc2UiPC9maWxsPiI6Y2FzZSI8'@;
put 'Z3JhZGllbnRGaWxsPiI6Y2FzZSI8cGF0dGVybkZpbGwvPiI6Y2FzZSI8L3BhdHRlcm5GaWxsPiI6Y2FzZSI8YmdDb2xvci8+IjpjYXNlIjwvYmdDb2xvcj4iOmNhc2UiPGZnQ29sb3IvPiI6Y2FzZSI8L2ZnQ29sb3I+IjpjYXNlIjxzdG9wIjpjYXNlIjxzdG9wLz4iOmNhc2UiPC9zdG9wPiI6'@;
put 'Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGZpbGw+IjpjYXNlIjxmaWxsIjpjYXNlIjxmaWxsLz4iOnQuRmlsbHMucHVzaChuPXt9KTticmVhaztjYXNlIjxn'@;
put 'cmFkaWVudEZpbGwiOmNhc2UiPC9ncmFkaWVudEZpbGw+Ijp0LkZpbGxzLnB1c2gobiksbj17fTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbCI6Y2FzZSI8cGF0dGVybkZpbGw+IjpmLnBhdHRlcm5UeXBlJiYobi5wYXR0ZXJuVHlwZT1mLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxiZ0NvbG9y'@;
put 'IjpuLmJnQ29sb3J8fChuLmJnQ29sb3I9e30pLGYuaW5kZXhlZCYmKG4uYmdDb2xvci5pbmRleGVkPXBhcnNlSW50KGYuaW5kZXhlZCwxMCkpLGYudGhlbWUmJihuLmJnQ29sb3IudGhlbWU9cGFyc2VJbnQoZi50aGVtZSwxMCkpLGYudGludCYmKG4uYmdDb2xvci50aW50PXBhcnNlRmxvYXQo'@;
put 'Zi50aW50KSksZi5yZ2ImJihuLmJnQ29sb3IucmdiPWYucmdiLnNsaWNlKC02KSk7YnJlYWs7Y2FzZSI8ZmdDb2xvciI6bi5mZ0NvbG9yfHwobi5mZ0NvbG9yPXt9KSxmLnRoZW1lJiYobi5mZ0NvbG9yLnRoZW1lPXBhcnNlSW50KGYudGhlbWUsMTApKSxmLnRpbnQmJihuLmZnQ29sb3IudGlu'@;
put 'dD1wYXJzZUZsb2F0KGYudGludCkpLG51bGwhPWYucmdiJiYobi5mZ0NvbG9yLnJnYj1mLnJnYi5zbGljZSgtNikpO2JyZWFrO2Nhc2UiPGV4dCI6aT0hMDticmVhaztjYXNlIjwvZXh0PiI6aT0hMTticmVhaztkZWZhdWx0OmlmKGEmJmEuV1RGJiYhaSl0aHJvdyBuZXcgRXJyb3IoInVucmVj'@;
put 'b2duaXplZCAiK2ZbMF0rIiBpbiBmaWxscyIpfX0pfShoLGwsMCxvKSwoaD1mLm1hdGNoKGkpKSYmZnVuY3Rpb24gaTEoZSx0LHIsYSl7dC5Cb3JkZXJzPVtdO3ZhciBuPXt9LGk9ITE7KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihzKXt2YXIgZj1tZShzKTtzd2l0Y2go'@;
put 'cnQoZlswXSkpe2Nhc2UiPGJvcmRlcnMiOmNhc2UiPGJvcmRlcnM+IjpjYXNlIjwvYm9yZGVycz4iOmNhc2UiPC9ib3JkZXI+IjpjYXNlIjxsZWZ0Lz4iOmNhc2UiPGxlZnQiOmNhc2UiPGxlZnQ+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPHJpZ2h0IjpjYXNlIjxyaWdo'@;
put 'dD4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjx0b3AiOmNhc2UiPHRvcD4iOmNhc2UiPC90b3A+IjpjYXNlIjxib3R0b20vPiI6Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpjYXNlIjwvYm90dG9tPiI6Y2FzZSI8ZGlhZ29uYWwiOmNhc2UiPGRpYWdvbmFsPiI6Y2Fz'@;
put 'ZSI8ZGlhZ29uYWwvPiI6Y2FzZSI8L2RpYWdvbmFsPiI6Y2FzZSI8aG9yaXpvbnRhbCI6Y2FzZSI8aG9yaXpvbnRhbD4iOmNhc2UiPGhvcml6b250YWwvPiI6Y2FzZSI8L2hvcml6b250YWw+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+IjpjYXNl'@;
put 'IjwvdmVydGljYWw+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IiOmNhc2UiPGNvbG9yPiI6Y2FzZSI8Y29sb3IvPiI6Y2Fz'@;
put 'ZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6bj17fSxmLmRpYWdvbmFsVXAmJihuLmRpYWdvbmFsVXA9V2UoZi5kaWFnb25hbFVwKSksZi5kaWFn'@;
put 'b25hbERvd24mJihuLmRpYWdvbmFsRG93bj1XZShmLmRpYWdvbmFsRG93bikpLHQuQm9yZGVycy5wdXNoKG4pO2JyZWFrO2Nhc2UiPGV4dCI6aT0hMDticmVhaztjYXNlIjwvZXh0PiI6aT0hMTticmVhaztkZWZhdWx0OmlmKGEmJmEuV1RGJiYhaSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2du'@;
put 'aXplZCAiK2ZbMF0rIiBpbiBib3JkZXJzIil9fSl9KGgsbCwwLG8pLChoPWYubWF0Y2gocikpJiZmdW5jdGlvbiBsMShlLHQscil7dC5DZWxsWGY9W107dmFyIGEsbj0hMTsoZVswXS5tYXRjaCh2cil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPW1lKGkpLGY9MDtzd2l0Y2gocnQo'@;
put 'c1swXSkpe2Nhc2UiPGNlbGxYZnMiOmNhc2UiPGNlbGxYZnM+IjpjYXNlIjxjZWxsWGZzLz4iOmNhc2UiPC9jZWxsWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPHByb3RlY3Rpb24iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNl'@;
put 'IjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShhPXMpWzBdLGY9MDtmPEYwLmxlbmd0aDsrK2YpYVtGMFtmXV0mJihhW0YwW2ZdXT1wYXJzZUludChhW0YwW2ZdXSwxMCkpO2ZvcihmPTA7Zjx5MC5s'@;
put 'ZW5ndGg7KytmKWFbeTBbZl1dJiYoYVt5MFtmXV09V2UoYVt5MFtmXV0pKTtpZih0Lk51bWJlckZtdCYmYS5udW1GbXRJZD4zOTIpZm9yKGY9MzkyO2Y+NjA7LS1mKWlmKHQuTnVtYmVyRm10W2EubnVtRm10SWRdPT10Lk51bWJlckZtdFtmXSl7YS5udW1GbXRJZD1mO2JyZWFrfXQuQ2VsbFhm'@;
put 'LnB1c2goYSk7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIGM9e307cy52ZXJ0aWNhbCYmKGMudmVydGljYWw9cy52ZXJ0aWNhbCkscy5ob3Jpem9udGFsJiYoYy5ob3Jpem9udGFsPXMuaG9yaXpvbnRhbCksbnVsbCE9cy50ZXh0Um90YXRpb24mJihjLnRl'@;
put 'eHRSb3RhdGlvbj1zLnRleHRSb3RhdGlvbikscy5pbmRlbnQmJihjLmluZGVudD1zLmluZGVudCkscy53cmFwVGV4dCYmKGMud3JhcFRleHQ9V2Uocy53cmFwVGV4dCkpLGEuYWxpZ25tZW50PWM7YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8ZXh0IjpuPSEwO2JyZWFrO2Nh'@;
put 'c2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Y2FzZSI8L2V4dD4iOm49ITE7YnJlYWs7ZGVmYXVsdDppZihyJiZyLldURiYmIW4pdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitzWzBdKyIgaW4gY2VsbFhmcyIpfX0pfShoLGwsbyksbCk6bH19KCksZzE9cHIsdzE9cHIsUDE9WyI8L2E6'@;
put 'bHQxPiIsIjwvYTpkazE+IiwiPC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTphY2NlbnQyPiIsIjwvYTphY2NlbnQzPiIsIjwvYTphY2NlbnQ0PiIsIjwvYTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8L2E6Zm9sSGxpbms+Il07ZnVuY3Rp'@;
put 'b24gTDEoZSx0LHIpe3QudGhlbWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIGE9e307KGVbMF0ubWF0Y2godnIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT1tZShuKTtzd2l0Y2goaVswXSl7Y2FzZSI8YTpjbHJTY2hlbWUiOmNhc2UiPC9hOmNsclNjaGVtZT4iOmJyZWFrO2Nh'@;
put 'c2UiPGE6c3JnYkNsciI6YS5yZ2I9aS52YWw7YnJlYWs7Y2FzZSI8YTpzeXNDbHIiOmEucmdiPWkubGFzdENscjticmVhaztjYXNlIjxhOmRrMT4iOmNhc2UiPC9hOmRrMT4iOmNhc2UiPGE6bHQxPiI6Y2FzZSI8L2E6bHQxPiI6Y2FzZSI8YTpkazI+IjpjYXNlIjwvYTpkazI+IjpjYXNlIjxh'@;
put 'Omx0Mj4iOmNhc2UiPC9hOmx0Mj4iOmNhc2UiPGE6YWNjZW50MT4iOmNhc2UiPC9hOmFjY2VudDE+IjpjYXNlIjxhOmFjY2VudDI+IjpjYXNlIjwvYTphY2NlbnQyPiI6Y2FzZSI8YTphY2NlbnQzPiI6Y2FzZSI8L2E6YWNjZW50Mz4iOmNhc2UiPGE6YWNjZW50ND4iOmNhc2UiPC9hOmFjY2Vu'@;
put 'dDQ+IjpjYXNlIjxhOmFjY2VudDU+IjpjYXNlIjwvYTphY2NlbnQ1PiI6Y2FzZSI8YTphY2NlbnQ2PiI6Y2FzZSI8L2E6YWNjZW50Nj4iOmNhc2UiPGE6aGxpbms+IjpjYXNlIjwvYTpobGluaz4iOmNhc2UiPGE6Zm9sSGxpbms+IjpjYXNlIjwvYTpmb2xIbGluaz4iOiIvIj09PWlbMF0uY2hh'@;
put 'ckF0KDEpPyh0LnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1AxLmluZGV4T2YoaVswXSldPWEsYT17fSk6YS5uYW1lPWlbMF0uc2xpY2UoMyxpWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKHImJnIuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIraVswXSsiIGluIGNs'@;
put 'clNjaGVtZSIpfX0pfWZ1bmN0aW9uIEIxKCl7fWZ1bmN0aW9uIE0xKCl7fXZhciBVMT0vPGE6Y2xyU2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpjbHJTY2hlbWU+LyxXMT0vPGE6Zm9udFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm9udFNjaGVtZT4vLEgxPS88YTpmbXRTY2hlbWUoW14+'@;
put 'XSopPltcc1xTXSo8XC9hOmZtdFNjaGVtZT4vLFgxPS88YTp0aGVtZUVsZW1lbnRzKFtePl0qKT5bXHNcU10qPFwvYTp0aGVtZUVsZW1lbnRzPi87ZnVuY3Rpb24gdmYoZSx0KXsoIWV8fDA9PT1lLmxlbmd0aCkmJihlPWZ1bmN0aW9uIERuKGUsdCl7aWYodCYmdC50aGVtZVhMU1gpcmV0dXJu'@;
put 'IHQudGhlbWVYTFNYO2lmKGUmJiJzdHJpbmciPT10eXBlb2YgZS5yYXcpcmV0dXJuIGUucmF3O3ZhciByPVtlcl07cmV0dXJuIHJbci5sZW5ndGhdPSc8YTp0aGVtZSB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFtZT0i'@;
put 'T2ZmaWNlIFRoZW1lIj4nLHJbci5sZW5ndGhdPSI8YTp0aGVtZUVsZW1lbnRzPiIscltyLmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPicscltyLmxlbmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsxPics'@;
put 'cltyLmxlbmd0aF09JzxhOmx0MT48YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxhc3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+JyxyW3IubGVuZ3RoXT0nPGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicscltyLmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0iRUVF'@;
put 'Q0UxIi8+PC9hOmx0Mj4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQxPjxhOnNyZ2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQz'@;
put 'PjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz48L2E6YWNjZW50Mz4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz48L2E6YWNjZW50ND4nLHJbci5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50NT4n'@;
put 'LHJbci5sZW5ndGhdPSc8YTphY2NlbnQ2PjxhOnNyZ2JDbHIgdmFsPSJGNzk2NDYiLz48L2E6YWNjZW50Nj4nLHJbci5sZW5ndGhdPSc8YTpobGluaz48YTpzcmdiQ2xyIHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicscltyLmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPSI4'@;
put 'MDAwODAiLz48L2E6Zm9sSGxpbms+JyxyW3IubGVuZ3RoXT0iPC9hOmNsclNjaGVtZT4iLHJbci5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxyW3IubGVuZ3RoXT0iPGE6bWFqb3JGb250PiIscltyLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlhIi8+'@;
put 'JyxyW3IubGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicscltyLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLHJb'@;
put 'ci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJI'@;
put 'YW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBS'@;
put 'b21hbiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0i'@;
put 'VnJpbmRhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBl'@;
put 'ZmFjZT0iVHVuZ2EiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0'@;
put 'eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlh'@;
put 'Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9Ikdh'@;
put 'dXRhbWkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlh'@;
put 'IiB0eXBlZmFjZT0iS2FsaW5nYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp'@;
put 'cHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+'@;
put 'JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxyW3IubGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLHJbci5sZW5ndGhd'@;
put 'PSI8YTptaW5vckZvbnQ+IixyW3IubGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbGlicmkiLz4nLHJbci5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxyW3IubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0'@;
put 'eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5z'@;
put 'IiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+JyxyW3IubGVu'@;
put 'Z3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicscltyLmxl'@;
put 'bmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+Jyxy'@;
put 'W3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+'@;
put 'JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp'@;
put 'cHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicscltyLmxlbmd0'@;
put 'aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3Nh'@;
put 'Ii8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJE'@;
put 'b2tDaGFtcGEiLz4nLHJbci5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxyW3IubGVuZ3RoXT0nPGE6Zm9udCBzY3Jp'@;
put 'cHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicscltyLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicscltyLmxlbmd0aF09'@;
put 'IjwvYTptaW5vckZvbnQ+IixyW3IubGVuZ3RoXT0iPC9hOmZvbnRTY2hlbWU+IixyW3IubGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxyW3IubGVuZ3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIscltyLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJw'@;
put 'aENsciIvPjwvYTpzb2xpZEZpbGw+JyxyW3IubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLHJbci5sZW5ndGhdPSI8YTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48'@;
put 'YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6'@;
put 'Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3Ro'@;
put 'XT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMSIvPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicscltyLmxlbmd0aF09IjxhOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6'@;
put 'c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxMDAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJw'@;
put 'aENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0i'@;
put 'MCIvPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSI8L2E6ZmlsbFN0eWxlTHN0PiIscltyLmxlbmd0aF09IjxhOmxuU3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRG'@;
put 'aWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9Ijk1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxyW3IubGVuZ3RoXT0nPGE6bG4gdz0iMjU0MDAi'@;
put 'IGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLHJbci5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBk'@;
put 'PSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicscltyLmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIscltyLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlTHN0'@;
put 'PiIscltyLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAw'@;
put 'MDAwMCI+PGE6YWxwaGEgdmFsPSIzODAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixyW3IubGVuZ3RoXT0iPGE6ZWZm'@;
put 'ZWN0THN0PiIscltyLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hk'@;
put 'dz4nLHJbci5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIscltyLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLHJbci5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBk'@;
put 'aXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicscltyLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixyW3IubGVuZ3RoXT0nPGE6c2Nl'@;
put 'bmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTpsaWdodFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGlnaHRS'@;
put 'aWc+PC9hOnNjZW5lM2Q+JyxyW3IubGVuZ3RoXT0nPGE6c3AzZD48YTpiZXZlbFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+JyxyW3IubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIscltyLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSI8YTpiZ0Zp'@;
put 'bGxTdHlsZUxzdD4iLHJbci5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicscltyLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxyW3IubGVuZ3RoXT0iPGE6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6'@;
put 'Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxyW3IubGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRp'@;
put 'bnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRlIHZhbD0iOTkwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAiLz48'@;
put 'YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLHJbci5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixyW3IubGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPjwv'@;
put 'YTpwYXRoPicscltyLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLHJbci5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicscltyLmxlbmd0aF09IjxhOmdzTHN0PiIscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQg'@;
put 'dmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIvPjwv'@;
put 'YTpzY2hlbWVDbHI+PC9hOmdzPicscltyLmxlbmd0aF09IjwvYTpnc0xzdD4iLHJbci5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicscltyLmxlbmd0aF09IjwvYTpn'@;
put 'cmFkRmlsbD4iLHJbci5sZW5ndGhdPSI8L2E6YmdGaWxsU3R5bGVMc3Q+IixyW3IubGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLHJbci5sZW5ndGhdPSI8L2E6dGhlbWVFbGVtZW50cz4iLHJbci5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLHJbci5sZW5ndGhdPSI8YTpzcERlZj4iLHJb'@;
put 'ci5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJl'@;
put 'Zj48YTplZmZlY3RSZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLHJbci5sZW5ndGhdPSI8L2E6c3BEZWY+IixyW3Iu'@;
put 'bGVuZ3RoXT0iPGE6bG5EZWY+IixyW3IubGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIgdmFs'@;
put 'PSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxyW3IubGVu'@;
put 'Z3RoXT0iPC9hOmxuRGVmPiIscltyLmxlbmd0aF09IjwvYTpvYmplY3REZWZhdWx0cz4iLHJbci5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+IixyW3IubGVuZ3RoXT0iPC9hOnRoZW1lPiIsci5qb2luKCIiKX0oKSk7dmFyIHIsYT17fTtpZighKHI9ZS5tYXRjaChYMSkpKXRocm93'@;
put 'IG5ldyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91bmQgaW4gdGhlbWUiKTtyZXR1cm4gZnVuY3Rpb24gVjEoZSx0LHIpe3ZhciBhO3QudGhlbWVFbGVtZW50cz17fSxbWyJjbHJTY2hlbWUiLFUxLEwxXSxbImZvbnRTY2hlbWUiLFcxLEIxXSxbImZtdFNjaGVtZSIsSDEsTTFdXS5mb3JF'@;
put 'YWNoKGZ1bmN0aW9uKG4pe2lmKCEoYT1lLm1hdGNoKG5bMV0pKSl0aHJvdyBuZXcgRXJyb3IoblswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7blsyXShhLHQscil9KX0oclswXSxhLHQpLGEucmF3PWUsYX1mdW5jdGlvbiBZMShlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1l'@;
put 'LnJlYWRfc2hpZnQoMiktNCxhPVt0XTtzd2l0Y2godCl7Y2FzZSA0OmNhc2UgNTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzphWzFdPWZ1bmN0aW9uICQxKGUpe3ZhciB0PXt9O3N3aXRjaCh0LnhjbHJUeXBlPWUucmVhZF9zaGlmdCgyKSx0Lm5UaW50U2hh'@;
put 'ZGU9ZS5yZWFkX3NoaWZ0KDIpLHQueGNsclR5cGUpe2Nhc2UgMDpjYXNlIDQ6ZS5sKz00O2JyZWFrO2Nhc2UgMTp0LnhjbHJWYWx1ZT1mdW5jdGlvbiBqMShlLHQpe3JldHVybiBwcihlLHQpfShlLDQpO2JyZWFrO2Nhc2UgMjp0LnhjbHJWYWx1ZT1NcyhlKTticmVhaztjYXNlIDM6dC54Y2xy'@;
put 'VmFsdWU9ZnVuY3Rpb24gejEoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCg0KX0oZSl9cmV0dXJuIGUubCs9OCx0fShlKTticmVhaztjYXNlIDY6YVsxXT1mdW5jdGlvbiBLMShlLHQpe3JldHVybiBwcihlLHQpfShlLHIpO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTphWzFdPWUucmVhZF9zaGlmdCgx'@;
put 'PT09cj8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK3QrIiAiK3IpfXJldHVybiBhfWZ1bmN0aW9uIHExKGUsdCl7dC5mb3JFYWNoKGZ1bmN0aW9uKHIpe30pfWZ1bmN0aW9uIGdmKGUsdCxyLGEpe3ZhciBpLG49QXJyYXku'@;
put 'aXNBcnJheShlKTt0LmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9R2Uocy5yZWYpO2lmKG4/KGVbZi5yXXx8KGVbZi5yXT1bXSksaT1lW2Yucl1bZi5jXSk6aT1lW3MucmVmXSwhaSl7aT17dDoieiJ9LG4/ZVtmLnJdW2YuY109aTplW3MucmVmXT1pO3ZhciBjPURlKGVbIiFyZWYiXXx8IkJE'@;
put 'V0dPMTAwMDAwMTpBMSIpO2Mucy5yPmYuciYmKGMucy5yPWYuciksYy5lLnI8Zi5yJiYoYy5lLnI9Zi5yKSxjLnMuYz5mLmMmJihjLnMuYz1mLmMpLGMuZS5jPGYuYyYmKGMuZS5jPWYuYyk7dmFyIG89d2UoYyk7byE9PWVbIiFyZWYiXSYmKGVbIiFyZWYiXT1vKX1pLmN8fChpLmM9W10pO3Zh'@;
put 'ciBsPXthOnMuYXV0aG9yLHQ6cy50LHI6cy5yLFQ6cn07cy5oJiYobC5oPXMuaCk7Zm9yKHZhciBoPWkuYy5sZW5ndGgtMTtoPj0wOy0taCl7aWYoIXImJmkuY1toXS5UKXJldHVybjtyJiYhaS5jW2hdLlQmJmkuYy5zcGxpY2UoaCwxKX1pZihyJiZhKWZvcihoPTA7aDxhLmxlbmd0aDsrK2gp'@;
put 'aWYobC5hPT1hW2hdLmlkKXtsLmE9YVtoXS5uYW1lfHxsLmE7YnJlYWt9aS5jLnB1c2gobCl9KX12YXIgd3g9bXIsU3g9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsdWE9ZnVuY3Rpb24oKXt2YXIgZT0vKF58W15BLVphLXpfXSlSKFxbPy0/XGQrXF18WzEtOV1cZCp8'@;
put 'KUMoXFs/LT9cZCtcXXxbMS05XVxkKnwpKD8hW0EtWmEtejAtOV9dKS9nLHQ9e3I6MCxjOjB9O2Z1bmN0aW9uIHIoYSxuLGkscyl7dmFyIGY9ITEsYz0hMTswPT1pLmxlbmd0aD9jPSEwOiJbIj09aS5jaGFyQXQoMCkmJihjPSEwLGk9aS5zbGljZSgxLC0xKSksMD09cy5sZW5ndGg/Zj0hMDoi'@;
put 'WyI9PXMuY2hhckF0KDApJiYoZj0hMCxzPXMuc2xpY2UoMSwtMSkpO3ZhciBvPWkubGVuZ3RoPjA/MHxwYXJzZUludChpLDEwKTowLGw9cy5sZW5ndGg+MD8wfHBhcnNlSW50KHMsMTApOjA7cmV0dXJuIGY/bCs9dC5jOi0tbCxjP28rPXQucjotLW8sbisoZj8iIjoiJCIpK0hlKGwpKyhjPyIi'@;
put 'OiIkIikrS2Uobyl9cmV0dXJuIGZ1bmN0aW9uKG4saSl7cmV0dXJuIHQ9aSxuLnJlcGxhY2UoZSxyKX19KCksT249LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7'@;
put 'M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2csSW49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5yZXBsYWNlKE9uLGZ1bmN0aW9uKGEsbixpLHMsZixjKXt2YXIgbz1ubihz'@;
put 'KS0oaT8wOnIuYyksbD1hbihjKS0oZj8wOnIucik7cmV0dXJuIG4rIlIiKygwPT1sPyIiOmY/bCsxOiJbIitsKyJdIikrIkMiKygwPT1vPyIiOmk/bysxOiJbIitvKyJdIil9KX19KCk7ZnVuY3Rpb24ga2YoZSx0KXtyZXR1cm4gZS5yZXBsYWNlKE9uLGZ1bmN0aW9uKHIsYSxuLGkscyxmKXty'@;
put 'ZXR1cm4gYSsoIiQiPT1uP24raTpIZShubihpKSt0LmMpKSsoIiQiPT1zP3MrZjpLZShhbihmKSt0LnIpKX0pfWZ1bmN0aW9uIEl4KGUsdCxyKXt2YXIgbj1Qcih0KS5zLGk9R2Uocik7cmV0dXJuIGtmKGUse3I6aS5yLW4ucixjOmkuYy1uLmN9KX1mdW5jdGlvbiBFZihlKXtyZXR1cm4gZS5y'@;
put 'ZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIGFyKGUpe2UubCs9MX1mdW5jdGlvbiBBdChlLHQpe3ZhciByPWUucmVhZF9zaGlmdCgxPT10PzE6Mik7cmV0dXJuWzE2MzgzJnIscj4+MTQmMSxyPj4xNSYxXX1mdW5jdGlvbiBUZihlLHQscil7dmFyIGE9MjtpZihyKXtpZihyLmJpZmY+'@;
put 'PTImJnIuYmlmZjw9NSlyZXR1cm4gU2YoZSk7MTI9PXIuYmlmZiYmKGE9NCl9dmFyIG49ZS5yZWFkX3NoaWZ0KGEpLGk9ZS5yZWFkX3NoaWZ0KGEpLHM9QXQoZSwyKSxmPUF0KGUsMik7cmV0dXJue3M6e3I6bixjOnNbMF0sY1JlbDpzWzFdLHJSZWw6c1syXX0sZTp7cjppLGM6ZlswXSxjUmVs'@;
put 'OmZbMV0sclJlbDpmWzJdfX19ZnVuY3Rpb24gU2YoZSl7dmFyIHQ9QXQoZSwyKSxyPUF0KGUsMiksYT1lLnJlYWRfc2hpZnQoMSksbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJue3M6e3I6dFswXSxjOmEsY1JlbDp0WzFdLHJSZWw6dFsyXX0sZTp7cjpyWzBdLGM6bixjUmVsOnJbMV0sclJlbDpy'@;
put 'WzJdfX19ZnVuY3Rpb24gRmYoZSx0LHIpe2lmKHImJnIuYmlmZj49MiYmci5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBieChlKXt2YXIgdD1BdChlLDIpLHI9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybntyOnRbMF0sYzpyLGNSZWw6dFsxXSxyUmVsOnRbMl19fShlKTt2YXIgYT1lLnJlYWRfc2hp'@;
put 'ZnQociYmMTI9PXIuYmlmZj80OjIpLG49QXQoZSwyKTtyZXR1cm57cjphLGM6blswXSxjUmVsOm5bMV0sclJlbDpuWzJdfX1mdW5jdGlvbiBQeChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1lLnJlYWRfc2hpZnQoMik7cmV0dXJue3I6dCxjOjI1NSZyLGZRdW90ZWQ6ISEoMTYzODQmciks'@;
put 'Y1JlbDpyPj4xNSxyUmVsOnI+PjE1fX1mdW5jdGlvbiB5ZihlKXt2YXIgdD0xJmVbZS5sKzFdO3JldHVybiBlLmwrPTQsW3QsMV19ZnVuY3Rpb24gQWYoZSl7cmV0dXJuW2UucmVhZF9zaGlmdCgxKSxlLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIGxkKGUsdCl7dmFyIHI9W2UucmVhZF9zaGlm'@;
put 'dCgxKV07aWYoMTI9PXQpc3dpdGNoKHJbMF0pe2Nhc2UgMjpyWzBdPTQ7YnJlYWs7Y2FzZSA0OnJbMF09MTY7YnJlYWs7Y2FzZSAwOnJbMF09MTticmVhaztjYXNlIDE6clswXT0yfXN3aXRjaChyWzBdKXtjYXNlIDQ6clsxXT1KZShlLDEpPyJUUlVFIjoiRkFMU0UiLDEyIT10JiYoZS5sKz03'@;
put 'KTticmVhaztjYXNlIDM3OmNhc2UgMTY6clsxXT14dFtlW2UubF1dLGUubCs9MTI9PXQ/NDo4O2JyZWFrO2Nhc2UgMDplLmwrPTg7YnJlYWs7Y2FzZSAxOnJbMV09Z3IoZSk7YnJlYWs7Y2FzZSAyOnJbMV09enQoZSwwLHtiaWZmOnQ+MCYmdDw4PzI6dH0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cg'@;
put 'bmV3IEVycm9yKCJCYWQgU2VyQXI6ICIrclswXSl9cmV0dXJuIHJ9ZnVuY3Rpb24gdWQoZSx0LHIpe2Zvcih2YXIgYT1lLnJlYWRfc2hpZnQoMTI9PXIuYmlmZj80OjIpLG49W10saT0wO2khPWE7KytpKW4ucHVzaCgoMTI9PXIuYmlmZj9XdDprMCkoZSw4KSk7cmV0dXJuIG59ZnVuY3Rpb24g'@;
put 'aGQoZSx0LHIpe3ZhciBhPTAsbj0wOzEyPT1yLmJpZmY/KGE9ZS5yZWFkX3NoaWZ0KDQpLG49ZS5yZWFkX3NoaWZ0KDQpKToobj0xK2UucmVhZF9zaGlmdCgxKSxhPTErZS5yZWFkX3NoaWZ0KDIpKSxyLmJpZmY+PTImJnIuYmlmZjw4JiYoLS1hLDA9PS0tbiYmKG49MjU2KSk7Zm9yKHZhciBp'@;
put 'PTAscz1bXTtpIT1hJiYoc1tpXT1bXSk7KytpKWZvcih2YXIgZj0wO2YhPW47KytmKXNbaV1bZl09bGQoZSxyLmJpZmYpO3JldHVybiBzfWZ1bmN0aW9uIFVhKGUsdCxyKXtyZXR1cm4gZS5sKz0yLFtQeChlKV19ZnVuY3Rpb24gUm4oZSl7cmV0dXJuIGUubCs9NixbXX1mdW5jdGlvbiBDZihl'@;
put 'KXtyZXR1cm4gZS5sKz0yLFt0cihlKSwxJmUucmVhZF9zaGlmdCgyKV19dmFyIFJkPVsiRGF0YSIsIkFsbCIsIkhlYWRlcnMiLCI/PyIsIj9EYXRhMiIsIj8/IiwiP0RhdGFIZWFkZXJzIiwiPz8iLCJUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/RGF0YVRvdGFscyIsIj8/IiwiPz8iLCI/PyIs'@;
put 'Ij9DdXJyZW50Il0sRGY9ezE6e246IlB0Z0V4cCIsZjpmdW5jdGlvbiBuZChlLHQscil7cmV0dXJuIGUubCsrLHImJjEyPT1yLmJpZmY/W2UucmVhZF9zaGlmdCg0LCJpIiksMF06W2UucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6MildfX0sMjp7bjoiUHRnVGJs'@;
put 'IixmOnByfSwzOntuOiJQdGdBZGQiLGY6YXJ9LDQ6e246IlB0Z1N1YiIsZjphcn0sNTp7bjoiUHRnTXVsIixmOmFyfSw2OntuOiJQdGdEaXYiLGY6YXJ9LDc6e246IlB0Z1Bvd2VyIixmOmFyfSw4OntuOiJQdGdDb25jYXQiLGY6YXJ9LDk6e246IlB0Z0x0IixmOmFyfSwxMDp7bjoiUHRnTGUi'@;
put 'LGY6YXJ9LDExOntuOiJQdGdFcSIsZjphcn0sMTI6e246IlB0Z0dlIixmOmFyfSwxMzp7bjoiUHRnR3QiLGY6YXJ9LDE0OntuOiJQdGdOZSIsZjphcn0sMTU6e246IlB0Z0lzZWN0IixmOmFyfSwxNjp7bjoiUHRnVW5pb24iLGY6YXJ9LDE3OntuOiJQdGdSYW5nZSIsZjphcn0sMTg6e246IlB0'@;
put 'Z1VwbHVzIixmOmFyfSwxOTp7bjoiUHRnVW1pbnVzIixmOmFyfSwyMDp7bjoiUHRnUGVyY2VudCIsZjphcn0sMjE6e246IlB0Z1BhcmVuIixmOmFyfSwyMjp7bjoiUHRnTWlzc0FyZyIsZjphcn0sMjM6e246IlB0Z1N0ciIsZjpmdW5jdGlvbiBvZChlLHQscil7cmV0dXJuIGUubCsrLFJhKGUs'@;
put 'MCxyKX19LDI2OntuOiJQdGdTaGVldCIsZjpmdW5jdGlvbiBQZChlLHQscil7cmV0dXJuIGUubCs9NSxlLmwrPTIsZS5sKz0yPT1yLmJpZmY/MTo0LFsiUFRHU0hFRVQiXX19LDI3OntuOiJQdGdFbmRTaGVldCIsZjpmdW5jdGlvbiBMZChlLHQscil7cmV0dXJuIGUubCs9Mj09ci5iaWZmPzQ6'@;
put 'NSxbIlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uIGlkKGUpe3JldHVybiBlLmwrKyx4dFtlLnJlYWRfc2hpZnQoMSldfX0sMjk6e246IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24gZmQoZSl7cmV0dXJuIGUubCsrLDAhPT1lLnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRn'@;
put 'SW50IixmOmZ1bmN0aW9uIHNkKGUpe3JldHVybiBlLmwrKyxlLnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixmOmZ1bmN0aW9uIGNkKGUpe3JldHVybiBlLmwrKyxncihlKX19LDMyOntuOiJQdGdBcnJheSIsZjpmdW5jdGlvbiBYeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+'@;
put 'NTtyZXR1cm4gZS5sKz0yPT1yLmJpZmY/NjoxMj09ci5iaWZmPzE0OjcsW2FdfX0sMzM6e246IlB0Z0Z1bmMiLGY6ZnVuY3Rpb24gZWQoZSx0LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O2UubCs9MTt2YXIgbj1lLnJlYWRfc2hpZnQociYmci5iaWZmPD0zPzE6Mik7cmV0dXJuW2F2W25dLFJm'@;
put 'W25dLGFdfX0sMzQ6e246IlB0Z0Z1bmNWYXIiLGY6ZnVuY3Rpb24gcmQoZSx0LHIpe3ZhciBhPWVbZS5sKytdLG49ZS5yZWFkX3NoaWZ0KDEpLGk9ciYmci5iaWZmPD0zP1s4OD09YT8tMTowLGUucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gdGQoZSl7cmV0dXJuW2VbZS5sKzFdPj43LDMyNzY3'@;
put 'JmUucmVhZF9zaGlmdCgyKV19KGUpO3JldHVybltuLCgwPT09aVswXT9SZjp0dilbaVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24geGQoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgxKT4+PjUmMyxpPWUucmVhZF9zaGlmdCghcnx8ci5iaWZmPj04PzQ6Mik7c3dpdGNoKHIu'@;
put 'YmlmZil7Y2FzZSAyOmUubCs9NTticmVhaztjYXNlIDM6Y2FzZSA0OmUubCs9ODticmVhaztjYXNlIDU6ZS5sKz0xMn1yZXR1cm5bYSwwLGldfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlvbiBxeChlLHQscil7dmFyIGE9KDk2JmVbZS5sXSk+PjU7cmV0dXJuIGUubCs9MSxbYSxGZihlLDAs'@;
put 'cildfX0sMzc6e246IlB0Z0FyZWEiLGY6ZnVuY3Rpb24gTXgoZSx0LHIpe3JldHVyblsoOTYmZVtlLmwrK10pPj41LFRmKGUsMCxyKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlvbiBwZChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBlLmwrPXImJjI9'@;
put 'PXIuYmlmZj8zOjQsW2EsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDM5OntuOiJQdGdNZW1FcnIiLGY6cHJ9LDQwOntuOiJQdGdNZW1Ob01lbSIsZjpwcn0sNDE6e246IlB0Z01lbUZ1bmMiLGY6ZnVuY3Rpb24gbWQoZSx0LHIpe3JldHVybltlLnJlYWRfc2hpZnQoMSk+Pj41'@;
put 'JjMsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDQyOntuOiJQdGdSZWZFcnIiLGY6ZnVuY3Rpb24gZ2QoZSx0LHIpe3ZhciBhPWUucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gZS5sKz00LHIuYmlmZjw4JiZlLmwtLSwxMj09ci5iaWZmJiYoZS5sKz0yKSxbYV19fSw0Mzp7'@;
put 'bjoiUHRnQXJlYUVyciIsZjpmdW5jdGlvbiBXeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+NTtyZXR1cm4gZS5sKz1yJiZyLmJpZmY+OD8xMjpyLmJpZmY8OD82OjgsW2FdfX0sNDQ6e246IlB0Z1JlZk4iLGY6ZnVuY3Rpb24gWngoZSx0LHIpe3ZhciBhPSg5NiZlW2UubF0pPj41O2Uu'@;
put 'bCs9MTt2YXIgbj1mdW5jdGlvbiBMeChlLHQscil7dmFyIGE9ciYmci5iaWZmP3IuYmlmZjo4O2lmKGE+PTImJmE8PTUpcmV0dXJuIGZ1bmN0aW9uIEJ4KGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgxKSxhPSgzMjc2OCZ0KT4+MTUsbj0oMTYzODQmdCk+PjE0O3Jl'@;
put 'dHVybiB0Jj0xNjM4MywxPT1hJiZ0Pj04MTkyJiYodC09MTYzODQpLDE9PW4mJnI+PTEyOCYmKHItPTI1Nikse3I6dCxjOnIsY1JlbDpuLHJSZWw6YX19KGUpO3ZhciBuPWUucmVhZF9zaGlmdChhPj0xMj80OjIpLGk9ZS5yZWFkX3NoaWZ0KDIpLHM9KDE2Mzg0JmkpPj4xNCxmPSgzMjc2OCZp'@;
put 'KT4+MTU7aWYoaSY9MTYzODMsMT09Zilmb3IoO24+NTI0Mjg3OyluLT0xMDQ4NTc2O2lmKDE9PXMpZm9yKDtpPjgxOTE7KWktPTE2Mzg0O3JldHVybntyOm4sYzppLGNSZWw6cyxyUmVsOmZ9fShlLDAscik7cmV0dXJuW2Esbl19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gVngoZSx0'@;
put 'LHIpe3ZhciBhPSg5NiZlW2UubCsrXSk+PjUsbj1mdW5jdGlvbiBOeChlLHQscil7aWYoci5iaWZmPDgpcmV0dXJuIFNmKGUpO3ZhciBhPWUucmVhZF9zaGlmdCgxMj09ci5iaWZmPzQ6Miksbj1lLnJlYWRfc2hpZnQoMTI9PXIuYmlmZj80OjIpLGk9QXQoZSwyKSxzPUF0KGUsMik7cmV0dXJu'@;
put 'e3M6e3I6YSxjOmlbMF0sY1JlbDppWzFdLHJSZWw6aVsyXX0sZTp7cjpuLGM6c1swXSxjUmVsOnNbMV0sclJlbDpzWzJdfX19KGUsMCxyKTtyZXR1cm5bYSxuXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBCZChlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDEpPj4+NSYzLGUucmVh'@;
put 'ZF9zaGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0aW9uIE1kKGUpe3JldHVybltlLnJlYWRfc2hpZnQoMSk+Pj41JjMsZS5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBkZChlLHQscil7cmV0dXJuIDU9PXIuYmlmZj9mdW5jdGlvbiB2'@;
put 'ZChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk+Pj41JjMscj1lLnJlYWRfc2hpZnQoMiwiaSIpO2UubCs9ODt2YXIgYT1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIGUubCs9MTIsW3QscixhXX0oZSk6W2UucmVhZF9zaGlmdCgxKT4+PjUmMyxlLnJlYWRfc2hpZnQoMiksZS5yZWFkX3NoaWZ0KDQp'@;
put 'XX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBReChlLHQscil7dmFyIGE9KDk2JmVbZS5sXSk+PjU7ZS5sKz0xO3ZhciBuPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gciYmNT09ci5iaWZmJiYoZS5sKz0xMiksW2EsbixGZihlLDAscildfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpmdW5j'@;
put 'dGlvbiBVeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+NSxuPWUucmVhZF9zaGlmdCgyLCJpIik7aWYociYmNT09PXIuYmlmZillLmwrPTEyO3JldHVyblthLG4sVGYoZSwwLHIpXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBfZChlLHQscil7dmFyIGE9KDk2JmVbZS5s'@;
put 'KytdKT4+NSxuPWUucmVhZF9zaGlmdCgyKSxpPTQ7aWYocilzd2l0Y2goci5iaWZmKXtjYXNlIDU6aT0xNTticmVhaztjYXNlIDEyOmk9Nn1yZXR1cm4gZS5sKz1pLFthLG5dfX0sNjE6e246IlB0Z0FyZWFFcnIzZCIsZjpmdW5jdGlvbiBIeChlLHQscil7dmFyIGE9KDk2JmVbZS5sKytdKT4+'@;
put 'NSxuPWUucmVhZF9zaGlmdCgyKSxpPTg7aWYocilzd2l0Y2goci5iaWZmKXtjYXNlIDU6ZS5sKz0xMixpPTY7YnJlYWs7Y2FzZSAxMjppPTEyfXJldHVybiBlLmwrPWksW2Esbl19fSwyNTU6e319LFdkPXs2NDozMiw5NjozMiw2NTozMyw5NzozMyw2NjozNCw5ODozNCw2NzozNSw5OTozNSw2'@;
put 'ODozNiwxMDA6MzYsNjk6MzcsMTAxOjM3LDcwOjM4LDEwMjozOCw3MTozOSwxMDM6MzksNzI6NDAsMTA0OjQwLDczOjQxLDEwNTo0MSw3NDo0MiwxMDY6NDIsNzU6NDMsMTA3OjQzLDc2OjQ0LDEwODo0NCw3Nzo0NSwxMDk6NDUsNzg6NDYsMTEwOjQ2LDc5OjQ3LDExMTo0Nyw4ODozNCwxMjA6'@;
put 'MzQsODk6NTcsMTIxOjU3LDkwOjU4LDEyMjo1OCw5MTo1OSwxMjM6NTksOTI6NjAsMTI0OjYwLDkzOjYxLDEyNTo2MX0sSGQ9ezE6e246IlB0Z0VsZkxlbCIsZjpDZn0sMjp7bjoiUHRnRWxmUnciLGY6VWF9LDM6e246IlB0Z0VsZkNvbCIsZjpVYX0sNjp7bjoiUHRnRWxmUndWIixmOlVhfSw3'@;
put 'OntuOiJQdGdFbGZDb2xWIixmOlVhfSwxMDp7bjoiUHRnRWxmUmFkaWNhbCIsZjpVYX0sMTE6e246IlB0Z0VsZlJhZGljYWxTIixmOlJufSwxMzp7bjoiUHRnRWxmQ29sUyIsZjpSbn0sMTU6e246IlB0Z0VsZkNvbFNWIixmOlJufSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjpDZn0sMjU6'@;
put 'e246IlB0Z0xpc3QiLGY6ZnVuY3Rpb24gTmQoZSl7ZS5sKz0yO3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgyKSxhPWUucmVhZF9zaGlmdCg0KSxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTp0LGNvbHR5cGU6MyZyLHJ0OlJkW3I+'@;
put 'PjImMzFdLGlkeDphLGM6bixDOml9fX0sMjk6e246IlB0Z1N4TmFtZSIsZjpmdW5jdGlvbiBiZChlKXtyZXR1cm4gZS5sKz0yLFtlLnJlYWRfc2hpZnQoNCldfX0sMjU1Ont9fSxWZD17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gVWQoZSl7cmV0dXJuIGUubCs9NCxbMCwwXX19LDE6'@;
put 'e246IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIEt4KGUsdCxyKXt2YXIgYT0yNTUmZVtlLmwrMV0/MTowO3JldHVybiBlLmwrPXImJjI9PXIuYmlmZj8zOjQsW2FdfX0sMjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uICR4KGUsdCxyKXt2YXIgYT0yNTUmZVtlLmwrMV0/MTowO3JldHVybiBl'@;
put 'LmwrPTIsW2EsZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gR3goZSx0LHIpe2UubCs9Mjtmb3IodmFyIGE9ZS5yZWFkX3NoaWZ0KHImJjI9PXIuYmlmZj8xOjIpLG49W10saT0wO2k8PWE7KytpKW4ucHVzaChlLnJlYWRf'@;
put 'c2hpZnQociYmMj09ci5iaWZmPzE6MikpO3JldHVybiBufX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gengoZSx0LHIpe3ZhciBhPTI1NSZlW2UubCsxXT8xOjA7cmV0dXJuIGUubCs9MixbYSxlLnJlYWRfc2hpZnQociYmMj09ci5iaWZmPzE6MildfX0sMTY6e246IlB0Z0F0dHJT'@;
put 'dW0iLGY6ZnVuY3Rpb24gYWQoZSx0LHIpe2UubCs9ciYmMj09ci5iaWZmPzM6NH19LDMyOntuOiJQdGdBdHRyQmF4Y2VsIixmOnlmfSwzMzp7bjoiUHRnQXR0ckJheGNlbCIsZjp5Zn0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiBZeChlKXtyZXR1cm4gZS5yZWFkX3NoaWZ0KDIp'@;
put 'LEFmKGUpfX0sNjU6e246IlB0Z0F0dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gSngoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCgyKSxBZihlKX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gangoZSl7dmFyIHQ9MjU1JmVbZS5sKzFdPzE6MDtyZXR1cm4gZS5sKz0yLFt0LGUu'@;
put 'cmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIFdhKGUsdCxyLGEpe2lmKGEuYmlmZjw4KXJldHVybiBwcihlLHQpO2Zvcih2YXIgbj1lLmwrdCxpPVtdLHM9MDtzIT09ci5sZW5ndGg7KytzKXN3aXRjaChyW3NdWzBdKXtjYXNlIlB0Z0FycmF5IjpyW3NdWzFdPWhkKGUsMCxhKSxp'@;
put 'LnB1c2gocltzXVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjpyW3NdWzJdPXVkKGUsMCxhKSxpLnB1c2gocltzXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOmEmJjEyPT1hLmJpZmYmJihyW3NdWzFdWzFdPWUucmVhZF9zaGlmdCg0KSxpLnB1c2gocltzXVsxXSkpO2JyZWFrO2Nhc2UiUHRn'@;
put 'TGlzdCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNWIjp0aHJvdyJVbnN1cHBvcnRlZCAiK3Jbc11bMF19cmV0dXJuIDAhPSh0PW4tZS5sKSYmaS5wdXNoKHByKGUsdCkpLGl9ZnVuY3Rpb24gSGEoZSx0LHIpe2Zvcih2YXIgbixpLGE9ZS5s'@;
put 'K3Qscz1bXTthIT1lLmw7KXQ9YS1lLmwsbj1EZltpPWVbZS5sXV18fERmW1dkW2ldXSwoMjQ9PT1pfHwyNT09PWkpJiYobj0oMjQ9PT1pP0hkOlZkKVtlW2UubCsxXV0pLG4mJm4uZj9zLnB1c2goW24ubixuLmYoZSx0LHIpXSk6cHIoZSx0KTtyZXR1cm4gc31mdW5jdGlvbiBYZChlKXtmb3Io'@;
put 'dmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXtmb3IodmFyIGE9ZVtyXSxuPVtdLGk9MDtpPGEubGVuZ3RoOysraSl7dmFyIHM9YVtpXTtuLnB1c2gocz8yPT09c1swXT8nIicrc1sxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOnNbMV06IiIpfXQucHVzaChuLmpvaW4oIiwiKSl9cmV0dXJu'@;
put 'IHQuam9pbigiOyIpfXZhciBHZD17UHRnQWRkOiIrIixQdGdDb25jYXQ6IiYiLFB0Z0RpdjoiLyIsUHRnRXE6Ij0iLFB0Z0dlOiI+PSIsUHRnR3Q6Ij4iLFB0Z0xlOiI8PSIsUHRnTHQ6IjwiLFB0Z011bDoiKiIsUHRnTmU6Ijw+IixQdGdQb3dlcjoiXiIsUHRnU3ViOiItIn07ZnVuY3Rpb24g'@;
put 'T2YoZSx0LHIpe2lmKCFlKXJldHVybiJTSDMzVEpTRVJSMCI7aWYoci5iaWZmPjgmJighZS5YVEl8fCFlLlhUSVt0XSkpcmV0dXJuIGUuU2hlZXROYW1lc1t0XTtpZighZS5YVEkpcmV0dXJuIlNIMzNUSlNFUlI2Ijt2YXIgYT1lLlhUSVt0XTtpZihyLmJpZmY8OClyZXR1cm4gdD4xZTQmJih0'@;
put 'LT02NTUzNiksdDwwJiYodD0tdCksMD09dD8iIjplLlhUSVt0LTFdO2lmKCFhKXJldHVybiJTSDMzVEpTRVJSMSI7dmFyIG49IiI7aWYoci5iaWZmPjgpc3dpdGNoKGVbYVswXV1bMF0pe2Nhc2UgMzU3OnJldHVybiBuPS0xPT1hWzFdPyIjUkVGIjplLlNoZWV0TmFtZXNbYVsxXV0sYVsxXT09'@;
put 'YVsyXT9uOm4rIjoiK2UuU2hlZXROYW1lc1thWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVsbCE9ci5TSUQ/ZS5TaGVldE5hbWVzW3IuU0lEXToiU0gzM1RKU1NBTUUiK2VbYVswXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIrZVthWzBdXVswXX1zd2l0Y2goZVthWzBdXVswXVswXSl7'@;
put 'Y2FzZSAxMDI1OnJldHVybiBuPS0xPT1hWzFdPyIjUkVGIjplLlNoZWV0TmFtZXNbYVsxXV18fCJTSDMzVEpTRVJSMyIsYVsxXT09YVsyXT9uOm4rIjoiK2UuU2hlZXROYW1lc1thWzJdXTtjYXNlIDE0ODQ5OnJldHVybiBlW2FbMF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihpKXtyZXR1cm4g'@;
put 'aS5OYW1lfSkuam9pbigiOzsiKTtkZWZhdWx0OnJldHVybiBlW2FbMF1dWzBdWzNdPyhuPS0xPT1hWzFdPyIjUkVGIjplW2FbMF1dWzBdWzNdW2FbMV1dfHwiU0gzM1RKU0VSUjQiLGFbMV09PWFbMl0/bjpuKyI6IitlW2FbMF1dWzBdWzNdW2FbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlv'@;
put 'biBJZihlLHQscil7dmFyIGE9T2YoZSx0LHIpO3JldHVybiIjUkVGIj09YT9hOmZ1bmN0aW9uIHpkKGUsdCl7aWYoIShlfHx0JiZ0LmJpZmY8PTUmJnQuYmlmZj49MikpdGhyb3cgbmV3IEVycm9yKCJlbXB0eSBzaGVldCBuYW1lIik7cmV0dXJuL1teXHdcdTRFMDAtXHU5RkZGXHUzMDQwLVx1'@;
put 'MzBGRl0vLnRlc3QoZSk/IiciK2UrIiciOmV9KGEscil9ZnVuY3Rpb24ga3IoZSx0LHIsYSxuKXt2YXIgYyxvLGwsZCxpPW4mJm4uYmlmZnx8OCxzPXtzOntjOjAscjowfSxlOntjOjAscjowfX0sZj1bXSxoPTAseD0wLHY9IiI7aWYoIWVbMF18fCFlWzBdWzBdKXJldHVybiIiO2Zvcih2YXIg'@;
put 'dT0tMSxwPSIiLGs9MCxUPWVbMF0ubGVuZ3RoO2s8VDsrK2spe3ZhciBnPWVbMF1ba107c3dpdGNoKGdbMF0pe2Nhc2UiUHRnVW1pbnVzIjpmLnB1c2goIi0iK2YucG9wKCkpO2JyZWFrO2Nhc2UiUHRnVXBsdXMiOmYucHVzaCgiKyIrZi5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdQZXJjZW50Ijpm'@;
put 'LnB1c2goZi5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRnTGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2Vy'@;
put 'IjpjYXNlIlB0Z1N1YiI6aWYoYz1mLnBvcCgpLG89Zi5wb3AoKSx1Pj0wKXtzd2l0Y2goZVswXVt1XVsxXVswXSl7Y2FzZSAwOnA9amUoIiAiLGVbMF1bdV1bMV1bMV0pO2JyZWFrO2Nhc2UgMTpwPWplKCJcciIsZVswXVt1XVsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihwPSIiLG4uV1RGKXRo'@;
put 'cm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrZVswXVt1XVsxXVswXSl9bys9cCx1PS0xfWYucHVzaChvK0dkW2dbMF1dK2MpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIiAiK2MpO2JyZWFrO2Nhc2UiUHRnVW5p'@;
put 'b24iOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIiwiK2MpO2JyZWFrO2Nhc2UiUHRnUmFuZ2UiOmM9Zi5wb3AoKSxvPWYucG9wKCksZi5wdXNoKG8rIjoiK2MpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6Y2FzZSJQdGdBdHRyR290byI6Y2FzZSJQdGdBdHRySWYiOmNhc2UiUHRn'@;
put 'QXR0cklmRXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQdGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRnTWVtTm9NZW1OIjpjYXNlIlB0Z0F0dHJOb29wIjpjYXNlIlB0Z1NoZWV0'@;
put 'IjpjYXNlIlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJyZWFrO2Nhc2UiUHRnUmVmIjpsPUNhKGdbMV1bMV0scyxuKSxmLnB1c2goRGEobCxpKSk7YnJlYWs7Y2FzZSJQdGdSZWZOIjpsPXI/Q2EoZ1sxXVsxXSxyLG4pOmdbMV1bMV0sZi5wdXNoKERh'@;
put 'KGwsaSkpO2JyZWFrO2Nhc2UiUHRnUmVmM2QiOmg9Z1sxXVsxXSxsPUNhKGdbMV1bMl0scyxuKSx2PUlmKGEsaCxuKSxmLnB1c2godisiISIrRGEobCxpKSk7YnJlYWs7Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNWYXIiOnZhciBNPWdbMV1bMF0sST1nWzFdWzFdO018fChNPTApO3ZhciB5'@;
put 'PTA9PShNJj0xMjcpP1tdOmYuc2xpY2UoLU0pO2YubGVuZ3RoLT1NLCJVc2VyIj09PUkmJihJPXkuc2hpZnQoKSksZi5wdXNoKEkrIigiK3kuam9pbigiLCIpKyIpIik7YnJlYWs7Y2FzZSJQdGdCb29sIjpmLnB1c2goZ1sxXT8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJQdGdJbnQiOmNh'@;
put 'c2UiUHRnRXJyIjpmLnB1c2goZ1sxXSk7YnJlYWs7Y2FzZSJQdGdOdW0iOmYucHVzaChTdHJpbmcoZ1sxXSkpO2JyZWFrO2Nhc2UiUHRnU3RyIjpmLnB1c2goJyInK2dbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdBcmVhTiI6ZD1ucyhnWzFdWzFdLHI/e3M6cn06'@;
put 'cyxuKSxmLnB1c2godG4oZCxuKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjpkPW5zKGdbMV1bMV0scyxuKSxmLnB1c2godG4oZCxuKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOmQ9Z1sxXVsyXSx2PUlmKGEsaD1nWzFdWzFdLG4pLGYucHVzaCh2KyIhIit0bihkLG4pKTticmVhaztjYXNlIlB0Z0F0'@;
put 'dHJTdW0iOmYucHVzaCgiU1VNKCIrZi5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UiUHRnTmFtZSI6dmFyIFA9KGEubmFtZXN8fFtdKVsoeD1nWzFdWzJdKS0xXXx8KGFbMF18fFtdKVt4XSxSPVA/UC5OYW1lOiJTSDMzVEpTTkFNRSIrU3RyaW5nKHgpO1ImJiJfeGxmbi4iPT1SLnNsaWNlKDAsNikm'@;
put 'JiFuLnhsZm4mJihSPVIuc2xpY2UoNikpLGYucHVzaChSKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgWCxWPWdbMV1bMV07aWYoeD1nWzFdWzJdLCEobi5iaWZmPD01KSl7dmFyIGI9IiI7aWYoMTQ4NDk9PSgoYVtWXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKGFbVl18fFtdKVswXXx8'@;
put 'W10pWzBdP2FbVl1beF0mJmFbVl1beF0uaXRhYj4wJiYoYj1hLlNoZWV0TmFtZXNbYVtWXVt4XS5pdGFiLTFdKyIhIik6Yj1hLlNoZWV0TmFtZXNbeC0xXSsiISIpLGFbVl0mJmFbVl1beF0pYis9YVtWXVt4XS5OYW1lO2Vsc2UgaWYoYVswXSYmYVswXVt4XSliKz1hWzBdW3hdLk5hbWU7ZWxz'@;
put 'ZXt2YXIgZWU9KE9mKGEsVixuKXx8IiIpLnNwbGl0KCI7OyIpO2VlW3gtMV0/Yj1lZVt4LTFdOmIrPSJTSDMzVEpTRVJSWCJ9Zi5wdXNoKGIpO2JyZWFrfVY8MCYmKFY9LVYpLGFbVl0mJihYPWFbVl1beF0pLFh8fChYPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSxmLnB1c2goWC5OYW1lKTticmVh'@;
put 'aztjYXNlIlB0Z1BhcmVuIjp2YXIgbGU9IigiLHJlPSIpIjtpZih1Pj0wKXtzd2l0Y2gocD0iIixlWzBdW3VdWzFdWzBdKXtjYXNlIDI6bGU9amUoIiAiLGVbMF1bdV1bMV1bMV0pK2xlO2JyZWFrO2Nhc2UgMzpsZT1qZSgiXHIiLGVbMF1bdV1bMV1bMV0pK2xlO2JyZWFrO2Nhc2UgNDpyZT1q'@;
put 'ZSgiICIsZVswXVt1XVsxXVsxXSkrcmU7YnJlYWs7Y2FzZSA1OnJlPWplKCJcciIsZVswXVt1XVsxXVsxXSkrcmU7YnJlYWs7ZGVmYXVsdDppZihuLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2VbMF1bdV1bMV1bMF0pfXU9LTF9Zi5wdXNoKGxl'@;
put 'K2YucG9wKCkrcmUpO2JyZWFrO2Nhc2UiUHRnUmVmRXJyIjpjYXNlIlB0Z1JlZkVycjNkIjpjYXNlIlB0Z0FyZWFFcnIiOmNhc2UiUHRnQXJlYUVycjNkIjpmLnB1c2goIiNSRUYhIik7YnJlYWs7Y2FzZSJQdGdFeHAiOnZhciBkZT17YzpyLmMscjpyLnJ9O2lmKGEuc2hhcmVkZltnZShsPXtj'@;
put 'OmdbMV1bMV0scjpnWzFdWzBdfSldKXt2YXIgdWU9YS5zaGFyZWRmW2dlKGwpXTtmLnB1c2goa3IodWUsMCxkZSxhLG4pKX1lbHNle3ZhciBGZT0hMTtmb3IoYz0wO2MhPWEuYXJyYXlmLmxlbmd0aDsrK2MpaWYoIShsLmM8KG89YS5hcnJheWZbY10pWzBdLnMuY3x8bC5jPm9bMF0uZS5jfHxs'@;
put 'LnI8b1swXS5zLnJ8fGwucj5vWzBdLmUucikpe2YucHVzaChrcihvWzFdLDAsZGUsYSxuKSksRmU9ITA7YnJlYWt9RmV8fGYucHVzaChnWzFdKX1icmVhaztjYXNlIlB0Z0FycmF5IjpmLnB1c2goInsiK1hkKGdbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNhc2UiUHRnQXR0'@;
put 'clNwYWNlU2VtaSI6dT1rO2JyZWFrO2Nhc2UiUHRnTWlzc0FyZyI6Zi5wdXNoKCIiKTticmVhaztjYXNlIlB0Z0xpc3QiOmYucHVzaCgiVGFibGUiK2dbMV0uaWR4KyJbIyIrZ1sxXS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29s'@;
put 'U1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZz'@;
put 'Iik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAiK1N0cmluZyhnKSl9aWYoMyE9bi5iaWZmJiZ1Pj0wJiYtMT09WyJQdGdBdHRyU3BhY2UiLCJQdGdBdHRyU3BhY2VTZW1pIiwiUHRnQXR0ckdvdG8iXS5pbmRleE9mKGVbMF1ba11bMF0pKXt2'@;
put 'YXIgeGU9ITA7c3dpdGNoKChnPWVbMF1bdV0pWzFdWzBdKXtjYXNlIDQ6eGU9ITE7Y2FzZSAwOnA9amUoIiAiLGdbMV1bMV0pO2JyZWFrO2Nhc2UgNTp4ZT0hMTtjYXNlIDE6cD1qZSgiXHIiLGdbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYocD0iIixuLldURil0aHJvdyBuZXcgRXJyb3IoIlVu'@;
put 'ZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK2dbMV1bMF0pfWYucHVzaCgoeGU/cDoiIikrZi5wb3AoKSsoeGU/IiI6cCkpLHU9LTF9fWlmKGYubGVuZ3RoPjEmJm4uV1RGKXRocm93IG5ldyBFcnJvcigiYmFkIGZvcm11bGEgc3RhY2siKTtyZXR1cm4gZlswXX1mdW5jdGlvbiAkZChlLHQs'@;
put 'cil7dmFyIGksYT1lLmwrdCxuPTI9PXIuYmlmZj8xOjIscz1lLnJlYWRfc2hpZnQobik7aWYoNjU1MzU9PXMpcmV0dXJuW1tdLHByKGUsdC0yKV07dmFyIGY9SGEoZSxzLHIpO3JldHVybiB0IT09cytuJiYoaT1XYShlLHQtcy1uLGYscikpLGUubD1hLFtmLGldfWZ1bmN0aW9uIFlkKGUsdCxy'@;
put 'KXt2YXIgbixhPWUubCt0LGk9ZS5yZWFkX3NoaWZ0KDIpLHM9SGEoZSxpLHIpO3JldHVybiA2NTUzNT09aT9bW10scHIoZSx0LTIpXToodCE9PWkrMiYmKG49V2EoZSxhLWktMixzLHIpKSxbcyxuXSl9ZnVuY3Rpb24gTm4oZSx0LHIpe3ZhciBhPWUubCt0LG49bnQoZSk7Mj09ci5iaWZmJiYr'@;
put 'K2UubDt2YXIgaT1mdW5jdGlvbiBKZChlKXt2YXIgdDtpZig2NTUzNSE9PXV0KGUsZS5sKzYpKXJldHVybltncihlKSwibiJdO3N3aXRjaChlW2UubF0pe2Nhc2UgMDpyZXR1cm4gZS5sKz04LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4gdD0xPT09ZVtlLmwrMl0sZS5sKz04LFt0LCJi'@;
put 'Il07Y2FzZSAyOnJldHVybiB0PWVbZS5sKzJdLGUubCs9OCxbdCwiZSJdO2Nhc2UgMzpyZXR1cm4gZS5sKz04LFsiIiwicyJdfXJldHVybltdfShlKSxzPWUucmVhZF9zaGlmdCgxKTsyIT1yLmJpZmYmJihlLnJlYWRfc2hpZnQoMSksci5iaWZmPj01JiZlLnJlYWRfc2hpZnQoNCkpO3ZhciBm'@;
put 'PWZ1bmN0aW9uIGpkKGUsdCxyKXt2YXIgaSxhPWUubCt0LG49Mj09ci5iaWZmPzE6MixzPWUucmVhZF9zaGlmdChuKTtpZig2NTUzNT09cylyZXR1cm5bW10scHIoZSx0LTIpXTt2YXIgZj1IYShlLHMscik7cmV0dXJuIHQhPT1zK24mJihpPVdhKGUsdC1zLW4sZixyKSksZS5sPWEsW2YsaV19'@;
put 'KGUsYS1lLmwscik7cmV0dXJue2NlbGw6bix2YWw6aVswXSxmb3JtdWxhOmYsc2hhcmVkOnM+PjMmMSx0dDppWzFdfX1mdW5jdGlvbiBBMChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0KDQpLG49SGEoZSxhLHIpLGk9ZS5yZWFkX3NoaWZ0KDQpO3JldHVybltuLGk+MD9XYShlLGksbixyKTpu'@;
put 'dWxsXX12YXIgUWQ9QTAsQzA9QTAsZXY9QTAscnY9QTAsdHY9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwx'@;
put 'MDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVB'@;
put 'SyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2'@;
put 'OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9O'@;
put 'Iiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1F'@;
put 'Iiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVS'@;
put 'WS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVY'@;
put 'VCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIs'@;
put 'OTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEu'@;
put 'RklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEw'@;
put 'OiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQ'@;
put 'Qk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlT'@;
put 'IiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VU'@;
put 'TElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQi'@;
put 'LDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwx'@;
put 'Njc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4'@;
put 'NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4z'@;
put 'RC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9N'@;
put 'T1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJB'@;
put 'U1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5U'@;
put 'LlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIu'@;
put 'REFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJ'@;
put 'TkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFV'@;
put 'VE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JL'@;
put 'Qk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFku'@;
put 'VE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIs'@;
put 'MzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElW'@;
put 'T1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BU'@;
put 'SU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJH'@;
put 'QUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5B'@;
put 'REQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJP'@;
put 'UEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6'@;
put 'IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToi'@;
put 'U1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIs'@;
put 'NDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFD'@;
put 'RVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9Y'@;
put 'LlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5E'@;
put 'SUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVD'@;
put 'VC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9S'@;
put 'QkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04u'@;
put 'U0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFU'@;
put 'QVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToi'@;
put 'U0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFS'@;
put 'RUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lP'@;
put 'TlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LFJmPXswOiJDT1VOVCIsMToiSUYi'@;
put 'LDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIs'@;
put 'MTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxT'@;
put 'RSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9H'@;
put 'RVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4'@;
put 'OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNF'@;
put 'QVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVD'@;
put 'VElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJT'@;
put 'RVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RF'@;
put 'IiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJG'@;
put 'UkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0'@;
put 'ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1'@;
put 'ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5'@;
put 'OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQ'@;
put 'IiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5P'@;
put 'VEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VB'@;
put 'UkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRP'@;
put 'REFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5I'@;
put 'IiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoi'@;
put 'SU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxV'@;
put 'QVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIs'@;
put 'MjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0Ui'@;
put 'LDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9N'@;
put 'RElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9J'@;
put 'U1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBF'@;
put 'QVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2'@;
put 'OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4'@;
put 'OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxB'@;
put 'TksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklF'@;
put 'Vy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJU'@;
put 'SEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFI'@;
put 'VFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklO'@;
put 'IiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0'@;
put 'MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0'@;
put 'MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6'@;
put 'IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNF'@;
put 'RElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMi'@;
put 'LDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6'@;
put 'Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpT'@;
put 'Iiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRD'@;
put 'T1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LGF2PXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6Miwz'@;
put 'MDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4'@;
put 'MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMx'@;
put 'OjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMs'@;
put 'MTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0'@;
put 'OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMs'@;
put 'MzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUx'@;
put 'OjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEs'@;
put 'NDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4'@;
put 'OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH07ZnVuY3Rpb24gTmYoZSl7cmV0dXJuIm9mOiI9PWUuc2xpY2UoMCwzKSYmKGU9ZS5zbGljZSgzKSksNjE9PWUuY2hhckNvZGVBdCgwKSYmNjE9PShlPWUuc2xpY2UoMSkpLmNoYXJDb2RlQXQoMCkm'@;
put 'JihlPWUuc2xpY2UoMSkpLChlPShlPShlPWUucmVwbGFjZSgvQ09NXC5NSUNST1NPRlRcLi9nLCIiKSkucmVwbGFjZSgvXFsoKD86XC5bQS1aXStbMC05XSspKD86OlwuW0EtWl0rWzAtOV0rKT8pXF0vZyxmdW5jdGlvbih0LHIpe3JldHVybiByLnJlcGxhY2UoL1wuL2csIiIpfSkpLnJlcGxh'@;
put 'Y2UoL1xbLigjW0EtWl0qWz8hXSlcXS9nLCIkMSIpKS5yZXBsYWNlKC9bO35dL2csIiwiKS5yZXBsYWNlKC9cfC9nLCI7Iil9ZnVuY3Rpb24gYm4oZSl7dmFyIHQ9ZS5zcGxpdCgiOiIpO3JldHVyblt0WzBdLnNwbGl0KCIuIilbMF0sdFswXS5zcGxpdCgiLiIpWzFdKyh0Lmxlbmd0aD4xPyI6'@;
put 'IisodFsxXS5zcGxpdCgiLiIpWzFdfHx0WzFdLnNwbGl0KCIuIilbMF0pOiIiKV19dmFyIFZhPXt9LGhhPXt9O2Z1bmN0aW9uIFl0KGUsdCl7aWYoZSl7dmFyIHI9Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09dCYmKHI9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1lLmxlZnQmJihlLmxl'@;
put 'ZnQ9clswXSksbnVsbD09ZS5yaWdodCYmKGUucmlnaHQ9clsxXSksbnVsbD09ZS50b3AmJihlLnRvcD1yWzJdKSxudWxsPT1lLmJvdHRvbSYmKGUuYm90dG9tPXJbM10pLG51bGw9PWUuaGVhZGVyJiYoZS5oZWFkZXI9cls0XSksbnVsbD09ZS5mb290ZXImJihlLmZvb3Rlcj1yWzVdKX19ZnVu'@;
put 'Y3Rpb24gYmYoZSx0LHIsYSxuLGkpe3RyeXthLmNlbGxORiYmKGUuej1wZVt0XSl9Y2F0Y2goZil7aWYoYS5XVEYpdGhyb3cgZn1pZigieiIhPT1lLnR8fGEuY2VsbFN0eWxlcyl7aWYoImQiPT09ZS50JiYic3RyaW5nIj09dHlwZW9mIGUudiYmKGUudj1YZShlLnYpKSwoIWF8fCExIT09YS5j'@;
put 'ZWxsVGV4dCkmJiJ6IiE9PWUudCl0cnl7aWYobnVsbD09cGVbdF0mJmV0KGFvW3RdfHwiR2VuZXJhbCIsdCksImUiPT09ZS50KWUudz1lLnd8fHh0W2Uudl07ZWxzZSBpZigwPT09dClpZigibiI9PT1lLnQpZS53PSgwfGUudik9PT1lLnY/ZS52LnRvU3RyaW5nKDEwKTprYShlLnYpO2Vsc2Ug'@;
put 'aWYoImQiPT09ZS50KXt2YXIgcz1pcihlLnYpO2Uudz0oMHxzKT09PXM/cy50b1N0cmluZygxMCk6a2Eocyl9ZWxzZXtpZih2b2lkIDA9PT1lLnYpcmV0dXJuIiI7ZS53PU50KGUudixoYSl9ZWxzZSBlLnc9UnIodCwiZCI9PT1lLnQ/aXIoZS52KTplLnYsaGEpfWNhdGNoKGYpe2lmKGEuV1RG'@;
put 'KXRocm93IGZ9aWYoYS5jZWxsU3R5bGVzJiZudWxsIT1yKXRyeXtlLnM9aS5GaWxsc1tyXSxlLnMuZmdDb2xvciYmZS5zLmZnQ29sb3IudGhlbWUmJiFlLnMuZmdDb2xvci5yZ2ImJihlLnMuZmdDb2xvci5yZ2I9VDAobi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtlLnMuZmdDb2xvci50aGVt'@;
put 'ZV0ucmdiLGUucy5mZ0NvbG9yLnRpbnR8fDApLGEuV1RGJiYoZS5zLmZnQ29sb3IucmF3X3JnYj1uLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2Uucy5mZ0NvbG9yLnRoZW1lXS5yZ2IpKSxlLnMuYmdDb2xvciYmZS5zLmJnQ29sb3IudGhlbWUmJihlLnMuYmdDb2xvci5yZ2I9VDAobi50aGVt'@;
put 'ZUVsZW1lbnRzLmNsclNjaGVtZVtlLnMuYmdDb2xvci50aGVtZV0ucmdiLGUucy5iZ0NvbG9yLnRpbnR8fDApLGEuV1RGJiYoZS5zLmJnQ29sb3IucmF3X3JnYj1uLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2Uucy5iZ0NvbG9yLnRoZW1lXS5yZ2IpKX1jYXRjaChmKXtpZihhLldURiYmaS5G'@;
put 'aWxscyl0aHJvdyBmfX19dmFyIHN2PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLGZ2PS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sY3Y9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20s'@;
put 'b3Y9LyIoXHcqOlx3KikiLyxsdj0vPCg/Olx3Oik/Y29sXGJbXj5dKltcL10/Pi9nLHV2PS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyxodj0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLFBmPS88KD86XHc6'@;
put 'KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8seHY9LzwoPzpcdzopP3NoZWV0UHJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRQcik+Lyxkdj0vPCg/Olx3Oik/c2hlZXRWaWV3c1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9zaGVldFZpZXdz'@;
put 'KT4vO2Z1bmN0aW9uIExuKGUsdCxyLGEpe3ZhciBuPW1lKGUpO3IuU2hlZXRzW2FdfHwoci5TaGVldHNbYV09e30pLG4uY29kZU5hbWUmJihyLlNoZWV0c1thXS5Db2RlTmFtZT1JZShCZShuLmNvZGVOYW1lKSkpfXZhciBEdj0vPCg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9c'@;
put 'Lz8+LyxOdj1mdW5jdGlvbigpe3ZhciBlPS88KD86XHcrOik/Y1sgXC8+XS8sdD0vPFwvKD86XHcrOik/cm93Pi8scj0vcj1bIiddKFteIiddKilbIiddLyxhPS88KD86XHcrOik/aXM+KFtcU1xzXSo/KTxcLyg/Olx3KzopP2lzPi8sbj0vcmVmPVsiJ10oW14iJ10qKVsiJ10vLGk9RmEoInYi'@;
put 'KSxzPUZhKCJmIik7cmV0dXJuIGZ1bmN0aW9uKGMsbyxsLGgseCxkKXtmb3IodmFyIEkseSxWLFgscmUsdj0wLHU9IiIscD1bXSxrPVtdLFQ9MCxnPTAsTj0wLE09IiIsUD0wLFI9MCxiPTAsZWU9MCxsZT1BcnJheS5pc0FycmF5KGQuQ2VsbFhmKSxkZT1bXSx1ZT1bXSxGZT1BcnJheS5pc0Fy'@;
put 'cmF5KG8pLGNlPVtdLHhlPXt9LEs9ITEsQz0hIWwuc2hlZXRTdHVicyxVPWMuc3BsaXQodCksTz0wLEQ9VS5sZW5ndGg7TyE9RDsrK08pe3ZhciBqPSh1PVVbT10udHJpbSgpKS5sZW5ndGg7aWYoMCE9PWope3ZhciBzZT0wO2U6Zm9yKHY9MDt2PGo7Kyt2KXN3aXRjaCh1W3ZdKXtjYXNlIj4i'@;
put 'OmlmKCIvIiE9dVt2LTFdKXsrK3Y7YnJlYWsgZX1pZihsJiZsLmNlbGxTdHlsZXMpe2lmKFA9bnVsbCE9KHk9bWUodS5zbGljZShzZSx2KSwhMCkpLnI/cGFyc2VJbnQoeS5yLDEwKTpQKzEsUj0tMSxsLnNoZWV0Um93cyYmbC5zaGVldFJvd3M8UCljb250aW51ZTt4ZT17fSxLPSExLHkuaHQm'@;
put 'JihLPSEwLHhlLmhwdD1wYXJzZUZsb2F0KHkuaHQpLHhlLmhweD1vYSh4ZS5ocHQpKSwiMSI9PXkuaGlkZGVuJiYoSz0hMCx4ZS5oaWRkZW49ITApLG51bGwhPXkub3V0bGluZUxldmVsJiYoSz0hMCx4ZS5sZXZlbD0reS5vdXRsaW5lTGV2ZWwpLEsmJihjZVtQLTFdPXhlKX1icmVhaztjYXNl'@;
put 'IjwiOnNlPXZ9aWYoc2U+PXYpYnJlYWs7aWYoUD1udWxsIT0oeT1tZSh1LnNsaWNlKHNlLHYpLCEwKSkucj9wYXJzZUludCh5LnIsMTApOlArMSxSPS0xLCEobC5zaGVldFJvd3MmJmwuc2hlZXRSb3dzPFApKXtoLnMucj5QLTEmJihoLnMucj1QLTEpLGguZS5yPFAtMSYmKGguZS5yPVAtMSks'@;
put 'bCYmbC5jZWxsU3R5bGVzJiYoeGU9e30sSz0hMSx5Lmh0JiYoSz0hMCx4ZS5ocHQ9cGFyc2VGbG9hdCh5Lmh0KSx4ZS5ocHg9b2EoeGUuaHB0KSksIjEiPT15LmhpZGRlbiYmKEs9ITAseGUuaGlkZGVuPSEwKSxudWxsIT15Lm91dGxpbmVMZXZlbCYmKEs9ITAseGUubGV2ZWw9K3kub3V0bGlu'@;
put 'ZUxldmVsKSxLJiYoY2VbUC0xXT14ZSkpLHA9dS5zbGljZSh2KS5zcGxpdChlKTtmb3IodmFyIFo9MDtaIT1wLmxlbmd0aCYmIjwiPT1wW1pdLnRyaW0oKS5jaGFyQXQoMCk7KytaKTtmb3IocD1wLnNsaWNlKFopLHY9MDt2IT1wLmxlbmd0aDsrK3YpaWYoMCE9PSh1PXBbdl0udHJpbSgpKS5s'@;
put 'ZW5ndGgpe2lmKGs9dS5tYXRjaChyKSxUPXYsZz0wLE49MCx1PSI8YyAiKygiPCI9PXUuc2xpY2UoMCwxKT8iPiI6IiIpK3UsbnVsbCE9ayYmMj09PWsubGVuZ3RoKXtmb3IoVD0wLE09a1sxXSxnPTA7ZyE9TS5sZW5ndGgmJiEoKE49TS5jaGFyQ29kZUF0KGcpLTY0KTwxfHxOPjI2KTsrK2cp'@;
put 'VD0yNipUK047Uj0tLVR9ZWxzZSsrUjtmb3IoZz0wO2chPXUubGVuZ3RoJiY2MiE9PXUuY2hhckNvZGVBdChnKTsrK2cpO2lmKCsrZywoeT1tZSh1LnNsaWNlKDAsZyksITApKS5yfHwoeS5yPWdlKHtyOlAtMSxjOlJ9KSksST17dDoiIn0sbnVsbCE9KGs9KE09dS5zbGljZShnKSkubWF0Y2go'@;
put 'aSkpJiYiIiE9PWtbMV0mJihJLnY9SWUoa1sxXSkpLGwuY2VsbEZvcm11bGEpe2lmKG51bGwhPShrPU0ubWF0Y2gocykpJiYiIiE9PWtbMV0pe2lmKEkuZj1JZShCZShrWzFdKSkucmVwbGFjZSgvXHJcbi9nLCJcbiIpLGwueGxmbnx8KEkuZj1FZihJLmYpKSxrWzBdLmluZGV4T2YoJ3Q9ImFy'@;
put 'cmF5IicpPi0xKUkuRj0oTS5tYXRjaChuKXx8W10pWzFdLEkuRi5pbmRleE9mKCI6Iik+LTEmJmRlLnB1c2goW0RlKEkuRiksSS5GXSk7ZWxzZSBpZihrWzBdLmluZGV4T2YoJ3Q9InNoYXJlZCInKT4tMSl7WD1tZShrWzBdKTt2YXIgUT1JZShCZShrWzFdKSk7bC54bGZufHwoUT1FZihRKSks'@;
put 'dWVbcGFyc2VJbnQoWC5zaSwxMCldPVtYLFEseS5yXX19ZWxzZShrPU0ubWF0Y2goLzxmW14+XSpcLz4vKSkmJnVlWyhYPW1lKGtbMF0pKS5zaV0mJihJLmY9SXgodWVbWC5zaV1bMV0sdWVbWC5zaV1bMl0seS5yKSk7dmFyIFk9R2UoeS5yKTtmb3IoZz0wO2c8ZGUubGVuZ3RoOysrZylZLnI+'@;
put 'PWRlW2ddWzBdLnMuciYmWS5yPD1kZVtnXVswXS5lLnImJlkuYz49ZGVbZ11bMF0ucy5jJiZZLmM8PWRlW2ddWzBdLmUuYyYmKEkuRj1kZVtnXVsxXSl9aWYobnVsbD09eS50JiZ2b2lkIDA9PT1JLnYpaWYoSS5mfHxJLkYpSS52PTAsSS50PSJuIjtlbHNle2lmKCFDKWNvbnRpbnVlO0kudD0i'@;
put 'eiJ9ZWxzZSBJLnQ9eS50fHwibiI7c3dpdGNoKGgucy5jPlImJihoLnMuYz1SKSxoLmUuYzxSJiYoaC5lLmM9UiksSS50KXtjYXNlIm4iOmlmKCIiPT1JLnZ8fG51bGw9PUkudil7aWYoIUMpY29udGludWU7SS50PSJ6In1lbHNlIEkudj1wYXJzZUZsb2F0KEkudik7YnJlYWs7Y2FzZSJzIjpp'@;
put 'Zih0eXBlb2YgSS52PiJ1Iil7aWYoIUMpY29udGludWU7SS50PSJ6In1lbHNlIFY9VmFbcGFyc2VJbnQoSS52LDEwKV0sSS52PVYudCxJLnI9Vi5yLGwuY2VsbEhUTUwmJihJLmg9Vi5oKTticmVhaztjYXNlInN0ciI6SS50PSJzIixJLnY9bnVsbCE9SS52P0JlKEkudik6IiIsbC5jZWxsSFRN'@;
put 'TCYmKEkuaD0kMChJLnYpKTticmVhaztjYXNlImlubGluZVN0ciI6az1NLm1hdGNoKGEpLEkudD0icyIsbnVsbCE9ayYmKFY9U24oa1sxXSkpPyhJLnY9Vi50LGwuY2VsbEhUTUwmJihJLmg9Vi5oKSk6SS52PSIiO2JyZWFrO2Nhc2UiYiI6SS52PVdlKEkudik7YnJlYWs7Y2FzZSJkIjpsLmNl'@;
put 'bGxEYXRlcz9JLnY9WGUoSS52LDEpOihJLnY9aXIoWGUoSS52LDEpKSxJLnQ9Im4iKTticmVhaztjYXNlImUiOighbHx8ITEhPT1sLmNlbGxUZXh0KSYmKEkudz1JLnYpLEkudj1kc1tJLnZdfWlmKGI9ZWU9MCxyZT1udWxsLGxlJiZ2b2lkIDAhPT15LnMmJm51bGwhPShyZT1kLkNlbGxYZlt5'@;
put 'LnNdKSYmKG51bGwhPXJlLm51bUZtdElkJiYoYj1yZS5udW1GbXRJZCksbC5jZWxsU3R5bGVzJiZudWxsIT1yZS5maWxsSWQmJihlZT1yZS5maWxsSWQpKSxiZihJLGIsZWUsbCx4LGQpLGwuY2VsbERhdGVzJiZsZSYmIm4iPT1JLnQmJmJ0KHBlW2JdKSYmKEkudD0iZCIsSS52PW8wKEkudikp'@;
put 'LHkuY20mJmwueGxtZXRhKXt2YXIgRWU9KGwueGxtZXRhLkNlbGx8fFtdKVsreS5jbS0xXTtFZSYmIlhMREFQUiI9PUVlLnR5cGUmJihJLkQ9ITApfWlmKEZlKXt2YXIgQT1HZSh5LnIpO29bQS5yXXx8KG9bQS5yXT1bXSksb1tBLnJdW0EuY109SX1lbHNlIG9beS5yXT1JfX19fWNlLmxlbmd0'@;
put 'aD4wJiYob1siIXJvd3MiXT1jZSl9fSgpLE12PVd0O2Z1bmN0aW9uIEJmKGUpe3JldHVybltNdChlKSxncihlKSwibiJdfXZhciBrMj1XdCxNZj1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdO3ZhciBCbj1bWyJhbGxvd1JlZnJlc2hRdWVyeSIsITEs'@;
put 'ImJvb2wiXSxbImF1dG9Db21wcmVzc1BpY3R1cmVzIiwhMCwiYm9vbCJdLFsiYmFja3VwRmlsZSIsITEsImJvb2wiXSxbImNoZWNrQ29tcGF0aWJpbGl0eSIsITEsImJvb2wiXSxbIkNvZGVOYW1lIiwiIl0sWyJkYXRlMTkwNCIsITEsImJvb2wiXSxbImRlZmF1bHRUaGVtZVZlcnNpb24iLDAs'@;
put 'ImludCJdLFsiZmlsdGVyUHJpdmFjeSIsITEsImJvb2wiXSxbImhpZGVQaXZvdEZpZWxkTGlzdCIsITEsImJvb2wiXSxbInByb21wdGVkU29sdXRpb25zIiwhMSwiYm9vbCJdLFsicHVibGlzaEl0ZW1zIiwhMSwiYm9vbCJdLFsicmVmcmVzaEFsbENvbm5lY3Rpb25zIiwhMSwiYm9vbCJdLFsi'@;
put 'c2F2ZUV4dGVybmFsTGlua1ZhbHVlcyIsITAsImJvb2wiXSxbInNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzIiwhMCwiYm9vbCJdLFsic2hvd0lua0Fubm90YXRpb24iLCEwLCJib29sIl0sWyJzaG93T2JqZWN0cyIsImFsbCJdLFsic2hvd1Bpdm90Q2hhcnRGaWx0ZXIiLCExLCJib29sIl0s'@;
put 'WyJ1cGRhdGVMaW5rcyIsInVzZXJTZXQiXV0sYXA9W1siYWN0aXZlVGFiIiwwLCJpbnQiXSxbImF1dG9GaWx0ZXJEYXRlR3JvdXBpbmciLCEwLCJib29sIl0sWyJmaXJzdFNoZWV0IiwwLCJpbnQiXSxbIm1pbmltaXplZCIsITEsImJvb2wiXSxbInNob3dIb3Jpem9udGFsU2Nyb2xsIiwhMCwi'@;
put 'Ym9vbCJdLFsic2hvd1NoZWV0VGFicyIsITAsImJvb2wiXSxbInNob3dWZXJ0aWNhbFNjcm9sbCIsITAsImJvb2wiXSxbInRhYlJhdGlvIiw2MDAsImludCJdLFsidmlzaWJpbGl0eSIsInZpc2libGUiXV0sbnA9W10saXA9W1siY2FsY0NvbXBsZXRlZCIsInRydWUiXSxbImNhbGNNb2RlIiwi'@;
put 'YXV0byJdLFsiY2FsY09uU2F2ZSIsInRydWUiXSxbImNvbmN1cnJlbnRDYWxjIiwidHJ1ZSJdLFsiZnVsbENhbGNPbkxvYWQiLCJmYWxzZSJdLFsiZnVsbFByZWNpc2lvbiIsInRydWUiXSxbIml0ZXJhdGUiLCJmYWxzZSJdLFsiaXRlcmF0ZUNvdW50IiwiMTAwIl0sWyJpdGVyYXRlRGVsdGEi'@;
put 'LCIwLjAwMSJdLFsicmVmTW9kZSIsIkExIl1dO2Z1bmN0aW9uIFVmKGUsdCl7Zm9yKHZhciByPTA7ciE9ZS5sZW5ndGg7KytyKWZvcih2YXIgYT1lW3JdLG49MDtuIT10Lmxlbmd0aDsrK24pe3ZhciBpPXRbbl07aWYobnVsbD09YVtpWzBdXSlhW2lbMF1dPWlbMV07ZWxzZSBzd2l0Y2goaVsy'@;
put 'XSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIGFbaVswXV0mJihhW2lbMF1dPVdlKGFbaVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBhW2lbMF1dJiYoYVtpWzBdXT1wYXJzZUludChhW2lbMF1dLDEwKSl9fX1mdW5jdGlvbiBXZihlLHQpe2Zvcih2YXIgcj0w'@;
put 'O3IhPXQubGVuZ3RoOysrcil7dmFyIGE9dFtyXTtpZihudWxsPT1lW2FbMF1dKWVbYVswXV09YVsxXTtlbHNlIHN3aXRjaChhWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgZVthWzBdXSYmKGVbYVswXV09V2UoZVthWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlw'@;
put 'ZW9mIGVbYVswXV0mJihlW2FbMF1dPXBhcnNlSW50KGVbYVswXV0sMTApKX19fWZ1bmN0aW9uIEhmKGUpe1dmKGUuV0JQcm9wcyxCbiksV2YoZS5DYWxjUHIsaXApLFVmKGUuV0JWaWV3LGFwKSxVZihlLlNoZWV0cyxucCksaGEuZGF0ZTE5MDQ9V2UoZS5XQlByb3BzLmRhdGUxOTA0KX12YXIg'@;
put 'ZnA9Il1bKj8vXFwiLnNwbGl0KCIiKTt2YXIgb3A9Lzxcdys6d29ya2Jvb2svO2Z1bmN0aW9uIHZwKGUsdCl7dmFyIHI9e307cmV0dXJuIGUucmVhZF9zaGlmdCg0KSxyLkFyY2hJRD1lLnJlYWRfc2hpZnQoNCksZS5sKz10LTgscn1mdW5jdGlvbiBTcChlLHQscixhLG4saSxzLGYpe3JldHVy'@;
put 'biIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIE0yKGUsdCxyLGEsbixpLHMpe2lmKCFlKXJldHVybiBlO3ZhciBmPXR8fHt9O2F8fChhPXsiIWlkIjp7fX0pLG51bGwhPXplJiZudWxsPT1mLmRlbnNlJiYoZi5kZW5zZT16ZSk7dmFyIG8sdix1LHAsayxULGcsTixNLEksYz1mLmRlbnNl'@;
put 'P1tdOnt9LGw9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0saD1bXSx4PSExLGQ9ITEseT1bXTtmLmJpZmY9MTIsZlsiIXJvdyJdPTA7dmFyIFA9MCxSPSExLFY9W10sWD17fSxiPWYuc3VwYm9va3N8fG4uc3VwYm9va3N8fFtbXV07aWYoYi5zaGFyZWRmPVgsYi5hcnJheWY9VixiLlNo'@;
put 'ZWV0TmFtZXM9bi5TaGVldE5hbWVzfHxuLlNoZWV0cy5tYXAoZnVuY3Rpb24oeGUpe3JldHVybiB4ZS5uYW1lfSksIWYuc3VwYm9va3MmJihmLnN1cGJvb2tzPWIsbi5OYW1lcykpZm9yKHZhciBlZT0wO2VlPG4uTmFtZXMubGVuZ3RoOysrZWUpYlswXVtlZSsxXT1uLk5hbWVzW2VlXTt2YXIg'@;
put 'dWUsRmUsbGU9W10scmU9W10sZGU9ITE7aWYoJGFbMTZdPXtuOiJCcnRTaG9ydFJlYWwiLGY6QmZ9LGh0KGUsZnVuY3Rpb24oSyxDLFUpe2lmKCFkKXN3aXRjaChVKXtjYXNlIDE0ODpvPUs7YnJlYWs7Y2FzZSAwOnY9SyxmLnNoZWV0Um93cyYmZi5zaGVldFJvd3M8PXYuciYmKGQ9ITApLE09'@;
put 'S2Uoaz12LnIpLGZbIiFyb3ciXT12LnIsKEsuaGlkZGVufHxLLmhwdHx8bnVsbCE9Sy5sZXZlbCkmJihLLmhwdCYmKEsuaHB4PW9hKEsuaHB0KSkscmVbSy5yXT1LKTticmVhaztjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6'@;
put 'Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDYyOnN3aXRjaCh1PXt0OktbMl19LEtbMl0pe2Nhc2UibiI6dS52PUtbMV07YnJlYWs7Y2FzZSJzIjp1LnY9KE49VmFbS1sxXV0pLnQsdS5yPU4ucjticmVhaztjYXNlImIiOnUudj0h'@;
put 'IUtbMV07YnJlYWs7Y2FzZSJlIjp1LnY9S1sxXSwhMSE9PWYuY2VsbFRleHQmJih1Lnc9eHRbdS52XSk7YnJlYWs7Y2FzZSJzdHIiOnUudD0icyIsdS52PUtbMV07YnJlYWs7Y2FzZSJpcyI6dS50PSJzIix1LnY9S1sxXS50fWlmKChwPXMuQ2VsbFhmW0tbMF0uaVN0eWxlUmVmXSkmJmJmKHUs'@;
put 'cC5udW1GbXRJZCxudWxsLGYsaSxzKSxUPS0xPT1LWzBdLmM/VCsxOktbMF0uYyxmLmRlbnNlPyhjW2tdfHwoY1trXT1bXSksY1trXVtUXT11KTpjW0hlKFQpK01dPXUsZi5jZWxsRm9ybXVsYSl7Zm9yKFI9ITEsUD0wO1A8Vi5sZW5ndGg7KytQKXt2YXIgTz1WW1BdO3Yucj49T1swXS5zLnIm'@;
put 'JnYucjw9T1swXS5lLnImJlQ+PU9bMF0ucy5jJiZUPD1PWzBdLmUuYyYmKHUuRj13ZShPWzBdKSxSPSEwKX0hUiYmSy5sZW5ndGg+MyYmKHUuZj1LWzNdKX1pZihsLnMucj52LnImJihsLnMucj12LnIpLGwucy5jPlQmJihsLnMuYz1UKSxsLmUucjx2LnImJihsLmUucj12LnIpLGwuZS5jPFQm'@;
put 'JihsLmUuYz1UKSxmLmNlbGxEYXRlcyYmcCYmIm4iPT11LnQmJmJ0KHBlW3AubnVtRm10SWRdKSl7dmFyIEQ9a3QodS52KTtEJiYodS50PSJkIix1LnY9bmV3IERhdGUoRC55LEQubS0xLEQuZCxELkgsRC5NLEQuUyxELnUpKX11ZSYmKCJYTERBUFIiPT11ZS50eXBlJiYodS5EPSEwKSx1ZT12'@;
put 'b2lkIDApLEZlJiYoRmU9dm9pZCAwKTticmVhaztjYXNlIDE6Y2FzZSAxMjppZighZi5zaGVldFN0dWJzfHx4KWJyZWFrO3U9e3Q6InoiLHY6dm9pZCAwfSxUPS0xPT1LWzBdLmM/VCsxOktbMF0uYyxmLmRlbnNlPyhjW2tdfHwoY1trXT1bXSksY1trXVtUXT11KTpjW0hlKFQpK01dPXUsbC5z'@;
put 'LnI+di5yJiYobC5zLnI9di5yKSxsLnMuYz5UJiYobC5zLmM9VCksbC5lLnI8di5yJiYobC5lLnI9di5yKSxsLmUuYzxUJiYobC5lLmM9VCksdWUmJigiWExEQVBSIj09dWUudHlwZSYmKHUuRD0hMCksdWU9dm9pZCAwKSxGZSYmKEZlPXZvaWQgMCk7YnJlYWs7Y2FzZSAxNzY6eS5wdXNoKEsp'@;
put 'O2JyZWFrO2Nhc2UgNDk6dWU9KChmLnhsbWV0YXx8e30pLkNlbGx8fFtdKVtLLTFdO2JyZWFrO2Nhc2UgNDk0OnZhciBqPWFbIiFpZCJdW0sucmVsSWRdO2ZvcihqPyhLLlRhcmdldD1qLlRhcmdldCxLLmxvYyYmKEsuVGFyZ2V0Kz0iIyIrSy5sb2MpLEsuUmVsPWopOiIiPT1LLnJlbElkJiYo'@;
put 'Sy5UYXJnZXQ9IiMiK0subG9jKSxrPUsucmZ4LnMucjtrPD1LLnJmeC5lLnI7KytrKWZvcihUPUsucmZ4LnMuYztUPD1LLnJmeC5lLmM7KytUKWYuZGVuc2U/KGNba118fChjW2tdPVtdKSxjW2tdW1RdfHwoY1trXVtUXT17dDoieiIsdjp2b2lkIDB9KSxjW2tdW1RdLmw9Syk6KGc9Z2Uoe2M6'@;
put 'VCxyOmt9KSxjW2ddfHwoY1tnXT17dDoieiIsdjp2b2lkIDB9KSxjW2ddLmw9Syk7YnJlYWs7Y2FzZSA0MjY6aWYoIWYuY2VsbEZvcm11bGEpYnJlYWs7Vi5wdXNoKEspLChJPWYuZGVuc2U/Y1trXVtUXTpjW0hlKFQpK01dKS5mPWtyKEtbMV0sMCx7cjp2LnIsYzpUfSxiLGYpLEkuRj13ZShL'@;
put 'WzBdKTticmVhaztjYXNlIDQyNzppZighZi5jZWxsRm9ybXVsYSlicmVhaztYW2dlKEtbMF0ucyldPUtbMV0sKEk9Zi5kZW5zZT9jW2tdW1RdOmNbSGUoVCkrTV0pLmY9a3IoS1sxXSwwLHtyOnYucixjOlR9LGIsZik7YnJlYWs7Y2FzZSA2MDppZighZi5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7'@;
put 'Sy5lPj1LLnM7KWxlW0suZS0tXT17d2lkdGg6Sy53LzI1NixoaWRkZW46ISEoMSZLLmZsYWdzKSxsZXZlbDpLLmxldmVsfSxkZXx8KGRlPSEwLEFuKEsudy8yNTYpKSxLdChsZVtLLmUrMV0pO2JyZWFrO2Nhc2UgMTYxOmNbIiFhdXRvZmlsdGVyIl09e3JlZjp3ZShLKX07YnJlYWs7Y2FzZSA0'@;
put 'NzY6Y1siIW1hcmdpbnMiXT1LO2JyZWFrO2Nhc2UgMTQ3Om4uU2hlZXRzW3JdfHwobi5TaGVldHNbcl09e30pLEsubmFtZSYmKG4uU2hlZXRzW3JdLkNvZGVOYW1lPUsubmFtZSksKEsuYWJvdmV8fEsubGVmdCkmJihjWyIhb3V0bGluZSJdPXthYm92ZTpLLmFib3ZlLGxlZnQ6Sy5sZWZ0fSk7'@;
put 'YnJlYWs7Y2FzZSAxMzc6bi5WaWV3c3x8KG4uVmlld3M9W3t9XSksbi5WaWV3c1swXXx8KG4uVmlld3NbMF09e30pLEsuUlRMJiYobi5WaWV3c1swXS5SVEw9ITApO2JyZWFrO2Nhc2UgNDg1OmNhc2UgNjQ6Y2FzZSAxMDUzOmNhc2UgMTUxOmNhc2UgMTUyOmNhc2UgMTc1OmNhc2UgNjQ0OmNh'@;
put 'c2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDU4OTpjYXNlIDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAxNjg6Y2FzZSAxNzQ6Y2FzZSAxMTgwOmNhc2UgNDk5OmNhc2UgNTA3'@;
put 'OmNhc2UgNTUwOmNhc2UgMTcxOmNhc2UgMTY3OmNhc2UgMTE3NzpjYXNlIDE2OTpjYXNlIDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2FzZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1MzY6Y2FzZSAxMTAzOmNhc2UgNjgwOmNhc2UgMTEwNDpjYXNlIDEw'@;
put 'MjQ6Y2FzZSA2NjM6Y2FzZSA1MzU6Y2FzZSA2Nzg6Y2FzZSA1MDQ6Y2FzZSAxMDQzOmNhc2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpjYXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTp4PSEwO2JyZWFrO2Nhc2UgMzY6eD0hMTticmVhaztjYXNlIDM3OmgucHVzaChV'@;
put 'KSx4PSEwO2JyZWFrO2Nhc2UgMzg6aC5wb3AoKSx4PSExO2JyZWFrO2RlZmF1bHQ6aWYoIUMuVCYmKCF4fHxmLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIrVS50b1N0cmluZygxNikpfX0sZiksZGVsZXRlIGYuc3VwYm9va3MsZGVsZXRlIGZbIiFyb3ciXSwh'@;
put 'Y1siIXJlZiJdJiYobC5zLnI8MmU2fHxvJiYoby5lLnI+MHx8by5lLmM+MHx8by5zLnI+MHx8by5zLmM+MCkpJiYoY1siIXJlZiJdPXdlKG98fGwpKSxmLnNoZWV0Um93cyYmY1siIXJlZiJdKXt2YXIgY2U9RGUoY1siIXJlZiJdKTtmLnNoZWV0Um93czw9K2NlLmUuciYmKGNlLmUucj1mLnNo'@;
put 'ZWV0Um93cy0xLGNlLmUucj5sLmUuciYmKGNlLmUucj1sLmUuciksY2UuZS5yPGNlLnMuciYmKGNlLnMucj1jZS5lLnIpLGNlLmUuYz5sLmUuYyYmKGNlLmUuYz1sLmUuYyksY2UuZS5jPGNlLnMuYyYmKGNlLnMuYz1jZS5lLmMpLGNbIiFmdWxscmVmIl09Y1siIXJlZiJdLGNbIiFyZWYiXT13'@;
put 'ZShjZSkpfXJldHVybiB5Lmxlbmd0aD4wJiYoY1siIW1lcmdlcyJdPXkpLGxlLmxlbmd0aD4wJiYoY1siIWNvbHMiXT1sZSkscmUubGVuZ3RoPjAmJihjWyIhcm93cyJdPXJlKSxjfShlLGEscixuLGkscyxmKTpmdW5jdGlvbiB2dihlLHQscixhLG4saSxzKXtpZighZSlyZXR1cm4gZTthfHwo'@;
put 'YT17IiFpZCI6e319KSxudWxsIT16ZSYmbnVsbD09dC5kZW5zZSYmKHQuZGVuc2U9emUpO3ZhciBmPXQuZGVuc2U/W106e30sYz17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxvPSIiLGw9IiIsaD1lLm1hdGNoKGZ2KTtoPyhvPWUuc2xpY2UoMCxoLmluZGV4KSxsPWUuc2xpY2UoaC5p'@;
put 'bmRleCtoWzBdLmxlbmd0aCkpOm89bD1lO3ZhciB4PW8ubWF0Y2goUGYpO3g/TG4oeFswXSwwLG4scik6KHg9by5tYXRjaCh4dikpJiZmdW5jdGlvbiBtdihlLHQscixhLG4pe0xuKGUuc2xpY2UoMCxlLmluZGV4T2YoIj4iKSksMCxhLG4pfSh4WzBdLDAsMCxuLHIpO3ZhciBkPShvLm1hdGNo'@;
put 'KC88KD86XHcqOik/ZGltZW5zaW9uLyl8fHtpbmRleDotMX0pLmluZGV4O2lmKGQ+MCl7dmFyIHY9by5zbGljZShkLGQrNTApLm1hdGNoKG92KTt2JiZmdW5jdGlvbiBpdihlLHQpe3ZhciByPURlKHQpO3Iucy5yPD1yLmUuciYmci5zLmM8PXIuZS5jJiZyLnMucj49MCYmci5zLmM+PTAmJihl'@;
put 'WyIhcmVmIl09d2UocikpfShmLHZbMV0pfXZhciB1PW8ubWF0Y2goZHYpO3UmJnVbMV0mJmZ1bmN0aW9uIE92KGUsdCl7dC5WaWV3c3x8KHQuVmlld3M9W3t9XSksKGUubWF0Y2goRHYpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihyLGEpe3ZhciBuPW1lKHIpO3QuVmlld3NbYV18fCh0LlZpZXdz'@;
put 'W2FdPXt9KSwrbi56b29tU2NhbGUmJih0LlZpZXdzW2FdLnpvb209K24uem9vbVNjYWxlKSxXZShuLnJpZ2h0VG9MZWZ0KSYmKHQuVmlld3NbYV0uUlRMPSEwKX0pfSh1WzFdLG4pO3ZhciBwPVtdO2lmKHQuY2VsbFN0eWxlcyl7dmFyIGs9by5tYXRjaChsdik7ayYmZnVuY3Rpb24gRnYoZSx0'@;
put 'KXtmb3IodmFyIHI9ITEsYT0wO2EhPXQubGVuZ3RoOysrYSl7dmFyIG49bWUodFthXSwhMCk7bi5oaWRkZW4mJihuLmhpZGRlbj1XZShuLmhpZGRlbikpO3ZhciBpPXBhcnNlSW50KG4ubWluLDEwKS0xLHM9cGFyc2VJbnQobi5tYXgsMTApLTE7Zm9yKG4ub3V0bGluZUxldmVsJiYobi5sZXZl'@;
put 'bD0rbi5vdXRsaW5lTGV2ZWx8fDApLGRlbGV0ZSBuLm1pbixkZWxldGUgbi5tYXgsbi53aWR0aD0rbi53aWR0aCwhciYmbi53aWR0aCYmKHI9ITAsQW4obi53aWR0aCkpLEt0KG4pO2k8PXM7KWVbaSsrXT1NZShuKX19KHAsayl9aCYmTnYoaFsxXSxmLHQsYyxpLHMpO3ZhciBUPWwubWF0Y2go'@;
put 'dXYpO1QmJihmWyIhYXV0b2ZpbHRlciJdPWZ1bmN0aW9uIEF2KGUpe3JldHVybntyZWY6KGUubWF0Y2goL3JlZj0iKFteIl0qKSIvKXx8W10pWzFdfX0oVFswXSkpO3ZhciBnPVtdLE49bC5tYXRjaChzdik7aWYoTilmb3IoZD0wO2QhPU4ubGVuZ3RoOysrZClnW2RdPURlKE5bZF0uc2xpY2Uo'@;
put 'TltkXS5pbmRleE9mKCciJykrMSkpO3ZhciBNPWwubWF0Y2goY3YpO00mJmZ1bmN0aW9uIEV2KGUsdCxyKXtmb3IodmFyIGE9QXJyYXkuaXNBcnJheShlKSxuPTA7biE9dC5sZW5ndGg7KytuKXt2YXIgaT1tZShCZSh0W25dKSwhMCk7aWYoIWkucmVmKXJldHVybjt2YXIgcz0oKHJ8fHt9KVsi'@;
put 'IWlkIl18fFtdKVtpLmlkXTtzPyhpLlRhcmdldD1zLlRhcmdldCxpLmxvY2F0aW9uJiYoaS5UYXJnZXQrPSIjIitJZShpLmxvY2F0aW9uKSkpOihpLlRhcmdldD0iIyIrSWUoaS5sb2NhdGlvbikscz17VGFyZ2V0OmkuVGFyZ2V0LFRhcmdldE1vZGU6IkludGVybmFsIn0pLGkuUmVsPXMsaS50'@;
put 'b29sdGlwJiYoaS5Ub29sdGlwPWkudG9vbHRpcCxkZWxldGUgaS50b29sdGlwKTtmb3IodmFyIGY9RGUoaS5yZWYpLGM9Zi5zLnI7Yzw9Zi5lLnI7KytjKWZvcih2YXIgbz1mLnMuYztvPD1mLmUuYzsrK28pe3ZhciBsPWdlKHtjOm8scjpjfSk7YT8oZVtjXXx8KGVbY109W10pLGVbY11bb118'@;
put 'fChlW2NdW29dPXt0OiJ6Iix2OnZvaWQgMH0pLGVbY11bb10ubD1pKTooZVtsXXx8KGVbbF09e3Q6InoiLHY6dm9pZCAwfSksZVtsXS5sPWkpfX19KGYsTSxhKTt2YXIgST1sLm1hdGNoKGh2KTtpZihJJiYoZlsiIW1hcmdpbnMiXT1mdW5jdGlvbiBUdihlKXt2YXIgdD17fTtyZXR1cm5bImxl'@;
put 'ZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24ocil7ZVtyXSYmKHRbcl09cGFyc2VGbG9hdChlW3JdKSl9KSx0fShtZShJWzBdKSkpLCFmWyIhcmVmIl0mJmMuZS5jPj1jLnMuYyYmYy5lLnI+PWMucy5yJiYoZlsiIXJlZiJdPXdl'@;
put 'KGMpKSx0LnNoZWV0Um93cz4wJiZmWyIhcmVmIl0pe3ZhciB5PURlKGZbIiFyZWYiXSk7dC5zaGVldFJvd3M8PSt5LmUuciYmKHkuZS5yPXQuc2hlZXRSb3dzLTEseS5lLnI+Yy5lLnImJih5LmUucj1jLmUucikseS5lLnI8eS5zLnImJih5LnMucj15LmUucikseS5lLmM+Yy5lLmMmJih5LmUu'@;
put 'Yz1jLmUuYykseS5lLmM8eS5zLmMmJih5LnMuYz15LmUuYyksZlsiIWZ1bGxyZWYiXT1mWyIhcmVmIl0sZlsiIXJlZiJdPXdlKHkpKX1yZXR1cm4gcC5sZW5ndGg+MCYmKGZbIiFjb2xzIl09cCksZy5sZW5ndGg+MCYmKGZbIiFtZXJnZXMiXT1nKSxmfShlLGEscixuLGkscyxmKX12YXIgR2Es'@;
put 'emY9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkvZywkZj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIFpyKGUsdCl7dmFyIHI9ZS5zcGxpdCgvXHMrLyksYT1bXTtpZih0fHwoYVswXT1y'@;
put 'WzBdKSwxPT09ci5sZW5ndGgpcmV0dXJuIGE7dmFyIGkscyxjLG49ZS5tYXRjaCh6Zik7aWYobilmb3IoYz0wO2MhPW4ubGVuZ3RoOysrYyktMT09PShzPShpPW5bY10ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP2FbaVsxXV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpOmFbInht'@;
put 'bG5zOiI9PT1pWzFdLnNsaWNlKDAsNik/InhtbG5zIitpWzFdLnNsaWNlKDYpOmlbMV0uc2xpY2UocysxKV09aVsyXS5zbGljZSgxLGlbMl0ubGVuZ3RoLTEpO3JldHVybiBhfWZ1bmN0aW9uIEhwKGUpe3ZhciByPXt9O2lmKDE9PT1lLnNwbGl0KC9ccysvKS5sZW5ndGgpcmV0dXJuIHI7dmFy'@;
put 'IG4saSxmLGE9ZS5tYXRjaCh6Zik7aWYoYSlmb3IoZj0wO2YhPWEubGVuZ3RoOysrZiktMT09PShpPShuPWFbZl0ubWF0Y2goJGYpKVsxXS5pbmRleE9mKCI6IikpP3JbblsxXV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpOnJbInhtbG5zOiI9PT1uWzFdLnNsaWNlKDAsNik/InhtbG5z'@;
put 'IituWzFdLnNsaWNlKDYpOm5bMV0uc2xpY2UoaSsxKV09blsyXS5zbGljZSgxLG5bMl0ubGVuZ3RoLTEpO3JldHVybiByfWZ1bmN0aW9uIFhwKGUsdCxyLGEpe3ZhciBuPWE7c3dpdGNoKChyWzBdLm1hdGNoKC9kdDpkdD0iKFtcdy5dKykiLyl8fFsiIiwiIl0pWzFdKXtjYXNlImJvb2xlYW4i'@;
put 'Om49V2UoYSk7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOm49cGFyc2VJbnQoYSwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJmbG9hdCI6bj1wYXJzZUZsb2F0KGEpO2JyZWFrO2Nhc2UiZGF0ZSI6Y2FzZSJkYXRlVGltZS50eiI6bj1YZShhKTticmVhaztjYXNlImk4IjpjYXNlInN0cmluZyI6'@;
put 'Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IityWzBdKX1lW0llKHQpXT1ufWZ1bmN0aW9uIHpwKGUsdCxyKXtpZihyLmNlbGxTdHlsZXMmJnQuSW50ZXJpb3Ipe3ZhciBhPXQuSW50ZXJp'@;
put 'b3I7YS5QYXR0ZXJuJiYoYS5wYXR0ZXJuVHlwZT1uMVthLlBhdHRlcm5dfHxhLlBhdHRlcm4pfWVbdC5JRF09dH1mdW5jdGlvbiAkcChlLHQscixhLG4saSxzLGYsYyxvKXt2YXIgbD0iR2VuZXJhbCIsaD1hLlN0eWxlSUQseD17fTtvPW98fHt9O3ZhciBkPVtdLHY9MDtmb3Iodm9pZCAwPT09'@;
put 'aCYmZiYmKGg9Zi5TdHlsZUlEKSx2b2lkIDA9PT1oJiZzJiYoaD1zLlN0eWxlSUQpO3ZvaWQgMCE9PWlbaF0mJihpW2hdLm5mJiYobD1pW2hdLm5mKSxpW2hdLkludGVyaW9yJiZkLnB1c2goaVtoXS5JbnRlcmlvciksaVtoXS5QYXJlbnQpOyloPWlbaF0uUGFyZW50O3N3aXRjaChyLlR5cGUp'@;
put 'e2Nhc2UiQm9vbGVhbiI6YS50PSJiIixhLnY9V2UoZSk7YnJlYWs7Y2FzZSJTdHJpbmciOmEudD0icyIsYS5yPUJpKEllKGUpKSxhLnY9ZS5pbmRleE9mKCI8Iik+LTE/SWUodHx8ZSkucmVwbGFjZSgvPC4qPz4vZywiIik6YS5yO2JyZWFrO2Nhc2UiRGF0ZVRpbWUiOiJaIiE9ZS5zbGljZSgt'@;
put 'MSkmJihlKz0iWiIpLGEudj0oWGUoZSktbmV3IERhdGUoRGF0ZS5VVEMoMTg5OSwxMSwzMCkpKS84NjRlNSxhLnYhPWEudj9hLnY9SWUoZSk6YS52PDYwJiYoYS52PWEudi0xKSwoIWx8fCJHZW5lcmFsIj09bCkmJihsPSJ5eXl5LW1tLWRkIik7Y2FzZSJOdW1iZXIiOnZvaWQgMD09PWEudiYm'@;
put 'KGEudj0rZSksYS50fHwoYS50PSJuIik7YnJlYWs7Y2FzZSJFcnJvciI6YS50PSJlIixhLnY9ZHNbZV0sITEhPT1vLmNlbGxUZXh0JiYoYS53PWUpO2JyZWFrO2RlZmF1bHQ6IiI9PWUmJiIiPT10P2EudD0ieiI6KGEudD0icyIsYS52PUJpKHR8fGUpKX1pZihmdW5jdGlvbiBHcChlLHQscil7'@;
put 'aWYoInoiIT09ZS50KXtpZighcnx8ITEhPT1yLmNlbGxUZXh0KXRyeXtlLnc9ImUiPT09ZS50P2Uud3x8eHRbZS52XToiR2VuZXJhbCI9PT10PyJuIj09PWUudD8oMHxlLnYpPT09ZS52P2Uudi50b1N0cmluZygxMCk6a2EoZS52KTpOdChlLnYpOmZ1bmN0aW9uIFZwKGUsdCl7dmFyIHI9R2Fb'@;
put 'ZV18fEllKGUpO3JldHVybiJHZW5lcmFsIj09PXI/TnQodCk6UnIocix0KX0odHx8IkdlbmVyYWwiLGUudil9Y2F0Y2goaSl7aWYoci5XVEYpdGhyb3cgaX10cnl7dmFyIGE9R2FbdF18fHR8fCJHZW5lcmFsIjtpZihyLmNlbGxORiYmKGUuej1hKSxyLmNlbGxEYXRlcyYmIm4iPT1lLnQmJmJ0'@;
put 'KGEpKXt2YXIgbj1rdChlLnYpO24mJihlLnQ9ImQiLGUudj1uZXcgRGF0ZShuLnksbi5tLTEsbi5kLG4uSCxuLk0sbi5TLG4udSkpfX1jYXRjaChpKXtpZihyLldURil0aHJvdyBpfX19KGEsbCxvKSwhMSE9PW8uY2VsbEZvcm11bGEpaWYoYS5Gb3JtdWxhKXt2YXIgdT1JZShhLkZvcm11bGEp'@;
put 'OzYxPT11LmNoYXJDb2RlQXQoMCkmJih1PXUuc2xpY2UoMSkpLGEuZj11YSh1LG4pLGRlbGV0ZSBhLkZvcm11bGEsIlJDIj09YS5BcnJheVJhbmdlP2EuRj11YSgiUkM6UkMiLG4pOmEuQXJyYXlSYW5nZSYmKGEuRj11YShhLkFycmF5UmFuZ2UsbiksYy5wdXNoKFtEZShhLkYpLGEuRl0pKX1l'@;
put 'bHNlIGZvcih2PTA7djxjLmxlbmd0aDsrK3Ypbi5yPj1jW3ZdWzBdLnMuciYmbi5yPD1jW3ZdWzBdLmUuciYmbi5jPj1jW3ZdWzBdLnMuYyYmbi5jPD1jW3ZdWzBdLmUuYyYmKGEuRj1jW3ZdWzFdKTtvLmNlbGxTdHlsZXMmJihkLmZvckVhY2goZnVuY3Rpb24ocCl7IXgucGF0dGVyblR5cGUm'@;
put 'JnAucGF0dGVyblR5cGUmJih4LnBhdHRlcm5UeXBlPXAucGF0dGVyblR5cGUpfSksYS5zPXgpLHZvaWQgMCE9PWEuU3R5bGVJRCYmKGEuaXhmZT1hLlN0eWxlSUQpfWZ1bmN0aW9uIGpwKGUpe2UudD1lLnZ8fCIiLGUudD1lLnQucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2cs'@;
put 'IlxuIiksZS52PWUudz1lLml4ZmU9dm9pZCAwfWZ1bmN0aW9uIE1uKGUsdCl7dmFyIHI9dHx8e307dGEoKTt2YXIgYT1RdChZMChlKSk7KCJiaW5hcnkiPT1yLnR5cGV8fCJhcnJheSI9PXIudHlwZXx8ImJhc2U2NCI9PXIudHlwZSkmJihhPXR5cGVvZiBPZTwidSI/T2UudXRpbHMuZGVjb2Rl'@;
put 'KDY1MDAxLHQwKGEpKTpCZShhKSk7dmFyIG49YS5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCksaT0hMTtpZigoMTAyMyYobj1uLnJlcGxhY2UoLyIuKj8iL2csIiIpKS5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmbi5pbmRleE9mKCIsIiksMTAyMyZuLmluZGV4T2YoIjsiKSkpe3Zh'@;
put 'ciBzPU1lKHIpO3JldHVybiBzLnR5cGU9InN0cmluZyIsY2EudG9fd29ya2Jvb2soYSxzKX1pZigtMT09bi5pbmRleE9mKCI8P3htbCIpJiZbImh0bWwiLCJ0YWJsZSIsImhlYWQiLCJtZXRhIiwic2NyaXB0Iiwic3R5bGUiLCJkaXYiXS5mb3JFYWNoKGZ1bmN0aW9uKHFlKXtuLmluZGV4T2Yo'@;
put 'IjwiK3FlKT49MCYmKGk9ITApfSksaSlyZXR1cm4gZnVuY3Rpb24gRG0oZSx0KXt2YXIgcj1lLm1hdGNoKC88dGFibGVbXHNcU10qPz5bXHNcU10qPzxcL3RhYmxlPi9naSk7aWYoIXJ8fDA9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBIVE1MOiBjb3VsZCBub3QgZmluZCA8'@;
put 'dGFibGU+Iik7aWYoMT09ci5sZW5ndGgpcmV0dXJuIEZ0KEpmKHJbMF0sdCksdCk7dmFyIGE9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fTtyZXR1cm4gci5mb3JFYWNoKGZ1bmN0aW9uKG4saSl7ZWkoYSxKZihuLHQpLCJTaGVldCIrKGkrMSkpfSksYX0oYSxyKTtHYT17IkdlbmVyYWwgTnVt'@;
put 'YmVyIjoiR2VuZXJhbCIsIkdlbmVyYWwgRGF0ZSI6cGVbMjJdLCJMb25nIERhdGUiOiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOnBlWzE1XSwiU2hvcnQgRGF0ZSI6cGVbMTRdLCJMb25nIFRpbWUiOnBlWzE5XSwiTWVkaXVtIFRpbWUiOnBlWzE4XSwiU2hvcnQgVGltZSI6'@;
put 'cGVbMjBdLEN1cnJlbmN5OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOnBlWzJdLFN0YW5kYXJkOnBlWzRdLFBlcmNlbnQ6cGVbMTBdLFNjaWVudGlmaWM6cGVbMTFdLCJZZXMvTm8iOiciWWVzIjsiWWVzIjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjonIlRydWUi'@;
put 'OyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfTt2YXIgZixvLGM9W107bnVsbCE9emUmJm51bGw9PXIuZGVuc2UmJihyLmRlbnNlPXplKTt2YXIgdWUsbD17fSxoPVtdLHg9ci5kZW5zZT9bXTp7fSxkPSIiLHY9e30sdT17fSxwPVpyKCc8RGF0YSBzczpU'@;
put 'eXBlPSJTdHJpbmciPicpLGs9MCxUPTAsZz0wLE49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sTT17fSxJPXt9LHk9IiIsUD0wLFI9W10sVj17fSxYPXt9LGI9MCxlZT1bXSxsZT1bXSxyZT17fSxkZT1bXSxGZT0hMSxjZT1bXSx4ZT1bXSxLPXt9LEM9MCxVPTAsTz17U2hlZXRzOltd'@;
put 'LFdCUHJvcHM6e2RhdGUxOTA0OiExfX0sRD17fTt5YS5sYXN0SW5kZXg9MCxhPWEucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpO2Zvcih2YXIgaj0iIjtmPXlhLmV4ZWMoYSk7KXN3aXRjaChmWzNdPShqPWZbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEi'@;
put 'PT1qKXtpZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UiLyIhPT1mWzBdLmNoYXJBdChmWzBdLmxlbmd0aC0yKSYmYy5wdXNoKFtmWzNdLCEwXSk7YnJlYWt9aWYoY1tjLmxlbmd0aC0x'@;
put 'XVsxXSlicmVhazsiLyI9PT1mWzFdPyRwKGEuc2xpY2UoayxmLmluZGV4KSx5LHAsImNvbW1lbnQiPT1jW2MubGVuZ3RoLTFdWzBdP3JlOnYse2M6VCxyOmd9LE0sZGVbVF0sdSxjZSxyKTooeT0iIixwPVpyKGZbMF0pLGs9Zi5pbmRleCtmWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJjZWxsIjpp'@;
put 'ZigiLyI9PT1mWzFdKWlmKGxlLmxlbmd0aD4wJiYodi5jPWxlKSwoIXIuc2hlZXRSb3dzfHxyLnNoZWV0Um93cz5nKSYmdm9pZCAwIT09di52JiYoci5kZW5zZT8oeFtnXXx8KHhbZ109W10pLHhbZ11bVF09dik6eFtIZShUKStLZShnKV09diksdi5IUmVmJiYodi5sPXtUYXJnZXQ6SWUodi5I'@;
put 'UmVmKX0sdi5IUmVmU2NyZWVuVGlwJiYodi5sLlRvb2x0aXA9di5IUmVmU2NyZWVuVGlwKSxkZWxldGUgdi5IUmVmLGRlbGV0ZSB2LkhSZWZTY3JlZW5UaXApLCh2Lk1lcmdlQWNyb3NzfHx2Lk1lcmdlRG93bikmJihDPVQrKDB8cGFyc2VJbnQodi5NZXJnZUFjcm9zcywxMCkpLFU9ZysoMHxw'@;
put 'YXJzZUludCh2Lk1lcmdlRG93biwxMCkpLFIucHVzaCh7czp7YzpULHI6Z30sZTp7YzpDLHI6VX19KSksci5zaGVldFN0dWJzKWlmKHYuTWVyZ2VBY3Jvc3N8fHYuTWVyZ2VEb3duKXtmb3IodmFyIHNlPVQ7c2U8PUM7KytzZSlmb3IodmFyIFo9ZztaPD1VOysrWikoc2U+VHx8Wj5nKSYmKHIu'@;
put 'ZGVuc2U/KHhbWl18fCh4W1pdPVtdKSx4W1pdW3NlXT17dDoieiJ9KTp4W0hlKHNlKStLZShaKV09e3Q6InoifSk7VD1DKzF9ZWxzZSsrVDtlbHNlIHYuTWVyZ2VBY3Jvc3M/VD1DKzE6KytUO2Vsc2Uodj1IcChmWzBdKSkuSW5kZXgmJihUPSt2LkluZGV4LTEpLFQ8Ti5zLmMmJihOLnMuYz1U'@;
put 'KSxUPk4uZS5jJiYoTi5lLmM9VCksIi8+Ij09PWZbMF0uc2xpY2UoLTIpJiYrK1QsbGU9W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PWZbMV18fCIvPiI9PT1mWzBdLnNsaWNlKC0yKT8oZzxOLnMuciYmKE4ucy5yPWcpLGc+Ti5lLnImJihOLmUucj1nKSwiLz4iPT09ZlswXS5zbGljZSgtMikm'@;
put 'Jih1PVpyKGZbMF0pKS5JbmRleCYmKGc9K3UuSW5kZXgtMSksVD0wLCsrZyk6KCh1PVpyKGZbMF0pKS5JbmRleCYmKGc9K3UuSW5kZXgtMSksSz17fSwoIjAiPT11LkF1dG9GaXRIZWlnaHR8fHUuSGVpZ2h0KSYmKEsuaHB4PXBhcnNlSW50KHUuSGVpZ2h0LDEwKSxLLmhwdD1CYShLLmhweCks'@;
put 'eGVbZ109SyksIjEiPT11LkhpZGRlbiYmKEsuaGlkZGVuPSEwLHhlW2ddPUspKTticmVhaztjYXNlIndvcmtzaGVldCI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK28uam9pbigifCIpKTtoLnB1c2goZCksTi5z'@;
put 'LnI8PU4uZS5yJiZOLnMuYzw9Ti5lLmMmJih4WyIhcmVmIl09d2UoTiksci5zaGVldFJvd3MmJnIuc2hlZXRSb3dzPD1OLmUuciYmKHhbIiFmdWxscmVmIl09eFsiIXJlZiJdLE4uZS5yPXIuc2hlZXRSb3dzLTEseFsiIXJlZiJdPXdlKE4pKSksUi5sZW5ndGgmJih4WyIhbWVyZ2VzIl09Uiks'@;
put 'ZGUubGVuZ3RoPjAmJih4WyIhY29scyJdPWRlKSx4ZS5sZW5ndGg+MCYmKHhbIiFyb3dzIl09eGUpLGxbZF09eH1lbHNlIE49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sZz1UPTAsYy5wdXNoKFtmWzNdLCExXSksbz1acihmWzBdKSxkPUllKG8uTmFtZSkseD1yLmRlbnNlP1tdOnt9'@;
put 'LFI9W10sY2U9W10seGU9W10sTy5TaGVldHMucHVzaChEPXtuYW1lOmQsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2V7aWYoIi8+'@;
put 'Ij09ZlswXS5zbGljZSgtMikpYnJlYWs7Yy5wdXNoKFtmWzNdLCExXSksZGU9W10sRmU9ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09ZlsxXT96cChNLEkscik6ST1acihmWzBdKTticmVhaztjYXNlIm51bWJlcmZvcm1hdCI6SS5uZj1JZShacihmWzBdKS5Gb3JtYXR8fCJHZW5lcmFsIiks'@;
put 'R2FbSS5uZl0mJihJLm5mPUdhW0kubmZdKTtmb3IodmFyIFE9MDszOTIhPVEmJnBlW1FdIT1JLm5mOysrUSk7aWYoMzkyPT1RKWZvcihRPTU3OzM5MiE9UTsrK1EpaWYobnVsbD09cGVbUV0pe2V0KEkubmYsUSk7YnJlYWt9YnJlYWs7Y2FzZSJjb2x1bW4iOmlmKCJ0YWJsZSIhPT1jW2MubGVu'@;
put 'Z3RoLTFdWzBdKWJyZWFrO2lmKCh1ZT1acihmWzBdKSkuSGlkZGVuJiYodWUuaGlkZGVuPSEwLGRlbGV0ZSB1ZS5IaWRkZW4pLHVlLldpZHRoJiYodWUud3B4PXBhcnNlSW50KHVlLldpZHRoLDEwKSksIUZlJiZ1ZS53cHg+MTApe0ZlPSEwLHdyPWxmO2Zvcih2YXIgWT0wO1k8ZGUubGVuZ3Ro'@;
put 'OysrWSlkZVtZXSYmS3QoZGVbWV0pfUZlJiZLdCh1ZSksZGVbdWUuSW5kZXgtMXx8ZGUubGVuZ3RoXT11ZTtmb3IodmFyIEVlPTA7RWU8K3VlLlNwYW47KytFZSlkZVtkZS5sZW5ndGhdPU1lKHVlKTticmVhaztjYXNlIm5hbWVkcmFuZ2UiOmlmKCIvIj09PWZbMV0pYnJlYWs7Ty5OYW1lc3x8'@;
put 'KE8uTmFtZXM9W10pO3ZhciBBPW1lKGZbMF0pLFBlPXtOYW1lOkEuTmFtZSxSZWY6dWEoQS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtPLlNoZWV0cy5sZW5ndGg+MCYmKFBlLlNoZWV0PU8uU2hlZXRzLmxlbmd0aC0xKSxPLk5hbWVzLnB1c2goUGUpO2JyZWFrO2Nhc2UibmFtZWRj'@;
put 'ZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlImFsaWdubWVudCI6Y2FzZSJib3JkZXJzIjpjYXNlImJvcmRlciI6Y2FzZSJwcm90ZWN0aW9uIjpjYXNlInBhcmFn'@;
put 'cmFwaHMiOmNhc2UibmFtZSI6Y2FzZSJwaXhlbHNwZXJpbmNoIjpjYXNlIm51bGwiOmJyZWFrO2Nhc2UiZm9udCI6aWYoIi8+Ij09PWZbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PWZbMV0/eSs9YS5zbGljZShQLGYuaW5kZXgpOlA9Zi5pbmRleCtmWzBdLmxlbmd0aDticmVhaztjYXNlImlu'@;
put 'dGVyaW9yIjppZighci5jZWxsU3R5bGVzKWJyZWFrO0kuSW50ZXJpb3I9WnIoZlswXSk7YnJlYWs7Y2FzZSJhdXRob3IiOmNhc2UidGl0bGUiOmNhc2UiZGVzY3JpcHRpb24iOmNhc2UiY3JlYXRlZCI6Y2FzZSJrZXl3b3JkcyI6Y2FzZSJzdWJqZWN0IjpjYXNlImNhdGVnb3J5IjpjYXNlImNv'@;
put 'bXBhbnkiOmNhc2UibGFzdGF1dGhvciI6Y2FzZSJsYXN0c2F2ZWQiOmNhc2UibGFzdHByaW50ZWQiOmNhc2UidmVyc2lvbiI6Y2FzZSJyZXZpc2lvbiI6Y2FzZSJ0b3RhbHRpbWUiOmNhc2UiaHlwZXJsaW5rYmFzZSI6Y2FzZSJtYW5hZ2VyIjpjYXNlImNvbnRlbnRzdGF0dXMiOmNhc2UiaWRl'@;
put 'bnRpZmllciI6Y2FzZSJsYW5ndWFnZSI6Y2FzZSJhcHBuYW1lIjppZigiLz4iPT09ZlswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09ZlsxXT9nbChWLGosYS5zbGljZShiLGYuaW5kZXgpKTpiPWYuaW5kZXgrZlswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Uid29ya2Jvb2siOmlm'@;
put 'KCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSl9ZWxzZSBjLnB1c2goW2ZbM10sITFdKTticmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PWZbMV0pe2lmKChvPWMucG9wKCkpWzBdIT09ZlszXSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitvLmpvaW4oInwiKSk7anAocmUpLGxlLnB1c2gocmUpfWVsc2UgYy5wdXNoKFtmWzNdLCExXSkscmU9e2E6KG89WnIoZlswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVsw'@;
put 'XSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09ZlswXS5jaGFyQXQoZlswXS5sZW5ndGgtMikpe3ZhciBBZT1acihmWzBdKTt4WyIhYXV0b2ZpbHRlciJdPXtyZWY6dWEoQWUuUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxj'@;
put 'LnB1c2goW2ZbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZigiLyI9PT1mWzFdKXtpZigobz1jLnBvcCgpKVswXSE9PWZbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrby5qb2luKCJ8IikpfWVsc2UiLyIhPT1mWzBdLmNoYXJBdChmWzBdLmxlbmd0aC0yKSYm'@;
put 'Yy5wdXNoKFtmWzNdLCEwXSk7YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpjYXNlImRvY3VtZW50cHJvcGVydGllcyI6Y2FzZSJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiOmNhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUi'@;
put 'OmNhc2UibmFtZXMiOmNhc2UibWFwaW5mbyI6Y2FzZSJwYWdlYnJlYWtzIjpjYXNlInF1ZXJ5dGFibGUiOmNhc2Uic29ydGluZyI6Y2FzZSJzY2hlbWEiOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpjYXNlInNtYXJ0dGFndHlwZSI6Y2FzZSJzbWFydHRhZ3MiOmNhc2UiZXhjZWx3b3Jr'@;
put 'Ym9vayI6Y2FzZSJ3b3JrYm9va29wdGlvbnMiOmNhc2Uid29ya3NoZWV0b3B0aW9ucyI6aWYoIi8iPT09ZlsxXSl7aWYoKG89Yy5wb3AoKSlbMF0hPT1mWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK28uam9pbigifCIpKX1lbHNlIi8iIT09ZlswXS5jaGFyQXQoZlswXS5sZW5n'@;
put 'dGgtMikmJmMucHVzaChbZlszXSwhMF0pO2JyZWFrO2RlZmF1bHQ6aWYoMD09Yy5sZW5ndGgmJiJkb2N1bWVudCI9PWZbM118fDA9PWMubGVuZ3RoJiYidW9mIj09ZlszXSlyZXR1cm4gY2MoYSxyKTt2YXIgTGU9ITA7c3dpdGNoKGNbYy5sZW5ndGgtMV1bMF0pe2Nhc2Uib2ZmaWNlZG9jdW1l'@;
put 'bnRzZXR0aW5ncyI6c3dpdGNoKGZbM10pe2Nhc2UiYWxsb3dwbmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBvbmVudHMiOmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2UiY29sb3JzIjpjYXNlImNvbG9yIjpjYXNlImluZGV4IjpjYXNl'@;
put 'InJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJlYWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpzd2l0Y2goZlszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNo'@;
put 'ZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhlaWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6TGU9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2goZlszXSl7Y2FzZSJkYXRlMTkwNCI6'@;
put 'Ty5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Uid2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Uid2luZG93dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0c3RydWN0dXJlIjpjYXNlInByb3RlY3R3aW5kb3ciOmNhc2UicHJv'@;
put 'dGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNhc2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJvb2siOmNhc2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNhc2Uic2hlZXRpbmRleGZpcnN0IjpjYXNlInNoZWV0aW5kZXhsYXN0'@;
put 'IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZvcm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNlIm1heGl0ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBhdGgiOmNhc2UieGN0IjpjYXNlImNvdW50IjpjYXNlInNlbGVjdGVk'@;
put 'c2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVuY2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUiOmNhc2UiZm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xsYXN0IjpjYXNlIndhbnRhZHZpc2UiOmNhc2UiYm9vbGVhbiI6Y2Fz'@;
put 'ZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2FzZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3VsYXRlYmVmb3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9kZXIxYzEiOmNhc2UiZW1iZWRzYXZlc21hcnR0YWdzIjpicmVhaztk'@;
put 'ZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tvcHRpb25zIjpzd2l0Y2goZlszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaChmWzNdKXtjYXNlInZp'@;
put 'c2libGUiOmlmKCIvPiIhPT1mWzBdLnNsaWNlKC0yKSlpZigiLyI9PT1mWzFdKXN3aXRjaChhLnNsaWNlKGIsZi5pbmRleCkpe2Nhc2UiU2hlZXRIaWRkZW4iOkQuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOkQuSGlkZGVuPTJ9ZWxzZSBiPWYuaW5kZXgrZlswXS5sZW5n'@;
put 'dGg7YnJlYWs7Y2FzZSJoZWFkZXIiOnhbIiFtYXJnaW5zIl18fFl0KHhbIiFtYXJnaW5zIl09e30sInhsbWwiKSxpc05hTigrbWUoZlswXSkuTWFyZ2luKXx8KHhbIiFtYXJnaW5zIl0uaGVhZGVyPSttZShmWzBdKS5NYXJnaW4pO2JyZWFrO2Nhc2UiZm9vdGVyIjp4WyIhbWFyZ2lucyJdfHxZ'@;
put 'dCh4WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksaXNOYU4oK21lKGZbMF0pLk1hcmdpbil8fCh4WyIhbWFyZ2lucyJdLmZvb3Rlcj0rbWUoZlswXSkuTWFyZ2luKTticmVhaztjYXNlInBhZ2VtYXJnaW5zIjp2YXIgQ2U9bWUoZlswXSk7eFsiIW1hcmdpbnMiXXx8WXQoeFsiIW1hcmdpbnMiXT17'@;
put 'fSwieGxtbCIpLGlzTmFOKCtDZS5Ub3ApfHwoeFsiIW1hcmdpbnMiXS50b3A9K0NlLlRvcCksaXNOYU4oK0NlLkxlZnQpfHwoeFsiIW1hcmdpbnMiXS5sZWZ0PStDZS5MZWZ0KSxpc05hTigrQ2UuUmlnaHQpfHwoeFsiIW1hcmdpbnMiXS5yaWdodD0rQ2UuUmlnaHQpLGlzTmFOKCtDZS5Cb3R0'@;
put 'b20pfHwoeFsiIW1hcmdpbnMiXS5ib3R0b209K0NlLkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOk8uVmlld3N8fChPLlZpZXdzPVtdKSxPLlZpZXdzWzBdfHwoTy5WaWV3c1swXT17fSksTy5WaWV3c1swXS5SVEw9ITA7YnJlYWs7Y2FzZSJmcmVlemVwYW5lcyI6Y2Fz'@;
put 'ZSJmcm96ZW5ub3NwbGl0IjpjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjpjYXNlImRvbm90ZGlzcGxheWdyaWRsaW5lcyI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFu'@;
put 'ZSI6Y2FzZSJ1bnN5bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNl'@;
put 'ImVuYWJsZXNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93'@;
put 'dmlzaWJsZSI6Y2FzZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2Fz'@;
put 'ZSJmaXRoZWlnaHQiOmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxs'@;
put 'b3dpbnNlcnRjb2xzIjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXlo'@;
put 'ZWFkaW5ncyI6Y2FzZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlv'@;
put 'biI6Y2FzZSJhbGxvd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlIm5vc3VtbWFyeXJvd3NiZWxvd2RldGFpbCI6eFsiIW91dGxpbmUiXXx8KHhbIiFvdXRs'@;
put 'aW5lIl09e30pLHhbIiFvdXRsaW5lIl0uYWJvdmU9ITA7YnJlYWs7Y2FzZSJub3N1bW1hcnljb2x1bW5zcmlnaHRkZXRhaWwiOnhbIiFvdXRsaW5lIl18fCh4WyIhb3V0bGluZSJdPXt9KSx4WyIhb3V0bGluZSJdLmxlZnQ9ITA7YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlInBpdm90'@;
put 'dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6c3dpdGNoKGZbM10pe2Nhc2UiaW1tZWRpYXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0aXBsZWl0ZW1sYWJlbCI6Y2FzZSJjb21wYWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNhc2Uib3JpZW50YXRp'@;
put 'b24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxvY2F0aW9uIjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9zaXRpb24iOmNhc2UicGl2b3RpdGVtIjpjYXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpjYXNlInBhcmVudGZp'@;
put 'ZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNhc2UiY291bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0ZW10eXBlIjpjYXNlInB0c291cmNlIjpjYXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2FzZSJmaWxlbmFtZSI6'@;
put 'Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJub3Jvd2dyYW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNhc2UiaGlkZGVuIjpjYXNlInN1YnRvdGFsIjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0aW9uIjpjYXNlInJl'@;
put 'ZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNlIm1lcmdlbGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNlInJlZnJlc2huYW1lIjpjYXNlInJlZnJlc2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmNhc2Ui'@;
put 'dmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVtaW4iOmNhc2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNhbGN1bGF0aW9uIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKGZbM10pe2Nhc2UiY29sYnJlYWtzIjpj'@;
put 'YXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKGZbM10pe2Nhc2UiYXV0b2ZpbHRlcmNvbHVtbiI6'@;
put 'Y2FzZSJhdXRvZmlsdGVyY29uZGl0aW9uIjpjYXNlImF1dG9maWx0ZXJhbmQiOmNhc2UiYXV0b2ZpbHRlcm9yIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UicXVlcnl0YWJsZSI6c3dpdGNoKGZbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQiOmNhc2UiYXV0b2Zvcm1h'@;
put 'dHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0eXBlIjpjYXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZyZXNoZWRpbnhsOSI6Y2FzZSJ1cmxzdHJpbmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1hbmR0ZXh0IjpjYXNlInJl'@;
put 'ZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6Y2FzZSJjb2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpjYXNlImRvbm90cHJvbXB0Zm9yZmlsZSI6Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJlciI6Y2FzZSJkZWNpbWFs'@;
put 'IjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5nbWludXNudW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNlImZpZWxkdHlwZSI6Y2FzZSJkZWxpbWl0ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6Y2FzZSJ2ZXJzaW9ubGFz'@;
put 'dGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOnN3aXRjaChmWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNh'@;
put 'c2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhpZGUiOmNh'@;
put 'c2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2Uic29ydGluZyI6Y2FzZSJjb25kaXRpb25hbGZvcm1h'@;
put 'dHRpbmciOnN3aXRjaChmWzNdKXtjYXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVz'@;
put 'c2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZh'@;
put 'bHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpicmVhaztkZWZhdWx0OkxlPSExfWJyZWFrO2Nhc2UibWFwaW5mbyI6Y2FzZSJzY2hlbWEiOmNhc2UiZGF0YSI6c3dpdGNoKGZbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpjYXNlInhwYXRoIjpjYXNlImZpZWxk'@;
put 'IjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUiOmNhc2UiYWxsIjpjYXNlImF0dHJp'@;
put 'YnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpMZT0hMX1pZihMZXx8ZlszXS5tYXRjaCgvIVxbQ0RBVEEvKSlicmVhaztpZighY1tjLmxlbmd0aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6'@;
put 'ZWQgdGFnOiAiK2ZbM10rInwiK2Muam9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiPT09Y1tjLmxlbmd0aC0xXVswXSl7aWYoIi8+Ij09PWZbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PWZbMV0/WHAoWCxqLGVlLGEuc2xpY2UoYixmLmluZGV4KSk6KGVlPWYsYj1mLmlu'@;
put 'ZGV4K2ZbMF0ubGVuZ3RoKTticmVha31pZihyLldURil0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK2ZbM10rInwiK2Muam9pbigifCIpfXZhciBvZT17fTtyZXR1cm4hci5ib29rU2hlZXRzJiYhci5ib29rUHJvcHMmJihvZS5TaGVldHM9bCksb2UuU2hlZXROYW1lcz1oLG9lLldvcmtib29r'@;
put 'PU8sb2UuU1NGPU1lKHBlKSxvZS5Qcm9wcz1WLG9lLkN1c3Rwcm9wcz1YLG9lfWZ1bmN0aW9uIFVuKGUsdCl7c3dpdGNoKCRuKHQ9dHx8e30pLHQudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gTW4oT3IoZSksdCk7Y2FzZSJiaW5hcnkiOmNhc2UiYnVmZmVyIjpjYXNlImZp'@;
put 'bGUiOnJldHVybiBNbihlLHQpO2Nhc2UiYXJyYXkiOnJldHVybiBNbih3dChlKSx0KX19dmFyIGZtPVs2MCwxMDg0LDIwNjYsMjE2NSwyMTc1XTtmdW5jdGlvbiBjbShlLHQscixhLG4pe3ZhciBpPWEscz1bXSxmPXIuc2xpY2Uoci5sLHIubCtpKTtpZihuJiZuLmVuYyYmbi5lbmMuaW5zaXR1'@;
put 'JiZmLmxlbmd0aD4wKXN3aXRjaChlKXtjYXNlIDk6Y2FzZSA1MjE6Y2FzZSAxMDMzOmNhc2UgMjA1NzpjYXNlIDQ3OmNhc2UgNDA1OmNhc2UgMjI1OmNhc2UgNDA2OmNhc2UgMzEyOmNhc2UgNDA0OmNhc2UgMTA6Y2FzZSAxMzM6YnJlYWs7ZGVmYXVsdDpuLmVuYy5pbnNpdHUoZil9cy5wdXNo'@;
put 'KGYpLHIubCs9aTtmb3IodmFyIGM9dXQocixyLmwpLG89V25bY10sbD0wO251bGwhPW8mJmZtLmluZGV4T2YoYyk+LTE7KWk9dXQocixyLmwrMiksbD1yLmwrNCwyMDY2PT1jP2wrPTQ6KDIxNjU9PWN8fDIxNzU9PWMpJiYobCs9MTIpLGY9ci5zbGljZShsLHIubCs0K2kpLHMucHVzaChmKSxy'@;
put 'LmwrPTQraSxvPVduW2M9dXQocixyLmwpXTt2YXIgaD1mcihzKTtocihoLDApO3ZhciB4PTA7aC5sZW5zPVtdO2Zvcih2YXIgZD0wO2Q8cy5sZW5ndGg7KytkKWgubGVucy5wdXNoKHgpLHgrPXNbZF0ubGVuZ3RoO2lmKGgubGVuZ3RoPGEpdGhyb3ciWExTIFJlY29yZCAweCIrZS50b1N0cmlu'@;
put 'ZygxNikrIiBUcnVuY2F0ZWQ6ICIraC5sZW5ndGgrIiA8ICIrYTtyZXR1cm4gdC5mKGgsaC5sZW5ndGgsbil9ZnVuY3Rpb24gaXQoZSx0LHIpe2lmKCJ6IiE9PWUudCYmZS5YRil7dmFyIGE9MDt0cnl7YT1lLnp8fGUuWEYubnVtRm10SWR8fDAsdC5jZWxsTkYmJihlLno9cGVbYV0pfWNhdGNo'@;
put 'KGkpe2lmKHQuV1RGKXRocm93IGl9aWYoIXR8fCExIT09dC5jZWxsVGV4dCl0cnl7ZS53PSJlIj09PWUudD9lLnd8fHh0W2Uudl06MD09PWF8fCJHZW5lcmFsIj09YT8ibiI9PT1lLnQ/KDB8ZS52KT09PWUudj9lLnYudG9TdHJpbmcoMTApOmthKGUudik6TnQoZS52KTpScihhLGUudix7ZGF0'@;
put 'ZTE5MDQ6ISFyLGRhdGVORjp0JiZ0LmRhdGVORn0pfWNhdGNoKGkpe2lmKHQuV1RGKXRocm93IGl9aWYodC5jZWxsRGF0ZXMmJmEmJiJuIj09ZS50JiZidChwZVthXXx8U3RyaW5nKGEpKSl7dmFyIG49a3QoZS52KTtuJiYoZS50PSJkIixlLnY9bmV3IERhdGUobi55LG4ubS0xLG4uZCxuLkgs'@;
put 'bi5NLG4uUyxuLnUpKX19fWZ1bmN0aW9uIE8wKGUsdCxyKXtyZXR1cm57djplLGl4ZmU6dCx0OnJ9fXZhciB6YT17U0k6ImUwODU5ZmYyZjk0ZjY4MTBhYjkxMDgwMDJiMjdiM2Q5IixEU0k6IjAyZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIixVREk6IjA1ZDVjZGQ1OWMyZTFiMTA5'@;
put 'Mzk3MDgwMDJiMmNmOWFlIn07ZnVuY3Rpb24gS2YoZSx0KXt2YXIgcixhLG4saTtpZih0fHwodD17fSksJG4odCkscjAoKSx0LmNvZGVwYWdlJiZlMCh0LmNvZGVwYWdlKSxlLkZ1bGxQYXRocyl7aWYodmUuZmluZChlLCIvZW5jcnlwdGlvbiIpKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBw'@;
put 'YXNzd29yZC1wcm90ZWN0ZWQiKTtyPXZlLmZpbmQoZSwiIUNvbXBPYmoiKSxhPXZlLmZpbmQoZSwiL1dvcmtib29rIil8fHZlLmZpbmQoZSwiL0Jvb2siKX1lbHNle3N3aXRjaCh0LnR5cGUpe2Nhc2UiYmFzZTY0IjplPUlyKE9yKGUpKTticmVhaztjYXNlImJpbmFyeSI6ZT1JcihlKTticmVh'@;
put 'aztjYXNlImJ1ZmZlciI6YnJlYWs7Y2FzZSJhcnJheSI6QXJyYXkuaXNBcnJheShlKXx8KGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkpfWhyKGUsMCksYT17Y29udGVudDplfX1pZihyJiZmdW5jdGlvbiBzbShlKXt2YXIgdD17fSxyPWUuY29udGVudDtpZihyLmw9MjgsdC5BbnNp'@;
put 'VXNlclR5cGU9ci5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSx0LkFuc2lDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24gcW8oZSl7cmV0dXJuIGxzKGUsMSl9KHIpLHIubGVuZ3RoLXIubDw9NClyZXR1cm4gdDt2YXIgYT1yLnJlYWRfc2hpZnQoNCk7aWYoMD09YXx8YT40MHx8KHIubC09NCx0'@;
put 'LlJlc2VydmVkMT1yLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLHIubGVuZ3RoLXIubDw9NCl8fDE5MDc1MDU2NTIhPT0oYT1yLnJlYWRfc2hpZnQoNCkpfHwodC5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIFpvKGUpe3JldHVybiBscyhlLDIpfShyKSwwPT0oYT1yLnJlYWRf'@;
put 'c2hpZnQoNCkpfHxhPjQwKSlyZXR1cm4gdDtyLmwtPTQsdC5SZXNlcnZlZDI9ci5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpfShyKSx0LmJvb2tQcm9wcyYmIXQuYm9va1NoZWV0cyluPXt9O2Vsc2V7dmFyIHM9U2U/ImJ1ZmZlciI6ImFycmF5IjtpZihhJiZhLmNvbnRlbnQpbj1mdW5jdGlvbiBv'@;
put 'bShlLHQpe3ZhciByPXtvcHRzOnt9fSxhPXt9O251bGwhPXplJiZudWxsPT10LmRlbnNlJiYodC5kZW5zZT16ZSk7dmFyIGgsZCx1LHAsZyxOLG49dC5kZW5zZT9bXTp7fSxpPXt9LHM9e30sZj1udWxsLGM9W10sbz0iIixsPXt9LHg9IiIsaz17fSxUPVtdLE09W10sST1bXSx5PXtTaGVldHM6'@;
put 'W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9LFZpZXdzOlt7fV19LFA9e30sUj1mdW5jdGlvbih5ZSl7cmV0dXJuIHllPDg/VnRbeWVdOnllPDY0JiZJW3llLThdfHxWdFt5ZV19LFg9ZnVuY3Rpb24oeWUsWmUsS3Ipe2lmKCEoSz4xfHxLci5zaGVldFJvd3MmJnllLnI+PUtyLnNoZWV0Um93cykp'@;
put 'e2lmKEtyLmNlbGxTdHlsZXMmJlplLlhGJiZaZS5YRi5kYXRhJiZmdW5jdGlvbih5ZSxaZSxLcil7dmFyIHF0LHNyPVplLlhGLmRhdGE7c3ImJnNyLnBhdHRlcm5UeXBlJiZLciYmS3IuY2VsbFN0eWxlcyYmKFplLnM9e30sWmUucy5wYXR0ZXJuVHlwZT1zci5wYXR0ZXJuVHlwZSwocXQ9YmEo'@;
put 'Uihzci5pY3ZGb3JlKSkpJiYoWmUucy5mZ0NvbG9yPXtyZ2I6cXR9KSwocXQ9YmEoUihzci5pY3ZCYWNrKSkpJiYoWmUucy5iZ0NvbG9yPXtyZ2I6cXR9KSl9KDAsWmUsS3IpLGRlbGV0ZSBaZS5peGZlLGRlbGV0ZSBaZS5YRixoPXllLHg9Z2UoeWUpLCghc3x8IXMuc3x8IXMuZSkmJihzPXtz'@;
put 'OntyOjAsYzowfSxlOntyOjAsYzowfX0pLHllLnI8cy5zLnImJihzLnMucj15ZS5yKSx5ZS5jPHMucy5jJiYocy5zLmM9eWUuYykseWUucisxPnMuZS5yJiYocy5lLnI9eWUucisxKSx5ZS5jKzE+cy5lLmMmJihzLmUuYz15ZS5jKzEpLEtyLmNlbGxGb3JtdWxhJiZaZS5mKWZvcih2YXIgc3I9'@;
put 'MDtzcjxULmxlbmd0aDsrK3NyKWlmKCEoVFtzcl1bMF0ucy5jPnllLmN8fFRbc3JdWzBdLnMucj55ZS5yfHxUW3NyXVswXS5lLmM8eWUuY3x8VFtzcl1bMF0uZS5yPHllLnIpKXtaZS5GPXdlKFRbc3JdWzBdKSwoVFtzcl1bMF0ucy5jIT15ZS5jfHxUW3NyXVswXS5zLnIhPXllLnIpJiZkZWxl'@;
put 'dGUgWmUuZixaZS5mJiYoWmUuZj0iIitrcihUW3NyXVsxXSwwLHllLGNlLGIpKTticmVha31Lci5kZW5zZT8oblt5ZS5yXXx8KG5beWUucl09W10pLG5beWUucl1beWUuY109WmUpOm5beF09WmV9fSxiPXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjprLGFycmF5ZjpULHJydGFi'@;
put 'aWQ6W10sbGFzdHVzZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0eWxlczohIXQmJiEhdC5jZWxsU3R5bGVzLFdURjohIXQmJiEhdC53dGZ9O3QucGFzc3dvcmQmJihiLnBhc3N3b3JkPXQucGFzc3dvcmQpO3ZhciBlZSxsZT1bXSxyZT1bXSxkZT1bXSx1ZT1bXSxG'@;
put 'ZT0hMSxjZT1bXTtjZS5TaGVldE5hbWVzPWIuc25hbWVzLGNlLnNoYXJlZGY9Yi5zaGFyZWRmLGNlLmFycmF5Zj1iLmFycmF5ZixjZS5uYW1lcz1bXSxjZS5YVEk9W107dmFyIEQseGU9MCxLPTAsQz0wLFU9W10sTz1bXTtiLmNvZGVwYWdlPTEyMDAsTXIoMTIwMCk7Zm9yKHZhciBqPSExO2Uu'@;
put 'bDxlLmxlbmd0aC0xOyl7dmFyIHNlPWUubCxaPWUucmVhZF9zaGlmdCgyKTtpZigwPT09WiYmMTA9PT14ZSlicmVhazt2YXIgUT1lLmw9PT1lLmxlbmd0aD8wOmUucmVhZF9zaGlmdCgyKSxZPVduW1pdO2lmKFkmJlkuZil7aWYodC5ib29rU2hlZXRzJiYxMzM9PT14ZSYmMTMzIT09WilicmVh'@;
put 'aztpZih4ZT1aLDI9PT1ZLnJ8fDEyPT1ZLnIpe3ZhciBFZT1lLnJlYWRfc2hpZnQoMik7aWYoUS09MiwhYi5lbmMmJkVlIT09WiYmKCgyNTUmRWUpPDw4fEVlPj44KSE9PVopdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRjaDogIitFZSsiIT0iK1opOzEyPT1ZLnImJihlLmwrPTEwLFEtPTEw'@;
put 'KX12YXIgQT17fTtpZihBPTEwPT09Wj9ZLmYoZSxRLGIpOmNtKFosWSxlLFEsYiksMD09SyYmLTE9PT1bOSw1MjEsMTAzMywyMDU3XS5pbmRleE9mKHhlKSljb250aW51ZTtzd2l0Y2goWil7Y2FzZSAzNDpyLm9wdHMuRGF0ZTE5MDQ9eS5XQlByb3BzLmRhdGUxOTA0PUE7YnJlYWs7Y2FzZSAx'@;
put 'MzQ6ci5vcHRzLldyaXRlUHJvdGVjdD0hMDticmVhaztjYXNlIDQ3OmlmKGIuZW5jfHwoZS5sPTApLGIuZW5jPUEsIXQucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PUEudmFsaWQpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0'@;
put 'aW9uIHNjaGVtZSB1bnN1cHBvcnRlZCIpO2lmKCFBLnZhbGlkKXRocm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMgaW5jb3JyZWN0Iik7YnJlYWs7Y2FzZSA5MjpiLmxhc3R1c2VyPUE7YnJlYWs7Y2FzZSA2Njp2YXIgUGU9TnVtYmVyKEEpO3N3aXRjaChQZSl7Y2FzZSAyMTAxMDpQZT0xMjAw'@;
put 'O2JyZWFrO2Nhc2UgMzI3Njg6UGU9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6UGU9MTI1Mn1NcihiLmNvZGVwYWdlPVBlKSxqPSEwO2JyZWFrO2Nhc2UgMzE3OmIucnJ0YWJpZD1BO2JyZWFrO2Nhc2UgMjU6Yi53aW5sb2NrZWQ9QTticmVhaztjYXNlIDQzOTpyLm9wdHMuUmVmcmVzaEFsbD1BO2Jy'@;
put 'ZWFrO2Nhc2UgMTI6ci5vcHRzLkNhbGNDb3VudD1BO2JyZWFrO2Nhc2UgMTY6ci5vcHRzLkNhbGNEZWx0YT1BO2JyZWFrO2Nhc2UgMTc6ci5vcHRzLkNhbGNJdGVyPUE7YnJlYWs7Y2FzZSAxMzpyLm9wdHMuQ2FsY01vZGU9QTticmVhaztjYXNlIDE0OnIub3B0cy5DYWxjUHJlY2lzaW9uPUE7'@;
put 'YnJlYWs7Y2FzZSA5NTpyLm9wdHMuQ2FsY1NhdmVSZWNhbGM9QTticmVhaztjYXNlIDE1OmIuQ2FsY1JlZk1vZGU9QTticmVhaztjYXNlIDIyMTE6ci5vcHRzLkZ1bGxDYWxjPUE7YnJlYWs7Y2FzZSAxMjk6QS5mRGlhbG9nJiYoblsiIXR5cGUiXT0iZGlhbG9nIiksQS5mQmVsb3d8fCgoblsi'@;
put 'IW91dGxpbmUiXXx8KG5bIiFvdXRsaW5lIl09e30pKS5hYm92ZT0hMCksQS5mUmlnaHR8fCgoblsiIW91dGxpbmUiXXx8KG5bIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIDIyNDpNLnB1c2goQSk7YnJlYWs7Y2FzZSA0MzA6Y2UucHVzaChbQV0pLGNlW2NlLmxlbmd0aC0x'@;
put 'XS5YVEk9W107YnJlYWs7Y2FzZSAzNTpjYXNlIDU0NzpjZVtjZS5sZW5ndGgtMV0ucHVzaChBKTticmVhaztjYXNlIDI0OmNhc2UgNTM2OkQ9e05hbWU6QS5OYW1lLFJlZjprcihBLnJnY2UsMCxudWxsLGNlLGIpfSxBLml0YWI+MCYmKEQuU2hlZXQ9QS5pdGFiLTEpLGNlLm5hbWVzLnB1c2go'@;
put 'RCksY2VbMF18fChjZVswXT1bXSxjZVswXS5YVEk9W10pLGNlW2NlLmxlbmd0aC0xXS5wdXNoKEEpLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT1BLk5hbWUmJkEuaXRhYj4wJiZBLnJnY2UmJkEucmdjZVswXSYmQS5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09QS5yZ2NlWzBdWzBdWzBdJiYo'@;
put 'T1tBLml0YWItMV09e3JlZjp3ZShBLnJnY2VbMF1bMF1bMV1bMl0pfSk7YnJlYWs7Y2FzZSAyMjpiLkV4dGVybkNvdW50PUE7YnJlYWs7Y2FzZSAyMzowPT1jZS5sZW5ndGgmJihjZVswXT1bXSxjZVswXS5YVEk9W10pLGNlW2NlLmxlbmd0aC0xXS5YVEk9Y2VbY2UubGVuZ3RoLTFdLlhUSS5j'@;
put 'b25jYXQoQSksY2UuWFRJPWNlLlhUSS5jb25jYXQoQSk7YnJlYWs7Y2FzZSAyMTk2OmlmKGIuYmlmZjw4KWJyZWFrO251bGwhPUQmJihELkNvbW1lbnQ9QVsxXSk7YnJlYWs7Y2FzZSAxODpuWyIhcHJvdGVjdCJdPUE7YnJlYWs7Y2FzZSAxOTowIT09QSYmYi5XVEYmJmNvbnNvbGUuZXJyb3Io'@;
put 'IlBhc3N3b3JkIHZlcmlmaWVyOiAiK0EpO2JyZWFrO2Nhc2UgMTMzOmlbQS5wb3NdPUEsYi5zbmFtZXMucHVzaChBLm5hbWUpO2JyZWFrO2Nhc2UgMTA6aWYoLS1LKWJyZWFrO2lmKHMuZSl7aWYocy5lLnI+MCYmcy5lLmM+MCl7aWYocy5lLnItLSxzLmUuYy0tLG5bIiFyZWYiXT13ZShzKSx0'@;
put 'LnNoZWV0Um93cyYmdC5zaGVldFJvd3M8PXMuZS5yKXt2YXIgQWU9cy5lLnI7cy5lLnI9dC5zaGVldFJvd3MtMSxuWyIhZnVsbHJlZiJdPW5bIiFyZWYiXSxuWyIhcmVmIl09d2Uocykscy5lLnI9QWV9cy5lLnIrKyxzLmUuYysrfWxlLmxlbmd0aD4wJiYoblsiIW1lcmdlcyJdPWxlKSxyZS5s'@;
put 'ZW5ndGg+MCYmKG5bIiFvYmplY3RzIl09cmUpLGRlLmxlbmd0aD4wJiYoblsiIWNvbHMiXT1kZSksdWUubGVuZ3RoPjAmJihuWyIhcm93cyJdPXVlKSx5LlNoZWV0cy5wdXNoKFApfSIiPT09bz9sPW46YVtvXT1uLG49dC5kZW5zZT9bXTp7fTticmVhaztjYXNlIDk6Y2FzZSA1MjE6Y2FzZSAx'@;
put 'MDMzOmNhc2UgMjA1NzppZig4PT09Yi5iaWZmJiYoYi5iaWZmPXs5OjIsNTIxOjMsMTAzMzo0fVtaXXx8ezUxMjoyLDc2ODozLDEwMjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W0EuQklGRlZlcl18fDgpLGIuYmlmZmd1ZXNzPTA9PUEuQklGRlZlciwwPT1BLkJJRkZWZXImJjQwOTY9PUEu'@;
put 'ZHQmJihiLmJpZmY9NSxqPSEwLE1yKGIuY29kZXBhZ2U9Mjg1OTEpKSw4PT1iLmJpZmYmJjA9PUEuQklGRlZlciYmMTY9PUEuZHQmJihiLmJpZmY9MiksSysrKWJyZWFrO2lmKG49dC5kZW5zZT9bXTp7fSxiLmJpZmY8OCYmIWomJihqPSEwLE1yKGIuY29kZXBhZ2U9dC5jb2RlcGFnZXx8MTI1'@;
put 'MikpLGIuYmlmZjw1fHwwPT1BLkJJRkZWZXImJjQwOTY9PUEuZHQpeyIiPT09byYmKG89IlNoZWV0MSIpLHM9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTt2YXIgTGU9e3BvczplLmwtUSxuYW1lOm99O2lbTGUucG9zXT1MZSxiLnNuYW1lcy5wdXNoKG8pfWVsc2Ugbz0oaVtzZV18fHtuYW1l'@;
put 'OiIifSkubmFtZTszMj09QS5kdCYmKG5bIiF0eXBlIl09ImNoYXJ0IiksNjQ9PUEuZHQmJihuWyIhdHlwZSJdPSJtYWNybyIpLGxlPVtdLHJlPVtdLGIuYXJyYXlmPVQ9W10sZGU9W10sdWU9W10sRmU9ITEsUD17SGlkZGVuOihpW3NlXXx8e2hzOjB9KS5ocyxuYW1lOm99O2JyZWFrO2Nhc2Ug'@;
put 'NTE1OmNhc2UgMzpjYXNlIDI6ImNoYXJ0Ij09blsiIXR5cGUiXSYmKHQuZGVuc2U/KG5bQS5yXXx8W10pW0EuY106bltnZSh7YzpBLmMscjpBLnJ9KV0pJiYrK0EuYyxnPXtpeGZlOkEuaXhmZSxYRjpNW0EuaXhmZV18fHt9LHY6QS52YWwsdDoibiJ9LEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2'@;
put 'M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6QS5yfSxnLHQpO2JyZWFrO2Nhc2UgNTpjYXNlIDUxNzpnPXtpeGZlOkEuaXhmZSxYRjpNW0EuaXhmZV0sdjpBLnZhbCx0OkEudH0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCks'@;
put 'WCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSA2Mzg6Zz17aXhmZTpBLml4ZmUsWEY6TVtBLml4ZmVdLHY6QS5ya251bSx0OiJuIn0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7YzpBLmMscjpBLnJ9LGcsdCk7YnJlYWs7Y2FzZSAx'@;
put 'ODk6Zm9yKHZhciBDZT1BLmM7Q2U8PUEuQzsrK0NlKXt2YXIgb2U9QS5ya3JlY1tDZS1BLmNdWzBdO2c9e2l4ZmU6b2UsWEY6TVtvZV0sdjpBLnJrcmVjW0NlLUEuY11bMV0sdDoibiJ9LEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6Q2Us'@;
put 'cjpBLnJ9LGcsdCl9YnJlYWs7Y2FzZSA2OmNhc2UgNTE4OmNhc2UgMTAzMDppZigiU3RyaW5nIj09QS52YWwpe2Y9QTticmVha31pZigoZz1PMChBLnZhbCxBLmNlbGwuaXhmZSxBLnR0KSkuWEY9TVtnLml4ZmVdLHQuY2VsbEZvcm11bGEpe3ZhciBxZT1BLmZvcm11bGE7aWYocWUmJnFlWzBd'@;
put 'JiZxZVswXVswXSYmIlB0Z0V4cCI9PXFlWzBdWzBdWzBdKXt2YXIganI9cWVbMF1bMF1bMV1bMF0sZnQ9cWVbMF1bMF1bMV1bMV0sdnQ9Z2Uoe3I6anIsYzpmdH0pO2tbdnRdP2cuZj0iIitrcihBLmZvcm11bGEsMCxBLmNlbGwsY2UsYik6Zy5GPSgodC5kZW5zZT8obltqcl18fFtdKVtmdF06'@;
put 'blt2dF0pfHx7fSkuRn1lbHNlIGcuZj0iIitrcihBLmZvcm11bGEsMCxBLmNlbGwsY2UsYil9Qz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWChBLmNlbGwsZyx0KSxmPUE7YnJlYWs7Y2FzZSA3OmNhc2UgNTE5OmlmKCFmKXRocm93IG5ldyBFcnJv'@;
put 'cigiU3RyaW5nIHJlY29yZCBleHBlY3RzIEZvcm11bGEiKTtmLnZhbD1BLChnPU8wKEEsZi5jZWxsLml4ZmUsInMiKSkuWEY9TVtnLml4ZmVdLHQuY2VsbEZvcm11bGEmJihnLmY9IiIra3IoZi5mb3JtdWxhLDAsZi5jZWxsLGNlLGIpKSxDPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChn'@;
put 'LHQsci5vcHRzLkRhdGUxOTA0KSxYKGYuY2VsbCxnLHQpLGY9bnVsbDticmVhaztjYXNlIDMzOmNhc2UgNTQ1OlQucHVzaChBKTt2YXIgSmE9Z2UoQVswXS5zKTtpZihkPXQuZGVuc2U/KG5bQVswXS5zLnJdfHxbXSlbQVswXS5zLmNdOm5bSmFdLHQuY2VsbEZvcm11bGEmJmQpe2lmKCFmfHwh'@;
put 'SmF8fCFkKWJyZWFrO2QuZj0iIitrcihBWzFdLDAsQVswXSxjZSxiKSxkLkY9d2UoQVswXSl9YnJlYWs7Y2FzZSAxMjEyOmlmKCF0LmNlbGxGb3JtdWxhKWJyZWFrO2lmKHgpe2lmKCFmKWJyZWFrO2tbZ2UoZi5jZWxsKV09QVswXSwoKGQ9dC5kZW5zZT8obltmLmNlbGwucl18fFtdKVtmLmNl'@;
put 'bGwuY106bltnZShmLmNlbGwpXSl8fHt9KS5mPSIiK2tyKEFbMF0sMCxoLGNlLGIpfWJyZWFrO2Nhc2UgMjUzOmc9TzAoY1tBLmlzc3RdLnQsQS5peGZlLCJzIiksY1tBLmlzc3RdLmgmJihnLmg9Y1tBLmlzc3RdLmgpLGcuWEY9TVtnLml4ZmVdLEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10p'@;
put 'LGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6QS5yfSxnLHQpO2JyZWFrO2Nhc2UgNTEzOnQuc2hlZXRTdHVicyYmKGc9e2l4ZmU6QS5peGZlLFhGOk1bQS5peGZlXSx0OiJ6In0sQz4wJiYoZy56PVVbZy5peGZlPj44JjYzXSksaXQoZyx0LHIub3B0cy5EYXRlMTkwNCksWCh7'@;
put 'YzpBLmMscjpBLnJ9LGcsdCkpO2JyZWFrO2Nhc2UgMTkwOmlmKHQuc2hlZXRTdHVicylmb3IodmFyIE90PUEuYztPdDw9QS5DOysrT3Qpe3ZhciBMcj1BLml4ZmVbT3QtQS5jXTtnPXtpeGZlOkxyLFhGOk1bTHJdLHQ6InoifSxDPjAmJihnLno9VVtnLml4ZmU+PjgmNjNdKSxpdChnLHQsci5v'@;
put 'cHRzLkRhdGUxOTA0KSxYKHtjOk90LHI6QS5yfSxnLHQpfWJyZWFrO2Nhc2UgMjE0OmNhc2UgNTE2OmNhc2UgNDooZz1PMChBLnZhbCxBLml4ZmUsInMiKSkuWEY9TVtnLml4ZmVdLEM+MCYmKGcuej1VW2cuaXhmZT4+OCY2M10pLGl0KGcsdCxyLm9wdHMuRGF0ZTE5MDQpLFgoe2M6QS5jLHI6'@;
put 'QS5yfSxnLHQpO2JyZWFrO2Nhc2UgMDpjYXNlIDUxMjoxPT09SyYmKHM9QSk7YnJlYWs7Y2FzZSAyNTI6Yz1BO2JyZWFrO2Nhc2UgMTA1NDppZig0PT1iLmJpZmYpe1VbQysrXT1BWzFdO2Zvcih2YXIgcHQ9MDtwdDxDKzE2MyYmcGVbcHRdIT1BWzFdOysrcHQpO3B0Pj0xNjMmJmV0KEFbMV0s'@;
put 'QysxNjMpfWVsc2UgZXQoQVsxXSxBWzBdKTticmVhaztjYXNlIDMwOlVbQysrXT1BO2Zvcih2YXIgSXQ9MDtJdDxDKzE2MyYmcGVbSXRdIT1BOysrSXQpO0l0Pj0xNjMmJmV0KEEsQysxNjMpO2JyZWFrO2Nhc2UgMjI5OmxlPWxlLmNvbmNhdChBKTticmVhaztjYXNlIDkzOnJlW0EuY21vWzBd'@;
put 'XT1iLmxhc3RvYmo9QTticmVhaztjYXNlIDQzODpiLmxhc3RvYmouVHhPPUE7YnJlYWs7Y2FzZSAxMjc6Yi5sYXN0b2JqLkltRGF0YT1BO2JyZWFrO2Nhc2UgNDQwOmZvcihwPUFbMF0ucy5yO3A8PUFbMF0uZS5yOysrcClmb3IodT1BWzBdLnMuYzt1PD1BWzBdLmUuYzsrK3UpKGQ9dC5kZW5z'@;
put 'ZT8obltwXXx8W10pW3VdOm5bZ2Uoe2M6dSxyOnB9KV0pJiYoZC5sPUFbMV0pO2JyZWFrO2Nhc2UgMjA0ODpmb3IocD1BWzBdLnMucjtwPD1BWzBdLmUucjsrK3ApZm9yKHU9QVswXS5zLmM7dTw9QVswXS5lLmM7Kyt1KShkPXQuZGVuc2U/KG5bcF18fFtdKVt1XTpuW2dlKHtjOnUscjpwfSld'@;
put 'KSYmZC5sJiYoZC5sLlRvb2x0aXA9QVsxXSk7YnJlYWs7Y2FzZSAyODppZihiLmJpZmY8PTUmJmIuYmlmZj49MilicmVhaztkPXQuZGVuc2U/KG5bQVswXS5yXXx8W10pW0FbMF0uY106bltnZShBWzBdKV07dmFyIHFhPXJlW0FbMl1dO2R8fCh0LmRlbnNlPyhuW0FbMF0ucl18fChuW0FbMF0u'@;
put 'cl09W10pLGQ9bltBWzBdLnJdW0FbMF0uY109e3Q6InoifSk6ZD1uW2dlKEFbMF0pXT17dDoieiJ9LHMuZS5yPU1hdGgubWF4KHMuZS5yLEFbMF0ucikscy5zLnI9TWF0aC5taW4ocy5zLnIsQVswXS5yKSxzLmUuYz1NYXRoLm1heChzLmUuYyxBWzBdLmMpLHMucy5jPU1hdGgubWluKHMucy5j'@;
put 'LEFbMF0uYykpLGQuY3x8KGQuYz1bXSksZC5jLnB1c2goe2E6QVsxXSx0OnFhLlR4Ty50fSk7YnJlYWs7Y2FzZSAyMTczOnExKDAsQS5leHQpO2JyZWFrO2Nhc2UgMTI1OmlmKCFiLmNlbGxTdHlsZXMpYnJlYWs7Zm9yKDtBLmU+PUEuczspZGVbQS5lLS1dPXt3aWR0aDpBLncvMjU2LGxldmVs'@;
put 'OkEubGV2ZWx8fDAsaGlkZGVuOiEhKDEmQS5mbGFncyl9LEZlfHwoRmU9ITAsQW4oQS53LzI1NikpLEt0KGRlW0EuZSsxXSk7YnJlYWs7Y2FzZSA1MjA6dmFyIHlyPXt9O251bGwhPUEubGV2ZWwmJih1ZVtBLnJdPXlyLHlyLmxldmVsPUEubGV2ZWwpLEEuaGlkZGVuJiYodWVbQS5yXT15cix5'@;
put 'ci5oaWRkZW49ITApLEEuaHB0JiYodWVbQS5yXT15cix5ci5ocHQ9QS5ocHQseXIuaHB4PW9hKEEuaHB0KSk7YnJlYWs7Y2FzZSAzODpjYXNlIDM5OmNhc2UgNDA6Y2FzZSA0MTpuWyIhbWFyZ2lucyJdfHxZdChuWyIhbWFyZ2lucyJdPXt9KSxuWyIhbWFyZ2lucyJdW3szODoibGVmdCIsMzk6'@;
put 'InJpZ2h0Iiw0MDoidG9wIiw0MToiYm90dG9tIn1bWl1dPUE7YnJlYWs7Y2FzZSAxNjE6blsiIW1hcmdpbnMiXXx8WXQoblsiIW1hcmdpbnMiXT17fSksblsiIW1hcmdpbnMiXS5oZWFkZXI9QS5oZWFkZXIsblsiIW1hcmdpbnMiXS5mb290ZXI9QS5mb290ZXI7YnJlYWs7Y2FzZSA1NzQ6QS5S'@;
put 'VEwmJih5LlZpZXdzWzBdLlJUTD0hMCk7YnJlYWs7Y2FzZSAxNDY6ST1BO2JyZWFrO2Nhc2UgMjE5ODplZT1BO2JyZWFrO2Nhc2UgMTQwOk49QTticmVhaztjYXNlIDQ0MjpvP1AuQ29kZU5hbWU9QXx8UC5uYW1lOnkuV0JQcm9wcy5Db2RlTmFtZT1BfHwiVGhpc1dvcmtib29rIn19ZWxzZSBZ'@;
put 'fHxjb25zb2xlLmVycm9yKCJNaXNzaW5nIEluZm8gZm9yIFhMUyBSZWNvcmQgMHgiK1oudG9TdHJpbmcoMTYpKSxlLmwrPVF9cmV0dXJuIHIuU2hlZXROYW1lcz0kZShpKS5zb3J0KGZ1bmN0aW9uKGN0LHllKXtyZXR1cm4gTnVtYmVyKGN0KS1OdW1iZXIoeWUpfSkubWFwKGZ1bmN0aW9uKGN0'@;
put 'KXtyZXR1cm4gaVtjdF0ubmFtZX0pLHQuYm9va1NoZWV0c3x8KHIuU2hlZXRzPWEpLCFyLlNoZWV0TmFtZXMubGVuZ3RoJiZsWyIhcmVmIl0/KHIuU2hlZXROYW1lcy5wdXNoKCJTaGVldDEiKSxyLlNoZWV0cyYmKHIuU2hlZXRzLlNoZWV0MT1sKSk6ci5QcmVhbWJsZT1sLHIuU2hlZXRzJiZP'@;
put 'LmZvckVhY2goZnVuY3Rpb24oY3QseWUpe3IuU2hlZXRzW3IuU2hlZXROYW1lc1t5ZV1dWyIhYXV0b2ZpbHRlciJdPWN0fSksci5TdHJpbmdzPWMsci5TU0Y9TWUocGUpLGIuZW5jJiYoci5FbmNyeXB0aW9uPWIuZW5jKSxlZSYmKHIuVGhlbWVzPWVlKSxyLk1ldGFkYXRhPXt9LHZvaWQgMCE9'@;
put 'PU4mJihyLk1ldGFkYXRhLkNvdW50cnk9TiksY2UubmFtZXMubGVuZ3RoPjAmJih5Lk5hbWVzPWNlLm5hbWVzKSxyLldvcmtib29rPXkscn0oYS5jb250ZW50LHQpO2Vsc2UgaWYoKGk9dmUuZmluZChlLCJQZXJmZWN0T2ZmaWNlX01BSU4iKSkmJmkuY29udGVudCluPWp0LnRvX3dvcmtib29r'@;
put 'KGkuY29udGVudCwodC50eXBlPXMsdCkpO2Vsc2V7aWYoIShpPXZlLmZpbmQoZSwiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhaS5jb250ZW50KXRocm93KGk9dmUuZmluZChlLCJNTjAiKSkmJmkuY29udGVudD9uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFdvcmtzIDQgZm9yIE1hYyBmaWxlIik6'@;
put 'bmV3IEVycm9yKCJDYW5ub3QgZmluZCBXb3JrYm9vayBzdHJlYW0iKTtuPWp0LnRvX3dvcmtib29rKGkuY29udGVudCwodC50eXBlPXMsdCkpfXQuYm9va1ZCQSYmZS5GdWxsUGF0aHMmJnZlLmZpbmQoZSwiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYobi52YmFyYXc9ZnVuY3Rpb24g'@;
put 'RngoZSl7dmFyIHQ9dmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4gZS5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihyLGEpe2lmKCIvIiE9PXIuc2xpY2UoLTEpJiZyLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciBuPXIucmVwbGFjZSgvXlteXC9dKi8sIlIiKS5y'@;
put 'ZXBsYWNlKC9cL19WQkFfUFJPSkVDVF9DVVJcdTAwMDAqLywiIik7dmUudXRpbHMuY2ZiX2FkZCh0LG4sZS5GaWxlSW5kZXhbYV0uY29udGVudCl9fSksdmUud3JpdGUodCl9KGUpKX12YXIgZj17fTtyZXR1cm4gZS5GdWxsUGF0aHMmJmZ1bmN0aW9uIGxtKGUsdCxyKXt2YXIgYT12ZS5maW5k'@;
put 'KGUsIi8hRG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihhJiZhLnNpemU+MCl0cnl7dmFyIG49UnMoYSx4bix6YS5EU0kpO2Zvcih2YXIgaSBpbiBuKXRbaV09bltpXX1jYXRjaChvKXtpZihyLldURil0aHJvdyBvfXZhciBzPXZlLmZpbmQoZSwiLyFTdW1tYXJ5SW5mb3JtYXRpb24i'@;
put 'KTtpZihzJiZzLnNpemU+MCl0cnl7dmFyIGY9UnMocyxkbix6YS5TSSk7Zm9yKHZhciBjIGluIGYpbnVsbD09dFtjXSYmKHRbY109ZltjXSl9Y2F0Y2gobyl7aWYoci5XVEYpdGhyb3cgb310LkhlYWRpbmdQYWlycyYmdC5UaXRsZXNPZlBhcnRzJiYod3ModC5IZWFkaW5nUGFpcnMsdC5UaXRs'@;
put 'ZXNPZlBhcnRzLHQsciksZGVsZXRlIHQuSGVhZGluZ1BhaXJzLGRlbGV0ZSB0LlRpdGxlc09mUGFydHMpfShlLGYsdCksbi5Qcm9wcz1uLkN1c3Rwcm9wcz1mLHQuYm9va0ZpbGVzJiYobi5jZmI9ZSksbn12YXIgJGE9ezA6e2Y6ZnVuY3Rpb24gUHYoZSx0KXt2YXIgcj17fSxhPWUubCt0O3Iu'@;
put 'cj1lLnJlYWRfc2hpZnQoNCksZS5sKz00O3ZhciBuPWUucmVhZF9zaGlmdCgyKTtlLmwrPTE7dmFyIGk9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmw9YSw3JmkmJihyLmxldmVsPTcmaSksMTYmaSYmKHIuaGlkZGVuPSEwKSwzMiZpJiYoci5ocHQ9bi8yMCkscn19LDE6e2Y6ZnVuY3Rpb24g'@;
put 'WHYoZSl7cmV0dXJuW0hyKGUpXX19LDI6e2Y6ZnVuY3Rpb24gYzIoZSl7cmV0dXJuW0hyKGUpLHVuKGUpLCJuIl19fSwzOntmOmZ1bmN0aW9uIHF2KGUpe3JldHVybltIcihlKSxlLnJlYWRfc2hpZnQoMSksImUiXX19LDQ6e2Y6ZnVuY3Rpb24ganYoZSl7cmV0dXJuW0hyKGUpLGUucmVhZF9z'@;
put 'aGlmdCgxKSwiYiJdfX0sNTp7ZjpmdW5jdGlvbiBpMihlKXtyZXR1cm5bSHIoZSksZ3IoZSksIm4iXX19LDY6e2Y6ZnVuY3Rpb24geDIoZSl7cmV0dXJuW0hyKGUpLG1yKGUpLCJzdHIiXX19LDc6e2Y6ZnVuY3Rpb24gcjIoZSl7cmV0dXJuW0hyKGUpLGUucmVhZF9zaGlmdCg0KSwicyJdfX0s'@;
put 'ODp7ZjpmdW5jdGlvbiB3MihlLHQscil7dmFyIGE9ZS5sK3Qsbj1IcihlKTtuLnI9clsiIXJvdyJdO3ZhciBzPVtuLG1yKGUpLCJzdHIiXTtpZihyLmNlbGxGb3JtdWxhKXtlLmwrPTI7dmFyIGY9QzAoZSxhLWUubCxyKTtzWzNdPWtyKGYsMCxuLHIuc3VwYm9va3Mscil9ZWxzZSBlLmw9YTty'@;
put 'ZXR1cm4gc319LDk6e2Y6ZnVuY3Rpb24gXzIoZSx0LHIpe3ZhciBhPWUubCt0LG49SHIoZSk7bi5yPXJbIiFyb3ciXTt2YXIgcz1bbixncihlKSwibiJdO2lmKHIuY2VsbEZvcm11bGEpe2UubCs9Mjt2YXIgZj1DMChlLGEtZS5sLHIpO3NbM109a3IoZiwwLG4sci5zdXBib29rcyxyKX1lbHNl'@;
put 'IGUubD1hO3JldHVybiBzfX0sMTA6e2Y6ZnVuY3Rpb24gbTIoZSx0LHIpe3ZhciBhPWUubCt0LG49SHIoZSk7bi5yPXJbIiFyb3ciXTt2YXIgcz1bbixlLnJlYWRfc2hpZnQoMSksImIiXTtpZihyLmNlbGxGb3JtdWxhKXtlLmwrPTI7dmFyIGY9QzAoZSxhLWUubCxyKTtzWzNdPWtyKGYsMCxu'@;
put 'LHIuc3VwYm9va3Mscil9ZWxzZSBlLmw9YTtyZXR1cm4gc319LDExOntmOmZ1bmN0aW9uIGcyKGUsdCxyKXt2YXIgYT1lLmwrdCxuPUhyKGUpO24ucj1yWyIhcm93Il07dmFyIHM9W24sZS5yZWFkX3NoaWZ0KDEpLCJlIl07aWYoci5jZWxsRm9ybXVsYSl7ZS5sKz0yO3ZhciBmPUMwKGUsYS1l'@;
put 'Lmwscik7c1szXT1rcihmLDAsbixyLnN1cGJvb2tzLHIpfWVsc2UgZS5sPWE7cmV0dXJuIHN9fSwxMjp7ZjpmdW5jdGlvbiB6dihlKXtyZXR1cm5bTXQoZSldfX0sMTM6e2Y6ZnVuY3Rpb24gbDIoZSl7cmV0dXJuW010KGUpLHVuKGUpLCJuIl19fSwxNDp7ZjpmdW5jdGlvbiBRdihlKXtyZXR1'@;
put 'cm5bTXQoZSksZS5yZWFkX3NoaWZ0KDEpLCJlIl19fSwxNTp7ZjpmdW5jdGlvbiBZdihlKXtyZXR1cm5bTXQoZSksZS5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7ZjpCZn0sMTc6e2Y6ZnVuY3Rpb24gdjIoZSl7cmV0dXJuW010KGUpLG1yKGUpLCJzdHIiXX19LDE4OntmOmZ1bmN0aW9uIGEy'@;
put 'KGUpe3JldHVybltNdChlKSxlLnJlYWRfc2hpZnQoNCksInMiXX19LDE5OntmOnNufSwyMDp7fSwyMTp7fSwyMjp7fSwyMzp7fSwyNDp7fSwyNTp7fSwyNjp7fSwyNzp7fSwyODp7fSwyOTp7fSwzMDp7fSwzMTp7fSwzMjp7fSwzMzp7fSwzNDp7fSwzNTp7VDoxfSwzNjp7VDotMX0sMzc6e1Q6'@;
put 'MX0sMzg6e1Q6LTF9LDM5OntmOmZ1bmN0aW9uIHBwKGUsdCxyKXt2YXIgYT1lLmwrdDtlLmwrPTQsZS5sKz0xO3ZhciBuPWUucmVhZF9zaGlmdCg0KSxpPWpvKGUpLHM9ZXYoZSwwLHIpLGY9Zm4oZSk7ZS5sPWE7dmFyIGM9e05hbWU6aSxQdGc6c307cmV0dXJuIG48MjY4NDM1NDU1JiYoYy5T'@;
put 'aGVldD1uKSxmJiYoYy5Db21tZW50PWYpLGN9fSw0MDp7fSw0Mjp7fSw0Mzp7ZjpmdW5jdGlvbiB2MShlLHQscil7dmFyIGE9e307YS5zej1lLnJlYWRfc2hpZnQoMikvMjA7dmFyIG49ZnVuY3Rpb24gWW8oZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDEpO3JldHVybiBlLmwrKyx7ZkJvbGQ6MSZ0'@;
put 'LGZJdGFsaWM6MiZ0LGZVbmRlcmxpbmU6NCZ0LGZTdHJpa2VvdXQ6OCZ0LGZPdXRsaW5lOjE2JnQsZlNoYWRvdzozMiZ0LGZDb25kZW5zZTo2NCZ0LGZFeHRlbmQ6MTI4JnR9fShlKTtzd2l0Y2gobi5mSXRhbGljJiYoYS5pdGFsaWM9MSksbi5mQ29uZGVuc2UmJihhLmNvbmRlbnNlPTEpLG4u'@;
put 'ZkV4dGVuZCYmKGEuZXh0ZW5kPTEpLG4uZlNoYWRvdyYmKGEuc2hhZG93PTEpLG4uZk91dGxpbmUmJihhLm91dGxpbmU9MSksbi5mU3RyaWtlb3V0JiYoYS5zdHJpa2U9MSksNzAwPT09ZS5yZWFkX3NoaWZ0KDIpJiYoYS5ib2xkPTEpLGUucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOmEudmVydEFs'@;
put 'aWduPSJzdXBlcnNjcmlwdCI7YnJlYWs7Y2FzZSAyOmEudmVydEFsaWduPSJzdWJzY3JpcHQifXZhciBzPWUucmVhZF9zaGlmdCgxKTswIT1zJiYoYS51bmRlcmxpbmU9cyk7dmFyIGY9ZS5yZWFkX3NoaWZ0KDEpO2Y+MCYmKGEuZmFtaWx5PWYpO3ZhciBjPWUucmVhZF9zaGlmdCgxKTtzd2l0'@;
put 'Y2goYz4wJiYoYS5jaGFyc2V0PWMpLGUubCsrLGEuY29sb3I9ZnVuY3Rpb24gS28oZSl7dmFyIHQ9e30sYT1lLnJlYWRfc2hpZnQoMSk+Pj4xLG49ZS5yZWFkX3NoaWZ0KDEpLGk9ZS5yZWFkX3NoaWZ0KDIsImkiKSxzPWUucmVhZF9zaGlmdCgxKSxmPWUucmVhZF9zaGlmdCgxKSxjPWUucmVh'@;
put 'ZF9zaGlmdCgxKTtzd2l0Y2goZS5sKyssYSl7Y2FzZSAwOnQuYXV0bz0xO2JyZWFrO2Nhc2UgMTp0LmluZGV4PW47dmFyIG89VnRbbl07byYmKHQucmdiPWJhKG8pKTticmVhaztjYXNlIDI6dC5yZ2I9YmEoW3MsZixjXSk7YnJlYWs7Y2FzZSAzOnQudGhlbWU9bn1yZXR1cm4gMCE9aSYmKHQu'@;
put 'dGludD1pPjA/aS8zMjc2NzppLzMyNzY4KSx0fShlKSxlLnJlYWRfc2hpZnQoMSkpe2Nhc2UgMTphLnNjaGVtZT0ibWFqb3IiO2JyZWFrO2Nhc2UgMjphLnNjaGVtZT0ibWlub3IifXJldHVybiBhLm5hbWU9bXIoZSksYX19LDQ0OntmOmZ1bmN0aW9uIHgxKGUsdCl7cmV0dXJuW2UucmVhZF9z'@;
put 'aGlmdCgyKSxtcihlKV19fSw0NTp7ZjpnMX0sNDY6e2Y6dzF9LDQ3OntmOmZ1bmN0aW9uIF8xKGUsdCl7dmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoMiksbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuIGUubD1yLHtpeGZlOmEsbnVtRm10SWQ6bn19fSw0ODp7fSw0OTp7ZjpmdW5jdGlvbiBI'@;
put 'byhlKXtyZXR1cm4gZS5yZWFkX3NoaWZ0KDQsImkiKX19LDUwOnt9LDUxOntmOmZ1bmN0aW9uIGV4KGUpe2Zvcih2YXIgdD1bXSxyPWUucmVhZF9zaGlmdCg0KTtyLS0gPjA7KXQucHVzaChbZS5yZWFkX3NoaWZ0KDQpLGUucmVhZF9zaGlmdCg0KV0pO3JldHVybiB0fX0sNTI6e1Q6MX0sNTM6'@;
put 'e1Q6LTF9LDU0OntUOjF9LDU1OntUOi0xfSw1Njp7VDoxfSw1Nzp7VDotMX0sNTg6e30sNTk6e30sNjA6e2Y6UXN9LDYyOntmOmZ1bmN0aW9uIGgyKGUpe3JldHVybltIcihlKSxzbihlKSwiaXMiXX19LDYzOntmOmZ1bmN0aW9uIG94KGUpe3ZhciB0PXt9O3QuaT1lLnJlYWRfc2hpZnQoNCk7'@;
put 'dmFyIHI9e307ci5yPWUucmVhZF9zaGlmdCg0KSxyLmM9ZS5yZWFkX3NoaWZ0KDQpLHQucj1nZShyKTt2YXIgYT1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDImYSYmKHQubD0iMSIpLDgmYSYmKHQuYT0iMSIpLHR9fSw2NDp7ZjpmdW5jdGlvbiBMMigpe319LDY1Ont9LDY2Ont9LDY3Ont9LDY4'@;
put 'Ont9LDY5Ont9LDcwOnt9LDEyODp7fSwxMjk6e1Q6MX0sMTMwOntUOi0xfSwxMzE6e1Q6MSxmOnByLHA6MH0sMTMyOntUOi0xfSwxMzM6e1Q6MX0sMTM0OntUOi0xfSwxMzU6e1Q6MX0sMTM2OntUOi0xfSwxMzc6e1Q6MSxmOmZ1bmN0aW9uIFIyKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKTty'@;
put 'ZXR1cm4gZS5sKz0yOCx7UlRMOjMyJnR9fX0sMTM4OntUOi0xfSwxMzk6e1Q6MX0sMTQwOntUOi0xfSwxNDE6e1Q6MX0sMTQyOntUOi0xfSwxNDM6e1Q6MX0sMTQ0OntUOi0xfSwxNDU6e1Q6MX0sMTQ2OntUOi0xfSwxNDc6e2Y6ZnVuY3Rpb24gSHYoZSx0KXt2YXIgcj17fSxhPWVbZS5sXTty'@;
put 'ZXR1cm4rK2UubCxyLmFib3ZlPSEoNjQmYSksci5sZWZ0PSEoMTI4JmEpLGUubCs9MTgsci5uYW1lPSRvKGUsdC0xOSkscn19LDE0ODp7ZjpNdixwOjE2fSwxNTE6e2Y6ZnVuY3Rpb24geTIoKXt9fSwxNTI6e30sMTUzOntmOmZ1bmN0aW9uIHhwKGUsdCl7dmFyIHI9e30sYT1lLnJlYWRfc2hp'@;
put 'ZnQoNCk7ci5kZWZhdWx0VGhlbWVWZXJzaW9uPWUucmVhZF9zaGlmdCg0KTt2YXIgbj10Pjg/bXIoZSk6IiI7cmV0dXJuIG4ubGVuZ3RoPjAmJihyLkNvZGVOYW1lPW4pLHIuYXV0b0NvbXByZXNzUGljdHVyZXM9ISEoNjU1MzYmYSksci5iYWNrdXBGaWxlPSEhKDY0JmEpLHIuY2hlY2tDb21w'@;
put 'YXRpYmlsaXR5PSEhKDQwOTYmYSksci5kYXRlMTkwND0hISgxJmEpLHIuZmlsdGVyUHJpdmFjeT0hISg4JmEpLHIuaGlkZVBpdm90RmllbGRMaXN0PSEhKDEwMjQmYSksci5wcm9tcHRlZFNvbHV0aW9ucz0hISgxNiZhKSxyLnB1Ymxpc2hJdGVtcz0hISgyMDQ4JmEpLHIucmVmcmVzaEFsbENv'@;
put 'bm5lY3Rpb25zPSEhKDI2MjE0NCZhKSxyLnNhdmVFeHRlcm5hbExpbmtWYWx1ZXM9ISEoMTI4JmEpLHIuc2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXM9ISEoNCZhKSxyLnNob3dJbmtBbm5vdGF0aW9uPSEhKDMyJmEpLHIuc2hvd09iamVjdHM9WyJhbGwiLCJwbGFjZWhvbGRlcnMiLCJub25l'@;
put 'Il1bYT4+MTMmM10sci5zaG93UGl2b3RDaGFydEZpbHRlcj0hISgzMjc2OCZhKSxyLnVwZGF0ZUxpbmtzPVsidXNlclNldCIsIm5ldmVyIiwiYWx3YXlzIl1bYT4+OCYzXSxyfX0sMTU0Ont9LDE1NTp7fSwxNTY6e2Y6ZnVuY3Rpb24gdXAoZSx0KXt2YXIgcj17fTtyZXR1cm4gci5IaWRkZW49'@;
put 'ZS5yZWFkX3NoaWZ0KDQpLHIuaVRhYklEPWUucmVhZF9zaGlmdCg0KSxyLnN0clJlbElEPW9uKGUsdC04KSxyLm5hbWU9bXIoZSkscn19LDE1Nzp7fSwxNTg6e30sMTU5OntUOjEsZjpmdW5jdGlvbiBPaChlKXtyZXR1cm5bZS5yZWFkX3NoaWZ0KDQpLGUucmVhZF9zaGlmdCg0KV19fSwxNjA6'@;
put 'e1Q6LTF9LDE2MTp7VDoxLGY6V3R9LDE2Mjp7VDotMX0sMTYzOntUOjF9LDE2NDp7VDotMX0sMTY1OntUOjF9LDE2Njp7VDotMX0sMTY3Ont9LDE2ODp7fSwxNjk6e30sMTcwOnt9LDE3MTp7fSwxNzI6e1Q6MX0sMTczOntUOi0xfSwxNzQ6e30sMTc1Ont9LDE3Njp7ZjprMn0sMTc3OntUOjF9'@;
put 'LDE3ODp7VDotMX0sMTc5OntUOjF9LDE4MDp7VDotMX0sMTgxOntUOjF9LDE4Mjp7VDotMX0sMTgzOntUOjF9LDE4NDp7VDotMX0sMTg1OntUOjF9LDE4Njp7VDotMX0sMTg3OntUOjF9LDE4ODp7VDotMX0sMTg5OntUOjF9LDE5MDp7VDotMX0sMTkxOntUOjF9LDE5Mjp7VDotMX0sMTkzOntU'@;
put 'OjF9LDE5NDp7VDotMX0sMTk1OntUOjF9LDE5Njp7VDotMX0sMTk3OntUOjF9LDE5ODp7VDotMX0sMTk5OntUOjF9LDIwMDp7VDotMX0sMjAxOntUOjF9LDIwMjp7VDotMX0sMjAzOntUOjF9LDIwNDp7VDotMX0sMjA1OntUOjF9LDIwNjp7VDotMX0sMjA3OntUOjF9LDIwODp7VDotMX0sMjA5'@;
put 'OntUOjF9LDIxMDp7VDotMX0sMjExOntUOjF9LDIxMjp7VDotMX0sMjEzOntUOjF9LDIxNDp7VDotMX0sMjE1OntUOjF9LDIxNjp7VDotMX0sMjE3OntUOjF9LDIxODp7VDotMX0sMjE5OntUOjF9LDIyMDp7VDotMX0sMjIxOntUOjF9LDIyMjp7VDotMX0sMjIzOntUOjF9LDIyNDp7VDotMX0s'@;
put 'MjI1OntUOjF9LDIyNjp7VDotMX0sMjI3OntUOjF9LDIyODp7VDotMX0sMjI5OntUOjF9LDIzMDp7VDotMX0sMjMxOntUOjF9LDIzMjp7VDotMX0sMjMzOntUOjF9LDIzNDp7VDotMX0sMjM1OntUOjF9LDIzNjp7VDotMX0sMjM3OntUOjF9LDIzODp7VDotMX0sMjM5OntUOjF9LDI0MDp7VDot'@;
put 'MX0sMjQxOntUOjF9LDI0Mjp7VDotMX0sMjQzOntUOjF9LDI0NDp7VDotMX0sMjQ1OntUOjF9LDI0Njp7VDotMX0sMjQ3OntUOjF9LDI0ODp7VDotMX0sMjQ5OntUOjF9LDI1MDp7VDotMX0sMjUxOntUOjF9LDI1Mjp7VDotMX0sMjUzOntUOjF9LDI1NDp7VDotMX0sMjU1OntUOjF9LDI1Njp7'@;
put 'VDotMX0sMjU3OntUOjF9LDI1ODp7VDotMX0sMjU5OntUOjF9LDI2MDp7VDotMX0sMjYxOntUOjF9LDI2Mjp7VDotMX0sMjYzOntUOjF9LDI2NDp7VDotMX0sMjY1OntUOjF9LDI2Njp7VDotMX0sMjY3OntUOjF9LDI2ODp7VDotMX0sMjY5OntUOjF9LDI3MDp7VDotMX0sMjcxOntUOjF9LDI3'@;
put 'Mjp7VDotMX0sMjczOntUOjF9LDI3NDp7VDotMX0sMjc1OntUOjF9LDI3Njp7VDotMX0sMjc3Ont9LDI3ODp7VDoxfSwyNzk6e1Q6LTF9LDI4MDp7VDoxfSwyODE6e1Q6LTF9LDI4Mjp7VDoxfSwyODM6e1Q6MX0sMjg0OntUOi0xfSwyODU6e1Q6MX0sMjg2OntUOi0xfSwyODc6e1Q6MX0sMjg4'@;
put 'OntUOi0xfSwyODk6e1Q6MX0sMjkwOntUOi0xfSwyOTE6e1Q6MX0sMjkyOntUOi0xfSwyOTM6e1Q6MX0sMjk0OntUOi0xfSwyOTU6e1Q6MX0sMjk2OntUOi0xfSwyOTc6e1Q6MX0sMjk4OntUOi0xfSwyOTk6e1Q6MX0sMzAwOntUOi0xfSwzMDE6e1Q6MX0sMzAyOntUOi0xfSwzMDM6e1Q6MX0s'@;
put 'MzA0OntUOi0xfSwzMDU6e1Q6MX0sMzA2OntUOi0xfSwzMDc6e1Q6MX0sMzA4OntUOi0xfSwzMDk6e1Q6MX0sMzEwOntUOi0xfSwzMTE6e1Q6MX0sMzEyOntUOi0xfSwzMTM6e1Q6LTF9LDMxNDp7VDoxfSwzMTU6e1Q6LTF9LDMxNjp7VDoxfSwzMTc6e1Q6LTF9LDMxODp7VDoxfSwzMTk6e1Q6'@;
put 'LTF9LDMyMDp7VDoxfSwzMjE6e1Q6LTF9LDMyMjp7VDoxfSwzMjM6e1Q6LTF9LDMyNDp7VDoxfSwzMjU6e1Q6LTF9LDMyNjp7VDoxfSwzMjc6e1Q6LTF9LDMyODp7VDoxfSwzMjk6e1Q6LTF9LDMzMDp7VDoxfSwzMzE6e1Q6LTF9LDMzMjp7VDoxfSwzMzM6e1Q6LTF9LDMzNDp7VDoxfSwzMzU6'@;
put 'e2Y6ZnVuY3Rpb24gWjEoZSx0KXtyZXR1cm57ZmxhZ3M6ZS5yZWFkX3NoaWZ0KDQpLHZlcnNpb246ZS5yZWFkX3NoaWZ0KDQpLG5hbWU6bXIoZSl9fX0sMzM2OntUOi0xfSwzMzc6e2Y6ZnVuY3Rpb24gYXgoZSl7cmV0dXJuIGUubCs9NCwwIT1lLnJlYWRfc2hpZnQoNCl9LFQ6MX0sMzM4OntU'@;
put 'Oi0xfSwzMzk6e1Q6MX0sMzQwOntUOi0xfSwzNDE6e1Q6MX0sMzQyOntUOi0xfSwzNDM6e1Q6MX0sMzQ0OntUOi0xfSwzNDU6e1Q6MX0sMzQ2OntUOi0xfSwzNDc6e1Q6MX0sMzQ4OntUOi0xfSwzNDk6e1Q6MX0sMzUwOntUOi0xfSwzNTE6e30sMzUyOnt9LDM1Mzp7VDoxfSwzNTQ6e1Q6LTF9'@;
put 'LDM1NTp7Zjpvbn0sMzU3Ont9LDM1ODp7fSwzNTk6e30sMzYwOntUOjF9LDM2MTp7fSwzNjI6e2Y6cXN9LDM2Mzp7fSwzNjQ6e30sMzY2Ont9LDM2Nzp7fSwzNjg6e30sMzY5Ont9LDM3MDp7fSwzNzE6e30sMzcyOntUOjF9LDM3Mzp7VDotMX0sMzc0OntUOjF9LDM3NTp7VDotMX0sMzc2OntU'@;
put 'OjF9LDM3Nzp7VDotMX0sMzc4OntUOjF9LDM3OTp7VDotMX0sMzgwOntUOjF9LDM4MTp7VDotMX0sMzgyOntUOjF9LDM4Mzp7VDotMX0sMzg0OntUOjF9LDM4NTp7VDotMX0sMzg2OntUOjF9LDM4Nzp7VDotMX0sMzg4OntUOjF9LDM4OTp7VDotMX0sMzkwOntUOjF9LDM5MTp7VDotMX0sMzky'@;
put 'OntUOjF9LDM5Mzp7VDotMX0sMzk0OntUOjF9LDM5NTp7VDotMX0sMzk2Ont9LDM5Nzp7fSwzOTg6e30sMzk5Ont9LDQwMDp7fSw0MDE6e1Q6MX0sNDAzOnt9LDQwNDp7fSw0MDU6e30sNDA2Ont9LDQwNzp7fSw0MDg6e30sNDA5Ont9LDQxMDp7fSw0MTE6e30sNDEyOnt9LDQxMzp7fSw0MTQ6'@;
put 'e30sNDE1Ont9LDQxNjp7fSw0MTc6e30sNDE4Ont9LDQxOTp7fSw0MjA6e30sNDIxOnt9LDQyMjp7VDoxfSw0MjM6e1Q6MX0sNDI0OntUOi0xfSw0MjU6e1Q6LTF9LDQyNjp7ZjpmdW5jdGlvbiBBMihlLHQscil7dmFyIGE9ZS5sK3Qsbj1vcyhlKSxpPWUucmVhZF9zaGlmdCgxKSxzPVtuXTtp'@;
put 'ZihzWzJdPWksci5jZWxsRm9ybXVsYSl7dmFyIGY9UWQoZSxhLWUubCxyKTtzWzFdPWZ9ZWxzZSBlLmw9YTtyZXR1cm4gc319LDQyNzp7ZjpmdW5jdGlvbiBDMihlLHQscil7dmFyIGE9ZS5sK3QsaT1bV3QoZSwxNildO2lmKHIuY2VsbEZvcm11bGEpe3ZhciBzPXJ2KGUsYS1lLmwscik7aVsx'@;
put 'XT1zLGUubD1hfWVsc2UgZS5sPWE7cmV0dXJuIGl9fSw0Mjg6e30sNDI5OntUOjF9LDQzMDp7VDotMX0sNDMxOntUOjF9LDQzMjp7VDotMX0sNDMzOntUOjF9LDQzNDp7VDotMX0sNDM1OntUOjF9LDQzNjp7VDotMX0sNDM3OntUOjF9LDQzODp7VDotMX0sNDM5OntUOjF9LDQ0MDp7VDotMX0s'@;
put 'NDQxOntUOjF9LDQ0Mjp7VDotMX0sNDQzOntUOjF9LDQ0NDp7VDotMX0sNDQ1OntUOjF9LDQ0Njp7VDotMX0sNDQ3OntUOjF9LDQ0ODp7VDotMX0sNDQ5OntUOjF9LDQ1MDp7VDotMX0sNDUxOntUOjF9LDQ1Mjp7VDotMX0sNDUzOntUOjF9LDQ1NDp7VDotMX0sNDU1OntUOjF9LDQ1Njp7VDot'@;
put 'MX0sNDU3OntUOjF9LDQ1ODp7VDotMX0sNDU5OntUOjF9LDQ2MDp7VDotMX0sNDYxOntUOjF9LDQ2Mjp7VDotMX0sNDYzOntUOjF9LDQ2NDp7VDotMX0sNDY1OntUOjF9LDQ2Njp7VDotMX0sNDY3OntUOjF9LDQ2ODp7VDotMX0sNDY5OntUOjF9LDQ3MDp7VDotMX0sNDcxOnt9LDQ3Mjp7fSw0'@;
put 'NzM6e1Q6MX0sNDc0OntUOi0xfSw0NzU6e30sNDc2OntmOmZ1bmN0aW9uIE8yKGUpe3ZhciB0PXt9O3JldHVybiBNZi5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Rbcl09Z3IoZSl9KSx0fX0sNDc3Ont9LDQ3ODp7fSw0Nzk6e1Q6MX0sNDgwOntUOi0xfSw0ODE6e1Q6MX0sNDgyOntUOi0xfSw0ODM6'@;
put 'e1Q6MX0sNDg0OntUOi0xfSw0ODU6e2Y6ZnVuY3Rpb24gV3YoKXt9fSw0ODY6e1Q6MX0sNDg3OntUOi0xfSw0ODg6e1Q6MX0sNDg5OntUOi0xfSw0OTA6e1Q6MX0sNDkxOntUOi0xfSw0OTI6e1Q6MX0sNDkzOntUOi0xfSw0OTQ6e2Y6ZnVuY3Rpb24gUzIoZSx0KXt2YXIgcj1lLmwrdCxhPVd0'@;
put 'KGUsMTYpLG49Zm4oZSksaT1tcihlKSxzPW1yKGUpLGY9bXIoZSk7ZS5sPXI7dmFyIGM9e3JmeDphLHJlbElkOm4sbG9jOmksZGlzcGxheTpmfTtyZXR1cm4gcyYmKGMuVG9vbHRpcD1zKSxjfX0sNDk1OntUOjF9LDQ5Njp7VDotMX0sNDk3OntUOjF9LDQ5ODp7VDotMX0sNDk5Ont9LDUwMDp7'@;
put 'VDoxfSw1MDE6e1Q6LTF9LDUwMjp7VDoxfSw1MDM6e1Q6LTF9LDUwNDp7fSw1MDU6e1Q6MX0sNTA2OntUOi0xfSw1MDc6e30sNTA4OntUOjF9LDUwOTp7VDotMX0sNTEwOntUOjF9LDUxMTp7VDotMX0sNTEyOnt9LDUxMzp7fSw1MTQ6e1Q6MX0sNTE1OntUOi0xfSw1MTY6e1Q6MX0sNTE3OntU'@;
put 'Oi0xfSw1MTg6e1Q6MX0sNTE5OntUOi0xfSw1MjA6e1Q6MX0sNTIxOntUOi0xfSw1MjI6e30sNTIzOnt9LDUyNDp7fSw1MjU6e30sNTI2Ont9LDUyNzp7fSw1Mjg6e1Q6MX0sNTI5OntUOi0xfSw1MzA6e1Q6MX0sNTMxOntUOi0xfSw1MzI6e1Q6MX0sNTMzOntUOi0xfSw1MzQ6e30sNTM1Ont9'@;
put 'LDUzNjp7fSw1Mzc6e30sNTM4OntUOjF9LDUzOTp7VDotMX0sNTQwOntUOjF9LDU0MTp7VDotMX0sNTQyOntUOjF9LDU0ODp7fSw1NDk6e30sNTUwOntmOm9ufSw1NTE6e30sNTUyOnt9LDU1Mzp7fSw1NTQ6e1Q6MX0sNTU1OntUOi0xfSw1NTY6e1Q6MX0sNTU3OntUOi0xfSw1NTg6e1Q6MX0s'@;
put 'NTU5OntUOi0xfSw1NjA6e1Q6MX0sNTYxOntUOi0xfSw1NjI6e30sNTY0Ont9LDU2NTp7VDoxfSw1NjY6e1Q6LTF9LDU2OTp7VDoxfSw1NzA6e1Q6LTF9LDU3Mjp7fSw1NzM6e1Q6MX0sNTc0OntUOi0xfSw1Nzc6e30sNTc4Ont9LDU3OTp7fSw1ODA6e30sNTgxOnt9LDU4Mjp7fSw1ODM6e30s'@;
put 'NTg0Ont9LDU4NTp7fSw1ODY6e30sNTg3Ont9LDU4ODp7VDotMX0sNTg5Ont9LDU5MDp7VDoxfSw1OTE6e1Q6LTF9LDU5Mjp7VDoxfSw1OTM6e1Q6LTF9LDU5NDp7VDoxfSw1OTU6e1Q6LTF9LDU5Njp7fSw1OTc6e1Q6MX0sNTk4OntUOi0xfSw1OTk6e1Q6MX0sNjAwOntUOi0xfSw2MDE6e1Q6'@;
put 'MX0sNjAyOntUOi0xfSw2MDM6e1Q6MX0sNjA0OntUOi0xfSw2MDU6e1Q6MX0sNjA2OntUOi0xfSw2MDc6e30sNjA4OntUOjF9LDYwOTp7VDotMX0sNjEwOnt9LDYxMTp7VDoxfSw2MTI6e1Q6LTF9LDYxMzp7VDoxfSw2MTQ6e1Q6LTF9LDYxNTp7VDoxfSw2MTY6e1Q6LTF9LDYxNzp7VDoxfSw2'@;
put 'MTg6e1Q6LTF9LDYxOTp7VDoxfSw2MjA6e1Q6LTF9LDYyNTp7fSw2MjY6e1Q6MX0sNjI3OntUOi0xfSw2Mjg6e1Q6MX0sNjI5OntUOi0xfSw2MzA6e1Q6MX0sNjMxOntUOi0xfSw2MzI6e2Y6d3h9LDYzMzp7VDoxfSw2MzQ6e1Q6LTF9LDYzNTp7VDoxLGY6ZnVuY3Rpb24gZ3goZSl7dmFyIHQ9'@;
put 'e307dC5pYXV0aG9yPWUucmVhZF9zaGlmdCg0KTt2YXIgcj1XdChlLDE2KTtyZXR1cm4gdC5yZng9ci5zLHQucmVmPWdlKHIucyksZS5sKz0xNix0fX0sNjM2OntUOi0xfSw2Mzc6e2Y6R299LDYzODp7VDoxfSw2Mzk6e30sNjQwOntUOi0xfSw2NDE6e1Q6MX0sNjQyOntUOi0xfSw2NDM6e1Q6'@;
put 'MX0sNjQ0Ont9LDY0NTp7VDotMX0sNjQ2OntUOjF9LDY0ODp7VDoxfSw2NDk6e30sNjUwOntUOi0xfSw2NTE6e2Y6ZnVuY3Rpb24gZXAoZSx0KXtyZXR1cm4gZS5sKz0xMCx7bmFtZTptcihlKX19fSw2NTI6e30sNjUzOntUOjF9LDY1NDp7VDotMX0sNjU1OntUOjF9LDY1Njp7VDotMX0sNjU3'@;
put 'OntUOjF9LDY1ODp7VDotMX0sNjU5Ont9LDY2MDp7VDoxfSw2NjE6e30sNjYyOntUOi0xfSw2NjM6e30sNjY0OntUOjF9LDY2NTp7fSw2NjY6e1Q6LTF9LDY2Nzp7fSw2Njg6e30sNjY5Ont9LDY3MTp7VDoxfSw2NzI6e1Q6LTF9LDY3Mzp7VDoxfSw2NzQ6e1Q6LTF9LDY3NTp7fSw2NzY6e30s'@;
put 'Njc3Ont9LDY3ODp7fSw2Nzk6e30sNjgwOnt9LDY4MTp7fSwxMDI0Ont9LDEwMjU6e30sMTAyNjp7VDoxfSwxMDI3OntUOi0xfSwxMDI4OntUOjF9LDEwMjk6e1Q6LTF9LDEwMzA6e30sMTAzMTp7VDoxfSwxMDMyOntUOi0xfSwxMDMzOntUOjF9LDEwMzQ6e1Q6LTF9LDEwMzU6e30sMTAzNjp7'@;
put 'fSwxMDM3Ont9LDEwMzg6e1Q6MX0sMTAzOTp7VDotMX0sMTA0MDp7fSwxMDQxOntUOjF9LDEwNDI6e1Q6LTF9LDEwNDM6e30sMTA0NDp7fSwxMDQ1Ont9LDEwNDY6e1Q6MX0sMTA0Nzp7VDotMX0sMTA0ODp7VDoxfSwxMDQ5OntUOi0xfSwxMDUwOnt9LDEwNTE6e1Q6MX0sMTA1Mjp7VDoxfSwx'@;
put 'MDUzOntmOmZ1bmN0aW9uIEIyKCl7fX0sMTA1NDp7VDoxfSwxMDU1Ont9LDEwNTY6e1Q6MX0sMTA1Nzp7VDotMX0sMTA1ODp7VDoxfSwxMDU5OntUOi0xfSwxMDYxOnt9LDEwNjI6e1Q6MX0sMTA2Mzp7VDotMX0sMTA2NDp7VDoxfSwxMDY1OntUOi0xfSwxMDY2OntUOjF9LDEwNjc6e1Q6LTF9'@;
put 'LDEwNjg6e1Q6MX0sMTA2OTp7VDotMX0sMTA3MDp7VDoxfSwxMDcxOntUOi0xfSwxMDcyOntUOjF9LDEwNzM6e1Q6LTF9LDEwNzU6e1Q6MX0sMTA3Njp7VDotMX0sMTA3Nzp7VDoxfSwxMDc4OntUOi0xfSwxMDc5OntUOjF9LDEwODA6e1Q6LTF9LDEwODE6e1Q6MX0sMTA4Mjp7VDotMX0sMTA4'@;
put 'Mzp7VDoxfSwxMDg0OntUOi0xfSwxMDg1Ont9LDEwODY6e1Q6MX0sMTA4Nzp7VDotMX0sMTA4ODp7VDoxfSwxMDg5OntUOi0xfSwxMDkwOntUOjF9LDEwOTE6e1Q6LTF9LDEwOTI6e1Q6MX0sMTA5Mzp7VDotMX0sMTA5NDp7VDoxfSwxMDk1OntUOi0xfSwxMDk2Ont9LDEwOTc6e1Q6MX0sMTA5'@;
put 'ODp7fSwxMDk5OntUOi0xfSwxMTAwOntUOjF9LDExMDE6e1Q6LTF9LDExMDI6e30sMTEwMzp7fSwxMTA0Ont9LDExMDU6e30sMTExMTp7fSwxMTEyOnt9LDExMTM6e1Q6MX0sMTExNDp7VDotMX0sMTExNTp7VDoxfSwxMTE2OntUOi0xfSwxMTE3Ont9LDExMTg6e1Q6MX0sMTExOTp7VDotMX0s'@;
put 'MTEyMDp7VDoxfSwxMTIxOntUOi0xfSwxMTIyOntUOjF9LDExMjM6e1Q6LTF9LDExMjQ6e1Q6MX0sMTEyNTp7VDotMX0sMTEyNjp7fSwxMTI4OntUOjF9LDExMjk6e1Q6LTF9LDExMzA6e30sMTEzMTp7VDoxfSwxMTMyOntUOi0xfSwxMTMzOntUOjF9LDExMzQ6e1Q6LTF9LDExMzU6e1Q6MX0s'@;
put 'MTEzNjp7VDotMX0sMTEzNzp7VDoxfSwxMTM4OntUOi0xfSwxMTM5OntUOjF9LDExNDA6e1Q6LTF9LDExNDE6e30sMTE0Mjp7VDoxfSwxMTQzOntUOi0xfSwxMTQ0OntUOjF9LDExNDU6e1Q6LTF9LDExNDY6e30sMTE0Nzp7VDoxfSwxMTQ4OntUOi0xfSwxMTQ5OntUOjF9LDExNTA6e1Q6LTF9'@;
put 'LDExNTI6e1Q6MX0sMTE1Mzp7VDotMX0sMTE1NDp7VDotMX0sMTE1NTp7VDotMX0sMTE1Njp7VDotMX0sMTE1Nzp7VDoxfSwxMTU4OntUOi0xfSwxMTU5OntUOjF9LDExNjA6e1Q6LTF9LDExNjE6e1Q6MX0sMTE2Mjp7VDotMX0sMTE2Mzp7VDoxfSwxMTY0OntUOi0xfSwxMTY1OntUOjF9LDEx'@;
put 'NjY6e1Q6LTF9LDExNjc6e1Q6MX0sMTE2ODp7VDotMX0sMTE2OTp7VDoxfSwxMTcwOntUOi0xfSwxMTcxOnt9LDExNzI6e1Q6MX0sMTE3Mzp7VDotMX0sMTE3Nzp7fSwxMTc4OntUOjF9LDExODA6e30sMTE4MTp7fSwxMTgyOnt9LDIwNDg6e1Q6MX0sMjA0OTp7VDotMX0sMjA1MDp7fSwyMDUx'@;
put 'OntUOjF9LDIwNTI6e1Q6LTF9LDIwNTM6e30sMjA1NDp7fSwyMDU1OntUOjF9LDIwNTY6e1Q6LTF9LDIwNTc6e1Q6MX0sMjA1ODp7VDotMX0sMjA2MDp7fSwyMDY3Ont9LDIwNjg6e1Q6MX0sMjA2OTp7VDotMX0sMjA3MDp7fSwyMDcxOnt9LDIwNzI6e1Q6MX0sMjA3Mzp7VDotMX0sMjA3NTp7'@;
put 'fSwyMDc2Ont9LDIwNzc6e1Q6MX0sMjA3ODp7VDotMX0sMjA3OTp7fSwyMDgwOntUOjF9LDIwODE6e1Q6LTF9LDIwODI6e30sMjA4Mzp7VDoxfSwyMDg0OntUOi0xfSwyMDg1OntUOjF9LDIwODY6e1Q6LTF9LDIwODc6e1Q6MX0sMjA4ODp7VDotMX0sMjA4OTp7VDoxfSwyMDkwOntUOi0xfSwy'@;
put 'MDkxOnt9LDIwOTI6e30sMjA5Mzp7VDoxfSwyMDk0OntUOi0xfSwyMDk1Ont9LDIwOTY6e1Q6MX0sMjA5Nzp7VDotMX0sMjA5ODp7VDoxfSwyMDk5OntUOi0xfSwyMTAwOntUOjF9LDIxMDE6e1Q6LTF9LDIxMDI6e30sMjEwMzp7VDoxfSwyMTA0OntUOi0xfSwyMTA1Ont9LDIxMDY6e1Q6MX0s'@;
put 'MjEwNzp7VDotMX0sMjEwODp7fSwyMTA5OntUOjF9LDIxMTA6e1Q6LTF9LDIxMTE6e1Q6MX0sMjExMjp7VDotMX0sMjExMzp7VDoxfSwyMTE0OntUOi0xfSwyMTE1Ont9LDIxMTY6e30sMjExNzp7fSwyMTE4OntUOjF9LDIxMTk6e1Q6LTF9LDIxMjA6e30sMjEyMTp7VDoxfSwyMTIyOntUOi0x'@;
put 'fSwyMTIzOntUOjF9LDIxMjQ6e1Q6LTF9LDIxMjU6e30sMjEyNjp7VDoxfSwyMTI3OntUOi0xfSwyMTI4Ont9LDIxMjk6e1Q6MX0sMjEzMDp7VDotMX0sMjEzMTp7VDoxfSwyMTMyOntUOi0xfSwyMTMzOntUOjF9LDIxMzQ6e30sMjEzNTp7fSwyMTM2Ont9LDIxMzc6e1Q6MX0sMjEzODp7VDot'@;
put 'MX0sMjEzOTp7VDoxfSwyMTQwOntUOi0xfSwyMTQxOnt9LDMwNzI6e30sMzA3Mzp7fSw0MDk2OntUOjF9LDQwOTc6e1Q6LTF9LDUwMDI6e1Q6MX0sNTAwMzp7VDotMX0sNTA4MTp7VDoxfSw1MDgyOntUOi0xfSw1MDgzOnt9LDUwODQ6e1Q6MX0sNTA4NTp7VDotMX0sNTA4Njp7VDoxfSw1MDg3'@;
put 'OntUOi0xfSw1MDg4Ont9LDUwODk6e30sNTA5MDp7fSw1MDkyOntUOjF9LDUwOTM6e1Q6LTF9LDUwOTQ6e30sNTA5NTp7VDoxfSw1MDk2OntUOi0xfSw1MDk3Ont9LDUwOTk6e30sNjU1MzU6e246IiJ9fSxXbj17Njp7ZjpObn0sMTA6e2Y6eXR9LDEyOntmOnRyfSwxMzp7Zjp0cn0sMTQ6e2Y6'@;
put 'SmV9LDE1OntmOkplfSwxNjp7Zjpncn0sMTc6e2Y6SmV9LDE4OntmOkplfSwxOTp7Zjp0cn0sMjA6e2Y6S3N9LDIxOntmOktzfSwyMzp7Zjpxc30sMjQ6e2Y6SnN9LDI1OntmOkplfSwyNjp7fSwyNzp7fSwyODp7ZjpmdW5jdGlvbiBVdShlLHQscil7cmV0dXJuIGZ1bmN0aW9uIE11KGUsdCxy'@;
put 'KXtpZighKHIuYmlmZjw4KSl7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpLG49ZS5yZWFkX3NoaWZ0KDIpLGk9ZS5yZWFkX3NoaWZ0KDIpLHM9ZS5yZWFkX3NoaWZ0KDIpLGY9enQoZSwwLHIpO3JldHVybiByLmJpZmY8OCYmZS5yZWFkX3NoaWZ0KDEpLFt7cjphLGM6bn0sZixzLGldfX0oZSwwLHIp'@;
put 'fX0sMjk6e30sMzQ6e2Y6SmV9LDM1OntmOllzfSwzODp7Zjpncn0sMzk6e2Y6Z3J9LDQwOntmOmdyfSw0MTp7Zjpncn0sNDI6e2Y6SmV9LDQzOntmOkplfSw0Nzp7ZjpmdW5jdGlvbiBxaChlLHQscil7dmFyIGE9e1R5cGU6ci5iaWZmPj04P2UucmVhZF9zaGlmdCgyKTowfTtyZXR1cm4gYS5U'@;
put 'eXBlP2Z1bmN0aW9uIEpoKGUsdCxyKXt2YXIgYT1yfHx7fTtyZXR1cm4gYS5JbmZvPWUucmVhZF9zaGlmdCgyKSxlLmwtPTIsYS5EYXRhPTE9PT1hLkluZm8/ZnVuY3Rpb24gJGgoZSl7dmFyIHQ9e30scj10LkVuY3J5cHRpb25WZXJzaW9uSW5mbz1kdChlLDQpO2lmKDEhPXIuTWFqb3J8fDEh'@;
put 'PXIuTWlub3IpdGhyb3cidW5yZWNvZ25pemVkIHZlcnNpb24gY29kZSAiK3IuTWFqb3IrIiA6ICIrci5NaW5vcjtyZXR1cm4gdC5TYWx0PWUucmVhZF9zaGlmdCgxNiksdC5FbmNyeXB0ZWRWZXJpZmllcj1lLnJlYWRfc2hpZnQoMTYpLHQuRW5jcnlwdGVkVmVyaWZpZXJIYXNoPWUucmVhZF9z'@;
put 'aGlmdCgxNiksdH0oZSk6ZnVuY3Rpb24gemgoZSx0KXt2YXIgcj17fSxhPXIuRW5jcnlwdGlvblZlcnNpb25JbmZvPWR0KGUsNCk7aWYodC09NCwyIT1hLk1pbm9yKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1pbm9yIHZlcnNpb24gY29kZTogIithLk1pbm9yKTtpZihhLk1ham9y'@;
put 'PjR8fGEuTWFqb3I8Mil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtYWpvciB2ZXJzaW9uIGNvZGU6ICIrYS5NYWpvcik7ci5GbGFncz1lLnJlYWRfc2hpZnQoNCksdC09NDt2YXIgbj1lLnJlYWRfc2hpZnQoNCk7cmV0dXJuIHQtPTQsci5FbmNyeXB0aW9uSGVhZGVyPXNmKGUsbiks'@;
put 'ci5FbmNyeXB0aW9uVmVyaWZpZXI9ZmYoZSx0LT1uKSxyfShlLHQpLGF9KGUsdC0yLGEpOmZ1bmN0aW9uIFloKGUsdCxyLGEpe3ZhciBuPXtrZXk6dHIoZSksdmVyaWZpY2F0aW9uQnl0ZXM6dHIoZSl9O3IucGFzc3dvcmQmJihuLnZlcmlmaWVyPWZ1bmN0aW9uIEZuKGUpe3ZhciByLGksdD0w'@;
put 'LGE9bmYoZSksbj1hLmxlbmd0aCsxO2Zvcigocj1fdChuKSlbMF09YS5sZW5ndGgsaT0xO2khPW47KytpKXJbaV09YVtpLTFdO2ZvcihpPW4tMTtpPj0wOy0taSl0PSgoMTYzODQmdD8xOjApfHQ8PDEmMzI3NjcpXnJbaV07cmV0dXJuIDUyODExXnR9KHIucGFzc3dvcmQpKSxhLnZhbGlkPW4u'@;
put 'dmVyaWZpY2F0aW9uQnl0ZXM9PT1uLnZlcmlmaWVyLGEudmFsaWQmJihhLmluc2l0dT1mdW5jdGlvbihlKXt2YXIgdD0wLHI9Y2YoZSk7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBuPWZ1bmN0aW9uKGUsdCxyLGEsbil7dmFyIGkscztmb3Iobnx8KG49dCksYXx8KGE9Y2YoIiIpKSxpPTA7aSE9'@;
put 'dC5sZW5ndGg7KytpKXM9dFtpXSxuW2ldPXM9MjU1Jigoc149YVtyXSk+PjV8czw8MyksKytyO3JldHVybltuLHIsYV19KDAsYSx0LHIpO3JldHVybiB0PW5bMV0sblswXX19KHIucGFzc3dvcmQpKX0oZSwwLHIsYSksYX19LDQ5OntmOmZ1bmN0aW9uIGh1KGUsdCxyKXt2YXIgYT17ZHlIZWln'@;
put 'aHQ6ZS5yZWFkX3NoaWZ0KDIpLGZsOmUucmVhZF9zaGlmdCgyKX07c3dpdGNoKHImJnIuYmlmZnx8OCl7Y2FzZSAyOmJyZWFrO2Nhc2UgMzpjYXNlIDQ6ZS5sKz0yO2JyZWFrO2RlZmF1bHQ6ZS5sKz0xMH1yZXR1cm4gYS5uYW1lPVJhKGUsMCxyKSxhfX0sNTE6e2Y6dHJ9LDYwOnt9LDYxOntm'@;
put 'OmZ1bmN0aW9uIGZ1KGUpe3JldHVybntQb3M6W2UucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQoMildLERpbTpbZS5yZWFkX3NoaWZ0KDIpLGUucmVhZF9zaGlmdCgyKV0sRmxhZ3M6ZS5yZWFkX3NoaWZ0KDIpLEN1clRhYjplLnJlYWRfc2hpZnQoMiksRmlyc3RUYWI6ZS5yZWFkX3NoaWZ0'@;
put 'KDIpLFNlbGVjdGVkOmUucmVhZF9zaGlmdCgyKSxUYWJSYXRpbzplLnJlYWRfc2hpZnQoMil9fX0sNjQ6e2Y6SmV9LDY1OntmOmZ1bmN0aW9uIHV1KCl7fX0sNjY6e2Y6dHJ9LDc3Ont9LDgwOnt9LDgxOnt9LDgyOnt9LDg1OntmOnRyfSw4OTp7fSw5MDp7fSw5MTp7fSw5Mjp7ZjpmdW5jdGlv'@;
put 'biBKbChlLHQscil7aWYoci5lbmMpcmV0dXJuIGUubCs9dCwiIjt2YXIgYT1lLmwsbj16dChlLDAscik7cmV0dXJuIGUucmVhZF9zaGlmdCh0K2EtZS5sKSxufX0sOTM6e2Y6ZnVuY3Rpb24gVnUoZSx0LHIpe2lmKHImJnIuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBHdShlLHQscil7ZS5sKz00'@;
put 'O3ZhciBhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKSxpPWUucmVhZF9zaGlmdCgyKTtlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTIsZS5sKz0yLGUubCs9MixlLmwrPTY7dmFyIHM9W107cmV0dXJuIHMucHVzaCgoWHVbYV18fHByKShl'@;
put 'LHQtPTM2LHIpKSx7Y21vOltuLGEsaV0sZnQ6c319KGUsdCxyKTt2YXIgYT1YcyhlKSxuPWZ1bmN0aW9uIEtsKGUsdCl7Zm9yKHZhciByPWUubCt0LGE9W107ZS5sPHI7KXt2YXIgbj1lLnJlYWRfc2hpZnQoMik7ZS5sLT0yO3RyeXthLnB1c2goamxbbl0oZSxyLWUubCkpfWNhdGNoe3JldHVy'@;
put 'biBlLmw9cixhfX1yZXR1cm4gZS5sIT1yJiYoZS5sPXIpLGF9KGUsdC0yMik7cmV0dXJue2NtbzphLGZ0Om59fX0sOTQ6e30sOTU6e2Y6SmV9LDk2Ont9LDk3Ont9LDk5OntmOkplfSwxMjU6e2Y6UXN9LDEyODp7ZjpmdW5jdGlvbiBBdShlKXtlLmwrPTQ7dmFyIHQ9W2UucmVhZF9zaGlmdCgy'@;
put 'KSxlLnJlYWRfc2hpZnQoMildO2lmKDAhPT10WzBdJiZ0WzBdLS0sMCE9PXRbMV0mJnRbMV0tLSx0WzBdPjd8fHRbMV0+Nyl0aHJvdyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK3Quam9pbigifCIpKTtyZXR1cm4gdH19LDEyOTp7ZjpmdW5jdGlvbiBabChlLHQscil7dmFyIGE9ciYmOD09'@;
put 'ci5iaWZmfHwyPT10P2UucmVhZF9zaGlmdCgyKTooZS5sKz10LDApO3JldHVybntmRGlhbG9nOjE2JmEsZkJlbG93OjY0JmEsZlJpZ2h0OjEyOCZhfX19LDEzMDp7Zjp0cn0sMTMxOntmOkplfSwxMzI6e2Y6SmV9LDEzMzp7ZjpmdW5jdGlvbiBRbChlLHQscil7dmFyIGE9ZS5yZWFkX3NoaWZ0'@;
put 'KDQpLG49MyZlLnJlYWRfc2hpZnQoMSksaT1lLnJlYWRfc2hpZnQoMSk7c3dpdGNoKGkpe2Nhc2UgMDppPSJXb3Jrc2hlZXQiO2JyZWFrO2Nhc2UgMTppPSJNYWNyb3NoZWV0IjticmVhaztjYXNlIDI6aT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2Omk9IlZCQU1vZHVsZSJ9dmFyIHM9UmEo'@;
put 'ZSwwLHIpO3JldHVybiAwPT09cy5sZW5ndGgmJihzPSJTaGVldDEiKSx7cG9zOmEsaHM6bixkdDppLG5hbWU6c319fSwxMzQ6e30sMTQwOntmOmZ1bmN0aW9uIEp1KGUpe3ZhciByLHQ9WzAsMF07cmV0dXJuIHI9ZS5yZWFkX3NoaWZ0KDIpLHRbMF09eHNbcl18fHIscj1lLnJlYWRfc2hpZnQo'@;
put 'MiksdFsxXT14c1tyXXx8cix0fX0sMTQxOntmOnRyfSwxNDQ6e30sMTQ2OntmOmZ1bmN0aW9uIFF1KGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1bXTt0LS0gPjA7KXIucHVzaChVcyhlKSk7cmV0dXJuIHJ9fSwxNTE6e30sMTUyOnt9LDE1Mzp7fSwxNTQ6e30sMTU1Ont9LDE1Njp7'@;
put 'Zjp0cn0sMTU3Ont9LDE1ODp7fSwxNjA6e2Y6c2h9LDE2MTp7ZjpmdW5jdGlvbiB0aChlLHQpe3ZhciByPXt9O3JldHVybiB0PDMyfHwoZS5sKz0xNixyLmhlYWRlcj1ncihlKSxyLmZvb3Rlcj1ncihlKSxlLmwrPTIpLHJ9fSwxNzQ6e30sMTc1Ont9LDE3Njp7fSwxNzc6e30sMTc4Ont9LDE4'@;
put 'MDp7fSwxODE6e30sMTgyOnt9LDE4NDp7fSwxODU6e30sMTg5OntmOmZ1bmN0aW9uIFR1KGUsdCl7Zm9yKHZhciByPWUubCt0LTIsYT1lLnJlYWRfc2hpZnQoMiksbj1lLnJlYWRfc2hpZnQoMiksaT1bXTtlLmw8cjspaS5wdXNoKFdzKGUpKTtpZihlLmwhPT1yKXRocm93IG5ldyBFcnJvcigi'@;
put 'TXVsUksgcmVhZCBlcnJvciIpO3ZhciBzPWUucmVhZF9zaGlmdCgyKTtpZihpLmxlbmd0aCE9cy1uKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjphLGM6bixDOnMscmtyZWM6aX19fSwxOTA6e2Y6ZnVuY3Rpb24gU3UoZSx0KXtmb3IodmFyIHI9'@;
put 'ZS5sK3QtMixhPWUucmVhZF9zaGlmdCgyKSxuPWUucmVhZF9zaGlmdCgyKSxpPVtdO2UubDxyOylpLnB1c2goZS5yZWFkX3NoaWZ0KDIpKTtpZihlLmwhPT1yKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgcmVhZCBlcnJvciIpO3ZhciBzPWUucmVhZF9zaGlmdCgyKTtpZihpLmxlbmd0aCE9'@;
put 'cy1uKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjphLGM6bixDOnMsaXhmZTppfX19LDE5Mzp7Zjp5dH0sMTk3Ont9LDE5ODp7fSwxOTk6e30sMjAwOnt9LDIwMTp7fSwyMDI6e2Y6SmV9LDIwMzp7fSwyMDQ6e30sMjA1Ont9LDIwNjp7fSwy'@;
put 'MDc6e30sMjA4Ont9LDIwOTp7fSwyMTA6e30sMjExOnt9LDIxMzp7fSwyMTU6e30sMjE2Ont9LDIxNzp7fSwyMTg6e2Y6dHJ9LDIyMDp7fSwyMjE6e2Y6SmV9LDIyMjp7fSwyMjQ6e2Y6ZnVuY3Rpb24geXUoZSx0LHIpe3ZhciBhPXt9O3JldHVybiBhLmlmbnQ9ZS5yZWFkX3NoaWZ0KDIpLGEu'@;
put 'bnVtRm10SWQ9ZS5yZWFkX3NoaWZ0KDIpLGEuZmxhZ3M9ZS5yZWFkX3NoaWZ0KDIpLGEuZlN0eWxlPWEuZmxhZ3M+PjImMSxhLmRhdGE9ZnVuY3Rpb24gRnUoZSx0LHIsYSl7dmFyIG49e30saT1lLnJlYWRfc2hpZnQoNCkscz1lLnJlYWRfc2hpZnQoNCksZj1lLnJlYWRfc2hpZnQoNCksYz1l'@;
put 'LnJlYWRfc2hpZnQoMik7cmV0dXJuIG4ucGF0dGVyblR5cGU9bmxbZj4+MjZdLGEuY2VsbFN0eWxlcyYmKG4uYWxjPTcmaSxuLmZXcmFwPWk+PjMmMSxuLmFsY1Y9aT4+NCY3LG4uZkp1c3RMYXN0PWk+PjcmMSxuLnRyb3Q9aT4+OCYyNTUsbi5jSW5kZW50PWk+PjE2JjE1LG4uZlNocmlua1Rv'@;
put 'Rml0PWk+PjIwJjEsbi5pUmVhZE9yZGVyPWk+PjIyJjIsbi5mQXRyTnVtPWk+PjI2JjEsbi5mQXRyRm50PWk+PjI3JjEsbi5mQXRyQWxjPWk+PjI4JjEsbi5mQXRyQmRyPWk+PjI5JjEsbi5mQXRyUGF0PWk+PjMwJjEsbi5mQXRyUHJvdD1pPj4zMSYxLG4uZGdMZWZ0PTE1JnMsbi5kZ1JpZ2h0'@;
put 'PXM+PjQmMTUsbi5kZ1RvcD1zPj44JjE1LG4uZGdCb3R0b209cz4+MTImMTUsbi5pY3ZMZWZ0PXM+PjE2JjEyNyxuLmljdlJpZ2h0PXM+PjIzJjEyNyxuLmdyYml0RGlhZz1zPj4zMCYzLG4uaWN2VG9wPTEyNyZmLG4uaWN2Qm90dG9tPWY+PjcmMTI3LG4uaWN2RGlhZz1mPj4xNCYxMjcsbi5k'@;
put 'Z0RpYWc9Zj4+MjEmMTUsbi5pY3ZGb3JlPTEyNyZjLG4uaWN2QmFjaz1jPj43JjEyNyxuLmZzeEJ1dHRvbj1jPj4xNCYxKSxufShlLDAsMCxyKSxhfX0sMjI1OntmOmZ1bmN0aW9uIFlsKGUsdCl7cmV0dXJuIDA9PT10fHxlLnJlYWRfc2hpZnQoMiksMTIwMH19LDIyNjp7Zjp5dH0sMjI3Ont9'@;
put 'LDIyOTp7ZjpmdW5jdGlvbiBXdShlLHQpe2Zvcih2YXIgcj1bXSxhPWUucmVhZF9zaGlmdCgyKTthLS07KXIucHVzaChrMChlKSk7cmV0dXJuIHJ9fSwyMzM6e30sMjM1Ont9LDIzNjp7fSwyMzc6e30sMjM5Ont9LDI0MDp7fSwyNDE6e30sMjQyOnt9LDI0NDp7fSwyNDU6e30sMjQ2Ont9LDI0'@;
put 'Nzp7fSwyNDg6e30sMjQ5Ont9LDI1MTp7fSwyNTI6e2Y6ZnVuY3Rpb24gcnUoZSx0KXtmb3IodmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoNCksbj1lLnJlYWRfc2hpZnQoNCksaT1bXSxzPTA7cyE9biYmZS5sPHI7KytzKWkucHVzaChSbChlKSk7cmV0dXJuIGkuQ291bnQ9YSxpLlVuaXF1'@;
put 'ZT1uLGl9fSwyNTM6e2Y6ZnVuY3Rpb24gZHUoZSl7dmFyIHQ9bnQoZSk7cmV0dXJuIHQuaXNzdD1lLnJlYWRfc2hpZnQoNCksdH19LDI1NTp7ZjpmdW5jdGlvbiBhdShlLHQpe3ZhciByPXt9O3JldHVybiByLmRzc3Q9ZS5yZWFkX3NoaWZ0KDIpLGUubCs9dC0yLHJ9fSwyNTY6e30sMjU5Ont9'@;
put 'LDI5MDp7fSwzMTE6e30sMzEyOnt9LDMxNTp7fSwzMTc6e2Y6YnN9LDMxODp7fSwzMTk6e30sMzIwOnt9LDMzMDp7fSwzMzE6e30sMzMzOnt9LDMzNDp7fSwzMzU6e30sMzM2Ont9LDMzNzp7fSwzMzg6e30sMzM5Ont9LDM0MDp7fSwzNTE6e30sMzUyOntmOkplfSwzNTM6e2Y6eXR9LDQwMTp7'@;
put 'fSw0MDI6e30sNDAzOnt9LDQwNDp7fSw0MDU6e30sNDA2Ont9LDQwNzp7fSw0MDg6e30sNDI1Ont9LDQyNjp7fSw0Mjc6e30sNDI4Ont9LDQyOTp7fSw0MzA6e2Y6ZnVuY3Rpb24gUnUoZSx0LHIpe3ZhciBhPWUubCt0LG49ZS5yZWFkX3NoaWZ0KDIpLGk9ZS5yZWFkX3NoaWZ0KDIpO2lmKHIu'@;
put 'c2JjY2g9aSwxMDI1PT1pfHwxNDg0OT09aSlyZXR1cm5baSxuXTtpZihpPDF8fGk+MjU1KXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTdXBCb29rIHR5cGU6ICIraSk7Zm9yKHZhciBzPUd0KGUsaSksZj1bXTthPmUubDspZi5wdXNoKE5hKGUpKTtyZXR1cm5baSxuLHMsZl19fSw0MzE6'@;
put 'e2Y6SmV9LDQzMjp7fSw0MzM6e30sNDM0Ont9LDQzNzp7fSw0Mzg6e2Y6ZnVuY3Rpb24genUoZSx0LHIpe3ZhciBhPWUubCxuPSIiO3RyeXtlLmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoci5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT9lLmwrPTY6ZnVuY3Rpb24g'@;
put 'YmwoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDEpO2UubCsrO3ZhciByPWUucmVhZF9zaGlmdCgyKTtlLmwrPTJ9KGUpO3ZhciBmPWUucmVhZF9zaGlmdCgyKTtlLnJlYWRfc2hpZnQoMiksdHIoZSk7dmFyIGM9ZS5yZWFkX3NoaWZ0KDIpO2UubCs9Yztmb3IodmFyIG89MTtvPGUubGVucy5sZW5n'@;
put 'dGgtMTsrK28pe2lmKGUubC1hIT1lLmxlbnNbb10pdGhyb3cgbmV3IEVycm9yKCJUeE86IGJhZCBjb250aW51ZSByZWNvcmQiKTt2YXIgbD1lW2UubF07aWYoKG4rPUd0KGUsZS5sZW5zW28rMV0tZS5sZW5zW29dLTEpKS5sZW5ndGg+PShsP2Y6MipmKSlicmVha31pZihuLmxlbmd0aCE9PWYm'@;
put 'Jm4ubGVuZ3RoIT09MipmKXRocm93IG5ldyBFcnJvcigiY2NoVGV4dDogIitmKyIgIT0gIituLmxlbmd0aCk7cmV0dXJuIGUubD1hK3Qse3Q6bn19Y2F0Y2h7cmV0dXJuIGUubD1hK3Qse3Q6bn19fX0sNDM5OntmOkplfSw0NDA6e2Y6ZnVuY3Rpb24gJHUoZSx0KXt2YXIgcj1rMChlKTtlLmwr'@;
put 'PTE2O3ZhciBhPWZ1bmN0aW9uIE1sKGUsdCl7dmFyIHI9ZS5sK3QsYT1lLnJlYWRfc2hpZnQoNCk7aWYoMiE9PWEpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc3RyZWFtVmVyc2lvbjogIithKTt2YXIgbj1lLnJlYWRfc2hpZnQoMik7ZS5sKz0yO3ZhciBpLHMsZixjLGwsaCxvPSIi'@;
put 'OzE2Jm4mJihpPXcwKGUpKSwxMjgmbiYmKHM9dzAoZSkpLCEoMjU3Jn5uKSYmKGY9dzAoZSkpLDE9PSgyNTcmbikmJihjPWZ1bmN0aW9uIEJsKGUsdCl7dmFyIHI9ZS5yZWFkX3NoaWZ0KDE2KTtzd2l0Y2gocil7Y2FzZSJlMGM5ZWE3OWY5YmFjZTExOGM4MjAwYWEwMDRiYTkwYiI6cmV0dXJu'@;
put 'IGZ1bmN0aW9uIFBsKGUpe3ZhciB0PWUucmVhZF9zaGlmdCg0KSxyPWUubCxhPSExO3Q+MjQmJihlLmwrPXQtMjQsIjc5NTg4MWY0M2IxZDdmNDhhZjJjODI1ZGM0ODUyNzYzIj09PWUucmVhZF9zaGlmdCgxNikmJihhPSEwKSxlLmw9cik7dmFyIG49ZS5yZWFkX3NoaWZ0KChhP3QtMjQ6dCk+'@;
put 'PjEsInV0ZjE2bGUiKS5yZXBsYWNlKGRyLCIiKTtyZXR1cm4gYSYmKGUubCs9MjQpLG59KGUpO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBMbChlKXtmb3IodmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9IiI7dC0tID4wOylyKz0iLi4vIjt2'@;
put 'YXIgYT1lLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lmKGUubCs9Miw1NzAwNSE9ZS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PWUucmVhZF9zaGlmdCg0KSlyZXR1cm4gcithLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgaT1lLnJl'@;
put 'YWRfc2hpZnQoNCk7aWYoMyE9ZS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7cmV0dXJuIHIrZS5yZWFkX3NoaWZ0KGk+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKGRyLCIiKX0oZSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1v'@;
put 'bmlrZXIgIityKX19KGUpKSw4Jm4mJihvPXcwKGUpKSwzMiZuJiYobD1lLnJlYWRfc2hpZnQoMTYpKSw2NCZuJiYoaD13bihlKSksZS5sPXI7dmFyIHg9c3x8Znx8Y3x8IiI7eCYmbyYmKHgrPSIjIitvKSx4fHwoeD0iIyIrbyksMiZuJiYiLyI9PXguY2hhckF0KDApJiYiLyIhPXguY2hhckF0'@;
put 'KDEpJiYoeD0iZmlsZTovLyIreCk7dmFyIGQ9e1RhcmdldDp4fTtyZXR1cm4gbCYmKGQuZ3VpZD1sKSxoJiYoZC50aW1lPWgpLGkmJihkLlRvb2x0aXA9aSksZH0oZSx0LTI0KTtyZXR1cm5bcixhXX19LDQ0MTp7fSw0NDI6e2Y6TmF9LDQ0Mzp7fSw0NDQ6e2Y6dHJ9LDQ0NTp7fSw0NDY6e30s'@;
put 'NDQ4OntmOnl0fSw0NDk6e2Y6ZnVuY3Rpb24gc3UoZSl7cmV0dXJuIGUucmVhZF9zaGlmdCgyKSxlLnJlYWRfc2hpZnQoNCl9LHI6Mn0sNDUwOntmOnl0fSw1MTI6e2Y6enN9LDUxMzp7ZjppaH0sNTE1OntmOmZ1bmN0aW9uIE91KGUsdCxyKXtyLmJpZmZndWVzcyYmMj09ci5iaWZmJiYoci5i'@;
put 'aWZmPTUpO3ZhciBhPW50KGUpLG49Z3IoZSk7cmV0dXJuIGEudmFsPW4sYX19LDUxNjp7ZjpmdW5jdGlvbiBwdShlLHQscil7ci5iaWZmZ3Vlc3MmJjI9PXIuYmlmZiYmKHIuYmlmZj01KTt2YXIgbj1udChlKTsyPT1yLmJpZmYmJmUubCsrO3ZhciBpPU5hKGUsMCxyKTtyZXR1cm4gbi52YWw9'@;
put 'aSxufX0sNTE3OntmOmpzfSw1MTk6e2Y6Zmh9LDUyMDp7ZjpmdW5jdGlvbiBudShlKXt2YXIgdD17fTt0LnI9ZS5yZWFkX3NoaWZ0KDIpLHQuYz1lLnJlYWRfc2hpZnQoMiksdC5jbnQ9ZS5yZWFkX3NoaWZ0KDIpLXQuYzt2YXIgcj1lLnJlYWRfc2hpZnQoMik7ZS5sKz00O3ZhciBhPWUucmVh'@;
put 'ZF9zaGlmdCgxKTtyZXR1cm4gZS5sKz0zLDcmYSYmKHQubGV2ZWw9NyZhKSwzMiZhJiYodC5oaWRkZW49ITApLDY0JmEmJih0LmhwdD1yLzIwKSx0fX0sNTIzOnt9LDU0NTp7Zjpac30sNTQ5OntmOkdzfSw1NjY6e30sNTc0OntmOmZ1bmN0aW9uIG91KGUsdCxyKXtyZXR1cm4gciYmci5iaWZm'@;
put 'Pj0yJiZyLmJpZmY8NT97fTp7UlRMOjY0JmUucmVhZF9zaGlmdCgyKX19fSw2Mzg6e2Y6ZnVuY3Rpb24gRXUoZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpLGE9V3MoZSk7cmV0dXJue3I6dCxjOnIsaXhmZTphWzBdLHJrbnVtOmFbMV19fX0sNjU5Ont9LDEwNDg6'@;
put 'e30sMTA1NDp7ZjpmdW5jdGlvbiBndShlLHQscil7cmV0dXJuW2UucmVhZF9zaGlmdCgyKSx6dChlLDAscildfX0sMTA4NDp7fSwxMjEyOntmOmZ1bmN0aW9uIEx1KGUsdCxyKXt2YXIgYT1WcyhlKTtlLmwrKzt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuW1lkKGUsdC09OCxyKSxuLGFd'@;
put 'fX0sMjA0ODp7ZjpmdW5jdGlvbiBLdShlLHQpe2UucmVhZF9zaGlmdCgyKTt2YXIgcj1rMChlKSxhPWUucmVhZF9zaGlmdCgodC0xMCkvMiwiZGJjcy1jb250Iik7cmV0dXJuW3IsYT1hLnJlcGxhY2UoZHIsIiIpXX19LDIwNDk6e30sMjA1MDp7fSwyMDUxOnt9LDIwNTI6e30sMjA1Mzp7fSwy'@;
put 'MDU0Ont9LDIwNTU6e30sMjA1Njp7fSwyMDU3OntmOkUwfSwyMDU4Ont9LDIwNTk6e30sMjA2MDp7fSwyMDYxOnt9LDIwNjI6e30sMjA2Mzp7fSwyMDY0Ont9LDIwNjY6e30sMjA2Nzp7fSwyMTI4Ont9LDIxMjk6e30sMjEzMDp7fSwyMTMxOnt9LDIxMzI6e30sMjEzMzp7fSwyMTM0Ont9LDIx'@;
put 'MzU6e30sMjEzNjp7fSwyMTM3Ont9LDIxMzg6e30sMjE0Njp7fSwyMTQ3OntyOjEyfSwyMTQ4Ont9LDIxNDk6e30sMjE1MDp7fSwyMTUxOntmOnl0fSwyMTUyOnt9LDIxNTQ6e30sMjE1NTp7fSwyMTU2Ont9LDIxNjE6e30sMjE2Mjp7fSwyMTY0Ont9LDIxNjU6e30sMjE2Njp7fSwyMTY3Ont9'@;
put 'LDIxNjg6e30sMjE2OTp7fSwyMTcwOnt9LDIxNzE6e30sMjE3Mjp7ZjpmdW5jdGlvbiBlaChlKXtlLmwrPTI7dmFyIHQ9e2N4ZnM6MCxjcmM6MH07cmV0dXJuIHQuY3hmcz1lLnJlYWRfc2hpZnQoMiksdC5jcmM9ZS5yZWFkX3NoaWZ0KDQpLHR9LHI6MTJ9LDIxNzM6e2Y6ZnVuY3Rpb24gSjEo'@;
put 'ZSx0KXtlLmwrPTI7dmFyIGE9ZS5yZWFkX3NoaWZ0KDIpO2UubCs9Mjtmb3IodmFyIG49ZS5yZWFkX3NoaWZ0KDIpLGk9W107bi0tID4wOylpLnB1c2goWTEoZSkpO3JldHVybntpeGZlOmEsZXh0Oml9fSxyOjEyfSwyMTc0Ont9LDIxNzU6e30sMjE4MDp7fSwyMTgxOnt9LDIxODI6e30sMjE4'@;
put 'Mzp7fSwyMTg0Ont9LDIxODU6e30sMjE4Njp7fSwyMTg3Ont9LDIxODg6e2Y6SmUscjoxMn0sMjE4OTp7fSwyMTkwOntyOjEyfSwyMTkxOnt9LDIxOTI6e30sMjE5NDp7fSwyMTk1Ont9LDIxOTY6e2Y6ZnVuY3Rpb24gUHUoZSx0LHIpe2lmKCEoci5iaWZmPDgpKXt2YXIgYT1lLnJlYWRfc2hp'@;
put 'ZnQoMiksbj1lLnJlYWRfc2hpZnQoMik7cmV0dXJuW0d0KGUsYSxyKSxHdChlLG4scildfWUubCs9dH0scjoxMn0sMjE5Nzp7fSwyMTk4OntmOmZ1bmN0aW9uIEcxKGUsdCxyKXt2YXIgYT1lLmwrdDtpZigxMjQyMjYhPT1lLnJlYWRfc2hpZnQoNCkpe2lmKCFyLmNlbGxTdHlsZXMpcmV0dXJu'@;
put 'IHZvaWQoZS5sPWEpO3ZhciBzLGk9ZS5zbGljZShlLmwpO2UubD1hO3RyeXtzPVJpKGkse3R5cGU6ImFycmF5In0pfWNhdGNoe3JldHVybn12YXIgZj1OcihzLCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYoZilyZXR1cm4gdmYoZixyKX19LHI6MTJ9LDIxOTk6e30sMjIwMDp7fSwy'@;
put 'MjAxOnt9LDIyMDI6e2Y6ZnVuY3Rpb24gQnUoZSl7cmV0dXJuWzAhPT1lLnJlYWRfc2hpZnQoNCksMCE9PWUucmVhZF9zaGlmdCg0KSxlLnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAzOntmOnl0fSwyMjA0Ont9LDIyMDU6e30sMjIwNjp7fSwyMjA3Ont9LDIyMTE6e2Y6ZnVuY3Rpb24gaXUo'@;
put 'ZSl7dmFyIHQ9ZnVuY3Rpb24gV2woZSl7dmFyIHQ9ZS5yZWFkX3NoaWZ0KDIpLHI9ZS5yZWFkX3NoaWZ0KDIpO3JldHVybiBlLmwrPTgse3R5cGU6dCxmbGFnczpyfX0oZSk7aWYoMjIxMSE9dC50eXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIrdC50eXBlKTty'@;
put 'ZXR1cm4gMCE9PWUucmVhZF9zaGlmdCg0KX19LDIyMTI6e30sMjIxMzp7fSwyMjE0Ont9LDIyMTU6e30sNDA5Nzp7fSw0MDk4Ont9LDQwOTk6e30sNDEwMjp7fSw0MTAzOnt9LDQxMDU6e30sNDEwNjp7fSw0MTA3Ont9LDQxMDg6e30sNDEwOTp7fSw0MTE2Ont9LDQxMTc6e30sNDExODp7fSw0'@;
put 'MTE5Ont9LDQxMjA6e30sNDEyMTp7fSw0MTIyOnt9LDQxMjM6e30sNDEyNDp7fSw0MTI1Ont9LDQxMjY6e30sNDEyNzp7fSw0MTI4Ont9LDQxMjk6e30sNDEzMDp7fSw0MTMyOnt9LDQxMzM6e30sNDEzNDp7Zjp0cn0sNDEzNTp7fSw0MTQ2Ont9LDQxNDc6e30sNDE0ODp7fSw0MTQ5Ont9LDQx'@;
put 'NTQ6e30sNDE1Njp7fSw0MTU3Ont9LDQxNTg6e30sNDE1OTp7fSw0MTYwOnt9LDQxNjE6e30sNDE2Mzp7fSw0MTY0OntmOmZ1bmN0aW9uIGFoKGUsdCxyKXt2YXIgYT17YXJlYTohMX07aWYoNSE9ci5iaWZmKXJldHVybiBlLmwrPXQsYTt2YXIgbj1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGUu'@;
put 'bCs9MywxNiZuJiYoYS5hcmVhPSEwKSxhfX0sNDE2NTp7fSw0MTY2Ont9LDQxNjg6e30sNDE3MDp7fSw0MTcxOnt9LDQxNzQ6e30sNDE3NTp7fSw0MTc2Ont9LDQxNzc6e30sNDE4Nzp7fSw0MTg4OntmOmZ1bmN0aW9uIFp1KGUpe2Zvcih2YXIgdD1lLnJlYWRfc2hpZnQoMikscj1bXTt0LS0g'@;
put 'PjA7KXIucHVzaChVcyhlKSk7cmV0dXJuIHJ9fSw0MTg5Ont9LDQxOTE6e30sNDE5Mjp7fSw0MTkzOnt9LDQxOTQ6e30sNDE5NTp7fSw0MTk2Ont9LDQxOTc6e30sNDE5ODp7fSw0MTk5Ont9LDQyMDA6e30sMDp7Zjp6c30sMTp7fSwyOntmOmZ1bmN0aW9uIGhoKGUpe3ZhciB0PW50KGUpOysr'@;
put 'ZS5sO3ZhciByPWUucmVhZF9zaGlmdCgyKTtyZXR1cm4gdC50PSJuIix0LnZhbD1yLHR9fSwzOntmOmZ1bmN0aW9uIGxoKGUpe3ZhciB0PW50KGUpOysrZS5sO3ZhciByPWdyKGUpO3JldHVybiB0LnQ9Im4iLHQudmFsPXIsdH19LDQ6e2Y6ZnVuY3Rpb24gb2goZSx0LHIpe3IuYmlmZmd1ZXNz'@;
put 'JiY1PT1yLmJpZmYmJihyLmJpZmY9Mik7dmFyIGE9bnQoZSk7KytlLmw7dmFyIG49enQoZSwwLHIpO3JldHVybiBhLnQ9InN0ciIsYS52YWw9bixhfX0sNTp7Zjpqc30sNzp7ZjpmdW5jdGlvbiBkaChlKXt2YXIgdD1lLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT10PyhlLmwrKywiIik6ZS5y'@;
put 'ZWFkX3NoaWZ0KHQsInNiY3MtY29udCIpfX0sODp7fSw5OntmOkUwfSwxMTp7fSwyMjp7Zjp0cn0sMzA6e2Y6d3V9LDMxOnt9LDMyOnt9LDMzOntmOlpzfSwzNjp7fSwzNzp7ZjpHc30sNTA6e2Y6ZnVuY3Rpb24gdmgoZSx0KXtlLmwrPTYsZS5sKz0yLGUubCs9MSxlLmwrPTMsZS5sKz0xLGUu'@;
put 'bCs9dC0xM319LDYyOnt9LDUyOnt9LDY3Ont9LDY4OntmOnRyfSw2OTp7fSw4Njp7fSwxMjY6e30sMTI3OntmOmZ1bmN0aW9uIGNoKGUpe3ZhciB0PWUucmVhZF9zaGlmdCgyKSxyPWUucmVhZF9zaGlmdCgyKSxhPWUucmVhZF9zaGlmdCg0KSxuPXtmbXQ6dCxlbnY6cixsZW46YSxkYXRhOmUu'@;
put 'c2xpY2UoZS5sLGUubCthKX07cmV0dXJuIGUubCs9YSxufX0sMTM1Ont9LDEzNjp7fSwxMzc6e30sMTQ1Ont9LDE0ODp7fSwxNDk6e30sMTUwOnt9LDE2OTp7fSwxNzE6e30sMTg4Ont9LDE5MTp7fSwxOTI6e30sMTk0Ont9LDE5NTp7fSwyMTQ6e2Y6ZnVuY3Rpb24gcGgoZSx0LHIpe3ZhciBh'@;
put 'PWUubCt0LG49bnQoZSksaT1lLnJlYWRfc2hpZnQoMikscz1HdChlLGkscik7cmV0dXJuIGUubD1hLG4udD0ic3RyIixuLnZhbD1zLG59fSwyMjM6e30sMjM0Ont9LDM1NDp7fSw0MjE6e30sNTE4OntmOk5ufSw1MjE6e2Y6RTB9LDUzNjp7ZjpKc30sNTQ3OntmOllzfSw1NjE6e30sNTc5Ont9'@;
put 'LDEwMzA6e2Y6Tm59LDEwMzM6e2Y6RTB9LDEwOTE6e30sMjE1Nzp7fSwyMTYzOnt9LDIxNzc6e30sMjI0MDp7fSwyMjQxOnt9LDIyNDI6e30sMjI0Mzp7fSwyMjQ0Ont9LDIyNDU6e30sMjI0Njp7fSwyMjQ3Ont9LDIyNDg6e30sMjI0OTp7fSwyMjUwOnt9LDIyNTE6e30sMjI2Mjp7cjoxMn0s'@;
put 'MjkyODI6e319O2Z1bmN0aW9uIGFlKGUsdCxyLGEpe3ZhciBuPXQ7aWYoIWlzTmFOKG4pKXt2YXIgaT1hfHwocnx8W10pLmxlbmd0aHx8MCxzPWUubmV4dCg0KTtzLndyaXRlX3NoaWZ0KDIsbikscy53cml0ZV9zaGlmdCgyLGkpLGk+MCYmcm4ocikmJmUucHVzaChyKX19ZnVuY3Rpb24gSmYo'@;
put 'ZSx0KXt2YXIgcj10fHx7fTtudWxsIT16ZSYmbnVsbD09ci5kZW5zZSYmKHIuZGVuc2U9emUpO3ZhciBhPXIuZGVuc2U/W106e30sbj0oZT1lLnJlcGxhY2UoLzwhLS0uKj8tLT4vZywiIikpLm1hdGNoKC88dGFibGUvaSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNv'@;
put 'dWxkIG5vdCBmaW5kIDx0YWJsZT4iKTt2YXIgaT1lLm1hdGNoKC88XC90YWJsZS9pKSxzPW4uaW5kZXgsZj1pJiZpLmluZGV4fHxlLmxlbmd0aCxjPXZvKGUuc2xpY2UocyxmKSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+Iiksbz0tMSxsPTAsaD0wLHg9MCxkPXtzOntyOjFlNyxjOjFlN30sZTp7'@;
put 'cjowLGM6MH19LHY9W107Zm9yKHM9MDtzPGMubGVuZ3RoOysrcyl7dmFyIHU9Y1tzXS50cmltKCkscD11LnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9cCl7aWYoIjx0ZCI9PXB8fCI8dGgiPT1wKXt2YXIgaz11LnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKGY9MDtmPGsubGVu'@;
put 'Z3RoOysrZil7dmFyIFQ9a1tmXS50cmltKCk7aWYoVC5tYXRjaCgvPHRbZGhdL2kpKXtmb3IodmFyIGc9VCxOPTA7IjwiPT1nLmNoYXJBdCgwKSYmKE49Zy5pbmRleE9mKCI+IikpPi0xOylnPWcuc2xpY2UoTisxKTtmb3IodmFyIE09MDtNPHYubGVuZ3RoOysrTSl7dmFyIEk9dltNXTtJLnMu'@;
put 'Yz09bCYmSS5zLnI8byYmbzw9SS5lLnImJihsPUkuZS5jKzEsTT0tMSl9dmFyIHk9bWUoVC5zbGljZSgwLFQuaW5kZXhPZigiPiIpKSk7eD15LmNvbHNwYW4/K3kuY29sc3BhbjoxLCgoaD0reS5yb3dzcGFuKT4xfHx4PjEpJiZ2LnB1c2goe3M6e3I6byxjOmx9LGU6e3I6bysoaHx8MSktMSxj'@;
put 'OmwreC0xfX0pO3ZhciBQPXkudHx8eVsiZGF0YS10Il18fCIiO2lmKCFnLmxlbmd0aCl7bCs9eDtjb250aW51ZX1pZihnPVdpKGcpLGQucy5yPm8mJihkLnMucj1vKSxkLmUucjxvJiYoZC5lLnI9byksZC5zLmM+bCYmKGQucy5jPWwpLGQuZS5jPGwmJihkLmUuYz1sKSwhZy5sZW5ndGgpe2wr'@;
put 'PXg7Y29udGludWV9dmFyIFI9e3Q6InMiLHY6Z307ci5yYXd8fCFnLnRyaW0oKS5sZW5ndGh8fCJzIj09UHx8KCJUUlVFIj09PWc/Uj17dDoiYiIsdjohMH06IkZBTFNFIj09PWc/Uj17dDoiYiIsdjohMX06aXNOYU4oSnIoZykpP2lzTmFOKGFhKGcpLmdldERhdGUoKSl8fChSPXt0OiJkIix2'@;
put 'OlhlKGcpfSxyLmNlbGxEYXRlc3x8KFI9e3Q6Im4iLHY6aXIoUi52KX0pLFIuej1yLmRhdGVORnx8cGVbMTRdKTpSPXt0OiJuIix2OkpyKGcpfSksci5kZW5zZT8oYVtvXXx8KGFbb109W10pLGFbb11bbF09Uik6YVtnZSh7cjpvLGM6bH0pXT1SLGwrPXh9fX19ZWxzZXtpZigrK28sci5zaGVl'@;
put 'dFJvd3MmJnIuc2hlZXRSb3dzPD1vKXstLW87YnJlYWt9bD0wfX1yZXR1cm4gYVsiIXJlZiJdPXdlKGQpLHYubGVuZ3RoJiYoYVsiIW1lcmdlcyJdPXYpLGF9ZnVuY3Rpb24gUm0oZSl7dmFyIHQ9ZS5yZXBsYWNlKC9bXHRcclxuXS9nLCIgIikudHJpbSgpLnJlcGxhY2UoLyArL2csIiAiKS5y'@;
put 'ZXBsYWNlKC88dGV4dDpzXC8+L2csIiAiKS5yZXBsYWNlKC88dGV4dDpzIHRleHQ6Yz0iKFxkKykiXC8+L2csZnVuY3Rpb24oYSxuKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQobiwxMCkrMSkuam9pbigiICIpfSkucmVwbGFjZSgvPHRleHQ6dGFiW14+XSpcLz4vZywiXHQiKS5yZXBsYWNlKC88'@;
put 'dGV4dDpsaW5lLWJyZWFrXC8+L2csIlxuIik7cmV0dXJuW0llKHQucmVwbGFjZSgvPFtePl0qPi9nLCIiKSldfXZhciBpYz17ZGF5OlsiZCIsImRkIl0sbW9udGg6WyJtIiwibW0iXSx5ZWFyOlsieSIsInl5Il0saG91cnM6WyJoIiwiaGgiXSxtaW51dGVzOlsibSIsIm1tIl0sc2Vjb25kczpb'@;
put 'InMiLCJzcyJdLCJhbS1wbSI6WyJBL1AiLCJBTS9QTSJdLCJkYXktb2Ytd2VlayI6WyJkZGQiLCJkZGRkIl0sZXJhOlsiZSIsImVlIl0scXVhcnRlcjpbIlxcUW0iLCdtXFwidGggcXVhcnRlciInXX07ZnVuY3Rpb24gc2MoZSx0KXt2YXIgcj10fHx7fTtudWxsIT16ZSYmbnVsbD09ci5kZW5z'@;
put 'ZSYmKHIuZGVuc2U9emUpO3ZhciBpLHMsbCxoLHUscCxhPVkwKGUpLG49W10sZj17bmFtZToiIn0sYz0iIixvPTAseD17fSxkPVtdLHY9ci5kZW5zZT9bXTp7fSxrPXt2YWx1ZToiIn0sVD0iIixnPTAsTT1bXSxJPS0xLHk9LTEsUD17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxSPTAs'@;
put 'Vj17fSxYPVtdLGI9e30sZWU9MCxsZT0wLHJlPVtdLGRlPTEsdWU9MSxGZT1bXSxjZT17TmFtZXM6W119LHhlPXt9LEs9WyIiLCIiXSxDPVtdLFU9e30sTz0iIixEPTAsaj0hMSxzZT0hMSxaPTA7Zm9yKHlhLmxhc3RJbmRleD0wLGE9YS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwi'@;
put 'IikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO3U9eWEuZXhlYyhhKTspc3dpdGNoKHVbM109dVszXS5yZXBsYWNlKC9fLiokLywiIikpe2Nhc2UidGFibGUiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjoiLyI9PT11WzFdPyh2WyIhcmVmIl09UC5lLmM+PVAu'@;
put 'cy5jJiZQLmUucj49UC5zLnI/d2UoUCk6IkExOkExIixyLnNoZWV0Um93cz4wJiZyLnNoZWV0Um93czw9UC5lLnImJih2WyIhZnVsbHJlZiJdPXZbIiFyZWYiXSxQLmUucj1yLnNoZWV0Um93cy0xLHZbIiFyZWYiXT13ZShQKSksWC5sZW5ndGgmJih2WyIhbWVyZ2VzIl09WCkscmUubGVuZ3Ro'@;
put 'JiYodlsiIXJvd3MiXT1yZSksbC5uYW1lPWwuXHU1NDBkXHU3OWYwfHxsLm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShsKSxkLnB1c2gobC5uYW1lKSx4W2wubmFtZV09dixzZT0hMSk6Ii8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJihsPW1lKHVbMF0sITEp'@;
put 'LEk9eT0tMSxQLnMucj1QLnMuYz0xZTcsUC5lLnI9UC5lLmM9MCx2PXIuZGVuc2U/W106e30sWD1bXSxyZT1bXSxzZT0hMCk7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ctZ3JvdXAiOiIvIj09PXVbMV0/LS1SOisrUjticmVhaztjYXNlInRhYmxlLXJvdyI6Y2FzZSJcdTg4NGMiOmlmKCIvIj09PXVb'@;
put 'MV0pe0krPWRlLGRlPTE7YnJlYWt9aWYoKGg9bWUodVswXSwhMSkpLlx1ODg0Y1x1NTNmNz9JPWguXHU4ODRjXHU1M2Y3LTE6LTE9PUkmJihJPTApLChkZT0raFsibnVtYmVyLXJvd3MtcmVwZWF0ZWQiXXx8MSk8MTApZm9yKFo9MDtaPGRlOysrWilSPjAmJihyZVtJK1pdPXtsZXZlbDpSfSk7'@;
put 'eT0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09dVsxXSYmKyt5LHIuc2hlZXRTdHVicyYmKHIuZGVuc2U/KHZbSV18fCh2W0ldPVtdKSx2W0ldW3ldPXt0OiJ6In0pOnZbZ2Uoe3I6SSxjOnl9KV09e3Q6InoifSksVD0iIixNPVtdO2JyZWFrO2Nhc2UidGFibGUtY2Vs'@;
put 'bCI6Y2FzZSJcdTY1NzBcdTYzNmUiOmlmKCIvIj09PXVbMF0uY2hhckF0KHVbMF0ubGVuZ3RoLTIpKSsreSxrPW1lKHVbMF0sITEpLHVlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkscD17dDoieiIsdjpudWxsfSxrLmZvcm11bGEmJjAhPXIuY2VsbEZv'@;
put 'cm11bGEmJihwLmY9TmYoSWUoay5mb3JtdWxhKSkpLCJzdHJpbmciPT0oay5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fGtbInZhbHVlLXR5cGUiXSkmJihwLnQ9InMiLHAudj1JZShrWyJzdHJpbmctdmFsdWUiXXx8IiIpLHIuZGVuc2U/KHZbSV18fCh2W0ldPVtdKSx2W0ldW3ldPXApOnZb'@;
put 'Z2Uoe3I6SSxjOnl9KV09cCkseSs9dWUtMTtlbHNlIGlmKCIvIiE9PXVbMV0pe1Q9IiIsZz0wLE09W10sdWU9MTt2YXIgUT1kZT9JK2RlLTE6STtpZigrK3k+UC5lLmMmJihQLmUuYz15KSx5PFAucy5jJiYoUC5zLmM9eSksSTxQLnMuciYmKFAucy5yPUkpLFE+UC5lLnImJihQLmUucj1RKSxD'@;
put 'PVtdLFU9e30scD17dDooaz1tZSh1WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxrWyJ2YWx1ZS10eXBlIl0sdjpudWxsfSxyLmNlbGxGb3JtdWxhKWlmKGsuZm9ybXVsYSYmKGsuZm9ybXVsYT1JZShrLmZvcm11bGEpKSxrWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5l'@;
put 'ZCJdJiZrWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdJiYoZWU9cGFyc2VJbnQoa1sibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsbGU9cGFyc2VJbnQoa1sibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAscC5GPXdlKGI9e3M6e3I6SSxjOnl9'@;
put 'LGU6e3I6SStlZS0xLGM6eStsZS0xfX0pLEZlLnB1c2goW2IscC5GXSkpLGsuZm9ybXVsYSlwLmY9TmYoay5mb3JtdWxhKTtlbHNlIGZvcihaPTA7WjxGZS5sZW5ndGg7KytaKUk+PUZlW1pdWzBdLnMuciYmSTw9RmVbWl1bMF0uZS5yJiZ5Pj1GZVtaXVswXS5zLmMmJnk8PUZlW1pdWzBdLmUu'@;
put 'YyYmKHAuRj1GZVtaXVsxXSk7c3dpdGNoKChrWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl18fGtbIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJihlZT1wYXJzZUludChrWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLGxlPXBhcnNlSW50KGtbIm51bWJlci1jb2x1bW5zLXNwYW5uZWQi'@;
put 'XSwxMCl8fDAsWC5wdXNoKGI9e3M6e3I6SSxjOnl9LGU6e3I6SStlZS0xLGM6eStsZS0xfX0pKSxrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdJiYodWU9cGFyc2VJbnQoa1sibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLHAudCl7Y2FzZSJib29sZWFuIjpwLnQ9ImIiLHAudj1X'@;
put 'ZShrWyJib29sZWFuLXZhbHVlIl0pO2JyZWFrO2Nhc2UiZmxvYXQiOmNhc2UicGVyY2VudGFnZSI6Y2FzZSJjdXJyZW5jeSI6cC50PSJuIixwLnY9cGFyc2VGbG9hdChrLnZhbHVlKTticmVhaztjYXNlImRhdGUiOnAudD0iZCIscC52PVhlKGtbImRhdGUtdmFsdWUiXSksci5jZWxsRGF0ZXN8'@;
put 'fChwLnQ9Im4iLHAudj1pcihwLnYpKSxwLno9Im0vZC95eSI7YnJlYWs7Y2FzZSJ0aW1lIjpwLnQ9Im4iLHAudj11byhrWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLHIuY2VsbERhdGVzJiYocC50PSJkIixwLnY9bzAocC52KSkscC56PSJISDpNTTpTUyI7YnJlYWs7Y2FzZSJudW1iZXIiOnAudD0i'@;
put 'biIscC52PXBhcnNlRmxvYXQoay5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1bHQ6aWYoInN0cmluZyIhPT1wLnQmJiJ0ZXh0IiE9PXAudCYmcC50KXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAiK3AudCk7cC50PSJzIixudWxsIT1rWyJzdHJp'@;
put 'bmctdmFsdWUiXSYmKFQ9SWUoa1sic3RyaW5nLXZhbHVlIl0pLE09W10pfX1lbHNle2lmKGo9ITEsInMiPT09cC50JiYocC52PVR8fCIiLE0ubGVuZ3RoJiYocC5SPU0pLGo9MD09ZykseGUuVGFyZ2V0JiYocC5sPXhlKSxDLmxlbmd0aD4wJiYocC5jPUMsQz1bXSksVCYmITEhPT1yLmNlbGxU'@;
put 'ZXh0JiYocC53PVQpLGomJihwLnQ9InoiLGRlbGV0ZSBwLnYpLCghanx8ci5zaGVldFN0dWJzKSYmIShyLnNoZWV0Um93cyYmci5zaGVldFJvd3M8PUkpKWZvcih2YXIgWT0wO1k8ZGU7KytZKXtpZih1ZT1wYXJzZUludChrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLHIu'@;
put 'ZGVuc2UpZm9yKHZbSStZXXx8KHZbSStZXT1bXSksdltJK1ldW3ldPTA9PVk/cDpNZShwKTstLXVlPjA7KXZbSStZXVt5K3VlXT1NZShwKTtlbHNlIGZvcih2W2dlKHtyOkkrWSxjOnl9KV09cDstLXVlPjA7KXZbZ2Uoe3I6SStZLGM6eSt1ZX0pXT1NZShwKTtQLmUuYzw9eSYmKFAuZS5jPXkp'@;
put 'fXkrPSh1ZT1wYXJzZUludChrWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLHVlPTAscD17fSxUPSIiLE09W119eGU9e307YnJlYWs7Y2FzZSJkb2N1bWVudCI6Y2FzZSJkb2N1bWVudC1jb250ZW50IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzY1x1NjU4N1x1'@;
put 'Njg2MyI6Y2FzZSJzcHJlYWRzaGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1hc3Rlci1zdHlsZXMiOmlmKCIvIj09PXVbMV0pe2lmKChpPW4ucG9wKCkpWzBdIT09dVszXSl0aHJvdyJCYWQgc3Rh'@;
put 'dGU6ICIraX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJm4ucHVzaChbdVszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYoIi8iPT09dVsxXSl7aWYoKGk9bi5wb3AoKSlbMF0hPT11WzNdKXRocm93IkJhZCBzdGF0ZTogIitpO1UudD1ULE0ubGVuZ3RoJiYo'@;
put 'VS5SPU0pLFUuYT1PLEMucHVzaChVKX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJm4ucHVzaChbdVszXSwhMV0pO089IiIsRD0wLFQ9IiIsZz0wLE09W107YnJlYWs7Y2FzZSJjcmVhdG9yIjoiLyI9PT11WzFdP089YS5zbGljZShELHUuaW5kZXgpOkQ9dS5pbmRleCt1'@;
put 'WzBdLmxlbmd0aDticmVhaztjYXNlIm1ldGEiOmNhc2UiXHU1MTQzXHU2NTcwXHU2MzZlIjpjYXNlInNldHRpbmdzIjpjYXNlImNvbmZpZy1pdGVtLXNldCI6Y2FzZSJjb25maWctaXRlbS1tYXAtaW5kZXhlZCI6Y2FzZSJjb25maWctaXRlbS1tYXAtZW50cnkiOmNhc2UiY29uZmlnLWl0ZW0t'@;
put 'bWFwLW5hbWVkIjpjYXNlInNoYXBlcyI6Y2FzZSJmcmFtZSI6Y2FzZSJ0ZXh0LWJveCI6Y2FzZSJpbWFnZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlcyI6Y2FzZSJsaXN0LXN0eWxlIjpjYXNlImZvcm0iOmNhc2UiZGRlLWxpbmtzIjpjYXNlImV2ZW50LWxpc3RlbmVycyI6Y2FzZSJjaGFydCI6'@;
put 'aWYoIi8iPT09dVsxXSl7aWYoKGk9bi5wb3AoKSlbMF0hPT11WzNdKXRocm93IkJhZCBzdGF0ZTogIitpfWVsc2UiLyIhPT11WzBdLmNoYXJBdCh1WzBdLmxlbmd0aC0yKSYmbi5wdXNoKFt1WzNdLCExXSk7VD0iIixnPTAsTT1bXTticmVhaztjYXNlInNjaWVudGlmaWMtbnVtYmVyIjpjYXNl'@;
put 'ImN1cnJlbmN5LXN5bWJvbCI6Y2FzZSJjdXJyZW5jeS1zdHlsZSI6Y2FzZSJzY3JpcHQiOmNhc2UibGlicmFyaWVzIjpjYXNlImF1dG9tYXRpYy1zdHlsZXMiOmNhc2UiZGVmYXVsdC1zdHlsZSI6Y2FzZSJwYWdlLWxheW91dCI6Y2FzZSJzdHlsZSI6Y2FzZSJtYXAiOmNhc2UiZm9udC1mYWNl'@;
put 'IjpjYXNlInBhcmFncmFwaC1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXByb3BlcnRpZXMiOmNhc2UidGFibGUtY29sdW1uLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcm93LXByb3BlcnRpZXMiOmNhc2UidGFibGUtY2VsbC1wcm9wZXJ0aWVzIjpjYXNlImZyYWN0aW9uIjpjYXNlImJvb2xlYW4t'@;
put 'c3R5bGUiOmNhc2UiYm9vbGVhbiI6Y2FzZSJ0ZXh0LXN0eWxlIjpjYXNlInRleHQtY29udGVudCI6Y2FzZSJ0ZXh0LXByb3BlcnRpZXMiOmNhc2UiZW1iZWRkZWQtdGV4dCI6Y2FzZSJib2R5IjpjYXNlIlx1NzUzNVx1NWI1MFx1ODg2OFx1NjgzYyI6Y2FzZSJmb3JtcyI6Y2FzZSJ0YWJsZS1j'@;
put 'b2x1bW4iOmNhc2UidGFibGUtaGVhZGVyLXJvd3MiOmNhc2UidGFibGUtcm93cyI6Y2FzZSJ0YWJsZS1jb2x1bW4tZ3JvdXAiOmNhc2UidGFibGUtaGVhZGVyLWNvbHVtbnMiOmNhc2UidGFibGUtY29sdW1ucyI6Y2FzZSJudWxsLWRhdGUiOmNhc2UiZ3JhcGhpYy1wcm9wZXJ0aWVzIjpjYXNl'@;
put 'ImNhbGN1bGF0aW9uLXNldHRpbmdzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb25zIjpjYXNlImxhYmVsLXJhbmdlIjpjYXNlImxhYmVsLXJhbmdlcyI6Y2FzZSJuYW1lZC1leHByZXNzaW9uIjpjYXNlInNvcnQiOmNhc2Uic29ydC1ieSI6Y2FzZSJzb3J0LWdyb3VwcyI6Y2FzZSJ0YWIiOmNhc2Ui'@;
put 'bGluZS1icmVhayI6Y2FzZSJzcGFuIjpjYXNlInMiOmNhc2UiZGF0ZSI6Y2FzZSJvYmplY3QiOmNhc2UidGl0bGUiOmNhc2UiXHU2ODA3XHU5ODk4IjpjYXNlImRlc2MiOmNhc2UiYmluYXJ5LWRhdGEiOmNhc2UidGFibGUtc291cmNlIjpjYXNlInNjZW5hcmlvIjpjYXNlIml0ZXJhdGlvbiI6'@;
put 'Y2FzZSJjb250ZW50LXZhbGlkYXRpb25zIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbiI6Y2FzZSJoZWxwLW1lc3NhZ2UiOmNhc2UiZXJyb3ItbWVzc2FnZSI6Y2FzZSJkYXRhYmFzZS1yYW5nZXMiOmNhc2UiZmlsdGVyIjpjYXNlImZpbHRlci1hbmQiOmNhc2UiZmlsdGVyLW9yIjpjYXNlImZp'@;
put 'bHRlci1jb25kaXRpb24iOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1idWxsZXQiOmNhc2UibGlzdC1sZXZlbC1zdHlsZS1udW1iZXIiOmNhc2UibGlzdC1sZXZlbC1wcm9wZXJ0aWVzIjpjYXNlInNlbmRlci1maXJzdG5hbWUiOmNhc2Uic2VuZGVyLWxhc3RuYW1lIjpjYXNlInNlbmRlci1pbml0'@;
put 'aWFscyI6Y2FzZSJzZW5kZXItdGl0bGUiOmNhc2Uic2VuZGVyLXBvc2l0aW9uIjpjYXNlInNlbmRlci1lbWFpbCI6Y2FzZSJzZW5kZXItcGhvbmUtcHJpdmF0ZSI6Y2FzZSJzZW5kZXItZmF4IjpjYXNlInNlbmRlci1jb21wYW55IjpjYXNlInNlbmRlci1waG9uZS13b3JrIjpjYXNlInNlbmRl'@;
put 'ci1zdHJlZXQiOmNhc2Uic2VuZGVyLWNpdHkiOmNhc2Uic2VuZGVyLXBvc3RhbC1jb2RlIjpjYXNlInNlbmRlci1jb3VudHJ5IjpjYXNlInNlbmRlci1zdGF0ZS1vci1wcm92aW5jZSI6Y2FzZSJhdXRob3ItbmFtZSI6Y2FzZSJhdXRob3ItaW5pdGlhbHMiOmNhc2UiY2hhcHRlciI6Y2FzZSJm'@;
put 'aWxlLW5hbWUiOmNhc2UidGVtcGxhdGUtbmFtZSI6Y2FzZSJzaGVldC1uYW1lIjpjYXNlImV2ZW50LWxpc3RlbmVyIjpjYXNlImluaXRpYWwtY3JlYXRvciI6Y2FzZSJjcmVhdGlvbi1kYXRlIjpjYXNlInByaW50LWRhdGUiOmNhc2UiZ2VuZXJhdG9yIjpjYXNlImRvY3VtZW50LXN0YXRpc3Rp'@;
put 'YyI6Y2FzZSJ1c2VyLWRlZmluZWQiOmNhc2UiZWRpdGluZy1kdXJhdGlvbiI6Y2FzZSJlZGl0aW5nLWN5Y2xlcyI6Y2FzZSJjb25maWctaXRlbSI6Y2FzZSJwYWdlLW51bWJlciI6Y2FzZSJwYWdlLWNvdW50IjpjYXNlInRpbWUiOmNhc2UiY2VsbC1yYW5nZS1zb3VyY2UiOmNhc2UiZGV0ZWN0'@;
put 'aXZlIjpjYXNlIm9wZXJhdGlvbiI6Y2FzZSJoaWdobGlnaHRlZC1yYW5nZSI6Y2FzZSJkYXRhLXBpbG90LXRhYmxlIjpjYXNlInNvdXJjZS1jZWxsLXJhbmdlIjpjYXNlInNvdXJjZS1zZXJ2aWNlIjpjYXNlImRhdGEtcGlsb3QtZmllbGQiOmNhc2UiZGF0YS1waWxvdC1sZXZlbCI6Y2FzZSJk'@;
put 'YXRhLXBpbG90LXN1YnRvdGFscyI6Y2FzZSJkYXRhLXBpbG90LXN1YnRvdGFsIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVycyI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlciI6Y2FzZSJkYXRhLXBpbG90LWRpc3BsYXktaW5mbyI6Y2FzZSJkYXRhLXBpbG90LXNvcnQtaW5mbyI6Y2FzZSJkYXRhLXBp'@;
put 'bG90LWxheW91dC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtZmllbGQtcmVmZXJlbmNlIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXBzIjpjYXNlImRhdGEtcGlsb3QtZ3JvdXAiOmNhc2UiZGF0YS1waWxvdC1ncm91cC1tZW1iZXIiOmNhc2UicmVjdCI6Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNscyI6'@;
put 'Y2FzZSJkZGUtY29ubmVjdGlvbi1kZWNsIjpjYXNlImRkZS1saW5rIjpjYXNlImRkZS1zb3VyY2UiOmNhc2UicHJvcGVydGllcyI6Y2FzZSJwcm9wZXJ0eSI6Y2FzZSJ0YWJsZS1wcm90ZWN0aW9uIjpjYXNlImRhdGEtcGlsb3QtZ3JhbmQtdG90YWwiOmNhc2Uib2ZmaWNlLWRvY3VtZW50LWNv'@;
put 'bW1vbi1hdHRycyI6YnJlYWs7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UicGVyY2VudGFnZS1zdHlsZSI6Y2FzZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmlmKCIvIj09PXVbMV0pe2lmKFZbZi5uYW1lXT1jLChpPW4ucG9wKCkpWzBdIT09dVszXSl0aHJvdyJCYWQgc3RhdGU6ICIr'@;
put 'aX1lbHNlIi8iIT09dVswXS5jaGFyQXQodVswXS5sZW5ndGgtMikmJihjPSIiLGY9bWUodVswXSwhMSksbi5wdXNoKFt1WzNdLCEwXSkpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImRheSI6Y2FzZSJtb250aCI6Y2FzZSJ5ZWFyIjpjYXNlImVyYSI6Y2FzZSJkYXktb2Ytd2VlayI6Y2FzZSJ3'@;
put 'ZWVrLW9mLXllYXIiOmNhc2UicXVhcnRlciI6Y2FzZSJob3VycyI6Y2FzZSJtaW51dGVzIjpjYXNlInNlY29uZHMiOmNhc2UiYW0tcG0iOnN3aXRjaChuW24ubGVuZ3RoLTFdWzBdKXtjYXNlInRpbWUtc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6cz1tZSh1WzBdLCExKSxjKz1pY1t1WzNdXVsi'@;
put 'bG9uZyI9PT1zLnN0eWxlPzE6MF19YnJlYWs7Y2FzZSJ0ZXh0IjppZigiLz4iPT09dVswXS5zbGljZSgtMikpYnJlYWs7aWYoIi8iPT09dVsxXSlzd2l0Y2gobltuLmxlbmd0aC0xXVswXSl7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjpjKz1h'@;
put 'LnNsaWNlKG8sdS5pbmRleCl9ZWxzZSBvPXUuaW5kZXgrdVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6Sz1ibigocz1tZSh1WzBdLCExKSlbImNlbGwtcmFuZ2UtYWRkcmVzcyJdKTt2YXIgRWU9e05hbWU6cy5uYW1lLFJlZjpLWzBdKyIhIitLWzFdfTtzZSYmKEVlLlNoZWV0'@;
put 'PWQubGVuZ3RoKSxjZS5OYW1lcy5wdXNoKEVlKTticmVhaztjYXNlInAiOmNhc2UiXHU2NTg3XHU2NzJjXHU0ZTMyIjppZihbIm1hc3Rlci1zdHlsZXMiXS5pbmRleE9mKG5bbi5sZW5ndGgtMV1bMF0pPi0xKWJyZWFrO2lmKCIvIiE9PXVbMV18fGsmJmtbInN0cmluZy12YWx1ZSJdKW1lKHVb'@;
put 'MF0sITEpLGc9dS5pbmRleCt1WzBdLmxlbmd0aDtlbHNle3ZhciBBPVJtKGEuc2xpY2UoZyx1LmluZGV4KSk7VD0oVC5sZW5ndGg+MD9UKyJcbiI6IiIpK0FbMF19YnJlYWs7Y2FzZSJkYXRhYmFzZS1yYW5nZSI6aWYoIi8iPT09dVsxXSlicmVhazt0cnl7eFsoSz1ibihtZSh1WzBdKVsidGFy'@;
put 'Z2V0LXJhbmdlLWFkZHJlc3MiXSkpWzBdXVsiIWF1dG9maWx0ZXIiXT17cmVmOktbMV19fWNhdGNoe31icmVhaztjYXNlImEiOmlmKCIvIiE9PXVbMV0pe2lmKCEoeGU9bWUodVswXSwhMSkpLmhyZWYpYnJlYWs7eGUuVGFyZ2V0PUllKHhlLmhyZWYpLGRlbGV0ZSB4ZS5ocmVmLCIjIj09eGUu'@;
put 'VGFyZ2V0LmNoYXJBdCgwKSYmeGUuVGFyZ2V0LmluZGV4T2YoIi4iKT4tMT8oSz1ibih4ZS5UYXJnZXQuc2xpY2UoMSkpLHhlLlRhcmdldD0iIyIrS1swXSsiISIrS1sxXSk6eGUuVGFyZ2V0Lm1hdGNoKC9eXC5cLltcXFwvXS8pJiYoeGUuVGFyZ2V0PXhlLlRhcmdldC5zbGljZSgzKSl9YnJl'@;
put 'YWs7ZGVmYXVsdDpzd2l0Y2godVsyXSl7Y2FzZSJkYzoiOmNhc2UiY2FsY2V4dDoiOmNhc2UibG9leHQ6IjpjYXNlIm9vbzoiOmNhc2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxlOiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6Ijpj'@;
put 'YXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6aWYoci5XVEYpdGhyb3cgbmV3IEVycm9yKHUpfX12YXIgUGU9e1NoZWV0czp4LFNoZWV0TmFtZXM6ZCxXb3JrYm9vazpjZX07cmV0dXJuIHIuYm9va1NoZWV0cyYmZGVsZXRlIFBlLlNoZWV0cyxQZX1mdW5jdGlvbiBjYyhlLHQpe3JldHVybiBz'@;
put 'YyhlLHQpfWZ1bmN0aW9uIEp0KGUpe3JldHVybiBuZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0LGUuYnl0ZUxlbmd0aCl9ZnVuY3Rpb24gSG4oZSl7cmV0dXJuIHR5cGVvZiBUZXh0RGVjb2RlcjwidSI/KG5ldyBUZXh0RGVjb2RlcikuZGVjb2RlKGUpOkJlKHd0KGUpKX1mdW5j'@;
put 'dGlvbiBEdChlKXt2YXIgdD1lLnJlZHVjZShmdW5jdGlvbihuLGkpe3JldHVybiBuK2kubGVuZ3RofSwwKSxyPW5ldyBVaW50OEFycmF5KHQpLGE9MDtyZXR1cm4gZS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Iuc2V0KG4sYSksYSs9bi5sZW5ndGh9KSxyfWZ1bmN0aW9uIHVjKGUpe3JldHVybiAx'@;
put 'Njg0MzAwOSooKGU9KDg1ODk5MzQ1OSYoZS09ZT4+MSYxNDMxNjU1NzY1KSkrKGU+PjImODU4OTkzNDU5KSkrKGU+PjQpJjI1MjY0NTEzNSk+Pj4yNH1mdW5jdGlvbiBLYShlLHQpe3ZhciByPXQ/dFswXTowLGE9MTI3JmVbcl07ZTppZihlW3IrK10+PTEyOCYmKGF8PSgxMjcmZVtyXSk8PDcs'@;
put 'ZVtyKytdPDEyOHx8KGF8PSgxMjcmZVtyXSk8PDE0LGVbcisrXTwxMjgpfHwoYXw9KDEyNyZlW3JdKTw8MjEsZVtyKytdPDEyOCl8fChhKz0oMTI3JmVbcl0pKk1hdGgucG93KDIsMjgpLCsrcixlW3IrK108MTI4KXx8KGErPSgxMjcmZVtyXSkqTWF0aC5wb3coMiwzNSksKytyLGVbcisrXTwx'@;
put 'MjgpfHwoYSs9KDEyNyZlW3JdKSpNYXRoLnBvdygyLDQyKSwrK3IsZVtyKytdPDEyOCkpKWJyZWFrIGU7cmV0dXJuIHQmJih0WzBdPXIpLGF9ZnVuY3Rpb24gWWUoZSl7dmFyIHQ9MCxyPTEyNyZlW3RdO2U6aWYoZVt0KytdPj0xMjgpe2lmKHJ8PSgxMjcmZVt0XSk8PDcsZVt0KytdPDEyOHx8'@;
put 'KHJ8PSgxMjcmZVt0XSk8PDE0LGVbdCsrXTwxMjgpfHwocnw9KDEyNyZlW3RdKTw8MjEsZVt0KytdPDEyOCkpYnJlYWsgZTtyfD0oMTI3JmVbdF0pPDwyOH1yZXR1cm4gcn1mdW5jdGlvbiBSZShlKXtmb3IodmFyIHQ9W10scj1bMF07clswXTxlLmxlbmd0aDspe3ZhciBmLGE9clswXSxuPUth'@;
put 'KGUsciksaT03Jm4scz0wO2lmKDA9PShuPU1hdGguZmxvb3Iobi84KSkpYnJlYWs7c3dpdGNoKGkpe2Nhc2UgMDpmb3IodmFyIGM9clswXTtlW3JbMF0rK10+PTEyODspO2Y9ZS5zbGljZShjLHJbMF0pO2JyZWFrO2Nhc2UgNTpmPWUuc2xpY2UoclswXSxyWzBdKyhzPTQpKSxyWzBdKz1zO2Jy'@;
put 'ZWFrO2Nhc2UgMTpmPWUuc2xpY2UoclswXSxyWzBdKyhzPTgpKSxyWzBdKz1zO2JyZWFrO2Nhc2UgMjpzPUthKGUsciksZj1lLnNsaWNlKHJbMF0sclswXStzKSxyWzBdKz1zO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJQQiBUeXBlICIuY29uY2F0KGksIiBmb3IgRmllbGQgIiku'@;
put 'Y29uY2F0KG4sIiBhdCBvZmZzZXQgIikuY29uY2F0KGEpKX12YXIgbz17ZGF0YTpmLHR5cGU6aX07bnVsbD09dFtuXT90W25dPVtvXTp0W25dLnB1c2gobyl9cmV0dXJuIHR9ZnVuY3Rpb24gVm4oZSx0KXtyZXR1cm4gZT8ubWFwKGZ1bmN0aW9uKHIpe3JldHVybiB0KHIuZGF0YSl9KXx8W119'@;
put 'ZnVuY3Rpb24gTW0oZSx0KXtpZigwIT1lKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBTbmFwcHkgY2h1bmsgdHlwZSAiLmNvbmNhdChlKSk7Zm9yKHZhciByPVswXSxhPUthKHQsciksbj1bXTtyWzBdPHQubGVuZ3RoOyl7dmFyIGk9MyZ0W3JbMF1dO2lmKDAhPWkpe3ZhciBjPTAsbz0w'@;
put 'O2lmKDE9PWk/KG89NCsodFtyWzBdXT4+MiY3KSxjPSgyMjQmdFtyWzBdKytdKTw8MyxjfD10W3JbMF0rK10pOihvPTErKHRbclswXSsrXT4+MiksMj09aT8oYz10W3JbMF1dfHRbclswXSsxXTw8OCxyWzBdKz0yKTooYz0odFtyWzBdXXx0W3JbMF0rMV08PDh8dFtyWzBdKzJdPDwxNnx0W3Jb'@;
put 'MF0rM108PDI0KT4+PjAsclswXSs9NCkpLG49W0R0KG4pXSwwPT1jKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBvZmZzZXQgMCIpO2lmKGM+blswXS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIG9mZnNldCBiZXlvbmQgbGVuZ3RoIik7aWYobz49Yylmb3Iobi5wdXNoKG5bMF0u'@;
put 'c2xpY2UoLWMpKSxvLT1jO28+PW5bbi5sZW5ndGgtMV0ubGVuZ3RoOyluLnB1c2gobltuLmxlbmd0aC0xXSksby09bltuLmxlbmd0aC0xXS5sZW5ndGg7bi5wdXNoKG5bMF0uc2xpY2UoLWMsLWMrbykpfWVsc2V7dmFyIHM9dFtyWzBdKytdPj4yO2lmKHM8NjApKytzO2Vsc2V7dmFyIGY9cy01'@;
put 'OTtzPXRbclswXV0sZj4xJiYoc3w9dFtyWzBdKzFdPDw4KSxmPjImJihzfD10W3JbMF0rMl08PDE2KSxmPjMmJihzfD10W3JbMF0rM108PDI0KSxzPj4+PTAscysrLHJbMF0rPWZ9bi5wdXNoKHQuc2xpY2UoclswXSxyWzBdK3MpKSxyWzBdKz1zfX12YXIgbD1EdChuKTtpZihsLmxlbmd0aCE9'@;
put 'YSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgbGVuZ3RoOiAiLmNvbmNhdChsLmxlbmd0aCwiICE9ICIpLmNvbmNhdChhKSk7cmV0dXJuIGx9ZnVuY3Rpb24gSG0oZSx0LHIpe3N3aXRjaChlWzBdKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uIFVtKGUs'@;
put 'dCxyLGEpe3ZhciBoLG49SnQoZSksaT1uLmdldFVpbnQzMig0LCEwKSxzPShhPjE/MTI6OCkrNCp1YyhpJihhPjE/MzQ3MDozOTgpKSxmPS0xLGM9LTEsbz1OYU4sbD1uZXcgRGF0ZSgyMDAxLDAsMSk7c3dpdGNoKDUxMiZpJiYoZj1uLmdldFVpbnQzMihzLCEwKSxzKz00KSxzKz00KnVjKGkm'@;
put 'KGE+MT8xMjI4ODo0MDk2KSksMTYmaSYmKGM9bi5nZXRVaW50MzIocywhMCkscys9NCksMzImaSYmKG89bi5nZXRGbG9hdDY0KHMsITApLHMrPTgpLDY0JmkmJihsLnNldFRpbWUobC5nZXRUaW1lKCkrMWUzKm4uZ2V0RmxvYXQ2NChzLCEwKSkscys9OCksZVsyXSl7Y2FzZSAwOmJyZWFrO2Nh'@;
put 'c2UgMjpoPXt0OiJuIix2Om99O2JyZWFrO2Nhc2UgMzpoPXt0OiJzIix2OnRbY119O2JyZWFrO2Nhc2UgNTpoPXt0OiJkIix2Omx9O2JyZWFrO2Nhc2UgNjpoPXt0OiJiIix2Om8+MH07YnJlYWs7Y2FzZSA3Omg9e3Q6Im4iLHY6by84NjQwMH07YnJlYWs7Y2FzZSA4Omg9e3Q6ImUiLHY6MH07'@;
put 'YnJlYWs7Y2FzZSA5OmlmKGY+LTEpaD17dDoicyIsdjpyW2ZdfTtlbHNlIGlmKGM+LTEpaD17dDoicyIsdjp0W2NdfTtlbHNle2lmKGlzTmFOKG8pKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGUuc2xpY2UoMCw0KSkpO2g9e3Q6Im4iLHY6b319YnJl'@;
put 'YWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNlbGwgdHlwZSAiLmNvbmNhdChlLnNsaWNlKDAsNCkpKX1yZXR1cm4gaH0oZSx0LHIsZVswXSk7Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBXbShlLHQscil7dmFyIGgsYT1KdChlKSxuPWEuZ2V0VWludDMyKDgsITApLGk9'@;
put 'MTIscz0tMSxmPS0xLGM9TmFOLG89TmFOLGw9bmV3IERhdGUoMjAwMSwwLDEpO3N3aXRjaCgxJm4mJihjPWZ1bmN0aW9uIExtKGUsdCl7Zm9yKHZhciByPSgxMjcmZVt0KzE1XSk8PDd8ZVt0KzE0XT4+MSxhPTEmZVt0KzE0XSxuPXQrMTM7bj49dDstLW4pYT0yNTYqYStlW25dO3JldHVybigx'@;
put 'MjgmZVt0KzE1XT8tYTphKSpNYXRoLnBvdygxMCxyLTYxNzYpfShlLGkpLGkrPTE2KSwyJm4mJihvPWEuZ2V0RmxvYXQ2NChpLCEwKSxpKz04KSw0Jm4mJihsLnNldFRpbWUobC5nZXRUaW1lKCkrMWUzKmEuZ2V0RmxvYXQ2NChpLCEwKSksaSs9OCksOCZuJiYoZj1hLmdldFVpbnQzMihpLCEw'@;
put 'KSxpKz00KSwxNiZuJiYocz1hLmdldFVpbnQzMihpLCEwKSxpKz00KSxlWzFdKXtjYXNlIDA6YnJlYWs7Y2FzZSAyOmNhc2UgMTA6aD17dDoibiIsdjpjfTticmVhaztjYXNlIDM6aD17dDoicyIsdjp0W2ZdfTticmVhaztjYXNlIDU6aD17dDoiZCIsdjpsfTticmVhaztjYXNlIDY6aD17dDoi'@;
put 'YiIsdjpvPjB9O2JyZWFrO2Nhc2UgNzpoPXt0OiJuIix2Om8vODY0MDB9O2JyZWFrO2Nhc2UgODpoPXt0OiJlIix2OjB9O2JyZWFrO2Nhc2UgOTppZighKHM+LTEpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGVbMV0sIiA6ICIpLmNvbmNhdCgzMSZu'@;
put 'LCIgOiAiKS5jb25jYXQoZS5zbGljZSgwLDQpKSk7aD17dDoicyIsdjpyW3NdfTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2VsbCB0eXBlICIuY29uY2F0KGVbMV0sIiA6ICIpLmNvbmNhdCgzMSZuLCIgOiAiKS5jb25jYXQoZS5zbGljZSgwLDQpKSl9cmV0'@;
put 'dXJuIGh9KGUsdCxyKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgcGF5bG9hZCB2ZXJzaW9uICIuY29uY2F0KGVbMF0pKX19ZnVuY3Rpb24gRXIoZSl7cmV0dXJuIEthKFJlKGUpWzFdWzBdLmRhdGEpfWZ1bmN0aW9uIGhjKGUsdCl7dmFyIHI9UmUodC5kYXRhKSxhPVll'@;
put 'KHJbMV1bMF0uZGF0YSksaT1bXTtyZXR1cm4oclszXXx8W10pLmZvckVhY2goZnVuY3Rpb24ocyl7dmFyIGY9UmUocy5kYXRhKSxjPVllKGZbMV1bMF0uZGF0YSk+Pj4wO3N3aXRjaChhKXtjYXNlIDE6aVtjXT1IbihmWzNdWzBdLmRhdGEpO2JyZWFrO2Nhc2UgODp2YXIgbD1SZShlW0VyKGZb'@;
put 'OV1bMF0uZGF0YSldWzBdLmRhdGEpLGg9ZVtFcihsWzFdWzBdLmRhdGEpXVswXSx4PVllKGgubWV0YVsxXVswXS5kYXRhKTtpZigyMDAxIT14KXRocm93IG5ldyBFcnJvcigiMjAwMCB1bmV4cGVjdGVkIHJlZmVyZW5jZSB0byAiLmNvbmNhdCh4KSk7dmFyIGQ9UmUoaC5kYXRhKTtpW2NdPWRb'@;
put 'M10ubWFwKGZ1bmN0aW9uKHYpe3JldHVybiBIbih2LmRhdGEpfSkuam9pbigiIil9fSksaX1mdW5jdGlvbiB6bShlLHQpe3ZhciBhPXsiIXJlZiI6IkExIn0sbj1lW0VyKFJlKHQuZGF0YSlbMl1bMF0uZGF0YSldLGk9WWUoblswXS5tZXRhWzFdWzBdLmRhdGEpO2lmKDYwMDEhPWkpdGhyb3cg'@;
put 'bmV3IEVycm9yKCI2MDAwIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRvICIuY29uY2F0KGkpKTtyZXR1cm4gZnVuY3Rpb24gR20oZSx0LHIpe3ZhciBhLG49UmUodC5kYXRhKSxpPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07aWYoaS5lLnI9KFllKG5bNl1bMF0uZGF0YSk+Pj4wKS0xLGkuZS5y'@;
put 'PDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHJvdyB2YXJpbnQgIi5jb25jYXQobls2XVswXS5kYXRhKSk7aWYoaS5lLmM9KFllKG5bN11bMF0uZGF0YSk+Pj4wKS0xLGkuZS5jPDApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvbCB2YXJpbnQgIi5jb25jYXQobls3XVswXS5kYXRhKSk7'@;
put 'clsiIXJlZiJdPXdlKGkpO3ZhciBzPVJlKG5bNF1bMF0uZGF0YSksZj1oYyhlLGVbRXIoc1s0XVswXS5kYXRhKV1bMF0pLGM9bnVsbCE9KGE9c1sxN10pJiZhWzBdP2hjKGUsZVtFcihzWzE3XVswXS5kYXRhKV1bMF0pOltdLG89UmUoc1szXVswXS5kYXRhKSxsPTA7b1sxXS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKGgpe3ZhciB4PVJlKGguZGF0YSksZD1lW0VyKHhbMl1bMF0uZGF0YSldWzBdLHY9WWUoZC5tZXRhWzFdWzBdLmRhdGEpO2lmKDYwMDIhPXYpdGhyb3cgbmV3IEVycm9yKCI2MDAxIHVuZXhwZWN0ZWQgcmVmZXJlbmNlIHRvICIuY29uY2F0KHYpKTt2YXIgdT1mdW5jdGlvbiBYbShl'@;
put 'LHQpe3ZhciByLGE9UmUodC5kYXRhKSxuPW51bGwhPShyPWE/Lls3XSkmJnJbMF0/WWUoYVs3XVswXS5kYXRhKT4+PjA+MD8xOjA6LTEsaT1WbihhWzVdLGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbiBWbShlLHQpe3ZhciByLGEsbixpLHMsZixjLG8sbCxoLHgsZCx2LHUsTixNLHA9UmUo'@;
put 'ZSksaz1ZZShwWzFdWzBdLmRhdGEpPj4+MCxUPVllKHBbMl1bMF0uZGF0YSk+Pj4wLGc9KG51bGw9PShhPW51bGw9PShyPXBbOF0pP3ZvaWQgMDpyWzBdKT92b2lkIDA6YS5kYXRhKSYmWWUocFs4XVswXS5kYXRhKT4wfHwhMTtpZihudWxsIT0oaT1udWxsPT0obj1wWzddKT92b2lkIDA6blsw'@;
put 'XSkmJmkuZGF0YSYmMCE9dClOPW51bGw9PShmPW51bGw9PShzPXBbN10pP3ZvaWQgMDpzWzBdKT92b2lkIDA6Zi5kYXRhLE09bnVsbD09KG89bnVsbD09KGM9cFs2XSk/dm9pZCAwOmNbMF0pP3ZvaWQgMDpvLmRhdGE7ZWxzZXtpZihudWxsPT0oaD1udWxsPT0obD1wWzRdKT92b2lkIDA6bFsw'@;
put 'XSl8fCFoLmRhdGF8fDE9PXQpdGhyb3ciTlVNQkVSUyBUaWxlIG1pc3NpbmcgIi5jb25jYXQodCwiIGNlbGwgc3RvcmFnZSIpO049bnVsbD09KGQ9bnVsbD09KHg9cFs0XSk/dm9pZCAwOnhbMF0pP3ZvaWQgMDpkLmRhdGEsTT1udWxsPT0odT1udWxsPT0odj1wWzNdKT92b2lkIDA6dlswXSk/'@;
put 'dm9pZCAwOnUuZGF0YX1mb3IodmFyIEk9Zz80OjEseT1KdChOKSxQPVtdLFI9MDtSPE4ubGVuZ3RoLzI7KytSKXt2YXIgVj15LmdldFVpbnQxNigyKlIsITApO1Y8NjU1MzUmJlAucHVzaChbUixWXSl9aWYoUC5sZW5ndGghPVQpdGhyb3ciRXhwZWN0ZWQgIi5jb25jYXQoVCwiIGNlbGxzLCBm'@;
put 'b3VuZCAiKS5jb25jYXQoUC5sZW5ndGgpO3ZhciBYPVtdO2ZvcihSPTA7UjxQLmxlbmd0aC0xOysrUilYW1BbUl1bMF1dPU0uc3ViYXJyYXkoUFtSXVsxXSpJLFBbUisxXVsxXSpJKTtyZXR1cm4gUC5sZW5ndGg+PTEmJihYW1BbUC5sZW5ndGgtMV1bMF1dPU0uc3ViYXJyYXkoUFtQLmxlbmd0'@;
put 'aC0xXVsxXSpJKSkse1I6ayxjZWxsczpYfX0ocyxuKX0pO3JldHVybntucm93czpZZShhWzRdWzBdLmRhdGEpPj4+MCxkYXRhOmkucmVkdWNlKGZ1bmN0aW9uKHMsZil7cmV0dXJuIHNbZi5SXXx8KHNbZi5SXT1bXSksZi5jZWxscy5mb3JFYWNoKGZ1bmN0aW9uKGMsbyl7aWYoc1tmLlJdW29d'@;
put 'KXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIGNlbGwgcj0iLmNvbmNhdChmLlIsIiBjPSIpLmNvbmNhdChvKSk7c1tmLlJdW29dPWN9KSxzfSxbXSl9fSgwLGQpO3UuZGF0YS5mb3JFYWNoKGZ1bmN0aW9uKHAsayl7cC5mb3JFYWNoKGZ1bmN0aW9uKFQsZyl7dmFyIE49Z2Uoe3I6bCtrLGM6'@;
put 'Z30pLE09SG0oVCxmLGMpO00mJihyW05dPU0pfSl9KSxsKz11Lm5yb3dzfSl9KGUsblswXSxhKSxhfWZ1bmN0aW9uIHpuKGUpe3ZhciB0LHIsYSxuLGk9e30scz1bXTtpZihlLkZ1bGxQYXRocy5mb3JFYWNoKGZ1bmN0aW9uKGMpe2lmKGMubWF0Y2goL1wuaXdwdjIvKSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIlVuc3VwcG9ydGVkIHBhc3N3b3JkIHByb3RlY3Rpb24iKX0pLGUuRmlsZUluZGV4LmZvckVhY2goZnVuY3Rpb24oYyl7aWYoYy5uYW1lLm1hdGNoKC9cLml3YSQvKSl7dmFyIG8sbDt0cnl7bz1mdW5jdGlvbiB6cihlKXtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KXt2YXIgYT1l'@;
put 'W3IrK10sbj1lW3JdfGVbcisxXTw8OHxlW3IrMl08PDE2O3QucHVzaChNbShhLGUuc2xpY2Uocis9MyxyK24pKSkscis9bn1pZihyIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJkYXRhIGlzIG5vdCBhIHZhbGlkIGZyYW1lZCBzdHJlYW0hIik7cmV0dXJuIER0KHQpfShjLmNvbnRlbnQp'@;
put 'fWNhdGNoKGgpe3JldHVybiBjb25zb2xlLmxvZygiPz8gIitjLmNvbnRlbnQubGVuZ3RoKyIgIisoaC5tZXNzYWdlfHxoKSl9dHJ5e2w9ZnVuY3Rpb24gR3IoZSl7Zm9yKHZhciB0LHI9W10sYT1bMF07YVswXTxlLmxlbmd0aDspe3ZhciBuPUthKGUsYSksaT1SZShlLnNsaWNlKGFbMF0sYVsw'@;
put 'XStuKSk7YVswXSs9bjt2YXIgcz17aWQ6WWUoaVsxXVswXS5kYXRhKSxtZXNzYWdlczpbXX07aVsyXS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3ZhciBjPVJlKGYuZGF0YSksbz1ZZShjWzNdWzBdLmRhdGEpO3MubWVzc2FnZXMucHVzaCh7bWV0YTpjLGRhdGE6ZS5zbGljZShhWzBdLGFbMF0rbyl9'@;
put 'KSxhWzBdKz1vfSksbnVsbCE9KHQ9aVszXSkmJnRbMF0mJihzLm1lcmdlPVllKGlbM11bMF0uZGF0YSk+Pj4wPjApLHIucHVzaChzKX1yZXR1cm4gcn0obyl9Y2F0Y2goaCl7cmV0dXJuIGNvbnNvbGUubG9nKCIjIyAiKyhoLm1lc3NhZ2V8fGgpKX1sLmZvckVhY2goZnVuY3Rpb24oaCl7aVto'@;
put 'LmlkXT1oLm1lc3NhZ2VzLHMucHVzaChoLmlkKX0pfX0pLCFzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaGFzIG5vIG1lc3NhZ2VzIik7dmFyIGY9KG51bGw9PShuPW51bGw9PShhPW51bGw9PShyPW51bGw9PSh0PWk/LlsxXSk/dm9pZCAwOnRbMF0pP3ZvaWQgMDpyLm1ldGEpP3Zv'@;
put 'aWQgMDphWzFdKT92b2lkIDA6blswXS5kYXRhKSYmMT09WWUoaVsxXVswXS5tZXRhWzFdWzBdLmRhdGEpJiZpWzFdWzBdO2lmKGZ8fHMuZm9yRWFjaChmdW5jdGlvbihjKXtpW2NdLmZvckVhY2goZnVuY3Rpb24obyl7aWYoMT09WWUoby5tZXRhWzFdWzBdLmRhdGEpPj4+MCl7aWYoZil0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkRvY3VtZW50IGhhcyBtdWx0aXBsZSByb290cyIpO2Y9b319KX0pLCFmKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgRG9jdW1lbnQgcm9vdCIpO3JldHVybiBmdW5jdGlvbiBqbShlLHQpe3ZhciByPXtTaGVldE5hbWVzOltdLFNoZWV0czp7fX07aWYoVm4oUmUo'@;
put 'dC5kYXRhKVsxXSxFcikuZm9yRWFjaChmdW5jdGlvbihpKXtlW2ldLmZvckVhY2goZnVuY3Rpb24ocyl7aWYoMj09WWUocy5tZXRhWzFdWzBdLmRhdGEpKXt2YXIgYz1mdW5jdGlvbiAkbShlLHQpe3ZhciByLGE9UmUodC5kYXRhKSxuPXtuYW1lOm51bGwhPShyPWFbMV0pJiZyWzBdP0huKGFb'@;
put 'MV1bMF0uZGF0YSk6IiIsc2hlZXRzOltdfTtyZXR1cm4gVm4oYVsyXSxFcikuZm9yRWFjaChmdW5jdGlvbihzKXtlW3NdLmZvckVhY2goZnVuY3Rpb24oZil7NmUzPT1ZZShmLm1ldGFbMV1bMF0uZGF0YSkmJm4uc2hlZXRzLnB1c2goem0oZSxmKSl9KX0pLG59KGUscyk7Yy5zaGVldHMuZm9y'@;
put 'RWFjaChmdW5jdGlvbihvLGwpe2VpKHIsbywwPT1sP2MubmFtZTpjLm5hbWUrIl8iK2wsITApfSl9fSl9KSwwPT1yLlNoZWV0TmFtZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRW1wdHkgTlVNQkVSUyBmaWxlIik7cmV0dXJuIHJ9KGksZil9ZnVuY3Rpb24gJG4oZSl7IWZ1bmN0aW9uIHhj'@;
put 'KGUpe3JldHVybiBmdW5jdGlvbihyKXtmb3IodmFyIGE9MDthIT1lLmxlbmd0aDsrK2Epe3ZhciBuPWVbYV07dm9pZCAwPT09cltuWzBdXSYmKHJbblswXV09blsxXSksIm4iPT09blsyXSYmKHJbblswXV09TnVtYmVyKHJbblswXV0pKX19fShbWyJjZWxsTkYiLCExXSxbImNlbGxIVE1MIiwh'@;
put 'MF0sWyJjZWxsRm9ybXVsYSIsITBdLFsiY2VsbFN0eWxlcyIsITFdLFsiY2VsbFRleHQiLCEwXSxbImNlbGxEYXRlcyIsITFdLFsic2hlZXRTdHVicyIsITFdLFsic2hlZXRSb3dzIiwwLCJuIl0sWyJib29rRGVwcyIsITFdLFsiYm9va1NoZWV0cyIsITFdLFsiYm9va1Byb3BzIiwhMV0sWyJi'@;
put 'b29rRmlsZXMiLCExXSxbImJvb2tWQkEiLCExXSxbInBhc3N3b3JkIiwiIl0sWyJXVEYiLCExXV0pKGUpfWZ1bmN0aW9uIEptKGUpe3JldHVybiBrZS5XUy5pbmRleE9mKGUpPi0xPyJzaGVldCI6a2UuQ1MmJmU9PWtlLkNTPyJjaGFydCI6a2UuRFMmJmU9PWtlLkRTPyJkaWFsb2ciOmtlLk1T'@;
put 'JiZlPT1rZS5NUz8ibWFjcm8iOmUmJmUubGVuZ3RoP2U6InNoZWV0In1mdW5jdGlvbiBabShlLHQscixhLG4saSxzLGYsYyxvLGwsaCl7dHJ5e2lbYV09SWEoTnIoZSxyLCEwKSx0KTt2YXIgZCx4PVFlKGUsdCk7c3dpdGNoKGYpe2Nhc2Uic2hlZXQiOmQ9U3AoeCx0LG4sYyxpW2FdLG8sbCxo'@;
put 'KTticmVhaztjYXNlImNoYXJ0IjppZighKGQ9ZnVuY3Rpb24gRnAoZSx0LHIsYSxuLGkscyxmKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBycChlLHQscixhLG4pe2lmKCFlKXJldHVybiBlO2F8fChhPXsiIWlkIjp7fX0pO3ZhciBpPXsiIXR5cGUiOiJjaGFydCIsIiFk'@;
put 'cmF3ZWwiOm51bGwsIiFyZWwiOiIifSxzPVtdLGY9ITE7cmV0dXJuIGh0KGUsZnVuY3Rpb24obyxsLGgpe3N3aXRjaChoKXtjYXNlIDU1MDppWyIhcmVsIl09bzticmVhaztjYXNlIDY1MTpuLlNoZWV0c1tyXXx8KG4uU2hlZXRzW3JdPXt9KSxvLm5hbWUmJihuLlNoZWV0c1tyXS5Db2RlTmFt'@;
put 'ZT1vLm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNhc2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1OmY9ITA7YnJlYWs7Y2FzZSAzNjpmPSExO2JyZWFrO2Nhc2UgMzc6cy5wdXNoKGgpO2JyZWFrO2Nhc2UgMzg6'@;
put 'cy5wb3AoKTticmVhaztkZWZhdWx0OmlmKGwuVD4wKXMucHVzaChoKTtlbHNlIGlmKGwuVDwwKXMucG9wKCk7ZWxzZSBpZighZnx8dC5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIraC50b1N0cmluZygxNikpfX0sdCksYVsiIWlkIl1baVsiIXJlbCJdXSYmKGlb'@;
put 'IiFkcmF3ZWwiXT1hWyIhaWQiXVtpWyIhcmVsIl1dKSxpfShlLGEscixuLGkpOmZ1bmN0aW9uIFoyKGUsdCxyLGEsbil7aWYoIWUpcmV0dXJuIGU7YXx8KGE9eyIhaWQiOnt9fSk7dmFyIHMsaT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sZj1lLm1hdGNoKFBm'@;
put 'KTtyZXR1cm4gZiYmTG4oZlswXSwwLG4sciksKHM9ZS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihpWyIhcmVsIl09c1sxXSksYVsiIWlkIl1baVsiIXJlbCJdXSYmKGlbIiFkcmF3ZWwiXT1hWyIhaWQiXVtpWyIhcmVsIl1dKSxpfShlLDAscixuLGkpfSh4LHQsbixjLGlbYV0s'@;
put 'bykpfHwhZFsiIWRyYXdlbCJdKWJyZWFrO3ZhciB2PVNhKGRbIiFkcmF3ZWwiXS5UYXJnZXQsdCksdT1PYSh2KSxwPWZ1bmN0aW9uIGh4KGUsdCl7aWYoIWUpcmV0dXJuIj8/Ijt2YXIgcj0oZS5tYXRjaCgvPGM6Y2hhcnQgW14+XSpyOmlkPSIoW14iXSopIi8pfHxbIiIsIiJdKVsxXTtyZXR1'@;
put 'cm4gdFsiIWlkIl1bcl0uVGFyZ2V0fShOcihlLHYsITApLElhKE5yKGUsdSwhMCksdikpLGs9U2EocCx2KSxUPU9hKGspO2Q9ZnVuY3Rpb24gcTIoZSx0LHIsYSxuLGkpe3ZhciBzPWl8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCFlKXJldHVybiBpO3ZhciBmPTAsYz0wLG89IkEiLGw9e3M6e3I6'@;
put 'MmU2LGM6MmU2fSxlOntyOjAsYzowfX07cmV0dXJuKGUubWF0Y2goLzxjOm51bUNhY2hlPltcc1xTXSo/PFwvYzpudW1DYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihoKXt2YXIgeD1mdW5jdGlvbiBKMihlKXt2YXIgYSx0PVtdLHI9ZS5tYXRjaCgvXjxjOm51bUNhY2hlPi8pOyhl'@;
put 'Lm1hdGNoKC88YzpwdCBpZHg9IihcZCopIj4oLio/KTxcL2M6cHQ+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oaSl7dmFyIHM9aS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqPykiPjxjOnY+KC4qKTxcL2M6dj48XC9jOnB0Pi8pO3MmJih0WytzWzFdXT1yPytzWzJdOnNbMl0pfSk7dmFyIG49'@;
put 'SWUoKGUubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oZS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihpKXthPWkucmVwbGFjZSgvPC4qPz4vZywiIil9'@;
put 'KSxbdCxuLGFdfShoKTtsLnMucj1sLnMuYz0wLGwuZS5jPWYsbz1IZShmKSx4WzBdLmZvckVhY2goZnVuY3Rpb24oZCx2KXtzW28rS2UodildPXt0OiJuIix2OmQsejp4WzFdfSxjPXZ9KSxsLmUucjxjJiYobC5lLnI9YyksKytmfSksZj4wJiYoc1siIXJlZiJdPXdlKGwpKSxzfShOcihlLGss'@;
put 'ITApLDAsMCxJYShOcihlLFQsITApLGspLDAsZCk7YnJlYWs7Y2FzZSJtYWNybyI6ZD1mdW5jdGlvbiB5cChlLHQscixhLG4saSxzLGYpe3JldHVybiB0LnNsaWNlKC00KSx7IiF0eXBlIjoibWFjcm8ifX0oMCx0KTticmVhaztjYXNlImRpYWxvZyI6ZD1mdW5jdGlvbiBBcChlLHQscixhLG4s'@;
put 'aSxzLGYpe3JldHVybiB0LnNsaWNlKC00KSx7IiF0eXBlIjoiZGlhbG9nIn19KDAsdCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIrZil9c1thXT1kO3ZhciBnPVtdO2kmJmlbYV0mJiRlKGlbYV0pLmZvckVhY2goZnVuY3Rpb24oTil7'@;
put 'dmFyIE09IiI7aWYoaVthXVtOXS5UeXBlPT1rZS5DTU5UKXtNPVNhKGlbYV1bTl0uVGFyZ2V0LHQpO3ZhciBJPWZ1bmN0aW9uIElwKGUsdCxyKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBFeChlLHQpe3ZhciByPVtdLGE9W10sbj17fSxpPSExO3JldHVybiBodChlLGZ1'@;
put 'bmN0aW9uKGYsYyxvKXtzd2l0Y2gobyl7Y2FzZSA2MzI6YS5wdXNoKGYpO2JyZWFrO2Nhc2UgNjM1Om49ZjticmVhaztjYXNlIDYzNzpuLnQ9Zi50LG4uaD1mLmgsbi5yPWYucjticmVhaztjYXNlIDYzNjppZihuLmF1dGhvcj1hW24uaWF1dGhvcl0sZGVsZXRlIG4uaWF1dGhvcix0LnNoZWV0'@;
put 'Um93cyYmbi5yZngmJnQuc2hlZXRSb3dzPD1uLnJmeC5yKWJyZWFrO24udHx8KG4udD0iIiksZGVsZXRlIG4ucmZ4LHIucHVzaChuKTticmVhaztjYXNlIDMwNzI6Y2FzZSAzNzpjYXNlIDM4OmJyZWFrO2Nhc2UgMzU6aT0hMDticmVhaztjYXNlIDM2Omk9ITE7YnJlYWs7ZGVmYXVsdDppZigh'@;
put 'Yy5UJiYoIWl8fHQuV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitvLnRvU3RyaW5nKDE2KSl9fSkscn0oZSxyKTpmdW5jdGlvbiB4eChlLHQpe2lmKGUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIHI9W10sYT1bXSxuPWUu'@;
put 'bWF0Y2goLzwoPzpcdys6KT9hdXRob3JzPihbXHNcU10qKTxcLyg/Olx3KzopP2F1dGhvcnM+Lyk7biYmblsxXSYmblsxXS5zcGxpdCgvPFwvXHcqOj9hdXRob3I+LykuZm9yRWFjaChmdW5jdGlvbihzKXtpZigiIiE9PXMmJiIiIT09cy50cmltKCkpe3ZhciBmPXMubWF0Y2goLzwoPzpcdys6'@;
put 'KT9hdXRob3JbXj5dKj4oLiopLyk7ZiYmci5wdXNoKGZbMV0pfX0pO3ZhciBpPWUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9jb21tZW50TGlzdD4vKTtyZXR1cm4gaSYmaVsxXSYmaVsxXS5zcGxpdCgvPFwvXHcqOj9jb21tZW50Pi8pLmZvckVh'@;
put 'Y2goZnVuY3Rpb24ocyl7aWYoIiIhPT1zJiYiIiE9PXMudHJpbSgpKXt2YXIgZj1zLm1hdGNoKC88KD86XHcrOik/Y29tbWVudFtePl0qPi8pO2lmKGYpe3ZhciBjPW1lKGZbMF0pLG89e2F1dGhvcjpjLmF1dGhvcklkJiZyW2MuYXV0aG9ySWRdfHwic2hlZXRqc2dob3N0IixyZWY6Yy5yZWYs'@;
put 'Z3VpZDpjLmd1aWR9LGw9R2UoYy5yZWYpO2lmKCEodC5zaGVldFJvd3MmJnQuc2hlZXRSb3dzPD1sLnIpKXt2YXIgaD1zLm1hdGNoKC88KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90ZXh0Pi8pLHg9ISFoJiYhIWhbMV0mJlNuKGhbMV0pfHx7cjoiIix0OiIiLGg6IiJ9O28u'@;
put 'cj14LnIsIjx0PjwvdD4iPT14LnImJih4LnQ9eC5oPSIiKSxvLnQ9KHgudHx8IiIpLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLHQuY2VsbEhUTUwmJihvLmg9eC5oKSxhLnB1c2gobyl9fX19KSxhfShlLHIpfShRZShlLE0sITApLE0sYyk7aWYoIUl8fCFJLmxl'@;
put 'bmd0aClyZXR1cm47Z2YoZCxJLCExKX1pW2FdW05dLlR5cGU9PWtlLlRDTU5UJiYoTT1TYShpW2FdW05dLlRhcmdldCx0KSxnPWcuY29uY2F0KGZ1bmN0aW9uIGR4KGUsdCl7dmFyIHI9W10sYT0hMSxuPXt9LGk9MDtyZXR1cm4gZS5yZXBsYWNlKHZyLGZ1bmN0aW9uKGYsYyl7dmFyIG89bWUo'@;
put 'Zik7c3dpdGNoKHJ0KG9bMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxUaHJlYWRlZENvbW1lbnRzIjpjYXNlIjwvVGhyZWFkZWRDb21tZW50cz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpicmVhaztjYXNlIjx0aHJlYWRlZENv'@;
put 'bW1lbnQiOm49e2F1dGhvcjpvLnBlcnNvbklkLGd1aWQ6by5pZCxyZWY6by5yZWYsVDoxfTticmVhaztjYXNlIjwvdGhyZWFkZWRDb21tZW50PiI6bnVsbCE9bi50JiZyLnB1c2gobik7YnJlYWs7Y2FzZSI8dGV4dD4iOmNhc2UiPHRleHQiOmk9YytmLmxlbmd0aDticmVhaztjYXNlIjwvdGV4'@;
put 'dD4iOm4udD1lLnNsaWNlKGksYykucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIik7YnJlYWs7Y2FzZSI8bWVudGlvbnMiOmNhc2UiPG1lbnRpb25zPiI6Y2FzZSI8ZXh0IjphPSEwO2JyZWFrO2Nhc2UiPC9tZW50aW9ucz4iOmNhc2UiPC9leHQ+IjphPSExO2JyZWFr'@;
put 'O2RlZmF1bHQ6aWYoIWEmJnQuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrb1swXSsiIGluIHRocmVhZGVkIGNvbW1lbnRzIil9cmV0dXJuIGZ9KSxyfShRZShlLE0sITApLGMpKSl9KSxnJiZnLmxlbmd0aCYmZ2YoZCxnLCEwLGMucGVvcGxlfHxbXSl9Y2F0Y2goTil7aWYo'@;
put 'Yy5XVEYpdGhyb3cgTn19ZnVuY3Rpb24gJHIoZSl7cmV0dXJuIi8iPT1lLmNoYXJBdCgwKT9lLnNsaWNlKDEpOmV9ZnVuY3Rpb24gUW0oZSx0KXtpZih0YSgpLCRuKHQ9dHx8e30pLFdyKGUsIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpfHxXcihlLCJvYmplY3RkYXRhLnhtbCIpKXJldHVybiBm'@;
put 'dW5jdGlvbiBmYyhlLHQpe3Q9dHx8e30sV3IoZSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIikmJmZ1bmN0aW9uIG9sKGUsdCl7Zm9yKHZhciBhLG4scj1ZMChlKTthPXlhLmV4ZWMocik7KXN3aXRjaChhWzNdKXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnkiOmlmKCIvIj09'@;
put 'KG49bWUoYVswXSwhMSkpLnBhdGgmJm4udHlwZSE9PWNsKXRocm93IG5ldyBFcnJvcigiVGhpcyBPcGVuRG9jdW1lbnQgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTticmVhaztjYXNlImVuY3J5cHRpb24tZGF0YSI6Y2FzZSJhbGdvcml0aG0iOmNhc2Uic3RhcnQta2V5LWdlbmVyYXRpb24iOmNh'@;
put 'c2Uia2V5LWRlcml2YXRpb24iOnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgT0RTIEVuY3J5cHRpb24iKTtkZWZhdWx0OmlmKHQmJnQuV1RGKXRocm93IGF9fShRZShlLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKSx0KTt2YXIgcj1OcihlLCJjb250ZW50LnhtbCIpO2lmKCFyKXRocm93'@;
put 'IG5ldyBFcnJvcigiTWlzc2luZyBjb250ZW50LnhtbCBpbiBPRFMgLyBVT0YgZmlsZSIpO3ZhciBhPXNjKEJlKHIpLHQpO3JldHVybiBXcihlLCJtZXRhLnhtbCIpJiYoYS5Qcm9wcz1tcyhRZShlLCJtZXRhLnhtbCIpKSksYX0oZSx0KTtpZihXcihlLCJJbmRleC9Eb2N1bWVudC5pd2EiKSl7'@;
put 'aWYodHlwZW9mIFVpbnQ4QXJyYXk+InUiKXRocm93IG5ldyBFcnJvcigiTlVNQkVSUyBmaWxlIHBhcnNpbmcgcmVxdWlyZXMgVWludDhBcnJheSBzdXBwb3J0Iik7aWYoZS5GaWxlSW5kZXgpcmV0dXJuIHpuKGUpO3ZhciByPXZlLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gSWkoZSkuZm9yRWFj'@;
put 'aChmdW5jdGlvbihsZSl7IWZ1bmN0aW9uIFRlKGUsdCxyKXtpZihlLkZ1bGxQYXRocyl7dmFyIGE7aWYoInN0cmluZyI9PXR5cGVvZiByKXJldHVybiBhPVNlP290KHIpOmZ1bmN0aW9uIE5jKGUpe2Zvcih2YXIgdD1bXSxyPTAsYT1lLmxlbmd0aCsyNTAsbj1fdChlLmxlbmd0aCsyNTUpLGk9'@;
put 'MDtpPGUubGVuZ3RoOysraSl7dmFyIHM9ZS5jaGFyQ29kZUF0KGkpO2lmKHM8MTI4KW5bcisrXT1zO2Vsc2UgaWYoczwyMDQ4KW5bcisrXT0xOTJ8cz4+NiYzMSxuW3IrK109MTI4fDYzJnM7ZWxzZSBpZihzPj01NTI5NiYmczw1NzM0NCl7cz02NCsoMTAyMyZzKTt2YXIgZj0xMDIzJmUuY2hh'@;
put 'ckNvZGVBdCgrK2kpO25bcisrXT0yNDB8cz4+OCY3LG5bcisrXT0xMjh8cz4+MiY2MyxuW3IrK109MTI4fGY+PjYmMTV8KDMmcyk8PDQsbltyKytdPTEyOHw2MyZmfWVsc2UgbltyKytdPTIyNHxzPj4xMiYxNSxuW3IrK109MTI4fHM+PjYmNjMsbltyKytdPTEyOHw2MyZzO3I+YSYmKHQucHVz'@;
put 'aChuLnNsaWNlKDAscikpLHI9MCxuPV90KDY1NTM1KSxhPTY1NTMwKX1yZXR1cm4gdC5wdXNoKG4uc2xpY2UoMCxyKSksZnIodCl9KHIpLHZlLnV0aWxzLmNmYl9hZGQoZSx0LGEpO3ZlLnV0aWxzLmNmYl9hZGQoZSx0LHIpfWVsc2UgZS5maWxlKHQscil9KHIsbGUsT2koZSxsZSkpfSksem4o'@;
put 'cil9aWYoIVdyKGUsIltDb250ZW50X1R5cGVzXS54bWwiKSl0aHJvdyBXcihlLCJpbmRleC54bWwuZ3oiKT9uZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE5VTUJFUlMgMDggZmlsZSIpOldyKGUsImluZGV4LnhtbCIpP25ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTlVNQkVSUyAwOSBmaWxlIik6bmV3'@;
put 'IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgZmlsZSIpO3ZhciBzLGYsYT1JaShlKSxuPWZ1bmN0aW9uIGZsKGUpe3ZhciB0PXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sdGhyZWFkZWRjb21t'@;
put 'ZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10sbWV0YWRhdGE6W10scGVvcGxlOltdLFRPRE86W10seG1sbnM6IiJ9O2lmKCFlfHwhZS5tYXRjaCly'@;
put 'ZXR1cm4gdDt2YXIgcj17fTtpZigoZS5tYXRjaCh2cil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGEpe3ZhciBuPW1lKGEpO3N3aXRjaChuWzBdLnJlcGxhY2UoX28sIjwiKSl7Y2FzZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOnQueG1sbnM9blsieG1sbnMiKyhuWzBdLm1hdGNoKC88KFx3'@;
put 'Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjpyW24uRXh0ZW5zaW9uXT1uLkNvbnRlbnRUeXBlO2JyZWFrO2Nhc2UiPE92ZXJyaWRlIjp2b2lkIDAhPT10W3ZuW24uQ29udGVudFR5cGVdXSYmdFt2bltuLkNvbnRlbnRUeXBlXV0ucHVzaChuLlBhcnROYW1lKX19KSx0'@;
put 'LnhtbG5zIT09cnIuQ1QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIit0LnhtbG5zKTtyZXR1cm4gdC5jYWxjY2hhaW49dC5jYWxjY2hhaW5zLmxlbmd0aD4wP3QuY2FsY2NoYWluc1swXToiIix0LnNzdD10LnN0cnMubGVuZ3RoPjA/dC5zdHJzWzBdOiIiLHQuc3R5bGU9'@;
put 'dC5zdHlsZXMubGVuZ3RoPjA/dC5zdHlsZXNbMF06IiIsdC5kZWZhdWx0cz1yLGRlbGV0ZSB0LmNhbGNjaGFpbnMsdH0oTnIoZSwiW0NvbnRlbnRfVHlwZXNdLnhtbCIpKSxpPSExO2lmKDA9PT1uLndvcmtib29rcy5sZW5ndGgmJlFlKGUsZj0ieGwvd29ya2Jvb2sueG1sIiwhMCkmJm4ud29y'@;
put 'a2Jvb2tzLnB1c2goZiksMD09PW4ud29ya2Jvb2tzLmxlbmd0aCl7aWYoIVFlKGUsZj0ieGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO24ud29ya2Jvb2tzLnB1c2goZiksaT0hMH0iYmluIj09bi53b3JrYm9va3NbMF0uc2xp'@;
put 'Y2UoLTMpJiYoaT0hMCk7dmFyIGM9e30sbz17fTtpZighdC5ib29rU2hlZXRzJiYhdC5ib29rUHJvcHMpe2lmKFZhPVtdLG4uc3N0KXRyeXtWYT1mdW5jdGlvbiBPcChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gSWgoZSx0KXt2YXIgcj1bXSxhPSExO3JldHVy'@;
put 'biBodChlLGZ1bmN0aW9uKGkscyxmKXtzd2l0Y2goZil7Y2FzZSAxNTk6ci5Db3VudD1pWzBdLHIuVW5pcXVlPWlbMV07YnJlYWs7Y2FzZSAxOTpyLnB1c2goaSk7YnJlYWs7Y2FzZSAxNjA6cmV0dXJuITA7Y2FzZSAzNTphPSEwO2JyZWFrO2Nhc2UgMzY6YT0hMTticmVhaztkZWZhdWx0Omlm'@;
put 'KCFhfHx0LldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitmLnRvU3RyaW5nKDE2KSl9fSkscn0oZSxyKTpmdW5jdGlvbiBDaChlLHQpe3ZhciByPVtdLGE9IiI7aWYoIWUpcmV0dXJuIHI7dmFyIG49ZS5tYXRjaChGaCk7aWYobil7YT1uWzJdLnJlcGxhY2UoeWgs'@;
put 'IiIpLnNwbGl0KEFoKTtmb3IodmFyIGk9MDtpIT1hLmxlbmd0aDsrK2kpe3ZhciBzPVNuKGFbaV0udHJpbSgpLHQpO251bGwhPXMmJihyW3IubGVuZ3RoXT1zKX1uPW1lKG5bMV0pLHIuQ291bnQ9bi5jb3VudCxyLlVuaXF1ZT1uLnVuaXF1ZUNvdW50fXJldHVybiByfShlLHIpfShRZShlLCRy'@;
put 'KG4uc3N0KSksbi5zc3QsdCl9Y2F0Y2gobGUpe2lmKHQuV1RGKXRocm93IGxlfXQuY2VsbFN0eWxlcyYmbi50aGVtZXMubGVuZ3RoJiYoYz1mdW5jdGlvbiBEcChlLHQscil7cmV0dXJuIHZmKGUscil9KE5yKGUsbi50aGVtZXNbMF0ucmVwbGFjZSgvXlwvLywiIiksITApfHwiIiwwLHQpKSxu'@;
put 'LnN0eWxlJiYobz1mdW5jdGlvbiBDcChlLHQscixhKXtyZXR1cm4iLmJpbiI9PT10LnNsaWNlKC00KT9mdW5jdGlvbiBTMShlLHQscil7dmFyIGE9e051bWJlckZtdDpbXX07Zm9yKHZhciBuIGluIHBlKWEuTnVtYmVyRm10W25dPXBlW25dO2EuQ2VsbFhmPVtdLGEuRm9udHM9W107dmFyIGk9'@;
put 'W10scz0hMTtyZXR1cm4gaHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgNDQ6YS5OdW1iZXJGbXRbY1swXV09Y1sxXSxldChjWzFdLGNbMF0pO2JyZWFrO2Nhc2UgNDM6YS5Gb250cy5wdXNoKGMpLG51bGwhPWMuY29sb3IudGhlbWUmJnQmJnQudGhlbWVFbGVtZW50cyYmdC50'@;
put 'aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKGMuY29sb3IucmdiPVQwKHQudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbYy5jb2xvci50aGVtZV0ucmdiLGMuY29sb3IudGludHx8MCkpO2JyZWFrO2Nhc2UgMTAyNTpjYXNlIDQ1OmNhc2UgNDY6Y2FzZSA0ODpjYXNlIDUwNzpjYXNlIDU3MjpjYXNl'@;
put 'IDQ3NTpjYXNlIDExNzE6Y2FzZSAyMTAyOmNhc2UgMTEzMDpjYXNlIDUxMjpjYXNlIDIwOTU6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgNDc6NjE3PT1pW2kubGVuZ3RoLTFdJiZhLkNlbGxYZi5wdXNoKGMpO2JyZWFrO2Nhc2UgMzU6cz0hMDticmVhaztjYXNlIDM2OnM9ITE7YnJlYWs7Y2FzZSAz'@;
put 'NzppLnB1c2gobCkscz0hMDticmVhaztjYXNlIDM4OmkucG9wKCkscz0hMTticmVhaztkZWZhdWx0OmlmKG8uVD4wKWkucHVzaChsKTtlbHNlIGlmKG8uVDwwKWkucG9wKCk7ZWxzZSBpZighc3x8ci5XVEYmJjM3IT1pW2kubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBy'@;
put 'ZWNvcmQgMHgiK2wudG9TdHJpbmcoMTYpKX19KSxhfShlLHIsYSk6aDEoZSxyLGEpfShRZShlLCRyKG4uc3R5bGUpKSxuLnN0eWxlLGMsdCkpfW4ubGlua3MubWFwKGZ1bmN0aW9uKGxlKXt0cnl7cmV0dXJuIElhKE5yKGUsT2EoJHIobGUpKSksbGUpLGZ1bmN0aW9uIE5wKGUsdCxyLGEpe3Jl'@;
put 'dHVybiIuYmluIj09PXIuc2xpY2UoLTQpP2Z1bmN0aW9uIHV4KGUsdCxyLGEpe2lmKCFlKXJldHVybiBlO3ZhciBuPWF8fHt9LGk9ITE7aHQoZSxmdW5jdGlvbihjLG8sbCl7c3dpdGNoKGwpe2Nhc2UgMzU5OmNhc2UgMzYzOmNhc2UgMzY0OmNhc2UgMzY2OmNhc2UgMzY3OmNhc2UgMzY4OmNh'@;
put 'c2UgMzY5OmNhc2UgMzcwOmNhc2UgMzcxOmNhc2UgNDcyOmNhc2UgNTc3OmNhc2UgNTc4OmNhc2UgNTc5OmNhc2UgNTgwOmNhc2UgNTgxOmNhc2UgNTgyOmNhc2UgNTgzOmNhc2UgNTg0OmNhc2UgNTg1OmNhc2UgNTg2OmNhc2UgNTg3OmJyZWFrO2Nhc2UgMzU6aT0hMDticmVhaztjYXNlIDM2'@;
put 'Omk9ITE7YnJlYWs7ZGVmYXVsdDppZighby5UJiYoIWl8fG4uV1RGKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSxuKX0oZSwwLDAsYSk6dm9pZCAwfShRZShlLCRyKGxlKSksMCxsZSx0KX1jYXRjaHt9fSk7dmFyIGw9ZnVuY3Rpb24g'@;
put 'VHAoZSx0LHIpe3JldHVybiIuYmluIj09PXQuc2xpY2UoLTQpP2Z1bmN0aW9uIG1wKGUsdCl7dmFyIHI9e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sYT1bXSxuPSExO3R8fCh0PXt9KSx0LmJpZmY9MTI7dmFyIGk9W10s'@;
put 'cz1bW11dO3JldHVybiBzLlNoZWV0TmFtZXM9W10scy5YVEk9W10sJGFbMTZdPXtuOiJCcnRGUlRBcmNoSUQkIixmOnZwfSxodChlLGZ1bmN0aW9uKGMsbyxsKXtzd2l0Y2gobCl7Y2FzZSAxNTY6cy5TaGVldE5hbWVzLnB1c2goYy5uYW1lKSxyLlNoZWV0cy5wdXNoKGMpO2JyZWFrO2Nhc2Ug'@;
put 'MTUzOnIuV0JQcm9wcz1jO2JyZWFrO2Nhc2UgMzk6bnVsbCE9Yy5TaGVldCYmKHQuU0lEPWMuU2hlZXQpLGMuUmVmPWtyKGMuUHRnLDAsbnVsbCxzLHQpLGRlbGV0ZSB0LlNJRCxkZWxldGUgYy5QdGcsaS5wdXNoKGMpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIwNzE6Y2FzZSAx'@;
put 'NTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2UgMjEyNTpjYXNl'@;
put 'IDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2UgMjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3OnNbMF0ubGVuZ3RoP3Mu'@;
put 'cHVzaChbbCxjXSk6c1swXT1bbCxjXSxzW3MubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09cy5sZW5ndGgmJihzWzBdPVtdLHNbMF0uWFRJPVtdKSxzW3MubGVuZ3RoLTFdLlhUST1zW3MubGVuZ3RoLTFdLlhUSS5jb25jYXQoYykscy5YVEk9cy5YVEkuY29uY2F0KGMpO2Jy'@;
put 'ZWFrO2Nhc2UgMzU6Y2FzZSAzNzphLnB1c2gobCksbj0hMDticmVhaztjYXNlIDM2OmNhc2UgMzg6YS5wb3AoKSxuPSExO2JyZWFrO2RlZmF1bHQ6aWYoIW8uVCYmKCFufHx0LldURiYmMzchPWFbYS5sZW5ndGgtMV0mJjM1IT1hW2EubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhw'@;
put 'ZWN0ZWQgcmVjb3JkIDB4IitsLnRvU3RyaW5nKDE2KSl9fSx0KSxIZihyKSxyLk5hbWVzPWksci5zdXBib29rcz1zLHJ9KGUscik6ZnVuY3Rpb24gbHAoZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIgcj17QXBwVmVyc2lvbjp7fSxXQlByb3Bz'@;
put 'Ont9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLHhtbG5zOiIifSxhPSExLG49InhtbG5zIixpPXt9LHM9MDtpZihlLnJlcGxhY2UodnIsZnVuY3Rpb24oYyxvKXt2YXIgbD1tZShjKTtzd2l0Y2gocnQobFswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC93b3JrYm9vaz4i'@;
put 'OmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4iOmNhc2UiPGZpbGVTaGFyaW5nIjpjYXNlIjxmaWxlU2hhcmluZy8+IjpjYXNlIjwvd29ya2Jvb2tQcj4iOmNhc2UiPHdvcmtib29rUHJvdGVjdGlvbiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJv'@;
put 'b2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxzaGVldHMiOmNhc2UiPHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25H'@;
put 'cm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2UiOmNhc2UiPGRlZmluZWROYW1lcy8+IjpjYXNlIjxk'@;
put 'ZWZpbmVkTmFtZS8+IjpjYXNlIjwvY2FsY1ByPiI6Y2FzZSI8b2xlU2l6ZSI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cyI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3IjpjYXNlIjwvY3Vz'@;
put 'dG9tV29ya2Jvb2tWaWV3PiI6Y2FzZSI8cGl2b3RDYWNoZXM+IjpjYXNlIjwvcGl2b3RDYWNoZXM+IjpjYXNlIjxwaXZvdENhY2hlcyI6Y2FzZSI8cGl2b3RDYWNoZSI6Y2FzZSI8c21hcnRUYWdQciI6Y2FzZSI8c21hcnRUYWdQci8+IjpjYXNlIjxzbWFydFRhZ1R5cGVzIjpjYXNlIjxzbWFy'@;
put 'dFRhZ1R5cGVzPiI6Y2FzZSI8L3NtYXJ0VGFnVHlwZXM+IjpjYXNlIjxzbWFydFRhZ1R5cGUiOmNhc2UiPHdlYlB1Ymxpc2hpbmciOmNhc2UiPHdlYlB1Ymxpc2hpbmcvPiI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIiOmNhc2UiPGZpbGVSZWNvdmVyeVByLz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmpl'@;
put 'Y3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHMiOmNhc2UiPC93ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3QiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpjYXNlIjxBcmNoSUQiOmNhc2UiPHJl'@;
put 'dmlzaW9uUHRyIjpicmVhaztjYXNlIjx3b3JrYm9vayI6Yy5tYXRjaChvcCkmJihuPSJ4bWxucyIrYy5tYXRjaCgvPChcdyspOi8pWzFdKSxyLnhtbG5zPWxbbl07YnJlYWs7Y2FzZSI8ZmlsZVZlcnNpb24iOmRlbGV0ZSBsWzBdLHIuQXBwVmVyc2lvbj1sO2JyZWFrO2Nhc2UiPHdvcmtib29r'@;
put 'UHIiOmNhc2UiPHdvcmtib29rUHIvPiI6Qm4uZm9yRWFjaChmdW5jdGlvbihoKXtpZihudWxsIT1sW2hbMF1dKXN3aXRjaChoWzJdKXtjYXNlImJvb2wiOnIuV0JQcm9wc1toWzBdXT1XZShsW2hbMF1dKTticmVhaztjYXNlImludCI6ci5XQlByb3BzW2hbMF1dPXBhcnNlSW50KGxbaFswXV0s'@;
put 'MTApO2JyZWFrO2RlZmF1bHQ6ci5XQlByb3BzW2hbMF1dPWxbaFswXV19fSksbC5jb2RlTmFtZSYmKHIuV0JQcm9wcy5Db2RlTmFtZT1CZShsLmNvZGVOYW1lKSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIGxbMF0sci5XQlZpZXcucHVz'@;
put 'aChsKTticmVhaztjYXNlIjxzaGVldCI6c3dpdGNoKGwuc3RhdGUpe2Nhc2UiaGlkZGVuIjpsLkhpZGRlbj0xO2JyZWFrO2Nhc2UidmVyeUhpZGRlbiI6bC5IaWRkZW49MjticmVhaztkZWZhdWx0OmwuSGlkZGVuPTB9ZGVsZXRlIGwuc3RhdGUsbC5uYW1lPUllKEJlKGwubmFtZSkpLGRlbGV0'@;
put 'ZSBsWzBdLHIuU2hlZXRzLnB1c2gobCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjphPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+Ijpj'@;
put 'YXNlIjwvZXh0PiI6Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjphPSExO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lIjooaT17fSkuTmFtZT1CZShsLm5hbWUpLGwuY29tbWVudCYmKGkuQ29tbWVudD1sLmNvbW1lbnQpLGwubG9jYWxTaGVldElkJiYoaS5TaGVldD0rbC5sb2NhbFNoZWV0SWQp'@;
put 'LFdlKGwuaGlkZGVufHwiMCIpJiYoaS5IaWRkZW49ITApLHM9bytjLmxlbmd0aDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWU+IjppLlJlZj1JZShCZShlLnNsaWNlKHMsbykpKSxyLk5hbWVzLnB1c2goaSk7YnJlYWs7Y2FzZSI8Y2FsY1ByIjpjYXNlIjxjYWxjUHIvPiI6ZGVsZXRlIGxbMF0s'@;
put 'ci5DYWxjUHI9bDticmVhaztkZWZhdWx0OmlmKCFhJiZ0LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2xbMF0rIiBpbiB3b3JrYm9vayIpfXJldHVybiBjfSksLTE9PT1TdC5pbmRleE9mKHIueG1sbnMpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBOYW1lc3BhY2U6ICIr'@;
put 'ci54bWxucyk7cmV0dXJuIEhmKHIpLHJ9KGUscil9KFFlKGUsJHIobi53b3JrYm9va3NbMF0pKSxuLndvcmtib29rc1swXSx0KSxoPXt9LHg9IiI7bi5jb3JlcHJvcHMubGVuZ3RoJiYoKHg9UWUoZSwkcihuLmNvcmVwcm9wc1swXSksITApKSYmKGg9bXMoeCkpLDAhPT1uLmV4dHByb3BzLmxl'@;
put 'bmd0aCYmKHg9UWUoZSwkcihuLmV4dHByb3BzWzBdKSwhMCkpJiZmdW5jdGlvbiB2bChlLHQscil7dmFyIGE9e307dHx8KHQ9e30pLGU9QmUoZSksWHQuZm9yRWFjaChmdW5jdGlvbihuKXt2YXIgaT0oZS5tYXRjaChGYShuWzBdKSl8fFtdKVsxXTtzd2l0Y2goblsyXSl7Y2FzZSJzdHJpbmci'@;
put 'OmkmJih0W25bMV1dPUllKGkpKTticmVhaztjYXNlImJvb2wiOnRbblsxXV09InRydWUiPT09aTticmVhaztjYXNlInJhdyI6dmFyIHM9ZS5tYXRjaChuZXcgUmVnRXhwKCI8IituWzBdKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrblswXSsiPiIpKTtzJiZzLmxlbmd0aD4wJiYoYVtuWzFdXT1z'@;
put 'WzFdKX19KSxhLkhlYWRpbmdQYWlycyYmYS5UaXRsZXNPZlBhcnRzJiZ3cyhhLkhlYWRpbmdQYWlycyxhLlRpdGxlc09mUGFydHMsdCxyKX0oeCxoLHQpKTt2YXIgZD17fTsoIXQuYm9va1NoZWV0c3x8dC5ib29rUHJvcHMpJiYwIT09bi5jdXN0cHJvcHMubGVuZ3RoJiYoeD1OcihlLCRyKG4u'@;
put 'Y3VzdHByb3BzWzBdKSwhMCkpJiYoZD1mdW5jdGlvbiBtbChlLHQpe3ZhciByPXt9LGE9IiIsbj1lLm1hdGNoKHBsKTtpZihuKWZvcih2YXIgaT0wO2khPW4ubGVuZ3RoOysraSl7dmFyIHM9bltpXSxmPW1lKHMpO3N3aXRjaChmWzBdKXtjYXNlIjw/eG1sIjpjYXNlIjxQcm9wZXJ0aWVzIjpi'@;
put 'cmVhaztjYXNlIjxwcm9wZXJ0eSI6YT1JZShmLm5hbWUpO2JyZWFrO2Nhc2UiPC9wcm9wZXJ0eT4iOmE9bnVsbDticmVhaztkZWZhdWx0OmlmKDA9PT1zLmluZGV4T2YoIjx2dDoiKSl7dmFyIGM9cy5zcGxpdCgiPiIpLG89Y1swXS5zbGljZSg0KSxsPWNbMV07c3dpdGNoKG8pe2Nhc2UibHBz'@;
put 'dHIiOmNhc2UiYnN0ciI6Y2FzZSJscHdzdHIiOmNhc2UiY3kiOmNhc2UiZXJyb3IiOnJbYV09SWUobCk7YnJlYWs7Y2FzZSJib29sIjpyW2FdPVdlKGwpO2JyZWFrO2Nhc2UiaTEiOmNhc2UiaTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOnJbYV09cGFyc2VJbnQo'@;
put 'bCwxMCk7YnJlYWs7Y2FzZSJyNCI6Y2FzZSJyOCI6Y2FzZSJkZWNpbWFsIjpyW2FdPXBhcnNlRmxvYXQobCk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjpyW2FdPVhlKGwpO2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1vLnNsaWNlKC0xKSlicmVhazt0LldURiYmdHlwZW9mIGNvbnNv'@;
put 'bGU8InUiJiZjb25zb2xlLndhcm4oIlVuZXhwZWN0ZWQiLHMsbyxjKX19ZWxzZSBpZigiPC8iIT09cy5zbGljZSgwLDIpJiZ0LldURil0aHJvdyBuZXcgRXJyb3Iocyl9fXJldHVybiByfSh4LHQpKTt2YXIgdj17fTtpZigodC5ib29rU2hlZXRzfHx0LmJvb2tQcm9wcykmJihsLlNoZWV0cz9z'@;
put 'PWwuU2hlZXRzLm1hcChmdW5jdGlvbihyZSl7cmV0dXJuIHJlLm5hbWV9KTpoLldvcmtzaGVldHMmJmguU2hlZXROYW1lcy5sZW5ndGg+MCYmKHM9aC5TaGVldE5hbWVzKSx0LmJvb2tQcm9wcyYmKHYuUHJvcHM9aCx2LkN1c3Rwcm9wcz1kKSx0LmJvb2tTaGVldHMmJnR5cGVvZiBzPCJ1IiYm'@;
put 'KHYuU2hlZXROYW1lcz1zKSx0LmJvb2tTaGVldHM/di5TaGVldE5hbWVzOnQuYm9va1Byb3BzKSlyZXR1cm4gdjtzPXt9O3ZhciB1PXt9O3QuYm9va0RlcHMmJm4uY2FsY2NoYWluJiYodT1mdW5jdGlvbiBScChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gbHgo'@;
put 'ZSx0LHIpe3ZhciBhPVtdO3JldHVybiBodChlLGZ1bmN0aW9uKHMsZixjKXtpZig2Mz09PWMpYS5wdXNoKHMpO2Vsc2UgaWYoIWYuVCl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkIDB4IitjLnRvU3RyaW5nKDE2KSl9KSxhfShlKTpmdW5jdGlvbiBjeChlKXt2YXIgdD1bXTtp'@;
put 'ZighZSlyZXR1cm4gdDt2YXIgcj0xO3JldHVybihlLm1hdGNoKHZyKXx8W10pLmZvckVhY2goZnVuY3Rpb24oYSl7dmFyIG49bWUoYSk7c3dpdGNoKG5bMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nh'@;
put 'c2UiPGMiOmRlbGV0ZSBuWzBdLG4uaT9yPW4uaTpuLmk9cix0LnB1c2gobil9fSksdH0oZSl9KFFlKGUsJHIobi5jYWxjY2hhaW4pKSxuLmNhbGNjaGFpbikpO3ZhciBULGcscD0wLGs9e30sTj1sLlNoZWV0cztoLldvcmtzaGVldHM9Ti5sZW5ndGgsaC5TaGVldE5hbWVzPVtdO2Zvcih2YXIg'@;
put 'TT0wO00hPU4ubGVuZ3RoOysrTSloLlNoZWV0TmFtZXNbTV09TltNXS5uYW1lO3ZhciBJPWk/ImJpbiI6InhtbCIseT1uLndvcmtib29rc1swXS5sYXN0SW5kZXhPZigiLyIpLFA9KG4ud29ya2Jvb2tzWzBdLnNsaWNlKDAseSsxKSsiX3JlbHMvIituLndvcmtib29rc1swXS5zbGljZSh5KzEp'@;
put 'KyIucmVscyIpLnJlcGxhY2UoL15cLy8sIiIpO1dyKGUsUCl8fChQPSJ4bC9fcmVscy93b3JrYm9vay4iK0krIi5yZWxzIik7dmFyIFI9SWEoTnIoZSxQLCEwKSxQLnJlcGxhY2UoL19yZWxzLiovLCJzNXMiKSk7KG4ubWV0YWRhdGF8fFtdKS5sZW5ndGg+PTEmJih0LnhsbWV0YT1mdW5jdGlv'@;
put 'biBicChlLHQscil7cmV0dXJuIi5iaW4iPT09dC5zbGljZSgtNCk/ZnVuY3Rpb24gaXgoZSx0LHIpe3ZhciBhPXtUeXBlczpbXSxDZWxsOltdLFZhbHVlOltdfSxuPXJ8fHt9LGk9W10scz0hMSxmPTI7cmV0dXJuIGh0KGUsZnVuY3Rpb24oYyxvLGwpe3N3aXRjaChsKXtjYXNlIDMzNTphLlR5'@;
put 'cGVzLnB1c2goe25hbWU6Yy5uYW1lfSk7YnJlYWs7Y2FzZSA1MTpjLmZvckVhY2goZnVuY3Rpb24oaCl7MT09Zj9hLkNlbGwucHVzaCh7dHlwZTphLlR5cGVzW2hbMF0tMV0ubmFtZSxpbmRleDpoWzFdfSk6MD09ZiYmYS5WYWx1ZS5wdXNoKHt0eXBlOmEuVHlwZXNbaFswXS0xXS5uYW1lLGlu'@;
put 'ZGV4OmhbMV19KX0pO2JyZWFrO2Nhc2UgMzM3OmY9Yz8xOjA7YnJlYWs7Y2FzZSAzMzg6Zj0yO2JyZWFrO2Nhc2UgMzU6aS5wdXNoKGwpLHM9ITA7YnJlYWs7Y2FzZSAzNjppLnBvcCgpLHM9ITE7YnJlYWs7ZGVmYXVsdDppZighby5UJiYoIXN8fG4uV1RGJiYzNSE9aVtpLmxlbmd0aC0xXSkp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAweCIrbC50b1N0cmluZygxNikpfX0pLGF9KGUsMCxyKTpmdW5jdGlvbiBmeChlLHQscil7dmFyIGE9e1R5cGVzOltdLENlbGw6W10sVmFsdWU6W119O2lmKCFlKXJldHVybiBhO3ZhciBzLG49ITEsaT0yO3JldHVybiBlLnJlcGxh'@;
put 'Y2UodnIsZnVuY3Rpb24oZil7dmFyIGM9bWUoZik7c3dpdGNoKHJ0KGNbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjxtZXRhZGF0YSI6Y2FzZSI8L21ldGFkYXRhPiI6Y2FzZSI8bWV0YWRhdGFUeXBlcyI6Y2FzZSI8L21ldGFkYXRhVHlwZXM+IjpjYXNlIjwvbWV0YWRhdGFUeXBlPiI6Y2FzZSI8'@;
put 'L2Z1dHVyZU1ldGFkYXRhPiI6Y2FzZSI8Yms+IjpjYXNlIjwvYms+IjpjYXNlIjwvcmM+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpjYXNlIjxleHRMc3QvPiI6YnJlYWs7Y2FzZSI8bWV0YWRhdGFUeXBlIjphLlR5cGVzLnB1c2goe25hbWU6Yy5uYW1l'@;
put 'fSk7YnJlYWs7Y2FzZSI8ZnV0dXJlTWV0YWRhdGEiOmZvcih2YXIgbz0wO288YS5UeXBlcy5sZW5ndGg7KytvKWEuVHlwZXNbb10ubmFtZT09Yy5uYW1lJiYocz1hLlR5cGVzW29dKTticmVhaztjYXNlIjxyYyI6MT09aT9hLkNlbGwucHVzaCh7dHlwZTphLlR5cGVzW2MudC0xXS5uYW1lLGlu'@;
put 'ZGV4OitjLnZ9KTowPT1pJiZhLlZhbHVlLnB1c2goe3R5cGU6YS5UeXBlc1tjLnQtMV0ubmFtZSxpbmRleDorYy52fSk7YnJlYWs7Y2FzZSI8Y2VsbE1ldGFkYXRhIjppPTE7YnJlYWs7Y2FzZSI8L2NlbGxNZXRhZGF0YT4iOmNhc2UiPC92YWx1ZU1ldGFkYXRhPiI6aT0yO2JyZWFrO2Nhc2Ui'@;
put 'PHZhbHVlTWV0YWRhdGEiOmk9MDticmVhaztjYXNlIjxleHQiOm49ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOm49ITE7YnJlYWs7Y2FzZSI8cnZiIjppZighcylicmVhaztzLm9mZnNldHN8fChzLm9mZnNldHM9W10pLHMub2Zmc2V0cy5wdXNoKCtjLmkpO2JyZWFrO2RlZmF1bHQ6aWYoIW4mJnIu'@;
put 'V1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrY1swXSsiIGluIG1ldGFkYXRhIil9cmV0dXJuIGZ9KSxhfShlLDAscil9KFFlKGUsJHIobi5tZXRhZGF0YVswXSkpLG4ubWV0YWRhdGFbMF0sdCkpLChuLnBlb3BsZXx8W10pLmxlbmd0aD49MSYmKHQucGVvcGxlPWZ1bmN0aW9u'@;
put 'IHB4KGUsdCl7dmFyIHI9W10sYT0hMTtyZXR1cm4gZS5yZXBsYWNlKHZyLGZ1bmN0aW9uKGkpe3ZhciBzPW1lKGkpO3N3aXRjaChydChzWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8cGVyc29uTGlzdCI6Y2FzZSI8L3BlcnNvbkxpc3Q+IjpjYXNlIjwvcGVyc29uPiI6Y2FzZSI8ZXh0THN0Ijpj'@;
put 'YXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nhc2UiPHBlcnNvbiI6ci5wdXNoKHtuYW1lOnMuZGlzcGxheW5hbWUsaWQ6cy5pZH0pO2JyZWFrO2Nhc2UiPGV4dCI6YT0hMDticmVhaztjYXNlIjwvZXh0PiI6YT0hMTticmVhaztkZWZhdWx0Omlm'@;
put 'KCFhJiZ0LldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3NbMF0rIiBpbiB0aHJlYWRlZCBjb21tZW50cyIpfXJldHVybiBpfSkscn0oUWUoZSwkcihuLnBlb3BsZVswXSkpLHQpKSxSJiYoUj1mdW5jdGlvbiBxbShlLHQpe2lmKCFlKXJldHVybiAwO3RyeXtlPXQubWFwKGZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBhLmlkfHwoYS5pZD1hLnN0clJlbElEKSxbYS5uYW1lLGVbIiFpZCJdW2EuaWRdLlRhcmdldCxKbShlWyIhaWQiXVthLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gZSYmMCE9PWUubGVuZ3RoP2U6bnVsbH0oUixsLlNoZWV0cykpO3ZhciBW'@;
put 'PVFlKGUsInhsL3dvcmtzaGVldHMvc2hlZXQueG1sIiwhMCk/MTowO2U6Zm9yKHA9MDtwIT1oLldvcmtzaGVldHM7KytwKXt2YXIgWD0ic2hlZXQiO2lmKFImJlJbcF0/KFQ9InhsLyIrUltwXVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxXcihlLFQpfHwoVD1SW3BdWzFdKSxXcihlLFQp'@;
put 'fHwoVD1QLnJlcGxhY2UoL19yZWxzXC8uKiQvLCIiKStSW3BdWzFdKSxYPVJbcF1bMl0pOlQ9KFQ9InhsL3dvcmtzaGVldHMvc2hlZXQiKyhwKzEtVikrIi4iK0kpLnJlcGxhY2UoL3NoZWV0MFwuLywic2hlZXQuIiksZz1ULnJlcGxhY2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxz'@;
put 'LyQzLnJlbHMiKSx0JiZudWxsIT10LnNoZWV0cylzd2l0Y2godHlwZW9mIHQuc2hlZXRzKXtjYXNlIm51bWJlciI6aWYocCE9dC5zaGVldHMpY29udGludWUgZTticmVhaztjYXNlInN0cmluZyI6aWYoaC5TaGVldE5hbWVzW3BdLnRvTG93ZXJDYXNlKCkhPXQuc2hlZXRzLnRvTG93ZXJDYXNl'@;
put 'KCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkodC5zaGVldHMpKXtmb3IodmFyIGI9ITEsZWU9MDtlZSE9dC5zaGVldHMubGVuZ3RoOysrZWUpIm51bWJlciI9PXR5cGVvZiB0LnNoZWV0c1tlZV0mJnQuc2hlZXRzW2VlXT09cCYmKGI9'@;
put 'MSksInN0cmluZyI9PXR5cGVvZiB0LnNoZWV0c1tlZV0mJnQuc2hlZXRzW2VlXS50b0xvd2VyQ2FzZSgpPT1oLlNoZWV0TmFtZXNbcF0udG9Mb3dlckNhc2UoKSYmKGI9MSk7aWYoIWIpY29udGludWUgZX19Wm0oZSxULGcsaC5TaGVldE5hbWVzW3BdLHAsayxzLFgsdCxsLGMsbyl9cmV0dXJu'@;
put 'IHY9e0RpcmVjdG9yeTpuLFdvcmtib29rOmwsUHJvcHM6aCxDdXN0cHJvcHM6ZCxEZXBzOnUsU2hlZXRzOnMsU2hlZXROYW1lczpoLlNoZWV0TmFtZXMsU3RyaW5nczpWYSxTdHlsZXM6byxUaGVtZXM6YyxTU0Y6TWUocGUpfSx0JiZ0LmJvb2tGaWxlcyYmKGUuZmlsZXM/KHYua2V5cz1hLHYu'@;
put 'ZmlsZXM9ZS5maWxlcyk6KHYua2V5cz1bXSx2LmZpbGVzPXt9LGUuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24obGUscmUpe2xlPWxlLnJlcGxhY2UoL15Sb290IEVudHJ5W1wvXS8sIiIpLHYua2V5cy5wdXNoKGxlKSx2LmZpbGVzW2xlXT1lLkZpbGVJbmRleFtyZV19KSkpLHQmJnQuYm9v'@;
put 'a1ZCQSYmKG4udmJhLmxlbmd0aD4wP3YudmJhcmF3PVFlKGUsJHIobi52YmFbMF0pLCEwKTpuLmRlZmF1bHRzJiZuLmRlZmF1bHRzLmJpbj09PVN4JiYodi52YmFyYXc9UWUoZSwieGwvdmJhUHJvamVjdC5iaW4iLCEwKSkpLHZ9ZnVuY3Rpb24gZWcoZSx0KXt2YXIgcj10fHx7fSxhPSJXb3Jr'@;
put 'Ym9vayIsbj12ZS5maW5kKGUsYSk7dHJ5e2lmKCEobj12ZS5maW5kKGUsYT0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7aWYoZnVuY3Rpb24gUGgoZSl7dmFyIHQ9e307dC5p'@;
put 'ZD1lLnJlYWRfc2hpZnQoMCwibHBwNCIpLHQuUj1kdChlLDQpLHQuVT1kdChlLDQpLHQuVz1kdChlLDQpfShuLmNvbnRlbnQpLCEobj12ZS5maW5kKGUsYT0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IW4uY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRl'@;
put 'ZCBmaWxlIG1pc3NpbmcgIithKTt2YXIgaT1mdW5jdGlvbiBCaChlKXt2YXIgdD1bXTtlLmwrPTQ7Zm9yKHZhciByPWUucmVhZF9zaGlmdCg0KTtyLS0gPjA7KXQucHVzaChMaChlKSk7cmV0dXJuIHR9KG4uY29udGVudCk7aWYoMSE9PWkubGVuZ3RofHwxIT09aVswXS5jb21wcy5sZW5ndGh8'@;
put 'fDAhPT1pWzBdLmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PWlbMF0ubmFtZXx8IkVuY3J5cHRlZFBhY2thZ2UiIT09aVswXS5jb21wc1swXS52KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrYSk7aWYoIShuPXZlLmZpbmQo'@;
put 'ZSxhPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhbi5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2EpO3ZhciBzPWZ1bmN0aW9uIE1oKGUpe3ZhciB0PVtdO2UubCs9NDtm'@;
put 'b3IodmFyIHI9ZS5yZWFkX3NoaWZ0KDQpO3ItLSA+MDspdC5wdXNoKGUucmVhZF9zaGlmdCgwLCJscHA0IikpO3JldHVybiB0fShuLmNvbnRlbnQpO2lmKDEhPXMubGVuZ3RofHwiU3Ryb25nRW5jcnlwdGlvblRyYW5zZm9ybSIhPXNbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNy'@;
put 'eXB0ZWQgZmlsZSBiYWQgIithKTtpZighKG49dmUuZmluZChlLGE9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5n'@;
put 'ICIrYSk7IWZ1bmN0aW9uIFdoKGUpe3ZhciB0PWZ1bmN0aW9uIFVoKGUpe3ZhciB0PXt9O3JldHVybiBlLnJlYWRfc2hpZnQoNCksZS5sKz00LHQuaWQ9ZS5yZWFkX3NoaWZ0KDAsImxwcDQiKSx0Lm5hbWU9ZS5yZWFkX3NoaWZ0KDAsImxwcDQiKSx0LlI9ZHQoZSw0KSx0LlU9ZHQoZSw0KSx0'@;
put 'Llc9ZHQoZSw0KSx0fShlKTtpZih0LmVuYW1lPWUucmVhZF9zaGlmdCgwLCI4bHBwNCIpLHQuYmxrc3o9ZS5yZWFkX3NoaWZ0KDQpLHQuY21vZGU9ZS5yZWFkX3NoaWZ0KDQpLDQhPWUucmVhZF9zaGlmdCg0KSl0aHJvdyBuZXcgRXJyb3IoIkJhZCAhUHJpbWFyeSByZWNvcmQiKTtyZXR1cm4g'@;
put 'dH0obi5jb250ZW50KX1jYXRjaHt9aWYoIShuPXZlLmZpbmQoZSxhPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFuLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrYSk7dmFyIGY9ZnVuY3Rpb24gSGgoZSl7dmFyIHQ9ZHQoZSk7c3dpdGNo'@;
put 'KHQuTWlub3Ipe2Nhc2UgMjpyZXR1cm5bdC5NaW5vcixWaChlKV07Y2FzZSAzOnJldHVyblt0Lk1pbm9yLFhoKCldO2Nhc2UgNDpyZXR1cm5bdC5NaW5vcixHaChlKV19dGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSB1bnJlY29nbml6ZWQgVmVyc2lvbjogIit0Lk1p'@;
put 'bm9yKX0obi5jb250ZW50KTtpZighKG49dmUuZmluZChlLGE9Ii9FbmNyeXB0ZWRQYWNrYWdlIikpfHwhbi5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK2EpO2lmKDQ9PWZbMF0mJnR5cGVvZiBkZWNyeXB0X2FnaWxlPCJ1IilyZXR1'@;
put 'cm4gZGVjcnlwdF9hZ2lsZShmWzFdLG4uY29udGVudCxyLnBhc3N3b3JkfHwiIixyKTtpZigyPT1mWzBdJiZ0eXBlb2YgZGVjcnlwdF9zdGQ3NjwidSIpcmV0dXJuIGRlY3J5cHRfc3RkNzYoZlsxXSxuLmNvbnRlbnQsci5wYXNzd29yZHx8IiIscik7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlz'@;
put 'IHBhc3N3b3JkLXByb3RlY3RlZCIpfWZ1bmN0aW9uIEtuKGUsdCl7dmFyIHI9IiI7c3dpdGNoKCh0fHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm5bZVswXSxlWzFdLGVbMl0sZVszXSxlWzRdLGVbNV0sZVs2XSxlWzddXTtjYXNlImJhc2U2NCI6'@;
put 'cj1PcihlLnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFyeSI6cj1lO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyh0JiZ0LnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW3IuY2hhckNvZGVBdCgwKSxyLmNoYXJDb2RlQXQoMSksci5jaGFy'@;
put 'Q29kZUF0KDIpLHIuY2hhckNvZGVBdCgzKSxyLmNoYXJDb2RlQXQoNCksci5jaGFyQ29kZUF0KDUpLHIuY2hhckNvZGVBdCg2KSxyLmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIHZjKGUsdCl7dmFyIHI9MDtlOmZvcig7cjxlLmxlbmd0aDspc3dpdGNoKGUuY2hhckNvZGVBdChyKSl7Y2FzZSAx'@;
put 'MDpjYXNlIDEzOmNhc2UgMzI6KytyO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIFVuKGUuc2xpY2UociksdCk7ZGVmYXVsdDpicmVhayBlfXJldHVybiBjYS50b193b3JrYm9vayhlLHQpfWZ1bmN0aW9uIFluKGUsdCxyLGEpe3JldHVybiBhPyhyLnR5cGU9InN0cmluZyIsY2EudG9fd29ya2Jvb2so'@;
put 'ZSxyKSk6Y2EudG9fd29ya2Jvb2sodCxyKX1mdW5jdGlvbiBJMChlLHQpe3IwKCk7dmFyIHI9dHx8e307aWYodHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXJldHVybiBJMChuZXcgVWludDhBcnJheShlKSwoKHI9TWUocikpLnR5cGU9ImFycmF5Iixy'@;
put 'KSk7dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZlIGluc3RhbmNlb2YgVWludDhBcnJheSYmIXIudHlwZSYmKHIudHlwZT10eXBlb2YgRGVubzwidSI/ImJ1ZmZlciI6ImFycmF5Iik7dmFyIG4sYT1lLGk9ITE7aWYoci5jZWxsU3R5bGVzJiYoci5jZWxsTkY9ITAsci5zaGVldFN0dWJzPSEwKSxo'@;
put 'YT17fSxyLmRhdGVORiYmKGhhLmRhdGVORj1yLmRhdGVORiksci50eXBlfHwoci50eXBlPVNlJiZCdWZmZXIuaXNCdWZmZXIoZSk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09ci50eXBlJiYoci50eXBlPVNlPyJidWZmZXIiOiJiaW5hcnkiLGE9ZnVuY3Rpb24gY28oZSl7aWYodHlwZW9m'@;
put 'IERlbm88InUiKXJldHVybiBEZW5vLnJlYWRGaWxlU3luYyhlKTtpZih0eXBlb2YgJDwidSImJnR5cGVvZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciB0PUZpbGUoZSk7dC5vcGVuKCJyIiksdC5lbmNvZGluZz0iYmluYXJ5Ijt2YXIgcj10LnJlYWQoKTtyZXR1cm4gdC5j'@;
put 'bG9zZSgpLHJ9Y2F0Y2goYSl7aWYoIWEubWVzc2FnZXx8IWEubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBhfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIrZSl9KGUpLHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmIVNlJiYoci50eXBlPSJhcnJheSIpKSwic3Ry'@;
put 'aW5nIj09ci50eXBlJiYoaT0hMCxyLnR5cGU9ImJpbmFyeSIsci5jb2RlcGFnZT02NTAwMSxhPWZ1bmN0aW9uIGZnKGUpe3JldHVybiBlLm1hdGNoKC9bXlx4MDAtXHg3Rl0vKT90dChlKTplfShlKSksImFycmF5Ij09ci50eXBlJiZ0eXBlb2YgVWludDhBcnJheTwidSImJmUgaW5zdGFuY2Vv'@;
put 'ZiBVaW50OEFycmF5JiZ0eXBlb2YgQXJyYXlCdWZmZXI8InUiKXt2YXIgcz1uZXcgQXJyYXlCdWZmZXIoMyksZj1uZXcgVWludDhBcnJheShzKTtpZihmLmZvbz0iYmFyIiwhZi5mb28pcmV0dXJuKHI9TWUocikpLnR5cGU9ImFycmF5IixJMChNMChhKSxyKX1zd2l0Y2goKG49S24oYSxyKSlb'@;
put 'MF0pe2Nhc2UgMjA4OmlmKDIwNz09PW5bMV0mJjE3PT09blsyXSYmMjI0PT09blszXSYmMTYxPT09bls0XSYmMTc3PT09bls1XSYmMjY9PT1uWzZdJiYyMjU9PT1uWzddKXJldHVybiBmdW5jdGlvbiBhZyhlLHQpe3JldHVybiB2ZS5maW5kKGUsIkVuY3J5cHRlZFBhY2thZ2UiKT9lZyhlLHQp'@;
put 'OktmKGUsdCl9KHZlLnJlYWQoYSxyKSxyKTticmVhaztjYXNlIDk6aWYoblsxXTw9OClyZXR1cm4gS2YoYSxyKTticmVhaztjYXNlIDYwOnJldHVybiBVbihhLHIpO2Nhc2UgNzM6aWYoNzM9PT1uWzFdJiY0Mj09PW5bMl0mJjA9PT1uWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJbWFnZSBG'@;
put 'aWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1uWzFdKXJldHVybiBmdW5jdGlvbiBnaChlLHQpe3ZhciByPXR8fHt9LGE9ISFyLldURjtyLldURj0hMDt0cnl7dmFyIG49ZWYudG9fd29ya2Jvb2soZSxyKTtyZXR1cm4gci5XVEY9YSxufWNhdGNoKGkpe2lmKHIuV1RGPWEsIWku'@;
put 'bWVzc2FnZS5tYXRjaCgvU1lMSyBiYWQgcmVjb3JkIElELykmJmEpdGhyb3cgaTtyZXR1cm4gY2EudG9fd29ya2Jvb2soZSx0KX19KGEscik7YnJlYWs7Y2FzZSA4NDppZig2NT09PW5bMV0mJjY2PT09blsyXSYmNzY9PT1uWzNdKXJldHVybiByZi50b193b3JrYm9vayhhLHIpO2JyZWFrO2Nh'@;
put 'c2UgODA6cmV0dXJuIDc1PT09blsxXSYmblsyXTw5JiZuWzNdPDk/ZnVuY3Rpb24gbmcoZSx0KXt2YXIgYT1lLG49dHx8e307cmV0dXJuIG4udHlwZXx8KG4udHlwZT1TZSYmQnVmZmVyLmlzQnVmZmVyKGUpPyJidWZmZXIiOiJiYXNlNjQiKSxRbShSaShhLG4pLG4pfShhLHIpOlluKGUsYSxy'@;
put 'LGkpO2Nhc2UgMjM5OnJldHVybiA2MD09PW5bM10/VW4oYSxyKTpZbihlLGEscixpKTtjYXNlIDI1NTppZigyNTQ9PT1uWzFdKXJldHVybiBmdW5jdGlvbiBzZyhlLHQpe3ZhciByPWU7cmV0dXJuImJhc2U2NCI9PXQudHlwZSYmKHI9T3IocikpLHI9T2UudXRpbHMuZGVjb2RlKDEyMDAsci5z'@;
put 'bGljZSgyKSwic3RyIiksdC50eXBlPSJiaW5hcnkiLHZjKHIsdCl9KGEscik7aWYoMD09PW5bMV0mJjI9PT1uWzJdJiYwPT09blszXSlyZXR1cm4ganQudG9fd29ya2Jvb2soYSxyKTticmVhaztjYXNlIDA6aWYoMD09PW5bMV0mJihuWzJdPj0yJiYwPT09blszXXx8MD09PW5bMl0mJig4PT09'@;
put 'blszXXx8OT09PW5bM10pKSlyZXR1cm4ganQudG9fd29ya2Jvb2soYSxyKTticmVhaztjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAxNDA6cmV0dXJuIFRuLnRvX3dvcmtib29rKGEscik7Y2FzZSAxMjM6aWYoOTI9PT1uWzFdJiYxMTQ9PT1uWzJdJiYxMTY9PT1uWzNdKXJldHVybiBv'@;
put 'Zi50b193b3JrYm9vayhhLHIpO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBmdW5jdGlvbiBpZyhlLHQpe3ZhciByPSIiLGE9S24oZSx0KTtzd2l0Y2godC50eXBlKXtjYXNlImJhc2U2NCI6cj1PcihlKTticmVhaztjYXNlImJpbmFyeSI6cj1lO2JyZWFrO2Nhc2UiYnVm'@;
put 'ZmVyIjpyPWUudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOnI9UHQoZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrdC50eXBlKX1yZXR1cm4gMjM5PT1hWzBdJiYxODc9PWFbMV0mJjE5MT09YVsyXSYmKHI9QmUocikpLHQu'@;
put 'dHlwZT0iYmluYXJ5Iix2YyhyLHQpfShhLHIpO2Nhc2UgMTM3OmlmKDgwPT09blsxXSYmNzg9PT1uWzJdJiY3MT09PW5bM10pdGhyb3cgbmV3IEVycm9yKCJQTkcgSW1hZ2UgRmlsZSBpcyBub3QgYSBzcHJlYWRzaGVldCIpfXJldHVybiBtaC5pbmRleE9mKG5bMF0pPi0xJiZuWzJdPD0xMiYm'@;
put 'blszXTw9MzE/VG4udG9fd29ya2Jvb2soYSxyKTpZbihlLGEscixpKX1mdW5jdGlvbiBfYyhlLHQscixhLG4saSxzLGYpe3ZhciBjPUtlKHIpLG89Zi5kZWZ2YWwsbD1mLnJhd3x8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmLCJyYXciKSxoPSEwLHg9MT09PW4/W106'@;
put 'e307aWYoMSE9PW4paWYoT2JqZWN0LmRlZmluZVByb3BlcnR5KXRyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoeCwiX19yb3dOdW1fXyIse3ZhbHVlOnIsZW51bWVyYWJsZTohMX0pfWNhdGNoe3guX19yb3dOdW1fXz1yfWVsc2UgeC5fX3Jvd051bV9fPXI7aWYoIXN8fGVbcl0pZm9yKHZhciBk'@;
put 'PXQucy5jO2Q8PXQuZS5jOysrZCl7dmFyIHY9cz9lW3JdW2RdOmVbYVtkXStjXTtpZih2b2lkIDAhPT12JiZ2b2lkIDAhPT12LnQpe3ZhciB1PXYudjtzd2l0Y2godi50KXtjYXNlInoiOmlmKG51bGw9PXUpYnJlYWs7Y29udGludWU7Y2FzZSJlIjp1PTA9PXU/bnVsbDp2b2lkIDA7YnJlYWs7'@;
put 'Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5cGUgIit2LnQpfWlmKG51bGwhPWlbZF0pe2lmKG51bGw9PXUpaWYoImUiPT12LnQmJm51bGw9PT11KXhbaVtkXV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9'@;
put 'PW8peFtpW2RdXT1vO2Vsc2V7aWYoIWx8fG51bGwhPT11KWNvbnRpbnVlO3hbaVtkXV09bnVsbH1lbHNlIHhbaVtkXV09bCYmKCJuIiE9PXYudHx8Im4iPT09di50JiYhMSE9PWYucmF3TnVtYmVycyk/dTphdCh2LHUsZik7bnVsbCE9dSYmKGg9ITEpfX1lbHNle2lmKHZvaWQgMD09PW8pY29u'@;
put 'dGludWU7bnVsbCE9aVtkXSYmKHhbaVtkXV09byl9fXJldHVybntyb3c6eCxpc2VtcHR5Omh9fWZ1bmN0aW9uIGVpKGUsdCxyLGEpe3ZhciBuPTE7aWYoIXIpZm9yKDtuPD02NTUzNSYmLTEhPWUuU2hlZXROYW1lcy5pbmRleE9mKHI9IlNoZWV0IituKTsrK24scj12b2lkIDApO2lmKCFyfHxl'@;
put 'LlNoZWV0TmFtZXMubGVuZ3RoPj02NTUzNSl0aHJvdyBuZXcgRXJyb3IoIlRvbyBtYW55IHdvcmtzaGVldHMiKTtpZihhJiZlLlNoZWV0TmFtZXMuaW5kZXhPZihyKT49MCl7dmFyIGk9ci5tYXRjaCgvKF4uKj8pKFxkKykkLyk7bj1pJiYraVsyXXx8MDt2YXIgcz1pJiZpWzFdfHxyO2Zvcigr'@;
put 'K247bjw9NjU1MzUmJi0xIT1lLlNoZWV0TmFtZXMuaW5kZXhPZihyPXMrbik7KytuKTt9aWYoZnVuY3Rpb24gVmYoZSx0KXtpZihlLmxlbmd0aD4zMSl7aWYodClyZXR1cm4hMTt0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWVzIGNhbm5vdCBleGNlZWQgMzEgY2hhcnMiKX12YXIgcj0hMDty'@;
put 'ZXR1cm4gZnAuZm9yRWFjaChmdW5jdGlvbihhKXtpZigtMSE9ZS5pbmRleE9mKGEpKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWUgY2Fubm90IGNvbnRhaW4gOiBcXCAvID8gKiBbIF0iKTtyPSExfX0pLHJ9KHIpLGUuU2hlZXROYW1lcy5pbmRleE9mKHIpPj0wKXRocm93IG5l'@;
put 'dyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8IityKyJ8IGFscmVhZHkgZXhpc3RzISIpO3JldHVybiBlLlNoZWV0TmFtZXMucHVzaChyKSxlLlNoZWV0c1tyXT10LHJ9YWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtkYXRhOmV9KT0+e2NvbnN0e2RhdGE6dCxvcHRzOnJ9PWU7dHJ5'@;
put 'e2NvbnN0IGE9STAodCxyKTtwb3N0TWVzc2FnZSh7ZXZlbnQ6InJlYWRpbmdfZW5kIix3b3JrYm9vazphfSl9Y2F0Y2goYSl7YS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikmJnBvc3RNZXNzYWdlKHtlcnJvcjphfSl9fSl9KSgpOw==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=favicon.ico;
filename filecode temp lrecl=96132;
data _null_;
file filecode;
put 'iVBORw0KGgoAAAANSUhEUgAAApgAAAJ6CAYAAACMvTJAAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr+kEBJaIAJSQm+CFOnSe0c62AhJgFAiJAQVO7Ko4FpQEQFR0RUQRdcCyKIidmUR7P1hQWVlXSzYUHmTArq+dt49Z/75cufeO9+d3JkzA4CiNSsnJwtVAiCbnyeICvBmJiQmMUmP'@;
put 'AAY0AB0YAiUWW5jjFRkZCqCM9X+XdzcAIu6vWopj/ev4fxVlDlfIBgCJhDiFI2RnQ3wYAFydnSPIA4DQBfUGc/NyxHgIYlUBJAgAERfjNClWF+MUKZ4ksYmJ8oHYEwAylcUSpAGgIObNzGenwTgKYo7WfA6PD3E1xO7sdBYH4nsQT8rOngOxIhli05Tv4qT9LWbKeEwWK20cS3ORCNmXJ8zJYs3/'@;
put 'P5fjf0t2lmhsDn3YqOmCwChxznDd6jPnhIgxFeJ2fkp4BMQqEJ/ncST2YnwnXRQYK7MfZAt94JoBBgAo4LB8QyDWgpghyoz1kmFblkDiC+3RcF5eUIwMpwjmRMnio/n8rPBQWZyV6dygMVzDFfpFj9mk8vyDIIaVhh4uSI+Jl/JET+fz4sIhVoC4R5gZHSLzfVCQ7hM+ZiMQRYk5G0L8NlXgHyW1'@;
put 'wdSzhWN5YVZslmQuWAuYZ156TKDUF0vgChNCxzhwuL5+Ug4Yh8uPlXHDYHV5R8l8i3OyImX2WA03KyBKus7YAWF+9JjvlTxYYNJ1wB5lsIIjZXO9y8mLjJFyw1EQCnyAL2ACEWwpYA7IALzuwZZB+Es64g9YQADSABdYyjRjHvGSET78RoMC8CdEXCAc9/OWjHJBPtR/GddKv5YgVTKaL/HIBE8h'@;
put 'zsY1cXfcFQ+FX0/YbHEn3HnMj6k4NivRj+hLDCT6E83GebAh6yzYBID3b3QhsOfC7MRc+GM5fItHeEroJTwiXCf0EW6DOPBEEkVmNZtXKPiBOROEgT4YzV+WXcr32eHGkLU97o27Qf6QO87ANYElPgVm4oV7wNzsofZ7hqJxbt/W8sf5xKy/z0emVzBXsJexSBn/Z3zGrX6M4vPdGnFgH/KjJbYS'@;
put 'O4Sdw05iF7B2rAUwsRNYK9aFHRPj8Up4IqmEsdmiJNwyYRzemI11o/WA9ecf5mbJ5hevlzCPOy9PvBl85uTMF/DS0vOYXvA05jKD+GyrSUxbaxsnAMRnu/ToeMOQnNkI4+I3XW4HAM4lUJn2TccyAODoUwDo777pDF7Dcl8HwLEetkiQL9WJj2NAABSgCHeFBtABBsAU5mMLHIAr8AR+IBhEgBiQ'@;
put 'CGbBFU8H2ZDzXLAQLAPFoBSsA5tAJdgGdoJ6sA8cBC2gHZwEZ8El0AOug7uwLvrBCzAE3oERBEFICA2hIxqILmKEWCC2iBPijvghoUgUkogkI2kIHxEhC5HlSClShlQiO5AG5FfkKHISuYD0IreRh8gA8hr5hGIoFVVFtVFjdDLqhHqhIWgMOhNNQ3PRArQIXYNWoLXoXrQZPYleQq+jfegLdBgD'@;
put 'mDzGwPQwS8wJ88EisCQsFRNgi7ESrByrxZqwNvg/X8X6sEHsI07E6TgTt4S1GYjH4mw8F1+Mr8Yr8Xq8GT+NX8Uf4kP4VwKNoEWwILgQgggJhDTCXEIxoZywm3CEcAbum37COyKRyCCaEB3hvkwkZhAXEFcTtxL3EzuIvcTHxGESiaRBsiC5kSJILFIeqZi0hbSXdIJ0hdRP+kCWJ+uSbcn+5CQy'@;
put 'n1xILifvIR8nXyE/I4/IKckZybnIRchx5ObLrZXbJdcmd1muX26EokwxobhRYigZlGWUCkoT5QzlHuWNvLy8vryz/DR5nvxS+Qr5A/Ln5R/Kf6SqUM2pPtQZVBF1DbWO2kG9TX1Do9GMaZ60JFoebQ2tgXaK9oD2QYGuYKUQpMBRWKJQpdCscEXhpaKcopGil+IsxQLFcsVDipcVB5XklIyVfJRY'@;
put 'SouVqpSOKt1UGlamK9soRyhnK69W3qN8Qfm5CknFWMVPhaNSpLJT5ZTKYzpGN6D70Nn05fRd9DP0flWiqolqkGqGaqnqPtVu1SE1FbUpanFq89Sq1I6p9TEwhjEjiJHFWMs4yLjB+DRBe4LXBO6EVROaJlyZ8F59orqnOle9RH2/+nX1TxpMDT+NTI31Gi0a9zVxTXPNaZpzNWs0z2gOTlSd6DqR'@;
put 'PbFk4sGJd7RQLXOtKK0FWju1urSGtXW0A7RztLdon9Ie1GHoeOpk6GzUOa4zoEvXddfl6W7UPaH7B1ON6cXMYlYwTzOH9LT0AvVEejv0uvVG9E30Y/UL9ffr3zegGDgZpBpsNOg0GDLUNQwzXGjYaHjHSM7IySjdaLPROaP3xibG8cYrjFuMn5uomwSZFJg0mtwzpZl6mOaa1ppeMyOaOZllmm01'@;
put '6zFHze3N082rzC9boBYOFjyLrRa9kwiTnCfxJ9VOumlJtfSyzLdstHxoxbAKtSq0arF6OdlwctLk9ZPPTf5qbW+dZb3L+q6Nik2wTaFNm81rW3Nbtm2V7TU7mp2/3RK7VrtXUyymcKfUTLllT7cPs19h32n/xcHRQeDQ5DDgaOiY7FjteNNJ1SnSabXTeWeCs7fzEud2548uDi55Lgdd/nK1dM10'@;
put '3eP6fKrJVO7UXVMfu+m7sdx2uPW5M92T3be793noebA8aj0eeRp4cjx3ez7zMvPK8Nrr9dLb2lvgfcT7vY+LzyKfDl/MN8C3xLfbT8Uv1q/S74G/vn+af6P/UIB9wIKAjkBCYEjg+sCbQdpB7KCGoKFgx+BFwadDqCHRIZUhj0LNQwWhbWFoWHDYhrB74Ubh/PCWCBARFLEh4n6kSWRu5G/TiNMi'@;
put 'p1VNexplE7Uw6lw0PXp29J7odzHeMWtj7saaxopiO+MU42bENcS9j/eNL4vvS5icsCjhUqJmIi+xNYmUFJe0O2l4ut/0TdP7Z9jPKJ5xY6bJzHkzL8zSnJU169hsxdms2YeSCcnxyXuSP7MiWLWs4ZSglOqUIbYPezP7BceTs5EzwHXjlnGfpbqllqU+T3NL25A2kO6RXp4+yPPhVfJeZQRmbMt4'@;
put 'nxmRWZc5mhWftT+bnJ2cfZSvws/kn56jM2fenN4ci5zinL5cl9xNuUOCEMFuISKcKWzNU4XXnC6Rqegn0cN89/yq/A9z4+Yemqc8jz+va775/FXznxX4F/yyAF/AXtC5UG/hsoUPF3kt2rEYWZyyuHOJwZKiJf1LA5bWL6Msy1z2e6F1YVnh2+Xxy9uKtIuWFj3+KeCnxmKFYkHxzRWuK7atxFfy'@;
put 'Vnavslu1ZdXXEk7JxVLr0vLSz6vZqy/+bPNzxc+ja1LXdK91WFuzjriOv+7Geo/19WXKZQVljzeEbWjeyNxYsvHtptmbLpRPKd+2mbJZtLmvIrSidYvhlnVbPlemV16v8q7aX61Vvar6/VbO1is1njVN27S3lW77tJ23/daOgB3Ntca15TuJO/N3Pt0Vt+vcL06/NOzW3F26+0sdv66vPqr+dINj'@;
put 'Q8MerT1rG9FGUePA3hl7e/b57mttsmzasZ+xv/QAOCA68Mevyb/eOBhysPOQ06Gmw0aHq4/Qj5Q0I83zm4da0lv6WhNbe48GH+1sc2078pvVb3Xteu1Vx9SOrT1OOV50fPREwYnhjpyOwZNpJx93zu68eyrh1LXT0053nwk5c/6s/9lT57zOnTjvdr79gsuFoxedLrZccrjU3GXfdeR3+9+PdDt0'@;
put 'N192vNza49zT1ju19/gVjysnr/pePXst6Nql6+HXe2/E3rh1c8bNvlucW89vZ91+dSf/zsjdpfcI90ruK90vf6D1oPYfZv/Y3+fQd+yh78OuR9GP7j5mP37xRPjkc3/RU9rT8me6zxqe2z5vH/Af6Plj+h/9L3JejAwW/6n8Z/VL05eH//L8q2soYaj/leDV6OvVbzTe1L2d8rZzOHL4wbvsdyPv'@;
put 'Sz5ofKj/6PTx3Kf4T89G5n4mfa74Yval7WvI13uj2aOjOSwBS3IVwGBDU1MBeF0HAC0R3h16AKAoSN9eEkGk70UJAv8JS99nEnEAoM4TgNilAITCO0oNbEYQU2EvvnrHeALUzm68yUSYamcrjUWFLxjCh9HRN9oAkNoA+CIYHR3ZOjr6ZRckexuAjlzpm08sRHi/324mRt2XRobAD/JPCotuA2JA'@;
put 'n4YAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y'@;
put 'Mi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2NDwvZXhpZjpQaXhlbFhEaW1lbnNp'@;
put 'b24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42MzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSHKtHgAAABxpRE9UAAAAAgAAAAAAAAE9AAAAKAAAAT0AAAE9AACKlRxL/UIAAEAASURB'@;
put 'VHgB7L0HgNxmeqb5FVChIzuRTTZzzlESRUVSFCUqzIwmjyZnx71zWO96b89h7b31ede+27O9DjOe8eSo0USlURxpGESKYhBzzqFJdrNzqADg3g/FoppUk6zuQlWjUC+kZmXgx/OjUC++GFq25v2OcCEBEiABEiABEiABEiABjwiEKDA9IsnVkAAJkAAJkAAJkAAJuAQoMHkgkAAJkAAJkAAJkAAJ'@;
put 'eEqAAtNTnFwZCZAACZAACZAACZAABSaPARIgARIgARIgARIgAU8JUGB6ipMrIwESIAESIAESIAESoMDkMUACJEACJEACJEACJOApAQpMT3FyZSRAAiRAAiRAAiRAAhSYPAZIgARIgARIgARIgAQ8JUCB6SlOrowESIAESIAESIAESIACk8cACZAACZAACZAACZCApwQoMD3FyZWRAAmQAAmQAAmQ'@;
put 'AAlQYPIYIAESIAESIAESIAES8JQABaanOLkyEiABEiABEiABEiABCkweAyRAAiRAAiRAAiRAAp4SoMD0FCdXRgIkQAIkQAIkQAIkQIHJY4AESIAESIAESIAESMBTAhSYnuLkykiABEiABEiABEiABCgweQyQAAmQAAmQAAmQAAl4SoAC01OcXBkJkAAJkAAJkAAJkAAFJo8BEiABEiABEiABEiAB'@;
put 'TwlQYHqKkysjARIgARIgARIgARKgwOQxQAIkQAIkQAIkQAIk4CkBCkxPcXJlJEACJEACJEACJEACFJg8BkiABAJBwHEcMc2QmGFbwtGQhCM27ockEnMkHBOJRHGL52OVtlRW2VJW5UhZpT7W53G/PCTRCkdC+O+GC162EiL9vY4k4yGJ9+OvRx+HpKcTt90hSeA5Ky6SSuI+3qvvTyUMsZL4DJ6z'@;
put 'UrqFm2znhoPgiyRAAiTgbwIUmP6eH46OBEgAOiwCsRgpE4mVO64grKjCfQjDimo8rtDnRaJ4LVrmuILSjAhEo4hpiBhh/BkG/iDp8E9IHLHtNFbbdtw70KaiAhUvZbdgTFgdVog7+r/7l34yvQUR27Lxh1tszMF2kokQBCfEJv5SEKb9EKAJiNI4/vp7DOntdiBUcb/r8nN9+j5DUimIXt0AFxIg'@;
put 'ARIoIgIUmEU0WRwqCQSVQCjkSLlaFGFBrKh1ZFSDI1U16fsV+jwEZQRWyDCskZGwIWYEMi6juSAKIeH0H1ckqk7URUXdFb145U76tYL9e3mMeuPeNdJPGHqL/43LAlXHo0N0LAeC0oYYtcVSyyj+etU62mVId4dIT7uBPzwHS2lPZ0iSeN1x0uvUdXAhARIgAb8QoMD0y0xwHCQQeAJqXRRYHW2p'@;
put 'qheprrelpt6RStxW1YorLqNwU0diEJBwdeuiVkUHwtG1NEIwXjY8ptVYUHmltSesrek7KkYzQlRFqA2LZjKekr5uQ/p6HAhPU7pbRbouhaSzNS1A1U2fhBv+pu7+oDLkfpEACYw4AQrMEZ8CDoAEgkfAhFtahaRaIkc12lI7xpHqBkuqa+DOhkUyVhZ24yPThkeISFju1PLoCsmRsjYWyzRcNlhe'@;
put 'EZ5m2hKq2Ky4Lf39DuJARbph6Wxvgei8gFv86WMVpY59eQXFsr8cJwmQQFESoMAsymnjoEnAHwTUwhhBvGNlLayREJH14yAqxzpSOxqJNDVIoIFFUt3Zqh4zlkiKyDzOnWpHuN3VABxCgpMbD4r7qbiFWE+Izg5HOi4Y0nbelLaLAvEJiydc7bZF0ZnHWeGqSaAkCVBgluS0c6dJYHgEDI2VRGJN'@;
put 'TaMjDeNtaWiCoMT9asRLRitMJNVArMAsqRZJ5LjAJElz5PBIe/wpFZwqPDE/IVg89b4FV3tfry29bQ7EpiGtZwy51GxAgGrSEWM7PZ4Bro4ESo4ABWbJTTl3mASyJ2AY6tqGmISQHD0RgnICXN6Imyyv1jJABvQjxCSECvQkxWT2WP3zTgjO8GXRqZbPVMKCGx1WTrjW284ZcvEUROc5uNcvocQS'@;
put 'Xev+mTeOhASKgAAFZhFMEodIAoUiYJrpDO6GCbY0TlFBaSMZR7O7w9AfaTe3pdnZapmkcbJQ01K47ailE4LTtXSmIxtgzbSksw1CExbOC8dD0noWVk4kFdmWW6ipcGPjlkiABIqKAAVmUU0XB0sC3hIIwUJZhfjJMRMdaZzqyGgIylGjYaGshB/VdXUjfk/FJF3d3oIvprUNtHIiL70PgrPrkrgu'@;
put '9fPHDWk5bbgC1EHNTy4kQAIkkCFAgZkhwVsSKAkC6cLkGj85biqslPirHWMj49uE5QqSEiIhpVXIr9QDKgko3MmhEMBxEtaC9e41iNbptKTjvMgFuNObj4Wk5YyJgvHIVqeFeyhU+V4SCBwBCszATSl3iASuJqBWyuo6WCinODJ+puXGUlbVaXccLVmD0jZaIogWyquh8VH2BNTCibR1vUDRxCHN'@;
put 'VG89G5LmI6ach0u9HQlEzFLPHiffSQJBIUCBGZSZ5H6QwAACZlhLBjkybrolTbNsqUctysoaFKeE21sLdWscJWMoBwDjXW8IZGI4VXAiaSgO6+YlZKU3Q2g2HzZh3Uz3aUekpzfb41pIgAR8S4AC07dTw4GRwNAIRNFGsX6CJRNm2tI0A7UoUT6orNx0M73VskQr5dB48t0eEBhg3Uyh/WUnug2p'@;
put 'G/2Mis0T6l6H0GSrSw9AcxUk4D8CFJj+mxOOiASyIqBFzmNlIg0oHzRxliXjYamsGYNWi1HUMITrW3ta00qZFUq+qRAEoCU1O91AAXgLsb49bbacg8g8cwCudIhOt8sQxWYhZoLbIIGCEKDALAhmboQEvCNgRhwZo5bKOY4rLGsaL4tKTdDR6uZMrvAONteUNwIG3OgmxKbmlHWh2PuF4yKnDkJs'@;
put 'InaztwebpdjMG3uumAQKQYACsxCUuQ0SyJGAgfqUdYipnDQbwnK2dtBBi8YyJOlQVOZIlh/3A4EQxKYmCmlocNclWDaPGXJ6ryHnjpuS6NMRMmbTD/PEMZDAUAhQYA6FFt9LAgUkoIXNq2odCEpLpsyH1XKSjXaMSNWl+7uAs8BNFZpAxrJpIcRDOwqdOWjIyX3oKoRC71aCQrPQ88HtkcBwCVBg'@;
put 'DpccP0cCeSDgxlWWizRNs2TyAhtlhWypqjHh9XYQUwnzDssJ5YE6V+lLAtCSrtiEZTMZt6UFpY9O7Ydlc78p7RCejkWx6ct546BI4DIBCkweCiTgAwLqAteC51MX2jJhnpYVciQcNhBTCWnpNvr2wSA5BBIYKQLQkvp9EPzf3+Wg7JHI8V2mnD1sSH+vCk2KzZGaGm6XBK5HgALzemT4PAnkmYBa'@;
put 'K8sqHNSpdGTGopQ0ThOpqEIcGuIqLSbr5Jk+V1+sBNxe6UgO0koJHS0O3OchObHHlEvokW7Rqlms08pxB5AABWYAJ5W75G8C2lmnZowjUxdZMnW+JbVjUboF5VtYq9Lf88bR+Y+Aljwy4UKP99pyHiWPju40ELMZln7NQqdV038TxhGVFAEKzJKabu7sSBIIwQ3eiESdOStSMnEmrJfV6SxwWitH'@;
put 'cla47UAQ0ILul62a7RccOYEMdHWht51nT/RAzC93oigJUGAW5bRx0MVCwE3agRt84hxbZt1iSeNkR6IxxlYWy/xxnMVHIGPV7O9x5PiekBzZhtqap/RijnGaxTebHHExE6DALObZ49j9S0BLDNU4Mg1u8BnLbNSwRH5CyJBkEgGWLITu33njyAJDQGM1IxFD4nFLLsB9fnir6RZyj/fCeR6i2AzM'@;
put 'RHNHfEuAAtO3U8OBFSMBrV1ZN9aWGbfYMm2hJdUNJmIrbbG1xBAXEiCBwhOAlowgA11LfV06J3L4LVOOvRWSng6kpDNOs/DzwS2WDAEKzJKZau5oPglo4s6YyYivvM2SSXNtZIObkoSwZImhfFLnuklgaARc9znEZmeL5cZoHt5uSPsFjdOkRXNoJPluErg5AQrMmzPiO0jgugS0fuW4GZbMXY4W'@;
put 'jkjciZWjtV0S9VNYEP26zPgCCYw0AW1NqVbNnk5LTqJT0MHNprSgU5BjU2iO9Nxw+8EhQIEZnLnknhSQgAlhOXGOJXPusKVpqiXhSJjxlQXkz02RgCcEEKcZRZxmX68lZw+FZP8bYTl/3EAtWgpNT/hyJSVNgAKzpKefOz9UAmbYlsnoCz5vhSVjpkBYmhSWQ2XI95OA7whonGYUYS1ICDp7JCQH'@;
put 'NoflDLoEUWj6bqY4oCIiQIFZRJPFoY4cgbSwtGXuClvGTnXcLFRN3mFG+MjNCbdMAp4TUKEZMSWVTKEdZVj2bwrJ6QNI1KNF03PUXGHwCVBgBn+OuYc5EDBNWyaiN/j8OwcIS42x5EICJBBcApeFpjZBaD4Wkn2vG3IKQpMWzeBOOffMewIUmN4z5RoDQECTdybOtGT+PbaMmwaLpbZypLAMwMxy'@;
put 'F0hgCAQgNMOwaFpWSs4dMmXvJkPOHqbQHAJBvrWECVBglvDkc9ffSUDbOTZNsWXePSlkhdtu8k6KxdHfCYrPkEApEbgsNNV1fvqQIfs3huUckoHYHaiUDgLu61AJUGAOlRjfH0gCBupY1jfZsuDelEyeq+0cEfBPYRnIueZOkcCwCVx2nSeQDHTqQEj2rtfyRrBosrzRsJHyg8ElQIEZ3LnlnmVB'@;
put 'QDvGVY+GsLwrJdOWoEB6BepYJtjOMQt0fAsJlC4BnDeiyDrv67FRsF1kz+th6WDB9tI9HrjngxKgwBwUC58MPgFHyqscmYNyQ3NQJL26lgXSgz/n3EMS8JjA5Tqa3SjYfuhNuM5RR7OnHeqTLSg9Bs3VFSMBCsxinDWOOScCkYgjU5elZCEywxuaDLZ0zIkmP0wCJJDpDNR20ZZ9KG10ZFtY+ntD'@;
put 'bjkz0iGBUiVAgVmqM1+C+62Z4ePR1nHRKiTyTLPdbo52yilBEtxlEiCBfBAw0ILSRAvKCydt2bXOlFP7kIGeUosmFxIoPQIUmKU35yW3x6GQIzWNtixamZRpC1F2BLFTKY2z5EICJEACeSBgov2kbdtyen9Idr8Wlovoc85EoDyA5ip9TYAC09fTw8HlQsBxHKmoEpm9IiXz7rCkahQTeHLhyc+S'@;
put 'AAkMgQAMl9oVqK/PkiNbDdm70ZSuNgMroEVzCBT51iImQIFZxJPHoV+fgBl2ZPI8SxbfZ8no8Yak0JHDsegOvz4xvkICJJAXApcTgdouWrJnvSFHtkckmaDIzAtrrtRXBCgwfTUdHEyuBNQdXj/OlsWrbZk83xIjZCAGiq0dc+XKz5MACeRGQOMz9e/sEZGdvzJZqD03nPx0ERCgwCyCSeIQb05A'@;
put '3eFllSJz1R1+J93hNyfGd5AACYwEAY0B10Lth+E2370+LN1tas2kRXMk5oLbzC8BCsz88uXaC0DAzQ5HW8clq1Mybgrd4QVAzk2QAAnkQgChmFHEZ7Zd0GxzuM13hMVKUmTmgpSf9R8BCkz/zQlHlDUBR6rqHJQdSsmspbaYUbjDk3SHZ42PbyQBEhhRAuoy125iJw/Abf5KBG0nQ+I4FJojOinc'@;
put 'uGcEKDA9Q8kVFZKAGbZl6mJYLZHEUz/WcF1OwhyeQk4Bt0UCJOARgXAM2eZdlux93ZR9aDuZ6KPI9AgtVzOCBCgwRxA+Nz10Anq1XzPGkqX3Q2AugrUSotJmdvjQQfITJEACviKg3YDCpoHkH1t2vBRmEpCvZoeDGQ4BCszhUONnRoSAiRaPs27RTjwpqalnTcsRmQRulARIIK8EwijSHo/bcvAN'@;
put 'Q/agG1BPl8GWk3klzpXniwAFZr7Icr2eEXBLD421ZemDFmpbwmhpO7RaekaXKyIBEvAdgcu1M5vRcnL7iyhpdNTEOY9uc9/NEwd0QwIUmDfEwxe9IKACMYzC52ZYxIg6KMiRPlGqUEyhT6+N7Ekrpd7ud55ATbx/1rIUYi1TSOgJSxLlPbiQAAmQQCkQ0JaTyYQjBzZnrJmaFPTO82QpsOA+Fh8B'@;
put 'CszimzMfj9iRylr0/R5tS22j9v9Glne1LVG0aywrg7iEiztk4A/Fz1VLhhBCaaHDTjIBl1CfSH9XSLo6DOlqEem4COGJ1xfcjVjL+bBYYq/ZicfHU8+hkQAJ5IfAZWvmeVgzt72I2Myj6GtOa2Z+WHOtnhKgwPQUZ+mtLFpmy+iJtjTNsGTsFJFRDSh4XoVg9bD23H3bne0meOMf93YAJvdaXPUm'@;
put '7hiGxhrph0SSKQslh9DLN3a5E8+1HxywDt4lgaESuMoIdPmBeyzqiq7cuclaBx7PKPR/ZRn4/JUneYcEciOg1sxEwpYDGw3ZtT4i8d5sD9TctstPk8BwCVBgDpdcCX/OMEUap6RkynxbJs52pLpeRAPTNZs7pRndcH3nurg60/0n1zXx80En4P7MwsqjC65R8A9a8qlKTBvK3edV/zn6HyIsbJjG'@;
put 'bbQPtS0cs3jBsWEtx3Fr41at5LbWIbzJIaxGeC3w795ie2qZN3S7JuqxYhAGLrBC+J5oOEh6fFilrlPH4W7THVD6q6KPb7I9dyf4DwngGIvgXHv2iCNbnzel5TSOYRy3XEjAjwQoMP04Kz4dU7TclikLLZl9K6yW421YFxETicLmdF37dMICMqy0QIN4U8GoVu6McIQosyAWk8i41RjeOGoHpuIh'@;
put '3DrS3yuoJYjQix48j+cSsPYk+/FcHJ9BSEYqhYuhBGJ/ITjVUu4gBsO9LsI67SzCfF2LOwSkKkYznB6bhoBEEGdsRnDBFcNfFBb4Mlj08RetwB/CRGIVCBep1Pvpx5EY4pNjKhqwDl0PVuxqTR2PCmGNDdGteHDRll4T/w0CAW032d9tyVu/NhGfaeJYxpeCCwn4jAAFps8mxI/DiZZZKA9ky5wV'@;
put 'ttShqLmNHzsLFqCbWXn8uC8ck38JuJ5qWGhMtQhqhxNXQDoQhRCREId9PRCOiNPt6dA/Q3o7Q9Lbhdjd7hAEZVpAppAwZkNspmMt/Luvhlo8kfgWU6FZrqJTpHwUYpjxV1GTvtX7KkzLIEo1VCQMAeooJFcEqwUWd9L/+3dHObK8EdDviH5XTuwTWDPD0n4RIhPHAxcS8AsBCky/zIQPx6Fuv2mL'@;
put 'LVm80paG8WrtUdciz2A+nKqiGlLGZayu5BBEU0ZIxvtTEodY7IFw7LhgSMclke4WU7rbVVymrZBqqfS7ePRqMtRiG47ZUo4kuSokz2kC3Sgk0FXX6WMbVRVgES2DyID1U5lk3P9q7aTL3atZ8P96IugC1H7Rkm0vmHJyH3qaozIHFxLwAwEKTD/Mgu/G4Ej9OFtueTAlk7TuJMZnJyksfTdNRTCg'@;
put 'a8WkKp8UEhXUha2WyI6WkLRdCEknqgZ0tqhVEglecYMC6SZzayL+s0ItnhCdtWNQsWEc/hosiE9YPKu1aoOJUAKITjgaUrgwFFg7+Q2+CdQiflljfh3EU+zdZMquX6HtJC7IWM6oiCc0IEOnwAzIRHq1GyHDlnl32LL4viR+wMKIacsiIM2rjXM9RU/AFZSXW95p/VONdezvtaX7kiFtEJGtZwxp'@;
put 'P49yVK1wa+NH0GK5FQ/nPO1uV+tmLRoT1EN06m3NaJEKiM4o3OyaAOVgTjR2VWt/UXR6iH+kV4UvXxSxmWeQAPTmLw0kAJm4UKM1c6SnpZS3T4FZyrM/YN/VvlGF2K/lj6ZkxmK1euAZjfHiQgI3IKA/X24smFuWynETbrphheyAiGyBmLx0FsKyGS7ubtNNqLnBqvhSPgjAYhxDfGdVHcJcmhxp'@;
put 'QEmxBngnqhs07lNj+C7HVKuVk4IzHzNQ8HVqAlBvpy1bXzLk2A4YCRCXzIUERoIABeZIUPfbNmFpapxky13vs6RhgiZL0Grptynyy3jcn6rLFkoNntQMbo2RbD0bkgsnDdwidhLxk5rRzcWfBExkv1fUWq6Fc8zkdEUIbYxQVmWIaaqrFRZOCk5/Tl6WozLwHdXv5wG4zHfAZd6L5Di6zLOEx7d5'@;
put 'RoAC0zOUxbkidWNORj3LOx9LIYsVLkvEx3EhgYEEtCyQCg+9TSEWt6fTkfZzITl33ICoRBzlRRMlgSgoBzIrpvuamF4Jt7paOMdMsWTMZEfqxtjIXtc5h4XTrRnKGM5imlN3rJjXjMt8y7Ome/FHl3nRzWJRD5gCs6inL7fBa5b4zFtTcsejlphRLe9Cl3huRIPxaVcqagZzGDFc+K+/N+VaJZsh'@;
put 'KM8fxw/VGS0PRItIMGb7nXuhFk51qY+BV6NpOiycuK2qD0GspJOG1LqpyUNcioOAusy72y2UMorI8d3aGY0Xg8Uxc8U/SgrM4p/DYe2BistZt1ly57tR90UD/xlvOSyOQfmQ/uRkYiltCAi1UraeCsmZo6Y0Hwu55YLQvZNLCRKIlaeThZpm2DJuakrqmxC/WYEsdZg+U3pQMHbT90eFusy1g9Tu'@;
put '9cgyfzWM2rIUmb6ftAAMkAIzAJM41F3IWC7veg9+HLR+HmKuuJQegbSoRNwdalFqUldXqy0X4fI+fcB04ym722mlLL2j4sZ7rO0xR9U7Mg6WzfGzYN2cYKM4PDoQIYQilaTYvDG9EX4VhoQIkvGO77Vly7Nh6URlB1TuH+FBcfNBJkCBGeTZHWTfNOZyygJb7v1gUgwUaKblchBIAX7KFZUaUwn3'@;
put 't4rKbojKc8cMOX3QkIsn0vXzArz73DVPCaTrcI6basnEOY6MRfxmZQ36sFNsekrZ65VpYfbWs7Zsetp0Q14c9jL3GjHXd5kABWYpHQoQl2MnOXL/J+MoXaLB+7RclsL0uzaKyzGV6v7uaHPkAuIpT+6FqDxJUVkKx0Ah9rGyxpax0yyZNEBsapKQRTd6IfAPaRtmxEAdWlveRPefI1vDaP9LS+aQ'@;
put 'APLNWRGgwMwKU/G/SZM1RiFTdM2nU1LXxGzx4p/Rm++BZgebl+tTakzlRZQROr43JM2Iq+zthOLkQgJ5IqDF3sfPdCA2kzJ6CiydVZowph3BkCCUp21ytUMjoDHX2jJr16uGvPVahMk/Q8PHd2dBgAIzC0hBeEsk4sg9H0rI9KUG61wGYUKvsw9qhwjBRWmERRL9trSeFjm535BT6FHc2UpReR1s'@;
put 'fDpPBDQkR/unT5pny+R5joxusiVcpt4TaBvNRs/TdrnaLAnghBFBlvnhbSJvPIMLz27GXWdJjm/LggAFZhaQiv0tIdOWBXdZcvu7UMeQrR+LfToHHX/GWmkjYauzzZYz+005tgexVqdZlmRQYHyy4ARMXOSOmaB1d5Myaa4j1Sh9pNnNllo1qTQLPh8DNxhB7/rmo7Zs+ElE2tHSFZepA1/mfRIY'@;
put 'FgEKzGFhK6IPwYIwZoIlD34uhStVZowX0czddKjuzwAyQzVZK9HjyPlTgjp3ppsF3oc6lVxIwK8EyqscmTgrJVMWatwm2lmWw6qJJHRaNUduxsJI/ulssWT9T8Ny/miYon/kpiIwW6bADMxUDr4jkZgtqz+eRJYnyojQejk4pCJ7VqWjgSB9/QXoanfkNKyVR3cY0oI2jbZFYVlk01nSwzVwAVyH'@;
put 'UkfTITQnzUvJqAaEd+CiyUL3IFo1C39o6MVqsldkMzr/HN1hMvmn8FMQqC1SYAZqOq/eGa13Oef2FHqMj6xr3LW0wRWmrQa1OPOVnrj4BdGOIDZu1bXLgKyr5+/aR2k3eLq8UOsZR47tNOUEMsF72hlbeS0rPi4+AuXVSAqabcm0pZY0TtbYwLTQZCH3ws6lm/yD8/FbSP7ZieQfXrQWln+QtkaB'@;
put 'GaTZHLAvmjVejbIhj/xGQirqDHEKXJJIxZDGV2kP6wQsp71d6GHdJRLvgTu3HyIT/0XLbYlWog9ytYi6zGJlKJeB2owpWC8oNtOT6Ypz6EcD2eCJXlvOomblkW2mnD0CS0OcwnLAIc+7ASGgsZpjJ1syY5lmoltSUYMMdD0lqFUzIPvo+93AiScCL8nezSJvPhfmucb3E+bPAVJg+nNech6Vdty4'@;
put 'ZU1SlqyBEOlHcFOBFrVShiEq4wjcbzkpcuYQivmi1WBHiymJPtWNKpkGLhCWldodxIbVAnFZs21pQK3OCrSiS+oPCgRnKS5pYQkZDpHe22nLqQMhOYx6dRdP4ce2NJGU4mFQ0vusrQ3rxzkybbElUxdaUtOAbwXc5yx1VKDDQkUm4jKP77Ll9V9EpKdjgPepQEPgZoqbAAVmcc/fdUbvSM0YRx7+'@;
put 'Yhw9g2G9VPdznhcVRG7xXojZ0/sMObAFYghFvG1YHoayqFu/fpwtM5ba+FFBTFY9+uZCrMKPPpTVFO17XWEJayXSsdDKzcHJPR0L1XaB1sqinVQOPGcClTXIPl+QkpmwajaMS3tH3OzznNfMFdyMgJthfsyWdU9GkATknqFu9hG+TgIuAQrMAB4Iar1ctiYlS9dI3q2XerpRo6QmnTQfdWT7S2Fp'@;
put 'PmbmThXB/zWwas5HeaXpt8KVHkW5HRWaAV2Uo7rBVUZ3XLDlyM6wHNsRkq42D1gGlBl3q/QIxMrh5UAy0Jxb0Ad9CrwlmhCk9TRL4/pzxCZcM8zbmm1Z/yQMB2dwscse5iM2F8W0YQrMYpqtLMaqbqVR9Y489IW4VNZCsOTRxeyKS7hwraQjezaasvs1uLUT3lraQtBX49F+btnaFOKyUCQ+obVM'@;
put 'sgBRJG95W1g6cqlZ5Og2Q44ieae3y1uORYKDwySBrAhEoojPnO3I7FuTMm6agXhBB0ITkecBOjdkBaKAbzJxkd+DGrsbfhqRs4fx20KRWUD6xbkpCszinLfrjjoE6+U8ZI7ficzxfMZeqjBy4wO7bdn8VERO7EHrmDwtmrBUhQxTFZmzb0FGvPrdi9yY6fKDxVLFcutZWw4hcefErrD0IQmKCwmQ'@;
put 'QHYEwrgAHTsrKfOWO9I0UxNThCWOskM3rHe5ZYz6HNn48wjCdygyhwWxhD5EgRmwydYr+wc/l5CxU/LnUk6LS0O6ECO4Di6TC4i1LMQSiTmy8J6ULL7Pgi7DKIowLvOKsASwtnMQltvVFW5SWBbiAOI2AkvAxClonCs0YdmcEZKwCk26zvMy36EwEq0SjmxGdvmhNzXDnxfFeQEdgJVSYAZgEq/s'@;
put 'Ar7nTXAnP/iZZLrTVx7cRa5Aglu865LIaz8KSwuymgu5hCO2zLvDklvWQmSqi6ZIfGLuKRgGyzCslpfOQ1hu1eSdMFzh7iuFRMhtkUBgCajQbJqZkrk4RzRNh9AMo8YuXeeez7dbKxO/L9teNGT3BnT9YYMHzxkHYYUUmEGYxcv7oMk9t61NyKL7EKuYh9JEaZEUkjg6Pbz6A4+SeYbBXy2Zi1al'@;
put 'ZMkqxF1pzUyfL1q6yYSw7O2y5ehbpuxFvGp3G2MsfT5tHF4REzAhLLXkmZ4nxkxCTQZciGot4DxccxcxpRyHjgQrFfQ7Xg7JW1qQPcWL5RyJBu7jFJgBmtJYmSUPfTEp9eO1Vpz3p1I9fdhwTb/+c1MOb8tfzGU2UxKrsGXFuyyZdStiTX3aAjPdeQc1QeO2nNwVkj2vh+XSucJafLNhyfeQQFAJ'@;
put 'RMscmb4UFs3bbZQ/Q0KihtWoRTOoO1zo/cKPQhgVRHb9GtbMFyIIS6DILPQU+Hl7FJh+np2hjA1lfRon2bIW8ZfaQcfrM6ieNkKwwh14QwUmApxGfEG2fIMjqz8BQT32cku5ER9TegCZLkY2Et5PHxbZs27krL0+QcJhkMCIEiivsmX2cr0gtd2C7W63MDg/KDQ9mBb8OLhdf14X2fJcRFJJikwP'@;
put 'qAZiFRSYgZhGzei2ZeGdltz+Hu+zx93TBdwhbRcceenrUent9od7V0MCJs+zZeWH8xdzOpTDw+UEcW+A1cWTtuzeGJaTu7XYPE+4Q+HI95JAvgiMakAMN86TM2DVjKFbmK3dwqgyc8eNU5x2/dm/yZE3nmVrydyBBmMNFJjBmEe4KRy590MJmbbEkJTHLmOVR45hyIYfm3IEGc9+WlxX+buTMusW'@;
put 'xJ16vN9D2U+NszTQIrPrki374Qo/iHqWiT5/CPGh7AffSwKlQGDMJEsWrrRkEmppmoj2YSKQN7OuXX8ObxWUMUJN5DjPf95QLd61UGAW79xdNfIyxCQ+8hsJGdWIgHYEs3u1uLY3WOTOHxd58ZuIsUn566QRQmjA2Cm23A9XebgMoy1w6SI3zhLCsr/fkWNvhWT3+jBEpr8YeXUscD0kECQCBs4d'@;
put 'k+dbsuDelDSiiYPN+ExPptcVmdsui8x+ngs9gVqkK6HALNKJu3rY6N893pFH0XvcQI0yLwOLXIEJAfX6Tw05uHVkE3uu3ue3H8XKbbnjMe1THCqYFVO5uKU6oDDPHbaRRRlFq0yeTN+eFd4jgeIgEMX5Y/ZtllvaaFQd6gfTbZ7zxKnIPLLNkQ0/o7s8Z5hFvAIKzCKevMzQ1Yo3ZYElqz9uuW0b'@;
put 'M8/neqsiyoGA0oLqv/xKFMXA/SmgDJQkmTTHklWPIxazAO3LXHc4Ep60Z7iWHDoM4Z1iiY5cDzd+ngRGlEDNGJQ1WpmSqQttiURRiYP1M3OaD4rMnPAF4sMUmAGYRk12WXhPUpY/Cgueh/Uv01Y6Qw7vcGT9kzHfktIad1V1jqz9VEJqkFGuPwz5WDLZ4cm4yBG4wzU7vJPu8Hyg5jpJYMQITJqL'@;
put 'bmGrbGmcorGZ6ba0+TmjjNguFmzDaXe5g8ojYUnQXV4w7n7ZEAWmX2Yih3FoUeHbH0nK/Hu8F5haSXfTz0NyYIs/3eMZbNFyR5aDwdzbvXeTu2ECMN5qEs/FkyHZ/kpIzhz0N48MF96SAAkMnYC6zefekZL5K2wpH4WLVi3STpU5dJD4BEXmsLAF4kMUmAGYxnxlkKuwSsL1++I3TLl4yt+CykQW'@;
put '/exbLcRi2ggT8K67jxsmgKDWODLCD2wOyT5kiMd5JR6Abw13gQRuTqBhvCVL70vJxHmGhEIoacQi7TeHNsg7IuUmzp+2bPqF1sn0Z6jVIMPmUzkSoMDMEaAfPq7i6sFPJ9CDFwXHE96IK1dY4Z+eDkH8ZUx6OvUZ/y4hw5GmGYhD/VjKLTviVaKTusW15/mR7SjT9DM/FJj37xxwZCQQRAImQpBm'@;
put 'LLPQgjclo+qRbc4koGFNcxiJP26dzKcgMhmzPiyGxfYhCsxim7FBxhuOWvIIWkQ2TEif/AZ5y5CfcuWkFldvRoLPV6OS8HtNMyQ61Y+F0P5sQmKVGL1H5YpcgYn2mEd3hGT9T6JD5sgPkAAJBINAzWhLFt+fkukLQ6ggwd7mQ55VnJbDUVP2rNeOPyhyb9GSOWSGRfYBCswim7DBhhstt+ThL6Bl'@;
put 'YlM6Vmiw9wz1ubTAFGk5HYLA1B6zfj8ZaOtIS9Z+JiWV9agF6lGiT8aCeQy9xNc9SYE51OOI7yeBIBHAmUVm3AKhiSLtNag5TGvmEGf3ssjc+Qp6l78chsh0f2mGuBK+vVgIUGAWy0zdYJz5FJitZ0Py3Ff8V2D9nTjSAvOhz6akoo4C8518+AwJkIBXBKrrbVn6QDJtzUR4DmMzh0BWRWbEkG0v'@;
put 'iux8LUKROQR0xfZWCsxim7FBxps/gRmSjouOPPuvcJH7PrGFFsxBDg0+RQIkkCcCV6yZqzU2M31Ry0zzLGFDZJpmCH3LDdm7KQyBTktmluSK6m0UmEU1XYMPNl8CU6ty9HVrDGZMutp87iJHDGbDOEce+EweYjA1yectkQ0/8W8t0MGPDD5LAiSQbwJaoP2WB5MyZb6BhECtmwmLZr43GoT1I8Zf'@;
put 'az9pjcwj2xGTaVNkBmFaB+4DBeZAGkV6Pxyx5aEvJNx+ul6X6LFwZfnSt01pPubvMkVXssg/jixyExPp0Rk+HYOJ7MctjrzxNGMwi/QrwmGTQF4JaC3iObdrbGZKyqohNFGgndbMmyPXdrsWGrCt+7EpJ/eYbsWOm3+K7ygWAhSYxTJTNxinlim6/xMJmTjHuzJFujm9ngxBrb3xnCN7N/hbXLl1'@;
put 'MG9LyZ2PiaQS1g1oDe2ltMA0ZNevUWD9ZZYpGho9vpsESotA42RLbllrSdN0GDJZziiryTfCaI7R68jL3w/LeRgyKMyzwlYUb6LALIppuvEgzbAtd70/JbNvy0MnH/TcPrHbkVe/72/3sHbeWPHuJIqtG5KMeyswbduQN5833CLrN54JvkoCJFDqBMoqHFl8XxIWTUdMXJM62gWo1KHcZP9NJP30'@;
put 'tNnyyncj0nIO4VgIS+JS/AQoMIt/DtHC0JFb1iRlyQMQmH0eiiuw0RNjb6fIc/8WlZ52f8Zh6ul7VH06/rKmwdte5GrBTCZM2fjTkBzf4+8wgQAcytwFEggMgelLUrLsAQvnJu1pjrMUVeYN59aMGnLprCO/+m5YOi6hc5LrQ7vhR/iizwlQYPp8grIZnsYfzkKbxHs+6EjKQ+udbjvjJt/8TLpN'@;
put 'YjbjKfR7NP5p6iLd/xRin7zduu5/b6/Iq9+NysXT/hTY3u4x10YCJOAVgbqxttz2CFpNzoLItBGX6U2jNa+G57v1hGOmnDtky69+GJH+bp5vfTdBQxwQBeYQgfnx7WplGzvNkgeRQe31VZ8KLMH3XAuuP/81f/aRjVU6svKDCZmEfsGexl9i121kp3deMOSFb0alr8ul4cdDgGMiARLwKYFIzJYl'@;
put '91sy73Y77TJnP/MbzlQELSWPbLdlw0+jCHfiOfeGsHz+IgWmzycom+G5LuJaWx75rYSUVyGD0aM2iZlt61fcMQy4iQ05vM1fbmIND5g4x5b7HkcqojvQzKhzv1XhrijPHRZ5+btltD7kjpRrIIGSJTBjqSXLHkxIdQ1a+mopI7rMr3ssqMjc/ZojW55nIfbrQiqCFygwi2CSshmilip68DNJGTfD'@;
put '20xy3bar26C22lF0/UXEYvb1+sd1UV5ly6rHUzJ+BrLHk976n1RgOo4m94Rkyy+ZQZ7Nccj3kAAJXJ9Aw3hL7niXJWOm4dzCLPPrg8K5N4wE0zeeDcme11mI/fqg/P0KBaa/5yfr0bmJPmhdtmSNt4k+mQGoyDTwhd+9AVeVz/ojozwctWXeHYhxethGLTVvxaXutwpMK2nKhp8bcmynFtfkQgIk'@;
put 'QAK5ESivcuTWB1Poaa4mTC3Mnk6mzG2twft0CIXY1Rv36x+H5cQu1sgsxhmmwCzGWRtkzCHECk6cY8n9n7TcvriDvCXnp1RwpZBEs+7JMIrijqyr3EBi09jplqx+3JJIOU7QiGvyclFB7YBpT1tIXvhWVLpa/WO19XI/uS4SIIHCE9DEzPl3oTA7yhnFyrQwuwY6cbmWgNbI7O9B0s93Y3L+JM7K'@;
put 'LF90LSJfP6bA9PX0ZD84BwE9laMcefS34lJZmz5hZf/p7N6poktwVdndgbqYyKpu1XplI7FA+NWORtzlR1NS16SdIPJjvdST2ckDIq99P4pYTHfvR2JvuU0SIIGAEpg8z5LbHk1KTR0MmWrJpMp8x0xr+aL2Zlte/nYU5Ys0jZXn4ndA8ukTFJg+nZjhDEvL9dz5GAr8rvC24PrAsehXOwRvcds5'@;
put 'kVd+UHjLnpvQVOPI3R/WuMuQp1njV+0ndtS2UGD9BS3PxPjLgWx4nwRIwDsC9eNtxGUmpXEqXMJsMTkoWC1fdOZAunxRwkc5AIMOlk9eIUCBeQVF8d9RN/mkuSlZrW7yVP72xxWZcF20nhH59RMR6WgplCXTkaoanIzfl5IpKEnkZceed9BS9zgKy7/4rYh0Fmz/3jEKPkECJFACBCqqHVkOkTlt'@;
put 'gVox2cd8sCnXzPK9G2wk/kTFStGKORgjvz1Hgem3GclxPLEKWx76XELqx6OjDVqU5WvRr7eB9l7t523Z+POInD+e5yQYCL66RojLxyzXcplPcZnOHg/Jsd0hWfcjf/dgz9f8cr0kQAKFJRCGB2oJkn8WrHDgJWLyzzvo40dHW0puedqQPZuQ9GNRZL6Dkc+eoMD02YTkOhzNJl9wT0pufxQtDvs9'@;
put 'bmtzzeD06x0yQxJHp5vtr5hycLOZl1hF3afxsyxZjo4YdY1m3tzimd1TgZlE9vj6Hxlycn+ehXNmo7wlARIoeQIaS6/JP8vWpCQaS2dR589MUHy4NbNcDSevPmHK6f0oX8TYeF9PIgWmr6dn6IPTGMWaelse/iKKro/KT7LPwFG515D40odMQ07stuWtVyJyqdkbl7nuSwVKeiy4OyVz7rQliqtX'@;
put 'C7Xj8rm41kts4PzxEILK/dm5KJ/7z3WTAAmMPIGpC1NoMWlJFRI3NfGHyT9vz4lmlne3O27ST1uza+Z4+0Xe8xUBCkxfTYc3g1GL37I1SVmqNTHzbMXMjFi/5uq+6Oly0OZLO/6Y0o4Wi8NZ9Cq+rMKRKYttmb/CkoYmxFuqsPS4Q9FgY1OBaVumbHo6JIe2jmwppsHGx+dIgARKg8DYqZabtFk7'@;
put 'BpZMnBMpMt+ed7dn+REk/XwPPct7hvc78/baeC9fBCgw80V2BNebtmI6sGLGC2LFzOxq2poJoYmC7D2djpw7EoJV05ALJw3p6775SSActqWmEYlK82yZutCS+rFoqYazaj5jSTNj19u3rZfIkEcZpmT85mMe+HneJwESIAEvCdQi7vzO9yZk7FT1RjH5ZyBbTfrZ97otm59m0s9ALn66T4Hpp9nw'@;
put 'cCxqxVy4MinLHy6cFTMz/IzQDEdM16Xd02FLx0VDLp0LSRcys/s6ULBdswDxv1oqK5EZXoOr9PpxKRk1Wp8Lu20fbY+Lp2fGd71bFZippCGvo3PP0Z20Xl6PE58nARIoHAGtb3zH+xIyeTbiD1Esk5bMy+xxvlZjxuanUEpuM+IxbTzBxVcEKDB9NR3eDqa8yhLtT94wAbGLeShGns1o3a88EoFM'@;
put 'xGkauNWAdW3/lWlboaLObQmG522M0RrwWjbr9+o9Og5VvCf2oVPRE7giZoaiV2i5HhIggRwJxModuf3daC+5BP4piswrNPW3I5VAPOZ30pVMKL6voPHFHQpMX0xDfgahdTG1U8R9H0VdTFV0qu64vIOAaktNRuzvFjem5+JpZo6/AxKfIAESGFEC4YgttzyclHnLNXQH53Sez935cDv9nLNQsxiN'@;
put 'P+AhY6efET1Mr9o4BeZVOIL3QLv7rHg3Tkp3Ft5VXiw03dhLx0SpJUd2vca6l8UybxwnCZQaAQM9zJfej1qZKx107WWtzMz8azzmke22rPsxvE9J1x2VeYm3I0iAAnME4Rdi05p9WFVrywOfTko9srFHylVeiH0dzjZccYl/zh5Cz3G0vkwmeHIaDkd+hgRIoHAEFt+XlCWrIDKRGCn4n8ZMEc0s'@;
put '3/KsyO4NiMdkiFPhDsYbbIkC8wZwgvKSiqix0xCP+cmkGFHtd8vTkc6tKyXhbepsDcmr349I23lmjQflmOd+kEDQCWh94KWrUxBW2FOKTLSWAwa0SH75e2FpPqxF2IN+BPh//ygw/T9HnowwBNfK3Nu1rpqNDG6ejTLiMtlnyIZfaJF4Zo17cqBxJSRAAgUjMHdFSm590JJwGdQUGreVuqbSWszt'@;
put 'zZfjMdsQj6nWFS4jRoACc8TQF37DWrrotoeSsmgV4zH1vGPbhux4OSS71kUKPxncIgmQAAl4QGDO7SoyUxIp05Oam87pwVqLdxUaj3l4q8j6n2iZPHqlRnImKTBHkv4IbDuCTMS7PpCSmbeUrshMX9Qasvf1kLz5HFwpaWf5CMwGN0kCJEACuROYudSSWx9NSlk5RabS1MzyTfBM7d9ssj5m7ofX'@;
put 'sNdAgTlsdMX7wRiKm9/zwbhMXWRKsg9+lRJaXHEZMuTgmyJbnkGvcS34zoUESIAEipzADIjM2ygy3VkMoeZyot+Wl74ZlYunYcXUOnRcCk6AArPgyEd+g5pZXlntyL0fTMnEBbBklojIzIjLA2868uYzUYrLkT8UOQISIAEPCajIXA6RGaMlU8KwYjYftVGEPSpxxNpzKTwBCszCM/fNFssqtM9t'@;
put 'SqYvhciMBzdC3L121fMLYi73bArJjhfRipKWS98chxwICZCAdwRmL08i1t6WSAwpPyWezxkpN2XnKyJbcc63WbrIu4MsyzVRYGYJKqhvi8RsWf4ICrHfYUhS20lqq8YALSouQ2G4S/pCsvNVCMz1iMlhzGWAZpi7QgIkcC2B2Uj8Wb4W2eWlLjLxA6C/Aa+gdNHpAzj301V+7aGS18cUmHnFWxwr'@;
put '1+4QC1ehptp9Fgr3hlBLLBgiU13i2v+8sxVXsC+F5fhOtoAsjiOSoyQBEsiVwLw7U3LLAxCZ0dK2ZBooXdRxwZEXvhGWbpYuyvWwGtLnKTCHhCu4b9a+5VPmw5r5rqRUN5iS6i/e5B+9YtWiuyEDMTiHHXkDmeKXmikug3v0cs9IgAQGI7BoJTr+rEZWtVnavcu1dNH+zQ4yyyMoXeT+QgyGi895'@;
put 'TIAC02Ogxb06R2pGO67LfMoCwy3IXmxdf9JWS0P6ey3Z97oJl3gY7R8Z4F3cxyVHTwIkMFwCy9YkZNFKXHCjd3nJdrdRTYmfgQ1PhuUoPFmOTZE53ONpKJ+jwBwKrRJ5rxlG158Vliy6NylVdWFJFEECkJ4uNNZS/zt7xJEdr4Tl/HFaLUvkkOVukgAJXIeAeqdueyQl8+/Q0KfSFZka/tVzyZbn'@;
put 'vxaTjrb0b8V1kPFpjwhQYHoEMnirgTVzjCOL0et2+gJLzBgyrxP+yzR3hSXiLA0jJK3NNoqnm3JsO7PEg3c8co9IgASGSyAMo8GK9yTRYANrcEpXZKqr/BDK1G34aZhdfoZ7MA3hcxSYQ4BVim/Vq9+maZYsXGlJ0wyRMAKmkz4QmpkEHu01237RQmuwiBzaZkpfN10fpXiccp9JgARuTEArhtzz'@;
put 'vqRMXghfsVOiMZn4eTDg2Fr3o4gc22mgXTB/L2581OT2KgVmbvxK5tMqNCfMsmT27ZaMn25LWRWshChrVMiMc/dUAGtlOJyOD209I3J0uylHdyPmsptxliVzMHJHSYAEhkWgrMqWVR+GsQDncG24UYoxma6rvB2u8q/SVT6sg2gIH6LAHAIsvhUEIDRHN9kybYktk+ZYSAoKiQmrppWyxbIQ4+Nx'@;
put 'hSO1VGrbL9PUq01HutstaT4CNzhEZfNRCM0khSWPSxIgARLIlsCoBlvuezwpdeP0E6UpMtVVfnCLIxt/Rld5tsfNcN5HgTkcavyMSyBaZsvYqRYsm46MnWbLqDpHohVht7CtWjZtXB6rKMxGdLrWSRWTiKXUP42p1Of6+1LS0x5y+8meOWzKeYjK3i733ZwFEiABEiCBYRAYM9GSe2DJHFWvzTWy'@;
put 'OkUPYys+/oj7WyPy6ydMOb4rzALseZoqCsw8gS211ZphW2qRFNQwERbOCZogZEtljQXBaUg0elkwuuLxajKIN0c4kCOWbUsi4UiyV2ClDElHiyGXzhnSciYkXbifiFNUXk2OjwYSMFDzNAwrNy5RUI5FZHRDndy+dKHMnzVDImHt3uSxaX3gxod5Xy+++uNxaWvvlIuX2uVSe4f719HZJV3dvdLb'@;
put '1y/JVGqYa+fHSODGBCbMSSEmMyWxKnxncCz67xty4/Hn+mq6ALstL349Kl34zdF4fi7eEqDA9JYn13aFAKyZZSLlVY7EKhGzWRnCYwdJQmqlvPwmCMsEit4m+0TiPSE3QaevN4Qi76GSO9ldwcY7VwhEI2EpLyuTyspyqa6skKqKChlVXSU1+jeqSirdx5VSWV4uFeVlUlYWc+PK9ODR12trRiG0'@;
put 'wt+lqvRHTf/S8XC4wEomXdHZB3HZ1dMrnV09V4Rna1uHtLa1u4K0HSK0o6tb+vrj8BLgKo0LCQyDwOzbknLHY9o8N23GLDWRqa7yXevQ6Q3NOCz2Kh/GEXTjj1Bg3pgPXyUBEsgDARVV5RCEVRCOdRCC9bU1Mrq+VhrqavBXi/t1MqqqQioqyt33RSMRicViCJ1IX53orYqyjLjK3Opzum7L0ixZ'@;
put 'jS8rrp9MHbsuun96X28z9zP7k0gkICz7pfuyAG3r6JQWWEBbLrXJxdY2aYEIVSGqVlAK0DwcvAFb5a1rE7J4FTzliKMvrm+LBxOhXzdo6xe/G0bXN3WVe7BOruIKAQrMKyh4hwRIwEsCGRFZW1Mto+vqZFxjgzSNHSONcF+Paah3LZGjqiulDMIxIx71MyoWM38qqgaKRy/HV6zrGihC1UKrj/U2'@;
put 'I0DjcLurAO3p7RMVn2r5PH+xVc5daHFvVYy2dXTABU/rZ7EeA16O2zRtuftDSZmxBImUSVyYebnyIliXGTXQlMOWl78VlXhfxr1WBAMvgiFSYBbBJHGIJOB3AmWxqGt5HNc4WiY2jXX/xo8bA2FZ67q1K2GJjMAKqWIoIxoHWhn1OS7eEFDGmb+MAM1YfJV5b1+fdHR2w9XeIc0trdJ8oVVOnjmH'@;
put '2xbXEtoJ17sm6HEpHQLlFbas/lRSGicjJh4JmqU2+2G4yrc866C1cERsuso9O/ApMD1DyRWRQPAJqHDReMfG0fUyeUKTTJ3YJFMmjod1crTUw9VdVVWJOqXqakq7p1NIUsncp4j0x/Ghc6iCU8Vnxv2uVmIVnl0Qly2weJ5tviAnIDpVeJ7BfbWCJhJJf+wAR5EXAnWNttz/qbhU1cKKV2JJP1q5'@;
put 'JN6L2phfj0lbs/rNmfDjxUFGgekFRa6DBAJKQOuPumJyfJPMnj5Fpk+ZKBOaGiEma9z4SBUoKk7UMpZxawcUReB3KyM8M+JTH+sFQndPj7S0tsups81y7NQZOXryNIRnsys6dd65BIfARGSWr/xQSsIxSCyYMUvJkqkJP4e3ObL+J0j4YX1lTw5qCkxPMHIlJBAMAhoPqa7tGRCSc2ZMdW/Hjhnt'@;
put 'urnVMqkiUkWH3tIiGYw5v9leqODMiE691Uz3ru4eOXseVs7T52T/4WNy5Php93F/PHGz1fF1nxOYf1dSlj+KQWqinM/H6unw1GgJ4+2vfxCRE3s0iZBWzFz5UmDmSpCfJ4EiJhBBKaAmuLfnzJgmC+bMkOmTJ7iJOFWVle5eqYUqY50s4t3k0D0mkBGc6mbXRa2c5xHLqdbNvYeOysGjJ1yLZzLJ'@;
put 'Op4eo8/76mC4lrseS8isFYiXLrGkH+1K13rGkRe/EZG+Hib85HqwUWDmSpCfJ4EiIqDCoHZUtcycOkkWz5sl82ZPlwnjGmGhrHYTQzLWSbVQciGBbAnocaV/auXWpau7G3GcF+UAhObOvQdcwdmK7HUmD2VLdGTfF9Okn4+lZNx0xFKXWNKPusrffF5k12vw2DDhJ6cDkQIzJ3z8MAn4n0AYVqYJ'@;
put 'yOxWQblo7iyZOW2SWyZIxQAtlP6fv2Ic4UALpx5jrajRefj4KXkLYvOtvYeQOHQeoRaM3/Tz3NaNtWXNpxNSOQomzRJK+rmS8PNvSPi5oG5yusqHe5xSYA6XHD9HAj4moGWDpk+eKEsXznWF5dRJ49HdZpQbN6lWSv3R50IChSKgrvRM1rq2wjx64rRs27VPtu/e72aqsyVmoWZiaNuZujAl934w'@;
put 'JYZGQpRQ0o9aMQ9uEdn4M1OsFF3lQztq3n43BebbLHiPBIqagCbozJo2WW5dPF+WQVhORLZ3BdopDkzMKeod5OADQSDjStcsdY3d1AShzdt3ytad+5AodJEXPz6b5VseTMqS+9DwoJQ6/cBoqVn0L34nLOeOoOwaI4aGdVRSYA4LGz9EAv4gEIGbW62Ty5culOVL5rs1KcvRm1stlGqpZKa3P+aJ'@;
put 'oxicQEZs6u0ltLfUBKGNW3a41k3ttc5l5AmEI7bc9/GkTJoFT7lVOkXYw+jwc/awIy9/JyLJOK2YwzkSKTCHQ42fIYERJKCWH+3ZfRsslXctXyrzZk1HT+9KisoRnBNuOncC6kLPlMI6fe68vLF9l6x/Y7scO3lG6ELPnW8ua6hpQDzm5+JSXQOhVULxmNpGcsOThhzcmk5ey4VhKX6WArMUZ537'@;
put 'XJQE1Fo5fcoEuXfFrXLHrYtRXmiMux+ZzO+i3CkOmgQGIaBCU/+0beXOvQflVxvfkB1aevCmAABAAElEQVR7DqDbUP8g7+ZThSAwBfGYKy/HY5ZKJ1EjHJL2CyLPfCkKKyaTfYZ6nFFgDpUY308CBSagsZWL5s6UB1beIUsXzHWLnmuxaybqFHgiuLmCE1DXufaw1+P9CLLQX9nwhmx88y25hD7q'@;
put 'XApPYPkjSVl4T2nFY2rCz6anRfasixQeeJFvkQKzyCeQww8ugfKyGJJ15snDq+9yywvFIDT1h5Y1KoM759yzwQloWIgKTV1Oo2WlCs3XXn9TzrdcYpzx4Mjy8mwkBlf5JxOoj4ki7CVSHzNkhqS305an/6VM+rpoxRzKgUWBORRafC8JFIBALBqFpXKOvOuBlbJ4/mxR17gKSybsFAA+N+F7Auo6'@;
put '13jNc8g4f3n9ZvkVxKYKTV54FWbqRk+w5IFPpSRaoZnWpZH0E4UVc8erIm8+RyvmUI4yCsyh0OJ7SSCPBMJh0+39/dja1XLnbUtEhSaFZR6Bc9VFTWCg0Hz+1Q2u2Gxto+u8EJM6D/3Kby+hfuUh5DYlEf77zJcj0tGSbo9aCM7Fvg0KzGKfQY6/6AmoZXJ0fa08ev+9cIffLXW1NXSFF/2scgcK'@;
put 'RSAjNI8cPylPvfCabHhzh/T09hVq8yW5nZDhyH2PJ2XKotLpV65WzL2bHNn402hJzvlwdpoCczjU+BkS8IiAWimXLZwjH3r3Wpk/e4Zbu5LJOx7B5WpKikAU3yX97mzduVd+9PQLbv9ztqPM3yEwCqWLHkQryap6xCWWQOkihAHj+HLkuX+NSus5WjGzObIoMLOhxPeQQB4INNTVymNr75NH7r9H'@;
put 'KivKJZFI5GErXCUJlA4BTQZSodmGLPNfvPCq/Oz5X0k8zu9Vvo6AGUstufsDqZKJxYzETDm83ZbXfhjLF9JArZcCM1DTyZ0pBgKaoDAbLR0//eHH3CQetbrQalkMM8cxFguBTN9zzTT/9pNPSfPF1mIZelGNEw5yuefDSZmxVLPKLW1XHuhFrZgw1srzX4vIhRO0Yt5ssikwb0aIr5OAhwQ0kWfV'@;
put 'HbfJJz7wLhnXOBrWlbiHa+eqSIAEMgTUmqmlvbR+5pe+9YTsP3xMUriY4+Itgeo6uMo/m5Tqeqy3BFzlasU8tsuSV74DK6YqTi7XJUCBeV00fIEEvCUQi0Vlzd23y+c/9n7R4umaIc6FBEggvwRUZGqf8y9/50nZtHUn207mAfeMZXCVvw+uctgwS8GKCWUJK2ZYmo/Tinmjw4kC80Z0+BoJeERA'@;
put 'i6Z/8NEH5MPvWYuL3hBd4h5x5WpIIBsCWqS9vz8uX/nuk/Iq3ObxBC/usuGW7XtUWN77kYRMX2KUhKs8gh7lJ/Y78vI3Y4EX1NkeA4O9jwJzMCp8jgQ8JFBRXiYff/+j8v5H1rhZ4iwI7SFcrooEsiSg5YwS8Bp8+Vs/ktc2UWRmiS3rt2lW+drPJaRyFNzGQS/Ajl1EF1N5/uthOXcknDWjUnsj'@;
put 'BWapzTj3t6AEVFx+BFbLjzz2sJslzm48BcXPjZHAVQRUZKol8x++9j26y68i482DOSuScud7oC8R6xp0V3kmFvNlxGKqV4rLOwlQYL6TCZ8hAU8IaI3Lh+67S37jEx9029jRcukJVq6EBHIioO7yVsRk/o9//JocOHJcLNvOaX388NsETBRgX/2JhEyYg+dQMzLIIjOtKRGL+XVTmo/Rivn2UfD2'@;
put 'PQrMt1nwHgl4RkDLpGgB9T/+3c+5CT0sQ+QZWq6IBHImoIk/ew8ekb/556/LBfQx5+IdgdETkVX+qYREyrVXOayZ3q3ad2tSK+bRncgo/y6tmINNDgXmYFT4HAnkSGDsmAb5T//uczJ35nSWIsqRJT9OAvkgUF5eLk+i48/3fvqs9Pah0TQXzwgsezApS1c5Ylt2oAUmksk13FR++dWIXDzFjPJr'@;
put 'DyAKzGuJ8DEJ5EhAM8Y/gIzxT37w3Yj34g9Xjjj5cRLICwEDWRra5ee//f1XZM+Bw3SVe0g5Vo6En8/HpX4cFBgiEIJuxTy41ZZ1P2J3n2sPIQrMa4nwMQnkQECDvSdPaJK/+KPfltH1dW7WeA6r40dJgATySKCsrEx+jYzyf/za96WrpzePWyq9VU9ZmJKVH7bFgMIMssDUWEwb8abPfDkql5pp'@;
put 'xRx4pFNgDqTB+ySQI4EyFFPX/uKf++j7ab3MkSU/TgL5JqAXhFoT8//6/74s+w4dpRXTQ+BaG3PVRxMydVHwa2NGy0zZvcGRTb+Iekiw+FdFgVn8c8g98BGBuppqxF5+Hj3G5zD20kfzwqGQwPUIaCzmD372nDzx1POMxbwepGE+39DkyJrPxKVME36wjqBaMkOoiRnvE3nmX6LS1YYHXFwCFJg8'@;
put 'EEjAIwIa0zVz6kS4x39XKivK3dJEHq2aqyEBEsgTgSjKie3ef0j++n99Vdo7u/O0ldJd7S0PJGXJaiT8pILtKlcr5raXHNn2Iq2YmaOdAjNDgrckkCOBCIo43718qfzRb3+GsZc5suTHSaBQBLSkWHtnl/zZ3/yTnDxzDlnBQbWzFYro1dupqHTkQST81DZqsGJwa2MaZkh6Omx56p9i0t9LK6Ye'@;
put 'BRSYV38X+IgEhk1AC6u/a8298kUUVo/H48NeDz9IAiRQOAIah5lMpeSvkE2+e/9hSaELDRdvCcy+LSV3vg/p5AEvW6RWzA0/Fdm3KeItwCJdGwVmkU4ch+0/Am6Cz0Or5XOPv48JPv6bHo6IBK5LQK2Y/x2dfd7YsQveBwrM64Ia5gtmxJEHUHy9aTriMAPc4ccMh6TlnC3PfqlMrJRGnZb2QoFZ'@;
put '2vPPvfeQQBm6g7z7wZXyeWSQ04LpIViuigTySEAtmPr31//r3+TNnXsoMPPEeuJsC1nlKQmbwXWTK7pw1JCXv2PIiT1sH0mBmacvE1dbegSi6HG86s7b5A9+45OSSCRKDwD3mASKkIAm5/X3x+Wv/kELrh9hqaI8zaHa81Z9NB74skUqME/td+SFb0TdC5c84SyK1VJgFsU0cZDFQMDED9WCOTPk'@;
put 'T3//NyUajTBZoBgmjWMseQLqHr/Y2iZ//rf/JGeaL5Q8j3wCGDPJQp9yWDHLkEgV1FwqKGkH4abPfSUqLWdKO9mHAjOf3yauu+QINI6ulz/7g9+UaZMnSjKZLLn95w6TQLERiCG05c0du+X/+fK3pLOLZYryPX93PpaQ2XdgK8ngli1i4fX0UUSBme9vE9dfUgQqysvkU+hB/n70Iu/rQ+VdLiRA'@;
put 'Ar4moO0iv/KdJ+WZl9ehqw9DW/I9WTVjbHnoiwkB9sAWXw8ZIenrseVplCzq7SpdKyYFZr6/TVx/SRFQN/nCuTPlT2HF1LqYrKlXUtPPnS0yAmF8R1svtclf/M8vy4nTZ/l9LdD8LX8oKQtXBrv4uloxX/+5yJ6NpVuyiAKzQF8obqZ0CFRXVcjvfPojsvruFSxXVDrTzj0tQgLaJvJHaBH5fbSK'@;
put '7O3rL8I9KM4hV9fBivmFuFSMMiSEwvZBDMc0IyG5eNqW576MkkVWaZYsosAszu8nR+1jAgZKnsydNc1N9qmqrMDJhXX1fDxdHFqJEtAWkafPNst/Q4H1U7jlUlgCyx5MytL7gm3F1LqYz3/DlLOHSrNkEQVmYb9T3FqJENCi6+9F0fXPfOS9rIlZInPO3SweApnal//wb9+TdZu3SYIJeQWfvMpa'@;
put 'Wx6GFbOyJrhWzEjMlEPbbPn1E7GC8/XDBikw/TALHEMgCdSOqpbf+8LH5a7ly5jwE8gZ5k4VKwFN7PnZcy/Lt3/8NF3jIziJSx9IyLL70KI8oC0kQ8jviSPX8+l/jkh3uzmCpEdm0xSYI8OdWy0BAmolmTCuUf74dz8rM6dNoSWzBOacu+h/Ahp3ueGN7fKPX/++tHV0+n/AAR5hZQ2smF/shxXT'@;
put 'DGwsppvs8zSSfdaVXrJPSQnMD73rAdmyY4+cOHMuwF9Z7pqfCGhW+ewZU+SPfuszMh5iky0k/TQ7HEupEVBxuX33Pvm7f/22nG+5VGq778v9dWMxVyEWM6BWTDfZ55TIs/8axT6WVrJPyQjM8WPHyD/+1X+Wvv6EfPvJp+T51zayJIUvTzfBG1QYnULmzZ4uv//FT8j4sRSZwZth7lExEFC3+Ft7'@;
put '9ovGXZ670MLzv08mzc0o/3xCKmpQFzOgDX4MeMd/+bWINB8tLTd5yQhMtV5+8RMfcntEa+2z19/cIV//4c/k9Dm2BvPJeSbQw3AtmdOnyP+OmMypkybQkhno2ebO+YmAhqqouNy09S350reekOaLrX4aHscCAssfRl3Me4ObUa5u8r0bHdn482hJzXdJCEztNfs3f/IHKB0z3RWYOsN6wmlta5fv'@;
put 'wJr53K82lHxT+pI66vO0sxH0152xJCnHdoYR2P3O7g36Qzd5wjhYMj8pc2dOc49FFmLP02RwtSQAAnru17/nX90Az9XTcqm9Y9BzvXaXKa+25eJJU6xUabkx/XCg1IL/WmSUl5WHAtndxzBD0ttpyy/+MSb9ve/8bfDDHORjDCUhMOfOnCr//f/8A5ffwB90PfGoNXPd5q3yjSd+LufOt+SDMddZ'@;
put 'AgQM05GJsyy58wO2rH/ClDOHr+8Kmdg0Vj72vkdk5R23um461sksgQOEu1hwApFIBCFRcbeQ+lMvvubev94glqxOyrRFlrz6g6i0X1CBSZF5PVb5ev6u9yZk1gqsPaA9yrVk0Ws/FDm8vXSSfUpCYH7+8ffKR977yHVLxag1s6X1knznx8/IL3Glq5YmLiQwFAKxCkfu/WBCpi4wZd8blqz/cfSG'@;
put 'x9Go6ip5cOUd8oFH1khdbQ2tmUOBzfeSwA0I6Pk7Fou5RdS/8t0fyzYk9aRS1292ECt35IHP9kvT1LDseMWRt16NSDLO34AbIM7LS6MnWbL2UykJwxMUxNY+4aghJ/fa8tK3UBOzRDRG4AWmFrz+u7/8Y5kAq1EqlbruF2OgNfPrP/gZ43SuS4ovXEsghMj0xsmWrPl0SiJRuEK6Q/Lq90y5eOr6'@;
put 'VkxdRzhsytwZ0+Tx9z4kSxfMdVd7o2P02u3yMQmQwNUE1GqpHoFNW3fKE2gBefTkmZsm88y9PSnLH4U7PWJLd6sjL34rIh0t6sakyLyabn4fqXdx9ccSMmURuKfswGlM1ZSJhCPP/EtMOltLw00eeIF5y6J58pf/4XdvKC4Hfm20jEXzhYuuNfOldZsGvsT7JDAogUjMkYX3pOSWtTgvxtVSEpKj'@;
put 'O0TW/ySKk+TNf6SqqyplzT0r5D1rV0lT4xj3WKXbfFDUfJIEBiWQMRBo68cfP/uSrEedy55eVLi+yVJWKXL/J/pl9ER8a2E4MyKGbPyZATcmYjGTN//u3mT1fHmIBCbOsWTVRy0JG8ETmIrCrYn5FGpiri8NN3ngBea/++zj+OFefV33+GDHv8ZlGqhfqLGZas1kvbTBKPG5DIGySlvu+2hKmmYI'@;
put 'fpRs1/uRiBsQmIac2pddD1rtXz5pQpO8a829surO20RFZxLt62zbzmyGtyRAAtcQ0PO09hS/1NYhr76+RZ59ZZ2cbb54U6tlZjWL79N+2BCXhoXPwKuAOLkj20U2/cIcNFEv8zne5oeAiVj2Bz6TkHHTMRm4Vse/gVrCkZCcO+7IL/81lpXxodh3PtACs6qyHO7x/ySNo+tdt8lQJ0utmWebL8Ca'@;
put '+bS8suGNoX6c7y8FAjB71DXa8iBOiuXVhjj2ZZsljB8Xz4TkV99DokFX9u6QCC5utDD7u9aslOVLF0hlRQWFZikcR9zHIRFQYanu8O6eXrf80DMvr5MjJ07dMNby2g2MnoALQ7hkK0bhO+uEXDGj2b7tLY689I0oWvtl/729dt18PHwCs29NyR3vx4V6EAuv43fBxm/Ecyi63nr2xiFUwyfon08G'@;
put 'WmDeccsi+bM//O0rpYmGg12tmRo0/hqujr/xw1/IxUttw1kNPxNQAiE3e9yW1R9PYA9x9rh8yZ2O4Tbk4JtqDYkM+Wo1Go3Iwjkz5dH775FlCPMoRyIaLZoBPYi4W1kTyLjCu7p75I0du+S5V9bL4WOnJAFr/1AWDWu57/G4NM3UsjiOa710P2+EJNXryAvfjkjrGVwwQnhyKSyBWLm2j0xIbaOq'@;
put 'McxNYTef962pm/zN5wUJZcF3kwdaYGrnlEfuv3dI7vHrHV1qzTxx+qzbBUjje7iQgBIwI47Mvg1X3O9xXPf4QCoqMq2UIVtfCsm+jcM7mcSQpDYf9VvXrrpLNJ5Ys89VaDJGcyBp3g8yAb3A1wt9FZda7WPz9l3y8vrNrrBM3iBx83pMVFAufzQpc+9QcZl2jV95r6snHSTpReXUIQjMEmvtd4XD'@;
put 'CN9ZtgahC6uhL5GwFTSBaYZD8G7Z8uyXymDNdA+4Eaadv80HVmBWV1W42eNjGobnHh8MuZ7kUjjgX8HJ7Xs/fRaF2jsGexufKyECboLPyqTc8kBIkv1Xl0JxTx34p79fZPPTYTmOAuzDXdR1PnPaJFl91+1yx62LZXR9nRufqVnnA2u7Dnf9/BwJ+I1Axg2ucch6cb9u8zY3eefc+Yti5RCbvOje'@;
put 'pCy5X4uwXyMuLwMwIADW/ciU47tZdH2kjgktvP4QCq/HKnARAIUZKJGJ3wS1y/7yKzFUGgl2GEZgBaYX7vHBvlx6Na1B5afOnHM7Q6zfQmvmYJxK5blImQ1xaSGLHPWB3Qzyq/fcFZk4h/ShdNHrPzfl1P7hi0xds7acHNc4Wu5evtT907aTGoumQpNWzavZ81HxERhorezs6pY9Bw7LrzdtRS3L'@;
put '/aKPc13m3YlqD2uQpQwXuSB/bjDhYmom+c8NObLNlBQzyXNFPqzP60XzqscTMn0JrMioYTrYPA1rxT75kLrJt73oyLaXgt06MrAC8w/gHn/YI/f4YMdkxpr5MkoZfe+nz7ktyAZ7H58LNoEoijQvfwTuttthwRxEYOreuyIT8dx9+H3c8kxEju3yJri7sqJcFs+b5XYEWjh31lVWTWafB/u4C9re'@;
put 'qftbL5QSiYScPnferWP5OnqHHz911vUa5bq/Wqt28aqULFrliBmGsryOuNTtqMDc9DTip7ewVFGu3HP5/CQtWfQxS8xQ8EoWqZu85QxqYn45hjAA9xciF1S+/WwgBab+8P79fx1+9ni2s5WxZh4/dcatm7nxTRQ/5FJSBKIISF/xrhTiMK8vMBWInkJCSCCI9zuy5dmwHNkRfjuxIEdiGavmbUvm'@;
put 'y+1LF7lZ6FWVlVdc6BSbOQLmx/NCIJOwo8fnRcRW7oCV8nUUSN8Nq6XWsNTzqxeLdupZtjYps2+FuzWEMJYbiEvdHgWmF9RzX0cYhe8f+kJSGiYgy/8mc5b71gq8Bj20YaV9FuWKWpBMFtQlkALztsXz5S9QXF2TIQqxqDVTg83Vmvn9n/2S1sxCQPfJNrIVmDpc9+cS5xKtkXkAVa/2rotIf583'@;
put 'P6IZHBqrOWVik9yK74AmBU2fPFGqUFNTf8TVhU43eoYUbwtNQAXjwLhKTdjZd/g4ROVbsnv/YWnr6HSPUy/HpaWIboWHYfy0ECxFsIRl4WulwPRyBnJb16KVCbl1LdKyApjs42aT/xLZ5L8aXgJobmQL8+lACszf+fRH5L0P3+9J9ni205CxZh5FLTbtab5p285sP8r3FTGBoQjMzG4asGTqD93p'@;
put 'QyI70fc4X4HeGbG5ZMEcWTp/jkyfMtHte67HaiZmkwlCmVnhbT4I6LGmF+DuRTgu+NVSue/QMXlz5x5XVLZeakclmixU3xAHZ6B82PRFKVn2kC1V1TBaarmbLDdDgTlE2Hl8+6gGLVkUlzJN9sF2spzCPI7Iu1WbKLp+/pgtz32lDPvlraHBu1HmtqbACcwYEnD+7i//o0wcP879Ec0Nz9A/rXFE'@;
put 'ccQRaZvJH8CaqVflXIJLYDgCU2ngd9d1mfd02LL39bAc3prfziFhxLiNbqiTeTOnydKFc2X29CkydkyDVKD8llo3VXDqLQVncI/VQuxZxkqp7m+1Vvb29sq5Cy2umNwOF/jBo8elvbM7r8dZ3ThbFt6bkinz1d0N3+oQO8JQYBbiSMluG3o+uu+jCZmq/ckDVnhdfwOslCNPfykq7Re8icvPjmrh'@;
put '3hU4gTl/9nT56//8++4JbKR+LAdaM7/15FPyxvbdhZtRbqmgBIYrMHWQes0aQucQB7XQzp90ZPc6U84eNGHR0Vfyu1SUl8nUieNl7qxpbp1NzUYfXV8rZSjoPtCdPlLfofzuPdfuFYFrBaWGJV1qa5ejJ8+4sZR7Dx51Swz19ce92uR11xOrcGTWLRYS7lJS3aAu8eytlgNXSoE5kMbI35+yICUr'@;
put 'P2KLgeDZIFkwlay6yTf+AuFSG4LpJg+cwPzEBx6VT33osYK6x6/3FXStmfGEvPDaRvnhL57HlXvX9d7K54uUQKTMkVsfTMmCuwcvU5TNbumVrLaoS8RD6F0usm+TKRdOGp4lOdxsDCoStID7ZFj9Z02fLLOnTZGpk8ZLQ10N4jer3I9r7KYKT1o5b0Yz2K9nBKW6vNVCqVnfbe0dyPy+ANf3UcRU'@;
put 'HpWjJ85IB851+XB9D0YXxlKZNC8lc++0ZNxkvAPfJ0fF5WBvzuI5CswsIBXwLVGUglM3ee1YnBMD1tknHDXk5P50a1LXrVVAroXYVKAEptp9/vbP/73MnTm9YAk+N5ukjDXz8LETbt3MLW/tudlH+HoREUjXwYRL7h7numWKst0dFZpm2EA5IwdFnpEIhDIpl86NTIZheVlMxo8d48Ztzpw62b0d'@;
put 'B5e6CtFYLOZ6CCg6s53Z4nxfRkxm3N26Fz09PUhi7HRLCR08clwOHjvpWijbO7pyKn4+HEIGSg81TrNlHoTlxFmOhBHTZqdyt3JRYA5nNvL7mdseTsqiex1P5je/Ix3a2kM4vff3iTzzTzHp7lAFE6wlUAJzEiww/++f/xEKoaP3c7YR3QWaz0yNt2fRO/eJp17wpGhwgYbOzdyAgJcCM7MZTQIK'@;
put 'oU5ab7stpw5qPb6wtJ5GweHMG0bgVksh1cOiqaJTrZuanT5p/FjEcY6WqsoKt/mADku/d5nuQmrt5OJ/AiokrxWTOo+9fX2uJbL5QivqUZ6RIydOywk0mGhGTKWWERqpc6y2ehwz2YErPCkT54VEyxDZiGXz6pRPgem/Y7ZxkiUPfDYpEfSpGMnzYD7IRGDF/NX3DTmaQ6e3fIzLi3UGSmA+uuZe'@;
put '+b0vfMIX7vHBJidjzTx09IR880e/kG274A/lUtQE8iEwFYhey2rdTG1b19dty2kIzcNbDblwIoxSQ/5ApolDtTXVEJ2NSKobK9MQx6kCtHF0HZ4fJeWI51RXqgqRgcIz89gfe1E6o8iISL3NWCV1LtTN3dvX77q6my+2yqmzzXLyjP6dkwstl6Srp9cNjRhpUobhyNgptsxCjOXEWSJllegknsyu'@;
put '9NBQxk6BORRahXmvzv3azyVk7FTIy4DVxNQ4zP2bHVn/k+B19QmUwPyT3/ui3LPiVvR+RvNnHy9qzexH0Pvzl2MzvWiB5uPdDfTQ8iUwB0JzXefoLpLAYX3huCOHUKT9LARn3OMamgO3Odz7Kl40gaihrtYVm01oazmhqdFtbzkG/dNrRlVJGVzs6mbX92bEprrb9T5jPIdHXlnqonGRumQEZOZ5'@;
put 'tSr3wSLpCkm4s1U4nm9pdV3dZ5svuI870IqxHzHjflsiMVvGz7JlJhJ4xk8NSaRMs2+9F5aZ/TZhUdryTEj2bcbFHFtFZrCM+O2ilUnUxNT42mC1jtT4+84WR57655gkE8FykwdGYNYgNuzv/usfuz9sxVBMWk/8+iOrcUxf/+HPZMeeAyP+BeYAhk6gEAIzMyrVEBqjaSHQvf2cI0d3m3Jyjykd'@;
put 'LSMTp5kZVza3eryXxaJSO6ra/Y5qiaTG0fVuqSTNXq+HxVNd7eUQp2r5VIGUEUeZ5KKMyz1zq4I0yEtm/3UfM8JRb/VPX8u8nrFCqiVSs7XV4qgXrS2oMdlyqc0Vjxdb2+QiHmvyTWd3jy8skjebu+p6W6bMtWTKEktGNxk49vMrLDPjCcdMefM5ZPa+jl7kCf9/tzLjDvpt3Vh09vl8XKLlOBEG'@;
put '7KuvrUyf+2oUyZ3BKlcUGIG5fMkC+S9/9Du+Se7J9svuWjPjcXnucmxmF07+XIqHQCEFZoaKXuMaEJp6UurucKT5aMhNCmo+HpaED62amXHf6DaGuOnKigokEVVKHcTmOMR2ahZ7fe0o192uF5DaAlato5qApK73KGreZsTWwHVnrKAZATpQkGaeG/j+wZ4b+PpQ7mdE37WfGSgIM2Ix81zm8cDP'@;
put '6Jj1QlnL/miXsP7+hPQn4q4FsqurxxWJrSgHpHV222CRbEPiTXtnp3R190ovPDhxH1oiB+7f9e5HY46MnmzL9IUpWC0dqarViEsk76gr/Hof8vh5V2D+MiR7NxoUmB6zzWV1eiRoHOb4GfCRB9BNvgVdfd4KWFefwAjML3zs/fLh9zzk2/jLG32x9IdGfyw1NpPWzBuR8t9rIyEwMxRcZwoMLOEw'@;
put 'LC1wGbZfQJmj/SGUvQhJ+9mwpHwSq5kZby63KsJUhKq4VAtnNdpfVsPiWVUFUYpSSlUQn3rfFaF4PSNEowhH0e9WBIxUlCorXZcmLelt5k+/g3o/I/oGik59buAy8DV9Xh8PFLV6P/Onr6UwESoSUyoY9RaP47ioVGujuqTVbd0HUaiJM92wPnbjtqcHf3Bp62N9Xl+PJ5KucLQCljylZYZqYZ2a'@;
put 'NM+SSbNTUjcOc4VwNHWDj4SQoMAceLT76/78u5Ny+yPBc5NruaLThxx54d9w4F9zvvHXDAxtNIEQmJps8D/+5Pdljo/KEw1tGtLvVmumZm4+89Kv5cfPvoQfF9Qv4OJrAmmBaaFM0fDrYHqxg65VE3GayAtC2QtbWs+F5PQ+Q84eNqT9IkoUW1eLJC+26fd1qDDUdpkqKvU2ghRUFZb6PVOxqm54'@;
put 'FaDu87hv4P1agSKzpD+f/mzmpG+hm4i6ogfWeFQxmYD40+fSVseUKyRVTCaT6fsqKlVgaiykPqf3rxWqme2Wwi2mREY1WjIB1qjxc2wZPR5JO2gHiOiPglorB2NNgTkYFX88VzvalrVfSCDBCzoMx0qhrNr53ntN6OzvseVpxGH2dAYnLCMQAnPCuEb5n//lPyCmMVr0J233Rw0/egcQm/nNJ34u'@;
put 'b+09mO9jm+vPgUAELr0lq5KyZE1Ikv3+MBnqBbDGamoqerzHgtg05MzBkJw7Epa2i5p5W3piM4cp5kc9IqDflfomW5qmOzJ+puVaLcsrTJyzCxNbme1uUGBmS6rw70u7yRNwk2PbASy6/tK3EFe/LzhxmIEQmA+uvEP+/W99xvfZ40P5OqpbT62Z2gHoyadfHMpH+d4CEtAfzcWrUrJ0DSyYPhGY'@;
put 'A3dfC/maprp+ITZh2VSBqTGb546giPtZXDX3BudqeeB+8/7IE4CxGDGUSNCZ5EBUWtKI2pVV9WiPF0NNV3i/1Rqst35bKDD9NiNXj2cB3OTLH4X1El6BoFgwdQ+1XNHO1xx549nglCsKhMD8w9/8pKxddXegBKYecGFYMl9EKaO//+p33dgwfY6Lvwj4XWAOpKV2SwNudBWdVkqk+5JaN9EH/Sha'@;
put 'U54ypas13a5y4Gd4nwSyJaDHVeUoGzGUtluvcgySdWrHiJRXIeMdFzl2ErGqKiqzXeEIvY8Cc4TAZ7lZtYKv/SyyycuC5Ykx0YnqwklHnv0SOqW5lZCzBOLjtxW9wFS3+N/9xX9EoedxbnyTj1kPeWgaj/S3//w12bRt15A/yw8UhkAxCcyBRNxTM+qvhdWVDh9lf78tXZccaT1jysVTIbdzUOcl'@;
put 'uP3jeJ0LCQxCIBKxpbJORMvHjJlkS8MEW0aNTgvKsApKnMDUSjkSiTqDDDfrpygws0Y1Im8Moej6Q59Lyli0CRVEJfn9giVbSOplSiYcNw6z81IwzrtFLzBnTp0kf/Onf+hmgAYpaF5jMc+jq8b/8X//vVuKJNuDlO8rLIFiFZjXUnKtmxCb2jlIY5v6+yzp7RBkpqvgNORSc0g6kKXe14NEjBJM'@;
put 'GLqWV6k9Nk0HiRW21DSK1I+33VjKukZHKmsdtGpEghQuVhyrOAXltXNJgXktEf89Xnp/0g1LCpqbPIIarK98PyTH3kLR1wAsRS8w3/3ASvnfPv/xoixPdKPjx0TW67pNW+Vv/+UbN3obXxthAkERmNdi1KvpEESDxm+qjcCCe7OvB3U320XamtPCU0VnF660412oF+iP/KZrd4OPh0HAjDhSUenA'@;
put 'GgkX91gISlgoa/Cn1spyFLlWV55mkLkxlBCVmqQTpIUC0/+zOXZKSh74TEq0GkGQDj+Nw9y93pZNT8X8PwlZjLDoBeYf/+5nZfXdKwIXf2mgbMo/ff378sJrr2cxjXzLSBEIqsC8lqdKCoHW1DI/IbVyQlWkIDrjKK3RC4HZAfd6J8ohdeBPYzl7ukIS70bXIQrPa1H65rEBq2SsDFbIOojJBgdi'@;
put '0pEaiMpR9RCYNfoa6oWqmMTVhpPCRYbW38T/QfpBH2wyKDAHo+Kv5yJRRx7+YhzxvojvxbkoKMdkJg7zuf+fvesAkKo6u2fq9mVhadKLgKggCAFEaVKEqMRobFEsPxr9TTEaY/1jS6ImakSCYk9ETSxYwQIiUhRQmoICgvTey9Zpb/7zvWUImIXd2ZnZeffufbq8KW/uu/fcO/PO+8r5ns6gI8n+'@;
put '1XUW8HH2RmmCKaLLj933ezRv2kS7+EvRwLzzobHYuIXmIrM5FoG6QjArmwD750/4x0FLp1g9o3Svh4KWrcVZVuShm53Ec7cbxXtJPPe6+Jxu9mLGGpW5qRXJUHb5kNlShoDA62WsZEZuFHkFTMKhS1tIZB5JZC6JZQWRpP4nM7tFi0+skTHLpFy1dblwxwOwIZjxoJW+Y08bGUKnXiSXCiSOVRcl'@;
put '+b6yYBfjMP38vVQ/DlNpgqlr/KVUFFm6fBXueeTJCqtBdVenOa7WEajLBPNoYNuUkf8cQTxJVSxaM0XKKcj6AeXllEg6IJZOkHSSgPJx7HmAcZ6BUrpgwxWE52jnMa/bxkXGP1rIzAIyKD6dXc9Cdj7lgbjPpUs7u4DPs/leLv8yaYEWFQFexYRISka3JBJC3NwGzEMIGIJ5CApHP2jNcqIDLuJN'@;
put 'alQvuSKp6jPtJephLlNfD1Npgnn24H749ejL9Iu/9HjxxqQpeOnNyY7+gpvOAYZgxrcKbIMl/7H1Oe1/SJLYhCTo8TrBKjcspxikXFIp7ISiAPfltHiW0Q1fStIpj4OyLwHCAR7HYyMhciT+CWkSd64OmwzD440yy59/JI9+ksPMbBJJEsUsWiOz+ZdLi2RmHl3ZfD2DsZHiNpQkATevSzaJFFxp'@;
put 'JRZhIEnAERZpiGTVq8MQzKoxcsIRObx5GnFNObLzeNMka90JnUpCHyQOc/H0KBZOUV8PU2mCefN1ozC0f1/t4i/FRfXHMU+bKj5J+LKmugkhmKcMDOOUMyusc6k+n+7t2/SQ/0hWslw13EJC+X/sdYtEyWKN6jCJU9gmli6EKe0RJNkM0TIaLHfzMd30tJAG5LVyPqbUUohup3CQf6xiJMdLNSPL'@;
put 'kox4WvKoCRqReCe2Lao60YNZ8rYqRXXjoFi3znb3sxmGT9N6K8/lsdQ4j3I8/GNiqNTY9rIapawbL//8GSSG3EsspJe6fhlZFnx8LNZGv7zG432Mg/SQPHp9UkedbUs9UG5CqKOMixQrpC1YLiRdl6tsGhe6IZhpBD/OUw+5IoDmHfghfgl0Wfpiwdy8ysJHz2dU/KbEiYmTDleWYEr9cYm/bNOy'@;
put 'uXbxl9t27MKtfx6DomKaaczmaAQqapFbrEUuRMZktNTWZNkU6yDREtIlm9t+zndihFRelAMlN4XMS3JU5B8hZBYJakQIWUTqtHMvx9jvSz3sCqJm8T2JKY0eg2TKRY2foLWRpxViKScUQsm+CMEUUul2W/Zzed8jfeSf/X6MLB68Mh66QNp9kc4c7JP9gP2wXzH/pBoBQzBTjXDy2u/SP4Qew+Sm'@;
put 'UB83ufw2lBywMOmJDOUrrSlLMFtSWP3Ru2+GlFTUSf9S5IlmzV2AR556MXnfQtNSyhAwBDNl0Ka04UOe9IMPSPsqyOhhZz10zGGvHevhD62HRzw/+OSI147VmHkvbQgYgpk26OM+cdM2EQweRbkihpJocwNm34O68OFzXmxfz7tShTdlCeaAPj1w269G0w1G35dGm8gTPfvyREyeNkujUek7FEMw'@;
put '9Z1bM7K6iYAhmOrMu4SUDL8myJKkZGW8e9OFZEoc5udvA8vnMZ5G4U1ZgnntZefjgrOHaZXgIzFcpWXluPvhJ/D9uo0KL6u603VDMOvOXJuR1g0EDMFUa54HXBxA2y5URtBIrkiS9VYuiGL2RLUTfZQlmA/e8Rt0PbETs0gZua/JJgRz3cbNuOPBsSgr18syq8kU/dcw/FlR/GhECCf0krrdJgbz'@;
put 'vwAyLxgEFEPA6/dg/ocuLJ/rsZPCFOt+netu59NC6H22XnGYHhaz2L05iklPZVYk8Ck6q0oSzHp5uXj8/ttQvyCfgfkVwfCK4n9EtyX+8pPZ8/D4c68c8bp54lwE/HTR9D47jI49DcF07iyZnhkEqo+AaIXOm+zGyvkeW22g+p80R6YDgYYtwxh2ZYRqC/q4yEUpIlAaweTxWSzPa0eIpwPahM+p'@;
put 'JME8sWM7PHjHjXZyj04JPqY8ZMLrudYbEILZ55wwOvQwBLPWwTcnNAikAAFDMFMAagqbrIjDDDAOk7IMGsVhyjqc+k9KFq2kFIWim5IEU0eB9Vj85f/9dRzWrN+k6HKqe932Z0dxxnkhtGEMUDhoXOR1bwWYEeuGgCGY6s3ogEuCaHMy+61RHKYk+sybBHzzmbqJPkoSzBuvuQzDB52hlcC6ib9U'@;
put '70dNemwIpprzZnptEDgaAoZgHg0Z577e5Ywwegyni1wjPUxJ9Fm1MIpZb6ib6KMcwfRQVfmvf7gJndq3ZVk5lvLQZBP3uOhfPvr0BE1GVDeGYRPMn8rds9tYMOvGlJtRao6AIZjqTfBx7cMYfFmElbP0icOURJ+ddGZ+8JSfxR/UjMNUjmAW1q9nJ/jk5eZol+Dz3CsT8d7Umep9u+twjyX+p+95'@;
put 'EbTtKqUIjYu8Di8FM3RNEDAEU72JzM5jXfJrA8gpYF1yTeIwJdGnvJgVfcZnoPQA40sV3JQjmCd1bI8H77zRJpc6JfgEgyHc99hTWLZyjYLLqO522ZYpGh7GCb1Zi9zIFNXdhWBGrg0CQjDnvOPG94tNFrkqk0oVTAy5OohmbSm1XvG/Kl0/ej9ptJTQuY+eZ0WfdWpW9FGOYOqY4OOm23/rjp24'@;
put '7U9jsL+o+OgLzrzjOAR8GVF0HRhGtzNJMMuNBdNxE2Q6ZBCIEwE3XZOzJ3qwbikJZlhN12ScQ9bicNEjPvmMKKywpVVFn5lvuLBqgZqZ5MoRzBuuvBgjzxqkVQUfIZiLli7D/Y89o1VddS1+taoYhMcfRaeeYfQ517jIq4DKvG0QUAMBcsqZr3qx8TsPrIghmGpMGnB89zBOv4C62Jplki+ZGcWX'@;
put 'H6iZ6KMcwdSxgo+XAusTJ0/Fi29Qk8BsSiHgZlB5i44WBl7KilKKBmIrBbjprEEglQiQT4aZOzp9At2SGzy84TcEM5VwJ7PtwuYRnHVVCF41uVilUHj9bmxYbmHahMxK33f6i0oRzLycbIy5/1Y0KmyACOUItNlcbjz61D/x2ZeLtRlSnRmIK4rCJhaGXhWEP4eB2BYDgMxmEDAIKImAy+NCyd4o'@;
put 'Ba79OLBbyKUhmKpMpCRcjvhFAPUK+TusSaKPm+tx306WjHwyQ8mqUkoRzLYtm+ORu2+mFIHcWepzIS8pLYMIrK/buEWV77Lp52EIZDGD8czLgmjc0s2YLX1Klx42RPPQIFAnEJAEn62rgRl0kZeXqJm5WycmqpJBCicYdgUTfTryTd7o68AQmOODQAB4/wk/ivaptx6VIpin9+yGu377CwJOxDXZ'@;
put 'JEts/aYtuOPBsSgtK9dkVHVrGL5MCz2GRnDSGSbRp27NvBmtbgiIuPXS2cDiaR6qQqh3QddtPuIdT8/hQXTpR36pUaKPWDE/et6DbWvVS/RRimBe+pPhuPLi87RK8PEw/nLO/MV4aNwL8X6XzPEOQUDiMFt3ttDvYgZvGQOmQ2bFdMMgED8C4iKf9ZoH65eZBJ/40Uv/Jzr0CKPvT/VL9Jn5OjPJ'@;
put 'FxqCmdIV9rvrRmFI/75alYj0eLx4/b2P8PJb76cUO9N46hAQ10y9BhYGM8C8XqGLmac6OGdSh5dp2SDgRASEXBbtAab904v9eyjYbeIvnThNx+xT41YRDL0yDK9XDxe5DFZqki+eHsXCKeplLyljwRQpn7/e9Vuc0KGdViUiwQSfvz39ImZ/seiYXxzzprMR8GVY1MKMoOsAI7ju7JkyvTMIVI6A'@;
put 'jxfyZZ8DC6bSPV5u3OOVo+TsV7Pzo/gxE32y85mexft8HW71JWxj9WILM17LcDb4lfROGYKZn5eLscwgb1C/QKsMcom7/MNfn8CaDSw6ajZlEXDx16xxS1oxR1EmQxQljKtc2bk0Ha+DCDCZwmKEy7SXvdixnu5xy2SPq7gK3O4oho8OoFEr9p6/wToQTEk827HBYk3yTOXGowzBbN3iODx69+9o'@;
put '+vZqk0EuCT5bd+zCrX/8G4pKSlX8Pps+H4aAP9tCn7ND6NDDbcpGHoaLeWgQcDoCYiVasySKOW97ESgz1kunz9ex+tf/oiDancLikeGIcoSssnFJkk8RpbMmM5M8oJhlXRmC2bt7F9x98/UIBilorckmcktffbsC9zwyXhvSrMnU1GgYYsVs0pqSRZeH4MvgD5zRxKwRjuZDBoFaRcDNuOkwxdVf'@;
put '8WLrGje/t8Z6Wav4J/lk3QeHcMogWi+pla2DBVOkisIh0cIUbVa1apIrQzBHDhuIG666RKsMcjcJ5kfTP8P4Ca8n+StmmksXAiJZdOqQCE6mVIapTZ6uWTDnNQhUHwE79nIukyg+8iFYbshl9ZFz5pHtu1WUjHRZ+tQkFyvmlBc8vAFSK5NcGYJ5/agLcd6IwVoRTJEoeu6ViXhv6kxnflNNr2qA'@;
put 'QBT5hYzFvCKEgoZGeL0GAJqPGARqDQG3102rkIXpL/uwb4e4xg3BrDXwU3Sixi0PZpL79Mok//RVMNnHlyLUUtOsMgTznpuvQ+9TT9FKZD1CF+pD457Dgq+XpWZ2TatpQcDWxTw5gv4XhCtcNDr4adKCpDmpQSCFCJBLCp2c/ZYX67/xsAqXIZcpRLvWms6tz0Sfa8qRnVshNKXDz69IFc2fEsXX'@;
put '09WSKlKCYEpijyT4tG/TUiuJIikRKRV8Nm7ZVmtfPnOi2kHAli0aEkbXfi6T8FM7kJuzGATiQkASe5bMAr76xFTtiQs4hx/s9Vn48bVBFDQlwdSkJrkQzGVzLcx5Ry2pIiUIZv16+Xjsvt+jQUE9bSSKJIN809btuP2BMSguKXP4V9Z0ryYIZLNG+ek/C6JVJ7mARWrShPmMQcAgkAIEhFyu+9bC'@;
put '3Ld9KC02WeMpgDh9TZJUDtWsJrnX78b65VF8MsEQzKQvrNbNKVF07y3wMilGqqbosIlw/JLlK3H3w09qMyYd5iWpY2BWeUFDCwMuCaGwmQfhoCGZScXXNGYQqAECQi63r4tg1kRm5e4St7hxjdcARkd/pO/IIDr0Zhc1qUnu8bqwa4tFqSLRwlRnvSphwTy1S2fcd8sNCIepJaHJJgk+02bNxdjn'@;
put '/6XJiMwwKkNApIsatrDQ/8IQ8iXpJ2QU2CvDybxmEKgNBLx+D/ZstTDrDS/2bhODRW2c1ZyjthE4ZVAI3QfrI1UkWeTFey28R6miYJk6UkVKEMxhA07DzdddqVcGOWuQ/+vt9/Hqux/V9nfPnK+WEZDqEo1bR9DvggjyCt3GklnL+JvTGQQEgRi5/OwtD3ZvFnKpjiXIzGB8CBzfPYTTz+fdgyZS'@;
put 'RS5qtQbKK8TWi/epE9KhBMH8+U9H4IoLf6IVwXTRRT72uVcw/fMv4/vmmKOVRMAuJdkqgr4kmQWNXIgEjSVTyYk0nVYSAdstznJ7c5gxvne7sVwqOYlxdLpZ+zDOvCwCj0cTqSK5F6LqzPvP+LF7i7FgxrEUqj70N6N/jh8P7q8VwQyFwvjT488wDnNV1QCYI7RAQEhmg+Oi6H9RGPWbMDzIkEwt'@;
put '5tUMwsEI8MIs5HLjCgvzJnkZc2m0Lh08W0nrWoPGFoaOLkdGFudbkzAIDzVbP37Rg00rDcFM2kKRhu5lichep3bVSgOzqLgEdz40lpnkO5KKlWnM6QjQXU5LZo/hFpq1ZbUficnU5AfQ6cib/tUtBMSt6GHs2spFUSya4kPJAcrWSN09s2mPQBYVPEZcG0BugVsrqaJP/02x9a/UEVt3vIvcQ1fy'@;
put 'o/f8Dse3ba2NBqb8yG3dvhO3PfA4DhQVa/9lNwP8IQKs9tMwiu7UyWzfBRDBfVO3/IcYmecGgZojINYeqd+8ZIYb384RBQd14tZqPmrzyRgCumphzpsUxTefqSO27niCmZuTjTHUwGzcsFArDczvVq+jBfPv2owp9sU2++ojIHfZJ54W5p8Fb4bJMK8+cuZIg8DRERDNwOK9UXw13Y3vF3thRYzV'@;
put '8uho6fmOzPiQ/wmgWRu6hyr+V36gIrb+9Ywo5n9oCGbSJrNRYX2bYObm5DAhTI/ECJEomjv/Kzw47vmk4WQaSj8CYm1v0awJ2rZqjhlzFlSrQ76MKFqfFEG3MyOsYe6i1cW4zKsFnDnIIPADBFx0h4tLfOv3Liyc5sbOjW56Bqoml16vB5kZfpSUlhtN4h9gqvLTARcH0LaLC9GIpUUUkhDMFV9E'@;
put '8dlbhmAmbV22a9UCD//hJv5w6COy7vX58MG0WRg/4fWk4WQaSj8CebS2//LqS9H1xI544PFn8c1331erU5L8U9jcQrfBEbTsJO5yJgxGTGBmtcAzBxkEiICHVstwuYXl8zx0ibtRVlS9RIiC/Dxcf8WFOOH4tviUih6vT5qKsvKAwVQDBHqfG0LnPvw91URs3cc1vvYbC9NfyVRmdhzvIu92Uif8'@;
put '8dZf6SWyTg3MV96ajNfem6LMQjEdPTYCcgN0Conlnb++Bn6/D6vXbcBD417A9l17jv3Bw97NzLHQqVfEdpln5Rlr5mHQmIcGgUoRsBN5pMrJJuDrT1l+d5WXxQyqtlpKYxILf93lP8MIKpR4mBAk1dXGv/gapsycg2AwVOn5zIvqIKCb2LrX58bWtRY+eCZDmWQ1xxPMAX164HZetMvLy9VZ2VX0'@;
put 'VFzk41jBZyor+ZhNDwTycrN5sboQg/v1sdeqXKwWLlmGR5+eQNdb9WvNu6nb1riVha5nhtGsHbGhIdNYM/VYI2YUyUVArJahsiizxF1Y9pkXxfuEWFaPXEpPenU7GTdeezmyMyvqO2dkZGD5ytWUj3sWe/cfSG5nTWu1jkCnPmGcdq5YMCNauMilXORuVqGaJOUiFSkS4HiCOXLYANxw1aVaaWBK'@;
put '1vDDT/4DXyxeWutfOnPC5CMglpDj27TEPZTTys/LtRO35DVxcn8yex6efmkiQnGWOc3IjuL4U5kA1NdCfn0XPy9M07jNkz97pkXVEHDzQis0cttaF5bMcnPvqbbVMjZWuSEUb8MJHXgXd7BepHxng6EQ7vvbU1ixai3VHfSI+Y+Nua7t23Zl9bQLI3BpUs1HykUe2BXFJJaLDCmiiuB4gjnqgnNw'@;
put 'Gf/KyqpvBXL6FykQDOLuh5/EyjXrnd5V079qIJDh97MQQD9ce9kFR2i1ygXL4sXrnQ8/wUtvvh93AoHEZtZrZOFkksy23SIUjBbpFZMEVI0pMYdoiIC4w70kl/sZdbJirgurFnkRKK2+xTIGiZcepNGXnIezBp0BNnnE99LP7/LY517GjLkLEDBu8hhkSu5bdIxgwCVheDWp5uPmYi0psjD5yQyU'@;
put 'Fashu+V4gvnLqy7GucMGaUUwi0tKcceDjxuRdSV/tv6702K1vImutt6VFAMQkhlmFuMbk6bUOObW66sQZz/xDAvN20fh8Zn4zP+eBfOKtgjwwuojsSwttrBmCTNp57ntijw1cRN6GSt9+QVn85oykHGXzDI/aL2MYZeZmYm3PpjGGPn3UVqmT1hWbHx1ad+oZQRDrwzDx99PHXw/dj3yAOuRj/Mz'@;
put 'HMQQzKSs5VtvuAqDTu+tTQymEI7tO3eTYI7Fnn37k4KRaSS9CDRv2hj33fK/aNKoYaXJaBKPKdaQf7/9Ad7+aHqNOyuSRs07RHBCHwtNGKfpYdC3sWjWGE7zQacjQOuij2s8QJ63aQWwfK4HOze7a6xrGSOXI88aRMslQ1h+QC4FDonDXPj1t3j4qRdNEQynr48q+lef5SKHjQ6wXKSYqas4WIG3'@;
put 'uWS59hmDSQvmvp3VU0lI97Acb8G8/5Yb0JPB2IGAHtIRQjA3bN6G2x8YY+6Q0736k3B+uWh16dwBd914LV0xR5fSknkPMdj8dVoyJ07+uNKLW3W748uwKGdkoSMzzpu2isJtiGZ1oTPHqYDAQYtlIGhh80oXvvvCg+3r44+zPHyoonV5+fnnYCQtl+JqrIxcyvHiPhcDwL2PPmk8TIcDqODj3PoW'@;
put 'hl8TQHZuRcyu8hyTBJMLFx8+68fOTYZgJrwk5aL88P/dhM4d21M2Iphwe05oQKxZK75fa6r4OGEyktAHv89LC3sv/Gb0ZVWuUZl7SfZ5mfGYk6bOSDiJQCyazWjR7HCqhaZto8jIFHc83UFGQzMJM2uaqG0ERCjdy78A9Sw3r3Tju/nuhImljCGLWeJXXTQSwwaeweQgfj8qsVzGxirXnHAkgj+N'@;
put 'eQZLl69K+Dsaa9fsax+B7FxaMK8pR34Djzb1yOXm6KMXvHZiW+0jGv8ZHW3B9FOQXMpEtmrRTJs65EIyFi1dbmcqxj9d5hNOQ0AuXucNPxNXXDiyWmEcMv+lFHKe/PEMWjKn0XWe+I2Tx2ehUXOgffewbdnMLmB8DnOBwhQY1sE15LQ5N/1JLgKSFS4ZsqX7o9hIV/iqhR7s3kKLZVhMNolt9evl'@;
put '4xfUuuzbsxuJJSu6HINcxs7k43XnEbrIP/9ycdzqD7E2zD79CPgzoxhOF3lBE1owOe/KWzAJqdfrxscT3Nj4nTf9AFejB44mmLE65EeLbavG+Bx3iGhgzp63AA+Pf9FxfTMdih+B7KxMJg2cg/N/PKTaiWhCMoOhMGbOnW8nE+zdXxT/iSv5hJtZ53mFFlqdGEGbkyw0aFbxg2SsmpWAZV5KLwK0'@;
put 'xEhGuFSt2rvTwoZvPFi7xI19u6pX3rE6nZfY6F//z6U4sdPxjF2jFmI1yKW0K3GYT00QwfW5DM1K/AawOn01xyQfAY/HwohfhNDguCgJph732r4MDz55xYV1Sw3BTHjFyN3nY/f+Hg3q17O1BRNu0AENCMGc8unneOKfrzqgN6YLiSKQk52F0Zeeb8sUxSOlJSRTJIwWUYz9pTcnY93GLYl25YjP'@;
put '+/xRNG1DsnlSGMd1iCJfrJo0CEWMC/0InMyTWkSA68/jcdNaCQTKLGynjuXapR5sWulBeYn0I3GLZWw0XTt3pFfhXHRq36bSxLvYcZXtJZP8H6+9g/emfIpyQzArg0iJ19zuKM66OojGbcguNXHmSD3yT19zYTUlulTYHG3BbNqoEI/ddyvESmRpInorQeQig/GP195VYX2YPlaBQG5OFq4fddGh'@;
put 'Cj5VHH7E2xLvJURz3aYteHniZHz51TdHvJ+MJzwFsvMYo9neQuvOEVYJiiKnHpOR+J8hm8lA2LRRFQLi/pYqJKJ4sG8H6N7zYMO3buzZVvOM8KOdUxLthvY/DRecPQSNGzaokWEiKyuLcdKT8eb7/eqQVQAACklJREFUH5u65EcDWoHX5bdvyNUBNBOCqYkF08vqVQunulgW1afADPCWsfvgnxJ6'@;
put 'Z24tmzWlBfMWO7Ovuu4NZ47kP73ysA75y29OYjbx1P+8aB4pi4AQTCkROYQXtZqWM5Wbjn0HiuzEn/c/mR1Xacl4gJM7+uwCSh21i6A5s9AbtSTZzHezri3jNY1lMx4ozbHHQoDrSZIRhFTSM40DuyPYtoakcrkbO9Z5bNkhublK9taEBokLzxmK/n16IjPDXyNyKX0SgvnqOx/aig9GCzPZs1S7'@;
put '7Q0eFUCLjjwnq6A5lujEAYkQzK8/BUmmP45Ppe9QRxPMDm1b4S93/da28mhDMEkmnv/Xm3h3yoz0zbo5c9IQSAbBlM54aHkRQfZFS5fh37y4rV63MWl9rKwhqRKUW2DZ7qPmrHjRRMhmfTf7IVpr4krXxKdU2eDNa8lHgHzRS/e3i+tHLJVFrLazbb0bm1eIxJCLLnAhlMknlbGB/KjbSbjkJyNw'@;
put 'PK8ZDLZMyOMlLvIXX3+Xv9GfGgtmDGBF9wMvDaL1yew8Ex51IJhy07ZmCTDztQwlZsTRBPNkBmf/+fZfJ/Rj4bRZcPMKPu6Ff+HjWfOc1jXTnxogkCyCKacWq44QzW07dtmC7J/M/iIpWeZVDotkMzsnioYUb2/GSkGN20RQ0BDwM6Bc4kSNK71KBOveAeSKHlopXbzgybotL4ngwE4Xtq0jqfze'@;
put 'hV3U6Qva1X1TRyoF9IYNCmxtyyH9ToPUFw9TBizRzcRgJoqgcz7f/6IA2nVlMhlvmHUhmGtJMGcYgpn4Iut+8gm4//e/TMqPRuK9SVIL/DF+7JmXMGvewiQ1aJpJJwLJJJixcdjWTIqyL6Q1U0TZv1u9LvZWyvfiKfDz5rheEwvHtWGiEN3pDZqSgNZjcgbzhKK0bobpbhKXk9nqEALkieL2lnhK'@;
put 'qYITCkVQvBfYs9Vtk8rt61gjfIe4xLlIamHz0RPUp0dXnD9iMNq1aZmw1fLwLksW+fP/fgvvT5vNJB89CnwcPr669LjfzwJo300fginfvx0bLXzwdJYS0+hoC2afU7vgDzddX6WAtRJIH+xkhBfmR8b/A/MWLVWp26avR0EgFQRTTiVWIYnN3L13H6ZSLmXKjM+xa8++o/QidS+LKz0730LDFrCz'@;
put '0huyvm+9hlFk5njZR8Y1GcKZOvDT2TJ5oodrMGahDAdIKA+4sG8bbOukuL33bmcZx1LpZGqtlD+EoWO71rb27I9Y4U10aEOh0A8PSei5EMzxL76GqbOMTFFCQDrgw6f/JIjje3F98oZdh1tiqUe+b3sU747LdAC6VXfB0QSzX+9Tcedvrq1x8kTVw6/9IyS27YG/P2eLrdf+2c0Zk41AqghmrJ9i'@;
put 'zSSTw9oNmyjOPhOfz/8qrSVG3R5qbTaIorA566G3tlDYzEJ+IQlnNqtliIWToZtyExUVC6cOv+ixidB5z+tvzN3NKEqGJEVRXkZCua/CKrlroxs7t7hwYAflhMTtHa1dQhmD/rgmDTGc1XjOPP1HqF9Qz/ZspSI23xDMGOLq7/UkmBYJprFgJrw6B/btidt/dU21BawTPmEtNBAMhvDnsc9iCcuQ'@;
put 'mU19BEQH80pW8Rl51qCUrlOpLiJlJpetXE2iOctOBgpwLaV7k8x0qfnboFnUzkovpKhxfkOL9X9JWvwkx5JwIUlDQjjlz2zpReAwy6SQSU4Ps7ojKD0AFO12UTqI8ZMkk/tpnSzex9Km1BlPRcZ3PCA0KqxPUtkLQ/r1QdPGDW3B9Iikp6doMwQzRcCmoVkdCeaebRYmPWEIZsLL6dyhA3DDVZdo'@;
put 'ZcGUyhD3/m0865GvSxgf00D6ERCCOepn59ouu3iE1mvS85jbXMSfly5fSbf5HCz6ZjlDSNJPNGPjEbd5JhOG6jVm0hDJZgNaOAv4OKcea6XnuCuqt5DViGtdEojEWmYsnTH0krinkdGOmZREHJJKWTuSrBUoJZlk4ajivR6SSdDl7aE2pcu2VgbL5fzpsU5WNnLRsTyjV3ebWIpknWzJSOKp7FyH'@;
put 'v2YI5uFoqP1YO4LJ73HRnijeGmNc5AmvzCt44b7kvBEs16VPoLUEjd/76HgmbqxPGB/TQPoRqE2CGRutkAWxaArR/Pa7VbYigdS3Lym103Zjhzlm76FbPTu/wrJZ0ISkk0lD+SxpmZ3PsnzZJJ5ZjOdkb+08T0M8qz9vBE3WAjkk5YEq9hJOYZFIBmmVDLA6TvEBNy2TJJI7hUhWWClLi2iZtH9S'@;
put 'BXXnbVLiUbxX/Xv3QDM+lq02iGUMCUMwY0iov9eNYNozwq/thLsNwUx4dV5+/tn4Of90IZhyMSgpLcVdf3mCpQE3J4yPaSD9CKSDYMZGHSOaYQawr1q7HjPmzMcXi5di526m9zp8q7B0WsirD+QyhrOAiUOSPJRNd3tWLvd5kuQkuoq0wNnedYnrFI97RXyn7Wy3/3H4QBPpnhBHfl4C+2WuxRIp'@;
put 'Gdzyori2g4EwiSRd3NSYLGECTvFexknSzX1gF5/TvV28HwiVixtcWnH25vV60LFtawxifGUvJu80LGxgy9PVJrGMIWQIZgwJ9fdaEkxOy4R7DMFMeHVeP+pCnDtsoDZZ5IZgJrwkHNdAOgnm4WCIRVPI19YdO/ElFQpmfbEQq9dvpls0dbFqh58/WY/dZJMZWYzrbGAhpwB2QlEuqw/JX1ZexXte'@;
put '/rb6M4SAMsbTdv/y7CSf4nIXd7vtdudLkmh0iIMeepCsntawnQp+KIZGEsWKJzZpFPIozJH/S1ejtEJGKA4dDFh2HKSQyDJaHktJJEuYfFMkfxQzL9vvRlkp3d+2/KM0qtZWkJ+HHl07YwCr73Tu0A45Odl2Vng6SwMbgqnWGjpWb3UkmPLdePm+7GMN2zHvOTqL/LZfXo1+dJMkW4YiXegbgpku'@;
put '5FN3XqcQzNgIRdpI6puXlJRiBfUzP/tyERZ/s0IJq2ZsDEfbe9wWvJkuZqxbdpxnZh5Y6lIsnizvl2sxxlNc7i5kZFjw8zi3Nwo3S/b6xBIqBE6EPIWQygliXIxsTnhpbLMpaex5bB978/B97PPc07Z46B2bOMozeUnalsdCfvmogjQKcZQ/un2ZQBMKuEgiKVROklhezOxtksgyurbLikgoiyus'@;
put 'k4EyN49hW9Z/ziPNqrpl+P2suNMSfXt2Q8+uJ+I4usE9nBv5nU9FVni8OBmCGS9izj1eN4JpyxTtoEzR340FM+FVd9sNJJh9DMFMGEjTQMoQcBrBjA005j6XC/b2nbuxdMUqzF3wFZYzuexAEZmLphsdwjap9Aqx9FnwMdnSz8fezCh8/E32ZXDPMr4iJu/xR1k5ifGs3FeQUVZSYla820twyAxt'@;
put 'PkqSam+yO8jvLBI9SyyGfC4Z8lZIpH1IGENCHGlN5D4UdiMc4D7oIpEkiWR4bDggRNFCJFiRnS1xkHK8fPZQ4/JQw02sza2aH4ceXTrbLvC2rVsgmzW/xcKeDjf4sSA2BPNY6Kj1npYEc7s6MkX/DwAA///r8VITAABAAElEQVTsXQd8FNX2/rZl0xMSSkLovXcBBUSKgNg7dkXF8tRn74o+n/7V'@;
put 'J4oFsIMdO4KCFEFA6b33HkpIAklI22z5nzNhNcQkpGyZuXvmR5jd2Zk7937nzsw3p5q6DrrUA50uj919C/r17o6ioiKd9rBq3TKZTMjNy8NTr4zDnv2pVTtY9tYlAlGREbjhigtxybCByM/P12UfLRYLbDYbHHQdHTpyFBu2bMfS1euxbdc+ZGXn6LLPeuqUx/P3LZKvYVkqh4DNakXD+kno2rEN'@;
put 'undqh6YNUxAXGwO32w2n04mSuFauxcDsZbfbMX7SZMxeuASFhY7AnFTO4hcEzrrUgVY9TPA4Xfj7KvbLqQLSqMlswvEjbvz0TkRAzlfTk5iEYNYUwsofLwSz8lgZZU8jEMySWFrpoc9/TDaPpKVj07adWLl+M7Zs3430Y8d1+9AvOQb5rF8EIiPC0aRhfXTt0Aad27VGo5QkxMbEaPOKSSWTS70v'@;
put 'YWFheOvDz/H74hUodKih3NA75v7q39lXFaJZJyKYLrc6BPMwEcxxQjBrPGdEg1ljCKUBPyNgNIJZEg6vZtPlciE94xh2k1Z93aZt2Eikc//Bw8gvKCy5u3wWBP6BgNlsRp3EWmjVtDE6t2+NNi2aoH69OoiIiADPK/4zAqksOTDW9o/94DMsWLJKexEr+Zt8NhYCqhFMs8WEQzs9mDkx3BCCEA1m'@;
put 'AMUkGswAgh2gUxmZYJaEiIkCP1h5yc8vQOrhNGzfvZfM6TvIlL4XR9IzyKzpKnmIfA5RBGKjozTTd8e2LdG2RVM0bZSChFrx4BcWJpRGd2kqJpifE8FcKQTT4HN84PWFaNiaBuH2KKHBtFhN2L0O+P1ruyEko2uC+fg9I9G3ZzfD37C8M0EIphcJddaqEMzSEuGHLBMG1j5l5+QQ4TyKrTt3Y8uO'@;
put 'Pdi5dz+Oph9DEZk8ZVEfAZ7jKUl10apZY7Rv3QLNGqeQ1jIBEeHhf/lTGk1LWZHUhGBWhI5xfmMf33NvdCClFfVZIYK5YzWw8DshmDWeiQ/dcQMG9OmlHMF8+tVx2L1PgnxqPEF00ICqBLMktKzdZLLp1VDlnMjFwSNp2LF7P5FOIpx79iMtI1NM6iVBM/Bn1lAmk5mbCWXblqyhbKCZwSPJ7M0v'@;
put 'yayhZE2lqosQTDUkazYRwbzFgaSmFN5Drr8qBPlYw8xYPRdYPTvMEELStQbzRorOHXHJeRTJp44vWKHDgefGTNA0QYaYIdLJChEIBYJZGoCShJO1BCeIcGZQgNCeAweJbB7Ajj37cODgERyjCHWViUhpXIz4nSO9E2vFUTBOMmkmG6Bl00ZaYE5iQi1NQ8lj4uAc/guVRQimGpI2W9wYdqsTtRu4'@;
put 'QVxTCYJps1uwdAawYX6xO5PeJaVrgnndZcNx3WUXqEUwKe3Fc68LwdT7hVHZ/oUiwSyNDWu1WLvJ0em8sIaL0x8dPpqB/amHsWvfAeyjNWs9s7JPiGm9NIAB+m61WlArNlbTTnKkd/MmDdGI0ghxkA6nD2L58QsDk8lQfjEQghmgCenn01htHgy/vRDxSSYimGr4YIaFWzB3sgm7Vhffa/0MYY2b'@;
put '1zXBHHHxMNx45UVKEUwOlPjvm+9jLUXrymJ8BIRgli3DklpO3oOtEGxaT888rkWoc5T6vtRDREIzadsx5FFgkV7zIpY9Qv1uZRyjoyJRKy4WKcl10TC5Hho1SKZ1EmonxFPaoGhwKh5emEjyn0o+lDWVjBDMmiKoj+PDI9wYQgSzVh2zMj6YNjKRz/nCjL0bhGDWeJYN6tsTj9w9UrcJrKszQCfl'@;
put '43pl3EdYsXZTdQ6XY3SGgBDMyguEtZys7WRNGa9ZU8YR68ezs8nEnqVFrh+k6PVDaRk4cOgwjmXlaMQzlLVpFaHLGsmoyEjEk/axXp0ELT0Qpwhi/8m6tRO07fw7486LkMmK0Pz7N56f/5swCYtXrBVt+9+wGO5TZCyZyG8rRHS8WRkNJkeRz/7EigPbiq9pvQtF1xrMc87qgcfvuU0pgumBCWPe'@;
put 'nYQ/l6/R+9yQ/lUCASGYlQCpgl2YaHq1nbzmPyaeeVTxKic3D8eJZLJ/J6dJOkLazqOUrzPzeJZmgj+Rl48CcjlRlYCaCRu7PQycvDyOkpXXio9BnYQEjUzWq5NI60QkkJYymoJyOKLba+JmDaaXTIpWuILJV85PrMEc894n+HPZGklTVA5GRtgcm1hMMMMjyUROHVYhyMdMlXx+/ciKw3uEYNZ4'@;
put 'Dp7ZvTOevn8UHBQYo8piogfo2A+oSsSi5aoMKaTHIQTTP+Jnoukln17iyWdi4sTm9gJKAp9P66ycE5pfJ6+PZ2VrWk/2/8wmczyb5HM1Ekr7ExFl4soWhGCag1mbGGazajlHw4k88vyJJi0jm7TjYqKIRMaRaTuGtI+x2nf2jeR9IohkhlMJQ68WmIkjj4fXPB4hkr6bh2Ii9x2WwWwpIcmNoSML'@;
put 'YQsneqkCu2SWTOmWfnk/DBkHhWDWeG717NIBzz54pzJpihgQC5lf3vn4S8yav7jG+EgDwUdACGZwZFCagHrJqJdwMeniYCPO2lBU5NQIJn9mX08Hlf/LLyjQCCoTVS4HWEBklbfzvk4isbzmsAD2mebPbs8/SxxyBLaNyKJ2bpOZ/Bpt8G5j8sg1re20LSLcjgj+TNtY08i/8TZtX/rdTv6QrH3k'@;
put 'MXmXkuPwEkghkV50/LsWgulffAPVer0mLgy+wUnXlhoBPmTQoPuRBz+PD0NWuhDMGs+jTu1a4b+P3qOUCYwJ5qTJU/DDjN9qjI80EHwEhGAGXwYV9cBL2pgEekko7+/dXvJzSQLn/exdl3cObpMX77rkZz7We7xXa1p6XXIfrSH5L+gICMEMugh80oGGrV045xonOB+mEgpMMo8X5rkwbUI4co//'@;
put '/TLqE7D81IiufTA50e8rT92v3by9N2o/4RCwZi0WKyb/NB1f/kjJrGQxPAJMMDlf68XDBirlK2x4wcgABIFqIlBMMKUWeTXh081hLbq60OcyKgjALiS66VX1O8L+l7nZRDDHhaMgTwhm9ZE8eWRjSq3x+uiHNb8jVQgmm8J+mjkPH375Q43xkQaCjwD7zo0ccQnOG9iP/AILgt8h6YEgIAjUCAFO'@;
put '4fQ2uTHN+3OZ5j5Ro8bk4KAh0LZPEXqdR+6X5PKiBMG0mJCV4cbP4+wocgjBrPHESq5XG2Ofe0TzZVKFYLKJfM6CxXjroy9rjI80EHwEoqMicOcNV2FQv95CMIMvDumBIFBjBNh3dsInX2MW3acLKThMFmMi0PXcInTpT0FwFNinAsHkFEUZB4Fp5IPp8RS75uhdMro2kXNSYNZgciSl13dJ74Ce'@;
put 'rn9MMBctW42Xx318ul3ldwMgwATzjuuvxOCzzxSCaQB5SRcFgdMhwATzwy++xy+/LdSCxE63v/yuTwTOutiBlj05MkYNDabVZkbqTjd+/dB+is+3PtEv7pWuCSZXnHjjuYeplFmCMoE+HFywZsMWKhf57l8BAHqeINK3ihEQglkxPvKrIGA0BMIp0n/S11M0VyZObyWLMRE4Z0QhGndkgqmGBpPr'@;
put 'kO9a78K8L8INIxBdE0zO+zb2+Ueo3Fk9LeebYVCtoKNMMLfv2ovHX3pTS4dSwa7ykwEQEBO5AYQkXRQEqoBAREQEvvjhZ3z/yxwtrVUVDpVddYKAiYziw251oG4TMo5ThjEVTORch3zTYg8WTSku86oTqCvshq4JJnsZjP3Po2jepBHloiuqcCBG+ZHTmaRSObzHXxpLiaDzjNJt6Wc5CMRSFZV7'@;
put 'Rl6Dvj27aQnAy9lNNgsCgoBBEGCCOXnKdHwzbZYQTIPIrHQ3w+xEMG8vQHxddcpEMsFcTdkNV86ylR6ubr/rmmAyai89fi86t2+jTDUfJphHMzLx1CvvIC09U7cTQzpWOQRioiM1H0wJ8qkcXrKXIKB3BESDqXcJnb5/UXFEMKkOeVQc5b/lfLSnP0T3ezDBXDwV2PinEEyfCeup+25D317dlQqg'@;
put '4GoiTDD37E/1GU7SUHAQ4DRFt15zKYYN6KvUHA0OmnJWQSD4CLAP5kTywZxK6eTEBzP48qhOD5QrE0kgMMGc+6UJu9ZaqwNJUI7RvQbz37ddp+UYzM/PDwpA/jgpl5574c33sX7zdn80L20GEIFIqhF93aXDcfkFQyTRegBxl1MJAv5CwJumaOb8RVr5UH+dR9r1HwIprVwYQFV8LGY1tJeMFKcp'@;
put 'mjXJgtTtQjB9NnNuufpiXH3xeWo9vKlu8evvfYKFS1f5DCdpKDgIcF3pi4acg1tGXCoazOCIQM4qCPgUAYvFglfHT8SSleskENOnyAausZbdXDiLq/gokgMTHJDipjrk74ch86Ax6pCztHWvwbxs+CCMojyDKmkwORcm51mbOut3loEsBkbARrLs07MrHr7zJmUC0QwsDum6IFAjBDjLR0FhIZ4f'@;
put '8y627txD/IRCkGUxHAJdBjjQZRDFkitSxcdEZSId+S5MHW+cOuQ8aXRPMAf26YlH/zVSKYLJ5SK/+3k2PvmWPHZlMTQCFnogtWnZFM8+cAfsVGJOlYpThhaKdF4QqCYCfG9OPXxEI5iH0tKr2YocFmwE+lxciBY9qZyiIknWzVQmMueYm+qQ2+EoMEaZSJ4DuieYZ3Ruj9EP3aWUdog1mPMXLceY'@;
put '9z4N9nUo568hAkwo69VJxHM0RxulJCs1T2sIjRwuCBgOAfa/XLpqHd744HNk55wwXP+lw4QA3ZMH3+hASiv6TGZlFSLI2f/yaKobv5AG06PZy40had0TzJZNG+HVpx/QSiOpoh2Saj7GuDgq28sYiiT/1y3XoP+ZPcQPs7KgyX6CgA4R4Ajyz7//GT9Mn4P8gkId9lC6dDoEbGFunHebA/FJ6qQo'@;
put 'soaZsW+TG3M+M04VH5aT7glmct3aeIOq+UTQha9KPXLOhbn3wEGtmo/cxE53u9D/72FhNgzpfxbuvulqSbauf3FJDwWBMhHg+zL7XL7wxntYv2WHMuWJyxyswhuj492UZL0QkdFEMGmcKmgwi6v4uKmKj91QktM9wVSxHrkkWzfUNXLazrI8mzSoj/88cjfiYmPkwXRaxGQHQUB/CISRD/XWnbvx'@;
put '0lsfIj3zuP46KD2qFAJ1G7lw7o1OWG1qmMd50Ewwl88A1v5unCTr3G/dE0x2un599ENo1rihUv5tHKk4+rUJ2EZ1yWUxPgJsJueSkWf3FjO58aUpIwhFBMQ8robUm3Z2ot/lbqrg41ZCe8lSYYI5bzKwc7UQTJ/PUtYM9ejcQSnzI/keY8y7n2DRijU+x0saDDwCVsqd17t7Jzxy181aJLkq/sKB'@;
put 'R1LOKAgEHgHOfclBPc+9/i527tkv2SACLwKfnVG1FEUMDEeRz/zYgkO7jJNknfutew0md/KBUddj6Dl9lUpVxJHkH335PX6a+TsPURYFEIgn8/hjlFKrc/vWSr0MKSAaGYIgUCECXH/859nztRKRuXnqVI2rcNCK/tj3CkpR1NUMjyIpisgDC04nJVkfH4asdOMkWefpZQiCeeMVF+Lay85XjmBO'@;
put '/20B3v30W0Uv89AbFidd70tJ1x8YdYMWkCZazNCbAzJi4yHAWT2YVD5P2svt5LLkpjQ3shgTAbPJg3NHOpDUhGRIOfJVkKSZkqznZrsx9R07CvONkwOTZ5AhCOawAX1w/+03KEUw+aa2ct0m/IciFmVRBwEO8vn3rdfizB5dJGWROmKVkSiMAGsvv5n6Kyb/9Cvy8gsUHqn6Q4uMdmMopSiKSVAn'@;
put 'RRHnwEw74MH0CXYizBwXb5zFEARTxWTrTDD37E+VVEXGuVYq1VNvZZ8n770NMdFRElFeKdRkJ0EgOAhw5Piefal46e0PqYJPWnA6IWf1GQKJ9V0YeksRrGE+azLoDdnsFuxc68bvXxkrRREDZwiC2bRRCl575kGwI7ZKZses7Bw88fLbOHTkaNAnsXTAdwiE28Nw0ZBzcPPVl4gvpu9glZYEAZ8i'@;
put 'wC/5bA7nYMulq9ajyOn0afvSWOARaNqJIsivUC+CfM1cN1bMFILplxmVEB+Lsc8/ivi4WKU0Qi6XWzORr9u8zS+4SaPBQyAuJhr3UHWffr27K+XaETxE5cyCgG8R4LREP/wyG1/8OF1M476FNmitdR1UhM4DyPfS5VLC/5KB5BRFC74zYdtyY0WQc98NocG0Wi2UC/Nh5XJhmkkj++6n32DG3D9Y'@;
put 'FrIohAAnX29Yvx4evfsWbd4WUt5TWQQBQUAfCLDf5bLV6zGWao5nHs/SR6ekFzVGoP8IB5p0oGZIeaNCgA8DYuEURZOsOLjDWBHk3HdDEEzu6OgH70Cvbp2VMjlyEvmfZs7Fh1/+yEOURTEE2B+zXavmeOjOG1EnMQEOh0OxEcpwBAHjIWC327F73wG8Om4i9h08rJTblfGk4bseW60erURkQjIR'@;
put 'G2KXKhBMTlFU5OAURXZkZxorgpwlaxiCeecNV+KS8wYpZW5kH6BV6zdr6TF8d5lJS3pCgLXv3Tq0xX0UWc4uHkVFRXrqnvRFEAgpBJhcss/7axMmaVXUuPa4LGogEJdIAT63FSE8kogNDUkFgskJ1rPTPZhGBLPIYawIcp5VhiGYHDRx980jlCKYbEZNPXQEj744VsvDpsZlLqMojQDnx+zZtYPm'@;
put 'k8mR5UIySyMk3wUB/yPA5DItPUMzi6/fskMpf37/o6f/MzRs7UL/a12wUAJMFcglI24NMyN1u5uq+ITrXwBl9NAwBJMf0KMfvEs5MyMn+H361XcoZdHBMsQjm1RBgEkml5K8+6arEU11y50SsaqKaGUcBkCAyeVBSkP01kdfYuO2nUIuDSCzqnax09lF6DZEvQCfjYs8WPyTMfMuGYZgNk5Jxmuj'@;
put 'HwI/qFVKVQSTmdJkTMIfy1ZX9XqS/Q2GAJvLu3dsh/tuuw5cVlJ8Mg0mQOmuIRHgaPFde/fjzQ+/0OqMi1nckGI8bafPvqoQzTqZKIJcHQ0mR5D/SSEam5fYTjt+Pe5gGIIZEx2ppSriYAkXpSBQZeHcnt9Mm4nPv/9FlSHJOCpAgOV9Vo/OuIVyZNarkygkswKs5CdBoCYIsAsSay5Xk5/7BMrW'@;
put 'cYDckZRSTtQEHMWOtdrcOI8q+NRSKMCHRcRVfGZOtFAEufFSFHH/DUMw+Wbx8pP/Roc2LZV6KHOqomWr1uHFtz5kecgSAgiwJrND6xa49ZpL0bxJI20+y4MvBAQvQwwYAvwix0GUs+Yvwmff/aylIuJniCxqIlCrrhtDbimEPYpkrIgDJk9Xx8kI8hwDRpDzTDMMweTO3k+mxaED+ipV45lvevxm'@;
put '/ZgE+rCIQ2bhh1+TBvVx/eXnU/qtTppPplsiWkNG/jJQ/yFgs9lQSCnBfp49H19NmYGCQkkP5j+09dFyk44unH2li9ITqWMe5/yXmUc9+GWcnZ4Pxnw5MhTBvHz4YNx+/RVKRZLz5ZlfUIhnKNBn594D+rhapRcBQyAhPg6XDhuA88/tjzB6MEqEecCglxMpiAD7W3Iwz+SfZuDP5WukQo+CMi5r'@;
put 'SN2HOdCpH+B2qkMwuQb57vUuzP3CmBHkLCdDEcwzOrfHcw/frZSJXBMCabPe+fhLzFm4tKxrR7YpjkBkRDj5ZXbBiIuHoX5SXTGZKy5vGZ7vEfCaxNnf8vMffsGOPfuV8tX3PWLqtMi6vcE3FyKlOVnH3R5VLORaichVczxYNduYEeQ8wwxFMBsk18WYZx/SHLdV8lnjij5sznnv8+/UuepDcSRU'@;
put 'PiIyGrBHeHAsrWpVF7jqT7MmDXHVhUPQm0zmvEgqo1CcRDLmqiLAgTw5J3K1e+jPcxbgWFZ2VZtATIIbucdNcLuNaYqs8oAVOiAixo3htxciKt5MJnJ1CCZrMOd+YSItpjEDfHiKGYpghtvDMPY/jyIlqZ5SD1/2x9uwZTue/d94KqEqlSWMeu8LI2LZY0gREhsAcz+zIje7aiSTx82J2Af17YlL'@;
put 'hg2kKPPaWmlUlV6mjCpb6bf+EGCtJf9t3LpTM4nzPdRR5KxyR9v3caLbQDc2Lzdh7TwrigqFZFYZxCAeUL+FCwOvddJcUIdccoCP00n+l+/acbyKyoogiuIfpzYUweTeP/fQXVQVpaNSNck50CfzeBae+L+3cORoxj+EJBv0j4DZ7EG9JnSju8EJm82CPRtclL+MyntV42FlpYdmk4b1cRn5HPfu'@;
put '1lHT2EvOTP3PAelhYBDg+yVrLdMzMjF97h+YMXchjmefqNbJG7Zxos9lbkREe5B/woM5E8OQfpie7h4hmdUCNAgHdepPCdbPVSvB+t8lIsOoRGTVFRVBEEOZpzQcwbzl6otx9cXnKRfo4yLfkVfHf4xlqzeUKSjZqG8EwiLc6HVBEVp1N8Pp4DytFmxe5sGK6bZqm93YN5P9ji85byBaNWtC7biV'@;
put '0tzrW6LSOz0iEBZGD1yqgrVk5VpM+XUe+Vruo2uienmR4+q4cc7VDsTVI1MeGY6sZJJcORvY8IcVzmq8GOoRL9X7xNadQdc50LAdjdSljgaTS0Tu2+TGnM+MG+DDc89wBLP/mT3w+D23KpWqiAXBpp5vplLCdXJQl8VgCJDvZWKyB+fe5IA9kipJ0MsCmzjcHnJ9WACsmmOj79XTiPANNCE+FoP7'@;
put '9cYwStHFQUAcaa5SsQGDSVu6GwQEOPUQL9t27sGUmfOwYu3GGkWIs580V35JbmEq9tuj3IlmqxkZB9zk9xZWLfeWIMAS8qeMiPJg6KgCxNZSy/+SK/gYPcCHJ6fhCGbTRil47ZkHNUKmkm8a+2FyBOTzb7wn1SYMdtu02jxo09uFnsM9J7WXxQNgTulykVznmLDxz5qV+mKCmlS3Ns4lojmQfDTZ'@;
put 'P1OIpsEminS3yghwACS/fO/Zn4qZvy/C74uWIyuneuZw78nZV6/XRQ607EYXKOdN9Cbm1r56MO/LMKTuNFPJweq9FHrPI2v/I5DczIVB16vlf8mo2UiDOecLM/ZuMG6AD4/DcAQzItyOt//7OOrWTlRKi8MEIi09A0++/DbSM4+zbGQxCAL2SA/6XlGExm1NpxJM7j+5z7C5bdVvZDJfXPObhZnm'@;
put 'SXK9OhQI1EsjmnwdsOlc8mcaZLJINyuFAGss+aV7/8HD+G3hEsz7cznSjx2v8cs32RfQdYgLHfuQTZzs4n+Ry5O94sjdNfM8WPc75aQVM3mlZBXMnTqdTf6XQ9Tyv2TFRFGRGz9PsCM73RJMeGt8bsMRTB7x8w/fhTO6qBXow+MSP0xGwWiLh1KckJnmZgeiEujxRX5AJRdNB8Ik00Ekc45vSCa3'@;
put 'z0SzLtUyH3DWGejfuzsaplARXlqYaKqk2dcGJf+FBAL8ks3EkufvvtRDRCqX4ffFK7QXbp/MaWq30wAnugwgbmly/YNcMsgWmxkHd3ow/ysbCvKMG1wRChOG58TgG4rQoDXdcxXKf8n1xzMPE8EcH05KNGNr0Q1JMG+68kJcc+n5ygX6sDno22mz8Ol300Lh/qDEGE0UPZ7cnMw0lCbDxC+bp/JL'@;
put 'bYx/k0yQZsSKdQss1fbJLAu0WnGx6EWZFdg/uVWzRoiKitKStYufZlloyTa9IcCaSiaW/HK0ffc+zP1jKRZTEM+xrBzfdZXISEfSdnUeaILFSuSynGxwJirPl5flxsyJrD3iK9fYD3jfAai/liJjPTjvtgIl819uX+XBgm+Mm2DdO1sMSTDP6tEZT99/h1KpilggfKNdv3k7Rr8m+TC9E1Tva4vV'@;
put 'jRZdPTjrUhdcZNYob/GSTDf7ZM4in8wlpKkpf/fymqlwu53yxLZp3gRnk0azW8e2mp8mv+Vzwnapc14hdPJjgBFgbaXXvzIrOwfrNm/TzOBrN22tUfBOWcMwUxBex/5OdDqH7rEWijin666M98DiQ+lCdVMqzTmfW5G2x1LtDBBl9UO2+RaBhq1d6H+ti/J1qFMekhHiAJ9FP5mwaVHNXap8i3jV'@;
put 'WzMkwUyhSNoxox9COOVC84nppOq4+e2IbHJgf+Llt6ie7lG/nUMa9h0C1jA3OvR1o/sQD/lsnT5diuZfU2imFEaUDmU+JXX2Q44zflFJIK1m907t0Lt7J7Rp0RRxsTHatSJk03eyl5aqjgAH7Hi1lexfuWTlOixasQZ7ySRe3XRDFfXCaiWfy3OL0LY36SLNREQq8VLHOQgXfGulXLZmuA1uoqwI'@;
put 'G6P/1p2KWnTq71Gq/jgrzPkZMeNDG9L2Gtv/kueXIQmm1WrB66MfRrPGDdULbqDZNfaDzzB/8UqjX/8h0X+b3Y0ug1zodDb5P1aCYDIoZrNJ863ZtdaDNXMpJUqWpt/0C16sJapfrzbl0+ygEc4WTRsimkzootn0C9zSaBkIMKnkechz7iglR2dt5eIVa7GeKu+cyM0v4wjfbLJTbtqe5zvRvAsH'@;
put 'i/8zoKe8s7Af5uKpZmxfaSGrhP+uzfLOL9tPjwAXthhyi4OKW7D/ZQUa6dM3pas9+NnALho/jbejUAEfYEMSTJ4RD4y6HkP691EvHybdiGfO+wPjJn2tq4kvnSkbAVs4lYccWoR2Z5oqTTC5JQ7S8dDfIQooWDXbivRU/7+t2mxWNEiuh64d2qAHJXBv3rgBYmNiNPM5+2uKz2bZMpatVUOAzd9e'@;
put 'v0p2zcik6O+tO/dqfpVMKtMzjlFMRrlG6qqdrJy942q7Nc1lk/acl7by5JKbY4K55Gczti0XglkOvEHfXKuuG0NHFiKM8g6TB0T5Lg9B72nVOqAlWN9CFaU+sVftQJ3ubViCef7gs3HvyGuVC/ThmzPnfHvqlXeQm+e/t3udzkfDdUur4HO+C616VF6D6R0kiVozhxyn6qBrfrNhz3qOWg2MxoSt'@;
put 'AClJ9dClfSt069AWzZs0REKteC34iIMtmBio5n7ixV3WvkeACaVXU8llTdMzj2Hz9t1YRbl9N2zdoZFKF82pQCz1W7rQdZATtVPoWiqZ57KSJxeCWUmggrhb6zOc6H0xMUt6Mfbvq0pgB8n+lytm0vNgbs3yJge21+WfzbAEs2XTRnj16Qe0B6JqD0IHPeD/QwnXN27dWb7k5BddIFBMMJ1EMKum'@;
put 'wfR2numkyWJGYQGwdRkF//xhJdNIYEimtw9c+7x2YjzatWxGwUHtNJ/NOom1wGX5mGiK36YXKVl7EeAXYS+h5G3ZFKiTejgNm7bv0kzg23fto/rgOQF9SbGRP3TrXi6yJrgRGUfc0lm90oFCML1S1u/6bCrx2awjydhFL8L67WaVe8YpimZNsiJ1u/8tWlXuXDUOMCzB5DrNY59/hKqb1FHOtGe1'@;
put '2vDlDz/jq59+rYZI5ZBAIlBTguntK/vesH7n8A56e51HEaz7gnODYeIQExWJFvQC16ltK7Rv3RwN69fTTOn8G5NNNqWr9lLnlYOsy0agNKHMy8ujwhCZVAt8PzZs2YEtO3cj9VAanDQ3grEkJLvQ+RwXGrbhSHEK/CiVj7YqfRKCWRW0Ar+vVh7y9kLEUt5hE7laqEIwNf/LEx5MfYdysOYG5/7v'@;
put 'a2kalmAyEE/eexv6UUqWggJS/yi0sGZg3aZtkq7IADL1FcHkoWomcyKaudkeqvpjIR8wKxwFgdVmloacTenJ9BLHkegdiGy2ataYqmglIDIyUttVzOmlEVPju9fkzfciXphQHqUKYzuJUG7ZsZt8KvfgwKEjPk8pVFX0wuweNOvGWksX4hIo3oMTbteQcQjBrKoUArt/wzYunHONi4qkqaW9ZP/L'@;
put 'A9s9mPUR5b/kh4ECi6EJ5mXDB2HU9Vcq54fJ84r9L5+kdEX7Ug8rMM3UHYIvCSajVGwyJ20mqTMP7TRpSdmP7NbP2yxbDlij2apZE3Ro0wKNqYIQm9O9hNNrTpe8m8aZ86ydZELJkd78mWV3Ijf3Lw0lm7u37dqDg0eOBp1QlkQ1qYkL7fu6kNKyWGvJVbRqyC215oVglkRZf597nU9pp84iWTvV'@;
put 'Ipia/+Vsyiwyx/gJ1r2zxtAEsy1pVV5+6n7NXKeayc5MmoP3P/8Ov8xZ4JWVrHWIgK8JpneI/AKrmUxygZ2rKG/mUgtyj+uvdF0x4UzSgoT4emzSsD7qJiYgOjpKIy18XXpJp2rXqFdWRlp7yaRXQ8l9ZwtQ5vEsHEpLx+59qUQm92prNoGzP7jelthE8rXs7USLTh6Ex3Bi9JprLUuOUQhmSTT0'@;
put '9Zn9bIfdVoRaSR6loscZZfa//HWiBYd2GD/BunfWGJpgRoTb8eZ/HlXSD5NNU0tXrcOLb33olZWsdYiARjAvoCjy7lWPIq/McLR0RsQrjx/xYAuZzXett1A6JP0RTe9YwsJsqFc7USOazRo1IOLZgPJw1kV8XAyiTprVhXR60fLvmkkkE0rWTPJnxj0/Px9czCGNUgVxvW/2odx74KBW2CEnN0/T'@;
put 'Xvq3V9VvPTLGg+bdnGjZ3YXYRHoD46I8NbWHl9EdIZhlgKKTTay1HnorJ74k4ZO62hcaaz0MjZUJuTluTHvHjgIF8l96MTU0weRBPH7PSKrBfIZyfpg8No7CfOKlN3H4KOWxkUWXCIRFUB7MYWSy6VW9KPLKDIrN5mYreRyRf9nh3cCmJfSWu81KmsHKHB3cfZjgcNBQvTqJaNygvkY8G6UkIalO'@;
put 'bdSKj0VEePhfSbg5eIjNs/wn2s7KyY3x9f55Tdz8nbXGOSdywWUYj6RnYP/BIxqh5PVh0lTydn+Qs8r1ump7Rca40aQjlWQlX8uEJL4aSGPpI3N4WT0RglkWKvrYxgE+nSkFVQt6ybCRxk/TXuujazXqBftf7t/swexP1ch/6QXD8ATz/EH9cO+t1ynph2kircP4iZMxa8Fir7xkrTMEbOFUJnIw'@;
put '+4L5R4NZcrjEGyg1jJmqVwEHd5JGc4mV/DSZePJD1zgLEyA2rdemvJv1k+qgQf0kNKDyr/Xr1aFcnHGIJfM6+3R6A0zKIp6hREC9BJLXjIlXM8kYFBYWIr+gEMezsin35HHNzM3BN4fSjpJWMo1M39na78aZHX/3NCrOgyYdqBJPNzcS6nHcAxMK//vdCcH8WwZ6/dSwjZPK8zqRkMzJ8DmrhV57'@;
put 'Wrl+sf/lkp+pfPBCNfJfekdteILJ1Ug4HybfeFV76FjItPXnslV4ZdxEr7xkrTMEmGB2G8z1yCtXi9wX3WeiyfWSnQ4mmiZsW2GmtfGrjjBxioqMQEJ8HFUcqktazkQkE+nkqHXeVkw8I2Cn/Jxcz9q7lNR68j2Av3sXvd4TmCx5Fx43L7z2/nl/Y3LtJZEnKJL7GBHGjGNZWgAOm7bTqPRiJn1n'@;
put 'a0dBIU0IBRau0tK0swuNO7gQz6bwABFLL3RCML1I6HsdGU3azMFFaNHVQ1aQk764+u5y2b3jKU5a+V8+CEP6fv0EdJbd2aptNTzBDKPyd2889ygaNUjWzEJVG76+9+aH0DHSTIiZXL9yCgbB9KLBHMVCpvMiCnJI28vBQFbs32pSooatd4zetY3SJcWQZjMuNgbx9JdIms7aCbU04plApva4mGiq'@;
put 'sR6paUbt9jCNhPJLJ5uNy3r59JJQ75rPw2S0NCEt/d3bn5IEkbfxd++2kp+95LHkcUwavflEC6nqDRPD/PwCMIHMzsklbWSOdt0zkeTgG/7LIr/JE+QjydrK8vrkPYcR11abB3WbuNG8E0eFU6L0WNLMk1YqGJHCQjCNNYMatXORNpMCf+oZU5vJyoKsdPK/HGeHs0i//vXVmRWGJ5g86H/dfDUu'@;
put 'HDJASTM5R5OPm/gVZs0XM3l1Jri/jwkmwfSOzUs02Ucz85AHezZasWeDGdnpat2svOMta82kjgOMIux2RETYERURoRFSJp2sFY0mk3tUZLj2OZyCA8PD7LDbbRoRDSNtKNdp54pGxSZoYu6kU7CSO4LJVBwcU/qcHipB6C196KJqIpxgnMkqE8aiIqdGGjkC2+Eo0ohhHkVq5xGJ5PRjubn5Gplk'@;
put 'H8lcCrrJzy/U9udjVSSPpbHzfuexxtYGGrV2olEHN+o0AKw2E1xkBueqA8GyegrB9ErIOOsICgDrOqgIzbu66aXSWL6ZbB7fstSDP35QJz2Rd+YoQTD79eqGJyjpOpuSVFtYA7J8zQYtmjyUHj5GkaMeCKYXK6ZFHAxkMnm0ZO0HdwB7N9hweI856AnbvX3U41ozS5/UQHJiea8Gkgkn/8YE3ruw'@;
put 'rxd/dxKpZELJf05nMbnk65MDZ+Q69aJV9poDNeo2pcCd9i4kkdYyKo4NhEQKivzvX1l2j07dKgTzVDyM9I3dKrqR2TwhyQJnoTHqlNvsFvw+2YSda9RJT+SdM0oQTA4WGEvpitiEVtLk5R2k0des6eCk6weoFJss+kJATwTTi4zGh0h5yWTJSdqgY4c9ZDrnKEULfSYzUnCq+Xm7J+sQRMBO2RZq'@;
put 'N3ShUVsXkpt6EFObEruzHzGR82BqK8sShRDMslAxzrbIWNJmDihCs+7km0kujXqONOeXVUcBmcfH23HiuFr+lzxjlCCYPJD/PnoPunZsSyYpNRzdeUzehYN9Pv7yB0yZOc+7SdY6QUCPBLMkNEw2zTYKHqEPBfkeZBwksrnFgoM7zMhKM14EesmxyWd9I2CPcCMxxU31wd1IIlIZVxfkisAmcDJ/'@;
put 'kwY4WCbw06EmBPN0CBnjd9aQdzuXk7LrV5tppXtz6g43Zn4cbgxQq9hLZQjm5cMH4XZFy0aymW795u0YPWYCaZ9E/VTFOe7X3fVOMEsOnt+WOSiI1/m5bvLXBFIp+vwwpTo6dpi0SYo5mJccu3wODAIRFNlbhzSV9VuRprIxaSrrkC8rkUoPkUq3jkllSXSEYJZEw9ifo0ib2UWLNGfXFv/mT60O'@;
put 'Uux/uWw6sG7+31kxqtOOXo9RhmC2aNJQS1fEZExFHyiONH1uzHhs3blXr3MpJPtlJIJZUkAUu0IBLcVks7DAQ9pMN47s4zJlZqQftCA/m/ZmJiqLIFABAmZ6aEcnUIBOIw9SWri0dXQtrh5E2nHKbmAUUllyiEIwS6KhxuemlJ2g60AH4pOscOnFN5Nur8xVZnB6ogPqmcd55ihDMNkhf8zoh9GM'@;
put '8mJyChDVFk638t3Ps/HJt1NVG5qhx2NUglkSdKaRHBzE6TI4gvdElgfHDgKHiXCm7aUUGkctcOQL2SyJWSh/DrNT4vPk4rRCyRSsUyuJ0grF0MsKvdyzzy/8WGUnELgLwQwEyoE/Byfu7zLIQXkzi9+d/VkNqjKj49rjmQfd+PldO1km1cz4oQzBZIHeft1luPz8IUqmK+LIVq7Q8diLY7VUJ5WZ'@;
put 'wLKP/xFQgWCWREmjkScDhEDaqaJCIpzHgczDZqRRNPpRIp45aRby5xTCWRI3lT9brGTqTiBC2chNuSpJS9mAtJbxQFg4WYuYT5LpW2+BOjWRhxDMmqCn/2ObdXGSNpOS+NelF6IgajPZPL5uoQfLflYvPZF3FihFMLt2aIP/PPIvJTWYLDBO5THm3Un4c/kar/xkHWQEVCOYpeFkGmkizSb7bvIM'@;
put '1Agnmc+z0kxITyXfTfrLPEI+nTkSnV4aO6N+t1DS8xgikAn1XahHhDKhvgfxtT2wRxancOJyjW6Daykrko0QzIrQUeO36HjOm+lAsy5cICE4vpmswZz1iQWp29RLT+SdJUoRTK5vPPb5R5BUt46SwTBSOtI7bfWzVp1glkZa01sS4SxOQu6hlzkPCvJIy5lJVaeOmJBxqDhgiJO8F+ZSbkOPaDpL'@;
put 'Y6i372GUQiiW/CgTUzxIbOBCYhJpKBPdlLDeqr1c/OVLqdewbx8DKgTTx4DqtDn2f+TE7F0GOlErwNpMdkfKyXRReqJwSlOkpnmcxa4UweQB3XfrtRg+6GwlzeQ8vmzKifn0K+9g/8HD/FWWICMQagSzNNwafaT7o4UTktMbOXmta1rO/FwP+XJyKiQyrx+yaBrP7Ayg8ASlDJFECKVhDNh3WxgR'@;
put 'R4qsja9DZDKZfCmJVMbVoWTnsVQJyU6CpHxWXkLJeYRChFOegr8QzFPgUP5LTLwbXSmdUdPOpM2kGR8I30xOrr51uRt/fG9XGl/lCGbvbp3wzAN3KJkPk2eixWLFVz/+gq9++lXpiWmUwYU6wSxLTsVaTpqrFKruJZ1OqtLCpDM/x4wcIprHj5roz4wT6SbkZpnIp7PYn6+s9mRb1RFgGYRFeqim'@;
put 'txtxiUQoiUzWqgf67CKCaUJ4JLk9aBk3in0oA/FQrfoognOEEMzg4B7Ms7I2s0U3NzqfQ5HmdSnS3OHfKkC2MDN++9xCZX3VjB73ylI5ghkbE423qKpPAlX3UTFnJKdh2rX3AJ5+9R0J9vHO4iCuhWBWDnyNdNJ/mj/nyfRIXDvdUeBCYR75cJ4gjecxC9VPNyE7kzSeR4E88vUszJP8nBUhzJmk'@;
put '7EQkwyn/ZEwtN9X2Jo0k/XFQTjRpZsKjiWhGUI112pG1kRyQw2QyVLWTFWHp/U0IpheJ0FvzNcR5M5uTNpMvEn+8eJnJSpCbQ9Hj4+z00q2ueZxnj3IEkwf14KgbcG7/s1BQUMBflVs42Oe18ROxaOVa5cZmtAEJwayZxDTiSf5IXGnIfJJ4sjahiKI7CylSvZh8msjcToTzGK/NRDxNyMuh30gj'@;
put '6ijg1Eqc+7Zm/dDz0VarmyK2vRpJUO1uIo/0IGQzd2QcmbxjSCNJfpQ2ikq1EJDs9soPRibwHv5TGBt/yE0Ipj9QNU6bfP9p1d2FzuSbGZtIwYs+1mayeXz7ag8WfK1u9LhX2koSzL49u+LJ+25HYWGhd5xKrS2U83PZ6vV48a0PtUStSg3OYIMRgukfgWnEk8gSE08T/ceaT20b3fxdFFjkKKIA'@;
put 'o0JaEwktIC1nYS4R0BO8JvJJnwv5cz7V+c2jYCN6z3QXAUVURZbJqJuy6gR7sVg84GhtK7lg2aiIhz2SNY2kcYwCIqI8RBpZKwnKL0mfo9ywhpOPZDiRSDKtWdnXlTWSRBw5kTlxSPogRNJXMhWC6Sskjd1OLAW6dSVtZpOOxb6ZnDnBFwtfw3O/NGP3enWjx704KUkwVTeTc07M/IJCPENm8h17'@;
put '9ntlKesgICAEMwig0ynZNMz/kccIrTk2hQNUtI9ah1hz52QtHqXUcRK5dDrY1E5rqsHgJKLppHdPRyFpP3k7fS+i7S6NgNJvRRTo4mLNKFei0WgtkTn6TqTW42Zyx6cgOwKd30JKiGLjs4c0sNDIn4nyRtro2WGmtSXMQ8EznOaJCCSRSSsF2dh4bad9iFjy8RZaM2nkVFCsgSxun87ABJLZsLbm'@;
put 'UwqJ1ITr5/+EYPoZYEM1z76ZLnQf4iKXE7NmWalJ90PJPM44KUkweWD333Ydhg7oq6yZnCv7TJ05Dx98+QMPV5YgISAEM0jAV/K0XiLKuzN385I3vtFrX0qQUt6n3OUkuWPS99dCTZj5BNzUaRbtMI0rMkktboSTlGufuNHif6dpRX4OBAJCMAOBsrHOEVvbhZ7nFaFRe28J1OJruKqj0Mzjq8g8'@;
put '/o365nHGRlmC2bNLB4x+6C5lo8lZe3I0IxNP/N9bSM+kUiuyBAUBJpjdB7vQvi9pwchvUBZBQBAwNgJCMI0tP3/1ni0VrXq5tLyZ0XGWat3vrSfN43tCwDzOclCWYEaE2/EmRZOrmnSdhWcmm9ykb6bgxxlz+assQUCA/eJ60Jtt216mat1wgtBlOaUgIAhUgIAQzArAkZ8oUwNpM4cVoXEHCgA6'@;
put 'WdWqMrBo5vFsF6a+E07+4ezbo/6iLMFk0Y26/nJcNvxcZZOuF6cs2o+nKPF6Xr6aEfN6vwQ5MKPXBS6KOhQNpt5lJf0TBCqDgBDMyqAU2vuwNrPNmS50HcB5ZSvnm8m1x7cspeTqP6idXL3kzFCaYHZo3QIvPn4v+cazc3z1fCZKgqXLz2Qqf/ujLzH3z2W67J7qndII5vlOtOohGkzVZS3jCw0E'@;
put 'hGCGhpx9Mcr4ui6yYDnRuK2ZggApo8NJ/+qy2uZ5NfsTEw5spai+EFmUJphWSuczZvRDaN6kEYqKKIRUwYVTFq3btA3PjZlAUbPiAxhoEQvBDDTicj5BwL8ICMH0L76qte7VZnYZ6KK0YmVrM7n2+PEMN34ZF07p0ioRFagISEoTTJbR1RcNxS0jLlXWTM5jdNFb0yvvfITlazfyV1kCiIAQzACC'@;
put 'LacSBAKAgBDMAICs4Clq1SvWZjZq809tJpvH1/7uxvIZoWMeZxErTzAb1k/StJhhlHROVTM5+2IuX7MBL739UXHePAUvXr0OSQimXiUj/RIEqoeAEMzq4SZHEaEyedD2TCdVAXIjMvqkNvOkwvLXD2xI26927fHSc0B5gskDfo7SFfXs2lHZyj48Rgdlin7xzQ+wbvM2/ipLgBAQghkgoOU0gkCA'@;
put 'EBCCGSCgFT5NfD0neg53oSFpMznH7eE9Tkx/P7y4UIPC4y49tJAgmOec2QOP3XOrsknXWahW0tDOX7Qcr737SWkZy3c/IhBGNaB7Dneg9Rll+9748dTStCAgCPgBASGYfgA1BJs0m0mb2ceJHkM8WDXHhPXzQye4xyvukCCYMVGRGEs5MeskJsClaCAMJ14vKHRQsM94bNmxxytfWfsZAZud69W6'@;
put '0LGfpCnyM9TSvCAQEASYYC6aYsbO1RatbGhATionURaBhCQXCnJNyMsJjdyXJQUZEgSTBzzqOsqJeb66OTF5jBYqH7lwyQr8b4JoMRmPQCxcW7rdWW70GEa1r6WSTyAgl3MIAn5FgCN+F3xnwd71lEj7ZC16v55QGhcEFEUgZAhm6+aN8fKT95MTLiUVUDQnJo8tv6AQz78+QbSYAbpgLVYPmnZy'@;
put 'oe/lLridiuZaDRCWchpBIOgIcECGy4PfvrLh4A5LyPnMBR1/6YBSCIQMweT7xouP34fO7VsrW5+cZ6ZoMQN7fXLUYFITFwbd4ITZSucWjhlYAcjZBAFfImA2wZHrwZxPwpB+mJ4aHn5yyCIICALVQSBkCCaDc+7ZvfHgHTcpHewjWszqXAbVP4a14XGJHgy6yYHYRNKOk/ZDFkFAEDAmAmwezzxC'@;
put 'GsxJYcgNQZ85Y0pNeq1XBEKKYMZER2Hs848oHezDE421mH8sXan5YqrqDqCnC8oe6cZZlzrRtIMJTodUU9KTbKQvgkBVELDZLdi+0oMlv1jhyAu9oIyqYCX7CgKnQyCkCCaDMfLqi3HVxecpXdmHx+mg0pj/pbyY6zdv56+y+BEBi82DNj1d6HWhBPr4EWZpWhDwOwKWMDMWUwT59lUU4FMk5nG/'@;
put 'Ay4nUBqBkCOYjRsk47VnHoLNZlU22IdnLNcoX0GlIzn5usvtVnoSB3twFFuFhBQXhtzogC2CtB5UulMWQUAQMBgC5H9ZmOsm/0s7MsT/0mDCk+7qEYGQI5gshGfuH4Uze3RRurIPj5NrlL82YSKWrFrPX2XxIwL2SA/6XuZA4/ZmMZP7EWdpWhDwFwJWMo/vWushDaYVhfliHvcXztJu6CAQkgTz'@;
put 'jC7tMfrBu1BEZmSVF9Zibtq2E6PHTCAy7VB5qEEfm8XiQeOObvS7oogCfYLeHemAICAIVBUBskTM/9qK/VstlHJMzONVhU/2FwRKIxCSBNNGQTD/e+YBtGjaWHmSSYk/MX7SZMxesKS07OW7jxGIjHVj4DUO1GlsJv8tcUvwMbzSnCDgNwSsYRak7nBj4WQb8nJFe+k3oKXhkEIgJAkmS/j8Qf1w'@;
put '763XKR/sYzabsS/1MJ58+S3knMgNqckd6MFarG406+JGn0vccLuEYAYafzmfIFAtBEhZyfrKBd9YsXczaS+lek+1YJSDBIHSCIQswYyNicYbzz2sfMoiFrjVasNn303FN9NmlZa/fPcxAhFRbpx9VRFSWokvpo+hleYEAb8gwKmJdorvpV+wlUZDG4GQJZgs9puuvBDXXHq+8lpMTr6ecSwLz7z6'@;
put 'Dg4eORraM97PozebqbJPMzcGjHDCaqdCIBJR7mfEpXlBoPoImCixegFV7vntUxsyDpops4j4XlYfTTlSEDgVgZAmmMn1auP10Q8jMiICbsVT+VhtNsya9yfenvjVqTNAvvkcAZvdg479i9B1oAlFhRLx43OApUFBwBcIEJdkF6Jl083YulzyXvoCUmlDECiJQEgTTAbivpHXYPjg/iGhxSygSPKX'@;
put '3voQ6zZvKzkH5LMfEIiIJlP5lU40aC0k0w/wSpOCQI0RsIVbsHWZmwimDQ5JS1RjPKUBQaA0AiFPMFs0aYhXnn4AFnqTVb2sIqctWrtxK14Y+75W6af0ZJDvvkNAS76e7EL/EUVUq5yiyp0S9OM7dKUlQaBmCHDOy8O73FhAaYlysswU5COm8ZohKkcLAv9EIOQJJkPyxL234uzePVBQUPBPhBTb'@;
put 'YiIizWmLZs1frNjI9Dcck8WNBi0oAfvlRbBHmig6VSr86E9K0qNQQ8BqM+NYugfzJ1tx7JCFFAuhhoCMVxAIDAJCMAnnTm1b4oVH79E0mKprMTng58jRDDxNAT9HM44FZpaF8FksVg+atHfiTEpdZLFR0I+QzBCeDTL0YCNgIXJ54hhpLr+x4eh+M/nei+Yy2DKR86uLgBBMki2Trucfugs9unRQ'@;
put 'vnwkT2ULJZr/Zc4CvPfZt+rObB2NzGLzoHlnJ3qeLyRTR2KRroQYAkwuc7Pc+PMHGw7uJJcoIZchNgNkuIFGQAjmScTP6EzlI4lkql4+kofLhJoDfl586wOs37w90HMuJM/HJLMFkcwzLnBTXlKIuTwkZ4EMOlgIcKWe7AyXRi4P7xFyGSw5yHlDCwEhmCflzUE+/33sHnRu3yY0tJgn65Q///q7'@;
put 'yC8oDK1ZH6TRcqWf5p3d6HkB5cgkbYpU+wmSIOS0IYUAJ1LPPOzBoh8sSCOzuOS6DCnxy2CDiIAQzBLg9+7WEc88cCccDkeJrep+tFismPTNFPww/Td1B6mzkZktHrTs7kS3QW6Ex5ikZrnO5CPdUQsBTkV0aJcHi6dYcDxNAnrUkq6MRu8ICMEsISGr1YIXH7sXHdq0DAmSyabyrJwTGP2/8dhz'@;
put '4GAJJOSjPxFgc3mDVk50H+ZBfG3A6ZAURv7EW9oOQQTMXCLXjN0bgGU/W8n3koN5JKAnBGeCDDmICAjBLAV+nzO64Mn7bg8JgslDt5JD4OIVa/DK+ElwuaTqTKnp4LevXFIyMcWF7kPdSGkOFHGeTOGZfsNbGg4dBMxU/pErs21facWKmRYUFRDblEUQEAQCjoAQzFKQh5oWk4cvuTFLTYIAfo2O'@;
put 'd1NZSSdadKfgH4skZA8g9HIqBRGwhJlReAJY+7sZO1bRZ6nQo6CUZUhGQUAIZhmSCqWIch4+1+NNS8/E6DHjcfDw0TIQkU3+RMAW7kbTjm50PseF2AQqLVlEqkxJ/uxPyKVt1RAwm8gaY0LaXmD1b1SlZze/rIlJXDUxy3iMhYAQzDLkxRHlLzz6L3Tp0DYkIsoZAqvNhoVLVmDMu5/CReYlWQKL'@;
put 'AJvMayW50GWACw3aerRUUm6nsMzASkHOZkQEOL+lk17Ktq0wY9NCK7KPc+FHIZdGlKX0WS0EhGCWI89uHdviOcqLGUp+iZqpfCKVkVwgZSTLmRZ+32yPcKNZFxfa9/EgjgKAioqIZLqFaPodeDmB4RAwkdbSQlrLzEMerJ1nwf6tRDQd4m9pOEFKh5VFQAhmOaLlCOvRD9yBXt07h0SNcoaBTeVc'@;
put 'PnL0a+ORejitHGRks78RMJkouryeG+37utCknRu2CDL3idnc37BL+0ZBgJSTNtJaFuR5yM8S2LTIhpxjrLEUraVRRCj9DA0EhGBWIOd2rZrhxcfv025bqtco98LApvIlWlT5RDidElXuxSUYa05nVL+5Cx36uFGvKZnNSWOjEc1gdEbOKQjoAAE2h7sp2wWXetz4hw1H9oB8LUVrqQPRSBcEgX8g'@;
put 'IATzH5CcuuGRu27GzJmaHAAAQABJREFUwL69QkaLyaM3U5Wfj778HlNnzT8VDPkWFATCIjxo0tGFNj1dqF3fRJVI+KEqfrJBEYacNCgImMkUbqYXrIyDbmxabMXeDRY4CkRjGRRhyEkFgUoiIATzNEA1bpCM/z3zIOxhYVputdPsrsTP7B5wIjcPXEZy++59SozJ6INgDXpUjAdNO7nQsqcbCfWI'@;
put 'aBLHFKJpdMlK/ytCgHNaMrnMJo+drStN2LnKgtxsCuGhe5QsgoAgoG8EhGBWQj533nAlLjlvEPLz8yuxtxq7WEiLuXHrTrww9j3k5ReoMSglRuFBRAzQrFNx7syEJB4Umc5ZoymxQEpIWAYBCt4xw2QBso+Sn+VqM3autiCHosPhEWIp80MQMAoCQjArIanaCfF447lHERcbHVJR5Vzl5/tfZlO9'@;
put '8qmVQEl2CSQCHmKTkdFAo/YutOjGpnOP9lB2cmojiToPpCjkXL5CgLgjl3fk96TjR4hYrjFhzzoK4DlOG4RY+gplaUcQCBgCQjArCfWVF5yLW6+9PKS0mGyGKipy4vX3P8PilWsriZTsFmgErHY3GrR0o0VXCgZq5kF4uAlOF1FQ+pNFENA7Ahy8xknSucBAxgFg51rysdxoQT5V5JHIcL1LT/on'@;
put 'CJSPgBDM8rE55ZeoyAi8Pvph1E+qS9HVzlN+U/kLpy46cjQDz1LqosNp6SoP1fBjs1jdVN/cg+aURzOltQextdikCJqvYj43vHBVGwBrK6k0KsgMXpDjQepOE3atMVMFHqodXihmcNXELeMJTQSEYFZB7sMG9MF9t14XMtV9vNCwqXzZ6vV4ZdxEOIqKvJtlrVMEOI9mVJwbjdpRUFAHJ5FOyhto'@;
put '59J5HkrxIlpNnYotJLploqAdK/3xS8+xI8C+TRbs3WTG8aNkGncJsQyJSSCDDBkEhGBWQdSsxXzm/jvQqV2rkCOZFosVX02ZTn8zqoCY7BpsBDiXZr1GLjSmWucpLUirSbXOObErk02P+GoGWzwhcX4mlRb6Y2169nEPDpO2cs96M9UNp1RDoq0MiTkggwxNBIRgVkHubC7mEpJP/fv2kEq+zhCx'@;
put 'P2aho4hqlX+CZWs2VAE12VUXCJBWMzIKSGnlQsN2LiQ14mh0Cz3zPaRNoie/kE1diEmVTvxFKulOmZvlwtH9ZuzbbMYhSpCel03aSlGkqyJqGYcgUC4CQjDLhabsH8JsVvzr5hEYOqBvSAX8MBqcuoj9MJ8bMwEHjxwtGyDZqnsETGb2z3Sjfis3GrYmv80GoIh0fuh7RLOpe+nptIOkoORE6Fwb'@;
put 'nPOz5ma7SUNpxoHt5Fe5g/LqZvH8op1kEQQEgZBBQAhmNUTdKCUJLz52X8ilLWKo2B9z5bpN5I/5MfILCquBnhyiJwTMFjabE9lsSWUpW7hQpwFpOkmzCdJ4aj6brNkUbZOeRKafvnD0N5m+TRSrwyVMsylPZdpe4OAOC47sNp3UVAqp1I/ApCeCQGAREIJZDbytVgsuGz4YI0dcGnJaTIaLSeZP'@;
put 'M+fhgy++l4oa1Zg/ej2ENZvRpNms19iDlJaUW5PIZkw8aaVsxVopTn0kpnS9Si8A/SKuaCFSyZV12JG3MNeJYxScc2SviUilGZmpFhTkcT+EVAZAGnIKQUD3CAjBrKaI4mNjMPrBO9GqeRM4HI5qtmLMw9gfk5VaEyZNxqwFS4w5COl1xQiQBjM8Akio70Jy8+JAobh6QEQUVVgh/uBxUfoj1m6K'@;
put '72bFOBr5V5Izm721co3sg13gQm4O56okUrnHqhHLLCKYbon+NrKUpe+CgN8QEIJZTWjNdMPt1a0THvvXLVoL7L8WSguTzByqV/7yOx9pJSVDaeyhOFY2pcfU8mh5Nus1cSGxvhuxtSlQKNKqmdO1uuic3J2vg9C6FNSZDkQoWUNpIg0lX9/OQiKUWR5kHjHj6D6O+jbheJoZhfm0o2gp1ZG7jEQQ'@;
put '8BMCQjBrACwH/Nw78lqc2/+skDSVc9DP/oOH8Z833tOSsdcASjnUYAhY2Jye6CENp5v8NilQiEpVxhHhDI8ivzwbabWIaHIlIRcFfIiWU4fC9WonmVCSDyWXYszPd5LfpAnHDpmQTlrK9FQzsohcFhQU/67DUYR8l2z0DLKH2RAVGYnwsDDY6LM3RJ/f85xUia2ALGx5efnII0G6tAsy5GETAAKE'@;
put 'gBDMGgLdILkeBfzcg4Ra8SFV4ccLG/tjrli7Aa+OnyRBP15QQnBtJpN6RCyRzLpEOpPcSEj2IJ4+R9E2O5nVuRQgazfZtM7k0y3BQ4GbJV7NJAXkEJ8kBTOVZSTtZP4JD7IzyHfysBkZRCozD1JKoWNmFGkeP6yllEVPCERGhCO5Xh00bVgfjVOStapyibXiEBsTjXA7kUubjYKuLKf4xTtdLi1n'@;
put 'M6eYyzmRi6MZx5B6OA17DxzCngMHkXoojdLPhZaLl55kqnpfhGDWUMKsxbtgcD/ceePV9KbPr/qht1jpxjZ9zgK8+9m3xSbS0INARlwGAnRpIDKWTOl1PKhFZDO+jovM6rQt3kWaTjPCqLoQ+/hpxJMt66zxZLWLmNnLQPM0m5gPklmb85lzDkr6qBENFwFamOdEfq4ZJ46xiZs0lEQos2idTd8d'@;
put 'eZKT8jTIBvXnlKQ66NS2FTrSX/PGDVA7IR6RpK3U/ODpOuGyxcXXT7F7Cn/m30ou/J3/OI+z94/3O0GEMy0jE1t27Maq9ZuxadtOHMvKKXmofBYEaoSAEMwawVd8MFf4efLe29CVkrAXFoZm6h6z2YJJ30zBjzPm+gBRaUJVBLiMpT2CUiGRZpPJZkxtIqAUuR5di4hnHJnYIz2w2oGwMCs9FAkF'@;
put 'IpyauZ3LqdNDkasPMQcNOT/Pk5yBrdmshmRizqZtjWjQJlehm4Jw3CjIp0TmWUBOOnCctJM5FISTfYzzUrJPJTdyKvng5mTRFwJ1EmuhZ5cO6Nm1I1o0aYha8XGanIuoTK/b7dauA1/0mOcOK0hY8+kiTWdaegY2bNmBhUtXYc2mrRS8KmWBfYFzKLchBNMH0ucLtW2Lpnj+4bvpwWjTbgI+aNZQ'@;
put 'TTAGRU6XVulnyap1huq7dFYPCHioXjpgJ4IZGcPkk9ZUTz2GSGcEE0+qQsS/hdE+VkqbZAujaHZW19GiEVEioExENULqjWw/SUY1Qso7/vWBv+hgOcn1NNqnMcdi4sg9I2WTRiR5SNqYyHeuyEF/RBId+R7SSBKJzLTgxHHgRCYlMifTdl6OCQW5bP7mFoRIMgpGWfjlqW3LZhjS/0x07dAGdWsn'@;
put 'aqSSM5Twb4FYmGyGkR8nE9mde/bhtz+WYQGRzeNZ2VpfAtEHOYdaCAjB9JE8beSLOOKSYbjusgtCMuCHYWTzy5GjGXiNyklu27XXR8hKM4IA0SUKKgqz0194MdEMjy4OKIqIdmvEMyKKfqO/cCagtI+VYh2sNjcsYTwvKfDISuZBzh+vqf0IUeJff1Ew/nCSyBWv6H/vM927Pp0QvI1p7RZ/0f7X'@;
put 'iGNx+381xc0T+eWAC05m73KaKFE5iEB6UFRABJL+ColA5hFZzD9Bf2S1zM+hYBtaF1AEtyOfgze49eLznK5r8rt+EeAX887tWmH4oH4aseRgHTZ7s0YxmAsTTSace/enYubvizB74RLNhzOYfZJzGw8BIZg+lBnnxnz2wTvQunnTkMuN6YWRSebOPfvx2nuf4OBhKSfpxUXWgUKATOyUUslMWk6L'@;
put '1Wtu98BC5NQWRppPIp62cLdmhrfa6Hfaj9dc4pD3N1PWJYvVreV+5Ie/2UwklROLk2n/L9JZciisPiUNk5MIosftLbdJJmviBy4igW4nkUH6c1EchYO0j07vmrSMHFtRVGAm0zURy0Iz7c8+deyTKsSxJMSqfm7VrDEuHjqA0t11RGREhPbMCJS2srKYchAnm9B37d2Pb6fNwvwlK0PSQldZvGS/'@;
put 'UxEQgnkqHjX6xuSqS/vWeOb+UZpJQW83ixoNrgoHm+nNd82GLXjj/c9wPFucxqsAnewqCAgCiiOQQD6VlwwbgHPPPlOLAGeTtN6fFUwyeVm+ZgM++24adu8/qPs+Kz6NDDE8IZg+FhObym+66kJcccHQkDWVs+aHTZELl67EOxO/QkGhpMHw8TST5gQBQcCACPTs0h7XX34hmlFEOJvBOWjHSEsE'@;
put 'aVozMo/h66kz8ctvCzQ3DyP1X/oaWASEYPoBb35Dff7hu+gm0jBkTeVMMjnWYua8P/DR5B/J9BdcnyI/iFmaFAQEAUGgUgjEREXi6ouHYSgV5QgnR2H2szTqwr6Z/Dd/8Qp8TPf29EyKNJNFECgDASGYZYBS001cRrJbp7Z46r7bQ9pUziTTRSzzh+mz8cUP02sKqxwvCAgCgoDhEGhCidFvu/Yy'@;
put 'dGrXmvx03YbTWpYHOOfj3LZzN97++Cts371PTOblARXC24Vg+kn4xabyi8hUPiRkTeUMLfulchWJz7+fhqmz5vsJbWlWEBAEBAH9IdCzaweMvPoSpFDFNyNrLctD1m63I/PYcYz/5GssXbWeFArGMvmXNy7Z7hsEhGD6BscyW0mIj6WAH4oqb9E0ZBOwMzCsyWQ/zI+/+hGzFiwuEyvZKAgIAoKA'@;
put 'SggMpZyWN1x5EeKolKOK5NIrK44053KT73/+nZY7M9gplrz9knXwERCC6UcZsPauU9uWeJqiylmjaTSHbl9Cw1icyM3TyklypQhZBAFBQBBQFYFLKP3QNZcO12qEh8J9n30yWXv5yTc/YdpsDv4Rn3tV53ZVxiUEsypoVWNfq9WCERcNw/VXXBjSpnKGjknm8ewTGEeR5cso3YUsgoAgIAiohsDl'@;
put 'wwdT0Y3zEGYLLaUC39/ZWvXBF99j+tw/hGSqNrGrMR4hmNUAraqHRHOt8vu4Vnk7FBQUVPVwpfbnmxBHHY6bNBmr1m9WamwyGEFAEAhtBM6nijw3XXWxRi71ntvSH5Li+zuXbB1P9/d5fy6HUzSZ/oDZMG0KwQyAqPitrkWThnjuobsQEx0V8m92bE5JS8/E2A8+x4atOwIgATmFICAICAL+RaBf'@;
put 'r26468arqCpPeEhHVPP93UGBnS+P+wir1m3WCKd/kZfW9YqAEMwASYYvuvMG9MFdN10NI1Ru8Dcs/KZ7mOqWv/3Rl0Iy/Q22tC8ICAJ+RaBdq2Z4cNSNqJNYK6R97b0gc+WfoxmZ+M/r72HPAan648Ul1NZCMAMocbs9DPfecg0GU4mw/Pz8AJ5Zn6cSkqlPuUivBAFBoPII1E1MwKP/uhktmzYW'@;
put 'clkCtvDwcGzYvA0vvvWhlAwugUsofRSCGWBp162dgP88fDcapiSHbJWfkpALySyJhnwWBAQBIyHAQZysNDj7zB4wUcdD0e+yInlxMvYfZ8yhFHVT4KCa67KEFgJCMAMsbyZUXdq31oJ+Qj11kRd6L8l8hypCrN+y3btZ1oKAICAI6BqB4QP74pYRl1IaOouQyzIkxfEH/Pfau59g0fI1koi9DIxU'@;
put '3iQEMwjS5bdeTmVxM1V4CPWoci/8TDKPUODP2x99QSRTAn+8uMhaEBAE9IlAY7JCPUHZQZLqJAq5rEBE7I+ZevgInnl1nBbcWcGu8pNiCAjBDJJAOdLw4TtvwllndBV/zJMy8EaXc9kxSWEUpIkppxUEBIHTImCloM37br1WM41zffFgLawd5Psm//HCL+q8eE31XEGIk557v2s/BuE/MZUHAXQd'@;
put 'nFIIZhCFkJJUF6MfvBP1ac2R5bJAu1FmUG3bdz/9FktXrxdIBAFBQBDQHQK9u3XCv2+7nir12ALeNyaVYWFh2nlzc3ORcSxLyy3M981cDh71gPplR1xsNNjnPyEuFvHxcZqp2ks4A91p7jPnxHxuzARs3Loz6IQ30OMP1fMJwQyi5M100XXr1BZP3Hsb+I04FEqKVQZufhs/np2jVYSQspKVQUz2'@;
put 'EQQEgUAhEBFux1P/vh0d2rREILWXrJ1kYpmbl4ct23dr1dA2Uh7hQ2npyMsvu4BHGJmnE2rFUYR7I3Tt0Aad27VGUt3aGsELtFKDo8qXrFyLl9/5WKtdHih5yXmCh4AQzOBhr52Z/TEvO2+Q5igu/ph/C4Nvply7/NNvp2Hm/EV//yCfBAFBQBAIIgID+5yBO2+8OqDVeuykkTxB2so/l63Gr78v'@;
put 'ws49+6tVJacWaTP7nNGFUuX1RvMmjTSCHKi64azF5OW/b74vCdiDOH8DeWohmIFEu5xzhVN+TPbnGdi3t/hjlsCISWZ+QSG+mjIdP838vcQv8lEQEAQEgcAjwNrLp/89Cu1aN2dHR793wOtfuYzchb6dNgvbdu2tFrEs3dEoKl88qG9PXDx0IJLr1UFhYWHpXfzyXbSYfoFVt40KwdSJaGonxGul'@;
put 'JJs1bhiwi10nQ6+wG0wyi5wuTPn1NyKav4Z8mc0KwZIfBQFBwK8IsPbvnluuRUR4mN/9CNkczlacyT/NwIy5f6LADySQ4wBGjrgEvbp3hpPiAPwdDMRaTK5V/ixFlG/cJr6Yfp2sOmhcCKYOhMBd4AuvXctmmm8P1ytnZ2xZihFgkukmZcHM3//AJ99M1bSago0gIAgIAoFEwEL3oYfvugm9u3Wm'@;
put '0/pXe8km8dRDR/DuZ99g7aZt9Dxw+W2o7P9/1UVDtdR57LLl71iAiIgITJs1j3zsf5Dk636Tqj4aFoKpDzloveAb2MC+vXDvyGu0i9zfb5M6Gvppu8IE3ET4LFq+Gu999p2UHjstYrKDICAI+BKBZo0a4On7b0cCRWT7897M5HL3vgMY+8Hnmq8la/wCsZxLfpm3XnMZRaD7VzvLZv9Minh/7KU3'@;
put 'ceRoRiCGJucIEgJCMIMEfHmn5eo+119+Pq6++DzxxywFEpNMM92c1m7coqUxSj2cVmoP+SoICAKCgH8QuPLCIRhB92WL2eQ3gllMLlPx+vufEslM9bs2sTRS/Xp1IxeAEVqaI39qMnmcbxKB/u2PpT7xKS09DvmuDwSEYOpDDqf0gh3JOQl7n57dhGSegkzxFyuR8J1792MCJWTfunNvGXvIJkFA'@;
put 'EBAEfIcAp/th7WXHtq38FtzDFW/SqJrZa+9OwtYde4JWVvG8AX1w+/VXgNPo+UtTy8E+fyxdqZWQLHRIDmjfzVR9tSQEU1/y+Ks3nCD32QfugAT9/AXJKR+YZPLN+IMvvseSVetO+U2+CAKCgCDgSwSaNUohgnkHmcdj/UK6ioMZnZpZfOmq9RTYGFwf/Fsp8OcSSp/nr1gANpMfy8rGoy+8rpUI'@;
put '9qWspC39ICAEUz+yOKUnbA5u3byJFvQTHxvjtwv9lJMa7AvfpHLz8im6fAamzZ7vlxu/wSCR7goCgoAfEBg+qB9uufoS2CgIxh9aPTYZfzN1Jr6ZNrPcpOl+GFa5TXIp46dPJpP3V55M1tj+39sfUvL1dUHT1pYLgPzgEwSEYPoERv80wkE/Z/borJnLmXD60yfGPyPwf6v85u9yufHLbwvw5Y/T'@;
put 'JcLc/5DLGQSBkEPg/tuvR/8ze/jFPM7kchOl7HmFKtwczTymG2zbtmiKZ6mUMbts+YNUc33yb6b+qhXTCLbGVjegK9YRIZg6FyinjbhoyDm47drL4XA4/HKh6xyC03ZPizA3mbF8zQa89/m3OJqhn5v0aTsvOwgCgoCuEeCk5Oyu1KpZY5/3k+9dHCM+5t1PNFcff6Yjqk7n77zxSgwfdDZcfjDZ'@;
put 'M7Feu3Ernn99AuX4dFSne3KMzhEQgqlzAXH32MH81msuxcXDBkrQTzny4hs1m8x37NmH9ymN0eYdu8vZUzYLAoKAIFB5BBqlJBHBvBOJVNPb1wuTrKXkQ/4GRVRn55zwdfM1bq9Bcl28+Ph9iIuJ9rlyg+/XGZSu6NEX3tCV5rbGoEkDfyEgBPMvKPT9gd+iH7rjRpx1RlchmRWIioN/+KbFCdnn'@;
put 'LVpewZ7ykyAgCAgCp0egZ9cOuP/2GxDpY1NxseXFhP9NmEQkM/iBPeUh8a+br8bQAX19rsXk8bvcbjz18ltaNhB/mOHLG5NsDwwCQjADg7NPzlInoRaevO82tKGKPwUFBT5pU8VG+M24kNwJps76nXx8ZmmfVRynjEkQEAT8j8CF5/bHTVddDKvF7FMtHge57KJ0ay+88b6uNXidKDXTMw+MovFb'@;
put 'fA42l8N8+Z2PqIDGGgn08Tm6wW9QCGbwZVDpHvAbX+MGyRTdNwrJ9epoPpmVPjjEduTgHyrAiaWr12Hi5Ck4lJYeYgjIcAUBQcAXCNxM5JJJpsXHBJNLJn7/y2x88cMvuogcLw8rDvJ5iczkzRo38HmgKWPwwRff4aeZ8/xaDrO8scl2/yIgBNO/+Pq8dSZOHdq0wBP33IroqEhJX1QBwl6/zL0H'@;
put 'DuKjr37E6g1bKthbfhIEBAFB4J8I+COC3Gsef21CcXCP3qOo777pKgwb2M/nZnKOJP/u51mY9PVPQc/9+U/Jy5aaIiAEs6YIBuF4b/qiB0fdCI4y91eesiAMzS+nZL/ME7l5Wo45NptzWiNZBAFBQBA4HQJMBB/71y3o1bXj6Xat0u+sKOCgnudff5eqkh3wqem9Sh2p5M5D+5+Ju2+5Bm6Xq5JH'@;
put 'VG431mDOnPcHxk2aDEdRcJPLV67HsldVEBCCWRW0dLQv+xlySa9RVNKL82OKg3TFwuEbOqcDWUjlyT79dpqkMqoYLvlVEBAECAF+gX/qvtvRuX1rcrjx3cL+l3v3H8Tzb7yrVSTzXcv+aalD6xZaqiabzerTE3DJyAWLV2i116VkpE+h1UVjQjB1IYbqdYJvflddOBTXX36B5MisBIQlTeYfk1/m'@;
put 'qvWbK3GU7CIICAKhioA9jGuQjyK3pJY+TbLO6Yk2bNmOl976EMezc3QPb0pSXfzfE/chJjrKp31lHJavXo+XKNCnUHJh+hRbPTQmBFMPUqhBH2xk/h1JdWMvHT5Y0hdVEkc2meecyNWizH+cMVeizCuJm+wmCIQaAlwycTRVs/F1knUmVivXbaQURZ/oMv9laTnXrZ2AFx+7B3USE3xqLWMcVq3b'@;
put 'hBfefF8IZmnQFfguBFMBIfJb9j0jr8G5Z58lJLOS8mSTOWs0V6zdiE/IZM6BQLIIAoKAIFASAbs9DKMpyXqblk19aiL3Eqv/UQWfLANoMGsnxGsaTH8QzOVrSIP5tmgwS847VT4LwVREkjEUUf7AqBskEXsV5cm+UEeOZuCrKTPw28Ilmp9mFZuQ3QUBQUBRBNhC9PT9t6Mj5YL0pQ8m53/cvH0X'@;
put '/jv2fUOYyJPqJGoEs1Z8nE81mJoP5hLywXzvU7IkFSk6i0J3WEIwFZJ9QnwsHqRqPz06dxBNZhXkyiZzThOycMlKfE456aSWeRXAk10FAYURYEvHE/eMpHtqe5+Oku85Bw+n4bkxEwyRo7c55cB84dF7wDkxfblwFPnsBYvw9kdfShS5L4HVSVtCMHUiCF91oy75yDxKaTXaU9SfVPupPKolA4C+'@;
put '/HEGFq1YU/mDZU9BQBBQFgEu0duvV3fS3PkuvRkT1/yCQox+bTy279oLt4dzXOh36d2tIx65eyTMvlTj0nA5D+aUGb/hwy9/kDyY+hV/tXsmBLPa0On3wOR6temt+za0bNZYSGYVxcSaBQeZamaTufzrn37FsazsKrYguwsCgoBKCIy67nKtFreF2JUv08GxmfzNDz/H74tWkPZO3+bhay4ehmsu'@;
put 'PZ9yCPs2VyVrMCdO/hHfT58jlXxUumhOjkUIpoJC5SE1rJ9ECYJHonmThkIyqyhj1mYy0dxFCZC//PEXLFm1vootyO6CgCCgCgJXnD8YIy4Z7vNa5Ox/OGPuQnDKNC4EodeF74fPUi3ybh3b+bxUJGMwhgKd5v25TGqR63UC1KBfQjBrAJ6eD+WbQtOG9TWS2TAlmVJAFOq5u7rsG5NMdjyf9+dS'@;
put 'qgI0S3wzdSkl6ZQg4F8EzjmzB+666Wpwtg5fajD5/nLoyFGMHjOe1un+HUQNWq9fr44W4BMbE12DVv55KD+jGM/nxryL9ZQTlAuGyKIWAkIw1ZLnKaPhC5idsx+5+xZNoykk8xR4KvWFfaX478DBI/h66q+YT1Un9O0tValhyU6CgCBQSQRaNG2Ep/99O+J8TLD49Gwmf4vN5HRf0WsU9aXnDcTN'@;
put 'V1/i8zKRfF/lfMSPvTgWqRTwJIt6CAjBVE+mp4yISWbLpg3x+D23ol6d2lrFn1N2kC+VQoBLc7roDXvR8jVaTfO9Bw5V6jjZSRAQBIyLQDSlf7vsvEE4b2BfhFNOTF8vnA9z3aateGXcRF36e3Oi+f9S9Di7Wvlaw8gp4rbt2oOnXn5bC3jyNbbSXvAREIIZfBn4vQdMMts0b0KazJuFZNYQbb4p'@;
put 'pqVnYurMeZg5f5HcGGuIpxwuCOgVgTMoNdHVFNzSiu6dbpfLp+bxkmPml9e3KE3PAkqTprdgn6HnnIW7bx7hc+0lj58DfGb9/ifemThZd+MuKR/5XH0EhGBWHztDHamRzBZEMu+6GUl164hPZg2kxw8EKgOETVt3kNl8JlZv2FKD1uRQQUAQ0BMCyeRzePnwQeh/5hla3sciP0d480vr7n2pePGt'@;
put 'D3A4TT++mLXiYvDfx+5Fg+R6Ptdesrw5wOftj76gF/XFFJ3u0tMUkL74CAEhmD4C0gjNFJPMpnjozhtRv15dIZk1FBo/GPLyC8gvczl+/HUuJU4+WsMW5XBBQBAIFgJsAh/crzcuGnIO6ifV1UiPr83C5Y2NydZPZBX57LtpyM3LL2+3gG6/44Yrcf7gs+GiIhS+XvhZxOngnnz5LeykbB2+DJ7y'@;
put 'dV+lveojIASz+tgZ8ki+sDm6/FFKYdRIostrLEN2VOdoUNY88APitz+W6uYBUePBSQOCQIgg0LVDG1x5wRB0aNtSKwnp9AOpqghKvi9z8OA4MhfrwVTet2dXPHD7DbBYzH4hf/xyvp38L59+dZzcLyuaGAb/TQimwQVYne4Xk8wUPEo+mY0bpkiezOqAWOoYNpubiGxuofrC3/08G8vWbPDLjbnU'@;
put 'aeWrICAI1ACBFNJUXkbmcK7UExUZEdQgSH5Rzco5gf+Nn4gNW3cGzWzcjDKPcNR8Yq14v5jGWVzsfzl5ynR88cN0qeBTg/mr90OFYOpdQn7sH2swH77zJs2JPT9fH2YZPw43IE3zmzk76i9ZuQ5TyGy+jcrAySIICAL6QoBzOg45u7dmAq5D5XXZBzBQ5vCKkOC0RVyj/PX3PtXuHZy5IpBLUt3a'@;
put 'ePLeW9G0UQOqrON70ziPxautfZa0lxvIj13M44GUcGDPJQQzsHjr7mwNkutqppD2bVpCSKbvxMMPimzSRsylChU/z1mgJVT2XevSkiAgCFQHgTCbVdNWXjz0HDRrXJx6R28BJpy6KPXQEYybNJkSkO8ImCYzqU4i+effhDYtmvqNXLLM+N64eftOqsM+Qczj1ZnEBjpGCKaBhOWvrtatnYB/33Yd'@;
put 'undqLyTThyB7/TPT0jMwY96flJJjEY5n5/jwDNKUICAIVAYB1pp169hWy2nZoU0L8i20wN/R4ZXpV3n7MAk7npWtlZFcuHSV39P4cEGO+269Tst36W9c2Dz+3qffYBq9ePtLS1oerrI9sAgIwQws3ro8G5so2N/m3pHX4KwzuiIvT791cXUJ4Gk6xQ8zJpv7KDn7dKo9zFpNjj6XRRAQBPyPAGvk'@;
put 'WGPZs2tHSpZuD6qfZVVGyz6ZTjLd/zr3D3z3yxxkHDtelcMrvW+fM7rgtmsvA7sK+Jtc8r2QX7Ife/ENXZfHrDR4smOFCAjBrBCe0PoxNjoKo66/AoPPPlML/BHfGN/Knx8YnD9z/aZtmtl85bpNVB7O4duTSGuCgCCgIcABPJefPxhMoGKiow2Zlo01r2wy37V3P76dNguLVqz1mTYzsVacptEd'@;
put 'RlWKbHRvCoSrQGRkJH6cPgcfffWjBPeEwHUqBDMEhFyVIUaE23HzVRfjQsoF5yDyIySzKuhVbl8OBOK6wxu2bMMvcxZizcatPntoVK4HspcgoC4C7EvI+SwH9OlJRSVqa2ZYPQTw1ARxNpmzOZmDYmaQRnPV+s3VtoJwAvVzzjoDwwb0BZNwbjcQ93m24uQXFODJ/3sbu/enBuScNcFcjq05AkIw'@;
put 'a46hci3w2+wIKpF21UVDtchKo9+c9Sgg1kywRrOw0IF1m7dppvO1G7cJ0dSjsKRPhkCAfckHEakcROSSiSXftwKhlQsUOHzP8BLNfamHsHzNRo1o7j1wENkncivsRgxZp5pRZPgZXdqhV7dOSKZqbkwqA+kDydrLKTNYezlF7nMVSkudH4VgqiNLn46EfWXOH9QPI0dcojnEB/JG5NOB6LyxkkRz'@;
put '/Zbt+HXeH1R6cquYznUuN+mefhDg0o79e3fXtHKskeNF9fsVW0H4Hl1YWIj0zGOaP+Pho+nIPJ5N7k2FGgZ2qkwUHxuDFMoUUp8wYj97NrczNoHGh/vKWTWefPltMDmWJTQQEIIZGnKu1igtZNLoRzfuO6lkWHRUpN8dwKvVSUUOYqJZbDp3YPO2XZj5+59YSWYwvZSNUwRmGYZCCDCZPOesHhqx'@;
put 'DIZGTg9Q8n3Dm63C+9lr7ubv/Jk1uUwog6nN5cjxT7+dim+mzaS+SN1xPcydQPRBCGYgUDbwOfjm1ZHSejww6gbUrZ1oSEd5I8HPDwU2nbtcbkq0vAe/LVyCxZS0nSt8yCIICAJAEyp1O6hvL3A5Q458DrSpV2RQNQTYrM9BSs/+bzyOUeolWUIHASGYoSPrao+USQ+XD7v/tuvRslljyZVZbST/'@;
put 'v73zfI7qStP4u2NQzhEhDBJCEogcTDAGG9tg43EoxxnP7Hpqy7sftnb/jN2q/bjhw1ZN7Uxt7YTd8YzHM2MccMAYE2whkEgiCOWcc8Sw+z6HObjBwghJ3X3vPc+tajrQ995zfu9t9dPvecPMd7RC84Z6IBqaWgW18L746pR0dPfO/CB8JwkEhABWU0qKlpnkna0b1kqGZkDDIxdNr1xA0IZ1GsaL'@;
put 'qmf453//mcaMnhf8PePmDgEKTHdsPeeZ5moQ/d//9eumntyEZgPapZg5H5gH+E4CWDrHhoLtKFNy+ESFegRaPNHa7jsHzv8kgTkSQFWLdatKNHFnm7lHi0fUamTi4RzBRmh3LI2jLNHP//cPLEsUIeZeOg0Fppes4YOxJCclyJs/fFH2PbaTf+gjbC8EyuM2qIWKkXn+2bGT2kquZtblSiI8fJ6O'@;
put 'BGZMICMtVbZvXmeSd0qKCiRGf2RBWPJH7YwRRv2NSCiq1rJK//Rv/8ml8ahbIzoDoMCMDndfn3WBipwfaAmjV5/bxwzzKFgScbEmIUhLHNVqbBOWz788fVY6uXweBWvwlPNFANf1siV5snvbJtNRDJnPWGJFggqF5XxRjsxxEEeOH8L/+K8/lcu1jbRfZLB77iwUmJ4ziT8GhJioPTsf0hZjL2uX'@;
put 'jETftF/zB92ZjzJ0+RzFl7/4qlIuXq1Te1yb+UH4ThKIIoHEhHiz/L17+yZzn67eS8RWRrqUThQRBOrU+KGASMt/+ekvzI/f65rFzs1NAhSYbtp9XmaNPyRlxcvlH7SH+bIli017yXk5MA9y3wSsVxOdMmrqGk2sZnnlOSYF3TdJ7hAJArhel2h9xh2b18vDWzYYzyWyjRlfGQn64TsHPM740ftf'@;
put 'v/mDvPPhIZYkCh9qXxyZAtMXZvL2IFGP7u/eeE22bFjDHuZRNpXNPscwenr75Iz2PT92ssp4NYdHxqI8Op7edQKpmqSzrqxEdm3dJKtLiwTeSiTsQFhy8zcB/O3Bj4Tfaq3LX779HpN6/G3OeRk9Bea8YORBUIj9J68+L89o9x+WD/HG9QAvEf7gT2pP+aaWdm0rV21iNeubWk0vdG+MkqMIOoFY'@;
put 'vQaLly+V7dqicMv61bJYf5AijpveyuBYHuISST1/PHhIfs5WkMEx7BxnQoE5R4Dc/RsCyHB+af/j2sP8aUF5EXolvmET7UdYtoJ9RkZHTYmjijMXpOJstbZt62AtwWgbJ4Dnx7W2dPEi7X29Wm9rTB3d+Lg4xlYG0NY2POft9z5Wz+UB/ngNoI1nOyUKzNmS437TElio2YPwUrz5oxclf1Eu4zKn'@;
put 'pRS9F+0SOr4UhjTLs1braZZrAeTK85ektaOLYjN6pvH9mSEqES6zcc1K2bZxrRRpc4ZkXRK3rQqZCe57E39rAsgWh31//c778rbWu2QbyG8hcvoFCkynzR+eyUO8oNzI32qG+ca1q0x7SX65hIf1XI4KO+ELAqJzcGhI6nTpHJnolXprae+SKcbFzQWvE/suWABRmWtE5ZZ1ZVJUsERSU1JMWRpk'@;
put 'gbMgenAvAyyJoxTRz/7nHa3JWy7MFg+urWc7MwrM2ZLjfvckkJaSLD984WnZ//gjAjHDsiP3RBa1N4SKTSyjN2rM5pnqy3K2ukaFZ4surTNBKGrG8diJEf6CqhEbVpeaskLLl+ZLin7W8SOSotJjxgrDcPCDFB16rtQ2yH/892/kYk0961yGgXMQDkmBGQQrengOsTELtV7mVvmrV56T9NQU4830'@;
put '8HA5NCVgl9Gx5DkxOSntunR+8Wq9VOkyek19k3T39tNb4diVgs46JZqos76s1GR/L87NkURN7LMJffRUunFBIJYbtv74yAn51e/fk76BITcmzlnOigAF5qywcaf7IYCi7KXa7u1vfvyyrNK6mZMqWrhkfj8Eo/temyAEMdE/MGgSg85pq8pqFZ0NzW0yNDwS3QHy7PNOICE+TutU5srKFYXqpSw2'@;
put 'STpZGemmxiGuAybwzTtyTx8QPzZRkaJOO4f9SksQoXMYl8Q9bTJPDI4C0xNmcGMQGWkp8uOXvi97d++41QLOjZkHZ5Z2KR33KH/Uo97MOk0UunClVi6p4Gxp75TRsfHgTNiRmcTGxkhuVoZ6KZfJ6pIiLSu0TPJyssxSKBBg6RvCkptbBPA5R6xlX/+AfHj4mLz70efqtRw0f7/dIsHZzoYABeZs'@;
put 'qHGfWROI0SXzx3XJ/A1dMk/jkvmsOXplR3g2kCiEDV2E+voHpb65VfsPN5iOQk2t7TI4PEqPtVcM9udxwEOZl5NtknJWFhWqhzJf8rT3d3JSkhEP9FJ6zGARHo71WGLF4mj5aTnw8RFpauvg5zjCdvD76Sgw/W5BH44fS+YrCpfKm6+/KGtXlZg+5ozh8qEhpxmyFZyI40QoBL6g2rp65KrGbiJL'@;
put 'vUFv3X39MjY+Mc3efCkcBFA6LC012Sx5o3QQPntL8/MkOyNN4ygTbwlKeCkZuhIOC/jjmPBWIhwGn93O7h45Vl6psZZfSqP+SOR14Q8bem2UFJhes4hD40HbuFef2yfPPrnb/GGb0iVXbsEiAMFpb/CKjY6NSa96OVvUG4JMdXg72zp7pKun14hOfpHNzf5IqkvRz9Vi9UYi03u5CkoUPM9SMYkV'@;
put 'AwgIbHbJm7znxtvPe0NIhopK1MW9VFsvxyvOyFenz0n/IBN4/GxfL4ydAtMLVnB4DPCubN+8Tt7QNpMP6hfhhC6z8ksvuBcEvtSs4MSXG0TnmIrOAf1y69J4zpa2TmlW8Qnh2dM3IAODwybWM7hEZjczMExNTpTM9DRT3BwFzvH5yc/LEZQHS9UbkjLwWQJj3LhKMDvWft4LnzdsVkziusFj3PC3'@;
put 'Fj/2EENddeGS3i7rj71u/v31s8E9NnYKTI8ZxMXh4I/d4twsLWX0vDyydaP5AwcPCzc3CIR++UF0YsPyOmpvDmqGeo8uqXd290q7LrV39fSZ5/0qPPH/ExOTckNFVBA3FDFP0HqDKUk3hWROVros0sSb3KxMyc3OlJzMdI2ZTDRJGBAOEJP43EBIUkwG8YqYfk74/MAzjR8ReGw3++Niauqaad84'@;
put 'rPVtkaCDzxKqP9Q2NEurCkoUSw/dz+7PexKYKwEKzLkS5P7zRgCZrHt3bTfF2TPUMwORwc1dAhCbuEE8WeGJL1FcF4jhHFHP59DQiC7lDZsvzl7NdMVjLO2hdBIE6PjklHk/vmS9IkQhHGNUEMSqhzEx4aaATE1JUs9jinokU029WNwjbhLL3YkqMuM1KcfGx1nhYIUknnNzkwCuCfyo+Ojz43Li'@;
put 'lJYOun7jz2IRnusbxvs/rj/CEJoyqp8ZfA64kUCkCFBgRoo0zzMjAkgAQtzYT157QTZpm0kbKzajnfkmZwhAcMLrYsUnnkNoWfEFETqpX6ao14iySRMqNEfHx81jPMeXLrLecQ8vKEouTU5eM+0xv1YRaz2B+JK+doc3HefAeRcuXCDf+4ub48DjGL3hCx/38XFxEqcdb+JURCYkxBmRiMxteCQT'@;
put '9Tn+Hx1xIDLNvnqPY2Kz8wgVkPRIOnNpz2iiuPZRPqi1o9MUPD9WXsXWrjMixzdFkgAFZiRp81wzJgDPzvef2CUv7n/CxJPRmzljdHyjEsAXsF32s2IUz60n1ApSC8uKOjy3wi70Mf4/dMOxIAjtOUIf4zX7OvbBYysQ7zx26HlDj8/HJHA3AigLhmvq2MlKFZfvm5jlO6/Pu+3L10kgkgQoMCNJ'@;
put 'm+e6LwK2A9BfvvKs9j1eSW/mfdHjm+eLQKhYDD0mv9RDafBxJAjEqee7V2OS33r3Izl4+LjxvEfivDwHCcyGAAXmbKhxn4gSSNKex888/oi89MyTJiaN3syI4ufJSIAEokwAHnJ4Lk9WnZNf/O6A1De1slVjlG3C09+bAAXmvRnxHR4gcMub+bJ6M9esNBmTiJPjRgIkQAJBJoBYSzQseOeDQ/Le'@;
put 'p0dM3HCQ58u5BYcABWZwbOnETJAosV+9mS+rNzM9LdVkCHOp0gnTc5Ik4BQBeCzhuTx19oL88u0D2g2rmV5Lp64A/0+WAtP/NnRuBt/TAPdCzTR//YX9pkg7ACBbmBsJkAAJ+J0AYn7htUSs5e8/+FQ+OHSUXku/G9XR8VNgOmr4IEwbbfEe2/GQaTe5RLuYIDbTZusGYX6cAwmQgFsEUOYKW3nl'@;
put 'OVN+CAXRr2vhfG4k4EcCFJh+tBrHfIsAfu0v0q4mLz3zhOx5eKvWHIw3QvPWG/iABEiABDxOwHotO7Rb1VvvHpRPj37FougetxmHd28CFJj3ZsR3+IAAuqOsLyuRHzz/tKxZWcwkIB/YjEMkARIQ0zN+SkN8Dh8/KW+/94kWT+8yxfbJhgT8ToAC0+8W5PhvI4CSRvse3SEvPLVHcrRnM5bNmQR0'@;
put 'GyI+IQES8AABJPBgSbymrkF+/c4HmsxT/a2uUR4YJodAArMmQIE5a3Tc0asE0KUlf1GOvPLsXtm1daO27IvjsrlXjcVxkYBjBOxy+ODQsBz4+HN5V2+DwyOOUeB0XSBAgemClR2d481l81J57bl9Ztkcnkxmmzt6MXDaJOABAjHacx71e8urzstbfzoodY0tTOLxgF04hPAQoMAMD1ce1UME4uNi'@;
put 'Zc/OrfLi048Lss0hMq9fv+6hEXIoJEACQSZgl8PrGpvlt9rm8XjFGUHcJTcSCDIBCswgW5dzu0UAy1JZGWny3N5HNUbzYUlNSWZ85i06fEACJBAOAnY5HJ14Dnzyuda0PCb9g0PhOBWPSQKeI0CB6TmTcEDhJICWkwVL8403c+dDG0xB46mpKSYChRM6j00CDhJAsXQkGR4trzQF0xu1puUNDdPh'@;
put 'RgKuEKDAdMXSnOdtBBCfuVbLGaF+5vqyUtOSDUKTGwmQAAnMhYAtln7uUo387sBHcqb6isZdMiRnLky5rz8JUGD6024c9TwRiNEyIfBkPv/UY1JaVGg6ATERaJ7g8jAk4BAB2zsc3Xf++OEh+fzLCpmY5I9Why4BTvUOAhSYdwDhUzcJoH7mozu2yLNP7pZlSxazULublwFnTQL3TcAm8KALz4ef'@;
put 'HZWDh4/LgJYg4kYCrhOgwHT9CuD8byOQnpoiTzyyTZ7es1Py83JNSRGUFeFGAiRAAqEEUG8XZYcGNGnnM+3CgySe9s4exnOHQuJjpwlQYDptfk5+OgI243yfdgTau3uH5GZnUWhOB4qvkYCDBGxm+MjomCbwnJZ3PzosjS3trGfp4LXAKX83AQrM7+bD/3WYAL5IcjLTZa8KTXg1F+VkU2g6fD1w'@;
put '6m4TwN8DeCzHxyfkq8pzRljW1DfJ16yp6/aFwdnflQAF5l3R8D9I4CYBKzSf3L1dnty1nUKTFwYJOETACstJrTJx6swF+ZN6LC9cqWOzBoeuAU51dgQoMGfHjXs5SOAboQmP5lYjNNERiDGaDl4MnHLgCYQKy9NnqzXG8oig9BBLDgXe9JzgPBGgwJwnkDyMOwTwxZOVniZ7VGTCo7lEk4HQ55x1'@;
put 'NN25BjjT4BLA5xtF0ie0SDo8lhCW5y9fpbAMrsk5szARoMAME1ge1g0CyDrftW2jaT9Z8GC+ILOUnYHcsD1nGSwCNit8VJN3KtRj+f6nX0h1TS2FZbDMzNlEkAAFZgRh81TBJADvJepoPrxlvXo0d8jKFQWCbh4o2H7jxo1gTpqzIoGAELB1LIeGRzR556wc/Oy4XKptYIxlQOzLaUSPAAVm9Njz'@;
put 'zAEkgM5A68qKZf+eXeY+KTHRCE3EanIjARLwDgF03sGtp7dPjlWckU+OnJD6plaWG/KOiTgSnxOgwPS5ATl8bxJY8MADUlTwoInR3L5prWRlZhiPCNtQetNeHJUbBBBfidUF3Le0dcjhExV6OykdXb1cbXDjEuAsI0iAAjOCsHkq9wjgiyw3O1N2b98sj27fIgUPLjYQIDSxtM6NBEgg/AQQXwlh'@;
put 'iZWEK3UNcuhouRyvqJL+QbZ0DD99nsFVAhSYrlqe8444gcSEeNm8dpU8pW0oVxYVSEJCApfPI24FntAlAnYZfHhkVM5drJFPvvhSKs9fMhniLnHgXEkgGgQoMKNBned0mkBsbIwKzEL1am6SzevKJCcr03gz6dV0+rLg5OeJAFYNICzhtezo6jaeyiNfnpbahmbGV84TYx6GBGZCgAJzJpT4HhII'@;
put 'A4Hv6Rdhji6fb9u4VnY+tEGKC5dKXFwcvZphYM1DBp8AssEhLPFDrb6pRfuEV8mhY+W6DD7EcJTgm58z9CABCkwPGoVDco9AnBZ2XlVcaEodbVm/2ng1QQFdgljqyL3rgTOeGYHQpJ3+gSE5e/GyHD5+UjvuXJUx7RnOjQRIIHoEKDCjx55nJoFvEcCyXmZ6qmzSWM1Htm6UUo3VTE5KMskJEJtM'@;
put 'DPoWMr7gIAFbuxL9wesbW8wy+IlTZ6W9q4f1Kx28HjhlbxKgwPSmXTgqEpCFutyHrHMsoW9ZXybLtFMQPJ0QmsiGpdjkReISAfz4whI4tq6eXjl97qIcO1kl1VdqNWlnyiUUnCsJ+IIABaYvzMRBuk4gThODykqKZOvGNbJpzSrJy82+FW/GIu6uXx3Bnb8VlVgKHxwalktX61VUVkrV+cvSp7GV'@;
put 'DB8Jru05M/8ToMD0vw05A4cI4Is2JSnRiE0UcF+7qtjEa2LJEMkNFJsOXQwBnarNAsc1PTI6KnWNrVJedU4qqi5Ia2cXe4MH1O6cVvAIUGAGz6ackSME4N1JS0mSNSuLZeuGNbK6dIVkZ6aLFZvw7nAZ3ZGLwefTDBWV45qc09jSJhVnL0jFmQuaEd4mU/rjiRsJkIC/CFBg+steHC0JTEsAYjM9'@;
put 'NUU9m8tNbc3VupyODkIxMTEmZpMJQtNi44tRJGCXv3E/Nj4uTS3tJq7y1NlqqW1slskpisoomoenJoE5E6DAnDNCHoAEvEXALqOXriiQDWWluoxeIvmLsiU+Pt7ErLH0kbfs5dJo4F3HDaJyeGREvZOtGk95SSovXDa1KykqXboaONegE6DADLqFOT/nCSTEx0nh0nxZp0JzfVmJLM3PkzT1dkKI'@;
put 'MiPd+csjrABwjUFQIvsb8cEoen61vkmqLlySM9VXpLW9S65pVQRuJEACwSNAgRk8m3JGJHBXAviyz8vJMvU1N6wplZLCZZoklGG8mxAAuDF28674+B8zIGC9lLjH0nen1qa8VNtglr+v1DVKT28/WzbOgCPfQgJ+J0CB6XcLcvwkMAcCSYkJUrBksSYIFZlbgdbaRCwnPE4QmlZ0zuEU3DXgBEJj'@;
put 'KXG99PYPmCSdcxdrtEZlndQ3t7KrTsCvAU6PBKYjQIE5HRW+RgIOEnhA4+Iy0lJl+bIlJlmoWL2bDy7OlXR9Dd4oKzjp4XTw4giZMq4FKyohKFGfsqW9Uy6rlxJFz6/WN0vfwCC9lCHM+JAEXCRAgemi1TlnEpgBAQjOLC17VKjdhFYVL5cVBUuN4ExNSZZY7SgUKjjxmFvwCCCG0opJ3CNmF4Ky'@;
put 'raNLrmgsJQqfI+O7s7uPNViDZ37OiATmRIACc074uDMJuEMAghPicmn+IikuXGo8nVhSz8pIk8SEBJM0hLqbNkudNTj9dW1YMQkhCS8ltomJCeONhIfyakOz1NQ1mWzvnn71UKr3khsJkAAJ3I0ABebdyPB1EiCBexJAhnp2ZoYs1yx1LK0jnjMvN0sLwCdLgopOiBV4NyE6ITjp6bwn0oi84U4x'@;
put 'ieeTk5MyNDyifb77pKm1QwVlk/FOtnV0y8jYOG0XEcvwJCQQHAIUmMGxJWdCAlEnAKGSlBhv2lcuW5JnBCc8nrlZmaY0UrK2uUQCEcSm9XZSeIbPbLCHFZM2dhK8xzW7e3h0zIjJ5rYOaWhuM4k5EJMoJfQ1vZPhMwqPTAKOEKDAdMTQnCYJRJNAfFysZKanaomkbI3jXCRL8nLU05ltWlumJCdJ'@;
put 'ghaBh/DEFhrbCTGEzd6bJ/znNgJWROLeikg8BjN4JYdHRmVA4yY7u3tNMg4EZasKSTyHx/I642dv48knJEAC80OAAnN+OPIoJEAC90kAIigxId6URUJbS9wW6/I6vJ2LsrM03jNJ63PGSZwmFEE4WdEEAYobBJRdcg+qAMWc7YZwg9AbXrcicnxiUkbHxjRecsh4Jds6u6S9s0c6e3qlW+tODg6N'@;
put 'sJ+3Bcl7EiCBiBCgwIwIZp6EBEjgfgjEag/1m+IzWT2faZKtxeCzNZkIZZTS01KMKE1U8QkBivei5zrEV6ggs0IU57VC1N7bsURSmIaODefHeO09/g83+xpex9gQu3rt2jX1RE7JmIpItFccGBzWWpOD0t7VLT19A0ZEwkMJEQmhGck5mQnwHxIgARKYhgAF5jRQ+BIJkIC3CSzU5XQkGOGGzPZU'@;
put 'XWZPSU785rHGeiLeEyIV74EXFPvExcbIAwu0daF6RO1ysvUKWvEZej+dWMP/W0FoKVnxaAUi7u178H57g2DEkvS1qWvGo4je2xMqHkc1iQZdbxAXiWVrCEbcQzTi8Yi+Pqr/Pz4xZUSnPS/vSYAESMCrBCgwvWoZjosESGBeCCxcuMCIy9iYhcbTiXsIzjiNC41diNcW3hSqRqQmmQx4/D/EaXJS'@;
put 'wm1jwGspKlzhKYQAvKFeRgjJGzf+T8Xh6E2hqGJxSOMecYNAnND3jmu5nyn1REJM4jY5NSVTt0TmlJb8YR3R20DzCQmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQ'@;
put 'AAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfs'@;
put 'wdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4i+ZHtw4AAADdSURBVAAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAF'@;
put 'prfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8J/D97oVzdCcK8fgAAAABJRU5ErkJggg==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=index.html;
filename filecode temp lrecl=32767;
data _null_;
file filecode;
put 'PCFkb2N0eXBlIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+CiAgICA8dGl0bGU+RGF0YSBDb250cm9sbGVyPC90aXRsZT4KICAgIDwhLS0gPGJhc2UgaHJlZj0iLyI+IC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPG1l'@;
put 'dGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJuYW1lIiBjb250ZW50PSJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU8KuIi8+CiAgICA8bWV0YSBpdGVtcHJvcD0iZGVzY3JpcHRpb24iIGNvbnRl'@;
put 'bnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJpbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnVybCIgY29udGVu'@;
put 'dD0iaHR0cDovL2RlbW8uZGF0YWNvbnRyb2xsZXIuaW8iLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0eXBlIiBjb250ZW50PSJ3ZWJzaXRlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIHBy'@;
put 'b3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+Cgog'@;
put 'ICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiLz4KICAgIDxsaW5rIHJlbD0iaWNvbiIgdHlwZT0iaW1hZ2Uv'@;
put 'eC1pY29uIiBocmVmPSJpbWFnZXMvZmF2aWNvbi5pY28iLz4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy41OGRkNGM3ZjZhNWI0ODU1LmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6'@;
put 'IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIgU0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNl'@;
put 'ci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJl'@;
put 'c3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3RhZ2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAg'@;
put 'ICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxzYXNqcyBzZXJ2ZXJ1cmw9IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kYyIgc2VydmVydHlwZT0iU0FTSlMiIGxvZ2lubWVjaGFuaXNtPSJEZWZhdWx0IiBkZWJ1Zz0iZmFsc2UiIHVzZWNvbXB1'@;
put 'dGVhcGk9InRydWUiIGNvbnRleHRuYW1lPSJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiIGFkbWluZ3JvdXA9InNlYy1zYXM5LXByZC1pbnQtc2FzcGxhdGZvcm0tMzAwMTE0c2FzanMiIGRjcGF0aD0iL3RtcC9kYyIgaG90bGljZW5jZWtleT0ibm9uLWNvbW1lcmNpYWwtYW5k'@;
put 'LWV2YWx1YXRpb24iPgogIDwvc2FzanM+CgogIDxib2R5IGNkcy10aGVtZT0ibGlnaHQiIGNsYXNzPSJtLTAiPgogICAgPG15LWFwcD48L215LWFwcD4KICA8c2NyaXB0IHNyYz0icnVudGltZS40MDJmYzNjZmJjN2UxYmQ0LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3Jj'@;
put 'PSJwb2x5ZmlsbHMuZGYyN2EyNDY1NDBlYTVlZS5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48c2NyaXB0IHNyYz0ic2NyaXB0cy5mNDE4ZDdlNzFkYmZkMzA5LmpzIiBkZWZlcj48L3NjcmlwdD48c2NyaXB0IHNyYz0ibWFpbi4yY2Q0YjRiN2U0ODE5ZGMxLmpzIiB0eXBlPSJtb2R1bGUi'@;
put 'Pjwvc2NyaXB0PjwvYm9keT4KPC9odG1sPgo=';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=main.2cd4b4b7e4819dc1.js;
filename filecode temp lrecl=12059476;
data _null_;
file filecode;
put 'KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNzQ4MjpmdW5jdGlvbih1ZSl7dWUuZXhwb3J0cz1mdW5jdGlvbihxKXt2YXIgXz17fTtmdW5jdGlvbiBJKHkpe2lmKF9beV0pcmV0dXJuIF9b'@;
put 'eV0uZXhwb3J0czt2YXIgZz1fW3ldPXtpOnksbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gcVt5XS5jYWxsKGcuZXhwb3J0cyxnLGcuZXhwb3J0cyxJKSxnLmw9ITAsZy5leHBvcnRzfXJldHVybiBJLm09cSxJLmM9XyxJLmQ9ZnVuY3Rpb24oeSxnLEIpe0kubyh5LGcpfHxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoeSxnLHtlbnVtZXJhYmxlOiEwLGdldDpCfSl9LEkucj1mdW5jdGlvbih5KXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoeSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxJLnQ9ZnVuY3Rpb24oeSxnKXtpZigxJmcmJih5PUkoeSkpLDgmZ3x8NCZnJiYib2JqZWN0Ij09dHlwZW9mIHkmJnkmJnkuX19lc01vZHVsZSlyZXR1cm4geTt2YXIgQj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKEkucihCKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoQiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6eX0pLDImZyYmInN0cmluZyIhPXR5cGVvZiB5KWZvcih2YXIgdyBpbiB5KUkuZChCLHcsZnVuY3Rpb24oUCl7cmV0dXJuIHlbUF19LmJpbmQobnVsbCx3KSk7cmV0dXJuIEJ9LEkubj1mdW5jdGlv'@;
put 'bih5KXt2YXIgZz15JiZ5Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB5fTtyZXR1cm4gSS5kKGcsImEiLGcpLGd9LEkubz1mdW5jdGlvbih5LGcpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeSxn'@;
put 'KX0sSS5wPSIiLEkoSS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoq'@;
put 'KiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3Ry'@;
put 'aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5DbGFyaXR5SWNvbnNBcGk9dm9pZCAwO3ZhciB5PUkoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1w'@;
put 'bGF0ZS1vYnNlcnZlci50cyIpLGc9e30sQj1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB3LnNpbmdsZUluc3RhbmNlfHwody5zaW5nbGVJbnN0YW5jZT1uZXcgdyksdy5zaW5n'@;
put 'bGVJbnN0YW5jZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx3LnByb3RvdHlwZS52YWxpZGF0ZU5hbWU9ZnVuY3Rpb24oUCl7aWYoMD09PVAubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyEiKTtp'@;
put 'ZigvXHMvLnRlc3QoUCkpdGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3Qgbm90IGNvbnRhaW4gYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVycyEiKTtyZXR1cm4hMH0sdy5wcm90b3R5cGUubm9ybWFsaXplU2hhcGVOYW1lPWZ1bmN0aW9uKFApe3JldHVybiBQLnRvTG93'@;
put 'ZXJDYXNlKCl9LHcucHJvdG90eXBlLnNldEljb25UZW1wbGF0ZT1mdW5jdGlvbihQLEYpe3ZhciBPPUYudHJpbSgpO3RoaXMudmFsaWRhdGVOYW1lKFApJiYoUD10aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShQKSxnW1BdJiZkZWxldGUgZ1tQXSxnW1BdPU8seS5TaGFwZVRlbXBsYXRlT2JzZXJ2'@;
put 'ZXIuaW5zdGFuY2UuZW1pdENoYW5nZXMoUCxPKSl9LHcucHJvdG90eXBlLnNldEljb25BbGlhc2VzPWZ1bmN0aW9uKFAsRixPKXtmb3IodmFyIHo9MCxOPU87ejxOLmxlbmd0aDt6Kyspe3ZhciBMPU5bel07dGhpcy52YWxpZGF0ZU5hbWUoTCkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShQLEws'@;
put 'e2dldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFApe2lmKCJvYmplY3QiIT10eXBlb2YgUCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRl'@;
put 'cmFsIHBhc3NlZCBpbiB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6ICJzaGFwZS10ZW1wbGF0ZSIgfScpO2Zvcih2YXIgRiBpbiBQKVAuaGFzT3duUHJvcGVydHkoRikmJnRoaXMuc2V0SWNvblRlbXBsYXRlKEYsUFtGXSl9LHcucHJvdG90'@;
put 'eXBlLmhhcz1mdW5jdGlvbihQKXtyZXR1cm4hIWdbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCldfSx3LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oUCl7aWYoIVApcmV0dXJuIGc7aWYoInN0cmluZyIhPXR5cGVvZiBQKXRocm93IG5ldyBUeXBlRXJyb3IoIk9ubHkgc3RyaW5nIGFyZ3VtZW50'@;
put 'IGlzIGFsbG93ZWQgaW4gdGhpcyBtZXRob2QuIik7cmV0dXJuIGdbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCldfSx3LnByb3RvdHlwZS5hbGlhcz1mdW5jdGlvbihQKXtpZigib2JqZWN0IiE9dHlwZW9mIFApdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmpl'@;
put 'Y3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiBbImFsaWFzLW5hbWUiLCAuLi5dIH0nKTtmb3IodmFyIEYgaW4gUClpZihQLmhhc093blByb3BlcnR5KEYpKXtpZighZy5oYXNPd25Qcm9wZXJ0eShGKSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoJ0FuIGljb24gIicrRisiXCIgeW91IGFyZSB0cnlpbmcgdG8gc2V0IGFsaWFzZXMgdG8gZG9lc24ndCBleGlzdCBpbiB0aGUgQ2xhcml0eSBJY29ucyBzZXRzISIpO3RoaXMuc2V0SWNvbkFsaWFzZXMoZyxGLFBbRl0pfX0sd30oKTtfLkNsYXJpdHlJY29uc0FwaT1C'@;
put 'fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQu'@;
put 'dHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19l'@;
put 'c01vZHVsZSIse3ZhbHVlOiEwfSksXy5DbGFyaXR5SWNvbkVsZW1lbnQ9dm9pZCAwO3ZhciB5PUkoCi8qISAuL2Nsci1pY29ucy1hcGkgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiKSxnPUkoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICov'@;
put 'CiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLEI9MCx3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt3LmNsYXNzTmFtZT0iaXMtb2ZmLXNjcmVlbiI7dmFyIFA9ZnVuY3Rpb24oKXtyZXR1cm4gSFRNTEVsZW1lbnQuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBGKCl7dmFyIE89UC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIE8uY2xySWNvblVuaXFJZD0iX2Nscl9pY29uXyIrQixCKyssT30ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJihQPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3Ry'@;
put 'dWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLF8uQ2xhcml0eUljb25FbGVtZW50PUYsRi5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChGLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7'@;
put 'Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpGfX0pKS5jb25zdHJ1Y3Rvcj1GLEYucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciBPPXcuY2xvbmVOb2RlKCExKTtPLmlkPXRoaXMuY2xySWNvblVuaXFJZCxPLnRleHRDb250'@;
put 'ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKE8pfSxGLnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oTyl7IU51bWJlcihPKXx8TnVtYmVyKE8pPDA/KHRoaXMuc3R5bGUud2lkdGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5z'@;
put 'dHlsZS53aWR0aD1PKyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9TysicHgiKX0sRi5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKE8pe3JldHVybiBPLnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LEYucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7'@;
put 'dmFyIE89dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgej10aGlzLmdldEF0dHJpYnV0ZSgic2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09eiYmKHRo'@;
put 'aXMuY3VycmVudFNpemVBdHRyVmFsPXosdGhpcy5fc2V0SWNvblNpemUoeikpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgTj10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hhcGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv'@;
put 'bj1nLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhOLGZ1bmN0aW9uKFUpe08uX2luamVjdFRlbXBsYXRlKFUpfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPU4sIXkuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJW'@;
put 'YWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgTD15LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihMPT09dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVU'@;
put 'ZW1wbGF0ZT1MfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgSz10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1LJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUspLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0'@;
put 'dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LEYucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihPLHosTil7dmFyIEw9dGhpcztpZigic2l6ZSI9PT1PJiZ0aGlzLl9zZXRJY29uU2l6ZShOKSwic2hhcGUiPT09Tyl7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRy'@;
put 'VmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKE4pLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1nLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJz'@;
put 'Y3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oSyl7TC5faW5qZWN0VGVtcGxhdGUoSyl9KSksIXkuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUo'@;
put 'KTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXkuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT1PJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPU4sIXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVj'@;
put 'dFRlbXBsYXRlKCl9LEYucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxGLnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24o'@;
put 'KXt2YXIgTz10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksTj10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO08/TyYmTy5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmTi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsTysiICIrdGhpcy5jbHJJ'@;
put 'Y29uVW5pcUlkKTpOLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxGLnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oTyl7TyYmTyE9PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRl'@;
put 'PU8pLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0sRi5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rp'@;
put 'b24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXkuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEs'@;
put 'XyxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uQ2xhcml0eUljb25zPXZvaWQgMDt2YXIgeT1JKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksZz1J'@;
put 'KAovKiEgLi9jbHItaWNvbnMtZWxlbWVudCAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiKSxCPUkoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz15LkNsYXJpdHlJ'@;
put 'Y29uc0FwaS5pbnN0YW5jZTtfLkNsYXJpdHlJY29ucz13LHcuYWRkKEIuQ29yZVNoYXBlcyksdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpfHwod2luZG93LkNsYXJpdHlJY29ucz13KSxjdXN0b21FbGVtZW50cy5nZXQoImNsci1pY29u'@;
put 'Iil8fGN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY2xyLWljb24iLGcuQ2xhcml0eUljb25FbGVtZW50KSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAog'@;
put 'ICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZv'@;
put 'dW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5Db3JlU2hhcGVzPV8uQ2xyU2hhcGVBcnJvdz1fLkNsclNoYXBlU3RlcEZvcndhcmQyPV8uQ2xyU2hhcGVFeWVIaWRlPV8uQ2xyU2hhcGVF'@;
put 'eWU9Xy5DbHJTaGFwZUV2ZW50PV8uQ2xyU2hhcGVDYWxlbmRhcj1fLkNsclNoYXBlQW5nbGVEb3VibGU9Xy5DbHJTaGFwZVZpZXdDb2x1bW5zPV8uQ2xyU2hhcGVTZWFyY2g9Xy5DbHJTaGFwZVZtQnVnPV8uQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPV8uQ2xyU2hhcGVGaWx0ZXJHcmlkPV8u'@;
put 'Q2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPV8uQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Xy5DbHJTaGFwZUNsb3VkPV8uQ2xyU2hhcGVJbWFnZT1fLkNsclNoYXBlQmVsbD1fLkNsclNoYXBlRm9sZGVyT3Blbj1fLkNsclNoYXBlRm9sZGVyPV8uQ2xyU2hhcGVBbmdsZT1fLkNsclNoYXBl'@;
put 'VXNlcj1fLkNsclNoYXBlQmFycz1fLkNsclNoYXBlSGVscEluZm89Xy5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1fLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1fLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPV8uQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9Xy5DbHJTaGFwZUluZm9DaXJjbGU9Xy5DbHJT'@;
put 'aGFwZUNoZWNrQ2lyY2xlPV8uQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1fLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1fLkNsclNoYXBlVGltZXM9Xy5DbHJTaGFwZUNoZWNrPV8uQ2xyU2hhcGVDb2c9Xy5DbHJTaGFwZUhvbWU9Xy5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAw'@;
put 'O3ZhciB5PUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3Zn'@;
put 'LXRhZy1nZW5lcmF0b3IudHMiKTtfLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMy'@;
put 'LDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4n'@;
put 'KSxfLkNsclNoYXBlSG9tZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjks'@;
put 'MTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAs'@;
put 'MCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwx'@;
put 'LDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZa'@;
put 'Ii8+JyksXy5DbHJTaGFwZUNvZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIz'@;
put 'Yy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQt'@;
put 'Mi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiww'@;
put 'LjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEu'@;
put 'NWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40'@;
put 'YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIx'@;
put 'Yy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wt'@;
put 'My4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43'@;
put 'LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIu'@;
put 'OC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdM'@;
put 'MzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4z'@;
put 'Yy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0'@;
put 'LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAu'@;
put 'OGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4'@;
put 'LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRj'@;
put 'MC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42'@;
put 'LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwx'@;
put 'LjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40'@;
put 'LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhs'@;
put 'MC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIs'@;
put 'NC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4z'@;
put 'LDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAu'@;
put 'MiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdj'@;
put 'My45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYt'@;
put 'MS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3'@;
put 'YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAs'@;
put 'MCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYy'@;
put 'LDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgt'@;
put 'LjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThW'@;
put 'MTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQi'@;
put 'IGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMu'@;
put 'M2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQz'@;
put 'LjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEu'@;
put 'NjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42'@;
put 'MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1'@;
put 'QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgs'@;
put 'MWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAs'@;
put 'MCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4z'@;
put 'OGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYx'@;
put 'LjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywx'@;
put 'M0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlQ2hlY2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x'@;
put 'My43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxfLkNsclNoYXBlVGltZXM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+'@;
put 'JyksXy5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywx'@;
put 'LjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEt'@;
put 'Ljg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywz'@;
put 'LDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEu'@;
put 'NzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxfLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4'@;
put 'LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEs'@;
put 'MSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43'@;
put 'MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxfLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZa'@;
put 'bTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYu'@;
put 'NzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAt'@;
put 'Mi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLF8uQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIx'@;
put 'MS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEs'@;
put 'MSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxfLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEw'@;
put 'LjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEs'@;
put 'MSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxfLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJN'@;
put 'MjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i'@;
put 'TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JyksXy5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAs'@;
put 'Zy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i'@;
put 'TTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYs'@;
put 'MTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4'@;
put 'LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksXy5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxnLmNsckljb25TVkcpKCc8Y2ly'@;
put 'Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwx'@;
put 'LTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2'@;
put 'LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQz'@;
put 'NDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYz'@;
put 'MzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4w'@;
put 'NDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3'@;
put 'OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIy'@;
put 'MTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEz'@;
put 'LjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44'@;
put 'LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLF8uQ2xyU2hhcGVIZWxwSW5mbz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEu'@;
put 'MTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUu'@;
put 'NzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0w'@;
put 'LTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4z'@;
put 'LjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2Mt'@;
put 'MS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3'@;
put 'LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4'@;
put 'LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksXy5DbHJT'@;
put 'aGFwZUJhcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJh'@;
put 'MSwxLDAsMCwxLDAsMloiLz4nKSxfLkNsclNoYXBlVXNlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFI'@;
put 'N1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIs'@;
put 'MiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwy'@;
put 'SDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFk'@;
put 'Z2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2'@;
put 'LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+'@;
put 'XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4z'@;
put 'OSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'My0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUx'@;
put 'LDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEs'@;
put 'MCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQg'@;
put 'Y2xyLWktYmFkZ2UiIC8+JyksXy5DbHJTaGFwZUFuZ2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1'@;
put 'LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxfLkNsclNoYXBlRm9sZGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx'@;
put 'Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0y'@;
put 'SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAs'@;
put 'MTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAs'@;
put 'MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCww'@;
put 'LDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40Mkwx'@;
put 'NC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDIt'@;
put 'MlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIy'@;
put 'LjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAs'@;
put 'MTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLF8uQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgx'@;
put 'LjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5'@;
put 'LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAs'@;
put 'MCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIs'@;
put 'MiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTks'@;
put 'MCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlB'@;
put 'MS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42'@;
put 'MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCww'@;
put 'LDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4y'@;
put 'Ni0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVI'@;
put 'NkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEu'@;
put 'NTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwz'@;
put 'MUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAi'@;
put 'IGN5PSI2IiByPSI1Ii8+JyksXy5DbHJTaGFwZUJlbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQu'@;
put 'ODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCww'@;
put 'LDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3'@;
put 'LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIw'@;
put 'LjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUu'@;
put 'MzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYz'@;
put 'LDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYu'@;
put 'MTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMu'@;
put 'MzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcu'@;
put 'OGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCww'@;
put 'LDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn'@;
put 'ZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUs'@;
put 'MjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFW'@;
put 'My4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxfLkNsclNoYXBlSW1hZ2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIs'@;
put 'MiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45'@;
put 'MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEu'@;
put 'NDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl'@;
put 'ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiww'@;
put 'LDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwx'@;
put 'LTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNB'@;
put 'MywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksXy5DbHJTaGFwZUNsb3VkPSgwLGcuY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42'@;
put 'NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywy'@;
put 'NC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0i'@;
put 'TTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMx'@;
put 'SDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkEx'@;
put 'MC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5'@;
put 'LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDku'@;
put 'OSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVy'@;
put 'dCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42'@;
put 'NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFh'@;
put 'Ny40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5'@;
put 'LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwx'@;
put 'LDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFs'@;
put 'ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlRWxsaXBzaXNIb3Jp'@;
put 'em9udGFsPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0i'@;
put 'Mi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxfLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIu'@;
put 'OSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksXy5D'@;
put 'bHJTaGFwZUZpbHRlckdyaWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjku'@;
put 'N0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1'@;
put 'YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxfLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw'@;
put 'LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwu'@;
put 'MTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksXy5DbHJTaGFwZVZtQnVnPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNv'@;
put 'bGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAs'@;
put 'MCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1'@;
put 'LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAs'@;
put 'MCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVh'@;
put 'MS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAs'@;
put 'MCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0i'@;
put 'I2ZmZmZmZiIvPicpLF8uQ2xyU2hhcGVTZWFyY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIu'@;
put 'MDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1'@;
put 'LDMzLjI5WiIvPicpLF8uQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIs'@;
put 'MiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksXy5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlM'@;
put 'MTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCww'@;
put 'LDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLF8uQ2xyU2hhcGVDYWxlbmRhcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj'@;
put 'dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'MSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj'@;
put 'dCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSww'@;
put 'LDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCww'@;
put 'LDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwx'@;
put 'LDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdl'@;
put 'ZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'MS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2Ui'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFW'@;
put 'MzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxy'@;
put 'ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIg'@;
put 'aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1h'@;
put 'bGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu'@;
put 'NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiww'@;
put 'LDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgy'@;
put 'Wm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCww'@;
put 'LDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEs'@;
put 'MSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4'@;
put 'LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01'@;
put 'SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42'@;
put 'OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4'@;
put 'VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlRXZlbnQ9KDAsZy5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwz'@;
put 'MC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1'@;
put 'LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2Vk'@;
put 'IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4'@;
put 'SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAs'@;
put 'MCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40'@;
put 'MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAy'@;
put 'MC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlB'@;
put 'MS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0y'@;
put 'Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2Ex'@;
put 'LDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZo'@;
put 'LTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwx'@;
put 'Mi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwx'@;
put 'LDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5'@;
put 'LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMu'@;
put 'NzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3'@;
put 'LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQu'@;
put 'MDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLF8uQ2xyU2hhcGVFeWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40'@;
put 'OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQz'@;
put 'LDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAs'@;
put 'MSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUz'@;
put 'TDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMu'@;
put 'MjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxf'@;
put 'LkNsclNoYXBlRXllSGlkZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0'@;
put 'Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2'@;
put 'LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4z'@;
put 'Ny0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwx'@;
put 'LjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEu'@;
put 'MTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUz'@;
put 'Yy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTku'@;
put 'OTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgs'@;
put 'MTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwx'@;
put 'Ny4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxfLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcu'@;
put 'MDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNh'@;
put 'MS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZUFycm93PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUu'@;
put 'NjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksXy5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOl8u'@;
put 'Q2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Xy5DbHJTaGFwZUhvbWUsY29nOl8uQ2xyU2hhcGVDb2csY2hlY2s6Xy5DbHJTaGFwZUNoZWNrLHRpbWVzOl8uQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOl8uQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1h'@;
put 'dGlvbi1jaXJjbGUiOl8uQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpfLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpfLkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6Xy5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFu'@;
put 'ZGFyZCI6Xy5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOl8uQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpfLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOl8uQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOl8uQ2xyU2hhcGVC'@;
put 'YXJzLHVzZXI6Xy5DbHJTaGFwZVVzZXIsYW5nbGU6Xy5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpfLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Xy5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpfLkNsclNoYXBlQmVsbCxpbWFnZTpfLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Xy5DbHJTaGFwZUNs'@;
put 'b3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpfLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Xy5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpfLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpfLkNsclNo'@;
put 'YXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpfLkNsclNoYXBlVm1CdWcsc2VhcmNoOl8uQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Xy5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOl8uQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpfLkNsclNoYXBlQ2Fs'@;
put 'ZW5kYXIsZXZlbnQ6Xy5DbHJTaGFwZUV2ZW50LGV5ZTpfLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Xy5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpfLkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93Ol8uQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uQ29y'@;
put 'ZVNoYXBlcywiaG91c2UiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KF8uQ29yZVNoYXBlcywic3VjY2VzcyIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJjbG9zZSIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFwZXMsImVycm9yIiwoMCx5LmRlc2NyaXB0b3JDb25maWcp'@;
put 'KF8uQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJpbmZvIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFw'@;
put 'ZXMsIm1lbnUiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5D'@;
put 'b3JlU2hhcGVzLCJjYXJldCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShfLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1si'@;
put 'YW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsi'@;
put 'dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsXy5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIHkoZyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxl'@;
put 'OiEwLHZhbHVlOmd9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4v'@;
put 'cHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3Vu'@;
put 'ZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uU2hhcGVUZW1wbGF0ZU9ic2VydmVyPV8uY2hhbmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsXy5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9'@;
put 'O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZygpe3RoaXMuY2FsbGJhY2tzPV8uY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuc2luZ2xlSW5zdGFuY2V8fChnLnNpbmdsZUlu'@;
put 'c3RhbmNlPW5ldyBnKSxnLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGcucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKEIsdyl7dmFyIFA9dGhpcztyZXR1cm4gdGhpcy5jYWxsYmFja3NbQl0/LTE9PT10aGlzLmNhbGxiYWNrc1tCXS5pbmRl'@;
put 'eE9mKHcpJiZ0aGlzLmNhbGxiYWNrc1tCXS5wdXNoKHcpOnRoaXMuY2FsbGJhY2tzW0JdPVt3XSxmdW5jdGlvbigpe3ZhciBGPVAuY2FsbGJhY2tzW0JdLmluZGV4T2Yodyk7UC5jYWxsYmFja3NbQl0uc3BsaWNlKEYsMSksMD09PVAuY2FsbGJhY2tzW0JdLmxlbmd0aCYmZGVsZXRlIFAuY2Fs'@;
put 'bGJhY2tzW0JdfX0sZy5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24oQix3KXt0aGlzLmNhbGxiYWNrc1tCXSYmdGhpcy5jYWxsYmFja3NbQl0ubWFwKGZ1bmN0aW9uKFApe1Aodyl9KX0sZ30oKTtfLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj15fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMv'@;
put 'dXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioq'@;
put 'IQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19l'@;
put 'c01vZHVsZSIse3ZhbHVlOiEwfSksXy5jbHJJY29uU1ZHPXZvaWQgMDtfLmNsckljb25TVkc9ZnVuY3Rpb24gdyhQKXt2YXIgRj0iIjtyZXR1cm4gUC5pbmRleE9mKCItLWJhZGdlZCIpPi0xJiYoRis9ImNhbi1iYWRnZSAiKSxQLmluZGV4T2YoIi0tYWxlcnRlZCIpPi0xJiYoRis9ImNhbi1h'@;
put 'bGVydCAiKSxQLmluZGV4T2YoImNsci1pLXNvbGlkIik+LTEmJihGKz0iaGFzLXNvbGlkICIpLChGPyc8c3ZnIHZlcnNpb249IjEuMSIgY2xhc3M9IicrRisnIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6'@;
put 'Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nOic8c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1p'@;
put 'ZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JykrUCsiPC9zdmc+In19fSl9LDgwNjg1OmZ1bmN0aW9uKHVlKXt1ZS5leHBv'@;
put 'cnRzPWZ1bmN0aW9uKHEpe3ZhciBfPXt9O2Z1bmN0aW9uIEkoeSl7aWYoX1t5XSlyZXR1cm4gX1t5XS5leHBvcnRzO3ZhciBnPV9beV09e2k6eSxsOiExLGV4cG9ydHM6e319O3JldHVybiBxW3ldLmNhbGwoZy5leHBvcnRzLGcsZy5leHBvcnRzLEkpLGcubD0hMCxnLmV4cG9ydHN9cmV0dXJu'@;
put 'IEkubT1xLEkuYz1fLEkuZD1mdW5jdGlvbih5LGcsQil7SS5vKHksZyl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LGcse2VudW1lcmFibGU6ITAsZ2V0OkJ9KX0sSS5yPWZ1bmN0aW9uKHkpe3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eSh5LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LEkudD1mdW5jdGlvbih5LGcpe2lmKDEmZyYmKHk9SSh5KSksOCZnfHw0JmcmJiJvYmplY3QiPT10eXBlb2YgeSYmeSYmeS5f'@;
put 'X2VzTW9kdWxlKXJldHVybiB5O3ZhciBCPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoSS5yKEIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTp5fSksMiZnJiYic3RyaW5nIiE9dHlwZW9mIHkpZm9yKHZhciB3IGluIHkpSS5kKEIsdyxmdW5j'@;
put 'dGlvbihQKXtyZXR1cm4geVtQXX0uYmluZChudWxsLHcpKTtyZXR1cm4gQn0sSS5uPWZ1bmN0aW9uKHkpe3ZhciBnPXkmJnkuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB5LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHl9O3JldHVybiBJLmQoZywiYSIsZyksZ30sSS5vPWZ1bmN0'@;
put 'aW9uKHksZyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LGcpfSxJLnA9IiIsSShJLnM9Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzIil9KHsiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiOgov'@;
put 'KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5BbGxTaGFwZXM9dm9pZCAwO3ZhciB5PUko'@;
put 'Ci8qISAuL2NoYXJ0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyIpLGc9SSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksQj1JKAovKiEgLi9jb3Jl'@;
put 'LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1JKAovKiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLFA9SSgKLyohIC4vbWVkaWEtc2hhcGVzICov'@;
put 'CiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIiksRj1JKAovKiEgLi9zb2NpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvc29jaWFsLXNoYXBlcy50cyIpLE89SSgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVj'@;
put 'dHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLHo9SSgKLyohIC4vdGV4dC1lZGl0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RleHQtZWRpdC1zaGFwZXMudHMiKSxOPUkoCi8qISAuL3RyYXZlbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIiksTD1bQi5Db3JlU2hhcGVzLGcuQ29tbWVyY2VTaGFwZXMsdy5Fc3NlbnRpYWxTaGFwZXMsUC5NZWRpYVNoYXBlcyxGLlNvY2lhbFNoYXBlcyxPLlRlY2hub2xvZ3lTaGFwZXMsTi5UcmF2ZWxTaGFwZXMseS5DaGFydFNoYXBlcyx6'@;
put 'LlRleHRFZGl0U2hhcGVzXSxLPXt9O18uQWxsU2hhcGVzPUs7Zm9yKHZhciBVPTAsVz1MO1U8Vy5sZW5ndGg7VSsrKXt2YXIgWT1XW1VdO2Zvcih2YXIgWCBpbiBZKVkuaGFzT3duUHJvcGVydHkoWCkmJihLW1hdPVlbWF0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy'@;
put 'dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChLKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAg'@;
put 'ICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu'@;
put 'Y3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5DaGFydFNoYXBlcz1fLkNsclNoYXBlQmVsbEN1cnZlPV8uQ2xyU2hhcGVUaWNrQ2hhcnQ9Xy5DbHJTaGFwZVNjYXR0ZXJQbG90PV8uQ2xyU2hhcGVQaWVD'@;
put 'aGFydD1fLkNsclNoYXBlTGluZUNoYXJ0PV8uQ2xyU2hhcGVIZWF0TWFwPV8uQ2xyU2hhcGVHcmlkQ2hhcnQ9Xy5DbHJTaGFwZUN1cnZlQ2hhcnQ9Xy5DbHJTaGFwZUNsb3VkQ2hhcnQ9Xy5DbHJTaGFwZUJ1YmJsZUNoYXJ0PV8uQ2xyU2hhcGVCb3hQbG90PV8uQ2xyU2hhcGVCYXJDaGFydD1f'@;
put 'LkNsclNoYXBlQXhpc0NoYXJ0PXZvaWQgMDt2YXIgeT1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksZz1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJv'@;
put 'amVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Xy5DbHJTaGFwZUF4aXNDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1'@;
put 'Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEg'@;
put 'QyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw'@;
put 'NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcg'@;
put 'MjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMg'@;
put 'Mi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYg'@;
put 'TCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgTCA2LjAwNyAyNi43MzEgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBj'@;
put 'bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAz'@;
put 'MSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA2LjAwNyAyNi43MzEgTCAy'@;
put 'Ny43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42'@;
put 'NSA2IDExLjAxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwg'@;
put 'MzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3'@;
put 'IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2LjczMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4'@;
put 'IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5'@;
put 'OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg'@;
put 'MiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNi4wMDcgMjYuNzMxIEwg'@;
put 'MjcuNzMgMjYuNzMgQyAyOC40OSAyNi42NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAu'@;
put 'NjUgNiAxMS4wMSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcg'@;
put 'MTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEu'@;
put 'MTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+JyksXy5DbHJTaGFwZUJhckNoYXJ0PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3'@;
put 'VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIzIDE2IEwgMjkgMTYgTCAyOSAyNiBMIDI3LjQgMjYgTCAyNy40IDE3LjYgTCAyNC42IDE3LjYgTCAyNC42IDI2IEwgMjMgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiPjwvcGF0'@;
put 'aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBD'@;
put 'IDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44'@;
put 'OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEwIEwg'@;
put 'MTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIx'@;
put 'IDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwgMjkgMjYgTCAy'@;
put 'Ny40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUg'@;
put 'MzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjUgMTMuNDI5IDMyLjg5NSAxMy4w'@;
put 'MzYgMzQgMTIuMzQgWiBNIDcgMjYgTCAxMyAyNiBMIDEzIDEwIEwgNyAxMCBaIE0gMTUgMjYgTCAyMSAyNiBMIDIxIDE5IEwgMTUgMTkgWiBNIDIzIDI2IEwgMjkgMjYgTCAyOSAxNiBMIDIzIDE2IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw'@;
put 'NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcg'@;
put 'MTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE5IEwgMjEg'@;
put 'MTkgTCAyMSAyNiBMIDE5LjQgMjYgTCAxOS40IDIwLjYgTCAxNi42IDIwLjYgTCAxNi42IDI2IEwgMTUgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMyAxNiBMIDI5IDE2IEwg'@;
put 'MjkgMjYgTCAyNy40IDI2IEwgMjcuNCAxNy42IEwgMjQuNiAxNy42IEwgMjQuNiAyNiBMIDIzIDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy'@;
put 'dGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMu'@;
put 'MDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+'@;
put 'PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5'@;
put 'NSA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNyAyNiBMIDEzIDI2IEwgMTMgMTAgTCA3IDEw'@;
put 'IFogTSAxNSAyNiBMIDIxIDI2IEwgMjEgMTkgTCAxNSAxOSBaIE0gMjMgMjYgTCAyOSAyNiBMIDI5IDE2IEwgMjMgMTYgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2'@;
put 'Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44'@;
put 'NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLF8uQ2xyU2hhcGVCb3hQbG90PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMiBM'@;
put 'IDE3IDEyIEwgMTcgMjYgTCA3IDI2IEwgNyAxMiBaIE0gOC42IDI0LjQgTCAxNS40IDI0LjQgTCAxNS40IDE4LjggTCA4LjYgMTguOCBMIDguNiAyNC40IFogTSAxNS40IDEzLjYgTCA4LjYgMTMuNiBMIDguNiAxNy4yIEwgMTUuNCAxNy4yIEwgMTUuNCAxMy42IFoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTkgMjQgTCAyOSAyNCBMIDI5IDEwIEwgMTkgMTAgTCAxOSAyNCBaIE0gMjAuNiAxMS42IEwgMjcuNCAxMS42IEwgMjcuNCAxNy4yIEwgMjAuNiAxNy4yIEwgMjAuNiAxMS42IFogTSAyNy40IDIyLjQg'@;
put 'TCAyMC42IDIyLjQgTCAyMC42IDE4LjggTCAyNy40IDE4LjggTCAyNy40IDIyLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQg'@;
put 'MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBaIE0gOSAxOSBM'@;
put 'IDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDE5IDI0IEwgMjkgMjQgTCAyOSAxMCBMIDE5IDEwIFogTSAyMSAxMiBMIDI3IDEyIEwgMjcgMTcgTCAyMSAxNyBaIE0gMjcgMjIgTCAyMSAyMiBMIDIxIDE5IEwgMjcgMTkgWiI+PC9wYXRo'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUg'@;
put 'MjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIg'@;
put 'WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwgMTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcu'@;
put 'MiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSAxMCBMIDIzLjcyOCAxMCBDIDI0LjEwNSAxMC41OTYgMjQuNTY0IDExLjEzNSAyNS4wOSAxMS42IEwgMjAuNiAx'@;
put 'MS42IEwgMjAuNiAxNy4yIEwgMjcuNCAxNy4yIEwgMjcuNCAxMi45ODcgQyAyNy45MDkgMTMuMTc3IDI4LjQ0NSAxMy4zMTMgMjkgMTMuMzg3IEwgMjkgMjQgTCAxOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAuNiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IFoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+'@;
put 'XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIu'@;
put 'ODk1IDUgNCA1IEwgMjIuNTcgNSBDIDIyLjMxMiA2LjgxNyAyMi43MzIgOC41NjYgMjMuNjMzIDEwIEwgMTkgMTAgTCAxOSAyNCBMIDI5IDI0IEwgMjkgMTMuNDI3IEMgMjkuMTAzIDEzLjQ0IDI5LjIwNiAxMy40NTEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40Mjkg'@;
put 'MzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNyAyNiBMIDE3IDI2IEwgMTcgMTIgTCA3IDEyIFogTSA5IDE5IEwgMTUgMTkgTCAxNSAyNCBMIDkgMjQgWiBNIDE1IDE3IEwgOSAxNyBMIDkgMTQgTCAxNSAxNCBaIE0gMjEgMTIgTCAyNS40NzIgMTIgQyAyNS45NCAxMi4zNTIgMjYuNDUyIDEy'@;
put 'LjY1IDI3IDEyLjg4NSBMIDI3IDE3IEwgMjEgMTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0i'@;
put 'NiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3'@;
put 'IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTIgTCAxNyAxMiBMIDE3IDI2IEwgNyAyNiBMIDcgMTIgWiBNIDguNiAyNC40IEwg'@;
put 'MTUuNCAyNC40IEwgMTUuNCAxOC44IEwgOC42IDE4LjggTCA4LjYgMjQuNCBaIE0gMTUuNCAxMy42IEwgOC42IDEzLjYgTCA4LjYgMTcuMiBMIDE1LjQgMTcuMiBMIDE1LjQgMTMuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRl'@;
put 'ZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDI0IEwgMTkgMjQgTCAxOSAxNS4zNDUgQyAxOS4wMjEgMTUuMzQ4IDIwLjYgMTUuMzYgMjAuNiAxNS4zNiBMIDIwLjYgMTcuMiBMIDI3LjQgMTcuMiBMIDI3LjQgMTUuMzYgTCAyOSAxNS4zNTcgTCAyOSAyNCBaIE0gMjcuNCAxOC44IEwgMjAu'@;
put 'NiAxOC44IEwgMjAuNiAyMi40IEwgMjcuNCAyMi40IEwgMjcuNCAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEz'@;
put 'LjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1'@;
put 'OCA1IEwgMTkuMDI4IDEwIEwgMTkgMTAgTCAxOSAxMC4wNDggTCAxNy42MjUgMTIuMzk1IEMgMTYuODA3IDEzLjU4MyAxNy41NzEgMTUuMTk3IDE5IDE1LjM0NSBMIDE5IDI0IEwgMjkgMjQgTCAyOSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDcgMjYgTCAxNyAyNiBMIDE3IDEyIEwgNyAxMiBa'@;
put 'IE0gOSAxOSBMIDE1IDE5IEwgMTUgMjQgTCA5IDI0IFogTSAxNSAxNyBMIDkgMTcgTCA5IDE0IEwgMTUgMTQgWiBNIDI3IDE3IEwgMjEgMTcgTCAyMSAxNS4zNTcgTCAyNyAxNS4zNTcgWiBNIDI3IDIyIEwgMjEgMjIgTCAyMSAxOSBMIDI3IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAx'@;
put 'My4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkg'@;
put 'MjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxfLkNsclNoYXBlQnViYmxlQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBD'@;
put 'IDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcg'@;
put 'MjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYgMjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIy'@;
put 'NyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBD'@;
put 'IDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMgNyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42'@;
put 'NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEzLjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjEgMjMg'@;
put 'QyAyMSAyNC42NTcgMTkuNjU3IDI2IDE4IDI2IEMgMTYuMzQzIDI2IDE1IDI0LjY1NyAxNSAyMyBDIDE1IDIxLjM0MyAxNi4zNDMgMjAgMTggMjAgQyAxOS42NTcgMjAgMjEgMjEuMzQzIDIxIDIzIFogTSAxOCAyMS42IEMgMTcuMjI3IDIxLjYgMTYuNiAyMi4yMjcgMTYuNiAyMyBDIDE2LjYg'@;
put 'MjMuNzczIDE3LjIyNyAyNC40IDE4IDI0LjQgQyAxOC43NzMgMjQuNCAxOS40IDIzLjc3MyAxOS40IDIzIEMgMTkuNCAyMi4yMjcgMTguNzczIDIxLjYgMTggMjEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0'@;
put 'IDUuODk2IDM0IDcgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1IDIzIDE2LjM0MyAyMyAx'@;
put 'OCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAyNiBDIDE5LjY1NyAyNiAy'@;
put 'MSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcg'@;
put 'NyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0'@;
put 'IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAx'@;
put 'NSBDIDI3LjY1NyAxNSAyOSAxNi4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMg'@;
put 'MTYuNiAyNiAxNi42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMg'@;
put 'NyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFogTSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEz'@;
put 'LjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMgMjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAy'@;
put 'NiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIzLjc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0'@;
put 'LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiByeD0iMyI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQg'@;
put 'MjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMu'@;
put 'NDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDExIDEwIEMgOC43OTEgMTAgNyAxMS43OTEgNyAxNCBDIDcgMTYuMjA5IDguNzkxIDE4IDExIDE4IEMgMTMuMjA5IDE4IDE1IDE2LjIwOSAxNSAxNCBDIDE1IDExLjc5MSAxMy4yMDkgMTAgMTEgMTAgWiBNIDI2IDE1IEMgMjQuMzQzIDE1'@;
put 'IDIzIDE2LjM0MyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuMzQzIDI3LjY1NyAxNSAyNiAxNSBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAyNiAxOCAy'@;
put 'NiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0i'@;
put 'NSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1'@;
put 'Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkgMTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcg'@;
put 'MjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43'@;
put 'NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTQgQyAxNSAxNi4yMDkgMTMuMjA5IDE4'@;
put 'IDExIDE4IEMgOC43OTEgMTggNyAxNi4yMDkgNyAxNCBDIDcgMTEuNzkxIDguNzkxIDEwIDExIDEwIEMgMTMuMjA5IDEwIDE1IDExLjc5MSAxNSAxNCBaIE0gMTEgMTEuNiBDIDkuNjc1IDExLjYgOC42IDEyLjY3NSA4LjYgMTQgQyA4LjYgMTUuMzI1IDkuNjc1IDE2LjQgMTEgMTYuNCBDIDEy'@;
put 'LjMyNSAxNi40IDEzLjQgMTUuMzI1IDEzLjQgMTQgQyAxMy40IDEyLjY3NSAxMi4zMjUgMTEuNiAxMSAxMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIxIDIzIEMg'@;
put 'MjEgMjQuNjU3IDE5LjY1NyAyNiAxOCAyNiBDIDE2LjM0MyAyNiAxNSAyNC42NTcgMTUgMjMgQyAxNSAyMS4zNDMgMTYuMzQzIDIwIDE4IDIwIEMgMTkuNjU3IDIwIDIxIDIxLjM0MyAyMSAyMyBaIE0gMTggMjEuNiBDIDE3LjIyNyAyMS42IDE2LjYgMjIuMjI3IDE2LjYgMjMgQyAxNi42IDIz'@;
put 'Ljc3MyAxNy4yMjcgMjQuNCAxOCAyNC40IEMgMTguNzczIDI0LjQgMTkuNCAyMy43NzMgMTkuNCAyMyBDIDE5LjQgMjIuMjI3IDE4Ljc3MyAyMS42IDE4IDIxLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIHJ4PSIzIj48'@;
put 'L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAw'@;
put 'MSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBD'@;
put 'IDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAy'@;
put 'Ljg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBM'@;
put 'IDI0LjU3OSAxNS4zNTcgQyAyMy42MzkgMTUuODYzIDIzIDE2Ljg1NyAyMyAxOCBDIDIzIDE5LjY1NyAyNC4zNDMgMjEgMjYgMjEgQyAyNy42NTcgMjEgMjkgMTkuNjU3IDI5IDE4IEMgMjkgMTYuODU3IDI4LjM2MSAxNS44NjMgMjcuNDIxIDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gMTEgMTAg'@;
put 'QyA4Ljc5MSAxMCA3IDExLjc5MSA3IDE0IEMgNyAxNi4yMDkgOC43OTEgMTggMTEgMTggQyAxMy4yMDkgMTggMTUgMTYuMjA5IDE1IDE0IEMgMTUgMTEuNzkxIDEzLjIwOSAxMCAxMSAxMCBaIE0gMTggMjAgQyAxNi4zNDMgMjAgMTUgMjEuMzQzIDE1IDIzIEMgMTUgMjQuNjU3IDE2LjM0MyAy'@;
put 'NiAxOCAyNiBDIDE5LjY1NyAyNiAyMSAyNC42NTcgMjEgMjMgQyAyMSAyMS4zNDMgMTkuNjU3IDIwIDE4IDIwIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQg'@;
put 'MS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDEx'@;
put 'LjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxfLkNsclNoYXBlQ2xvdWRDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCwyOVY3SDMyVjI5WiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIwLjk3MSAx'@;
put 'MS4yNDMgQyAyMy4zMTQgMTMuNTg2IDIyLjM2NCAxOC4zMzUgMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUuODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjg3OSA5Ljg0OSAxOC42MjggOC45IDIwLjk3'@;
put 'MSAxMS4yNDMgWiBNIDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMjAuMzg4IDE3Ljc2NSAyMS4zMzggMTQuMTU2IDE5LjY5NyAxMi41MTYgQyAxOC4wNTcg'@;
put 'MTAuODc2IDE0LjQ0OCAxMS44MjUgMTEuNjM2IDE0LjYzNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIg'@;
put 'QyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNyAyMC42IDIzLjYgMjEuMjI3IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjcgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYu'@;
put 'NCAyMiBDIDI2LjQgMjEuMjI3IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkg'@;
put 'QyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk1IDM0IDcgWiBNIDEwLjM2NCAxMy4zNjQgQyA2Ljg0OSAxNi44NzggNS44OTkgMjEuNjI3'@;
put 'IDguMjQzIDIzLjk3IEMgMTAuNTg2IDI2LjMxNCAxNS4zMzQgMjUuMzY0IDE4Ljg0OSAyMS44NDkgQyAyMi4zNjQgMTguMzM1IDIzLjMxNCAxMy41ODYgMjAuOTcxIDExLjI0MyBDIDE4LjYyOCA4LjkgMTMuODc5IDkuODQ5IDEwLjM2NCAxMy4zNjQgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIy'@;
put 'IDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMgMjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMg'@;
put 'MiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjAuOTcxIDExLjI0MyBDIDIzLjMxNCAxMy41ODYgMjIu'@;
put 'MzY0IDE4LjMzNSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIzLjk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuODc5IDkuODQ5IDE4LjYyOCA4LjkgMjAuOTcxIDExLjI0MyBaIE0gMTEuNjM2IDE0LjYz'@;
put 'NyBDIDguODI0IDE3LjQ0OSA3Ljg3NSAyMS4wNTggOS41MTUgMjIuNjk4IEMgMTEuMTU1IDI0LjMzOCAxNC43NjQgMjMuMzg5IDE3LjU3NiAyMC41NzcgQyAyMC4zODggMTcuNzY1IDIxLjMzOCAxNC4xNTYgMTkuNjk3IDEyLjUxNiBDIDE4LjA1NyAxMC44NzYgMTQuNDQ4IDExLjgyNSAxMS42'@;
put 'MzYgMTQuNjM3IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4z'@;
put 'NDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIzLjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2'@;
put 'LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSI3Ij48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIg'@;
put 'MzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBa'@;
put 'IE0gMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIyLjM2NCAxOC4zMzUgMjMuMzE0IDEzLjU4NiAyMC45NzEgMTEuMjQzIEMgMTguNjI4IDguOSAxMy44Nzkg'@;
put 'OS44NDkgMTAuMzY0IDEzLjM2NCBaIE0gMjUgMTkgQyAyMy4zNDMgMTkgMjIgMjAuMzQzIDIyIDIyIEMgMjIgMjMuNjU3IDIzLjM0MyAyNSAyNSAyNSBDIDI2LjY1NyAyNSAyOCAyMy42NTcgMjggMjIgQyAyOCAyMC4zNDMgMjYuNjU3IDE5IDI1IDE5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk'@;
put 'IiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4z'@;
put 'NTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkgMTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy4wNDkgMTAuNjc5IDE2LjQ1MyA5LjQ5MiAxOC45NTYgMTAu'@;
put 'MTI0IEwgMTguMDA4IDExLjc0MSBDIDE2LjE4IDExLjUxOCAxMy42OTUgMTIuNTc4IDExLjYzNiAxNC42MzcgQyA4LjgyNCAxNy40NDkgNy44NzUgMjEuMDU4IDkuNTE1IDIyLjY5OCBDIDExLjE1NSAyNC4zMzggMTQuNzY0IDIzLjM4OSAxNy41NzYgMjAuNTc3IEMgMTkuMjI4IDE4LjkyNSAy'@;
put 'MC4yMzcgMTYuOTk4IDIwLjQ1NiAxNS4zNTcgTCAyMi4yMiAxNS4zNTcgQyAyMi4wMDYgMTcuNDc3IDIwLjgzOCAxOS44NjEgMTguODQ5IDIxLjg0OSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0'@;
put 'aCBkPSJNIDI4IDIyIEMgMjggMjMuNjU3IDI2LjY1NyAyNSAyNSAyNSBDIDIzLjM0MyAyNSAyMiAyMy42NTcgMjIgMjIgQyAyMiAyMC4zNDMgMjMuMzQzIDE5IDI1IDE5IEMgMjYuNjU3IDE5IDI4IDIwLjM0MyAyOCAyMiBaIE0gMjUgMjAuNiBDIDI0LjIyNiAyMC42IDIzLjYgMjEuMjI2IDIz'@;
put 'LjYgMjIgQyAyMy42IDIyLjc3MyAyNC4yMjYgMjMuNCAyNSAyMy40IEMgMjUuNzczIDIzLjQgMjYuNCAyMi43NzMgMjYuNCAyMiBDIDI2LjQgMjEuMjI2IDI1Ljc3MyAyMC42IDI1IDIwLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFs'@;
put 'ZXJ0ZWQiIHg9IjciPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjky'@;
put 'OCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwg'@;
put 'MjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMy'@;
put 'IDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAxOC45NTYgMTAuMTI0IEMgMTYuNDUzIDkuNDkyIDEzLjA0OSAxMC42NzkgMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4y'@;
put 'NDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIwLjgzOCAxOS44NjEgMjIuMDA2IDE3LjQ3NyAyMi4yMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEMgMjMuMzQzIDE5IDIyIDIwLjM0MyAyMiAyMiBDIDIyIDIzLjY1NyAyMy4zNDMg'@;
put 'MjUgMjUgMjUgQyAyNi42NTcgMjUgMjggMjMuNjU3IDI4IDIyIEMgMjggMjAuMzQzIDI2LjY1NyAxOSAyNSAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0'@;
put 'IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAx'@;
put 'MS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksXy5DbHJTaGFwZUN1cnZlQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44'@;
put 'OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIg'@;
put 'MTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5'@;
put 'LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIw'@;
put 'MyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDEzIDEy'@;
put 'IEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAy'@;
put 'OS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDgg'@;
put 'NiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYu'@;
put 'NjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4z'@;
put 'NCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTEuOCBDIDYuNTU4IDExLjggNi4yIDExLjQ0MiA2LjIgMTEgQyA2LjIgMTAuNTU4IDYuNTU4IDEwLjIgNyAxMC4yIEwgMTMgMTAuMiBDIDE1LjQwNCAxMC4yIDE2LjM2OCAx'@;
put 'MS45MDcgMTcuNjUzIDE2LjQ3OCBDIDE3LjY5NSAxNi42MjggMTcuNzQ0IDE2LjgwMyAxNy44MzUgMTcuMTI5IEMgMTcuOTA5IDE3LjM5MiAxNy45NjQgMTcuNTg4IDE4LjAxOSAxNy43OCBDIDE5LjMzMiAyMi4zNzUgMjAuNTQ5IDI0LjIgMjMgMjQuMiBMIDI5IDI0LjIgQyAyOS40NDIgMjQu'@;
put 'MiAyOS44IDI0LjU1OCAyOS44IDI1IEMgMjkuOCAyNS40NDIgMjkuNDQyIDI1LjggMjkgMjUuOCBMIDIzIDI1LjggQyAxOS41MzUgMjUuOCAxNy45ODEgMjMuNDY5IDE2LjQ4MSAxOC4yMiBDIDE2LjQyNSAxOC4wMjUgMTYuMzY5IDE3LjgyNiAxNi4yOTUgMTcuNTYgQyAxNi4yMDMgMTcuMjM0'@;
put 'IDE2LjE1NCAxNy4wNiAxNi4xMTMgMTYuOTExIEMgMTUuMDQzIDEzLjEwNSAxNC4zMDUgMTEuOCAxMyAxMS44IEwgNyAxMS44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEy'@;
put 'LjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAz'@;
put 'MS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDEzIDEyIEMgMTQuODE3IDEyIDE1LjY3NCAxMy40OTkgMTcuMDM5IDE4LjI3NSBDIDE3LjgxMyAyMC45ODQgMTguMjAxIDIyLjExOCAxOC44ODIgMjMuMzA5IEMgMTkuODcgMjUuMDM4IDIxLjIwNSAyNiAyMyAyNiBMIDI5'@;
put 'IDI2IEMgMjkuNTUyIDI2IDMwIDI1LjU1MiAzMCAyNSBDIDMwIDI0LjQ0OCAyOS41NTIgMjQgMjkgMjQgTCAyMyAyNCBDIDIxLjE4MyAyNCAyMC4zMjYgMjIuNTAxIDE4Ljk2MiAxNy43MjUgQyAxOC4xODggMTUuMDE2IDE3Ljc5OSAxMy44ODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2'@;
put 'MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40NDggNiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj'@;
put 'eD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1'@;
put 'IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIgMTEuNDQyIDYuMiAxMSBD'@;
put 'IDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIgMTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAxNy41ODggMTguMDE5IDE3'@;
put 'Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAyMy40NjkgMTYuNDgxIDE4'@;
put 'LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIwMyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3'@;
put 'OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDEx'@;
put 'LjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAz'@;
put 'NCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTcuNDc2IDEyLjYxMiAxNy4zNzkgMTIuODQzIDE3LjMzIDEzLjA3NyBDIDE3LjI2MiAx'@;
put 'Mi45NDggMTcuMTkyIDEyLjgyIDE3LjExOCAxMi42OTEgQyAxNi4xMyAxMC45NjIgMTQuNzk1IDEwIDEzIDEwIEwgNyAxMCBDIDYuNDQ4IDEwIDYgMTAuNDQ4IDYgMTEgQyA2IDExLjU1MiA2LjQ0OCAxMiA3IDEyIEwgMTMgMTIgQyAxNC44MTcgMTIgMTUuNjc0IDEzLjQ5OSAxNy4wMzkgMTgu'@;
put 'Mjc1IEMgMTcuODEzIDIwLjk4NCAxOC4yMDEgMjIuMTE4IDE4Ljg4MiAyMy4zMDkgQyAxOS44NyAyNS4wMzggMjEuMjA1IDI2IDIzIDI2IEwgMjkgMjYgQyAyOS41NTIgMjYgMzAgMjUuNTUyIDMwIDI1IEMgMzAgMjQuNDQ4IDI5LjU1MiAyNCAyOSAyNCBMIDIzIDI0IEMgMjEuMTgzIDI0IDIw'@;
put 'LjMyNiAyMi41MDEgMTguOTYyIDE3LjcyNSBDIDE4LjY0IDE2LjU5OCAxOC4zODUgMTUuNzQ0IDE4LjE0NyAxNS4wNDQgQyAxOC40MDcgMTUuMjE1IDE4LjcxNyAxNS4zMjYgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4z'@;
put 'NTcgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEz'@;
put 'LjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0'@;
put 'NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLF8uQ2xyU2hhcGVHcmlkQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCww'@;
put 'LDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE3SDIxYTIsMiwwLDAsMS0yLTJWOGEyLDIsMCwwLDEs'@;
put 'Mi0ySDMyYTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMTdaTTIxLDh2N0gzMlY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwy'@;
put 'LDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwz'@;
put 'MiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2'@;
put 'Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAx'@;
put 'OS44OTUgNiAyMSA2IEwgMzIgNiBDIDMzLjEwNSA2IDM0IDYuODk1IDM0IDggTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4xMDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNIDE1IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIg'@;
put 'MjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTQiIGQ9Ik0gMzIgMzAgTCAyMSAzMCBDIDE5Ljg5NSAzMCAxOSAyOS4xMDUgMTkgMjggTCAxOSAyMSBDIDE5IDE5Ljg5NSAxOS44OTUgMTkgMjEgMTkgTCAzMiAxOSBDIDMzLjEwNSAxOSAzNCAxOS44OTUgMzQgMjEgTCAzNCAyOCBDIDM0IDI5LjEwNSAzMy4xMDUgMzAgMzIgMzAgWiIvPlxu'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLWFsZXJ0ZWQiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItYWxlcnRlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMjAuMDE0IDE3IDE5LjE5NSAxNi4yODcgMTkuMDMgMTUuMzQ4IEMgMTkuMDQxIDE1LjM0OSAxOS4wNTMgMTUuMzUgMTkuMDY0IDE1LjM1MSBD'@;
put 'IDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzMy45NjggMTUuMzU3IEMgMzMuOCAxNi4yOTIgMzIuOTgzIDE3IDMyIDE3IFogTSAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIxLjM3MiA2IEwgMTkgMTAuMDQ4IFoiLz5cbiAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy1hbGVydGVkIiBkPSJNMTUsMzBINGEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwzMFpNNCwyMXY3SDE1VjIxWiIvPlxuICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LWFsZXJ0ZWQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4x'@;
put 'ODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAu'@;
put 'Mjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4xMDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2'@;
put 'IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDIwLjAxNCAxNyAx'@;
put 'OS4xOTUgMTYuMjg3IDE5LjAzIDE1LjM0OCBDIDE5LjA0MSAxNS4zNDkgMTkuMDUzIDE1LjM1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzMuOTY4IDE1LjM1NyBDIDMzLjggMTYuMjkyIDMyLjk4MyAxNyAzMiAxNyBaIE0gMTkg'@;
put 'OCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMS4zNzIgNiBMIDE5IDEwLjA0OCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBM'@;
put 'IDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjggQyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0t'@;
put 'YWxlcnRlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBa'@;
put 'Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIu'@;
put 'MTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcg'@;
put 'MC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LDE3SDRhMiwyLDAsMCwxLTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3'@;
put 'QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAxOS44OTUgMTcgMTkgMTYuMTA1IDE5IDE1IEwgMTkgOCBDIDE5IDYuODk1'@;
put 'IDE5Ljg5NSA2IDIxIDYgTCAyMi41OSA2IEMgMjIuNTkgNi4wMTkgMjIuNTkgNi4wMzcgMjIuNTkgNi4wNTYgQyAyMi41OSA2LjcyOSAyMi42OCA3LjM4MSAyMi44NDggOCBMIDIxIDggTCAyMSAxNSBMIDMyIDE1IEwgMzIgMTMuMTc1IEMgMzIuNzE3IDEyLjk3MiAzMy4zODkgMTIuNjY0IDM0'@;
put 'IDEyLjI2OSBMIDM0IDE1IEMgMzQgMTYuMTA1IDMzLjEwNSAxNyAzMiAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIs'@;
put 'MiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMzIsMzBIMjFhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDMyYTIs'@;
put 'MiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMzIsMzBaTTIxLDIxdjdIMzJWMjFaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDE1IDE3IEwgNCAxNyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBD'@;
put 'IDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMTkuODk1IDE3IDE5IDE2LjEwNSAxOSAxNSBMIDE5IDggQyAxOSA2Ljg5NSAxOS44'@;
put 'OTUgNiAyMSA2IEwgMjIuNTkgNiBDIDIyLjU5IDYuMDE5IDIyLjU5IDYuMDM3IDIyLjU5IDYuMDU2IEMgMjIuNTkgMTAuMTQxIDI1LjkwMSAxMy40NTIgMjkuOTg2IDEzLjQ1MiBDIDMxLjQ2NiAxMy40NTIgMzIuODQ0IDEzLjAxOCAzNCAxMi4yNjkgTCAzNCAxNSBDIDM0IDE2LjEwNSAzMy4x'@;
put 'MDUgMTcgMzIgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBD'@;
put 'IDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAxNi4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5'@;
put 'IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBMIDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxfLkNsclNoYXBlSGVhdE1hcD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBM'@;
put 'IDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0'@;
put 'aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjggMTAgTCAyOCAyNiBMIDggMjYgWiBNIDkuNiAyNCBMIDE0LjEgMjQgTCAxNC4xIDE4LjggTCA5LjYgMTguOCBaIE0gMTQuMSAxMS42IEwgOS42IDExLjYgTCA5LjYgMTcuMiBMIDE0LjEgMTcuMiBaIE0gMjYgMjQgTCAyNiAxOC44IEwgMjEuOSAx'@;
put 'OC44IEwgMjEuOSAyNCBaIE0gMjYgMTEuNiBMIDIxLjkgMTEuNiBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgWiBNIDE1LjcgMTEuNiBMIDE1LjcgMTcuMiBMIDIwLjMgMTcuMiBMIDIwLjMgMTEuNiBaIE0gMTUuNyAyNCBMIDIwLjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUy'@;
put 'NCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQg'@;
put 'MTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMjMuNzI4IDEwIEMgMjQuMTA1IDEwLjU5NiAyNC41NjQgMTEuMTM1IDI1LjA5IDExLjYgTCAyMS45IDExLjYgTCAyMS45IDE3LjIgTCAyNiAxNy4yIEwgMjYg'@;
put 'MTIuMjg3IEMgMjYuNjExIDEyLjY3OSAyNy4yODQgMTIuOTgzIDI4IDEzLjE4MiBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBM'@;
put 'IDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDExLjYgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIyLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIw'@;
put 'Ljc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA4IDEwIEwgMTkuMDI4IDEwIEwgMTguMDkxIDExLjYgTCAxNS43IDExLjYgTCAxNS43IDE3LjIgTCAyMC4zIDE3LjIgTCAyMC4zIDE1LjM1NyBMIDIxLjkg'@;
put 'MTUuMzU3IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBMIDI2IDE1LjM1NyBMIDI4IDE1LjM1NyBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAy'@;
put 'NiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAw'@;
put 'NSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcu'@;
put 'MzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3'@;
put 'IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA4IDI2IEwgMjggMjYgTCAyOCAxMCBMIDggMTAgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAyNCBaIE0gMjAgMTkg'@;
put 'TCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxMiBMIDI2IDEyIFogTSAyMCAxMiBMIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBaIE0gMTQgMTIgTCAxNCAxNyBMIDEwIDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMi4zMTIg'@;
put 'Ni44MTcgMjIuNzMyIDguNTY2IDIzLjYzMyAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxMy4yMzIgQyAyOC40MjEgMTMuMzQ1IDI4Ljg1OSAxMy40MjIgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTAg'@;
put 'MTkgTCAxNCAxOSBMIDE0IDI0IEwgMTAgMjQgWiBNIDIyIDI0IEwgMjIgMTkgTCAyNiAxOSBMIDI2IDI0IFogTSAyMCAxOSBMIDIwIDI0IEwgMTYgMjQgTCAxNiAxOSBaIE0gMjYgMTcgTCAyMiAxNyBMIDIyIDEyIEwgMjUuNTg0IDEyIEMgMjUuNzE5IDEyLjEgMjUuODU4IDEyLjE5NiAyNiAx'@;
put 'Mi4yODcgWiBNIDIwIDEyIEwgMjAgMTcgTCAxNiAxNyBMIDE2IDEyIFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj'@;
put 'eD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAy'@;
put 'OSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE5LjAyOCAxMCBMIDggMTAgTCA4IDI2IEwgMjggMjYgTCAyOCAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDEwIDE5IEwgMTQgMTkgTCAxNCAyNCBMIDEwIDI0IFogTSAyMiAyNCBMIDIyIDE5IEwgMjYgMTkgTCAyNiAy'@;
put 'NCBaIE0gMjAgMTkgTCAyMCAyNCBMIDE2IDI0IEwgMTYgMTkgWiBNIDI2IDE3IEwgMjIgMTcgTCAyMiAxNS4zNTcgTCAyNiAxNS4zNTcgWiBNIDIwIDE3IEwgMTYgMTcgTCAxNiAxMiBMIDE3Ljg1NiAxMiBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTku'@;
put 'MDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyMCAxNS4zNTcgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MjItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMg'@;
put 'MzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksXy5DbHJTaGFwZUxp'@;
put 'bmVDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1'@;
put 'IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDku'@;
put 'MzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wb2x5Z29uPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTYgMzMuMTA1IDUgMzIgNSBaIE0gMjIuNTYg'@;
put 'MjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2IEwgMjIuNjUgMjIuMjcgTCAyOS42NSAxMyBMIDMxLjM1IDE0LjI4IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUg'@;
put 'NSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBvbHlnb24gcG9pbnRzPSIxNS42'@;
put 'MiAxNS4yMjIgOS42MDIgMjMuOTY4IDUuNTUgMjAuMzg0IDYuNjEgMTkuMTg2IDkuMzA4IDIxLjU3MiAxNS42MzQgMTIuMzggMjIuMzg0IDIyLjM5NSAyOS4xMzggMTMuNDcgMzAuNDE0IDE0LjQzNiAyMi4zMDggMjUuMTQ1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcG9seWdvbj5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMC4zMiAxMy40OCBMIDMxLjM4IDE0LjI4IEwgMjIuNTYgMjUuOTQgTCAxNS40NiAxNS4zNiBMIDkuMTIgMjQuNjQgTCA0LjYyIDIwLjY0IEwgNiAxOS4wNSBMIDguNyAyMS40NCBMIDE1LjQ2IDExLjU2'@;
put 'IEwgMjIuNjUgMjIuMjcgTCAyOS4zMSAxMy40NiBDIDI1LjA1IDEzLjEgMjEuOTY5IDkuMjMzIDIyLjU3IDUgTCA0IDUgQyAyLjg5NiA1IDIgNS44OTYgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk2IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCAx'@;
put 'Mi4zNCBDIDMyLjg5NSAxMy4wMzYgMzEuNjI2IDEzLjQyOSAzMC4zMiAxMy40OCBaIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xl'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUg'@;
put 'NSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNS42MiAxNS4yMjIgTCA5LjYwMiAyMy45NjggTCA1LjU1IDIwLjM4NCBMIDYuNjEgMTkuMTg2IEwgOS4zMDggMjEu'@;
put 'NTcyIEwgMTUuNjM0IDEyLjM4IEwgMjIuMzg0IDIyLjM5NSBMIDI3LjcxNyAxNS4zNDggTCAyOS43MjQgMTUuMzQ4IEwgMjIuMzA4IDI1LjE0NSBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1'@;
put 'IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4z'@;
put 'NDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUg'@;
put 'MiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAyNy40NTIgMTUuMzU3IEwg'@;
put 'MjIuMzggMjIuMDYgTCAxNS42MyAxMiBMIDkuMjggMjEuMjggTCA2Ljc1IDE5LjA0IEwgNS40MiAyMC41MyBMIDkuNjUgMjQuMjggTCAxNS42MSAxNS41NiBMIDIyLjI4IDI1LjUgTCAyOS45NTkgMTUuMzU3IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIu'@;
put 'MjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEu'@;
put 'MTQ0IFoiPjwvcGF0aD4nKSxfLkNsclNoYXBlUGllQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIu'@;
put 'ODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAx'@;
put 'OSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIuODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1'@;
put 'IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwg'@;
put 'MTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBDIDMyIDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBD'@;
put 'IDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44'@;
put 'OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBD'@;
put 'IDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAx'@;
put 'OCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGgg'@;
put 'ZD0iTSAxOSA5IEMgMjMuNDE4IDkgMjcgMTIuNTgyIDI3IDE3IEwgMTkgMTcgWiBNIDI1LjE5OCAxNS40IEMgMjQuNjIgMTMuMTUgMjIuODQ5IDExLjM4IDIwLjYgMTAuODAxIEwgMjAuNiAxNS40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMt'@;
put 'LWJhZGdlZCI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAy'@;
put 'NS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3'@;
put 'IDI1IDIzLjQxOCAyNSAxOSBaIE0gMTkgMTcgTCAyNyAxNyBDIDI3IDEyLjU4MiAyMy40MTggOSAxOSA5IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg'@;
put 'MiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEg'@;
put 'MTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAyNyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMg'@;
put 'MjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjcgMTcgTCAxOSAxNyBMIDE5IDE1LjM0NSBDIDE5LjAyMSAxNS4z'@;
put 'NDggMTkuMDQzIDE1LjM0OSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI2LjgzMSAxNS4zNTcgQyAyNi45NDIgMTUuODg3IDI3IDE2LjQzNyAyNyAxNyBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4x'@;
put 'MTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAx'@;
put 'MS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4x'@;
put 'MDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi44MDcgMTMuNTgzIDE3LjU3MSAxNS4xOTcgMTkgMTUuMzQ1IEwgMTkgMTcgTCAyNyAxNyBDIDI3IDE2LjQz'@;
put 'NyAyNi45NDIgMTUuODg3IDI2LjgzMSAxNS4zNTcgTCAzNCAxNS4zNTcgWiBNIDI1IDE5IEwgMTcgMTkgTCAxNyAxMSBDIDEyLjU4MiAxMSA5IDE0LjU4MiA5IDE5IEMgOSAyMy40MTggMTIuNTgyIDI3IDE3IDI3IEMgMjEuNDE4IDI3IDI1IDIzLjQxOCAyNSAxOSBaIj48L3BhdGg+XG4gIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAw'@;
put 'NSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcu'@;
put 'MzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksXy5DbHJTaGFwZVNjYXR0ZXJQbG90PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIg'@;
put 'NyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUu'@;
put 'MjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEw'@;
put 'LjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxu'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTku'@;
put 'NzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAy'@;
put 'MC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAy'@;
put 'NC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAu'@;
put 'MzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAx'@;
put 'Ni41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4z'@;
put 'NTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcg'@;
put 'TCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAx'@;
put 'Ni4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEyLjk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBD'@;
put 'IDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAxMC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEu'@;
put 'ODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAxIDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFogTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40'@;
put 'NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2'@;
put 'IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIx'@;
put 'Ljg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIE0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIg'@;
put 'MTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYg'@;
put 'MTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYu'@;
put 'NjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0i'@;
put 'TSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUg'@;
put 'MzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIg'@;
put 'ZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgx'@;
put 'IDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2'@;
put 'MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44'@;
put 'MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYgTCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4'@;
put 'LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMg'@;
put 'MTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0'@;
put 'LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMg'@;
put 'MjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIu'@;
put 'NTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMy'@;
put 'IDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEzLjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQg'@;
put 'WiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEg'@;
put 'MTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYz'@;
put 'IDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44'@;
put 'NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYg'@;
put 'TCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0'@;
put 'Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0'@;
put 'IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwg'@;
put 'MjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIu'@;
put 'Njg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEw'@;
put 'NSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEz'@;
put 'LjkwNSAxNS41MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAx'@;
put 'MS4yNSBMIDExLjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkg'@;
put 'MTUuNDg3IDkuMTAxIDE1LjggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYg'@;
put 'MjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIw'@;
put 'Ljk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3'@;
put 'NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVk'@;
put 'IiBkPSJNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTku'@;
put 'NDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwgMjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43'@;
put 'NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIuNjg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIv'@;
put 'PlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAy'@;
put 'Mi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41'@;
put 'NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAz'@;
put 'MC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4zNTcg'@;
put 'WiBNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEg'@;
put 'MTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYz'@;
put 'IDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIE0gMTUuMTc2IDI1LjUzNiBDIDE1LjQ4OCAyNS44'@;
put 'NDcgMTUuOTk0IDI1Ljg0NyAxNi4zMDYgMjUuNTM2IEwgMTcuNDY2IDI0LjM3NiBMIDE4LjYyNiAyNS41MzYgQyAxOS4wMzkgMjUuOTkyIDE5Ljc5MiAyNS44MyAxOS45OCAyNS4yNDMgQyAyMC4wNzcgMjQuOTQ0IDE5Ljk4OSAyNC42MTcgMTkuNzU2IDI0LjQwNiBMIDE4LjYwNiAyMy4yNzYg'@;
put 'TCAxOS43NjYgMjIuMTE2IEMgMjAuMjIyIDIxLjcwMiAyMC4wNiAyMC45NSAxOS40NzQgMjAuNzYxIEMgMTkuMTc1IDIwLjY2NSAxOC44NDcgMjAuNzUzIDE4LjYzNiAyMC45ODYgTCAxNy40NzYgMjIuMTQ2IEwgMTYuMzA2IDIwLjk1NiBDIDE1Ljg5MiAyMC40OTkgMTUuMTQgMjAuNjYyIDE0'@;
put 'Ljk1MiAyMS4yNDggQyAxNC44NTUgMjEuNTQ3IDE0Ljk0MyAyMS44NzUgMTUuMTc2IDIyLjA4NiBMIDE2LjMzNiAyMy4yNzYgTCAxNS4xNzYgMjQuNDA2IEMgMTQuODY0IDI0LjcxOCAxNC44NjQgMjUuMjIzIDE1LjE3NiAyNS41MzYgWiBNIDIyLjkxMiAyMC4zNDMgQyAyMy4yMjQgMjAuNjU0'@;
put 'IDIzLjczIDIwLjY1NCAyNC4wNDIgMjAuMzQzIEwgMjUuMjAyIDE5LjE4MyBMIDI2LjM2MiAyMC4zNDMgQyAyNi43NzUgMjAuNzk5IDI3LjUyOCAyMC42MzcgMjcuNzE2IDIwLjA1IEMgMjcuODEzIDE5Ljc1MSAyNy43MjUgMTkuNDI0IDI3LjQ5MiAxOS4yMTMgTCAyNi4zNDIgMTguMDgzIEwg'@;
put 'MjcuNTAyIDE2LjkyMyBDIDI3Ljk1OCAxNi41MDkgMjcuNzk2IDE1Ljc1NyAyNy4yMSAxNS41NjggQyAyNi45MTEgMTUuNDcyIDI2LjU4MyAxNS41NiAyNi4zNzIgMTUuNzkzIEwgMjUuMjEyIDE2Ljk1MyBMIDI0LjA0MiAxNS43NjMgQyAyMy42MjggMTUuMzA2IDIyLjg3NiAxNS40NjkgMjIu'@;
put 'Njg4IDE2LjA1NSBDIDIyLjU5MSAxNi4zNTQgMjIuNjc5IDE2LjY4MiAyMi45MTIgMTYuODkzIEwgMjQuMDcyIDE4LjA4MyBMIDIyLjkxMiAxOS4yMTMgQyAyMi42IDE5LjUyNSAyMi42IDIwLjAzIDIyLjkxMiAyMC4zNDMgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0'@;
put 'IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxu'@;
put 'ICA8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbGwtb3BhY2l0eT0iMCIvPicpLF8uQ2xyU2hhcGVUaWNrQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5'@;
put 'NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUgMzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIy'@;
put 'IEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'IiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYu'@;
put 'OTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAx'@;
put 'MyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3'@;
put 'IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAz'@;
put 'NCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTSA2IDI1IEwgOCAyNSBMIDggMjIgTCAxMCAyMiBMIDEwIDI1'@;
put 'IEwgMTMgMjUgTCAxMyAyMiBMIDE1IDIyIEwgMTUgMjUgTCAxOCAyNSBMIDE4IDIyIEwgMjAgMjIgTCAyMCAyNSBMIDIzIDI1IEwgMjMgMjIgTCAyNSAyMiBMIDI1IDI1IEwgMjcuNzIzIDI1IEMgMjguMDIzIDI1LjAyIDI4LjI5MyAyNS4xOCAyOC40NjMgMjUuNDMgQyAyOC45MDMgMjYuMDYg'@;
put 'MjguNDgzIDI2LjkzIDI3LjcyMyAyNi45OSBMIDYgMjYuOTkxIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1'@;
put 'IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4'@;
put 'LjI5MyAyNS4xOCAyOC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAy'@;
put 'NSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1'@;
put 'NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4'@;
put 'IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIyIEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEg'@;
put 'WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEg'@;
put 'QyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAy'@;
put 'OC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEg'@;
put 'MiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNi43OTUgMTMuNjAxIDE3LjU5NCAxNS4yNDUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTkuMjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzNCAxNS4z'@;
put 'NTcgWiBNIDYgMjYuOTkxIEwgMjcuNzIzIDI2Ljk5IEMgMjguNDgzIDI2LjkzIDI4LjkwMyAyNi4wNiAyOC40NjMgMjUuNDMgQyAyOC4yOTMgMjUuMTggMjguMDIzIDI1LjAyIDI3LjcyMyAyNSBMIDI1IDI1IEwgMjUgMjIgTCAyMyAyMiBMIDIzIDI1IEwgMjAgMjUgTCAyMCAyMiBMIDE4IDIy'@;
put 'IEwgMTggMjUgTCAxNSAyNSBMIDE1IDIyIEwgMTMgMjIgTCAxMyAyNSBMIDEwIDI1IEwgMTAgMjIgTCA4IDIyIEwgOCAyNSBMIDYgMjUgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJN'@;
put 'IDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAz'@;
put 'NC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLF8uQ2xyU2hhcGVCZWxsQ3VydmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0i'@;
put 'TTMzLDI5SDNBMSwxLDAsMSwxLDMsMjdIMzNBMSwxLDAsMSwxLDMzLDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI1aC0uNjJhOC4xMSw4LjExLDAsMCwxLTgtNi42N0MyMy42MiwxNC40NCwyMS44OSw3Ljk0LDE4LDcuOTRz'@;
put 'LTUuNjksNi41MS02LjM4LDEwLjM5YTguMTEsOC4xMSwwLDAsMS04LDYuNjVIM2ExLDEsMCwxLDEsMC0yaC42QTYuMTEsNi4xMSwwLDAsMCw5LjYsMThjMS40MS03Ljg4LDQuMy0xMiw4LjM1LTEyczYuOTMsNC4xNiw4LjMzLDEyYTYuMTEsNi4xMSwwLDAsMCw2LDVIMzNhMSwxLDAsMCwxLDAs'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLF8uQ2hhcnRTaGFwZXM9eyJheGlzLWNoYXJ0IjpfLkNsclNoYXBlQXhpc0NoYXJ0LCJiYXItY2hhcnQiOl8uQ2xyU2hhcGVCYXJDaGFydCwiYnViYmxlLWNoYXJ0IjpfLkNsclNoYXBlQnViYmxlQ2hh'@;
put 'cnQsImNsb3VkLWNoYXJ0IjpfLkNsclNoYXBlQ2xvdWRDaGFydCwiY3VydmUtY2hhcnQiOl8uQ2xyU2hhcGVDdXJ2ZUNoYXJ0LCJncmlkLWNoYXJ0IjpfLkNsclNoYXBlR3JpZENoYXJ0LCJsaW5lLWNoYXJ0IjpfLkNsclNoYXBlTGluZUNoYXJ0LCJwaWUtY2hhcnQiOl8uQ2xyU2hhcGVQaWVD'@;
put 'aGFydCwidGljay1jaGFydCI6Xy5DbHJTaGFwZVRpY2tDaGFydCwic2NhdHRlci1wbG90IjpfLkNsclNoYXBlU2NhdHRlclBsb3QsImJveC1wbG90IjpfLkNsclNoYXBlQm94UGxvdCwiaGVhdC1tYXAiOl8uQ2xyU2hhcGVIZWF0TWFwLCJiZWxsLWN1cnZlIjpfLkNsclNoYXBlQmVsbEN1cnZl'@;
put 'fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5DaGFydFNoYXBlcywiYW5hbHl0aWNzIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ2hhcnRTaGFwZXNbImxpbmUtY2hhcnQiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5k'@;
put 'b3cuQ2xhcml0eUljb25zLmFkZChfLkNoYXJ0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb21tZXJjZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAg'@;
put 'ISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu'@;
put 'Y3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5Db21tZXJjZVNoYXBlcz1fLkNsclNoYXBlRmFjdG9yeT1fLkNsclNoYXBlRW1wbG95ZWU9Xy5DbHJTaGFwZUVtcGxveWVlR3JvdXA9Xy5DbHJTaGFwZVJ1'@;
put 'YmxlPV8uQ2xyU2hhcGVQZXNvPV8uQ2xyU2hhcGVDb2luQmFnPV8uQ2xyU2hhcGVCaXRjb2luPV8uQ2xyU2hhcGVZZW49Xy5DbHJTaGFwZVdvbj1fLkNsclNoYXBlUnVwZWU9Xy5DbHJTaGFwZVBvdW5kPV8uQ2xyU2hhcGVFQ2hlY2s9Xy5DbHJTaGFwZURvbGxhckJpbGw9Xy5DbHJTaGFwZUJh'@;
put 'bms9Xy5DbHJTaGFwZUNyZWRpdENhcmQ9Xy5DbHJTaGFwZURvbGxhcj1fLkNsclNoYXBlRXVybz1fLkNsclNoYXBlU3RvcmU9Xy5DbHJTaGFwZVdhbGxldD1fLkNsclNoYXBlU2hvcHBpbmdDYXJ0PV8uQ2xyU2hhcGVQaWdneUJhbms9Xy5DbHJTaGFwZVNob3BwaW5nQmFnPV8uQ2xyU2hhcGVD'@;
put 'YWxjdWxhdG9yPXZvaWQgMDt2YXIgeT1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksZz1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNv'@;
put 'bnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Xy5DbHJTaGFwZUNhbGN1bGF0b3I9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy'@;
put 'SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNOCwzMlY0SDI4VjMyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiw4SDI1LjY3VjZIMTFhMSwxLDAsMCwwLTEsMXY0LjY3aDJaIi8+XG4gICAg'@;
put 'ICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMiAxNiAxMCAxNiAxMCAxOCAxNCAxOCAxNCAxNCAxMiAxNCAxMiAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQiIHBvaW50cz0iMjQgMTYgMjIgMTYgMjIgMTggMjYgMTggMjYgMTQgMjQgMTQgMjQgMTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBwb2ludHM9IjE4IDE2IDE2IDE2IDE2IDE4IDIwIDE4IDIw'@;
put 'IDE0IDE4IDE0IDE4IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgcG9pbnRzPSIxMiAyMiAxMCAyMiAxMCAyNCAxNCAyNCAxNCAyMCAxMiAyMCAxMiAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHBvaW50cz0iMjQgMjIgMjIgMjIgMjIgMjQgMjYgMjQgMjYgMjAgMjQgMjAgMjQgMjIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiBwb2ludHM9IjE4'@;
put 'IDIyIDE2IDIyIDE2IDI0IDIwIDI0IDIwIDIwIDE4IDIwIDE4IDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgcG9pbnRzPSIxMiAyOCAxMCAyOCAxMCAzMCAxNCAzMCAxNCAyNiAxMiAyNiAxMiAyOCIvPlxuICAg'@;
put 'ICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiBwb2ludHM9IjI0IDI4IDIyIDI4IDIyIDMwIDI2IDMwIDI2IDI2IDI0IDI2IDI0IDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMTEiIHBvaW50cz0iMTggMjggMTYgMjggMTYgMzAgMjAgMzAgMjAgMjYgMTggMjYgMTggMjgiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAs'@;
put 'MiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNMTIsMjhIMTBWMjZoMlptMC02SDEwVjIwaDJabTAtNkgxMFYxNGgyWm03LDEySDE3VjI2aDJabTAtNkgxN1YyMGgyWm0wLTZIMTdWMTRoMlptNywxMkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptMC02SDI0VjE0aDJabTAtN0gx'@;
put 'MFY1SDI2WiIvPicpLF8uQ2xyU2hhcGVTaG9wcGluZ0JhZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LDEyVjkuMDVhNyw3LDAsMSwwLTE0LDB2N2ExLDEsMCwwLDAsMiwwVjE0aDhWMTJIMTNWOS4wNWE1'@;
put 'LDUsMCwxLDEsMTAsMFYxNmExLDEsMCwxLDAsMiwwVjE0aDVWMzJINlYxNEg5VjEySDRWMzIuMDlBMS45MSwxLjkxLDAsMCwwLDUuOTEsMzRIMzAuMDlBMS45MSwxLjkxLDAsMCwwLDMyLDMyLjA5VjEyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgZD0iTTEzLDkuMjJhNSw1LDAsMSwxLDEwLDBWMTJoMlY5LjIyYTcsNywwLDEsMC0xNCwwVjEyaDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjUsMTJ2My4xYTEsMSwwLDEsMS0yLDBWMTJIMTN2'@;
put 'My4xYTEsMSwwLDAsMS0yLDBWMTJINFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJaIi8+JyksXy5DbHJTaGFwZVBpZ2d5QmFuaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjcyLDEw'@;
put 'LjQ3YTExLjY1LDExLjY1LDAsMCwwLTYuMzEuNTJBLjguOCwwLDEsMCwxNCwxMi40OCwxMC4xMSwxMC4xMSwwLDAsMSwxOS40NCwxMmEuOC44LDAsMSwwLC4yOC0xLjU3WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIg'@;
put 'Y3g9IjI1LjM4IiBjeT0iMTYuNzEiIHI9IjEuMzYiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzUuNTEsMTguNjNhMSwxLDAsMCwwLS44NC0uNDQsMy40MiwzLjQyLDAsMCwxLTIuMDktMS4xMiwxNy4zNSwxNy4z'@;
put 'NSwwLDAsMS0yLjYzLTMuNzhsMi44OC00LjVBMS44OSwxLjg5LDAsMCwwLDMzLDdhMS43NywxLjc3LDAsMCwwLTEuMzMtMSwxMC4xMiwxMC4xMiwwLDAsMC01LjM5Ljc1LDEyLjcyLDEyLjcyLDAsMCwwLTIuNzIsMS42MywxNi45NCwxNi45NCwwLDAsMC01LjE2LTEuMzlDMTEuMzEsNi4zLDQu'@;
put 'ODMsMTAuOSw0LDE3SDRhMi41NiwyLjU2LDAsMCwxLTEuMzgtMS41MywxLjgxLDEuODEsMCwwLDEsLjE0LTEuNCwxLjE5LDEuMTksMCwwLDEsLjQzLS40MywxLjA4LDEuMDgsMCwwLDAtMS4xMi0xLjg1QTMuMzEsMy4zMSwwLDAsMCwuOTEsMTNhNCw0LDAsMCwwLS4zMywzLjA4QTQuNzYsNC43'@;
put 'NiwwLDAsMCwzLDE4Ljk1bC45Mi40NmExNy41OCwxNy41OCwwLDAsMCwxLjgyLDdsLjE3LjM4QTIzLDIzLDAsMCwwLDkuMiwzMS44OGExLDEsMCwwLDAsLjc1LjM0aDQuNTJhMSwxLDAsMCwwLC45Mi0xLjM4TDE1LDI5Ljk0bDEuMTguMTNhMjAuMzMsMjAuMzMsMCwwLDAsNCwwYy4zNy42Ljc3'@;
put 'LDEuMiwxLjIxLDEuNzlhMSwxLDAsMCwwLC44LjQxaDQuMzRhMSwxLDAsMCwwLC45Mi0xLjM5Yy0uMTctLjQtLjM0LS44My0uNDctMS4yLS4xOC0uNTMtLjMyLTEtLjQzLTEuNDVBMTMuMTgsMTMuMTgsMCwwLDAsMjkuNTYsMjZhMTIuNSwxMi41LDAsMCwwLDMsMCwxLDEsMCwwLDAsLjc4LS42'@;
put 'MmwyLjI2LTUuODFBMSwxLDAsMCwwLDM1LjUxLDE4LjYzWm0tMy43OCw1LjQ0YTExLjM3LDExLjM3LDAsMCwxLTIuMzUtLjExaDBhOC4yLDguMiwwLDAsMS0yLjUzLS44NywxLDEsMCwwLDAtLjkzLDEuNzcsMTEuNzIsMTEuNzIsMCwwLDAsMS4yOS41OCw4LDgsMCwwLDEtMS44LDEuMTZsLTEu'@;
put 'MDYuNDhzLjQ5LDIuMTkuODIsMy4xNkgyMi43OWMtLjI0LS4zNC0xLjQ1LTIuMzYtMS40NS0yLjM2bC0uNjcuMDlhMTguNTMsMTguNTMsMCwwLDEtNC4yNS4xMmMtLjY2LS4wNi0xLjc2LS4yLTIuNjItLjM1bC0xLjU1LS4yN3MuNjMsMi40My43NSwyLjc0djBIMTAuNDJBMjAuNTcsMjAuNTcs'@;
put 'MCwwLDEsNy43NiwyNmwtLjE4LS4zOUExNC42MiwxNC42MiwwLDAsMSw2LDE3LjQ4Yy41NC01LjE5LDYuMTItOS4xMSwxMi4xOS04LjU0YTE1LjQ3LDE1LjQ3LDAsMCwxLDUuMDgsMS40OGwuNjIuMjkuNS0uNDdBMTAuMjksMTAuMjksMCwwLDEsMjcsOC41NGE4LjI1LDguMjUsMCwwLDEsNC0u'@;
put 'NjVsLTMuMzgsNS4yOS4yNS41aDBhMjEuMTYsMjEuMTYsMCwwLDAsMy4zMSw0Ljg0LDYuNDksNi40OSwwLDAsMCwyLjE0LDEuMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUsMTguODdBNS44Myw1LjgzLDAsMCwx'@;
put 'LDMzLDE3LjYxYTIxLjYzLDIxLjYzLDAsMCwxLTMuMjktNC44NGwzLjM5LTUuMjlhLjkuOSwwLDAsMC0uNTQtMS4zOCw5LjY3LDkuNjcsMCwwLDAtNS4xMy43MiwxMiwxMiwwLDAsMC0zLjEzLDJBMTcuMzcsMTcuMzcsMCwwLDAsMTguNiw3LjE1QzExLjgsNi41Miw1LjI3LDEwLjksNC41NCwx'@;
put 'N2wtLjE0LS4wN0EyLjc2LDIuNzYsMCwwLDEsMi45LDE1LjI5YTIsMiwwLDAsMSwuMTUtMS41NSwxLjMyLDEuMzIsMCwwLDEsLjQ3LS40OCwxLjA4LDEuMDgsMCwxLDAtMS4xMi0xLjg1LDMuNDUsMy40NSwwLDAsMC0xLjIzLDEuMjVBNC4xNiw0LjE2LDAsMCwwLC44NCwxNS45YTUsNSwwLDAs'@;
put 'MCwyLjU3LDNsMSwuNTRhMTguNjIsMTguNjIsMCwwLDAsMiw3LjMsMjMsMjMsMCwwLDAsMyw0Ljc5LDEsMSwwLDAsMCwuOC4zOGgzLjYxYS41Mi41MiwwLDAsMCwuNC0uNzVMMTQsMzAuMzhhMTEsMTEsMCwwLDEtLjMzLTEuMThjLjkxLjE2LDIuMDguMzEsMi44Ny4zOGEyMC4wNywyMC4wNyww'@;
put 'LDAsMCwzLjEyLDBjLjM5LjcuNzksMS4zMywxLjE1LDEuODVhLjkzLjkzLDAsMCwwLC43Ny40MWgzLjExYS42NS42NSwwLDAsMCwuNjEtLjg1Yy0uMjMtLjc0LS41My0xLjc1LS43MS0yLjM3YTE1LjksMTUuOSwwLDAsMCwzLjc1LTEuNzZjLjE2LS4xMS4zMi0uMjYuNDgtLjM5YTEzLjc3LDEz'@;
put 'Ljc3LDAsMCwxLTIuNDItMSwuOC44LDAsMCwxLC43NC0xLjQyLDExLjY0LDExLjY0LDAsMCwwLDMuMTgsMS4xLDEzLjMxLDEzLjMxLDAsMCwwLDIuNjguMTIsMSwxLDAsMCwwLC45LS42NmwxLjczLTQuNDRBMSwxLDAsMCwwLDM1LDE4Ljg3Wk0xMy43OSwxMS41OWEuODYuODYsMCwwLDEtLjMu'@;
put 'MDUuODUuODUsMCwwLDEtLjMtMS42NCwxMi40MSwxMi40MSwwLDAsMSw2LjY5LS41NS44NS44NSwwLDEsMS0uMywxLjY3QTEwLjc1LDEwLjc1LDAsMCwwLDEzLjc5LDExLjU5Wm0xMi41Miw2LjEyYTEuNDQsMS40NCwwLDEsMSwxLjQ0LTEuNDRBMS40NCwxLjQ0LDAsMCwxLDI2LjMyLDE3Ljcy'@;
put 'WiIvPicpLF8uQ2xyU2hhcGVTaG9wcGluZ0NhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9'@;
put 'IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4wOCw1LjM3QTEsMSwwLDAsMCwzMi4zMSw1SDExLjQ5bC42NSwySDMxTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42'@;
put 'Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0y'@;
put 'SDI5LjEzYTEsMSwwLDAsMCwxLS43OGwzLjE3LTE0QTEsMSwwLDAsMCwzMy4wOCw1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0iMjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMC43MSA3IDIxLjg3IDUgMTEuNDkgNSAxMi4xNCA3IDIwLjcxIDciIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjE1LDE1'@;
put 'LjQsMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0LjVMOS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCww'@;
put 'LDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDEuMDktNC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1'@;
put 'LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjci'@;
put 'IGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjU3LDdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUgxMS40OWwu'@;
put 'NjUsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41bC0uNDIsMEwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42MmExLDEsMCwxLDAt'@;
put 'LjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0uNzhs'@;
put 'MS41Ny02LjkxQTcuNTEsNy41MSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMSw2LjM5QTEsMSwwLDAsMCwzMi4zMSw2SDkuMjFMOC43Niw0LjU3YTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwx'@;
put 'LDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEt'@;
put 'Ljc2bDMuMi0xM0ExLDEsMCwwLDAsMzMuMSw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42'@;
put 'OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAs'@;
put 'MTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjE5LTQuODRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0u'@;
put 'NjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgy'@;
put 'OS4xMmExLDEsMCwwLDAsMS0uNzZsMS43MS03QTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxfLkNsclNoYXBlV2FsbGV0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTVIMzFWOWExLDEs'@;
put 'MCwwLDAtMS0xSDZhMSwxLDAsMCwxLTEtLjgyVjYuODJBMSwxLDAsMCwxLDYsNkgyOS41OGExLDEsMCwwLDAsMC0ySDZBMywzLDAsMCwwLDMsN2EzLjA4LDMuMDgsMCwwLDAsMCwuMzZWMjcuOTNBNC4xLDQuMSwwLDAsMCw3LjEzLDMySDMwYTEsMSwwLDAsMCwxLTFWMjVoMWExLDEsMCwwLDAs'@;
put 'MS0xVjE2QTEsMSwwLDAsMCwzMiwxNVpNMjksMzBINy4xM0EyLjExLDIuMTEsMCwwLDEsNSwyNy45M1Y5Ljg4QTMuMTEsMy4xMSwwLDAsMCw2LDEwSDI5djVIMjJhNSw1LDAsMCwwLDAsMTBoN1ptMi03SDIyYTMsMywwLDAsMSwwLTZIMzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjMuMDEiIGN5PSIyMCIgcj0iMS41Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuOTQsMTRIMzFWOWExLDEsMCwwLDAtMS0xSDZBMSwxLDAs'@;
put 'MCwxLDUsN0g1VjdBMSwxLDAsMCwxLDYsNkgyOS42YTEsMSwwLDEsMCwwLTJINkEyLjk0LDIuOTQsMCwwLDAsMyw2Ljg4djIxQTQuMTMsNC4xMywwLDAsMCw3LjE1LDMySDMwYTEsMSwwLDAsMCwxLTFWMjZoMS45NGEuOTMuOTMsMCwwLDAsMS0uOTF2LTEwQTEuMDgsMS4wOCwwLDAsMCwzMi45'@;
put 'NCwxNFpNMzIsMjRsLTguNTgsMGEzLjg3LDMuODcsMCwwLDEtMy43My00LDMuODcsMy44NywwLDAsMSwzLjczLTRMMzIsMTZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIyNC4wNCIgY3k9IjE5LjkyIiByPSIxLjUi'@;
put 'Lz4nKSxfLkNsclNoYXBlU3RvcmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIsNEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCww'@;
put 'LDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0'@;
put 'LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMzAsMTguMTNBMi42OCwyLjY4LDAsMCwxLDI3LjgyLDE3TDI3LDE1Ljg4LDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODgsMjAuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwxNSwxNS44OCwxNC4xOSwxN2EyLjcx'@;
put 'LDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODgsOC4xOCwxN0EyLjY4LDIuNjgsMCwwLDEsNiwxOC4xM2EyLjY0LDIuNjQsMCwwLDEtMi0uODhWMTQuMTdMOC4wOCw2SDI3LjkyTDMyLDE0LjE2di42N2wwLDIuMzlBMi42NywyLjY3LDAsMCwxLDMwLDE4LjEzWiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4yOSw1LjExTDIuMjEsMTMuMjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42NywwLDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAs'@;
put 'MCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Miw0LjcyLDAsMCwwLDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMuMjdaTTE1LDE0LjR2MS41MkwxNC4xOCwxN2Ey'@;
put 'LjcxLDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODhWMTQuNEwxMS41OSw2SDE2Wm0xMiwxLjQ4TDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODhsMCwwVjE0LjRMMjAsNmg0LjQ1TDI3LDE0LjRaIi8+JyksXy5DbHJTaGFwZUV1cm89KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40OCwyOC40OWExLDEsMCwwLDAtMS4zOC0uMzJBMTIsMTIsMCwwLDEsMTIuNDUsMjJIMjQuMTZhMSwxLDAsMCwwLDAtMkgxMS45M2ExMS4xNiwxMS4xNiwwLDAsMSwwLTRIMjQuMTZhMSwxLDAsMCww'@;
put 'LDAtMkgxMi40NUExMiwxMiwwLDAsMSwzMC4wNiw3LjhhMSwxLDAsMCwwLDEuMDYtMS43QTE0LDE0LDAsMCwwLDEwLjM0LDE0SDMuNTRhMSwxLDAsMSwwLDAsMkg5LjkxYTE0LDE0LDAsMCwwLS4xNiwyLDE0LDE0LDAsMCwwLC4xNiwySDMuNTRhMSwxLDAsMSwwLDAsMmg2LjhhMTQsMTQsMCww'@;
put 'LDAsMjAuODMsNy44N0ExLDEsMCwwLDAsMzEuNDgsMjguNDlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjQyLDI1LjE2QTEwLjg4LDEwLjg4'@;
put 'LDAsMCwxLDkuMjMsMjFINS44NGExLDEsMCwwLDEsMC0yaDNjMC0uMzUtLjA1LS43MS0uMDUtMS4wN3MwLS42MywwLS45M2gtM2ExLDEsMCwwLDEsMC0ySDkuMTlBMTAuODYsMTAuODYsMCwwLDEsMjUuMzgsOC42OWExLjI1LDEuMjUsMCwwLDEtMS4zMiwyLjEyQTguMzYsOC4zNiwwLDAsMCwx'@;
put 'MS44MiwxNWg5LjM2YTEsMSwwLDAsMSwwLDJIMTEuMzNhNy43Miw3LjcyLDAsMCwwLDAsMmg5LjgyYTEsMSwwLDAsMSwwLDJIMTEuODdhOC4zNiw4LjM2LDAsMCwwLDEyLjIyLDQsMS4yNSwxLjI1LDAsMSwxLDEuMzMsMi4xMloiLz4nKSxfLkNsclNoYXBlRG9sbGFyPSgwLGcuY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMjEuMTVhNi45MSw2LjkxLDAsMCwwLTQuMzgtMy4zMkEyNiwyNiwwLDAsMCwxOSwxNy4xOVY4LjEyQTEwLjA1LDEwLjA1LDAsMCwxLDIzLjg2LDEwYTEsMSwwLDAsMCwxLjMzLTEuNUEx'@;
put 'MS43NSwxMS43NSwwLDAsMCwxOSw2LjFWM2ExLDEsMCwwLDAtMiwwVjZjLTQuNC4xLTYuODMsMi4yOS03LjU3LDQuMThBNS41Niw1LjU2LDAsMCwwLDExLjY2LDE3LDEzLjIsMTMuMiwwLDAsMCwxNywxOC44NFYyOGExMi4zLDEyLjMsMCwwLDEtNy4xNC0yLjc0QTEsMSwwLDEsMCw4LjQ5LDI2'@;
put 'LjcsMTQuMDksMTQuMDksMCwwLDAsMTcsMzB2M2ExLDEsMCwwLDAsMiwwVjMwYzIuODItLjE5LDYuMDctMS4wOSw3LjMtNC43NkE1LjMzLDUuMzMsMCwwLDAsMjYsMjEuMTVaTTEyLjc5LDE1LjMyYTMuNTcsMy41NywwLDAsMS0xLjQ5LTQuMzlDMTEuNDEsMTAuNjMsMTIuNTMsOC4xMiwxNyw4'@;
put 'djguOEExMC43LDEwLjcsMCwwLDEsMTIuNzksMTUuMzJaTTI0LjQsMjQuNTZjLS43MiwyLjE0LTIuMzIsMy4xNy01LjQsMy40VjE5LjIzYy42NC4xNCwxLjMuMywyLC41MWE1LDUsMCwwLDEsMy4xOSwyLjMyQTMuMzQsMy4zNCwwLDAsMSwyNC40LDI0LjU2WiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjY1LDIxLjU5Yy0xLDMtMy42MSwzLjg0LTUuOSw0djJhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI3LjU5'@;
put 'QTExLjQ3LDExLjQ3LDAsMCwxLDExLDI1YTEuMjUsMS4yNSwwLDEsMSwxLjcxLTEuODMsOS4xMSw5LjExLDAsMCwwLDQuNTUsMS45NFYxOC44M2E5LjYzLDkuNjMsMCwwLDEtMy43My0xLjQxLDQuOCw0LjgsMCwwLDEtMS45MS01Ljg0Yy41OS0xLjUxLDIuNDItMy4yMyw1LjY0LTMuNTFWNi4y'@;
put 'NWExLjI1LDEuMjUsMCwwLDEsMi41LDBWOC4xMWE5LjY3LDkuNjcsMCwwLDEsNC45LDJBMS4yNSwxLjI1LDAsMCwxLDIzLDExLjk1YTcuMTQsNy4xNCwwLDAsMC0zLjI0LTEuMzF2Ni4xM2MuNi4xMywxLjI0LjI3LDEuOTEuNDhhNS44NSw1Ljg1LDAsMCwxLDMuNjksMi44MkE0LjY0LDQuNjQs'@;
put 'MCwwLDEsMjUuNjUsMjMuNTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuOTIsMTkuNjRjLS40LS4xMi0uNzktLjIyLTEuMTctLjN2NS43NmMyLS4yLDMuMDctLjksMy41My0yLjNhMi4xNSwyLjE1LDAsMCwwLS4x'@;
put 'NS0xLjU4QTMuNDksMy40OSwwLDAsMCwyMC45MiwxOS42NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMy45NCwxMi40OGEyLjMxLDIuMzEsMCwwLDAsMSwyLjg3LDYuNTMsNi41MywwLDAsMCwyLjMyLjkyVjEwLjU1'@;
put 'QzE1LjE2LDEwLjgsMTQuMTksMTEuODQsMTMuOTQsMTIuNDhaIi8+JyksXy5DbHJTaGFwZUNyZWRpdENhcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0w'@;
put 'LDIsMCwxMkg0TDQsOFpNNCwyOFYyNEgzMnY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIzIiB3aWR0aD0iMjIiIGhlaWdodD0iMzAiIHJ4PSIwLjk2IiByeT0iMC45NiIgdHJhbnNmb3JtPSJ0cmFu'@;
put 'c2xhdGUoMzYpIHJvdGF0ZSg5MCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIs'@;
put 'MCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDE4SDRWMjBIMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVCYW5rPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0z'@;
put 'LjUsMTMuNTYsMTgsNS4yM2wxNC41LDguMzNhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwx'@;
put 'LDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNS4wMiIgeT0iMTQiIHdp'@;
put 'ZHRoPSIyNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBWMTcuNjNIOFYyNUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgz'@;
put 'M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMTUsMTEuNThoMy4yMUwxOC42NSw3LjcyYS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45'@;
put 'LTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIyLjc3'@;
put 'LDhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjk0LDEzLjI0bC41Ni4zMmExLDEsMCwwLDAsMS40NC0xLjE5QTcuNDUsNy40NSwwLDAs'@;
put 'MSwzMS45NCwxMy4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFs'@;
put 'ZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDE1QTMuNTEsMy41MSwwLDAsMSwyMCwxNEg1djJIMzFWMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQ2'@;
put 'LDkuNzRsLjY4LTEuMTctMS40OS0uODVhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNCwxLjEuNjNDMTkuMzksOS44OSwxOS40Miw5LjgxLDE5LjQ2LDkuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl'@;
put 'ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjA1LDUuMjUsMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIxLjA1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjUsMTMuNTYsNSwxMi42OFYxNkgzMVYxMi43MWwxLjQ4Ljg1YTEsMSwwLDAsMCwxLTEuNzNMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M1pNMTcuODUsNy4xMWEu'@;
put 'OC44LDAsMCwxLC44LDBMMjUuMzcsMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4'@;
put 'VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUsMS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwyN0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgyOFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUEx'@;
put 'LjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCwwLDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40Nyw3LjQ3LDAsMCwx'@;
put 'LDI0LjM5LDExSDIyLjE1bC0zLjktMi4yNEwxNC4zNSwxMUgxMS4xNGw2LjcyLTMuODZhLjguOCwwLDAsMSwuOCwwbDUsMi44N0E3LjQ1LDcuNDUsMCwwLDEsMjIuNSw2YzAtLjE2LDAtLjMyLDAtLjQ4TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYx'@;
put 'My40MkE3LjUzLDcuNTMsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwx'@;
put 'LDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFk'@;
put 'Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVIMjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEuMTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVB'@;
put 'MS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVhMy41MSwzLjUxLDAs'@;
put 'MCwxLTMtNS4yNmwuMTQtLjI0LTEuMzUtLjc4TDE0LjM1LDExSDExLjE0bDYuNzItMy44NmEuOC44LDAsMCwxLC44LDBsMS43NSwxLDEuNjUtMi44NkwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDUsMTIuNjhWMTZIMzFWMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1'@;
put 'LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksXy5DbHJTaGFwZURvbGxhckJpbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsNmE0LjI1LDQuMjUsMCwwLDEtMy45LTRIMzJabTAsMS42MnY0LjgzQTUuODcsNS44NywwLDAsMCwyNi40OSwyNmgtMTdBNS44Nyw1Ljg3LDAs'@;
put 'MCwwLDQsMjAuNDRWMTUuNkE1Ljg3LDUuODcsMCwwLDAsOS41MSwxMGgxN0E1Ljg3LDUuODcsMCwwLDAsMzIsMTUuNlpNNy45LDEwQTQuMjUsNC4yNSwwLDAsMSw0LDE0VjEwWk00LDIyLjA2QTQuMjUsNC4yNSwwLDAsMSw3LjksMjZINFpNMjguMSwyNkE0LjI1LDQuMjUsMCwwLDEsMzIsMjIu'@;
put 'MDZWMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDEwLjg1Yy0zLjQ3LDAtNi4zLDMuMjEtNi4zLDcuMTVzMi44Myw3LjE1LDYuMyw3LjE1LDYuMy0zLjIxLDYuMy03LjE1UzIxLjQ3LDEwLjg1LDE4LDEw'@;
put 'Ljg1Wm0wLDEyLjY5Yy0yLjU5LDAtNC43LTIuNDktNC43LTUuNTVzMi4xMS01LjU1LDQuNy01LjU1LDQuNywyLjQ5LDQuNyw1LjU1UzIwLjU5LDIzLjU1LDE4LDIzLjU1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMy'@;
put 'LDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNCwyNlYyMS4xNUE1LjE4LDUuMTgsMCwwLDEsOC43OSwyNlpNNCwxNC44NVYxMEg4Ljc5QTUuMTgsNS4xOCwwLDAsMSw0LDE0Ljg1Wk0xOCwyNS4xNWMtMy40Nyww'@;
put 'LTYuMy0zLjIxLTYuMy03LjE1czIuODMtNy4xNSw2LjMtNy4xNSw2LjMsMy4yMSw2LjMsNy4xNVMyMS40NywyNS4xNSwxOCwyNS4xNVpNMzIsMjZIMjcuMjVBNS4xOCw1LjE4LDAsMCwxLDMyLDIxLjE1Wm0wLTExLjE1QTUuMTgsNS4xOCwwLDAsMSwyNy4yNSwxMEgzMloiLz5cbiAgICAgICAg'@;
put 'ICAgIDxlbGxpcHNlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjE4IiByeD0iNCIgcnk9IjQuNzIiLz4nKSxfLkNsclNoYXBlRUNoZWNrPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjAiIHk9IjIxIiB3aWR0aD0iMTEiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNCw4SDEyLjkzYTguMzUsOC4zNSwwLDAsMSwuNzksMkgzM1YyNkgzVjE5LjlhNy44Myw3LjgzLDAsMCwxLTItMS4zNFYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQs'@;
put 'OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNNi41NywxOC42OGE2LjE3LDYuMTcsMCwwLDAsNC4zMi0xLjU5LDEuMiwxLjIsMCwwLDAsLjM2LS44NCwxLjA4LDEuMDgsMCwwLDAtMS4wOS0xLjExLDEsMSwwLDAs'@;
put 'MC0uNzEuMjUsNC4zMiw0LjMyLDAsMCwxLTIuODQsMSwzLjM1LDMuMzUsMCwwLDEtMy40Ni0zaDcuNTNBMS4yOSwxLjI5LDAsMCwwLDEyLDEyLjA2LDUuNjgsNS42OCwwLDAsMCw2LjI3LDYuMTQsNiw2LDAsMCwwLC40LDEyLjR2MEE2LDYsMCwwLDAsNi41NywxOC42OFpNNi4yNSw4LjM5YzEu'@;
put 'ODIsMCwyLjg3LDEuMzksMywzLjE2SDMuMTNDMy4zOCw5LjY5LDQuNTYsOC4zOSw2LjI1LDguMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsOEgxMi45MWE4LjYxLDguNjEsMCwwLDEsMS4yLDQuMzksOCw4LDAs'@;
put 'MCwxLTcuNzgsOC4yN0E3LjUxLDcuNTEsMCwwLDEsMSwxOC40MVYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQsOFpNMzEsMjNIMjBWMjFIMzFabTAtNUgxNlYxNkgzMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIGQ9Ik02LjU3LDE4LjY4QTYsNiwwLDAsMSwuNCwxMi40NHYwQTYsNiwwLDAsMSw2LjI3LDYuMTQsNS42OCw1LjY4LDAsMCwxLDEyLDEyLjA2YTEuMjksMS4yOSwwLDAsMS0xLjMsMS4zMkgzLjE1YTMuMzUsMy4zNSwwLDAsMCwzLjQ2LDMsNC4zMiw0LjMyLDAsMCww'@;
put 'LDIuODQtMSwxLDEsMCwwLDEsLjcxLS4yNSwxLjA4LDEuMDgsMCwwLDEsMS4wOSwxLjExLDEuMiwxLjIsMCwwLDEtLjM2Ljg0QTYuMTcsNi4xNywwLDAsMSw2LjU3LDE4LjY4Wk05LjMsMTEuNTVjLS4xOC0xLjc3LTEuMjMtMy4xNi0zLTMuMTZzLTIuODcsMS4zLTMuMTIsMy4xNloiLz4nKSxf'@;
put 'LkNsclNoYXBlUG91bmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy45LDMwSDEzLjRBOC40NSw4LjQ1LDAsMCwwLDE1LDI0LjY1VjIxaDQuMzFhMSwxLDAsMCwwLDAtMkgxNVYxMS4zMUE1LjI0LDUuMjQs'@;
put 'MCwwLDEsMjAuMjEsNiw1LjE5LDUuMTksMCwwLDEsMjQsNy43M2ExLDEsMCwwLDAsMS40OC0xLjM1QTcuMTksNy4xOSwwLDAsMCwxMywxMS4zMVYxOUg4LjcyYTEsMSwwLDEsMCwwLDJIMTN2My42NUMxMywyOS4zOCwxMC4xMiwzMCwxMCwzMGExLDEsMCwwLDAsLjE3LDJIMjcuOWExLDEsMCwx'@;
put 'LDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNi41LDI1LjkySDExLjc0YTEuMjUsMS4yNSwwLDAsMS0uMjItMi40OGMuMTUsMCwxLjcy'@;
put 'LS40OSwxLjcyLTMuNTRWMTloLTIuNWExLDEsMCwwLDEsMC0yaDIuNVYxMS44OGE1Ljg1LDUuODUsMCwwLDEsNS43Mi02LDUuNjMsNS42MywwLDAsMSw0LjIxLDEuOTRBMS4yNSwxLjI1LDAsMSwxLDIxLjMsOS41MSwzLjA4LDMuMDgsMCwwLDAsMTksOC40MmEzLjM1LDMuMzUsMCwwLDAtMy4y'@;
put 'MiwzLjQ2VjE3aDNhMSwxLDAsMCwxLDAsMmgtM3YyLjlBNy42NSw3LjY1LDAsMCwxLDE1LDI1LjQySDI0LjVhMS4yNSwxLjI1LDAsMCwxLDAsMi41WiIvPicpLF8uQ2xyU2hhcGVSdXBlZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgZD0iTTI4LDhIMjQuMTRBNy41Miw3LjUyLDAsMCwwLDIyLjYsNkgyOGExLDEsMCwwLDAsMC0ySDEwYTEsMSwwLDAsMCwwLDJoNy41NWE1LjQyLDUuNDIsMCwwLDEsNC4yLDJIMTBhMSwxLDAsMCwwLDAsMkgyMi43OUE1LjU0LDUuNTQsMCwwLDEsMjMsMTEuNTEsNS40OCw1LjQ4'@;
put 'LDAsMCwxLDE3LjU1LDE3SDExLjE0YTEsMSwwLDAsMC0uNzUsMS42NkwyMi4wNiwzMmExLDEsMCwxLDAsMS41LTEuMzJMMTMuMzUsMTloNC4yMWE3LjUxLDcuNTEsMCwwLDAsNy4zLTlIMjhhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTUuODgsOUgyNmExLDEsMCwwLDEsMCwySDI0LjI2YzAsLjA2LDAsLjEyLDAsLjE5YTYuMDksNi4wOSwwLDAsMS02LDYuMmgtMmw2LjgyLDguMDZhMS4yNSwxLjI1LDAsMCwxLTEu'@;
put 'OTEsMS42MkwxMi42MywxOC45NGExLjI1LDEuMjUsMCwwLDEsMS0yLjA2aDQuNzFhMy41OSwzLjU5LDAsMCwwLDMuNDgtMy42OWMwLS4wNywwLS4xMywwLS4yaC05YTEsMSwwLDAsMSwwLTJoOC4zMmEzLjQxLDMuNDEsMCwwLDAtMi43OC0xLjVIMTIuNzVhMS4yNSwxLjI1LDAsMCwxLDAtMi41'@;
put 'SDI2YTEsMSwwLDAsMSwwLDJIMjIuNjhBNi4yMyw2LjIzLDAsMCwxLDIzLjg4LDExWiIvPicpLF8uQ2xyU2hhcGVXb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywxOEgyOC43NWwuNS0ySDMzYTEsMSww'@;
put 'LDAsMCwwLTJIMjkuNzRsMi4xNy04Ljc2QTEsMSwwLDAsMCwzMCw0Ljc2TDI3LjY4LDE0SDIxLjMxTDE5LDQuNzZhMSwxLDAsMCwwLTEuOTQsMEwxNC43OSwxNEg4LjQyTDYuMTMsNC43NmExLDEsMCwwLDAtMS45NC40OEw2LjM2LDE0SDNhMSwxLDAsMCwwLDAsMkg2Ljg1bC41LDJIM2ExLDEs'@;
put 'MCwwLDAsMCwySDcuODRsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDE1LjM2LDIwaDUuMzhsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDI4LjI1LDIwSDMzYTEsMSwwLDAsMCwwLTJabS01LjgyLTItLjUsMkgyMi4zbC0uNS0yWk0xOCw5LjE2LDE5LjI1LDE0aC0yLjRaTTguOTEs'@;
put 'MTZoNS4zOGwtLjUsMkg5LjQxWk0xMS42LDI2Ljg0LDkuOTEsMjBIMTMuM1pNMTUuODUsMThsLjUtMmgzLjM5bC41LDJabTguNjQsOC44NEwyMi44LDIwaDMuMzlaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBwb2ludHM9'@;
put 'IjE3Ljc0IDE2IDE3LjIyIDE4IDE4Ljg1IDE4IDE4LjMyIDE2IDE3Ljc0IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBwb2ludHM9IjExLjk0IDE4IDE0LjYzIDE4IDE1LjE2IDE2IDExLjQxIDE2IDExLjk0IDE4Ii8+'@;
put 'XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBwb2ludHM9IjEzLjI5IDIzLjEgMTQuMSAyMCAxMi40NyAyMCAxMy4yOSAyMy4xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC00IiBwb2ludHM9IjIxLjQ0IDE4IDI0LjEzIDE4IDI0LjY2IDE2IDIwLjkxIDE2IDIxLjQ0IDE4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiBwb2ludHM9IjIyLjc4IDIzLjEgMjMuNiAyMCAyMS45NyAyMCAyMi43'@;
put 'OCAyMy4xIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOSwyMEgyNi4xOUwyNCwyOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDE5LjM4LDIw'@;
put 'SDE2LjY5bC0yLjE5LDguMzJhMS4yNSwxLjI1LDAsMCwxLTIuNDIsMEw5Ljg4LDIwSDdhMSwxLDAsMCwxLDAtMkg5LjM1bC0uNTMtMkg3YTEsMSwwLDAsMSwwLTJIOC4zbC0xLTMuNjhhMS4yNSwxLjI1LDAsMCwxLDIuNDItLjY0TDEwLjg4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAs'@;
put 'MCwxLDIuNDIsMEwyMC4zOCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLjY0bC0xLDMuNjhIMjlhMSwxLDAsMCwxLDAsMkgyNy4yNGwtLjUzLDJIMjlhMSwxLDAsMCwxLDAsMloiLz4nKSxfLkNsclNoYXBlWWVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMzQsNC41NWExLDEsMCwxLDAtMS42Ny0xLjFMMTgsMTguMjMsOC4zMywzLjQ1YTEsMSwwLDAsMC0xLjY3LDEuMUwxNywyMC4zNVYyMi4ySDEyYS44LjgsMCwwLDAsMCwxLjZoNXYyLjRIMTJhLjguOCwwLDAsMCwwLDEu'@;
put 'Nmg1VjMyYTEsMSwwLDAsMCwyLDBWMjcuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjMuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjAuMzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwz'@;
put 'NCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjA3LDcuOTFMMTkuNzQsMjBIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYySDIyYTEsMSwwLDAsMSwwLDJIMTkuMjV2Mi43NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjZIMTRhMSwxLDAsMSwxLDAtMmgyLjc1VjIySDE0YTEsMSwwLDEsMSwwLTJoMi4y'@;
put 'Nkw5LjkzLDkuOTFhMS4yNSwxLjI1LDAsMSwxLDIuMTItMS4zM0wxOCwxOC4wOGw1Ljk1LTkuNDlhMS4yNSwxLjI1LDAsMSwxLDIuMTIsMS4zM1oiLz4nKSxfLkNsclNoYXBlQml0Y29pbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMTEsMTYuODhBNS40OSw1LjQ5LDAsMCwwLDIx'@;
put 'LDdWNGExLDEsMCwwLDAtMiwwVjdIMTZWNGExLDEsMCwwLDAtMiwwVjdIMTFhMSwxLDAsMCwwLTEsMVYyOGExLDEsMCwwLDAsMSwxaDN2M2ExLDEsMCwwLDAsMiwwVjI5aDN2M2ExLDEsMCwwLDAsMiwwVjI5aC4wOEE2LjA3LDYuMDcsMCwwLDAsMjcsMjIuODF2LS42MkE2LjI1LDYuMjUsMCww'@;
put 'LDAsMjQuMTEsMTYuODhaTTEyLDloOC42OWEzLjU5LDMuNTksMCwwLDEsMy40MywyLjM2QTMuNTEsMy41MSwwLDAsMSwyMC43OSwxNkgxMlpNMjUsMjIuODFBNC4wOCw0LjA4LDAsMCwxLDIxLjA2LDI3SDEyVjE4aDkuMDZBNC4wOCw0LjA4LDAsMCwxLDI1LDIyLjE5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTgsMTguNDdIMTQuNXY2aDYuNjhhMi43LDIuNywwLDAsMCwyLjYzLTIuNzd2LS40OEEyLjcxLDIuNzEsMCwwLDAsMjEuMTgsMTguNDdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDEzLjc1YTIuMjQsMi4yNCwwLDAsMC0yLjIzLTIuMjVIMTQuNVYxNmg2LjNBMi4yMiwyLjIyLDAsMCwwLDIzLDEzLjc1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMzEsMTkuNzNBNS4yMiw1LjIyLDAsMCwxLDIxLjE4LDI3SDIxdjEuOWExLDEsMCwwLDEtMiwwVjI3SDE3djEuOWExLDEsMCwwLDEtMiwwVjI3SDEzLjI1QTEuMjUsMS4yNSwwLDAsMSwxMiwy'@;
put 'NS43NVYxNy4yM2gwdi03QTEuMjUsMS4yNSwwLDAsMSwxMy4yNSw5SDE1VjcuMDdhMSwxLDAsMCwxLDIsMFY5aDJWNy4wN2ExLDEsMCwwLDEsMiwwVjlhNC43Miw0LjcyLDAsMCwxLDMuMiw4LDUuMzEsNS4zMSwwLDAsMSwyLjExLDQuMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVDb2luQmFnPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS42LDI5YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAsMCwyMS42LDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+PHBhdGggZD0iTTIyLjU0LDI0aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLDMySDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjcsMzJoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuNywyOGgtN2ExLDEsMCwwLDAsMCwy'@;
put 'aDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy43NCwyNmEyOCwyOCwwLDAsMC0yLjgyLTEwLjEyQTIwLjI0LDIwLjI0LDAsMCwwLDI0LjYsOC43MUwyNywzLjQyYTEsMSwwLDAsMC0uMDctMUExLDEsMCww'@;
put 'LDAsMjYuMTMsMkg5LjhhMSwxLDAsMCwwLS45MSwxLjQybDIuNDUsNS4zMWEyMC4zMywyMC4zMywwLDAsMC02LjI4LDcuMTVjLTIuMTUsNC0yLjgyLDguODktMywxMi4yOGEzLjYsMy42LDAsMCwwLDEsMi43MUEzLjc5LDMuNzksMCwwLDAsNS44LDMxLjk0SDEyVjMwSDUuNzJhMS42OCwxLjY4'@;
put 'LDAsMCwxLTEuMjEtLjUyLDEuNjIsMS42MiwwLDAsMS0uNDUtMS4yM2MuMTQtMi42MS42OS03LjU4LDIuNzYtMTEuNDVBMTgsMTgsMCwwLDEsMTMuMDgsMTBoMWEzMC44MSwzMC44MSwwLDAsMC0xLjg3LDIuOTIsMjIuNzgsMjIuNzgsMCwwLDAtMS40NywzLjM0bDEuMzcuOTJhMjQsMjQsMCww'@;
put 'LDEsMS40OS0zLjQ3QTI5LjEsMjkuMSwwLDAsMSwxNi4wNSwxMGgxYTIxLjQ1LDIxLjQ1LDAsMCwxLDEuNDEsNSwyMi41NCwyMi41NCwwLDAsMSwuMzIsMy44NmwxLjU4LTEuMTFhMjQuMTUsMjQuMTUsMCwwLDAtLjMyLTNBMjQuODIsMjQuODIsMCwwLDAsMTguNzYsMTBoLjc4bC45MS0ySDEz'@;
put 'LjIxTDExLjM2LDRIMjQuNTdsLTIuNSw1LjQ3YTkuOTMsOS45MywwLDAsMSwxLjIzLjc4LDE4LjYzLDE4LjYzLDAsMCwxLDUuODYsNi41N0EyNi41OSwyNi41OSwwLDAsMSwzMS43MywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgIDxwYXRo'@;
put 'IGQ9Ik0yNC44OSwyNmg3Ljg2Yy0uNjYtOC43MS00LjQxLTE0LjEyLTkuMjItMTcuMzJMMjUuNzIsMy45YTEsMSwwLDAsMC0uOTEtMS40SDExLjFhMSwxLDAsMCwwLS45MSwxLjRsMS4yLDIuNkgyMS41MWwtLjksMkgxOC43NkEyNC45LDI0LjksMCwwLDEsMjAsMTMuMTlhMjQuNDksMjQuNDks'@;
put 'MCwwLDEsLjMyLDNsLTEuNTgsMS4xMWEyMi41NCwyMi41NCwwLDAsMC0uMzItMy44NkEyMS43NCwyMS43NCwwLDAsMCwxNyw4LjVoLTFhMjguMjIsMjguMjIsMCwwLDAtMi40OCwzLjcsMjMuOTEsMjMuOTEsMCwwLDAtMS40OSwzLjQ2bC0xLjM3LS45MWEyMi43OCwyMi43OCwwLDAsMSwxLjQ3'@;
put 'LTMuMzRBMzAuODEsMzAuODEsMCwwLDEsMTQuMDUsOC41SDEyLjNsLjA4LjE3QzcuMDgsMTIuMiwzLjA1LDE4LjQsMy4wNSwyOC43NUExLjY1LDEuNjUsMCwwLDAsNC42MSwzMC41aDhBMi42NywyLjY3LDAsMCwxLDE0LjIxLDI2YTIuNjcsMi42NywwLDAsMS0uMzctMS4zNCwyLjcsMi43LDAs'@;
put 'MCwxLDIuNy0yLjdoNmEyLjcsMi43LDAsMCwxLDIuNywyLjdBMi42MywyLjYzLDAsMCwxLDI0Ljg5LDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuNiwyOC41YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAs'@;
put 'MCwyMS42LDI4LjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi41NCwyMy41aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjIs'@;
put 'MzEuNUgxNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLjcsMzEuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjcsMjcuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JyksXy5DbHJTaGFwZVBlc289KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDEzLjJIMjcu'@;
put 'ODlBNi44MSw2LjgxLDAsMCwwLDI4LDEyYTcuODUsNy44NSwwLDAsMC0uMS0xLjE5aDIuOTNhLjguOCwwLDAsMCwwLTEuNkgyNy40NkE4LjQ0LDguNDQsMCwwLDAsMTkuNTcsNEgxMWExLDEsMCwwLDAtMSwxVjkuMkg3YS44LjgsMCwwLDAsMCwxLjZoM3YyLjRIN2EuOC44LDAsMCwwLDAsMS42'@;
put 'aDNWMzFhMSwxLDAsMCwwLDIsMFYyMGg3LjU3YTguNDUsOC40NSwwLDAsMCw3Ljg5LTUuMkgzMWEuOC44LDAsMCwwLDAtMS42Wk0xMiw2aDcuNTdhNi41MSw2LjUxLDAsMCwxLDUuNjgsMy4ySDEyWm0wLDQuOEgyNS44N2E1LjYsNS42LDAsMCwxLDAsMi40SDEyWk0xOS41NywxOEgxMlYxNC44'@;
put 'SDI1LjI1QTYuNTEsNi41MSwwLDAsMSwxOS41NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxMy44VjE2aDkuNDVhNS4yNiw1LjI2LDAsMCwwLC4wOC0uODksNC43Miw0LjcyLDAsMCwwLS4yLTEuMzFaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxOS43aDUuMTlhNC4yOCw0LjI4LDAsMCwwLDMuNS0xLjlIMTQuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zNywxMC41MUgxNC4xOFYxMmg4'@;
put 'LjM3QTQuMjEsNC4yMSwwLDAsMCwxOS4zNywxMC41MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjY3LDJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTcuNjcsMlptMTAuNSwxNS44SDI1LjdhNi44Nyw2Ljg3LDAsMCwxLTYu'@;
put 'MzMsNC40SDE0LjE4djYuNTRhMS4yNSwxLjI1LDAsMSwxLTIuNSwwVjE3LjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWMTMuOEg4Ljc2YS45LjksMCwxLDEsMC0xLjhoMi45MlY5LjI2QTEuMjUsMS4yNSwwLDAsMSwxMi45Myw4aDYuNDRhNi44NCw2Ljg0LDAsMCwxLDYuMTUsNGgyLjY1'@;
put 'YS45LjksMCwwLDEsMCwxLjhIMjYuMDlhNi45MSw2LjkxLDAsMCwxLC4xMiwxLjMsNi44LDYuOCwwLDAsMS0uMDYuOWgyYS45LjksMCwwLDEsMCwxLjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLF8uQ2xyU2hhcGVSdWJsZT0oMCxnLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMjAuNTcsMjBBOC4yMyw4LjIzLDAsMCwwLDI5LDEyYTguMjMsOC4yMywwLDAsMC04LjQzLThIMTJhMSwxLDAsMCwwLTEsMVYxOEg5YTEsMSwwLDAsMCwwLDJoMnYySDlhMSwxLDAsMCwwLDAsMmgydjdhMSwxLDAsMCwwLDIsMFYyNGg5YTEsMSwwLDAsMCwwLTJIMTNWMjBa'@;
put 'TTEzLDZoNy41N0E2LjI0LDYuMjQsMCwwLDEsMjcsMTJhNi4yMyw2LjIzLDAsMCwxLTYuNDMsNkgxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMC43NSw5LjI1SDE1djguODFoNS43OWE0LjY2LDQuNjYsMCwwLDAsNC44Ni00LjRB'@;
put 'NC42NSw0LjY1LDAsMCwwLDIwLjc1LDkuMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTIuNzUsMTguNTZIMTVWMjJoOC4yOWExLDEsMCwwLDEsMCwySDE1djVhMS4y'@;
put 'NSwxLjI1LDAsMCwxLTIuNSwwVjI0SDExLjI1YTEsMSwwLDAsMSwwLTJoMS4yMVYyMC41NkgxMS4yNWExLjI1LDEuMjUsMCwwLDEsMC0yLjVoMS4yMVY4YTEuMjUsMS4yNSwwLDAsMSwxLjI1LTEuMjVoN2E3LjE0LDcuMTQsMCwwLDEsNy4zNiw2LjlBNy4xNSw3LjE1LDAsMCwxLDIwLjc1LDIw'@;
put 'LjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlRW1wbG95ZWVHcm91cD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCwwLDEsMTguNDIsMTYuMzFa'@;
put 'bTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCww'@;
put 'LDEsMTguNDIsMTYuMzFabTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuOTEsMTcuNjVhMjAuNiwyMC42LDAsMCwwLTEzLDJB'@;
put 'MS43NywxLjc3LDAsMCwwLDgsMjEuMjV2My41NmExLDEsMCwwLDAsMiwwVjIxLjM4YTE4LjkyLDE4LjkyLDAsMCwxLDEyLTEuNjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzMsMjJIMjYuM1YyMC41MmExLDEsMCwwLDAtMiww'@;
put 'VjIySDE3YTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIzQTEsMSwwLDAsMCwzMywyMlpNMzIsMzJIMThWMjRoNi4zdi40MWExLDEsMCwwLDAsMiwwVjI0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAg'@;
put 'PHJlY3QgeD0iMjEuODEiIHk9IjI3LjQyIiB3aWR0aD0iNS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMC44NCwxMi4yNGExOCwxOCwwLDAsMC03Ljk1LDJBMS42NywxLjY3LDAsMCwwLDIsMTUuNzF2'@;
put 'My4xYTEsMSwwLDAsMCwyLDB2LTIuOWExNiwxNiwwLDAsMSw3LjU4LTEuNjdBNy4yOCw3LjI4LDAsMCwxLDEwLjg0LDEyLjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMzLjExLDE0LjIzYTE3LjgsMTcuOCwwLDAsMC03LjEy'@;
put 'LTIsNy40Niw3LjQ2LDAsMCwxLS43MywyQTE1Ljg5LDE1Ljg5LDAsMCwxLDMyLDE1LjkxdjIuOWExLDEsMCwxLDAsMiwwdi0zLjFBMS42NywxLjY3LDAsMCwwLDMzLjExLDE0LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHBhdGggZD0iTTEw'@;
put 'LjY2LDEwLjYxYzAtLjIzLDAtLjQ1LDAtLjY3YTMuMDcsMy4wNywwLDAsMSwuNTQtNi4xMSwzLjE1LDMuMTUsMCwwLDEsMi4yLjg5LDguMTYsOC4xNiwwLDAsMSwxLjctMS4wOCw1LjEzLDUuMTMsMCwwLDAtOSwzLjI3LDUuMSw1LjEsMCwwLDAsNC43LDVBNy40Miw3LjQyLDAsMCwxLDEwLjY2'@;
put 'LDEwLjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHBhdGggZD0iTTI0Ljc3LDEuODNhNS4xNyw1LjE3LDAsMCwwLTMuNjksMS41NSw3Ljg3LDcuODcsMCwwLDEsMS45LDEsMy4xNCwzLjE0LDAsMCwxLDQuOTMsMi41MiwzLjA5LDMuMDksMCww'@;
put 'LDEtMS43OSwyLjc3LDcuMTQsNy4xNCwwLDAsMSwuMDYuOTMsNy44OCw3Ljg4LDAsMCwxLS4xLDEuMiw1LjEsNS4xLDAsMCwwLDMuODMtNC45QTUuMTIsNS4xMiwwLDAsMCwyNC43NywxLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgXG4gIDxl'@;
put 'bGxpcHNlIGN4PSIxOCIgY3k9IjExLjI4IiByeD0iNC43NiIgcnk9IjQuNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTAuNzgsMTEuNzVjLjE2LDAsLjMyLDAsLjQ4LDAsMC0uMTUsMC0uMjgsMC0uNDNhNi43LDYuNywwLDAsMSwzLjc1'@;
put 'LTYsNC42Miw0LjYyLDAsMSwwLTQuMjEsNi40NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTI0Ljc2LDExLjI4YzAsLjE1LDAsLjI4LDAsLjQzLjE2LDAsLjMyLDAsLjQ4LDBBNC41OCw0LjU4LDAsMSwwLDIxLDUuMjksNi43LDYuNyww'@;
put 'LDAsMSwyNC43NiwxMS4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTIyLjI5LDE2LjQ1YTIxLjQ1LDIxLjQ1LDAsMCwxLDUuNzEsMiwyLjcxLDIuNzEsMCwwLDEsLjY4LjUzSDM0VjE1LjU2YS43Mi43MiwwLDAsMC0uMzgtLjY0LDE4'@;
put 'LDE4LDAsMCwwLTguNC0yLjA1bC0uNjYsMEE2LjY2LDYuNjYsMCwwLDEsMjIuMjksMTYuNDVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik02LjUzLDIwLjkyQTIuNzYsMi43NiwwLDAsMSw4LDE4LjQ3YTIxLjQ1LDIxLjQ1LDAsMCwxLDUu'@;
put 'NzEtMiw2LjY2LDYuNjYsMCwwLDEtMi4yNy0zLjU1bC0uNjYsMGExOCwxOCwwLDAsMC04LjQsMi4wNS43Mi43MiwwLDAsMC0uMzguNjRWMjJINi41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iMjEuNDYiIHk9IjI2LjY5IiB3aWR0aD0i'@;
put 'NS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMyLjgxLDIxLjI2SDI1Ljk0di0xYTEsMSwwLDAsMC0yLDB2MUgyMlYxOC40M0EyMC4xNywyMC4xNywwLDAsMCwxOCwxOGExOS4yNywxOS4yNywwLDAsMC05LjA2'@;
put 'LDIuMjIuNzYuNzYsMCwwLDAtLjQxLjY4djUuNjFoNy4xMXY2LjA5YTEsMSwwLDAsMCwxLDFIMzIuODFhMSwxLDAsMCwwLDEtMVYyMi4yNkExLDEsMCwwLDAsMzIuODEsMjEuMjZabS0xLDEwLjM2SDE3LjY0VjIzLjI2aDYuM3YuOTFhMSwxLDAsMCwwLDIsMHYtLjkxaDUuODdaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+JyksXy5DbHJTaGFwZUVtcGxveWVlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNi40MywxNi42OWE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNi40MywxNi42OVptMC0xMS45MmE1LDUsMCwxLDAsNSw1QTUsNSwwLDAsMCwx'@;
put 'Ni40Myw0Ljc3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDE3LjlBMjUuNDEsMjUuNDEsMCwwLDAsNS44OCwxOS41N2E0LjA2LDQuMDYsMCwwLDAtMi4zMSwzLjY4VjI5LjJhMSwxLDAsMSwwLDIsMFYyMy4yNWEyLDIsMCww'@;
put 'LDEsMS4xNi0xLjg2LDIyLjkxLDIyLjkxLDAsMCwxLDkuNy0yLjExLDIzLjU4LDIzLjU4LDAsMCwxLDUuNTcuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4xNCIgeT0iMjcuNDEiIHdpZHRoPSI2LjE0IiBoZWlnaHQ9IjEu'@;
put 'NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMzLjE3LDIxLjQ3SDI4djJoNC4xN3Y4LjM3SDE4VjIzLjQ3aDYuM3YuNDJhMSwxLDAsMCwwLDIsMFYyMGExLDEsMCwwLDAtMiwwdjEuNDdIMTdhMSwxLDAsMCwwLTEsMVYzMi44NGEx'@;
put 'LDEsMCwwLDAsMSwxSDMzLjE3YTEsMSwwLDAsMCwxLTFWMjIuNDdBMSwxLDAsMCwwLDMzLjE3LDIxLjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgXG4gIDxjaXJjbGUgY3g9IjE2Ljg2IiBjeT0iOS43MyIgcj0iNi40NiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMSIgeT0iMjgiIHdpZHRoPSI3IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTUsMzB2M2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwx'@;
put 'LTFWMjNhMSwxLDAsMCwwLTEtMUgyNlYyMC41M2ExLDEsMCwwLDAtMiwwVjIySDIyVjE4LjQyQTMyLjEyLDMyLjEyLDAsMCwwLDE2Ljg2LDE4YTI2LDI2LDAsMCwwLTExLDIuMzksMy4yOCwzLjI4LDAsMCwwLTEuODgsM1YzMFptMTcsMkgxN1YyNGg3di40MmExLDEsMCwwLDAsMiwwVjI0aDZa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksXy5DbHJTaGFwZUZhY3Rvcnk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ3LDcuMzdhMSwxLDAsMCwwLTEsLjA2TDIzLDEzLjc3VjguMjZhMSwxLDAsMCwwLTEuNjQtLjc3TDEzLjQ4LDE0SDEwVjQu'@;
put 'NjJhMSwxLDAsMCwwLS43OC0xbC00LS45YTEsMSwwLDAsMC0uODUuMkExLDEsMCwwLDAsNCwzLjczVjE0SDNhMSwxLDAsMCwwLTEsMVYzMWExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWOC4yNkExLDEsMCwwLDAsMzMuNDcsNy4zN1pNNiw1bDIsLjQ0VjE0SDZaTTMyLDMwSDRWMTZo'@;
put 'OS44M2ExLDEsMCwwLDAsLjY0LS4yM0wyMSwxMC4zN3Y1LjI4YTEsMSwwLDAsMCwxLjU2LjgzTDMyLDEwLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMTcuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjIxLjk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSI2IiB5PSIyNS45OSIgd2lkdGg9IjgiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHJlY3QgeD0iMTkiIHk9IjE4Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIxOSIgeT0i'@;
put 'MjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjIzIiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5c'@;
put 'biAgPHJlY3QgeD0iMjMiIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIvPlxuICA8cmVjdCB4PSIyNyIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gIFxuICA8cGF0aCBkPSJNMzIuNDUsOC40NCwyMiwxNS4zVjkuNTFhMSwxLDAsMCwwLTEu'@;
put 'NjMtLjc4TDE0LjA3LDE0SDEwVjQuMDZMNCwyLjcxVjE0SDJWMzFhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjkuMjdBMSwxLDAsMCwwLDMyLjQ1LDguNDRaTTE0LDI5SDZWMjdoOFptMC00SDZWMjNoOFptMC00SDZWMTloOFptOCw4SDIwVjI2aDJabTAtNkgyMFYyMGgyWm00LDZI'@;
put 'MjRWMjZoMlptMC02SDI0VjIwaDJabTQsNkgyOFYyNmgyWm0wLTZIMjhWMjBoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxfLkNvbW1lcmNlU2hhcGVzPXtjYWxjdWxhdG9yOl8uQ2xyU2hhcGVDYWxjdWxhdG9yLCJwaWdneS1iYW5rIjpfLkNsclNoYXBl'@;
put 'UGlnZ3lCYW5rLCJzaG9wcGluZy1iYWciOl8uQ2xyU2hhcGVTaG9wcGluZ0JhZywic2hvcHBpbmctY2FydCI6Xy5DbHJTaGFwZVNob3BwaW5nQ2FydCx3YWxsZXQ6Xy5DbHJTaGFwZVdhbGxldCxzdG9yZTpfLkNsclNoYXBlU3RvcmUsZXVybzpfLkNsclNoYXBlRXVybyxkb2xsYXI6Xy5DbHJT'@;
put 'aGFwZURvbGxhcixwZXNvOl8uQ2xyU2hhcGVQZXNvLCJjcmVkaXQtY2FyZCI6Xy5DbHJTaGFwZUNyZWRpdENhcmQsYmFuazpfLkNsclNoYXBlQmFuaywiZG9sbGFyLWJpbGwiOl8uQ2xyU2hhcGVEb2xsYXJCaWxsLCJlLWNoZWNrIjpfLkNsclNoYXBlRUNoZWNrLHBvdW5kOl8uQ2xyU2hhcGVQ'@;
put 'b3VuZCxydXBlZTpfLkNsclNoYXBlUnVwZWUsd29uOl8uQ2xyU2hhcGVXb24seWVuOl8uQ2xyU2hhcGVZZW4sYml0Y29pbjpfLkNsclNoYXBlQml0Y29pbixydWJsZTpfLkNsclNoYXBlUnVibGUsImNvaW4tYmFnIjpfLkNsclNoYXBlQ29pbkJhZywiZW1wbG95ZWUtZ3JvdXAiOl8uQ2xyU2hh'@;
put 'cGVFbXBsb3llZUdyb3VwLGVtcGxveWVlOl8uQ2xyU2hhcGVFbXBsb3llZSxmYWN0b3J5Ol8uQ2xyU2hhcGVGYWN0b3J5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db21tZXJjZVNoYXBlcywic2F2aW5ncyIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvbW1lcmNlU2hhcGVzWyJwaWdn'@;
put 'eS1iYW5rIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoXy5Db21tZXJjZVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5Db3JlU2hhcGVzPV8uQ2xyU2hhcGVBcnJvdz1f'@;
put 'LkNsclNoYXBlU3RlcEZvcndhcmQyPV8uQ2xyU2hhcGVFeWVIaWRlPV8uQ2xyU2hhcGVFeWU9Xy5DbHJTaGFwZUV2ZW50PV8uQ2xyU2hhcGVDYWxlbmRhcj1fLkNsclNoYXBlQW5nbGVEb3VibGU9Xy5DbHJTaGFwZVZpZXdDb2x1bW5zPV8uQ2xyU2hhcGVTZWFyY2g9Xy5DbHJTaGFwZVZtQnVn'@;
put 'PV8uQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPV8uQ2xyU2hhcGVGaWx0ZXJHcmlkPV8uQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPV8uQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Xy5DbHJTaGFwZUNsb3VkPV8uQ2xyU2hhcGVJbWFnZT1fLkNsclNoYXBlQmVsbD1fLkNsclNoYXBlRm9s'@;
put 'ZGVyT3Blbj1fLkNsclNoYXBlRm9sZGVyPV8uQ2xyU2hhcGVBbmdsZT1fLkNsclNoYXBlVXNlcj1fLkNsclNoYXBlQmFycz1fLkNsclNoYXBlSGVscEluZm89Xy5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1fLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1fLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJk'@;
put 'PV8uQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9Xy5DbHJTaGFwZUluZm9DaXJjbGU9Xy5DbHJTaGFwZUNoZWNrQ2lyY2xlPV8uQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1fLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1fLkNsclNoYXBlVGltZXM9Xy5DbHJTaGFwZUNoZWNrPV8uQ2xyU2hh'@;
put 'cGVDb2c9Xy5DbHJTaGFwZUhvbWU9Xy5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciB5PUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9z'@;
put 'dmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtfLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBj'@;
put 'eD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4z'@;
put 'NCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSww'@;
put 'LDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4nKSxfLkNsclNoYXBlSG9tZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCww'@;
put 'LDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEz'@;
put 'VjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgs'@;
put 'NC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44'@;
put 'M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZaIi8+JyksXy5DbHJTaGFwZUNvZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcs'@;
put 'N3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40'@;
put 'Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIs'@;
put 'MTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEu'@;
put 'MWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQs'@;
put 'MTUuNiwzMy41LDE0LjksMzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwt'@;
put 'MS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJs'@;
put 'MC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAu'@;
put 'NywxLjQsMC45LDIuMWwwLjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdz'@;
put 'LTMuMS03LTctN0MxNC4yLDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYs'@;
put 'MS40LTAuOSwyLjFsLTAuMywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwx'@;
put 'LjgtMy4zbC0wLjMtMC41Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0w'@;
put 'LjJMMTYuNiw0aDIuOGwxLjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAu'@;
put 'My0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4x'@;
put 'bDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZs'@;
put 'Mi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjls'@;
put 'LTAuNSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMw'@;
put 'LjItMC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41'@;
put 'LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40'@;
put 'YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4z'@;
put 'LTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMz'@;
put 'LjcsMTUuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0w'@;
put 'LjMtMS4zLTAuMi0yaC0wLjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0w'@;
put 'LjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3'@;
put 'LDE1LjcybC0zLjM1LTFhMTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42'@;
put 'OSwzSDE2LjMxYS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYx'@;
put 'LDAsMCwwLS40My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45'@;
put 'NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42'@;
put 'MywxMS42MywwLDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEu'@;
put 'NjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4z'@;
put 'N2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwx'@;
put 'MS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43'@;
put 'MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMx'@;
put 'YS42MS42MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40'@;
put 'My41OHYzLjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdh'@;
put 'LjYxLjYxLDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42Myww'@;
put 'LDAsMCwuOTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl'@;
put 'cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlQ2hlY2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxfLkNsclNoYXBlVGltZXM9KDAsZy5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwx'@;
put 'LjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+JyksXy5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmEx'@;
put 'LjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9'@;
put 'IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42'@;
put 'NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEu'@;
put 'NDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxfLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'IGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1'@;
put 'IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEu'@;
put 'NDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxfLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9'@;
put 'Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEs'@;
put 'MSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLF8uQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwy'@;
put 'aDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAs'@;
put 'MCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIs'@;
put 'MiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxfLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAs'@;
put 'MmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQs'@;
put 'MTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwx'@;
put 'LTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxfLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLGcuY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVh'@;
put 'MS40LDEuNCwwLDEsMSwyLDJaIi8+JyksXy5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+'@;
put 'JyksXy5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi'@;
put 'IGQ9Ik0xNS4wNjIwNzgyLDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwz'@;
put 'NC41OTg2NDQsMjcuMjQyNTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMy'@;
put 'Ljg3NDA5MDA5LDMyLjAyNTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3'@;
put 'NjcsMjguMTk3NzI4MiBDMi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTgg'@;
put 'MzIuNTk4MjQ3OCwyOS43NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0'@;
put 'MTksMi4wMTAyMjE5NCAxNy44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCww'@;
put 'djEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLF8uQ2xyU2hhcGVIZWxwSW5mbz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEu'@;
put 'NDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUu'@;
put 'NTksMCwwLDAsMTUsMzRhOS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTku'@;
put 'MywxMWE0LjUsNC41LDAsMSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMTEuODEsMTVjLjA2LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIu'@;
put 'NjcsMTYuNTJzLjM5LTIuNzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIw'@;
put 'Ljc1IiBjeT0iNiIgcj0iNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2'@;
put 'LS4xMS0uMTUtLjgyLS4wOC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40Nywy'@;
put 'LjQ3LDAsMCwxLS4wNywxLjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZUJhcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwx'@;
put 'LDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxfLkNsclNoYXBlVXNlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwx'@;
put 'LTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgy'@;
put 'OWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4z'@;
put 'N2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4'@;
put 'LDE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4'@;
put 'LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcu'@;
put 'MTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1p'@;
put 'LWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42'@;
put 'MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYx'@;
put 'LDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu'@;
put 'MTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEu'@;
put 'NSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3'@;
put 'LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksXy5DbHJTaGFwZUFuZ2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIu'@;
put 'NTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxfLkNsclNoYXBlRm9sZGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDls'@;
put 'Mi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwy'@;
put 'LjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMu'@;
put 'NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQu'@;
put 'MTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0'@;
put 'ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIs'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5'@;
put 'LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHIt'@;
put 'aS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEz'@;
put 'LjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv'@;
put 'PicpLF8uQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIs'@;
put 'MSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAs'@;
put 'MCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSww'@;
put 'LDAsMS0xLjI5LTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYu'@;
put 'OWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAs'@;
put 'MSwxOSwxMy41NmEzLjYzLDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJM'@;
put 'MTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz'@;
put 'NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwy'@;
put 'LjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAs'@;
put 'NS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUu'@;
put 'NEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEs'@;
put 'MTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAs'@;
put 'MCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43'@;
put 'MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx'@;
put 'Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksXy5DbHJTaGFwZUJlbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44'@;
put 'M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42'@;
put 'MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywx'@;
put 'NC4yNCwxNC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'LS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIg'@;
put 'ZD0iTTMyLjUxLDI3LjgzQTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4y'@;
put 'NCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDks'@;
put 'MCwwLDEsMjIuNSw2YzAtLjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAs'@;
put 'MS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0Ljlh'@;
put 'MTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQu'@;
put 'NCwwLDAsMS0yLjQ3LDIuOTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwx'@;
put 'LDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40'@;
put 'NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxfLkNsclNoYXBlSW1hZ2U9KDAs'@;
put 'Zy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1'@;
put 'LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAs'@;
put 'MCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJI'@;
put 'MzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEs'@;
put 'MS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYx'@;
put 'Mi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEs'@;
put 'MEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2Vk'@;
put 'IGNsci1pLWJhZGdlIi8+JyksXy5DbHJTaGFwZUNsb3VkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAu'@;
put 'MTksMTAuMTksMCwwLDEsMjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywy'@;
put 'My4xYzAsNCwzLjc3LDcuOSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2'@;
put 'LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4'@;
put 'LDdhNy41Myw3LjUzLDAsMCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44'@;
put 'Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4x'@;
put 'OGE2LjMxLDYuMzEsMCwwLDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5'@;
put 'LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4'@;
put 'LjE5LDUuNjIsMzMsMTAuNTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0y'@;
put 'OSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMz'@;
put 'LDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4'@;
put 'PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44'@;
put 'OWwzLTUuMjFBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4'@;
put 'LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxfLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxnLmNsckljb25TVkcp'@;
put 'KCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxj'@;
put 'aXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksXy5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAs'@;
put 'MCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUs'@;
put 'MCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxfLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAs'@;
put 'MC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQs'@;
put 'MCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwx'@;
put 'NCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1'@;
put 'bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksXy5DbHJTaGFwZVZtQnVnPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMi'@;
put 'IGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywy'@;
put 'Miw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwx'@;
put 'LjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCww'@;
put 'LDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywx'@;
put 'NC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0x'@;
put 'LjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43Nywx'@;
put 'Ljc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0iI2ZmZmZmZiIvPicpLF8uQ2xyU2hhcGVTZWFyY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEw'@;
put 'Ljk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0z'@;
put 'NSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1LDMzLjI5WiIvPicpLF8uQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEy'@;
put 'LDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksXy5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLF8uQ2xyU2hhcGVDYWxlbmRhcj0o'@;
put 'MCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwx'@;
put 'Ljc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIg'@;
put 'eT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtOSIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg'@;
put 'ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIg'@;
put 'eT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIg'@;
put 'ZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJo'@;
put 'MjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRo'@;
put 'PSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t'@;
put 'YmFkZ2VkIiB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVj'@;
put 'dCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xMi0tYmFkZ2VkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMz'@;
put 'LjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0'@;
put 'IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAg'@;
put 'ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMTAtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVp'@;
put 'Z2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24g'@;
put 'cG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJN'@;
put 'MzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgs'@;
put 'MCwwLDAsMzIuMjUsNlpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgy'@;
put 'NlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1i'@;
put 'YWRnZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcu'@;
put 'NSwwLDAsMSwyMi41LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwy'@;
put 'Nkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVB'@;
put 'MS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4'@;
put 'LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlRXZlbnQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcs'@;
put 'MjNsOC42NC04LjY0YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4x'@;
put 'OUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBh'@;
put 'MSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSww'@;
put 'LDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwx'@;
put 'LDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2ly'@;
put 'Y2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9'@;
put 'Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1'@;
put 'LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00Vjlh'@;
put 'Mi4yLDIuMiwwLDAsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2'@;
put 'Wk0yNS45NCwxNi41OGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBk'@;
put 'PSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2'@;
put 'aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'My0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1i'@;
put 'YWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43'@;
put 'OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLF8uQ2xyU2hhcGVFeWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYu'@;
put 'MjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMu'@;
put 'OC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwx'@;
put 'OCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIs'@;
put 'MTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5'@;
put 'LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9'@;
put 'IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxfLkNsclNoYXBlRXllSGlkZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYu'@;
put 'NzksMCwwLDAtMi4zNy40M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMzQuMjksMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIs'@;
put 'MS40MmExOS45MywxOS45MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYu'@;
put 'NDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42'@;
put 'MiwxNS41M1ptLTEuNDUtMS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgs'@;
put 'OC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41Miwx'@;
put 'OS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEs'@;
put 'MCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxfLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9'@;
put 'Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZUFycm93PSgw'@;
put 'LGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIi8+JyksXy5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOl8uQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Xy5DbHJTaGFwZUhvbWUsY29nOl8uQ2xyU2hhcGVDb2csY2hlY2s6Xy5DbHJTaGFwZUNoZWNrLHRpbWVzOl8uQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRp'@;
put 'b24tdHJpYW5nbGUiOl8uQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1hdGlvbi1jaXJjbGUiOl8uQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpfLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpfLkNsclNoYXBlSW5mb0NpcmNsZSwi'@;
put 'aW5mby1zdGFuZGFyZCI6Xy5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFuZGFyZCI6Xy5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOl8uQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpfLkNsclNoYXBlV2FybmluZ1N0YW5k'@;
put 'YXJkLCJoZWxwLWluZm8iOl8uQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOl8uQ2xyU2hhcGVCYXJzLHVzZXI6Xy5DbHJTaGFwZVVzZXIsYW5nbGU6Xy5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpfLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Xy5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpfLkNs'@;
put 'clNoYXBlQmVsbCxpbWFnZTpfLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Xy5DbHJTaGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpfLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Xy5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlk'@;
put 'IjpfLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpfLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpfLkNsclNoYXBlVm1CdWcsc2VhcmNoOl8uQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Xy5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1k'@;
put 'b3VibGUiOl8uQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpfLkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6Xy5DbHJTaGFwZUV2ZW50LGV5ZTpfLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Xy5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpfLkNsclNoYXBlU3RlcEZvcndhcmQy'@;
put 'LGFycm93Ol8uQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uQ29yZVNoYXBlcywiaG91c2UiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAseS5kZXNj'@;
put 'cmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uQ29yZVNoYXBlcywic3VjY2VzcyIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJjbG9zZSIs'@;
put 'KDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShfLkNvcmVTaGFwZXMsImVycm9yIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJpbmZvIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBl'@;
put 'c1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFwZXMsIm1lbnUiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLHkuZGVzY3JpcHRvckNv'@;
put 'bmZpZykoXy5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJjYXJldCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLHku'@;
put 'ZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFw'@;
put 'ZXMsImNvbGxhcHNlIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uQ2xyU2hhcGVMb2dvdXQ9Xy5DbHJTaGFwZUxvZ2luPV8uQ2xyU2hhcGVIZWxwPV8uQ2xy'@;
put 'U2hhcGVDb3B5PV8uQ2xyU2hhcGVDaGlsZEFycm93PV8uQ2xyU2hhcGVDaXJjbGVBcnJvdz1fLkNsclNoYXBlQWxhcm1DbG9jaz1fLkNsclNoYXBlQ2xvY2s9Xy5DbHJTaGFwZUhpc3Rvcnk9Xy5DbHJTaGFwZVRhZ3M9Xy5DbHJTaGFwZVRhZz1fLkNsclNoYXBlVHJhc2g9Xy5DbHJTaGFwZVRp'@;
put 'bWVzQ2lyY2xlPV8uQ2xyU2hhcGVCYW49Xy5DbHJTaGFwZVBsdXNDaXJjbGU9Xy5DbHJTaGFwZU1pbnVzQ2lyY2xlPV8uQ2xyU2hhcGVNaW51cz1fLkNsclNoYXBlUGx1cz1fLkNsclNoYXBlRmlsZT1fLkNsclNoYXBlUGluPV8uQ2xyU2hhcGVGaWx0ZXI9Xy5DbHJTaGFwZVBvcE91dD1fLkNs'@;
put 'clNoYXBlVXNlcnM9Xy5DbHJTaGFwZVVubG9jaz1fLkNsclNoYXBlTG9jaz1fLkNsclNoYXBlVXBsb2FkPV8uQ2xyU2hhcGVEb3dubG9hZD1fLkNsclNoYXBlTGlnaHRidWxiPV8uQ2xyU2hhcGVWaWV3Q2FyZHM9Xy5DbHJTaGFwZVZpZXdMaXN0PV8uQ2xyU2hhcGVTeW5jPV8uQ2xyU2hhcGVS'@;
put 'ZWZyZXNoPV8uQ2xyU2hhcGVOb3RlPV8uQ2xyU2hhcGVQZW5jaWw9Xy5DbHJTaGFwZVRoZXJtb21ldGVyPV8uQ2xyU2hhcGVCdWc9Xy5DbHJTaGFwZVNjaXNzb3JzPV8uQ2xyU2hhcGVBc3Rlcmlzaz1fLkNsclNoYXBlQm9vaz1fLkNsclNoYXBlT2JqZWN0cz1fLkNsclNoYXBlUmVzaXplPV8u'@;
put 'Q2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9Xy5DbHJTaGFwZUN1cnNvckhhbmQ9Xy5DbHJTaGFwZUN1cnNvckFycm93PV8uQ2xyU2hhcGVHcmlkVmlldz1fLkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249Xy5DbHJTaGFwZU5ldz1fLkNsclNoYXBlQWxhcm1PZmY9Xy5DbHJTaGFwZVBpbmJvYXJk'@;
put 'PV8uQ2xyU2hhcGVBZGRUZXh0PXZvaWQgMCxfLkNsclNoYXBlQ2xvbmU9Xy5DbHJTaGFwZUN1cnNvck1vdmU9Xy5DbHJTaGFwZVdhbmQ9Xy5DbHJTaGFwZVN1bj1fLkNsclNoYXBlTW9vbj1fLkNsclNoYXBlRmlsdGVyMj1fLkNsclNoYXBlRHJhZ0hhbmRsZT1fLkNsclNoYXBlQ29weVRvQ2xp'@;
put 'cGJvYXJkPV8uQ2xyU2hhcGVDb2xvclBpY2tlcj1fLkNsclNoYXBlQnJpZWZjYXNlPV8uQ2xyU2hhcGVFeHBhbmRDYXJkPV8uQ2xyU2hhcGVDb2xsYXBzZUNhcmQ9Xy5DbHJTaGFwZVNvcnRCeT1fLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9Xy5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPV8uQ2xy'@;
put 'U2hhcGVTaHJpbms9Xy5DbHJTaGFwZVBhcGVyY2xpcD1fLkNsclNoYXBlRmlsZUdyb3VwPV8uQ2xyU2hhcGVSZXBlYXQ9Xy5DbHJTaGFwZUlkQmFkZ2U9Xy5DbHJTaGFwZUJhbGFuY2U9Xy5DbHJTaGFwZU9yZ2FuaXphdGlvbj1fLkNsclNoYXBlTm9BY2Nlc3M9Xy5DbHJTaGFwZUhvdXJnbGFz'@;
put 'cz1fLkNsclNoYXBlRmxhbWU9Xy5DbHJTaGFwZVRhcmdldD1fLkNsclNoYXBlQnVsbHNleWU9Xy5DbHJTaGFwZVdyZW5jaD1fLkNsclNoYXBlQm9sdD1fLkNsclNoYXBlTGlicmFyeT1fLkNsclNoYXBlS2V5PV8uQ2xyU2hhcGVab29tT3V0PV8uQ2xyU2hhcGVab29tSW49Xy5DbHJTaGFwZVdp'@;
put 'bmRvd1Jlc3RvcmU9Xy5DbHJTaGFwZVdpbmRvd01pbj1fLkNsclNoYXBlV2luZG93TWF4PV8uQ2xyU2hhcGVXaW5kb3dDbG9zZT1fLkNsclNoYXBlVG9vbHM9Xy5DbHJTaGFwZVN3aXRjaD1fLkNsclNoYXBlVHdvV2F5QXJyb3dzPV8uQ2xyU2hhcGVGaWxlU2V0dGluZ3M9Xy5DbHJTaGFwZVNj'@;
put 'cm9sbD1fLkNsclNoYXBlVW5kbz1fLkNsclNoYXBlUmVkbz1fLkNsclNoYXBlTGlzdD1fLkNsclNoYXBlRmlyZXdhbGw9Xy5DbHJTaGFwZUNsaXBib2FyZD1fLkNsclNoYXBlU2xpZGVyPV8uQ2xyU2hhcGVXb3JsZD1fLkNsclNoYXBlUHJpbnRlcj12b2lkIDAsXy5Fc3NlbnRpYWxTaGFwZXM9'@;
put 'Xy5DbHJTaGFwZUNvbG9yUGFsZXR0ZT1fLkNsclNoYXBlRmlyc3RBaWQ9Xy5DbHJTaGFwZUJldGE9Xy5DbHJTaGFwZURvdENpcmNsZT1fLkNsclNoYXBlQ2lyY2xlPV8uQ2xyU2hhcGVDcm9zc2hhaXJzPV8uQ2xyU2hhcGVWb2x1bWU9Xy5DbHJTaGFwZVRhYmxlPV8uQ2xyU2hhcGVTbm93Zmxh'@;
put 'a2U9Xy5DbHJTaGFwZUZ1ZWw9Xy5DbHJTaGFwZUZvcm09Xy5DbHJTaGFwZUZpc2g9Xy5DbHJTaGFwZVRyZWU9Xy5DbHJTaGFwZVJlY3ljbGU9Xy5DbHJTaGFwZUZpbHRlck9mZj1fLkNsclNoYXBlRmlsZVppcD1fLkNsclNoYXBlQ3Vyc29ySGFuZE9wZW49Xy5DbHJTaGFwZUN1cnNvckhhbmRH'@;
put 'cmFiPV8uQ2xyU2hhcGVUcmVlVmlldz1fLkNsclNoYXBlUG9ydHJhaXQ9Xy5DbHJTaGFwZVBhc3RlPV8uQ2xyU2hhcGVMYW5kc2NhcGU9Xy5DbHJTaGFwZUVyYXNlcj1fLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj1fLkNsclNoYXBlRGV0YWlscz12b2lkIDA7dmFyIHk9SSgKLyohIC4uL3V0'@;
put 'aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLGc9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp'@;
put 'LEI9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO18uQ2xyU2hhcGVBZGRUZXh0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEs'@;
put 'MjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYzLjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxfLkNsclNoYXBlUGluYm9hcmQ9KDAsZy5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9'@;
put 'Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUxLDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNs'@;
put 'Mi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjljLjc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTct'@;
put 'N2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgs'@;
put 'MS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLF8uQ2xyU2hhcGVBbGFybU9mZj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2'@;
put 'LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIy'@;
put 'QS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIsMTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIuNzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgsMTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRs'@;
put 'Mi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODksMTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIs'@;
put 'MjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wxNywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0'@;
put 'bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQuMTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLF8uQ2xyU2hhcGVOZXc9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4w'@;
put 'OC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkzLDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCww'@;
put 'LDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIuODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4'@;
put 'IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAx'@;
put 'Ni44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44'@;
put 'NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIs'@;
put 'MkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMuMzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0x'@;
put 'LjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEuMzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLF8uQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgs'@;
put 'Mi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0'@;
put 'LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRz'@;
put 'Ny4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEs'@;
put 'MCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEsMSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLF8uQ2xyU2hhcGVHcmlkVmlldz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAs'@;
put 'NEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAs'@;
put 'MCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2'@;
put 'OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9'@;
put 'IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4'@;
put 'PSIyIiByeT0iMiIvPicpLF8uQ2xyU2hhcGVDdXJzb3JBcnJvdz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3'@;
put 'bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcsOC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCww'@;
put 'LDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwyLjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAs'@;
put 'MCwwLDI5LDEyLjM2WiIvPicpLF8uQ2xyU2hhcGVDdXJzb3JIYW5kPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4'@;
put 'LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMuNCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEu'@;
put 'NDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAsMCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAs'@;
put 'MS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQuMTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40'@;
put 'MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQyLDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4y'@;
put 'OGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMu'@;
put 'MjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0uNDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUxbC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYx'@;
put 'NS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkzLDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgyLDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAs'@;
put 'MTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksXy5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0w'@;
put 'LjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTExLjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQt'@;
put 'MS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywxLjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUu'@;
put 'OFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYsMTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYt'@;
put 'My4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUuMkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2'@;
put 'LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4zLTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjks'@;
put 'MC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYzbDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwx'@;
put 'LjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAgICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksXy5DbHJTaGFwZVJlc2l6ZT0oMCxnLmNsckljb25T'@;
put 'VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksXy5DbHJTaGFwZU9iamVjdHM9KDAsZy5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41'@;
put 'Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgz'@;
put 'MlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSww'@;
put 'LDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0wLDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUs'@;
put 'MjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEsMSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwxdjRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMi'@;
put 'IGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxfLkNsclNoYXBlQm9vaz0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDks'@;
put 'MSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlhMSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5'@;
put 'LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4w'@;
put 'NiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFoiLz4nKSxfLkNsclNoYXBlQXN0ZXJpc2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44'@;
put 'NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0'@;
put 'LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEt'@;
put 'MS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcyTDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4'@;
put 'bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksXy5DbHJTaGFwZVNjaXNz'@;
put 'b3JzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1'@;
put 'Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwxLjc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41Nyww'@;
put 'LDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMu'@;
put 'NzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYsMCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYs'@;
put 'MEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0zLjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwx'@;
put 'LDcuNDUsMTMuMjNaIi8+JyksXy5DbHJTaGFwZUJ1Zz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIyLjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4g'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44'@;
put 'MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcuNjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcy'@;
put 'YTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJhMSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwz'@;
put 'MS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMuNjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMxLjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMu'@;
put 'MTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4xNy0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIxLDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEs'@;
put 'NS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMsMy4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4z'@;
put 'OCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYuODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCww'@;
put 'LDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwyMmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0x'@;
put 'NCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgsMS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45'@;
put 'NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRB'@;
put 'MTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwxLjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYtMS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAs'@;
put 'MSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDkuMDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAsMCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4'@;
put 'LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLF8uQ2xyU2hhcGVUaGVybW9tZXRlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSww'@;
put 'LDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4zNi00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxfLkNsclNoYXBlUGVuY2lsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwyOCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAs'@;
put 'MCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wxLjc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQu'@;
put 'MjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4z'@;
put 'MmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcyLDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLF8uQ2xyU2hhcGVOb3RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwy'@;
put 'LDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4y'@;
put 'OCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wy'@;
put 'LjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2'@;
put 'SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwz'@;
put 'LjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVSZWZyZXNoPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDks'@;
put 'MCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAsMSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDEx'@;
put 'LjY1WiIvPicpLF8uQ2xyU2hhcGVTeW5jPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDgu'@;
put 'NywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAsMiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSww'@;
put 'LDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCww'@;
put 'LDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwxLDAsMCwwLDMwLjA2LDFaIi8+JyksXy5DbHJTaGFwZVZpZXdMaXN0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSww'@;
put 'LDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLF8uQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLF8uQ2xyU2hhcGVMaWdodGJ1bGI9KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCwwLDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40Niwx'@;
put 'OC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEtMS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSwwLDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRh'@;
put 'MTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYuMzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4xMywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjguOCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCww'@;
put 'LDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0x'@;
put 'LjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0x'@;
put 'LjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMsMCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywx'@;
put 'OC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVBMTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQs'@;
put 'MCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwx'@;
put 'LC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJh'@;
put 'ZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwxLjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQu'@;
put 'NjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwx'@;
put 'LC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQuNjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40'@;
put 'NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZIMjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywzLjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIx'@;
put 'LjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41'@;
put 'LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44LjgsMCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwxLDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUg'@;
put 'Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxfLkNsclNoYXBlRG93bmxvYWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQx'@;
put 'LTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1'@;
put 'YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5'@;
put 'LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz'@;
put 'MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgsMjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAt'@;
put 'MS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksXy5DbHJTaGFwZVVwbG9hZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVh'@;
put 'MSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAs'@;
put 'MS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQs'@;
put 'MSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwx'@;
put 'czEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEzLjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAuMUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05Ljlj'@;
put 'LTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEs'@;
put 'MSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40'@;
put 'MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicp'@;
put 'LF8uQ2xyU2hhcGVMb2NrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVa'@;
put 'TTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAs'@;
put 'MCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMyYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAs'@;
put 'MSw2LDYuMzZaIi8+JyksXy5DbHJTaGFwZVVubG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2'@;
put 'LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgy'@;
put 'VjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEs'@;
put 'MSwyLC4wOVoiLz4nKSxfLkNsclNoYXBlVXNlcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44'@;
put 'LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcuM3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3LjgsOS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDku'@;
put 'NnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEt'@;
put 'MC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVoMnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIs'@;
put 'MC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIuMiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSwwLjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00'@;
put 'LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4yLDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAu'@;
put 'NSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMwLTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMtMC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMw'@;
put 'LjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0xLjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9'@;
put 'Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwz'@;
put 'MEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0wLjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4x'@;
put 'LDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEsMS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4x'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEt'@;
put 'MS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4'@;
put 'LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIzLjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1Yy'@;
put 'My41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40Niww'@;
put 'LDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMuNjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAtMS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDks'@;
put 'MCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEsNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2'@;
put 'LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUsMTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0'@;
put 'LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwx'@;
put 'Ny44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcsMi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTgu'@;
put 'MSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4yOHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMuODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIz'@;
put 'LjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwxLDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQy'@;
put 'LDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCwwLDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgsMCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUu'@;
put 'MjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAt'@;
put 'My40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgs'@;
put 'Ni41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4x'@;
put 'MSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43'@;
put 'bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTgu'@;
put 'NjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAsMCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNB'@;
put 'OS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwx'@;
put 'LDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcsOWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0y'@;
put 'Ni44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4x'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCww'@;
put 'LDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwu'@;
put 'MiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40'@;
put 'NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41'@;
put 'NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMs'@;
put 'MTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUyLTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxfLkNsclNoYXBlUG9wT3V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNINWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjkuNTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxfLkNsclNoYXBlRmlsdGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5'@;
put 'bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44'@;
put 'MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywx'@;
put 'LjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTkuMTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZVBpbj0oMCxnLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAs'@;
put 'MCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgw'@;
put 'YTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEu'@;
put 'NDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwx'@;
put 'LjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksXy5DbHJTaGFwZUZpbGU9KDAsZy5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0u'@;
put 'MywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSww'@;
put 'LTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjguMTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUuNFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUu'@;
put 'NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4y'@;
put 'OCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4w'@;
put 'OUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRMMjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIg'@;
put 'ZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcs'@;
put 'MCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwx'@;
put 'LjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0w'@;
put 'LjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLF8uQ2xyU2hhcGVQbHVz'@;
put 'PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEs'@;
put 'MCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxfLkNsclNoYXBlTWludXM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp'@;
put 'LF8uQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEs'@;
put 'MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdIOS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThB'@;
put 'MTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTguNDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uQ2xyU2hhcGVCYW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJa'@;
put 'TTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLF8uQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43'@;
put 'Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQs'@;
put 'MCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJs'@;
put 'LTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4wOCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLF8uQ2xyU2hhcGVUcmFzaD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0'@;
put 'LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxfLkNsclNoYXBlVGFnPSgwLGcuY2xySWNvblNWRykoJzxjaXJj'@;
put 'bGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5Ljky'@;
put 'YTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIy'@;
put 'LDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEsMS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5'@;
put 'LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx'@;
put 'MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEu'@;
put 'NDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5'@;
put 'LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIsNiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxu'@;
put 'ICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCww'@;
put 'LDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEs'@;
put 'OS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwy'@;
put 'LDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwyLDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIs'@;
put 'MiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIv'@;
put 'PicpLF8uQ2xyU2hhcGVUYWdzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45'@;
put 'MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4y'@;
put 'MUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIx'@;
put 'LjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2Ljkz'@;
put 'djkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43Myww'@;
put 'bDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMsNS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwx'@;
put 'Mi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4y'@;
put 'MSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTku'@;
put 'MTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwx'@;
put 'OS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIs'@;
put 'MCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43Mywx'@;
put 'LjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAs'@;
put 'MTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEs'@;
put 'NUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAs'@;
put 'Mi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwx'@;
put 'LTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCww'@;
put 'LDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUs'@;
put 'MS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVk'@;
put 'IGNsci1pLWFsZXJ0Ii8+JyksXy5DbHJTaGFwZUhpc3Rvcnk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1'@;
put 'LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksXy5DbHJTaGFwZUNsb2NrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQs'@;
put 'MTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcuOTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcu'@;
put 'OTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5'@;
put 'LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3'@;
put 'LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCwwLDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAs'@;
put 'MCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwz'@;
put 'NC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0'@;
put 'LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEz'@;
put 'LDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAt'@;
put 'Mi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAsMCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAs'@;
put 'MCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcsMTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2'@;
put 'bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4xOSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3'@;
put 'LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxf'@;
put 'LkNsclNoYXBlQWxhcm1DbG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFM'@;
put 'MjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwyOS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAsMCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0Ljky'@;
put 'LDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03'@;
put 'LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSww'@;
put 'LDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAs'@;
put 'MzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTlsMS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2'@;
put 'LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQu'@;
put 'NDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCww'@;
put 'LDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwxLS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwx'@;
put 'LDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYs'@;
put 'MzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSww'@;
put 'LDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0t'@;
put 'YmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCwwLTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0xNC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEu'@;
put 'MjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjksMCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMu'@;
put 'ODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1'@;
put 'Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4'@;
put 'TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5'@;
put 'YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLF8uQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwx'@;
put 'OCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEu'@;
put 'NDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUuMjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2'@;
put 'LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIsMEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksXy5DbHJTaGFwZUNoaWxkQXJyb3c9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCww'@;
put 'LDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZUNvcHk9KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYyNEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYsMCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxfLkNsclNoYXBlSGVscD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkEx'@;
put 'NiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4z'@;
put 'OCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCww'@;
put 'LDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMtMiw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4y'@;
put 'YTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1'@;
put 'YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAs'@;
put 'MS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2'@;
put 'LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0u'@;
put 'NDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0x'@;
put 'LDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4'@;
put 'PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEu'@;
put 'NjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0x'@;
put 'LjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMs'@;
put 'Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxfLkNsclNoYXBlTG9naW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYy'@;
put 'MC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5'@;
put 'LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAs'@;
put 'MCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQxLTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVMb2dvdXQ9KDAsZy5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0yLTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y'@;
put 'OC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAsMCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTIiLz4nKSxfLkNsclNoYXBlUHJpbnRlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5'@;
put 'Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhh'@;
put 'MSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIy'@;
put 'LjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwz'@;
put 'LjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlWMzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3'@;
put 'LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1YxM0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwx'@;
put 'LDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQsMCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgy'@;
put 'N1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVaTTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUy'@;
put 'LDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLF8uQ2xyU2hhcGVXb3JsZD0oMCxnLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRoMy42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMt'@;
put 'LjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwxMi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTku'@;
put 'MzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4yM2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRj'@;
put 'LjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAsMCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCww'@;
put 'LDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUsMCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2ExNy44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44'@;
put 'MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQuNzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRBMTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQs'@;
put 'MTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAsMCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYxLjc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEt'@;
put 'My43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTkuMzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEyLjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4z'@;
put 'My0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4zNmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAsMCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNa'@;
put 'TTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj'@;
put 'eT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41'@;
put 'NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIs'@;
put 'MjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVjLS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhh'@;
put 'MTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIsMCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgtNC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3'@;
put 'LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRjLjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3'@;
put 'YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAsMS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAuNTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkuNTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhBMjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44'@;
put 'LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAs'@;
put 'MCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwyMi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIy'@;
put 'LjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4wOVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAs'@;
put 'MCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcuNDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNp'@;
put 'cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLF8uQ2xyU2hhcGVTbGlkZXI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDgu'@;
put 'NDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCwwLDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwx'@;
put 'Ny44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0'@;
put 'LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAs'@;
put 'MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMuMjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCww'@;
put 'LDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAs'@;
put 'MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLF8uQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMy'@;
put 'SDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIuMzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEs'@;
put 'NCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdo'@;
put 'dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAg'@;
put 'IDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJh'@;
put 'ZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyNiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNB'@;
put 'LjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEs'@;
put 'MjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4z'@;
put 'MUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0'@;
put 'LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEs'@;
put 'MCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEuMzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAtNEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4zMVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4zMSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjEx'@;
put 'LTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1'@;
put 'Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksXy5DbHJTaGFwZUZpcmV3YWxsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMy'@;
put 'djUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMydjYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4yN0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEu'@;
put 'NzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAs'@;
put 'MCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUs'@;
put 'Ny41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45'@;
put 'MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJWMjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhW'@;
put 'MjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJWMjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiww'@;
put 'LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRINFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0x'@;
put 'NCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0i'@;
put 'NSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLF8uQ2xyU2hhcGVMaXN0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdp'@;
put 'ZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTki'@;
put 'IC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy'@;
put 'SDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIg'@;
put 'd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCww'@;
put 'LDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwy'@;
put 'LDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00'@;
put 'SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDIt'@;
put 'MlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0wLTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicp'@;
put 'LF8uQ2xyU2hhcGVSZWRvPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEz'@;
put 'bC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVVbmRvPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwx'@;
put 'Miw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVTY3JvbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQu'@;
put 'NSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMy'@;
put 'LDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0'@;
put 'LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAs'@;
put 'MSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSww'@;
put 'djQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAs'@;
put 'MCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCww'@;
put 'LDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEwLjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwxNS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4yNGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44'@;
put 'SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAsMCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEs'@;
put 'NSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxfLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLGcuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEuMTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQtLjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1'@;
put 'Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGExLjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40'@;
put 'YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4xNSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwx'@;
put 'LjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiwwLDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcyLjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4Ljct'@;
put 'LjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQyLTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0xLjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41'@;
put 'LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIxLDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlIMjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCww'@;
put 'LDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMuMDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNMMTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEu'@;
put 'MTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTItMSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwuNSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40'@;
put 'NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0u'@;
put 'MTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCwwLTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYs'@;
put 'MCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEuMzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1'@;
put 'LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0uNzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIu'@;
put 'MjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEu'@;
put 'NDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgy'@;
put 'My40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0uMjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wx'@;
put 'OC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgxLjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41'@;
put 'LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIs'@;
put 'MkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCww'@;
put 'LDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4xOC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43'@;
put 'NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiwwLDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGEx'@;
put 'LjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUsMCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4x'@;
put 'NiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4yOUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4y'@;
put 'OWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwx'@;
put 'LjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIzLjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwx'@;
put 'LDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEy'@;
put 'QTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUsMS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAsNC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVptMCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4wOGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0'@;
put 'LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyNnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFhNy4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1'@;
put 'LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCwwLDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3'@;
put 'LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcsNywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCww'@;
put 'LDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCww'@;
put 'LDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwx'@;
put 'OGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0y'@;
put 'LC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3'@;
put 'LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4z'@;
put 'Ny4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1h'@;
put 'bGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRn'@;
put 'ZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwy'@;
put 'Ni42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwx'@;
put 'LjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYx'@;
put 'LDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDIt'@;
put 'LjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYxMi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0'@;
put 'aC00LS1iYWRnZWQiIC8+JyksXy5DbHJTaGFwZVR3b1dheUFycm93cz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjku'@;
put 'NTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEu'@;
put 'NDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMuMjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlU3dpdGNoPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFM'@;
put 'OS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4yMSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIg'@;
put 'eT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC02IiAvPicpLF8uQ2xyU2hhcGVUb29scz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCww'@;
put 'LDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFM'@;
put 'MzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgxNmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwx'@;
put 'LDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCwwLDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlV2luZG93Q2xvc2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5'@;
put 'LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlV2luZG93TWF4PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcu'@;
put 'ODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZVdpbmRvd01pbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAs'@;
put 'MjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZVpvb21Jbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEw'@;
put 'LDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEt'@;
put 'MS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVab29tT3V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCww'@;
put 'LDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxfLkNsclNo'@;
put 'YXBlS2V5PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0u'@;
put 'NEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQs'@;
put 'MGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5'@;
put 'PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCww'@;
put 'LDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwyOC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBM'@;
put 'MjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y'@;
put 'OCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4'@;
put 'PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUs'@;
put 'NSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEu'@;
put 'NzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2'@;
put 'MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwxLDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgy'@;
put 'My40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAs'@;
put 'MSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4z'@;
put 'NywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwuNC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwz'@;
put 'MiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4'@;
put 'LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCww'@;
put 'LDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEs'@;
put 'MSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAsMCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRn'@;
put 'ZSIgLz4nKSxfLkNsclNoYXBlTGlicmFyeT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4'@;
put 'LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBhMSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMu'@;
put 'OTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZUJvbHQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgz'@;
put 'MC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGExLDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSww'@;
put 'LDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUu'@;
put 'NywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiAvPicpLF8uQ2xyU2hhcGVXcmVuY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcs'@;
put 'MCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCwwLDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42'@;
put 'MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4z'@;
put 'IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAu'@;
put 'NUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSwwLDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAs'@;
put 'MSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZUJ1bGxzZXllPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBs'@;
put 'LTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4z'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4'@;
put 'LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRM'@;
put 'MTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCwwLS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEs'@;
put 'MSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgsNC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0yLC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIuNjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjksNC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMwLS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEz'@;
put 'LjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQuMDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUxYS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxfLkNsclNoYXBlVGFyZ2V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcu'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgs'@;
put 'NC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcsMCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVGbGFtZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwx'@;
put 'Ny43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMsMjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwzNCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQz'@;
put 'LDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4yMSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUxaDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3'@;
put 'LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0y'@;
put 'LjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIs'@;
put 'Ny44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCww'@;
put 'LDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgyMi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0'@;
put 'bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43NywwLS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlSG91cmdsYXNzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2'@;
put 'LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAsMjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwu'@;
put 'NjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEyLDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2Ex'@;
put 'LDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4z'@;
put 'NGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFWMzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45'@;
put 'MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCww'@;
put 'LDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wxLjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAs'@;
put 'MSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAs'@;
put 'Mi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs'@;
put 'MS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2'@;
put 'LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMsNy41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAs'@;
put 'MCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42NiwwLDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAs'@;
put 'MCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIu'@;
put 'NjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEu'@;
put 'MTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYu'@;
put 'MDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEu'@;
put 'MjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZBMTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl'@;
put 'cnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0xLjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwx'@;
put 'MS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwxMS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCwwLTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksXy5DbHJTaGFwZU5vQWNjZXNzPSgwLGcuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4y'@;
put 'NUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4yNSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAs'@;
put 'MSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYuODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZU9yZ2FuaXphdGlvbj0oMCxnLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAx'@;
put 'Ny4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDIt'@;
put 'MlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVB'@;
put 'MiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiww'@;
put 'LDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4'@;
put 'LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIxLjg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIy'@;
put 'IiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksXy5DbHJTaGFwZUJhbGFuY2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEy'@;
put 'YTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIz'@;
put 'LDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEuNi44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcu'@;
put 'MjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0u'@;
put 'NjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTguMTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLF8uQ2xyU2hhcGVJZEJhZGdlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0'@;
put 'LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYzLDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4y'@;
put 'Ni0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwyLDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNBNC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwx'@;
put 'LDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'My0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt'@;
put 'LWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEt'@;
put 'Mi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIw'@;
put 'LDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4y'@;
put 'OWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRn'@;
put 'ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNs'@;
put 'ZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAg'@;
put 'ICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3'@;
put 'LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40'@;
put 'VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIx'@;
put 'LjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1p'@;
put 'LWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIs'@;
put 'MiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjcz'@;
put 'QTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4'@;
put 'VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksXy5DbHJTaGFwZVJlcGVhdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYs'@;
put 'MTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4yOCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3'@;
put 'LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02LjFsLTIsMi4xMloiLz4nKSxfLkNsclNoYXBlRmlsZUdyb3VwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwx'@;
put 'LTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFWMzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIg'@;
put 'aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAs'@;
put 'MCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLF8uQ2xyU2hhcGVQYXBlcmNsaXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMywwLDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDks'@;
put 'MCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYsMzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSww'@;
put 'LDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUtLjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQu'@;
put 'NjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEsMjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLF8uQ2xyU2hhcGVTaHJpbms9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksXy5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLGcuY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4xLDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4xMiw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCwwLDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSwwLDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAs'@;
put 'MCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzhoMGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAs'@;
put 'Ljc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEt'@;
put 'LjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5'@;
put 'LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4yOSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4x'@;
put 'MiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjks'@;
put 'Ny4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwxMS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMuMzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQz'@;
put 'LDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEs'@;
put 'MCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWExLDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuOTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwz'@;
put 'My4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCwwLC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhh'@;
put 'MSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZVNvcnRCeT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAtMmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywy'@;
put 'MUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1'@;
put 'LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAsMC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAt'@;
put 'MS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4zN2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEs'@;
put 'MCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjdsNC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksXy5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsZy5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcuMzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCww'@;
put 'LDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAs'@;
put 'MCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlQnJpZWZjYXNlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwy'@;
put 'LDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQsNi43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwx'@;
put 'LDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSww'@;
put 'LDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYxOEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAs'@;
put 'MCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2'@;
put 'OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQz'@;
put 'QS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEsLjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZUNvbG9yUGlja2Vy'@;
put 'PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2Ey'@;
put 'LjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4wNywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAs'@;
put 'MS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQu'@;
put 'MDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAsMCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwxNi43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40'@;
put 'MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLGcuY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcuMzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCww'@;
put 'LDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQy'@;
put 'LTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhB'@;
put 'MS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMz'@;
put 'SDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLF8uQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLF8uQ2xyU2hhcGVGaWx0ZXIyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCww'@;
put 'LDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+'@;
put 'XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksXy5DbHJTaGFwZU1vb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0x'@;
put 'LS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQuOTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAs'@;
put 'MzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwxLDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIuMDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZVN1bj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0xOCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAsMiwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4z'@;
put 'Miw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSww'@;
put 'LTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwxLDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAs'@;
put 'MmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQxYTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNsMi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywx'@;
put 'MGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEsMSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4'@;
put 'LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAuMDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05'@;
put 'IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYuNDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAs'@;
put 'MCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0x'@;
put 'LTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYuNDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwyNi4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFMOS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDku'@;
put 'ODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTksOC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC05IiAvPicpLF8uQ2xyU2hhcGVXYW5kPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40'@;
put 'NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwyLjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjha'@;
put 'TTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMtNS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEz'@;
put 'bC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywxLjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSww'@;
put 'LDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAsMCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEu'@;
put 'MTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wxLjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksXy5DbHJT'@;
put 'aGFwZUN1cnNvck1vdmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVh'@;
put 'MSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUuODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5'@;
put 'LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFMMTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlQ2xvbmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIxIDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0'@;
put 'aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAs'@;
put 'MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwzMCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlRGV0YWlscz0oMCxnLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCww'@;
put 'LDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw'@;
put 'YXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiww'@;
put 'LDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwxLDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'IiAvPicpLF8uQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC02IiAvPicpLF8uQ2xyU2hhcGVFcmFzZXI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMy'@;
put 'SDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04'@;
put 'LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBsNy4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwy'@;
put 'OC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCwwLDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgz'@;
put 'LDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgsMTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlTGFuZHNjYXBlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9'@;
put 'Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1'@;
put 'LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wtMS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNs'@;
put 'MS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0xLjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwy'@;
put 'LDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4w'@;
put 'NiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0uMzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZVBhc3RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0'@;
put 'LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVp'@;
put 'Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0'@;
put 'djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBI'@;
put 'Mjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAv'@;
put 'PjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02'@;
put 'IiAvPicpLF8uQ2xyU2hhcGVQb3J0cmFpdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTgu'@;
put 'OCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgtMS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw'@;
put 'YXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAs'@;
put 'MCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEu'@;
put 'MzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlVHJlZVZpZXc9KDAsZy5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAsMS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9'@;
put 'Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSwwLDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwx'@;
put 'LDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJINFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAs'@;
put 'MC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAsMCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCww'@;
put 'LDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCww'@;
put 'LDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksXy5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLGcuY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAsMC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44'@;
put 'OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAs'@;
put 'MCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIu'@;
put 'MzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwxLDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5'@;
put 'aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJjLjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+JyksXy5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2'@;
put 'LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4yOC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3'@;
put 'LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4y'@;
put 'NVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwuNDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgx'@;
put 'Ljh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZhMS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVGaWxlWmlwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIw'@;
put 'LjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMwLDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYuNnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0'@;
put 'YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0xMy40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0xLjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAu'@;
put 'NC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQsMSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwxMS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0w'@;
put 'LjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAuOCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMt'@;
put 'M3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFI'@;
put 'MTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlRmlsdGVyT2ZmPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9'@;
put 'Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJIMzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIuMSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAu'@;
put 'MWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwy'@;
put 'My45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFs'@;
put 'OCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVSZWN5Y2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCww'@;
put 'LjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAuNS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBcblx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCww'@;
put 'LjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTguMywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcu'@;
put 'Nyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwx'@;
put 'LjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0xLjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRc'@;
put 'dGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjktMy4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUu'@;
put 'MiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjkt'@;
put 'My42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAuMy0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0wLjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwy'@;
put 'LjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAsMC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJsNy00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4xYy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTItMS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQs'@;
put 'MC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0wLjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCww'@;
put 'LjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEuOCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4y'@;
put 'LTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEtMC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0'@;
put 'XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAuNSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAu'@;
put 'MS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4xLDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2'@;
put 'LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIyLjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlVHJlZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43'@;
put 'QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0xMywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0x'@;
put 'LTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01'@;
put 'LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQuOSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAu'@;
put 'OCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcuNywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQt'@;
put 'MC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wzLjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxf'@;
put 'LkNsclNoYXBlRmlzaD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44'@;
put 'MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEu'@;
put 'OTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZjLTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0u'@;
put 'MTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBhMjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4x'@;
put 'MywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkExLDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVGb3JtPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSww'@;
put 'LDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEs'@;
put 'MCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCwwLDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEy'@;
put 'LjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFhMSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAs'@;
put 'MCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCww'@;
put 'LDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCwwLDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxfLkNsclNoYXBlRnVlbD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEu'@;
put 'MTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcuODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUsMy41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1'@;
put 'LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCwwLDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0x'@;
put 'OCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEsMSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLF8uQ2xyU2hhcGVTbm93Zmxha2U9KDAsZy5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSwwLDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYzQTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4w'@;
put 'NywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwz'@;
put 'MS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAuODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQyTDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEsMSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00'@;
put 'IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwyLjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJMMTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxw'@;
put 'YXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQuOCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIuOS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAsMCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYsMSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTci'@;
put 'IC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4yNiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0uNzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxfLkNsclNoYXBlVGFibGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAsMCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEt'@;
put 'MVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMz'@;
put 'YTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxfLkNsclNoYXBlVm9sdW1lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEt'@;
put 'LjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCwwLDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwx'@;
put 'LDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJN'@;
put 'MjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxfLkNsclNoYXBlQ3Jvc3NoYWlycz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh'@;
put 'dGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwxLDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAs'@;
put 'MSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMu'@;
put 'MSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksXy5DbHJTaGFwZUNpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYs'@;
put 'MCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZURvdENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0'@;
put 'aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVCZXRhPSgwLGcuY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYxLDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQsMS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdz'@;
put 'LS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZI'@;
put 'MTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4zOC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpNMjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTgu'@;
put 'MDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcuMDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAs'@;
put 'MCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgxOVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwxNy41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBjMC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0wLjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAuNywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiww'@;
put 'LTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwzMGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAu'@;
put 'NCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjktMC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEsMCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwx'@;
put 'NS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4yaC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3YtNC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4'@;
put 'LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4nKSxfLkNsclNoYXBlRmlyc3RBaWQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZI'@;
put 'NEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgxNi43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMs'@;
put 'MS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCwwLDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYu'@;
put 'OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEy'@;
put 'LDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQuNWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41'@;
put 'YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxfLkNsclNo'@;
put 'YXBlQ29sb3JQYWxldHRlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0xLjc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgs'@;
put 'Mi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSwwLDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQxLDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4x'@;
put 'LDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEuMUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcy'@;
put 'LDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAtNC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwxLDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43Miwy'@;
put 'LjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgtLjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcsNC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIy'@;
put 'LDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYsNCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAt'@;
put 'LjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4zOS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4zNy01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEuNTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44Myww'@;
put 'LDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEu'@;
put 'MTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYsMS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAsMCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAs'@;
put 'MS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxNS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0u'@;
put 'NS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3'@;
put 'LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4w'@;
put 'NmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYsMi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2'@;
put 'LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwxLjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMuNDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAs'@;
put 'MC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRzLTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwy'@;
put 'Ljg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAsMCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUu'@;
put 'NTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQuMUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYuNTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMs'@;
put 'MzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIzLDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAsMS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAs'@;
put 'MSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwyLjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCwwLDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwy'@;
put 'Ljg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwyLjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4y'@;
put 'MiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEtMi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIsMi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAs'@;
put 'MCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIsMy4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uRXNzZW50aWFsU2hhcGVzPXsi'@;
put 'YWRkLXRleHQiOl8uQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYiOl8uQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpfLkNsclNoYXBlUGluYm9hcmQsbmV3Ol8uQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6Xy5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXci'@;
put 'Ol8uQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpfLkNsclNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpfLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOl8uQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOl8uQ2xyU2hh'@;
put 'cGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6Xy5DbHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6Xy5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6Xy5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpfLkNsclNoYXBlUmVzaXplLG9iamVjdHM6Xy5DbHJT'@;
put 'aGFwZU9iamVjdHMsYm9vazpfLkNsclNoYXBlQm9vayxhc3RlcmlzazpfLkNsclNoYXBlQXN0ZXJpc2ssYnVnOl8uQ2xyU2hhcGVCdWcsc2Npc3NvcnM6Xy5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOl8uQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6Xy5DbHJTaGFwZVBlbmNpbCxu'@;
put 'b3RlOl8uQ2xyU2hhcGVOb3RlLHJlZnJlc2g6Xy5DbHJTaGFwZVJlZnJlc2gsc3luYzpfLkNsclNoYXBlU3luYywidmlldy1saXN0IjpfLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOl8uQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6Xy5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0'@;
put 'YnVsYjpfLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOl8uQ2xyU2hhcGVEb3dubG9hZCx1cGxvYWQ6Xy5DbHJTaGFwZVVwbG9hZCxsb2NrOl8uQ2xyU2hhcGVMb2NrLHVubG9jazpfLkNsclNoYXBlVW5sb2NrLHVzZXJzOl8uQ2xyU2hhcGVVc2VycywicG9wLW91dCI6Xy5DbHJTaGFwZVBv'@;
put 'cE91dCxmaWx0ZXI6Xy5DbHJTaGFwZUZpbHRlcixwaW46Xy5DbHJTaGFwZVBpbixmaWxlOl8uQ2xyU2hhcGVGaWxlLHBsdXM6Xy5DbHJTaGFwZVBsdXMsbWludXM6Xy5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOl8uQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOl8uQ2xy'@;
put 'U2hhcGVQbHVzQ2lyY2xlLGJhbjpfLkNsclNoYXBlQmFuLCJ0aW1lcy1jaXJjbGUiOl8uQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDpfLkNsclNoYXBlVHJhc2gsY2lyY2xlOl8uQ2xyU2hhcGVDaXJjbGUsdGFnOl8uQ2xyU2hhcGVUYWcsdGFnczpfLkNsclNoYXBlVGFncyxoaXN0b3J5Ol8u'@;
put 'Q2xyU2hhcGVIaXN0b3J5LGNsb2NrOl8uQ2xyU2hhcGVDbG9jaywiYWxhcm0tY2xvY2siOl8uQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OkIuQ2xyU2hhcGVBcnJvdywiY2lyY2xlLWFycm93IjpfLkNsclNoYXBlQ2lyY2xlQXJyb3csImNoaWxkLWFycm93IjpfLkNsclNoYXBlQ2hpbGRBcnJv'@;
put 'dyxjb3B5Ol8uQ2xyU2hhcGVDb3B5LGhlbHA6Xy5DbHJTaGFwZUhlbHAsbG9naW46Xy5DbHJTaGFwZUxvZ2luLGxvZ291dDpfLkNsclNoYXBlTG9nb3V0LHByaW50ZXI6Xy5DbHJTaGFwZVByaW50ZXIsd29ybGQ6Xy5DbHJTaGFwZVdvcmxkLHNsaWRlcjpfLkNsclNoYXBlU2xpZGVyLGNsaXBi'@;
put 'b2FyZDpfLkNsclNoYXBlQ2xpcGJvYXJkLGZpcmV3YWxsOl8uQ2xyU2hhcGVGaXJld2FsbCxsaXN0Ol8uQ2xyU2hhcGVMaXN0LHJlZG86Xy5DbHJTaGFwZVJlZG8sdW5kbzpfLkNsclNoYXBlVW5kbyxzY3JvbGw6Xy5DbHJTaGFwZVNjcm9sbCwiZmlsZS1zZXR0aW5ncyI6Xy5DbHJTaGFwZUZp'@;
put 'bGVTZXR0aW5ncywidHdvLXdheS1hcnJvd3MiOl8uQ2xyU2hhcGVUd29XYXlBcnJvd3Msc3dpdGNoOl8uQ2xyU2hhcGVTd2l0Y2gsdG9vbHM6Xy5DbHJTaGFwZVRvb2xzLCJ3aW5kb3ctY2xvc2UiOl8uQ2xyU2hhcGVXaW5kb3dDbG9zZSwid2luZG93LW1heCI6Xy5DbHJTaGFwZVdpbmRvd01h'@;
put 'eCwid2luZG93LW1pbiI6Xy5DbHJTaGFwZVdpbmRvd01pbiwid2luZG93LXJlc3RvcmUiOl8uQ2xyU2hhcGVXaW5kb3dSZXN0b3JlLCJ6b29tLWluIjpfLkNsclNoYXBlWm9vbUluLCJ6b29tLW91dCI6Xy5DbHJTaGFwZVpvb21PdXQsa2V5Ol8uQ2xyU2hhcGVLZXksbGlicmFyeTpfLkNsclNo'@;
put 'YXBlTGlicmFyeSxib2x0Ol8uQ2xyU2hhcGVCb2x0LHdyZW5jaDpfLkNsclNoYXBlV3JlbmNoLGJ1bGxzZXllOl8uQ2xyU2hhcGVCdWxsc2V5ZSx0YXJnZXQ6Xy5DbHJTaGFwZVRhcmdldCxmbGFtZTpfLkNsclNoYXBlRmxhbWUsaG91cmdsYXNzOl8uQ2xyU2hhcGVIb3VyZ2xhc3MsIm5vLWFj'@;
put 'Y2VzcyI6Xy5DbHJTaGFwZU5vQWNjZXNzLG9yZ2FuaXphdGlvbjpfLkNsclNoYXBlT3JnYW5pemF0aW9uLGJhbGFuY2U6Xy5DbHJTaGFwZUJhbGFuY2UsImlkLWJhZGdlIjpfLkNsclNoYXBlSWRCYWRnZSxyZXBlYXQ6Xy5DbHJTaGFwZVJlcGVhdCwiZmlsZS1ncm91cCI6Xy5DbHJTaGFwZUZp'@;
put 'bGVHcm91cCxwYXBlcmNsaXA6Xy5DbHJTaGFwZVBhcGVyY2xpcCxzaHJpbms6Xy5DbHJTaGFwZVNocmluaywiYWNjZXNzaWJpbGl0eS0xIjpfLkNsclNoYXBlQWNjZXNzaWJpbGl0eTEsImFjY2Vzc2liaWxpdHktMiI6Xy5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyLCJzb3J0LWJ5IjpfLkNsclNo'@;
put 'YXBlU29ydEJ5LCJjb2xsYXBzZS1jYXJkIjpfLkNsclNoYXBlQ29sbGFwc2VDYXJkLCJleHBhbmQtY2FyZCI6Xy5DbHJTaGFwZUV4cGFuZENhcmQsYnJpZWZjYXNlOl8uQ2xyU2hhcGVCcmllZmNhc2UsImNvbG9yLXBpY2tlciI6Xy5DbHJTaGFwZUNvbG9yUGlja2VyLCJjb3B5LXRvLWNsaXBi'@;
put 'b2FyZCI6Xy5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZCwiZmlsdGVyLTIiOl8uQ2xyU2hhcGVGaWx0ZXIyLCJkcmFnLWhhbmRsZSI6Xy5DbHJTaGFwZURyYWdIYW5kbGUsbW9vbjpfLkNsclNoYXBlTW9vbixzdW46Xy5DbHJTaGFwZVN1bix3YW5kOl8uQ2xyU2hhcGVXYW5kLGNsb25lOl8uQ2xy'@;
put 'U2hhcGVDbG9uZSxkZXRhaWxzOl8uQ2xyU2hhcGVEZXRhaWxzLCJkcmFnLWhhbmRsZS1jb3JuZXIiOl8uQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyLGVyYXNlcjpfLkNsclNoYXBlRXJhc2VyLGxhbmRzY2FwZTpfLkNsclNoYXBlTGFuZHNjYXBlLHBhc3RlOl8uQ2xyU2hhcGVQYXN0ZSxwb3J0'@;
put 'cmFpdDpfLkNsclNoYXBlUG9ydHJhaXQsImZpbGUtemlwIjpfLkNsclNoYXBlRmlsZVppcCwiZmlsdGVyLW9mZiI6Xy5DbHJTaGFwZUZpbHRlck9mZixyZWN5Y2xlOl8uQ2xyU2hhcGVSZWN5Y2xlLHRyZWU6Xy5DbHJTaGFwZVRyZWUsZmlzaDpfLkNsclNoYXBlRmlzaCxmb3JtOl8uQ2xyU2hh'@;
put 'cGVGb3JtLGZ1ZWw6Xy5DbHJTaGFwZUZ1ZWwsc25vd2ZsYWtlOl8uQ2xyU2hhcGVTbm93Zmxha2UsdGFibGU6Xy5DbHJTaGFwZVRhYmxlLCJkb3QtY2lyY2xlIjpfLkNsclNoYXBlRG90Q2lyY2xlLHZvbHVtZTpfLkNsclNoYXBlVm9sdW1lLGNyb3NzaGFpcnM6Xy5DbHJTaGFwZUNyb3NzaGFp'@;
put 'cnMsYmV0YTpfLkNsclNoYXBlQmV0YSwiY29sb3ItcGFsZXR0ZSI6Xy5DbHJTaGFwZUNvbG9yUGFsZXR0ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uRXNzZW50aWFsU2hhcGVzLCJlZGl0IiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLnBlbmNpbCkpLE9iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywibm90ZS1lZGl0IiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLm5vdGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Fc3NlbnRpYWxTaGFwZXMsImdyb3VwIiwoMCx5LmRlc2NyaXB0b3JDb25maWcp'@;
put 'KF8uRXNzZW50aWFsU2hhcGVzLnVzZXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uRXNzZW50aWFsU2hhcGVzLCJkb2N1bWVudCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkVzc2VudGlhbFNoYXBlcy5maWxlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uRXNzZW50aWFsU2hhcGVz'@;
put 'LCJhZGQiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Fc3NlbnRpYWxTaGFwZXMucGx1cykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywiY2FuY2VsIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLmJhbikpLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywicmVtb3ZlIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzWyJ0aW1lcy1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywic2lnbi1pbiIsKDAseS5kZXNjcmlwdG9yQ29uZmln'@;
put 'KShfLkVzc2VudGlhbFNoYXBlcy5sb2dpbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywic2lnbi1vdXQiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Fc3NlbnRpYWxTaGFwZXMubG9nb3V0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uRXNzZW50aWFsU2hh'@;
put 'cGVzLCJsaWdodG5pbmciLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Fc3NlbnRpYWxTaGFwZXMuYm9sdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywiZmxvdy1jaGFydCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkVzc2VudGlhbFNoYXBlcy5vcmdhbml6'@;
put 'YXRpb24pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Fc3NlbnRpYWxTaGFwZXMsImFsZXJ0IiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzWyJidWJibGUtZXhjbGFtYXRpb24iXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywicGlu'@;
put 'bmVkIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLnBpbmJvYXJkKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uRXNzZW50aWFsU2hhcGVzLCJhdHRhY2htZW50IiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLnBhcGVyY2xpcCkpLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS1kb3duIiwoMCx5LmRl'@;
put 'c2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLnNocmluaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywicmVzaXplLXVwIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLnJlc2l6ZSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3'@;
put 'aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChfLkVzc2VudGlhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov'@;
put 'Ci8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uTWVkaWFTaGFwZXM9Xy5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPV8uQ2xyU2hhcGVNaWNyb3Bo'@;
put 'b25lPV8uQ2xyU2hhcGVWaWRlb0dhbGxlcnk9Xy5DbHJTaGFwZVJlcGxheU9uZT1fLkNsclNoYXBlUmVwbGF5QWxsPV8uQ2xyU2hhcGVJbWFnZUdhbGxlcnk9Xy5DbHJTaGFwZU11c2ljTm90ZT1fLkNsclNoYXBlRmlsbVN0cmlwPV8uQ2xyU2hhcGVIZWFkcGhvbmVzPV8uQ2xyU2hhcGVWb2x1'@;
put 'bWVNdXRlPV8uQ2xyU2hhcGVWb2x1bWVVcD1fLkNsclNoYXBlVm9sdW1lRG93bj1fLkNsclNoYXBlU2h1ZmZsZT1fLkNsclNoYXBlVmlkZW9DYW1lcmE9Xy5DbHJTaGFwZUNhbWVyYT1fLkNsclNoYXBlRmFzdEZvcndhcmQ9Xy5DbHJTaGFwZVJld2luZD1fLkNsclNoYXBlUG93ZXI9Xy5DbHJT'@;
put 'aGFwZVN0b3A9Xy5DbHJTaGFwZVN0ZXBGb3J3YXJkPV8uQ2xyU2hhcGVQYXVzZT1fLkNsclNoYXBlUGxheT12b2lkIDA7dmFyIHk9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO18u'@;
put 'Q2xyU2hhcGVQbGF5PSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC4wNywzMS42QTIuMDcsMi4wNywwLDAsMSw2LDI5LjUzVjYuMzJBMi4wNywyLjA3LDAsMCwxLDksNC40N0wzMi4yMSwxNi4wOGEyLjA3LDIu'@;
put 'MDcsMCwwLDEsMCwzLjdMOSwzMS4zOEEyLjA2LDIuMDYsMCwwLDEsOC4wNywzMS42Wm0wLTI1LjM0TDgsNi4zMlYyOS41M2wuMS4wNkwzMS4zMSwxOGEuMDYuMDYsMCwwLDAsMC0uMDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIgZD0iTTMyLjE2LDE2LjA4LDguOTQsNC40N0EyLjA3LDIuMDcsMCwwLDAsNiw2LjMyVjI5LjUzYTIuMDYsMi4wNiwwLDAsMCwzLDEuODVMMzIuMTYsMTkuNzdhMi4wNywyLjA3LDAsMCwwLDAtMy43WiIvPicpLF8uQ2xyU2hhcGVQYXVzZT0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLjkzLDMySDYuMDdBMi4wNywyLjA3LDAsMCwxLDQsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsNi4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDE1LDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDEy'@;
put 'LjkzLDMyWk0xMyw2SDZWMzBoN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LjkzLDMySDIzLjA3QTIuMDcsMi4wNywwLDAsMSwyMSwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSwyMy4wNyw0aDYu'@;
put 'ODdBMi4wNywyLjA3LDAsMCwxLDMyLDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDI5LjkzLDMyWk0zMCw2SDIzVjMwaDdaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NSIgeT0iNCIgd2lkdGg9IjExIiBo'@;
put 'ZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMC45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz4nKSxfLkNsclNo'@;
put 'YXBlU3RlcEZvcndhcmQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik01LDMyLjIzYTIsMiwwLDAsMS0yLTJWNS43N0EyLDIsMCwwLDEsNi4xNyw0LjE0TDIzLjIzLDE2LjM4YTIsMiwwLDAsMSwwLDMuMjVoMEw2'@;
put 'LjE3LDMxLjg2QTIsMiwwLDAsMSw1LDMyLjIzWk01LDUuNzdWMzAuMjNMMjIuMDcsMThaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMSwzMkgyOGEyLDIsMCwwLDEtMi0yVjZhMiwyLDAsMCwxLDItMmgz'@;
put 'YTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMxLDMyWk0yOCw2VjMwaDNWNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNSwzMS45YTIsMiwwLDAsMS0yLTJWNS40NEEyLDIsMCwwLDEsNi4xMiwzLjgxTDIz'@;
put 'LjE4LDE2YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjEyLDMxLjUyQTIsMiwwLDAsMSw1LDMxLjlaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjUuOTUiIHk9IjMuNjciIHdpZHRoPSI3IiBoZWlnaHQ9IjI4IiByeD0i'@;
put 'MiIgcnk9IjIiLz4nKSxfLkNsclNoYXBlU3RvcD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDMySDZhMiwyLDAsMCwxLTItMlY2QTIsMiwwLDAsMSw2LDRIMzBhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCww'@;
put 'LDEsMzAsMzJaTTYsNlYzMEgzMFY2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTYiIHk9IjQiIHdpZHRoPSIyNy45OSIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksXy5DbHJTaGFwZVBvd2VyPSgw'@;
put 'LHkuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMTVhMTUsMTUsMCwwLDEtNy41Mi0yOCwxLDEsMCwwLDEsMSwxLjczLDEzLDEzLDAsMSwwLDEzLDAsMSwxLDAsMSwxLDEtMS43MywxNSwxNSwwLDAsMS03LjUyLDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTgsMjFhMSwxLDAsMCwwLDEtMVY0YTEsMSwwLDAsMC0yLDBWMjBBMSwxLDAsMCwwLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTEsMTUuNEgzMC40NGExMywxMywwLDEsMS0xOS03LjUsMSwxLDAsMCwwLTEtMS43M0ExNSwxNSwwLDEsMCwzMywxOS4xNSwxNC45LDE0LjksMCwwLDAsMzIuNTEsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx'@;
put 'LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSww'@;
put 'LDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41bC0uMzEsMEExMywxMywwLDEsMSwxMS40OCw3LjlhMSwxLDAsMCwwLTEtMS43MywxNSwxNSwwLDEs'@;
put 'MCwyMS4zMSw3LjFBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0uMDYsMTcuNjhhMS4yOCwxLjI4LDAsMCwxLTEuMjktMS4yOFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBW'@;
put 'MTguNEExLjI4LDEuMjgsMCwwLDEsMTguMDYsMTkuNjhaTTE4LDI3Ljc5QTkuODgsOS44OCwwLDAsMSwxMi4xNyw5Ljg1YTEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2'@;
put 'QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuNCwxLjQsMCwwLDEsMS45NC0uMjlBOS44OCw5Ljg4LDAsMCwxLDE4LDI3Ljc5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42'@;
put 'OCwxNS40aC02QTkuNyw5LjcsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQuMzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wOCw3LjA4LDAsMCwwLS40NS0yLjQ5SDIyLjIzQTMuNjksMy42'@;
put 'OSwwLDAsMSwxOS4zNSwxNHY0LjRhMS4yOSwxLjI5LDAsMCwxLTIuNTgsMFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDB2LjcxbDMuNzYtNi41MUExNiwxNiwwLDEsMCwzNCwxOGExNiwxNiwwLDAsMC0uMjMtMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2'@;
put 'Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0zLjU3LS45QTkuODMsOS44MywwLDAsMSwyOCwxNy44OWExMCwxMCwwLDEsMS0x'@;
put 'NS44My04LDEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuMzgsMS4zOCwwLDAsMSwxLjUyLS40OSw3LjQ1LDcuNDUsMCww'@;
put 'LDEtLjMtNi44MywxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE2Ljc3LDguNjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgsMFYxOC40YTEuMjksMS4yOSwwLDAsMS0yLjU4LDBaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLF8uQ2xyU2hhcGVSZXdpbmQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0xNy4wOSwzMS41OGwtMTUuMzItMTJhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMS43NywxLjc3LDAsMCwxLDIwLDZ2Ni43TDMwLjgzLDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzNCw2VjMwYTIsMiwwLDAs'@;
put 'MS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuNzcsMS43NywwLDAsMS0uODUsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaTTMyLDMwbC4wNi0yNEwxOCwxNi44VjZMMywxOCwxOCwzMFYxOS4yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE2LjkyLDMxLjU4LDEuNiwxOS41N2EyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyQTEuOTMsMS45MywwLDAsMSwxOSw0LjIsMS44OSwxLjg5LDAsMCwxLDIwLDZ2Ni43TDMwLjY2LDQuNDJhMS45MywxLjkzLDAsMCwxLDIu'@;
put 'MDYtLjIyQTIsMiwwLDAsMSwzMy44Myw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuODksMS44OSwwLDAsMS0xLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWiIvPicpLF8uQ2xyU2hhcGVGYXN0Rm9yd2FyZD0oMCx5'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3Ljc3LDMxLjkyYTIsMiwwLDAsMS0uODYtLjJBMS44MSwxLjgxLDAsMCwxLDE2LDI5Ljkzdi02LjdMNS4yNCwzMS41YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyLDIsMiww'@;
put 'LDAsMS0xLjExLTEuNzl2LTI0QTIsMiwwLDAsMSwzLjE4LDQuMTJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjFWNS45MWExLjgxLDEuODEsMCwwLDEsLjkxLTEuNzlBMS45MywxLjkzLDAsMCwxLDE5LDQuMzRsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNUwxOSwzMS41QTIsMiww'@;
put 'LDAsMSwxNy43NywzMS45MlptMC0xMi44VjI5LjkzbDE1LjI2LTEyLTE1LjMyLTEyLC4wNiwxMC44MUw0LDUuOTF2MjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuNzEsMzJhMiwyLDAsMCwxLS44Ni0uMkExLjc3'@;
put 'LDEuNzcsMCwwLDEsMTYsMzB2LTYuN0w1LjE3LDMxLjU4YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyQTIsMiwwLDAsMSwyLDMwVjZBMiwyLDAsMCwxLDMuMTEsNC4yYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjY5VjZhMS43NywxLjc3LDAsMCwxLC44NS0xLjc5LDEuOTMsMS45Myww'@;
put 'LDAsMSwyLjA2LjIybDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVsLTE1LjMyLDEyQTIsMiwwLDAsMSwxNy43MSwzMloiLz4nKSxfLkNsclNoYXBlQ2FtZXJhPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEy'@;
put 'LDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDIySDRWMTBoOC42N2wxLjU1LTRoNy41NmwxLjU1LDRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksMTlhOSw5LDAsMSwwLDktOUE5LDksMCwwLDAsOSwxOVptMTYuNCwwQTcuNCw3LjQsMCwxLDEsMTgsMTEuNiw3LjQxLDcuNDEsMCwwLDEsMjUuNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS4zNywxMi44M2EuOC44LDAsMCwwLS44LS44SDYuMTdhLjguOCwwLDAsMCwwLDEuNmgyLjRBLjguOCwwLDAsMCw5LjM3LDEyLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0xMi4zNCwxOWE1LjU3LDUuNTcsMCwwLDAsMy4yNCw1bC44NS0xLjM3YTQsNCwwLDEsMSw0LjExLTYuNjFsLjg2LTEuMzhBNS41Niw1LjU2LDAsMCwwLDEyLjM0LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk02LjE3LDEzLjYzYS44'@;
put 'LjgsMCwwLDEsMC0xLjZoMi40YS44LjgsMCwwLDEsMCwxLjZaTTE4LDI4YTksOSwwLDEsMSw5LTlBOSw5LDAsMCwxLDE4LDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjExLDE5LjA2YTcuMDcsNy4wNywwLDAs'@;
put 'MCw0LjExLDYuNDFsMS4wOS0xLjc0YTUsNSwwLDEsMSw1LjIyLTguMzlsMS4wOS0xLjc2YTcuMDYsNy4wNiwwLDAsMC0xMS41MSw1LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLF8uQ2xyU2hhcGVWaWRlb0NhbWVyYT0oMCx5LmNsckljb25TVkcpKCc8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDEwLjM0YTIuMTEsMi4xMSwwLDAsMC0xLjE2LTEuOSwyLDIsMCwwLDAtMi4xMy4xNUwyNiwxMS42VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEy'@;
put 'LDIsMCwwLDAsMi0yVjI0LjRsNC42NCwzYTIuMDcsMi4wNywwLDAsMCwyLjIuMkEyLjExLDIuMTEsMCwwLDAsMzQsMjUuNjZaTTMxLjkzLDI1Ljc3Yy0uMDYsMC0uMTEsMC0uMTktLjA2TDI0LDIwLjc3VjI4SDZhMiwyLDAsMCwxLTItMlYxMEEyLDIsMCwwLDEsNiw4SDI0djcuMjNsNy44LTVh'@;
put 'LjExLjExLDAsMCwxLC4xMywwLC4xMS4xMSwwLDAsMSwuMDcuMTFWMjUuNjZBLjExLjExLDAsMCwxLDMxLjkzLDI1Ljc3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMsOS4zNSwyNiwxMi45VjhhMiwyLDAsMCww'@;
put 'LTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjIzLjA4bDYuMywzLjU1QTEuMSwxLjEsMCwwLDAsMzQsMjUuNzdWMTAuMkExLjEsMS4xLDAsMCwwLDMyLjMsOS4zNVoiLz4nKSxfLkNsclNoYXBlU2h1ZmZsZT0oMCx5LmNsckljb25TVkcpKCc8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIxLjYxLDExaDguNjJsLTMuMywzLjNhMSwxLDAsMSwwLDEuNDEsMS40MkwzNCwxMC4wOGwtLjcxLS43MWgwTDI4LjM0LDQuNDNhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xMSw5SDIxYTEsMSwwLDAs'@;
put 'MC0uODYuNUwxNy41LDE0LjA5bDEuMTYsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuMDcsMjUuMDdIM2ExLDEsMCwwLDAsMCwyaDguNjVhMSwxLDAsMCwwLC44Ni0uNUwxNS4xOCwyMiwxNCwyMFoiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjguMzQsMjAuMTdhMSwxLDAsMCwwLTEuNDEsMS40MmwzLjUsMy41SDIxLjYxTDEyLjUxLDkuNTNhMSwxLDAsMCwwLS44Ni0uNUgzYTEsMSwwLDEsMCwwLDJoOC4wN2w5LjEs'@;
put 'MTUuNTVhMSwxLDAsMCwwLC44Ni41SDI5LjlsLTMsM2ExLDEsMCwwLDAsMS40MSwxLjQybDQuOTUtNC45NGgwbC43MS0uNzFaIi8+JyksXy5DbHJTaGFwZVZvbHVtZURvd249KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwyNSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDMyYTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjQxQTIsMiwwLDAsMSwyMCw2VjMwYTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMy'@;
put 'Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjI4TDE4LDMwVjZsLTcuNjUsNy42OGExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0x'@;
put 'Ljg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LjM0'@;
put 'LDMuODcsOSwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVY0LjYyQTEsMSwwLDAsMCwxOC4zNCwzLjg3WiIvPicpLF8uQ2xyU2hhcGVWb2x1bWVVcD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYuMjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEsMCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs'@;
put 'MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDMyLjA2YTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4z'@;
put 'My03LjM5QTIsMiwwLDAsMSwyMCw2djI0YTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyLjA2Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjNMMTgsMzAuMDZWNkwxMC4zNSwxMy43YTEsMSwwLDAsMS0uNzEuM1pNMTgsNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEs'@;
put 'MCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMTguMzMsNCw5LjA3LDEyaC02YTEsMSwwLDAsMC0xLDF2OS45MmExLDEsMCwwLDAsMSwxSDguODhsOS40Niw4LjI0QTEsMSwwLDAsMCwyMCwz'@;
put 'MS40M1Y0LjcyQTEsMSwwLDAsMCwxOC4zMyw0WiIvPicpLF8uQ2xyU2hhcGVWb2x1bWVNdXRlPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMy42MSw2LjQxLDkuMTksMTJINGEyLDIsMCwwLDAtMiwydjhhMiwy'@;
put 'LDAsMCwwLDIsMkg5LjE0bDcuNDEsNy40N0EyLDIsMCwwLDAsMTgsMzJhMiwyLDAsMCwwLC43Ni0uMTVBMiwyLDAsMCwwLDIwLDMwVjIyLjc3bDUuODksNS44OWMtLjI1LjE1LS40OS4yOS0uNzUuNDJhMSwxLDAsMCwwLC45LDEuNzksMTQuNCwxNC40LDAsMCwwLDEuMzEtLjc1bDIuMjgsMi4y'@;
put 'OEwzMSwzMSw1LDVaTTE4LDMwbC03LjczLTcuNzdBMSwxLDAsMCwwLDkuNTYsMjJINFYxNEg5LjY0YTEsMSwwLDAsMCwuNzEtLjNsLjI2LS4yNkwxOCwyMC44MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQu'@;
put 'ODksNi42OUExMi40MiwxMi40MiwwLDAsMSwyOSwyNi4xbDEuNDIsMS40MkExNC40MiwxNC40MiwwLDAsMCwyNS43Niw0Ljg4YTEsMSwwLDEsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi42'@;
put 'OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS4yNCwzLjcxTDI2LDIzLjEzQTguMTUsOC4xNSwwLDAsMCwyNy44LDE4YTguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCw2djkuMTVsMiwyVjZhMiwyLDAsMCwwLTMuNDItMS40MUwxMiw5LjE3bDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNC44Nyw2'@;
put 'LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI4Ljc1LDI2LjNsMS40MiwxLjQyQTE0LjQzLDE0LjQzLDAsMCwwLDI1Ljc0LDQuODhhMSwxLDAsMCwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjcuMywyNy42'@;
put 'N2gwbC0zLjg0LTMuODQtLjU3LS41N2gwTDQuNjMsNSwzLjIxLDYuNDEsOC44LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEsMCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIwLDMxLjU1VjIzLjJsNS41OSw1LjU5Yy0uMTcuMS0uMzQuMi0uNTEuMjlhMSwxLDAsMCwwLC45LDEu'@;
put 'NzljLjM3LS4xOS43Mi0uNCwxLjA4LS42MmwyLjE0LDIuMTRMMzAuNjEsMzFsLTMuMjUtMy4yNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYu'@;
put 'MTcsMCwwLDEtMS40MiwzLjkybDEuNDIsMS40MmE4LjE2LDguMTYsMCwwLDAsMi01LjM0LDguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIwLDQu'@;
put 'NjJhMSwxLDAsMCwwLTEuNjYtLjc1bC02LjQyLDUuNkwyMCwxNy41NFoiLz4nKSxfLkNsclNoYXBlSGVhZHBob25lcz0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwx'@;
put 'Ny41VjMxSDkuMkEyLjc0LDIuNzQsMCwwLDAsMTIsMjguMzNWMjEuNjdBMi43NCwyLjc0LDAsMCwwLDkuMiwxOUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjE5SDI2LjhBMi43NCwyLjc0LDAsMCwwLDI0LDIxLjY3djYuNjdBMi43NCwy'@;
put 'Ljc0LDAsMCwwLDI2LjgsMzFIMzJWMTcuNUExNC4yNywxNC4yNywwLDAsMCwxOCwzWk05LjIsMjFhLjc1Ljc1LDAsMCwxLC44LjY3djYuNjdhLjc1Ljc1LDAsMCwxLS44LjY3SDZWMjFaTTI2LDI4LjMzVjIxLjY3YS43NS43NSwwLDAsMSwuOC0uNjdIMzB2OEgyNi44QS43NS43NSwwLDAsMSwy'@;
put 'NiwyOC4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg4LjJBMS43NCwxLjc0LDAsMCwwLDEwLDI5LjMzVjIyLjY3QTEuNzQsMS43NCwwLDAsMCw4LjIsMjFI'@;
put 'NlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYyMUgyNy44QTEuNzQsMS43NCwwLDAsMCwyNiwyMi42N3Y2LjY3QTEuNzQsMS43NCwwLDAsMCwyNy44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcsMCwwLDAsMTgsM1oiLz4nKSxfLkNsclNoYXBl'@;
put 'RmlsbVN0cmlwPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRabTAsMjZINlY2SDMw'@;
put 'WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNC42LDIzLjA3YTEuMjksMS4yOSwwLDAsMCwxLjI0LjA5bDguNzMtNGExLjMsMS4zLDAsMCwwLDAtMi4zN2gwbC04LjczLTRBMS4zLDEuMywwLDAsMCwxNCwxNHY4'@;
put 'QTEuMjksMS4yOSwwLDAsMCwxNC42LDIzLjA3Wm0xLTguNkwyMy4zMSwxOCwxNS42LDIxLjUxWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjgiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxNCIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIwIiB5PSI3IiB3'@;
put 'aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjYiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC03IiB4PSI4IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjE0IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjIwIiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSIyNiIgeT0iMjYiIHdp'@;
put 'ZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjAsN2gydjNI'@;
put 'MjBaTTE0LDdoMnYzSDE0Wk0xMCwyOUg4VjI2aDJabTAtMTlIOFY3aDJabTYsMTlIMTRWMjZoMlptNiwwSDIwVjI2aDJabTMuMTYtMTAuMTZMMTUuMzksMjMuMkExLDEsMCwwLDEsMTQsMjIuMjhWMTMuNTdhMSwxLDAsMCwxLDEuNDEtLjkxTDI1LjE2LDE3QTEsMSwwLDAsMSwyNS4xNiwxOC44'@;
put 'NFpNMjgsMjlIMjZWMjZoMlptMC0xOUgyNlY3aDJaIi8+JyksXy5DbHJTaGFwZU11c2ljTm90ZT0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMt'@;
put 'MTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4zNGE1Ljg5LDUuODksMCwwLDAtLjgyLS41Niw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFDNy41NywyMi43LDQuOTIsMjYuNSw1Ljc4LDI5Ljg0YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5'@;
put 'LjU0LDAsMCwwLDE1LDMzLjU3YzMuNjctMS4xOCw2LjE3LTQuMzMsNi4wNi03LjM2VjkuMzRhMjkuMTQsMjkuMTQsMCwwLDEsNi41NSwxLjQzLDEsMSwwLDEsMCwuNzItMS44N0EzMS4zNywzMS4zNywwLDAsMCwyMSw3LjMzVjQuMTdjMy4zMy4zNiw4LDEuMzgsOC45MiwzLDIsMy40MS0yLjMz'@;
put 'LDcuMzYtMi4zNyw3LjRhMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaTTE0LjM1LDMxLjY3YTYuNDMsNi40MywwLDAsMS01LS4yNiwzLjMxLDMuMzEsMCwwLDEtMS42OS0yLjA3Yy0uNi0yLjMzLDEuNDUtNS4wNSw0LjU4LTYuMDZhNy41Miw3LjUy'@;
put 'LDAsMCwxLDIuMy0uMzcsNS41Miw1LjUyLDAsMCwxLDIuNjUuNjIsMy4zMSwzLjMxLDAsMCwxLDEuNjksMi4wN0MxOS41NCwyNy45NCwxNy40OSwzMC42NiwxNC4zNSwzMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4g'@;
put 'ICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMjlhNS44OCw1Ljg4LDAsMCwwLS44MS0uNTUsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxYy00LjEyLDEuMzMtNi43Nyw1LjEzLTUuOTEsOC40N2E1LjMzLDUuMzMsMCwwLDAs'@;
put 'Mi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41MmMzLjctMS4xOSw2LjItNC4zNyw2LjA2LTcuNDIsMCwwLDAsMCwwLDBWOC40OWMxLC4xMiwyLjM3LjMzLDMuODIuNjRhMTEuMTcsMTEuMTcsMCwwLDEsNC4wNiwxLjQ2YzEsLjY2LjM4LDEu'@;
put 'OS4zMywyYTExLjgsMTEuOCwwLDAsMS0xLjY2LDIsMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaIi8+JyksXy5DbHJTaGFwZUltYWdlR2FsbGVyeT0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCww'@;
put 'LDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJWMTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEySDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+'@;
put 'PHBhdGggZD0iTTguNTYsMTkuNDVhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC41NiwxOS40NVptMC00LjZBMS42LDEuNiwwLDEsMSw3LDE2LjQ1LDEuNiwxLjYsMCwwLDEsOC41NiwxNC44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9'@;
put 'Ik03LjksMjhsNi02LDMuMTgsMy4xOEwxNC4yNiwyOGgybDcuNDYtNy40NkwzMCwyNi43N3YtMkwyNC4yLDE5YS43MS43MSwwLDAsMC0xLDBsLTUuMTYsNS4xNkwxNC4zNywyMC41YS43MS43MSwwLDAsMC0xLDBMNS45MiwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0x'@;
put 'LDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMwLjE0LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGgg'@;
put 'ZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCww'@;
put 'LDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpNOC41NiwxMy40NWEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjU2LDEzLjQ1Wk0zMCwyOGgtMjRsNy40Ni03LjQ3YS43MS43MSwwLDAsMSwxLDBsMy42OCwzLjY4'@;
put 'TDIzLjIxLDE5YS43MS43MSwwLDAsMSwxLDBMMzAsMjQuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVSZXBsYXlBbGw9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE3LjQ2LDI2LjIyYTEuNCwxLjQsMCwwLDAsMS0uNDJsNS41'@;
put 'OS01LjU2YTEuNDMsMS40MywwLDAsMCwuNDItMSwxLjQ2LDEuNDYsMCwwLDAtLjQyLTFsLTUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAtMi40NCwxVjI0Ljc5YTEuNDEsMS40MSwwLDAsMCwuODgsMS4zMkExLjU0LDEuNTQsMCwwLDAsMTcuNDYsMjYuMjJabS4xNi0xMi4xNiw1LjE5LDUuMTYt'@;
put 'NS4xOSw1LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSww'@;
put 'LDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlUmVwbGF5'@;
put 'T25lPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwyNy4yN2ExLDEsMCwwLDAsMS0xVjE0YTEsMSwwLDAsMC0xLTFIMTlhMy44LDMuOCwwLDAsMC0xLjEuMjNsLTIsLjYyYS45Mi45MiwwLDAsMC0uNzIuODYuODguODgsMCwwLDAsLjg4Ljg2LDEuNDYsMS40NiwwLDAsMCwuNDMtLjA4'@;
put 'TDE4LDE1LjA3djExLjJBMSwxLDAsMCwwLDE5LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2'@;
put 'LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MiIgLz4nKSxfLkNsclNoYXBlVmlkZW9HYWxsZXJ5PSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEEx'@;
put 'Ljg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMwSDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi44MiwyNi43OWExLjc0LDEuNzQs'@;
put 'MCwwLDAsLjkzLjI4LDEuNjgsMS42OCwwLDAsMCwuNjktLjE1bDkuNzctNC4zNmExLjY5LDEuNjksMCwwLDAsMC0zLjFMMTQuNDQsMTUuMWExLjcsMS43LDAsMCwwLTIuMzksMS41NXY4LjcyQTEuNywxLjcsMCwwLDAsMTIuODIsMjYuNzlabS42My0xMC4xNGEuMjkuMjksMCwwLDEsLjE0LS4y'@;
put 'NS4zLjMsMCwwLDEsLjE2LDAsLjI3LjI3LDAsMCwxLC4xMiwwbDkuNzcsNC4zNWEuMjkuMjksMCwwLDEsLjE4LjI4LjI4LjI4LDAsMCwxLS4xOC4yN2wtOS43Nyw0LjM2YS4yOC4yOCwwLDAsMS0uMjgsMCwuMzEuMzEsMCwwLDEtLjE0LS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTI0LjE4'@;
put 'LDIxLjgzbC05Ljc3LDQuMzZBMSwxLDAsMCwxLDEzLDI1LjI4VjE2LjU2YTEsMSwwLDAsMSwxLjQxLS45MUwyNC4xOCwyMEExLDEsMCwwLDEsMjQuMTgsMjEuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCww'@;
put 'LTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVNaWNyb3Bob25lPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHogTTEzLDljMC0yLjgsMi4yLTUsNS01czUsMi4y'@;
put 'LDUsNXY4XG5cdFx0YzAsMi44LTIuMiw1LTUsNXMtNS0yLjItNS01Vjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYz'@;
put 'MmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgsMjRjMy45'@;
put 'LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYu'@;
put 'Myw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks'@;
put 'Xy5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw'@;
put 'YXRoIGQ9Ik0xOCw0YzIuOCwwLDUsMi4yLDUsNXY4YzAsMC40LTAuMSwwLjgtMC4yLDEuMmwxLjYsMS42YzAuNC0wLjksMC42LTEuOCwwLjYtMi44VjljMC0zLjktMy4yLTctNy4xLTYuOVxuXHRcdGMtMi45LDAtNS42LDEuOS02LjUsNC43TDEzLDguM0MxMy41LDUuOSwxNS42LDQuMiwxOCw0'@;
put 'eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4x'@;
put 'LDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44'@;
put 'LDIzLjQsMjgsMjUuMiwyNi42eiBNMTMuOCwxOS43QzEzLjMsMTguOSwxMywxOCwxMywxN3YtMi42bDcuMSw3LjFDMTcuOSwyMi41LDE1LjIsMjEuOCwxMy44LDE5Ljd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCwx'@;
put 'LjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNSwxN1Y5YzAtMy45LTMuMi03LTcuMS02LjljLTIuOSwwLTUuNiwxLjktNi41LDQuN2wxMywxM0MyNC44'@;
put 'LDE4LjksMjUsMTcuOSwyNSwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4y'@;
put 'QzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFo'@;
put 'LTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxfLk1lZGlhU2hhcGVzPXtwbGF5Ol8uQ2xyU2hhcGVQbGF5LHBhdXNlOl8uQ2xyU2hhcGVQYXVzZSwic3RlcC1mb3J3YXJkIjpfLkNsclNoYXBlU3Rl'@;
put 'cEZvcndhcmQsc3RvcDpfLkNsclNoYXBlU3RvcCxwb3dlcjpfLkNsclNoYXBlUG93ZXIscmV3aW5kOl8uQ2xyU2hhcGVSZXdpbmQsImZhc3QtZm9yd2FyZCI6Xy5DbHJTaGFwZUZhc3RGb3J3YXJkLGNhbWVyYTpfLkNsclNoYXBlQ2FtZXJhLCJ2aWRlby1jYW1lcmEiOl8uQ2xyU2hhcGVWaWRl'@;
put 'b0NhbWVyYSxzaHVmZmxlOl8uQ2xyU2hhcGVTaHVmZmxlLCJ2b2x1bWUtdXAiOl8uQ2xyU2hhcGVWb2x1bWVVcCwidm9sdW1lLWRvd24iOl8uQ2xyU2hhcGVWb2x1bWVEb3duLCJ2b2x1bWUtbXV0ZSI6Xy5DbHJTaGFwZVZvbHVtZU11dGUsaGVhZHBob25lczpfLkNsclNoYXBlSGVhZHBob25l'@;
put 'cywiZmlsbS1zdHJpcCI6Xy5DbHJTaGFwZUZpbG1TdHJpcCwibXVzaWMtbm90ZSI6Xy5DbHJTaGFwZU11c2ljTm90ZSwiaW1hZ2UtZ2FsbGVyeSI6Xy5DbHJTaGFwZUltYWdlR2FsbGVyeSwicmVwbGF5LWFsbCI6Xy5DbHJTaGFwZVJlcGxheUFsbCwicmVwbGF5LW9uZSI6Xy5DbHJTaGFwZVJl'@;
put 'cGxheU9uZSwidmlkZW8tZ2FsbGVyeSI6Xy5DbHJTaGFwZVZpZGVvR2FsbGVyeSxtaWNyb3Bob25lOl8uQ2xyU2hhcGVNaWNyb3Bob25lLCJtaWNyb3Bob25lLW11dGUiOl8uQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZX0sdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgi'@;
put 'Q2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKF8uTWVkaWFTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAg'@;
put 'ICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz'@;
put 'IGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5Tb2NpYWxTaGFwZXM9Xy5DbHJTaGFwZUhhc2h0YWc9Xy5DbHJTaGFwZUNyb3duPV8uQ2xyU2hhcGVUaHVtYnNEb3duPV8uQ2xyU2hh'@;
put 'cGVUaHVtYnNVcD1fLkNsclNoYXBlU2FkRmFjZT1fLkNsclNoYXBlTmV1dHJhbEZhY2U9Xy5DbHJTaGFwZUhhcHB5RmFjZT1fLkNsclNoYXBlUGljdHVyZT1fLkNsclNoYXBlQ2hhdEJ1YmJsZT1fLkNsclNoYXBlVGFsa0J1YmJsZXM9Xy5DbHJTaGFwZUhlYXJ0QnJva2VuPV8uQ2xyU2hhcGVI'@;
put 'ZWFydD1fLkNsclNoYXBlSW5ib3g9Xy5DbHJTaGFwZUZsYWc9Xy5DbHJTaGFwZVRhc2tzPV8uQ2xyU2hhcGVFbnZlbG9wZT1fLkNsclNoYXBlQm9va21hcms9Xy5DbHJTaGFwZUhhbGZTdGFyPV8uQ2xyU2hhcGVTdGFyPV8uQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIHk9SSgKLyohIC4uL3V0'@;
put 'aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLGc9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp'@;
put 'LEI9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO18uQ2xyU2hhcGVTaGFyZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjUz'@;
put 'LDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwx'@;
put 'LDAsNS01Wm0wLTIwYTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDI3LjUzLDRaTTcsMjFhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsNywyMVpNMjcuNTMsMzJhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsMjcuNTMsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3'@;
put 'QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01WiIvPicpLF8uQ2xyU2hhcGVTdGFyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTksMzRhMi4yMiwyLjIyLDAsMCwxLTEuMjQtLjM4'@;
put 'bC03LjQ2LTVhLjIyLjIyLDAsMCwwLS4yNSwwbC03LjQ2LDVBMi4yMiwyLjIyLDAsMCwxLDcuNCwzMS4yMWwyLjQ1LTguNjRhLjIzLjIzLDAsMCwwLS4wOC0uMjRMMi43MSwxNi43OGEyLjIyLDIuMjIsMCwwLDEsMS4yOS00bDktLjM0YS4yMy4yMywwLDAsMCwuMi0uMTVsMy4xLTguNDNhMi4y'@;
put 'MiwyLjIyLDAsMCwxLDQuMTcsMGwzLjEsOC40M2EuMjMuMjMsMCwwLDAsLjIuMTVsOSwuMzRhMi4yMiwyLjIyLDAsMCwxLDEuMjksNEwyNywyMi4zM2EuMjIuMjIsMCwwLDAtLjA4LjI0bDIuNDUsOC42NEEyLjIzLDIuMjMsMCwwLDEsMjcuMTksMzRabS04LjgyLTcuNDJBMi4yMSwyLjIxLDAs'@;
put 'MCwxLDE5LjYsMjdsNy40Niw1YS4yMi4yMiwwLDAsMCwuMzQtLjI1bC0yLjQ1LTguNjRhMi4yMSwyLjIxLDAsMCwxLC43Ny0yLjM1bDcuMDYtNS41NWEuMjIuMjIsMCwwLDAtLjEzLS40bC05LS4zNGEyLjIyLDIuMjIsMCwwLDEtMi0xLjQ2bC0zLjEtOC40M2EuMjIuMjIsMCwwLDAtLjQyLDBM'@;
put 'MTUuMDYsMTNhMi4yMiwyLjIyLDAsMCwxLTIsMS40NmwtOSwuMzRhLjIyLjIyLDAsMCwwLS4xMy40TDExLDIwLjc2YTIuMjIsMi4yMiwwLDAsMSwuNzcsMi4zNUw5LjMzLDMxLjc1YS4yMS4yMSwwLDAsMCwuMDguMjQuMi4yLDAsMCwwLC4yNiwwbDcuNDYtNUEyLjIyLDIuMjIsMCwwLDEsMTgu'@;
put 'MzYsMjYuNjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00'@;
put 'LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIzLjIzLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxYTIuMjIsMi4yMiwwLDAsMCwzLjM4LDIuNDVsNy40Ni01YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVh'@;
put 'Mi4yLDIuMiwwLDAsMCwyLjU1LDAsMi4yLDIuMiwwLDAsMCwuODMtMi40bC0yLjQ1LTguNjRhLjIyLjIyLDAsMCwxLC4wOC0uMjRaIi8+JyksXy5DbHJTaGFwZUhhbGZTdGFyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'IiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41'@;
put 'NWEuMjIuMjIsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFBMi4yMywyLjIzLDAsMCwwLDkuNDksMzRhMi4yMiwyLjIyLDAsMCwwLDEuMjQtLjM4bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMjIsMi4yMiwwLDAsMCwzLjM4LTIuNDVsLTIuNDUtOC42NGEuMjMuMjMsMCwwLDEs'@;
put 'LjA4LS4yNFpNMTguMzMsMjYuNjJoMGEyLjIxLDIuMjEsMCwwLDAtMS4yNC4zOEw5LjYyLDMyYS4yMi4yMiwwLDAsMS0uMzQtLjI1bDIuNDUtOC42NEEyLjIxLDIuMjEsMCwwLDAsMTEsMjAuNzZMMy45LDE1LjIxYS4yMi4yMiwwLDAsMSwuMTMtLjRsOS0uMzRBMi4yMiwyLjIyLDAsMCwwLDE1'@;
put 'LDEzbDMuMS04LjQzYS4yLjIsMCwwLDEsLjIxLS4xNWgwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIw'@;
put 'LjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEu'@;
put 'MjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIsMCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0Wk0yNC45LDIzLjExbDIuNDUsOC42NEEuMjIuMjIsMCwwLDEsMjcsMzJsLTcuNDYtNWEyLjIxLDIuMjEsMCwwLDAt'@;
put 'MS4yNC0uMzhoMFY0LjQ0aDBhLjIuMiwwLDAsMSwuMjEuMTVMMjEuNjIsMTNhMi4yMiwyLjIyLDAsMCwwLDIsMS40Nmw5LC4zNGEuMjIuMjIsMCwwLDEsLjEzLjRsLTcuMDYsNS41NUEyLjIxLDIuMjEsMCwwLDAsMjQuOSwyMy4xMVoiLz4nKSxfLkNsclNoYXBlQm9va21hcms9KDAsZy5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNiwzNGEyLDIsMCwwLDEtMS40MS0uNThMMTgsMjYuODJsLTYuNTQsNi41MkEyLDIsMCwwLDEsOCwzMS45M1Y0YTIsMiwwLDAsMSwyLTJIMjZhMiwyLDAsMCwxLDIsMlYzMmEyLDIs'@;
put 'MCwwLDEtMiwyWm0wLTJoMFY0SDEwVjMxLjkzTDE4LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwySDEwQTIsMiwwLDAsMCw4LDRWMzEuOTNhMiwyLDAsMCwwLDMuNDIsMS40MWw2LjU0LTYuNTIsNi42'@;
put 'Myw2LjZBMiwyLDAsMCwwLDI4LDMyVjRBMiwyLDAsMCwwLDI2LDJaIi8+JyksXy5DbHJTaGFwZUVudmVsb3BlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAs'@;
put 'MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMEwzMiw5LjIxdjE3LjVsLTcuMzYtNy4zNi0xLjQxLDEuNDFaTTUuMzEsOEgzMC4zOEwx'@;
put 'Ny44NCwyMC40N1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMiwxMy4wOFYyNi43MWwtNy4zNi03LjM2LTEuNDEsMS40MUwzMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEu'@;
put 'MzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBsOC44My04Ljc4YTcuNDQsNy40NCwwLDAsMS0yLS44NWwtOC4yNiw4LjIxTDUuMzEsOEgyMi44MWE3LjQ5LDcuNDksMCwwLDEtLjMxLTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAs'@;
put 'MCwwLDItMlYxMi4yQTcuNDUsNy40NSwwLDAsMSwzMiwxMy4wOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNS44NiIgcj0iNSIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuMjZIMzJWMjYuNzFsLTcuMzYtNy4zNi0xLjQxLDEuNDFMMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40NC0xLjM5TDQsMjYu'@;
put 'ODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwbDYuNjYtNi42M0gyMy4wOGwtNS4yNCw1LjIxTDUuMzEsOEgyMC4wNmwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMzLDZhMiwyLDAsMCwwLS40MSwwaC0yOGEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMy44MSw3LjM5LDE5LjI1LDIxLjg5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMy44'@;
put 'MSw3LjM5Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEt'@;
put 'LWJhZGdlZCIgZD0iTTI2LDEyLjM0QTcuNDksNy40OSwwLDAsMSwyMi41LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJN'@;
put 'MzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjlsLTguNzEsOC42OGEyLDIsMCwwLDEtMi44MiwwTDIsNy41YTIsMiwwLDAsMC0uMDcuNVYyOGEyLDIsMCwwLDAsMiwyaDI4YTIsMiwwLDAsMCwyLTJWMTIuMzlBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTUuMywyOEgzLjkxVjI2LjU3bDcu'@;
put 'MjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjktNy4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz'@;
put 'MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyNS43N2wtNi41Miw2LjQ5YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwyLDAsMCwwLS4w'@;
put 'Ny41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlYxNS4zOFpNNS4zLDI4SDMuOTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIyLjk0LDE1LjRoLS43QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMy45MmEyLDIsMCwwLDAtLjUzLjA4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgs'@;
put 'MCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlVGFza3M9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4yOSwzNEg2LjcxQTEuNywxLjcsMCwwLDEsNSwzMi4zMVY2LjY5QTEuNzUsMS43NSwwLDAs'@;
put 'MSw3LDVIOVY3SDdWMzJIMjlWN0gyN1Y1aDIuMjVBMS43LDEuNywwLDAsMSwzMSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDEsMjkuMjksMzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi42NiwyNS43'@;
put 'NiwxMS4zLDIwLjRBMSwxLDAsMCwxLDEyLjcyLDE5bDMuOTQsMy45NCw4LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTI2LDExSDEwVjcuMzNBMi4zNCwy'@;
put 'LjM0LDAsMCwxLDEyLjMzLDVoMS43OWE0LDQsMCwwLDEsNy43NSwwaDEuNzlBMi4zNCwyLjM0LDAsMCwxLDI2LDcuMzNaTTEyLDlIMjRWNy4zM0EuMzMuMzMsMCwwLDAsMjMuNjcsN0gyMFY2YTIsMiwwLDAsMC00LDBWN0gxMi4zM2EuMzMuMzMsMCwwLDAtLjMzLjMzWiIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTksOS44OSwxOS41Niw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoLjcxbDEuMTYtMmE0LDQsMCwwLDAt'@;
put 'Ny43NCwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExaDguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yNC4x'@;
put 'OSwxNS40bC03LjUzLDcuNTNMMTIuNzIsMTlBMSwxLDAsMCwwLDExLjMsMjAuNGw1LjM2LDUuMzZMMjYuNzEsMTUuNzFhMSwxLDAsMCwwLC4yLS4zMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t'@;
put 'YWxlcnRlZCIgZD0iTTI5LDE1LjRWMzJIN1Y3SDlWNUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjlWMzIuMzFBMS43LDEuNywwLDAsMCw2LjcxLDM0SDI5LjI5QTEuNywxLjcsMCwwLDAsMzEsMzIuMzFWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLjcyLDE5QTEsMSwwLDAsMCwxMS4zLDIwLjRsNS4zNiw1LjM2TDI2LjcxLDE1LjcxYTEsMSwwLDAsMC0xLjQxLTEu'@;
put 'NDFsLTguNjQsOC42NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41'@;
put 'N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAs'@;
put 'MCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOS4yOSw0Ljk1aC03LjJhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlB'@;
put 'MS43LDEuNywwLDAsMCwzMSwzMi4yNlY2LjY0QTEuNywxLjcsMCwwLDAsMjkuMjksNC45NVptLTE4LDNhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3aDMuNDRhMSwxLDAsMCwxLDEsMVY5LjhIMTEuMjVabTE0LjUyLDkuMjMtOS4xMiw5LjEyLTUuMjQt'@;
put 'NS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy4xNC03LjE0YTEuNCwxLjQsMCwxLDEsMiwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yNS44OCwxNS40YTEuMzgs'@;
put 'MS4zOCwwLDAsMS0uMTEsMS44MWwtOS4xMiw5LjEyLTUuMjQtNS4yNGExLjQsMS40LDAsMCwxLDItMmwzLjI2LDMuMjYsNy03SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDAtLjA5SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwyLjMxLDAsMCwxLDQuNjMsMFY3'@;
put 'aC40MkwyMiw0Ljc2YTQuMyw0LjMsMCwwLDAtOC4wOS4xOUg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4yNlYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu'@;
put 'ODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy40OSw3LjQ5LDAsMCwxLTYuNDYtMy43SDExLjI1VjhhMSwxLDAsMCwxLDEtMWgzLjQ0VjYuMzJhMi4zMSwy'@;
put 'LjMxLDAsMCwxLDQuNjMsMFY3aDIuMjZhNy41Myw3LjUzLDAsMCwxLS4wNy0xLDcuNTMsNy41MywwLDAsMSwuMDgtMS4wNWgtLjVhNC4zMSw0LjMxLDAsMCwwLTguMTcsMEg3QTEuNzUsMS43NSwwLDAsMCw1LDYuNjRWMzIuMjZhMS43LDEuNywwLDAsMCwxLjcxLDEuNjlIMjkuMjlBMS43LDEu'@;
put 'NywwLDAsMCwzMSwzMi4yNlYxMy40M0E3LjUyLDcuNTIsMCwwLDEsMzAsMTMuNVptLTQuMjMsMy43MS05LjEyLDkuMTItNS4yNC01LjI0YTEuNCwxLjQsMCwwLDEsMi0ybDMuMjYsMy4yNiw3LjE0LTcuMTRhMS40LDEuNCwwLDEsMSwyLDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLF8uQ2xyU2hhcGVGbGFnPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiBkPSJNNiwzNGExLDEsMCwwLDEtMS0xVjNBMSwxLDAsMCwxLDcsM1YzM0ExLDEsMCwwLDEsNiwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjU1LDMuODJhMSwxLDAsMCwwLTEsMCwx'@;
put 'NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjUuMDhBOC44LDguOCwwLDAsMSwxMy4yNSw0YTExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0'@;
put 'Ljg0LDAsMCwwLDYsMS42NkExOC43NSwxOC43NSwwLDAsMCwyOSw2LjEyVjE4Ljk1YTE2LjE2LDE2LjE2LDAsMCwxLTUuNTguOTMsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5LDEyLjc4LDEyLjc4LDAsMCwwLTUtMS40NUExMC44NiwxMC44NiwwLDAsMCw5LDE3Ljc5VjIwYTguOCw4Ljgs'@;
put 'MCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNTUsMy44MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNS45MiwyYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDIsMFYzQTEsMSwwLDAsMCw1LjkyLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg'@;
put 'ZD0iTTMwLjUsMy44MmExLDEsMCwwLDAtMSwwLDE0LjksMTQuOSwwLDAsMS02LjEzLDEuMTYsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5QTEyLjc4LDEyLjc4LDAsMCwwLDEzLjIsMiwxMC44NiwxMC44NiwwLDAsMCw5LDIuODVWMjBhOC44LDguOCwwLDAsMSw0LjI1LTEuMDgsMTEuMjIs'@;
put 'MTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2LDE2Ljc5LDE2Ljc5LDAsMCwwLDctMS4zNywxLDEsMCwwLDAsLjU1LS44OVY0LjY3QTEsMSwwLDAsMCwzMC41LDMuODJaIi8+JyksXy5DbHJTaGFwZUluYm94PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0x'@;
put 'Mi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjUsNUgyMlY3aDdWMjFIMjMuNjFsLS4xLjg5YTUuNDIsNS40MiwwLDAsMS0xMC43NywwbC0uMS0uODlIN1Y3aDdWNUg2LjVBMS41LDEuNSwwLDAsMCw1LDYuNXYyNUExLjUsMS41LDAsMCwwLDYuNSwz'@;
put 'M2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjVWNi41QTEuNSwxLjUsMCwwLDAsMjkuNSw1Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTEyLjIzLDEzLjA5YTEsMSwwLDAsMCwwLDEuNDFMMTgsMjAuM2w1Ljc5LTUuNzlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwxNi40N1YyQTEsMSwwLDAsMCwxOCwxYTEsMSwwLDAsMC0xLDF2MTQuNWwtMy4zOC0zLjM4QTEsMSwwLDAsMCwxMi4yMywxMy4wOVoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy41Miw3LjUyLDAsMCwxLTEtLjA3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUs'@;
put 'MCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksXy5DbHJTaGFwZUhlYXJ0'@;
put 'PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMi40M2ExLDEsMCwwLDEtLjYxLS4yMUMxMS44MywyNy45LDgsMjQuMTgsNS4zMiwyMC41MSwxLjksMTUuODIsMS4xMiwxMS40OSwzLDcuNjRjMS4zNC0yLjc1LDUuMTktNSw5LjY5LTMuNjlBOS44Nyw5Ljg3LDAsMCwxLDE4LDcuNzJh'@;
put 'OS44Nyw5Ljg3LDAsMCwxLDUuMzEtMy43N2M0LjQ5LTEuMjksOC4zNS45NCw5LjY5LDMuNjksMS44OCwzLjg1LDEuMSw4LjE4LTIuMzIsMTIuODdDMjgsMjQuMTgsMjQuMTcsMjcuOSwxOC42MSwzMi4yMkExLDEsMCwwLDEsMTgsMzIuNDNaTTEwLjEzLDUuNThBNS45LDUuOSwwLDAsMCw0Ljgs'@;
put 'OC41MWMtMS41NSwzLjE4LS44NSw2LjcyLDIuMTQsMTAuODFBNTcuMTMsNTcuMTMsMCwwLDAsMTgsMzAuMTYsNTcuMTMsNTcuMTMsMCwwLDAsMjkuMDYsMTkuMzNjMy00LjEsMy42OS03LjY0LDIuMTQtMTAuODEtMS0yLTQtMy41OS03LjM0LTIuNjVhOCw4LDAsMCwwLTQuOTQsNC4yLDEsMSww'@;
put 'LDAsMS0xLjg1LDAsNy45Myw3LjkzLDAsMCwwLTQuOTQtNC4yQTcuMzEsNy4zMSwwLDAsMCwxMC4xMyw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw3LjY0Yy0xLjM0LTIuNzUtNS4yLTUtOS42OS0z'@;
put 'LjY5QTkuODcsOS44NywwLDAsMCwxOCw3LjcyYTkuODcsOS44NywwLDAsMC01LjMxLTMuNzdDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUt'@;
put 'NC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uQ2xyU2hhcGVIZWFydEJyb2tlbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0y'@;
put 'Ljc1LTUuMDktNS05LjY5LTMuNjlhOS44Nyw5Ljg3LDAsMCwwLTYsNC44NCwxOC45LDE4LjksMCwwLDAtMi4yMyw1LjMzbDUuMjgsMi4zNC00LjYsNC4zNywzLjQ5LDQuMSwxLjUyLTEuM0wxOC41NCwyMWw1LjQtNS4xM0wxNy41OCwxM0ExNi4yMywxNi4yMywwLDAsMSwxOS43NSw4LjlhNy42'@;
put 'OCw3LjY4LDAsMCwxLDQuMTEtM2MzLjM0LS44OSw2LjM0LjYsNy4zNCwyLjY1LDEuNTUsMy4xOC44NSw2LjcyLTIuMTQsMTAuODFBNTcuMTYsNTcuMTYsMCwwLDEsMTgsMzAuMTYsNTcuMTYsNTcuMTYsMCwwLDEsNi45NCwxOS4zM2MtMy00LjEtMy42OS03LjY0LTIuMTQtMTAuODFhNS45LDUu'@;
put 'OSwwLDAsMSw1LjMzLTIuOTMsNy4zMSw3LjMxLDAsMCwxLDIsLjI5LDcuNyw3LjcsMCwwLDEsMy4zOCwybC4xNS0uM2ExMC42NiwxMC42NiwwLDAsMSwxLTEuNDEsOS42NCw5LjY0LDAsMCwwLTMuOTQtMi4yMkM4LjIsMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgs'@;
put 'Mi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUExMS41NSwxMS41NSwwLDAsMCwxOC4xOSw3LjVhMTYuODksMTYuODksMCwwLDAtMi40OCw0LjU2TDIyLjI3LDE1LDE2LjcsMjAuMjYsMTksMjNsLTEuNTcsMS4zNC0zLjYtNC4yMiw0Ljc0'@;
put 'LTQuNTEtNS40NC0yLjQxYTE5LjQ5LDE5LjQ5LDAsMCwxLDIuMy01LjUsMTQuNzcsMTQuNzcsMCwwLDEsMS4wNi0xLjU0bC4wNiwwYTkuNjYsOS42NiwwLDAsMC0zLjg5LTIuMThDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQu'@;
put 'MTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uQ2xyU2hhcGVUYWxrQnVi'@;
put 'Ymxlcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgy'@;
put 'Mi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDRIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEs'@;
put 'MCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVY3QTMsMywwLDAsMCwzMSw0Wk0zMiwyMi45NCwyOC41LDIwLjIxYTEsMSwwLDAsMC0uNjEtLjIxSDE0YTEsMSwwLDAsMS0xLTFWN2ExLDEsMCwwLDEsMS0xSDMxQTEuMSwxLjEsMCwwLDEsMzIsNy4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsMjZhMSwxLDAsMCwxLTEsMUg4Yy0uMjIsMC0uNDMuMi0uNjEuMzNMNCwzMFYxNGExLDEsMCwwLDEsMS0xSDguODZWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCww'@;
put 'LDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY5LjcyTDI4LjUsMjAuMjFhMSwx'@;
put 'LDAsMCwwLS42MS0uMjFIMTRhMSwxLDAsMCwxLTEtMVY3YTEsMSwwLDAsMSwxLTFIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVYxMi4zN0E3'@;
put 'LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxOVYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgxNEE2'@;
put 'LDYsMCwwLDEsOCwxOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSw0SDE0YTMsMywwLDAsMC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTct'@;
put 'LjlWN0EzLDMsMCwwLDAsMzEsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE5VjExSDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43Nywy'@;
put 'Ljc3LDAsMCwwLDI1LDI2LjEzVjI1SDE0QTYsNiwwLDAsMSw4LDE5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDE0YTMsMywwLDAs'@;
put 'MC0zLDNWMTlhMywzLDAsMCwwLDMsM0gyNy41NWw0Ljc4LDMuNzFhMSwxLDAsMCwwLDEsLjExLDEsMSwwLDAsMCwuNTctLjlWMTIuMzdBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAg'@;
put 'ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLF8uQ2xyU2hhcGVDaGF0QnViYmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyLjVj'@;
put 'LTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjguMjksMjQuNjFhMSwxLDAsMCwwLS4zMi43'@;
put 'M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4LjVjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4wOCwxMS4wOCwwLDAsMSwyOC4yOSwyNC42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjVIMTFhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuNzUsMjAu'@;
put 'NWgtNy41YTEsMSwwLDAsMCwwLDJoNy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS4yOCwxMi41SDI0LjcyYTEsMSwwLDAsMCwwLTJIMTEuMjhhMSwxLDAsMCwwLDAsMloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjM4LDEyLjY5YTcuNDMsNy40MywwLDAsMS0xLjg5LjY2QTEwLjM1LDEwLjM1LDAsMCwxLDMyLDE2LjVhMTEuMDgsMTEuMDgsMCwwLDEtMy43MSw4LjExLDEsMSwwLDAs'@;
put 'MC0uMzIuNzNsMCw1LjM0LTQuMzgtMi43OWExLDEsMCwwLDAtLjgzLS4xMUExNiwxNiwwLDAsMSwxOCwyOC41Yy03LjcyLDAtMTQtNS4zOC0xNC0xMnM2LjI4LTEyLDE0LTEyYTE2LDE2LDAsMCwxLDQuNTUuNjZBNy40NCw3LjQ0LDAsMCwxLDIzLDMuMjJhMTgsMTgsMCwwLDAtNS0uNzJjLTgu'@;
put 'ODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMsMCwwLDAsNC05LjI3QTEyLjMyLDEyLjMyLDAsMCwwLDMzLjM4LDEyLjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLDE1LjVhMSwxLDAsMCwwLDAsMkgyNWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE0LjI1LDIwLjVhMSwxLDAsMCwwLDAsMmg3LjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yOCwxMS41YTEs'@;
put 'MSwwLDAsMCwxLDFIMjQuNzJhMSwxLDAsMCwwLC44My0uNDdBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjVIMTEuMjhBMSwxLDAsMCwwLDEwLjI4LDExLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2'@;
put 'LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yN0MzNCw4Ljc4LDI2LjgyLDIuNSwxOCwyLjVabTgsMTRhMSwxLDAsMCwxLTEsMUgxMWExLDEsMCwwLDEsMC0ySDI1QTEsMSwwLDAsMSwyNiwxNi41Wm0t'@;
put 'My4yNSw1YTEsMSwwLDAsMS0xLDFoLTcuNWExLDEsMCwwLDEsMC0yaDcuNUExLDEsMCwwLDEsMjIuNzUsMjEuNVptLTEyLjQ3LTEwYTEsMSwwLDAsMSwxLTFIMjQuNzJhMSwxLDAsMCwxLDAsMkgxMS4yOEExLDEsMCwwLDEsMTAuMjgsMTEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuMjVhNy40Niw3LjQ2LDAsMCwxLTQuMzUtMS40LDEsMSwwLDAsMS0uOTMuNjVIMTEuMjhhMSwxLDAsMCwxLDAtMkgyNC4yQTcuNDYsNy40NiwwLDAsMSwyMywzLjJhMTgsMTgsMCwwLDAtNS0uN2MtOC44MiwwLTE2'@;
put 'LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjcsMTIuMzQsMTIuMzQsMCwwLDAtLjY4LTRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjI1Wk0yMS43NSwyMi41aC03'@;
put 'LjVhMSwxLDAsMCwxLDAtMmg3LjVhMSwxLDAsMCwxLDAsMlptMy4yNS01SDExYTEsMSwwLDAsMSwwLTJIMjVhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi'@;
put 'IGN5PSI1Ljc1IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksXy5DbHJTaGFwZVBpY3R1cmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiww'@;
put 'LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45Miwx'@;
put 'NFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEs'@;
put 'MEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAs'@;
put 'MCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMs'@;
put 'M0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywz'@;
put 'LDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksXy5DbHJTaGFwZUhhcHB5RmFjZT0oMCxnLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjEwLjg5IiBjeT0iMTMuODkiIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4wNSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE4LjEzLDI4LjIxYTguNjcsOC42NywwLDAsMCw4LjI2LTZIOS44N0E4LjY3LDguNjcsMCwwLDAsMTguMTMsMjguMjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJB'@;
put 'MTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNOC44OSwxMy44OWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSw4Ljg5LDEzLjg5Wm05LjI0LDE0LjMyYTguNjcsOC42NywwLDAsMS04LjI2LTZIMjYuMzhBOC42Nyw4LjY3LDAsMCwxLDE4LjEzLDI4LjIxWm02LjkzLTEyLjMyYTIs'@;
put 'MiwwLDEsMSwyLTJBMiwyLDAsMCwxLDI1LjA1LDE1Ljg5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uQ2xyU2hhcGVOZXV0cmFsRmFjZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMDUsMjIuMDZoLTEyYTEsMSwwLDAsMCwwLDJoMTJhMSwx'@;
put 'LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1LjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjExLjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuMDUsMjEuMDZhMSwxLDAsMCwxLTEsMWgtMTJh'@;
put 'MSwxLDAsMCwxLDAtMmgxMkExLDEsMCwwLDEsMjUuMDUsMjMuMDZaTTI3LDE0LjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuOCwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuMTYsMTYuMDhaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksXy5DbHJTaGFwZVNhZEZhY2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx'@;
put 'MS40MSIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMTYsMjBhOSw5LDAsMCwwLTcuMzMsMy43OCwxLDEsMCwxLDAsMS42MywxLjE2LDcsNywwLDAsMSwxMS4zMS0uMTMsMSwx'@;
put 'LDAsMCwwLDEuNi0xLjJBOSw5LDAsMCwwLDE4LjE2LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTksMTIuMjhhMS44LDEuOCwwLDEs'@;
put 'MS0xLjgtMS44QTEuOCwxLjgsMCwwLDEsMjcsMTQuMjhabS0xNS41NSwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuNDEsMTYuMDhabTE0LDcuNTNhMSwxLDAsMCwxLTEuNiwxLjIsNyw3LDAsMCwwLTExLjMxLjEzLDEsMSwwLDEsMS0xLjYzLTEuMTYsOSw5LDAs'@;
put 'MCwxLDE0LjU0LS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxfLkNsclNoYXBlVGh1bWJzVXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDI2Yy0yLjkyLDEuODItNy4zLDQtOS4zNyw0aC02YTE2LjY4LDE2LjY4LDAsMCwxLTMuMzEtNi4w'@;
put 'OEEyNi43MSwyNi43MSwwLDAsMSw0LDE2aDlWNmEyLjA1LDIuMDUsMCwwLDEsMS4yNi0xLjY5Yy43NywyLDIuNjIsNi41Nyw0LjIzLDguNzJBMTEuMzksMTEuMzksMCwwLDAsMjQsMTYuOTFWMTQuNzhhOS4xMyw5LjEzLDAsMCwxLTMuOTEtM2MtMS44OC0yLjUxLTQuMjktOS4xMS00LjMxLTku'@;
put 'MTdBMSwxLDAsMCwwLDE0LjU5LDJDMTMuMjUsMi4zOCwxMSwzLjYsMTEsNnY4SDNhMSwxLDAsMCwwLTEsMSwyOSwyOSwwLDAsMCwxLjQsOS42MmMxLjg5LDUuNCw0LjEsNy4xNCw0LjIsNy4yMmExLDEsMCwwLDAsLjYxLjIxaDYuNDJjMi40MywwLDYuNTUtMiw5LjM3LTMuNjNaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwzMUgyN2ExLDEsMCwwLDEtMS0xVjE0YTEsMSwwLDAsMSwxLTFoN1ptLTYtMmg0VjE1SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNjMsMTIuMTJDMTcuNTEsOS4yOCwxNC44OCwyLDE0Ljg4LDJTMTIsMi44MywxMiw1LjI1VjE1SDIuMjNhMjkuNDYsMjkuNDYsMCwwLDAsMS40NCw5Ljc0QzUuNjEsMzAuMjcsNy44LDMyLDcuOCwzMmg2Ljg2QzE2LjksMzIsMjEsMzAuMDYsMjQs'@;
put 'MjguMzFWMTUuNTFBMTAuODQsMTAuODQsMCwwLDEsMTkuNjMsMTIuMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEzYTEsMSwwLDAsMC0xLDFWMzBhMSwxLDAsMCwwLDEsMWg3VjEzWiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlVGh1bWJzRG93bj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIsMTBjMi45Mi0xLjgyLDcuMy00LDkuMzctNGg2YTE2LjY4LDE2LjY4LDAsMCwxLDMuMzEsNi4wOEEyNi43MSwyNi43MSwwLDAsMSwzMiwyMEgy'@;
put 'M1YzMGEyLjA1LDIuMDUsMCwwLDEtMS4yNiwxLjY5Yy0uNzctMi0yLjYyLTYuNTctNC4yMy04LjcyQTExLjM5LDExLjM5LDAsMCwwLDEyLDE5LjA5djIuMTNhOS4xMyw5LjEzLDAsMCwxLDMuOTEsM2MxLjg4LDIuNTEsNC4yOSw5LjExLDQuMzEsOS4xN2ExLDEsMCwwLDAsMS4xOS42M0MyMi43'@;
put 'NSwzMy42MiwyNSwzMi40LDI1LDMwVjIyaDhhMSwxLDAsMCwwLDEtMSwyOSwyOSwwLDAsMC0xLjQtOS42MmMtMS44OS01LjQtNC4xLTcuMTQtNC4yLTcuMjJBMSwxLDAsMCwwLDI3Ljc5LDRIMjEuMzdDMTguOTQsNCwxNC44Myw2LDEyLDcuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLDVIOWExLDEsMCwwLDEsMSwxVjIyYTEsMSwwLDAsMS0xLDFIMlpNOCw3SDRWMjFIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTE2LjM3LDIzLjg0YzIuMTIsMi44NCw0Ljc2LDEwLjA3LDQuNzYsMTAuMDdTMjQsMzMuMTMsMjQsMzAuNzFWMjFoOS43N2EyOS40NiwyOS40NiwwLDAsMC0xLjQ0LTkuNzRDMzAuMzksNS42OCwyOC4yLDQsMjguMiw0SDIxLjM1QzE5LjEsNCwxNSw1LjksMTIsNy42NXYxMi44QTEwLjg0LDEw'@;
put 'Ljg0LDAsMCwxLDE2LjM3LDIzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDIzYTEsMSwwLDAsMCwxLTFWNkExLDEsMCwwLDAsOSw1SDJWMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0yIiAvPicpLF8uQ2xyU2hhcGVDcm93bj0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTQsMTMuMzNBMS4zOSwxLjM5LDAsMSwwLDIuNiwxNC43MiwxLjM5LDEuMzksMCwwLDAsNCwxMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4g'@;
put 'IDxwYXRoIGQ9Ik0zMS44MSwxNS44NGEyMC4zNSwyMC4zNSwwLDAsMC00LjU4LDEuNDMsMjIuNywyMi43LDAsMCwwLTMuNDgsMi4xQTE3LjY5LDE3LjY5LDAsMCwxLDIyLDE2LjU3YTQ3LjY1LDQ3LjY1LDAsMCwxLTIuOC03LjY5LDEsMSwwLDAsMC0xLS43NCwxLDEsMCwwLDAtMSwuNzQsNDYu'@;
put 'NzEsNDYuNzEsMCwwLDEtMi44LDcuNjksMTcsMTcsMCwwLDEtMS43NiwyLjgsMjIuNywyMi43LDAsMCwwLTMuNDgtMi4xLDIwLjY2LDIwLjY2LDAsMCwwLTQuNTgtMS40MywxLDEsMCwwLDAtMSwuMzksMSwxLDAsMCwwLS4wOSwxLjA1QTUwLjEzLDUwLjEzLDAsMCwxLDcuODIsMzEuMTdhMSwx'@;
put 'LDAsMCwwLDEsLjgzSDI3LjYyYTEsMSwwLDAsMCwxLS44Myw1MC4xNSw1MC4xNSwwLDAsMSw0LjI2LTEzLjg5LDEsMSwwLDAsMC0uMDktMS4wNUExLDEsMCwwLDAsMzEuODEsMTUuODRaTTI2Ljc5LDMwSDkuNjRhNTUuNjYsNTUuNjYsMCwwLDAtMy40LTExLjcxLDE1Ljc1LDE1Ljc1LDAsMCwx'@;
put 'LDIuMDkuNzgsMjAsMjAsMCwwLDEsMy44NSwyLjQ1LDEsMSwwLDAsMCwxLjM5LS4wOSwxOS4yOCwxOS4yOCwwLDAsMCwyLjY3LTQsNDMuNDYsNDMuNDYsMCwwLDAsMi00Ljg5LDQxLjc0LDQxLjc0LDAsMCwwLDIsNC44OSwxOS45MiwxOS45MiwwLDAsMCwyLjY2LDQsMSwxLDAsMCwwLDEuNC4w'@;
put 'OSwxOS4yMSwxOS4yMSwwLDAsMSwzLjg1LTIuNDUsMTQuNzcsMTQuNzcsMCwwLDEsMi4wOS0uNzhBNTUuMDcsNTUuMDcsMCwwLDAsMjYuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIg'@;
put 'cng9IjEuMzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTguMjIsNi4zOUExLjM5LDEuMzksMCwxLDAsMTYuODQsNSwxLjM5LDEuMzksMCwwLDAsMTguMjIsNi4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xOC4yMywyNi4zNGExLjExLDEuMTEsMCwxLDAsMS4xLDEuMUExLjEsMS4xLDAsMCwwLDE4LjIzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTEyLjU4LDI2'@;
put 'LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMTIuNTgsMjYuMzRaIi8+PHBhdGggZD0iTTIzLjg5LDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEsMS4xQTEuMSwxLjEsMCwwLDAsMjMuODksMjYuMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNiIvPlxuXG4gIDxwYXRoIGQ9Ik0yLjYsMTEuOTNBMS40LDEuNCwwLDEsMCw0LDEzLjMzLDEuNCwxLjQsMCwwLDAsMi42LDExLjkzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8ZWxsaXBzZSBjeD0iMzMuODMiIGN5PSIxMy4zMyIgcng9IjEu'@;
put 'MzkiIHJ5PSIxLjM5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOC4yMiw2LjM5QTEuMzksMS4zOSwwLDEsMCwxNi44NCw1LDEuMzksMS4zOSwwLDAsMCwxOC4yMiw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuNjMsMTYuMUExOC42MSwxOC42MSwwLDAsMCwyOCwxNy4zNGEyMS41NywyMS41NywwLDAsMC00LDIuNDksMTkuMiwxOS4yLDAsMCwxLTIuMjYtMy40OSw0OC45Miw0OC45MiwwLDAsMS0yLjUyLTYuNTgsMSwxLDAsMCwwLTEtLjcxaDBhMSwxLDAsMCww'@;
put 'LTEsLjcxLDQ4LjQyLDQ4LjQyLDAsMCwxLTIuNTIsNi41OCwxOC42OSwxOC42OSwwLDAsMS0yLjI2LDMuNDgsMjIuODEsMjIuODEsMCwwLDAtNC0yLjQ4QTE4LjgzLDE4LjgzLDAsMCwwLDQuOSwxNi4xYTEsMSwwLDAsMC0xLC4zMywxLDEsMCwwLDAtLjEzLDEuMDcsNTUuOSw1NS45LDAsMCwx'@;
put 'LDQsMTMuNSwxLDEsMCwwLDAsMSwuODNoMTlhMSwxLDAsMCwwLDEtLjgzLDU1LjksNTUuOSwwLDAsMSw0LTEzLjUsMSwxLDAsMCwwLS4xMy0xLjA3QTEsMSwwLDAsMCwzMS42MywxNi4xWk0xMS4wOCwyOC41NWExLjExLDEuMTEsMCwxLDEsMS4xLTEuMTFBMS4xMSwxLjExLDAsMCwxLDExLjA4'@;
put 'LDI4LjU1Wm03LjE1LDBhMS4xMSwxLjExLDAsMCwxLDAtMi4yMSwxLjExLDEuMTEsMCwwLDEsMCwyLjIxWm03LjE2LDBhMS4xMSwxLjExLDAsMSwxLDEuMS0xLjExQTEuMTEsMS4xMSwwLDAsMSwyNS4zOSwyOC41NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiLz5c'@;
put 'biAgJyksXy5DbHJTaGFwZUhhc2h0YWc9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiwxMkgyNS4zNGwxLjU1LTcuNzRhMSwxLDAsMCwwLTItLjM5TDIzLjMsMTJIMTUuMTFsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwxMy4wNywxMkg2YTEsMSwwLDAsMCwwLDJoNi42N2wt'@;
put 'MS42LDhINGExLDEsMCwwLDAsMCwyaDYuNjZMOS4xMSwzMS43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjguNjgsMCwwLDAsLjIsMCwxLDEsMCwwLDAsMS0uOEwxMi43LDI0aDguMTlsLTEuNTUsNy43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjIuNjIsMCwwLDAsLjE5LDAsMSwxLDAsMCwwLDEtLjhM'@;
put 'MjIuOTMsMjRIMzBhMSwxLDAsMCwwLDAtMkgyMy4zM2wxLjYxLThIMzJhMSwxLDAsMCwwLDAtMlpNMjEuMjksMjJIMTMuMWwxLjYxLThIMjIuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG5cbiAgPHBhdGggZD0iTTMxLjg3LDEwSDI2LjMybDEtNC44'@;
put 'M0ExLDEsMCwwLDAsMjYuMzUsNGgtMmExLDEsMCwwLDAtMSwuNzhMMjIuMzMsMTBoLTUuNGwxLTQuODNBMSwxLDAsMCwwLDE3LDRIMTVhMSwxLDAsMCwwLTEsLjc4TDEzLDEwSDdhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMmg1LjU1TDEwLjUsMjJoLTZhMSwxLDAsMCww'@;
put 'LTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMkg5LjY4bC0xLDQuODNhMSwxLDAsMCwwLDEsMS4xN2gyYTEsMSwwLDAsMCwuOTUtLjc4TDEzLjY3LDI2aDUuNGwtMSw0LjgzQTEsMSwwLDAsMCwxOSwzMmgyYTEsMSwwLDAsMCwxLS43OEwyMy4wNSwyNmg2YTEsMSwwLDAsMCwxLS44bC40LTJh'@;
put 'MSwxLDAsMCwwLTEtMS4ySDIzLjg3bDEuNjMtOGg2YTEsMSwwLDAsMCwxLS44bC40MS0yQTEsMSwwLDAsMCwzMS44NywxMFptLTEyLDEyaC01LjRsMS42NC04aDUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksXy5Tb2NpYWxTaGFwZXM9e2Nyb3du'@;
put 'Ol8uQ2xyU2hhcGVDcm93bixzaGFyZTpfLkNsclNoYXBlU2hhcmUsc3RhcjpfLkNsclNoYXBlU3RhciwiaGFsZi1zdGFyIjpfLkNsclNoYXBlSGFsZlN0YXIsYm9va21hcms6Xy5DbHJTaGFwZUJvb2ttYXJrLGVudmVsb3BlOl8uQ2xyU2hhcGVFbnZlbG9wZSxjYWxlbmRhcjpCLkNsclNoYXBl'@;
put 'Q2FsZW5kYXIsZXZlbnQ6Qi5DbHJTaGFwZUV2ZW50LHRhc2tzOl8uQ2xyU2hhcGVUYXNrcyxmbGFnOl8uQ2xyU2hhcGVGbGFnLGluYm94Ol8uQ2xyU2hhcGVJbmJveCxoYXNodGFnOl8uQ2xyU2hhcGVIYXNodGFnLGhlYXJ0Ol8uQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpfLkNsclNo'@;
put 'YXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxlcyI6Xy5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6Xy5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpfLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6Xy5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpfLkNs'@;
put 'clNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNlIjpfLkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjpfLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpfLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAs'@;
put 'eS5kZXNjcmlwdG9yQ29uZmlnKShfLlNvY2lhbFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLlNvY2lh'@;
put 'bFNoYXBlcywiZGF0ZSIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChfLlNvY2lhbFNoYXBlcyl9LCIu'@;
put 'L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90'@;
put 'ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5DbHJTaGFwZVZNV0FwcD1fLkNsclNoYXBlVk09Xy5DbHJTaGFwZVJvdXRlcj1fLkNsclNoYXBlTmV0d29ya1N3aXRjaD1fLkNsclNoYXBlTmV0d29ya1NldHRpbmdzPV8uQ2xyU2hhcGVOZXR3b3JrR2xvYmU9'@;
put 'Xy5DbHJTaGFwZVRhYmxldD1fLkNsclNoYXBlTW9iaWxlPV8uQ2xyU2hhcGVCYXR0ZXJ5PV8uQ2xyU2hhcGVBcHBsaWNhdGlvbj1fLkNsclNoYXBlQ29kZT1fLkNsclNoYXBlVGVybWluYWw9Xy5DbHJTaGFwZURpc3BsYXk9Xy5DbHJTaGFwZUNvbXB1dGVyPV8uQ2xyU2hhcGVGbG9wcHk9Xy5D'@;
put 'bHJTaGFwZVBsdWdpbj1fLkNsclNoYXBlRG93bmxvYWRDbG91ZD1fLkNsclNoYXBlVXBsb2FkQ2xvdWQ9Xy5DbHJTaGFwZUV4cG9ydD1fLkNsclNoYXBlSW1wb3J0PV8uQ2xyU2hhcGVTaGllbGRYPV8uQ2xyU2hhcGVTaGllbGQ9Xy5DbHJTaGFwZVNoaWVsZENoZWNrPV8uQ2xyU2hhcGVSZXNv'@;
put 'dXJjZVBvb2w9Xy5DbHJTaGFwZURhdGFDbHVzdGVyPV8uQ2xyU2hhcGVNZW1vcnk9Xy5DbHJTaGFwZUNQVT1fLkNsclNoYXBlQnVpbGRpbmc9Xy5DbHJTaGFwZUFwcGxpY2F0aW9ucz1fLkNsclNoYXBlQ2x1c3Rlcj1fLkNsclNoYXBlU3RvcmFnZT1fLkNsclNoYXBlSG9zdD1fLkNsclNoYXBl'@;
put 'RGFzaGJvYXJkPV8uQ2xyU2hhcGVNb3VzZT1fLkNsclNoYXBlS2V5Ym9hcmQ9Xy5DbHJTaGFwZURldmljZXM9Xy5DbHJTaGFwZUJhY2t1cD1fLkNsclNoYXBlQmFja3VwUmVzdG9yZT1fLkNsclNoYXBlSGFyZERpc2s9Xy5DbHJTaGFwZVJhY2tTZXJ2ZXI9Xy5DbHJTaGFwZVdpZmk9Xy5DbHJT'@;
put 'aGFwZUJ1bmRsZT1fLkNsclNoYXBlQmxvY2tzR3JvdXA9Xy5DbHJTaGFwZUJsb2NrPV8uQ2xyU2hhcGVMYXllcnM9Xy5DbHJTaGFwZVVuaW5zdGFsbD1fLkNsclNoYXBlSW5zdGFsbD1fLkNsclNoYXBlTm9XaWZpPV8uQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9Xy5DbHJTaGFwZVJ1bGVyUGVuY2ls'@;
put 'PXZvaWQgMCxfLlRlY2hub2xvZ3lTaGFwZXM9Xy5DbHJTaGFwZUZpbGVTaGFyZTI9Xy5DbHJTaGFwZUNpQ2Q9Xy5DbHJTaGFwZUFuaW1hdGlvbj1fLkNsclNoYXBlVGFwZURyaXZlPV8uQ2xyU2hhcGVNZWRpYUNoYW5nZXI9Xy5DbHJDb250cm9sTHVuPV8uQ2xyU2hhcGVQb2Q9Xy5DbHJTaGFw'@;
put 'ZU5vZGU9Xy5DbHJTaGFwZU5hbWVzcGFjZT1fLkNsclNoYXBlTm9kZXM9Xy5DbHJTaGFwZU5vZGVHcm91cD1fLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXI9Xy5DbHJTaGFwZUhvc3RHcm91cD1fLkNsclNoYXBlU3F1aWQ9Xy5DbHJTaGFwZUNhcGFjaXRvcj1fLkNsclNoYXBlUmVzaXN0b3I9Xy5D'@;
put 'bHJTaGFwZUluZHVjdG9yPV8uQ2xyU2hhcGVSYWRhcj1fLkNsclNoYXBlVXNiPV8uQ2xyU2hhcGVRckNvZGU9Xy5DbHJTaGFwZUZpbGVTaGFyZT1fLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPV8uQ2xyU2hhcGVDb250YWluZXI9Xy5DbHJTaGFwZUNkRHZkPV8uQ2xyU2hhcGVCYXJDb2RlPV8u'@;
put 'Q2xyU2hhcGVBdG9tPV8uQ2xyU2hhcGVBc3NpZ25Vc2VyPV8uQ2xyU2hhcGVQcm9jZXNzT25WTT1fLkNsclNoYXBlQmx1ZXRvb3RoT2ZmPV8uQ2xyU2hhcGVCbHVldG9vdGg9Xy5DbHJTaGFwZVNTRD1fLkNsclNoYXBlTlZNZT1fLkNsclNoYXBlSGFyZERyaXZlRGlza3M9Xy5DbHJTaGFwZUhh'@;
put 'cmREcml2ZT1fLkNsclNoYXBlQWRtaW5pc3RyYXRvcj1fLkNsclNoYXBlRmxhc2s9Xy5DbHJTaGFwZUhlbGl4PV8uQ2xyU2hhcGVEZXBsb3k9Xy5DbHJTaGFwZUNsb3VkVHJhZmZpYz1fLkNsclNoYXBlQ2xvdWRTY2FsZT1fLkNsclNoYXBlQ2xvdWROZXR3b3JrPV8uQ2xyU2hhcGVVbmxpbms9'@;
put 'Xy5DbHJTaGFwZUxpbms9Xy5DbHJTaGFwZURpc2Nvbm5lY3Q9Xy5DbHJTaGFwZUNvbm5lY3Q9Xy5DbHJTaGFwZVVuYXJjaGl2ZT1fLkNsclNoYXBlQXJjaGl2ZT1fLkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciB5PUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoi'@;
put 'Li9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtfLkNsclNoYXBlUnVsZXJQZW5jaWw9KDAs'@;
put 'Zy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAxNy40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQu'@;
put 'MTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4w'@;
put 'OEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4z'@;
put 'N1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBINC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0x'@;
put 'MCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicpLF8uQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwzMi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODds'@;
put 'NSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMu'@;
put 'ODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5'@;
put 'LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCwwLDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEz'@;
put 'My43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJMMTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLF8uQ2xyU2hhcGVO'@;
put 'b1dpZmk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNi4yMSwyMS44NWExLDEsMCwwLDAtLjIzLTEuNCwxMy41NiwxMy41NiwwLDAsMC01LTIuMjNsMy44NywzLjg3QTEsMSwwLDAsMCwyNi4yMSwyMS44NVoiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTAuNzJhMjAuODgsMjAuODgsMCwwLDAtNC4xNi40M2wxLjc0LDEuNzRhMTksMTksMCwwLDEsMi40Mi0uMTdBMTguNzYsMTguNzYsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTIt'@;
put 'MS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzMuNTUsOC4yQTI4LjExLDI4LjExLDAsMCwwLDguMTEsNS4zNkw5LjY5LDYuOTNBMjYsMjYsMCwwLDEs'@;
put 'MzIuNDUsOS44N2ExLDEsMCwwLDAsMS4xLTEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTEuODQsNC43NSw0LjI3LDcuMThjLS42Mi4zNC0xLjIzLjctMS44MywxLjFBMSwxLDAsMSwwLDMuNTYsOS45NEM0'@;
put 'LjI2LDkuNDcsNSw5LDUuNzQsOC42NWwzLjg3LDMuODdBMjAuNTksMjAuNTksMCwwLDAsNi4yMywxNC40LDEsMSwwLDAsMCw3LjM2LDE2YTE4LjgyLDE4LjgyLDAsMCwxLDMuNzctMmw0LjE2LDQuMTZBMTMuNTEsMTMuNTEsMCwwLDAsMTAsMjAuNTVhMSwxLDAsMCwwLDEuMTgsMS42MUExMS41'@;
put 'MiwxMS41MiwwLDAsMSwxNywyMGwxMC44LDEwLjgsMS40MS0xLjQxLTI2LTI2WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LjE4LDE3LjcxbC4xMS0uMTdhMS41MSwxLjUxLDAsMCwwLS40Ny0yLjFBMjAuNTcsMjAuNTcsMCwwLDAsMTgsMTIuMzdjLS41NiwwLTEuMTEsMC0xLjY1LjA3bDMuMjEsMy4yMWExNy40MSwxNy40MSwwLDAsMSw3LjYsMi41MkEx'@;
put 'LjQ5LDEuNDksMCwwLDAsMjkuMTgsMTcuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuNzYsOS4zOEEyNy45LDI3LjksMCwwLDAsMTAuMTgsNi4yN0wxMi44MSw4LjlBMjQuNjgsMjQuNjgsMCwwLDEsMzEuMSwx'@;
put 'Mi4xMmExLjQ5LDEuNDksMCwwLDAsMi0uNDZsLjExLS4xN0ExLjUxLDEuNTEsMCwwLDAsMzIuNzYsOS4zOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0zLDQuNzVsMy4xLDMuMUEyNy4yOCwyNy4yOCwwLDAsMCwzLjE4'@;
put 'LDkuNDJhMS41MSwxLjUxLDAsMCwwLS40OCwyLjExbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMjQuNjksMjQuNjksMCwwLDEsMy42Ny0xLjlsMy4xNCwzLjE0YTIwLjYzLDIwLjYzLDAsMCwwLTQuNTMsMi4wOSwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5'@;
put 'LDAsMCwwLDIsLjQ2QTE3LjQ2LDE3LjQ2LDAsMCwxLDE0LjI1LDE2bDMuNiwzLjZhMTMuMzksMTMuMzksMCwwLDAtNi43OSwxLjkzLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMiwxMC4yLDAsMCwxLDktLjdMMjksMzAuNzVsMS40MS0x'@;
put 'LjQxLTI2LTI2WiIvPlxuJyksXy5DbHJTaGFwZUluc3RhbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJI'@;
put 'NS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3'@;
put 'LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEsMCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEs'@;
put 'MTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0x'@;
put 'MC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksXy5DbHJTaGFwZVVuaW5zdGFsbD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDls'@;
put 'NS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiww'@;
put 'LDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNB'@;
put 'MSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44'@;
put 'N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwz'@;
put 'LjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUuMjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44'@;
put 'NSwxLjE0WiIvPlxuJyksXy5DbHJTaGFwZUxheWVycz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEs'@;
put 'MSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEsLjg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwx'@;
put 'LDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEs'@;
put 'MzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0'@;
put 'LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLF8uQ2xyU2hhcGVCbG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh'@;
put 'MSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEExLDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsNS4xLDI4LjYxLDEwLDE4LDE0LjksNy4zOSwxMFpNNiwxMS41NmwxMSw1LjA4djE0LjhMNiwyNi4zNlpNMTksMzEuNDRWMTYuNjRsMTEt'@;
put 'NS4wOHYxNC44WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNTNWMjYuMzZMMTksMzEuNDRWMTYuNjRsMi41Ny0xLjE5YTMuNjcsMy42NywwLDAsMS0yLjExLTEuMjJMMTgsMTQuOSw3LjM5LDEwLDE4'@;
put 'LDUuMWwzLjA4LDEuNDIsMS0xLjc0TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAsMCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuNTNaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEs'@;
put 'NS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg3LDEuMjZsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTJIMzMuN2ExLjI4LDEuMjgsMCwwLDAsMS4x'@;
put 'LTEuOTJMMjkuMDgsMS4yNkExLjI4LDEuMjgsMCwwLDAsMjYuODcsMS4yNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEu'@;
put 'NDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh'@;
put 'MSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMzEuNDQsNiwyNi4zNlYxMS41NmwxMSw1LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMS40Miw5LjA5bC0xMy02YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYyN2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjEwQTEsMSwwLDAsMCwzMS40Miw5LjA5Wk0xOCwxNC45LDcuMzksMTAs'@;
put 'MTgsNS4xLDI4LjYxLDEwWk0zMCwyNi4zNiwxOSwzMS40NFYxNi42NGwxMS01LjA4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS4zOHYxMUwxOSwzMS40NFYxNi42NGwyLjc5LTEuMjlhMy42OCwzLjY4LDAs'@;
put 'MCwxLTIuMjUtMS4xNkwxOCwxNC45LDcuMzksMTAsMTgsNS4xbDMsMS4zOSwxLTEuNzVMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxNS4z'@;
put 'OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xMiwyMS4xMywxMWExLjI3LDEuMjcsMCwwLDAsMS4xLDEuOTFIMzMuNjhBMS4yNywxLjI3LDAsMCwwLDM0Ljc4LDExTDI5'@;
put 'LjA2LDEuMTJBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4w'@;
put 'OC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41'@;
put 'OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAi'@;
put 'IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxfLkNsclNoYXBlQmxvY2tzR3JvdXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0Ex'@;
put 'LDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4w'@;
put 'OCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTIuODEuOTFMMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzVaTTE4LjEsNC4wOGw1LjExLDIuMzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYs'@;
put 'MTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzLTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFpNMTEuNiwxNS41N2gwVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDI0LjYsOHY3LjU4aDBsLTYuNSwzWk0zMi4x'@;
put 'MSwyOC44MWwtNi41LDMtNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdoLTJ2MGwtNi41LDMtNi41LTNWOGw2'@;
put 'LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBsLjI0LS4xMWE0LjE3LDQuMTcsMCwwLDEsLjI5LS42NWwxLjMzLTIuMzEtMi4yOCwxTDEzLDYuNDNsNS4xLTIuMzUsMy40NywxLjYsMS0xLjczTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwt'@;
put 'Ni45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpN'@;
put 'MTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1'@;
put 'LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbjxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMz'@;
put 'LjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTgu'@;
put 'NzYsMjYuNiwxNS41N1YxMi43YTcuNTgsNy41OCwwLDAsMS0yLTEuNTF2NC4zOWwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBMMjMsOC43MmE3LjA1LDcuMDUsMCwwLDEtLjQ3LTJsLTQuNDcsMkwxMyw2LjQzbDUuMS0yLjM1LDQuNDQsMnMwLS4wNiwwLS4wOWE3LjU1'@;
put 'LDcuNTUsMCwwLDEsLjI3LTJsLTQuMy0yYTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4y'@;
put 'NmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTAsMTQuNDktNi41LTNWMjEuMjNMMTAuMTgsMjRBMSwxLDAsMCwwLDExLDI0bDYuMDgt'@;
put 'Mi44LDAsNy42Wm0xNS0xNC40OCw1LjExLDIuMzVMMjUuNjEsMjIsMjAuNSwxOS42N1ptMCwxNC40OS02LjUxLTNWMjEuMjJMMjUuMTksMjRBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEt'@;
put 'LWJhZGdlZCIgLz5cbjxjaXJjbGUgY3g9IjMwLjAzIiBjeT0iNi4wMyIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEs'@;
put 'MCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwz'@;
put 'LjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzUsNS4xMSwyLjM1Wm0tMS02LjQ0LTYuNDQsM1YxMC44N2ExLDEsMCwwLDAsLjM1LS4wOEwyNC42LDh2'@;
put 'Ny41OFpNMTguMSw0LjA4bDUuMTEsMi4zNUwxOC4xLDguNzgsMTMsNi40M1pNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm02LjUsMTEuNDktNi41LDNoMFYyNC4xMWgwQTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFptMTUsMC02LjQ2LDNWMjQuMTFBMSwxLDAsMCww'@;
put 'LDI2LDI0bDYuMDgtMi44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3djBoLTJ2MGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4bC4xNC0uMDZBMy4yMywzLjIzLDAsMCwxLDE5'@;
put 'LDEwbDEuMjgtMi4yMi0yLjE0LDFMMTMsNi40M2w1LjEtMi4zNSwzLjM5LDEuNTYsMS0xLjczLTQtMS44M2ExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMu'@;
put 'NDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUEx'@;
put 'LjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwyLjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODksMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yNywxM0gzMy43MmExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMSwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44OSwxLjE0WiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbjxwYXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjEyLjY5YTcuNjYsNy42NiwwLDAsMS0yLTEuNDd2NC4zNGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4'@;
put 'TDIzLDguNzNhNy42NSw3LjY1LDAsMCwxLS40OC0ybC00LjQyLDJMMTMsNi40M2w1LjEtMi4zNSw0LjM4LDJWNmE3LjU1LDcuNTUsMCwwLDEsLjI3LTJMMTguNSwyLjA4YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAt'@;
put 'LjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wm0tMjgsLjkxLDUuMTEtMi4zNiw1'@;
put 'LjExLDIuMzVMMTAuNiwyMlpNMTAuNiwzMS44VjI0LjExQTEuMDgsMS4wOCwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptOS45LTEyLjEzLDUuMTEtMi4zNSw1LjExLDIuMzVMMjUuNjEsMjJaTTI1LjY0LDMxLjhWMjQuMTFBLjg5Ljg5LDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42WiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2lyY2xlIGN4PSIyOS45OCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLF8u'@;
put 'Q2xyU2hhcGVCdW5kbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42'@;
put 'LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIu'@;
put 'MTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGEx'@;
put 'LDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2'@;
put 'LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSxfLkNsclNoYXBlV2lmaT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4'@;
put 'LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0uMDcsMSwxLDAsMCwwLDEuMS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43'@;
put 'MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIuNjQsMSwxLDAsMCwwLDEuMTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUyLDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LDI0LjQyYTQsNCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8'@;
put 'Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0IiByPSIzIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIuNzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0y'@;
put 'OS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0LjY4LDI0LjY4LDAsMCwxLDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTksMjAuNTksMCwwLDAtMjEuNywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcuNCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwx'@;
put 'LjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEzLjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSww'@;
put 'LDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJyksXy5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAsZy5j'@;
put 'bHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIyNSIgd2lk'@;
put 'dGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguNjQsMTFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxMHYyWiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjIxSDRWMTVIMjAuNThBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDRWN0gyMC43MWwxLjE1'@;
put 'LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNNCwyOVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxl'@;
put 'cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI2IiB5PSIxNyIg'@;
put 'd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjYiIHk9IjI1IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQi'@;
put 'IHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTEwLDExSDI0di0uNTFBNy40OCw3LjQ4LDAsMCwxLDIzLjEzLDlIMTBaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjY4LS41SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4w'@;
put 'Ny0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAg'@;
put 'ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxMCIgeT0iOSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI2IiB5'@;
put 'PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMnY2SDRabTAsOEgzMnY2SDRaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBo'@;
put 'ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOSw5Ljg5LDE5LjU2LDlIMTBWN0gyMC43MWwxLjczLTNINEEyLDIsMCwwLDAsMiw2djZIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlaTTgsOUg2'@;
put 'VjdIOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEgydjhIMzRWMTUuMzhaTTgsMTlINlYxN0g4Wm0xNiwwSDEw'@;
put 'VjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww'@;
put 'LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDE0djhIMzRWMTRabTYsNUg2VjE3SDhabTE2LDBI'@;
put 'MTBWMTdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTIsMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0SDJabTgtM0gyNHYySDEwWk02LDI3SDh2Mkg2WiIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0yMy4xMyw5SDEwVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZ2NkgyNS41MUE3LjUy'@;
put 'LDcuNTIsMCwwLDEsMjMuMTMsOVpNOCw5SDZWN0g4WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIsMjJIMzRWMTRIMlptOC01SDI0djJIMTBaTTYsMTdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIsNEg0QTIsMiwwLDAsMCwy'@;
put 'LDZ2NkgzNFY2QTIsMiwwLDAsMCwzMiw0Wk04LDlINlY3SDhaTTI0LDlIMTBWN0gyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2'@;
put 'MkgxMFpNNiwyN0g4djJINloiLz5cbicpLF8uQ2xyU2hhcGVIYXJkRGlzaz0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTM0LDIxLjA4bC0xLjQtNS42OEgzMC41MWwxLjQ5LDZWMjlINFYyMS40NEw3LjA2LDloMTIuNWwxLjE1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJI'@;
put 'MzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0t'@;
put 'YmFkZ2VkIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zNCwyMS4wOCwzMiwxMy4yMWE3LjQ5LDcuNDksMCwwLDEtMiwuMjlsMiw3Ljk0VjI5SDRWMjEuNDRMNy4wNiw5SDIzLjEzYTcuNDUsNy40NSwwLDAsMS0u'@;
put 'NTUtMkg3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMiwyMS4wOGExLDEsMCwwLDAsMCwuMjRWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIxLjMxQTEsMSwwLDAsMCwzNCwyMS4wOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDIxLjA4LDMwLjg2LDguNDNBMiwyLDAsMCwwLDI4'@;
put 'Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaTTQsMjlWMjEuNDRMNy4wNiw5SDI4LjkzTDMyLDIxLjQ0VjI5WiIvPlxuICAgICAgICAg'@;
put 'ICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjYiIHk9IjIwIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjI2IiB5PSIyNCIg'@;
put 'd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0zMi41OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFa'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0'@;
put 'Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJW'@;
put 'MjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjFBNy40Nyw3LjQ3LDAsMCwxLDIyLjU3LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBI'@;
put 'MzMuNzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiBkPSJNMzAuODYsOC40M0EyLDIsMCwwLDAsMjguOTQsN0g3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMi4yOSwyMEgzMy43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yLDIydjdhMiwyLDAs'@;
put 'MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4nKSxfLkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIg'@;
put 'eT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOWExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcu'@;
put 'MDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlh'@;
put 'MSwxLDAsMSwwLDIsMFY2bDQsMy45NWExLDEsMCwwLDAsLjcxLjI5bC4xMSwwYTcuNDYsNy40NiwwLDAsMS0xLjI1LTMuNTJMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwx'@;
put 'NEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBo'@;
put 'ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC00IiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjJoNy45NUMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIs'@;
put 'MjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBk'@;
put 'PSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwx'@;
put 'LDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDIyLjIzQTMu'@;
put 'NjIsMy42MiwwLDAsMSwyMSwxNS4xNlYxOGEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc5LDIxLjQ5LDMzLjI4LDIwLjA3LDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUy'@;
put 'TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40Niww'@;
put 'LDAsMSwyNS41MSwxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTUsMTkuNywzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDI0djZhMiwyLDAsMCww'@;
put 'LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjZhMywzLDAsMSwxLTYsMFYxMkg3'@;
put 'LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45M0MzMy43NywyMS40MywzMy4xNCwxOS42OSwzMC44NCwxMy4zN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9'@;
put 'Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJyksXy5DbHJTaGFwZUJhY2t1cD0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYi'@;
put 'IHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjcsMy42NywwLDAsMS0yLS42MUwxOSwx'@;
put 'NlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDI5LjQ2YzEsMi44NSwyLjMx'@;
put 'LDYuMzcsMi41NCw3LjA4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIOS41OGEzLDMsMCwwLDEtLjE0LTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzND'@;
put 'MzQsMjIuMTIsMzQsMjIsMzEuNTgsMTUuNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9'@;
put 'IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTMwLjg3LDEzLjQ1YTcuNTUsNy41NSwwLDAsMS0uODcuMDUsNy40Niw3LjQ2LDAsMCwxLTMuMzUtLjgsMywzLDAsMCwxLS4yNCwxLjNoMi41NEMzMCwxNi45NCwz'@;
put 'MS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIy'@;
put 'LjMzQzM0LDIyLjEsMzQsMjIsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJl'@;
put 'Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTIiXG4gICAgICAgICAgICAgICAgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45NCwwLDAsMCwyOC45MywxMkgyNi41NWEzLDMsMCwwLDEtLjE0LDJoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwx'@;
put 'NCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xNi41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3'@;
put 'LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE1LS41MS0uNjUtMS45My0yLjM1LTYuNkgyNS4zbC01Ljg5LDUuODZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTgsMTkuODRsNC40Ny00LjQ0aC0uMjNhMy42NCwzLjY0LDAsMCwxLTItLjYxTDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00'@;
put 'LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45Miww'@;
put 'LDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww'@;
put 'LDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE3LS41Ny0uNzktMi4zLTMuMDYtOC41NWE3LjU1LDcuNTUsMCwwLDEtLjg3'@;
put 'LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uODYsMi4yMWwtNi4zOCw2LjM1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOS40MSwyMS4yNmwtLjc0Ljc0SDMzLjkzYy0uMTctLjU3LS43OS0yLjMxLTMuMDktOC42M0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS43NiwyLjky'@;
put 'WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcs'@;
put 'MjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJyksXy5DbHJTaGFwZURldmljZXM9KDAsZy5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhW'@;
put 'MzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIySDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEy'@;
put 'LDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwy'@;
put 'aDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJWNkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLF8uQ2xyU2hhcGVLZXlib2FyZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwxOEg0VjEwSDMyWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIHg9IjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8'@;
put 'cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTUiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTkiIHk9IjEzIiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtNyIgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iNyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxy'@;
put 'ZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIxMSIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMTUiIHk9IjE3IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE5IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEyIiB4PSIyMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIHg9IjI3IiB5PSIyMiIgd2lkdGg9IjEuOTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiB4PSI3IiB5PSIy'@;
put 'MiIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMS4xMyIgeT0iMjIiIHdpZHRoPSIxMy43NSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk0xOSwxM2gydjJIMTlabTAsNGgydjJIMTlabS00LTRoMnYySDE1Wm0wLDRoMnYySDE1Wm0tNC00aDJ2Mkgx'@;
put 'MVpNOSwyNEg3VjIySDlabTAtNUg3VjE3SDlabTAtNEg3VjEzSDlabTIsMmgydjJIMTFabTEzLjg4LDdIMTEuMTNWMjJIMjQuODhaTTI1LDE5SDIzVjE3aDJabTAtNEgyM1YxM2gyWm0zLjk0LDlIMjdWMjJoMS45NFpNMjksMTlIMjdWMTdoMlptMC00SDI3VjEzaDJaIi8+XG4nKSxfLkNsclNo'@;
put 'YXBlTW91c2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYy'@;
put 'NGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAsOCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMs'@;
put 'MCwwLDEsMi42LDBaIi8+XG4nKSxfLkNsclNoYXBlRGFzaGJvYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptMTEuMzQsMjUuNUg2'@;
put 'LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywxMS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM2ExNC40NywxNC40NywwLDAsMSwxMy40LDEzLjYxSDI4'@;
put 'LjkydjJoMy41M0ExNC40MywxNC40MywwLDAsMSwyOS4zNCwyOS43NVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS44NSwxOC42OWEzLDMsMCwxLDAsNC44My44NWw1Ljky'@;
put 'LTUuODEtMS40MS0xLjQxLTUuOTEsNS44MUEzLDMsMCwwLDAsMTUuODUsMTguNjlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTgsMTNhNy40NSw3LjQ1LDAsMCwxLTIu'@;
put 'MDYuNDQsMTQuNCwxNC40LDAsMCwxLDEuOTMsNi40M0gyOC45MnYyaDMuNTNhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMSw3Ljg0SDYuNjZhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMS03Ljg0SDd2LTJIMy41NUExNC40MSwxNC40MSwwLDAsMSw3LDExLjI5bDIuNDUsMi40NSwxLjQxLTEuNDFMOC40'@;
put 'Myw5Ljg3QTE0LjQxLDE0LjQxLDAsMCwxLDE3LDYuMjl2My41aDJWNi4zQTE0LjQxLDE0LjQxLDAsMCwxLDIyLjU4LDdhNy41Miw3LjUyLDAsMCwxLS4wOC0xLDcuNTIsNy41MiwwLDAsMSwuMDktMS4wOUExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40'@;
put 'NSwxNi40NSwwLDAsMCwyLTE4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptOC42LDkuNDgtNS45Miw1LjgxYTMsMywwLDEsMS0xLjQxLTEuNDJs'@;
put 'NS45MS01LjgxWm0tMjMsNi4xN0g3djJIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3UzMuNTMsMjAuMTgsMy41NSwxOS45Wm00Ljg4LTEwLDIuNDYsMi40Nkw5LjQ3LDEzLjc0LDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3Wk0xOSw5Ljc5SDE3VjYuMjljLjMyLDAsLjYz'@;
put 'LDAsMSwwcy43LDAsMSwuMDVaTTMyLjQ5LDIwLjc0YzAsLjM5LDAsLjc5LS4wNSwxLjE3SDI4Ljkydi0yaDMuNTNDMzIuNDcsMjAuMTgsMzIuNDksMjAuNDYsMzIuNDksMjAuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41OCwxM2E3LjQ2LDcuNDYsMCwwLDEtMTAtOC4xMkExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2Wk0xNyw2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1djMu'@;
put 'NUgxN1pNNywyMS45MUgzLjU2YzAtLjM5LS4wNS0uNzctLjA1LTEuMTdzMC0uNTYsMC0uODNIN1ptMi41MS04LjE2TDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3bDIuNDYsMi40NlptMTAuNjIsOS4xOWEzLDMsMCwxLDEtLjgyLTQuODFsNS45MS01LjgxLDEuNDEsMS40MS01'@;
put 'LjkyLDUuODFBMywzLDAsMCwxLDIwLjA5LDIyLjkzWm0xMi4zNS0xSDI4Ljkydi0yaDMuNTNjMCwuMjgsMCwuNTUsMCwuODNTMzIuNDcsMjEuNTIsMzIuNDQsMjEuOTFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJyksXy5DbHJTaGFwZUhvc3Q9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwy'@;
put 'LjQ4LDIuNDdBMi40OCwyLjQ4LDAsMCwwLDE4LDI0LjNabTAsMy42YTEuMTMsMS4xMywwLDEsMSwxLjEzLTEuMTJBMS4xMywxLjEzLDAsMCwxLDE4LDI3LjlaIi8+PHJlY3QgeD0iMTMuNSIgeT0iMjAuNyIgd2lkdGg9IjkiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjUsMy42SDEwLjM1QTEuMzUsMS4zNSwwLDAsMCw5LDQuOTVWMzIuNEgyN1Y0Ljk1QTEuMzUsMS4zNSwwLDAsMCwyNS42NSwzLjZabS0uNDUsMjdIMTAuOFY1LjRIMjUuMloiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTIuNiIgeT0iNy4yIiB3aWR0aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi'@;
put 'IHg9IjEyLjYiIHk9IjEwLjgiIHdpZHRoPSIxMC44IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwy'@;
put 'LjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVj'@;
put 'dCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMTMiIHk9IjIxIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42Ii8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMyw2IDEyLDYgMTIsNy42IDIwLjQsNy42Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xMiwxMS42aDYuNmMw'@;
put 'LTAuNiwwLjItMS4xLDAuNC0xLjZoLTdWMTEuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTI2LDE1LjRWMzJIMTBWNGgxMi41bDEuMS0ySDkuNUM4LjcsMiw4LDIuNyw4'@;
put 'LDMuNVYzNGgyMFYxNS40SDI2eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhj'@;
put 'MC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEu'@;
put 'MiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9'@;
put 'IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTI0LDEwLjVjLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41SDEydjEuNmgxMlYxMC41eiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTEyLDZ2MS42aDEwLjdjLTAuMS0wLjUtMC4yLTEuMS0wLjItMS42SDEyeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTI2LDEyLjNWMzJIMTBWNGgxMi44YzAuMi0wLjcsMC41LTEuNCwwLjktMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTMuMkMyNy4zLDEzLDI2LjYsMTIuNywyNiwxMi4zeiIvPlxuICAgICAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTI2LjUsMmgtMTdDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMy41QzI4LDIuNywyNy4zLDIsMjYuNSwyeiBNMTgsMzAuNWMtMS41LDAtMi44LTEuMi0yLjgtMi44UzE2LjUsMjUsMTgsMjVzMi44LDEuMiwyLjgsMi44UzE5LjUsMzAuNSwxOCwzMC41eiBNMjMsMjIuNkgxM1YyMWgx'@;
put 'MFYyMi42eiBNMjQsMTEuNkgxMlYxMGgxMlYxMS42eiBNMjQsNy42SDEyVjZoMTJWNy42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMjcuOCIgcj0iMS4yIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIyLjIsMTUuM2MtMiwwLTMuNy0xLjYtMy43LTMuN0gxMlYxMGg2LjljMC0wLjEsMC4xLTAuMiwwLjEtMC4ybDEuMi0yLjJIMTJWNmg5LjJsMi4zLTRoLTE0QzguNywyLDgs'@;
put 'Mi43LDgsMy41VjM0aDIwVjE1LjNIMjIuMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'YWxlcnQiIGQ9Ik0yNi45LDFsLTUuNyw5LjljLTAuMywwLjYtMC4xLDEuNCwwLjUsMS43YzAuMiwwLjEsMC40LDAuMiwwLjYsMC4yaDExLjRjMC43LDAsMS4zLTAuNiwxLjMtMS4zYzAtMC4yLTAuMS0wLjQtMC4yLTAuNkwyOS4xLDFjLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC43'@;
put 'LDI3LDAuOCwyNi45LDF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNCwxMC4zdjEuMkgxMlYxMGgxMS44Yy0wLjUtMC43LTAuOC0xLjUtMS0yLjRIMTJWNmgxMC41YzAsMCwwLTAu'@;
put 'MSwwLTAuMWMwLTEuNCwwLjQtMi43LDEuMS0zLjlIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjFDMjYuNCwxMi42LDI1LDExLjcsMjQsMTAuM3ogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgs'@;
put 'MzAuNXpNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuOSIgcj0iNSIvPlxuJyksXy5DbHJTaGFwZVN0b3JhZ2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIGQ9Ik0zMyw2LjY5aDBjLS4xOC0zLjQxLTkuNDctNC4zMy0xNS00LjMzUzMsMy4yOSwzLDYuNzhWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjYuNzhzMCwwLDAsMFMzMyw2LjcsMzMsNi42OVptLTIsNy41NmMtLjMzLjg2LTUu'@;
put 'MDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMiw0My4zMiwwLDAsMCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1YTQzLjMyLDQzLjMyLDAs'@;
put 'MCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4zLDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmM3Ljc3LDAsMTIuNDYsMS41MywxMywyLjM3LS41Mi44Ny01LjIxLDIuMzktMTMsMi4zOUEzNy42LDM3LjYs'@;
put 'MCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2M0LDAsOS45My0uNDgsMTMtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LjUxLDkuMDks'@;
put 'MTgsOS4xMUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2guNjFBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTItLWFsZXJ0ZWQiIGQ9Ik0yOC44MywxNS40QTM4LjM3LDM4LjM3LDAsMCwxLDE4LDE2LjcsMzcuNDUsMzcuNDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1'@;
put 'LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgsMTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNSwwLDIuODkuMDYsNC4xNS4xNmwx'@;
put 'LjEtMS45Yy0xLjg2LS4xOC0zLjctLjI2LTUuMjUtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4zN2MwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDN2LTE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yNyw1NC44Miw1NC44MiwwLDAsMCw2LjItLjM2LDcuNSw3LjUsMCwwLDEtMS4x'@;
put 'My0xLjg4Yy0xLjUuMTUtMy4yLjI0LTUuMDcuMjRBMzcuNiwzNy42LDAsMCwxLDcsNy43NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMSwxMy40M3YuODJjLS4zMy44Ni01'@;
put 'LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzMsNDMuMzMsMCwwLDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMyw0My4zMyww'@;
put 'LDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUuMywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjMS43LDAsMy4yNS4wOCw0LjY0LjJhNy40NCw3LjQ0LDAsMCwxLC42Ny0xLjk0Yy0xLjg4LS4xOC0zLjc1'@;
put 'LS4yNi01LjMxLS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43'@;
put 'NCwxNS4wOS0zLjk0VjguNTljLS40MywyLjItNywzLjk0LTE1LjA5LDMuOTRBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MUMyNiwxMC41MywzMi41Miw4Ljc5LDMzLDYuNjFoMEMzMi44LDMuMiwyMy41MiwyLjI4LDE4LDIuMjhTMywzLjIxLDMs'@;
put 'Ni43MVYyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5'@;
put 'VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'LS1hbGVydGVkIiBkPSJNMTcuOTEsMjAuMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTguNzd2LTJhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFjNi45LDAsMTIuNy0xLjI3LDE0LjUxLTNIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuNTUtMi43NWgtLjc3QTM5LjQsMzkuNCwwLDAsMSw2LjI1'@;
put 'LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFoLjgyQTMuNjQsMy42NCwwLDAsMSwxOSw5Ljc1bDQuMTctNy4yMmMtMS44NS0uMTgtMy42OC0uMjUtNS4yMS0uMjUtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjI5YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40'@;
put 'M1YyNC4wOUMzMi41NywyNi4yOCwyNiwyOCwxNy45MSwyOEEzOS40LDM5LjQsMCwwLDEsNi4yNSwyNi41MnYtMkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMjZDMjYsMjYsMzIuNTcsMjQuMjgsMzMsMjIuMDlWMTYuMzRDMzIuNTcsMTguNTMsMjYsMjAuMjgsMTcuOTEsMjAuMjhaIi8+XG4gICAg'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkx'@;
put 'TDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0di0xLjZh'@;
put 'Ny40Nyw3LjQ3LDAsMCwxLTcuMzgtLjgsNDguMyw0OC4zLDAsMCwxLTcuNzEuNTlBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MSw1MSw1MSwwLDAsMCw2LS4zNCw3LjQ2LDcuNDYsMCwwLDEtLjU5LTcuNjVjLTEuODctLjE4LTMuNzMtLjI2LTUu'@;
put 'MjgtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2'@;
put 'LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2IiByPSI1Ii8+XG4nKSxfLkNsclNoYXBlQ2x1c3Rlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwx'@;
put 'LjY1LDAsMCwwLDMxLjM2LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiLz48ZWxsaXBzZSBjeD0iMTguMDEiIGN5PSIyNS45OSIgcng9IjEuOCIgcnk9IjEuNzkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCww'@;
put 'LDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0yNCwzMEgxMlY2SDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEu'@;
put 'NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xLS1hbGVydGVkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDkuODls'@;
put 'LjM5LS42OEgxMy41djEuNmg1LjE3QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwzMEgxMlY2aDkuMjlsMS4xNS0ySDExLjY4QTEu'@;
put 'NjgsMS42OCwwLDAsMCwxMCw1LjY4VjMySDI2VjE1LjRIMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMwIDI3LjUgMzAgMjcuNSAzMiAzMyAz'@;
put 'MiAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhI'@;
put 'NC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTAuNDlWMzBIMTJWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwxMy40M1YzMEgyNy41djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0t'@;
put 'YmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM2LDhIMjcuNVYzMkgz'@;
put 'M1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwx'@;
put 'OCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy41IiB5PSIxNS40IiB3aWR0aD0iNS41IiBoZWlnaHQ9IjE2LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjMxLTNIMTNWOWg2LjU2bDIuODktNUgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2'@;
put 'LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMyw5LjY3VjMySDgu'@;
put 'NVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAs'@;
put 'MTAsNS42OFYzMkgyNlYxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjUtLjQ0VjMySDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxnLmNsckljb25TVkcpKCc8cG9s'@;
put 'eWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDggMTUgOCAxNSAxMCAyMSAxMCAyMSA0IDE5IDQgMTkgOCIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgNCAzMCA4IDI2IDggMjYgMTAgMzIgMTAgMzIgNCAzMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAg'@;
put 'PHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1'@;
put 'IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAz'@;
put 'MiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBv'@;
put 'bHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAx'@;
put 'MCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMwIDE5IDI2IDE5IDI2IDIxIDMyIDIxIDMyIDE1IDMwIDE1IDMwIDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29u'@;
put 'IHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAzMCAyNiAzMCAyNiAzMiAzMiAz'@;
put 'MiAzMiAyNiAzMCAyNiAzMCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5'@;
put 'IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxNSAzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAx'@;
put 'NSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTks'@;
put 'OEgxNXYyaDRMMTksOS44OSwyMSw2LjVWNEgxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMu'@;
put 'NjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0i'@;
put 'NCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWln'@;
put 'aHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIy'@;
put 'NiIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVy'@;
put 'dGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhl'@;
put 'aWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0'@;
put 'aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMGg0TDE5LDku'@;
put 'ODksMjEsNi41VjRIMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCww'@;
put 'LDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC05LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iNiIgaGVp'@;
put 'Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSI0IiB3aWR0aD0iNiIgaGVp'@;
put 'Z2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUt'@;
put 'LWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIg'@;
put 'aGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxfLkNsclNoYXBlQnVpbGRpbmc9KDAsZy5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn'@;
put 'ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVp'@;
put 'Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMi'@;
put 'IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0'@;
put 'IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIvPlxu'@;
put 'ICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgi'@;
put 'IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMzEsMTMuNDNWMzFIMjN2MkgzM1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIxLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2'@;
put 'IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3'@;
put 'aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIvPlxuICAgICAgICAg'@;
put 'ICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'NS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwzMUgxN1Yy'@;
put 'OEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMlY4LjI0bDItMy40MUEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWMTUuMzhhMy42OCwzLjY4LDAsMCwxLTItLjc0WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMxIDE1LjQgMzEgMzEgMjMgMzEgMjMgMzMgMzMgMzMgMzMgMTUuNCAzMSAxNS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu'@;
put 'ODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjJWMzNIMzNWMTBBMiwyLDAsMCwwLDMxLDhaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYx'@;
put 'OGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMlptMC01SDI4VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYz'@;
put 'MGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlpt'@;
put 'MC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVYxNC42NGEzLjY3LDMuNjcsMCwwLDEtMS00'@;
put 'Ljc2bDEtMS42NVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMTho'@;
put 'MlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNGwtLjIzLDBWMzNIMzNWMTUuNFpNMjYsMjVIMjRWMjNoMlptMC01SDI0VjE4'@;
put 'aDJabTQsNUgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44OCwz'@;
put 'SDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0g5VjMwaDZ2M2g1VjUuMTJBMi4xMiwyLjEyLDAsMCwwLDE3Ljg4LDNaTTksMjVIN1YyM0g5Wm0wLTVIN1YxOEg5Wm0wLTVIN1YxM0g5Wm0wLTVIN1Y4SDlabTQsMTVIMTFWMjNoMlptMC01SDExVjE4aDJabTAtNUgxMVYxM2gyWm0wLTVI'@;
put 'MTFWOGgyWm00LDE1SDE1VjIzaDJabTAtNUgxNVYxOGgyWm0wLTVIMTVWMTNoMlptMC01SDE1VjhoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYxNUgyOFYxMy4yMkE3LjUs'@;
put 'Ny41LDAsMCwxLDIyLjc4LDhIMjJWMzNIMzNWMTIuODdBNy40Nyw3LjQ3LDAsMCwxLDMwLDEzLjVaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsOEgyM3YyaDhW'@;
put 'MzFIMjN2MkgzM1YxMEEyLDIsMCwwLDAsMzEsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTku'@;
put 'ODgsM1pNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiwwLDAsMSwuMTIuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJl'@;
put 'Y3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTExIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiLz5cbiAgICAgICAgICAg'@;
put 'IDxyZWN0IHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIi'@;
put 'IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE4Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOSIvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUNQVT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEu'@;
put 'NUgyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxMS4zM2gtMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEu'@;
put 'NkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZI'@;
put 'NnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYz'@;
put 'MEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40Wk0yOCwyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOEgyNy45YS4xLjEsMCwwLDEsLjEuMVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYsMjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVYyMy4wN2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEs'@;
put 'OC4xLDhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwx'@;
put 'LjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAs'@;
put 'MjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTUuNEgyOFYyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFB'@;
put 'LjEuMSwwLDAsMSw4LjEsOGgxMmwxLjE1LTJIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUu'@;
put 'NEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1'@;
put 'LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4wNiwyNC41N0gyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxNS40aC0xLjV2Ny42'@;
put 'N2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQu'@;
put 'NzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIu'@;
put 'MmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjV2OC40MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNIMjNWMTUuNGgtLjc3QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZI'@;
put 'OC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2'@;
put 'Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy'@;
put 'dGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxMy41YTcuNDYsNy40NiwwLDAsMS01LTEuOTJWMjMuODFBMS4xOCwxLjE4LDAsMCwxLDI0'@;
put 'LDI1SDEzVjIzSDIzVjExaDEuNDJBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkgxOS4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44'@;
put 'LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDguMSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4x'@;
put 'LDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJh'@;
put 'ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjIsMTguMTVhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjguMUEyLjEsMi4xLDAsMCwwLDI3LjksNkgyNi4zNVYzLjhh'@;
put 'LjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjgu'@;
put 'OCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEu'@;
put 'OC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxfLkNsclNoYXBlTWVtb3J5PSgwLGcuY2xySWNvblNWRykoJzxyZWN0'@;
put 'IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwy'@;
put 'SDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDdINEEyLDIsMCwwLDAsMiw5djRINFY5SDMydjRoMlY5QTIsMiwwLDAsMCwzMiw3WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyN0gxOXYySDMyYTIsMiwwLDAsMCwyLTJWMTdIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdp'@;
put 'ZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEsMTguNTcsMTJIMTZ2OGg0VjE0LjY0QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1h'@;
put 'bGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNCIgeT0iMTUuNCIgd2lkdGg9IjQiIGhlaWdodD0iNC42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgxOS41Nmwx'@;
put 'LjE1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIg'@;
put 'eT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'My0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJB'@;
put 'Ny40Niw3LjQ2LDAsMCwxLDI1LjUxLDEySDI0djhoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINEEyLDIsMCwwLDAsMiw5'@;
put 'djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRn'@;
put 'ZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxM1Y5YTIsMiwwLDAsMC0yLTJINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyVjEzWk0xMiwyMEg4VjEyaDRabTgs'@;
put 'MEgxNlYxMmg0Wm04LDBIMjRWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxN1YxNS4wN0gyOFYyMEgyNFYxNS4wN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMjAsMTQuMzFWMjBIMTZWMTJoMi42MUEzLjY4'@;
put 'LDMuNjgsMCwwLDEsMTksOS41NUwyMC41Miw3SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LjhBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LjhaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMTMuMjJhNy4zMyw3LjMzLDAsMCwxLTQsMFYyMEgyNFYxMmgxLjUxYTcuNDgsNy40OCwwLDAsMS0yLjk0LTVINEEyLDIsMCwwLDAsMiw5djRI'@;
put 'NHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3Wk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhD'@;
put 'MjIuNzcsNC4wOCwxOSw1LjQsMTksNy45MVY5LjVhMTguNzUsMTguNzUsMCwwLDEsMiwuMlY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMzMiw3LjI3LDMyLDcuOTFWMTguMjRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0'@;
put 'LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1'@;
put 'LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVabTYuNjUsNy42N2MtLjg1'@;
put 'LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMs'@;
put 'MCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4czYuNjUsMS40Myw2LjY1LDIuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMwLS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUu'@;
put 'NCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC42NSwx'@;
put 'OC41MmMtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYu'@;
put 'MzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4bC43NSwwYTMuNjksMy42OSwwLDAsMS0uMDgtMmwtLjY2'@;
put 'LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYxNS40aC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0yMiw0LjhjLTEuNzUuNjMtMywxLjY4LTMsMy4xMlY5LjVsLjI1LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2Mi44NGMwLC41'@;
put 'NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEu'@;
put 'MjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQs'@;
put 'NC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1'@;
put 'LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywx'@;
put 'Ni4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40MiwyLTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIu'@;
put 'NjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYuNjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjEsNy45MWMwLS4zMy41NS0uOCwxLjU0LTEuMTgsMC0uMjQsMC0uNDgsMC0uNzNhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjQxQzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnY1YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzV2LTUuOUE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS40OGM1LjMuMjYsOSwyLjYsOSw1Ljc2djYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcs'@;
put 'OS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQu'@;
put 'MzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAu'@;
put 'MjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4'@;
put 'VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2YTMuNjgsMy42OCwwLDAsMS0uMzktMi43bC0uNjYsMGMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4'@;
put 'LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSww'@;
put 'LDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44'@;
put 'Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS40OGwuMjcsMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDI4djYuNTNsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45'@;
put 'LTMuNzVWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0'@;
put 'Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3'@;
put 'LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIxLjkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQu'@;
put 'NSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIxLjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMTEsOC42My0zLjExVjE1LjIzQzI2LjY1'@;
put 'LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjRDMjAuNTUsNS4xOSwxOSw2LjMsMTksNy45'@;
put 'MVY5LjQ4YTE1LjMzLDE1LjMzLDAsMCwxLDUsMUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjcuMzUs'@;
put 'MTNhNCw0LDAsMCwxLC43LDIuMjN2Ni43bC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjEyLjMzQTcuNDYsNy40NiwwLDAsMSwzMCwxMy40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2ly'@;
put 'Y2xlIGN4PSIzMCIgY3k9IjUuOTkiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4'@;
put 'LDE1LjRIMzEuNzNhMTQsMTQsMCwwLDEsLjIyLDEuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIuMDksNC42MmwxLTEuNzZBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaTTE4LDMyYTEzLjkxLDEzLjkxLDAsMCwxLTguMTYtMi42NUwxOC40MywxOUgzMS45'@;
put 'NUExNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYs'@;
put 'MTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNCwxOGExNCwxNCwwLDAsMSwyNy45NS0xSDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSw0LDE4Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjIsMTMuNGExMy45MSwxMy45MSwwLDAsMSwuNzUsMy42SDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSwyMi42MSw0LjhhNy40Myw3LjQzLDAsMCwxLC41OC0xLjkyLDE2'@;
put 'LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQzLDcuNDMsMCwwLDEsMzEuMiwxMy40Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45'@;
put 'QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3QTE2LDE2LDAsMSwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE1Ljkx'@;
put 'LDE1LjkxLDAsMCwwLS44NC00LjE4LDcuNDksNy40OSwwLDAsMS05LjkyLTkuOTRBMTYsMTYsMCwwLDAsNywyOS42TDE3LjQ5LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj'@;
put 'eT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTUsMTdhMTYsMTYsMCwwLDAtLjE4LTEuNjFIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsNC4wNi03QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4'@;
put 'LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3'@;
put 'LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4x'@;
put 'Mi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4'@;
put 'LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSww'@;
put 'LDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41'@;
put 'NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0'@;
put 'LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZVNoaWVsZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBk'@;
put 'PSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42Niwx'@;
put 'OC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODIt'@;
put 'Myw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNHYuNTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0x'@;
put 'Mi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItM2MxLC42NCwyLjIsMS4yNywzLjQzLDEuODlsMS0xLjc0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwz'@;
put 'LjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjV2Mi40M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0'@;
put 'Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ2LjE5LDQ2LjE5LDAsMCwwLDQuNTEsMi40MmMwLS4xLDAtLjE5LDAtLjI5YTcuNDksNy40OSwwLDAsMSwuMjMtMS44Myw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUs'@;
put 'MCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh'@;
put 'ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0'@;
put 'YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42'@;
put 'OCwwLDAsMSwxOSw5Ljg5TDIyLjQzLDRhNDEuMSw0MS4xLDAsMCwxLTMuODktMi4xOEwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4z'@;
put 'NC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIz'@;
put 'LDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTcuMjctOS4zMyw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42'@;
put 'NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i'@;
put 'MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxfLkNsclNoYXBlU2hpZWxkWD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5'@;
put 'LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCww'@;
put 'LDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1Ljgy'@;
put 'LDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00Ljgx'@;
put 'LDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwx'@;
put 'My42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEuNCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40'@;
put 'LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxfLkNsclNoYXBlSW1wb3J0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3'@;
put 'TDgsMTAuODZWMTVoMlYxMy42MWg3LjYxVjZIMjhWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS43LDZIMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTExLjk0LDI2LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTksMjJsLTUuNjgtNS42OGExLDEsMCwwLDAtMS40MSwxLjQxTDE1LjIsMjFIM2ExLDEsMCwxLDAsMCwySDE1LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMEg4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0xMCwxMy42MWg3LjYxVjZoMy42OGwxLjE1LTJIMTQuODdMOCwxMC44NlYxNWgyWm0wLTEuOTJMMTUuNyw2SDE2djZIMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTQuODdMOCwxMC44NlYyMUgxNS4ybC0zLjI1LTMuMjVhMSwxLDAsMCwxLDEu'@;
put 'NDEtMS40MUwxOSwyMmwtNS42OCw1LjY4YTEsMSwwLDAsMS0xLjQxLTEuNDFMMTUuMjMsMjNIOHY3YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0Wk0xNiwxMkgxMHYtLjMyTDE1LjY5LDZIMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMywyMWExLDEsMCwxLDAsMCwySDhWMjFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCww'@;
put 'LDEsMTksOS44OUwyMi40NSw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFpNMTYsMTJI'@;
put 'MTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww'@;
put 'LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAs'@;
put 'Mkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQx'@;
put 'LTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNlpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFw'@;
put 'ZUV4cG9ydD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZhMiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2aDcuNjhsMS4xNS0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAt'@;
put 'MS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2'@;
put 'LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0yNiwxMi4zNGE3LjUzLDcuNTMsMCwwLDEtMi0xLjg1djMuODloMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3'@;
put 'LjQ5LDAsMCwxLC4yOC0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWNmEyLDIsMCwwLDAtMi0ySDEw'@;
put 'Ljg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIs'@;
put 'MTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSww'@;
put 'LDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEs'@;
put 'MCwwLDEsMS0xaDhWMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTls'@;
put 'LTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDIy'@;
put 'Ljc4LDRIMTAuODdMNCwxMC44NlYzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMjNIMThBMSwxLDAsMCwxLDE3LDIyWk0xMiwxMkg2di0uMzJMMTEuNjksNkgxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBk'@;
put 'PSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42NSw3LjY1LDAsMCwxLDExLDEw'@;
put 'Ljc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguMjYsOC4yNiwwLDAsMSw4LjQ1LDgsNy43NSw3Ljc1LDAsMCwxLDAsLjhsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDMuOTMtMTVaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEsMSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwy'@;
put 'MS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwy'@;
put 'LjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0u'@;
put 'NjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguODEsOC44MSwwLDAsMSwyLC4yNWwxLTEuOGExMC44LDEwLjgsMCwwLDAtMy4wNy0uNDUsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1'@;
put 'QTcuNjYsNy42NiwwLDAsMSwzLjYsMTguMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4QTgsOCww'@;
put 'LDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww'@;
put 'LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUEx'@;
put 'LDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEsMCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRn'@;
put 'ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDQuNTQtMTQuNTZaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcu'@;
put 'NDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHIt'@;
put 'aS1iYWRnZSIvPlxuICAgICAgICAnKSxfLkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww'@;
put 'LDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMtLjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZI'@;
put 'MjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEs'@;
put 'MC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDI2LjA3YTEsMSwwLDAsMC0uNzEu'@;
put 'MjlMMTksMjguOTRWMTYuNjhhMSwxLDAsMSwwLTIsMFYyOC45NGwtMi41Ny0yLjU3QTEsMSwwLDAsMCwxMywyNy43OGw1LDUsNS01YTEsMSwwLDAsMC0uNzEtMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwxMC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDEx'@;
put 'LDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYu'@;
put 'MzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS44Nyw0LjY5YTguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAs'@;
put 'MCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyNS4wOWEzLDMsMCwwLDEsMCwyaDEuMjhhOCw4LDAsMCwwLDQuNTQt'@;
put 'MTQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFk'@;
put 'Z2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVQbHVnaW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0y'@;
put 'LDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZabTIuNDEsN0EzLDMs'@;
put 'MCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g4VjE4aDIuODFBMy4xMywzLjEzLDAs'@;
put 'MCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjl2LS42SDI3VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwz'@;
put 'Mi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2guNjZMMjEsNi41'@;
put 'OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2'@;
put 'aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAs'@;
put 'MCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjQ1LDcuNDUsMCwwLDEtMi0uNTVWMThoMi44MUEzLjEzLDMuMTMsMCwwLDEsMzMsMjAuNjksMywzLDAsMCwxLDMyLjIyLDIzLDMsMywwLDAsMSwzMCwyNEgyN3Y3LjgzSDRWMjVINWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4x'@;
put 'NSwwLDAsMCw0LjgxLDE1SDRWOC44M2g5VjdhMywzLDAsMCwxLDEtMi4yMkEzLDMsMCwwLDEsMTYuMzEsNCwzLjEzLDMuMTMsMCwwLDEsMTksNy4xOVY4LjgzaDQuMDZhNy40NCw3LjQ0LDAsMCwxLS41MS0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRh'@;
put 'MiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xy'@;
put 'LWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0yLTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAs'@;
put 'MCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMSw2LjU5QTUuMTIsNS4xMiwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAs'@;
put 'MSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0'@;
put 'ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0t'@;
put 'YWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjUsNy41LDAsMCwxLTYuNDUtNi41OUgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIs'@;
put 'MiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIv'@;
put 'PlxuICAgICAgICAnKSxfLkNsclNoYXBlRmxvcHB5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDEx'@;
put 'YTIsMiwwLDAsMC0yLDJ2OEg2VjZoNHY2YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkgxMlY2SDI2LjUxTDMwLDkuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41aDBWMzBIMjdWMjJh'@;
put 'MiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTEuNjhsLS40My0uM0gxMlY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJW'@;
put 'MTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI1LDMwSDExVjIySDI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjRWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwyaDcuMzVhMy41NCwz'@;
put 'LjU0LDAsMCwxLS43Ny0ySDEyVjZoOS4yOWwxLjE1LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjM2LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY4Ljc4Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCww'@;
put 'LDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaTTI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgydjZIMjZBMiwyLDAsMCwxLDI0LDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Niw3'@;
put 'LjQ2LDAsMCwxLTQtMS4xOEEyLDIsMCwwLDEsMjQsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2NkgyNS41NGE3LjQ1LDcuNDUsMCwwLDEtMi43Ni04SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVa'@;
put 'TTI2LDMwSDEwVjIxLjVBMS41LDEuNSwwLDAsMSwxMS41LDIwaDEzQTEuNSwxLjUsMCwwLDEsMjYsMjEuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2Nmg2LjU4QTMuNjcsMy42Nyww'@;
put 'LDAsMSwxOSw5Ljg5TDIyLjQ1LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1'@;
put 'LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVDb21wdXRlcj0oMCxnLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAy'@;
put 'NC40IDEwLjYgMjUuOTggOSA4IDkgOCAyMi44OCA5LjYgMjIuODgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDMwVjIzaDJWNi41QTEuNSwxLjUsMCwwLDAsMzAuNSw1SDUuNUExLjUsMS41LDAsMCwwLDQs'@;
put 'Ni41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgz'@;
put 'LjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIu'@;
put 'NiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTkuNiwyMi44OFYxMC42aDkuMTRBMy42NCwzLjY0LDAsMCwxLDE5LDkuODlMMTkuNTYsOUg4VjIyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik02LDdIMjAuNzFsMS4xNS0ySDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t'@;
put 'YWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMzAiIHk9IjE1LjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjcuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0'@;
put 'LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk'@;
put 'IGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMSwyNXYzLjRBMi42LDIuNiwwLDAsMCwzLjYsMzFIMzIuMzRhMi42LDIuNiwwLDAsMCwyLjYtMi42VjI1Wm0zMiwzLjRhLjYuNiwwLDAsMS0uNi42SDMuNTZhLjYuNiwwLDAsMS0uNi0uNlYyNi41M2g5Ljk1YTEuNjQsMS42'@;
put 'NCwwLDAsMCwxLjUsMWg3LjEzYTEuNjQsMS42NCwwLDAsMCwxLjUtMUgzM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjA3LTFINS41QTEu'@;
put 'NSwxLjUsMCwwLDAsNCw2LjVWMjNINlY3SDIyLjU3QTcuNTIsNy41MiwwLDAsMSwyMi41LDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjIzaDJWMTMuMjJBNy40OSw3'@;
put 'LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDhWMjIuODhIOS42VjEwLjZIMjQuMDhBNy40OSw3LjQ5LDAsMCwxLDIzLjEzLDlaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJh'@;
put 'ZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNywxMEgyOVYyNGgzVjcuNTdBMS41NCwxLjU0LDAsMCwwLDMwLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjkiIHk9IjE1LjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjguNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRl'@;
put 'ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMTlMMTksOS44OSwyMS4yOSw2SDUuNUExLjU0LDEuNTQsMCwwLDAsNCw3LjU3VjI0SDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00'@;
put 'LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUs'@;
put 'MjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjMuNjZBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMmE3LjE0LDcuMTQsMCwwLDEtMywuMlYyNGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQi'@;
put 'Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZURpc3BsYXk9KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMiwyNUg0VjVIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgOC43NiAyOC4xMyA4Ljc2IDI5Ljk0IDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyA3LjcgOC43NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwx'@;
put 'LDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRW'@;
put 'MjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI1SDRWNUgyMS44N0wyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEu'@;
put 'NSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcuNyAyMyA3LjcgOC43NiAxOS43IDguNzYgMjAuNjIgNy4xNiA2LjEgNy4x'@;
put 'NiA2LjEgMjMgNy43IDIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCww'@;
put 'LDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEz'@;
put 'LjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45'@;
put 'MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi4xLDIzSDcuN1Y4Ljc2SDIzYTcuNDQsNy40NCwwLDAsMS0uNDMtMS42SDYuMVoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjI1SDRWNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAs'@;
put 'MCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiBy'@;
put 'PSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEs'@;
put 'MCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwy'@;
put 'LDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMSwyMS44M0g1VjdIMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYs'@;
put 'MzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAsMCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMxdjYuNDNINVY3SDIwLjcxTDIzLDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjE1LjM4'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4w'@;
put 'NiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41'@;
put 'MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJIMjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzdjguNDFINVY3SDIyLjU3YTcuMjksNy4yOSwwLDAsMSwuNTUtNEgzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTIuMzRBNy40NCw3LjQ0LDAsMCwxLDMxLDEz'@;
put 'LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZVRlcm1pbmFsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhI'@;
put 'MzJWMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cG9seWdvbiBwb2ludHM9IjcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5'@;
put 'PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4'@;
put 'IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI5SDRWMTAuOEgxOC42OEEzLjY2LDMuNjYsMCwwLDEsMTks'@;
put 'OS44OWwuNC0uNjlINFY3SDIwLjcxbDEuMTUtMkg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIgeT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwb2x5Z29uIHBvaW50cz0iNyAyNC4xMSAxNi42IDE5LjcgMTYuNiAxNy44OSA3IDEzLjQ4IDcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0zMiwxMy4yMlYyOUg0VjEwLjhIMjQuMjRhNy41MSw3LjUxLDAsMCwxLTEtMS42SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIu'@;
put 'MzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk02LjgsMTUuODFWMTMuMTdsMTAsNC41OXYy'@;
put 'LjA4bC0xMCw0LjU5VjIxLjc4bDYuNTEtM1pNMjMuNCwyNS40SDE3VjIzaDYuNFpNNCw5LjJWN0gzMlY5LjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5'@;
put 'LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEu'@;
put 'MTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02Ljc4LTQuM0g0VjdI'@;
put 'MjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi44LDE5LjgzbC0xMCw0LjU5VjIxLjc4bDYuNTEtMy02'@;
put 'LjUxLTNWMTMuMTdsMTAsNC41OVptNi42LDUuNTdIMTdWMjNoNi40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJh'@;
put 'ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUNvZGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41'@;
put 'Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtNi41My00LjQ1QTEs'@;
put 'MSwwLDEsMCwyMi41NSwxNGw1LjMyLDMuNjMtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00LjQ1YTEsMSwwLDAsMCwwLTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5Ljgz'@;
put 'YS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC41NiwxMS42MiwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OEwxOS43MywxNC40YTMuNTksMy41OSwwLDAs'@;
put 'MS0xLjE2LTIuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtMi0xLjM4SDI0LjY0bDMuMjQsMi4yMS01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42'@;
put 'NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMz'@;
put 'LjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEsMTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDkuODNhLjkuOSwwLDAsMC0xLjA5LjY2TDE1LjQxLDI0LjI5YS45LjksMCwwLDAsLjY2LDEuMDlsLjIyLDBhLjkuOSwwLDAs'@;
put 'MCwuODctLjY4bDMuNDQtMTMuODFBLjkuOSwwLDAsMCwxOS45NCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxfLkNsclNoYXBlQXBwbGljYXRpb249KDAsZy5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMy'@;
put 'djQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIs'@;
put 'NFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVCYXR0ZXJ5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4w'@;
put 'NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjEyLDRIMjNWMy41OEExLjU4LDEuNTgsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAs'@;
put 'MCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlY1Ljg4QTEuODgsMS44OCwwLDAsMCwyNS4xMiw0Wk0yNSwzMkgxMVY2aDRWNGg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQuMzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNFYzMkgxMVY2aDRWNGg2VjZoLjI4bDEuNjQtMi44NUExLjU3LDEuNTcsMCwwLDAsMjEuNDIsMkgxNC41'@;
put 'OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCwwLDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMjUsMTEuNThWMzJIMTFWNmg0VjRoNlY2SDIyLjVBNy40Nyw3LjQ3LDAsMCwxLDIzLDMuMzgsMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEu'@;
put 'ODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTIuODdBNy41LDcuNSwwLDAsMSwyNSwxMS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0yMiw0VjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0di0yOEExLjA5LDEuMDksMCwwLDAsMjYsNFpNMjAuMjYsMjUuNDRhMS4y'@;
put 'LDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQs'@;
put 'MjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xy'@;
put 'LWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY2LDMuNjYsMCwwLDEsMjAuNTUsMTVsMi43Niw0Ljc5TDE2LjksMTguN2wzLjM2LDYuNzNhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIu'@;
put 'MDgtMS4ybC4wOS4xNUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwyMi40NSw0SDIyVjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0VjE1'@;
put 'LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xy'@;
put 'LWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2'@;
put 'YTEsMSwwLDAsMCwxLS45NFYxMi44N0E3LjUsNy41LDAsMCwxLDIyLjUsNlpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZU1vYmlsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAs'@;
put 'MCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxfLkNsclNoYXBlVGFibGV0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv'@;
put 'PlxuICAgICAgICAnKSxfLkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJabTAsMmExMiwxMiwwLDAsMSw4LjQ0LDMuNDhjMCwuMzMsMCwuNjYsMCwxQTE4LjUxLDE4LjUxLDAsMCwwLDE0LDguNTNhMi4zMywyLjMz'@;
put 'LDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0xLjIyQTExLjkyLDExLjkyLDAsMCwxLDE3Ljc1LDRabS0zLDUuODdBMTcsMTcsMCwwLDEsMjUuOTIsMTBhMTYuOSwxNi45LDAsMCwxLTMuMTEsNywyLjI4LDIuMjgsMCwwLDAtMi41'@;
put 'OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAsLjQ3LTEuNzdabS00LTMuNmMwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0'@;
put 'LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41'@;
put 'MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4z'@;
put 'NCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhabTYuNTEtOC45YTIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC40LDE4LjQsMCww'@;
put 'LDAsMy4zOS03LjM3cS43NS4zNSwxLjQ4Ljc4YTEyLDEyLDAsMCwxLC40Miw4LjJBMTYsMTYsMCwwLDEsMjQuMjcsMTkuMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSww'@;
put 'LDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNGgtMmMwLC4yLDAsLjQsMCwuNjFhMTIsMTIsMCwwLDEtLjUzLDMuNTIsMTYs'@;
put 'MTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4Ljg3LDE4Ljg3LDAsMCwwLDEuNjItMi41MkgyMy44M2ExNy4yOSwxNy4yOSwwLDAsMS0xLDEuNTQsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMs'@;
put 'Mi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3QTE3LjA4LDE3LjA4LDAsMCwxLDE5LjU2LDlsLjg3LTEuNTFhMTguNTksMTguNTksMCwwLDAtNi4zOSwxLDIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS44'@;
put 'OCwxMS44OCwwLDAsMSwyMiw0Ljc5TDIzLDNBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMCwwLDMxLjc2LDE2QzMxLjc2LDE1LjgsMzEuNzQsMTUuNiwzMS43MywxNS40Wm0tMjEtOS4xM2MwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3'@;
put 'LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYu'@;
put 'OSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwx'@;
put 'MC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEs'@;
put 'MTcuNzUsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs'@;
put 'MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwx'@;
put 'LDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjUsMTMuMzVhNy41NCw3LjU0LDAsMCwxLTEuNS4xNWwtLjUxLDBhMTEuOTEsMTEu'@;
put 'OTEsMCwwLDEtLjI1LDYsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4LjU5LDE4LjU5LDAsMCwwLDIuNzgtNS4xOCw3LjQ5LDcuNDksMCwwLDEtMS4zMS0uODIsMTcsMTcsMCwwLDEtMi42MSw1LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjct'@;
put 'LjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43NywxNywxNywwLDAsMSw4LjUzLS42Miw3LjQzLDcuNDMsMCwwLDEtLjU2LTEuNTlBMTguNTYsMTguNTYsMCwwLDAsMTQsOC41M2EyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTIt'@;
put 'LjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuOTIsMTEuOTIsMCwwLDEsMjIuNTcsNWE3LjQ1LDcuNDUsMCwwLDEsLjUzLTJBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwYTE0LDE0LDAsMSwwLDI3LjY4LTRaTTEwLjc2LDYuMjdj'@;
put 'MCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0'@;
put 'LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAsMCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAs'@;
put 'MS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01LjgxLTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAs'@;
put 'MCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE0LjcyLDkuODdhMi4yNSwyLjI1LDAsMCwxLS40NywxLjc3LDE2LDE2LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE2LjksMTYuOSwwLDAsMCwzLjExLTdBMTcsMTcsMCwwLDAsMTQuNzIs'@;
put 'OS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJaTTI4LjEsMjEuMDlhMTcuNDEsMTcu'@;
put 'NDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYu'@;
put 'OTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEy'@;
put 'LDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwx'@;
put 'LjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjUxLDE4LjUxLDAsMCwxLDEyLjExLS4wN2MwLS4zMiwwLS42NSwwLTFoMGExMiwxMiwwLDAsMSwyLjYyLDMuODVoMHEtLjczLS40My0xLjQ4LS43OGExOC40LDE4LjQsMCwwLDEtMy4zOSw3LjM3LDIuMzMsMi4zMywwLDAsMSwu'@;
put 'MzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNEgyNS41NmExOC44NywxOC44NywwLDAsMS0xLjYyLDIuNTIsMi4zMywyLjMzLDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCww'@;
put 'LDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0z'@;
put 'LjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgt'@;
put 'LjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEy'@;
put 'LDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjU5LDE4LjU5LDAsMCwxLDYuMzktMUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCww'@;
put 'LDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjYsMTEuNjRhMTYsMTYsMCwwLDAsNC45Myw1LjIz'@;
put 'Yy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcuMjksMTcuMjksMCwwLDAsMS0xLjU0aC0xLjZBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOWExNy4wOCwxNy4wOCwwLDAsMC00Ljg0Ljg4LDIuMjUsMi4yNSwwLDAsMS0uNDcsMS43N1oiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAs'@;
put 'MC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTUsNy40Niw3LjQ2LDAsMCwxLTMuMjgtLjc2LDE4LjU5LDE4LjU5LDAsMCwxLTIu'@;
put 'NzgsNS4xOCwyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgsMCwwLDEtLjYxLDEuNTNIMjguMWExNy40MSwxNy40MSwwLDAsMS00LjMyLS41NiwyLjI5LDIuMjksMCwwLDEtMywuNjIsMTguNDMsMTguNDMsMCwwLDEtNywzLjUsMi4zNCwyLjM0'@;
put 'LDAsMCwxLTEuNTcsMS43OWwtLjI5LjA2YTExLjkzLDExLjkzLDAsMCwxLTMuMzktMi44bC42NiwwYTIuMzMsMi4zMywwLDAsMSw0LjM3LS41OEExNi45NCwxNi45NCwwLDAsMCwxOS43OCwyMGEyLjMyLDIuMzIsMCwwLDEtLjE4LTEuMTdjLS40Mi0uMjQtLjg0LS40OS0xLjI1LS43NkExNy41'@;
put 'MywxNy41MywwLDAsMSwxMywxMi40N2EyLjMxLDIuMzEsMCwwLDEtMi4yOC0uNjMsMjcuMzEsMjcuMzEsMCwwLDAtNSw0Ljc0YzAtLjIsMC0uMzksMC0uNTdhMTIsMTIsMCwwLDEsLjE0LTEuNzMsMTguNzUsMTguNzUsMCwwLDEsNC4yLTMuOCwyLjI4LDIuMjgsMCwwLDEsMS4xLTIuMjVjLS4x'@;
put 'Mi0uNDMtLjI0LS44Ni0uMzMtMS4zLDAtLjE0LDAtLjI5LS4xMS0uNjRhMTIsMTIsMCwwLDEsMS4zNy0uODdjLjEuNTkuMTQuOS4yMSwxLjIxcy4yLjg1LjMyLDEuMjdsLjI1LDBBMi4zMywyLjMzLDAsMCwxLDE0LDguNTNhMTguNTYsMTguNTYsMCwwLDEsOC42NS0uODcsNy40NSw3LjQ1LDAs'@;
put 'MCwxLC40MS00LjU5QTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwxNCwwLDEsMCwyNy42OC00WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43'@;
put 'Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNywxNywwLDAsMCwyLjYxLTUsNy41Miw3LjUyLDAsMCwxLTIuMTYtMi42N0ExNywxNywwLDAsMCwxNC43Miw5Ljg3'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFk'@;
put 'Z2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUsMjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEs'@;
put 'MTcuNDQsMTcuNDQsMCwwLDEtMS44Mi42MiwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNDcsNSwyLjc0'@;
put 'LDIuNzQsMCwwLDEsLjIxLS4yNGwuOTUtLjkxYTE2LjksMTYuOSwwLDAsMS00LjM1LTQuNzksMi4yNywyLjI3LDAsMCwwLC4zNS0xLjJjMC0uMDcsMC0uMTQsMC0uMjJBMTcuNjksMTcuNjksMCwwLDEsMjUsMTFhMTcuNDksMTcuNDksMCwwLDEtMS4xNSwzLjM0bC4xOSwwaDEuNTZhMTksMTks'@;
put 'MCwwLDAsLjkxLTIuNzJjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTQsMTEuOTQsMCwwLDEsMSw0LjA5bDAsMEEyLjc3LDIuNzcsMCwwLDEsMzAsMTZhMi43MywyLjczLDAsMCwxLC42OC4xQTE0LDE0LDAsMSwwLDE2LjA4LDMxYTIuNzIsMi43MiwwLDAsMSwwLTJBMTEuOTMsMTEuOTMsMCww'@;
put 'LDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05'@;
put 'LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMjEuMTlBMy44NCwzLjg0LDAsMSwwLDI4Ljg4LDI1LDMuODcsMy44NywwLDAsMCwyNSwyMS4xOVptMCw2LjA4QTIuMjQsMi4yNCwwLDEsMSwyNy4yOCwyNSwyLjI2LDIuMjYsMCwwLDEsMjUsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4xNywyNC4xNGExLjE0LDEuMTQsMCwwLDAtLjctMS4xbC0xLjU2LS40NnEtLjExLS4zMi0uMjYtLjYzbC43Mi0xLjMzYTEuMTQsMS4xNCwwLDAsMC0uMjEtMS4zNGwtMS4zNC0xLjMyYTEuMTQsMS4x'@;
put 'NCwwLDAsMC0xLjM0LS4ybC0xLjM0LjcxYTcuMjgsNy4yOCwwLDAsMC0uNjctLjI4TDI3LDE2LjcxYTEuMTQsMS4xNCwwLDAsMC0xLjA4LS43NkgyNGExLjE0LDEuMTQsMCwwLDAtMS4wOC44bC0uNDQsMS40M2E3LjMyLDcuMzIsMCwwLDAtLjY4LjI4bC0xLjMyLS43YTEuMTQsMS4xNCwwLDAs'@;
put 'MC0xLjMzLjE5bC0xLjM3LDEuMzFhMS4xNCwxLjE0LDAsMCwwLS4yMSwxLjM1bC43LDEuMjhxLS4xNi4zMi0uMjguNjVMMTYuNTgsMjNhMS4xMywxLjEzLDAsMCwwLS44MSwxLjA5djEuODdBMS4xNCwxLjE0LDAsMCwwLDE2LjU5LDI3bDEuNDcuNDRxLjEyLjMyLjI4LjY0bC0uNzIsMS4zNWEx'@;
put 'LjE0LDEuMTQsMCwwLDAsLjIsMS4zNWwxLjM0LDEuMzJhMS4xNCwxLjE0LDAsMCwwLDEuMzQuMmwxLjM3LS43MnEuMzEuMTQuNjMuMjZsLjQ0LDEuNDdhMS4xNCwxLjE0LDAsMCwwLDEuMDkuOGgxLjlBMS4xNCwxLjE0LDAsMCwwLDI3LDMzLjMxbC40NC0xLjQ3Yy4yMS0uMDcuNDItLjE2LjYy'@;
put 'LS4yNWwxLjM4LjczYTEuMTQsMS4xNCwwLDAsMCwxLjMzLS4ybDEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAsLjIxLTEuMzVsLS43My0xLjM0cS4xNC0uMy4yNS0uNmwxLjUtLjQ0QTEuMTMsMS4xMywwLDAsMCwzNC4xNywyNlptLTEuNiwxLjUtMiwuNTgtLjEyLjQyQTUuNTUsNS41NSwwLDAs'@;
put 'MSwzMCwyNy43M2wtLjIxLjM4LDEsMS43OS0uODYuODQtMS44Mi0xLS4zNy4yYTUuNzgsNS43OCwwLDAsMS0xLjEyLjQ2bC0uNDIuMTItLjU5LDJIMjQuMzhsLS41OS0xLjk1LS40Mi0uMTJBNS44Niw1Ljg2LDAsMCwxLDIyLjI0LDMwbC0uMzctLjItMS44MSwxLS44Ni0uODUsMS0xLjgyLS4y'@;
put 'Mi0uMzhhNS42LDUuNiwwLDAsMS0uNDktMS4xM2wtLjEzLS40MS0xLjk1LS41OFYyNC40MmwxLjk0LS41OC4xMi0uNDFhNS41Myw1LjUzLDAsMCwxLC40OS0xLjE0bC4yMi0uMzktMS0xLjczLjg3LS44NCwxLjc3Ljk0LjM4LS4yMWE1LjgsNS44LDAsMCwxLDEuMTctLjQ5bC40MS0uMTIuNTkt'@;
put 'MS45MWgxLjIzbC41OCwxLjkuNDEuMTJhNS43OSw1Ljc5LDAsMCwxLDEuMTYuNDhsLjM4LjIxLDEuOC0uOTUuODYuODUtMSwxLjc3LjIxLjM4YTUuNTMsNS41MywwLDAsMSwuNDcsMS4xM2wuMTIuNDIsMS45My41N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDIzLjYzLDMyLDIzYTcuMDYsNy4wNiwwLDAsMC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuOSwxNy44NmEuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxYTcsNywwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM3'@;
put 'LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQuNjFMMjAsMTcuOGEuMzcuMzcsMCwwLDAtLjQ0LjA3TDE4LDE5LjMxYS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcsNywwLDAsMCwxOC4zNSwyM2wtMiwuNjFhLjM3LjM3LDAs'@;
put 'MCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFBNyw3LDAsMCwwLDE5LDI4LjM3bC0xLDEuOWEuMzcuMzcsMCwwLDAsLjA3LjQ0bDEuNDUsMS40NWEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAs'@;
put 'LjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OEE3LDcsMCwwLDAsMzEuOTUsMjdsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0u'@;
put 'MzVWMjRBLjM3LjM3LDAsMCwwLDM0LDIzLjYzWm0tOC44Myw0LjcyQTMuMzMsMy4zMywwLDEsMSwyOC41MywyNSwzLjMzLDMuMzMsMCwwLDEsMjUuMTksMjguMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjg1'@;
put 'LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjgsMTkuNzEsMTkuNzEsMCwwLDAsMS44OS0uNlYyMy45NWEyLDIsMCwwLDEsLjA5LS41NSwxNy40MiwxNy40MiwwLDAsMS0yLjE3Ljc4LDIuMjgsMi4yOCwwLDAsMC00LjI4LjYzbC0uNDUsMGgwYTExLjkzLDExLjkzLDAsMCwxLTIuODgt'@;
put 'Ny4yNywxNy43OSwxNy43OSwwLDAsMSw1LTQuNzIsMi4yMywyLjIzLDAsMCwwLDIuMjkuNTYsMTguNTIsMTguNTIsMCwwLDAsNC42NSw1LjA5LDEuOTMsMS45MywwLDAsMSwuMjMtLjMybC44OS0uODdhMTYuODksMTYuODksMCwwLDEtNC40OS00Ljg5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4y'@;
put 'YzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEuMTUsMy4zNSwxLjk0LDEuOTQsMCwwLDEsLjMxLS4wNWgxLjQ1YTE5LjA2LDE5LjA2LDAsMCwwLC45LTIuN2MuNDMuMTkuODQuNDEsMS4yNi42NGExMS45MywxMS45MywwLDAsMSwx'@;
put 'LDQuNjNsMS0uNTFhMiwyLDAsMCwxLC45Mi0uMjNoLjA4QTE0LDE0LDAsMSwwLDE2LjQ0LDMxYTEuOTQsMS45NCwwLDAsMSwuMTItMS40NmwuMjgtLjUzaC0uMDdBMTEuOTEsMTEuOTEsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUx'@;
put 'LS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcs'@;
put 'MS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk0z'@;
put 'MiwyN0g0VjE5LjA2TDcuMTMsOUgyOC44N0wzMiwxOS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdp'@;
put 'ZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0'@;
put 'PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs'@;
put 'ZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0i'@;
put 'MjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVk'@;
put 'IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3'@;
put 'LDMzLDE1LjRIMzAuODZMMzIsMTkuMDZWMjdINFYxOS4wNkw3LjEzLDlIMTkuNTZsMS4xNS0ySDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwx'@;
put 'OC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43'@;
put 'OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIx'@;
put 'LjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3LjExIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIz'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjIzIiB5PSIxOCIgd2lkdGg9IjIzLjY5IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3bC0xLjY1LTUuMzJhNy40OSw3LjQ5LDAsMCwxLTIsLjMzTDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5aDE2YTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDgu'@;
put 'NDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTEsMTguNDcsMzAuNzgsOC40MUEyLDIsMCwwLDAs'@;
put 'MjguODcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSww'@;
put 'aC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5'@;
put 'Ljg5TDIwLjcxLDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZhMiwyLDAsMCwwLS4wOS0uNTlaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSww'@;
put 'aC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEz'@;
put 'LDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFs'@;
put 'ZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEzLjE1QTcuNDksNy40OSwwLDAsMSwyMi41Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiww'@;
put 'LDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwSDIyLjFWMjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVSb3V0ZXI9KDAsZy5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggZD0iTTE4LDE0Ljg3bDUuMTEtNS4xNGExLDEsMCwxLDAtMS40Mi0xLjQxTDE5LDExVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFMMTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNS44NSwxOWg3LjY5YTEsMSwwLDAsMCwwLTJINS44NWwyLjcxLTIuNjlhMSwxLDAsMSwwLTEuNDEtMS40MkwyLDE4bDUuMTQsNS4xMWExLDEsMCwxLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEsMCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy'@;
put 'dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM4LDE1LjRIMjguNTRMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40Mkwz'@;
put 'NCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0Ljg3bDEuMTUtMS4xNi0uMS0uMTVBMy42OCwzLjY4LDAsMCwxLDE5LDEwVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwx'@;
put 'NC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gz'@;
put 'My42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAsMC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdl'@;
put 'ZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxLjY3YTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDEuNjdaTTEzLjg2LDkuOTJhLjguOCwwLDAsMSwxLjEzLDBsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY2LjE4TDIxLDkuOTJhLjgu'@;
put 'OCwwLDEsMSwxLjEzLDEuMTRMMTgsMTUuMTVsLTQuMTQtNC4xQS44LjgsMCwwLDEsMTMuODYsOS45MlpNMTAuMzIsMjEuNzRhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjEx'@;
put 'bDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBMMTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4x'@;
put 'NCwyNS40MVptNC42Ny0zLjY2YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCwwLDEsMC0xLjZoNi4yN2wtMi4yLTIuMTRhLjguOCwwLDEsMSwxLjEyLTEuMTRMMzEsMTcuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTMzLjgyLDE1LjM5SDI4LjY4TDMxLDE3LjY3bC00LjE5LDQuMDlhLjguOCwwLDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0xLjUtMS40N0gyMi4yM2EzLjY4LDMuNjgsMCwwLDEtMy0xLjUxTDE4LDE1LjE1bC00'@;
put 'LjE0LTQuMUEuOC44LDAsMSwxLDE1LDkuOTJsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY0LjQ5QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5bDQuMjItNy4zMUExNiwxNiwwLDEsMCwzNCwxNy42NywxNiwxNiwwLDAsMCwzMy44MiwxNS4zOVptLTIzLjUsNi4zNWEuOC44LDAsMCwx'@;
put 'LTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2EuOC44LDAsMCwxLDAsMS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjgu'@;
put 'OCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0LDQuMUEuOC44LDAsMCwxLDIyLjE0LDI1LjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjIyLDEyLjc2QTcuNDksNy40OSwwLDAsMSwyMy4zMiwyLjZhMTYsMTYsMCwxLDAsOS45LDEwLjE3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44'@;
put 'LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIs'@;
put 'Mi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4'@;
put 'LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEuMTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAg'@;
put 'JyksXy5DbHJTaGFwZVZNPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zMCwxMEgxN3YyaDh2NmgyVjEyaDNWMjZIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI4aDhhMiwyLDAsMCwwLDItMlYxMkEyLDIsMCwwLDAsMzAsMTBaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiww'@;
put 'LDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMS44N0wyMywzSDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNS4wMSIgeT0iMTUuNCIgd2lkdGg9IjEuOTkiIGhlaWdodD0iMi42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0zMCwxNS40VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwzMVYxN0gyMHY5SDE2VjIwSDE0djZhMiwyLDAsMCwwLDIsMmg0djNaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMHYyaDEuNTdBMy42NywzLjY3LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWgwVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiww'@;
put 'LDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTE3LDEyaDh2NmgyVjEyLjg3QTcuNTIsNy41MiwwLDAsMSwyMy42NiwxMEgxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjdWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTla'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDE3LjE5YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIs'@;
put 'MiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZoMi43MkwyMywzSDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTE3LjE5LDEwYTIsMiwwLDAsMC0yLDJ2MS40SDE5QTMuNjgsMy42OCwwLDAsMSwxOSwxMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMjEsMTUuNEEzLjU1LDMu'@;
put 'NTUsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUu'@;
put 'NFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5'@;
put 'LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZI'@;
put 'MjIuOUE3LjQ1LDcuNDUsMCwwLDEsMjMuMTMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMu'@;
put 'NjYsMTBIMTcuMTlhMiwyLDAsMCwwLTIsMnYxLjRIMjBBMy42LDMuNiwwLDAsMSwyMy42LDE3djhIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI5LjZIMTcuMTlhMy42LDMuNiwwLDAsMS0zLjYtMy42VjIwaDEu'@;
put 'NnY2YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVWTVdBcHA9KDAsZy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAy'@;
put 'OCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE0IDMwIDYgMzAgNiAyMiA4IDIyIDggMjAgNCAyMCA0IDMyIDE2IDMyIDE2IDI4IDE0'@;
put 'IDI4IDE0IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwIDQgMjAgOCAyMiA4IDIyIDYgMzAgNiAzMCAxNCAyOCAxNCAyOCAxNiAzMiAxNiAzMiA0IDIwIDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0'@;
put 'aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxy'@;
put 'ZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2bDAtLjFWMTdoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMi40NSA0IDIwIDQgMjAgOCAyMC4xNCA4IDIyLjQ1IDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMjgiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjAuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEu'@;
put 'MjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAv'@;
put 'PlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBv'@;
put 'bHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTEiIHdp'@;
put 'ZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMjIsNmguNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjBWOGgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTRIMjh2Mmg0VjEzLjIyQTcuNDksNy40OSww'@;
put 'LDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4YTcuNTMsNy41MywwLDAsMS0uNTgtLjU4SDE5djZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAg'@;
put 'ICcpLF8uQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCww'@;
put 'LDAsMzIsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIu'@;
put 'MzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0i'@;
put 'MTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2'@;
put 'LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVk'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2QTMuNjYsMy42NiwwLDAsMSwxOC41NywxMkg3djEuNkgxOS4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMz'@;
put 'LjY4LDE1LjRIMzJ2MS4xNmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyOFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwy'@;
put 'LDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxu'@;
put 'ICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdo'@;
put 'dD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIyMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2'@;
put 'LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zMiwxMy4yMnYzLjM0YTguNDEsOC40MSwwLDAsMSwyLDEuODF2LTZBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMi43'@;
put 'OGE3LjQ5LDcuNDksMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2ly'@;
put 'Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEy'@;
put 'LDIsMCwwLDEsMiwyVjE4LjM3YTguMzQsOC4zNCwwLDAsMC0xMy40OSw5Ljc5bC0uOTMsMS4xNFpNNywxMnYxLjZIMjRWMTJabTAsNS42SDE4VjE2SDdabTAsN0gxN1YyM0g3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4z'@;
put 'NywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjU5YTYuMzcsNi4zNywwLDEsMC0xMC43Nyw0LjU5bC0xLjk0LDIuMzcuOSwz'@;
put 'LjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3QTYuMzQsNi4zNCwwLDAsMCwzMy44MywyMy41OVptLTEwLjc0LDBhNC4zNyw0LjM3LDAsMSwxLDQuMzcsNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjMuMSwyMy41OVoiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOS4yNWE4LjM2LDguMzYsMCwwLDEsNC43NSwzdi0zWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'Mi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4wNywxMy42SDdWMTJIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlMMjEuMjksNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMjUuNjYs'@;
put 'MTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTkuMDcsMTMuNlpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwy'@;
put 'MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHIt'@;
put 'aS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAtNC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00'@;
put 'LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYsMjcuOTFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3'@;
put 'LjUsMCwwLDEsMjIuNSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0xLjE0QTguMzQsOC4zNCwwLDAsMSwzNCwxOC4zN3YtNkE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFptNi00SDdWMTJIMjRaIiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdl'@;
put 'IiAvPlxuICAgICAgICAnKSxfLkNsclNoYXBlQXJjaGl2ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEsMSwwLDAsMCwxNCwyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMs'@;
put 'MCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEs'@;
put 'MjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVW'@;
put 'M2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwtMS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCww'@;
put 'LDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwxLDAtMmg2QTEsMSwwLDAsMSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42'@;
put 'NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEy'@;
put 'czAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAs'@;
put 'MSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVVbmFyY2hpdmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIs'@;
put 'MCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxOEg2VjE0aDlWMTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAsMCwxLS43OCwySDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwxLjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMEgyMC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwx'@;
put 'MkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUuNmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40'@;
put 'MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxfLkNsclNoYXBlQ29ubmVjdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAs'@;
put 'MCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIyLDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45'@;
put 'NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIx'@;
put 'LDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjIt'@;
put 'NUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVEaXNjb25uZWN0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAs'@;
put 'MCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2'@;
put 'LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4x'@;
put 'NywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2'@;
put 'Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVMaW5rPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwx'@;
put 'LTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEuNzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45'@;
put 'MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcuNiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcu'@;
put 'ODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRhNCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0x'@;
put 'LjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAg'@;
put 'JyksXy5DbHJTaGFwZVVubGluaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01'@;
put 'LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAs'@;
put 'NS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQuNzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSxfLkNsclNoYXBl'@;
put 'Q2xvdWROZXR3b3JrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41'@;
put 'OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEsMTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0yLjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUNsb3VkU2NhbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEuMTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwz'@;
put 'LjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIuMzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwy'@;
put 'LjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4xNiw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJI'@;
put 'MTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwuMTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTMiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIwLjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4'@;
put 'LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEu'@;
put 'ODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEuODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4y'@;
put 'NSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUtLjg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCwwLDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4'@;
put 'LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4yNWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3'@;
put 'QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZURlcGxveT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwxLDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdB'@;
put 'MSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIxLDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3'@;
put 'LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUhlbGl4PSgwLGcuY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44OCwxMy4wN2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMSwxLDEsMS41Mkw5LjM3LDEyLjkyQS45LjksMCwwLDEsOC44OCwxMy4wN1oiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTMuMjUsMTUuMTFhLjkuOSwwLDAsMS0uNDktMS42NkwxOCwxMC4wOGEuOS45LDAsMSwxLDEsMS41MkwxMy43NCwxNUEuOS45LDAsMCwxLDEzLjI1LDE1LjExWiIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOS43MiwzMC4yM2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMCwxLDEsMS41MkwyMC4yLDMwLjA5QS45LjksMCwwLDEsMTkuNzIsMzAuMjNaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LjkyLDI1Ljk0YS45LjksMCwwLDEtLjQ5LTEuNjZsNS4yNS0zLjM3YS45LjksMCwxLDEsMSwxLjUxTDE5LjQsMjUuOEEuODkuODksMCwwLDEsMTguOTIsMjUuOTRaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTIxLjU2LDUuNjlhMy41OSwzLjU5LDAsMCwxLC4xNSwzLjUzTDE4LjgzLDE1aDIuMjVsMi40My00Ljg3YTUuNjEsNS42MSwwLDAsMC01LTguMTRIMTMuMjZsLTEsMmg2LjIyQTMuNjEsMy42MSwwLDAsMSwy'@;
put 'MS41Niw1LjY5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi45MSwyMC43OEE1LjUzLDUuNTMsMCwwLDAsMjcuNjYsMTdIOS4zMWEzLjU0LDMuNTQsMCwwLDEtMy41Ni0zLjY3LDMuNjEsMy42MSwwLDAsMSwu'@;
put 'NDItMS41NGw0LjI2LTguNDlhMSwxLDAsMSwwLTEuNzktLjlMNC40LDEwLjg0QTUuNjcsNS42NywwLDAsMCw0LDE1LjIyLDUuNTMsNS41MywwLDAsMCw5LjI4LDE5aDcuNmwtMy40NCw2Ljg3YTUuNjQsNS42NCwwLDAsMCwxLjUsNi45MkE1LjM4LDUuMzgsMCwwLDAsMTguNDEsMzRoNS4yNWwx'@;
put 'LTJIMTguNDNhMy41OCwzLjU4LDAsMCwxLTMuMjItNS4yMUwxOS4xMSwxOWg4LjU0YTMuNDIsMy40MiwwLDAsMSwyLjE1LjcxLDMuNTcsMy41NywwLDAsMSwxLDQuNDNsLTQuMTIsOC4yMmExLDEsMCwxLDAsMS43OS45bDQuMDYtOC4xQTUuNjcsNS42NywwLDAsMCwzMi45MSwyMC43OFoiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi4xNiwxOS42M0E1LjU1LDUuNTUsMCwwLDAsMjcuNDIsMTdIMTAuMDZhNC4zNiw0LjM2LDAsMCwxLTMuNjctMiw0LjA3LDQuMDcsMCwwLDEtLjE5LTQuMTNsMy42Mi03LDEuNDIs'@;
put 'MS42My0yLjc0LDUuMyw4Ljg0LTUuNjZhLjkxLjkxLDAsMCwxLDEsMS41M0w3Ljg0LDEzLjM4YTIuMTMsMi4xMywwLDAsMCwuMjQuNTIsMi4yOCwyLjI4LDAsMCwwLDEuNjUsMUwxOC4xMSw5LjVhLjkxLjkxLDAsMCwxLDEsMS41MkwxMywxNC45NEgyMC44bDIuNDEtNC44MmE1LjYsNS42LDAs'@;
put 'MCwwLTUtOC4xMkg5YTEsMSwwLDAsMC0uOS41NkwzLjg4LDEwLjg5YTUuNiw1LjYsMCwwLDAsNSw4LjEyaDcuNjVsLTMuNDMsNi44N2E1LjYsNS42LDAsMCwwLDUsOC4xMmg5LjI4YTEsMSwwLDAsMCwuOTMtLjY1bDQuMTQtOC4yNEE1LjU4LDUuNTgsMCwwLDAsMzIuMTYsMTkuNjNaTTE3Ljc1'@;
put 'LDI1LjU3QS45MS45MSwwLDAsMSwxOCwyNC4zMWw2LTMuODhBLjkxLjkxLDAsMSwxLDI1LDIybC02LDMuODhhLjkxLjkxLDAsMCwxLTEuMjYtLjI3Wk0yOSwyNC4zNGwtOSw1Ljc4YS45MS45MSwwLDEsMS0xLTEuNTNsOS01Ljc4YS45MS45MSwwLDEsMSwxLDEuNTNaIi8+XG4gICAgICAgICcp'@;
put 'LF8uQ2xyU2hhcGVGbGFzaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAsMCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwz'@;
put 'NEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0yLjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4w'@;
put 'NUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRM'@;
put 'NC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMxLDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQu'@;
put 'NzYsNC43NiwwLDEsMCw0Ljc2LDQuNzZBNC43Niw0Ljc2LDAsMCwwLDE0LjY4LDMuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQyLDMxLjY4QTIuMTQsMi4xNCwwLDAsMSwxNS44LDMwSDRWMjQuMjJh'@;
put 'MTQuODEsMTQuODEsMCwwLDEsMTEuMDktNC42OGwuNzIsMGEyLjIsMi4yLDAsMCwxLC42Mi0xLjg1bC4xMi0uMTFjLS40NywwLTEtLjA2LTEuNDYtLjA2QTE2LjQ3LDE2LjQ3LDAsMCwwLDIuMiwyMy4yNmExLDEsMCwwLDAtLjIuNlYzMGEyLDIsMCwwLDAsMiwySDE2LjdaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NywxNi4yOWEuMzcuMzcsMCwwLDEsLjE1LDAsLjQyLjQyLDAsMCwwLS4xNSwwWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTMzLjY4LDIzLjMybC0yLS42MWE3LjIxLDcuMjEsMCwwLDAtLjU4LTEuNDFsMS0xLjg2QS4zOC4zOCwwLDAsMCwzMiwxOWwtMS40NS0xLjQ1YS4zNi4zNiwwLDAsMC0uNDQtLjA3bC0xLjg0LDFhNy4xNSw3LjE1LDAsMCwwLTEuNDMtLjYxbC0uNjEtMmEuMzYuMzYs'@;
put 'MCwwLDAtLjM2LS4yNEgyMy44MmEuMzYuMzYsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42bC0xLjgyLTFhLjM1LjM1LDAsMCwwLS40My4wN0wxNy42OSwxOWEuMzguMzgsMCwwLDAtLjA2LjQ0bDEsMS44MkE2Ljc3LDYuNzcsMCwwLDAsMTgsMjIuNjlsLTIsLjZhLjM2LjM2'@;
put 'LDAsMCwwLS4yNi4zNXYyLjA1QS4zNS4zNSwwLDAsMCwxNiwyNmwyLC42MWE3LDcsMCwwLDAsLjYsMS40MWwtMSwxLjkxYS4zNi4zNiwwLDAsMCwuMDYuNDNsMS40NSwxLjQ1YS4zOC4zOCwwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMmEuMzguMzgsMCww'@;
put 'LDAsLjM1LjI2aDIuMDVhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTIuMDVhNi45Miw2LjkyLDAsMCwwLDEuMzgtLjU3bDEuODksMWEuMzYuMzYsMCwwLDAsLjQzLS4wN0wzMiwzMC40QS4zNS4zNSwwLDAsMCwzMiwzMGwtMS0xLjg4YTcsNywwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzYuMzYs'@;
put 'MCwwLDAsLjI2LS4zNVYyMy42N0EuMzYuMzYsMCwwLDAsMzMuNjgsMjMuMzJaTTI0Ljg1LDI4YTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzNBMy4zNCwzLjM0LDAsMCwxLDI0Ljg1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGN4PSIxNC42NyIgY3k9IjguMyIgcj0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40NCwzMS44MmEyLjE1LDIuMTUsMCwwLDEtLjM4LTIuNTVsLjUzLTEtMS4wOS0uMzNBMi4xNCwyLjE0LDAs'@;
put 'MCwxLDE0LDI1Ljg0VjIzLjc5YTIuMTYsMi4xNiwwLDAsMSwxLjUzLTIuMDdsMS4wOS0uMzMtLjUyLTFhMi4xNywyLjE3LDAsMCwxLC4zNS0yLjUyLDE4LjkyLDE4LjkyLDAsMCwwLTIuMzItLjE2QTE1LjU4LDE1LjU4LDAsMCwwLDIsMjMuMDd2Ny43NWExLDEsMCwwLDAsMSwxSDE2LjQ0WiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43LDIzLjQ2bC0yLS42YTYuNzMsNi43MywwLDAsMC0uNTgtMS40MmwxLTEuODZhLjM1LjM1LDAsMCwwLS4wNy0uNDNsLTEuNDUtMS40NmEuMzguMzgsMCwwLDAtLjQzLS4w'@;
put 'N2wtMS44NSwxYTcuNzQsNy43NCwwLDAsMC0xLjQzLS42bC0uNjEtMmEuMzguMzgsMCwwLDAtLjM2LS4yNUgyMy44NGEuMzguMzgsMCwwLDAtLjM1LjI2bC0uNiwyYTYuODUsNi44NSwwLDAsMC0xLjQ1LjYxbC0xLjgxLTFhLjM4LjM4LDAsMCwwLS40NC4wNmwtMS40NywxLjQ0YS4zNy4zNyww'@;
put 'LDAsMC0uMDcuNDRsMSwxLjgyQTcuMjQsNy4yNCwwLDAsMCwxOCwyMi44M2wtMiwuNjFhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1YS4zNi4zNiwwLDAsMCwuMjYuMzVsMiwuNjFhNy4yOSw3LjI5LDAsMCwwLC42LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTkuMTYsMzJhLjM4'@;
put 'LjM4LDAsMCwwLC40NC4wNmwxLjg3LTFhNy4wOSw3LjA5LDAsMCwwLDEuNC41N2wuNiwyLjA1YS4zOC4zOCwwLDAsMCwuMzYuMjZoMi4wNWEuMzguMzgsMCwwLDAsLjM1LS4yNmwuNi0yLjA1YTYuNjgsNi42OCwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM4LjM4LDAsMCwwLC40NC0uMDZMMzIs'@;
put 'MzAuNTVhLjM4LjM4LDAsMCwwLC4wNi0uNDRsLTEtMS44OGE2LjkyLDYuOTIsMCwwLDAsLjU3LTEuMzhsMi0uNjFhLjM5LjM5LDAsMCwwLC4yNy0uMzVWMjMuODJBLjQuNCwwLDAsMCwzMy43LDIzLjQ2Wm0tOC44Myw0LjcyYTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzRBMy4zNCwzLjM0LDAs'@;
put 'MCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUhhcmREcml2ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCww'@;
put 'LDAsMiwySDMyYTIsMiwwLDAsMCwyLTJaTTMyLDI4SDRWOEgzMlYyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIx'@;
put 'LjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTExLjg4LDE4LjA4YTMuNTksMy41OSwwLDEsMCwzLjU5LTMuNTksMy44NCwzLjg0LDAsMCwwLS45MS4xM0wxNSwxNi4xNmEyLjA4LDIuMDgsMCwwLDEsLjUtLjA3LDIsMiwwLDEsMS0yLDIsMS42NCwxLjY0LDAsMCwxLC4wOC0uNUwxMiwxNy4xNkEzLjUzLDMuNTMsMCwwLDAsMTEu'@;
put 'ODgsMTguMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS40NywyNS43M2E3LjY2LDcuNjYsMCwwLDEtNy42NS03LjY1LDcuNTUsNy41NSwwLDAsMSwuMjctMkw2LjU0LDE1LjdhOS4yNCw5LjI0LDAsMCww'@;
put 'LDE3LjgsNC45NUgyMi42NkE3LjY0LDcuNjQsMCwwLDEsMTUuNDcsMjUuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4yMiwxNy44M2EuOC44LDAsMCwwLS44LS44SDI0LjY2YTkuMjYsOS4yNiwwLDAs'@;
put 'MC05LjE5LTguMiw5LjM2LDkuMzYsMCwwLDAtMi4zOC4zMmwuNDIsMS41NGE3Ljg2LDcuODYsMCwwLDEsMi0uMjZBNy42Niw3LjY2LDAsMCwxLDIzLDE3SDIwLjkyYS44LjgsMCwwLDAsMCwxLjZoNi41QS44LjgsMCwwLDAsMjguMjIsMTcuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTIsMTcuMTZsMS41NC40MmExLjY0LDEuNjQsMCwwLDAtLjA4LjUsMiwyLDAsMSww'@;
put 'LDItMiwyLjA4LDIuMDgsMCwwLDAtLjUuMDdsLS40MS0xLjU0YTMuODQsMy44NCwwLDAsMSwuOTEtLjEzLDMuNTksMy41OSwwLDEsMS0zLjU5LDMuNTlBMy41MywzLjUzLDAsMCwxLDEyLDE3LjE2Wk01LjMxLDhBMS4yNSwxLjI1LDAsMSwxLDQuMDYsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4z'@;
put 'MSw4Wm0wLDIwLjA2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMzEsMjguMDZabTEwLjE2LS43M0E5LjIyLDkuMjIsMCwwLDEsNi41NCwxNS43bDEuNTUuNDFhNy41NSw3LjU1LDAsMCwwLS4yNywyLDcuNjQsNy42NCwwLDAsMCwxNC44NCwyLjU3aDEuNjhB'@;
put 'OS4yNSw5LjI1LDAsMCwxLDE1LjQ3LDI3LjMzWm0xMi04LjdoLTYuNWEuOC44LDAsMCwxLDAtMS42SDIzYTcuNjYsNy42NiwwLDAsMC03LjU3LTYuNiw3Ljg2LDcuODYsMCwwLDAtMiwuMjZsLS40Mi0xLjU0YTkuMzYsOS4zNiwwLDAsMSwyLjM4LS4zMkE5LjI2LDkuMjYsMCwwLDEsMjQuNjYs'@;
put 'MTdoMi43NmEuOC44LDAsMCwxLDAsMS42Wm0zLjM5LDkuNDNhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMjguMDZabTAtMTcuNTZhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMTAuNVoiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43'@;
put 'NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsOS43NEExLjc0LDEuNzQsMCwwLDAsMjguMjYsOEg3Ljc0QTEuNzQsMS43NCwwLDAsMCw2LDkuNzRWMjQuMjZB'@;
put 'MS43NCwxLjc0LDAsMCwwLDcuNzQsMjZIOFYxMEgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAs'@;
put 'MTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwzMi4yNiwxMlpNMzIsMjhIMTJWMTRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwy'@;
put 'My42OGEyLjY0LDIuNjQsMCwxLDAtMi43LTIuNjNBMi42NywyLjY3LDAsMCwwLDE5Ljk0LDIzLjY4Wm0wLTMuODdhMS4yNCwxLjI0LDAsMSwxLTEuMjksMS4yNEExLjI3LDEuMjcsMCwwLDEsMTkuOTQsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwxNi4yMmE0LjkzLDQuOTMsMCwwLDEsNC45NSw0LjM1SDIzLjcxVjIyaDQuNDFhLjcuNywwLDAsMCwwLTEuNEgyNi4zMWE2LjMzLDYuMzMsMCwwLDAtNi4zNy01Ljc1LDYuNTgsNi41OCwwLDAsMC0xLjQ4LjE3bC4zNSwxLjM3QTQuNzMs'@;
put 'NC43MywwLDAsMSwxOS45NCwxNi4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDI3LjI3YTYuNDIsNi40MiwwLDAsMCw1LjY3LTMuMzVIMjMuOTNhNSw1LDAsMCwxLTQsMS45NSw0LjkxLDQuOTEs'@;
put 'MCwwLDEtNS00LjgyLDUuMTYsNS4xNiwwLDAsMSwuMDgtLjc5TDEzLjYzLDIwYTcsNywwLDAsMC0uMDksMUE2LjMyLDYuMzIsMCwwLDAsMTkuOTQsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiw1'@;
put 'Ljc0QTEuNzQsMS43NCwwLDAsMCwyNC4yNiw0SDMuNzRBMS43NCwxLjc0LDAsMCwwLDIsNS43NFYyMC4yNkExLjc0LDEuNzQsMCwwLDAsMy43NCwyMkg0VjZIMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDku'@;
put 'NzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEuNzQsMS43NCwwLDAsMCw3Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYy'@;
put 'LDIyLjZBMS41NSwxLjU1LDAsMSwwLDE4LDIxLjA1LDEuNiwxLjYsMCwwLDAsMTkuNjIsMjIuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjYsMTJIMTEuNzRBMS43NCwxLjc0LDAsMCwwLDEwLDEzLjc0VjI4'@;
put 'LjI2QTEuNzQsMS43NCwwLDAsMCwxMS43NCwzMEgzMi4yNkExLjc0LDEuNzQsMCwwLDAsMzQsMjguMjZWMTMuNzRBMS43NCwxLjc0LDAsMCwwLDMyLjI2LDEyWk0xOS42MiwxNy43NGEzLjMxLDMuMzEsMCwxLDEtMy4zOCwzLjMxQTMuMzUsMy4zNSwwLDAsMSwxOS42MiwxNy43NFptMCwxMS4x'@;
put 'M2E3Ljk0LDcuOTQsMCwwLDEtOC03LjgyLDcuODMsNy44MywwLDAsMSwuMTEtMS4yOWwxLjc1LjNhNS4zNiw1LjM2LDAsMCwwLS4xMSwxLDYuMTgsNi4xOCwwLDAsMCw2LjI4LDYuMDYsNi4zNSw2LjM1LDAsMCwwLDUtMi40NmgyLjFBOC4wNiw4LjA2LDAsMCwxLDE5LjYyLDI4Ljg3Wk0yOS44'@;
put 'OSwyMi4ySDI0LjM2VjIwLjQ0aDEuNDhBNi4xOSw2LjE5LDAsMCwwLDE5LjYyLDE1YTYuNDgsNi40OCwwLDAsMC0xLjQxLjE2bC0uNDUtMS43YTguMTYsOC4xNiwwLDAsMSwxLjg2LS4yMiw4LDgsMCwwLDEsOCw3LjIxaDIuMjZhLjg4Ljg4LDAsMCwxLDAsMS43NloiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVOVk1lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRI'@;
put 'MjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEs'@;
put 'MSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEs'@;
put 'MSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3Qg'@;
put 'eD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZVNTRD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjku'@;
put 'ODEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTguNjJjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMnMtLjUzLDEu'@;
put 'MDktMS41NSwxLjA5YTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUycy0xLjE1LTIuMDUtMi44Ny0yLjQ0Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTAsMTVhMy42OCwzLjY4LDAs'@;
put 'MCwxLDIuMzcsMWwuODEtMS4xQTQuNTgsNC41OCwwLDAsMCwxMCwxMy42OWMtMS43NCwwLTMsMS4wNS0zLDIuNDlTOC4yNiwxOC4yMiwxMCwxOC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjgzLDIw'@;
put 'LjkzYTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0xLDMuMS0yLjUyUzE5LjczLDE3LjY1LDE4LDE3LjI2Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTcuNDgsMTVhMy42OCwzLjY4LDAsMCwxLDIu'@;
put 'MzcsMWwuODEtMS4xYTQuNTYsNC41NiwwLDAsMC0zLjEyLTEuMTVjLTEuNzMsMC0zLDEuMDUtMywyLjQ5czEuMTksMiwyLjg5LDIuNDRjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMlMxOC44NSwyMC45MywxNy44MywyMC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC03IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjksMThjMC0yLjQxLTEuOTItNC4xMi00LjY0LTQuMTJoLTIuOXY4LjI0aDIuOUMyOCwyMi4wOCwyOS45LDIwLjM3LDI5LjksMThabS02LTIuNzZoMS41NmEyLjc3LDIuNzcsMCwxLDEsMCw1LjUzSDIzLjg2WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTUuMjEsOEExLjI1LDEuMjUsMCwxLDEsNCw5LjI1LDEu'@;
put 'MjUsMS4yNSwwLDAsMSw1LjIxLDhabTAsMjBhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsNS4yMSwyOFptNS4wNi01Ljc4YTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0u'@;
put 'OTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjItMi40OSwzLTIuNDlhNC41OCw0LjU4LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMUEzLjY4LDMuNjgsMCwwLDAsMTAsMTVhMS4yNSwxLjI1LDAsMCwwLTEuMzksMS4wOGMwLC42Ny42MS45MSwxLjkyLDEuMjEsMS43'@;
put 'Mi4zOSwyLjg3Ljk0LDIuODcsMi40NFMxMi4yNCwyMi4yMiwxMC4yNywyMi4yMlptNy41MSwwYTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44'@;
put 'OS0yLjQ0czEuMjMtMi40OSwzLTIuNDlhNC41Niw0LjU2LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMWEzLjY4LDMuNjgsMCwwLDAtMi4zNy0xLDEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRTMTkuNzUsMjIu'@;
put 'MjIsMTcuNzgsMjIuMjJabTQuNTgtLjE0VjEzLjg0aDIuOWMyLjcyLDAsNC42NCwxLjcxLDQuNjQsNC4xMlMyOCwyMi4wOCwyNS4yNiwyMi4wOFpNMzAuNjksMjhhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuNjksMjhabTAtMTcuNWExLjI1LDEuMjUsMCwx'@;
put 'LDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSwzMC42OSwxMC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwxNS4yaDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVCbHVldG9vdGg9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAs'@;
put 'MCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwxLDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3'@;
put 'LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4yMy02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMuNiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVW'@;
put 'MTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwxLjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIu'@;
put 'MzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwyNi41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLF8u'@;
put 'Q2xyU2hhcGVCbHVldG9vdGhPZmY9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwxNi42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwxOSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0Ey'@;
put 'LDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUuNDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0z'@;
put 'LjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIuNzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv'@;
put 'PjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcsMS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41'@;
put 'NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlUHJvY2Vzc09uVk09KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQuNDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40Niwx'@;
put 'Mi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCwwLDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwx'@;
put 'LjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEsMSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIs'@;
put 'MTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNh'@;
put 'MSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwxLDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLF8uQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1'@;
put 'LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAsMSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUz'@;
put 'LDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42djYuNDlBMi4wNiwyLjA2LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMx'@;
put 'Ljg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCwwLDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUu'@;
put 'NTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEsMCwwLDAsMzQuNzYsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2Ljgx'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEyLjgsMi44LDAsMCwxLDQuODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywxNi4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCww'@;
put 'LS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2LjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCwwLDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEsMSwwLDAsMC0xLjQyLjA4bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMu'@;
put 'NzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLF8uQ2xyU2hhcGVBdG9tPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwy'@;
put 'LjQyLTIuNDJBMi40MiwyLjQyLDAsMCwxLDE4LDIwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4x'@;
put 'Mi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjks'@;
put 'NS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4xMy4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5'@;
put 'LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEuODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQu'@;
put 'NjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQuMTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMy'@;
put 'LjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMtMS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0u'@;
put 'NDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIuMjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwy'@;
put 'Mi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQtLjg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYu'@;
put 'ODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVBMzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiww'@;
put 'LDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMuOTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIgLz48cGF0aCBkPSJNMjQuMjMsMTEuNzFhMzkuMTQsMzkuMTQsMCwwLDAtNC41Ny0zLjkyLDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgtMS43MmMuMzItLjEyLjYyLS4yMS45Mi0uM2EyLjI4LDIuMjgsMCwwLDAsMy44MS0uNDYsMy4zMSwzLjMxLDAsMCwxLDEuOTIuODRjMS4xOSwxLjE5'@;
put 'LDEuMjIsMy41OS4xLDYuNTguNDkuNjUuOTQsMS4zMSwxLjM1LDIsLjE3LS40LjM1LS43OS40OS0xLjE4LDEuNDctMy44NSwxLjI4LTctLjUzLTguNzhhNS4yOSw1LjI5LDAsMCwwLTMuMzMtMS40NCwyLjI5LDIuMjksMCwwLDAtNC4zMS41NGMtLjM3LjExLS43NC4yMi0xLjEzLjM3YTI1Ljc5'@;
put 'LDI1Ljc5LDAsMCwwLTQuNTcsMi4zNUEyNi4yMSwyNi4yMSwwLDAsMCwxMy4yOCw0LjJjLTMuODUtMS40Ni03LTEuMjgtOC43Ny41M0MyLjg1LDYuNCwyLjU4LDkuMTcsMy42OCwxMi41OWEyLjI4LDIuMjgsMCwwLDAsMS41OSwzLjY3Yy4zMi42MS42NywxLjIyLDEuMDYsMS44MkEyNS41NCwy'@;
put 'NS41NCwwLDAsMCw0LDIyLjY2Yy0xLjQ3LDMuODQtMS4yOCw3LC41Myw4Ljc3YTUuNjMsNS42MywwLDAsMCw0LjEyLDEuNTEsMTMuMzQsMTMuMzQsMCwwLDAsNC42NS0xLDI2LjIxLDI2LjIxLDAsMCwwLDQuNTgtMi4zNUEyNS43OSwyNS43OSwwLDAsMCwyMi40MywzMmExNC4xNiwxNC4xNiww'@;
put 'LDAsMCwzLjY1LjlBMi4zLDIuMywwLDAsMCwzMC40NiwzMmE0LjU1LDQuNTUsMCwwLDAsLjc0LS41N2MxLjgxLTEuODEsMi00LjkzLjUzLTguNzdBMzIuNjgsMzIuNjgsMCwwLDAsMjQuMjMsMTEuNzFaTTEyLjU3LDMwLjA5Yy0zLDEuMTUtNS40NSwxLjEzLTYuNjUtLjA4cy0xLjIzLTMuNjIt'@;
put 'LjA3LTYuNjRhMjIuNzcsMjIuNzcsMCwwLDEsMS43MS0zLjQ4LDQwLjE5LDQwLjE5LDAsMCwwLDMuOTIsNC41NmMuNDMuNDMuODcuODUsMS4zMSwxLjI1cS45LS40NiwxLjgzLTEuMDVjLS41OC0uNTItMS4xNi0xLTEuNzItMS42MWEzNCwzNCwwLDAsMS01Ljc0LTcuNDdBMi4yOSwyLjI5LDAs'@;
put 'MCwwLDUuNSwxMS42OWgwYy0uNzUtMi41LS42Mi00LjQ5LjQzLTUuNTRhMy43MiwzLjcyLDAsMCwxLDIuNzItLjkyLDExLjQsMTEuNCwwLDAsMSwzLjkzLjg0LDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgsMS43MiwzOS4xNCwzOS4xNCwwLDAsMC00LjU3LDMuOTJjLS40NC40NC0uODcuOS0xLjI5'@;
put 'LDEuMzZhMjAuMjcsMjAuMjcsMCwwLDAsMSwxLjg1Yy41NC0uNjEsMS4wOS0xLjIxLDEuNjgtMS44YTM2LjMzLDM2LjMzLDAsMCwxLDUtNC4xNywzNi44OCwzNi44OCwwLDAsMSw0Ljk1LDQuMTcsMzYuMjYsMzYuMjYsMCwwLDEsNC4xNyw1LDM3LDM3LDAsMCwxLTQuMTcsNUEzMC42OCwzMC42'@;
put 'OCwwLDAsMSwxMi41NywzMC4wOVpNMjkuNzksMzBsLS4xNi4xM2EyLjI3LDIuMjcsMCwwLDAtMy41LjcyLDEyLjU3LDEyLjU3LDAsMCwxLTMtLjc3LDIyLDIyLDAsMCwxLTMuNDgtMS43MiwzOS4xNCwzOS4xNCwwLDAsMCw0LjU3LTMuOTIsMzguMjYsMzguMjYsMCwwLDAsMy45Mi00LjU2LDIy'@;
put 'Ljg4LDIyLjg4LDAsMCwxLDEuNzIsMy40OEMzMSwyNi4zOSwzMSwyOC44MSwyOS43OSwzMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxOC4wNyIgcj0iMy4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMi42NiAzLjEx'@;
put 'KSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVCYXJDb2RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEs'@;
put 'MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEs'@;
put 'MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLF8uQ2xyU2hhcGVDZER2'@;
put 'ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGgg'@;
put 'ZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4Wk0xNy44OCwyMC45QTIuODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1LjY4LDE3Ljc1aDEuNkExMC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMw'@;
put 'LjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAsMCwwLDMwLjA5LDE4UzMwLjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4x'@;
put 'MmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTgu'@;
put 'MjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTguMTcsMS45MmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdB'@;
put 'OC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwxOCw0LjIxdjEuNkExMi4xMywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwxOCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCww'@;
put 'LTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwxNC40MiwxNy45MlptMy43NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjczLDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlQ29udGFpbmVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhW'@;
put 'MjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjgu'@;
put 'OCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44'@;
put 'LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzks'@;
put 'MCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEuNzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs'@;
put 'LjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCww'@;
put 'LDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQu'@;
put 'MTMsNC4xMywwLDAsMSwuOTItMS4zNywzMC45NCwzMC45NCwwLDAsMS03LjIyLTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyOFY4LjE5Yy4zNC0uNzYsNC4zMS0yLjExLDExLTIuMTFzMTAuNjcsMS4zNSwxMSwydi4zYy0uODIu'@;
put 'NzktNC41OCwyLjA1LTExLjExLDIuMDVBMzMuNDgsMzMuNDgsMCwwLDEsOCw5LjQ0djEuNDRhMzUuNiwzNS42LDAsMCwwLDguODksMWM0LjI5LDAsOC44LS41OCwxMS4xMS0xLjgydjUuMDdhNS4zLDUuMywwLDAsMS0xLjgxLjg4SDMwVjguMTJjMC0zLjE5LTguMTctNC0xMy00cy0xMywuODUt'@;
put 'MTMsNFYyOEM0LDMwLjYzLDkuMzksMzEuNjgsMTQsMzJWMzBDOS4xMywyOS42Niw2LjI4LDI4LjYyLDYsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOCwyNC4yOGEzMS4zLDMxLjMsMCwwLDAsNiwuODl2LTEuNGEyOC45MywyOC45'@;
put 'MywwLDAsMS02LS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC01IiAvPjxwYXRoIGQ9Ik0yNSwyMS44MmEuNy43LDAsMCwwLS43LjdWMzBhLjcuNywwLDEsMCwxLjQsMFYyMi41MkEuNy43LDAsMCwwLDI1LDIxLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0u'@;
put 'Ny43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYy'@;
put 'MEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEsMjEuN2EuNy43LDAsMCwwLS43Ljd2Ny40OWEuNy43LDAsMCwwLDEuNCwwVjIyLjRBLjcuNywwLDAsMCwyMSwyMS43WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAsMC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGgg'@;
put 'ZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDE2SDI4VjguMTJjMC0xLjY4LTUuMzgtMy0xMi0zUzQsNi40'@;
put 'NCw0LDguMTJWMjhjMCwxLjUsNC4zMywyLjc1LDEwLDNWMjUuMjJhMjkuMTcsMjkuMTcsMCwwLDEtOC0xLjI5VjIyLjQ0bC4yNC4xQTI2LjYzLDI2LjYzLDAsMCwwLDE0LDIzLjgyVjIwYTQsNCwwLDAsMSwuMjktMS40N0EyOS4xOSwyOS4xOSwwLDAsMSw2LDE3LjIzVjE1Ljc1bC4yNC4wOWEy'@;
put 'OSwyOSwwLDAsMCw5LDEuMzJoMEE0LDQsMCwwLDEsMTgsMTZaTTYsMTAuNTRWOS4wNWwuMjQuMDlBMzAuMTIsMzAuMTIsMCwwLDAsMTYsMTAuNDcsMjguMzMsMjguMzMsMCwwLDAsMjYsOS4wNXYxLjVhMzIuNTMsMzIuNTMsMCwwLDEtMTAsMS4zMkEzMi40NCwzMi40NCwwLDAsMSw2LDEwLjU0'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxfLkNsclNoYXBlRmlsZVNoYXJlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwy'@;
put 'LDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0y'@;
put 'MS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42'@;
put 'NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIs'@;
put 'MiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEtMi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwx'@;
put 'LC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZVFyQ29kZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiww'@;
put 'LDAsMCw0LDUuNlYxMmg4VjRaTTEwLDEwSDZWNmg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQsMzAuNEExLjYsMS42LDAsMCwwLDUuNiwzMkgxMlYyNEg0Wk02LDI2aDR2NEg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDMyaDYuNEExLjYsMS42LDAsMCwwLDMyLDMwLjRWMjRIMjRabTItNmg0djRIMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNCw0SDI0djhoOFY1LjZBMS42LDEuNiwwLDAs'@;
put 'MCwzMC40LDRaTTMwLDEwSDI2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTAgMjAgOCAxNiA4IDE2IDEyIDE4IDEyIDE4IDEwIDIwIDEwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtNSIgLz48cmVjdCB4PSIxMiIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTciIC8+PHBvbHlnb24gcG9pbnRzPSIyMCA2IDIwIDggMjIgOCAyMiA0IDE0IDQgMTQgOCAxNiA4IDE2IDYgMjAgNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHJlY3QgeD0iNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwb2x5Z29uIHBvaW50cz0iMTIgMTYgMTIgMTggMTAgMTggMTAgMTQgOCAxNCA4IDE4IDYgMTggNiAyMCA0IDIwIDQgMjIgOCAyMiA4IDIwIDEwIDIwIDEwIDIyIDEyIDIyIDEyIDIwIDE0IDIwIDE0IDE2IDEyIDE2'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+PHBvbHlnb24gcG9pbnRzPSIyMCAxNiAyMiAxNiAyMiAxOCAyNCAxOCAyNCAxNiAyNiAxNiAyNiAxNCAyMiAxNCAyMiAxMCAyMCAxMCAyMCAxMiAxOCAxMiAxOCAxNCAyMCAxNCAyMCAxNiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPjxwb2x5Z29uIHBvaW50cz0iMTggMzAgMTQgMzAgMTQgMzIgMjIgMzIgMjIgMzAgMjAgMzAgMjAgMjggMTggMjggMTggMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgLz48cG9seWdvbiBw'@;
put 'b2ludHM9IjIyIDIwIDIyIDE4IDIwIDE4IDIwIDE2IDE4IDE2IDE4IDE4IDE2IDE4IDE2IDIwIDE4IDIwIDE4IDIyIDIwIDIyIDIwIDIwIDIyIDIwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIC8+PHJlY3QgeD0iMzAiIHk9IjIwIiB3aWR0aD0iMiIgaGVp'@;
put 'Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIC8+PHJlY3QgeD0iMjIiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIC8+PHBvbHlnb24gcG9pbnRzPSIzMCAxNCAy'@;
put 'OCAxNCAyOCAxNiAyNiAxNiAyNiAxOCAyOCAxOCAyOCAyMCAzMCAyMCAzMCAxOCAzMiAxOCAzMiAxNiAzMCAxNiAzMCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiAvPjxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTggMjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSxfLkNs'@;
put 'clNoYXBlVXNiPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAsMSwxLjI4LS43MmgxYTIuODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcsMS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAt'@;
put 'MywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiwwLDAsMSwxOS4zMyw4LjQ2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAs'@;
put 'MCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywyLjQ3LDIuNDcsMCwxLDEtMi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDkuMTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwz'@;
put 'LjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCwwLC44LS43OXYtNC40YS43OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2'@;
put 'Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNi4xMS0zLjY2YS42OS42OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4xNFptNS4zOS00LjU2VjE1LjU1bDQsMi40Mloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43MiwxNy4zN2wtNS41MS0zLjMxYS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgtLjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIu'@;
put 'MjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdhMy40OSwzLjQ5LDAsMCwwLTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJo'@;
put 'NC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYyLjI4YS43LjcsMCwwLDAsLjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43LjcsMCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVSYWRhcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTku'@;
put 'NCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNzLTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0'@;
put 'LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRTNCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0'@;
put 'YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywy'@;
put 'LjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'IiAvPicpLF8uQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIuNDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwz'@;
put 'LjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwxMi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcs'@;
put 'Mi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIuODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAs'@;
put 'MCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcyLDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0x'@;
put 'Ljg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwx'@;
put 'NC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTExLjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0u'@;
put 'MjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVSZXNpc3Rvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcs'@;
put 'MCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSwwLDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEs'@;
put 'MSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3'@;
put 'LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0xLjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+Jyks'@;
put 'Xy5DbHJTaGFwZUNhcGFjaXRvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEsMSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBh'@;
put 'dGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwx'@;
put 'LDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxfLkNs'@;
put 'clNoYXBlU3F1aWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBWNkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCww'@;
put 'LDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSww'@;
put 'LTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAsMywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCwwLDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEsMCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5'@;
put 'TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxfLkNsclNoYXBlSG9zdEdyb3VwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRB'@;
put 'MS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgsMCwwLDEsMjIuMTYsMTJWMzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gxM2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgtMTFWM2gxMmExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cblxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUxMzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2'@;
put 'Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcuOTIgTDE1LjA4LDcuOTIgQzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgwMzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwz'@;
put 'MS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4wOCwxMS45NiBMNC4wOCwxMS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTguMSw2IEw2LjEsNiBMNi4xLDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEgWiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4LDIgTDExLjA4LDAgTDIzLjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+JyksXy5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVy'@;
put 'PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwxLDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1'@;
put 'VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCwwLTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRo'@;
put 'PSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0i'@;
put 'TTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+JyksXy5DbHJTaGFwZU5vZGVHcm91cD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1Yx'@;
put 'My4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45'@;
put 'NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEsMCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40'@;
put 'NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdMMzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0x'@;
put 'VjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcuMzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEtMVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1'@;
put 'djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLF8uQ2xyU2hhcGVOb2Rlcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5'@;
put 'VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41'@;
put 'LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQu'@;
put 'OXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksXy5DbHJTaGFwZU5hbWVzcGFjZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwx'@;
put 'LDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDku'@;
put 'NjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDkuNjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAs'@;
put 'MiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLF8uQ2xyU2hh'@;
put 'cGVOb2RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4zM1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIi8+JyksXy5DbHJTaGFwZVBvZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgy'@;
put 'NmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2'@;
put 'LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40'@;
put 'MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwyMWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxfLkNsckNvbnRyb2xMdW49KDAsZy5jbHJJY29uU1ZHKSgn'@;
put 'XG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4z'@;
put 'NCwxLjg4LDEyLDEuODhzOS4xLS40NSwxMi0xLjg4djUuMTFjLS45MS44Mi01LDIuMTMtMTIsMi4xM0EzNC44MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjhoMHMwLDAsMC0uMDdjMC0zLjM1'@;
put 'LTguOC00LjI1LTE0LTQuMjVTNCw0LjU4LDQsNy45M3YxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaTTE4LDUuNjhjNy4xNSwwLDExLjUzLDEuNDQsMTIsMi4yNS0uNDYuODEtNC44NCwyLjI1LTEyLDIuMjVTNi4zMSw4'@;
put 'LjY5LDYsOEM2LjMxLDcuMTgsMTAuNzEsNS42OCwxOCw1LjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAs'@;
put 'MCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjJIMTUuNDZsLTUuNDEsNi4zMUwxNS40OSwzNGgxNi42YTIsMiwwLDAsMCwyLTJWMjMuOTNBMiwyLDAsMCwwLDMyLjA5LDIyWm0wLDEwSDE2LjM0bC0zLjU5LTMuNzdMMTYuMzgsMjRIMzIuMDl2OFoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAg'@;
put 'PHBhdGggZD0iTTE4LDE3LjU0QTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNWMThhNDAuODYsNDAuODYsMCwwLDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTMuMjJhNy4zMiw3LjMyLDAsMCwxLTIsLjI4djEuOTFDMjkuMDksMTYuMjMsMjUsMTcuNTQsMTgsMTcu'@;
put 'NTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGE0Ny42Niw0Ny42NiwwLDAsMCw3LjA5LS41Miw3LjQ1LDcuNDUsMCwwLDEtMS41'@;
put 'MS0xLjgsNDcuNCw0Ny40LDAsMCwxLTUuNTguMzJDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuNjYsMCwzLjE2LjA4LDQuNTEuMjFhNy41Niw3LjU2LDAsMCwxLC4yOS0yYy0xLjctLjE3LTMuMzgtLjI0LTQuOC0uMjQtNS4yLDAtMTQsLjktMTQs'@;
put 'NC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIi8+PHBhdGgg'@;
put 'ZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1Yx'@;
put 'MC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4aC41OWEzLjU5LDMuNTksMCwwLDEsLjMyLTJIMThDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuMjIsMCwyLjM1LjA1LDMuNDEuMTJsMS4xLTEuOTFjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0u'@;
put 'MjEtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBk'@;
put 'PSJNOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkxdjMuMjNoMlYxNS40SDMwYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'Ii8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgyVjEwLjcyYy0yLjIxLDMuMzYtMTAuNDksMy40'@;
put 'Ni0xNCwzLjQ2QTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4xNGM1LDAsMTMuMjgtLjgzLDE0LTMuODhWNy44M2gwYy0uMTktMy4yNy04Ljg0LTQuMTUtMTQtNC4xNVM0LjIxLDQuNTYsNCw3LjgzSDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42'@;
put 'MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFaTTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEs'@;
put 'MUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNSwwLDEzLjIt'@;
put 'LjgyLDE0LTMuODJ2LTJhNy4zNCw3LjM0LDAsMCwxLTQuMTIsMCwzOS40NywzOS40NywwLDAsMS05Ljg4LDFBNDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0LDQ3Ljc2LDQ3Ljc2LDAsMCwwLDcuMDktLjUyQTcuNDUsNy40NSwwLDAsMSwyMi44'@;
put 'LDMuOTJjLTEuNy0uMTctMy4zOC0uMjQtNC44LS4yNC01LjE0LDAtMTMuNzkuODgtMTQsNC4xNUg0djE5LjdjMCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzks'@;
put 'MjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMzLjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEs'@;
put 'MSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcu'@;
put 'ODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNC44NSwwLDEyLjgtLjc5LDEzLjkxLTMuNjJIMjIuMjNhMy42OCwzLjY4LDAsMCwxLTIuNzMtMS4yM0gxOEE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRoLjU5YTMuNjEsMy42MSwwLDAsMSwu'@;
put 'NDYtMi4yOWwzLjQ2LTZjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4xNCwwLTEzLjc5Ljg4LTE0LDQuMTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYy'@;
put 'NC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxl'@;
put 'cnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLF8uQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCww'@;
put 'LDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTYsMzBWNkgzMFYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9'@;
put 'IjIwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0yNy4yMiwxMEgyMHY0YS44Ljgs'@;
put 'MCwxLDAsMS41OSwwVjExLjZoNS42M2EuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxOCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0i'@;
put 'OC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl'@;
put 'ZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8cmVjdCB4'@;
put 'PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICA8cmVjdCB4'@;
put 'PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTIwLDE0YS44LjgsMCwxLDAsMS41OSwwVjExLjZIMjVBNy43NCw3Ljc0LDAsMCwxLDIzLjY2LDEwSDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMTAtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDZWNkgyMi41VjZhNy4zNyw3LjM3LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEy'@;
put 'LDIsMCwwLDAsMi0yVjEzLjIyQTcuMzcsNy4zNywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxyZWN0'@;
put 'IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEi'@;
put 'IHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9'@;
put 'IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMwLDE1LjRWMzBINlY2SDIxLjI3bDEuMTgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAs'@;
put 'MCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEu'@;
put 'MjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMwLDRINkEyLDIs'@;
put 'MCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2ExLDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0w'@;
put 'LTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJabTAtNkgyMFYxMGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCwxMy41YTcu'@;
put 'NDksNy40OSwwLDAsMS00LTEuMTZWMTRIMjBWMTBoMy42NkE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YTcuMzcsNy4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJI'@;
put 'MzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRW'@;
put 'MjJoMlptMC00SDI0VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNs'@;
put 'ci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTIyLjIzLDE1LjRhMy42OCwzLjY4LDAsMCwxLTMuMTgtNS41MUwyMi40NSw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIs'@;
put 'MCwwLDAsMi0yVjE1LjRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgxN1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYuODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgJyksXy5DbHJTaGFwZVRhcGVEcml2ZT0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4'@;
put 'YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTMuMzMsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTMsNC41MkE0LjUz'@;
put 'LDQuNTMsMCwwLDAsMTMuMzMsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45My0yLjkyQTIuOTIsMi45MiwwLDAsMSwxMy4zMywyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy42MiwxMy4zNWE0LjUyLDQu'@;
put 'NTIsMCwxLDAsNC41Miw0LjUyQTQuNTMsNC41MywwLDAsMCwyMy42MiwxMy4zNVptMCw3LjQ0YTIuOTIsMi45MiwwLDEsMSwyLjkyLTIuOTJBMi45MiwyLjkyLDAsMCwxLDIzLjYyLDIwLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGgg'@;
put 'ZD0iTTYsMTFWMjMuNTVIOFYxMkgyOS4zNFYxMEg3QTEsMSwwLDAsMCw2LDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4Ljgx'@;
put 'LDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTkuMSwxNy44N2E0LjUyLDQuNTIs'@;
put 'MCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCwxOS4xLDE3Ljg3Wm03LjQ0LDBBMi45MiwyLjkyLDAsMSwxLDIzLjYyLDE1LDIuOTIsMi45MiwwLDAsMSwyNi41NCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIv'@;
put 'PlxuICA8cGF0aCBkPSJNMzIsMTMuMjJWMjhINFY4SDIyLjc4YTcuMzcsNy4zNywwLDAsMS0uMjgtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNjUsNy42NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNNiwxMVYyMy41NUg4VjEySDI1LjUxYTcuNjYsNy42NiwwLDAsMS0xLjg1LTJIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQt'@;
put 'LWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik04LjgxLDE3Ljg3YTQuNTMsNC41MywwLDEsMCw0LjUyLTQu'@;
put 'NTJBNC41Myw0LjUzLDAsMCwwLDguODEsMTcuODdabTcuNDUsMEEyLjkzLDIuOTMsMCwxLDEsMTMuMzMsMTUsMi45MywyLjkzLDAsMCwxLDE2LjI2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGgg'@;
put 'ZD0iTTcsMTBhMSwxLDAsMCwwLTEsMVYyMy41NUg4VjEySDE4LjU3QTMuNywzLjcsMCwwLDEsMTksMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOEg0VjhIMjAuMTRs'@;
put 'MS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjIuMDksMTUuMzlhMy42NSwzLjY1LDAs'@;
put 'MCwxLTEuOC0uNTUsNC41MSw0LjUxLDAsMSwwLDcuMTEuNTZIMjUuMTdhMi45MiwyLjkyLDAsMSwxLTMuMDgsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFB'@;
put 'MS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxl'@;
put 'cnQiLz5cblxuICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLDI0SDZWMTJIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0x'@;
put 'Mi4yMSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwxMi4yMSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDEyLjIxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCww'@;
put 'LDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEt'@;
put 'MiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMy43OSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwyMy43OSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwx'@;
put 'LDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMwLDEzLjVWMjRINlYxMkgyNS41MWE3LjQ5LDcuNDksMCwwLDEtMy02SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiww'@;
put 'LDAsMCwyLTJWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTcuMiwxOGE1LDUsMCwxLDAsNS01QTUsNSwwLDAsMCw3LjIsMThabTcsMGEyLDIsMCwxLDEtMi0yQTIsMiwwLDAsMSwxNC4yMiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE4Ljc4LDE4YTUsNSwwLDEsMCw5LjI3LTIuNkgyMi4yM2EzLjcxLDMuNzEsMCwwLDEtMi4xNy0uNzFBNSw1LDAsMCwwLDE4Ljc4LDE4Wm01LTJhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMwVjI0SDZWMTJIMTguNTdhMy42NSwzLjY1LDAsMCwxLC40OC0yLjExTDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCww'@;
put 'LDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5'@;
put 'LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLF8uQ2xyU2hhcGVBbmltYXRpb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEw'@;
put 'LjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0xLjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSwwLDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIy'@;
put 'LDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIu'@;
put 'MTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAsMyw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMsOC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9'@;
put 'Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIs'@;
put 'MTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSxfLkNsclNoYXBlQ2lDZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwx'@;
put 'LC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3LDcuNjcsMCwwLDEsMjMuNTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcu'@;
put 'NDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAsMCwwLDE4LjE3LDEwaC4wOWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwx'@;
put 'LjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMxLjM3YTcuMzMsNy4zMywwLDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCwwLDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCww'@;
put 'LDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjQsMTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMsLjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwx'@;
put 'LDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0uMjgsNC4wOGExLDEsMCwwLDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEsMSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRoLjA4bDQuMDktLjM1YTEsMSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCwwLDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAs'@;
put 'MS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwxLDAsMCwwLS45Mi0xLjA4LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4zOWE3LjcxLDcuNzEsMCwwLDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40NywyLjk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJs'@;
put 'LS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLF8uQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLGcuY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0ExLjg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIuNjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIu'@;
put 'MDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2'@;
put 'VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDksMi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwy'@;
put 'LjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIuMTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6Xy5DbHJTaGFwZVJ1bGVyUGVuY2lsLCJwaG9uZS1oYW5kc2V0IjpfLkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjpfLkNsclNoYXBlTm9XaWZpLGluc3RhbGw6Xy5DbHJTaGFwZUlu'@;
put 'c3RhbGwsdW5pbnN0YWxsOl8uQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOl8uQ2xyU2hhcGVMYXllcnMsYmxvY2s6Xy5DbHJTaGFwZUJsb2NrLCJibG9ja3MtZ3JvdXAiOl8uQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6Xy5DbHJTaGFwZUJ1bmRsZSx3aWZpOl8uQ2xyU2hhcGVXaWZpLCJy'@;
put 'YWNrLXNlcnZlciI6Xy5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6Xy5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9yZSI6Xy5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOl8uQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczpfLkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDpf'@;
put 'LkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6Xy5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDpfLkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6Xy5DbHJTaGFwZUhvc3Qsc3RvcmFnZTpfLkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOl8uQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczpfLkNsclNoYXBl'@;
put 'QXBwbGljYXRpb25zLGJ1aWxkaW5nOl8uQ2xyU2hhcGVCdWlsZGluZyxjcHU6Xy5DbHJTaGFwZUNQVSxtZW1vcnk6Xy5DbHJTaGFwZU1lbW9yeSwiZGF0YS1jbHVzdGVyIjpfLkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOl8uQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxk'@;
put 'Ol8uQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6Xy5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6Xy5DbHJTaGFwZVNoaWVsZFgsaW1wb3J0Ol8uQ2xyU2hhcGVJbXBvcnQsZXhwb3J0Ol8uQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6Xy5DbHJTaGFwZVVwbG9hZENs'@;
put 'b3VkLCJkb3dubG9hZC1jbG91ZCI6Xy5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOl8uQ2xyU2hhcGVQbHVnaW4sZmxvcHB5Ol8uQ2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6Xy5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6Xy5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6Xy5DbHJTaGFw'@;
put 'ZVRlcm1pbmFsLGNvZGU6Xy5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246Xy5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6Xy5DbHJTaGFwZUJhdHRlcnksbW9iaWxlOl8uQ2xyU2hhcGVNb2JpbGUsdGFibGV0Ol8uQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOl8uQ2xyU2hhcGVO'@;
put 'ZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOl8uQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjpfLkNsclNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6Xy5DbHJTaGFwZVJvdXRlcix2bTpfLkNsclNoYXBlVk0sInZtdy1hcHAiOl8uQ2xyU2hhcGVWTVdBcHAs'@;
put 'Y2VydGlmaWNhdGU6Xy5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6Xy5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOl8uQ2xyU2hhcGVVbmFyY2hpdmUsY29ubmVjdDpfLkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0Ol8uQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6Xy5DbHJTaGFwZUxp'@;
put 'bmssdW5saW5rOl8uQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOl8uQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxlIjpfLkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6Xy5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOl8uQ2xyQ29udHJv'@;
put 'bEx1bixkZXBsb3k6Xy5DbHJTaGFwZURlcGxveSxoZWxpeDpfLkNsclNoYXBlSGVsaXgsZmxhc2s6Xy5DbHJTaGFwZUZsYXNrLGFkbWluaXN0cmF0b3I6Xy5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOl8uQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOl8u'@;
put 'Q2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOl8uQ2xyU2hhcGVOVk1lLHNzZDpfLkNsclNoYXBlU1NELGJsdWV0b290aDpfLkNsclNoYXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjpfLkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjpfLkNsclNoYXBlUHJvY2Vzc09u'@;
put 'Vk0sImFzc2lnbi11c2VyIjpfLkNsclNoYXBlQXNzaWduVXNlcixhdG9tOl8uQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6Xy5DbHJTaGFwZUJhckNvZGUsImNkLWR2ZCI6Xy5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjpfLkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjpfLkNs'@;
put 'clNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjpfLkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjpfLkNsclNoYXBlUXJDb2RlLHVzYjpfLkNsclNoYXBlVXNiLHJhZGFyOl8uQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6Xy5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDpfLkNsclNo'@;
put 'YXBlU3F1aWQsaW5kdWN0b3I6Xy5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOl8uQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6Xy5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjpfLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOl8uQ2xyU2hhcGVO'@;
put 'b2RlR3JvdXAsbm9kZXM6Xy5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTpfLkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6Xy5DbHJTaGFwZU5vZGUscG9kOl8uQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOl8uQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOl8uQ2xyU2hhcGVUYXBl'@;
put 'RHJpdmUsYW5pbWF0aW9uOl8uQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjpfLkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjpfLkNsclNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCx5LmRlc2NyaXB0b3JDb25m'@;
put 'aWcpKF8uVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uVGVjaG5vbG9neVNoYXBlcywiY29tbWFuZCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5UZWNobm9s'@;
put 'b2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UZWNobm9sb2d5U2hh'@;
put 'cGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uVGVjaG5vbG9neVNo'@;
put 'YXBlcywicmVjZWl2ZXIiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UZWNobm9sb2d5U2hh'@;
put 'cGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5UZWNobm9sb2d5U2hhcGVzLCJmb2xk'@;
put 'ZXItc2hhcmUiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoXy5UZWNobm9sb2d5U2hh'@;
put 'cGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3No'@;
put 'YXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0cmljdCI7'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uVGV4dEVkaXRTaGFwZXM9Xy5DbHJTaGFwZVN1cGVyc2NyaXB0PV8uQ2xyU2hhcGVTdWJzY3JpcHQ9Xy5DbHJTaGFwZVN0cmlrZXRocm91Z2g9Xy5DbHJTaGFwZUluZGVudD1fLkNsclNoYXBlT3V0ZGVu'@;
put 'dD1fLkNsclNoYXBlSGlnaGxpZ2h0ZXI9Xy5DbHJTaGFwZVRleHRDb2xvcj1fLkNsclNoYXBlTGFuZ3VhZ2U9Xy5DbHJTaGFwZUFsaWduVG9wPV8uQ2xyU2hhcGVBbGlnbk1pZGRsZT1fLkNsclNoYXBlQWxpZ25Cb3R0b209Xy5DbHJTaGFwZVVuZGVybGluZT1fLkNsclNoYXBlVGV4dD1fLkNs'@;
put 'clNoYXBlQWxpZ25SaWdodFRleHQ9Xy5DbHJTaGFwZUJsb2NrUXVvdGU9Xy5DbHJTaGFwZVBhaW50Um9sbGVyPV8uQ2xyU2hhcGVOdW1iZXJMaXN0PV8uQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PV8uQ2xyU2hhcGVKdXN0aWZ5VGV4dD1fLkNsclNoYXBlSXRhbGljPV8uQ2xyU2hhcGVBbGlnblJp'@;
put 'Z2h0PV8uQ2xyU2hhcGVBbGlnbkxlZnQ9Xy5DbHJTaGFwZUFsaWduQ2VudGVyPV8uQ2xyU2hhcGVGb250U2l6ZT1fLkNsclNoYXBlQ2hlY2tib3hMaXN0PV8uQ2xyU2hhcGVDZW50ZXJUZXh0PV8uQ2xyU2hhcGVCdWxsZXRMaXN0PV8uQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgeT1JKAovKiEg'@;
put 'Li4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Xy5DbHJTaGFwZUJvbGQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIyLjQzLDE3LjU0YTQuNjcsNC42NywwLDAsMCwyLjgtNC4zN3YtLjA2'@;
put 'YTQuNDMsNC40MywwLDAsMC0xLjMxLTMuMjUsNy4wOSw3LjA5LDAsMCwwLTUuMTMtMS43M2gtN0ExLjcxLDEuNzEsMCwwLDAsMTAsOS44NlYyNmExLjcyLDEuNzIsMCwwLDAsMS43NCwxLjc0aDcuMzNjNC4zNywwLDcuMjUtMS44OCw3LjI1LTUuMzhWMjIuM0MyNi4zMiwxOS42NCwyNC43Mywx'@;
put 'OC4zMiwyMi40MywxNy41NFpNMTMuNjgsMTEuNGg0LjU0YzIsMCwzLjE1Ljg5LDMuMTUsMi4zM3YuMDZjMCwxLjY4LTEuMzYsMi40OS0zLjM4LDIuNDlIMTMuNjhaTTIyLjM3LDIyYzAsMS41OS0xLjMxLDIuNDMtMy40NiwyLjQzSDEzLjY4VjE5LjYyaDVjMi40OSwwLDMuNjkuODgsMy42OSwy'@;
put 'LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZUJ1bGxldExpc3Q9KDAseS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iNS4yMSIgY3k9IjkuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIxNy4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjI1LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg'@;
put 'Lz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLF8uQ2xyU2hhcGVDZW50ZXJUZXh0PSgwLHkuY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGQ9Ik0zMC44OCw4SDUuMTJhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI1LjUsMTYuMmExLjEsMS4xLDAsMSwwLDAtMi4yaC0xNWEx'@;
put 'LjEsMS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLjI1LDIwSDUuNzVhMS4xLDEuMSwwLDAsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuODgsMjZIMTEuMTJhMS4xLDEuMSwwLDEsMCwwLDIuMkgyNC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksXy5DbHJTaGFwZUNoZWNrYm94TGlzdD0oMCx5'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMTZIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjQzLDI0SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNS40NSwxMGgxNmExLDEsMCwwLDAsMC0yaC0xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy41LDMuNDJhMS4wOSwxLjA5LDAsMCwwLTEuNTUsMEw3Ljg5'@;
put 'LDExLjQ4LDQuNTEsNy44NEExLjEsMS4xLDAsMSwwLDIuOSw5LjM0bDQuOTQsNS4zTDE3LjUsNUExLjEsMS4xLDAsMCwwLDE3LjUsMy40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLF8uQ2xyU2hhcGVGb250U2l6ZT0oMCx5LmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMjEsOS4wOEExLjEzLDEuMTMsMCwwLDAsMTkuODYsOEg0LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjE5SDExVjI3YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTAuMTloNi42OUExLjE0LDEuMTQsMCwwLDAsMjEsOS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC42NywxNUgyMS4xNWExLjEsMS4xLDAsMSwwLDAsMi4xOUgyNVYyNi41YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTcuMjNoMy41NGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yIiAvPicpLF8uQ2xyU2hhcGVBbGlnbkNlbnRlcj0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMjBIMTlWMTZoNmExLDEsMCwwLDAsMS0xVjdhMSwxLDAsMCwwLTEtMUgxOVYyYTEsMSwwLDAsMC0yLDBWNkgxMWExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg2djRINWEx'@;
put 'LDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMUgxN3Y0YTEsMSwwLDAsMCwyLDBWMzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBaTTEyLDE0VjhIMjR2NlpNMzAsMjhINlYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp'@;
put 'LF8uQ2xyU2hhcGVBbGlnbkxlZnQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsMUExLDEsMCwwLDAsNCwyVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsNSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDIwSDhW'@;
put 'MzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBabS0xLDhIMTBWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTVWN2ExLDEsMCwwLDAtMS0xSDhWMTZIMjNBMSwxLDAsMCwwLDI0LDE1Wm0tMi0xSDEw'@;
put 'VjhIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlQWxpZ25SaWdodD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMWExLDEsMCwwLDAtMSwxVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsMzEsMVoiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDIxdjhhMSwxLDAsMCwwLDEsMUgyOFYyMEg1QTEsMSwwLDAsMCw0LDIxWm0yLDFIMjZ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEy'@;
put 'LDd2OGExLDEsMCwwLDAsMSwxSDI4VjZIMTNBMSwxLDAsMCwwLDEyLDdabTIsMUgyNnY2SDE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksXy5DbHJTaGFwZUl0YWxpYz0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuNDIsOEgxNy4xYTEu'@;
put 'MSwxLjEsMCwxLDAsMCwyLjE5aDIuMTNMMTMuMTEsMjUuNTVIMTAuNDdhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTcuOGExLjEsMS4xLDAsMSwwLDAtMi4xOUgxNS41MWw2LjEzLTE1LjM2aDIuNzhhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlSnVzdGlmeVRleHQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsMTAuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4ySDZhMS4xLDEuMSwwLDEsMCwwLDIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'IiAvPjxwYXRoIGQ9Ik0zMS43NSwxNEg2YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMS4xMiwyMEg2LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjJoMjQu'@;
put 'NWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQ1LDI1LjgzSDYuNmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjQ1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxfLkNsclNoYXBlQWxpZ25MZWZ0VGV4dD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMjUsMjZINnYyLjJIMjAuMjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv'@;
put 'PjxwYXRoIGQ9Ik0yOCwyMEg2djIuMkgyOEExLjEsMS4xLDAsMCwwLDI4LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLjYsMTUuMUExLjEsMS4xLDAsMCwwLDIxLjUsMTRINnYyLjJIMjEuNUExLjEsMS4xLDAsMCwwLDIyLjYs'@;
put 'MTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOS4yNSw4SDZ2Mi4ySDI5LjI1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxfLkNsclNoYXBlTnVt'@;
put 'YmVyTGlzdD0oMCx5LmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjUuNDYgNy40MSA1LjQ2IDExLjU2IDYuNjUgMTEuNTYgNi42NSA2LjA1IDUuNyA2LjA1IDQuMDUgNy4xNiA0LjUyIDggNS40NiA3LjQxIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNNS41NywxNC44MmEuNzYuNzYsMCwwLDEsLjgzLjczYzAsLjM4LS4yMS43NC0uODcsMS4yN2wtMiwxLjU3djFINy42N1YxOC4yOEg1LjMzbDEtLjc3YzEtLjcsMS4yOC0xLjI3LDEuMjgtMmExLjgzLDEuODMsMCwwLDAtMi0xLjc2LDIuNjMsMi42MywwLDAsMC0yLjE0LDEu'@;
put 'MDhsLjc2LjczQTEuNzUsMS43NSwwLDAsMSw1LjU3LDE0LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTYuNTYsMjQuNjRhMS4zMiwxLjMyLDAsMCwwLDEtMS4yN2MwLS44Ny0uNzgtMS41MS0yLTEuNTFhMi42MSwyLjYxLDAsMCww'@;
put 'LTIuMSwxbC42OS43MmExLjc4LDEuNzgsMCwwLDEsMS4zLS42NGMuNTQsMCwuOTIuMjYuOTIuNjZzLS4zNi42Mi0xLC42Mkg0Ljc5djFoLjY0Yy43NCwwLDEuMDcuMjEsMS4wNy42M3MtLjM1LjY4LTEsLjY4YTIsMiwwLDAsMS0xLjQ2LS42NWwtLjcuNzhhMi44NSwyLjg1LDAsMCwwLDIuMjEu'@;
put 'OTNjMS4yOSwwLDIuMTMtLjY5LDIuMTMtMS42NEExLjMzLDEuMzMsMCwwLDAsNi41NiwyNC42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40'@;
put 'MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksXy5DbHJTaGFwZVBhaW50Um9sbGVyPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMFY0YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw0djZhMiwyLDAsMCww'@;
put 'LDIsMkgyOUEyLDIsMCwwLDAsMzEsMTBaTTYsNEgyOXY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI5TDE4LjcsMTYuNTRhMSwxLDAsMCwwLS43LDFWMTlIMTZWMzNhMiwyLDAsMCwwLDIsMmgyYTIsMiwwLDAs'@;
put 'MCwyLTJWMTlIMjB2LS43M0wzMy4zLDE0YTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLDZaTTIwLDMzSDE4VjIxaDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cmVjdCB4PSI0IiB5PSIyIiB3aWR0aD0iMjciIGhlaWdodD0iMTAiIHJ4PSIx'@;
put 'IiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI0TDE4LjcxLDE2LjQ1YTEsMSwwLDAsMC0uNzEsMVYxOUgxNlYzNGExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxOUgyMHYtLjgyTDMzLjI5LDE0QTEsMSww'@;
put 'LDAsMCwzNCwxM1Y3QTEsMSwwLDAsMCwzMyw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlQmxvY2tRdW90ZT0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTEuODYsMTYuNTVhNC4zMSw0LjMxLDAsMCwwLTIuMTEuNTYsMTQuNDQs'@;
put 'MTQuNDQsMCwwLDEsNC4zNi02LDEuMSwxLjEsMCwwLDAtMS40LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0QTUuMDgsNS4wOCwwLDAsMCwxMCwyNC41OGE0LjQsNC40LDAsMCwwLDEuODguNDQsNC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMywxNi41NWE0LjI5LDQuMjksMCwwLDAtMi4xMS41NiwxNC41LDE0LjUsMCwwLDEsNC4zNS02LDEuMSwxLjEsMCwxLDAtMS4zOS0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NGE1LjA4LDUuMDgsMCwwLDAsMyw0LjYxQTQu'@;
put 'MzcsNC4zNywwLDAsMCwyMywyNWE0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZUFsaWduUmlnaHRUZXh0PSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42NSwyNy4xYTEuMSwxLjEs'@;
put 'MCwwLDAsMS4xLDEuMUgzMFYyNkgxNS43NUExLjEsMS4xLDAsMCwwLDE0LjY1LDI3LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi45LDIxLjFBMS4xLDEuMSwwLDAsMCw4LDIyLjJIMzBWMjBIOEExLjEsMS4xLDAsMCwwLDYuOSwy'@;
put 'MS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEzLjQsMTUuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMTRIMTQuNUExLjEsMS4xLDAsMCwwLDEzLjQsMTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0zIiAvPjxwYXRoIGQ9Ik02Ljc1LDhhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMFY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksXy5DbHJTaGFwZVRleHQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLjE5LDguODRhMS40NSwxLjQ1'@;
put 'LDAsMCwwLTEuNC0xaC0uMTJhMS40NiwxLjQ2LDAsMCwwLTEuNDIsMUwxLjE0LDI2LjU2YTEuMjksMS4yOSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjEyLDEuMTIsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4'@;
put 'LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNjQsMS42NCwwLDAsMC0uMTQtLjU3Wk02LjA4LDIwLjcxbDQuNTktMTAuMjIsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjI0LDE0Ljc4QTYuMzUsNi4zNSwwLDAsMCwy'@;
put 'Ny42LDEzLjJhMTEuMzYsMTEuMzYsMCwwLDAtNC43LDEsMSwxLDAsMCwwLS41OC44OSwxLDEsMCwwLDAsLjk0LjkyLDEuMjMsMS4yMywwLDAsMCwuMzktLjA4LDguODcsOC44NywwLDAsMSwzLjcyLS44MWMyLjcsMCw0LjI4LDEuMzMsNC4yOCwzLjkydi41YTE1LjI5LDE1LjI5LDAsMCwwLTQu'@;
put 'NDItLjYxYy0zLjY0LDAtNi4xNCwxLjYxLTYuMTQsNC42NHYuMDVjMCwyLjk1LDIuNyw0LjQ4LDUuMzcsNC40OGE2LjI5LDYuMjksMCwwLDAsNS4xOS0yLjQ4VjI2LjlhMSwxLDAsMCwwLDEsMSwxLDEsMCwwLDAsMS0xLjA2VjE5QTUuNzEsNS43MSwwLDAsMCwzMi4yNCwxNC43OFptLS41Niw3'@;
put 'LjdjMCwyLjI4LTIuMTcsMy44OS00LjgxLDMuODktMS45NCwwLTMuNjEtMS4wNi0zLjYxLTIuODZ2LS4wNmMwLTEuOCwxLjUtMyw0LjItM2ExNS4yLDE1LjIsMCwwLDEsNC4yMi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVV'@;
put 'bmRlcmxpbmU9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI4LjE3YzUuMDgsMCw4LjQ4LTMuMDgsOC40OC05VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhjMCw0LjQ0LTIuMzgsNi43MS02LjEzLDYuNzFzLTYuMjEtMi40Ny02LjIxLTYuODVWOC41NGExLjE1LDEuMTUs'@;
put 'MCwxLDAtMi4zLDB2MTAuOEM5LjUzLDI1LjA5LDEzLDI4LjE3LDE4LDI4LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDMwSDVhMS4xMSwxLjExLDAsMCwwLDAsMi4yMUgzMUExLjExLDEuMTEsMCwwLDAsMzEsMzBaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlQWxpZ25Cb3R0b209KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDMwSDJhMSwxLDAsMCwwLDAsMkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE2LDVhMSwxLDAsMCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMjhIMTZaTTE0LDI2SDhWNmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDEzYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAs'@;
put 'MCwwLTEsMVYyOEgzMFpNMjgsMjZIMjJWMTRoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVBbGlnbk1pZGRsZT0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMzBWMTFhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCww'@;
put 'LDAtMSwxdjZIMTZWNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYxN0gyYTEsMSwwLDAsMCwwLDJINlYzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0djZhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNGExLDEsMCwwLDAsMC0yWk0xNCwzMEg4VjZo'@;
put 'NlptMTQtNkgyMlYxMmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZUFsaWduVG9wPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw0SDJBMSwxLDAsMCwwLDIsNkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWOEg2Wk04LDEwaDZWMzBIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwyM2ExLDEsMCww'@;
put 'LDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDIwWm0yLTEzaDZWMjJIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlTGFuZ3VhZ2U9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLDNIMTR2NWgyVjVoMTRjMC42LDAsMSww'@;
put 'LjQsMSwxdjExYzAsMC42LTAuNCwxLTEsMUgxN3Y3aC01LjNMOCwyNy45VjI1SDVjLTAuNiwwLTEtMC40LTEtMVYxM2MwLTAuNiwwLjQtMSwxLTFoMTN2LTJINVxuXHRcdGMtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xSDE5di03aDExYzEuNywwLDMt'@;
put 'MS4zLDMtM1Y2QzMzLDQuMywzMS43LDMsMzAsM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LjIsMjIuOWgyLjRsMC42LTEuNmgzLjFsMC42LDEuNmgyLjRMMTEuOSwxNEg5LjVMNi4yLDIyLjl6IE0xMC43LDE2LjVsMSwzLjFoLTJM'@;
put 'MTAuNywxNi41eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDE3YzEuMSwwLDIuNi0wLjMsNC0xYzEuNCwwLjcsMywxLDQsMXYtMmMwLDAtMSwwLTIuMS0wLjRjMS4yLTEuMiwyLjEtMywyLjEtNS42VjhoLTNWNmgtMnYyaC0zdjJo'@;
put 'NS45XG5cdFx0Yy0wLjIsMS44LTEsMi45LTEuOSwzLjZjLTAuNi0wLjUtMS4yLTEuMi0xLjYtMi4xaC0yLjFjMC40LDEuMywxLDIuMywxLjgsMy4xQzIxLjEsMTUsMjAuMiwxNSwyMCwxNVYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwb2x5Z29u'@;
put 'IHBvaW50cz0iMTEsMTYuNSAxMCwxOS42IDEyLDE5LjYgMTEsMTYuNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMywzaC0xNnY1aDR2MmgtMTNjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUu'@;
put 'MWg2Ljd2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZcblx0XHRDMzMuMyw0LjMsMzIsMywzMC4zLDN6IE0xMy4xLDIyLjlsLTAuNS0xLjZIOS41bC0wLjYsMS42SDYuNUw5LjgsMTRoMi40bDMuMyw4LjlMMTMuMSwyMi45eiBNMjguMywxNXYyYy0xLjMsMC0yLjctMC40LTMuOS0xXG5cdFx0Yy0x'@;
put 'LjIsMC42LTIuNiwwLjktNCwxbC0wLjEtMmMwLjcsMCwxLjQtMC4xLDIuMS0wLjNjLTAuOS0wLjktMS41LTItMS44LTMuMmgyLjFjMC4zLDAuOSwwLjksMS42LDEuNiwyLjJjMS4xLTAuOSwxLjgtMi4yLDEuOS0zLjdcblx0XHRoLTZWOGgzVjZoMnYyaDMuM2wwLjEsMWMwLjEsMi4xLTAuNyw0'@;
put 'LjItMi4yLDUuN0MyNy4xLDE0LjksMjcuNywxNSwyOC4zLDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlVGV4dENvbG9yPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40NywzLjg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMUgx'@;
put 'OGExLjQ1LDEuNDUsMCwwLDAtMS40MiwxTDguNDIsMjEuNTZhMS4zNSwxLjM1LDAsMCwwLS4xNC41OSwxLDEsMCwwLDAsMSwxLDEuMTEsMS4xMSwwLDAsMCwxLjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4'@;
put 'LTEuMDgsMS41OSwxLjU5LDAsMCwwLS4xNC0uNTdaTTEzLjM2LDE1LjcxLDE4LDUuNDlsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNC4wNiIgeT0iMjUiIHdpZHRoPSIyOCIgaGVpZ2h0PSI4IiByeD0iMiIgcnk9'@;
put 'IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksXy5DbHJTaGFwZUhpZ2hsaWdodGVyPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNS44MiwyNi4wNmExLDEsMCwwLDEtLjcxLS4yOUw4LjY3LDE5LjMzYTEsMSwwLDAsMS0uMjktLjcxLDEsMSww'@;
put 'LDAsMSwuMjktLjcxTDIzLDMuNTRhNS41NSw1LjU1LDAsMSwxLDcuODUsNy44NkwxNi41MywyNS43N0ExLDEsMCwwLDEsMTUuODIsMjYuMDZabS01LTcuNDQsNSw1TDI5LjQ4LDEwYTMuNTQsMy41NCwwLDAsMCwwLTUsMy42MywzLjYzLDAsMCwwLTUsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC4zOCwyOC4yOEExLDEsMCwwLDEsOS42NywyOEw2LjQ1LDI0Ljc3YTEsMSwwLDAsMS0uMjItMS4wOWwyLjIyLTUuNDRhMSwxLDAsMCwxLDEuNjMtLjMzbDYuNDUsNi40NEExLDEsMCwwLDEsMTYuMiwyNmwtNS40NCwyLjIy'@;
put 'QTEuMzMsMS4zMywwLDAsMSwxMC4zOCwyOC4yOFpNOC4zMywyMy44MmwyLjI5LDIuMjgsMy40My0xLjRMOS43NCwyMC4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik04Ljk0LDMwaC01YTEsMSwwLDAsMS0uODQtMS41NWwzLjIy'@;
put 'LTQuOTRhMSwxLDAsMCwxLDEuNTUtLjE2bDMuMjEsMy4yMmExLDEsMCwwLDEsLjA2LDEuMzVMOS43LDI5LjY0QTEsMSwwLDAsMSw4Ljk0LDMwWk01Ljc4LDI4SDguNDdMOSwyNy4zNGwtMS43LTEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxy'@;
put 'ZWN0IHg9IjMuMDYiIHk9IjMxIiB3aWR0aD0iMzAiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz4nKSxfLkNsclNoYXBlT3V0ZGVudD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmEx'@;
put 'LDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu'@;
put 'ICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNOS41Niwy'@;
put 'Mi41NGExLDEsMCwwLDEtLjctLjNMNC42MSwxOGw0LjI1LTQuMjRhMSwxLDAsMCwxLDEuNDEsMS40MUw3LjQ0LDE4bDIuODMsMi44M2ExLDEsMCwwLDEtLjcxLDEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLF8uQ2xyU2hhcGVJbmRlbnQ9KDAs'@;
put 'eS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwx'@;
put 'LDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0'@;
put 'aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTUuNTYsMjIuNTRhMSwxLDAsMCwxLS43LTEuNzFMNy42OCwxOCw0Ljg2LDE1LjE3YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMEwxMC41MSwxOCw2LjI3LDIyLjI0QTEsMSwwLDAsMSw1LjU2'@;
put 'LDIyLjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxfLkNsclNoYXBlU3RyaWtldGhyb3VnaD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuODgsMTkuOTJoLTMwYTEsMSwwLDEsMSwwLTJoMzBhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjI3LDE1Ljg2YTEyLjksMTIuOSwwLDAsMSwxLjI5LS41MkE1LjY5LDUuNjksMCwwLDEsMTAuMzksMTVhMy4xOCwzLjE4LDAsMCwxLDIuNzUsMS4xMUE0LjQ0LDQuNDQsMCwwLDEsMTQsMTguODV2LjQ5'@;
put 'YTEzLjgzLDEzLjgzLDAsMCwwLTQuMjktLjc0LDYuMTksNi4xOSwwLDAsMC0yLjU5LjU0QTUsNSwwLDAsMCw1LjgxLDIwSDE1Ljg4VjE4Ljg1YTUuNjcsNS42NywwLDAsMC0xLjM3LTQsNS4xNiw1LjE2LDAsMCwwLTQtMS40OSwxMCwxMCwwLDAsMC0zLjkxLjg4Ljg3Ljg3LDAsMCwwLS40NCwx'@;
put 'LjE4QS44NC44NCwwLDAsMCw3LjI3LDE1Ljg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIxLDIwYTUuOTQsNS45NCwwLDAsMSwuNTQtMi4zMSw0LjM1LDQuMzUsMCwwLDEsMS41OC0xLjgzLDQuMjcsNC4yNywwLDAsMSw0LjU5'@;
put 'LDAsNC40Nyw0LjQ3LDAsMCwxLDEuNTcsMS44M0E2LjEyLDYuMTIsMCwwLDEsMjkuODUsMjBoMmE3LjczLDcuNzMsMCwwLDAtLjc4LTMuMTksNiw2LDAsMCwwLTIuMTgtMi40NSw1Ljc0LDUuNzQsMCwwLDAtMy4xLS44OCw1LjM5LDUuMzksMCwwLDAtMi44LjczLDUuNTUsNS41NSwwLDAsMC0y'@;
put 'LDIuMDVWMTBhLjg3Ljg3LDAsMCwwLS44Ni0uODZIMjBhLjg3Ljg3LDAsMCwwLS44Ni44NlYyMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0yOS42NywyMmE1LjYxLDUuNjEsMCwwLDEtLjM2LDEuMDcsNC40Nyw0LjQ3LDAsMCwx'@;
put 'LTEuNTcsMS44NSw0LjMyLDQuMzIsMCwwLDEtNC41OSwwLDQuMzUsNC4zNSwwLDAsMS0xLjU4LTEuODVBNS42NCw1LjY0LDAsMCwxLDIxLjIsMjJIMTkuMDl2NC4xM0EuODcuODcsMCwwLDAsMjAsMjdoLjJhLjg3Ljg3LDAsMCwwLC44Ni0uODZWMjQuNTFhNS41OCw1LjU4LDAsMCwwLDIsMi4w'@;
put 'Niw1LjQ4LDUuNDgsMCwwLDAsMi44LjcyLDUuNjYsNS42NiwwLDAsMCwzLjEtLjg4QTUuODgsNS44OCwwLDAsMCwzMS4wOSwyNCw3LjA5LDcuMDksMCwwLDAsMzEuNzMsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTQsMjJ2'@;
put 'Ljc2YTMuMzQsMy4zNCwwLDAsMS0xLjYyLDIsNS4zNCw1LjM0LDAsMCwxLTIuNjkuNzIsMy43OCwzLjc4LDAsMCwxLTIuMzYtLjcsMi4yNCwyLjI0LDAsMCwxLS45NC0xLjksMi4yOSwyLjI5LDAsMCwxLC4yLS45MUg0LjYyYTQsNCwwLDAsMC0uMTMsMSwzLjgzLDMuODMsMCwwLDAsMS4zNSwz'@;
put 'LjA2QTUuMTUsNS4xNSwwLDAsMCw5LjMxLDI3LjIsNiw2LDAsMCwwLDEyLDI2LjU3YTQuNjIsNC42MiwwLDAsMCwyLTEuNzRWMjZhLjg2Ljg2LDAsMCwwLC44Ni44NkgxNWEuODYuODYsMCwwLDAsLjg2LS44NlYyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01'@;
put 'Ii8+JyksXy5DbHJTaGFwZVN1YnNjcmlwdD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNTUsMThsNi44LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0TDEzLDE5LjkxLDYuNiwyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4x'@;
put 'NywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNTUsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjloMEExLjE3LDEuMTcsMCwwLDEsNi42Myw4bDYuNDQsOC4xM0wxOS41LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMywzMS44LDI3LjQ5LDI4YTkuOSw5LjksMCwwLDAsMS44OC0yLjA1QTMuNDQsMy40NCwwLDAsMCwzMCwyNGEyLjM1LDIuMzUsMCwwLDAtLjM1LTEuMjcsMi40NCwyLjQ0LDAsMCwwLTEtLjg0LDIuOSwy'@;
put 'LjksMCwwLDAtMS4yNi0uMjgsMy4zNiwzLjM2LDAsMCwwLTEuODMuNSw1LjY0LDUuNjQsMCwwLDAtMS40OCwxLjQybC0xLS44MWE1LjExLDUuMTEsMCwwLDEsNC4zNi0yLjM3LDQuMzUsNC4zNSwwLDAsMSwyLC40NSwzLjQzLDMuNDMsMCwwLDEsMiwzLjE4LDQuNDUsNC40NSwwLDAsMS0uNjgs'@;
put 'Mi4zNSwxMC45LDEwLjksMCwwLDEtMi4yNCwyLjQ2bC0zLjI0LDIuODFIMzEuNVYzM0gyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksXy5DbHJTaGFwZVN1cGVyc2NyaXB0PSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40MywxOGw2Ljc5'@;
put 'LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0bC02LjQ0LTguMTNMNi40NywyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNDMsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjlo'@;
put 'MEExLjIsMS4yLDAsMCwxLDYuNTEsOGw2LjQzLDguMTNMMTkuMzgsOGExLjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLjg1LDE0LjQ3bDQu'@;
put 'NTEtMy44NWE5LjM3LDkuMzcsMCwwLDAsMS44OC0yLDMuNDMsMy40MywwLDAsMCwuNTktMS44NiwyLjI3LDIuMjcsMCwwLDAtLjM2LTEuMjcsMi4zOCwyLjM4LDAsMCwwLS45NS0uODMsMi43NywyLjc3LDAsMCwwLTEuMjYtLjI5LDMuMzksMy4zOSwwLDAsMC0xLjgzLjUsNS44Myw1LjgzLDAs'@;
put 'MCwwLTEuNDksMS40MmwtMS0uODFhNS4xMiw1LjEyLDAsMCwxLDQuMzYtMi4zNyw0LjM2LDQuMzYsMCwwLDEsMiwuNDUsMy40NywzLjQ3LDAsMCwxLDIsMy4xOEE0LjQ0LDQuNDQsMCwwLDEsMzAuNTgsOWExMS4xNCwxMS4xNCwwLDAsMS0yLjI0LDIuNDZMMjUuMSwxNC4zMWg2LjI4djEuMzNI'@;
put 'MjIuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLF8uVGV4dEVkaXRTaGFwZXM9e2JvbGQ6Xy5DbHJTaGFwZUJvbGQsImJ1bGxldC1saXN0IjpfLkNsclNoYXBlQnVsbGV0TGlzdCwiY2hlY2tib3gtbGlzdCI6Xy5DbHJTaGFwZUNoZWNrYm94TGlz'@;
put 'dCwibnVtYmVyLWxpc3QiOl8uQ2xyU2hhcGVOdW1iZXJMaXN0LCJmb250LXNpemUiOl8uQ2xyU2hhcGVGb250U2l6ZSxpdGFsaWM6Xy5DbHJTaGFwZUl0YWxpYywianVzdGlmeS10ZXh0IjpfLkNsclNoYXBlSnVzdGlmeVRleHQsImNlbnRlci10ZXh0IjpfLkNsclNoYXBlQ2VudGVyVGV4dCwi'@;
put 'YWxpZ24tbGVmdC10ZXh0IjpfLkNsclNoYXBlQWxpZ25MZWZ0VGV4dCwiYWxpZ24tcmlnaHQtdGV4dCI6Xy5DbHJTaGFwZUFsaWduUmlnaHRUZXh0LCJwYWludC1yb2xsZXIiOl8uQ2xyU2hhcGVQYWludFJvbGxlciwiYmxvY2stcXVvdGUiOl8uQ2xyU2hhcGVCbG9ja1F1b3RlLHRleHQ6Xy5D'@;
put 'bHJTaGFwZVRleHQsdW5kZXJsaW5lOl8uQ2xyU2hhcGVVbmRlcmxpbmUsImFsaWduLWNlbnRlciI6Xy5DbHJTaGFwZUFsaWduQ2VudGVyLCJhbGlnbi1sZWZ0IjpfLkNsclNoYXBlQWxpZ25MZWZ0LCJhbGlnbi1yaWdodCI6Xy5DbHJTaGFwZUFsaWduUmlnaHQsImFsaWduLWJvdHRvbSI6Xy5D'@;
put 'bHJTaGFwZUFsaWduQm90dG9tLCJhbGlnbi1taWRkbGUiOl8uQ2xyU2hhcGVBbGlnbk1pZGRsZSwiYWxpZ24tdG9wIjpfLkNsclNoYXBlQWxpZ25Ub3AsbGFuZ3VhZ2U6Xy5DbHJTaGFwZUxhbmd1YWdlLCJ0ZXh0LWNvbG9yIjpfLkNsclNoYXBlVGV4dENvbG9yLGhpZ2hsaWdodGVyOl8uQ2xy'@;
put 'U2hhcGVIaWdobGlnaHRlcixpbmRlbnQ6Xy5DbHJTaGFwZUluZGVudCxvdXRkZW50Ol8uQ2xyU2hhcGVPdXRkZW50LHN0cmlrZXRocm91Z2g6Xy5DbHJTaGFwZVN0cmlrZXRocm91Z2gsc3Vic2NyaXB0Ol8uQ2xyU2hhcGVTdWJzY3JpcHQsc3VwZXJzY3JpcHQ6Xy5DbHJTaGFwZVN1cGVyc2Ny'@;
put 'aXB0fSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoXy5UZXh0RWRpdFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyI6Ci8qISoqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihxLF8sSSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfLlRyYXZlbFNoYXBlcz1fLkNsclNoYXBlT25I'@;
put 'b2xpZGF5PV8uQ2xyU2hhcGVUcmFpbGVyPV8uQ2xyU2hhcGVGZXJyeT1fLkNsclNoYXBlQ2FyYXZhbj1fLkNsclNoYXBlQ2FtcGVydmFuPV8uQ2xyU2hhcGVCb2F0PV8uQ2xyU2hhcGVCaWN5Y2xlPV8uQ2xyU2hhcGVNYXBNYXJrZXI9Xy5DbHJTaGFwZUNvbXBhc3M9Xy5DbHJTaGFwZU1hcD1f'@;
put 'LkNsclNoYXBlQ2FyPV8uQ2xyU2hhcGVBaXJwbGFuZT1fLkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciB5PUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGls'@;
put 'cy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtfLkNsclNoYXBlVHJ1Y2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwx'@;
put 'MkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjE5LjdhNi40NSw2LjQ1LDAsMCwxLDEuNTYtLjJjLjE1LDAsLjI5LDAsLjQ0LDBWMTRoNGEyLDIsMCwwLDEsMiwydjFIMjh2Mmg0djVIMjkuNmE0LjU0LDQuNTQsMCwwLDAtOC4zNCww'@;
put 'SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ5LDQuNDksMCwwLDAsOC45MiwwSDMzYTEsMSwwLDAsMCwxLTFWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgsMCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEs'@;
put 'MSwwLDQuNzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIuNS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MywyOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxMkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEs'@;
put 'MCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjIxLjQ5QTQuNDUsNC40NSwwLDAsMCwyMS4yNSwyNEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZIMjFhNC40OCw0LjQ4LDAsMCwwLDguOTEsMEgzNFYxNkE0LDQsMCwwLDAsMzAs'@;
put 'MTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcsMGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQyLDI4Wk0zMiwxN0gyNlYxNGg0YTIsMiwwLDAsMSwyLDJaIi8+JyksXy5DbHJTaGFwZUFp'@;
put 'cnBsYW5lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuNzcsOC4xNmEyLjQzLDIuNDMsMCwwLDAtMS45LTJMMjgsNC44N2E0LjUsNC41LDAsMCwwLTMuNjUuNzlMNywxOC4zLDIuMTQsMTguMUExLjg2LDEu'@;
put 'ODYsMCwwLDAsLjkxLDIxLjQxbDUsMy45M2MuNi43MywxLC41OSwxMC45My00LjgybC45Myw5LjQyYTEuMzYsMS4zNiwwLDAsMCwuODUsMS4xOCwxLjQzLDEuNDMsMCwwLDAsLjU0LjEsMS41NCwxLjU0LDAsMCwwLDEtLjQxbDIuMzktMi4xOGExLjUyLDEuNTIsMCwwLDAsLjQ2LS44M0wyNS4y'@;
put 'LDE1LjljMy41Ny0yLDYuOTUtMy44OCw5LjM2LTUuMjVBMi40MywyLjQzLDAsMCwwLDM1Ljc3LDguMTZabS0yLjIuNzVjLTIuNSwxLjQyLTYsMy40MS05Ljc2LDUuNDdsLS40MS4yM0wyMS4wNywyNy4yOGwtMS40NywxLjM0TDE4LjUsMTcuMzIsMTcuMTcsMThDMTAsMjIsNy42MSwyMy4xNiw2'@;
put 'Ljc5LDIzLjUybC00LjMtMy40MSw1LjA4LjIyLDE4LTEzLjA2YTIuNTEsMi41MSwwLDAsMSwyLS40NWw1Ljg1LDEuMjZhLjQzLjQzLDAsMCwxLC4zNS4zN0EuNDIuNDIsMCwwLDEsMzMuNTcsOC45MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiBkPSJNNywxMi41NGwzLjU2LDEsMS42NC0xLjE5LTQtMS4xNkwxMCwxMC4wOWw1LjQ3LS4xNiwyLjMtMS42N0wxMCw4LjVhMS4yNSwxLjI1LDAsMCwwLS43LjE3TDYuNjcsMTAuMkExLjI4LDEuMjgsMCwwLDAsNywxMi41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LjI1LDExLjUsMTIsMTMuMTZsNi4zMi00LjU5LTkuMDcuMjZBLjUyLjUyLDAsMCwwLDksOC45MUw2LjEzLDEwLjU2QS41MS41MSwwLDAsMCw2LjI1LDExLjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzQuNTIsNi4zNiwyOC4yMiw1YTMuNzgsMy43OCwwLDAsMC0zLjA3LjY3TDYuMTIsMTkuNWwtNC41Ny0uMmExLjI1LDEuMjUsMCwwLDAtLjgzLDIuMjJsNC40NSwzLjUzYS41NS41NSwwLDAsMCwuNTMuMDljMS4yNy0uNDksNi0zLDEx'@;
put 'LjU5LTYuMDdsMS4xMiwxMS41MWEuNTUuNTUsMCwwLDAsLjkuMzdsMi41LTIuMDhhLjc2Ljc2LDAsMCwwLC4yNi0uNDVsMi4zNy0xMy4yOWM0LTIuMjIsNy44Mi00LjM3LDEwLjUxLTUuODlBMS41NSwxLjU1LDAsMCwwLDM0LjUyLDYuMzZaIi8+JyksXy5DbHJTaGFwZUNhcj0oMCxnLmNscklj'@;
put 'b25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMyIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0y'@;
put 'Ni40NSwxNC4xN0EyMi4xLDIyLjEsMCwwLDAsMTkuMzgsN2E5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDctLjE0LjkyLS4yLDEuMzZBNCw0LDAsMCwwLDIsMTh2Ni4xM2EyLDIsMCwwLDAsMiwyVjIwSDRWMThhMiwyLDAsMCwxLDItMkgyNC43M0E3'@;
put 'LjI4LDcuMjgsMCwwLDEsMzIsMjMuMjdWMjRoLTJhNC41Myw0LjUzLDAsMSwwLC4zMywySDMyYTIsMiwwLDAsMCwyLTJ2LS43M0E5LjI4LDkuMjgsMCwwLDAsMjYuNDUsMTQuMTdaTTExLDE0SDYuOTNjMC0uMzEuMDktLjYzLjE1LTFBNi41Miw2LjUyLDAsMCwxLDExLDhoMFptMiwwVjcuNThh'@;
put 'OC4xNyw4LjE3LDAsMCwxLDUuMzYsMS4xNkExOSwxOSwwLDAsMSwyMy45LDE0Wk0yNS44LDI4LjM4YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI1LjgsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMiIGQ9Ik0xNC4xNywyNGE0LjUzLDQuNTMsMCwxLDAsLjMzLDJoNS4zYzAtLjA4LDAtLjE3LDAtLjI1QTYsNiwwLDAsMSwyMCwyNFpNMTAsMjguMzhhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAsMjguMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2Ljg3LDE0LjI4QTIyLjM2LDIyLjM2LDAsMCwwLDE5LjY1LDYuOWE5LjY0LDkuNjQsMCwwLDAtOS0uNyw4LjYsOC42LDAsMCwwLTQuODIsNi40Yy0uMDguNDktLjE1LDEtLjIxLDEuNGgtMUEyLjU5LDIuNTksMCww'@;
put 'LDAsMiwxNi41OXY4LjU1YS44Ni44NiwwLDAsMCwuODYuODZINC41OWMwLS4xMywwLS4yNiwwLS4zOWE1Ljc3LDUuNzcsMCwwLDEsNy43MS01LjQ1bC0xLDFhNC41Niw0LjU2LDAsMCwwLTQuMzQsMS41OCwzLDMsMCwwLDAtLjYzLjkzQTQuNSw0LjUsMCwxLDAsMTQuODIsMjZoNS40OGMwLS4x'@;
put 'MywwLS4yNiwwLS4zOUE1Ljc3LDUuNzcsMCwwLDEsMjgsMjAuMTZsLTEsMWE0LjU2LDQuNTYsMCwwLDAtNC4zNCwxLjU4LDMsMywwLDAsMC0uNjMuOTNBNC41LDQuNSwwLDEsMCwzMC41MywyNmgyLjYxYS44Ni44NiwwLDAsMCwuODYtLjg2VjIzLjM2QTkuMzksOS4zOSwwLDAsMCwyNi44Nywx'@;
put 'NC4yOFpNMTIsMTRIOGMwLS4zNS4xLS43MS4xNi0xLjA3YTYuNTIsNi41MiwwLDAsMSwzLjg3LTVoMFpNMTAuMzYsMjguMzZhMi41LDIuNSwwLDEsMSwyLjUtMi41QTIuNSwyLjUsMCwwLDEsMTAuMzYsMjguMzZaTTE5LDE5SDE2VjE3aDNabS02LTVWNy40N2E4LjE2LDguMTYsMCwwLDEsNS40'@;
put 'LDEuMTVBMTkuMTUsMTkuMTUsMCwwLDEsMjQsMTRaTTI2LjA2LDI4LjM2YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI2LjA2LDI4LjM2WiIvPicpLF8uQ2xyU2hhcGVNYXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMy41OSw2LjE5QTEsMSwwLDAsMCwzMi43LDZMMjMuMDksOSwxMy40Niw0LjExYTEsMSwwLDAsMC0uODQsMEwyLjYyLDguMkExLDEsMCwwLDAsMiw5LjEzVjI5LjYxYTEsMSwwLDAsMCwxLjM4LjkyTDEzLDI2LjU4bDkuNTksNC45MmExLDEsMCwwLDAsLjQ2LjEx'@;
put 'LDEsMSwwLDAsMCwuMywwbDEwLTMuMTJhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMuNTksNi4xOVpNMzIsMjYuNzVsLTguMzIsMi42VjI3LjA2aC0xLjZ2MmwtOC40LTQuMzFWMjMuMDZoLTEuNnYxLjcyTDQsMjguMTFWOS43OWw4LjA4LTMuMzNWOC44MWgxLjZWNi40N2w4LjQsNC4z'@;
put 'djIuMWgxLjZWMTFMMzIsOC4zNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjIuMDgiIHk9IjE1LjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjIuMDgiIHk9IjIxLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTIuMDgiIHk9'@;
put 'IjExLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTIuMDgiIHk9IjE3LjEzIiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuNzUiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMuMzEsNy4zNSwyNSw5Ljk0VjE0SDIzVjEwLjI5TDE0LDUuNjhWOUgxMlY1LjI3bC05LjY3LDRBLjUzLjUzLDAsMCwwLDIsOS43NVYzMC40NWEuNTMuNTMsMCwwLDAsLjc0LjQ5TDEyLDI3LjEyVjIz'@;
put 'aDJ2NC41M2w5LDQuNjFWMjhoMnYzLjc5bDguNjMtMi43YS41My41MywwLDAsMCwuMzctLjUxVjcuODZBLjUzLjUzLDAsMCwwLDMzLjMxLDcuMzVaTTE0LDIxSDEyVjE3aDJabTAtNkgxMlYxMWgyWk0yNSwyNkgyM1YyMmgyWm0wLTZIMjNWMTZoMloiLz4nKSxfLkNsclNoYXBlQ29tcGFzcz0o'@;
put 'MCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuODIsMTUuMzFoMEwxMC40Niw5Yy0uNDYtLjI2LTEuMTEuMzctLjg2Ljg0bDYuMTUsMTAuNTYsMTAuNTYsNi4xNWEuNjYuNjYsMCwwLDAsLjg0LS44NlptLTQsNCwzLTMsNC41NSw3LjQ0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0xLDI5Ljk1VjI5LjUzSDE3djIuNDJBMTQsMTQsMCwwLDEsNC4wNSwxOUg2LjQ3VjE3SDQuMDVBMTQsMTQsMCwwLDEsMTcsNC4wNVY2LjQ3aDJW'@;
put 'NC4wNUExNCwxNCwwLDAsMSwzMS45NSwxN0gyOS41M3YyaDIuNDJBMTQsMTQsMCwwLDEsMTksMzEuOTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww'@;
put 'LDE4LDJaTTYuNDcsMTlINC4wNWMwLS4zMy0uMDUtLjY2LS4wNS0xczAtLjY3LjA1LTFINi40N1pNMTcsNC4wNWMuMzMsMCwuNjYtLjA1LDEtLjA1cy42NywwLDEsLjA1VjYuNDdIMTdabTIsMjcuOWMtLjMzLDAtLjY2LjA1LTEsLjA1cy0uNjcsMC0xLS4wNVYyOS41M2gyWm04LTUuNThhLjU5'@;
put 'LjU5LDAsMCwxLS42OS4xNkwxNS43NSwyMC4zOCw5LjYsOS44MmMtLjI1LS40Ny4zOS0xLjEuODYtLjg0bDEwLjM3LDYuMzNoMGw2LjMzLDEwLjM3QS41OS41OSwwLDAsMSwyNywyNi4zN1pNMjkuNTMsMTlWMTdoMi40MmMwLC4zMy4wNS42Ni4wNSwxczAsLjY3LS4wNSwxWiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTYuNzcgMTkuMzUgMjQuMzUgMjMuNzcgMTkuOCAxNi4zMyAxNi43NyAxOS4zNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBl'@;
put 'TWFwTWFya2VyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMu'@;
put 'NzMtMy43M0EzLjczLDMuNzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTExLjc5LDExLjc5LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDEx'@;
put 'LjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJBMTEuNzksMTEuNzksMCwwLDAsMTgsMlpNMjMuNTksMjRsLS4zNi41M2MtMS43MiwyLjU4'@;
put 'LTQsNS40Ny01LjIzLDYuOS0xLjE4LTEuNDMtMy41MS00LjMyLTUuMjMtNi45TDEyLjQyLDI0Yy0xLjc3LTIuNjQtNC4yLTYuMjUtNC4yLTEwLjMxYTkuNzgsOS43OCwwLDEsMSwxOS41NiwwQzI3Ljc4LDE3Ljc5LDI1LjM2LDIxLjQsMjMuNTksMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsNi43MmE1LjczLDUuNzMsMCwxLDAsNS43Myw1LjczQTUuNzMsNS43MywwLDAsMCwxOCw2LjcyWm0wLDkuNDZhMy43MywzLjczLDAsMSwxLDMuNzMtMy43M0EzLjczLDMu'@;
put 'NzMsMCwwLDEsMTgsMTYuMTdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMjkuNzcsMTMuNDlhNy40OSw3LjQ5LDAsMCwxLTItLjMzYzAsLjE5LDAsLjM4LDAsLjU3LDAsNC4w'@;
put 'Ni0yLjQyLDcuNjctNC4xOSwxMC4zMWwtLjM2LjUzYy0xLjcyLDIuNTgtNCw1LjQ3LTUuMjMsNi45LTEuMTgtMS40My0zLjUxLTQuMzItNS4yMy02LjlMMTIuNDIsMjRjLTEuNzctMi42NC00LjItNi4yNS00LjItMTAuMzFBOS43Nyw5Ljc3LDAsMCwxLDIyLjU2LDUuMDlhNy40NSw3LjQ1LDAs'@;
put 'MCwxLC41Mi0yQTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1'@;
put 'LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9'@;
put 'IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExMS43OSwxMS43OSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4'@;
put 'bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQTExLjc5LDExLjc5LDAsMCwwLDE4LDJabTAsMTdhNi41Niw2LjU2LDAsMSwxLDYuNTYtNi41NkE2LjU2LDYuNTYsMCwwLDEsMTgsMTlaIi8+XG4gICAg'@;
put 'ICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBjeD0iMTgiIGN5PSIxMi40NCIgcj0iMy43MyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2Vk'@;
put 'IiBkPSJNMjkuNzcsMTMuNDlBNy40Nyw3LjQ3LDAsMCwxLDI0LjM4LDExYTYuNTgsNi41OCwwLDEsMS0xLjYxLTMsNy40Miw3LjQyLDAsMCwxLC4zMS00Ljg0QTExLjc1LDExLjc1LDAsMCwwLDYuMjIsMTMuNzNjMCw0LjY3LDIuNjIsOC41OCw0LjU0LDExLjQzbC4zNS41MmE5OS42MSw5OS42'@;
put 'MSwwLDAsMCw2LjE0LDhsLjc2Ljg5Ljc2LS44OWE5OS44Miw5OS44MiwwLDAsMCw2LjE0LThsLjM1LS41M2MxLjkxLTIuODUsNC41My02Ljc1LDQuNTMtMTEuNDJDMjkuNzgsMTMuNjUsMjkuNzcsMTMuNTcsMjkuNzcsMTMuNDlaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgY3g9IjE4IiBjeT0iMTIuNDQiIHI9IjMuNzMiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJh'@;
put 'ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksXy5DbHJTaGFwZUJpY3ljbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTguNSwyOS42NUE2LjUxLDYuNTEsMCwwLDEsMiwyMy4xNWE2LjM5LDYuMzksMCwwLDEsNi41LTYuMzZBNi4zOSw2LjM5LDAsMCwxLDE1LDIzLjE1LDYuNTEs'@;
put 'Ni41MSwwLDAsMSw4LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCw4LjUsMTguNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjcuNSwyOS42NWE2LjUxLDYuNTEsMCwwLDEtNi41LTYu'@;
put 'NSw2LjUsNi41LDAsMCwxLDEzLDBBNi41MSw2LjUxLDAsMCwxLDI3LjUsMjkuNjVabTAtMTFhNC41LDQuNSwwLDEsMCw0LjUsNC41QTQuNTEsNC41MSwwLDAsMCwyNy41LDE4LjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE5LDI0'@;
put 'LjY2SDhhMSwxLDAsMCwxLS44OS0xLjQ1bDUtMTAsMS43OC45TDkuNjIsMjIuNzNIMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cmVjdCB4PSIxMyIgeT0iMTIuNjgiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjkxIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjgsMjQuNjZhMSwxLDAsMCwxLS45NC0uNjZMMjIuMjksMTAuNjZIMjBhMSwxLDAsMCwxLTEtMSwxLDEsMCwwLDEsMS0uOTNoM2EuOTQuOTQsMCwwLDEsLjk0LjZsNSwxNGExLDEsMCwwLDEtLjYsMS4yN0ExLDEsMCwwLDEsMjgs'@;
put 'MjQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTMsMTQuNjZhMSwxLDAsMCwxLS43MS0uMjlsLTEuNy0xLjcxSDhhMSwxLDAsMCwxLTEtMSwuOTQuOTQsMCwwLDEsMS0xaDNhMS4wOCwxLjA4LDAsMCwxLC43NS4yN2wyLDJhMSwx'@;
put 'LDAsMCwxLDAsMS40MUExLDEsMCwwLDEsMTMsMTQuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMTUsMjEuOWMtMC4yLTItMS4yLTMuOC0yLjktNC45bC0yLjUsNC45SDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIgLz48cGF0aCBkPSJNNy4yLDIzLjRjLTAuMi0wLjMtMC4yLTAuNywwLTFsMy4yLTYuM2MtMC42LTAuMi0xLjItMC4yLTEuOC0wLjJDNSwxNS45LDIsMTguOCwyLDIyLjRjMCwzLjYsMi45LDYuNSw2LjUsNi41XG5cdGMzLDAsNS42LTIuMSw2LjMtNUg4QzcuNywyMy45LDcuMywy'@;
put 'My43LDcuMiwyMy40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTksMjEuOWgtNGMwLDAuMiwwLDAuMywwLDAuNWMwLDAuNS0wLjEsMS0wLjIsMS41SDE5VjIxLjl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAv'@;
put 'PjxwYXRoIGQ9Ik0yNy41LDE1LjljLTAuMywwLTAuNiwwLTAuOSwwLjFsMi40LDYuNmMwLjIsMC41LTAuMSwxLjEtMC42LDEuM2MtMC4xLDAtMC4yLDAuMS0wLjMsMC4xYy0wLjQsMC0wLjgtMC4zLTAuOS0wLjdsLTIuNC02Ljdcblx0Yy0zLjIsMS42LTQuNSw1LjUtMyw4LjdjMS42LDMuMiw1'@;
put 'LjUsNC41LDguNywzYzMuMi0xLjYsNC41LTUuNSwzLTguN0MzMi4yLDE3LjMsMzAsMTUuOSwyNy41LDE1Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNC43LDE2LjdjMC42LTAuMywxLjMtMC41LDEuOS0wLjZsLTIuNy03LjRDMjMuOCw4'@;
put 'LjIsMjMuNCw4LDIzLDcuOWgtM2MtMC42LDAtMSwwLjUtMSwxLjFjMCwwLjUsMC40LDAuOSwxLDAuOVxuXHRjMCwwLDAsMCwwLDBoMi4zbDAuNywyaC05LjZsLTEuNy0xLjdDMTEuNSwxMC4xLDExLjMsMTAsMTEsMTBIOGMtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWgyLjZsMS4yLDEuMmwt'@;
put 'MS41LDNcblx0YzAuNiwwLjIsMS4zLDAuNSwxLjgsMC44bDEuNi0zLjJoMTBMMjQuNywxNi43eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxfLkNsclNoYXBlQm9hdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuMSwyNy4xQzI4LDI3LDI2Ljks'@;
put 'MjcuNCwyNiwyOC4yYy0xLjEsMS4xLTIuOSwxLjEtNC4xLDBjLTEtMC43LTIuMS0xLjEtMy4zLTEuMWMtMS4yLTAuMS0yLjQsMC4zLTMuMywxLjFcblx0XHRDMTQuNywyOC43LDE0LDI5LDEzLjIsMjlzLTEuNS0wLjMtMi4xLTAuOGMtMS0wLjgtMi4yLTEuMi0zLjQtMS4ycy0yLjQsMC40LTMu'@;
put 'NCwxLjJDMy43LDI4LjcsMi44LDI5LDIsMjl2MlxuXHRcdGMxLjMsMC4xLDIuNi0wLjMsMy42LTEuMkM2LjIsMjkuMyw3LjEsMjksNy45LDI5YzAuNywwLDEuNSwwLjMsMi4xLDAuOGMxLjgsMS42LDQuNiwxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhcblx0XHRjMC43LDAsMS40'@;
put 'LDAuMywyLDAuOGMxLjksMS42LDQuNiwxLjYsNi41LDBjMC41LTAuNSwxLjMtMC44LDItMC44YzAuNywwLDEuNCwwLjMsMS45LDAuOGMwLjksMC43LDEuOSwxLjEsMywxLjJ2LTJcblx0XHRjLTEsMC0xLjItMC40LTEuNy0wLjhDMzEuNCwyNy41LDMwLjMsMjcuMSwyOS4xLDI3LjF6IiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyM2MwLTAuNiwwLjUtMSwxLjEtMUgzMmwtMy41LDMuMWgwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4yLTAuMmMwLjctMC44LDAuNi0yLjEtMC4yLTIuOFxuXHRcdEMzMywyMC4y'@;
put 'LDMyLjYsMjAsMzIuMSwyMGgtMjVjLTEuNywwLTMsMS4zLTMsM3YzLjJjMC41LTAuNSwxLjItMC44LDEuOS0xLjFWMjN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOC45LDE5SDE1di03LjhjMC0wLjYtMC4zLTEuMi0wLjgtMS42QzEz'@;
put 'LjMsOC45LDEyLDkuMSwxMS40LDEwbC00LjEsNS45Yy0wLjQsMC42LTAuNCwxLjQtMC4xLDIuMUM3LjUsMTguNiw4LjIsMTksOC45LDE5XG5cdFx0eiBNMTMuMSwxMS4yTDEzLDE3SDguOUwxMy4xLDExLjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48'@;
put 'cGF0aCBkPSJNMjYsMThjMC40LTAuNiwwLjQtMS40LDAtMkwxOS43LDUuNmMtMC40LTAuNi0xLTEtMS43LTFjLTEuMSwwLTIsMC45LTIsMlYxOWg4LjNDMjUsMTksMjUuNywxOC42LDI2LDE4eiBNMTcuOSw2LjZcblx0XHRsNi40LDEwLjVoLTYuNFY2LjZ6IiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzQsMzFjLTEuMS0wLjEtMi4xLTAuNS0zLTEuMmMtMC41LTAuNS0xLjItMC44LTItMC44Yy0wLjcsMC0xLjUsMC4zLTIsMC44Yy0wLjksMC44LTIsMS4xLTMuMSwxLjFjLTEuMiwwLTIuNC0wLjQtMy4zLTEuMVxuXHRjLTEuMi0x'@;
put 'LjEtMy0xLjEtNC4xLDBjLTAuOSwwLjgtMi4xLDEuMi0zLjQsMS4yYy0xLjIsMC0yLjMtMC40LTMuMi0xLjJjLTAuNi0wLjUtMS4zLTAuOC0yLTAuOGMtMC44LDAtMS43LDAuMy0yLjMsMC44XG5cdGMtMSwwLjgtMi4zLDEuMi0zLjUsMS4xVjI5YzAuOCwwLDEuNy0wLjMsMi4zLTAuOWMxLTAu'@;
put 'OCwyLjItMS4yLDMuNC0xLjFjMS4yLDAsMi40LDAuNCwzLjMsMS4yYzEuMiwxLjEsMywxLjEsNC4yLDBcblx0YzEuOS0xLjYsNC43LTEuNiw2LjUsMGMxLjIsMS4xLDMsMS4xLDQuMSwwYzAuOS0wLjgsMi4xLTEuMiwzLjMtMS4yYzEuMSwwLDIuMiwwLjQsMywxLjJDMzIuOCwyOC43LDMzLDI5'@;
put 'LDM0LDI5TDM0LDMxeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNC4xLDI2LjJjMC42LTAuNSwxLjItMC44LDEuOS0xVjIzYzAtMC42LDAuNC0xLjEsMS0xLjFoMjVMMjguNCwyNWgwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJs'@;
put 'MC4yLTAuMlxuXHRjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhDMzIuOSwyMC4xLDMyLjQsMjAsMzIsMjBIN2MtMS43LDAtMywxLjMtMywzTDQuMSwyNi4yTDQuMSwyNi4yeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMTQuOSwxOC45SDguOWMt'@;
put 'MS4xLDAtMi0wLjktMi0yYzAtMC40LDAuMS0wLjgsMC40LTEuMmw0LjEtNS44YzAuNi0wLjksMS45LTEuMSwyLjgtMC41YzAuNSwwLjQsMC44LDEsMC44LDEuNlYxOC45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuMywxOC45SDE2VjYu'@;
put 'NGMwLTEuMSwwLjktMiwyLTJjMC43LDAsMS4zLDAuNCwxLjcsMUwyNiwxNS44YzAuNiwxLDAuMiwyLjItMC43LDIuN0MyNSwxOC43LDI0LjYsMTguOCwyNC4zLDE4Ljlcblx0TDI0LjMsMTguOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksXy5DbHJTaGFw'@;
put 'ZUNhbXBlcnZhbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNOS41LDI0QzkuNSwyNCw5LjUsMjQsOS41LDI0QzcuNiwyNCw2LDI1LjYsNiwyNy41YzAsMCwwLDAsMCwwQzYsMjkuNCw3LjYsMzEsOS41LDMxYzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMxMS40LDI0LDkuNSwyNHog'@;
put 'TTkuNSwyOUM4LjcsMjksOCwyOC4zLDgsMjcuNVM4LjcsMjYsOS41LDI2czEuNSwwLjcsMS41LDEuNVMxMC4zLDI5LDkuNSwyOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMy41LDI0QzIzLjUsMjQsMjMuNSwyNCwyMy41LDI0Yy0x'@;
put 'LjksMC0zLjUsMS42LTMuNSwzLjVjMCwwLDAsMCwwLDBjMCwxLjksMS41LDMuNSwzLjUsMy41YzEuOSwwLDMuNS0xLjYsMy41LTMuNVxuXHRcdFMyNS40LDI0LDIzLjUsMjR6IE0yMy41LDI5Yy0wLjgsMC0xLjUtMC43LTEuNS0xLjVzMC43LTEuNSwxLjUtMS41czEuNSwwLjcsMS41LDEuNVMy'@;
put 'NC4zLDI5LDIzLjUsMjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzMsMjAuMVYyMGgtMC4xbC0zLjUtNS41QzMxLDEzLjYsMzIsMTIsMzIsMTAuM1Y5LjdDMzIsNy4xLDI5LjksNSwyNy4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00'@;
put 'LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDNcblx0XHR2MTdoMlYxMWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIuN0gyNHY5aDcuOFxuXHRcdGwwLjIsMC4zVjI1'@;
put 'YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0xLjMsMy0zdi0zLjNMMzMsMjAuMXogTTI2LDIwdi01aDEuNWwzLjEsNUgyNnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxyZWN0IHg9IjE5IiB5PSI5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwLDIyIDIyLDIyIDIyLDEzIDE1LDEzIDE1LDI4IDE3LDI4IDE3LDE1IDIwLDE1IFx0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBk'@;
put 'PSJNNiwyMGg3di03SDZWMjB6IE04LDE1aDN2M0g4VjE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTkuNSwyNEM3LjYsMjQsNiwyNS42LDYsMjcuNVM3LjYsMzEsOS41LDMxYzAsMCwwLDAsMCwwYzEuOSwwLDMuNS0xLjYsMy41LTMu'@;
put 'NWMwLDAsMC0wLjEsMC0wLjFDMTMsMjUuNSwxMS40LDI0LDkuNSwyNHoiXG5cdFx0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMjMuNSIgY3k9IjI3LjUiIHI9IjMuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg'@;
put 'Lz48cGF0aCBkPSJNMjkuNSwxNC41QzMxLDEzLjYsMzIsMTIsMzIsMTAuMlY5LjdjMCwwLDAsMCwwLTAuMUMzMiw3LDI5LjksNSwyNy4zLDVoLTguNWMtMS45LDAtMy43LDEuMi00LjQsM0g1Yy0xLjcsMC0zLDEuMy0zLDN2MTdcblx0XHRoMlYxMWMwLTAuNiwwLjQtMSwxLTFoMTAuOUwxNiw5'@;
put 'LjJDMTYuMyw3LjksMTcuNCw3LDE4LjcsN2g4LjVDMjguOCw3LDMwLDguMiwzMCw5Ljd2MC41YzAsMS41LTEuMiwyLjctMi43LDIuN0gyN2gtM3Y5aDcuOFxuXHRcdGwwLjIsMC4zVjI1YzAsMC42LTAuNCwxLTEsMWgtMnYyaDJjMS43LDAsMy0xLjMsMy0zdi0zLjNMMjkuNSwxNC41eiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cmVjdCB4PSIxOSIgeT0iOSIgd2lkdGg9IjcuOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAsMjIgMjEuOSwyMiAyMS45LDEzIDE1LDEz'@;
put 'IDE1LDI4IDE2LjksMjggMTYuOSwxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cmVjdCB4PSI2IiB5PSIxMyIgd2lkdGg9IjYuOSIgaGVpZ2h0PSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLF8uQ2xy'@;
put 'U2hhcGVDYXJhdmFuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMy41LDIxQzExLDIxLDksMjMsOSwyNS41czIsNC41LDQuNSw0LjVjMi41LDAsNC41LTIsNC41LTQuNUMxOCwyMywxNiwyMSwxMy41LDIxeiBNMTMuNSwyOGMtMS40LDAtMi41LTEuMS0yLjUtMi41XG5cdFx0czEuMS0y'@;
put 'LjUsMi41LTIuNXMyLjUsMS4xLDIuNSwyLjVTMTQuOSwyOCwxMy41LDI4eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0ydi03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41'@;
put 'SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0XHRjLTAuNiwwLTEtMC40LTEtMVY5YzAtMC42LDAuNC0xLDEtMWgxOC44YzAuNCwwLDAuNywwLjIsMC45LDAuNWw0LjIsNy41YzAuMSwwLjEsMC4xLDAuMywwLjEsMC41VjI0aC00VjEyaC03djhoMnYtNmgz'@;
put 'djEwaC0zdjJoMTNcblx0XHRjMC42LDAsMS0wLjQsMS0xUzMzLjYsMjQsMzMsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTYsMTJIN3Y2aDlWMTJ6IE0xNCwxNkg5di0yaDVWMTZ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMTMuNSwzMEMxMSwzMCw5LDI4LDksMjUuNXMyLTQuNSw0LjUtNC41czQuNSwyLDQuNSw0LjVDMTgsMjgsMTYsMzAsMTMuNSwzMHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI0aC0y'@;
put 'di03LjVjMC0wLjUtMC4xLTEtMC40LTEuNWwtNC4yLTcuNWMtMC41LTEtMS41LTEuNS0yLjYtMS41SDVDMy4zLDYsMiw3LjMsMiw5djE0YzAsMS43LDEuMywzLDMsM2gydi0ySDVcblx0Yy0wLjYsMC0xLTAuNC0xLTFWOWMwLTAuNiwwLjQtMSwxLTFoMTguOGMwLjQsMCwwLjcsMC4yLDAuOSww'@;
put 'LjVsNC4yLDcuNWMwLjEsMC4xLDAuMSwwLjMsMC4xLDAuNVYyNGgtNFYxMmgtN3Y4aDJ2LTZoM3YxMGgtM3YyaDEzXG5cdGMwLjYsMCwxLTAuNCwxLTFTMzMuNiwyNCwzMywyNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE2LDE4SDd2LTZo'@;
put 'OVYxOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksXy5DbHJTaGFwZUZlcnJ5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwyNS4xYy0xLjIsMC0yLjMsMC40LTMuMywxLjFjMCwwLDAsMCwwLDBjLTEuMSwxLjEtMywxLjEtNC4xLDBjLTAuOS0w'@;
put 'LjgtMi4xLTEuMi0zLjMtMS4yYy0xLjIsMC0yLjMsMC40LTMuMiwxLjJcblx0XHRjLTEuMiwxLjEtMywxLjEtNC4yLDBDMTAsMjUuNCw4LjgsMjUsNy42LDI1Yy0xLjIsMC0yLjQsMC40LTMuNCwxLjFDMy42LDI2LjcsMi44LDI3LDIsMjd2MmMxLjMsMC4xLDIuNS0wLjQsMy40LTEuMlxuXHRc'@;
put 'dEM2LjEsMjcuMyw2LjksMjcsNy43LDI3YzAuOCwwLDEuNSwwLjMsMi4xLDAuOGMxLjksMS42LDQuNywxLjYsNi41LDBjMC42LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS41LDAuMywyLjEsMC44XG5cdFx0YzEuOSwxLjYsNC42LDEuNiw2LjUsMGMwLjUtMC41LDEuMy0wLjgsMi0wLjhj'@;
put 'MC43LDAsMS41LDAuMywyLDAuOGMwLjksMC43LDIsMS4xLDMuMSwxLjJ2LTEuOWMtMC43LDAtMS40LTAuMy0xLjktMC45XG5cdFx0QzMxLjMsMjUuNCwzMC4xLDI1LDI5LDI1LjF6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNS45LDIz'@;
put 'LjJWMjBIMzJsLTMuNSwzaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjItMC4yYzAuNS0wLjYsMC41LTEuNCwwLjItMi4xYy0wLjQtMC43LTEtMS0xLjgtMWgtNC40XG5cdFx0TDIyLjUsMTFIMTdjLTEuNywwLTMsMS4zLTMsM2gtMlY4LjFINnY2LjFjLTEuMiwwLjQtMiwx'@;
put 'LjUtMiwyLjh2MS4xVjIwdjQuM2wwLjEtMC4xQzQuNiwyMy43LDUuMiwyMy40LDUuOSwyMy4yeiBNOCwxMGgydjRIOFYxMHpcblx0XHQgTTYsMTdjMC0wLjYsMC40LTEsMS0xaDl2LTJjMC0wLjYsMC40LTEsMS0xaDVsMC42LDFIMTh2Mmg1LjhsMS4yLDIuMUg2VjE3eiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI4LjIsMjVjLTEuMiwwLTIuNCwwLjQtMy4zLDEuMmMtMS4yLDEuMS0zLDEuMS00LjEsMGMtMS45LTEuNi00LjYtMS42LTYuNSwwYy0xLjIsMS4xLTIuOSwxLjEtNC4xLDBcblx0XHRjLTAuOS0wLjgtMi0xLjItMy4y'@;
put 'LTEuMmMtMS4yLDAtMi4zLDAuNC0zLjIsMS4yQzMuNCwyNi43LDIuNywyNywyLDI3djJjMS4xLTAuMSwyLjItMC41LDMuMS0xLjJDNS42LDI3LjMsNi4zLDI3LDcsMjdcblx0XHRjMC43LDAsMS41LDAuMywyLDAuOGMxLjksMS42LDQuNywxLjYsNi42LDBjMC42LTAuNSwxLjMtMC44LDIuMS0w'@;
put 'LjhjMC44LDAsMS41LDAuMywyLjEsMC44YzEuOSwxLjYsNC43LDEuNiw2LjUsMFxuXHRcdGMwLjYtMC41LDEuMy0wLjgsMi4xLTAuOGMwLjgsMCwxLjYsMC4zLDIuMSwwLjhjMC45LDAuOCwyLjIsMS4zLDMuNCwxLjJ2LTJjLTAuOCwwLTEuNi0wLjMtMi4yLTAuOEMzMC43LDI1LjQsMjkuNSwy'@;
put 'NSwyOC4yLDI1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNNS44LDIzLjJ2LTMuM2gyNi4xTDI4LjQsMjNoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMS0wLjJjMC43LTAuOSwwLjUtMi4xLTAuNC0yLjhjLTAuMy0wLjMt'@;
put 'MC44LTAuNC0xLjItMC40XG5cdFx0aC00LjFsLTUuNC03aC01LjVjLTEuNywwLTMsMS4zLTMsM2gtMlY4SDZ2Ni4yYy0xLjIsMC40LTIuMSwxLjUtMi4xLDIuOGwwLDcuMmwwLjEsMEM0LjUsMjMuNyw1LjEsMjMuNCw1LjgsMjMuMnogTTE3LjksMTRoNC4yXG5cdFx0bDEuNCwyaC01LjdWMTR6'@;
put 'IE03LjksMTBoMnY0aC0yVjEweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlVHJhaWxlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42'@;
put 'LDUuOC01LjhTMTguMiwxOS4yLDE1LDE5LjJ6IE0xNSwyOS4yYy0yLjMsMC00LjItMS45LTQuMi00LjJcblx0XHRzMS45LTQuMiw0LjItNC4yczQuMiwxLjksNC4yLDQuMlMxNy4zLDI5LjIsMTUsMjkuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxy'@;
put 'ZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQuMywzLjcsMjYsNS45LDI2SDd2LTJINS45Yy0xLDAtMS44LTAuOC0xLjkt'@;
put 'MS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjksMS45SDIzdjJoMS4xXG5cdFx0YzAsMCwwLDAsMCwwYzIuMSwwLDMuOC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXogTTI2LDEzSDR2LTJoMjJWMTN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAsMS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0YzAsMCwwLDAsMCwwYzIuMSwwLDMu'@;
put 'OC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUuOCwyLjYtNS44LDUuOHMyLjYsNS44LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44bDAs'@;
put 'MEMyMC44LDIxLjgsMTguMiwxOS4yLDE1LDE5LjJ6IE0xNiwyNmgtMnYtMmgyVjI2eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlT25Ib2xpZGF5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC4wOCwyLjM0Yy04LjgyLDAtMTYs'@;
put 'Ni4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0QTE3LjkxLDE3LjkxLDAsMCwwLDIzLDI5LjY2bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uMywxLDEsMCwwLDAsLjE2LS41NFYyNS42MWExMywxMywwLDAsMCw0LTkuMjdDMzQuMDgsOC42MiwyNi45LDIuMzQsMTguMDgsMi4zNFpNMjguMzcsMjQu'@;
put 'NDVhMSwxLDAsMCwwLS4zMi43M3Y1LjM0bC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTEsMTYsMTYsMCwwLDEtNC43Ni43MmMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjEsMTEuMSwwLDAsMSwyOC4zNywyNC40NVoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4xLDE1LjgyLDMxLDE1LjY3LDI4LjUsMTMuNDRhMy4yNSwzLjI1LDAsMCwwLTIuMzktLjg0bC01LjM4LjM0LTMuNTktM2EuODEuODEsMCwwLDAtLjUyLS4xOUgxMy41NmEuNzguNzgsMCwwLDAtLjY5LjQu'@;
put 'NzcuNzcsMCwwLDAsMCwuNzlsMS4zNiwyLjQ0LTQuNzEuMjksMS4zMSwxLjUyLDE1LjM5LTFhMS42NSwxLjY1LDAsMCwxLDEuMjIuNDNsMi4zNiwyLjEzYS4xMS4xMSwwLDAsMSwwLC4wN2MwLC4wNi0uMDkuMDUtLjEuMDZIMjEuODJsLS4zNS4zNy01LjE5LDUuNTNIMTQuNjRsMi43My01LjlI'@;
put 'OC41NEw3LjEzLDE0LjE2LDYuNTEsMTNhLjguOCwwLDAsMC0xLS4yQS44MS44MSwwLDAsMCw1LjIsMTMuOWwyLDMuOTRhMS4yMSwxLjIxLDAsMCwwLDEuMDguNjVoNi41N2wtMS45NCw0LjE4QTEuMiwxLjIsMCwwLDAsMTMsMjMuODNhMS4yMiwxLjIyLDAsMCwwLDEsLjU2aDIuNDNhMS4xNywx'@;
put 'LjE3LDAsMCwwLC44OC0uMzlsNS4xOC01LjUxaDcuMTZhMS42NSwxLjY1LDAsMCwwLDEuNTItLjkxQTEuNzQsMS43NCwwLDAsMCwzMS4xLDE1LjgyWk0xNC45MiwxMS4zMWgxLjQxbDIuMDksMS43N0wxNiwxMy4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'Ii8+XG4gIFxuICA8cGF0aCBkPSJNMTgsMi41Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE3LjkxLDE3LjkxLDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAsMS4zOC0uM0ExLDEsMCwwLDAsMzAsMzIuNVYyNS43N2ExMywxMywwLDAsMCw0LTkuMjdDMzQs'@;
put 'OC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOS44NCwxOEgyMS41MWEuNDIuNDIsMCwwLDAtLjMuMTNsLTUuMyw1LjY0YS4zOS4zOSwwLDAsMS0uMjkuMTNIMTMuMTlhLjQxLjQxLDAsMCwxLS4zNy0uNThsMi40Ny01LjMySDcuNDZhLjQyLjQyLDAsMCwxLS4zNi0uMjJsLTIuNy01SDYuMjRhLjUz'@;
put 'LjUzLDAsMCwxLC4zOS4xOGwxLjU2LDEuNjlhLjM4LjM4LDAsMCwwLC4zMy4xNGw2LjE4LS4zOC0yLTMuNTVoMi44OWEuNDcuNDcsMCwwLDEsLjMxLjExTDE5LjYzLDE0bDYuNjktLjM1YTIuNDQsMi40NCwwLDAsMSwxLjgxLjYzbDIuNDcsMi4yM0EuOTIuOTIsMCwwLDEsMjkuODQsMThaIiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICcpLF8uVHJhdmVsU2hhcGVzPXt0cnVjazpfLkNsclNoYXBlVHJ1Y2ssYWlycGxhbmU6Xy5DbHJTaGFwZUFpcnBsYW5lLGNhcjpfLkNsclNoYXBlQ2FyLG1hcDpfLkNsclNoYXBlTWFwLGNvbXBhc3M6Xy5DbHJTaGFw'@;
put 'ZUNvbXBhc3MsIm1hcC1tYXJrZXIiOl8uQ2xyU2hhcGVNYXBNYXJrZXIsYmljeWNsZTpfLkNsclNoYXBlQmljeWNsZSxib2F0Ol8uQ2xyU2hhcGVCb2F0LGNhbXBlcnZhbjpfLkNsclNoYXBlQ2FtcGVydmFuLGNhcmF2YW46Xy5DbHJTaGFwZUNhcmF2YW4sZmVycnk6Xy5DbHJTaGFwZUZlcnJ5'@;
put 'LHRyYWlsZXI6Xy5DbHJTaGFwZVRyYWlsZXIsIm9uLWhvbGlkYXkiOl8uQ2xyU2hhcGVPbkhvbGlkYXl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLlRyYXZlbFNoYXBlcywicGxhbmUiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UcmF2ZWxTaGFwZXMuYWlycGxhbmUpKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoXy5UcmF2ZWxTaGFwZXMsImF1dG8iLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UcmF2ZWxTaGFwZXMuY2FyKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKF8uVHJh'@;
put 'dmVsU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMv'@;
put 'c3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0'@;
put 'cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsXy5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIHkoZyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZh'@;
put 'bHVlOmd9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3Jj'@;
put 'L3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0cmlj'@;
put 'dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uY2xySWNvblNWRz12b2lkIDA7Xy5jbHJJY29uU1ZHPWZ1bmN0aW9uIHcoUCl7dmFyIEY9IiI7cmV0dXJuIFAuaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKEYrPSJjYW4tYmFkZ2UgIiksUC5pbmRl'@;
put 'eE9mKCItLWFsZXJ0ZWQiKT4tMSYmKEYrPSJjYW4tYWxlcnQgIiksUC5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoRis9Imhhcy1zb2xpZCAiKSwoRj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK0YrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4'@;
put 'TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAz'@;
put 'NiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK1ArIjwvc3ZnPiJ9'@;
put 'fX0pfSwzNjA5NToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST17fTtfLnIoSSksXy5kKEkse2FycmF5QXZnOigpPT5PS2UsYXJyYXlFYWNoOigpPT5ZbixhcnJheUZpbHRlcjooKT0+RG0sYXJyYXlGbGF0dGVuOigpPT5sMmUsYXJyYXlNYXA6KCk9PnlzLGFycmF5TWF4OigpPT5SS2Us'@;
put 'YXJyYXlNaW46KCk9PkxLZSxhcnJheVJlZHVjZTooKT0+S3UsYXJyYXlTdW06KCk9PnMyZSxhcnJheVVuaXF1ZTooKT0+YzJlLGV4dGVuZEFycmF5OigpPT5pJCxnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9Pm8kLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5QS2UsZ2V0VW5pb25PZkFy'@;
put 'cmF5czooKT0+RktlLHBpdm90OigpPT5kRSxzdHJpbmdUb0FycmF5OigpPT5hJCx0bzJkQXJyYXk6KCk9PmEyZX0pO3ZhciB5PXt9O18ucih5KSxfLmQoeSx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5nMmUsaXNEZWZpbmVkOigpPT5Gbyxpc0VtcHR5OigpPT56Yyxpc1JlZ0V4cDooKT0+dTJl'@;
put 'LGlzVW5kZWZpbmVkOigpPT55YyxzdHJpbmdpZnk6KCk9PmxjfSk7dmFyIGc9e307Xy5yKGcpLF8uZChnLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5CS2UsaXNQZXJjZW50VmFsdWU6KCk9PmMkLHJhbmRvbVN0cmluZzooKT0+bCQsc2FuaXRpemU6KCk9PkRPLHN0cmlwVGFnczooKT0+ZCQsc3Vi'@;
put 'c3RpdHV0ZTooKT0+dSQsdG9VcHBlckNhc2VGaXJzdDooKT0+cDF9KTt2YXIgQj17fTtfLnIoQiksXy5kKEIse0hUTUxfQ0hBUkFDVEVSUzooKT0+RDJlLGFkZENsYXNzOigpPT5UaSxhZGRFdmVudDooKT0+aHFlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+XyQsY2xvc2VzdDooKT0+SW0sY2xv'@;
put 'c2VzdERvd246KCk9PnZFLGVtcHR5OigpPT54cCxmYXN0SW5uZXJIVE1MOigpPT5CNyxmYXN0SW5uZXJUZXh0OigpPT5PbSxmaW5kRmlyc3RQYXJlbnRXaXRoQ2xhc3M6KCk9PkUyZSxnZXRDYXJldFBvc2l0aW9uOigpPT55JCxnZXRDc3NUcmFuc2Zvcm06KCk9Pm1xZSxnZXRGcmFtZUVsZW1l'@;
put 'bnQ6KCk9PngyZSxnZXRNYXhpbXVtU2Nyb2xsTGVmdDooKT0+TDJlLGdldE1heGltdW1TY3JvbGxUb3A6KCk9PlIyZSxnZXRQYXJlbnQ6KCk9Pk0yZSxnZXRQYXJlbnRXaW5kb3c6KCk9Pk43LGdldFNjcm9sbExlZnQ6KCk9PnYkLGdldFNjcm9sbFRvcDooKT0+TE8sZ2V0U2Nyb2xsYWJsZUVs'@;
put 'ZW1lbnQ6KCk9PmJFLGdldFNjcm9sbGJhcldpZHRoOigpPT5oMCxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+TzJlLGdldFNlbGVjdGlvblRleHQ6KCk9PnBxZSxnZXRTdHlsZTooKT0+eUUsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9Pm9fLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9PlJP'@;
put 'LGdldFdpbmRvd1Njcm9sbFRvcDooKT0+bSQsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PnVxZSxoYXNDbGFzczooKT0+cGEsaGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+UyQsaGFzVmVydGljYWxTY3JvbGxiYXI6KCk9PkMkLGhhc1plcm9IZWlnaHQ6KCk9PkkyZSxpbmRleDooKT0+'@;
put 'VDJlLGlubmVySGVpZ2h0OigpPT5hXyxpbm5lcldpZHRoOigpPT5iJCxpc0NoaWxkT2Y6KCk9PlJtLGlzRGV0YWNoZWQ6KCk9Pk0kLGlzSFRNTEVsZW1lbnQ6KCk9PkVwLGlzSW5wdXQ6KCk9PkNFLGlzSW50ZXJuYWxFbGVtZW50OigpPT5tRSxpc091dHNpZGVJbnB1dDooKT0+UE8saXNWaXNp'@;
put 'YmxlOigpPT5qNyxtYWtlRWxlbWVudENvbnRlbnRFZGl0YWJsZUFuZFNlbGVjdEl0c0NvbnRlbnQ6KCk9PngkLG1hdGNoZXNDU1NSdWxlczooKT0+ZHFlLG9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlT25jZTooKT0+UDJlLG9mZnNldDooKT0+ajAsb3V0ZXJIZWlnaHQ6KCk9Pk11LG91dGVyV2lk'@;
put 'dGg6KCk9PmF1LG92ZXJsYXlDb250YWluc0VsZW1lbnQ6KCk9PkxtLHJlbW92ZUF0dHJpYnV0ZTooKT0+VjcscmVtb3ZlQ2xhc3M6KCk9PmNhLHJlbW92ZUNvbnRlbnRFZGl0YWJsZUZyb21FbGVtZW50QW5kRGVzZWxlY3Q6KCk9PkUkLHJlbW92ZUV2ZW50OigpPT5mcWUscmVtb3ZlVGV4dE5v'@;
put 'ZGVzOigpPT5nJCxyZXNldENzc1RyYW5zZm9ybTooKT0+d0UscnVuV2l0aFNlbGVjdGVkQ29udGVuZEVkaXRhYmxlRWxlbWVudDooKT0+RjJlLHNlbGVjdEVsZW1lbnRJZkFsbG93ZWQ6KCk9PnZxZSxzZXRBdHRyaWJ1dGU6KCk9PnZhLHNldENhcmV0UG9zaXRpb246KCk9Pl9FLHNldE92ZXJs'@;
put 'YXlQb3NpdGlvbjooKT0+T099KTt2YXIgdz17fTtfLnIodyksXy5kKHcse2N1cnJ5OigpPT5OMmUsY3VycnlSaWdodDooKT0+X3FlLGRlYm91bmNlOigpPT5TRSxmYXN0Q2FsbDooKT0+Rk8saXNGdW5jdGlvbjooKT0+bWwscGFydGlhbDooKT0+VCQscGlwZTooKT0+eXFlLHRocm90dGxlOigp'@;
put 'PT5IMmUsdGhyb3R0bGVBZnRlckhpdHM6KCk9PmJxZX0pO3ZhciBQPXt9O18ucihQKSxfLmQoUCx7Y2xvbmU6KCk9Pm4zLGNyZWF0ZU9iamVjdFByb3BMaXN0ZW5lcjooKT0+RmQsZGVlcENsb25lOigpPT5nMSxkZWVwRXh0ZW5kOigpPT5NRSxkZWVwT2JqZWN0U2l6ZTooKT0+Vk8sZGVmaW5l'@;
put 'R2V0dGVyOigpPT5UcCxkdWNrU2NoZW1hOigpPT5zXyxleHRlbmQ6KCk9Pnh1LGdldFByb3BlcnR5OigpPT5CMmUsaGFzT3duUHJvcGVydHk6KCk9PkV1LGluaGVyaXQ6KCk9PlYyZSxpc09iamVjdDooKT0+cWEsaXNPYmplY3RFcXVhbDooKT0+SE8sbWl4aW46KCk9PlRsLG9iamVjdEVhY2g6'@;
put 'KCk9PlhhLHNldFByb3BlcnR5OigpPT5OT30pO3ZhciBGPXt9O18ucihGKSxfLmQoRix7Y2FuY2VsQW5pbWF0aW9uRnJhbWU6KCk9PkVFLGdldENvbXBhcmlzb25GdW5jdGlvbjooKT0+ejJlLGlzQ1NSOigpPT5qMmUsaXNUb3VjaFN1cHBvcnRlZDooKT0+QSQscmVxdWVzdEFuaW1hdGlvbkZy'@;
put 'YW1lOigpPT54RX0pO3ZhciBPPXt9O18ucihPKSxfLmQoTyx7aXNDaHJvbWU6KCk9PmskLGlzQ2hyb21lV2ViS2l0OigpPT5XMmUsaXNFZGdlOigpPT5HMmUsaXNFZGdlV2ViS2l0OigpPT53cWUsaXNGaXJlZm94OigpPT5CTyxpc0ZpcmVmb3hXZWJLaXQ6KCk9PlkyZSxpc0lPUzooKT0+RCQs'@;
put 'aXNJcGFkT1M6KCk9PkkkLGlzTGludXhPUzooKT0+Q3FlLGlzTWFjT1M6KCk9PmpPLGlzTW9iaWxlQnJvd3NlcjooKT0+QXAsaXNTYWZhcmk6KCk9PlRFLGlzV2luZG93c09TOigpPT5SJCxzZXRCcm93c2VyTWV0YTooKT0+VTJlLHNldFBsYXRmb3JtTWV0YTooKT0+WjJlfSk7dmFyIHo9e307'@;
put 'Xy5yKHopLF8uZCh6LHtLRVlfQ09ERVM6KCk9PkdvLGlzQ3RybEtleTooKT0+TXFlLGlzQ3RybE1ldGFLZXk6KCk9PksyZSxpc0Z1bmN0aW9uS2V5OigpPT5MJCxpc0tleTooKT0+dV8saXNQcmludGFibGVDaGFyOigpPT4kMmV9KTt2YXIgTj17fTtfLnIoTiksXy5kKE4se2lzSW1tZWRpYXRl'@;
put 'UHJvcGFnYXRpb25TdG9wcGVkOigpPT5QbSxpc0xlZnRDbGljazooKT0+ek8saXNSaWdodENsaWNrOigpPT5GbSxpc1RvdWNoRXZlbnQ6KCk9PnEyZSxvZmZzZXRSZWxhdGl2ZVRvOigpPT5YMmUsc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOigpPT5IMn0pO3ZhciBMPXt9O18ucihMKSxfLmQo'@;
put 'TCx7X2RhdGFUb0hUTUw6KCk9PlkkLGh0bWxUb0dyaWRTZXR0aW5nczooKT0+dWZlLGluc3RhbmNlVG9IVE1MOigpPT5XJH0pO3ZhciBLPXt9O18ucihLKSxfLmQoSyx7Y2xhbXA6KCk9PkFzLGlzTnVtZXJpYzooKT0+bTEsaXNOdW1lcmljTGlrZTooKT0+ZGZlLHJhbmdlRWFjaDooKT0+JG8s'@;
put 'cmFuZ2VFYWNoUmV2ZXJzZTooKT0+RyQsdmFsdWVBY2NvcmRpbmdQZXJjZW50OigpPT4kJH0pO3ZhciBVPXt9O18ucihVKSxfLmQoVSx7Y291bnRGaXJzdFJvd0tleXM6KCk9PlJLLGNyZWF0ZUVtcHR5U3ByZWFkc2hlZXREYXRhOigpPT5EZXQsY3JlYXRlU3ByZWFkc2hlZXREYXRhOigpPT5B'@;
put 'ZXQsY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhOigpPT5rZXQsZGF0YVJvd1RvQ2hhbmdlc0FycmF5OigpPT5JSyxpc0FycmF5T2ZBcnJheXM6KCk9PmIzZSxpc0FycmF5T2ZPYmplY3RzOigpPT55M2Usc3ByZWFkc2hlZXRDb2x1bW5JbmRleDooKT0+VGV0LHNwcmVhZHNoZWV0Q29sdW1u'@;
put 'TGFiZWw6KCk9PmRQfSk7dmFyIFc9e307Xy5yKFcpLF8uZChXLHtDSEVDS0JPWF9DSEVDS0VEOigpPT5sWCxDSEVDS0JPWF9SRU5ERVJFUl9OQU1FU1BBQ0U6KCk9PnNYLENIRUNLQk9YX1VOQ0hFQ0tFRDooKT0+Y1gsQ09OVEVYVE1FTlVfSVRFTVNfQUREX0NPTU1FTlQ6KCk9PmxxLENPTlRF'@;
put 'WFRNRU5VX0lURU1TX0FMSUdOTUVOVDooKT0+aHEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0JPVFRPTTooKT0+eXEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0NFTlRFUjooKT0+cHEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0pVU1RJRlk6KCk9Pm1xLENPTlRFWFRN'@;
put 'RU5VX0lURU1TX0FMSUdOTUVOVF9MRUZUOigpPT5mcSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfTUlERExFOigpPT5icSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfUklHSFQ6KCk9PmdxLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9UT1A6KCk9PnZxLENPTlRFWFRNRU5V'@;
put 'X0lURU1TX0JPUkRFUlM6KCk9Pl9xLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfQk9UVE9NOigpPT5TcSxDT05URVhUTUVOVV9JVEVNU19CT1JERVJTX0xFRlQ6KCk9Pk1xLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfUklHSFQ6KCk9PkNxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNf'@;
put 'VE9QOigpPT53cSxDT05URVhUTUVOVV9JVEVNU19DTEVBUl9DT0xVTU46KCk9PkpLLENPTlRFWFRNRU5VX0lURU1TX0NPUFk6KCk9PlFLLENPTlRFWFRNRU5VX0lURU1TX0NPUFlfQ09MVU1OX0hFQURFUlNfT05MWTooKT0+bnEsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9XSVRIX0NPTFVNTl9H'@;
put 'Uk9VUF9IRUFERVJTOigpPT50cSxDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0hFQURFUlM6KCk9PmVxLENPTlRFWFRNRU5VX0lURU1TX0NVVDooKT0+cnEsQ09OVEVYVE1FTlVfSVRFTVNfRURJVF9DT01NRU5UOigpPT5jcSxDT05URVhUTUVOVV9JVEVNU19GUkVFWkVfQ09M'@;
put 'VU1OOigpPT5pcSxDT05URVhUTUVOVV9JVEVNU19ISURFX0NPTFVNTjooKT0+QXEsQ09OVEVYVE1FTlVfSVRFTVNfSElERV9ST1c6KCk9PkRxLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9MRUZUOigpPT5ZSyxDT05URVhUTUVOVV9JVEVNU19JTlNFUlRfUklHSFQ6KCk9PkdLLENPTlRFWFRN'@;
put 'RU5VX0lURU1TX01FUkdFX0NFTExTOigpPT5hcSxDT05URVhUTUVOVV9JVEVNU19ORVNURURfUk9XU19ERVRBQ0hfQ0hJTEQ6KCk9PlRxLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0lOU0VSVF9DSElMRDooKT0+RXEsQ09OVEVYVE1FTlVfSVRFTVNfTk9fSVRFTVM6KCk9PlVLLENP'@;
put 'TlRFWFRNRU5VX0lURU1TX1JFQURfT05MWTooKT0+eVAsQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZX0NPTU1FTlQ6KCk9PmRxLENPTlRFWFRNRU5VX0lURU1TX1JFRE86KCk9PlhLLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9CT1JERVJTOigpPT54cSxDT05URVhUTUVOVV9JVEVNU19S'@;
put 'RU1PVkVfQ09MVU1OOigpPT5LSyxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfQ09NTUVOVDooKT0+dXEsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX1JPVzooKT0+JEssQ09OVEVYVE1FTlVfSVRFTVNfUk9XX0FCT1ZFOigpPT5aSyxDT05URVhUTUVOVV9JVEVNU19ST1dfQkVMT1c6KCk9PldL'@;
put 'LENPTlRFWFRNRU5VX0lURU1TX1NIT1dfQ09MVU1OOigpPT5rcSxDT05URVhUTUVOVV9JVEVNU19TSE9XX1JPVzooKT0+SXEsQ09OVEVYVE1FTlVfSVRFTVNfVU5ETzooKT0+cUssQ09OVEVYVE1FTlVfSVRFTVNfVU5GUkVFWkVfQ09MVU1OOigpPT5vcSxDT05URVhUTUVOVV9JVEVNU19VTk1F'@;
put 'UkdFX0NFTExTOigpPT5zcSxDT05URVhUX01FTlVfSVRFTVNfTkFNRVNQQUNFOigpPT5JM2UsRklMVEVSU19CVVRUT05TX0NBTkNFTDooKT0+clgsRklMVEVSU19CVVRUT05TX0NMRUFSOigpPT50WCxGSUxURVJTX0JVVFRPTlNfT0s6KCk9Pm5YLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERF'@;
put 'Ul9TRUFSQ0g6KCk9PmlYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9TRUNPTkRfVkFMVUU6KCk9PmFYLEZJTFRFUlNfQlVUVE9OU19QTEFDRUhPTERFUl9WQUxVRTooKT0+b1gsRklMVEVSU19CVVRUT05TX1NFTEVDVF9BTEw6KCk9PmVYLEZJTFRFUlNfQ09ORElUSU9OU19BRlRFUjoo'@;
put 'KT0+WXEsRklMVEVSU19DT05ESVRJT05TX0JFRk9SRTooKT0+R3EsRklMVEVSU19DT05ESVRJT05TX0JFR0lOU19XSVRIOigpPT5GcSxGSUxURVJTX0NPTkRJVElPTlNfQkVUV0VFTjooKT0+WnEsRklMVEVSU19DT05ESVRJT05TX0JZX1ZBTFVFOigpPT5sdHQsRklMVEVSU19DT05ESVRJT05T'@;
put 'X0NPTlRBSU5TOigpPT5OcSxGSUxURVJTX0NPTkRJVElPTlNfRU1QVFk6KCk9PlJxLEZJTFRFUlNfQ09ORElUSU9OU19FTkRTX1dJVEg6KCk9PkhxLEZJTFRFUlNfQ09ORElUSU9OU19FUVVBTDooKT0+T3EsRklMVEVSU19DT05ESVRJT05TX0dSRUFURVJfVEhBTjooKT0+QnEsRklMVEVSU19D'@;
put 'T05ESVRJT05TX0dSRUFURVJfVEhBTl9PUl9FUVVBTDooKT0+anEsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTjooKT0+enEsRklMVEVSU19DT05ESVRJT05TX0xFU1NfVEhBTl9PUl9FUVVBTDooKT0+VXEsRklMVEVSU19DT05ESVRJT05TX05BTUVTUEFDRTooKT0+WmMsRklMVEVSU19D'@;
put 'T05ESVRJT05TX05PTkU6KCk9Pl9QLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfQkVUV0VFTjooKT0+V3EsRklMVEVSU19DT05ESVRJT05TX05PVF9DT05UQUlOOigpPT5WcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VNUFRZOigpPT5McSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0VRVUFMOigp'@;
put 'PT5QcSxGSUxURVJTX0NPTkRJVElPTlNfVE9EQVk6KCk9PiRxLEZJTFRFUlNfQ09ORElUSU9OU19UT01PUlJPVzooKT0+S3EsRklMVEVSU19DT05ESVRJT05TX1lFU1RFUkRBWTooKT0+cXEsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9DT05ESVRJT046KCk9PlhxLEZJTFRFUlNfRElWU19GSUxU'@;
put 'RVJfQllfVkFMVUU6KCk9PkpxLEZJTFRFUlNfTEFCRUxTX0NPTkpVTkNUSU9OOigpPT5RcSxGSUxURVJTX0xBQkVMU19ESVNKVU5DVElPTjooKT0+d1AsRklMVEVSU19OQU1FU1BBQ0U6KCk9PlgxLEZJTFRFUlNfVkFMVUVTX0JMQU5LX0NFTExTOigpPT5DUH0pO3ZhciBZPXt9O2Z1bmN0aW9u'@;
put 'IFgoYyxsLGEsZCxoLGYsdil7dHJ5e3ZhciBNPWNbZl0odiksRD1NLnZhbHVlfWNhdGNoKFope3JldHVybiB2b2lkIGEoWil9TS5kb25lP2woRCk6UHJvbWlzZS5yZXNvbHZlKEQpLnRoZW4oZCxoKX1mdW5jdGlvbiBlZShjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLGE9YXJndW1l'@;
put 'bnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGgpe3ZhciBmPWMuYXBwbHkobCxhKTtmdW5jdGlvbiB2KEQpe1goZixkLGgsdixNLCJuZXh0IixEKX1mdW5jdGlvbiBNKEQpe1goZixkLGgsdixNLCJ0aHJvdyIsRCl9dih2b2lkIDApfSl9fV8ucihZKSxfLmQoWSx7Z2V0Tm9ybWFs'@;
put 'aXplZERhdGU6KCk9PmM0ZX0pO2xldCByZT1udWxsLGxlPTE7Y29uc3QgbWU9U3ltYm9sKCJTSUdOQUwiKTtmdW5jdGlvbiBfZShjKXtjb25zdCBsPXJlO3JldHVybiByZT1jLGx9ZnVuY3Rpb24geChjKXtpZigoIXNlKGMpfHxjLmRpcnR5KSYmKGMuZGlydHl8fGMubGFzdENsZWFuRXBvY2gh'@;
put 'PT1sZSkpe2lmKCFjLnByb2R1Y2VyTXVzdFJlY29tcHV0ZShjKSYmIW0oYykpcmV0dXJuIGMuZGlydHk9ITEsdm9pZChjLmxhc3RDbGVhbkVwb2NoPWxlKTtjLnByb2R1Y2VyUmVjb21wdXRlVmFsdWUoYyksYy5kaXJ0eT0hMSxjLmxhc3RDbGVhbkVwb2NoPWxlfX1mdW5jdGlvbiBtKGMpe3dl'@;
put 'KGMpO2ZvcihsZXQgbD0wO2w8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2wrKyl7Y29uc3QgYT1jLnByb2R1Y2VyTm9kZVtsXSxkPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb25bbF07aWYoZCE9PWEudmVyc2lvbnx8KHgoYSksZCE9PWEudmVyc2lvbikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rp'@;
put 'b24gdGUoYyxsKXtpZihmdW5jdGlvbiBVZShjKXtjLmxpdmVDb25zdW1lck5vZGU/Pz1bXSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzPz89W119KGMpLHdlKGMpLDE9PT1jLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoKWZvcihsZXQgZD0wO2Q8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2QrKyl0'@;
put 'ZShjLnByb2R1Y2VyTm9kZVtkXSxjLnByb2R1Y2VySW5kZXhPZlRoaXNbZF0pO2NvbnN0IGE9Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aC0xO2lmKGMubGl2ZUNvbnN1bWVyTm9kZVtsXT1jLmxpdmVDb25zdW1lck5vZGVbYV0sYy5saXZlQ29uc3VtZXJJbmRleE9mVGhpc1tsXT1jLmxpdmVD'@;
put 'b25zdW1lckluZGV4T2ZUaGlzW2FdLGMubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGgtLSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzLmxlbmd0aC0tLGw8Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aCl7Y29uc3QgZD1jLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW2xdLGg9Yy5saXZlQ29uc3Vt'@;
put 'ZXJOb2RlW2xdO3dlKGgpLGgucHJvZHVjZXJJbmRleE9mVGhpc1tkXT1sfX1mdW5jdGlvbiBzZShjKXtyZXR1cm4gYy5jb25zdW1lcklzQWx3YXlzTGl2ZXx8KGM/LmxpdmVDb25zdW1lck5vZGU/Lmxlbmd0aD8/MCk+MH1mdW5jdGlvbiB3ZShjKXtjLnByb2R1Y2VyTm9kZT8/PVtdLGMucHJv'@;
put 'ZHVjZXJJbmRleE9mVGhpcz8/PVtdLGMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24/Pz1bXX1sZXQgRGU9bnVsbDtmdW5jdGlvbiAkZShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiB0dChjKXtjb25zdCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVy'@;
put 'cm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YSxhfWNvbnN0IEhlPXR0KGM9PmZ1bmN0aW9uKGEpe2ModGhpcyksdGhpcy5tZXNzYWdlPWE/YCR7YS5sZW5ndGh9IGVycm9ycyBvY2N1'@;
put 'cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2EubWFwKChkLGgpPT5gJHtoKzF9KSAke2QudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPWF9KTtmdW5jdGlvbiB1dChjLGwpe2lmKGMpe2NvbnN0'@;
put 'IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNlKGEsMSl9fWNsYXNzIHF0e2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYo'@;
put 'IXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFs'@;
put 'VGVhcmRvd246ZH09dGhpcztpZigkZShkKSl0cnl7ZCgpfWNhdGNoKGYpe2w9ZiBpbnN0YW5jZW9mIEhlP2YuZXJyb3JzOltmXX1jb25zdHtfZmluYWxpemVyczpofT10aGlzO2lmKGgpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IoY29uc3QgZiBvZiBoKXRyeXtzaShmKX1jYXRjaCh2KXts'@;
put 'PWw/P1tdLHYgaW5zdGFuY2VvZiBIZT9sPVsuLi5sLC4uLnYuZXJyb3JzXTpsLnB1c2godil9fWlmKGwpdGhyb3cgbmV3IEhlKGwpfX1hZGQobCl7dmFyIGE7aWYobCYmbCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpc2kobCk7ZWxzZXtpZihsIGluc3RhbmNlb2YgcXQpe2lmKGwuY2xvc2VkfHxs'@;
put 'Ll9oYXNQYXJlbnQodGhpcykpcmV0dXJuO2wuX2FkZFBhcmVudCh0aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGE9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWE/YTpbXSkucHVzaChsKX19X2hhc1BhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7cmV0dXJuIGE9'@;
put 'PT1sfHxBcnJheS5pc0FycmF5KGEpJiZhLmluY2x1ZGVzKGwpfV9hZGRQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGEpPyhhLnB1c2gobCksYSk6YT9bYSxsXTpsfV9yZW1vdmVQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFn'@;
put 'ZTphfT10aGlzO2E9PT1sP3RoaXMuX3BhcmVudGFnZT1udWxsOkFycmF5LmlzQXJyYXkoYSkmJnV0KGEsbCl9cmVtb3ZlKGwpe2NvbnN0e19maW5hbGl6ZXJzOmF9PXRoaXM7YSYmdXQoYSxsKSxsIGluc3RhbmNlb2YgcXQmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19cXQuRU1QVFk9KCgpPT57'@;
put 'Y29uc3QgYz1uZXcgcXQ7cmV0dXJuIGMuY2xvc2VkPSEwLGN9KSgpO2NvbnN0IFJ0PXF0LkVNUFRZO2Z1bmN0aW9uIFB0KGMpe3JldHVybiBjIGluc3RhbmNlb2YgcXR8fGMmJiJjbG9zZWQiaW4gYyYmJGUoYy5yZW1vdmUpJiYkZShjLmFkZCkmJiRlKGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9u'@;
put 'IHNpKGMpeyRlKGMpP2MoKTpjLnVuc3Vic2NyaWJlKCl9Y29uc3QgUXQ9e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0'@;
put 'Q29udGV4dDohMX0sc249e3NldFRpbWVvdXQoYyxsLC4uLmEpe2NvbnN0e2RlbGVnYXRlOmR9PXNuO3JldHVybiBkPy5zZXRUaW1lb3V0P2Quc2V0VGltZW91dChjLGwsLi4uYSk6c2V0VGltZW91dChjLGwsLi4uYSl9LGNsZWFyVGltZW91dChjKXtjb25zdHtkZWxlZ2F0ZTpsfT1zbjtyZXR1'@;
put 'cm4obD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIFJpKGMpe3NuLnNldFRpbWVvdXQoKCk9Pntjb25zdHtvblVuaGFuZGxlZEVycm9yOmx9PVF0O2lmKCFsKXRocm93IGM7bChjKX0pfWZ1bmN0aW9uIGhuKCl7fWNvbnN0IGZ0PUF0'@;
put 'KCJDIix2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiBBdChjLGwsYSl7cmV0dXJue2tpbmQ6Yyx2YWx1ZTpsLGVycm9yOmF9fWxldCBSbj1udWxsO2Z1bmN0aW9uIHN0KGMpe2lmKFF0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpe2NvbnN0IGw9IVJuO2lmKGwmJihSbj17'@;
put 'ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25zdHtlcnJvclRocm93bjphLGVycm9yOmR9PVJuO2lmKFJuPW51bGwsYSl0aHJvdyBkfX1lbHNlIGMoKX1jbGFzcyByaSBleHRlbmRzIHF0e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhp'@;
put 'cy5kZXN0aW5hdGlvbj1sLFB0KGwpJiZsLmFkZCh0aGlzKSk6dGhpcy5kZXN0aW5hdGlvbj16dH1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IGh0KGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP3JuKGZ1bmN0aW9uIFd0KGMpe3JldHVybiBBdCgiTiIsYyx2b2lkIDApfShs'@;
put 'KSx0aGlzKTp0aGlzLl9uZXh0KGwpfWVycm9yKGwpe3RoaXMuaXNTdG9wcGVkP3JuKGZ1bmN0aW9uIE9yKGMpe3JldHVybiBBdCgiRSIsdm9pZCAwLGMpfShsKSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IobCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWQ/cm4oZnQs'@;
put 'dGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRlKCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249bnVsbCl9X25leHQobCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGwp'@;
put 'fV9lcnJvcihsKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcihsKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19fWNvbnN0IFdlPUZ1bmN0aW9uLnByb3Rv'@;
put 'dHlwZS5iaW5kO2Z1bmN0aW9uIFR0KGMsbCl7cmV0dXJuIFdlLmNhbGwoYyxsKX1jbGFzcyBucntjb25zdHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7'@;
put 'eHQoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjphfT10aGlzO2lmKGEuZXJyb3IpdHJ5e2EuZXJyb3IobCl9Y2F0Y2goZCl7eHQoZCl9ZWxzZSB4dChsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxl'@;
put 'dGUoKX1jYXRjaChhKXt4dChhKX19fWNsYXNzIGh0IGV4dGVuZHMgcml7Y29uc3RydWN0b3IobCxhLGQpe2xldCBoO2lmKHN1cGVyKCksJGUobCl8fCFsKWg9e25leHQ6bD8/dm9pZCAwLGVycm9yOmE/P3ZvaWQgMCxjb21wbGV0ZTpkPz92b2lkIDB9O2Vsc2V7bGV0IGY7dGhpcyYmUXQudXNl'@;
put 'RGVwcmVjYXRlZE5leHRDb250ZXh0PyhmPU9iamVjdC5jcmVhdGUobCksZi51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLGg9e25leHQ6bC5uZXh0JiZUdChsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmVHQobC5lcnJvcixmKSxjb21wbGV0ZTpsLmNvbXBsZXRlJiZUdChsLmNv'@;
put 'bXBsZXRlLGYpfSk6aD1sfXRoaXMuZGVzdGluYXRpb249bmV3IG5yKGgpfX1mdW5jdGlvbiB4dChjKXtRdC51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIFV0KGMpe1F0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJlJuJiYoUm4u'@;
put 'ZXJyb3JUaHJvd249ITAsUm4uZXJyb3I9Yyl9KGMpOlJpKGMpfWZ1bmN0aW9uIHJuKGMsbCl7Y29uc3R7b25TdG9wcGVkTm90aWZpY2F0aW9uOmF9PVF0O2EmJnNuLnNldFRpbWVvdXQoKCk9PmEoYyxsKSl9Y29uc3QgenQ9e2Nsb3NlZDohMCxuZXh0OmhuLGVycm9yOmZ1bmN0aW9uIEJuKGMp'@;
put 'e3Rocm93IGN9LGNvbXBsZXRlOmhufSxoaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gY24oYyl7cmV0dXJuIGN9ZnVuY3Rpb24gSWkoYyl7cmV0dXJuIDA9PT1jLmxlbmd0aD9jbjoxPT09Yy5sZW5ndGg/Y1sw'@;
put 'XTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9PmgoZCksYSl9fWxldCBYdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1'@;
put 'YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBNaShjKXtyZXR1cm4gYyYmYyBpbnN0YW5jZW9mIHJpfHxmdW5jdGlvbiBobyhjKXtyZXR1cm4gYyYmJGUoYy5uZXh0KSYmJGUoYy5lcnJvcikmJiRlKGMuY29tcGxldGUpfShjKSYmUHQoYyl9KGEpP2E6bmV3IGh0KGEsZCxoKTtyZXR1'@;
put 'cm4gc3QoKCk9Pntjb25zdHtvcGVyYXRvcjp2LHNvdXJjZTpNfT10aGlzO2YuYWRkKHY/di5jYWxsKGYsTSk6TT90aGlzLl9zdWJzY3JpYmUoZik6dGhpcy5fdHJ5U3Vic2NyaWJlKGYpKX0pLGZ9X3RyeVN1YnNjcmliZShhKXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZShhKX1jYXRjaChk'@;
put 'KXthLmVycm9yKGQpfX1mb3JFYWNoKGEsZCl7cmV0dXJuIG5ldyhkPWVuKGQpKSgoaCxmKT0+e2NvbnN0IHY9bmV3IGh0KHtuZXh0Ok09Pnt0cnl7YShNKX1jYXRjaChEKXtmKEQpLHYudW5zdWJzY3JpYmUoKX19LGVycm9yOmYsY29tcGxldGU6aH0pO3RoaXMuc3Vic2NyaWJlKHYpfSl9X3N1'@;
put 'YnNjcmliZShhKXt2YXIgZDtyZXR1cm4gbnVsbD09PShkPXRoaXMuc291cmNlKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5zdWJzY3JpYmUoYSl9W2hpXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uYSl7cmV0dXJuIElpKGEpKHRoaXMpfXRvUHJvbWlzZShhKXtyZXR1cm4gbmV3KGE9ZW4oYSkpKChk'@;
put 'LGgpPT57bGV0IGY7dGhpcy5zdWJzY3JpYmUodj0+Zj12LHY9PmgodiksKCk9PmQoZikpfSl9fXJldHVybiBjLmNyZWF0ZT1sPT5uZXcgYyhsKSxjfSkoKTtmdW5jdGlvbiBlbihjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPWM/P1F0LlByb21pc2UpJiZ2b2lkIDAhPT1sP2w6UHJvbWlzZX1j'@;
put 'b25zdCB2cj10dChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBXbj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgWHR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMu'@;
put 'Y2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRoaXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1uZXcgJGkodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1h'@;
put 'LGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJvdyBuZXcgdnJ9bmV4dChhKXtzdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVyc3x8KHRoaXMuY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKHRo'@;
put 'aXMub2JzZXJ2ZXJzKSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKWQubmV4dChhKX19KX1lcnJvcihhKXtzdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaGFzRXJyb3I9dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy50aHJv'@;
put 'd25FcnJvcj1hO2NvbnN0e29ic2VydmVyczpkfT10aGlzO2Zvcig7ZC5sZW5ndGg7KWQuc2hpZnQoKS5lcnJvcihhKX19KX1jb21wbGV0ZSgpe3N0KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJz'@;
put 'OmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBsZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVs'@;
put 'bD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgp'@;
put 'LHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5faW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJuIGR8fGg/UnQ6KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxs'@;
put 'LGYucHVzaChhKSxuZXcgcXQoKCk9Pnt0aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbCx1dChmLGEpfSkpfV9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGEpe2NvbnN0e2hhc0Vycm9yOmQsdGhyb3duRXJyb3I6aCxpc1N0b3BwZWQ6Zn09dGhpcztkP2EuZXJyb3IoaCk6ZiYmYS5jb21wbGV0ZSgp'@;
put 'fWFzT2JzZXJ2YWJsZSgpe2NvbnN0IGE9bmV3IFh0O3JldHVybiBhLnNvdXJjZT10aGlzLGF9fXJldHVybiBjLmNyZWF0ZT0obCxhKT0+bmV3ICRpKGwsYSksY30pKCk7Y2xhc3MgJGkgZXh0ZW5kcyBXbntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5kZXN0aW5hdGlvbj1sLHRoaXMu'@;
put 'c291cmNlPWF9bmV4dChsKXt2YXIgYSxkO251bGw9PT0oZD1udWxsPT09KGE9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWE/dm9pZCAwOmEubmV4dCl8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWVycm9yKGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0'@;
put 'aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6YS5lcnJvcil8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWNvbXBsZXRlKCl7dmFyIGwsYTtudWxsPT09KGE9bnVsbD09PShsPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmNvbXBsZXRlKXx8dm9pZCAwPT09YXx8YS5jYWxs'@;
put 'KGwpfV9zdWJzY3JpYmUobCl7dmFyIGEsZDtyZXR1cm4gbnVsbCE9PShkPW51bGw9PT0oYT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc3Vic2NyaWJlKGwpKSYmdm9pZCAwIT09ZD9kOlJ0fX1jbGFzcyBlaSBleHRlbmRzIFdue2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhp'@;
put 'cy5fdmFsdWU9bH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZSgpfV9zdWJzY3JpYmUobCl7Y29uc3QgYT1zdXBlci5fc3Vic2NyaWJlKGwpO3JldHVybiFhLmNsb3NlZCYmbC5uZXh0KHRoaXMuX3ZhbHVlKSxhfWdldFZhbHVlKCl7Y29uc3R7aGFzRXJyb3I6bCx0aHJvd25FcnJv'@;
put 'cjphLF92YWx1ZTpkfT10aGlzO2lmKGwpdGhyb3cgYTtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLGR9bmV4dChsKXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPWwpfX1mdW5jdGlvbiBRcihjKXtyZXR1cm4gJGUoYz8ubGlmdCl9ZnVuY3Rpb24gVmkoYyl7cmV0dXJuIGw9PntpZihRcihs'@;
put 'KSlyZXR1cm4gbC5saWZ0KGZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4gYyhhLHRoaXMpfWNhdGNoKGQpe3RoaXMuZXJyb3IoZCl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gTmkoYyxsLGEsZCxoKXtyZXR1'@;
put 'cm4gbmV3IElvKGMsbCxhLGQsaCl9Y2xhc3MgSW8gZXh0ZW5kcyByaXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCksdGhpcy5vbkZpbmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT12LHRoaXMuX25leHQ9YT9mdW5jdGlvbihNKXt0cnl7YShNKX1jYXRjaChEKXtsLmVy'@;
put 'cm9yKEQpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5jdGlvbihNKXt0cnl7aChNKX1jYXRjaChEKXtsLmVycm9yKEQpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKE0pe2wu'@;
put 'ZXJyb3IoTSl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmli'@;
put 'ZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZvaWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiBMcihjLGwpe3JldHVybiBWaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoTmkoZCxmPT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1jb25zdCBn'@;
put 'bz0iaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcyI7Y2xhc3MgUW4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGZ1bmN0aW9uIGNvKGMsbCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMoYyl9JHtsPyI6ICIrbDoiIn1gfShsLGEpKSx0aGlzLmNvZGU9bH19ZnVuY3Rpb24g'@;
put 'TnMoYyl7cmV0dXJue3RvU3RyaW5nOmN9LnRvU3RyaW5nKCl9Y29uc3QgZnU9Il9fcGFyYW1ldGVyc19fIjtmdW5jdGlvbiBFbyhjLGwsYSl7cmV0dXJuIE5zKCgpPT57Y29uc3QgZD1mdW5jdGlvbiBpcihjKXtyZXR1cm4gZnVuY3Rpb24oLi4uYSl7aWYoYyl7Y29uc3QgZD1jKC4uLmEpO2Zv'@;
put 'cihjb25zdCBoIGluIGQpdGhpc1toXT1kW2hdfX19KGwpO2Z1bmN0aW9uIGgoLi4uZil7aWYodGhpcyBpbnN0YW5jZW9mIGgpcmV0dXJuIGQuYXBwbHkodGhpcyxmKSx0aGlzO2NvbnN0IHY9bmV3IGgoLi4uZik7cmV0dXJuIE0uYW5ub3RhdGlvbj12LE07ZnVuY3Rpb24gTShELFosbmUpe2Nv'@;
put 'bnN0IGNlPUQuaGFzT3duUHJvcGVydHkoZnUpP0RbZnVdOk9iamVjdC5kZWZpbmVQcm9wZXJ0eShELGZ1LHt2YWx1ZTpbXX0pW2Z1XTtmb3IoO2NlLmxlbmd0aDw9bmU7KWNlLnB1c2gobnVsbCk7cmV0dXJuKGNlW25lXT1jZVtuZV18fFtdKS5wdXNoKHYpLER9fXJldHVybiBhJiYoaC5wcm90'@;
put 'b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkpLGgucHJvdG90eXBlLm5nTWV0YWRhdGFOYW1lPWMsaC5hbm5vdGF0aW9uQ2xzPWgsaH0pfWNvbnN0IFZ0PWdsb2JhbFRoaXM7ZnVuY3Rpb24gTm8oYyl7Zm9yKGxldCBsIGluIGMpaWYoY1tsXT09PU5vKXJldHVybiBsO3Rocm93IEVy'@;
put 'cm9yKCJDb3VsZCBub3QgZmluZCByZW5hbWVkIHByb3BlcnR5IG9uIHRhcmdldCBvYmplY3QuIil9ZnVuY3Rpb24gSXUoYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJiFjLmhhc093blByb3BlcnR5KGEpJiYoY1thXT1sW2FdKX1mdW5jdGlvbiBQcihjKXtpZigi'@;
put 'c3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoQXJyYXkuaXNBcnJheShjKSlyZXR1cm4iWyIrYy5tYXAoUHIpLmpvaW4oIiwgIikrIl0iO2lmKG51bGw9PWMpcmV0dXJuIiIrYztpZihjLm92ZXJyaWRkZW5OYW1lKXJldHVybmAke2Mub3ZlcnJpZGRlbk5hbWV9YDtpZihjLm5hbWUpcmV0'@;
put 'dXJuYCR7Yy5uYW1lfWA7Y29uc3QgbD1jLnRvU3RyaW5nKCk7aWYobnVsbD09bClyZXR1cm4iIitsO2NvbnN0IGE9bC5pbmRleE9mKCJcbiIpO3JldHVybi0xPT09YT9sOmwuc3Vic3RyaW5nKDAsYSl9ZnVuY3Rpb24gc2QoYyxsKXtyZXR1cm4gbnVsbD09Y3x8IiI9PT1jP251bGw9PT1sPyIi'@;
put 'Omw6bnVsbD09bHx8IiI9PT1sP2M6YysiICIrbH1jb25zdCBhZj1Obyh7X19mb3J3YXJkX3JlZl9fOk5vfSk7ZnVuY3Rpb24ga3MoYyl7cmV0dXJuIGMuX19mb3J3YXJkX3JlZl9fPWtzLGMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gUHIodGhpcygpKX0sY31mdW5jdGlvbiBZaShjKXty'@;
put 'ZXR1cm4geWwoYyk/YygpOmN9ZnVuY3Rpb24geWwoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJmMuaGFzT3duUHJvcGVydHkoYWYpJiZjLl9fZm9yd2FyZF9yZWZfXz09PWtzfWZ1bmN0aW9uIG9uKGMpe3JldHVybnt0b2tlbjpjLnRva2VuLHByb3ZpZGVkSW46Yy5wcm92aWRlZElu'@;
put 'fHxudWxsLGZhY3Rvcnk6Yy5mYWN0b3J5LHZhbHVlOnZvaWQgMH19ZnVuY3Rpb24gQXIoYyl7cmV0dXJue3Byb3ZpZGVyczpjLnByb3ZpZGVyc3x8W10saW1wb3J0czpjLmltcG9ydHN8fFtdfX1mdW5jdGlvbiBQYShjKXtyZXR1cm4gYWwoYyxDcyl8fGFsKGMsSGEpfWZ1bmN0aW9uIGFsKGMs'@;
put 'bCl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkobCk/Y1tsXTpudWxsfWZ1bmN0aW9uIFZzKGMpe3JldHVybiBjJiYoYy5oYXNPd25Qcm9wZXJ0eShCbCl8fGMuaGFzT3duUHJvcGVydHkoa2EpKT9jW0JsXTpudWxsfWNvbnN0IENzPU5vKHtcdTAyNzVwcm92Ok5vfSksQmw9Tm8oe1x1MDI3NWlu'@;
put 'ajpOb30pLEhhPU5vKHtuZ0luamVjdGFibGVEZWY6Tm99KSxrYT1Obyh7bmdJbmplY3RvckRlZjpOb30pO2NsYXNzIFN0e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fZGVzYz1sLHRoaXMubmdNZXRhZGF0YU5hbWU9IkluamVjdGlvblRva2VuIix0aGlzLlx1MDI3NXByb3Y9dm9pZCAwLCJudW1i'@;
put 'ZXIiPT10eXBlb2YgYT90aGlzLl9fTkdfRUxFTUVOVF9JRF9fPWE6dm9pZCAwIT09YSYmKHRoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46dGhpcyxwcm92aWRlZEluOmEucHJvdmlkZWRJbnx8InJvb3QiLGZhY3Rvcnk6YS5mYWN0b3J5fSkpfWdldCBtdWx0aSgpe3JldHVybiB0aGlzfXRvU3Ry'@;
put 'aW5nKCl7cmV0dXJuYEluamVjdGlvblRva2VuICR7dGhpcy5fZGVzY31gfX1mdW5jdGlvbiBCbyhjKXtyZXR1cm4gYyYmISFjLlx1MDI3NXByb3ZpZGVyc31jb25zdCAkYT1Obyh7XHUwMjc1Y21wOk5vfSksS2w9Tm8oe1x1MDI3NWRpcjpOb30pLHRhPU5vKHtcdTAyNzVwaXBlOk5vfSksX2E9'@;
put 'Tm8oe1x1MDI3NW1vZDpOb30pLGppPU5vKHtcdTAyNzVmYWM6Tm99KSxPYz1Obyh7X19OR19FTEVNRU5UX0lEX186Tm99KSxqbD1Obyh7X19OR19FTlZfSURfXzpOb30pO2Z1bmN0aW9uIFNvKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9jOm51bGw9PWM/IiI6U3RyaW5nKGMpfWZ1bmN0'@;
put 'aW9uIFNzKGMsbCl7dGhyb3cgbmV3IFFuKC0yMDEsITEpfXZhciBpbz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRlZmF1bHQ9MF09IkRlZmF1bHQiLGNbYy5Ib3N0PTFdPSJIb3N0IixjW2MuU2VsZj0yXT0iU2VsZiIsY1tjLlNraXBTZWxmPTRdPSJTa2lwU2VsZiIsY1tjLk9wdGlvbmFsPThd'@;
put 'PSJPcHRpb25hbCIsY30oaW98fHt9KTtsZXQgYWE7ZnVuY3Rpb24gcjUoKXtyZXR1cm4gYWF9ZnVuY3Rpb24gX2woYyl7Y29uc3QgbD1hYTtyZXR1cm4gYWE9YyxsfWZ1bmN0aW9uIG5oKGMsbCxhKXtjb25zdCBkPVBhKGMpO3JldHVybiBkJiYicm9vdCI9PWQucHJvdmlkZWRJbj92b2lkIDA9'@;
put 'PT1kLnZhbHVlP2QudmFsdWU9ZC5mYWN0b3J5KCk6ZC52YWx1ZTphJmlvLk9wdGlvbmFsP251bGw6dm9pZCAwIT09bD9sOnZvaWQgU3MoKX1jb25zdCBLMD17fSxwdT0iX19OR19ESV9GTEFHX18iLFBjPSJuZ1RlbXBUb2tlblBhdGgiLFJ3PS9cbi9nbSxzbD0iX19zb3VyY2UiO2xldCBJMztm'@;
put 'dW5jdGlvbiByaChjKXtjb25zdCBsPUkzO3JldHVybiBJMz1jLGx9ZnVuY3Rpb24gRDEoYyxsPWlvLkRlZmF1bHQpe2lmKHZvaWQgMD09PUkzKXRocm93IG5ldyBRbigtMjAzLCExKTtyZXR1cm4gbnVsbD09PUkzP25oKGMsdm9pZCAwLGwpOkkzLmdldChjLGwmaW8uT3B0aW9uYWw/bnVsbDp2'@;
put 'b2lkIDAsbCl9ZnVuY3Rpb24geHIoYyxsPWlvLkRlZmF1bHQpe3JldHVybihyNSgpfHxEMSkoWWkoYyksbCl9ZnVuY3Rpb24gZmkoYyxsPWlvLkRlZmF1bHQpe3JldHVybiB4cihjLG81KGwpKX1mdW5jdGlvbiBvNShjKXtyZXR1cm4gdHlwZW9mIGM+InUifHwibnVtYmVyIj09dHlwZW9mIGM/'@;
put 'YzooYy5vcHRpb25hbCYmOCl8KGMuaG9zdCYmMSl8KGMuc2VsZiYmMil8KGMuc2tpcFNlbGYmJjQpfWZ1bmN0aW9uIGE1KGMpe2NvbnN0IGw9W107Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9WWkoY1thXSk7aWYoQXJyYXkuaXNBcnJheShkKSl7aWYoMD09PWQubGVuZ3Ro'@;
put 'KXRocm93IG5ldyBRbig5MDAsITEpO2xldCBoLGY9aW8uRGVmYXVsdDtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7Y29uc3QgTT1kW3ZdLEQ9ZGYoTSk7Im51bWJlciI9PXR5cGVvZiBEPy0xPT09RD9oPU0udG9rZW46Znw9RDpoPU19bC5wdXNoKHhyKGgsZikpfWVsc2UgbC5wdXNoKHhy'@;
put 'KGQpKX1yZXR1cm4gbH1mdW5jdGlvbiBlMChjLGwpe3JldHVybiBjW3B1XT1sLGMucHJvdG90eXBlW3B1XT1sLGN9ZnVuY3Rpb24gZGYoYyl7cmV0dXJuIGNbcHVdfWNvbnN0IGw1PWUwKEVvKCJJbmplY3QiLGM9Pih7dG9rZW46Y30pKSwtMSksSTE9ZTAoRW8oIk9wdGlvbmFsIiksOCksY2Q9'@;
put 'ZTAoRW8oIlNraXBTZWxmIiksNCk7ZnVuY3Rpb24gZ3UoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eShqaSk/Y1tqaV06bnVsbH1mdW5jdGlvbiBSMyhjLGwpe2MuZm9yRWFjaChhPT5BcnJheS5pc0FycmF5KGEpP1IzKGEsbCk6bChhKSl9ZnVuY3Rpb24gUGwoYyxsLGEpe2w+PWMubGVu'@;
put 'Z3RoP2MucHVzaChhKTpjLnNwbGljZShsLDAsYSl9ZnVuY3Rpb24gUnUoYyxsKXtyZXR1cm4gbD49Yy5sZW5ndGgtMT9jLnBvcCgpOmMuc3BsaWNlKGwsMSlbMF19ZnVuY3Rpb24geTAoYyxsLGEpe2xldCBkPWUyKGMsbCk7cmV0dXJuIGQ+PTA/Y1sxfGRdPWE6KGQ9fmQsZnVuY3Rpb24gY3Yo'@;
put 'YyxsLGEsZCl7bGV0IGg9Yy5sZW5ndGg7aWYoaD09bCljLnB1c2goYSxkKTtlbHNlIGlmKDE9PT1oKWMucHVzaChkLGNbMF0pLGNbMF09YTtlbHNle2ZvcihoLS0sYy5wdXNoKGNbaC0xXSxjW2hdKTtoPmw7KWNbaF09Y1toLTJdLGgtLTtjW2xdPWEsY1tsKzFdPWR9fShjLGQsbCxhKSksZH1m'@;
put 'dW5jdGlvbiBUNihjLGwpe2NvbnN0IGE9ZTIoYyxsKTtpZihhPj0wKXJldHVybiBjWzF8YV19ZnVuY3Rpb24gZTIoYyxsKXtyZXR1cm4gZnVuY3Rpb24gUjEoYyxsLGEpe2xldCBkPTAsaD1jLmxlbmd0aD4+YTtmb3IoO2ghPT1kOyl7Y29uc3QgZj1kKyhoLWQ+PjEpLHY9Y1tmPDxhXTtpZihs'@;
put 'PT09dilyZXR1cm4gZjw8YTt2Pmw/aD1mOmQ9ZisxfXJldHVybn4oaDw8YSl9KGMsbCwxKX1jb25zdCBEMD17fSx0cz1bXSx0Mj1uZXcgU3QoIiIpLEwzPW5ldyBTdCgiIiwtMSksQTY9bmV3IFN0KCIiKTtjbGFzcyBjNXtnZXQobCxhPUswKXtpZihhPT09SzApe2NvbnN0IGQ9bmV3IEVycm9y'@;
put 'KGBOdWxsSW5qZWN0b3JFcnJvcjogTm8gcHJvdmlkZXIgZm9yICR7UHIobCl9IWApO3Rocm93IGQubmFtZT0iTnVsbEluamVjdG9yRXJyb3IiLGR9cmV0dXJuIGF9fXZhciBPMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk9uUHVzaD0wXT0iT25QdXNoIixjW2MuRGVmYXVsdD0xXT0iRGVmYXVs'@;
put 'dCIsY30oTzN8fHt9KSxYcz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkVtdWxhdGVkPTBdPSJFbXVsYXRlZCIsY1tjLk5vbmU9Ml09Ik5vbmUiLGNbYy5TaGFkb3dEb209M109IlNoYWRvd0RvbSIsY30oWHN8fHt9KSxqbj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNb'@;
put 'Yy5TaWduYWxCYXNlZD0xXT0iU2lnbmFsQmFzZWQiLGNbYy5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybT0yXT0iSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0iLGN9KGpufHx7fSk7ZnVuY3Rpb24gRncoYyxsLGEpe2xldCBkPWMubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgaD1jLmluZGV4T2Yo'@;
put 'bCxhKTtpZigtMT09PWgpcmV0dXJuIGg7aWYoMD09PWh8fGMuY2hhckNvZGVBdChoLTEpPD0zMil7Y29uc3QgZj1sLmxlbmd0aDtpZihoK2Y9PT1kfHxjLmNoYXJDb2RlQXQoaCtmKTw9MzIpcmV0dXJuIGh9YT1oKzF9fWZ1bmN0aW9uIG00KGMsbCxhKXtsZXQgZD0wO2Zvcig7ZDxhLmxlbmd0'@;
put 'aDspe2NvbnN0IGg9YVtkXTtpZigibnVtYmVyIj09dHlwZW9mIGgpe2lmKDAhPT1oKWJyZWFrO2QrKztjb25zdCBmPWFbZCsrXSx2PWFbZCsrXSxNPWFbZCsrXTtjLnNldEF0dHJpYnV0ZShsLHYsTSxmKX1lbHNle2NvbnN0IGY9aCx2PWFbKytkXTtkNShmKT9jLnNldFByb3BlcnR5KGwsZix2'@;
put 'KTpjLnNldEF0dHJpYnV0ZShsLGYsdiksZCsrfX1yZXR1cm4gZH1mdW5jdGlvbiB1NShjKXtyZXR1cm4gMz09PWN8fDQ9PT1jfHw2PT09Y31mdW5jdGlvbiBkNShjKXtyZXR1cm4gNjQ9PT1jLmNoYXJDb2RlQXQoMCl9ZnVuY3Rpb24gcGYoYyxsKXtpZihudWxsIT09bCYmMCE9PWwubGVuZ3Ro'@;
put 'KWlmKG51bGw9PT1jfHwwPT09Yy5sZW5ndGgpYz1sLnNsaWNlKCk7ZWxzZXtsZXQgYT0tMTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKyl7Y29uc3QgaD1sW2RdOyJudW1iZXIiPT10eXBlb2YgaD9hPWg6MD09PWF8fGs2KGMsYSxoLG51bGwsLTE9PT1hfHwyPT09YT9sWysrZF06bnVsbCl9'@;
put 'fXJldHVybiBjfWZ1bmN0aW9uIGs2KGMsbCxhLGQsaCl7bGV0IGY9MCx2PWMubGVuZ3RoO2lmKC0xPT09bCl2PS0xO2Vsc2UgZm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2YrK107aWYoIm51bWJlciI9PXR5cGVvZiBNKXtpZihNPT09bCl7dj0tMTticmVha31pZihNPmwpe3Y9Zi0xO2Jy'@;
put 'ZWFrfX19Zm9yKDtmPGMubGVuZ3RoOyl7Y29uc3QgTT1jW2ZdO2lmKCJudW1iZXIiPT10eXBlb2YgTSlicmVhaztpZihNPT09YSl7aWYobnVsbD09PWQpcmV0dXJuIHZvaWQobnVsbCE9PWgmJihjW2YrMV09aCkpO2lmKGQ9PT1jW2YrMV0pcmV0dXJuIHZvaWQoY1tmKzJdPWgpfWYrKyxudWxs'@;
put 'IT09ZCYmZisrLG51bGwhPT1oJiZmKyt9LTEhPT12JiYoYy5zcGxpY2UodiwwLGwpLGY9disxKSxjLnNwbGljZShmKyssMCxhKSxudWxsIT09ZCYmYy5zcGxpY2UoZisrLDAsZCksbnVsbCE9PWgmJmMuc3BsaWNlKGYrKywwLGgpfWNvbnN0IHV2PSJuZy10ZW1wbGF0ZSI7ZnVuY3Rpb24gRDYo'@;
put 'YyxsLGEsZCl7bGV0IGg9MDtpZihkKXtmb3IoO2g8bC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YgbFtoXTtoKz0yKWlmKCJjbGFzcyI9PT1sW2hdJiYtMSE9PUZ3KGxbaCsxXS50b0xvd2VyQ2FzZSgpLGEsMCkpcmV0dXJuITB9ZWxzZSBpZih2NChjKSlyZXR1cm4hMTtpZihoPWwuaW5kZXhP'@;
put 'ZigxLGgpLGg+LTEpe2xldCBmO2Zvcig7KytoPGwubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mKGY9bFtoXSk7KWlmKGYudG9Mb3dlckNhc2UoKT09PWEpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdjQoYyl7cmV0dXJuIDQ9PT1jLnR5cGUmJmMudmFsdWUhPT11dn1mdW5jdGlvbiBuMChj'@;
put 'LGwsYSl7cmV0dXJuIGw9PT0oNCE9PWMudHlwZXx8YT9jLnZhbHVlOnV2KX1mdW5jdGlvbiBIdyhjLGwsYSl7bGV0IGQ9NDtjb25zdCBoPWMuYXR0cnMsZj1udWxsIT09aD9mdW5jdGlvbiBodihjKXtmb3IobGV0IGw9MDtsPGMubGVuZ3RoO2wrKylpZih1NShjW2xdKSlyZXR1cm4gbDtyZXR1'@;
put 'cm4gYy5sZW5ndGh9KGgpOjA7bGV0IHY9ITE7Zm9yKGxldCBNPTA7TTxsLmxlbmd0aDtNKyspe2NvbnN0IEQ9bFtNXTtpZigibnVtYmVyIiE9dHlwZW9mIEQpe2lmKCF2KWlmKDQmZCl7aWYoZD0yfDEmZCwiIiE9PUQmJiFuMChjLEQsYSl8fCIiPT09RCYmMT09PWwubGVuZ3RoKXtpZihNYyhk'@;
put 'KSlyZXR1cm4hMTt2PSEwfX1lbHNlIGlmKDgmZCl7aWYobnVsbD09PWh8fCFENihjLGgsRCxhKSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMH19ZWxzZXtjb25zdCBaPWxbKytNXSxuZT1QMyhELGgsdjQoYyksYSk7aWYoLTE9PT1uZSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMDtjb250aW51ZX1p'@;
put 'ZigiIiE9PVope2xldCBjZTtpZihjZT1uZT5mPyIiOmhbbmUrMV0udG9Mb3dlckNhc2UoKSwyJmQmJlohPT1jZSl7aWYoTWMoZCkpcmV0dXJuITE7dj0hMH19fX1lbHNle2lmKCF2JiYhTWMoZCkmJiFNYyhEKSlyZXR1cm4hMTtpZih2JiZNYyhEKSljb250aW51ZTt2PSExLGQ9RHwxJmR9fXJl'@;
put 'dHVybiBNYyhkKXx8dn1mdW5jdGlvbiBNYyhjKXtyZXR1cm4hKDEmYyl9ZnVuY3Rpb24gUDMoYyxsLGEsZCl7aWYobnVsbD09PWwpcmV0dXJuLTE7bGV0IGg9MDtpZihkfHwhYSl7bGV0IGY9ITE7Zm9yKDtoPGwubGVuZ3RoOyl7Y29uc3Qgdj1sW2hdO2lmKHY9PT1jKXJldHVybiBoO2lmKDM9'@;
put 'PT12fHw2PT09dilmPSEwO2Vsc2V7aWYoMT09PXZ8fDI9PT12KXtsZXQgTT1sWysraF07Zm9yKDsic3RyaW5nIj09dHlwZW9mIE07KU09bFsrK2hdO2NvbnRpbnVlfWlmKDQ9PT12KWJyZWFrO2lmKDA9PT12KXtoKz00O2NvbnRpbnVlfX1oKz1mPzE6Mn1yZXR1cm4tMX1yZXR1cm4gZnVuY3Rp'@;
put 'b24gZnYoYyxsKXtsZXQgYT1jLmluZGV4T2YoNCk7aWYoYT4tMSlmb3IoYSsrO2E8Yy5sZW5ndGg7KXtjb25zdCBkPWNbYV07aWYoIm51bWJlciI9PXR5cGVvZiBkKXJldHVybi0xO2lmKGQ9PT1sKXJldHVybiBhO2ErK31yZXR1cm4tMX0obCxjKX1mdW5jdGlvbiBiNChjLGwsYT0hMSl7Zm9y'@;
put 'KGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYoSHcoYyxsW2RdLGEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIE53KGMsbCl7ZTpmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl7Y29uc3QgZD1sW2FdO2lmKGMubGVuZ3RoPT09ZC5sZW5ndGgpe2ZvcihsZXQgaD0wO2g8Yy5sZW5ndGg7'@;
put 'aCsrKWlmKGNbaF0hPT1kW2hdKWNvbnRpbnVlIGU7cmV0dXJuITB9fXJldHVybiExfWZ1bmN0aW9uIHB2KGMsbCl7cmV0dXJuIGM/Ijpub3QoIitsLnRyaW0oKSsiKSI6bH1mdW5jdGlvbiBWdyhjKXtsZXQgbD1jWzBdLGE9MSxkPTIsaD0iIixmPSExO2Zvcig7YTxjLmxlbmd0aDspe2xldCB2'@;
put 'PWNbYV07aWYoInN0cmluZyI9PXR5cGVvZiB2KWlmKDImZCl7Y29uc3QgTT1jWysrYV07aCs9IlsiK3YrKE0ubGVuZ3RoPjA/Jz0iJytNKyciJzoiIikrIl0ifWVsc2UgOCZkP2grPSIuIit2OjQmZCYmKGgrPSIgIit2KTtlbHNlIiIhPT1oJiYhTWModikmJihsKz1wdihmLGgpLGg9IiIpLGQ9'@;
put 'dixmPWZ8fCFNYyhkKTthKyt9cmV0dXJuIiIhPT1oJiYobCs9cHYoZixoKSksbH1mdW5jdGlvbiBWcihjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPUk2KGMpLGE9ey4uLmwsZGVjbHM6Yy5kZWNscyx2YXJzOmMudmFycyx0ZW1wbGF0ZTpjLnRlbXBsYXRlLGNvbnN0czpjLmNvbnN0c3x8bnVs'@;
put 'bCxuZ0NvbnRlbnRTZWxlY3RvcnM6Yy5uZ0NvbnRlbnRTZWxlY3RvcnMsb25QdXNoOmMuY2hhbmdlRGV0ZWN0aW9uPT09TzMuT25QdXNoLGRpcmVjdGl2ZURlZnM6bnVsbCxwaXBlRGVmczpudWxsLGRlcGVuZGVuY2llczpsLnN0YW5kYWxvbmUmJmMuZGVwZW5kZW5jaWVzfHxudWxsLGdldFN0'@;
put 'YW5kYWxvbmVJbmplY3RvcjpudWxsLHNpZ25hbHM6Yy5zaWduYWxzPz8hMSxkYXRhOmMuZGF0YXx8e30sZW5jYXBzdWxhdGlvbjpjLmVuY2Fwc3VsYXRpb258fFhzLkVtdWxhdGVkLHN0eWxlczpjLnN0eWxlc3x8dHMsXzpudWxsLHNjaGVtYXM6Yy5zY2hlbWFzfHxudWxsLHRWaWV3Om51bGws'@;
put 'aWQ6IiJ9O0kwKGEpO2NvbnN0IGQ9Yy5kZXBlbmRlbmNpZXM7cmV0dXJuIGEuZGlyZWN0aXZlRGVmcz1mNShkLCExKSxhLnBpcGVEZWZzPWY1KGQsITApLGEuaWQ9ZnVuY3Rpb24gancoYyl7bGV0IGw9MDtjb25zdCBhPVtjLnNlbGVjdG9ycyxjLm5nQ29udGVudFNlbGVjdG9ycyxjLmhvc3RW'@;
put 'YXJzLGMuaG9zdEF0dHJzLGMuY29uc3RzLGMudmFycyxjLmRlY2xzLGMuZW5jYXBzdWxhdGlvbixjLnN0YW5kYWxvbmUsYy5zaWduYWxzLGMuZXhwb3J0QXMsSlNPTi5zdHJpbmdpZnkoYy5pbnB1dHMpLEpTT04uc3RyaW5naWZ5KGMub3V0cHV0cyksT2JqZWN0LmdldE93blByb3BlcnR5TmFt'@;
put 'ZXMoYy50eXBlLnByb3RvdHlwZSksISFjLmNvbnRlbnRRdWVyaWVzLCEhYy52aWV3UXVlcnldLmpvaW4oInwiKTtmb3IoY29uc3QgaCBvZiBhKWw9TWF0aC5pbXVsKDMxLGwpK2guY2hhckNvZGVBdCgwKXwwO3JldHVybiBsKz0yMTQ3NDgzNjQ4LCJjIitsfShhKSxhfSl9ZnVuY3Rpb24gZ2Yo'@;
put 'Yyl7cmV0dXJuIFZhKGMpfHx4YyhjKX1mdW5jdGlvbiBoNShjKXtyZXR1cm4gbnVsbCE9PWN9ZnVuY3Rpb24ga2koYyl7cmV0dXJuIE5zKCgpPT4oe3R5cGU6Yy50eXBlLGJvb3RzdHJhcDpjLmJvb3RzdHJhcHx8dHMsZGVjbGFyYXRpb25zOmMuZGVjbGFyYXRpb25zfHx0cyxpbXBvcnRzOmMu'@;
put 'aW1wb3J0c3x8dHMsZXhwb3J0czpjLmV4cG9ydHN8fHRzLHRyYW5zaXRpdmVDb21waWxlU2NvcGVzOm51bGwsc2NoZW1hczpjLnNjaGVtYXN8fG51bGwsaWQ6Yy5pZHx8bnVsbH0pKX1mdW5jdGlvbiB5NChjLGwpe2lmKG51bGw9PWMpcmV0dXJuIEQwO2NvbnN0IGE9e307Zm9yKGNvbnN0IGQg'@;
put 'aW4gYylpZihjLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWNbZF07bGV0IGYsdixNPWpuLk5vbmU7QXJyYXkuaXNBcnJheShoKT8oTT1oWzBdLGY9aFsxXSx2PWhbMl0/P2YpOihmPWgsdj1oKSxsPyhhW2ZdPU0hPT1qbi5Ob25lP1tkLE1dOmQsbFtmXT12KTphW2ZdPWR9cmV0dXJuIGF9'@;
put 'ZnVuY3Rpb24gRXIoYyl7cmV0dXJuIE5zKCgpPT57Y29uc3QgbD1JNihjKTtyZXR1cm4gSTAobCksbH0pfWZ1bmN0aW9uIGxsKGMpe3JldHVybnt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSxmYWN0b3J5Om51bGwscHVyZTohMSE9PWMucHVyZSxzdGFuZGFsb25lOiEwPT09Yy5zdGFuZGFsb25l'@;
put 'LG9uRGVzdHJveTpjLnR5cGUucHJvdG90eXBlLm5nT25EZXN0cm95fHxudWxsfX1mdW5jdGlvbiBWYShjKXtyZXR1cm4gY1skYV18fG51bGx9ZnVuY3Rpb24geGMoYyl7cmV0dXJuIGNbS2xdfHxudWxsfWZ1bmN0aW9uIFFjKGMpe3JldHVybiBjW3RhXXx8bnVsbH1mdW5jdGlvbiBMdShjLGwp'@;
put 'e2NvbnN0IGE9Y1tfYV18fG51bGw7aWYoIWEmJiEwPT09bCl0aHJvdyBuZXcgRXJyb3IoYFR5cGUgJHtQcihjKX0gZG9lcyBub3QgaGF2ZSAnXHUwMjc1bW9kJyBwcm9wZXJ0eS5gKTtyZXR1cm4gYX1mdW5jdGlvbiBJNihjKXtjb25zdCBsPXt9O3JldHVybnt0eXBlOmMudHlwZSxwcm92aWRl'@;
put 'cnNSZXNvbHZlcjpudWxsLGZhY3Rvcnk6bnVsbCxob3N0QmluZGluZ3M6Yy5ob3N0QmluZGluZ3N8fG51bGwsaG9zdFZhcnM6Yy5ob3N0VmFyc3x8MCxob3N0QXR0cnM6Yy5ob3N0QXR0cnN8fG51bGwsY29udGVudFF1ZXJpZXM6Yy5jb250ZW50UXVlcmllc3x8bnVsbCxkZWNsYXJlZElucHV0'@;
put 'czpsLGlucHV0VHJhbnNmb3JtczpudWxsLGlucHV0Q29uZmlnOmMuaW5wdXRzfHxEMCxleHBvcnRBczpjLmV4cG9ydEFzfHxudWxsLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsc2lnbmFsczohMD09PWMuc2lnbmFscyxzZWxlY3RvcnM6Yy5zZWxlY3RvcnN8fHRzLHZpZXdRdWVyeTpj'@;
put 'LnZpZXdRdWVyeXx8bnVsbCxmZWF0dXJlczpjLmZlYXR1cmVzfHxudWxsLHNldElucHV0Om51bGwsZmluZEhvc3REaXJlY3RpdmVEZWZzOm51bGwsaG9zdERpcmVjdGl2ZXM6bnVsbCxpbnB1dHM6eTQoYy5pbnB1dHMsbCksb3V0cHV0czp5NChjLm91dHB1dHMpLGRlYnVnSW5mbzpudWxsfX1m'@;
put 'dW5jdGlvbiBJMChjKXtjLmZlYXR1cmVzPy5mb3JFYWNoKGw9PmwoYykpfWZ1bmN0aW9uIGY1KGMsbCl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgYT1sP1FjOmdmO3JldHVybigpPT4oImZ1bmN0aW9uIj09dHlwZW9mIGM/YygpOmMpLm1hcChkPT5hKGQpKS5maWx0ZXIoaDUpfWZ1bmN0aW9u'@;
put 'IHp3KC4uLmMpe3JldHVybntcdTAyNzVwcm92aWRlcnM6aWgoMCxjKSxcdTAyNzVmcm9tTmdNb2R1bGU6ITB9fWZ1bmN0aW9uIGloKGMsLi4ubCl7Y29uc3QgYT1bXSxkPW5ldyBTZXQ7bGV0IGg7Y29uc3QgZj12PT57YS5wdXNoKHYpfTtyZXR1cm4gUjMobCx2PT57Y29uc3QgTT12O180KE0s'@;
put 'ZixbXSxkKSYmKGh8fD1bXSxoLnB1c2goTSkpfSksdm9pZCAwIT09aCYmbXYoaCxmKSxhfWZ1bmN0aW9uIG12KGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0e25nTW9kdWxlOmQscHJvdmlkZXJzOmh9PWNbYV07UjYoaCxmPT57bChmLGQpfSl9fWZ1bmN0aW9uIF80KGMs'@;
put 'bCxhLGQpe2lmKCEoYz1ZaShjKSkpcmV0dXJuITE7bGV0IGg9bnVsbCxmPVZzKGMpO2NvbnN0IHY9IWYmJlZhKGMpO2lmKGZ8fHYpe2lmKHYmJiF2LnN0YW5kYWxvbmUpcmV0dXJuITE7aD1jfWVsc2V7Y29uc3QgRD1jLm5nTW9kdWxlO2lmKGY9VnMoRCksIWYpcmV0dXJuITE7aD1EfWNvbnN0'@;
put 'IE09ZC5oYXMoaCk7aWYodil7aWYoTSlyZXR1cm4hMTtpZihkLmFkZChoKSx2LmRlcGVuZGVuY2llcyl7Y29uc3QgRD0iZnVuY3Rpb24iPT10eXBlb2Ygdi5kZXBlbmRlbmNpZXM/di5kZXBlbmRlbmNpZXMoKTp2LmRlcGVuZGVuY2llcztmb3IoY29uc3QgWiBvZiBEKV80KFosbCxhLGQpfX1l'@;
put 'bHNle2lmKCFmKXJldHVybiExO3tpZihudWxsIT1mLmltcG9ydHMmJiFNKXtsZXQgWjtkLmFkZChoKTt0cnl7UjMoZi5pbXBvcnRzLG5lPT57XzQobmUsbCxhLGQpJiYoWnx8PVtdLFoucHVzaChuZSkpfSl9ZmluYWxseXt9dm9pZCAwIT09WiYmbXYoWixsKX1pZighTSl7Y29uc3QgWj1ndSho'@;
put 'KXx8KCgpPT5uZXcgaCk7bCh7cHJvdmlkZTpoLHVzZUZhY3Rvcnk6WixkZXBzOnRzfSxoKSxsKHtwcm92aWRlOkE2LHVzZVZhbHVlOmgsbXVsdGk6ITB9LGgpLGwoe3Byb3ZpZGU6dDIsdXNlVmFsdWU6KCk9PnhyKGgpLG11bHRpOiEwfSxoKX1jb25zdCBEPWYucHJvdmlkZXJzO2lmKG51bGwh'@;
put 'PUQmJiFNKXtjb25zdCBaPWM7UjYoRCxuZT0+e2wobmUsWil9KX19fXJldHVybiBoIT09YyYmdm9pZCAwIT09Yy5wcm92aWRlcnN9ZnVuY3Rpb24gUjYoYyxsKXtmb3IobGV0IGEgb2YgYylCbyhhKSYmKGE9YS5cdTAyNzVwcm92aWRlcnMpLEFycmF5LmlzQXJyYXkoYSk/UjYoYSxsKTpsKGEp'@;
put 'fWNvbnN0IFV3PU5vKHtwcm92aWRlOlN0cmluZyx1c2VWYWx1ZTpOb30pO2Z1bmN0aW9uIEw2KGMpe3JldHVybiBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiZVdyBpbiBjfWZ1bmN0aW9uIHZmKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWNvbnN0IFA2PW5ldyBTdCgiIiks'@;
put 'RjM9e30sWnc9e307bGV0IEY2O2Z1bmN0aW9uIEgzKCl7cmV0dXJuIHZvaWQgMD09PUY2JiYoRjY9bmV3IGM1KSxGNn1jbGFzcyBoY3t9Y2xhc3MgdWQgZXh0ZW5kcyBoY3tnZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1jb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigp'@;
put 'LHRoaXMucGFyZW50PWEsdGhpcy5zb3VyY2U9ZCx0aGlzLnNjb3Blcz1oLHRoaXMucmVjb3Jkcz1uZXcgTWFwLHRoaXMuX25nT25EZXN0cm95SG9va3M9bmV3IFNldCx0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITEsZzUobCx2PT50aGlzLnByb2Nlc3NQcm92aWRl'@;
put 'cih2KSksdGhpcy5yZWNvcmRzLnNldChMMyxOMyh2b2lkIDAsdGhpcykpLGguaGFzKCJlbnZpcm9ubWVudCIpJiZ0aGlzLnJlY29yZHMuc2V0KGhjLE4zKHZvaWQgMCx0aGlzKSk7Y29uc3QgZj10aGlzLnJlY29yZHMuZ2V0KFA2KTtudWxsIT1mJiYic3RyaW5nIj09dHlwZW9mIGYudmFsdWUm'@;
put 'JnRoaXMuc2NvcGVzLmFkZChmLnZhbHVlKSx0aGlzLmluamVjdG9yRGVmVHlwZXM9bmV3IFNldCh0aGlzLmdldChBNix0cyxpby5TZWxmKSl9ZGVzdHJveSgpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fZGVzdHJveWVkPSEwO2NvbnN0IGw9X2UobnVsbCk7dHJ5e2Zvcihjb25z'@;
put 'dCBkIG9mIHRoaXMuX25nT25EZXN0cm95SG9va3MpZC5uZ09uRGVzdHJveSgpO2NvbnN0IGE9dGhpcy5fb25EZXN0cm95SG9va3M7dGhpcy5fb25EZXN0cm95SG9va3M9W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9ZmluYWxseXt0aGlzLnJlY29yZHMuY2xlYXIoKSx0aGlzLl9uZ09uRGVzdHJv'@;
put 'eUhvb2tzLmNsZWFyKCksdGhpcy5pbmplY3RvckRlZlR5cGVzLmNsZWFyKCksX2UobCl9fW9uRGVzdHJveShsKXtyZXR1cm4gdGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9vbkRlc3Ryb3lIb29rcy5wdXNoKGwpLCgpPT50aGlzLnJlbW92ZU9uRGVzdHJveShsKX1ydW5JbkNvbnRl'@;
put 'eHQobCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKTtjb25zdCBhPXJoKHRoaXMpLGQ9X2wodm9pZCAwKTt0cnl7cmV0dXJuIGwoKX1maW5hbGx5e3JoKGEpLF9sKGQpfX1nZXQobCxhPUswLGQ9aW8uRGVmYXVsdCl7aWYodGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSxsLmhhc093blByb3Bl'@;
put 'cnR5KGpsKSlyZXR1cm4gbFtqbF0odGhpcyk7ZD1vNShkKTtjb25zdCBmPXJoKHRoaXMpLHY9X2wodm9pZCAwKTt0cnl7aWYoIShkJmlvLlNraXBTZWxmKSl7bGV0IEQ9dGhpcy5yZWNvcmRzLmdldChsKTtpZih2b2lkIDA9PT1EKXtjb25zdCBaPWZ1bmN0aW9uIFl3KGMpe3JldHVybiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMmJmMgaW5zdGFuY2VvZiBTdH0obCkmJlBhKGwpO0Q9WiYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShaKT9OMyhwNShsKSxGMyk6bnVsbCx0aGlzLnJlY29yZHMuc2V0KGwsRCl9aWYobnVsbCE9RClyZXR1cm4gdGhpcy5oeWRy'@;
put 'YXRlKGwsRCl9cmV0dXJuKGQmaW8uU2VsZj9IMygpOnRoaXMucGFyZW50KS5nZXQobCxhPWQmaW8uT3B0aW9uYWwmJmE9PT1LMD9udWxsOmEpfWNhdGNoKE0pe2lmKCJOdWxsSW5qZWN0b3JFcnJvciI9PT1NLm5hbWUpe2lmKChNW1BjXT1NW1BjXXx8W10pLnVuc2hpZnQoUHIobCkpLGYpdGhy'@;
put 'b3cgTTtyZXR1cm4gZnVuY3Rpb24gczUoYyxsLGEsZCl7Y29uc3QgaD1jW1BjXTt0aHJvdyBsW3NsXSYmaC51bnNoaWZ0KGxbc2xdKSxjLm1lc3NhZ2U9ZnVuY3Rpb24gZzQoYyxsLGEsZD1udWxsKXtjPWMmJiJcbiI9PT1jLmNoYXJBdCgwKSYmIlx1MDI3NSI9PWMuY2hhckF0KDEpP2Muc2xp'@;
put 'Y2UoMik6YztsZXQgaD1QcihsKTtpZihBcnJheS5pc0FycmF5KGwpKWg9bC5tYXAoUHIpLmpvaW4oIiAtPiAiKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgbCl7bGV0IGY9W107Zm9yKGxldCB2IGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eSh2KSl7bGV0IE09bFt2XTtmLnB1c2godisiOiIr'@;
put 'KCJzdHJpbmciPT10eXBlb2YgTT9KU09OLnN0cmluZ2lmeShNKTpQcihNKSkpfWg9YHske2Yuam9pbigiLCAiKX19YH1yZXR1cm5gJHthfSR7ZD8iKCIrZCsiKSI6IiJ9WyR7aH1dOiAke2MucmVwbGFjZShSdywiXG4gICIpfWB9KCJcbiIrYy5tZXNzYWdlLGgsYSxkKSxjLm5nVG9rZW5QYXRo'@;
put 'PWgsY1tQY109bnVsbCxjfShNLGwsIlIzSW5qZWN0b3JFcnJvciIsdGhpcy5zb3VyY2UpfXRocm93IE19ZmluYWxseXtfbCh2KSxyaChmKX19cmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl7Y29uc3QgbD1fZShudWxsKSxhPXJoKHRoaXMpLGQ9X2wodm9pZCAwKTt0cnl7Y29uc3QgZj10'@;
put 'aGlzLmdldCh0Mix0cyxpby5TZWxmKTtmb3IoY29uc3QgdiBvZiBmKXYoKX1maW5hbGx5e3JoKGEpLF9sKGQpLF9lKGwpfX10b1N0cmluZygpe2NvbnN0IGw9W10sYT10aGlzLnJlY29yZHM7Zm9yKGNvbnN0IGQgb2YgYS5rZXlzKCkpbC5wdXNoKFByKGQpKTtyZXR1cm5gUjNJbmplY3Rvclsk'@;
put 'e2wuam9pbigiLCAiKX1dYH1hc3NlcnROb3REZXN0cm95ZWQoKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDIwNSwhMSl9cHJvY2Vzc1Byb3ZpZGVyKGwpe2xldCBhPXZmKGw9WWkobCkpP2w6WWkobCYmbC5wcm92aWRlKTtjb25zdCBkPWZ1bmN0aW9uIEg2KGMpe3JldHVybiBM'@;
put 'NihjKT9OMyh2b2lkIDAsYy51c2VWYWx1ZSk6TjMoX3YoYyksRjMpfShsKTtpZighdmYobCkmJiEwPT09bC5tdWx0aSl7bGV0IGg9dGhpcy5yZWNvcmRzLmdldChhKTtofHwoaD1OMyh2b2lkIDAsRjMsITApLGguZmFjdG9yeT0oKT0+YTUoaC5tdWx0aSksdGhpcy5yZWNvcmRzLnNldChhLGgp'@;
put 'KSxhPWwsaC5tdWx0aS5wdXNoKGwpfXRoaXMucmVjb3Jkcy5zZXQoYSxkKX1oeWRyYXRlKGwsYSl7Y29uc3QgZD1fZShudWxsKTt0cnl7cmV0dXJuIGEudmFsdWU9PT1GMyYmKGEudmFsdWU9WncsYS52YWx1ZT1hLmZhY3RvcnkoKSksIm9iamVjdCI9PXR5cGVvZiBhLnZhbHVlJiZhLnZhbHVl'@;
put 'JiZmdW5jdGlvbiB3dihjKXtyZXR1cm4gbnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMubmdPbkRlc3Ryb3l9KGEudmFsdWUpJiZ0aGlzLl9uZ09uRGVzdHJveUhvb2tzLmFkZChhLnZhbHVlKSxhLnZhbHVlfWZpbmFsbHl7X2UoZCl9fWluamVjdGFi'@;
put 'bGVEZWZJblNjb3BlKGwpe2lmKCFsLnByb3ZpZGVkSW4pcmV0dXJuITE7Y29uc3QgYT1ZaShsLnByb3ZpZGVkSW4pO3JldHVybiJzdHJpbmciPT10eXBlb2YgYT8iYW55Ij09PWF8fHRoaXMuc2NvcGVzLmhhcyhhKTp0aGlzLmluamVjdG9yRGVmVHlwZXMuaGFzKGEpfXJlbW92ZU9uRGVzdHJv'@;
put 'eShsKXtjb25zdCBhPXRoaXMuX29uRGVzdHJveUhvb2tzLmluZGV4T2YobCk7LTEhPT1hJiZ0aGlzLl9vbkRlc3Ryb3lIb29rcy5zcGxpY2UoYSwxKX19ZnVuY3Rpb24gcDUoYyl7Y29uc3QgbD1QYShjKSxhPW51bGwhPT1sP2wuZmFjdG9yeTpndShjKTtpZihudWxsIT09YSlyZXR1cm4gYTtp'@;
put 'ZihjIGluc3RhbmNlb2YgU3QpdGhyb3cgbmV3IFFuKDIwNCwhMSk7aWYoYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKXJldHVybiBmdW5jdGlvbiB5dihjKXtpZihjLmxlbmd0aD4wKXRocm93IG5ldyBRbigyMDQsITEpO2NvbnN0IGE9ZnVuY3Rpb24gemEoYyl7cmV0dXJuIGMmJihjW0NzXXx8Y1tI'@;
put 'YV0pfHxudWxsfShjKTtyZXR1cm4gbnVsbCE9PWE/KCk9PmEuZmFjdG9yeShjKTooKT0+bmV3IGN9KGMpO3Rocm93IG5ldyBRbigyMDQsITEpfWZ1bmN0aW9uIF92KGMsbCxhKXtsZXQgZDtpZih2ZihjKSl7Y29uc3QgaD1ZaShjKTtyZXR1cm4gZ3UoaCl8fHA1KGgpfWlmKEw2KGMpKWQ9KCk9'@;
put 'PllpKGMudXNlVmFsdWUpO2Vsc2UgaWYoZnVuY3Rpb24gYnYoYyl7cmV0dXJuISghY3x8IWMudXNlRmFjdG9yeSl9KGMpKWQ9KCk9PmMudXNlRmFjdG9yeSguLi5hNShjLmRlcHN8fFtdKSk7ZWxzZSBpZihmdW5jdGlvbiB2dihjKXtyZXR1cm4hKCFjfHwhYy51c2VFeGlzdGluZyl9KGMpKWQ9'@;
put 'KCk9PnhyKFlpKGMudXNlRXhpc3RpbmcpKTtlbHNle2NvbnN0IGg9WWkoYyYmKGMudXNlQ2xhc3N8fGMucHJvdmlkZSkpO2lmKCFmdW5jdGlvbiBXdyhjKXtyZXR1cm4hIWMuZGVwc30oYykpcmV0dXJuIGd1KGgpfHxwNShoKTtkPSgpPT5uZXcgaCguLi5hNShjLmRlcHMpKX1yZXR1cm4gZH1m'@;
put 'dW5jdGlvbiBOMyhjLGwsYT0hMSl7cmV0dXJue2ZhY3Rvcnk6Yyx2YWx1ZTpsLG11bHRpOmE/W106dm9pZCAwfX1mdW5jdGlvbiBnNShjLGwpe2Zvcihjb25zdCBhIG9mIGMpQXJyYXkuaXNBcnJheShhKT9nNShhLGwpOmEmJkJvKGEpP2c1KGEuXHUwMjc1cHJvdmlkZXJzLGwpOmwoYSl9ZnVu'@;
put 'Y3Rpb24gcTAoYyxsKXtjIGluc3RhbmNlb2YgdWQmJmMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7Y29uc3QgZD1yaChjKSxoPV9sKHZvaWQgMCk7dHJ5e3JldHVybiBsKCl9ZmluYWxseXtyaChkKSxfbChoKX19ZnVuY3Rpb24gQ3YoKXtyZXR1cm4gdm9pZCAwIT09cjUoKXx8bnVsbCE9ZnVuY3Rp'@;
put 'b24gTHcoKXtyZXR1cm4gSTN9KCl9Y29uc3QgQjY9RnVuY3Rpb247Y29uc3Qgemw9MCxLaT0xLFpvPTIsZmM9MyxIYz00LHJjPTUsdHU9NixYMD03LGNsPTgscGM9OSxMMT0xMCxiYT0xMSxfZj0xMixDND0xMyxvMD0xNCxVbD0xNSxTND0xNix3Zj0xNyxkZD0xOCxfMD0xOSxvMj0yMCxhMj0y'@;
put 'MSxtNT0yMixDZj0yMyx3YT0yNSxqNj0xLG11PTcsVjM9OSxnYz0xMDt2YXIgdjU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob25lPTBdPSJOb25lIixjW2MuSGFzVHJhbnNwbGFudGVkVmlld3M9Ml09Ikhhc1RyYW5zcGxhbnRlZFZpZXdzIixjfSh2NXx8e30pO2Z1bmN0aW9uIE91KGMpe3Jl'@;
put 'dHVybiBBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGNbajZdfWZ1bmN0aW9uIFB1KGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiYhMD09PWNbajZdfWZ1bmN0aW9uIG51KGMpe3JldHVybiEhKDQmYy5mbGFncyl9ZnVuY3Rpb24gU2YoYyl7cmV0dXJuIGMuY29tcG9uZW50'@;
put 'T2Zmc2V0Pi0xfWZ1bmN0aW9uIEowKGMpe3JldHVybiEoMSZ+Yy5mbGFncyl9ZnVuY3Rpb24gTmMoYyl7cmV0dXJuISFjLnRlbXBsYXRlfWZ1bmN0aW9uIHg0KGMpe3JldHVybiEhKDUxMiZjW1pvXSl9Y2xhc3MgZVZ7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucHJldmlvdXNWYWx1ZT1sLHRo'@;
put 'aXMuY3VycmVudFZhbHVlPWEsdGhpcy5maXJzdENoYW5nZT1kfWlzRmlyc3RDaGFuZ2UoKXtyZXR1cm4gdGhpcy5maXJzdENoYW5nZX19ZnVuY3Rpb24gWkEoYyxsLGEsZCl7bnVsbCE9PWw/bC5hcHBseVZhbHVlVG9JbnB1dFNpZ25hbChsLGQpOmNbYV09ZH1mdW5jdGlvbiB3bCgpe3JldHVy'@;
put 'biBXQX1mdW5jdGlvbiBXQShjKXtyZXR1cm4gYy50eXBlLnByb3RvdHlwZS5uZ09uQ2hhbmdlcyYmKGMuc2V0SW5wdXQ9blYpLHRWfWZ1bmN0aW9uIHRWKCl7Y29uc3QgYz1HQSh0aGlzKSxsPWM/LmN1cnJlbnQ7aWYobCl7Y29uc3QgYT1jLnByZXZpb3VzO2lmKGE9PT1EMCljLnByZXZpb3Vz'@;
put 'PWw7ZWxzZSBmb3IobGV0IGQgaW4gbClhW2RdPWxbZF07Yy5jdXJyZW50PW51bGwsdGhpcy5uZ09uQ2hhbmdlcyhsKX19ZnVuY3Rpb24gblYoYyxsLGEsZCxoKXtjb25zdCBmPXRoaXMuZGVjbGFyZWRJbnB1dHNbZF0sdj1HQShjKXx8ZnVuY3Rpb24gclYoYyxsKXtyZXR1cm4gY1tZQV09bH0o'@;
put 'Yyx7cHJldmlvdXM6RDAsY3VycmVudDpudWxsfSksTT12LmN1cnJlbnR8fCh2LmN1cnJlbnQ9e30pLEQ9di5wcmV2aW91cyxaPURbZl07TVtmXT1uZXcgZVYoWiYmWi5jdXJyZW50VmFsdWUsYSxEPT09RDApLFpBKGMsbCxoLGEpfXdsLm5nSW5oZXJpdD0hMDtjb25zdCBZQT0iX19uZ1NpbXBs'@;
put 'ZUNoYW5nZXNfXyI7ZnVuY3Rpb24gR0EoYyl7cmV0dXJuIGNbWUFdfHxudWxsfWNvbnN0IHUyPWZ1bmN0aW9uKGMsbCxhKXt9O2xldCBLQT0hMTtmdW5jdGlvbiBDbChjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7KWM9Y1t6bF07cmV0dXJuIGN9ZnVuY3Rpb24gYjUoYyxsKXtyZXR1cm4gQ2wo'@;
put 'bFtjXSl9ZnVuY3Rpb24gUjAoYyxsKXtyZXR1cm4gQ2wobFtjLmluZGV4XSl9ZnVuY3Rpb24gVzYoYyxsKXtyZXR1cm4gYy5kYXRhW2xdfWZ1bmN0aW9uIEU0KGMsbCl7cmV0dXJuIGNbbF19ZnVuY3Rpb24gTzEoYyxsKXtjb25zdCBhPWxbY107cmV0dXJuIE91KGEpP2E6YVt6bF19ZnVuY3Rp'@;
put 'b24gUXcoYyl7cmV0dXJuISgxMjgmfmNbWm9dKX1mdW5jdGlvbiBkMihjLGwpe3JldHVybiBudWxsPT1sP251bGw6Y1tsXX1mdW5jdGlvbiBlQyhjKXtjW3dmXT0wfWZ1bmN0aW9uIGxWKGMpezEwMjQmY1tab118fChjW1pvXXw9MTAyNCxRdyhjKSYmWTYoYykpfWZ1bmN0aW9uIHh2KGMpe3Jl'@;
put 'dHVybiEhKDkyMTYmY1tab118fGNbQ2ZdPy5kaXJ0eSl9ZnVuY3Rpb24gbkMoYyl7Y1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoMSkseHYoYyk/WTYoYyk6NjQmY1tab10mJihmdW5jdGlvbiBvVigpe3JldHVybiBLQX0oKT8oY1tab118PTEwMjQsWTYoYykpOmNbTDFd'@;
put 'LmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCkpfWZ1bmN0aW9uIFk2KGMpe2NbTDFdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KCk7bGV0IGw9VDQoYyk7Zm9yKDtudWxsIT09bCYmISg4MTkyJmxbWm9dKSYmKGxbWm9dfD04MTkyLFF3KGwpKTspbD1UNChsKX1m'@;
put 'dW5jdGlvbiBFdihjLGwpe2lmKCEoMjU2Jn5jW1pvXSkpdGhyb3cgbmV3IFFuKDkxMSwhMSk7bnVsbD09PWNbYTJdJiYoY1thMl09W10pLGNbYTJdLnB1c2gobCl9ZnVuY3Rpb24gVDQoYyl7Y29uc3QgbD1jW2ZjXTtyZXR1cm4gUHUobCk/bFtmY106bH1jb25zdCBDYT17bEZyYW1lOnJrKG51'@;
put 'bGwpLGJpbmRpbmdzRW5hYmxlZDohMCxza2lwSHlkcmF0aW9uUm9vdFROb2RlOm51bGx9O2Z1bmN0aW9uIFFBKCl7cmV0dXJuIENhLmJpbmRpbmdzRW5hYmxlZH1mdW5jdGlvbiB5NSgpe3JldHVybiBudWxsIT09Q2Euc2tpcEh5ZHJhdGlvblJvb3RUTm9kZX1mdW5jdGlvbiBkaSgpe3JldHVy'@;
put 'biBDYS5sRnJhbWUubFZpZXd9ZnVuY3Rpb24gYXMoKXtyZXR1cm4gQ2EubEZyYW1lLnRWaWV3fWZ1bmN0aW9uIHd0KGMpe3JldHVybiBDYS5sRnJhbWUuY29udGV4dExWaWV3PWMsY1tjbF19ZnVuY3Rpb24gQ3QoYyl7cmV0dXJuIENhLmxGcmFtZS5jb250ZXh0TFZpZXc9bnVsbCxjfWZ1bmN0'@;
put 'aW9uIHVsKCl7bGV0IGM9ckMoKTtmb3IoO251bGwhPT1jJiY2ND09PWMudHlwZTspYz1jLnBhcmVudDtyZXR1cm4gY31mdW5jdGlvbiByQygpe3JldHVybiBDYS5sRnJhbWUuY3VycmVudFROb2RlfWZ1bmN0aW9uIGgyKGMsbCl7Y29uc3QgYT1DYS5sRnJhbWU7YS5jdXJyZW50VE5vZGU9Yyxh'@;
put 'LmlzUGFyZW50PWx9ZnVuY3Rpb24gaUMoKXtyZXR1cm4gQ2EubEZyYW1lLmlzUGFyZW50fWZ1bmN0aW9uIG9DKCl7Q2EubEZyYW1lLmlzUGFyZW50PSExfWZ1bmN0aW9uIEwwKCl7Y29uc3QgYz1DYS5sRnJhbWU7bGV0IGw9Yy5iaW5kaW5nUm9vdEluZGV4O3JldHVybi0xPT09bCYmKGw9Yy5i'@;
put 'aW5kaW5nUm9vdEluZGV4PWMudFZpZXcuYmluZGluZ1N0YXJ0SW5kZXgpLGx9ZnVuY3Rpb24gTWYoKXtyZXR1cm4gQ2EubEZyYW1lLmJpbmRpbmdJbmRleH1mdW5jdGlvbiBhaCgpe3JldHVybiBDYS5sRnJhbWUuYmluZGluZ0luZGV4Kyt9ZnVuY3Rpb24geGYoYyl7Y29uc3QgbD1DYS5sRnJh'@;
put 'bWUsYT1sLmJpbmRpbmdJbmRleDtyZXR1cm4gbC5iaW5kaW5nSW5kZXg9bC5iaW5kaW5nSW5kZXgrYyxhfWZ1bmN0aW9uIGJWKGMsbCl7Y29uc3QgYT1DYS5sRnJhbWU7YS5iaW5kaW5nSW5kZXg9YS5iaW5kaW5nUm9vdEluZGV4PWMsYUMobCl9ZnVuY3Rpb24gYUMoYyl7Q2EubEZyYW1lLmN1'@;
put 'cnJlbnREaXJlY3RpdmVJbmRleD1jfWZ1bmN0aW9uIHNDKGMpe2NvbnN0IGw9Q2EubEZyYW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleDtyZXR1cm4tMT09PWw/bnVsbDpjW2xdfWZ1bmN0aW9uIGxDKCl7cmV0dXJuIENhLmxGcmFtZS5jdXJyZW50UXVlcnlJbmRleH1mdW5jdGlvbiBCMyhjKXtD'@;
put 'YS5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXg9Y31mdW5jdGlvbiBjQyhjKXtjb25zdCBsPWNbS2ldO3JldHVybiAyPT09bC50eXBlP2wuZGVjbFROb2RlOjE9PT1sLnR5cGU/Y1tyY106bnVsbH1mdW5jdGlvbiBBdihjLGwsYSl7aWYoYSZpby5Ta2lwU2VsZil7bGV0IGg9bCxmPWM7Zm9yKDsh'@;
put 'KGg9aC5wYXJlbnQsbnVsbCE9PWh8fGEmaW8uSG9zdHx8KGg9Y0MoZiksbnVsbD09PWh8fChmPWZbbzBdLDEwJmgudHlwZSkpKTspO2lmKG51bGw9PT1oKXJldHVybiExO2w9aCxjPWZ9Y29uc3QgZD1DYS5sRnJhbWU9ajMoKTtyZXR1cm4gZC5jdXJyZW50VE5vZGU9bCxkLmxWaWV3PWMsITB9'@;
put 'ZnVuY3Rpb24gJDYoYyl7Y29uc3QgbD1qMygpLGE9Y1tLaV07Q2EubEZyYW1lPWwsbC5jdXJyZW50VE5vZGU9YS5maXJzdENoaWxkLGwubFZpZXc9YyxsLnRWaWV3PWEsbC5jb250ZXh0TFZpZXc9YyxsLmJpbmRpbmdJbmRleD1hLmJpbmRpbmdTdGFydEluZGV4LGwuaW5JMThuPSExfWZ1bmN0'@;
put 'aW9uIGozKCl7Y29uc3QgYz1DYS5sRnJhbWUsbD1udWxsPT09Yz9udWxsOmMuY2hpbGQ7cmV0dXJuIG51bGw9PT1sP3JrKGMpOmx9ZnVuY3Rpb24gcmsoYyl7Y29uc3QgbD17Y3VycmVudFROb2RlOm51bGwsaXNQYXJlbnQ6ITAsbFZpZXc6bnVsbCx0VmlldzpudWxsLHNlbGVjdGVkSW5kZXg6'@;
put 'LTEsY29udGV4dExWaWV3Om51bGwsZWxlbWVudERlcHRoQ291bnQ6MCxjdXJyZW50TmFtZXNwYWNlOm51bGwsY3VycmVudERpcmVjdGl2ZUluZGV4Oi0xLGJpbmRpbmdSb290SW5kZXg6LTEsYmluZGluZ0luZGV4Oi0xLGN1cnJlbnRRdWVyeUluZGV4OjAscGFyZW50OmMsY2hpbGQ6bnVsbCxp'@;
put 'bkkxOG46ITF9O3JldHVybiBudWxsIT09YyYmKGMuY2hpbGQ9bCksbH1mdW5jdGlvbiBrdigpe2NvbnN0IGM9Q2EubEZyYW1lO3JldHVybiBDYS5sRnJhbWU9Yy5wYXJlbnQsYy5jdXJyZW50VE5vZGU9bnVsbCxjLmxWaWV3PW51bGwsY31jb25zdCBpaz1rdjtmdW5jdGlvbiBfNSgpe2NvbnN0'@;
put 'IGM9a3YoKTtjLmlzUGFyZW50PSEwLGMudFZpZXc9bnVsbCxjLnNlbGVjdGVkSW5kZXg9LTEsYy5jb250ZXh0TFZpZXc9bnVsbCxjLmVsZW1lbnREZXB0aENvdW50PTAsYy5jdXJyZW50RGlyZWN0aXZlSW5kZXg9LTEsYy5jdXJyZW50TmFtZXNwYWNlPW51bGwsYy5iaW5kaW5nUm9vdEluZGV4'@;
put 'PS0xLGMuYmluZGluZ0luZGV4PS0xLGMuY3VycmVudFF1ZXJ5SW5kZXg9MH1mdW5jdGlvbiBIdSgpe3JldHVybiBDYS5sRnJhbWUuc2VsZWN0ZWRJbmRleH1mdW5jdGlvbiBBNChjKXtDYS5sRnJhbWUuc2VsZWN0ZWRJbmRleD1jfWZ1bmN0aW9uIEpzKCl7Y29uc3QgYz1DYS5sRnJhbWU7cmV0'@;
put 'dXJuIFc2KGMudFZpZXcsYy5zZWxlY3RlZEluZGV4KX1sZXQgYWs9ITA7ZnVuY3Rpb24gSzYoKXtyZXR1cm4gYWt9ZnVuY3Rpb24gZjIoYyl7YWs9Y31mdW5jdGlvbiBEdihjLGwpe2ZvcihsZXQgYT1sLmRpcmVjdGl2ZVN0YXJ0LGQ9bC5kaXJlY3RpdmVFbmQ7YTxkO2ErKyl7Y29uc3QgZj1j'@;
put 'LmRhdGFbYV0udHlwZS5wcm90b3R5cGUse25nQWZ0ZXJDb250ZW50SW5pdDp2LG5nQWZ0ZXJDb250ZW50Q2hlY2tlZDpNLG5nQWZ0ZXJWaWV3SW5pdDpELG5nQWZ0ZXJWaWV3Q2hlY2tlZDpaLG5nT25EZXN0cm95Om5lfT1mO3YmJihjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKC1hLHYpLE0m'@;
put 'JigoYy5jb250ZW50SG9va3M/Pz1bXSkucHVzaChhLE0pLChjLmNvbnRlbnRDaGVja0hvb2tzPz89W10pLnB1c2goYSxNKSksRCYmKGMudmlld0hvb2tzPz89W10pLnB1c2goLWEsRCksWiYmKChjLnZpZXdIb29rcz8/PVtdKS5wdXNoKGEsWiksKGMudmlld0NoZWNrSG9va3M/Pz1bXSkucHVz'@;
put 'aChhLFopKSxudWxsIT1uZSYmKGMuZGVzdHJveUhvb2tzPz89W10pLnB1c2goYSxuZSl9fWZ1bmN0aW9uIEl2KGMsbCxhKXtzayhjLGwsMyxhKX1mdW5jdGlvbiBSdihjLGwsYSxkKXsoMyZjW1pvXSk9PT1hJiZzayhjLGwsYSxkKX1mdW5jdGlvbiBkQyhjLGwpe2xldCBhPWNbWm9dOygzJmEp'@;
put 'PT09bCYmKGEmPTE2MzgzLGErPTEsY1tab109YSl9ZnVuY3Rpb24gc2soYyxsLGEsZCl7Y29uc3QgZj1kPz8tMSx2PWwubGVuZ3RoLTE7bGV0IE09MDtmb3IobGV0IEQ9dm9pZCAwIT09ZD82NTUzNSZjW3dmXTowO0Q8djtEKyspaWYoIm51bWJlciI9PXR5cGVvZiBsW0QrMV0pe2lmKE09bFtE'@;
put 'XSxudWxsIT1kJiZNPj1kKWJyZWFrfWVsc2UgbFtEXTwwJiYoY1t3Zl0rPTY1NTM2KSwoTTxmfHwtMT09ZikmJih4VihjLGEsbCxEKSxjW3dmXT0oNDI5NDkwMTc2MCZjW3dmXSkrRCsyKSxEKyt9ZnVuY3Rpb24gbGsoYyxsKXt1Mig0LGMsbCk7Y29uc3QgYT1fZShudWxsKTt0cnl7bC5jYWxs'@;
put 'KGMpfWZpbmFsbHl7X2UoYSksdTIoNSxjLGwpfX1mdW5jdGlvbiB4VihjLGwsYSxkKXtjb25zdCBoPWFbZF08MCxmPWFbZCsxXSxNPWNbaD8tYVtkXTphW2RdXTtoP2NbWm9dPj4xNDxjW3dmXT4+MTYmJigzJmNbWm9dKT09PWwmJihjW1pvXSs9MTYzODQsbGsoTSxmKSk6bGsoTSxmKX1jb25z'@;
put 'dCBrND0tMTtjbGFzcyBQMXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5mYWN0b3J5PWwsdGhpcy5yZXNvbHZpbmc9ITEsdGhpcy5jYW5TZWVWaWV3UHJvdmlkZXJzPWEsdGhpcy5pbmplY3RJbXBsPWR9fWZ1bmN0aW9uIEx2KGMpe3JldHVybiBjIT09azR9ZnVuY3Rpb24gcTYoYyl7cmV0dXJu'@;
put 'IDMyNzY3JmN9ZnVuY3Rpb24gWDYoYyxsKXtsZXQgYT1mdW5jdGlvbiBJVihjKXtyZXR1cm4gYz4+MTZ9KGMpLGQ9bDtmb3IoO2E+MDspZD1kW28wXSxhLS07cmV0dXJuIGR9bGV0IGZDPSEwO2Z1bmN0aW9uIE92KGMpe2NvbnN0IGw9ZkM7cmV0dXJuIGZDPWMsbH1jb25zdCBQdj0yNTUscEM9'@;
put 'NTtsZXQgUlY9MDtjb25zdCBwMj17fTtmdW5jdGlvbiBGdihjLGwpe2NvbnN0IGE9SHYoYyxsKTtpZigtMSE9PWEpcmV0dXJuIGE7Y29uc3QgZD1sW0tpXTtkLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5qZWN0b3JJbmRleD1sLmxlbmd0aCxnQyhkLmRhdGEsYyksZ0MobCxudWxsKSxnQyhkLmJs'@;
put 'dWVwcmludCxudWxsKSk7Y29uc3QgaD13NShjLGwpLGY9Yy5pbmplY3RvckluZGV4O2lmKEx2KGgpKXtjb25zdCB2PXE2KGgpLE09WDYoaCxsKSxEPU1bS2ldLmRhdGE7Zm9yKGxldCBaPTA7Wjw4O1orKylsW2YrWl09TVt2K1pdfERbditaXX1yZXR1cm4gbFtmKzhdPWgsZn1mdW5jdGlvbiBn'@;
put 'QyhjLGwpe2MucHVzaCgwLDAsMCwwLDAsMCwwLDAsbCl9ZnVuY3Rpb24gSHYoYyxsKXtyZXR1cm4tMT09PWMuaW5qZWN0b3JJbmRleHx8Yy5wYXJlbnQmJmMucGFyZW50LmluamVjdG9ySW5kZXg9PT1jLmluamVjdG9ySW5kZXh8fG51bGw9PT1sW2MuaW5qZWN0b3JJbmRleCs4XT8tMTpjLmlu'@;
put 'amVjdG9ySW5kZXh9ZnVuY3Rpb24gdzUoYyxsKXtpZihjLnBhcmVudCYmLTEhPT1jLnBhcmVudC5pbmplY3RvckluZGV4KXJldHVybiBjLnBhcmVudC5pbmplY3RvckluZGV4O2xldCBhPTAsZD1udWxsLGg9bDtmb3IoO251bGwhPT1oOyl7aWYoZD1saChoKSxudWxsPT09ZClyZXR1cm4gazQ7'@;
put 'aWYoYSsrLGg9aFtvMF0sLTEhPT1kLmluamVjdG9ySW5kZXgpcmV0dXJuIGQuaW5qZWN0b3JJbmRleHxhPDwxNn1yZXR1cm4gazR9ZnVuY3Rpb24gZmQoYyxsLGEpeyFmdW5jdGlvbiBMVihjLGwsYSl7bGV0IGQ7InN0cmluZyI9PXR5cGVvZiBhP2Q9YS5jaGFyQ29kZUF0KDApfHwwOmEuaGFz'@;
put 'T3duUHJvcGVydHkoT2MpJiYoZD1hW09jXSksbnVsbD09ZCYmKGQ9YVtPY109UlYrKyk7Y29uc3QgaD1kJlB2O2wuZGF0YVtjKyhoPj5wQyldfD0xPDxofShjLGwsYSl9ZnVuY3Rpb24gY2soYyxsLGEpe2lmKGEmaW8uT3B0aW9uYWx8fHZvaWQgMCE9PWMpcmV0dXJuIGM7U3MoKX1mdW5jdGlv'@;
put 'biBzaChjLGwsYSxkKXtpZihhJmlvLk9wdGlvbmFsJiZ2b2lkIDA9PT1kJiYoZD1udWxsKSwhKGEmKGlvLlNlbGZ8aW8uSG9zdCkpKXtjb25zdCBoPWNbcGNdLGY9X2wodm9pZCAwKTt0cnl7cmV0dXJuIGg/aC5nZXQobCxkLGEmaW8uT3B0aW9uYWwpOm5oKGwsZCxhJmlvLk9wdGlvbmFsKX1m'@;
put 'aW5hbGx5e19sKGYpfX1yZXR1cm4gY2soZCwwLGEpfWZ1bmN0aW9uIHVrKGMsbCxhLGQ9aW8uRGVmYXVsdCxoKXtpZihudWxsIT09Yyl7aWYoMjA0OCZsW1pvXSYmIShkJmlvLlNlbGYpKXtjb25zdCB2PWZ1bmN0aW9uIFUzKGMsbCxhLGQsaCl7bGV0IGY9Yyx2PWw7Zm9yKDtudWxsIT09ZiYm'@;
put 'bnVsbCE9PXYmJjIwNDgmdltab10mJiEoNTEyJnZbWm9dKTspe2NvbnN0IE09QzUoZix2LGEsZHxpby5TZWxmLHAyKTtpZihNIT09cDIpcmV0dXJuIE07bGV0IEQ9Zi5wYXJlbnQ7aWYoIUQpe2NvbnN0IFo9dltvMl07aWYoWil7Y29uc3QgbmU9Wi5nZXQoYSxwMixkKTtpZihuZSE9PXAyKXJl'@;
put 'dHVybiBuZX1EPWxoKHYpLHY9dltvMF19Zj1EfXJldHVybiBofShjLGwsYSxkLHAyKTtpZih2IT09cDIpcmV0dXJuIHZ9Y29uc3QgZj1DNShjLGwsYSxkLHAyKTtpZihmIT09cDIpcmV0dXJuIGZ9cmV0dXJuIHNoKGwsYSxkLGgpfWZ1bmN0aW9uIEM1KGMsbCxhLGQsaCl7Y29uc3QgZj1mdW5j'@;
put 'dGlvbiBUYyhjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIGMuY2hhckNvZGVBdCgwKXx8MDtjb25zdCBsPWMuaGFzT3duUHJvcGVydHkoT2MpP2NbT2NdOnZvaWQgMDtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/bD49MD9sJlB2OlEwOmx9KGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBmKXtpZighQXYobCxjLGQpKXJldHVybiBkJmlvLkhvc3Q/Y2soaCwwLGQpOnNoKGwsYSxkLGgpO3RyeXtsZXQgdjtpZih2PWYoZCksbnVsbCE9dnx8ZCZpby5PcHRpb25hbClyZXR1cm4gdjtTcygpfWZpbmFsbHl7aWsoKX19ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGYpe2xldCB2PW51'@;
put 'bGwsTT1IdihjLGwpLEQ9azQsWj1kJmlvLkhvc3Q/bFtVbF1bcmNdOm51bGw7Zm9yKCgtMT09PU18fGQmaW8uU2tpcFNlbGYpJiYoRD0tMT09PU0/dzUoYyxsKTpsW00rOF0sRCE9PWs0JiZNNShkLCExKT8odj1sW0tpXSxNPXE2KEQpLGw9WDYoRCxsKSk6TT0tMSk7LTEhPT1NOyl7Y29uc3Qg'@;
put 'bmU9bFtLaV07aWYoUzUoZixNLG5lLmRhdGEpKXtjb25zdCBjZT1kayhNLGwsYSx2LGQsWik7aWYoY2UhPT1wMilyZXR1cm4gY2V9RD1sW00rOF0sRCE9PWs0JiZNNShkLGxbS2ldLmRhdGFbTSs4XT09PVopJiZTNShmLE0sbCk/KHY9bmUsTT1xNihEKSxsPVg2KEQsbCkpOk09LTF9fXJldHVy'@;
put 'biBofWZ1bmN0aW9uIGRrKGMsbCxhLGQsaCxmKXtjb25zdCB2PWxbS2ldLE09di5kYXRhW2MrOF0sbmU9TnYoTSx2LGEsbnVsbD09ZD9TZihNKSYmZkM6ZCE9diYmISEoMyZNLnR5cGUpLGgmaW8uSG9zdCYmZj09PU0pO3JldHVybiBudWxsIT09bmU/RDQobCx2LG5lLE0pOnAyfWZ1bmN0aW9u'@;
put 'IE52KGMsbCxhLGQsaCl7Y29uc3QgZj1jLnByb3ZpZGVySW5kZXhlcyx2PWwuZGF0YSxNPTEwNDg1NzUmZixEPWMuZGlyZWN0aXZlU3RhcnQsbmU9Zj4+MjAsYmU9aD9NK25lOmMuZGlyZWN0aXZlRW5kO2ZvcihsZXQgRWU9ZD9NOk0rbmU7RWU8YmU7RWUrKyl7Y29uc3QgQmU9dltFZV07aWYo'@;
put 'RWU8RCYmYT09PUJlfHxFZT49RCYmQmUudHlwZT09PWEpcmV0dXJuIEVlfWlmKGgpe2NvbnN0IEVlPXZbRF07aWYoRWUmJk5jKEVlKSYmRWUudHlwZT09PWEpcmV0dXJuIER9cmV0dXJuIG51bGx9ZnVuY3Rpb24gRDQoYyxsLGEsZCl7bGV0IGg9Y1thXTtjb25zdCBmPWwuZGF0YTtpZihmdW5j'@;
put 'dGlvbiBFVihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFAxfShoKSl7Y29uc3Qgdj1oO3YucmVzb2x2aW5nJiZmdW5jdGlvbiAkMChjLGwpe3Rocm93IGwmJmwuam9pbigiID4gIiksbmV3IFFuKC0yMDAsYyl9KGZ1bmN0aW9uIEFvKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjP2MubmFt'@;
put 'ZXx8Yy50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9YyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudHlwZT9jLnR5cGUubmFtZXx8Yy50eXBlLnRvU3RyaW5nKCk6U28oYyl9KGZbYV0pKTtjb25zdCBNPU92KHYuY2FuU2VlVmlld1Byb3ZpZGVycyk7di5yZXNvbHZpbmc9ITA7'@;
put 'Y29uc3QgWj12LmluamVjdEltcGw/X2wodi5pbmplY3RJbXBsKTpudWxsO0F2KGMsZCxpby5EZWZhdWx0KTt0cnl7aD1jW2FdPXYuZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbiBNVihjLGwsYSl7Y29uc3R7bmdP'@;
put 'bkNoYW5nZXM6ZCxuZ09uSW5pdDpoLG5nRG9DaGVjazpmfT1sLnR5cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IHY9V0EobCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsdiksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyx2KX1oJiYoYS5wcmVPcmRlckhvb2tzPz89'@;
put 'W10pLnB1c2goMC1jLGgpLGYmJigoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PVomJl9sKFopLE92KE0pLHYucmVzb2x2aW5nPSExLGlrKCl9fXJldHVybiBofWZ1'@;
put 'bmN0aW9uIFM1KGMsbCxhKXtyZXR1cm4hIShhW2wrKGM+PnBDKV0mMTw8Yyl9ZnVuY3Rpb24gTTUoYyxsKXtyZXR1cm4hKGMmaW8uU2VsZnx8YyZpby5Ib3N0JiZsKX1jbGFzcyBOdXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ROb2RlPWwsdGhpcy5fbFZpZXc9YX1nZXQobCxhLGQpe3JldHVy'@;
put 'biB1ayh0aGlzLl90Tm9kZSx0aGlzLl9sVmlldyxsLG81KGQpLGEpfX1mdW5jdGlvbiBRMCgpe3JldHVybiBuZXcgTnUodWwoKSxkaSgpKX1mdW5jdGlvbiBXcyhjKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBsPWMucHJvdG90eXBlLmNvbnN0cnVjdG9yLGE9bFtqaV18fFRmKGwpLGQ9T2JqZWN0'@;
put 'LnByb3RvdHlwZTtsZXQgaD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yO2Zvcig7aCYmaCE9PWQ7KXtjb25zdCBmPWhbamldfHxUZihoKTtpZihmJiZmIT09YSlyZXR1cm4gZjtoPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKX1yZXR1cm4gZj0+bmV3IGZ9'@;
put 'KX1mdW5jdGlvbiBUZihjKXtyZXR1cm4geWwoYyk/KCk9Pntjb25zdCBsPVRmKFlpKGMpKTtyZXR1cm4gbCYmbCgpfTpndShjKX1mdW5jdGlvbiBsaChjKXtjb25zdCBsPWNbS2ldLGE9bC50eXBlO3JldHVybiAyPT09YT9sLmRlY2xUTm9kZToxPT09YT9jW3JjXTpudWxsfWZ1bmN0aW9uIEFm'@;
put 'KGMpe3JldHVybiBmdW5jdGlvbiBPVihjLGwpe2lmKCJjbGFzcyI9PT1sKXJldHVybiBjLmNsYXNzZXM7aWYoInN0eWxlIj09PWwpcmV0dXJuIGMuc3R5bGVzO2NvbnN0IGE9Yy5hdHRycztpZihhKXtjb25zdCBkPWEubGVuZ3RoO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWFbaF07aWYo'@;
put 'dTUoZikpYnJlYWs7aWYoMD09PWYpaCs9MjtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZilmb3IoaCsrO2g8ZCYmInN0cmluZyI9PXR5cGVvZiBhW2hdOyloKys7ZWxzZXtpZihmPT09bClyZXR1cm4gYVtoKzFdO2grPTJ9fX1yZXR1cm4gbnVsbH0odWwoKSxjKX1mdW5jdGlvbiB3QyhjLGw9'@;
put 'bnVsbCxhPW51bGwsZCl7Y29uc3QgaD1SNChjLGwsYSxkKTtyZXR1cm4gaC5yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKSxofWZ1bmN0aW9uIFI0KGMsbD1udWxsLGE9bnVsbCxkLGg9bmV3IFNldCl7Y29uc3QgZj1bYXx8dHMsencoYyldO3JldHVybiBkPWR8fCgib2JqZWN0Ij09dHlw'@;
put 'ZW9mIGM/dm9pZCAwOlByKGMpKSxuZXcgdWQoZixsfHxIMygpLGR8fG51bGwsaCl9bGV0IERzPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuVEhST1dfSUZfTk9UX0ZPVU5EPUswfXN0YXRpY3t0aGlzLk5VTEw9bmV3IGM1fXN0YXRpYyBjcmVhdGUoYSxkKXtpZihBcnJheS5pc0FycmF5KGEp'@;
put 'KXJldHVybiB3Qyh7bmFtZToiIn0sZCxhLCIiKTt7Y29uc3QgaD1hLm5hbWU/PyIiO3JldHVybiB3Qyh7bmFtZTpofSxhLnBhcmVudCxhLnByb3ZpZGVycyxoKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46Yyxwcm92aWRlZEluOiJhbnkiLGZhY3Rvcnk6KCk9PnhyKEwzKX0p'@;
put 'fXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPS0xfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gVDUoYyl7cmV0dXJuIGMubmdPcmlnaW5hbEVycm9yfWNsYXNzIGcye2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKGwpe2NvbnN0IGE9dGhpcy5fZmlu'@;
put 'ZE9yaWdpbmFsRXJyb3IobCk7dGhpcy5fY29uc29sZS5lcnJvcigiRVJST1IiLGwpLGEmJnRoaXMuX2NvbnNvbGUuZXJyb3IoIk9SSUdJTkFMIEVSUk9SIixhKX1fZmluZE9yaWdpbmFsRXJyb3IobCl7bGV0IGE9bCYmVDUobCk7Zm9yKDthJiZUNShhKTspYT1UNShhKTtyZXR1cm4gYXx8bnVs'@;
put 'bH19Y29uc3QgZ2s9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5maShnMikuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7bGV0IEE1PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189VzN9c3RhdGlje3RoaXMuX19OR19FTlZfSURf'@;
put 'Xz1hPT5hfX1yZXR1cm4gY30pKCk7Y2xhc3MgWjMgZXh0ZW5kcyBBNXtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuX2xWaWV3PWx9b25EZXN0cm95KGwpe3JldHVybiBFdih0aGlzLl9sVmlldyxsKSwoKT0+ZnVuY3Rpb24gVHYoYyxsKXtpZihudWxsPT09Y1thMl0pcmV0dXJuO2NvbnN0'@;
put 'IGE9Y1thMl0uaW5kZXhPZihsKTstMSE9PWEmJmNbYTJdLnNwbGljZShhLDEpfSh0aGlzLl9sVmlldyxsKX19ZnVuY3Rpb24gVzMoKXtyZXR1cm4gbmV3IFozKGRpKCkpfWZ1bmN0aW9uIEhWKCl7cmV0dXJuIEw0KHVsKCksZGkoKSl9ZnVuY3Rpb24gTDQoYyxsKXtyZXR1cm4gbmV3IEppKFIw'@;
put 'KGMsbCkpfWxldCBKaT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubmF0aXZlRWxlbWVudD1hfXN0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPUhWfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gdmsoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBKaT9jLm5hdGl2ZUVsZW1lbnQ6'@;
put 'Y31mdW5jdGlvbiBDQyhjKXtyZXR1cm4gbD0+e3NldFRpbWVvdXQoYyx2b2lkIDAsbCl9fWNvbnN0IFhyPWNsYXNzIE5WIGV4dGVuZHMgV257Y29uc3RydWN0b3IobD0hMSl7c3VwZXIoKSx0aGlzLmRlc3Ryb3lSZWY9dm9pZCAwLHRoaXMuX19pc0FzeW5jPWwsQ3YoKSYmKHRoaXMuZGVzdHJv'@;
put 'eVJlZj1maShBNSx7b3B0aW9uYWw6ITB9KT8/dm9pZCAwKX1lbWl0KGwpe2NvbnN0IGE9X2UobnVsbCk7dHJ5e3N1cGVyLm5leHQobCl9ZmluYWxseXtfZShhKX19c3Vic2NyaWJlKGwsYSxkKXtsZXQgaD1sLGY9YXx8KCgpPT5udWxsKSx2PWQ7aWYobCYmIm9iamVjdCI9PXR5cGVvZiBsKXtj'@;
put 'b25zdCBEPWw7aD1ELm5leHQ/LmJpbmQoRCksZj1ELmVycm9yPy5iaW5kKEQpLHY9RC5jb21wbGV0ZT8uYmluZChEKX10aGlzLl9faXNBc3luYyYmKGY9Q0MoZiksaCYmKGg9Q0MoaCkpLHYmJih2PUNDKHYpKSk7Y29uc3QgTT1zdXBlci5zdWJzY3JpYmUoe25leHQ6aCxlcnJvcjpmLGNvbXBs'@;
put 'ZXRlOnZ9KTtyZXR1cm4gbCBpbnN0YW5jZW9mIHF0JiZsLmFkZChNKSxNfX07ZnVuY3Rpb24gVlYoKXtyZXR1cm4gdGhpcy5fcmVzdWx0c1tTeW1ib2wuaXRlcmF0b3JdKCl9Y2xhc3MgcGR7Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlcz8/PW5ldyBYcn1jb25zdHJ1Y3Rvcihs'@;
put 'PSExKXt0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seT1sLHRoaXMuZGlydHk9ITAsdGhpcy5fb25EaXJ0eT12b2lkIDAsdGhpcy5fcmVzdWx0cz1bXSx0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9ITEsdGhpcy5fY2hhbmdlcz12b2lkIDAsdGhpcy5sZW5ndGg9MCx0aGlzLmZpcnN0PXZvaWQg'@;
put 'MCx0aGlzLmxhc3Q9dm9pZCAwO2NvbnN0IGE9cGQucHJvdG90eXBlO2FbU3ltYm9sLml0ZXJhdG9yXXx8KGFbU3ltYm9sLml0ZXJhdG9yXT1WVil9Z2V0KGwpe3JldHVybiB0aGlzLl9yZXN1bHRzW2xdfW1hcChsKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5tYXAobCl9ZmlsdGVyKGwpe3JldHVy'@;
put 'biB0aGlzLl9yZXN1bHRzLmZpbHRlcihsKX1maW5kKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLmZpbmQobCl9cmVkdWNlKGwsYSl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMucmVkdWNlKGwsYSl9Zm9yRWFjaChsKXt0aGlzLl9yZXN1bHRzLmZvckVhY2gobCl9c29tZShsKXtyZXR1cm4gdGhpcy5f'@;
put 'cmVzdWx0cy5zb21lKGwpfXRvQXJyYXkoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5zbGljZSgpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMudG9TdHJpbmcoKX1yZXNldChsLGEpe3RoaXMuZGlydHk9ITE7Y29uc3QgZD1mdW5jdGlvbiB0MChjKXtyZXR1cm4gYy5mbGF0KE51bWJl'@;
put 'ci5QT1NJVElWRV9JTkZJTklUWSl9KGwpOyh0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWQ9IWZ1bmN0aW9uIGhmKGMsbCxhKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgZD0wO2Q8Yy5sZW5ndGg7ZCsrKXtsZXQgaD1jW2RdLGY9bFtkXTtpZihhJiYoaD1hKGgpLGY9YShm'@;
put 'KSksZiE9PWgpcmV0dXJuITF9cmV0dXJuITB9KHRoaXMuX3Jlc3VsdHMsZCxhKSkmJih0aGlzLl9yZXN1bHRzPWQsdGhpcy5sZW5ndGg9ZC5sZW5ndGgsdGhpcy5sYXN0PWRbdGhpcy5sZW5ndGgtMV0sdGhpcy5maXJzdD1kWzBdKX1ub3RpZnlPbkNoYW5nZXMoKXt2b2lkIDAhPT10aGlzLl9j'@;
put 'aGFuZ2VzJiYodGhpcy5fY2hhbmdlc0RldGVjdGVkfHwhdGhpcy5fZW1pdERpc3RpbmN0Q2hhbmdlc09ubHkpJiZ0aGlzLl9jaGFuZ2VzLmVtaXQodGhpcyl9b25EaXJ0eShsKXt0aGlzLl9vbkRpcnR5PWx9c2V0RGlydHkoKXt0aGlzLmRpcnR5PSEwLHRoaXMuX29uRGlydHk/LigpfWRlc3Ry'@;
put 'b3koKXt2b2lkIDAhPT10aGlzLl9jaGFuZ2VzJiYodGhpcy5fY2hhbmdlcy5jb21wbGV0ZSgpLHRoaXMuX2NoYW5nZXMudW5zdWJzY3JpYmUoKSl9fWZ1bmN0aW9uIHp2KGMpe3JldHVybiEoMTI4Jn5jLmZsYWdzKX1jb25zdCBTQz1uZXcgTWFwO2xldCBqVj0wO2NvbnN0IHhDPSJfX25nQ29u'@;
put 'dGV4dF9fIjtmdW5jdGlvbiBWdShjLGwpe091KGwpPyhjW3hDXT1sW18wXSxmdW5jdGlvbiBVVihjKXtTQy5zZXQoY1tfMF0sYyl9KGwpKTpjW3hDXT1sfWZ1bmN0aW9uIE1rKGMpe3JldHVybiBFayhjW19mXSl9ZnVuY3Rpb24geGsoYyl7cmV0dXJuIEVrKGNbSGNdKX1mdW5jdGlvbiBFayhj'@;
put 'KXtmb3IoO251bGwhPT1jJiYhUHUoYyk7KWM9Y1tIY107cmV0dXJuIGN9bGV0IFRDO2Z1bmN0aW9uIFkzKCl7aWYodm9pZCAwIT09VEMpcmV0dXJuIFRDO2lmKHR5cGVvZiBkb2N1bWVudDwidSIpcmV0dXJuIGRvY3VtZW50O3Rocm93IG5ldyBRbigyMTAsITEpfWNvbnN0IFl2PW5ldyBTdCgi'@;
put 'Iix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+YUJ9KSxhQj0ibmciLExrPW5ldyBTdCgiIiksb2E9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJwbGF0Zm9ybSIsZmFjdG9yeTooKT0+InVua25vd24ifSksT2s9bmV3IFN0KCIiKSxSNT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3Qi'@;
put 'LGZhY3Rvcnk6KCk9PlkzKCkuYm9keT8ucXVlcnlTZWxlY3RvcigiW25nQ3NwTm9uY2VdIik/LmdldEF0dHJpYnV0ZSgibmdDc3BOb25jZSIpfHxudWxsfSk7bGV0IEZrPSgpPT5udWxsO2Z1bmN0aW9uIFJDKGMsbCxhPSExKXtyZXR1cm4gRmsoYyxsLGEpfWNvbnN0IFZrPW5ldyBTdCgiIix7'@;
put 'cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITF9KTtsZXQgWHYsSnY7ZnVuY3Rpb24gUDUoYyl7cmV0dXJuIGZ1bmN0aW9uIEhDKCl7aWYodm9pZCAwPT09WHYmJihYdj1udWxsLFZ0LnRydXN0ZWRUeXBlcykpdHJ5e1h2PVZ0LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3Vs'@;
put 'YXIiLHtjcmVhdGVIVE1MOmM9PmMsY3JlYXRlU2NyaXB0OmM9PmMsY3JlYXRlU2NyaXB0VVJMOmM9PmN9KX1jYXRjaHt9cmV0dXJuIFh2fSgpPy5jcmVhdGVIVE1MKGMpfHxjfWZ1bmN0aW9uIE5DKCl7aWYodm9pZCAwPT09SnYmJihKdj1udWxsLFZ0LnRydXN0ZWRUeXBlcykpdHJ5e0p2PVZ0'@;
put 'LnRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3koImFuZ3VsYXIjdW5zYWZlLWJ5cGFzcyIse2NyZWF0ZUhUTUw6Yz0+YyxjcmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gSnZ9ZnVuY3Rpb24gamsoYyl7cmV0dXJuIE5DKCk/LmNyZWF0ZUhUTUwo'@;
put 'Yyl8fGN9ZnVuY3Rpb24gVWsoYyl7cmV0dXJuIE5DKCk/LmNyZWF0ZVNjcmlwdFVSTChjKXx8Y31jbGFzcyBaa3tjb25zdHJ1Y3RvcihsKXt0aGlzLmNoYW5naW5nVGhpc0JyZWFrc0FwcGxpY2F0aW9uU2VjdXJpdHk9bH10b1N0cmluZygpe3JldHVybmBTYWZlVmFsdWUgbXVzdCB1c2UgW3By'@;
put 'b3BlcnR5XT1iaW5kaW5nOiAke3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eX0gKHNlZSAke2dvfSlgfX1mdW5jdGlvbiBtMihjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFprP2MuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eTpjfWZ1bmN0aW9u'@;
put 'IEg0KGMsbCl7Y29uc3QgYT1mdW5jdGlvbiBXayhjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFprJiZjLmdldFR5cGVOYW1lKCl8fG51bGx9KGMpO2lmKG51bGwhPWEmJmEhPT1sKXtpZigiUmVzb3VyY2VVUkwiPT09YSYmIlVSTCI9PT1sKXJldHVybiEwO3Rocm93IG5ldyBFcnJvcihgUmVxdWly'@;
put 'ZWQgYSBzYWZlICR7bH0sIGdvdCBhICR7YX0gKHNlZSAke2dvfSlgKX1yZXR1cm4gYT09PWx9Y2xhc3MgWWt7Y29uc3RydWN0b3IobCl7dGhpcy5pbmVydERvY3VtZW50SGVscGVyPWx9Z2V0SW5lcnRCb2R5RWxlbWVudChsKXtsPSI8Ym9keT48cmVtb3ZlPjwvcmVtb3ZlPiIrbDt0cnl7Y29u'@;
put 'c3QgYT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhQNShsKSwidGV4dC9odG1sIikuYm9keTtyZXR1cm4gbnVsbD09PWE/dGhpcy5pbmVydERvY3VtZW50SGVscGVyLmdldEluZXJ0Qm9keUVsZW1lbnQobCk6KGEucmVtb3ZlQ2hpbGQoYS5maXJzdENoaWxkKSxhKX1j'@;
put 'YXRjaHtyZXR1cm4gbnVsbH19fWNsYXNzIEVCe2NvbnN0cnVjdG9yKGwpe3RoaXMuZGVmYXVsdERvYz1sLHRoaXMuaW5lcnREb2N1bWVudD10aGlzLmRlZmF1bHREb2MuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCJzYW5pdGl6YXRpb24taW5lcnQiKX1nZXRJbmVydEJvZHlF'@;
put 'bGVtZW50KGwpe2NvbnN0IGE9dGhpcy5pbmVydERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGEuaW5uZXJIVE1MPVA1KGwpLGF9fWNvbnN0IFRCPS9eKD8hamF2YXNjcmlwdDopKD86W2EtejAtOSsuLV0rOnxbXiY6XC8/I10qKD86W1wvPyNdfCQpKS9pO2Z1bmN0'@;
put 'aW9uIEJDKGMpe3JldHVybihjPVN0cmluZyhjKSkubWF0Y2goVEIpP2M6InVuc2FmZToiK2N9ZnVuY3Rpb24gRGYoYyl7Y29uc3QgbD17fTtmb3IoY29uc3QgYSBvZiBjLnNwbGl0KCIsIikpbFthXT0hMDtyZXR1cm4gbH1mdW5jdGlvbiBpOCguLi5jKXtjb25zdCBsPXt9O2Zvcihjb25zdCBh'@;
put 'IG9mIGMpZm9yKGNvbnN0IGQgaW4gYSlhLmhhc093blByb3BlcnR5KGQpJiYobFtkXT0hMCk7cmV0dXJuIGx9Y29uc3QgJGs9RGYoImFyZWEsYnIsY29sLGhyLGltZyx3YnIiKSxLaz1EZigiY29sZ3JvdXAsZGQsZHQsbGkscCx0Ym9keSx0ZCx0Zm9vdCx0aCx0aGVhZCx0ciIpLHFrPURmKCJy'@;
put 'cCxydCIpLGpDPWk4KCRrLGk4KEtrLERmKCJhZGRyZXNzLGFydGljbGUsYXNpZGUsYmxvY2txdW90ZSxjYXB0aW9uLGNlbnRlcixkZWwsZGV0YWlscyxkaWFsb2csZGlyLGRpdixkbCxmaWd1cmUsZmlnY2FwdGlvbixmb290ZXIsaDEsaDIsaDMsaDQsaDUsaDYsaGVhZGVyLGhncm91cCxocixp'@;
put 'bnMsbWFpbixtYXAsbWVudSxuYXYsb2wscHJlLHNlY3Rpb24sc3VtbWFyeSx0YWJsZSx1bCIpKSxpOChxayxEZigiYSxhYmJyLGFjcm9ueW0sYXVkaW8sYixiZGksYmRvLGJpZyxicixjaXRlLGNvZGUsZGVsLGRmbixlbSxmb250LGksaW1nLGlucyxrYmQsbGFiZWwsbWFwLG1hcmsscGljdHVy'@;
put 'ZSxxLHJ1YnkscnAscnQscyxzYW1wLHNtYWxsLHNvdXJjZSxzcGFuLHN0cmlrZSxzdHJvbmcsc3ViLHN1cCx0aW1lLHRyYWNrLHR0LHUsdmFyLHZpZGVvIikpLGk4KHFrLEtrKSksekM9RGYoImJhY2tncm91bmQsY2l0ZSxocmVmLGl0ZW10eXBlLGxvbmdkZXNjLHBvc3RlcixzcmMseGxpbms6'@;
put 'aHJlZiIpLFhrPWk4KHpDLERmKCJhYmJyLGFjY2Vzc2tleSxhbGlnbixhbHQsYXV0b3BsYXksYXhpcyxiZ2NvbG9yLGJvcmRlcixjZWxscGFkZGluZyxjZWxsc3BhY2luZyxjbGFzcyxjbGVhcixjb2xvcixjb2xzLGNvbHNwYW4sY29tcGFjdCxjb250cm9scyxjb29yZHMsZGF0ZXRpbWUsZGVm'@;
put 'YXVsdCxkaXIsZG93bmxvYWQsZmFjZSxoZWFkZXJzLGhlaWdodCxoaWRkZW4saHJlZmxhbmcsaHNwYWNlLGlzbWFwLGl0ZW1zY29wZSxpdGVtcHJvcCxraW5kLGxhYmVsLGxhbmcsbGFuZ3VhZ2UsbG9vcCxtZWRpYSxtdXRlZCxub2hyZWYsbm93cmFwLG9wZW4scHJlbG9hZCxyZWwscmV2LHJv'@;
put 'bGUscm93cyxyb3dzcGFuLHJ1bGVzLHNjb3BlLHNjcm9sbGluZyxzaGFwZSxzaXplLHNpemVzLHNwYW4sc3JjbGFuZyxzcmNzZXQsc3RhcnQsc3VtbWFyeSx0YWJpbmRleCx0YXJnZXQsdGl0bGUsdHJhbnNsYXRlLHR5cGUsdXNlbWFwLHZhbGlnbix2YWx1ZSx2c3BhY2Usd2lkdGgiKSxEZigi'@;
put 'YXJpYS1hY3RpdmVkZXNjZW5kYW50LGFyaWEtYXRvbWljLGFyaWEtYXV0b2NvbXBsZXRlLGFyaWEtYnVzeSxhcmlhLWNoZWNrZWQsYXJpYS1jb2xjb3VudCxhcmlhLWNvbGluZGV4LGFyaWEtY29sc3BhbixhcmlhLWNvbnRyb2xzLGFyaWEtY3VycmVudCxhcmlhLWRlc2NyaWJlZGJ5LGFyaWEt'@;
put 'ZGV0YWlscyxhcmlhLWRpc2FibGVkLGFyaWEtZHJvcGVmZmVjdCxhcmlhLWVycm9ybWVzc2FnZSxhcmlhLWV4cGFuZGVkLGFyaWEtZmxvd3RvLGFyaWEtZ3JhYmJlZCxhcmlhLWhhc3BvcHVwLGFyaWEtaGlkZGVuLGFyaWEtaW52YWxpZCxhcmlhLWtleXNob3J0Y3V0cyxhcmlhLWxhYmVsLGFy'@;
put 'aWEtbGFiZWxsZWRieSxhcmlhLWxldmVsLGFyaWEtbGl2ZSxhcmlhLW1vZGFsLGFyaWEtbXVsdGlsaW5lLGFyaWEtbXVsdGlzZWxlY3RhYmxlLGFyaWEtb3JpZW50YXRpb24sYXJpYS1vd25zLGFyaWEtcGxhY2Vob2xkZXIsYXJpYS1wb3NpbnNldCxhcmlhLXByZXNzZWQsYXJpYS1yZWFkb25s'@;
put 'eSxhcmlhLXJlbGV2YW50LGFyaWEtcmVxdWlyZWQsYXJpYS1yb2xlZGVzY3JpcHRpb24sYXJpYS1yb3djb3VudCxhcmlhLXJvd2luZGV4LGFyaWEtcm93c3BhbixhcmlhLXNlbGVjdGVkLGFyaWEtc2V0c2l6ZSxhcmlhLXNvcnQsYXJpYS12YWx1ZW1heCxhcmlhLXZhbHVlbWluLGFyaWEtdmFs'@;
put 'dWVub3csYXJpYS12YWx1ZXRleHQiKSksQUI9RGYoInNjcmlwdCxzdHlsZSx0ZW1wbGF0ZSIpO2NsYXNzIEpre2NvbnN0cnVjdG9yKCl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITEsdGhpcy5idWY9W119c2FuaXRpemVDaGlsZHJlbihsKXtsZXQgYT1sLmZpcnN0Q2hpbGQsZD0hMCxoPVtd'@;
put 'O2Zvcig7YTspaWYoYS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFP2Q9dGhpcy5zdGFydEVsZW1lbnQoYSk6YS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP3RoaXMuY2hhcnMoYS5ub2RlVmFsdWUpOnRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLGQmJmEuZmlyc3RDaGlsZCloLnB1'@;
put 'c2goYSksYT1JQihhKTtlbHNlIGZvcig7YTspe2Eubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmdGhpcy5lbmRFbGVtZW50KGEpO2xldCBmPURCKGEpO2lmKGYpe2E9ZjticmVha31hPWgucG9wKCl9cmV0dXJuIHRoaXMuYnVmLmpvaW4oIiIpfXN0YXJ0RWxlbWVudChsKXtjb25zdCBh'@;
put 'PVFrKGwpLnRvTG93ZXJDYXNlKCk7aWYoIWpDLmhhc093blByb3BlcnR5KGEpKXJldHVybiB0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMCwhQUIuaGFzT3duUHJvcGVydHkoYSk7dGhpcy5idWYucHVzaCgiPCIpLHRoaXMuYnVmLnB1c2goYSk7Y29uc3QgZD1sLmF0dHJpYnV0ZXM7Zm9yKGxl'@;
put 'dCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZC5pdGVtKGgpLHY9Zi5uYW1lLE09di50b0xvd2VyQ2FzZSgpO2lmKCFYay5oYXNPd25Qcm9wZXJ0eShNKSl7dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITA7Y29udGludWV9bGV0IEQ9Zi52YWx1ZTt6Q1tNXSYmKEQ9QkMoRCkpLHRoaXMu'@;
put 'YnVmLnB1c2goIiAiLHYsJz0iJyx0RChEKSwnIicpfXJldHVybiB0aGlzLmJ1Zi5wdXNoKCI+IiksITB9ZW5kRWxlbWVudChsKXtjb25zdCBhPVFrKGwpLnRvTG93ZXJDYXNlKCk7akMuaGFzT3duUHJvcGVydHkoYSkmJiEkay5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuYnVmLnB1c2goIjwv'@;
put 'IiksdGhpcy5idWYucHVzaChhKSx0aGlzLmJ1Zi5wdXNoKCI+IikpfWNoYXJzKGwpe3RoaXMuYnVmLnB1c2godEQobCkpfX1mdW5jdGlvbiBEQihjKXtjb25zdCBsPWMubmV4dFNpYmxpbmc7aWYobCYmYyE9PWwucHJldmlvdXNTaWJsaW5nKXRocm93IGVEKGwpO3JldHVybiBsfWZ1bmN0aW9u'@;
put 'IElCKGMpe2NvbnN0IGw9Yy5maXJzdENoaWxkO2lmKGwmJmZ1bmN0aW9uIGtCKGMsbCl7cmV0dXJuKGMuY29tcGFyZURvY3VtZW50UG9zaXRpb24obCkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQlkpIT09Tm9kZS5ET0NVTUVOVF9QT1NJVElPTl9DT05UQUlORURfQll9KGMs'@;
put 'bCkpdGhyb3cgZUQobCk7cmV0dXJuIGx9ZnVuY3Rpb24gUWsoYyl7Y29uc3QgbD1jLm5vZGVOYW1lO3JldHVybiJzdHJpbmciPT10eXBlb2YgbD9sOiJGT1JNIn1mdW5jdGlvbiBlRChjKXtyZXR1cm4gbmV3IEVycm9yKGBGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBlbGVt'@;
put 'ZW50IGlzIGNsb2JiZXJlZDogJHtjLm91dGVySFRNTH1gKX1jb25zdCBSQj0vW1x1RDgwMC1cdURCRkZdW1x1REMwMC1cdURGRkZdL2csTEI9LyhbXlwjLX4gfCFdKS9nO2Z1bmN0aW9uIHREKGMpe3JldHVybiBjLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKFJCLGZ1bmN0aW9uKGwp'@;
put 'e3JldHVybiImIyIrKDEwMjQqKGwuY2hhckNvZGVBdCgwKS01NTI5NikrKGwuY2hhckNvZGVBdCgxKS01NjMyMCkrNjU1MzYpKyI7In0pLnJlcGxhY2UoTEIsZnVuY3Rpb24obCl7cmV0dXJuIiYjIitsLmNoYXJDb2RlQXQoMCkrIjsifSkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgv'@;
put 'Pi9nLCImZ3Q7Iil9bGV0IFF2O2Z1bmN0aW9uIFVDKGMpe3JldHVybiJjb250ZW50ImluIGMmJmZ1bmN0aW9uIFBCKGMpe3JldHVybiBjLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUmJiJURU1QTEFURSI9PT1jLm5vZGVOYW1lfShjKT9jLmNvbnRlbnQ6bnVsbH12YXIgSDU9ZnVuY3Rp'@;
put 'b24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJOT05FIixjW2MuSFRNTD0xXT0iSFRNTCIsY1tjLlNUWUxFPTJdPSJTVFlMRSIsY1tjLlNDUklQVD0zXT0iU0NSSVBUIixjW2MuVVJMPTRdPSJVUkwiLGNbYy5SRVNPVVJDRV9VUkw9NV09IlJFU09VUkNFX1VSTCIsY30oSDV8fHt9KTtmdW5jdGlv'@;
put 'biBWNChjKXtjb25zdCBsPW84KCk7cmV0dXJuIGw/amsobC5zYW5pdGl6ZShINS5IVE1MLGMpfHwiIik6SDQoYywiSFRNTCIpP2prKG0yKGMpKTpmdW5jdGlvbiBPQihjLGwpe2xldCBhPW51bGw7dHJ5e1F2PVF2fHxmdW5jdGlvbiBWQyhjKXtjb25zdCBsPW5ldyBFQihjKTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24gR2soKXt0cnl7cmV0dXJuISEobmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhQNSgiIiksInRleHQvaHRtbCIpfWNhdGNoe3JldHVybiExfX0oKT9uZXcgWWsobCk6bH0oYyk7bGV0IGQ9bD9TdHJpbmcobCk6IiI7YT1Rdi5nZXRJbmVydEJvZHlFbGVtZW50KGQp'@;
put 'O2xldCBoPTUsZj1kO2Rve2lmKDA9PT1oKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIHNhbml0aXplIGh0bWwgYmVjYXVzZSB0aGUgaW5wdXQgaXMgdW5zdGFibGUiKTtoLS0sZD1mLGY9YS5pbm5lckhUTUwsYT1Rdi5nZXRJbmVydEJvZHlFbGVtZW50KGQpfXdoaWxlKGQhPT1mKTtyZXR1'@;
put 'cm4gUDUoKG5ldyBKaykuc2FuaXRpemVDaGlsZHJlbihVQyhhKXx8YSkpfWZpbmFsbHl7aWYoYSl7Y29uc3QgZD1VQyhhKXx8YTtmb3IoO2QuZmlyc3RDaGlsZDspZC5yZW1vdmVDaGlsZChkLmZpcnN0Q2hpbGQpfX19KFkzKCksU28oYykpfWZ1bmN0aW9uIFpDKGMpe2NvbnN0IGw9bzgoKTty'@;
put 'ZXR1cm4gbD9sLnNhbml0aXplKEg1LlVSTCxjKXx8IiI6SDQoYywiVVJMIik/bTIoYyk6QkMoU28oYykpfWZ1bmN0aW9uIG5EKGMpe2NvbnN0IGw9bzgoKTtpZihsKXJldHVybiBVayhsLnNhbml0aXplKEg1LlJFU09VUkNFX1VSTCxjKXx8IiIpO2lmKEg0KGMsIlJlc291cmNlVVJMIikpcmV0'@;
put 'dXJuIFVrKG0yKGMpKTt0aHJvdyBuZXcgUW4oOTA0LCExKX1mdW5jdGlvbiBvOCgpe2NvbnN0IGM9ZGkoKTtyZXR1cm4gYyYmY1tMMV0uc2FuaXRpemVyfWNvbnN0IGpCPS9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2csekI9Lyg8fD4pL2csVUI9Ilx1MjAwYiQxXHUyMDBiIjtmdW5jdGlv'@;
put 'biBxQyhjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fWZ1bmN0aW9uICQzKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnR9ZnVuY3Rpb24gRjEoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBGdW5jdGlvbj9jKCk6Y312YXIgSzM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5JbXBv'@;
put 'cnRhbnQ9MV09IkltcG9ydGFudCIsY1tjLkRhc2hDYXNlPTJdPSJEYXNoQ2FzZSIsY30oSzN8fHt9KTtsZXQgWEM7ZnVuY3Rpb24gSkMoYyxsKXtyZXR1cm4gWEMoYyxsKX1mdW5jdGlvbiBWNShjLGwsYSxkLGgpe2lmKG51bGwhPWQpe2xldCBmLHY9ITE7UHUoZCk/Zj1kOk91KGQpJiYodj0h'@;
put 'MCxkPWRbemxdKTtjb25zdCBNPUNsKGQpOzA9PT1jJiZudWxsIT09YT9udWxsPT1oP2liKGwsYSxNKTpaNChsLGEsTSxofHxudWxsLCEwKToxPT09YyYmbnVsbCE9PWE/WjQobCxhLE0saHx8bnVsbCwhMCk6Mj09PWM/ZnVuY3Rpb24gdTgoYyxsLGEpe2NvbnN0IGQ9cTMoYyxsKTtkJiZmdW5j'@;
put 'dGlvbiBzOChjLGwsYSxkKXtjLnJlbW92ZUNoaWxkKGwsYSxkKX0oYyxkLGwsYSl9KGwsTSx2KTozPT09YyYmbC5kZXN0cm95Tm9kZShNKSxudWxsIT1mJiZmdW5jdGlvbiB0aihjLGwsYSxkLGgpe2NvbnN0IGY9YVttdV07ZiE9PUNsKGEpJiZWNShsLGMsZCxmLGgpO2ZvcihsZXQgTT1nYztN'@;
put 'PGEubGVuZ3RoO00rKyl7Y29uc3QgRD1hW01dO29iKERbS2ldLEQsYyxsLGQsZil9fShsLGMsZixhLGgpfX1mdW5jdGlvbiBlUyhjLGwpe3JldHVybiBjLmNyZWF0ZUNvbW1lbnQoZnVuY3Rpb24gTjUoYyl7cmV0dXJuIGMucmVwbGFjZShqQixsPT5sLnJlcGxhY2UoekIsVUIpKX0obCkpfWZ1'@;
put 'bmN0aW9uIHo0KGMsbCxhKXtyZXR1cm4gYy5jcmVhdGVFbGVtZW50KGwsYSl9ZnVuY3Rpb24gZEQoYyxsKXtsW0wxXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgxKSxvYihjLGwsbFtiYV0sMixudWxsLG51bGwpfWZ1bmN0aW9uIG5TKGMsbCl7Y29uc3QgYT1jW1YzXSxkPWEu'@;
put 'aW5kZXhPZihsKTthLnNwbGljZShkLDEpfWZ1bmN0aW9uIGE4KGMsbCl7aWYoYy5sZW5ndGg8PWdjKXJldHVybjtjb25zdCBhPWdjK2wsZD1jW2FdO2lmKGQpe2NvbnN0IGg9ZFtTNF07bnVsbCE9PWgmJmghPT1jJiZuUyhoLGQpLGw+MCYmKGNbYS0xXVtIY109ZFtIY10pO2NvbnN0IGY9UnUo'@;
put 'YyxnYytsKTshZnVuY3Rpb24gdUQoYyxsKXtkRChjLGwpLGxbemxdPW51bGwsbFtyY109bnVsbH0oZFtLaV0sZCk7Y29uc3Qgdj1mW2RkXTtudWxsIT09diYmdi5kZXRhY2hWaWV3KGZbS2ldKSxkW2ZjXT1udWxsLGRbSGNdPW51bGwsZFtab10mPS0xMjl9cmV0dXJuIGR9ZnVuY3Rpb24gVTQo'@;
put 'YyxsKXtpZighKDI1NiZsW1pvXSkpe2NvbnN0IGE9bFtiYV07YS5kZXN0cm95Tm9kZSYmb2IoYyxsLGEsMyxudWxsLG51bGwpLGZ1bmN0aW9uIFhCKGMpe2xldCBsPWNbX2ZdO2lmKCFsKXJldHVybiByUyhjW0tpXSxjKTtmb3IoO2w7KXtsZXQgYT1udWxsO2lmKE91KGwpKWE9bFtfZl07ZWxz'@;
put 'ZXtjb25zdCBkPWxbZ2NdO2QmJihhPWQpfWlmKCFhKXtmb3IoO2wmJiFsW0hjXSYmbCE9PWM7KU91KGwpJiZyUyhsW0tpXSxsKSxsPWxbZmNdO251bGw9PT1sJiYobD1jKSxPdShsKSYmclMobFtLaV0sbCksYT1sJiZsW0hjXX1sPWF9fShsKX19ZnVuY3Rpb24gclMoYyxsKXtpZigyNTYmbFta'@;
put 'b10pcmV0dXJuO2NvbnN0IGE9X2UobnVsbCk7dHJ5e2xbWm9dJj0tMTI5LGxbWm9dfD0yNTYsbFtDZl0mJmZ1bmN0aW9uIEEoYyl7aWYod2UoYyksc2UoYykpZm9yKGxldCBsPTA7bDxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7bCsrKXRlKGMucHJvZHVjZXJOb2RlW2xdLGMucHJvZHVjZXJJbmRl'@;
put 'eE9mVGhpc1tsXSk7Yy5wcm9kdWNlck5vZGUubGVuZ3RoPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24ubGVuZ3RoPWMucHJvZHVjZXJJbmRleE9mVGhpcy5sZW5ndGg9MCxjLmxpdmVDb25zdW1lck5vZGUmJihjLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoPWMubGl2ZUNvbnN1bWVySW5kZXhP'@;
put 'ZlRoaXMubGVuZ3RoPTApfShsW0NmXSksZnVuY3Rpb24gUUIoYyxsKXtsZXQgYTtpZihudWxsIT1jJiZudWxsIT0oYT1jLmRlc3Ryb3lIb29rcykpZm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKz0yKXtjb25zdCBoPWxbYVtkXV07aWYoIShoIGluc3RhbmNlb2YgUDEpKXtjb25zdCBmPWFbZCsx'@;
put 'XTtpZihBcnJheS5pc0FycmF5KGYpKWZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7dis9Mil7Y29uc3QgTT1oW2Zbdl1dLEQ9Zlt2KzFdO3UyKDQsTSxEKTt0cnl7RC5jYWxsKE0pfWZpbmFsbHl7dTIoNSxNLEQpfX1lbHNle3UyKDQsaCxmKTt0cnl7Zi5jYWxsKGgpfWZpbmFsbHl7dTIoNSxoLGYp'@;
put 'fX19fX0oYyxsKSxmdW5jdGlvbiBoRChjLGwpe2NvbnN0IGE9Yy5jbGVhbnVwLGQ9bFtYMF07aWYobnVsbCE9PWEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aC0xO2YrPTIpaWYoInN0cmluZyI9PXR5cGVvZiBhW2ZdKXtjb25zdCB2PWFbZiszXTt2Pj0wP2Rbdl0oKTpkWy12XS51bnN1YnNjcmli'@;
put 'ZSgpLGYrPTJ9ZWxzZSBhW2ZdLmNhbGwoZFthW2YrMV1dKTtudWxsIT09ZCYmKGxbWDBdPW51bGwpO2NvbnN0IGg9bFthMl07aWYobnVsbCE9PWgpe2xbYTJdPW51bGw7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspKDAsaFtmXSkoKX19KGMsbCksMT09PWxbS2ldLnR5cGUmJmxbYmFdLmRl'@;
put 'c3Ryb3koKTtjb25zdCBkPWxbUzRdO2lmKG51bGwhPT1kJiZQdShsW2ZjXSkpe2QhPT1sW2ZjXSYmblMoZCxsKTtjb25zdCBoPWxbZGRdO251bGwhPT1oJiZoLmRldGFjaFZpZXcoYyl9IWZ1bmN0aW9uIFpWKGMpe1NDLmRlbGV0ZShjW18wXSl9KGwpfWZpbmFsbHl7X2UoYSl9fWZ1bmN0aW9u'@;
put 'IHJiKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gaVMoYyxsLGEpe2xldCBkPWw7Zm9yKDtudWxsIT09ZCYmNDAmZC50eXBlOylkPShsPWQpLnBhcmVudDtpZihudWxsPT09ZClyZXR1cm4gYVt6bF07e2NvbnN0e2NvbXBvbmVudE9mZnNldDpofT1kO2lmKGg+LTEpe2NvbnN0e2VuY2Fwc3VsYXRp'@;
put 'b246Zn09Yy5kYXRhW2QuZGlyZWN0aXZlU3RhcnQraF07aWYoZj09PVhzLk5vbmV8fGY9PT1Ycy5FbXVsYXRlZClyZXR1cm4gbnVsbH1yZXR1cm4gUjAoZCxhKX19KGMsbC5wYXJlbnQsYSl9ZnVuY3Rpb24gWjQoYyxsLGEsZCxoKXtjLmluc2VydEJlZm9yZShsLGEsZCxoKX1mdW5jdGlvbiBp'@;
put 'YihjLGwsYSl7Yy5hcHBlbmRDaGlsZChsLGEpfWZ1bmN0aW9uIGZEKGMsbCxhLGQsaCl7bnVsbCE9PWQ/WjQoYyxsLGEsZCxoKTppYihjLGwsYSl9ZnVuY3Rpb24gcTMoYyxsKXtyZXR1cm4gYy5wYXJlbnROb2RlKGwpfWZ1bmN0aW9uIGM4KGMsbCxhKXtyZXR1cm4gWDMoYyxsLGEpfWxldCBz'@;
put 'UyxYMz1mdW5jdGlvbiBhUyhjLGwsYSl7cmV0dXJuIDQwJmMudHlwZT9SMChjLGEpOm51bGx9O2Z1bmN0aW9uIHMwKGMsbCxhLGQpe2NvbnN0IGg9cmIoYyxkLGwpLGY9bFtiYV0sTT1jOChkLnBhcmVudHx8bFtyY10sZCxsKTtpZihudWxsIT1oKWlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxl'@;
put 'dCBEPTA7RDxhLmxlbmd0aDtEKyspZkQoZixoLGFbRF0sTSwhMSk7ZWxzZSBmRChmLGgsYSxNLCExKTt2b2lkIDAhPT1zUyYmc1MoZixkLGwsYSxoKX1mdW5jdGlvbiBKMyhjLGwpe2lmKG51bGwhPT1sKXtjb25zdCBhPWwudHlwZTtpZigzJmEpcmV0dXJuIFIwKGwsYyk7aWYoNCZhKXJldHVy'@;
put 'biBjUygtMSxjW2wuaW5kZXhdKTtpZig4JmEpe2NvbnN0IGQ9bC5jaGlsZDtpZihudWxsIT09ZClyZXR1cm4gSjMoYyxkKTt7Y29uc3QgaD1jW2wuaW5kZXhdO3JldHVybiBQdShoKT9jUygtMSxoKTpDbChoKX19aWYoMzImYSlyZXR1cm4gSkMobCxjKSgpfHxDbChjW2wuaW5kZXhdKTt7Y29u'@;
put 'c3QgZD1wRChjLGwpO3JldHVybiBudWxsIT09ZD9BcnJheS5pc0FycmF5KGQpP2RbMF06SjMoVDQoY1tVbF0pLGQpOkozKGMsbC5uZXh0KX19cmV0dXJuIG51bGx9ZnVuY3Rpb24gcEQoYyxsKXtyZXR1cm4gbnVsbCE9PWw/Y1tVbF1bcmNdLnByb2plY3Rpb25bbC5wcm9qZWN0aW9uXTpudWxs'@;
put 'fWZ1bmN0aW9uIGNTKGMsbCl7Y29uc3QgYT1nYytjKzE7aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdLGg9ZFtLaV0uZmlyc3RDaGlsZDtpZihudWxsIT09aClyZXR1cm4gSjMoZCxoKX1yZXR1cm4gbFttdV19ZnVuY3Rpb24gdVMoYyxsLGEsZCxoLGYsdil7Zm9yKDtudWxsIT1hOyl7Y29u'@;
put 'c3QgTT1kW2EuaW5kZXhdLEQ9YS50eXBlO2lmKHYmJjA9PT1sJiYoTSYmVnUoQ2woTSksZCksYS5mbGFnc3w9MiksMzImfmEuZmxhZ3MpaWYoOCZEKXVTKGMsbCxhLmNoaWxkLGQsaCxmLCExKSxWNShsLGMsaCxNLGYpO2Vsc2UgaWYoMzImRCl7Y29uc3QgWj1KQyhhLGQpO2xldCBuZTtmb3Io'@;
put 'O25lPVooKTspVjUobCxjLGgsbmUsZik7VjUobCxjLGgsTSxmKX1lbHNlIDE2JkQ/bUQoYyxsLGQsYSxoLGYpOlY1KGwsYyxoLE0sZik7YT12P2EucHJvamVjdGlvbk5leHQ6YS5uZXh0fX1mdW5jdGlvbiBvYihjLGwsYSxkLGgsZil7dVMoYSxkLGMuZmlyc3RDaGlsZCxsLGgsZiwhMSl9ZnVu'@;
put 'Y3Rpb24gbUQoYyxsLGEsZCxoLGYpe2NvbnN0IHY9YVtVbF0sRD12W3JjXS5wcm9qZWN0aW9uW2QucHJvamVjdGlvbl07aWYoQXJyYXkuaXNBcnJheShEKSlmb3IobGV0IFo9MDtaPEQubGVuZ3RoO1orKylWNShsLGMsaCxEW1pdLGYpO2Vsc2V7bGV0IFo9RDtjb25zdCBuZT12W2ZjXTt6dihk'@;
put 'KSYmKFouZmxhZ3N8PTEyOCksdVMoYyxsLFosbmUsaCxmLCEwKX19ZnVuY3Rpb24geUQoYyxsLGEpeyIiPT09YT9jLnJlbW92ZUF0dHJpYnV0ZShsLCJjbGFzcyIpOmMuc2V0QXR0cmlidXRlKGwsImNsYXNzIixhKX1mdW5jdGlvbiBfRChjLGwsYSl7Y29uc3R7bWVyZ2VkQXR0cnM6ZCxjbGFz'@;
put 'c2VzOmgsc3R5bGVzOmZ9PWE7bnVsbCE9PWQmJm00KGMsbCxkKSxudWxsIT09aCYmeUQoYyxsLGgpLG51bGwhPT1mJiZmdW5jdGlvbiBiRChjLGwsYSl7Yy5zZXRBdHRyaWJ1dGUobCwic3R5bGUiLGEpfShjLGwsZil9Y29uc3QgUmE9e307ZnVuY3Rpb24gZmUoYz0xKXtkUyhhcygpLGRpKCks'@;
put 'SHUoKStjLCExKX1mdW5jdGlvbiBkUyhjLGwsYSxkKXtpZighZClpZigzJn5sW1pvXSl7Y29uc3QgZj1jLnByZU9yZGVySG9va3M7bnVsbCE9PWYmJlJ2KGwsZiwwLGEpfWVsc2V7Y29uc3QgZj1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09ZiYmSXYobCxmLGEpfUE0KGEpfWZ1bmN0aW9u'@;
put 'IEdlKGMsbD1pby5EZWZhdWx0KXtjb25zdCBhPWRpKCk7cmV0dXJuIG51bGw9PT1hP3hyKGMsbCk6dWsodWwoKSxhLFlpKGMpLGwpfWZ1bmN0aW9uIENEKGMsbCxhLGQsaCxmKXtjb25zdCB2PV9lKG51bGwpO3RyeXtsZXQgTT1udWxsO2gmam4uU2lnbmFsQmFzZWQmJihNPWxbZF1bbWVdKSxu'@;
put 'dWxsIT09TSYmdm9pZCAwIT09TS50cmFuc2Zvcm1GbiYmKGY9TS50cmFuc2Zvcm1GbihmKSksaCZqbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSYmKGY9Yy5pbnB1dFRyYW5zZm9ybXNbZF0uY2FsbChsLGYpKSxudWxsIT09Yy5zZXRJbnB1dD9jLnNldElucHV0KGwsTSxmLGEsZCk6WkEo'@;
put 'bCxNLGQsZil9ZmluYWxseXtfZSh2KX19ZnVuY3Rpb24gYWIoYyxsLGEsZCxoLGYsdixNLEQsWixuZSl7Y29uc3QgY2U9bC5ibHVlcHJpbnQuc2xpY2UoKTtyZXR1cm4gY2VbemxdPWgsY2VbWm9dPTIwNHxkLChudWxsIT09Wnx8YyYmMjA0OCZjW1pvXSkmJihjZVtab118PTIwNDgpLGVDKGNl'@;
put 'KSxjZVtmY109Y2VbbzBdPWMsY2VbY2xdPWEsY2VbTDFdPXZ8fGMmJmNbTDFdLGNlW2JhXT1NfHxjJiZjW2JhXSxjZVtwY109RHx8YyYmY1twY118fG51bGwsY2VbcmNdPWYsY2VbXzBdPWZ1bmN0aW9uIHpWKCl7cmV0dXJuIGpWKyt9KCksY2VbdHVdPW5lLGNlW28yXT1aLGNlW1VsXT0yPT1s'@;
put 'LnR5cGU/Y1tVbF06Y2UsY2V9ZnVuY3Rpb24gQjUoYyxsLGEsZCxoKXtsZXQgZj1jLmRhdGFbbF07aWYobnVsbD09PWYpZj1mdW5jdGlvbiBoUyhjLGwsYSxkLGgpe2NvbnN0IGY9ckMoKSx2PWlDKCksRD1jLmRhdGFbbF09ZnVuY3Rpb24gQUQoYyxsLGEsZCxoLGYpe2xldCB2PWw/bC5pbmpl'@;
put 'Y3RvckluZGV4Oi0xLE09MDtyZXR1cm4geTUoKSYmKE18PTEyOCkse3R5cGU6YSxpbmRleDpkLGluc2VydEJlZm9yZUluZGV4Om51bGwsaW5qZWN0b3JJbmRleDp2LGRpcmVjdGl2ZVN0YXJ0Oi0xLGRpcmVjdGl2ZUVuZDotMSxkaXJlY3RpdmVTdHlsaW5nTGFzdDotMSxjb21wb25lbnRPZmZz'@;
put 'ZXQ6LTEscHJvcGVydHlCaW5kaW5nczpudWxsLGZsYWdzOk0scHJvdmlkZXJJbmRleGVzOjAsdmFsdWU6aCxhdHRyczpmLG1lcmdlZEF0dHJzOm51bGwsbG9jYWxOYW1lczpudWxsLGluaXRpYWxJbnB1dHM6dm9pZCAwLGlucHV0czpudWxsLG91dHB1dHM6bnVsbCx0VmlldzpudWxsLG5leHQ6'@;
put 'bnVsbCxwcmV2Om51bGwscHJvamVjdGlvbk5leHQ6bnVsbCxjaGlsZDpudWxsLHBhcmVudDpsLHByb2plY3Rpb246bnVsbCxzdHlsZXM6bnVsbCxzdHlsZXNXaXRob3V0SG9zdDpudWxsLHJlc2lkdWFsU3R5bGVzOnZvaWQgMCxjbGFzc2VzOm51bGwsY2xhc3Nlc1dpdGhvdXRIb3N0Om51bGws'@;
put 'cmVzaWR1YWxDbGFzc2VzOnZvaWQgMCxjbGFzc0JpbmRpbmdzOjAsc3R5bGVCaW5kaW5nczowfX0oMCx2P2Y6ZiYmZi5wYXJlbnQsYSxsLGQsaCk7cmV0dXJuIG51bGw9PT1jLmZpcnN0Q2hpbGQmJihjLmZpcnN0Q2hpbGQ9RCksbnVsbCE9PWYmJih2P251bGw9PWYuY2hpbGQmJm51bGwhPT1E'@;
put 'LnBhcmVudCYmKGYuY2hpbGQ9RCk6bnVsbD09PWYubmV4dCYmKGYubmV4dD1ELEQucHJldj1mKSksRH0oYyxsLGEsZCxoKSxmdW5jdGlvbiB2Vigpe3JldHVybiBDYS5sRnJhbWUuaW5JMThufSgpJiYoZi5mbGFnc3w9MzIpO2Vsc2UgaWYoNjQmZi50eXBlKXtmLnR5cGU9YSxmLnZhbHVlPWQs'@;
put 'Zi5hdHRycz1oO2NvbnN0IHY9ZnVuY3Rpb24gRzYoKXtjb25zdCBjPUNhLmxGcmFtZSxsPWMuY3VycmVudFROb2RlO3JldHVybiBjLmlzUGFyZW50P2w6bC5wYXJlbnR9KCk7Zi5pbmplY3RvckluZGV4PW51bGw9PT12Py0xOnYuaW5qZWN0b3JJbmRleH1yZXR1cm4gaDIoZiwhMCksZn1mdW5j'@;
put 'dGlvbiBkOChjLGwsYSxkKXtpZigwPT09YSlyZXR1cm4tMTtjb25zdCBoPWwubGVuZ3RoO2ZvcihsZXQgZj0wO2Y8YTtmKyspbC5wdXNoKGQpLGMuYmx1ZXByaW50LnB1c2goZCksYy5kYXRhLnB1c2gobnVsbCk7cmV0dXJuIGh9ZnVuY3Rpb24gU0QoYyxsLGEsZCxoKXtjb25zdCBmPUh1KCks'@;
put 'dj0yJmQ7dHJ5e0E0KC0xKSx2JiZsLmxlbmd0aD53YSYmZFMoYyxsLHdhLCExKSx1Mih2PzI6MCxoKSxhKGQsaCl9ZmluYWxseXtBNChmKSx1Mih2PzM6MSxoKX19ZnVuY3Rpb24gZlMoYyxsLGEpe2lmKG51KGwpKXtjb25zdCBkPV9lKG51bGwpO3RyeXtjb25zdCBmPWwuZGlyZWN0aXZlRW5k'@;
put 'O2ZvcihsZXQgdj1sLmRpcmVjdGl2ZVN0YXJ0O3Y8Zjt2Kyspe2NvbnN0IE09Yy5kYXRhW3ZdO00uY29udGVudFF1ZXJpZXMmJk0uY29udGVudFF1ZXJpZXMoMSxhW3ZdLHYpfX1maW5hbGx5e19lKGQpfX19ZnVuY3Rpb24gcFMoYyxsLGEpe1FBKCkmJihmdW5jdGlvbiBkaihjLGwsYSxkKXtj'@;
put 'b25zdCBoPWEuZGlyZWN0aXZlU3RhcnQsZj1hLmRpcmVjdGl2ZUVuZDtTZihhKSYmZnVuY3Rpb24gdmooYyxsLGEpe2NvbnN0IGQ9UjAobCxjKSxoPXNiKGEpO2xldCB2PTE2O2Euc2lnbmFscz92PTQwOTY6YS5vblB1c2gmJih2PTY0KTtjb25zdCBNPWg4KGMsYWIoYyxoLG51bGwsdixkLGws'@;
put 'bnVsbCxjW0wxXS5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIoZCxhKSxudWxsLG51bGwsbnVsbCkpO2NbbC5pbmRleF09TX0obCxhLGMuZGF0YVtoK2EuY29tcG9uZW50T2Zmc2V0XSksYy5maXJzdENyZWF0ZVBhc3N8fEZ2KGEsbCksVnUoZCxsKTtjb25zdCB2PWEuaW5pdGlhbElu'@;
put 'cHV0cztmb3IobGV0IE09aDtNPGY7TSsrKXtjb25zdCBEPWMuZGF0YVtNXSxaPUQ0KGwsYyxNLGEpO1Z1KFosbCksbnVsbCE9PXYmJmxiKDAsTS1oLFosRCwwLHYpLE5jKEQpJiYoTzEoYS5pbmRleCxsKVtjbF09RDQobCxjLE0sYSkpfX0oYyxsLGEsUjAoYSxsKSksISg2NCZ+YS5mbGFncykm'@;
put 'JlJEKGMsbCxhKSl9ZnVuY3Rpb24gZ1MoYyxsLGE9UjApe2NvbnN0IGQ9bC5sb2NhbE5hbWVzO2lmKG51bGwhPT1kKXtsZXQgaD1sLmluZGV4KzE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKz0yKXtjb25zdCB2PWRbZisxXSxNPS0xPT09dj9hKGwsYyk6Y1t2XTtjW2grK109TX19fWZ1bmN0'@;
put 'aW9uIHNiKGMpe2NvbnN0IGw9Yy50VmlldztyZXR1cm4gbnVsbD09PWx8fGwuaW5jb21wbGV0ZUZpcnN0UGFzcz9jLnRWaWV3PW1TKDEsbnVsbCxjLnRlbXBsYXRlLGMuZGVjbHMsYy52YXJzLGMuZGlyZWN0aXZlRGVmcyxjLnBpcGVEZWZzLGMudmlld1F1ZXJ5LGMuc2NoZW1hcyxjLmNvbnN0'@;
put 'cyxjLmlkKTpsfWZ1bmN0aW9uIG1TKGMsbCxhLGQsaCxmLHYsTSxELFosbmUpe2NvbnN0IGNlPXdhK2QsYmU9Y2UraCxFZT1mdW5jdGlvbiByaihjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxsO2QrKylhLnB1c2goZDxjP251bGw6UmEpO3JldHVybiBhfShjZSxiZSksQmU9ImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFo/WigpOlo7cmV0dXJuIEVlW0tpXT17dHlwZTpjLGJsdWVwcmludDpFZSx0ZW1wbGF0ZTphLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6TSxkZWNsVE5vZGU6bCxkYXRhOkVlLnNsaWNlKCkuZmlsbChudWxsLGNlKSxiaW5kaW5nU3RhcnRJbmRleDpjZSxleHBhbmRvU3Rh'@;
put 'cnRJbmRleDpiZSxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNoZWNrSG9va3M6bnVsbCxjb250'@;
put 'ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2ZVJlZ2lzdHJ5OiJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBmP2YoKTpmLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygdj92KCk6dixmaXJzdENoaWxkOm51bGwsc2NoZW1hczpELGNvbnN0czpCZSxpbmNvbXBsZXRlRmlyc3RQYXNzOiExLHNzcklkOm5lfX1sZXQgTUQ9KCk9Pm51bGw7ZnVuY3Rpb24ga0QoYyxsLGEsZCxo'@;
put 'KXtmb3IobGV0IGYgaW4gbCl7aWYoIWwuaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Y29uc3Qgdj1sW2ZdO2lmKHZvaWQgMD09PXYpY29udGludWU7ZD8/PXt9O2xldCBNLEQ9am4uTm9uZTtBcnJheS5pc0FycmF5KHYpPyhNPXZbMF0sRD12WzFdKTpNPXY7bGV0IFo9ZjtpZihudWxsIT09'@;
put 'aCl7aWYoIWguaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Wj1oW2ZdfTA9PT1jP0REKGQsYSxaLE0sRCk6REQoZCxhLFosTSl9cmV0dXJuIGR9ZnVuY3Rpb24gREQoYyxsLGEsZCxoKXtsZXQgZjtjLmhhc093blByb3BlcnR5KGEpPyhmPWNbYV0pLnB1c2gobCxkKTpmPWNbYV09W2wsZF0s'@;
put 'dm9pZCAwIT09aCYmZi5wdXNoKGgpfWZ1bmN0aW9uIFAwKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1SMChsLGEpO2xldCBuZSxaPWwuaW5wdXRzOyFNJiZudWxsIT1aJiYobmU9WltkXSk/KENTKGMsYSxuZSxkLGgpLFNmKGwpJiZmdW5jdGlvbiBsaihjLGwpe2NvbnN0IGE9TzEobCxjKTsx'@;
put 'NiZhW1pvXXx8KGFbWm9dfD02NCl9KGEsbC5pbmRleCkpOjMmbC50eXBlJiYoZD1mdW5jdGlvbiBzaihjKXtyZXR1cm4iY2xhc3MiPT09Yz8iY2xhc3NOYW1lIjoiZm9yIj09PWM/Imh0bWxGb3IiOiJmb3JtYWN0aW9uIj09PWM/ImZvcm1BY3Rpb24iOiJpbm5lckh0bWwiPT09Yz8iaW5uZXJI'@;
put 'VE1MIjoicmVhZG9ubHkiPT09Yz8icmVhZE9ubHkiOiJ0YWJpbmRleCI9PT1jPyJ0YWJJbmRleCI6Y30oZCksaD1udWxsIT12P3YoaCxsLnZhbHVlfHwiIixkKTpoLGYuc2V0UHJvcGVydHkoRCxkLGgpKX1mdW5jdGlvbiB2UyhjLGwsYSxkKXtpZihRQSgpKXtjb25zdCBoPW51bGw9PT1kP251'@;
put 'bGw6eyIiOi0xfSxmPWZ1bmN0aW9uIGhqKGMsbCl7Y29uc3QgYT1jLmRpcmVjdGl2ZVJlZ2lzdHJ5O2xldCBkPW51bGwsaD1udWxsO2lmKGEpZm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IHY9YVtmXTtpZihiNChsLHYuc2VsZWN0b3JzLCExKSlpZihkfHwoZD1bXSksTmModikp'@;
put 'aWYobnVsbCE9PXYuZmluZEhvc3REaXJlY3RpdmVEZWZzKXtjb25zdCBNPVtdO2g9aHx8bmV3IE1hcCx2LmZpbmRIb3N0RGlyZWN0aXZlRGVmcyh2LE0saCksZC51bnNoaWZ0KC4uLk0sdikseVMoYyxsLE0ubGVuZ3RoKX1lbHNlIGQudW5zaGlmdCh2KSx5UyhjLGwsMCk7ZWxzZSBoPWh8fG5l'@;
put 'dyBNYXAsdi5maW5kSG9zdERpcmVjdGl2ZURlZnM/Lih2LGQsaCksZC5wdXNoKHYpfXJldHVybiBudWxsPT09ZD9udWxsOltkLGhdfShjLGEpO2xldCB2LE07bnVsbD09PWY/dj1NPW51bGw6W3YsTV09ZixudWxsIT09diYmYlMoYyxsLGEsdixoLE0pLGgmJmZ1bmN0aW9uIGZqKGMsbCxhKXtp'@;
put 'ZihsKXtjb25zdCBkPWMubG9jYWxOYW1lcz1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grPTIpe2NvbnN0IGY9YVtsW2grMV1dO2lmKG51bGw9PWYpdGhyb3cgbmV3IFFuKC0zMDEsITEpO2QucHVzaChsW2hdLGYpfX19KGEsZCxoKX1hLm1lcmdlZEF0dHJzPXBmKGEubWVyZ2VkQXR0cnMs'@;
put 'YS5hdHRycyl9ZnVuY3Rpb24gYlMoYyxsLGEsZCxoLGYpe2ZvcihsZXQgWj0wO1o8ZC5sZW5ndGg7WisrKWZkKEZ2KGEsbCksYyxkW1pdLnR5cGUpOyFmdW5jdGlvbiBnaihjLGwsYSl7Yy5mbGFnc3w9MSxjLmRpcmVjdGl2ZVN0YXJ0PWwsYy5kaXJlY3RpdmVFbmQ9bCthLGMucHJvdmlkZXJJ'@;
put 'bmRleGVzPWx9KGEsYy5kYXRhLmxlbmd0aCxkLmxlbmd0aCk7Zm9yKGxldCBaPTA7WjxkLmxlbmd0aDtaKyspe2NvbnN0IG5lPWRbWl07bmUucHJvdmlkZXJzUmVzb2x2ZXImJm5lLnByb3ZpZGVyc1Jlc29sdmVyKG5lKX1sZXQgdj0hMSxNPSExLEQ9ZDgoYyxsLGQubGVuZ3RoLG51bGwpO2Zv'@;
put 'cihsZXQgWj0wO1o8ZC5sZW5ndGg7WisrKXtjb25zdCBuZT1kW1pdO2EubWVyZ2VkQXR0cnM9cGYoYS5tZXJnZWRBdHRycyxuZS5ob3N0QXR0cnMpLG1qKGMsYSxsLEQsbmUpLHBqKEQsbmUsaCksbnVsbCE9PW5lLmNvbnRlbnRRdWVyaWVzJiYoYS5mbGFnc3w9NCksKG51bGwhPT1uZS5ob3N0'@;
put 'QmluZGluZ3N8fG51bGwhPT1uZS5ob3N0QXR0cnN8fDAhPT1uZS5ob3N0VmFycykmJihhLmZsYWdzfD02NCk7Y29uc3QgY2U9bmUudHlwZS5wcm90b3R5cGU7IXYmJihjZS5uZ09uQ2hhbmdlc3x8Y2UubmdPbkluaXR8fGNlLm5nRG9DaGVjaykmJigoYy5wcmVPcmRlckhvb2tzPz89W10pLnB1'@;
put 'c2goYS5pbmRleCksdj0hMCksIU0mJihjZS5uZ09uQ2hhbmdlc3x8Y2UubmdEb0NoZWNrKSYmKChjLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGEuaW5kZXgpLE09ITApLEQrK30hZnVuY3Rpb24gYWooYyxsLGEpe2NvbnN0IGg9bC5kaXJlY3RpdmVFbmQsZj1jLmRhdGEsdj1sLmF0'@;
put 'dHJzLE09W107bGV0IEQ9bnVsbCxaPW51bGw7Zm9yKGxldCBuZT1sLmRpcmVjdGl2ZVN0YXJ0O25lPGg7bmUrKyl7Y29uc3QgY2U9ZltuZV0sYmU9YT9hLmdldChjZSk6bnVsbCxCZT1iZT9iZS5vdXRwdXRzOm51bGw7RD1rRCgwLGNlLmlucHV0cyxuZSxELGJlP2JlLmlucHV0czpudWxsKSxa'@;
put 'PWtEKDEsY2Uub3V0cHV0cyxuZSxaLEJlKTtjb25zdCBxZT1udWxsPT09RHx8bnVsbD09PXZ8fHY0KGwpP251bGw6T0QoRCxuZSx2KTtNLnB1c2gocWUpfW51bGwhPT1EJiYoRC5oYXNPd25Qcm9wZXJ0eSgiY2xhc3MiKSYmKGwuZmxhZ3N8PTgpLEQuaGFzT3duUHJvcGVydHkoInN0eWxlIikm'@;
put 'JihsLmZsYWdzfD0xNikpLGwuaW5pdGlhbElucHV0cz1NLGwuaW5wdXRzPUQsbC5vdXRwdXRzPVp9KGMsYSxmKX1mdW5jdGlvbiBSRChjLGwsYSl7Y29uc3QgZD1hLmRpcmVjdGl2ZVN0YXJ0LGg9YS5kaXJlY3RpdmVFbmQsZj1hLmluZGV4LHY9ZnVuY3Rpb24geVYoKXtyZXR1cm4gQ2EubEZy'@;
put 'YW1lLmN1cnJlbnREaXJlY3RpdmVJbmRleH0oKTt0cnl7QTQoZik7Zm9yKGxldCBNPWQ7TTxoO00rKyl7Y29uc3QgRD1jLmRhdGFbTV0sWj1sW01dO2FDKE0pLChudWxsIT09RC5ob3N0QmluZGluZ3N8fDAhPT1ELmhvc3RWYXJzfHxudWxsIT09RC5ob3N0QXR0cnMpJiZMRChELFopfX1maW5h'@;
put 'bGx5e0E0KC0xKSxhQyh2KX19ZnVuY3Rpb24gTEQoYyxsKXtudWxsIT09Yy5ob3N0QmluZGluZ3MmJmMuaG9zdEJpbmRpbmdzKDEsbCl9ZnVuY3Rpb24geVMoYyxsLGEpe2wuY29tcG9uZW50T2Zmc2V0PWEsKGMuY29tcG9uZW50cz8/PVtdKS5wdXNoKGwuaW5kZXgpfWZ1bmN0aW9uIHBqKGMs'@;
put 'bCxhKXtpZihhKXtpZihsLmV4cG9ydEFzKWZvcihsZXQgZD0wO2Q8bC5leHBvcnRBcy5sZW5ndGg7ZCsrKWFbbC5leHBvcnRBc1tkXV09YztOYyhsKSYmKGFbIiJdPWMpfX1mdW5jdGlvbiBtaihjLGwsYSxkLGgpe2MuZGF0YVtkXT1oO2NvbnN0IGY9aC5mYWN0b3J5fHwoaC5mYWN0b3J5PWd1'@;
put 'KGgudHlwZSkpLHY9bmV3IFAxKGYsTmMoaCksR2UpO2MuYmx1ZXByaW50W2RdPXYsYVtkXT12LGZ1bmN0aW9uIElEKGMsbCxhLGQsaCl7Y29uc3QgZj1oLmhvc3RCaW5kaW5ncztpZihmKXtsZXQgdj1jLmhvc3RCaW5kaW5nT3BDb2RlcztudWxsPT09diYmKHY9Yy5ob3N0QmluZGluZ09wQ29k'@;
put 'ZXM9W10pO2NvbnN0IE09fmwuaW5kZXg7KGZ1bmN0aW9uIHVqKGMpe2xldCBsPWMubGVuZ3RoO2Zvcig7bD4wOyl7Y29uc3QgYT1jWy0tbF07aWYoIm51bWJlciI9PXR5cGVvZiBhJiZhPDApcmV0dXJuIGF9cmV0dXJuIDB9KSh2KSE9TSYmdi5wdXNoKE0pLHYucHVzaChhLGQsZil9fShjLGws'@;
put 'ZCxkOChjLGEsaC5ob3N0VmFycyxSYSksaCl9ZnVuY3Rpb24gZGgoYyxsLGEsZCxoLGYpe2NvbnN0IHY9UjAoYyxsKTshZnVuY3Rpb24gX1MoYyxsLGEsZCxoLGYsdil7aWYobnVsbD09ZiljLnJlbW92ZUF0dHJpYnV0ZShsLGgsYSk7ZWxzZXtjb25zdCBNPW51bGw9PXY/U28oZik6dihmLGR8'@;
put 'fCIiLGgpO2Muc2V0QXR0cmlidXRlKGwsaCxNLGEpfX0obFtiYV0sdixmLGMudmFsdWUsYSxkLGgpfWZ1bmN0aW9uIGxiKGMsbCxhLGQsaCxmKXtjb25zdCB2PWZbbF07aWYobnVsbCE9PXYpZm9yKGxldCBNPTA7TTx2Lmxlbmd0aDspQ0QoZCxhLHZbTSsrXSx2W00rK10sdltNKytdLHZbTSsr'@;
put 'XSl9ZnVuY3Rpb24gT0QoYyxsLGEpe2xldCBkPW51bGwsaD0wO2Zvcig7aDxhLmxlbmd0aDspe2NvbnN0IGY9YVtoXTtpZigwIT09ZilpZig1IT09Zil7aWYoIm51bWJlciI9PXR5cGVvZiBmKWJyZWFrO2lmKGMuaGFzT3duUHJvcGVydHkoZikpe251bGw9PT1kJiYoZD1bXSk7Y29uc3Qgdj1j'@;
put 'W2ZdO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSs9MylpZih2W01dPT09bCl7ZC5wdXNoKGYsdltNKzFdLHZbTSsyXSxhW2grMV0pO2JyZWFrfX1oKz0yfWVsc2UgaCs9MjtlbHNlIGgrPTR9cmV0dXJuIGR9ZnVuY3Rpb24gd1MoYyxsLGEsZCl7cmV0dXJuW2MsITAsMCxsLG51bGwsZCxudWxs'@;
put 'LGEsbnVsbCxudWxsXX1mdW5jdGlvbiBQRChjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztpZihudWxsIT09YSl7Y29uc3QgZD1fZShudWxsKTt0cnl7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKz0yKXtjb25zdCB2PWFbaCsxXTtpZigtMSE9PXYpe2NvbnN0IE09Yy5kYXRhW3ZdO0Iz'@;
put 'KGFbaF0pLE0uY29udGVudFF1ZXJpZXMoMixsW3ZdLHYpfX19ZmluYWxseXtfZShkKX19fWZ1bmN0aW9uIGg4KGMsbCl7cmV0dXJuIGNbX2ZdP2NbQzRdW0hjXT1sOmNbX2ZdPWwsY1tDNF09bCxsfWZ1bmN0aW9uIGNiKGMsbCxhKXtCMygwKTtjb25zdCBkPV9lKG51bGwpO3RyeXtsKGMsYSl9'@;
put 'ZmluYWxseXtfZShkKX19ZnVuY3Rpb24gRkQoYyl7cmV0dXJuIGNbWDBdfHwoY1tYMF09W10pfWZ1bmN0aW9uIGY4KGMpe3JldHVybiBjLmNsZWFudXB8fChjLmNsZWFudXA9W10pfWZ1bmN0aW9uIFc0KGMsbCxhKXtyZXR1cm4obnVsbD09PWN8fE5jKGMpKSYmKGE9ZnVuY3Rpb24gSncoYyl7'@;
put 'Zm9yKDtBcnJheS5pc0FycmF5KGMpOyl7aWYoIm9iamVjdCI9PXR5cGVvZiBjW2o2XSlyZXR1cm4gYztjPWNbemxdfXJldHVybiBudWxsfShhW2wuaW5kZXhdKSksYVtiYV19ZnVuY3Rpb24gajUoYyxsKXtjb25zdCBhPWNbcGNdLGQ9YT9hLmdldChnMixudWxsKTpudWxsO2QmJmQuaGFuZGxl'@;
put 'RXJyb3IobCl9ZnVuY3Rpb24gQ1MoYyxsLGEsZCxoKXtmb3IobGV0IGY9MDtmPGEubGVuZ3RoOyl7Y29uc3Qgdj1hW2YrK10sTT1hW2YrK10sRD1hW2YrK107Q0QoYy5kYXRhW3ZdLGxbdl0sZCxNLEQsaCl9fWZ1bmN0aW9uIHYyKGMsbCxhKXtjb25zdCBkPWI1KGwsYyk7IWZ1bmN0aW9uIGNE'@;
put 'KGMsbCxhKXtjLnNldFZhbHVlKGwsYSl9KGNbYmFdLGQsYSl9ZnVuY3Rpb24geWooYyxsKXtjb25zdCBhPU8xKGwsYyksZD1hW0tpXTshZnVuY3Rpb24gX2ooYyxsKXtmb3IobGV0IGE9bC5sZW5ndGg7YTxjLmJsdWVwcmludC5sZW5ndGg7YSsrKWwucHVzaChjLmJsdWVwcmludFthXSl9KGQs'@;
put 'YSk7Y29uc3QgaD1hW3psXTtudWxsIT09aCYmbnVsbD09PWFbdHVdJiYoYVt0dV09UkMoaCxhW3BjXSkpLFNTKGQsYSxhW2NsXSl9ZnVuY3Rpb24gU1MoYyxsLGEpeyQ2KGwpO3RyeXtjb25zdCBkPWMudmlld1F1ZXJ5O251bGwhPT1kJiZjYigxLGQsYSk7Y29uc3QgaD1jLnRlbXBsYXRlO251'@;
put 'bGwhPT1oJiZTRChjLGwsaCwxLGEpLGMuZmlyc3RDcmVhdGVQYXNzJiYoYy5maXJzdENyZWF0ZVBhc3M9ITEpLGxbZGRdPy5maW5pc2hWaWV3Q3JlYXRpb24oYyksYy5zdGF0aWNDb250ZW50UXVlcmllcyYmUEQoYyxsKSxjLnN0YXRpY1ZpZXdRdWVyaWVzJiZjYigyLGMudmlld1F1ZXJ5LGEp'@;
put 'O2NvbnN0IGY9Yy5jb21wb25lbnRzO251bGwhPT1mJiZmdW5jdGlvbiB3aihjLGwpe2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKXlqKGMsbFthXSl9KGwsZil9Y2F0Y2goZCl7dGhyb3cgYy5maXJzdENyZWF0ZVBhc3MmJihjLmluY29tcGxldGVGaXJzdFBhc3M9ITAsYy5maXJzdENyZWF0'@;
put 'ZVBhc3M9ITEpLGR9ZmluYWxseXtsW1pvXSY9LTUsXzUoKX19ZnVuY3Rpb24gejUoYyxsKXtyZXR1cm4hbHx8bnVsbD09PWwuZmlyc3RDaGlsZHx8enYoYyl9ZnVuY3Rpb24gbTgoYyxsLGEsZD0hMCl7Y29uc3QgaD1sW0tpXTtpZihmdW5jdGlvbiB0UyhjLGwsYSxkKXtjb25zdCBoPWdjK2Qs'@;
put 'Zj1hLmxlbmd0aDtkPjAmJihhW2gtMV1bSGNdPWwpLGQ8Zi1nYz8obFtIY109YVtoXSxQbChhLGdjK2QsbCkpOihhLnB1c2gobCksbFtIY109bnVsbCksbFtmY109YTtjb25zdCB2PWxbUzRdO251bGwhPT12JiZhIT09diYmZnVuY3Rpb24gSkIoYyxsKXtjb25zdCBhPWNbVjNdO2xbVWxdIT09'@;
put 'bFtmY11bZmNdW1VsXSYmKGNbWm9dfD12NS5IYXNUcmFuc3BsYW50ZWRWaWV3cyksbnVsbD09PWE/Y1tWM109W2xdOmEucHVzaChsKX0odixsKTtjb25zdCBNPWxbZGRdO251bGwhPT1NJiZNLmluc2VydFZpZXcoYyksbkMobCksbFtab118PTEyOH0oaCxsLGMsYSksZCl7Y29uc3Qgdj1jUyhh'@;
put 'LGMpLE09bFtiYV0sRD1xMyhNLGNbbXVdKTtudWxsIT09RCYmZnVuY3Rpb24gcUIoYyxsLGEsZCxoLGYpe2RbemxdPWgsZFtyY109bCxvYihjLGQsYSwxLGgsZil9KGgsY1tyY10sTSxsLEQsdil9Y29uc3QgZj1sW3R1XTtudWxsIT09ZiYmbnVsbCE9PWYuZmlyc3RDaGlsZCYmKGYuZmlyc3RD'@;
put 'aGlsZD1udWxsKX1mdW5jdGlvbiB2OChjLGwsYSxkLGg9ITEpe2Zvcig7bnVsbCE9PWE7KXtjb25zdCBmPWxbYS5pbmRleF07bnVsbCE9PWYmJmQucHVzaChDbChmKSksUHUoZikmJkhEKGYsZCk7Y29uc3Qgdj1hLnR5cGU7aWYoOCZ2KXY4KGMsbCxhLmNoaWxkLGQpO2Vsc2UgaWYoMzImdil7'@;
put 'Y29uc3QgTT1KQyhhLGwpO2xldCBEO2Zvcig7RD1NKCk7KWQucHVzaChEKX1lbHNlIGlmKDE2JnYpe2NvbnN0IE09cEQobCxhKTtpZihBcnJheS5pc0FycmF5KE0pKWQucHVzaCguLi5NKTtlbHNle2NvbnN0IEQ9VDQobFtVbF0pO3Y4KERbS2ldLEQsTSxkLCEwKX19YT1oP2EucHJvamVjdGlv'@;
put 'bk5leHQ6YS5uZXh0fXJldHVybiBkfWZ1bmN0aW9uIEhEKGMsbCl7Zm9yKGxldCBhPWdjO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPWNbYV0saD1kW0tpXS5maXJzdENoaWxkO251bGwhPT1oJiZ2OChkW0tpXSxkLGgsbCl9Y1ttdV0hPT1jW3psXSYmbC5wdXNoKGNbbXVdKX1sZXQgTkQ9W107'@;
put 'Y29uc3QgeGo9e3ZlcnNpb246MCxsYXN0Q2xlYW5FcG9jaDowLGRpcnR5OiExLHByb2R1Y2VyTm9kZTp2b2lkIDAscHJvZHVjZXJMYXN0UmVhZFZlcnNpb246dm9pZCAwLHByb2R1Y2VySW5kZXhPZlRoaXM6dm9pZCAwLG5leHRQcm9kdWNlckluZGV4OjAsbGl2ZUNvbnN1bWVyTm9kZTp2b2lk'@;
put 'IDAsbGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM6dm9pZCAwLGNvbnN1bWVyQWxsb3dTaWduYWxXcml0ZXM6ITEsY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITEscHJvZHVjZXJNdXN0UmVjb21wdXRlOigpPT4hMSxwcm9kdWNlclJlY29tcHV0ZVZhbHVlOigpPT57fSxjb25zdW1lck1hcmtlZERpcnR5'@;
put 'OigpPT57fSxjb25zdW1lck9uU2lnbmFsUmVhZDooKT0+e30sY29uc3VtZXJJc0Fsd2F5c0xpdmU6ITAsY29uc3VtZXJNYXJrZWREaXJ0eTpjPT57WTYoYy5sVmlldyl9LGNvbnN1bWVyT25TaWduYWxSZWFkKCl7dGhpcy5sVmlld1tDZl09dGhpc319LFZEPTEwMDtmdW5jdGlvbiB1YihjLGw9'@;
put 'ITAsYT0wKXtjb25zdCBkPWNbTDFdLGg9ZC5yZW5kZXJlckZhY3Rvcnk7aC5iZWdpbj8uKCk7dHJ5eyFmdW5jdGlvbiBFaihjLGwpe3hTKGMsbCk7bGV0IGE9MDtmb3IoO3h2KGMpOyl7aWYoYT09PVZEKXRocm93IG5ldyBRbigxMDMsITEpO2ErKyx4UyhjLDEpfX0oYyxhKX1jYXRjaCh2KXt0'@;
put 'aHJvdyBsJiZqNShjLHYpLHZ9ZmluYWxseXtoLmVuZD8uKCksZC5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCl9fWZ1bmN0aW9uIFRqKGMsbCxhLGQpe2NvbnN0IGg9bFtab107aWYoISgyNTYmfmgpKXJldHVybjtsW0wxXS5pbmxpbmVFZmZlY3RSdW5uZXI/LmZsdXNoKCksJDYobCk7bGV0'@;
put 'IHY9bnVsbCxNPW51bGw7KGZ1bmN0aW9uIEFqKGMpe3JldHVybiAyIT09Yy50eXBlfSkoYykmJihNPWZ1bmN0aW9uIENqKGMpe3JldHVybiBjW0NmXT8/ZnVuY3Rpb24gU2ooYyl7Y29uc3QgbD1ORC5wb3AoKT8/T2JqZWN0LmNyZWF0ZSh4aik7cmV0dXJuIGwubFZpZXc9YyxsfShjKX0obCks'@;
put 'dj1mdW5jdGlvbiBqKGMpe3JldHVybiBjJiYoYy5uZXh0UHJvZHVjZXJJbmRleD0wKSxfZShjKX0oTSkpO3RyeXtlQyhsKSxmdW5jdGlvbiB0ayhjKXtyZXR1cm4gQ2EubEZyYW1lLmJpbmRpbmdJbmRleD1jfShjLmJpbmRpbmdTdGFydEluZGV4KSxudWxsIT09YSYmU0QoYyxsLGEsMixkKTtj'@;
put 'b25zdCBEPSEoMyZ+aCk7aWYoRCl7Y29uc3QgY2U9Yy5wcmVPcmRlckNoZWNrSG9va3M7bnVsbCE9PWNlJiZJdihsLGNlLG51bGwpfWVsc2V7Y29uc3QgY2U9Yy5wcmVPcmRlckhvb2tzO251bGwhPT1jZSYmUnYobCxjZSwwLG51bGwpLGRDKGwsMCl9aWYoZnVuY3Rpb24ga2ooYyl7Zm9yKGxl'@;
put 'dCBsPU1rKGMpO251bGwhPT1sO2w9eGsobCkpe2lmKCEobFtab10mdjUuSGFzVHJhbnNwbGFudGVkVmlld3MpKWNvbnRpbnVlO2NvbnN0IGE9bFtWM107Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2xWKGFbZF0pfX19KGwpLEJEKGwsMCksbnVsbCE9PWMuY29udGVudFF1ZXJpZXMmJlBE'@;
put 'KGMsbCksRCl7Y29uc3QgY2U9Yy5jb250ZW50Q2hlY2tIb29rcztudWxsIT09Y2UmJkl2KGwsY2UpfWVsc2V7Y29uc3QgY2U9Yy5jb250ZW50SG9va3M7bnVsbCE9PWNlJiZSdihsLGNlLDEpLGRDKGwsMSl9IWZ1bmN0aW9uIG5qKGMsbCl7Y29uc3QgYT1jLmhvc3RCaW5kaW5nT3BDb2Rlcztp'@;
put 'ZihudWxsIT09YSl0cnl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGg9YVtkXTtpZihoPDApQTQofmgpO2Vsc2V7Y29uc3QgZj1oLHY9YVsrK2RdLE09YVsrK2RdO2JWKHYsZiksTSgyLGxbZl0pfX19ZmluYWxseXtBNCgtMSl9fShjLGwpO2NvbnN0IFo9Yy5jb21wb25lbnRz'@;
put 'O251bGwhPT1aJiZ6RChsLFosMCk7Y29uc3QgbmU9Yy52aWV3UXVlcnk7aWYobnVsbCE9PW5lJiZjYigyLG5lLGQpLEQpe2NvbnN0IGNlPWMudmlld0NoZWNrSG9va3M7bnVsbCE9PWNlJiZJdihsLGNlKX1lbHNle2NvbnN0IGNlPWMudmlld0hvb2tzO251bGwhPT1jZSYmUnYobCxjZSwyKSxk'@;
put 'QyhsLDIpfWlmKCEwPT09Yy5maXJzdFVwZGF0ZVBhc3MmJihjLmZpcnN0VXBkYXRlUGFzcz0hMSksbFttNV0pe2Zvcihjb25zdCBjZSBvZiBsW201XSljZSgpO2xbbTVdPW51bGx9bFtab10mPS03M31jYXRjaChEKXt0aHJvdyBZNihsKSxEfWZpbmFsbHl7bnVsbCE9PU0mJihmdW5jdGlvbiBF'@;
put 'KGMsbCl7aWYoX2UobCksYyYmdm9pZCAwIT09Yy5wcm9kdWNlck5vZGUmJnZvaWQgMCE9PWMucHJvZHVjZXJJbmRleE9mVGhpcyYmdm9pZCAwIT09Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbil7aWYoc2UoYykpZm9yKGxldCBhPWMubmV4dFByb2R1Y2VySW5kZXg7YTxjLnByb2R1Y2VyTm9k'@;
put 'ZS5sZW5ndGg7YSsrKXRlKGMucHJvZHVjZXJOb2RlW2FdLGMucHJvZHVjZXJJbmRleE9mVGhpc1thXSk7Zm9yKDtjLnByb2R1Y2VyTm9kZS5sZW5ndGg+Yy5uZXh0UHJvZHVjZXJJbmRleDspYy5wcm9kdWNlck5vZGUucG9wKCksYy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbi5wb3AoKSxjLnBy'@;
put 'b2R1Y2VySW5kZXhPZlRoaXMucG9wKCl9fShNLHYpLGZ1bmN0aW9uIE1qKGMpe2MubFZpZXdbQ2ZdIT09YyYmKGMubFZpZXc9bnVsbCxORC5wdXNoKGMpKX0oTSkpLF81KCl9fWZ1bmN0aW9uIEJEKGMsbCl7Zm9yKGxldCBhPU1rKGMpO251bGwhPT1hO2E9eGsoYSkpZm9yKGxldCBkPWdjO2Q8'@;
put 'YS5sZW5ndGg7ZCsrKWpEKGFbZF0sbCl9ZnVuY3Rpb24gRGooYyxsLGEpe2pEKE8xKGwsYyksYSl9ZnVuY3Rpb24gakQoYyxsKXtRdyhjKSYmeFMoYyxsKX1mdW5jdGlvbiB4UyhjLGwpe2NvbnN0IGQ9Y1tLaV0saD1jW1pvXSxmPWNbQ2ZdO2xldCB2PSEhKDA9PT1sJiYxNiZoKTtpZih2fHw9'@;
put 'ISEoNjQmaCYmMD09PWwpLHZ8fD0hISgxMDI0JmgpLHZ8fD0hKCFmPy5kaXJ0eXx8IW0oZikpLGYmJihmLmRpcnR5PSExKSxjW1pvXSY9LTkyMTcsdilUaihkLGMsZC50ZW1wbGF0ZSxjW2NsXSk7ZWxzZSBpZig4MTkyJmgpe0JEKGMsMSk7Y29uc3QgTT1kLmNvbXBvbmVudHM7bnVsbCE9PU0m'@;
put 'JnpEKGMsTSwxKX19ZnVuY3Rpb24gekQoYyxsLGEpe2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKURqKGMsbFtkXSxhKX1mdW5jdGlvbiBiOChjKXtmb3IoY1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoKTtjOyl7Y1tab118PTY0O2NvbnN0IGw9VDQoYyk7aWYoeDQo'@;
put 'YykmJiFsKXJldHVybiBjO2M9bH1yZXR1cm4gbnVsbH1jbGFzcyB5OHtnZXQgcm9vdE5vZGVzKCl7Y29uc3QgbD10aGlzLl9sVmlldyxhPWxbS2ldO3JldHVybiB2OChhLGwsYS5maXJzdENoaWxkLFtdKX1jb25zdHJ1Y3RvcihsLGEsZD0hMCl7dGhpcy5fbFZpZXc9bCx0aGlzLl9jZFJlZklu'@;
put 'amVjdGluZ1ZpZXc9YSx0aGlzLm5vdGlmeUVycm9ySGFuZGxlcj1kLHRoaXMuX2FwcFJlZj1udWxsLHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfWdldCBjb250ZXh0KCl7cmV0dXJuIHRoaXMuX2xWaWV3W2NsXX1zZXQgY29udGV4dChsKXt0aGlzLl9sVmlld1tjbF09bH1nZXQg'@;
put 'ZGVzdHJveWVkKCl7cmV0dXJuISgyNTYmfnRoaXMuX2xWaWV3W1pvXSl9ZGVzdHJveSgpe2lmKHRoaXMuX2FwcFJlZil0aGlzLl9hcHBSZWYuZGV0YWNoVmlldyh0aGlzKTtlbHNlIGlmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXtjb25zdCBsPXRoaXMuX2xWaWV3W2ZjXTtpZihQ'@;
put 'dShsKSl7Y29uc3QgYT1sWzhdLGQ9YT9hLmluZGV4T2YodGhpcyk6LTE7ZD4tMSYmKGE4KGwsZCksUnUoYSxkKSl9dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9VTQodGhpcy5fbFZpZXdbS2ldLHRoaXMuX2xWaWV3KX1vbkRlc3Ryb3kobCl7RXYodGhpcy5fbFZpZXcsbCl9bWFy'@;
put 'a0ZvckNoZWNrKCl7YjgodGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3fHx0aGlzLl9sVmlldyl9ZGV0YWNoKCl7dGhpcy5fbFZpZXdbWm9dJj0tMTI5fXJlYXR0YWNoKCl7bkModGhpcy5fbFZpZXcpLHRoaXMuX2xWaWV3W1pvXXw9MTI4fWRldGVjdENoYW5nZXMoKXt0aGlzLl9sVmlld1tab118'@;
put 'PTEwMjQsdWIodGhpcy5fbFZpZXcsdGhpcy5ub3RpZnlFcnJvckhhbmRsZXIpfWNoZWNrTm9DaGFuZ2VzKCl7fWF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpe2lmKHRoaXMuX2FwcFJlZil0aHJvdyBuZXcgUW4oOTAyLCExKTt0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMH1kZXRh'@;
put 'Y2hGcm9tQXBwUmVmKCl7dGhpcy5fYXBwUmVmPW51bGwsZEQodGhpcy5fbFZpZXdbS2ldLHRoaXMuX2xWaWV3KX1hdHRhY2hUb0FwcFJlZihsKXtpZih0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcil0aHJvdyBuZXcgUW4oOTAyLCExKTt0aGlzLl9hcHBSZWY9bCxuQyh0aGlzLl9sVmll'@;
put 'dyl9fWxldCBTbD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPUxqfX1yZXR1cm4gY30pKCk7Y29uc3QgSWo9U2wsUmo9Y2xhc3MgZXh0ZW5kcyBJantjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9kZWNsYXJhdGlvbkxWaWV3PWwsdGhpcy5fZGVj'@;
put 'bGFyYXRpb25UQ29udGFpbmVyPWEsdGhpcy5lbGVtZW50UmVmPWR9Z2V0IHNzcklkKCl7cmV0dXJuIHRoaXMuX2RlY2xhcmF0aW9uVENvbnRhaW5lci50Vmlldz8uc3NySWR8fG51bGx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwsYSl7cmV0dXJuIHRoaXMuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChs'@;
put 'LGEpfWNyZWF0ZUVtYmVkZGVkVmlld0ltcGwobCxhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gcDgoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7Y29uc3QgZj1sLnRWaWV3LEQ9YWIoYyxmLGEsNDA5NiZjW1pvXT80MDk2OjE2LG51bGwsbCxudWxsLG51bGwsZD8uaW5qZWN0b3I/P251bGws'@;
put 'ZD8uZW1iZWRkZWRWaWV3SW5qZWN0b3I/P251bGwsZD8uZGVoeWRyYXRlZFZpZXc/P251bGwpO0RbUzRdPWNbbC5pbmRleF07Y29uc3QgbmU9Y1tkZF07cmV0dXJuIG51bGwhPT1uZSYmKERbZGRdPW5lLmNyZWF0ZUVtYmVkZGVkVmlldyhmKSksU1MoZixELGEpLER9ZmluYWxseXtfZShoKX19'@;
put 'KHRoaXMuX2RlY2xhcmF0aW9uTFZpZXcsdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLGwse2VtYmVkZGVkVmlld0luamVjdG9yOmEsZGVoeWRyYXRlZFZpZXc6ZH0pO3JldHVybiBuZXcgeTgoaCl9fTtmdW5jdGlvbiBMaigpe3JldHVybiBkYih1bCgpLGRpKCkpfWZ1bmN0aW9uIGRiKGMs'@;
put 'bCl7cmV0dXJuIDQmYy50eXBlP25ldyBSaihsLGMsTDQoYyxsKSk6bnVsbH1jbGFzcyBtYnt9Y2xhc3Mgbnp7fWNsYXNzIFhEe31jbGFzcyBventyZXNvbHZlQ29tcG9uZW50RmFjdG9yeShsKXt0aHJvdyBmdW5jdGlvbiByeihjKXtjb25zdCBsPUVycm9yKGBObyBjb21wb25lbnQgZmFjdG9y'@;
put 'eSBmb3VuZCBmb3IgJHtQcihjKX0uYCk7cmV0dXJuIGwubmdDb21wb25lbnQ9YyxsfShsKX19bGV0IFo1PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuTlVMTD1uZXcgb3p9fXJldHVybiBjfSkoKTtjbGFzcyBNOHt9bGV0IEVhPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRl'@;
put 'c3Ryb3lOb2RlPW51bGx9c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189KCk9PmZ1bmN0aW9uIGF6KCl7Y29uc3QgYz1kaSgpLGE9TzEodWwoKS5pbmRleCxjKTtyZXR1cm4oT3UoYSk/YTpjKVtiYV19KCl9fXJldHVybiBjfSkoKSxzej0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1'@;
put 'MDI3NXByb3Y9b24oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgUlM9e30sSkQ9bmV3IFNldDtmdW5jdGlvbiBiMihjKXtKRC5oYXMoYyl8fChKRC5hZGQoYykscGVyZm9ybWFuY2U/Lm1hcms/LigibWFya19mZWF0dXJl'@;
put 'X3VzYWdlIix7ZGV0YWlsOntmZWF0dXJlOmN9fSkpfWZ1bmN0aW9uIFFEKC4uLmMpe31jbGFzcyBZb3tjb25zdHJ1Y3Rvcih7ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6bD0hMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmE9ITEsc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRl'@;
put 'Y3Rpb246ZD0hMX0pe2lmKHRoaXMuaGFzUGVuZGluZ01hY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgWHIoITEpLHRoaXMub25NaWNyb3Rhc2tFbXB0eT1uZXcgWHIoITEpLHRoaXMub25TdGFibGU9'@;
put 'bmV3IFhyKCExKSx0aGlzLm9uRXJyb3I9bmV3IFhyKCExKSx0eXBlb2YgWm9uZT4idSIpdGhyb3cgbmV3IFFuKDkwOCwhMSk7Wm9uZS5hc3NlcnRab25lUGF0Y2hlZCgpO2NvbnN0IGg9dGhpcztoLl9uZXN0aW5nPTAsaC5fb3V0ZXI9aC5faW5uZXI9Wm9uZS5jdXJyZW50LFpvbmUuVGFza1Ry'@;
put 'YWNraW5nWm9uZVNwZWMmJihoLl9pbm5lcj1oLl9pbm5lci5mb3JrKG5ldyBab25lLlRhc2tUcmFja2luZ1pvbmVTcGVjKSksbCYmWm9uZS5sb25nU3RhY2tUcmFjZVpvbmVTcGVjJiYoaC5faW5uZXI9aC5faW5uZXIuZm9yayhab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMpKSxoLnNob3Vs'@;
put 'ZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb249IWQmJmEsaC5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbj1kLGgubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLGgubmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lPWZ1bmN0aW9uIGx6KCl7Y29uc3QgYz0iZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgVnQucmVxdWVzdEFuaW1hdGlvbkZyYW1lO2xldCBsPVZ0W2M/InJlcXVlc3RBbmltYXRpb25GcmFtZSI6InNldFRpbWVvdXQiXSxhPVZ0W2M/ImNhbmNlbEFuaW1hdGlvbkZyYW1lIjoiY2xlYXJUaW1lb3V0Il07aWYodHlwZW9mIFpvbmU8InUiJiZsJiZhKXtjb25zdCBk'@;
put 'PWxbWm9uZS5fX3N5bWJvbF9fKCJPcmlnaW5hbERlbGVnYXRlIildO2QmJihsPWQpO2NvbnN0IGg9YVtab25lLl9fc3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07aCYmKGE9aCl9cmV0dXJue25hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZTpsLG5hdGl2ZUNhbmNlbEFuaW1hdGlvbkZy'@;
put 'YW1lOmF9fSgpLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZSxmdW5jdGlvbiBkeihjKXtjb25zdCBsPSgpPT57IWZ1bmN0aW9uIHV6KGMpe2MuaXNDaGVja1N0YWJsZVJ1bm5pbmd8fC0xIT09Yy5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWR8fChjLmxhc3RSZXF1ZXN0QW5pbWF0aW9u'@;
put 'RnJhbWVJZD1jLm5hdGl2ZVJlcXVlc3RBbmltYXRpb25GcmFtZS5jYWxsKFZ0LCgpPT57Yy5mYWtlVG9wRXZlbnRUYXNrfHwoYy5mYWtlVG9wRXZlbnRUYXNrPVpvbmUucm9vdC5zY2hlZHVsZUV2ZW50VGFzaygiZmFrZVRvcEV2ZW50VGFzayIsKCk9PntjLmxhc3RSZXF1ZXN0QW5pbWF0aW9u'@;
put 'RnJhbWVJZD0tMSxPUyhjKSxjLmlzQ2hlY2tTdGFibGVSdW5uaW5nPSEwLExTKGMpLGMuaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITF9LHZvaWQgMCwoKT0+e30sKCk9Pnt9KSksYy5mYWtlVG9wRXZlbnRUYXNrLmludm9rZSgpfSksT1MoYykpfShjKX07Yy5faW5uZXI9Yy5faW5uZXIuZm9yayh7'@;
put 'bmFtZToiYW5ndWxhciIscHJvcGVydGllczp7aXNBbmd1bGFyWm9uZTohMH0sb25JbnZva2VUYXNrOihhLGQsaCxmLHYsTSk9PntpZihmdW5jdGlvbiBoeihjKXtyZXR1cm4hKCFBcnJheS5pc0FycmF5KGMpfHwxIT09Yy5sZW5ndGgpJiYhMD09PWNbMF0uZGF0YT8uX19pZ25vcmVfbmdfem9u'@;
put 'ZV9ffShNKSlyZXR1cm4gYS5pbnZva2VUYXNrKGgsZix2LE0pO3RyeXtyZXR1cm4gdmIoYyksYS5pbnZva2VUYXNrKGgsZix2LE0pfWZpbmFsbHl7KGMuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbiYmImV2ZW50VGFzayI9PT1mLnR5cGV8fGMuc2hvdWxkQ29hbGVzY2VSdW5D'@;
put 'aGFuZ2VEZXRlY3Rpb24pJiZsKCksZUkoYyl9fSxvbkludm9rZTooYSxkLGgsZix2LE0sRCk9Pnt0cnl7cmV0dXJuIHZiKGMpLGEuaW52b2tlKGgsZix2LE0sRCl9ZmluYWxseXtjLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uJiZsKCksZUkoYyl9fSxvbkhhc1Rhc2s6KGEsZCxo'@;
put 'LGYpPT57YS5oYXNUYXNrKGgsZiksZD09PWgmJigibWljcm9UYXNrIj09Zi5jaGFuZ2U/KGMuX2hhc1BlbmRpbmdNaWNyb3Rhc2tzPWYubWljcm9UYXNrLE9TKGMpLExTKGMpKToibWFjcm9UYXNrIj09Zi5jaGFuZ2UmJihjLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPWYubWFjcm9UYXNrKSl9LG9u'@;
put 'SGFuZGxlRXJyb3I6KGEsZCxoLGYpPT4oYS5oYW5kbGVFcnJvcihoLGYpLGMucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMub25FcnJvci5lbWl0KGYpKSwhMSl9KX0oaCl9c3RhdGljIGlzSW5Bbmd1bGFyWm9uZSgpe3JldHVybiB0eXBlb2YgWm9uZTwidSImJiEwPT09Wm9uZS5jdXJyZW50Lmdl'@;
put 'dCgiaXNBbmd1bGFyWm9uZSIpfXN0YXRpYyBhc3NlcnRJbkFuZ3VsYXJab25lKCl7aWYoIVlvLmlzSW5Bbmd1bGFyWm9uZSgpKXRocm93IG5ldyBRbig5MDksITEpfXN0YXRpYyBhc3NlcnROb3RJbkFuZ3VsYXJab25lKCl7aWYoWW8uaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IFFuKDkw'@;
put 'OSwhMSl9cnVuKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuKGwsYSxkKX1ydW5UYXNrKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5faW5uZXIsdj1mLnNjaGVkdWxlRXZlbnRUYXNrKCJOZ1pvbmVFdmVudDogIitoLGwsY3osUUQsUUQpO3RyeXtyZXR1cm4gZi5ydW5UYXNrKHYsYSxkKX1m'@;
put 'aW5hbGx5e2YuY2FuY2VsVGFzayh2KX19cnVuR3VhcmRlZChsLGEsZCl7cmV0dXJuIHRoaXMuX2lubmVyLnJ1bkd1YXJkZWQobCxhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiB0aGlzLl9vdXRlci5ydW4obCl9fWNvbnN0IGN6PXt9O2Z1bmN0aW9uIExTKGMpe2lmKDA9PWMuX25l'@;
put 'c3RpbmcmJiFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYhYy5pc1N0YWJsZSl0cnl7Yy5fbmVzdGluZysrLGMub25NaWNyb3Rhc2tFbXB0eS5lbWl0KG51bGwpfWZpbmFsbHl7aWYoYy5fbmVzdGluZy0tLCFjLmhhc1BlbmRpbmdNaWNyb3Rhc2tzKXRyeXtjLnJ1bk91dHNpZGVBbmd1bGFyKCgp'@;
put 'PT5jLm9uU3RhYmxlLmVtaXQobnVsbCkpfWZpbmFsbHl7Yy5pc1N0YWJsZT0hMH19fWZ1bmN0aW9uIE9TKGMpe2MuaGFzUGVuZGluZ01pY3JvdGFza3M9ISEoYy5faGFzUGVuZGluZ01pY3JvdGFza3N8fChjLnNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb258fGMuc2hvdWxkQ29h'@;
put 'bGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24pJiYtMSE9PWMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkKX1mdW5jdGlvbiB2YihjKXtjLl9uZXN0aW5nKyssYy5pc1N0YWJsZSYmKGMuaXNTdGFibGU9ITEsYy5vblVuc3RhYmxlLmVtaXQobnVsbCkpfWZ1bmN0aW9uIGVJKGMpe2MuX25lc3Rp'@;
put 'bmctLSxMUyhjKX1jbGFzcyB0SXtjb25zdHJ1Y3Rvcigpe3RoaXMuaGFzUGVuZGluZ01pY3JvdGFza3M9ITEsdGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmlzU3RhYmxlPSEwLHRoaXMub25VbnN0YWJsZT1uZXcgWHIsdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBYcix0aGlz'@;
put 'Lm9uU3RhYmxlPW5ldyBYcix0aGlzLm9uRXJyb3I9bmV3IFhyfXJ1bihsLGEsZCl7cmV0dXJuIGwuYXBwbHkoYSxkKX1ydW5HdWFyZGVkKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bk91dHNpZGVBbmd1bGFyKGwpe3JldHVybiBsKCl9cnVuVGFzayhsLGEsZCxoKXtyZXR1cm4gbC5h'@;
put 'cHBseShhLGQpfX12YXIgUTM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5FYXJseVJlYWQ9MF09IkVhcmx5UmVhZCIsY1tjLldyaXRlPTFdPSJXcml0ZSIsY1tjLk1peGVkUmVhZFdyaXRlPTJdPSJNaXhlZFJlYWRXcml0ZSIsY1tjLlJlYWQ9M109IlJlYWQiLGN9KFEzfHx7fSk7Y29uc3QgUFM9'@;
put 'e2Rlc3Ryb3koKXt9fTtmdW5jdGlvbiBiYihjLGwpeyFsJiZmdW5jdGlvbiBiZihjKXtpZighQ3YoKSl0aHJvdyBuZXcgUW4oLTIwMywhMSl9KCk7Y29uc3QgYT1sPy5pbmplY3Rvcj8/ZmkoRHMpO2lmKCFmdW5jdGlvbiB1aChjKXtyZXR1cm4iYnJvd3NlciI9PT0oYz8/ZmkoRHMpKS5nZXQo'@;
put 'b2EpfShhKSlyZXR1cm4gUFM7YjIoIk5nQWZ0ZXJOZXh0UmVuZGVyIik7Y29uc3QgZD1hLmdldCh4OCksaD1kLmhhbmRsZXI/Pz1uZXcgaUksZj1sPy5waGFzZT8/UTMuTWl4ZWRSZWFkV3JpdGUsdj0oKT0+e2gudW5yZWdpc3RlcihEKSxNKCl9LE09YS5nZXQoQTUpLm9uRGVzdHJveSh2KSxE'@;
put 'PXEwKGEsKCk9Pm5ldyBySShmLCgpPT57digpLGMoKX0pKTtyZXR1cm4gaC5yZWdpc3RlcihEKSx7ZGVzdHJveTp2fX1jbGFzcyBySXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGhhc2U9bCx0aGlzLmNhbGxiYWNrRm49YSx0aGlzLnpvbmU9ZmkoWW8pLHRoaXMuZXJyb3JIYW5kbGVyPWZpKGcy'@;
put 'LHtvcHRpb25hbDohMH0pLGZpKG1iLHtvcHRpb25hbDohMH0pPy5ub3RpZnkoMSl9aW52b2tlKCl7dHJ5e3RoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLmNhbGxiYWNrRm4pfWNhdGNoKGwpe3RoaXMuZXJyb3JIYW5kbGVyPy5oYW5kbGVFcnJvcihsKX19fWNsYXNzIGlJe2NvbnN0'@;
put 'cnVjdG9yKCl7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITEsdGhpcy5idWNrZXRzPXtbUTMuRWFybHlSZWFkXTpuZXcgU2V0LFtRMy5Xcml0ZV06bmV3IFNldCxbUTMuTWl4ZWRSZWFkV3JpdGVdOm5ldyBTZXQsW1EzLlJlYWRdOm5ldyBTZXR9LHRoaXMuZGVmZXJyZWRDYWxsYmFja3M9bmV3'@;
put 'IFNldH1yZWdpc3RlcihsKXsodGhpcy5leGVjdXRpbmdDYWxsYmFja3M/dGhpcy5kZWZlcnJlZENhbGxiYWNrczp0aGlzLmJ1Y2tldHNbbC5waGFzZV0pLmFkZChsKX11bnJlZ2lzdGVyKGwpe3RoaXMuYnVja2V0c1tsLnBoYXNlXS5kZWxldGUobCksdGhpcy5kZWZlcnJlZENhbGxiYWNrcy5k'@;
put 'ZWxldGUobCl9ZXhlY3V0ZSgpe3RoaXMuZXhlY3V0aW5nQ2FsbGJhY2tzPSEwO2Zvcihjb25zdCBsIG9mIE9iamVjdC52YWx1ZXModGhpcy5idWNrZXRzKSlmb3IoY29uc3QgYSBvZiBsKWEuaW52b2tlKCk7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITE7Zm9yKGNvbnN0IGwgb2YgdGhpcy5k'@;
put 'ZWZlcnJlZENhbGxiYWNrcyl0aGlzLmJ1Y2tldHNbbC5waGFzZV0uYWRkKGwpO3RoaXMuZGVmZXJyZWRDYWxsYmFja3MuY2xlYXIoKX1kZXN0cm95KCl7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmJ1Y2tldHMpKWwuY2xlYXIoKTt0aGlzLmRlZmVycmVkQ2FsbGJhY2tzLmNs'@;
put 'ZWFyKCl9fWxldCB4OD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVyPW51bGwsdGhpcy5pbnRlcm5hbENhbGxiYWNrcz1bXX1leGVjdXRlKCl7dGhpcy5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKSx0aGlzLmhhbmRsZXI/LmV4ZWN1dGUoKX1leGVjdXRlSW50ZXJu'@;
put 'YWxDYWxsYmFja3MoKXtjb25zdCBhPVsuLi50aGlzLmludGVybmFsQ2FsbGJhY2tzXTt0aGlzLmludGVybmFsQ2FsbGJhY2tzLmxlbmd0aD0wO2Zvcihjb25zdCBkIG9mIGEpZCgpfW5nT25EZXN0cm95KCl7dGhpcy5oYW5kbGVyPy5kZXN0cm95KCksdGhpcy5oYW5kbGVyPW51bGwsdGhpcy5p'@;
put 'bnRlcm5hbENhbGxiYWNrcy5sZW5ndGg9MH1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pm5ldyBjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBfYihjLGwsYSl7bGV0IGQ9YT9jLnN0eWxlczpudWxsLGg9YT9jLmNsYXNz'@;
put 'ZXM6bnVsbCxmPTA7aWYobnVsbCE9PWwpZm9yKGxldCB2PTA7djxsLmxlbmd0aDt2Kyspe2NvbnN0IE09bFt2XTsibnVtYmVyIj09dHlwZW9mIE0/Zj1NOjE9PWY/aD1zZChoLE0pOjI9PWYmJihkPXNkKGQsTSsiOiAiK2xbKyt2XSsiOyIpKX1hP2Muc3R5bGVzPWQ6Yy5zdHlsZXNXaXRob3V0'@;
put 'SG9zdD1kLGE/Yy5jbGFzc2VzPWg6Yy5jbGFzc2VzV2l0aG91dEhvc3Q9aH1jbGFzcyBzSSBleHRlbmRzIFo1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5uZ01vZHVsZT1sfXJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpe2NvbnN0IGE9VmEobCk7cmV0dXJuIG5ldyBBOChhLHRoaXMu'@;
put 'bmdNb2R1bGUpfX1mdW5jdGlvbiBsSShjKXtjb25zdCBsPVtdO2Zvcihjb25zdCBhIGluIGMpe2lmKCFjLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9Y1thXTt2b2lkIDAhPT1kJiZsLnB1c2goe3Byb3BOYW1lOkFycmF5LmlzQXJyYXkoZCk/ZFswXTpkLHRlbXBsYXRlTmFt'@;
put 'ZTphfSl9cmV0dXJuIGx9Y2xhc3Mgd2J7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1vNShkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGwsUlMsZCk7cmV0dXJuIGghPT1SU3x8YT09PVJTP2g6dGhpcy5wYXJl'@;
put 'bnRJbmplY3Rvci5nZXQobCxhLGQpfX1jbGFzcyBBOCBleHRlbmRzIFhEe2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD1sSShsLmlucHV0cyk7aWYobnVsbCE9PWEpZm9yKGNvbnN0IGggb2YgZClhLmhhc093blByb3BlcnR5KGgu'@;
put 'cHJvcE5hbWUpJiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gbEkodGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY29tcG9uZW50RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMu'@;
put 'Y29tcG9uZW50VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiBCdyhjKXtyZXR1cm4gYy5tYXAoVncpLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50U2VsZWN0b3JzP2wubmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMu'@;
put 'aXNCb3VuZFRvTW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7Y29uc3QgZj1fZShudWxsKTt0cnl7bGV0IHY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIGhjP2g6aD8uaW5qZWN0b3I7diYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVmLmdldFN0YW5kYWxvbmVJbmplY3RvciYmKHY9'@;
put 'dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yKHYpfHx2KTtjb25zdCBNPXY/bmV3IHdiKGwsdik6bCxEPU0uZ2V0KE04LG51bGwpO2lmKG51bGw9PT1EKXRocm93IG5ldyBRbig0MDcsITEpO2NvbnN0IFo9TS5nZXQoc3osbnVsbCksYmU9e3JlbmRlcmVyRmFjdG9yeTpE'@;
put 'LHNhbml0aXplcjpaLGlubGluZUVmZmVjdFJ1bm5lcjpudWxsLGFmdGVyUmVuZGVyRXZlbnRNYW5hZ2VyOk0uZ2V0KHg4LG51bGwpLGNoYW5nZURldGVjdGlvblNjaGVkdWxlcjpNLmdldChtYixudWxsKX0sRWU9RC5jcmVhdGVSZW5kZXJlcihudWxsLHRoaXMuY29tcG9uZW50RGVmKSxCZT10'@;
put 'aGlzLmNvbXBvbmVudERlZi5zZWxlY3RvcnNbMF1bMF18fCJkaXYiLHFlPWQ/ZnVuY3Rpb24gaWooYyxsLGEsZCl7Y29uc3QgZj1kLmdldChWaywhMSl8fGE9PT1Ycy5TaGFkb3dEb20sdj1jLnNlbGVjdFJvb3RFbGVtZW50KGwsZik7cmV0dXJuIGZ1bmN0aW9uIG9qKGMpe01EKGMpfSh2KSx2'@;
put 'fShFZSxkLHRoaXMuY29tcG9uZW50RGVmLmVuY2Fwc3VsYXRpb24sTSk6ejQoRWUsQmUsZnVuY3Rpb24gbXooYyl7Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCk7cmV0dXJuInN2ZyI9PT1sPyJzdmciOiJtYXRoIj09PWw/Im1hdGgiOm51bGx9KEJlKSk7bGV0IHJ0PTUxMjt0aGlzLmNvbXBvbmVu'@;
put 'dERlZi5zaWduYWxzP3J0fD00MDk2OnRoaXMuY29tcG9uZW50RGVmLm9uUHVzaHx8KHJ0fD0xNik7bGV0IHB0PW51bGw7bnVsbCE9PXFlJiYocHQ9UkMocWUsTSwhMCkpO2NvbnN0IGR0PW1TKDAsbnVsbCxudWxsLDEsMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCksSnQ9YWIobnVs'@;
put 'bCxkdCxudWxsLHJ0LG51bGwsbnVsbCxiZSxFZSxNLG51bGwscHQpO2xldCB2bixDbjskNihKdCk7dHJ5e2NvbnN0IHRuPXRoaXMuY29tcG9uZW50RGVmO2xldCBNbixDcj1udWxsO3RuLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz8oTW49W10sQ3I9bmV3IE1hcCx0bi5maW5kSG9zdERpcmVjdGl2'@;
put 'ZURlZnModG4sTW4sQ3IpLE1uLnB1c2godG4pKTpNbj1bdG5dO2NvbnN0IEdyPWZ1bmN0aW9uIGJ6KGMsbCl7Y29uc3QgYT1jW0tpXSxkPXdhO3JldHVybiBjW2RdPWwsQjUoYSxkLDIsIiNob3N0IixudWxsKX0oSnQscWUpLGdyPWZ1bmN0aW9uIHl6KGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09'@;
put 'aFtLaV07IWZ1bmN0aW9uIF96KGMsbCxhLGQpe2Zvcihjb25zdCBoIG9mIGMpbC5tZXJnZWRBdHRycz1wZihsLm1lcmdlZEF0dHJzLGguaG9zdEF0dHJzKTtudWxsIT09bC5tZXJnZWRBdHRycyYmKF9iKGwsbC5tZXJnZWRBdHRycywhMCksbnVsbCE9PWEmJl9EKGQsYSxsKSl9KGQsYyxsLHYp'@;
put 'O2xldCBEPW51bGw7bnVsbCE9PWwmJihEPVJDKGwsaFtwY10pKTtjb25zdCBaPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IG5lPTE2O2Euc2lnbmFscz9uZT00MDk2OmEub25QdXNoJiYobmU9NjQpO2NvbnN0IGNlPWFiKGgsc2IoYSksbnVsbCxuZSxoW2MuaW5k'@;
put 'ZXhdLGMsZixaLG51bGwsbnVsbCxEKTtyZXR1cm4gTS5maXJzdENyZWF0ZVBhc3MmJnlTKE0sYyxkLmxlbmd0aC0xKSxoOChoLGNlKSxoW2MuaW5kZXhdPWNlfShHcixxZSx0bixNbixKdCxiZSxFZSk7Q249VzYoZHQsd2EpLHFlJiZmdW5jdGlvbiBDeihjLGwsYSxkKXtpZihkKW00KGMsYSxb'@;
put 'Im5nLXZlcnNpb24iLCIxNy4zLjEyIl0pO2Vsc2V7Y29uc3R7YXR0cnM6aCxjbGFzc2VzOmZ9PWZ1bmN0aW9uIHFvKGMpe2NvbnN0IGw9W10sYT1bXTtsZXQgZD0xLGg9Mjtmb3IoO2Q8Yy5sZW5ndGg7KXtsZXQgZj1jW2RdO2lmKCJzdHJpbmciPT10eXBlb2YgZikyPT09aD8iIiE9PWYmJmwu'@;
put 'cHVzaChmLGNbKytkXSk6OD09PWgmJmEucHVzaChmKTtlbHNle2lmKCFNYyhoKSlicmVhaztoPWZ9ZCsrfXJldHVybnthdHRyczpsLGNsYXNzZXM6YX19KGwuc2VsZWN0b3JzWzBdKTtoJiZtNChjLGEsaCksZiYmZi5sZW5ndGg+MCYmeUQoYyxhLGYuam9pbigiICIpKX19KEVlLHRuLHFlLGQp'@;
put 'LHZvaWQgMCE9PWEmJmZ1bmN0aW9uIFN6KGMsbCxhKXtjb25zdCBkPWMucHJvamVjdGlvbj1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO2QucHVzaChudWxsIT1mP0FycmF5LmZyb20oZik6bnVsbCl9fShDbix0aGlzLm5nQ29udGVudFNlbGVjdG9ycyxhKSx2'@;
put 'bj1mdW5jdGlvbiB3eihjLGwsYSxkLGgsZil7Y29uc3Qgdj11bCgpLE09aFtLaV0sRD1SMCh2LGgpO2JTKE0saCx2LGEsbnVsbCxkKTtmb3IobGV0IG5lPTA7bmU8YS5sZW5ndGg7bmUrKylWdShENChoLE0sdi5kaXJlY3RpdmVTdGFydCtuZSx2KSxoKTtSRChNLGgsdiksRCYmVnUoRCxoKTtj'@;
put 'b25zdCBaPUQ0KGgsTSx2LmRpcmVjdGl2ZVN0YXJ0K3YuY29tcG9uZW50T2Zmc2V0LHYpO2lmKGNbY2xdPWhbY2xdPVosbnVsbCE9PWYpZm9yKGNvbnN0IG5lIG9mIGYpbmUoWixsKTtyZXR1cm4gZlMoTSx2LGgpLFp9KGdyLHRuLE1uLENyLEp0LFtNel0pLFNTKGR0LEp0LG51bGwpfWZpbmFs'@;
put 'bHl7XzUoKX1yZXR1cm4gbmV3IHZ6KHRoaXMuY29tcG9uZW50VHlwZSx2bixMNChDbixKdCksSnQsQ24pfWZpbmFsbHl7X2UoZil9fX1jbGFzcyB2eiBleHRlbmRzIG56e2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoKSx0aGlzLmxvY2F0aW9uPWQsdGhpcy5fcm9vdExWaWV3PWgsdGhp'@;
put 'cy5fdE5vZGU9Zix0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM9bnVsbCx0aGlzLmluc3RhbmNlPWEsdGhpcy5ob3N0Vmlldz10aGlzLmNoYW5nZURldGVjdG9yUmVmPW5ldyB5OChoLHZvaWQgMCwhMSksdGhpcy5jb21wb25lbnRUeXBlPWx9c2V0SW5wdXQobCxhKXtjb25zdCBkPXRoaXMuX3RO'@;
put 'b2RlLmlucHV0cztsZXQgaDtpZihudWxsIT09ZCYmKGg9ZFtsXSkpe2lmKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcz8/PW5ldyBNYXAsdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmhhcyhsKSYmT2JqZWN0LmlzKHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5nZXQobCksYSkpcmV0dXJuO2Nv'@;
put 'bnN0IGY9dGhpcy5fcm9vdExWaWV3O0NTKGZbS2ldLGYsaCxsLGEpLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5zZXQobCxhKSxiOChPMSh0aGlzLl90Tm9kZS5pbmRleCxmKSl9fWdldCBpbmplY3Rvcigpe3JldHVybiBuZXcgTnUodGhpcy5fdE5vZGUsdGhpcy5fcm9vdExWaWV3KX1kZXN0'@;
put 'cm95KCl7dGhpcy5ob3N0Vmlldy5kZXN0cm95KCl9b25EZXN0cm95KGwpe3RoaXMuaG9zdFZpZXcub25EZXN0cm95KGwpfX1mdW5jdGlvbiBNeigpe2NvbnN0IGM9dWwoKTtEdihkaSgpW0tpXSxjKX1sZXQgRGE9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz14'@;
put 'en19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHh6KCl7cmV0dXJuIGRJKHVsKCksZGkoKSl9Y29uc3QgRXo9RGEsY0k9Y2xhc3MgZXh0ZW5kcyBFentjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoKSx0aGlzLl9sQ29udGFpbmVyPWwsdGhpcy5faG9zdFROb2RlPWEsdGhpcy5faG9zdExWaWV3PWR9'@;
put 'Z2V0IGVsZW1lbnQoKXtyZXR1cm4gTDQodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBOdSh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgcGFyZW50SW5qZWN0b3IoKXtjb25zdCBsPXc1KHRoaXMuX2hvc3RUTm9k'@;
put 'ZSx0aGlzLl9ob3N0TFZpZXcpO2lmKEx2KGwpKXtjb25zdCBhPVg2KGwsdGhpcy5faG9zdExWaWV3KSxkPXE2KGwpO3JldHVybiBuZXcgTnUoYVtLaV0uZGF0YVtkKzhdLGEpfXJldHVybiBuZXcgTnUobnVsbCx0aGlzLl9ob3N0TFZpZXcpfWNsZWFyKCl7Zm9yKDt0aGlzLmxlbmd0aD4wOyl0'@;
put 'aGlzLnJlbW92ZSh0aGlzLmxlbmd0aC0xKX1nZXQobCl7Y29uc3QgYT11SSh0aGlzLl9sQ29udGFpbmVyKTtyZXR1cm4gbnVsbCE9PWEmJmFbbF18fG51bGx9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9sQ29udGFpbmVyLmxlbmd0aC1nY31jcmVhdGVFbWJlZGRlZFZpZXcobCxhLGQpe2xl'@;
put 'dCBoLGY7Im51bWJlciI9PXR5cGVvZiBkP2g9ZDpudWxsIT1kJiYoaD1kLmluZGV4LGY9ZC5pbmplY3Rvcik7Y29uc3QgTT1sLmNyZWF0ZUVtYmVkZGVkVmlld0ltcGwoYXx8e30sZixudWxsKTtyZXR1cm4gdGhpcy5pbnNlcnRJbXBsKE0saCx6NSh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLE19'@;
put 'Y3JlYXRlQ29tcG9uZW50KGwsYSxkLGgsZil7Y29uc3Qgdj1sJiYhZnVuY3Rpb24gemkoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9KGwpO2xldCBNO2lmKHYpTT1hO2Vsc2V7Y29uc3QgQmU9YXx8e307TT1CZS5pbmRleCxkPUJlLmluamVjdG9yLGg9QmUucHJvamVjdGFibGVOb2Rl'@;
put 'cyxmPUJlLmVudmlyb25tZW50SW5qZWN0b3J8fEJlLm5nTW9kdWxlUmVmfWNvbnN0IEQ9dj9sOm5ldyBBOChWYShsKSksWj1kfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFmJiZudWxsPT1ELm5nTW9kdWxlKXtjb25zdCBxZT0odj9aOnRoaXMucGFyZW50SW5qZWN0b3IpLmdldChoYyxudWxs'@;
put 'KTtxZSYmKGY9cWUpfVZhKEQuY29tcG9uZW50VHlwZT8/e30pO2NvbnN0IEVlPUQuY3JlYXRlKFosaCxudWxsLGYpO3JldHVybiB0aGlzLmluc2VydEltcGwoRWUuaG9zdFZpZXcsTSx6NSh0aGlzLl9ob3N0VE5vZGUsbnVsbCkpLEVlfWluc2VydChsLGEpe3JldHVybiB0aGlzLmluc2VydElt'@;
put 'cGwobCxhLCEwKX1pbnNlcnRJbXBsKGwsYSxkKXtjb25zdCBoPWwuX2xWaWV3O2lmKGZ1bmN0aW9uIHFBKGMpe3JldHVybiBQdShjW2ZjXSl9KGgpKXtjb25zdCBNPXRoaXMuaW5kZXhPZihsKTtpZigtMSE9PU0pdGhpcy5kZXRhY2goTSk7ZWxzZXtjb25zdCBEPWhbZmNdLFo9bmV3IGNJKEQs'@;
put 'RFtyY10sRFtmY10pO1ouZGV0YWNoKFouaW5kZXhPZihsKSl9fWNvbnN0IGY9dGhpcy5fYWRqdXN0SW5kZXgoYSksdj10aGlzLl9sQ29udGFpbmVyO3JldHVybiBtOCh2LGgsZixkKSxsLmF0dGFjaFRvVmlld0NvbnRhaW5lclJlZigpLFBsKFZTKHYpLGYsbCksbH1tb3ZlKGwsYSl7cmV0dXJu'@;
put 'IHRoaXMuaW5zZXJ0KGwsYSl9aW5kZXhPZihsKXtjb25zdCBhPXVJKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09YT9hLmluZGV4T2YobCk6LTF9cmVtb3ZlKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1hOCh0aGlzLl9sQ29udGFpbmVyLGEpO2QmJihSdShW'@;
put 'Uyh0aGlzLl9sQ29udGFpbmVyKSxhKSxVNChkW0tpXSxkKSl9ZGV0YWNoKGwpe2NvbnN0IGE9dGhpcy5fYWRqdXN0SW5kZXgobCwtMSksZD1hOCh0aGlzLl9sQ29udGFpbmVyLGEpO3JldHVybiBkJiZudWxsIT1SdShWUyh0aGlzLl9sQ29udGFpbmVyKSxhKT9uZXcgeTgoZCk6bnVsbH1fYWRq'@;
put 'dXN0SW5kZXgobCxhPTApe3JldHVybiBsPz90aGlzLmxlbmd0aCthfX07ZnVuY3Rpb24gdUkoYyl7cmV0dXJuIGNbOF19ZnVuY3Rpb24gVlMoYyl7cmV0dXJuIGNbOF18fChjWzhdPVtdKX1mdW5jdGlvbiBkSShjLGwpe2xldCBhO2NvbnN0IGQ9bFtjLmluZGV4XTtyZXR1cm4gUHUoZCk/YT1k'@;
put 'OihhPXdTKGQsbCxudWxsLGMpLGxbYy5pbmRleF09YSxoOChsLGEpKSxCUyhhLGwsYyxkKSxuZXcgY0koYSxjLGwpfWxldCBCUz1mdW5jdGlvbiBqUyhjLGwsYSxkKXtpZihjW211XSlyZXR1cm47bGV0IGg7aD04JmEudHlwZT9DbChkKTpmdW5jdGlvbiBUeihjLGwpe2NvbnN0IGE9Y1tiYV0s'@;
put 'ZD1hLmNyZWF0ZUNvbW1lbnQoIiIpLGg9UjAobCxjKTtyZXR1cm4gWjQoYSxxMyhhLGgpLGQsZnVuY3Rpb24gb1MoYyxsKXtyZXR1cm4gYy5uZXh0U2libGluZyhsKX0oYSxoKSwhMSksZH0obCxhKSxjW211XT1ofSxDYj0oKT0+ITE7Y2xhc3MgelN7Y29uc3RydWN0b3IobCl7dGhpcy5xdWVy'@;
put 'eUxpc3Q9bCx0aGlzLm1hdGNoZXM9bnVsbH1jbG9uZSgpe3JldHVybiBuZXcgelModGhpcy5xdWVyeUxpc3QpfXNldERpcnR5KCl7dGhpcy5xdWVyeUxpc3Quc2V0RGlydHkoKX19Y2xhc3MgU2J7Y29uc3RydWN0b3IobD1bXSl7dGhpcy5xdWVyaWVzPWx9Y3JlYXRlRW1iZWRkZWRWaWV3KGwp'@;
put 'e2NvbnN0IGE9bC5xdWVyaWVzO2lmKG51bGwhPT1hKXtjb25zdCBkPW51bGwhPT1sLmNvbnRlbnRRdWVyaWVzP2wuY29udGVudFF1ZXJpZXNbMF06YS5sZW5ndGgsaD1bXTtmb3IobGV0IGY9MDtmPGQ7ZisrKXtjb25zdCB2PWEuZ2V0QnlJbmRleChmKTtoLnB1c2godGhpcy5xdWVyaWVzW3Yu'@;
put 'aW5kZXhJbkRlY2xhcmF0aW9uVmlld10uY2xvbmUoKSl9cmV0dXJuIG5ldyBTYihoKX1yZXR1cm4gbnVsbH1pbnNlcnRWaWV3KGwpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZGV0YWNoVmlldyhsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWZpbmlzaFZpZXdD'@;
put 'cmVhdGlvbihsKXt0aGlzLmRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpfWRpcnR5UXVlcmllc1dpdGhNYXRjaGVzKGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKyspbnVsbCE9PVlTKGwsYSkubWF0Y2hlcyYmdGhpcy5xdWVyaWVzW2FdLnNldERpcnR5KCl9fWNsYXNz'@;
put 'IGhJe2NvbnN0cnVjdG9yKGwsYSxkPW51bGwpe3RoaXMuZmxhZ3M9YSx0aGlzLnJlYWQ9ZCx0aGlzLnByZWRpY2F0ZT0ic3RyaW5nIj09dHlwZW9mIGw/ZnVuY3Rpb24gdkkoYyl7cmV0dXJuIGMuc3BsaXQoIiwiKS5tYXAobD0+bC50cmltKCkpfShsKTpsfX1jbGFzcyBVU3tjb25zdHJ1Y3Rv'@;
put 'cihsPVtdKXt0aGlzLnF1ZXJpZXM9bH1lbGVtZW50U3RhcnQobCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMucXVlcmllcy5sZW5ndGg7ZCsrKXRoaXMucXVlcmllc1tkXS5lbGVtZW50U3RhcnQobCxhKX1lbGVtZW50RW5kKGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5xdWVyaWVzLmxlbmd0aDthKysp'@;
put 'dGhpcy5xdWVyaWVzW2FdLmVsZW1lbnRFbmQobCl9ZW1iZWRkZWRUVmlldyhsKXtsZXQgYT1udWxsO2ZvcihsZXQgZD0wO2Q8dGhpcy5sZW5ndGg7ZCsrKXtjb25zdCBoPW51bGwhPT1hP2EubGVuZ3RoOjAsZj10aGlzLmdldEJ5SW5kZXgoZCkuZW1iZWRkZWRUVmlldyhsLGgpO2YmJihmLmlu'@;
put 'ZGV4SW5EZWNsYXJhdGlvblZpZXc9ZCxudWxsIT09YT9hLnB1c2goZik6YT1bZl0pfXJldHVybiBudWxsIT09YT9uZXcgVVMoYSk6bnVsbH10ZW1wbGF0ZShsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5xdWVyaWVzLmxlbmd0aDtkKyspdGhpcy5xdWVyaWVzW2RdLnRlbXBsYXRlKGwsYSl9Z2V0'@;
put 'QnlJbmRleChsKXtyZXR1cm4gdGhpcy5xdWVyaWVzW2xdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5xdWVyaWVzLmxlbmd0aH10cmFjayhsKXt0aGlzLnF1ZXJpZXMucHVzaChsKX19Y2xhc3MgWlN7Y29uc3RydWN0b3IobCxhPS0xKXt0aGlzLm1ldGFkYXRhPWwsdGhpcy5tYXRjaGVzPW51'@;
put 'bGwsdGhpcy5pbmRleEluRGVjbGFyYXRpb25WaWV3PS0xLHRoaXMuY3Jvc3Nlc05nVGVtcGxhdGU9ITEsdGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITAsdGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9YX1lbGVtZW50U3RhcnQobCxhKXt0aGlzLmlzQXBwbHlpbmdUb05vZGUoYSkmJnRoaXMu'@;
put 'bWF0Y2hUTm9kZShsLGEpfWVsZW1lbnRFbmQobCl7dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg9PT1sLmluZGV4JiYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGU9ITEpfXRlbXBsYXRlKGwsYSl7dGhpcy5lbGVtZW50U3RhcnQobCxhKX1lbWJlZGRlZFRWaWV3KGwsYSl7cmV0dXJuIHRoaXMu'@;
put 'aXNBcHBseWluZ1RvTm9kZShsKT8odGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMCx0aGlzLmFkZE1hdGNoKC1sLmluZGV4LGEpLG5ldyBaUyh0aGlzLm1ldGFkYXRhKSk6bnVsbH1pc0FwcGx5aW5nVG9Ob2RlKGwpe2lmKHRoaXMuX2FwcGxpZXNUb05leHROb2RlJiYxJn50aGlzLm1ldGFkYXRh'@;
put 'LmZsYWdzKXtjb25zdCBhPXRoaXMuX2RlY2xhcmF0aW9uTm9kZUluZGV4O2xldCBkPWwucGFyZW50O2Zvcig7bnVsbCE9PWQmJjgmZC50eXBlJiZkLmluZGV4IT09YTspZD1kLnBhcmVudDtyZXR1cm4gYT09PShudWxsIT09ZD9kLmluZGV4Oi0xKX1yZXR1cm4gdGhpcy5fYXBwbGllc1RvTmV4'@;
put 'dE5vZGV9bWF0Y2hUTm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5tZXRhZGF0YS5wcmVkaWNhdGU7aWYoQXJyYXkuaXNBcnJheShkKSlmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdO3RoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxJeihhLGYpKSx0aGlzLm1h'@;
put 'dGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsTnYoYSxsLGYsITEsITEpKX1lbHNlIGQ9PT1TbD80JmEudHlwZSYmdGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLC0xKTp0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsTnYoYSxsLGQsITEsITEpKX1tYXRjaFROb2Rl'@;
put 'V2l0aFJlYWRPcHRpb24obCxhLGQpe2lmKG51bGwhPT1kKXtjb25zdCBoPXRoaXMubWV0YWRhdGEucmVhZDtpZihudWxsIT09aClpZihoPT09Sml8fGg9PT1EYXx8aD09PVNsJiY0JmEudHlwZSl0aGlzLmFkZE1hdGNoKGEuaW5kZXgsLTIpO2Vsc2V7Y29uc3QgZj1OdihhLGwsaCwhMSwhMSk7'@;
put 'bnVsbCE9PWYmJnRoaXMuYWRkTWF0Y2goYS5pbmRleCxmKX1lbHNlIHRoaXMuYWRkTWF0Y2goYS5pbmRleCxkKX19YWRkTWF0Y2gobCxhKXtudWxsPT09dGhpcy5tYXRjaGVzP3RoaXMubWF0Y2hlcz1bbCxhXTp0aGlzLm1hdGNoZXMucHVzaChsLGEpfX1mdW5jdGlvbiBJeihjLGwpe2NvbnN0'@;
put 'IGE9Yy5sb2NhbE5hbWVzO2lmKG51bGwhPT1hKWZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCs9MilpZihhW2RdPT09bClyZXR1cm4gYVtkKzFdO3JldHVybiBudWxsfWZ1bmN0aW9uIFJ6KGMsbCxhLGQpe3JldHVybi0xPT09YT9mdW5jdGlvbiBmSShjLGwpe3JldHVybiAxMSZjLnR5cGU/TDQo'@;
put 'YyxsKTo0JmMudHlwZT9kYihjLGwpOm51bGx9KGwsYyk6LTI9PT1hP2Z1bmN0aW9uIFdTKGMsbCxhKXtyZXR1cm4gYT09PUppP0w0KGwsYyk6YT09PVNsP2RiKGwsYyk6YT09PURhP2RJKGwsYyk6dm9pZCAwfShjLGwsZCk6RDQoYyxjW0tpXSxhLGwpfWZ1bmN0aW9uIFc1KGMsbCxhLGQpe2Nv'@;
put 'bnN0IGg9bFtkZF0ucXVlcmllc1tkXTtpZihudWxsPT09aC5tYXRjaGVzKXtjb25zdCBmPWMuZGF0YSx2PWEubWF0Y2hlcyxNPVtdO2ZvcihsZXQgRD0wO251bGwhPT12JiZEPHYubGVuZ3RoO0QrPTIpe2NvbnN0IFo9dltEXTtNLnB1c2goWjwwP251bGw6UnoobCxmW1pdLHZbRCsxXSxhLm1l'@;
put 'dGFkYXRhLnJlYWQpKX1oLm1hdGNoZXM9TX1yZXR1cm4gaC5tYXRjaGVzfWZ1bmN0aW9uIGs4KGMsbCxhLGQpe2NvbnN0IGg9Yy5xdWVyaWVzLmdldEJ5SW5kZXgoYSksZj1oLm1hdGNoZXM7aWYobnVsbCE9PWYpe2NvbnN0IHY9VzUoYyxsLGgsYSk7Zm9yKGxldCBNPTA7TTxmLmxlbmd0aDtN'@;
put 'Kz0yKXtjb25zdCBEPWZbTV07aWYoRD4wKWQucHVzaCh2W00vMl0pO2Vsc2V7Y29uc3QgWj1mW00rMV0sbmU9bFstRF07Zm9yKGxldCBjZT1nYztjZTxuZS5sZW5ndGg7Y2UrKyl7Y29uc3QgYmU9bmVbY2VdO2JlW1M0XT09PWJlW2ZjXSYmazgoYmVbS2ldLGJlLFosZCl9aWYobnVsbCE9PW5l'@;
put 'W1YzXSl7Y29uc3QgY2U9bmVbVjNdO2ZvcihsZXQgYmU9MDtiZTxjZS5sZW5ndGg7YmUrKyl7Y29uc3QgRWU9Y2VbYmVdO2s4KEVlW0tpXSxFZSxaLGQpfX19fX1yZXR1cm4gZH1mdW5jdGlvbiBwSShjLGwsYSl7Y29uc3QgZD1uZXcgcGQoISg0Jn5hKSk7cmV0dXJuIGZ1bmN0aW9uIFREKGMs'@;
put 'bCxhLGQpe2NvbnN0IGg9RkQobCk7aC5wdXNoKGEpLGMuZmlyc3RDcmVhdGVQYXNzJiZmOChjKS5wdXNoKGQsaC5sZW5ndGgtMSl9KGMsbCxkLGQuZGVzdHJveSksKGxbZGRdPz89bmV3IFNiKS5xdWVyaWVzLnB1c2gobmV3IHpTKGQpKS0xfWZ1bmN0aW9uIGJJKGMsbCxhKXtudWxsPT09Yy5x'@;
put 'dWVyaWVzJiYoYy5xdWVyaWVzPW5ldyBVUyksYy5xdWVyaWVzLnRyYWNrKG5ldyBaUyhsLGEpKX1mdW5jdGlvbiBZUyhjLGwpe3JldHVybiBjLnF1ZXJpZXMuZ2V0QnlJbmRleChsKX1mdW5jdGlvbiB5SShjLGwpe2NvbnN0IGE9Y1tLaV0sZD1ZUyhhLGwpO3JldHVybiBkLmNyb3NzZXNOZ1Rl'@;
put 'bXBsYXRlP2s4KGEsYyxsLFtdKTpXNShhLGMsZCxsKX1mdW5jdGlvbiB3SShjKXtyZXR1cm4gZnVuY3Rpb24gTWIoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMmJnZvaWQgMCE9PWNbbWVdfShjKSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuc2V0fWZ1bmN0aW9uIENvKGMpe2xldCBsPWZ1'@;
put 'bmN0aW9uIFhTKGMpe3JldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYy5wcm90b3R5cGUpLmNvbnN0cnVjdG9yfShjLnR5cGUpLGE9ITA7Y29uc3QgZD1bY107Zm9yKDtsOyl7bGV0IGg7aWYoTmMoYykpaD1sLlx1MDI3NWNtcHx8bC5cdTAyNzVkaXI7ZWxzZXtpZihsLlx1MDI3NWNtcCl0'@;
put 'aHJvdyBuZXcgUW4oOTAzLCExKTtoPWwuXHUwMjc1ZGlyfWlmKGgpe2lmKGEpe2QucHVzaChoKTtjb25zdCB2PWM7di5pbnB1dHM9TzgoYy5pbnB1dHMpLHYuaW5wdXRUcmFuc2Zvcm1zPU84KGMuaW5wdXRUcmFuc2Zvcm1zKSx2LmRlY2xhcmVkSW5wdXRzPU84KGMuZGVjbGFyZWRJbnB1dHMp'@;
put 'LHYub3V0cHV0cz1POChjLm91dHB1dHMpO2NvbnN0IE09aC5ob3N0QmluZGluZ3M7TSYmSWYoYyxNKTtjb25zdCBEPWgudmlld1F1ZXJ5LFo9aC5jb250ZW50UXVlcmllcztpZihEJiZESShjLEQpLFomJlV6KGMsWiksa0koYyxoKSxJdShjLm91dHB1dHMsaC5vdXRwdXRzKSxOYyhoKSYmaC5k'@;
put 'YXRhLmFuaW1hdGlvbil7Y29uc3QgbmU9Yy5kYXRhO25lLmFuaW1hdGlvbj0obmUuYW5pbWF0aW9ufHxbXSkuY29uY2F0KGguZGF0YS5hbmltYXRpb24pfX1jb25zdCBmPWguZmVhdHVyZXM7aWYoZilmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdO00mJk0ubmdJbmhl'@;
put 'cml0JiZNKGMpLE09PT1DbyYmKGE9ITEpfX1sPU9iamVjdC5nZXRQcm90b3R5cGVPZihsKX0hZnVuY3Rpb24genooYyl7bGV0IGw9MCxhPW51bGw7Zm9yKGxldCBkPWMubGVuZ3RoLTE7ZD49MDtkLS0pe2NvbnN0IGg9Y1tkXTtoLmhvc3RWYXJzPWwrPWguaG9zdFZhcnMsaC5ob3N0QXR0cnM9'@;
put 'cGYoaC5ob3N0QXR0cnMsYT1wZihhLGguaG9zdEF0dHJzKSl9fShkKX1mdW5jdGlvbiBrSShjLGwpe2Zvcihjb25zdCBhIGluIGwuaW5wdXRzKXtpZighbC5pbnB1dHMuaGFzT3duUHJvcGVydHkoYSl8fGMuaW5wdXRzLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9bC5pbnB1'@;
put 'dHNbYV07aWYodm9pZCAwIT09ZCYmKGMuaW5wdXRzW2FdPWQsYy5kZWNsYXJlZElucHV0c1thXT1sLmRlY2xhcmVkSW5wdXRzW2FdLG51bGwhPT1sLmlucHV0VHJhbnNmb3Jtcykpe2NvbnN0IGg9QXJyYXkuaXNBcnJheShkKT9kWzBdOmQ7aWYoIWwuaW5wdXRUcmFuc2Zvcm1zLmhhc093blBy'@;
put 'b3BlcnR5KGgpKWNvbnRpbnVlO2MuaW5wdXRUcmFuc2Zvcm1zPz89e30sYy5pbnB1dFRyYW5zZm9ybXNbaF09bC5pbnB1dFRyYW5zZm9ybXNbaF19fX1mdW5jdGlvbiBPOChjKXtyZXR1cm4gYz09PUQwP3t9OmM9PT10cz9bXTpjfWZ1bmN0aW9uIERJKGMsbCl7Y29uc3QgYT1jLnZpZXdRdWVy'@;
put 'eTtjLnZpZXdRdWVyeT1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiBVeihjLGwpe2NvbnN0IGE9Yy5jb250ZW50UXVlcmllcztjLmNvbnRlbnRRdWVyaWVzPWE/KGQsaCxmKT0+e2woZCxoLGYpLGEoZCxoLGYpfTpsfWZ1bmN0aW9uIElmKGMsbCl7Y29uc3QgYT1jLmhvc3RC'@;
put 'aW5kaW5ncztjLmhvc3RCaW5kaW5ncz1hPyhkLGgpPT57bChkLGgpLGEoZCxoKX06bH1mdW5jdGlvbiBiZChjKXtjb25zdCBsPWE9Pntjb25zdCBkPShBcnJheS5pc0FycmF5KGMpP2M6YygpKS5tYXAoaD0+ImZ1bmN0aW9uIj09dHlwZW9mIGg/e2RpcmVjdGl2ZTpZaShoKSxpbnB1dHM6RDAs'@;
put 'b3V0cHV0czpEMH06e2RpcmVjdGl2ZTpZaShoLmRpcmVjdGl2ZSksaW5wdXRzOlJJKGguaW5wdXRzKSxvdXRwdXRzOlJJKGgub3V0cHV0cyl9KTtudWxsPT09YS5ob3N0RGlyZWN0aXZlcz8oYS5maW5kSG9zdERpcmVjdGl2ZURlZnM9SUksYS5ob3N0RGlyZWN0aXZlcz1kKTphLmhvc3REaXJl'@;
put 'Y3RpdmVzLnVuc2hpZnQoLi4uZCl9O3JldHVybiBsLm5nSW5oZXJpdD0hMCxsfWZ1bmN0aW9uIElJKGMsbCxhKXtpZihudWxsIT09Yy5ob3N0RGlyZWN0aXZlcylmb3IoY29uc3QgZCBvZiBjLmhvc3REaXJlY3RpdmVzKXtjb25zdCBoPXhjKGQuZGlyZWN0aXZlKTtHeihoLmRlY2xhcmVkSW5w'@;
put 'dXRzLGQuaW5wdXRzKSxJSShoLGwsYSksYS5zZXQoaCxkKSxsLnB1c2goaCl9fWZ1bmN0aW9uIFJJKGMpe2lmKHZvaWQgMD09PWN8fDA9PT1jLmxlbmd0aClyZXR1cm4gRDA7Y29uc3QgbD17fTtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErPTIpbFtjW2FdXT1jW2ErMV07cmV0dXJuIGx9ZnVu'@;
put 'Y3Rpb24gR3ooYyxsKXtmb3IoY29uc3QgYSBpbiBsKWwuaGFzT3duUHJvcGVydHkoYSkmJihjW2xbYV1dPWNbYV0pfWZ1bmN0aW9uIFpsKGMpe2NvbnN0IGw9Yy5pbnB1dENvbmZpZyxhPXt9O2Zvcihjb25zdCBkIGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eShkKSl7Y29uc3QgaD1sW2RdO0Fy'@;
put 'cmF5LmlzQXJyYXkoaCkmJmhbM10mJihhW2RdPWhbM10pfWMuaW5wdXRUcmFuc2Zvcm1zPWF9Y2xhc3MgbnB7fWNsYXNzIG1je31jbGFzcyBEYiBleHRlbmRzIG5we2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX3BhcmVudD1hLHRoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9W10s'@;
put 'dGhpcy5kZXN0cm95Q2JzPVtdLHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyPW5ldyBzSSh0aGlzKTtjb25zdCBoPUx1KGwpO3RoaXMuX2Jvb3RzdHJhcENvbXBvbmVudHM9RjEoaC5ib290c3RyYXApLHRoaXMuX3IzSW5qZWN0b3I9UjQobCxhLFt7cHJvdmlkZTpucCx1c2VWYWx1ZTp0'@;
put 'aGlzfSx7cHJvdmlkZTpaNSx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn0sLi4uZF0sUHIobCksbmV3IFNldChbImVudmlyb25tZW50Il0pKSx0aGlzLl9yM0luamVjdG9yLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLHRoaXMuaW5zdGFuY2U9dGhpcy5fcjNJ'@;
put 'bmplY3Rvci5nZXQobCl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX3IzSW5qZWN0b3J9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5fcjNJbmplY3RvcjshbC5kZXN0cm95ZWQmJmwuZGVzdHJveSgpLHRoaXMuZGVzdHJveUNicy5mb3JFYWNoKGE9PmEoKSksdGhpcy5kZXN0cm95Q2JzPW51'@;
put 'bGx9b25EZXN0cm95KGwpe3RoaXMuZGVzdHJveUNicy5wdXNoKGwpfX1jbGFzcyBJYiBleHRlbmRzIG1je2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5tb2R1bGVUeXBlPWx9Y3JlYXRlKGwpe3JldHVybiBuZXcgRGIodGhpcy5tb2R1bGVUeXBlLGwsW10pfX1jbGFzcyBQOCBleHRlbmRz'@;
put 'IG5we2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IHNJKHRoaXMpLHRoaXMuaW5zdGFuY2U9bnVsbDtjb25zdCBhPW5ldyB1ZChbLi4ubC5wcm92aWRlcnMse3Byb3ZpZGU6bnAsdXNlVmFsdWU6dGhpc30se3Byb3ZpZGU6WjUsdXNlVmFs'@;
put 'dWU6dGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJ9XSxsLnBhcmVudHx8SDMoKSxsLmRlYnVnTmFtZSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpO3RoaXMuaW5qZWN0b3I9YSxsLnJ1bkVudmlyb25tZW50SW5pdGlhbGl6ZXJzJiZhLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygp'@;
put 'fWRlc3Ryb3koKXt0aGlzLmluamVjdG9yLmRlc3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5pbmplY3Rvci5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIEc0KGMsbCxhPW51bGwpe3JldHVybiBuZXcgUDgoe3Byb3ZpZGVyczpjLHBhcmVudDpsLGRlYnVnTmFtZTphLHJ1bkVudmlyb25tZW50SW5p'@;
put 'dGlhbGl6ZXJzOiEwfSkuaW5qZWN0b3J9bGV0IFJmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnRhc2tJZD0wLHRoaXMucGVuZGluZ1Rhc2tzPW5ldyBTZXQsdGhpcy5oYXNQZW5kaW5nVGFza3M9bmV3IGVpKCExKX1nZXQgX2hhc1BlbmRpbmdUYXNrcygpe3JldHVybiB0aGlz'@;
put 'Lmhhc1BlbmRpbmdUYXNrcy52YWx1ZX1hZGQoKXt0aGlzLl9oYXNQZW5kaW5nVGFza3N8fHRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITApO2NvbnN0IGE9dGhpcy50YXNrSWQrKztyZXR1cm4gdGhpcy5wZW5kaW5nVGFza3MuYWRkKGEpLGF9cmVtb3ZlKGEpe3RoaXMucGVuZGluZ1Rhc2tz'@;
put 'LmRlbGV0ZShhKSwwPT09dGhpcy5wZW5kaW5nVGFza3Muc2l6ZSYmdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1BlbmRpbmdUYXNrcy5uZXh0KCExKX1uZ09uRGVzdHJveSgpe3RoaXMucGVuZGluZ1Rhc2tzLmNsZWFyKCksdGhpcy5faGFzUGVuZGluZ1Rhc2tzJiZ0aGlzLmhhc1Bl'@;
put 'bmRpbmdUYXNrcy5uZXh0KCExKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5j'@;
put 'dGlvbiBSYihjKXtyZXR1cm4hIUpTKGMpJiYoQXJyYXkuaXNBcnJheShjKXx8IShjIGluc3RhbmNlb2YgTWFwKSYmU3ltYm9sLml0ZXJhdG9yIGluIGMpfWZ1bmN0aW9uIEpTKGMpe3JldHVybiBudWxsIT09YyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBjfHwib2JqZWN0Ij09dHlwZW9mIGMpfWZ1'@;
put 'bmN0aW9uIHkyKGMsbCxhKXtyZXR1cm4gY1tsXT1hfWZ1bmN0aW9uIFZjKGMsbCxhKXtyZXR1cm4hT2JqZWN0LmlzKGNbbF0sYSkmJihjW2xdPWEsITApfWZ1bmN0aW9uIHJwKGMsbCxhLGQpe2NvbnN0IGg9VmMoYyxsLGEpO3JldHVybiBWYyhjLGwrMSxkKXx8aH1mdW5jdGlvbiBPYihjLGws'@;
put 'YSxkLGgpe2NvbnN0IGY9cnAoYyxsLGEsZCk7cmV0dXJuIFZjKGMsbCsyLGgpfHxmfWZ1bmN0aW9uIHlkKGMsbCxhLGQsaCxmKXtjb25zdCB2PXJwKGMsbCxhLGQpO3JldHVybiBycChjLGwrMixoLGYpfHx2fWZ1bmN0aW9uIG10KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1kaSgpLFo9YXMo'@;
put 'KSxuZT1jK3dhLGNlPVouZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIFFTKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWwuY29uc3RzLG5lPUI1KGwsYyw0LHZ8fG51bGwsZDIoWixNKSk7dlMobCxhLG5lLGQyKFosRCkpLER2KGwsbmUpO2NvbnN0IGNlPW5lLnRWaWV3PW1TKDIsbmUsZCxo'@;
put 'LGYsbC5kaXJlY3RpdmVSZWdpc3RyeSxsLnBpcGVSZWdpc3RyeSxudWxsLGwuc2NoZW1hcyxaLG51bGwpO3JldHVybiBudWxsIT09bC5xdWVyaWVzJiYobC5xdWVyaWVzLnRlbXBsYXRlKGwsbmUpLGNlLnF1ZXJpZXM9bC5xdWVyaWVzLmVtYmVkZGVkVFZpZXcobmUpKSxuZX0obmUsWixELGws'@;
put 'YSxkLGgsZix2KTpaLmRhdGFbbmVdO2gyKGNlLCExKTtjb25zdCBiZT1ISShaLEQsY2UsYyk7SzYoKSYmczAoWixELGJlLGNlKSxWdShiZSxEKTtjb25zdCBFZT13UyhiZSxELGJlLGNlKTtyZXR1cm4gRFtuZV09RWUsaDgoRCxFZSksZnVuY3Rpb24gRjAoYyxsLGEpe3JldHVybiBDYihjLGws'@;
put 'YSl9KEVlLGNlLEQpLEowKGNlKSYmcFMoWixELGNlKSxudWxsIT12JiZnUyhELGNlLE0pLG10fWxldCBIST1mdW5jdGlvbiBlTShjLGwsYSxkKXtyZXR1cm4gZjIoITApLGxbYmFdLmNyZWF0ZUNvbW1lbnQoIiIpfTtmdW5jdGlvbiBmcihjLGwsYSxkKXtjb25zdCBoPWRpKCk7cmV0dXJuIFZj'@;
put 'KGgsYWgoKSxsKSYmKGFzKCksZGgoSnMoKSxoLGMsbCxhLGQpKSxmcn1mdW5jdGlvbiBXbChjLGwsYSxkKXtyZXR1cm4gVmMoYyxhaCgpLGEpP2wrU28oYSkrZDpSYX1mdW5jdGlvbiBZYShjLGwpe3JldHVybiBjPDwxN3xsPDwyfWZ1bmN0aW9uIHhsKGMpe3JldHVybiBjPj4xNyYzMjc2N31m'@;
put 'dW5jdGlvbiBMZihjKXtyZXR1cm4gMnxjfWZ1bmN0aW9uIF9kKGMpe3JldHVybigxMzEwNjgmYyk+PjJ9ZnVuY3Rpb24gZ24oYyxsKXtyZXR1cm4tMTMxMDY5JmN8bDw8Mn1mdW5jdGlvbiB3bihjKXtyZXR1cm4gMXxjfWZ1bmN0aW9uIHlyKGMsbCxhLGQpe2NvbnN0IGg9Y1thKzFdLGY9bnVs'@;
put 'bD09PWw7bGV0IHY9ZD94bChoKTpfZChoKSxNPSExO2Zvcig7MCE9PXYmJighMT09PU18fGYpOyl7Y29uc3QgWj1jW3YrMV07V3IoY1t2XSxsKSYmKE09ITAsY1t2KzFdPWQ/d24oWik6TGYoWikpLHY9ZD94bChaKTpfZChaKX1NJiYoY1thKzFdPWQ/TGYoaCk6d24oaCkpfWZ1bmN0aW9uIFdy'@;
put 'KGMsbCl7cmV0dXJuIG51bGw9PT1jfHxudWxsPT1sfHwoQXJyYXkuaXNBcnJheShjKT9jWzFdOmMpPT09bHx8ISghQXJyYXkuaXNBcnJheShjKXx8InN0cmluZyIhPXR5cGVvZiBsKSYmZTIoYyxsKT49MH1jb25zdCBhaT17dGV4dEVuZDowLGtleTowLGtleUVuZDowLHZhbHVlOjAsdmFsdWVF'@;
put 'bmQ6MH07ZnVuY3Rpb24gbmkoYyl7cmV0dXJuIGMuc3Vic3RyaW5nKGFpLmtleSxhaS5rZXlFbmQpfWZ1bmN0aW9uIHJhKGMsbCl7Y29uc3QgYT1haS50ZXh0RW5kO3JldHVybiBhPT09bD8tMToobD1haS5rZXlFbmQ9ZnVuY3Rpb24gcjEoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQo'@;
put 'bCk+MzI7KWwrKztyZXR1cm4gbH0oYyxhaS5rZXk9bCxhKSxNcyhjLGwsYSkpfWZ1bmN0aW9uIE1zKGMsbCxhKXtmb3IoO2w8YSYmYy5jaGFyQ29kZUF0KGwpPD0zMjspbCsrO3JldHVybiBsfWZ1bmN0aW9uIHhlKGMsbCxhKXtjb25zdCBkPWRpKCk7cmV0dXJuIFZjKGQsYWgoKSxsKSYmUDAo'@;
put 'YXMoKSxKcygpLGQsYyxsLGRbYmFdLGEsITEpLHhlfWZ1bmN0aW9uIGZoKGMsbCxhLGQsaCl7Y29uc3Qgdj1oPyJjbGFzcyI6InN0eWxlIjtDUyhjLGEsbC5pbnB1dHNbdl0sdixkKX1mdW5jdGlvbiB3ZChjLGwsYSl7cmV0dXJuIE9mKGMsbCxhLCExKSx3ZH1mdW5jdGlvbiBUcihjLGwpe3Jl'@;
put 'dHVybiBPZihjLGwsbnVsbCwhMCksVHJ9ZnVuY3Rpb24gb3AoYyxsKXtmb3IobGV0IGE9ZnVuY3Rpb24gVWkoYyl7cmV0dXJuIGZ1bmN0aW9uIFRhKGMpe2FpLmtleT0wLGFpLmtleUVuZD0wLGFpLnZhbHVlPTAsYWkudmFsdWVFbmQ9MCxhaS50ZXh0RW5kPWMubGVuZ3RofShjKSxyYShjLE1z'@;
put 'KGMsMCxhaS50ZXh0RW5kKSl9KGwpO2E+PTA7YT1yYShsLGEpKXkwKGMsbmkobCksITApfWZ1bmN0aW9uIE9mKGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWFzKCksdj14ZigyKTtmLmZpcnN0VXBkYXRlUGFzcyYmaXJlKGYsYyx2LGQpLGwhPT1SYSYmVmMoaCx2LGwpJiZhcmUoZixmLmRhdGFb'@;
put 'SHUoKV0saCxoW2JhXSxjLGhbdisxXT1mdW5jdGlvbiBYN2UoYyxsKXtyZXR1cm4gbnVsbD09Y3x8IiI9PT1jfHwoInN0cmluZyI9PXR5cGVvZiBsP2MrPWw6Im9iamVjdCI9PXR5cGVvZiBjJiYoYz1QcihtMihjKSkpKSxjfShsLGEpLGQsdil9ZnVuY3Rpb24gcnJlKGMsbCl7cmV0dXJuIGw+'@;
put 'PWMuZXhwYW5kb1N0YXJ0SW5kZXh9ZnVuY3Rpb24gaXJlKGMsbCxhLGQpe2NvbnN0IGg9Yy5kYXRhO2lmKG51bGw9PT1oW2ErMV0pe2NvbnN0IGY9aFtIdSgpXSx2PXJyZShjLGEpO2xyZShmLGQpJiZudWxsPT09bCYmIXYmJihsPSExKSxsPWZ1bmN0aW9uIFo3ZShjLGwsYSxkKXtjb25zdCBo'@;
put 'PXNDKGMpO2xldCBmPWQ/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztpZihudWxsPT09aCkwPT09KGQ/bC5jbGFzc0JpbmRpbmdzOmwuc3R5bGVCaW5kaW5ncykmJihhPWFNKGE9blUobnVsbCxjLGwsYSxkKSxsLmF0dHJzLGQpLGY9bnVsbCk7ZWxzZXtjb25zdCB2PWwuZGly'@;
put 'ZWN0aXZlU3R5bGluZ0xhc3Q7aWYoLTE9PT12fHxjW3ZdIT09aClpZihhPW5VKGgsYyxsLGEsZCksbnVsbD09PWYpe2xldCBEPWZ1bmN0aW9uIFc3ZShjLGwsYSl7Y29uc3QgZD1hP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3M7aWYoMCE9PV9kKGQpKXJldHVybiBjW3hsKGQpXX0o'@;
put 'YyxsLGQpO3ZvaWQgMCE9PUQmJkFycmF5LmlzQXJyYXkoRCkmJihEPW5VKG51bGwsYyxsLERbMV0sZCksRD1hTShELGwuYXR0cnMsZCksZnVuY3Rpb24gWTdlKGMsbCxhLGQpe2NbeGwoYT9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKV09ZH0oYyxsLGQsRCkpfWVsc2UgZj1mdW5j'@;
put 'dGlvbiBHN2UoYyxsLGEpe2xldCBkO2NvbnN0IGg9bC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBmPTErbC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtmPGg7ZisrKWQ9YU0oZCxjW2ZdLmhvc3RBdHRycyxhKTtyZXR1cm4gYU0oZCxsLmF0dHJzLGEpfShjLGwsZCl9cmV0dXJuIHZvaWQgMCE9PWYmJihk'@;
put 'P2wucmVzaWR1YWxDbGFzc2VzPWY6bC5yZXNpZHVhbFN0eWxlcz1mKSxhfShoLGYsbCxkKSxmdW5jdGlvbiB4bihjLGwsYSxkLGgsZil7bGV0IHY9Zj9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzLE09eGwodiksRD1fZCh2KTtjW2RdPWE7bGV0IG5lLFo9ITE7aWYoQXJyYXkuaXNB'@;
put 'cnJheShhKT8obmU9YVsxXSwobnVsbD09PW5lfHxlMihhLG5lKT4wKSYmKFo9ITApKTpuZT1hLGgpaWYoMCE9PUQpe2NvbnN0IGJlPXhsKGNbTSsxXSk7Y1tkKzFdPVlhKGJlLE0pLDAhPT1iZSYmKGNbYmUrMV09Z24oY1tiZSsxXSxkKSksY1tNKzFdPWZ1bmN0aW9uIEVsKGMsbCl7cmV0dXJu'@;
put 'IDEzMTA3MSZjfGw8PDE3fShjW00rMV0sZCl9ZWxzZSBjW2QrMV09WWEoTSwwKSwwIT09TSYmKGNbTSsxXT1nbihjW00rMV0sZCkpLE09ZDtlbHNlIGNbZCsxXT1ZYShELDApLDA9PT1NP009ZDpjW0QrMV09Z24oY1tEKzFdLGQpLEQ9ZDtaJiYoY1tkKzFdPUxmKGNbZCsxXSkpLHlyKGMsbmUs'@;
put 'ZCwhMCkseXIoYyxuZSxkLCExKSxmdW5jdGlvbiB6bihjLGwsYSxkLGgpe2NvbnN0IGY9aD9jLnJlc2lkdWFsQ2xhc3NlczpjLnJlc2lkdWFsU3R5bGVzO251bGwhPWYmJiJzdHJpbmciPT10eXBlb2YgbCYmZTIoZixsKT49MCYmKGFbZCsxXT13bihhW2QrMV0pKX0obCxuZSxjLGQsZiksdj1Z'@;
put 'YShNLEQpLGY/bC5jbGFzc0JpbmRpbmdzPXY6bC5zdHlsZUJpbmRpbmdzPXZ9KGgsZixsLGEsdixkKX19ZnVuY3Rpb24gblUoYyxsLGEsZCxoKXtsZXQgZj1udWxsO2NvbnN0IHY9YS5kaXJlY3RpdmVFbmQ7bGV0IE09YS5kaXJlY3RpdmVTdHlsaW5nTGFzdDtmb3IoLTE9PT1NP009YS5kaXJl'@;
put 'Y3RpdmVTdGFydDpNKys7TTx2JiYoZj1sW01dLGQ9YU0oZCxmLmhvc3RBdHRycyxoKSxmIT09Yyk7KU0rKztyZXR1cm4gbnVsbCE9PWMmJihhLmRpcmVjdGl2ZVN0eWxpbmdMYXN0PU0pLGR9ZnVuY3Rpb24gYU0oYyxsLGEpe2NvbnN0IGQ9YT8xOjI7bGV0IGg9LTE7aWYobnVsbCE9PWwpZm9y'@;
put 'KGxldCBmPTA7ZjxsLmxlbmd0aDtmKyspe2NvbnN0IHY9bFtmXTsibnVtYmVyIj09dHlwZW9mIHY/aD12Omg9PT1kJiYoQXJyYXkuaXNBcnJheShjKXx8KGM9dm9pZCAwPT09Yz9bXTpbIiIsY10pLHkwKGMsdiwhIWF8fGxbKytmXSkpfXJldHVybiB2b2lkIDA9PT1jP251bGw6Y31mdW5jdGlv'@;
put 'biBhcmUoYyxsLGEsZCxoLGYsdixNKXtpZighKDMmbC50eXBlKSlyZXR1cm47Y29uc3QgRD1jLmRhdGEsWj1EW00rMV0sbmU9ZnVuY3Rpb24ga24oYyl7cmV0dXJuISgxJn5jKX0oWik/c3JlKEQsbCxhLGgsX2QoWiksdik6dm9pZCAwO3pJKG5lKXx8KHpJKGYpfHxmdW5jdGlvbiB5dShjKXty'@;
put 'ZXR1cm4hKDImfmMpfShaKSYmKGY9c3JlKEQsbnVsbCxhLGgsTSx2KSksZnVuY3Rpb24gdkQoYyxsLGEsZCxoKXtpZihsKWg/Yy5hZGRDbGFzcyhhLGQpOmMucmVtb3ZlQ2xhc3MoYSxkKTtlbHNle2xldCBmPS0xPT09ZC5pbmRleE9mKCItIik/dm9pZCAwOkszLkRhc2hDYXNlO251bGw9PWg/'@;
put 'Yy5yZW1vdmVTdHlsZShhLGQsZik6KCJzdHJpbmciPT10eXBlb2YgaCYmaC5lbmRzV2l0aCgiIWltcG9ydGFudCIpJiYoaD1oLnNsaWNlKDAsLTEwKSxmfD1LMy5JbXBvcnRhbnQpLGMuc2V0U3R5bGUoYSxkLGgsZikpfX0oZCx2LGI1KEh1KCksYSksaCxmKSl9ZnVuY3Rpb24gc3JlKGMsbCxh'@;
put 'LGQsaCxmKXtjb25zdCB2PW51bGw9PT1sO2xldCBNO2Zvcig7aD4wOyl7Y29uc3QgRD1jW2hdLFo9QXJyYXkuaXNBcnJheShEKSxuZT1aP0RbMV06RCxjZT1udWxsPT09bmU7bGV0IGJlPWFbaCsxXTtiZT09PVJhJiYoYmU9Y2U/dHM6dm9pZCAwKTtsZXQgRWU9Y2U/VDYoYmUsZCk6bmU9PT1k'@;
put 'P2JlOnZvaWQgMDtpZihaJiYhekkoRWUpJiYoRWU9VDYoRCxkKSksekkoRWUpJiYoTT1FZSx2KSlyZXR1cm4gTTtjb25zdCBCZT1jW2grMV07aD12P3hsKEJlKTpfZChCZSl9aWYobnVsbCE9PWwpe2xldCBEPWY/bC5yZXNpZHVhbENsYXNzZXM6bC5yZXNpZHVhbFN0eWxlcztudWxsIT1EJiYo'@;
put 'TT1UNihELGQpKX1yZXR1cm4gTX1mdW5jdGlvbiB6SShjKXtyZXR1cm4gdm9pZCAwIT09Y31mdW5jdGlvbiBscmUoYyxsKXtyZXR1cm4hIShjLmZsYWdzJihsPzg6MTYpKX1mdW5jdGlvbiBjcmUoYyxsLGEpeyFmdW5jdGlvbiBQZihjLGwsYSxkKXtjb25zdCBoPWFzKCksZj14ZigyKTtoLmZp'@;
put 'cnN0VXBkYXRlUGFzcyYmaXJlKGgsbnVsbCxmLGQpO2NvbnN0IHY9ZGkoKTtpZihhIT09UmEmJlZjKHYsZixhKSl7Y29uc3QgTT1oLmRhdGFbSHUoKV07aWYobHJlKE0sZCkmJiFycmUoaCxmKSl7bGV0IEQ9ZD9NLmNsYXNzZXNXaXRob3V0SG9zdDpNLnN0eWxlc1dpdGhvdXRIb3N0O251bGwh'@;
put 'PT1EJiYoYT1zZChELGF8fCIiKSksZmgoaCxNLHYsYSxkKX1lbHNlIWZ1bmN0aW9uIHE3ZShjLGwsYSxkLGgsZix2LE0pe2g9PT1SYSYmKGg9dHMpO2xldCBEPTAsWj0wLG5lPTA8aC5sZW5ndGg/aFswXTpudWxsLGNlPTA8Zi5sZW5ndGg/ZlswXTpudWxsO2Zvcig7bnVsbCE9PW5lfHxudWxs'@;
put 'IT09Y2U7KXtjb25zdCBiZT1EPGgubGVuZ3RoP2hbRCsxXTp2b2lkIDAsRWU9WjxmLmxlbmd0aD9mW1orMV06dm9pZCAwO2xldCBxZSxCZT1udWxsO25lPT09Y2U/KEQrPTIsWis9MixiZSE9PUVlJiYoQmU9Y2UscWU9RWUpKTpudWxsPT09Y2V8fG51bGwhPT1uZSYmbmU8Y2U/KEQrPTIsQmU9'@;
put 'bmUpOihaKz0yLEJlPWNlLHFlPUVlKSxudWxsIT09QmUmJmFyZShjLGwsYSxkLEJlLHFlLHYsTSksbmU9RDxoLmxlbmd0aD9oW0RdOm51bGwsY2U9WjxmLmxlbmd0aD9mW1pdOm51bGx9fShoLE0sdix2W2JhXSx2W2YrMV0sdltmKzFdPWZ1bmN0aW9uICQ3ZShjLGwsYSl7aWYobnVsbD09YXx8'@;
put 'IiI9PT1hKXJldHVybiB0cztjb25zdCBkPVtdLGg9bTIoYSk7aWYoQXJyYXkuaXNBcnJheShoKSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKyljKGQsaFtmXSwhMCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGgpZm9yKGNvbnN0IGYgaW4gaCloLmhhc093blByb3BlcnR5KGYpJiZjKGQs'@;
put 'ZixoW2ZdKTtlbHNlInN0cmluZyI9PXR5cGVvZiBoJiZsKGQsaCk7cmV0dXJuIGR9KGMsbCxhKSxkLGYpfX0oeTAsb3AsV2woZGkoKSxjLGwsYSksITApfWZ1bmN0aW9uIGRlKGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWFzKCksdj13YStjLE09aFtiYV0sRD1mLmZpcnN0Q3JlYXRlUGFzcz9m'@;
put 'dW5jdGlvbiB5OWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bC5jb25zdHMsRD1CNShsLGMsMixkLGQyKHYsaCkpO3JldHVybiB2UyhsLGEsRCxkMih2LGYpKSxudWxsIT09RC5hdHRycyYmX2IoRCxELmF0dHJzLCExKSxudWxsIT09RC5tZXJnZWRBdHRycyYmX2IoRCxELm1lcmdlZEF0dHJzLCEw'@;
put 'KSxudWxsIT09bC5xdWVyaWVzJiZsLnF1ZXJpZXMuZWxlbWVudFN0YXJ0KGwsRCksRH0odixmLGgsbCxhLGQpOmYuZGF0YVt2XSxaPWZyZShmLGgsRCxNLGwsYyk7aFt2XT1aO2NvbnN0IG5lPUowKEQpO3JldHVybiBoMihELCEwKSxfRChNLFosRCksIWZ1bmN0aW9uIEY4KGMpe3JldHVybiEo'@;
put 'MzImfmMuZmxhZ3MpfShEKSYmSzYoKSYmczAoZixoLFosRCksMD09PWZ1bmN0aW9uIGNWKCl7cmV0dXJuIENhLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudH0oKSYmVnUoWixoKSxmdW5jdGlvbiB1Vigpe0NhLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCsrfSgpLG5lJiYocFMoZixoLEQpLGZT'@;
put 'KGYsRCxoKSksbnVsbCE9PWQmJmdTKGgsRCksZGV9ZnVuY3Rpb24gaGUoKXtsZXQgYz11bCgpO2lDKCk/b0MoKTooYz1jLnBhcmVudCxoMihjLCExKSk7Y29uc3QgbD1jOyhmdW5jdGlvbiBkVihjKXtyZXR1cm4gQ2Euc2tpcEh5ZHJhdGlvblJvb3RUTm9kZT09PWN9KShsKSYmZnVuY3Rpb24g'@;
put 'Z1YoKXtDYS5za2lwSHlkcmF0aW9uUm9vdFROb2RlPW51bGx9KCksZnVuY3Rpb24gSkEoKXtDYS5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQtLX0oKTtjb25zdCBhPWFzKCk7cmV0dXJuIGEuZmlyc3RDcmVhdGVQYXNzJiYoRHYoYSxjKSxudShjKSYmYS5xdWVyaWVzLmVsZW1lbnRFbmQoYykp'@;
put 'LG51bGwhPWwuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiBBVihjKXtyZXR1cm4hISg4JmMuZmxhZ3MpfShsKSYmZmgoYSxsLGRpKCksbC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwhPWwuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIGtWKGMpe3JldHVybiEhKDE2JmMuZmxh'@;
put 'Z3MpfShsKSYmZmgoYSxsLGRpKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSksaGV9ZnVuY3Rpb24gR3QoYyxsLGEsZCl7cmV0dXJuIGRlKGMsbCxhLGQpLGhlKCksR3R9bGV0IGZyZT0oYyxsLGEsZCxoLGYpPT4oZjIoITApLHo0KGQsaCxmdW5jdGlvbiBvaygpe3JldHVybiBDYS5sRnJhbWUu'@;
put 'Y3VycmVudE5hbWVzcGFjZX0oKSkpO2Z1bmN0aW9uIGNpKGMsbCxhKXtjb25zdCBkPWRpKCksaD1hcygpLGY9Yyt3YSx2PWguZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIEM5ZShjLGwsYSxkLGgpe2NvbnN0IGY9bC5jb25zdHMsdj1kMihmLGQpLE09QjUobCxjLDgsIm5nLWNvbnRhaW5lciIs'@;
put 'dik7cmV0dXJuIG51bGwhPT12JiZfYihNLHYsITApLHZTKGwsYSxNLGQyKGYsaCkpLG51bGwhPT1sLnF1ZXJpZXMmJmwucXVlcmllcy5lbGVtZW50U3RhcnQobCxNKSxNfShmLGgsZCxsLGEpOmguZGF0YVtmXTtoMih2LCEwKTtjb25zdCBNPXByZShoLGQsdixjKTtyZXR1cm4gZFtmXT1NLEs2'@;
put 'KCkmJnMwKGgsZCxNLHYpLFZ1KE0sZCksSjAodikmJihwUyhoLGQsdiksZlMoaCx2LGQpKSxudWxsIT1hJiZnUyhkLHYpLGNpfWZ1bmN0aW9uIHVpKCl7bGV0IGM9dWwoKTtjb25zdCBsPWFzKCk7cmV0dXJuIGlDKCk/b0MoKTooYz1jLnBhcmVudCxoMihjLCExKSksbC5maXJzdENyZWF0ZVBh'@;
put 'c3MmJihEdihsLGMpLG51KGMpJiZsLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksdWl9ZnVuY3Rpb24gSmwoYyxsLGEpe3JldHVybiBjaShjLGwsYSksdWkoKSxKbH1sZXQgcHJlPShjLGwsYSxkKT0+KGYyKCEwKSxlUyhsW2JhXSwiIikpO2Z1bmN0aW9uIExuKCl7cmV0dXJuIGRpKCl9ZnVuY3Rp'@;
put 'b24gYXAoYyxsLGEpe2NvbnN0IGQ9ZGkoKTtyZXR1cm4gVmMoZCxhaCgpLGwpJiZQMChhcygpLEpzKCksZCxjLGwsZFtiYV0sYSwhMCksYXB9ZnVuY3Rpb24gc1UoYyxsLGEpe2NvbnN0IGQ9ZGkoKTtpZihWYyhkLGFoKCksbCkpe2NvbnN0IGY9YXMoKSx2PUpzKCk7UDAoZix2LGQsYyxsLFc0'@;
put 'KHNDKGYuZGF0YSksdixkKSxhLCEwKX1yZXR1cm4gc1V9Y29uc3QgQjg9dm9pZCAwO3ZhciBFOWU9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxCOF0sW1siQU0iLCJQTSJdLEI4LEI4XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQi'@;
put 'LCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxCOCxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwi'@;
put 'QSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2Vw'@;
put 'dGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sQjgsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9kL3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6'@;
put 'bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixCOCwiezF9ICdhdCcgezB9IixCOF0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMs'@;
put 'IyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJVU0QiLCIkIiwiVVMgRG9sbGFyIix7fSwibHRyIixmdW5jdGlvbiB4OWUoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1h'@;
put 'JiYwPT09ZD8xOjV9XTtsZXQgamI9e307ZnVuY3Rpb24gYTEoYyl7Y29uc3QgbD1mdW5jdGlvbiBBOWUoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9bXJlKGwpO2lmKGEpcmV0dXJuIGE7Y29uc3QgZD1sLnNwbGl0KCItIilbMF07aWYoYT1t'@;
put 'cmUoZCksYSlyZXR1cm4gYTtpZigiZW4iPT09ZClyZXR1cm4gRTllO3Rocm93IG5ldyBRbig3MDEsITEpfWZ1bmN0aW9uIG1yZShjKXtyZXR1cm4gYyBpbiBqYnx8KGpiW2NdPVZ0Lm5nJiZWdC5uZy5jb21tb24mJlZ0Lm5nLmNvbW1vbi5sb2NhbGVzJiZWdC5uZy5jb21tb24ubG9jYWxlc1tj'@;
put 'XSksamJbY119dmFyIFFsPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTG9jYWxlSWQ9MF09IkxvY2FsZUlkIixjW2MuRGF5UGVyaW9kc0Zvcm1hdD0xXT0iRGF5UGVyaW9kc0Zvcm1hdCIsY1tjLkRheVBlcmlvZHNTdGFuZGFsb25lPTJdPSJEYXlQZXJpb2RzU3RhbmRhbG9uZSIsY1tjLkRheXNG'@;
put 'b3JtYXQ9M109IkRheXNGb3JtYXQiLGNbYy5EYXlzU3RhbmRhbG9uZT00XT0iRGF5c1N0YW5kYWxvbmUiLGNbYy5Nb250aHNGb3JtYXQ9NV09Ik1vbnRoc0Zvcm1hdCIsY1tjLk1vbnRoc1N0YW5kYWxvbmU9Nl09Ik1vbnRoc1N0YW5kYWxvbmUiLGNbYy5FcmFzPTddPSJFcmFzIixjW2MuRmly'@;
put 'c3REYXlPZldlZWs9OF09IkZpcnN0RGF5T2ZXZWVrIixjW2MuV2Vla2VuZFJhbmdlPTldPSJXZWVrZW5kUmFuZ2UiLGNbYy5EYXRlRm9ybWF0PTEwXT0iRGF0ZUZvcm1hdCIsY1tjLlRpbWVGb3JtYXQ9MTFdPSJUaW1lRm9ybWF0IixjW2MuRGF0ZVRpbWVGb3JtYXQ9MTJdPSJEYXRlVGltZUZv'@;
put 'cm1hdCIsY1tjLk51bWJlclN5bWJvbHM9MTNdPSJOdW1iZXJTeW1ib2xzIixjW2MuTnVtYmVyRm9ybWF0cz0xNF09Ik51bWJlckZvcm1hdHMiLGNbYy5DdXJyZW5jeUNvZGU9MTVdPSJDdXJyZW5jeUNvZGUiLGNbYy5DdXJyZW5jeVN5bWJvbD0xNl09IkN1cnJlbmN5U3ltYm9sIixjW2MuQ3Vy'@;
put 'cmVuY3lOYW1lPTE3XT0iQ3VycmVuY3lOYW1lIixjW2MuQ3VycmVuY2llcz0xOF09IkN1cnJlbmNpZXMiLGNbYy5EaXJlY3Rpb25hbGl0eT0xOV09IkRpcmVjdGlvbmFsaXR5IixjW2MuUGx1cmFsQ2FzZT0yMF09IlBsdXJhbENhc2UiLGNbYy5FeHRyYURhdGE9MjFdPSJFeHRyYURhdGEiLGN9'@;
put 'KFFsfHx7fSk7Y29uc3QgemI9ImVuLVVTIjtsZXQgdnJlPXpiO2Z1bmN0aW9uIEZ0KGMsbCxhLGQpe2NvbnN0IGg9ZGkoKSxmPWFzKCksdj11bCgpO3JldHVybiBkVShmLGgsaFtiYV0sdixjLGwsZCksRnR9ZnVuY3Rpb24gdVUoYyxsKXtjb25zdCBhPXVsKCksZD1kaSgpLGg9YXMoKTtyZXR1'@;
put 'cm4gZFUoaCxkLFc0KHNDKGguZGF0YSksYSxkKSxhLGMsbCksdVV9ZnVuY3Rpb24gZFUoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1KMChkKSxaPWMuZmlyc3RDcmVhdGVQYXNzJiZmOChjKSxuZT1sW2NsXSxjZT1GRChsKTtsZXQgYmU9ITA7aWYoMyZkLnR5cGV8fHYpe2NvbnN0IHFlPVIwKGQs'@;
put 'bCkscnQ9dj92KHFlKTpxZSxwdD1jZS5sZW5ndGgsZHQ9dj92bj0+dihDbCh2bltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IEp0PW51bGw7aWYoIXYmJk0mJihKdD1mdW5jdGlvbiBNdmUoYyxsLGEsZCl7Y29uc3QgaD1jLmNsZWFudXA7aWYobnVsbCE9aClmb3IobGV0IGY9MDtmPGgubGVuZ3Ro'@;
put 'LTE7Zis9Mil7Y29uc3Qgdj1oW2ZdO2lmKHY9PT1hJiZoW2YrMV09PT1kKXtjb25zdCBNPWxbWDBdLEQ9aFtmKzJdO3JldHVybiBNLmxlbmd0aD5EP01bRF06bnVsbH0ic3RyaW5nIj09dHlwZW9mIHYmJihmKz0yKX1yZXR1cm4gbnVsbH0oYyxsLGgsZC5pbmRleCkpLG51bGwhPT1KdCkoSnQu'@;
put 'X19uZ0xhc3RMaXN0ZW5lckZuX198fEp0KS5fX25nTmV4dExpc3RlbmVyRm5fXz1mLEp0Ll9fbmdMYXN0TGlzdGVuZXJGbl9fPWYsYmU9ITE7ZWxzZXtmPVpyZShkLGwsbmUsZiwhMSk7Y29uc3Qgdm49YS5saXN0ZW4ocnQsaCxmKTtjZS5wdXNoKGYsdm4pLFomJloucHVzaChoLGR0LHB0LHB0'@;
put 'KzEpfX1lbHNlIGY9WnJlKGQsbCxuZSxmLCExKTtjb25zdCBFZT1kLm91dHB1dHM7bGV0IEJlO2lmKGJlJiZudWxsIT09RWUmJihCZT1FZVtoXSkpe2NvbnN0IHFlPUJlLmxlbmd0aDtpZihxZSlmb3IobGV0IHJ0PTA7cnQ8cWU7cnQrPTIpe2NvbnN0IENuPWxbQmVbcnRdXVtCZVtydCsxXV0u'@;
put 'c3Vic2NyaWJlKGYpLHRuPWNlLmxlbmd0aDtjZS5wdXNoKGYsQ24pLFomJloucHVzaChoLGQuaW5kZXgsdG4sLSh0bisxKSl9fX1mdW5jdGlvbiBVcmUoYyxsLGEsZCl7Y29uc3QgaD1fZShudWxsKTt0cnl7cmV0dXJuIHUyKDYsbCxhKSwhMSE9PWEoZCl9Y2F0Y2goZil7cmV0dXJuIGo1KGMs'@;
put 'ZiksITF9ZmluYWxseXt1Mig3LGwsYSksX2UoaCl9fWZ1bmN0aW9uIFpyZShjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKHYpe2lmKHY9PT1GdW5jdGlvbilyZXR1cm4gZDtiOChjLmNvbXBvbmVudE9mZnNldD4tMT9PMShjLmluZGV4LGwpOmwpO2xldCBEPVVyZShsLGEsZCx2KSxaPWYu'@;
put 'X19uZ05leHRMaXN0ZW5lckZuX187Zm9yKDtaOylEPVVyZShsLGEsWix2KSYmRCxaPVouX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09RCYmdi5wcmV2ZW50RGVmYXVsdCgpLER9fWZ1bmN0aW9uIE9lKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIF9WKGMpe3JldHVybihDYS5sRnJh'@;
put 'bWUuY29udGV4dExWaWV3PWZ1bmN0aW9uIHRDKGMsbCl7Zm9yKDtjPjA7KWw9bFtvMF0sYy0tO3JldHVybiBsfShjLENhLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtjbF19KGMpfWZ1bmN0aW9uIHh2ZShjLGwpe2xldCBhPW51bGw7Y29uc3QgZD1mdW5jdGlvbiBkdihjKXtjb25zdCBsPWMuYXR0'@;
put 'cnM7aWYobnVsbCE9bCl7Y29uc3QgYT1sLmluZGV4T2YoNSk7aWYoISgxJmEpKXJldHVybiBsW2ErMV19cmV0dXJuIG51bGx9KGMpO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWxbaF07aWYoIioiIT09Zil7aWYobnVsbD09PWQ/YjQoYyxmLCEwKTpOdyhkLGYpKXJldHVy'@;
put 'biBofWVsc2UgYT1ofXJldHVybiBhfWZ1bmN0aW9uIGxvKGMpe2NvbnN0IGw9ZGkoKVtVbF1bcmNdO2lmKCFsLnByb2plY3Rpb24pe2NvbnN0IGQ9bC5wcm9qZWN0aW9uPWZ1bmN0aW9uIFFoKGMsbCl7Y29uc3QgYT1bXTtmb3IobGV0IGQ9MDtkPGM7ZCsrKWEucHVzaChsKTtyZXR1cm4gYX0o'@;
put 'Yz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IHY9Yz94dmUoZixjKTowO251bGwhPT12JiYoaFt2XT9oW3ZdLnByb2plY3Rpb25OZXh0PWY6ZFt2XT1mLGhbdl09ZiksZj1mLm5leHR9fX1mdW5jdGlvbiBZcihjLGw9MCxh'@;
put 'KXtjb25zdCBkPWRpKCksaD1hcygpLGY9QjUoaCx3YStjLDE2LG51bGwsYXx8bnVsbCk7bnVsbD09PWYucHJvamVjdGlvbiYmKGYucHJvamVjdGlvbj1sKSxvQygpLCghZFt0dV18fHk1KCkpJiYzMiZ+Zi5mbGFncyYmZnVuY3Rpb24gZWooYyxsLGEpe21EKGxbYmFdLDAsbCxhLHJiKGMsYSxs'@;
put 'KSxjOChhLnBhcmVudHx8bFtyY10sYSxsKSl9KGgsZCxmKX1mdW5jdGlvbiBmTShjLGwsYSl7cmV0dXJuIGhVKGMsIiIsbCwiIixhKSxmTX1mdW5jdGlvbiBoVShjLGwsYSxkLGgpe2NvbnN0IGY9ZGkoKSx2PVdsKGYsbCxhLGQpO3JldHVybiB2IT09UmEmJlAwKGFzKCksSnMoKSxmLGMsdixm'@;
put 'W2JhXSxoLCExKSxoVX1mdW5jdGlvbiBsYShjLGwsYSxkKXshZnVuY3Rpb24gbUkoYyxsLGEsZCl7Y29uc3QgaD1hcygpO2lmKGguZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBmPXVsKCk7YkkoaCxuZXcgaEkobCxhLGQpLGYuaW5kZXgpLGZ1bmN0aW9uIEx6KGMsbCl7Y29uc3QgYT1jLmNvbnRl'@;
put 'bnRRdWVyaWVzfHwoYy5jb250ZW50UXVlcmllcz1bXSk7bCE9PShhLmxlbmd0aD9hW2EubGVuZ3RoLTFdOi0xKSYmYS5wdXNoKGMucXVlcmllcy5sZW5ndGgtMSxsKX0oaCxjKSwhKDImfmEpJiYoaC5zdGF0aWNDb250ZW50UXVlcmllcz0hMCl9cmV0dXJuIHBJKGgsZGkoKSxhKX0oYyxsLGEs'@;
put 'ZCl9ZnVuY3Rpb24gbmEoYyxsLGEpeyFmdW5jdGlvbiBnSShjLGwsYSl7Y29uc3QgZD1hcygpO3JldHVybiBkLmZpcnN0Q3JlYXRlUGFzcyYmKGJJKGQsbmV3IGhJKGMsbCxhKSwtMSksISgyJn5sKSYmKGQuc3RhdGljVmlld1F1ZXJpZXM9ITApKSxwSShkLGRpKCksbCl9KGMsbCxhKX1mdW5j'@;
put 'dGlvbiB4aShjKXtjb25zdCBsPWRpKCksYT1hcygpLGQ9bEMoKTtCMyhkKzEpO2NvbnN0IGg9WVMoYSxkKTtpZihjLmRpcnR5JiZmdW5jdGlvbiBzVihjKXtyZXR1cm4hKDQmfmNbWm9dKX0obCk9PT0hKDImfmgubWV0YWRhdGEuZmxhZ3MpKXtpZihudWxsPT09aC5tYXRjaGVzKWMucmVzZXQo'@;
put 'W10pO2Vsc2V7Y29uc3QgZj15SShsLGQpO2MucmVzZXQoZix2ayksYy5ub3RpZnlPbkNoYW5nZXMoKX1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBFaSgpe3JldHVybiBmdW5jdGlvbiBEOChjLGwpe3JldHVybiBjW2RkXS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oZGkoKSxsQygpKX1mdW5j'@;
put 'dGlvbiB2byhjKXtyZXR1cm4gRTQoZnVuY3Rpb24gbVYoKXtyZXR1cm4gQ2EubEZyYW1lLmNvbnRleHRMVmlld30oKSx3YStjKX1mdW5jdGlvbiBMZShjLGw9IiIpe2NvbnN0IGE9ZGkoKSxkPWFzKCksaD1jK3dhLGY9ZC5maXJzdENyZWF0ZVBhc3M/QjUoZCxoLDEsbCxudWxsKTpkLmRhdGFb'@;
put 'aF0sdj1saWUoZCxhLGYsbCxjKTthW2hdPXYsSzYoKSYmczAoZCxhLHYsZiksaDIoZiwhMSl9bGV0IGxpZT0oYyxsLGEsZCxoKT0+KGYyKCEwKSxmdW5jdGlvbiBqNChjLGwpe3JldHVybiBjLmNyZWF0ZVRleHQobCl9KGxbYmFdLGQpKTtmdW5jdGlvbiB3cihjKXtyZXR1cm4gSXIoIiIsYywi'@;
put 'Iiksd3J9ZnVuY3Rpb24gSXIoYyxsLGEpe2NvbnN0IGQ9ZGkoKSxoPVdsKGQsYyxsLGEpO3JldHVybiBoIT09UmEmJnYyKGQsSHUoKSxoKSxJcn1mdW5jdGlvbiBqdShjLGwsYSxkLGgpe2NvbnN0IGY9ZGkoKSx2PWZ1bmN0aW9uIFlsKGMsbCxhLGQsaCxmKXtjb25zdCBNPXJwKGMsTWYoKSxh'@;
put 'LGgpO3JldHVybiB4ZigyKSxNP2wrU28oYSkrZCtTbyhoKStmOlJhfShmLGMsbCxhLGQsaCk7cmV0dXJuIHYhPT1SYSYmdjIoZixIdSgpLHYpLGp1fWZ1bmN0aW9uIEZmKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09ZGkoKSxEPWZ1bmN0aW9uIGJ1KGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgWj1P'@;
put 'YihjLE1mKCksYSxoLHYpO3JldHVybiB4ZigzKSxaP2wrU28oYSkrZCtTbyhoKStmK1NvKHYpK006UmF9KE0sYyxsLGEsZCxoLGYsdik7cmV0dXJuIEQhPT1SYSYmdjIoTSxIdSgpLEQpLEZmfWZ1bmN0aW9uIEdJKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWRpKCksbmU9ZnVuY3Rpb24g'@;
put 'TWwoYyxsLGEsZCxoLGYsdixNLEQsWil7Y29uc3QgY2U9eWQoYyxNZigpLGEsaCx2LEQpO3JldHVybiB4Zig0KSxjZT9sK1NvKGEpK2QrU28oaCkrZitTbyh2KStNK1NvKEQpK1o6UmF9KFosYyxsLGEsZCxoLGYsdixNLEQpO3JldHVybiBuZSE9PVJhJiZ2MihaLEh1KCksbmUpLEdJfWZ1bmN0'@;
put 'aW9uIHBpKGMsbCxhKXt3SShsKSYmKGw9bCgpKTtjb25zdCBkPWRpKCk7cmV0dXJuIFZjKGQsYWgoKSxsKSYmUDAoYXMoKSxKcygpLGQsYyxsLGRbYmFdLGEsITEpLHBpfWZ1bmN0aW9uIGJpKGMsbCl7Y29uc3QgYT13SShjKTtyZXR1cm4gYSYmYy5zZXQobCksYX1mdW5jdGlvbiBnaShjLGwp'@;
put 'e2NvbnN0IGE9ZGkoKSxkPWFzKCksaD11bCgpO3JldHVybiBkVShkLGEsYVtiYV0saCxjLGwpLGdpfWZ1bmN0aW9uIGZVKGMsbCxhLGQsaCl7aWYoYz1ZaShjKSxBcnJheS5pc0FycmF5KGMpKWZvcihsZXQgZj0wO2Y8Yy5sZW5ndGg7ZisrKWZVKGNbZl0sbCxhLGQsaCk7ZWxzZXtjb25zdCBm'@;
put 'PWFzKCksdj1kaSgpLE09dWwoKTtsZXQgRD12ZihjKT9jOllpKGMucHJvdmlkZSk7Y29uc3QgWj1fdihjKSxuZT0xMDQ4NTc1Jk0ucHJvdmlkZXJJbmRleGVzLGNlPU0uZGlyZWN0aXZlU3RhcnQsYmU9TS5wcm92aWRlckluZGV4ZXM+PjIwO2lmKHZmKGMpfHwhYy5tdWx0aSl7Y29uc3QgRWU9'@;
put 'bmV3IFAxKFosaCxHZSksQmU9Z1UoRCxsLGg/bmU6bmUrYmUsY2UpOy0xPT09QmU/KGZkKEZ2KE0sdiksZixEKSxwVShmLGMsbC5sZW5ndGgpLGwucHVzaChEKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVz'@;
put 'aChFZSksdi5wdXNoKEVlKSk6KGFbQmVdPUVlLHZbQmVdPUVlKX1lbHNle2NvbnN0IEVlPWdVKEQsbCxuZStiZSxjZSksQmU9Z1UoRCxsLG5lLG5lK2JlKSxydD1CZT49MCYmYVtCZV07aWYoaCYmIXJ0fHwhaCYmIShFZT49MCYmYVtFZV0pKXtmZChGdihNLHYpLGYsRCk7Y29uc3QgcHQ9ZnVu'@;
put 'Y3Rpb24gWnZlKGMsbCxhLGQsaCl7Y29uc3QgZj1uZXcgUDEoYyxhLEdlKTtyZXR1cm4gZi5tdWx0aT1bXSxmLmluZGV4PWwsZi5jb21wb25lbnRQcm92aWRlcnM9MCxwaWUoZixoLGQmJiFhKSxmfShoP1V2ZTp6dmUsYS5sZW5ndGgsaCxkLFopOyFoJiZydCYmKGFbQmVdLnByb3ZpZGVyRmFj'@;
put 'dG9yeT1wdCkscFUoZixjLGwubGVuZ3RoLDApLGwucHVzaChEKSxNLmRpcmVjdGl2ZVN0YXJ0KyssTS5kaXJlY3RpdmVFbmQrKyxoJiYoTS5wcm92aWRlckluZGV4ZXMrPTEwNDg1NzYpLGEucHVzaChwdCksdi5wdXNoKHB0KX1lbHNlIHBVKGYsYyxFZT4tMT9FZTpCZSxwaWUoYVtoP0JlOkVl'@;
put 'XSxaLCFoJiZkKSk7IWgmJmQmJnJ0JiZhW0JlXS5jb21wb25lbnRQcm92aWRlcnMrK319fWZ1bmN0aW9uIHBVKGMsbCxhLGQpe2NvbnN0IGg9dmYobCksZj1mdW5jdGlvbiBPNihjKXtyZXR1cm4hIWMudXNlQ2xhc3N9KGwpO2lmKGh8fGYpe2NvbnN0IEQ9KGY/WWkobC51c2VDbGFzcyk6bCku'@;
put 'cHJvdG90eXBlLm5nT25EZXN0cm95O2lmKEQpe2NvbnN0IFo9Yy5kZXN0cm95SG9va3N8fChjLmRlc3Ryb3lIb29rcz1bXSk7aWYoIWgmJmwubXVsdGkpe2NvbnN0IG5lPVouaW5kZXhPZihhKTstMT09PW5lP1oucHVzaChhLFtkLERdKTpaW25lKzFdLnB1c2goZCxEKX1lbHNlIFoucHVzaChh'@;
put 'LEQpfX19ZnVuY3Rpb24gcGllKGMsbCxhKXtyZXR1cm4gYSYmYy5jb21wb25lbnRQcm92aWRlcnMrKyxjLm11bHRpLnB1c2gobCktMX1mdW5jdGlvbiBnVShjLGwsYSxkKXtmb3IobGV0IGg9YTtoPGQ7aCsrKWlmKGxbaF09PT1jKXJldHVybiBoO3JldHVybi0xfWZ1bmN0aW9uIHp2ZShjLGws'@;
put 'YSxkKXtyZXR1cm4gbVUodGhpcy5tdWx0aSxbXSl9ZnVuY3Rpb24gVXZlKGMsbCxhLGQpe2NvbnN0IGg9dGhpcy5tdWx0aTtsZXQgZjtpZih0aGlzLnByb3ZpZGVyRmFjdG9yeSl7Y29uc3Qgdj10aGlzLnByb3ZpZGVyRmFjdG9yeS5jb21wb25lbnRQcm92aWRlcnMsTT1ENChhLGFbS2ldLHRo'@;
put 'aXMucHJvdmlkZXJGYWN0b3J5LmluZGV4LGQpO2Y9TS5zbGljZSgwLHYpLG1VKGgsZik7Zm9yKGxldCBEPXY7RDxNLmxlbmd0aDtEKyspZi5wdXNoKE1bRF0pfWVsc2UgZj1bXSxtVShoLGYpO3JldHVybiBmfWZ1bmN0aW9uIG1VKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspbC5w'@;
put 'dXNoKCgwLGNbYV0pKCkpO3JldHVybiBsfWZ1bmN0aW9uIGZvKGMsbD1bXSl7cmV0dXJuIGE9PnthLnByb3ZpZGVyc1Jlc29sdmVyPShkLGgpPT5mdW5jdGlvbiBqdmUoYyxsLGEpe2NvbnN0IGQ9YXMoKTtpZihkLmZpcnN0Q3JlYXRlUGFzcyl7Y29uc3QgaD1OYyhjKTtmVShhLGQuZGF0YSxk'@;
put 'LmJsdWVwcmludCxoLCEwKSxmVShsLGQuZGF0YSxkLmJsdWVwcmludCxoLCExKX19KGQsaD9oKGMpOmMsbCl9fWxldCBXdmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuY2FjaGVkSW5qZWN0b3JzPW5ldyBNYXB9Z2V0T3JDcmVhdGVTdGFuZGFs'@;
put 'b25lSW5qZWN0b3IoYSl7aWYoIWEuc3RhbmRhbG9uZSlyZXR1cm4gbnVsbDtpZighdGhpcy5jYWNoZWRJbmplY3RvcnMuaGFzKGEpKXtjb25zdCBkPWloKDAsYS50eXBlKSxoPWQubGVuZ3RoPjA/RzQoW2RdLHRoaXMuX2luamVjdG9yLGBTdGFuZGFsb25lWyR7YS50eXBlLm5hbWV9XWApOm51'@;
put 'bGw7dGhpcy5jYWNoZWRJbmplY3RvcnMuc2V0KGEsaCl9cmV0dXJuIHRoaXMuY2FjaGVkSW5qZWN0b3JzLmdldChhKX1uZ09uRGVzdHJveSgpe3RyeXtmb3IoY29uc3QgYSBvZiB0aGlzLmNhY2hlZEluamVjdG9ycy52YWx1ZXMoKSludWxsIT09YSYmYS5kZXN0cm95KCl9ZmluYWxseXt0aGlz'@;
put 'LmNhY2hlZEluamVjdG9ycy5jbGVhcigpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLHByb3ZpZGVkSW46ImVudmlyb25tZW50IixmYWN0b3J5OigpPT5uZXcgYyh4cihoYykpfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiAkSShjKXtiMigiTmdTdGFuZGFsb25lIiksYy5n'@;
put 'ZXRTdGFuZGFsb25lSW5qZWN0b3I9bD0+bC5nZXQoV3ZlKS5nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihjKX1mdW5jdGlvbiBZcyhjLGwsYSl7Y29uc3QgZD1MMCgpK2MsaD1kaSgpO3JldHVybiBoW2RdPT09UmE/eTIoaCxkLGE/bC5jYWxsKGEpOmwoKSk6ZnVuY3Rpb24gQWMoYyxs'@;
put 'KXtyZXR1cm4gY1tsXX0oaCxkKX1mdW5jdGlvbiBzcChjLGwsYSxkKXtyZXR1cm4gbWllKGRpKCksTDAoKSxjLGwsYSxkKX1mdW5jdGlvbiBscChjLGwsYSxkLGgpe3JldHVybiB2aWUoZGkoKSxMMCgpLGMsbCxhLGQsaCl9ZnVuY3Rpb24gcE0oYyxsLGEsZCxoLGYpe3JldHVybiBiaWUoZGko'@;
put 'KSxMMCgpLGMsbCxhLGQsaCxmKX1mdW5jdGlvbiBxSShjLGwsYSxkLGgsZix2KXtyZXR1cm4gZnVuY3Rpb24geWllKGMsbCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWwrYTtyZXR1cm4geWQoYyxaLGgsZix2LE0pP3kyKGMsWis0LEQ/ZC5jYWxsKEQsaCxmLHYsTSk6ZChoLGYsdixNKSk6Z00o'@;
put 'YyxaKzQpfShkaSgpLEwwKCksYyxsLGEsZCxoLGYsdil9ZnVuY3Rpb24gZ00oYyxsKXtjb25zdCBhPWNbbF07cmV0dXJuIGE9PT1SYT92b2lkIDA6YX1mdW5jdGlvbiBtaWUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bCthO3JldHVybiBWYyhjLHYsaCk/eTIoYyx2KzEsZj9kLmNhbGwoZixoKTpk'@;
put 'KGgpKTpnTShjLHYrMSl9ZnVuY3Rpb24gdmllKGMsbCxhLGQsaCxmLHYpe2NvbnN0IE09bCthO3JldHVybiBycChjLE0saCxmKT95MihjLE0rMix2P2QuY2FsbCh2LGgsZik6ZChoLGYpKTpnTShjLE0rMil9ZnVuY3Rpb24gYmllKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1sK2E7cmV0dXJu'@;
put 'IE9iKGMsRCxoLGYsdik/eTIoYyxEKzMsTT9kLmNhbGwoTSxoLGYsdik6ZChoLGYsdikpOmdNKGMsRCszKX1mdW5jdGlvbiBRcyhjLGwpe2NvbnN0IGE9YXMoKTtsZXQgZDtjb25zdCBoPWMrd2E7YS5maXJzdENyZWF0ZVBhc3M/KGQ9ZnVuY3Rpb24gUXZlKGMsbCl7aWYobClmb3IobGV0IGE9'@;
put 'bC5sZW5ndGgtMTthPj0wO2EtLSl7Y29uc3QgZD1sW2FdO2lmKGM9PT1kLm5hbWUpcmV0dXJuIGR9fShsLGEucGlwZVJlZ2lzdHJ5KSxhLmRhdGFbaF09ZCxkLm9uRGVzdHJveSYmKGEuZGVzdHJveUhvb2tzPz89W10pLnB1c2goaCxkLm9uRGVzdHJveSkpOmQ9YS5kYXRhW2hdO2NvbnN0IGY9'@;
put 'ZC5mYWN0b3J5fHwoZC5mYWN0b3J5PWd1KGQudHlwZSkpLE09X2woR2UpO3RyeXtjb25zdCBEPU92KCExKSxaPWYoKTtyZXR1cm4gT3YoRCksZnVuY3Rpb24ga3ZlKGMsbCxhLGQpe2E+PWMuZGF0YS5sZW5ndGgmJihjLmRhdGFbYV09bnVsbCxjLmJsdWVwcmludFthXT1udWxsKSxsW2FdPWR9'@;
put 'KGEsZGkoKSxoLFopLFp9ZmluYWxseXtfbChNKX19ZnVuY3Rpb24gRGMoYyxsLGEpe2NvbnN0IGQ9Yyt3YSxoPWRpKCksZj1FNChoLGQpO3JldHVybiBtTShoLGQpP21pZShoLEwwKCksbCxmLnRyYW5zZm9ybSxhLGYpOmYudHJhbnNmb3JtKGEpfWZ1bmN0aW9uIGo4KGMsbCxhLGQpe2NvbnN0'@;
put 'IGg9Yyt3YSxmPWRpKCksdj1FNChmLGgpO3JldHVybiBtTShmLGgpP3ZpZShmLEwwKCksbCx2LnRyYW5zZm9ybSxhLGQsdik6di50cmFuc2Zvcm0oYSxkKX1mdW5jdGlvbiB2VShjLGwsYSxkLGgpe2NvbnN0IGY9Yyt3YSx2PWRpKCksTT1FNCh2LGYpO3JldHVybiBtTSh2LGYpP2JpZSh2LEww'@;
put 'KCksbCxNLnRyYW5zZm9ybSxhLGQsaCxNKTpNLnRyYW5zZm9ybShhLGQsaCl9ZnVuY3Rpb24gbU0oYyxsKXtyZXR1cm4gY1tLaV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIF91KGMsbCl7cmV0dXJuIGRiKGMsbCl9Y2xhc3MgYk17Y29uc3RydWN0b3IobCl7dGhpcy5mdWxsPWw7Y29uc3QgYT1s'@;
put 'LnNwbGl0KCIuIik7dGhpcy5tYWpvcj1hWzBdLHRoaXMubWlub3I9YVsxXSx0aGlzLnBhdGNoPWEuc2xpY2UoMikuam9pbigiLiIpfX1jb25zdCBGaWU9bmV3IGJNKCIxNy4zLjEyIik7bGV0IEhpZT0oKCk9PntjbGFzcyBje2xvZyhhKXtjb25zb2xlLmxvZyhhKX13YXJuKGEpe2NvbnNvbGUu'@;
put 'd2FybihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgemllPW5l'@;
put 'dyBTdCgiIiksUUk9bmV3IFN0KCIiKTtsZXQgeFUsU1U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5yZWdpc3RyeT1kLHRoaXMuX3BlbmRpbmdDb3VudD0wLHRoaXMuX2lzWm9uZVN0YWJsZT0hMCx0aGlzLl9jYWxsYmFja3M9W10sdGhpcy50'@;
put 'YXNrVHJhY2tpbmdab25lPW51bGwseFV8fChmdW5jdGlvbiAkYmUoYyl7eFU9Y30oaCksaC5hZGRUb1dpbmRvdyhkKSksdGhpcy5fd2F0Y2hBbmd1bGFyRXZlbnRzKCksYS5ydW4oKCk9Pnt0aGlzLnRhc2tUcmFja2luZ1pvbmU9dHlwZW9mIFpvbmU+InUiP251bGw6Wm9uZS5jdXJyZW50Lmdl'@;
put 'dCgiVGFza1RyYWNraW5nWm9uZSIpfSl9X3dhdGNoQW5ndWxhckV2ZW50cygpe3RoaXMuX25nWm9uZS5vblVuc3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e3RoaXMuX2lzWm9uZVN0YWJsZT0hMX19KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUu'@;
put 'b25TdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57WW8uYXNzZXJ0Tm90SW5Bbmd1bGFyWm9uZSgpLHF1ZXVlTWljcm90YXNrKCgpPT57dGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX0pfX0pfSl9aW5jcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7'@;
put 'cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudCs9MSx0aGlzLl9wZW5kaW5nQ291bnR9ZGVjcmVhc2VQZW5kaW5nUmVxdWVzdENvdW50KCl7aWYodGhpcy5fcGVuZGluZ0NvdW50LT0xLHRoaXMuX3BlbmRpbmdDb3VudDwwKXRocm93IG5ldyBFcnJvcigicGVuZGluZyBhc3luYyByZXF1ZXN0cyBi'@;
put 'ZWxvdyB6ZXJvIik7cmV0dXJuIHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKSx0aGlzLl9wZW5kaW5nQ291bnR9aXNTdGFibGUoKXtyZXR1cm4gdGhpcy5faXNab25lU3RhYmxlJiYwPT09dGhpcy5fcGVuZGluZ0NvdW50JiYhdGhpcy5fbmdab25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzfV9y'@;
put 'dW5DYWxsYmFja3NJZlJlYWR5KCl7aWYodGhpcy5pc1N0YWJsZSgpKXF1ZXVlTWljcm90YXNrKCgpPT57Zm9yKDswIT09dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDspe2xldCBhPXRoaXMuX2NhbGxiYWNrcy5wb3AoKTtjbGVhclRpbWVvdXQoYS50aW1lb3V0SWQpLGEuZG9uZUNiKCl9fSk7ZWxz'@;
put 'ZXtsZXQgYT10aGlzLmdldFBlbmRpbmdUYXNrcygpO3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKGQ9PiFkLnVwZGF0ZUNifHwhZC51cGRhdGVDYihhKXx8KGNsZWFyVGltZW91dChkLnRpbWVvdXRJZCksITEpKX19Z2V0UGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMu'@;
put 'dGFza1RyYWNraW5nWm9uZT90aGlzLnRhc2tUcmFja2luZ1pvbmUubWFjcm9UYXNrcy5tYXAoYT0+KHtzb3VyY2U6YS5zb3VyY2UsY3JlYXRpb25Mb2NhdGlvbjphLmNyZWF0aW9uTG9jYXRpb24sZGF0YTphLmRhdGF9KSk6W119YWRkQ2FsbGJhY2soYSxkLGgpe2xldCBmPS0xO2QmJmQ+MCYm'@;
put 'KGY9c2V0VGltZW91dCgoKT0+e3RoaXMuX2NhbGxiYWNrcz10aGlzLl9jYWxsYmFja3MuZmlsdGVyKHY9PnYudGltZW91dElkIT09ZiksYSgpfSxkKSksdGhpcy5fY2FsbGJhY2tzLnB1c2goe2RvbmVDYjphLHRpbWVvdXRJZDpmLHVwZGF0ZUNiOmh9KX13aGVuU3RhYmxlKGEsZCxoKXtpZiho'@;
put 'JiYhdGhpcy50YXNrVHJhY2tpbmdab25lKXRocm93IG5ldyBFcnJvcignVGFzayB0cmFja2luZyB6b25lIGlzIHJlcXVpcmVkIHdoZW4gcGFzc2luZyBhbiB1cGRhdGUgY2FsbGJhY2sgdG8gd2hlblN0YWJsZSgpLiBJcyAiem9uZS5qcy9wbHVnaW5zL3Rhc2stdHJhY2tpbmciIGxvYWRlZD8n'@;
put 'KTt0aGlzLmFkZENhbGxiYWNrKGEsZCxoKSx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9Z2V0UGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnR9cmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnJlZ2lzdGVyQXBwbGljYXRpb24oYSx0'@;
put 'aGlzKX11bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl7dGhpcy5yZWdpc3RyeS51bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl9ZmluZFByb3ZpZGVycyhhLGQsaCl7cmV0dXJuW119c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoWW8pLHhyKE1VKSx4'@;
put 'cihRSSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpLE1VPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hcHBsaWNhdGlvbnM9bmV3IE1hcH1yZWdpc3RlckFwcGxpY2F0aW9uKGEsZCl7dGhp'@;
put 'cy5fYXBwbGljYXRpb25zLnNldChhLGQpfXVucmVnaXN0ZXJBcHBsaWNhdGlvbihhKXt0aGlzLl9hcHBsaWNhdGlvbnMuZGVsZXRlKGEpfXVucmVnaXN0ZXJBbGxBcHBsaWNhdGlvbnMoKXt0aGlzLl9hcHBsaWNhdGlvbnMuY2xlYXIoKX1nZXRUZXN0YWJpbGl0eShhKXtyZXR1cm4gdGhpcy5f'@;
put 'YXBwbGljYXRpb25zLmdldChhKXx8bnVsbH1nZXRBbGxUZXN0YWJpbGl0aWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLnZhbHVlcygpKX1nZXRBbGxSb290RWxlbWVudHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMua2V5cygpKX1maW5k'@;
put 'VGVzdGFiaWxpdHlJblRyZWUoYSxkPSEwKXtyZXR1cm4geFU/LmZpbmRUZXN0YWJpbGl0eUluVHJlZSh0aGlzLGEsZCk/P251bGx9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFj'@;
put 'dG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIF9NKGMpe3JldHVybiEhYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudGhlbn1mdW5jdGlvbiBVaWUoYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9'@;
put 'Y29uc3QgRVU9bmV3IFN0KCIiKTtsZXQgVFU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25lPSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29sdmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJ'@;
put 'bml0cz1maShFVSx7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1bXTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgoKTtpZihfTShmKSlhLnB1c2goZik7ZWxzZSBpZihVaWUoZikpe2Nv'@;
put 'bnN0IHY9bmV3IFByb21pc2UoKE0sRCk9PntmLnN1YnNjcmliZSh7Y29tcGxldGU6TSxlcnJvcjpEfSl9KTthLnB1c2godil9fWNvbnN0IGQ9KCk9Pnt0aGlzLmRvbmU9ITAsdGhpcy5yZXNvbHZlKCl9O1Byb21pc2UuYWxsKGEpLnRoZW4oKCk9PntkKCl9KS5jYXRjaChoPT57dGhpcy5yZWpl'@;
put 'Y3QoaCl9KSwwPT09YS5sZW5ndGgmJmQoKSx0aGlzLmluaXRpYWxpemVkPSEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoi'@;
put 'cm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEFVPW5ldyBTdCgiIik7ZnVuY3Rpb24gWWllKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bC5yZWR1Y2UoWWllLGMpOnsuLi5jLC4uLmx9fWxldCBxND0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYm9vdHN0cmFwTGlz'@;
put 'dGVuZXJzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX3ZpZXdzPVtdLHRoaXMuaW50ZXJuYWxFcnJvckhhbmRsZXI9ZmkoZ2spLHRoaXMuYWZ0ZXJSZW5kZXJFZmZlY3RNYW5hZ2VyPWZpKHg4KSx0aGlz'@;
put 'LmV4dGVybmFsVGVzdFZpZXdzPW5ldyBTZXQsdGhpcy5iZWZvcmVSZW5kZXI9bmV3IFduLHRoaXMuYWZ0ZXJUaWNrPW5ldyBXbix0aGlzLmNvbXBvbmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLmlzU3RhYmxlPWZpKFJmKS5oYXNQZW5kaW5nVGFza3MucGlwZShMcihhPT4h'@;
put 'YSkpLHRoaXMuX2luamVjdG9yPWZpKGhjKX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1hIGluc3RhbmNlb2YgWEQ7aWYoIXRoaXMuX2luamVjdG9yLmdldChU'@;
put 'VSkuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBuMihjKXtjb25zdCBsPVZhKGMpfHx4YyhjKXx8UWMoYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5kYWxvbmV9KGEpLG5ldyBRbig0MDUsITEpO2xldCB2O3Y9aD9hOnRoaXMuX2luamVjdG9yLmdldChaNSkucmVzb2x2ZUNvbXBvbmVudEZhY3Rv'@;
put 'cnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHYuY29tcG9uZW50VHlwZSk7Y29uc3QgTT1mdW5jdGlvbiBLYmUoYyl7cmV0dXJuIGMuaXNCb3VuZFRvTW9kdWxlfSh2KT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KG5wKSxaPXYuY3JlYXRlKERzLk5VTEwsW10sZHx8di5zZWxlY3Rv'@;
put 'cixNKSxuZT1aLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsY2U9Wi5pbmplY3Rvci5nZXQoemllLG51bGwpO3JldHVybiBjZT8ucmVnaXN0ZXJBcHBsaWNhdGlvbihuZSksWi5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcoWi5ob3N0VmlldyksZVIodGhpcy5jb21wb25lbnRzLFopLGNl'@;
put 'Py51bnJlZ2lzdGVyQXBwbGljYXRpb24obmUpfSksdGhpcy5fbG9hZENvbXBvbmVudChaKSxafXRpY2soKXt0aGlzLl90aWNrKCEwKX1fdGljayhhKXtpZih0aGlzLl9ydW5uaW5nVGljayl0aHJvdyBuZXcgUW4oMTAxLCExKTtjb25zdCBkPV9lKG51bGwpO3RyeXt0aGlzLl9ydW5uaW5nVGlj'@;
put 'az0hMCx0aGlzLmRldGVjdENoYW5nZXNJbkF0dGFjaGVkVmlld3MoYSl9Y2F0Y2goaCl7dGhpcy5pbnRlcm5hbEVycm9ySGFuZGxlcihoKX1maW5hbGx5e3RoaXMuYWZ0ZXJUaWNrLm5leHQoKSx0aGlzLl9ydW5uaW5nVGljaz0hMSxfZShkKX19ZGV0ZWN0Q2hhbmdlc0luQXR0YWNoZWRWaWV3'@;
put 'cyhhKXtsZXQgZD0wO2NvbnN0IGg9dGhpcy5hZnRlclJlbmRlckVmZmVjdE1hbmFnZXI7Zm9yKDs7KXtpZihkPT09VkQpdGhyb3cgbmV3IFFuKDEwMywhMSk7aWYoYSl7Y29uc3QgZj0wPT09ZDt0aGlzLmJlZm9yZVJlbmRlci5uZXh0KGYpO2ZvcihsZXR7X2xWaWV3OnYsbm90aWZ5RXJyb3JI'@;
put 'YW5kbGVyOk19b2YgdGhpcy5fdmlld3MpWGJlKHYsZixNKX1pZihkKyssaC5leGVjdXRlSW50ZXJuYWxDYWxsYmFja3MoKSwhWy4uLnRoaXMuZXh0ZXJuYWxUZXN0Vmlld3Mua2V5cygpLC4uLnRoaXMuX3ZpZXdzXS5zb21lKCh7X2xWaWV3OmZ9KT0+a1UoZikpJiYoaC5leGVjdXRlKCksIVsu'@;
put 'Li50aGlzLmV4dGVybmFsVGVzdFZpZXdzLmtleXMoKSwuLi50aGlzLl92aWV3c10uc29tZSgoe19sVmlldzpmfSk9PmtVKGYpKSkpYnJlYWt9fWF0dGFjaFZpZXcoYSl7Y29uc3QgZD1hO3RoaXMuX3ZpZXdzLnB1c2goZCksZC5hdHRhY2hUb0FwcFJlZih0aGlzKX1kZXRhY2hWaWV3KGEpe2Nv'@;
put 'bnN0IGQ9YTtlUih0aGlzLl92aWV3cyxkKSxkLmRldGFjaEZyb21BcHBSZWYoKX1fbG9hZENvbXBvbmVudChhKXt0aGlzLmF0dGFjaFZpZXcoYS5ob3N0VmlldyksdGhpcy50aWNrKCksdGhpcy5jb21wb25lbnRzLnB1c2goYSk7Y29uc3QgZD10aGlzLl9pbmplY3Rvci5nZXQoQVUsW10pO1su'@;
put 'Li50aGlzLl9ib290c3RyYXBMaXN0ZW5lcnMsLi4uZF0uZm9yRWFjaChoPT5oKGEpKX1uZ09uRGVzdHJveSgpe2lmKCF0aGlzLl9kZXN0cm95ZWQpdHJ5e3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChhPT5hKCkpLHRoaXMuX3ZpZXdzLnNsaWNlKCkuZm9yRWFjaChhPT5hLmRlc3Ry'@;
put 'b3koKSl9ZmluYWxseXt0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fdmlld3M9W10sdGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W119fW9uRGVzdHJveShhKXtyZXR1cm4gdGhpcy5fZGVzdHJveUxpc3RlbmVycy5wdXNoKGEpLCgpPT5lUih0aGlz'@;
put 'Ll9kZXN0cm95TGlzdGVuZXJzLGEpfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDQwNiwhMSk7Y29uc3QgYT10aGlzLl9pbmplY3RvcjthLmRlc3Ryb3kmJiFhLmRlc3Ryb3llZCYmYS5kZXN0cm95KCl9Z2V0IHZpZXdDb3VudCgpe3JldHVybiB0aGlzLl92aWV3'@;
put 'cy5sZW5ndGh9d2FybklmRGVzdHJveWVkKCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9'@;
put 'KSgpO2Z1bmN0aW9uIGVSKGMsbCl7Y29uc3QgYT1jLmluZGV4T2YobCk7YT4tMSYmYy5zcGxpY2UoYSwxKX1mdW5jdGlvbiBYYmUoYyxsLGEpeyFsJiYha1UoYyl8fGZ1bmN0aW9uIEpiZShjLGwsYSl7bGV0IGQ7YT8oZD0wLGNbWm9dfD0xMDI0KTpkPTY0JmNbWm9dPzA6MSx1YihjLGwsZCl9'@;
put 'KGMsYSxsKX1mdW5jdGlvbiBrVShjKXtyZXR1cm4geHYoYyl9Y2xhc3MgUWJle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5uZ01vZHVsZUZhY3Rvcnk9bCx0aGlzLmNvbXBvbmVudEZhY3Rvcmllcz1hfX1sZXQgR2llPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJuIG5l'@;
put 'dyBJYihhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9RjEoTHUoYSkuZGVj'@;
put 'bGFyYXRpb25zKS5yZWR1Y2UoKHYsTSk9Pntjb25zdCBEPVZhKE0pO3JldHVybiBEJiZ2LnB1c2gobmV3IEE4KEQpKSx2fSxbXSk7cmV0dXJuIG5ldyBRYmUoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb21w'@;
put 'aWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxlSWQoYSl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLG55ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy56b25lPWZpKFlvKSx0aGlzLmFwcGxpY2F0aW9uUmVmPWZpKHE0KX1pbml0aWFsaXplKCl7dGhpcy5fb25NaWNyb3Rhc2tF'@;
put 'bXB0eVN1YnNjcmlwdGlvbnx8KHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy56b25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy56b25lLnJ1bigoKT0+e3RoaXMuYXBwbGljYXRpb25SZWYudGljaygpfSl9fSkpfW5nT25EZXN0cm95'@;
put 'KCl7dGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3Zp'@;
put 'ZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiByeWUoKXtjb25zdCBjPWZpKFlvKSxsPWZpKGcyKTtyZXR1cm4gYT0+Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bC5oYW5kbGVFcnJvcihhKSl9bGV0IG95ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb249bmV3IHF0LHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy56b25lPWZpKFlvKSx0aGlzLnBlbmRpbmdUYXNrcz1maShSZil9aW5pdGlhbGl6ZSgpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuaW5pdGlhbGl6ZWQ9ITA7bGV0IGE9bnVsbDshdGhpcy56b25lLmlzU3Rh'@;
put 'YmxlJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYoYT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKSksdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuem9uZS5v'@;
put 'blN0YWJsZS5zdWJzY3JpYmUoKCk9PntZby5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9PntudWxsIT09YSYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyYmKHRoaXMucGVuZGluZ1Rhc2tz'@;
put 'LnJlbW92ZShhKSxhPW51bGwpfSl9KSl9KSx0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKCgpPT57WW8uYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLGE/Pz10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2Ny'@;
put 'aXB0aW9uLnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29u'@;
put 'c3QgSGY9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5maShIZixpby5PcHRpb25hbHxpby5Ta2lwU2VsZil8fGZ1bmN0aW9uIGF5ZSgpe3JldHVybiB0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxvY2FsaXplLmxvY2FsZXx8emJ9KCl9KSxEVT1uZXcgU3QoIiIpO2xl'@;
put 'dCBYaWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9pbmplY3Rvcj1hLHRoaXMuX21vZHVsZXM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXSx0aGlzLl9kZXN0cm95ZWQ9ITF9Ym9vdHN0cmFwTW9kdWxlRmFjdG9yeShhLGQpe2NvbnN0IGg9ZnVuY3Rpb24gbkkoYz0i'@;
put 'em9uZS5qcyIsbCl7cmV0dXJuIm5vb3AiPT09Yz9uZXcgdEk6InpvbmUuanMiPT09Yz9uZXcgWW8obCk6Y30oZD8ubmdab25lLGZ1bmN0aW9uIHFpZShjKXtyZXR1cm57ZW5hYmxlTG9uZ1N0YWNrVHJhY2U6ITEsc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbjpjPy5ldmVudENv'@;
put 'YWxlc2Npbmc/PyExLHNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uOmM/LnJ1bkNvYWxlc2Npbmc/PyExfX0oe2V2ZW50Q29hbGVzY2luZzpkPy5uZ1pvbmVFdmVudENvYWxlc2NpbmcscnVuQ29hbGVzY2luZzpkPy5uZ1pvbmVSdW5Db2FsZXNjaW5nfSkpO3JldHVybiBoLnJ1bigo'@;
put 'KT0+e2NvbnN0IGY9ZnVuY3Rpb24gT0koYyxsLGEpe3JldHVybiBuZXcgRGIoYyxsLGEpfShhLm1vZHVsZVR5cGUsdGhpcy5pbmplY3RvcixmdW5jdGlvbiBLaWUoYyl7cmV0dXJuW3twcm92aWRlOllvLHVzZUZhY3Rvcnk6Y30se3Byb3ZpZGU6dDIsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+'@;
put 'e2NvbnN0IGw9ZmkobnllLHtvcHRpb25hbDohMH0pO3JldHVybigpPT5sLmluaXRpYWxpemUoKX19LHtwcm92aWRlOnQyLG11bHRpOiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPWZpKG95ZSk7cmV0dXJuKCk9PntsLmluaXRpYWxpemUoKX19fSx7cHJvdmlkZTpnayx1c2VGYWN0b3J5OnJ5'@;
put 'ZX1dfSgoKT0+aCkpLHY9Zi5pbmplY3Rvci5nZXQoZzIsbnVsbCk7cmV0dXJuIGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCBNPWgub25FcnJvci5zdWJzY3JpYmUoe25leHQ6RD0+e3YuaGFuZGxlRXJyb3IoRCl9fSk7Zi5vbkRlc3Ryb3koKCk9PntlUih0aGlzLl9tb2R1bGVzLGYp'@;
put 'LE0udW5zdWJzY3JpYmUoKX0pfSksZnVuY3Rpb24gV2llKGMsbCxhKXt0cnl7Y29uc3QgZD1hKCk7cmV0dXJuIF9NKGQpP2QuY2F0Y2goaD0+e3Rocm93IGwucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoaCkpLGh9KTpkfWNhdGNoKGQpe3Rocm93IGwucnVuT3V0c2lkZUFu'@;
put 'Z3VsYXIoKCk9PmMuaGFuZGxlRXJyb3IoZCkpLGR9fSh2LGgsKCk9Pntjb25zdCBNPWYuaW5qZWN0b3IuZ2V0KFRVKTtyZXR1cm4gTS5ydW5Jbml0aWFsaXplcnMoKSxNLmRvbmVQcm9taXNlLnRoZW4oKCk9PihmdW5jdGlvbiBicmUoYyl7InN0cmluZyI9PXR5cGVvZiBjJiYodnJlPWMudG9M'@;
put 'b3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSl9KGYuaW5qZWN0b3IuZ2V0KEhmLHpiKXx8emIpLHRoaXMuX21vZHVsZURvQm9vdHN0cmFwKGYpLGYpKX0pfSl9Ym9vdHN0cmFwTW9kdWxlKGEsZD1bXSl7Y29uc3QgaD1ZaWUoe30sZCk7cmV0dXJuIGZ1bmN0aW9uIHR5ZShjLGwsYSl7Y29u'@;
put 'c3QgZD1uZXcgSWIoYSk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShkKX0oMCwwLGEpLnRoZW4oZj0+dGhpcy5ib290c3RyYXBNb2R1bGVGYWN0b3J5KGYsaCkpfV9tb2R1bGVEb0Jvb3RzdHJhcChhKXtjb25zdCBkPWEuaW5qZWN0b3IuZ2V0KHE0KTtpZihhLl9ib290c3RyYXBDb21wb25lbnRz'@;
put 'Lmxlbmd0aD4wKWEuX2Jvb3RzdHJhcENvbXBvbmVudHMuZm9yRWFjaChoPT5kLmJvb3RzdHJhcChoKSk7ZWxzZXtpZighYS5pbnN0YW5jZS5uZ0RvQm9vdHN0cmFwKXRocm93IG5ldyBRbigtNDAzLCExKTthLmluc3RhbmNlLm5nRG9Cb290c3RyYXAoZCl9dGhpcy5fbW9kdWxlcy5wdXNoKGEp'@;
put 'fW9uRGVzdHJveShhKXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goYSl9Z2V0IGluamVjdG9yKCl7cmV0dXJuIHRoaXMuX2luamVjdG9yfWRlc3Ryb3koKXtpZih0aGlzLl9kZXN0cm95ZWQpdGhyb3cgbmV3IFFuKDQwNCwhMSk7dGhpcy5fbW9kdWxlcy5zbGljZSgpLmZvckVhY2goZD0+'@;
put 'ZC5kZXN0cm95KCkpLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMuZm9yRWFjaChkPT5kKCkpO2NvbnN0IGE9dGhpcy5faW5qZWN0b3IuZ2V0KERVLG51bGwpO2EmJihhLmZvckVhY2goZD0+ZCgpKSxhLmNsZWFyKCkpLHRoaXMuX2Rlc3Ryb3llZD0hMH1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRo'@;
put 'aXMuX2Rlc3Ryb3llZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihEcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9fXJldHVybiBjfSko'@;
put 'KSxKNT1udWxsO2NvbnN0IEppZT1uZXcgU3QoIiIpO2Z1bmN0aW9uIFFpZShjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06ICR7bH1gLGg9bmV3IFN0KGQpO3JldHVybihmPVtdKT0+e2xldCB2PUlVKCk7aWYoIXZ8fHYuaW5qZWN0b3IuZ2V0KEppZSwhMSkpe2NvbnN0IE09Wy4uLmEsLi4u'@;
put 'Zix7cHJvdmlkZTpoLHVzZVZhbHVlOiEwfV07Yz9jKE0pOmZ1bmN0aW9uIGN5ZShjKXtpZihKNSYmIUo1LmdldChKaWUsITEpKXRocm93IG5ldyBRbig0MDAsITEpOyhmdW5jdGlvbiBaaWUoKXshZnVuY3Rpb24gUmUoYyl7RGU9Y30oKCk9Pnt0aHJvdyBuZXcgUW4oNjAwLCExKX0pfSkoKSxK'@;
put 'NT1jO2NvbnN0IGw9Yy5nZXQoWGllKTsoZnVuY3Rpb24gdG9lKGMpe2MuZ2V0KExrLG51bGwpPy5mb3JFYWNoKGE9PmEoKSl9KShjKX0oZnVuY3Rpb24gZW9lKGM9W10sbCl7cmV0dXJuIERzLmNyZWF0ZSh7bmFtZTpsLHByb3ZpZGVyczpbe3Byb3ZpZGU6UDYsdXNlVmFsdWU6InBsYXRmb3Jt'@;
put 'In0se3Byb3ZpZGU6RFUsdXNlVmFsdWU6bmV3IFNldChbKCk9Pko1PW51bGxdKX0sLi4uY119KX0oTSxkKSl9cmV0dXJuIGZ1bmN0aW9uIHV5ZShjKXtjb25zdCBsPUlVKCk7aWYoIWwpdGhyb3cgbmV3IFFuKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIElVKCl7cmV0dXJuIEo1Py5n'@;
put 'ZXQoWGllKT8/bnVsbH1sZXQgeHM9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz1oeWV9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBoeWUoYyl7cmV0dXJuIGZ1bmN0aW9uIGZ5ZShjLGwsYSl7aWYoU2YoYykmJiFhKXtjb25zdCBkPU8xKGMuaW5kZXgsbCk7cmV0'@;
put 'dXJuIG5ldyB5OChkLGQpfXJldHVybiA0NyZjLnR5cGU/bmV3IHk4KGxbVWxdLGwpOm51bGx9KHVsKCksZGkoKSwhKDE2Jn5jKSl9Y2xhc3MgYW9le2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBSYihsKX1jcmVhdGUobCl7cmV0dXJuIG5ldyBieWUobCl9fWNvbnN0IHZ5ZT0o'@;
put 'YyxsKT0+bDtjbGFzcyBieWV7Y29uc3RydWN0b3IobCl7dGhpcy5sZW5ndGg9MCx0aGlzLl9saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fdW5saW5rZWRSZWNvcmRzPW51bGwsdGhpcy5fcHJldmlvdXNJdEhlYWQ9bnVsbCx0aGlzLl9pdEhlYWQ9bnVsbCx0aGlzLl9pdFRhaWw9bnVsbCx0aGlz'@;
put 'Ll9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX21vdmVzSGVhZD1udWxsLHRoaXMuX21vdmVzVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bnVs'@;
put 'bCx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGwsdGhpcy5fdHJhY2tCeUZuPWx8fHZ5ZX1mb3JFYWNoSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9pdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0KWwoYSl9Zm9yRWFjaE9wZXJhdGlvbihsKXtsZXQgYT10aGlzLl9pdEhlYWQsZD10aGlz'@;
put 'Ll9yZW1vdmFsc0hlYWQsaD0wLGY9bnVsbDtmb3IoO2F8fGQ7KXtjb25zdCB2PSFkfHxhJiZhLmN1cnJlbnRJbmRleDxsb2UoZCxoLGYpP2E6ZCxNPWxvZSh2LGgsZiksRD12LmN1cnJlbnRJbmRleDtpZih2PT09ZCloLS0sZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGE9YS5fbmV4dCxudWxs'@;
put 'PT12LnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IFo9TS1oLG5lPUQtaDtpZihaIT1uZSl7Zm9yKGxldCBiZT0wO2JlPFo7YmUrKyl7Y29uc3QgRWU9YmU8Zi5sZW5ndGg/ZltiZV06ZltiZV09MCxCZT1FZStiZTtuZTw9QmUmJkJlPFomJihmW2JlXT1FZSsxKX1mW3Yu'@;
put 'cHJldmlvdXNJbmRleF09bmUtWn19TSE9PUQmJmwodixNLEQpfX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzSXRIZWFkO251bGwhPT1hO2E9YS5fbmV4dFByZXZpb3VzKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9h'@;
put 'ZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaE1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0TW92ZWQpbChhKX1mb3JFYWNoUmVtb3ZlZEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcmVtb3Zh'@;
put 'bHNIZWFkO251bGwhPT1hO2E9YS5fbmV4dFJlbW92ZWQpbChhKX1mb3JFYWNoSWRlbnRpdHlDaGFuZ2UobCl7bGV0IGE7Zm9yKGE9dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRJZGVudGl0eUNoYW5nZSlsKGEpfWRpZmYobCl7aWYobnVsbD09bCYmKGw9W10p'@;
put 'LCFSYihsKSl0aHJvdyBuZXcgUW4oOTAwLCExKTtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGgsZix2LGE9dGhpcy5faXRIZWFkLGQ9ITE7aWYoQXJyYXkuaXNBcnJheShsKSl7dGhpcy5sZW5ndGg9bC5sZW5n'@;
put 'dGg7Zm9yKGxldCBNPTA7TTx0aGlzLmxlbmd0aDtNKyspZj1sW01dLHY9dGhpcy5fdHJhY2tCeUZuKE0sZiksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCx2KT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxmLHYsTSkpLE9iamVjdC5pcyhhLml0ZW0sZil8fHRoaXMu'@;
put 'X2FkZElkZW50aXR5Q2hhbmdlKGEsZikpOihhPXRoaXMuX21pc21hdGNoKGEsZix2LE0pLGQ9ITApLGE9YS5fbmV4dH1lbHNlIGg9MCxmdW5jdGlvbiBKeihjLGwpe2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspbChjW2FdKTtlbHNle2NvbnN0IGE9Y1tT'@;
put 'eW1ib2wuaXRlcmF0b3JdKCk7bGV0IGQ7Zm9yKDshKGQ9YS5uZXh0KCkpLmRvbmU7KWwoZC52YWx1ZSl9fShsLE09Pnt2PXRoaXMuX3RyYWNrQnlGbihoLE0pLG51bGwhPT1hJiZPYmplY3QuaXMoYS50cmFja0J5SWQsdik/KGQmJihhPXRoaXMuX3ZlcmlmeVJlaW5zZXJ0aW9uKGEsTSx2LGgp'@;
put 'KSxPYmplY3QuaXMoYS5pdGVtLE0pfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShhLE0pKTooYT10aGlzLl9taXNtYXRjaChhLE0sdixoKSxkPSEwKSxhPWEuX25leHQsaCsrfSksdGhpcy5sZW5ndGg9aDtyZXR1cm4gdGhpcy5fdHJ1bmNhdGUoYSksdGhpcy5jb2xsZWN0aW9uPWwsdGhpcy5p'@;
put 'c0RpcnR5fWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fbW92ZXNIZWFkfHxudWxsIT09dGhpcy5fcmVtb3ZhbHNIZWFkfHxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkp'@;
put 'e2xldCBsO2ZvcihsPXRoaXMuX3ByZXZpb3VzSXRIZWFkPXRoaXMuX2l0SGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT09bDtsPWwuX25leHRBZGRlZClsLnByZXZpb3VzSW5kZXg9bC5jdXJyZW50'@;
put 'SW5kZXg7Zm9yKHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLGw9dGhpcy5fbW92ZXNIZWFkO251bGwhPT1sO2w9bC5fbmV4dE1vdmVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRleDt0aGlzLl9tb3Zlc0hlYWQ9dGhpcy5fbW92ZXNUYWlsPW51bGws'@;
put 'dGhpcy5fcmVtb3ZhbHNIZWFkPXRoaXMuX3JlbW92YWxzVGFpbD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbD1udWxsfX1fbWlzbWF0Y2gobCxhLGQsaCl7bGV0IGY7cmV0dXJuIG51bGw9PT1sP2Y9dGhpcy5faXRUYWlsOihmPWwuX3By'@;
put 'ZXYsdGhpcy5fcmVtb3ZlKGwpKSxudWxsIT09KGw9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoZCxudWxsKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fcmVpbnNlcnRB'@;
put 'ZnRlcihsLGYsaCkpOm51bGwhPT0obD1udWxsPT09dGhpcy5fbGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX2xpbmtlZFJlY29yZHMuZ2V0KGQsaCkpPyhPYmplY3QuaXMobC5pdGVtLGEpfHx0aGlzLl9hZGRJZGVudGl0eUNoYW5nZShsLGEpLHRoaXMuX21vdmVBZnRlcihsLGYsaCkpOmw9dGhp'@;
put 'cy5fYWRkQWZ0ZXIobmV3IHl5ZShhLGQpLGYsaCksbH1fdmVyaWZ5UmVpbnNlcnRpb24obCxhLGQsaCl7bGV0IGY9bnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3Jkcz9udWxsOnRoaXMuX3VubGlua2VkUmVjb3Jkcy5nZXQoZCxudWxsKTtyZXR1cm4gbnVsbCE9PWY/bD10aGlzLl9yZWluc2Vy'@;
put 'dEFmdGVyKGYsbC5fcHJldixoKTpsLmN1cnJlbnRJbmRleCE9aCYmKGwuY3VycmVudEluZGV4PWgsdGhpcy5fYWRkVG9Nb3ZlcyhsLGgpKSxsfV90cnVuY2F0ZShsKXtmb3IoO251bGwhPT1sOyl7Y29uc3QgYT1sLl9uZXh0O3RoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKGwpKSxs'@;
put 'PWF9bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLmNsZWFyKCksbnVsbCE9PXRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksbnVsbCE9PXRoaXMuX21vdmVzVGFpbCYmKHRoaXMuX21vdmVz'@;
put 'VGFpbC5fbmV4dE1vdmVkPW51bGwpLG51bGwhPT10aGlzLl9pdFRhaWwmJih0aGlzLl9pdFRhaWwuX25leHQ9bnVsbCksbnVsbCE9PXRoaXMuX3JlbW92YWxzVGFpbCYmKHRoaXMuX3JlbW92YWxzVGFpbC5fbmV4dFJlbW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1Rh'@;
put 'aWwmJih0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbCl9X3JlaW5zZXJ0QWZ0ZXIobCxhLGQpe251bGwhPT10aGlzLl91bmxpbmtlZFJlY29yZHMmJnRoaXMuX3VubGlua2VkUmVjb3Jkcy5yZW1vdmUobCk7Y29uc3QgaD1sLl9wcmV2UmVtb3ZlZCxm'@;
put 'PWwuX25leHRSZW1vdmVkO3JldHVybiBudWxsPT09aD90aGlzLl9yZW1vdmFsc0hlYWQ9ZjpoLl9uZXh0UmVtb3ZlZD1mLG51bGw9PT1mP3RoaXMuX3JlbW92YWxzVGFpbD1oOmYuX3ByZXZSZW1vdmVkPWgsdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZFRvTW92ZXMobCxkKSxs'@;
put 'fV9tb3ZlQWZ0ZXIobCxhLGQpe3JldHVybiB0aGlzLl91bmxpbmsobCksdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZFRvTW92ZXMobCxkKSxsfV9hZGRBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX2luc2VydEFmdGVyKGwsYSxkKSx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGw9'@;
put 'PT10aGlzLl9hZGRpdGlvbnNUYWlsP3RoaXMuX2FkZGl0aW9uc0hlYWQ9bDp0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bCxsfV9pbnNlcnRBZnRlcihsLGEsZCl7Y29uc3QgaD1udWxsPT09YT90aGlzLl9pdEhlYWQ6YS5fbmV4dDtyZXR1cm4gbC5fbmV4dD1oLGwuX3ByZXY9YSxu'@;
put 'dWxsPT09aD90aGlzLl9pdFRhaWw9bDpoLl9wcmV2PWwsbnVsbD09PWE/dGhpcy5faXRIZWFkPWw6YS5fbmV4dD1sLG51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzJiYodGhpcy5fbGlua2VkUmVjb3Jkcz1uZXcgc29lKSx0aGlzLl9saW5rZWRSZWNvcmRzLnB1dChsKSxsLmN1cnJlbnRJbmRl'@;
put 'eD1kLGx9X3JlbW92ZShsKXtyZXR1cm4gdGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpfV91bmxpbmsobCl7bnVsbCE9PXRoaXMuX2xpbmtlZFJlY29yZHMmJnRoaXMuX2xpbmtlZFJlY29yZHMucmVtb3ZlKGwpO2NvbnN0IGE9bC5fcHJldixkPWwuX25leHQ7cmV0dXJuIG51'@;
put 'bGw9PT1hP3RoaXMuX2l0SGVhZD1kOmEuX25leHQ9ZCxudWxsPT09ZD90aGlzLl9pdFRhaWw9YTpkLl9wcmV2PWEsbH1fYWRkVG9Nb3ZlcyhsLGEpe3JldHVybiBsLnByZXZpb3VzSW5kZXg9PT1hfHwodGhpcy5fbW92ZXNUYWlsPW51bGw9PT10aGlzLl9tb3Zlc1RhaWw/dGhpcy5fbW92ZXNI'@;
put 'ZWFkPWw6dGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bCksbH1fYWRkVG9SZW1vdmFscyhsKXtyZXR1cm4gbnVsbD09PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmKHRoaXMuX3VubGlua2VkUmVjb3Jkcz1uZXcgc29lKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudElu'@;
put 'ZGV4PW51bGwsbC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNIZWFkPWwsbC5fcHJldlJlbW92ZWQ9bnVsbCk6KGwuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFs'@;
put 'c1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1sKSxsfV9hZGRJZGVudGl0eUNoYW5nZShsLGEpe3JldHVybiBsLml0ZW09YSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hl'@;
put 'YWQ9bDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bCxsfX1jbGFzcyB5eWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNrQnlJZD1hLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5f'@;
put 'bmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0'@;
put 'TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3MgX3lle2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1udWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQobCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD1sLGwuX25leHREdXA9bnVsbCxs'@;
put 'Ll9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPWwsbC5fcHJldkR1cD10aGlzLl90YWlsLGwuX25leHREdXA9bnVsbCx0aGlzLl90YWlsPWwpfWdldChsLGEpe2xldCBkO2ZvcihkPXRoaXMuX2hlYWQ7bnVsbCE9PWQ7ZD1kLl9uZXh0RHVwKWlmKChudWxsPT09YXx8YTw9ZC5j'@;
put 'dXJyZW50SW5kZXgpJiZPYmplY3QuaXMoZC50cmFja0J5SWQsbCkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC5fcHJldkR1cCxkPWwuX25leHREdXA7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2hlYWQ9ZDphLl9uZXh0RHVwPWQsbnVsbD09PWQ/dGhpcy5fdGFpbD1h'@;
put 'OmQuX3ByZXZEdXA9YSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3Mgc29le2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1wdXQobCl7Y29uc3QgYT1sLnRyYWNrQnlJZDtsZXQgZD10aGlzLm1hcC5nZXQoYSk7ZHx8KGQ9bmV3IF95ZSx0aGlzLm1hcC5zZXQoYSxkKSksZC5hZGQobCl9'@;
put 'Z2V0KGwsYSl7Y29uc3QgaD10aGlzLm1hcC5nZXQobCk7cmV0dXJuIGg/aC5nZXQobCxhKTpudWxsfXJlbW92ZShsKXtjb25zdCBhPWwudHJhY2tCeUlkO3JldHVybiB0aGlzLm1hcC5nZXQoYSkucmVtb3ZlKGwpJiZ0aGlzLm1hcC5kZWxldGUoYSksbH1nZXQgaXNFbXB0eSgpe3JldHVybiAw'@;
put 'PT09dGhpcy5tYXAuc2l6ZX1jbGVhcigpe3RoaXMubWFwLmNsZWFyKCl9fWZ1bmN0aW9uIGxvZShjLGwsYSl7Y29uc3QgZD1jLnByZXZpb3VzSW5kZXg7aWYobnVsbD09PWQpcmV0dXJuIGQ7bGV0IGg9MDtyZXR1cm4gYSYmZDxhLmxlbmd0aCYmKGg9YVtkXSksZCtsK2h9Y2xhc3MgY29le2Nv'@;
put 'bnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxKUyhsKX1jcmVhdGUoKXtyZXR1cm4gbmV3IHd5ZX19Y2xhc3Mgd3lle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1u'@;
put 'dWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlzLl9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxz'@;
put 'VGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fbWFwSGVhZDtudWxsIT09YTthPWEu'@;
put 'X25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEuX25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09YTthPWEu'@;
put 'X25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEu'@;
put 'X25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8fEpTKGwpKSl0aHJvdyBuZXcgUW4oOTAwLCExKX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7'@;
put 'bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVuZEFmdGVyPWEsYT1hLl9uZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9n'@;
put 'ZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5fcHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0IGQ9YTtudWxsIT09ZDtkPWQuX25leHRSZW1vdmVkKWQ9PT10aGlz'@;
put 'Ll9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShkLmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFsdWU9bnVsbCxkLl9wcmV2PW51bGwsZC5fbmV4dD1udWxsfXJldHVy'@;
put 'biB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQobCxhKXtpZihsKXtj'@;
put 'b25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQmJihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRB'@;
put 'ZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jkcy5oYXMobCkpe2NvbnN0IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7'@;
put 'dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsdj1oLl9uZXh0O3JldHVybiBmJiYoZi5fbmV4dD12KSx2JiYodi5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3QgZD1uZXcgQ3llKGwpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChs'@;
put 'LGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zvcih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5f'@;
put 'bmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNWYWx1'@;
put 'ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXMobCxhKXtPYmplY3QuaXMoYSxs'@;
put 'LmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJyZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5nZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0'@;
put 'aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRkaXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2VzKGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFp'@;
put 'bC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wgaW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEpOk9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3MgQ3lle2NvbnN0cnVjdG9yKGwpe3RoaXMua2V5PWwsdGhpcy5wcmV2'@;
put 'aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19ZnVu'@;
put 'Y3Rpb24gdW9lKCl7cmV0dXJuIG5ldyBRNShbbmV3IGFvZV0pfWxldCBRNT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTp1b2V9KX1jb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBj'@;
put 'cmVhdGUoYSxkKXtpZihudWxsIT1kKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6ZD0+Yy5jcmVhdGUoYSxkfHx1b2UoKSksZGVwczpbW2MsbmV3IGNk'@;
put 'LG5ldyBJMV1dfX1maW5kKGEpe2NvbnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZChoPT5oLnN1cHBvcnRzKGEpKTtpZihudWxsIT1kKXJldHVybiBkO3Rocm93IG5ldyBRbig5MDEsITEpfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZG9lKCl7cmV0dXJuIG5ldyB3TShbbmV3IGNvZV0pfWxldCB3'@;
put 'TT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpkb2V9KX1jb25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihkKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNl'@;
put 'KCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6ZD0+Yy5jcmVhdGUoYSxkfHxkb2UoKSksZGVwczpbW2MsbmV3IGNkLG5ldyBJMV1dfX1maW5kKGEpe2NvbnN0IGQ9dGhpcy5mYWN0b3JpZXMuZmluZCho'@;
put 'PT5oLnN1cHBvcnRzKGEpKTtpZihkKXJldHVybiBkO3Rocm93IG5ldyBRbig5MDEsITEpfX1yZXR1cm4gY30pKCk7Y29uc3QgeHllPVFpZShudWxsLCJjb3JlIixbXSk7bGV0IEV5ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'ZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihxNCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBzMShjKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBjP2M6bnVsbCE9YyYmImZhbHNl'@;
put 'IiE9PWN9ZnVuY3Rpb24gTG9lKGMpe2NvbnN0IGw9X2UobnVsbCk7dHJ5e3JldHVybiBjKCl9ZmluYWxseXtfZShsKX19bGV0IFBvZT1udWxsO2Z1bmN0aW9uIGVtKCl7cmV0dXJuIFBvZX1jbGFzcyBjX2V7fWNvbnN0IHZzPW5ldyBTdCgiIik7bGV0IE5VPSgoKT0+e2NsYXNzIGN7aGlzdG9y'@;
put 'eUdvKGEpe3Rocm93IG5ldyBFcnJvcigiIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkoZF9lKSxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJu'@;
put 'IGN9KSgpO2NvbnN0IHVfZT1uZXcgU3QoIiIpO2xldCBkX2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE5Ve2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLl9kb2M9ZmkodnMpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlzLl9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJh'@;
put 'c2VIcmVmRnJvbURPTSgpe3JldHVybiBlbSgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0ZShhKXtjb25zdCBkPWVtKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9'@;
put 'PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBkPWVtKCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVF'@;
put 'dmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBv'@;
put 'cnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0'@;
put 'aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGEsZCxoKX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxoKX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3'@;
put 'YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3RvcnkuZ28oYSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OigpPT5uZXcgYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFZVKGMsbCl7aWYoMD09Yy5sZW5ndGgpcmV0dXJuIGw7aWYoMD09bC5sZW5ndGgpcmV0dXJuIGM7bGV0IGE9MDtyZXR1cm4g'@;
put 'Yy5lbmRzV2l0aCgiLyIpJiZhKyssbC5zdGFydHNXaXRoKCIvIikmJmErKywyPT1hP2MrbC5zdWJzdHJpbmcoMSk6MT09YT9jK2w6YysiLyIrbH1mdW5jdGlvbiBGb2UoYyl7Y29uc3QgbD1jLm1hdGNoKC8jfFw/fCQvKSxhPWwmJmwuaW5kZXh8fGMubGVuZ3RoO3JldHVybiBjLnNsaWNlKDAs'@;
put 'YS0oIi8iPT09Y1thLTFdPzE6MCkpK2Muc2xpY2UoYSl9ZnVuY3Rpb24gWDQoYyl7cmV0dXJuIGMmJiI/IiE9PWNbMF0/Ij8iK2M6Y31sZXQgVTg9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9yKCIiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7'@;
put 'cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OigpPT5maShOb2UpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBIb2U9bmV3IFN0KCIiKTtsZXQgTm9lPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBVOHtjb25z'@;
put 'dHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLHRoaXMuX2Jhc2VIcmVmPWQ/P3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0QmFzZUhyZWZGcm9tRE9NKCk/P2ZpKHZzKS5sb2NhdGlvbj8ub3JpZ2luPz8iIn1u'@;
put 'Z09uRGVzdHJveSgpe2Zvcig7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhp'@;
put 'cy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhhc2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gVlUodGhpcy5fYmFzZUhyZWYsYSl9cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24u'@;
put 'cGF0aG5hbWUrWDQodGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5zZWFyY2gpLGg9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oYXNoO3JldHVybiBoJiZhP2Ake2R9JHtofWA6ZH1wdXNoU3RhdGUoYSxkLGgsZil7Y29uc3Qgdj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoK1g0KGYpKTt0aGlzLl9w'@;
put 'bGF0Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsdil9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2NvbnN0IHY9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCtYNChmKSk7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxkLHYpfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxv'@;
put 'Y2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoTlUpLHhyKEhvZSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksaF9lPSgoKT0+e2Ns'@;
put 'YXNzIGMgZXh0ZW5kcyBVOHtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKCksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbj1hLHRoaXMuX2Jhc2VIcmVmPSIiLHRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zPVtdLG51bGwhPWQmJih0aGlzLl9iYXNlSHJlZj1kKX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy5f'@;
put 'cmVtb3ZlTGlzdGVuZXJGbnMubGVuZ3RoOyl0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wb3AoKSgpfW9uUG9wU3RhdGUoYSl7dGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucHVzaCh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uUG9wU3RhdGUoYSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vbkhh'@;
put 'c2hDaGFuZ2UoYSkpfWdldEJhc2VIcmVmKCl7cmV0dXJuIHRoaXMuX2Jhc2VIcmVmfXBhdGgoYT0hMSl7Y29uc3QgZD10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g/PyIjIjtyZXR1cm4gZC5sZW5ndGg+MD9kLnN1YnN0cmluZygxKTpkfXByZXBhcmVFeHRlcm5hbFVybChhKXtjb25zdCBk'@;
put 'PVZVKHRoaXMuX2Jhc2VIcmVmLGEpO3JldHVybiBkLmxlbmd0aD4wPyIjIitkOmR9cHVzaFN0YXRlKGEsZCxoLGYpe2xldCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrWDQoZikpOzA9PXYubGVuZ3RoJiYodj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0'@;
put 'Zm9ybUxvY2F0aW9uLnB1c2hTdGF0ZShhLGQsdil9cmVwbGFjZVN0YXRlKGEsZCxoLGYpe2xldCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrWDQoZikpOzA9PXYubGVuZ3RoJiYodj10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnBhdGhuYW1lKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJl'@;
put 'cGxhY2VTdGF0ZShhLGQsdil9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGE9MCl7'@;
put 'dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihOVSkseHIoSG9lLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9'@;
put 'fXJldHVybiBjfSkoKSxwaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3N1YmplY3Q9bmV3IFhyLHRoaXMuX3VybENoYW5nZUxpc3RlbmVycz1bXSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5PWE7Y29uc3QgZD10aGlz'@;
put 'Ll9sb2NhdGlvblN0cmF0ZWd5LmdldEJhc2VIcmVmKCk7dGhpcy5fYmFzZVBhdGg9ZnVuY3Rpb24gZ19lKGMpe2lmKG5ldyBSZWdFeHAoIl4oaHR0cHM/Oik/Ly8iKS50ZXN0KGMpKXtjb25zdFssYV09Yy5zcGxpdCgvXC9cL1teXC9dKy8pO3JldHVybiBhfXJldHVybiBjfShGb2UoVm9lKGQp'@;
put 'KSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5vblBvcFN0YXRlKGg9Pnt0aGlzLl9zdWJqZWN0LmVtaXQoe3VybDp0aGlzLnBhdGgoITApLHBvcDohMCxzdGF0ZTpoLnN0YXRlLHR5cGU6aC50eXBlfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJz'@;
put 'Y3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnM9W119cGF0aChhPSExKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUodGhpcy5fbG9jYXRpb25TdHJhdGVneS5wYXRoKGEpKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldFN0YXRlKCl9aXNDdXJyZW50UGF0'@;
put 'aEVxdWFsVG8oYSxkPSIiKXtyZXR1cm4gdGhpcy5wYXRoKCk9PXRoaXMubm9ybWFsaXplKGErWDQoZCkpfW5vcm1hbGl6ZShhKXtyZXR1cm4gYy5zdHJpcFRyYWlsaW5nU2xhc2goZnVuY3Rpb24gcF9lKGMsbCl7aWYoIWN8fCFsLnN0YXJ0c1dpdGgoYykpcmV0dXJuIGw7Y29uc3QgYT1sLnN1'@;
put 'YnN0cmluZyhjLmxlbmd0aCk7cmV0dXJuIiI9PT1hfHxbIi8iLCI7IiwiPyIsIiMiXS5pbmNsdWRlcyhhWzBdKT9hOmx9KHRoaXMuX2Jhc2VQYXRoLFZvZShhKSkpfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gYSYmIi8iIT09YVswXSYmKGE9Ii8iK2EpLHRoaXMuX2xvY2F0aW9uU3Ry'@;
put 'YXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKGEpfWdvKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRlKGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYStYNChkKSksaCl9cmVwbGFjZVN0'@;
put 'YXRlKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYStYNChkKSksaCl9Zm9yd2FyZCgpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3ku'@;
put 'Zm9yd2FyZCgpfWJhY2soKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmJhY2soKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5Lmhpc3RvcnlHbz8uKGEpfW9uVXJsQ2hhbmdlKGEpe3JldHVybiB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChhKSx0aGlzLl91cmxD'@;
put 'aGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlzLnN1YnNjcmliZShkPT57dGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGQudXJsLGQuc3RhdGUpfSksKCk9Pntjb25zdCBkPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRleE9mKGEpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxp'@;
put 'Y2UoZCwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoYT0iIixkKXt0aGlzLl91'@;
put 'cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChoPT5oKGEsZCkpfXN1YnNjcmliZShhLGQsaCl7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZCxjb21wbGV0ZTpofSl9c3RhdGlje3RoaXMubm9ybWFsaXplUXVlcnlQYXJhbXM9WDR9c3RhdGlje3RoaXMuam9p'@;
put 'bldpdGhTbGFzaD1WVX1zdGF0aWN7dGhpcy5zdHJpcFRyYWlsaW5nU2xhc2g9Rm9lfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFU4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZnVuY3Rpb24g'@;
put 'Zl9lKCl7cmV0dXJuIG5ldyBwaCh4cihVOCkpfSgpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBWb2UoYyl7cmV0dXJuIGMucmVwbGFjZSgvXC9pbmRleC5odG1sJC8sIiIpfXZhciB1MD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkZvcm1hdD0wXT0iRm9ybWF0'@;
put 'IixjW2MuU3RhbmRhbG9uZT0xXT0iU3RhbmRhbG9uZSIsY30odTB8fHt9KSxkbD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5hcnJvdz0wXT0iTmFycm93IixjW2MuQWJicmV2aWF0ZWQ9MV09IkFiYnJldmlhdGVkIixjW2MuV2lkZT0yXT0iV2lkZSIsY1tjLlNob3J0PTNdPSJTaG9ydCIsY30o'@;
put 'ZGx8fHt9KSxTZD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNob3J0PTBdPSJTaG9ydCIsY1tjLk1lZGl1bT0xXT0iTWVkaXVtIixjW2MuTG9uZz0yXT0iTG9uZyIsY1tjLkZ1bGw9M109IkZ1bGwiLGN9KFNkfHx7fSk7ZnVuY3Rpb24gQlUoYyxsLGEpe2NvbnN0IGQ9YTEoYyksZj1DMihbZFtR'@;
put 'bC5EYXlzRm9ybWF0XSxkW1FsLkRheXNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIEMyKGYsYSl9ZnVuY3Rpb24galUoYyxsLGEpe2NvbnN0IGQ9YTEoYyksZj1DMihbZFtRbC5Nb250aHNGb3JtYXRdLGRbUWwuTW9udGhzU3RhbmRhbG9uZV1dLGwpO3JldHVybiBDMihmLGEpfWZ1bmN0aW9uIEMy'@;
put 'KGMsbCl7Zm9yKGxldCBhPWw7YT4tMTthLS0paWYodHlwZW9mIGNbYV08InUiKXJldHVybiBjW2FdO3Rocm93IG5ldyBFcnJvcigiTG9jYWxlIGRhdGEgQVBJOiBsb2NhbGUgZGF0YSB1bmRlZmluZWQiKX1mdW5jdGlvbiAkb2UoYyxsKXtsPWVuY29kZVVSSUNvbXBvbmVudChsKTtmb3IoY29u'@;
put 'c3QgYSBvZiBjLnNwbGl0KCI7Iikpe2NvbnN0IGQ9YS5pbmRleE9mKCI9IiksW2gsZl09LTE9PWQ/W2EsIiJdOlthLnNsaWNlKDAsZCksYS5zbGljZShkKzEpXTtpZihoLnRyaW0oKT09PWwpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChmKX1yZXR1cm4gbnVsbH1jb25zdCBYVT0vXHMrLyxL'@;
put 'b2U9W107bGV0IHd1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ0VsPWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLmluaXRpYWxDbGFzc2VzPUtvZSx0aGlzLnN0YXRlTWFwPW5ldyBNYXB9c2V0IGtsYXNzKGEpe3RoaXMuaW5pdGlhbENsYXNzZXM9bnVsbCE9YT9hLnRy'@;
put 'aW0oKS5zcGxpdChYVSk6S29lfXNldCBuZ0NsYXNzKGEpe3RoaXMucmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiBhP2EudHJpbSgpLnNwbGl0KFhVKTphfW5nRG9DaGVjaygpe2Zvcihjb25zdCBkIG9mIHRoaXMuaW5pdGlhbENsYXNzZXMpdGhpcy5fdXBkYXRlU3RhdGUoZCwhMCk7Y29uc3Qg'@;
put 'YT10aGlzLnJhd0NsYXNzO2lmKEFycmF5LmlzQXJyYXkoYSl8fGEgaW5zdGFuY2VvZiBTZXQpZm9yKGNvbnN0IGQgb2YgYSl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtlbHNlIGlmKG51bGwhPWEpZm9yKGNvbnN0IGQgb2YgT2JqZWN0LmtleXMoYSkpdGhpcy5fdXBkYXRlU3RhdGUoZCwhIWFb'@;
put 'ZF0pO3RoaXMuX2FwcGx5U3RhdGVEaWZmKCl9X3VwZGF0ZVN0YXRlKGEsZCl7Y29uc3QgaD10aGlzLnN0YXRlTWFwLmdldChhKTt2b2lkIDAhPT1oPyhoLmVuYWJsZWQhPT1kJiYoaC5jaGFuZ2VkPSEwLGguZW5hYmxlZD1kKSxoLnRvdWNoZWQ9ITApOnRoaXMuc3RhdGVNYXAuc2V0KGEse2Vu'@;
put 'YWJsZWQ6ZCxjaGFuZ2VkOiEwLHRvdWNoZWQ6ITB9KX1fYXBwbHlTdGF0ZURpZmYoKXtmb3IoY29uc3QgYSBvZiB0aGlzLnN0YXRlTWFwKXtjb25zdCBkPWFbMF0saD1hWzFdO2guY2hhbmdlZD8odGhpcy5fdG9nZ2xlQ2xhc3MoZCxoLmVuYWJsZWQpLGguY2hhbmdlZD0hMSk6aC50b3VjaGVk'@;
put 'fHwoaC5lbmFibGVkJiZ0aGlzLl90b2dnbGVDbGFzcyhkLCExKSx0aGlzLnN0YXRlTWFwLmRlbGV0ZShkKSksaC50b3VjaGVkPSExfX1fdG9nZ2xlQ2xhc3MoYSxkKXsoYT1hLnRyaW0oKSkubGVuZ3RoPjAmJmEuc3BsaXQoWFUpLmZvckVhY2goaD0+e2Q/dGhpcy5fcmVuZGVyZXIuYWRkQ2xh'@;
put 'c3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZlRWxlbWVudCxoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShFYSkpfX1zdGF0aWN7dGhp'@;
put 'cy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdDbGFzcyIsIiJdXSxpbnB1dHM6e2tsYXNzOltqbi5Ob25lLCJjbGFzcyIsImtsYXNzIl0sbmdDbGFzczoibmdDbGFzcyJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2NsYXNzIGV3ZXtjb25zdHJ1Y3Rvcihs'@;
put 'LGEsZCxoKXt0aGlzLiRpbXBsaWNpdD1sLHRoaXMubmdGb3JPZj1hLHRoaXMuaW5kZXg9ZCx0aGlzLmNvdW50PWh9Z2V0IGZpcnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhp'@;
put 'cy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX1sZXQgbHM9KCgpPT57Y2xhc3MgY3tzZXQgbmdGb3JPZihhKXt0aGlzLl9uZ0Zvck9mPWEsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnkoYSl7dGhpcy5fdHJhY2tCeUZuPWF9Z2V0IG5nRm9yVHJh'@;
put 'Y2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdGb3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNl'@;
put 'dCBuZ0ZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl90ZW1wbGF0ZT1hKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGlydHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCBhPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZlciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJz'@;
put 'LmZpbmQoYSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KSl9aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX25nRm9yT2YpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X2FwcGx5Q2hhbmdlcyhhKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXI7'@;
put 'YS5mb3JFYWNoT3BlcmF0aW9uKChoLGYsdik9PntpZihudWxsPT1oLnByZXZpb3VzSW5kZXgpZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGVtcGxhdGUsbmV3IGV3ZShoLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09PXY/dm9pZCAwOnYpO2Vsc2UgaWYobnVsbD09dilkLnJl'@;
put 'bW92ZShudWxsPT09Zj92b2lkIDA6Zik7ZWxzZSBpZihudWxsIT09Zil7Y29uc3QgTT1kLmdldChmKTtkLm1vdmUoTSx2KSxYb2UoTSxoKX19KTtmb3IobGV0IGg9MCxmPWQubGVuZ3RoO2g8ZjtoKyspe2NvbnN0IE09ZC5nZXQoaCkuY29udGV4dDtNLmluZGV4PWgsTS5jb3VudD1mLE0ubmdG'@;
put 'b3JPZj10aGlzLl9uZ0Zvck9mfWEuZm9yRWFjaElkZW50aXR5Q2hhbmdlKGg9PntYb2UoZC5nZXQoaC5jdXJyZW50SW5kZXgpLGgpfSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKShHZShEYSksR2UoU2wpLEdlKFE1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ0ZvciIsIiIsIm5nRm9yT2YiLCIiXV0saW5wdXRzOntuZ0Zvck9mOiJuZ0Zvck9mIixuZ0ZvclRyYWNrQnk6Im5nRm9yVHJhY2tCeSIsbmdGb3JU'@;
put 'ZW1wbGF0ZToibmdGb3JUZW1wbGF0ZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFhvZShjLGwpe2MuY29udGV4dC4kaW1wbGljaXQ9bC5pdGVtfWxldCB5bz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fdmlld0NvbnRhaW5lcj1hLHRoaXMu'@;
put 'X2NvbnRleHQ9bmV3IHR3ZSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWR9c2V0IG5nSWYoYSl7dGhpcy5fY29udGV4'@;
put 'dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWEsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihhKXtKb2UoIm5nSWZUaGVuIixhKSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9YSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1zZXQgbmdJZkVsc2Uo'@;
put 'YSl7Sm9lKCJuZ0lmRWxzZSIsYSksdGhpcy5fZWxzZVRlbXBsYXRlUmVmPWEsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl91cGRhdGVWaWV3KCl9X3VwZGF0ZVZpZXcoKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD90aGlzLl90aGVuVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIu'@;
put 'Y2xlYXIoKSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZiYmKHRoaXMuX3RoZW5WaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RoZW5UZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpOnRoaXMuX2Vsc2VWaWV3'@;
put 'UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVRlbXBsYXRlUmVmJiYodGhpcy5fZWxzZVZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fZWxzZVRlbXBsYXRlUmVmLHRoaXMu'@;
put 'X2NvbnRleHQpKSl9c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShEYSksR2UoU2wpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbIiIsIm5nSWYiLCIiXV0saW5wdXRzOntuZ0lmOiJuZ0lmIixuZ0lmVGhlbjoibmdJZlRoZW4iLG5nSWZFbHNlOiJuZ0lmRWxzZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2NsYXNzIHR3ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuJGltcGxpY2l0PW51bGwsdGhpcy5uZ0lmPW51'@;
put 'bGx9fWZ1bmN0aW9uIEpvZShjLGwpe2lmKGwmJiFsLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IoYCR7Y30gbXVzdCBiZSBhIFRlbXBsYXRlUmVmLCBidXQgcmVjZWl2ZWQgJyR7UHIobCl9Jy5gKX1jbGFzcyBKVXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ZpZXdDb250YWlu'@;
put 'ZXJSZWY9bCx0aGlzLl90ZW1wbGF0ZVJlZj1hLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5f'@;
put 'dmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZShsKXtsJiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgpOiFsJiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19bGV0IFMyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0Vmlld3M9W10s'@;
put 'dGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMX1zZXQgbmdTd2l0Y2goYSl7dGhpcy5fbmdTd2l0Y2g9YSwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0'@;
put 'Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KGEpe3RoaXMuX2RlZmF1bHRWaWV3cy5wdXNoKGEpfV9tYXRjaENhc2UoYSl7Y29uc3QgZD1hPT09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fD1kLHRo'@;
put 'aXMuX2xhc3RDYXNlQ2hlY2tJbmRleCsrLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD09PXRoaXMuX2Nhc2VDb3VudCYmKHRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghdGhpcy5fbGFzdENhc2VzTWF0Y2hlZCksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0'@;
put 'Y2hlZD0hMSksZH1fdXBkYXRlRGVmYXVsdENhc2VzKGEpe2lmKHRoaXMuX2RlZmF1bHRWaWV3cy5sZW5ndGg+MCYmYSE9PXRoaXMuX2RlZmF1bHRVc2VkKXt0aGlzLl9kZWZhdWx0VXNlZD1hO2Zvcihjb25zdCBkIG9mIHRoaXMuX2RlZmF1bHRWaWV3cylkLmVuZm9yY2VTdGF0ZShhKX19c3Rh'@;
put 'dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaCIsIiJdXSxpbnB1dHM6e25nU3dpdGNoOiJuZ1N3aXRjaCJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJu'@;
put 'IGN9KSgpLGNwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdTd2l0Y2g9aCxoLl9hZGRDYXNlKCksdGhpcy5fdmlldz1uZXcgSlUoYSxkKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3'@;
put 'aXRjaENhc2UpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShEYSksR2UoU2wpLEdlKFMyLDkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoQ2FzZSIsIiJdXSxpbnB1dHM6e25n'@;
put 'U3dpdGNoQ2FzZToibmdTd2l0Y2hDYXNlIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCksZWFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nRWw9YSx0aGlzLl9kaWZmZXJzPWQsdGhpcy5fcmVuZGVyZXI9aCx0aGlzLl9uZ1N0eWxlPW51bGwsdGhpcy5f'@;
put 'ZGlmZmVyPW51bGx9c2V0IG5nU3R5bGUoYSl7dGhpcy5fbmdTdHlsZT1hLCF0aGlzLl9kaWZmZXImJmEmJih0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXIpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhp'@;
put 'cy5fbmdTdHlsZSk7YSYmdGhpcy5fYXBwbHlDaGFuZ2VzKGEpfX1fc2V0U3R5bGUoYSxkKXtjb25zdFtoLGZdPWEuc3BsaXQoIi4iKSx2PS0xPT09aC5pbmRleE9mKCItIik/dm9pZCAwOkszLkRhc2hDYXNlO251bGwhPWQ/dGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUodGhpcy5fbmdFbC5uYXRp'@;
put 'dmVFbGVtZW50LGgsZj9gJHtkfSR7Zn1gOmQsdik6dGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgsdil9X2FwcGx5Q2hhbmdlcyhhKXthLmZvckVhY2hSZW1vdmVkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxudWxsKSksYS5mb3JFYWNo'@;
put 'QWRkZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5LGQuY3VycmVudFZhbHVlKSksYS5mb3JFYWNoQ2hhbmdlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShH'@;
put 'ZShKaSksR2Uod00pLEdlKEVhKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLE4xPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1hLHRoaXMuX3ZpZXdSZWY9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0PW51bGwsdGhpcy5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3I9bnVsbH1uZ09uQ2hhbmdlcyhhKXtp'@;
put 'Zih0aGlzLl9zaG91bGRSZWNyZWF0ZVZpZXcoYSkpe2NvbnN0IGQ9dGhpcy5fdmlld0NvbnRhaW5lclJlZjtpZih0aGlzLl92aWV3UmVmJiZkLnJlbW92ZShkLmluZGV4T2YodGhpcy5fdmlld1JlZikpLCF0aGlzLm5nVGVtcGxhdGVPdXRsZXQpcmV0dXJuIHZvaWQodGhpcy5fdmlld1JlZj1u'@;
put 'dWxsKTtjb25zdCBoPXRoaXMuX2NyZWF0ZUNvbnRleHRGb3J3YXJkUHJveHkoKTt0aGlzLl92aWV3UmVmPWQuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMubmdUZW1wbGF0ZU91dGxldCxoLHtpbmplY3Rvcjp0aGlzLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcj8/dm9pZCAwfSl9fV9zaG91bGRS'@;
put 'ZWNyZWF0ZVZpZXcoYSl7cmV0dXJuISFhLm5nVGVtcGxhdGVPdXRsZXR8fCEhYS5uZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3J9X2NyZWF0ZUNvbnRleHRGb3J3YXJkUHJveHkoKXtyZXR1cm4gbmV3IFByb3h5KHt9LHtzZXQ6KGEsZCxoKT0+ISF0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0'@;
put 'JiZSZWZsZWN0LnNldCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0LGQsaCksZ2V0OihhLGQsaCk9PntpZih0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0KXJldHVybiBSZWZsZWN0LmdldCh0aGlzLm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0LGQsaCl9fSl9c3RhdGlje3RoaXMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRGEpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxl'@;
put 'dENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRsZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSkoKTtjbGFzcyBvd2V7Y3JlYXRlU3Vic2Ny'@;
put 'aXB0aW9uKGwsYSl7cmV0dXJuIExvZSgoKT0+bC5zdWJzY3JpYmUoe25leHQ6YSxlcnJvcjpkPT57dGhyb3cgZH19KSl9ZGlzcG9zZShsKXtMb2UoKCk9PmwudW5zdWJzY3JpYmUoKSl9fWNsYXNzIGF3ZXtjcmVhdGVTdWJzY3JpcHRpb24obCxhKXtyZXR1cm4gbC50aGVuKGEsZD0+e3Rocm93'@;
put 'IGR9KX1kaXNwb3NlKGwpe319Y29uc3Qgc3dlPW5ldyBhd2UsbHdlPW5ldyBvd2U7bGV0IEVNPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITAsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGws'@;
put 'dGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbCx0aGlzLl9yZWY9YX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybShhKXtpZighdGhpcy5fb2JqKXtpZihhKXRyeXt0aGlzLm1hcmtGb3JDaGVj'@;
put 'a09uVmFsdWVVcGRhdGU9ITEsdGhpcy5fc3Vic2NyaWJlKGEpfWZpbmFsbHl7dGhpcy5tYXJrRm9yQ2hlY2tPblZhbHVlVXBkYXRlPSEwfXJldHVybiB0aGlzLl9sYXRlc3RWYWx1ZX1yZXR1cm4gYSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGEpKTp0aGlz'@;
put 'Ll9sYXRlc3RWYWx1ZX1fc3Vic2NyaWJlKGEpe3RoaXMuX29iaj1hLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3NlbGVjdFN0cmF0ZWd5KGEpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oYSxkPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShhLGQp'@;
put 'KX1fc2VsZWN0U3RyYXRlZ3koYSl7aWYoX00oYSkpcmV0dXJuIHN3ZTtpZihVaWUoYSkpcmV0dXJuIGx3ZTt0aHJvdyBmdW5jdGlvbiBWZihjLGwpe3JldHVybiBuZXcgUW4oMjEwMCwhMSl9KCl9X2Rpc3Bvc2UoKXt0aGlzLl9zdHJhdGVneS5kaXNwb3NlKHRoaXMuX3N1YnNjcmlwdGlvbiks'@;
put 'dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbH1fdXBkYXRlTGF0ZXN0VmFsdWUoYSxkKXthPT09dGhpcy5fb2JqJiYodGhpcy5fbGF0ZXN0VmFsdWU9ZCx0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGUmJnRoaXMuX3JlZj8u'@;
put 'bWFya0ZvckNoZWNrKCkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHhzLDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6ImFzeW5jIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSxR'@;
put 'VT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJqc29uIix0eXBlOmMscHVyZToh'@;
put 'MSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSx5Uj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGlmZmVycz1hLHRoaXMua2V5VmFsdWVzPVtdLHRoaXMuY29tcGFyZUZuPXRhZX10cmFuc2Zvcm0oYSxkPXRhZSl7aWYoIWF8fCEoYSBpbnN0YW5jZW9mIE1hcCkmJiJv'@;
put 'YmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcj8/PXRoaXMuZGlmZmVycy5maW5kKGEpLmNyZWF0ZSgpO2NvbnN0IGg9dGhpcy5kaWZmZXIuZGlmZihhKSxmPWQhPT10aGlzLmNvbXBhcmVGbjtyZXR1cm4gaCYmKHRoaXMua2V5VmFsdWVzPVtdLGguZm9yRWFjaEl0ZW0o'@;
put 'dj0+e3RoaXMua2V5VmFsdWVzLnB1c2goZnVuY3Rpb24gX3dlKGMsbCl7cmV0dXJue2tleTpjLHZhbHVlOmx9fSh2LmtleSx2LmN1cnJlbnRWYWx1ZSkpfSkpLChofHxmKSYmKHRoaXMua2V5VmFsdWVzLnNvcnQoZCksdGhpcy5jb21wYXJlRm49ZCksdGhpcy5rZXlWYWx1ZXN9c3RhdGlje3Ro'@;
put 'aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uod00sMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToia2V5dmFsdWUiLHR5cGU6YyxwdXJlOiExLHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHRhZShjLGwpe2NvbnN0'@;
put 'IGE9Yy5rZXksZD1sLmtleTtpZihhPT09ZClyZXR1cm4gMDtpZih2b2lkIDA9PT1hKXJldHVybiAxO2lmKHZvaWQgMD09PWQpcmV0dXJuLTE7aWYobnVsbD09PWEpcmV0dXJuIDE7aWYobnVsbD09PWQpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYic3RyaW5nIj09dHlwZW9mIGQp'@;
put 'cmV0dXJuIGE8ZD8tMToxO2lmKCJudW1iZXIiPT10eXBlb2YgYSYmIm51bWJlciI9PXR5cGVvZiBkKXJldHVybiBhLWQ7aWYoImJvb2xlYW4iPT10eXBlb2YgYSYmImJvb2xlYW4iPT10eXBlb2YgZClyZXR1cm4gYTxkPy0xOjE7Y29uc3QgaD1TdHJpbmcoYSksZj1TdHJpbmcoZCk7cmV0dXJu'@;
put 'IGg9PWY/MDpoPGY/LTE6MX1sZXQgTG89KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30p'@;
put 'KCk7ZnVuY3Rpb24gZWwoYyl7cmV0dXJuImJyb3dzZXIiPT09Y31mdW5jdGlvbiByYWUoYyl7cmV0dXJuInNlcnZlciI9PT1jfWxldCBUd2U9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmVsKGZp'@;
put 'KG9hKSk/bmV3IEF3ZShmaSh2cyksd2luZG93KTpuZXcgRHdlfSl9fXJldHVybiBjfSkoKTtjbGFzcyBBd2V7Y29uc3RydWN0b3IobCxhKXt0aGlzLmRvY3VtZW50PWwsdGhpcy53aW5kb3c9YSx0aGlzLm9mZnNldD0oKT0+WzAsMF19c2V0T2Zmc2V0KGwpe3RoaXMub2Zmc2V0PUFycmF5Lmlz'@;
put 'QXJyYXkobCk/KCk9Pmw6bH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVyblt0aGlzLndpbmRvdy5zY3JvbGxYLHRoaXMud2luZG93LnNjcm9sbFldfXNjcm9sbFRvUG9zaXRpb24obCl7dGhpcy53aW5kb3cuc2Nyb2xsVG8obFswXSxsWzFdKX1zY3JvbGxUb0FuY2hvcihsKXtjb25zdCBhPWZ1'@;
put 'bmN0aW9uIGt3ZShjLGwpe2NvbnN0IGE9Yy5nZXRFbGVtZW50QnlJZChsKXx8Yy5nZXRFbGVtZW50c0J5TmFtZShsKVswXTtpZihhKXJldHVybiBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjLmNyZWF0ZVRyZWVXYWxrZXImJmMuYm9keSYmImZ1bmN0aW9uIj09dHlwZW9mIGMuYm9keS5hdHRh'@;
put 'Y2hTaGFkb3cpe2NvbnN0IGQ9Yy5jcmVhdGVUcmVlV2Fsa2VyKGMuYm9keSxOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCk7bGV0IGg9ZC5jdXJyZW50Tm9kZTtmb3IoO2g7KXtjb25zdCBmPWguc2hhZG93Um9vdDtpZihmKXtjb25zdCB2PWYuZ2V0RWxlbWVudEJ5SWQobCl8fGYucXVlcnlTZWxl'@;
put 'Y3RvcihgW25hbWU9IiR7bH0iXWApO2lmKHYpcmV0dXJuIHZ9aD1kLm5leHROb2RlKCl9fXJldHVybiBudWxsfSh0aGlzLmRvY3VtZW50LGwpO2EmJih0aGlzLnNjcm9sbFRvRWxlbWVudChhKSxhLmZvY3VzKCkpfXNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbihsKXt0aGlzLndpbmRvdy5o'@;
put 'aXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uPWx9c2Nyb2xsVG9FbGVtZW50KGwpe2NvbnN0IGE9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPWEubGVmdCt0aGlzLndpbmRvdy5wYWdlWE9mZnNldCxoPWEudG9wK3RoaXMud2luZG93LnBhZ2VZT2Zmc2V0LGY9dGhpcy5vZmZzZXQoKTt0aGlz'@;
put 'LndpbmRvdy5zY3JvbGxUbyhkLWZbMF0saC1mWzFdKX19Y2xhc3MgRHdle3NldE9mZnNldChsKXt9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm5bMCwwXX1zY3JvbGxUb1Bvc2l0aW9uKGwpe31zY3JvbGxUb0FuY2hvcihsKXt9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe319Y2xh'@;
put 'c3MgaWFle31jbGFzcyBpQ2UgZXh0ZW5kcyBjX2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3VwcG9ydHNET01FdmVudHM9ITB9fWNsYXNzIHJaIGV4dGVuZHMgaUNle3N0YXRpYyBtYWtlQ3VycmVudCgpeyFmdW5jdGlvbiBsX2UoYyl7UG9lPz89Y30obmV3IHJa'@;
put 'KX1vbkFuZENhbmNlbChsLGEsZCl7cmV0dXJuIGwuYWRkRXZlbnRMaXN0ZW5lcihhLGQpLCgpPT57bC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCl9fWRpc3BhdGNoRXZlbnQobCxhKXtsLmRpc3BhdGNoRXZlbnQoYSl9cmVtb3ZlKGwpe2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92'@;
put 'ZUNoaWxkKGwpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4oYT1hfHx0aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRs'@;
put 'ZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1pc0VsZW1lbnROb2RlKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9aXNTaGFkb3dSb290KGwpe3JldHVybiBsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRh'@;
put 'cmdldChsLGEpe3JldHVybiJ3aW5kb3ciPT09YT93aW5kb3c6ImRvY3VtZW50Ij09PWE/bDoiYm9keSI9PT1hP2wuYm9keTpudWxsfWdldEJhc2VIcmVmKGwpe2NvbnN0IGE9ZnVuY3Rpb24gb0NlKCl7cmV0dXJuIGtNPWtNfHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIiksa00/a00u'@;
put 'Z2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0oKTtyZXR1cm4gbnVsbD09YT9udWxsOmZ1bmN0aW9uIGFDZShjKXtyZXR1cm4gbmV3IFVSTChjLGRvY3VtZW50LmJhc2VVUkkpLnBhdGhuYW1lfShhKX1yZXNldEJhc2VFbGVtZW50KCl7a009bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2lu'@;
put 'ZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9Z2V0Q29va2llKGwpe3JldHVybiAkb2UoZG9jdW1lbnQuY29va2llLGwpfX1sZXQga009bnVsbCxsQ2U9KCgpPT57Y2xhc3MgY3tidWlsZCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp'@;
put 'e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgaVo9bmV3IFN0KCIiKTtsZXQgZmFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl96b25lPWQsdGhp'@;
put 'cy5fZXZlbnROYW1lVG9QbHVnaW49bmV3IE1hcCxhLmZvckVhY2goaD0+e2gubWFuYWdlcj10aGlzfSksdGhpcy5fcGx1Z2lucz1hLnNsaWNlKCkucmV2ZXJzZSgpfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiB0aGlzLl9maW5kUGx1Z2luRm9yKGQpLmFkZEV2ZW50TGlzdGVuZXIo'@;
put 'YSxkLGgpfWdldFpvbmUoKXtyZXR1cm4gdGhpcy5fem9uZX1fZmluZFBsdWdpbkZvcihhKXtsZXQgZD10aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5nZXQoYSk7aWYoZClyZXR1cm4gZDtpZihkPXRoaXMuX3BsdWdpbnMuZmluZChmPT5mLnN1cHBvcnRzKGEpKSwhZCl0aHJvdyBuZXcgUW4oNTEw'@;
put 'MSwhMSk7cmV0dXJuIHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLnNldChhLGQpLGR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoaVopLHhyKFlvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3'@;
put 'NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgcGFle2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RvYz1sfX1jb25zdCBvWj0ibmctYXBwLWlkIjtsZXQgZ2FlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZj17fSl7dGhpcy5kb2M9YSx0aGlzLmFwcElkPWQsdGhpcy5ub25jZT1oLHRo'@;
put 'aXMucGxhdGZvcm1JZD1mLHRoaXMuc3R5bGVSZWY9bmV3IE1hcCx0aGlzLmhvc3ROb2Rlcz1uZXcgU2V0LHRoaXMuc3R5bGVOb2Rlc0luRE9NPXRoaXMuY29sbGVjdFNlcnZlclJlbmRlcmVkU3R5bGVzKCksdGhpcy5wbGF0Zm9ybUlzU2VydmVyPXJhZShmKSx0aGlzLnJlc2V0SG9zdE5vZGVz'@;
put 'KCl9YWRkU3R5bGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpMT09PXRoaXMuY2hhbmdlVXNhZ2VDb3VudChkLDEpJiZ0aGlzLm9uU3R5bGVBZGRlZChkKX1yZW1vdmVTdHlsZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSl0aGlzLmNoYW5nZVVzYWdlQ291bnQoZCwtMSk8PTAmJnRoaXMub25TdHlsZVJl'@;
put 'bW92ZWQoZCl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMuc3R5bGVOb2Rlc0luRE9NO2EmJihhLmZvckVhY2goZD0+ZC5yZW1vdmUoKSksYS5jbGVhcigpKTtmb3IoY29uc3QgZCBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMub25TdHlsZVJlbW92ZWQoZCk7dGhpcy5yZXNldEhvc3RO'@;
put 'b2RlcygpfWFkZEhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuYWRkKGEpO2Zvcihjb25zdCBkIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5hZGRTdHlsZVRvSG9zdChhLGQpfXJlbW92ZUhvc3QoYSl7dGhpcy5ob3N0Tm9kZXMuZGVsZXRlKGEpfWdldEFsbFN0eWxlcygpe3JldHVybiB0aGlz'@;
put 'LnN0eWxlUmVmLmtleXMoKX1vblN0eWxlQWRkZWQoYSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5ob3N0Tm9kZXMpdGhpcy5hZGRTdHlsZVRvSG9zdChkLGEpfW9uU3R5bGVSZW1vdmVkKGEpe2NvbnN0IGQ9dGhpcy5zdHlsZVJlZjtkLmdldChhKT8uZWxlbWVudHM/LmZvckVhY2goaD0+aC5yZW1v'@;
put 'dmUoKSksZC5kZWxldGUoYSl9Y29sbGVjdFNlcnZlclJlbmRlcmVkU3R5bGVzKCl7Y29uc3QgYT10aGlzLmRvYy5oZWFkPy5xdWVyeVNlbGVjdG9yQWxsKGBzdHlsZVske29afT0iJHt0aGlzLmFwcElkfSJdYCk7aWYoYT8ubGVuZ3RoKXtjb25zdCBkPW5ldyBNYXA7cmV0dXJuIGEuZm9yRWFj'@;
put 'aChoPT57bnVsbCE9aC50ZXh0Q29udGVudCYmZC5zZXQoaC50ZXh0Q29udGVudCxoKX0pLGR9cmV0dXJuIG51bGx9Y2hhbmdlVXNhZ2VDb3VudChhLGQpe2NvbnN0IGg9dGhpcy5zdHlsZVJlZjtpZihoLmhhcyhhKSl7Y29uc3QgZj1oLmdldChhKTtyZXR1cm4gZi51c2FnZSs9ZCxmLnVzYWdl'@;
put 'fXJldHVybiBoLnNldChhLHt1c2FnZTpkLGVsZW1lbnRzOltdfSksZH1nZXRTdHlsZUVsZW1lbnQoYSxkKXtjb25zdCBoPXRoaXMuc3R5bGVOb2Rlc0luRE9NLGY9aD8uZ2V0KGQpO2lmKGY/LnBhcmVudE5vZGU9PT1hKXJldHVybiBoLmRlbGV0ZShkKSxmLnJlbW92ZUF0dHJpYnV0ZShvWiks'@;
put 'Zjt7Y29uc3Qgdj10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3JldHVybiB0aGlzLm5vbmNlJiZ2LnNldEF0dHJpYnV0ZSgibm9uY2UiLHRoaXMubm9uY2UpLHYudGV4dENvbnRlbnQ9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJnYuc2V0QXR0cmlidXRlKG9aLHRoaXMuYXBwSWQp'@;
put 'LGEuYXBwZW5kQ2hpbGQodiksdn19YWRkU3R5bGVUb0hvc3QoYSxkKXtjb25zdCBoPXRoaXMuZ2V0U3R5bGVFbGVtZW50KGEsZCksZj10aGlzLnN0eWxlUmVmLHY9Zi5nZXQoZCk/LmVsZW1lbnRzO3Y/di5wdXNoKGgpOmYuc2V0KGQse2VsZW1lbnRzOltoXSx1c2FnZToxfSl9cmVzZXRIb3N0'@;
put 'Tm9kZXMoKXtjb25zdCBhPXRoaXMuaG9zdE5vZGVzO2EuY2xlYXIoKSxhLmFkZCh0aGlzLmRvYy5oZWFkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIoWXYpLHhyKFI1LDgpLHhyKG9hKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBy'@;
put 'b3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgYVo9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIix4bGluazoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlu'@;
put 'ayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyIsbWF0aDoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoTUwvIn0sc1o9LyVDT01QJS9nLGhDZT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJv'@;
put 'b3QiLGZhY3Rvcnk6KCk9PiEwfSk7ZnVuY3Rpb24gdmFlKGMsbCl7cmV0dXJuIGwubWFwKGE9PmEucmVwbGFjZShzWixjKSl9bGV0IGxaPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaPW51bGwpe3RoaXMuZXZlbnRNYW5hZ2VyPWEsdGhpcy5zaGFyZWRTdHlsZXNI'@;
put 'b3N0PWQsdGhpcy5hcHBJZD1oLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveT1mLHRoaXMuZG9jPXYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5uZ1pvbmU9RCx0aGlzLm5vbmNlPVosdGhpcy5yZW5kZXJlckJ5Q29tcElkPW5ldyBNYXAsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPXJhZShN'@;
put 'KSx0aGlzLmRlZmF1bHRSZW5kZXJlcj1uZXcgY1ooYSx2LEQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyKX1jcmVhdGVSZW5kZXJlcihhLGQpe2lmKCFhfHwhZClyZXR1cm4gdGhpcy5kZWZhdWx0UmVuZGVyZXI7dGhpcy5wbGF0Zm9ybUlzU2VydmVyJiZkLmVuY2Fwc3VsYXRpb249PT1Ycy5TaGFk'@;
put 'b3dEb20mJihkPXsuLi5kLGVuY2Fwc3VsYXRpb246WHMuRW11bGF0ZWR9KTtjb25zdCBoPXRoaXMuZ2V0T3JDcmVhdGVSZW5kZXJlcihhLGQpO3JldHVybiBoIGluc3RhbmNlb2YgeWFlP2guYXBwbHlUb0hvc3QoYSk6aCBpbnN0YW5jZW9mIHVaJiZoLmFwcGx5U3R5bGVzKCksaH1nZXRPckNy'@;
put 'ZWF0ZVJlbmRlcmVyKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyQnlDb21wSWQ7bGV0IGY9aC5nZXQoZC5pZCk7aWYoIWYpe2NvbnN0IHY9dGhpcy5kb2MsTT10aGlzLm5nWm9uZSxEPXRoaXMuZXZlbnRNYW5hZ2VyLFo9dGhpcy5zaGFyZWRTdHlsZXNIb3N0LG5lPXRoaXMucmVtb3ZlU3R5'@;
put 'bGVzT25Db21wRGVzdHJveSxjZT10aGlzLnBsYXRmb3JtSXNTZXJ2ZXI7c3dpdGNoKGQuZW5jYXBzdWxhdGlvbil7Y2FzZSBYcy5FbXVsYXRlZDpmPW5ldyB5YWUoRCxaLGQsdGhpcy5hcHBJZCxuZSx2LE0sY2UpO2JyZWFrO2Nhc2UgWHMuU2hhZG93RG9tOnJldHVybiBuZXcgbUNlKEQsWixh'@;
put 'LGQsdixNLHRoaXMubm9uY2UsY2UpO2RlZmF1bHQ6Zj1uZXcgdVooRCxaLGQsbmUsdixNLGNlKX1oLnNldChkLmlkLGYpfXJldHVybiBmfW5nT25EZXN0cm95KCl7dGhpcy5yZW5kZXJlckJ5Q29tcElkLmNsZWFyKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu'@;
put 'ZXcoZHx8YykoeHIoZmFlKSx4cihnYWUpLHhyKFl2KSx4cihoQ2UpLHhyKHZzKSx4cihvYSkseHIoWW8pLHhyKFI1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgY1p7Y29uc3RydWN0b3IobCxh'@;
put 'LGQsaCl7dGhpcy5ldmVudE1hbmFnZXI9bCx0aGlzLmRvYz1hLHRoaXMubmdab25lPWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyPWgsdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy50aHJvd09uU3ludGhldGljUHJvcHM9ITAsdGhpcy5kZXN0cm95Tm9kZT1udWxsfWRlc3Ryb3ko'@;
put 'KXt9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiBhP3RoaXMuZG9jLmNyZWF0ZUVsZW1lbnROUyhhWlthXXx8YSxsKTp0aGlzLmRvYy5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUNvbW1lbnQobCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4g'@;
put 'dGhpcy5kb2MuY3JlYXRlVGV4dE5vZGUobCl9YXBwZW5kQ2hpbGQobCxhKXsoYmFlKGwpP2wuY29udGVudDpsKS5hcHBlbmRDaGlsZChhKX1pbnNlcnRCZWZvcmUobCxhLGQpe2wmJihiYWUobCk/bC5jb250ZW50OmwpLmluc2VydEJlZm9yZShhLGQpfXJlbW92ZUNoaWxkKGwsYSl7bCYmbC5y'@;
put 'ZW1vdmVDaGlsZChhKX1zZWxlY3RSb290RWxlbWVudChsLGEpe2xldCBkPSJzdHJpbmciPT10eXBlb2YgbD90aGlzLmRvYy5xdWVyeVNlbGVjdG9yKGwpOmw7aWYoIWQpdGhyb3cgbmV3IFFuKC01MTA0LCExKTtyZXR1cm4gYXx8KGQudGV4dENvbnRlbnQ9IiIpLGR9cGFyZW50Tm9kZShsKXty'@;
put 'ZXR1cm4gbC5wYXJlbnROb2RlfW5leHRTaWJsaW5nKGwpe3JldHVybiBsLm5leHRTaWJsaW5nfXNldEF0dHJpYnV0ZShsLGEsZCxoKXtpZihoKXthPWgrIjoiK2E7Y29uc3QgZj1hWltoXTtmP2wuc2V0QXR0cmlidXRlTlMoZixhLGQpOmwuc2V0QXR0cmlidXRlKGEsZCl9ZWxzZSBsLnNldEF0'@;
put 'dHJpYnV0ZShhLGQpfXJlbW92ZUF0dHJpYnV0ZShsLGEsZCl7aWYoZCl7Y29uc3QgaD1hWltkXTtoP2wucmVtb3ZlQXR0cmlidXRlTlMoaCxhKTpsLnJlbW92ZUF0dHJpYnV0ZShgJHtkfToke2F9YCl9ZWxzZSBsLnJlbW92ZUF0dHJpYnV0ZShhKX1hZGRDbGFzcyhsLGEpe2wuY2xhc3NMaXN0'@;
put 'LmFkZChhKX1yZW1vdmVDbGFzcyhsLGEpe2wuY2xhc3NMaXN0LnJlbW92ZShhKX1zZXRTdHlsZShsLGEsZCxoKXtoJihLMy5EYXNoQ2FzZXxLMy5JbXBvcnRhbnQpP2wuc3R5bGUuc2V0UHJvcGVydHkoYSxkLGgmSzMuSW1wb3J0YW50PyJpbXBvcnRhbnQiOiIiKTpsLnN0eWxlW2FdPWR9cmVt'@;
put 'b3ZlU3R5bGUobCxhLGQpe2QmSzMuRGFzaENhc2U/bC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShhKTpsLnN0eWxlW2FdPSIifXNldFByb3BlcnR5KGwsYSxkKXtudWxsIT1sJiYobFthXT1kKX1zZXRWYWx1ZShsLGEpe2wubm9kZVZhbHVlPWF9bGlzdGVuKGwsYSxkKXtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIGwmJiEobD1lbSgpLmdldEdsb2JhbEV2ZW50VGFyZ2V0KHRoaXMuZG9jLGwpKSl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGV2ZW50IHRhcmdldCAke2x9IGZvciBldmVudCAke2F9YCk7cmV0dXJuIHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCxhLHRoaXMu'@;
put 'ZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChkKSl9ZGVjb3JhdGVQcmV2ZW50RGVmYXVsdChsKXtyZXR1cm4gYT0+e2lmKCJfX25nVW53cmFwX18iPT09YSlyZXR1cm4gbDshMT09PSh0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI/dGhpcy5uZ1pvbmUucnVuR3VhcmRlZCgoKT0+bChhKSk6bChhKSkmJmEu'@;
put 'cHJldmVudERlZmF1bHQoKX19fWZ1bmN0aW9uIGJhZShjKXtyZXR1cm4iVEVNUExBVEUiPT09Yy50YWdOYW1lJiZ2b2lkIDAhPT1jLmNvbnRlbnR9Y2xhc3MgbUNlIGV4dGVuZHMgY1p7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxEKXtzdXBlcihsLGYsdixEKSx0aGlzLnNoYXJlZFN0eWxl'@;
put 'c0hvc3Q9YSx0aGlzLmhvc3RFbD1kLHRoaXMuc2hhZG93Um9vdD1kLmF0dGFjaFNoYWRvdyh7bW9kZToib3BlbiJ9KSx0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkSG9zdCh0aGlzLnNoYWRvd1Jvb3QpO2NvbnN0IFo9dmFlKGguaWQsaC5zdHlsZXMpO2Zvcihjb25zdCBuZSBvZiBaKXtjb25z'@;
put 'dCBjZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO00mJmNlLnNldEF0dHJpYnV0ZSgibm9uY2UiLE0pLGNlLnRleHRDb250ZW50PW5lLHRoaXMuc2hhZG93Um9vdC5hcHBlbmRDaGlsZChjZSl9fW5vZGVPclNoYWRvd1Jvb3QobCl7cmV0dXJuIGw9PT10aGlzLmhvc3RFbD90aGlz'@;
put 'LnNoYWRvd1Jvb3Q6bH1hcHBlbmRDaGlsZChsLGEpe3JldHVybiBzdXBlci5hcHBlbmRDaGlsZCh0aGlzLm5vZGVPclNoYWRvd1Jvb3QobCksYSl9aW5zZXJ0QmVmb3JlKGwsYSxkKXtyZXR1cm4gc3VwZXIuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhLGQpfXJlbW92'@;
put 'ZUNoaWxkKGwsYSl7cmV0dXJuIHN1cGVyLnJlbW92ZUNoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1wYXJlbnROb2RlKGwpe3JldHVybiB0aGlzLm5vZGVPclNoYWRvd1Jvb3Qoc3VwZXIucGFyZW50Tm9kZSh0aGlzLm5vZGVPclNoYWRvd1Jvb3QobCkpKX1kZXN0cm95KCl7dGhp'@;
put 'cy5zaGFyZWRTdHlsZXNIb3N0LnJlbW92ZUhvc3QodGhpcy5zaGFkb3dSb290KX19Y2xhc3MgdVogZXh0ZW5kcyBjWntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQpe3N1cGVyKGwsZix2LE0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1hLHRoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJv'@;
put 'eT1oLHRoaXMuc3R5bGVzPUQ/dmFlKEQsZC5zdHlsZXMpOmQuc3R5bGVzfWFwcGx5U3R5bGVzKCl7dGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZFN0eWxlcyh0aGlzLnN0eWxlcyl9ZGVzdHJveSgpe3RoaXMucmVtb3ZlU3R5bGVzT25Db21wRGVzdHJveSYmdGhpcy5zaGFyZWRTdHlsZXNIb3N0'@;
put 'LnJlbW92ZVN0eWxlcyh0aGlzLnN0eWxlcyl9fWNsYXNzIHlhZSBleHRlbmRzIHVae2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7Y29uc3QgWj1oKyItIitkLmlkO3N1cGVyKGwsYSxkLGYsdixNLEQsWiksdGhpcy5jb250ZW50QXR0cj1mdW5jdGlvbiBmQ2UoYyl7cmV0dXJuIl9uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlIi5yZXBsYWNlKHNaLGMpfShaKSx0aGlzLmhvc3RBdHRyPWZ1bmN0aW9uIHBDZShjKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2Uoc1osYyl9KFopfWFwcGx5VG9Ib3N0KGwpe3RoaXMuYXBwbHlTdHlsZXMoKSx0aGlzLnNldEF0dHJpYnV0ZShsLHRoaXMuaG9z'@;
put 'dEF0dHIsIiIpfWNyZWF0ZUVsZW1lbnQobCxhKXtjb25zdCBkPXN1cGVyLmNyZWF0ZUVsZW1lbnQobCxhKTtyZXR1cm4gc3VwZXIuc2V0QXR0cmlidXRlKGQsdGhpcy5jb250ZW50QXR0ciwiIiksZH19bGV0IHZDZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgcGFle2NvbnN0cnVjdG9yKGEpe3N1'@;
put 'cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiEwfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoZCxoLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKX1yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gYS5yZW1vdmVF'@;
put 'dmVudExpc3RlbmVyKGQsaCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBfYWU9WyJhbHQi'@;
put 'LCJjb250cm9sIiwibWV0YSIsInNoaWZ0Il0sYkNlPXsiXGIiOiJCYWNrc3BhY2UiLCJcdCI6IlRhYiIsIlx4N2YiOiJEZWxldGUiLCJceDFiIjoiRXNjYXBlIixEZWw6IkRlbGV0ZSIsRXNjOiJFc2NhcGUiLExlZnQ6IkFycm93TGVmdCIsUmlnaHQ6IkFycm93UmlnaHQiLFVwOiJBcnJvd1Vw'@;
put 'IixEb3duOiJBcnJvd0Rvd24iLE1lbnU6IkNvbnRleHRNZW51IixTY3JvbGw6IlNjcm9sbExvY2siLFdpbjoiT1MifSx5Q2U9e2FsdDpjPT5jLmFsdEtleSxjb250cm9sOmM9PmMuY3RybEtleSxtZXRhOmM9PmMubWV0YUtleSxzaGlmdDpjPT5jLnNoaWZ0S2V5fTtsZXQgX0NlPSgoKT0+e2Ns'@;
put 'YXNzIGMgZXh0ZW5kcyBwYWV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3VwcG9ydHMoYSl7cmV0dXJuIG51bGwhPWMucGFyc2VFdmVudE5hbWUoYSl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7Y29uc3QgZj1jLnBhcnNlRXZlbnROYW1lKGQpLHY9Yy5ldmVudENhbGxiYWNrKGYuZnVsbEtl'@;
put 'eSxoLHRoaXMubWFuYWdlci5nZXRab25lKCkpO3JldHVybiB0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5lbSgpLm9uQW5kQ2FuY2VsKGEsZi5kb21FdmVudE5hbWUsdikpfXN0YXRpYyBwYXJzZUV2ZW50TmFtZShhKXtjb25zdCBkPWEudG9Mb3dlckNhc2Uo'@;
put 'KS5zcGxpdCgiLiIpLGg9ZC5zaGlmdCgpO2lmKDA9PT1kLmxlbmd0aHx8ImtleWRvd24iIT09aCYmImtleXVwIiE9PWgpcmV0dXJuIG51bGw7Y29uc3QgZj1jLl9ub3JtYWxpemVLZXkoZC5wb3AoKSk7bGV0IHY9IiIsTT1kLmluZGV4T2YoImNvZGUiKTtpZihNPi0xJiYoZC5zcGxpY2UoTSwx'@;
put 'KSx2PSJjb2RlLiIpLF9hZS5mb3JFYWNoKFo9Pntjb25zdCBuZT1kLmluZGV4T2YoWik7bmU+LTEmJihkLnNwbGljZShuZSwxKSx2Kz1aKyIuIil9KSx2Kz1mLDAhPWQubGVuZ3RofHwwPT09Zi5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3QgRD17fTtyZXR1cm4gRC5kb21FdmVudE5hbWU9aCxE'@;
put 'LmZ1bGxLZXk9dixEfXN0YXRpYyBtYXRjaEV2ZW50RnVsbEtleUNvZGUoYSxkKXtsZXQgaD1iQ2VbYS5rZXldfHxhLmtleSxmPSIiO3JldHVybiBkLmluZGV4T2YoImNvZGUuIik+LTEmJihoPWEuY29kZSxmPSJjb2RlLiIpLCEobnVsbD09aHx8IWgpJiYoaD1oLnRvTG93ZXJDYXNlKCksIiAi'@;
put 'PT09aD9oPSJzcGFjZSI6Ii4iPT09aCYmKGg9ImRvdCIpLF9hZS5mb3JFYWNoKHY9Pnt2IT09aCYmKDAseUNlW3ZdKShhKSYmKGYrPXYrIi4iKX0pLGYrPWgsZj09PWQpfXN0YXRpYyBldmVudENhbGxiYWNrKGEsZCxoKXtyZXR1cm4gZj0+e2MubWF0Y2hFdmVudEZ1bGxLZXlDb2RlKGYsYSkm'@;
put 'JmgucnVuR3VhcmRlZCgoKT0+ZChmKSl9fXN0YXRpYyBfbm9ybWFsaXplS2V5KGEpe3JldHVybiJlc2MiPT09YT8iZXNjYXBlIjphfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rv'@;
put 'a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgQ2FlPVt7cHJvdmlkZTpvYSx1c2VWYWx1ZToiYnJvd3NlciJ9LHtwcm92aWRlOkxrLHVzZVZhbHVlOmZ1bmN0aW9uIHdDZSgpe3JaLm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTp2cyx1c2VG'@;
put 'YWN0b3J5OmZ1bmN0aW9uIFNDZSgpe3JldHVybiBmdW5jdGlvbiBvQihjKXtUQz1jfShkb2N1bWVudCksZG9jdW1lbnR9LGRlcHM6W119XSxNQ2U9UWllKHh5ZSwiYnJvd3NlciIsQ2FlKSx4Q2U9bmV3IFN0KCIiKSxTYWU9W3twcm92aWRlOlFJLHVzZUNsYXNzOmNsYXNzIHNDZXthZGRUb1dp'@;
put 'bmRvdyhsKXtWdC5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGQsaD0hMCk9Pntjb25zdCBmPWwuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGQsaCk7aWYobnVsbD09Zil0aHJvdyBuZXcgUW4oNTEwMywhMSk7cmV0dXJuIGZ9LFZ0LmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT5sLmdldEFs'@;
put 'bFRlc3RhYmlsaXRpZXMoKSxWdC5nZXRBbGxBbmd1bGFyUm9vdEVsZW1lbnRzPSgpPT5sLmdldEFsbFJvb3RFbGVtZW50cygpLFZ0LmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoVnQuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLFZ0LmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goZD0+e2NvbnN0'@;
put 'IGg9VnQuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKTtsZXQgZj1oLmxlbmd0aDtjb25zdCB2PWZ1bmN0aW9uKCl7Zi0tLDA9PWYmJmQoKX07aC5mb3JFYWNoKE09PntNLndoZW5TdGFibGUodil9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEsZCl7cmV0dXJuIG51bGw9PWE/bnVs'@;
put 'bDpsLmdldFRlc3RhYmlsaXR5KGEpPz8oZD9lbSgpLmlzU2hhZG93Um9vdChhKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX0sZGVwczpbXX0se3Byb3ZpZGU6emll'@;
put 'LHVzZUNsYXNzOlNVLGRlcHM6W1lvLE1VLFFJXX0se3Byb3ZpZGU6U1UsdXNlQ2xhc3M6U1UsZGVwczpbWW8sTVUsUUldfV0sTWFlPVt7cHJvdmlkZTpQNix1c2VWYWx1ZToicm9vdCJ9LHtwcm92aWRlOmcyLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gQ0NlKCl7cmV0dXJuIG5ldyBnMn0sZGVwczpb'@;
put 'XX0se3Byb3ZpZGU6aVosdXNlQ2xhc3M6dkNlLG11bHRpOiEwLGRlcHM6W3ZzLFlvLG9hXX0se3Byb3ZpZGU6aVosdXNlQ2xhc3M6X0NlLG11bHRpOiEwLGRlcHM6W3ZzXX0sbFosZ2FlLGZhZSx7cHJvdmlkZTpNOCx1c2VFeGlzdGluZzpsWn0se3Byb3ZpZGU6aWFlLHVzZUNsYXNzOmxDZSxk'@;
put 'ZXBzOltdfSxbXV07bGV0IHhhZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgd2l0aFNlcnZlclRyYW5zaXRpb24oYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTpZdix1c2VWYWx1ZTphLmFwcElkfV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHhDZSwxMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOlsuLi5NYWUsLi4uU2FlXSxpbXBvcnRzOltMbyxFeWVdfSl9fXJldHVybiBjfSkoKSxFQ2U9'@;
put 'KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2M9YX1nZXRUaXRsZSgpe3JldHVybiB0aGlzLl9kb2MudGl0bGV9c2V0VGl0bGUoYSl7dGhpcy5fZG9jLnRpdGxlPWF8fCIifXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHZz'@;
put 'KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7XygzNzQ4MiksXyg4MDY4NSk7Y29uc3QgZFo9e2ZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVD'@;
put 'bGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LEtuPXtyb290UGFyYW06IiIsZGNMaWI6IiIseGxtYXBzOltdLGVkaXRvcjp7c3RhcnR1cFNldDohMSx0cmVlTm9kZUxpYnJhcmllczpbXSxsaWJzQW5kVGFibGVzOltdLGxpYnJhcmllczpbXSxsaWJyYXJ5OiIiLHRhYmxl'@;
put 'OiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LHZpZXdlcjp7c3RhcnR1cFNldDohMSx0YWJsZXNTZXQ6ITEsbGlicmFyaWVzOltdLHRhYmxlczpudWxsLGxpYnJhcnk6IiIsdGFibGU6'@;
put 'IiIsbGliaW5mbzpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfSxjdXJyZW50U2VsZWN0aW9uOiIifSx2aWV3Ym94ZXM6e30sbGluZWFnZTp7bGlicmFy'@;
put 'eUxpc3Q6W10sdGFibGVzTGlzdDpbXSxjb2x1bW5zTGlzdDpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsbGliOiIiLHRhYmxlOiIiLGNvbHVtbjoiIixjdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZToiIixjdXJyZW50TGluZWFnZVBhdGhDb2x1bW46IiJ9LG1ldGFkYXRhOnttZXRhRGF0YUxpc3Q6'@;
put 'dm9pZCAwLG1ldGFEYXRhU2VhcmNoOiIiLG1ldGFPYmplY3RMaXN0OltdLG1ldGFPYmplY3RTZWFyY2g6IiIsbWV0YVJlcG9zaXRvcmllczp2b2lkIDAsc2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx2aXlhQXBpOntjb2xsZWN0aW9uc0xpc3Q6dm9pZCAwLGNvbGxlY3Rpb25zU2VhcmNoOiIiLHNl'@;
put 'bGVjdGVkUmVwb3NpdG9yeToiIn0sdXNlcm5hdjp7dXNlckxpc3Q6dm9pZCAwLHVzZXJTZWFyY2g6IiIsZ3JvdXBMaXN0OnZvaWQgMCxncm91cFNlYXJjaDoiIixyb2xlTGlzdDp2b2lkIDAscm9sZVNlYXJjaDoiIn0sb3BlcmF0b3JzOntudW1PcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIs'@;
put 'Ij49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSxjaGFyT3BlcmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4iLCJOT1QgSU4iLCJORSJdfSxoYW5kc29udGFibGU6e2RhcmtUYWJsZUhlYWRlckNsYXNzOiJkYXJrVEgifX07dmFyIE9hPV8oOTc1ODYp'@;
put 'LGthZT1fLm4oT2EpO2Z1bmN0aW9uIERhZShjLGwpe3N3aXRjaChjKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAyOnJl'@;
put 'dHVybiBmdW5jdGlvbihhLGQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihhLGQsaCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYpe3JldHVybiBsLmFwcGx5KHRoaXMs'@;
put 'YXJndW1lbnRzKX07Y2FzZSA1OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA2OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDc6cmV0dXJuIGZ1bmN0'@;
put 'aW9uKGEsZCxoLGYsdixNLEQpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxELFope3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA5OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxELFosbmUp'@;
put 'e3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAxMDpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0sRCxaLG5lLGNlKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBfYXJpdHkgbXVz'@;
put 'dCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiB0ZW4iKX19ZnVuY3Rpb24gdG0oYyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgYyYmITA9PT1jWyJAQGZ1bmN0aW9uYWwvcGxhY2Vob2xkZXIiXX1mdW5jdGlvbiBlZyhjKXtyZXR1cm4gZnVuY3Rp'@;
put 'b24gbChhKXtyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGh8fHRtKGEpP2w6Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIEdiKGMpe3JldHVybiBmdW5jdGlvbiBsKGEsZCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbDtjYXNlIDE6cmV0dXJuIHRt'@;
put 'KGEpP2w6ZWcoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pO2RlZmF1bHQ6cmV0dXJuIHRtKGEpJiZ0bShkKT9sOnRtKGEpP2VnKGZ1bmN0aW9uKGgpe3JldHVybiBjKGgsZCl9KTp0bShkKT9lZyhmdW5jdGlvbihoKXtyZXR1cm4gYyhhLGgpfSk6YyhhLGQpfX19ZnVuY3Rpb24gSWFlKGMs'@;
put 'bCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0wLGY9Yyx2PTAsTT0hMTt2PGwubGVuZ3RofHxoPGFyZ3VtZW50cy5sZW5ndGg7KXt2YXIgRDt2PGwubGVuZ3RoJiYoIXRtKGxbdl0pfHxoPj1hcmd1bWVudHMubGVuZ3RoKT9EPWxbdl06KEQ9YXJndW1lbnRzW2hdLGgrPTEp'@;
put 'LGRbdl09RCx0bShEKT9NPSEwOmYtPTEsdis9MX1yZXR1cm4hTSYmZjw9MD9hLmFwcGx5KHRoaXMsZCk6RGFlKE1hdGgubWF4KDAsZiksSWFlKGMsZCxhKSl9fWNvbnN0IFJhZT1HYihmdW5jdGlvbihsLGEpe3JldHVybiAxPT09bD9lZyhhKTpEYWUobCxJYWUobCxbXSxhKSl9KSxMYWU9R2Io'@;
put 'ZnVuY3Rpb24obCxhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIGx8fG51bGwhPWEmJihhLmNvbnN0cnVjdG9yPT09bHx8Ik9iamVjdCI9PT1sLm5hbWUmJiJvYmplY3QiPT10eXBlb2YgYSl9KTtmdW5jdGlvbiBTUihjLGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh'@;
put 'bGwobCxjKX12YXIgT2FlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3QgUGFlPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PT1PYWUuY2FsbChhcmd1bWVudHMpP2Z1bmN0aW9uKGwpe3JldHVybiJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2FlLmNhbGwobCl9'@;
put 'OmZ1bmN0aW9uKGwpe3JldHVybiBTUigiY2FsbGVlIixsKX19KCksTENlPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZsLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKX07ZnVuY3Rpb24gRmFl'@;
put 'KGMpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfXZhciBGQ2U9ZWcoZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBsWyJmYW50YXN5LWxhbmQvZW1wdHkiXT9sWyJmYW50YXN5LWxhbmQvZW1w'@;
put 'dHkiXSgpOm51bGwhPWwmJm51bGwhPWwuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmNvbnN0cnVjdG9yWyJmYW50YXN5LWxhbmQvZW1wdHkiXT9sLmNvbnN0cnVjdG9yWyJmYW50YXN5LWxhbmQvZW1wdHkiXSgpOm51bGwhPWwmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmVtcHR5'@;
put 'P2wuZW1wdHkoKTpudWxsIT1sJiZudWxsIT1sLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgbC5jb25zdHJ1Y3Rvci5lbXB0eT9sLmNvbnN0cnVjdG9yLmVtcHR5KCk6TENlKGwpP1tdOkZhZShsKT8iIjpmdW5jdGlvbiBPQ2UoYyl7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT1P'@;
put 'YmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9KGwpP3t9OlBhZShsKT9mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCk6ZnVuY3Rpb24gUENlKGMpe3ZhciBsPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKTtyZXR1cm4iW29iamVjdCBVaW50OENsYW1wZWRBcnJh'@;
put 'eV0iPT09bHx8IltvYmplY3QgSW50OEFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50OEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50MTZBcnJheV0iPT09bHx8IltvYmplY3QgSW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgVWludDMyQXJyYXld'@;
put 'Ij09PWx8fCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iPT09bHx8IltvYmplY3QgRmxvYXQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdJbnQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdVaW50NjRBcnJheV0iPT09bH0obCk/bC5jb25zdHJ1Y3Rvci5mcm9tKCIiKTp2b2lkIDB9KTtjb25z'@;
put 'dCBIQ2U9RkNlO2Z1bmN0aW9uIEhhZShjKXtmb3IodmFyIGEsbD1bXTshKGE9Yy5uZXh0KCkpLmRvbmU7KWwucHVzaChhLnZhbHVlKTtyZXR1cm4gbH1mdW5jdGlvbiBOYWUoYyxsLGEpe2Zvcih2YXIgZD0wLGg9YS5sZW5ndGg7ZDxoOyl7aWYoYyhsLGFbZF0pKXJldHVybiEwO2QrPTF9cmV0'@;
put 'dXJuITF9Y29uc3QgaFo9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6ZnVuY3Rpb24gVkNlKGMsbCl7cmV0dXJuIGM9PT1sPzAhPT1jfHwxL2M9PTEvbDpjIT1jJiZsIT1sfTt2YXIgQkNlPSF7dG9TdHJpbmc6bnVsbH0ucHJvcGVydHlJc0VudW1lcmFibGUoInRvU3Ry'@;
put 'aW5nIiksVmFlPVsiY29uc3RydWN0b3IiLCJ2YWx1ZU9mIiwiaXNQcm90b3R5cGVPZiIsInRvU3RyaW5nIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJoYXNPd25Qcm9wZXJ0eSIsInRvTG9jYWxlU3RyaW5nIl0sQmFlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5wcm9wZXJ0eUlzRW51'@;
put 'bWVyYWJsZSgibGVuZ3RoIil9KCksakNlPWZ1bmN0aW9uKGwsYSl7Zm9yKHZhciBkPTA7ZDxsLmxlbmd0aDspe2lmKGxbZF09PT1hKXJldHVybiEwO2QrPTF9cmV0dXJuITF9O2NvbnN0IGphZT1lZygiZnVuY3Rpb24iIT10eXBlb2YgT2JqZWN0LmtleXN8fEJhZT9mdW5jdGlvbihsKXtpZihP'@;
put 'YmplY3QobCkhPT1sKXJldHVybltdO3ZhciBhLGQsaD1bXSxmPUJhZSYmUGFlKGwpO2ZvcihhIGluIGwpU1IoYSxsKSYmKCFmfHwibGVuZ3RoIiE9PWEpJiYoaFtoLmxlbmd0aF09YSk7aWYoQkNlKWZvcihkPVZhZS5sZW5ndGgtMTtkPj0wOylTUihhPVZhZVtkXSxsKSYmIWpDZShoLGEpJiYo'@;
put 'aFtoLmxlbmd0aF09YSksZC09MTtyZXR1cm4gaH06ZnVuY3Rpb24obCl7cmV0dXJuIE9iamVjdChsKSE9PWw/W106T2JqZWN0LmtleXMobCl9KSx6YWU9ZWcoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxsIjp2b2lkIDA9PT1sPyJVbmRlZmluZWQiOk9iamVjdC5wcm90b3R5cGUu'@;
put 'dG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9uIFVhZShjLGwsYSxkKXt2YXIgaD1IYWUoYyk7ZnVuY3Rpb24gdihNLEQpe3JldHVybiBmWihNLEQsYS5zbGljZSgpLGQuc2xpY2UoKSl9cmV0dXJuIU5hZShmdW5jdGlvbihNLEQpe3JldHVybiFOYWUodixELE0pfSxIYWUo'@;
put 'bCksaCl9ZnVuY3Rpb24gZlooYyxsLGEsZCl7aWYoaFooYyxsKSlyZXR1cm4hMDt2YXIgaD16YWUoYyk7aWYoaCE9PXphZShsKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgY1siZmFudGFzeS1sYW5kL2VxdWFscyJdfHwiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5k'@;
put 'L2VxdWFscyJdKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0mJmNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXShsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGxbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSYmbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdKGMpO2lm'@;
put 'KCJmdW5jdGlvbiI9PXR5cGVvZiBjLmVxdWFsc3x8ImZ1bmN0aW9uIj09dHlwZW9mIGwuZXF1YWxzKXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjLmVxdWFscyYmYy5lcXVhbHMobCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmVxdWFscyYmbC5lcXVhbHMoYyk7c3dpdGNoKGgpe2Nhc2UiQXJn'@;
put 'dW1lbnRzIjpjYXNlIkFycmF5IjpjYXNlIk9iamVjdCI6aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuY29uc3RydWN0b3ImJiJQcm9taXNlIj09PWZ1bmN0aW9uIE5DZShjKXt2YXIgbD1TdHJpbmcoYykubWF0Y2goL15mdW5jdGlvbiAoXHcqKS8pO3JldHVybiBudWxsPT1sPyIiOmxbMV19KGMu'@;
put 'Y29uc3RydWN0b3IpKXJldHVybiBjPT09bDticmVhaztjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6aWYodHlwZW9mIGMhPXR5cGVvZiBsfHwhaFooYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkpKXJldHVybiExO2JyZWFrO2Nhc2UiRGF0ZSI6aWYoIWhaKGMudmFsdWVP'@;
put 'ZigpLGwudmFsdWVPZigpKSlyZXR1cm4hMTticmVhaztjYXNlIkVycm9yIjpyZXR1cm4gYy5uYW1lPT09bC5uYW1lJiZjLm1lc3NhZ2U9PT1sLm1lc3NhZ2U7Y2FzZSJSZWdFeHAiOmlmKGMuc291cmNlIT09bC5zb3VyY2V8fGMuZ2xvYmFsIT09bC5nbG9iYWx8fGMuaWdub3JlQ2FzZSE9PWwu'@;
put 'aWdub3JlQ2FzZXx8Yy5tdWx0aWxpbmUhPT1sLm11bHRpbGluZXx8Yy5zdGlja3khPT1sLnN0aWNreXx8Yy51bmljb2RlIT09bC51bmljb2RlKXJldHVybiExfWZvcih2YXIgZj1hLmxlbmd0aC0xO2Y+PTA7KXtpZihhW2ZdPT09YylyZXR1cm4gZFtmXT09PWw7Zi09MX1zd2l0Y2goaCl7Y2Fz'@;
put 'ZSJNYXAiOnJldHVybiBjLnNpemU9PT1sLnNpemUmJlVhZShjLmVudHJpZXMoKSxsLmVudHJpZXMoKSxhLmNvbmNhdChbY10pLGQuY29uY2F0KFtsXSkpO2Nhc2UiU2V0IjpyZXR1cm4gYy5zaXplPT09bC5zaXplJiZVYWUoYy52YWx1ZXMoKSxsLnZhbHVlcygpLGEuY29uY2F0KFtjXSksZC5j'@;
put 'b25jYXQoW2xdKSk7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjpjYXNlIkJvb2xlYW4iOmNhc2UiTnVtYmVyIjpjYXNlIlN0cmluZyI6Y2FzZSJEYXRlIjpjYXNlIkVycm9yIjpjYXNlIlJlZ0V4cCI6Y2FzZSJJbnQ4QXJyYXkiOmNhc2UiVWludDhBcnJheSI6Y2Fz'@;
put 'ZSJVaW50OENsYW1wZWRBcnJheSI6Y2FzZSJJbnQxNkFycmF5IjpjYXNlIlVpbnQxNkFycmF5IjpjYXNlIkludDMyQXJyYXkiOmNhc2UiVWludDMyQXJyYXkiOmNhc2UiRmxvYXQzMkFycmF5IjpjYXNlIkZsb2F0NjRBcnJheSI6Y2FzZSJBcnJheUJ1ZmZlciI6YnJlYWs7ZGVmYXVsdDpyZXR1'@;
put 'cm4hMX12YXIgdj1qYWUoYyk7aWYodi5sZW5ndGghPT1qYWUobCkubGVuZ3RoKXJldHVybiExO3ZhciBNPWEuY29uY2F0KFtjXSksRD1kLmNvbmNhdChbbF0pO2ZvcihmPXYubGVuZ3RoLTE7Zj49MDspe3ZhciBaPXZbZl07aWYoIVNSKFosbCl8fCFmWihsW1pdLGNbWl0sTSxEKSlyZXR1cm4h'@;
put 'MTtmLT0xfXJldHVybiEwfWNvbnN0IFdDZT1HYihmdW5jdGlvbihsLGEpe3JldHVybiBmWihsLGEsW10sW10pfSksWmFlPWVnKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZXQ2UobCxIQ2UobCkpfSk7ZnVuY3Rpb24gSU0oYyl7cmV0dXJuIG51bGw9PWN9ZnVuY3Rpb24gUk0oYyl7cmV0'@;
put 'dXJuIElNKGMpfHxaYWUoYyl9ZnVuY3Rpb24gcFooYyl7cmV0dXJuIExhZShTdHJpbmcsYyl9ZnVuY3Rpb24gR2FlKGMsbCl7cmV0dXJuIGMhPT1sfWZ1bmN0aW9uIFhhZShjPXdpbmRvdyl7cmV0dXJuIUlNKGMpfWNvbnN0IHRTZT1OdW1iZXIuaXNJbnRlZ2VyfHxmdW5jdGlvbihsKXtyZXR1'@;
put 'cm4oMHxsKT09PWx9LHJTZT1HYihmdW5jdGlvbihsLGEpe3ZhciBkPWw8MD9hLmxlbmd0aCtsOmw7cmV0dXJuIEZhZShhKT9hLmNoYXJBdChkKTphW2RdfSksb1NlPUdiKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFwKGZ1bmN0aW9uKGQpe2Zvcih2YXIgdixoPWEsZj0wO2Y8ZC5sZW5ndGg7'@;
put 'KXtpZihudWxsPT1oKXJldHVybjtoPXRTZSh2PWRbZl0pP3JTZSh2LGgpOmhbdl0sZis9MX1yZXR1cm4gaH0pfSksc1NlPUdiKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIG9TZShbbF0sYSlbMF19KSxjU2U9UmFlKDIsKGMsbCk9PnZvaWQgMCE9PXNTZShjLGwpKSxKYWU9Y1NlKHsiQEBmdW5jdGlv'@;
put 'bmFsL3BsYWNlaG9sZGVyIjohMH0sd2luZG93KTtsZXQgeFIsUWFlLGdaLG1aO2Z1bmN0aW9uIGVzZShjPSEwKXtpZighY3x8IXhSKXtjb25zdCBsPWRvY3VtZW50JiZkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbbmctdmVyc2lvbl0iKTt4Uj1sPyIiK2wuZ2V0QXR0cmlidXRlKCJuZy12ZXJz'@;
put 'aW9uIik6dm9pZCAwfXJldHVybiB4Un1mdW5jdGlvbiBkU2UoYz0hMCl7cmV0dXJuIGMmJnhSfHwoUWFlPXdpbmRvdz8uYW5ndWxhcj8udmVyc2lvbj8uZnVsbCksUWFlfWZ1bmN0aW9uIHRzZShjPSEwKXtyZXR1cm4gYyYmZ1p8fChnWj13aW5kb3c/LkNEUz8uX3JlYWN0Py52ZXJzaW9uP3dp'@;
put 'bmRvdy5DRFMuX3JlYWN0LnZlcnNpb246ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW2RhdGEtcmVhY3Ryb290XSwgW2RhdGEtcmVhY3RpZF0iKT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDApLGdafWZ1bmN0aW9uIG5zZShjPSEwKXtpZighY3x8IW1aKXtjb25zdCBsPWRvY3VtZW50LnF1ZXJ5'@;
put 'U2VsZWN0b3JBbGwoIioiKTtsZXQgYTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKylpZihsW2RdLl9fdnVlX18pe2E9bFtkXTticmVha31tWj1hPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMH1yZXR1cm4gbVp9ZnVuY3Rpb24gWjgoYyl7cmV0dXJuIGMucmVwbGFjZSgvW0EtWl0vZyxsPT4i'@;
put 'LSIrbC50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBvc2UoYyl7cmV0dXJuIGMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKX1jb25zdCB2U2U9bmV3IGNsYXNze2NvbnN0cnVjdG9yKCl7aWYodGhpcy5zdXBwb3J0cz17anM6ITB9LCFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0'@;
put 'ZSgiY2RzLXN1cHBvcnRzIil8fCJuby1qcyI9PT1kb2N1bWVudC5ib2R5LmdldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIikpe2NvbnN0IGM9WjgoT2JqZWN0LmtleXModGhpcy5zdXBwb3J0cykucmVkdWNlKChsLGEpPT5gJHtsfSAke3RoaXMuc3VwcG9ydHNbYV0/YToibm8tIithfWAsIiIp'@;
put 'KS50cmltKCk7ZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIsYyl9fX07Y2xhc3MgTE17c3RhdGljIGxvZyguLi5sKXt5WigpJiZiWigpJiZjb25zb2xlLmxvZyguLi5sKX1zdGF0aWMgd2FybiguLi5sKXt5WigpJiZiWigpJiZjb25zb2xlLndhcm4oLi4ubCl9c3Rh'@;
put 'dGljIGVycm9yKC4uLmwpe3laKCkmJmJaKCkmJmNvbnNvbGUuZXJyb3IoLi4ubCl9fWZ1bmN0aW9uIGJaKCl7cmV0dXJuIUphZShbImphc21pbmUiXSl9ZnVuY3Rpb24geVooKXtyZXR1cm4hd2luZG93LkNEUy5lbnZpcm9ubWVudC5wcm9kdWN0aW9ufWZ1bmN0aW9uIGxzZSgpe1hhZSgpJiYo'@;
put 'd2luZG93LkNEUz13aW5kb3cuQ0RTfHx7X3ZlcnNpb246W10sX3JlYWN0Ont2ZXJzaW9uOnZvaWQgMH0sX3N1cHBvcnRzOnZTZS5zdXBwb3J0cyxfaXNTdGF0ZVByb3hpZWQ6ITEsX3N0YXRlOntmb2N1c1RyYXBJdGVtczpbXSxsYXllckVsZW1lbnRzOltdLGkxOG5SZWdpc3RyeTp7fSxlbGVt'@;
put 'ZW50UmVnaXN0cnk6e30saWNvblJlZ2lzdHJ5Ont9LG1vdGlvblJlZ2lzdHJ5Ont9fSxlbnZpcm9ubWVudDp7cHJvZHVjdGlvbjohMX0sZ2V0RGV0YWlsczpjc2UsbG9nRGV0YWlsczpiU2V9LGZ1bmN0aW9uKCl7Y29uc3QgYz0iNi4xNS4xIjt3aW5kb3cuQ0RTLl92ZXJzaW9uLmluZGV4T2Yo'@;
put 'Yyk8MCYmKHdpbmRvdy5DRFMuX3ZlcnNpb24ucHVzaChjKSxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik/LnNldEF0dHJpYnV0ZSgiY2RzLXZlcnNpb24iLHdpbmRvdy5DRFMuX3ZlcnNpb24uam9pbigiICIpKSksd2luZG93LkNEUy5fdmVyc2lvbi5sZW5ndGg+MSYmTE0ud2Fybigi'@;
put 'UnVubmluZyBtb3JlIHRoYW4gb25lIHZlcnNpb24gb2YgQ2xhcml0eSBjYW4gY2F1c2UgdW5leHBlY3RlZCBpc3N1ZXMuIFBsZWFzZSBlbnN1cmUgb25seSBvbmUgdmVyc2lvbiBpcyBsb2FkZWQuIil9KCksd2luZG93LkNEUy5faXNTdGF0ZVByb3hpZWR8fCh3aW5kb3cuQ0RTLl9pc1N0YXRl'@;
put 'UHJveGllZD0hMCx3aW5kb3cuQ0RTLl9zdGF0ZT1uZXcgUHJveHkod2luZG93LkNEUy5fc3RhdGUse3NldDooYyxsLGEpPT57Y29uc3QgZD17a2V5OmwscHJldjp3aW5kb3cuQ0RTLl9zdGF0ZVtsXSxjdXJyZW50OmF9O3JldHVybiBjW2xdPWEsZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcg'@;
put 'Q3VzdG9tRXZlbnQoIkNEU19TVEFURV9VUERBVEUiLHtkZXRhaWw6ZH0pKSwhMH19KSkpfWZ1bmN0aW9uIGNzZSgpe3JldHVybnt2ZXJzaW9uczp3aW5kb3cuQ0RTLl92ZXJzaW9uLGVudmlyb25tZW50OndpbmRvdy5DRFMuZW52aXJvbm1lbnQsdXNlckFnZW50Om5hdmlnYXRvci51c2VyQWdl'@;
put 'bnQsc3VwcG9ydHM6d2luZG93LkNEUy5fc3VwcG9ydHMsYW5ndWxhclZlcnNpb246ZXNlKCExKSxhbmd1bGFySlNWZXJzaW9uOmRTZSghMSkscmVhY3RWZXJzaW9uOnRzZSghMSksdnVlVmVyc2lvbjpuc2UoITEpLHN0YXRlOnsuLi53aW5kb3cuQ0RTLl9zdGF0ZSxpY29uUmVnaXN0cnk6T2Jq'@;
put 'ZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuaWNvblJlZ2lzdHJ5KSxtb3Rpb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5tb3Rpb25SZWdpc3RyeSksZm9jdXNUcmFwUmVnaXN0cnk6T2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZm9jdXNUcmFwSXRlbXMu'@;
put 'bWFwKGM9PmMuZm9jdXNUcmFwSWQpKX19fWZ1bmN0aW9uIGJTZSgpe0xNLmxvZyhKU09OLnN0cmluZ2lmeShjc2UoKSxudWxsLDIpKX1jb25zdCB5U2U9UmFlKDMsKGMsbCxhKT0+eyFmdW5jdGlvbiB1U2UoYyxsKXtyZXR1cm4gbHx8KGw9d2luZG93JiZ3aW5kb3cuY3VzdG9tRWxlbWVudHMp'@;
put 'LCFsfHwhIWwuZ2V0KGMpfShjKXx8ZnVuY3Rpb24gaFNlKCl7cmV0dXJuIHdpbmRvdz8ubG9jYXRpb24/LmhyZWY/LmluY2x1ZGVzKCJsb2NhbGhvc3Q6NjAwNiIpfSgpPyhhLmRlZmluZShjLGwpLGxzZSgpLHdpbmRvdyYmIU9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRS'@;
put 'ZWdpc3RyeSkuc29tZShkPT5kPT09YykmJih3aW5kb3cuQ0RTLl9zdGF0ZS5lbGVtZW50UmVnaXN0cnk9ey4uLndpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeSxbY106e319KSk6TE0ud2FybihjKyIgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkIil9KTtmdW5jdGlvbiBCZihj'@;
put 'LGwsYSxkKXt2YXIgdixoPWFyZ3VtZW50cy5sZW5ndGgsZj1oPDM/bDpudWxsPT09ZD9kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobCxhKTpkO2lmKCJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUpZj1SZWZsZWN0'@;
put 'LmRlY29yYXRlKGMsbCxhLGQpO2Vsc2UgZm9yKHZhciBNPWMubGVuZ3RoLTE7TT49MDtNLS0pKHY9Y1tNXSkmJihmPShoPDM/dihmKTpoPjM/dihsLGEsZik6dihsLGEpKXx8Zik7cmV0dXJuIGg+MyYmZiYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGwsYSxmKSxmfWZ1bmN0aW9uIG5tKGMpe3Jl'@;
put 'dHVybiB0aGlzIGluc3RhbmNlb2Ygbm0/KHRoaXMudj1jLHRoaXMpOm5ldyBubShjKX1mdW5jdGlvbiBmc2UoYyl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBhLGw9Y1tTeW1i'@;
put 'b2wuYXN5bmNJdGVyYXRvcl07cmV0dXJuIGw/bC5jYWxsKGMpOihjPWZ1bmN0aW9uIFNaKGMpe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcixhPWwmJmNbbF0sZD0wO2lmKGEpcmV0dXJuIGEuY2FsbChjKTtpZihjJiYibnVtYmVyIj09dHlwZW9mIGMu'@;
put 'bGVuZ3RoKXJldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGMmJmQ+PWMubGVuZ3RoJiYoYz12b2lkIDApLHt2YWx1ZTpjJiZjW2QrK10sZG9uZTohY319fTt0aHJvdyBuZXcgVHlwZUVycm9yKGw/Ik9iamVjdCBpcyBub3QgaXRlcmFibGUuIjoiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBk'@;
put 'ZWZpbmVkLiIpfShjKSxhPXt9LGQoIm5leHQiKSxkKCJ0aHJvdyIpLGQoInJldHVybiIpLGFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGEpO2Z1bmN0aW9uIGQoZil7YVtmXT1jW2ZdJiZmdW5jdGlvbih2KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rp'@;
put 'b24oTSxEKXshZnVuY3Rpb24gaChmLHYsTSxEKXtQcm9taXNlLnJlc29sdmUoRCkudGhlbihmdW5jdGlvbihaKXtmKHt2YWx1ZTpaLGRvbmU6TX0pfSx2KX0oTSxELCh2PWNbZl0odikpLmRvbmUsdi52YWx1ZSl9KX19fSJmdW5jdGlvbiI9PXR5cGVvZiBTdXBwcmVzc2VkRXJyb3ImJlN1cHBy'@;
put 'ZXNzZWRFcnJvcjtsZXQgcHNlPSExO2Z1bmN0aW9uIFlTZShjKXtpZigoYz1NYXRoLnRydW5jKGMpfHwwKTwwJiYoYys9dGhpcy5sZW5ndGgpLCEoYzwwfHxjPj10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXNbY119aWYoIXBzZSl7cHNlPSEwO2NvbnN0IGM9UmVmbGVjdC5nZXRQcm90b3R5cGVP'@;
put 'ZihJbnQ4QXJyYXkpO2Zvcihjb25zdCBsIG9mW0FycmF5LFN0cmluZyxjXSlPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsImF0Iix7dmFsdWU6WVNlLHdyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSl9bGV0IGdzZT0hMSxtc2U9ITE7ZnVuY3Rpb24g'@;
put 'dnNlKGMsbCxhKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxhLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUobCk/dGhpcy5nZXRBdHRyaWJ1dGUobCk6bnVsbH0sc2V0OmZ1bmN0aW9uKGQpe251bGwhPT1kP3Ro'@;
put 'aXMuc2V0QXR0cmlidXRlKGwsZCk6dGhpcy5yZW1vdmVBdHRyaWJ1dGUobCl9fSl9Z3NlfHxFbGVtZW50LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgicm9sZSIpfHwodnNlKEVsZW1lbnQucHJvdG90eXBlLCJyb2xlIiwicm9sZSIpLGdzZT0hMCksbXNlfHxFbGVtZW50LnByb3RvdHlwZS5o'@;
put 'YXNPd25Qcm9wZXJ0eSgiYXJpYUxhYmVsIil8fChtc2U9ITAsWyJBY3RpdmVEZXNjZW5kYW50IiwiQXRvbWljIiwiQXV0b0NvbXBsZXRlIiwiQnVzeSIsIkNoZWNrZWQiLCJDb2xDb3VudCIsIkNvbEluZGV4IiwiQ29sU3BhbiIsIkNvbnRyb2xzIiwiQ3VycmVudCIsIkRlc2NyaWJlZEJ5Iiwi'@;
put 'RGV0YWlscyIsIkRpc2FibGVkIiwiRXJyb3JNZXNzYWdlIiwiRXhwYW5kZWQiLCJGbG93VG8iLCJIYXNQb3B1cCIsIkhpZGRlbiIsIkludmFsaWQiLCJLZXlTaG9ydGN1dHMiLCJMYWJlbCIsIkxhYmVsbGVkQnkiLCJMZXZlbCIsIkxpdmUiLCJNb2RhbCIsIk11bHRpTGluZSIsIk11bHRpU2Vs'@;
put 'ZWN0YWJsZSIsIk9yaWVudGF0aW9uIiwiT3ducyIsIlBsYWNlaG9sZGVyIiwiUG9zSW5TZXQiLCJQcmVzc2VkIiwiUmVhZE9ubHkiLCJSZWxldmFudCIsIlJlcXVpcmVkIiwiUm9sZURlc2NyaXB0aW9uIiwiUm93Q291bnQiLCJSb3dJbmRleCIsIlJvd1NwYW4iLCJTZWxlY3RlZCIsIlNldFNp'@;
put 'emUiLCJTb3J0IiwiVmFsdWVNYXgiLCJWYWx1ZU1pbiIsIlZhbHVlTm93IiwiVmFsdWVUZXh0Il0uZm9yRWFjaChjPT52c2UoRWxlbWVudC5wcm90b3R5cGUsImFyaWEtIitjLnRvTG93ZXJDYXNlKCksImFyaWEiK2MpKSk7Y29uc3QgRVI9d2luZG93LHhaPUVSLlNoYWRvd1Jvb3QmJih2b2lk'@;
put 'IDA9PT1FUi5TaGFkeUNTU3x8RVIuU2hhZHlDU1MubmF0aXZlU2hhZG93KSYmImFkb3B0ZWRTdHlsZVNoZWV0cyJpbiBEb2N1bWVudC5wcm90b3R5cGUmJiJyZXBsYWNlImluIENTU1N0eWxlU2hlZXQucHJvdG90eXBlLEVaPVN5bWJvbCgpLGJzZT1uZXcgV2Vha01hcDtjbGFzcyB5c2V7Y29u'@;
put 'c3RydWN0b3IobCxhLGQpe2lmKHRoaXMuXyRjc3NSZXN1bHQkPSEwLGQhPT1FWil0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVhZC4iKTt0aGlzLmNzc1RleHQ9bCx0aGlzLnQ9YX1nZXQgc3R5bGVTaGVl'@;
put 'dCgpe2xldCBsPXRoaXMubztjb25zdCBhPXRoaXMudDtpZih4WiYmdm9pZCAwPT09bCl7Y29uc3QgZD12b2lkIDAhPT1hJiYxPT09YS5sZW5ndGg7ZCYmKGw9YnNlLmdldChhKSksdm9pZCAwPT09bCYmKCh0aGlzLm89bD1uZXcgQ1NTU3R5bGVTaGVldCkucmVwbGFjZVN5bmModGhpcy5jc3NU'@;
put 'ZXh0KSxkJiZic2Uuc2V0KGEsbCkpfXJldHVybiBsfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuY3NzVGV4dH19Y29uc3QgX3NlPShjLC4uLmwpPT57Y29uc3QgYT0xPT09Yy5sZW5ndGg/Y1swXTpsLnJlZHVjZSgoZCxoLGYpPT5kKyh2PT57aWYoITA9PT12Ll8kY3NzUmVzdWx0JClyZXR1cm4g'@;
put 'di5jc3NUZXh0O2lmKCJudW1iZXIiPT10eXBlb2YgdilyZXR1cm4gdjt0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIrdisiLiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1'@;
put 'ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuIil9KShoKStjW2YrMV0sY1swXSk7cmV0dXJuIG5ldyB5c2UoYSxjLEVaKX0sd3NlPXhaP2M9PmM6Yz0+YyBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/KGw9PntsZXQgYT0iIjtmb3IoY29uc3QgZCBvZiBsLmNzc1J1'@;
put 'bGVzKWErPWQuY3NzVGV4dDtyZXR1cm4oYz0+bmV3IHlzZSgic3RyaW5nIj09dHlwZW9mIGM/YzpjKyIiLHZvaWQgMCxFWikpKGEpfSkoYyk6Yzt2YXIgVFo7Y29uc3QgVFI9d2luZG93LENzZT1UUi50cnVzdGVkVHlwZXMsS1NlPUNzZT9Dc2UuZW1wdHlTY3JpcHQ6IiIsU3NlPVRSLnJlYWN0'@;
put 'aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCxBWj17dG9BdHRyaWJ1dGUoYyxsKXtzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmM9Yz9LU2U6bnVsbDticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OmM9bnVsbD09Yz9jOkpTT04uc3RyaW5naWZ5KGMpfXJldHVybiBjfSxmcm9tQXR0cmlidXRl'@;
put 'KGMsbCl7bGV0IGE9Yztzd2l0Y2gobCl7Y2FzZSBCb29sZWFuOmE9bnVsbCE9PWM7YnJlYWs7Y2FzZSBOdW1iZXI6YT1udWxsPT09Yz9udWxsOk51bWJlcihjKTticmVhaztjYXNlIE9iamVjdDpjYXNlIEFycmF5OnRyeXthPUpTT04ucGFyc2UoYyl9Y2F0Y2h7YT1udWxsfX1yZXR1cm4gYX19'@;
put 'LE1zZT0oYyxsKT0+bCE9PWMmJihsPT1sfHxjPT1jKSxrWj17YXR0cmlidXRlOiEwLHR5cGU6U3RyaW5nLGNvbnZlcnRlcjpBWixyZWZsZWN0OiExLGhhc0NoYW5nZWQ6TXNlfSxEWj0iZmluYWxpemVkIjtjbGFzcyAkYiBleHRlbmRzIEhUTUxFbGVtZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIo'@;
put 'KSx0aGlzLl8kRWk9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMSx0aGlzLmhhc1VwZGF0ZWQ9ITEsdGhpcy5fJEVsPW51bGwsdGhpcy5fJEV1KCl9c3RhdGljIGFkZEluaXRpYWxpemVyKGwpe3ZhciBhO3RoaXMuZmluYWxpemUoKSwobnVsbCE9PShhPXRoaXMuaCkmJnZvaWQgMCE9'@;
put 'PWE/YTp0aGlzLmg9W10pLnB1c2gobCl9c3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKXt0aGlzLmZpbmFsaXplKCk7Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5lbGVtZW50UHJvcGVydGllcy5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD10aGlzLl8kRXAoZCxhKTt2b2lkIDAhPT1oJiYo'@;
put 'dGhpcy5fJEV2LnNldChoLGQpLGwucHVzaChoKSl9KSxsfXN0YXRpYyBjcmVhdGVQcm9wZXJ0eShsLGE9a1ope2lmKGEuc3RhdGUmJihhLmF0dHJpYnV0ZT0hMSksdGhpcy5maW5hbGl6ZSgpLHRoaXMuZWxlbWVudFByb3BlcnRpZXMuc2V0KGwsYSksIWEubm9BY2Nlc3NvciYmIXRoaXMucHJv'@;
put 'dG90eXBlLmhhc093blByb3BlcnR5KGwpKXtjb25zdCBkPSJzeW1ib2wiPT10eXBlb2YgbD9TeW1ib2woKToiX18iK2wsaD10aGlzLmdldFByb3BlcnR5RGVzY3JpcHRvcihsLGQsYSk7dm9pZCAwIT09aCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMucHJvdG90eXBlLGwsaCl9fXN0YXRp'@;
put 'YyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxhLGQpe3JldHVybntnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGgpe2NvbnN0IGY9dGhpc1tsXTt0aGlzW2FdPWgsdGhpcy5yZXF1ZXN0VXBkYXRlKGwsZixkKX0sY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9fXN0YXRpYyBnZXRQcm9w'@;
put 'ZXJ0eU9wdGlvbnMobCl7cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZ2V0KGwpfHxrWn1zdGF0aWMgZmluYWxpemUoKXtpZih0aGlzLmhhc093blByb3BlcnR5KERaKSlyZXR1cm4hMTt0aGlzW0RaXT0hMDtjb25zdCBsPU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKTtpZihsLmZp'@;
put 'bmFsaXplKCksdm9pZCAwIT09bC5oJiYodGhpcy5oPVsuLi5sLmhdKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAobC5lbGVtZW50UHJvcGVydGllcyksdGhpcy5fJEV2PW5ldyBNYXAsdGhpcy5oYXNPd25Qcm9wZXJ0eSgicHJvcGVydGllcyIpKXtjb25zdCBhPXRoaXMucHJvcGVy'@;
put 'dGllcyxkPVsuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhKSwuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGEpXTtmb3IoY29uc3QgaCBvZiBkKXRoaXMuY3JlYXRlUHJvcGVydHkoaCxhW2hdKX1yZXR1cm4gdGhpcy5lbGVtZW50U3R5bGVzPXRoaXMuZmluYWxpemVTdHls'@;
put 'ZXModGhpcy5zdHlsZXMpLCEwfXN0YXRpYyBmaW5hbGl6ZVN0eWxlcyhsKXtjb25zdCBhPVtdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGQ9bmV3IFNldChsLmZsYXQoMS8wKS5yZXZlcnNlKCkpO2Zvcihjb25zdCBoIG9mIGQpYS51bnNoaWZ0KHdzZShoKSl9ZWxzZSB2b2lkIDAhPT1s'@;
put 'JiZhLnB1c2god3NlKGwpKTtyZXR1cm4gYX1zdGF0aWMgXyRFcChsLGEpe2NvbnN0IGQ9YS5hdHRyaWJ1dGU7cmV0dXJuITE9PT1kP3ZvaWQgMDoic3RyaW5nIj09dHlwZW9mIGQ/ZDoic3RyaW5nIj09dHlwZW9mIGw/bC50b0xvd2VyQ2FzZSgpOnZvaWQgMH1fJEV1KCl7dmFyIGw7dGhpcy5f'@;
put 'JEVfPW5ldyBQcm9taXNlKGE9PnRoaXMuZW5hYmxlVXBkYXRpbmc9YSksdGhpcy5fJEFMPW5ldyBNYXAsdGhpcy5fJEVnKCksdGhpcy5yZXF1ZXN0VXBkYXRlKCksbnVsbD09PShsPXRoaXMuY29uc3RydWN0b3IuaCl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT5hKHRoaXMpKX1hZGRDb250'@;
put 'cm9sbGVyKGwpe3ZhciBhLGQ7KG51bGwhPT0oYT10aGlzLl8kRVMpJiZ2b2lkIDAhPT1hP2E6dGhpcy5fJEVTPVtdKS5wdXNoKGwpLHZvaWQgMCE9PXRoaXMucmVuZGVyUm9vdCYmdGhpcy5pc0Nvbm5lY3RlZCYmKG51bGw9PT0oZD1sLmhvc3RDb25uZWN0ZWQpfHx2b2lkIDA9PT1kfHxkLmNh'@;
put 'bGwobCkpfXJlbW92ZUNvbnRyb2xsZXIobCl7dmFyIGE7bnVsbD09PShhPXRoaXMuXyRFUyl8fHZvaWQgMD09PWF8fGEuc3BsaWNlKHRoaXMuXyRFUy5pbmRleE9mKGwpPj4+MCwxKX1fJEVnKCl7dGhpcy5jb25zdHJ1Y3Rvci5lbGVtZW50UHJvcGVydGllcy5mb3JFYWNoKChsLGEpPT57dGhp'@;
put 'cy5oYXNPd25Qcm9wZXJ0eShhKSYmKHRoaXMuXyRFaS5zZXQoYSx0aGlzW2FdKSxkZWxldGUgdGhpc1thXSl9KX1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGw7Y29uc3QgYT1udWxsIT09KGw9dGhpcy5zaGFkb3dSb290KSYmdm9pZCAwIT09bD9sOnRoaXMuYXR0YWNoU2hhZG93KHRoaXMuY29u'@;
put 'c3RydWN0b3Iuc2hhZG93Um9vdE9wdGlvbnMpO3JldHVybigoYyxsKT0+e3haP2MuYWRvcHRlZFN0eWxlU2hlZXRzPWwubWFwKGE9PmEgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0P2E6YS5zdHlsZVNoZWV0KTpsLmZvckVhY2goYT0+e2NvbnN0IGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi'@;
put 'c3R5bGUiKSxoPUVSLmxpdE5vbmNlO3ZvaWQgMCE9PWgmJmQuc2V0QXR0cmlidXRlKCJub25jZSIsaCksZC50ZXh0Q29udGVudD1hLmNzc1RleHQsYy5hcHBlbmRDaGlsZChkKX0pfSkoYSx0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRTdHlsZXMpLGF9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIg'@;
put 'bDt2b2lkIDA9PT10aGlzLnJlbmRlclJvb3QmJih0aGlzLnJlbmRlclJvb3Q9dGhpcy5jcmVhdGVSZW5kZXJSb290KCkpLHRoaXMuZW5hYmxlVXBkYXRpbmcoITApLG51bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goYT0+e3ZhciBkO3JldHVybiBudWxsPT09KGQ9'@;
put 'YS5ob3N0Q29ubmVjdGVkKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jYWxsKGEpfSl9ZW5hYmxlVXBkYXRpbmcobCl7fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7bnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0o'@;
put 'ZD1hLmhvc3REaXNjb25uZWN0ZWQpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNhbGwoYSl9KX1hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sobCxhLGQpe3RoaXMuXyRBSyhsLGQpfV8kRU8obCxhLGQ9a1ope3ZhciBoO2NvbnN0IGY9dGhpcy5jb25zdHJ1Y3Rvci5fJEVwKGwsZCk7aWYodm9pZCAw'@;
put 'IT09ZiYmITA9PT1kLnJlZmxlY3Qpe2NvbnN0IHY9KHZvaWQgMCE9PShudWxsPT09KGg9ZC5jb252ZXJ0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnRvQXR0cmlidXRlKT9kLmNvbnZlcnRlcjpBWikudG9BdHRyaWJ1dGUoYSxkLnR5cGUpO3RoaXMuXyRFbD1sLG51bGw9PXY/dGhpcy5yZW1v'@;
put 'dmVBdHRyaWJ1dGUoZik6dGhpcy5zZXRBdHRyaWJ1dGUoZix2KSx0aGlzLl8kRWw9bnVsbH19XyRBSyhsLGEpe3ZhciBkO2NvbnN0IGg9dGhpcy5jb25zdHJ1Y3RvcixmPWguXyRFdi5nZXQobCk7aWYodm9pZCAwIT09ZiYmdGhpcy5fJEVsIT09Zil7Y29uc3Qgdj1oLmdldFByb3BlcnR5T3B0'@;
put 'aW9ucyhmKSxNPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmNvbnZlcnRlcj97ZnJvbUF0dHJpYnV0ZTp2LmNvbnZlcnRlcn06dm9pZCAwIT09KG51bGw9PT0oZD12LmNvbnZlcnRlcil8fHZvaWQgMD09PWQ/dm9pZCAwOmQuZnJvbUF0dHJpYnV0ZSk/di5jb252ZXJ0ZXI6QVo7dGhpcy5fJEVsPWYs'@;
put 'dGhpc1tmXT1NLmZyb21BdHRyaWJ1dGUoYSx2LnR5cGUpLHRoaXMuXyRFbD1udWxsfX1yZXF1ZXN0VXBkYXRlKGwsYSxkKXtsZXQgaD0hMDt2b2lkIDAhPT1sJiYoKChkPWR8fHRoaXMuY29uc3RydWN0b3IuZ2V0UHJvcGVydHlPcHRpb25zKGwpKS5oYXNDaGFuZ2VkfHxNc2UpKHRoaXNbbF0s'@;
put 'YSk/KHRoaXMuXyRBTC5oYXMobCl8fHRoaXMuXyRBTC5zZXQobCxhKSwhMD09PWQucmVmbGVjdCYmdGhpcy5fJEVsIT09bCYmKHZvaWQgMD09PXRoaXMuXyRFQyYmKHRoaXMuXyRFQz1uZXcgTWFwKSx0aGlzLl8kRUMuc2V0KGwsZCkpKTpoPSExKSwhdGhpcy5pc1VwZGF0ZVBlbmRpbmcmJmgm'@;
put 'Jih0aGlzLl8kRV89dGhpcy5fJEVqKCkpfV8kRWooKXt2YXIgbD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsLmlzVXBkYXRlUGVuZGluZz0hMDt0cnl7eWllbGQgbC5fJEVffWNhdGNoKGQpe1Byb21pc2UucmVqZWN0KGQpfWNvbnN0IGE9bC5zY2hlZHVsZVVwZGF0ZSgpO3JldHVybiBu'@;
put 'dWxsIT1hJiYoeWllbGQgYSksIWwuaXNVcGRhdGVQZW5kaW5nfSkoKX1zY2hlZHVsZVVwZGF0ZSgpe3JldHVybiB0aGlzLnBlcmZvcm1VcGRhdGUoKX1wZXJmb3JtVXBkYXRlKCl7dmFyIGw7aWYoIXRoaXMuaXNVcGRhdGVQZW5kaW5nKXJldHVybjt0aGlzLl8kRWkmJih0aGlzLl8kRWkuZm9y'@;
put 'RWFjaCgoaCxmKT0+dGhpc1tmXT1oKSx0aGlzLl8kRWk9dm9pZCAwKTtsZXQgYT0hMTtjb25zdCBkPXRoaXMuXyRBTDt0cnl7YT10aGlzLnNob3VsZFVwZGF0ZShkKSxhPyh0aGlzLndpbGxVcGRhdGUoZCksbnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChoPT57'@;
put 'dmFyIGY7cmV0dXJuIG51bGw9PT0oZj1oLmhvc3RVcGRhdGUpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmNhbGwoaCl9KSx0aGlzLnVwZGF0ZShkKSk6dGhpcy5fJEVrKCl9Y2F0Y2goaCl7dGhyb3cgYT0hMSx0aGlzLl8kRWsoKSxofWEmJnRoaXMuXyRBRShkKX13aWxsVXBkYXRlKGwpe31fJEFF'@;
put 'KGwpe3ZhciBhO251bGw9PT0oYT10aGlzLl8kRVMpfHx2b2lkIDA9PT1hfHxhLmZvckVhY2goZD0+e3ZhciBoO3JldHVybiBudWxsPT09KGg9ZC5ob3N0VXBkYXRlZCl8fHZvaWQgMD09PWg/dm9pZCAwOmguY2FsbChkKX0pLHRoaXMuaGFzVXBkYXRlZHx8KHRoaXMuaGFzVXBkYXRlZD0hMCx0'@;
put 'aGlzLmZpcnN0VXBkYXRlZChsKSksdGhpcy51cGRhdGVkKGwpfV8kRWsoKXt0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLmlzVXBkYXRlUGVuZGluZz0hMX1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJu'@;
put 'IHRoaXMuXyRFX31zaG91bGRVcGRhdGUobCl7cmV0dXJuITB9dXBkYXRlKGwpe3ZvaWQgMCE9PXRoaXMuXyRFQyYmKHRoaXMuXyRFQy5mb3JFYWNoKChhLGQpPT50aGlzLl8kRU8oZCx0aGlzW2RdLGEpKSx0aGlzLl8kRUM9dm9pZCAwKSx0aGlzLl8kRWsoKX11cGRhdGVkKGwpe31maXJzdFVw'@;
put 'ZGF0ZWQobCl7fX12YXIgSVo7JGJbRFpdPSEwLCRiLmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAsJGIuZWxlbWVudFN0eWxlcz1bXSwkYi5zaGFkb3dSb290T3B0aW9ucz17bW9kZToib3BlbiJ9LFNzZT8uKHtSZWFjdGl2ZUVsZW1lbnQ6JGJ9KSwobnVsbCE9PShUWj1UUi5yZWFjdGl2ZUVs'@;
put 'ZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PVRaP1RaOlRSLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMyIpO2NvbnN0IEFSPXdpbmRvdyxLYj1BUi50cnVzdGVkVHlwZXMseHNlPUtiP0tiLmNyZWF0ZVBvbGljeSgibGl0LWh0bWwiLHtjcmVhdGVIVE1MOmM9PmN9KTp2'@;
put 'b2lkIDAsa1I9IiRsaXQkIix0Zz1gbGl0JCR7KE1hdGgucmFuZG9tKCkrIiIpLnNsaWNlKDkpfSRgLFJaPSI/Iit0ZyxxU2U9YDwke1JafT5gLFc4PWRvY3VtZW50LE9NPSgpPT5XOC5jcmVhdGVDb21tZW50KCIiKSxQTT1jPT5udWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjJiYiZnVuY3Rp'@;
put 'b24iIT10eXBlb2YgYyxFc2U9QXJyYXkuaXNBcnJheSxMWj0iWyBcdFxuXGZccl0iLEZNPS88KD86KCEtLXxcL1teYS16QS1aXSl8KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLEFzZT0vLS0+L2csa3NlPS8+L2csWTg9UmVnRXhwKGA+fCR7TFp9KD86KFteXFxzIic+PS9dKykoJHtM'@;
put 'Wn0qPSR7TFp9Kig/OlteIFx0XG5cZlxyIidcYDw+PV18KCJ8Jyl8KSl8JClgLCJnIiksRHNlPS8nL2csSXNlPS8iL2csUnNlPS9eKD86c2NyaXB0fHN0eWxlfHRleHRhcmVhfHRpdGxlKSQvaSxMc2U9Yz0+KGwsLi4uYSk9Pih7XyRsaXRUeXBlJDpjLHN0cmluZ3M6bCx2YWx1ZXM6YX0pLFhT'@;
put 'ZT1Mc2UoMSksSlNlPUxzZSgyKSxxYj1TeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSxDMD1TeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLE9zZT1uZXcgV2Vha01hcCxHOD1XOC5jcmVhdGVUcmVlV2Fsa2VyKFc4LDEyOSxudWxsLCExKTtmdW5jdGlvbiBQc2UoYyxsKXtpZighQXJyYXkuaXNB'@;
put 'cnJheShjKXx8IWMuaGFzT3duUHJvcGVydHkoInJhdyIpKXRocm93IEVycm9yKCJpbnZhbGlkIHRlbXBsYXRlIHN0cmluZ3MgYXJyYXkiKTtyZXR1cm4gdm9pZCAwIT09eHNlP3hzZS5jcmVhdGVIVE1MKGwpOmx9Y2xhc3MgSE17Y29uc3RydWN0b3Ioe3N0cmluZ3M6bCxfJGxpdFR5cGUkOmF9'@;
put 'LGQpe2xldCBoO3RoaXMucGFydHM9W107bGV0IGY9MCx2PTA7Y29uc3QgTT1sLmxlbmd0aC0xLEQ9dGhpcy5wYXJ0cyxbWixuZV09KChjLGwpPT57Y29uc3QgYT1jLmxlbmd0aC0xLGQ9W107bGV0IGgsZj0yPT09bD8iPHN2Zz4iOiIiLHY9Rk07Zm9yKGxldCBNPTA7TTxhO00rKyl7Y29uc3Qg'@;
put 'RD1jW01dO2xldCBaLG5lLGNlPS0xLGJlPTA7Zm9yKDtiZTxELmxlbmd0aCYmKHYubGFzdEluZGV4PWJlLG5lPXYuZXhlYyhEKSxudWxsIT09bmUpOyliZT12Lmxhc3RJbmRleCx2PT09Rk0/IiEtLSI9PT1uZVsxXT92PUFzZTp2b2lkIDAhPT1uZVsxXT92PWtzZTp2b2lkIDAhPT1uZVsyXT8o'@;
put 'UnNlLnRlc3QobmVbMl0pJiYoaD1SZWdFeHAoIjwvIituZVsyXSwiZyIpKSx2PVk4KTp2b2lkIDAhPT1uZVszXSYmKHY9WTgpOnY9PT1ZOD8iPiI9PT1uZVswXT8odj1oPz9GTSxjZT0tMSk6dm9pZCAwPT09bmVbMV0/Y2U9LTI6KGNlPXYubGFzdEluZGV4LW5lWzJdLmxlbmd0aCxaPW5lWzFd'@;
put 'LHY9dm9pZCAwPT09bmVbM10/WTg6JyInPT09bmVbM10/SXNlOkRzZSk6dj09PUlzZXx8dj09PURzZT92PVk4OnY9PT1Bc2V8fHY9PT1rc2U/dj1GTToodj1ZOCxoPXZvaWQgMCk7Y29uc3QgRWU9dj09PVk4JiZjW00rMV0uc3RhcnRzV2l0aCgiLz4iKT8iICI6IiI7Zis9dj09PUZNP0QrcVNl'@;
put 'OmNlPj0wPyhkLnB1c2goWiksRC5zbGljZSgwLGNlKStrUitELnNsaWNlKGNlKSt0ZytFZSk6RCt0ZysoLTI9PT1jZT8oZC5wdXNoKHZvaWQgMCksTSk6RWUpfXJldHVybltQc2UoYyxmKyhjW2FdfHwiPD8+IikrKDI9PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9SE0u'@;
put 'Y3JlYXRlRWxlbWVudChaLGQpLEc4LmN1cnJlbnROb2RlPXRoaXMuZWwuY29udGVudCwyPT09YSl7Y29uc3QgY2U9dGhpcy5lbC5jb250ZW50LGJlPWNlLmZpcnN0Q2hpbGQ7YmUucmVtb3ZlKCksY2UuYXBwZW5kKC4uLmJlLmNoaWxkTm9kZXMpfWZvcig7bnVsbCE9PShoPUc4Lm5leHROb2Rl'@;
put 'KCkpJiZELmxlbmd0aDxNOyl7aWYoMT09PWgubm9kZVR5cGUpe2lmKGguaGFzQXR0cmlidXRlcygpKXtjb25zdCBjZT1bXTtmb3IoY29uc3QgYmUgb2YgaC5nZXRBdHRyaWJ1dGVOYW1lcygpKWlmKGJlLmVuZHNXaXRoKGtSKXx8YmUuc3RhcnRzV2l0aCh0Zykpe2NvbnN0IEVlPW5lW3YrK107'@;
put 'aWYoY2UucHVzaChiZSksdm9pZCAwIT09RWUpe2NvbnN0IEJlPWguZ2V0QXR0cmlidXRlKEVlLnRvTG93ZXJDYXNlKCkra1IpLnNwbGl0KHRnKSxxZT0vKFsuP0BdKT8oLiopLy5leGVjKEVlKTtELnB1c2goe3R5cGU6MSxpbmRleDpmLG5hbWU6cWVbMl0sc3RyaW5nczpCZSxjdG9yOiIuIj09'@;
put 'PXFlWzFdP05zZToiPyI9PT1xZVsxXT9Wc2U6IkAiPT09cWVbMV0/QnNlOk5NfSl9ZWxzZSBELnB1c2goe3R5cGU6NixpbmRleDpmfSl9Zm9yKGNvbnN0IGJlIG9mIGNlKWgucmVtb3ZlQXR0cmlidXRlKGJlKX1pZihSc2UudGVzdChoLnRhZ05hbWUpKXtjb25zdCBjZT1oLnRleHRDb250ZW50'@;
put 'LnNwbGl0KHRnKSxiZT1jZS5sZW5ndGgtMTtpZihiZT4wKXtoLnRleHRDb250ZW50PUtiP0tiLmVtcHR5U2NyaXB0OiIiO2ZvcihsZXQgRWU9MDtFZTxiZTtFZSsrKWguYXBwZW5kKGNlW0VlXSxPTSgpKSxHOC5uZXh0Tm9kZSgpLEQucHVzaCh7dHlwZToyLGluZGV4OisrZn0pO2guYXBwZW5k'@;
put 'KGNlW2JlXSxPTSgpKX19fWVsc2UgaWYoOD09PWgubm9kZVR5cGUpaWYoaC5kYXRhPT09UlopRC5wdXNoKHt0eXBlOjIsaW5kZXg6Zn0pO2Vsc2V7bGV0IGNlPS0xO2Zvcig7LTEhPT0oY2U9aC5kYXRhLmluZGV4T2YodGcsY2UrMSkpOylELnB1c2goe3R5cGU6NyxpbmRleDpmfSksY2UrPXRn'@;
put 'Lmxlbmd0aC0xfWYrK319c3RhdGljIGNyZWF0ZUVsZW1lbnQobCxhKXtjb25zdCBkPVc4LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7cmV0dXJuIGQuaW5uZXJIVE1MPWwsZH19ZnVuY3Rpb24gJDgoYyxsLGE9YyxkKXt2YXIgaCxmLHYsTTtpZihsPT09cWIpcmV0dXJuIGw7bGV0IEQ9dm9p'@;
put 'ZCAwIT09ZD9udWxsPT09KGg9YS5fJENvKXx8dm9pZCAwPT09aD92b2lkIDA6aFtkXTphLl8kQ2w7Y29uc3QgWj1QTShsKT92b2lkIDA6bC5fJGxpdERpcmVjdGl2ZSQ7cmV0dXJuIEQ/LmNvbnN0cnVjdG9yIT09WiYmKG51bGw9PT0oZj1EPy5fJEFPKXx8dm9pZCAwPT09Znx8Zi5jYWxsKEQs'@;
put 'ITEpLHZvaWQgMD09PVo/RD12b2lkIDA6KEQ9bmV3IFooYyksRC5fJEFUKGMsYSxkKSksdm9pZCAwIT09ZD8obnVsbCE9PSh2PShNPWEpLl8kQ28pJiZ2b2lkIDAhPT12P3Y6TS5fJENvPVtdKVtkXT1EOmEuXyRDbD1EKSx2b2lkIDAhPT1EJiYobD0kOChjLEQuXyRBUyhjLGwudmFsdWVzKSxE'@;
put 'LGQpKSxsfWNsYXNzIEhzZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuXyRBVj1bXSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBRD1sLHRoaXMuXyRBTT1hfWdldCBwYXJlbnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBTS5wYXJlbnROb2RlfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFV'@;
put 'fXUobCl7dmFyIGE7Y29uc3R7ZWw6e2NvbnRlbnQ6ZH0scGFydHM6aH09dGhpcy5fJEFELGY9KG51bGwhPT0oYT1sPy5jcmVhdGlvblNjb3BlKSYmdm9pZCAwIT09YT9hOlc4KS5pbXBvcnROb2RlKGQsITApO0c4LmN1cnJlbnROb2RlPWY7bGV0IHY9RzgubmV4dE5vZGUoKSxNPTAsRD0wLFo9'@;
put 'aFswXTtmb3IoO3ZvaWQgMCE9PVo7KXtpZihNPT09Wi5pbmRleCl7bGV0IG5lOzI9PT1aLnR5cGU/bmU9bmV3IFhiKHYsdi5uZXh0U2libGluZyx0aGlzLGwpOjE9PT1aLnR5cGU/bmU9bmV3IFouY3Rvcih2LFoubmFtZSxaLnN0cmluZ3MsdGhpcyxsKTo2PT09Wi50eXBlJiYobmU9bmV3IGpz'@;
put 'ZSh2LHRoaXMsbCkpLHRoaXMuXyRBVi5wdXNoKG5lKSxaPWhbKytEXX1NIT09Wj8uaW5kZXgmJih2PUc4Lm5leHROb2RlKCksTSsrKX1yZXR1cm4gRzguY3VycmVudE5vZGU9VzgsZn12KGwpe2xldCBhPTA7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fJEFWKXZvaWQgMCE9PWQmJih2b2lkIDAhPT1k'@;
put 'LnN0cmluZ3M/KGQuXyRBSShsLGQsYSksYSs9ZC5zdHJpbmdzLmxlbmd0aC0yKTpkLl8kQUkobFthXSkpLGErK319Y2xhc3MgWGJ7Y29uc3RydWN0b3IobCxhLGQsaCl7dmFyIGY7dGhpcy50eXBlPTIsdGhpcy5fJEFIPUMwLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFBPWwsdGhpcy5fJEFC'@;
put 'PWEsdGhpcy5fJEFNPWQsdGhpcy5vcHRpb25zPWgsdGhpcy5fJENwPW51bGw9PT0oZj1oPy5pc0Nvbm5lY3RlZCl8fHZvaWQgMD09PWZ8fGZ9Z2V0IF8kQVUoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGE9bnVsbD09PShsPXRoaXMuXyRBTSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuXyRBVSkm'@;
put 'JnZvaWQgMCE9PWE/YTp0aGlzLl8kQ3B9Z2V0IHBhcmVudE5vZGUoKXtsZXQgbD10aGlzLl8kQUEucGFyZW50Tm9kZTtjb25zdCBhPXRoaXMuXyRBTTtyZXR1cm4gdm9pZCAwIT09YSYmMTE9PT1sPy5ub2RlVHlwZSYmKGw9YS5wYXJlbnROb2RlKSxsfWdldCBzdGFydE5vZGUoKXtyZXR1cm4g'@;
put 'dGhpcy5fJEFBfWdldCBlbmROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQn1fJEFJKGwsYT10aGlzKXtsPSQ4KHRoaXMsbCxhKSxQTShsKT9sPT09QzB8fG51bGw9PWx8fCIiPT09bD8odGhpcy5fJEFIIT09QzAmJnRoaXMuXyRBUigpLHRoaXMuXyRBSD1DMCk6bCE9PXRoaXMuXyRBSCYmbCE9PXFi'@;
put 'JiZ0aGlzLl8obCk6dm9pZCAwIT09bC5fJGxpdFR5cGUkP3RoaXMuZyhsKTp2b2lkIDAhPT1sLm5vZGVUeXBlP3RoaXMuJChsKTooYz0+RXNlKGMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYz8uW1N5bWJvbC5pdGVyYXRvcl0pKGwpP3RoaXMuVChsKTp0aGlzLl8obCl9ayhsKXtyZXR1cm4gdGhp'@;
put 'cy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGwsdGhpcy5fJEFCKX0kKGwpe3RoaXMuXyRBSCE9PWwmJih0aGlzLl8kQVIoKSx0aGlzLl8kQUg9dGhpcy5rKGwpKX1fKGwpe3RoaXMuXyRBSCE9PUMwJiZQTSh0aGlzLl8kQUgpP3RoaXMuXyRBQS5uZXh0U2libGluZy5kYXRhPWw6dGhp'@;
put 'cy4kKFc4LmNyZWF0ZVRleHROb2RlKGwpKSx0aGlzLl8kQUg9bH1nKGwpe3ZhciBhO2NvbnN0e3ZhbHVlczpkLF8kbGl0VHlwZSQ6aH09bCxmPSJudW1iZXIiPT10eXBlb2YgaD90aGlzLl8kQUMobCk6KHZvaWQgMD09PWguZWwmJihoLmVsPUhNLmNyZWF0ZUVsZW1lbnQoUHNlKGguaCxoLmhb'@;
put 'MF0pLHRoaXMub3B0aW9ucykpLGgpO2lmKChudWxsPT09KGE9dGhpcy5fJEFIKXx8dm9pZCAwPT09YT92b2lkIDA6YS5fJEFEKT09PWYpdGhpcy5fJEFILnYoZCk7ZWxzZXtjb25zdCB2PW5ldyBIc2UoZix0aGlzKSxNPXYudSh0aGlzLm9wdGlvbnMpO3YudihkKSx0aGlzLiQoTSksdGhpcy5f'@;
put 'JEFIPXZ9fV8kQUMobCl7bGV0IGE9T3NlLmdldChsLnN0cmluZ3MpO3JldHVybiB2b2lkIDA9PT1hJiZPc2Uuc2V0KGwuc3RyaW5ncyxhPW5ldyBITShsKSksYX1UKGwpe0VzZSh0aGlzLl8kQUgpfHwodGhpcy5fJEFIPVtdLHRoaXMuXyRBUigpKTtjb25zdCBhPXRoaXMuXyRBSDtsZXQgZCxo'@;
put 'PTA7Zm9yKGNvbnN0IGYgb2YgbCloPT09YS5sZW5ndGg/YS5wdXNoKGQ9bmV3IFhiKHRoaXMuayhPTSgpKSx0aGlzLmsoT00oKSksdGhpcyx0aGlzLm9wdGlvbnMpKTpkPWFbaF0sZC5fJEFJKGYpLGgrKztoPGEubGVuZ3RoJiYodGhpcy5fJEFSKGQmJmQuXyRBQi5uZXh0U2libGluZyxoKSxh'@;
put 'Lmxlbmd0aD1oKX1fJEFSKGw9dGhpcy5fJEFBLm5leHRTaWJsaW5nLGEpe3ZhciBkO2ZvcihudWxsPT09KGQ9dGhpcy5fJEFQKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKHRoaXMsITEsITAsYSk7bCYmbCE9PXRoaXMuXyRBQjspe2NvbnN0IGg9bC5uZXh0U2libGluZztsLnJlbW92ZSgpLGw9aH19'@;
put 'c2V0Q29ubmVjdGVkKGwpe3ZhciBhO3ZvaWQgMD09PXRoaXMuXyRBTSYmKHRoaXMuXyRDcD1sLG51bGw9PT0oYT10aGlzLl8kQVApfHx2b2lkIDA9PT1hfHxhLmNhbGwodGhpcyxsKSl9fWNsYXNzIE5Ne2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy50eXBlPTEsdGhpcy5fJEFIPUMwLHRo'@;
put 'aXMuXyRBTj12b2lkIDAsdGhpcy5lbGVtZW50PWwsdGhpcy5uYW1lPWEsdGhpcy5fJEFNPWgsdGhpcy5vcHRpb25zPWYsZC5sZW5ndGg+Mnx8IiIhPT1kWzBdfHwiIiE9PWRbMV0/KHRoaXMuXyRBSD1BcnJheShkLmxlbmd0aC0xKS5maWxsKG5ldyBTdHJpbmcpLHRoaXMuc3RyaW5ncz1kKTp0'@;
put 'aGlzLl8kQUg9QzB9Z2V0IHRhZ05hbWUoKXtyZXR1cm4gdGhpcy5lbGVtZW50LnRhZ05hbWV9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsLGE9dGhpcyxkLGgpe2NvbnN0IGY9dGhpcy5zdHJpbmdzO2xldCB2PSExO2lmKHZvaWQgMD09PWYpbD0kOCh0aGlzLGwsYSww'@;
put 'KSx2PSFQTShsKXx8bCE9PXRoaXMuXyRBSCYmbCE9PXFiLHYmJih0aGlzLl8kQUg9bCk7ZWxzZXtjb25zdCBNPWw7bGV0IEQsWjtmb3IobD1mWzBdLEQ9MDtEPGYubGVuZ3RoLTE7RCsrKVo9JDgodGhpcyxNW2QrRF0sYSxEKSxaPT09cWImJihaPXRoaXMuXyRBSFtEXSksdnx8KHY9IVBNKFop'@;
put 'fHxaIT09dGhpcy5fJEFIW0RdKSxaPT09QzA/bD1DMDpsIT09QzAmJihsKz0oWj8/IiIpK2ZbRCsxXSksdGhpcy5fJEFIW0RdPVp9diYmIWgmJnRoaXMuaihsKX1qKGwpe2w9PT1DMD90aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSk6dGhpcy5lbGVtZW50LnNldEF0dHJp'@;
put 'YnV0ZSh0aGlzLm5hbWUsbD8/IiIpfX1jbGFzcyBOc2UgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTN9aihsKXt0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXT1sPT09QzA/dm9pZCAwOmx9fWNvbnN0IFFTZT1LYj9LYi5lbXB0eVNjcmlwdDoi'@;
put 'IjtjbGFzcyBWc2UgZXh0ZW5kcyBOTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy50eXBlPTR9aihsKXtsJiZsIT09QzA/dGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsUVNlKTp0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHRoaXMubmFtZSl9'@;
put 'fWNsYXNzIEJzZSBleHRlbmRzIE5Ne2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhLGQsaCxmKSx0aGlzLnR5cGU9NX1fJEFJKGwsYT10aGlzKXt2YXIgZDtpZigobD1udWxsIT09KGQ9JDgodGhpcyxsLGEsMCkpJiZ2b2lkIDAhPT1kP2Q6QzApPT09cWIpcmV0dXJuO2NvbnN0IGg9'@;
put 'dGhpcy5fJEFILGY9bD09PUMwJiZoIT09QzB8fGwuY2FwdHVyZSE9PWguY2FwdHVyZXx8bC5vbmNlIT09aC5vbmNlfHxsLnBhc3NpdmUhPT1oLnBhc3NpdmUsdj1sIT09QzAmJihoPT09QzB8fGYpO2YmJnRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGgp'@;
put 'LHYmJnRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSx0aGlzLGwpLHRoaXMuXyRBSD1sfWhhbmRsZUV2ZW50KGwpe3ZhciBhLGQ7ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuXyRBSD90aGlzLl8kQUguY2FsbChudWxsIT09KGQ9bnVsbD09PShhPXRoaXMub3B0aW9ucyl8'@;
put 'fHZvaWQgMD09PWE/dm9pZCAwOmEuaG9zdCkmJnZvaWQgMCE9PWQ/ZDp0aGlzLmVsZW1lbnQsbCk6dGhpcy5fJEFILmhhbmRsZUV2ZW50KGwpfX1jbGFzcyBqc2V7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZWxlbWVudD1sLHRoaXMudHlwZT02LHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFN'@;
put 'PWEsdGhpcy5vcHRpb25zPWR9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9XyRBSShsKXskOCh0aGlzLGwpfX1jb25zdCB6c2U9QVIubGl0SHRtbFBvbHlmaWxsU3VwcG9ydDt2YXIgT1osUFo7enNlPy4oSE0sWGIpLChudWxsIT09KElaPUFSLmxpdEh0bWxWZXJzaW9ucykmJnZv'@;
put 'aWQgMCE9PUlaP0laOkFSLmxpdEh0bWxWZXJzaW9ucz1bXSkucHVzaCgiMi44LjAiKTtjbGFzcyBWTSBleHRlbmRzICRie2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbmRlck9wdGlvbnM9e2hvc3Q6dGhpc30sdGhpcy5fJERvPXZvaWQgMH1jcmVhdGVSZW5kZXJS'@;
put 'b290KCl7dmFyIGwsYTtjb25zdCBkPXN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtyZXR1cm4gbnVsbCE9PShsPShhPXRoaXMucmVuZGVyT3B0aW9ucykucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09bHx8KGEucmVuZGVyQmVmb3JlPWQuZmlyc3RDaGlsZCksZH11cGRhdGUobCl7Y29uc3QgYT10'@;
put 'aGlzLnJlbmRlcigpO3RoaXMuaGFzVXBkYXRlZHx8KHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZD10aGlzLmlzQ29ubmVjdGVkKSxzdXBlci51cGRhdGUobCksdGhpcy5fJERvPSgoYyxsLGEpPT57dmFyIGQsaDtjb25zdCBmPW51bGwhPT0oZD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lk'@;
put 'IDAhPT1kP2Q6bDtsZXQgdj1mLl8kbGl0UGFydCQ7aWYodm9pZCAwPT09dil7Y29uc3QgTT1udWxsIT09KGg9YT8ucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09aD9oOm51bGw7Zi5fJGxpdFBhcnQkPXY9bmV3IFhiKGwuaW5zZXJ0QmVmb3JlKE9NKCksTSksTSx2b2lkIDAsYT8/e30pfXJldHVy'@;
put 'biB2Ll8kQUkoYyksdn0pKGEsdGhpcy5yZW5kZXJSb290LHRoaXMucmVuZGVyT3B0aW9ucyl9Y29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8kRG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMCl9ZGlzY29u'@;
put 'bmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLG51bGw9PT0obD10aGlzLl8kRG8pfHx2b2lkIDA9PT1sfHxsLnNldENvbm5lY3RlZCghMSl9cmVuZGVyKCl7cmV0dXJuIHFifX1WTS5maW5hbGl6ZWQ9ITAsVk0uXyRsaXRFbGVtZW50JD0hMCxudWxs'@;
put 'PT09KE9aPWdsb2JhbFRoaXMubGl0RWxlbWVudEh5ZHJhdGVTdXBwb3J0KXx8dm9pZCAwPT09T1p8fE9aLmNhbGwoZ2xvYmFsVGhpcyx7TGl0RWxlbWVudDpWTX0pO2NvbnN0IFVzZT1nbG9iYWxUaGlzLmxpdEVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQ7VXNlPy4oe0xpdEVsZW1lbnQ6Vk19KSwo'@;
put 'bnVsbCE9PShQWj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PVBaP1BaOmdsb2JhbFRoaXMubGl0RWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIzLjMuMyIpO2NvbnN0IG5NZT1fc2VgQGNoYXJzZXQgIlVURi04Ijs6aG9zdCw6cm9vdHstLc60Mjp2YXIoLS1jZHMt'@;
put 'Z2xvYmFsLWxheW91dC1zcGFjZS14eHMsIGNhbGMoNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQzOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzLCBjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NDp2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSwgY2FsYygxMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ1OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLW1kLCBjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3O'@;
put 'tDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcsIGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Nzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bCwgY2FsYygzMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIw'@;
put 'KSkpfVtjZHMtbGF5b3V0fj0id3JhcDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7Zmxl'@;
put 'eC1ncm93OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWluLWhl'@;
put 'aWdodDowfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49aG9yaXpvbnRhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtdGV4dF17d2lkdGg6aW5pdGlhbCFpbXBvcnRhbnR9'@;
put 'W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1o'@;
put 'b3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9'@;
put 'W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24t'@;
put 'Y29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhv'@;
put 'cml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxh'@;
put 'eW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9u'@;
put 'dGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRl'@;
put 'ciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFs'@;
put 'aWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtt'@;
put 'YXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1b'@;
put 'Y2RzLWxheW91dCo9ImFsaWduOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWdu'@;
put 'OnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFs'@;
put 'LWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpy'@;
put 'ZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpz'@;
put 'dHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2Vu'@;
put 'dGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0'@;
put 'fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0'@;
put 'aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b31bY2RzLWxheW91dH49Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0'@;
put 'YXJ0O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMsMTIpLDFmcik7d2lkdGg6MTAwJX1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJl'@;
put 'cGVhdCgxMixhdXRvKX1bY2RzLWxheW91dH49Z3JpZF0+W2Nkcy1sYXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9'@;
put 'ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0'@;
put 'aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29u'@;
put 'dGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIi'@;
put 'XXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29u'@;
put 'dGVudDpjZW50ZXJ9OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1yZWFkZXItb25seSJde3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtj'@;
put 'bGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVyOjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjA7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtj'@;
put 'ZHMtbGF5b3V0Kj0iZ2FwOnh4cyJde2dhcDp2YXIoLS3OtDIpfVtjZHMtbGF5b3V0Kj0iZ2FwOnhzIl17Z2FwOnZhcigtLc60Myl9W2Nkcy1sYXlvdXQqPSJnYXA6c20iXXtnYXA6dmFyKC0tzrQ0KX1bY2RzLWxheW91dCo9ImdhcDptZCJde2dhcDp2YXIoLS3OtDUpfVtjZHMtbGF5b3V0Kj0i'@;
put 'Z2FwOmxnIl17Z2FwOnZhcigtLc60Nil9W2Nkcy1sYXlvdXR+PSJwOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHMiXXtwYWRkaW5nOnZhcigtLc60MikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4cyJde3BhZGRpbmc6dmFyKC0tzrQzKSFpbXBvcnRh'@;
put 'bnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIoLS3OtDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5nOnZhcigtLc60NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTptZCJde21hcmdpbjp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49'@;
put 'InA6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OnhzIl17cGFkZGluZy10b3A6dmFyKC0tzrQzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bGciXXtwYWRkaW5nLWxlZnQ6'@;
put 'dmFyKC0tzrQ2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3BhZGRpbmctdG9wOnZhcigtLc60NikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1s'@;
put 'Om1kIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NSkhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImdhcEBtZDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icEBtZDpsZyJde3BhZGRpbmc6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1s'@;
put 'YXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLc60NykhaW1wb3J0YW50fX1bY2RzLWxheW91dH49ZmlsbF17d2lkdGg6MTAwJSFpbXBvcnRhbnR9Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3h9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJh'@;
put 'bGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT46OnNsb3R0ZWQoKiksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT46OnNsb3R0'@;
put 'ZWQoKil7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDph'@;
put 'dXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWdu'@;
put 'LXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7'@;
put 'bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0p'@;
put 'LFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50'@;
put 'ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJdKXtt'@;
put 'YXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbkB4czpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNh'@;
put 'bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlv'@;
put 'dXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49'@;
put 'dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBv'@;
put 'cnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6'@;
put 'YXV0b319QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2Vu'@;
put 'dGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpo'@;
put 'b3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtj'@;
put 'ZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpz'@;
put 'bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy'@;
put 'dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXSl7bWFyZ2luLWJvdHRv'@;
put 'bTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6'@;
put 'cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0'@;
put 'ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGlj'@;
put 'YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0g'@;
put 'OjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2Rz'@;
put 'LWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1bY2Rz'@;
put 'LWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+'@;
put 'PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJp'@;
put 'Z2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20i'@;
put 'XSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFs'@;
put 'aWduOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0'@;
put 'ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVk'@;
put 'KFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7'@;
put 'YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25A'@;
put 'eHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1s'@;
put 'YXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5'@;
put 'b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50'@;
put 'O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0i'@;
put 'YWxpZ25Ac206Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0'@;
put 'ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlv'@;
put 'dXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0'@;
put 'fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxh'@;
put 'eW91dCo9ImFsaWduQG1kOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0'@;
put 'ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAo'@;
put 'bWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl0pe2Fs'@;
put 'aWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe21h'@;
put 'cmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0g'@;
put 'OjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5'@;
put 'b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxp'@;
put 'Z25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWdu'@;
put 'QHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jp'@;
put 'em9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxh'@;
put 'eW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXSl7bWFyZ2luLXJpZ2h0'@;
put 'OmF1dG8haW1wb3J0YW50fX1bY2RzLXRleHRde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9W2Nkcy10ZXh0XVtj'@;
put 'ZHMtbGF5b3V0fj1ncmlkXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlv'@;
put 'dXR+PXZlcnRpY2FsXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF06OmJlZm9yZXtkaXNwbGF5Om5vbmV9W2Nkcy10ZXh0Kj1kaXNwbGF5XSxbY2RzLXRleHQqPXNlY3Rpb25dLFtjZHMtdGV4dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1p'@;
put 'bHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25z'@;
put 'dHJ1Y3Rpb24tOTAwLCMyMTMzM2IpKX1bY2RzLXRleHQqPWJvZHldLFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjaywjMDAwKSl9W2Nk'@;
put 'cy10ZXh0Kj1pbmxpbmVde3dpZHRoOmF1dG8haW1wb3J0YW50O2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1bY2RzLXRleHQqPWRpc3BsYXlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUsY2FsYyg0MCAqIDFyZW0gLyB2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSk7bGV0dGVyLXNw'@;
put 'YWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9ZGlzcGxheV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1j'@;
put 'ZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWRpc3BsYXldOjphZnRlcntjb250'@;
put 'ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcw'@;
put 'M2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0LDEuMWVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9dGl0bGVde2ZvbnQt'@;
put 'c2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplLGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCw1MDApO2xpbmUtaGVp'@;
put 'Z2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmcsLS4wMDgzMzMzM2VtKX1bY2RzLXRleHQqPXRpdGxlXTo6YmVmb3Jl'@;
put 'e2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhl'@;
put 'aWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRv'@;
put 'cC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRs'@;
put 'ZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSxjYWxjKDIwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz'@;
put 'ZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMt'@;
put 'Z2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw'@;
put 'aHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6Ymxv'@;
put 'Y2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1n'@;
put 'bG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNk'@;
put 'cy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0'@;
put 'OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVm'@;
put 'b3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9u'@;
put 'LWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n'@;
put 'cmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh'@;
put 'cGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1ib2R5XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCw0MDApO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFs'@;
put 'LXR5cG9ncmFwaHktYm9keS1mb250LXNpemUsY2FsYygxNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcsLS4wMDcxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCwxLjQyODU3MTRlbSl9W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy'@;
put 'YXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMWVtKX1bY2RzLXRleHQqPWJvZHldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6Ymxv'@;
put 'Y2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1n'@;
put 'bG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10'@;
put 'ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6'@;
put 'dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtZm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0'@;
put 'ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZh'@;
put 'cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmFmdGVy'@;
put 'e2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0'@;
put 'LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRh'@;
put 'cnlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2Vp'@;
put 'Z2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nk'@;
put 'cy10ZXh0Kj1zZWNvbmRhcnldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2Jh'@;
put 'bC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVt'@;
put 'IC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMo'@;
put 'KHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2Jh'@;
put 'bC1jb2xvci1ibHVlLTcwMCwjMDA3OWFkKSkhaW1wb3J0YW50O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFy'@;
put 'KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigt'@;
put 'LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10'@;
put 'eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5'@;
put 'cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFy'@;
put 'KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcw'@;
put 'MCwjZTAyMjAwKSk7Zm9udC1mYW1pbHk6bW9ub3NwYWNlfVtjZHMtZGl2aWRlcl17ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7b3ZlcmZsb3c6aGlk'@;
put 'ZGVuO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCNjYmQ0ZDgpKSAwIDAgMCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDAsY2FsYygxICogMXJlbSAvIHZh'@;
put 'cigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSBpbnNldH1bY2RzLXRleHR+PWxpZ2h0XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQsMzAwKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1qdXN0aWZ5XXt0ZXh0LWFsaWduOmp1c3RpZnkhaW1w'@;
put 'b3J0YW50fVtjZHMtdGV4dH49bGVmdF17dGV4dC1hbGlnbjpsZWZ0IWltcG9ydGFudH1bY2RzLXRleHR+PXJpZ2h0XXt0ZXh0LWFsaWduOnJpZ2h0IWltcG9ydGFudH1bY2RzLXRleHR+PWNlbnRlcl17dGV4dC1hbGlnbjpjZW50ZXIhaW1wb3J0YW50fVtjZHMtdGV4dH49bGhlXXtwYWRkaW5n'@;
put 'Oi4wNXB4IDB9W2Nkcy10ZXh0fj1saGVdOjpiZWZvcmV7Y29udGVudDoiIjttYXJnaW4tdG9wOi0uMTI0ZW07ZGlzcGxheTpibG9jaztoZWlnaHQ6MH1bY2RzLXRleHR+PWxoZV06OmFmdGVye2NvbnRlbnQ6IiI7bWFyZ2luLWJvdHRvbTotLjIyMWVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9'@;
put 'W2Nkcy10ZXh0Kj1oMl0sW2Nkcy10ZXh0Kj1oM117Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2ZvbnQtc2l6ZToxLjRyZW07Zm9udC13ZWlnaHQ6MjAw'@;
put 'O2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVpZ2h0OjEuNzE0M2VtO2xldHRlci1zcGFjaW5nOi0uMDE3ODU3ZW19W2Nkcy10ZXh0Kj1oMl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4t'@;
put 'Ym90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDJdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7'@;
put 'd2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy'@;
put 'YXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKDEuNzE0M2VtIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oM117Zm9udC1zaXplOjEuMXJlbTtsaW5lLWhlaWdodDoxLjA5MDllbTtsZXR0ZXItc3BhY2luZzotLjAxMzYzNmVtfVtjZHMtdGV4dCo9aDNdOjpiZWZv'@;
put 'cmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2Rz'@;
put 'LXRleHQqPWgzXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo'@;
put 'eS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfTpob3N0e2FsbDppbml0aWFsO2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTppbmhl'@;
put 'cml0O2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbnRhaW46bGF5b3V0O2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnQ7LXdlYmtpdC1hcHBlYXJhbmNl'@;
put 'Om5vbmUhaW1wb3J0YW50fSosOmFmdGVyLDpiZWZvcmV7Ym94LXNpemluZzppbmhlcml0IWltcG9ydGFudH1zbG90e2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2Rp'@;
put 'c3BsYXk6Y29udGVudHMhaW1wb3J0YW50fTo6c2xvdHRlZCgqKXtmb250LWZhbWlseTppbmhlcml0O2JveC1zaXppbmc6aW5oZXJpdH06OnNsb3R0ZWQoKik6OnBsYWNlaG9sZGVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDAsdmFyKC0tY2RzLWdsb2JhbC1j'@;
put 'b2xvci1jb25zdHJ1Y3Rpb24tNjAwLCM0ZjYxNjkpKX06aG9zdChbX2lzLWFuY2hvcl0pLDpob3N0KFtyb2xlPWJ1dHRvbl0pe2N1cnNvcjpwb2ludGVyIWltcG9ydGFudH06aG9zdChbX2lzLWFuY2hvcl0pIDo6c2xvdHRlZCgqKSw6aG9zdChbcm9sZT1idXR0b25dKSA6OnNsb3R0ZWQoKil7'@;
put 'Y3Vyc29yOnBvaW50ZXIhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKXtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50fTpob3N0KFtyb2xlPWJ1dHRvbl1bZGlzYWJsZWRdKSA6OnNsb3R0ZWQoKil7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudDtwb2ludGVy'@;
put 'LWV2ZW50czpub25lfTpob3N0KFtoaWRkZW5dKSxbaGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0KFtoaWRkZW4qPWZhbHNlXSl7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSw6aG9zdChbcm9sZT1kaWFsb2ddW2hpZGRlbl0p'@;
put 'IDo6c2xvdHRlZCgqKXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW4qPWZhbHNlXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW4qPWZhbHNlXSkgOjpzbG90dGVkKCope3Zpc2liaWxpdHk6dmlz'@;
put 'aWJsZSFpbXBvcnRhbnR9Omhvc3QoW19mb2N1c2VkXSkgLmlucHV0LDpob3N0KFtfZm9jdXNlZF0pIFtmb2N1c2FibGVdLDpob3N0KFt0YWJpbmRleD0iMCJdOmZvY3VzKSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cykgW2ZvY3VzYWJsZV0sW3RhYmluZGV4PSIwIl1bZm9jdXNhYmxlXTpm'@;
put 'b2N1c3tvdXRsaW5lOkhpZ2hsaWdodCBzb2xpZCAycHg7b3V0bGluZTo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCwxcHgpfWA7ZnVuY3Rpb24gRlooYyl7cmV0'@;
put 'dXJuYGNhbGMoKCR7Y30gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSAqIDFyZW0pYH1jbGFzcyBhTWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZuPWwsdGhpcy5zdWJzY3JpcHRpb25zPWF9dW5zdWJzY3JpYmUoKXtjb25zdCBsPXRoaXMuc3Vic2NyaXB0aW9ucy5pbmRleE9mKHRoaXMpOy0x'@;
put 'IT09bCYmdGhpcy5zdWJzY3JpcHRpb25zLnNwbGljZShsLDEpfX1jb25zdCBIWj1uZXcgY2xhc3Mgc01le2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpcHRpb25zPVtdfXN1YnNjcmliZShsKXtjb25zdCBhPW5ldyBhTWUobCx0aGlzLnN1YnNjcmlwdGlvbnMpO3JldHVybiB0aGlzLnN1YnNj'@;
put 'cmlwdGlvbnMucHVzaChhKSxhfWVtaXQobCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS5mbihsKSl9dG9FdmVudE9ic2VydmFibGUoKXtyZXR1cm4gdGhpc319O0haLmxpc3RlbmVyPWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkNEU19TVEFURV9VUERBVEUiLGM9PkhaLmVt'@;
put 'aXQoYy5kZXRhaWwpKTtjbGFzcyBqZntzdGF0aWMgZ2V0IHN0YXRlKCl7cmV0dXJuIGxzZSgpLHdpbmRvdy5DRFMuX3N0YXRlfXN0YXRpYyBnZXRWYWx1ZShsKXtyZXR1cm4gamYuc3RhdGVbbF19c3RhdGljIHNldFZhbHVlKGwsYSl7amYuc3RhdGVbbF09YX1zdGF0aWMgbG9nKCl7TE0ubG9n'@;
put 'KEpTT04uc3RyaW5naWZ5KGpmLnN0YXRlLG51bGwsMikpfX1qZi5zdGF0ZVVwZGF0ZXM9SFoudG9FdmVudE9ic2VydmFibGUoKTtjb25zdCBsTWU9KGMsbCk9PiJtZXRob2QiPT09bC5raW5kJiZsLmRlc2NyaXB0b3ImJiEoInZhbHVlImluIGwuZGVzY3JpcHRvcik/ey4uLmwsZmluaXNoZXIo'@;
put 'YSl7YS5jcmVhdGVQcm9wZXJ0eShsLmtleSxjKX19OntraW5kOiJmaWVsZCIsa2V5OlN5bWJvbCgpLHBsYWNlbWVudDoib3duIixkZXNjcmlwdG9yOnt9LG9yaWdpbmFsS2V5Omwua2V5LGluaXRpYWxpemVyKCl7ImZ1bmN0aW9uIj09dHlwZW9mIGwuaW5pdGlhbGl6ZXImJih0aGlzW2wua2V5'@;
put 'XT1sLmluaXRpYWxpemVyLmNhbGwodGhpcykpfSxmaW5pc2hlcihhKXthLmNyZWF0ZVByb3BlcnR5KGwua2V5LGMpfX0sY01lPShjLGwsYSk9PntsLmNvbnN0cnVjdG9yLmNyZWF0ZVByb3BlcnR5KGEsYyl9O2Z1bmN0aW9uIFpzZShjKXtyZXR1cm4obCxhKT0+dm9pZCAwIT09YT9jTWUoYyxs'@;
put 'LGEpOmxNZShjLGwpfWZ1bmN0aW9uIEdzZShjLGwpe3N3aXRjaChsJiZsLnR5cGUpe2Nhc2UgQXJyYXk6Y2FzZSBPYmplY3Q6cmV0dXJue3JlZmxlY3Q6ITEsLi4ubH07Y2FzZSBTdHJpbmc6cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOlo4KGMpLGNvbnZlcnRlcjp7dG9BdHRyaWJ1dGU6'@;
put 'YT0+YXx8bnVsbH0sLi4ubH07Y2FzZSBOdW1iZXI6cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOlo4KGMpLC4uLmx9O2Nhc2UgQm9vbGVhbjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6WjgoYyksY29udmVydGVyOnt0b0F0dHJpYnV0ZTphPT5hPyIiOm51bGwsZnJvbUF0dHJpYnV0'@;
put 'ZTphPT5mdW5jdGlvbiBwTWUoYyl7cmV0dXJuIG51bGwhPWMmJiIiK2MhPSJmYWxzZSJ9KGEpfSwuLi5sfTtjYXNlIERhdGU6cmV0dXJue3JlZmxlY3Q6ITEsY29udmVydGVyOntmcm9tQXR0cmlidXRlOmE9Pm5ldyBEYXRlKGEpfSwuLi5sfTtkZWZhdWx0OnJldHVybnsuLi5sfX19ZnVuY3Rp'@;
put 'b24gcm0oYyl7cmV0dXJuKGwsYSk9PihjPy5yZXF1aXJlZCYmZnVuY3Rpb24gZ01lKGMsbCxhKXtjb25zdCBkPWMuZmlyc3RVcGRhdGVkO2MuZmlyc3RVcGRhdGVkPWZ1bmN0aW9uKGgpe2lmKGEmJmEucmVxdWlyZWQmJlJNKHRoaXNbbF0pKXtjb25zdCBmPWEucmVxdWlyZWRNZXNzYWdlfHxm'@;
put 'dW5jdGlvbih2PSJ3YXJuaW5nIixNLEQpe2NvbnN0IFo9RC50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybmAke29zZSh2KX06ICR7TX0gaXMgcmVxdWlyZWQgdG8gdXNlICR7Wn0gY29tcG9uZW50LiBTZXQgdGhlIEpTIFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyhlc2UoKT9g'@;
put 'QW5ndWxhcjogPCR7Wn0gWyR7TX1dPSIuLi4iPjwvJHtafT5cbmA6IiIpKyhuc2UoKT9gVnVlOiA8JHtafSA6JHtNfT0iLi4uIj48LyR7Wn0+XG5gOiIiKSsodHNlKCk/YFJlYWN0OiA8JHtmdW5jdGlvbiBwU2UoYyl7cmV0dXJuIG9zZShmdW5jdGlvbiBmU2UoYyl7cmV0dXJuIGMuc3BsaXQo'@;
put 'Ii0iKS5tYXAoKGwsYSk9PmE/bC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStsLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk6bCkuam9pbigiIil9KGMpKX0oWil9ICR7bmU9TSxuZS5zdGFydHNXaXRoKCJhcmlhIik/WjgobmUpOm5lfT17Li4ufSAvPlxuYDoiIikrYEhUTUw6IDwke1p9ICR7Wjgo'@;
put 'TSl9PSIuLi4iPjwvJHtafT5cbkphdmFTY3JpcHQ6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyR7Wn0nKS4ke019ID0gJy4uLic7XG5cbmA7dmFyIG5lfShhLnJlcXVpcmVkLGwsdGhpcy50YWdOYW1lKTtpZigiZXJyb3IiPT09YS5yZXF1aXJlZCl0aHJvdyBFcnJvcihmKTtMTS53YXJuKGYs'@;
put 'dGhpcyl9ZCYmZC5jYWxsKHRoaXMsaCl9fShsLGEsYyksWnNlKEdzZShhLGMpKShsLGEpKX12YXIgeU1lPV9zZWBAa2V5ZnJhbWVzIGZhZGVJbkFuZE91dHswJSx0b3tvcGFjaXR5OjB9NzUle29wYWNpdHk6MX19Omhvc3R7LS1jb2xvcjpjdXJyZW50Q29sb3I7ZGlzcGxheTppbmxpbmUtYmxv'@;
put 'Y2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdo'@;
put 'dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttYXJnaW46MDt2ZXJ0'@;
put 'aWNhbC1hbGlnbjptaWRkbGU7ZmlsbDp2YXIoLS1jb2xvcik7Y29sb3I6dmFyKC0tY29sb3IpO2NvbnRhaW46c3RyaWN0O2N1cnNvcjppbmhlcml0fXN2Z3tkaXNwbGF5OmJsb2NrfTpob3N0KFtzaXplKj14c10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJl'@;
put 'bSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0t'@;
put 'Y2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9c21dKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVt'@;
put 'IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigt'@;
put 'LWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1tZF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFy'@;
put 'ZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFy'@;
put 'KC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPWxnXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAq'@;
put 'IDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0g'@;
put 'LyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXhsXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2Fs'@;
put 'Yyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAq'@;
put 'IDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXh4bF0pe2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwt'@;
put 'c3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSk7d2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNh'@;
put 'bGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQg'@;
put 'KiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO21pbi13aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0g'@;
put 'LyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSl9Omhvc3QoW3NpemUqPWZpdF0pe2hlaWdodDphdXRvO3dpZHRoOmF1dG87Y29udGFpbjpsYXlvdXR9Omhvc3Qo'@;
put 'W3N0YXR1cz1zdWNjZXNzXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW3N0YXR1cz1kYW5nZXJdKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2'@;
put 'YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbc3RhdHVzPXdhcm5pbmddKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtzdGF0'@;
put 'dXM9aW5mb10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9Omhvc3QoW3N0YXR1cz1uZXV0cmFsXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1n'@;
put 'bG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0KFtpbnZlcnNlXSl7LS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDAsICNjYmQ0ZDgpfTpob3N0KFtkaXJlY3Rpb249dXBdKXt0cmFuc2Zvcm06cm90YXRlKDApfTpob3N0KFtk'@;
put 'aXJlY3Rpb249ZG93bl0pe3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX06aG9zdChbZGlyZWN0aW9uPXJpZ2h0XSl7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9Omhvc3QoW2RpcmVjdGlvbj1sZWZ0XSl7dHJhbnNmb3JtOnJvdGF0ZSgyNzBkZWcpfTpob3N0KFtmbGlwPWhvcml6b250YWxdKXt0'@;
put 'cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVgoMTgwZGVnKX06aG9zdChbZmxpcD12ZXJ0aWNhbF0pe3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfS5hbGVydCwuYmFkZ2V7ZmlsbDp2YXIoLS1iYWRnZS1jb2xvcix2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcix2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsI2UwMjIwMCkpKX06aG9zdChbYmFkZ2U9c3VjY2Vzc10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtiYWRnZT1k'@;
put 'YW5nZXJdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1k'@;
put 'YXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZT1pbmhlcml0XSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlPWluZm9dKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbywgdmFy'@;
put 'KC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtiYWRnZT1uZXV0cmFsXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCwgIzRmNjE2OSkpfTpob3N0'@;
put 'KFtiYWRnZT1pbmhlcml0LXRyaWFuZ2xlXSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9'@;
put 'Omhvc3QoW2JhZGdlPXN1Y2Nlc3NdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2UqPXdhcm5pbmddW2ludmVyc2VdKXstLWJhZGdlLWNv'@;
put 'bG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCwgI2EzNjUwMCkpfTpob3N0KFtiYWRnZSo9aW5oZXJpdF1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXVtp'@;
put 'bnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX0uY2RzLWludGVybmFsLWRvdC0xe2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLWluIDBzIGluZmluaXRlfS5j'@;
put 'ZHMtaW50ZXJuYWwtZG90LTJ7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Utb3V0IC40MjJzIGluZmluaXRlfS5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2Utb3V0IC42NzVzIGluZmluaXRlfUBtZWRpYSAocHJlZmVycy1yZWR1Y2Vk'@;
put 'LW1vdGlvbil7LmNkcy1pbnRlcm5hbC1kb3QtMSwuY2RzLWludGVybmFsLWRvdC0yLC5jZHMtaW50ZXJuYWwtZG90LTN7YW5pbWF0aW9uOm5vbmV9fWA7Y29uc3QgX01lPVsidW5rbm93biIse291dGxpbmU6JzxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMyIgY3g9IjMxLjEiIGN5'@;
put 'PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0yIiBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0xIiBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPid9XTtjbGFzcyBFc3tzdGF0aWMgZ2V0IHJlZ2lz'@;
put 'dHJ5KCl7cmV0dXJue3Vua25vd246X01lWzFdLC4uLmpmLnN0YXRlLmljb25SZWdpc3RyeX19c3RhdGljIGFkZEljb25zKC4uLmwpe2pmLnN0YXRlLmljb25SZWdpc3RyeT17Li4uamYuc3RhdGUuaWNvblJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhsLmZpbHRlcigoW2FdKT0+IUVz'@;
put 'LnJlZ2lzdHJ5W2FdKSl9fXN0YXRpYyBhZGRBbGlhc2VzKC4uLmwpe2NvbnN0IGE9bC5maWx0ZXIoKFtkXSk9PkVzLnJlZ2lzdHJ5W2RdKS5mbGF0TWFwKChbZCxoXSk9PmgubWFwKGY9PltmLEVzLnJlZ2lzdHJ5W2RdXSkpO2pmLnN0YXRlLmljb25SZWdpc3RyeT17Li4uamYuc3RhdGUuaWNv'@;
put 'blJlZ2lzdHJ5LC4uLk9iamVjdC5mcm9tRW50cmllcyhhKX19c3RhdGljIGdldEljb25OYW1lRnJvbVNoYXBlKGwpe3JldHVybiBsWzBdfX12YXIgZHAsYztmdW5jdGlvbiBNTWUoYyxsKXtsZXQgYT0iIjtzd2l0Y2goZnVuY3Rpb24gd01lKGMpe3N3aXRjaCghMCl7Y2FzZSBSTShjKTpyZXR1'@;
put 'cm4gZHAuTmlsU2l6ZVZhbHVlO2Nhc2UgZnVuY3Rpb24gJHNlKGMpe3JldHVyblsieHhzIiwieHMiLCJzbSIsIm1kIiwibGciLCJ4bCIsInh4bCJdLmluZGV4T2YoYyk+LTF9KGMpOnJldHVybiBkcC5WYWxpZFNpemVTdHJpbmc7Y2FzZSBmdW5jdGlvbiBXYWUoYyl7cmV0dXJuIHBaKGMpJiYh'@;
put 'WmFlKGMudHJpbSgpKSYmK2M9PStjfShjKTpyZXR1cm4gZHAuVmFsaWROdW1lcmljU3RyaW5nO2RlZmF1bHQ6cmV0dXJuIGRwLkJhZFNpemVWYWx1ZX19KGZ1bmN0aW9uIENNZShjKXtyZXR1cm4gUk0oYyk/IiI6ZnVuY3Rpb24gZ1NlKGMsbCxhPSIiKXtjb25zdCBkPWMuc3BsaXQoIiAiKSxo'@;
put 'PSIiPT09YT9kLmZpbHRlcihmPT5mIT09bCk6ZC5tYXAoZj0+Zj09PWw/YTpmKTtyZXR1cm4gaC5sZW5ndGg+MD9oLmpvaW4oIiAiKToiIn0oYywiZml0Iil9KGwpKSl7Y2FzZSBkcC5WYWxpZE51bWVyaWNTdHJpbmc6cmV0dXJuIGE9RloocGFyc2VJbnQobCkpLHZvaWQgZnVuY3Rpb24gaU1l'@;
put 'KGMsLi4ubCl7bC5mb3JFYWNoKChbYSxkXSk9PntjLnN0eWxlW2FdPWR9KX0oYywuLi5mdW5jdGlvbiBTTWUoYyxsKXtyZXR1cm4hSU0oYykmJmMuaW5kZXhPZigiZml0Iik+LTE/W1sid2lkdGgiLCJhdXRvIl0sWyJoZWlnaHQiLCJhdXRvIl0sWyJtaW4td2lkdGgiLGxdLFsibWluLWhlaWdo'@;
put 'dCIsbF1dOltbIndpZHRoIixsXSxbImhlaWdodCIsbF0sWyJtaW4td2lkdGgiLGxdLFsibWluLWhlaWdodCIsbF1dfShsLGEpKTtjYXNlIGRwLlZhbGlkU2l6ZVN0cmluZzpjYXNlIGRwLk5pbFNpemVWYWx1ZTpyZXR1cm4gdm9pZCBmdW5jdGlvbiBvTWUoYywuLi5sKXtsLmZvckVhY2goYT0+'@;
put 'e2Muc3R5bGVbYV09IiJ9KX0oYywid2lkdGgiLCJoZWlnaHQiLCJtaW4td2lkdGgiLCJtaW4taGVpZ2h0Iik7ZGVmYXVsdDpyZXR1cm59fWZ1bmN0aW9uIE5aKGMpe3JldHVybiBjLmJhZGdlJiYoImluaGVyaXQtdHJpYW5nbGUiPT09Yy5iYWRnZXx8Indhcm5pbmctdHJpYW5nbGUiPT09Yy5i'@;
put 'YWRnZSl9KGM9ZHB8fChkcD17fSkpLkJhZFNpemVWYWx1ZT0iYmFkLXZhbHVlIixjLlZhbGlkU2l6ZVN0cmluZz0idmFsdWUtaXMtc3RyaW5nIixjLlZhbGlkTnVtZXJpY1N0cmluZz0idmFsdWUtaXMtbnVtZXJpYyIsYy5OaWxTaXplVmFsdWU9InZhbHVlLWlzLW5pbCI7Y2xhc3MgemYgZXh0'@;
put 'ZW5kcyBWTXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW25NZSx5TWVdfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9zaGFwZX1zZXQg'@;
put 'c2hhcGUobCl7aWYoZnVuY3Rpb24gS0NlKGMsbCl7cmV0dXJuIVJNKGMpJiZHYWUoYyxsKX0obCx0aGlzLl9zaGFwZSkpe2NvbnN0IGE9dGhpcy5fc2hhcGU7dGhpcy5fc2hhcGU9bCx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIixhKX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1z'@;
put 'ZXQgc2l6ZShsKXtpZihmdW5jdGlvbiAkQ2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24gR0NlKGMpe3JldHVybiBMYWUoU3RyaW5nLGMpfHxJTShjKX0oYykmJkdhZShjLGwpfShsLHRoaXMuX3NpemUpKXtjb25zdCBhPXRoaXMuX3NpemU7dGhpcy5fc2l6ZT1sLE1NZSh0aGlzLGwpLHRoaXMucmVx'@;
put 'dWVzdFVwZGF0ZSgic2l6ZSIsYSl9fXVwZGF0ZWQobCl7aWYobC5oYXMoImlubmVyT2Zmc2V0IikmJnRoaXMuaW5uZXJPZmZzZXQ+MCl7Y29uc3QgYT1GWigtMSp0aGlzLmlubmVyT2Zmc2V0KSxkPWBjYWxjKDEwMCUgKyAke0ZaKDIqdGhpcy5pbm5lck9mZnNldCl9KWA7dGhpcy5zdmcuc3R5'@;
put 'bGUud2lkdGg9ZCx0aGlzLnN2Zy5zdHlsZS5oZWlnaHQ9ZCx0aGlzLnN2Zy5zdHlsZS5tYXJnaW49YCR7YX0gMCAwICR7YX1gfX1maXJzdFVwZGF0ZWQobCl7aWYoc3VwZXIuZmlyc3RVcGRhdGVkKGwpLHRoaXMuaXNDb25uZWN0ZWQpe2xldCBhPSJ1bmtub3duIjt0aGlzLnN1YnNjcmlwdGlv'@;
put 'bj1qZi5zdGF0ZVVwZGF0ZXMuc3Vic2NyaWJlKGQ9PnsiaWNvblJlZ2lzdHJ5Ij09PWQua2V5JiZFcy5yZWdpc3RyeVt0aGlzLnNoYXBlXSYmYSE9PXRoaXMuc2hhcGUmJihhPXRoaXMuc2hhcGUsdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaGFwZSIpKX0pfX1kaXNjb25uZWN0ZWRDYWxsYmFjaygp'@;
put 'e3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9cmVuZGVyKCl7cmV0dXJuIHBaKEVzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdKT9YU2VgPHNwYW4gLmlubmVySFRNTD0iJHtFcy5yZWdpc3RyeVt0aGlzLnNoYXBlXX0iPjwvc3Bhbj5g'@;
put 'OkpTZWA8c3ZnIC5pbm5lckhUTUw9IiR7ZnVuY3Rpb24gRU1lKGMpe2NvbnN0IGw9RXMucmVnaXN0cnlbYy5zaGFwZV0/P0VzLnJlZ2lzdHJ5LnVua25vd247bGV0IGE9Yy5zb2xpZCYmbC5zb2xpZD9sLnNvbGlkOmwub3V0bGluZTtyZXR1cm4gYy5iYWRnZSYmIU5aKGMpJiYoYT1jLnNvbGlk'@;
put 'P2wuc29saWRCYWRnZWQ/P2E6bC5vdXRsaW5lQmFkZ2VkPz9hKSxOWihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQWxlcnRlZD8/YTpsLm91dGxpbmVBbGVydGVkPz9hKSxhfSh0aGlzKStmdW5jdGlvbiB4TWUoYyl7bGV0IGw9IiI7cmV0dXJuIGMuYmFkZ2UmJk5aKGMpP2w9JzxwYXRoIGQ9Ik0y'@;
put 'Ni44NSAxLjE0TDIxLjEzIDExYTEuMjggMS4yOCAwIDAwMS4xIDJoMTEuNDVhMS4yOCAxLjI4IDAgMDAxLjEtMmwtNS43Mi05Ljg2YTEuMjggMS4yOCAwIDAwLTIuMjEgMHoiIGNsYXNzPSJhbGVydCIgLz4nOmMuYmFkZ2UmJihsPSc8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNz'@;
put 'PSJiYWRnZSIgLz4nKSxsfSh0aGlzKX0iIHZpZXdCb3g9IjAgMCAzNiAzNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zdmc+YH19ZnVuY3Rpb24gQk0oYyl7cmV0dXJuISFjJiYoYyBpbnN0YW5jZW9mIFh0fHwkZShjLmxpZnQpJiYk'@;
put 'ZShjLnN1YnNjcmliZSkpfUJmKFtybSh7dHlwZTpTdHJpbmd9KV0semYucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksQmYoW3JtKHt0eXBlOlN0cmluZ30pXSx6Zi5wcm90b3R5cGUsInNpemUiLG51bGwpLEJmKFtybSh7dHlwZTpTdHJpbmd9KV0semYucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZv'@;
put 'aWQgMCksQmYoW3JtKHt0eXBlOlN0cmluZ30pXSx6Zi5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksQmYoW3JtKHt0eXBlOkJvb2xlYW59KV0semYucHJvdG90eXBlLCJzb2xpZCIsdm9pZCAwKSxCZihbcm0oe3R5cGU6U3RyaW5nfSldLHpmLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLEJm'@;
put 'KFtybSh7dHlwZTpCb29sZWFufSldLHpmLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSxCZihbcm0oe3R5cGU6U3RyaW5nfSldLHpmLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCksQmYoW2Z1bmN0aW9uIG1NZShjKXtyZXR1cm4obCxhKT0+e2NvbnN0IGQ9R3NlKGEsYyk7cmV0dXJuIGQm'@;
put 'JihkLnJlZmxlY3Q9ISFjPy5yZWZsZWN0JiZjLnJlZmxlY3QsZC5yZWZsZWN0JiYhYz8uYXR0cmlidXRlJiYoZC5hdHRyaWJ1dGU9Il8iK1o4KGEpKSksWnNlKGQpKGwsYSl9fSh7dHlwZTpOdW1iZXJ9KV0semYucHJvdG90eXBlLCJpbm5lck9mZnNldCIsdm9pZCAwKSxCZihbZnVuY3Rpb24g'@;
put 'Yk1lKGMsbCl7cmV0dXJuKCh7ZmluaXNoZXI6YyxkZXNjcmlwdG9yOmx9KT0+KGEsZCk9Pnt2YXIgaDtpZih2b2lkIDA9PT1kKXtjb25zdCBmPW51bGwhPT0oaD1hLm9yaWdpbmFsS2V5KSYmdm9pZCAwIT09aD9oOmEua2V5LHY9bnVsbCE9bD97a2luZDoibWV0aG9kIixwbGFjZW1lbnQ6InBy'@;
put 'b3RvdHlwZSIsa2V5OmYsZGVzY3JpcHRvcjpsKGEua2V5KX06ey4uLmEsa2V5OmZ9O3JldHVybiBudWxsIT1jJiYodi5maW5pc2hlcj1mdW5jdGlvbihNKXtjKE0sZil9KSx2fXtjb25zdCBmPWEuY29uc3RydWN0b3I7dm9pZCAwIT09bCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZCxsKGQp'@;
put 'KSxjPy4oZixkKX19KSh7ZGVzY3JpcHRvcjphPT57Y29uc3QgZD17Z2V0KCl7dmFyIGgsZjtyZXR1cm4gbnVsbCE9PShmPW51bGw9PT0oaD10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnF1ZXJ5U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1mP2Y6bnVsbH0sZW51bWVyYWJs'@;
put 'ZTohMCxjb25maWd1cmFibGU6ITB9O2lmKGwpe2NvbnN0IGg9InN5bWJvbCI9PXR5cGVvZiBhP1N5bWJvbCgpOiJfXyIrYTtkLmdldD1mdW5jdGlvbigpe3ZhciBmLHY7cmV0dXJuIHZvaWQgMD09PXRoaXNbaF0mJih0aGlzW2hdPW51bGwhPT0odj1udWxsPT09KGY9dGhpcy5yZW5kZXJSb290'@;
put 'KXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5xdWVyeVNlbGVjdG9yKGMpKSYmdm9pZCAwIT09dj92Om51bGwpLHRoaXNbaF19fXJldHVybiBkfX0pfSgic3ZnIildLHpmLnByb3RvdHlwZSwic3ZnIix2b2lkIDApLGZ1bmN0aW9uIF9TZShjLGwpe1hhZSgpJiZKYWUoWyJjdXN0b21FbGVtZW50cyJd'@;
put 'KSYmeVNlKGMsbCx3aW5kb3cuY3VzdG9tRWxlbWVudHMpfSgiY2RzLWljb24iLHpmKTtjb25zdCBWWj1jPT5jJiYibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgYztmdW5jdGlvbiBLc2UoYyl7cmV0dXJuICRlKGM/LnRoZW4pfWZ1bmN0aW9uIHFzZShjKXty'@;
put 'ZXR1cm4gJGUoY1toaV0pfWZ1bmN0aW9uIFhzZShjKXtyZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3ImJiRlKGM/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pfWZ1bmN0aW9uIEpzZShjKXtyZXR1cm4gbmV3IFR5cGVFcnJvcihgWW91IHByb3ZpZGVkICR7bnVsbCE9PWMmJiJvYmplY3QiPT10'@;
put 'eXBlb2YgYz8iYW4gaW52YWxpZCBvYmplY3QiOmAnJHtjfSdgfSB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLmApfWNvbnN0'@;
put 'IFFzZT1mdW5jdGlvbiBMTWUoKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I/U3ltYm9sLml0ZXJhdG9yOiJAQGl0ZXJhdG9yIn0oKTtmdW5jdGlvbiBlbGUoYyl7cmV0dXJuICRlKGM/LltRc2VdKX1mdW5jdGlvbiB0bGUoYyl7cmV0dXJuIGZ1bmN0'@;
put 'aW9uIGhzZShjLGwsYSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBoLGQ9YS5hcHBseShjLGx8fFtdKSxmPVtdO3JldHVybiBoPU9iamVjdC5jcmVhdGUoKCJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBBc3luY0l0ZXJhdG9yP0FzeW5jSXRlcmF0b3I6T2JqZWN0KS5wcm90b3R5cGUpLE0oIm5leHQiKSxNKCJ0aHJvdyIpLE0oInJldHVybiIsZnVuY3Rpb24gdihFZSl7cmV0dXJuIGZ1bmN0aW9uKEJlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEJlKS50aGVuKEVlLGNlKX19KSxo'@;
put 'W1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxoO2Z1bmN0aW9uIE0oRWUsQmUpe2RbRWVdJiYoaFtFZV09ZnVuY3Rpb24ocWUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihydCxwdCl7Zi5wdXNoKFtFZSxxZSxydCxwdF0pPjF8fEQoRWUscWUpfSl9'@;
put 'LEJlJiYoaFtFZV09QmUoaFtFZV0pKSl9ZnVuY3Rpb24gRChFZSxCZSl7dHJ5eyFmdW5jdGlvbiBaKEVlKXtFZS52YWx1ZSBpbnN0YW5jZW9mIG5tP1Byb21pc2UucmVzb2x2ZShFZS52YWx1ZS52KS50aGVuKG5lLGNlKTpiZShmWzBdWzJdLEVlKX0oZFtFZV0oQmUpKX1jYXRjaChxZSl7YmUo'@;
put 'ZlswXVszXSxxZSl9fWZ1bmN0aW9uIG5lKEVlKXtEKCJuZXh0IixFZSl9ZnVuY3Rpb24gY2UoRWUpe0QoInRocm93IixFZSl9ZnVuY3Rpb24gYmUoRWUsQmUpe0VlKEJlKSxmLnNoaWZ0KCksZi5sZW5ndGgmJkQoZlswXVswXSxmWzBdWzFdKX19KHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKigp'@;
put 'e2NvbnN0IGE9Yy5nZXRSZWFkZXIoKTt0cnl7Zm9yKDs7KXtjb25zdHt2YWx1ZTpkLGRvbmU6aH09eWllbGQgbm0oYS5yZWFkKCkpO2lmKGgpcmV0dXJuIHlpZWxkIG5tKHZvaWQgMCk7eWllbGQgeWllbGQgbm0oZCl9fWZpbmFsbHl7YS5yZWxlYXNlTG9jaygpfX0pfWZ1bmN0aW9uIG5sZShj'@;
put 'KXtyZXR1cm4gJGUoYz8uZ2V0UmVhZGVyKX1mdW5jdGlvbiBsMShjKXtpZihjIGluc3RhbmNlb2YgWHQpcmV0dXJuIGM7aWYobnVsbCE9Yyl7aWYocXNlKGMpKXJldHVybiBmdW5jdGlvbiBPTWUoYyl7cmV0dXJuIG5ldyBYdChsPT57Y29uc3QgYT1jW2hpXSgpO2lmKCRlKGEuc3Vic2NyaWJl'@;
put 'KSlyZXR1cm4gYS5zdWJzY3JpYmUobCk7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKX0pfShjKTtpZihWWihjKSlyZXR1cm4gZnVuY3Rpb24gUE1lKGMpe3JldHVybiBuZXcgWHQobD0+'@;
put 'e2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGgmJiFsLmNsb3NlZDthKyspbC5uZXh0KGNbYV0pO2wuY29tcGxldGUoKX0pfShjKTtpZihLc2UoYykpcmV0dXJuIGZ1bmN0aW9uIEZNZShjKXtyZXR1cm4gbmV3IFh0KGw9PntjLnRoZW4oYT0+e2wuY2xvc2VkfHwobC5uZXh0KGEpLGwuY29tcGxldGUo'@;
put 'KSl9LGE9PmwuZXJyb3IoYSkpLnRoZW4obnVsbCxSaSl9KX0oYyk7aWYoWHNlKGMpKXJldHVybiBybGUoYyk7aWYoZWxlKGMpKXJldHVybiBmdW5jdGlvbiBITWUoYyl7cmV0dXJuIG5ldyBYdChsPT57Zm9yKGNvbnN0IGEgb2YgYylpZihsLm5leHQoYSksbC5jbG9zZWQpcmV0dXJuO2wuY29t'@;
put 'cGxldGUoKX0pfShjKTtpZihubGUoYykpcmV0dXJuIGZ1bmN0aW9uIE5NZShjKXtyZXR1cm4gcmxlKHRsZShjKSl9KGMpfXRocm93IEpzZShjKX1mdW5jdGlvbiBybGUoYyl7cmV0dXJuIG5ldyBYdChsPT57KGZ1bmN0aW9uIFZNZShjLGwpe3ZhciBhLGQsaCxmO3JldHVybiBmdW5jdGlvbiB1'@;
put 'c2UoYyxsLGEsZCl7cmV0dXJuIG5ldyhhfHwoYT1Qcm9taXNlKSkoZnVuY3Rpb24oZix2KXtmdW5jdGlvbiBNKG5lKXt0cnl7WihkLm5leHQobmUpKX1jYXRjaChjZSl7dihjZSl9fWZ1bmN0aW9uIEQobmUpe3RyeXtaKGQudGhyb3cobmUpKX1jYXRjaChjZSl7dihjZSl9fWZ1bmN0aW9uIFoo'@;
put 'bmUpe25lLmRvbmU/ZihuZS52YWx1ZSk6ZnVuY3Rpb24gaChmKXtyZXR1cm4gZiBpbnN0YW5jZW9mIGE/ZjpuZXcgYShmdW5jdGlvbih2KXt2KGYpfSl9KG5lLnZhbHVlKS50aGVuKE0sRCl9WigoZD1kLmFwcGx5KGMsbHx8W10pKS5uZXh0KCkpfSl9KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5j'@;
put 'dGlvbiooKXt0cnl7Zm9yKGE9ZnNlKGMpOyEoZD15aWVsZCBhLm5leHQoKSkuZG9uZTspaWYobC5uZXh0KGQudmFsdWUpLGwuY2xvc2VkKXJldHVybn1jYXRjaCh2KXtoPXtlcnJvcjp2fX1maW5hbGx5e3RyeXtkJiYhZC5kb25lJiYoZj1hLnJldHVybikmJih5aWVsZCBmLmNhbGwoYSkpfWZp'@;
put 'bmFsbHl7aWYoaCl0aHJvdyBoLmVycm9yfX1sLmNvbXBsZXRlKCl9KX0pKGMsbCkuY2F0Y2goYT0+bC5lcnJvcihhKSl9KX1mdW5jdGlvbiBuZyhjLGwsYSxkPTAsaD0hMSl7Y29uc3QgZj1sLnNjaGVkdWxlKGZ1bmN0aW9uKCl7YSgpLGg/Yy5hZGQodGhpcy5zY2hlZHVsZShudWxsLGQpKTp0'@;
put 'aGlzLnVuc3Vic2NyaWJlKCl9LGQpO2lmKGMuYWRkKGYpLCFoKXJldHVybiBmfWZ1bmN0aW9uIGlsZShjLGw9MCl7cmV0dXJuIFZpKChhLGQpPT57YS5zdWJzY3JpYmUoTmkoZCxoPT5uZyhkLGMsKCk9PmQubmV4dChoKSxsKSwoKT0+bmcoZCxjLCgpPT5kLmNvbXBsZXRlKCksbCksaD0+bmco'@;
put 'ZCxjLCgpPT5kLmVycm9yKGgpLGwpKSl9KX1mdW5jdGlvbiBvbGUoYyxsPTApe3JldHVybiBWaSgoYSxkKT0+e2QuYWRkKGMuc2NoZWR1bGUoKCk9PmEuc3Vic2NyaWJlKGQpLGwpKX0pfWZ1bmN0aW9uIGFsZShjLGwpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJl'@;
put 'IG51bGwiKTtyZXR1cm4gbmV3IFh0KGE9PntuZyhhLGwsKCk9Pntjb25zdCBkPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7bmcoYSxsLCgpPT57ZC5uZXh0KCkudGhlbihoPT57aC5kb25lP2EuY29tcGxldGUoKTphLm5leHQoaC52YWx1ZSl9KX0sMCwhMCl9KX0pfWZ1bmN0aW9uIFp1KGMs'@;
put 'bCl7cmV0dXJuIGw/ZnVuY3Rpb24gV01lKGMsbCl7aWYobnVsbCE9Yyl7aWYocXNlKGMpKXJldHVybiBmdW5jdGlvbiBCTWUoYyxsKXtyZXR1cm4gbDEoYykucGlwZShvbGUobCksaWxlKGwpKX0oYyxsKTtpZihWWihjKSlyZXR1cm4gZnVuY3Rpb24gek1lKGMsbCl7cmV0dXJuIG5ldyBYdChh'@;
put 'PT57bGV0IGQ9MDtyZXR1cm4gbC5zY2hlZHVsZShmdW5jdGlvbigpe2Q9PT1jLmxlbmd0aD9hLmNvbXBsZXRlKCk6KGEubmV4dChjW2QrK10pLGEuY2xvc2VkfHx0aGlzLnNjaGVkdWxlKCkpfSl9KX0oYyxsKTtpZihLc2UoYykpcmV0dXJuIGZ1bmN0aW9uIGpNZShjLGwpe3JldHVybiBsMShj'@;
put 'KS5waXBlKG9sZShsKSxpbGUobCkpfShjLGwpO2lmKFhzZShjKSlyZXR1cm4gYWxlKGMsbCk7aWYoZWxlKGMpKXJldHVybiBmdW5jdGlvbiBVTWUoYyxsKXtyZXR1cm4gbmV3IFh0KGE9PntsZXQgZDtyZXR1cm4gbmcoYSxsLCgpPT57ZD1jW1FzZV0oKSxuZyhhLGwsKCk9PntsZXQgaCxmO3Ry'@;
put 'eXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2godil7cmV0dXJuIHZvaWQgYS5lcnJvcih2KX1mP2EuY29tcGxldGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9PiRlKGQ/LnJldHVybikmJmQucmV0dXJuKCl9KX0oYyxsKTtpZihubGUoYykpcmV0dXJuIGZ1bmN0aW9uIFpNZShj'@;
put 'LGwpe3JldHVybiBhbGUodGxlKGMpLGwpfShjLGwpfXRocm93IEpzZShjKX0oYyxsKTpsMShjKX1mdW5jdGlvbiBzbGUoYyl7cmV0dXJuIGMmJiRlKGMuc2NoZWR1bGUpfWZ1bmN0aW9uIEJaKGMpe3JldHVybiBjW2MubGVuZ3RoLTFdfWZ1bmN0aW9uIGxsZShjKXtyZXR1cm4gJGUoQlooYykp'@;
put 'P2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGpNKGMpe3JldHVybiBzbGUoQlooYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIGZhKC4uLmMpe3JldHVybiBadShjLGpNKGMpKX1jb25zdHtpc0FycmF5OkdNZX09QXJyYXkse2dldFByb3RvdHlwZU9mOiRNZSxwcm90b3R5cGU6S01lLGtleXM6'@;
put 'cU1lfT1PYmplY3Q7ZnVuY3Rpb24gY2xlKGMpe2lmKDE9PT1jLmxlbmd0aCl7Y29uc3QgbD1jWzBdO2lmKEdNZShsKSlyZXR1cm57YXJnczpsLGtleXM6bnVsbH07aWYoZnVuY3Rpb24gWE1lKGMpe3JldHVybiBjJiYib2JqZWN0Ij09dHlwZW9mIGMmJiRNZShjKT09PUtNZX0obCkpe2NvbnN0'@;
put 'IGE9cU1lKGwpO3JldHVybnthcmdzOmEubWFwKGQ9PmxbZF0pLGtleXM6YX19fXJldHVybnthcmdzOmMsa2V5czpudWxsfX1jb25zdHtpc0FycmF5OkpNZX09QXJyYXk7ZnVuY3Rpb24galooYyl7cmV0dXJuIExyKGw9PmZ1bmN0aW9uIFFNZShjLGwpe3JldHVybiBKTWUobCk/YyguLi5sKTpj'@;
put 'KGwpfShjLGwpKX1mdW5jdGlvbiB1bGUoYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24gSzgoLi4uYyl7Y29uc3QgbD1qTShjKSxhPWxsZShjKSx7YXJnczpkLGtleXM6aH09Y2xlKGMpO2lmKDA9PT1kLmxlbmd0aClyZXR1cm4gWnUoW10s'@;
put 'bCk7Y29uc3QgZj1uZXcgWHQoZnVuY3Rpb24gZXhlKGMsbCxhPWNuKXtyZXR1cm4gZD0+e2RsZShsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1uZXcgQXJyYXkoaCk7bGV0IHY9aCxNPWg7Zm9yKGxldCBEPTA7RDxoO0QrKylkbGUobCwoKT0+e2NvbnN0IFo9WnUoY1tEXSxsKTtsZXQgbmU9'@;
put 'ITE7Wi5zdWJzY3JpYmUoTmkoZCxjZT0+e2ZbRF09Y2UsbmV8fChuZT0hMCxNLS0pLE18fGQubmV4dChhKGYuc2xpY2UoKSkpfSwoKT0+ey0tdnx8ZC5jb21wbGV0ZSgpfSkpfSxkKX0sZCl9fShkLGwsaD92PT51bGUoaCx2KTpjbikpO3JldHVybiBhP2YucGlwZShqWihhKSk6Zn1mdW5jdGlv'@;
put 'biBkbGUoYyxsLGEpe2M/bmcoYSxjLGwpOmwoKX1jb25zdCBEUj10dChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5uYW1lPSJFbXB0eUVycm9yIix0aGlzLm1lc3NhZ2U9Im5vIGVsZW1lbnRzIGluIHNlcXVlbmNlIn0pO2Z1bmN0aW9uIEgwKGMsbCxhPTEvMCl7cmV0dXJuICRlKGwpP0gw'@;
put 'KChkLGgpPT5McigoZix2KT0+bChkLGYsaCx2KSkobDEoYyhkLGgpKSksYSk6KCJudW1iZXIiPT10eXBlb2YgbCYmKGE9bCksVmkoKGQsaCk9PmZ1bmN0aW9uIHR4ZShjLGwsYSxkLGgsZix2LE0pe2NvbnN0IEQ9W107bGV0IFo9MCxuZT0wLGNlPSExO2NvbnN0IGJlPSgpPT57Y2UmJiFELmxl'@;
put 'bmd0aCYmIVomJmwuY29tcGxldGUoKX0sRWU9cWU9Plo8ZD9CZShxZSk6RC5wdXNoKHFlKSxCZT1xZT0+e2YmJmwubmV4dChxZSksWisrO2xldCBydD0hMTtsMShhKHFlLG5lKyspKS5zdWJzY3JpYmUoTmkobCxwdD0+e2g/LihwdCksZj9FZShwdCk6bC5uZXh0KHB0KX0sKCk9PntydD0hMH0s'@;
put 'dm9pZCAwLCgpPT57aWYocnQpdHJ5e2ZvcihaLS07RC5sZW5ndGgmJlo8ZDspe2NvbnN0IHB0PUQuc2hpZnQoKTt2P25nKGwsdiwoKT0+QmUocHQpKTpCZShwdCl9YmUoKX1jYXRjaChwdCl7bC5lcnJvcihwdCl9fSkpfTtyZXR1cm4gYy5zdWJzY3JpYmUoTmkobCxFZSwoKT0+e2NlPSEwLGJl'@;
put 'KCl9KSksKCk9PntNPy4oKX19KGQsaCxjLGEpKSl9ZnVuY3Rpb24gSmIoYz0xLzApe3JldHVybiBIMChjbixjKX1mdW5jdGlvbiB6WiguLi5jKXtyZXR1cm4gZnVuY3Rpb24gbnhlKCl7cmV0dXJuIEpiKDEpfSgpKFp1KGMsak0oYykpKX1mdW5jdGlvbiBobGUoYyl7cmV0dXJuIG5ldyBYdChs'@;
put 'PT57bDEoYygpKS5zdWJzY3JpYmUobCl9KX1mdW5jdGlvbiBJUihjLGwpe2NvbnN0IGE9JGUoYyk/YzooKT0+YyxkPWg9PmguZXJyb3IoYSgpKTtyZXR1cm4gbmV3IFh0KGw/aD0+bC5zY2hlZHVsZShkLDAsaCk6ZCl9Y29uc3QgTTI9bmV3IFh0KGM9PmMuY29tcGxldGUoKSk7ZnVuY3Rpb24g'@;
put 'VVooKXtyZXR1cm4gVmkoKGMsbCk9PntsZXQgYT1udWxsO2MuX3JlZkNvdW50Kys7Y29uc3QgZD1OaShsLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCgpPT57aWYoIWN8fGMuX3JlZkNvdW50PD0wfHwwPC0tYy5fcmVmQ291bnQpcmV0dXJuIHZvaWQoYT1udWxsKTtjb25zdCBoPWMuX2Nvbm5lY3Rp'@;
put 'b24sZj1hO2E9bnVsbCxoJiYoIWZ8fGg9PT1mKSYmaC51bnN1YnNjcmliZSgpLGwudW5zdWJzY3JpYmUoKX0pO2Muc3Vic2NyaWJlKGQpLGQuY2xvc2VkfHwoYT1jLmNvbm5lY3QoKSl9KX1jbGFzcyBaWiBleHRlbmRzIFh0e2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLnNvdXJjZT1s'@;
put 'LHRoaXMuc3ViamVjdEZhY3Rvcnk9YSx0aGlzLl9zdWJqZWN0PW51bGwsdGhpcy5fcmVmQ291bnQ9MCx0aGlzLl9jb25uZWN0aW9uPW51bGwsUXIobCkmJih0aGlzLmxpZnQ9bC5saWZ0KX1fc3Vic2NyaWJlKGwpe3JldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUobCl9Z2V0U3Vi'@;
put 'amVjdCgpe2NvbnN0IGw9dGhpcy5fc3ViamVjdDtyZXR1cm4oIWx8fGwuaXNTdG9wcGVkKSYmKHRoaXMuX3N1YmplY3Q9dGhpcy5zdWJqZWN0RmFjdG9yeSgpKSx0aGlzLl9zdWJqZWN0fV90ZWFyZG93bigpe3RoaXMuX3JlZkNvdW50PTA7Y29uc3R7X2Nvbm5lY3Rpb246bH09dGhpczt0aGlz'@;
put 'Ll9zdWJqZWN0PXRoaXMuX2Nvbm5lY3Rpb249bnVsbCxsPy51bnN1YnNjcmliZSgpfWNvbm5lY3QoKXtsZXQgbD10aGlzLl9jb25uZWN0aW9uO2lmKCFsKXtsPXRoaXMuX2Nvbm5lY3Rpb249bmV3IHF0O2NvbnN0IGE9dGhpcy5nZXRTdWJqZWN0KCk7bC5hZGQodGhpcy5zb3VyY2Uuc3Vic2Ny'@;
put 'aWJlKE5pKGEsdm9pZCAwLCgpPT57dGhpcy5fdGVhcmRvd24oKSxhLmNvbXBsZXRlKCl9LGQ9Pnt0aGlzLl90ZWFyZG93bigpLGEuZXJyb3IoZCl9LCgpPT50aGlzLl90ZWFyZG93bigpKSkpLGwuY2xvc2VkJiYodGhpcy5fY29ubmVjdGlvbj1udWxsLGw9cXQuRU1QVFkpfXJldHVybiBsfXJl'@;
put 'ZkNvdW50KCl7cmV0dXJuIFVaKCkodGhpcyl9fWZ1bmN0aW9uIFYxKGMsbCl7cmV0dXJuIFZpKChhLGQpPT57bGV0IGg9bnVsbCxmPTAsdj0hMTtjb25zdCBNPSgpPT52JiYhaCYmZC5jb21wbGV0ZSgpO2Euc3Vic2NyaWJlKE5pKGQsRD0+e2g/LnVuc3Vic2NyaWJlKCk7bGV0IFo9MDtjb25z'@;
put 'dCBuZT1mKys7bDEoYyhELG5lKSkuc3Vic2NyaWJlKGg9TmkoZCxjZT0+ZC5uZXh0KGw/bChELGNlLG5lLForKyk6Y2UpLCgpPT57aD1udWxsLE0oKX0pKX0sKCk9Pnt2PSEwLE0oKX0pKX0pfWZ1bmN0aW9uIFVmKGMpe3JldHVybiBjPD0wPygpPT5NMjpWaSgobCxhKT0+e2xldCBkPTA7bC5z'@;
put 'dWJzY3JpYmUoTmkoYSxoPT57KytkPD1jJiYoYS5uZXh0KGgpLGM8PWQmJmEuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiB4MiguLi5jKXtjb25zdCBsPWpNKGMpO3JldHVybiBWaSgoYSxkKT0+eyhsP3paKGMsYSxsKTp6WihjLGEpKS5zdWJzY3JpYmUoZCl9KX1mdW5jdGlvbiBHbChjLGwp'@;
put 'e3JldHVybiBWaSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoTmkoZCxmPT5jLmNhbGwobCxmLGgrKykmJmQubmV4dChmKSkpfSl9ZnVuY3Rpb24gUlIoYyl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoTmkoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT57ZHx8'@;
put 'YS5uZXh0KGMpLGEuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIGZsZShjPWl4ZSl7cmV0dXJuIFZpKChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoTmkoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT5kP2EuY29tcGxldGUoKTphLmVycm9yKGMoKSkpKX0pfWZ1bmN0aW9uIGl4ZSgpe3Jl'@;
put 'dHVybiBuZXcgRFJ9ZnVuY3Rpb24gaW0oYyxsKXtjb25zdCBhPWFyZ3VtZW50cy5sZW5ndGg+PTI7cmV0dXJuIGQ9PmQucGlwZShjP0dsKChoLGYpPT5jKGgsZixkKSk6Y24sVWYoMSksYT9SUihsKTpmbGUoKCk9Pm5ldyBEUikpfWZ1bmN0aW9uIFFiKGMsbCl7cmV0dXJuICRlKGwpP0gwKGMs'@;
put 'bCwxKTpIMChjLDEpfWZ1bmN0aW9uIFd1KGMsbCxhKXtjb25zdCBkPSRlKGMpfHxsfHxhP3tuZXh0OmMsZXJyb3I6bCxjb21wbGV0ZTphfTpjO3JldHVybiBkP1ZpKChoLGYpPT57dmFyIHY7bnVsbD09PSh2PWQuc3Vic2NyaWJlKXx8dm9pZCAwPT09dnx8di5jYWxsKGQpO2xldCBNPSEwO2gu'@;
put 'c3Vic2NyaWJlKE5pKGYsRD0+e3ZhciBaO251bGw9PT0oWj1kLm5leHQpfHx2b2lkIDA9PT1afHxaLmNhbGwoZCxEKSxmLm5leHQoRCl9LCgpPT57dmFyIEQ7TT0hMSxudWxsPT09KEQ9ZC5jb21wbGV0ZSl8fHZvaWQgMD09PUR8fEQuY2FsbChkKSxmLmNvbXBsZXRlKCl9LEQ9Pnt2YXIgWjtN'@;
put 'PSExLG51bGw9PT0oWj1kLmVycm9yKXx8dm9pZCAwPT09Wnx8Wi5jYWxsKGQsRCksZi5lcnJvcihEKX0sKCk9Pnt2YXIgRCxaO00mJihudWxsPT09KEQ9ZC51bnN1YnNjcmliZSl8fHZvaWQgMD09PUR8fEQuY2FsbChkKSksbnVsbD09PShaPWQuZmluYWxpemUpfHx2b2lkIDA9PT1afHxaLmNh'@;
put 'bGwoZCl9KSl9KTpjbn1mdW5jdGlvbiBleShjKXtyZXR1cm4gVmkoKGwsYSk9PntsZXQgZixkPW51bGwsaD0hMTtkPWwuc3Vic2NyaWJlKE5pKGEsdm9pZCAwLHZvaWQgMCx2PT57Zj1sMShjKHYsZXkoYykobCkpKSxkPyhkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKTpo'@;
put 'PSEwfSkpLGgmJihkLnVuc3Vic2NyaWJlKCksZD1udWxsLGYuc3Vic2NyaWJlKGEpKX0pfWZ1bmN0aW9uIFdaKGMpe3JldHVybiBjPD0wPygpPT5NMjpWaSgobCxhKT0+e2xldCBkPVtdO2wuc3Vic2NyaWJlKE5pKGEsaD0+e2QucHVzaChoKSxjPGQubGVuZ3RoJiZkLnNoaWZ0KCl9LCgpPT57'@;
put 'Zm9yKGNvbnN0IGggb2YgZClhLm5leHQoaCk7YS5jb21wbGV0ZSgpfSx2b2lkIDAsKCk9PntkPW51bGx9KSl9KX1mdW5jdGlvbiB6TShjKXtyZXR1cm4gVmkoKGwsYSk9Pnt0cnl7bC5zdWJzY3JpYmUoYSl9ZmluYWxseXthLmFkZChjKX19KX1mdW5jdGlvbiBOMChjKXtyZXR1cm4gVmkoKGws'@;
put 'YSk9PntsMShjKS5zdWJzY3JpYmUoTmkoYSwoKT0+YS5jb21wbGV0ZSgpLGhuKSksIWEuY2xvc2VkJiZsLnN1YnNjcmliZShhKX0pfWNvbnN0IEthPSJwcmltYXJ5IixVTT1TeW1ib2woIlJvdXRlVGl0bGUiKTtjbGFzcyBjeGV7Y29uc3RydWN0b3IobCl7dGhpcy5wYXJhbXM9bHx8e319aGFz'@;
put 'KGwpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5wYXJhbXMsbCl9Z2V0KGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5pc0FycmF5KGEpP2FbMF06YX1yZXR1cm4gbnVsbH1nZXRBbGwobCl7aWYo'@;
put 'dGhpcy5oYXMobCkpe2NvbnN0IGE9dGhpcy5wYXJhbXNbbF07cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/YTpbYV19cmV0dXJuW119Z2V0IGtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5wYXJhbXMpfX1mdW5jdGlvbiB0eShjKXtyZXR1cm4gbmV3IGN4ZShjKX1mdW5jdGlvbiB1eGUo'@;
put 'YyxsLGEpe2NvbnN0IGQ9YS5wYXRoLnNwbGl0KCIvIik7aWYoZC5sZW5ndGg+Yy5sZW5ndGh8fCJmdWxsIj09PWEucGF0aE1hdGNoJiYobC5oYXNDaGlsZHJlbigpfHxkLmxlbmd0aDxjLmxlbmd0aCkpcmV0dXJuIG51bGw7Y29uc3QgaD17fTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKyl7'@;
put 'Y29uc3Qgdj1kW2ZdLE09Y1tmXTtpZih2LnN0YXJ0c1dpdGgoIjoiKSloW3Yuc3Vic3RyaW5nKDEpXT1NO2Vsc2UgaWYodiE9PU0ucGF0aClyZXR1cm4gbnVsbH1yZXR1cm57Y29uc3VtZWQ6Yy5zbGljZSgwLGQubGVuZ3RoKSxwb3NQYXJhbXM6aH19ZnVuY3Rpb24gaHAoYyxsKXtjb25zdCBh'@;
put 'PWM/WVooYyk6dm9pZCAwLGQ9bD9ZWihsKTp2b2lkIDA7aWYoIWF8fCFkfHxhLmxlbmd0aCE9ZC5sZW5ndGgpcmV0dXJuITE7bGV0IGg7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspaWYoaD1hW2ZdLCFwbGUoY1toXSxsW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBZWihjKXty'@;
put 'ZXR1cm5bLi4uT2JqZWN0LmtleXMoYyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19ZnVuY3Rpb24gcGxlKGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSYmQXJyYXkuaXNBcnJheShsKSl7aWYoYy5sZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtjb25zdCBhPVsuLi5jXS5z'@;
put 'b3J0KCksZD1bLi4ubF0uc29ydCgpO3JldHVybiBhLmV2ZXJ5KChoLGYpPT5kW2ZdPT09aCl9cmV0dXJuIGM9PT1sfWZ1bmN0aW9uIGdsZShjKXtyZXR1cm4gYy5sZW5ndGg+MD9jW2MubGVuZ3RoLTFdOm51bGx9ZnVuY3Rpb24gb20oYyl7cmV0dXJuIEJNKGMpP2M6X00oYyk/WnUoUHJvbWlz'@;
put 'ZS5yZXNvbHZlKGMpKTpmYShjKX1jb25zdCBoeGU9e2V4YWN0OmZ1bmN0aW9uIGJsZShjLGwsYSl7aWYoIXE4KGMuc2VnbWVudHMsbC5zZWdtZW50cyl8fCFMUihjLnNlZ21lbnRzLGwuc2VnbWVudHMsYSl8fGMubnVtYmVyT2ZDaGlsZHJlbiE9PWwubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4h'@;
put 'MTtmb3IoY29uc3QgZCBpbiBsLmNoaWxkcmVuKWlmKCFjLmNoaWxkcmVuW2RdfHwhYmxlKGMuY2hpbGRyZW5bZF0sbC5jaGlsZHJlbltkXSxhKSlyZXR1cm4hMTtyZXR1cm4hMH0sc3Vic2V0OnlsZX0sbWxlPXtleGFjdDpmdW5jdGlvbiBmeGUoYyxsKXtyZXR1cm4gaHAoYyxsKX0sc3Vic2V0'@;
put 'OmZ1bmN0aW9uIHB4ZShjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5sZW5ndGg8PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmT2JqZWN0LmtleXMobCkuZXZlcnkoYT0+cGxlKGNbYV0sbFthXSkpfSxpZ25vcmVkOigpPT4hMH07ZnVuY3Rpb24gdmxlKGMsbCxhKXtyZXR1cm4gaHhlW2EucGF0'@;
put 'aHNdKGMucm9vdCxsLnJvb3QsYS5tYXRyaXhQYXJhbXMpJiZtbGVbYS5xdWVyeVBhcmFtc10oYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKSYmISgiZXhhY3QiPT09YS5mcmFnbWVudCYmYy5mcmFnbWVudCE9PWwuZnJhZ21lbnQpfWZ1bmN0aW9uIHlsZShjLGwsYSl7cmV0dXJuIF9sZShj'@;
put 'LGwsbC5zZWdtZW50cyxhKX1mdW5jdGlvbiBfbGUoYyxsLGEsZCl7aWYoYy5zZWdtZW50cy5sZW5ndGg+YS5sZW5ndGgpe2NvbnN0IGg9Yy5zZWdtZW50cy5zbGljZSgwLGEubGVuZ3RoKTtyZXR1cm4hKCFxOChoLGEpfHxsLmhhc0NoaWxkcmVuKCl8fCFMUihoLGEsZCkpfWlmKGMuc2VnbWVu'@;
put 'dHMubGVuZ3RoPT09YS5sZW5ndGgpe2lmKCFxOChjLnNlZ21lbnRzLGEpfHwhTFIoYy5zZWdtZW50cyxhLGQpKXJldHVybiExO2Zvcihjb25zdCBoIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5baF18fCF5bGUoYy5jaGlsZHJlbltoXSxsLmNoaWxkcmVuW2hdLGQpKXJldHVybiExO3Jl'@;
put 'dHVybiEwfXtjb25zdCBoPWEuc2xpY2UoMCxjLnNlZ21lbnRzLmxlbmd0aCksZj1hLnNsaWNlKGMuc2VnbWVudHMubGVuZ3RoKTtyZXR1cm4hIShxOChjLnNlZ21lbnRzLGgpJiZMUihjLnNlZ21lbnRzLGgsZCkmJmMuY2hpbGRyZW5bS2FdKSYmX2xlKGMuY2hpbGRyZW5bS2FdLGwsZixkKX19'@;
put 'ZnVuY3Rpb24gTFIoYyxsLGEpe3JldHVybiBsLmV2ZXJ5KChkLGgpPT5tbGVbYV0oY1toXS5wYXJhbWV0ZXJzLGQucGFyYW1ldGVycykpfWNsYXNzIG55e2NvbnN0cnVjdG9yKGw9bmV3ICRsKFtdLHt9KSxhPXt9LGQ9bnVsbCl7dGhpcy5yb290PWwsdGhpcy5xdWVyeVBhcmFtcz1hLHRoaXMu'@;
put 'ZnJhZ21lbnQ9ZH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89dHkodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiB2eGUuc2VyaWFsaXplKHRoaXMpfX1jbGFzcyAkbHtjb25zdHJ1Y3RvcihsLGEp'@;
put 'e3RoaXMuc2VnbWVudHM9bCx0aGlzLmNoaWxkcmVuPWEsdGhpcy5wYXJlbnQ9bnVsbCxPYmplY3QudmFsdWVzKGEpLmZvckVhY2goZD0+ZC5wYXJlbnQ9dGhpcyl9aGFzQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5udW1iZXJPZkNoaWxkcmVuPjB9Z2V0IG51bWJlck9mQ2hpbGRyZW4oKXtyZXR1'@;
put 'cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofXRvU3RyaW5nKCl7cmV0dXJuIE9SKHRoaXMpfX1jbGFzcyBaTXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucGF0aD1sLHRoaXMucGFyYW1ldGVycz1hfWdldCBwYXJhbWV0ZXJNYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFw'@;
put 'Pz89dHkodGhpcy5wYXJhbWV0ZXJzKSx0aGlzLl9wYXJhbWV0ZXJNYXB9dG9TdHJpbmcoKXtyZXR1cm4gU2xlKHRoaXMpfX1mdW5jdGlvbiBxOChjLGwpe3JldHVybiBjLmxlbmd0aD09PWwubGVuZ3RoJiZjLmV2ZXJ5KChhLGQpPT5hLnBhdGg9PT1sW2RdLnBhdGgpfWxldCByeT0oKCk9Pntj'@;
put 'bGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6KCk9Pm5ldyBHWixwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgR1p7cGFyc2UobCl7'@;
put 'Y29uc3QgYT1uZXcgQXhlKGwpO3JldHVybiBuZXcgbnkoYS5wYXJzZVJvb3RTZWdtZW50KCksYS5wYXJzZVF1ZXJ5UGFyYW1zKCksYS5wYXJzZUZyYWdtZW50KCkpfXNlcmlhbGl6ZShsKXtjb25zdCBhPWAvJHtXTShsLnJvb3QsITApfWAsZD1mdW5jdGlvbiBfeGUoYyl7Y29uc3QgbD1PYmpl'@;
put 'Y3QuZW50cmllcyhjKS5tYXAoKFthLGRdKT0+QXJyYXkuaXNBcnJheShkKT9kLm1hcChoPT5gJHtQUihhKX09JHtQUihoKX1gKS5qb2luKCImIik6YCR7UFIoYSl9PSR7UFIoZCl9YCkuZmlsdGVyKGE9PmEpO3JldHVybiBsLmxlbmd0aD9gPyR7bC5qb2luKCImIil9YDoiIn0obC5xdWVyeVBh'@;
put 'cmFtcyksaD0ic3RyaW5nIj09dHlwZW9mIGwuZnJhZ21lbnQ/YCMke2Z1bmN0aW9uIGJ4ZShjKXtyZXR1cm4gZW5jb2RlVVJJKGMpfShsLmZyYWdtZW50KX1gOiIiO3JldHVybmAke2F9JHtkfSR7aH1gfX1jb25zdCB2eGU9bmV3IEdaO2Z1bmN0aW9uIE9SKGMpe3JldHVybiBjLnNlZ21lbnRz'@;
put 'Lm1hcChsPT5TbGUobCkpLmpvaW4oIi8iKX1mdW5jdGlvbiBXTShjLGwpe2lmKCFjLmhhc0NoaWxkcmVuKCkpcmV0dXJuIE9SKGMpO2lmKGwpe2NvbnN0IGE9Yy5jaGlsZHJlbltLYV0/V00oYy5jaGlsZHJlbltLYV0sITEpOiIiLGQ9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRy'@;
put 'ZW4pLmZvckVhY2goKFtoLGZdKT0+e2ghPT1LYSYmZC5wdXNoKGAke2h9OiR7V00oZiwhMSl9YCl9KSxkLmxlbmd0aD4wP2Ake2F9KCR7ZC5qb2luKCIvLyIpfSlgOmF9e2NvbnN0IGE9ZnVuY3Rpb24gbXhlKGMsbCl7bGV0IGE9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4p'@;
put 'LmZvckVhY2goKFtkLGhdKT0+e2Q9PT1LYSYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbZCxoXSk9PntkIT09S2EmJihhPWEuY29uY2F0KGwoaCxkKSkpfSksYX0oYywoZCxoKT0+aD09PUthP1tXTShjLmNoaWxkcmVuW0thXSwh'@;
put 'MSldOltgJHtofToke1dNKGQsITEpfWBdKTtyZXR1cm4gMT09PU9iamVjdC5rZXlzKGMuY2hpbGRyZW4pLmxlbmd0aCYmbnVsbCE9Yy5jaGlsZHJlbltLYV0/YCR7T1IoYyl9LyR7YVswXX1gOmAke09SKGMpfS8oJHthLmpvaW4oIi8vIil9KWB9fWZ1bmN0aW9uIHdsZShjKXtyZXR1cm4gZW5j'@;
put 'b2RlVVJJQ29tcG9uZW50KGMpLnJlcGxhY2UoLyU0MC9nLCJAIikucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKX1mdW5jdGlvbiBQUihjKXtyZXR1cm4gd2xlKGMpLnJlcGxhY2UoLyUzQi9naSwiOyIpfWZ1bmN0aW9uICRaKGMp'@;
put 'e3JldHVybiB3bGUoYykucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5IikucmVwbGFjZSgvJTI2L2dpLCImIil9ZnVuY3Rpb24gRlIoYyl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjKX1mdW5jdGlvbiBDbGUoYyl7cmV0dXJuIEZSKGMucmVwbGFjZSgvXCsvZywi'@;
put 'JTIwIikpfWZ1bmN0aW9uIFNsZShjKXtyZXR1cm5gJHskWihjLnBhdGgpfSR7ZnVuY3Rpb24geXhlKGMpe3JldHVybiBPYmplY3QuZW50cmllcyhjKS5tYXAoKFtsLGFdKT0+YDskeyRaKGwpfT0keyRaKGEpfWApLmpvaW4oIiIpfShjLnBhcmFtZXRlcnMpfWB9Y29uc3Qgd3hlPS9eW15cLygp'@;
put 'PzsjXSsvO2Z1bmN0aW9uIEtaKGMpe2NvbnN0IGw9Yy5tYXRjaCh3eGUpO3JldHVybiBsP2xbMF06IiJ9Y29uc3QgQ3hlPS9eW15cLygpPzs9I10rLyxNeGU9L15bXj0/JiNdKy8sRXhlPS9eW14mI10rLztjbGFzcyBBeGV7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bCx0aGlzLnJlbWFpbmlu'@;
put 'Zz1sfXBhcnNlUm9vdFNlZ21lbnQoKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKSwiIj09PXRoaXMucmVtYWluaW5nfHx0aGlzLnBlZWtTdGFydHNXaXRoKCI/Iil8fHRoaXMucGVla1N0YXJ0c1dpdGgoIiMiKT9uZXcgJGwoW10se30pOm5ldyAkbChbXSx0aGlzLnBhcnNlQ2hp'@;
put 'bGRyZW4oKSl9cGFyc2VRdWVyeVBhcmFtcygpe2NvbnN0IGw9e307aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj8iKSlkb3t0aGlzLnBhcnNlUXVlcnlQYXJhbShsKX13aGlsZSh0aGlzLmNvbnN1bWVPcHRpb25hbCgiJiIpKTtyZXR1cm4gbH1wYXJzZUZyYWdtZW50KCl7cmV0dXJuIHRoaXMu'@;
put 'Y29uc3VtZU9wdGlvbmFsKCIjIik/ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMucmVtYWluaW5nKTpudWxsfXBhcnNlQ2hpbGRyZW4oKXtpZigiIj09PXRoaXMucmVtYWluaW5nKXJldHVybnt9O3RoaXMuY29uc3VtZU9wdGlvbmFsKCIvIik7Y29uc3QgbD1bXTtmb3IodGhpcy5wZWVrU3RhcnRz'@;
put 'V2l0aCgiKCIpfHxsLnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7dGhpcy5wZWVrU3RhcnRzV2l0aCgiLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLy8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8oIik7KXRoaXMuY2FwdHVyZSgiLyIpLGwucHVzaCh0aGlzLnBhcnNlU2VnbWVudCgp'@;
put 'KTtsZXQgYT17fTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpJiYodGhpcy5jYXB0dXJlKCIvIiksYT10aGlzLnBhcnNlUGFyZW5zKCEwKSk7bGV0IGQ9e307cmV0dXJuIHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKSYmKGQ9dGhpcy5wYXJzZVBhcmVucyghMSkpLChsLmxlbmd0aD4wfHxPYmpl'@;
put 'Y3Qua2V5cyhhKS5sZW5ndGg+MCkmJihkW0thXT1uZXcgJGwobCxhKSksZH1wYXJzZVNlZ21lbnQoKXtjb25zdCBsPUtaKHRoaXMucmVtYWluaW5nKTtpZigiIj09PWwmJnRoaXMucGVla1N0YXJ0c1dpdGgoIjsiKSl0aHJvdyBuZXcgUW4oNDAwOSwhMSk7cmV0dXJuIHRoaXMuY2FwdHVyZShs'@;
put 'KSxuZXcgWk0oRlIobCksdGhpcy5wYXJzZU1hdHJpeFBhcmFtcygpKX1wYXJzZU1hdHJpeFBhcmFtcygpe2NvbnN0IGw9e307Zm9yKDt0aGlzLmNvbnN1bWVPcHRpb25hbCgiOyIpOyl0aGlzLnBhcnNlUGFyYW0obCk7cmV0dXJuIGx9cGFyc2VQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIFN4'@;
put 'ZShjKXtjb25zdCBsPWMubWF0Y2goQ3hlKTtyZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXtjb25zdCBoPUtaKHRoaXMucmVtYWluaW5nKTtoJiYoZD1oLHRo'@;
put 'aXMuY2FwdHVyZShkKSl9bFtGUihhKV09RlIoZCl9cGFyc2VRdWVyeVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24geHhlKGMpe2NvbnN0IGw9Yy5tYXRjaChNeGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIi'@;
put 'O2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe2NvbnN0IHY9ZnVuY3Rpb24gVHhlKGMpe2NvbnN0IGw9Yy5tYXRjaChFeGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTt2JiYoZD12LHRoaXMuY2FwdHVyZShkKSl9Y29uc3QgaD1DbGUoYSksZj1DbGUoZCk7aWYobC5o'@;
put 'YXNPd25Qcm9wZXJ0eShoKSl7bGV0IHY9bFtoXTtBcnJheS5pc0FycmF5KHYpfHwodj1bdl0sbFtoXT12KSx2LnB1c2goZil9ZWxzZSBsW2hdPWZ9cGFyc2VQYXJlbnMobCl7Y29uc3QgYT17fTtmb3IodGhpcy5jYXB0dXJlKCIoIik7IXRoaXMuY29uc3VtZU9wdGlvbmFsKCIpIikmJnRoaXMu'@;
put 'cmVtYWluaW5nLmxlbmd0aD4wOyl7Y29uc3QgZD1LWih0aGlzLnJlbWFpbmluZyksaD10aGlzLnJlbWFpbmluZ1tkLmxlbmd0aF07aWYoIi8iIT09aCYmIikiIT09aCYmIjsiIT09aCl0aHJvdyBuZXcgUW4oNDAxMCwhMSk7bGV0IGY7ZC5pbmRleE9mKCI6Iik+LTE/KGY9ZC5zbGljZSgwLGQu'@;
put 'aW5kZXhPZigiOiIpKSx0aGlzLmNhcHR1cmUoZiksdGhpcy5jYXB0dXJlKCI6IikpOmwmJihmPUthKTtjb25zdCB2PXRoaXMucGFyc2VDaGlsZHJlbigpO2FbZl09MT09PU9iamVjdC5rZXlzKHYpLmxlbmd0aD92W0thXTpuZXcgJGwoW10sdiksdGhpcy5jb25zdW1lT3B0aW9uYWwoIi8vIil9'@;
put 'cmV0dXJuIGF9cGVla1N0YXJ0c1dpdGgobCl7cmV0dXJuIHRoaXMucmVtYWluaW5nLnN0YXJ0c1dpdGgobCl9Y29uc3VtZU9wdGlvbmFsKGwpe3JldHVybiEhdGhpcy5wZWVrU3RhcnRzV2l0aChsKSYmKHRoaXMucmVtYWluaW5nPXRoaXMucmVtYWluaW5nLnN1YnN0cmluZyhsLmxlbmd0aCks'@;
put 'ITApfWNhcHR1cmUobCl7aWYoIXRoaXMuY29uc3VtZU9wdGlvbmFsKGwpKXRocm93IG5ldyBRbig0MDExLCExKX19ZnVuY3Rpb24gTWxlKGMpe3JldHVybiBjLnNlZ21lbnRzLmxlbmd0aD4wP25ldyAkbChbXSx7W0thXTpjfSk6Y31mdW5jdGlvbiB4bGUoYyl7Y29uc3QgbD17fTtmb3IoY29u'@;
put 'c3RbZCxoXW9mIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pKXtjb25zdCBmPXhsZShoKTtpZihkPT09S2EmJjA9PT1mLnNlZ21lbnRzLmxlbmd0aCYmZi5oYXNDaGlsZHJlbigpKWZvcihjb25zdFt2LE1db2YgT2JqZWN0LmVudHJpZXMoZi5jaGlsZHJlbikpbFt2XT1NO2Vsc2UoZi5zZWdt'@;
put 'ZW50cy5sZW5ndGg+MHx8Zi5oYXNDaGlsZHJlbigpKSYmKGxbZF09Zil9cmV0dXJuIGZ1bmN0aW9uIGt4ZShjKXtpZigxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiZjLmNoaWxkcmVuW0thXSl7Y29uc3QgbD1jLmNoaWxkcmVuW0thXTtyZXR1cm4gbmV3ICRsKGMuc2VnbWVudHMuY29uY2F0KGwu'@;
put 'c2VnbWVudHMpLGwuY2hpbGRyZW4pfXJldHVybiBjfShuZXcgJGwoYy5zZWdtZW50cyxsKSl9ZnVuY3Rpb24gaXkoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBueX1mdW5jdGlvbiBFbGUoYyl7bGV0IGw7Y29uc3QgaD1NbGUoZnVuY3Rpb24gYShmKXtjb25zdCB2PXt9O2Zvcihjb25zdCBEIG9m'@;
put 'IGYuY2hpbGRyZW4pe2NvbnN0IFo9YShEKTt2W0Qub3V0bGV0XT1afWNvbnN0IE09bmV3ICRsKGYudXJsLHYpO3JldHVybiBmPT09YyYmKGw9TSksTX0oYy5yb290KSk7cmV0dXJuIGw/P2h9ZnVuY3Rpb24gVGxlKGMsbCxhLGQpe2xldCBoPWM7Zm9yKDtoLnBhcmVudDspaD1oLnBhcmVudDtp'@;
put 'ZigwPT09bC5sZW5ndGgpcmV0dXJuIHFaKGgsaCxoLGEsZCk7Y29uc3QgZj1mdW5jdGlvbiBJeGUoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjWzBdJiYxPT09Yy5sZW5ndGgmJiIvIj09PWNbMF0pcmV0dXJuIG5ldyBrbGUoITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgo'@;
put 'aCxmLHYpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBmJiZudWxsIT1mKXtpZihmLm91dGxldHMpe2NvbnN0IE09e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cykuZm9yRWFjaCgoW0QsWl0pPT57TVtEXT0ic3RyaW5nIj09dHlwZW9mIFo/Wi5zcGxpdCgiLyIpOlp9KSxbLi4uaCx7'@;
put 'b3V0bGV0czpNfV19aWYoZi5zZWdtZW50UGF0aClyZXR1cm5bLi4uaCxmLnNlZ21lbnRQYXRoXX1yZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGY/Wy4uLmgsZl06MD09PXY/KGYuc3BsaXQoIi8iKS5mb3JFYWNoKChNLEQpPT57MD09RCYmIi4iPT09TXx8KDA9PUQmJiIiPT09TT9hPSEwOiIuLiI9'@;
put 'PT1NP2wrKzoiIiE9TSYmaC5wdXNoKE0pKX0pLGgpOlsuLi5oLGZdfSxbXSk7cmV0dXJuIG5ldyBrbGUoYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiBxWihoLGgsbmV3ICRsKFtdLHt9KSxhLGQpO2NvbnN0IHY9ZnVuY3Rpb24gUnhlKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0'@;
put 'dXJuIG5ldyBOUihsLCEwLDApO2lmKCFhKXJldHVybiBuZXcgTlIobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IE5SKGEsITAsMCk7Y29uc3QgZD1IUihjLmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uIEx4ZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zv'@;
put 'cig7Zj5oOyl7aWYoZi09aCxkPWQucGFyZW50LCFkKXRocm93IG5ldyBRbig0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcgTlIoZCwhMSxoLWYpfShhLGEuc2VnbWVudHMubGVuZ3RoLTErZCxjLm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxNPXYucHJvY2Vzc0No'@;
put 'aWxkcmVuP0dNKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk6RGxlKHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk7cmV0dXJuIHFaKGgsdi5zZWdtZW50R3JvdXAsTSxhLGQpfWZ1bmN0aW9uIEhSKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9'@;
put 'YyYmIWMub3V0bGV0cyYmIWMuc2VnbWVudFBhdGh9ZnVuY3Rpb24gWU0oYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiZjLm91dGxldHN9ZnVuY3Rpb24gcVooYyxsLGEsZCxoKXtsZXQgdixmPXt9O2QmJk9iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtELFpdKT0+e2Zb'@;
put 'RF09QXJyYXkuaXNBcnJheShaKT9aLm1hcChuZT0+YCR7bmV9YCk6YCR7Wn1gfSksdj1jPT09bD9hOkFsZShjLGwsYSk7Y29uc3QgTT1NbGUoeGxlKHYpKTtyZXR1cm4gbmV3IG55KE0sZixoKX1mdW5jdGlvbiBBbGUoYyxsLGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMu'@;
put 'Y2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2RbaF09Zj09PWw/YTpBbGUoZixsLGEpfSksbmV3ICRsKGMuc2VnbWVudHMsZCl9Y2xhc3Mga2xle2NvbnN0cnVjdG9yKGwsYSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9'@;
put 'ZCxsJiZkLmxlbmd0aD4wJiZIUihkWzBdKSl0aHJvdyBuZXcgUW4oNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoWU0pO2lmKGgmJmghPT1nbGUoZCkpdGhyb3cgbmV3IFFuKDQwMDQsITEpfXRvUm9vdCgpe3JldHVybiB0aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0aCYm'@;
put 'Ii8iPT10aGlzLmNvbW1hbmRzWzBdfX1jbGFzcyBOUntjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5zZWdtZW50R3JvdXA9bCx0aGlzLnByb2Nlc3NDaGlsZHJlbj1hLHRoaXMuaW5kZXg9ZH19ZnVuY3Rpb24gRGxlKGMsbCxhKXtpZihjPz89bmV3ICRsKFtdLHt9KSwwPT09Yy5zZWdtZW50cy5s'@;
put 'ZW5ndGgmJmMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gR00oYyxsLGEpO2NvbnN0IGQ9ZnVuY3Rpb24gUHhlKGMsbCxhKXtsZXQgZD0wLGg9bDtjb25zdCBmPXttYXRjaDohMSxwYXRoSW5kZXg6MCxjb21tYW5kSW5kZXg6MH07Zm9yKDtoPGMuc2VnbWVudHMubGVuZ3RoOyl7aWYoZD49YS5sZW5n'@;
put 'dGgpcmV0dXJuIGY7Y29uc3Qgdj1jLnNlZ21lbnRzW2hdLE09YVtkXTtpZihZTShNKSlicmVhaztjb25zdCBEPWAke019YCxaPWQ8YS5sZW5ndGgtMT9hW2QrMV06bnVsbDtpZihoPjAmJnZvaWQgMD09PUQpYnJlYWs7aWYoRCYmWiYmIm9iamVjdCI9PXR5cGVvZiBaJiZ2b2lkIDA9PT1aLm91'@;
put 'dGxldHMpe2lmKCFSbGUoRCxaLHYpKXJldHVybiBmO2QrPTJ9ZWxzZXtpZighUmxlKEQse30sdikpcmV0dXJuIGY7ZCsrfWgrK31yZXR1cm57bWF0Y2g6ITAscGF0aEluZGV4OmgsY29tbWFuZEluZGV4OmR9fShjLGwsYSksaD1hLnNsaWNlKGQuY29tbWFuZEluZGV4KTtpZihkLm1hdGNoJiZk'@;
put 'LnBhdGhJbmRleDxjLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1uZXcgJGwoYy5zZWdtZW50cy5zbGljZSgwLGQucGF0aEluZGV4KSx7fSk7cmV0dXJuIGYuY2hpbGRyZW5bS2FdPW5ldyAkbChjLnNlZ21lbnRzLnNsaWNlKGQucGF0aEluZGV4KSxjLmNoaWxkcmVuKSxHTShmLDAsaCl9cmV0'@;
put 'dXJuIGQubWF0Y2gmJjA9PT1oLmxlbmd0aD9uZXcgJGwoYy5zZWdtZW50cyx7fSk6ZC5tYXRjaCYmIWMuaGFzQ2hpbGRyZW4oKT9YWihjLGwsYSk6ZC5tYXRjaD9HTShjLDAsaCk6WFooYyxsLGEpfWZ1bmN0aW9uIEdNKGMsbCxhKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG5ldyAkbChjLnNl'@;
put 'Z21lbnRzLHt9KTt7Y29uc3QgZD1mdW5jdGlvbiBPeGUoYyl7cmV0dXJuIFlNKGNbMF0pP2NbMF0ub3V0bGV0czp7W0thXTpjfX0oYSksaD17fTtpZihPYmplY3Qua2V5cyhkKS5zb21lKGY9PmYhPT1LYSkmJmMuY2hpbGRyZW5bS2FdJiYxPT09Yy5udW1iZXJPZkNoaWxkcmVuJiYwPT09Yy5j'@;
put 'aGlsZHJlbltLYV0uc2VnbWVudHMubGVuZ3RoKXtjb25zdCBmPUdNKGMuY2hpbGRyZW5bS2FdLGwsYSk7cmV0dXJuIG5ldyAkbChjLnNlZ21lbnRzLGYuY2hpbGRyZW4pfXJldHVybiBPYmplY3QuZW50cmllcyhkKS5mb3JFYWNoKChbZix2XSk9Pnsic3RyaW5nIj09dHlwZW9mIHYmJih2PVt2'@;
put 'XSksbnVsbCE9PXYmJihoW2ZdPURsZShjLmNoaWxkcmVuW2ZdLGwsdikpfSksT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2Ysdl0pPT57dm9pZCAwPT09ZFtmXSYmKGhbZl09dil9KSxuZXcgJGwoYy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gWFooYyxsLGEpe2NvbnN0IGQ9'@;
put 'Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7Y29uc3QgZj1hW2hdO2lmKFlNKGYpKXtjb25zdCBEPUZ4ZShmLm91dGxldHMpO3JldHVybiBuZXcgJGwoZCxEKX1pZigwPT09aCYmSFIoYVswXSkpe2QucHVzaChuZXcgWk0oYy5zZWdtZW50c1tsXS5wYXRo'@;
put 'LElsZShhWzBdKSkpLGgrKztjb250aW51ZX1jb25zdCB2PVlNKGYpP2Yub3V0bGV0c1tLYV06YCR7Zn1gLE09aDxhLmxlbmd0aC0xP2FbaCsxXTpudWxsO3YmJk0mJkhSKE0pPyhkLnB1c2gobmV3IFpNKHYsSWxlKE0pKSksaCs9Mik6KGQucHVzaChuZXcgWk0odix7fSkpLGgrKyl9cmV0dXJu'@;
put 'IG5ldyAkbChkLHt9KX1mdW5jdGlvbiBGeGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT57InN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLG51bGwhPT1kJiYobFthXT1YWihuZXcgJGwoW10se30pLDAsZCkpfSksbH1mdW5jdGlvbiBJ'@;
put 'bGUoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBSbGUoYyxsLGEpe3JldHVybiBjPT1hLnBhdGgmJmhwKGwsYS5wYXJhbWV0ZXJzKX1jb25zdCAkTT0iaW1wZXJhdGl2ZSI7dmFyIFJzPWZ1bmN0'@;
put 'aW9uKGMpe3JldHVybiBjW2MuTmF2aWdhdGlvblN0YXJ0PTBdPSJOYXZpZ2F0aW9uU3RhcnQiLGNbYy5OYXZpZ2F0aW9uRW5kPTFdPSJOYXZpZ2F0aW9uRW5kIixjW2MuTmF2aWdhdGlvbkNhbmNlbD0yXT0iTmF2aWdhdGlvbkNhbmNlbCIsY1tjLk5hdmlnYXRpb25FcnJvcj0zXT0iTmF2aWdh'@;
put 'dGlvbkVycm9yIixjW2MuUm91dGVzUmVjb2duaXplZD00XT0iUm91dGVzUmVjb2duaXplZCIsY1tjLlJlc29sdmVTdGFydD01XT0iUmVzb2x2ZVN0YXJ0IixjW2MuUmVzb2x2ZUVuZD02XT0iUmVzb2x2ZUVuZCIsY1tjLkd1YXJkc0NoZWNrU3RhcnQ9N109Ikd1YXJkc0NoZWNrU3RhcnQiLGNb'@;
put 'Yy5HdWFyZHNDaGVja0VuZD04XT0iR3VhcmRzQ2hlY2tFbmQiLGNbYy5Sb3V0ZUNvbmZpZ0xvYWRTdGFydD05XT0iUm91dGVDb25maWdMb2FkU3RhcnQiLGNbYy5Sb3V0ZUNvbmZpZ0xvYWRFbmQ9MTBdPSJSb3V0ZUNvbmZpZ0xvYWRFbmQiLGNbYy5DaGlsZEFjdGl2YXRpb25TdGFydD0xMV09'@;
put 'IkNoaWxkQWN0aXZhdGlvblN0YXJ0IixjW2MuQ2hpbGRBY3RpdmF0aW9uRW5kPTEyXT0iQ2hpbGRBY3RpdmF0aW9uRW5kIixjW2MuQWN0aXZhdGlvblN0YXJ0PTEzXT0iQWN0aXZhdGlvblN0YXJ0IixjW2MuQWN0aXZhdGlvbkVuZD0xNF09IkFjdGl2YXRpb25FbmQiLGNbYy5TY3JvbGw9MTVd'@;
put 'PSJTY3JvbGwiLGNbYy5OYXZpZ2F0aW9uU2tpcHBlZD0xNl09Ik5hdmlnYXRpb25Ta2lwcGVkIixjfShSc3x8e30pO2NsYXNzIGZwe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5pZD1sLHRoaXMudXJsPWF9fWNsYXNzIFZSIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQ9ImltcGVyYXRpdmUi'@;
put 'LGg9bnVsbCl7c3VwZXIobCxhKSx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvblN0YXJ0LHRoaXMubmF2aWdhdGlvblRyaWdnZXI9ZCx0aGlzLnJlc3RvcmVkU3RhdGU9aH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9Jylg'@;
put 'fX1jbGFzcyBwcCBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvbkVuZH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMu'@;
put 'dXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScpYH19dmFyIGdoPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUmVkaXJlY3Q9MF09IlJlZGlyZWN0IixjW2MuU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbj0xXT0iU3VwZXJzZWRlZEJ5TmV3TmF2aWdh'@;
put 'dGlvbiIsY1tjLk5vRGF0YUZyb21SZXNvbHZlcj0yXT0iTm9EYXRhRnJvbVJlc29sdmVyIixjW2MuR3VhcmRSZWplY3RlZD0zXT0iR3VhcmRSZWplY3RlZCIsY30oZ2h8fHt9KSxCUj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbj0wXT0iSWdub3JlZFNh'@;
put 'bWVVcmxOYXZpZ2F0aW9uIixjW2MuSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneT0xXT0iSWdub3JlZEJ5VXJsSGFuZGxpbmdTdHJhdGVneSIsY30oQlJ8fHt9KTtjbGFzcyBveSBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlz'@;
put 'LmNvZGU9aCx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvbkNhbmNlbH10b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uQ2FuY2VsKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScpYH19Y2xhc3MgYXkgZXh0ZW5kcyBmcHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRo'@;
put 'aXMucmVhc29uPWQsdGhpcy5jb2RlPWgsdGhpcy50eXBlPVJzLk5hdmlnYXRpb25Ta2lwcGVkfX1jbGFzcyBqUiBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5lcnJvcj1kLHRoaXMudGFyZ2V0PWgsdGhpcy50eXBlPVJzLk5hdmlnYXRpb25FcnJvcn10'@;
put 'b1N0cmluZygpe3JldHVybmBOYXZpZ2F0aW9uRXJyb3IoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgZXJyb3I6ICR7dGhpcy5lcnJvcn0pYH19Y2xhc3MgTGxlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJl'@;
put 'Y3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Scy5Sb3V0ZXNSZWNvZ25pemVkfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlc1JlY29nbml6ZWQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9'@;
put 'Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgSHhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Scy5HdWFyZHNDaGVja1N0YXJ0fXRvU3RyaW5nKCl7cmV0dXJu'@;
put 'YEd1YXJkc0NoZWNrU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgTnhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQs'@;
put 'aCxmKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy5zaG91bGRBY3RpdmF0ZT1mLHRoaXMudHlwZT1Scy5HdWFyZHNDaGVja0VuZH10b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja0VuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlz'@;
put 'LnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSwgc2hvdWxkQWN0aXZhdGU6ICR7dGhpcy5zaG91bGRBY3RpdmF0ZX0pYH19Y2xhc3MgVnhlIGV4dGVuZHMgZnB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3Vw'@;
put 'ZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Scy5SZXNvbHZlU3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gUmVzb2x2ZVN0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlz'@;
put 'LnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIEJ4ZSBleHRlbmRzIGZwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9UnMuUmVzb2x2ZUVuZH10b1N0'@;
put 'cmluZygpe3JldHVybmBSZXNvbHZlRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIGp4ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnJv'@;
put 'dXRlPWwsdGhpcy50eXBlPVJzLlJvdXRlQ29uZmlnTG9hZFN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZFN0YXJ0KHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyB6eGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT1Scy5Sb3V0ZUNv'@;
put 'bmZpZ0xvYWRFbmR9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVDb25maWdMb2FkRW5kKHBhdGg6ICR7dGhpcy5yb3V0ZS5wYXRofSlgfX1jbGFzcyBVeGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMudHlwZT1Scy5DaGlsZEFjdGl2YXRpb25TdGFydH10b1N0cmluZygpe3Jl'@;
put 'dHVybmBDaGlsZEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgWnhle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9UnMuQ2hpbGRBY3Rp'@;
put 'dmF0aW9uRW5kfXRvU3RyaW5nKCl7cmV0dXJuYENoaWxkQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgV3hle2NvbnN0cnVjdG9yKGwpe3RoaXMuc25hcHNob3Q9bCx0'@;
put 'aGlzLnR5cGU9UnMuQWN0aXZhdGlvblN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25TdGFydChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgWXhle2NvbnN0cnVjdG9yKGwpe3Ro'@;
put 'aXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9UnMuQWN0aXZhdGlvbkVuZH10b1N0cmluZygpe3JldHVybmBBY3RpdmF0aW9uRW5kKHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBPbGV7Y29uc3Ry'@;
put 'dWN0b3IobCxhLGQpe3RoaXMucm91dGVyRXZlbnQ9bCx0aGlzLnBvc2l0aW9uPWEsdGhpcy5hbmNob3I9ZCx0aGlzLnR5cGU9UnMuU2Nyb2xsfXRvU3RyaW5nKCl7cmV0dXJuYFNjcm9sbChhbmNob3I6ICcke3RoaXMuYW5jaG9yfScsIHBvc2l0aW9uOiAnJHt0aGlzLnBvc2l0aW9uP2Ake3Ro'@;
put 'aXMucG9zaXRpb25bMF19LCAke3RoaXMucG9zaXRpb25bMV19YDpudWxsfScpYH19Y2xhc3MgSlp7fWNsYXNzIFFae2NvbnN0cnVjdG9yKGwpe3RoaXMudXJsPWx9fWNsYXNzIEd4ZXtjb25zdHJ1Y3Rvcigpe3RoaXMub3V0bGV0PW51bGwsdGhpcy5yb3V0ZT1udWxsLHRoaXMuaW5qZWN0b3I9'@;
put 'bnVsbCx0aGlzLmNoaWxkcmVuPW5ldyBLTSx0aGlzLmF0dGFjaFJlZj1udWxsfX1sZXQgS009KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1vbkNoaWxkT3V0bGV0Q3JlYXRlZChhLGQpe2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZUNvbnRleHQoYSk7'@;
put 'aC5vdXRsZXQ9ZCx0aGlzLmNvbnRleHRzLnNldChhLGgpfW9uQ2hpbGRPdXRsZXREZXN0cm95ZWQoYSl7Y29uc3QgZD10aGlzLmdldENvbnRleHQoYSk7ZCYmKGQub3V0bGV0PW51bGwsZC5hdHRhY2hSZWY9bnVsbCl9b25PdXRsZXREZWFjdGl2YXRlZCgpe2NvbnN0IGE9dGhpcy5jb250ZXh0'@;
put 'cztyZXR1cm4gdGhpcy5jb250ZXh0cz1uZXcgTWFwLGF9b25PdXRsZXRSZUF0dGFjaGVkKGEpe3RoaXMuY29udGV4dHM9YX1nZXRPckNyZWF0ZUNvbnRleHQoYSl7bGV0IGQ9dGhpcy5nZXRDb250ZXh0KGEpO3JldHVybiBkfHwoZD1uZXcgR3hlLHRoaXMuY29udGV4dHMuc2V0KGEsZCkpLGR9'@;
put 'Z2V0Q29udGV4dChhKXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQoYSl8fG51bGx9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZElu'@;
put 'OiJyb290In0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgUGxle2NvbnN0cnVjdG9yKGwpe3RoaXMuX3Jvb3Q9bH1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb290LnZhbHVlfXBhcmVudChsKXtjb25zdCBhPXRoaXMucGF0aEZyb21Sb290KGwpO3JldHVybiBhLmxlbmd0aD4xP2FbYS5sZW5ndGgt'@;
put 'Ml06bnVsbH1jaGlsZHJlbihsKXtjb25zdCBhPWVXKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGE/YS5jaGlsZHJlbi5tYXAoZD0+ZC52YWx1ZSk6W119Zmlyc3RDaGlsZChsKXtjb25zdCBhPWVXKGwsdGhpcy5fcm9vdCk7cmV0dXJuIGEmJmEuY2hpbGRyZW4ubGVuZ3RoPjA/YS5jaGlsZHJlblsw'@;
put 'XS52YWx1ZTpudWxsfXNpYmxpbmdzKGwpe2NvbnN0IGE9dFcobCx0aGlzLl9yb290KTtyZXR1cm4gYS5sZW5ndGg8Mj9bXTphW2EubGVuZ3RoLTJdLmNoaWxkcmVuLm1hcChoPT5oLnZhbHVlKS5maWx0ZXIoaD0+aCE9PWwpfXBhdGhGcm9tUm9vdChsKXtyZXR1cm4gdFcobCx0aGlzLl9yb290'@;
put 'KS5tYXAoYT0+YS52YWx1ZSl9fWZ1bmN0aW9uIGVXKGMsbCl7aWYoYz09PWwudmFsdWUpcmV0dXJuIGw7Zm9yKGNvbnN0IGEgb2YgbC5jaGlsZHJlbil7Y29uc3QgZD1lVyhjLGEpO2lmKGQpcmV0dXJuIGR9cmV0dXJuIG51bGx9ZnVuY3Rpb24gdFcoYyxsKXtpZihjPT09bC52YWx1ZSlyZXR1'@;
put 'cm5bbF07Zm9yKGNvbnN0IGEgb2YgbC5jaGlsZHJlbil7Y29uc3QgZD10VyhjLGEpO2lmKGQubGVuZ3RoKXJldHVybiBkLnVuc2hpZnQobCksZH1yZXR1cm5bXX1jbGFzcyBaZntjb25zdHJ1Y3RvcihsLGEpe3RoaXMudmFsdWU9bCx0aGlzLmNoaWxkcmVuPWF9dG9TdHJpbmcoKXtyZXR1cm5g'@;
put 'VHJlZU5vZGUoJHt0aGlzLnZhbHVlfSlgfX1mdW5jdGlvbiBzeShjKXtjb25zdCBsPXt9O3JldHVybiBjJiZjLmNoaWxkcmVuLmZvckVhY2goYT0+bFthLnZhbHVlLm91dGxldF09YSksbH1jbGFzcyBGbGUgZXh0ZW5kcyBQbGV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsKSx0aGlzLnNuYXBz'@;
put 'aG90PWEsaVcodGhpcyxsKX10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90LnRvU3RyaW5nKCl9fWZ1bmN0aW9uIEhsZShjKXtjb25zdCBsPWZ1bmN0aW9uICR4ZShjKXtjb25zdCBmPW5ldyByVyhbXSx7fSx7fSwiIix7fSxLYSxjLG51bGwse30pO3JldHVybiBuZXcgTmxlKCIiLG5l'@;
put 'dyBaZihmLFtdKSl9KGMpLGE9bmV3IGVpKFtuZXcgWk0oIiIse30pXSksZD1uZXcgZWkoe30pLGg9bmV3IGVpKHt9KSxmPW5ldyBlaSh7fSksdj1uZXcgZWkoIiIpLE09bmV3IEN1KGEsZCxmLHYsaCxLYSxjLGwucm9vdCk7cmV0dXJuIE0uc25hcHNob3Q9bC5yb290LG5ldyBGbGUobmV3IFpm'@;
put 'KE0sW10pLGwpfWNsYXNzIEN1e2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7dGhpcy51cmxTdWJqZWN0PWwsdGhpcy5wYXJhbXNTdWJqZWN0PWEsdGhpcy5xdWVyeVBhcmFtc1N1YmplY3Q9ZCx0aGlzLmZyYWdtZW50U3ViamVjdD1oLHRoaXMuZGF0YVN1YmplY3Q9Zix0aGlzLm91dGxl'@;
put 'dD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5fZnV0dXJlU25hcHNob3Q9RCx0aGlzLnRpdGxlPXRoaXMuZGF0YVN1YmplY3Q/LnBpcGUoTHIoWj0+WltVTV0pKT8/ZmEodm9pZCAwKSx0aGlzLnVybD1sLHRoaXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0'@;
put 'aGlzLmRhdGE9Zn1nZXQgcm91dGVDb25maWcoKXtyZXR1cm4gdGhpcy5fZnV0dXJlU25hcHNob3Qucm91dGVDb25maWd9Z2V0IHJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH1nZXQgcGFyZW50KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhcmVudCh0aGlzKX1nZXQg'@;
put 'Zmlyc3RDaGlsZCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5maXJzdENoaWxkKHRoaXMpfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX1nZXQgcGF0aEZyb21Sb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnBhdGhGcm9tUm9v'@;
put 'dCh0aGlzKX1nZXQgcGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1NYXA/Pz10aGlzLnBhcmFtcy5waXBlKExyKGw9PnR5KGwpKSksdGhpcy5fcGFyYW1NYXB9Z2V0IHF1ZXJ5UGFyYW1NYXAoKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbU1hcD8/PXRoaXMucXVlcnlQYXJhbXMucGlwZShM'@;
put 'cihsPT50eShsKSkpLHRoaXMuX3F1ZXJ5UGFyYW1NYXB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5zbmFwc2hvdD90aGlzLnNuYXBzaG90LnRvU3RyaW5nKCk6YEZ1dHVyZSgke3RoaXMuX2Z1dHVyZVNuYXBzaG90fSlgfX1mdW5jdGlvbiBuVyhjLGwsYT0iZW1wdHlPbmx5Iil7bGV0IGQ7Y29u'@;
put 'c3R7cm91dGVDb25maWc6aH09YztyZXR1cm4gZD1udWxsPT09bHx8ImFsd2F5cyIhPT1hJiYiIiE9PWg/LnBhdGgmJihsLmNvbXBvbmVudHx8bC5yb3V0ZUNvbmZpZz8ubG9hZENvbXBvbmVudCk/e3BhcmFtczp7Li4uYy5wYXJhbXN9LGRhdGE6ey4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5k'@;
put 'YXRhLC4uLmMuX3Jlc29sdmVkRGF0YT8/e319fTp7cGFyYW1zOnsuLi5sLnBhcmFtcywuLi5jLnBhcmFtc30sZGF0YTp7Li4ubC5kYXRhLC4uLmMuZGF0YX0scmVzb2x2ZTp7Li4uYy5kYXRhLC4uLmwuZGF0YSwuLi5oPy5kYXRhLC4uLmMuX3Jlc29sdmVkRGF0YX19LGgmJkJsZShoKSYmKGQu'@;
put 'cmVzb2x2ZVtVTV09aC50aXRsZSksZH1jbGFzcyByV3tnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5kYXRhPy5bVU1dfWNvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxaKXt0aGlzLnVybD1sLHRoaXMucGFyYW1zPWEsdGhpcy5xdWVyeVBhcmFtcz1kLHRoaXMuZnJhZ21lbnQ9aCx0aGlzLmRh'@;
put 'dGE9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PU0sdGhpcy5yb3V0ZUNvbmZpZz1ELHRoaXMuX3Jlc29sdmU9Wn1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdl'@;
put 'dCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfWdldCBwYXRoRnJvbVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21S'@;
put 'b290KHRoaXMpfWdldCBwYXJhbU1hcCgpe3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PXR5KHRoaXMucGFyYW1zKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89dHkodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJh'@;
put 'bU1hcH10b1N0cmluZygpe3JldHVybmBSb3V0ZSh1cmw6JyR7dGhpcy51cmwubWFwKGQ9PmQudG9TdHJpbmcoKSkuam9pbigiLyIpfScsIHBhdGg6JyR7dGhpcy5yb3V0ZUNvbmZpZz90aGlzLnJvdXRlQ29uZmlnLnBhdGg6IiJ9JylgfX1jbGFzcyBObGUgZXh0ZW5kcyBQbGV7Y29uc3RydWN0'@;
put 'b3IobCxhKXtzdXBlcihhKSx0aGlzLnVybD1sLGlXKHRoaXMsYSl9dG9TdHJpbmcoKXtyZXR1cm4gVmxlKHRoaXMuX3Jvb3QpfX1mdW5jdGlvbiBpVyhjLGwpe2wudmFsdWUuX3JvdXRlclN0YXRlPWMsbC5jaGlsZHJlbi5mb3JFYWNoKGE9PmlXKGMsYSkpfWZ1bmN0aW9uIFZsZShjKXtjb25z'@;
put 'dCBsPWMuY2hpbGRyZW4ubGVuZ3RoPjA/YCB7ICR7Yy5jaGlsZHJlbi5tYXAoVmxlKS5qb2luKCIsICIpfSB9IGA6IiI7cmV0dXJuYCR7Yy52YWx1ZX0ke2x9YH1mdW5jdGlvbiBvVyhjKXtpZihjLnNuYXBzaG90KXtjb25zdCBsPWMuc25hcHNob3QsYT1jLl9mdXR1cmVTbmFwc2hvdDtjLnNu'@;
put 'YXBzaG90PWEsaHAobC5xdWVyeVBhcmFtcyxhLnF1ZXJ5UGFyYW1zKXx8Yy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dChhLnF1ZXJ5UGFyYW1zKSxsLmZyYWdtZW50IT09YS5mcmFnbWVudCYmYy5mcmFnbWVudFN1YmplY3QubmV4dChhLmZyYWdtZW50KSxocChsLnBhcmFtcyxhLnBhcmFtcyl8'@;
put 'fGMucGFyYW1zU3ViamVjdC5uZXh0KGEucGFyYW1zKSxmdW5jdGlvbiBkeGUoYyxsKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7KythKWlmKCFocChjW2FdLGxbYV0pKXJldHVybiExO3JldHVybiEwfShsLnVybCxhLnVybCl8fGMudXJs'@;
put 'U3ViamVjdC5uZXh0KGEudXJsKSxocChsLmRhdGEsYS5kYXRhKXx8Yy5kYXRhU3ViamVjdC5uZXh0KGEuZGF0YSl9ZWxzZSBjLnNuYXBzaG90PWMuX2Z1dHVyZVNuYXBzaG90LGMuZGF0YVN1YmplY3QubmV4dChjLl9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBhVyhjLGwpe2NvbnN0'@;
put 'IGE9aHAoYy5wYXJhbXMsbC5wYXJhbXMpJiZmdW5jdGlvbiBneGUoYyxsKXtyZXR1cm4gcTgoYyxsKSYmYy5ldmVyeSgoYSxkKT0+aHAoYS5wYXJhbWV0ZXJzLGxbZF0ucGFyYW1ldGVycykpfShjLnVybCxsLnVybCk7cmV0dXJuIGEmJiEoIWMucGFyZW50IT0hbC5wYXJlbnQpJiYoIWMucGFy'@;
put 'ZW50fHxhVyhjLnBhcmVudCxsLnBhcmVudCkpfWZ1bmN0aW9uIEJsZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMudGl0bGV8fG51bGw9PT1jLnRpdGxlfWxldCByZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0'@;
put 'ZT1udWxsLHRoaXMubmFtZT1LYSx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBYcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IFhyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBYcix0aGlzLmRldGFjaEV2ZW50cz1uZXcgWHIsdGhpcy5wYXJlbnRDb250ZXh0cz1maShLTSksdGhpcy5sb2NhdGlv'@;
put 'bj1maShEYSksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1maSh4cyksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWZpKGhjKSx0aGlzLmlucHV0QmluZGVyPWZpKHpSLHtvcHRpb25hbDohMH0pLHRoaXMuc3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1dHM9ITB9Z2V0IGFjdGl2YXRlZENvbXBv'@;
put 'bmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOmQscHJldmlvdXNWYWx1ZTpofT1hLm5hbWU7aWYoZClyZXR1cm47dGhpcy5pc1RyYWNrZWRJblBhcmVudENvbnRleHRzKGgpJiYodGhpcy5kZWFjdGl2YXRl'@;
put 'KCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGgpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyh0aGlzLm5hbWUpJiZ0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hp'@;
put 'bGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhhKXtyZXR1cm4gdGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KGEpPy5vdXRsZXQ9PT10aGlzfW5n'@;
put 'T25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVkKHRoaXMubmFtZSx0aGlzKSx0aGlzLmFjdGl2YXRlZClyZXR1cm47Y29uc3QgYT10aGlzLnBh'@;
put 'cmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTthPy5yb3V0ZSYmKGEuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKGEuYXR0YWNoUmVmLGEucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKGEucm91dGUsYS5pbmplY3RvcikpfWdldCBpc0FjdGl2YXRlZCgpe3JldHVybiEhdGhpcy5hY3Rp'@;
put 'dmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0ZSgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMiwhMSk7cmV0dXJuIHRo'@;
put 'aXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX1kZXRhY2goKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IFFuKDQwMTIsITEpO3RoaXMu'@;
put 'bG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRzLmVtaXQoYS5pbnN0YW5jZSksYX1hdHRhY2goYSxkKXt0aGlzLmFjdGl2YXRlZD1hLHRoaXMu'@;
put 'X2FjdGl2YXRlZFJvdXRlPWQsdGhpcy5sb2NhdGlvbi5pbnNlcnQoYS5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hdHRhY2hFdmVudHMuZW1pdChhLmluc3RhbmNlKX1kZWFjdGl2YXRlKCl7aWYodGhp'@;
put 'cy5hY3RpdmF0ZWQpe2NvbnN0IGE9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlzLmRlYWN0aXZhdGVFdmVudHMuZW1pdChhKX19YWN0aXZhdGVXaXRoKGEsZCl7aWYodGhpcy5p'@;
put 'c0FjdGl2YXRlZCl0aHJvdyBuZXcgUW4oNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9YTtjb25zdCBoPXRoaXMubG9jYXRpb24sdj1hLnNuYXBzaG90LmNvbXBvbmVudCxNPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0KHRoaXMubmFtZSkuY2hpbGRyZW4sRD1u'@;
put 'ZXcgc1coYSxNLGguaW5qZWN0b3IpO3RoaXMuYWN0aXZhdGVkPWguY3JlYXRlQ29tcG9uZW50KHYse2luZGV4OmgubGVuZ3RoLGluamVjdG9yOkQsZW52aXJvbm1lbnRJbmplY3RvcjpkPz90aGlzLmVudmlyb25tZW50SW5qZWN0b3J9KSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVj'@;
put 'aygpLHRoaXMuaW5wdXRCaW5kZXI/LmJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHRoaXMpLHRoaXMuYWN0aXZhdGVFdmVudHMuZW1pdCh0aGlzLmFjdGl2YXRlZC5pbnN0YW5jZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9'@;
put 'fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJyb3V0ZXItb3V0bGV0Il1dLGlucHV0czp7bmFtZToibmFtZSJ9LG91dHB1dHM6e2FjdGl2YXRlRXZlbnRzOiJhY3RpdmF0ZSIsZGVhY3RpdmF0ZUV2ZW50czoiZGVhY3RpdmF0ZSIsYXR0YWNoRXZlbnRzOiJh'@;
put 'dHRhY2giLGRldGFjaEV2ZW50czoiZGV0YWNoIn0sZXhwb3J0QXM6WyJvdXRsZXQiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt3bF19KX19cmV0dXJuIGN9KSgpO2NsYXNzIHNXe19fbmdPdXRsZXRJbmplY3RvcihsKXtyZXR1cm4gbmV3IHNXKHRoaXMucm91dGUsdGhpcy5jaGlsZENvbnRl'@;
put 'eHRzLGwpfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhpcy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PUN1P3RoaXMucm91dGU6bD09PUtNP3RoaXMuY2hpbGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgelI9'@;
put 'bmV3IFN0KCIiKTtsZXQgamxlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zPW5ldyBNYXB9YmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQoYSl7dGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSksdGhpcy5zdWJz'@;
put 'Y3JpYmVUb1JvdXRlRGF0YShhKX11bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl7dGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucy5nZXQoYSk/LnVuc3Vic2NyaWJlKCksdGhpcy5vdXRsZXREYXRhU3Vic2NyaXB0aW9ucy5kZWxldGUoYSl9c3Vic2NyaWJlVG9Sb3V0ZURhdGEoYSl7Y29u'@;
put 'c3R7YWN0aXZhdGVkUm91dGU6ZH09YSxoPUs4KFtkLnF1ZXJ5UGFyYW1zLGQucGFyYW1zLGQuZGF0YV0pLnBpcGUoVjEoKFtmLHYsTV0sRCk9PihNPXsuLi5mLC4uLnYsLi4uTX0sMD09PUQ/ZmEoTSk6UHJvbWlzZS5yZXNvbHZlKE0pKSkpLnN1YnNjcmliZShmPT57aWYoIWEuaXNBY3RpdmF0'@;
put 'ZWR8fCFhLmFjdGl2YXRlZENvbXBvbmVudFJlZnx8YS5hY3RpdmF0ZWRSb3V0ZSE9PWR8fG51bGw9PT1kLmNvbXBvbmVudClyZXR1cm4gdm9pZCB0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKTtjb25zdCB2PWZ1bmN0aW9uIHNfZShjKXtjb25zdCBsPVZhKGMpO2lmKCFsKXJldHVy'@;
put 'biBudWxsO2NvbnN0IGE9bmV3IEE4KGwpO3JldHVybntnZXQgc2VsZWN0b3IoKXtyZXR1cm4gYS5zZWxlY3Rvcn0sZ2V0IHR5cGUoKXtyZXR1cm4gYS5jb21wb25lbnRUeXBlfSxnZXQgaW5wdXRzKCl7cmV0dXJuIGEuaW5wdXRzfSxnZXQgb3V0cHV0cygpe3JldHVybiBhLm91dHB1dHN9LGdl'@;
put 'dCBuZ0NvbnRlbnRTZWxlY3RvcnMoKXtyZXR1cm4gYS5uZ0NvbnRlbnRTZWxlY3RvcnN9LGdldCBpc1N0YW5kYWxvbmUoKXtyZXR1cm4gbC5zdGFuZGFsb25lfSxnZXQgaXNTaWduYWwoKXtyZXR1cm4gbC5zaWduYWxzfX19KGQuY29tcG9uZW50KTtpZih2KWZvcihjb25zdHt0ZW1wbGF0ZU5h'@;
put 'bWU6TX1vZiB2LmlucHV0cylhLmFjdGl2YXRlZENvbXBvbmVudFJlZi5zZXRJbnB1dChNLGZbTV0pO2Vsc2UgdGhpcy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEoYSl9KTt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLnNldChhLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHFNKGMsbCxhKXtpZihhJiZjLnNob3VsZFJldXNlUm91dGUobC52YWx1ZSxhLnZhbHVlLnNuYXBzaG90KSl7'@;
put 'Y29uc3QgZD1hLnZhbHVlO2QuX2Z1dHVyZVNuYXBzaG90PWwudmFsdWU7Y29uc3QgaD1mdW5jdGlvbiBxeGUoYyxsLGEpe3JldHVybiBsLmNoaWxkcmVuLm1hcChkPT57Zm9yKGNvbnN0IGggb2YgYS5jaGlsZHJlbilpZihjLnNob3VsZFJldXNlUm91dGUoZC52YWx1ZSxoLnZhbHVlLnNuYXBz'@;
put 'aG90KSlyZXR1cm4gcU0oYyxkLGgpO3JldHVybiBxTShjLGQpfSl9KGMsbCxhKTtyZXR1cm4gbmV3IFpmKGQsaCl9e2lmKGMuc2hvdWxkQXR0YWNoKGwudmFsdWUpKXtjb25zdCBmPWMucmV0cmlldmUobC52YWx1ZSk7aWYobnVsbCE9PWYpe2NvbnN0IHY9Zi5yb3V0ZTtyZXR1cm4gdi52YWx1'@;
put 'ZS5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZSx2LmNoaWxkcmVuPWwuY2hpbGRyZW4ubWFwKE09PnFNKGMsTSkpLHZ9fWNvbnN0IGQ9ZnVuY3Rpb24gWHhlKGMpe3JldHVybiBuZXcgQ3UobmV3IGVpKGMudXJsKSxuZXcgZWkoYy5wYXJhbXMpLG5ldyBlaShjLnF1ZXJ5UGFyYW1zKSxuZXcgZWko'@;
put 'Yy5mcmFnbWVudCksbmV3IGVpKGMuZGF0YSksYy5vdXRsZXQsYy5jb21wb25lbnQsYyl9KGwudmFsdWUpLGg9bC5jaGlsZHJlbi5tYXAoZj0+cU0oYyxmKSk7cmV0dXJuIG5ldyBaZihkLGgpfX1jb25zdCB6bGU9Im5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yIjtmdW5jdGlvbiBVbGUoYyxs'@;
put 'KXtjb25zdHtyZWRpcmVjdFRvOmEsbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9uczpkfT1peShsKT97cmVkaXJlY3RUbzpsLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6dm9pZCAwfTpsLGg9WmxlKCExLGdoLlJlZGlyZWN0KTtyZXR1cm4gaC51cmw9YSxoLm5hdmlnYXRpb25CZWhhdmlvck9w'@;
put 'dGlvbnM9ZCxofWZ1bmN0aW9uIFpsZShjLGwpe2NvbnN0IGE9bmV3IEVycm9yKGBOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3I6ICR7Y3x8IiJ9YCk7cmV0dXJuIGFbemxlXT0hMCxhLmNhbmNlbGxhdGlvbkNvZGU9bCxhfWZ1bmN0aW9uIFdsZShjKXtyZXR1cm4hIWMmJmNbemxlXX1sZXQgWWxl'@;
put 'PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbJEldLGRlY2xzOjEs'@;
put 'dmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddLGVuY2Fwc3VsYXRpb246Mn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbFcoYyl7Y29uc3QgbD1jLmNoaWxkcmVuJiZjLmNoaWxkcmVuLm1hcChsVyksYT1s'@;
put 'P3suLi5jLGNoaWxkcmVuOmx9OnsuLi5jfTtyZXR1cm4hYS5jb21wb25lbnQmJiFhLmxvYWRDb21wb25lbnQmJihsfHxhLmxvYWRDaGlsZHJlbikmJmEub3V0bGV0JiZhLm91dGxldCE9PUthJiYoYS5jb21wb25lbnQ9WWxlKSxhfWZ1bmN0aW9uIGdwKGMpe3JldHVybiBjLm91dGxldHx8S2F9'@;
put 'ZnVuY3Rpb24gWE0oYyl7aWYoIWMpcmV0dXJuIG51bGw7aWYoYy5yb3V0ZUNvbmZpZz8uX2luamVjdG9yKXJldHVybiBjLnJvdXRlQ29uZmlnLl9pbmplY3Rvcjtmb3IobGV0IGw9Yy5wYXJlbnQ7bDtsPWwucGFyZW50KXtjb25zdCBhPWwucm91dGVDb25maWc7aWYoYT8uX2xvYWRlZEluamVj'@;
put 'dG9yKXJldHVybiBhLl9sb2FkZWRJbmplY3RvcjtpZihhPy5faW5qZWN0b3IpcmV0dXJuIGEuX2luamVjdG9yfXJldHVybiBudWxsfWNsYXNzIG9FZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5PWwsdGhpcy5mdXR1cmVTdGF0ZT1hLHRoaXMuY3VyclN0'@;
put 'YXRlPWQsdGhpcy5mb3J3YXJkRXZlbnQ9aCx0aGlzLmlucHV0QmluZGluZ0VuYWJsZWQ9Zn1hY3RpdmF0ZShsKXtjb25zdCBhPXRoaXMuZnV0dXJlU3RhdGUuX3Jvb3QsZD10aGlzLmN1cnJTdGF0ZT90aGlzLmN1cnJTdGF0ZS5fcm9vdDpudWxsO3RoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVz'@;
put 'KGEsZCxsKSxvVyh0aGlzLmZ1dHVyZVN0YXRlLnJvb3QpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhhLGQsbCl9ZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPXN5KGEpO2wuY2hpbGRyZW4uZm9yRWFjaChmPT57Y29uc3Qgdj1mLnZhbHVlLm91dGxldDt0aGlzLmRlYWN0'@;
put 'aXZhdGVSb3V0ZXMoZixoW3ZdLGQpLGRlbGV0ZSBoW3ZdfSksT2JqZWN0LnZhbHVlcyhoKS5mb3JFYWNoKGY9Pnt0aGlzLmRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGYsZCl9KX1kZWFjdGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtp'@;
put 'ZihoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldENvbnRleHQoaC5vdXRsZXQpO3YmJnRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNoaWxkcmVuKX1lbHNlIHRoaXMuZGVhY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKTtlbHNlIGYmJnRoaXMuZGVhY3RpdmF0ZVJv'@;
put 'dXRlQW5kSXRzQ2hpbGRyZW4oYSxkKX1kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihsLGEpe2wudmFsdWUuY29tcG9uZW50JiZ0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGREZXRhY2gobC52YWx1ZS5zbmFwc2hvdCk/dGhpcy5kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShs'@;
put 'LGEpOnRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0KGwsYSl9ZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWUobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZhbHVlLm91dGxldCksaD1kJiZsLnZhbHVlLmNvbXBvbmVudD9kLmNoaWxkcmVuOmEsZj1zeShsKTtmb3IoY29uc3QgdiBv'@;
put 'ZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odixoKTtpZihkJiZkLm91dGxldCl7Y29uc3Qgdj1kLm91dGxldC5kZXRhY2goKSxNPWQuY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3Jl'@;
put 'KGwudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjp2LHJvdXRlOmwsY29udGV4dHM6TX0pfX1kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQobCxhKXtjb25zdCBkPWEuZ2V0Q29udGV4dChsLnZhbHVlLm91dGxldCksaD1kJiZsLnZhbHVlLmNvbXBvbmVudD9kLmNoaWxkcmVuOmEsZj1zeShs'@;
put 'KTtmb3IoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKGYpKXRoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4odixoKTtkJiYoZC5vdXRsZXQmJihkLm91dGxldC5kZWFjdGl2YXRlKCksZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCkpLGQuYXR0YWNoUmVmPW51bGwsZC5y'@;
put 'b3V0ZT1udWxsKX1hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKXtjb25zdCBoPXN5KGEpO2wuY2hpbGRyZW4uZm9yRWFjaChmPT57dGhpcy5hY3RpdmF0ZVJvdXRlcyhmLGhbZi52YWx1ZS5vdXRsZXRdLGQpLHRoaXMuZm9yd2FyZEV2ZW50KG5ldyBZeGUoZi52YWx1ZS5zbmFwc2hvdCkpfSks'@;
put 'bC5jaGlsZHJlbi5sZW5ndGgmJnRoaXMuZm9yd2FyZEV2ZW50KG5ldyBaeGUobC52YWx1ZS5zbmFwc2hvdCkpfWFjdGl2YXRlUm91dGVzKGwsYSxkKXtjb25zdCBoPWwudmFsdWUsZj1hP2EudmFsdWU6bnVsbDtpZihvVyhoKSxoPT09ZilpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldE9y'@;
put 'Q3JlYXRlQ29udGV4dChoLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSx2LmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLGEsZCk7ZWxzZSBpZihoLmNvbXBvbmVudCl7Y29uc3Qgdj1kLmdldE9yQ3JlYXRlQ29udGV4dChoLm91dGxldCk7aWYo'@;
put 'dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc2hvdWxkQXR0YWNoKGguc25hcHNob3QpKXtjb25zdCBNPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKGguc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKGguc25hcHNob3QsbnVsbCksdi5jaGlsZHJlbi5vbk91'@;
put 'dGxldFJlQXR0YWNoZWQoTS5jb250ZXh0cyksdi5hdHRhY2hSZWY9TS5jb21wb25lbnRSZWYsdi5yb3V0ZT1NLnJvdXRlLnZhbHVlLHYub3V0bGV0JiZ2Lm91dGxldC5hdHRhY2goTS5jb21wb25lbnRSZWYsTS5yb3V0ZS52YWx1ZSksb1coTS5yb3V0ZS52YWx1ZSksdGhpcy5hY3RpdmF0ZUNo'@;
put 'aWxkUm91dGVzKGwsbnVsbCx2LmNoaWxkcmVuKX1lbHNle2NvbnN0IE09WE0oaC5zbmFwc2hvdCk7di5hdHRhY2hSZWY9bnVsbCx2LnJvdXRlPWgsdi5pbmplY3Rvcj1NLHYub3V0bGV0JiZ2Lm91dGxldC5hY3RpdmF0ZVdpdGgoaCx2LmluamVjdG9yKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0'@;
put 'ZXMobCxudWxsLHYuY2hpbGRyZW4pfX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsZCl9fWNsYXNzIEdsZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnBhdGg9bCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoLTFdfX1jbGFzcyBVUntjb25zdHJ1Y3Rvcihs'@;
put 'LGEpe3RoaXMuY29tcG9uZW50PWwsdGhpcy5yb3V0ZT1hfX1mdW5jdGlvbiBhRWUoYyxsLGEpe2NvbnN0IGQ9Yy5fcm9vdDtyZXR1cm4gSk0oZCxsP2wuX3Jvb3Q6bnVsbCxhLFtkLnZhbHVlXSl9ZnVuY3Rpb24gbHkoYyxsKXtjb25zdCBhPVN5bWJvbCgpLGQ9bC5nZXQoYyxhKTtyZXR1cm4g'@;
put 'ZD09PWE/ImZ1bmN0aW9uIiE9dHlwZW9mIGN8fGZ1bmN0aW9uIGVhKGMpe3JldHVybiBudWxsIT09UGEoYyl9KGMpP2wuZ2V0KGMpOmM6ZH1mdW5jdGlvbiBKTShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVDaGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPXN5KGwpO3Jl'@;
put 'dHVybiBjLmNoaWxkcmVuLmZvckVhY2godj0+eyhmdW5jdGlvbiBsRWUoYyxsLGEsZCxoPXtjYW5EZWFjdGl2YXRlQ2hlY2tzOltdLGNhbkFjdGl2YXRlQ2hlY2tzOltdfSl7Y29uc3QgZj1jLnZhbHVlLHY9bD9sLnZhbHVlOm51bGwsTT1hP2EuZ2V0Q29udGV4dChjLnZhbHVlLm91dGxldCk6'@;
put 'bnVsbDtpZih2JiZmLnJvdXRlQ29uZmlnPT09di5yb3V0ZUNvbmZpZyl7Y29uc3QgRD1mdW5jdGlvbiBjRWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXJldHVybiBhKGMsbCk7c3dpdGNoKGEpe2Nhc2UicGF0aFBhcmFtc0NoYW5nZSI6cmV0dXJuIXE4KGMudXJsLGwudXJsKTtj'@;
put 'YXNlInBhdGhQYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hcTgoYy51cmwsbC51cmwpfHwhaHAoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFyYW1zKTtjYXNlImFsd2F5cyI6cmV0dXJuITA7Y2FzZSJwYXJhbXNPclF1ZXJ5UGFyYW1zQ2hhbmdlIjpyZXR1cm4hYVcoYyxsKXx8IWhw'@;
put 'KGMucXVlcnlQYXJhbXMsbC5xdWVyeVBhcmFtcyk7ZGVmYXVsdDpyZXR1cm4hYVcoYyxsKX19KHYsZixmLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7RD9oLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IEdsZShkKSk6KGYuZGF0YT12LmRhdGEsZi5fcmVzb2x2ZWREYXRh'@;
put 'PXYuX3Jlc29sdmVkRGF0YSksSk0oYyxsLGYuY29tcG9uZW50P00/TS5jaGlsZHJlbjpudWxsOmEsZCxoKSxEJiZNJiZNLm91dGxldCYmTS5vdXRsZXQuaXNBY3RpdmF0ZWQmJmguY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBVUihNLm91dGxldC5jb21wb25lbnQsdikpfWVsc2UgdiYm'@;
put 'UU0obCxNLGgpLGguY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgR2xlKGQpKSxKTShjLG51bGwsZi5jb21wb25lbnQ/TT9NLmNoaWxkcmVuOm51bGw6YSxkLGgpfSkodixmW3YudmFsdWUub3V0bGV0XSxhLGQuY29uY2F0KFt2LnZhbHVlXSksaCksZGVsZXRlIGZbdi52YWx1ZS5vdXRsZXRd'@;
put 'fSksT2JqZWN0LmVudHJpZXMoZikuZm9yRWFjaCgoW3YsTV0pPT5RTShNLGEuZ2V0Q29udGV4dCh2KSxoKSksaH1mdW5jdGlvbiBRTShjLGwsYSl7Y29uc3QgZD1zeShjKSxoPWMudmFsdWU7T2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2Ysdl0pPT57UU0odixoLmNvbXBvbmVudD9sP2wu'@;
put 'Y2hpbGRyZW4uZ2V0Q29udGV4dChmKTpudWxsOmwsYSl9KSxhLmNhbkRlYWN0aXZhdGVDaGVja3MucHVzaChuZXcgVVIoaC5jb21wb25lbnQmJmwmJmwub3V0bGV0JiZsLm91dGxldC5pc0FjdGl2YXRlZD9sLm91dGxldC5jb21wb25lbnQ6bnVsbCxoKSl9ZnVuY3Rpb24gZXgoYyl7cmV0dXJu'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gJGxlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRFJ8fCJFbXB0eUVycm9yIj09PWM/Lm5hbWV9Y29uc3QgWlI9U3ltYm9sKCJJTklUSUFMX1ZBTFVFIik7ZnVuY3Rpb24gY3koKXtyZXR1cm4gVjEoYz0+SzgoYy5tYXAobD0+bC5waXBlKFVm'@;
put 'KDEpLHgyKFpSKSkpKS5waXBlKExyKGw9Pntmb3IoY29uc3QgYSBvZiBsKWlmKCEwIT09YSl7aWYoYT09PVpSKXJldHVybiBaUjtpZighMT09PWF8fGEgaW5zdGFuY2VvZiBueSlyZXR1cm4gYX1yZXR1cm4hMH0pLEdsKGw9PmwhPT1aUiksVWYoMSkpKX1mdW5jdGlvbiBLbGUoYyl7cmV0dXJu'@;
put 'IGZ1bmN0aW9uIGZuKC4uLmMpe3JldHVybiBJaShjKX0oV3UobD0+e2lmKGl5KGwpKXRocm93IFVsZSgwLGwpfSksTHIobD0+ITA9PT1sKSl9Y2xhc3MgY1d7Y29uc3RydWN0b3IobCl7dGhpcy5zZWdtZW50R3JvdXA9bHx8bnVsbH19Y2xhc3MgdVcgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rv'@;
put 'cihsKXtzdXBlcigpLHRoaXMudXJsVHJlZT1sfX1mdW5jdGlvbiB1eShjKXtyZXR1cm4gSVIobmV3IGNXKGMpKX1jbGFzcyBBRWV7Y29uc3RydWN0b3IobCxhKXt0aGlzLnVybFNlcmlhbGl6ZXI9bCx0aGlzLnVybFRyZWU9YX1saW5lcmFsaXplU2VnbWVudHMobCxhKXtsZXQgZD1bXSxoPWEu'@;
put 'cm9vdDtmb3IoOzspe2lmKGQ9ZC5jb25jYXQoaC5zZWdtZW50cyksMD09PWgubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4gZmEoZCk7aWYoaC5udW1iZXJPZkNoaWxkcmVuPjF8fCFoLmNoaWxkcmVuW0thXSlyZXR1cm4gSVIobmV3IFFuKDRlMywhMSkpO2g9aC5jaGlsZHJlbltLYV19fWFwcGx5'@;
put 'UmVkaXJlY3RDb21tYW5kcyhsLGEsZCl7Y29uc3QgaD10aGlzLmFwcGx5UmVkaXJlY3RDcmVhdGVVcmxUcmVlKGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpLGwsZCk7aWYoYS5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IHVXKGgpO3JldHVybiBofWFwcGx5UmVkaXJlY3RDcmVhdGVV'@;
put 'cmxUcmVlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50R3JvdXAobCxhLnJvb3QsZCxoKTtyZXR1cm4gbmV3IG55KGYsdGhpcy5jcmVhdGVRdWVyeVBhcmFtcyhhLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyksYS5mcmFnbWVudCl9Y3JlYXRlUXVlcnlQ'@;
put 'YXJhbXMobCxhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhsKS5mb3JFYWNoKChbaCxmXSk9PntpZigic3RyaW5nIj09dHlwZW9mIGYmJmYuc3RhcnRzV2l0aCgiOiIpKXtjb25zdCBNPWYuc3Vic3RyaW5nKDEpO2RbaF09YVtNXX1lbHNlIGRbaF09Zn0pLGR9Y3JlYXRlU2Vn'@;
put 'bWVudEdyb3VwKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5jcmVhdGVTZWdtZW50cyhsLGEuc2VnbWVudHMsZCxoKTtsZXQgdj17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYS5jaGlsZHJlbikuZm9yRWFjaCgoW00sRF0pPT57dltNXT10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLEQsZCxoKX0p'@;
put 'LG5ldyAkbChmLHYpfWNyZWF0ZVNlZ21lbnRzKGwsYSxkLGgpe3JldHVybiBhLm1hcChmPT5mLnBhdGguc3RhcnRzV2l0aCgiOiIpP3RoaXMuZmluZFBvc1BhcmFtKGwsZixoKTp0aGlzLmZpbmRPclJldHVybihmLGQpKX1maW5kUG9zUGFyYW0obCxhLGQpe2NvbnN0IGg9ZFthLnBhdGguc3Vi'@;
put 'c3RyaW5nKDEpXTtpZighaCl0aHJvdyBuZXcgUW4oNDAwMSwhMSk7cmV0dXJuIGh9ZmluZE9yUmV0dXJuKGwsYSl7bGV0IGQ9MDtmb3IoY29uc3QgaCBvZiBhKXtpZihoLnBhdGg9PT1sLnBhdGgpcmV0dXJuIGEuc3BsaWNlKGQpLGg7ZCsrfXJldHVybiBsfX1jb25zdCBkVz17bWF0Y2hlZDoh'@;
put 'MSxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2Z1bmN0aW9uIGtFZShjLGwsYSxkLGgpe2NvbnN0IGY9aFcoYyxsLGEpO3JldHVybiBmLm1hdGNoZWQ/KGQ9ZnVuY3Rpb24gUXhlKGMsbCl7'@;
put 'cmV0dXJuIGMucHJvdmlkZXJzJiYhYy5faW5qZWN0b3ImJihjLl9pbmplY3Rvcj1HNChjLnByb3ZpZGVycyxsLGBSb3V0ZTogJHtjLnBhdGh9YCkpLGMuX2luamVjdG9yPz9sfShsLGQpLGZ1bmN0aW9uIHhFZShjLGwsYSxkKXtjb25zdCBoPWwuY2FuTWF0Y2g7cmV0dXJuIGgmJjAhPT1oLmxl'@;
put 'bmd0aD9mYShoLm1hcCh2PT57Y29uc3QgTT1seSh2LGMpO3JldHVybiBvbShmdW5jdGlvbiBnRWUoYyl7cmV0dXJuIGMmJmV4KGMuY2FuTWF0Y2gpfShNKT9NLmNhbk1hdGNoKGwsYSk6cTAoYywoKT0+TShsLGEpKSl9KSkucGlwZShjeSgpLEtsZSgpKTpmYSghMCl9KGQsbCxhKS5waXBlKExy'@;
put 'KHY9PiEwPT09dj9mOnsuLi5kV30pKSk6ZmEoZil9ZnVuY3Rpb24gaFcoYyxsLGEpe2lmKCIqKiI9PT1sLnBhdGgpcmV0dXJuIGZ1bmN0aW9uIERFZShjKXtyZXR1cm57bWF0Y2hlZDohMCxwYXJhbWV0ZXJzOmMubGVuZ3RoPjA/Z2xlKGMpLnBhcmFtZXRlcnM6e30sY29uc3VtZWRTZWdtZW50'@;
put 'czpjLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fX0oYSk7aWYoIiI9PT1sLnBhdGgpcmV0dXJuImZ1bGwiPT09bC5wYXRoTWF0Y2gmJihjLmhhc0NoaWxkcmVuKCl8fGEubGVuZ3RoPjApP3suLi5kV306e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50'@;
put 'czpbXSxyZW1haW5pbmdTZWdtZW50czphLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2NvbnN0IGg9KGwubWF0Y2hlcnx8dXhlKShhLGMsbCk7aWYoIWgpcmV0dXJuey4uLmRXfTtjb25zdCBmPXt9O09iamVjdC5lbnRyaWVzKGgucG9zUGFyYW1zPz97fSkuZm9y'@;
put 'RWFjaCgoW00sRF0pPT57ZltNXT1ELnBhdGh9KTtjb25zdCB2PWguY29uc3VtZWQubGVuZ3RoPjA/ey4uLmYsLi4uaC5jb25zdW1lZFtoLmNvbnN1bWVkLmxlbmd0aC0xXS5wYXJhbWV0ZXJzfTpmO3JldHVybnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6aC5jb25zdW1lZCxyZW1haW5p'@;
put 'bmdTZWdtZW50czphLnNsaWNlKGguY29uc3VtZWQubGVuZ3RoKSxwYXJhbWV0ZXJzOnYscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6aC5wb3NQYXJhbXM/P3t9fX1mdW5jdGlvbiBxbGUoYyxsLGEsZCl7cmV0dXJuIGEubGVuZ3RoPjAmJmZ1bmN0aW9uIExFZShjLGwsYSl7cmV0dXJuIGEuc29t'@;
put 'ZShkPT5XUihjLGwsZCkmJmdwKGQpIT09S2EpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgJGwobCxSRWUoZCxuZXcgJGwoYSxjLmNoaWxkcmVuKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09YS5sZW5ndGgmJmZ1bmN0aW9uIE9FZShjLGwsYSl7cmV0dXJuIGEuc29tZShkPT5XUihjLGws'@;
put 'ZCkpfShjLGEsZCk/e3NlZ21lbnRHcm91cDpuZXcgJGwoYy5zZWdtZW50cyxJRWUoYyxhLGQsYy5jaGlsZHJlbikpLHNsaWNlZFNlZ21lbnRzOmF9OntzZWdtZW50R3JvdXA6bmV3ICRsKGMuc2VnbWVudHMsYy5jaGlsZHJlbiksc2xpY2VkU2VnbWVudHM6YX19ZnVuY3Rpb24gSUVlKGMsbCxh'@;
put 'LGQpe2NvbnN0IGg9e307Zm9yKGNvbnN0IGYgb2YgYSlpZihXUihjLGwsZikmJiFkW2dwKGYpXSl7Y29uc3Qgdj1uZXcgJGwoW10se30pO2hbZ3AoZildPXZ9cmV0dXJuey4uLmQsLi4uaH19ZnVuY3Rpb24gUkVlKGMsbCl7Y29uc3QgYT17fTthW0thXT1sO2Zvcihjb25zdCBkIG9mIGMpaWYo'@;
put 'IiI9PT1kLnBhdGgmJmdwKGQpIT09S2Epe2NvbnN0IGg9bmV3ICRsKFtdLHt9KTthW2dwKGQpXT1ofXJldHVybiBhfWZ1bmN0aW9uIFdSKGMsbCxhKXtyZXR1cm4oIShjLmhhc0NoaWxkcmVuKCl8fGwubGVuZ3RoPjApfHwiZnVsbCIhPT1hLnBhdGhNYXRjaCkmJiIiPT09YS5wYXRofWNsYXNz'@;
put 'IEhFZXt9Y2xhc3MgQkVle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0pe3RoaXMuaW5qZWN0b3I9bCx0aGlzLmNvbmZpZ0xvYWRlcj1hLHRoaXMucm9vdENvbXBvbmVudFR5cGU9ZCx0aGlzLmNvbmZpZz1oLHRoaXMudXJsVHJlZT1mLHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneT12'@;
put 'LHRoaXMudXJsU2VyaWFsaXplcj1NLHRoaXMuYXBwbHlSZWRpcmVjdHM9bmV3IEFFZSh0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy51cmxUcmVlKSx0aGlzLmFic29sdXRlUmVkaXJlY3RDb3VudD0wLHRoaXMuYWxsb3dSZWRpcmVjdHM9ITB9bm9NYXRjaEVycm9yKGwpe3JldHVybiBuZXcgUW4o'@;
put 'NDAwMixgJyR7bC5zZWdtZW50R3JvdXB9J2ApfXJlY29nbml6ZSgpe2NvbnN0IGw9cWxlKHRoaXMudXJsVHJlZS5yb290LFtdLFtdLHRoaXMuY29uZmlnKS5zZWdtZW50R3JvdXA7cmV0dXJuIHRoaXMubWF0Y2gobCkucGlwZShMcihhPT57Y29uc3QgZD1uZXcgclcoW10sT2JqZWN0LmZyZWV6'@;
put 'ZSh7fSksT2JqZWN0LmZyZWV6ZSh7Li4udGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zfSksdGhpcy51cmxUcmVlLmZyYWdtZW50LHt9LEthLHRoaXMucm9vdENvbXBvbmVudFR5cGUsbnVsbCx7fSksaD1uZXcgWmYoZCxhKSxmPW5ldyBObGUoIiIsaCksdj1mdW5jdGlvbiBEeGUoYyxsLGE9bnVs'@;
put 'bCxkPW51bGwpe3JldHVybiBUbGUoRWxlKGMpLGwsYSxkKX0oZCxbXSx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLmZyYWdtZW50KTtyZXR1cm4gdi5xdWVyeVBhcmFtcz10aGlzLnVybFRyZWUucXVlcnlQYXJhbXMsZi51cmw9dGhpcy51cmxTZXJpYWxpemVyLnNlcmlh'@;
put 'bGl6ZSh2KSx0aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGYuX3Jvb3QsbnVsbCkse3N0YXRlOmYsdHJlZTp2fX0pKX1tYXRjaChsKXtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKHRoaXMuaW5qZWN0b3IsdGhpcy5jb25maWcsbCxLYSkucGlwZShleShkPT57aWYoZCBpbnN0YW5j'@;
put 'ZW9mIHVXKXJldHVybiB0aGlzLnVybFRyZWU9ZC51cmxUcmVlLHRoaXMubWF0Y2goZC51cmxUcmVlLnJvb3QpO3Rocm93IGQgaW5zdGFuY2VvZiBjVz90aGlzLm5vTWF0Y2hFcnJvcihkKTpkfSkpfWluaGVyaXRQYXJhbXNBbmREYXRhKGwsYSl7Y29uc3QgZD1sLnZhbHVlLGg9blcoZCxhLHRo'@;
put 'aXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSk7ZC5wYXJhbXM9T2JqZWN0LmZyZWV6ZShoLnBhcmFtcyksZC5kYXRhPU9iamVjdC5mcmVlemUoaC5kYXRhKSxsLmNoaWxkcmVuLmZvckVhY2goZj0+dGhpcy5pbmhlcml0UGFyYW1zQW5kRGF0YShmLGQpKX1wcm9jZXNzU2VnbWVudEdyb3Vw'@;
put 'KGwsYSxkLGgpe3JldHVybiAwPT09ZC5zZWdtZW50cy5sZW5ndGgmJmQuaGFzQ2hpbGRyZW4oKT90aGlzLnByb2Nlc3NDaGlsZHJlbihsLGEsZCk6dGhpcy5wcm9jZXNzU2VnbWVudChsLGEsZCxkLnNlZ21lbnRzLGgsITApLnBpcGUoTHIoZj0+ZiBpbnN0YW5jZW9mIFpmP1tmXTpbXSkpfXBy'@;
put 'b2Nlc3NDaGlsZHJlbihsLGEsZCl7Y29uc3QgaD1bXTtmb3IoY29uc3QgZiBvZiBPYmplY3Qua2V5cyhkLmNoaWxkcmVuKSkicHJpbWFyeSI9PT1mP2gudW5zaGlmdChmKTpoLnB1c2goZik7cmV0dXJuIFp1KGgpLnBpcGUoUWIoZj0+e2NvbnN0IHY9ZC5jaGlsZHJlbltmXSxNPWZ1bmN0aW9u'@;
put 'IHJFZShjLGwpe2NvbnN0IGE9Yy5maWx0ZXIoZD0+Z3AoZCk9PT1sKTtyZXR1cm4gYS5wdXNoKC4uLmMuZmlsdGVyKGQ9PmdwKGQpIT09bCkpLGF9KGEsZik7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cChsLE0sdixmKX0pLGZ1bmN0aW9uIGF4ZShjLGwpe3JldHVybiBWaShmdW5j'@;
put 'dGlvbiBveGUoYyxsLGEsZCxoKXtyZXR1cm4oZix2KT0+e2xldCBNPWEsRD1sLFo9MDtmLnN1YnNjcmliZShOaSh2LG5lPT57Y29uc3QgY2U9WisrO0Q9TT9jKEQsbmUsY2UpOihNPSEwLG5lKSxkJiZ2Lm5leHQoRCl9LGgmJigoKT0+e00mJnYubmV4dChEKSx2LmNvbXBsZXRlKCl9KSkpfX0o'@;
put 'YyxsLGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oKGYsdik9PihmLnB1c2goLi4udiksZikpLFJSKG51bGwpLGZ1bmN0aW9uIHN4ZShjLGwpe2NvbnN0IGE9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZD0+ZC5waXBlKGM/R2woKGgsZik9PmMoaCxmLGQpKTpjbixXWigxKSxhP1JSKGwp'@;
put 'OmZsZSgoKT0+bmV3IERSKSl9KCksSDAoZj0+e2lmKG51bGw9PT1mKXJldHVybiB1eShkKTtjb25zdCB2PVhsZShmKTtyZXR1cm4gZnVuY3Rpb24gakVlKGMpe2Muc29ydCgobCxhKT0+bC52YWx1ZS5vdXRsZXQ9PT1LYT8tMTphLnZhbHVlLm91dGxldD09PUthPzE6bC52YWx1ZS5vdXRsZXQu'@;
put 'bG9jYWxlQ29tcGFyZShhLnZhbHVlLm91dGxldCkpfSh2KSxmYSh2KX0pKX1wcm9jZXNzU2VnbWVudChsLGEsZCxoLGYsdil7cmV0dXJuIFp1KGEpLnBpcGUoUWIoTT0+dGhpcy5wcm9jZXNzU2VnbWVudEFnYWluc3RSb3V0ZShNLl9pbmplY3Rvcj8/bCxhLE0sZCxoLGYsdikucGlwZShleShE'@;
put 'PT57aWYoRCBpbnN0YW5jZW9mIGNXKXJldHVybiBmYShudWxsKTt0aHJvdyBEfSkpKSxpbShNPT4hIU0pLGV5KE09PntpZigkbGUoTSkpcmV0dXJuIGZ1bmN0aW9uIEZFZShjLGwsYSl7cmV0dXJuIDA9PT1sLmxlbmd0aCYmIWMuY2hpbGRyZW5bYV19KGQsaCxmKT9mYShuZXcgSEVlKTp1eShk'@;
put 'KTt0aHJvdyBNfSkpfXByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKGwsYSxkLGgsZix2LE0pe3JldHVybiBmdW5jdGlvbiBQRWUoYyxsLGEsZCl7cmV0dXJuISEoZ3AoYyk9PT1kfHxkIT09S2EmJldSKGwsYSxjKSkmJmhXKGwsYyxhKS5tYXRjaGVkfShkLGgsZix2KT92b2lkIDA9PT1kLnJl'@;
put 'ZGlyZWN0VG8/dGhpcy5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUobCxoLGQsZix2KTp0aGlzLmFsbG93UmVkaXJlY3RzJiZNP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QobCxoLGEsZCxmLHYpOnV5KGgpOnV5KGgpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91'@;
put 'dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZix2KXtjb25zdHttYXRjaGVkOk0sY29uc3VtZWRTZWdtZW50czpELHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOloscmVtYWluaW5nU2VnbWVudHM6bmV9PWhXKGEsaCxmKTtpZighTSlyZXR1cm4gdXkoYSk7aC5yZWRpcmVjdFRvLnN0YXJ0c1dpdGgo'@;
put 'Ii8iKSYmKHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50KyssdGhpcy5hYnNvbHV0ZVJlZGlyZWN0Q291bnQ+MzEmJih0aGlzLmFsbG93UmVkaXJlY3RzPSExKSk7Y29uc3QgY2U9dGhpcy5hcHBseVJlZGlyZWN0cy5hcHBseVJlZGlyZWN0Q29tbWFuZHMoRCxoLnJlZGlyZWN0VG8sWik7cmV0'@;
put 'dXJuIHRoaXMuYXBwbHlSZWRpcmVjdHMubGluZXJhbGl6ZVNlZ21lbnRzKGgsY2UpLnBpcGUoSDAoYmU9PnRoaXMucHJvY2Vzc1NlZ21lbnQobCxkLGEsYmUuY29uY2F0KG5lKSx2LCExKSkpfW1hdGNoU2VnbWVudEFnYWluc3RSb3V0ZShsLGEsZCxoLGYpe2NvbnN0IHY9a0VlKGEsZCxoLGwp'@;
put 'O3JldHVybiIqKiI9PT1kLnBhdGgmJihhLmNoaWxkcmVuPXt9KSx2LnBpcGUoVjEoTT0+TS5tYXRjaGVkP3RoaXMuZ2V0Q2hpbGRDb25maWcobD1kLl9pbmplY3Rvcj8/bCxkLGgpLnBpcGUoVjEoKHtyb3V0ZXM6RH0pPT57Y29uc3QgWj1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7Y29uc3VtZWRT'@;
put 'ZWdtZW50czpuZSxyZW1haW5pbmdTZWdtZW50czpjZSxwYXJhbWV0ZXJzOmJlfT1NLEVlPW5ldyByVyhuZSxiZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQsZnVuY3Rpb24gVUVlKGMpe3JldHVybiBjLmRhdGF8fHt9'@;
put 'fShkKSxncChkKSxkLmNvbXBvbmVudD8/ZC5fbG9hZGVkQ29tcG9uZW50Pz9udWxsLGQsZnVuY3Rpb24gWkVlKGMpe3JldHVybiBjLnJlc29sdmV8fHt9fShkKSkse3NlZ21lbnRHcm91cDpCZSxzbGljZWRTZWdtZW50czpxZX09cWxlKGEsbmUsY2UsRCk7aWYoMD09PXFlLmxlbmd0aCYmQmUu'@;
put 'aGFzQ2hpbGRyZW4oKSlyZXR1cm4gdGhpcy5wcm9jZXNzQ2hpbGRyZW4oWixELEJlKS5waXBlKExyKHB0PT5udWxsPT09cHQ/bnVsbDpuZXcgWmYoRWUscHQpKSk7aWYoMD09PUQubGVuZ3RoJiYwPT09cWUubGVuZ3RoKXJldHVybiBmYShuZXcgWmYoRWUsW10pKTtjb25zdCBydD1ncChkKT09'@;
put 'PWY7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnQoWixELEJlLHFlLHJ0P0thOmYsITApLnBpcGUoTHIocHQ9Pm5ldyBaZihFZSxwdCBpbnN0YW5jZW9mIFpmP1twdF06W10pKSl9KSk6dXkoYSkpKX1nZXRDaGlsZENvbmZpZyhsLGEsZCl7cmV0dXJuIGEuY2hpbGRyZW4/ZmEoe3JvdXRlczph'@;
put 'LmNoaWxkcmVuLGluamVjdG9yOmx9KTphLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1hLl9sb2FkZWRSb3V0ZXM/ZmEoe3JvdXRlczphLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6YS5fbG9hZGVkSW5qZWN0b3J9KTpmdW5jdGlvbiBNRWUoYyxsLGEsZCl7Y29uc3QgaD1sLmNhbkxvYWQ7cmV0dXJu'@;
put 'IHZvaWQgMD09PWh8fDA9PT1oLmxlbmd0aD9mYSghMCk6ZmEoaC5tYXAodj0+e2NvbnN0IE09bHkodixjKTtyZXR1cm4gb20oZnVuY3Rpb24gZEVlKGMpe3JldHVybiBjJiZleChjLmNhbkxvYWQpfShNKT9NLmNhbkxvYWQobCxhKTpxMChjLCgpPT5NKGwsYSkpKX0pKS5waXBlKGN5KCksS2xl'@;
put 'KCkpfShsLGEsZCkucGlwZShIMChoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUoV3UoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVjdG9yfSkpOmZ1bmN0aW9uIFRFZShjKXtyZXR1cm4gSVIoWmxlKCExLGdo'@;
put 'Lkd1YXJkUmVqZWN0ZWQpKX0oKSkpOmZhKHtyb3V0ZXM6W10saW5qZWN0b3I6bH0pfX1mdW5jdGlvbiB6RWUoYyl7Y29uc3QgbD1jLnZhbHVlLnJvdXRlQ29uZmlnO3JldHVybiBsJiYiIj09PWwucGF0aH1mdW5jdGlvbiBYbGUoYyl7Y29uc3QgbD1bXSxhPW5ldyBTZXQ7Zm9yKGNvbnN0IGQg'@;
put 'b2YgYyl7aWYoIXpFZShkKSl7bC5wdXNoKGQpO2NvbnRpbnVlfWNvbnN0IGg9bC5maW5kKGY9PmQudmFsdWUucm91dGVDb25maWc9PT1mLnZhbHVlLnJvdXRlQ29uZmlnKTt2b2lkIDAhPT1oPyhoLmNoaWxkcmVuLnB1c2goLi4uZC5jaGlsZHJlbiksYS5hZGQoaCkpOmwucHVzaChkKX1mb3Io'@;
put 'Y29uc3QgZCBvZiBhKXtjb25zdCBoPVhsZShkLmNoaWxkcmVuKTtsLnB1c2gobmV3IFpmKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIEpsZShjKXtjb25zdCBsPWMuY2hpbGRyZW4ubWFwKGE9PkpsZShhKSkuZmxhdCgpO3JldHVybltjLC4uLmxd'@;
put 'fWZ1bmN0aW9uIGZXKGMpe3JldHVybiBWMShsPT57Y29uc3QgYT1jKGwpO3JldHVybiBhP1p1KGEpLnBpcGUoTHIoKCk9PmwpKTpmYShsKX0pfWxldCBRbGU9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBkLGg9YS5yb290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29s'@;
put 'dmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PUthKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtVTV19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9'@;
put 'fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkocUVlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCkscUVlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBRbGV7Y29uc3RydWN0b3IoYSl7c3VwZXIoKSx0aGlzLnRpdGxlPWF9dXBkYXRlVGl0'@;
put 'bGUoYSl7Y29uc3QgZD10aGlzLmJ1aWxkVGl0bGUoYSk7dm9pZCAwIT09ZCYmdGhpcy50aXRsZS5zZXRUaXRsZShkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihFQ2UpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46Yyxm'@;
put 'YWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBkeT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pih7fSl9KSxoeT1uZXcgU3QoIiIpO2xldCBwVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5j'@;
put 'b21wb25lbnRMb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY2hpbGRyZW5Mb2FkZXJzPW5ldyBXZWFrTWFwLHRoaXMuY29tcGlsZXI9ZmkoR2llKX1sb2FkQ29tcG9uZW50KGEpe2lmKHRoaXMuY29tcG9uZW50TG9hZGVycy5nZXQoYSkpcmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5nZXQo'@;
put 'YSk7aWYoYS5fbG9hZGVkQ29tcG9uZW50KXJldHVybiBmYShhLl9sb2FkZWRDb21wb25lbnQpO3RoaXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKGEpO2NvbnN0IGQ9b20oYS5sb2FkQ29tcG9uZW50KCkpLnBpcGUoTHIoZWNlKSxXdShmPT57dGhpcy5v'@;
put 'bkxvYWRFbmRMaXN0ZW5lciYmdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcihhKSxhLl9sb2FkZWRDb21wb25lbnQ9Zn0pLHpNKCgpPT57dGhpcy5jb21wb25lbnRMb2FkZXJzLmRlbGV0ZShhKX0pKSxoPW5ldyBaWihkLCgpPT5uZXcgV24pLnBpcGUoVVooKSk7cmV0dXJuIHRoaXMuY29tcG9uZW50'@;
put 'TG9hZGVycy5zZXQoYSxoKSxofWxvYWRDaGlsZHJlbihhLGQpe2lmKHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKSlyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuZ2V0KGQpO2lmKGQuX2xvYWRlZFJvdXRlcylyZXR1cm4gZmEoe3JvdXRlczpkLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6'@;
put 'ZC5fbG9hZGVkSW5qZWN0b3J9KTt0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihkKTtjb25zdCBmPWZ1bmN0aW9uIFhFZShjLGwsYSxkKXtyZXR1cm4gb20oYy5sb2FkQ2hpbGRyZW4oKSkucGlwZShMcihlY2UpLEgwKGg9PmggaW5zdGFuY2VvZiBt'@;
put 'Y3x8QXJyYXkuaXNBcnJheShoKT9mYShoKTpadShsLmNvbXBpbGVNb2R1bGVBc3luYyhoKSkpLExyKGg9PntkJiZkKGMpO2xldCBmLHYsTT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShoKT8odj1oLCEwKTooZj1oLmNyZWF0ZShhKS5pbmplY3Rvcix2PWYuZ2V0KGh5LFtdLHtvcHRpb25hbDoh'@;
put 'MCxzZWxmOiEwfSkuZmxhdCgpKSx7cm91dGVzOnYubWFwKGxXKSxpbmplY3RvcjpmfX0pKX0oZCx0aGlzLmNvbXBpbGVyLGEsdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcikucGlwZSh6TSgoKT0+e3RoaXMuY2hpbGRyZW5Mb2FkZXJzLmRlbGV0ZShkKX0pKSx2PW5ldyBaWihmLCgpPT5uZXcgV24p'@;
put 'LnBpcGUoVVooKSk7cmV0dXJuIHRoaXMuY2hpbGRyZW5Mb2FkZXJzLnNldChkLHYpLHZ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRl'@;
put 'ZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZWNlKGMpe3JldHVybiBmdW5jdGlvbiBKRWUoYyl7cmV0dXJuIGMmJiJvYmplY3QiPT10eXBlb2YgYyYmImRlZmF1bHQiaW4gY30oYyk/Yy5kZWZhdWx0OmN9bGV0IGdXPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkoUUVlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksUUVlPSgoKT0+e2NsYXNzIGN7c2hvdWxkUHJvY2Vzc1VybChhKXtyZXR1'@;
put 'cm4hMH1leHRyYWN0KGEpe3JldHVybiBhfW1lcmdlKGEsZCl7cmV0dXJuIGF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJy'@;
put 'b290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgdGNlPW5ldyBTdCgiIiksbmNlPW5ldyBTdCgiIik7ZnVuY3Rpb24gZVRlKGMsbCxhKXtjb25zdCBkPWMuZ2V0KG5jZSksaD1jLmdldCh2cyk7cmV0dXJuIGMuZ2V0KFlvKS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKCFoLnN0YXJ0Vmlld1Ry'@;
put 'YW5zaXRpb258fGQuc2tpcE5leHRUcmFuc2l0aW9uKXJldHVybiBkLnNraXBOZXh0VHJhbnNpdGlvbj0hMSxuZXcgUHJvbWlzZShaPT5zZXRUaW1lb3V0KFopKTtsZXQgZjtjb25zdCB2PW5ldyBQcm9taXNlKFo9PntmPVp9KSxNPWguc3RhcnRWaWV3VHJhbnNpdGlvbigoKT0+KGYoKSxmdW5j'@;
put 'dGlvbiB0VGUoYyl7cmV0dXJuIG5ldyBQcm9taXNlKGw9PntiYihsLHtpbmplY3RvcjpjfSl9KX0oYykpKSx7b25WaWV3VHJhbnNpdGlvbkNyZWF0ZWQ6RH09ZDtyZXR1cm4gRCYmcTAoYywoKT0+RCh7dHJhbnNpdGlvbjpNLGZyb206bCx0bzphfSkpLHZ9KX1sZXQgWVI9KCgpPT57Y2xhc3Mg'@;
put 'Y3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsLHRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uPW51bGws'@;
put 'dGhpcy5ldmVudHM9bmV3IFduLHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdD1uZXcgV24sdGhpcy5jb25maWdMb2FkZXI9ZmkocFcpLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1maShoYyksdGhpcy51cmxTZXJpYWxpemVyPWZpKHJ5KSx0aGlzLnJvb3RDb250ZXh0cz1maShLTSksdGhp'@;
put 'cy5sb2NhdGlvbj1maShwaCksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPW51bGwhPT1maSh6Uix7b3B0aW9uYWw6ITB9KSx0aGlzLnRpdGxlU3RyYXRlZ3k9ZmkoUWxlKSx0aGlzLm9wdGlvbnM9ZmkoZHkse29wdGlvbmFsOiEwfSl8fHt9LHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVn'@;
put 'eT10aGlzLm9wdGlvbnMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneXx8ImVtcHR5T25seSIsdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5PWZpKGdXKSx0aGlzLmNyZWF0ZVZpZXdUcmFuc2l0aW9uPWZpKHRjZSx7b3B0aW9uYWw6ITB9KSx0aGlzLm5hdmlnYXRpb25JZD0wLHRoaXMuYWZ0ZXJQ'@;
put 'cmVhY3RpdmF0aW9uPSgpPT5mYSh2b2lkIDApLHRoaXMucm9vdENvbXBvbmVudFR5cGU9bnVsbCx0aGlzLmNvbmZpZ0xvYWRlci5vbkxvYWRFbmRMaXN0ZW5lcj1oPT50aGlzLmV2ZW50cy5uZXh0KG5ldyB6eGUoaCkpLHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZFN0YXJ0TGlzdGVuZXI9aD0+'@;
put 'dGhpcy5ldmVudHMubmV4dChuZXcganhlKGgpKX1jb21wbGV0ZSgpe3RoaXMudHJhbnNpdGlvbnM/LmNvbXBsZXRlKCl9aGFuZGxlTmF2aWdhdGlvblJlcXVlc3QoYSl7Y29uc3QgZD0rK3RoaXMubmF2aWdhdGlvbklkO3RoaXMudHJhbnNpdGlvbnM/Lm5leHQoey4uLnRoaXMudHJhbnNpdGlv'@;
put 'bnMudmFsdWUsLi4uYSxpZDpkfSl9c2V0dXBOYXZpZ2F0aW9ucyhhLGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnM9bmV3IGVpKHtpZDowLGN1cnJlbnRVcmxUcmVlOmQsY3VycmVudFJhd1VybDpkLGV4dHJhY3RlZFVybDp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSx1'@;
put 'cmxBZnRlclJlZGlyZWN0czp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChkKSxyYXdVcmw6ZCxleHRyYXM6e30scmVzb2x2ZTpudWxsLHJlamVjdDpudWxsLHByb21pc2U6UHJvbWlzZS5yZXNvbHZlKCEwKSxzb3VyY2U6JE0scmVzdG9yZWRTdGF0ZTpudWxsLGN1cnJlbnRTbmFw'@;
put 'c2hvdDpoLnNuYXBzaG90LHRhcmdldFNuYXBzaG90Om51bGwsY3VycmVudFJvdXRlclN0YXRlOmgsdGFyZ2V0Um91dGVyU3RhdGU6bnVsbCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOltdLGNhbkRlYWN0aXZhdGVDaGVja3M6W119LGd1YXJkc1Jlc3VsdDpudWxsfSksdGhpcy50cmFuc2l0'@;
put 'aW9ucy5waXBlKEdsKGY9PjAhPT1mLmlkKSxMcihmPT4oey4uLmYsZXh0cmFjdGVkVXJsOnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGYucmF3VXJsKX0pKSxWMShmPT57bGV0IHY9ITEsTT0hMTtyZXR1cm4gZmEoZikucGlwZShWMShEPT57aWYodGhpcy5uYXZpZ2F0aW9uSWQ+'@;
put 'Zi5pZClyZXR1cm4gdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihmLCIiLGdoLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pLE0yO3RoaXMuY3VycmVudFRyYW5zaXRpb249Zix0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXtpZDpELmlkLGluaXRpYWxVcmw6RC5yYXdVcmwsZXh0cmFj'@;
put 'dGVkVXJsOkQuZXh0cmFjdGVkVXJsLHRyaWdnZXI6RC5zb3VyY2UsZXh0cmFzOkQuZXh0cmFzLHByZXZpb3VzTmF2aWdhdGlvbjp0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj97Li4udGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24scHJldmlvdXNOYXZpZ2F0aW9uOm51bGx9Om51'@;
put 'bGx9O2NvbnN0IFo9IWEubmF2aWdhdGVkfHx0aGlzLmlzVXBkYXRpbmdJbnRlcm5hbFN0YXRlKCl8fHRoaXMuaXNVcGRhdGVkQnJvd3NlclVybCgpO2lmKCFaJiYicmVsb2FkIiE9PShELmV4dHJhcy5vblNhbWVVcmxOYXZpZ2F0aW9uPz9hLm9uU2FtZVVybE5hdmlnYXRpb24pKXtjb25zdCBj'@;
put 'ZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgYXkoRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQucmF3VXJsKSxjZSxCUi5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24pKSxELnJlc29sdmUobnVsbCksTTJ9aWYodGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3Vs'@;
put 'ZFByb2Nlc3NVcmwoRC5yYXdVcmwpKXJldHVybiBmYShEKS5waXBlKFYxKGNlPT57Y29uc3QgYmU9dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKTtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgVlIoY2UuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShjZS5leHRyYWN0ZWRV'@;
put 'cmwpLGNlLnNvdXJjZSxjZS5yZXN0b3JlZFN0YXRlKSksYmUhPT10aGlzLnRyYW5zaXRpb25zPy5nZXRWYWx1ZSgpP00yOlByb21pc2UucmVzb2x2ZShjZSl9KSxmdW5jdGlvbiBXRWUoYyxsLGEsZCxoLGYpe3JldHVybiBIMCh2PT5mdW5jdGlvbiBORWUoYyxsLGEsZCxoLGYsdj0iZW1wdHlP'@;
put 'bmx5Iil7cmV0dXJuIG5ldyBCRWUoYyxsLGEsZCxoLHYsZikucmVjb2duaXplKCl9KGMsbCxhLGQsdi5leHRyYWN0ZWRVcmwsaCxmKS5waXBlKExyKCh7c3RhdGU6TSx0cmVlOkR9KT0+KHsuLi52LHRhcmdldFNuYXBzaG90Ok0sdXJsQWZ0ZXJSZWRpcmVjdHM6RH0pKSkpfSh0aGlzLmVudmly'@;
put 'b25tZW50SW5qZWN0b3IsdGhpcy5jb25maWdMb2FkZXIsdGhpcy5yb290Q29tcG9uZW50VHlwZSxhLmNvbmZpZyx0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KSxXdShjZT0+e2YudGFyZ2V0U25hcHNob3Q9Y2UudGFyZ2V0U25hcHNob3QsZi51cmxB'@;
put 'ZnRlclJlZGlyZWN0cz1jZS51cmxBZnRlclJlZGlyZWN0cyx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXsuLi50aGlzLmN1cnJlbnROYXZpZ2F0aW9uLGZpbmFsVXJsOmNlLnVybEFmdGVyUmVkaXJlY3RzfTtjb25zdCBiZT1uZXcgTGxlKGNlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxp'@;
put 'emUoY2UuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGNlLnVybEFmdGVyUmVkaXJlY3RzKSxjZS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChiZSl9KSk7aWYoWiYmdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoRC5j'@;
put 'dXJyZW50UmF3VXJsKSl7Y29uc3R7aWQ6Y2UsZXh0cmFjdGVkVXJsOmJlLHNvdXJjZTpFZSxyZXN0b3JlZFN0YXRlOkJlLGV4dHJhczpxZX09RCxydD1uZXcgVlIoY2UsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShiZSksRWUsQmUpO3RoaXMuZXZlbnRzLm5leHQocnQpO2NvbnN0IHB0'@;
put 'PUhsZSh0aGlzLnJvb3RDb21wb25lbnRUeXBlKS5zbmFwc2hvdDtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELHRhcmdldFNuYXBzaG90OnB0LHVybEFmdGVyUmVkaXJlY3RzOmJlLGV4dHJhczp7Li4ucWUsc2tpcExvY2F0aW9uQ2hhbmdlOiExLHJlcGxhY2VVcmw6ITF9'@;
put 'fSx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uLmZpbmFsVXJsPWJlLGZhKGYpfXtjb25zdCBjZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgYXkoRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQuZXh0cmFjdGVkVXJsKSxjZSxCUi5JZ25vcmVkQnlVcmxIYW5kbGluZ1N0'@;
put 'cmF0ZWd5KSksRC5yZXNvbHZlKG51bGwpLE0yfX0pLFd1KEQ9Pntjb25zdCBaPW5ldyBIeGUoRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQudXJsQWZ0ZXJSZWRpcmVjdHMpLEQudGFyZ2V0U25h'@;
put 'cHNob3QpO3RoaXMuZXZlbnRzLm5leHQoWil9KSxMcihEPT4odGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELGd1YXJkczphRWUoRC50YXJnZXRTbmFwc2hvdCxELmN1cnJlbnRTbmFwc2hvdCx0aGlzLnJvb3RDb250ZXh0cyl9LGYpKSxmdW5jdGlvbiBtRWUoYyxsKXtyZXR1cm4gSDAo'@;
put 'YT0+e2NvbnN0e3RhcmdldFNuYXBzaG90OmQsY3VycmVudFNuYXBzaG90OmgsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpmLGNhbkRlYWN0aXZhdGVDaGVja3M6dn19PWE7cmV0dXJuIDA9PT12Lmxlbmd0aCYmMD09PWYubGVuZ3RoP2ZhKHsuLi5hLGd1YXJkc1Jlc3VsdDohMH0pOmZ1bmN0'@;
put 'aW9uIHZFZShjLGwsYSxkKXtyZXR1cm4gWnUoYykucGlwZShIMChoPT5mdW5jdGlvbiBTRWUoYyxsLGEsZCxoKXtjb25zdCBmPWwmJmwucm91dGVDb25maWc/bC5yb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlOm51bGw7cmV0dXJuIGYmJjAhPT1mLmxlbmd0aD9mYShmLm1hcChNPT57Y29uc3Qg'@;
put 'RD1YTShsKT8/aCxaPWx5KE0sRCk7cmV0dXJuIG9tKGZ1bmN0aW9uIHBFZShjKXtyZXR1cm4gYyYmZXgoYy5jYW5EZWFjdGl2YXRlKX0oWik/Wi5jYW5EZWFjdGl2YXRlKGMsbCxhLGQpOnEwKEQsKCk9PlooYyxsLGEsZCkpKS5waXBlKGltKCkpfSkpLnBpcGUoY3koKSk6ZmEoITApfShoLmNv'@;
put 'bXBvbmVudCxoLnJvdXRlLGEsbCxkKSksaW0oaD0+ITAhPT1oLCEwKSl9KHYsZCxoLGMpLnBpcGUoSDAoTT0+TSYmZnVuY3Rpb24gdUVlKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGN9KE0pP2Z1bmN0aW9uIGJFZShjLGwsYSxkKXtyZXR1cm4gWnUobCkucGlwZShRYihoPT56WihmdW5j'@;
put 'dGlvbiBfRWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IFV4ZShjKSksZmEoITApfShoLnJvdXRlLnBhcmVudCxkKSxmdW5jdGlvbiB5RWUoYyxsKXtyZXR1cm4gbnVsbCE9PWMmJmwmJmwobmV3IFd4ZShjKSksZmEoITApfShoLnJvdXRlLGQpLGZ1bmN0aW9uIENFZShjLGwsYSl7'@;
put 'Y29uc3QgZD1sW2wubGVuZ3RoLTFdLGY9bC5zbGljZSgwLGwubGVuZ3RoLTEpLnJldmVyc2UoKS5tYXAodj0+ZnVuY3Rpb24gc0VlKGMpe2NvbnN0IGw9Yy5yb3V0ZUNvbmZpZz9jLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlQ2hpbGQ6bnVsbDtyZXR1cm4gbCYmMCE9PWwubGVuZ3RoP3tub2Rl'@;
put 'OmMsZ3VhcmRzOmx9Om51bGx9KHYpKS5maWx0ZXIodj0+bnVsbCE9PXYpLm1hcCh2PT5obGUoKCk9PmZhKHYuZ3VhcmRzLm1hcChEPT57Y29uc3QgWj1YTSh2Lm5vZGUpPz9hLG5lPWx5KEQsWik7cmV0dXJuIG9tKGZ1bmN0aW9uIGZFZShjKXtyZXR1cm4gYyYmZXgoYy5jYW5BY3RpdmF0ZUNo'@;
put 'aWxkKX0obmUpP25lLmNhbkFjdGl2YXRlQ2hpbGQoZCxjKTpxMChaLCgpPT5uZShkLGMpKSkucGlwZShpbSgpKX0pKS5waXBlKGN5KCkpKSk7cmV0dXJuIGZhKGYpLnBpcGUoY3koKSl9KGMsaC5wYXRoLGEpLGZ1bmN0aW9uIHdFZShjLGwsYSl7Y29uc3QgZD1sLnJvdXRlQ29uZmlnP2wucm91'@;
put 'dGVDb25maWcuY2FuQWN0aXZhdGU6bnVsbDtpZighZHx8MD09PWQubGVuZ3RoKXJldHVybiBmYSghMCk7Y29uc3QgaD1kLm1hcChmPT5obGUoKCk9Pntjb25zdCB2PVhNKGwpPz9hLE09bHkoZix2KTtyZXR1cm4gb20oZnVuY3Rpb24gaEVlKGMpe3JldHVybiBjJiZleChjLmNhbkFjdGl2YXRl'@;
put 'KX0oTSk/TS5jYW5BY3RpdmF0ZShsLGMpOnEwKHYsKCk9Pk0obCxjKSkpLnBpcGUoaW0oKSl9KSk7cmV0dXJuIGZhKGgpLnBpcGUoY3koKSl9KGMsaC5yb3V0ZSxhKSkpLGltKGg9PiEwIT09aCwhMCkpfShkLGYsYyxsKTpmYShNKSksTHIoTT0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpNfSkpKX0p'@;
put 'fSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsRD0+dGhpcy5ldmVudHMubmV4dChEKSksV3UoRD0+e2lmKGYuZ3VhcmRzUmVzdWx0PUQuZ3VhcmRzUmVzdWx0LGl5KEQuZ3VhcmRzUmVzdWx0KSl0aHJvdyBVbGUoMCxELmd1YXJkc1Jlc3VsdCk7Y29uc3QgWj1uZXcgTnhlKEQuaWQsdGhpcy51'@;
put 'cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELnVybEFmdGVyUmVkaXJlY3RzKSxELnRhcmdldFNuYXBzaG90LCEhRC5ndWFyZHNSZXN1bHQpO3RoaXMuZXZlbnRzLm5leHQoWil9KSxHbChEPT4hIUQuZ3VhcmRzUmVz'@;
put 'dWx0fHwodGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihELCIiLGdoLkd1YXJkUmVqZWN0ZWQpLCExKSksZlcoRD0+e2lmKEQuZ3VhcmRzLmNhbkFjdGl2YXRlQ2hlY2tzLmxlbmd0aClyZXR1cm4gZmEoRCkucGlwZShXdShaPT57Y29uc3QgbmU9bmV3IFZ4ZShaLmlkLHRoaXMudXJs'@;
put 'U2VyaWFsaXplci5zZXJpYWxpemUoWi5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi51cmxBZnRlclJlZGlyZWN0cyksWi50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChuZSl9KSxWMShaPT57bGV0IG5lPSExO3JldHVybiBmYShaKS5waXBlKGZ1'@;
put 'bmN0aW9uIFlFZShjLGwpe3JldHVybiBIMChhPT57Y29uc3R7dGFyZ2V0U25hcHNob3Q6ZCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmh9fT1hO2lmKCFoLmxlbmd0aClyZXR1cm4gZmEoYSk7Y29uc3QgZj1uZXcgU2V0KGgubWFwKEQ9PkQucm91dGUpKSx2PW5ldyBTZXQ7Zm9yKGNvbnN0'@;
put 'IEQgb2YgZilpZighdi5oYXMoRCkpZm9yKGNvbnN0IFogb2YgSmxlKEQpKXYuYWRkKFopO2xldCBNPTA7cmV0dXJuIFp1KHYpLnBpcGUoUWIoRD0+Zi5oYXMoRCk/ZnVuY3Rpb24gR0VlKGMsbCxhLGQpe2NvbnN0IGg9Yy5yb3V0ZUNvbmZpZyxmPWMuX3Jlc29sdmU7cmV0dXJuIHZvaWQgMCE9'@;
put 'PWg/LnRpdGxlJiYhQmxlKGgpJiYoZltVTV09aC50aXRsZSksZnVuY3Rpb24gJEVlKGMsbCxhLGQpe2NvbnN0IGg9WVooYyk7aWYoMD09PWgubGVuZ3RoKXJldHVybiBmYSh7fSk7Y29uc3QgZj17fTtyZXR1cm4gWnUoaCkucGlwZShIMCh2PT5mdW5jdGlvbiBLRWUoYyxsLGEsZCl7Y29uc3Qg'@;
put 'aD1YTShsKT8/ZCxmPWx5KGMsaCk7cmV0dXJuIG9tKGYucmVzb2x2ZT9mLnJlc29sdmUobCxhKTpxMChoLCgpPT5mKGwsYSkpKX0oY1t2XSxsLGEsZCkucGlwZShpbSgpLFd1KE09PntmW3ZdPU19KSkpLFdaKDEpLGZ1bmN0aW9uIGx4ZShjKXtyZXR1cm4gTHIoKCk9PmMpfShmKSxleSh2PT4k'@;
put 'bGUodik/TTI6SVIodikpKX0oZixjLGwsZCkucGlwZShMcih2PT4oYy5fcmVzb2x2ZWREYXRhPXYsYy5kYXRhPW5XKGMsYy5wYXJlbnQsYSkucmVzb2x2ZSxudWxsKSkpfShELGQsYyxsKTooRC5kYXRhPW5XKEQsRC5wYXJlbnQsYykucmVzb2x2ZSxmYSh2b2lkIDApKSksV3UoKCk9Pk0rKyks'@;
put 'V1ooMSksSDAoRD0+TT09PXYuc2l6ZT9mYShhKTpNMikpfSl9KHRoaXMucGFyYW1zSW5oZXJpdGFuY2VTdHJhdGVneSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3IpLFd1KHtuZXh0OigpPT5uZT0hMCxjb21wbGV0ZTooKT0+e25lfHx0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKFos'@;
put 'IiIsZ2guTm9EYXRhRnJvbVJlc29sdmVyKX19KSl9KSxXdShaPT57Y29uc3QgbmU9bmV3IEJ4ZShaLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWi51cmxBZnRlclJlZGlyZWN0cyksWi50YXJnZXRT'@;
put 'bmFwc2hvdCk7dGhpcy5ldmVudHMubmV4dChuZSl9KSl9KSxmVyhEPT57Y29uc3QgWj1uZT0+e2NvbnN0IGNlPVtdO25lLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50JiYhbmUucm91dGVDb25maWcuX2xvYWRlZENvbXBvbmVudCYmY2UucHVzaCh0aGlzLmNvbmZpZ0xvYWRlci5sb2FkQ29t'@;
put 'cG9uZW50KG5lLnJvdXRlQ29uZmlnKS5waXBlKFd1KGJlPT57bmUuY29tcG9uZW50PWJlfSksTHIoKCk9Pnt9KSkpO2Zvcihjb25zdCBiZSBvZiBuZS5jaGlsZHJlbiljZS5wdXNoKC4uLlooYmUpKTtyZXR1cm4gY2V9O3JldHVybiBLOChaKEQudGFyZ2V0U25hcHNob3Qucm9vdCkpLnBpcGUo'@;
put 'UlIobnVsbCksVWYoMSkpfSksZlcoKCk9PnRoaXMuYWZ0ZXJQcmVhY3RpdmF0aW9uKCkpLFYxKCgpPT57Y29uc3R7Y3VycmVudFNuYXBzaG90OkQsdGFyZ2V0U25hcHNob3Q6Wn09ZixuZT10aGlzLmNyZWF0ZVZpZXdUcmFuc2l0aW9uPy4odGhpcy5lbnZpcm9ubWVudEluamVjdG9yLEQucm9v'@;
put 'dCxaLnJvb3QpO3JldHVybiBuZT9adShuZSkucGlwZShMcigoKT0+ZikpOmZhKGYpfSksTHIoRD0+e2NvbnN0IFo9ZnVuY3Rpb24gS3hlKGMsbCxhKXtjb25zdCBkPXFNKGMsbC5fcm9vdCxhP2EuX3Jvb3Q6dm9pZCAwKTtyZXR1cm4gbmV3IEZsZShkLGwpfShhLnJvdXRlUmV1c2VTdHJhdGVn'@;
put 'eSxELnRhcmdldFNuYXBzaG90LEQuY3VycmVudFJvdXRlclN0YXRlKTtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ELHRhcmdldFJvdXRlclN0YXRlOlp9LHRoaXMuY3VycmVudE5hdmlnYXRpb24udGFyZ2V0Um91dGVyU3RhdGU9WixmfSksV3UoKCk9Pnt0aGlzLmV2ZW50'@;
put 'cy5uZXh0KG5ldyBKWil9KSwoKGMsbCxhLGQpPT5McihoPT4obmV3IG9FZShsLGgudGFyZ2V0Um91dGVyU3RhdGUsaC5jdXJyZW50Um91dGVyU3RhdGUsYSxkKS5hY3RpdmF0ZShjKSxoKSkpKHRoaXMucm9vdENvbnRleHRzLGEucm91dGVSZXVzZVN0cmF0ZWd5LEQ9PnRoaXMuZXZlbnRzLm5l'@;
put 'eHQoRCksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkKSxVZigxKSxXdSh7bmV4dDpEPT57dj0hMCx0aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbj10aGlzLmN1cnJlbnROYXZpZ2F0aW9uLHRoaXMuZXZlbnRzLm5leHQobmV3IHBwKEQuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6'@;
put 'ZShELmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShELnVybEFmdGVyUmVkaXJlY3RzKSkpLHRoaXMudGl0bGVTdHJhdGVneT8udXBkYXRlVGl0bGUoRC50YXJnZXRSb3V0ZXJTdGF0ZS5zbmFwc2hvdCksRC5yZXNvbHZlKCEwKX0sY29tcGxldGU6KCk9Pnt2PSEw'@;
put 'fX0pLE4wKHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdC5waXBlKFd1KEQ9Pnt0aHJvdyBEfSkpKSx6TSgoKT0+eyF2JiYhTSYmdGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihmLCIiLGdoLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pLHRoaXMuY3VycmVudFRyYW5zaXRpb24/'@;
put 'LmlkPT09Zi5pZCYmKHRoaXMuY3VycmVudE5hdmlnYXRpb249bnVsbCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwpfSksZXkoRD0+e2lmKE09ITAsV2xlKEQpKXRoaXMuZXZlbnRzLm5leHQobmV3IG95KGYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVy'@;
put 'bCksRC5tZXNzYWdlLEQuY2FuY2VsbGF0aW9uQ29kZSkpLGZ1bmN0aW9uIEp4ZShjKXtyZXR1cm4gV2xlKGMpJiZpeShjLnVybCl9KEQpP3RoaXMuZXZlbnRzLm5leHQobmV3IFFaKEQudXJsKSk6Zi5yZXNvbHZlKCExKTtlbHNle3RoaXMuZXZlbnRzLm5leHQobmV3IGpSKGYuaWQsdGhpcy51'@;
put 'cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksRCxmLnRhcmdldFNuYXBzaG90Pz92b2lkIDApKTt0cnl7Zi5yZXNvbHZlKGEuZXJyb3JIYW5kbGVyKEQpKX1jYXRjaChaKXt0aGlzLm9wdGlvbnMucmVzb2x2ZU5hdmlnYXRpb25Qcm9taXNlT25FcnJvcj9mLnJlc29sdmUo'@;
put 'ITEpOmYucmVqZWN0KFopfX1yZXR1cm4gTTJ9KSl9KSl9Y2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oYSxkLGgpe2NvbnN0IGY9bmV3IG95KGEuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShhLmV4dHJhY3RlZFVybCksZCxoKTt0aGlzLmV2ZW50cy5uZXh0KGYpLGEucmVzb2x2'@;
put 'ZSghMSl9aXNVcGRhdGluZ0ludGVybmFsU3RhdGUoKXtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkhPT10aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5jdXJyZW50VXJsVHJlZS50b1N0cmluZygpfWlzVXBkYXRlZEJyb3dzZXJVcmwoKXtyZXR1'@;
put 'cm4gdGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QodGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKHRoaXMubG9jYXRpb24ucGF0aCghMCkpKS50b1N0cmluZygpIT09dGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uZXh0cmFjdGVkVXJsLnRvU3RyaW5nKCkmJiF0aGlzLmN1cnJlbnRUcmFu'@;
put 'c2l0aW9uPy5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0'@;
put 'dXJuIGN9KSgpO2Z1bmN0aW9uIG5UZShjKXtyZXR1cm4gYyE9PSRNfWxldCByVGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OigpPT5maShv'@;
put 'VGUpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBpVGV7c2hvdWxkRGV0YWNoKGwpe3JldHVybiExfXN0b3JlKGwsYSl7fXNob3VsZEF0dGFjaChsKXtyZXR1cm4hMX1yZXRyaWV2ZShsKXtyZXR1cm4gbnVsbH1zaG91bGRSZXVzZVJvdXRlKGwsYSl7cmV0dXJuIGwu'@;
put 'cm91dGVDb25maWc9PT1hLnJvdXRlQ29uZmlnfX1sZXQgb1RlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBpVGV7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9V3MoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3'@;
put 'NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCkscmNlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9'@;
put 'b24oe3Rva2VuOmMsZmFjdG9yeTooKT0+ZmkoYVRlKSxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksYVRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyByY2V7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubG9jYXRpb249ZmkocGgpLHRoaXMudXJsU2VyaWFs'@;
put 'aXplcj1maShyeSksdGhpcy5vcHRpb25zPWZpKGR5LHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25zLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb258fCJyZXBsYWNlIix0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9Zmko'@;
put 'Z1cpLHRoaXMudXJsVXBkYXRlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnVybFVwZGF0ZVN0cmF0ZWd5fHwiZGVmZXJyZWQiLHRoaXMuY3VycmVudFVybFRyZWU9bmV3IG55LHRoaXMucmF3VXJsVHJlZT10aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMuY3VycmVudFBhZ2VJZD0wLHRoaXMubGFzdFN1'@;
put 'Y2Nlc3NmdWxJZD0tMSx0aGlzLnJvdXRlclN0YXRlPUhsZShudWxsKSx0aGlzLnN0YXRlTWVtZW50bz10aGlzLmNyZWF0ZVN0YXRlTWVtZW50bygpfWdldEN1cnJlbnRVcmxUcmVlKCl7cmV0dXJuIHRoaXMuY3VycmVudFVybFRyZWV9Z2V0UmF3VXJsVHJlZSgpe3JldHVybiB0aGlzLnJhd1Vy'@;
put 'bFRyZWV9cmVzdG9yZWRTdGF0ZSgpe3JldHVybiB0aGlzLmxvY2F0aW9uLmdldFN0YXRlKCl9Z2V0IGJyb3dzZXJQYWdlSWQoKXtyZXR1cm4iY29tcHV0ZWQiIT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uP3RoaXMuY3VycmVudFBhZ2VJZDp0aGlzLnJlc3RvcmVkU3RhdGUo'@;
put 'KT8uXHUwMjc1cm91dGVyUGFnZUlkPz90aGlzLmN1cnJlbnRQYWdlSWR9Z2V0Um91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5yb3V0ZXJTdGF0ZX1jcmVhdGVTdGF0ZU1lbWVudG8oKXtyZXR1cm57cmF3VXJsVHJlZTp0aGlzLnJhd1VybFRyZWUsY3VycmVudFVybFRyZWU6dGhpcy5jdXJyZW50'@;
put 'VXJsVHJlZSxyb3V0ZXJTdGF0ZTp0aGlzLnJvdXRlclN0YXRlfX1yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKGEpe3JldHVybiB0aGlzLmxvY2F0aW9uLnN1YnNjcmliZShkPT57InBvcHN0YXRlIj09PWQudHlwZSYmYShkLnVybCxkLnN0YXRlKX0pfWhhbmRs'@;
put 'ZVJvdXRlckV2ZW50KGEsZCl7aWYoYSBpbnN0YW5jZW9mIFZSKXRoaXMuc3RhdGVNZW1lbnRvPXRoaXMuY3JlYXRlU3RhdGVNZW1lbnRvKCk7ZWxzZSBpZihhIGluc3RhbmNlb2YgYXkpdGhpcy5yYXdVcmxUcmVlPWQuaW5pdGlhbFVybDtlbHNlIGlmKGEgaW5zdGFuY2VvZiBMbGUpe2lmKCJl'@;
put 'YWdlciI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5JiYhZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlKXtjb25zdCBoPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLmZpbmFsVXJsLGQuaW5pdGlhbFVybCk7dGhpcy5zZXRCcm93c2VyVXJsKGgsZCl9fWVsc2UgYSBpbnN0YW5j'@;
put 'ZW9mIEpaPyh0aGlzLmN1cnJlbnRVcmxUcmVlPWQuZmluYWxVcmwsdGhpcy5yYXdVcmxUcmVlPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLmZpbmFsVXJsLGQuaW5pdGlhbFVybCksdGhpcy5yb3V0ZXJTdGF0ZT1kLnRhcmdldFJvdXRlclN0YXRlLCJkZWZlcnJlZCI9PT10aGlz'@;
put 'LnVybFVwZGF0ZVN0cmF0ZWd5JiYoZC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlfHx0aGlzLnNldEJyb3dzZXJVcmwodGhpcy5yYXdVcmxUcmVlLGQpKSk6YSBpbnN0YW5jZW9mIG95JiYoYS5jb2RlPT09Z2guR3VhcmRSZWplY3RlZHx8YS5jb2RlPT09Z2guTm9EYXRhRnJvbVJlc29sdmVy'@;
put 'KT90aGlzLnJlc3RvcmVIaXN0b3J5KGQpOmEgaW5zdGFuY2VvZiBqUj90aGlzLnJlc3RvcmVIaXN0b3J5KGQsITApOmEgaW5zdGFuY2VvZiBwcCYmKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD1hLmlkLHRoaXMuY3VycmVudFBhZ2VJZD10aGlzLmJyb3dzZXJQYWdlSWQpfXNldEJyb3dzZXJVcmwo'@;
put 'YSxkKXtjb25zdCBoPXRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYSk7aWYodGhpcy5sb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyhoKXx8ZC5leHRyYXMucmVwbGFjZVVybCl7Y29uc3Qgdj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUo'@;
put 'ZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQpfTt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShoLCIiLHYpfWVsc2V7Y29uc3QgZj17Li4uZC5leHRyYXMuc3RhdGUsLi4udGhpcy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUoZC5pZCx0aGlzLmJyb3dzZXJQYWdlSWQrMSl9O3RoaXMubG9jYXRpb24u'@;
put 'Z28oaCwiIixmKX19cmVzdG9yZUhpc3RvcnkoYSxkPSExKXtpZigiY29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uKXtjb25zdCBmPXRoaXMuY3VycmVudFBhZ2VJZC10aGlzLmJyb3dzZXJQYWdlSWQ7MCE9PWY/dGhpcy5sb2NhdGlvbi5oaXN0b3J5R28oZik6'@;
put 'dGhpcy5jdXJyZW50VXJsVHJlZT09PWEuZmluYWxVcmwmJjA9PT1mJiYodGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfWVsc2UicmVwbGFjZSI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24mJihkJiZ0aGlzLnJlc2V0U3RhdGUo'@;
put 'YSksdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSl9cmVzZXRTdGF0ZShhKXt0aGlzLnJvdXRlclN0YXRlPXRoaXMuc3RhdGVNZW1lbnRvLnJvdXRlclN0YXRlLHRoaXMuY3VycmVudFVybFRyZWU9dGhpcy5zdGF0ZU1lbWVudG8uY3VycmVudFVybFRyZWUsdGhpcy5yYXdVcmxUcmVl'@;
put 'PXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGEuZmluYWxVcmw/P3RoaXMucmF3VXJsVHJlZSl9cmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCl7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSh0'@;
put 'aGlzLnJhd1VybFRyZWUpLCIiLHRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKHRoaXMubGFzdFN1Y2Nlc3NmdWxJZCx0aGlzLmN1cnJlbnRQYWdlSWQpKX1nZW5lcmF0ZU5nUm91dGVyU3RhdGUoYSxkKXtyZXR1cm4iY29tcHV0ZWQiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0'@;
put 'aW9uP3tuYXZpZ2F0aW9uSWQ6YSxcdTAyNzVyb3V0ZXJQYWdlSWQ6ZH06e25hdmlnYXRpb25JZDphfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1XcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1cHJv'@;
put 'dj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTt2YXIgdHg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5DT01QTEVURT0wXT0iQ09NUExFVEUiLGNbYy5GQUlMRUQ9MV09IkZBSUxFRCIsY1tjLlJFRElSRUNUSU5HPTJdPSJS'@;
put 'RURJUkVDVElORyIsY30odHh8fHt9KTtmdW5jdGlvbiBpY2UoYyxsKXtjLmV2ZW50cy5waXBlKEdsKGE9PmEgaW5zdGFuY2VvZiBwcHx8YSBpbnN0YW5jZW9mIG95fHxhIGluc3RhbmNlb2YgalJ8fGEgaW5zdGFuY2VvZiBheSksTHIoYT0+YSBpbnN0YW5jZW9mIHBwfHxhIGluc3RhbmNlb2Yg'@;
put 'YXk/dHguQ09NUExFVEU6YSBpbnN0YW5jZW9mIG95JiYoYS5jb2RlPT09Z2guUmVkaXJlY3R8fGEuY29kZT09PWdoLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pP3R4LlJFRElSRUNUSU5HOnR4LkZBSUxFRCksR2woYT0+YSE9PXR4LlJFRElSRUNUSU5HKSxVZigxKSkuc3Vic2NyaWJlKCgp'@;
put 'PT57bCgpfSl9ZnVuY3Rpb24gc1RlKGMpe3Rocm93IGN9Y29uc3QgbFRlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9yZWQiLHF1ZXJ5UGFyYW1zOiJleGFjdCJ9LGNUZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJp'@;
put 'eFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCBMcz0oKCk9PntjbGFzcyBje2dldCBjdXJyZW50VXJsVHJlZSgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5nZXRDdXJyZW50VXJsVHJlZSgpfWdldCByYXdVcmxUcmVlKCl7cmV0dXJuIHRoaXMuc3RhdGVNYW5h'@;
put 'Z2VyLmdldFJhd1VybFRyZWUoKX1nZXQgZXZlbnRzKCl7cmV0dXJuIHRoaXMuX2V2ZW50c31nZXQgcm91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0Um91dGVyU3RhdGUoKX1jb25zdHJ1Y3Rvcigpe3RoaXMuZGlzcG9zZWQ9ITEsdGhpcy5pc05nWm9uZUVuYWJsZWQ9'@;
put 'ITEsdGhpcy5jb25zb2xlPWZpKEhpZSksdGhpcy5zdGF0ZU1hbmFnZXI9ZmkocmNlKSx0aGlzLm9wdGlvbnM9ZmkoZHkse29wdGlvbmFsOiEwfSl8fHt9LHRoaXMucGVuZGluZ1Rhc2tzPWZpKFJmKSx0aGlzLnVybFVwZGF0ZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy51cmxVcGRhdGVTdHJhdGVn'@;
put 'eXx8ImRlZmVycmVkIix0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucz1maShZUiksdGhpcy51cmxTZXJpYWxpemVyPWZpKHJ5KSx0aGlzLmxvY2F0aW9uPWZpKHBoKSx0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9ZmkoZ1cpLHRoaXMuX2V2ZW50cz1uZXcgV24sdGhpcy5lcnJvckhhbmRsZXI9'@;
put 'dGhpcy5vcHRpb25zLmVycm9ySGFuZGxlcnx8c1RlLHRoaXMubmF2aWdhdGVkPSExLHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5PWZpKHJUZSksdGhpcy5vblNhbWVVcmxOYXZpZ2F0aW9uPXRoaXMub3B0aW9ucy5vblNhbWVVcmxOYXZpZ2F0aW9ufHwiaWdub3JlIix0aGlzLmNvbmZpZz1maSho'@;
put 'eSx7b3B0aW9uYWw6ITB9KT8uZmxhdCgpPz9bXSx0aGlzLmNvbXBvbmVudElucHV0QmluZGluZ0VuYWJsZWQ9ISFmaSh6Uix7b3B0aW9uYWw6ITB9KSx0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbj1uZXcgcXQsdGhpcy5pc05nWm9uZUVuYWJsZWQ9ZmkoWW8paW5zdGFuY2VvZiBZbyYmWW8uaXNJ'@;
put 'bkFuZ3VsYXJab25lKCksdGhpcy5yZXNldENvbmZpZyh0aGlzLmNvbmZpZyksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuc2V0dXBOYXZpZ2F0aW9ucyh0aGlzLHRoaXMuY3VycmVudFVybFRyZWUsdGhpcy5yb3V0ZXJTdGF0ZSkuc3Vic2NyaWJlKHtlcnJvcjphPT57dGhpcy5jb25zb2xl'@;
put 'Lndhcm4oYSl9fSksdGhpcy5zdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKX1zdWJzY3JpYmVUb05hdmlnYXRpb25FdmVudHMoKXtjb25zdCBhPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmV2ZW50cy5zdWJzY3JpYmUoZD0+e3RyeXtjb25zdCBoPXRoaXMubmF2aWdhdGlvblRyYW5z'@;
put 'aXRpb25zLmN1cnJlbnRUcmFuc2l0aW9uLGY9dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudE5hdmlnYXRpb247aWYobnVsbCE9PWgmJm51bGwhPT1mKWlmKHRoaXMuc3RhdGVNYW5hZ2VyLmhhbmRsZVJvdXRlckV2ZW50KGQsZiksZCBpbnN0YW5jZW9mIG95JiZkLmNvZGUhPT1n'@;
put 'aC5SZWRpcmVjdCYmZC5jb2RlIT09Z2guU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbil0aGlzLm5hdmlnYXRlZD0hMDtlbHNlIGlmKGQgaW5zdGFuY2VvZiBwcCl0aGlzLm5hdmlnYXRlZD0hMDtlbHNlIGlmKGQgaW5zdGFuY2VvZiBRWil7Y29uc3Qgdj10aGlzLnVybEhhbmRsaW5nU3RyYXRl'@;
put 'Z3kubWVyZ2UoZC51cmwsaC5jdXJyZW50UmF3VXJsKSxNPXtpbmZvOmguZXh0cmFzLmluZm8sc2tpcExvY2F0aW9uQ2hhbmdlOmguZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZSxyZXBsYWNlVXJsOiJlYWdlciI9PT10aGlzLnVybFVwZGF0ZVN0cmF0ZWd5fHxuVGUoaC5zb3VyY2UpfTt0aGlz'@;
put 'LnNjaGVkdWxlTmF2aWdhdGlvbih2LCRNLG51bGwsTSx7cmVzb2x2ZTpoLnJlc29sdmUscmVqZWN0OmgucmVqZWN0LHByb21pc2U6aC5wcm9taXNlfSl9KGZ1bmN0aW9uIGRUZShjKXtyZXR1cm4hKGMgaW5zdGFuY2VvZiBKWnx8YyBpbnN0YW5jZW9mIFFaKX0pKGQpJiZ0aGlzLl9ldmVudHMu'@;
put 'bmV4dChkKX1jYXRjaChoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy50cmFuc2l0aW9uQWJvcnRTdWJqZWN0Lm5leHQoaCl9fSk7dGhpcy5ldmVudHNTdWJzY3JpcHRpb24uYWRkKGEpfXJlc2V0Um9vdENvbXBvbmVudFR5cGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZS5yb290LmNvbXBvbmVu'@;
put 'dD1hLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnJvb3RDb21wb25lbnRUeXBlPWF9aW5pdGlhbE5hdmlnYXRpb24oKXt0aGlzLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmhhc1JlcXVlc3RlZE5hdmlnYXRpb258fHRoaXMubmF2'@;
put 'aWdhdGVUb1N5bmNXaXRoQnJvd3Nlcih0aGlzLmxvY2F0aW9uLnBhdGgoITApLCRNLHRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmVkU3RhdGUoKSl9c2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl7dGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlz'@;
put 'LnN0YXRlTWFuYWdlci5yZWdpc3Rlck5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZUxpc3RlbmVyKChhLGQpPT57c2V0VGltZW91dCgoKT0+e3RoaXMubmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLCJwb3BzdGF0ZSIsZCl9LDApfSl9bmF2aWdhdGVUb1N5bmNXaXRoQnJvd3NlcihhLGQs'@;
put 'aCl7Y29uc3QgZj17cmVwbGFjZVVybDohMH0sdj1oPy5uYXZpZ2F0aW9uSWQ/aDpudWxsO2lmKGgpe2NvbnN0IEQ9ey4uLmh9O2RlbGV0ZSBELm5hdmlnYXRpb25JZCxkZWxldGUgRC5cdTAyNzVyb3V0ZXJQYWdlSWQsMCE9PU9iamVjdC5rZXlzKEQpLmxlbmd0aCYmKGYuc3RhdGU9RCl9Y29u'@;
put 'c3QgTT10aGlzLnBhcnNlVXJsKGEpO3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKE0sZCx2LGYpfWdldCB1cmwoKXtyZXR1cm4gdGhpcy5zZXJpYWxpemVVcmwodGhpcy5jdXJyZW50VXJsVHJlZSl9Z2V0Q3VycmVudE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlv'@;
put 'bnMuY3VycmVudE5hdmlnYXRpb259Z2V0IGxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb259cmVzZXRDb25maWcoYSl7dGhpcy5jb25maWc9YS5tYXAobFcpLHRoaXMubmF2aWdhdGVkPSEx'@;
put 'fW5nT25EZXN0cm95KCl7dGhpcy5kaXNwb3NlKCl9ZGlzcG9zZSgpe3RoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmNvbXBsZXRlKCksdGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24mJih0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlw'@;
put 'dGlvbi51bnN1YnNjcmliZSgpLHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uPXZvaWQgMCksdGhpcy5kaXNwb3NlZD0hMCx0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWNyZWF0ZVVybFRyZWUoYSxkPXt9KXtjb25zdHtyZWxhdGl2ZVRv'@;
put 'OmgscXVlcnlQYXJhbXM6ZixmcmFnbWVudDp2LHF1ZXJ5UGFyYW1zSGFuZGxpbmc6TSxwcmVzZXJ2ZUZyYWdtZW50OkR9PWQsWj1EP3RoaXMuY3VycmVudFVybFRyZWUuZnJhZ21lbnQ6djtsZXQgY2UsbmU9bnVsbDtzd2l0Y2goTSl7Y2FzZSJtZXJnZSI6bmU9ey4uLnRoaXMuY3VycmVudFVy'@;
put 'bFRyZWUucXVlcnlQYXJhbXMsLi4uZn07YnJlYWs7Y2FzZSJwcmVzZXJ2ZSI6bmU9dGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtczticmVhaztkZWZhdWx0Om5lPWZ8fG51bGx9bnVsbCE9PW5lJiYobmU9dGhpcy5yZW1vdmVFbXB0eVByb3BzKG5lKSk7dHJ5e2NlPUVsZShoP2guc25h'@;
put 'cHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC5yb290KX1jYXRjaHsoInN0cmluZyIhPXR5cGVvZiBhWzBdfHwhYVswXS5zdGFydHNXaXRoKCIvIikpJiYoYT1bXSksY2U9dGhpcy5jdXJyZW50VXJsVHJlZS5yb290fXJldHVybiBUbGUoY2UsYSxuZSxaPz9udWxsKX1uYXZpZ2F0ZUJ5'@;
put 'VXJsKGEsZD17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSl7Y29uc3QgaD1peShhKT9hOnRoaXMucGFyc2VVcmwoYSksZj10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoaCx0aGlzLnJhd1VybFRyZWUpO3JldHVybiB0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihmLCRNLG51bGwsZCl9bmF2'@;
put 'aWdhdGUoYSxkPXtza2lwTG9jYXRpb25DaGFuZ2U6ITF9KXtyZXR1cm4gZnVuY3Rpb24gdVRlKGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKG51bGw9PWNbbF0pdGhyb3cgbmV3IFFuKDQwMDgsITEpfShhKSx0aGlzLm5hdmlnYXRlQnlVcmwodGhpcy5jcmVhdGVVcmxUcmVlKGEs'@;
put 'ZCksZCl9c2VyaWFsaXplVXJsKGEpe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEpfXBhcnNlVXJsKGEpe3RyeXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEpfWNhdGNoe3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoIi8iKX19aXNBY3RpdmUo'@;
put 'YSxkKXtsZXQgaDtpZihoPSEwPT09ZD97Li4ubFRlfTohMT09PWQ/ey4uLmNUZX06ZCxpeShhKSlyZXR1cm4gdmxlKHRoaXMuY3VycmVudFVybFRyZWUsYSxoKTtjb25zdCBmPXRoaXMucGFyc2VVcmwoYSk7cmV0dXJuIHZsZSh0aGlzLmN1cnJlbnRVcmxUcmVlLGYsaCl9cmVtb3ZlRW1wdHlQ'@;
put 'cm9wcyhhKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYSkucmVkdWNlKChkLFtoLGZdKT0+KG51bGwhPWYmJihkW2hdPWYpLGQpLHt9KX1zY2hlZHVsZU5hdmlnYXRpb24oYSxkLGgsZix2KXtpZih0aGlzLmRpc3Bvc2VkKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2xldCBNLEQsWjt2PyhN'@;
put 'PXYucmVzb2x2ZSxEPXYucmVqZWN0LFo9di5wcm9taXNlKTpaPW5ldyBQcm9taXNlKChjZSxiZSk9PntNPWNlLEQ9YmV9KTtjb25zdCBuZT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gaWNlKHRoaXMsKCk9PntxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5wZW5kaW5nVGFza3MucmVt'@;
put 'b3ZlKG5lKSl9KSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYW5kbGVOYXZpZ2F0aW9uUmVxdWVzdCh7c291cmNlOmQscmVzdG9yZWRTdGF0ZTpoLGN1cnJlbnRVcmxUcmVlOnRoaXMuY3VycmVudFVybFRyZWUsY3VycmVudFJhd1VybDp0aGlzLmN1cnJlbnRVcmxUcmVlLHJhd1VybDph'@;
put 'LGV4dHJhczpmLHJlc29sdmU6TSxyZWplY3Q6RCxwcm9taXNlOlosY3VycmVudFNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNob3QsY3VycmVudFJvdXRlclN0YXRlOnRoaXMucm91dGVyU3RhdGV9KSxaLmNhdGNoKGNlPT5Qcm9taXNlLnJlamVjdChjZSkpfXN0YXRpY3t0aGlzLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLGMxPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2'@;
put 'LE0pe3RoaXMucm91dGVyPWEsdGhpcy5yb3V0ZT1kLHRoaXMudGFiSW5kZXhBdHRyaWJ1dGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5lbD12LHRoaXMubG9jYXRpb25TdHJhdGVneT1NLHRoaXMuaHJlZj1udWxsLHRoaXMuY29tbWFuZHM9bnVsbCx0aGlzLm9uQ2hhbmdlcz1uZXcgV24sdGhp'@;
put 'cy5wcmVzZXJ2ZUZyYWdtZW50PSExLHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlPSExLHRoaXMucmVwbGFjZVVybD0hMTtjb25zdCBEPXYubmF0aXZlRWxlbWVudC50YWdOYW1lPy50b0xvd2VyQ2FzZSgpO3RoaXMuaXNBbmNob3JFbGVtZW50PSJhIj09PUR8fCJhcmVhIj09PUQsdGhpcy5pc0Fu'@;
put 'Y2hvckVsZW1lbnQ/dGhpcy5zdWJzY3JpcHRpb249YS5ldmVudHMuc3Vic2NyaWJlKFo9PntaIGluc3RhbmNlb2YgcHAmJnRoaXMudXBkYXRlSHJlZigpfSk6dGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpfXNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKGEpe251bGwhPXRo'@;
put 'aXMudGFiSW5kZXhBdHRyaWJ1dGV8fHRoaXMuaXNBbmNob3JFbGVtZW50fHx0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoInRhYmluZGV4IixhKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLmlzQW5jaG9yRWxlbWVudCYmdGhpcy51cGRhdGVIcmVmKCksdGhpcy5vbkNoYW5nZXMubmV4dCh0aGlzKX1z'@;
put 'ZXQgcm91dGVyTGluayhhKXtudWxsIT1hPyh0aGlzLmNvbW1hbmRzPUFycmF5LmlzQXJyYXkoYSk/YTpbYV0sdGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbCgiMCIpKToodGhpcy5jb21tYW5kcz1udWxsLHRoaXMuc2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwobnVsbCkpfW9uQ2xp'@;
put 'Y2soYSxkLGgsZix2KXtjb25zdCBNPXRoaXMudXJsVHJlZTtyZXR1cm4hIShudWxsPT09TXx8dGhpcy5pc0FuY2hvckVsZW1lbnQmJigwIT09YXx8ZHx8aHx8Znx8dnx8InN0cmluZyI9PXR5cGVvZiB0aGlzLnRhcmdldCYmIl9zZWxmIiE9dGhpcy50YXJnZXQpKXx8KHRoaXMucm91dGVyLm5h'@;
put 'dmlnYXRlQnlVcmwoTSx7c2tpcExvY2F0aW9uQ2hhbmdlOnRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6dGhpcy5yZXBsYWNlVXJsLHN0YXRlOnRoaXMuc3RhdGUsaW5mbzp0aGlzLmluZm99KSwhdGhpcy5pc0FuY2hvckVsZW1lbnQpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJz'@;
put 'Y3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9dXBkYXRlSHJlZigpe2NvbnN0IGE9dGhpcy51cmxUcmVlO3RoaXMuaHJlZj1udWxsIT09YSYmdGhpcy5sb2NhdGlvblN0cmF0ZWd5P3RoaXMubG9jYXRpb25TdHJhdGVneT8ucHJlcGFyZUV4dGVybmFsVXJsKHRoaXMucm91dGVyLnNlcmlhbGl6ZVVy'@;
put 'bChhKSk6bnVsbDtjb25zdCBkPW51bGw9PT10aGlzLmhyZWY/bnVsbDpmdW5jdGlvbiByRChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIEJCKGMsbCl7cmV0dXJuInNyYyI9PT1sJiYoImVtYmVkIj09PWN8fCJmcmFtZSI9PT1jfHwiaWZyYW1lIj09PWN8fCJtZWRpYSI9PT1jfHwic2NyaXB0Ij09'@;
put 'PWMpfHwiaHJlZiI9PT1sJiYoImJhc2UiPT09Y3x8ImxpbmsiPT09Yyk/bkQ6WkN9KGwsYSkoYyl9KHRoaXMuaHJlZix0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpLCJocmVmIik7dGhpcy5hcHBseUF0dHJpYnV0ZVZhbHVlKCJocmVmIixkKX1hcHBseUF0dHJp'@;
put 'YnV0ZVZhbHVlKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVyLGY9dGhpcy5lbC5uYXRpdmVFbGVtZW50O251bGwhPT1kP2guc2V0QXR0cmlidXRlKGYsYSxkKTpoLnJlbW92ZUF0dHJpYnV0ZShmLGEpfWdldCB1cmxUcmVlKCl7cmV0dXJuIG51bGw9PT10aGlzLmNvbW1hbmRzP251bGw6dGhp'@;
put 'cy5yb3V0ZXIuY3JlYXRlVXJsVHJlZSh0aGlzLmNvbW1hbmRzLHtyZWxhdGl2ZVRvOnZvaWQgMCE9PXRoaXMucmVsYXRpdmVUbz90aGlzLnJlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczp0aGlzLnF1ZXJ5UGFyYW1zLGZyYWdtZW50OnRoaXMuZnJhZ21lbnQscXVlcnlQYXJhbXNI'@;
put 'YW5kbGluZzp0aGlzLnF1ZXJ5UGFyYW1zSGFuZGxpbmcscHJlc2VydmVGcmFnbWVudDp0aGlzLnByZXNlcnZlRnJhZ21lbnR9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShMcyksR2UoQ3UpLEFmKCJ0YWJpbmRleCIpLEdlKEVhKSxHZShK'@;
put 'aSksR2UoVTgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmsiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjbGljayIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DbGljayh2LmJ1'@;
put 'dHRvbix2LmN0cmxLZXksdi5zaGlmdEtleSx2LmFsdEtleSx2Lm1ldGFLZXkpfSksMiZkJiZmcigidGFyZ2V0IixoLnRhcmdldCl9LGlucHV0czp7dGFyZ2V0OiJ0YXJnZXQiLHF1ZXJ5UGFyYW1zOiJxdWVyeVBhcmFtcyIsZnJhZ21lbnQ6ImZyYWdtZW50IixxdWVyeVBhcmFtc0hhbmRsaW5n'@;
put 'OiJxdWVyeVBhcmFtc0hhbmRsaW5nIixzdGF0ZToic3RhdGUiLGluZm86ImluZm8iLHJlbGF0aXZlVG86InJlbGF0aXZlVG8iLHByZXNlcnZlRnJhZ21lbnQ6W2puLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJwcmVzZXJ2ZUZyYWdtZW50IiwicHJlc2VydmVGcmFnbWVudCIsczFdLHNr'@;
put 'aXBMb2NhdGlvbkNoYW5nZTpbam4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sInNraXBMb2NhdGlvbkNoYW5nZSIsInNraXBMb2NhdGlvbkNoYW5nZSIsczFdLHJlcGxhY2VVcmw6W2puLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJyZXBsYWNlVXJsIiwicmVwbGFjZVVybCIsczFd'@;
put 'LHJvdXRlckxpbms6InJvdXRlckxpbmsifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltabCx3bF19KX19cmV0dXJuIGN9KSgpLGZ5PSgoKT0+e2NsYXNzIGN7Z2V0IGlzQWN0aXZlKCl7cmV0dXJuIHRoaXMuX2lzQWN0aXZlfWNvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yb3V0ZXI9YSx0'@;
put 'aGlzLmVsZW1lbnQ9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jZHI9Zix0aGlzLmxpbms9dix0aGlzLmNsYXNzZXM9W10sdGhpcy5faXNBY3RpdmU9ITEsdGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucz17ZXhhY3Q6ITF9LHRoaXMuaXNBY3RpdmVDaGFuZ2U9bmV3IFhyLHRoaXMucm91dGVy'@;
put 'RXZlbnRzU3Vic2NyaXB0aW9uPWEuZXZlbnRzLnN1YnNjcmliZShNPT57TSBpbnN0YW5jZW9mIHBwJiZ0aGlzLnVwZGF0ZSgpfSl9bmdBZnRlckNvbnRlbnRJbml0KCl7ZmEodGhpcy5saW5rcy5jaGFuZ2VzLGZhKG51bGwpKS5waXBlKEpiKCkpLnN1YnNjcmliZShhPT57dGhpcy51cGRhdGUo'@;
put 'KSx0aGlzLnN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKX0pfXN1YnNjcmliZVRvRWFjaExpbmtPbkNoYW5nZXMoKXt0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7Y29uc3QgYT1bLi4udGhpcy5saW5rcy50b0FycmF5KCksdGhpcy5saW5rXS5m'@;
put 'aWx0ZXIoZD0+ISFkKS5tYXAoZD0+ZC5vbkNoYW5nZXMpO3RoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj1adShhKS5waXBlKEpiKCkpLnN1YnNjcmliZShkPT57dGhpcy5faXNBY3RpdmUhPT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcikoZCkmJnRoaXMudXBkYXRlKCl9'@;
put 'KX1zZXQgcm91dGVyTGlua0FjdGl2ZShhKXtjb25zdCBkPUFycmF5LmlzQXJyYXkoYSk/YTphLnNwbGl0KCIgIik7dGhpcy5jbGFzc2VzPWQuZmlsdGVyKGg9PiEhaCl9bmdPbkNoYW5nZXMoYSl7dGhpcy51cGRhdGUoKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0'@;
put 'aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXVwZGF0ZSgpeyF0aGlzLmxpbmtzfHwhdGhpcy5yb3V0ZXIubmF2aWdhdGVkfHxxdWV1ZU1pY3JvdGFzaygoKT0+e2NvbnN0IGE9dGhpcy5oYXNBY3RpdmVMaW5rcygpO3Ro'@;
put 'aXMuY2xhc3Nlcy5mb3JFYWNoKGQ9PnthP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsZCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxkKX0pLGEmJnZvaWQgMCE9PXRoaXMuYXJpYUN1cnJlbnRX'@;
put 'aGVuQWN0aXZlP3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiLHRoaXMuYXJpYUN1cnJlbnRXaGVuQWN0aXZlLnRvU3RyaW5nKCkpOnRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRp'@;
put 'dmVFbGVtZW50LCJhcmlhLWN1cnJlbnQiKSx0aGlzLl9pc0FjdGl2ZSE9PWEmJih0aGlzLl9pc0FjdGl2ZT1hLHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpLHRoaXMuaXNBY3RpdmVDaGFuZ2UuZW1pdChhKSl9KX1pc0xpbmtBY3RpdmUoYSl7Y29uc3QgZD1mdW5jdGlvbiBoVGUoYyl7cmV0dXJu'@;
put 'ISFjLnBhdGhzfSh0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zKT90aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zOnRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMuZXhhY3R8fCExO3JldHVybiBoPT57Y29uc3QgZj1oLnVybFRyZWU7cmV0dXJuISFmJiZhLmlzQWN0aXZlKGYsZCl9'@;
put 'fWhhc0FjdGl2ZUxpbmtzKCl7Y29uc3QgYT10aGlzLmlzTGlua0FjdGl2ZSh0aGlzLnJvdXRlcik7cmV0dXJuIHRoaXMubGluayYmYSh0aGlzLmxpbmspfHx0aGlzLmxpbmtzLnNvbWUoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoTHMp'@;
put 'LEdlKEppKSxHZShFYSksR2UoeHMpLEdlKGMxLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmtBY3RpdmUiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZCxoLGYpe2lmKDEmZCYmbGEoZixjMSw1KSwyJmQpe2xldCB2'@;
put 'O3hpKHY9RWkoKSkmJihoLmxpbmtzPXYpfX0saW5wdXRzOntyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczoicm91dGVyTGlua0FjdGl2ZU9wdGlvbnMiLGFyaWFDdXJyZW50V2hlbkFjdGl2ZToiYXJpYUN1cnJlbnRXaGVuQWN0aXZlIixyb3V0ZXJMaW5rQWN0aXZlOiJyb3V0ZXJMaW5rQWN0aXZl'@;
put 'In0sb3V0cHV0czp7aXNBY3RpdmVDaGFuZ2U6ImlzQWN0aXZlQ2hhbmdlIn0sZXhwb3J0QXM6WyJyb3V0ZXJMaW5rQWN0aXZlIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSkoKTtjbGFzcyBvY2V7fWxldCBmVGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh'@;
put 'LGQsaCxmLHYpe3RoaXMucm91dGVyPWEsdGhpcy5pbmplY3Rvcj1oLHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5PWYsdGhpcy5sb2FkZXI9dn1zZXRVcFByZWxvYWRpbmcoKXt0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnJvdXRlci5ldmVudHMucGlwZShHbChhPT5hIGluc3RhbmNlb2YgcHApLFFi'@;
put 'KCgpPT50aGlzLnByZWxvYWQoKSkpLnN1YnNjcmliZSgoKT0+e30pfXByZWxvYWQoKXtyZXR1cm4gdGhpcy5wcm9jZXNzUm91dGVzKHRoaXMuaW5qZWN0b3IsdGhpcy5yb3V0ZXIuY29uZmlnKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1'@;
put 'YnNjcmliZSgpfXByb2Nlc3NSb3V0ZXMoYSxkKXtjb25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIGQpe2YucHJvdmlkZXJzJiYhZi5faW5qZWN0b3ImJihmLl9pbmplY3Rvcj1HNChmLnByb3ZpZGVycyxhLGBSb3V0ZTogJHtmLnBhdGh9YCkpO2NvbnN0IHY9Zi5faW5qZWN0b3I/P2EsTT1mLl9s'@;
put 'b2FkZWRJbmplY3Rvcj8/djsoZi5sb2FkQ2hpbGRyZW4mJiFmLl9sb2FkZWRSb3V0ZXMmJnZvaWQgMD09PWYuY2FuTG9hZHx8Zi5sb2FkQ29tcG9uZW50JiYhZi5fbG9hZGVkQ29tcG9uZW50KSYmaC5wdXNoKHRoaXMucHJlbG9hZENvbmZpZyh2LGYpKSwoZi5jaGlsZHJlbnx8Zi5fbG9hZGVk'@;
put 'Um91dGVzKSYmaC5wdXNoKHRoaXMucHJvY2Vzc1JvdXRlcyhNLGYuY2hpbGRyZW4/P2YuX2xvYWRlZFJvdXRlcykpfXJldHVybiBadShoKS5waXBlKEpiKCkpfXByZWxvYWRDb25maWcoYSxkKXtyZXR1cm4gdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3kucHJlbG9hZChkLCgpPT57bGV0IGg7aD1k'@;
put 'LmxvYWRDaGlsZHJlbiYmdm9pZCAwPT09ZC5jYW5Mb2FkP3RoaXMubG9hZGVyLmxvYWRDaGlsZHJlbihhLGQpOmZhKG51bGwpO2NvbnN0IGY9aC5waXBlKEgwKHY9Pm51bGw9PT12P2ZhKHZvaWQgMCk6KGQuX2xvYWRlZFJvdXRlcz12LnJvdXRlcyxkLl9sb2FkZWRJbmplY3Rvcj12LmluamVj'@;
put 'dG9yLHRoaXMucHJvY2Vzc1JvdXRlcyh2LmluamVjdG9yPz9hLHYucm91dGVzKSkpKTtyZXR1cm4gZC5sb2FkQ29tcG9uZW50JiYhZC5fbG9hZGVkQ29tcG9uZW50P1p1KFtmLHRoaXMubG9hZGVyLmxvYWRDb21wb25lbnQoZCldKS5waXBlKEpiKCkpOmZ9KX1zdGF0aWN7dGhpcy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihMcykseHIoR2llKSx4cihoYykseHIob2NlKSx4cihwVykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0'@;
put 'IG1XPW5ldyBTdCgiIik7bGV0IGFjZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdj17fSl7dGhpcy51cmxTZXJpYWxpemVyPWEsdGhpcy50cmFuc2l0aW9ucz1kLHRoaXMudmlld3BvcnRTY3JvbGxlcj1oLHRoaXMuem9uZT1mLHRoaXMub3B0aW9ucz12LHRoaXMubGFzdElk'@;
put 'PTAsdGhpcy5sYXN0U291cmNlPSJpbXBlcmF0aXZlIix0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnN0b3JlPXt9LHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1maShoYyksdi5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9ufHw9ImRpc2FibGVkIix2LmFuY2hvclNjcm9sbGluZ3x8PSJkaXNhYmxl'@;
put 'ZCJ9aW5pdCgpeyJkaXNhYmxlZCIhPT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNldEhpc3RvcnlTY3JvbGxSZXN0b3JhdGlvbigibWFudWFsIiksdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jcmVhdGVT'@;
put 'Y3JvbGxFdmVudHMoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNvbnN1bWVTY3JvbGxFdmVudHMoKX1jcmVhdGVTY3JvbGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgVlI/KHRoaXMuc3RvcmVb'@;
put 'dGhpcy5sYXN0SWRdPXRoaXMudmlld3BvcnRTY3JvbGxlci5nZXRTY3JvbGxQb3NpdGlvbigpLHRoaXMubGFzdFNvdXJjZT1hLm5hdmlnYXRpb25UcmlnZ2VyLHRoaXMucmVzdG9yZWRJZD1hLnJlc3RvcmVkU3RhdGU/YS5yZXN0b3JlZFN0YXRlLm5hdmlnYXRpb25JZDowKTphIGluc3RhbmNl'@;
put 'b2YgcHA/KHRoaXMubGFzdElkPWEuaWQsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsQWZ0ZXJSZWRpcmVjdHMpLmZyYWdtZW50KSk6YSBpbnN0YW5jZW9mIGF5JiZhLmNvZGU9PT1CUi5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24mJih0'@;
put 'aGlzLmxhc3RTb3VyY2U9dm9pZCAwLHRoaXMucmVzdG9yZWRJZD0wLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudChhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhLnVybCkuZnJhZ21lbnQpKX0pfWNvbnN1bWVTY3JvbGxFdmVudHMoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucy5ldmVudHMu'@;
put 'c3Vic2NyaWJlKGE9PnthIGluc3RhbmNlb2YgT2xlJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Ny'@;
put 'b2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxpbmc/dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEu'@;
put 'YW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKSl9KX1zY2hlZHVsZVNjcm9sbEV2ZW50KGEsZCl7dmFyIGg9dGhpczt0aGlzLnpvbmUucnVuT3V0c2lk'@;
put 'ZUFuZ3VsYXIoZWUoZnVuY3Rpb24qKCl7eWllbGQgbmV3IFByb21pc2UoZj0+e3NldFRpbWVvdXQoKCk9PntmKCl9KSxiYigoKT0+e2YoKX0se2luamVjdG9yOmguZW52aXJvbm1lbnRJbmplY3Rvcn0pfSksaC56b25lLnJ1bigoKT0+e2gudHJhbnNpdGlvbnMuZXZlbnRzLm5leHQobmV3IE9s'@;
put 'ZShhLCJwb3BzdGF0ZSI9PT1oLmxhc3RTb3VyY2U/aC5zdG9yZVtoLnJlc3RvcmVkSWRdOm51bGwsZCkpfSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbEV2ZW50c1N1YnNjcmlwdGlvbj8udW5zdWJzY3Jp'@;
put 'YmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7IWZ1bmN0aW9uIHdEKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9KCl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24g'@;
put 'bXAoYyxsKXtyZXR1cm57XHUwMjc1a2luZDpjLFx1MDI3NXByb3ZpZGVyczpsfX1mdW5jdGlvbiBsY2UoKXtjb25zdCBjPWZpKERzKTtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5nZXQocTQpO2lmKGwhPT1hLmNvbXBvbmVudHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoTHMpLGg9Yy5nZXQoY2Nl'@;
put 'KTsxPT09Yy5nZXQodlcpJiZkLmluaXRpYWxOYXZpZ2F0aW9uKCksYy5nZXQodWNlLG51bGwsaW8uT3B0aW9uYWwpPy5zZXRVcFByZWxvYWRpbmcoKSxjLmdldChtVyxudWxsLGlvLk9wdGlvbmFsKT8uaW5pdCgpLGQucmVzZXRSb290Q29tcG9uZW50VHlwZShhLmNvbXBvbmVudFR5cGVzWzBd'@;
put 'KSxoLmNsb3NlZHx8KGgubmV4dCgpLGguY29tcGxldGUoKSxoLnVuc3Vic2NyaWJlKCkpfX1jb25zdCBjY2U9bmV3IFN0KCIiLHtmYWN0b3J5OigpPT5uZXcgV259KSx2Vz1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PjF9KSx1Y2U9bmV3IFN0KCIiKTtmdW5jdGlv'@;
put 'biB2VGUoYyl7cmV0dXJuIG1wKDAsW3twcm92aWRlOnVjZSx1c2VFeGlzdGluZzpmVGV9LHtwcm92aWRlOm9jZSx1c2VFeGlzdGluZzpjfV0pfWZ1bmN0aW9uIHlUZShjKXtyZXR1cm4gbXAoOSxbe3Byb3ZpZGU6dGNlLHVzZVZhbHVlOmVUZX0se3Byb3ZpZGU6bmNlLHVzZVZhbHVlOntza2lw'@;
put 'TmV4dFRyYW5zaXRpb246ISFjPy5za2lwSW5pdGlhbFRyYW5zaXRpb24sLi4uY319XSl9Y29uc3QgZGNlPW5ldyBTdCgiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSxfVGU9W3BoLHtwcm92aWRlOnJ5LHVzZUNsYXNzOkdafSxMcyxLTSx7cHJvdmlkZTpDdSx1c2VGYWN0b3J5OmZ1bmN0aW9uIHNj'@;
put 'ZShjKXtyZXR1cm4gYy5yb3V0ZXJTdGF0ZS5yb290fSxkZXBzOltMc119LHBXLFtdXTtsZXQgamM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljIGZvclJvb3QoYSxkKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W19UZSxbXSx7cHJvdmlkZTpoeSxtdWx0aTohMCx1'@;
put 'c2VWYWx1ZTphfSx7cHJvdmlkZTpkY2UsdXNlRmFjdG9yeTpNVGUsZGVwczpbW0xzLG5ldyBJMSxuZXcgY2RdXX0se3Byb3ZpZGU6ZHksdXNlVmFsdWU6ZHx8e319LGQ/LnVzZUhhc2g/e3Byb3ZpZGU6VTgsdXNlQ2xhc3M6aF9lfTp7cHJvdmlkZTpVOCx1c2VDbGFzczpOb2V9LHtwcm92aWRl'@;
put 'Om1XLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPWZpKFR3ZSksbD1maShZbyksYT1maShkeSksZD1maShZUiksaD1maShyeSk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNldE9mZnNldChhLnNjcm9sbE9mZnNldCksbmV3IGFjZShoLGQsYyxsLGEpfX0sZD8ucHJlbG9hZGluZ1N0cmF0ZWd5'@;
put 'P3ZUZShkLnByZWxvYWRpbmdTdHJhdGVneSkuXHUwMjc1cHJvdmlkZXJzOltdLGQ/LmluaXRpYWxOYXZpZ2F0aW9uP3hUZShkKTpbXSxkPy5iaW5kVG9Db21wb25lbnRJbnB1dHM/bXAoOCxbamxlLHtwcm92aWRlOnpSLHVzZUV4aXN0aW5nOmpsZX1dKS5cdTAyNzVwcm92aWRlcnM6W10sZD8u'@;
put 'ZW5hYmxlVmlld1RyYW5zaXRpb25zP3lUZSgpLlx1MDI3NXByb3ZpZGVyczpbXSxbe3Byb3ZpZGU6aGNlLHVzZUZhY3Rvcnk6bGNlfSx7cHJvdmlkZTpBVSxtdWx0aTohMCx1c2VFeGlzdGluZzpoY2V9XV19fXN0YXRpYyBmb3JDaGlsZChhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6'@;
put 'W3twcm92aWRlOmh5LG11bHRpOiEwLHVzZVZhbHVlOmF9XX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoZGNlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1y'@;
put 'ZXR1cm4gY30pKCk7ZnVuY3Rpb24gTVRlKGMpe3JldHVybiJndWFyZGVkIn1mdW5jdGlvbiB4VGUoYyl7cmV0dXJuWyJkaXNhYmxlZCI9PT1jLmluaXRpYWxOYXZpZ2F0aW9uP21wKDMsW3twcm92aWRlOkVVLG11bHRpOiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPWZpKExzKTtyZXR1cm4o'@;
put 'KT0+e2wuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCl9fX0se3Byb3ZpZGU6dlcsdXNlVmFsdWU6Mn1dKS5cdTAyNzVwcm92aWRlcnM6W10sImVuYWJsZWRCbG9ja2luZyI9PT1jLmluaXRpYWxOYXZpZ2F0aW9uP21wKDIsW3twcm92aWRlOnZXLHVzZVZhbHVlOjB9LHtwcm92aWRlOkVV'@;
put 'LG11bHRpOiEwLGRlcHM6W0RzXSx1c2VGYWN0b3J5Omw9Pntjb25zdCBhPWwuZ2V0KHVfZSxQcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuKCk9PmEudGhlbigoKT0+bmV3IFByb21pc2UoZD0+e2NvbnN0IGg9bC5nZXQoTHMpLGY9bC5nZXQoY2NlKTtpY2UoaCwoKT0+e2QoITApfSksbC5nZXQo'@;
put 'WVIpLmFmdGVyUHJlYWN0aXZhdGlvbj0oKT0+KGQoITApLGYuY2xvc2VkP2ZhKHZvaWQgMCk6ZiksaC5pbml0aWFsTmF2aWdhdGlvbigpfSkpfX1dKS5cdTAyNzVwcm92aWRlcnM6W11dfWNvbnN0IGhjZT1uZXcgU3QoIiIpO3ZhciBweT1mdW5jdGlvbihjKXtyZXR1cm4gYy5saWdodD0ibGln'@;
put 'aHQiLGMuZGFyaz0iZGFyayIsY30ocHl8fHt9KSxmY2U9Xyg1NTE4OCksVFRlPV8oNzg3NTUpO2NvbnN0IGJXPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19hbGxvd2VkOjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2Fs'@;
put 'bG93ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIG1oPWZ1bmN0aW9uKGMp'@;
put 'e3JldHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9yb3dzX2FsbG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlf'@;
put 'cm93c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0YWJsZXNfaW5fbGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3gi'@;
put 'LGNbYy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQiLGNbYy5lZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0x'@;
put 'MV09ImFkZFJlY29yZCIsY30obWh8fHt9KSx2aD1fKDM3MzQpLHBjZT1fLm4odmgpLFMwPV8oMTMyNDcpO2xldCBYOD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fXNldERjQWRhcHRlclNldHRpbmdzKGEpe3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9YX1nZXREY0FkYXB0ZXJTZXR0aW5n'@;
put 'cygpe3JldHVybiB0aGlzLmRjQWRhcHRlclNldHRpbmdzfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0'@;
put 'dXJuIGN9KSgpLHlXPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnVzZXJDaGFuZ2U9bmV3IFdufXNldCB1c2VyKGEpe3RoaXMuX3VzZXI9YSx0aGlzLnVzZXJDaGFuZ2UubmV4dChhKX1nZXQgdXNlcigpe3JldHVybiB0aGlzLl91c2VyfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NsYXNzIEdSe2NvbnN0cnVjdG9yKCl7dGhpcy5kZWZhdWx0U2V0dGluZ3M9e3BlcnNpc3RTZWxlY3RlZFRoZW1l'@;
put 'OiEwLHNlbGVjdGVkVGhlbWU6cHkubGlnaHR9LHRoaXMuc2V0dGluZ3M9bmV3IGVpKHRoaXMuZGVmYXVsdFNldHRpbmdzKSx0aGlzLnJlc3RvcmVBcHBTZXR0aW5ncygpfXJlc3RvcmVBcHBTZXR0aW5ncygpe3RyeXtjb25zdCBsPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJhcHAtc2V0dGluZ3Mi'@;
put 'KTtpZihsKXtjb25zdCBhPUpTT04ucGFyc2UobCk7dGhpcy5zZXRBcHBTZXR0aW5ncyhhKX1lbHNlIGNvbnNvbGUuaW5mbygiTm8gYXBwIHNldHRpbmdzIHN0b3JlZCBpbiB0aGUgbG9jYWxTdG9yYWdlLCB3ZSB3aWxsIHNldCB0byBkZWZhdWx0IHZhbHVlcy4iKX1jYXRjaChsKXtjb25zb2xl'@;
put 'Lndhcm4oIkVycm9yIHJlc3RvcmluZyBzZXR0aW5ncyBmcm9tIGxvY2FsIHN0b3JnYWUuIixsKX19c3RvcmVBcHBTZXR0aW5ncygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhcHAtc2V0dGluZ3MiLEpTT04uc3RyaW5naWZ5KHRoaXMuc2V0dGluZ3MudmFsdWUpKX1zZXRBcHBTZXR0aW5ncyhs'@;
put 'KXt0aGlzLnNldHRpbmdzLm5leHQoey4uLnRoaXMuc2V0dGluZ3MudmFsdWUsLi4ubH0pLHRoaXMuc3RvcmVBcHBTZXR0aW5ncygpfX1sZXQgdmM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFwcFNldHRpbmdzU2VydmljZT1hLHRoaXMub25TaWRlYmFyVG9nZ2xlPW5ldyBY'@;
put 'cix0aGlzLm9uU3RhcnR1cERhdGFMb2FkZWQ9bmV3IFhyLHRoaXMub25TaG93QWJvcnRNb2RhbD1uZXcgWHIsdGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuPW5ldyBYcix0aGlzLm9uRGVtb0xpbWl0TW9kYWxTaG93PW5ldyBYcix0aGlzLnZpZXdMYXN0VXJsPW51bGwsdGhpcy5zaWRlYmFyQ2xv'@;
put 'c2VMaW1pdD0xMjgwLHRoaXMuZGFya01vZGU9bmV3IGVpKCExKX10b2dnbGVEYXJrTW9kZShhKXt0aGlzLmRhcmtNb2RlLm5leHQoYSksYT9kb2N1bWVudC5ib2R5LnNldEF0dHJpYnV0ZSgiY2RzLXRoZW1lIiwiZGFyayIpOmRvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtdGhlbWUi'@;
put 'LCJsaWdodCIpLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldEFwcFNldHRpbmdzKHtzZWxlY3RlZFRoZW1lOmE/cHkuZGFyazpweS5saWdodH0pfXNob3dEZW1vTGltaXRNb2RhbChhKXt0aGlzLm9uRGVtb0xpbWl0TW9kYWxTaG93LmVtaXQoYSl9c2hvd0luZm9Nb2RhbChhPSJJbmZvIixk'@;
put 'KXt0aGlzLm9uU2hvd0Fib3J0TW9kYWwuZW1pdCh7bW9kYWxUaXRsZTphLG1lc3NhZ2U6ZCxzYXNTZXJ2aWNlOiIiLGRldGFpbHM6bnVsbH0pfXNob3dBYm9ydE1vZGFsKGEsZCxoLGY9dm9pZCAwKXtofHwoaD1udWxsKTtsZXQgdj17c2FzU2VydmljZTphLG1lc3NhZ2U6ZCxkZXRhaWxzOmh9'@;
put 'O2YmJih2Lm1vZGFsVGl0bGU9ZiksdGhpcy5vblNob3dBYm9ydE1vZGFsLmVtaXQodil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLm9uUmVxdWVzdHNNb2RhbE9wZW4uZW1pdCghMCl9Y2F0Y2hSZXNwb25zZUVycm9yKGEsZCl7bGV0IGg9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiO2lm'@;
put 'KGQuZXJyb3Ipe2xldCBmO2g9ZC5lcnJvci5tZXNzYWdlLGQuZXJyb3IuZGV0YWlscyYmZC5lcnJvci5kZXRhaWxzLmxvZyYmKGY9ZC5lcnJvci5kZXRhaWxzLmxvZyksKCFofHxoLnRyaW0oKS5sZW5ndGg8MSkmJihoPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIiksdGhpcy5zaG93QWJv'@;
put 'cnRNb2RhbChhLGgse0xPRzpmfSwiUmVxdWVzdCBlcnJvciIpfWVsc2UgdGhpcy5zaG93QWJvcnRNb2RhbChhLGgpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KCl9Y2xvc2VTaWRlYmFyKCl7d2luZG93LmlubmVyV2lkdGg8dGhpcy5zaWRlYmFyQ2xvc2VMaW1p'@;
put 'dCYmdGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMX0pfW9wZW5TaWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMH0pfXN0YXJ0dXBEYXRhTG9hZGVkKCl7dGhpcy5vblN0YXJ0dXBEYXRhTG9hZGVkLmVtaXQoKX1kaXNwYXRjaEV2ZW50KGEpe2xldCBk'@;
put 'OyJmdW5jdGlvbiI9PXR5cGVvZiBFdmVudD9kPW5ldyBFdmVudChhKTooZD1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxkLmluaXRFdmVudChhLCEwLCEwKSksd2luZG93LmRpc3BhdGNoRXZlbnQoZCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco'@;
put 'ZHx8YykoeHIoR1IpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyAkUnt9Y2xhc3MgS1J7fWNsYXNzIEUye2NvbnN0cnVjdG9yKGwpe3RoaXMubm9ybWFsaXplZE5h'@;
put 'bWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsbD8ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLGwuc3BsaXQoIlxuIikuZm9yRWFjaChhPT57Y29uc3QgZD1hLmluZGV4T2YoIjoiKTtpZihkPjApe2NvbnN0IGg9YS5zbGlj'@;
put 'ZSgwLGQpLGY9aC50b0xvd2VyQ2FzZSgpLHY9YS5zbGljZShkKzEpLnRyaW0oKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoaCxmKSx0aGlzLmhlYWRlcnMuaGFzKGYpP3RoaXMuaGVhZGVycy5nZXQoZikucHVzaCh2KTp0aGlzLmhlYWRlcnMuc2V0KGYsW3ZdKX19KX06dHlwZW9mIEhl'@;
put 'YWRlcnM8InUiJiZsIGluc3RhbmNlb2YgSGVhZGVycz8odGhpcy5oZWFkZXJzPW5ldyBNYXAsbC5mb3JFYWNoKChhLGQpPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGQsYSl9KSk6dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5lbnRyaWVzKGwpLmZvckVh'@;
put 'Y2goKFthLGRdKT0+e3RoaXMuc2V0SGVhZGVyRW50cmllcyhhLGQpfSl9OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyhsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyhsLnRvTG93ZXJDYXNlKCkpfWdldChsKXt0aGlzLmluaXQoKTtjb25zdCBhPXRoaXMuaGVhZGVycy5n'@;
put 'ZXQobC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gYSYmYS5sZW5ndGg+MD9hWzBdOm51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX1nZXRBbGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5nZXQo'@;
put 'bC50b0xvd2VyQ2FzZSgpKXx8bnVsbH1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6ImEifSl9c2V0KGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJzIn0pfWRlbGV0ZShsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1l'@;
put 'OmwsdmFsdWU6YSxvcDoiZCJ9KX1tYXliZVNldE5vcm1hbGl6ZWROYW1lKGwsYSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGEpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsKX1pbml0KCl7dGhpcy5sYXp5SW5pdCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiBFMj90aGlzLmNv'@;
put 'cHlGcm9tKHRoaXMubGF6eUluaXQpOnRoaXMubGF6eUluaXQoKSx0aGlzLmxhenlJbml0PW51bGwsdGhpcy5sYXp5VXBkYXRlJiYodGhpcy5sYXp5VXBkYXRlLmZvckVhY2gobD0+dGhpcy5hcHBseVVwZGF0ZShsKSksdGhpcy5sYXp5VXBkYXRlPW51bGwpKX1jb3B5RnJvbShsKXtsLmluaXQo'@;
put 'KSxBcnJheS5mcm9tKGwuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goYT0+e3RoaXMuaGVhZGVycy5zZXQoYSxsLmhlYWRlcnMuZ2V0KGEpKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSkpfSl9Y2xvbmUobCl7Y29uc3QgYT1uZXcgRTI7cmV0dXJu'@;
put 'IGEubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIEUyP3RoaXMubGF6eUluaXQ6dGhpcyxhLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbbF0pLGF9YXBwbHlVcGRhdGUobCl7Y29uc3QgYT1sLm5hbWUudG9Mb3dlckNhc2Uo'@;
put 'KTtzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBkPWwudmFsdWU7aWYoInN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLDA9PT1kLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKGwubmFtZSxhKTtjb25zdCBoPSgiYSI9PT1sLm9wP3RoaXMuaGVhZGVy'@;
put 'cy5nZXQoYSk6dm9pZCAwKXx8W107aC5wdXNoKC4uLmQpLHRoaXMuaGVhZGVycy5zZXQoYSxoKTticmVhaztjYXNlImQiOmNvbnN0IGY9bC52YWx1ZTtpZihmKXtsZXQgdj10aGlzLmhlYWRlcnMuZ2V0KGEpO2lmKCF2KXJldHVybjt2PXYuZmlsdGVyKE09Pi0xPT09Zi5pbmRleE9mKE0pKSww'@;
put 'PT09di5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpKTp0aGlzLmhlYWRlcnMuc2V0KGEsdil9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGEpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShhKX19c2V0SGVhZGVyRW50cmll'@;
put 'cyhsLGEpe2NvbnN0IGQ9KEFycmF5LmlzQXJyYXkoYSk/YTpbYV0pLm1hcChmPT5mLnRvU3RyaW5nKCkpLGg9bC50b0xvd2VyQ2FzZSgpO3RoaXMuaGVhZGVycy5zZXQoaCxkKSx0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobCxoKX1mb3JFYWNoKGwpe3RoaXMuaW5pdCgpLEFycmF5LmZy'@;
put 'b20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGE9PmwodGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGEpLHRoaXMuaGVhZGVycy5nZXQoYSkpKX19Y2xhc3MgQVRle2VuY29kZUtleShsKXtyZXR1cm4gZ2NlKGwpfWVuY29kZVZhbHVlKGwpe3JldHVybiBnY2UobCl9ZGVj'@;
put 'b2RlS2V5KGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9ZGVjb2RlVmFsdWUobCl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChsKX19Y29uc3QgRFRlPS8lKFxkW2EtZjAtOV0pL2dpLElUZT17NDA6IkAiLCIzQSI6IjoiLDI0OiIkIiwiMkMiOiIsIiwiM0IiOiI7IiwiM0QiOiI9'@;
put 'IiwiM0YiOiI/IiwiMkYiOiIvIn07ZnVuY3Rpb24gZ2NlKGMpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYykucmVwbGFjZShEVGUsKGwsYSk9PklUZVthXT8/bCl9ZnVuY3Rpb24gcVIoYyl7cmV0dXJuYCR7Y31gfWNsYXNzIGFte2NvbnN0cnVjdG9yKGw9e30pe2lmKHRoaXMudXBkYXRl'@;
put 'cz1udWxsLHRoaXMuY2xvbmVGcm9tPW51bGwsdGhpcy5lbmNvZGVyPWwuZW5jb2Rlcnx8bmV3IEFUZSxsLmZyb21TdHJpbmcpe2lmKGwuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD1m'@;
put 'dW5jdGlvbiBrVGUoYyxsKXtjb25zdCBhPW5ldyBNYXA7cmV0dXJuIGMubGVuZ3RoPjAmJmMucmVwbGFjZSgvXlw/LywiIikuc3BsaXQoIiYiKS5mb3JFYWNoKGg9Pntjb25zdCBmPWguaW5kZXhPZigiPSIpLFt2LE1dPS0xPT1mP1tsLmRlY29kZUtleShoKSwiIl06W2wuZGVjb2RlS2V5KGgu'@;
put 'c2xpY2UoMCxmKSksbC5kZWNvZGVWYWx1ZShoLnNsaWNlKGYrMSkpXSxEPWEuZ2V0KHYpfHxbXTtELnB1c2goTSksYS5zZXQodixEKX0pLGF9KGwuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgbC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKGwuZnJvbU9i'@;
put 'amVjdCkuZm9yRWFjaChhPT57Y29uc3QgZD1sLmZyb21PYmplY3RbYV0saD1BcnJheS5pc0FycmF5KGQpP2QubWFwKHFSKTpbcVIoZCldO3RoaXMubWFwLnNldChhLGgpfSkpOnRoaXMubWFwPW51bGx9aGFzKGwpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXMobCl9Z2V0KGwpe3Ro'@;
put 'aXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5tYXAuZ2V0KGwpO3JldHVybiBhP2FbMF06bnVsbH1nZXRBbGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldChsKXx8bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX1hcHBlbmQo'@;
put 'bCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJhIn0pfWFwcGVuZEFsbChsKXtjb25zdCBhPVtdO3JldHVybiBPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPWxbZF07QXJyYXkuaXNBcnJheShoKT9oLmZvckVhY2goZj0+e2EucHVzaCh7cGFyYW06'@;
put 'ZCx2YWx1ZTpmLG9wOiJhIn0pfSk6YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmgsb3A6ImEifSl9KSx0aGlzLmNsb25lKGEpfXNldChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6InMifSl9ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFs'@;
put 'dWU6YSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmtleXMoKS5tYXAobD0+e2NvbnN0IGE9dGhpcy5lbmNvZGVyLmVuY29kZUtleShsKTtyZXR1cm4gdGhpcy5tYXAuZ2V0KGwpLm1hcChkPT5hKyI9Iit0aGlzLmVuY29kZXIuZW5jb2RlVmFsdWUoZCkpLmpv'@;
put 'aW4oIiYiKX0pLmZpbHRlcihsPT4iIiE9PWwpLmpvaW4oIiYiKX1jbG9uZShsKXtjb25zdCBhPW5ldyBhbSh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gYS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsYS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQobCks'@;
put 'YX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCksbnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGw9PnRoaXMubWFwLnNldChsLHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQobCkp'@;
put 'KSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChsPT57c3dpdGNoKGwub3Ape2Nhc2UiYSI6Y2FzZSJzIjpjb25zdCBhPSgiYSI9PT1sLm9wP3RoaXMubWFwLmdldChsLnBhcmFtKTp2b2lkIDApfHxbXTthLnB1c2gocVIobC52YWx1ZSkpLHRoaXMubWFwLnNldChsLnBhcmFtLGEpO2JyZWFrO2Nhc2Ui'@;
put 'ZCI6aWYodm9pZCAwPT09bC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKGwucGFyYW0pO2JyZWFrfXtsZXQgZD10aGlzLm1hcC5nZXQobC5wYXJhbSl8fFtdO2NvbnN0IGg9ZC5pbmRleE9mKHFSKGwudmFsdWUpKTstMSE9PWgmJmQuc3BsaWNlKGgsMSksZC5sZW5ndGg+MD90aGlzLm1hcC5zZXQo'@;
put 'bC5wYXJhbSxkKTp0aGlzLm1hcC5kZWxldGUobC5wYXJhbSl9fX0pLHRoaXMuY2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19Y2xhc3MgUlRle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1zZXQobCxhKXtyZXR1cm4gdGhpcy5tYXAuc2V0KGwsYSksdGhpc31nZXQobCl7cmV0'@;
put 'dXJuIHRoaXMubWFwLmhhcyhsKXx8dGhpcy5tYXAuc2V0KGwsbC5kZWZhdWx0VmFsdWUoKSksdGhpcy5tYXAuZ2V0KGwpfWRlbGV0ZShsKXtyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGwpLHRoaXN9aGFzKGwpe3JldHVybiB0aGlzLm1hcC5oYXMobCl9a2V5cygpe3JldHVybiB0aGlzLm1hcC5r'@;
put 'ZXlzKCl9fWZ1bmN0aW9uIG1jZShjKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmYyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfWZ1bmN0aW9uIHZjZShjKXtyZXR1cm4gdHlwZW9mIEJsb2I8InUiJiZjIGluc3RhbmNlb2YgQmxvYn1mdW5jdGlvbiBiY2UoYyl7cmV0dXJuIHR5cGVv'@;
put 'ZiBGb3JtRGF0YTwidSImJmMgaW5zdGFuY2VvZiBGb3JtRGF0YX1jbGFzcyBueHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtsZXQgZjtpZih0aGlzLnVybD1hLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5'@;
put 'cGU9Impzb24iLHRoaXMubWV0aG9kPWwudG9VcHBlckNhc2UoKSxmdW5jdGlvbiBMVGUoYyl7c3dpdGNoKGMpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8'@;
put 'fGg/KHRoaXMuYm9keT12b2lkIDAhPT1kP2Q6bnVsbCxmPWgpOmY9ZCxmJiYodGhpcy5yZXBvcnRQcm9ncmVzcz0hIWYucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFmLndpdGhDcmVkZW50aWFscyxmLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWYucmVz'@;
put 'cG9uc2VUeXBlKSxmLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9Zi5oZWFkZXJzKSxmLmNvbnRleHQmJih0aGlzLmNvbnRleHQ9Zi5jb250ZXh0KSxmLnBhcmFtcyYmKHRoaXMucGFyYW1zPWYucGFyYW1zKSx0aGlzLnRyYW5zZmVyQ2FjaGU9Zi50cmFuc2ZlckNhY2hlKSx0aGlzLmhlYWRlcnM/'@;
put 'Pz1uZXcgRTIsdGhpcy5jb250ZXh0Pz89bmV3IFJUZSx0aGlzLnBhcmFtcyl7Y29uc3Qgdj10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT12Lmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9YTtlbHNle2NvbnN0IE09YS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWErKC0x'@;
put 'PT09TT8iPyI6TTxhLmxlbmd0aC0xPyImIjoiIikrdn19ZWxzZSB0aGlzLnBhcmFtcz1uZXcgYW0sdGhpcy51cmxXaXRoUGFyYW1zPWF9c2VyaWFsaXplQm9keSgpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHl8fG1jZSh0aGlzLmJvZHkp'@;
put 'fHx2Y2UodGhpcy5ib2R5KXx8YmNlKHRoaXMuYm9keSl8fGZ1bmN0aW9uIE9UZShjKXtyZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9keSk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIGFtP3RoaXMu'@;
put 'Ym9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVhbiI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVh'@;
put 'ZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fGJjZSh0aGlzLmJvZHkpP251bGw6dmNlKHRoaXMuYm9keSk/dGhpcy5ib2R5LnR5cGV8fG51bGw6bWNlKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNl'@;
put 'b2YgYW0/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1j'@;
put 'bG9uZShsPXt9KXtjb25zdCBhPWwubWV0aG9kfHx0aGlzLm1ldGhvZCxkPWwudXJsfHx0aGlzLnVybCxoPWwucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxmPWwudHJhbnNmZXJDYWNoZT8/dGhpcy50cmFuc2ZlckNhY2hlLHY9dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJv'@;
put 'ZHksTT1sLndpdGhDcmVkZW50aWFscz8/dGhpcy53aXRoQ3JlZGVudGlhbHMsRD1sLnJlcG9ydFByb2dyZXNzPz90aGlzLnJlcG9ydFByb2dyZXNzO2xldCBaPWwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLG5lPWwucGFyYW1zfHx0aGlzLnBhcmFtcztjb25zdCBjZT1sLmNvbnRleHQ/P3RoaXMu'@;
put 'Y29udGV4dDtyZXR1cm4gdm9pZCAwIT09bC5zZXRIZWFkZXJzJiYoWj1PYmplY3Qua2V5cyhsLnNldEhlYWRlcnMpLnJlZHVjZSgoYmUsRWUpPT5iZS5zZXQoRWUsbC5zZXRIZWFkZXJzW0VlXSksWikpLGwuc2V0UGFyYW1zJiYobmU9T2JqZWN0LmtleXMobC5zZXRQYXJhbXMpLnJlZHVjZSgo'@;
put 'YmUsRWUpPT5iZS5zZXQoRWUsbC5zZXRQYXJhbXNbRWVdKSxuZSkpLG5ldyBueChhLGQsdix7cGFyYW1zOm5lLGhlYWRlcnM6Wixjb250ZXh0OmNlLHJlcG9ydFByb2dyZXNzOkQscmVzcG9uc2VUeXBlOmgsd2l0aENyZWRlbnRpYWxzOk0sdHJhbnNmZXJDYWNoZTpmfSl9fXZhciBzbT1mdW5j'@;
put 'dGlvbihjKXtyZXR1cm4gY1tjLlNlbnQ9MF09IlNlbnQiLGNbYy5VcGxvYWRQcm9ncmVzcz0xXT0iVXBsb2FkUHJvZ3Jlc3MiLGNbYy5SZXNwb25zZUhlYWRlcj0yXT0iUmVzcG9uc2VIZWFkZXIiLGNbYy5Eb3dubG9hZFByb2dyZXNzPTNdPSJEb3dubG9hZFByb2dyZXNzIixjW2MuUmVzcG9u'@;
put 'c2U9NF09IlJlc3BvbnNlIixjW2MuVXNlcj01XT0iVXNlciIsY30oc218fHt9KTtjbGFzcyBfV3tjb25zdHJ1Y3RvcihsLGE9cnguT2ssZD0iT0siKXt0aGlzLmhlYWRlcnM9bC5oZWFkZXJzfHxuZXcgRTIsdGhpcy5zdGF0dXM9dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6YSx0aGlzLnN0'@;
put 'YXR1c1RleHQ9bC5zdGF0dXNUZXh0fHxkLHRoaXMudXJsPWwudXJsfHxudWxsLHRoaXMub2s9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwfX1jbGFzcyBYUiBleHRlbmRzIF9Xe2NvbnN0cnVjdG9yKGw9e30pe3N1cGVyKGwpLHRoaXMudHlwZT1zbS5SZXNwb25zZUhlYWRlcn1j'@;
put 'bG9uZShsPXt9KXtyZXR1cm4gbmV3IFhSKHtoZWFkZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Omwuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8'@;
put 'fHZvaWQgMH0pfX1jbGFzcyBKOCBleHRlbmRzIF9Xe2NvbnN0cnVjdG9yKGw9e30pe3N1cGVyKGwpLHRoaXMudHlwZT1zbS5SZXNwb25zZSx0aGlzLmJvZHk9dm9pZCAwIT09bC5ib2R5P2wuYm9keTpudWxsfWNsb25lKGw9e30pe3JldHVybiBuZXcgSjgoe2JvZHk6dm9pZCAwIT09bC5ib2R5'@;
put 'P2wuYm9keTp0aGlzLmJvZHksaGVhZGVyczpsLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxzdGF0dXM6dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDpsLnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6bC51cmx8fHRoaXMudXJsfHx2b2lkIDB9'@;
put 'KX19Y2xhc3MgZ3kgZXh0ZW5kcyBfV3tjb25zdHJ1Y3RvcihsKXtzdXBlcihsLDAsIlVua25vd24gRXJyb3IiKSx0aGlzLm5hbWU9Ikh0dHBFcnJvclJlc3BvbnNlIix0aGlzLm9rPSExLHRoaXMubWVzc2FnZT10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDA/YEh0dHAgZmFpbHVy'@;
put 'ZSBkdXJpbmcgcGFyc2luZyBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifWA6YEh0dHAgZmFpbHVyZSByZXNwb25zZSBmb3IgJHtsLnVybHx8Iih1bmtub3duIHVybCkifTogJHtsLnN0YXR1c30gJHtsLnN0YXR1c1RleHR9YCx0aGlzLmVycm9yPWwuZXJyb3J8fG51bGx9fXZhciByeD1m'@;
put 'dW5jdGlvbihjKXtyZXR1cm4gY1tjLkNvbnRpbnVlPTEwMF09IkNvbnRpbnVlIixjW2MuU3dpdGNoaW5nUHJvdG9jb2xzPTEwMV09IlN3aXRjaGluZ1Byb3RvY29scyIsY1tjLlByb2Nlc3Npbmc9MTAyXT0iUHJvY2Vzc2luZyIsY1tjLkVhcmx5SGludHM9MTAzXT0iRWFybHlIaW50cyIsY1tj'@;
put 'Lk9rPTIwMF09Ik9rIixjW2MuQ3JlYXRlZD0yMDFdPSJDcmVhdGVkIixjW2MuQWNjZXB0ZWQ9MjAyXT0iQWNjZXB0ZWQiLGNbYy5Ob25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb249MjAzXT0iTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIixjW2MuTm9Db250ZW50PTIwNF09Ik5vQ29udGVu'@;
put 'dCIsY1tjLlJlc2V0Q29udGVudD0yMDVdPSJSZXNldENvbnRlbnQiLGNbYy5QYXJ0aWFsQ29udGVudD0yMDZdPSJQYXJ0aWFsQ29udGVudCIsY1tjLk11bHRpU3RhdHVzPTIwN109Ik11bHRpU3RhdHVzIixjW2MuQWxyZWFkeVJlcG9ydGVkPTIwOF09IkFscmVhZHlSZXBvcnRlZCIsY1tjLklt'@;
put 'VXNlZD0yMjZdPSJJbVVzZWQiLGNbYy5NdWx0aXBsZUNob2ljZXM9MzAwXT0iTXVsdGlwbGVDaG9pY2VzIixjW2MuTW92ZWRQZXJtYW5lbnRseT0zMDFdPSJNb3ZlZFBlcm1hbmVudGx5IixjW2MuRm91bmQ9MzAyXT0iRm91bmQiLGNbYy5TZWVPdGhlcj0zMDNdPSJTZWVPdGhlciIsY1tjLk5v'@;
put 'dE1vZGlmaWVkPTMwNF09Ik5vdE1vZGlmaWVkIixjW2MuVXNlUHJveHk9MzA1XT0iVXNlUHJveHkiLGNbYy5VbnVzZWQ9MzA2XT0iVW51c2VkIixjW2MuVGVtcG9yYXJ5UmVkaXJlY3Q9MzA3XT0iVGVtcG9yYXJ5UmVkaXJlY3QiLGNbYy5QZXJtYW5lbnRSZWRpcmVjdD0zMDhdPSJQZXJtYW5l'@;
put 'bnRSZWRpcmVjdCIsY1tjLkJhZFJlcXVlc3Q9NDAwXT0iQmFkUmVxdWVzdCIsY1tjLlVuYXV0aG9yaXplZD00MDFdPSJVbmF1dGhvcml6ZWQiLGNbYy5QYXltZW50UmVxdWlyZWQ9NDAyXT0iUGF5bWVudFJlcXVpcmVkIixjW2MuRm9yYmlkZGVuPTQwM109IkZvcmJpZGRlbiIsY1tjLk5vdEZv'@;
put 'dW5kPTQwNF09Ik5vdEZvdW5kIixjW2MuTWV0aG9kTm90QWxsb3dlZD00MDVdPSJNZXRob2ROb3RBbGxvd2VkIixjW2MuTm90QWNjZXB0YWJsZT00MDZdPSJOb3RBY2NlcHRhYmxlIixjW2MuUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkPTQwN109IlByb3h5QXV0aGVudGljYXRpb25SZXF1'@;
put 'aXJlZCIsY1tjLlJlcXVlc3RUaW1lb3V0PTQwOF09IlJlcXVlc3RUaW1lb3V0IixjW2MuQ29uZmxpY3Q9NDA5XT0iQ29uZmxpY3QiLGNbYy5Hb25lPTQxMF09IkdvbmUiLGNbYy5MZW5ndGhSZXF1aXJlZD00MTFdPSJMZW5ndGhSZXF1aXJlZCIsY1tjLlByZWNvbmRpdGlvbkZhaWxlZD00MTJd'@;
put 'PSJQcmVjb25kaXRpb25GYWlsZWQiLGNbYy5QYXlsb2FkVG9vTGFyZ2U9NDEzXT0iUGF5bG9hZFRvb0xhcmdlIixjW2MuVXJpVG9vTG9uZz00MTRdPSJVcmlUb29Mb25nIixjW2MuVW5zdXBwb3J0ZWRNZWRpYVR5cGU9NDE1XT0iVW5zdXBwb3J0ZWRNZWRpYVR5cGUiLGNbYy5SYW5nZU5vdFNh'@;
put 'dGlzZmlhYmxlPTQxNl09IlJhbmdlTm90U2F0aXNmaWFibGUiLGNbYy5FeHBlY3RhdGlvbkZhaWxlZD00MTddPSJFeHBlY3RhdGlvbkZhaWxlZCIsY1tjLkltQVRlYXBvdD00MThdPSJJbUFUZWFwb3QiLGNbYy5NaXNkaXJlY3RlZFJlcXVlc3Q9NDIxXT0iTWlzZGlyZWN0ZWRSZXF1ZXN0Iixj'@;
put 'W2MuVW5wcm9jZXNzYWJsZUVudGl0eT00MjJdPSJVbnByb2Nlc3NhYmxlRW50aXR5IixjW2MuTG9ja2VkPTQyM109IkxvY2tlZCIsY1tjLkZhaWxlZERlcGVuZGVuY3k9NDI0XT0iRmFpbGVkRGVwZW5kZW5jeSIsY1tjLlRvb0Vhcmx5PTQyNV09IlRvb0Vhcmx5IixjW2MuVXBncmFkZVJlcXVp'@;
put 'cmVkPTQyNl09IlVwZ3JhZGVSZXF1aXJlZCIsY1tjLlByZWNvbmRpdGlvblJlcXVpcmVkPTQyOF09IlByZWNvbmRpdGlvblJlcXVpcmVkIixjW2MuVG9vTWFueVJlcXVlc3RzPTQyOV09IlRvb01hbnlSZXF1ZXN0cyIsY1tjLlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZT00MzFdPSJSZXF1'@;
put 'ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UiLGNbYy5VbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucz00NTFdPSJVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29ucyIsY1tjLkludGVybmFsU2VydmVyRXJyb3I9NTAwXT0iSW50ZXJuYWxTZXJ2ZXJFcnJvciIsY1tjLk5vdEltcGxlbWVudGVkPTUwMV09'@;
put 'Ik5vdEltcGxlbWVudGVkIixjW2MuQmFkR2F0ZXdheT01MDJdPSJCYWRHYXRld2F5IixjW2MuU2VydmljZVVuYXZhaWxhYmxlPTUwM109IlNlcnZpY2VVbmF2YWlsYWJsZSIsY1tjLkdhdGV3YXlUaW1lb3V0PTUwNF09IkdhdGV3YXlUaW1lb3V0IixjW2MuSHR0cFZlcnNpb25Ob3RTdXBwb3J0'@;
put 'ZWQ9NTA1XT0iSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLGNbYy5WYXJpYW50QWxzb05lZ290aWF0ZXM9NTA2XT0iVmFyaWFudEFsc29OZWdvdGlhdGVzIixjW2MuSW5zdWZmaWNpZW50U3RvcmFnZT01MDddPSJJbnN1ZmZpY2llbnRTdG9yYWdlIixjW2MuTG9vcERldGVjdGVkPTUwOF09Ikxv'@;
put 'b3BEZXRlY3RlZCIsY1tjLk5vdEV4dGVuZGVkPTUxMF09Ik5vdEV4dGVuZGVkIixjW2MuTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ9NTExXT0iTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLGN9KHJ4fHx7fSk7ZnVuY3Rpb24gd1coYyxsKXtyZXR1cm57Ym9keTpsLGhlYWRl'@;
put 'cnM6Yy5oZWFkZXJzLGNvbnRleHQ6Yy5jb250ZXh0LG9ic2VydmU6Yy5vYnNlcnZlLHBhcmFtczpjLnBhcmFtcyxyZXBvcnRQcm9ncmVzczpjLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpjLnJlc3BvbnNlVHlwZSx3aXRoQ3JlZGVudGlhbHM6Yy53aXRoQ3JlZGVudGlhbHMsdHJhbnNm'@;
put 'ZXJDYWNoZTpjLnRyYW5zZmVyQ2FjaGV9fWxldCBDVz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGFuZGxlcj1hfXJlcXVlc3QoYSxkLGg9e30pe2xldCBmO2lmKGEgaW5zdGFuY2VvZiBueClmPWE7ZWxzZXtsZXQgRCxaO0Q9aC5oZWFkZXJzIGluc3RhbmNlb2YgRTI/aC5o'@;
put 'ZWFkZXJzOm5ldyBFMihoLmhlYWRlcnMpLGgucGFyYW1zJiYoWj1oLnBhcmFtcyBpbnN0YW5jZW9mIGFtP2gucGFyYW1zOm5ldyBhbSh7ZnJvbU9iamVjdDpoLnBhcmFtc30pKSxmPW5ldyBueChhLGQsdm9pZCAwIT09aC5ib2R5P2guYm9keTpudWxsLHtoZWFkZXJzOkQsY29udGV4dDpoLmNv'@;
put 'bnRleHQscGFyYW1zOloscmVwb3J0UHJvZ3Jlc3M6aC5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6aC5yZXNwb25zZVR5cGV8fCJqc29uIix3aXRoQ3JlZGVudGlhbHM6aC53aXRoQ3JlZGVudGlhbHMsdHJhbnNmZXJDYWNoZTpoLnRyYW5zZmVyQ2FjaGV9KX1jb25zdCB2PWZhKGYpLnBp'@;
put 'cGUoUWIoRD0+dGhpcy5oYW5kbGVyLmhhbmRsZShEKSkpO2lmKGEgaW5zdGFuY2VvZiBueHx8ImV2ZW50cyI9PT1oLm9ic2VydmUpcmV0dXJuIHY7Y29uc3QgTT12LnBpcGUoR2woRD0+RCBpbnN0YW5jZW9mIEo4KSk7c3dpdGNoKGgub2JzZXJ2ZXx8ImJvZHkiKXtjYXNlImJvZHkiOnN3aXRj'@;
put 'aChmLnJlc3BvbnNlVHlwZSl7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIE0ucGlwZShMcihEPT57aWYobnVsbCE9PUQuYm9keSYmIShELmJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYW4gQXJyYXlCdWZmZXIuIik7cmV0dXJu'@;
put 'IEQuYm9keX0pKTtjYXNlImJsb2IiOnJldHVybiBNLnBpcGUoTHIoRD0+e2lmKG51bGwhPT1ELmJvZHkmJiEoRC5ib2R5IGluc3RhbmNlb2YgQmxvYikpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBCbG9iLiIpO3JldHVybiBELmJvZHl9KSk7Y2FzZSJ0ZXh0IjpyZXR1cm4g'@;
put 'TS5waXBlKExyKEQ9PntpZihudWxsIT09RC5ib2R5JiYic3RyaW5nIiE9dHlwZW9mIEQuYm9keSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIHN0cmluZy4iKTtyZXR1cm4gRC5ib2R5fSkpO2RlZmF1bHQ6cmV0dXJuIE0ucGlwZShMcihEPT5ELmJvZHkpKX1jYXNlInJlc3Bv'@;
put 'bnNlIjpyZXR1cm4gTTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVW5yZWFjaGFibGU6IHVuaGFuZGxlZCBvYnNlcnZlIHR5cGUgJHtoLm9ic2VydmV9fWApfX1kZWxldGUoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJERUxFVEUiLGEsZCl9Z2V0KGEsZD17fSl7cmV0dXJuIHRoaXMu'@;
put 'cmVxdWVzdCgiR0VUIixhLGQpfWhlYWQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJIRUFEIixhLGQpfWpzb25wKGEsZCl7cmV0dXJuIHRoaXMucmVxdWVzdCgiSlNPTlAiLGEse3BhcmFtczoobmV3IGFtKS5hcHBlbmQoZCwiSlNPTlBfQ0FMTEJBQ0siKSxvYnNlcnZlOiJib2R5Iixy'@;
put 'ZXNwb25zZVR5cGU6Impzb24ifSl9b3B0aW9ucyhhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIk9QVElPTlMiLGEsZCl9cGF0Y2goYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBBVENIIixhLHdXKGgsZCkpfXBvc3QoYSxkLGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBP'@;
put 'U1QiLGEsd1coaCxkKSl9cHV0KGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQVVQiLGEsd1coaCxkKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoJFIpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0'@;
put 'b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBfY2UoYyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiBWVGUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxkKX0pfWNvbnN0IGpUZT1uZXcgU3QoIiIpLGl4PW5ldyBTdCgiIiksd2Nl'@;
put 'PW5ldyBTdCgiIiksQ2NlPW5ldyBTdCgiIik7ZnVuY3Rpb24gelRlKCl7bGV0IGM9bnVsbDtyZXR1cm4obCxhKT0+e251bGw9PT1jJiYoYz0oZmkoalRlLHtvcHRpb25hbDohMH0pPz9bXSkucmVkdWNlUmlnaHQoVlRlLF9jZSkpO2NvbnN0IGQ9ZmkoUmYpLGg9ZC5hZGQoKTtyZXR1cm4gYyhs'@;
put 'LGEpLnBpcGUoek0oKCk9PmQucmVtb3ZlKGgpKSl9fWxldCBTY2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzICRSe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLmJhY2tlbmQ9YSx0aGlzLmluamVjdG9yPWQsdGhpcy5jaGFpbj1udWxsLHRoaXMucGVuZGluZ1Rhc2tzPWZpKFJmKTtjb25z'@;
put 'dCBoPWZpKENjZSx7b3B0aW9uYWw6ITB9KTt0aGlzLmJhY2tlbmQ9aD8/YX1oYW5kbGUoYSl7aWYobnVsbD09PXRoaXMuY2hhaW4pe2NvbnN0IGg9QXJyYXkuZnJvbShuZXcgU2V0KFsuLi50aGlzLmluamVjdG9yLmdldChpeCksLi4udGhpcy5pbmplY3Rvci5nZXQod2NlLFtdKV0pKTt0aGlz'@;
put 'LmNoYWluPWgucmVkdWNlUmlnaHQoKGYsdik9PmZ1bmN0aW9uIEJUZShjLGwsYSl7cmV0dXJuKGQsaCk9PnEwKGEsKCk9PmwoZCxmPT5jKGYsaCkpKX0oZix2LHRoaXMuaW5qZWN0b3IpLF9jZSl9Y29uc3QgZD10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKTtyZXR1cm4gdGhpcy5jaGFpbihhLGg9'@;
put 'PnRoaXMuYmFja2VuZC5oYW5kbGUoaCkpLnBpcGUoek0oKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShkKSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKEtSKSx4cihoYykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEdUZT0vXlwpXF1cfScsP1xuLztsZXQgeGNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy54aHJGYWN0b3J5PWF9aGFuZGxlKGEpe2lmKCJKU09OUCI9PT1hLm1ldGhvZCl0aHJvdyBuZXcgUW4o'@;
put 'LTI4MDAsITEpO2NvbnN0IGQ9dGhpcy54aHJGYWN0b3J5O3JldHVybihkLlx1MDI3NWxvYWRJbXBsP1p1KGQuXHUwMjc1bG9hZEltcGwoKSk6ZmEobnVsbCkpLnBpcGUoVjEoKCk9Pm5ldyBYdChmPT57Y29uc3Qgdj1kLmJ1aWxkKCk7aWYodi5vcGVuKGEubWV0aG9kLGEudXJsV2l0aFBhcmFt'@;
put 'cyksYS53aXRoQ3JlZGVudGlhbHMmJih2LndpdGhDcmVkZW50aWFscz0hMCksYS5oZWFkZXJzLmZvckVhY2goKHFlLHJ0KT0+di5zZXRSZXF1ZXN0SGVhZGVyKHFlLHJ0LmpvaW4oIiwiKSkpLGEuaGVhZGVycy5oYXMoIkFjY2VwdCIpfHx2LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsImFw'@;
put 'cGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIpLCFhLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKSl7Y29uc3QgcWU9YS5kZXRlY3RDb250ZW50VHlwZUhlYWRlcigpO251bGwhPT1xZSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHFlKX1pZihhLnJlc3BvbnNl'@;
put 'VHlwZSl7Y29uc3QgcWU9YS5yZXNwb25zZVR5cGUudG9Mb3dlckNhc2UoKTt2LnJlc3BvbnNlVHlwZT0ianNvbiIhPT1xZT9xZToidGV4dCJ9Y29uc3QgTT1hLnNlcmlhbGl6ZUJvZHkoKTtsZXQgRD1udWxsO2NvbnN0IFo9KCk9PntpZihudWxsIT09RClyZXR1cm4gRDtjb25zdCBxZT12LnN0'@;
put 'YXR1c1RleHR8fCJPSyIscnQ9bmV3IEUyKHYuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHB0PWZ1bmN0aW9uICRUZShjKXtyZXR1cm4icmVzcG9uc2VVUkwiaW4gYyYmYy5yZXNwb25zZVVSTD9jLnJlc3BvbnNlVVJMOi9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KGMuZ2V0QWxsUmVzcG9uc2VI'@;
put 'ZWFkZXJzKCkpP2MuZ2V0UmVzcG9uc2VIZWFkZXIoIlgtUmVxdWVzdC1VUkwiKTpudWxsfSh2KXx8YS51cmw7cmV0dXJuIEQ9bmV3IFhSKHtoZWFkZXJzOnJ0LHN0YXR1czp2LnN0YXR1cyxzdGF0dXNUZXh0OnFlLHVybDpwdH0pLER9LG5lPSgpPT57bGV0e2hlYWRlcnM6cWUsc3RhdHVzOnJ0'@;
put 'LHN0YXR1c1RleHQ6cHQsdXJsOmR0fT1aKCksSnQ9bnVsbDtydCE9PXJ4Lk5vQ29udGVudCYmKEp0PXR5cGVvZiB2LnJlc3BvbnNlPiJ1Ij92LnJlc3BvbnNlVGV4dDp2LnJlc3BvbnNlKSwwPT09cnQmJihydD1KdD9yeC5PazowKTtsZXQgdm49cnQ+PTIwMCYmcnQ8MzAwO2lmKCJqc29uIj09'@;
put 'PWEucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIEp0KXtjb25zdCBDbj1KdDtKdD1KdC5yZXBsYWNlKEdUZSwiIik7dHJ5e0p0PSIiIT09SnQ/SlNPTi5wYXJzZShKdCk6bnVsbH1jYXRjaCh0bil7SnQ9Q24sdm4mJih2bj0hMSxKdD17ZXJyb3I6dG4sdGV4dDpKdH0pfX12bj8oZi5u'@;
put 'ZXh0KG5ldyBKOCh7Ym9keTpKdCxoZWFkZXJzOnFlLHN0YXR1czpydCxzdGF0dXNUZXh0OnB0LHVybDpkdHx8dm9pZCAwfSkpLGYuY29tcGxldGUoKSk6Zi5lcnJvcihuZXcgZ3koe2Vycm9yOkp0LGhlYWRlcnM6cWUsc3RhdHVzOnJ0LHN0YXR1c1RleHQ6cHQsdXJsOmR0fHx2b2lkIDB9KSl9'@;
put 'LGNlPXFlPT57Y29uc3R7dXJsOnJ0fT1aKCkscHQ9bmV3IGd5KHtlcnJvcjpxZSxzdGF0dXM6di5zdGF0dXN8fDAsc3RhdHVzVGV4dDp2LnN0YXR1c1RleHR8fCJVbmtub3duIEVycm9yIix1cmw6cnR8fHZvaWQgMH0pO2YuZXJyb3IocHQpfTtsZXQgYmU9ITE7Y29uc3QgRWU9cWU9PntiZXx8'@;
put 'KGYubmV4dChaKCkpLGJlPSEwKTtsZXQgcnQ9e3R5cGU6c20uRG93bmxvYWRQcm9ncmVzcyxsb2FkZWQ6cWUubG9hZGVkfTtxZS5sZW5ndGhDb21wdXRhYmxlJiYocnQudG90YWw9cWUudG90YWwpLCJ0ZXh0Ij09PWEucmVzcG9uc2VUeXBlJiZ2LnJlc3BvbnNlVGV4dCYmKHJ0LnBhcnRpYWxU'@;
put 'ZXh0PXYucmVzcG9uc2VUZXh0KSxmLm5leHQocnQpfSxCZT1xZT0+e2xldCBydD17dHlwZTpzbS5VcGxvYWRQcm9ncmVzcyxsb2FkZWQ6cWUubG9hZGVkfTtxZS5sZW5ndGhDb21wdXRhYmxlJiYocnQudG90YWw9cWUudG90YWwpLGYubmV4dChydCl9O3JldHVybiB2LmFkZEV2ZW50TGlzdGVu'@;
put 'ZXIoImxvYWQiLG5lKSx2LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixjZSksdi5hZGRFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjZSksdi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsY2UpLGEucmVwb3J0UHJvZ3Jlc3MmJih2LmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixFZSksbnVs'@;
put 'bCE9PU0mJnYudXBsb2FkJiZ2LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsQmUpKSx2LnNlbmQoTSksZi5uZXh0KHt0eXBlOnNtLlNlbnR9KSwoKT0+e3YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLGNlKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjZSks'@;
put 'di5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixuZSksdi5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1lb3V0IixjZSksYS5yZXBvcnRQcm9ncmVzcyYmKHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEVlKSxudWxsIT09TSYmdi51cGxvYWQmJnYudXBsb2FkLnJlbW92ZUV2ZW50'@;
put 'TGlzdGVuZXIoInByb2dyZXNzIixCZSkpLHYucmVhZHlTdGF0ZSE9PXYuRE9ORSYmdi5hYm9ydCgpfX0pKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoaWFlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9y'@;
put 'eTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgeFc9bmV3IFN0KCIiKSxFY2U9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWFNSRi1UT0tFTiJ9KSxUY2U9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWC1YU1JGLVRP'@;
put 'S0VOIn0pO2NsYXNzIEFjZXt9bGV0IFhUZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmRvYz1hLHRoaXMucGxhdGZvcm09ZCx0aGlzLmNvb2tpZU5hbWU9aCx0aGlzLmxhc3RDb29raWVTdHJpbmc9IiIsdGhpcy5sYXN0VG9rZW49bnVsbCx0aGlzLnBhcnNlQ291bnQ9'@;
put 'MH1nZXRUb2tlbigpe2lmKCJzZXJ2ZXIiPT09dGhpcy5wbGF0Zm9ybSlyZXR1cm4gbnVsbDtjb25zdCBhPXRoaXMuZG9jLmNvb2tpZXx8IiI7cmV0dXJuIGEhPT10aGlzLmxhc3RDb29raWVTdHJpbmcmJih0aGlzLnBhcnNlQ291bnQrKyx0aGlzLmxhc3RUb2tlbj0kb2UoYSx0aGlzLmNvb2tp'@;
put 'ZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz1hKSx0aGlzLmxhc3RUb2tlbn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih2cykseHIob2EpLHhyKEVjZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEpUZShjLGwpe2NvbnN0IGE9Yy51cmwudG9Mb3dlckNhc2UoKTtpZighZmkoeFcpfHwiR0VUIj09PWMubWV0aG9kfHwiSEVBRCI9PT1jLm1ldGhvZHx8YS5zdGFydHNXaXRoKCJodHRwOi8vIil8fGEuc3RhcnRzV2l0aCgiaHR0'@;
put 'cHM6Ly8iKSlyZXR1cm4gbChjKTtjb25zdCBkPWZpKEFjZSkuZ2V0VG9rZW4oKSxoPWZpKFRjZSk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRlcnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5zZXQoaCxkKX0pKSxsKGMpfXZhciBsbT1mdW5jdGlvbihjKXtyZXR1cm4g'@;
put 'Y1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMiLGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJO'@;
put 'b1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBvcnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRjaCIsY30obG18fHt9KTtmdW5jdGlvbiBROChjLGwpe3JldHVybntcdTAy'@;
put 'NzVraW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIFFUZSguLi5jKXtjb25zdCBsPVtDVyx4Y2UsU2NlLHtwcm92aWRlOiRSLHVzZUV4aXN0aW5nOlNjZX0se3Byb3ZpZGU6S1IsdXNlRXhpc3Rpbmc6eGNlfSx7cHJvdmlkZTppeCx1c2VWYWx1ZTpKVGUsbXVsdGk6ITB9LHtwcm92'@;
put 'aWRlOnhXLHVzZVZhbHVlOiEwfSx7cHJvdmlkZTpBY2UsdXNlQ2xhc3M6WFRlfV07Zm9yKGNvbnN0IGEgb2YgYylsLnB1c2goLi4uYS5cdTAyNzVwcm92aWRlcnMpO3JldHVybiBmdW5jdGlvbiBtZihjKXtyZXR1cm57XHUwMjc1cHJvdmlkZXJzOmN9fShsKX1jb25zdCBrY2U9bmV3IFN0KCIi'@;
put 'KTtsZXQgdEFlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W1FUZShROChsbS5MZWdhY3lJ'@;
put 'bnRlcmNlcHRvcnMsW3twcm92aWRlOmtjZSx1c2VGYWN0b3J5OnpUZX0se3Byb3ZpZGU6aXgsdXNlRXhpc3Rpbmc6a2NlLG11bHRpOiEwfV0pKV19KX19cmV0dXJuIGN9KSgpLEhjZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5odHRwPWEsdGhpcy5hcHBTdG9yZVNlcnZp'@;
put 'Y2U9ZCx0aGlzLnVybD0iIix0aGlzLmRyaXZlVXJsPSIiLHRoaXMuaHR0cE9wdGlvbnM9e3dpdGhDcmVkZW50aWFsczohMH19c2V0dXAoKXtjb25zdCBhPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk7dGhpcy51cmw9YCR7YT8uc2VydmVyVXJsfHwiIn0vU0FT'@;
put 'anNBcGlgLHRoaXMuZHJpdmVVcmw9YCR7dGhpcy51cmx9L2RyaXZlYH1nZXRTZXJ2ZXJJbmZvKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy51cmx9L2luZm9gKX1nZXRGaWxlRnJvbURyaXZlKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGUvP19m'@;
put 'aWxlUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9mb2xkZXI/X2ZvbGRlclBhdGg9JHthfWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZVRyZWVGcm9tRHJpdmUo'@;
put 'KXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxldHJlZWAsdGhpcy5odHRwT3B0aW9ucyl9Z2V0RmlsZUZyb21GaWxlVHJlZShhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pnt0aGlzLmdldEZpbGVUcmVlRnJvbURyaXZlKCkuc3Vic2NyaWJlKGY9Pntjb25z'@;
put 'dCBNPXRoaXMuZmluZEluVHJlZShmLnRyZWUsYSk7ZChNKX0pfSl9ZmluZEluVHJlZShhLGQpe2lmKGEucmVsYXRpdmVQYXRoPT09ZClyZXR1cm4gYTtmb3IobGV0IGggb2YgYS5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZpbmRJblRyZWUoaCxkKTtpZihmKXJldHVybiBmfX1zdGF0aWN7dGhp'@;
put 'cy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihDVykseHIoWDgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSx0bD0oKCk9PntjbGFzcyBje2Nv'@;
put 'bnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmFwcFN0b3JlU2VydmljZT1hLHRoaXMudXNlclNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzanNTZXJ2aWNlPWYsdGhpcy5sb2dnZXJTZXJ2aWNlPXYsdGhpcy5yb3V0ZXI9TSx0aGlzLmxvYWRTdGFydHVwU2VydmljZUVt'@;
put 'aXR0ZXI9bmV3IFhyLHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlcj1uZXcgWHIsdGhpcy5yZXF1ZXN0U2l0ZUlkRW1pdHRlcj1uZXcgWHIsdGhpcy5zYXNqc0FkYXB0ZXI9bmV3KHBjZSgpKSx0aGlzLmFwcExvY0NoZWNrUGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2luPW5ldyBlaSghMSks'@;
put 'dGhpcy5saWNlbnNlX3NpdGVfaWQ9bmV3IGVpKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMuc2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5kY0FkYXB0ZXJTZXR0'@;
put 'aW5ncyl7c3dpdGNoKHRoaXMuc2FzanNBZGFwdGVyPW5ldyhwY2UoKSkodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncyksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncy5zZXJ2ZXJUeXBlKXtjYXNlIFMwLlkuU2FzVml5YTp0aGlzLmNoZWNrVml5YURlcGxveSh0aGlzLmRjQWRhcHRlclNldHRpbmdzLmFw'@;
put 'cExvY3x8IiIpO2JyZWFrO2Nhc2UgUzAuWS5TYXM5OnRoaXMubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCk7YnJlYWs7Y2FzZSBTMC5ZLlNhc2pzOnRoaXMuY2hlY2tTYXNqc0RlcGxveSgpfSJSZWRpcmVjdGVkIj09PXRoaXMuZ2V0U2FzanNDb25maWcoKS5sb2dpbk1lY2hhbmlz'@;
put 'bSYmdGhpcy5zaG91bGRMb2dpbi5zdWJzY3JpYmUoYT0+e2EmJnRoaXMuc2FzanNBZGFwdGVyLmxvZ0luKCkudGhlbihkPT57Y29uc29sZS5sb2coInJlcyIsZCl9KX0pfWVsc2UgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJBZGFwdGVyIHNldHRpbmdzIChpbmRl'@;
put 'eC5odG1sKSBhcmUgbm90IHByZXNlbnQuIil9cmVxdWVzdChhLGQsaCxmKXtyZXR1cm4gZnx8KGY9e30pLHRoaXMubG9nZ2VyU2VydmljZS5sb2dSZXF1ZXN0RGF0YShhPSJzZXJ2aWNlcy8iK2EsZCksbmV3IFByb21pc2UoKHYsTSk9Pnt0aGlzLnNhc2pzQWRhcHRlci5yZXF1ZXN0KGEsZCxo'@;
put 'LCgpPT57dGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKX0pLnRoZW4oRD0+e2NvbnN0IFo9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKS5maW5kKG5lPT5uZS5zZXJ2aWNlTGluaz09PWEpO2lmKCExPT09RC5sb2dpbiYmKHRoaXMuc2hvdWxkTG9naW4ubmV4dCghMCksTSh7YWRh'@;
put 'cHRlclJlc3BvbnNlOiExLGxvZzpaPy5sb2dGaWxlfSkpLCF0aGlzLnVzZXJTZXJ2aWNlLnVzZXImJkQuTUZfR0VUVVNFUiYmKHRoaXMudXNlclNlcnZpY2UudXNlcj17dXNlcm5hbWU6RC5NRl9HRVRVU0VSfSksRC5TWVNTSVRFJiYodGhpcy5yZXF1ZXN0U2l0ZUlkRW1pdHRlci5lbWl0KEQu'@;
put 'U1lTU0lURSksdGhpcy5nZXRMaWNlbnNlU2l0ZUlkKCkubGVuZ3RoPjAmJih0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5pbmNsdWRlcyhELlNZU1NJVEUpfHx0aGlzLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIuZW1pdChELlNZU1NJVEUpKSksNDA0PT09RC5zdGF0dXMmJk0oe2FkYXB0ZXJSZXNw'@;
put 'b25zZTp7TUVTU0FHRTpELmJvZHl8fCJTQVMgUmVzcG9uZGVkIHdpdGggZXJyb3IifSxsb2c6Wj8ubG9nRmlsZX0pLHR5cGVvZiBELnNhc2pzQWJvcnQ8InUiKXtjb25zdCBuZT1ELGNlPW5lLnNhc2pzQWJvcnRbMF0uTVNHLGJlPW5lLnNhc2pzQWJvcnRbMF0uTUFDO2lmKGNlLmluY2x1ZGVz'@;
put 'KCJEYXRhX0NvbnRyb2xsZXJfU2V0dGluZ3MoU3RvcmVkUHJvY2Vzcykgbm90IGZvdW5kIikpcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHZvaWQgTSh7YWRhcHRlclJlc3BvbnNlOntlcnJv'@;
put 'cjpjZX0sbG9nOlo/LmxvZ0ZpbGV9KTtmPy5zdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLnJlcGxhY2UoInNlcnZpY2VzLyIsIiIpLGNlLHtTWVNXQVJOSU5HVEVYVDpuZS5TWVNXQVJOSU5HVEVYVCxTWVNFUlJPUlRFWFQ6bmUu'@;
put 'U1lTRVJST1JURVhULE1BQzpiZX0pLE0oe2FkYXB0ZXJSZXNwb25zZTp7ZXJyb3I6Y2V9LGxvZzpaPy5sb2dGaWxlfSl9dih7YWRhcHRlclJlc3BvbnNlOkQsbG9nOlo/LmxvZ0ZpbGV9KX0sRD0+e2NvbnNvbGUuZXJyb3IoRCk7Y29uc3QgWj10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1'@;
put 'ZXN0cygpLmZpbmQobmU9Pm5lLnNlcnZpY2VMaW5rPT09YSk7aWYoRC5lcnJvcil7bGV0IGNlLG5lPUQuZXJyb3IubWVzc2FnZTtELmVycm9yLmRldGFpbHMmJkQuZXJyb3IuZGV0YWlscy5sb2cmJihjZT1ELmVycm9yLmRldGFpbHMubG9nKSwoIW5lfHxuZS50cmltKCkubGVuZ3RoPDEpJiYo'@;
put 'bmU9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiKSxmPy5zdXBwcmVzc0Vycm9yQWJvcnRNb2RhbHx8dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoYSxuZSx7TE9HOmNlfSwiUmVxdWVzdCBlcnJvciIpLE0oe2FkYXB0ZXJSZXNwb25zZTp7ZXJyb3I6bmV9LGxvZzpaPy5sb2dG'@;
put 'aWxlfSl9TSh7YWRhcHRlclJlc3BvbnNlOkQsbG9nOlo/LmxvZ0ZpbGV9KX0pfSl9dXBsb2FkRmlsZShhLGQsaCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57dGhpcy5zYXNqc0FkYXB0ZXIudXBsb2FkRmlsZShhLGQsaCkudGhlbihNPT57Y29uc3QgRD10aGlzLnNhc2pzQWRhcHRlci5n'@;
put 'ZXRTYXNSZXF1ZXN0cygpLmZpbmQoWj0+InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiPT09Wi5zZXJ2aWNlTGluayk7Zih7YWRhcHRlclJlc3BvbnNlOk0sbG9nOkQ/LmxvZ0ZpbGV9KX0sTT0+e2NvbnN0IEQ9dGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKS5maW5kKFo9PiJz'@;
put 'ZXJ2aWNlcy9lZGl0b3JzL2xvYWRmaWxlIj09PVouc2VydmljZUxpbmspO3Yoe3Jlc3BvbnNlOk0sbG9nOkQ/LmxvZ0ZpbGV9KX0pfSl9bG9naW4oYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBmPWguZ2V0U2VydmVyVHlwZSgpPT09UzAuWS5TYXNqcz8iY2xp'@;
put 'ZW50SUQxIjp2b2lkIDA7cmV0dXJuIGguc2FzanNBZGFwdGVyLmxvZ0luKGEsZCxmKS50aGVuKHY9Pih2LmlzTG9nZ2VkSW4mJihoLnVzZXJTZXJ2aWNlLnVzZXI9e3VzZXJuYW1lOnYudXNlck5hbWV9LGguYXBwTG9jQ2hlY2tQZW5kaW5nJiYoaC5jaGVja1ZpeWFEZXBsb3koaC5kY0FkYXB0'@;
put 'ZXJTZXR0aW5ncz8uYXBwTG9jfHwiIiksaC5hcHBMb2NDaGVja1BlbmRpbmc9ITEpKSxoLnNob3VsZExvZ2luLm5leHQoIXYuaXNMb2dnZWRJbiksdi5pc0xvZ2dlZEluKSx2PT4oY29uc29sZS5lcnJvcih2KSxoLnNob3VsZExvZ2luLm5leHQoITApLCExKSkuY2F0Y2godj0+KDQwMz09PXYm'@;
put 'JmNvbnNvbGUuZXJyb3IoIkludmFsaWQgaG9zdCIpLCExKSl9KSgpfWdldExpY2Vuc2VTaXRlSWQoKXtyZXR1cm4gdGhpcy5saWNlbnNlX3NpdGVfaWQudmFsdWV8fFtdfXNldExpY2Vuc2VTaXRlSWQoYSl7dGhpcy5saWNlbnNlX3NpdGVfaWQubmV4dCgib2JqZWN0Ij09dHlwZW9mIGE/YTpb'@;
put 'YV0pfWNoZWNrU2FzanNEZXBsb3koKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBoPWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZShoKS5zdWJzY3JpYmUo'@;
put 'Zj0+e2YuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpPyhhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSk6KGEubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlci5lbWl0KCksYS5yb3V0ZXIudXJsLmluY2x1ZGVz'@;
put 'KCJkZXBsb3kiKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpKX0sZj0+e2YuZXJyb3IuaW5jbHVkZXMoIlVuYXV0aG9yaXplZCIpPyhhLnNob3VsZExvZ2luLm5leHQoITApLGEuc2hvdWxkTG9naW4uc3Vic2NyaWJlKHY9PnshMT09PXYmJmxvY2F0aW9uLnJlbG9hZCgpfSkpOmYuZXJy'@;
put 'b3IuaW5jbHVkZXMoIkZvbGRlciBkb2Vzbid0IGV4aXN0LiIpJiYoY29uc29sZS53YXJuKCJTQVNqcyBTQVMgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEucm91dGVyLm5hdmlnYXRl'@;
put 'QnlVcmwoIi9kZXBsb3kiKSl9KX0pKCl9c2FzanNNYWtlZGF0YUNoZWNraW5nKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7YS5jaGVja2luZ0ludGVydmFsPXNldEludGVydmFs'@;
put 'KGVlKGZ1bmN0aW9uKigpe2Euc2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCkudGhlbih2PT57diYmKGNsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxoKHYpKX0pLmNhdGNoKHY9PntjbGVhckludGVydmFsKGEuY2hlY2tpbmdJbnRlcnZhbCksZih2KX0pfSksMWUzKX0pO3JldHVy'@;
put 'biBmdW5jdGlvbihoLGYpe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSkoKX1zYXNqc01ha2VkYXRhU3VjY2Vzc2Z1bGwoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pntjb25zdCB2PWAke2EuZ2V0U2FzanND'@;
put 'b25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2VydmljZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZSh2KS5zdWJzY3JpYmUoTT0+e00uZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITApfSxNPT57TS5lcnJvci5pbmNsdWRlcygiRm9sZGVy'@;
put 'IGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxveShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj0hMTtmPXR5cGVvZiBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXI8InUiP3lpZWxkIGQuYXBwTG9jQ2hlY2soYSk6eWllbGQgZC5hcHBM'@;
put 'b2NDaGVja1ByZUF4aW9zZEFkYXB0ZXIoYSksZiYmZC5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKX0pKCl9YXBwTG9jQ2hlY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgaD1lZShmdW5jdGlvbiooZix2KXtsZXQgRCxNPSExO3RyeXtE'@;
put 'PXlpZWxkIGQuc2FzanNBZGFwdGVyLmdldEZvbGRlcihhKX1jYXRjaChaKXsiTG9naW5SZXF1aXJlZEVycm9yIj09PVoubmFtZT8oZC5hcHBMb2NDaGVja1BlbmRpbmc9ITAsZC5zaG91bGRMb2dpbi5uZXh0KCEwKSxmKCExKSk6TT0hMH1pZihNKXJldHVybiBjb25zb2xlLndhcm4oIlZpeWEg'@;
put 'c2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSxkLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSxmKCExKTtmKCEwKX0pO3JldHVybiBmdW5jdGlvbihmLHYpe3JldHVybiBoLmFw'@;
put 'cGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRlcihhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntsZXQgdj0hMTtyZXR1cm4gZmV0Y2goYC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke2F9YCkudGhlbihNPT4oNDA0PT09TS5zdGF0dXMm'@;
put 'Jih2PSEwKSxNLnRleHQoKSkpLnRoZW4oTT0+e2lmKHRoaXMuaXNMb2dpblJlcXVpcmVkKE0pKXRoaXMuYXBwTG9jQ2hlY2tQZW5kaW5nPSEwLHRoaXMuc2hvdWxkTG9naW4ubmV4dCghMCk7ZWxzZXtpZih2KXJldHVybiBjb25zb2xlLndhcm4oIlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVz'@;
put 'ZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSx0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSxkKCExKTtsZXQgRD1udWxsO3RyeXtEPUpTT04ucGFyc2UoTSl9Y2F0Y2h7fWlmKEQmJkQuaHR0cFN0YXR1'@;
put 'c0NvZGUmJjQwND09PUQuaHR0cFN0YXR1c0NvZGUpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVC'@;
put 'eVVybCgiL2RlcGxveSIpLGQoITEpO2QoITApfX0pLmNhdGNoKE09PntkKCExKX0pfSl9aXNMb2dpblJlcXVpcmVkKGEpe3JldHVybi88Zm9ybS4rYWN0aW9uPSIoLipMb2dvblteIl0qKS4qPi9nbS50ZXN0KGEpfWxvZ291dCgpe3RoaXMuc2FzanNBZGFwdGVyLmxvZ091dCgpLnRoZW4oKCk9'@;
put 'Pntsb2NhdGlvbi5yZWxvYWQoKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCl9Z2V0U2FzUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKX1zZXREZWJ1Z1N0YXRlKGEpe3RoaXMuc2Fz'@;
put 'anNBZGFwdGVyLnNldERlYnVnU3RhdGUoYSl9Z2V0U2FzanNJbnN0YW5jZSgpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlcn1nZXRTZXJ2ZXJUeXBlKCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhLnNlcnZlclR5cGU/YS5zZXJ2ZXJUeXBlOiJT'@;
put 'QVNWSVlBIn1nZXRFeGVjdXRpb25QYXRoKCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3N3aXRjaChhLnNlcnZlclR5cGUpe2Nhc2UgUzAuWS5TYXNWaXlhOnJldHVybiBhLnBhdGhTQVNWaXlhO2Nhc2UgUzAuWS5TYXM5OnJldHVybiBhLnBhdGhTQVM5O2Nh'@;
put 'c2UgUzAuWS5TYXNqczpyZXR1cm4gYS5wYXRoU0FTSlN9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFg4KSx4cih5VykseHIodmMpLHhyKEhjZSkseHIoTWQpLHhyKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMs'@;
put 'ZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksTWQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmluamVjdG9yPWF9bG9nKGEsZCl7dGhpcy5pbmplY3RTYXNTZXJ2aWNlKCksdGhpcy5zYXNqc0NvbmZpZz8uZGVidWcmJihkP2Nv'@;
put 'bnNvbGUubG9nKGEsZCk6Y29uc29sZS5sb2coYSkpfWVycm9yKGEsZCl7Y29uc29sZS5lcnJvcihhLGQpfWxvZ1JlcXVlc3REYXRhKGEsZCl7aWYodGhpcy5sb2coIi0tLSBBZGFwdGVyIFJlcXVlc3QgSW5wdXQgLS0tIiksdGhpcy5sb2coYSksZCl7Zm9yKGxldCBoIG9mIE9iamVjdC5rZXlz'@;
put 'KGQpKXRoaXMubG9nKGgsZFtoXSk7dGhpcy5sb2coIi0tLS0tLSIpfWVsc2UgdGhpcy5sb2coIm5vIGRhdGEgc2VudCIpfWluamVjdFNhc1NlcnZpY2UoKXtpZighdGhpcy5zYXNqc0NvbmZpZyl7Y29uc3QgYT10aGlzLmluamVjdG9yLmdldCh0bCk7dGhpcy5zYXNqc0NvbmZpZz1hLmdldFNh'@;
put 'c2pzQ29uZmlnKCl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKERzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29u'@;
put 'c3QgTmNlPWZ1bmN0aW9uIGNBZShjLGwpe3JldHVybiBjPT09bHx8YyE9YyYmbCE9bH0sUVI9ZnVuY3Rpb24gdUFlKGMsbCl7Zm9yKHZhciBhPWMubGVuZ3RoO2EtLTspaWYoTmNlKGNbYV1bMF0sbCkpcmV0dXJuIGE7cmV0dXJuLTF9O3ZhciBoQWU9QXJyYXkucHJvdG90eXBlLnNwbGljZTtm'@;
put 'dW5jdGlvbiBteShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX1teS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gc0FlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0s'@;
put 'bXkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBmQWUoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPVFSKGwsYyk7cmV0dXJuIShhPDB8fChhPT1sLmxlbmd0aC0xP2wucG9wKCk6aEFlLmNhbGwobCxhLDEpLC0tdGhpcy5zaXplLDApKX0sbXkucHJvdG90eXBlLmdldD1mdW5jdGlvbiBnQWUo'@;
put 'Yyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPVFSKGwsYyk7cmV0dXJuIGE8MD92b2lkIDA6bFthXVsxXX0sbXkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiB2QWUoYyl7cmV0dXJuIFFSKHRoaXMuX19kYXRhX18sYyk+LTF9LG15LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24geUFlKGMsbCl7dmFyIGE9'@;
put 'dGhpcy5fX2RhdGFfXyxkPVFSKGEsYyk7cmV0dXJuIGQ8MD8oKyt0aGlzLnNpemUsYS5wdXNoKFtjLGxdKSk6YVtkXVsxXT1sLHRoaXN9O2NvbnN0IGVMPW15LFZjZT0ib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsJiZnbG9iYWwuT2JqZWN0PT09T2JqZWN0JiZnbG9iYWw7dmFyIERB'@;
put 'ZT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmO2NvbnN0IHZwPVZjZXx8REFlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGNtPXZwLlN5bWJvbDt2YXIgQmNlPU9iamVjdC5wcm90b3R5cGUsTEFlPUJjZS5oYXNPd25Qcm9wZXJ0eSxP'@;
put 'QWU9QmNlLnRvU3RyaW5nLG94PWNtP2NtLnRvU3RyaW5nVGFnOnZvaWQgMDt2YXIgTkFlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dmFyIGpjZT1jbT9jbS50b1N0cmluZ1RhZzp2b2lkIDA7Y29uc3Qgdnk9ZnVuY3Rpb24gVUFlKGMpe3JldHVybiBudWxsPT1jP3ZvaWQgMD09PWM/Iltv'@;
put 'YmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOmpjZSYmamNlIGluIE9iamVjdChjKT9mdW5jdGlvbiBQQWUoYyl7dmFyIGw9TEFlLmNhbGwoYyxveCksYT1jW294XTt0cnl7Y1tveF09dm9pZCAwO3ZhciBkPSEwfWNhdGNoe312YXIgaD1PQWUuY2FsbChjKTtyZXR1cm4gZCYmKGw/'@;
put 'Y1tveF09YTpkZWxldGUgY1tveF0pLGh9KGMpOmZ1bmN0aW9uIFZBZShjKXtyZXR1cm4gTkFlLmNhbGwoYyl9KGMpfSxheD1mdW5jdGlvbiBaQWUoYyl7dmFyIGw9dHlwZW9mIGM7cmV0dXJuIG51bGwhPWMmJigib2JqZWN0Ij09bHx8ImZ1bmN0aW9uIj09bCl9LHpjZT1mdW5jdGlvbiBLQWUo'@;
put 'Yyl7aWYoIWF4KGMpKXJldHVybiExO3ZhciBsPXZ5KGMpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09bHx8IltvYmplY3QgUHJveHldIj09bH0sRVc9dnBbIl9fY29yZS1qc19z'@;
put 'aGFyZWRfXyJdO3ZhciBVY2U9ZnVuY3Rpb24oKXt2YXIgYz0vW14uXSskLy5leGVjKEVXJiZFVy5rZXlzJiZFVy5rZXlzLklFX1BST1RPfHwiIik7cmV0dXJuIGM/IlN5bWJvbChzcmMpXzEuIitjOiIifSgpO3ZhciBla2U9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO2NvbnN0IGU3PWZ1'@;
put 'bmN0aW9uIHRrZShjKXtpZihudWxsIT1jKXt0cnl7cmV0dXJuIGVrZS5jYWxsKGMpfWNhdGNoe310cnl7cmV0dXJuIGMrIiJ9Y2F0Y2h7fX1yZXR1cm4iIn07dmFyIHJrZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxsa2U9UmVnRXhwKCJeIitGdW5jdGlvbi5wcm90b3R5cGUudG9T'@;
put 'dHJpbmcuY2FsbChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KS5yZXBsYWNlKC9bXFxeJC4qKz8oKVtcXXt9fF0vZywiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csIiQxLio/IikrIiQiKTtjb25z'@;
put 'dCB1a2U9ZnVuY3Rpb24gY2tlKGMpe3JldHVybiEoIWF4KGMpfHxmdW5jdGlvbiBYQWUoYyl7cmV0dXJuISFVY2UmJlVjZSBpbiBjfShjKSkmJih6Y2UoYyk/bGtlOnJrZSkudGVzdChlNyhjKSl9LHQ3PWZ1bmN0aW9uIGZrZShjLGwpe3ZhciBhPWZ1bmN0aW9uIGRrZShjLGwpe3JldHVybiBj'@;
put 'Py5bbF19KGMsbCk7cmV0dXJuIHVrZShhKT9hOnZvaWQgMH0sc3g9dDcodnAsIk1hcCIpLGx4PXQ3KE9iamVjdCwiY3JlYXRlIik7dmFyIENrZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBFa2U9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBi'@;
put 'eShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX1ieS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gbWtlKCl7dGhpcy5fX2RhdGFfXz1seD9seChudWxsKTp7fSx0aGlzLnNpemU9'@;
put 'MH0sYnkucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBia2UoYyl7dmFyIGw9dGhpcy5oYXMoYykmJmRlbGV0ZSB0aGlzLl9fZGF0YV9fW2NdO3JldHVybiB0aGlzLnNpemUtPWw/MTowLGx9LGJ5LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gU2tlKGMpe3ZhciBsPXRoaXMuX19kYXRhX187aWYo'@;
put 'bHgpe3ZhciBhPWxbY107cmV0dXJuIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iPT09YT92b2lkIDA6YX1yZXR1cm4gQ2tlLmNhbGwobCxjKT9sW2NdOnZvaWQgMH0sYnkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBUa2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXztyZXR1cm4gbHg/dm9pZCAw'@;
put 'IT09bFtjXTpFa2UuY2FsbChsLGMpfSxieS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIERrZShjLGwpe3ZhciBhPXRoaXMuX19kYXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoYyk/MDoxLGFbY109bHgmJnZvaWQgMD09PWw/Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOmwsdGhp'@;
put 'c307Y29uc3QgWmNlPWJ5LHRMPWZ1bmN0aW9uIEZrZShjLGwpe3ZhciBhPWMuX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIE9rZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4ic3RyaW5nIj09bHx8Im51bWJlciI9PWx8fCJzeW1ib2wiPT1sfHwiYm9vbGVhbiI9PWw/Il9fcHJvdG9fXyIhPT1j'@;
put 'Om51bGw9PT1jfShsKT9hWyJzdHJpbmciPT10eXBlb2YgbD8ic3RyaW5nIjoiaGFzaCJdOmEubWFwfTtmdW5jdGlvbiB5eShjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX15eS5w'@;
put 'cm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gUmtlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgWmNlLG1hcDpuZXcoc3h8fGVMKSxzdHJpbmc6bmV3IFpjZX19LHl5LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gSGtlKGMpe3ZhciBsPXRMKHRoaXMsYykuZGVsZXRlKGMp'@;
put 'O3JldHVybiB0aGlzLnNpemUtPWw/MTowLGx9LHl5LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gVmtlKGMpe3JldHVybiB0TCh0aGlzLGMpLmdldChjKX0seXkucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBqa2UoYyl7cmV0dXJuIHRMKHRoaXMsYykuaGFzKGMpfSx5eS5wcm90b3R5cGUuc2V0PWZ1'@;
put 'bmN0aW9uIFVrZShjLGwpe3ZhciBhPXRMKHRoaXMsYyksZD1hLnNpemU7cmV0dXJuIGEuc2V0KGMsbCksdGhpcy5zaXplKz1hLnNpemU9PWQ/MDoxLHRoaXN9O2NvbnN0IFRXPXl5O2Z1bmN0aW9uIF95KGMpe3ZhciBsPXRoaXMuX19kYXRhX189bmV3IGVMKGMpO3RoaXMuc2l6ZT1sLnNpemV9'@;
put 'X3kucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHdBZSgpe3RoaXMuX19kYXRhX189bmV3IGVMLHRoaXMuc2l6ZT0wfSxfeS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIFNBZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9bC5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZT1sLnNpemUsYX0s'@;
put 'X3kucHJvdG90eXBlLmdldD1mdW5jdGlvbiB4QWUoYyl7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGMpfSxfeS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFRBZShjKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoYyl9LF95LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gWWtlKGMsbCl7dmFyIGE9'@;
put 'dGhpcy5fX2RhdGFfXztpZihhIGluc3RhbmNlb2YgZUwpe3ZhciBkPWEuX19kYXRhX187aWYoIXN4fHxkLmxlbmd0aDwxOTkpcmV0dXJuIGQucHVzaChbYyxsXSksdGhpcy5zaXplPSsrYS5zaXplLHRoaXM7YT10aGlzLl9fZGF0YV9fPW5ldyBUVyhkKX1yZXR1cm4gYS5zZXQoYyxsKSx0aGlz'@;
put 'LnNpemU9YS5zaXplLHRoaXN9O2NvbnN0ICRrZT1feTt2YXIgWGtlPWZ1bmN0aW9uKCl7dHJ5e3ZhciBjPXQ3KE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gYyh7fSwiIix7fSksY31jYXRjaHt9fSgpO2NvbnN0IFdjZT1Ya2UsWWNlPWZ1bmN0aW9uIEprZShjLGwsYSl7Il9fcHJv'@;
put 'dG9fXyI9PWwmJldjZT9XY2UoYyxsLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTphLHdyaXRhYmxlOiEwfSk6Y1tsXT1hfTt2YXIgZURlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgR2NlPWZ1bmN0aW9uIHREZShjLGwsYSl7dmFyIGQ9Y1tsXTso'@;
put 'IWVEZS5jYWxsKGMsbCl8fCFOY2UoZCxhKXx8dm9pZCAwPT09YSYmIShsIGluIGMpKSYmWWNlKGMsbCxhKX0sbkw9ZnVuY3Rpb24gbkRlKGMsbCxhLGQpe3ZhciBoPSFhO2F8fChhPXt9KTtmb3IodmFyIGY9LTEsdj1sLmxlbmd0aDsrK2Y8djspe3ZhciBNPWxbZl0sRD1kP2QoYVtNXSxjW01d'@;
put 'LE0sYSxjKTp2b2lkIDA7dm9pZCAwPT09RCYmKEQ9Y1tNXSksaD9ZY2UoYSxNLEQpOkdjZShhLE0sRCl9cmV0dXJuIGF9LHd5PWZ1bmN0aW9uIG9EZShjKXtyZXR1cm4gbnVsbCE9YyYmIm9iamVjdCI9PXR5cGVvZiBjfSwkY2U9ZnVuY3Rpb24gc0RlKGMpe3JldHVybiB3eShjKSYmIltvYmpl'@;
put 'Y3QgQXJndW1lbnRzXSI9PXZ5KGMpfTt2YXIgS2NlPU9iamVjdC5wcm90b3R5cGUsbERlPUtjZS5oYXNPd25Qcm9wZXJ0eSxjRGU9S2NlLnByb3BlcnR5SXNFbnVtZXJhYmxlLHVEZT0kY2UoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT8kY2U6ZnVuY3Rpb24oYyl7cmV0dXJuIHd5'@;
put 'KGMpJiZsRGUuY2FsbChjLCJjYWxsZWUiKSYmIWNEZS5jYWxsKGMsImNhbGxlZSIpfTtjb25zdCBkRGU9dURlLEN5PUFycmF5LmlzQXJyYXk7dmFyIHFjZT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFhjZT1xY2UmJiJvYmpl'@;
put 'Y3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxKY2U9WGNlJiZYY2UuZXhwb3J0cz09PXFjZT92cC5CdWZmZXI6dm9pZCAwO2NvbnN0IFFjZT0oSmNlP0pjZS5pc0J1ZmZlcjp2b2lkIDApfHxmdW5jdGlvbiBmRGUoKXtyZXR1cm4hMX07dmFyIHlE'@;
put 'ZT0vXig/OjB8WzEtOV1cZCopJC87Y29uc3Qgd0RlPWZ1bmN0aW9uIF9EZShjLGwpe3ZhciBhPXR5cGVvZiBjO3JldHVybiEhKGw9bD8/OTAwNzE5OTI1NDc0MDk5MSkmJigibnVtYmVyIj09YXx8InN5bWJvbCIhPWEmJnlEZS50ZXN0KGMpKSYmYz4tMSYmYyUxPT0wJiZjPGx9LGV1ZT1mdW5j'@;
put 'dGlvbiBTRGUoYyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBjJiZjPi0xJiZjJTE9PTAmJmM8PTkwMDcxOTkyNTQ3NDA5OTF9O3ZhciBiYz17fTtiY1siW29iamVjdCBGbG9hdDMyQXJyYXldIl09YmNbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPWJjWyJbb2JqZWN0IEludDhBcnJheV0iXT1i'@;
put 'Y1siW29iamVjdCBJbnQxNkFycmF5XSJdPWJjWyJbb2JqZWN0IEludDMyQXJyYXldIl09YmNbIltvYmplY3QgVWludDhBcnJheV0iXT1iY1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1iY1siW29iamVjdCBVaW50MTZBcnJheV0iXT1iY1siW29iamVjdCBVaW50MzJBcnJheV0iXT0h'@;
put 'MCxiY1siW29iamVjdCBBcmd1bWVudHNdIl09YmNbIltvYmplY3QgQXJyYXldIl09YmNbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09YmNbIltvYmplY3QgQm9vbGVhbl0iXT1iY1siW29iamVjdCBEYXRhVmlld10iXT1iY1siW29iamVjdCBEYXRlXSJdPWJjWyJbb2JqZWN0IEVycm9yXSJdPWJj'@;
put 'WyJbb2JqZWN0IEZ1bmN0aW9uXSJdPWJjWyJbb2JqZWN0IE1hcF0iXT1iY1siW29iamVjdCBOdW1iZXJdIl09YmNbIltvYmplY3QgT2JqZWN0XSJdPWJjWyJbb2JqZWN0IFJlZ0V4cF0iXT1iY1siW29iamVjdCBTZXRdIl09YmNbIltvYmplY3QgU3RyaW5nXSJdPWJjWyJbb2JqZWN0IFdlYWtN'@;
put 'YXBdIl09ITE7Y29uc3QgQVc9ZnVuY3Rpb24gcURlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKX19O3ZhciB0dWU9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxjeD10dWUmJiJvYmplY3QiPT10eXBlb2YgbW9k'@;
put 'dWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxrVz1jeCYmY3guZXhwb3J0cz09PXR1ZSYmVmNlLnByb2Nlc3M7Y29uc3QgU3k9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGN4JiZjeC5yZXF1aXJlJiZjeC5yZXF1aXJlKCJ1dGlsIikudHlwZXN8fGtXJiZrVy5iaW5kaW5nJiZr'@;
put 'Vy5iaW5kaW5nKCJ1dGlsIil9Y2F0Y2h7fX0oKTt2YXIgbnVlPVN5JiZTeS5pc1R5cGVkQXJyYXk7Y29uc3QgZUllPW51ZT9BVyhudWUpOmZ1bmN0aW9uICREZShjKXtyZXR1cm4gd3koYykmJmV1ZShjLmxlbmd0aCkmJiEhYmNbdnkoYyldfTt2YXIgbkllPU9iamVjdC5wcm90b3R5cGUuaGFz'@;
put 'T3duUHJvcGVydHk7Y29uc3QgcnVlPWZ1bmN0aW9uIHJJZShjLGwpe3ZhciBhPUN5KGMpLGQ9IWEmJmREZShjKSxoPSFhJiYhZCYmUWNlKGMpLGY9IWEmJiFkJiYhaCYmZUllKGMpLHY9YXx8ZHx8aHx8ZixNPXY/ZnVuY3Rpb24gckRlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9QXJyYXkoYyk7Kyth'@;
put 'PGM7KWRbYV09bChhKTtyZXR1cm4gZH0oYy5sZW5ndGgsU3RyaW5nKTpbXSxEPU0ubGVuZ3RoO2Zvcih2YXIgWiBpbiBjKShsfHxuSWUuY2FsbChjLFopKSYmKCF2fHwhKCJsZW5ndGgiPT1afHxoJiYoIm9mZnNldCI9PVp8fCJwYXJlbnQiPT1aKXx8ZiYmKCJidWZmZXIiPT1afHwiYnl0ZUxl'@;
put 'bmd0aCI9PVp8fCJieXRlT2Zmc2V0Ij09Wil8fHdEZShaLEQpKSkmJk0ucHVzaChaKTtyZXR1cm4gTX07dmFyIGlJZT1PYmplY3QucHJvdG90eXBlO2NvbnN0IERXPWZ1bmN0aW9uIG9JZShjKXt2YXIgbD1jJiZjLmNvbnN0cnVjdG9yO3JldHVybiBjPT09KCJmdW5jdGlvbiI9PXR5cGVvZiBs'@;
put 'JiZsLnByb3RvdHlwZXx8aUllKX0saXVlPWZ1bmN0aW9uIGFJZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYyhsKGEpKX19LGxJZT1pdWUoT2JqZWN0LmtleXMsT2JqZWN0KTt2YXIgdUllPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3Qgb3VlPWZ1bmN0aW9u'@;
put 'IGZJZShjKXtyZXR1cm4gbnVsbCE9YyYmZXVlKGMubGVuZ3RoKSYmIXpjZShjKX0sSVc9ZnVuY3Rpb24gcEllKGMpe3JldHVybiBvdWUoYyk/cnVlKGMpOmZ1bmN0aW9uIGRJZShjKXtpZighRFcoYykpcmV0dXJuIGxJZShjKTt2YXIgbD1bXTtmb3IodmFyIGEgaW4gT2JqZWN0KGMpKXVJZS5j'@;
put 'YWxsKGMsYSkmJiJjb25zdHJ1Y3RvciIhPWEmJmwucHVzaChhKTtyZXR1cm4gbH0oYyl9O3ZhciBfSWU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBDSWU9ZnVuY3Rpb24gd0llKGMpe2lmKCFheChjKSlyZXR1cm4gZnVuY3Rpb24gdkllKGMpe3ZhciBsPVtdO2lmKG51'@;
put 'bGwhPWMpZm9yKHZhciBhIGluIE9iamVjdChjKSlsLnB1c2goYSk7cmV0dXJuIGx9KGMpO3ZhciBsPURXKGMpLGE9W107Zm9yKHZhciBkIGluIGMpImNvbnN0cnVjdG9yIj09ZCYmKGx8fCFfSWUuY2FsbChjLGQpKXx8YS5wdXNoKGQpO3JldHVybiBhfSxSVz1mdW5jdGlvbiBTSWUoYyl7cmV0'@;
put 'dXJuIG91ZShjKT9ydWUoYywhMCk6Q0llKGMpfTt2YXIgYXVlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsc3VlPWF1ZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxl'@;
put 'LGx1ZT1zdWUmJnN1ZS5leHBvcnRzPT09YXVlP3ZwLkJ1ZmZlcjp2b2lkIDAsY3VlPWx1ZT9sdWUuYWxsb2NVbnNhZmU6dm9pZCAwO2NvbnN0IHV1ZT1mdW5jdGlvbiBMSWUoKXtyZXR1cm5bXX07dmFyIFBJZT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLGR1ZT1PYmpl'@;
put 'Y3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLEZJZT1kdWU/ZnVuY3Rpb24oYyl7cmV0dXJuIG51bGw9PWM/W106KGM9T2JqZWN0KGMpLGZ1bmN0aW9uIElJZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aCxoPTAsZj1bXTsrK2E8ZDspe3ZhciB2PWNbYV07bCh2LGEsYykm'@;
put 'JihmW2grK109dil9cmV0dXJuIGZ9KGR1ZShjKSxmdW5jdGlvbihsKXtyZXR1cm4gUEllLmNhbGwoYyxsKX0pKX06dXVlO2NvbnN0IExXPUZJZSxodWU9ZnVuY3Rpb24gVkllKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bC5sZW5ndGgsaD1jLmxlbmd0aDsrK2E8ZDspY1toK2FdPWxbYV07cmV0dXJu'@;
put 'IGN9LGZ1ZT1pdWUoT2JqZWN0LmdldFByb3RvdHlwZU9mLE9iamVjdCk7dmFyIHpJZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGMpe2Zvcih2YXIgbD1bXTtjOylodWUobCxMVyhjKSksYz1mdWUoYyk7cmV0dXJuIGx9OnV1ZTtjb25zdCBwdWU9ekllLGd1ZT1mdW5j'@;
put 'dGlvbiBXSWUoYyxsLGEpe3ZhciBkPWwoYyk7cmV0dXJuIEN5KGMpP2Q6aHVlKGQsYShjKSl9LEdJZT1mdW5jdGlvbiBZSWUoYyl7cmV0dXJuIGd1ZShjLElXLExXKX0sS0llPWZ1bmN0aW9uICRJZShjKXtyZXR1cm4gZ3VlKGMsUlcscHVlKX0sT1c9dDcodnAsIkRhdGFWaWV3IiksUFc9dDco'@;
put 'dnAsIlByb21pc2UiKSxGVz10Nyh2cCwiU2V0IiksSFc9dDcodnAsIldlYWtNYXAiKTt2YXIgbXVlPSJbb2JqZWN0IE1hcF0iLHZ1ZT0iW29iamVjdCBQcm9taXNlXSIsYnVlPSJbb2JqZWN0IFNldF0iLHl1ZT0iW29iamVjdCBXZWFrTWFwXSIsX3VlPSJbb2JqZWN0IERhdGFWaWV3XSIsdFJl'@;
put 'PWU3KE9XKSxuUmU9ZTcoc3gpLHJSZT1lNyhQVyksaVJlPWU3KEZXKSxvUmU9ZTcoSFcpLG43PXZ5OyhPVyYmbjcobmV3IE9XKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1fdWV8fHN4JiZuNyhuZXcgc3gpIT1tdWV8fFBXJiZuNyhQVy5yZXNvbHZlKCkpIT12dWV8fEZXJiZuNyhuZXcgRlcpIT1i'@;
put 'dWV8fEhXJiZuNyhuZXcgSFcpIT15dWUpJiYobjc9ZnVuY3Rpb24oYyl7dmFyIGw9dnkoYyksYT0iW29iamVjdCBPYmplY3RdIj09bD9jLmNvbnN0cnVjdG9yOnZvaWQgMCxkPWE/ZTcoYSk6IiI7aWYoZClzd2l0Y2goZCl7Y2FzZSB0UmU6cmV0dXJuIF91ZTtjYXNlIG5SZTpyZXR1cm4gbXVl'@;
put 'O2Nhc2UgclJlOnJldHVybiB2dWU7Y2FzZSBpUmU6cmV0dXJuIGJ1ZTtjYXNlIG9SZTpyZXR1cm4geXVlfXJldHVybiBsfSk7Y29uc3QgTlc9bjc7dmFyIHNSZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IHd1ZT12cC5VaW50OEFycmF5LFZXPWZ1bmN0aW9uIGRSZShj'@;
put 'KXt2YXIgbD1uZXcgYy5jb25zdHJ1Y3RvcihjLmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgd3VlKGwpLnNldChuZXcgd3VlKGMpKSxsfTt2YXIgcFJlPS9cdyokLzt2YXIgQ3VlPWNtP2NtLnByb3RvdHlwZTp2b2lkIDAsU3VlPUN1ZT9DdWUudmFsdWVPZjp2b2lkIDA7Y29uc3QgalJlPWZ1bmN0'@;
put 'aW9uIEJSZShjLGwsYSl7dmFyIGQ9Yy5jb25zdHJ1Y3Rvcjtzd2l0Y2gobCl7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuIFZXKGMpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpyZXR1cm4gbmV3IGQoK2MpO2Nhc2UiW29iamVjdCBEYXRhVmll'@;
put 'd10iOnJldHVybiBmdW5jdGlvbiBoUmUoYyxsKXt2YXIgYT1sP1ZXKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQsYy5ieXRlTGVuZ3RoKX0oYyxhKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0'@;
put 'NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2'@;
put 'QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gZnVuY3Rpb24geVJlKGMsbCl7dmFyIGE9bD9WVyhjLmJ1ZmZlcik6Yy5idWZmZXI7cmV0dXJuIG5ldyBjLmNvbnN0cnVjdG9yKGEsYy5ieXRlT2Zmc2V0LGMubGVuZ3RoKX0oYyxhKTtjYXNlIltvYmplY3QgTWFwXSI6'@;
put 'Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgZDtjYXNlIltvYmplY3QgTnVtYmVyXSI6Y2FzZSJbb2JqZWN0IFN0cmluZ10iOnJldHVybiBuZXcgZChjKTtjYXNlIltvYmplY3QgUmVnRXhwXSI6cmV0dXJuIGZ1bmN0aW9uIGdSZShjKXt2YXIgbD1uZXcgYy5jb25zdHJ1Y3RvcihjLnNv'@;
put 'dXJjZSxwUmUuZXhlYyhjKSk7cmV0dXJuIGwubGFzdEluZGV4PWMubGFzdEluZGV4LGx9KGMpO2Nhc2UiW29iamVjdCBTeW1ib2xdIjpyZXR1cm4gZnVuY3Rpb24gdlJlKGMpe3JldHVybiBTdWU/T2JqZWN0KFN1ZS5jYWxsKGMpKTp7fX0oYyl9fTt2YXIgTXVlPU9iamVjdC5jcmVhdGUselJl'@;
put 'PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYygpe31yZXR1cm4gZnVuY3Rpb24obCl7aWYoIWF4KGwpKXJldHVybnt9O2lmKE11ZSlyZXR1cm4gTXVlKGwpO2MucHJvdG90eXBlPWw7dmFyIGE9bmV3IGM7cmV0dXJuIGMucHJvdG90eXBlPXZvaWQgMCxhfX0oKTtjb25zdCBVUmU9elJlO3ZhciB4dWU9'@;
put 'U3kmJlN5LmlzTWFwO2NvbnN0IHFSZT14dWU/QVcoeHVlKTpmdW5jdGlvbiBHUmUoYyl7cmV0dXJuIHd5KGMpJiYiW29iamVjdCBNYXBdIj09TlcoYyl9O3ZhciBFdWU9U3kmJlN5LmlzU2V0O2NvbnN0IHRMZT1FdWU/QVcoRXVlKTpmdW5jdGlvbiBKUmUoYyl7cmV0dXJuIHd5KGMpJiYiW29i'@;
put 'amVjdCBTZXRdIj09TlcoYyl9O3ZhciBUdWU9IltvYmplY3QgQXJndW1lbnRzXSIsQXVlPSJbb2JqZWN0IEZ1bmN0aW9uXSIsa3VlPSJbb2JqZWN0IE9iamVjdF0iLGFjPXt9O2FjW1R1ZV09YWNbIltvYmplY3QgQXJyYXldIl09YWNbIltvYmplY3QgQXJyYXlCdWZmZXJdIl09YWNbIltvYmpl'@;
put 'Y3QgRGF0YVZpZXddIl09YWNbIltvYmplY3QgQm9vbGVhbl0iXT1hY1siW29iamVjdCBEYXRlXSJdPWFjWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1hY1siW29iamVjdCBGbG9hdDY0QXJyYXldIl09YWNbIltvYmplY3QgSW50OEFycmF5XSJdPWFjWyJbb2JqZWN0IEludDE2QXJyYXldIl09'@;
put 'YWNbIltvYmplY3QgSW50MzJBcnJheV0iXT1hY1siW29iamVjdCBNYXBdIl09YWNbIltvYmplY3QgTnVtYmVyXSJdPWFjW2t1ZV09YWNbIltvYmplY3QgUmVnRXhwXSJdPWFjWyJbb2JqZWN0IFNldF0iXT1hY1siW29iamVjdCBTdHJpbmddIl09YWNbIltvYmplY3QgU3ltYm9sXSJdPWFjWyJb'@;
put 'b2JqZWN0IFVpbnQ4QXJyYXldIl09YWNbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09YWNbIltvYmplY3QgVWludDE2QXJyYXldIl09YWNbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsYWNbIltvYmplY3QgRXJyb3JdIl09YWNbQXVlXT1hY1siW29iamVjdCBXZWFrTWFwXSJdPSEx'@;
put 'O2NvbnN0IEFMZT1mdW5jdGlvbiByTChjLGwsYSxkLGgsZil7dmFyIHYsTT0xJmwsRD0yJmwsWj00Jmw7aWYoYSYmKHY9aD9hKGMsZCxoLGYpOmEoYykpLHZvaWQgMCE9PXYpcmV0dXJuIHY7aWYoIWF4KGMpKXJldHVybiBjO3ZhciBuZT1DeShjKTtpZihuZSl7aWYodj1mdW5jdGlvbiBsUmUo'@;
put 'Yyl7dmFyIGw9Yy5sZW5ndGgsYT1uZXcgYy5jb25zdHJ1Y3RvcihsKTtyZXR1cm4gbCYmInN0cmluZyI9PXR5cGVvZiBjWzBdJiZzUmUuY2FsbChjLCJpbmRleCIpJiYoYS5pbmRleD1jLmluZGV4LGEuaW5wdXQ9Yy5pbnB1dCksYX0oYyksIU0pcmV0dXJuIGZ1bmN0aW9uIGtJZShjLGwpe3Zh'@;
put 'ciBhPS0xLGQ9Yy5sZW5ndGg7Zm9yKGx8fChsPUFycmF5KGQpKTsrK2E8ZDspbFthXT1jW2FdO3JldHVybiBsfShjLHYpfWVsc2V7dmFyIGNlPU5XKGMpLGJlPWNlPT1BdWV8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWNlO2lmKFFjZShjKSlyZXR1cm4gZnVuY3Rpb24gVEllKGMs'@;
put 'bCl7aWYobClyZXR1cm4gYy5zbGljZSgpO3ZhciBhPWMubGVuZ3RoLGQ9Y3VlP2N1ZShhKTpuZXcgYy5jb25zdHJ1Y3RvcihhKTtyZXR1cm4gYy5jb3B5KGQpLGR9KGMsTSk7aWYoY2U9PWt1ZXx8Y2U9PVR1ZXx8YmUmJiFoKXtpZih2PUR8fGJlP3t9OmZ1bmN0aW9uIFpSZShjKXtyZXR1cm4i'@;
put 'ZnVuY3Rpb24iIT10eXBlb2YgYy5jb25zdHJ1Y3Rvcnx8RFcoYyk/e306VVJlKGZ1ZShjKSl9KGMpLCFNKXJldHVybiBEP2Z1bmN0aW9uIFVJZShjLGwpe3JldHVybiBuTChjLHB1ZShjKSxsKX0oYyxmdW5jdGlvbiBNSWUoYyxsKXtyZXR1cm4gYyYmbkwobCxSVyhsKSxjKX0odixjKSk6ZnVu'@;
put 'Y3Rpb24gSEllKGMsbCl7cmV0dXJuIG5MKGMsTFcoYyksbCl9KGMsZnVuY3Rpb24gZ0llKGMsbCl7cmV0dXJuIGMmJm5MKGwsSVcobCksYyl9KHYsYykpfWVsc2V7aWYoIWFjW2NlXSlyZXR1cm4gaD9jOnt9O3Y9alJlKGMsY2UsTSl9fWZ8fChmPW5ldyAka2UpO3ZhciBFZT1mLmdldChjKTtp'@;
put 'ZihFZSlyZXR1cm4gRWU7Zi5zZXQoYyx2KSx0TGUoYyk/Yy5mb3JFYWNoKGZ1bmN0aW9uKHJ0KXt2LmFkZChyTChydCxsLGEscnQsYyxmKSl9KTpxUmUoYykmJmMuZm9yRWFjaChmdW5jdGlvbihydCxwdCl7di5zZXQocHQsckwocnQsbCxhLHB0LGMsZikpfSk7dmFyIHFlPW5lP3ZvaWQgMDoo'@;
put 'Wj9EP0tJZTpHSWU6RD9SVzpJVykoYyk7cmV0dXJuIGZ1bmN0aW9uIEtrZShjLGwpe2Zvcih2YXIgYT0tMSxkPW51bGw9PWM/MDpjLmxlbmd0aDsrK2E8ZCYmITEhPT1sKGNbYV0sYSxjKTspO30ocWV8fGMsZnVuY3Rpb24ocnQscHQpe3FlJiYocnQ9Y1twdD1ydF0pLEdjZSh2LHB0LHJMKHJ0'@;
put 'LGwsYSxwdCxjLGYpKX0pLHZ9LGlMPWZ1bmN0aW9uIElMZShjKXtyZXR1cm4gQUxlKGMsNSl9O3ZhciBSTGU9Xyg3ODg1NSk7bGV0IFl1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnNob3duTGlicmFyaWVzPTUwLHRoaXMubG9hZE1vcmVDb3VudD01MCx0aGlzLmlzTWljcm9z'@;
put 'b2Z0PSExLHRoaXMuaXNNaWNyb3NvZnQ9dGhpcy5pc0lFb3JFREdFKCksY29uc29sZS5sb2coIklzIElFIG9yIEVkZ2U/Iix0aGlzLmlzTWljcm9zb2Z0KX1jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKGEsZD0iZGF5cyIpe2xldCBoLGY9MDtoPWEgaW5zdGFuY2VvZiBEYXRlP2E6bmV3IERhdGUo'@;
put 'YSksZj1uZXcgRGF0ZShEYXRlLlVUQyhoLmdldEZ1bGxZZWFyKCksaC5nZXRNb250aCgpLGguZ2V0RGF0ZSgpLGguZ2V0SG91cnMoKSxoLmdldE1pbnV0ZXMoKSxoLmdldFNlY29uZHMoKSkpLnZhbHVlT2YoKTtjb25zdCBEPWYrMzE1NjE5MmU1O3N3aXRjaChkKXtjYXNlImRheXMiOntsZXQg'@;
put 'Wj1ELzg2NGU1O3JldHVybiBaPU1hdGguYWJzKFopLFo9TWF0aC5mbG9vcihaKSxafWNhc2Uic2Vjb25kcyI6cmV0dXJuIEQvMWUzfXJldHVybiAwfWNvbnZlcnRTYXNEYXlzVG9Kc0RhdGUoYSxkPSJkYXlzIil7aWYoIm51bWJlciIhPXR5cGVvZiBhJiYoYT1wYXJzZUZsb2F0KGEpKSwic2Vj'@;
put 'b25kcyI9PT1kKXtsZXQgTT0xZTMqYS0zMTU2MTkyZTU7cmV0dXJuIE0rPTYwKm5ldyBEYXRlKE0pLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzLG5ldyBEYXRlKE0pfXJldHVybiBuZXcgRGF0ZSg4NjRlNSphLTMxNTYxOTJlNSl9dHJlZU9uRmlsdGVyKGEsZCl7bGV0IGg9YS5zZWFyY2hTdHJp'@;
put 'bmc/YS5zZWFyY2hTdHJpbmc6IiIsZj1kLnNwbGl0KCIuIilbMF0sdj1kLnNwbGl0KCIuIilbMV0sTT1mKyJBbGwiO2FbZl0mJihhW01dfHwoYVtNXT10aGlzLmRlZXBDbG9uZShhW2ZdKSksYVtmXT10aGlzLmRlZXBDbG9uZShhW01dKSxoLmxlbmd0aD4wJiYoYVtmXT1hW2ZdLmZpbHRlcih2'@;
put 'P0Q9PkRbdl0udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhoLnRvTG93ZXJDYXNlKCkpOkQ9PkQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhoLnRvTG93ZXJDYXNlKCkpKSkpfWxpYnJhcnlPbkZpbHRlcihhLGQsaCl7ZC5sZW5ndGg+MD9hLmZvckVhY2goZj0+e2ZbaF0udG9Mb3dlckNhc2UoKS5p'@;
put 'bmNsdWRlcyhkLnRvTG93ZXJDYXNlKCkpPyhmLmhpZGRlbj0hMSxmLmluRm9yZWdyb3VuZD0hMCk6KGYuaGlkZGVuPSEwLGYuaW5Gb3JlZ3JvdW5kPSExKX0pOih0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSksdGhpcy5kaXNwbGF5TGlicmFyaWVzKGEpKX1kaXNwbGF5TGlicmFyaWVzKGEsZCl7'@;
put 'ZD90aGlzLnNob3duTGlicmFyaWVzKz10aGlzLmxvYWRNb3JlQ291bnQ6KHRoaXMuc2hvd25MaWJyYXJpZXM9NTAsdGhpcy5yZXNldExpYnJhcnlGb3JlZ3JvdW5kKGEpKTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoJiZoIT09dGhpcy5zaG93bkxpYnJhcmllcztoKyspYVtoXS5pbkZvcmVncm91'@;
put 'bmQ9ITB9cmVzZXRMaWJyYXJ5Rm9yZWdyb3VuZChhKXtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylhW2RdLmluRm9yZWdyb3VuZD0hMX1tZXRhT2JqZWN0T25GaWx0ZXIoYSxkLGgpe2QubGVuZ3RoPjA/KHRoaXMucmVzZXRBcnJheUZpbHRlcihhKSxhLmZvckVhY2goZj0+e2ZbaF0udG9M'@;
put 'b3dlckNhc2UoKS5pbmNsdWRlcyhkLnRvTG93ZXJDYXNlKCkpfHwoZi5oaWRkZW49ITApfSkpOnRoaXMucmVzZXRBcnJheUZpbHRlcihhKX1yZXNldEFycmF5RmlsdGVyKGEpe2EuZm9yRWFjaChkPT57ZC5oaWRkZW49ITEsZC5pbkZvcmVncm91bmQmJmRlbGV0ZSBkLmluRm9yZWdyb3VuZH0p'@;
put 'fWlzSUVvckVER0UoKXt2YXIgYT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtyZXR1cm4gYS5pbmRleE9mKCJNU0lFICIpPjB8fChhLmluZGV4T2YoIlRyaWRlbnQvIik+MD8oYS5pbmRleE9mKCJydjoiKSwhMCk6YS5pbmRleE9mKCJFZGdlLyIpPjApfWNvbnZlcnRPYmplY3RzVG9BcnJh'@;
put 'eShhLGQ9ITEpe3JldHVybiBkJiYoYT10aGlzLmRlZXBDbG9uZShhKSksYS5tYXAoaD0+T2JqZWN0LmtleXMoaCkubWFwKGY9PmhbZl0pKX1hZGRMZWFkaW5nWmVybyhhKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGEmJihhPWEudG9TdHJpbmcoKSksYS5sZW5ndGg8Mj8iMCIrYTphfWRlbGV0'@;
put 'ZUtleXNBbmRIYXNoKGEsZCxoPSEwKXtjb25zdCBmPWg/dGhpcy5kZWVwQ2xvbmUoYSk6YTtmb3IobGV0IHYgb2YgZClkZWxldGUgZlt2XTtyZXR1cm4gUkxlKEpTT04uc3RyaW5naWZ5KGYpKS50b1N0cmluZygpfWRvd25sb2FkVGV4dEZpbGUoYSxkKXtjb25zdCBoPWRvY3VtZW50LmNyZWF0'@;
put 'ZUVsZW1lbnQoImEiKTtoLnNldEF0dHJpYnV0ZSgiaHJlZiIsImRhdGE6dGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04LCIrZW5jb2RlVVJJQ29tcG9uZW50KGQpKSxoLnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLGErIi50eHQiKSxoLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHku'@;
put 'YXBwZW5kQ2hpbGQoaCksaC5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaCl9Y29udmVydEFycmF5VmFsdWVzKGEsZCl7aWYoYS5sZW5ndGg8MSlyZXR1cm5bXTtzd2l0Y2goZCl7Y2FzZSJudW1iZXIiOnJldHVybiBhLm1hcChoPT4xKmgpO2Nhc2Uic3RyaW5nIjpyZXR1cm4g'@;
put 'YS50b1N0cmluZygpLnNwbGl0KCIsIil9fWRlYm91bmNlQ2FsbChhLGQpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dChkLGEpfWRlZXBDbG9uZShhKXtyZXR1cm4gaUwoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdTE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5s'@;
put 'b2dnZXJTZXJ2aWNlPWEsdGhpcy5hcHBTdG9yZVNlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPSExLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0'@;
put 'aGlzLl9saWNlbmNlU3RhdGU9YlcsdGhpcy5hbGxGZWF0dXJlc09uPXt2aWV3ZXJfcm93c19hbGxvd2VkOjEvMCxlZGl0b3Jfcm93c19hbGxvd2VkOjEvMCxzdGFnZV9yb3dzX2FsbG93ZWQ6MS8wLGhpc3Rvcnlfcm93c19hbGxvd2VkOjEvMCxzdWJtaXRfcm93c19saW1pdDoxLzAsdGFibGVz'@;
put 'X2luX2xpYnJhcnlfbGltaXQ6MS8wLHZpZXdib3hfbGltaXQ6MS8wLGxpbmVhZ2VfZGFpbHlfbGltaXQ6MS8wLHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH0sdGhpcy5mcmVlVGllckxpY2VuY2VEYXRhPXtkZW1vOiEwLGhvdF9saWNlbnNlX2tl'@;
put 'eTp0aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHVzZXJzX2FsbG93ZWQ6dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWR8fDEsdmFsaWRfdW50aWw6T2EoKS5hZGQoMSwieWVhciIpLmZvcm1hdCgiWVlZWS1NTS1ERCIpLHNp'@;
put 'dGVfaWQ6IiIsc2l0ZV9pZF9tdWx0aXBsZTpbXX0sdGhpcy5pc0FwcEFjdGl2YXRlZD1uZXcgZWkobnVsbCksdGhpcy5pc0FwcE92ZXJDYXBhY2l0eT1uZXcgZWkoITEpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlcj1uZXcgZWkoITEpLHRoaXMuYXBwTG9ja2VkPW5ldyBlaSghMSksdGhp'@;
put 'cy5saWNlbnNlRXhwaXJlc0luRGF5cz1uZXcgZWkobnVsbCksdGhpcy5pc0FwcEZyZWVUaWVyPW5ldyBlaSghMSksdGhpcy5saWNlbmNlUHJvYmxlbT1uZXcgZWkobnVsbCksdGhpcy5ob3RfbGljZW5zZV9rZXk9bmV3IGVpKHZvaWQgMCksdGhpcy5saWNlbmNlU3RhdGU9bmV3IGVpKHRoaXMu'@;
put 'X2xpY2VuY2VTdGF0ZSksdGhpcy5zYXNTZXJ2aWNlLmluY29ycmVjdFNpdGVJZEVtaXR0ZXIuc3Vic2NyaWJlKEQ9PntpZihudWxsIT09dGhpcy5pc0FwcEFjdGl2YXRlZC52YWx1ZSYmIXRoaXMuaXNBcHBGcmVlVGllci52YWx1ZSl7Y29uc3QgWj1gL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlz'@;
put 'c21hdGNoJm1pc3NtYXRjaElkPSR7RH0mZm9yY2U9dHJ1ZWA7dGhpcy5saWNlbmNlUHJvYmxlbS5uZXh0KFopLHRoaXMuZGVhY3RpdmF0ZUFwcChaKX19KX1hY3RpdmF0aW9uKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2QuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGlj'@;
put 'ZW5zZV9rZXk9ZC5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx5aWVsZCBkLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSkseWllbGQgZC5saWNlbnNpbmcoYS5nbG9idmFycyxhLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVz'@;
put 'KGEpe3RoaXMuX2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09YS5nbG9idmFyc1swXS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKCFhfHwhYVswXSl7Y29uc3Qgdj0nRXJyb3IgZ2V0dGluZyAi'@;
put 'R2xvYnZhcnMiIGZyb20gc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UuJztyZXR1cm4gY29uc29sZS5lcnJvcih2KSxoLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQgaC5yb3V0ZXIubmF2aWdhdGVCeVVybChgL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYSh2'@;
put 'KX1gKX1sZXQgZj1hWzBdO3JldHVybiB2b2lkIDA9PT1mLkxJQ0VOQ0VfS0VZfHx2b2lkIDA9PT1mLkFDVElWQVRJT05fS0VZfHxudWxsPT1mLlJFR0lTVEVSQ09VTlR8fG51bGw9PWYuSVNSRUdJU1RFUkVEPyhjb25zb2xlLmVycm9yKCJTb21lIG9mIGdsb2J2YXJzIGFyZSBub3QgcHJlc2Vu'@;
put 'dCIpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlNvbWUgb2YgdGhlIGdsb2J2YXJzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2UiKSk6Zi5MSUNFTkNFX0tFWSYmZi5BQ1RJVkFUSU9OX0tF'@;
put 'WT8oaC5saWNlbmNlS2V5PWYuTElDRU5DRV9LRVksaC5hY3RpdmF0aW9uS2V5PWYuQUNUSVZBVElPTl9LRVksdm9pZCh5aWVsZCBoLmRlY3J5cHRMaWNlbnNlS2V5KGYuTElDRU5DRV9LRVksZi5BQ1RJVkFUSU9OX0tFWSkudGhlbihmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXt5'@;
put 'aWVsZCBoLmFwcGxpY2F0aW9uQWN0aXZhdGlvbihNLGYsZCl9KTtyZXR1cm4gZnVuY3Rpb24oTSl7cmV0dXJuIHYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXtjb25zdCBEPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAk'@;
put 'e019YDtjb25zb2xlLmVycm9yKEQpO2NvbnN0IFo9YC9saWNlbnNpbmcva2V5P2Vycm9yPWludmFsaWQmZGV0YWlscz0ke2J0b2EoRCl9JmZvcmNlPXRydWVgO2gubGljZW5jZVByb2JsZW0ubmV4dChaKSxoLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFopLHNldFRpbWVvdXQoKCk9PmguYXBwbGlj'@;
put 'YXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApKX0pO3JldHVybiBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQpfSko'@;
put 'KX1hcHBsaWNhdGlvbkFjdGl2YXRpb24oYSxkLGgsZil7Znx8KGY9ITEpLHRoaXMuc2V0U2l0ZUlkKGEpLCFhLmRlbW8mJmQmJmgmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpO2xldCB2PXZvaWQgMCE9PWEuaG90X2xpY2Vuc2Vfa2V5P2EuaG90X2xpY2Vuc2Vfa2V5OnRo'@;
put 'aXMuaG90X2xpY2Vuc2Vfa2V5LnZhbHVlO3Z8fCh2PXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5Lm5leHQodiksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJzQWxs'@;
put 'b3dlZChhKSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTpNLGRheXNUb0V4cGlyeTpEfT10aGlzLmNhbGN1bGF0ZUV4cGlyeShhKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJbj1E'@;
put 'LHRoaXMubGljZW5zZUV4cGlyZXNJbkRheXMubmV4dChEKSxEPD0wKXJldHVybiBjb25zb2xlLmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQoZCYmaCYmdGhpcy5oYW5kbGVFeHBpcnkoTSxkLGgsZikpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhYS5kZW1vKSxkJiZ0'@;
put 'aGlzLmhhbmRsZVVzZXJSZWdpc3RyYXRpb24oYSxkLGYpLHRoaXMuZGVjb2RlTGljZW5jZUZlYXR1cmVzKGEpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSl7aWYoIWEuZmVhdHVyZXMpe2lmKGEuZGVtbylyZXR1cm47'@;
put 'cmV0dXJuIHZvaWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29uc3QgZD1hLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9saWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVl'@;
put 'KGRbbWgudmlld2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW21oLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW21oLnN0YWdlX3Jvd3NfYWxsb3dlZF0p'@;
put 'LGhpc3Rvcnlfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFttaC5oaXN0b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFttaC5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OnRo'@;
put 'aXMucGFyc2VGZWF0dXJlVmFsdWUoZFttaC50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZpZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW21oLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFttaC5saW5lYWdl'@;
put 'X2RhaWx5X2xpbWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW21oLnZpZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbWguZmlsZVVwbG9hZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFttaC5lZGl0UmVjb3Jk'@;
put 'XSksYWRkUmVjb3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbbWguYWRkUmVjb3JkXSl9LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3RhdGUpfXBhcnNlRmVhdHVyZVZhbHVlKGEpe3JldHVybiItIj09PWE/MS8wOnBhcnNlSW50KGEp'@;
put 'fXBhcnNlRmVhdHVyZVRvZ2dsZShhKXtyZXR1cm4hIXBhcnNlSW50KGEpfWRlY3J5cHRMaWNlbnNlS2V5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1lZShmdW5jdGlvbioodixNKXtpZighd2luZG93LmNyeXB0b3x8IXdpbmRvdy5jcnlwdG8u'@;
put 'c3VidGxlKXRyeXtsZXQgYmU9YXRvYihhLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikpO3YoSlNPTi5wYXJzZShiZSkpfWNhdGNoKGJlKXtNKCJFcnJvciBwYXJzaW5nIGh0dHAgbGljZW5zZSBrZXkgZGF0YS4gIitiZSl9bGV0IFosRD15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIo'@;
put 'YSkuY2F0Y2goYmU9PntNKGJlKX0pO2NvbnN0IG5lPXlpZWxkIGguYmFzZTY0VG9BcnJheUJ1ZmZlcihkKS5jYXRjaChiZT0+e00oYmUpfSk7aWYoIW5lKXJldHVybiB2b2lkIE0oIk1pc3NpbmcgYWN0aXZhdGlvbiBrZXkiKTtsZXQgY2U7Wj1uZTt0cnl7Y2U9eWllbGQgd2luZG93LmNyeXB0'@;
put 'by5zdWJ0bGUuaW1wb3J0S2V5KCJwa2NzOCIsWix7bmFtZToiUlNBLU9BRVAiLGhhc2g6IlNIQS0yNTYifSwhMCxbImRlY3J5cHQiXSl9Y2F0Y2goYmUpe00oIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXk6ICIrYmUpfWlmKGNlKWlmKEQpdHJ5e3dpbmRvdy5jcnlwdG8uc3VidGxl'@;
put 'LmRlY3J5cHQoe25hbWU6IlJTQS1PQUVQIixoYXNoOntuYW1lOiJTSEEtMjU2In19LGNlLEQpLnRoZW4oYmU9PntsZXQgRWU9KG5ldyBUVGUuVGV4dERlY29kZXIpLmRlY29kZShiZSk7dHJ5e3YoSlNPTi5wYXJzZShFZSkpfWNhdGNoKEJlKXtNKCJFcnJvciBwYXJzaW5nIGxpY2Vuc2Uga2V5'@;
put 'IGRhdGEuICIrQmUpfX0sYmU9PntNKGJlKX0pfWNhdGNoKGJlKXtNKGJlKX1lbHNlIE0oIkxpY2Vuc2Uga2V5IGJ5dGVzIG1pc3NpbmciKTtlbHNlIE0oIlVuYWJsZSB0byBpbXBvcnQgZGVjcnlwdGlvbiBrZXkiKX0pO3JldHVybiBmdW5jdGlvbih2LE0pe3JldHVybiBmLmFwcGx5KHRoaXMs'@;
put 'YXJndW1lbnRzKX19KCkpfWdldEhvdExpY2Vuc2VLZXkoKXtyZXR1cm4gdGhpcy5ob3RfbGljZW5zZV9rZXkudmFsdWV9Z2V0TGljZW5zZUtleURhdGEoKXtyZXR1cm4gdGhpcy5saWNlbnNlS2V5RGF0YX1kZWFjdGl2YXRlQXBwKGEpe3RoaXMuX2xpY2VuY2VTdGF0ZT1iVyx0aGlzLmFwcGxp'@;
put 'Y2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEpLGEmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYSl9Y2hlY2tMaW5lYWdlTGltaXQoYSl7aWYodGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdD09PTEvMClyZXR1cm4hMTtjb25zdCBk'@;
put 'PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiKSxoPU9hKCkudmFsdWVPZigpO2lmKCFkKXJldHVybiBhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMTtjb25zdCBmPXBhcnNlSW50KGQuc3BsaXQoIiwiKVswXSksdj1wYXJzZUludChkLnNwbGl0KCIsIilbMV0p'@;
put 'O3JldHVybiBPYShmKS5pc1NhbWUoT2EoKSwiZGF5Iik/dj49dGhpcy5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdHx8KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLHYrMSksITEpOihhfHx0aGlzLnNldExpbmVhZ2VSZW5kZXIoaCwxKSwhMSl9c2V0TGluZWFnZVJl'@;
put 'bmRlcihhLGQpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJsaW5lYWdlX3JlbmRlcnMiLGAke2F9LCR7ZH1gKX1iYXNlNjRUb0FycmF5QnVmZmVyKGEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYpe2goZmNlLkQoYSkpfSk7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXJyYXlCdWZmZXJUb0Jhc2U2NChhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntkKGZjZS5sKGEpKX0pfXNldFNpdGVJZChhKXthLnNpdGVfaWRfbXVsdGlwbGU/dGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vu'@;
put 'c2VTaXRlSWQoYS5zaXRlX2lkX211bHRpcGxlKTphLnNpdGVfaWQmJnRoaXMuc2FzU2VydmljZS5zZXRMaWNlbnNlU2l0ZUlkKGEuc2l0ZV9pZCl9aGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpe2xldCB2PSExLE09ITE7aWYoKCFhLnNpdGVfaWR8fGEuc2l0ZV9pZCE9PWgpJiYodj0h'@;
put 'MCksKCFhLnNpdGVfaWRfbXVsdGlwbGV8fCFhLnNpdGVfaWRfbXVsdGlwbGUuaW5jbHVkZXMoaCkpJiYoTT0hMCksdiYmTSlyZXR1cm4gY29uc29sZS5lcnJvcigiVGhlIGtleSBwcm92aWRlZCBpcyBmb3IgZGlmZmVyZW50IG9yZ2FuaXphdGlvbi4iKSx2b2lkIHNldFRpbWVvdXQoKCk9Pntj'@;
put 'b25zdCBEPSIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzbWF0Y2gmZm9yY2U9dHJ1ZSI7dGhpcy5saWNlbmNlUHJvYmxlbS5uZXh0KEQpLHRoaXMuX2xpY2VuY2VTdGF0ZT1iVyx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEsZCxoLCEwKSxmfHx0'@;
put 'aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKEQpfSl9Y2FsY3VsYXRlRXhwaXJ5KGEpe2xldCBkPU9hKGEudmFsaWRfdW50aWwsIllZWVktTU0tREQiKS5zdGFydE9mKCJkYXkiKSxoPU9hKCkuc3RhcnRPZigiZGF5IiksZj1kLmRpZmYoaCwiZGF5cyIpO3JldHVybntleHBpcnlfZGF0ZTpkLGRh'@;
put 'eXNUb0V4cGlyeTpmfX1oYW5kbGVFeHBpcnkoYSxkLGgsZil7c2V0VGltZW91dCgoKT0+e2NvbnN0IHY9YC9saWNlbnNpbmcva2V5P2ZvcmNlPXRydWUmZXJyb3I9ZXhwaXJlZCZkZXRhaWxzPSR7YnRvYSgiRXhwaXJ5IGRhdGU6ICIrYS5mb3JtYXQoIkREL01NL1lZWVkiKSl9YDt0aGlzLmxp'@;
put 'Y2VuY2VQcm9ibGVtLm5leHQodiksdGhpcy5hcHBsaWNhdGlvbkFjdGl2YXRpb24odGhpcy5mcmVlVGllckxpY2VuY2VEYXRhLGQsaCwhMCksZnx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh2KX0pfWhhbmRsZVVzZXJzQWxsb3dlZChhKXthLmRlbW8mJnZvaWQgMCE9PXRoaXMuX2xpY2Vu'@;
put 'Y2VTdGF0ZS51c2Vyc19hbGxvd2VkJiYoYS51c2Vyc19hbGxvd2VkPWEudXNlcnNfYWxsb3dlZD4wP2EudXNlcnNfYWxsb3dlZDp0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZCksdGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQ9YS51c2Vyc19hbGxvd2VkfWhhbmRsZVVz'@;
put 'ZXJSZWdpc3RyYXRpb24oYSxkLGgpe2lmKHRoaXMudXNlckNvdW50TGltaXRhdGlvbiYmKGQuUkVHSVNURVJDT1VOVD5hLnVzZXJzX2FsbG93ZWQ/KGNvbnNvbGUud2FybigiQXBwIGhhcyBtb3JlIHVzZXJzIHJlZ2lzdGVyZWQgdGhlbiBsaWNlbnNlZC4iKSx0aGlzLmlzQXBwT3ZlckNhcGFj'@;
put 'aXR5Lm5leHQoITApKTpkLlJFR0lTVEVSQ09VTlQ9PT1hLnVzZXJzX2FsbG93ZWQmJmNvbnNvbGUud2FybigiQXBwIGhhcyBoaXQgbGltaXQgb2YgdXNlcnMgcmVnaXN0ZXJlZC4iKSksMSE9PWQuSVNSRUdJU1RFUkVEKXJldHVybiBkLlJFR0lTVEVSQ09VTlQ8YS51c2Vyc19hbGxvd2VkfHwh'@;
put 'dGhpcy51c2VyQ291bnRMaW1pdGF0aW9uPyhjb25zb2xlLmxvZygiVXNlciBjYW4gcmVnaXN0ZXIiKSx0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXIubmV4dCghMCksdGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNl'@;
put 'bnNpbmcvcmVnaXN0ZXIiKSkpOih0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXIubmV4dCghMSksdGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkKGh8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvbGltaXQiKSkpO3RoaXMuaXNBcHBBY3RpdmF0ZWQubmV4'@;
put 'dCghMCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIoTWQpLHhyKFg4KSx4cih2YykseHIodGwpLHhyKFl1KSx4cihMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJ'@;
put 'bjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLG9MPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5sb2dnZXJTZXJ2aWNlPWYsdGhpcy5hcHBTZXR0aW5n'@;
put 'c1NlcnZpY2U9dix0aGlzLnJvdXRlcj1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUQsdGhpcy5zeXNzaXRlPW5ldyBlaShudWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz17fSx0aGlzLnN1YnNjcmliZSgpLHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUobmU9PntuZSBpbnN0YW5jZW9mIHBw'@;
put 'JiYiL2RlcGxveSI9PT1uZS51cmwmJnRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCl9KTtjb25zdCBaPXRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnZhbHVlO1oucGVyc2lzdFNlbGVjdGVkVGhlbWUmJnRoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZURhcmtNb2Rl'@;
put 'KFouc2VsZWN0ZWRUaGVtZSE9PXB5LmxpZ2h0JiZaLnNlbGVjdGVkVGhlbWU9PT1weS5kYXJrKX1zYXNTZXJ2aWNlSW5pdCgpe3RoaXMuc2FzU2VydmljZS5zYXNTZXJ2aWNlSW5pdCgpfXN1YnNjcmliZSgpe3RoaXMuc2FzU2VydmljZS5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLnN1YnNj'@;
put 'cmliZSgoKT0+e3RoaXMuc3RhcnRVcERhdGEoKX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0U2l0ZUlkRW1pdHRlci5zdWJzY3JpYmUoYT0+e3RoaXMucGF0Y2hTeXNzaXRlKGEpfSl9Z2V0RW52aXJvbm1lbnRJbmZvKCl7cmV0dXJuIHRoaXMuZW52aXJvbm1lbnRJbmZvfXBhdGNoU3lzc2l0'@;
put 'ZShhKXtsZXQgZD10aGlzLnN5c3NpdGUuZ2V0VmFsdWUoKTtkJiYoZC5pbmNsdWRlcyhhKXx8KGQucHVzaChhKSx0aGlzLnN5c3NpdGUubmV4dChkKSkpfXN0YXJ0VXBEYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGQ9ITE7eWllbGQgYS5zYXNTZXJ2aWNlLnJl'@;
put 'cXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihmdW5jdGlvbigpe3ZhciBoPWVlKGZ1bmN0aW9uKihmKXthLnN5c3NpdGUubmV4dChbZi5hZGFwdGVyUmVzcG9uc2UuU1lTU0lURV0pO2xldCB2PVtdO2lmKCghZi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnN8fGYuYWRh'@;
put 'cHRlclJlc3BvbnNlLmdsb2J2YXJzJiYhZi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0pJiZ2LnB1c2goIkdsb2J2YXJzIiksZi5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHN8fHYucHVzaCgiU2FzZGF0YXNldHMiKSxmLmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzfHx2LnB1c2goIlNh'@;
put 'c2xpYnMiKSxmLmFkYXB0ZXJSZXNwb25zZS54bG1hcHN8fHYucHVzaCgiWExNYXBzIiksdi5sZW5ndGg+MClyZXR1cm4gZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsYCR7di5qb2luKCIsICIpfSBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHN0YXJ0dXBzZXJ2aWNl'@;
put 'YCksdm9pZCBhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpO2NvbnN0IE09YS5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKTthLmVudmlyb25tZW50SW5mbz17U1lTU0lURTpmLmFkYXB0ZXJSZXNwb25zZS5TWVNTSVRFLFNZU1NDUEw6Zi5hZGFw'@;
put 'dGVyUmVzcG9uc2UuU1lTU0NQTCxTWVNUQ1BJUEhPU1ROQU1FOmYuYWRhcHRlclJlc3BvbnNlLlNZU1RDUElQSE9TVE5BTUUsU1lTVkxPTkc6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTVkxPTkcsTUVNU0laRTpmLmFkYXB0ZXJSZXNwb25zZS5NRU1TSVpFLFNZU1BST0NFU1NNT0RFOmYuYWRhcHRl'@;
put 'clJlc3BvbnNlLlNZU1BST0NFU1NNT0RFLFNZU0hPU1ROQU1FOmYuYWRhcHRlclJlc3BvbnNlLlNZU0hPU1ROQU1FLFNZU1VTRVJJRDpmLmFkYXB0ZXJSZXNwb25zZS5TWVNVU0VSSUQsU1lTSE9TVElORk9MT05HOmYuYWRhcHRlclJlc3BvbnNlLlNZU0hPU1RJTkZPTE9ORyxTWVNFTkNPRElO'@;
put 'RzpmLmFkYXB0ZXJSZXNwb25zZS5TWVNFTkNPRElORyxBVVRPRVhFQzpmLmFkYXB0ZXJSZXNwb25zZS5BVVRPRVhFQyxJU0FETUlOOmYuYWRhcHRlclJlc3BvbnNlLmdsb2J2YXJzWzBdLklTQURNSU4sRENfQURNSU5fR1JPVVA6Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uRENfQURN'@;
put 'SU5fR1JPVVAsQVBQX0xPQzpNPy5hcHBMb2N9O2xldCBuZSxjZSxEPWYuYWRhcHRlclJlc3BvbnNlLnNhc2RhdGFzZXRzLFo9e307Zm9yKGxldCBxZSBvZiBEKVpbcWUuTElCUkVGXXx8KFpbcWUuTElCUkVGXT1bXSksWltxZS5MSUJSRUZdLnB1c2gocWUuRFNOKTtsZXQgYmU9SlNPTi5wYXJz'@;
put 'ZShKU09OLnN0cmluZ2lmeShaKSksRWU9W107Zm9yKGxldCBxZSBvZiBPYmplY3Qua2V5cyhiZSkpRWUucHVzaCh7TElCUkFSWVJFRjpxZSx0YWJsZXM6YmVbcWVdfSk7bGV0IEJlPUVlO25lPVosY2U9T2JqZWN0LmtleXMoWiksdm9pZCAwIT09bmUmJihLbi5lZGl0b3IubGlic0FuZFRhYmxl'@;
put 'cz1uZSksS24ueGxtYXBzPWYuYWRhcHRlclJlc3BvbnNlLnhsbWFwcy5tYXAocWU9Pih7aWQ6cWVbMF0sZGVzY3JpcHRpb246cWVbMV0sdGFyZ2V0RFM6cWVbMl19KSksS24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzPUJlLEtuLmVkaXRvci5saWJyYXJpZXM9Y2UsS24uZWRpdG9yLnN0YXJ0'@;
put 'dXBTZXQ9ITAsS24uZGNMaWI9Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uRENMSUIseWllbGQgYS5saWNlbmNlU2VydmljZS5hY3RpdmF0aW9uKGYuYWRhcHRlclJlc3BvbnNlKX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5j'@;
put 'YXRjaChoPT57ZD0hMCxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIlRoZXJlIGlzIGFuIGlzc3VlIHdpdGggc3RhcnR1cHNlcnZpY2UgcmVzcG9uc2UiKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpfSksYS5sb2dnZXJTZXJ2aWNlLmxvZygi'@;
put 'QWN0aXZhdGVkOiIsYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSksZHx8KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZT9hLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZh'@;
put 'LnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpOiFhLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9rZXk/ZXJyb3I9bWlzc2luZyZmb3JjZT10cnVl'@;
put 'IikpfSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih1MSkseHIodmMpLHhyKHRsKSx4cihNZCkseHIoR1IpLHhyKExzKSx4cihYOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9'@;
put 'KX19cmV0dXJuIGN9KSgpLER1ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fcmVuZGVyZXI9YSx0aGlzLl9lbGVtZW50UmVmPWQsdGhpcy5vbkNoYW5nZT1oPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e319c2V0UHJvcGVydHkoYSxkKXt0aGlzLl9yZW5kZXJlci5zZXRQ'@;
put 'cm9wZXJ0eSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsYSxkKX1yZWdpc3Rlck9uVG91Y2hlZChhKXt0aGlzLm9uVG91Y2hlZD1hfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1hfXNldERpc2FibGVkU3RhdGUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgiZGlzYWJsZWQi'@;
put 'LGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEVhKSxHZShKaSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pfX1yZXR1cm4gY30pKCkscjc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIER1ZXtzdGF0aWN7dGhpcy5cdTAy'@;
put 'NzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1XcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsZmVhdHVyZXM6W0NvXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgYnA9bmV3IFN0KCIiKSxPTGU9e3Byb3ZpZGU6'@;
put 'YnAsdXNlRXhpc3Rpbmc6a3MoKCk9PkIxKSxtdWx0aTohMH07bGV0IEIxPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyByN3t3cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7'@;
put 'cmV0dXJuKGF8fChhPVdzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2wi'@;
put 'LCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0LmNoZWNrZWQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGgub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6W2ZvKFtPTGVdKSxDb119KX19cmV0dXJuIGN9KSgpO2NvbnN0IFBMZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzprcygoKT0+ZWMpLG11bHRpOiEwfSxITGU9bmV3IFN0KCIiKTtsZXQgZWM9KCgpPT57Y2xhc3MgYyBleHRlbmRzIER1ZXtjb25z'@;
put 'dHJ1Y3RvcihhLGQsaCl7c3VwZXIoYSxkKSx0aGlzLl9jb21wb3NpdGlvbk1vZGU9aCx0aGlzLl9jb21wb3Npbmc9ITEsbnVsbD09dGhpcy5fY29tcG9zaXRpb25Nb2RlJiYodGhpcy5fY29tcG9zaXRpb25Nb2RlPSFmdW5jdGlvbiBGTGUoKXtjb25zdCBjPWVtKCk/ZW0oKS5nZXRVc2VyQWdl'@;
put 'bnQoKToiIjtyZXR1cm4vYW5kcm9pZCAoXGQrKS8udGVzdChjLnRvTG93ZXJDYXNlKCkpfSgpKX13cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixhPz8iIil9X2hhbmRsZUlucHV0KGEpeyghdGhpcy5fY29tcG9zaXRpb25Nb2RlfHx0aGlzLl9jb21wb3NpdGlvbk1vZGUm'@;
put 'JiF0aGlzLl9jb21wb3NpbmcpJiZ0aGlzLm9uQ2hhbmdlKGEpfV9jb21wb3NpdGlvblN0YXJ0KCl7dGhpcy5fY29tcG9zaW5nPSEwfV9jb21wb3NpdGlvbkVuZChhKXt0aGlzLl9jb21wb3Npbmc9ITEsdGhpcy5fY29tcG9zaXRpb25Nb2RlJiZ0aGlzLm9uQ2hhbmdlKGEpfXN0YXRpY3t0aGlz'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEVhKSxHZShKaSksR2UoSExlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRl'@;
put 'eHRhcmVhIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsImZvcm1Db250cm9sIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsIm5n'@;
put 'TW9kZWwiLCIiXSxbIiIsIm5nRGVmYXVsdENvbnRyb2wiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiaW5wdXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9oYW5kbGVJbnB1dCh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRv'@;
put 'dWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlvbigpe3JldHVybiBoLl9jb21wb3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9jb21wb3NpdGlvbkVuZCh2LnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6W2ZvKFtQTGVdKSxD'@;
put 'b119KX19cmV0dXJuIGN9KSgpO2NvbnN0IGQwPW5ldyBTdCgiIiksZG09bmV3IFN0KCIiKTtmdW5jdGlvbiBPdWUoYyl7cmV0dXJuIGZ1bmN0aW9uIHVtKGMpe3JldHVybiBudWxsPT1jfHwoInN0cmluZyI9PXR5cGVvZiBjfHxBcnJheS5pc0FycmF5KGMpKSYmMD09PWMubGVuZ3RofShjLnZh'@;
put 'bHVlKT97cmVxdWlyZWQ6ITB9Om51bGx9ZnVuY3Rpb24gUHVlKGMpe3JldHVybiEwPT09Yy52YWx1ZT9udWxsOntyZXF1aXJlZDohMH19ZnVuY3Rpb24gYUwoYyl7cmV0dXJuIG51bGx9ZnVuY3Rpb24gQnVlKGMpe3JldHVybiBudWxsIT1jfWZ1bmN0aW9uIGp1ZShjKXtyZXR1cm4gX00oYyk/'@;
put 'WnUoYyk6Y31mdW5jdGlvbiB6dWUoYyl7bGV0IGw9e307cmV0dXJuIGMuZm9yRWFjaChhPT57bD1udWxsIT1hP3suLi5sLC4uLmF9Omx9KSwwPT09T2JqZWN0LmtleXMobCkubGVuZ3RoP251bGw6bH1mdW5jdGlvbiBVdWUoYyxsKXtyZXR1cm4gbC5tYXAoYT0+YShjKSl9ZnVuY3Rpb24gWnVl'@;
put 'KGMpe3JldHVybiBjLm1hcChsPT5mdW5jdGlvbiBWTGUoYyl7cmV0dXJuIWMudmFsaWRhdGV9KGwpP2w6YT0+bC52YWxpZGF0ZShhKSl9ZnVuY3Rpb24galcoYyl7cmV0dXJuIG51bGwhPWM/ZnVuY3Rpb24gV3VlKGMpe2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGw9Yy5maWx0ZXIoQnVlKTty'@;
put 'ZXR1cm4gMD09bC5sZW5ndGg/bnVsbDpmdW5jdGlvbihhKXtyZXR1cm4genVlKFV1ZShhLGwpKX19KFp1ZShjKSk6bnVsbH1mdW5jdGlvbiB6VyhjKXtyZXR1cm4gbnVsbCE9Yz9mdW5jdGlvbiBZdWUoYyl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgbD1jLmZpbHRlcihCdWUpO3JldHVybiAw'@;
put 'PT1sLmxlbmd0aD9udWxsOmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbiBMTGUoLi4uYyl7Y29uc3QgbD1sbGUoYykse2FyZ3M6YSxrZXlzOmR9PWNsZShjKSxoPW5ldyBYdChmPT57Y29uc3R7bGVuZ3RoOnZ9PWE7aWYoIXYpcmV0dXJuIHZvaWQgZi5jb21wbGV0ZSgpO2NvbnN0IE09bmV3'@;
put 'IEFycmF5KHYpO2xldCBEPXYsWj12O2ZvcihsZXQgbmU9MDtuZTx2O25lKyspe2xldCBjZT0hMTtsMShhW25lXSkuc3Vic2NyaWJlKE5pKGYsYmU9PntjZXx8KGNlPSEwLFotLSksTVtuZV09YmV9LCgpPT5ELS0sdm9pZCAwLCgpPT57KCFEfHwhY2UpJiYoWnx8Zi5uZXh0KGQ/dWxlKGQsTSk6'@;
put 'TSksZi5jb21wbGV0ZSgpKX0pKX19KTtyZXR1cm4gbD9oLnBpcGUoaloobCkpOmh9KFV1ZShhLGwpLm1hcChqdWUpKS5waXBlKExyKHp1ZSkpfX0oWnVlKGMpKTpudWxsfWZ1bmN0aW9uIEd1ZShjLGwpe3JldHVybiBudWxsPT09Yz9bbF06QXJyYXkuaXNBcnJheShjKT9bLi4uYyxsXTpbYyxs'@;
put 'XX1mdW5jdGlvbiBVVyhjKXtyZXR1cm4gYz9BcnJheS5pc0FycmF5KGMpP2M6W2NdOltdfWZ1bmN0aW9uIHNMKGMsbCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/Yy5pbmNsdWRlcyhsKTpjPT09bH1mdW5jdGlvbiBxdWUoYyxsKXtjb25zdCBhPVVXKGwpO3JldHVybiBVVyhjKS5mb3JFYWNo'@;
put 'KGg9PntzTChhLGgpfHxhLnB1c2goaCl9KSxhfWZ1bmN0aW9uIFh1ZShjLGwpe3JldHVybiBVVyhsKS5maWx0ZXIoYT0+IXNMKGMsYSkpfWNsYXNzIEp1ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuX3Jhd1ZhbGlkYXRvcnM9W10sdGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPVtdLHRoaXMuX29uRGVz'@;
put 'dHJveUNhbGxiYWNrcz1bXX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC52YWx1ZTpudWxsfWdldCB2YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbGlkOm51bGx9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3Ro'@;
put 'aXMuY29udHJvbC5pbnZhbGlkOm51bGx9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wZW5kaW5nOm51bGx9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZGlzYWJsZWQ6bnVsbH1nZXQgZW5hYmxlZCgpe3JldHVy'@;
put 'biB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmVuYWJsZWQ6bnVsbH1nZXQgZXJyb3JzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZXJyb3JzOm51bGx9Z2V0IHByaXN0aW5lKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wucHJpc3RpbmU6bnVsbH1nZXQg'@;
put 'ZGlydHkoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXJ0eTpudWxsfWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudG91Y2hlZDpudWxsfWdldCBzdGF0dXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXM6'@;
put 'bnVsbH1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudW50b3VjaGVkOm51bGx9Z2V0IHN0YXR1c0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5zdGF0dXNDaGFuZ2VzOm51bGx9Z2V0IHZhbHVlQ2hhbmdlcygpe3JldHVy'@;
put 'biB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlQ2hhbmdlczpudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9X3NldFZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1sfHxbXSx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWpXKHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9z'@;
put 'ZXRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPWx8fFtdLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj16Vyh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfWdldCB2YWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbnx8bnVs'@;
put 'bH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufHxudWxsfV9yZWdpc3Rlck9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MucHVzaChsKX1faW52b2tlT25EZXN0cm95Q2FsbGJhY2tzKCl7dGhpcy5fb25EZXN0cm95'@;
put 'Q2FsbGJhY2tzLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3M9W119cmVzZXQobD12b2lkIDApe3RoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLnJlc2V0KGwpfWhhc0Vycm9yKGwsYSl7cmV0dXJuISF0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5oYXNFcnJvcihs'@;
put 'LGEpfWdldEVycm9yKGwsYSl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZ2V0RXJyb3IobCxhKTpudWxsfX1jbGFzcyBqMSBleHRlbmRzIEp1ZXtnZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiBudWxsfWdldCBwYXRoKCl7cmV0dXJuIG51bGx9fWNsYXNzIGQxIGV4dGVuZHMg'@;
put 'SnVle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLm5hbWU9bnVsbCx0aGlzLnZhbHVlQWNjZXNzb3I9bnVsbH19Y2xhc3MgUXVle2NvbnN0cnVjdG9yKGwpe3RoaXMuX2NkPWx9Z2V0IGlzVG91Y2hlZCgpe3JldHVybiEhdGhpcy5fY2Q/'@;
put 'LmNvbnRyb2w/LnRvdWNoZWR9Z2V0IGlzVW50b3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udW50b3VjaGVkfWdldCBpc1ByaXN0aW5lKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8ucHJpc3RpbmV9Z2V0IGlzRGlydHkoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9s'@;
put 'Py5kaXJ0eX1nZXQgaXNWYWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnZhbGlkfWdldCBpc0ludmFsaWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5pbnZhbGlkfWdldCBpc1BlbmRpbmcoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wZW5kaW5nfWdldCBpc1N1'@;
put 'Ym1pdHRlZCgpe3JldHVybiEhdGhpcy5fY2Q/LnN1Ym1pdHRlZH19bGV0IG5sPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBRdWV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoZDEsMikpfX1zdGF0aWN7'@;
put 'dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyIiLCJuZ01vZGVsIiwiIl0sWyIiLCJmb3JtQ29udHJvbCIsIiJdXSxob3N0VmFyczoxNCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJuZy11bnRvdWNoZWQi'@;
put 'LGguaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixoLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixoLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaC5pc0RpcnR5KSgibmctdmFsaWQiLGguaXNWYWxpZCkoIm5nLWludmFsaWQiLGguaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaC5pc1BlbmRpbmcp'@;
put 'fSxmZWF0dXJlczpbQ29dfSl9fXJldHVybiBjfSkoKSxpNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUXVle2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGoxLDEwKSl9fXN0YXRpY3t0aGlzLlx1MDI3'@;
put 'NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtR3JvdXBOYW1lIiwiIl0sWyIiLCJmb3JtQXJyYXlOYW1lIiwiIl0sWyIiLCJuZ01vZGVsR3JvdXAiLCIiXSxbIiIsImZvcm1Hcm91cCIsIiJdLFsiZm9ybSIsMywibmdOb0Zvcm0iLCIiXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0'@;
put 'VmFyczoxNixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJlRyKCJuZy11bnRvdWNoZWQiLGguaXNVbnRvdWNoZWQpKCJuZy10b3VjaGVkIixoLmlzVG91Y2hlZCkoIm5nLXByaXN0aW5lIixoLmlzUHJpc3RpbmUpKCJuZy1kaXJ0eSIsaC5pc0RpcnR5KSgibmctdmFsaWQiLGguaXNW'@;
put 'YWxpZCkoIm5nLWludmFsaWQiLGguaXNJbnZhbGlkKSgibmctcGVuZGluZyIsaC5pc1BlbmRpbmcpKCJuZy1zdWJtaXR0ZWQiLGguaXNTdWJtaXR0ZWQpfSxmZWF0dXJlczpbQ29dfSl9fXJldHVybiBjfSkoKTtjb25zdCB1eD0iVkFMSUQiLGNMPSJJTlZBTElEIixNeT0iUEVORElORyIsZHg9'@;
put 'IkRJU0FCTEVEIjtmdW5jdGlvbiBZVyhjKXtyZXR1cm4odUwoYyk/Yy52YWxpZGF0b3JzOmMpfHxudWxsfWZ1bmN0aW9uIEdXKGMsbCl7cmV0dXJuKHVMKGwpP2wuYXN5bmNWYWxpZGF0b3JzOmMpfHxudWxsfWZ1bmN0aW9uIHVMKGMpe3JldHVybiBudWxsIT1jJiYhQXJyYXkuaXNBcnJheShj'@;
put 'KSYmIm9iamVjdCI9PXR5cGVvZiBjfWNsYXNzICRXe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRo'@;
put 'aXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fYXNzaWduVmFsaWRhdG9ycyhsKSx0aGlzLl9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMoYSl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21w'@;
put 'b3NlZFZhbGlkYXRvckZufXNldCB2YWxpZGF0b3IobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWx9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbn1zZXQgYXN5bmNWYWxpZGF0b3IobCl7dGhp'@;
put 'cy5fcmF3QXN5bmNWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1sfWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCB2YWxpZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PXV4fWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09Y0x9Z2V0'@;
put 'IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PU15fWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PWR4fWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT09ZHh9Z2V0IGRpcnR5KCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9Z2V0IHVudG91Y2hlZCgpe3JldHVy'@;
put 'biF0aGlzLnRvdWNoZWR9Z2V0IHVwZGF0ZU9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3RoaXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2UifXNldFZhbGlkYXRvcnMobCl7dGhpcy5fYXNzaWduVmFsaWRhdG9ycyhsKX1zZXRBc3luY1ZhbGlk'@;
put 'YXRvcnMobCl7dGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGwpfWFkZFZhbGlkYXRvcnMobCl7dGhpcy5zZXRWYWxpZGF0b3JzKHF1ZShsLHRoaXMuX3Jhd1ZhbGlkYXRvcnMpKX1hZGRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5zZXRBc3luY1ZhbGlkYXRvcnMocXVlKGwsdGhpcy5fcmF3'@;
put 'QXN5bmNWYWxpZGF0b3JzKSl9cmVtb3ZlVmFsaWRhdG9ycyhsKXt0aGlzLnNldFZhbGlkYXRvcnMoWHVlKGwsdGhpcy5fcmF3VmFsaWRhdG9ycykpfXJlbW92ZUFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyhYdWUobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMp'@;
put 'KX1oYXNWYWxpZGF0b3IobCl7cmV0dXJuIHNMKHRoaXMuX3Jhd1ZhbGlkYXRvcnMsbCl9aGFzQXN5bmNWYWxpZGF0b3IobCl7cmV0dXJuIHNMKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyxsKX1jbGVhclZhbGlkYXRvcnMoKXt0aGlzLnZhbGlkYXRvcj1udWxsfWNsZWFyQXN5bmNWYWxpZGF0'@;
put 'b3JzKCl7dGhpcy5hc3luY1ZhbGlkYXRvcj1udWxsfW1hcmtBc1RvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSEwLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNUb3VjaGVkKGwpfW1hcmtBbGxBc1RvdWNoZWQoKXt0aGlzLm1hcmtBc1RvdWNoZWQoe29u'@;
put 'bHlTZWxmOiEwfSksdGhpcy5fZm9yRWFjaENoaWxkKGw9PmwubWFya0FsbEFzVG91Y2hlZCgpKX1tYXJrQXNVbnRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX2ZvckVhY2hDaGlsZChhPT57YS5tYXJrQXNVbnRvdWNoZWQoe29ubHlT'@;
put 'ZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQobCl9bWFya0FzRGlydHkobD17fSl7dGhpcy5wcmlzdGluZT0hMSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzRGlydHkobCl9bWFya0Fz'@;
put 'UHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hMCx0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGE9PnthLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjohMH0pfSksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGlu'@;
put 'ZShsKX1tYXJrQXNQZW5kaW5nKGw9e30pe3RoaXMuc3RhdHVzPU15LCExIT09bC5lbWl0RXZlbnQmJnRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQubWFya0FzUGVuZGluZyhsKX1kaXNhYmxlKGw9e30p'@;
put 'e2NvbnN0IGE9dGhpcy5fcGFyZW50TWFya2VkRGlydHkobC5vbmx5U2VsZik7dGhpcy5zdGF0dXM9ZHgsdGhpcy5lcnJvcnM9bnVsbCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZGlzYWJsZSh7Li4ubCxvbmx5U2VsZjohMH0pfSksdGhpcy5fdXBkYXRlVmFsdWUoKSwhMSE9PWwuZW1pdEV2'@;
put 'ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQo'@;
put 'ITApKX1lbmFibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlzLnN0YXR1cz11eCx0aGlzLl9mb3JFYWNoQ2hpbGQoZD0+e2QuZW5hYmxlKHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlT'@;
put 'ZWxmOiEwLGVtaXRFdmVudDpsLmVtaXRFdmVudH0pLHRoaXMuX3VwZGF0ZUFuY2VzdG9ycyh7Li4ubCxza2lwUHJpc3RpbmVDaGVjazphfSksdGhpcy5fb25EaXNhYmxlZENoYW5nZS5mb3JFYWNoKGQ9PmQoITEpKX1fdXBkYXRlQW5jZXN0b3JzKGwpe3RoaXMuX3BhcmVudCYmIWwub25seVNl'@;
put 'bGYmJih0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKSxsLnNraXBQcmlzdGluZUNoZWNrfHx0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKCksdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKCkpfXNldFBhcmVudChsKXt0aGlzLl9wYXJlbnQ9bH1nZXRSYXdWYWx1'@;
put 'ZSgpe3JldHVybiB0aGlzLnZhbHVlfXVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkobD17fSl7dGhpcy5fc2V0SW5pdGlhbFN0YXR1cygpLHRoaXMuX3VwZGF0ZVZhbHVlKCksdGhpcy5lbmFibGVkJiYodGhpcy5fY2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKSx0aGlzLmVycm9ycz10aGlzLl9y'@;
put 'dW5WYWxpZGF0b3IoKSx0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSwodGhpcy5zdGF0dXM9PT11eHx8dGhpcy5zdGF0dXM9PT1NeSkmJnRoaXMuX3J1bkFzeW5jVmFsaWRhdG9yKGwuZW1pdEV2ZW50KSksITEhPT1sLmVtaXRFdmVudCYmKHRoaXMudmFsdWVDaGFuZ2VzLmVt'@;
put 'aXQodGhpcy52YWx1ZSksdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsKX1fdXBkYXRlVHJlZVZhbGlkaXR5KGw9e2VtaXRFdmVudDohMH0pe3RoaXMuX2Zv'@;
put 'ckVhY2hDaGlsZChhPT5hLl91cGRhdGVUcmVlVmFsaWRpdHkobCkpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSl9X3NldEluaXRpYWxTdGF0dXMoKXt0aGlzLnN0YXR1cz10aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/'@;
put 'ZHg6dXh9X3J1blZhbGlkYXRvcigpe3JldHVybiB0aGlzLnZhbGlkYXRvcj90aGlzLnZhbGlkYXRvcih0aGlzKTpudWxsfV9ydW5Bc3luY1ZhbGlkYXRvcihsKXtpZih0aGlzLmFzeW5jVmFsaWRhdG9yKXt0aGlzLnN0YXR1cz1NeSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9'@;
put 'ITA7Y29uc3QgYT1qdWUodGhpcy5hc3luY1ZhbGlkYXRvcih0aGlzKSk7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uPWEuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEsdGhpcy5zZXRFcnJvcnMoZCx7ZW1pdEV2ZW50Omx9KX0pfX1f'@;
put 'Y2FuY2VsRXhpc3RpbmdTdWJzY3JpcHRpb24oKXt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24mJih0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNWYWxpZGF0b3I9ITEpfXNldEVycm9ycyhsLGE9'@;
put 'e30pe3RoaXMuZXJyb3JzPWwsdGhpcy5fdXBkYXRlQ29udHJvbHNFcnJvcnMoITEhPT1hLmVtaXRFdmVudCl9Z2V0KGwpe2xldCBhPWw7cmV0dXJuIG51bGw9PWF8fChBcnJheS5pc0FycmF5KGEpfHwoYT1hLnNwbGl0KCIuIikpLDA9PT1hLmxlbmd0aCk/bnVsbDphLnJlZHVjZSgoZCxoKT0+'@;
put 'ZCYmZC5fZmluZChoKSx0aGlzKX1nZXRFcnJvcihsLGEpe2NvbnN0IGQ9YT90aGlzLmdldChhKTp0aGlzO3JldHVybiBkJiZkLmVycm9ycz9kLmVycm9yc1tsXTpudWxsfWhhc0Vycm9yKGwsYSl7cmV0dXJuISF0aGlzLmdldEVycm9yKGwsYSl9Z2V0IHJvb3QoKXtsZXQgbD10aGlzO2Zvcig7'@;
put 'bC5fcGFyZW50OylsPWwuX3BhcmVudDtyZXR1cm4gbH1fdXBkYXRlQ29udHJvbHNFcnJvcnMobCl7dGhpcy5zdGF0dXM9dGhpcy5fY2FsY3VsYXRlU3RhdHVzKCksbCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmdGhpcy5fcGFyZW50Ll91cGRh'@;
put 'dGVDb250cm9sc0Vycm9ycyhsKX1faW5pdE9ic2VydmFibGVzKCl7dGhpcy52YWx1ZUNoYW5nZXM9bmV3IFhyLHRoaXMuc3RhdHVzQ2hhbmdlcz1uZXcgWHJ9X2NhbGN1bGF0ZVN0YXR1cygpe3JldHVybiB0aGlzLl9hbGxDb250cm9sc0Rpc2FibGVkKCk/ZHg6dGhpcy5lcnJvcnM/Y0w6dGhp'@;
put 'cy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yfHx0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoTXkpP015OnRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhjTCk/Y0w6dXh9X2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhsKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMoYT0+YS5zdGF0'@;
put 'dXM9PT1sKX1fYW55Q29udHJvbHNEaXJ0eSgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhsPT5sLmRpcnR5KX1fYW55Q29udHJvbHNUb3VjaGVkKCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwudG91Y2hlZCl9X3VwZGF0ZVByaXN0aW5lKGw9e30pe3RoaXMucHJpc3RpbmU9IXRo'@;
put 'aXMuX2FueUNvbnRyb2xzRGlydHkoKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKGwpfV91cGRhdGVUb3VjaGVkKGw9e30pe3RoaXMudG91Y2hlZD10aGlzLl9hbnlDb250cm9sc1RvdWNoZWQoKSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlT'@;
put 'ZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQobCl9X3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKGwpe3RoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT1sfV9zZXRVcGRhdGVTdHJhdGVneShsKXt1TChsKSYmbnVsbCE9bC51cGRhdGVPbiYmKHRoaXMuX3VwZGF0ZU9uPWwudXBkYXRl'@;
put 'T24pfV9wYXJlbnRNYXJrZWREaXJ0eShsKXtyZXR1cm4hbCYmISghdGhpcy5fcGFyZW50fHwhdGhpcy5fcGFyZW50LmRpcnR5KSYmIXRoaXMuX3BhcmVudC5fYW55Q29udHJvbHNEaXJ0eSgpfV9maW5kKGwpe3JldHVybiBudWxsfV9hc3NpZ25WYWxpZGF0b3JzKGwpe3RoaXMuX3Jhd1ZhbGlk'@;
put 'YXRvcnM9QXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKCk6bCx0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWZ1bmN0aW9uIFVMZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9qVyhjKTpjfHxudWxsfSh0aGlzLl9yYXdWYWxpZGF0b3JzKX1fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGwpe3Ro'@;
put 'aXMuX3Jhd0FzeW5jVmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoKTpsLHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1mdW5jdGlvbiBaTGUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/elcoYyk6Y3x8bnVsbH0odGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzKX19'@;
put 'Y2xhc3MgZEwgZXh0ZW5kcyAkV3tjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIoWVcoYSksR1coZCxhKSksdGhpcy5jb250cm9scz1sLHRoaXMuX2luaXRPYnNlcnZhYmxlcygpLHRoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KGEpLHRoaXMuX3NldFVwQ29udHJvbHMoKSx0aGlzLnVwZGF0ZVZhbHVl'@;
put 'QW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KX1yZWdpc3RlckNvbnRyb2wobCxhKXtyZXR1cm4gdGhpcy5jb250cm9sc1tsXT90aGlzLmNvbnRyb2xzW2xdOih0aGlzLmNvbnRyb2xzW2xdPWEsYS5zZXRQYXJlbnQodGhpcyksYS5fcmVn'@;
put 'aXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UodGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKSxhKX1hZGRDb250cm9sKGwsYSxkPXt9KXt0aGlzLnJlZ2lzdGVyQ29udHJvbChsLGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmQuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xs'@;
put 'ZWN0aW9uQ2hhbmdlKCl9cmVtb3ZlQ29udHJvbChsLGE9e30pe3RoaXMuY29udHJvbHNbbF0mJnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0'@;
put 'RXZlbnQ6YS5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1zZXRDb250cm9sKGwsYSxkPXt9KXt0aGlzLmNvbnRyb2xzW2xdJiZ0aGlzLmNvbnRyb2xzW2xdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0ZSB0aGlzLmNvbnRyb2xzW2xdLGEm'@;
put 'JnRoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1jb250YWlucyhsKXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShsKSYmdGhpcy5j'@;
put 'b250cm9sc1tsXS5lbmFibGVkfXNldFZhbHVlKGwsYT17fSl7KGZ1bmN0aW9uIG4wZShjLGwsYSl7Yy5fZm9yRWFjaENoaWxkKChkLGgpPT57aWYodm9pZCAwPT09YVtoXSl0aHJvdyBuZXcgUW4oMTAwMiwiIil9KX0pKHRoaXMsMCxsKSxPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9PnsoZnVu'@;
put 'Y3Rpb24gdDBlKGMsbCxhKXtjb25zdCBkPWMuY29udHJvbHM7aWYoIShsP09iamVjdC5rZXlzKGQpOmQpLmxlbmd0aCl0aHJvdyBuZXcgUW4oMWUzLCIiKTtpZighZFthXSl0aHJvdyBuZXcgUW4oMTAwMSwiIil9KSh0aGlzLCEwLGQpLHRoaXMuY29udHJvbHNbZF0uc2V0VmFsdWUobFtkXSx7'@;
put 'b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9cGF0Y2hWYWx1ZShsLGE9e30pe251bGwhPWwmJihPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuY29udHJvbHNbZF07aCYmaC5wYXRjaFZhbHVl'@;
put 'KGxbZF0se29ubHlTZWxmOiEwLGVtaXRFdmVudDphLmVtaXRFdmVudH0pfSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpKX1yZXNldChsPXt9LGE9e30pe3RoaXMuX2ZvckVhY2hDaGlsZCgoZCxoKT0+e2QucmVzZXQobD9sW2hdOm51bGwse29ubHlTZWxmOiEwLGVtaXRFdmVudDph'@;
put 'LmVtaXRFdmVudH0pfSksdGhpcy5fdXBkYXRlUHJpc3RpbmUoYSksdGhpcy5fdXBkYXRlVG91Y2hlZChhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9Z2V0UmF3VmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGwsYSxkKT0+KGxbZF09YS5nZXRSYXdWYWx1'@;
put 'ZSgpLGwpKX1fc3luY1BlbmRpbmdDb250cm9scygpe2xldCBsPXRoaXMuX3JlZHVjZUNoaWxkcmVuKCExLChhLGQpPT4hIWQuX3N5bmNQZW5kaW5nQ29udHJvbHMoKXx8YSk7cmV0dXJuIGwmJnRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITB9KSxsfV9mb3JFYWNoQ2hp'@;
put 'bGQobCl7T2JqZWN0LmtleXModGhpcy5jb250cm9scykuZm9yRWFjaChhPT57Y29uc3QgZD10aGlzLmNvbnRyb2xzW2FdO2QmJmwoZCxhKX0pfV9zZXRVcENvbnRyb2xzKCl7dGhpcy5fZm9yRWFjaENoaWxkKGw9PntsLnNldFBhcmVudCh0aGlzKSxsLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNo'@;
put 'YW5nZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpfSl9X3VwZGF0ZVZhbHVlKCl7dGhpcy52YWx1ZT10aGlzLl9yZWR1Y2VWYWx1ZSgpfV9hbnlDb250cm9scyhsKXtmb3IoY29uc3RbYSxkXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY29udHJvbHMpKWlmKHRoaXMuY29udGFpbnMoYSkmJmwo'@;
put 'ZCkpcmV0dXJuITA7cmV0dXJuITF9X3JlZHVjZVZhbHVlKCl7cmV0dXJuIHRoaXMuX3JlZHVjZUNoaWxkcmVuKHt9LChhLGQsaCk9PigoZC5lbmFibGVkfHx0aGlzLmRpc2FibGVkKSYmKGFbaF09ZC52YWx1ZSksYSkpfV9yZWR1Y2VDaGlsZHJlbihsLGEpe2xldCBkPWw7cmV0dXJuIHRoaXMu'@;
put 'X2ZvckVhY2hDaGlsZCgoaCxmKT0+e2Q9YShkLGgsZil9KSxkfV9hbGxDb250cm9sc0Rpc2FibGVkKCl7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LmtleXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250cm9sc1tsXS5lbmFibGVkKXJldHVybiExO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNv'@;
put 'bnRyb2xzKS5sZW5ndGg+MHx8dGhpcy5kaXNhYmxlZH1fZmluZChsKXtyZXR1cm4gdGhpcy5jb250cm9scy5oYXNPd25Qcm9wZXJ0eShsKT90aGlzLmNvbnRyb2xzW2xdOm51bGx9fWNvbnN0IG83PW5ldyBTdCgiQ2FsbFNldERpc2FibGVkU3RhdGUiLHtwcm92aWRlZEluOiJyb290IixmYWN0'@;
put 'b3J5OigpPT5oeH0pLGh4PSJhbHdheXMiO2Z1bmN0aW9uIGZ4KGMsbCxhPWh4KXtLVyhjLGwpLGwudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGMudmFsdWUpLChjLmRpc2FibGVkfHwiYWx3YXlzIj09PWEpJiZsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZT8uKGMuZGlzYWJsZWQp'@;
put 'LGZ1bmN0aW9uIEdMZShjLGwpe2wudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uQ2hhbmdlKGE9PntjLl9wZW5kaW5nVmFsdWU9YSxjLl9wZW5kaW5nQ2hhbmdlPSEwLGMuX3BlbmRpbmdEaXJ0eT0hMCwiY2hhbmdlIj09PWMudXBkYXRlT24mJnIwZShjLGwpfSl9KGMsbCksZnVuY3Rpb24gS0xl'@;
put 'KGMsbCl7Y29uc3QgYT0oZCxoKT0+e2wudmFsdWVBY2Nlc3Nvci53cml0ZVZhbHVlKGQpLGgmJmwudmlld1RvTW9kZWxVcGRhdGUoZCl9O2MucmVnaXN0ZXJPbkNoYW5nZShhKSxsLl9yZWdpc3Rlck9uRGVzdHJveSgoKT0+e2MuX3VucmVnaXN0ZXJPbkNoYW5nZShhKX0pfShjLGwpLGZ1bmN0'@;
put 'aW9uICRMZShjLGwpe2wudmFsdWVBY2Nlc3Nvci5yZWdpc3Rlck9uVG91Y2hlZCgoKT0+e2MuX3BlbmRpbmdUb3VjaGVkPSEwLCJibHVyIj09PWMudXBkYXRlT24mJmMuX3BlbmRpbmdDaGFuZ2UmJnIwZShjLGwpLCJzdWJtaXQiIT09Yy51cGRhdGVPbiYmYy5tYXJrQXNUb3VjaGVkKCl9KX0o'@;
put 'YyxsKSxmdW5jdGlvbiBZTGUoYyxsKXtpZihsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7Y29uc3QgYT1kPT57bC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoZCl9O2MucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57'@;
put 'Yy5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSl9KX19KGMsbCl9ZnVuY3Rpb24gcEwoYyxsKXtjLmZvckVhY2goYT0+e2EucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmYS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGwpfSl9ZnVuY3Rpb24gS1coYyxsKXtjb25zdCBhPWZ1bmN0'@;
put 'aW9uICR1ZShjKXtyZXR1cm4gYy5fcmF3VmFsaWRhdG9yc30oYyk7bnVsbCE9PWwudmFsaWRhdG9yP2Muc2V0VmFsaWRhdG9ycyhHdWUoYSxsLnZhbGlkYXRvcikpOiJmdW5jdGlvbiI9PXR5cGVvZiBhJiZjLnNldFZhbGlkYXRvcnMoW2FdKTtjb25zdCBkPWZ1bmN0aW9uIEt1ZShjKXtyZXR1'@;
put 'cm4gYy5fcmF3QXN5bmNWYWxpZGF0b3JzfShjKTtudWxsIT09bC5hc3luY1ZhbGlkYXRvcj9jLnNldEFzeW5jVmFsaWRhdG9ycyhHdWUoZCxsLmFzeW5jVmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGQmJmMuc2V0QXN5bmNWYWxpZGF0b3JzKFtkXSk7Y29uc3QgaD0oKT0+Yy51cGRh'@;
put 'dGVWYWx1ZUFuZFZhbGlkaXR5KCk7cEwobC5fcmF3VmFsaWRhdG9ycyxoKSxwTChsLl9yYXdBc3luY1ZhbGlkYXRvcnMsaCl9ZnVuY3Rpb24gcjBlKGMsbCl7Yy5fcGVuZGluZ0RpcnR5JiZjLm1hcmtBc0RpcnR5KCksYy5zZXRWYWx1ZShjLl9wZW5kaW5nVmFsdWUse2VtaXRNb2RlbFRvVmll'@;
put 'd0NoYW5nZTohMX0pLGwudmlld1RvTW9kZWxVcGRhdGUoYy5fcGVuZGluZ1ZhbHVlKSxjLl9wZW5kaW5nQ2hhbmdlPSExfWNvbnN0IGVPZT17cHJvdmlkZTpqMSx1c2VFeGlzdGluZzprcygoKT0+eXApfSxweD1Qcm9taXNlLnJlc29sdmUoKTtsZXQgeXA9KCgpPT57Y2xhc3MgYyBleHRlbmRz'@;
put 'IGoxe2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcigpLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9aCx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLl9kaXJlY3RpdmVzPW5ldyBTZXQsdGhpcy5uZ1N1Ym1pdD1uZXcgWHIsdGhpcy5mb3JtPW5ldyBkTCh7fSxqVyhhKSx6VyhkKSl9bmdBZnRlclZp'@;
put 'ZXdJbml0KCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzfWdldCBjb250cm9sKCl7cmV0dXJuIHRoaXMuZm9ybX1nZXQgcGF0aCgpe3JldHVybltdfWdldCBjb250cm9scygpe3JldHVybiB0aGlzLmZvcm0uY29udHJvbHN9YWRkQ29u'@;
put 'dHJvbChhKXtweC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7YS5jb250cm9sPWQucmVnaXN0ZXJDb250cm9sKGEubmFtZSxhLmNvbnRyb2wpLGZ4KGEuY29udHJvbCxhLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLGEuY29udHJvbC51cGRhdGVWYWx1'@;
put 'ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLl9kaXJlY3RpdmVzLmFkZChhKX0pfWdldENvbnRyb2woYSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoYS5wYXRoKX1yZW1vdmVDb250cm9sKGEpe3B4LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtk'@;
put 'JiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKSx0aGlzLl9kaXJlY3RpdmVzLmRlbGV0ZShhKX0pfWFkZEZvcm1Hcm91cChhKXtweC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCksaD1uZXcgZEwoe30pOyhmdW5jdGlvbiBpMGUoYyxsKXtLVyhjLGwpfSkoaCxh'@;
put 'KSxkLnJlZ2lzdGVyQ29udHJvbChhLm5hbWUsaCksaC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pfXJlbW92ZUZvcm1Hcm91cChhKXtweC50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7ZCYmZC5yZW1vdmVDb250cm9sKGEubmFt'@;
put 'ZSl9KX1nZXRGb3JtR3JvdXAoYSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoYS5wYXRoKX11cGRhdGVNb2RlbChhLGQpe3B4LnRoZW4oKCk9Pnt0aGlzLmZvcm0uZ2V0KGEucGF0aCkuc2V0VmFsdWUoZCl9KX1zZXRWYWx1ZShhKXt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSl9b25TdWJtaXQoYSl7'@;
put 'cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGZ1bmN0aW9uIG8wZShjLGwpe2MuX3N5bmNQZW5kaW5nQ29udHJvbHMoKSxsLmZvckVhY2goYT0+e2NvbnN0IGQ9YS5jb250cm9sOyJzdWJtaXQiPT09ZC51cGRhdGVPbiYmZC5fcGVuZGluZ0NoYW5nZSYmKGEudmlld1RvTW9kZWxVcGRhdGUoZC5f'@;
put 'cGVuZGluZ1ZhbHVlKSxkLl9wZW5kaW5nQ2hhbmdlPSExKX0pfSh0aGlzLmZvcm0sdGhpcy5fZGlyZWN0aXZlcyksdGhpcy5uZ1N1Ym1pdC5lbWl0KGEpLCJkaWFsb2ciPT09YT8udGFyZ2V0Py5tZXRob2R9b25SZXNldCgpe3RoaXMucmVzZXRGb3JtKCl9cmVzZXRGb3JtKGE9dm9pZCAwKXt0'@;
put 'aGlzLmZvcm0ucmVzZXQoYSksdGhpcy5zdWJtaXR0ZWQ9ITF9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxsIT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmZvcm0uX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2ZpbmRDb250YWluZXIoYSl7cmV0'@;
put 'dXJuIGEucG9wKCksYS5sZW5ndGg/dGhpcy5mb3JtLmdldChhKTp0aGlzLmZvcm19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoZDAsMTApLEdlKGRtLDEwKSxHZShvNyw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgic3VibWl0IixmdW5jdGlvbih2KXtyZXR1cm4gaC5vblN1Ym1pdCh2KX0pKCJyZXNl'@;
put 'dCIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblJlc2V0KCl9KX0saW5wdXRzOntvcHRpb25zOltqbi5Ob25lLCJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxleHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltmbyhbZU9lXSksQ29dfSl9'@;
put 'fXJldHVybiBjfSkoKTtmdW5jdGlvbiBhMGUoYyxsKXtjb25zdCBhPWMuaW5kZXhPZihsKTthPi0xJiZjLnNwbGljZShhLDEpfWZ1bmN0aW9uIHMwZShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jJiYyPT09T2JqZWN0LmtleXMoYykubGVuZ3RoJiYidmFsdWUiaW4gYyYm'@;
put 'ImRpc2FibGVkImluIGN9Y29uc3QgUVc9Y2xhc3MgZXh0ZW5kcyAkV3tjb25zdHJ1Y3RvcihsPW51bGwsYSxkKXtzdXBlcihZVyhhKSxHVyhkLGEpKSx0aGlzLmRlZmF1bHRWYWx1ZT1udWxsLHRoaXMuX29uQ2hhbmdlPVtdLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITEsdGhpcy5fYXBwbHlGb3Jt'@;
put 'U3RhdGUobCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSksdUwoYSkmJihhLm5vbk51bGxhYmxlfHxhLmluaXRp'@;
put 'YWxWYWx1ZUlzRGVmYXVsdCkmJih0aGlzLmRlZmF1bHRWYWx1ZT1zMGUobCk/bC52YWx1ZTpsKX1zZXRWYWx1ZShsLGE9e30pe3RoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwsdGhpcy5fb25DaGFuZ2UubGVuZ3RoJiYhMSE9PWEuZW1pdE1vZGVsVG9WaWV3Q2hhbmdlJiZ0aGlzLl9v'@;
put 'bkNoYW5nZS5mb3JFYWNoKGQ9PmQodGhpcy52YWx1ZSwhMSE9PWEuZW1pdFZpZXdUb01vZGVsQ2hhbmdlKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGEpfXBhdGNoVmFsdWUobCxhPXt9KXt0aGlzLnNldFZhbHVlKGwsYSl9cmVzZXQobD10aGlzLmRlZmF1bHRWYWx1ZSxhPXt9KXt0'@;
put 'aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLm1hcmtBc1ByaXN0aW5lKGEpLHRoaXMubWFya0FzVW50b3VjaGVkKGEpLHRoaXMuc2V0VmFsdWUodGhpcy52YWx1ZSxhKSx0aGlzLl9wZW5kaW5nQ2hhbmdlPSExfV91cGRhdGVWYWx1ZSgpe31fYW55Q29udHJvbHMobCl7cmV0dXJuITF9X2Fs'@;
put 'bENvbnRyb2xzRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kaXNhYmxlZH1yZWdpc3Rlck9uQ2hhbmdlKGwpe3RoaXMuX29uQ2hhbmdlLnB1c2gobCl9X3VucmVnaXN0ZXJPbkNoYW5nZShsKXthMGUodGhpcy5fb25DaGFuZ2UsbCl9cmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGwpe3RoaXMuX29u'@;
put 'RGlzYWJsZWRDaGFuZ2UucHVzaChsKX1fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7YTBlKHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UsbCl9X2ZvckVhY2hDaGlsZChsKXt9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXtyZXR1cm4hKCJzdWJtaXQiIT09dGhpcy51cGRhdGVPbnx8KHRoaXMu'@;
put 'X3BlbmRpbmdEaXJ0eSYmdGhpcy5tYXJrQXNEaXJ0eSgpLHRoaXMuX3BlbmRpbmdUb3VjaGVkJiZ0aGlzLm1hcmtBc1RvdWNoZWQoKSwhdGhpcy5fcGVuZGluZ0NoYW5nZSl8fCh0aGlzLnNldFZhbHVlKHRoaXMuX3BlbmRpbmdWYWx1ZSx7b25seVNlbGY6ITAsZW1pdE1vZGVsVG9WaWV3Q2hh'@;
put 'bmdlOiExfSksMCkpfV9hcHBseUZvcm1TdGF0ZShsKXtzMGUobCk/KHRoaXMudmFsdWU9dGhpcy5fcGVuZGluZ1ZhbHVlPWwudmFsdWUsbC5kaXNhYmxlZD90aGlzLmRpc2FibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pOnRoaXMuZW5hYmxlKHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6'@;
put 'ITF9KSk6dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bH19LHJPZT17cHJvdmlkZTpkMSx1c2VFeGlzdGluZzprcygoKT0+R3MpfSxjMGU9UHJvbWlzZS5yZXNvbHZlKCk7bGV0IEdzPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBkMXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIo'@;
put 'KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj12LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9TSx0aGlzLmNvbnRyb2w9bmV3IFFXLHRoaXMuX3JlZ2lzdGVyZWQ9ITEsdGhpcy5uYW1lPSIiLHRoaXMudXBkYXRlPW5ldyBYcix0aGlzLl9wYXJlbnQ9YSx0aGlzLl9zZXRWYWxpZGF0b3JzKGQp'@;
put 'LHRoaXMuX3NldEFzeW5jVmFsaWRhdG9ycyhoKSx0aGlzLnZhbHVlQWNjZXNzb3I9ZnVuY3Rpb24gSlcoYyxsKXtpZighbClyZXR1cm4gbnVsbDtsZXQgYSxkLGg7cmV0dXJuIEFycmF5LmlzQXJyYXkobCksbC5mb3JFYWNoKGY9PntmLmNvbnN0cnVjdG9yPT09ZWM/YT1mOmZ1bmN0aW9uIEpM'@;
put 'ZShjKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGMuY29uc3RydWN0b3IpPT09cjd9KGYpP2Q9ZjpoPWZ9KSxofHxkfHxhfHxudWxsfSgwLGYpfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuX2NoZWNrRm9yRXJyb3JzKCksIXRoaXMuX3JlZ2lzdGVyZWR8fCJuYW1lImluIGEpe2lmKHRo'@;
put 'aXMuX3JlZ2lzdGVyZWQmJih0aGlzLl9jaGVja05hbWUoKSx0aGlzLmZvcm1EaXJlY3RpdmUpKXtjb25zdCBkPWEubmFtZS5wcmV2aW91c1ZhbHVlO3RoaXMuZm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHtuYW1lOmQscGF0aDp0aGlzLl9nZXRQYXRoKGQpfSl9dGhpcy5fc2V0VXBDb250'@;
put 'cm9sKCl9ImlzRGlzYWJsZWQiaW4gYSYmdGhpcy5fdXBkYXRlRGlzYWJsZWQoYSksZnVuY3Rpb24gWFcoYyxsKXtpZighYy5oYXNPd25Qcm9wZXJ0eSgibW9kZWwiKSlyZXR1cm4hMTtjb25zdCBhPWMubW9kZWw7cmV0dXJuISFhLmlzRmlyc3RDaGFuZ2UoKXx8IU9iamVjdC5pcyhsLGEuY3Vy'@;
put 'cmVudFZhbHVlKX0oYSx0aGlzLnZpZXdNb2RlbCkmJih0aGlzLl91cGRhdGVWYWx1ZSh0aGlzLm1vZGVsKSx0aGlzLnZpZXdNb2RlbD10aGlzLm1vZGVsKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9ybURpcmVjdGl2ZSYmdGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2wodGhpcyl9Z2V0'@;
put 'IHBhdGgoKXtyZXR1cm4gdGhpcy5fZ2V0UGF0aCh0aGlzLm5hbWUpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXMuX3BhcmVudD90aGlzLl9wYXJlbnQuZm9ybURpcmVjdGl2ZTpudWxsfXZpZXdUb01vZGVsVXBkYXRlKGEpe3RoaXMudmlld01vZGVsPWEsdGhpcy51cGRhdGUuZW1p'@;
put 'dChhKX1fc2V0VXBDb250cm9sKCl7dGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koKSx0aGlzLl9pc1N0YW5kYWxvbmUoKT90aGlzLl9zZXRVcFN0YW5kYWxvbmUoKTp0aGlzLmZvcm1EaXJlY3RpdmUuYWRkQ29udHJvbCh0aGlzKSx0aGlzLl9yZWdpc3RlcmVkPSEwfV9zZXRVcGRhdGVTdHJhdGVn'@;
put 'eSgpe3RoaXMub3B0aW9ucyYmbnVsbCE9dGhpcy5vcHRpb25zLnVwZGF0ZU9uJiYodGhpcy5jb250cm9sLl91cGRhdGVPbj10aGlzLm9wdGlvbnMudXBkYXRlT24pfV9pc1N0YW5kYWxvbmUoKXtyZXR1cm4hdGhpcy5fcGFyZW50fHwhKCF0aGlzLm9wdGlvbnN8fCF0aGlzLm9wdGlvbnMuc3Rh'@;
put 'bmRhbG9uZSl9X3NldFVwU3RhbmRhbG9uZSgpe2Z4KHRoaXMuY29udHJvbCx0aGlzLHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpLHRoaXMuY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX1fY2hlY2tGb3JFcnJvcnMoKXt0aGlzLl9pc1N0YW5kYWxvbmUo'@;
put 'KXx8dGhpcy5fY2hlY2tQYXJlbnRUeXBlKCksdGhpcy5fY2hlY2tOYW1lKCl9X2NoZWNrUGFyZW50VHlwZSgpe31fY2hlY2tOYW1lKCl7dGhpcy5vcHRpb25zJiZ0aGlzLm9wdGlvbnMubmFtZSYmKHRoaXMubmFtZT10aGlzLm9wdGlvbnMubmFtZSksdGhpcy5faXNTdGFuZGFsb25lKCl9X3Vw'@;
put 'ZGF0ZVZhbHVlKGEpe2MwZS50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKGEse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV91cGRhdGVEaXNhYmxlZChhKXtjb25zdCBkPWEuaXNEaXNhYmxlZC5jdXJy'@;
put 'ZW50VmFsdWUsaD0wIT09ZCYmczEoZCk7YzBlLnRoZW4oKCk9PntoJiYhdGhpcy5jb250cm9sLmRpc2FibGVkP3RoaXMuY29udHJvbC5kaXNhYmxlKCk6IWgmJnRoaXMuY29udHJvbC5kaXNhYmxlZCYmdGhpcy5jb250cm9sLmVuYWJsZSgpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJr'@;
put 'Rm9yQ2hlY2soKX0pfV9nZXRQYXRoKGEpe3JldHVybiB0aGlzLl9wYXJlbnQ/ZnVuY3Rpb24gaEwoYyxsKXtyZXR1cm5bLi4ubC5wYXRoLGNdfShhLHRoaXMuX3BhcmVudCk6W2FdfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGoxLDkpLEdl'@;
put 'KGQwLDEwKSxHZShkbSwxMCksR2UoYnAsMTApLEdlKHhzLDgpLEdlKG83LDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nTW9kZWwiLCIiLDMsImZvcm1Db250cm9sTmFtZSIsIiIsMywiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntuYW1l'@;
put 'OiJuYW1lIixpc0Rpc2FibGVkOltqbi5Ob25lLCJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbam4uTm9uZSwibmdNb2RlbCIsIm1vZGVsIl0sb3B0aW9uczpbam4uTm9uZSwibmdNb2RlbE9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9'@;
put 'LGV4cG9ydEFzOlsibmdNb2RlbCJdLGZlYXR1cmVzOltmbyhbck9lXSksQ28sd2xdfSl9fXJldHVybiBjfSkoKSxhNz0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsIm5nTmF0aXZlVmFsaWRhdGUiLCIiXV0saG9zdEF0dHJzOlsibm92YWxpZGF0ZSIsIiJdfSl9fXJldHVybiBjfSkoKTtjb25zdCBpT2U9e3Byb3ZpZGU6YnAsdXNlRXhpc3Rpbmc6a3MoKCk9Pm1MKSxtdWx0aTohMH07bGV0'@;
put 'IG1MPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyByN3t3cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixhPz8iIil9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9PnthKCIiPT1kP251bGw6cGFyc2VGbG9hdChkKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0o'@;
put 'KCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVdzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5'@;
put 'cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJpbnB1dCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQudmFsdWUpfSkoImJs'@;
put 'dXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6W2ZvKFtpT2VdKSxDb119KX19cmV0dXJuIGN9KSgpO2NvbnN0IG9PZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzprcygoKT0+dkwpLG11bHRpOiEwfTtsZXQgYU9lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoKXt0aGlzLl9hY2Nlc3NvcnM9W119YWRkKGEsZCl7dGhpcy5fYWNjZXNzb3JzLnB1c2goW2EsZF0pfXJlbW92ZShhKXtmb3IobGV0IGQ9dGhpcy5fYWNjZXNzb3JzLmxlbmd0aC0xO2Q+PTA7LS1kKWlmKHRoaXMuX2FjY2Vzc29yc1tkXVsxXT09PWEpcmV0dXJuIHZvaWQgdGhpcy5fYWNj'@;
put 'ZXNzb3JzLnNwbGljZShkLDEpfXNlbGVjdChhKXt0aGlzLl9hY2Nlc3NvcnMuZm9yRWFjaChkPT57dGhpcy5faXNTYW1lR3JvdXAoZCxhKSYmZFsxXSE9PWEmJmRbMV0uZmlyZVVuY2hlY2soYS52YWx1ZSl9KX1faXNTYW1lR3JvdXAoYSxkKXtyZXR1cm4hIWFbMF0uY29udHJvbCYmYVswXS5f'@;
put 'cGFyZW50PT09ZC5fY29udHJvbC5fcGFyZW50JiZhWzFdLm5hbWU9PT1kLm5hbWV9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZElu'@;
put 'OiJyb290In0pfX1yZXR1cm4gY30pKCksdkw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHI3e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGEsZCksdGhpcy5fcmVnaXN0cnk9aCx0aGlzLl9pbmplY3Rvcj1mLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSExLHRoaXMub25DaGFuZ2U9KCk9'@;
put 'Pnt9LHRoaXMuY2FsbFNldERpc2FibGVkU3RhdGU9Zmkobzcse29wdGlvbmFsOiEwfSk/P2h4fW5nT25Jbml0KCl7dGhpcy5fY29udHJvbD10aGlzLl9pbmplY3Rvci5nZXQoZDEpLHRoaXMuX2NoZWNrTmFtZSgpLHRoaXMuX3JlZ2lzdHJ5LmFkZCh0aGlzLl9jb250cm9sLHRoaXMpfW5nT25E'@;
put 'ZXN0cm95KCl7dGhpcy5fcmVnaXN0cnkucmVtb3ZlKHRoaXMpfXdyaXRlVmFsdWUoYSl7dGhpcy5fc3RhdGU9YT09PXRoaXMudmFsdWUsdGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsdGhpcy5fc3RhdGUpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5fZm49YSx0aGlzLm9uQ2hhbmdlPSgp'@;
put 'PT57YSh0aGlzLnZhbHVlKSx0aGlzLl9yZWdpc3RyeS5zZWxlY3QodGhpcyl9fXNldERpc2FibGVkU3RhdGUoYSl7KHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkfHxhfHwid2hlbkRpc2FibGVkRm9yTGVnYWN5Q29kZSI9PT10aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSYmdGhpcy5zZXRQ'@;
put 'cm9wZXJ0eSgiZGlzYWJsZWQiLGEpLHRoaXMuc2V0RGlzYWJsZWRTdGF0ZUZpcmVkPSEwfWZpcmVVbmNoZWNrKGEpe3RoaXMud3JpdGVWYWx1ZShhKX1fY2hlY2tOYW1lKCl7IXRoaXMubmFtZSYmdGhpcy5mb3JtQ29udHJvbE5hbWUmJih0aGlzLm5hbWU9dGhpcy5mb3JtQ29udHJvbE5hbWUp'@;
put 'fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEVhKSxHZShKaSksR2UoYU9lKSxHZShEcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5h'@;
put 'bWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25DaGFuZ2UoKX0p'@;
put 'KCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LGZlYXR1cmVzOltmbyhbb09lXSksQ29dfSl9fXJldHVybiBjfSkoKTtjb25zdCB0WT1uZXcg'@;
put 'U3QoIiIpLGZPZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzprcygoKT0+V2YpLG11bHRpOiEwfTtmdW5jdGlvbiBwMGUoYyxsKXtyZXR1cm4gbnVsbD09Yz9gJHtsfWA6KGwmJiJvYmplY3QiPT10eXBlb2YgbCYmKGw9Ik9iamVjdCIpLGAke2N9OiAke2x9YC5zbGljZSgwLDUwKSl9bGV0IFdm'@;
put 'PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyByN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChhKXt0aGlzLl9jb21wYXJlV2l0'@;
put 'aD1hfXdyaXRlVmFsdWUoYSl7dGhpcy52YWx1ZT1hO2NvbnN0IGg9cDBlKHRoaXMuX2dldE9wdGlvbklkKGEpLGEpO3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixoKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e3RoaXMudmFsdWU9dGhpcy5fZ2V0T3B0aW9uVmFsdWUo'@;
put 'ZCksYSh0aGlzLnZhbHVlKX19X3JlZ2lzdGVyT3B0aW9uKCl7cmV0dXJuKHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpfV9nZXRPcHRpb25JZChhKXtmb3IoY29uc3QgZCBvZiB0aGlzLl9vcHRpb25NYXAua2V5cygpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5n'@;
put 'ZXQoZCksYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24gcE9lKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCk6YX1zdGF0aWN7dGhp'@;
put 'cy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1XcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbInNlbGVjdCIsImZvcm1Db250cm9sTmFtZSIsIiIsMywibXVsdGlwbGUiLCIi'@;
put 'XSxbInNlbGVjdCIsImZvcm1Db250cm9sIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwibmdNb2RlbCIsIiIsMywibXVsdGlwbGUiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRh'@;
put 'cmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOltmbyhbZk9lXSksQ29dfSl9fXJldHVybiBjfSkoKSxZZj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo'@;
put 'KXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFsdWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAu'@;
put 'c2V0KHRoaXMuaWQsYSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKHAwZSh0aGlzLmlkLGEpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoYSl7dGhpcy5fc2V0RWxlbWVudFZhbHVlKGEpLHRoaXMuX3NlbGVjdCYmdGhpcy5fc2VsZWN0Lndy'@;
put 'aXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25N'@;
put 'YXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShFYSksR2UoV2YsOSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIo'@;
put 'e3R5cGU6YyxzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGdPZT17cHJvdmlkZTpicCx1c2VFeGlzdGluZzprcygoKT0+Z3gpLG11bHRpOiEwfTtmdW5jdGlvbiBnMGUoYyxsKXtyZXR1'@;
put 'cm4gbnVsbD09Yz9gJHtsfWA6KCJzdHJpbmciPT10eXBlb2YgbCYmKGw9YCcke2x9J2ApLGwmJiJvYmplY3QiPT10eXBlb2YgbCYmKGw9Ik9iamVjdCIpLGAke2N9OiAke2x9YC5zbGljZSgwLDUwKSl9bGV0IGd4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyByN3tjb25zdHJ1Y3Rvcigpe3N1cGVy'@;
put 'KC4uLmFyZ3VtZW50cyksdGhpcy5fb3B0aW9uTWFwPW5ldyBNYXAsdGhpcy5faWRDb3VudGVyPTAsdGhpcy5fY29tcGFyZVdpdGg9T2JqZWN0LmlzfXNldCBjb21wYXJlV2l0aChhKXt0aGlzLl9jb21wYXJlV2l0aD1hfXdyaXRlVmFsdWUoYSl7bGV0IGQ7aWYodGhpcy52YWx1ZT1hLEFycmF5'@;
put 'LmlzQXJyYXkoYSkpe2NvbnN0IGg9YS5tYXAoZj0+dGhpcy5fZ2V0T3B0aW9uSWQoZikpO2Q9KGYsdik9PntmLl9zZXRTZWxlY3RlZChoLmluZGV4T2Yodi50b1N0cmluZygpKT4tMSl9fWVsc2UgZD0oaCxmKT0+e2guX3NldFNlbGVjdGVkKCExKX07dGhpcy5fb3B0aW9uTWFwLmZvckVhY2go'@;
put 'ZCl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWQ9Pntjb25zdCBoPVtdLGY9ZC5zZWxlY3RlZE9wdGlvbnM7aWYodm9pZCAwIT09Zil7Y29uc3Qgdj1mO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSsrKXtjb25zdCBaPXRoaXMuX2dldE9wdGlvblZhbHVlKHZbTV0udmFsdWUp'@;
put 'O2gucHVzaChaKX19ZWxzZXtjb25zdCB2PWQub3B0aW9ucztmb3IobGV0IE09MDtNPHYubGVuZ3RoO00rKyl7Y29uc3QgRD12W01dO2lmKEQuc2VsZWN0ZWQpe2NvbnN0IFo9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoRC52YWx1ZSk7aC5wdXNoKFopfX19dGhpcy52YWx1ZT1oLGEoaCl9fV9yZWdp'@;
put 'c3Rlck9wdGlvbihhKXtjb25zdCBkPSh0aGlzLl9pZENvdW50ZXIrKykudG9TdHJpbmcoKTtyZXR1cm4gdGhpcy5fb3B0aW9uTWFwLnNldChkLGEpLGR9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhp'@;
put 'cy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWUsYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24gbU9lKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1h'@;
put 'cC5nZXQoZCkuX3ZhbHVlOmF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9V3MoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBs'@;
put 'ZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24odil7'@;
put 'cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbZm8oW2dPZV0pLENvXX0pfX1yZXR1cm4gY30pKCksR2Y9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZWxlbWVudD1hLHRoaXMuX3JlbmRlcmVyPWQsdGhpcy5fc2VsZWN0PWgsdGhpcy5fc2VsZWN0JiYodGhpcy5pZD10aGlzLl9zZWxlY3QuX3JlZ2lzdGVyT3B0aW9uKHRoaXMpKX1zZXQgbmdWYWx1ZShhKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlz'@;
put 'Ll92YWx1ZT1hLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShnMGUodGhpcy5pZCxhKSksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c2V0IHZhbHVlKGEpe3RoaXMuX3NlbGVjdD8odGhpcy5fdmFsdWU9YSx0aGlzLl9zZXRFbGVtZW50VmFsdWUoZzBlKHRoaXMu'@;
put 'aWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpOnRoaXMuX3NldEVsZW1lbnRWYWx1ZShhKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfV9z'@;
put 'ZXRTZWxlY3RlZChhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVjdCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qu'@;
put 'd3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKaSksR2UoRWEpLEdlKGd4LDkpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm9wdGlvbiJdXSxp'@;
put 'bnB1dHM6e25nVmFsdWU6Im5nVmFsdWUiLHZhbHVlOiJ2YWx1ZSJ9fSl9fXJldHVybiBjfSkoKSxzNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdmFsaWRhdG9yPWFMfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuaW5wdXROYW1lIGluIGEpe2NvbnN0IGQ9dGhpcy5ub3JtYWxp'@;
put 'emVJbnB1dChhW3RoaXMuaW5wdXROYW1lXS5jdXJyZW50VmFsdWUpO3RoaXMuX2VuYWJsZWQ9dGhpcy5lbmFibGVkKGQpLHRoaXMuX3ZhbGlkYXRvcj10aGlzLl9lbmFibGVkP3RoaXMuY3JlYXRlVmFsaWRhdG9yKGQpOmFMLHRoaXMuX29uQ2hhbmdlJiZ0aGlzLl9vbkNoYW5nZSgpfX12YWxp'@;
put 'ZGF0ZShhKXtyZXR1cm4gdGhpcy5fdmFsaWRhdG9yKGEpfXJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoYSl7dGhpcy5fb25DaGFuZ2U9YX1lbmFibGVkKGEpe3JldHVybiBudWxsIT1hfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7'@;
put 'dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxmZWF0dXJlczpbd2xdfSl9fXJldHVybiBjfSkoKTtjb25zdCB5T2U9e3Byb3ZpZGU6ZDAsdXNlRXhpc3Rpbmc6a3MoKCk9PnJZKSxtdWx0aTohMH0sX09lPXtwcm92aWRlOmQwLHVzZUV4aXN0aW5nOmtzKCgpPT5pWSksbXVsdGk6ITB9O2xldCBy'@;
put 'WT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgczd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuaW5wdXROYW1lPSJyZXF1aXJlZCIsdGhpcy5ub3JtYWxpemVJbnB1dD1zMSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1hPT5PdWV9ZW5hYmxlZChhKXtyZXR1cm4gYX1zdGF0aWN7'@;
put 'dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1XcyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0'@;
put 'eXBlIiwiY2hlY2tib3giXSxbIiIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwicmVxdWlyZWQiLCIiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsy'@;
put 'JmQmJmZyKCJyZXF1aXJlZCIsaC5fZW5hYmxlZD8iIjpudWxsKX0saW5wdXRzOntyZXF1aXJlZDoicmVxdWlyZWQifSxmZWF0dXJlczpbZm8oW3lPZV0pLENvXX0pfX1yZXR1cm4gY30pKCksaVk9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHJZe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1l'@;
put 'bnRzKSx0aGlzLmNyZWF0ZVZhbGlkYXRvcj1hPT5QdWV9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9V3MoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJp'@;
put 'bnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsInJlcXVpcmVkIiwiIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJuZ01v'@;
put 'ZGVsIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZmcigicmVxdWlyZWQiLGguX2VuYWJsZWQ/IiI6bnVsbCl9LGZlYXR1cmVzOltmbyhbX09lXSksQ29dfSl9fXJldHVybiBjfSkoKSxNMGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30pKCksSWM9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6'@;
put 'Yyxwcm92aWRlcnM6W3twcm92aWRlOm83LHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2h4fV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1'@;
put 'MDI3NWluaj1Bcih7aW1wb3J0czpbTTBlXX0pfX1yZXR1cm4gY30pKCksRU9lPSgoKT0+e2NsYXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTp0WSx1c2VWYWx1ZTphLndhcm5Pbk5nTW9kZWxXaXRoRm9ybUNvbnRyb2w/PyJh'@;
put 'bHdheXMifSx7cHJvdmlkZTpvNyx1c2VWYWx1ZTphLmNhbGxTZXREaXNhYmxlZFN0YXRlPz9oeH1dfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVp'@;
put 'bmo9QXIoe2ltcG9ydHM6W00wZV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHh5PVsiYW5nbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIu'@;
put 'NDUtMi4zNloiLz4nfV0sYmg9WyJleGNsYW1hdGlvbi1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTggMTkuOEMxOC41NSAxOS44IDE5IDE5LjM1IDE5IDE4LjhWMTNDMTkgMTIuNDUgMTguNTUgMTIgMTggMTJDMTcuNDUgMTIgMTcgMTIuNDUgMTcgMTNWMTguOEMxNyAxOS4zNSAxNy40'@;
put 'NSAxOS44IDE4IDE5LjhaTTE4Ljg1IDIxLjk1QzE4LjczIDIxLjg0IDE4LjYgMjEuNzUgMTguNDYgMjEuNjlDMTguMTcgMjEuNTcgMTcuODMgMjEuNTcgMTcuNTQgMjEuNjlDMTcuNCAyMS43NSAxNy4yNyAyMS44NCAxNy4xNSAyMS45NUMxNi45MyAyMi4xOCAxNi44IDIyLjQ4IDE2LjggMjIu'@;
put 'OEMxNi44IDIzLjEyIDE2LjkzIDIzLjQyIDE3LjE1IDIzLjY1QzE3LjI3IDIzLjc2IDE3LjQgMjMuODUgMTcuNTQgMjMuOTFDMTcuNjkgMjMuOTcgMTcuODQgMjQgMTggMjRDMTguMTYgMjQgMTguMzEgMjMuOTcgMTguNDYgMjMuOTFDMTguNiAyMy44NSAxOC43MyAyMy43NiAxOC44NSAyMy42'@;
put 'NUMxOS4wNyAyMy40MiAxOS4yIDIzLjEyIDE5LjIgMjIuOEMxOS4yIDIyLjY0IDE5LjE3IDIyLjQ5IDE5LjExIDIyLjM0QzE5LjA1IDIyLjIgMTguOTYgMjIuMDYgMTguODUgMjEuOTVaTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAz'@;
put 'MCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDggMjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIzLjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA2QzExLjM4'@;
put 'IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xNi44IDEyLjY1QzE2LjggMTEuOTkgMTcuMzQgMTEuNDUgMTggMTEuNDVDMTguNjYgMTEuNDUgMTkuMiAxMS45OSAxOS4yIDEyLjY1VjE4'@;
put 'LjQ1QzE5LjIgMTkuMTEgMTguNjYgMTkuNjUgMTggMTkuNjVDMTcuMzQgMTkuNjUgMTYuOCAxOS4xMSAxNi44IDE4LjQ1VjEyLjY1Wk0xOC45OCAyNC4xNUMxOC44NCAyNC4yOCAxOC42OSAyNC4zOCAxOC41MyAyNC40NUMxOC4zNSAyNC41MiAxOC4xOCAyNC41NiAxOCAyNC41NkMxNy44MiAy'@;
put 'NC41NiAxNy42NCAyNC41MyAxNy40NiAyNC40NUMxNy4zMSAyNC4zOCAxNy4xNiAyNC4yOSAxNyAyNC4xNEMxNi43NCAyMy44NyAxNi41OSAyMy41MiAxNi41OSAyMy4xNUMxNi41OSAyMi43OCAxNi43MyAyMi40NCAxNyAyMi4xNUMxNy4xNCAyMi4wMiAxNy4yOSAyMS45MiAxNy40NSAyMS44'@;
put 'NUMxNy42MiAyMS43OCAxNy44IDIxLjc0IDE3Ljk5IDIxLjc0QzE4LjE4IDIxLjc0IDE4LjM2IDIxLjc4IDE4LjUzIDIxLjg1QzE4LjY4IDIxLjkyIDE4LjgzIDIyLjAyIDE4Ljk4IDIyLjE1QzE5LjEgMjIuMjcgMTkuMjEgMjIuNDMgMTkuMjggMjIuNjFDMTkuMzUgMjIuNzkgMTkuMzkgMjIu'@;
put 'OTYgMTkuMzkgMjMuMTRDMTkuMzkgMjMuNSAxOS4yNSAyMy44NSAxOC45NyAyNC4xNEwxOC45OCAyNC4xNVoiLz4nfV0seWg9WyJjaGVjay1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjIuNjEgMTQuMjJMMTYuMjUgMjAuNThMMTIuNzEgMTcuMDRDMTIuMzIgMTYuNjUgMTEuNjkgMTYu'@;
put 'NjUgMTEuMyAxNy4wNEMxMC45MSAxNy40MyAxMC45MSAxOC4wNiAxMS4zIDE4LjQ1TDE2LjI1IDIzLjRMMjQuMDMgMTUuNjJDMjQuNDIgMTUuMjMgMjQuNDIgMTQuNiAyNC4wMyAxNC4yMUMyMy42NCAxMy44MiAyMy4wMSAxMy44MiAyMi42MiAxNC4yMUwyMi42MSAxNC4yMlpNMTggNkMxMS4z'@;
put 'OCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjggMjMu'@;
put 'NTEgMjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTI0LjE2IDE1Ljc4TDE2LjI0IDIzLjdMMTEuMTUg'@;
put 'MTguNjFDMTAuNjggMTguMTQgMTAuNjggMTcuMzggMTEuMTUgMTYuOTFDMTEuNjIgMTYuNDQgMTIuMzggMTYuNDQgMTIuODUgMTYuOTFMMTYuMjQgMjAuM0wyMi40NiAxNC4wOEMyMi45MyAxMy42MSAyMy42OSAxMy42MSAyNC4xNiAxNC4wOEMyNC42MyAxNC41NSAyNC42MyAxNS4zMSAyNC4x'@;
put 'NiAxNS43OFoiLz4nfV0seDBlPVsiZWxsaXBzaXMtaG9yaXpvbnRhbCIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjggMTguMUM3LjggMTkuNzU2OCA2LjUwMTYzIDIxLjEgNC45IDIxLjFDMy4yOTgzNyAyMS4xIDIgMTkuNzU2OCAyIDE4LjFDMiAxNi40NDMxIDMuMjk4MzcgMTUuMSA0LjkgMTUu'@;
put 'MUM2LjUwMTYzIDE1LjEgNy44IDE2LjQ0MzEgNy44IDE4LjFaIi8+PHBhdGggZD0iTTE4IDIxLjFDMTkuNjAxNiAyMS4xIDIwLjkgMTkuNzU2OCAyMC45IDE4LjFDMjAuOSAxNi40NDMxIDE5LjYwMTYgMTUuMSAxOCAxNS4xQzE2LjM5ODQgMTUuMSAxNS4xIDE2LjQ0MzEgMTUuMSAxOC4xQzE1'@;
put 'LjEgMTkuNzU2OCAxNi4zOTg0IDIxLjEgMTggMjEuMVoiLz48cGF0aCBkPSJNMzEuMSAyMS4xQzMyLjcwMTYgMjEuMSAzNCAxOS43NTY4IDM0IDE4LjFDMzQgMTYuNDQzMSAzMi43MDE2IDE1LjEgMzEuMSAxNS4xQzI5LjQ5ODQgMTUuMSAyOC4yIDE2LjQ0MzEgMjguMiAxOC4xQzI4LjIgMTku'@;
put 'NzU2OCAyOS40OTg0IDIxLjEgMzEuMSAyMS4xWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTQuOSAyMS4xQzYuNTAxNjMgMjEuMSA3LjggMTkuNzU2OCA3LjggMTguMUM3LjggMTYuNDQzMSA2LjUwMTYzIDE1LjEgNC45IDE1LjFDMy4yOTgzNyAxNS4xIDIgMTYuNDQzMSAyIDE4LjFD'@;
put 'MiAxOS43NTY4IDMuMjk4MzcgMjEuMSA0LjkgMjEuMVoiLz48cGF0aCBkPSJNMTggMjEuMUMxOS42MDE2IDIxLjEgMjAuOSAxOS43NTY4IDIwLjkgMTguMUMyMC45IDE2LjQ0MzEgMTkuNjAxNiAxNS4xIDE4IDE1LjFDMTYuMzk4NCAxNS4xIDE1LjEgMTYuNDQzMSAxNS4xIDE4LjFDMTUuMSAx'@;
put 'OS43NTY4IDE2LjM5ODQgMjEuMSAxOCAyMS4xWiIvPjxwYXRoIGQ9Ik0zNCAxOC4xQzM0IDE5Ljc1NjggMzIuNzAxNiAyMS4xIDMxLjEgMjEuMUMyOS40OTg0IDIxLjEgMjguMiAxOS43NTY4IDI4LjIgMTguMUMyOC4yIDE2LjQ0MzEgMjkuNDk4NCAxNS4xIDMxLjEgMTUuMUMzMi43MDE2IDE1'@;
put 'LjEgMzQgMTYuNDQzMSAzNCAxOC4xWiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSxteD1bIndpbmRv'@;
put 'dy1jbG9zZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40MSAxOC4wMDAzTDI2LjcgMTAuNzEwM0MyNy4wMzk4IDEwLjMxMzUgMjcuMDE2OSA5LjcyMjA3IDI2LjY0NzYgOS4zNTI3QzI2LjI3ODIgOC45ODMzMyAyNS42ODY4IDguOTYwNDkgMjUuMjkgOS4zMDAyNkwxOCAxNi41OTAzTDEwLjcx'@;
put 'IDkuMjkwMjZDMTAuMzEzMiA4Ljk1MDQ5IDkuNzIxODEgOC45NzMzMyA5LjM1MjQ0IDkuMzQyN0M4Ljk4MzA3IDkuNzEyMDcgOC45NjAyMyAxMC4zMDM1IDkuMzAwMDEgMTAuNzAwM0wxNi41OSAxOC4wMDAzTDkuMjkwMDEgMjUuMjkwM0M5LjAwNDYzIDI1LjUzNDcgOC44ODAzMiAyNS45MTg0'@;
put 'IDguOTY4MTkgMjYuMjgzN0M5LjA1NjA3IDI2LjY0OSA5LjM0MTI5IDI2LjkzNDIgOS43MDY1OSAyNy4wMjIxQzEwLjA3MTkgMjcuMTA5OSAxMC40NTU2IDI2Ljk4NTYgMTAuNyAyNi43MDAzTDE4IDE5LjQxMDNMMjUuMjkgMjYuNzAwM0MyNS42ODY4IDI3LjA0IDI2LjI3ODIgMjcuMDE3MiAy'@;
put 'Ni42NDc2IDI2LjY0NzhDMjcuMDE2OSAyNi4yNzg1IDI3LjAzOTggMjUuNjg3IDI2LjcgMjUuMjkwM0wxOS40MSAxOC4wMDAzWiIvPid9XSxUT2U9WyJpbmZvLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMSAyM0gxOVYxNUgxNkMxNS40NSAxNSAxNSAxNS40NSAxNSAxNkMxNSAxNi41'@;
put 'NSAxNS40NSAxNyAxNiAxN0gxN1YyM0gxNUMxNC40NSAyMyAxNCAyMy40NSAxNCAyNEMxNCAyNC41NSAxNC40NSAyNSAxNSAyNUgyMUMyMS41NSAyNSAyMiAyNC41NSAyMiAyNEMyMiAyMy40NSAyMS41NSAyMyAyMSAyM1pNMTcuOTMgMTMuM0MxOC43IDEzLjMgMTkuMzMgMTIuNjcgMTkuMzMg'@;
put 'MTEuOUMxOS4zMyAxMS4xMyAxOC43IDEwLjUgMTcuOTMgMTAuNUMxNy4xNiAxMC41IDE2LjUzIDExLjEzIDE2LjUzIDExLjlDMTYuNTMgMTIuNjcgMTcuMTYgMTMuMyAxNy45MyAxMy4zWk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQuNjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAg'@;
put 'MzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4IDIzLjUxIDggMThDOCAxMi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4z'@;
put 'OCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMTcuOTMgMTAuM0MxOC44MSAxMC4zIDE5LjUzIDExLjAyIDE5LjUzIDExLjlDMTkuNTMgMTIuNzggMTguODEgMTMuNSAxNy45MyAxMy41'@;
put 'QzE3LjA1IDEzLjUgMTYuMzMgMTIuNzggMTYuMzMgMTEuOUMxNi4zMyAxMS4wMiAxNy4wNSAxMC4zIDE3LjkzIDEwLjNaTTIxIDI1LjJIMTVDMTQuMzQgMjUuMiAxMy44IDI0LjY2IDEzLjggMjRDMTMuOCAyMy4zNCAxNC4zNCAyMi44IDE1IDIyLjhIMTYuOFYxNy4ySDE2QzE1LjM0IDE3LjIg'@;
put 'MTQuOCAxNi42NiAxNC44IDE2QzE0LjggMTUuMzQgMTUuMzQgMTQuOCAxNiAxNC44SDE5LjJWMjIuOEgyMUMyMS42NiAyMi44IDIyLjIgMjMuMzQgMjIuMiAyNEMyMi4yIDI0LjY2IDIxLjY2IDI1LjIgMjEgMjUuMloiLz4nfV0sRTBlPVsidGltZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTku'@;
put 'NDY5NiAxNy45NzMyTDI3Ljc1OTYgOS43MDU0MkMyOC4wOTk0IDkuMzA5NzIgMjguMDc2NSA4LjcxOTg3IDI3LjcwNzEgOC4zNTE0OEMyNy4zMzc4IDcuOTgzMSAyNi43NDYzIDcuOTYwMzIgMjYuMzQ5NiA4LjI5OTE5TDE4LjA1OTYgMTYuNTY3TDkuNzY5NTggOC4yODkyMkM5LjM3NzQ1IDcu'@;
put 'ODk4MTQgOC43NDE3IDcuODk4MTQgOC4zNDk1OCA4LjI4OTIyQzcuOTU3NDUgOC42ODAyOSA3Ljk1NzQ1IDkuMzE0MzQgOC4zNDk1OCA5LjcwNTQyTDE2LjY0OTYgMTcuOTczMkw4LjM0OTU4IDI2LjI0MUM4LjA2NDIgMjYuNDg0OCA3LjkzOTg5IDI2Ljg2NzUgOC4wMjc3NyAyNy4yMzE4Qzgu'@;
put 'MTE1NjQgMjcuNTk2MSA4LjQwMDg2IDI3Ljg4MDYgOC43NjYxNiAyNy45NjgyQzkuMTMxNDYgMjguMDU1OSA5LjUxNTE5IDI3LjkzMTkgOS43NTk1OCAyNy42NDczTDE4LjA1OTYgMTkuMzc5NUwyNi4zNDk2IDI3LjY0NzNDMjYuNzQ2MyAyNy45ODYxIDI3LjMzNzggMjcuOTYzNCAyNy43MDcx'@;
put 'IDI3LjU5NUMyOC4wNzY1IDI3LjIyNjYgMjguMDk5NCAyNi42MzY3IDI3Ljc1OTYgMjYuMjQxTDE5LjQ2OTYgMTcuOTczMloiLz4nfV0sVDBlPVsiYW5nbGUtZG91YmxlIix7b3V0bGluZTonPHBhdGggZD0iTTI4LjM0OTEgMTcuODk5NkMyOC41Mzg0IDE4LjA4MzcgMjguNzk0NSAxOC4xODYz'@;
put 'IDI5LjA2MSAxOC4xODQ4QzI5LjQ2NCAxOC4xODMxIDI5LjgyNjggMTcuOTQ1MSAyOS45ODIxIDE3LjU4MDVDMzAuMTM3NCAxNy4yMTU4IDMwLjA1NSAxNi43OTU1IDI5Ljc3MjkgMTYuNTEzM0wxOC4wMzE4IDVMNi4zMDA2NyAxNi41MTMzQzUuOTU5OTkgMTYuOTAzNCA1Ljk4Mjg5IDE3LjQ4'@;
put 'NDkgNi4zNTMyNSAxNy44NDgxQzYuNzIzNiAxOC4yMTEyIDcuMzE2NiAxOC4yMzM3IDcuNzE0NDIgMTcuODk5NkwxOC4wMzE4IDcuNzgyNDZMMjguMzQ5MSAxNy44OTk2WiIvPjxwYXRoIGQ9Ik0yOC4zNDkxIDI4LjcxNDlDMjguNTM4NCAyOC44OTg5IDI4Ljc5NDUgMjkuMDAxNSAyOS4wNjEg'@;
put 'MjlDMjkuNDY0IDI4Ljk5ODQgMjkuODI2OCAyOC43NjAzIDI5Ljk4MjEgMjguMzk1N0MzMC4xMzc0IDI4LjAzMTEgMzAuMDU1IDI3LjYxMDcgMjkuNzcyOSAyNy4zMjg1TDE4LjAzMTggMTUuODE1Mkw2LjMwMDY3IDI3LjMyODVDNS45NTk5OSAyNy43MTg2IDUuOTgyODkgMjguMzAwMSA2LjM1'@;
put 'MzI1IDI4LjY2MzNDNi43MjM2IDI5LjAyNjUgNy4zMTY2IDI5LjA0ODkgNy43MTQ0MiAyOC43MTQ5TDE4LjAzMTggMTguNTk3N0wyOC4zNDkxIDI4LjcxNDlaIi8+J31dLEFPZT1bImV2ZW50Iix7b3V0bGluZTonPHBhdGggZD0iTTE2LjE3IDI1Ljg2TDEwLjgxIDIwLjVDMTAuNjQ2MiAyMC4z'@;
put 'MDg3IDEwLjU2MDYgMjAuMDYyNiAxMC41NzAzIDE5LjgxMDlDMTAuNTggMTkuNTU5MyAxMC42ODQ0IDE5LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4yNzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4wMjg3IDE4LjkyNjIgMTIuMjIg'@;
put 'MTkuMDlMMTYuMTcgMjNMMjQuODEgMTQuMzZDMjUuMDAxMyAxNC4xOTYyIDI1LjI0NzQgMTQuMTEwNiAyNS40OTkxIDE0LjEyMDNDMjUuNzUwNyAxNC4xMyAyNS45ODk1IDE0LjIzNDMgMjYuMTY3NiAxNC40MTI0QzI2LjM0NTcgMTQuNTkwNSAyNi40NSAxNC44MjkzIDI2LjQ1OTcgMTUuMDgw'@;
put 'OUMyNi40Njk0IDE1LjMzMjYgMjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1Ljg2WiIvPjxwYXRoIGQ9Ik0zMi4yNSA2SDI5VjhIMzJWMzBINC4wMDAwMVY4SDcuMDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUzODMgMy4wNzEwOCA2LjE0Njkx'@;
put 'QzIuODU2NjEgNi4yMzk5OSAyLjY2MjU4IDYuMzc0NDEgMi41MDAwNyA2LjU0MjQ5QzIuMzM3NTcgNi43MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgxNiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIu'@;
put 'MDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJI'@;
put 'MzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0'@;
put 'IDMwLjQyMzggMzQgMzAuMTlWNy44MUMzNC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTggMzMuODc2MSA3LjEyNjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAzMi45Mjg5IDYuMTQ2OTFDMzIu'@;
put 'NzE0NSA2LjA1MzgzIDMyLjQ4MzggNi4wMDM5MSAzMi4yNSA2WiIvPjxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcw'@;
put 'NzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5'@;
put 'MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUyMiAyNyA5VjNDMjcgMi43MzQ3OCAyNi44OTQ3IDIuNDgwNDMg'@;
put 'MjYuNzA3MSAyLjI5Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4yNjUyIDIgMjYgMkMyNS43MzQ4IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4yNjUyMiAyNS4xMDU0IDkuNTE5NTcgMjUuMjkyOSA5LjcwNzEx'@;
put 'QzI1LjQ4MDQgOS44OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIvPjxwYXRoIGQ9Ik0yMyA2SDEzVjhIMjNWNloiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODgg'@;
put 'MTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkx'@;
put 'IDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzY0IDE1LjAzODkgMzMuODg4NiAxNS4w'@;
put 'MzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDA0IDMwLjQyMzggMzMuOTYxOSAzMC42NTYgMzMuODc2MSAzMC44NzM1QzMzLjc5MDMgMzEuMDkxIDMzLjY2MjUgMzEuMjg5NCAzMy41IDMxLjQ1NzVDMzMuMzM3NCAzMS42MjU2IDMzLjE0MzQgMzEuNzYgMzIuOTI4OSAzMS44NTMxQzMyLjcxNDUg'@;
put 'MzEuOTQ2MiAzMi40ODM4IDMxLjk5NjEgMzIuMjUgMzJIMy43NTAwMUMzLjUxNjI1IDMxLjk5NjEgMy4yODU1NSAzMS45NDYyIDMuMDcxMDggMzEuODUzMUMyLjg1NjYxIDMxLjc2IDIuNjYyNTggMzEuNjI1NiAyLjUwMDA3IDMxLjQ1NzVDMi4zMzc1NyAzMS4yODk0IDIuMjA5NzYgMzEuMDkx'@;
put 'IDIuMTIzOTYgMzAuODczNUMyLjAzODE2IDMwLjY1NiAxLjk5NjA0IDMwLjQyMzggMi4wMDAwMSAzMC4xOVY3LjgxQzEuOTk2MDQgNy41NzYyNCAyLjAzODE2IDcuMzQzOTggMi4xMjM5NiA3LjEyNjVDMi4yMDk3NiA2LjkwOTAyIDIuMzM3NTcgNi43MTA1NyAyLjUwMDA3IDYuNTQyNDlDMi42'@;
put 'NjI1OCA2LjM3NDQxIDIuODU2NjEgNi4yMzk5OSAzLjA3MTA4IDYuMTQ2OTFDMy4yODU1NSA2LjA1MzgzIDMuNTE2MjUgNi4wMDM5MSAzLjc1MDAxIDZINy4wMDAwMVY4SDQuMDAwMDFWMzBIMzJWMTUuMDM2N1oiLz48cGF0aCBkPSJNMjQuMTMzMyAxNS4wMzY3SDI2LjQ1N0MyNi40NTgzIDE1'@;
put 'LjA1MTQgMjYuNDU5MiAxNS4wNjYxIDI2LjQ1OTcgMTUuMDgwOUMyNi40Njk0IDE1LjMzMjYgMjYuMzgzOCAxNS41Nzg3IDI2LjIyIDE1Ljc3TDE2LjE3IDI1Ljg2TDEwLjgxIDIwLjVDMTAuNjQ2MiAyMC4zMDg3IDEwLjU2MDYgMjAuMDYyNiAxMC41NzAzIDE5LjgxMDlDMTAuNTggMTkuNTU5'@;
put 'MyAxMC42ODQ0IDE5LjMyMDUgMTAuODYyNCAxOS4xNDI0QzExLjA0MDUgMTguOTY0MyAxMS4yNzkzIDE4Ljg2IDExLjUzMSAxOC44NTAzQzExLjc4MjYgMTguODQwNiAxMi4wMjg3IDE4LjkyNjIgMTIuMjIgMTkuMDlMMTYuMTcgMjNMMjQuMTMzMyAxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yMS45'@;
put 'NTk0IDZMMjAuNzU5NCA4SDEzVjZIMjEuOTU5NFoiLz48cGF0aCBkPSJNMTAuNzA3MSA5LjcwNzExQzEwLjUxOTYgOS44OTQ2NCAxMC4yNjUyIDEwIDEwIDEwQzkuNzM0OCAxMCA5LjQ4MDQ0IDkuODk0NjQgOS4yOTI5MSA5LjcwNzExQzkuMTA1MzcgOS41MTk1NyA5LjAwMDAxIDkuMjY1MjIg'@;
put 'OS4wMDAwMSA5VjNDOS4wMDAwMSAyLjczNDc4IDkuMTA1MzcgMi40ODA0MyA5LjI5MjkxIDIuMjkyODlDOS40ODA0NCAyLjEwNTM2IDkuNzM0OCAyIDEwIDJDMTAuMjY1MiAyIDEwLjUxOTYgMi4xMDUzNiAxMC43MDcxIDIuMjkyODlDMTAuODk0NyAyLjQ4MDQzIDExIDIuNzM0NzggMTEgM1Y5'@;
put 'QzExIDkuMjY1MjIgMTAuODk0NyA5LjUxOTU3IDEwLjcwNzEgOS43MDcxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0xMC44MSAyMC41TDE2LjE3IDI1Ljg2TDI2LjIyIDE1LjgxQzI2LjM4MzggMTUuNjE4NyAyNi40Njk0IDE1LjM3MjYgMjYuNDU5NyAxNS4xMjA5QzI2LjQ1IDE0'@;
put 'Ljg2OTMgMjYuMzQ1NyAxNC42MzA1IDI2LjE2NzYgMTQuNDUyNEMyNS45ODk1IDE0LjI3NDMgMjUuNzUwNyAxNC4xNyAyNS40OTkxIDE0LjE2MDNDMjUuMjQ3NCAxNC4xNTA2IDI1LjAwMTMgMTQuMjM2MiAyNC44MSAxNC40TDE2LjE3IDIzTDEyLjIzIDE5LjA2QzEyLjAzODcgMTguODk2MiAx'@;
put 'MS43OTI2IDE4LjgxMDYgMTEuNTQxIDE4LjgyMDNDMTEuMjg5MyAxOC44MyAxMS4wNTA1IDE4LjkzNDMgMTAuODcyNCAxOS4xMTI0QzEwLjY5NDQgMTkuMjkwNSAxMC41OSAxOS41MjkzIDEwLjU4MDMgMTkuNzgwOUMxMC41NzA2IDIwLjAzMjYgMTAuNjU2MiAyMC4yNzg3IDEwLjgyIDIwLjQ3'@;
put 'TDEwLjgxIDIwLjVaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUz'@;
put 'NiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0'@;
put 'IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMzIgMTMuMjJWMzBINC4wMDAwMVY4SDcuMDAwMDFWNkgzLjc1MDAxQzMuNTE2MjUgNi4wMDM5MSAzLjI4NTU1IDYuMDUzODMgMy4wNzEwOCA2LjE0NjkxQzIuODU2NjEgNi4yMzk5OSAyLjY2MjU4IDYuMzc0NDEgMi41MDAwNyA2LjU0MjQ5'@;
put 'QzIuMzM3NTcgNi43MTA1NyAyLjIwOTc2IDYuOTA5MDIgMi4xMjM5NiA3LjEyNjVDMi4wMzgxNiA3LjM0Mzk4IDEuOTk2MDQgNy41NzYyNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMz'@;
put 'NzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMx'@;
put 'Ljg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTIuMzRDMzMuMzgwMiAxMi43MyAzMi43MDYzIDEz'@;
put 'LjAyNjYgMzIgMTMuMjJaIi8+PHBhdGggZD0iTTIyLjUgNkgxM1Y4SDIyLjc4QzIyLjU5NjggNy4zNDkwMyAyMi41MDI2IDYuNjc2MjUgMjIuNSA2WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYg'@;
put 'MSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAu'@;
put 'ODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEw'@;
put 'NTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTI2IDEwQzI2LjI2NTIgMTAgMjYuNTE5NiA5Ljg5NDY0IDI2LjcwNzEgOS43MDcxMUMyNi44OTQ3IDkuNTE5NTcgMjcgOS4yNjUyMiAyNyA5VjNDMjcgMi43MzQ3'@;
put 'OCAyNi44OTQ3IDIuNDgwNDMgMjYuNzA3MSAyLjI5Mjg5QzI2LjUxOTYgMi4xMDUzNiAyNi4yNjUyIDIgMjYgMkMyNS43MzQ4IDIgMjUuNDgwNCAyLjEwNTM2IDI1LjI5MjkgMi4yOTI4OUMyNS4xMDU0IDIuNDgwNDMgMjUgMi43MzQ3OCAyNSAzVjlDMjUgOS4yNjUyMiAyNS4xMDU0IDkuNTE5'@;
put 'NTcgMjUuMjkyOSA5LjcwNzExQzI1LjQ4MDQgOS44OTQ2NCAyNS43MzQ4IDEwIDI2IDEwWiIvPjxwYXRoIGQ9Ik0zMi4yNSA2SDI4LjI1VjlDMjguMjUgOS41ODM0OCAyOC4wMTgyIDEwLjE0MzEgMjcuNjA1NiAxMC41NTU2QzI3LjE5MzEgMTAuOTY4MiAyNi42MzM1IDExLjIgMjYuMDUgMTEu'@;
put 'MkMyNS40NjY1IDExLjIgMjQuOTA3IDEwLjk2ODIgMjQuNDk0NCAxMC41NTU2QzI0LjA4MTggMTAuMTQzMSAyMy44NSA5LjU4MzQ4IDIzLjg1IDlWNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4MzUgMTEu'@;
put 'MiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1NCA2LjIy'@;
put 'MjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2'@;
put 'IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgz'@;
put 'OCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQg'@;
put 'MzAuMTlWNy44MUMzNC4wMDQgNy41NzYyNCAzMy45NjE5IDcuMzQzOTggMzMuODc2MSA3LjEyNjVDMzMuNzkwMyA2LjkwOTAyIDMzLjY2MjUgNi43MTA1NyAzMy41IDYuNTQyNDlDMzMuMzM3NCA2LjM3NDQxIDMzLjE0MzQgNi4yMzk5OSAzMi45Mjg5IDYuMTQ2OTFDMzIuNzE0NSA2LjA1Mzgz'@;
put 'IDMyLjQ4MzggNi4wMDM5MSAzMi4yNSA2Wk0yNS45NCAxNi41OEwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4'@;
put 'LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjQgMTQuNjZDMjQuMTI2NyAxNC41MzMzIDI0LjI3NzIgMTQuNDMyNyAyNC40NDI4IDE0LjM2NDJDMjQuNjA4MyAxNC4yOTU2IDI0'@;
put 'Ljc4NTggMTQuMjYwMyAyNC45NjUgMTQuMjYwM0MyNS4xNDQyIDE0LjI2MDMgMjUuMzIxNyAxNC4yOTU2IDI1LjQ4NzMgMTQuMzY0MkMyNS42NTI4IDE0LjQzMjcgMjUuODAzMyAxNC41MzMzIDI1LjkzIDE0LjY2QzI2LjA1NjcgMTQuNzg2NyAyNi4xNTczIDE0LjkzNzIgMjYuMjI1OCAxNS4x'@;
put 'MDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwyNS45NCAxNi41OFoiLz4nLHNvbGlk'@;
put 'QWxlcnRlZDonPHBhdGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIyLjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMu'@;
put 'MDUxOSAzNC42MTM0IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUgMjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAy'@;
put 'Ny4xMzE5IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0yMS45NTk0IDZIMTIuMlY5QzEyLjIgOS41ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAx'@;
put 'MC45NjgyIDguNDQ0MzggMTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDggNy44MDAwMSA5VjZIMy44MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUy'@;
put 'NDczQzIuMzQ5ODEgNi42OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIuMDM5NzIgNy4zMzU2OSAxLjk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEg'@;
put 'Mi4zMzc1NyAzMS4yODk0IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4'@;
put 'OSAzMS44NTMxQzMzLjE0MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjE1LjAyNjNDMzMuODg4NiAxNS4wMzU0IDMz'@;
put 'Ljc3NjQgMTUuMDM4OSAzMy42NjM3IDE1LjAzNjdIMjYuMTk2NEMyNi4yMDY4IDE1LjA1ODQgMjYuMjE2NiAxNS4wODA0IDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMgMjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0IDE1Ljk4MTcg'@;
put 'MjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMgMTYuNTlMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMyIDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4w'@;
put 'MzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5OCAxMS45NTI3IDE4LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45IDE5TDE2LjI4IDIyLjM4TDIzLjYyMzMgMTUuMDM2N0gyMi4zMzk1QzIxLjE1NzcgMTUuMDYwNCAyMC4wMjMzIDE0LjQ0'@;
put 'ODkgMTkuNDIwNiAxMy4zODkzQzE4LjgyMDQgMTIuMzM0MiAxOC44NzAzIDExLjA0MjMgMTkuNTM2MiAxMC4wMzg3TDIxLjk1OTQgNloiLz48cGF0aCBkPSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIy'@;
put 'IDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNW'@;
put 'OUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0'@;
put 'NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAuODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAw'@;
put 'MSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEwNTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+PHBhdGggZD0iTTMwIDEzLjVDMjguMDEwOSAxMy41IDI2LjEwMzIgMTIuNzA5OCAyNC42OTY3IDExLjMw'@;
put 'MzNDMjMuMjkwMiA5Ljg5Njc4IDIyLjUgNy45ODkxMiAyMi41IDZIMTIuMlY5QzEyLjIgOS41ODM0OCAxMS45NjgyIDEwLjE0MzEgMTEuNTU1NiAxMC41NTU2QzExLjE0MzEgMTAuOTY4MiAxMC41ODM1IDExLjIgMTAgMTEuMkM5LjQxNjU0IDExLjIgOC44NTY5NiAxMC45NjgyIDguNDQ0Mzgg'@;
put 'MTAuNTU1NkM4LjAzMTggMTAuMTQzMSA3LjgwMDAxIDkuNTgzNDggNy44MDAwMSA5VjZIMy44MDAwMUMzLjU2MjA0IDUuOTk3MjkgMy4zMjU5MyA2LjA0MjMzIDMuMTA1NjcgNi4xMzI0NkMyLjg4NTQgNi4yMjI1OSAyLjY4NTQ1IDYuMzU1OTcgMi41MTc2MyA2LjUyNDczQzIuMzQ5ODEgNi42'@;
put 'OTM0OCAyLjIxNzUzIDYuODk0MTcgMi4xMjg2MyA3LjExNDkzQzIuMDM5NzIgNy4zMzU2OSAxLjk5NTk5IDcuNTcyMDQgMi4wMDAwMSA3LjgxVjMwLjE5QzEuOTk2MDQgMzAuNDIzOCAyLjAzODE2IDMwLjY1NiAyLjEyMzk2IDMwLjg3MzVDMi4yMDk3NiAzMS4wOTEgMi4zMzc1NyAzMS4yODk0'@;
put 'IDIuNTAwMDcgMzEuNDU3NUMyLjY2MjU4IDMxLjYyNTYgMi44NTY2MSAzMS43NiAzLjA3MTA4IDMxLjg1MzFDMy4yODU1NSAzMS45NDYyIDMuNTE2MjUgMzEuOTk2MSAzLjc1MDAxIDMySDMyLjI1QzMyLjQ4MzggMzEuOTk2MSAzMi43MTQ1IDMxLjk0NjIgMzIuOTI4OSAzMS44NTMxQzMzLjE0'@;
put 'MzQgMzEuNzYgMzMuMzM3NCAzMS42MjU2IDMzLjUgMzEuNDU3NUMzMy42NjI1IDMxLjI4OTQgMzMuNzkwMyAzMS4wOTEgMzMuODc2MSAzMC44NzM1QzMzLjk2MTkgMzAuNjU2IDM0LjAwNCAzMC40MjM4IDM0IDMwLjE5VjEyLjM0QzMyLjgwNDEgMTMuMDk5MSAzMS40MTY1IDEzLjUwMTUgMzAg'@;
put 'MTMuNVpNMjUuOTQgMTYuNThMMTYuMjcgMjYuMjVMMTEgMjAuOTRDMTAuNzY2NSAyMC42ODMyIDEwLjY0MDEgMjAuMzQ2OSAxMC42NDY1IDE5Ljk5OTlDMTAuNjUyOSAxOS42NTI5IDEwLjc5MTggMTkuMzIxNSAxMS4wMzQ2IDE5LjA3MzVDMTEuMjc3NSAxOC44MjU1IDExLjYwNTkgMTguNjc5'@;
put 'OCAxMS45NTI3IDE4LjY2NjFDMTIuMjk5NSAxOC42NTI1IDEyLjYzODQgMTguNzcxOSAxMi45IDE5TDE2LjI4IDIyLjM4TDI0IDE0LjY2QzI0LjEyNjcgMTQuNTMzMyAyNC4yNzcyIDE0LjQzMjcgMjQuNDQyOCAxNC4zNjQyQzI0LjYwODMgMTQuMjk1NiAyNC43ODU4IDE0LjI2MDMgMjQuOTY1'@;
put 'IDE0LjI2MDNDMjUuMTQ0MiAxNC4yNjAzIDI1LjMyMTcgMTQuMjk1NiAyNS40ODczIDE0LjM2NDJDMjUuNjUyOCAxNC40MzI3IDI1LjgwMzMgMTQuNTMzMyAyNS45MyAxNC42NkMyNi4wNTY3IDE0Ljc4NjcgMjYuMTU3MyAxNC45MzcyIDI2LjIyNTggMTUuMTAyN0MyNi4yOTQ0IDE1LjI2ODMg'@;
put 'MjYuMzI5NyAxNS40NDU4IDI2LjMyOTcgMTUuNjI1QzI2LjMyOTcgMTUuODA0MiAyNi4yOTQ0IDE1Ljk4MTcgMjYuMjI1OCAxNi4xNDczQzI2LjE1NzMgMTYuMzEyOCAyNi4wNTY3IDE2LjQ2MzMgMjUuOTMgMTYuNTlMMjUuOTQgMTYuNThaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEg'@;
put 'MzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLGtPZT1bImNhbGVuZGFyIix7b3V0bGluZTonPHBhdGggZD0iTTIyIDIwSDIwVjIySDIyVjIwWk0yMCAyNkgy'@;
put 'MlYyNEgyMFYyNlpNMjggMjRIMjZWMjZIMjhWMjRaTTI4IDIwSDI2VjIySDI4VjIwWk0yNyAxMkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEyIDI3IDEyWk0yMiAxNkgyMFYxOEgy'@;
put 'MlYxNlpNMjggMTZIMjZWMThIMjhWMTZaTTI0IDhIMTJWMTBIMjRWOFpNMTAgMTZIOFYxOEgxMFYxNlpNMTAgMjBIOFYyMkgxMFYyMFpNMTAgMjRIOFYyNkgxMFYyNFpNMzMuNSA4LjU0QzMzLjE3IDguMiAzMi43MiA4LjAxIDMyLjI1IDhIMzBWMTBIMzJWMzBINFYxMEg2VjhIMy43NUMzLjI4'@;
put 'IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAz'@;
put 'MC42NiAzNCAzMC4xOVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDguNTRaTTE0IDI2SDE2VjI0SDE0VjI2Wk0xNiAyMEgxNFYyMkgxNlYyMFpNMTYgMTZIMTRWMThIMTZWMTZaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41NSA0IDkgNEM4LjQ1IDQgOCA0'@;
put 'LjQ1IDggNVYxMUM4IDExLjU1IDguNDUgMTIgOSAxMloiLz4nLG91dGxpbmVBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYz'@;
put 'IDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1'@;
put 'MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTMyIDE1LjAzNjdIMzMuNjYzN0MzMy43NzYzIDE1LjAzODkgMzMuODg4NiAxNS4wMzU0IDM0IDE1LjAyNjNWMzAuMTlDMzQuMDEgMzAu'@;
put 'NjYgMzMuODMgMzEuMTIgMzMuNSAzMS40NkMzMy4xNyAzMS44IDMyLjcyIDMyIDMyLjI1IDMySDMuNzVDMy4yOCAzMS45OSAyLjgzIDMxLjggMi41IDMxLjQ2QzIuMTcgMzEuMTIgMiAzMC42NiAyIDMwLjE5VjkuODFDMiA5LjM0IDIuMTcgOC44OCAyLjUgOC41NEMyLjgzIDguMiAzLjI4IDgg'@;
put 'My43NSA4SDZWMTBINFYzMEgzMlYxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yMC43NTk0IDhMMTkuNTU5NCAxMEgxMlY4SDIwLjc1OTRaIi8+PHBhdGggZD0iTTIwIDIwSDIyVjIySDIwVjIwWiIvPjxwYXRoIGQ9Ik0yMiAyNkgyMFYyNEgyMlYyNloiLz48cGF0aCBkPSJNMjYgMjZWMjRIMjhWMjZI'@;
put 'MjZaIi8+PHBhdGggZD0iTTI2IDIyVjIwSDI4VjIySDI2WiIvPjxwYXRoIGQ9Ik0yMCAxNkgyMlYxOEgyMFYxNloiLz48cGF0aCBkPSJNMjYgMThWMTZIMjhWMThIMjZaIi8+PHBhdGggZD0iTTggMTZIMTBWMThIOFYxNloiLz48cGF0aCBkPSJNOCAyMEgxMFYyMkg4VjIwWiIvPjxwYXRoIGQ9'@;
put 'Ik04IDI0SDEwVjI2SDhWMjRaIi8+PHBhdGggZD0iTTE2IDI2SDE0VjI0SDE2VjI2WiIvPjxwYXRoIGQ9Ik0xNCAyMEgxNlYyMkgxNFYyMFoiLz48cGF0aCBkPSJNMTQgMTZIMTZWMThIMTRWMTZaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEu'@;
put 'NTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEwIDVWMTFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2'@;
put 'QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz48cGF0aCBkPSJNMjMuMjg5OSA4QzIzLjQ1OTQgOC41Njk2MyAyMy42OTk1IDkuMTA4ODcgMjQgOS42MDc1OVYxMEgxMlY4SDIzLjI4OTlaIi8+PHBhdGggZD0iTTM0IDExLjc0NTNDMzMuMzk2IDEyLjE2NjYgMzIuNzIyNCAxMi40OTUx'@;
put 'IDMyIDEyLjcxMDFWMzBINFYxMEg2VjhIMy43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMx'@;
put 'LjggMzMuNSAzMS40NkMzMy44MyAzMS4xMiAzNC4wMSAzMC42NiAzNCAzMC4xOVYxMS43NDUzWiIvPjxwYXRoIGQ9Ik0yMCAyMEgyMlYyMkgyMFYyMFoiLz48cGF0aCBkPSJNMjIgMjZIMjBWMjRIMjJWMjZaIi8+PHBhdGggZD0iTTI2IDI2VjI0SDI4VjI2SDI2WiIvPjxwYXRoIGQ9Ik0yNiAy'@;
put 'MlYyMEgyOFYyMkgyNloiLz48cGF0aCBkPSJNMjAgMTZIMjJWMThIMjBWMTZaIi8+PHBhdGggZD0iTTI2IDE4VjE2SDI4VjE4SDI2WiIvPjxwYXRoIGQ9Ik04IDE2SDEwVjE4SDhWMTZaIi8+PHBhdGggZD0iTTggMjBIMTBWMjJIOFYyMFoiLz48cGF0aCBkPSJNOCAyNEgxMFYyNkg4VjI0WiIv'@;
put 'PjxwYXRoIGQ9Ik0xNiAyNkgxNFYyNEgxNlYyNloiLz48cGF0aCBkPSJNMTQgMjBIMTZWMjJIMTRWMjBaIi8+PHBhdGggZD0iTTE0IDE2SDE2VjE4SDE0VjE2WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40'@;
put 'NSA0IDkgNEM5LjU1IDQgMTAgNC40NSAxMCA1VjExWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0yNyAxMkMyNy41NSAxMiAyOCAxMS41NSAyOCAxMVY1QzI4IDQuNDUgMjcuNTUgNCAyNyA0QzI2LjQ1IDQgMjYgNC40NSAyNiA1VjExQzI2IDExLjU1IDI2LjQ1IDEyIDI3IDEyWk0zMy41IDguNTRD'@;
put 'MzMuMTcgOC4yIDMyLjcyIDguMDEgMzIuMjUgOEgyOS4yVjExQzI5LjIgMTIuMjEgMjguMjEgMTMuMiAyNyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjhIMTEuMlYxMUMxMS4yIDEyLjIxIDEwLjIxIDEzLjIgOSAxMy4yQzcuNzkgMTMuMiA2LjggMTIuMjEgNi44IDExVjhI'@;
put 'My43NUMzLjI4IDggMi44MyA4LjIgMi41IDguNTRDMi4xNyA4Ljg4IDIgOS4zNCAyIDkuODFWMzAuMTlDMiAzMC42NiAyLjE3IDMxLjEyIDIuNSAzMS40NkMyLjgzIDMxLjggMy4yOCAzMS45OSAzLjc1IDMySDMyLjI1QzMyLjcyIDMyIDMzLjE3IDMxLjggMzMuNSAzMS40NkMzMy44MyAzMS4x'@;
put 'MiAzNC4wMSAzMC42NiAzNCAzMC4xOVY5LjgxQzM0IDkuMzQgMzMuODMgOC44OCAzMy41IDguNTRaTTEwLjEgMjYuMUg3LjlWMjMuOUgxMC4xVjI2LjFaTTEwLjEgMjIuMUg3LjlWMTkuOUgxMC4xVjIyLjFaTTEwLjEgMTguMUg3LjlWMTUuOUgxMC4xVjE4LjFaTTE2LjEgMjYuMUgxMy45VjIz'@;
put 'LjlIMTYuMVYyNi4xWk0xNi4xIDIyLjFIMTMuOVYxOS45SDE2LjFWMjIuMVpNMTYuMSAxOC4xSDEzLjlWMTUuOUgxNi4xVjE4LjFaTTIyLjEgMjYuMUgxOS45VjIzLjlIMjIuMVYyNi4xWk0yMi4xIDIyLjFIMTkuOVYxOS45SDIyLjFWMjIuMVpNMjIuMSAxOC4xSDE5LjlWMTUuOUgyMi4xVjE4'@;
put 'LjFaTTI4LjEgMjYuMUgyNS45VjIzLjlIMjguMVYyNi4xWk0yOC4xIDIyLjFIMjUuOVYxOS45SDI4LjFWMjIuMVpNMjguMSAxOC4xSDI1LjlWMTUuOUgyOC4xVjE4LjFaTTkgMTJDOS41NSAxMiAxMCAxMS41NSAxMCAxMVY1QzEwIDQuNDUgOS41NSA0IDkgNEM4LjQ1IDQgOCA0LjQ1IDggNVYx'@;
put 'MUM4IDExLjU1IDguNDUgMTIgOSAxMloiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTI2LjkwMzkgMS42NDYyMUwyMS4yMjIyIDExLjExNTlDMjAuOTUyNiAxMS40OTg0IDIwLjkyODEgMTEuOTk0OSAyMS4xNTg4IDEyLjQwMDVDMjEuMzg5NiAxMi44MDYgMjEuODM2MyAxMy4wNTE5IDIy'@;
put 'LjMxNDggMTMuMDM2N0gzMy42ODgxQzM0LjE2NjYgMTMuMDUxOSAzNC42MTM0IDEyLjgwNiAzNC44NDQxIDEyLjQwMDVDMzUuMDc0OCAxMS45OTQ5IDM1LjA1MDMgMTEuNDk4NCAzNC43ODA4IDExLjExNTlMMjkuMDk5MSAxLjY0NjIxQzI4Ljg3MTEgMS4yNjkxMyAyOC40NTMyIDEuMDM3MzUg'@;
put 'MjguMDAxNSAxLjAzNzM1QzI3LjU0OTcgMS4wMzczNSAyNy4xMzE5IDEuMjY5MTMgMjYuOTAzOSAxLjY0NjIxWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjAuNzU5NCA4TDE5LjUzNjIgMTAuMDM4N0MxOC44NzAzIDExLjA0MjMgMTguODIw'@;
put 'NCAxMi4zMzQyIDE5LjQyMDYgMTMuMzg5M0MyMC4wMjMzIDE0LjQ0ODkgMjEuMTU3NyAxNS4wNjA0IDIyLjMzOTUgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjMgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMSAzMC42NiAzMy44MyAzMS4xMiAzMy41IDMxLjQ2'@;
put 'QzMzLjE3IDMxLjggMzIuNzIgMzIgMzIuMjUgMzJIMy43NUMzLjI4IDMxLjk5IDIuODMgMzEuOCAyLjUgMzEuNDZDMi4xNyAzMS4xMiAyIDMwLjY2IDIgMzAuMTlWOS44MUMyIDkuMzQgMi4xNyA4Ljg4IDIuNSA4LjU0QzIuODMgOC4yIDMuMjggOCAzLjc1IDhINi44VjExQzYuOCAxMi4yMSA3'@;
put 'Ljc5IDEzLjIgOSAxMy4yQzEwLjIxIDEzLjIgMTEuMiAxMi4yMSAxMS4yIDExVjhIMjAuNzU5NFpNNy45IDIzLjlWMjYuMUgxMC4xVjIzLjlINy45Wk03LjkgMTkuOVYyMi4xSDEwLjFWMTkuOUg3LjlaTTcuOSAxNS45VjE4LjFIMTAuMVYxNS45SDcuOVpNMTMuOSAyNi4xSDE2LjFWMjMuOUgx'@;
put 'My45VjI2LjFaTTEzLjkgMjIuMUgxNi4xVjE5LjlIMTMuOVYyMi4xWk0xMy45IDE4LjFIMTYuMVYxNS45SDEzLjlWMTguMVpNMTkuOSAyNi4xSDIyLjFWMjMuOUgxOS45VjI2LjFaTTE5LjkgMjIuMUgyMi4xVjE5LjlIMTkuOVYyMi4xWk0xOS45IDE4LjFIMjIuMVYxNS45SDE5LjlWMTguMVpN'@;
put 'MjUuOSAyMy45VjI2LjFIMjguMVYyMy45SDI1LjlaTTI1LjkgMTkuOVYyMi4xSDI4LjFWMTkuOUgyNS45Wk0yNS45IDE1LjlWMTguMUgyOC4xVjE1LjlIMjUuOVoiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDgu'@;
put 'NDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLHNvbGlkQmFkZ2VkOic8cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAx'@;
put 'MSAzMCAxMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTM0IDExLjc0NTNDMzIuODY2MiAxMi41MzYyIDMxLjQ4NzIgMTMgMzAgMTNDMjkuNDA2MyAxMyAyOC44Mjk5IDEyLjkyNjEgMjguMjc5NCAxMi43ODdDMjcuOTE4MyAxMy4wNDY3IDI3'@;
put 'LjQ3NjIgMTMuMiAyNyAxMy4yQzI1Ljc5IDEzLjIgMjQuOCAxMi4yMSAyNC44IDExVjEwLjY4NjJDMjQuMTEyNiA5LjkyMzkzIDIzLjU5MDQgOS4wMDk3IDIzLjI4OTkgOEgxMS4yVjExQzExLjIgMTIuMjEgMTAuMjEgMTMuMiA5IDEzLjJDNy43OSAxMy4yIDYuOCAxMi4yMSA2LjggMTFWOEgz'@;
put 'Ljc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEy'@;
put 'IDM0LjAxIDMwLjY2IDM0IDMwLjE5VjExLjc0NTNaTTcuOSAyMy45VjI2LjFIMTAuMVYyMy45SDcuOVpNNy45IDE5LjlWMjIuMUgxMC4xVjE5LjlINy45Wk03LjkgMTUuOVYxOC4xSDEwLjFWMTUuOUg3LjlaTTEzLjkgMjYuMUgxNi4xVjIzLjlIMTMuOVYyNi4xWk0xMy45IDIyLjFIMTYuMVYx'@;
put 'OS45SDEzLjlWMjIuMVpNMTMuOSAxOC4xSDE2LjFWMTUuOUgxMy45VjE4LjFaTTE5LjkgMjYuMUgyMi4xVjIzLjlIMTkuOVYyNi4xWk0xOS45IDIyLjFIMjIuMVYxOS45SDE5LjlWMjIuMVpNMTkuOSAxOC4xSDIyLjFWMTUuOUgxOS45VjE4LjFaTTI1LjkgMjMuOVYyNi4xSDI4LjFWMjMuOUgy'@;
put 'NS45Wk0yNS45IDE5LjlWMjIuMUgyOC4xVjE5LjlIMjUuOVpNMjUuOSAxNS45VjE4LjFIMjguMVYxNS45SDI1LjlaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1IDEw'@;
put 'IDVWMTFaIi8+J31dLERPZT1bImZvbGRlci1vcGVuIix7b3V0bGluZTonPHBhdGggZD0iTTMzLjI2IDEzQzMzLjg0IDEyLjk5IDM0LjM4IDEzLjI2IDM0LjcxIDEzLjc0QzM1IDE0LjE2IDM1LjA4IDE0LjY5IDM0LjkyIDE1LjE4TDMwLjczIDMwLjI4QzMwLjYgMzAuNzIgMzAuMTkgMzEuMDIg'@;
put 'MjkuNzMgMzFINC40MUMzLjY2IDMxLjAyIDMuMDMgMzAuNDQgMyAyOS42OVY3QzMgNS45IDMuOSA1IDUgNUgxMS40OUMxMi4xMyA1IDEyLjczIDUuMyAxMy4xMSA1LjgyTDE1LjQyIDlIMjkuMzlDMzAuNDkgOSAzMS4zOSA5LjkgMzEuMzkgMTFIMTQuOTFDMTQuNTkgMTEgMTQuMjkgMTAuODUg'@;
put 'MTQuMSAxMC41OUwxMS40OSA3SDVWMjVMNy45MiAxNC42NkM3LjkyIDE0LjY2IDcuOTIgMTQuNTcgNy45MiAxNC41MkM4LjMyIDEzLjYzIDkuMTkgMTMuMDQgMTAuMTcgMTNIMzMuMjZaTTUuOSAyOUgyOC45NEwzMi44OCAxNC45NUgxMC4xNkMxMC4wMSAxNC45OCA5Ljg3IDE1LjA3IDkuNzgg'@;
put 'MTUuMTlMNS45IDI5WiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNy45MDQxIDEuNjQ2MjFMMjIuMjIyNCAxMS4xMTU5QzIxLjk1MjkgMTEuNDk4NCAyMS45Mjg0IDExLjk5NDkgMjIuMTU5MSAxMi40MDA1QzIyLjM4OTggMTIuODA2IDIyLjgzNjYgMTMuMDUxOSAyMy4zMTUgMTMu'@;
put 'MDM2N0gzNC42ODg0QzM1LjE2NjkgMTMuMDUxOSAzNS42MTM2IDEyLjgwNiAzNS44NDQzIDEyLjQwMDVDMzYuMDc1IDExLjk5NDkgMzYuMDUwNiAxMS40OTg0IDM1Ljc4MSAxMS4xMTU5TDMwLjA5OTMgMS42NDYyMUMyOS44NzEzIDEuMjY5MTMgMjkuNDUzNSAxLjAzNzM1IDI5LjAwMTcgMS4w'@;
put 'MzczNUMyOC41NSAxLjAzNzM1IDI4LjEzMjEgMS4yNjkxMyAyNy45MDQxIDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIwLjEwNTggMTFIMTQuOTEwMkMxNC41OTAyIDExIDE0LjI5MDIgMTAuODUgMTQuMTAwMiAxMC41OUwxMS40OTAyIDdINS4wMDAyNFYyNUw3LjkyMDI0IDE0LjY2VjE0LjUyQzgu'@;
put 'MzIwMjQgMTMuNjMgOS4xOTAyNCAxMy4wNCAxMC4xNzAyIDEzSDIwLjIzMjdDMjAuMjg2MSAxMy4xMzI2IDIwLjM0ODggMTMuMjYyNyAyMC40MjA4IDEzLjM4OTNDMjAuODgxNSAxNC4xOTkxIDIxLjY1MjcgMTQuNzQ3MiAyMi41MTgzIDE0Ljk1SDEwLjE2MDJDMTAuMDEwMiAxNC45OCA5Ljg3'@;
put 'MDI0IDE1LjA3IDkuNzgwMjQgMTUuMTlMNS45MDAyNCAyOUgyOC45NDAyTDMyLjg1NTkgMTUuMDM2N0gzNC42NjM5QzM0Ljc2MzYgMTUuMDM4NyAzNC44NjMgMTUuMDM2MiAzNC45NjE3IDE1LjAyOTJDMzQuOTUwMyAxNS4wNzk4IDM0LjkzNjUgMTUuMTMwMSAzNC45MjAyIDE1LjE4TDMwLjcz'@;
put 'MDIgMzAuMjhDMzAuNjAwMiAzMC43MiAzMC4xOTAyIDMxLjAyIDI5LjczMDIgMzFINC40MTAyNEMzLjY2MDI0IDMxLjAyIDMuMDMwMjQgMzAuNDQgMy4wMDAyNCAyOS42OVY3QzMuMDAwMjQgNS45IDMuOTAwMjQgNSA1LjAwMDI0IDVIMTEuNDkwMkMxMi4xMzAyIDUgMTIuNzMwMiA1LjMgMTMu'@;
put 'MTEwMiA1LjgyTDE1LjQyMDIgOUgyMS4xNTk3TDIwLjUzNjQgMTAuMDM4N0MyMC4zMzc4IDEwLjMzODEgMjAuMTkzOSAxMC42NjMyIDIwLjEwNTggMTFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzEgMTFDMzMuNzYxNCAxMSAzNiA4Ljc2MTQyIDM2IDZDMzYgMy4yMzg1OCAzMy43'@;
put 'NjE0IDEgMzEgMUMyOC4yMzg2IDEgMjYgMy4yMzg1OCAyNiA2QzI2IDguNzYxNDIgMjguMjM4NiAxMSAzMSAxMVoiLz48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTI2LjEwMSAxMUgxNC45MUMxNC41OSAxMSAxNC4yOSAxMC44NSAxNC4xIDEwLjU5'@;
put 'TDExLjQ5IDdINVYyNUw3LjkyIDE0LjY2VjE0LjUyQzguMzIgMTMuNjMgOS4xOSAxMy4wNCAxMC4xNyAxM0gzMy4yNkMzMy44NCAxMi45OSAzNC4zOCAxMy4yNiAzNC43MSAxMy43NEMzNSAxNC4xNiAzNS4wOCAxNC42OSAzNC45MiAxNS4xOEwzMC43MyAzMC4yOEMzMC42IDMwLjcyIDMwLjE5'@;
put 'IDMxLjAyIDI5LjczIDMxSDQuNDFDMy42NiAzMS4wMiAzLjAzIDMwLjQ0IDMgMjkuNjlWN0MzIDUuOSAzLjkgNSA1IDVIMTEuNDlDMTIuMTMgNSAxMi43MyA1LjMgMTMuMTEgNS44MkwxNS40MiA5SDI0LjY3MzZDMjUuMDI5NyA5Ljc0OTYgMjUuNTE1MSAxMC40MjU5IDI2LjEwMSAxMVpNMjgu'@;
put 'OTQgMjlINS45TDkuNzggMTUuMTlDOS44NyAxNS4wNyAxMC4wMSAxNC45OCAxMC4xNiAxNC45NUgzMi44OEwyOC45NCAyOVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzQuNzA1OCAxMy43NEMzNC4zNzQ0IDEzLjI2NDMgMzMuODIyMyAxMi45ODYgMzMuMjM3OSAxM0gxMC4yNTgzQzkuMjY5NTIg'@;
put 'MTMuMDQxNCA4LjM4ODU4IDEzLjYyOTMgNy45ODA2IDE0LjUyQzcuOTc3MjkgMTQuNTY2NiA3Ljk3NzI5IDE0LjYxMzQgNy45ODA2IDE0LjY2TDUuMDI0NjMgMjVWNy4wMDAwMUgxMS41OTQ2TDE0LjIzNjcgMTAuNTlDMTQuNDI3OSAxMC44NDg0IDE0LjczMjcgMTEuMDAwOCAxNS4wNTY3IDEx'@;
put 'SDMxLjM0NDlDMzEuMzQ0OSA5Ljg5NTQ0IDMwLjQzODQgOS4wMDAwMSAyOS4zMjAzIDkuMDAwMDFIMTUuNTczTDEzLjIzNDUgNS44MjAwMUMxMi44NTIyIDUuMzAzMTggMTIuMjQyNiA0Ljk5ODM1IDExLjU5NDYgNS4wMDAwMUg1LjAyNDYzQzMuOTA2NDYgNS4wMDAwMSAzIDUuODk1NDQgMyA3'@;
put 'LjAwMDAxVjI5LjY5QzMuMDMyODkgMzAuNDM4OSAzLjY2ODkxIDMxLjAyMjYgNC40MjczNyAzMUgyOS42NjQ0QzMwLjEyOTMgMzEuMDE4MyAzMC41NDY5IDMwLjcyMTMgMzAuNjc2OCAzMC4yOEwzNC45MTg0IDE1LjE4QzM1LjA3ODggMTQuNjkzNSAzNS4wMDAxIDE0LjE2MSAzNC43MDU4IDEz'@;
put 'Ljc0WiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjcuOTA0MSAxLjY0NjIxTDIyLjIyMjQgMTEuMTE1OUMyMS45NTI5IDExLjQ5ODQgMjEuOTI4NCAxMS45OTQ5IDIyLjE1OTEgMTIuNDAwNUMyMi4zODk4IDEyLjgwNiAyMi44MzY2IDEzLjA1MTkgMjMuMzE1IDEzLjAzNjdIMzQuNjg4'@;
put 'NEMzNS4xNjY5IDEzLjA1MTkgMzUuNjEzNiAxMi44MDYgMzUuODQ0MyAxMi40MDA1QzM2LjA3NSAxMS45OTQ5IDM2LjA1MDYgMTEuNDk4NCAzNS43ODEgMTEuMTE1OUwzMC4wOTkzIDEuNjQ2MjFDMjkuODcxMyAxLjI2OTEzIDI5LjQ1MzUgMS4wMzczNSAyOS4wMDE3IDEuMDM3MzVDMjguNTUg'@;
put 'MS4wMzczNSAyOC4xMzIxIDEuMjY5MTMgMjcuOTA0MSAxLjY0NjIxWiIvPjxwYXRoIGQ9Ik0yMC4yMzI1IDEzQzIwLjI4NTggMTMuMTMyNiAyMC4zNDg1IDEzLjI2MjcgMjAuNDIwNiAxMy4zODkzQzIxLjAyMzMgMTQuNDQ4OSAyMi4xNTc3IDE1LjA2MDQgMjMuMzM5NSAxNS4wMzY3SDM0LjY2'@;
put 'MzdDMzQuNzYyOSAxNS4wMzg3IDM0Ljg2MTggMTUuMDM2MiAzNC45NjAxIDE1LjAyOTNDMzQuOTQ4NyAxNS4wNzk5IDM0LjkzNDggMTUuMTMwMiAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42NjQ0IDMxSDQuNDI3MzdDMy42'@;
put 'Njg5MSAzMS4wMjI2IDMuMDMyODkgMzAuNDM4OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0IDMuOTA2NDYgNS4wMDAwMSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41NzMgOS4wMDAwMUgyMS4xNTk0'@;
put 'TDIwLjUzNjIgMTAuMDM4N0MyMC4zMzc1IDEwLjMzODEgMjAuMTkzNyAxMC42NjMyIDIwLjEwNTYgMTFIMTUuMDU2N0MxNC43MzI3IDExLjAwMDggMTQuNDI3OSAxMC44NDg0IDE0LjIzNjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2IDE0LjY2QzcuOTc3MjkgMTQu'@;
put 'NjEzNCA3Ljk3NzI5IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2OTUyIDEzLjA0MTQgMTAuMjU4MyAxM0gyMC4yMzI1WiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0zMSAxMUMzMy43NjE0IDExIDM2IDguNzYxNDIgMzYgNkMzNiAzLjIzODU4IDMzLjc2MTQg'@;
put 'MSAzMSAxQzI4LjIzODYgMSAyNiAzLjIzODU4IDI2IDZDMjYgOC43NjE0MiAyOC4yMzg2IDExIDMxIDExWiIvPjxwYXRoIGQ9Ik0yNC42NzM2IDkuMDAwMDFDMjUuMDI5NyA5Ljc0OTYxIDI1LjUxNTEgMTAuNDI1OSAyNi4xMDEgMTFIMTUuMDU2N0MxNC43MzI3IDExLjAwMDggMTQuNDI3OSAx'@;
put 'MC44NDg0IDE0LjIzNjcgMTAuNTlMMTEuNTk0NiA3LjAwMDAxSDUuMDI0NjNWMjVMNy45ODA2IDE0LjY2QzcuOTc3MjkgMTQuNjEzNCA3Ljk3NzI5IDE0LjU2NjYgNy45ODA2IDE0LjUyQzguMzg4NTggMTMuNjI5MyA5LjI2OTUyIDEzLjA0MTQgMTAuMjU4MyAxM0gzMy4yMzc5QzMzLjgyMjMg'@;
put 'MTIuOTg2IDM0LjM3NDQgMTMuMjY0MyAzNC43MDU4IDEzLjc0QzM1LjAwMDEgMTQuMTYxIDM1LjA3ODggMTQuNjkzNSAzNC45MTg0IDE1LjE4TDMwLjY3NjggMzAuMjhDMzAuNTQ2OSAzMC43MjEzIDMwLjEyOTMgMzEuMDE4MyAyOS42NjQ0IDMxSDQuNDI3MzdDMy42Njg5MSAzMS4wMjI2IDMu'@;
put 'MDMyODkgMzAuNDM4OSAzIDI5LjY5VjcuMDAwMDFDMyA1Ljg5NTQ0IDMuOTA2NDYgNS4wMDAwMSA1LjAyNDYzIDUuMDAwMDFIMTEuNTk0NkMxMi4yNDI2IDQuOTk4MzUgMTIuODUyMiA1LjMwMzE4IDEzLjIzNDUgNS44MjAwMUwxNS41NzMgOS4wMDAwMUgyNC42NzM2WiIvPid9XSxJT2U9WyJt'@;
put 'aW51cyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNiAxN0gxMEM5LjQ0NzcyIDE3IDkgMTcuNDQ3NyA5IDE4QzkgMTguNTUyMyA5LjQ0NzcyIDE5IDEwIDE5SDI2QzI2LjU1MjMgMTkgMjcgMTguNTUyMyAyNyAxOEMyNyAxNy40NDc3IDI2LjU1MjMgMTcgMjYgMTdaIi8+J31dLFJPZT1bInBsdXMi'@;
put 'LHtvdXRsaW5lOic8cGF0aCBkPSJNMjkuOTk5OSAxN0gxOC45OTk5VjZDMTguOTk5OSA1LjQ0NzcyIDE4LjU1MjIgNSAxNy45OTk5IDVDMTcuNDQ3NiA1IDE2Ljk5OTkgNS40NDc3MiAxNi45OTk5IDZWMTdINS45OTk5MkM1LjQ0NzY0IDE3IDQuOTk5OTIgMTcuNDQ3NyA0Ljk5OTkyIDE4QzQu'@;
put 'OTg5OTQgMTguMjYzIDUuMDk0MjcgMTguNTE3NCA1LjI4NiAxOC42OTc2QzUuNDc3NzMgMTguODc3OCA1LjczODA5IDE4Ljk2NjIgNS45OTk5MiAxOC45NEgxNi45OTk5VjMwQzE2Ljk5OTkgMzAuNTUyMyAxNy40NDc2IDMxIDE3Ljk5OTkgMzFDMTguNTUyMiAzMSAxOC45OTk5IDMwLjU1MjMg'@;
put 'MTguOTk5OSAzMFYxOUgyOS45OTk5QzMwLjU1MjIgMTkgMzAuOTk5OSAxOC41NTIzIDMwLjk5OTkgMThDMzAuOTk5OSAxNy40NDc3IDMwLjU1MjIgMTcgMjkuOTk5OSAxN1oiLz4nfV0sTE9lPVsiZXllLWhpZGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjQuNTQ5NSAyMC40MzAxQzI0LjgyOTQg'@;
put 'MTkuNjcwMSAyNC45ODkzIDE4Ljg2MDEgMjQuOTg5MyAxOC4wMDAxQzI0Ljk4OTMgMTQuMTQwMSAyMS44NTA4IDExLjAwMDEgMTcuOTkyNiAxMS4wMDAxQzE3LjEzMyAxMS4wMDAxIDE2LjMyMzMgMTEuMTYwMSAxNS41NjM3IDExLjQ0MDFMMTcuMjAyOSAxMy4wODAxQzE3LjQ2MjggMTMuMDQw'@;
put 'MSAxNy43MjI3IDEzLjAwMDEgMTcuOTkyNiAxMy4wMDAxQzIwLjc1MTMgMTMuMDAwMSAyMi45OTAyIDE1LjI0MDEgMjIuOTkwMiAxOC4wMDAxQzIyLjk5MDIgMTguMjcwMSAyMi45NTAyIDE4LjUzMDEgMjIuOTEwMyAxOC43OTAxTDI0LjU0OTUgMjAuNDMwMVpNMTcuOTkyNiA5LjAwMDA2QzIz'@;
put 'Ljk4OTggOS4wMDAwNiAyOS4zOTcyIDEyLjUyMDEgMzEuODk2IDE4LjAwMDFDMzAuODk2NSAyMC4xOTAxIDI5LjQyNzIgMjIuMDYwMSAyNy42NDggMjMuNTMwMUwyOS4wNjc0IDI0Ljk1MDFDMzEuMTI2NCAyMy4yMjAxIDMyLjgwNTYgMjAuOTkwMSAzMy45MTUxIDE4LjM5MDFDMzQuMDI1IDE4'@;
put 'LjE0MDEgMzQuMDI1IDE3Ljg2MDEgMzMuOTE1MSAxNy42MTAxQzMxLjE4NjQgMTEuMTYwMSAyNC45MzkzIDcuMDAwMDYgMTguMDAyNiA3LjAwMDA2QzE1Ljk3MzUgNy4wMDAwNiAxNC4wMDQ0IDcuMzcwMDYgMTIuMTY1MyA4LjAzMDA2TDEzLjc0NDYgOS42MTAwNkMxNS4xMDM5IDkuMjEwMDYg'@;
put 'MTYuNTMzMiA5LjAwMDA2IDE4LjAwMjYgOS4wMDAwNkgxNy45OTI2Wk0zLjcwOTI2IDIuMjkwMDZDMy4zMTk0NCAxLjkwMDA2IDIuNjc5NzQgMS45MDAwNiAyLjI4OTkyIDIuMjkwMDZDMS45MDAxIDIuNjgwMDYgMS45MDAxIDMuMzIwMDYgMi4yODk5MiAzLjcxMDA2TDguNDc3MDIgOS45MDAw'@;
put 'NkM1LjcwODMyIDExLjc0MDEgMy40NDkzOCAxNC4zODAxIDIuMDgwMDIgMTcuNjEwMUMxLjk3MDA3IDE3Ljg2MDEgMS45NzAwNyAxOC4xNDAxIDIuMDgwMDIgMTguMzkwMUM0LjgwODc0IDI0Ljg0MDEgMTEuMDU1OCAyOS4wMDAxIDE3Ljk5MjYgMjkuMDAwMUMyMC43NDEzIDI5LjAwMDEgMjMu'@;
put 'MzcgMjguMzQwMSAyNS43MTg5IDI3LjE1MDFMMzIuMjc1OSAzMy43MTAxQzMyLjQ3NTggMzMuOTEwMSAzMi43MjU3IDM0LjAwMDEgMzIuOTg1NSAzNC4wMDAxQzMzLjI0NTQgMzQuMDAwMSAzMy40OTUzIDMzLjkwMDEgMzMuNjk1MiAzMy43MTAxQzM0LjA4NSAzMy4zMjAxIDM0LjA4NSAzMi42'@;
put 'OTAxIDMzLjY5NTIgMzIuMzAwMUwzLjcwOTI2IDIuMjkwMDZaTTEzLjgzNDUgMTUuMjUwMUwyMC43NDEzIDIyLjE2MDFDMTkuOTUxNiAyMi42ODAxIDE5LjAxMjEgMjMuMDAwMSAxNy45OTI2IDIzLjAwMDFDMTUuMjMzOSAyMy4wMDAxIDEyLjk5NDkgMjAuNzYwMSAxMi45OTQ5IDE4LjAwMDFD'@;
put 'MTIuOTk0OSAxNi45ODAxIDEzLjMwNDggMTYuMDQwMSAxMy44MzQ1IDE1LjI1MDFaTTE3Ljk5MjYgMjcuMDAwMUMxMS45OTU0IDI3LjAwMDEgNi41ODc5MSAyMy40ODAxIDQuMDg5MDggMTguMDAwMUM1LjM2ODQ4IDE1LjE5MDEgNy40Mjc1MSAxMi45MTAxIDkuOTI2MzQgMTEuMzQwMUwxMi40'@;
put 'MDUyIDEzLjgyMDFDMTEuNTI1NiAxNC45OTAxIDEwLjk5NTggMTYuNDMwMSAxMC45OTU4IDE4LjAwMDFDMTAuOTk1OCAyMS44NjAxIDE0LjEzNDQgMjUuMDAwMSAxNy45OTI2IDI1LjAwMDFDMTkuNTYxOCAyNS4wMDAxIDIxLjAwMTIgMjQuNDcwMSAyMi4xNzA2IDIzLjU5MDFMMjQuMjI5NiAy'@;
put 'NS42NTAxQzIyLjMxMDUgMjYuNTIwMSAyMC4xOTE1IDI3LjAwMDEgMTcuOTkyNiAyNy4wMDAxWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xNy45OTI2IDkuMDAwMDZDMjMuOTg5OCA5LjAwMDA2IDI5LjM5NzIgMTIuNTIwMSAzMS44OTYgMTguMDAwMUMzMC44OTY1IDIwLjE5MDEgMjkuNDI3MiAy'@;
put 'Mi4wNjAxIDI3LjY0OCAyMy41MzAxTDI5LjA2NzQgMjQuOTUwMUMzMS4xMjY0IDIzLjIyMDEgMzIuODA1NiAyMC45OTAxIDMzLjkxNTEgMTguMzkwMUMzNC4wMjUgMTguMTQwMSAzNC4wMjUgMTcuODYwMSAzMy45MTUxIDE3LjYxMDFDMzEuMTg2NCAxMS4xNjAxIDI0LjkzOTMgNy4wMDAwNiAx'@;
put 'OC4wMDI2IDcuMDAwMDZDMTUuOTczNSA3LjAwMDA2IDE0LjAwNDQgNy4zNzAwNiAxMi4xNjUzIDguMDMwMDZMMTMuNzQ0NiA5LjYxMDA2QzE1LjEwMzkgOS4yMTAwNiAxNi41MzMyIDkuMDAwMDYgMTguMDAyNiA5LjAwMDA2SDE3Ljk5MjZaTTMuNzA5MjYgMi4yOTAwNkMzLjMxOTQ0IDEuOTAw'@;
put 'MDYgMi42Nzk3NCAxLjkwMDA2IDIuMjg5OTIgMi4yOTAwNkMxLjkwMDEgMi42ODAwNiAxLjkwMDEgMy4zMjAwNiAyLjI4OTkyIDMuNzEwMDZMOC40NzcwMiA5LjkwMDA2QzUuNzA4MzIgMTEuNzQwMSAzLjQ0OTM4IDE0LjM4MDEgMi4wODAwMiAxNy42MTAxQzEuOTcwMDcgMTcuODYwMSAxLjk3'@;
put 'MDA3IDE4LjE0MDEgMi4wODAwMiAxOC4zOTAxQzQuODA4NzQgMjQuODQwMSAxMS4wNTU4IDI5LjAwMDEgMTcuOTkyNiAyOS4wMDAxQzIwLjc0MTMgMjkuMDAwMSAyMy4zNyAyOC4zNDAxIDI1LjcxODkgMjcuMTUwMUwzMi4yNzU5IDMzLjcxMDFDMzIuNDc1OCAzMy45MTAxIDMyLjcyNTcgMzQu'@;
put 'MDAwMSAzMi45ODU1IDM0LjAwMDFDMzMuMjQ1NCAzNC4wMDAxIDMzLjQ5NTMgMzMuOTAwMSAzMy42OTUyIDMzLjcxMDFDMzQuMDg1IDMzLjMyMDEgMzQuMDg1IDMyLjY5MDEgMzMuNjk1MiAzMi4zMDAxTDMuNzA5MjYgMi4yOTAwNlpNMTcuOTkyNiAyNy4wMDAxQzExLjk5NTQgMjcuMDAwMSA2'@;
put 'LjU4NzkxIDIzLjQ4MDEgNC4wODkwOCAxOC4wMDAxQzUuMzY4NDggMTUuMTkwMSA3LjQyNzUxIDEyLjkxMDEgOS45MjYzNCAxMS4zNDAxTDEyLjQwNTIgMTMuODIwMUMxMS41MjU2IDE0Ljk5MDEgMTAuOTk1OCAxNi40MzAxIDEwLjk5NTggMTguMDAwMUMxMC45OTU4IDIxLjg2MDEgMTQuMTM0'@;
put 'NCAyNS4wMDAxIDE3Ljk5MjYgMjUuMDAwMUMxOS41NjE4IDI1LjAwMDEgMjEuMDAxMiAyNC40NzAxIDIyLjE3MDYgMjMuNTkwMUwyNC4yMjk2IDI1LjY1MDFDMjIuMzEwNSAyNi41MjAxIDIwLjE5MTUgMjcuMDAwMSAxNy45OTI2IDI3LjAwMDFaTTE1LjU2MzcgMTEuNDQwMUwyNC41NDk1IDIw'@;
put 'LjQzMDFDMjQuODI5NCAxOS42NzAxIDI0Ljk4OTMgMTguODYwMSAyNC45ODkzIDE4LjAwMDFDMjQuOTg5MyAxNC4xNDAxIDIxLjg1MDggMTEuMDAwMSAxNy45OTI2IDExLjAwMDFDMTcuMTMzIDExLjAwMDEgMTYuMzIzMyAxMS4xNjAxIDE1LjU2MzcgMTEuNDQwMVoiLz4nfV0sT09lPVsiZXll'@;
put 'Iix7b3V0bGluZTonPHBhdGggZD0iTTE3Ljk5NzYgMTFDMTQuMTM4MiAxMSAxMC45OTg3IDE0LjE0IDEwLjk5ODcgMThDMTAuOTk4NyAyMS44NiAxNC4xMzgyIDI1IDE3Ljk5NzYgMjVDMjEuODU3IDI1IDI0Ljk5NjUgMjEuODYgMjQuOTk2NSAxOEMyNC45OTY1IDE0LjE0IDIxLjg1NyAxMSAx'@;
put 'Ny45OTc2IDExWk0xNy45OTc2IDIzQzE1LjIzOCAyMyAxMi45OTgzIDIwLjc2IDEyLjk5ODMgMThDMTIuOTk4MyAxNS4yNCAxNS4yMzggMTMgMTcuOTk3NiAxM0MyMC43NTcxIDEzIDIyLjk5NjggMTUuMjQgMjIuOTk2OCAxOEMyMi45OTY4IDIwLjc2IDIwLjc1NzEgMjMgMTcuOTk3NiAyM1pN'@;
put 'MzMuOTE1MSAxNy42MUMzMS4xODU1IDExLjE3IDI0LjkzNjUgNyAxNy45OTc2IDdDMTEuMDU4NiA3IDQuODA5NjIgMTEuMTcgMi4wODAwNSAxNy42MUMxLjk3MDA2IDE3Ljg2IDEuOTcwMDYgMTguMTQgMi4wODAwNSAxOC4zOUM0LjgwOTYyIDI0Ljg0IDExLjA1ODYgMjkgMTcuOTk3NiAyOUMy'@;
put 'NC45MzY1IDI5IDMxLjE4NTUgMjQuODMgMzMuOTE1MSAxOC4zOUMzNC4wMjUxIDE4LjE0IDM0LjAyNTEgMTcuODYgMzMuOTE1MSAxNy42MVpNMTcuOTk3NiAyN0MxMS45OTg1IDI3IDYuNTg5MzQgMjMuNDggNC4wODk3MyAxOEM2LjU4OTM0IDEyLjUyIDExLjk5ODUgOSAxNy45OTc2IDlDMjMu'@;
put 'OTk2NiA5IDI5LjQwNTggMTIuNTIgMzEuOTA1NCAxOEMyOS40MDU4IDIzLjQ4IDIzLjk5NjYgMjcgMTcuOTk3NiAyN1oiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTcuOTk3NiAxMUMxNC4xMzgyIDExIDEwLjk5ODcgMTQuMTQgMTAuOTk4NyAxOEMxMC45OTg3IDIxLjg2IDE0LjEzODIgMjUgMTcu'@;
put 'OTk3NiAyNUMyMS44NTcgMjUgMjQuOTk2NSAyMS44NiAyNC45OTY1IDE4QzI0Ljk5NjUgMTQuMTQgMjEuODU3IDExIDE3Ljk5NzYgMTFaTTMzLjkxNTEgMTcuNjFDMzEuMTg1NSAxMS4xNyAyNC45MzY1IDcgMTcuOTk3NiA3QzExLjA1ODYgNyA0LjgwOTYyIDExLjE3IDIuMDgwMDUgMTcuNjFD'@;
put 'MS45NzAwNiAxNy44NiAxLjk3MDA2IDE4LjE0IDIuMDgwMDUgMTguMzlDNC44MDk2MiAyNC44NCAxMS4wNTg2IDI5IDE3Ljk5NzYgMjlDMjQuOTM2NSAyOSAzMS4xODU1IDI0LjgzIDMzLjkxNTEgMTguMzlDMzQuMDI1MSAxOC4xNCAzNC4wMjUxIDE3Ljg2IDMzLjkxNTEgMTcuNjFaTTE3Ljk5'@;
put 'NzYgMjdDMTEuOTk4NSAyNyA2LjU4OTM0IDIzLjQ4IDQuMDg5NzMgMThDNi41ODkzNCAxMi41MiAxMS45OTg1IDkgMTcuOTk3NiA5QzIzLjk5NjYgOSAyOS40MDU4IDEyLjUyIDMxLjkwNTQgMThDMjkuNDA1OCAyMy40OCAyMy45OTY2IDI3IDE3Ljk5NzYgMjdaIi8+J31dLFBPZT1bImVsbGlw'@;
put 'c2lzLXZlcnRpY2FsIix7b3V0bGluZTonPHBhdGggZD0iTTIxLjEwMDEgNC45QzIxLjEwMDEgNi41MDE2MyAxOS43NTcgNy44IDE4LjEwMDEgNy44QzE2LjQ0MzIgNy44IDE1LjEwMDEgNi41MDE2MyAxNS4xMDAxIDQuOUMxNS4xMDAxIDMuMjk4MzcgMTYuNDQzMiAyIDE4LjEwMDEgMkMxOS43'@;
put 'NTcgMiAyMS4xMDAxIDMuMjk4MzcgMjEuMTAwMSA0LjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMjAuOUMxOS43NTcgMjAuOSAyMS4xMDAxIDE5LjYwMTYgMjEuMTAwMSAxOEMyMS4xMDAxIDE2LjM5ODQgMTkuNzU3IDE1LjEgMTguMTAwMSAxNS4xQzE2LjQ0MzIgMTUuMSAxNS4xMDAxIDE2LjM5'@;
put 'ODQgMTUuMTAwMSAxOEMxNS4xMDAxIDE5LjYwMTYgMTYuNDQzMiAyMC45IDE4LjEwMDEgMjAuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAzNEMxOS43NTcgMzQgMjEuMTAwMSAzMi43MDE2IDIxLjEwMDEgMzEuMUMyMS4xMDAxIDI5LjQ5ODQgMTkuNzU3IDI4LjIgMTguMTAwMSAyOC4yQzE2LjQ0'@;
put 'MzIgMjguMiAxNS4xMDAxIDI5LjQ5ODQgMTUuMTAwMSAzMS4xQzE1LjEwMDEgMzIuNzAxNiAxNi40NDMyIDM0IDE4LjEwMDEgMzRaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMjEuMTAwMSA0LjlDMjEuMTAwMSA2LjUwMTYzIDE5Ljc1NyA3LjggMTguMTAwMSA3LjhDMTYuNDQzMiA3'@;
put 'LjggMTUuMTAwMSA2LjUwMTYzIDE1LjEwMDEgNC45QzE1LjEwMDEgMy4yOTgzNyAxNi40NDMyIDIgMTguMTAwMSAyQzE5Ljc1NyAyIDIxLjEwMDEgMy4yOTgzNyAyMS4xMDAxIDQuOVoiLz48cGF0aCBkPSJNMTguMTAwMSAyMC45QzE5Ljc1NyAyMC45IDIxLjEwMDEgMTkuNjAxNiAyMS4xMDAx'@;
put 'IDE4QzIxLjEwMDEgMTYuMzk4NCAxOS43NTcgMTUuMSAxOC4xMDAxIDE1LjFDMTYuNDQzMiAxNS4xIDE1LjEwMDEgMTYuMzk4NCAxNS4xMDAxIDE4QzE1LjEwMDEgMTkuNjAxNiAxNi40NDMyIDIwLjkgMTguMTAwMSAyMC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDM0QzE5Ljc1NyAzNCAyMS4x'@;
put 'MDAxIDMyLjcwMTYgMjEuMTAwMSAzMS4xQzIxLjEwMDEgMjkuNDk4NCAxOS43NTcgMjguMiAxOC4xMDAxIDI4LjJDMTYuNDQzMiAyOC4yIDE1LjEwMDEgMjkuNDk4NCAxNS4xMDAxIDMxLjFDMTUuMTAwMSAzMi43MDE2IDE2LjQ0MzIgMzQgMTguMTAwMSAzNFoiLz48cGF0aCBkPSJNMzAgMTFD'@;
put 'MzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sRk9lPVsidmlldy1jb2x1bW5zIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVu'@;
put 'b2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMSA1SDVDMy44OTU0MyA1IDMgNS44OTU0MyAzIDdWMjlDMyAzMC4xMDQ2IDMuODk1NDMgMzEgNSAzMUgzMUMzMi4xMDQ2IDMxIDMzIDMwLjEwNDYgMzMgMjlWN0MzMyA1Ljg5NTQzIDMyLjEwNDYgNSAzMSA1Wk0xMyAyOUg1VjdIMTNWMjla'@;
put 'TTE1IDI5SDIzVjdIMTVWMjlaIi8+J31dLEhPZT1bImFycm93Iix7b3V0bGluZTonPHBhdGggZD0iTTI3LjY1MDQgMTUuNjM0MUwxNy45OTUxIDZMOC4zMzk4MSAxNS42MzQxQzguMDI4NjkgMTUuODcxNyA3Ljg4NDMyIDE2LjI2OTUgNy45NzAzIDE2LjY1MjFDOC4wNTYyOSAxNy4wMzQ3IDgu'@;
put 'MzU2ODUgMTcuMzMxOSA4LjczOTUyIDE3LjQxMjdDOS4xMjIxOSAxNy40OTM1IDkuNTE2NjcgMTcuMzQzIDkuNzQ5MTIgMTcuMDI3NkwxNi45OTU2IDkuODE5NTVWMjguOTk3NUMxNi45OTU2IDI5LjU1MTIgMTcuNDQzMSAzMCAxNy45OTUxIDMwQzE4LjU0NzEgMzAgMTguOTk0NiAyOS41NTEy'@;
put 'IDE4Ljk5NDYgMjguOTk3NVY5LjgxOTU1TDI2LjI0MTEgMTcuMDI3NkMyNi42MzMgMTcuNDE3OSAyNy4yNjYyIDE3LjQxNTcgMjcuNjU1NCAxNy4wMjI2QzI4LjA0NDUgMTYuNjI5NSAyOC4wNDIzIDE1Ljk5NDMgMjcuNjUwNCAxNS42MDRWMTUuNjM0MVoiLz4nfV0sTk9lPVsic3RlcC1mb3J3'@;
put 'YXJkLTIiLHtvdXRsaW5lOic8cGF0aCBkPSJNNy4wODg5MyA2LjUyMDAzQzYuOTI2NDMgNi42NzY0NSA2Ljc5NzM0IDYuODYzMTUgNi43MDkyMSA3LjA2OTIxQzYuNjIxMDggNy4yNzUyNiA2LjU3NTY4IDcuNDk2NTIgNi41NzU2OCA3LjcyMDAzQzYuNTc1NjggNy45NDM1MyA2LjYyMTA4IDgu'@;
put 'MTY0NzkgNi43MDkyMSA4LjM3MDg1QzYuNzk3MzQgOC41NzY5IDYuOTI2NDMgOC43NjM2MSA3LjA4ODkzIDguOTIwMDNMMTYuNjg3MiAxOEw3LjEyOTY0IDI3LjA4QzYuODI5NzcgMjcuMzk5MSA2LjY2NTU0IDI3LjgxODggNi42NzA2NSAyOC4yNTNDNi42NzU3NiAyOC42ODcyIDYuODQ5ODIg'@;
put 'MjkuMTAzMSA3LjE1NzEyIDI5LjQxNTJDNy40NjQ0MiAyOS43Mjc0IDcuODgxNjYgMjkuOTEyMSA4LjMyMzIzIDI5LjkzMTZDOC43NjQ4IDI5Ljk1MTEgOS4xOTcyMSAyOS44MDM4IDkuNTMxNzYgMjkuNTJMMjEuNjY0NSAxOEw5LjUzMTc2IDYuNDcwMDNDOS4zNjg1MSA2LjMxNDgyIDkuMTc1'@;
put 'NTkgNi4xOTI5MyA4Ljk2NDEzIDYuMTExMzdDOC43NTI2NyA2LjAyOTgyIDguNTI2ODYgNS45OTAyMiA4LjI5OTc0IDUuOTk0ODdDOC4wNzI2MiA1Ljk5OTUyIDcuODQ4NjkgNi4wNDgzMiA3LjY0MDg3IDYuMTM4NDZDNy40MzMwNSA2LjIyODU5IDcuMjQ1NDYgNi4zNTgyOCA3LjA4ODkzIDYu'@;
put 'NTIwMDNaIi8+PHBhdGggZD0iTTI2Ljg0NTMgNUMyNi4zODY0IDUgMjUuOTQ2MyA1LjE3OTExIDI1LjYyMTggNS40OTc5MkMyNS4yOTczIDUuODE2NzMgMjUuMTE1IDYuMjQ5MTMgMjUuMTE1IDYuN1YyOS4zQzI1LjExNSAyOS43NTA5IDI1LjI5NzMgMzAuMTgzMyAyNS42MjE4IDMwLjUwMjFD'@;
put 'MjUuOTQ2MyAzMC44MjA5IDI2LjM4NjQgMzEgMjYuODQ1MyAzMUMyNy4zMDQzIDMxIDI3Ljc0NDQgMzAuODIwOSAyOC4wNjg5IDMwLjUwMjFDMjguMzkzNCAzMC4xODMzIDI4LjU3NTcgMjkuNzUwOSAyOC41NzU3IDI5LjNWNi43QzI4LjU3NTcgNi4yNDkxMyAyOC4zOTM0IDUuODE2NzMgMjgu'@;
put 'MDY4OSA1LjQ5NzkyQzI3Ljc0NDQgNS4xNzkxMSAyNy4zMDQzIDUgMjYuODQ1MyA1WiIvPid9XSxWT2U9WyJmaWx0ZXItZ3JpZC1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0'@;
put 'NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAx'@;
put 'OEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyMS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAyMS43MTMgMzIgMTggMzJaTTE3IDI2Ljg2TDE1IDI1Ljg2VjIwLjY4TDguNDIgMTRDOC4xNTY3OSAxMy43'@;
put 'MzMgOC4wMDY0IDEzLjM3NDkgOCAxM1YxMkM4IDExLjQ0NzcgOC40NDc3MiAxMSA5IDExSDI3QzI3LjU1MjMgMTEgMjggMTEuNDQ3NyAyOCAxMlYxM0MyNy45OTM2IDEzLjM3NDkgMjcuODQzMiAxMy43MzMgMjcuNTggMTRMMjEgMjAuNjhWMjlMMTkgMjhMMTkuMDMgMjAuMjdDMTkuMDMxMSAy'@;
put 'MC4wMDc3IDE5LjEzNTMgMTkuNzU2MyAxOS4zMiAxOS41N0wyNS43OSAxM0gxMC4yM0wxNi43MSAxOS41N0MxNi44OTQ3IDE5Ljc1NjMgMTYuOTk4OSAyMC4wMDc3IDE3IDIwLjI3VjI2Ljg2WiIvPicsc29saWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2Rk'@;
put 'IiBkPSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJa'@;
put 'TTE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDIxLjcxMyAzMC41MjUgMjUuMjc0IDI3Ljg5OTUgMjcuODk5NUMyNS4yNzQgMzAuNTI1IDIxLjcxMyAzMiAxOCAzMlpNOCAxMi4xMlYxMUgyNy45'@;
put 'OFYxMi4xNEMyNy45NzgxIDEyLjI3MTkgMjcuOTI0MiAxMi4zOTc3IDI3LjgzIDEyLjQ5TDIwLjcxIDE5Ljc0QzIwLjYwODEgMTkuODI5OSAyMC41NDM4IDE5Ljk1NDggMjAuNTMgMjAuMDlWMjguNDhDMjAuNTMwMyAyOC42NTI4IDIwLjQ0MTUgMjguODEzNCAyMC4yOTUgMjguOTA1QzIwLjE0'@;
put 'ODUgMjguOTk2NiAxOS45NjUxIDI5LjAwNiAxOS44MSAyOC45M0wxNS44NiAyNy41MkMxNS42ODgzIDI3LjQzNTkgMTUuNTc5NiAyNy4yNjEyIDE1LjU4IDI3LjA3VjIwLjE4QzE1LjU3ODEgMjAuMDQ4MSAxNS41MjQyIDE5LjkyMjMgMTUuNDMgMTkuODNMOC4xNSAxMi40N0M4LjA1NTc5IDEy'@;
put 'LjM3NzcgOC4wMDE4OCAxMi4yNTE5IDggMTIuMTJaIi8+J31dLEJPZT1bImZpbHRlci1ncmlkIix7b3V0bGluZTonPHBhdGggZD0iTTE1IDIzLjg2TDE3IDI0Ljg2VjE4LjI3QzE2Ljk5ODkgMTguMDA3NyAxNi44OTQ3IDE3Ljc1NjMgMTYuNzEgMTcuNTdMMTAuMjMgMTFIMjUuNzlMMTkuMzIg'@;
put 'MTcuNTdDMTkuMTM1MyAxNy43NTYzIDE5LjAzMTEgMTguMDA3NyAxOS4wMyAxOC4yN0wxOSAyNkwyMSAyN1YxOC42OEwyNy41OCAxMkMyNy44NDMyIDExLjczMyAyNy45OTM2IDExLjM3NDkgMjggMTFWMTBDMjggOS40NDc3MiAyNy41NTIzIDkgMjcgOUg5QzguNDQ3NzIgOSA4IDkuNDQ3NzIg'@;
put 'OCAxMFYxMUM4LjAwNjQgMTEuMzc0OSA4LjE1Njc5IDExLjczMyA4LjQyIDEyTDE1IDE4LjY4VjIzLjg2WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04IDlWMTAuMTIxMkM4LjAwMTg4IDEwLjI1MzIgOC4wNTU4NSAxMC4zNzkxIDguMTUwMTUgMTAuNDcxNkwxNS40Mzc0IDE3LjgzOTNDMTUuNTMx'@;
put 'NyAxNy45MzE3IDE1LjU4NTcgMTguMDU3NyAxNS41ODc2IDE4LjE4OTdWMjUuMDg3QzE1LjU4NzIgMjUuMjc4NCAxNS42OTYgMjUuNDUzMiAxNS44Njc5IDI1LjUzNzVMMTkuODIxOCAyNi45NDg5QzE5Ljk3NzEgMjcuMDI1IDIwLjE2MDcgMjcuMDE1NiAyMC4zMDczIDI2LjkyMzlDMjAuNDUz'@;
put 'OSAyNi44MzIzIDIwLjU0MjkgMjYuNjcxNCAyMC41NDI1IDI2LjQ5ODVWMTguMDk5NkMyMC41NTY0IDE3Ljk2NDMgMjAuNjIwNyAxNy44MzkyIDIwLjcyMjcgMTcuNzQ5MkwyNy44NDk4IDEwLjQ5MTZDMjcuOTQ0MiAxMC4zOTkyIDI3Ljk5ODEgMTAuMjczMiAyOCAxMC4xNDEyVjlIOFoiLz4n'@;
put 'fV0sb1k9WyJlcnJvci1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAyMi42MUMxNy40NDc3IDIyLjYxIDE3IDIyLjE2MjMgMTcgMjEuNjFWOS42MUMxNyA5LjA1NzcyIDE3LjQ0NzcgOC42MSAxOCA4LjYxQzE4LjU1MjMgOC42MSAxOSA5LjA1NzcyIDE5IDkuNjFWMjEuNjFDMTkg'@;
put 'MjIuMTYyMyAxOC41NTIzIDIyLjYxIDE4IDIyLjYxWiIvPjxwYXRoIGQ9Ik0xOS4zMyAyNi4wNkMxOS4zMyAyNi43OTQ1IDE4LjczNDUgMjcuMzkgMTggMjcuMzlDMTcuMjY1NSAyNy4zOSAxNi42NyAyNi43OTQ1IDE2LjY3IDI2LjA2QzE2LjY3IDI1LjMyNTUgMTcuMjY1NSAyNC43MyAxOCAy'@;
put 'NC43M0MxOC43MzQ1IDI0LjczIDE5LjMzIDI1LjMyNTUgMTkuMzMgMjYuMDZaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzIyLjI0MzUgMzQgMjYuMzEzMSAzMi4zMTQzIDI5LjMxMzcg'@;
put 'MjkuMzEzN0MzMi4zMTQzIDI2LjMxMzEgMzQgMjIuMjQzNSAzNCAxOEMzNCA5LjE2MzQ0IDI2LjgzNjYgMiAxOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOFpNNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyNS43MzIgMjUuNzMyIDMy'@;
put 'IDE4IDMyQzEwLjI2OCAzMiA0IDI1LjczMiA0IDE4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYuMzEgMzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQgMjIuMjQgMzQgMThDMzQgOS4x'@;
put 'NiAyNi44NCAyIDE4IDJaTTE3IDkuNjFDMTcgOS4wNiAxNy40NSA4LjYxIDE4IDguNjFDMTguNTUgOC42MSAxOSA5LjA2IDE5IDkuNjFWMjEuNjFDMTkgMjIuMTYgMTguNTUgMjIuNjEgMTggMjIuNjFDMTcuNDUgMjIuNjEgMTcgMjIuMTYgMTcgMjEuNjFWOS42MVpNMTggMjcuMjZDMTcuMzQg'@;
put 'MjcuMjYgMTYuOCAyNi43MiAxNi44IDI2LjA2QzE2LjggMjUuNCAxNy4zNCAyNC44NiAxOCAyNC44NkMxOC42NiAyNC44NiAxOS4yIDI1LjQgMTkuMiAyNi4wNkMxOS4yIDI2LjcyIDE4LjY2IDI3LjI2IDE4IDI3LjI2WiIvPid9XSxqT2U9WyJoZWxwIix7b3V0bGluZTonPHBhdGggZmlsbC1y'@;
put 'dWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yIDE4QzIgOS4xNjM0NCA5LjE2MzQ0IDIgMTggMkMyMi4yNDM1IDIgMjYuMzEzMSAzLjY4NTcxIDI5LjMxMzcgNi42ODYyOUMzMi4zMTQzIDkuNjg2ODcgMzQgMTMuNzU2NSAzNCAxOEMzNCAyNi44MzY2IDI2LjgzNjYgMzQg'@;
put 'MTggMzRDOS4xNjM0NCAzNCAyIDI2LjgzNjYgMiAxOFpNNCAxOEM0IDI1LjczMiAxMC4yNjggMzIgMTggMzJDMjEuNzEzIDMyIDI1LjI3NCAzMC41MjUgMjcuODk5NSAyNy44OTk1QzMwLjUyNSAyNS4yNzQgMzIgMjEuNzEzIDMyIDE4QzMyIDEwLjI2OCAyNS43MzIgNCAxOCA0QzEwLjI2OCA0'@;
put 'IDQgMTAuMjY4IDQgMThaTTE4LjI5IDguOTJDMTYuMDk2MSA4Ljg4Mzc0IDEzLjk5OTggOS44MjU2IDEyLjU3IDExLjQ5QzEyLjM3MTggMTEuNjczNyAxMi4yNTYzIDExLjkyOTggMTIuMjUgMTIuMkMxMi4yNDk5IDEyLjQ0OTMgMTIuMzUwOSAxMi42ODggMTIuNTMgMTIuODYxNEMxMi43MDkx'@;
put 'IDEzLjAzNDggMTIuOTUwOCAxMy4xMjgxIDEzLjIgMTMuMTJDMTMuNDY0MiAxMy4xMTM1IDEzLjcxNjggMTMuMDEwMyAxMy45MSAxMi44M0MxNC45OTE2IDExLjU2MjUgMTYuNTczNyAxMC44MzE3IDE4LjI0IDEwLjgzQzIwLjYgMTAuODMgMjIuMDcgMTIuMzUgMjIuMDcgMTQuMjRWMTQuMjlD'@;
put 'MjIuMDcgMTYuNSAyMC4zMSAxNy43MyAxNy41MyAxNy45NEMxNy4zMDIzIDE3Ljk0ODggMTcuMDg5MiAxOC4wNTQyIDE2Ljk0NDEgMTguMjI5OUMxNi43OTkgMTguNDA1NiAxNi43MzU3IDE4LjYzNDggMTYuNzcgMTguODZWMjEuNjFDMTYuODIxNSAyMi4xMjI5IDE3LjI1NDUgMjIuNTEyNiAx'@;
put 'Ny43NyAyMi41MUgxNy44OEMxOC4zOTI5IDIyLjQ1ODUgMTguNzgyNiAyMi4wMjU1IDE4Ljc4IDIxLjUxVjE5LjQ1QzIxLjc4IDE5LjAzIDI0LjIxIDE3LjQ1IDI0LjIxIDE0LjE3VjE0LjEyQzI0LjE4IDExLjEyIDIxLjg0IDguOTIgMTguMjkgOC45MlpNMTkuMDMgMjYuMkMxOS4wMyAyNi44'@;
put 'OTA0IDE4LjQ3MDQgMjcuNDUgMTcuNzggMjcuNDVDMTcuMDg5NiAyNy40NSAxNi41MyAyNi44OTA0IDE2LjUzIDI2LjJDMTYuNTMgMjUuNTA5NiAxNy4wODk2IDI0Ljk1IDE3Ljc4IDI0Ljk1QzE4LjQ3MDQgMjQuOTUgMTkuMDMgMjUuNTA5NiAxOS4wMyAyNi4yWiIvPicsb3V0bGluZUJhZGdl'@;
put 'ZDonPHBhdGggZD0iTTMzLjAwMTMgMTIuNzY4OUMzMi4zOTU5IDEzLjA0NjIgMzEuNzU1OSAxMy4yNDA2IDMxLjA5ODYgMTMuMzQ2N0MzMy4yNjM2IDE5LjUxMDggMzAuODc2MyAyNi4zNTI4IDI1LjM0NjUgMjkuODMyQzE5LjgxNjcgMzMuMzExMiAxMi42MTU0IDMyLjUwMiA3Ljk5NTY5IDI3'@;
put 'Ljg4MjJDMy4zNzU5NyAyMy4yNjI1IDIuNTY2NzQgMTYuMDYxMyA2LjA0NTkyIDEwLjUzMTVDOS41MjUwOSA1LjAwMTYyIDE2LjM2NzEgMi42MTQyOSAyMi41MzEyIDQuNzc5MzhDMjIuNjM3NSA0LjEyMjA1IDIyLjgzMTggMy40ODIwNCAyMy4xMDkgMi44NzY2M0MxNi4wNjQ5IDAuNDQwOTQ2'@;
put 'IDguMjcxOTkgMy4xOTIwNSA0LjMxODIzIDkuNTEwMjlDMC4zNjQ0NzYgMTUuODI4NSAxLjI5NzM2IDI0LjAzOTkgNi41Njc2NyAyOS4zMTAzQzExLjgzOCAzNC41ODA2IDIwLjA0OTQgMzUuNTEzNSAyNi4zNjc2IDMxLjU1OTdDMzIuNjg1OSAyNy42MDU5IDM1LjQzNyAxOS44MTMxIDMzLjAw'@;
put 'MTMgMTIuNzY4OVoiLz48cGF0aCBkPSJNMTcuNzE5NiAyNy4zNTMzQzE4LjQwNzMgMjcuMzUzMyAxOC45NjQ4IDI2Ljc5NTggMTguOTY0OCAyNi4xMDgxQzE4Ljk2NDggMjUuNDIwMyAxOC40MDczIDI0Ljg2MjggMTcuNzE5NiAyNC44NjI4QzE3LjAzMTggMjQuODYyOCAxNi40NzQzIDI1LjQy'@;
put 'MDMgMTYuNDc0MyAyNi4xMDgxQzE2LjQ3NDMgMjYuNzk1OCAxNy4wMzE4IDI3LjM1MzMgMTcuNzE5NiAyNy4zNTMzWiIvPjxwYXRoIGQ9Ik0yNC4wOTUzIDE0LjA3MzlWMTQuMTIzOEMyNC4wOTUzIDE3LjM5MTMgMjEuNjc0NSAxOC45MzU0IDE4LjcyNTcgMTkuMzgzN1YyMS40MzU5QzE4Ljcy'@;
put 'ODMgMjEuOTQ5NCAxOC4zNDAxIDIyLjM4MDcgMTcuODI5MSAyMi40MzIxSDE3LjcxOTZDMTcuMjA2IDIyLjQzNDcgMTYuNzc0NyAyMi4wNDY1IDE2LjcyMzMgMjEuNTM1NVYxOC43OTU5QzE2LjY4OTEgMTguNTcxNiAxNi43NTIyIDE4LjM0MzIgMTYuODk2OCAxOC4xNjgyQzE3LjA0MTMgMTcu'@;
put 'OTkzMiAxNy4yNTM3IDE3Ljg4ODIgMTcuNDgwNSAxNy44Nzk0QzIwLjI0OTkgMTcuNjcwMiAyMi4wMDMyIDE2LjQ0NDkgMjIuMDAzMiAxNC4yNDMzVjE0LjE5MzVDMjIuMDAzMiAxMi4zMTA3IDIwLjUzODggMTAuNzk2NCAxOC4xODc4IDEwLjc5NjRDMTYuNTI3OCAxMC43OTgyIDE0Ljk1MTcg'@;
put 'MTEuNTI2MSAxMy44NzQyIDEyLjc4ODhDMTMuNjgxNyAxMi45Njg0IDEzLjQzMDEgMTMuMDcxMiAxMy4xNjY5IDEzLjA3NzdDMTIuOTE4NyAxMy4wODU4IDEyLjY3NzggMTIuOTkyOSAxMi40OTk0IDEyLjgyMDFDMTIuMzIxIDEyLjY0NzMgMTIuMjIwNCAxMi40MDk2IDEyLjIyMDUgMTIuMTYx'@;
put 'MkMxMi4yMjY4IDExLjg5MjEgMTIuMzQxOCAxMS42MzY5IDEyLjUzOTMgMTEuNDUzOUMxMy45NjM3IDkuNzk1ODUgMTYuMDUyIDguODU3NTcgMTguMjM3NiA4Ljg5MzY5QzIxLjc2NDEgOC44OTM2OSAyNC4wOTUzIDExLjA4NTMgMjQuMDk1MyAxNC4wNzM5WiIvPjxwYXRoIGQ9Ik0zMCAxMUMz'@;
put 'Mi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPicsc29saWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBk'@;
put 'PSJNMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThDMiAyNi44MzY2IDkuMTYzNDQgMzQgMTggMzRDMjYuODM2NiAzNCAzNCAyNi44MzY2IDM0IDE4QzM0IDEzLjc1NjUgMzIuMzE0MyA5LjY4Njg3IDI5LjMxMzcgNi42ODYyOUMyNi4zMTMxIDMuNjg1NzEgMjIuMjQzNSAyIDE4IDJaTTE3'@;
put 'Ljc4IDI3Ljg1QzE3LjExMjYgMjcuODUgMTYuNTExIDI3LjQ0OCAxNi4yNTU2IDI2LjgzMTRDMTYuMDAwMiAyNi4yMTQ5IDE2LjE0MTQgMjUuNTA1MiAxNi42MTMzIDI1LjAzMzNDMTcuMDg1MiAyNC41NjE0IDE3Ljc5NDkgMjQuNDIwMiAxOC40MTE0IDI0LjY3NTZDMTkuMDI4IDI0LjkzMSAx'@;
put 'OS40MyAyNS41MzI2IDE5LjQzIDI2LjJDMTkuNDMgMjcuMTExMyAxOC42OTEzIDI3Ljg1IDE3Ljc4IDI3Ljg1Wk0xOS4xNSAyMS41MVYxOS43OUMyMi42MSAxOS4yIDI0LjU4IDE3LjE2IDI0LjU4IDE0LjExQzI0LjU4IDEwLjgxIDIyIDguNTEgMTguMyA4LjUxQzE2LjAwMDUgOC40NzQ1MiAx'@;
put 'My44MDMzIDkuNDU5NTYgMTIuMyAxMS4yQzEyLjAzMDQgMTEuNDYzNiAxMS44NzU5IDExLjgyMyAxMS44NyAxMi4yQzExLjg4MyAxMi43NTE2IDEyLjIyOCAxMy4yNDA2IDEyLjc0MzIgMTMuNDM4QzEzLjI1ODUgMTMuNjM1MyAxMy44NDE5IDEzLjUwMTggMTQuMjIgMTMuMUMxNS4yMDkyIDEx'@;
put 'LjkwNjkgMTYuNjcwNCAxMS4yMDU2IDE4LjIyIDExLjE4QzIwLjI0IDExLjE4IDIxLjY1IDEyLjQyIDIxLjY1IDE0LjI1QzIxLjY1IDE2LjggMTkuMDQgMTcuMzggMTcuNDcgMTcuNUMxNy4xNDQ4IDE3LjUxNzUgMTYuODQwOSAxNy42Njc0IDE2LjYyOTMgMTcuOTE1QzE2LjQxNzYgMTguMTYy'@;
put 'NSAxNi4zMTY3IDE4LjQ4NiAxNi4zNSAxOC44MVYyMS41N0MxNi4zNjA0IDIxLjkyNzIgMTYuNTEzMSAyMi4yNjU1IDE2Ljc3NDEgMjIuNTA5NkMxNy4wMzUxIDIyLjc1MzcgMTcuMzgyOSAyMi44ODM1IDE3Ljc0IDIyLjg3SDE3Ljg1QzE4LjU3NTMgMjIuODMyOSAxOS4xNDU2IDIyLjIzNjIg'@;
put 'MTkuMTUgMjEuNTFaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMy4wMDEzIDEyLjc2ODlDMzAuMTY1OSAxNC4wNjg4IDI2LjgyMTIgMTMuNDY3OSAyNC42MTU2IDExLjI2MjNDMjIuNDEwMSA5LjA1Njc0IDIxLjgw'@;
put 'OTEgNS43MTIgMjMuMTA5IDIuODc2NjNDMTYuMDY0OSAwLjQ0MDk0NiA4LjI3MTk5IDMuMTkyMDUgNC4zMTgyMyA5LjUxMDI5QzAuMzY0NDc2IDE1LjgyODUgMS4yOTczNiAyNC4wMzk5IDYuNTY3NjcgMjkuMzEwM0MxMS44MzggMzQuNTgwNiAyMC4wNDk0IDM1LjUxMzUgMjYuMzY3NiAzMS41'@;
put 'NTk3QzMyLjY4NTkgMjcuNjA1OSAzNS40MzcgMTkuODEzMSAzMy4wMDEzIDEyLjc2ODlaTTE3LjcxOTYgMjcuNzEyQzE3LjA1NDcgMjcuNzEyIDE2LjQ1NTQgMjcuMzExNSAxNi4yMDA5IDI2LjY5NzNDMTUuOTQ2NSAyNi4wODMgMTYuMDg3MiAyNS4zNzYgMTYuNTU3MyAyNC45MDU5QzE3LjAy'@;
put 'NzQgMjQuNDM1OCAxNy43MzQ0IDI0LjI5NTIgMTguMzQ4NiAyNC41NDk2QzE4Ljk2MjggMjQuODA0IDE5LjM2MzMgMjUuNDAzNCAxOS4zNjMzIDI2LjA2ODJDMTkuMzc0IDI2LjUxMSAxOS4yMDU2IDI2LjkzOTQgMTguODk2MiAyNy4yNTY0QzE4LjU4NjcgMjcuNTczMyAxOC4xNjI1IDI3Ljc1'@;
put 'MTkgMTcuNzE5NiAyNy43NTE4VjI3LjcxMlpNMTkuMDg0NCAyMS4zOTZWMTkuNzIyNEMyMi41MzEyIDE5LjEzNDcgMjQuNDkzNyAxNy4xMDI0IDI0LjQ5MzcgMTQuMDI0MUMyNC40OTM3IDEwLjczNjcgMjEuOTIzNSA4LjQ0NTQgMTguMjM3NiA4LjQ0NTRDMTUuOTQ2OCA4LjQxMDA2IDEzLjc1'@;
put 'OCA5LjM5MTM2IDEyLjI2MDQgMTEuMTI1MkMxMS45OTE4IDExLjM4NzggMTEuODM3OSAxMS43NDU4IDExLjgzMiAxMi4xMjE0QzExLjg0NSAxMi42NzA5IDEyLjE4ODYgMTMuMTU4MSAxMi43MDE5IDEzLjM1NDdDMTMuMjE1MiAxMy41NTEyIDEzLjc5NjQgMTMuNDE4MiAxNC4xNzMxIDEzLjAx'@;
put 'OEMxNS4xNTg2IDExLjgyOTQgMTYuNjE0MSAxMS4xMzA3IDE4LjE1NzkgMTEuMTA1M0MyMC4xNzAyIDExLjEwNTMgMjEuNTc0OSAxMi4zNDA2IDIxLjU3NDkgMTQuMTYzNkMyMS41NzQ5IDE2LjcwMzkgMTguOTc0OCAxNy4yODE3IDE3LjQxMDcgMTcuNDAxM0MxNy4wODY3IDE3LjQxODYgMTYu'@;
put 'Nzg0IDE3LjU2ODEgMTYuNTczMiAxNy44MTQ3QzE2LjM2MjMgMTguMDYxMyAxNi4yNjE4IDE4LjM4MzUgMTYuMjk1IDE4LjcwNjNWMjEuNDU1OEMxNi4zMDU0IDIxLjgxMTcgMTYuNDU3NSAyMi4xNDg3IDE2LjcxNzUgMjIuMzkxOUMxNi45Nzc1IDIyLjYzNTEgMTcuMzIzOSAyMi43NjQzIDE3'@;
put 'LjY3OTcgMjIuNzUwOUgxNy43ODkzQzE4LjUxMTggMjIuNzEzOSAxOS4wOCAyMi4xMTk1IDE5LjA4NDQgMjEuMzk2WiIvPjxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZD'@;
put 'MjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPid9XSx6T2U9WyJpbmZvLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMyLjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0'@;
put 'IDkuMTYgMjYuODQgMiAxOCAyQzkuMTYgMiAyIDkuMTYgMiAxOFpNNCAxOEM0IDEwLjI3IDEwLjI3IDQgMTggNEMyNS43MyA0IDMyIDEwLjI3IDMyIDE4QzMyIDI1LjczIDI1LjczIDMyIDE4IDMyQzEwLjI3IDMyIDQgMjUuNzMgNCAxOFpNMjEgMjVIMTlWMTRIMTZDMTUuNDUgMTQgMTUgMTQu'@;
put 'NDUgMTUgMTVDMTUgMTUuNTUgMTUuNDUgMTYgMTYgMTZIMTdWMjVIMTVDMTQuNDUgMjUgMTQgMjUuNDUgMTQgMjZDMTQgMjYuNTUgMTQuNDUgMjcgMTUgMjdIMjFDMjEuNTUgMjcgMjIgMjYuNTUgMjIgMjZDMjIgMjUuNDUgMjEuNTUgMjUgMjEgMjVaTTE5LjM3IDEwLjQ1QzE5LjM3IDExLjIy'@;
put 'IDE4Ljc0IDExLjg1IDE3Ljk3IDExLjg1QzE3LjIgMTEuODUgMTYuNTcgMTEuMjIgMTYuNTcgMTAuNDVDMTYuNTcgOS42OCAxNy4yIDkuMDUgMTcuOTcgOS4wNUMxOC43NCA5LjA1IDE5LjM3IDkuNjggMTkuMzcgMTAuNDVaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDJDOS4xNiAyIDIgOS4x'@;
put 'NiAyIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAzMi4zMSAyOS4zMSAyOS4zMUMzMi4zMSAyNi4zMSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMlpNMTcuOTcgOC44NUMxOC44NSA4Ljg1IDE5LjU3IDkuNTcgMTkuNTcgMTAuNDVDMTkuNTcgMTEu'@;
put 'MzMgMTguODUgMTIuMDUgMTcuOTcgMTIuMDVDMTcuMDkgMTIuMDUgMTYuMzcgMTEuMzMgMTYuMzcgMTAuNDVDMTYuMzcgOS41NyAxNy4wOSA4Ljg1IDE3Ljk3IDguODVaTTIxIDI3LjJIMTVDMTQuMzQgMjcuMiAxMy44IDI2LjY2IDEzLjggMjZDMTMuOCAyNS4zNCAxNC4zNCAyNC44IDE1IDI0'@;
put 'LjhIMTYuOFYxNi4ySDE2QzE1LjM0IDE2LjIgMTQuOCAxNS42NiAxNC44IDE1QzE0LjggMTQuMzQgMTUuMzQgMTMuOCAxNiAxMy44SDE5LjJWMjQuOEgyMUMyMS42NiAyNC44IDIyLjIgMjUuMzQgMjIuMiAyNkMyMi4yIDI2LjY2IDIxLjY2IDI3LjIgMjEgMjcuMloiLz4nfV0sVU9lPVsibm90'@;
put 'ZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiLz48cGF0aCBkPSJNMzMuNTMsNS44NCwzMC4xNiwyLjQ3YTEuNjEsMS42MSwwLDAsMC0yLjI4LDBMMTQuMTcs'@;
put 'MTYuMjZsLTEuMTEsNC44MUExLjYxLDEuNjEsMCwwLDAsMTQuNjMsMjMsMS42OSwxLjY5LDAsMCwwLDE1LDIzbDQuODUtMS4wN0wzMy41Myw4LjEyQTEuNjEsMS42MSwwLDAsMCwzMy41Myw1Ljg0Wk0xOC44MSwyMC4wOGwtMy42Ni44MUwxNiwxNy4yNiwyNi4zMiw2Ljg3bDIuODIsMi44MlpN'@;
put 'MzAuMjcsOC41NiwyNy40NSw1Ljc0LDI5LDQuMTYsMzEuODQsN1oiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzMsNi40LDI5LjMsMi43YTEuNzEsMS43MSwwLDAsMC0yLjM2LDBMMjMuNjUsNkg2QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjExLjc2bDMt'@;
put 'M0ExLjY3LDEuNjcsMCwwLDAsMzMsNi40Wk0xOC44MywyMC4xM2wtNC4xOS45MywxLTQuMTUsOS41NS05LjU3LDMuMjMsMy4yM1pNMjkuNSw5LjQzLDI2LjI3LDYuMmwxLjg1LTEuODUsMy4yMywzLjIzWiIvPid9XSxhWT1bInN1Y2Nlc3Mtc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBmaWxs'@;
put 'LXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2'@;
put 'MjlDMjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyMS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUy'@;
put 'NSAyMS43MTMgMzIgMTggMzJaTTI2LjU5IDEyLjFDMjYuOTggMTEuNzEyMyAyNy42MSAxMS43MTIzIDI4IDEyLjFDMjguMTg5MyAxMi4yODc4IDI4LjI5NTggMTIuNTQzNCAyOC4yOTU4IDEyLjgxQzI4LjI5NTggMTMuMDc2NiAyOC4xODkzIDEzLjMzMjIgMjggMTMuNTJMMTUuNDkgMjZMOCAx'@;
put 'OC41M0M3LjYxODkyIDE4LjExODUgNy42NDM1NSAxNy40NzYxIDguMDU1IDE3LjA5NUM4LjQ2NjQ1IDE2LjcxMzkgOS4xMDg5MiAxNi43Mzg1IDkuNDkgMTcuMTVMMTUuNDkgMjMuMTVMMjYuNTkgMTIuMVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMjkuMzEgNi42OUMyNi4zMSAzLjY5IDIyLjI0'@;
put 'IDIgMTggMkM5LjE2IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzI2Ljg0IDM0IDM0IDI2Ljg0IDM0IDE4QzM0IDEzLjc2IDMyLjMxIDkuNjkgMjkuMzEgNi42OVpNMjguMTQgMTMuNjRMMTUuNjMgMjYuMTJMMTUuNDkgMjYuMjZMMTUuMzUgMjYuMTJMNy44NSAxOC42NEM3'@;
put 'LjM5IDE4LjE1IDcuNDIgMTcuMzggNy45MiAxNi45MkM4LjE1IDE2LjcxIDguNDQgMTYuNiA4Ljc1IDE2LjZDOS4wOSAxNi42IDkuNDEgMTYuNzQgOS42NCAxNi45OEwxNS41IDIyLjg0TDI2LjQ2IDExLjkzQzI2LjY5IDExLjcgMjYuOTkgMTEuNTggMjcuMzEgMTEuNThDMjcuNjMgMTEuNTgg'@;
put 'MjcuOTMgMTEuNyAyOC4xNiAxMS45M0MyOC4zOSAxMi4xNSAyOC41MSAxMi40NiAyOC41MSAxMi43OEMyOC41MSAxMy4xIDI4LjM4IDEzLjQxIDI4LjE2IDEzLjYzTDI4LjE0IDEzLjY0WiIvPid9XSxaT2U9WyJ3YXJuaW5nLXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZD0iTTE4LjAwMDEg'@;
put 'MjIuOTkzMkMxOC41NTAxIDIyLjk5MzIgMTkuMDAwMSAyMi41NDM0IDE5LjAwMDEgMjEuOTkzNlYxMC45OTc1QzE5LjAwMDEgMTAuNDQ3NyAxOC41NTAxIDkuOTk3ODYgMTguMDAwMSA5Ljk5Nzg2QzE3LjQ1MDEgOS45OTc4NiAxNy4wMDAxIDEwLjQ0NzcgMTcuMDAwMSAxMC45OTc1VjIxLjk5'@;
put 'MzZDMTcuMDAwMSAyMi41NDM0IDE3LjQ1MDEgMjIuOTkzMiAxOC4wMDAxIDIyLjk5MzJaTTMzLjU2MDEgMjcuMjExN0wyMC43ODAxIDUuNTc5NDRDMjAuMjAwMSA0LjU4OTc5IDE5LjE2MDEgNCAxOC4wMDAxIDRDMTYuODQwMSA0IDE1LjgwMDEgNC41ODk3OSAxNS4yMjAxIDUuNTc5NDRMMi40'@;
put 'NDAxIDI3LjIxMTdDMS44NTAxIDI4LjIxMTQgMS44NTAxIDI5LjQwMDkgMi40MzAxIDMwLjQwMDZDMy4wMTAxIDMxLjQwMDIgNC4wNjAxIDMyIDUuMjIwMSAzMkgzMC43NzAxQzMxLjk0MDEgMzIgMzIuOTgwMSAzMS40MDAyIDMzLjU2MDEgMzAuNDAwNkMzNC4xNDAxIDI5LjQwMDkgMzQuMTQw'@;
put 'MSAyOC4yMTE0IDMzLjU1MDEgMjcuMjExN0gzMy41NjAxWk0zMS44MTAxIDI5LjQwMDlDMzEuNzEwMSAyOS41ODA5IDMxLjQwMDEgMjkuOTkwNyAzMC43ODAxIDI5Ljk5MDdINS4yMzAxQzQuNjEwMSAyOS45OTA3IDQuMzAwMSAyOS41ODA5IDQuMjAwMSAyOS40MDA5QzQuMTAwMSAyOS4yMjEg'@;
put 'My44OTAxIDI4Ljc1MTIgNC4yMDAxIDI4LjIzMTNMMTYuOTgwMSA2LjU4OTA4QzE3LjI5MDEgNi4wNjkyNiAxNy44MDAxIDYuMDA5MjggMTguMDAwMSA2LjAwOTI4QzE4LjIwMDEgNi4wMDkyOCAxOC43MTAxIDYuMDY5MjYgMTkuMDIwMSA2LjU4OTA4TDMxLjc5MDEgMjguMjIxM0MzMi4xMDAx'@;
put 'IDI4Ljc1MTIgMzEuOTAwMSAyOS4yMjEgMzEuNzkwMSAyOS4zOTA5TDMxLjgxMDEgMjkuNDAwOVpNMTguMDEwMSAyNS4wMDI1QzE3LjI4MDEgMjUuMDAyNSAxNi42ODAxIDI1LjYwMjMgMTYuNjgwMSAyNi4zMzJDMTYuNjgwMSAyNy4wNjE4IDE3LjI4MDEgMjcuNjYxNSAxOC4wMTAxIDI3LjY2'@;
put 'MTVDMTguNzQwMSAyNy42NjE1IDE5LjM0MDEgMjcuMDYxOCAxOS4zNDAxIDI2LjMzMkMxOS4zNDAxIDI1LjYwMjMgMTguNzQwMSAyNS4wMDI1IDE4LjAxMDEgMjUuMDAyNVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzMuNTYwMSAyNy4yMkwyMC43ODAxIDUuNThDMjAuMjAwMSA0LjU5IDE5LjE2'@;
put 'MDEgNCAxOC4wMDAxIDRDMTYuODQwMSA0IDE1LjgwMDEgNC41OSAxNS4yMjAxIDUuNThMMi40NDAwNiAyNy4yMkMxLjg1MDA2IDI4LjIyIDEuODUwMDYgMjkuNDEgMi40NDAwNiAzMC40MUMzLjAyMDA2IDMxLjQxIDQuMDcwMDYgMzIuMDEgNS4yMzAwNiAzMi4wMUgzMC43ODAxQzMxLjk1MDEg'@;
put 'MzIuMDEgMzIuOTkwMSAzMS40MSAzMy41NzAxIDMwLjQxQzM0LjE1MDEgMjkuNDEgMzQuMTUwMSAyOC4yMiAzMy41NjAxIDI3LjIyWk0xNi45MDAxIDExQzE2LjkwMDEgMTAuMzkgMTcuMzkwMSA5LjkgMTguMDAwMSA5LjlDMTguNjEwMSA5LjkgMTkuMTAwMSAxMC4zOSAxOS4xMDAxIDExVjIy'@;
put 'QzE5LjEwMDEgMjIuNjEgMTguNjEwMSAyMy4xIDE4LjAwMDEgMjMuMUMxNy4zOTAxIDIzLjEgMTYuOTAwMSAyMi42MSAxNi45MDAxIDIyVjExWk0xOC4wMDAxIDI3Ljc2QzE3LjIxMDEgMjcuNzYgMTYuNTcwMSAyNy4xMiAxNi41NzAxIDI2LjMzQzE2LjU3MDEgMjUuNTQgMTcuMjEwMSAyNC45'@;
put 'IDE4LjAwMDEgMjQuOUMxOC43OTAxIDI0LjkgMTkuNDMwMSAyNS41NCAxOS40MzAxIDI2LjMzQzE5LjQzMDEgMjcuMTIgMTguNzkwMSAyNy43NiAxOC4wMDAxIDI3Ljc2WiIvPid9XSxXT2U9WyJjaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0i'@;
put 'ZXZlbm9kZCIgZD0iTTQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjUuNzMyIDI1LjczMiAzMiAxOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOFpNNiAxOEM2IDI0LjYyNzQgMTEuMzcyNiAzMCAxOCAzMEMyMS4xODI2IDMwIDI0LjIz'@;
put 'NDggMjguNzM1NyAyNi40ODUzIDI2LjQ4NTNDMjguNzM1NyAyNC4yMzQ4IDMwIDIxLjE4MjYgMzAgMThDMzAgMTEuMzcyNiAyNC42Mjc0IDYgMTggNkMxMS4zNzI2IDYgNiAxMS4zNzI2IDYgMThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDRDMTAuMjY4IDQgNCAxMC4yNjggNCAxOEM0IDI1'@;
put 'LjczMiAxMC4yNjggMzIgMTggMzJDMjUuNzMyIDMyIDMyIDI1LjczMiAzMiAxOEMzMiAxMC4yNjggMjUuNzMyIDQgMTggNFoiLz4nfV0sWU9lPVsiZG90LWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAxMUMxOS4zODQ1IDExIDIwLjczNzkgMTEuNDEwNSAyMS44ODkgMTIuMTc5N0My'@;
put 'My4wNDAxIDEyLjk0ODkgMjMuOTM3NCAxNC4wNDIxIDI0LjQ2NzIgMTUuMzIxMkMyNC45OTcgMTYuNjAwMyAyNS4xMzU2IDE4LjAwNzggMjQuODY1NSAxOS4zNjU2QzI0LjU5NTQgMjAuNzIzNSAyMy45Mjg3IDIxLjk3MDggMjIuOTQ5OCAyMi45NDk4QzIxLjk3MDggMjMuOTI4NyAyMC43MjM1'@;
put 'IDI0LjU5NTQgMTkuMzY1NiAyNC44NjU1QzE4LjAwNzggMjUuMTM1NiAxNi42MDAzIDI0Ljk5NyAxNS4zMjEyIDI0LjQ2NzJDMTQuMDQyMSAyMy45Mzc0IDEyLjk0ODkgMjMuMDQwMSAxMi4xNzk3IDIxLjg4OUMxMS40MTA1IDIwLjczNzkgMTEgMTkuMzg0NSAxMSAxOEMxMSAxNi4xNDM1IDEx'@;
put 'LjczNzUgMTQuMzYzIDEzLjA1MDMgMTMuMDUwM0MxNC4zNjMgMTEuNzM3NSAxNi4xNDM1IDExIDE4IDExWiIvPjxwYXRoIGQ9Ik0xOCAzNEMxNC44MzU1IDM0IDExLjc0MjEgMzMuMDYxNiA5LjExMDg4IDMxLjMwMzVDNi40Nzk3IDI5LjU0NTQgNC40Mjg5NCAyNy4wNDY2IDMuMjE3OTMgMjQu'@;
put 'MTIyOUMyLjAwNjkzIDIxLjE5OTMgMS42OTAwOCAxNy45ODIzIDIuMzA3NDQgMTQuODc4NkMyLjkyNDgxIDExLjc3NDkgNC40NDg2NiA4LjkyMzk0IDYuNjg2MyA2LjY4NjNDOC45MjM5NCA0LjQ0ODY2IDExLjc3NDkgMi45MjQ4MSAxNC44Nzg2IDIuMzA3NDRDMTcuOTgyMyAxLjY5MDA4IDIx'@;
put 'LjE5OTMgMi4wMDY5MyAyNC4xMjI5IDMuMjE3OTNDMjcuMDQ2NiA0LjQyODk0IDI5LjU0NTQgNi40Nzk3IDMxLjMwMzUgOS4xMTA4OEMzMy4wNjE2IDExLjc0MjEgMzQgMTQuODM1NSAzNCAxOEMzNCAyMi4yNDM1IDMyLjMxNDMgMjYuMzEzMSAyOS4zMTM3IDI5LjMxMzdDMjYuMzEzMSAzMi4z'@;
put 'MTQzIDIyLjI0MzUgMzQgMTggMzRaTTE4IDQuMDAwMDFDMTUuMjMxMSA0LjAwMDAxIDEyLjUyNDMgNC44MjEwOSAxMC4yMjIgNi4zNTk0M0M3LjkxOTc0IDcuODk3NzcgNi4xMjUzMiAxMC4wODQzIDUuMDY1NjkgMTIuNjQyNEM0LjAwNjA3IDE1LjIwMDYgMy43Mjg4MiAxOC4wMTU1IDQuMjY5'@;
put 'MDEgMjAuNzMxM0M0LjgwOTIxIDIzLjQ0NyA2LjE0MjU4IDI1Ljk0MTYgOC4xMDA1MSAyNy44OTk1QzEwLjA1ODQgMjkuODU3NCAxMi41NTMgMzEuMTkwOCAxNS4yNjg3IDMxLjczMUMxNy45ODQ1IDMyLjI3MTIgMjAuNzk5NCAzMS45OTM5IDIzLjM1NzYgMzAuOTM0M0MyNS45MTU3IDI5Ljg3'@;
put 'NDcgMjguMTAyMiAyOC4wODAzIDI5LjY0MDYgMjUuNzc4QzMxLjE3ODkgMjMuNDc1NyAzMiAyMC43Njg5IDMyIDE4QzMyIDE0LjI4NyAzMC41MjUgMTAuNzI2IDI3Ljg5OTUgOC4xMDA1MUMyNS4yNzQgNS40NzUgMjEuNzEzIDQuMDAwMDEgMTggNC4wMDAwMVoiLz4nfV07ZnVuY3Rpb24gR09l'@;
put 'KGMsbCl7cmV0dXJuIGM9PT1sfWNsYXNzIEtPZSBleHRlbmRzIHF0e2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKX1zY2hlZHVsZShsLGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0IF9MPXtzZXRJbnRlcnZhbChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09X0w7cmV0dXJuIGQ/LnNldEludGVy'@;
put 'dmFsP2Quc2V0SW50ZXJ2YWwoYyxsLC4uLmEpOnNldEludGVydmFsKGMsbCwuLi5hKX0sY2xlYXJJbnRlcnZhbChjKXtjb25zdHtkZWxlZ2F0ZTpsfT1fTDtyZXR1cm4obD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgbFkgZXh0ZW5k'@;
put 'cyBLT2V7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWEsdGhpcy5wZW5kaW5nPSExfXNjaGVkdWxlKGwsYT0wKXt2YXIgZDtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPWw7Y29uc3QgaD10aGlzLmlkLGY9dGhpcy5z'@;
put 'Y2hlZHVsZXI7cmV0dXJuIG51bGwhPWgmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZixoLGEpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShkPXRoaXMuaWQpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5yZXF1ZXN0QXN5bmNJZChmLHRoaXMuaWQsYSks'@;
put 'dGhpc31yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gX0wuc2V0SW50ZXJ2YWwobC5mbHVzaC5iaW5kKGwsdGhpcyksZCl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7aWYobnVsbCE9ZCYmdGhpcy5kZWxheT09PWQmJiExPT09dGhpcy5wZW5kaW5nKXJldHVybiBhO251bGwhPWEmJl9M'@;
put 'LmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShsLGEpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZD10aGlzLl9leGVjdXRlKGwsYSk7aWYoZClyZXR1cm4gZDshMT09PXRoaXMucGVu'@;
put 'ZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZShsLGEpe2xldCBoLGQ9ITE7dHJ5e3RoaXMud29yayhsKX1jYXRjaChmKXtkPSEwLGg9Znx8bmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0'@;
put 'aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZClyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLGh9dW5zdWJzY3JpYmUoKXtpZighdGhpcy5jbG9zZWQpe2NvbnN0e2lkOmwsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6ZH09YTt0aGlzLndvcms9dGhpcy5zdGF0ZT10aGlzLnNjaGVkdWxl'@;
put 'cj1udWxsLHRoaXMucGVuZGluZz0hMSx1dChkLHRoaXMpLG51bGwhPWwmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoYSxsLG51bGwpKSx0aGlzLmRlbGF5PW51bGwsc3VwZXIudW5zdWJzY3JpYmUoKX19fWNvbnN0IGNZPXtub3c6KCk9PihjWS5kZWxlZ2F0ZXx8RGF0ZSkubm93KCks'@;
put 'ZGVsZWdhdGU6dm9pZCAwfTtjbGFzcyB2eHtjb25zdHJ1Y3RvcihsLGE9dngubm93KXt0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3I9bCx0aGlzLm5vdz1hfXNjaGVkdWxlKGwsYT0wLGQpe3JldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsbCkuc2NoZWR1bGUoZCxhKX19'@;
put 'dngubm93PWNZLm5vdztjbGFzcyB1WSBleHRlbmRzIHZ4e2NvbnN0cnVjdG9yKGwsYT12eC5ub3cpe3N1cGVyKGwsYSksdGhpcy5hY3Rpb25zPVtdLHRoaXMuX2FjdGl2ZT0hMX1mbHVzaChsKXtjb25zdHthY3Rpb25zOmF9PXRoaXM7aWYodGhpcy5fYWN0aXZlKXJldHVybiB2b2lkIGEucHVz'@;
put 'aChsKTtsZXQgZDt0aGlzLl9hY3RpdmU9ITA7ZG97aWYoZD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZShsPWEuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGQpe2Zvcig7bD1hLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBkfX19Y29uc3Qgd0w9bmV3'@;
put 'IHVZKGxZKSxxT2U9d0w7ZnVuY3Rpb24gaG0oYyxsPXdMKXtyZXR1cm4gVmkoKGEsZCk9PntsZXQgaD1udWxsLGY9bnVsbCx2PW51bGw7Y29uc3QgTT0oKT0+e2lmKGgpe2gudW5zdWJzY3JpYmUoKSxoPW51bGw7Y29uc3QgWj1mO2Y9bnVsbCxkLm5leHQoWil9fTtmdW5jdGlvbiBEKCl7Y29u'@;
put 'c3QgWj12K2MsbmU9bC5ub3coKTtpZihuZTxaKXJldHVybiBoPXRoaXMuc2NoZWR1bGUodm9pZCAwLFotbmUpLHZvaWQgZC5hZGQoaCk7TSgpfWEuc3Vic2NyaWJlKE5pKGQsWj0+e2Y9Wix2PWwubm93KCksaHx8KGg9bC5zY2hlZHVsZShELGMpLGQuYWRkKGgpKX0sKCk9PntNKCksZC5jb21w'@;
put 'bGV0ZSgpfSx2b2lkIDAsKCk9PntmPWg9bnVsbH0pKX0pfWNvbnN0IFhPZT1bImFkZExpc3RlbmVyIiwicmVtb3ZlTGlzdGVuZXIiXSxKT2U9WyJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciJdLFFPZT1bIm9uIiwib2ZmIl07ZnVuY3Rpb24geGQoYyxsLGEsZCl7aWYo'@;
put 'JGUoYSkmJihkPWEsYT12b2lkIDApLGQpcmV0dXJuIHhkKGMsbCxhKS5waXBlKGpaKGQpKTtjb25zdFtoLGZdPWZ1bmN0aW9uIG5QZShjKXtyZXR1cm4gJGUoYy5hZGRFdmVudExpc3RlbmVyKSYmJGUoYy5yZW1vdmVFdmVudExpc3RlbmVyKX0oYyk/Sk9lLm1hcCh2PT5NPT5jW3ZdKGwsTSxh'@;
put 'KSk6ZnVuY3Rpb24gZVBlKGMpe3JldHVybiAkZShjLmFkZExpc3RlbmVyKSYmJGUoYy5yZW1vdmVMaXN0ZW5lcil9KGMpP1hPZS5tYXAoQTBlKGMsbCkpOmZ1bmN0aW9uIHRQZShjKXtyZXR1cm4gJGUoYy5vbikmJiRlKGMub2ZmKX0oYyk/UU9lLm1hcChBMGUoYyxsKSk6W107aWYoIWgmJlZa'@;
put 'KGMpKXJldHVybiBIMCh2PT54ZCh2LGwsYSkpKGwxKGMpKTtpZighaCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGV2ZW50IHRhcmdldCIpO3JldHVybiBuZXcgWHQodj0+e2NvbnN0IE09KC4uLkQpPT52Lm5leHQoMTxELmxlbmd0aD9EOkRbMF0pO3JldHVybiBoKE0pLCgpPT5mKE0p'@;
put 'fSl9ZnVuY3Rpb24gQTBlKGMsbCl7cmV0dXJuIGE9PmQ9PmNbYV0obCxkKX1jbGFzcyBieCBleHRlbmRzIFdue2NvbnN0cnVjdG9yKGw9MS8wLGE9MS8wLGQ9Y1kpe3N1cGVyKCksdGhpcy5fYnVmZmVyU2l6ZT1sLHRoaXMuX3dpbmRvd1RpbWU9YSx0aGlzLl90aW1lc3RhbXBQcm92aWRlcj1k'@;
put 'LHRoaXMuX2J1ZmZlcj1bXSx0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c9ITAsdGhpcy5faW5maW5pdGVUaW1lV2luZG93PWE9PT0xLzAsdGhpcy5fYnVmZmVyU2l6ZT1NYXRoLm1heCgxLGwpLHRoaXMuX3dpbmRvd1RpbWU9TWF0aC5tYXgoMSxhKX1uZXh0KGwpe2NvbnN0e2lzU3RvcHBlZDph'@;
put 'LF9idWZmZXI6ZCxfaW5maW5pdGVUaW1lV2luZG93OmgsX3RpbWVzdGFtcFByb3ZpZGVyOmYsX3dpbmRvd1RpbWU6dn09dGhpczthfHwoZC5wdXNoKGwpLCFoJiZkLnB1c2goZi5ub3coKSt2KSksdGhpcy5fdHJpbUJ1ZmZlcigpLHN1cGVyLm5leHQobCl9X3N1YnNjcmliZShsKXt0aGlzLl90'@;
put 'aHJvd0lmQ2xvc2VkKCksdGhpcy5fdHJpbUJ1ZmZlcigpO2NvbnN0IGE9dGhpcy5faW5uZXJTdWJzY3JpYmUobCkse19pbmZpbml0ZVRpbWVXaW5kb3c6ZCxfYnVmZmVyOmh9PXRoaXMsZj1oLnNsaWNlKCk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aCYmIWwuY2xvc2VkO3YrPWQ/MToyKWwubmV4'@;
put 'dChmW3ZdKTtyZXR1cm4gdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhsKSxhfV90cmltQnVmZmVyKCl7Y29uc3R7X2J1ZmZlclNpemU6bCxfdGltZXN0YW1wUHJvdmlkZXI6YSxfYnVmZmVyOmQsX2luZmluaXRlVGltZVdpbmRvdzpofT10aGlzLGY9KGg/MToyKSpsO2lmKGw8MS8wJiZm'@;
put 'PGQubGVuZ3RoJiZkLnNwbGljZSgwLGQubGVuZ3RoLWYpLCFoKXtjb25zdCB2PWEubm93KCk7bGV0IE09MDtmb3IobGV0IEQ9MTtEPGQubGVuZ3RoJiZkW0RdPD12O0QrPTIpTT1EO00mJmQuc3BsaWNlKDAsTSsxKX19fWZ1bmN0aW9uIGRZKGMsbCwuLi5hKXtpZighMD09PWwpcmV0dXJuIHZv'@;
put 'aWQgYygpO2lmKCExPT09bClyZXR1cm47Y29uc3QgZD1uZXcgaHQoe25leHQ6KCk9PntkLnVuc3Vic2NyaWJlKCksYygpfX0pO3JldHVybiBsMShsKC4uLmEpKS5zdWJzY3JpYmUoZCl9ZnVuY3Rpb24gazBlKGMsbCxhKXtsZXQgZCxoPSExO3JldHVybiBjJiYib2JqZWN0Ij09dHlwZW9mIGM/'@;
put 'KHtidWZmZXJTaXplOmQ9MS8wLHdpbmRvd1RpbWU6bD0xLzAscmVmQ291bnQ6aD0hMSxzY2hlZHVsZXI6YX09Yyk6ZD1jPz8xLzAsZnVuY3Rpb24gclBlKGM9e30pe2NvbnN0e2Nvbm5lY3RvcjpsPSgoKT0+bmV3IFduKSxyZXNldE9uRXJyb3I6YT0hMCxyZXNldE9uQ29tcGxldGU6ZD0hMCxy'@;
put 'ZXNldE9uUmVmQ291bnRaZXJvOmg9ITB9PWM7cmV0dXJuIGY9PntsZXQgdixNLEQsWj0wLG5lPSExLGNlPSExO2NvbnN0IGJlPSgpPT57TT8udW5zdWJzY3JpYmUoKSxNPXZvaWQgMH0sRWU9KCk9PntiZSgpLHY9RD12b2lkIDAsbmU9Y2U9ITF9LEJlPSgpPT57Y29uc3QgcWU9djtFZSgpLHFl'@;
put 'Py51bnN1YnNjcmliZSgpfTtyZXR1cm4gVmkoKHFlLHJ0KT0+e1orKywhY2UmJiFuZSYmYmUoKTtjb25zdCBwdD1EPUQ/P2woKTtydC5hZGQoKCk9PntaLS0sMD09PVomJiFjZSYmIW5lJiYoTT1kWShCZSxoKSl9KSxwdC5zdWJzY3JpYmUocnQpLCF2JiZaPjAmJih2PW5ldyBodCh7bmV4dDpk'@;
put 'dD0+cHQubmV4dChkdCksZXJyb3I6ZHQ9PntjZT0hMCxiZSgpLE09ZFkoRWUsYSxkdCkscHQuZXJyb3IoZHQpfSxjb21wbGV0ZTooKT0+e25lPSEwLGJlKCksTT1kWShFZSxkKSxwdC5jb21wbGV0ZSgpfX0pLGwxKHFlKS5zdWJzY3JpYmUodikpfSkoZil9fSh7Y29ubmVjdG9yOigpPT5uZXcg'@;
put 'YngoZCxsLGEpLHJlc2V0T25FcnJvcjohMCxyZXNldE9uQ29tcGxldGU6ITEscmVzZXRPblJlZkNvdW50WmVybzpofSl9ZnVuY3Rpb24geXgoLi4uYyl7Y29uc3QgbD1qTShjKSxhPWZ1bmN0aW9uIFlNZShjLGwpe3JldHVybiJudW1iZXIiPT10eXBlb2YgQlooYyk/Yy5wb3AoKTpsfShjLDEv'@;
put 'MCksZD1jO3JldHVybiBkLmxlbmd0aD8xPT09ZC5sZW5ndGg/bDEoZFswXSk6SmIoYSkoWnUoZCxsKSk6TTJ9dmFyIEFhPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU3RhdGU9MF09IlN0YXRlIixjW2MuVHJhbnNpdGlvbj0xXT0iVHJhbnNpdGlvbiIsY1tjLlNlcXVlbmNlPTJdPSJTZXF1ZW5j'@;
put 'ZSIsY1tjLkdyb3VwPTNdPSJHcm91cCIsY1tjLkFuaW1hdGU9NF09IkFuaW1hdGUiLGNbYy5LZXlmcmFtZXM9NV09IktleWZyYW1lcyIsY1tjLlN0eWxlPTZdPSJTdHlsZSIsY1tjLlRyaWdnZXI9N109IlRyaWdnZXIiLGNbYy5SZWZlcmVuY2U9OF09IlJlZmVyZW5jZSIsY1tjLkFuaW1hdGVD'@;
put 'aGlsZD05XT0iQW5pbWF0ZUNoaWxkIixjW2MuQW5pbWF0ZVJlZj0xMF09IkFuaW1hdGVSZWYiLGNbYy5RdWVyeT0xMV09IlF1ZXJ5IixjW2MuU3RhZ2dlcj0xMl09IlN0YWdnZXIiLGN9KEFhfHx7fSk7Y29uc3QgaWc9IioiO2Z1bmN0aW9uIF9oKGMsbCl7cmV0dXJue3R5cGU6QWEuVHJpZ2dl'@;
put 'cixuYW1lOmMsZGVmaW5pdGlvbnM6bCxvcHRpb25zOnt9fX1mdW5jdGlvbiBNMChjLGw9bnVsbCl7cmV0dXJue3R5cGU6QWEuQW5pbWF0ZSxzdHlsZXM6bCx0aW1pbmdzOmN9fWZ1bmN0aW9uIGNzKGMpe3JldHVybnt0eXBlOkFhLlN0eWxlLHN0eWxlczpjLG9mZnNldDpudWxsfX1mdW5jdGlv'@;
put 'biBDTChjLGwsYSl7cmV0dXJue3R5cGU6QWEuU3RhdGUsbmFtZTpjLHN0eWxlczpsLG9wdGlvbnM6YX19ZnVuY3Rpb24gb1BlKGMpe3JldHVybnt0eXBlOkFhLktleWZyYW1lcyxzdGVwczpjfX1mdW5jdGlvbiBydShjLGwsYT1udWxsKXtyZXR1cm57dHlwZTpBYS5UcmFuc2l0aW9uLGV4cHI6'@;
put 'YyxhbmltYXRpb246bCxvcHRpb25zOmF9fWNsYXNzIF94e2NvbnN0cnVjdG9yKGw9MCxhPTApe3RoaXMuX29uRG9uZUZucz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uRG9uZUZucz1bXSx0aGlzLl9vcmlnaW5hbE9uU3RhcnRG'@;
put 'bnM9W10sdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fcG9zaXRpb249MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPWwrYX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEw'@;
put 'LHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0'@;
put 'aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfWluaXQoKXt9cGxheSgpe3RoaXMuaGFzU3RhcnRlZCgpfHwodGhpcy5fb25TdGFydCgpLHRoaXMudHJpZ2dlck1pY3Jv'@;
put 'dGFzaygpKSx0aGlzLl9zdGFydGVkPSEwfXRyaWdnZXJNaWNyb3Rhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSl9X29uU3RhcnQoKXt0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdfXBhdXNlKCl7fXJlc3RhcnQoKXt9'@;
put 'ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKX1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuaGFzU3RhcnRlZCgpfHx0aGlzLl9vblN0YXJ0KCksdGhpcy5maW5pc2goKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29u'@;
put 'RGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLl9zdGFydGVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31zZXRQb3NpdGlvbihsKXt0aGlzLl9wb3Np'@;
put 'dGlvbj10aGlzLnRvdGFsVGltZT9sKnRoaXMudG90YWxUaW1lOjF9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy50b3RhbFRpbWU/dGhpcy5fcG9zaXRpb24vdGhpcy50b3RhbFRpbWU6MX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhp'@;
put 'cy5fb25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWNsYXNzIEQwZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlz'@;
put 'Ll9vbkRlc3Ryb3lGbnM9W10sdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT0wLHRoaXMucGxheWVycz1sO2xldCBhPTAsZD0wLGg9MDtjb25zdCBmPXRoaXMucGxheWVycy5sZW5ndGg7MD09Zj9xdWV1ZU1pY3JvdGFzaygoKT0+dGhpcy5fb25GaW5pc2goKSk6dGhpcy5w'@;
put 'bGF5ZXJzLmZvckVhY2godj0+e3Yub25Eb25lKCgpPT57KythPT1mJiZ0aGlzLl9vbkZpbmlzaCgpfSksdi5vbkRlc3Ryb3koKCk9PnsrK2Q9PWYmJnRoaXMuX29uRGVzdHJveSgpfSksdi5vblN0YXJ0KCgpPT57KytoPT1mJiZ0aGlzLl9vblN0YXJ0KCl9KX0pLHRoaXMudG90YWxUaW1lPXRo'@;
put 'aXMucGxheWVycy5yZWR1Y2UoKHYsTSk9Pk1hdGgubWF4KHYsTS50b3RhbFRpbWUpLDApfV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLnBs'@;
put 'YXllcnMuZm9yRWFjaChsPT5sLmluaXQoKSl9b25TdGFydChsKXt0aGlzLl9vblN0YXJ0Rm5zLnB1c2gobCl9X29uU3RhcnQoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25TdGFydEZucz1bXSl9'@;
put 'b25Eb25lKGwpe3RoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaChsKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9cGxheSgpe3RoaXMucGFyZW50UGxheWVyfHx0aGlzLmluaXQoKSx0aGlzLl9vblN0YXJ0KCksdGhp'@;
put 'cy5wbGF5ZXJzLmZvckVhY2gobD0+bC5wbGF5KCkpfXBhdXNlKCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5wYXVzZSgpKX1yZXN0YXJ0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5yZXN0YXJ0KCkpfWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVh'@;
put 'Y2gobD0+bC5maW5pc2goKSl9ZGVzdHJveSgpe3RoaXMuX29uRGVzdHJveSgpfV9vbkRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmRlc3Ryb3koKSksdGhpcy5fb25EZXN0cm95'@;
put 'Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5yZXNldCgpKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMX1zZXRQb3NpdGlvbihsKXtjb25zdCBhPWwq'@;
put 'dGhpcy50b3RhbFRpbWU7dGhpcy5wbGF5ZXJzLmZvckVhY2goZD0+e2NvbnN0IGg9ZC50b3RhbFRpbWU/TWF0aC5taW4oMSxhL2QudG90YWxUaW1lKToxO2Quc2V0UG9zaXRpb24oaCl9KX1nZXRQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5wbGF5ZXJzLnJlZHVjZSgoYSxkKT0+bnVsbD09PWF8'@;
put 'fGQudG90YWxUaW1lPmEudG90YWxUaW1lP2Q6YSxudWxsKTtyZXR1cm4gbnVsbCE9bD9sLmdldFBvc2l0aW9uKCk6MH1iZWZvcmVEZXN0cm95KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+e2wuYmVmb3JlRGVzdHJveSYmbC5iZWZvcmVEZXN0cm95KCl9KX10cmlnZ2VyQ2FsbGJhY2sobCl7'@;
put 'Y29uc3QgYT0ic3RhcnQiPT1sP3RoaXMuX29uU3RhcnRGbnM6dGhpcy5fb25Eb25lRm5zO2EuZm9yRWFjaChkPT5kKCkpLGEubGVuZ3RoPTB9fWxldCBmWTt0cnl7Zlk9dHlwZW9mIEludGw8InUiJiZJbnRsLnY4QnJlYWtJdGVyYXRvcn1jYXRjaHtmWT0hMX1sZXQgQ3gsd3g9KCgpPT57Y2xh'@;
put 'c3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9wbGF0Zm9ybUlkPWEsdGhpcy5pc0Jyb3dzZXI9dGhpcy5fcGxhdGZvcm1JZD9lbCh0aGlzLl9wbGF0Zm9ybUlkKToib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiYhIWRvY3VtZW50LHRoaXMuRURHRT10aGlzLmlzQnJvd3NlciYmLyhlZGdlKS9p'@;
put 'LnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5UUklERU5UPXRoaXMuaXNCcm93c2VyJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuQkxJTks9dGhpcy5pc0Jyb3dzZXImJiEoIXdpbmRvdy5jaHJvbWUmJiFmWSkmJnR5cGVvZiBDU1M8InUi'@;
put 'JiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuV0VCS0lUPXRoaXMuaXNCcm93c2VyJiYvQXBwbGVXZWJLaXQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5CTElOSyYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLklPUz10aGlzLmlzQnJvd3NlciYmL2lQ'@;
put 'YWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiEoIk1TU3RyZWFtImluIHdpbmRvdyksdGhpcy5GSVJFRk9YPXRoaXMuaXNCcm93c2VyJiYvKGZpcmVmb3h8bWluZWZpZWxkKS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5BTkRST0lEPXRoaXMuaXNC'@;
put 'cm93c2VyJiYvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLlRSSURFTlQsdGhpcy5TQUZBUkk9dGhpcy5pc0Jyb3dzZXImJi9zYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiZ0aGlzLldFQktJVH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihvYSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFR5KGMpe3JldHVybiBmdW5jdGlvbiB1UGUoKXtpZihudWxs'@;
put 'PT1DeCYmdHlwZW9mIHdpbmRvdzwidSIpdHJ5e3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IixudWxsLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwicGFzc2l2ZSIse2dldDooKT0+Q3g9ITB9KSl9ZmluYWxseXtDeD1DeHx8ITF9cmV0dXJuIEN4fSgpP2M6ISFjLmNhcHR1cmV9dmFy'@;
put 'IF9wPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9STUFMPTBdPSJOT1JNQUwiLGNbYy5ORUdBVEVEPTFdPSJORUdBVEVEIixjW2MuSU5WRVJURUQ9Ml09IklOVkVSVEVEIixjfShfcHx8e30pO2xldCBTTCxsNyxwWTtmdW5jdGlvbiBTeCgpe2lmKCJvYmplY3QiIT10eXBlb2YgZG9jdW1lbnR8'@;
put 'fCFkb2N1bWVudClyZXR1cm4gX3AuTk9STUFMO2lmKG51bGw9PVNMKXtjb25zdCBjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGw9Yy5zdHlsZTtjLmRpcj0icnRsIixsLndpZHRoPSIxcHgiLGwub3ZlcmZsb3c9ImF1dG8iLGwudmlzaWJpbGl0eT0iaGlkZGVuIixsLnBvaW50ZXJF'@;
put 'dmVudHM9Im5vbmUiLGwucG9zaXRpb249ImFic29sdXRlIjtjb25zdCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9YS5zdHlsZTtkLndpZHRoPSIycHgiLGQuaGVpZ2h0PSIxcHgiLGMuYXBwZW5kQ2hpbGQoYSksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjKSxTTD1fcC5O'@;
put 'T1JNQUwsMD09PWMuc2Nyb2xsTGVmdCYmKGMuc2Nyb2xsTGVmdD0xLFNMPTA9PT1jLnNjcm9sbExlZnQ/X3AuTkVHQVRFRDpfcC5JTlZFUlRFRCksYy5yZW1vdmUoKX1yZXR1cm4gU0x9ZnVuY3Rpb24gUjBlKGMpe2lmKGZ1bmN0aW9uIGhQZSgpe2lmKG51bGw9PXBZKXtjb25zdCBjPXR5cGVv'@;
put 'ZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuaGVhZDpudWxsO3BZPSEoIWN8fCFjLmNyZWF0ZVNoYWRvd1Jvb3QmJiFjLmF0dGFjaFNoYWRvdyl9cmV0dXJuIHBZfSgpKXtjb25zdCBsPWMuZ2V0Um9vdE5vZGU/Yy5nZXRSb290Tm9kZSgpOm51bGw7aWYodHlwZW9mIFNoYWRvd1Jvb3Q8InUiJiZT'@;
put 'aGFkb3dSb290JiZsIGluc3RhbmNlb2YgU2hhZG93Um9vdClyZXR1cm4gbH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBNTChjKXtyZXR1cm4gYy5jb21wb3NlZFBhdGg/Yy5jb21wb3NlZFBhdGgoKVswXTpjLnRhcmdldH1sZXQgRlBlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5f'@;
put 'cGxhdGZvcm09YX1pc0Rpc2FibGVkKGEpe3JldHVybiBhLmhhc0F0dHJpYnV0ZSgiZGlzYWJsZWQiKX1pc1Zpc2libGUoYSl7cmV0dXJuIGZ1bmN0aW9uIE5QZShjKXtyZXR1cm4hIShjLm9mZnNldFdpZHRofHxjLm9mZnNldEhlaWdodHx8ImZ1bmN0aW9uIj09dHlwZW9mIGMuZ2V0Q2xpZW50'@;
put 'UmVjdHMmJmMuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfShhKSYmInZpc2libGUiPT09Z2V0Q29tcHV0ZWRTdHlsZShhKS52aXNpYmlsaXR5fWlzVGFiYmFibGUoYSl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm4hMTtjb25zdCBkPWZ1bmN0aW9uIEhQZShjKXt0cnl7cmV0'@;
put 'dXJuIGMuZnJhbWVFbGVtZW50fWNhdGNoe3JldHVybiBudWxsfX0oZnVuY3Rpb24gWVBlKGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fShhKSk7aWYoZCYmKC0xPT09RjBlKGQpfHwhdGhpcy5pc1Zpc2libGUoZCkpKXJldHVy'@;
put 'biExO2xldCBoPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxmPUYwZShhKTtyZXR1cm4gYS5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpPy0xIT09ZjohKCJpZnJhbWUiPT09aHx8Im9iamVjdCI9PT1ofHx0aGlzLl9wbGF0Zm9ybS5XRUJLSVQmJnRoaXMuX3BsYXRmb3JtLklPUyYm'@;
put 'IWZ1bmN0aW9uIFpQZShjKXtsZXQgbD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYT0iaW5wdXQiPT09bCYmYy50eXBlO3JldHVybiJ0ZXh0Ij09PWF8fCJwYXNzd29yZCI9PT1hfHwic2VsZWN0Ij09PWx8fCJ0ZXh0YXJlYSI9PT1sfShhKSkmJigiYXVkaW8iPT09aD8hIWEuaGFzQXR0cmli'@;
put 'dXRlKCJjb250cm9scyIpJiYtMSE9PWY6InZpZGVvIj09PWg/LTEhPT1mJiYobnVsbCE9PWZ8fHRoaXMuX3BsYXRmb3JtLkZJUkVGT1h8fGEuaGFzQXR0cmlidXRlKCJjb250cm9scyIpKTphLnRhYkluZGV4Pj0wKX1pc0ZvY3VzYWJsZShhLGQpe3JldHVybiBmdW5jdGlvbiBXUGUoYyl7cmV0'@;
put 'dXJuIWZ1bmN0aW9uIEJQZShjKXtyZXR1cm4gZnVuY3Rpb24gelBlKGMpe3JldHVybiJpbnB1dCI9PWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0oYykmJiJoaWRkZW4iPT1jLnR5cGV9KGMpJiYoZnVuY3Rpb24gVlBlKGMpe2xldCBsPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4i'@;
put 'aW5wdXQiPT09bHx8InNlbGVjdCI9PT1sfHwiYnV0dG9uIj09PWx8fCJ0ZXh0YXJlYSI9PT1sfShjKXx8ZnVuY3Rpb24galBlKGMpe3JldHVybiBmdW5jdGlvbiBVUGUoYyl7cmV0dXJuImEiPT1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KGMpJiZjLmhhc0F0dHJpYnV0ZSgiaHJlZiIpfShj'@;
put 'KXx8Yy5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfHxQMGUoYykpfShhKSYmIXRoaXMuaXNEaXNhYmxlZChhKSYmKGQ/Lmlnbm9yZVZpc2liaWxpdHl8fHRoaXMuaXNWaXNpYmxlKGEpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4'@;
put 'cih3eCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFAwZShjKXtpZighYy5oYXNBdHRyaWJ1dGUoInRhYmluZGV4Iil8fHZvaWQgMD09PWMudGFiSW5kZXgp'@;
put 'cmV0dXJuITE7bGV0IGw9Yy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iik7cmV0dXJuISghbHx8aXNOYU4ocGFyc2VJbnQobCwxMCkpKX1mdW5jdGlvbiBGMGUoYyl7aWYoIVAwZShjKSlyZXR1cm4gbnVsbDtjb25zdCBsPXBhcnNlSW50KGMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpfHwiIiwx'@;
put 'MCk7cmV0dXJuIGlzTmFOKGwpPy0xOmx9Y2xhc3MgSDBle2dldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQobCl7dGhpcy5fZW5hYmxlZD1sLHRoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChs'@;
put 'LHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX2VuZEFuY2hvcikpfWNvbnN0cnVjdG9yKGwsYSxkLGgsZj0hMSl7dGhpcy5fZWxlbWVudD1sLHRoaXMuX2NoZWNrZXI9YSx0aGlzLl9uZ1pvbmU9ZCx0aGlzLl9kb2N1bWVudD1oLHRoaXMuX2hh'@;
put 'c0F0dGFjaGVkPSExLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQoKSx0aGlzLmVuZEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQoKSx0aGlzLl9lbmFibGVkPSEwLGZ8fHRoaXMuYXR0YWNo'@;
put 'QW5jaG9ycygpfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuX3N0YXJ0QW5jaG9yLGE9dGhpcy5fZW5kQW5jaG9yO2wmJihsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXIpLGwucmVtb3ZlKCkpLGEmJihhLnJlbW92ZUV2ZW50TGlzdGVuZXIoImZv'@;
put 'Y3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSxhLnJlbW92ZSgpKSx0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9lbmRBbmNob3I9bnVsbCx0aGlzLl9oYXNBdHRhY2hlZD0hMX1hdHRhY2hBbmNob3JzKCl7cmV0dXJuISF0aGlzLl9oYXNBdHRhY2hlZHx8KHRoaXMuX25nWm9uZS5ydW5PdXRz'@;
put 'aWRlQW5ndWxhcigoKT0+e3RoaXMuX3N0YXJ0QW5jaG9yfHwodGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fc3RhcnRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lcikpLHRoaXMuX2VuZEFuY2hvcnx8KHRo'@;
put 'aXMuX2VuZEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9lbmRBbmNob3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXIpKX0pLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZv'@;
put 'cmUodGhpcy5fc3RhcnRBbmNob3IsdGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9lbmRBbmNob3IsdGhpcy5fZWxlbWVudC5uZXh0U2libGluZyksdGhpcy5faGFzQXR0YWNoZWQ9ITApLHRoaXMuX2hhc0F0dGFjaGVkKX1mb2N1c0lu'@;
put 'aXRpYWxFbGVtZW50V2hlblJlYWR5KGwpe3JldHVybiBuZXcgUHJvbWlzZShhPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNJbml0aWFsRWxlbWVudChsKSkpfSl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2Uo'@;
put 'YT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+YSh0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQobCkpKX0pfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+YSh0aGlzLmZv'@;
put 'Y3VzTGFzdFRhYmJhYmxlRWxlbWVudChsKSkpfSl9X2dldFJlZ2lvbkJvdW5kYXJ5KGwpe2NvbnN0IGE9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbY2RrLWZvY3VzLXJlZ2lvbi0ke2x9XSwgW2Nka0ZvY3VzUmVnaW9uJHtsfV0sIFtjZGstZm9jdXMtJHtsfV1gKTtyZXR1cm4i'@;
put 'c3RhcnQiPT1sP2EubGVuZ3RoP2FbMF06dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCk6YS5sZW5ndGg/YVthLmxlbmd0aC0xXTp0aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpfWZvY3VzSW5pdGlhbEVsZW1lbnQobCl7Y29uc3Qg'@;
put 'YT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIltjZGstZm9jdXMtaW5pdGlhbF0sIFtjZGtGb2N1c0luaXRpYWxdIik7aWYoYSl7aWYoIXRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUoYSkpe2NvbnN0IGQ9dGhpcy5fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoYSk7cmV0dXJuIGQ/LmZv'@;
put 'Y3VzKGwpLCEhZH1yZXR1cm4gYS5mb2N1cyhsKSwhMH1yZXR1cm4gdGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGwpfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgic3RhcnQiKTtyZXR1cm4gYSYmYS5mb2N1cyhsKSwh'@;
put 'IWF9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnkoImVuZCIpO3JldHVybiBhJiZhLmZvY3VzKGwpLCEhYX1oYXNBdHRhY2hlZCgpe3JldHVybiB0aGlzLl9oYXNBdHRhY2hlZH1fZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQobCl7aWYo'@;
put 'dGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShsKSYmdGhpcy5fY2hlY2tlci5pc1RhYmJhYmxlKGwpKXJldHVybiBsO2NvbnN0IGE9bC5jaGlsZHJlbjtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgaD1hW2RdLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RF'@;
put 'P3RoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGFbZF0pOm51bGw7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH1fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChsKXtpZih0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGwpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUobCkpcmV0dXJuIGw7'@;
put 'Y29uc3QgYT1sLmNoaWxkcmVuO2ZvcihsZXQgZD1hLmxlbmd0aC0xO2Q+PTA7ZC0tKXtjb25zdCBoPWFbZF0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudChhW2RdKTpudWxsO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51'@;
put 'bGx9X2NyZWF0ZUFuY2hvcigpe2NvbnN0IGw9dGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KHRoaXMuX2VuYWJsZWQsbCksbC5jbGFzc0xpc3QuYWRkKCJjZGstdmlzdWFsbHktaGlkZGVuIiksbC5jbGFzc0xpc3Qu'@;
put 'YWRkKCJjZGstZm9jdXMtdHJhcC1hbmNob3IiKSxsLnNldEF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iLCJ0cnVlIiksbH1fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCxhKXtsP2Euc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKTphLnJlbW92ZUF0dHJpYnV0ZSgidGFiaW5kZXgiKX10b2dnbGVB'@;
put 'bmNob3JzKGwpe3RoaXMuX3N0YXJ0QW5jaG9yJiZ0aGlzLl9lbmRBbmNob3ImJih0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX3N0YXJ0QW5jaG9yKSx0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleChsLHRoaXMuX2VuZEFuY2hvcikpfV9leGVjdXRlT25TdGFibGUobCl7dGhp'@;
put 'cy5fbmdab25lLmlzU3RhYmxlP2woKTp0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShVZigxKSkuc3Vic2NyaWJlKGwpfX1sZXQgZ1k9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fY2hlY2tlcj1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX2RvY3VtZW50PWh9Y3JlYXRl'@;
put 'KGEsZD0hMSl7cmV0dXJuIG5ldyBIMGUoYSx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCxkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihGUGUpLHhyKFlvKSx4cih2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVw'@;
put 'cm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLE4wZT0oKCk9PntjbGFzcyBje2dldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNUcmFwPy5lbmFibGVkfHwhMX1zZXQgZW5hYmxlZChhKXt0aGlzLmZvY3VzVHJh'@;
put 'cCYmKHRoaXMuZm9jdXNUcmFwLmVuYWJsZWQ9YSl9Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnRSZWY9YSx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWQsdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwsZmkod3gpLmlzQnJvd3NlciYmKHRoaXMuZm9jdXNUcmFwPXRo'@;
put 'aXMuX2ZvY3VzVHJhcEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwhMCkpfW5nT25EZXN0cm95KCl7dGhpcy5mb2N1c1RyYXA/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQmJih0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1l'@;
put 'bnQuZm9jdXMoKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9bnVsbCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb2N1c1RyYXA/LmF0dGFjaEFuY2hvcnMoKSx0aGlzLmF1dG9DYXB0dXJlJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1uZ0RvQ2hlY2soKXt0aGlzLmZvY3VzVHJh'@;
put 'cCYmIXRoaXMuZm9jdXNUcmFwLmhhc0F0dGFjaGVkKCkmJnRoaXMuZm9jdXNUcmFwLmF0dGFjaEFuY2hvcnMoKX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEuYXV0b0NhcHR1cmU7ZCYmIWQuZmlyc3RDaGFuZ2UmJnRoaXMuYXV0b0NhcHR1cmUmJnRoaXMuZm9jdXNUcmFwPy5oYXNBdHRhY2hl'@;
put 'ZCgpJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1fY2FwdHVyZUZvY3VzKCl7dGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PWZ1bmN0aW9uIGZQZSgpe2xldCBjPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50P2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ6bnVsbDtmb3IoO2MmJmMuc2hh'@;
put 'ZG93Um9vdDspe2NvbnN0IGw9Yy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7aWYobD09PWMpYnJlYWs7Yz1sfXJldHVybiBjfSgpLHRoaXMuZm9jdXNUcmFwPy5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu'@;
put 'ZXcoZHx8YykoR2UoSmkpLEdlKGdZKSxHZSh2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrVHJhcEZvY3VzIiwiIl1dLGlucHV0czp7ZW5hYmxlZDpbam4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka1RyYXBGb2N1cyIsImVu'@;
put 'YWJsZWQiLHMxXSxhdXRvQ2FwdHVyZTpbam4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwiYXV0b0NhcHR1cmUiLHMxXX0sZXhwb3J0QXM6WyJjZGtUcmFwRm9jdXMiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltabCx3bF19KX19cmV0dXJu'@;
put 'IGN9KSgpO2Z1bmN0aW9uIGM3KGMsbD0wKXtyZXR1cm4gZnVuY3Rpb24gSlBlKGMpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGMpKSYmIWlzTmFOKE51bWJlcihjKSl9KGMpP051bWJlcihjKTpsfWZ1bmN0aW9uIEVkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgSmk/Yy5uYXRpdmVFbGVtZW50'@;
put 'OmN9Y29uc3QgTXg9e3NjaGVkdWxlKGMpe2xldCBsPXJlcXVlc3RBbmltYXRpb25GcmFtZSxhPWNhbmNlbEFuaW1hdGlvbkZyYW1lO2NvbnN0e2RlbGVnYXRlOmR9PU14O2QmJihsPWQucmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9ZC5jYW5jZWxBbmltYXRpb25GcmFtZSk7Y29uc3QgaD1sKGY9'@;
put 'PnthPXZvaWQgMCxjKGYpfSk7cmV0dXJuIG5ldyBxdCgoKT0+YT8uKGgpKX0scmVxdWVzdEFuaW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PU14O3JldHVybihsPy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fHJlcXVlc3RBbmltYXRpb25GcmFtZSkoLi4uYyl9LGNhbmNlbEFu'@;
put 'aW1hdGlvbkZyYW1lKC4uLmMpe2NvbnN0e2RlbGVnYXRlOmx9PU14O3JldHVybihsPy5jYW5jZWxBbmltYXRpb25GcmFtZXx8Y2FuY2VsQW5pbWF0aW9uRnJhbWUpKC4uLmMpfSxkZWxlZ2F0ZTp2b2lkIDB9LFYwZT1uZXcgY2xhc3MgdEZlIGV4dGVuZHMgdVl7Zmx1c2gobCl7bGV0IGE7dGhp'@;
put 'cy5fYWN0aXZlPSEwLGw/YT1sLmlkOihhPXRoaXMuX3NjaGVkdWxlZCx0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwKTtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0IGg7bD1sfHxkLnNoaWZ0KCk7ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZSgobD1kWzBdKSYm'@;
put 'bC5pZD09PWEmJmQuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBofX19KGNsYXNzIGVGZSBleHRlbmRzIGxZe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLnNjaGVk'@;
put 'dWxlcj1sLHRoaXMud29yaz1hfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBudWxsIT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxkKToobC5hY3Rpb25zLnB1c2godGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPU14LnJlcXVlc3RBbmltYXRpb25GcmFt'@;
put 'ZSgoKT0+bC5mbHVzaCh2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBoO2lmKG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQobCxhLGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiZhPT09bC5fc2NoZWR1bGVkJiYo'@;
put 'bnVsbD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlkKSE9PWEmJihNeC5jYW5jZWxBbmltYXRpb25GcmFtZShhKSxsLl9zY2hlZHVsZWQ9dm9pZCAwKX19KTtsZXQgbVksbkZlPTE7Y29uc3QgeEw9e307ZnVuY3Rpb24gQjBlKGMpe3JldHVybiBjIGluIHhMJiYo'@;
put 'ZGVsZXRlIHhMW2NdLCEwKX1jb25zdCByRmU9e3NldEltbWVkaWF0ZShjKXtjb25zdCBsPW5GZSsrO3JldHVybiB4TFtsXT0hMCxtWXx8KG1ZPVByb21pc2UucmVzb2x2ZSgpKSxtWS50aGVuKCgpPT5CMGUobCkmJmMoKSksbH0sY2xlYXJJbW1lZGlhdGUoYyl7QjBlKGMpfX0se3NldEltbWVk'@;
put 'aWF0ZTppRmUsY2xlYXJJbW1lZGlhdGU6b0ZlfT1yRmUsRUw9e3NldEltbWVkaWF0ZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT1FTDtyZXR1cm4obD8uc2V0SW1tZWRpYXRlfHxpRmUpKC4uLmMpfSxjbGVhckltbWVkaWF0ZShjKXtjb25zdHtkZWxlZ2F0ZTpsfT1FTDtyZXR1cm4obD8uY2xl'@;
put 'YXJJbW1lZGlhdGV8fG9GZSkoYyl9LGRlbGVnYXRlOnZvaWQgMH0sbEZlPW5ldyBjbGFzcyBzRmUgZXh0ZW5kcyB1WXtmbHVzaChsKXt0aGlzLl9hY3RpdmU9ITA7Y29uc3QgYT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0'@;
put 'IGg7bD1sfHxkLnNoaWZ0KCk7ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZSgobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3Jp'@;
put 'YmUoKTt0aHJvdyBofX19KGNsYXNzIGFGZSBleHRlbmRzIGxZe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hfXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBudWxsIT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxk'@;
put 'KToobC5hY3Rpb25zLnB1c2godGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPUVMLnNldEltbWVkaWF0ZShsLmZsdXNoLmJpbmQobCx2b2lkIDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBoO2lmKG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIu'@;
put 'cmVjeWNsZUFzeW5jSWQobCxhLGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiYobnVsbD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlkKSE9PWEmJihFTC5jbGVhckltbWVkaWF0ZShhKSxsLl9zY2hlZHVsZWQ9PT1hJiYobC5fc2NoZWR1bGVkPXZvaWQg'@;
put 'MCkpfX0pO2Z1bmN0aW9uIGowZShjPTAsbCxhPXFPZSl7bGV0IGQ9LTE7cmV0dXJuIG51bGwhPWwmJihzbGUobCk/YT1sOmQ9bCksbmV3IFh0KGg9PntsZXQgZj1mdW5jdGlvbiB1RmUoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBEYXRlJiYhaXNOYU4oYyl9KGMpPytjLWEubm93KCk6YztmPDAm'@;
put 'JihmPTApO2xldCB2PTA7cmV0dXJuIGEuc2NoZWR1bGUoZnVuY3Rpb24oKXtoLmNsb3NlZHx8KGgubmV4dCh2KyspLDA8PWQ/dGhpcy5zY2hlZHVsZSh2b2lkIDAsZCk6aC5jb21wbGV0ZSgpKX0sZil9KX1mdW5jdGlvbiB2WShjLGw9d0wpe3JldHVybiBmdW5jdGlvbiBjRmUoYyl7cmV0dXJu'@;
put 'IFZpKChsLGEpPT57bGV0IGQ9ITEsaD1udWxsLGY9bnVsbCx2PSExO2NvbnN0IE09KCk9PntpZihmPy51bnN1YnNjcmliZSgpLGY9bnVsbCxkKXtkPSExO2NvbnN0IFo9aDtoPW51bGwsYS5uZXh0KFopfXYmJmEuY29tcGxldGUoKX0sRD0oKT0+e2Y9bnVsbCx2JiZhLmNvbXBsZXRlKCl9O2wu'@;
put 'c3Vic2NyaWJlKE5pKGEsWj0+e2Q9ITAsaD1aLGZ8fGwxKGMoWikpLnN1YnNjcmliZShmPU5pKGEsTSxEKSl9LCgpPT57dj0hMCwoIWR8fCFmfHxmLmNsb3NlZCkmJmEuY29tcGxldGUoKX0pKX0pfSgoKT0+ajBlKGMsbCkpfWNvbnN0IGhGZT1uZXcgU3QoImNkay1kaXItZG9jIix7cHJvdmlk'@;
put 'ZWRJbjoicm9vdCIsZmFjdG9yeTpmdW5jdGlvbiBmRmUoKXtyZXR1cm4gZmkodnMpfX0pLHBGZT0vXihhcnxja2J8ZHZ8aGV8aXd8ZmF8bnFvfHBzfHNkfHVnfHVyfHlpfC4qWy1fXShBZGxtfEFyYWJ8SGVicnxOa29vfFJvaGd8VGhhYSkpKD8hLipbLV9dKExhdG58Q3lybCkoJHwtfF8pKSgk'@;
put 'fC18XykvaTtsZXQgZm09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnZhbHVlPSJsdHIiLHRoaXMuY2hhbmdlPW5ldyBYcixhJiYodGhpcy52YWx1ZT1mdW5jdGlvbiBnRmUoYyl7Y29uc3QgbD1jPy50b0xvd2VyQ2FzZSgpfHwiIjtyZXR1cm4iYXV0byI9PT1sJiZ0eXBlb2Yg'@;
put 'bmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yPy5sYW5ndWFnZT9wRmUudGVzdChuYXZpZ2F0b3IubGFuZ3VhZ2UpPyJydGwiOiJsdHIiOiJydGwiPT09bD8icnRsIjoibHRyIn0oKGEuYm9keT9hLmJvZHkuZGlyOm51bGwpfHwoYS5kb2N1bWVudEVsZW1lbnQ/YS5kb2N1bWVudEVsZW1lbnQuZGly'@;
put 'Om51bGwpfHwibHRyIikpfW5nT25EZXN0cm95KCl7dGhpcy5jaGFuZ2UuY29tcGxldGUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihoRmUsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAy'@;
put 'NzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NsYXNzIG1GZXt9Y2xhc3MgYkZlIGV4dGVuZHMgbUZle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5fZGF0YT1sfWNvbm5lY3QoKXtyZXR1cm4gQk0odGhpcy5fZGF0YSk/dGhpcy5fZGF0YTpmYSh0aGlzLl9kYXRh'@;
put 'KX1kaXNjb25uZWN0KCl7fX12YXIgcG09ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SRVBMQUNFRD0wXT0iUkVQTEFDRUQiLGNbYy5JTlNFUlRFRD0xXT0iSU5TRVJURUQiLGNbYy5NT1ZFRD0yXT0iTU9WRUQiLGNbYy5SRU1PVkVEPTNdPSJSRU1PVkVEIixjfShwbXx8e30pO2NvbnN0IGJZPW5l'@;
put 'dyBTdCgiX1ZpZXdSZXBlYXRlciIpO2NsYXNzIHowZXtjb25zdHJ1Y3Rvcigpe3RoaXMudmlld0NhY2hlU2l6ZT0yMCx0aGlzLl92aWV3Q2FjaGU9W119YXBwbHlDaGFuZ2VzKGwsYSxkLGgsZil7bC5mb3JFYWNoT3BlcmF0aW9uKCh2LE0sRCk9PntsZXQgWixuZTtudWxsPT12LnByZXZpb3Vz'@;
put 'SW5kZXg/KFo9dGhpcy5faW5zZXJ0VmlldygoKT0+ZCh2LE0sRCksRCxhLGgodikpLG5lPVo/cG0uSU5TRVJURUQ6cG0uUkVQTEFDRUQpOm51bGw9PUQ/KHRoaXMuX2RldGFjaEFuZENhY2hlVmlldyhNLGEpLG5lPXBtLlJFTU9WRUQpOihaPXRoaXMuX21vdmVWaWV3KE0sRCxhLGgodikpLG5l'@;
put 'PXBtLk1PVkVEKSxmJiZmKHtjb250ZXh0Olo/LmNvbnRleHQsb3BlcmF0aW9uOm5lLHJlY29yZDp2fSl9KX1kZXRhY2goKXtmb3IoY29uc3QgbCBvZiB0aGlzLl92aWV3Q2FjaGUpbC5kZXN0cm95KCk7dGhpcy5fdmlld0NhY2hlPVtdfV9pbnNlcnRWaWV3KGwsYSxkLGgpe2NvbnN0IGY9dGhp'@;
put 'cy5faW5zZXJ0Vmlld0Zyb21DYWNoZShhLGQpO2lmKGYpcmV0dXJuIHZvaWQoZi5jb250ZXh0LiRpbXBsaWNpdD1oKTtjb25zdCB2PWwoKTtyZXR1cm4gZC5jcmVhdGVFbWJlZGRlZFZpZXcodi50ZW1wbGF0ZVJlZix2LmNvbnRleHQsdi5pbmRleCl9X2RldGFjaEFuZENhY2hlVmlldyhsLGEp'@;
put 'e2NvbnN0IGQ9YS5kZXRhY2gobCk7dGhpcy5fbWF5YmVDYWNoZVZpZXcoZCxhKX1fbW92ZVZpZXcobCxhLGQsaCl7Y29uc3QgZj1kLmdldChsKTtyZXR1cm4gZC5tb3ZlKGYsYSksZi5jb250ZXh0LiRpbXBsaWNpdD1oLGZ9X21heWJlQ2FjaGVWaWV3KGwsYSl7aWYodGhpcy5fdmlld0NhY2hl'@;
put 'Lmxlbmd0aDx0aGlzLnZpZXdDYWNoZVNpemUpdGhpcy5fdmlld0NhY2hlLnB1c2gobCk7ZWxzZXtjb25zdCBkPWEuaW5kZXhPZihsKTstMT09PWQ/bC5kZXN0cm95KCk6YS5yZW1vdmUoZCl9fV9pbnNlcnRWaWV3RnJvbUNhY2hlKGwsYSl7Y29uc3QgZD10aGlzLl92aWV3Q2FjaGUucG9wKCk7'@;
put 'cmV0dXJuIGQmJmEuaW5zZXJ0KGQsbCksZHx8bnVsbH19Y29uc3QgeUZlPVsiY29udGVudFdyYXBwZXIiXSxfRmU9WyIqIl0sVTBlPW5ldyBTdCgiVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kiKTtjbGFzcyB3RmV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2U9'@;
put 'bmV3IFduLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT10aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLnBpcGUoZnVuY3Rpb24gc1koYyxsPWNuKXtyZXR1cm4gYz1jPz9HT2UsVmkoKGEsZCk9PntsZXQgaCxmPSEwO2Euc3Vic2NyaWJlKE5pKGQsdj0+e2NvbnN0IE09bCh2KTsoZnx8IWMoaCxN'@;
put 'KSkmJihmPSExLGg9TSxkLm5leHQodikpfSkpfSl9KCkpLHRoaXMuX3ZpZXdwb3J0PW51bGwsdGhpcy5faXRlbVNpemU9bCx0aGlzLl9taW5CdWZmZXJQeD1hLHRoaXMuX21heEJ1ZmZlclB4PWR9YXR0YWNoKGwpe3RoaXMuX3ZpZXdwb3J0PWwsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6'@;
put 'ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1kZXRhY2goKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnQ9bnVsbH11cGRhdGVJdGVtQW5kQnVmZmVyU2l6ZShsLGEsZCl7dGhpcy5faXRlbVNpemU9bCx0aGlzLl9taW5CdWZmZXJQeD1h'@;
put 'LHRoaXMuX21heEJ1ZmZlclB4PWQsdGhpcy5fdXBkYXRlVG90YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRTY3JvbGxlZCgpe3RoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkRhdGFMZW5ndGhDaGFuZ2VkKCl7dGhpcy5fdXBkYXRlVG90'@;
put 'YWxDb250ZW50U2l6ZSgpLHRoaXMuX3VwZGF0ZVJlbmRlcmVkUmFuZ2UoKX1vbkNvbnRlbnRSZW5kZXJlZCgpe31vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpe31zY3JvbGxUb0luZGV4KGwsYSl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNjcm9sbFRvT2Zmc2V0KGwqdGhpcy5f'@;
put 'aXRlbVNpemUsYSl9X3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKXt0aGlzLl92aWV3cG9ydCYmdGhpcy5fdmlld3BvcnQuc2V0VG90YWxDb250ZW50U2l6ZSh0aGlzLl92aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCkqdGhpcy5faXRlbVNpemUpfV91cGRhdGVSZW5kZXJlZFJhbmdlKCl7aWYoIXRo'@;
put 'aXMuX3ZpZXdwb3J0KXJldHVybjtjb25zdCBsPXRoaXMuX3ZpZXdwb3J0LmdldFJlbmRlcmVkUmFuZ2UoKSxhPXtzdGFydDpsLnN0YXJ0LGVuZDpsLmVuZH0sZD10aGlzLl92aWV3cG9ydC5nZXRWaWV3cG9ydFNpemUoKSxoPXRoaXMuX3ZpZXdwb3J0LmdldERhdGFMZW5ndGgoKTtsZXQgZj10'@;
put 'aGlzLl92aWV3cG9ydC5tZWFzdXJlU2Nyb2xsT2Zmc2V0KCksdj10aGlzLl9pdGVtU2l6ZT4wP2YvdGhpcy5faXRlbVNpemU6MDtpZihhLmVuZD5oKXtjb25zdCBEPU1hdGguY2VpbChkL3RoaXMuX2l0ZW1TaXplKSxaPU1hdGgubWF4KDAsTWF0aC5taW4odixoLUQpKTt2IT1aJiYodj1aLGY9'@;
put 'Wip0aGlzLl9pdGVtU2l6ZSxhLnN0YXJ0PU1hdGguZmxvb3IodikpLGEuZW5kPU1hdGgubWF4KDAsTWF0aC5taW4oaCxhLnN0YXJ0K0QpKX1jb25zdCBNPWYtYS5zdGFydCp0aGlzLl9pdGVtU2l6ZTtpZihNPHRoaXMuX21pbkJ1ZmZlclB4JiYwIT1hLnN0YXJ0KXtjb25zdCBEPU1hdGguY2Vp'@;
put 'bCgodGhpcy5fbWF4QnVmZmVyUHgtTSkvdGhpcy5faXRlbVNpemUpO2Euc3RhcnQ9TWF0aC5tYXgoMCxhLnN0YXJ0LUQpLGEuZW5kPU1hdGgubWluKGgsTWF0aC5jZWlsKHYrKGQrdGhpcy5fbWluQnVmZmVyUHgpL3RoaXMuX2l0ZW1TaXplKSl9ZWxzZXtjb25zdCBEPWEuZW5kKnRoaXMuX2l0'@;
put 'ZW1TaXplLShmK2QpO2lmKEQ8dGhpcy5fbWluQnVmZmVyUHgmJmEuZW5kIT1oKXtjb25zdCBaPU1hdGguY2VpbCgodGhpcy5fbWF4QnVmZmVyUHgtRCkvdGhpcy5faXRlbVNpemUpO1o+MCYmKGEuZW5kPU1hdGgubWluKGgsYS5lbmQrWiksYS5zdGFydD1NYXRoLm1heCgwLE1hdGguZmxvb3Io'@;
put 'di10aGlzLl9taW5CdWZmZXJQeC90aGlzLl9pdGVtU2l6ZSkpKX19dGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRSYW5nZShhKSx0aGlzLl92aWV3cG9ydC5zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQodGhpcy5faXRlbVNpemUqYS5zdGFydCksdGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5u'@;
put 'ZXh0KE1hdGguZmxvb3IodikpfX1sZXQgQXk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdab25lPWEsdGhpcy5fcGxhdGZvcm09ZCx0aGlzLl9zY3JvbGxlZD1uZXcgV24sdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fc2Nyb2xsZWRDb3VudD0w'@;
put 'LHRoaXMuc2Nyb2xsQ29udGFpbmVycz1uZXcgTWFwLHRoaXMuX2RvY3VtZW50PWh9cmVnaXN0ZXIoYSl7dGhpcy5zY3JvbGxDb250YWluZXJzLmhhcyhhKXx8dGhpcy5zY3JvbGxDb250YWluZXJzLnNldChhLGEuZWxlbWVudFNjcm9sbGVkKCkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxl'@;
put 'ZC5uZXh0KGEpKSl9ZGVyZWdpc3RlcihhKXtjb25zdCBkPXRoaXMuc2Nyb2xsQ29udGFpbmVycy5nZXQoYSk7ZCYmKGQudW5zdWJzY3JpYmUoKSx0aGlzLnNjcm9sbENvbnRhaW5lcnMuZGVsZXRlKGEpKX1zY3JvbGxlZChhPTIwKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP25l'@;
put 'dyBYdChkPT57dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9ufHx0aGlzLl9hZGRHbG9iYWxMaXN0ZW5lcigpO2NvbnN0IGg9YT4wP3RoaXMuX3Njcm9sbGVkLnBpcGUodlkoYSkpLnN1YnNjcmliZShkKTp0aGlzLl9zY3JvbGxlZC5zdWJzY3JpYmUoZCk7cmV0dXJuIHRoaXMuX3Njcm9sbGVkQ291'@;
put 'bnQrKywoKT0+e2gudW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxlZENvdW50LS0sdGhpcy5fc2Nyb2xsZWRDb3VudHx8dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKX19KTpmYSgpfW5nT25EZXN0cm95KCl7dGhpcy5fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKSx0aGlzLnNjcm9sbENvbnRh'@;
put 'aW5lcnMuZm9yRWFjaCgoYSxkKT0+dGhpcy5kZXJlZ2lzdGVyKGQpKSx0aGlzLl9zY3JvbGxlZC5jb21wbGV0ZSgpfWFuY2VzdG9yU2Nyb2xsZWQoYSxkKXtjb25zdCBoPXRoaXMuZ2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpO3JldHVybiB0aGlzLnNjcm9sbGVkKGQpLnBpcGUoR2wo'@;
put 'Zj0+IWZ8fGguaW5kZXhPZihmKT4tMSkpfWdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhhKXtjb25zdCBkPVtdO3JldHVybiB0aGlzLnNjcm9sbENvbnRhaW5lcnMuZm9yRWFjaCgoaCxmKT0+e3RoaXMuX3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoZixhKSYmZC5wdXNoKGYpfSksZH1f'@;
put 'Z2V0V2luZG93KCl7cmV0dXJuIHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9X3Njcm9sbGFibGVDb250YWluc0VsZW1lbnQoYSxkKXtsZXQgaD1FZChkKSxmPWEuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQ7ZG97aWYoaD09ZilyZXR1cm4hMH13aGlsZShoPWgucGFy'@;
put 'ZW50RWxlbWVudCk7cmV0dXJuITF9X2FkZEdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPXRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eGQodGhpcy5fZ2V0V2luZG93KCkuZG9jdW1lbnQsInNjcm9sbCIpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Ny'@;
put 'b2xsZWQubmV4dCgpKSl9X3JlbW92ZUdsb2JhbExpc3RlbmVyKCl7dGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uJiYodGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2xvYmFsU3Vic2NyaXB0aW9uPW51bGwpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKFlvKSx4cih3eCkseHIodnMsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLFowZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y'@;
put 'KGEsZCxoLGYpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc2Nyb2xsRGlzcGF0Y2hlcj1kLHRoaXMubmdab25lPWgsdGhpcy5kaXI9Zix0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuX2VsZW1lbnRTY3JvbGxlZD1uZXcgWHQodj0+dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9'@;
put 'PnhkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJzY3JvbGwiKS5waXBlKE4wKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSh2KSkpfW5nT25Jbml0KCl7dGhpcy5zY3JvbGxEaXNwYXRjaGVyLnJlZ2lzdGVyKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5zY3JvbGxEaXNwYXRj'@;
put 'aGVyLmRlcmVnaXN0ZXIodGhpcyksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKX1lbGVtZW50U2Nyb2xsZWQoKXtyZXR1cm4gdGhpcy5fZWxlbWVudFNjcm9sbGVkfWdldEVsZW1lbnRSZWYoKXtyZXR1cm4gdGhpcy5lbGVtZW50UmVmfXNjcm9sbFRv'@;
put 'KGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsaD10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO251bGw9PWEubGVmdCYmKGEubGVmdD1oP2EuZW5kOmEuc3RhcnQpLG51bGw9PWEucmlnaHQmJihhLnJpZ2h0PWg/YS5zdGFydDphLmVuZCksbnVsbCE9YS5i'@;
put 'b3R0b20mJihhLnRvcD1kLnNjcm9sbEhlaWdodC1kLmNsaWVudEhlaWdodC1hLmJvdHRvbSksaCYmU3goKSE9X3AuTk9STUFMPyhudWxsIT1hLmxlZnQmJihhLnJpZ2h0PWQuc2Nyb2xsV2lkdGgtZC5jbGllbnRXaWR0aC1hLmxlZnQpLFN4KCk9PV9wLklOVkVSVEVEP2EubGVmdD1hLnJpZ2h0'@;
put 'OlN4KCk9PV9wLk5FR0FURUQmJihhLmxlZnQ9YS5yaWdodD8tYS5yaWdodDphLnJpZ2h0KSk6bnVsbCE9YS5yaWdodCYmKGEubGVmdD1kLnNjcm9sbFdpZHRoLWQuY2xpZW50V2lkdGgtYS5yaWdodCksdGhpcy5fYXBwbHlTY3JvbGxUb09wdGlvbnMoYSl9X2FwcGx5U2Nyb2xsVG9PcHRpb25z'@;
put 'KGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7IWZ1bmN0aW9uIGRQZSgpe2lmKG51bGw9PWw3KXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBFbGVtZW50fHwhRWxlbWVudClyZXR1cm4gbDc9ITEsbDc7'@;
put 'aWYoInNjcm9sbEJlaGF2aW9yImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSlsNz0hMDtlbHNle2NvbnN0IGM9RWxlbWVudC5wcm90b3R5cGUuc2Nyb2xsVG87bDc9ISFjJiYhL1x7XHMqXFtuYXRpdmUgY29kZVxdXHMqXH0vLnRlc3QoYy50b1N0cmluZygpKX19cmV0dXJuIGw3'@;
put 'fSgpPyhudWxsIT1hLnRvcCYmKGQuc2Nyb2xsVG9wPWEudG9wKSxudWxsIT1hLmxlZnQmJihkLnNjcm9sbExlZnQ9YS5sZWZ0KSk6ZC5zY3JvbGxUbyhhKX1tZWFzdXJlU2Nyb2xsT2Zmc2V0KGEpe2NvbnN0IGQ9ImxlZnQiLGg9InJpZ2h0IixmPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVt'@;
put 'ZW50O2lmKCJ0b3AiPT1hKXJldHVybiBmLnNjcm9sbFRvcDtpZigiYm90dG9tIj09YSlyZXR1cm4gZi5zY3JvbGxIZWlnaHQtZi5jbGllbnRIZWlnaHQtZi5zY3JvbGxUb3A7Y29uc3Qgdj10aGlzLmRpciYmInJ0bCI9PXRoaXMuZGlyLnZhbHVlO3JldHVybiJzdGFydCI9PWE/YT12P2g6ZDoi'@;
put 'ZW5kIj09YSYmKGE9dj9kOmgpLHYmJlN4KCk9PV9wLklOVkVSVEVEP2E9PWQ/Zi5zY3JvbGxXaWR0aC1mLmNsaWVudFdpZHRoLWYuc2Nyb2xsTGVmdDpmLnNjcm9sbExlZnQ6diYmU3goKT09X3AuTkVHQVRFRD9hPT1kP2Yuc2Nyb2xsTGVmdCtmLnNjcm9sbFdpZHRoLWYuY2xpZW50V2lkdGg6'@;
put 'LWYuc2Nyb2xsTGVmdDphPT1kP2Yuc2Nyb2xsTGVmdDpmLnNjcm9sbFdpZHRoLWYuY2xpZW50V2lkdGgtZi5zY3JvbGxMZWZ0fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShBeSksR2UoWW8pLEdlKGZtLDgpKX19c3RhdGlje3Ro'@;
put 'aXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNkay1zY3JvbGxhYmxlIiwiIl0sWyIiLCJjZGtTY3JvbGxhYmxlIiwiIl1dLHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLFRMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3BsYXRmb3Jt'@;
put 'PWEsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLl9jaGFuZ2VMaXN0ZW5lcj1mPT57dGhpcy5fY2hhbmdlLm5leHQoZil9LHRoaXMuX2RvY3VtZW50PWgsZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKGEuaXNCcm93c2VyKXtjb25zdCBmPXRoaXMuX2dldFdpbmRvdygpO2YuYWRkRXZlbnRM'@;
put 'aXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksZi5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRhdGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJv'@;
put 'eSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7Y29uc3QgYT10aGlzLl9nZXRXaW5kb3coKTthLnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5n'@;
put 'ZUxpc3RlbmVyKX10aGlzLl9jaGFuZ2UuY29tcGxldGUoKX1nZXRWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3cG9ydFNpemV8fHRoaXMuX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpO2NvbnN0IGE9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXpl'@;
put 'LmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxsKSxhfWdldFZpZXdwb3J0UmVjdCgpe2NvbnN0IGE9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuZ2V0Vmlld3BvcnRT'@;
put 'aXplKCk7cmV0dXJue3RvcDphLnRvcCxsZWZ0OmEubGVmdCxib3R0b206YS50b3AraCxyaWdodDphLmxlZnQrZCxoZWlnaHQ6aCx3aWR0aDpkfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtjb25z'@;
put 'dCBhPXRoaXMuX2RvY3VtZW50LGQ9dGhpcy5fZ2V0V2luZG93KCksaD1hLmRvY3VtZW50RWxlbWVudCxmPWguZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotZi50b3B8fGEuYm9keS5zY3JvbGxUb3B8fGQuc2Nyb2xsWXx8aC5zY3JvbGxUb3B8fDAsbGVmdDotZi5sZWZ0fHxh'@;
put 'LmJvZHkuc2Nyb2xsTGVmdHx8ZC5zY3JvbGxYfHxoLnNjcm9sbExlZnR8fDB9fWNoYW5nZShhPTIwKXtyZXR1cm4gYT4wP3RoaXMuX2NoYW5nZS5waXBlKHZZKGEpKTp0aGlzLl9jaGFuZ2V9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV91'@;
put 'cGRhdGVWaWV3cG9ydFNpemUoKXtjb25zdCBhPXRoaXMuX2dldFdpbmRvdygpO3RoaXMuX3ZpZXdwb3J0U2l6ZT10aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXI/e3dpZHRoOmEuaW5uZXJXaWR0aCxoZWlnaHQ6YS5pbm5lckhlaWdodH06e3dpZHRoOjAsaGVpZ2h0OjB9fXN0YXRpY3t0aGlzLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHhyKHd4KSx4cihZbykseHIodnMsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFcwZT1uZXcg'@;
put 'U3QoIlZJUlRVQUxfU0NST0xMQUJMRSIpO2xldCBZMGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFowZXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihhLGQsaCxmKX1tZWFzdXJlVmlld3BvcnRTaXplKGEpe2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7cmV0dXJuImhv'@;
put 'cml6b250YWwiPT09YT9kLmNsaWVudFdpZHRoOmQuY2xpZW50SGVpZ2h0fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShBeSksR2UoWW8pLEdlKGZtLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsZmVhdHVy'@;
put 'ZXM6W0NvXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgeEZlPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU8InUiP1YwZTpsRmU7bGV0IGt5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBZMGV7Z2V0IG9yaWVudGF0aW9uKCl7cmV0dXJuIHRoaXMuX29yaWVudGF0aW9ufXNldCBvcmllbnRhdGlv'@;
put 'bihhKXt0aGlzLl9vcmllbnRhdGlvbiE9PWEmJih0aGlzLl9vcmllbnRhdGlvbj1hLHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNpemUoKSl9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaKXtzdXBlcihhLE0saCx2KSx0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1k'@;
put 'LHRoaXMuX3Njcm9sbFN0cmF0ZWd5PWYsdGhpcy5zY3JvbGxhYmxlPVosdGhpcy5fcGxhdGZvcm09Zmkod3gpLHRoaXMuX2RldGFjaGVkU3ViamVjdD1uZXcgV24sdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3Q9bmV3IFduLHRoaXMuX29yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIsdGhpcy5hcHBl'@;
put 'bmRPbmx5PSExLHRoaXMuc2Nyb2xsZWRJbmRleENoYW5nZT1uZXcgWHQobmU9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5LnNjcm9sbGVkSW5kZXhDaGFuZ2Uuc3Vic2NyaWJlKGNlPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50aGlzLm5nWm9uZS5ydW4oKCk9Pm5lLm5leHQoY2UpKSkpKSx0'@;
put 'aGlzLnJlbmRlcmVkUmFuZ2VTdHJlYW09dGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QsdGhpcy5fdG90YWxDb250ZW50U2l6ZT0wLHRoaXMuX3RvdGFsQ29udGVudFdpZHRoPSIiLHRoaXMuX3RvdGFsQ29udGVudEhlaWdodD0iIix0aGlzLl9yZW5kZXJlZFJhbmdlPXtzdGFydDowLGVuZDow'@;
put 'fSx0aGlzLl9kYXRhTGVuZ3RoPTAsdGhpcy5fdmlld3BvcnRTaXplPTAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0PTAsdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuX2lzQ2hhbmdlRGV0ZWN0aW9uUGVuZGluZz0hMSx0aGlzLl9ydW5BZnRlckNo'@;
put 'YW5nZURldGVjdGlvbj1bXSx0aGlzLl92aWV3cG9ydENoYW5nZXM9cXQuRU1QVFksdGhpcy5fdmlld3BvcnRDaGFuZ2VzPUQuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT57dGhpcy5jaGVja1ZpZXdwb3J0U2l6ZSgpfSksdGhpcy5zY3JvbGxhYmxlfHwodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVs'@;
put 'ZW1lbnQuY2xhc3NMaXN0LmFkZCgiY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZSIpLHRoaXMuc2Nyb2xsYWJsZT10aGlzKX1uZ09uSW5pdCgpe3RoaXMuX3BsYXRmb3JtLmlzQnJvd3NlciYmKHRoaXMuc2Nyb2xsYWJsZT09PXRoaXMmJnN1cGVyLm5nT25Jbml0KCksdGhpcy5uZ1pvbmUucnVuT3V0'@;
put 'c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9tZWFzdXJlVmlld3BvcnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kuYXR0YWNoKHRoaXMpLHRoaXMuc2Nyb2xsYWJsZS5lbGVtZW50U2Nyb2xsZWQoKS5waXBlKHgyKG51bGwpLHZZKDAseEZlKSxO'@;
put 'MCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uQ29udGVudFNjcm9sbGVkKCkpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRldGFjaCgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmRl'@;
put 'dGFjaCgpLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fZGV0YWNoZWRTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRDaGFuZ2VzLnVuc3Vic2NyaWJlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1hdHRhY2goYSl7dGhpcy5uZ1pvbmUucnVuT3V0c2lk'@;
put 'ZUFuZ3VsYXIoKCk9Pnt0aGlzLl9mb3JPZj1hLHRoaXMuX2Zvck9mLmRhdGFTdHJlYW0ucGlwZShOMCh0aGlzLl9kZXRhY2hlZFN1YmplY3QpKS5zdWJzY3JpYmUoZD0+e2NvbnN0IGg9ZC5sZW5ndGg7aCE9PXRoaXMuX2RhdGFMZW5ndGgmJih0aGlzLl9kYXRhTGVuZ3RoPWgsdGhpcy5fc2Ny'@;
put 'b2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpKSx0aGlzLl9kb0NoYW5nZURldGVjdGlvbigpfSl9KX1kZXRhY2goKXt0aGlzLl9mb3JPZj1udWxsLHRoaXMuX2RldGFjaGVkU3ViamVjdC5uZXh0KCl9Z2V0RGF0YUxlbmd0aCgpe3JldHVybiB0aGlzLl9kYXRhTGVuZ3RofWdldFZp'@;
put 'ZXdwb3J0U2l6ZSgpe3JldHVybiB0aGlzLl92aWV3cG9ydFNpemV9Z2V0UmVuZGVyZWRSYW5nZSgpe3JldHVybiB0aGlzLl9yZW5kZXJlZFJhbmdlfW1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGEpe3JldHVybiB0aGlzLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVF'@;
put 'bGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2FdfXNldFRvdGFsQ29udGVudFNpemUoYSl7dGhpcy5fdG90YWxDb250ZW50U2l6ZSE9PWEmJih0aGlzLl90b3RhbENvbnRlbnRTaXplPWEsdGhpcy5fY2FsY3VsYXRlU3BhY2VyU2l6ZSgpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25O'@;
put 'ZWVkZWQoKSl9c2V0UmVuZGVyZWRSYW5nZShhKXsoZnVuY3Rpb24gTUZlKGMsbCl7cmV0dXJuIGMuc3RhcnQ9PWwuc3RhcnQmJmMuZW5kPT1sLmVuZH0pKHRoaXMuX3JlbmRlcmVkUmFuZ2UsYSl8fCh0aGlzLmFwcGVuZE9ubHkmJihhPXtzdGFydDowLGVuZDpNYXRoLm1heCh0aGlzLl9yZW5k'@;
put 'ZXJlZFJhbmdlLmVuZCxhLmVuZCl9KSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2U9YSksdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+dGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25Db250ZW50UmVuZGVyZWQoKSkpfWdldE9mZnNl'@;
put 'dFRvUmVuZGVyZWRDb250ZW50U3RhcnQoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0TmVlZHNSZXdyaXRlP251bGw6dGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0fXNldFJlbmRlcmVkQ29udGVudE9mZnNldChhLGQ9InRvLXN0YXJ0Iil7YT10aGlzLmFwcGVuZE9ubHkm'@;
put 'JiJ0by1zdGFydCI9PT1kPzA6YTtjb25zdCBmPSJob3Jpem9udGFsIj09dGhpcy5vcmllbnRhdGlvbix2PWY/IlgiOiJZIjtsZXQgRD1gdHJhbnNsYXRlJHt2fSgke051bWJlcigoZiYmdGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZT8tMToxKSphKX1weClgO3RoaXMuX3JlbmRlcmVk'@;
put 'Q29udGVudE9mZnNldD1hLCJ0by1lbmQiPT09ZCYmKEQrPWAgdHJhbnNsYXRlJHt2fSgtMTAwJSlgLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMCksdGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtIT1EJiYodGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNm'@;
put 'b3JtPUQsdGhpcy5fbWFya0NoYW5nZURldGVjdGlvbk5lZWRlZCgoKT0+e3RoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT8odGhpcy5fcmVuZGVyZWRDb250ZW50T2Zmc2V0LT10aGlzLm1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCksdGhpcy5fcmVuZGVyZWRDb250'@;
put 'ZW50T2Zmc2V0TmVlZHNSZXdyaXRlPSExLHRoaXMuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldCkpOnRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uUmVuZGVyZWRPZmZzZXRDaGFuZ2VkKCl9KSl9c2Nyb2xsVG9PZmZzZXQoYSxkPSJhdXRvIil7Y29u'@;
put 'c3QgaD17YmVoYXZpb3I6ZH07Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj9oLnN0YXJ0PWE6aC50b3A9YSx0aGlzLnNjcm9sbGFibGUuc2Nyb2xsVG8oaCl9c2Nyb2xsVG9JbmRleChhLGQ9ImF1dG8iKXt0aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxUb0luZGV4KGEsZCl9bWVh'@;
put 'c3VyZVNjcm9sbE9mZnNldChhKXtsZXQgZDtyZXR1cm4gZD10aGlzLnNjcm9sbGFibGU9PXRoaXM/aD0+c3VwZXIubWVhc3VyZVNjcm9sbE9mZnNldChoKTpoPT50aGlzLnNjcm9sbGFibGUubWVhc3VyZVNjcm9sbE9mZnNldChoKSxNYXRoLm1heCgwLGQoYT8/KCJob3Jpem9udGFsIj09PXRo'@;
put 'aXMub3JpZW50YXRpb24/InN0YXJ0IjoidG9wIikpLXRoaXMubWVhc3VyZVZpZXdwb3J0T2Zmc2V0KCkpfW1lYXN1cmVWaWV3cG9ydE9mZnNldChhKXtsZXQgZDtjb25zdCBoPSJsZWZ0IixmPSJyaWdodCIsdj0icnRsIj09dGhpcy5kaXI/LnZhbHVlO2Q9InN0YXJ0Ij09YT92P2Y6aDoiZW5k'@;
put 'Ij09YT92P2g6ZjphfHwoImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8ibGVmdCI6InRvcCIpO2NvbnN0IE09dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVCb3VuZGluZ0NsaWVudFJlY3RXaXRoU2Nyb2xsT2Zmc2V0KGQpO3JldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVu'@;
put 'dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkXS1NfW1lYXN1cmVSZW5kZXJlZENvbnRlbnRTaXplKCl7Y29uc3QgYT10aGlzLl9jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/YS5vZmZzZXRXaWR0aDphLm9mZnNldEhl'@;
put 'aWdodH1tZWFzdXJlUmFuZ2VTaXplKGEpe3JldHVybiB0aGlzLl9mb3JPZj90aGlzLl9mb3JPZi5tZWFzdXJlUmFuZ2VTaXplKGEsdGhpcy5vcmllbnRhdGlvbik6MH1jaGVja1ZpZXdwb3J0U2l6ZSgpe3RoaXMuX21lYXN1cmVWaWV3cG9ydFNpemUoKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5v'@;
put 'bkRhdGFMZW5ndGhDaGFuZ2VkKCl9X21lYXN1cmVWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3cG9ydFNpemU9dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVWaWV3cG9ydFNpemUodGhpcy5vcmllbnRhdGlvbil9X21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoYSl7YSYmdGhpcy5fcnVuQWZ0ZXJD'@;
put 'aGFuZ2VEZXRlY3Rpb24ucHVzaChhKSx0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmd8fCh0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITAsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pnt0aGlzLl9kb0NoYW5n'@;
put 'ZURldGVjdGlvbigpfSkpKX1fZG9DaGFuZ2VEZXRlY3Rpb24oKXt0aGlzLl9pc0NoYW5nZURldGVjdGlvblBlbmRpbmc9ITEsdGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm09dGhpcy5fcmVuZGVyZWRDb250ZW50VHJhbnNmb3JtLHRoaXMubmdab25l'@;
put 'LnJ1bigoKT0+dGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCkpO2NvbnN0IGE9dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb247dGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W107Zm9yKGNvbnN0IGQgb2YgYSlkKCl9X2NhbGN1bGF0ZVNwYWNlclNpemUoKXt0'@;
put 'aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8iIjpgJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uP2Ake3RoaXMuX3RvdGFsQ29udGVu'@;
put 'dFNpemV9cHhgOiIifXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZSh4cyksR2UoWW8pLEdlKFUwZSw4KSxHZShmbSw4KSxHZShBeSksR2UoVEwpLEdlKFcwZSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZuYSh5RmUsNyksMiZkKXtsZXQgZjt4aShmPUVpKCkpJiYoaC5fY29udGVudFdyYXBwZXI9Zi5maXJzdCl9fSxob3N0QXR0cnM6WzEsImNkay12aXJ0dWFsLXNj'@;
put 'cm9sbC12aWV3cG9ydCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwiLCJob3Jpem9udGFsIj09PWgub3JpZW50YXRpb24pKCJjZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRp'@;
put 'b24tdmVydGljYWwiLCJob3Jpem9udGFsIiE9PWgub3JpZW50YXRpb24pfSxpbnB1dHM6e29yaWVudGF0aW9uOiJvcmllbnRhdGlvbiIsYXBwZW5kT25seTpbam4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImFwcGVuZE9ubHkiLCJhcHBlbmRPbmx5IixzMV19LG91dHB1dHM6e3Njcm9s'@;
put 'bGVkSW5kZXhDaGFuZ2U6InNjcm9sbGVkSW5kZXhDaGFuZ2UifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltmbyhbe3Byb3ZpZGU6WjBlLHVzZUZhY3Rvcnk6KGEsZCk9PmF8fGQsZGVwczpbW25ldyBJMSxuZXcgbDUoVzBlKV0sY119XSksWmwsQ28sJEldLG5nQ29udGVudFNlbGVjdG9yczpf'@;
put 'RmUsZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbImNvbnRlbnRXcmFwcGVyIiwiIl0sWzEsImNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXIiXSxbMSwiY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGxvKCksZGUoMCwiZGl2'@;
put 'IiwxLDApLFlyKDIpLGhlKCksR3QoMywiZGl2IiwyKSksMiZkJiYoZmUoMyksd2QoIndpZHRoIixoLl90b3RhbENvbnRlbnRXaWR0aCkoImhlaWdodCIsaC5fdG90YWxDb250ZW50SGVpZ2h0KSl9LHN0eWxlczpbImNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydHtkaXNwbGF5OmJsb2NrO3Bv'@;
put 'c2l0aW9uOnJlbGF0aXZlO3RyYW5zZm9ybTp0cmFuc2xhdGVaKDApfS5jZGstdmlydHVhbC1zY3JvbGxhYmxle292ZXJmbG93OmF1dG87d2lsbC1jaGFuZ2U6c2Nyb2xsLXBvc2l0aW9uO2NvbnRhaW46c3RyaWN0Oy13ZWJraXQtb3ZlcmZsb3ctc2Nyb2xsaW5nOnRvdWNofS5jZGstdmlydHVh'@;
put 'bC1zY3JvbGwtY29udGVudC13cmFwcGVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtjb250YWluOmNvbnRlbnR9W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye3JpZ2h0OjA7bGVmdDphdXRvfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRp'@;
put 'b24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcnttaW4taGVpZ2h0OjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPmRsOm5vdChbY2RrVmlydHVhbEZv'@;
put 'cl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNj'@;
put 'cm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnVsOm5vdChbY2RrVmlydHVhbEZvcl0pe3BhZGRpbmctbGVmdDow'@;
put 'O3BhZGRpbmctcmlnaHQ6MDttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7b3V0bGluZTpub25lfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250'@;
put 'ZW50LXdyYXBwZXJ7bWluLXdpZHRoOjEwMCV9LmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRp'@;
put 'Y2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPm9sOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dGFibGU6bm90KFtjZGtWaXJ0dWFsRm9y'@;
put 'XSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3QoW2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLXRvcDowO3BhZGRpbmctYm90dG9tOjA7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDti'@;
put 'b3JkZXItdG9wLXdpZHRoOjA7Ym9yZGVyLWJvdHRvbS13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcntoZWlnaHQ6MXB4O3RyYW5zZm9ybS1vcmlnaW46MCAwO2ZsZXg6MCAwIGF1dG99W2Rpcj1ydGxdIC5jZGstdmlydHVhbC1zY3JvbGwtc3BhY2Vye3Ry'@;
put 'YW5zZm9ybS1vcmlnaW46MTAwJSAwfSJdLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gRzBlKGMsbCxhKXtpZighYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpcmV0dXJuIDA7Y29uc3QgaD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp'@;
put 'O3JldHVybiJob3Jpem9udGFsIj09PWM/InN0YXJ0Ij09PWw/aC5sZWZ0OmgucmlnaHQ6InN0YXJ0Ij09PWw/aC50b3A6aC5ib3R0b219bGV0IEFMPSgoKT0+e2NsYXNzIGN7Z2V0IGNka1ZpcnR1YWxGb3JPZigpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxG'@;
put 'b3JPZihhKXt0aGlzLl9jZGtWaXJ0dWFsRm9yT2Y9YSxmdW5jdGlvbiB2RmUoYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLmNvbm5lY3QmJiEoYyBpbnN0YW5jZW9mIFpaKX0oYSk/dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChhKTp0aGlzLl9kYXRhU291cmNlQ2hhbmdl'@;
put 'cy5uZXh0KG5ldyBiRmUoQk0oYSk/YTpBcnJheS5mcm9tKGF8fFtdKSkpfWdldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl9jZGtWaXJ0dWFsRm9yVHJhY2tCeX1zZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoYSl7dGhpcy5fbmVlZHNVcGRhdGU9ITAsdGhpcy5fY2RrVmly'@;
put 'dHVhbEZvclRyYWNrQnk9YT8oZCxoKT0+YShkKyh0aGlzLl9yZW5kZXJlZFJhbmdlP3RoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQ6MCksaCk6dm9pZCAwfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoYSl7YSYmKHRoaXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX3RlbXBsYXRlPWEpfWdldCBj'@;
put 'ZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5fdmlld1JlcGVhdGVyLnZpZXdDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZShhKXt0aGlzLl92aWV3UmVwZWF0ZXIudmlld0NhY2hlU2l6ZT1jNyhhKX1jb25zdHJ1Y3RvcihhLGQs'@;
put 'aCxmLHYsTSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1hLHRoaXMuX3RlbXBsYXRlPWQsdGhpcy5fZGlmZmVycz1oLHRoaXMuX3ZpZXdSZXBlYXRlcj1mLHRoaXMuX3ZpZXdwb3J0PXYsdGhpcy52aWV3Q2hhbmdlPW5ldyBXbix0aGlzLl9kYXRhU291cmNlQ2hhbmdlcz1uZXcgV24sdGhpcy5k'@;
put 'YXRhU3RyZWFtPXRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLnBpcGUoeDIobnVsbCksZnVuY3Rpb24gZEZlKCl7cmV0dXJuIFZpKChjLGwpPT57bGV0IGEsZD0hMTtjLnN1YnNjcmliZShOaShsLGg9Pntjb25zdCBmPWE7YT1oLGQmJmwubmV4dChbZixoXSksZD0hMH0pKX0pfSgpLFYxKChbRCxa'@;
put 'XSk9PnRoaXMuX2NoYW5nZURhdGFTb3VyY2UoRCxaKSksazBlKDEpKSx0aGlzLl9kaWZmZXI9bnVsbCx0aGlzLl9uZWVkc1VwZGF0ZT0hMSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuZGF0YVN0cmVhbS5zdWJzY3JpYmUoRD0+e3RoaXMuX2RhdGE9RCx0aGlzLl9vblJlbmRlcmVkRGF0'@;
put 'YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQucmVuZGVyZWRSYW5nZVN0cmVhbS5waXBlKE4wKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZShEPT57dGhpcy5fcmVuZGVyZWRSYW5nZT1ELHRoaXMudmlld0NoYW5nZS5vYnNlcnZlcnMubGVuZ3RoJiZNLnJ1bigoKT0+dGhpcy52aWV3Q2hh'@;
put 'bmdlLm5leHQodGhpcy5fcmVuZGVyZWRSYW5nZSkpLHRoaXMuX29uUmVuZGVyZWREYXRhQ2hhbmdlKCl9KSx0aGlzLl92aWV3cG9ydC5hdHRhY2godGhpcyl9bWVhc3VyZVJhbmdlU2l6ZShhLGQpe2lmKGEuc3RhcnQ+PWEuZW5kKXJldHVybiAwO2NvbnN0IGg9YS5zdGFydC10aGlzLl9yZW5k'@;
put 'ZXJlZFJhbmdlLnN0YXJ0LGY9YS5lbmQtYS5zdGFydDtsZXQgdixNO2ZvcihsZXQgRD0wO0Q8ZjtEKyspe2NvbnN0IFo9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoRCtoKTtpZihaJiZaLnJvb3ROb2Rlcy5sZW5ndGgpe3Y9TT1aLnJvb3ROb2Rlc1swXTticmVha319Zm9yKGxldCBEPWYt'@;
put 'MTtEPi0xO0QtLSl7Y29uc3QgWj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChEK2gpO2lmKFomJloucm9vdE5vZGVzLmxlbmd0aCl7TT1aLnJvb3ROb2Rlc1taLnJvb3ROb2Rlcy5sZW5ndGgtMV07YnJlYWt9fXJldHVybiB2JiZNP0cwZShkLCJlbmQiLE0pLUcwZShkLCJzdGFydCIsdik6'@;
put 'MH1uZ0RvQ2hlY2soKXtpZih0aGlzLl9kaWZmZXImJnRoaXMuX25lZWRzVXBkYXRlKXtjb25zdCBhPXRoaXMuX2RpZmZlci5kaWZmKHRoaXMuX3JlbmRlcmVkSXRlbXMpO2E/dGhpcy5fYXBwbHlDaGFuZ2VzKGEpOnRoaXMuX3VwZGF0ZUNvbnRleHQoKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMX19'@;
put 'bmdPbkRlc3Ryb3koKXt0aGlzLl92aWV3cG9ydC5kZXRhY2goKSx0aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5uZXh0KHZvaWQgMCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMuY29tcGxldGUoKSx0aGlzLnZpZXdDaGFuZ2UuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMu'@;
put 'X2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdSZXBlYXRlci5kZXRhY2goKX1fb25SZW5kZXJlZERhdGFDaGFuZ2UoKXt0aGlzLl9yZW5kZXJlZFJhbmdlJiYodGhpcy5fcmVuZGVyZWRJdGVtcz10aGlzLl9kYXRhLnNsaWNlKHRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQsdGhpcy5f'@;
put 'cmVuZGVyZWRSYW5nZS5lbmQpLHRoaXMuX2RpZmZlcnx8KHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQodGhpcy5fcmVuZGVyZWRJdGVtcykuY3JlYXRlKChhLGQpPT50aGlzLmNka1ZpcnR1YWxGb3JUcmFja0J5P3RoaXMuY2RrVmlydHVhbEZvclRyYWNrQnkoYSxkKTpkKSksdGhp'@;
put 'cy5fbmVlZHNVcGRhdGU9ITApfV9jaGFuZ2VEYXRhU291cmNlKGEsZCl7cmV0dXJuIGEmJmEuZGlzY29ubmVjdCh0aGlzKSx0aGlzLl9uZWVkc1VwZGF0ZT0hMCxkP2QuY29ubmVjdCh0aGlzKTpmYSgpfV91cGRhdGVDb250ZXh0KCl7Y29uc3QgYT10aGlzLl9kYXRhLmxlbmd0aDtsZXQgZD10'@;
put 'aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2QtLTspe2NvbnN0IGg9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoZCk7aC5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQrZCxoLmNvbnRleHQuY291bnQ9YSx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRl'@;
put 'eHRQcm9wZXJ0aWVzKGguY29udGV4dCksaC5kZXRlY3RDaGFuZ2VzKCl9fV9hcHBseUNoYW5nZXMoYSl7dGhpcy5fdmlld1JlcGVhdGVyLmFwcGx5Q2hhbmdlcyhhLHRoaXMuX3ZpZXdDb250YWluZXJSZWYsKGYsdixNKT0+dGhpcy5fZ2V0RW1iZWRkZWRWaWV3QXJncyhmLE0pLGY9PmYuaXRl'@;
put 'bSksYS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoZj0+e3RoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGYuY3VycmVudEluZGV4KS5jb250ZXh0LiRpbXBsaWNpdD1mLml0ZW19KTtjb25zdCBkPXRoaXMuX2RhdGEubGVuZ3RoO2xldCBoPXRoaXMuX3ZpZXdDb250YWluZXJSZWYubGVuZ3RoO2Zv'@;
put 'cig7aC0tOyl7Y29uc3QgZj10aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChoKTtmLmNvbnRleHQuaW5kZXg9dGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCtoLGYuY29udGV4dC5jb3VudD1kLHRoaXMuX3VwZGF0ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoZi5jb250ZXh0KX19X3VwZGF0'@;
put 'ZUNvbXB1dGVkQ29udGV4dFByb3BlcnRpZXMoYSl7YS5maXJzdD0wPT09YS5pbmRleCxhLmxhc3Q9YS5pbmRleD09PWEuY291bnQtMSxhLmV2ZW49YS5pbmRleCUyPT0wLGEub2RkPSFhLmV2ZW59X2dldEVtYmVkZGVkVmlld0FyZ3MoYSxkKXtyZXR1cm57dGVtcGxhdGVSZWY6dGhpcy5fdGVt'@;
put 'cGxhdGUsY29udGV4dDp7JGltcGxpY2l0OmEuaXRlbSxjZGtWaXJ0dWFsRm9yT2Y6dGhpcy5fY2RrVmlydHVhbEZvck9mLGluZGV4Oi0xLGNvdW50Oi0xLGZpcnN0OiExLGxhc3Q6ITEsb2RkOiExLGV2ZW46ITF9LGluZGV4OmR9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXty'@;
put 'ZXR1cm4gbmV3KGR8fGMpKEdlKERhKSxHZShTbCksR2UoUTUpLEdlKGJZKSxHZShreSw0KSxHZShZbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrVmlydHVhbEZvciIsIiIsImNka1ZpcnR1YWxGb3JPZiIsIiJdXSxpbnB1dHM6e2Nka1Zp'@;
put 'cnR1YWxGb3JPZjoiY2RrVmlydHVhbEZvck9mIixjZGtWaXJ0dWFsRm9yVHJhY2tCeToiY2RrVmlydHVhbEZvclRyYWNrQnkiLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZToiY2RrVmlydHVhbEZvclRlbXBsYXRlIixjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU6ImNka1ZpcnR1YWxGb3JU'@;
put 'ZW1wbGF0ZUNhY2hlU2l6ZSJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2ZvKFt7cHJvdmlkZTpiWSx1c2VDbGFzczp6MGV9XSldfSl9fXJldHVybiBjfSkoKSxFRmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3Rh'@;
put 'dGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24geVkoYyxsLGEpe2ZvcihsZXQgZCBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkoZCkpe2NvbnN0IGg9bFtkXTtoP2Muc2V0UHJvcGVydHkoZCxo'@;
put 'LGE/LmhhcyhkKT8iaW1wb3J0YW50IjoiIik6Yy5yZW1vdmVQcm9wZXJ0eShkKX1yZXR1cm4gY31mdW5jdGlvbiBEeShjLGwpe2NvbnN0IGE9bD8iIjoibm9uZSI7eVkoYy5zdHlsZSx7InRvdWNoLWFjdGlvbiI6bD8iIjoibm9uZSIsIi13ZWJraXQtdXNlci1kcmFnIjpsPyIiOiJub25lIiwi'@;
put 'LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjpsPyIiOiJ0cmFuc3BhcmVudCIsInVzZXItc2VsZWN0IjphLCItbXMtdXNlci1zZWxlY3QiOmEsIi13ZWJraXQtdXNlci1zZWxlY3QiOmEsIi1tb3otdXNlci1zZWxlY3QiOmF9KX1mdW5jdGlvbiAkMGUoYyxsLGEpe3lZKGMuc3R5bGUse3Bv'@;
put 'c2l0aW9uOmw/IiI6ImZpeGVkIix0b3A6bD8iIjoiMCIsb3BhY2l0eTpsPyIiOiIwIixsZWZ0Omw/IiI6Ii05OTllbSJ9LGEpfWZ1bmN0aW9uIGtMKGMsbCl7cmV0dXJuIGwmJiJub25lIiE9bD9jKyIgIitsOmN9ZnVuY3Rpb24gSzBlKGMsbCl7Yy5zdHlsZS53aWR0aD1gJHtsLndpZHRofXB4'@;
put 'YCxjLnN0eWxlLmhlaWdodD1gJHtsLmhlaWdodH1weGAsYy5zdHlsZS50cmFuc2Zvcm09REwobC5sZWZ0LGwudG9wKX1mdW5jdGlvbiBETChjLGwpe3JldHVybmB0cmFuc2xhdGUzZCgke01hdGgucm91bmQoYyl9cHgsICR7TWF0aC5yb3VuZChsKX1weCwgMClgfWZ1bmN0aW9uIF9ZKGMpe2Nv'@;
put 'bnN0IGw9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOmwudG9wLHJpZ2h0OmwucmlnaHQsYm90dG9tOmwuYm90dG9tLGxlZnQ6bC5sZWZ0LHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LHg6bC54LHk6bC55fX1mdW5jdGlvbiB3WShjLGwsYSl7Y29uc3R7dG9wOmQs'@;
put 'Ym90dG9tOmgsbGVmdDpmLHJpZ2h0OnZ9PWM7cmV0dXJuIGE+PWQmJmE8PWgmJmw+PWYmJmw8PXZ9ZnVuY3Rpb24geHgoYyxsLGEpe2MudG9wKz1sLGMuYm90dG9tPWMudG9wK2MuaGVpZ2h0LGMubGVmdCs9YSxjLnJpZ2h0PWMubGVmdCtjLndpZHRofWZ1bmN0aW9uIHEwZShjLGwsYSxkKXtj'@;
put 'b25zdHt0b3A6aCxyaWdodDpmLGJvdHRvbTp2LGxlZnQ6TSx3aWR0aDpELGhlaWdodDpafT1jLG5lPUQqbCxjZT1aKmw7cmV0dXJuIGQ+aC1jZSYmZDx2K2NlJiZhPk0tbmUmJmE8ZituZX1jbGFzcyBYMGV7Y29uc3RydWN0b3IobCl7dGhpcy5fZG9jdW1lbnQ9bCx0aGlzLnBvc2l0aW9ucz1u'@;
put 'ZXcgTWFwfWNsZWFyKCl7dGhpcy5wb3NpdGlvbnMuY2xlYXIoKX1jYWNoZShsKXt0aGlzLmNsZWFyKCksdGhpcy5wb3NpdGlvbnMuc2V0KHRoaXMuX2RvY3VtZW50LHtzY3JvbGxQb3NpdGlvbjp0aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKX0pLGwuZm9yRWFjaChhPT57dGhpcy5w'@;
put 'b3NpdGlvbnMuc2V0KGEse3Njcm9sbFBvc2l0aW9uOnt0b3A6YS5zY3JvbGxUb3AsbGVmdDphLnNjcm9sbExlZnR9LGNsaWVudFJlY3Q6X1koYSl9KX0pfWhhbmRsZVNjcm9sbChsKXtjb25zdCBhPU1MKGwpLGQ9dGhpcy5wb3NpdGlvbnMuZ2V0KGEpO2lmKCFkKXJldHVybiBudWxsO2NvbnN0'@;
put 'IGg9ZC5zY3JvbGxQb3NpdGlvbjtsZXQgZix2O2lmKGE9PT10aGlzLl9kb2N1bWVudCl7Y29uc3QgWj10aGlzLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtmPVoudG9wLHY9Wi5sZWZ0fWVsc2UgZj1hLnNjcm9sbFRvcCx2PWEuc2Nyb2xsTGVmdDtjb25zdCBNPWgudG9wLWYsRD1oLmxl'@;
put 'ZnQtdjtyZXR1cm4gdGhpcy5wb3NpdGlvbnMuZm9yRWFjaCgoWixuZSk9PntaLmNsaWVudFJlY3QmJmEhPT1uZSYmYS5jb250YWlucyhuZSkmJnh4KFouY2xpZW50UmVjdCxNLEQpfSksaC50b3A9ZixoLmxlZnQ9dix7dG9wOk0sbGVmdDpEfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7'@;
put 'cmV0dXJue3RvcDp3aW5kb3cuc2Nyb2xsWSxsZWZ0OndpbmRvdy5zY3JvbGxYfX19ZnVuY3Rpb24gSjBlKGMpe2NvbnN0IGw9Yy5jbG9uZU5vZGUoITApLGE9bC5xdWVyeVNlbGVjdG9yQWxsKCJbaWRdIiksZD1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7bC5yZW1vdmVBdHRyaWJ1dGUoImlk'@;
put 'Iik7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspYVtoXS5yZW1vdmVBdHRyaWJ1dGUoImlkIik7cmV0dXJuImNhbnZhcyI9PT1kP3QxZShjLGwpOigiaW5wdXQiPT09ZHx8InNlbGVjdCI9PT1kfHwidGV4dGFyZWEiPT09ZCkmJmUxZShjLGwpLFEwZSgiY2FudmFzIixjLGwsdDFlKSxRMGUo'@;
put 'ImlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0IixjLGwsZTFlKSxsfWZ1bmN0aW9uIFEwZShjLGwsYSxkKXtjb25zdCBoPWwucXVlcnlTZWxlY3RvckFsbChjKTtpZihoLmxlbmd0aCl7Y29uc3QgZj1hLnF1ZXJ5U2VsZWN0b3JBbGwoYyk7Zm9yKGxldCB2PTA7djxoLmxlbmd0aDt2KyspZChoW3Zd'@;
put 'LGZbdl0pfX1sZXQgQUZlPTA7ZnVuY3Rpb24gZTFlKGMsbCl7ImZpbGUiIT09bC50eXBlJiYobC52YWx1ZT1jLnZhbHVlKSwicmFkaW8iPT09bC50eXBlJiZsLm5hbWUmJihsLm5hbWU9YG1hdC1jbG9uZS0ke2wubmFtZX0tJHtBRmUrK31gKX1mdW5jdGlvbiB0MWUoYyxsKXtjb25zdCBhPWwu'@;
put 'Z2V0Q29udGV4dCgiMmQiKTtpZihhKXRyeXthLmRyYXdJbWFnZShjLDAsMCl9Y2F0Y2h7fX1mdW5jdGlvbiBuMWUoYyxsKXtjb25zdCBhPWMucm9vdE5vZGVzO2lmKDE9PT1hLmxlbmd0aCYmYVswXS5ub2RlVHlwZT09PWwuRUxFTUVOVF9OT0RFKXJldHVybiBhWzBdO2NvbnN0IGQ9bC5jcmVh'@;
put 'dGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gYS5mb3JFYWNoKGg9PmQuYXBwZW5kQ2hpbGQoaCkpLGR9ZnVuY3Rpb24gcjFlKGMpe2NvbnN0IGw9Yy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoIm1zIik+LTE/MToxZTM7cmV0dXJuIHBhcnNlRmxvYXQoYykqbH1mdW5jdGlvbiBDWShjLGwpe3JldHVy'@;
put 'biBjLmdldFByb3BlcnR5VmFsdWUobCkuc3BsaXQoIiwiKS5tYXAoZD0+ZC50cmltKCkpfWNvbnN0IERGZT1uZXcgU2V0KFsicG9zaXRpb24iXSk7Y2xhc3MgSUZle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCxaKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMuX3Jvb3RFbGVtZW50PWEsdGhp'@;
put 'cy5fZGlyZWN0aW9uPWQsdGhpcy5faW5pdGlhbERvbVJlY3Q9aCx0aGlzLl9wcmV2aWV3VGVtcGxhdGU9Zix0aGlzLl9wcmV2aWV3Q2xhc3M9dix0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZT1NLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09RCx0aGlzLl96SW5kZXg9Wn1hdHRhY2gobCl7dGhp'@;
put 'cy5fcHJldmlldz10aGlzLl9jcmVhdGVQcmV2aWV3KCksbC5hcHBlbmRDaGlsZCh0aGlzLl9wcmV2aWV3KSwic2hvd1BvcG92ZXIiaW4gdGhpcy5fcHJldmlldyYmdGhpcy5fcHJldmlldy5zaG93UG9wb3ZlcigpfWRlc3Ryb3koKXt0aGlzLl9wcmV2aWV3LnJlbW92ZSgpLHRoaXMuX3ByZXZp'@;
put 'ZXdFbWJlZGRlZFZpZXc/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aWV3PXRoaXMuX3ByZXZpZXdFbWJlZGRlZFZpZXc9bnVsbH1zZXRUcmFuc2Zvcm0obCl7dGhpcy5fcHJldmlldy5zdHlsZS50cmFuc2Zvcm09bH1nZXRCb3VuZGluZ0NsaWVudFJlY3QoKXtyZXR1cm4gdGhpcy5fcHJldmlldy5n'@;
put 'ZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1hZGRDbGFzcyhsKXt0aGlzLl9wcmV2aWV3LmNsYXNzTGlzdC5hZGQobCl9Z2V0VHJhbnNpdGlvbkR1cmF0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGtGZShjKXtjb25zdCBsPWdldENvbXB1dGVkU3R5bGUoYyksYT1DWShsLCJ0cmFuc2l0aW9uLXByb3Bl'@;
put 'cnR5IiksZD1hLmZpbmQoTT0+InRyYW5zZm9ybSI9PT1NfHwiYWxsIj09PU0pO2lmKCFkKXJldHVybiAwO2NvbnN0IGg9YS5pbmRleE9mKGQpLGY9Q1kobCwidHJhbnNpdGlvbi1kdXJhdGlvbiIpLHY9Q1kobCwidHJhbnNpdGlvbi1kZWxheSIpO3JldHVybiByMWUoZltoXSkrcjFlKHZbaF0p'@;
put 'fSh0aGlzLl9wcmV2aWV3KX1hZGRFdmVudExpc3RlbmVyKGwsYSl7dGhpcy5fcHJldmlldy5hZGRFdmVudExpc3RlbmVyKGwsYSl9cmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEpe3RoaXMuX3ByZXZpZXcucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEpfV9jcmVhdGVQcmV2aWV3KCl7Y29uc3QgbD10'@;
put 'aGlzLl9wcmV2aWV3VGVtcGxhdGUsYT10aGlzLl9wcmV2aWV3Q2xhc3MsZD1sP2wudGVtcGxhdGU6bnVsbDtsZXQgaDtpZihkJiZsKXtjb25zdCBmPWwubWF0Y2hTaXplP3RoaXMuX2luaXRpYWxEb21SZWN0Om51bGwsdj1sLnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGQsbC5j'@;
put 'b250ZXh0KTt2LmRldGVjdENoYW5nZXMoKSxoPW4xZSh2LHRoaXMuX2RvY3VtZW50KSx0aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3PXYsbC5tYXRjaFNpemU/SzBlKGgsZik6aC5zdHlsZS50cmFuc2Zvcm09REwodGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCx0aGlzLl9waWNrdXBQb3Np'@;
put 'dGlvbk9uUGFnZS55KX1lbHNlIGg9SjBlKHRoaXMuX3Jvb3RFbGVtZW50KSxLMGUoaCx0aGlzLl9pbml0aWFsRG9tUmVjdCksdGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKGguc3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pO3JldHVybiB5WShoLnN0eWxlLHsicG9pbnRl'@;
put 'ci1ldmVudHMiOiJub25lIixtYXJnaW46IjAiLHBvc2l0aW9uOiJmaXhlZCIsdG9wOiIwIixsZWZ0OiIwIiwiei1pbmRleCI6dGhpcy5fekluZGV4KyIifSxERmUpLER5KGgsITEpLGguY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcHJldmlldyIpLGguc2V0QXR0cmlidXRlKCJwb3BvdmVyIiwi'@;
put 'bWFudWFsIiksaC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5fZGlyZWN0aW9uKSxhJiYoQXJyYXkuaXNBcnJheShhKT9hLmZvckVhY2goZj0+aC5jbGFzc0xpc3QuYWRkKGYpKTpoLmNsYXNzTGlzdC5hZGQoYSkpLGh9fWNvbnN0IGkxZT1UeSh7cGFzc2l2ZTohMH0pLElMPVR5KHtwYXNzaXZl'@;
put 'OiExfSksbzFlPVR5KHtwYXNzaXZlOiExLGNhcHR1cmU6ITB9KSxhMWU9bmV3IFNldChbInBvc2l0aW9uIl0pO2NsYXNzIExGZXtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEoIXRoaXMuX2Ryb3BDb250YWluZXJ8fCF0aGlzLl9kcm9wQ29udGFpbmVyLmRpc2FibGVk'@;
put 'KX1zZXQgZGlzYWJsZWQobCl7bCE9PXRoaXMuX2Rpc2FibGVkJiYodGhpcy5fZGlzYWJsZWQ9bCx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxlcy5mb3JFYWNoKGE9PkR5KGEsbCkpKX1jb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7dGhpcy5fY29uZmln'@;
put 'PWEsdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVyPWYsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT12LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5faGFzU3RhcnRlZERy'@;
put 'YWdnaW5nPSExLHRoaXMuX21vdmVFdmVudHM9bmV3IFduLHRoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9uPXF0LkVNUFRZLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fcmVzaXplU3Vic2NyaXB0'@;
put 'aW9uPXF0LkVNUFRZLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD1udWxsLHRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9ITAsdGhpcy5faGFuZGxlcz1bXSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9bmV3IFNldCx0aGlzLl9kaXJlY3Rpb249Imx0ciIsdGhpcy5kcmFnU3RhcnREZWxheT0w'@;
put 'LHRoaXMuX2Rpc2FibGVkPSExLHRoaXMuYmVmb3JlU3RhcnRlZD1uZXcgV24sdGhpcy5zdGFydGVkPW5ldyBXbix0aGlzLnJlbGVhc2VkPW5ldyBXbix0aGlzLmVuZGVkPW5ldyBXbix0aGlzLmVudGVyZWQ9bmV3IFduLHRoaXMuZXhpdGVkPW5ldyBXbix0aGlzLmRyb3BwZWQ9bmV3IFduLHRo'@;
put 'aXMubW92ZWQ9dGhpcy5fbW92ZUV2ZW50cyx0aGlzLl9wb2ludGVyRG93bj1NPT57aWYodGhpcy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgRD10aGlzLl9nZXRUYXJnZXRIYW5kbGUoTSk7RCYmIXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoRCkm'@;
put 'JiF0aGlzLmRpc2FibGVkJiZ0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKEQsTSl9ZWxzZSB0aGlzLmRpc2FibGVkfHx0aGlzLl9pbml0aWFsaXplRHJhZ1NlcXVlbmNlKHRoaXMuX3Jvb3RFbGVtZW50LE0pfSx0aGlzLl9wb2ludGVyTW92ZT1NPT57Y29uc3QgRD10aGlzLl9nZXRQb2lu'@;
put 'dGVyUG9zaXRpb25PblBhZ2UoTSk7aWYoIXRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyl7aWYoTWF0aC5hYnMoRC54LXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngpK01hdGguYWJzKEQueS10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55KT49dGhpcy5fY29uZmlnLmRyYWdTdGFydFRo'@;
put 'cmVzaG9sZCl7Y29uc3QgRWU9RGF0ZS5ub3coKT49dGhpcy5fZHJhZ1N0YXJ0VGltZSt0aGlzLl9nZXREcmFnU3RhcnREZWxheShNKSxCZT10aGlzLl9kcm9wQ29udGFpbmVyO2lmKCFFZSlyZXR1cm4gdm9pZCB0aGlzLl9lbmREcmFnU2VxdWVuY2UoTSk7KCFCZXx8IUJlLmlzRHJhZ2dpbmco'@;
put 'KSYmIUJlLmlzUmVjZWl2aW5nKCkpJiYoTS5jYW5jZWxhYmxlJiZNLnByZXZlbnREZWZhdWx0KCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPSEwLHRoaXMuX25nWm9uZS5ydW4oKCk9PnRoaXMuX3N0YXJ0RHJhZ1NlcXVlbmNlKE0pKSl9cmV0dXJufU0uY2FuY2VsYWJsZSYmTS5wcmV2ZW50'@;
put 'RGVmYXVsdCgpO2NvbnN0IFo9dGhpcy5fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRpb24oRCk7aWYodGhpcy5faGFzTW92ZWQ9ITAsdGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uPUQsdGhpcy5fdXBkYXRlUG9pbnRlckRpcmVjdGlvbkRlbHRhKFopLHRoaXMuX2Ryb3BDb250YWlu'@;
put 'ZXIpdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcihaLEQpO2Vsc2V7Y29uc3QgbmU9dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj90aGlzLl9pbml0aWFsRG9tUmVjdDp0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZSxjZT10aGlzLl9hY3RpdmVUcmFuc2Zvcm07Y2UueD1aLngtbmUueCt0'@;
put 'aGlzLl9wYXNzaXZlVHJhbnNmb3JtLngsY2UueT1aLnktbmUueSt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnksdGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShjZS54LGNlLnkpfXRoaXMuX21vdmVFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fbmdab25lLnJ1bigoKT0+e3Ro'@;
put 'aXMuX21vdmVFdmVudHMubmV4dCh7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOlosZXZlbnQ6TSxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoWiksZGVsdGE6dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhfSl9KX0sdGhpcy5fcG9pbnRlclVwPU09Pnt0aGlzLl9lbmREcmFn'@;
put 'U2VxdWVuY2UoTSl9LHRoaXMuX25hdGl2ZURyYWdTdGFydD1NPT57aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IEQ9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKE0pO0QmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKEQpJiYhdGhpcy5kaXNhYmxlZCYmTS5wcmV2ZW50RGVmYXVsdCgp'@;
put 'fWVsc2UgdGhpcy5kaXNhYmxlZHx8TS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLndpdGhSb290RWxlbWVudChsKS53aXRoUGFyZW50KGEucGFyZW50RHJhZ1JlZnx8bnVsbCksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyBYMGUoZCksdi5yZWdpc3RlckRyYWdJdGVtKHRoaXMpfWdldFBsYWNl'@;
put 'aG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlcn1nZXRSb290RWxlbWVudCgpe3JldHVybiB0aGlzLl9yb290RWxlbWVudH1nZXRWaXNpYmxlRWxlbWVudCgpe3JldHVybiB0aGlzLmlzRHJhZ2dpbmcoKT90aGlzLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnRoaXMuZ2V0'@;
put 'Um9vdEVsZW1lbnQoKX13aXRoSGFuZGxlcyhsKXt0aGlzLl9oYW5kbGVzPWwubWFwKGQ9PkVkKGQpKSx0aGlzLl9oYW5kbGVzLmZvckVhY2goZD0+RHkoZCx0aGlzLmRpc2FibGVkKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGE9bmV3IFNldDtyZXR1cm4g'@;
put 'dGhpcy5fZGlzYWJsZWRIYW5kbGVzLmZvckVhY2goZD0+e3RoaXMuX2hhbmRsZXMuaW5kZXhPZihkKT4tMSYmYS5hZGQoZCl9KSx0aGlzLl9kaXNhYmxlZEhhbmRsZXM9YSx0aGlzfXdpdGhQcmV2aWV3VGVtcGxhdGUobCl7cmV0dXJuIHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1sLHRoaXN9d2l0'@;
put 'aFBsYWNlaG9sZGVyVGVtcGxhdGUobCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9bCx0aGlzfXdpdGhSb290RWxlbWVudChsKXtjb25zdCBhPUVkKGwpO3JldHVybiBhIT09dGhpcy5fcm9vdEVsZW1lbnQmJih0aGlzLl9yb290RWxlbWVudCYmdGhpcy5fcmVtb3ZlUm9vdEVs'@;
put 'ZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixJTCksYS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2lu'@;
put 'dGVyRG93bixpMWUpLGEuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQsSUwpfSksdGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fcm9vdEVsZW1lbnQ9YSksdHlwZW9mIFNWR0VsZW1lbnQ8InUiJiZ0aGlzLl9yb290RWxlbWVudCBp'@;
put 'bnN0YW5jZW9mIFNWR0VsZW1lbnQmJih0aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcm9vdEVsZW1lbnQub3duZXJTVkdFbGVtZW50KSx0aGlzfXdpdGhCb3VuZGFyeUVsZW1lbnQobCl7cmV0dXJuIHRoaXMuX2JvdW5kYXJ5RWxlbWVudD1sP0VkKGwpOm51bGwsdGhpcy5fcmVzaXplU3Vi'@;
put 'c2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksbCYmKHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj10aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgxMCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jb250YWluSW5zaWRlQm91bmRhcnlPblJlc2l6ZSgpKSksdGhpc313aXRoUGFyZW50KGwpe3JldHVybiB0'@;
put 'aGlzLl9wYXJlbnREcmFnUmVmPWwsdGhpc31kaXNwb3NlKCl7dGhpcy5fcmVtb3ZlUm9vdEVsZW1lbnRMaXN0ZW5lcnModGhpcy5fcm9vdEVsZW1lbnQpLHRoaXMuaXNEcmFnZ2luZygpJiZ0aGlzLl9yb290RWxlbWVudD8ucmVtb3ZlKCksdGhpcy5fYW5jaG9yPy5yZW1vdmUoKSx0aGlzLl9k'@;
put 'ZXN0cm95UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucmVtb3ZlRHJhZ0l0ZW0odGhpcyksdGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5zdGFydGVkLmNvbXBsZXRlKCks'@;
put 'dGhpcy5yZWxlYXNlZC5jb21wbGV0ZSgpLHRoaXMuZW5kZWQuY29tcGxldGUoKSx0aGlzLmVudGVyZWQuY29tcGxldGUoKSx0aGlzLmV4aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuX21vdmVFdmVudHMuY29tcGxldGUoKSx0aGlzLl9oYW5kbGVzPVtdLHRo'@;
put 'aXMuX2Rpc2FibGVkSGFuZGxlcy5jbGVhcigpLHRoaXMuX2Ryb3BDb250YWluZXI9dm9pZCAwLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMuX2JvdW5kYXJ5RWxlbWVudD10aGlzLl9yb290RWxlbWVudD10'@;
put 'aGlzLl9vd25lclNWR0VsZW1lbnQ9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT10aGlzLl9wcmV2aWV3VGVtcGxhdGU9dGhpcy5fYW5jaG9yPXRoaXMuX3BhcmVudERyYWdSZWY9bnVsbH1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZyYmdGhpcy5fZHJhZ0Ry'@;
put 'b3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpfXJlc2V0KCl7dGhpcy5fcm9vdEVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX2luaXRpYWxUcmFuc2Zvcm18fCIiLHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybT17eDowLHk6MH19ZGlz'@;
put 'YWJsZUhhbmRsZShsKXshdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhsKSYmdGhpcy5faGFuZGxlcy5pbmRleE9mKGwpPi0xJiYodGhpcy5fZGlzYWJsZWRIYW5kbGVzLmFkZChsKSxEeShsLCEwKSl9ZW5hYmxlSGFuZGxlKGwpe3RoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMobCkmJih0aGlz'@;
put 'Ll9kaXNhYmxlZEhhbmRsZXMuZGVsZXRlKGwpLER5KGwsdGhpcy5kaXNhYmxlZCkpfXdpdGhEaXJlY3Rpb24obCl7cmV0dXJuIHRoaXMuX2RpcmVjdGlvbj1sLHRoaXN9X3dpdGhEcm9wQ29udGFpbmVyKGwpe3RoaXMuX2Ryb3BDb250YWluZXI9bH1nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl7Y29u'@;
put 'c3QgbD10aGlzLmlzRHJhZ2dpbmcoKT90aGlzLl9hY3RpdmVUcmFuc2Zvcm06dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtyZXR1cm57eDpsLngseTpsLnl9fXNldEZyZWVEcmFnUG9zaXRpb24obCl7cmV0dXJuIHRoaXMuX2FjdGl2ZVRyYW5zZm9ybT17eDowLHk6MH0sdGhpcy5fcGFzc2l2ZVRy'@;
put 'YW5zZm9ybS54PWwueCx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9bC55LHRoaXMuX2Ryb3BDb250YWluZXJ8fHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0obC54LGwueSksdGhpc313aXRoUHJldmlld0NvbnRhaW5lcihsKXtyZXR1cm4gdGhpcy5fcHJldmlld0NvbnRhaW5lcj1s'@;
put 'LHRoaXN9X3NvcnRGcm9tTGFzdFBvaW50ZXJQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uO2wmJnRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIodGhpcy5fZ2V0Q29uc3RyYWluZWRQb2ludGVyUG9zaXRp'@;
put 'b24obCksbCl9X3JlbW92ZUxpc3RlbmVycygpe3RoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcG9pbnRlclVwU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fZ2V0U2hh'@;
put 'ZG93Um9vdCgpPy5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsbDFlLG8xZSl9X2Rlc3Ryb3lQcmV2aWV3KCl7dGhpcy5fcHJldmlldz8uZGVzdHJveSgpLHRoaXMuX3ByZXZpZXc9bnVsbH1fZGVzdHJveVBsYWNlaG9sZGVyKCl7dGhpcy5fcGxhY2Vob2xkZXI/LnJlbW92ZSgp'@;
put 'LHRoaXMuX3BsYWNlaG9sZGVyUmVmPy5kZXN0cm95KCksdGhpcy5fcGxhY2Vob2xkZXI9dGhpcy5fcGxhY2Vob2xkZXJSZWY9bnVsbH1fZW5kRHJhZ1NlcXVlbmNlKGwpe2lmKHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKSYmKHRoaXMuX3JlbW92ZUxpc3RlbmVycygp'@;
put 'LHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKSx0aGlzLl9oYW5kbGVzJiYodGhpcy5fcm9vdEVsZW1lbnQuc3R5bGUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9dGhpcy5fcm9vdEVsZW1lbnRUYXBI'@;
put 'aWdobGlnaHQpLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZykpaWYodGhpcy5yZWxlYXNlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksdGhpcy5fZHJvcENvbnRhaW5lcil0aGlzLl9kcm9wQ29udGFpbmVyLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fYW5pbWF0ZVByZXZpZXdUb1BsYWNl'@;
put 'aG9sZGVyKCkudGhlbigoKT0+e3RoaXMuX2NsZWFudXBEcmFnQXJ0aWZhY3RzKGwpLHRoaXMuX2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyl9KTtlbHNle3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueD10aGlzLl9hY3Rp'@;
put 'dmVUcmFuc2Zvcm0ueDtjb25zdCBhPXRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShsKTt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnk9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLnksdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuZW5kZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6'@;
put 'dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGEpLGRyb3BQb2ludDphLGV2ZW50Omx9KX0pLHRoaXMuX2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyl9fV9zdGFydERyYWdTZXF1ZW5jZShsKXtFeChsKSYmKHRoaXMuX2xhc3RU'@;
put 'b3VjaEV2ZW50VGltZT1EYXRlLm5vdygpKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCk7Y29uc3QgYT10aGlzLl9nZXRTaGFkb3dSb290KCksZD10aGlzLl9kcm9wQ29udGFpbmVyO2lmKGEmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2EuYWRkRXZl'@;
put 'bnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLGwxZSxvMWUpfSksZCl7Y29uc3QgaD10aGlzLl9yb290RWxlbWVudCxmPWgucGFyZW50Tm9kZSx2PXRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyRWxlbWVudCgpLE09dGhpcy5fYW5jaG9yPXRoaXMuX2FuY2hvcnx8dGhp'@;
put 'cy5fZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIik7Zi5pbnNlcnRCZWZvcmUoTSxoKSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtPWguc3R5bGUudHJhbnNmb3JtfHwiIix0aGlzLl9wcmV2aWV3PW5ldyBJRmUodGhpcy5fZG9jdW1lbnQsdGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fZGlyZWN0aW9u'@;
put 'LHRoaXMuX2luaXRpYWxEb21SZWN0LHRoaXMuX3ByZXZpZXdUZW1wbGF0ZXx8bnVsbCx0aGlzLnByZXZpZXdDbGFzc3x8bnVsbCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtLHRoaXMuX2NvbmZpZy56SW5kZXh8fDFlMyksdGhpcy5fcHJldmlldy5h'@;
put 'dHRhY2godGhpcy5fZ2V0UHJldmlld0luc2VydGlvblBvaW50KGYsYSkpLCQwZShoLCExLGExZSksdGhpcy5fZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmLnJlcGxhY2VDaGlsZCh2LGgpKSx0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLGQuc3RhcnQoKSx0aGlz'@;
put 'Ll9pbml0aWFsQ29udGFpbmVyPWQsdGhpcy5faW5pdGlhbEluZGV4PWQuZ2V0SXRlbUluZGV4KHRoaXMpfWVsc2UgdGhpcy5zdGFydGVkLm5leHQoe3NvdXJjZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9pbml0aWFsQ29udGFpbmVyPXRoaXMuX2luaXRpYWxJbmRleD12b2lkIDA7dGhpcy5fcGFy'@;
put 'ZW50UG9zaXRpb25zLmNhY2hlKGQ/ZC5nZXRTY3JvbGxhYmxlUGFyZW50cygpOltdKX1faW5pdGlhbGl6ZURyYWdTZXF1ZW5jZShsLGEpe3RoaXMuX3BhcmVudERyYWdSZWYmJmEuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3QgZD10aGlzLmlzRHJhZ2dpbmcoKSxoPUV4KGEpLGY9IWgmJjAhPT1h'@;
put 'LmJ1dHRvbix2PXRoaXMuX3Jvb3RFbGVtZW50LE09TUwoYSksRD0haCYmdGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWUrODAwPkRhdGUubm93KCksWj1oP2Z1bmN0aW9uICRQZShjKXtjb25zdCBsPWMudG91Y2hlcyYmYy50b3VjaGVzWzBdfHxjLmNo'@;
put 'YW5nZWRUb3VjaGVzJiZjLmNoYW5nZWRUb3VjaGVzWzBdO3JldHVybiEoIWx8fC0xIT09bC5pZGVudGlmaWVyfHxudWxsIT1sLnJhZGl1c1gmJjEhPT1sLnJhZGl1c1h8fG51bGwhPWwucmFkaXVzWSYmMSE9PWwucmFkaXVzWSl9KGEpOmZ1bmN0aW9uIEdQZShjKXtyZXR1cm4gMD09PWMuYnV0'@;
put 'dG9uc3x8MD09PWMuZGV0YWlsfShhKTtpZihNJiZNLmRyYWdnYWJsZSYmIm1vdXNlZG93biI9PT1hLnR5cGUmJmEucHJldmVudERlZmF1bHQoKSxkfHxmfHxEfHxaKXJldHVybjtpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7Y29uc3QgYmU9di5zdHlsZTt0aGlzLl9yb290RWxlbWVudFRhcEhp'@;
put 'Z2hsaWdodD1iZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcnx8IiIsYmUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I9InRyYW5zcGFyZW50In10aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmc9dGhpcy5faGFzTW92ZWQ9ITEsdGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5faW5pdGlhbERvbVJl'@;
put 'Y3Q9dGhpcy5fcm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyTW92ZS5zdWJzY3JpYmUodGhpcy5fcG9pbnRlck1vdmUpLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlv'@;
put 'bj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnBvaW50ZXJVcC5zdWJzY3JpYmUodGhpcy5fcG9pbnRlclVwKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zY3JvbGxlZCh0aGlzLl9nZXRTaGFkb3dSb290KCkpLnN1YnNjcmliZShiZT0+dGhpcy5fdXBk'@;
put 'YXRlT25TY3JvbGwoYmUpKSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQmJih0aGlzLl9ib3VuZGFyeVJlY3Q9X1kodGhpcy5fYm91bmRhcnlFbGVtZW50KSk7Y29uc3QgbmU9dGhpcy5fcHJldmlld1RlbXBsYXRlO3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50PW5lJiZuZS50ZW1wbGF0ZSYm'@;
put 'IW5lLm1hdGNoU2l6ZT97eDowLHk6MH06dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uSW5FbGVtZW50KHRoaXMuX2luaXRpYWxEb21SZWN0LGwsYSk7Y29uc3QgY2U9dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U9dGhpcy5fbGFzdEtub3duUG9pbnRlclBvc2l0aW9uPXRoaXMuX2dldFBvaW50'@;
put 'ZXJQb3NpdGlvbk9uUGFnZShhKTt0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGE9e3g6MCx5OjB9LHRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZT17eDpjZS54LHk6Y2UueX0sdGhpcy5fZHJhZ1N0YXJ0VGltZT1EYXRlLm5vdygpLHRoaXMuX2RyYWdEcm9wUmVn'@;
put 'aXN0cnkuc3RhcnREcmFnZ2luZyh0aGlzLGEpfV9jbGVhbnVwRHJhZ0FydGlmYWN0cyhsKXskMGUodGhpcy5fcm9vdEVsZW1lbnQsITAsYTFlKSx0aGlzLl9hbmNob3IucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5fcm9vdEVsZW1lbnQsdGhpcy5fYW5jaG9yKSx0aGlzLl9kZXN0cm95'@;
put 'UHJldmlldygpLHRoaXMuX2Rlc3Ryb3lQbGFjZWhvbGRlcigpLHRoaXMuX2luaXRpYWxEb21SZWN0PXRoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD10aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT57Y29uc3QgYT10aGlzLl9kcm9w'@;
put 'Q29udGFpbmVyLGQ9YS5nZXRJdGVtSW5kZXgodGhpcyksaD10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCksZj10aGlzLl9nZXREcmFnRGlzdGFuY2UoaCksdj1hLl9pc092ZXJDb250YWluZXIoaC54LGgueSk7dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTpm'@;
put 'LGRyb3BQb2ludDpoLGV2ZW50Omx9KSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTp0aGlzLGN1cnJlbnRJbmRleDpkLHByZXZpb3VzSW5kZXg6dGhpcy5faW5pdGlhbEluZGV4LGNvbnRhaW5lcjphLHByZXZpb3VzQ29udGFpbmVyOnRoaXMuX2luaXRpYWxDb250YWluZXIsaXNQb2ludGVyT3Zl'@;
put 'ckNvbnRhaW5lcjp2LGRpc3RhbmNlOmYsZHJvcFBvaW50OmgsZXZlbnQ6bH0pLGEuZHJvcCh0aGlzLGQsdGhpcy5faW5pdGlhbEluZGV4LHRoaXMuX2luaXRpYWxDb250YWluZXIsdixmLGgsbCksdGhpcy5fZHJvcENvbnRhaW5lcj10aGlzLl9pbml0aWFsQ29udGFpbmVyfSl9X3VwZGF0ZUFj'@;
put 'dGl2ZURyb3BDb250YWluZXIoe3g6bCx5OmF9LHt4OmQseTpofSl7bGV0IGY9dGhpcy5faW5pdGlhbENvbnRhaW5lci5fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbih0aGlzLGwsYSk7IWYmJnRoaXMuX2Ryb3BDb250YWluZXIhPT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZ0aGlz'@;
put 'Ll9pbml0aWFsQ29udGFpbmVyLl9pc092ZXJDb250YWluZXIobCxhKSYmKGY9dGhpcy5faW5pdGlhbENvbnRhaW5lciksZiYmZiE9PXRoaXMuX2Ryb3BDb250YWluZXImJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmV4aXRlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOnRoaXMuX2Ry'@;
put 'b3BDb250YWluZXJ9KSx0aGlzLl9kcm9wQ29udGFpbmVyLmV4aXQodGhpcyksdGhpcy5fZHJvcENvbnRhaW5lcj1mLHRoaXMuX2Ryb3BDb250YWluZXIuZW50ZXIodGhpcyxsLGEsZj09PXRoaXMuX2luaXRpYWxDb250YWluZXImJmYuc29ydGluZ0Rpc2FibGVkP3RoaXMuX2luaXRpYWxJbmRl'@;
put 'eDp2b2lkIDApLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOnRoaXMsY29udGFpbmVyOmYsY3VycmVudEluZGV4OmYuZ2V0SXRlbUluZGV4KHRoaXMpfSl9KSx0aGlzLmlzRHJhZ2dpbmcoKSYmKHRoaXMuX2Ryb3BDb250YWluZXIuX3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkoZCxoKSx0aGlz'@;
put 'Ll9kcm9wQ29udGFpbmVyLl9zb3J0SXRlbSh0aGlzLGwsYSx0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGEpLHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwsYSk6dGhpcy5fYXBwbHlQcmV2aWV3VHJhbnNmb3JtKGwtdGhpcy5fcGlja3VwUG9z'@;
put 'aXRpb25JbkVsZW1lbnQueCxhLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LnkpKX1fYW5pbWF0ZVByZXZpZXdUb1BsYWNlaG9sZGVyKCl7aWYoIXRoaXMuX2hhc01vdmVkKXJldHVybiBQcm9taXNlLnJlc29sdmUoKTtjb25zdCBsPXRoaXMuX3BsYWNlaG9sZGVyLmdldEJvdW5kaW5n'@;
put 'Q2xpZW50UmVjdCgpO3RoaXMuX3ByZXZpZXcuYWRkQ2xhc3MoImNkay1kcmFnLWFuaW1hdGluZyIpLHRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLmxlZnQsbC50b3ApO2NvbnN0IGE9dGhpcy5fcHJldmlldy5nZXRUcmFuc2l0aW9uRHVyYXRpb24oKTtyZXR1cm4gMD09PWE/UHJvbWlz'@;
put 'ZS5yZXNvbHZlKCk6dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5uZXcgUHJvbWlzZShkPT57Y29uc3QgaD12PT57KCF2fHxNTCh2KT09PXRoaXMuX3ByZXZpZXcmJiJ0cmFuc2Zvcm0iPT09di5wcm9wZXJ0eU5hbWUpJiYodGhpcy5fcHJldmlldz8ucmVtb3ZlRXZlbnRMaXN0'@;
put 'ZW5lcigidHJhbnNpdGlvbmVuZCIsaCksZCgpLGNsZWFyVGltZW91dChmKSl9LGY9c2V0VGltZW91dChoLDEuNSphKTt0aGlzLl9wcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGgpfSkpfV9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKXtjb25zdCBsPXRoaXMuX3Bs'@;
put 'YWNlaG9sZGVyVGVtcGxhdGUsYT1sP2wudGVtcGxhdGU6bnVsbDtsZXQgZDtyZXR1cm4gYT8odGhpcy5fcGxhY2Vob2xkZXJSZWY9bC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhhLGwuY29udGV4dCksdGhpcy5fcGxhY2Vob2xkZXJSZWYuZGV0ZWN0Q2hhbmdlcygpLGQ9bjFl'@;
put 'KHRoaXMuX3BsYWNlaG9sZGVyUmVmLHRoaXMuX2RvY3VtZW50KSk6ZD1KMGUodGhpcy5fcm9vdEVsZW1lbnQpLGQuc3R5bGUucG9pbnRlckV2ZW50cz0ibm9uZSIsZC5jbGFzc0xpc3QuYWRkKCJjZGstZHJhZy1wbGFjZWhvbGRlciIpLGR9X2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudChs'@;
put 'LGEsZCl7Y29uc3QgaD1hPT09dGhpcy5fcm9vdEVsZW1lbnQ/bnVsbDphLGY9aD9oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOmwsdj1FeChkKT9kLnRhcmdldFRvdWNoZXNbMF06ZCxNPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtyZXR1cm57eDpmLmxlZnQtbC5sZWZ0Kyh2'@;
put 'LnBhZ2VYLWYubGVmdC1NLmxlZnQpLHk6Zi50b3AtbC50b3ArKHYucGFnZVktZi50b3AtTS50b3ApfX1fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpe2NvbnN0IGE9dGhpcy5fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLGQ9RXgobCk/bC50b3VjaGVzWzBdfHxsLmNoYW5nZWRUb3Vj'@;
put 'aGVzWzBdfHx7cGFnZVg6MCxwYWdlWTowfTpsLGg9ZC5wYWdlWC1hLmxlZnQsZj1kLnBhZ2VZLWEudG9wO2lmKHRoaXMuX293bmVyU1ZHRWxlbWVudCl7Y29uc3Qgdj10aGlzLl9vd25lclNWR0VsZW1lbnQuZ2V0U2NyZWVuQ1RNKCk7aWYodil7Y29uc3QgTT10aGlzLl9vd25lclNWR0VsZW1l'@;
put 'bnQuY3JlYXRlU1ZHUG9pbnQoKTtyZXR1cm4gTS54PWgsTS55PWYsTS5tYXRyaXhUcmFuc2Zvcm0odi5pbnZlcnNlKCkpfX1yZXR1cm57eDpoLHk6Zn19X2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcj90aGlzLl9kcm9wQ29udGFp'@;
put 'bmVyLmxvY2tBeGlzOm51bGw7bGV0e3g6ZCx5Omh9PXRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5jb25zdHJhaW5Qb3NpdGlvbihsLHRoaXMsdGhpcy5faW5pdGlhbERvbVJlY3QsdGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQpOmw7aWYoIngiPT09dGhpcy5sb2NrQXhpc3x8Ingi'@;
put 'PT09YT9oPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnktKHRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueTowKTooInkiPT09dGhpcy5sb2NrQXhpc3x8InkiPT09YSkmJihkPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngtKHRoaXMu'@;
put 'Y29uc3RyYWluUG9zaXRpb24/dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQueDowKSksdGhpcy5fYm91bmRhcnlSZWN0KXtjb25zdHt4OmYseTp2fT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3t4OjAseTowfTp0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudCxNPXRoaXMuX2JvdW5k'@;
put 'YXJ5UmVjdCx7d2lkdGg6RCxoZWlnaHQ6Wn09dGhpcy5fZ2V0UHJldmlld1JlY3QoKSxuZT1NLnRvcCt2LGNlPU0uYm90dG9tLShaLXYpO2Q9czFlKGQsTS5sZWZ0K2YsTS5yaWdodC0oRC1mKSksaD1zMWUoaCxuZSxjZSl9cmV0dXJue3g6ZCx5Omh9fV91cGRhdGVQb2ludGVyRGlyZWN0aW9u'@;
put 'RGVsdGEobCl7Y29uc3R7eDphLHk6ZH09bCxoPXRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSxmPXRoaXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZSx2PU1hdGguYWJzKGEtZi54KSxNPU1hdGguYWJzKGQtZi55KTtyZXR1cm4gdj50aGlzLl9jb25maWcucG9pbnRl'@;
put 'ckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGgueD1hPmYueD8xOi0xLGYueD1hKSxNPnRoaXMuX2NvbmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC55PWQ+Zi55PzE6LTEsZi55PWQpLGh9X3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKXtpZighdGhpcy5f'@;
put 'cm9vdEVsZW1lbnR8fCF0aGlzLl9oYW5kbGVzKXJldHVybjtjb25zdCBsPXRoaXMuX2hhbmRsZXMubGVuZ3RoPjB8fCF0aGlzLmlzRHJhZ2dpbmcoKTtsIT09dGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZCYmKHRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9bCxEeSh0aGlz'@;
put 'Ll9yb290RWxlbWVudCxsKSl9X3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKGwpe2wucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixJTCksbC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixpMWUpLGwu'@;
put 'cmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQsSUwpfV9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwsYSl7Y29uc3QgZD1ETChsLGEpLGg9dGhpcy5fcm9vdEVsZW1lbnQuc3R5bGU7bnVsbD09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKHRo'@;
put 'aXMuX2luaXRpYWxUcmFuc2Zvcm09aC50cmFuc2Zvcm0mJiJub25lIiE9aC50cmFuc2Zvcm0/aC50cmFuc2Zvcm06IiIpLGgudHJhbnNmb3JtPWtMKGQsdGhpcy5faW5pdGlhbFRyYW5zZm9ybSl9X2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpe2NvbnN0IGQ9dGhpcy5fcHJldmlld1RlbXBs'@;
put 'YXRlPy50ZW1wbGF0ZT92b2lkIDA6dGhpcy5faW5pdGlhbFRyYW5zZm9ybSxoPURMKGwsYSk7dGhpcy5fcHJldmlldy5zZXRUcmFuc2Zvcm0oa0woaCxkKSl9X2dldERyYWdEaXN0YW5jZShsKXtjb25zdCBhPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlO3JldHVybiBhP3t4OmwueC1hLngs'@;
put 'eTpsLnktYS55fTp7eDowLHk6MH19X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCl7dGhpcy5fYm91bmRhcnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXZvaWQgMCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKXtsZXR7eDpsLHk6'@;
put 'YX09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtpZigwPT09bCYmMD09PWF8fHRoaXMuaXNEcmFnZ2luZygpfHwhdGhpcy5fYm91bmRhcnlFbGVtZW50KXJldHVybjtjb25zdCBkPXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9dGhpcy5fYm91bmRhcnlFbGVtZW50'@;
put 'LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1oLndpZHRoJiYwPT09aC5oZWlnaHR8fDA9PT1kLndpZHRoJiYwPT09ZC5oZWlnaHQpcmV0dXJuO2NvbnN0IGY9aC5sZWZ0LWQubGVmdCx2PWQucmlnaHQtaC5yaWdodCxNPWgudG9wLWQudG9wLEQ9ZC5ib3R0b20taC5ib3R0b207aC53'@;
put 'aWR0aD5kLndpZHRoPyhmPjAmJihsKz1mKSx2PjAmJihsLT12KSk6bD0wLGguaGVpZ2h0PmQuaGVpZ2h0PyhNPjAmJihhKz1NKSxEPjAmJihhLT1EKSk6YT0wLChsIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54fHxhIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55KSYmdGhpcy5zZXRGcmVl'@;
put 'RHJhZ1Bvc2l0aW9uKHt5OmEseDpsfSl9X2dldERyYWdTdGFydERlbGF5KGwpe2NvbnN0IGE9dGhpcy5kcmFnU3RhcnREZWxheTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGE/YTpFeChsKT9hLnRvdWNoOmE/YS5tb3VzZTowfV91cGRhdGVPblNjcm9sbChsKXtjb25zdCBhPXRoaXMuX3BhcmVu'@;
put 'dFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7aWYoYSl7Y29uc3QgZD1NTChsKTt0aGlzLl9ib3VuZGFyeVJlY3QmJmQhPT10aGlzLl9ib3VuZGFyeUVsZW1lbnQmJmQuY29udGFpbnModGhpcy5fYm91bmRhcnlFbGVtZW50KSYmeHgodGhpcy5fYm91bmRhcnlSZWN0LGEudG9wLGEubGVmdCks'@;
put 'dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCs9YS5sZWZ0LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLnkrPWEudG9wLHRoaXMuX2Ryb3BDb250YWluZXJ8fCh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueC09YS5sZWZ0LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LT1hLnRvcCx0aGlzLl9h'@;
put 'cHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55KSl9fV9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KHRoaXMuX2RvY3VtZW50KT8u'@;
put 'c2Nyb2xsUG9zaXRpb258fHRoaXMuX3BhcmVudFBvc2l0aW9ucy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl9X2dldFNoYWRvd1Jvb3QoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fY2FjaGVkU2hhZG93Um9vdCYmKHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9UjBlKHRoaXMuX3Jvb3RFbGVt'@;
put 'ZW50KSksdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fZ2V0UHJldmlld0luc2VydGlvblBvaW50KGwsYSl7Y29uc3QgZD10aGlzLl9wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIjtpZigicGFyZW50Ij09PWQpcmV0dXJuIGw7aWYoImdsb2JhbCI9PT1kKXtjb25zdCBoPXRoaXMuX2RvY3VtZW50'@;
put 'O3JldHVybiBhfHxoLmZ1bGxzY3JlZW5FbGVtZW50fHxoLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxoLm1vekZ1bGxTY3JlZW5FbGVtZW50fHxoLm1zRnVsbHNjcmVlbkVsZW1lbnR8fGguYm9keX1yZXR1cm4gRWQoZCl9X2dldFByZXZpZXdSZWN0KCl7cmV0dXJuKCF0aGlzLl9wcmV2aWV3'@;
put 'UmVjdHx8IXRoaXMuX3ByZXZpZXdSZWN0LndpZHRoJiYhdGhpcy5fcHJldmlld1JlY3QuaGVpZ2h0KSYmKHRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX3ByZXZpZXc/dGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp0aGlzLl9pbml0aWFsRG9tUmVjdCksdGhpcy5fcHJldmll'@;
put 'd1JlY3R9X2dldFRhcmdldEhhbmRsZShsKXtyZXR1cm4gdGhpcy5faGFuZGxlcy5maW5kKGE9PmwudGFyZ2V0JiYobC50YXJnZXQ9PT1hfHxhLmNvbnRhaW5zKGwudGFyZ2V0KSkpfX1mdW5jdGlvbiBzMWUoYyxsLGEpe3JldHVybiBNYXRoLm1heChsLE1hdGgubWluKGEsYykpfWZ1bmN0aW9u'@;
put 'IEV4KGMpe3JldHVybiJ0Ij09PWMudHlwZVswXX1mdW5jdGlvbiBsMWUoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIGMxZShjLGwsYSl7Y29uc3QgZD1UeChsLGMubGVuZ3RoLTEpLGg9VHgoYSxjLmxlbmd0aC0xKTtpZihkPT09aClyZXR1cm47Y29uc3QgZj1jW2RdLHY9aDxkPy0x'@;
put 'OjE7Zm9yKGxldCBNPWQ7TSE9PWg7TSs9diljW01dPWNbTSt2XTtjW2hdPWZ9ZnVuY3Rpb24gVHgoYyxsKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihsLGMpKX1jbGFzcyBQRmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1hLHRo'@;
put 'aXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuX3ByZXZpb3VzU3dhcD17ZHJhZzpudWxsLGRlbHRhOjAsb3ZlcmxhcHM6ITF9fXN0YXJ0KGwpe3RoaXMud2l0aEl0ZW1zKGwpfXNvcnQobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pdGVtUG9zaXRp'@;
put 'b25zLHY9dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKTtpZigtMT09PXYmJmYubGVuZ3RoPjApcmV0dXJuIG51bGw7Y29uc3QgTT0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLEQ9Zi5maW5kSW5kZXgocnQ9PnJ0LmRyYWc9PT1sKSxaPWZbdl0s'@;
put 'Y2U9Wi5jbGllbnRSZWN0LGJlPUQ+dj8xOi0xLEVlPXRoaXMuX2dldEl0ZW1PZmZzZXRQeChmW0RdLmNsaWVudFJlY3QsY2UsYmUpLEJlPXRoaXMuX2dldFNpYmxpbmdPZmZzZXRQeChELGYsYmUpLHFlPWYuc2xpY2UoKTtyZXR1cm4gYzFlKGYsRCx2KSxmLmZvckVhY2goKHJ0LHB0KT0+e2lm'@;
put 'KHFlW3B0XT09PXJ0KXJldHVybjtjb25zdCBkdD1ydC5kcmFnPT09bCxKdD1kdD9FZTpCZSx2bj1kdD9sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpOnJ0LmRyYWcuZ2V0Um9vdEVsZW1lbnQoKTtydC5vZmZzZXQrPUp0LE0/KHZuLnN0eWxlLnRyYW5zZm9ybT1rTChgdHJhbnNsYXRlM2QoJHtN'@;
put 'YXRoLnJvdW5kKHJ0Lm9mZnNldCl9cHgsIDAsIDApYCxydC5pbml0aWFsVHJhbnNmb3JtKSx4eChydC5jbGllbnRSZWN0LDAsSnQpKToodm4uc3R5bGUudHJhbnNmb3JtPWtMKGB0cmFuc2xhdGUzZCgwLCAke01hdGgucm91bmQocnQub2Zmc2V0KX1weCwgMClgLHJ0LmluaXRpYWxUcmFuc2Zv'@;
put 'cm0pLHh4KHJ0LmNsaWVudFJlY3QsSnQsMCkpfSksdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzPXdZKGNlLGEsZCksdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9Wi5kcmFnLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT1NP2gueDpoLnkse3ByZXZpb3VzSW5kZXg6RCxjdXJyZW50SW5kZXg6'@;
put 'dn19ZW50ZXIobCxhLGQsaCl7Y29uc3QgZj1udWxsPT1ofHxoPDA/dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCk6aCx2PXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMsTT12LmluZGV4T2YobCksRD1sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpO2xldCBaPXZbZl07'@;
put 'aWYoWj09PWwmJihaPXZbZisxXSksIVomJihudWxsPT1mfHwtMT09PWZ8fGY8di5sZW5ndGgtMSkmJnRoaXMuX3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGEsZCkmJihaPXZbMF0pLE0+LTEmJnYuc3BsaWNlKE0sMSksWiYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhaKSl7'@;
put 'Y29uc3QgbmU9Wi5nZXRSb290RWxlbWVudCgpO25lLnBhcmVudEVsZW1lbnQuaW5zZXJ0QmVmb3JlKEQsbmUpLHYuc3BsaWNlKGYsMCxsKX1lbHNlIEVkKHRoaXMuX2VsZW1lbnQpLmFwcGVuZENoaWxkKEQpLHYucHVzaChsKTtELnN0eWxlLnRyYW5zZm9ybT0iIix0aGlzLl9jYWNoZUl0ZW1Q'@;
put 'b3NpdGlvbnMoKX13aXRoSXRlbXMobCl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1sLnNsaWNlKCksdGhpcy5fY2FjaGVJdGVtUG9zaXRpb25zKCl9d2l0aFNvcnRQcmVkaWNhdGUobCl7dGhpcy5fc29ydFByZWRpY2F0ZT1sfXJlc2V0KCl7dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5mb3JFYWNo'@;
put 'KGw9Pntjb25zdCBhPWwuZ2V0Um9vdEVsZW1lbnQoKTtpZihhKXtjb25zdCBkPXRoaXMuX2l0ZW1Qb3NpdGlvbnMuZmluZChoPT5oLmRyYWc9PT1sKT8uaW5pdGlhbFRyYW5zZm9ybTthLnN0eWxlLnRyYW5zZm9ybT1kfHwiIn19KSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMuX2FjdGl2'@;
put 'ZURyYWdnYWJsZXM9W10sdGhpcy5fcHJldmlvdXNTd2FwLmRyYWc9bnVsbCx0aGlzLl9wcmV2aW91c1N3YXAuZGVsdGE9MCx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9ITF9Z2V0QWN0aXZlSXRlbXNTbmFwc2hvdCgpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnZ2FibGVzfWdldEl0ZW1J'@;
put 'bmRleChsKXtyZXR1cm4oImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbiYmInJ0bCI9PT10aGlzLmRpcmVjdGlvbj90aGlzLl9pdGVtUG9zaXRpb25zLnNsaWNlKCkucmV2ZXJzZSgpOnRoaXMuX2l0ZW1Qb3NpdGlvbnMpLmZpbmRJbmRleChkPT5kLmRyYWc9PT1sKX11cGRhdGVPblNj'@;
put 'cm9sbChsLGEpe3RoaXMuX2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2NsaWVudFJlY3Q6ZH0pPT57eHgoZCxsLGEpfSksdGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7ZHJhZzpkfSk9Pnt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcoZCkmJmQuX3NvcnRGcm9tTGFzdFBv'@;
put 'aW50ZXJQb3NpdGlvbigpfSl9X2NhY2hlSXRlbVBvc2l0aW9ucygpe2NvbnN0IGw9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjt0aGlzLl9pdGVtUG9zaXRpb25zPXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMubWFwKGE9Pntjb25zdCBkPWEuZ2V0VmlzaWJsZUVsZW1lbnQoKTtyZXR1'@;
put 'cm57ZHJhZzphLG9mZnNldDowLGluaXRpYWxUcmFuc2Zvcm06ZC5zdHlsZS50cmFuc2Zvcm18fCIiLGNsaWVudFJlY3Q6X1koZCl9fSkuc29ydCgoYSxkKT0+bD9hLmNsaWVudFJlY3QubGVmdC1kLmNsaWVudFJlY3QubGVmdDphLmNsaWVudFJlY3QudG9wLWQuY2xpZW50UmVjdC50b3ApfV9n'@;
put 'ZXRJdGVtT2Zmc2V0UHgobCxhLGQpe2NvbnN0IGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjtsZXQgZj1oP2EubGVmdC1sLmxlZnQ6YS50b3AtbC50b3A7cmV0dXJuLTE9PT1kJiYoZis9aD9hLndpZHRoLWwud2lkdGg6YS5oZWlnaHQtbC5oZWlnaHQpLGZ9X2dldFNpYmxpbmdP'@;
put 'ZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLGY9YVtsXS5jbGllbnRSZWN0LHY9YVtsKy0xKmRdO2xldCBNPWZbaD8id2lkdGgiOiJoZWlnaHQiXSpkO2lmKHYpe2NvbnN0IEQ9aD8ibGVmdCI6InRvcCIsWj1oPyJyaWdodCI6ImJvdHRvbSI7'@;
put 'LTE9PT1kP00tPXYuY2xpZW50UmVjdFtEXS1mW1pdOk0rPWZbRF0tdi5jbGllbnRSZWN0W1pdfXJldHVybiBNfV9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChsLGEpe2lmKCF0aGlzLl9hY3RpdmVEcmFnZ2FibGVzLmxlbmd0aClyZXR1cm4hMTtjb25zdCBkPXRoaXMuX2l0ZW1Qb3NpdGlvbnMs'@;
put 'aD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO2lmKGRbMF0uZHJhZyE9PXRoaXMuX2FjdGl2ZURyYWdnYWJsZXNbMF0pe2NvbnN0IHY9ZFtkLmxlbmd0aC0xXS5jbGllbnRSZWN0O3JldHVybiBoP2w+PXYucmlnaHQ6YT49di5ib3R0b219e2NvbnN0IHY9ZFswXS5jbGllbnRSZWN0'@;
put 'O3JldHVybiBoP2w8PXYubGVmdDphPD12LnRvcH19X2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24obCxhLGQsaCl7Y29uc3QgZj0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLHY9dGhpcy5faXRlbVBvc2l0aW9ucy5maW5kSW5kZXgoKHtkcmFnOk0sY2xpZW50UmVjdDpE'@;
put 'fSk9Pk0hPT1sJiYoKCFofHxNIT09dGhpcy5fcHJldmlvdXNTd2FwLmRyYWd8fCF0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHN8fChmP2gueDpoLnkpIT09dGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhKSYmKGY/YT49TWF0aC5mbG9vcihELmxlZnQpJiZhPE1hdGguZmxvb3IoRC5yaWdodCk6'@;
put 'ZD49TWF0aC5mbG9vcihELnRvcCkmJmQ8TWF0aC5mbG9vcihELmJvdHRvbSkpKSk7cmV0dXJuLTEhPT12JiZ0aGlzLl9zb3J0UHJlZGljYXRlKHYsbCk/djotMX19dmFyIFQyPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLlVQPTFdPSJVUCIsY1tjLkRPV049Ml09'@;
put 'IkRPV04iLGN9KFQyfHx7fSksejE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJOT05FIixjW2MuTEVGVD0xXT0iTEVGVCIsY1tjLlJJR0hUPTJdPSJSSUdIVCIsY30oejF8fHt9KTtjbGFzcyBGRmV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5'@;
put 'PWEsdGhpcy5fbmdab25lPWgsdGhpcy5fdmlld3BvcnRSdWxlcj1mLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQ9ITEsdGhpcy5hdXRvU2Nyb2xsU3RlcD0yLHRoaXMuZW50ZXJQcmVkaWNhdGU9KCk9PiEwLHRoaXMuc29y'@;
put 'dFByZWRpY2F0ZT0oKT0+ITAsdGhpcy5iZWZvcmVTdGFydGVkPW5ldyBXbix0aGlzLmVudGVyZWQ9bmV3IFduLHRoaXMuZXhpdGVkPW5ldyBXbix0aGlzLmRyb3BwZWQ9bmV3IFduLHRoaXMuc29ydGVkPW5ldyBXbix0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQ9bmV3IFduLHRoaXMucmVjZWl2aW5n'@;
put 'U3RvcHBlZD1uZXcgV24sdGhpcy5faXNEcmFnZ2luZz0hMSx0aGlzLl9kcmFnZ2FibGVzPVtdLHRoaXMuX3NpYmxpbmdzPVtdLHRoaXMuX2FjdGl2ZVNpYmxpbmdzPW5ldyBTZXQsdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fdmVydGljYWxTY3JvbGxE'@;
put 'aXJlY3Rpb249VDIuTk9ORSx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPXoxLk5PTkUsdGhpcy5fc3RvcFNjcm9sbFRpbWVycz1uZXcgV24sdGhpcy5fY2FjaGVkU2hhZG93Um9vdD1udWxsLHRoaXMuX3N0YXJ0U2Nyb2xsSW50ZXJ2YWw9KCk9Pnt0aGlzLl9zdG9wU2Nyb2xsaW5n'@;
put 'KCksZnVuY3Rpb24gVEZlKGM9MCxsPXdMKXtyZXR1cm4gYzwwJiYoYz0wKSxqMGUoYyxjLGwpfSgwLFYwZSkucGlwZShOMCh0aGlzLl9zdG9wU2Nyb2xsVGltZXJzKSkuc3Vic2NyaWJlKCgpPT57Y29uc3Qgdj10aGlzLl9zY3JvbGxOb2RlLE09dGhpcy5hdXRvU2Nyb2xsU3RlcDt0aGlzLl92'@;
put 'ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj09PVQyLlVQP3Yuc2Nyb2xsQnkoMCwtTSk6dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249PT1UMi5ET1dOJiZ2LnNjcm9sbEJ5KDAsTSksdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj09PXoxLkxFRlQ/di5zY3JvbGxCeSgtTSwwKTp0'@;
put 'aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPT09ejEuUklHSFQmJnYuc2Nyb2xsQnkoTSwwKX0pfSx0aGlzLmVsZW1lbnQ9RWQobCksdGhpcy5fZG9jdW1lbnQ9ZCx0aGlzLndpdGhTY3JvbGxhYmxlUGFyZW50cyhbdGhpcy5lbGVtZW50XSksYS5yZWdpc3RlckRyb3BDb250YWluZXIo'@;
put 'dGhpcyksdGhpcy5fcGFyZW50UG9zaXRpb25zPW5ldyBYMGUoZCksdGhpcy5fc29ydFN0cmF0ZWd5PW5ldyBQRmUodGhpcy5lbGVtZW50LGEpLHRoaXMuX3NvcnRTdHJhdGVneS53aXRoU29ydFByZWRpY2F0ZSgodixNKT0+dGhpcy5zb3J0UHJlZGljYXRlKHYsTSx0aGlzKSl9ZGlzcG9zZSgp'@;
put 'e3RoaXMuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9zdG9wU2Nyb2xsVGltZXJzLmNvbXBsZXRlKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLmVudGVyZWQuY29tcGxldGUoKSx0aGlzLmV4'@;
put 'aXRlZC5jb21wbGV0ZSgpLHRoaXMuZHJvcHBlZC5jb21wbGV0ZSgpLHRoaXMuc29ydGVkLmNvbXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLmNvbXBsZXRlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLmNvbXBsZXRlKCksdGhpcy5fYWN0aXZlU2libGluZ3MuY2xlYXIoKSx0aGlzLl9z'@;
put 'Y3JvbGxOb2RlPW51bGwsdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5yZW1vdmVEcm9wQ29udGFpbmVyKHRoaXMpfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZ31zdGFydCgpe3RoaXMuX2RyYWdnaW5nU3RhcnRlZCgpLHRo'@;
put 'aXMuX25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCl9ZW50ZXIobCxhLGQsaCl7dGhpcy5fZHJhZ2dpbmdTdGFydGVkKCksbnVsbD09aCYmdGhpcy5zb3J0aW5nRGlzYWJsZWQmJihoPXRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKSksdGhpcy5fc29ydFN0cmF0ZWd5LmVudGVyKGwsYSxkLGgp'@;
put 'LHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKSx0aGlzLmVudGVyZWQubmV4dCh7aXRlbTpsLGNvbnRhaW5lcjp0aGlzLGN1cnJlbnRJbmRleDp0aGlzLmdldEl0ZW1JbmRleChsKX0pfWV4aXQobCl7dGhpcy5fcmVzZXQoKSx0aGlz'@;
put 'LmV4aXRlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVyOnRoaXN9KX1kcm9wKGwsYSxkLGgsZix2LE0sRD17fSl7dGhpcy5fcmVzZXQoKSx0aGlzLmRyb3BwZWQubmV4dCh7aXRlbTpsLGN1cnJlbnRJbmRleDphLHByZXZpb3VzSW5kZXg6ZCxjb250YWluZXI6dGhpcyxwcmV2aW91c0NvbnRhaW5l'@;
put 'cjpoLGlzUG9pbnRlck92ZXJDb250YWluZXI6ZixkaXN0YW5jZTp2LGRyb3BQb2ludDpNLGV2ZW50OkR9KX13aXRoSXRlbXMobCl7Y29uc3QgYT10aGlzLl9kcmFnZ2FibGVzO3JldHVybiB0aGlzLl9kcmFnZ2FibGVzPWwsbC5mb3JFYWNoKGQ9PmQuX3dpdGhEcm9wQ29udGFpbmVyKHRoaXMp'@;
put 'KSx0aGlzLmlzRHJhZ2dpbmcoKSYmKGEuZmlsdGVyKGg9PmguaXNEcmFnZ2luZygpKS5ldmVyeShoPT4tMT09PWwuaW5kZXhPZihoKSk/dGhpcy5fcmVzZXQoKTp0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aEl0ZW1zKHRoaXMuX2RyYWdnYWJsZXMpKSx0aGlzfXdpdGhEaXJlY3Rpb24obCl7cmV0'@;
put 'dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5kaXJlY3Rpb249bCx0aGlzfWNvbm5lY3RlZFRvKGwpe3JldHVybiB0aGlzLl9zaWJsaW5ncz1sLnNsaWNlKCksdGhpc313aXRoT3JpZW50YXRpb24obCl7cmV0dXJuIHRoaXMuX3NvcnRTdHJhdGVneS5vcmllbnRhdGlvbj1sLHRoaXN9d2l0aFNjcm9s'@;
put 'bGFibGVQYXJlbnRzKGwpe2NvbnN0IGE9RWQodGhpcy5lbGVtZW50KTtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzPS0xPT09bC5pbmRleE9mKGEpP1thLC4uLmxdOmwuc2xpY2UoKSx0aGlzfWdldFNjcm9sbGFibGVQYXJlbnRzKCl7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVFbGVt'@;
put 'ZW50c31nZXRJdGVtSW5kZXgobCl7cmV0dXJuIHRoaXMuX2lzRHJhZ2dpbmc/dGhpcy5fc29ydFN0cmF0ZWd5LmdldEl0ZW1JbmRleChsKTp0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YobCl9aXNSZWNlaXZpbmcoKXtyZXR1cm4gdGhpcy5fYWN0aXZlU2libGluZ3Muc2l6ZT4wfV9zb3J0SXRl'@;
put 'bShsLGEsZCxoKXtpZih0aGlzLnNvcnRpbmdEaXNhYmxlZHx8IXRoaXMuX2RvbVJlY3R8fCFxMGUodGhpcy5fZG9tUmVjdCwuMDUsYSxkKSlyZXR1cm47Y29uc3QgZj10aGlzLl9zb3J0U3RyYXRlZ3kuc29ydChsLGEsZCxoKTtmJiZ0aGlzLnNvcnRlZC5uZXh0KHtwcmV2aW91c0luZGV4OmYu'@;
put 'cHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6Zi5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRoaXMsaXRlbTpsfSl9X3N0YXJ0U2Nyb2xsaW5nSWZOZWNlc3NhcnkobCxhKXtpZih0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZClyZXR1cm47bGV0IGQsaD1UMi5OT05FLGY9ejEuTk9ORTtpZih0aGlz'@;
put 'Ll9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmZvckVhY2goKHYsTSk9PntNPT09dGhpcy5fZG9jdW1lbnR8fCF2LmNsaWVudFJlY3R8fGR8fHEwZSh2LmNsaWVudFJlY3QsLjA1LGwsYSkmJihbaCxmXT1mdW5jdGlvbiBIRmUoYyxsLGEsZCxoKXtjb25zdCBmPWgxZShsLGgpLHY9ZjFlKGws'@;
put 'ZCk7bGV0IE09VDIuTk9ORSxEPXoxLk5PTkU7aWYoZil7Y29uc3QgWj1jLnNjcm9sbFRvcDtmPT09VDIuVVA/Wj4wJiYoTT1UMi5VUCk6Yy5zY3JvbGxIZWlnaHQtWj5jLmNsaWVudEhlaWdodCYmKE09VDIuRE9XTil9aWYodil7Y29uc3QgWj1jLnNjcm9sbExlZnQ7InJ0bCI9PT1hP3Y9PT16'@;
put 'MS5SSUdIVD9aPDAmJihEPXoxLlJJR0hUKTpjLnNjcm9sbFdpZHRoK1o+Yy5jbGllbnRXaWR0aCYmKEQ9ejEuTEVGVCk6dj09PXoxLkxFRlQ/Wj4wJiYoRD16MS5MRUZUKTpjLnNjcm9sbFdpZHRoLVo+Yy5jbGllbnRXaWR0aCYmKEQ9ejEuUklHSFQpfXJldHVybltNLERdfShNLHYuY2xpZW50'@;
put 'UmVjdCx0aGlzLl9zb3J0U3RyYXRlZ3kuZGlyZWN0aW9uLGwsYSksKGh8fGYpJiYoZD1NKSl9KSwhaCYmIWYpe2NvbnN0e3dpZHRoOnYsaGVpZ2h0Ok19PXRoaXMuX3ZpZXdwb3J0UnVsZXIuZ2V0Vmlld3BvcnRTaXplKCksRD17d2lkdGg6dixoZWlnaHQ6TSx0b3A6MCxyaWdodDp2LGJvdHRv'@;
put 'bTpNLGxlZnQ6MH07aD1oMWUoRCxhKSxmPWYxZShELGwpLGQ9d2luZG93fWQmJihoIT09dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb258fGYhPT10aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9ufHxkIT09dGhpcy5fc2Nyb2xsTm9kZSkmJih0aGlzLl92ZXJ0aWNhbFNjcm9sbERp'@;
put 'cmVjdGlvbj1oLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249Zix0aGlzLl9zY3JvbGxOb2RlPWQsKGh8fGYpJiZkP3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLl9zdGFydFNjcm9sbEludGVydmFsKTp0aGlzLl9zdG9wU2Nyb2xsaW5nKCkpfV9zdG9wU2Nyb2xs'@;
put 'aW5nKCl7dGhpcy5fc3RvcFNjcm9sbFRpbWVycy5uZXh0KCl9X2RyYWdnaW5nU3RhcnRlZCgpe2NvbnN0IGw9RWQodGhpcy5lbGVtZW50KS5zdHlsZTt0aGlzLmJlZm9yZVN0YXJ0ZWQubmV4dCgpLHRoaXMuX2lzRHJhZ2dpbmc9ITAsdGhpcy5faW5pdGlhbFNjcm9sbFNuYXA9bC5tc1Njcm9s'@;
put 'bFNuYXBUeXBlfHxsLnNjcm9sbFNuYXBUeXBlfHwiIixsLnNjcm9sbFNuYXBUeXBlPWwubXNTY3JvbGxTbmFwVHlwZT0ibm9uZSIsdGhpcy5fc29ydFN0cmF0ZWd5LnN0YXJ0KHRoaXMuX2RyYWdnYWJsZXMpLHRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCksdGhpcy5fdmlld3BvcnRTY3Jv'@;
put 'bGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpfV9jYWNoZVBhcmVudFBvc2l0aW9ucygpe2NvbnN0IGw9RWQodGhpcy5lbGVtZW50KTt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUodGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzKSx0aGlz'@;
put 'Ll9kb21SZWN0PXRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KGwpLmNsaWVudFJlY3R9X3Jlc2V0KCl7dGhpcy5faXNEcmFnZ2luZz0hMTtjb25zdCBsPUVkKHRoaXMuZWxlbWVudCkuc3R5bGU7bC5zY3JvbGxTbmFwVHlwZT1sLm1zU2Nyb2xsU25hcFR5cGU9dGhpcy5faW5p'@;
put 'dGlhbFNjcm9sbFNuYXAsdGhpcy5fc2libGluZ3MuZm9yRWFjaChhPT5hLl9zdG9wUmVjZWl2aW5nKHRoaXMpKSx0aGlzLl9zb3J0U3RyYXRlZ3kucmVzZXQoKSx0aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlz'@;
put 'Ll9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1faXNPdmVyQ29udGFpbmVyKGwsYSl7cmV0dXJuIG51bGwhPXRoaXMuX2RvbVJlY3QmJndZKHRoaXMuX2RvbVJlY3QsbCxhKX1fZ2V0U2libGluZ0NvbnRhaW5lckZyb21Qb3NpdGlvbihsLGEsZCl7cmV0dXJuIHRoaXMuX3NpYmxpbmdzLmZpbmQo'@;
put 'aD0+aC5fY2FuUmVjZWl2ZShsLGEsZCkpfV9jYW5SZWNlaXZlKGwsYSxkKXtpZighdGhpcy5fZG9tUmVjdHx8IXdZKHRoaXMuX2RvbVJlY3QsYSxkKXx8IXRoaXMuZW50ZXJQcmVkaWNhdGUobCx0aGlzKSlyZXR1cm4hMTtjb25zdCBoPXRoaXMuX2dldFNoYWRvd1Jvb3QoKS5lbGVtZW50RnJv'@;
put 'bVBvaW50KGEsZCk7aWYoIWgpcmV0dXJuITE7Y29uc3QgZj1FZCh0aGlzLmVsZW1lbnQpO3JldHVybiBoPT09Znx8Zi5jb250YWlucyhoKX1fc3RhcnRSZWNlaXZpbmcobCxhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZVNpYmxpbmdzOyFkLmhhcyhsKSYmYS5ldmVyeShoPT50aGlzLmVudGVyUHJl'@;
put 'ZGljYXRlKGgsdGhpcyl8fHRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihoKT4tMSkmJihkLmFkZChsKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX2xpc3RlblRvU2Nyb2xsRXZlbnRzKCksdGhpcy5yZWNlaXZpbmdTdGFydGVkLm5leHQoe2luaXRpYXRvcjpsLHJlY2VpdmVy'@;
put 'OnRoaXMsaXRlbXM6YX0pKX1fc3RvcFJlY2VpdmluZyhsKXt0aGlzLl9hY3RpdmVTaWJsaW5ncy5kZWxldGUobCksdGhpcy5fdmlld3BvcnRTY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQubmV4dCh7aW5pdGlhdG9yOmwscmVjZWl2ZXI6dGhp'@;
put 'c30pfV9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpe3RoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUobD0+e2lmKHRoaXMuaXNEcmFnZ2luZygpKXtjb25zdCBhPXRoaXMu'@;
put 'X3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7YSYmdGhpcy5fc29ydFN0cmF0ZWd5LnVwZGF0ZU9uU2Nyb2xsKGEudG9wLGEubGVmdCl9ZWxzZSB0aGlzLmlzUmVjZWl2aW5nKCkmJnRoaXMuX2NhY2hlUGFyZW50UG9zaXRpb25zKCl9KX1fZ2V0U2hhZG93Um9vdCgpe2lmKCF0aGlz'@;
put 'Ll9jYWNoZWRTaGFkb3dSb290KXtjb25zdCBsPVIwZShFZCh0aGlzLmVsZW1lbnQpKTt0aGlzLl9jYWNoZWRTaGFkb3dSb290PWx8fHRoaXMuX2RvY3VtZW50fXJldHVybiB0aGlzLl9jYWNoZWRTaGFkb3dSb290fV9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpe2NvbnN0IGw9dGhpcy5fc29y'@;
put 'dFN0cmF0ZWd5LmdldEFjdGl2ZUl0ZW1zU25hcHNob3QoKS5maWx0ZXIoYT0+YS5pc0RyYWdnaW5nKCkpO3RoaXMuX3NpYmxpbmdzLmZvckVhY2goYT0+YS5fc3RhcnRSZWNlaXZpbmcodGhpcyxsKSl9fWZ1bmN0aW9uIGgxZShjLGwpe2NvbnN0e3RvcDphLGJvdHRvbTpkLGhlaWdodDpofT1j'@;
put 'LGY9LjA1Kmg7cmV0dXJuIGw+PWEtZiYmbDw9YStmP1QyLlVQOmw+PWQtZiYmbDw9ZCtmP1QyLkRPV046VDIuTk9ORX1mdW5jdGlvbiBmMWUoYyxsKXtjb25zdHtsZWZ0OmEscmlnaHQ6ZCx3aWR0aDpofT1jLGY9LjA1Kmg7cmV0dXJuIGw+PWEtZiYmbDw9YStmP3oxLkxFRlQ6bD49ZC1mJiZs'@;
put 'PD1kK2Y/ejEuUklHSFQ6ejEuTk9ORX1jb25zdCBSTD1UeSh7cGFzc2l2ZTohMSxjYXB0dXJlOiEwfSksTEw9bmV3IFNldDtsZXQgTkZlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNt'@;
put 'cD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0saG9zdEF0dHJzOlsiY2RrLWRyYWctcmVzZXRzLWNvbnRhaW5lciIsIiJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6WyRJXSxkZWNsczowLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe30sc3R5bGVzOlsiQGxh'@;
put 'eWVyIGNkay1yZXNldHN7LmNkay1kcmFnLXByZXZpZXd7YmFja2dyb3VuZDpub25lO2JvcmRlcjpub25lO3BhZGRpbmc6MDtjb2xvcjppbmhlcml0fX0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KX19cmV0dXJuIGN9KSgpLFZGZT0oKCk9PntjbGFzcyBje2NvbnN0cnVj'@;
put 'dG9yKGEsZCl7dGhpcy5fbmdab25lPWEsdGhpcy5fYXBwUmVmPWZpKHE0KSx0aGlzLl9lbnZpcm9ubWVudEluamVjdG9yPWZpKGhjKSx0aGlzLl9kcm9wSW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fZHJhZ0luc3RhbmNlcz1uZXcgU2V0LHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXM9W10sdGhp'@;
put 'cy5fZ2xvYmFsTGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGU9aD0+aC5pc0RyYWdnaW5nKCksdGhpcy5wb2ludGVyTW92ZT1uZXcgV24sdGhpcy5wb2ludGVyVXA9bmV3IFduLHRoaXMuc2Nyb2xsPW5ldyBXbix0aGlzLl9wcmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dp'@;
put 'bmc9aD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoPjAmJmgucHJldmVudERlZmF1bHQoKX0sdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyPWg9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aD4wJiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5z'@;
put 'b21lKHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlKSYmaC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucG9pbnRlck1vdmUubmV4dChoKSl9LHRoaXMuX2RvY3VtZW50PWR9cmVnaXN0ZXJEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuaGFzKGEpfHx0aGlzLl9kcm9wSW5zdGFuY2Vz'@;
put 'LmFkZChhKX1yZWdpc3RlckRyYWdJdGVtKGEpe3RoaXMuX2RyYWdJbnN0YW5jZXMuYWRkKGEpLDE9PT10aGlzLl9kcmFnSW5zdGFuY2VzLnNpemUmJnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIs'@;
put 'dGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyLFJMKX0pfXJlbW92ZURyb3BDb250YWluZXIoYSl7dGhpcy5fZHJvcEluc3RhbmNlcy5kZWxldGUoYSl9cmVtb3ZlRHJhZ0l0ZW0oYSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5kZWxldGUoYSksdGhpcy5zdG9wRHJhZ2dpbmcoYSksMD09'@;
put 'PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIsUkwpfXN0YXJ0RHJhZ2dpbmcoYSxkKXtpZighKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5k'@;
put 'ZXhPZihhKT4tMSkmJih0aGlzLl9sb2FkUmVzZXRzKCksdGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5wdXNoKGEpLDE9PT10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aCkpe2NvbnN0IGg9ZC50eXBlLnN0YXJ0c1dpdGgoInRvdWNoIik7dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLnNl'@;
put 'dChoPyJ0b3VjaGVuZCI6Im1vdXNldXAiLHtoYW5kbGVyOmY9PnRoaXMucG9pbnRlclVwLm5leHQoZiksb3B0aW9uczohMH0pLnNldCgic2Nyb2xsIix7aGFuZGxlcjpmPT50aGlzLnNjcm9sbC5uZXh0KGYpLG9wdGlvbnM6ITB9KS5zZXQoInNlbGVjdHN0YXJ0Iix7aGFuZGxlcjp0aGlzLl9w'@;
put 'cmV2ZW50RGVmYXVsdFdoaWxlRHJhZ2dpbmcsb3B0aW9uczpSTH0pLGh8fHRoaXMuX2dsb2JhbExpc3RlbmVycy5zZXQoIm1vdXNlbW92ZSIse2hhbmRsZXI6Zj0+dGhpcy5wb2ludGVyTW92ZS5uZXh0KGYpLG9wdGlvbnM6Ukx9KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9'@;
put 'Pnt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuZm9yRWFjaCgoZix2KT0+e3RoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIodixmLmhhbmRsZXIsZi5vcHRpb25zKX0pfSl9fXN0b3BEcmFnZ2luZyhhKXtjb25zdCBkPXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihhKTtkPi0x'@;
put 'JiYodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5zcGxpY2UoZCwxKSwwPT09dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgmJnRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCkpfWlzRHJhZ2dpbmcoYSl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuaW5kZXhPZihh'@;
put 'KT4tMX1zY3JvbGxlZChhKXtjb25zdCBkPVt0aGlzLnNjcm9sbF07cmV0dXJuIGEmJmEhPT10aGlzLl9kb2N1bWVudCYmZC5wdXNoKG5ldyBYdChoPT50aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pntjb25zdCB2PU09Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0'@;
put 'aCYmaC5uZXh0KE0pfTtyZXR1cm4gYS5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHYsITApLCgpPT57YS5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHYsITApfX0pKSkseXgoLi4uZCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmZvckVhY2goYT0+dGhpcy5yZW1v'@;
put 'dmVEcmFnSXRlbShhKSksdGhpcy5fZHJvcEluc3RhbmNlcy5mb3JFYWNoKGE9PnRoaXMucmVtb3ZlRHJvcENvbnRhaW5lcihhKSksdGhpcy5fY2xlYXJHbG9iYWxMaXN0ZW5lcnMoKSx0aGlzLnBvaW50ZXJNb3ZlLmNvbXBsZXRlKCksdGhpcy5wb2ludGVyVXAuY29tcGxldGUoKX1fY2xlYXJH'@;
put 'bG9iYWxMaXN0ZW5lcnMoKXt0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZCxhLmhhbmRsZXIsYS5vcHRpb25zKX0pLHRoaXMuX2dsb2JhbExpc3RlbmVycy5jbGVhcigpfV9sb2FkUmVzZXRzKCl7aWYoIUxM'@;
put 'Lmhhcyh0aGlzLl9hcHBSZWYpKXtMTC5hZGQodGhpcy5fYXBwUmVmKTtjb25zdCBhPWZ1bmN0aW9uIGFfZShjLGwpe2NvbnN0IGE9VmEoYyksZD1sLmVsZW1lbnRJbmplY3Rvcnx8SDMoKTtyZXR1cm4gbmV3IEE4KGEpLmNyZWF0ZShkLGwucHJvamVjdGFibGVOb2RlcyxsLmhvc3RFbGVtZW50'@;
put 'LGwuZW52aXJvbm1lbnRJbmplY3Rvcil9KE5GZSx7ZW52aXJvbm1lbnRJbmplY3Rvcjp0aGlzLl9lbnZpcm9ubWVudEluamVjdG9yfSk7dGhpcy5fYXBwUmVmLm9uRGVzdHJveSgoKT0+e0xMLmRlbGV0ZSh0aGlzLl9hcHBSZWYpLDA9PT1MTC5zaXplJiZhLmRlc3Ryb3koKX0pfX1zdGF0aWN7'@;
put 'dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihZbykseHIodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBCRmU9e2RyYWdT'@;
put 'dGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NX07bGV0IE9MPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9uZ1pvbmU9ZCx0aGlzLl92aWV3cG9ydFJ1bGVyPWgsdGhpcy5fZHJhZ0Ryb3BSZWdp'@;
put 'c3RyeT1mfWNyZWF0ZURyYWcoYSxkPUJGZSl7cmV0dXJuIG5ldyBMRmUoYSxkLHRoaXMuX2RvY3VtZW50LHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkpfWNyZWF0ZURyb3BMaXN0KGEpe3JldHVybiBuZXcgRkZlKGEsdGhpcy5fZHJhZ0Ry'@;
put 'b3BSZWdpc3RyeSx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRSdWxlcil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMpLHhyKFlvKSx4cihUTCkseHIoVkZlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9'@;
put 'b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQXg9bmV3IFN0KCJDREtfRFJBR19QQVJFTlQiKSxwMWU9bmV3IFN0KCJDZGtEcmFnSGFuZGxlIik7bGV0IGcxZT0oKCk9PntjbGFzcyBje2dldCBkaXNhYmxlZCgp'@;
put 'e3JldHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9YSx0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCh0aGlzKX1jb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWxlbWVudD1hLHRoaXMuX3BhcmVudERyYWc9ZCx0aGlzLl9zdGF0ZUNoYW5nZXM9bmV3IFduLHRo'@;
put 'aXMuX2Rpc2FibGVkPSExLGQ/Ll9hZGRIYW5kbGUodGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9wYXJlbnREcmFnPy5fcmVtb3ZlSGFuZGxlKHRoaXMpLHRoaXMuX3N0YXRlQ2hhbmdlcy5jb21wbGV0ZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8'@;
put 'fGMpKEdlKEppKSxHZShBeCwxMikpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZ0hhbmRsZSIsIiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnLWhhbmRsZSJdLGlucHV0czp7ZGlzYWJsZWQ6W2puLkhhc0RlY29yYXRvcklucHV0VHJh'@;
put 'bnNmb3JtLCJjZGtEcmFnSGFuZGxlRGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdfSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltmbyhbe3Byb3ZpZGU6cDFlLHVzZUV4aXN0aW5nOmN9XSksWmxdfSl9fXJldHVybiBjfSkoKTtjb25zdCBTWT1uZXcgU3QoIkNES19EUkFHX0NPTkZJRyIpLE1ZPW5l'@;
put 'dyBTdCgiQ2RrRHJvcExpc3QiKTtsZXQgeFk9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fZHJhZ0luc3RhbmNlcz1bXX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLmRpc2FibGVkfXNldCBkaXNh'@;
put 'YmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX2RyYWdSZWYuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWR9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLG5lLGNlLGJlKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLmRyb3BDb250YWluZXI9ZCx0aGlzLl9uZ1pvbmU9Zix0aGlzLl92aWV3Q29u'@;
put 'dGFpbmVyUmVmPXYsdGhpcy5fZGlyPUQsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9bmUsdGhpcy5fc2VsZkhhbmRsZT1jZSx0aGlzLl9wYXJlbnREcmFnPWJlLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5faGFuZGxlcz1uZXcgZWkoW10pLHRoaXMuc3RhcnRlZD1uZXcgWHIsdGhpcy5y'@;
put 'ZWxlYXNlZD1uZXcgWHIsdGhpcy5lbmRlZD1uZXcgWHIsdGhpcy5lbnRlcmVkPW5ldyBYcix0aGlzLmV4aXRlZD1uZXcgWHIsdGhpcy5kcm9wcGVkPW5ldyBYcix0aGlzLm1vdmVkPW5ldyBYdChFZT0+e2NvbnN0IEJlPXRoaXMuX2RyYWdSZWYubW92ZWQucGlwZShMcihxZT0+KHtzb3VyY2U6'@;
put 'dGhpcyxwb2ludGVyUG9zaXRpb246cWUucG9pbnRlclBvc2l0aW9uLGV2ZW50OnFlLmV2ZW50LGRlbHRhOnFlLmRlbHRhLGRpc3RhbmNlOnFlLmRpc3RhbmNlfSkpKS5zdWJzY3JpYmUoRWUpO3JldHVybigpPT57QmUudW5zdWJzY3JpYmUoKX19KSx0aGlzLl9kcmFnUmVmPVouY3JlYXRlRHJh'@;
put 'ZyhhLHtkcmFnU3RhcnRUaHJlc2hvbGQ6TSYmbnVsbCE9TS5kcmFnU3RhcnRUaHJlc2hvbGQ/TS5kcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOk0mJm51bGwhPU0ucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZD9NLnBvaW50ZXJEaXJl'@;
put 'Y3Rpb25DaGFuZ2VUaHJlc2hvbGQ6NSx6SW5kZXg6TT8uekluZGV4fSksdGhpcy5fZHJhZ1JlZi5kYXRhPXRoaXMsYy5fZHJhZ0luc3RhbmNlcy5wdXNoKHRoaXMpLE0mJnRoaXMuX2Fzc2lnbkRlZmF1bHRzKE0pLGQmJih0aGlzLl9kcmFnUmVmLl93aXRoRHJvcENvbnRhaW5lcihkLl9kcm9w'@;
put 'TGlzdFJlZiksZC5hZGRJdGVtKHRoaXMpKSx0aGlzLl9zeW5jSW5wdXRzKHRoaXMuX2RyYWdSZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcmFnUmVmKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKX1nZXRS'@;
put 'b290RWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFJvb3RFbGVtZW50KCl9cmVzZXQoKXt0aGlzLl9kcmFnUmVmLnJlc2V0KCl9Z2V0RnJlZURyYWdQb3NpdGlvbigpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldEZyZWVEcmFnUG9zaXRpb24oKX1zZXRGcmVlRHJhZ1Bvc2l0aW9u'@;
put 'KGEpe3RoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbihhKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZShVZigxKSxOMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoKCk9Pnt0'@;
put 'aGlzLl91cGRhdGVSb290RWxlbWVudCgpLHRoaXMuX3NldHVwSGFuZGxlc0xpc3RlbmVyKCksdGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX0pfSl9bmdPbkNoYW5nZXMoYSl7Y29uc3QgZD1hLnJv'@;
put 'b3RFbGVtZW50U2VsZWN0b3IsaD1hLmZyZWVEcmFnUG9zaXRpb247ZCYmIWQuZmlyc3RDaGFuZ2UmJnRoaXMuX3VwZGF0ZVJvb3RFbGVtZW50KCksaCYmIWguZmlyc3RDaGFuZ2UmJnRoaXMuZnJlZURyYWdQb3NpdGlvbiYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMu'@;
put 'ZnJlZURyYWdQb3NpdGlvbil9bmdPbkRlc3Ryb3koKXt0aGlzLmRyb3BDb250YWluZXImJnRoaXMuZHJvcENvbnRhaW5lci5yZW1vdmVJdGVtKHRoaXMpO2NvbnN0IGE9Yy5fZHJhZ0luc3RhbmNlcy5pbmRleE9mKHRoaXMpO2E+LTEmJmMuX2RyYWdJbnN0YW5jZXMuc3BsaWNlKGEsMSksdGhp'@;
put 'cy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5faGFuZGxlcy5jb21wbGV0ZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCksdGhpcy5fZHJhZ1JlZi5kaXNwb3NlKCl9KX1fYWRkSGFuZGxlKGEpe2NvbnN0IGQ9dGhpcy5faGFu'@;
put 'ZGxlcy5nZXRWYWx1ZSgpO2QucHVzaChhKSx0aGlzLl9oYW5kbGVzLm5leHQoZCl9X3JlbW92ZUhhbmRsZShhKXtjb25zdCBkPXRoaXMuX2hhbmRsZXMuZ2V0VmFsdWUoKSxoPWQuaW5kZXhPZihhKTtoPi0xJiYoZC5zcGxpY2UoaCwxKSx0aGlzLl9oYW5kbGVzLm5leHQoZCkpfV9zZXRQcmV2'@;
put 'aWV3VGVtcGxhdGUoYSl7dGhpcy5fcHJldmlld1RlbXBsYXRlPWF9X3Jlc2V0UHJldmlld1RlbXBsYXRlKGEpe2E9PT10aGlzLl9wcmV2aWV3VGVtcGxhdGUmJih0aGlzLl9wcmV2aWV3VGVtcGxhdGU9bnVsbCl9X3NldFBsYWNlaG9sZGVyVGVtcGxhdGUoYSl7dGhpcy5fcGxhY2Vob2xkZXJU'@;
put 'ZW1wbGF0ZT1hfV9yZXNldFBsYWNlaG9sZGVyVGVtcGxhdGUoYSl7YT09PXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUmJih0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPW51bGwpfV91cGRhdGVSb290RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7bGV0IGQ9'@;
put 'YTt0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3ImJihkPXZvaWQgMCE9PWEuY2xvc2VzdD9hLmNsb3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKTphLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QodGhpcy5yb290RWxlbWVudFNlbGVjdG9yKSksdGhpcy5fZHJhZ1JlZi53aXRoUm9vdEVsZW1l'@;
put 'bnQoZHx8YSl9X2dldEJvdW5kYXJ5RWxlbWVudCgpe2NvbnN0IGE9dGhpcy5ib3VuZGFyeUVsZW1lbnQ7cmV0dXJuIGE/InN0cmluZyI9PXR5cGVvZiBhP3RoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoYSk6RWQoYSk6bnVsbH1fc3luY0lucHV0cyhhKXthLmJlZm9yZVN0YXJ0'@;
put 'ZWQuc3Vic2NyaWJlKCgpPT57aWYoIWEuaXNEcmFnZ2luZygpKXtjb25zdCBkPXRoaXMuX2RpcixoPXRoaXMuZHJhZ1N0YXJ0RGVsYXksZj10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhp'@;
put 'cy5fcGxhY2Vob2xkZXJUZW1wbGF0ZS5kYXRhLHZpZXdDb250YWluZXI6dGhpcy5fdmlld0NvbnRhaW5lclJlZn06bnVsbCx2PXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcHJldmlld1RlbXBsYXRlLnRlbXBsYXRlUmVmLGNvbnRleHQ6dGhpcy5fcHJldmlld1RlbXBs'@;
put 'YXRlLmRhdGEsbWF0Y2hTaXplOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5tYXRjaFNpemUsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsO2EuZGlzYWJsZWQ9dGhpcy5kaXNhYmxlZCxhLmxvY2tBeGlzPXRoaXMubG9ja0F4aXMsYS5kcmFnU3RhcnREZWxheT0ib2Jq'@;
put 'ZWN0Ij09dHlwZW9mIGgmJmg/aDpjNyhoKSxhLmNvbnN0cmFpblBvc2l0aW9uPXRoaXMuY29uc3RyYWluUG9zaXRpb24sYS5wcmV2aWV3Q2xhc3M9dGhpcy5wcmV2aWV3Q2xhc3MsYS53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuX2dldEJvdW5kYXJ5RWxlbWVudCgpKS53aXRoUGxhY2Vob2xk'@;
put 'ZXJUZW1wbGF0ZShmKS53aXRoUHJldmlld1RlbXBsYXRlKHYpLndpdGhQcmV2aWV3Q29udGFpbmVyKHRoaXMucHJldmlld0NvbnRhaW5lcnx8Imdsb2JhbCIpLGQmJmEud2l0aERpcmVjdGlvbihkLnZhbHVlKX19KSxhLmJlZm9yZVN0YXJ0ZWQucGlwZShVZigxKSkuc3Vic2NyaWJlKCgpPT57'@;
put 'aWYodGhpcy5fcGFyZW50RHJhZylyZXR1cm4gdm9pZCBhLndpdGhQYXJlbnQodGhpcy5fcGFyZW50RHJhZy5fZHJhZ1JlZik7bGV0IGQ9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2Q7KXtpZihkLmNsYXNzTGlzdC5jb250YWlucygiY2RrLWRyYWciKSl7'@;
put 'YS53aXRoUGFyZW50KGMuX2RyYWdJbnN0YW5jZXMuZmluZChoPT5oLmVsZW1lbnQubmF0aXZlRWxlbWVudD09PWQpPy5fZHJhZ1JlZnx8bnVsbCk7YnJlYWt9ZD1kLnBhcmVudEVsZW1lbnR9fSl9X2hhbmRsZUV2ZW50cyhhKXthLnN0YXJ0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnN0YXJ0ZWQu'@;
put 'ZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5yZWxlYXNlZC5zdWJzY3JpYmUoZD0+e3RoaXMucmVsZWFzZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pfSksYS5lbmRlZC5zdWJzY3Jp'@;
put 'YmUoZD0+e3RoaXMuZW5kZWQuZW1pdCh7c291cmNlOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5l'@;
put 'bnRlcmVkLmVtaXQoe2NvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpcyxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzfSl9KSxh'@;
put 'LmRyb3BwZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIu'@;
put 'ZGF0YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixpdGVtOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pfSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ1N0'@;
put 'YXJ0RGVsYXk6aCxjb25zdHJhaW5Qb3NpdGlvbjpmLHByZXZpZXdDbGFzczp2LGJvdW5kYXJ5RWxlbWVudDpNLGRyYWdnaW5nRGlzYWJsZWQ6RCxyb290RWxlbWVudFNlbGVjdG9yOloscHJldmlld0NvbnRhaW5lcjpuZX09YTt0aGlzLmRpc2FibGVkPUQ/PyExLHRoaXMuZHJhZ1N0YXJ0RGVs'@;
put 'YXk9aHx8MCxkJiYodGhpcy5sb2NrQXhpcz1kKSxmJiYodGhpcy5jb25zdHJhaW5Qb3NpdGlvbj1mKSx2JiYodGhpcy5wcmV2aWV3Q2xhc3M9diksTSYmKHRoaXMuYm91bmRhcnlFbGVtZW50PU0pLFomJih0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3I9WiksbmUmJih0aGlzLnByZXZpZXdDb250'@;
put 'YWluZXI9bmUpfV9zZXR1cEhhbmRsZXNMaXN0ZW5lcigpe3RoaXMuX2hhbmRsZXMucGlwZShXdShhPT57Y29uc3QgZD1hLm1hcChoPT5oLmVsZW1lbnQpO3RoaXMuX3NlbGZIYW5kbGUmJnRoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmZC5wdXNoKHRoaXMuZWxlbWVudCksdGhpcy5fZHJhZ1Jl'@;
put 'Zi53aXRoSGFuZGxlcyhkKX0pLFYxKGE9Pnl4KC4uLmEubWFwKGQ9PmQuX3N0YXRlQ2hhbmdlcy5waXBlKHgyKGQpKSkpKSxOMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoYT0+e2NvbnN0IGQ9dGhpcy5fZHJhZ1JlZixoPWEuZWxlbWVudC5uYXRpdmVFbGVtZW50O2EuZGlzYWJsZWQ/'@;
put 'ZC5kaXNhYmxlSGFuZGxlKGgpOmQuZW5hYmxlSGFuZGxlKGgpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSmkpLEdlKE1ZLDEyKSxHZSh2cyksR2UoWW8pLEdlKERhKSxHZShTWSw4KSxHZShmbSw4KSxHZShPTCksR2UoeHMpLEdlKHAx'@;
put 'ZSwxMCksR2UoQXgsMTIpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWciLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZyJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZUcigiY2RrLWRyYWctZGlz'@;
put 'YWJsZWQiLGguZGlzYWJsZWQpKCJjZGstZHJhZy1kcmFnZ2luZyIsaC5fZHJhZ1JlZi5pc0RyYWdnaW5nKCkpfSxpbnB1dHM6e2RhdGE6W2puLk5vbmUsImNka0RyYWdEYXRhIiwiZGF0YSJdLGxvY2tBeGlzOltqbi5Ob25lLCJjZGtEcmFnTG9ja0F4aXMiLCJsb2NrQXhpcyJdLHJvb3RFbGVt'@;
put 'ZW50U2VsZWN0b3I6W2puLk5vbmUsImNka0RyYWdSb290RWxlbWVudCIsInJvb3RFbGVtZW50U2VsZWN0b3IiXSxib3VuZGFyeUVsZW1lbnQ6W2puLk5vbmUsImNka0RyYWdCb3VuZGFyeSIsImJvdW5kYXJ5RWxlbWVudCJdLGRyYWdTdGFydERlbGF5Oltqbi5Ob25lLCJjZGtEcmFnU3RhcnRE'@;
put 'ZWxheSIsImRyYWdTdGFydERlbGF5Il0sZnJlZURyYWdQb3NpdGlvbjpbam4uTm9uZSwiY2RrRHJhZ0ZyZWVEcmFnUG9zaXRpb24iLCJmcmVlRHJhZ1Bvc2l0aW9uIl0sZGlzYWJsZWQ6W2puLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcmFnRGlzYWJsZWQiLCJkaXNhYmxlZCIs'@;
put 'czFdLGNvbnN0cmFpblBvc2l0aW9uOltqbi5Ob25lLCJjZGtEcmFnQ29uc3RyYWluUG9zaXRpb24iLCJjb25zdHJhaW5Qb3NpdGlvbiJdLHByZXZpZXdDbGFzczpbam4uTm9uZSwiY2RrRHJhZ1ByZXZpZXdDbGFzcyIsInByZXZpZXdDbGFzcyJdLHByZXZpZXdDb250YWluZXI6W2puLk5vbmUs'@;
put 'ImNka0RyYWdQcmV2aWV3Q29udGFpbmVyIiwicHJldmlld0NvbnRhaW5lciJdfSxvdXRwdXRzOntzdGFydGVkOiJjZGtEcmFnU3RhcnRlZCIscmVsZWFzZWQ6ImNka0RyYWdSZWxlYXNlZCIsZW5kZWQ6ImNka0RyYWdFbmRlZCIsZW50ZXJlZDoiY2RrRHJhZ0VudGVyZWQiLGV4aXRlZDoiY2Rr'@;
put 'RHJhZ0V4aXRlZCIsZHJvcHBlZDoiY2RrRHJhZ0Ryb3BwZWQiLG1vdmVkOiJjZGtEcmFnTW92ZWQifSxleHBvcnRBczpbImNka0RyYWciXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltmbyhbe3Byb3ZpZGU6QXgsdXNlRXhpc3Rpbmc6Y31dKSxabCx3bF19KX19cmV0dXJuIGN9KSgpO2NvbnN0'@;
put 'IEVZPW5ldyBTdCgiQ2RrRHJvcExpc3RHcm91cCIpO2xldCBtMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1zPW5ldyBTZXQsdGhpcy5kaXNhYmxlZD0hMX1uZ09uRGVzdHJveSgpe3RoaXMuX2l0ZW1zLmNsZWFyKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcm9wTGlzdEdyb3VwIiwiIl1dLGlucHV0czp7ZGlzYWJsZWQ6W2puLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcm9wTGlzdEdyb3VwRGlz'@;
put 'YWJsZWQiLCJkaXNhYmxlZCIsczFdfSxleHBvcnRBczpbImNka0Ryb3BMaXN0R3JvdXAiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltmbyhbe3Byb3ZpZGU6RVksdXNlRXhpc3Rpbmc6Y31dKSxabF19KX19cmV0dXJuIGN9KSgpLHpGZT0wLHYxZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlz'@;
put 'Ll9kcm9wTGlzdHM9W119Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhIXRoaXMuX2dyb3VwJiZ0aGlzLl9ncm91cC5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZHJvcExpc3RSZWYuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWQ9YX1jb25zdHJ1Y3RvcihhLGQs'@;
put 'aCxmLHYsTSxEKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZj1oLHRoaXMuX3Njcm9sbERpc3BhdGNoZXI9Zix0aGlzLl9kaXI9dix0aGlzLl9ncm91cD1NLHRoaXMuX2Rlc3Ryb3llZD1uZXcgV24sdGhpcy5jb25uZWN0ZWRUbz1bXSx0aGlzLmlkPSJjZGstZHJvcC1s'@;
put 'aXN0LSIrekZlKyssdGhpcy5lbnRlclByZWRpY2F0ZT0oKT0+ITAsdGhpcy5zb3J0UHJlZGljYXRlPSgpPT4hMCx0aGlzLmRyb3BwZWQ9bmV3IFhyLHRoaXMuZW50ZXJlZD1uZXcgWHIsdGhpcy5leGl0ZWQ9bmV3IFhyLHRoaXMuc29ydGVkPW5ldyBYcix0aGlzLl91bnNvcnRlZEl0ZW1zPW5l'@;
put 'dyBTZXQsdGhpcy5fZHJvcExpc3RSZWY9ZC5jcmVhdGVEcm9wTGlzdChhKSx0aGlzLl9kcm9wTGlzdFJlZi5kYXRhPXRoaXMsRCYmdGhpcy5fYXNzaWduRGVmYXVsdHMoRCksdGhpcy5fZHJvcExpc3RSZWYuZW50ZXJQcmVkaWNhdGU9KFosbmUpPT50aGlzLmVudGVyUHJlZGljYXRlKFouZGF0'@;
put 'YSxuZS5kYXRhKSx0aGlzLl9kcm9wTGlzdFJlZi5zb3J0UHJlZGljYXRlPShaLG5lLGNlKT0+dGhpcy5zb3J0UHJlZGljYXRlKFosbmUuZGF0YSxjZS5kYXRhKSx0aGlzLl9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbih0aGlzLl9kcm9wTGlzdFJlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRo'@;
put 'aXMuX2Ryb3BMaXN0UmVmKSxjLl9kcm9wTGlzdHMucHVzaCh0aGlzKSxNJiZNLl9pdGVtcy5hZGQodGhpcyl9YWRkSXRlbShhKXt0aGlzLl91bnNvcnRlZEl0ZW1zLmFkZChhKSx0aGlzLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkmJnRoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKX1yZW1vdmVJ'@;
put 'dGVtKGEpe3RoaXMuX3Vuc29ydGVkSXRlbXMuZGVsZXRlKGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpfWdldFNvcnRlZEl0ZW1zKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fdW5zb3J0ZWRJdGVtcykuc29ydCgoYSxkKT0+YS5f'@;
put 'ZHJhZ1JlZi5nZXRWaXNpYmxlRWxlbWVudCgpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQuX2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc/LTE6MSl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPWMuX2Ryb3BMaXN0cy5pbmRleE9m'@;
put 'KHRoaXMpO2E+LTEmJmMuX2Ryb3BMaXN0cy5zcGxpY2UoYSwxKSx0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuX2l0ZW1zLmRlbGV0ZSh0aGlzKSx0aGlzLl91bnNvcnRlZEl0ZW1zLmNsZWFyKCksdGhpcy5fZHJvcExpc3RSZWYuZGlzcG9zZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhp'@;
put 'cy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9X3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKGEpe3RoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKHgyKHRoaXMuX2Rpci52YWx1ZSksTjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGQ9PmEud2l0aERpcmVjdGlvbihkKSksYS5i'@;
put 'ZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9ZnVuY3Rpb24gUVBlKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP2M6W2NdfSh0aGlzLmNvbm5lY3RlZFRvKS5tYXAoaD0+InN0cmluZyI9PXR5cGVvZiBoP2MuX2Ryb3BMaXN0cy5maW5kKHY9PnYuaWQ9PT1oKTpoKTtpZih0'@;
put 'aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuX2l0ZW1zLmZvckVhY2goaD0+ey0xPT09ZC5pbmRleE9mKGgpJiZkLnB1c2goaCl9KSwhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZCl7Y29uc3QgaD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVy'@;
put 'cyh0aGlzLmVsZW1lbnQpLm1hcChmPT5mLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50KTt0aGlzLl9kcm9wTGlzdFJlZi53aXRoU2Nyb2xsYWJsZVBhcmVudHMoaCksdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZD0hMH1hLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsYS5sb2Nr'@;
put 'QXhpcz10aGlzLmxvY2tBeGlzLGEuc29ydGluZ0Rpc2FibGVkPXRoaXMuc29ydGluZ0Rpc2FibGVkLGEuYXV0b1Njcm9sbERpc2FibGVkPXRoaXMuYXV0b1Njcm9sbERpc2FibGVkLGEuYXV0b1Njcm9sbFN0ZXA9YzcodGhpcy5hdXRvU2Nyb2xsU3RlcCwyKSxhLmNvbm5lY3RlZFRvKGQuZmls'@;
put 'dGVyKGg9PmgmJmghPT10aGlzKS5tYXAoaD0+aC5fZHJvcExpc3RSZWYpKS53aXRoT3JpZW50YXRpb24odGhpcy5vcmllbnRhdGlvbil9KX1faGFuZGxlRXZlbnRzKGEpe2EuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCksdGhpcy5fY2hhbmdl'@;
put 'RGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSxhLmVudGVyZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVudGVyZWQuZW1pdCh7Y29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YSxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5l'@;
put 'eGl0ZWQuZW1pdCh7Y29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5zb3J0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnNvcnRlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50'@;
put 'SW5kZXg6ZC5jdXJyZW50SW5kZXgsY29udGFpbmVyOnRoaXMsaXRlbTpkLml0ZW0uZGF0YX0pfSksYS5kcm9wcGVkLnN1YnNjcmliZShkPT57dGhpcy5kcm9wcGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxwcmV2aW91'@;
put 'c0NvbnRhaW5lcjpkLnByZXZpb3VzQ29udGFpbmVyLmRhdGEsY29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTpkLml0ZW0uZGF0YSxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixkaXN0YW5jZTpkLmRpc3RhbmNlLGRyb3BQb2ludDpkLmRyb3BQ'@;
put 'b2ludCxldmVudDpkLmV2ZW50fSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9KSx5eChhLnJlY2VpdmluZ1N0YXJ0ZWQsYS5yZWNlaXZpbmdTdG9wcGVkKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKX1fYXNzaWdu'@;
put 'RGVmYXVsdHMoYSl7Y29uc3R7bG9ja0F4aXM6ZCxkcmFnZ2luZ0Rpc2FibGVkOmgsc29ydGluZ0Rpc2FibGVkOmYsbGlzdEF1dG9TY3JvbGxEaXNhYmxlZDp2LGxpc3RPcmllbnRhdGlvbjpNfT1hO3RoaXMuZGlzYWJsZWQ9aD8/ITEsdGhpcy5zb3J0aW5nRGlzYWJsZWQ9Zj8/ITEsdGhpcy5h'@;
put 'dXRvU2Nyb2xsRGlzYWJsZWQ9dj8/ITEsdGhpcy5vcmllbnRhdGlvbj1NfHwidmVydGljYWwiLGQmJih0aGlzLmxvY2tBeGlzPWQpfV9zeW5jSXRlbXNXaXRoUmVmKCl7dGhpcy5fZHJvcExpc3RSZWYud2l0aEl0ZW1zKHRoaXMuZ2V0U29ydGVkSXRlbXMoKS5tYXAoYT0+YS5fZHJhZ1JlZikp'@;
put 'fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSxHZShPTCksR2UoeHMpLEdlKEF5KSxHZShmbSw4KSxHZShFWSwxMiksR2UoU1ksOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJv'@;
put 'cExpc3QiLCIiXSxbImNkay1kcm9wLWxpc3QiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJvcC1saXN0Il0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJihmcigiaWQiLGguaWQpLFRyKCJjZGstZHJvcC1saXN0LWRpc2FibGVkIixoLmRpc2FibGVkKSgiY2RrLWRy'@;
put 'b3AtbGlzdC1kcmFnZ2luZyIsaC5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpKSgiY2RrLWRyb3AtbGlzdC1yZWNlaXZpbmciLGguX2Ryb3BMaXN0UmVmLmlzUmVjZWl2aW5nKCkpKX0saW5wdXRzOntjb25uZWN0ZWRUbzpbam4uTm9uZSwiY2RrRHJvcExpc3RDb25uZWN0ZWRUbyIsImNvbm5l'@;
put 'Y3RlZFRvIl0sZGF0YTpbam4uTm9uZSwiY2RrRHJvcExpc3REYXRhIiwiZGF0YSJdLG9yaWVudGF0aW9uOltqbi5Ob25lLCJjZGtEcm9wTGlzdE9yaWVudGF0aW9uIiwib3JpZW50YXRpb24iXSxpZDoiaWQiLGxvY2tBeGlzOltqbi5Ob25lLCJjZGtEcm9wTGlzdExvY2tBeGlzIiwibG9ja0F4'@;
put 'aXMiXSxkaXNhYmxlZDpbam4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BMaXN0RGlzYWJsZWQiLCJkaXNhYmxlZCIsczFdLHNvcnRpbmdEaXNhYmxlZDpbam4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkIiwic29ydGlu'@;
put 'Z0Rpc2FibGVkIixzMV0sZW50ZXJQcmVkaWNhdGU6W2puLk5vbmUsImNka0Ryb3BMaXN0RW50ZXJQcmVkaWNhdGUiLCJlbnRlclByZWRpY2F0ZSJdLHNvcnRQcmVkaWNhdGU6W2puLk5vbmUsImNka0Ryb3BMaXN0U29ydFByZWRpY2F0ZSIsInNvcnRQcmVkaWNhdGUiXSxhdXRvU2Nyb2xsRGlz'@;
put 'YWJsZWQ6W2puLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcm9wTGlzdEF1dG9TY3JvbGxEaXNhYmxlZCIsImF1dG9TY3JvbGxEaXNhYmxlZCIsczFdLGF1dG9TY3JvbGxTdGVwOltqbi5Ob25lLCJjZGtEcm9wTGlzdEF1dG9TY3JvbGxTdGVwIiwiYXV0b1Njcm9sbFN0ZXAiXX0s'@;
put 'b3V0cHV0czp7ZHJvcHBlZDoiY2RrRHJvcExpc3REcm9wcGVkIixlbnRlcmVkOiJjZGtEcm9wTGlzdEVudGVyZWQiLGV4aXRlZDoiY2RrRHJvcExpc3RFeGl0ZWQiLHNvcnRlZDoiY2RrRHJvcExpc3RTb3J0ZWQifSxleHBvcnRBczpbImNka0Ryb3BMaXN0Il0sc3RhbmRhbG9uZTohMCxmZWF0'@;
put 'dXJlczpbZm8oW3twcm92aWRlOkVZLHVzZVZhbHVlOnZvaWQgMH0se3Byb3ZpZGU6TVksdXNlRXhpc3Rpbmc6Y31dKSxabF19KX19cmV0dXJuIGN9KSgpLGIxZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7'@;
put 'dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOltPTF0saW1wb3J0czpbRUZlXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgeWE9WyIqIl0sWUZlPVtbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxb'@;
put 'WyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSwiKiJdLEdGZT1bImNsci1hY2NvcmRpb24tdGl0bGUsIGNsci1zdGVwLXRpdGxlIiwiY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiwgY2xyLXN0ZXAtZGVzY3JpcHRpb24iLCIqIl07ZnVuY3Rp'@;
put 'b24gJEZlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5KSxGdCgiQHRvZ2dsZS5kb25lIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuY29sbGFwc2VQYW5lbE9uQW5pbWF0aW9uRG9uZShoKSl9KSxkZSgxLCJkaXYi'@;
put 'LDEwKSxZcigyLDIpLGhlKCkoKX0yJmMmJnhlKCJAdG9nZ2xlIix2b2lkIDApfWZ1bmN0aW9uIEtGZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLGRlKDEsImRpdiIsMikoMiwiZGl2IiwzKSgzLCJidXR0b24iLDQsMCksUXMoNSwiYXN5bmMiKSxGdCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudG9nZ2xlUGFuZWwoKSl9KSxkZSg2LCJzcGFuIiw1KSxHdCg3LCJjZHMtaWNvbiIsNiksaGUoKSxZcig4KSxZcig5LDEpLGhlKCkoKSxkZSgxMCwiZGl2Iiw3KSxtdCgxMSwkRmUsMywxLCJkaXYiLDgpLGhlKCkoKSx1aSgpfWlmKDImYyl7bGV0IGE7'@;
put 'Y29uc3QgZD1sLiRpbXBsaWNpdCxoPU9lKCk7ZmUoKSx4ZSgibmdDbGFzcyIsaC5nZXRQYW5lbFN0YXRlQ2xhc3NlcyhkKSksZmUoKSxmcigicm9sZSIsaC5oZWFkaW5nRW5hYmxlZHx8aC5leHBsaWNpdEhlYWRpbmdMZXZlbD8iaGVhZGluZyI6bnVsbCkoImFyaWEtbGV2ZWwiLGguaGVhZGlu'@;
put 'Z0VuYWJsZWR8fGguZXhwbGljaXRIZWFkaW5nTGV2ZWw/aC5oZWFkaW5nTGV2ZWw6bnVsbCksZmUoKSxUcigiY2xyLWFjY29yZGlvbi1oZWFkZXItaGFzLWRlc2NyaXB0aW9uIiwobnVsbD09KGE9RGMoNSwxNCxoLmFjY29yZGlvbkRlc2NyaXB0aW9uLmNoYW5nZXMpKT9udWxsOmEubGVuZ3Ro'@;
put 'KXx8aC5hY2NvcmRpb25EZXNjcmlwdGlvbi5sZW5ndGgpLHhlKCJpZCIsaC5nZXRBY2NvcmRpb25IZWFkZXJJZChkLnRlbXBsYXRlSWQpKSgiZGlzYWJsZWQiLGQuZGlzYWJsZWQpLGZyKCJhcmlhLWNvbnRyb2xzIiwhZC5kaXNhYmxlZCYmZC5vcGVuP2guZ2V0QWNjb3JkaW9uQ29udGVudElk'@;
put 'KGQudGVtcGxhdGVJZCk6bnVsbCkoImFyaWEtZXhwYW5kZWQiLGQub3BlbiksZmUoNykseGUoIkBza2lwSW5pdGlhbFJlbmRlciIsdm9pZCAwKSgiaWQiLGguZ2V0QWNjb3JkaW9uQ29udGVudElkKGQudGVtcGxhdGVJZCkpLGZyKCJhcmlhLWhpZGRlbiIsIWQub3BlbikoImFyaWEtbGFiZWxs'@;
put 'ZWRieSIsaC5nZXRBY2NvcmRpb25IZWFkZXJJZChkLnRlbXBsYXRlSWQpKSxmZSgpLHhlKCJuZ0lmIixkLm9wZW4pfX1jb25zdCB2SGU9WyJjbHJMb2FkaW5nIiwiIl07ZnVuY3Rpb24gYkhlKGMsbCl7MSZjJiYoY2koMCksR3QoMSwic3BhbiIsMyksdWkoKSksMiZjJiYoZmUoKSx4ZSgiQHNw'@;
put 'aW5uZXIiLHZvaWQgMCkpfWZ1bmN0aW9uIHlIZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLGRlKDEsInNwYW4iLDQpLEZ0KCJAdmFsaWRhdGVkLmRvbmUiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBDdChoLmxvYWRpbmdTdGF0ZUNoYW5nZShoLmJ1dHRv'@;
put 'blN0YXRlLkRFRkFVTFQpKX0pLGhlKCksdWkoKX0yJmMmJihmZSgpLHhlKCJAdmFsaWRhdGVkIix2b2lkIDApKX1mdW5jdGlvbiBfSGUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw1KSxZcigxKSxoZSgpKSwyJmMmJnhlKCJAZGVmYXVsdEJ1dHRvbiIsdm9pZCAwKX1mdW5jdGlvbiB3SGUoYyxs'@;
put 'KXtpZigxJmMmJihjaSgwKSxkZSgxLCJidXR0b24iLDEpLEd0KDIsImNkcy1pY29uIiwyKSxoZSgpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksZnIoImFyaWEtbGFiZWwiLGEuc2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9zdFRvZ2ds'@;
put 'ZSksZmUoKSxmcigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBDSGU9W1tbImNsci1zaWducG9zdC10aXRsZSJdXSwiKiJdLFNIZT1bImNsci1zaWducG9zdC10aXRsZSIsIioiXSxNSGU9W1tbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIi'@;
put 'XV0sW1sibGFiZWwiXV1dLHhIZT1bIltjbHJDaGVja2JveF0sW2NsclRvZ2dsZV0iLCJsYWJlbCJdO2Z1bmN0aW9uIEVIZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1jb25zdCBUSGU9W1tbImxhYmVsIl1dLFtbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdyYXBwZXIi'@;
put 'XV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEFIZT1bImxhYmVsIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIsY2xyLXRvZ2dsZS13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRy'@;
put 'b2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24ga0hlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIERIZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMyksWXIoMSwyKSxoZSgpKX1mdW5jdGlvbiBJSGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1m'@;
put 'dW5jdGlvbiBSSGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KX1mdW5jdGlvbiBMSGUoYyxsKXsxJmMmJllyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gT0hlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1mdW5jdGlvbiBQSGUoYyxs'@;
put 'KXtpZigxJmMmJihkZSgwLCJkaXYiLDMpLG10KDEsSUhlLDEsMCwiY2RzLWljb24iLDQpKDIsUkhlLDEsMCwiY2RzLWljb24iLDUpKDMsTEhlLDEsMCwibmctY29udGVudCIsMCkoNCxPSGUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lm'@;
put 'IixhLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixhLnNob3dWYWxpZCksZmUoKSx4ZSgibmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsYS5zaG93VmFsaWQpfX1jb25zdCBGSGU9WyJjbHJLZXlGb2N1cyIsIiJdLGpIZT1bW1sibGFiZWwiXV0sW1siIiwiY2xySW5wdXRQ'@;
put 'cmVmaXgiLCIiXV0sW1siIiwiY2xySW5wdXQiLCIiXV0sW1siIiwiY2xySW5wdXRTdWZmaXgiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLHpIZT1bImxhYmVsIiwiW2NscklucHV0UHJlZml4'@;
put 'XSIsIltjbHJJbnB1dF0iLCJbY2xySW5wdXRTdWZmaXhdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gVUhlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIFpIZShjLGwpezEmYyYmR3QoMCwi'@;
put 'Y2RzLWljb24iLDYpfWZ1bmN0aW9uIFdIZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDcpfWZ1bmN0aW9uIFlIZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIEdIZShjLGwpezEmYyYmWXIoMCw1LFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1m'@;
put 'dW5jdGlvbiAkSGUoYyxsKXsxJmMmJllyKDAsNixbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1bmN0aW9uIHJOZShjLGwpezEmYyYmWXIoMCl9Y29uc3QgaU5lPVsidGFiQ29udGVudFByb2plY3RlZFJlZiJdO2Z1bmN0aW9uIG9OZShjLGwpe2lmKDEmYyYmKGRlKDAsInNlY3Rpb24iLDEpLFly'@;
put 'KDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO1RyKCJhY3RpdmUiLGEuYWN0aXZlKSx4ZSgiaWQiLGEudGFiQ29udGVudElkKSgiaGlkZGVuIiwhYS5hY3RpdmUpLGZyKCJhcmlhLWxhYmVsbGVkYnkiLGEuYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWhpZGRlbiIsIWEuYWN0aXZlKX19Y29uc3Qg'@;
put 'YU5lPVsidGFiQ29udGVudFZpZXdDb250YWluZXIiXSxzTmU9W1tbImNsci10YWJzLWFjdGlvbnMiXV1dLGxOZT1bImNsci10YWJzLWFjdGlvbnMiXTtmdW5jdGlvbiBjTmUoYyxsKXtpZigxJmMmJihjaSgwKSxkZSgxLCJsaSIsNSksSmwoMiw2KSxoZSgpLHVpKCkpLDImYyl7Y29uc3QgYT1P'@;
put 'ZSgpLiRpbXBsaWNpdDtmZSgyKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsYS50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9fWZ1bmN0aW9uIHVOZShjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsY05lLDMsMSwibmctY29udGFpbmVyIiw0KSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w'@;
put 'bGljaXQsZD1PZSgpO2ZlKCkseGUoIm5nSWYiLGEudGFic0lkPT09ZC50YWJzSWQmJiFhLmluT3ZlcmZsb3cpfX1mdW5jdGlvbiBkTmUoYyxsKXsxJmMmJkpsKDAsNiksMiZjJiZ4ZSgibmdUZW1wbGF0ZU91dGxldCIsT2UoKS4kaW1wbGljaXQudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxh'@;
put 'dGUpfWZ1bmN0aW9uIGhOZShjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsZE5lLDEsMSwibmctY29udGFpbmVyIiwxMyksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoMyk7ZmUoKSx4ZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmYS5pbk92ZXJmbG93KX19ZnVuY3Rp'@;
put 'b24gZk5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMiksRnQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLCQzKSgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KGgpe3d0KGEpLE9lKCk7Y29uc3QgZj12byg0KTtyZXR1cm4gQ3QoT2UoKS5jbG9zZU9uT3V0c2lkZUNsaWNrKGgsZikpfSwhMSwkMykoImZvY3Vzb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuY2xvc2VPbkZvY3VzT3V0KGgpKX0pLG10KDEsaE5lLDIsMSwibmctY29u'@;
put 'dGFpbmVyIiwzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0Zvck9mIixhLnRhYkxpbmtEaXJlY3RpdmVzKX19ZnVuY3Rpb24gcE5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiZGl2Iiw3KSgyLCJsaSIsOCkoMywiYnV0dG9uIiw5LDEpLEZ0'@;
put 'KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuX21vdXNlZG93bj0hMCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub3Blbk92ZXJmbG93T25Gb2N1cygpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2Uo'@;
put 'KS50b2dnbGVPdmVyZmxvd09uQ2xpY2soKSl9KSxHdCg1LCJjZHMtaWNvbiIsMTApLGhlKCkoKSxtdCg2LGZOZSwyLDEsImNsci10YWItb3ZlcmZsb3ctY29udGVudCIsMTEpLGhlKCksdWkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLFRyKCJvcGVuIixhLnRvZ2dsZVNlcnZpY2Uub3Bl'@;
put 'biksZmUoMiksVHIoImFjdGl2ZSIsYS5hY3RpdmVUYWJJbk92ZXJmbG93KSgib3BlbiIsYS50b2dnbGVTZXJ2aWNlLm9wZW4pLGZyKCJ0YWJpbmRleCIsYS5hY3RpdmVUYWJJbk92ZXJmbG93JiYhYS50b2dnbGVTZXJ2aWNlLm9wZW4/MDotMSkoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5'@;
put 'cy5tb3JlKSxmZSgyKSxmcigic3RhdHVzIixhLnRvZ2dsZVNlcnZpY2Uub3Blbj8iaW5mbyI6bnVsbCkoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxmZSgpLHhlKCJuZ0lmIixhLnRvZ2dsZVNlcnZpY2Uub3Blbil9fWZ1bmN0aW9uIGdOZShjLGwpe2lmKDEmYyl7Y29uc3Qg'@;
put 'YT1MbigpO2RlKDAsImJ1dHRvbiIsMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnRvZ2dsZUJ5QnV0dG9uKCkpfSksR3QoMSwiY2RzLWljb24iLDQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7VHIoIm9uLWNvbGxhcHNlIixhLmNvbGxhcHNlZCksZnIo'@;
put 'ImFyaWEtY29udHJvbHMiLGEuY29udGVudElkKSgiYXJpYS1leHBhbmRlZCIsYS5hcmlhRXhwYW5kZWQpKCJhcmlhLWxhYmVsIixhLnRvZ2dsZUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSksZmUoKSxmcigiZGlyZWN0aW9uIixhLmNvbGxhcHNlZD8icmln'@;
put 'aHQiOiJsZWZ0Iil9fWZ1bmN0aW9uIG1OZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNvbGxhcHNlZD0hMSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZyKCJhcmlhLWNv'@;
put 'bnRyb2xzIixhLmNvbnRlbnRJZCkoImFyaWEtbGFiZWwiLGEudG9nZ2xlTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9nZ2xlKX19Y29uc3QgeU5lPVsiY2xyVmVydGljYWxOYXZMaW5rIiwiIl0sX05lPVtbWyIiLCJjbHJWZXJ0aWNhbE5hdkljb24iLCIiXV0sIioi'@;
put 'XSx3TmU9WyJbY2xyVmVydGljYWxOYXZJY29uXSIsIioiXTtmdW5jdGlvbiBDTmUoYyxsKXtpZigxJmMmJihkZSgwLCJ0aCIsNCkoMSwic3BhbiIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksZnIoImFyaWEtbGFiZWwiLGEuZGF5KSxmZSgpLHdyKGEubmFy'@;
put 'cm93KX19ZnVuY3Rpb24gU05lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwidGQiLDcpKDEsImNsci1kYXkiLDgpLEZ0KCJzZWxlY3REYXkiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgyKS5zZXRTZWxlY3RlZERheShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBh'@;
put 'PWwuJGltcGxpY2l0O2ZlKCkseGUoImNsckRheVZpZXciLGEpfX1mdW5jdGlvbiBNTmUoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsNSksbXQoMSxTTmUsMiwxLCJ0ZCIsNiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nRm9yT2YiLGEpfX1mdW5jdGlvbiB4TmUo'@;
put 'YyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoT2UoKS5jaGFuZ2VNb250aChoKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4O3Jl'@;
put 'dHVybiBDdChPZSgpLm9uSG92ZXIoaCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoKTtUcigiaXMtc2VsZWN0ZWQiLGguaXNTZWxlY3RlZChkKSkoImlzLXN0YXJ0LXJhbmdlIixoLmdldElzUmFuZ2VTdGFydE1vbnRoKGQpKSgiaXMt'@;
put 'ZW5kLXJhbmdlIixoLmdldElzUmFuZ2VFbmRNb250aChkKSkoImluLXJhbmdlIixoLmlzSW5SYW5nZShkKSkoImlzLXRvZGF5IixoLmNhbGVuZGFyWWVhcj09PWguY3VycmVudENhbGVuZGFyWWVhciYmZD09PWguY3VycmVudENhbGVuZGFyTW9udGgpLGZyKCJ0YWJpbmRleCIsaC5nZXRUYWJJ'@;
put 'bmRleChkKSksZmUoKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiBFTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuY2hhbmdlWWVhcihoKSl9KSgi'@;
put 'bW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5vbkhvdmVyKGgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTtUcigiaXMtc2VsZWN0ZWQiLGE9PT1kLnNlbGVjdGVkU3RhcnRZZWFyfHxh'@;
put 'PT09ZC5zZWxlY3RlZEVuZFllYXIpKCJpcy1zdGFydC1yYW5nZSIsZC5nZXRJc1JhbmdlU3RhcnRZZWFyKGEpKSgiaXMtZW5kLXJhbmdlIixkLmdldElzUmFuZ2VFbmRZZWFyKGEpKSgiaW4tcmFuZ2UiLGQuaXNJblJhbmdlKGEpKSgiaXMtdG9kYXkiLGQuaXNDdXJyZW50Q2FsZW5kYXJZZWFy'@;
put 'KGEpKSxmcigidGFiaW5kZXgiLGQuZ2V0VGFiSW5kZXgoYSkpLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gVE5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiYSIsNiksRnQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0'@;
put 'O3JldHVybiBDdChPZSgyKS5vblJhbmdlT3B0aW9uU2VsZWN0KGgpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikub25SYW5nZU9wdGlvblNlbGVjdChoKSl9KSxMZSgyKSxoZSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGlt'@;
put 'cGxpY2l0O2ZlKCksZnIoImFyaWEtbGFiZWwiLG51bGw9PWE/bnVsbDphLmxhYmVsKSxmZSgpLElyKCIgIixhLmxhYmVsLCIgIil9fWZ1bmN0aW9uIEFOZShjLGwpezEmYyYmSmwoMCl9ZnVuY3Rpb24ga05lKGMsbCl7aWYoMSZjJiYoY2koMCksZGUoMSwiY2xyLXZlcnRpY2FsLW5hdiIsMiks'@;
put 'bXQoMixUTmUsMywyLCJuZy1jb250YWluZXIiLDMpLGhlKCksZGUoMywiZGl2Iiw0KSxtdCg0LEFOZSwxLDAsIm5nLWNvbnRhaW5lciIsNSksaGUoKSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoKSxkPXZvKDIpO2ZlKDIpLHhlKCJuZ0Zvck9mIixhLmRhdGVSYW5nZU9wdGlvbnMpLGZlKDIpLHhl'@;
put 'KCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gRE5lKGMsbCl7MSZjJiZHdCgwLCJjbHItbW9udGhwaWNrZXIiKX1mdW5jdGlvbiBJTmUoYyxsKXsxJmMmJkd0KDAsImNsci15ZWFycGlja2VyIil9ZnVuY3Rpb24gUk5lKGMsbCl7MSZjJiZHdCgwLCJjbHItZGF5cGlja2VyIil9ZnVu'@;
put 'Y3Rpb24gTE5lKGMsbCl7MSZjJiZHdCgwLCJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIil9ZnVuY3Rpb24gT05lKGMsbCl7aWYoMSZjJiZtdCgwLEROZSwxLDAsImNsci1tb250aHBpY2tlciIsNykoMSxJTmUsMSwwLCJjbHIteWVhcnBpY2tlciIsNykoMixSTmUsMSwwLCJjbHItZGF5cGlja2Vy'@;
put 'Iiw3KSgzLExOZSwxLDAsImNsci1kYXRlcGlja2VyLWFjdGlvbnMiLDcpLDImYyl7Y29uc3QgYT1PZSgpO3hlKCJuZ0lmIixhLmlzTW9udGhWaWV3KSxmZSgpLHhlKCJuZ0lmIixhLmlzWWVhclZpZXcpLGZlKCkseGUoIm5nSWYiLGEuaXNEYXlWaWV3KSxmZSgpLHhlKCJuZ0lmIixhLmhhc0Fj'@;
put 'dGlvbkJ1dHRvbnMpfX1jb25zdCBQTmU9WyJhY3Rpb25CdXR0b24iXSxGTmU9W1tbImxhYmVsIl1dLFtbIiIsImNsckRhdGUiLCIiXV0sW1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLFtbIiIsImNsckVuZERhdGUiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9s'@;
put 'LWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEhOZT1bImxhYmVsIiwiW2NsckRhdGVdIiwiW2NsclN0YXJ0RGF0ZV0iLCJbY2xyRW5kRGF0ZV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlv'@;
put 'biBOTmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gVk5lKGMsbCl7MSZjJiYoY2koMCksWXIoMSwyKSxkZSgyLCJzcGFuIiw5KSxMZSgzLCItIiksaGUoKSxZcig0LDMpLHVpKCkpfWZ1bmN0aW9uIEJOZShjLGwpezEmYyYmKGRlKDAsImJ1dHRvbiIsMTAsMCksR3QoMiwiY2Rz'@;
put 'LWljb24iLDExKSxoZSgpKSwyJmMmJnhlKCJkaXNhYmxlZCIsT2UoKS5pc0lucHV0RGF0ZURpc2FibGVkKX1mdW5jdGlvbiBqTmUoYyxsKXsxJmMmJkd0KDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsMTIpfWZ1bmN0aW9uIHpOZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEz'@;
put 'KX1mdW5jdGlvbiBVTmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxNCl9ZnVuY3Rpb24gWk5lKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gV05lKGMsbCl7MSZjJiZZcigwLDUsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIFlO'@;
put 'ZShjLGwpezEmYyYmWXIoMCw2LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgcU5lPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJOdW1iZXJJbnB1dCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJd'@;
put 'XV0sWE5lPVsibGFiZWwiLCJbY2xyTnVtYmVySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gSk5lKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIFFOZShjLGwpezEmYyYmR3QoMCwi'@;
put 'Y2RzLWljb24iLDExKX1mdW5jdGlvbiBlVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxMil9ZnVuY3Rpb24gdFZlKGMsbCl7MSZjJiZZcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gblZlKGMsbCl7MSZjJiZZcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0p'@;
put 'fWZ1bmN0aW9uIHJWZShjLGwpezEmYyYmWXIoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgaVZlPVtbWyIiLCJjbHJSYWRpbyIsIiJdXSxbWyJsYWJlbCJdXV0sb1ZlPVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gYVZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWNv'@;
put 'bnN0IHNWZT1bW1sibGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGxWZT1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHItY29udHJv'@;
put 'bC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBjVmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gdVZlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzKSxZcigxLDIpLGhlKCkpfWZ1bmN0aW9uIGRWZShjLGwpezEmYyYm'@;
put 'R3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIGhWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDcpfWZ1bmN0aW9uIGZWZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBwVmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlk'@;
put 'Il0pfWZ1bmN0aW9uIGdWZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMyksbXQoMSxkVmUsMSwwLCJjZHMtaWNvbiIsNCkoMixoVmUsMSwwLCJjZHMtaWNvbiIsNSkoMyxmVmUsMSwwLCJuZy1jb250ZW50IiwwKSg0LHBWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1PZSgpO2ZlKCkseGUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGEuc2hvd1ZhbGlkKSxmZSgpLHhlKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixhLnNob3dWYWxpZCl9fWNvbnN0IG1WZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyU2VsZWN0Iiwi'@;
put 'Il1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSx2VmU9WyJsYWJlbCIsIltjbHJTZWxlY3RdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNj'@;
put 'ZXNzIl07ZnVuY3Rpb24gYlZlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIHlWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIF9WZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIHdWZShjLGwpezEmYyYmWXIoMCwyLFsiKm5nSWYi'@;
put 'LCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIENWZShjLGwpezEmYyYmWXIoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBTVmUoYyxsKXsxJmMmJllyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IE1WZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyVGV4dGFyZWEi'@;
put 'LCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLHhWZT1bImxhYmVsIiwiW2NsclRleHRhcmVhXSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wt'@;
put 'c3VjY2VzcyJdO2Z1bmN0aW9uIEVWZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBUVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiBBVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBrVmUoYyxsKXsxJmMmJllyKDAsMixbIipu'@;
put 'Z0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBEVmUoYyxsKXsxJmMmJllyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gSVZlKGMsbCl7MSZjJiZZcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBSVmU9WyJhbmNob3IiXTtmdW5jdGlvbiBMVmUoYyxs'@;
put 'KXtpZigxJmMmJihkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSkoMiwiYnV0dG9uIiw2KSxHdCgzLCJjZHMtaWNvbiIsNyksaGUoKSgpLFlyKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO3hlKCJpZCIsYS5wb3BvdmVySWQpLGZyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5k'@;
put 'YXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbCksZmUoMyksZnIoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSl9fWNvbnN0IE9WZT1bImlucHV0X2xvdyJdLFBWZT1bImlucHV0Il0sRlZlPVsiY29sdW1uUG9ydGFsIl07ZnVuY3Rpb24gSFZlKGMsbCl7MSZjJiZZcigwKX1j'@;
put 'b25zdCBOVmU9WyJyZXNpemVUcmFja2VyIl0sVlZlPVsiY29sdW1uSGFuZGxlIl0sQlZlPVtbWyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGctc3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLCIqIl0salZlPVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0cmluZy1m'@;
put 'aWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiB6VmUoYyxsKXsxJmMmJkpsKDApfWZ1bmN0aW9uIFVWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEwKSwyJmMmJmZyKCJkaXJlY3Rpb24iLE9lKDIpLnNvcnREaXJlY3Rpb24pfWZ1bmN0aW9uIFpWZShjLGwp'@;
put 'e2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnNvcnQoKSl9KSxtdCgxLHpWZSwxLDAsIm5nLWNvbnRhaW5lciIsOCkoMixVVmUsMSwxLCJjZHMtaWNvbiIsOSksaGUoKX1pZigyJmMpe2NvbnN0'@;
put 'IGE9T2UoKSxkPXZvKDYpO2ZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLGZlKCkseGUoIm5nSWYiLGEuc29ydERpcmVjdGlvbil9fWZ1bmN0aW9uIFdWZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1zdHJpbmctZmlsdGVyIiwxMSksZ2koImNsckZpbHRlclZh'@;
put 'bHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGJpKGYuZmlsdGVyVmFsdWUsaCl8fChmLmZpbHRlclZhbHVlPWgpLEN0KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTt4ZSgiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLGEuZmlsdGVyU3RyaW5nUGxh'@;
put 'Y2Vob2xkZXIpKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5yZWdpc3RlcmVkKSxwaSgiY2xyRmlsdGVyVmFsdWUiLGEuZmlsdGVyVmFsdWUpfX1mdW5jdGlvbiBZVmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDEyKSxnaSgiY2xyRmlsdGVy'@;
put 'VmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gYmkoZi5maWx0ZXJWYWx1ZSxoKXx8KGYuZmlsdGVyVmFsdWU9aCksQ3QoaCl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO3hlKCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsYS5maWx0ZXJOdW1i'@;
put 'ZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIixhLmZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1lcmljRmlsdGVyIixhLnJlZ2lzdGVyZWQpLHBpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIEdWZShjLGwpezEm'@;
put 'YyYmWXIoMCwxKX1mdW5jdGlvbiAkVmUoYyxsKXsxJmMmJkpsKDApfWZ1bmN0aW9uIEtWZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDEzKSxtdCgxLCRWZSwxLDAsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtPZSgpO2NvbnN0IGE9dm8oNik7ZmUoKSx4ZSgibmdUZW1wbGF0ZU91'@;
put 'dGxldCIsYSl9fWZ1bmN0aW9uIHFWZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNvbHVtbi1zZXBhcmF0b3IiKX1mdW5jdGlvbiBYVmUoYyxsKXsxJmMmJkd0KDAsImRpdiIsNCl9ZnVuY3Rpb24gSlZlKGMsbCl7MSZjJiZZcigwLDAsWyIqbmdJZiIsImVtcHR5RGF0YWdyaWQiXSl9Y29uc3Qg'@;
put 'UVZlPVsiY2VsbFBvcnRhbCJdO2Z1bmN0aW9uIGVCZShjLGwpezEmYyYmWXIoMCl9Y29uc3QgdEJlPVsicm93UG9ydGFsIl07ZnVuY3Rpb24gbkJlKGMsbCl7MSZjJiZZcigwKX1jb25zdCByQmU9WyJkZXRhaWxCdXR0b24iXSxpQmU9WyJzdGlja3lDZWxscyJdLG9CZT1bInNjcm9sbGFibGVD'@;
put 'ZWxscyJdLGFCZT1bImNhbGN1bGF0ZWRDZWxscyJdLHNCZT1bW1siY2xyLWRnLXJvdy1kZXRhaWwiXV0sW1siY2xyLWRnLWNlbGwiXV0sW1siY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdXV0sbEJlPVsiY2xyLWRnLXJvdy1kZXRhaWwiLCJjbHItZGctY2VsbCIsImNsci1kZy1hY3Rpb24tb3Zl'@;
put 'cmZsb3ciXSxjQmU9Yz0+KHsiaXMtcmVwbGFjZWQiOmN9KSx5MWU9Yz0+KHsiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCI6Y30pO2Z1bmN0aW9uIHVCZShjLGwpe31mdW5jdGlvbiBkQmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxtdCgxLHVC'@;
put 'ZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpLGQ9dm8oNik7eGUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksZmUoKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIGhCZShjLGwpe31mdW5jdGlvbiBm'@;
put 'QmUoYyxsKXsxJmMmJm10KDAsaEJlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMmJihPZSgyKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsdm8oNikpKX1mdW5jdGlvbiBwQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDkpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGgp'@;
put 'e3JldHVybiB3dChhKSxDdChPZSgpLmNsZWFyUmFuZ2VzKGgpKX0pKCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBDdChmLnNlbGVjdFJvdyghZi5zZWxlY3RlZCxoKSl9KSxtdCgxLGRCZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNykoMixm'@;
put 'QmUsMSwxLG51bGwsOCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIixhLmV4cGFuZC5leHBhbmRhYmxlKSxmZSgpLHhlKCJuZ0lmIiwhYS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIGdCZShjLGwpe31mdW5jdGlvbiBtQmUoYyxsKXtpZigxJmMmJihkZSgw'@;
put 'LCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxtdCgxLGdCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCksZD12byg2KTt4ZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0'@;
put 'bGV0IixkKX19ZnVuY3Rpb24gdkJlKGMsbCl7fWZ1bmN0aW9uIGJCZShjLGwpezEmYyYmbXQoMCx2QmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKE9lKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLHZvKDYpKSl9ZnVuY3Rpb24geUJlKGMsbCl7MSZjJiZZcigwKX1mdW5jdGlvbiBfQmUo'@;
put 'YyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJpbnB1dCIsMjMpLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikudG9nZ2xlKGgpKX0pLGhlKCksZGUoMywibGFiZWwiLDI0KSxGdCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgyKS5jbGVhclJhbmdlcyhoKSl9KSxkZSg0LCJzcGFuIiwyNSksTGUoNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7eGUoIm5nQ2xhc3MiLHNwKDcseTFlLCFhLmNsckRnU2VsZWN0YWJsZSkpLGZlKDIpLHhlKCJuZ01v'@;
put 'ZGVsIixhLnNlbGVjdGVkKSgiaWQiLGEuY2hlY2tib3hJZCkoImRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZlKCkseGUoImZvciIsYS5jaGVja2JveElkKSxmZSgyKSx3cihhLmNsckRnUm93'@;
put 'U2VsZWN0aW9uTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIHdCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjEpKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDI2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o'@;
put 'aCl7d3QoYSk7Y29uc3QgZj1PZSgyKTtyZXR1cm4gYmkoZi5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSxoKXx8KGYuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9aCksQ3QoaCl9KSxoZSgpLGRlKDMsImxhYmVsIiwyNykoNCwic3BhbiIsMjUpLExlKDUpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25z'@;
put 'dCBhPU9lKDIpO3hlKCJuZ0NsYXNzIixzcCgxMCx5MWUsIWEuY2xyRGdTZWxlY3RhYmxlKSksZmUoMikseGUoImlkIixhLnJhZGlvSWQpKCJuYW1lIixhLnNlbGVjdGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIixhLml0ZW0pLHBpKCJuZ01vZGVsIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xl'@;
put 'KSx4ZSgiY2hlY2tlZCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT09PWEuaXRlbSkoImRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZlKCkseGUoImZvciIsYS5yYWRpb0lkKSxmZSgyKSx3'@;
put 'cihhLmNsckRnUm93U2VsZWN0aW9uTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIENCZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMjgpLFlyKDEsMiksaGUoKSl9ZnVuY3Rpb24gU0JlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwz'@;
put 'MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS50b2dnbGVFeHBhbmQoKSl9KSxHdCgxLCJjZHMtaWNvbiIsMzMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDQpO2ZyKCJhcmlhLWV4cGFuZGVkIixhLmV4cGFuZC5leHBhbmRlZCkoImFyaWEtbGFiZWwiLGEu'@;
put 'ZXhwYW5kLmV4cGFuZGVkP2EuY2xyRGdEZXRhaWxDbG9zZUxhYmVsOmEuY2xyRGdEZXRhaWxPcGVuTGFiZWwpKCJhcmlhLWNvbnRyb2xzIixhLmV4cGFuZC5oYXNFeHBhbmRUZW1wbGF0ZSYmIWEuZXhwYW5kLmV4cGFuZGVkP251bGw6YS5leHBhbmRhYmxlSWQpLGZlKCksZnIoImRpcmVjdGlv'@;
put 'biIsYS5leHBhbmQuZXhwYW5kZWQ/ImRvd24iOiJyaWdodCIpKCJ0aXRsZSIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuY29sbGFwc2U6YS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kKX19ZnVuY3Rpb24gTUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXNwaW5u'@;
put 'ZXIiLDM0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24geEJlKGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxTQmUsMiw1LCJidXR0b24iLDMwKSgyLE1CZSwyLDEsImNsci1zcGlubmVyIiwzMSks'@;
put 'dWkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUoIm5nSWYiLCFhLmV4cGFuZC5sb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixhLmV4cGFuZC5sb2FkaW5nKX19ZnVuY3Rpb24gRUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyOSksbXQoMSx4QmUsMywyLCJuZy1jb250YWluZXIiLDgp'@;
put 'LGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIixhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gVEJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwzNyw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD12bygxKSxm'@;
put 'PU9lKDMpO3JldHVybiBDdChmLmRldGFpbFNlcnZpY2UudG9nZ2xlKGYuaXRlbSxoKSl9KSxHdCgyLCJjZHMtaWNvbiIsMzgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDMpO1RyKCJpcy1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLHhlKCJkaXNhYmxlZCIsYS5k'@;
put 'ZXRhaWxEaXNhYmxlZCksZnIoImFyaWEtbGFiZWwiLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT9hLmNsckRnRGV0YWlsQ2xvc2VMYWJlbDphLmNsckRnRGV0YWlsT3BlbkxhYmVsKSgiYXJpYS1leHBhbmRlZCIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pKSgi'@;
put 'YXJpYS1jb250cm9scyIsYS5kZXRhaWxTZXJ2aWNlLmlkKSxmZSgyKSxmcigiZGlyZWN0aW9uIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/ImxlZnQiOiJyaWdodCIpKCJ0aXRsZSIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pP2EuY29tbW9uU3RyaW5ncy5r'@;
put 'ZXlzLmNsb3NlOmEuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW4pfX1mdW5jdGlvbiBBQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM1KSxtdCgxLFRCZSwzLDgsImJ1dHRvbiIsMzYpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5kZXRhaWxIaWRkZW4pfX1m'@;
put 'dW5jdGlvbiBrQmUoYyxsKXt9ZnVuY3Rpb24gREJlKGMsbCl7MSZjJiZtdCgwLGtCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZjJiYoT2UoMikseGUoIm5nVGVtcGxhdGVPdXRsZXQiLHZvKDQpKSl9ZnVuY3Rpb24gSUJlKGMsbCl7fWZ1bmN0aW9uIFJCZShjLGwpezEmYyYmbXQoMCxJQmUs'@;
put 'MCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKE9lKDIpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0Iix2byg0KSkpfWZ1bmN0aW9uIExCZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNlbGwiLDM5KX1mdW5jdGlvbiBPQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxj'@;
put 'aSgyLG51bGwsMyksbXQoNCxfQmUsNiw5LCJkaXYiLDE0KSg1LHdCZSw2LDEyLCJkaXYiLDE0KSg2LENCZSwyLDAsImRpdiIsMTUpKDcsRUJlLDIsMSwiZGl2IiwxNikoOCxBQmUsMiwxLCJkaXYiLDE3KSx1aSgpLGhlKCksZGUoOSwiZGl2IiwxOCkoMTAsImRpdiIsMTkpLFlyKDExLDEpLEps'@;
put 'KDEyLG51bGwsNCksaGUoKSxtdCgxNCxEQmUsMSwxLG51bGwsOCkoMTUsUkJlLDEsMSxudWxsLDgpLGhlKCksbXQoMTYsTEJlLDEsMCwiY2xyLWRnLWNlbGwiLDIwKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtUcigiZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuIixhLmRldGFpbFNlcnZpY2Uu'@;
put 'aXNSb3dPcGVuKGEuaXRlbSkpLHhlKCJpZCIsYS5pZCksZmUoNCkseGUoIm5nSWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1hLlNFTEVDVElPTl9UWVBFLk11bHRpKSxmZSgpLHhlKCJuZ0lmIixhLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YS5TRUxFQ1RJT05fVFlQRS5TaW5n'@;
put 'bGUpLGZlKCkseGUoIm5nSWYiLGEucm93QWN0aW9uU2VydmljZS5oYXNBY3Rpb25hYmxlUm93KSxmZSgpLHhlKCJuZ0lmIixhLmdsb2JhbEV4cGFuZGFibGUuaGFzRXhwYW5kYWJsZVJvdyksZmUoKSx4ZSgibmdJZiIsYS5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLGZlKCkseGUoIm5nQ2xhc3Mi'@;
put 'LHNwKDEyLGNCZSxhLnJlcGxhY2VkJiZhLmV4cGFuZGVkKSksZmUoNSkseGUoIm5nSWYiLGEucmVwbGFjZWQmJiFhLmV4cGFuZC5sb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGEuc2tlbGV0b25Mb2FkaW5nKX19'@;
put 'Y29uc3QgUEJlPVsiZGF0YWdyaWQiXSxGQmU9WyJkYXRhZ3JpZFRhYmxlIl0sSEJlPVsic2Nyb2xsYWJsZUNvbHVtbnMiXSxOQmU9WyJwcm9qZWN0ZWREaXNwbGF5Q29sdW1ucyJdLFZCZT1bInByb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucyJdLEJCZT1bImRpc3BsYXllZFJvd3MiXSxqQmU9'@;
put 'WyJjYWxjdWxhdGlvblJvd3MiXSx6QmU9W1tbImNsci1kZy1hY3Rpb24tYmFyIl1dLFtbImNsci1kZy1wbGFjZWhvbGRlciJdXSxbWyJjbHItZGctZm9vdGVyIl1dLFtbIiIsImNscklmRGV0YWlsIiwiIl0sWyJjbHItZGctZGV0YWlsIl1dXSxVQmU9WyJjbHItZGctYWN0aW9uLWJhciIsImNs'@;
put 'ci1kZy1wbGFjZWhvbGRlciIsImNsci1kZy1mb290ZXIiLCJbY2xySWZEZXRhaWxdLGNsci1kZy1kZXRhaWwiXTtmdW5jdGlvbiBaQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI5KSgxLCJpbnB1dCIsMzApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3'@;
put 'dChhKTtjb25zdCBmPU9lKDIpO3JldHVybiBiaShmLmFsbFNlbGVjdGVkLGgpfHwoZi5hbGxTZWxlY3RlZD1oKSxDdChoKX0pLGhlKCksZGUoMiwibGFiZWwiLDMxKSgzLCJzcGFuIiwzMiksTGUoNCksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCkseGUoImlkIixhLnNlbGVj'@;
put 'dEFsbElkKSxwaSgibmdNb2RlbCIsYS5hbGxTZWxlY3RlZCksZnIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCksZmUoKSx4ZSgiZm9yIixhLnNlbGVjdEFsbElkKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwpfX1mdW5jdGlvbiBX'@;
put 'QmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDI2KSxGdCgia2V5ZG93bi5zcGFjZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudG9nZ2xlQWxsU2VsZWN0ZWQoaCkpfSksbXQoMSxaQmUsNSw1LCJkaXYiLDI3KSxHdCgyLCJkaXYiLDI4KSxoZSgpfWlm'@;
put 'KDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLCFhLnZpcnR1YWxTY3JvbGwpfX1mdW5jdGlvbiBZQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMzKSgxLCJkaXYiLDMyKSxMZSgyKSxoZSgpLEd0KDMsImRpdiIsMjgpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLHdy'@;
put 'KGEuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwpfX1mdW5jdGlvbiBHQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM0KSgxLCJkaXYiLDMyKSxMZSgyKSxoZSgpLEd0KDMsImRpdiIsMjgpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLHdyKGEuY2xyRGdTaW5nbGVBY3Rp'@;
put 'b25hYmxlQXJpYUxhYmVsKX19ZnVuY3Rpb24gJEJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNSkoMSwiZGl2IiwzMiksTGUoMiksaGUoKSxHdCgzLCJkaXYiLDI4KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgyKSx3cihhLmNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwpfX1m'@;
put 'dW5jdGlvbiBLQmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGctcm93IiwzNikoMSwiY2xyLWRnLWNlbGwiKSxHdCgyLCJjbHItc3Bpbm5lciIsMzcpLGRlKDMsInNwYW4iKSxMZSg0KSxoZSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoNCksd3IoYS5jb21tb25TdHJpbmdzLmtleXMu'@;
put 'bG9hZGluZyl9fWZ1bmN0aW9uIHFCZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kZy1yb3ciLDM2KSgxLCJjbHItZGctY2VsbCIpLEd0KDIsImNsci1zcGlubmVyIiwzNyksZGUoMywic3BhbiIpLExlKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg0KSx3cihhLmNvbW1vblN0'@;
put 'cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gWEJlKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctcGxhY2Vob2xkZXIiKX1mdW5jdGlvbiBKQmUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDM4KSgxLCJjbHItc3Bpbm5lciIsMzcpLExlKDIsIkxvYWRpbmciKSxoZSgpKCkpfWNvbnN0IGVqZT1b'@;
put 'ImFsbFNlbGVjdGVkIl07ZnVuY3Rpb24gdGplKGMsbCl7fWZ1bmN0aW9uIG5qZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImxpIikoMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyLCJpbnB1dCIsMTMpLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0'@;
put 'KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikudG9nZ2xlQ29sdW1uU3RhdGUoZiwhaCkpfSksaGUoKSxkZSgzLCJsYWJlbCIpLG10KDQsdGplLDAsMCwibmctdGVtcGxhdGUiLDE0KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgyKTtmZSgyKSx4ZSgiZGlz'@;
put 'YWJsZWQiLGQuaGFzT25seU9uZVZpc2libGVDb2x1bW4mJiFhLmhpZGRlbikoIm5nTW9kZWwiLCFhLmhpZGRlbiksZmUoMikseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGl0bGVUZW1wbGF0ZVJlZil9fWZ1bmN0aW9uIHJqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIs'@;
put 'MykoMSwiZGl2Iiw0KSgyLCJkaXYiLDUsMCksTGUoNCksaGUoKSxkZSg1LCJoMiIpLExlKDYpLGhlKCksZGUoNywiYnV0dG9uIiw2KSxHdCg4LCJjZHMtaWNvbiIsNyksZGUoOSwic3BhbiIsOCksTGUoMTApLGhlKCkoKSgpLGRlKDExLCJ1bCIsOSksbXQoMTIsbmplLDUsMywibGkiLDEwKSxo'@;
put 'ZSgpLGRlKDEzLCJkaXYiLDExKSgxNCwiY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIiwxMiksRnQoImNsckFsbFNlbGVjdGVkIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmFsbENvbHVtbnNTZWxlY3RlZCgpKX0pLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO3hl'@;
put 'KCJpZCIsYS5wb3BvdmVySWQpLGZyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5zaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbiksZmUoNCksd3IoYS5jb21tb25TdHJpbmdzLmtleXMuYWxsQ29sdW1uc1NlbGVjdGVkKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5z'@;
put 'aG93Q29sdW1ucyksZmUoKSxmcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKCksZnIoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLGZlKDIpLHhlKCJuZ0Zvck9mIixhLmhp'@;
put 'ZGVhYmxlQ29sdW1uU3RhdGVzKSgibmdGb3JUcmFja0J5IixhLnRyYWNrQnlGbil9fWNvbnN0IF8xZT1bInRpdGxlIl0sb2plPVtbWyJjbHItZGctcGFnaW5hdGlvbiJdXSwiKiJdLGFqZT1bImNsci1kZy1wYWdpbmF0aW9uIiwiKiJdO2Z1bmN0aW9uIHNqZShjLGwpe2lmKDEmYyYmKGNpKDAp'@;
put 'LGRlKDEsImRpdiIsMSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDIpLEd0KDMsImlucHV0IiwzKSxkZSg0LCJsYWJlbCIpLExlKDUpLGhlKCksZGUoNiwic3BhbiIsNCksTGUoNyksaGUoKSgpKCksdWkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoNSksd3IoYS5zZWxlY3Rpb24uY3VycmVu'@;
put 'dC5sZW5ndGgpLGZlKDIpLHdyKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdGVkUm93cyl9fWZ1bmN0aW9uIGxqZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiKX1mdW5jdGlvbiBjamUoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLGxqZSwxLDAsImNsci1kZy1jb2x1'@;
put 'bW4tdG9nZ2xlIiwwKSxkZSgyLCJkaXYiLDUpLFlyKDMsMSksaGUoKSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIixhLmhhc0hpZGVhYmxlQ29sdW1ucyl9fWZ1bmN0aW9uIHVqZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNCksTGUoMSksaGUoKSksMiZjKXtj'@;
put 'b25zdCBhPWwuJGltcGxpY2l0O3hlKCJuZ1ZhbHVlIixhKSxmZSgpLHdyKGEpfX1jb25zdCBkamU9WyJjdXJyZW50UGFnZUlucHV0Il0saGplPVsiKiIsW1siY2xyLWRnLXBhZ2Utc2l6ZSJdXV0sZmplPVsiKiIsImNsci1kZy1wYWdlLXNpemUiXTtmdW5jdGlvbiBwamUoYyxsKXsxJmMmJihk'@;
put 'ZSgwLCJkaXYiLDYpLFlyKDEsMSksaGUoKSl9ZnVuY3Rpb24gZ2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiaW5wdXQiLDE4LDEpLEZ0KCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykudXBkYXRlQ3VycmVudFBhZ2UoaCkpfSkoImJs'@;
put 'dXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgzKS52ZXJpZnlDdXJyZW50UGFnZShoKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTt4ZSgic2l6ZSIsYS5wYWdlLmxhc3QudG9TdHJpbmcoKS5sZW5ndGgpKCJ2YWx1ZSIsYS5wYWdlLmN1cnJlbnQpLGZyKCJhcmlhLWxh'@;
put 'YmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jdXJyZW50UGFnZSl9fWZ1bmN0aW9uIG1qZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSx3cihhLnBhZ2UuY3VycmVudCl9fWZ1bmN0aW9uIHZqZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1MbigpO2RlKDAsImRpdiIsNykoMSwiYnV0dG9uIiw4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLnBhZ2UuY3VycmVudD0xKX0pLGRlKDIsInNwYW4iLDkpLExlKDMpLGhlKCksR3QoNCwiY2RzLWljb24iLDEwKSxoZSgpLGRlKDUsImJ1dHRvbiIs'@;
put 'MTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UuY3VycmVudC0xKX0pLGRlKDYsInNwYW4iLDkpLExlKDcpLGhlKCksR3QoOCwiY2RzLWljb24iLDEyKSxoZSgpLG10KDksZ2plLDIsMywiaW5wdXQiLDEz'@;
put 'KSgxMCxtamUsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLF91KSxMZSgxMiwiIFx4YTAvXHhhMCIpLGRlKDEzLCJzcGFuIiksTGUoMTQpLGhlKCksZGUoMTUsImJ1dHRvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBDdChoLnBhZ2UuY3Vy'@;
put 'cmVudD1oLnBhZ2UuY3VycmVudCsxKX0pLGRlKDE2LCJzcGFuIiw5KSxMZSgxNyksaGUoKSxHdCgxOCwiY2RzLWljb24iLDE1KSxoZSgpLGRlKDE5LCJidXR0b24iLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9'@;
put 'aC5wYWdlLmxhc3QpfSksZGUoMjAsInNwYW4iLDkpLExlKDIxKSxoZSgpLEd0KDIyLCJjZHMtaWNvbiIsMTcpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9dm8oMTEpLGQ9T2UoMik7ZmUoKSx4ZSgiZGlzYWJsZWQiLGQucGFnZS5jdXJyZW50PD0xKSxmcigiYXJpYS1sYWJlbCIsZC5jb21tb25T'@;
put 'dHJpbmdzLmtleXMuZmlyc3RQYWdlKSxmZSgyKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLGZlKDIpLHhlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLGZyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDIpLHdyKGQu'@;
put 'Y29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMikseGUoIm5nSWYiLCFkLmRpc2FibGVDdXJyZW50UGFnZUlucHV0KSgibmdJZkVsc2UiLGEpLGZlKDQpLGZyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy50b3RhbFBhZ2VzKSxmZSgpLHdyKGQucGFnZS5sYXN0'@;
put 'KSxmZSgpLHhlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxmcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLGZlKDIpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSx4ZSgiZGlzYWJsZWQiLGQucGFnZS5j'@;
put 'dXJyZW50Pj1kLnBhZ2UubGFzdCksZnIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKSxmZSgyKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5sYXN0UGFnZSl9fWZ1bmN0aW9uIGJqZShjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEscGplLDIsMCwiZGl2IiwzKSxk'@;
put 'ZSgyLCJkaXYiLDQpLFlyKDMpLGhlKCksbXQoNCx2amUsMjMsMTYsImRpdiIsNSksdWkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsYS5fcGFnZVNpemVDb21wb25lbnQpLGZlKDMpLHhlKCJuZ0lmIixhLnBhZ2UubGFzdD4xKX19ZnVuY3Rpb24geWplKGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiZGl2IiwxOSksTGUoMiksaGUoKSxkZSgzLCJkaXYiLDcpKDQsImJ1dHRvbiIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50LTEpfSksZGUo'@;
put 'NSwic3BhbiIsOSksTGUoNiksaGUoKSxHdCg3LCJjZHMtaWNvbiIsMTIpLGhlKCksZGUoOCwic3BhbiIpLExlKDkpLGhlKCksZGUoMTAsImJ1dHRvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5j'@;
put 'dXJyZW50KzEpfSksZGUoMTEsInNwYW4iLDkpLExlKDEyKSxoZSgpLEd0KDEzLCJjZHMtaWNvbiIsMTUpLGhlKCkoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLEZmKCIgIixhLnBhZ2UuZmlyc3RJdGVtKzEsIi0iLGEucGFnZS5sYXN0SXRlbSsxLCIgLyAiLGEucGFnZS50b3Rh'@;
put 'bEl0ZW1zLCIgIiksZmUoMikseGUoImRpc2FibGVkIixhLnBhZ2UuY3VycmVudDw9MSksZnIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMiksd3IoYS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgzKSx3cihhLnBhZ2UuY3Vy'@;
put 'cmVudCksZmUoKSx4ZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50Pj1hLnBhZ2UubGFzdCksZnIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSl9fWNvbnN0IFNqZT1bW1siY2xyLXN0YWNr'@;
put 'LWxhYmVsIl1dLCIqIixbWyJjbHItc3RhY2stYmxvY2siXV1dLE1qZT1bImNsci1zdGFjay1sYWJlbCIsIioiLCJjbHItc3RhY2stYmxvY2siXTtmdW5jdGlvbiB4amUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KSwyJmMmJmZyKCJkaXJlY3Rpb24iLE9lKCkuY2FyZXREaXJlY3Rpb24p'@;
put 'fWZ1bmN0aW9uIEVqZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDgpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksd3IoYS5jb21tb25TdHJpbmdzLmtleXMuc3RhY2tWaWV3Q2hhbmdlZCl9fWZ1bmN0aW9uIFRqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSksWXIo'@;
put 'MSwyKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTt3ZCgiaGVpZ2h0IixhLmV4cGFuZGVkPyJhdXRvIjowKSxmcigiaWQiLGEuZ2V0U3RhY2tDaGlsZHJlbklkKCkpKCJhcmlhLWxhYmVsbGVkYnkiLGEubGFiZWxsZWRCeUlkKX19Y29uc3QgQWplPVtbWyJjbHItc3RhY2staGVhZGVyIl1dLCIq'@;
put 'Il0sa2plPVsiY2xyLXN0YWNrLWhlYWRlciIsIioiXTtmdW5jdGlvbiBSamUoYyxsKXsxJmMmJkpsKDApfWZ1bmN0aW9uIExqZShjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsUmplLDEsMCwibmctY29udGFpbmVyIiwyKSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgyKTtm'@;
put 'ZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24udGVtcGxhdGUpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsZC5nZXRDb250ZXh0KGEpKX19ZnVuY3Rpb24gT2plKGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxMamUsMiwyLCJuZy1jb250YWlu'@;
put 'ZXIiLDEpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nRm9yT2YiLChudWxsPT1hLnBhcmVudD9udWxsOmEucGFyZW50LmNoaWxkcmVuKXx8YS5jaGlsZHJlbil9fWNvbnN0IFBqZT1bImNvbnRlbnRDb250YWluZXIiXSxGamU9W1tbImNsci10cmVlLW5vZGUiXV0sW1siIiwi'@;
put 'Y2xySWZFeHBhbmRlZCIsIiJdXSwiKiJdLEhqZT1bImNsci10cmVlLW5vZGUiLCJbY2xySWZFeHBhbmRlZF0iLCIqIl07ZnVuY3Rpb24gTmplKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9l'@;
put 'KCkuZXhwYW5kU2VydmljZS50b2dnbGUoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZm9jdXNUcmVlTm9kZSgpKX0pLEd0KDEsImNkcy1pY29uIiwxMCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTt4ZSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLGZlKCks'@;
put 'ZnIoImRpcmVjdGlvbiIsYS5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKX19ZnVuY3Rpb24gVmplKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMSksR3QoMSwic3BhbiIsMTIpLGhlKCkpfWZ1bmN0aW9uIEJqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRp'@;
put 'diIsMTMpKDEsImlucHV0IiwxNCksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGguX21vZGVsLnRvZ2dsZVNlbGVjdGlvbihoLmZlYXR1cmVzU2VydmljZS5lYWdlcikpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgp'@;
put 'LmZvY3VzVHJlZU5vZGUoKSl9KSxoZSgpLGRlKDIsImxhYmVsIiwxNSksSmwoMywxNiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLGQ9dm8oNyk7ZmUoKSx4ZSgiaWQiLGEubm9kZUlkKyItY2hlY2siKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpKCJjaGVja2VkIixhLl9tb2RlbC5zZWxl'@;
put 'Y3RlZC52YWx1ZT09PWEuU1RBVEVTLlNFTEVDVEVEKSgiaW5kZXRlcm1pbmF0ZSIsYS5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5JTkRFVEVSTUlOQVRFKSxmZSgpLHhlKCJmb3IiLGEubm9kZUlkKyItY2hlY2siKSxmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVu'@;
put 'Y3Rpb24gamplKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxNyksRnQoIm1vdXNldXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZm9jdXNUcmVlTm9kZSgpKX0pLEpsKDEsMTYpLGhlKCl9aWYoMiZjKXtPZSgpO2NvbnN0IGE9dm8oNyk7ZmUoKSx4ZSgi'@;
put 'bmdUZW1wbGF0ZU91dGxldCIsYSl9fWZ1bmN0aW9uIHpqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTkpKDEsInNwYW4iKSxMZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxJcigiICIsYS5hcmlhU2VsZWN0ZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0ZWRU'@;
put 'cmVlTm9kZTphLmNvbW1vblN0cmluZ3Mua2V5cy51bnNlbGVjdGVkVHJlZU5vZGUsIiIpfX1mdW5jdGlvbiBVamUoYyxsKXtpZigxJmMmJihZcigwLDIpLG10KDEsemplLDMsMSwiZGl2IiwxOCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLGEuZmVhdHVyZXNTZXJ2aWNlLnNl'@;
put 'bGVjdGFibGV8fGEuYXJpYVNlbGVjdGVkKX19ZnVuY3Rpb24gWmplKGMsbCl7MSZjJiZHdCgwLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwxKSwyJmMmJnhlKCJjaGlsZHJlbiIsT2UoKS5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnJvb3QpfWZ1bmN0aW9uIFdqZShjLGwpe2lmKDEmYyl7'@;
put 'Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5jbG9zZSgpKX0pLEd0KDEsImNkcy1pY29uIiw1KSxoZSgpfTImYyYmZnIoImFyaWEtbGFiZWwiLE9lKDIpLmNsckNsb3NlQnV0dG9uQXJpYUxhYmVsKX1mdW5j'@;
put 'dGlvbiBZamUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksWXIoMiksaGUoKSxtdCgzLFdqZSwyLDEsImJ1dHRvbiIsMyksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7VHIoImFsZXJ0LXNtIixhLmlzU21hbGwpKCJhbGVydC1saWdodHdlaWdodCIsYS5pc0xpZ2h0d2Vp'@;
put 'Z2h0KSgiYWxlcnQtYXBwLWxldmVsIixhLmlzQXBwTGV2ZWwpLHhlKCJuZ0NsYXNzIixhLmFsZXJ0Q2xhc3MpLGZlKDMpLHhlKCJuZ0lmIixhLmNsb3NhYmxlKX19ZnVuY3Rpb24gR2plKGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMyl9ZnVuY3Rpb24gJGplKGMsbCl7aWYoMSZjJiZH'@;
put 'dCgwLCJjZHMtaWNvbiIsNCksMiZjKXtjb25zdCBhPU9lKCk7ZnIoInNoYXBlIixhLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJpYS1sYWJlbCIsYS5pY29uU2VydmljZS5hbGVydEljb25UaXRsZSl9fWNvbnN0IEtqZT1bW1siY2xyLWFsZXJ0Il1dXSxxamU9WyJjbHItYWxlcnQi'@;
put 'XTtmdW5jdGlvbiBYamUoYyxsKXsxJmMmJkd0KDAsImNsci1hbGVydHMtcGFnZXIiLDIpLDImYyYmeGUoImNsckN1cnJlbnRBbGVydEluZGV4IixPZSgpLmN1cnJlbnRBbGVydEluZGV4KX1jb25zdCBKamU9WyJib2R5Il0sUWplPVtbWyIiLDgsIm1vZGFsLW5hdiJdXSxbWyIiLDgsImxlYWRp'@;
put 'bmctYnV0dG9uIl1dLFtbIiIsOCwibW9kYWwtdGl0bGUiXV0sW1siIiw4LCJtb2RhbC1ib2R5Il1dLFtbIiIsOCwibW9kYWwtZm9vdGVyIl1dXSxlemU9WyIubW9kYWwtbmF2IiwiLmxlYWRpbmctYnV0dG9uIiwiLm1vZGFsLXRpdGxlIiwiLm1vZGFsLWJvZHkiLCIubW9kYWwtZm9vdGVyIl07'@;
put 'ZnVuY3Rpb24gdHplKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5jbG9zZSgpKX0pLEd0KDEsImNkcy1pY29uIiwxNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZnIoImFy'@;
put 'aWEtbGFiZWwiLGEuY2xvc2VCdXR0b25BcmlhTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKX19ZnVuY3Rpb24gbnplKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpLEZ0KCJAZmFkZU1vdmUuZG9uZSIsZnVuY3Rpb24oaCl7cmV0dXJu'@;
put 'IHd0KGEpLEN0KE9lKCkuZmFkZURvbmUoaCkpfSksZGUoMiwiZGl2Iiw2KSxMZSgzKSxoZSgpLGRlKDQsImRpdiIsNyksWXIoNSksZGUoNiwiZGl2Iiw4KSg3LCJkaXYiLDkpLFlyKDgsMSksZGUoOSwiZGl2IiwxMCwwKSxZcigxMSwyKSxoZSgpLG10KDEyLHR6ZSwyLDEsImJ1dHRvbiIsMTEp'@;
put 'LGhlKCksZGUoMTMsImRpdiIsMTIsMSksWXIoMTUsMyksaGUoKSxZcigxNiw0KSxoZSgpKCksZGUoMTcsImRpdiIsNiksTGUoMTgpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO1RyKCJtb2RhbC1mdWxsLXNjcmVlbiIsImZ1bGwtc2NyZWVuIj09YS5zaXplKSxmZSgpLFRyKCJtb2Rh'@;
put 'bC1zbSIsInNtIj09YS5zaXplKSgibW9kYWwtbGciLCJsZyI9PWEuc2l6ZSkoIm1vZGFsLXhsIiwieGwiPT1hLnNpemUpLHhlKCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSIsITApKCJAZmFkZU1vdmUiLGEuZmFkZU1vdmUpLGZyKCJhcmlhLWhpZGRlbiIsIWEuX29wZW4pKCJhcmlhLWxhYmVs'@;
put 'bGVkYnkiLGEubGFiZWxsZWRCeXx8YS5tb2RhbElkKSxmZSgyKSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksZmUoNikseGUoImlkIixhLm1vZGFsSWQpLGZlKDMpLHhlKCJuZ0lmIixhLmNsb3NhYmxlKSxmZSg2KSx3cihhLmNvbW1vblN0cmluZ3Mua2V5cy5t'@;
put 'b2RhbENvbnRlbnRFbmQpfX1mdW5jdGlvbiByemUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuYmFja2Ryb3BDbGljaygpKX0pLGhlKCl9MiZjJiZ4ZSgiQGZhZGUiLHZvaWQgMCl9bGV0'@;
put 'IEZsPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItaWNvbiJdXX0pLGN9KSgpLHVzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjZHMtaWNvbiJdXX0pLGN9KSgpLFRzPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7'@;
put 'dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0pLGN9KSgpO2NsYXNzIGt4e312YXIgVTE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ERUZBVUxUPTBdPSJERUZBVUxUIixjW2MuTE9BRElORz0xXT0iTE9BRElORyIsY1tjLlNVQ0NFU1M9Ml09IlNVQ0NFU1MiLGNbYy5FUlJP'@;
put 'Uj0zXT0iRVJST1IiLGN9KFUxfHx7fSk7bGV0IFYwPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5saXN0ZW5lcj1hLHRoaXMuX2xvYWRpbmdTdGF0ZT1VMS5ERUZBVUxUfWdldCBsb2FkaW5nU3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ1N0YXRlfXNldCBsb2FkaW5nU3Rh'@;
put 'dGUoYSl7ITA9PT1hP2E9VTEuTE9BRElORzphfHwoYT1VMS5ERUZBVUxUKSxhIT09dGhpcy5fbG9hZGluZ1N0YXRlJiYodGhpcy5fbG9hZGluZ1N0YXRlPWEsdGhpcy5saXN0ZW5lciYmdGhpcy5saXN0ZW5lci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSkpfW5nT25EZXN0cm95KCl7dGhpcy5sb2Fk'@;
put 'aW5nU3RhdGU9VTEuREVGQVVMVH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoa3gsOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJMb2FkaW5nIiwiIl1dLGlucHV0czp7bG9hZGluZ1N0YXRlOltqbi5Ob25l'@;
put 'LCJjbHJMb2FkaW5nIiwibG9hZGluZ1N0YXRlIl19fSksY30pKCksWjE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kYWJsZT0wLHRoaXMuaGFzRXhwYW5kVGVtcGxhdGU9ITEsdGhpcy5fbG9hZGluZz0hMSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9leHBhbmRDaGFu'@;
put 'Z2U9bmV3IFdufWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmd9c2V0IGxvYWRpbmcoYSl7KGE9ISFhKSE9PXRoaXMuX2xvYWRpbmcmJih0aGlzLl9sb2FkaW5nPWEpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7KGE9ISFhKSE9'@;
put 'PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhwYW5kZWQ9YSx0aGlzLl9leHBhbmRDaGFuZ2UubmV4dChhKSl9Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKCl7dGhpcy5leHBhbmRlZD0hdGhpcy5fZXhwYW5kZWR9bG9h'@;
put 'ZGluZ1N0YXRlQ2hhbmdlKGEpe3RoaXMubG9hZGluZz1hPT09VTEuTE9BRElOR319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQXplPTA7ZnVuY3Rpb24g'@;
put 'U3UoKXtyZXR1cm4iY2xyLWlkLSIrQXplKyt9bGV0IHcxZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiJdLFsi'@;
put 'Y2xyLXN0ZXAtZGVzY3JpcHRpb24iXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEm'@;
put 'YSYmKGxvKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKTtjb25zdCAkZj0iMC4ycyBlYXNlLWluLW91dCIsa3plPVtfaCgic2tpcEluaXRpYWxSZW5kZXIiLFtydSgiOmVudGVyIixbXSldKSxfaCgidG9nZ2xlIixbcnUoInZvaWQgPT4gKiIsW2Nz'@;
put 'KHtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OjB9KSxNMCgkZixjcyh7aGVpZ2h0OiIqIn0pKV0pXSldLFRZPShfaCgic2tpcEluaXRpYWxSZW5kZXIiLFtydSgiOmVudGVyIixbXSldKSxfaCgidG9nZ2xlIixbcnUoInZvaWQgPT4gKiIsW2NzKHtkaXNwbGF5OiJibG9jayIsaGVpZ2h0OjB9KSxN'@;
put 'MCgkZixjcyh7aGVpZ2h0OiIqIn0pKV0pLHJ1KCIqID0+IHZvaWQiLFtjcyh7ZGlzcGxheToiYmxvY2sifSksTTAoJGYsY3Moe2hlaWdodDowLGRpc3BsYXk6Im5vbmUifSkpXSldKSx7b3BlbjoiT3BlbiIsY2xvc2U6IkNsb3NlIixzaG93OiJTaG93IixoaWRlOiJIaWRlIixhcHBseToiQXBw'@;
put 'bHkiLGNhbmNlbDoiQ2FuY2VsIixleHBhbmQ6IkV4cGFuZCIsY29sbGFwc2U6IkNvbGxhcHNlIixtb3JlOiJNb3JlIixzZWxlY3Q6IlNlbGVjdCIsc2VsZWN0QWxsOiJTZWxlY3QgQWxsIixwcmV2aW91czoiUHJldmlvdXMiLG5leHQ6Ik5leHQiLGN1cnJlbnQ6Ikp1bXAgdG8gY3VycmVudCIs'@;
put 'aW5mbzoiSW5mbyIsc3VjY2VzczoiU3VjY2VzcyIsd2FybmluZzoiV2FybmluZyIsZGFuZ2VyOiJFcnJvciIsbmV1dHJhbDoiTmV1dHJhbCIsdW5rbm93bjoiVW5rbm93biIscm93QWN0aW9uczoiQXZhaWxhYmxlIGFjdGlvbnMiLHBpY2tDb2x1bW5zOiJNYW5hZ2UgQ29sdW1ucyIsc2hvd0Nv'@;
put 'bHVtbnM6IlNob3cgQ29sdW1ucyIsc29ydENvbHVtbjoiU29ydCBDb2x1bW4iLGZpcnN0UGFnZToiRmlyc3QgUGFnZSIsbGFzdFBhZ2U6Ikxhc3QgUGFnZSIsbmV4dFBhZ2U6Ik5leHQgUGFnZSIscHJldmlvdXNQYWdlOiJQcmV2aW91cyBQYWdlIixjdXJyZW50UGFnZToiQ3VycmVudCBQYWdl'@;
put 'Iix0b3RhbFBhZ2VzOiJUb3RhbCBQYWdlcyIsZmlsdGVySXRlbXM6IkZpbHRlciBpdGVtcyIsbWluVmFsdWU6Ik1pbiB2YWx1ZSIsbWF4VmFsdWU6Ik1heCB2YWx1ZSIsbW9kYWxDb250ZW50U3RhcnQ6IkJlZ2lubmluZyBvZiBNb2RhbCBDb250ZW50Iixtb2RhbENvbnRlbnRFbmQ6IkVuZCBv'@;
put 'ZiBNb2RhbCBDb250ZW50IixzaWRlUGFuZWxQaW46IlBpbiBTaWRlIFBhbmVsIixzaG93Q29sdW1uc01lbnVEZXNjcmlwdGlvbjoiU2hvdyBvciBoaWRlIGNvbHVtbnMgbWVudSIsYWxsQ29sdW1uc1NlbGVjdGVkOiJBbGwgY29sdW1ucyBzZWxlY3RlZCIsc2lnbnBvc3RUb2dnbGU6IlNpZ25w'@;
put 'b3N0IFRvZ2dsZSIsc2lnbnBvc3RDbG9zZToiQ2xvc2UiLGxvYWRpbmc6IkxvYWRpbmciLGRldGFpbFBhbmVTdGFydDoiU3RhcnQgb2Ygcm93IGRldGFpbHMiLGRldGFpbFBhbmVFbmQ6IkVuZCBvZiByb3cgZGV0YWlscyIsc2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsOiJTaW5nbGUgc2VsZWN0'@;
put 'aW9uIGhlYWRlciIsc2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbDoiU2luZ2xlIGFjdGlvbmFibGUgaGVhZGVyIixkZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJUb2dnbGUgbW9yZSByb3cgY29udGVudCIsZGF0YWdyaWRGaWx0ZXJBcmlhTGFiZWw6IntDT0xVTU59IGZpbHRlciIsZGF0YWdy'@;
put 'aWRGaWx0ZXJMYWJlbDoie0NPTFVNTn0gZmlsdGVyIixkYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbDoiRmlsdGVyIGRpYWxvZyIsY29sdW1uU2VwYXJhdG9yQXJpYUxhYmVsOiJDb2x1bW4gcmVzaXplIGhhbmRsZSIsY29sdW1uU2VwYXJhdG9yRGVzY3JpcHRpb246IlVzZSBsZWZ0IG9y'@;
put 'IHJpZ2h0IGtleSB0byByZXNpemUgdGhlIGNvbHVtbiIsZnJvbUxhYmVsOiJGcm9tIix0b0xhYmVsOiJUbyIsYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgYWxlcnQiLGFsZXJ0TmV4dEFsZXJ0QXJpYUxhYmVsOiJOZXh0IGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09V'@;
put 'TlR9IixhbGVydFByZXZpb3VzQWxlcnRBcmlhTGFiZWw6IlByZXZpb3VzIGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixkYXRlcGlja2VyRGlhbG9nTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hvb3NlRGF0ZUxhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0'@;
put 'ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJlbDoiQ2hhbmdlIGRhdGUsIHtTRUxFQ1RFRF9EQVRFfSIsZGF0ZXBpY2tlclByZXZpb3VzTW9udGg6IlByZXZpb3VzIG1vbnRoIixkYXRlcGlja2VyQ3VycmVudE1vbnRoOiJDdXJyZW50IG1vbnRoIixkYXRlcGlja2VyTmV4dE1vbnRoOiJOZXh0'@;
put 'IG1vbnRoIixkYXRlcGlja2VyUHJldmlvdXNEZWNhZGU6IlByZXZpb3VzIGRlY2FkZSIsZGF0ZXBpY2tlck5leHREZWNhZGU6Ik5leHQgZGVjYWRlIixkYXRlcGlja2VyQ3VycmVudERlY2FkZToiQ3VycmVudCBkZWNhZGUiLGRhdGVwaWNrZXJTZWxlY3RNb250aFRleHQ6IlNlbGVjdCBtb250'@;
put 'aCwgdGhlIGN1cnJlbnQgbW9udGggaXMge0NBTEVOREFSX01PTlRIfSIsZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0OiJTZWxlY3QgeWVhciwgdGhlIGN1cnJlbnQgeWVhciBpcyB7Q0FMRU5EQVJfWUVBUn0iLGRhdGVwaWNrZXJTZWxlY3RlZExhYmVsOiJ7RlVMTF9EQVRFfSAtIFNlbGVjdGVk'@;
put 'IixzdGFja1ZpZXdDaGFuZ2VkOiJWYWx1ZSBjaGFuZ2VkLiIscmVzcG9uc2l2ZU5hdlRvZ2dsZU9wZW46Ik9wZW4gbmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6IkNsb3NlIG5hdmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjoiT3BlbiBu'@;
put 'YXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHJlc3BvbnNpdmVOYXZPdmVyZmxvd0Nsb3NlOiJDbG9zZSBuYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHZlcnRpY2FsTmF2VG9nZ2xlOiJUb2dnbGUgdmVydGljYWwgbmF2aWdhdGlvbiIsdGltZWxpbmVTdGVwTm90U3RhcnRlZDoiTm90IHN0YXJ0'@;
put 'ZWQiLHRpbWVsaW5lU3RlcEN1cnJlbnQ6IkN1cnJlbnQiLHRpbWVsaW5lU3RlcFN1Y2Nlc3M6IkNvbXBsZXRlZCIsdGltZWxpbmVTdGVwRXJyb3I6IkVycm9yIix0aW1lbGluZVN0ZXBQcm9jZXNzaW5nOiJJbiBwcm9ncmVzcyIsY29tYm9ib3hEZWxldGU6IkRlbGV0ZSBzZWxlY3RlZCBvcHRp'@;
put 'b24iLGNvbWJvYm94U2VhcmNoaW5nOidTZWFyY2hpbmcgZm9yIG1hdGNoZXMgZm9yICJ7SU5QVVR9IicsY29tYm9ib3hTZWxlY3Rpb246IlNlbGVjdGlvbiIsY29tYm9ib3hTZWxlY3RlZDoiU2VsZWN0ZWQiLGNvbWJvYm94Tm9SZXN1bHRzOiJObyByZXN1bHRzIixjb21ib2JveE9wZW46IlNo'@;
put 'b3cgb3B0aW9ucyIsZGF0YWdyaWRFeHBhbmRhYmxlQmVnaW5uaW5nT2Y6IkJlZ2lubmluZyBvZiIsZGF0YWdyaWRFeHBhbmRhYmxlRW5kT2Y6IkVuZCBvZiIsZGF0YWdyaWRFeHBhbmRhYmxlUm93Q29udGVudDoiRXhwYW5kYWJsZSByb3cgY29udGVudCIsZGF0YWdyaWRFeHBhbmRhYmxlUm93'@;
put 'c0hlbHBlclRleHQ6IlNjcmVlbiByZWFkZXIgdGFibGUgY29tbWFuZHMgbWF5IG5vdCB3b3JrIGZvciB2aWV3aW5nIGV4cGFuZGVkIGNvbnRlbnQsIHBsZWFzZSB1c2UgeW91ciBzY3JlZW4gcmVhZGVyJ3MgYnJvd3NlIG1vZGUgdG8gcmVhZCB0aGUgY29udGVudCBleHBvc2VkIGJ5IHRoaXMg'@;
put 'YnV0dG9uIix3aXphcmRTdGVwOiJTdGVwIix3aXphcmRTdGVwU3VjY2VzczoiQ29tcGxldGVkIix3aXphcmRTdGVwRXJyb3I6IkVycm9yIix3aXphcmRTdGVwbmF2QXJpYUxhYmVsOiJXaXphcmQgc3RlcHMiLHBhc3N3b3JkSGlkZToiSGlkZSBwYXNzd29yZCBmb3Ige0xBQkVMfSIscGFzc3dv'@;
put 'cmRTaG93OiJTaG93IHBhc3N3b3JkIGZvciB7TEFCRUx9IixzZWxlY3RlZFJvd3M6IlNlbGVjdGVkIHJvd3MiLHN0ZXBDb21wbGV0ZToiU3RlcCB7U1RFUH0gY29tcGxldGUiLHN0ZXBFcnJvcjoiRXJyb3IgaW4gc3RlcCB7U1RFUH0iLGJyb3dzZToiQnJvd3NlIixmaWxlQ291bnQ6IntDT1VO'@;
put 'VH0gZmlsZXMiLGNsZWFyRmlsZToiQ2xlYXIge0ZJTEV9IixjbGVhckZpbGVzOiJDbGVhciB7Q09VTlR9IGZpbGVzIixzZWxlY3RlZFRyZWVOb2RlOiJzZWxlY3RlZCIsdW5zZWxlY3RlZFRyZWVOb2RlOiJ1bnNlbGVjdGVkIixicmVhZGNydW1ic0xhYmVsOiJicmVhZGNydW1icyIsZXhwYW5k'@;
put 'QnJlYWRjcnVtYnNMYWJlbDoiRXhwYW5kIGJyZWFkY3J1bWJzIn0pO2xldCBucz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fc3RyaW5ncz1UWX1nZXQga2V5cygpe3JldHVybiB0aGlzLl9zdHJpbmdzfWxvY2FsaXplKGEpe3RoaXMuX3N0cmluZ3M9ey4uLnRoaXMuX3N0cmlu'@;
put 'Z3MsLi4uYX19cGFyc2UoYSxkPXt9KXtjb25zdCBoPU9iamVjdC5rZXlzKGQpO2xldCBmPWE7cmV0dXJuIGgubGVuZ3RoJiZoLmZvckVhY2godj0+e2Y9Zi5yZXBsYWNlKGB7JHt2fX1gLGRbdl0pfSksZn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9'@;
put 'LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCk7dmFyIEtmPWZ1bmN0aW9uKGMpe3JldHVybiBjLkluYWN0aXZlPSJpbmFjdGl2ZSIsYy5FcnJvcj0iZXJyb3IiLGMuQ29tcGxldGU9ImNvbXBsZXRlIixjfShLZnx8'@;
put 'e30pLER4PWZ1bmN0aW9uKGMpe3JldHVybiBjLkRlZmF1bHQ9ImRlZmF1bHQiLGMuTXVsdGk9Im11bHRpIixjfShEeHx8e30pO2xldCBJemU9MDtjbGFzcyBSemV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmlkPWwsdGhpcy5hY2NvcmRpb25JZD1hLHRoaXMuc3RhdHVzPUtmLkluYWN0aXZlLHRo'@;
put 'aXMuaW5kZXg9bnVsbCx0aGlzLmRpc2FibGVkPSExLHRoaXMub3Blbj0hMSx0aGlzLnRlbXBsYXRlSWQ9YCR7dGhpcy5pZH0tJHt0aGlzLmFjY29yZGlvbklkfWB9fWNsYXNzIEMxZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc3RyYXRlZ3k9RHguRGVmYXVsdCx0aGlzLmFjY29yZGlvbkNvdW50PUl6'@;
put 'ZSsrLHRoaXMuX3BhbmVscz17fX1nZXQgcGFuZWxzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3BhbmVscykubWFwKGw9PnRoaXMuX3BhbmVsc1tsXSl9c2V0U3RyYXRlZ3kobCl7dGhpcy5zdHJhdGVneT1sfXVwZGF0ZVBhbmVsT3JkZXIobCl7bC5mb3JFYWNoKChhLGQpPT50aGlzLl9w'@;
put 'YW5lbHNbYV0uaW5kZXg9ZCksdGhpcy5yZW1vdmVPbGRQYW5lbHMobCl9YWRkUGFuZWwobCxhPSExKXt0aGlzLl9wYW5lbHNbbF09bmV3IFJ6ZShsLHRoaXMuYWNjb3JkaW9uQ291bnQpLHRoaXMuX3BhbmVsc1tsXS5vcGVuPWF9dG9nZ2xlUGFuZWwobCxhKXtjb25zdCBoPXZvaWQgMCE9PWE/'@;
put 'YTohdGhpcy5fcGFuZWxzW2xdLm9wZW47aCYmdGhpcy5zdHJhdGVneT09PUR4LkRlZmF1bHQmJnRoaXMuY2xvc2VBbGxQYW5lbHMoKSx0aGlzLl9wYW5lbHNbbF0ub3Blbj1ofWRpc2FibGVQYW5lbChsLGEpe3RoaXMuX3BhbmVsc1tsXS5kaXNhYmxlZD1hfWNsb3NlQWxsUGFuZWxzKCl7dGhp'@;
put 'cy5wYW5lbHMuZm9yRWFjaChsPT50aGlzLl9wYW5lbHNbbC5pZF0ub3Blbj0hMSl9cmVtb3ZlT2xkUGFuZWxzKGwpe3RoaXMucGFuZWxzLmZpbHRlcihhPT52b2lkIDA9PT1sLmZpbmQoZD0+ZD09PWEuaWQpKS5mb3JFYWNoKGE9PmRlbGV0ZSB0aGlzLl9wYW5lbHNbYS5pZF0pfX1sZXQgSXg9'@;
put 'KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWNjb3JkaW9uPW5ldyBDMWUsdGhpcy5fcGFuZWxzQ2hhbmdlcz1uZXcgZWkodGhpcy5hY2NvcmRpb24ucGFuZWxzKX1nZXRQYW5lbENoYW5nZXMoYSl7cmV0dXJuIHRoaXMuX3BhbmVsc0NoYW5nZXMucGlwZShMcihkPT5kLmZpbmQo'@;
put 'aD0+aC5pZD09PWEpKSl9c2V0U3RyYXRlZ3koYSl7dGhpcy5hY2NvcmRpb24uc2V0U3RyYXRlZ3koYSl9YWRkUGFuZWwoYSxkPSExKXt0aGlzLmFjY29yZGlvbi5hZGRQYW5lbChhLGQpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX10b2dnbGVQYW5lbChhLGQpe3RoaXMuYWNjb3JkaW9uLnRv'@;
put 'Z2dsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfWRpc2FibGVQYW5lbChhLGQpe3RoaXMuYWNjb3JkaW9uLmRpc2FibGVQYW5lbChhLGQpLHRoaXMuZW1pdFVwZGF0ZWRQYW5lbHMoKX11cGRhdGVQYW5lbE9yZGVyKGEpe3RoaXMuYWNjb3JkaW9uLnVwZGF0ZVBhbmVsT3Jk'@;
put 'ZXIoYSksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfWVtaXRVcGRhdGVkUGFuZWxzKCl7dGhpcy5fcGFuZWxzQ2hhbmdlcy5uZXh0KHRoaXMuYWNjb3JkaW9uLnBhbmVscyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9b24o'@;
put 'e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFBMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnBhcmVudD1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuYWNjb3JkaW9uU2VydmljZT1oLHRoaXMuaWZFeHBhbmRTZXJ2aWNlPWYsdGhpcy5j'@;
put 'ZHI9dix0aGlzLmRpc2FibGVkPSExLHRoaXMucGFuZWxPcGVuPSExLHRoaXMuaGVhZGluZ0VuYWJsZWQ9ITEsdGhpcy5wYW5lbE9wZW5DaGFuZ2U9bmV3IFhyLHRoaXMuX2lkPVN1KCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hfWdldCBwYW5lbE51bWJl'@;
put 'cigpe3JldHVybiB0aGlzLl9wYW5lbEluZGV4KzF9Z2V0IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmV4cGxpY2l0SGVhZGluZ0xldmVsP3RoaXMuZXhwbGljaXRIZWFkaW5nTGV2ZWw6dGhpcy5wYXJlbnQ/NDozfW5nT25Jbml0KCl7dGhpcy5wYW5lbD10aGlzLmFjY29yZGlvblNlcnZp'@;
put 'Y2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQpLnBpcGUoV3UoYT0+dGhpcy5lbWl0UGFuZWxDaGFuZ2UoYSkpKSx0aGlzLmFjY29yZGlvblNlcnZpY2UuYWRkUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsdGhp'@;
put 'cy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9uU2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCx0aGlzLmRpc2FibGVkKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLnBhbmVsJiZhLnBhbmVsT3BlbiYmYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlIT09YS5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSYm'@;
put 'dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlKSx0aGlzLnBhbmVsJiZhLmRpc2FibGVkJiZhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSE9PWEuZGlzYWJsZWQucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNl'@;
put 'LmRpc2FibGVQYW5lbCh0aGlzLmlkLGEuZGlzYWJsZWQuY3VycmVudFZhbHVlKX10b2dnbGVQYW5lbCgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkKX1jb2xsYXBzZVBhbmVsT25BbmltYXRpb25Eb25lKGEpe2Eub3Blbnx8KHRoaXMuaWZFeHBhbmRTZXJ2aWNl'@;
put 'LmV4cGFuZGVkPSExKX1nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1wYW5lbC0ke2Euc3RhdHVzfSAke2Eub3Blbj8iY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIjoiIn1gfWdldEFjY29yZGlvbkNvbnRlbnRJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1j'@;
put 'b250ZW50LSR7YX0nYH1nZXRBY2NvcmRpb25IZWFkZXJJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1oZWFkZXItJHthfWB9c3RlcENvbXBsZXRlVGV4dChhKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN0ZXBDb21wbGV0ZSx7U1RF'@;
put 'UDphLnRvU3RyaW5nKCl9KX1zdGVwRXJyb3JUZXh0KGEpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3RlcEVycm9yLHtTVEVQOmEudG9TdHJpbmcoKX0pfWVtaXRQYW5lbENoYW5nZShhKXthLmluZGV4IT09dGhpcy5fcGFuZWxJbmRl'@;
put 'eCYmKHRoaXMuX3BhbmVsSW5kZXg9YS5pbmRleCx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpLGEub3BlbiE9PXRoaXMucGFuZWxPcGVuJiYodGhpcy5wYW5lbE9wZW5DaGFuZ2UuZW1pdChhLm9wZW4pLHRoaXMucGFuZWxPcGVuPWEub3BlbiksYS5vcGVuJiYodGhpcy5pZkV4cGFuZFNlcnZp'@;
put 'Y2UuZXhwYW5kZWQ9ITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShjLDEyKSxHZShucyksR2UoSXgpLEdlKFoxKSxHZSh4cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBhbmVsIl1dLGNv'@;
put 'bnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgsdzFlLDQpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQuYWNjb3JkaW9uRGVzY3JpcHRpb249Zil9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1hY2NvcmRpb24tcGFu'@;
put 'ZWwiLCEwKSgiY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZCIsZC5kaXNhYmxlZCl9LGlucHV0czp7ZGlzYWJsZWQ6W2puLk5vbmUsImNsckFjY29yZGlvblBhbmVsRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHBhbmVsT3Blbjpbam4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxPcGVuIiwicGFu'@;
put 'ZWxPcGVuIl0saGVhZGluZ0VuYWJsZWQ6W2puLk5vbmUsImNsckFjY29yZGlvblBhbmVsSGVhZGluZ0VuYWJsZWQiLCJoZWFkaW5nRW5hYmxlZCJdLGV4cGxpY2l0SGVhZGluZ0xldmVsOltqbi5Ob25lLCJjbHJBY2NvcmRpb25QYW5lbEhlYWRpbmdMZXZlbCIsImV4cGxpY2l0SGVhZGluZ0xl'@;
put 'dmVsIl19LG91dHB1dHM6e3BhbmVsT3BlbkNoYW5nZToiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIn0sZmVhdHVyZXM6W2ZvKFtaMV0pLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6R0ZlLGRlY2xzOjIsdmFyczozLGNvbnN0czpbWyJoZWFkZXJCdXR0b24iLCIiXSxbNCwibmdJZiJdLFsz'@;
put 'LCJuZ0NsYXNzIl0sWzEsImNsci1hY2NvcmRpb24taGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24iLDMsImNsaWNrIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItYWNjb3JkaW9uLXN0YXR1cyJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVj'@;
put 'dGlvbiIsInJpZ2h0IiwxLCJjbHItYWNjb3JkaW9uLWFuZ2xlIl0sWyJyb2xlIiwicmVnaW9uIiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uIiwzLCJpZCJdLFsiY2xhc3MiLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwiY2xyLWFjY29yZGlvbi1jb250ZW50'@;
put 'Il0sWzEsImNsci1hY2NvcmRpb24taW5uZXItY29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKFlGZSksbXQoMCxLRmUsMTIsMTYsIm5nLWNvbnRhaW5lciIsMSksUXMoMSwiYXN5bmMiKSksMiZhJiZ4ZSgibmdJZiIsRGMoMSwxLGQucGFuZWwpKX0sZGVwZW5kZW5j'@;
put 'aWVzOlt3dSx5byx1cyxFTV0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpremV9LGNoYW5nZURldGVjdGlvbjowfSksY30pKCksUzFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5tdWx0aVBhbmVsPSExLHRoaXMuc3Vi'@;
put 'c2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3RoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ0FmdGVyVmlld0lu'@;
put 'aXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnNl'@;
put 'dFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD9EeC5NdWx0aTpEeC5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZSh4Mih0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlvblNlcnZpY2UudXBkYXRlUGFuZWxP'@;
put 'cmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5pZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSXgpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlv'@;
put 'bihhLGQsaCl7aWYoMSZhJiZsYShoLFBMLDQpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVsdGlQYW5lbDpbam4uTm9uZSwiY2xy'@;
put 'QWNjb3JkaW9uTXVsdGlQYW5lbCIsIm11bHRpUGFuZWwiXX0sZmVhdHVyZXM6W2ZvKFtJeF0pLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVj'@;
put 'dGlvbjowfSksY30pKCksTTFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbImNsci1zdGVwLWNvbnRlbnQiXV0s'@;
put 'bmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLHgxZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi10aXRsZSJdLFsiY2xyLXN0ZXAtdGl0bGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItYWNjb3JkaW9uLXRp'@;
put 'dGxlIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxJeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhp'@;
put 'cy5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEsdGhpcy5fY2hvY29sYXRlPW5ldyBXbn1nZXQgY2hvY29sYXRlKCl7cmV0dXJuIHRoaXMuX2Nob2NvbGF0ZS5hc09ic2VydmFibGUoKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLmRpc2FibGVDaG9jb2xhdGVDaGVja3x8dGhpcy5fY2hvY29s'@;
put 'YXRlLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxSeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zdWJzY3JpcHRpb249ZC5jaG9jb2xhdGUuc3Vic2NyaWJl'@;
put 'KCgpPT57dGhpcy5sYXRlc3RGbGF2b3IhPT10aGlzLmZsYXZvciYmKGQuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSEwLGEuZGV0ZWN0Q2hhbmdlcygpLGQuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSExKX0pfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMubGF0ZXN0Rmxhdm9yPXRoaXMuZmxh'@;
put 'dm9yfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoeHMpLEdlKEl5KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxBWT0oKCk9PntjbGFzcyBjIGV4'@;
put 'dGVuZHMgSXl7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGZlYXR1cmVzOltDb119KSxjfSko'@;
put 'KSxFMWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ5e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1hY2NvcmRpb24tcGFuZWwgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgY2xyLWFjY29yZGlvbiIpO3N1cGVyKGEsZCksdGhpcy5leHBhbmQ9aH1n'@;
put 'ZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuZXhwYW5kLmV4cGFuZGVkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh4cyksR2UoQVksOCksR2UoWjEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1w'@;
put 'YW5lbCJdXSxmZWF0dXJlczpbQ29dfSksY30pKCksVDFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyh4eSxiaCx5aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAy'@;
put 'NzVpbmo9QXIoe2ltcG9ydHM6W0xvLFRzXX0pLGN9KSgpLEh6ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxUcyxUMWUsVDFl'@;
put 'XX0pLGN9KSgpO3ZhciBRaT1mdW5jdGlvbihjKXtyZXR1cm4gYy5BcnJvd0xlZnQ9IkFycm93TGVmdCIsYy5BcnJvd1VwPSJBcnJvd1VwIixjLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLGMuQXJyb3dEb3duPSJBcnJvd0Rvd24iLGMuQmFja3NwYWNlPSJCYWNrc3BhY2UiLGMuVGFiPSJUYWIi'@;
put 'LGMuRW50ZXI9IkVudGVyIixjLkVzY2FwZT0iRXNjYXBlIixjLlNwYWNlPSJTcGFjZSIsYy5TcGFjZWJhcj0iICIsYy5Ib21lPSJIb21lIixjLkVuZD0iRW5kIixjLlBhZ2VEb3duPSJQYWdlRG93biIsYy5QYWdlVXA9IlBhZ2VVcCIsY30oUWl8fHt9KSx1Nz1mdW5jdGlvbihjKXtyZXR1cm4g'@;
put 'Yy5BcnJvd1VwPSJVcCIsYy5BcnJvd0Rvd249IkRvd24iLGMuQXJyb3dSaWdodD0iUmlnaHQiLGMuQXJyb3dMZWZ0PSJMZWZ0IixjLlNwYWNlPSJTcGFjZWJhciIsYy5Fc2NhcGU9IkVzYyIsY30odTd8fHt9KTtmdW5jdGlvbiBBMihjKXtyZXR1cm4gYz09PVFpLkFycm93VXB8fGM9PT11Ny5B'@;
put 'cnJvd1VwP1FpLkFycm93VXA6Yz09PVFpLkFycm93RG93bnx8Yz09PXU3LkFycm93RG93bj9RaS5BcnJvd0Rvd246Yz09PVFpLkFycm93UmlnaHR8fGM9PT11Ny5BcnJvd1JpZ2h0P1FpLkFycm93UmlnaHQ6Yz09PVFpLkFycm93TGVmdHx8Yz09PXU3LkFycm93TGVmdD9RaS5BcnJvd0xlZnQ6'@;
put 'Yz09PVFpLlNwYWNlfHxjPT09dTcuU3BhY2U/UWkuU3BhY2U6Yz09PVFpLkVzY2FwZXx8Yz09PXU3LkVzY2FwZT9RaS5Fc2NhcGU6Y31mdW5jdGlvbiBEWShjKXtjb25zdCBsPUEyKGMua2V5KTsobD09PVFpLkFycm93VXB8fGw9PT1RaS5BcnJvd0Rvd258fGw9PT1RaS5BcnJvd0xlZnR8fGw9'@;
put 'PT1RaS5BcnJvd1JpZ2h0KSYmYy5wcmV2ZW50RGVmYXVsdCgpfWxldCBzYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fb3Blbj0hMSx0aGlzLl9vcGVuQ2hhbmdlPW5ldyBXbix0aGlzLl9vcGVuRXZlbnRDaGFuZ2U9bmV3IFduLHRoaXMuX3BvcG92ZXJBbGlnbmVkPW5ldyBX'@;
put 'bix0aGlzLl9wb3BvdmVyVmlzaWJsZT1uZXcgV259Z2V0IG9wZW5DaGFuZ2UoKXtyZXR1cm4gdGhpcy5fb3BlbkNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgcG9wb3ZlclZpc2libGUoKXtyZXR1cm4gdGhpcy5fcG9wb3ZlclZpc2libGUuYXNPYnNlcnZhYmxlKCl9Z2V0IG9wZW5FdmVudCgp'@;
put 'e3JldHVybiB0aGlzLl9vcGVuRXZlbnR9c2V0IG9wZW5FdmVudChhKXt0aGlzLl9vcGVuRXZlbnQ9YSx0aGlzLl9vcGVuRXZlbnRDaGFuZ2UubmV4dChhKX1nZXQgb3Blbigpe3JldHVybiB0aGlzLl9vcGVufXNldCBvcGVuKGEpe3RoaXMuX29wZW4hPT0oYT0hIWEpJiYodGhpcy5fb3Blbj1h'@;
put 'LHRoaXMuX29wZW5DaGFuZ2UubmV4dChhKSl9Z2V0IG9yaWdpbmFsRXZlbnQoKXtyZXR1cm4gdGhpcy5fb3BlbkV2ZW50fWdldCBwb3BvdmVyQWxpZ25lZCgpe3JldHVybiB0aGlzLl9wb3BvdmVyQWxpZ25lZC5hc09ic2VydmFibGUoKX1nZXRFdmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9v'@;
put 'cGVuRXZlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlV2l0aEV2ZW50KGEpe0RZKGEpLHRoaXMub3BlbkV2ZW50PWEsdGhpcy5vcGVuPSF0aGlzLm9wZW59cG9wb3ZlclZpc2libGVFbWl0KGEpe3RoaXMuX3BvcG92ZXJWaXNpYmxlLm5leHQoYSl9cG9wb3ZlckFsaWduZWRFbWl0KGEp'@;
put 'e3RoaXMuX3BvcG92ZXJBbGlnbmVkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEx4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxk'@;
put 'LGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLnNtYXJ0T3BlblNlcnZpY2U9ZCx0aGlzLmRvY3VtZW50PWgsdGhpcy5vdXRzaWRlQ2xpY2tDbG9zZT0hMCx0aGlzLnNjcm9sbFRvQ2xvc2U9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5n'@;
put 'ZS5zdWJzY3JpYmUoZj0+e2Y/KHRoaXMuYWRkRXNjYXBlTGlzdGVuZXIoKSx0aGlzLmFkZENsaWNrTGlzdGVuZXIoKSx0aGlzLmFkZFNjcm9sbExpc3RlbmVyKCkpOnRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX0pLGQuZ2V0RXZlbnRDaGFuZ2UoKS5zdWJzY3JpYmUoZj0+e3RoaXMu'@;
put 'aWdub3JlZEV2ZW50PWZ9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMucmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKX1hZGRTY3JvbGxMaXN0ZW5lcigpe3RoaXMuc2Nyb2xsVG9DbG9zZSYmKHRoaXMuZG9jdW1lbnRT'@;
put 'Y3JvbGxlcj14ZCh0aGlzLmRvY3VtZW50LCJzY3JvbGwiLHtjYXB0dXJlOiEwfSksdGhpcy5zY3JvbGxTdWJzY3JpcHRpb249dGhpcy5kb2N1bWVudFNjcm9sbGVyLnBpcGUoR2wodGhpcy50ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcikpLnN1YnNjcmliZSgoKT0+e3RoaXMu'@;
put 'c21hcnRPcGVuU2VydmljZS5vcGVuPSExLHRoaXMuc2V0QW5jaG9yRm9jdXMoKX0pKX1yZW1vdmVTY3JvbGxMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRTY3JvbGxlciYmKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksZGVsZXRlIHRoaXMuZG9jdW1lbnRTY3JvbGxlcil9'@;
put 'YWRkQ2xpY2tMaXN0ZW5lcigpe3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJjbGljayIsYT0+e2E9PT10aGlzLmlnbm9yZWRFdmVudD9kZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQ6'@;
put 'KHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSExLGEudGFyZ2V0LmZvY3VzKCkpfSkpfXJlbW92ZUNsaWNrTGlzdGVuZXIoKXt0aGlzLm91dHNpZGVDbGlja0Nsb3NlJiYoZGVsZXRlIHRoaXMuaWdub3JlZEV2ZW50LHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyJiYodGhpcy5kb2N1bWVu'@;
put 'dENsaWNrTGlzdGVuZXIoKSxkZWxldGUgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIpKX1hZGRFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5kb2N1bWVudCwia2V5ZG93bi5lc2NhcGUiLCgpPT57dGhpcy5zbWFydE9wZW5T'@;
put 'ZXJ2aWNlLm9wZW49ITEsdGhpcy5zZXRBbmNob3JGb2N1cygpfSl9cmVtb3ZlRXNjYXBlTGlzdGVuZXIoKXt0aGlzLmVzY2FwZUxpc3RlbmVyJiYodGhpcy5lc2NhcGVMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmVzY2FwZUxpc3RlbmVyKX1zZXRDbG9zZUZvY3VzKCl7dGhpcy5jbG9zZUJ1dHRv'@;
put 'blJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9c2V0QW5jaG9yRm9jdXMoKXt0aGlzLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9dGVzdEZvclNtYXJ0UG9wb3ZlckNvbnRlbnRDb250YWluZXIoYSl7bGV0IGQ9YS50YXJnZXQ7Zm9yKDtkLmNsYXNzTGlzdCYmImJvZHki'@;
put 'IT09ZC5wYXJlbnRFbGVtZW50LmxvY2FsTmFtZTspZD1kLnBhcmVudEVsZW1lbnQ7cmV0dXJuISFkLmNsYXNzTGlzdCYmIWQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjbHItcG9wb3Zlci1jb250ZW50Iil9cmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKXt0aGlzLnJlbW92ZVNjcm9sbExpc3RlbmVy'@;
put 'KCksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyKCksdGhpcy5yZW1vdmVFc2NhcGVMaXN0ZW5lcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihFYSkseHIoc2MpLHhyKHZzKSl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMu'@;
put 'XHUwMjc1ZmFjfSksY30pKCksT3g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe2EuYW5jaG9yQnV0dG9uUmVmPWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEx4KSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVj'@;
put 'dG9yczpbWyIiLCJjbHJQb3BvdmVyQW5jaG9yIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWFuY2hvciIsITApfX0pLGN9KSgpLEQxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlz'@;
put 'LnNtYXJ0RXZlbnRzU2VydmljZT1kLHRoaXMuc21hcnRPcGVuU2VydmljZT1oLHRoaXMuY2xvc2VDaGFuZ2U9bmV3IFhyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLm9wZW5DaGFuZ2UucGlwZShHbChmPT4hZikpLnN1YnNjcmliZSgoKT0+e3RoaXMu'@;
put 'Y2xvc2VDaGFuZ2UubmV4dCgpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSksdGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0QW5jaG9yRm9jdXMoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jbG9z'@;
put 'ZUJ1dHRvblJlZj10aGlzLmVsZW1lbnRSZWYsdGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2V0Q2xvc2VGb2N1cygpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykoR2UoSmkpLEdlKEx4KSxHZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24o'@;
put 'Zil7cmV0dXJuIGQuaGFuZGxlQ2xpY2soZil9KSwyJmEmJlRyKCJjbHItc21hcnQtY2xvc2UtYnV0dG9uIiwhMCl9LG91dHB1dHM6e2Nsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT25DbG9zZUNoYW5nZSJ9fSksY30pKCk7dmFyIGgxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVkVSVElDQUw9MF09'@;
put 'IlZFUlRJQ0FMIixjW2MuSE9SSVpPTlRBTD0xXT0iSE9SSVpPTlRBTCIsY30oaDF8fHt9KSxPcz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlNUQVJUPTBdPSJTVEFSVCIsY1tjLkNFTlRFUj0uNV09IkNFTlRFUiIsY1tjLkVORD0xXT0iRU5EIixjfShPc3x8e30pLFB4PWZ1bmN0aW9uKGMpe3Jl'@;
put 'dHVybiBjW2MuQk9UVE9NPTBdPSJCT1RUT00iLGNbYy5MRUZUPTFdPSJMRUZUIixjW2MuUklHSFQ9Ml09IlJJR0hUIixjW2MuVE9QPTNdPSJUT1AiLGN9KFB4fHx7fSk7Y29uc3QgZ209Yz0+KHsuLi5jLHNpZGU6LTEqYy5zaWRlfSksb2c9KGMsbCk9Pntjb25zdCBhPWMuY29udGVudCsobD8u'@;
put 'NTotLjUpO3JldHVybiBhPDB8fGE+MT9jOnsuLi5jLGNvbnRlbnQ6YX19O2Z1bmN0aW9uIEx5KGMsbCxhKXtyZXR1cm4gZD0+bChjKGQpLGEpfWZ1bmN0aW9uIHdoKGMsbCxhKXtsZXQgZD1sLmxlZnQsaD1sLnRvcDtzd2l0Y2goYy5heGlzK2Muc2lkZSl7Y2FzZS0xOmQrPUkxZShjLGwsYSks'@;
put 'aC09YS5oZWlnaHQ7YnJlYWs7Y2FzZSAxOmQrPUkxZShjLGwsYSksaCs9bC5oZWlnaHQ7YnJlYWs7Y2FzZSAwOmQtPWEud2lkdGgsaCs9UjFlKGMsbCxhKTticmVhaztjYXNlIDI6ZCs9bC53aWR0aCxoKz1SMWUoYyxsLGEpfXJldHVybnt4T2Zmc2V0OmQseU9mZnNldDpofX1mdW5jdGlvbiBJ'@;
put 'MWUoYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIE9zLlNUQVJUOmJyZWFrO2Nhc2UgT3MuQ0VOVEVSOmQrPWwud2lkdGgvMjticmVhaztjYXNlIE9zLkVORDpkKz1sLndpZHRofXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgT3MuU1RBUlQ6YnJlYWs7Y2FzZSBPcy5DRU5URVI6'@;
put 'ZC09YS53aWR0aC8yO2JyZWFrO2Nhc2UgT3MuRU5EOmQtPWEud2lkdGh9cmV0dXJuIGR9ZnVuY3Rpb24gUjFlKGMsbCxhKXtsZXQgZD0wO3N3aXRjaChjLmFuY2hvcil7Y2FzZSBPcy5TVEFSVDpicmVhaztjYXNlIE9zLkNFTlRFUjpkKz1sLmhlaWdodC8yO2JyZWFrO2Nhc2UgT3MuRU5EOmQr'@;
put 'PWwuaGVpZ2h0fXN3aXRjaChjLmNvbnRlbnQpe2Nhc2UgT3MuU1RBUlQ6YnJlYWs7Y2FzZSBPcy5DRU5URVI6ZC09YS5oZWlnaHQvMjticmVhaztjYXNlIE9zLkVORDpkLT1hLmhlaWdodH1yZXR1cm4gZH1sZXQgTDFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmV2ZW50'@;
put 'U2VydmljZT1hLHRoaXMucGxhdGZvcm1JZD1kLHRoaXMuX3Nob3VsZFJlYWxpZ249bmV3IFduLHRoaXMuc2hvdWxkUmVhbGlnbj10aGlzLl9zaG91bGRSZWFsaWduLmFzT2JzZXJ2YWJsZSgpfXJlYWxpZ24oKXt0aGlzLl9zaG91bGRSZWFsaWduLm5leHQoKX1hbGlnbkNvbnRlbnQoYSl7aWYo'@;
put 'IWVsKHRoaXMucGxhdGZvcm1JZCkpcmV0dXJue3hPZmZzZXQ6MCx5T2Zmc2V0OjB9O3RoaXMuY3VycmVudEFuY2hvckNvb3Jkcz10aGlzLmV2ZW50U2VydmljZS5hbmNob3JCdXR0b25SZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmN1cnJlbnRDb250ZW50'@;
put 'Q29vcmRzPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdGhpcy5jb250ZW50T2Zmc2V0cz13aCh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTtjb25zdCBkPWZ1bmN0aW9uIFZ6ZShjLGwpe2NvbnN0IGE9W10sZF9ib3R0'@;
put 'b209Yy55T2Zmc2V0K2wuaGVpZ2h0LGRfbGVmdD1jLnhPZmZzZXQsZF9yaWdodD1jLnhPZmZzZXQrbC53aWR0aDtyZXR1cm4gYy55T2Zmc2V0Pj0wfHxhLnB1c2goUHguVE9QKSxkX2xlZnQ+PTB8fGEucHVzaChQeC5MRUZUKSxkX2JvdHRvbTw9KHdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1l'@;
put 'bnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl8fGEucHVzaChQeC5CT1RUT00pLGRfcmlnaHQ8PSh3aW5kb3cuaW5uZXJXaWR0aHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKXx8YS5wdXNoKFB4LlJJR0hUKSxhfSh0aGlzLmNvbnRlbnRPZmZzZXRzLHRoaXMu'@;
put 'Y3VycmVudENvbnRlbnRDb29yZHMpLGg9ZC5yZWR1Y2UoKGYsdik9PmYrdiwwKTtyZXR1cm4gMT09PWQubGVuZ3RoJiZ0aGlzLnBvc2l0aW9uLmF4aXM9PT1oMS5WRVJUSUNBTD90aGlzLmhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihoKToxPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRp'@;
put 'b24uYXhpcz09PWgxLkhPUklaT05UQUw/dGhpcy5oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihoKToyPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWgxLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlzVHdvVmlvbGF0aW9ucyhoKToyPT09ZC5sZW5ndGgm'@;
put 'JnRoaXMucG9zaXRpb24uYXhpcz09PWgxLkhPUklaT05UQUwmJnRoaXMuaGFuZGxlSG9yaXpvbnRhbEF4aXNUd29WaW9sYXRpb25zKGgpLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wPDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQrPU1hdGguYWJzKHRoaXMuY3VycmVudENv'@;
put 'bnRlbnRDb29yZHMudG9wKSksdGhpcy5jb250ZW50T2Zmc2V0cy55T2Zmc2V0K3RoaXMuY3VycmVudEFuY2hvckNvb3Jkcy55PDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQ9MC10aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzLnRvcCksdGhpcy5jb250ZW50T2Zmc2V0c31oYW5kbGVW'@;
put 'ZXJ0aWNhbEF4aXNPbmVWaW9sYXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMDpjYXNlIDM6dGhpcy5jb250ZW50T2Zmc2V0cz13aChnbSh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAxOnRoaXMuY29u'@;
put 'dGVudE9mZnNldHM9d2godGhpcy5wb3NpdGlvbix0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3JkcyksdGhpcy5jb250ZW50T2Zmc2V0cy54T2Zmc2V0PDAmJih0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ9MTApO2JyZWFrO2Nhc2UgMjp0aGlzLmNv'@;
put 'bnRlbnRPZmZzZXRzPXdoKG9nKHRoaXMucG9zaXRpb24sITApLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKX19aGFuZGxlVmVydGljYWxBeGlzVHdvVmlvbGF0aW9ucyhhKXtzd2l0Y2goYSl7Y2FzZSA1Ontjb25zdCBkPUx5KGdtLG9nLCEwKTt0'@;
put 'aGlzLmNvbnRlbnRPZmZzZXRzPXdoKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgNDp7Y29uc3QgZD1MeShnbSxvZywhMSk7dGhpcy5jb250ZW50T2Zmc2V0cz13aChkKHRoaXMucG9zaXRpb24p'@;
put 'LHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDM6ZGVmYXVsdDpicmVhaztjYXNlIDI6e2NvbnN0IGQ9THkoZ20sb2csITApO3RoaXMuY29udGVudE9mZnNldHM9d2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNo'@;
put 'b3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAxOntjb25zdCBkPUx5KGdtLG9nLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPXdoKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2Jy'@;
put 'ZWFrfX19aGFuZGxlSG9yaXpvbnRhbEF4aXNPbmVWaW9sYXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDI6dGhpcy5jb250ZW50T2Zmc2V0cz13aChnbSh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7'@;
put 'Y2FzZSAwOnRoaXMuY29udGVudE9mZnNldHM9d2gob2codGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrO2Nhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPXdoKG9nKHRoaXMucG9zaXRpb24pLHRoaXMuY3Vy'@;
put 'cmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKX19aGFuZGxlSG9yaXpvbnRhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6Y2FzZSA0Ontjb25zdCBkPUx5KGdtLG9nLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPXdoKGQodGhpcy5wb3NpdGlv'@;
put 'biksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjpjYXNlIDE6e2NvbnN0IGQ9THkoZ20sb2csITApO3RoaXMuY29udGVudE9mZnNldHM9d2goZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1'@;
put 'cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoTHgpLHhyKG9hKSl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSks'@;
put 'Y30pKCksRng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmRvY3VtZW50PWEsdGhpcy5jb250YWluZXI9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2U9dix0aGlzLnNtYXJ0RXZlbnRzU2Vydmlj'@;
put 'ZT1NLHRoaXMuc21hcnRPcGVuU2VydmljZT1ELHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbj1udWxsLHRoaXMuc2hvdWxkUmVhbGlnbj0hMSx0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodD1udWxsLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IFhyfXNl'@;
put 'dCBvcGVuKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSEhYX1zZXQgY29udGVudEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFh'@;
put 'fXNldCBzY3JvbGxUb0Nsb3NlKGEpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLnNjcm9sbFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe2lmKHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0aGlzLnZpZXcpe2NvbnN0IGE9dGhpcy52aWV3LnJvb3ROb2Rlc1swXS5vZmZz'@;
put 'ZXRIZWlnaHQ7KHRoaXMuc2hvdWxkUmVhbGlnbnx8bnVsbCE9PXRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0JiZ0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodCE9PWEpJiYodGhpcy5wcmV2aW91c0NvbnRlbnRIZWlnaHQ9YSx0aGlzLmNoZWNrQ29sbGVjdG9yLmVtaXQoKSl9fW5nQWZ0ZXJW'@;
put 'aWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YT90aGlzLmFkZENvbnRlbnQoKTp0aGlzLnJlbW92ZUNvbnRlbnQoKX0pLHRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2Uuc2hvdWxkUmVhbGlnbi5z'@;
put 'dWJzY3JpYmUoKCk9Pnt0aGlzLnNob3VsZFJlYWxpZ249ITB9KSx0aGlzLmNoZWNrQ29sbGVjdG9yLnBpcGUoaG0oMCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuYWxpZ25Db250ZW50KCksdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMudmlldyYmKHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhp'@;
put 'cy52aWV3LnJvb3ROb2Rlc1swXSwib3BhY2l0eSIsIjEiKSx0aGlzLnNtYXJ0T3BlblNlcnZpY2UucG9wb3ZlclZpc2libGVFbWl0KCEwKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbW92ZUNvbnRlbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkp'@;
put 'fWFkZENvbnRlbnQoKXt0aGlzLnZpZXc9dGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUpO2NvbnN0W2FdPXRoaXMudmlldy5yb290Tm9kZXM7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2UuY29udGVudFJlZj1hLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoYSwi'@;
put 'Y2xyLXBvcG92ZXItY29udGVudCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYSwidG9wIiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJsZWZ0IiwiMHB4IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJvcGFjaXR5IiwiMCIpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZu'@;
put 'PXRoaXMucmVuZGVyZXIubGlzdGVuKGEsImNsaWNrIixkPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5FdmVudD1kfSksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGQ9Pnt0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxkKX0pLHRoaXMuc2hvdWxk'@;
put 'UmVhbGlnbj0hMH1yZW1vdmVDb250ZW50KCl7dGhpcy52aWV3JiYodGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm4mJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbigpLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwpLHRoaXMudmlldy5yb290Tm9kZXMuZm9yRWFjaChhPT50aGlz'@;
put 'LnJlbmRlcmVyLnJlbW92ZUNoaWxkKHRoaXMuZG9jdW1lbnQuYm9keSxhKSksdGhpcy5jb250YWluZXIuY2xlYXIoKSxkZWxldGUgdGhpcy52aWV3LHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyVmlzaWJsZUVtaXQoITEpKX1hbGlnbkNvbnRlbnQoKXtpZighdGhpcy52aWV3KXJldHVy'@;
put 'bjtjb25zdCBhPXRoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UuYWxpZ25Db250ZW50KHRoaXMudmlldy5yb290Tm9kZXNbMF0pO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwidG9wIixgJHthLnlPZmZzZXR9cHhgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxl'@;
put 'KHRoaXMudmlldy5yb290Tm9kZXNbMF0sImxlZnQiLGAke2EueE9mZnNldH1weGApLHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyQWxpZ25lZEVtaXQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdl'@;
put 'KHZzKSxHZShEYSksR2UoU2wpLEdlKEVhKSxHZShMMWUpLEdlKEx4KSxHZShzYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyQ29udGVudCIsIiJdXSxpbnB1dHM6e29wZW46W2puLk5vbmUsImNsclBvcG92ZXJDb250ZW50Iiwib3BlbiJdLGNv'@;
put 'bnRlbnRBdDpbam4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNvbnRlbnRBdCJdLG91dHNpZGVDbGlja0Nsb3NlOltqbi5Ob25lLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJvdXRzaWRlQ2xpY2tDbG9zZSJdLHNjcm9sbFRvQ2xvc2U6W2puLk5vbmUsImNs'@;
put 'clBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsInNjcm9sbFRvQ2xvc2UiXX19KSxjfSkoKSxIeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZT1hLHRoaXMub3BlbkNsb3NlQ2hhbmdlPW5ldyBYcix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhp'@;
put 'cy5zdWJzY3JpcHRpb25zLnB1c2goYS5vcGVuQ2hhbmdlLnN1YnNjcmliZShkPT57dGhpcy5vcGVuQ2xvc2VDaGFuZ2UubmV4dChkKX0pKX1oYW5kbGVDbGljayhhKXt0aGlzLnNtYXJ0T3BlblNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRp'@;
put 'b25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2MpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiJdXSxob3N0'@;
put 'VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVDbGljayhmKX0pLDImYSYmVHIoImNsci1zbWFydC1vcGVuLWNsb3NlIiwhMCl9LG91dHB1dHM6e29wZW5DbG9zZUNoYW5nZToiY2xyUG9wb3Zlck9wZW5D'@;
put 'bG9zZUNoYW5nZSJ9fSksY30pKCksTng9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7fSksY30pKCk7dmFyIENoPWZ1bmN0aW9uKGMpe3JldHVybiBj'@;
put 'LlVQPSJ1cCIsYy5ET1dOPSJkb3duIixjLkxFRlQ9ImxlZnQiLGMuUklHSFQ9InJpZ2h0IixjfShDaHx8e30pO2xldCB3cD1jbGFzc3tjb25zdHJ1Y3RvcihsKXt0aGlzLnJlbmRlcmVyPWwsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50'@;
put 'fXJlc2V0KGwpe3RoaXMuX2N1cnJlbnQ9bH1saXN0ZW5Ub0Fycm93S2V5cyhsKXt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5hcnJvd3VwIiwoKT0+IXRoaXMubW92ZShDaC5VUCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhp'@;
put 'cy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5hcnJvd2Rvd24iLCgpPT4hdGhpcy5tb3ZlKENoLkRPV04pKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uYXJyb3dsZWZ0IiwoKT0+IXRoaXMubW92ZShDaC5MRUZUKSkpLHRoaXMu'@;
put 'X3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93cmlnaHQiLCgpPT4hdGhpcy5tb3ZlKENoLlJJR0hUKSkpfXJlZ2lzdGVyQ29udGFpbmVyKGwsYT0iMCIpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGwsInRhYmluZGV4IixhKSx0aGlz'@;
put 'Lmxpc3RlblRvQXJyb3dLZXlzKGwpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLnNwYWNlIiwoKT0+IXRoaXMuYWN0aXZhdGVDdXJyZW50KCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwi'@;
put 'a2V5ZG93bi5lbnRlciIsKCk9PiF0aGlzLmFjdGl2YXRlQ3VycmVudCgpKSl9bW92ZVRvKGwpe3ZvaWQgMCE9PWwmJih0aGlzLmN1cnJlbnQmJnRoaXMuY3VycmVudC5ibHVyKCksbC5mb2N1cygpLHRoaXMuX2N1cnJlbnQ9bCl9bW92ZShsKXtsZXQgYT0hMTtpZih0aGlzLmN1cnJlbnQpe2Nv'@;
put 'bnN0IGQ9dGhpcy5jdXJyZW50W2xdO2QmJihCTShkKT9kOmZhKGQpKS5zdWJzY3JpYmUoZj0+e2YmJih0aGlzLm1vdmVUbyhmKSxhPSEwKX0pfXJldHVybiBhfWFjdGl2YXRlQ3VycmVudCgpe3JldHVybiEoIXRoaXMuY3VycmVudHx8IXRoaXMuY3VycmVudC5hY3RpdmF0ZXx8KHRoaXMuY3Vy'@;
put 'cmVudC5hY3RpdmF0ZSgpLDApKX1kZXRhY2hMaXN0ZW5lcnMoKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2gobD0+bCgpKX19O3dwLlx1MDI3NWZhYz1mdW5jdGlvbihsKXtyZXR1cm4gbmV3KGx8fHdwKSh4cihFYSkpfSx3cC5cdTAyNzVwcm92PW9uKHt0b2tlbjp3cCxmYWN0b3J5Ondw'@;
put 'Llx1MDI3NWZhY30pO2NvbnN0IEYxZT17cHJvdmlkZTp3cCx1c2VGYWN0b3J5OmZ1bmN0aW9uIEJ6ZShjLGwpe3JldHVybiBjfHxuZXcgd3AobCl9LGRlcHM6W1tuZXcgSTEsbmV3IGNkLHdwXSxFYV19O3ZhciBrMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkJFRk9SRT0tMV09IkJFRk9SRSIs'@;
put 'Y1tjLkFGVEVSPTFdPSJBRlRFUiIsY30oazJ8fHt9KTtjbGFzcyBUZHt9VGRbInRvcC1yaWdodCJdPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6azIuQkVGT1JFLGFuY2hvcjpPcy5FTkQsY29udGVudDpPcy5FTkR9LFRkWyJ0b3AtbGVmdCJdPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6azIuQkVG'@;
put 'T1JFLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50Ok9zLlNUQVJUfSxUZFsiYm90dG9tLXJpZ2h0Il09e2F4aXM6aDEuVkVSVElDQUwsc2lkZTprMi5BRlRFUixhbmNob3I6T3MuRU5ELGNvbnRlbnQ6T3MuRU5EfSxUZFsiYm90dG9tLWxlZnQiXT17YXhpczpoMS5WRVJUSUNBTCxzaWRlOmsyLkFG'@;
put 'VEVSLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50Ok9zLlNUQVJUfSxUZFsicmlnaHQtdG9wIl09e2F4aXM6aDEuSE9SSVpPTlRBTCxzaWRlOmsyLkFGVEVSLGFuY2hvcjpPcy5DRU5URVIsY29udGVudDpPcy5FTkR9LFRkWyJyaWdodC1ib3R0b20iXT17YXhpczpoMS5IT1JJWk9OVEFMLHNpZGU6'@;
put 'azIuQUZURVIsYW5jaG9yOk9zLlNUQVJULGNvbnRlbnQ6T3MuU1RBUlR9LFRkWyJsZWZ0LXRvcCJdPXtheGlzOmgxLkhPUklaT05UQUwsc2lkZTprMi5CRUZPUkUsYW5jaG9yOk9zLkNFTlRFUixjb250ZW50Ok9zLkVORH0sVGRbImxlZnQtYm90dG9tIl09e2F4aXM6aDEuSE9SSVpPTlRBTCxz'@;
put 'aWRlOmsyLkJFRk9SRSxhbmNob3I6T3MuU1RBUlQsY29udGVudDpPcy5TVEFSVH07Y29uc3QgSEw9bmV3IFN0KCJQT1BPVkVSX0hPU1RfQU5DSE9SIik7bGV0IGp6ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMubGFzdE9wZW5DaGFuZ2U9'@;
put 'bnVsbH1uZ09uSW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5sYXN0T3BlbkNoYW5nZT1hfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1vbkVzY2FwZUtleShhKXtu'@;
put 'dWxsIT09dGhpcy5sYXN0T3BlbkNoYW5nZSYmKCExPT09dGhpcy5sYXN0T3BlbkNoYW5nZSYmYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmxhc3RPcGVuQ2hhbmdlPW51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzYykpfSxjLlx1MDI3'@;
put 'NWRpcj1Fcih7dHlwZTpjLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleXVwLmVzY2FwZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25Fc2NhcGVLZXkoZil9KX0sc3RhbmRhbG9uZTohMH0pLGN9KSgpLGFnPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2ZvKFtzYyxMeCxMMWUse3Byb3ZpZGU6SEwsdXNlRXhpc3Rpbmc6Sml9XSksYmQoW2p6ZV0pXX0pLGN9KSgpO2NsYXNzIFJZe3N0YXRpYyBsaW5rUGFyZW50'@;
put 'KGwsYSxkKXtsLmZvckVhY2goaD0+aFtkXT1hKX1zdGF0aWMgbGlua1ZlcnRpY2FsKGwsYT0hMCl7bC5mb3JFYWNoKChkLGgpPT57aD4wJiYoZC51cD1sW2gtMV0pLGg8bC5sZW5ndGgtMSYmKGQuZG93bj1sW2grMV0pfSksYSYmbC5sZW5ndGg+MSYmKGxbMF0udXA9bFtsLmxlbmd0aC0xXSxs'@;
put 'W2wubGVuZ3RoLTFdLmRvd249bFswXSl9fWxldCBtbT0oKCk9PntjbGFzcyBje3VzZXJEZWZpbmVkV2lkdGgoYSl7Y29uc3QgZD1hLmNsb25lTm9kZSghMCk7ZC5pZCYmKGQuaWQ9ZC5pZCsiLWNsb25lIiksZC5jbGFzc0xpc3QuYWRkKCJkYXRhZ3JpZC1jZWxsLXdpZHRoLXplcm8iKSxkb2N1'@;
put 'bWVudC5ib2R5LmFwcGVuZENoaWxkKGQpO2NvbnN0IGg9dGhpcy5jbGllbnRSZWN0KGQpLndpZHRoO3JldHVybiBkLnJlbW92ZSgpLGh9c2Nyb2xsQmFyV2lkdGgoYSl7cmV0dXJuIGEub2Zmc2V0V2lkdGgtYS5jbGllbnRXaWR0aH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gYS5zY3JvbGxXaWR0'@;
put 'aHx8MH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSwxMCl9Y2xpZW50UmVjdChhKXtjb25zdCBkPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDpwYXJzZUludChkLnRvcCwx'@;
put 'MCksYm90dG9tOnBhcnNlSW50KGQuYm90dG9tLDEwKSxsZWZ0OnBhcnNlSW50KGQubGVmdCwxMCkscmlnaHQ6cGFyc2VJbnQoZC5yaWdodCwxMCksd2lkdGg6cGFyc2VJbnQoZC53aWR0aCwxMCksaGVpZ2h0OnBhcnNlSW50KGQuaGVpZ2h0LDEwKX19bWluV2lkdGgoYSl7cmV0dXJuIHBhcnNl'@;
put 'SW50KGdldENvbXB1dGVkU3R5bGUoYSkuZ2V0UHJvcGVydHlWYWx1ZSgibWluLXdpZHRoIiksMTApfWZvY3VzKGEpe2EuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUw'@;
put 'Mjc1ZmFjfSksY30pKCksTkw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbGVtZW50PWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5yZW5kZXJlcj1oLHRoaXMuY2xyRXhwYW5kVHJpZ2dlcj0hMSx0aGlzLnN0YXJ0SGVpZ2h0PTB9Z2V0IGV4cGFuZEFuaW1hdGlvbigp'@;
put 'e3JldHVybnt2YWx1ZTp0aGlzLmNsckV4cGFuZFRyaWdnZXIscGFyYW1zOntzdGFydEhlaWdodDp0aGlzLnN0YXJ0SGVpZ2h0fX19YW5pbWF0aW9uU3RhcnQoYSl7InZvaWQiIT09YS5mcm9tU3RhdGUmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQs'@;
put 'Im92ZXJmbG93IiwiaGlkZGVuIil9YW5pbWF0aW9uRG9uZShhKXsidm9pZCIhPT1hLmZyb21TdGF0ZSYmKHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIm92ZXJmbG93IiksdGhpcy51cGRhdGVTdGFydEhlaWdodCgpKX11cGRhdGVTdGFydEhl'@;
put 'aWdodCgpe3RoaXMuc3RhcnRIZWlnaHQ9dGhpcy5kb21BZGFwdGVyLmNvbXB1dGVkSGVpZ2h0KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KXx8MH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKG1tKSxHZShFYSkpfSxjLlx1MDI3'@;
put 'NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJnVVKCJAZXhwYW5kQW5pbWF0aW9uLnN0YXJ0IixmdW5jdGlvbihmKXtyZXR1cm4gZC5hbmltYXRpb25TdGFydChm'@;
put 'KX0pKCJAZXhwYW5kQW5pbWF0aW9uLmRvbmUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmFuaW1hdGlvbkRvbmUoZil9KSwyJmEmJnNVKCJAZXhwYW5kQW5pbWF0aW9uIixkLmV4cGFuZEFuaW1hdGlvbil9LGlucHV0czp7Y2xyRXhwYW5kVHJpZ2dlcjoiY2xyRXhwYW5kVHJpZ2dlciJ9LGZlYXR1'@;
put 'cmVzOltmbyhbbW1dKV0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxZcigwKSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9ja30iXSxkYXRhOnthbmltYXRpb246W19oKCJleHBhbmRB'@;
put 'bmltYXRpb24iLFtydSgidHJ1ZSA8PT4gZmFsc2UiLFtjcyh7aGVpZ2h0OiJ7e3N0YXJ0SGVpZ2h0fX1weCJ9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIsY3Moe2hlaWdodDoiKiJ9KSldKV0pXX19KSxjfSkoKSxMWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMb119KSxjfSkoKSx6emU9MDtjb25zdCBQeT1uZXcgU3QoIklGX0FDVElWRV9JRCIpLFp6ZT17cHJvdmlkZTpQeSx1c2VGYWN0b3J5OmZ1bmN0aW9uIFV6ZSgpe3Jl'@;
put 'dHVybisrenplfX07bGV0IGQ3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jdXJyZW50Q2hhbmdlPW5ldyBXbn1nZXQgY3VycmVudENoYW5nZSgpe3JldHVybiB0aGlzLl9jdXJyZW50Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1'@;
put 'cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY3VycmVudENoYW5nZS5uZXh0KGEpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0'@;
put 'b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRnk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRlbXBsYXRlPWgsdGhpcy5jb250YWluZXI9Zix0aGlzLmFjdGl2ZUNoYW5nZT1uZXcgWHIoITEpLHRoaXMud2Fz'@;
put 'QWN0aXZlPSExLHRoaXMuY2hlY2tBbmRVcGRhdGVWaWV3KGEuY3VycmVudCksdGhpcy5zdWJzY3JpcHRpb249YS5jdXJyZW50Q2hhbmdlLnN1YnNjcmliZSh2PT57dGhpcy5jaGVja0FuZFVwZGF0ZVZpZXcodil9KX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1'@;
put 'cnJlbnQ9PT10aGlzLmlkfXNldCBhY3RpdmUoYSl7YSYmKHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcoYSl7YT90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZp'@;
put 'ZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX1jaGVja0FuZFVwZGF0ZVZpZXcoYSl7Y29uc3QgZD1hPT09dGhpcy5pZDtkIT09dGhpcy53YXNBY3RpdmUmJih0aGlzLnVwZGF0ZVZpZXcoZCksdGhpcy5hY3RpdmVDaGFuZ2UuZW1pdChkKSx0aGlzLndhc0FjdGl2ZT1k'@;
put 'KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZDcpLEdlKFB5KSxHZShTbCksR2UoRGEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZBY3RpdmUiLCIiXV0saW5wdXRzOnthY3RpdmU6W2puLk5vbmUsImNs'@;
put 'cklmQWN0aXZlIiwiYWN0aXZlIl19LG91dHB1dHM6e2FjdGl2ZUNoYW5nZToiY2xySWZBY3RpdmVDaGFuZ2UifX0pLGN9KSgpLEQyPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudGVtcGxhdGU9ZCx0aGlzLmNvbnRhaW5lcj1oLHRo'@;
put 'aXMub3BlbkNoYW5nZT1uZXcgWHIoITEpLHRoaXMuc3Vic2NyaXB0aW9uPWEub3BlbkNoYW5nZS5zdWJzY3JpYmUoZj0+e3RoaXMudXBkYXRlVmlldyhmKSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChmKX0pfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufXNldCBvcGVu'@;
put 'KGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPWF9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcoYSl7YT90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2MpLEdlKFNsKSxHZShEYSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZk9wZW4iLCIiXV0saW5wdXRzOntvcGVuOltqbi5Ob25lLCJjbHJJZk9wZW4iLCJvcGVu'@;
put 'Il19LG91dHB1dHM6e29wZW5DaGFuZ2U6ImNscklmT3BlbkNoYW5nZSJ9fSksY30pKCksSDFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnRlbXBsYXRlPWEsdGhpcy5jb250YWluZXI9ZCx0aGlzLmVsPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZXhwYW5kPXYs'@;
put 'dGhpcy5leHBhbmRlZENoYW5nZT1uZXcgWHIoITApLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX3N1YnNjcmlwdGlvbnM9W10sdGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKHYuZXhwYW5kQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMudXBkYXRlVmlldygpLHRoaXMuZXhwYW5kZWRDaGFuZ2Uu'@;
put 'ZW1pdCh2LmV4cGFuZGVkKX0pKSx2Lmhhc0V4cGFuZFRlbXBsYXRlPSEhYX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpeyJib29sZWFuIj09dHlwZW9mIGEmJih0aGlzLmV4cGFuZC5leHBhbmRlZD1hLHRoaXMuX2V4cGFuZGVkPWEpfW5nT25J'@;
put 'bml0KCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZSsrLHRoaXMudXBkYXRlVmlldygpfW5nT25EZXN0cm95KCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZS0tLHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXVwZGF0ZVZpZXcoKXtpZighdGhpcy5leHBhbmQu'@;
put 'ZXhwYW5kZWR8fDA9PT10aGlzLmNvbnRhaW5lci5sZW5ndGgpaWYodGhpcy50ZW1wbGF0ZSl0aGlzLmV4cGFuZC5leHBhbmRlZD90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKTtlbHNlIHRyeXt0aGlzLnJlbmRl'@;
put 'cmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzcGxheSIsdGhpcy5leHBhbmQuZXhwYW5kZWQ/bnVsbDoibm9uZSIpfWNhdGNoe319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFNsLDgpLEdlKERhKSxHZShKaSksR2UoRWEp'@;
put 'LEdlKFoxKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklmRXhwYW5kZWQiLCIiXV0saW5wdXRzOntleHBhbmRlZDpbam4uTm9uZSwiY2xySWZFeHBhbmRlZCIsImV4cGFuZGVkIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJJZkV4cGFuZGVkQ2hh'@;
put 'bmdlIn19KSxjfSkoKSxJMj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMb119KSxjfSkoKTtjb25zdCBXemU9e3Byb3ZpZGU6bmV3'@;
put 'IFN0KCJGT0NVU19PTl9WSUVXX0lOSVQiKSx1c2VWYWx1ZTohMH07bGV0IFZMPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbV3pl'@;
put 'XSxpbXBvcnRzOltMb119KSxjfSkoKSxHemU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sVHMsTnhdfSksY30pKCksUjI9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5jbHJMb2FkaW5nQ2hhbmdlPW5ldyBYcighMSksdGhpcy5idXR0b25TdGF0ZT1VMSx0aGlzLnN0YXRlPVUxLkRFRkFVTFR9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe2lmKGEhPT10aGlzLnN0'@;
put 'YXRlKXtzd2l0Y2godGhpcy5zdGF0ZT1hLGEpe2Nhc2UgVTEuREVGQVVMVDp0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiKSx0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidHJhbnNmb3JtIiksdGhp'@;
put 'cy5kaXNhYmxlZHx8dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIpO2JyZWFrO2Nhc2UgVTEuTE9BRElORzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZl'@;
put 'RWxlbWVudCwidHJhbnNmb3JtIiwidHJhbnNsYXRleigwKSIpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLCIiKTticmVhaztjYXNlIFUxLlNVQ0NFU1M6dGhpcy5zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCk7YnJlYWs7Y2FzZSBV'@;
put 'MS5FUlJPUjp0aGlzLmxvYWRpbmdTdGF0ZUNoYW5nZShVMS5ERUZBVUxUKX10aGlzLmNsckxvYWRpbmdDaGFuZ2UuZW1pdChhKX19c2V0RXhwbGljaXRCdXR0b25XaWR0aCgpe2lmKHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50'@;
put 'UmVjdCl7Y29uc3QgYT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1NYXRoLm1heCg0MixhLndpZHRoKTt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGAke2R9cHhgKX19fXJldHVybiBjLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShFYSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJidXR0b24iLCJjbHJMb2FkaW5nIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZmcigiZGlzYWJsZWQi'@;
put 'LGQuZGlzYWJsZWQ/IiI6bnVsbCl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0cHV0czp7Y2xyTG9hZGluZ0NoYW5nZToiY2xyTG9hZGluZ0NoYW5nZSJ9LGZlYXR1cmVzOltmbyhbe3Byb3ZpZGU6a3gsdXNlRXhpc3Rpbmc6Y31dKV0sYXR0cnM6dkhlLG5nQ29udGVudFNlbGVj'@;
put 'dG9yczp5YSxkZWNsczo0LHZhcnM6NSxjb25zdHM6W1szLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiY2xyLWxvYWRpbmctYnRuLWNvbnRlbnQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNw'@;
put 'aW5uZXItaW5saW5lIiwic3Bpbm5lci1jaGVjayJdLFsxLCJjbHItbG9hZGluZy1idG4tY29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksZGUoMCwic3BhbiIsMCksbXQoMSxiSGUsMiwxLCJuZy1jb250YWluZXIiLDEpKDIseUhlLDIsMSwibmctY29udGFpbmVy'@;
put 'IiwxKSgzLF9IZSwyLDEsInNwYW4iLDIpLGhlKCkpLDImYSYmKHhlKCJAcGFyZW50Iix2b2lkIDApKCJuZ1N3aXRjaCIsZC5zdGF0ZSksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkxPQURJTkcpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUND'@;
put 'RVNTKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUuREVGQVVMVCkpfSxkZXBlbmRlbmNpZXM6W1MyLGNwXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltfaCgicGFyZW50IixbcnUoIjplbnRlciIsW10pXSksX2goImRlZmF1bHRCdXR0b24iLFtydSgiOmVu'@;
put 'dGVyIixbY3Moe29wYWNpdHk6MH0pLE0wKCIyMDBtcyAxMDBtcyBlYXNlLWluIixjcyh7b3BhY2l0eToxfSkpXSkscnUoIjpsZWF2ZSIsW2NzKHtvcGFjaXR5OjB9KV0pXSksX2goInNwaW5uZXIiLFtydSgiOmVudGVyIixbY3Moe29wYWNpdHk6MH0pLE0wKCIyMDBtcyAxMDBtcyBlYXNlLWlu'@;
put 'Iixjcyh7b3BhY2l0eToxfSkpXSkscnUoIjpsZWF2ZSIsW2NzKHtvcGFjaXR5OjF9KSxNMCgiMTAwbXMgZWFzZS1vdXQiLGNzKHtvcGFjaXR5OjB9KSldKV0pLF9oKCJ2YWxpZGF0ZWQiLFtydSgiOmVudGVyIixbTTAoIjYwMG1zIixvUGUoW2NzKHt0cmFuc2Zvcm06InNjYWxlKDAsMCkiLG9m'@;
put 'ZnNldDowfSksY3Moe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSxjcyh7dHJhbnNmb3JtOiJzY2FsZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksY3Moe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSxjcyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEpIixvZmZzZXQ6MX0pXSkpXSkscnUo'@;
put 'IjpsZWF2ZSIsW2NzKHtvcGFjaXR5OjF9KSxNMCgiMTAwbXMgZWFzZS1vdXQiLGNzKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxLemU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBl'@;
put 'OmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG9dfSksY30pKCkscXplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyh4MGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30p'@;
put 'LGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltLemUsR3plXX0pLGN9KSgpLFh6ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLGRl'@;
put 'Y2xzOjAsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7fSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxWeD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5q'@;
put 'PUFyKHt9KSxjfSkoKSxKemU9MCxTaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9ImNsci1mb3JtLWNvbnRyb2wtIisgKytKemUsdGhpcy5faWRDaGFuZ2U9bmV3IGVpKHRoaXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEs'@;
put 'dGhpcy5faWRDaGFuZ2UubmV4dChhKX1nZXQgaWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3'@;
put 'NWZhY30pLGN9KSgpLFF6ZT0wLGg3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD0iY2xyLWZvcm0tY29udGFpbmVyLSIrICsrUXplLHRoaXMuX2lkQ2hhbmdlPW5ldyBlaSh0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1h'@;
put 'LHRoaXMuX2lkQ2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAy'@;
put 'NzVmYWN9KSxjfSkoKTtsZXQgT1k9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImFic3RyYWN0In1nZXQgaWQoKXtyZXR1cm4gdGhpcy5jb250YWluZXJJ'@;
put 'ZFNlcnZpY2U/YCR7dGhpcy5jb250YWluZXJJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9sSWRTdWZmaXh9YDp0aGlzLmNvbnRyb2xJZFNlcnZpY2U/YCR7dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoU2gsOCksR2UoaDcsOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCksZVVlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBPWXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhp'@;
put 'cy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iZXJyb3IifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShTaCw4KSxHZShoNyw4KSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250'@;
put 'cm9sLWVycm9yIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoZnIoImlkIixkLmlkKSxUcigiY2xyLXN1YnRleHQiLCEwKSgiZXJyb3IiLCEwKSl9LGZlYXR1cmVzOltDb10sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRl'@;
put 'OmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEJMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBPWXtjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0'@;
put 'aGlzLmNvbnRyb2xJZFN1ZmZpeD0iaGVscGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoU2gsOCksR2UoaDcsOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1oZWxwZXIiXV0saG9zdFZhcnM6'@;
put 'Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihmcigiaWQiLGQuaWQpLFRyKCJjbHItc3VidGV4dCIsITApKX0sZmVhdHVyZXM6W0NvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLFlyKDApKX0s'@;
put 'ZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZjE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FkZGl0aW9uYWxDb250cm9scz1bXSx0aGlzLl9jb250cm9sQ2hhbmdlcz1uZXcgV24sdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcz1uZXcgV24sdGhpcy5faGVscGVycz1u'@;
put 'ZXcgV259Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5fY29udHJvbH1nZXQgY29udHJvbENoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY29udHJvbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGFkZGl0aW9uYWxDb250cm9scygpe3JldHVybiB0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHN9Z2V0'@;
put 'IGFkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMoKXtyZXR1cm4gdGhpcy5fYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgaGFzQWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuISF0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHM/Lmxlbmd0aH1nZXQgaGVscGVyc0No'@;
put 'YW5nZSgpe3JldHVybiB0aGlzLl9oZWxwZXJzLmFzT2JzZXJ2YWJsZSgpfXNldENvbnRyb2woYSl7dGhpcy5fY29udHJvbD1hLHRoaXMuX2NvbnRyb2xDaGFuZ2VzLm5leHQoYSl9YWRkQWRkaXRpb25hbENvbnRyb2woYSl7dGhpcy5fYWRkaXRpb25hbENvbnRyb2xzLnB1c2goYSksdGhpcy5f'@;
put 'YWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcy5uZXh0KHRoaXMuX2FkZGl0aW9uYWxDb250cm9scyl9c2V0SGVscGVycyhhKXt0aGlzLl9oZWxwZXJzLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2Vu'@;
put 'OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBBZD1mdW5jdGlvbihjKXtyZXR1cm4gYy5OT05FPSJOT05FIixjLlZBTElEPSJWQUxJRCIsYy5JTlZBTElEPSJJTlZBTElEIixjfShBZHx8e30pO2xldCBrZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudHJpZ2dl'@;
put 'clN0YXR1c0NoYW5nZVN1YmplY3Q9bmV3IFduLHRoaXMuc3RhdHVzQ2hhbmdlcz10aGlzLmdldFN0YXR1c0NoYW5nZXMoYSkucGlwZShrMGUoMSkpfXRyaWdnZXJTdGF0dXNDaGFuZ2UoKXt0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0Lm5leHQoKX1nZXRTdGF0dXNDaGFuZ2VzKGEp'@;
put 'e3JldHVybiBLOChbYS5jb250cm9sQ2hhbmdlcyxhLmFkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMucGlwZSh4MihbXSkpXSkucGlwZShWMSgoW2QsaF0pPT57aWYoZCl7Y29uc3QgZj1bZCwuLi5oXTtyZXR1cm4geXgoSzgoZi5tYXAodj0+di5zdGF0dXNDaGFuZ2VzKSksdGhpcy50cmlnZ2Vy'@;
put 'U3RhdHVzQ2hhbmdlU3ViamVjdC5waXBlKExyKCgpPT5mLm1hcCh2PT52LnN0YXR1cykpKSl9cmV0dXJuIE0yfSksTHIoZD0+ZC5pbmNsdWRlcyhBZC5JTlZBTElEKT9BZC5JTlZBTElEOmQuaW5jbHVkZXMoQWQuVkFMSUQpP0FkLlZBTElEOkFkLk5PTkUpLHgyKEFkLk5PTkUpKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoZjEpKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjbGFzcyBqTHt9ZnVuY3Rpb24gajFlKGMpe3JldHVybltjLHtwcm92aWRlOmpMLHVzZUV4aXN0aW5nOmN9'@;
put 'XX1mdW5jdGlvbiB6MWUoYyxsLGEpe3JldHVybiBYdC5jcmVhdGUoZD0+e2woZCk7Y29uc3QgaD1jLnN1YnNjcmliZShkKTtyZXR1cm4oKT0+e2gudW5zdWJzY3JpYmUoKSxhJiZhKGQpfX0pfWxldCB6TD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yZW5kZXJl'@;
put 'cj1hLHRoaXMucGFyZW50PWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5mb2N1c1NlcnZpY2U9Zix0aGlzLnBsYXRmb3JtSWQ9dix0aGlzLmlkPVN1KCksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExLHRoaXMuX3VubGlzdGVuRnVuY3M9W10sdGhpcy5yZXNldENoaWxk'@;
put 'cmVuKCksdGhpcy5tb3ZlVG9GaXJzdEl0ZW1XaGVuT3BlbigpLGR8fHRoaXMuaGFuZGxlUm9vdEZvY3VzKCl9Z2V0IHRyaWdnZXIoKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcn1zZXQgdHJpZ2dlcihhKXt0aGlzLl90cmlnZ2VyPWEsdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNo'@;
put 'KHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dyaWdodCIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpOih0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3VwIixkPT50aGlzLnRv'@;
put 'Z2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3dkb3duIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5mb2N1c1NlcnZpY2UubGlz'@;
put 'dGVuVG9BcnJvd0tleXMoYSkpfWdldCBjb250YWluZXIoKXtyZXR1cm4gdGhpcy5fY29udGFpbmVyfXNldCBjb250YWluZXIoYSl7dGhpcy5fY29udGFpbmVyPWEsdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24udGFiIixkPT50aGlzLnRv'@;
put 'Z2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5wYXJlbnQ/dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT57dGhpcy5mb2N1c1NlcnZpY2UubW92ZShDaC5MRUZUKSxkLnN0b3BQcm9wYWdhdGlvbigp'@;
put 'fSkpOih0aGlzLmZvY3VzU2VydmljZS5yZWdpc3RlckNvbnRhaW5lcihhKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxpc3Rl'@;
put 'bkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiYmx1ciIsZD0+e3RoaXMuY2hpbGRyZW4ucGlwZShVZigxKSkuc3Vic2NyaWJlKGY9PmYuZm9yRWFjaCh2PT52LmJsdXIoKSkpO2NvbnN0IGg9ZC5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O2gmJmVsKHRo'@;
put 'aXMucGxhdGZvcm1JZCkmJihhLmNvbnRhaW5zKGgpfHxoPT09dGhpcy50cmlnZ2VyKXx8KHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0hMSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGE9'@;
put 'PmEoKSksdGhpcy5mb2N1c1NlcnZpY2UuZGV0YWNoTGlzdGVuZXJzKCl9bW92ZVRvRmlyc3RJdGVtV2hlbk9wZW4oKXtjb25zdCBhPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShkPT57ZCYmdGhpcy50b2dnbGVTZXJ2aWNlLm9yaWdpbmFsRXZlbnQmJnNldFRpbWVv'@;
put 'dXQoKCk9Pnt0aGlzLmZvY3VzU2VydmljZS5tb3ZlVG8odGhpcyksdGhpcy5mb2N1c1NlcnZpY2UubW92ZSh0aGlzLnBhcmVudD9DaC5SSUdIVDpDaC5ET1dOKX0pfSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKCgpPT5hLnVuc3Vic2NyaWJlKCkpfWhhbmRsZVJvb3RGb2N1cygpe2NvbnN0'@;
put 'IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkfHwodGhpcy5mb2N1c1NlcnZpY2UucmVzZXQodGhpcyksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkJiZ0aGlzLmZvY3VzKCkpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD1k'@;
put 'fSk7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKCgpPT5hLnVuc3Vic2NyaWJlKCkpfWZvY3VzKCl7dGhpcy50cmlnZ2VyJiZlbCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdnZXIuZm9jdXMoKX1ibHVyKCl7dGhpcy50cmlnZ2VyJiZlbCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdn'@;
put 'ZXIuYmx1cigpfWFjdGl2YXRlKCl7ZWwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmNsaWNrKCl9cmVzZXRDaGlsZHJlbigpe3RoaXMuY2hpbGRyZW49bmV3IGJ4KDEpLHRoaXMucGFyZW50P3RoaXMucmlnaHQ9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKExyKGE9PmFb'@;
put 'MF0pKToodGhpcy5kb3duPXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShMcihhPT5hWzBdKSksdGhpcy51cD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoTHIoYT0+YVthLmxlbmd0aC0xXSkpKX1hZGRDaGlsZHJlbihhKXtSWS5saW5rVmVydGljYWwoYSksdGhpcy5wYXJl'@;
put 'bnQmJlJZLmxpbmtQYXJlbnQoYSx0aGlzLmNsb3NlQW5kR2V0VGhpcygpLENoLkxFRlQpLHRoaXMuY2hpbGRyZW4ubmV4dChhKX1vcGVuQW5kR2V0Q2hpbGRyZW4oKXtyZXR1cm4gejFlKHRoaXMuY2hpbGRyZW4sKCk9PnRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1jbG9zZUFuZEdldFRo'@;
put 'aXMoKXtyZXR1cm4gejFlKGZhKHRoaXMpLCgpPT50aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEVhKSx4cihjLDEyKSx4cihzYykseHIod3ApLHhyKG9hKSl9LGMuXHUwMjc1cHJvdj1vbih7dG9r'@;
put 'ZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgdFVlPWoxZSh6TCk7bGV0IEJ4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2VzPW5ldyBXbn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWNsb3NlTWVu'@;
put 'dXMoKXt0aGlzLl9jaGFuZ2VzLm5leHQoITEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCByVWU9e3Byb3ZpZGU6QngsdXNlRmFjdG9yeTpm'@;
put 'dW5jdGlvbiBuVWUoYyl7cmV0dXJuIGN8fG5ldyBCeH0sZGVwczpbW25ldyBJMSxuZXcgY2QsQnhdXX07bGV0IHNnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnBhcmVudD1hLHRoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuZm9jdXNIYW5kbGVyPWgsdGhpcy5p'@;
put 'c01lbnVDbG9zYWJsZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godi5jaGFuZ2VzLnN1YnNjcmliZShNPT5kLm9wZW49TSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGQub3BlbkNoYW5nZS5zdWJzY3JpYmUoKCk9PmYubWFya0ZvckNoZWNrKCkp'@;
put 'KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGMsMTIpLEdlKHNjKSxHZSh6TCksR2UoeHMpLEdlKEJ4KSl9LGMuXHUwMjc1Y21wPVZy'@;
put 'KHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRyb3Bkb3duIiwhMCkoIm9wZW4iLGQudG9nZ2xlU2VydmljZS5vcGVuKX0saW5wdXRzOntpc01lbnVDbG9zYWJsZTpbam4uTm9uZSwiY2xy'@;
put 'Q2xvc2VNZW51T25JdGVtQ2xpY2siLCJpc01lbnVDbG9zYWJsZSJdfSxmZWF0dXJlczpbZm8oW3JVZSxGMWUsdFVlXSksYmQoW2FnXSldLG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksWXIoMCkpfSxlbmNhcHN1'@;
put 'bGF0aW9uOjJ9KSxjfSkoKTt2YXIgQWk9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SSUdIVF9DRU5URVI9MF09IlJJR0hUX0NFTlRFUiIsY1tjLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixjW2MuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGNbYy5UT1BfQ0VOVEVSPTNdPSJUT1Bf'@;
put 'Q0VOVEVSIixjW2MuVE9QX1JJR0hUPTRdPSJUT1BfUklHSFQiLGNbYy5UT1BfTEVGVD01XT0iVE9QX0xFRlQiLGNbYy5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixjW2MuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGNbYy5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xF'@;
put 'RlQiLGNbYy5MRUZUX0NFTlRFUj05XT0iTEVGVF9DRU5URVIiLGNbYy5MRUZUX1RPUD0xMF09IkxFRlRfVE9QIixjW2MuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsY30oQWl8fHt9KTtjbGFzcyBhVWV7Y29uc3RydWN0b3IobCl7dGhpcy5lbGVtZW50PWwsdGhpcy5ib3VuZE9uU2Ny'@;
put 'b2xsTGlzdGVuZXI9dGhpcy5lbWl0U2Nyb2xsRXZlbnQuYmluZCh0aGlzKSx0aGlzLnNjcm9sbGFibGVFbGVtZW50cz1bXSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC5zdHlsZS50b3A9MCxsLnN0eWxlLmJvdHRvbT0iYXV0byIsbC5zdHlsZS5sZWZ0PTAsbC5zdHlsZS5yaWdodD0i'@;
put 'YXV0byJ9YW5jaG9yKGwsYSxkLHtvZmZzZXRYOmg9MCxvZmZzZXRZOmY9MCx1c2VBbmNob3JQYXJlbnQ6dj0hMX09e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCksdiYmKGw9bC5wYXJlbnROb2RlKSxsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IE09bC5nZXRCb3Vu'@;
put 'ZGluZ0NsaWVudFJlY3QoKSxEPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgWj1NLmxlZnQtRC5sZWZ0K2gsbmU9TS50b3AtRC50b3ArZjtzd2l0Y2goYSl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9MRUZUOmJyZWFrO2Nhc2UgQWkuVE9QX0NFTlRFUjpa'@;
put 'Kz1NLndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5UT1BfUklHSFQ6Y2FzZSBBaS5SSUdIVF9UT1A6Wis9TS53aWR0aDticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6bmUrPU0uaGVpZ2h0O2JyZWFrO2Nhc2UgQWkuQk9UVE9NX0NFTlRFUjpuZSs9TS5oZWlnaHQs'@;
put 'Wis9TS53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuQk9UVE9NX1JJR0hUOmNhc2UgQWkuUklHSFRfQk9UVE9NOm5lKz1NLmhlaWdodCxaKz1NLndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9DRU5URVI6bmUrPU0uaGVpZ2h0LzI7YnJlYWs7Y2FzZSBBaS5SSUdIVF9DRU5URVI6bmUrPU0uaGVpZ2h0'@;
put 'LzIsWis9TS53aWR0aH1zd2l0Y2goZCl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9MRUZUOmJyZWFrO2Nhc2UgQWkuVE9QX0NFTlRFUjpaLT1ELndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5UT1BfUklHSFQ6Y2FzZSBBaS5SSUdIVF9UT1A6Wi09RC53aWR0aDticmVhaztjYXNlIEFpLkxF'@;
put 'RlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6bmUtPUQuaGVpZ2h0O2JyZWFrO2Nhc2UgQWkuQk9UVE9NX0NFTlRFUjpuZS09RC5oZWlnaHQsWi09RC53aWR0aC8yO2JyZWFrO2Nhc2UgQWkuQk9UVE9NX1JJR0hUOmNhc2UgQWkuUklHSFRfQk9UVE9NOm5lLT1ELmhlaWdodCxaLT1ELndp'@;
put 'ZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9DRU5URVI6bmUtPUQuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBBaS5SSUdIVF9DRU5URVI6bmUtPUQuaGVpZ2h0LzIsWi09RC53aWR0aH1jb25zdCBjZT1nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbWVudCksYmU9cGFyc2VJbnQoY2UubWFyZ2luTGVmdCwx'@;
put 'MCksRWU9cGFyc2VJbnQoY2UubWFyZ2luUmlnaHQsMTApLEJlPXBhcnNlSW50KGNlLm1hcmdpblRvcCwxMCkscWU9cGFyc2VJbnQoY2UubWFyZ2luQm90dG9tLDEwKTtzd2l0Y2goYSl7Y2FzZSBBaS5MRUZUX1RPUDpjYXNlIEFpLlRPUF9MRUZUOmNhc2UgQWkuVE9QX1JJR0hUOmNhc2UgQWku'@;
put 'UklHSFRfVE9QOihkPT09QWkuQk9UVE9NX1JJR0hUfHxkPT09QWkuUklHSFRfQk9UVE9NKSYmKG5lLT1xZSxaLT1FZSksKGQ9PT1BaS5CT1RUT01fTEVGVHx8ZD09PUFpLkxFRlRfQk9UVE9NKSYmKG5lLT1CZSxaKz1iZSksKGQ9PT1BaS5UT1BfTEVGVHx8ZD09PUFpLkxFRlRfVE9QKSYmKG5l'@;
put 'Kz1CZSxaKz1iZSksKGQ9PT1BaS5UT1BfUklHSFR8fGQ9PT1BaS5SSUdIVF9UT1ApJiYobmUrPUJlLFotPUVlKTticmVhaztjYXNlIEFpLkxFRlRfQk9UVE9NOmNhc2UgQWkuQk9UVE9NX0xFRlQ6Y2FzZSBBaS5CT1RUT01fUklHSFQ6Y2FzZSBBaS5SSUdIVF9CT1RUT006KGQ9PT1BaS5CT1RU'@;
put 'T01fTEVGVHx8ZD09PUFpLkxFRlRfQk9UVE9NKSYmKG5lLT1xZSxaKz1iZSksKGQ9PT1BaS5CT1RUT01fUklHSFR8fGQ9PT1BaS5SSUdIVF9CT1RUT00pJiYobmUtPXFlLFotPUVlKSwoZD09PUFpLlRPUF9MRUZUfHxkPT09QWkuTEVGVF9UT1ApJiYobmUrPUJlLForPWJlKSwoZD09PUFpLlRP'@;
put 'UF9SSUdIVHx8ZD09PUFpLlJJR0hUX1RPUCkmJihuZSs9QmUsWi09RWUpO2JyZWFrO2Nhc2UgQWkuVE9QX0NFTlRFUjpuZS09cWUsWis9YmUsWi09RWU7YnJlYWs7Y2FzZSBBaS5CT1RUT01fQ0VOVEVSOm5lKz1CZSxaKz1iZSxaLT1FZTticmVhaztjYXNlIEFpLkxFRlRfQ0VOVEVSOm5lKz1C'@;
put 'ZSxuZS09cWUsWi09RWU7YnJlYWs7Y2FzZSBBaS5SSUdIVF9DRU5URVI6bmUrPUJlLG5lLT1xZSxaKz1iZX1yZXR1cm4gdGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlWCgke01hdGgucm91bmQoWil9cHgpIHRyYW5zbGF0ZVkoJHtNYXRoLnJvdW5kKG5lKX1weClgLHRo'@;
put 'aXMuX3Njcm9sbC5hc09ic2VydmFibGUoKX1yZWxlYXNlKCl7dGhpcy5lbGVtZW50LnN0eWxlLnRyYW5zZm9ybT0iIix0aGlzLnJlbW92ZVNjcm9sbEV2ZW50TGlzdGVuZXJzKCl9aXNQb3NpdGlvbmVkKGwpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKS5wb3NpdGlvbjtyZXR1cm4icmVs'@;
put 'YXRpdmUiPT09YXx8ImFic29sdXRlIj09PWF8fCJmaXhlZCI9PT1hfWVtaXRTY3JvbGxFdmVudCgpe3RoaXMuX3Njcm9sbC5uZXh0KCl9YWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fc2Nyb2xsPW5ldyBXbjtjb25zdCBhPWw7bGV0IGQ9bDtmb3IoO2QmJmQhPT1kb2N1bWVudCYm'@;
put 'KHRoaXMuc2Nyb2xscyhkKSYmKGQuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lciksdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMucHVzaChkKSksZD09PWF8fCF0aGlzLmlzUG9zaXRpb25lZChkKSk7KWQ9ZC5wYXJlbnROb2RlfXJlbW92ZVNjcm9s'@;
put 'bEV2ZW50TGlzdGVuZXJzKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5zY3JvbGxhYmxlRWxlbWVudHMpbC5yZW1vdmVFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9zY3JvbGwmJih0'@;
put 'aGlzLl9zY3JvbGwuY29tcGxldGUoKSxkZWxldGUgdGhpcy5fc2Nyb2xsKX1zY3JvbGxzKGwpe2NvbnN0IGE9Z2V0Q29tcHV0ZWRTdHlsZShsKTtyZXR1cm4ic2Nyb2xsIj09PWEub3ZlcmZsb3dYfHwiYXV0byI9PT1hLm92ZXJmbG93WHx8InNjcm9sbCI9PT1hLm92ZXJmbG93WXx8ImF1dG8i'@;
put 'PT09YS5vdmVyZmxvd1l9fWNvbnN0IFkxZT0iaXMtb2ZmLXNjcmVlbiI7bGV0IFBZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnBhcmVudEhvc3Q9ZCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITEsdGhpcy5wb3BvdmVyT3B0aW9ucz17fSx0aGlzLnVwZGF0ZUFuY2hv'@;
put 'cj0hMSx0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9bnVsbCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFjaz1oPT57dGhpcy5hbmNob3JFbGVtLmNvbnRhaW5zKGgudGFyZ2V0KXx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sdGhpcy5lbD1hLmdldChKaSksdGhpcy50b2dn'@;
put 'bGVTZXJ2aWNlPWEuZ2V0KHNjKSx0aGlzLnJlbmRlcmVyPWEuZ2V0KEVhKSx0aGlzLm5nWm9uZT1hLmdldChZbyksdGhpcy5yZWY9YS5nZXQoeHMpLHRoaXMuYW5jaG9yRWxlbT1kLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3BvdmVySW5zdGFuY2U9bmV3IGFVZSh0aGlzLmVsLm5hdGl2ZUVsZW1l'@;
put 'bnQpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnBpcGUoeDIodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4pKS5zdWJzY3JpYmUoaD0+e2g/KHRoaXMuYW5jaG9yKCksdGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpLHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xh'@;
put 'c3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFkxZSkpOih0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWTFlKSl9KSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmKHRoaXMuYW5jaG9yKCks'@;
put 'dGhpcy5hdHRhY2hFU0NMaXN0ZW5lcigpKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnVwZGF0ZUFuY2hvciYmKHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMucG9wb3Zlckluc3RhbmNlLmFuY2hvcih0aGlzLmFuY2hvckVsZW0sdGhpcy5hbmNob3JQb2ludCx0aGlzLnBvcG92ZXJQb2lu'@;
put 'dCx0aGlzLnBvcG92ZXJPcHRpb25zKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX0pLHRoaXMuYXR0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5zdWJz'@;
put 'Y3JpcHRpb24udW5zdWJzY3JpYmUoKX1hbmNob3IoKXt0aGlzLnVwZGF0ZUFuY2hvcj0hMH1yZWxlYXNlKCl7dGhpcy5kZXRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpLHRoaXMucG9wb3Zlckluc3RhbmNlLnJlbGVhc2UoKX1hdHRhY2hFU0NMaXN0ZW5lcigpe3RoaXMucG9wb3Zlck9wdGlv'@;
put 'bnMuaWdub3JlR2xvYmFsRVNDTGlzdGVuZXJ8fHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKCJkb2N1bWVudCIsImtleWRvd24iLGE9PnthJiZhLmtleSYmQTIoYS5rZXkpPT09UWkuRXNjYXBl'@;
put 'JiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKX0pfSl9KX1kZXRhY2hFU0NMaXN0ZW5lcigpe3RoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lciYmKHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcigpLHRoaXMuZG9jdW1l'@;
put 'bnRFU0NMaXN0ZW5lcj1udWxsKX1hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpe3RoaXMuY2xvc2VPbk91dHNpZGVDbGljayYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmRvY3VtZW50JiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyJiZkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJj'@;
put 'bGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfWRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZkb2N1bWVudCYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5l'@;
put 'cigiY2xpY2siLHRoaXMuY2xvc2VPbk91dHNpZGVDbGlja0NhbGxiYWNrLCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHMpLEdlKEppLDQpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpLGY3PSgoKT0+e2NsYXNzIGMgZXh0'@;
put 'ZW5kcyBQWXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kcm9wZG93bi1tZW51IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLWRyb3Bkb3duIik7c3VwZXIoYSxkKSxoPyh0aGlzLmFuY2hvclBvaW50PUFpLlJJR0hUX1RPUCx0aGlz'@;
put 'LnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUCk6KHRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9NX0xFRlQsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1ApLHRoaXMucG9wb3Zlck9wdGlvbnMuYWxsb3dNdWx0aXBsZU9wZW49ITAsdGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxF'@;
put 'U0NMaXN0ZW5lcj0hMCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITAsdGhpcy5mb2N1c0hhbmRsZXI9Zn1zZXQgcG9zaXRpb24oYSl7c3dpdGNoKGEpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9CT1RU'@;
put 'T007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5UT1BfTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fUklHSFQsdGhpcy5wb3BvdmVyUG9pbnQ9QWku'@;
put 'UklHSFRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOmRlZmF1bHQ6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1BaS5SSUdIVF9UT1AsdGhpcy5wb3Bv'@;
put 'dmVyUG9pbnQ9QWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJyaWdodC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9QWkuUklHSFRfQk9UVE9NLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UibGVmdC10b3AiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9UT1AsdGhp'@;
put 'cy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2Nhc2UibGVmdC1ib3R0b20iOnRoaXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfQk9UVE9NfX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLmZvY3VzSGFuZGxlci5jb250YWlu'@;
put 'ZXI9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuZm9jdXNIYW5kbGVyLmFkZENoaWxkcmVuKHRoaXMuaXRlbXMudG9BcnJheSgpKSksdGhpcy5pdGVtcy5ub3RpZnlPbkNoYW5nZXMoKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25E'@;
put 'ZXN0cm95KCksdGhpcy5mb2N1c0hhbmRsZXIucmVzZXRDaGlsZHJlbigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoSEwsOCksR2UoYywxMiksR2UoekwpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xy'@;
put 'LWRyb3Bkb3duLW1lbnUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbGEoaCxqTCw0KSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLml0ZW1zPWYpfX0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihmcigicm9sZSIsIm1lbnUi'@;
put 'KSxUcigiZHJvcGRvd24tbWVudSIsITApKX0saW5wdXRzOntwb3NpdGlvbjpbam4uTm9uZSwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdfSxmZWF0dXJlczpbQ29dLG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCks'@;
put 'WXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxwNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuaXNSb290TGV2ZWxUb2dnbGU9ITAsYS5wYXJlbnQmJih0aGlzLmlzUm9vdExldmVsVG9nZ2xlPSExKSxmLnRyaWdnZXI9'@;
put 'aC5uYXRpdmVFbGVtZW50fWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW59b25Ecm9wZG93blRyaWdnZXJDbGljayhhKXt0aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKShHZShzZyksR2Uoc2MpLEdlKEppKSxHZSh6TCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEcm9wZG93blRyaWdnZXIiLCIiXSxbIiIsImNsckRyb3Bkb3duVG9nZ2xlIiwiIl1dLGhvc3RWYXJzOjEwLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkRyb3Bkb3duVHJpZ2dlckNsaWNrKGYpfSksMiZhJiYoZnIoImFyaWEtaGFzcG9wdXAiLCJtZW51IikoImFyaWEtZXhwYW5kZWQiLGQuYWN0aXZlKSxUcigiZHJvcGRvd24tdG9nZ2xlIixkLmlzUm9vdExldmVsVG9n'@;
put 'Z2xlKSgiZHJvcGRvd24taXRlbSIsIWQuaXNSb290TGV2ZWxUb2dnbGUpKCJleHBhbmRhYmxlIiwhZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImFjdGl2ZSIsZC5hY3RpdmUpKX19KSxjfSkoKTtjb25zdCBzVWU9W3twcm92aWRlOmpMLHVzZUNsYXNzOigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'YSxkLGgpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5wbGF0Zm9ybUlkPWgsdGhpcy5pZD1TdSgpLHRoaXMuZGlzYWJsZWQ9ITEsZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJpZCIsdGhpcy5pZCksZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJ0YWJpbmRl'@;
put 'eCIsIi0xIil9Zm9jdXMoKXtlbCh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIjAiKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50'@;
put 'b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgiLGJsb2NrOiJjZW50ZXIiLGlubGluZToibmVhcmVzdCJ9KSl9Ymx1cigpe2VsKHRoaXMucGxhdGZvcm1JZCkmJih0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IiwiLTEiKSx0aGlzLmVsLm5h'@;
put 'dGl2ZUVsZW1lbnQuYmx1cigpKX1hY3RpdmF0ZSgpe2VsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihKaSkseHIoRWEpLHhyKG9hKSl9LGMuXHUwMjc1cHJv'@;
put 'dj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCl9XTtsZXQgTnk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kcm9wZG93bj1hLHRoaXMuX2Ryb3Bkb3duU2VydmljZT1kLHRoaXMuZm9jdXNhYmxlSXRlbT1ofWdldCBkaXNhYmxlZCgpe3JldHVy'@;
put 'biB0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZD0hIWF8fCIiPT09YX1nZXQgZHJvcGRvd25JdGVtSWQoKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtLmlkfXNldCBkcm9wZG93bkl0ZW1JZChhKXt0aGlzLmZv'@;
put 'Y3VzYWJsZUl0ZW0uaWQ9YX1vbkRyb3Bkb3duSXRlbUNsaWNrKCl7aWYodGhpcy5kcm9wZG93bi5pc01lbnVDbG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuZHJvcGRvd24udG9nZ2xlU2VydmljZS5vcGVuKXtjb25zdCBhPXRoaXMuZmluZFJvb3REcm9wZG93bigpO2EuZm9jdXNIYW5k'@;
put 'bGVyLmZvY3VzKCksYS5mb2N1c0hhbmRsZXIuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0hMX1zZXRUaW1lb3V0KCgpPT57dGhpcy5kcm9wZG93bi5pc01lbnVDbG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2Ryb3Bkb3duU2VydmljZS5jbG9zZU1lbnVzKCl9KX1vblNwYWNl'@;
put 'S2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9b25FbnRlcktleWRvd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRpc2FibGVkKGEpfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxl'@;
put 'ZCYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX1maW5kUm9vdERyb3Bkb3duKCl7bGV0IGE9dGhpcy5kcm9wZG93bjtmb3IoO2EucGFyZW50OylhPWEucGFyZW50O3JldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKShHZShzZyksR2UoQngpLEdlKGpMKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRyb3Bkb3duSXRlbSIsIiJdXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBkLm9uRHJvcGRvd25JdGVtQ2xpY2soKX0pKCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblNwYWNlS2V5ZG93bihmKX0pKCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkVudGVyS2V5ZG93bihmKX0pLDImYSYmKGZyKCJyb2xlIiwibWVudWl0'@;
put 'ZW0iKSgiYXJpYS1kaXNhYmxlZCIsZC5kaXNhYmxlZCkoImlkIixkLmRyb3Bkb3duSXRlbUlkKSxUcigiZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJkcm9wZG93bi1pdGVtIiwhMCkpfSxpbnB1dHM6e2Rpc2FibGVkOltqbi5Ob25lLCJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sZHJvcGRvd25J'@;
put 'dGVtSWQ6W2puLk5vbmUsImlkIiwiZHJvcGRvd25JdGVtSWQiXX0sZmVhdHVyZXM6W2ZvKFtzVWVdKV19KSxjfSkoKSxGWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUw'@;
put 'Mjc1aW5qPUFyKHtpbXBvcnRzOltMbyxJMixUc119KSxjfSkoKSxIWT0oKCk9PntjbGFzcyBje3NldCB0cmlnZ2VyRWwoYSl7dGhpcy5fdHJpZ2dlckVsPWF9Zm9jdXNUcmlnZ2VyKCl7dGhpcy5fdHJpZ2dlckVsJiZ0aGlzLl90cmlnZ2VyRWwuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksTlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2lkPW5ldyBXbn1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWQuYXNPYnNlcnZh'@;
put 'YmxlKCl9c2V0SWQoYSl7dGhpcy5faWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVUw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh'@;
put 'LGQsaCxmLHYsTSl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy5lbD1kLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2U9aCx0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPWYsdGhpcy5wbGF0Zm9ybUlkPU0sdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuZG9j'@;
put 'dW1lbnQ9dn1uZ09uSW5pdCgpe3RoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIudHJpZ2dlckVsPXRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuYXJpYUV4cGFuZGVkPWE7'@;
put 'Y29uc3QgZD10aGlzLmlzT3Blbjt0aGlzLmlzT3Blbj1hLCF0aGlzLmlzT3BlbiYmZCYmdGhpcy5mb2N1c09uQ2xvc2UoKX0pLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2UuaWQuc3Vic2NyaWJlKGE9PnRoaXMuYXJpYUNvbnRyb2w9YSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25z'@;
put 'LmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vblNpZ25wb3N0VHJpZ2dlckNsaWNrKGEpe3RoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9Zm9jdXNPbkNsb3NlKCl7ZWwodGhpcy5wbGF0Zm9ybUlkKSYmIXRoaXMuaXNPcGVuJiZ0aGlzLmRvY3VtZW50LmFjdGl2ZUVs'@;
put 'ZW1lbnQ9PT10aGlzLmRvY3VtZW50LmJvZHkmJnRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIuZm9jdXNUcmlnZ2VyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNjKSxHZShKaSksR2UoTlkpLEdlKEhZKSxHZSh2cyksR2Uob2EpKX0sYy5c'@;
put 'dTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIl1dLGhvc3RBdHRyczpbMSwic2lnbnBvc3QtdHJpZ2dlciJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVy'@;
put 'biBkLm9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihmcigiYXJpYS1leHBhbmRlZCIsZC5hcmlhRXhwYW5kZWQpKCJhcmlhLWNvbnRyb2xzIixkLmFyaWFDb250cm9sKSxUcigiYWN0aXZlIixkLmlzT3BlbikpfX0pLGN9KSgpLFpMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'YSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy51c2VDdXN0b21UcmlnZ2VyPSExfXNldCBjdXN0b21UcmlnZ2VyKGEpe3RoaXMudXNlQ3VzdG9tVHJpZ2dlcj0hIWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKG5zKSl9LGMuXHUwMjc1Y21w'@;
put 'PVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zaWducG9zdCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZsYShoLFVMLDUpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQuY3VzdG9tVHJpZ2dlcj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdz'@;
put 'OmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigic2lnbnBvc3QiLCEwKX0saW5wdXRzOntzaWducG9zdFRyaWdnZXJBcmlhTGFiZWw6W2puLk5vbmUsImNsclNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbCIsInNpZ25wb3N0VHJpZ2dlckFyaWFMYWJlbCJdfSxmZWF0dXJlczpbZm8oW0hZLE5ZXSksYmQo'@;
put 'W2FnXSldLG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwxLCJzaWducG9zdC1hY3Rpb24iLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1saW5rIl0sWyJz'@;
put 'aGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxtdCgwLHdIZSwzLDIsIm5nLWNvbnRhaW5lciIsMCksWXIoMSkpLDImYSYmeGUoIm5nSWYiLCFkLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBlbmRlbmNpZXM6W3lvLHVzLFVMXSxlbmNhcHN1bGF0'@;
put 'aW9uOjJ9KSxjfSkoKTtjb25zdCBsVWU9eyJ0b3AtbGVmdCI6e2FuY2hvclBvaW50OkFpLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkJPVFRPTV9SSUdIVCxvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJ0b3AtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuVE9QX0NFTlRFUixwb3BvdmVyUG9p'@;
put 'bnQ6QWkuQk9UVE9NX0NFTlRFUixvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJ0b3AtcmlnaHQiOnthbmNob3JQb2ludDpBaS5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5CT1RUT01fTEVGVCxvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJyaWdodC10b3AiOnthbmNob3JQb2ludDpBaS5SSUdI'@;
put 'VF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRfQk9UVE9NLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwicmlnaHQtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5MRUZUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDoxNn0sInJpZ2h0LWJvdHRv'@;
put 'bSI6e2FuY2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9UT1Asb2Zmc2V0WTowLG9mZnNldFg6MTZ9LCJib3R0b20tcmlnaHQiOnthbmNob3JQb2ludDpBaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5UT1BfTEVGVCxvZmZzZXRZOjE2LG9mZnNl'@;
put 'dFg6MH0sImJvdHRvbS1taWRkbGUiOnthbmNob3JQb2ludDpBaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5UT1BfQ0VOVEVSLG9mZnNldFk6MTYsb2Zmc2V0WDowfSwiYm90dG9tLWxlZnQiOnthbmNob3JQb2ludDpBaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5UT1Bf'@;
put 'UklHSFQsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJsZWZ0LWJvdHRvbSI6e2FuY2hvclBvaW50OkFpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5SSUdIVF9UT1Asb2Zmc2V0WTowLG9mZnNldFg6LTE2fSwibGVmdC1taWRkbGUiOnthbmNob3JQb2ludDpBaS5MRUZUX0NFTlRFUixwb3Bv'@;
put 'dmVyUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sImxlZnQtdG9wIjp7YW5jaG9yUG9pbnQ6QWkuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLlJJR0hUX0JPVFRPTSxvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LGRlZmF1bHQ6e2FuY2hvclBvaW50OkFpLlJJ'@;
put 'R0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6MTZ9fSxjVWU9WyJ0b3AtbGVmdCIsInRvcC1taWRkbGUiLCJ0b3AtcmlnaHQiLCJyaWdodC10b3AiLCJyaWdodC1taWRkbGUiLCJyaWdodC1ib3R0b20iLCJib3R0b20tcmlnaHQiLCJib3R0'@;
put 'b20tbWlkZGxlIiwiYm90dG9tLWxlZnQiLCJsZWZ0LWJvdHRvbSIsImxlZnQtbWlkZGxlIiwibGVmdC10b3AiXTtsZXQgRzFlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBQWXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXtpZihzdXBlcihhLGQpLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMu'@;
put 'c2lnbnBvc3RGb2N1c01hbmFnZXI9dix0aGlzLnBsYXRmb3JtSWQ9TSx0aGlzLnNpZ25wb3N0Q29udGVudElkPVN1KCksIWQpdGhyb3cgbmV3IEVycm9yKCJjbHItc2lnbnBvc3QtY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1zaWducG9zdCIpO3RoaXMucG9z'@;
put 'aXRpb249InJpZ2h0LW1pZGRsZSIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrPSEwLGYuc2V0SWQodGhpcy5zaWducG9zdENvbnRlbnRJZCksdGhpcy5kb2N1bWVudD1EfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLl9wb3NpdGlvbn1zZXQgcG9zaXRpb24oYSl7dGhpcy5yZW5kZXJlci5y'@;
put 'ZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbiksdGhpcy5fcG9zaXRpb249YSYmY1VlLmluZGV4T2YoYSk+LTE/YToicmlnaHQtbWlkZGxlIix0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnBvc2l0aW9uKTtjb25z'@;
put 'dCBkPWxVZVt0aGlzLnBvc2l0aW9uXTt0aGlzLmFuY2hvclBvaW50PWQuYW5jaG9yUG9pbnQsdGhpcy5wb3BvdmVyUG9pbnQ9ZC5wb3BvdmVyUG9pbnQsdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRZPWQub2Zmc2V0WSx0aGlzLnBvcG92ZXJPcHRpb25zLm9mZnNldFg9ZC5vZmZzZXRYfWNs'@;
put 'b3NlKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLGVsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jb250YWlucyh0aGlzLmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpJiZ0aGlzLnNpZ25wb3N0Rm9j'@;
put 'dXNNYW5hZ2VyLmZvY3VzVHJpZ2dlcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoSEwsOCksR2UobnMpLEdlKE5ZKSxHZShIWSksR2Uob2EpLEdlKHZzKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNs'@;
put 'ci1zaWducG9zdC1jb250ZW50Il1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoYXAoImlkIixkLnNpZ25wb3N0Q29udGVudElkKSxUcigic2lnbnBvc3QtY29udGVudCIsITApKX0saW5wdXRzOntzaWducG9zdENsb3NlQXJpYUxhYmVsOltqbi5Ob25lLCJj'@;
put 'bHJTaWducG9zdENsb3NlQXJpYUxhYmVsIiwic2lnbnBvc3RDbG9zZUFyaWFMYWJlbCJdLHBvc2l0aW9uOltqbi5Ob25lLCJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19LGZlYXR1cmVzOltDb10sbmdDb250ZW50U2VsZWN0b3JzOlNIZSxkZWNsczo4LHZhcnM6Myxjb25zdHM6W1sxLCJzaWdu'@;
put 'cG9zdC13cmFwIl0sWzEsInBvcG92ZXItcG9pbnRlciJdLFsxLCJzaWducG9zdC1jb250ZW50LWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwic2lnbnBvc3QtYWN0aW9uIiwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdLFsidGFiaW5kZXgiLCIwIiwxLCJz'@;
put 'aWducG9zdC1jb250ZW50LWJvZHkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhDSGUpLGRlKDAsImRpdiIsMCksR3QoMSwiZGl2IiwxKSxkZSgyLCJkaXYiLDIpLFlyKDMpLGRlKDQsImJ1dHRvbiIsMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNsb3NlKCl9'@;
put 'KSxHdCg1LCJjZHMtaWNvbiIsNCksaGUoKSgpLGRlKDYsImRpdiIsNSksWXIoNywxKSxoZSgpKCkpLDImYSYmKGZlKDQpLGZyKCJhcmlhLWxhYmVsIixkLnNpZ25wb3N0Q2xvc2VBcmlhTGFiZWx8fGQuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0Q2xvc2UpKCJhcmlhLWNvbnRyb2xzIixk'@;
put 'LnNpZ25wb3N0Q29udGVudElkKSxmZSgpLGZyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpKX0sZGVwZW5kZW5jaWVzOlt1c10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdVVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhteCxUT2UpfX1yZXR1'@;
put 'cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxUcyxWTCxJMl19KSxjfSkoKSxWWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IFdufWdl'@;
put 'dCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxj'@;
put 'fSkoKSxCWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJpZ2dlcigpe3RoaXMubW91c2VP'@;
put 'dmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VPdXQoKX1oaWRlSWZNb3VzZU91'@;
put 'dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoc2MpKX0sYy5cdTAy'@;
put 'NzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxnNz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAiXV0s'@;
put 'aG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOltmbyhbVlksQlldKSxiZChbYWddKV0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxZ'@;
put 'cigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IGhVZT1bImJvdHRvbS1sZWZ0IiwiYm90dG9tLXJpZ2h0IiwidG9wLWxlZnQiLCJ0b3AtcmlnaHQiLCJyaWdodCIsImxlZnQiXSxmVWU9WyJ4cyIsInNtIiwibWQiLCJsZyJdO2xldCBtNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMg'@;
put 'UFl7Y29uc3RydWN0b3IoYSxkLGgsZil7aWYoc3VwZXIoYSxkKSx0aGlzLnRvb2x0aXBJZFNlcnZpY2U9aCx0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2U9ZiwhZCl0aHJvdyBuZXcgRXJyb3IoImNsci10b29sdGlwLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHIt'@;
put 'dG9vbHRpcCIpO3RoaXMuaWQ9U3UoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe2NvbnN0IGQ9YXx8IiI7dGhpcy5faWQ9ZCx0aGlzLnRvb2x0aXBJZFNlcnZpY2UudXBkYXRlSWQoZCl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlv'@;
put 'bihhKXtjb25zdCBkPXRoaXMuX3Bvc2l0aW9uLGg9aFVlLmluY2x1ZGVzKGEpP2E6InJpZ2h0Ijtzd2l0Y2godGhpcy5fcG9zaXRpb249aCx0aGlzLnVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczpgdG9vbHRpcC0ke2R9YCxuZXdDbGFzczpgdG9vbHRpcC0ke2h9YH0pLGgpe2Nhc2UidG9wLXJp'@;
put 'Z2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX0JPVFRPTTticmVhaztjYXNl'@;
put 'ImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9U'@;
put 'T1A7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5hbmNob3JQb2ludD1BaS5SSUdIVF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJsZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUFpLkxFRlRfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX1RPUDti'@;
put 'cmVhaztkZWZhdWx0OiFmdW5jdGlvbiBkVWUoYyl7dGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgdmFsdWU6ICR7Y31gKX0oaCl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29uc3QgZD10aGlzLl9zaXplLGg9ZlVlLmluY2x1ZGVzKGEpP2E6InNtIjt0aGlz'@;
put 'Ll9zaXplPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3Q2xhc3M6YHRvb2x0aXAtJHtofWB9KX1uZ09uSW5pdCgpe3RoaXMuc2l6ZT10aGlzLnNpemV8fCJzbSIsdGhpcy5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufHwicmlnaHQifW9uTW91c2VFbnRl'@;
put 'cigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJDb250ZW50KCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZUNvbnRlbnQoKX11cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YSxuZXdDbGFzczpkfSl7dGhpcy5yZW5kZXJl'@;
put 'ci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERzKSxHZShITCw4KSxHZShWWSksR2UoQlkp'@;
put 'KX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAtY29udGVudCJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVyKCl9KSgibW91c2Vs'@;
put 'ZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKGFwKCJpZCIsZC5pZCksZnIoInJvbGUiLCJ0b29sdGlwIiksd2QoIm9wYWNpdHkiLDEpLFRyKCJ0b29sdGlwLWNvbnRlbnQiLCEwKSl9LGlucHV0czp7aWQ6ImlkIixwb3NpdGlvbjpbam4uTm9uZSwiY2xy'@;
put 'UG9zaXRpb24iLCJwb3NpdGlvbiJdLHNpemU6W2puLk5vbmUsImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOltDb10sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0p'@;
put 'LGN9KSgpLHY3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1oLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChkLmlkLnN1YnNjcmliZShmPT50aGlzLmFyaWFEZXNjcmliZWRCeT1mKSl9bmdP'@;
put 'bkRlc3Ryb3koKXt0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNob3dUb29sdGlwKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9aGlkZVRvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX1vbk1vdXNlRW50ZXIoKXt0aGlzLnRvb2x0aXBNb3VzZVNl'@;
put 'cnZpY2Uub25Nb3VzZUVudGVyVHJpZ2dlcigpfW9uTW91c2VMZWF2ZSgpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlTGVhdmVUcmlnZ2VyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNjKSxHZShWWSksR2UoQlkpKX0sYy5c'@;
put 'dTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVG9vbHRpcFRyaWdnZXIiLCIiXV0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zaG93'@;
put 'VG9vbHRpcCgpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaGlkZVRvb2x0aXAoKX0pKCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VFbnRlcigpfSkoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUxlYXZlKCl9KSwyJmEmJihmcigi'@;
put 'YXJpYS1kZXNjcmliZWRieSIsZC5hcmlhRGVzY3JpYmVkQnkpKCJyb2xlIiwiYnV0dG9uIiksVHIoInRvb2x0aXAtdHJpZ2dlciIsITApKX19KSxjfSkoKSxwVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1'@;
put 'bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sSTIsVHNdfSksY30pKCksZ1VlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9'@;
put 'QXIoe2ltcG9ydHM6W0ZZLHVVZSxwVWVdfSksY30pKCk7dmFyIGI3PWZ1bmN0aW9uKGMpe3JldHVybiBjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsYy5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixjLkNPTVBBQ1Q9ImNvbXBhY3QiLGN9KGI3fHx7fSk7bGV0IENwPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoKXt0aGlzLm1pbkxhYmVsU2l6ZT0xLHRoaXMubWF4TGFiZWxTaXplPTEyLHRoaXMubGF5b3V0PWI3LkhPUklaT05UQUwsdGhpcy5sYXlvdXRWYWx1ZXM9T2JqZWN0LmtleXMoYjcpLm1hcChhPT5iN1thXSksdGhpcy5fbGFiZWxTaXplPTJ9Z2V0IGxhYmVsU2l6ZSgpe3JldHVybiB0'@;
put 'aGlzLl9sYWJlbFNpemV9c2V0IGxhYmVsU2l6ZShhKXt0aGlzLmxhYmVsU2l6ZUlzVmFsaWQoYSkmJih0aGlzLl9sYWJlbFNpemU9YSl9Z2V0IGxheW91dENsYXNzKCl7cmV0dXJuYGNsci1mb3JtLSR7dGhpcy5sYXlvdXR9YH1pc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09Yjcu'@;
put 'VkVSVElDQUx9aXNIb3Jpem9udGFsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09YjcuSE9SSVpPTlRBTH1pc0NvbXBhY3QoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1iNy5DT01QQUNUfWlzVmFsaWQoYSl7cmV0dXJuIHRoaXMubGF5b3V0VmFsdWVzLmluZGV4T2YoYSk+LTF9bGFiZWxTaXplSXNW'@;
put 'YWxpZChhKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihhKSYmYT49dGhpcy5taW5MYWJlbFNpemUmJmE8PXRoaXMubWF4TGFiZWxTaXplfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c'@;
put 'dTAyNzVmYWN9KSxjfSkoKSxkcz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5sYXlvdXRTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZWw9dix0aGlzLmVuYWJsZUdy'@;
put 'aWQ9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdfWdldCBsYWJlbFRleHQoKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnR9bmdPbkluaXQoKXt0aGlzLmlkQXR0cj10aGlzLmlkSW5wdXQsKHRoaXMuY29udHJvbElkU2Vydmlj'@;
put 'ZXx8dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlKSYmdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImNsci1jb250cm9sLWxhYmVsIiksdGhpcy5lbmFibGVHcmlkJiZ0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpJiZ0'@;
put 'aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpPDAmJih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbC0xMiIpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5l'@;
put 'bC5uYXRpdmVFbGVtZW50LGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX1gKSksdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYhdGhpcy5mb3JBdHRyJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWRDaGFuZ2Uuc3Vic2NyaWJl'@;
put 'KGE9Pnt0aGlzLmZvckF0dHI9YSx0aGlzLmlkQXR0cj10aGlzLmlkSW5wdXR8fGAke2F9LWxhYmVsYH0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9ZGlzYWJsZUdyaWQoKXt0aGlzLmVuYWJsZUdyaWQ9ITF9b25DbGljayhh'@;
put 'KXt0aGlzLnByZXZlbnREZWZhdWx0T25TaWducG9zdFRhcmdldChhKX1wcmV2ZW50RGVmYXVsdE9uU2lnbnBvc3RUYXJnZXQoYSl7dGhpcy5zaWducG9zdCYmdGhpcy5zaWducG9zdC5uYXRpdmVFbGVtZW50JiZ0aGlzLnNpZ25wb3N0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS50YXJnZXQp'@;
put 'JiZhLnByZXZlbnREZWZhdWx0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFNoLDgpLEdlKENwLDgpLEdlKGYxLDgpLEdlKEVhKSxHZShKaSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJsYWJlbCJdXSxjb250ZW50'@;
put 'UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZsYShoLFpMLDUsSmkpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQuc2lnbnBvc3Q9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4g'@;
put 'ZC5vbkNsaWNrKGYpfSksMiZhJiZmcigiaWQiLGQuaWRBdHRyKSgiZm9yIixkLmZvckF0dHIpfSxpbnB1dHM6e2lkSW5wdXQ6W2puLk5vbmUsImlkIiwiaWRJbnB1dCJdLGZvckF0dHI6W2puLk5vbmUsImZvciIsImZvckF0dHIiXX19KSxjfSkoKSxtVWU9KCgpPT57Y2xhc3MgYyBleHRlbmRz'@;
put 'IE9Ze2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJzdWNjZXNzIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uo'@;
put 'U2gsOCksR2UoaDcsOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoZnIoImlkIixkLmlkKSxUcigiY2xyLXN1YnRleHQiLCEwKSgic3VjY2VzcyIs'@;
put 'ITApKX0sZmVhdHVyZXM6W0NvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksRGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxheW91'@;
put 'dFNlcnZpY2U9YSx0aGlzLmNsYXNzTmFtZT0iIn1jb250cm9sQ2xhc3MoYT1BZC5OT05FLGQ9ITEsaD0iIil7Y29uc3QgZj1bdGhpcy5jbGFzc05hbWUsaF07c3dpdGNoKGEpe2Nhc2UgQWQuVkFMSUQ6Zi5wdXNoKCJjbHItc3VjY2VzcyIpO2JyZWFrO2Nhc2UgQWQuSU5WQUxJRDpmLnB1c2go'@;
put 'ImNsci1lcnJvciIpfXJldHVybiBkJiZ0aGlzLmxheW91dFNlcnZpY2UmJi0xPT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZigiY2xyLWNvbCIpJiZmLnB1c2goYGNsci1jb2wtbWQtJHt0aGlzLmxheW91dFNlcnZpY2UubWF4TGFiZWxTaXplLXRoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemV9'@;
put 'IGNsci1jb2wtMTJgKSxmLmpvaW4oIiAiKS50cmltKCl9aW5pdENvbnRyb2xDbGFzcyhhLGQpe2QmJmQuY2xhc3NOYW1lJiYodGhpcy5jbGFzc05hbWU9ZC5jbGFzc05hbWUsZC5jbGFzc05hbWUuc3BsaXQoIiAiKS5mb3JFYWNoKGY9PntmLnN0YXJ0c1dpdGgoImNsci1jb2wiKSYmYS5yZW1v'@;
put 'dmVDbGFzcyhkLGYpfSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihDcCw4KSl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkseTc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm'@;
put 'KXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1hLHRoaXMubGF5b3V0U2VydmljZT1kLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1oLHRoaXMubmdDb250cm9sU2VydmljZT1mLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLnN0YXR1c0NoYW5nZXMu'@;
put 'c3Vic2NyaWJlKHY9Pnt0aGlzLnN0YXRlPXYsc2V0VGltZW91dCgoKT0+e3RoaXMudXBkYXRlSGVscGVycygpfSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZi5jb250cm9sQ2hhbmdlcy5zdWJzY3JpYmUodj0+e3RoaXMuY29udHJvbD12fSksZi5hZGRpdGlvbmFsQ29udHJvbHNDaGFu'@;
put 'Z2VzLnN1YnNjcmliZSh2PT57dGhpcy5hZGRpdGlvbmFsQ29udHJvbHM9dn0pKX1nZXQgc2hvd0hlbHBlcigpe3JldHVybiEhdGhpcy5jb250cm9sSGVscGVyQ29tcG9uZW50fWdldCBzaG93VmFsaWQoKXtyZXR1cm4gdGhpcy50b3VjaGVkJiZ0aGlzLnN0YXRlPT09QWQuVkFMSUQmJnRoaXMu'@;
put 'c3VjY2Vzc01lc3NhZ2VQcmVzZW50fWdldCBzaG93SW52YWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1BZC5JTlZBTElEJiZ0aGlzLmVycm9yTWVzc2FnZVByZXNlbnR9Z2V0IHN1Y2Nlc3NNZXNzYWdlUHJlc2VudCgpe3JldHVybiEhdGhpcy5jb250cm9sU3VjY2Vz'@;
put 'c0NvbXBvbmVudH1nZXQgZXJyb3JNZXNzYWdlUHJlc2VudCgpe3JldHVybiEhdGhpcy5jb250cm9sRXJyb3JDb21wb25lbnR9Z2V0IHRvdWNoZWQoKXtyZXR1cm4hKCF0aGlzLmNvbnRyb2w/LnRvdWNoZWQmJiF0aGlzLmFkZGl0aW9uYWxDb250cm9scz8uc29tZShhPT5hLnRvdWNoZWQpKX1u'@;
put 'Z0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnVwZGF0ZUhlbHBlcnMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29udHJvbENsYXNzKCl7cmV0dXJuIHRoaXMuY29udHJvbENsYXNzU2VydmljZS5jb250cm9sQ2xhc3MoIXRo'@;
put 'aXMuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1BZC5WQUxJRHx8IXRoaXMudG91Y2hlZD9BZC5OT05FOnRoaXMuc3RhdGUsdGhpcy5hZGRHcmlkKCkpfWFkZEdyaWQoKXtyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVydGlj'@;
put 'YWwoKX11cGRhdGVIZWxwZXJzKCl7dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0SGVscGVycyh7c2hvdzp0aGlzLnNob3dJbnZhbGlkfHx0aGlzLnNob3dIZWxwZXJ8fHRoaXMuc2hvd1ZhbGlkLHNob3dJbnZhbGlkOnRoaXMuc2hvd0ludmFsaWQsc2hv'@;
put 'd0hlbHBlcjp0aGlzLnNob3dIZWxwZXIsc2hvd1ZhbGlkOnRoaXMuc2hvd1ZhbGlkfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGtkKSxHZShDcCw4KSxHZShEZCksR2UoZjEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Yyxjb250ZW50UXVl'@;
put 'cmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYobGEoaCxkcyw1KSxsYShoLG1VZSw1KSxsYShoLGVVZSw1KSxsYShoLEJMLDUpKSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLmxhYmVsPWYuZmlyc3QpLHhpKGY9RWkoKSkmJihkLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50PWYuZmlyc3Qp'@;
put 'LHhpKGY9RWkoKSkmJihkLmNvbnRyb2xFcnJvckNvbXBvbmVudD1mLmZpcnN0KSx4aShmPUVpKCkpJiYoZC5jb250cm9sSGVscGVyQ29tcG9uZW50PWYuZmlyc3QpfX19KSxjfSkoKTtjbGFzcyBXTHtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9yPWEuaW5qZWN0b3IsIXRo'@;
put 'aXMuaW5qZWN0b3IuZ2V0KGwsbnVsbCkpe2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQoWjUpLGY9dGhpcy5pbmplY3Rvci5nZXQoSmkpO2EuY3JlYXRlQ29tcG9uZW50KGgucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoWHplKSk7Y29uc3Qgdj1oLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwp'@;
put 'LE09W107TVtkXT1bZi5uYXRpdmVFbGVtZW50XTtjb25zdCBEPWEuY3JlYXRlQ29tcG9uZW50KHYsdm9pZCAwLHZvaWQgMCxNKTthLnJlbW92ZSgwKSx0aGlzLmluamVjdG9yPUQuaW5qZWN0b3J9fWdldChsLGEpe3JldHVybiB0aGlzLmluamVjdG9yLmdldChsLGEpfX1sZXQgalk9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvdWNoZWQ9bmV3IFdufWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWQuYXNPYnNlcnZhYmxlKCl9bWFya0FzVG91Y2hlZCgpe3RoaXMuX3RvdWNoZWQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgelk9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuRk9STT0iZm9ybSIsYy5NT0RFTD0ibW9kZWwiLGN9KHpZfHx7fSk7bGV0IF83PSgoKT0+e2NsYXNzIGN7Y29u'@;
put 'c3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMudmNyPWEsdGhpcy53cmFwcGVyVHlwZT1kLHRoaXMuX25nQ29udHJvbD1mLHRoaXMucmVuZGVyZXI9dix0aGlzLmVsPU0sdGhpcy5pbmRleD0wLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmFkZGl0aW9uYWxEaWZmZXI9bmV3IE1hcCxoJiYo'@;
put 'dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWguZ2V0KGYxLG51bGwpLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWguZ2V0KGtkLG51bGwpLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1oLmdldChEZCxudWxsKSx0aGlzLm1hcmtDb250cm9sU2VydmljZT1oLmdldChqWSxudWxsKSx0aGlzLmRp'@;
put 'ZmZlcnM9aC5nZXQod00sbnVsbCkpLHRoaXMuY29udHJvbENsYXNzU2VydmljZSYmdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlLmluaXRDb250cm9sQ2xhc3ModixNLm5hdGl2ZUVsZW1lbnQpLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm1h'@;
put 'cmtDb250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMubWFya0FzVG91Y2hlZCgpfSkpLHRoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmhlbHBlcnNDaGFuZ2Uuc3Vic2NyaWJlKEQ9'@;
put 'Pnt0aGlzLnNldEFyaWFEZXNjcmliZWRCeShEKX0pKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYodGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPWEpfWdldCBoYXNBZGRpdGlvbmFsQ29udHJvbHMoKXtyZXR1cm4g'@;
put 'dGhpcy5hZGRpdGlvbmFsRGlmZmVyLnNpemU+MH1uZ09uSW5pdCgpe3RoaXMuX2NvbnRhaW5lckluamVjdG9yPW5ldyBXTCh0aGlzLndyYXBwZXJUeXBlLHRoaXMudmNyLHRoaXMuaW5kZXgpLHRoaXMuY29udHJvbElkU2VydmljZT10aGlzLl9jb250YWluZXJJbmplY3Rvci5nZXQoU2gpLHRo'@;
put 'aXMuY29udGFpbmVySWRTZXJ2aWNlPXRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChoNyxudWxsKSx0aGlzLl9pZD90aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWQ9dGhpcy5faWQ6dGhpcy5faWQ9dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkLHRoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5f'@;
put 'bmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2w/KHRoaXMubmdDb250cm9sPXRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sLHRoaXMubmdDb250cm9sU2VydmljZS5hZGRBZGRpdGlvbmFsQ29udHJvbCh0aGlzLl9uZ0NvbnRyb2wpLHRoaXMuYWRkaXRpb25hbERp'@;
put 'ZmZlci5zZXQodGhpcy5fbmdDb250cm9sLHRoaXMuZGlmZmVycy5maW5kKHRoaXMuX25nQ29udHJvbCkuY3JlYXRlKCkpKToodGhpcy5uZ0NvbnRyb2w9dGhpcy5fbmdDb250cm9sLHRoaXMubmdDb250cm9sU2VydmljZS5zZXRDb250cm9sKHRoaXMubmdDb250cm9sKSx0aGlzLmRpZmZlcj10'@;
put 'aGlzLmRpZmZlcnMuZmluZCh0aGlzLl9uZ0NvbnRyb2wpLmNyZWF0ZSgpKSl9bmdEb0NoZWNrKCl7aWYodGhpcy50cmlnZ2VyRG9DaGVjayh0aGlzLmRpZmZlcix0aGlzLm5nQ29udHJvbCksdGhpcy5oYXNBZGRpdGlvbmFsQ29udHJvbHMpZm9yKGNvbnN0W2EsZF1vZiB0aGlzLmFkZGl0aW9u'@;
put 'YWxEaWZmZXIpdGhpcy50cmlnZ2VyRG9DaGVjayhkLGEpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YT8udW5zdWJzY3JpYmUoKSl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZSYmdGhpcy5pZkNvbnRyb2xTdGF0ZVNl'@;
put 'cnZpY2UudHJpZ2dlclN0YXR1c0NoYW5nZSgpfWdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihhLGQpe3RyeXtyZXR1cm4gdGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGEsZCl9Y2F0Y2h7cmV0dXJuIGR9fXRyaWdnZXJEb0NoZWNrKGEsZCl7aWYoYSl7Y29uc3QgaD1hLmRpZmYoZCk7aCYm'@;
put 'aC5mb3JFYWNoQ2hhbmdlZEl0ZW0oZj0+eyhmLmtleT09PXpZLkZPUk18fGYua2V5PT09elkuTU9ERUwpJiZmLmN1cnJlbnRWYWx1ZSE9PWYucHJldmlvdXNWYWx1ZSYmdGhpcy50cmlnZ2VyVmFsaWRhdGlvbigpfSl9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29udHJvbCYmKHRoaXMubmdD'@;
put 'b250cm9sLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpLHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdDb250cm9sU2VydmljZS5oYXNBZGRpdGlvbmFsQ29udHJvbHMmJnRoaXMubmdDb250cm9sU2Vy'@;
put 'dmljZS5hZGRpdGlvbmFsQ29udHJvbHM/LmZvckVhY2goYT0+e2EuY29udHJvbC5tYXJrQXNUb3VjaGVkKCksYS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pfXNldEFyaWFEZXNjcmliZWRCeShhKXtpZihhLnNob3cpe2NvbnN0IGQ9dGhpcy5nZXRBcmlhRGVzY3JpYmVkQnlJ'@;
put 'ZChhKTtpZihudWxsIT09ZClyZXR1cm4gdm9pZCB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnkiLGQpfXRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1kZXNjcmli'@;
put 'ZWRieSIpfWdldEFyaWFEZXNjcmliZWRCeUlkKGEpe2NvbnN0IGQ9dGhpcy5jb250YWluZXJJZFNlcnZpY2U/LmlkfHx0aGlzLmNvbnRyb2xJZFNlcnZpY2U/LmlkO2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9W2Ake2R9LWhlbHBlcmBdO3JldHVybiBhLnNob3dJbnZhbGlkP2gucHVzaChg'@;
put 'JHtkfS1lcnJvcmApOmEuc2hvd1ZhbGlkJiZoLnB1c2goYCR7ZH0tc3VjY2Vzc2ApLGguam9pbigiICIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEYSksR2UoQjYpLEdlKERzKSxHZShkMSksR2UoRWEpLEdlKEppKSl9LGMuXHUwMjc1ZGly'@;
put 'PUVyKHt0eXBlOmMsaG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSwyJmEmJmFwKCJpZCIsZC5pZCl9LGlucHV0czp7aWQ6ImlkIn19KSxjfSkoKSxxMWU9KCgpPT57Y2xh'@;
put 'c3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGF5b3V0U2VydmljZT1hLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWR9c2V0IGxhYmVsU2l6ZShhKXtjb25zdCBkPXBhcnNlSW50KGEsMTApfHwyO3RoaXMubGF5b3V0U2VydmljZS5sYWJlbFNpemU9ZH1vbkZvcm1TdWJtaXQoKXt0aGlzLm1h'@;
put 'cmtBc1RvdWNoZWQoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5tYXJrQ29udHJvbFNlcnZpY2UubWFya0FzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDcCksR2UoalkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siIiwiY2xyRm9ybSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZsYShoLGRzLDUpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQubGFiZWxzPWYpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJzdWJtaXQi'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Gb3JtU3VibWl0KCl9KSwyJmEmJlRyKCJjbHItZm9ybSIsITApKCJjbHItZm9ybS1ob3Jpem9udGFsIixkLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpKCJjbHItZm9ybS1jb21wYWN0IixkLmxheW91dFNlcnZpY2UuaXNDb21wYWN0KCkpfSxp'@;
put 'bnB1dHM6e2xhYmVsU2l6ZTpbam4uTm9uZSwiY2xyTGFiZWxTaXplIiwibGFiZWxTaXplIl19LGZlYXR1cmVzOltmbyhbQ3AsalldKV19KSxjfSkoKSxpdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RXMuYWRkSWNvbnMoYmgseWgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxUc119KSxjfSkoKTtjb25zdCBVWT1uZXcgU3QoIklTX1RPR0dMRSIpLF9VZT17cHJvdmlkZTpVWSx1c2VGYWN0b3J5OmZ1bmN0aW9uIHlVZSgpe3JldHVybiBu'@;
put 'ZXcgZWkoITEpfX07bGV0IElkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50b2dnbGU9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuc3Vic2NyaWJlKGQ9Pnt0aGlzLnRvZ2dsZT1kfSkpfW5nT25Jbml0KCl7dGhpcy5sYWJlbCYm'@;
put 'dGhpcy5sYWJlbC5kaXNhYmxlR3JpZCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoVVkpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbImNsci10b2dnbGUtd3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYobGEoaCxkcyw3KSxsYShoLFcxLDcpKSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLmxhYmVsPWYuZmlyc3Qp'@;
put 'LHhpKGY9RWkoKSkmJihkLmNoZWNrYm94PWYuZmlyc3QpfX0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItY2hlY2tib3gtd3JhcHBlciIsIWQudG9nZ2xlKSgiY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQiLG51bGw9PWQuY2hlY2tib3g/'@;
put 'bnVsbDpkLmNoZWNrYm94LmNvbnRyb2xEaXNhYmxlZCkoImNsci10b2dnbGUtd3JhcHBlciIsZC50b2dnbGUpfSxmZWF0dXJlczpbZm8oW1NoLF9VZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eEhlLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJihsbyhNSGUpLFlyKDApLFlyKDEsMSksbXQoMixFSGUsMSwwLCJsYWJlbCIsMCkpLDImYSYmKGZlKDIpLHhlKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W3lvLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxXMT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgXzd7'@;
put 'Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3N1cGVyKGEsSWQsZCxoLGYsdiksdGhpcy5jb250cm9sPWgsdGhpcy50b2dnbGU9TX1nZXQgY29udHJvbERpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8uZGlzYWJsZWR9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpO2NvbnN0IGE9dGhp'@;
put 'cy5nZXRQcm92aWRlckZyb21Db250YWluZXIoVVksbnVsbCk7YSYmbnVsbCE9PXRoaXMudG9nZ2xlJiZhLm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEYSksR2UoRHMpLEdlKGQxLDEwKSxHZShFYSksR2UoSmkpLEFmKCJjbHJU'@;
put 'b2dnbGUiKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmZyKCJyb2xlIixudWxsIT09ZC50b2dnbGU/InN3aXRjaCI6'@;
put 'bnVsbCl9LGZlYXR1cmVzOltDb119KSxjfSkoKSxWeT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgeTd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgs'@;
put 'dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLmlubGluZT0hMX1nZXQgY2xySW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNldCBjbHJJbmxpbmUoYSl7dGhpcy5pbmxpbmU9InN0cmluZyI9PXR5cGVvZiBhPyJmYWxzZSIhPT1hOiEhYX1nZXQgYWxsQ2hlY2tib3hlc0Rpc2Fi'@;
put 'bGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8uZGlzYWJsZWQmJighdGhpcy5hZGRpdGlvbmFsQ29udHJvbHM/Lmxlbmd0aHx8dGhpcy5hZGRpdGlvbmFsQ29udHJvbHMuZXZlcnkoYT0+YS5kaXNhYmxlZCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCl9c2V0QXJp'@;
put 'YVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMuY2hlY2tib3hlcy5sZW5ndGg/Imdyb3VwIjpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDcCw4KSxHZShEZCksR2UoZjEpLEdlKGtkKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0'@;
put 'b3JzOltbImNsci1jaGVja2JveC1jb250YWluZXIiXSxbImNsci10b2dnbGUtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgsVzEsNSksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5jaGVja2JveGVzPWYpfX0saG9zdFZhcnM6Nyxob3N0'@;
put 'QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihmcigicm9sZSIsZC5yb2xlKSxUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmFsbENoZWNrYm94ZXNEaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5s'@;
put 'aW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbZm8oW2tkLGYxLERkLGg3XSksQ29dLG5nQ29udGVudFNlbGVjdG9yczpBSGUsZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2xyLXN1YnRl'@;
put 'eHQtd3JhcHBlciIsNCwibmdJZiJdLFsxLCJjbHItc3VidGV4dC13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwi'@;
put 'Y2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJj'@;
put 'bHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKFRIZSksWXIoMCksbXQoMSxrSGUsMSwwLCJs'@;
put 'YWJlbCIsMCksZGUoMiwiZGl2IiwxKSxZcigzLDEpLG10KDQsREhlLDIsMCwiZGl2IiwyKSg1LFBIZSw1LDQsImRpdiIsMiksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLFRyKCJjbHItY29udHJvbC1pbmxpbmUiLGQuY2xySW5saW5lKSx4'@;
put 'ZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMikseGUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZHx8ZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt3dSx5byx1cyxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksd1VlPSgoKT0+'@;
put 'e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhiaCx5aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLFRzLGl1LFZ4LGl1XX0pLGN9KSgp'@;
put 'O2Z1bmN0aW9uIHFmKGMpe3JldHVybiBudWxsIT09YyYmKCJzdHJpbmciPT10eXBlb2YgYz9jLmxlbmd0aD49MDoiYm9vbGVhbiI9PXR5cGVvZiBjJiZjKX1sZXQgTWg9KCgpPT57Y2xhc3MgY3tnZXQgc3Bpbm5lckNsYXNzKCl7cmV0dXJuITB9Z2V0IGlubGluZUNsYXNzKCl7cmV0dXJuIHRo'@;
put 'aXMuX2lubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuX2lubGluZT1xZihhKX1nZXQgaW52ZXJzZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2ludmVyc2V9c2V0IGNsckludmVyc2UoYSl7dGhpcy5faW52ZXJzZT1xZihhKX1nZXQgc21hbGxDbGFzcygpe3JldHVybiB0aGlzLl9zbWFsbH1zZXQg'@;
put 'Y2xyU21hbGwoYSl7dGhpcy5fc21hbGw9cWYoYSl9Z2V0IG1lZGl1bUNsYXNzKCl7cmV0dXJuIXRoaXMuX3NtYWxsJiZ0aGlzLl9tZWRpdW19c2V0IGNsck1lZGl1bShhKXt0aGlzLl9tZWRpdW09cWYoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'fSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3Bpbm5lciJdXSxob3N0VmFyczoxMSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihmcigiYXJpYS1idXN5IiwhMCksVHIoInNwaW5uZXIiLGQuc3Bpbm5lckNsYXNzKSgic3Bpbm5lci1pbmxpbmUiLGQu'@;
put 'aW5saW5lQ2xhc3MpKCJzcGlubmVyLWludmVyc2UiLGQuaW52ZXJzZUNsYXNzKSgic3Bpbm5lci1zbSIsZC5zbWFsbENsYXNzKSgic3Bpbm5lci1tZCIsZC5tZWRpdW1DbGFzcykpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIixjbHJJbnZlcnNlOiJjbHJJbnZlcnNlIixjbHJTbWFs'@;
put 'bDoiY2xyU21hbGwiLGNsck1lZGl1bToiY2xyTWVkaXVtIn0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEJ5PSgoKT0+e2NsYXNzIGN7fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0pLGN9KSgpO3ZhciB2bT1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0i'@;
put 'aG9yaXpvbnRhbCIsYy5CT1RIPSJib3RoIixjfSh2bXx8e30pO2xldCBYMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMucGxhdGZvcm1JZD1kfWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVt'@;
put 'ZW50fWZvY3VzKCl7ZWwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKG9hKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0'@;
put 'b3JzOltbIiIsImNscktleUZvY3VzSXRlbSIsIiJdXX0pLGN9KSgpLGp5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5lbGVtZW50UmVmPWEsdGhpcy5kaXJlY3Rpb249dm0uVkVSVElDQUwsdGhpcy5mb2N1c09uTG9hZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5m'@;
put 'b2N1c0NoYW5nZT1uZXcgWHIsdGhpcy5fY3VycmVudD0wfWdldCBmb2N1c2FibGVJdGVtcygpe3JldHVybiB0aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLl9mb2N1c2FibGVJdGVtczp0aGlzLmNscktleUZvY3VzSXRlbXM/dGhpcy5jbHJLZXlGb2N1c0l0ZW1zLnRvQXJyYXkoKTpbXX1zZXQg'@;
put 'Zm9jdXNhYmxlSXRlbXMoYSl7QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGgmJih0aGlzLl9mb2N1c2FibGVJdGVtcz1hLHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCkpfWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fWdldCBjdXJyZW50KCl7'@;
put 'cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEpfWdldCBjdXJyZW50SXRlbSgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW1zW3RoaXMuX2N1cnJlbnRdfWdldCBjdXJyZW50SXRlbUVsZW1lbnQoKXtyZXR1cm4g'@;
put 'dGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50P3RoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudDp0aGlzLmN1cnJlbnRJdGVtfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9ySXRlbVVwZGF0ZXMoKSksdGhpcy5pbml0aWFs'@;
put 'aXplRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlS2V5Ym9hcmRFdmVudChhKXtpZih0aGlzLmN1cnJlbnRJdGVtRWxlbWVudCE9PWEudGFyZ2V0KXtjb25zdCBkPXRoaXMuZ2V0SXRlbVBvc2l0aW9uKGEu'@;
put 'dGFyZ2V0KTt0aGlzLnBvc2l0aW9uSW5SYW5nZShkKSYmKHRoaXMuY3VycmVudD1kKX10aGlzLnByZXZLZXlQcmVzc2VkKGEpJiZ0aGlzLmN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50LTEpOnRoaXMubmV4dEtleVByZXNzZWQoYSkmJnRoaXMu'@;
put 'Y3VycmVudEZvY3VzSXNOb3RMYXN0SXRlbSgpP3RoaXMubW92ZVRvKHRoaXMuY3VycmVudCsxKTphLmNvZGU9PT1RaS5Ib21lP3RoaXMubW92ZVRvKDApOmEuY29kZT09PVFpLkVuZCYmdGhpcy5tb3ZlVG8odGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgtMSksRFkoYSl9c2V0Q2xpY2tlZEl0'@;
put 'ZW1DdXJyZW50KGEpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO2Q+LTEmJnRoaXMubW92ZVRvKGQpfWZvY3VzQ3VycmVudCgpe3RoaXMuY3VycmVudEl0ZW0uZm9jdXMoKSx0aGlzLmZvY3VzQ2hhbmdlLm5leHQodGhpcy5fY3VycmVudCl9bW92ZVRvKGEpe3RoaXMu'@;
put 'cG9zaXRpb25JblJhbmdlKGEpJiYodGhpcy5jdXJyZW50PWEsdGhpcy5mb2N1c0N1cnJlbnQoKSl9cG9zaXRpb25JblJhbmdlKGEpe3JldHVybiBhPj0wJiZhPHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJl'@;
put 'bnQtMT49MH1jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQrMTx0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aH1pbml0aWFsaXplRm9jdXMoKXt0aGlzLmZvY3VzYWJsZUl0ZW1zJiZ0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aCYmKHRoaXMuX2N1cnJl'@;
put 'bnQ+PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD10aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSx0aGlzLmZvY3VzT25Mb2FkJiYodGhpcy5jdXJyZW50SXRlbS5mb2N1cygpLHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCgpKSl9bmV4dEtleVByZXNzZWQoYSl7'@;
put 'Y29uc3QgZD1BMihhLmtleSk7c3dpdGNoKHRoaXMuZGlyZWN0aW9uKXtjYXNlIHZtLlZFUlRJQ0FMOnJldHVybiBkPT09UWkuQXJyb3dEb3duO2Nhc2Ugdm0uSE9SSVpPTlRBTDpyZXR1cm4gZD09PVFpLkFycm93UmlnaHQ7Y2FzZSB2bS5CT1RIOnJldHVybiBkPT09UWkuQXJyb3dEb3dufHxk'@;
put 'PT09UWkuQXJyb3dSaWdodDtkZWZhdWx0OnJldHVybiExfX1wcmV2S2V5UHJlc3NlZChhKXtjb25zdCBkPUEyKGEua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rpb24pe2Nhc2Ugdm0uVkVSVElDQUw6cmV0dXJuIGQ9PT1RaS5BcnJvd1VwO2Nhc2Ugdm0uSE9SSVpPTlRBTDpyZXR1cm4gZD09PVFp'@;
put 'LkFycm93TGVmdDtjYXNlIHZtLkJPVEg6cmV0dXJuIGQ9PT1RaS5BcnJvd1VwfHxkPT09UWkuQXJyb3dMZWZ0O2RlZmF1bHQ6cmV0dXJuITF9fWdldEl0ZW1Qb3NpdGlvbihhKXtyZXR1cm4gdGhpcy5fZm9jdXNhYmxlSXRlbXM/dGhpcy5mb2N1c2FibGVJdGVtcy5pbmRleE9mKGEpOnRoaXMu'@;
put 'Zm9jdXNhYmxlSXRlbXMubWFwKGQ9PmQubmF0aXZlRWxlbWVudCkuaW5kZXhPZihhKX1saXN0ZW5Gb3JJdGVtVXBkYXRlcygpe3JldHVybiB0aGlzLmNscktleUZvY3VzSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmluaXRpYWxpemVGb2N1cygpfSl9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscktleUZvY3VzIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgsWDFlLDUpLDImYSl7bGV0IGY7eGko'@;
put 'Zj1FaSgpKSYmKGQuY2xyS2V5Rm9jdXNJdGVtcz1mKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUtleWJvYXJkRXZlbnQoZil9KSgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLnNldENsaWNrZWRJ'@;
put 'dGVtQ3VycmVudChmKX0pfSxpbnB1dHM6e2RpcmVjdGlvbjpbam4uTm9uZSwiY2xyRGlyZWN0aW9uIiwiZGlyZWN0aW9uIl0sZm9jdXNPbkxvYWQ6W2puLk5vbmUsImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxmb2N1c2FibGVJdGVtczpbam4uTm9uZSwiY2xyS2V5Rm9jdXMiLCJm'@;
put 'b2N1c2FibGVJdGVtcyJdfSxvdXRwdXRzOntmb2N1c0NoYW5nZToiY2xyRm9jdXNDaGFuZ2UifSxhdHRyczpGSGUsbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxZcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9'@;
put 'KSgpLFpZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0pLGN9KSgpO2NsYXNzIENVZXtjb250YWluc0l0ZW0obCl7cmV0dXJu'@;
put 'ISF0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmluY2x1ZGVzKGwpfXNlbGVjdChsKXt0aGlzLmFkZEl0ZW0obCl9dW5zZWxlY3QobCl7dGhpcy5yZW1vdmVJdGVtKGwpfWlzRW1wdHkoKXtyZXR1cm4hKHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjApfXBvcCgpe2xldCBsO3JldHVybiB0'@;
put 'aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wJiYobD10aGlzLm1vZGVsW3RoaXMubW9kZWwubGVuZ3RoLTFdLHRoaXMucmVtb3ZlSXRlbShsKSksbH10b1N0cmluZyhsLGE9LTEpe2xldCBkPSIiO3JldHVybiB0aGlzLm1vZGVsJiYoYT4tMT90aGlzLm1vZGVsW2FdJiYoZCs9bCYmdGhp'@;
put 'cy5tb2RlbFthXVtsXT90aGlzLm1vZGVsW2FdW2xdOnRoaXMubW9kZWxbYV0udG9TdHJpbmcoKSk6dGhpcy5tb2RlbC5mb3JFYWNoKGg9PntkKz1sJiZoW2xdP2hbbF06aC50b1N0cmluZygpLGQrPSIgIn0pKSxkLnRyaW0oKX1hZGRJdGVtKGwpe3RoaXMuY29udGFpbnNJdGVtKGwpfHwodGhp'@;
put 'cy5tb2RlbD10aGlzLm1vZGVsfHxbXSx0aGlzLm1vZGVsLnB1c2gobCkpfXJlbW92ZUl0ZW0obCl7aWYobnVsbD09dGhpcy5tb2RlbClyZXR1cm47Y29uc3QgYT10aGlzLm1vZGVsLmluZGV4T2YobCk7YT4tMSYmdGhpcy5tb2RlbC5zcGxpY2UoYSwxKSwwPT09dGhpcy5tb2RlbC5sZW5ndGgm'@;
put 'Jih0aGlzLm1vZGVsPW51bGwpfX1jbGFzcyBTVWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiB0aGlzLm1vZGVsPT09bH1zZWxlY3QobCl7dGhpcy5tb2RlbD1sfXVuc2VsZWN0KGwpe3RoaXMuY29udGFpbnNJdGVtKGwpJiYodGhpcy5tb2RlbD1udWxsKX1pc0VtcHR5KCl7cmV0dXJuIXRoaXMu'@;
put 'bW9kZWx9cG9wKCl7Y29uc3QgbD10aGlzLm1vZGVsO3JldHVybiB0aGlzLm1vZGVsPW51bGwsbH10b1N0cmluZyhsKXtyZXR1cm4gdGhpcy5tb2RlbD9sJiZ0aGlzLm1vZGVsW2xdP3RoaXMubW9kZWxbbF06dGhpcy5tb2RlbC50b1N0cmluZygpOiIifX1jbGFzcyBNVWUgZXh0ZW5kcyBTVWV7'@;
put 'Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2ZvY3VzQ2hhbmdlZD1uZXcgZWkobnVsbCl9Z2V0IGZvY3VzQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZWQuYXNPYnNlcnZhYmxlKCl9c2VsZWN0KGwpe3RoaXMubW9kZWwhPT1sJiYodGhpcy5tb2RlbD1s'@;
put 'LHRoaXMuX2ZvY3VzQ2hhbmdlZC5uZXh0KGwpKX19bGV0IHhVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nPSExLHRoaXMuc2hvd0FsbE9wdGlvbnM9ITAsdGhpcy5fY3VycmVudElucHV0PSIiLHRoaXMuX2lucHV0Q2hhbmdlZD1uZXcgZWkoIiIpLHRoaXMuX3Nl'@;
put 'bGVjdGlvbkNoYW5nZWQ9bmV3IGJ4KDEpLHRoaXMuaW5wdXRDaGFuZ2VkPXRoaXMuX2lucHV0Q2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudElucHV0KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRJbnB1dH1zZXQgY3VycmVudElucHV0KGEpeyIiPT09YSYmIXRoaXMubXVsdGlzZWxl'@;
put 'Y3RhYmxlJiZ0aGlzLnNldFNlbGVjdGlvblZhbHVlKG51bGwpLHRoaXMuX2N1cnJlbnRJbnB1dD1hLHRoaXMuX2lucHV0Q2hhbmdlZC5uZXh0KGEpfWdldCBzZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IG11bHRpc2Vs'@;
put 'ZWN0YWJsZSgpe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVsIGluc3RhbmNlb2YgQ1VlfXNlbGVjdChhKXtudWxsPT1hfHx0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4'@;
put 'dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dG9nZ2xlKGEpe251bGwhPWEmJih0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKT90aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEpOnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQu'@;
put 'bmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dW5zZWxlY3QoYSl7bnVsbD09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2Rl'@;
put 'bCkpfXNldFNlbGVjdGlvblZhbHVlKGEpeyF0aGlzLnNlbGVjdGlvbk1vZGVsfHx0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsPT09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWwmJiFhfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD1hLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4'@;
put 'dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2oxZSgoKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYp'@;
put 'e3RoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuc2VsZWN0aW9uU2VydmljZT1oLHRoaXMucGxhdGZvcm1JZD1mLHRoaXMucHNldWRvRm9jdXM9bmV3IE1VZSx0aGlzLm9wdGlvbkRhdGE9W10sdGhpcy5oYW5kbGVGb2N1c1N1YnNjcmlwdGlvbigpLHRoaXMucmVuZGVyZXI9YS5jcmVhdGVSZW5k'@;
put 'ZXJlcihudWxsLG51bGwpfWdldCB0cmlnZ2VyKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ9c2V0IHRyaWdnZXIoYSl7dGhpcy5fdHJpZ2dlcj1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgbGlzdGJveCgpe3JldHVybiB0aGlzLl9saXN0Ym94fXNldCBsaXN0Ym94KGEpe3Ro'@;
put 'aXMuX2xpc3Rib3g9YSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Z2V0IHRleHRJbnB1dCgpe3JldHVybiB0aGlzLl90ZXh0SW5wdXR9c2V0IHRleHRJbnB1dChhKXt0aGlzLl90ZXh0SW5wdXQ9YSx0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duIixkPT4hdGhpcy5oYW5k'@;
put 'bGVUZXh0SW5wdXQoZCkpLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1mb2N1c0lucHV0KCl7dGhpcy50ZXh0SW5wdXQmJmVsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudGV4dElucHV0LmZvY3VzKCl9Zm9jdXNGaXJzdEFjdGl2ZSgpe2lmKHRoaXMub3B0aW9uRGF0YS5sZW5ndGg+'@;
put 'MClpZih0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpKXRoaXMucHNldWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9uRGF0YVswXSk7ZWxzZXtsZXQgYTthPXRoaXMuc2VsZWN0aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGU/dGhpcy5zZWxlY3Rpb25TZXJ2'@;
put 'aWNlLnNlbGVjdGlvbk1vZGVsLm1vZGVsWzBdOnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5tb2RlbDtjb25zdCBkPXRoaXMub3B0aW9uRGF0YS5maW5kKGg9PmgudmFsdWU9PT1hKTt0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdChkfHx0aGlzLm9wdGlvbkRhdGFbMF0pLHRo'@;
put 'aXMuc2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoImF1dG8iKX19YWRkT3B0aW9uVmFsdWVzKGEpe3RoaXMub3B0aW9uRGF0YT1hfWhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthfHwodGhpcy5wc2V1ZG9Gb2N1cy5t'@;
put 'b2RlbD1udWxsKX0pfW1vdmVGb2N1c1RvKGEpe2xldCBkPXRoaXMub3B0aW9uRGF0YS5maW5kSW5kZXgoaD0+aC5lcXVhbHModGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCkpO2E9PT1DaC5VUD8tMT09PWR8fDA9PT1kP2Q9dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xOmQtLTphPT09Q2guRE9XTiYm'@;
put 'KC0xPT09ZHx8ZD09PXRoaXMub3B0aW9uRGF0YS5sZW5ndGgtMT9kPTA6ZCsrKSx0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdCh0aGlzLm9wdGlvbkRhdGFbZF0pLHRoaXMuc2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoKX1vcGVuQW5kTW92ZVRvKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuP3Ro'@;
put 'aXMubW92ZUZvY3VzVG8oYSk6KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnBpcGUoVWYoMSkpLnN1YnNjcmliZShkPT57ZCYmdGhpcy5tb3ZlRm9jdXNUbyhhKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1oYW5kbGVUZXh0SW5wdXQoYSl7bGV0IGQ9ITE7Y29uc3QgaD1B'@;
put 'MihhLmtleSk7aWYoYSlzd2l0Y2goaCl7Y2FzZSBRaS5FbnRlcjp0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGU/dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnRvZ2dsZSh0aGlzLnBzZXVk'@;
put 'b0ZvY3VzLm1vZGVsLnZhbHVlKTp0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0KHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpLGQ9ITApO2JyZWFrO2Nhc2UgUWkuU3BhY2U6dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW58fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCxkPSEwKTti'@;
put 'cmVhaztjYXNlIFFpLkFycm93VXA6dGhpcy5wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKENoLlVQKSxkPSEwO2JyZWFrO2Nhc2UgUWkuQXJyb3dEb3duOnRoaXMucHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEpLHRoaXMub3BlbkFuZE1vdmVUbyhDaC5E'@;
put 'T1dOKSxkPSEwO2JyZWFrO2RlZmF1bHQ6YS5rZXkhPT1RaS5UYWImJighdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZXx8YS5rZXkhPT1RaS5CYWNrc3BhY2UpJiZhLmtleSE9PVFpLkVzY2FwZSYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy50b2dnbGVTZXJ2'@;
put 'aWNlLm9wZW49ITApfXJldHVybiBkfXNjcm9sbEludG9TZWxlY3RlZE1vZGVsKGE9InNtb290aCIpe3RoaXMucHNldWRvRm9jdXMubW9kZWwmJnRoaXMucHNldWRvRm9jdXMubW9kZWwuZWwmJnRoaXMucHNldWRvRm9jdXMubW9kZWwuZWwuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOmEsYmxv'@;
put 'Y2s6ImNlbnRlciIsaW5saW5lOiJuZWFyZXN0In0pfXByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpe2VsKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMucmVuZGVy'@;
put 'ZXIubGlzdGVuKGEsImJsdXIiLGQ9Pnt0aGlzLmZvY3VzT3V0T2ZDb21wb25lbnQoZCkmJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLmNvbXBvbmVudENkUmVmJiZ0aGlzLmNvbXBvbmVudENkUmVmLmRldGVjdENoYW5nZXMoKSl9KX1mb2N1c091dE9mQ29tcG9uZW50KGEpe2Nv'@;
put 'bnN0IGQ9YS5yZWxhdGVkVGFyZ2V0fHxkb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybiEodGhpcy50ZXh0SW5wdXQuY29udGFpbnMoZCl8fHRoaXMudHJpZ2dlci5jb250YWlucyhkKXx8dGhpcy5saXN0Ym94LmNvbnRhaW5zKGQpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8YykoeHIoTTgpLHhyKHNjKSx4cih4VWUpLHhyKG9hKSl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkpO2xldCBFVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKGJoLHloLHh5LG14KX19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sSWMsVHMsWlksaXUsSTIsTngsQnksaXUsSTJdfSksY30pKCksWUw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHk3'@;
put 'e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1XcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWlucHV0LWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5n'@;
put 'czpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbZm8oW2tkLGYxLFNoLERk'@;
put 'XSksQ29dLG5nQ29udGVudFNlbGVjdG9yczp6SGUsZGVjbHM6MTMsdmFyczo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsiY2xhc3MiLCJjbHIt'@;
put 'dmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwi'@;
put 'YXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIs'@;
put 'ImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhqSGUpLFlyKDApLG10KDEsVUhlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJkaXYiLDMpLFlyKDUsMSksWXIoNiwyKSxZ'@;
put 'cig3LDMpLGhlKCksbXQoOCxaSGUsMSwwLCJjZHMtaWNvbiIsNCkoOSxXSGUsMSwwLCJjZHMtaWNvbiIsNSksaGUoKSxtdCgxMCxZSGUsMSwwLCJuZy1jb250ZW50IiwwKSgxMSxHSGUsMSwwLCJuZy1jb250ZW50IiwwKSgxMiwkSGUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihm'@;
put 'ZSgpLHhlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCkseGUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDYpLHhlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgp'@;
put 'LHhlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LHlvLHVzLGRzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxSZD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgXzd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihh'@;
put 'LFlMLGQsaCxmLHYpLHRoaXMuaW5kZXg9MSwibnVtYmVyIj09PXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoInR5cGUiKSYmY29uc29sZS53YXJuKCdXYXJuaW5nOiBJbnB1dHMgb2YgdHlwZSAibnVtYmVyIiBzaG91bGQgdXRpbGl6ZSB0aGUgbnVtYmVyLWlucHV0IGNvbXBv'@;
put 'bmVudCBmb3IgcHJvcGVyIGhhbmRsaW5nLlxuXG4gIEV4YW1wbGUgdXNhZ2U6XG4gIDxjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lcj5cbiAgICA8bGFiZWw+TnVtYmVyIElucHV0PC9sYWJlbD5cbiAgICA8aW5wdXQgY2xyTnVtYmVySW5wdXQgdHlwZT0ibnVtYmVyIi8+XG4gIDwvY2xyLW51'@;
put 'bWJlci1pbnB1dC1jb250YWluZXI+XG4gICAgICAnKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRGEpLEdlKERzKSxHZShkMSwxMCksR2UoRWEpLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklu'@;
put 'cHV0IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWlucHV0IiwhMCl9LGZlYXR1cmVzOltDb119KSxjfSkoKSxKMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKGJoLHloKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sSWMsVHMsaXUsaXVdfSksY30pKCksenk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3IGVpKCExKX1nZXQg'@;
put 'Zm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1zZXQgZm9jdXNlZChhKXt0aGlzLl9mb2N1c2VkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFj'@;
put 'dG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFRVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RXMuYWRkSWNvbnMoYmgseWgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFy'@;
put 'KHtpbXBvcnRzOltMbyxKMWUsVHNdfSksY30pKCksQVVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLFRzLFZ4LGpjXX0pLGN9'@;
put 'KSgpLGtVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxUc119KSxjfSkoKSxQVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sVHMsRlldfSksY30pKCksdGRlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZuYShTbCw1KSwyJmEpe2xldCBoO3hpKGg9RWkoKSkmJihkLnRlbXBsYXRlPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0'@;
put 'b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxtdCgwLHJOZSwxLDAsIm5nLXRlbXBsYXRlIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxGVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG9dfSksY30pKCksYm09KCgpPT57Y2xhc3MgYyBleHRlbmRzIEl5e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwo'@;
put 'bD1XcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYnMiXV0sZmVhdHVyZXM6W0NvXX0pLGN9KSgpLHc3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSeXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNs'@;
put 'clRhYkxpbmsgYW5kIGNsci10YWItY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci10YWJzIik7c3VwZXIoYSxkKSx0aGlzLmlmQWN0aXZlPWYsdGhpcy5pZD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZS5jdXJyZW50PT09dGhpcy5pZH19cmV0'@;
put 'dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoeHMpLEdlKGJtLDgpLEdlKFB5KSxHZShkNykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUYWJMaW5rIiwiIl0sWyJjbHItdGFiLWNvbnRlbnQiXV0sZmVhdHVyZXM6W0Nv'@;
put 'XX0pLGN9KSgpO3ZhciBDNz1mdW5jdGlvbihjKXtyZXR1cm4gYy5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsY30oQzd8fHt9KTtsZXQgang9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubGF5b3V0PUM3LkhPUklaT05UQUwsdGhpcy5fY2hp'@;
put 'bGRyZW49W119Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX2NoaWxkcmVufWdldCBhY3RpdmVUYWIoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5maW5kKGE9PmEuYWN0aXZlKX1nZXQgb3ZlcmZsb3dUYWJzKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09QzcuVkVSVElDQUw/W106dGhpcy5jaGls'@;
put 'ZHJlbi5maWx0ZXIoYT0+ITA9PT1hLnRhYkxpbmsuaW5PdmVyZmxvdyl9cmVnaXN0ZXIoYSl7dGhpcy5fY2hpbGRyZW4ucHVzaChhKX11bnJlZ2lzdGVyKGEpe2NvbnN0IGQ9dGhpcy5jaGlsZHJlbi5pbmRleE9mKGEpO2Q+LTEmJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGQsMSl9fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEhVZT0wLHltPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5p'@;
put 'ZD1kLHRoaXMudGFic1NlcnZpY2U9aCx0aGlzLnRhYkNvbnRlbnRJZHx8KHRoaXMudGFiQ29udGVudElkPSJjbHItdGFiLWNvbnRlbnQtIitIVWUrKyl9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgYXJpYUxhYmVsbGVkQnko'@;
put 'KXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluay5pZD09PXRoaXMuaWQpPy50YWJMaW5rPy50YWJMaW5rSWR9c2V0IHRlbXBsYXRlUmVmKGEpe3RoaXMudmlld1JlZj10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLmNyZWF0'@;
put 'ZUVtYmVkZGVkVmlldyhhKX1uZ09uRGVzdHJveSgpe2NvbnN0IGE9dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5pbmRleE9mKHRoaXMudmlld1JlZik7YT4tMSYmdGhpcy50YWJzU2VydmljZS50YWJDb250ZW50Vmlld0NvbnRhaW5lci5yZW1vdmUoYSl9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGQ3KSxHZShQeSksR2UoangpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYi1jb250ZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmbmEoaU5lLDcpLDIm'@;
put 'YSl7bGV0IGg7eGkoaD1FaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxpbnB1dHM6e3RhYkNvbnRlbnRJZDpbam4uTm9uZSwiaWQiLCJ0YWJDb250ZW50SWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJ0YWJDb250ZW50UHJvamVjdGVk'@;
put 'UmVmIiwiIl0sWyJyb2xlIiwidGFicGFuZWwiLDEsInRhYi1jb250ZW50IiwzLCJpZCIsImhpZGRlbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksbXQoMCxvTmUsMiw2LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLF91KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLE5VZT0w'@;
put 'O2NvbnN0IFlZPW5ldyBTdCgiVEFCU19JRCIpLEJVZT17cHJvdmlkZTpZWSx1c2VGYWN0b3J5OmZ1bmN0aW9uIFZVZSgpe3JldHVybiJjbHItdGFicy0iK05VZSsrfX07bGV0IGpVZT0wLF9tPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5pZkFjdGl2ZVNl'@;
put 'cnZpY2U9YSx0aGlzLmlkPWQsdGhpcy5lbD1oLHRoaXMudGFic1NlcnZpY2U9TSx0aGlzLnRhYnNJZD1ELHRoaXMudGFiTGlua0lkfHwodGhpcy50YWJMaW5rSWQ9ImNsci10YWItbGluay0iK2pVZSsrKTtjb25zdCBaPWYucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodGRlKTt0aGlzLnRlbXBs'@;
put 'YXRlUmVmQ29udGFpbmVyPXYuY3JlYXRlQ29tcG9uZW50KFosdm9pZCAwLHZvaWQgMCxbW2gubmF0aXZlRWxlbWVudF1dKS5pbnN0YW5jZX1nZXQgaW5PdmVyZmxvdygpe3JldHVybiB0aGlzLl9pbk92ZXJmbG93JiZ0aGlzLnRhYnNTZXJ2aWNlLmxheW91dCE9PUM3LlZFUlRJQ0FMfXNldCBp'@;
put 'bk92ZXJmbG93KGEpe3RoaXMuX2luT3ZlcmZsb3c9YX1nZXQgYWRkTGlua0NsYXNzZXMoKXtyZXR1cm4hdGhpcy5pbk92ZXJmbG93fWdldCBhcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluaz09PXRoaXMpPy50YWJDb250ZW50'@;
put 'Py50YWJDb250ZW50SWR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgdGFiaW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmU/MDotMX1hY3RpdmF0ZSgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZH19cmV0'@;
put 'dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZDcpLEdlKFB5KSxHZShKaSksR2UoWjUpLEdlKERhKSxHZShqeCksR2UoWVkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdXSxob3N0QXR0cnM6WyJy'@;
put 'b2xlIiwidGFiIiwidHlwZSIsImJ1dHRvbiJdLGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFjdGl2YXRlKCl9KSwyJmEmJihhcCgiaWQiLGQudGFiTGlua0lkKSxmcigiYXJpYS1jb250cm9scyIsZC5h'@;
put 'cmlhQ29udHJvbHMpKCJhcmlhLXNlbGVjdGVkIixkLmFjdGl2ZSkoInRhYmluZGV4IixkLnRhYmluZGV4KSxUcigiYnRuIiwhMCkoImJ0bi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgibmF2LWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLGQuYWN0aXZlKSl9LGlucHV0czp7dGFi'@;
put 'TGlua0lkOltqbi5Ob25lLCJpZCIsInRhYkxpbmtJZCJdLGluT3ZlcmZsb3c6W2puLk5vbmUsImNsclRhYkxpbmtJbk92ZXJmbG93IiwiaW5PdmVyZmxvdyJdfX0pLGN9KSgpLHdtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5p'@;
put 'ZD1kLHRoaXMudGFic1NlcnZpY2U9aCxoLnJlZ2lzdGVyKHRoaXMpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9bmdPbkRlc3Ryb3koKXt0aGlzLnRhYnNTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcyl9fXJldHVybiBjLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGQ3KSxHZShQeSksR2UoangpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYobGEoaCxfbSw3KSxsYShoLHltLDcpKSwy'@;
put 'JmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLnRhYkxpbms9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGQudGFiQ29udGVudD1mLmZpcnN0KX19LGZlYXR1cmVzOltmbyhbWnplXSldLG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYm'@;
put 'KGxvKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxuZGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkFjdGlvbiIsIiJdXSxo'@;
put 'b3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXX0pLGN9KSgpLEdZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFiLW92ZXJmbG93LWNvbnRlbnQiXV0s'@;
put 'aG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkcm9wZG93bi1tZW51IiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxj'@;
put 'fSkoKSxTNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJzSWQ9Zix0aGlzLmNvbW1vblN0cmluZ3M9dix0aGlzLnRhYkxpbmtFbGVtZW50cz1b'@;
put 'XSx0aGlzLl9tb3VzZWRvd249ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPVtdfWdldCBsYXlvdXQoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5sYXlvdXR9c2V0IGxheW91dChhKXtPYmplY3Qua2V5cyhDNykubWFwKGQ9PkM3W2RdKS5pbmRleE9m'@;
put 'KGEpPj0wJiYodGhpcy50YWJzU2VydmljZS5sYXlvdXQ9YSl9Z2V0IHRhYkxpbmtEaXJlY3RpdmVzKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzfWdldCBhY3RpdmVUYWJJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2Uub3ZlcmZsb3dUYWJzLmluZGV4T2YodGhp'@;
put 'cy50YWJzU2VydmljZS5hY3RpdmVUYWIpPi0xfWdldCBhY3RpdmVUYWJQb3NpdGlvbigpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5maW5kSW5kZXgoYT0+YS5hY3RpdmUpfWdldCBpc0N1cnJlbnRJbk92ZXJmbG93KCl7cmV0dXJuIHRoaXMua2V5Rm9jdXMuY3VycmVudD49dGhp'@;
put 'cy5vdmVyZmxvd1Bvc2l0aW9ufWdldCBpc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09QzcuVkVSVElDQUx9c2V0IHRhYk92ZXJmbG93RWwoYSl7dGhpcy5fdGFiT3ZlcmZsb3dFbD1hJiZhLm5hdGl2ZUVsZW1lbnQsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJmEmJnRoaXMua2V5'@;
put 'Rm9jdXMuZm9jdXNDdXJyZW50KCl9Z2V0IG92ZXJmbG93UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmlsdGVyKGE9PiFhLmluT3ZlcmZsb3cpLmxlbmd0aH1zZXQgdGFiQ29udGVudFZpZXdDb250YWluZXIoYSl7dGhpcy50YWJzU2VydmljZS50YWJDb250ZW50'@;
put 'Vmlld0NvbnRhaW5lcj1hfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVGFiTGlua0NoYW5nZXMoKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMoKSksdHlwZW9mIHRoaXMu'@;
put 'aWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ+InUiJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdJiZ0aGlzLnRhYkxpbmtEaXJlY3RpdmVzWzBdLmFjdGl2YXRlKCksdGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb259bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlw'@;
put 'dGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9dG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPWE+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1yZXNldEtleUZvY3VzQ3VycmVudFRvQWN0aXZlKGEpeyF0aGlzLmtleUZvY3VzLm5hdGl2'@;
put 'ZUVsZW1lbnQuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy5rZXlGb2N1cy5jdXJyZW50IT09dGhpcy5hY3RpdmVUYWJQb3NpdGlvbiYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX10b2dnbGVPdmVyZmxvd09uQ2xpY2soKXt0aGlzLmtleUZv'@;
put 'Y3VzLm1vdmVUbyh0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMub3ZlcmZsb3dQb3NpdGlvbi0xOnRoaXMub3ZlcmZsb3dQb3NpdGlvbiksdGhpcy5fbW91c2Vkb3duPSExfW9wZW5PdmVyZmxvd09uRm9jdXMoKXshdGhpcy5fbW91c2Vkb3du'@;
put 'JiYhdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMuYWN0aXZlVGFiUG9zaXRpb24pfWNsb3NlT25Gb2N1c091dChhKXshdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnJlbGF0ZWRUYXJnZXQpJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYm'@;
put 'IXRoaXMuX21vdXNlZG93biYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMudGFiTGlua0VsZW1lbnRzW3RoaXMuYWN0aXZlVGFiUG9zaXRpb25dPT09YS5yZWxhdGVkVGFyZ2V0JiYodGhpcy5rZXlGb2N1cy5jdXJyZW50PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24pKX1jbG9zZU9u'@;
put 'RXNjYXBlS2V5KCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfWNsb3NlT25PdXRzaWRlQ2xpY2soYSxkKXtjb25zdCBoPXRoaXMudGFic0FjdGlvbnMuc29tZShmPT5mLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoYS50YXJnZXQpKTthLnRhcmdldD09PWR8'@;
put 'fGQuY29udGFpbnMoYS50YXJnZXQpfHxofHwhdGhpcy5fdGFiT3ZlcmZsb3dFbC5jb250YWlucyhhLnRhcmdldCkmJnRoaXMuaXNDdXJyZW50SW5PdmVyZmxvdyYmdGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5vdmVyZmxvd1Bvc2l0aW9uLTEpfXNldFRhYkxpbmtFbGVtZW50cygpe3RoaXMu'@;
put 'X3RhYkxpbmtEaXJlY3RpdmVzPXRoaXMudGFicy5tYXAoYT0+YS50YWJMaW5rKSx0aGlzLnRhYkxpbmtFbGVtZW50cz10aGlzLl90YWJMaW5rRGlyZWN0aXZlcy5tYXAoYT0+YS5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnRhYnNBY3Rpb25zJiZ0aGlzLnRhYnNBY3Rpb25zJiZ0aGlzLnRhYkxp'@;
put 'bmtFbGVtZW50cy5wdXNoKC4uLnRoaXMudGFic0FjdGlvbnMubWFwKGE9PmEubmF0aXZlRWxlbWVudCkpfWxpc3RlbkZvclRhYkxpbmtDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFicy5jaGFuZ2VzLnBpcGUoeDIodGhpcy50YWJzLm1hcChhPT5hLnRhYkxpbmspKSkuc3Vic2NyaWJlKCgpPT50'@;
put 'aGlzLnNldFRhYkxpbmtFbGVtZW50cygpKX1saXN0ZWRGb3JUYWJzQWN0aW9uc0NoYW5nZXMoKXtyZXR1cm4gdGhpcy50YWJzQWN0aW9ucy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5zZXRUYWJMaW5rRWxlbWVudHMoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpKEdlKGQ3KSxHZShzYyksR2UoangpLEdlKFlZKSxHZShucykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYobGEoaCxuZGUsNSxKaSksbGEoaCx3bSw0KSks'@;
put 'MiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC50YWJzQWN0aW9ucz1mKSx4aShmPUVpKCkpJiYoZC50YWJzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYobmEoanksNyksbmEoR1ksNSxKaSksbmEoYU5lLDcsRGEpKSwyJmEpe2xldCBoO3hpKGg9RWkoKSkmJihkLmtleUZv'@;
put 'Y3VzPWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLnRhYk92ZXJmbG93RWw9aC5maXJzdCkseGkoaD1FaSgpKSYmKGQudGFiQ29udGVudFZpZXdDb250YWluZXI9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoInRhYnMtdmVydGljYWwiLGQu'@;
put 'aXNWZXJ0aWNhbCl9LGlucHV0czp7bGF5b3V0Oltqbi5Ob25lLCJjbHJMYXlvdXQiLCJsYXlvdXQiXX0sZmVhdHVyZXM6W2ZvKFtkNyxqeCxCVWVdKSxiZChbYWddKV0sbmdDb250ZW50U2VsZWN0b3JzOmxOZSxkZWNsczo2LHZhcnM6Myxjb25zdHM6W1sidGFiQ29udGVudFZpZXdDb250YWlu'@;
put 'ZXIiLCIiXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLCJjbHJEaXJlY3Rpb24iLCJib3RoIiwxLCJuYXYiLDMsImNsckZvY3VzQ2hhbmdlIiwiZm9jdXNvdXQiLCJjbHJLZXlGb2N1cyJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdJZiJdLFsicm9s'@;
put 'ZSIsInByZXNlbnRhdGlvbiIsMSwibmF2LWl0ZW0iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwidGFicy1vdmVyZmxvdyIsImJvdHRvbS1yaWdodCJdLFsicm9sZSIsImFwcGxpY2F0aW9uIiwxLCJuYXYtaXRlbSJdLFsidHlwZSIsImJ1dHRvbiIs'@;
put 'ImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiYnRuIiwiYnRuLWxpbmsiLCJuYXYtbGluayIsImRyb3Bkb3duLXRvZ2dsZSIsMywibW91c2Vkb3duIiwiZm9jdXMiLCJjbGljayJdLFsic2hhcGUiLCJlbGxpcHNpcy1ob3Jpem9udGFsIl0sWzMsImtleWRvd24uZXNjYXBlIiwiY2xpY2siLCJmb2N1'@;
put 'c291dCIsNCwibmdJZiJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1MbigpO2xvKHNOZSksZGUoMCwidWwiLDIpLEZ0KCJjbHJGb2N1'@;
put 'c0NoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQudG9nZ2xlT3ZlcmZsb3dPblBvc2l0aW9uKHYpKX0pKCJmb2N1c291dCIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQucmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZSh2KSl9KSxtdCgxLHVOZSwyLDEsIm5nLWNv'@;
put 'bnRhaW5lciIsMykoMixwTmUsNywxMSwibmctY29udGFpbmVyIiw0KSxZcigzKSxoZSgpLEpsKDQsbnVsbCwwKX0yJmEmJih4ZSgiY2xyS2V5Rm9jdXMiLGQudGFiTGlua0VsZW1lbnRzKSxmZSgpLHhlKCJuZ0Zvck9mIixkLnRhYkxpbmtEaXJlY3RpdmVzKSxmZSgpLHhlKCJuZ0lmIixkLnRh'@;
put 'YnNTZXJ2aWNlLm92ZXJmbG93VGFicy5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W2xzLHlvLE4xLHVzLGp5LEdZXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx6VWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKHgwZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLEkyLFRzLEZVZSxaWSxJMl19KSxjfSkoKSwkWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5uYXZHcm91cENvdW50PTB9cmVnaXN0ZXJO'@;
put 'YXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudCsrfXVucmVnaXN0ZXJOYXZHcm91cCgpe3RoaXMubmF2R3JvdXBDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVm'@;
put 'YWN9KSxjfSkoKSxLWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWNvbnM9MH1nZXQgaGFzSWNvbnMoKXtyZXR1cm4gdGhpcy5faWNvbnM+MH1yZWdpc3Rlckljb24oKXt0aGlzLl9pY29ucysrfXVucmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMtLX19cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkscVk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZD1uZXcgV24sdGhpcy5fY29sbGFw'@;
put 'c2VkQ2hhbmdlZD1uZXcgV24sdGhpcy5fY29sbGFwc2VkPSExLHRoaXMuX2NvbGxhcHNpYmxlPSExfWdldCBhbmltYXRlT25Db2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWRDaGFuZ2VkKCl7cmV0dXJuIHRoaXMu'@;
put 'X2NvbGxhcHNlZENoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9jb2xsYXBzZWR9c2V0IGNvbGxhcHNlZChhKXthPSEhYSx0aGlzLmNvbGxhcHNpYmxlJiZ0aGlzLl9jb2xsYXBzZWQhPT1hJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl9'@;
put 'Z2V0IGNvbGxhcHNpYmxlKCl7cmV0dXJuIHRoaXMuX2NvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9jb2xsYXBzaWJsZSE9PShhPSEhYSkmJighYSYmdGhpcy5jb2xsYXBzZWQmJnRoaXMudXBkYXRlQ29sbGFwc2VCZWhhdmlvcighMSksdGhpcy5fY29sbGFwc2libGU9YSl9'@;
put 'dXBkYXRlQ29sbGFwc2VCZWhhdmlvcihhKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQubmV4dChhKSx0aGlzLl9jb2xsYXBzZWQ9YSx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3'@;
put 'NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFhZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fbmF2U2VydmljZT1hLHRoaXMuX25hdkljb25TZXJ2aWNlPWQsdGhpcy5fbmF2R3JvdXBSZWdpc3RyYXRpb25TZXJ2aWNlPWgsdGhp'@;
put 'cy5jb21tb25TdHJpbmdzPWYsdGhpcy5jb250ZW50SWQ9U3UoKSx0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyBYcighMCksdGhpcy5fc3ViPWEuY29sbGFwc2VkQ2hhbmdlZC5zdWJzY3JpYmUodj0+e3RoaXMuX2NvbGxhcHNlZENoYW5nZWQuZW1pdCh2KX0pfWdldCBjb2xsYXBzaWJsZSgp'@;
put 'e3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlPWF9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZH1zZXQgY29sbGFwc2VkKGEpe3RoaXMuX25hdlNl'@;
put 'cnZpY2UuY29sbGFwc2VkPWF9Z2V0IGhhc05hdkdyb3Vwcygpe3JldHVybiB0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2UubmF2R3JvdXBDb3VudD4wfWdldCBoYXNJY29ucygpe3JldHVybiB0aGlzLl9uYXZJY29uU2VydmljZS5oYXNJY29uc31nZXQgYXJpYUV4cGFuZGVkKCl7'@;
put 'cmV0dXJuIHRoaXMuY29sbGFwc2libGU/dGhpcy5jb2xsYXBzZWQ/ImZhbHNlIjoidHJ1ZSI6bnVsbH1uZ09uRGVzdHJveSgpe3RoaXMuX3N1Yi51bnN1YnNjcmliZSgpfXRvZ2dsZUJ5QnV0dG9uKCl7dGhpcy5jb2xsYXBzZWQ9IXRoaXMuY29sbGFwc2VkfX1yZXR1cm4gYy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShxWSksR2UoS1kpLEdlKCRZKSxHZShucykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdmVydGljYWwtbmF2Il1dLGhvc3RBdHRyczpbMSwiY2xyLXZlcnRpY2FsLW5hdiJdLGhvc3RWYXJzOjYsaG9zdEJp'@;
put 'bmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiaXMtY29sbGFwc2VkIixkLmNvbGxhcHNlZCkoImhhcy1uYXYtZ3JvdXBzIixkLmhhc05hdkdyb3VwcykoImhhcy1pY29ucyIsZC5oYXNJY29ucyl9LGlucHV0czp7dG9nZ2xlTGFiZWw6W2puLk5vbmUsImNsclZlcnRpY2FsTmF2VG9nZ2xl'@;
put 'TGFiZWwiLCJ0b2dnbGVMYWJlbCJdLGNvbGxhcHNpYmxlOltqbi5Ob25lLCJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNpYmxlIiwiY29sbGFwc2libGUiXSxjb2xsYXBzZWQ6W2puLk5vbmUsImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkIiwiY29sbGFwc2VkIl19LG91dHB1dHM6e19jb2xsYXBzZWRD'@;
put 'aGFuZ2VkOiJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZENoYW5nZSJ9LGZlYXR1cmVzOltmbyhbcVksS1ksJFldKV0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjQsdmFyczozLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJuYXYtdHJpZ2dlciIsMywib24tY29sbGFwc2Ui'@;
put 'LCJjbGljayIsNCwibmdJZiJdLFsxLCJuYXYtY29udGVudCIsMywiaWQiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm5hdi1idG4iLCJhcmlhLWhpZGRlbiIsInRydWUiLCJ0YWJpbmRleCIsIi0xIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwibmF2LXRyaWdn'@;
put 'ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwibmF2LXRyaWdnZXItaWNvbiJdLFsidHlwZSIsImJ1dHRvbiIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsInRhYmluZGV4IiwiLTEiLDEsIm5hdi1idG4iLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZh'@;
put 'JiYobG8oKSxtdCgwLGdOZSwyLDYsImJ1dHRvbiIsMCksZGUoMSwiZGl2IiwxKSxZcigyKSxtdCgzLG1OZSwxLDIsImJ1dHRvbiIsMiksaGUoKSksMiZhJiYoeGUoIm5nSWYiLGQuY29sbGFwc2libGUpLGZlKCkseGUoImlkIixkLmNvbnRlbnRJZCksZmUoMikseGUoIm5nSWYiLGQuY29sbGFw'@;
put 'c2libGUmJmQuY29sbGFwc2VkKSl9LGRlcGVuZGVuY2llczpbeW8sdXNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEpZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9leHBhbmRDaGFuZ2U9bmV3IFdufWdldCBleHBhbmRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZXhwYW5kQ2hh'@;
put 'bmdlLmFzT2JzZXJ2YWJsZSgpfWV4cGFuZCgpe3RoaXMuX2V4cGFuZENoYW5nZS5uZXh0KCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksUVk9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kZXN0cm95JD1uZXcgV24saCYmeGQoYS5uYXRpdmVFbGVtZW50LCJjbGljayIpLnBpcGUoTjAodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKT0+e2guZXhwYW5kKCksZC5tYXJrRm9yQ2hlY2soKX0pfW5nT25EZXN0cm95KCl7'@;
put 'dGhpcy5kZXN0cm95JC5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZSh4cyksR2UoSlksOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiXV0saG9zdEF0'@;
put 'dHJzOlsxLCJuYXYtbGluayJdLGF0dHJzOnlOZSxuZ0NvbnRlbnRTZWxlY3RvcnM6d05lLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsIm5hdi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oX05lKSxZcigwKSxkZSgxLCJzcGFuIiwwKSxZcigyLDEpLGhlKCkpfSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxyZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKHh5LFQwZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIo'@;
put 'e2ltcG9ydHM6W0xvLFRzLEkyLFZMLEkyLFRzLFZMXX0pLGN9KSgpLFlVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltrVWUsUFVl'@;
put 'LHpVZSxyZGUsQVVlXX0pLGN9KSgpLFV5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBOMGV7Y29uc3RydWN0b3IoYSxkLGgpe3N1cGVyKGEsZCxoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKGdZKSxHZSh2cyw4KSl9LGMuXHUwMjc1'@;
put 'ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka1RyYXBGb2N1cyIsIiJdXSxmZWF0dXJlczpbQ29dfSksY30pKCksJEw9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxj'@;
put 'Llx1MDI3NWluaj1Bcih7fSksY30pKCk7Y29uc3QgJFVlPS9kKy4rbSsuK3krL2ksS1VlPS9tKy4rZCsuK3krL2kscVVlPS9kK3xtK3x5Ky9pLFhVZT0vXGQrL2csSlVlPS9Nb2JpL2ksUVVlPS9cdTIwMGYvZyxlRz0iWVlZWSIsS0w9e25hbWU6IkxJVFRMRV9FTkRJQU4iLGZvcm1hdDpbIkRE'@;
put 'IiwiTU0iLGVHXX0sckc9e25hbWU6Ik1JRERMRV9FTkRJQU4iLGZvcm1hdDpbIk1NIiwiREQiLGVHXX0sZVplPXtuYW1lOiJCSUdfRU5ESUFOIixmb3JtYXQ6W2VHLCJNTSIsIkREIl19O2Z1bmN0aW9uIG9kZShjLGwpe3JldHVybiBuZXcgRGF0ZShjLGwrMSwwKS5nZXREYXRlKCl9Y2xhc3Mg'@;
put 'b1ple2NvbnN0cnVjdG9yKGwsYT0hMSxkPSExLGg9ITEsZj0hMSx2PSExLE09ITEsRD0hMSl7dGhpcy5kYXlNb2RlbD1sLHRoaXMuaXNUb2RheXNEYXRlPWEsdGhpcy5pc0V4Y2x1ZGVkPWQsdGhpcy5pc0Rpc2FibGVkPWgsdGhpcy5pc1NlbGVjdGVkPWYsdGhpcy5pc0ZvY3VzYWJsZT12LHRo'@;
put 'aXMuaXNSYW5nZVN0YXJ0RGF5PU0sdGhpcy5pc1JhbmdlRW5kRGF5PUR9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xhc3MgTGR7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlzLmRhdGU9ZH1pc0VxdWFsKGwpe3Jl'@;
put 'dHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aCYmdGhpcy5kYXRlPT09bC5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGwpe2NvbnN0IGE9bmV3IERhdGUodGhpcy55'@;
put 'ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2wpO3JldHVybiBuZXcgTGQoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xvbmUoKXtyZXR1cm4gbmV3IExkKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21wYXJpc29uU3RyaW5nKCl7cmV0dXJu'@;
put 'YCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7d2Vla2RheToibG9uZyIsbW9udGg6ImxvbmciLGRheToibnVtZXJpYyIs'@;
put 'eWVhcjoibnVtZXJpYyJ9KX1pc0JlZm9yZShsLGE9ITEpe3JldHVybiBhP3RoaXMudG9EYXRlKCkuZ2V0VGltZSgpPD1sPy50b0RhdGUoKS5nZXRUaW1lKCk6dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk8bD8udG9EYXRlKCkuZ2V0VGltZSgpfWlzQWZ0ZXIobCxhPSExKXtyZXR1cm4gYT90aGlz'@;
put 'LnRvRGF0ZSgpLmdldFRpbWUoKT49bD8udG9EYXRlKCkuZ2V0VGltZSgpOnRoaXMudG9EYXRlKCkuZ2V0VGltZSgpPmw/LnRvRGF0ZSgpLmdldFRpbWUoKX1wYWQobCl7cmV0dXJuIGw8MTA/YDAke2x9YDpgJHtsfWB9fWNsYXNzIGFaZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNKXt0aGlz'@;
put 'LmNhbGVuZGFyPWwsdGhpcy5zZWxlY3RlZERheT1hLHRoaXMuc2VsZWN0ZWRFbmREYXk9ZCx0aGlzLmZvY3VzYWJsZURheT1oLHRoaXMudG9kYXk9Zix0aGlzLmZpcnN0RGF5T2ZXZWVrPXYsdGhpcy5leGNsdWRlZERhdGVzPU0sdGhpcy5jdXJyTW9udGhEYXlWaWV3cz1bXSx0aGlzLmluaXRp'@;
put 'YWxpemVDYWxlbmRhclZpZXcoKX1nZXQgY2FsZW5kYXJWaWV3KCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyVmlld311cGRhdGVGb2N1c2FibGVEYXkobCl7dGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCExKSx0aGlzLnNldEZvY3VzYWJsZUZsYWcobCwhMCksdGhpcy5m'@;
put 'b2N1c2FibGVEYXk9bH11cGRhdGVTZWxlY3RlZERheShsKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWREYXksITEpLHRoaXMuc2VsZWN0ZWREYXk9bCx0aGlzLnNldFNlbGVjdGVkRGF5KGwsITApfXVwZGF0ZVNlbGVjdGVkRW5kRGF5KGwpe3RoaXMuc2V0U2VsZWN0ZWREYXko'@;
put 'dGhpcy5zZWxlY3RlZEVuZERheSwhMSksdGhpcy5zZWxlY3RlZEVuZERheT1sLHRoaXMuc2V0U2VsZWN0ZWREYXkobCwhMCl9aW5pdGlhbGl6ZUNhbGVuZGFyVmlldygpe2NvbnN0IGw9dGhpcy5jYWxlbmRhci5wcmV2aW91c01vbnRoKCksYT10aGlzLmNhbGVuZGFyLm5leHRNb250aCgpLGQ9'@;
put 'dGhpcy5udW1EYXlzRnJvbVByZXZNb250aEluQ2FsVmlldyh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCksaD00Mi0odGhpcy5jYWxlbmRhci5kYXlzLmxlbmd0aCtkKTtsZXQgZj1bXSx2PVtdO2Q+MCYmKGY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMobC5kYXlz'@;
put 'LnNsaWNlKC0xKmQpLCEwLCExKSksdGhpcy5jdXJyTW9udGhEYXlWaWV3cz10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyh0aGlzLmNhbGVuZGFyLmRheXMsITEsITApLGg+MCYmKHY9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHMoYS5kYXlzLnNsaWNlKDAsaCksITAsITEpKSx0aGlzLl9j'@;
put 'YWxlbmRhclZpZXc9dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldyhmLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3MsdiksdGhpcy5pbml0aWFsaXplU2VsZWN0ZWREYXkoKSx0aGlzLmluaXRpYWxpemVGb2N1c2FibGVEYXkoKX1pc0RhdGVFeGNsdWRlZChsKXtjb25zdHttaW5EYXRlOmEsbWF4RGF0'@;
put 'ZTpkfT10aGlzLmV4Y2x1ZGVkRGF0ZXMsaD1hLnRvQ29tcGFyaXNvblN0cmluZygpLGY9ZC50b0NvbXBhcmlzb25TdHJpbmcoKSx2PWwudG9Db21wYXJpc29uU3RyaW5nKCk7cmV0dXJuISh2Pj1oJiZ2PD1mKX1nZW5lcmF0ZURheVZpZXdNb2RlbHMobCxhLGQpe2NvbnN0IGg9bC5tYXAoZj0+'@;
put 'bmV3IG9aZShmLCExLGEsdGhpcy5pc0RhdGVFeGNsdWRlZChmKSwhMSwhMSkpO3JldHVybiBkJiZ0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KSYmKGhbdGhpcy50b2RheS5kYXRlLTFdLmlzVG9kYXlzRGF0ZT0hMCksaH1udW1EYXlzRnJvbVByZXZNb250aEluQ2Fs'@;
put 'VmlldyhsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gblplKGMsbCxhKXtyZXR1cm4gbmV3IERhdGUoYyxsLGEpLmdldERheSgpfShsLGEsMSk7cmV0dXJuIGQ+PXRoaXMuZmlyc3REYXlPZldlZWs/ZC10aGlzLmZpcnN0RGF5T2ZXZWVrOjcrZC10aGlzLmZpcnN0RGF5T2ZXZWVrfWlzRGF5SW5DYWxl'@;
put 'bmRhclZpZXcobCl7cmV0dXJuISF0aGlzLmNhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcihsKX1nZW5lcmF0ZUNhbGVuZGFyVmlldyhsLGEsZCl7Y29uc3QgaD1bLi4ubCwuLi5hLC4uLmRdLGY9W107Zm9yKGxldCB2PTA7djw2O3YrKylmW3ZdPWguc2xpY2UoNyp2LDcqKHYrMSkpO3JldHVybiBm'@;
put 'fWluaXRpYWxpemVTZWxlY3RlZERheSgpe3RoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZERheSwhMCksdGhpcy5zZXRTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkRW5kRGF5LCEwKX1pbml0aWFsaXplRm9jdXNhYmxlRGF5KCl7dGhpcy5mb2N1c2FibGVEYXkmJnRoaXMuaXNEYXlJ'@;
put 'bkNhbGVuZGFyVmlldyh0aGlzLmZvY3VzYWJsZURheSk/dGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCEwKTp0aGlzLnNlbGVjdGVkRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5zZWxlY3RlZERheSk/KHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlz'@;
put 'LnNlbGVjdGVkRGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnNlbGVjdGVkRGF5LmNsb25lKCkpOnRoaXMuc2VsZWN0ZWRFbmREYXkmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnNlbGVjdGVkRW5kRGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuc2VsZWN0ZWRF'@;
put 'bmREYXksITApLHRoaXMuZm9jdXNhYmxlRGF5PXRoaXMuc2VsZWN0ZWRFbmREYXkuY2xvbmUoKSk6dGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMudG9kYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy50b2RheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy50b2RheS5jbG9u'@;
put 'ZSgpKToodGhpcy5mb2N1c2FibGVEYXk9bmV3IExkKHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoLDE1KSx0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5mb2N1c2FibGVEYXksITApKX1zZXRGb2N1c2FibGVGbGFnKGwsYSl7bCYmKHRoaXMuY3Vyck1vbnRoRGF5Vmll'@;
put 'd3NbbC5kYXRlLTFdLmlzRm9jdXNhYmxlPWEpfXNldFNlbGVjdGVkRGF5KGwsYSl7bCYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KGwpJiYodGhpcy5jdXJyTW9udGhEYXlWaWV3c1tsPy5kYXRlLTFdLmlzU2VsZWN0ZWQ9YSl9fWxldCBVeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp'@;
put 'e3RoaXMubG9jYWxlPWEsdGhpcy5fZmlyc3REYXlPZldlZWs9MCx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXRhKCl9Z2V0IGZpcnN0RGF5T2ZXZWVrKCl7cmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXN9Z2V0IGxvY2Fs'@;
put 'ZURheXNOYXJyb3coKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF5cy5tYXAoYT0+YS5uYXJyb3cpfWdldCBsb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3JldHVybiB0aGlzLl9sb2NhbGVNb250aHNBYmJyZXZpYXRlZH1nZXQgbG9jYWxlTW9udGhzV2lkZSgpe3JldHVybiB0aGlzLl9sb2NhbGVN'@;
put 'b250aHNXaWRlfWdldCBsb2NhbGVEYXRlRm9ybWF0KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURhdGVGb3JtYXR9aW5pdGlhbGl6ZUxvY2FsZURhdGEoKXt0aGlzLmluaXRpYWxpemVGaXJzdERheU9mV2VlaygpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKSx0aGlzLmluaXRpYWxp'@;
put 'emVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXlzKCl9aW5pdGlhbGl6ZUxvY2FsZURheXMoKXtjb25zdCBhPVtdLGQ9QlUodGhpcy5sb2NhbGUsdTAuU3RhbmRhbG9uZSxkbC5XaWRlKS5z'@;
put 'bGljZSgpLGg9QlUodGhpcy5sb2NhbGUsdTAuU3RhbmRhbG9uZSxkbC5OYXJyb3cpLnNsaWNlKCksZj10aGlzLmZpcnN0RGF5T2ZXZWVrO2ZvcihsZXQgdj0wO3Y8Nzt2KyspYS5wdXNoKHtkYXk6ZFt2XSxuYXJyb3c6aFt2XX0pO2lmKGY+MCl7Y29uc3Qgdj1hLnNwbGljZSgwLGYpO2EucHVz'@;
put 'aCguLi52KX10aGlzLl9sb2NhbGVEYXlzPWF9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc0FiYnJldmlhdGVkKCl7dGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQ9alUodGhpcy5sb2NhbGUsdTAuU3RhbmRhbG9uZSxkbC5BYmJyZXZpYXRlZCkuc2xpY2UoKX1pbml0aWFsaXplTG9jYWxlTW9u'@;
put 'dGhzV2lkZSgpe3RoaXMuX2xvY2FsZU1vbnRoc1dpZGU9alUodGhpcy5sb2NhbGUsdTAuU3RhbmRhbG9uZSxkbC5XaWRlKS5zbGljZSgpfWluaXRpYWxpemVGaXJzdERheU9mV2Vlaygpe3RoaXMuX2ZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIF9fZShjKXtyZXR1cm4gYTEoYylbUWwuRmlyc3RE'@;
put 'YXlPZldlZWtdfSh0aGlzLmxvY2FsZSl9aW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKXt0aGlzLl9sb2NhbGVEYXRlRm9ybWF0PWZ1bmN0aW9uIE1NKGMsbCl7cmV0dXJuIEMyKGExKGMpW1FsLkRhdGVGb3JtYXRdLGwpfSh0aGlzLmxvY2FsZSxTZC5TaG9ydCl9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEhmKSl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgT2R7Y29uc3RydWN0b3IobCxhKXt0aGlzLnllYXI9bCx0aGlzLm1vbnRoPWEsdGhpcy5pbml0aWFsaXplRGF5'@;
put 'c0luQ2FsZW5kYXIoKX1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1pc0RheUluQ2FsZW5kYXIobCl7cmV0dXJuISFsJiZ0aGlzLnllYXI9PT1sLnllYXImJnRoaXMubW9udGg9PT1sLm1vbnRofXByZXZpb3VzTW9udGgoKXty'@;
put 'ZXR1cm4gMD09PXRoaXMubW9udGg/bmV3IE9kKHRoaXMueWVhci0xLDExKTpuZXcgT2QodGhpcy55ZWFyLHRoaXMubW9udGgtMSl9bmV4dE1vbnRoKCl7cmV0dXJuIDExPT09dGhpcy5tb250aD9uZXcgT2QodGhpcy55ZWFyKzEsMCk6bmV3IE9kKHRoaXMueWVhcix0aGlzLm1vbnRoKzEpfXBy'@;
put 'ZXZpb3VzWWVhcigpe3JldHVybiBuZXcgT2QodGhpcy55ZWFyLTEsdGhpcy5tb250aCl9bmV4dFllYXIoKXtyZXR1cm4gbmV3IE9kKHRoaXMueWVhcisxLHRoaXMubW9udGgpfWluaXRpYWxpemVEYXlzSW5DYWxlbmRhcigpe2NvbnN0IGw9b2RlKHRoaXMueWVhcix0aGlzLm1vbnRoKTt0aGlz'@;
put 'LmRheXM9QXJyYXkobCkuZmlsbChudWxsKS5tYXAoKGEsZCk9Pm5ldyBMZCh0aGlzLnllYXIsdGhpcy5tb250aCxkKzEpKX19bGV0IHhoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmlzUmFuZ2VQaWNrZXI9ITEsdGhpcy5oYXNBY3Rpb25CdXR0b25zPSExLHRoaXMuX3RvZGF5'@;
put 'c0Z1bGxEYXRlPW5ldyBEYXRlLHRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlPW5ldyBXbix0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZT1uZXcgV24sdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2U9bmV3IFduLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgV24sdGhpcy5fcmVm'@;
put 'cmVzaENhbGVuZGFyVmlldz1uZXcgV24sdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgV259Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBkaXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXty'@;
put 'ZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IHNlbGVjdGVkRW5kRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkRW5kRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBkaXNwbGF5ZWRDYWxlbmRhckNoYW5nZSgpe3JldHVybiB0aGlzLl9k'@;
put 'aXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNPbkNhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c2VkRGF5Q2hh'@;
put 'bmdlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoV3UoYT0+dGhpcy5mb2N1c2VkRGF5PWEpKX1nZXQgcmVmcmVzaENhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9yZWZyZXNoQ2FsZW5kYXJWaWV3LmFzT2JzZXJ2YWJsZSgpfW5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZChhLHtlbWl0RXZlbnQ6ZH09'@;
put 'e2VtaXRFdmVudDohMH0pe2lmKHRoaXMuaXNSYW5nZVBpY2tlcil7Y29uc3R7c3RhcnREYXRlOmgsZW5kRGF0ZTpmfT1hO2gmJmY/KHRoaXMuc2V0U2VsZWN0ZWREYXkoaCxkKSx0aGlzLnNldFNlbGVjdGVkRW5kRGF5KGYsZCkpOihudWxsIT09ZiYmdGhpcy5zZXRTZWxlY3RlZEVuZERheShm'@;
put 'LGQpLG51bGwhPT1oJiZ0aGlzLnNldFNlbGVjdGVkRGF5KGgsZCkpfWVsc2UgdGhpcy5zZXRTZWxlY3RlZERheShhLGQpO3RoaXMuX3JlZnJlc2hDYWxlbmRhclZpZXcubmV4dCgpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5'@;
put 'c0RhdGUoKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBPZCh0aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3RlZERheS5tb250aCk6bmV3IE9kKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aChhKXt0aGlzLnNl'@;
put 'dERpc3BsYXllZENhbGVuZGFyKG5ldyBPZCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLGEpKX1jaGFuZ2VZZWFyKGEpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKGEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNl'@;
put 'dERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1tb3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb05leHRZZWFyKCl7dGhp'@;
put 'cy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0WWVhcigpKX1tb3ZlVG9QcmV2aW91c1llYXIoKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLnByZXZpb3VzWWVhcigpKX1tb3ZlVG9DdXJyZW50TW9udGgo'@;
put 'KXt0aGlzLmRpc3BsYXllZENhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLnRvZGF5KXx8dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgT2QodGhpcy50b2RheS55ZWFyLHRoaXMudG9kYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfW1vdmVUb1Nw'@;
put 'ZWNpZmljTW9udGgoYSl7dGhpcy5kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIoYSl8fHRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IE9kKGEueWVhcixhLm1vbnRoKSl9aW5jcmVtZW50Rm9jdXNEYXkoYSl7dGhpcy5ob3ZlcmVkRGF5PXRoaXMuZm9jdXNlZERheT10aGlz'@;
put 'LmZvY3VzZWREYXkuaW5jcmVtZW50QnkoYSksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMuZm9jdXNlZERheSk/dGhpcy5fZm9jdXNlZERheUNoYW5nZS5uZXh0KHRoaXMuZm9jdXNlZERheSk6dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgT2QodGhp'@;
put 'cy5mb2N1c2VkRGF5LnllYXIsdGhpcy5mb2N1c2VkRGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLm5leHQoKX1yZXNldFNlbGVjdGVkRGF5KCl7dGhpcy5zZWxlY3RlZERheT10aGlzLnBlcnNpc3RlZERhdGUsdGhpcy5zZWxlY3RlZEVuZERheT10aGlzLnBlcnNpc3Rl'@;
put 'ZEVuZERhdGV9Y29udmVydERhdGVUb0RheU1vZGVsKGEpe3JldHVybiBuZXcgTGQoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9c2V0U2VsZWN0ZWREYXkoYSxkKXt0aGlzLnNlbGVjdGVkRGF5PWEsZCYmdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UubmV4dChhKX1z'@;
put 'ZXRTZWxlY3RlZEVuZERheShhLGQpe3RoaXMuc2VsZWN0ZWRFbmREYXk9YSxkJiZ0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZS5uZXh0KGEpfXNldERpc3BsYXllZENhbGVuZGFyKGEpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoYSl8fCh0aGlzLl9kaXNwbGF5ZWRDYWxlbmRh'@;
put 'cj1hLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcgTGQodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFllYXIoKSx0aGlzLl90b2RheXNGdWxs'@;
put 'RGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLENtPSgoKT0+e2NsYXNz'@;
put 'IGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1mb2N1c0NlbGwoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9YS5uYXRpdmVF'@;
put 'bGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iMCJdJyk7ZCYmZC5mb2N1cygpfSl9KX1mb2N1c0lucHV0KGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgoKT0+YS5mb2N1cygpKSl9ZWxl'@;
put 'bWVudElzRm9jdXNlZChhKXtyZXR1cm4gZWwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWF9bmdab25lSXNTdGFibGVJbkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoaW0oKSxHbCgoKT0+ZWwodGhp'@;
put 'cy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihZbykseHIob2EpKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxjZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp'@;
put 'e3RoaXMuZGlzYWJsZWREYXRlcz17bWluRGF0ZTpuZXcgTGQoMCwwLDEpLG1heERhdGU6bmV3IExkKDk5OTksMTEsMzEpfSx0aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0PSJkZC9NTS95Iix0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9S0wsdGhpcy5kZWxpbWl0ZXJzPVsiLyIsIi8iXSx0aGlz'@;
put 'LmNsZHJMb2NhbGVEYXRlRm9ybWF0PWEubG9jYWxlRGF0ZUZvcm1hdCx0aGlzLmluaXRpYWxpemVMb2NhbGVEaXNwbGF5Rm9ybWF0KCl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe2NvbnN0IGE9dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0LmZvcm1hdDtyZXR1cm4gYVswXSt0aGlzLmRlbGltaXRl'@;
put 'cnNbMF0rYVsxXSt0aGlzLmRlbGltaXRlcnNbMV0rYVsyXX1zZXRNaW5EYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKHY9PnBhcnNlSW50KHYsMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWluRGF0ZT1uZXcgTGQoZCxoLTEsZil9ZWxzZSB0aGlzLmRpc2FibGVk'@;
put 'RGF0ZXMubWluRGF0ZT1uZXcgTGQoMCwwLDEpfXNldE1heERhdGUoYSl7aWYoYSl7Y29uc3RbZCxoLGZdPWEuc3BsaXQoIi0iKS5tYXAodj0+cGFyc2VJbnQodiwxMCkpO3RoaXMuZGlzYWJsZWREYXRlcy5tYXhEYXRlPW5ldyBMZChkLGgtMSxmKX1lbHNlIHRoaXMuZGlzYWJsZWREYXRlcy5t'@;
put 'YXhEYXRlPW5ldyBMZCg5OTk5LDExLDMxKX1zZXRSYW5nZU9wdGlvbnMoYSl7Y29uc3QgZD10aGlzLnZhbGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyhhKTt0aGlzLmRhdGVSYW5nZU9wdGlvbnM9ZHx8W119Z2V0UmFuZ2VPcHRpb25zKCl7cmV0dXJuIHRoaXMuZGF0ZVJhbmdlT3B0aW9uc310b0xv'@;
put 'Y2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYSl7aWYoYSl7aWYoaXNOYU4oYS5nZXRUaW1lKCkpKXJldHVybiIiO2NvbnN0IGQ9YS5nZXREYXRlKCksaD1hLmdldE1vbnRoKCkrMSxmPWQ+OT9kLnRvU3RyaW5nKCk6IjAiK2Qsdj1oPjk/aC50b1N0cmluZygpOiIwIitoO3JldHVybiB0aGlzLmxv'@;
put 'Y2FsZURpc3BsYXlGb3JtYXQ9PT1LTD9mK3RoaXMuZGVsaW1pdGVyc1swXSt2K3RoaXMuZGVsaW1pdGVyc1sxXSthLmdldEZ1bGxZZWFyKCk6dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09ckc/dit0aGlzLmRlbGltaXRlcnNbMF0rZit0aGlzLmRlbGltaXRlcnNbMV0rYS5nZXRGdWxsWWVh'@;
put 'cigpOmEuZ2V0RnVsbFllYXIoKSt0aGlzLmRlbGltaXRlcnNbMF0rdit0aGlzLmRlbGltaXRlcnNbMV0rZn1yZXR1cm4iIn1nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKXtpZighYXx8InN0cmluZyIhPXR5cGVvZiBhKXJldHVybiBudWxsO2NvbnN0IGQ9YS5tYXRjaChYVWUpO2lmKCFk'@;
put 'fHwzIT09ZC5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3RbaCxmLHZdPWQ7cmV0dXJuIHRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PUtMP3RoaXMudmFsaWRhdGVBbmRHZXREYXRlKHYsZixoKTp0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1yRz90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh2'@;
put 'LGgsZik6dGhpcy52YWxpZGF0ZUFuZEdldERhdGUoaCxmLHYpfXZhbGlkYXRlRGF0ZVJhbmdlT3B0aW9ucyhhKXtjb25zdCBkPVtdO3JldHVybiBhPy5mb3JFYWNoKGg9PnsyIT09aD8udmFsdWU/Lmxlbmd0aHx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5j'@;
put 'YWxsKGg/LnZhbHVlWzBdKXx8IltvYmplY3QgRGF0ZV0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGg/LnZhbHVlWzFdKXx8ZC5wdXNoKGgpfSksZH1pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpe2NvbnN0IGE9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC50b0xv'@;
put 'Y2FsZUxvd2VyQ2FzZSgpO3RoaXMubG9jYWxlRGlzcGxheUZvcm1hdD0kVWUudGVzdChhKT9LTDpLVWUudGVzdChhKT9yRzplWmUsdGhpcy5leHRyYWN0RGVsaW1pdGVycygpfWV4dHJhY3REZWxpbWl0ZXJzKCl7aWYodGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdCl7Y29uc3QgZD10aGlzLmNs'@;
put 'ZHJMb2NhbGVEYXRlRm9ybWF0LnJlcGxhY2UoUVVlLCIiKS5zcGxpdChxVWUpO2QmJjQ9PT1kLmxlbmd0aD90aGlzLmRlbGltaXRlcnM9W2RbMV0sZFsyXV06Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBkYXRlIGZvcm1hdCByZWNlaXZlZC4gRGVsaW1pdGVycyBleHRyYWN0ZWQ6ICIsZCl9'@;
put 'fWlzVmFsaWRNb250aChhKXtyZXR1cm4gYT4tMSYmYTwxMn1pc1ZhbGlkRGF0ZShhLGQsaCl7cmV0dXJuIGg+MCYmaDw9b2RlKGEsZCl9dmFsaWRhdGVBbmRHZXREYXRlKGEsZCxoKXtjb25zdCBmPSthLHY9K2QtMSxNPStoO2lmKCF0aGlzLmlzVmFsaWRNb250aCh2KXx8IXRoaXMuaXNWYWxp'@;
put 'ZERhdGUoZix2LE0pKXJldHVybiBudWxsO2NvbnN0IEQ9ZnVuY3Rpb24gclplKGMpe2lmKGM+OTk5OXx8Yz4xMDAmJmM8OTk5fHxjPDEwKXJldHVybi0xO2lmKGM+OTk5KXJldHVybiBjO2NvbnN0IGw9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpO2xldCBkPWMrMTAwKk1hdGguZmxvb3IobC8x'@;
put 'MDApO3JldHVybiBkPmwrMjAmJihkLT0xMDApLGR9KGYpO3JldHVybi0xIT09RD9uZXcgRGF0ZShELHYsTSk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoVXgpKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAy'@;
put 'NzVmYWN9KSxjfSkoKSxXeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZENoYW5nZT1uZXcgV24sdGhpcy5fZGlydHlDaGFuZ2U9bmV3IFdufWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRp'@;
put 'cnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2RpcnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5leHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkPWF9'@;
put 'fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGFkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNl'@;
put 'PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5vblNlbGVjdERheT1uZXcgWHJ9Z2V0IGRheVZpZXcoKXtyZXR1cm4gdGhpcy5fZGF5Vmlld31zZXQgZGF5VmlldyhhKXt0aGlzLl9kYXlWaWV3PWF9Z2V0IGRheVN0cmluZygpe3JldHVybiB0aGlzLmRheVZpZXcuaXNTZWxlY3RlZD90aGlz'@;
put 'LmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWwse0ZVTExfREFURTp0aGlzLl9kYXlWaWV3LmRheU1vZGVsLnRvRGF0ZVN0cmluZygpfSk6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX1nZXQgaXNS'@;
put 'YW5nZVN0YXJ0RGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRheVZpZXc/LmRheU1vZGVsPy50b0NvbXBhcmlzb25TdHJpbmcoKT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8udG9Db21wYXJpc29u'@;
put 'U3RyaW5nKCl9Z2V0IGlzUmFuZ2VFbmREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF5Vmlldz8uZGF5TW9kZWw/LnRvQ29tcGFyaXNvblN0cmluZygpPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5k'@;
put 'RGF5Py50b0NvbXBhcmlzb25TdHJpbmcoKX1ob3Zlckxpc3RlbmVyKCl7dGhpcy5kYXlWaWV3LmlzRGlzYWJsZWR8fCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZERheT10aGlzLmRheVZpZXcuZGF5TW9kZWwpfW9uRGF5Vmlld0ZvY3VzKCl7dGhpcy5fZGF0ZU5hdmlnYXRp'@;
put 'b25TZXJ2aWNlLmZvY3VzZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsfXNlbGVjdERheSgpe3RoaXMuZGF5Vmlldy5pc0Rpc2FibGVkfHx0aGlzLm9uU2VsZWN0RGF5LmVtaXQodGhpcy5kYXlWaWV3LmRheU1vZGVsKX1pc0luUmFuZ2UoKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9u'@;
put 'U2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/dGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZp'@;
put 'Y2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpOiEoIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheXx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNl'@;
put 'LnNlbGVjdGVkRW5kRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNBZnRlcih0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiZ0aGlzLl9kYXlWaWV3LmRheU1vZGVsPy5pc0JlZm9yZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZERheSwh'@;
put 'MCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh4aCksR2UobnMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoIm1v'@;
put 'dXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaG92ZXJMaXN0ZW5lcigpfSksMiZhJiZUcigiZGF5IiwhMCl9LGlucHV0czp7ZGF5Vmlldzpbam4uTm9uZSwiY2xyRGF5VmlldyIsImRheVZpZXciXX0sb3V0cHV0czp7b25TZWxlY3REYXk6InNlbGVjdERheSJ9LGRlY2xzOjIsdmFyczox'@;
put 'OSxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiZGF5LWJ0biIsMywiY2xpY2siLCJmb2N1cyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImJ1dHRvbiIsMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNlbGVjdERheSgpfSkoImZvY3VzIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBkLm9uRGF5Vmlld0ZvY3VzKCl9KSxMZSgxKSxoZSgpKSwyJmEmJihUcigiaXMtdG9kYXkiLGQuZGF5Vmlldy5pc1RvZGF5c0RhdGUpKCJpcy1leGNsdWRlZCIsZC5kYXlWaWV3LmlzRXhjbHVkZWQpKCJpcy1kaXNhYmxlZCIsZC5kYXlWaWV3LmlzRGlzYWJsZWQpKCJpcy1z'@;
put 'ZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpKCJpbi1yYW5nZSIsZC5pc0luUmFuZ2UoKSkoImlzLXN0YXJ0LXJhbmdlIixkLmlzUmFuZ2VTdGFydERheSkoImlzLWVuZC1yYW5nZSIsZC5pc1JhbmdlRW5kRGF5KSxmcigidGFiaW5kZXgiLGQuZGF5Vmlldy50YWJJbmRleCkoImFyaWEt'@;
put 'Y3VycmVudCIsZC5kYXlWaWV3LmlzVG9kYXlzRGF0ZT8iZGF0ZSI6ImZhbHNlIikoImFyaWEtbGFiZWwiLGQuZGF5U3RyaW5nKSgiYXJpYS1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpLGZlKCksSXIoIiAiLGQuZGF5Vmlldy5kYXlNb2RlbC5kYXRlLCIgIikpfSxlbmNhcHN1bGF0'@;
put 'aW9uOjJ9KSxjfSkoKSxzZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWEsdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWQsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRoaXMuX2RhdGVJT1NlcnZp'@;
put 'Y2U9Zix0aGlzLl9lbFJlZj12LHRoaXMuX2RhdGVGb3JtQ29udHJvbFNlcnZpY2U9TSx0aGlzLl90b2dnbGVTZXJ2aWNlPUQsdGhpcy5fc3Vicz1bXSx0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCksdGhpcy5pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpfWdldCBsb2NhbGVEYXlzKCl7cmV0'@;
put 'dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlRGF5c31nZXQgY2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyfWdldCBzZWxlY3RlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2Vs'@;
put 'ZWN0ZWREYXl9Z2V0IHNlbGVjdGVkRW5kRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheX1nZXQgZm9jdXNlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheX1nZXQgdG9kYXkoKXtyZXR1cm4gdGhp'@;
put 'cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnRvZGF5fW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfW9uS2V5RG93bihh'@;
put 'KXtpZihhJiZ0aGlzLmZvY3VzZWREYXkpc3dpdGNoKEEyKGEua2V5KSl7Y2FzZSBRaS5BcnJvd1VwOmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTcpO2JyZWFrO2Nhc2UgUWkuQXJyb3dEb3duOmEucHJldmVudERlZmF1'@;
put 'bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoNyk7YnJlYWs7Y2FzZSBRaS5BcnJvd0xlZnQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pbmNyZW1lbnRGb2N1c0RheSgtMSk7YnJlYWs7Y2FzZSBRaS5BcnJv'@;
put 'd1JpZ2h0OmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoMSl9fXNldFNlbGVjdGVkRGF5KGEpe2NvbnN0IGQ9dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnMsaD10aGlzLnVwZGF0ZUNhbGVu'@;
put 'ZGFyVmlld01vZGFsKGEpO3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoaCx7ZW1pdEV2ZW50OiFkfSksZHx8KHRoaXMuX2RhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSx0aGlzLnZhbGlkYXRlQW5kQ2xvc2VEYXRlUGlja2Vy'@;
put 'KCkpfWluaXRpYWxpemVTdWJzY3JpcHRpb25zKCl7dGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KCl9KSksdGhpcy5fc3Vicy5wdXNoKHRoaXMu'@;
put 'X2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c2VkRGF5Q2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVGb2N1c2FibGVEYXkoYSl9KSksdGhpcy5fc3Vicy5wdXNoKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c09uQ2FsZW5kYXJDaGFu'@;
put 'Z2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UucmVmcmVzaENhbGVuZGFyVmlldy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlZnJlc2hD'@;
put 'YWxlbmRhclZpZXdNb2RhbCgpfSkpfXZhbGlkYXRlQW5kQ2xvc2VEYXRlUGlja2VyKCl7KHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5z'@;
put 'ZWxlY3RlZEVuZERheXx8IXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpJiYodGhpcy5fdG9nZ2xlU2VydmljZS5vcGVuPSExKX11cGRhdGVDYWxlbmRhclZpZXdNb2RhbChhKXtjb25zdCBk'@;
put 'PXRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXl8fG51bGwsaD10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcjtsZXQgZj10aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRW5kRGF5fHxudWxsO3JldHVybiBoPyFkfHxkJiZmfHxkJiZhPy5pc0Jl'@;
put 'Zm9yZShkKT8odGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheShhKSxmJiYoZj12b2lkIDAsdGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZEVuZERheShmKSkpOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkoYSk6dGhp'@;
put 'cy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheShhKSxoP3tzdGFydERhdGU6dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZERheSxlbmREYXRlOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWRFbmREYXl9OnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0'@;
put 'ZWREYXl9cmVmcmVzaENhbGVuZGFyVmlld01vZGFsKCl7dGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZERheSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNh'@;
put 'bGVuZGFyVmlld01vZGVsLnVwZGF0ZVNlbGVjdGVkRW5kRGF5KHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSl9Z2VuZXJhdGVDYWxlbmRhclZpZXcoKXt0aGlzLmNhbGVuZGFyVmlld01vZGVsPW5ldyBhWmUodGhpcy5jYWxlbmRhcix0aGlzLnNlbGVjdGVkRGF5'@;
put 'LHRoaXMuc2VsZWN0ZWRFbmREYXksdGhpcy5mb2N1c2VkRGF5LHRoaXMudG9kYXksdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5maXJzdERheU9mV2Vlayx0aGlzLl9kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKShHZShVeCksR2UoeGgpLEdlKENtKSxHZShjZyksR2UoSmkpLEdlKFd5KSxHZShzYykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2FsZW5kYXIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5ZG93biIsZnVuY3Rpb24o'@;
put 'Zil7cmV0dXJuIGQub25LZXlEb3duKGYpfSl9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWyJyb2xlIiwicHJlc2VudGF0aW9uIiwxLCJjYWxlbmRhci10YWJsZSJdLFsxLCJjYWxlbmRhci1yb3ciLCJ3ZWVrZGF5cyJdLFsiY2xhc3MiLCJjYWxlbmRhci1jZWxsIHdlZWtkYXkiLDQsIm5nRm9y'@;
put 'IiwibmdGb3JPZiJdLFsiY2xhc3MiLCJjYWxlbmRhci1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIiwid2Vla2RheSJdLFsxLCJjYWxlbmRhci1yb3ciXSxbImNsYXNzIiwiY2FsZW5kYXItY2VsbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNhbGVuZGFy'@;
put 'LWNlbGwiXSxbMywic2VsZWN0RGF5IiwiY2xyRGF5VmlldyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsInRhYmxlIiwwKSgxLCJ0ciIsMSksbXQoMixDTmUsMywyLCJ0aCIsMiksaGUoKSxtdCgzLE1OZSwyLDEsInRyIiwzKSxoZSgpKSwyJmEmJihmZSgyKSx4ZSgibmdG'@;
put 'b3JPZiIsZC5sb2NhbGVEYXlzKSxmZSgpLHhlKCJuZ0Zvck9mIixkLmNhbGVuZGFyVmlld01vZGVsLmNhbGVuZGFyVmlldykpfSxkZXBlbmRlbmNpZXM6W2xzLGFkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCkscUw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2N1bWVu'@;
put 'dD1hLHRoaXMuX2lzVXNlckFnZW50TW9iaWxlPSExLGEmJih0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT1KVWUudGVzdChhLmRlZmF1bHRWaWV3Lm5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuX2lubmVyV2lkdGg9YS5kZWZhdWx0Vmlldy5pbm5lcldpZHRoKX1nZXQgaXNFbmFibGVkKCl7cmV0'@;
put 'dXJuISh0aGlzLl9kb2N1bWVudCYmdGhpcy5faW5uZXJXaWR0aDw3NjgmJnRoaXMuX2lzVXNlckFnZW50TW9iaWxlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIodnMpKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAy'@;
put 'NzVmYWN9KSxjfSkoKSxpRz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgXzd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLG5lLGNlLGJlLEVlLEJlKXtzdXBlcihhLFd4LGQsdixmLGgpLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5jb250cm9sPXYsdGhpcy5jb250YWluZXI9TSx0'@;
put 'aGlzLmRhdGVJT1NlcnZpY2U9RCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1aLHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlPW5lLHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1jZSx0aGlzLnBsYXRmb3JtSWQ9YmUsdGhpcy5mb2N1c1NlcnZpY2U9RWUsdGhpcy5kYXRlcGlj'@;
put 'a2VyRm9jdXNTZXJ2aWNlPUJlLHRoaXMuaW5kZXg9MX1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlP3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZHx8ISF0aGlzLmNvbnRyb2w/LmNvbnRyb2w/LmRpc2FibGVkOm51bGx9c2V0IGRp'@;
put 'c2FibGVkKGEpe3RoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZSYmdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLnNldERpc2FibGVkKHFmKGEpKX1nZXQgcGxhY2Vob2xkZXJUZXh0KCl7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXI/dGhpcy5wbGFjZWhvbGRlcjp0aGlzLmRhdGVJT1NlcnZp'@;
put 'Y2UucGxhY2Vob2xkZXJUZXh0fWdldCBpbnB1dFR5cGUoKXtyZXR1cm4gZWwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKT8iZGF0ZSI6InRleHQifW5nT25Jbml0KCl7c3VwZXIubmdPbkluaXQoKSx0aGlzLnBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFp'@;
put 'bmVyQ29tcG9uZW50KCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JVc2VyU2VsZWN0ZWREYXlDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JDb250cm9sVmFsdWVDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JUb3VjaENoYW5nZXMoKSx0aGlzLmxpc3RlbkZvckRpcnR5Q2hh'@;
put 'bmdlcygpLHRoaXMubGlzdGVuRm9ySW5wdXRSZWZvY3VzKCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucHJvY2Vzc0luaXRpYWxJbnB1dHMoKX1zZXRGb2N1c1N0YXRlcygpe3RoaXMuc2V0Rm9jdXMoITApfXRyaWdnZXJWYWxpZGF0aW9uKCl7c3VwZXIudHJpZ2dlclZhbGlkYXRpb24oKSx0'@;
put 'aGlzLnNldEZvY3VzKCExKX1vblZhbHVlQ2hhbmdlKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEudmFsdWUpO2lmKHRoaXMudXNpbmdDbGFyaXR5RGF0ZXBpY2tlcigpJiZkKXRoaXMudXBkYXRlRGF0ZShkLCEwKTtlbHNlIGlmKHRo'@;
put 'aXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCkpe2NvbnN0W2gsZix2XT1hLnZhbHVlLnNwbGl0KCItIik7dGhpcy51cGRhdGVEYXRlKG5ldyBEYXRlKCtoLCtmLTEsK3YpLCEwKX1lbHNlIHRoaXMuZW1pdERhdGVPdXRwdXQobnVsbCl9ZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCl7cmV0dXJu'@;
put 'ISF0aGlzLmNvbnRyb2x9c2V0RGF0ZShhKXsic3RyaW5nIj09dHlwZW9mIGEmJihhPW5ldyBEYXRlKGEpKSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSE9PWEmJnRoaXMudXBkYXRlRGF0ZShhKSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1'@;
put 'dFZhbHVlPWEpfXVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpe3JldHVybiF0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5pc0VuYWJsZWR9c2V0Rm9jdXMoYSl7'@;
put 'dGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkPWEpfXBvcHVsYXRlU2VydmljZXNGcm9tQ29udGFpbmVyQ29tcG9uZW50KCl7dGhpcy5jb250YWluZXJ8fCh0aGlzLmRhdGVJT1NlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoY2cpLHRoaXMu'@;
put 'ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKHhoKSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihxTCksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJG'@;
put 'cm9tQ29udGFpbmVyKFd5KSl9cHJvY2Vzc0luaXRpYWxJbnB1dHMoKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcodGhpcy5jb250cm9sLnZhbHVlKSk6dGhpcy51cGRh'@;
put 'dGVEYXRlKHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlKX11cGRhdGVEYXRlKGEsZD0hMSl7Y29uc3QgaD10aGlzLmdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoYSk7aWYoZD90aGlzLmVtaXREYXRlT3V0cHV0KGgpOnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWgsdGhpcy5kYXRlTmF2'@;
put 'aWdhdGlvblNlcnZpY2Upe2NvbnN0IGY9aD9uZXcgTGQoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSk6bnVsbDt0aGlzLnVwZGF0ZURheU1vZGVsKGYpfXRoaXMudXBkYXRlSW5wdXQoaCl9dXBkYXRlSW5wdXQoYSl7aWYoYSl7Y29uc3QgZD10aGlzLmRhdGVJT1Nl'@;
put 'cnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3RoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/KGEuc2V0TWludXRlcyhhLmdldE1pbnV0ZXMoKS1hLmdldFRpbWV6b25lT2Zmc2V0KCkpLHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50'@;
put 'LCJ2YWx1ZUFzRGF0ZSIsYSkpOnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJmQhPT10aGlzLmNvbnRyb2wudmFsdWU/dGhpcy5jb250cm9sLmNvbnRyb2wuc2V0VmFsdWUoZCk6dGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlIixk'@;
put 'KSx0aGlzLnZhbGlkYXRlRGF0ZVJhbmdlKCl9ZWxzZSB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWUiLCIiKX1nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1Nl'@;
put 'cnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3JldHVybiB0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoZCl9cmV0dXJuIG51bGx9ZW1pdERhdGVPdXRwdXQoYSl7IWZ1bmN0aW9uIGlaZShjLGwpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0'@;
put 'ZSYmbCBpbnN0YW5jZW9mIERhdGUmJmMuZ2V0RnVsbFllYXIoKT09PWwuZ2V0RnVsbFllYXIoKSYmYy5nZXRNb250aCgpPT09bC5nZXRNb250aCgpJiZjLmdldERhdGUoKT09PWwuZ2V0RGF0ZSgpfShhLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlKT8odGhpcy5kYXRlQ2hhbmdlLmVtaXQoYSks'@;
put 'dGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9YSk6IWEmJnRoaXMucHJldmlvdXNEYXRlQ2hhbmdlJiYodGhpcy5kYXRlQ2hhbmdlLmVtaXQobnVsbCksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9bnVsbCl9bGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVwaWNr'@;
put 'ZXJIYXNGb3JtQ29udHJvbCgpP3RoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShHbCgoKT0+IXRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZS5lbGVtZW50SXNGb2N1c2VkKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpKS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVEYXRlKHRoaXMuZGF0'@;
put 'ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhKSkpOm51bGx9bGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpe3JldHVybiB0aGlzLnVzZXJTZWxlY3RlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVEYXRlKGE/LnRvRGF0ZSgpLCEwKSl9bGlz'@;
put 'dGVuRm9yVG91Y2hDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS50b3VjaGVkQ2hhbmdlLnBpcGUoR2woKCk9PnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBc1RvdWNoZWQo'@;
put 'KSl9bGlzdGVuRm9yRGlydHlDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXJ0eUNoYW5nZS5waXBlKEdsKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQXNEaXJ0'@;
put 'eSgpKX1saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2UucGlwZShHbChhPT4hIWEmJiF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKSkuc3Vic2NyaWJlKCgpPT50aGlzLmRhdGVw'@;
put 'aWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNJbnB1dCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKX12YWxpZGF0ZURhdGVSYW5nZSgpe2lmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXIpe2NvbnN0IGE9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPy5jb250cm9sLGQ9dGhpcy5u'@;
put 'Z0NvbnRyb2xTZXJ2aWNlPy5hZGRpdGlvbmFsQ29udHJvbHM7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LmlzQmVmb3JlKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LCEwKSYmKGE/Lmhhc0Vycm9yKCJyYW5nZSIpfHxkPy5zb21lKGY9'@;
put 'PmYuaGFzRXJyb3IoInJhbmdlIikpKSYmKGEuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZC5mb3JFYWNoKGY9PntmPy5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pKX19fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERhKSxHZShEcyksR2UoSmkpLEdlKEVhKSxHZShkMSwxMCksR2Uoa3MoKCk9Pld4KSw4KSxHZShjZyw4KSxHZSh4aCw4KSxHZShxTCw4KSxHZShXeSw4KSxHZShvYSksR2UoenksOCksR2UoQ20pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6'@;
put 'Yyxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNldEZvY3VzU3RhdGVzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSkoImNoYW5nZSIsZnVuY3Rpb24oZil7'@;
put 'cmV0dXJuIGQub25WYWx1ZUNoYW5nZShmLnRhcmdldCl9KSwyJmEmJihhcCgiZGlzYWJsZWQiLGQuZGlzYWJsZWQpLGZyKCJwbGFjZWhvbGRlciIsZC5wbGFjZWhvbGRlclRleHQpKCJ0eXBlIixkLmlucHV0VHlwZSkpfSxpbnB1dHM6e3BsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsZGlzYWJs'@;
put 'ZWQ6ImRpc2FibGVkIn0sZmVhdHVyZXM6W0NvXX0pLGN9KSgpLGxkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgaUd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuZGF0ZUNoYW5nZT1uZXcgWHIoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQgZGF0ZShhKXt0aGlzLnNl'@;
put 'dERhdGUoYSl9Z2V0IGlucHV0U2l6ZSgpe3JldHVybiB0aGlzLmlucHV0V2lkdGh9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpe3Ro'@;
put 'aXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5jb250cm9sLmNvbnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX11cGRhdGVEYXlN'@;
put 'b2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWRFbmREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5PWF9fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVdzKGMp'@;
put 'KSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJFbmREYXRlIiwiIl1dLGhvc3RWYXJzOjMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoZnIoInNpemUiLGQuaW5wdXRTaXplKSxUcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6'@;
put 'e2lucHV0V2lkdGg6ImlucHV0V2lkdGgiLGRhdGU6W2puLk5vbmUsImNsckVuZERhdGUiLCJkYXRlIl19LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsckVuZERhdGVDaGFuZ2UifSxmZWF0dXJlczpbZm8oW0NtXSksQ29dfSksY30pKCksWEw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGlHe2NvbnN0'@;
put 'cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IFhyKCExKX1zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9c2V0IG1pbihhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0TWluRGF0ZShhKSx0aGlzLnRyaWdnZXJDb250cm9sVmFsaWRhdGlvbigpfXNldCBt'@;
put 'YXgoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1heERhdGUoYSksdGhpcy50cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKX1nZXQgdXNlclNlbGVjdGVkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlfXVwZGF0ZURheU1vZGVs'@;
put 'KGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnBlcnNpc3RlZERhdGU9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk9YX10cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRy'@;
put 'b2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8'@;
put 'fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWlucHV0IiwhMCl9LGlucHV0czp7ZGF0ZTpbam4uTm9uZSwiY2xy'@;
put 'RGF0ZSIsImRhdGUiXSxtaW46Im1pbiIsbWF4OiJtYXgifSxvdXRwdXRzOntkYXRlQ2hhbmdlOiJjbHJEYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W2ZvKFtDbV0pLENvXX0pLGN9KSgpLGNkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgaUd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMp'@;
put 'LHRoaXMuZGF0ZUNoYW5nZT1uZXcgWHIoITEpLHRoaXMuaW5wdXRXaWR0aD0xM31zZXQgZGF0ZShhKXt0aGlzLnNldERhdGUoYSl9Z2V0IGlucHV0U2l6ZSgpe3JldHVybiB0aGlzLmlucHV0V2lkdGh9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0'@;
put 'aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZX10cmlnZ2VyQ29udHJvbElucHV0VmFsaWRhdGlvbigpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJih0aGlzLmNvbnRyb2wuY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5jb250'@;
put 'cm9sLmNvbnRyb2w/LnNldEVycm9ycyh0aGlzLmNvbnRyb2wuY29udHJvbC5lcnJvcnMpKX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PWF9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTdGFydERhdGUiLCIiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxk'@;
put 'KXsyJmEmJihmcigic2l6ZSIsZC5pbnB1dFNpemUpLHdkKCJ0ZXh0LWFsaWduIiwicmlnaHQiKSxUcigiY2xyLWlucHV0IiwhMCkpfSxpbnB1dHM6e2lucHV0V2lkdGg6ImlucHV0V2lkdGgiLGRhdGU6W2puLk5vbmUsImNsclN0YXJ0RGF0ZSIsImRhdGUiXX0sb3V0cHV0czp7ZGF0ZUNoYW5n'@;
put 'ZToiY2xyU3RhcnREYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W2ZvKFtDbV0pLENvXX0pLGN9KSgpLFl5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aW9uPVRkWyJib3R0b20tbGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQgaXNEYXlWaWV3KCl7cmV0'@;
put 'dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIk1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VUb01vbnRoVmlldygpe3Ro'@;
put 'aXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNoYW5nZVRvRGF5Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco'@;
put 'YXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlz'@;
put 'Ll9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZWxSZWY9Zix0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9dix0aGlzLmNvbW1vblN0cmluZ3M9TSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleD10aGlzLmNhbGVuZGFyTW9udGhJbmRleH1nZXQgbW9udGhOYW1lcygpe3JldHVybiB0aGlz'@;
put 'Ll9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZU1vbnRoc1dpZGV9Z2V0IGNhbGVuZGFyTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGh9Z2V0IGNhbGVuZGFyRW5kTW9udGhJbmRleCgpe3JldHVybiB0aGlzLl9k'@;
put 'YXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/Lm1vbnRofWdldCB5ZWFyQXR0clN0cmluZygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0LHtDQUxFTkRBUl9ZRUFSOnRoaXMu'@;
put 'Y2FsZW5kYXJZZWFyLnRvU3RyaW5nKCl9KX1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWdldCBjdXJyZW50Q2FsZW5kYXJZZWFyKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfWdldCBj'@;
put 'dXJyZW50Q2FsZW5kYXJNb250aCgpe3JldHVybihuZXcgRGF0ZSkuZ2V0TW9udGgoKX1nZXRJc1JhbmdlU3RhcnRNb250aChhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25T'@;
put 'ZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5tb250aH1nZXRJc1JhbmdlRW5kTW9udGgoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNhbGVuZGFyWWVh'@;
put 'cj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ubW9udGh9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb1llYXJW'@;
put 'aWV3KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpfW9uS2V5RG93bihhKXtpZihhKXtjb25zdCBkPUEyKGEua2V5KTtkPT09UWkuQXJyb3dVcCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg+MT8oYS5wcmV2ZW50'@;
put 'RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LT0yLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6ZD09PVFpLkFycm93RG93biYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8MTA/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1'@;
put 'c2VkTW9udGhJbmRleCs9Mix0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOmQ9PT1RaS5BcnJvd1JpZ2h0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleDwxMT8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4KyssdGhp'@;
put 'cy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09UWkuQXJyb3dMZWZ0JiZ0aGlzLl9mb2N1c2VkTW9udGhJbmRleD4wJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2ZvY3VzZWRNb250aEluZGV4LS0sdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2Vy'@;
put 'dmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKX19aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyPT09dGhpcy5jYWxlbmRhclllYXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/Lm1v'@;
put 'bnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXI9PT10aGlzLmNhbGVuZGFyWWVhciYmYT09PXRoaXMuY2FsZW5kYXJFbmRNb250aEluZGV4fW9uSG92ZXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aD1hfWNoYW5n'@;
put 'ZU1vbnRoKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VNb250aChhKSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9Z2V0VGFiSW5kZXgoYSl7cmV0dXJuIGE9PT10aGlzLl9mb2N1c2VkTW9udGhJbmRleD8wOi0xfW5leHRZZWFyKCl7dGhp'@;
put 'cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb05leHRZZWFyKCl9cHJldmlvdXNZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb1ByZXZpb3VzWWVhcigpfWN1cnJlbnRZZWFyKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250'@;
put 'aCgpfWlzSW5SYW5nZShhKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/dGhpcy5jYWxlbmRh'@;
put 'clllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGgmJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5'@;
put 'LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Lm1vbnRofHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciE9PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZ0aGlzLmNhbGVu'@;
put 'ZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIhPT10aGlzLl9kYXRlTmF2'@;
put 'aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkubW9udGh8fHRoaXMuY2Fs'@;
put 'ZW5kYXJZZWFyPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZ0aGlzLmNhbGVuZGFyWWVhcjx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkueWVhcjohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl8'@;
put 'fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSkmJih0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS55ZWFyJiZhPnRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheS5tb250aCYmYTx0'@;
put 'aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRofHx0aGlzLmNhbGVuZGFyWWVhcj50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaG92ZXJlZE1vbnRoKSl9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFV4KSxHZSh4aCksR2UoQ20pLEdlKEppKSxHZShZeSksR2UobnMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLW1vbnRocGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJd'@;
put 'LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3duKGYpfSksMiZhJiZUcigibW9udGhwaWNrZXIiLCEwKX0sZGVjbHM6MTMsdmFyczoxMCxjb25zdHM6W1sxLCJjYWxlbmRhci1oZWFkZXIi'@;
put 'LCJpbi1tb250aHBpY2tlciJdLFsxLCJ5ZWFyLXZpZXctc3dpdGNoZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsMywiY2xpY2siXSxbMSwiY2FsZW5kYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1i'@;
put 'dG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwibW9udGhzIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjYWxlbmRh'@;
put 'ci1idG4gbW9udGgiLDMsImlzLXNlbGVjdGVkIiwiaXMtc3RhcnQtcmFuZ2UiLCJpcy1lbmQtcmFuZ2UiLCJpbi1yYW5nZSIsImlzLXRvZGF5IiwiY2xpY2siLCJtb3VzZWVudGVyIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRo'@;
put 'IiwzLCJjbGljayIsIm1vdXNlZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9ZZWFyVmlldygpfSksTGUoMyksaGUoKSgpLGRlKDQs'@;
put 'ImRpdiIsMykoNSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJldmlvdXNZZWFyKCl9KSxHdCg2LCJjZHMtaWNvbiIsNSksaGUoKSxkZSg3LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXJyZW50WWVhcigpfSksR3QoOCwi'@;
put 'Y2RzLWljb24iLDYpLGhlKCksZGUoOSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dFllYXIoKX0pLEd0KDEwLCJjZHMtaWNvbiIsNyksaGUoKSgpKCksZGUoMTEsImRpdiIsOCksbXQoMTIseE5lLDIsMTIsImJ1dHRvbiIsOSksaGUoKSksMiZhJiYoZmUo'@;
put 'MiksZnIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyksZmUoKSxJcigiICIsZC5jYWxlbmRhclllYXIsIiAiKSxmZSgyKSxmcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZl'@;
put 'KCksZnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksZmUoKSxmcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksZmUoKSxmcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRh'@;
put 'dGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksZnIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLGZlKCksZnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgyKSx4ZSgibmdGb3JPZiIsZC5t'@;
put 'b250aE5hbWVzKSl9LGRlcGVuZGVuY2llczpbbHMsdXNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIFp4e2NvbnN0cnVjdG9yKGwpe3RoaXMueWVhcj1sLHRoaXMueWVhclJhbmdlPVtdLHRoaXMuZ2VuZXJhdGVZZWFyUmFuZ2UoKX1nZXQgbWlkZGxlWWVhcigpe3JldHVybiB0aGlz'@;
put 'LnllYXJSYW5nZVtNYXRoLmZsb29yKHRoaXMueWVhclJhbmdlLmxlbmd0aC8yKV19bmV4dERlY2FkZSgpe3JldHVybiBuZXcgWngodGhpcy55ZWFyKzEwKX1wcmV2aW91c0RlY2FkZSgpe3JldHVybiBuZXcgWngodGhpcy55ZWFyLTEwKX1jdXJyZW50RGVjYWRlKCl7cmV0dXJuIG5ldyBaeCgo'@;
put 'bmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpfWluUmFuZ2UobCl7cmV0dXJuIHRoaXMueWVhclJhbmdlLmluZGV4T2YobCk+LTF9Z2VuZXJhdGVZZWFyUmFuZ2UoKXtjb25zdCBhPXRoaXMueWVhci10aGlzLnllYXIlMTA7dGhpcy55ZWFyUmFuZ2U9dGhpcy5nZW5lcmF0ZVJhbmdlKGEsYSsxMCl9'@;
put 'Z2VuZXJhdGVSYW5nZShsLGEpe3JldHVybiBBcnJheS5mcm9tKHtsZW5ndGg6YS1sfSwoZCxoKT0+aCtsKX19bGV0IGhkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWEsdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlPWQs'@;
put 'dGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRoaXMuX2VsUmVmPWYsdGhpcy5jb21tb25TdHJpbmdzPXYsdGhpcy55ZWFyUmFuZ2VNb2RlbD1uZXcgWngodGhpcy5jYWxlbmRhclllYXIpLHRoaXMuX2ZvY3VzZWRZZWFyPXRoaXMuY2FsZW5kYXJZZWFyfWdldCBzZWxlY3RlZFN0YXJ0'@;
put 'WWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXJ9Z2V0IHNlbGVjdGVkRW5kWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXJ9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0'@;
put 'aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1pc0N1cnJlbnRDYWxlbmRhclllYXIoYSl7cmV0dXJuIGE9PT0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCl9Z2V0SXNSYW5nZVN0YXJ0WWVhcihhKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2'@;
put 'aWNlLmlzUmFuZ2VQaWNrZXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXk/LnllYXJ9Z2V0SXNSYW5nZUVuZFllYXIoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25T'@;
put 'ZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1vbktleURvd24oYSl7aWYoYSl7Y29uc3QgZD1BMihhLmtleSk7ZD09PVFpLkFycm93VXA/KGEucHJldmVudERlZmF1'@;
put 'bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC0yKSk6ZD09PVFpLkFycm93RG93bj8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoMikpOmQ9PT1RaS5BcnJvd1JpZ2h0PyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJC'@;
put 'eSgxKSk6ZD09PVFpLkFycm93TGVmdCYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC0xKSl9fWNoYW5nZVllYXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5nZVllYXIoYSksdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRv'@;
put 'RGF5VmlldygpfW9uSG92ZXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRZZWFyPWF9cHJldmlvdXNEZWNhZGUoKXt0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwucHJldmlvdXNEZWNhZGUoKX1jdXJyZW50RGVjYWRlKCl7dGhpcy55ZWFyUmFu'@;
put 'Z2VNb2RlbC5pblJhbmdlKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheS55ZWFyKXx8KHRoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2RlbC5jdXJyZW50RGVjYWRlKCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVm'@;
put 'KX1uZXh0RGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKX1nZXRUYWJJbmRleChhKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuX2ZvY3VzZWRZZWFyKXx8KHRoaXMuX2ZvY3VzZWRZZWFyPXRoaXMueWVh'@;
put 'clJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLmNhbGVuZGFyWWVhcik/dGhpcy5jYWxlbmRhclllYXI6dGhpcy55ZWFyUmFuZ2VNb2RlbC5pblJhbmdlKHRoaXMuc2VsZWN0ZWRFbmRZZWFyKT90aGlzLnNlbGVjdGVkRW5kWWVhcjp0aGlzLnllYXJSYW5nZU1vZGVsLm1pZGRsZVllYXIpLHRoaXMu'@;
put 'X2ZvY3VzZWRZZWFyPT09YT8wOi0xfWlzSW5SYW5nZShhKXtyZXR1cm4hIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyJiZ0aGlzLnNlbGVjdGVkRW5kWWVhcj9hPnRoaXMuc2Vs'@;
put 'ZWN0ZWRTdGFydFllYXImJmE8dGhpcy5zZWxlY3RlZEVuZFllYXI6ISghdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyfHx0aGlzLnNlbGVjdGVkRW5kWWVhcikmJmE+dGhpcy5zZWxlY3RlZFN0YXJ0WWVhciYmYTx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZp'@;
put 'Y2UuaG92ZXJlZFllYXIpfWNoYW5nZVRvRGF5Vmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1pbmNyZW1lbnRGb2N1c1llYXJCeShhKXt0aGlzLl9mb2N1c2VkWWVhcj10aGlzLl9mb2N1c2VkWWVhcithLHRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5n'@;
put 'ZSh0aGlzLl9mb2N1c2VkWWVhcil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPWE+MD90aGlzLnllYXJSYW5nZU1vZGVsLm5leHREZWNhZGUoKTp0aGlzLnllYXJSYW5nZU1vZGVsLnByZXZpb3VzRGVjYWRlKCkpLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2Vs'@;
put 'UmVmKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoeGgpLEdlKFl5KSxHZShDbSksR2UoSmkpLEdlKG5zKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci15ZWFycGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJh'@;
put 'cHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3duKGYpfSksMiZhJiZUcigieWVhcnBpY2tlciIsITApfSxkZWNsczoxMyx2YXJzOjksY29uc3RzOltbMSwiY2FsZW5k'@;
put 'YXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInllYXJwaWNrZXItdHJpZ2dlciIsInllYXItcmFuZ2UiLDMsImNsaWNrIl0sWzEsInllYXItc3dpdGNoZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1i'@;
put 'dG4iLCJzd2l0Y2hlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJzaGFwZSIsImV2ZW50Il0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbMSwieWVhcnMiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFy'@;
put 'LWJ0biB5ZWFyIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5kLXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNrIiwibW91c2VlbnRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFyIiwz'@;
put 'LCJjbGljayIsIm1vdXNlZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9EYXlWaWV3KCl9KSxMZSgzKSxoZSgpKCksZGUoNCwiZGl2'@;
put 'IiwzKSg1LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c0RlY2FkZSgpfSksR3QoNiwiY2RzLWljb24iLDUpLGhlKCksZGUoNywiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY3VycmVudERlY2FkZSgpfSksR3QoOCwi'@;
put 'Y2RzLWljb24iLDYpLGhlKCksZGUoOSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dERlY2FkZSgpfSksR3QoMTAsImNkcy1pY29uIiw3KSxoZSgpKCkoKSxkZSgxMSwiZGl2Iiw4KSxtdCgxMixFTmUsMiwxMiwiYnV0dG9uIiw5KSxoZSgpKSwyJmEmJihm'@;
put 'ZSgzKSxqdSgiICIsZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbMF0sIiAtICIsZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2VbZC55ZWFyUmFuZ2VNb2RlbC55ZWFyUmFuZ2UubGVuZ3RoLTFdLCIgIiksZmUoMiksZnIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVw'@;
put 'aWNrZXJQcmV2aW91c0RlY2FkZSksZmUoKSxmcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksZmUoKSxmcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNhZGUpLGZlKCksZnIoInRpdGxl'@;
put 'IixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudERlY2FkZSksZmUoKSxmcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLGZlKCksZnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dERl'@;
put 'Y2FkZSksZmUoMikseGUoIm5nRm9yT2YiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlKSl9LGRlcGVuZGVuY2llczpbbHMsdXNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGZkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1h'@;
put 'LHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlj'@;
put 'a2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9NT05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5E'@;
put 'QVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJyZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9u'@;
put 'dGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1jaGFuZ2VUb1llYXJWaWV3KCl7'@;
put 'dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlvdXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c01vbnRo'@;
put 'KCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShZeSksR2UoeGgpLEdlKFV4KSxHZShucykpfSxjLlx1MDI3NWNtcD1Wcih7dHlw'@;
put 'ZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJhcHBsaWNhdGlvbiJdLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiZGF5cGlja2VyIiwhMCl9LGRlY2xzOjE4LHZhcnM6MTQsY29uc3RzOltbMSwiY2xyLXNy'@;
put 'LW9ubHkiXSxbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRocGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2Vy'@;
put 'LXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUi'@;
put 'LCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSxMZSgxKSxoZSgpLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb01v'@;
put 'bnRoVmlldygpfSksTGUoNSksaGUoKSxkZSg2LCJidXR0b24iLDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSxMZSg3KSxoZSgpKCksZGUoOCwiZGl2Iiw1KSg5LCJidXR0b24iLDYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5w'@;
put 'cmV2aW91c01vbnRoKCl9KSxHdCgxMCwiY2RzLWljb24iLDcpLGhlKCksZGUoMTEsImJ1dHRvbiIsNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRNb250aCgpfSksR3QoMTIsImNkcy1pY29uIiw4KSxoZSgpLGRlKDEzLCJidXR0b24iLDYpLEZ0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gZC5uZXh0TW9udGgoKX0pLEd0KDE0LCJjZHMtaWNvbiIsOSksaGUoKSgpKCksR3QoMTUsImNsci1jYWxlbmRhciIpLGRlKDE2LCJkaXYiLDApLExlKDE3KSxoZSgpKSwyJmEmJihmZSgpLHdyKGQuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudFN0YXJ0KSxm'@;
put 'ZSgzKSxmcigiYXJpYS1sYWJlbCIsZC5tb250aEF0dHJTdHJpbmcpKCJ0aXRsZSIsZC5tb250aEF0dHJTdHJpbmcpLGZlKCksSXIoIiAiLGQuY2FsZW5kYXJNb250aCwiICIpLGZlKCksZnIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0aXRsZSIsZC55ZWFyQXR0clN0cmluZyks'@;
put 'ZmUoKSxJcigiICIsZC5jYWxlbmRhclllYXIsIiAiKSxmZSgyKSxmcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksZnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNNb250aCksZmUo'@;
put 'KSxmcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksZmUoKSxmcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksZnIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlz'@;
put 'LmRhdGVwaWNrZXJOZXh0TW9udGgpLGZlKCksZnIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgzKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpKX0sZGVwZW5kZW5jaWVzOlt1cyxzZGVdLGVuY2Fwc3VsYXRpb246'@;
put 'Mn0pLGN9KSgpLHBkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWgsdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPWZ9YXBwbHkoKXt0aGlzLmRh'@;
put 'dGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/KHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hh'@;
put 'bmdlZCh7c3RhcnREYXRlOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LGVuZERhdGU6dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl9KSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSk6IXRoaXMuZGF0ZU5hdmln'@;
put 'YXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiYodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSx0aGlz'@;
put 'LmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITF9Y2FuY2VsKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucmVzZXRTZWxlY3RlZERheSgpLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfX1yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShucyksR2Uoc2MpLEdlKHhoKSxHZShXeSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZh'@;
put 'JiZUcigiZGF0ZXBpY2tlci1hY3Rpb25zIiwhMCl9LGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24i'@;
put 'LDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jYW5jZWwoKX0pLExlKDEpLGhlKCksZGUoMiwiYnV0dG9uIiwxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuYXBwbHkoKX0pLExlKDMpLGhlKCkpLDImYSYmKGZlKCksd3IoZC5jb21tb25TdHJpbmdzLmtleXMuY2Fu'@;
put 'Y2VsKSxmZSgyKSx3cihkLmNvbW1vblN0cmluZ3Mua2V5cy5hcHBseSkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxnZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1kLHRoaXMuZGF0ZU5h'@;
put 'dmlnYXRpb25TZXJ2aWNlPWgsdGhpcy5kYXRlSU9TZXJ2aWNlPWZ9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzTW9udGhWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzWWVhclZpZXd9Z2V0IGlz'@;
put 'RGF5Vmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc0RheVZpZXd9Z2V0IGhhc1JhbmdlT3B0aW9ucygpe3JldHVybiEhdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U/LmlzUmFuZ2VQaWNrZXImJiEhdGhpcy5kYXRlUmFuZ2VPcHRpb25zPy5sZW5ndGh9Z2V0IGhhc0Fj'@;
put 'dGlvbkJ1dHRvbnMoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaGFzQWN0aW9uQnV0dG9uc31nZXQgZGF0ZVJhbmdlT3B0aW9ucygpe3JldHVybiB0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0UmFuZ2VPcHRpb25zKCl9b25SYW5nZU9wdGlvblNlbGVjdChhKXtjb25zdCBkPXRo'@;
put 'aXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNvbnZlcnREYXRlVG9EYXlNb2RlbChhPy52YWx1ZVswXSksaD10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5jb252ZXJ0RGF0ZVRvRGF5TW9kZWwoYT8udmFsdWVbMV0pO3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVk'@;
put 'RGF5Q2hhbmdlZCh7c3RhcnREYXRlOmQsZW5kRGF0ZTpofSx7ZW1pdEV2ZW50OiF0aGlzLmhhc0FjdGlvbkJ1dHRvbnN9KSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9TcGVjaWZpY01vbnRoKGQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKShHZShucyksR2UoWXkpLEdlKHhoKSxHZShjZykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiXV0saG9zdEF0dHJzOlsicm9sZSIsImRpYWxvZyJdLGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEs'@;
put 'ZCl7MiZhJiYoZnIoImFyaWEtbW9kYWwiLCEwKSgiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckRpYWxvZ0xhYmVsKSxUcigiZGF0ZXBpY2tlciIsITApKCJoYXMtcmFuZ2Utb3B0aW9uIixkLmhhc1JhbmdlT3B0aW9ucykoImhhcy1hY3Rpb24tYnV0dG9ucyIs'@;
put 'ZC5oYXNBY3Rpb25CdXR0b25zKSl9LGZlYXR1cmVzOltmbyhbQ21dKV0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbImNhbGVuZGFyVmlldyIsIiJdLFs0LCJuZ0lmIiwibmdJZkVsc2UiXSxbMSwiY2xyLWRhdGUtcmFuZ2UtcGlja2VyLW5hdiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwi'@;
put 'ZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwiaHJlZiIsImphdmFzY3JpcHQ6dm9pZCgwKSIsInRhYmluZGV4IiwiMCIsMywia2V5dXAuZW50ZXIiLCJjbGljayJdLFs0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1'@;
put 'bmN0aW9uKGEsZCl7aWYoMSZhJiZtdCgwLGtOZSw1LDIsIm5nLWNvbnRhaW5lciIsMSkoMSxPTmUsNCw0LCJuZy10ZW1wbGF0ZSIsbnVsbCwwLF91KSwyJmEpe2NvbnN0IGg9dm8oMik7eGUoIm5nSWYiLGQuaGFzUmFuZ2VPcHRpb25zKSgibmdJZkVsc2UiLGgpfX0sZGVwZW5kZW5jaWVzOlts'@;
put 'cyx5byxOMSxYWSxRWSx1ZGUsaGRlLGZkZSxwZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFd4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5N3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFosbmUsY2UsYmUsRWUsQmUscWUpe2lmKHN1cGVyKHFlLEVlLGJlLEJlKSx0aGlzLnJlbmRlcmVy'@;
put 'PWEsdGhpcy5lbGVtPWQsdGhpcy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9Zix0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT12LHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT1NLHRoaXMuZGF0ZUlPU2VydmljZT1ELHRoaXMuY29tbW9uU3RyaW5n'@;
put 'cz1aLHRoaXMudmlld01hbmFnZXJTZXJ2aWNlPWNlLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1iZSx0aGlzLmxheW91dFNlcnZpY2U9RWUsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPUJlLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPXFlLHRoaXMuZm9jdXM9ITEsdGhpcy5zdWJzY3JpcHRp'@;
put 'b25zLnB1c2gobmUuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKHJ0PT57dGhpcy5mb2N1cz1ydH0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKCgpPT57TS5tYXJrQXNUb3VjaGVkKCl9KSksZil7Y29uc3QgcnQ9ZC5uYXRpdmVFbGVtZW50LnRhZ05hbWUu'@;
put 'dG9Mb3dlckNhc2UoKTtmLmhhc0FjdGlvbkJ1dHRvbnM9Zi5pc1JhbmdlUGlja2VyPSJjbHItZGF0ZS1yYW5nZS1jb250YWluZXIiPT09cnR9fXNldCBzaG93QWN0aW9uQnV0dG9ucyhhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiYhYT9jb25zb2xlLmVycm9y'@;
put 'KCJFcnJvciEgVGhlIGRhdGUgcmFuZ2UgcGlja2VyIHJlcXVpcmVzIGFjdGlvbiBidXR0b25zLCBbc2hvd0FjdGlvbkJ1dHRvbnNdIGNhbm5vdCBiZSB0dXJuZWQgb2ZmLiIpOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnM9YX1zZXQgY2xyUG9zaXRpb24oYSl7'@;
put 'YSYmVGRbYV0mJih0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbj1UZFthXSl9c2V0IHJhbmdlT3B0aW9ucyhhKXt0aGlzLmRhdGVJT1NlcnZpY2Uuc2V0UmFuZ2VPcHRpb25zKGEpfXNldCBtaW4oYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcj8odGhp'@;
put 'cy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSksdGhpcy5jbHJTdGFydERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSx0aGlzLmNsckVuZERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSk6Y29uc29sZS5lcnJvcigiRXJyb3IhIFRo'@;
put 'ZSBkYXRlIGNvbnRhaW5lciBbbWluXSBpbnB1dCBvbmx5IHdvcmtzIGZvciBkYXRlIHJhbmdlIHBpY2tlcnMuIFVzZSB0aGUgbmF0aXZlIGBtaW5gIGF0dHJpYnV0ZS9wcm9wZXJ0eSBmb3Igc2luZ2xlLWRhdGUgaW5wdXRzLiIpfXNldCBtYXgoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZp'@;
put 'Y2UuaXNSYW5nZVBpY2tlcj8odGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1heERhdGUoYSksdGhpcy5jbHJTdGFydERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSx0aGlzLmNsckVuZERhdGVJbnB1dD8udHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKSk6Y29u'@;
put 'c29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIGNvbnRhaW5lciBbbWF4XSBpbnB1dCBvbmx5IHdvcmtzIGZvciBkYXRlIHJhbmdlIHBpY2tlcnMuIFVzZSB0aGUgbmF0aXZlIGBtYXhgIGF0dHJpYnV0ZS9wcm9wZXJ0eSBmb3Igc2luZ2xlLWRhdGUgaW5wdXRzLiIpfXNldCBhY3Rpb25CdXR0'@;
put 'b24oYSl7dGhpcy50b2dnbGVCdXR0b249YX1nZXQgcG9wb3ZlclBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLnBvc2l0aW9ufWdldCBvcGVuKCl7cmV0dXJuIHRoaXMudG9nZ2xlU2VydmljZS5vcGVufWdldCBpc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5kYXRlcGlj'@;
put 'a2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfWdldCBpc0lucHV0RGF0ZURpc2FibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmRpc2FibGVkfHx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5kaXNhYmxlZH1n'@;
put 'ZXQgaXNSYW5nZVBpY2tlcigpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuZGF0ZVJhbmdlU3RydWN0dXJhbENoZWNrcygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudG9nZ2xlU2VydmljZS5vcGVu'@;
put 'Q2hhbmdlLnN1YnNjcmliZShhPT57YT90aGlzLmluaXRpYWxpemVDYWxlbmRhcigpOih0aGlzLnRvZ2dsZUJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucmVzZXRTZWxlY3RlZERheSgpKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0'@;
put 'aGlzLmxpc3RlbkZvckRhdGVDaGFuZ2VzKCkpfWdldFRvZ2dsZUJ1dHRvbkxhYmVsKGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhLnRvRGF0ZSgpKTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaGFuZ2VEYXRlTGFiZWwse1NFTEVDVEVEX0RBVEU6ZH0pfXJldHVybiB0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hvb3NlRGF0ZUxhYmVsfWxpc3RlbkZvckRhdGVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMu'@;
put 'ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnBpcGUoeDIodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpKS5zdWJzY3JpYmUoYT0+e2lmKHRoaXMuaXNFbmFibGVkKXtjb25zdCBkPXRoaXMuZ2V0VG9nZ2xlQnV0dG9uTGFiZWwoYSksaD10aGlz'@;
put 'LnRvZ2dsZUJ1dHRvbi5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGgsImFyaWEtbGFiZWwiLGQpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGgsInRpdGxlIixkKX19KX1pbml0aWFsaXplQ2FsZW5kYXIoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5p'@;
put 'bml0aWFsaXplQ2FsZW5kYXIoKX1kYXRlUmFuZ2VTdHJ1Y3R1cmFsQ2hlY2tzKCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuY2xyRGF0ZUlucHV0JiZjb25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIG11c3QgY29u'@;
put 'dGFpbiBjbHJTdGFydERhdGUgYW5kIGNsckVuZERhdGUgaW5wdXRzIiksdGhpcy5jbHJTdGFydERhdGVJbnB1dHx8Y29uc29sZS5lcnJvcigiRXJyb3IhIGNsci1kYXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyU3RhcnREYXRlIGlucHV0IiksdGhpcy5jbHJFbmREYXRlSW5w'@;
put 'dXR8fGNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWluIGNsckVuZERhdGUgaW5wdXQiKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVhKSxHZShKaSksR2Uoc2MpLEdlKHhoKSxHZShx'@;
put 'TCksR2UoV3kpLEdlKGNnKSxHZShucyksR2UoenkpLEdlKFl5KSxHZShEZCksR2UoQ3AsOCksR2UoZjEpLEdlKGtkKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlLWNvbnRhaW5lciJdLFsiY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIl1dLGNvbnRlbnRR'@;
put 'dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihsYShoLFhMLDUpLGxhKGgsY2RlLDUpLGxhKGgsbGRlLDUpKSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLmNsckRhdGVJbnB1dD1mLmZpcnN0KSx4aShmPUVpKCkpJiYoZC5jbHJTdGFydERhdGVJbnB1dD1mLmZpcnN0KSx4aShmPUVp'@;
put 'KCkpJiYoZC5jbHJFbmREYXRlSW5wdXQ9Zi5maXJzdCl9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJm5hKFBOZSw1KSwyJmEpe2xldCBoO3hpKGg9RWkoKSkmJihkLmFjdGlvbkJ1dHRvbj1oLmZpcnN0KX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7'@;
put 'MiZhJiZUcigiY2xyLWRhdGUtY29udGFpbmVyIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLGQuaXNJbnB1dERhdGVEaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxpbnB1dHM6e3Nob3dBY3Rpb25CdXR0b25zOiJzaG93QWN0'@;
put 'aW9uQnV0dG9ucyIsY2xyUG9zaXRpb246ImNsclBvc2l0aW9uIixyYW5nZU9wdGlvbnM6InJhbmdlT3B0aW9ucyIsbWluOiJtaW4iLG1heDoibWF4In0sZmVhdHVyZXM6W2ZvKFtTaCxVeCxEZCx6eSxmMSxjZyx4aCxxTCxXeSxZeSxrZF0pLGJkKFthZ10pLENvXSxuZ0NvbnRlbnRTZWxlY3Rv'@;
put 'cnM6SE5lLGRlY2xzOjE0LHZhcnM6MTUsY29uc3RzOltbImFjdGlvbkJ1dHRvbiIsIiJdLFs0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsiY2xyUG9wb3ZlckFuY2hvciIsIiIsMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LWdy'@;
put 'b3VwIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsImNsYXNzIiwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCIsNCwibmdJZiJdLFsiY2RrVHJhcEZvY3VzIiwiIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92'@;
put 'ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFy'@;
put 'aWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsxLCJkYXRlLXJhbmdlLXNlcGFyYXRvciJdLFsidHlwZSIs'@;
put 'ImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiZGlzYWJsZWQiXSxbInN0YXR1cyIsImluZm8iLCJzaGFwZSIsImNhbGVuZGFyIl0sWyJjZGtUcmFwRm9jdXMiLCIiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24t'@;
put 'Y2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0'@;
put 'ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKEZOZSksWXIoMCksbXQoMSxOTmUsMSwwLCJsYWJlbCIsMSksZGUoMiwiZGl2IiwyKSgzLCJkaXYiLDMpKDQsImRpdiIsNCksbXQoNSxWTmUsNSwwLCJuZy1jb250YWluZXIiLDEpLFlyKDYsMSksbXQoNyxCTmUsMywxLCJidXR0b24iLDUpKDgsak5l'@;
put 'LDEsMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiw2KSxoZSgpLG10KDksek5lLDEsMCwiY2RzLWljb24iLDcpKDEwLFVOZSwxLDAsImNkcy1pY29uIiw4KSxoZSgpLG10KDExLFpOZSwxLDAsIm5nLWNvbnRlbnQiLDEpKDEyLFdOZSwxLDAsIm5nLWNvbnRlbnQiLDEpKDEzLFlOZSwx'@;
put 'LDAsIm5nLWNvbnRlbnQiLDEpLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSx4ZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMiksVHIoImNsci1mb2N1cyIsZC5mb2N1cyksZmUoKSx4ZSgibmdJZiIsZC5pc1JhbmdlUGlja2Vy'@;
put 'KSxmZSgyKSx4ZSgibmdJZiIsZC5pc0VuYWJsZWQpLGZlKCkseGUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnBvcG92ZXJQb3NpdGlvbikoImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsITApKCJjbHJQb3BvdmVyQ29u'@;
put 'dGVudFNjcm9sbFRvQ2xvc2UiLCEwKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dWYWxp'@;
put 'ZCkpfSxkZXBlbmRlbmNpZXM6W3d1LHlvLFV5LE94LEh4LEZ4LHVzLGRzLGdkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksb0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmRhdGVJT1NlcnZpY2U9YX12YWxpZGF0ZShhKXtpZih0aGlzLmRhdGVJT1NlcnZpY2Upe2NvbnN0'@;
put 'IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEudmFsdWUpLGg9dGhpcy5kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWluRGF0ZS50b0RhdGUoKSxmPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1heERhdGUudG9EYXRlKCk7aWYo'@;
put 'ZCYmZDxoKXJldHVybnttaW46e21pbjpoLnRvTG9jYWxlRGF0ZVN0cmluZygpLGFjdHVhbDpkLnRvTG9jYWxlRGF0ZVN0cmluZygpfX07aWYoZCYmZD5mKXJldHVybnttYXg6e21heDpmLnRvTG9jYWxlRGF0ZVN0cmluZygpLGFjdHVhbDpkLnRvTG9jYWxlRGF0ZVN0cmluZygpfX19cmV0dXJu'@;
put 'IG51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGNnLDgpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRGF0ZSIsIiJdLFsiIiwiY2xyU3RhcnREYXRlIiwiIl0sWyIiLCJjbHJFbmREYXRlIiwiIl1dLGZl'@;
put 'YXR1cmVzOltmbyhbe3Byb3ZpZGU6ZDAsdXNlRXhpc3Rpbmc6YyxtdWx0aTohMH1dKV19KSxjfSkoKSxzWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKGJoLHloLHh5LEFPZSxrT2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbywkTCxWeCxJMixOeCxUcyxpdSxyZGVdfSksY30pKCk7bmV3IFN0KCJDbHJGaWxlTWVzc2FnZXNUZW1wbGF0ZUNvbnRleHQiKTtsZXQgY1plPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'KXtFcy5hZGRJY29ucyhET2UpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxUcyxpdSxpdV19KSxjfSkoKSxtZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRz'@;
put 'IHk3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIodixkLGEsaCksdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9dix0aGlzLmZvY3VzPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKE09PnRoaXMuZm9jdXM9TSkpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEZCksR2UoQ3AsOCksR2UoZjEpLEdlKHp5KSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihh'@;
put 'LGQsaCl7aWYoMSZhJiZsYShoLHZkZSw1KSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLmlucHV0PWYuZmlyc3QpfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQi'@;
put 'LG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkiLGQuaW5wdXQucmVhZG9ubHkpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltmbyhbenksa2QsZjEsU2gsRGRdKSxDb10sbmdDb250ZW50U2VsZWN0b3Jz'@;
put 'OlhOZSxkZWNsczoxNyx2YXJzOjExLGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1udW1iZXItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbMSwiY2xyLWlucHV0LWdyb3VwLWFjdGlvbnMiXSxb'@;
put 'InR5cGUiLCJidXR0b24iLDEsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJtaW51cyIsInNpemUiLCJzbSJdLFsxLCJjbHItbnVtYmVyLWlucHV0LXNlcGFyYXRvciJdLFsic2hhcGUiLCJwbHVzIiwic2l6ZSIsInNtIl0sWyJj'@;
put 'bGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIs'@;
put 'InN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMi'@;
put 'LCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKHFOZSksWXIoMCksbXQoMSxKTmUsMSwwLCJsYWJlbCIsMCksZGUoMiwiZGl2IiwxKSgzLCJkaXYiLDIpKDQsImRpdiIsMyksWXIoNSwx'@;
put 'KSxkZSg2LCJkaXYiLDQpKDcsImJ1dHRvbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmlucHV0LnN0ZXBEb3duKCl9KSxHdCg4LCJjZHMtaWNvbiIsNiksaGUoKSxHdCg5LCJkaXYiLDcpLGRlKDEwLCJidXR0b24iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'ZC5pbnB1dC5zdGVwVXAoKX0pLEd0KDExLCJjZHMtaWNvbiIsOCksaGUoKSgpKCksbXQoMTIsUU5lLDEsMCwiY2RzLWljb24iLDkpKDEzLGVWZSwxLDAsImNkcy1pY29uIiwxMCksaGUoKSxtdCgxNCx0VmUsMSwwLCJuZy1jb250ZW50IiwwKSgxNSxuVmUsMSwwLCJuZy1jb250ZW50IiwwKSgx'@;
put 'NixyVmUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmEmJihmZSgpLHhlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCkseGUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLFRyKCJjbHItZm9jdXMiLGQuZm9jdXMpLGZlKDMpLHhlKCJkaXNhYmxlZCIsbnVs'@;
put 'bD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSxmZSgzKSx4ZSgiZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCksZmUoMikseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLHhl'@;
put 'KCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UseW8sdXMsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHZkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgXzd7Y29u'@;
put 'c3RydWN0b3IoYSxkLGgsZix2LE0pe2lmKHN1cGVyKGQsbWRlLGgsZix2LE0pLHRoaXMuZm9jdXNTZXJ2aWNlPWEsdGhpcy5jb250cm9sPWYsdGhpcy5lbD1NLHRoaXMuaW5kZXg9MSwhYSl0aHJvdyBuZXcgRXJyb3IoImNsck51bWJlcklucHV0IHJlcXVpcmVzIGJlaW5nIHdyYXBwZWQgaW4g'@;
put 'PGNsci1udW1iZXItaW5wdXQtY29udGFpbmVyPiIpfWdldCByZWFkb25seSgpe3JldHVybiBudWxsIT09dGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgicmVhZG9ubHkiKX10cmlnZ2VyRm9jdXMoKXshdGhpcy5yZWFkb25seSYmdGhpcy5mb2N1c1NlcnZpY2UmJih0aGlzLmZv'@;
put 'Y3VzU2VydmljZS5mb2N1c2VkPSEwKX10cmlnZ2VyVmFsaWRhdGlvbigpe3RoaXMucmVhZG9ubHl8fChzdXBlci50cmlnZ2VyVmFsaWRhdGlvbigpLHRoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD0hMSkpfXN0ZXBVcCgpe3RoaXMuZWwubmF0aXZlRWxlbWVu'@;
put 'dC5zdGVwVXAoKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImlucHV0Iix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSkpLHRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKX1zdGVwRG93bigpe3RoaXMuZWwubmF0aXZlRWxlbWVu'@;
put 'dC5zdGVwRG93bigpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgiaW5wdXQiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KSksdGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FsbEFzVG91Y2hlZCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'YSl7cmV0dXJuIG5ldyhhfHxjKShHZSh6eSw4KSxHZShEYSksR2UoRHMpLEdlKGQxLDEwKSxHZShFYSksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwiY2xyTnVtYmVySW5wdXQiLCIiXV0saG9zdFZhcnM6NCxob3N0'@;
put 'QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyRm9jdXMoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBkLnRyaWdnZXJWYWxpZGF0aW9uKCl9KSwyJmEmJlRyKCJjbHItaW5wdXQiLCEwKSgiY2xyLW51bWJlci1pbnB1'@;
put 'dCIsITApfSxmZWF0dXJlczpbQ29dfSksY30pKCksdVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhiaCx5aCxJT2UsUk9lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxj'@;
put 'Llx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sSWMsVHMsaXUsaXVdfSksY30pKCk7bmV3IFN0KHZvaWQgMCk7bGV0IGZaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RXMuYWRkSWNvbnMoTE9lLE9PZSxiaCx5aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLEljLFRzLGl1LGl1XX0pLGN9KSgpLGFHPSgoKT0+e2NsYXNzIGN7bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8td3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZsYShoLGRzLDcpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYm'@;
put 'KGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1yYWRpby13cmFwcGVyIiwhMCl9LGZlYXR1cmVzOltmbyhbU2hdKV0sbmdDb250ZW50U2VsZWN0b3JzOm9WZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lm'@;
put 'Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oaVZlKSxZcigwKSxZcigxLDEpLG10KDIsYVZlLDEsMCwibGFiZWwiLDApKSwyJmEmJihmZSgyKSx4ZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOlt5byxkc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksc0c9KCgp'@;
put 'PT57Y2xhc3MgYyBleHRlbmRzIF83e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxhRyxkLGgsZix2KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRGEpLEdlKERzKSxHZShkMSwxMCksR2UoRWEpLEdlKEppKSl9LGMuXHUwMjc1ZGly'@;
put 'PUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJhZGlvIiwiIl1dLGZlYXR1cmVzOltDb119KSxjfSkoKSxwWmU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHk3e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENs'@;
put 'YXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITEsdGhpcy5fZ2VuZXJhdGVkSWQ9U3UoKX1nZXQgY2xySW5saW5lKCl7cmV0dXJuIHRoaXMuaW5saW5lfXNldCBjbHJJbmxpbmUoYSl7dGhpcy5pbmxp'@;
put 'bmU9InN0cmluZyI9PXR5cGVvZiBhPyJmYWxzZSIhPT1hOiEhYX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpLHRoaXMuc2V0QXJpYUxhYmVsbGVkQnkoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3RoPyJyYWRpb2dyb3VwIjpudWxs'@;
put 'fXNldEFyaWFMYWJlbGxlZEJ5KCl7Y29uc3QgYT10aGlzLmdyb3VwTGFiZWw/Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpZCIpO2E/dGhpcy5hcmlhTGFiZWxsZWRCeT10aGlzLnJhZGlvcy5sZW5ndGg/YTpudWxsOih0aGlzLmdyb3VwTGFiZWw/Lm5hdGl2ZUVsZW1lbnQuc2V0QXR0'@;
put 'cmlidXRlKCJpZCIsdGhpcy5fZ2VuZXJhdGVkSWQpLHRoaXMuYXJpYUxhYmVsbGVkQnk9dGhpcy5yYWRpb3MubGVuZ3RoP3RoaXMuX2dlbmVyYXRlZElkOm51bGwpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDcCw4KSxHZShEZCksR2UoZjEp'@;
put 'LEdlKGtkKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1yYWRpby1jb250YWluZXIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGxhKGgsZHMsNyxKaSksbGEoaCxzRyw1KSksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5ncm91'@;
put 'cExhYmVsPWYuZmlyc3QpLHhpKGY9RWkoKSkmJihkLnJhZGlvcz1mKX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoZnIoInJvbGUiLGQucm9sZSkoImFyaWEtbGFiZWxsZWRieSIsZC5hcmlhTGFiZWxsZWRCeSksVHIoImNsci1mb3JtLWNvbnRyb2wiLCEw'@;
put 'KSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSJ9LGZlYXR1cmVzOltmbyhbZjEsa2QsRGQsaDddKSxDb10sbmdDb250'@;
put 'ZW50U2VsZWN0b3JzOmxWZSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItc3VidGV4dC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNz'@;
put 'IiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3Vj'@;
put 'Y2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1'@;
put 'Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oc1ZlKSxZcigwKSxtdCgxLGNWZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpLFlyKDMsMSksbXQoNCx1VmUsMiwwLCJkaXYiLDIpKDUs'@;
put 'Z1ZlLDUsNCwiZGl2IiwyKSxoZSgpKSwyJmEmJihmZSgpLHhlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCksVHIoImNsci1jb250cm9sLWlubGluZSIsZC5jbHJJbmxpbmUpLHhlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSx4ZSgibmdJZiIsZC5zaG93SGVs'@;
put 'cGVyKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dWYWxpZHx8ZC5zaG93SW52YWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LHlvLGRzLHVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxnWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKGJoLHloKX19cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8saXUsVngsVHMsaXVdfSksY30pKCksbVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhiaCx5aCl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLGl1LFZ4LFRzLGl1XX0pLGN9KSgpLEd5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5N3tjb25zdHJ1Y3RvcihhLGQs'@;
put 'aCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1mLHRoaXMubXVsdGk9ITF9bmdPbkluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMu'@;
put 'cHVzaCh0aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKGE9PnthJiYodGhpcy5tdWx0aT1hLnZhbHVlQWNjZXNzb3IgaW5zdGFuY2VvZiBneCx0aGlzLmNvbnRyb2w9YSl9KSl9d3JhcHBlckNsYXNzKCl7cmV0dXJuIHRoaXMubXVsdGk/ImNsci1tdWx0aXNl'@;
put 'bGVjdC13cmFwcGVyIjoiY2xyLXNlbGVjdC13cmFwcGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQ3AsOCksR2UoRGQpLEdlKGYxKSxHZShrZCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2VsZWN0LWNv'@;
put 'bnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZsYShoLGd4LDUpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQubXVsdGlwbGU9Zi5maXJzdCl9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImNsci1mb3JtLWNv'@;
put 'bnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbZm8oW2tkLGYxLFNoLERkXSksQ29dLG5nQ29udGVudFNlbGVjdG9yczp2VmUsZGVjbHM6'@;
put 'MTAsdmFyczo4LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEt'@;
put 'aGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMi'@;
put 'LCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7'@;
put 'MSZhJiYobG8obVZlKSxZcigwKSxtdCgxLGJWZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksWXIoNCwxKSxtdCg1LHlWZSwxLDAsImNkcy1pY29uIiwzKSg2LF9WZSwxLDAsImNkcy1pY29uIiw0KSxoZSgpLG10KDcsd1ZlLDEsMCwibmctY29udGVudCIsMCkoOCxD'@;
put 'VmUsMSwwLCJuZy1jb250ZW50IiwwKSg5LFNWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSx4ZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoKSx4ZSgibmdDbGFzcyIsZC53cmFwcGVyQ2xh'@;
put 'c3MoKSksZmUoMikseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2ll'@;
put 'czpbd3UseW8sdXMsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLCR5PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBfN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEsR3ksZCxoLGYsdiksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKShHZShEYSksR2UoRHMpLEdlKGQxLDEwKSxHZShFYSksR2UoSmkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2VsZWN0IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLXNlbGVjdCIsITAp'@;
put 'fSxmZWF0dXJlczpbQ29dfSksY30pKCksdlplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhiaCx5aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIo'@;
put 'e2ltcG9ydHM6W0xvLEljLFRzLGl1LGl1XX0pLGN9KSgpLGJkZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgeTd7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVdzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWNtcD1Wcih7dHlw'@;
put 'ZTpjLHNlbGVjdG9yczpbWyJjbHItdGV4dGFyZWEtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNv'@;
put 'bnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltmbyhba2QsZjEsU2gsRGRdKSxDb10sbmdDb250ZW50U2VsZWN0b3JzOnhWZSxkZWNsczoxMCx2YXJzOjcsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xh'@;
put 'c3MiXSxbMSwiY2xyLXRleHRhcmVhLXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNv'@;
put 'biIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29u'@;
put 'Il0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oTVZlKSxZcigwKSxtdCgxLEVWZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJk'@;
put 'aXYiLDEpKDMsImRpdiIsMiksWXIoNCwxKSxtdCg1LFRWZSwxLDAsImNkcy1pY29uIiwzKSg2LEFWZSwxLDAsImNkcy1pY29uIiw0KSxoZSgpLG10KDcsa1ZlLDEsMCwibmctY29udGVudCIsMCkoOCxEVmUsMSwwLCJuZy1jb250ZW50IiwwKSg5LElWZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhl'@;
put 'KCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSx4ZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksZmUoMykseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dI'@;
put 'ZWxwZXIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UseW8sdXMsZHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEpMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBfN3tjb25zdHJ1Y3RvcihhLGQsaCxm'@;
put 'LHYpe3N1cGVyKGEsYmRlLGQsaCxmLHYpLHRoaXMuaW5kZXg9MX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRGEpLEdlKERzKSxHZShkMSwxMCksR2UoRWEpLEdlKEppKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIs'@;
put 'ImNsclRleHRhcmVhIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigiY2xyLXRleHRhcmVhIiwhMCl9LGZlYXR1cmVzOltDb119KSxjfSkoKSxiWmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKGJoLHloKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sSWMsVHMsaXUsaXVdfSksY30pKCkseWRlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLGl1LHdVZSxFVWUsc1plLGNaZSxKMWUsZlplLGdaZSx2WmUsYlplLG1aZSxUVWUsdVplXX0pLGN9KSgpLF9kZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMb119KSxjfSkoKSx5WmU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHhZe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixuZSl7c3VwZXIo'@;
put 'YSxkLGgsZix2LE0sRCxaLG5lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKE1ZLDgpLEdlKHZzLDgpLEdlKFlvKSxHZShEYSksR2UoU1ksOCksR2UoZm0pLEdlKE9MKSxHZSh4cykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyIiLCJjZGtEcmFnIiwiIl1dLGZlYXR1cmVzOltDb119KSxjfSkoKSxfWmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7fSksY30p'@;
put 'KCksd1plPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0pLGN9KSgpO2NsYXNzIFFMe31sZXQgWXg9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAsdGhpcy5fY2hhbmdlPW5ldyBXbn1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRo'@;
put 'aXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFNtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURl'@;
put 'Ym91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRoaXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLnByZXZlbnRFbWl0PSExLHRoaXMuX3NpemVDaGFuZ2U9bmV3IFdufWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29u'@;
put 'c3QgZD10aGlzLl9zaXplO2EhPT1kJiYodGhpcy5wcmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6TWF0aC5mbG9vcihkL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8'@;
put 'KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8'@;
put 'MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3RhbEl0ZW1zPWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2Vp'@;
put 'bCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKToxfXNldCBsYXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBj'@;
put 'dXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9u'@;
put 'ZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVy'@;
put 'biB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlzLmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGE9TWF0aC5taW4oYSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMu'@;
put 'Y3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVudCsrfXJlc2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihZeCkpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2Vu'@;
put 'OmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHVnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0ZURlYm91bmNlcj1kLHRoaXMuX2NoYW5nZT1uZXcgV24sdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdl'@;
put 'LmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRlcnMoKXtmb3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5fYWxsKWlmKGEmJmEuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxs'@;
put 'KWQmJmQuaXNBY3RpdmUoKSYmYS5wdXNoKGQpO3JldHVybiBhfWFkZChhKXtjb25zdCBkPWEuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pKTtsZXQgaD0hMTtjb25zdCBmPW5ldyBlTyhhLCgpPT57aWYoaClyZXR1cm47ZC51bnN1'@;
put 'YnNjcmliZSgpO2NvbnN0IHY9dGhpcy5fYWxsLmZpbmRJbmRleChNPT5NLmZpbHRlcj09PWEpO3Y+PTAmJnRoaXMuX2FsbC5zcGxpY2UodiwxKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksaD0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChm'@;
put 'KSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pLGZ9YWNjZXB0cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWlmKGQmJmQuaXNBY3RpdmUoKSYmIWQuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRF'@;
put 'bWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykoeHIoU20pLHhyKFl4KSl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgZU97Y29uc3RydWN0b3IobCxhKXt0aGlzLmZpbHRlcj1sLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQgdE89KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQgZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJveSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVyKCksYSBpbnN0YW5jZW9m'@;
put 'IGVPP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlzLnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYodGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodWcpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpO2NvbnN0IHdkZT1bImFbaHJlZl0iLCJhcmVhW2hyZWZdIiwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pIiwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKSIsInNlbGVjdDpu'@;
put 'b3QoW2Rpc2FibGVkXSkiLCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSkiLCJpZnJhbWUiLCJvYmplY3QiLCJlbWJlZCIsIltjb250ZW50ZWRpdGFibGU9dHJ1ZV0iLCJbcm9sZT1idXR0b25dOm5vdChbZGlzYWJsZWRdKSJdO2Z1bmN0aW9uIFNaZShjKXtjb25zdCBsPXdkZS5qb2luKCIsIik7'@;
put 'cmV0dXJuIGMubWF0Y2hlcyhsKX1sZXQgbk89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnpvbmU9YSx0aGlzLnNraXBJdGVtRm9jdXM9ITEsdGhpcy5saXN0ZW5lcnNBZGRlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyBXbix0aGlzLl9hY3RpdmVDZWxsPW51bGwsdGhpcy5jb25m'@;
put 'aWc9e2tleUdyaWRSb3dzOidbcm9sZT1yb3ddOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXIpOm5vdChbc3R5bGUqPSJkaXNwbGF5OiBub25lIl0pJyxrZXlHcmlkQ2VsbHM6Iltyb2xlPWdyaWRjZWxsXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vo'@;
put 'b2xkZXItY29udGVudCksIFtyb2xlPWNvbHVtbmhlYWRlcl06bm90KC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uKTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQpLCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0IixrZXlHcmlkOiJbcm9sZT1ncmlkXSJ9fWdldCBncmlkKCl7cmV0dXJu'@;
put 'IHRoaXMuaG9zdD8ucXVlcnlTZWxlY3Rvcih0aGlzLmNvbmZpZy5rZXlHcmlkKX1nZXQgcm93cygpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZFJvd3MpfWdldCBjZWxscygpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3JBbGwo'@;
put 'dGhpcy5jb25maWcua2V5R3JpZENlbGxzKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1hZGRMaXN0ZW5lcnMoKXt0aGlzLmxpc3RlbmVyc0FkZGVkfHwodGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57eGQodGhpcy5n'@;
put 'cmlkLCJtb3VzZWRvd24iKS5waXBlKE4wKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYT0+e2lmKDE9PT1hLmJ1dHRvbnMmJiFhLmN0cmxLZXkpe2NvbnN0IGQ9dGhpcy5jZWxscz9BcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZpbmQoaD0+aD09PWEudGFyZ2V0fHxoPT09YS50YXJnZXQuY2xv'@;
put 'c2VzdCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKTpudWxsO2QmJnRoaXMuc2V0QWN0aXZlQ2VsbChkLHtrZWVwRm9jdXM6U1plKGEudGFyZ2V0KX0pfX0pLHhkKHRoaXMuZ3JpZCwid2hlZWwiKS5waXBlKE4wKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnJlbW92ZUFj'@;
put 'dGl2ZUNlbGwoKX0pLHhkKHRoaXMuZ3JpZCwiZm9jdXNvdXQiKS5waXBlKGhtKDApLE4wKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdyaWQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fHRoaXMucmVtb3ZlQWN0aXZlQ2VsbCgpfSkseGQodGhpcy5ncmlk'@;
put 'LCJrZXlkb3duIikucGlwZShOMCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGE9PntpZigoIWEudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZHJhZy1oYW5kbGUiKXx8YS5rZXkhPT1RaS5BcnJvd0xlZnQmJmEua2V5IT09UWkuQXJyb3dSaWdodCkmJihhLmtleT09PVFpLkFycm93VXB8'@;
put 'fGEua2V5PT09UWkuQXJyb3dEb3dufHxhLmtleT09PVFpLkFycm93TGVmdHx8YS5rZXk9PT1RaS5BcnJvd1JpZ2h0fHxhLmtleT09PVFpLkVuZHx8YS5rZXk9PT1RaS5Ib21lfHxhLmtleT09PVFpLlBhZ2VVcHx8YS5rZXk9PT1RaS5QYWdlRG93bikpe2NvbnN0IGQ9dGhpcy5nZXRDdXJyZW50'@;
put 'Q2VsbENvb3JkaW5hdGVzKCksaD10aGlzLmlzRXhwYW5kZWRSb3coZC55KXx8dGhpcy5pc0RldGFpbHNSb3coZC55KT90aGlzLmdldE5leHRGb3JFeHBhbmRlZFJvd0Nvb3JkaW5hdGUoYSxkKTp0aGlzLmdldE5leHRJdGVtQ29vcmRpbmF0ZShhLGQpLGY9dGhpcy5yb3dzP0FycmF5LmZyb20o'@;
put 'dGhpcy5nZXRDZWxsc0ZvclJvdyhoLnkpKVtoLnhdOm51bGw7ZiYmdGhpcy5zZXRBY3RpdmVDZWxsKGYpLGEucHJldmVudERlZmF1bHQoKX19KX0pLHRoaXMubGlzdGVuZXJzQWRkZWQ9ITApfWluaXRpYWxpemVLZXlHcmlkKGEpe3RoaXMuaG9zdD1hLHRoaXMuYWRkTGlzdGVuZXJzKCksdGhp'@;
put 'cy5yZXNldEtleUdyaWQoKX1yZXNldEtleUdyaWQoKXt0aGlzLmNlbGxzPy5mb3JFYWNoKGQ9PmQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIikpLCh0aGlzLmNlbGxzP3RoaXMuY2VsbHNbMF06bnVsbCk/LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIil9cmVtb3ZlQWN0aXZlQ2Vs'@;
put 'bCgpe3RoaXMuX2FjdGl2ZUNlbGw9bnVsbH1nZXRBY3RpdmVDZWxsKCl7cmV0dXJuIHRoaXMuX2FjdGl2ZUNlbGx9c2V0QWN0aXZlQ2VsbChhLHtrZWVwRm9jdXM6ZH09e2tlZXBGb2N1czohMX0pe2NvbnN0IGg9dGhpcy5jZWxscz9BcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZpbmQoZj0+IjAi'@;
put 'PT09Zi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7aWYoaCYmaC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSxhLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIiksdGhpcy5fYWN0aXZlQ2VsbD1hLCF0aGlzLnNraXBJdGVtRm9jdXMmJiFkKXtsZXQgZjtpZigiY29sdW1u'@;
put 'aGVhZGVyIj09PWEuZ2V0QXR0cmlidXRlKCJyb2xlIikpZj1hO2Vsc2V7Y29uc3Qgdj1mdW5jdGlvbiBDWmUoYyl7Y29uc3QgYT1bLi4ud2RlLCdbdGFiaW5kZXg9IjAiXTpub3QoW2Rpc2FibGVkXSknXS5qb2luKCIsIik7cmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGEp'@;
put 'KX0oYSk7Zj12Lmxlbmd0aD92WzBdOmF9Zi5mb2N1cygpfX1nZXROZXh0Rm9yRXhwYW5kZWRSb3dDb29yZGluYXRlKGEsZCl7aWYoYS5rZXk9PT1RaS5QYWdlVXB8fGEua2V5PT09UWkuUGFnZURvd24pcmV0dXJuIHRoaXMuZ2V0TmV4dEl0ZW1Db29yZGluYXRlKGEsZCk7aWYoISh0aGlzLmlz'@;
put 'RGV0YWlsc1JvdyhkLnkpfHx0aGlzLmlzUm93UmVwbGFjZWQoZC55KXx8YS5rZXkhPT1RaS5Ib21lJiZhLmtleSE9PVFpLkVuZCYmYS5rZXkhPT1RaS5BcnJvd1JpZ2h0JiZhLmtleSE9PVFpLkFycm93TGVmdCkpcmV0dXJuIHRoaXMuZ2V0TmV4dEl0ZW1Db29yZGluYXRlKGEsZCk7Y29uc3R7'@;
put 'bnVtT2ZSb3dzOmgsbnVtT2ZDb2x1bW5zOmYsaW5saW5lU3RhcnQ6dixpbmxpbmVFbmQ6TSxpc0FjdGlvbkNlbGw6RCxuZXh0Q2VsbENvb3JkczpafT10aGlzLmdldENhbGNWYXJpYWJsZXMoZCksbmU9dGhpcy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhkLnkpO2lmKGEua2V5PT09UWkuQXJy'@;
put 'b3dVcCYmMCE9PWQueSl7aWYoWi55PWQueS0xLG5lJiYhRClyZXR1cm4gdGhpcy5pc1Jvd1JlcGxhY2VkKGQueSkmJihaLnk9Wi55LTEpLFoueD10aGlzLmlzRGV0YWlsc1JvdyhaLnkpPzA6ITE9PT10aGlzLmlzRGV0YWlsc1JvdyhkLnkpP2QueDp0aGlzLmFjdGlvbkNlbGxDb3VudChaLnkp'@;
put 'LFo7RCYmdGhpcy5pc0RldGFpbHNSb3coWi55KT9aLnk9Wi55LTE6dGhpcy5pc1Jvd1JlcGxhY2VkKFoueSk/KFoueT1aLnktMSx0aGlzLmlzRGV0YWlsc1JvdyhaLnkpfHwoWi54PWQueCt0aGlzLmFjdGlvbkNlbGxDb3VudChaLnkpKSk6dGhpcy5pc0RldGFpbHNSb3coZC55KSYmIXRoaXMu'@;
put 'aXNEZXRhaWxzUm93KFoueSk/Wi54PWQueCt0aGlzLmFjdGlvbkNlbGxDb3VudChaLnkpOiFEJiZ0aGlzLmlzRGV0YWlsc1JvdyhaLnkpJiYoWi54PWQueC10aGlzLmFjdGlvbkNlbGxDb3VudChkLnkpKX1lbHNlIGlmKGEua2V5PT09UWkuQXJyb3dEb3duJiZkLnk8aCl7aWYoWi55PWQueSsx'@;
put 'LG5lJiYhRClyZXR1cm4gdGhpcy5pc1Jvd1JlcGxhY2VkKFoueSkmJihaLnk9Wi55KzEpLFoueD10aGlzLmlzRGV0YWlsc1JvdyhaLnkpPzA6dGhpcy5hY3Rpb25DZWxsQ291bnQoWi55KSxaO0R8fHRoaXMuaXNSb3dSZXBsYWNlZChaLnkpP1oueT1aLnkrMTpaLng9dGhpcy5nZXRDZWxsc0Zv'@;
put 'clJvdyhkLnkpLmxlbmd0aD5mP2QueC10aGlzLmFjdGlvbkNlbGxDb3VudChkLnkpOmQueCt0aGlzLmFjdGlvbkNlbGxDb3VudChaLnkpfWVsc2UgYS5rZXk9PT12PzAhPT1kLng/Wi54PWQueC0xOkR8fChaLnk9ZC55LTEsWi54PXRoaXMuYWN0aW9uQ2VsbENvdW50KFoueSktMSk6YS5rZXk9'@;
put 'PT1NJiZkLng8Zj9EJiZkLng9PT10aGlzLmFjdGlvbkNlbGxDb3VudChkLngpLTEmJnRoaXMuaXNSb3dSZXBsYWNlZChkLnkpJiYhdGhpcy5pc0RldGFpbHNSb3coZC55KT8oWi55PWQueSsxLFoueD0wKTpaLng9ZC54KzE6YS5rZXk9PT1RaS5FbmQ/KFoueD10aGlzLmdldENlbGxzRm9yUm93'@;
put 'KGQueSkubGVuZ3RoLTEsYS5jdHJsS2V5JiYoWi54PWYsWi55PWgpKTphLmtleT09PVFpLkhvbWUmJihaLng9MCxaLnk9ZC55LTEsYS5jdHJsS2V5JiYoWi55PTApKTtyZXR1cm4gWn1nZXROZXh0SXRlbUNvb3JkaW5hdGUoYSxkKXtjb25zdHtudW1PZlJvd3M6aCxudW1PZkNvbHVtbnM6Zixp'@;
put 'bmxpbmVTdGFydDp2LGlubGluZUVuZDpNLGl0ZW1zUGVyUGFnZTpELGlzQWN0aW9uQ2VsbDpaLG5leHRDZWxsQ29vcmRzOm5lfT10aGlzLmdldENhbGNWYXJpYWJsZXMoZCk7aWYoYS5rZXk9PT1RaS5BcnJvd1VwJiYwIT09ZC55KXtpZihuZS55PWQueS0xLHRoaXMuaXNTaW5nbGVDZWxsRXhw'@;
put 'YW5kZWRSb3cobmUueSkmJiFaJiZ0aGlzLmlzRGV0YWlsc1JvdyhuZS55KSlyZXR1cm4gbmUueD0wLG5lO3RoaXMuaXNEZXRhaWxzUm93KG5lLnkpJiYoWj9uZS55PW5lLnktMTpuZS54PW5lLngtdGhpcy5hY3Rpb25DZWxsQ291bnQoZC55KSl9ZWxzZSBpZihhLmtleT09PVFpLkFycm93RG93'@;
put 'biYmZC55PGgpe2lmKG5lLnk9ZC55KzEsdGhpcy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhuZS55KSYmIVomJnRoaXMuaXNSb3dSZXBsYWNlZChuZS55KSlyZXR1cm4gbmUueD0wLG5lLnk9bmUueSsxLG5lOyFaJiZ0aGlzLmlzUm93UmVwbGFjZWQobmUueSkmJihuZS55PW5lLnkrMSxuZS54'@;
put 'PW5lLngtdGhpcy5hY3Rpb25DZWxsQ291bnQoZC55KSl9ZWxzZSBhLmtleT09PXYmJjAhPT1kLng/bmUueD1kLngtMTphLmtleT09PU0mJmQueDxmP25lLng9ZC54KzE6YS5rZXk9PT1RaS5FbmQ/KG5lLng9ZixhLmN0cmxLZXkmJihuZS55PWgpKTphLmtleT09PVFpLkhvbWU/KG5lLng9MCxh'@;
put 'LmN0cmxLZXkmJihuZS55PTApKTphLmtleT09PVFpLlBhZ2VVcD9uZS55PWQueS1EPjA/ZC55LUQrMToxOmEua2V5PT09UWkuUGFnZURvd24mJihuZS55PWQueStEPGg/ZC55K0Q6aCk7cmV0dXJuIG5lfWdldENhbGNWYXJpYWJsZXMoYSl7Y29uc3QgZD10aGlzLnJvd3M/dGhpcy5yb3dzLmxl'@;
put 'bmd0aC0xOjAsaD1kP3RoaXMuZ2V0Q2VsbHNGb3JSb3coMCkubGVuZ3RoLTE6MCxmPXRoaXMuaG9zdC5kaXI7cmV0dXJue251bU9mUm93czpkLG51bU9mQ29sdW1uczpoLGlubGluZVN0YXJ0OiJydGwiPT09Zj9RaS5BcnJvd1JpZ2h0OlFpLkFycm93TGVmdCxpbmxpbmVFbmQ6InJ0bCI9PT1m'@;
put 'P1FpLkFycm93TGVmdDpRaS5BcnJvd1JpZ2h0LGl0ZW1zUGVyUGFnZTpNYXRoLmZsb29yKHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIikuY2xpZW50SGVpZ2h0L3RoaXMucm93c1swXS5jbGllbnRIZWlnaHQpLTF8fDAsaXNBY3Rpb25DZWxsOnRoaXMuaXNBY3Rpb25DZWxs'@;
put 'KGEpLG5leHRDZWxsQ29vcmRzOnt4OmEueCx5OmEueX19fWdldEN1cnJlbnRDZWxsQ29vcmRpbmF0ZXMoKXtjb25zdCBhPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKGY9PiIwIj09PWYuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpKTpudWxsLGQ9YT9hLmNsb3Nlc3Qo'@;
put 'dGhpcy5jb25maWcua2V5R3JpZFJvd3MpOm51bGw7cmV0dXJue3g6ZCYmYT9BcnJheS5mcm9tKGQucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpKS5pbmRleE9mKGEpOjAseTpkJiZhJiZ0aGlzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLnJvd3MpLmluZGV4T2YoZCk6'@;
put 'MH19Z2V0Q2VsbHNGb3JSb3coYSl7cmV0dXJuIHRoaXMucm93c1thXS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscyl9aXNFeHBhbmRlZFJvdyhhKXtjb25zdCBkPXRoaXMucm93c1thXS5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtcm93LWRldGFpbCIpO3JldHVy'@;
put 'biEhZCYmIm5vbmUiIT09ZC5zdHlsZS5kaXNwbGF5fWlzRGV0YWlsc1JvdyhhKXtyZXR1cm4gdGhpcy5yb3dzW2FdLmNsYXNzTGlzdC5jb250YWlucygiZGF0YWdyaWQtcm93LWRldGFpbCIpfWlzUm93UmVwbGFjZWQoYSl7cmV0dXJuISF0aGlzLnJvd3NbYV0uY2xvc2VzdCgiY2xyLWRnLXJv'@;
put 'dy5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQiKX1pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhhKXtyZXR1cm4gMT09PSh0aGlzLnJvd3NbYV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXRhZ3JpZC1yb3ctZGV0YWlsIik/dGhpcy5yb3dzW2FdOnRoaXMucm93c1thXS5xdWVyeVNlbGVjdG9yKCIuZGF0'@;
put 'YWdyaWQtcm93LWRldGFpbCIpKT8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpLmxlbmd0aH1hY3Rpb25DZWxsQ291bnQoYSl7cmV0dXJuIHRoaXMuYWN0aW9uQ2VsbHNBc0FycmF5KGEpLmxlbmd0aH1hY3Rpb25DZWxsc0FzQXJyYXkoYSl7cmV0dXJuIEFycmF5'@;
put 'LmZyb20odGhpcy5yb3dzW2FdLnF1ZXJ5U2VsZWN0b3JBbGwoIi5kYXRhZ3JpZC1yb3ctc3RpY2t5IC5kYXRhZ3JpZC1jZWxsLCAuZGF0YWdyaWQtcm93LXN0aWNreSAuZGF0YWdyaWQtY29sdW1uIikpfWlzQWN0aW9uQ2VsbChhKXtyZXR1cm4hIXRoaXMuYWN0aW9uQ2VsbHNBc0FycmF5KGEu'@;
put 'eSlbYS54XX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIoWW8pKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxHeD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdE97Y29uc3RydWN0b3IoYSxkLGgs'@;
put 'Zix2LE0pe3N1cGVyKGEpLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5lbGVtZW50UmVmPXYsdGhpcy5rZXlOYXZpZ2F0aW9uPU0sdGhpcy5vcGVuQ2hhbmdlPW5ldyBYcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9'@;
put 'ITEsdGhpcy5wb3BvdmVySWQ9U3UoKSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6aDEuVkVSVElDQUwsc2lkZTprMi5BRlRFUixhbmNob3I6T3MuRU5ELGNvbnRlbnQ6T3MuRU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2Ny'@;
put 'aWJlKEQ9Pnt0aGlzLm9wZW49RCx0aGlzLmFyaWFFeHBhbmRlZD1EfSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5vcGVuIT09KGE9ISFhKSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYm'@;
put 'ZWwodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMua2V5TmF2aWdhdGlvbiYmKHRoaXMua2V5TmF2aWdhdGlvbi5za2lwSXRlbUZvY3VzPWEpLHRoaXMuX29wZW49YSl9c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhKX1n'@;
put 'ZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5maWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNldFRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCgpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5m'@;
put 'b3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl7Y29uc3QgaD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik/LnRleHRD'@;
put 'b250ZW50LnRyaW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmh8fCIifSl9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHVnKSxHZShucyksR2Uoc2MpLEdlKG9hKSxHZShKaSksR2Uobk8sOCkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYm'@;
put 'bmEoUlZlLDUsSmkpLDImYSl7bGV0IGg7eGkoaD1FaSgpKSYmKGQuYW5jaG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOltqbi5Ob25lLCJjbHJEZ0ZpbHRlck9wZW4iLCJvcGVuIl0sY3VzdG9tRmlsdGVyOltqbi5Ob25lLCJjbHJEZ0ZpbHRlciIsImN1c3RvbUZpbHRlciJdfSxvdXRwdXRz'@;
put 'OntvcGVuQ2hhbmdlOiJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UifSxmZWF0dXJlczpbZm8oW3twcm92aWRlOlFMLHVzZUV4aXN0aW5nOmN9XSksQ28sd2xdLG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczo0LHZhcnM6MTMsY29uc3RzOltbImFuY2hvciIsIiJdLFsidHlwZSIsImJ1dHRvbiIs'@;
put 'ImNsclBvcG92ZXJBbmNob3IiLCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0sWyJzb2xpZCIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1maWx0ZXIiLCJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwzLCJpZCIsNCwi'@;
put 'Y2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1maWx0'@;
put 'ZXIiLDMsImlkIl0sWzEsImRhdGFncmlkLWZpbHRlci1jbG9zZS13cmFwcGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckNsb3NlQnV0dG9uIiwiIiwxLCJjbG9zZSJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLGRl'@;
put 'KDAsImJ1dHRvbiIsMSwwKSxHdCgyLCJjZHMtaWNvbiIsMiksaGUoKSxtdCgzLExWZSw1LDMsImRpdiIsMykpLDImYSYmKFRyKCJkYXRhZ3JpZC1maWx0ZXItb3BlbiIsZC5vcGVuKSgiZGF0YWdyaWQtZmlsdGVyZWQiLGQuYWN0aXZlKSxmcigiYXJpYS1sYWJlbCIsZC50b2dnbGVCdXR0b25B'@;
put 'cmlhTGFiZWwpKCJhcmlhLWV4cGFuZGVkIixkLmFyaWFFeHBhbmRlZCkoImFyaWEtY29udHJvbHMiLGQucG9wb3ZlcklkKSxmZSgyKSxmcigic3RhdHVzIixkLmFjdGl2ZT8iaW5mbyI6bnVsbCkoInNoYXBlIixkLmFjdGl2ZT8iZmlsdGVyLWdyaWQtY2lyY2xlIjoiZmlsdGVyLWdyaWQiKSxm'@;
put 'ZSgpLHhlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5j'@;
put 'aWVzOltVeSx1cyxPeCxEMWUsSHgsRnhdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIGxHe2NvbnN0cnVjdG9yKGwpe3RoaXMucHJvcD1sLGwuaW5kZXhPZigiLiIpPj0wJiYodGhpcy5zcGxpdFByb3A9bC5zcGxpdCgiLiIpKX1nZXRQcm9wVmFsdWUobCl7aWYodGhpcy5zcGxpdFBy'@;
put 'b3Ape2xldCBhPWw7Zm9yKGNvbnN0IGQgb2YgdGhpcy5zcGxpdFByb3Ape2lmKG51bGw9PT1hfHx0eXBlb2YgYT4idSJ8fHR5cGVvZiBhW2RdPiJ1IilyZXR1cm47YT1hW2RdfXJldHVybiBhfXJldHVybiBsW3RoaXMucHJvcF19fWNsYXNzIHJPe2NvbnN0cnVjdG9yKGwsYT0hMSl7dGhpcy5w'@;
put 'cm9wPWwsdGhpcy5leGFjdD1hLHRoaXMubmVzdGVkUHJvcD1uZXcgbEcobCl9YWNjZXB0cyhsLGEsZCl7Y29uc3QgaD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpO3JldHVybiEodm9pZCAwPT09aHx8bnVsbCE9PWEmJigibnVtYmVyIiE9dHlwZW9mIGh8fGg8YSl8fG51bGwhPT1k'@;
put 'JiYoIm51bWJlciIhPXR5cGVvZiBofHxoPmQpKX19Y2xhc3MgTTd7Y29uc3RydWN0b3IobCl7dGhpcy5maWx0ZXJGbj1sLHRoaXMuX2NoYW5nZXM9bmV3IFduLHRoaXMuX2xvdz1udWxsLHRoaXMuX2hpZ2g9bnVsbH1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2'@;
put 'YWJsZSgpfWdldCB2YWx1ZSgpe3JldHVyblt0aGlzLl9sb3csdGhpcy5faGlnaF19c2V0IHZhbHVlKGwpe2NvbnN0IGE9bFswXSxkPWxbMV07KGEhPT10aGlzLl9sb3d8fGQhPT10aGlzLl9oaWdoKSYmKHRoaXMuX2xvdz1hLHRoaXMuX2hpZ2g9ZCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMu'@;
put 'X2xvdyx0aGlzLl9oaWdoXSkpfWdldCBsb3coKXtyZXR1cm4gdGhpcy5fbG93fXNldCBsb3cobCl7bCE9PXRoaXMuX2xvdyYmKHRoaXMuX2xvdz1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4gdGhpcy5faGlnaH1zZXQgaGln'@;
put 'aChsKXtsIT09dGhpcy5faGlnaCYmKHRoaXMuX2hpZ2g9bCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2Ygck8/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCxsb3c6dGhpcy5f'@;
put 'bG93LGhpZ2g6dGhpcy5faGlnaH06dGhpc31pc0FjdGl2ZSgpe3JldHVybiBudWxsIT09dGhpcy5fbG93fHxudWxsIT09dGhpcy5oaWdofWFjY2VwdHMobCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhsLHRoaXMuX2xvdyx0aGlzLl9oaWdoKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5z'@;
put 'dGFuY2VvZiBNNyYmKGwuZmlsdGVyRm4gaW5zdGFuY2VvZiByTz90aGlzLmZpbHRlckZuIGluc3RhbmNlb2Ygck8mJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC5sb3c9PT10aGlzLl9sb3cmJmwuaGlnaD09PXRoaXMuX2hpZ2g6bD09PXRoaXMpfX1sZXQgQ2RlPSgo'@;
put 'KT0+e2NsYXNzIGMgZXh0ZW5kcyB0T3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEpLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMucG9wb3ZlclRvZ2dsZVNlcnZpY2U9Zix0aGlzLm5nWm9uZT12LHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IFhy'@;
put 'LHRoaXMub3Blbj0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W119Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXX1zZXQgdmFsdWUoYSl7dGhpcy5maWx0ZXImJkFycmF5LmlzQXJyYXkoYSk/YSYmKGFbMF0hPT10aGlzLmZpbHRlci5sb3d8fGFbMV0h'@;
put 'PT10aGlzLmZpbHRlci5oaWdoKSYmKHRoaXMuZmlsdGVyLmxvdz0ibnVtYmVyIj09dHlwZW9mIGFbMF0/YVswXTpudWxsLHRoaXMuZmlsdGVyLmhpZ2g9Im51bWJlciI9PXR5cGVvZiBhWzFdP2FbMV06bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoYSkpOnRoaXMuaW5pdEZpbHRl'@;
put 'clZhbHVlcz1hfXNldCBjdXN0b21OdW1lcmljRmlsdGVyKGEpe3RoaXMuc2V0RmlsdGVyKGEgaW5zdGFuY2VvZiBlTz9hOm5ldyBNNyhhKSksdGhpcy5pbml0RmlsdGVyVmFsdWVzJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZXMsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVl'@;
put 'cyl9Z2V0IG1heFBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXhQbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWF4VmFsdWV9Z2V0IG1pblBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5taW5QbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtl'@;
put 'eXMubWluVmFsdWV9Z2V0IGZyb21MYWJlbFZhbHVlKCl7cmV0dXJuIHRoaXMuZnJvbUxhYmVsfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5mcm9tTGFiZWx9Z2V0IHRvTGFiZWxWYWx1ZSgpe3JldHVybiB0aGlzLnRvTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnRvTGFiZWx9Z2V0'@;
put 'IGxvdygpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdGhpcy5maWx0ZXIubG93JiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5sb3cpP3RoaXMuZmlsdGVyLmxvdzpudWxsfXNldCBsb3coYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5maWx0ZXIubG93Pyh0aGlzLmZpbHRlci5sb3c9YSx0'@;
put 'aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpOiJudW1iZXIiIT10eXBlb2YgYSYmKHRoaXMuZmlsdGVyLmxvdz1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhp'@;
put 'Z2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmhpZ2gmJmlzRmluaXRlKHRoaXMuZmlsdGVyLmhpZ2gpP3RoaXMuZmlsdGVyLmhpZ2g6bnVsbH1zZXQgaGlnaChhKXsibnVtYmVyIj09dHlwZW9mIGEmJmEhPT10aGlzLmZpbHRlci5oaWdoPyh0aGlz'@;
put 'LmZpbHRlci5oaWdoPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5oaWdoPW51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5s'@;
put 'b3csdGhpcy5maWx0ZXIuaGlnaF0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLm9wZW49YSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3Jl'@;
put 'cXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuZG9tQWRhcHRlci5mb2N1cyh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpfSl9KX0pKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfX1y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh1ZyksR2UobW0pLEdlKG5zKSxHZShzYyksR2UoWW8pKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihh'@;
put 'LGQpe2lmKDEmYSYmKG5hKE9WZSw1KSxuYShHeCw1KSksMiZhKXtsZXQgaDt4aShoPUVpKCkpJiYoZC5pbnB1dD1oLmZpcnN0KSx4aShoPUVpKCkpJiYoZC5maWx0ZXJDb250YWluZXI9aC5maXJzdCl9fSxpbnB1dHM6e21pblBsYWNlaG9sZGVyOltqbi5Ob25lLCJjbHJGaWx0ZXJNaW5QbGFj'@;
put 'ZWhvbGRlciIsIm1pblBsYWNlaG9sZGVyIl0sbWF4UGxhY2Vob2xkZXI6W2puLk5vbmUsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwibWF4UGxhY2Vob2xkZXIiXSxmcm9tTGFiZWw6W2puLk5vbmUsImNsckZpbHRlckZyb21MYWJlbCIsImZyb21MYWJlbCJdLHRvTGFiZWw6W2puLk5vbmUs'@;
put 'ImNsckZpbHRlclRvTGFiZWwiLCJ0b0xhYmVsIl0sdmFsdWU6W2puLk5vbmUsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXSxjdXN0b21OdW1lcmljRmlsdGVyOltqbi5Ob25lLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjdXN0b21OdW1lcmljRmlsdGVyIl19LG91dHB1dHM6e2ZpbHRlclZhbHVl'@;
put 'Q2hhbmdlOiJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSJ9LGZlYXR1cmVzOltmbyhbe3Byb3ZpZGU6UUwsdXNlRXhpc3Rpbmc6Y31dKSxDb10sZGVjbHM6MTIsdmFyczoxMCxjb25zdHM6W1siaW5wdXRfbG93IiwiIl0sWyJpbnB1dF9oaWdoIiwiIl0sWzMsImNsckRnRmlsdGVyT3BlbkNoYW5nZSIs'@;
put 'ImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIl0sWzEsImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWZvcm0iXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbImNsck51bWJlcklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJsb3ciLDEs'@;
put 'ImRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl0sWyJjbHJOdW1iZXJJbnB1dCIsIiIsInR5cGUiLCJudW1iZXIiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJuYW1lIiwiaGlnaCIsMSwiZGF0YWdyaWQtbnVtZXJp'@;
put 'Yy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9TG4oKTtkZSgwLCJjbHItZGctZmlsdGVyIiwyKSxnaSgiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIixmdW5jdGlvbih2'@;
put 'KXtyZXR1cm4gd3QoaCksYmkoZC5vcGVuLHYpfHwoZC5vcGVuPXYpLEN0KHYpfSksZGUoMSwiZGl2IiwzKSgyLCJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciIpKDMsImxhYmVsIiw0KSxMZSg0KSxoZSgpLGRlKDUsImlucHV0Iiw1LDApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2'@;
put 'KXtyZXR1cm4gd3QoaCksYmkoZC5sb3csdil8fChkLmxvdz12KSxDdCh2KX0pLGhlKCkoKSxkZSg3LCJjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lciIpKDgsImxhYmVsIiw0KSxMZSg5KSxoZSgpLGRlKDEwLCJpbnB1dCIsNiwxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0'@;
put 'dXJuIHd0KGgpLGJpKGQuaGlnaCx2KXx8KGQuaGlnaD12KSxDdCh2KX0pLGhlKCkoKSgpKCl9MiZhJiYoeGUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpLHBpKCJjbHJEZ0ZpbHRlck9wZW4iLGQub3BlbiksZmUoNCksd3IoZC5mcm9tTGFiZWxWYWx1ZSksZmUoKSxwaSgibmdNb2RlbCIs'@;
put 'ZC5sb3cpLHhlKCJwbGFjZWhvbGRlciIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxmcigiYXJpYS1sYWJlbCIsZC5taW5QbGFjZWhvbGRlclZhbHVlKSxmZSg0KSx3cihkLnRvTGFiZWxWYWx1ZSksZmUoKSxwaSgibmdNb2RlbCIsZC5oaWdoKSx4ZSgicGxhY2Vob2xkZXIiLGQubWF4UGxhY2Vo'@;
put 'b2xkZXJWYWx1ZSksZnIoImFyaWEtbGFiZWwiLGQubWF4UGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W2RzLHZkZSxtZGUsZWMsbUwsbmwsR3MsR3hdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIGlPe2NvbnN0cnVjdG9yKGwsYT0hMSl7dGhpcy5wcm9wPWwsdGhpcy5l'@;
put 'eGFjdD1hLHRoaXMubmVzdGVkUHJvcD1uZXcgbEcobCl9YWNjZXB0cyhsLGEpe2NvbnN0IGQ9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShsKTtyZXR1cm4hKHR5cGVvZiBkPiJ1IikmJih0aGlzLmV4YWN0PygiIitkKS50b0xvd2VyQ2FzZSgpPT09YTooIiIrZCkudG9Mb3dlckNhc2Uo'@;
put 'KS5pbmRleE9mKGEpPj0wKX19Y2xhc3MgeDd7Y29uc3RydWN0b3IobCl7dGhpcy5maWx0ZXJGbj1sLHRoaXMuX2NoYW5nZXM9bmV3IFduLHRoaXMuX2xvd2VyQ2FzZVZhbHVlPSIiLHRoaXMuX3Jhd1ZhbHVlPSIifWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZh'@;
put 'YmxlKCl9Z2V0IGxvd2VyQ2FzZVZhbHVlKCl7cmV0dXJuIHRoaXMuX2xvd2VyQ2FzZVZhbHVlfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgaU8/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCx2YWx1ZTp0aGlzLnZhbHVlfTp0aGlzfWdldCB2YWx1ZSgp'@;
put 'e3JldHVybiB0aGlzLl9yYXdWYWx1ZX1zZXQgdmFsdWUobCl7bHx8KGw9IiIpLGwhPT10aGlzLl9yYXdWYWx1ZSYmKHRoaXMuX3Jhd1ZhbHVlPWwsdGhpcy5fbG93ZXJDYXNlVmFsdWU9bC50b0xvd2VyQ2FzZSgpLnRyaW0oKSx0aGlzLl9jaGFuZ2VzLm5leHQobCkpfWlzQWN0aXZlKCl7cmV0'@;
put 'dXJuISF0aGlzLnZhbHVlfWFjY2VwdHMobCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhsLHRoaXMubG93ZXJDYXNlVmFsdWUpfWVxdWFscyhsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIHg3JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIGlPP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBp'@;
put 'TyYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLnZhbHVlPT09dGhpcy52YWx1ZTpsPT09dGhpcyl9fWxldCBjRz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgdE97Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7c3VwZXIoYSksdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5j'@;
put 'b21tb25TdHJpbmdzPWgsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9Zix0aGlzLmVsZW1lbnRSZWY9dix0aGlzLmNkcj1NLHRoaXMubmdab25lPUQsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgWHIsdGhpcy5vcGVuPSExLHRoaXMubGFiZWxWYWx1ZT0iIix0aGlzLnN1YnM9W119c2V0IGN1'@;
put 'c3RvbVN0cmluZ0ZpbHRlcihhKXt0aGlzLnNldEZpbHRlcihhIGluc3RhbmNlb2YgZU8/YTpuZXcgeDcoYSkpLHRoaXMuaW5pdEZpbHRlclZhbHVlJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZSxkZWxldGUgdGhpcy5pbml0RmlsdGVyVmFsdWUpfWdldCB2YWx1ZSgpe3JldHVy'@;
put 'biB0aGlzLmZpbHRlci52YWx1ZX1zZXQgdmFsdWUoYSl7dGhpcy5maWx0ZXImJiJzdHJpbmciPT10eXBlb2YgYT8oYXx8KGE9IiIpLGEhPT10aGlzLmZpbHRlci52YWx1ZSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KGEpKSk6dGhpcy5pbml0Rmls'@;
put 'dGVyVmFsdWU9YX1nZXQgcGxhY2Vob2xkZXJWYWx1ZSgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5maWx0ZXJJdGVtc31uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnMucHVzaCh0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1'@;
put 'YnNjcmliZShhPT57dGhpcy5vcGVuPWEsdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9Pnt0aGlzLmRvbUFkYXB0ZXIuZm9jdXModGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50KX0pfSl9KSl9bmdPbkNoYW5nZXMoKXtzZXRUaW1lb3V0'@;
put 'KCgpPT57dGhpcy5zZXRGaWx0ZXJMYWJlbCgpLHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0RmlsdGVyTGFiZWwoKXtpZih0aGlzLmxhYmVsKXJldHVybiB2'@;
put 'b2lkKHRoaXMubGFiZWxWYWx1ZT10aGlzLmxhYmVsKTtjb25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCJjbHItZGctY29sdW1uIik/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUiKTt0aGlzLmxhYmVsVmFsdWU9dGhpcy5jb21tb25T'@;
put 'dHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyTGFiZWwse0NPTFVNTjpkPy50ZXh0Q29udGVudC50cmltKCl8fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHVnKSxHZShtbSksR2UobnMpLEdl'@;
put 'KHNjKSxHZShKaSksR2UoeHMpLEdlKFlvKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1zdHJpbmctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKG5hKFBWZSw1KSxuYShHeCw1KSksMiZhKXtsZXQgaDt4aShoPUVpKCkpJiYo'@;
put 'ZC5pbnB1dD1oLmZpcnN0KSx4aShoPUVpKCkpJiYoZC5maWx0ZXJDb250YWluZXI9aC5maXJzdCl9fSxpbnB1dHM6e3BsYWNlaG9sZGVyOltqbi5Ob25lLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIl0sbGFiZWw6W2puLk5vbmUsImNsckZpbHRlckxhYmVsIiwibGFiZWwi'@;
put 'XSxjdXN0b21TdHJpbmdGaWx0ZXI6W2puLk5vbmUsImNsckRnU3RyaW5nRmlsdGVyIiwiY3VzdG9tU3RyaW5nRmlsdGVyIl0sdmFsdWU6W2puLk5vbmUsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXX0sb3V0cHV0czp7ZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0s'@;
put 'ZmVhdHVyZXM6W2ZvKFt7cHJvdmlkZTpRTCx1c2VFeGlzdGluZzpjfV0pLENvLHdsXSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1siaW5wdXQiLCIiXSxbMywiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIiwiY2xyRGdGaWx0ZXIiLCJjbHJEZ0ZpbHRlck9wZW4iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0'@;
put 'b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsInNlYXJjaCIsImNscklucHV0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPUxuKCk7ZGUoMCwiY2xyLWRnLWZpbHRlciIsMSksZ2koImNs'@;
put 'ckRnRmlsdGVyT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLGJpKGQub3Blbix2KXx8KGQub3Blbj12KSxDdCh2KX0pLGRlKDEsImNsci1pbnB1dC1jb250YWluZXIiKSgyLCJsYWJlbCIpLExlKDMpLGhlKCksZGUoNCwiaW5wdXQiLDIsMCksZ2koIm5nTW9kZWxDaGFuZ2Ui'@;
put 'LGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxiaShkLnZhbHVlLHYpfHwoZC52YWx1ZT12KSxDdCh2KX0pLGhlKCkoKSgpfTImYSYmKHhlKCJjbHJEZ0ZpbHRlciIsZC5yZWdpc3RlcmVkKSxwaSgiY2xyRGdGaWx0ZXJPcGVuIixkLm9wZW4pLGZlKDMpLHdyKGQubGFiZWxWYWx1ZSksZmUoKSxw'@;
put 'aSgibmdNb2RlbCIsZC52YWx1ZSkseGUoInBsYWNlaG9sZGVyIixkLnBsYWNlaG9sZGVyVmFsdWUpLGZyKCJhcmlhLWxhYmVsIixkLnBsYWNlaG9sZGVyVmFsdWUpKX0sZGVwZW5kZW5jaWVzOltkcyxSZCxZTCxlYyxubCxHcyxHeF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTW09KCgpPT57'@;
put 'Y2xhc3MgYyBleHRlbmRzIEl5e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1XcyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGZlYXR1cmVzOltD'@;
put 'b119KSxjfSkoKSxLeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQ9MH1nZXQgaGFzQWN0aW9uYWJsZVJvdygpe3JldHVybiB0aGlzLmFjdGlvbmFibGVDb3VudD4wfXJlZ2lzdGVyKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQrK311bnJlZ2lzdGVyKCl7'@;
put 'dGhpcy5hY3Rpb25hYmxlQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksRTc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ5e2NvbnN0cnVjdG9y'@;
put 'KGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kZy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZGF0YWdyaWQiKTtzdXBlcihhLGQpLHRoaXMucm93QWN0aW9ucz1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5yb3dBY3Rpb25zLmhhc0FjdGlvbmFi'@;
put 'bGVSb3d9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHhzKSxHZShNbSw4KSxHZShLeSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXSxbImNsci1kZy1yb3ciXV0sZmVhdHVyZXM6W0NvXX0pLGN9'@;
put 'KSgpLFNkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMucGxhdGZvcm1JZD1hLHRoaXMubW9kYWxTdGFjaz1bXSx0aGlzLmtleVVwRXZlbnRMaXN0ZW5lcj10aGlzLm9uS2V5VXAuYmluZCh0aGlzKX10cmFja01vZGFsT3BlbihhKXshMT09PXRoaXMubW9kYWxTdGFjay5pbmNs'@;
put 'dWRlcyhhKSYmdGhpcy5tb2RhbFN0YWNrLnVuc2hpZnQoYSksZWwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfXRyYWNrTW9kYWxDbG9zZShhKXtjb25zdCBkPXRoaXMubW9kYWxTdGFjay5p'@;
put 'bmRleE9mKGEpO2Q+LTEmJnRoaXMubW9kYWxTdGFjay5zcGxpY2UoZCwxKSwwPT09dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmZWwodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfW9uS2V5'@;
put 'VXAoYSl7dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmQTIoYS5rZXkpPT09UWkuRXNjYXBlJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksdGhpcy5tb2RhbFN0YWNrWzBdLmNsb3NlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihv'@;
put 'YSkpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLFhmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5tb2RhbFN0YWNrU2VydmljZT1hLHRoaXMucHJldmVudFNjcm9sbD0hMSx0aGlzLnRvZ2ds'@;
put 'ZVN0YXRlPSExLHRoaXMuX2VuYWJsZWQ9ITEsdGhpcy5fc3RhdGU9bmV3IGVpKHRoaXMudG9nZ2xlU3RhdGUpfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuX2VuYWJsZWR9c2V0IGVuYWJsZWQoYSl7dGhpcy5fZW5hYmxlZD1hfWdldCBwcmV2ZW50Rm9jdXNTY3JvbGwoKXtyZXR1cm4gdGhp'@;
put 'cy5wcmV2ZW50U2Nyb2xsfXNldCBwcmV2ZW50Rm9jdXNTY3JvbGwoYSl7dGhpcy5wcmV2ZW50U2Nyb2xsPWF9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdldCBpc09wZW4oKXtyZXR1cm4h'@;
put 'MD09PXRoaXMudG9nZ2xlU3RhdGV9b3BlbihhLGQpe3RoaXMuY2FjaGU9YSx0aGlzLmJ1dHRvbj1kLHRoaXMudG9nZ2xlU3RhdGU9ITAsdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpfWNsb3NlKCl7'@;
put 'dGhpcy50b2dnbGVTdGF0ZT0hMSx0aGlzLnJldHVybkZvY3VzKCksdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxDbG9zZSh0aGlzKX1yZXR1cm5Gb2N1cygpe3RoaXMuYnV0dG9uJiYodGhpcy5idXR0b24uZm9jdXMo'@;
put 'e3ByZXZlbnRTY3JvbGw6dGhpcy5wcmV2ZW50Rm9jdXNTY3JvbGx9KSx0aGlzLmJ1dHRvbj1udWxsKX10b2dnbGUoYSxkKXt0aGlzLmlzUm93T3BlbihhKXx8IWE/dGhpcy5jbG9zZSgpOnRoaXMub3BlbihhLGQpfWlzUm93T3BlbihhKXtyZXR1cm4hKCF0aGlzLnRvZ2dsZVN0YXRlfHx0aGlz'@;
put 'LmNhY2hlIT09YSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFNkZSkpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHF5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kZXRh'@;
put 'aWxTZXJ2aWNlPWEsdGhpcy5leHBhbmRhYmxlQ291bnQ9MH1nZXQgaGFzRXhwYW5kYWJsZVJvdygpe3JldHVybiF0aGlzLmRldGFpbFNlcnZpY2UuZW5hYmxlZCYmdGhpcy5leHBhbmRhYmxlQ291bnQ+MH1yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50Kyt9dW5yZWdpc3Rlcigpe3Ro'@;
put 'aXMuZXhwYW5kYWJsZUNvdW50LS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKFhmKSl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksVDc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFJ5e2NvbnN0'@;
put 'cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kZy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZGF0YWdyaWQiKTtzdXBlcihhLGQpLHRoaXMuZXhwYW5kYWJsZUNvdW50PWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmV4cGFuZGFibGVD'@;
put 'b3VudC5oYXNFeHBhbmRhYmxlUm93fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh4cyksR2UoTW0sOCksR2UocXkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLGZl'@;
put 'YXR1cmVzOltDb119KSxjfSkoKTtjbGFzcyBvT3tjb25zdHJ1Y3RvcihsKXt0aGlzLnByb3A9bCx0aGlzLm5lc3RlZFByb3A9bmV3IGxHKGwpfWNvbXBhcmUobCxhKXtsZXQgZD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpLGg9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShh'@;
put 'KTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGQmJihkPWQudG9Mb3dlckNhc2UoKSksInN0cmluZyI9PXR5cGVvZiBoJiYoaD1oLnRvTG93ZXJDYXNlKCkpLHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQ/dHlwZW9mIGg+InUifHxudWxsPT09aD8wOjE6dHlwZW9mIGg+InUifHxudWxsPT09aHx8ZDxo'@;
put 'Py0xOmQ+aD8xOjB9fXZhciBFaD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlVOU09SVEVEPTBdPSJVTlNPUlRFRCIsY1tjLkFTQz0xXT0iQVNDIixjW2MuREVTQz0tMV09IkRFU0MiLGN9KEVofHx7fSk7Y29uc3QgWHk9ImRhdGFncmlkLWZpeGVkLXdpZHRoIiwkeD0iZGF0YWdyaWQtaGlkZGVu'@;
put 'LWNvbHVtbiI7bGV0IHVHPSgoKT0+e2NsYXNzIGN7bmdBZnRlclZpZXdJbml0KCl7dGhpcy5jb2x1bW5WaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5WaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtY29sdW1uIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmbmEoRlZlLDUpLDImYSl7bGV0IGg7eGkoaD1FaSgpKSYmKGQudGVtcGxhdGVS'@;
put 'ZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbImNvbHVtblBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksbXQoMCxIVmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLF91KSl9LGVuY2Fwc3VsYXRp'@;
put 'b246Mn0pLGN9KSgpLGFPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlcj1hLHRoaXMuX3JldmVyc2U9ITEsdGhpcy5fY2hhbmdlPW5ldyBXbn1nZXQgY29tcGFyYXRvcigpe3JldHVybiB0aGlzLl9jb21wYXJhdG9yfXNldCBjb21wYXJhdG9yKGEpe3Ro'@;
put 'aXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9jb21wYXJhdG9yPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Z2V0IHJldmVyc2UoKXtyZXR1cm4gdGhpcy5fcmV2ZXJzZX1zZXQgcmV2ZXJzZShhKXt0aGlzLnN0YXRlRGVi'@;
put 'b3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fcmV2ZXJzZT1hLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfXRvZ2dsZShhLGQpe3RoaXMuc3RhdGVEZWJvdW5j'@;
put 'ZXIuY2hhbmdlU3RhcnQoKSx0aGlzLmNvbXBhcmF0b3I9PT1hP3RoaXMuX3JldmVyc2U9dHlwZW9mIGQ8InUiJiZkfHwhdGhpcy5fcmV2ZXJzZToodGhpcy5fY29tcGFyYXRvcj1hLHRoaXMuX3JldmVyc2U9dHlwZW9mIGQ8InUiJiZkKSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVi'@;
put 'b3VuY2VyLmNoYW5nZURvbmUoKX1jbGVhcigpe3RoaXMuY29tcGFyYXRvcj1udWxsfWNvbXBhcmUoYSxkKXtyZXR1cm4odGhpcy5yZXZlcnNlPy0xOjEpKnRoaXMuY29tcGFyYXRvci5jb21wYXJlKGEsZCl9ZW1pdENoYW5nZSgpe3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMpfX1yZXR1cm4gYy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihZeCkpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBKZj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkFMSUdOX0NPTFVNTlM9MF09IkFMSUdOX0NPTFVNTlMiLGNb'@;
put 'Yy5DQUxDVUxBVEVfTU9ERV9PTj0xXT0iQ0FMQ1VMQVRFX01PREVfT04iLGNbYy5DQUxDVUxBVEVfTU9ERV9PRkY9Ml09IkNBTENVTEFURV9NT0RFX09GRiIsY1tjLkNMRUFSX1dJRFRIUz0zXT0iQ0xFQVJfV0lEVEhTIixjW2MuQ09NUFVURV9DT0xVTU5fV0lEVEhTPTRdPSJDT01QVVRFX0NP'@;
put 'TFVNTl9XSURUSFMiLGN9KEpmfHx7fSk7bGV0IEE3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9yZW5kZXJTdGVwPW5ldyBXbix0aGlzLmFscmVhZHlTaXplZD0hMX1nZXQgcmVuZGVyU3RlcCgpe3JldHVybiB0aGlzLl9yZW5kZXJTdGVwLmFzT2JzZXJ2YWJsZSgpfWZpbHRl'@;
put 'clJlbmRlclN0ZXBzKGEpe3JldHVybiB0aGlzLnJlbmRlclN0ZXAucGlwZShHbChkPT5hPT09ZCkpfXJlc2l6ZSgpe3RoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5DQUxDVUxBVEVfTU9ERV9PTiksdGhpcy5hbHJlYWR5U2l6ZWQmJnRoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5DTEVBUl9XSURU'@;
put 'SFMpLHRoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5DT01QVVRFX0NPTFVNTl9XSURUSFMpLHRoaXMuX3JlbmRlclN0ZXAubmV4dChKZi5BTElHTl9DT0xVTU5TKSx0aGlzLmFscmVhZHlTaXplZD0hMCx0aGlzLl9yZW5kZXJTdGVwLm5leHQoSmYuQ0FMQ1VMQVRFX01PREVfT0ZGKX19cmV0dXJu'@;
put 'IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksZEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMu'@;
put 'b3JnYW5pemVyPWgsdGhpcy5fcmVzaXplZEJ5PTB9Z2V0IHJlc2l6ZWRCeSgpe3JldHVybiB0aGlzLl9yZXNpemVkQnl9Z2V0IG1pbkNvbHVtbldpZHRoKCl7cmV0dXJuIHRoaXMuZG9tQWRhcHRlci5taW5XaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpfHw5Nn1nZXQgbWF4UmVzaXplUmFu'@;
put 'Z2UoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZS10aGlzLm1pbkNvbHVtbldpZHRofWdldCB3aWR0aEFmdGVyUmVzaXplKCl7cmV0dXJuIHRoaXMud2lkdGhCZWZvcmVSZXNpemUrdGhpcy5fcmVzaXplZEJ5fXN0YXJ0UmVzaXplKCl7dGhpcy5fcmVzaXplZEJ5PTAsdGhpcy5pc1dp'@;
put 'dGhpbk1heFJlc2l6ZVJhbmdlPSEwLHRoaXMud2lkdGhCZWZvcmVSZXNpemU9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QodGhpcy5lbC5uYXRpdmVFbGVtZW50KS53aWR0aH1lbmRSZXNpemUoKXt0aGlzLm9yZ2FuaXplci5yZXNpemUoKX1jYWxjdWxhdGVSZXNpemUoYSl7YTwtdGhpcy5t'@;
put 'YXhSZXNpemVSYW5nZT8odGhpcy5fcmVzaXplZEJ5PS10aGlzLm1heFJlc2l6ZVJhbmdlLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMSk6KHRoaXMuX3Jlc2l6ZWRCeT1hLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh'@;
put 'KXtyZXR1cm4gbmV3KGF8fGMpKHhyKEppKSx4cihtbSkseHIoQTcpKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxoRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMucGxhdGZvcm1JZD1hfWdldCB0YWJsZVJlZigpe3JldHVy'@;
put 'biB0aGlzLl90YWJsZVJlZn1zZXQgdGFibGVSZWYoYSl7dGhpcy5fdGFibGVSZWY9YX1zZXQgdGFibGUoYSl7ZWwodGhpcy5wbGF0Zm9ybUlkKSYmYS5uYXRpdmVFbGVtZW50JiYodGhpcy50YWJsZVJlZj1hLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLXRhYmxlIikp'@;
put 'fWdldENvbHVtbkRyYWdIZWlnaHQoKXtyZXR1cm4gdGhpcy50YWJsZVJlZj9gJHt0aGlzLnRhYmxlUmVmLmNsaWVudEhlaWdodH1weGA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIob2EpKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpj'@;
put 'LGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx4ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZT1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLm5nWm9uZT1oLHRoaXMudGFibGVTaXplU2VydmljZT1mLHRoaXMuY29tbW9u'@;
put 'U3RyaW5nPXYsdGhpcy5kb2N1bWVudD1NLHRoaXMuY29sdW1uU2VwYXJhdG9ySWQ9U3UoKSx0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy51bmxpc3RlbmVycz1bXX1nZXQgZGVzY3JpcHRpb25JZCgpe3JldHVybmAke3RoaXMuY29sdW1uU2VwYXJhdG9ySWR9LWFyaWEtZGVz'@;
put 'Y3JpYmVkYnlgfWdldCByZXNpemVUcmFja2VyRWwoKXtyZXR1cm4gdGhpcy5yZXNpemVUcmFja2VyUmVmLm5hdGl2ZUVsZW1lbnR9Z2V0IGNvbHVtbkhhbmRsZUVsKCl7cmV0dXJuIHRoaXMuY29sdW1uSGFuZGxlUmVmLm5hdGl2ZUVsZW1lbnR9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5uZ1pv'@;
put 'bmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5ZG93biIsYT0+e3RoaXMuc2hvd1RyYWNrZXJPbkZpcnN0S2V5RG93bihhKSx0aGlzLm1vdmVUcmFja2VyT25LZXlEb3duKGEp'@;
put 'fSkpLHRoaXMudW5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmNvbHVtbkhhbmRsZUVsLCJrZXl1cCIsYT0+e3RoaXMuaGlkZVRyYWNrZXJPbktleVVwKGEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnVubGlzdGVuZXJzLmZvckVhY2goYT0+YSgpKX1zaG93VHJh'@;
put 'Y2tlcigpe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2Uuc3RhcnRSZXNpemUoKTtjb25zdCBhPXRoaXMudGFibGVTaXplU2VydmljZS5nZXRDb2x1bW5EcmFnSGVpZ2h0KCk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiaGVpZ2h0IixhKSx0aGlzLnJlbmRl'@;
put 'cmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJkaXNwbGF5IiwiYmxvY2siKX1tb3ZlVHJhY2tlcihhKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmNhbGN1bGF0ZVJlc2l6ZShhKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJ0cmFuc2Zv'@;
put 'cm0iLGB0cmFuc2xhdGVYKCR7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnl9cHgpYCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksImN1cnNvciIsImNvbC1yZXNpemUiKSx0aGlzLnJlZEZsYWdUcmFja2VyKCl9aGlkZVRyYWNrZXIoKXt0aGlz'@;
put 'LmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmVuZFJlc2l6ZSgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImRpc3BsYXkiLCJub25lIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgw'@;
put 'cHgpIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmNvbHVtbkhhbmRsZUVsLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGVYKDBweCkiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwiY3Vyc29yIiwiYXV0byIpfXNob3dUcmFja2VyT25GaXJzdEtleURvd24o'@;
put 'YSl7IXRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITAsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRyYWNr'@;
put 'ZXJFbCwib24tYXJyb3cta2V5LXJlc2l6ZSIpLHRoaXMuc2hvd1RyYWNrZXIoKSl9bW92ZVRyYWNrZXJPbktleURvd24oYSl7dGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpPyhhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubW92ZVRyYWNrZXIodGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5y'@;
put 'ZXNpemVkQnktMTIpKTp0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpJiYoYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm1vdmVUcmFja2VyKHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5KzEyKSl9aGlkZVRyYWNrZXJPbktleVVwKGEpe3RoaXMucmVzaXplU3RhcnRlZE9u'@;
put 'S2V5RG93biYmKHRoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKXx8dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSkmJih0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd249ITEsdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwib24tYXJyb3cta2V5LXJl'@;
put 'c2l6ZSIpLHRoaXMuaGlkZVRyYWNrZXIoKSx0aGlzLmNvbHVtbkhhbmRsZUVsLmZvY3VzKCkpfXJlZEZsYWdUcmFja2VyKCl7dGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlIT09dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlJiYodGhpcy5pc1dpdGhp'@;
put 'bk1heFJlc2l6ZVJhbmdlPXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U/dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4Iik6dGhpcy5yZW5k'@;
put 'ZXJlci5hZGRDbGFzcyh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZXhjZWVkZWQtbWF4IikpfWlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl7cmV0dXJuIEEyKGEua2V5KT09PVFpLkFycm93TGVmdH1pc0Fycm93UmlnaHRLZXlFdmVudChhKXtyZXR1cm4gQTIoYS5rZXkpPT09UWkuQXJyb3dSaWdodH19'@;
put 'cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZEcpLEdlKEVhKSxHZShZbyksR2UoaEcpLEdlKG5zKSxHZSh2cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXNlcGFyYXRvciJdXSx2aWV3UXVlcnk6'@;
put 'ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihuYShOVmUsNSksbmEoVlZlLDUpKSwyJmEpe2xldCBoO3hpKGg9RWkoKSkmJihkLnJlc2l6ZVRyYWNrZXJSZWY9aC5maXJzdCkseGkoaD1FaSgpKSYmKGQuY29sdW1uSGFuZGxlUmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVu'@;
put 'Y3Rpb24oYSxkKXsyJmEmJlRyKCJkYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIiwhMCl9LGRlY2xzOjYsdmFyczo0LGNvbnN0czpbWyJjb2x1bW5IYW5kbGUiLCIiXSxbInJlc2l6ZVRyYWNrZXIiLCIiXSxbInR5cGUiLCJidXR0b24iLCJjZGtEcmFnIiwiIiwiY2RrRHJhZ0xvY2tBeGlzIiwi'@;
put 'eCIsMSwiZGF0YWdyaWQtY29sdW1uLWhhbmRsZSIsMywiY2RrRHJhZ1N0YXJ0ZWQiLCJjZGtEcmFnTW92ZWQiLCJjZGtEcmFnRW5kZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwiZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS10cmFja2VyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZh'@;
put 'KXtjb25zdCBoPUxuKCk7ZGUoMCwiYnV0dG9uIiwyLDApLEZ0KCJjZGtEcmFnU3RhcnRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoaCksQ3QoZC5zaG93VHJhY2tlcigpKX0pKCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLm1vdmVUcmFja2VyKHYuZGlzdGFu'@;
put 'Y2UueCkpfSkoImNka0RyYWdFbmRlZCIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLGQuaGlkZVRyYWNrZXIoKSxDdCh2LnNvdXJjZS5fZHJhZ1JlZi5yZXNldCgpKX0pLGhlKCksZGUoMiwic3BhbiIsMyksTGUoMyksaGUoKSxHdCg0LCJkaXYiLDQsMSl9MiZhJiYoZnIoImFyaWEtbGFiZWwi'@;
put 'LGQuY29tbW9uU3RyaW5nLmtleXMuY29sdW1uU2VwYXJhdG9yQXJpYUxhYmVsKSgiYXJpYS1kZXNjcmliZWRieSIsZC5kZXNjcmlwdGlvbklkKSxmZSgyKSxmcigiaWQiLGQuZGVzY3JpcHRpb25JZCksZmUoKSxJcigiICIsZC5jb21tb25TdHJpbmcua2V5cy5jb2x1bW5TZXBhcmF0b3JEZXNj'@;
put 'cmlwdGlvbiwiICIpKX0sZGVwZW5kZW5jaWVzOlt5WmVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGs3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB0T3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoaCksdGhpcy5lbD1hLHRoaXMuX3NvcnQ9ZCx0aGlzLnZjcj1mLHRoaXMuZGV0YWls'@;
put 'U2VydmljZT12LHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9TSx0aGlzLnNvcnRPcmRlckNoYW5nZT1uZXcgWHIsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZT1uZXcgWHIsdGhpcy5jdXN0b21GaWx0ZXI9ITEsdGhpcy5fY29sVHlwZT0ic3RyaW5nIix0aGlzLl9zb3J0T3JkZXI9RWguVU5TT1JURUQs'@;
put 'dGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3Nob3dTZXBhcmF0b3I9ITAsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCkpfWdldCBp'@;
put 'c0hpZGRlbigpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCR4KX1nZXQgc2hvd1NlcGFyYXRvcigpe3JldHVybiB0aGlzLl9zaG93U2VwYXJhdG9yfXNldCBzaG93U2VwYXJhdG9yKGEpe3RoaXMuX3Nob3dTZXBhcmF0b3I9YSx0aGlzLmNoYW5nZURl'@;
put 'dGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfWdldCBjb2xUeXBlKCl7cmV0dXJuIHRoaXMuX2NvbFR5cGV9c2V0IGNvbFR5cGUoYSl7dGhpcy5fY29sVHlwZT1hfWdldCBmaWVsZCgpe3JldHVybiB0aGlzLl9maWVsZH1zZXQgZmllbGQoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYodGhpcy5fZmll'@;
put 'bGQ9YSx0aGlzLl9zb3J0Qnl8fCh0aGlzLl9zb3J0Qnk9bmV3IG9PKGEpKSl9Z2V0IHNvcnRCeSgpe3JldHVybiB0aGlzLl9zb3J0Qnl9c2V0IHNvcnRCeShhKXsic3RyaW5nIj09dHlwZW9mIGE/dGhpcy5fc29ydEJ5PW5ldyBvTyhhKTphP3RoaXMuX3NvcnRCeT1hOnRoaXMuZmllbGQ/dGhp'@;
put 'cy5fc29ydEJ5PW5ldyBvTyh0aGlzLmZpZWxkKTpkZWxldGUgdGhpcy5fc29ydEJ5fWdldCBzb3J0T3JkZXIoKXtyZXR1cm4gdGhpcy5fc29ydE9yZGVyfXNldCBzb3J0T3JkZXIoYSl7aWYoISh0eXBlb2YgYT4idSIpJiZ0aGlzLl9zb3J0T3JkZXIhPT1hKXN3aXRjaChhKXtjYXNlIEVoLkFT'@;
put 'Qzp0aGlzLnNvcnQoITEpO2JyZWFrO2Nhc2UgRWguREVTQzp0aGlzLnNvcnQoITApO2JyZWFrO2RlZmF1bHQ6dGhpcy5fc29ydC5jbGVhcigpfX1zZXQgdXBkYXRlRmlsdGVyVmFsdWUoYSl7dGhpcy5maWx0ZXI/dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiB4Nz8oKCFhfHwic3RyaW5nIiE9dHlw'@;
put 'ZW9mIGEpJiYoYT0iIiksYSE9PXRoaXMuZmlsdGVyLnZhbHVlJiYodGhpcy5maWx0ZXIudmFsdWU9YSkpOnRoaXMuZmlsdGVyIGluc3RhbmNlb2YgTTcmJigoIWF8fCEoYSBpbnN0YW5jZW9mIEFycmF5KSkmJihhPVtudWxsLG51bGxdKSwyPT09YS5sZW5ndGgmJihhWzBdIT09dGhpcy5maWx0'@;
put 'ZXIudmFsdWVbMF18fGFbMV0hPT10aGlzLmZpbHRlci52YWx1ZVsxXSkmJih0aGlzLmZpbHRlci52YWx1ZT1hKSk6dGhpcy5pbml0RmlsdGVyVmFsdWU9YX1zZXQgcHJvamVjdGVkRmlsdGVyKGEpe2EmJih0aGlzLmRlbGV0ZUZpbHRlcigpLHRoaXMuY3VzdG9tRmlsdGVyPSEwKX1nZXQgc29y'@;
put 'dGFibGUoKXtyZXR1cm4hIXRoaXMuX3NvcnRCeX1nZXQgYXJpYVNvcnQoKXtzd2l0Y2godGhpcy5fc29ydE9yZGVyKXtjYXNlIEVoLkFTQzpyZXR1cm4iYXNjZW5kaW5nIjtjYXNlIEVoLkRFU0M6cmV0dXJuImRlc2NlbmRpbmciO2RlZmF1bHQ6cmV0dXJuIm5vbmUifX1nZXQgc29ydERpcmVj'@;
put 'dGlvbigpe3JldHVybiB0aGlzLl9zb3J0RGlyZWN0aW9ufWdldCBmaWx0ZXJWYWx1ZSgpe3JldHVybiB0aGlzLmZpbHRlciBpbnN0YW5jZW9mIHg3fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIE03P3RoaXMuZmlsdGVyLnZhbHVlOm51bGx9c2V0IGZpbHRlclZhbHVlKGEpeyh0aGlzLmZpbHRl'@;
put 'ciBpbnN0YW5jZW9mIHg3fHx0aGlzLmZpbHRlciBpbnN0YW5jZW9mIE03KSYmKHRoaXMudXBkYXRlRmlsdGVyVmFsdWU9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIudmFsdWUpKX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KHVH'@;
put 'LHRoaXMudmNyKS5jb2x1bW5WaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IFdMKHVHLHRoaXMudmNyKX1uZ09uQ2hhbmdlcyhhKXthLmNvbFR5cGUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUmJmEuY29sVHlwZS5jdXJyZW50VmFsdWUhPT1hLmNvbFR5cGUucHJldmlv'@;
put 'dXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiYhdGhpcy5maWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5maWVsZCYmdGhpcy5zZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpLGEuZmllbGQmJmEuZmllbGQuY3VycmVudFZhbHVlJiZhLmZpZWxkLmN1cnJlbnRW'@;
put 'YWx1ZSE9PWEuZmllbGQucHJldmlvdXNWYWx1ZSYmIXRoaXMuY3VzdG9tRmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25z'@;
put 'LmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zb3J0KGEpe3RoaXMuc29ydGFibGUmJih0aGlzLl9zb3J0LnRvZ2dsZSh0aGlzLl9zb3J0QnksYSksdGhpcy5fc29ydE9yZGVyPXRoaXMuX3NvcnQucmV2ZXJzZT9FaC5ERVNDOkVoLkFTQyx0aGlzLl9zb3J0RGlyZWN0aW9uPXRoaXMuX3Nv'@;
put 'cnRPcmRlcj09PUVoLkRFU0M/ImRvd24iOiJ1cCIsdGhpcy5zb3J0T3JkZXJDaGFuZ2UuZW1pdCh0aGlzLl9zb3J0T3JkZXIpKX1saXN0ZW5Gb3JEZXRhaWxQYW5lQ2hhbmdlcygpe3JldHVybiB0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnNob3dT'@;
put 'ZXBhcmF0b3IhPT0hYSYmKHRoaXMuc2hvd1NlcGFyYXRvcj0hYSl9KX1saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpe3JldHVybiB0aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zb3J0T3JkZXIhPT1FaC5V'@;
put 'TlNPUlRFRCYmYS5jb21wYXJhdG9yIT09dGhpcy5fc29ydEJ5JiYodGhpcy5fc29ydE9yZGVyPUVoLlVOU09SVEVELHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSx0aGlzLl9zb3J0RGlyZWN0aW9uPW51bGwpfSl9c2V0dXBEZWZhdWx0RmlsdGVyKGEsZCl7Im51'@;
put 'bWJlciI9PT1kP3RoaXMuc2V0RmlsdGVyKG5ldyBNNyhuZXcgck8oYSkpKToic3RyaW5nIj09PWQmJnRoaXMuc2V0RmlsdGVyKG5ldyB4NyhuZXcgaU8oYSkpKSx0aGlzLmZpbHRlciYmdGhpcy5pbml0RmlsdGVyVmFsdWUmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPXRoaXMuaW5pdEZpbHRl'@;
put 'clZhbHVlLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShhTyksR2UodWcpLEdlKERhKSxHZShYZiksR2UoeHMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1si'@;
put 'Y2xyLWRnLWNvbHVtbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZsYShoLFFMLDUpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQucHJvamVjdGVkRmlsdGVyPWYuZmlyc3QpfX0saG9zdEF0dHJzOlsicm9sZSIsImNvbHVtbmhlYWRlciJdLGhvc3RWYXJzOjMs'@;
put 'aG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoZnIoImFyaWEtc29ydCIsZC5hcmlhU29ydCksVHIoImRhdGFncmlkLWNvbHVtbiIsITApKX0saW5wdXRzOntmaWx0ZXJTdHJpbmdQbGFjZWhvbGRlcjpbam4uTm9uZSwiY2xyRmlsdGVyU3RyaW5nUGxhY2Vob2xkZXIiLCJmaWx0ZXJT'@;
put 'dHJpbmdQbGFjZWhvbGRlciJdLGZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyOltqbi5Ob25lLCJjbHJGaWx0ZXJOdW1iZXJNYXhQbGFjZWhvbGRlciIsImZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXI6W2puLk5vbmUsImNsckZpbHRlck51'@;
put 'bWJlck1pblBsYWNlaG9sZGVyIiwiZmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXIiXSxjb2xUeXBlOltqbi5Ob25lLCJjbHJEZ0NvbFR5cGUiLCJjb2xUeXBlIl0sZmllbGQ6W2puLk5vbmUsImNsckRnRmllbGQiLCJmaWVsZCJdLHNvcnRCeTpbam4uTm9uZSwiY2xyRGdTb3J0QnkiLCJzb3J0'@;
put 'QnkiXSxzb3J0T3JkZXI6W2puLk5vbmUsImNsckRnU29ydE9yZGVyIiwic29ydE9yZGVyIl0sdXBkYXRlRmlsdGVyVmFsdWU6W2puLk5vbmUsImNsckZpbHRlclZhbHVlIiwidXBkYXRlRmlsdGVyVmFsdWUiXX0sb3V0cHV0czp7c29ydE9yZGVyQ2hhbmdlOiJjbHJEZ1NvcnRPcmRlckNoYW5n'@;
put 'ZSIsZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W2JkKFthZ10pLENvLHdsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6alZlLGRlY2xzOjksdmFyczo1LGNvbnN0czpbWyJjb2x1bW5UaXRsZSIsIiJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tZmxleCJdLFsi'@;
put 'Y2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLCJ0eXBlIiwiYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJGaWx0ZXJQbGFjZWhvbGRlciIsImNsckRnU3RyaW5nRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFsz'@;
put 'LCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsImNsckZpbHRlck1pblBsYWNlaG9sZGVyIiwiY2xyRGdOdW1lcmljRmlsdGVyIiwiY2xyRmlsdGVyVmFsdWUiLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDQsIm5nSWYi'@;
put 'XSxbNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiZGF0YWdyaWQtY29sdW1uLXRpdGxlIiwzLCJjbGljayJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJzaGFwZSIsImFycm93IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwiY2xhc3MiLCJzb3J0LWljb24iLDQsIm5nSWYiXSxbInNoYXBl'@;
put 'IiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsInNvcnQtaWNvbiJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSJdLFszLCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsImNsckZp'@;
put 'bHRlck1heFBsYWNlaG9sZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhCVmUpLGRlKDAsImRpdiIsMSks'@;
put 'bXQoMSxaVmUsMywyLCJidXR0b24iLDIpLFlyKDIpLG10KDMsV1ZlLDEsMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDMpKDQsWVZlLDEsNCwiY2xyLWRnLW51bWVyaWMtZmlsdGVyIiw0KSg1LEdWZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsX3UpKDcsS1ZlLDIsMSwic3BhbiIsNSkoOCxx'@;
put 'VmUsMSwwLCJjbHItZGctY29sdW1uLXNlcGFyYXRvciIsNiksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsZC5zb3J0YWJsZSksZmUoMikseGUoIm5nSWYiLGQuZmllbGQmJiFkLmN1c3RvbUZpbHRlciYmInN0cmluZyI9PWQuY29sVHlwZSksZmUoKSx4ZSgibmdJZiIsZC5maWVsZCYmIWQu'@;
put 'Y3VzdG9tRmlsdGVyJiYibnVtYmVyIj09ZC5jb2xUeXBlKSxmZSgzKSx4ZSgibmdJZiIsIWQuc29ydGFibGUpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1NlcGFyYXRvcikpfSxkZXBlbmRlbmNpZXM6W3lvLE4xLHVzLHhkZSxDZGUsY0ddLGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246'@;
put 'MH0pLGN9KSgpLGRnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2ZpbHRlcnM9YSx0aGlzLl9zb3J0PWQsdGhpcy5fcGFnZT1oLHRoaXMubG9hZGluZz0hMSx0aGlzLl9zbWFydD0hMSx0aGlzLl9kaXNwbGF5ZWQ9W10sdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLl9h'@;
put 'bGxDaGFuZ2VzPW5ldyBXbix0aGlzLnRyYWNrQnk9Zj0+Zn1nZXQgc21hcnQoKXtyZXR1cm4gdGhpcy5fc21hcnR9Z2V0IGFsbCgpe3JldHVybiB0aGlzLl9hbGx9c2V0IGFsbChhKXt0aGlzLl9hbGw9YSx0aGlzLmVtaXRBbGxDaGFuZ2VzKGEpLHRoaXMuc21hcnQ/dGhpcy5fZmlsdGVySXRl'@;
put 'bXMoKToodGhpcy5fZGlzcGxheWVkPWEsdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBkaXNwbGF5ZWQoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbGxDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2FsbENo'@;
put 'YW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHVuaW5pdGlhbGl6ZWQoKXtyZXR1cm4hdGhpcy5fYWxsfWRlc3Ryb3koKXt0aGlzLl9maWx0ZXJzU3ViJiZ0aGlzLl9maWx0ZXJzU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fc29ydFN1YiYmdGhpcy5fc29ydFN1Yi51bnN1YnNjcmliZSgpLHRoaXMu'@;
put 'X3BhZ2VTdWImJnRoaXMuX3BhZ2VTdWIudW5zdWJzY3JpYmUoKX1zbWFydGVuVXAoKXt0aGlzLl9zbWFydD0hMCx0aGlzLl9maWx0ZXJzU3ViPXRoaXMuX2ZpbHRlcnMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5fZmlsdGVySXRlbXMoKSksdGhpcy5fc29ydFN1Yj10aGlzLl9zb3J0LmNo'@;
put 'YW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9zb3J0LmNvbXBhcmF0b3I/dGhpcy5fc29ydEl0ZW1zKCk6dGhpcy5fZmlsdGVySXRlbXMoKX0pLHRoaXMuX3BhZ2VTdWI9dGhpcy5fcGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VQYWdlKCkpfXJlZnJlc2goKXt0aGlzLnNt'@;
put 'YXJ0JiZ0aGlzLl9maWx0ZXJJdGVtcygpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmRpc3BsYXllZCl9ZW1pdEFsbENoYW5nZXMoYSl7dGhpcy5fYWxsQ2hhbmdlcy5uZXh0KGEpfV9maWx0ZXJJdGVtcygpe3RoaXMudW5pbml0aWFsaXplZHx8KHRoaXMuX2ZpbHRlcmVk'@;
put 'PXRoaXMuX2ZpbHRlcnMuaGFzQWN0aXZlRmlsdGVycygpP3RoaXMuX2FsbC5maWx0ZXIoYT0+dGhpcy5fZmlsdGVycy5hY2NlcHRzKGEpKTp0aGlzLl9hbGwuc2xpY2UoKSx0aGlzLl9wYWdlLnRvdGFsSXRlbXM9dGhpcy5fZmlsdGVyZWQubGVuZ3RoLHRoaXMuX3NvcnRJdGVtcygpKX1fc29y'@;
put 'dEl0ZW1zKCl7dGhpcy51bmluaXRpYWxpemVkfHwodGhpcy5fc29ydC5jb21wYXJhdG9yJiZ0aGlzLl9maWx0ZXJlZC5zb3J0KChhLGQpPT50aGlzLl9zb3J0LmNvbXBhcmUoYSxkKSksdGhpcy5fY2hhbmdlUGFnZSgpKX1fY2hhbmdlUGFnZSgpe3RoaXMudW5pbml0aWFsaXplZHx8dGhpcy5f'@;
put 'cGFnZS5hY3RpdmF0ZWQmJjA9PT10aGlzLl9wYWdlLnNpemV8fCh0aGlzLl9kaXNwbGF5ZWQ9dGhpcy5fcGFnZS5zaXplPjA/dGhpcy5fZmlsdGVyZWQuc2xpY2UodGhpcy5fcGFnZS5maXJzdEl0ZW0sdGhpcy5fcGFnZS5sYXN0SXRlbSsxKTp0aGlzLl9maWx0ZXJlZCx0aGlzLmVtaXRDaGFu'@;
put 'Z2UoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKHVnKSx4cihhTykseHIoU20pKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxKeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo'@;
put 'LGYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmRpZmZlcnM9ZCx0aGlzLml0ZW1zPWgsdGhpcy5kaWZmZXI9bnVsbCx0aGlzLnN1YnNjcmlwdGlvbnM9W10saC5zbWFydGVuVXAoKSx0aGlzLml0ZXJhYmxlUHJveHk9bmV3IGxzKGYsYSxkKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmNoYW5n'@;
put 'ZS5zdWJzY3JpYmUodj0+e3RoaXMuaXRlcmFibGVQcm94eS5uZ0Zvck9mPXYsdGhpcy5pdGVyYWJsZVByb3h5Lm5nRG9DaGVjaygpfSkpfXNldCByYXdJdGVtcyhhKXt0aGlzLl9yYXdJdGVtcz1hfHxbXX1zZXQgdHJhY2tCeShhKXt0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JUcmFja0J5PWF9'@;
put 'c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoYSxkKXtyZXR1cm4hMH1uZ0RvQ2hlY2soKXt0aGlzLmRpZmZlcnx8KHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKHRoaXMuX3Jhd0l0ZW1zKS5jcmVhdGUodGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeSkpLHRoaXMuZGlm'@;
put 'ZmVyJiZ0aGlzLmRpZmZlci5kaWZmKHRoaXMuX3Jhd0l0ZW1zKSYmKHRoaXMuaXRlbXMuYWxsPXRoaXMuX3Jhd0l0ZW1zKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGMpKEdlKFNsKSxHZShRNSksR2UoZGcpLEdlKERhKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRnSXRlbXMiLCIiLCJjbHJEZ0l0ZW1zT2YiLCIiXV0saW5wdXRzOntyYXdJdGVtczpbam4uTm9uZSwiY2xyRGdJdGVtc09mIiwicmF3'@;
put 'SXRlbXMiXSx0cmFja0J5Oltqbi5Ob25lLCJjbHJEZ0l0ZW1zVHJhY2tCeSIsInRyYWNrQnkiXX19KSxjfSkoKSxmRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaXRlbXM9YX1nZXQgZW1wdHlEYXRhZ3JpZCgpe3JldHVybiEodGhpcy5pdGVtcy5sb2FkaW5nfHx0aGlzLml0'@;
put 'ZW1zLmRpc3BsYXllZCYmMCE9PXRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGRnKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1wbGFjZWhvbGRlciJdXSxo'@;
put 'b3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6NCx2YXJzOjQsY29uc3RzOltbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXIiXSxbImNsYXNzIiwi'@;
put 'ZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCJdLFs0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXBsYWNlaG9sZGVyLWltYWdlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxkZSgwLCJkaXYiLDAp'@;
put 'LG10KDEsWFZlLDEsMCwiZGl2IiwxKSxkZSgyLCJzcGFuIiwyKSxtdCgzLEpWZSwxLDAsIm5nLWNvbnRlbnQiLDMpLGhlKCkoKSksMiZhJiYoVHIoImRhdGFncmlkLWVtcHR5IixkLmVtcHR5RGF0YWdyaWQpLGZlKCkseGUoIm5nSWYiLGQuZW1wdHlEYXRhZ3JpZCksZmUoMikseGUoIm5nSWYi'@;
put 'LGQuZW1wdHlEYXRhZ3JpZCkpfSxkZXBlbmRlbmNpZXM6W3lvXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxwRz0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuY2VsbFZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3ko'@;
put 'KXt0aGlzLmNlbGxWaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtY2VsbCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJm5h'@;
put 'KFFWZSw1KSwyJmEpe2xldCBoO3hpKGg9RWkoKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJjZWxsUG9ydGFsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxtdCgwLGVCZSwx'@;
put 'LDAsIm5nLXRlbXBsYXRlIixudWxsLDAsX3UpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksUWY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnZjcj1hfWdldCBfdmlldygpe3JldHVybiB0aGlzLndyYXBwZWRJbmplY3Rvci5nZXQocEcsdGhpcy52Y3IpLmNlbGxWaWV3fW5n'@;
put 'T25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IFdMKHBHLHRoaXMudmNyKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRGEpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNlbGwiXV0sY29udGVu'@;
put 'dFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbGEoaCxaTCw0KSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLnNpZ25wb3N0PWYpfX0saG9zdEF0dHJzOlsicm9sZSIsImdyaWRjZWxsIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJkYXRh'@;
put 'Z3JpZC1jZWxsIiwhMCkoImRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIiLGQuc2lnbnBvc3QubGVuZ3RoPjApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLFlyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30p'@;
put 'KCksRWRlPTAsS3g9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFoxe2NvbnN0cnVjdG9yKCl7c3VwZXIoKSx0aGlzLmV4cGFuZGFibGVJZD0iIix0aGlzLl9yZXBsYWNlPW5ldyBlaSghMSksdGhpcy5fYW5pbWF0ZT1uZXcgV24sRWRlKyssdGhpcy5leHBhbmRhYmxlSWQ9ImNsci1kZy1leHBhbmRh'@;
put 'YmxlLXJvdy0iK0VkZX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpeyhhPSEhYSkhPT10aGlzLl9leHBhbmRlZCYmKHRoaXMuX2V4cGFuZGVkPWEsdGhpcy5fYW5pbWF0ZS5uZXh0KCksdGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoYSkpfWdldCBy'@;
put 'ZXBsYWNlKCl7cmV0dXJuIHRoaXMuX3JlcGxhY2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGFuaW1hdGUoKXtyZXR1cm4gdGhpcy5fYW5pbWF0ZS5hc09ic2VydmFibGUoKX1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7c3VwZXIubG9hZGluZ1N0YXRlQ2hhbmdlKGEpLGEhPT1VMS5MT0FESU5HJiZ0aGlz'@;
put 'Ll9hbmltYXRlLm5leHQoKX1zZXRSZXBsYWNlKGEpe3RoaXMuX3JlcGxhY2UubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIFF5PWZ1'@;
put 'bmN0aW9uKGMpe3JldHVybiBjW2MuRElTUExBWT0wXT0iRElTUExBWSIsY1tjLkNBTENVTEFURT0xXT0iQ0FMQ1VMQVRFIixjfShReXx8e30pLHBsPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9uZT0wXT0iTm9uZSIsY1tjLlNpbmdsZT0xXT0iU2luZ2xlIixjW2MuTXVsdGk9Ml09Ik11bHRp'@;
put 'IixjfShwbHx8e30pO2xldCBnRz0oKCk9PntjbGFzcyBje25nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMucm93Vmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMucm93Vmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLXJvdyJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJm5hKHRCZSw1KSwyJmEpe2xldCBoO3hpKGg9RWkoKSkmJihkLnRlbXBsYXRlUmVmPWgu'@;
put 'Zmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJyb3dQb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLG10KDAsbkJlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxfdSkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxj'@;
put 'fSkoKSx4WmU9MCxlXz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5faXRlbXM9YSx0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQcmVzc2VkPSExLHRoaXMucm93U2VsZWN0aW9uTW9kZT0hMSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMubG9j'@;
put 'a2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyBXbix0aGlzLl9zZWxlY3Rpb25UeXBlPXBsLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVjdGlvbiIreFplKyssdGhpcy5zdWJzY3JpcHRpb25zLnB1c2go'@;
put 'ZC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmFsbENoYW5nZXMuc3Vic2NyaWJlKGg9Pntjb25zdCBmPVtdO3N3aXRjaCh0aGlz'@;
put 'LnNlbGVjdGlvblR5cGUpe2Nhc2UgcGwuTm9uZTpicmVhaztjYXNlIHBsLlNpbmdsZTp7bGV0IHYsTT0hMTt0aGlzLmN1cnJlbnRTaW5nbGUmJiF0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWYmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9YS50cmFja0J5KHRoaXMuY3VycmVudFNp'@;
put 'bmdsZSkpLGguZm9yRWFjaChEPT57Y29uc3QgWj1hLnRyYWNrQnkoRCk7dGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPT09WiYmKHY9RCxNPSEwKSx0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihaKT4tMSYmZi5wdXNoKFopfSksYS5zbWFydCYmIXYmJihNPSEwKSxzZXRUaW1lb3V0KCgpPT57'@;
put 'TSYmKHRoaXMuY3VycmVudFNpbmdsZT12KX0sMCk7YnJlYWt9Y2FzZSBwbC5NdWx0aTp7bGV0IHY9dGhpcy5jdXJyZW50LnNsaWNlKCksTT0hMTt0aGlzLmN1cnJlbnQubGVuZ3RoPjAmJnRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoIT09dGhpcy5jdXJyZW50Lmxlbmd0aCYmKHRoaXMu'@;
put 'cHJldlNlbGVjdGlvblJlZnM9W10sdGhpcy5jdXJyZW50LmZvckVhY2goRD0+e3RoaXMucHJldlNlbGVjdGlvblJlZnMucHVzaChhLnRyYWNrQnkoRCkpfSkpLGguZm9yRWFjaChEPT57Y29uc3QgWj1hLnRyYWNrQnkoRCk7dGhpcy5sb2NrZWRSZWZzLmluZGV4T2YoWik+LTEmJmYucHVzaCha'@;
put 'KX0pLHYubGVuZ3RoPjAmJihoLmZvckVhY2goRD0+e2NvbnN0IFo9YS50cmFja0J5KEQpLG5lPXRoaXMucHJldlNlbGVjdGlvblJlZnMuaW5kZXhPZihaKTtuZT4tMSYmKHZbbmVdPUQsTT0hMCl9KSxhLnNtYXJ0JiYodj12LmZpbHRlcihEPT5oLmluZGV4T2YoRCk+LTEpLHRoaXMuY3VycmVu'@;
put 'dC5sZW5ndGghPT12Lmxlbmd0aCYmKE09ITApKSxzZXRUaW1lb3V0KCgpPT57TSYmKHRoaXMuY3VycmVudD12KX0sMCkpO2JyZWFrfX10aGlzLmxvY2tlZFJlZnM9Zn0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnZhbHVlQ29sbGVjdG9yLnBpcGUoaG0oMCkpLnN1YnNjcmliZSgo'@;
put 'KT0+dGhpcy5lbWl0Q2hhbmdlKCkpKX1nZXQgc2VsZWN0aW9uVHlwZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlfXNldCBzZWxlY3Rpb25UeXBlKGEpe2EhPT10aGlzLnNlbGVjdGlvblR5cGUmJih0aGlzLl9zZWxlY3Rpb25UeXBlPWEsYT09PXBsLk5vbmU/ZGVsZXRlIHRoaXMuY3Vy'@;
put 'cmVudDp0aGlzLnVwZGF0ZUN1cnJlbnQoW10sITEpKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMudXBkYXRlQ3VycmVudChhLCEwKX1nZXQgY3VycmVudFNpbmdsZSgpe3JldHVybiB0aGlzLl9jdXJyZW50U2luZ2xlfXNldCBjdXJyZW50'@;
put 'U2luZ2xlKGEpe2EhPT10aGlzLl9jdXJyZW50U2luZ2xlJiYodGhpcy5fY3VycmVudFNpbmdsZT1hLGEmJih0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9dGhpcy5faXRlbXMudHJhY2tCeShhKSksdGhpcy5lbWl0Q2hhbmdlKCkpfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdl'@;
put 'LmFzT2JzZXJ2YWJsZSgpfWdldCBfc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGl8fHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGV9Y2xlYXJTZWxlY3Rpb24oKXt0aGlzLl9jdXJyZW50PVtdLHRoaXMucHJldlNlbGVjdGlvblJlZnM9W10s'@;
put 'dGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPW51bGwsdGhpcy5fY3VycmVudFNpbmdsZT1udWxsLHRoaXMuZW1pdENoYW5nZSgpfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXVwZGF0ZUN1cnJlbnQoYSxkKXt0aGlzLl9jdXJyZW50'@;
put 'PWEsZCYmdGhpcy52YWx1ZUNvbGxlY3Rvci5uZXh0KGEpfWlzU2VsZWN0ZWQoYSl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGU/dGhpcy5jdXJyZW50U2luZ2xlPT09YTp0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGkmJnRoaXMuY3VycmVudC5pbmRleE9mKGEp'@;
put 'Pj0wfXNldFNlbGVjdGVkKGEsZCl7Y29uc3QgaD10aGlzLmN1cnJlbnQ/dGhpcy5jdXJyZW50LmluZGV4T2YoYSk6LTE7c3dpdGNoKHRoaXMuX3NlbGVjdGlvblR5cGUpe2Nhc2UgcGwuTm9uZTpjYXNlIHBsLlNpbmdsZTpicmVhaztjYXNlIHBsLk11bHRpOmg+PTAmJiFkP3RoaXMuZGVzZWxl'@;
put 'Y3RJdGVtKGgpOmg8MCYmZCYmdGhpcy5zZWxlY3RJdGVtKGEpfX1pc0FsbFNlbGVjdGVkKCl7aWYodGhpcy5fc2VsZWN0aW9uVHlwZSE9PXBsLk11bHRpfHwhdGhpcy5faXRlbXMuZGlzcGxheWVkKXJldHVybiExO2NvbnN0IGE9dGhpcy5faXRlbXMuZGlzcGxheWVkLmZpbHRlcihmPT4hMT09'@;
put 'PXRoaXMuaXNMb2NrZWQoZikpO3JldHVybiEoYS5sZW5ndGg8MSkmJmEuZmlsdGVyKGY9PnRoaXMuY3VycmVudC5pbmRleE9mKGYpPi0xKS5sZW5ndGg9PT1hLmxlbmd0aH1sb2NrSXRlbShhLGQpe2lmKHRoaXMuY2FuSXRCZUxvY2tlZCgpKXtjb25zdCBoPXRoaXMuX2l0ZW1zLnRyYWNrQnko'@;
put 'YSk7ITA9PT1kP3RoaXMubG9ja2VkUmVmcy5wdXNoKGgpOnRoaXMubG9ja2VkUmVmcz10aGlzLmxvY2tlZFJlZnMuZmlsdGVyKGY9PmghPT1mKX19aXNMb2NrZWQoYSl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGQ9dGhpcy5faXRlbXMudHJhY2tCeShhKTtyZXR1cm4gdGhpcy5s'@;
put 'b2NrZWRSZWZzLmluZGV4T2YoZCk+LTF9cmV0dXJuITF9dG9nZ2xlQWxsKCl7dGhpcy5fc2VsZWN0aW9uVHlwZT09PXBsLk5vbmV8fHRoaXMuX3NlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGV8fCh0aGlzLmlzQWxsU2VsZWN0ZWQoKT90aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57'@;
put 'Y29uc3QgZD10aGlzLmN1cnJlbnQuaW5kZXhPZihhKTtkPi0xJiYhMT09PXRoaXMuaXNMb2NrZWQoYSkmJnRoaXMuZGVzZWxlY3RJdGVtKGQpfSk6dGhpcy5faXRlbXMuZGlzcGxheWVkLmZvckVhY2goYT0+e3RoaXMuY3VycmVudC5pbmRleE9mKGEpPDAmJiExPT09dGhpcy5pc0xvY2tlZChh'@;
put 'KSYmdGhpcy5zZWxlY3RJdGVtKGEpfSkpfXNlbGVjdEl0ZW0oYSl7dGhpcy5jdXJyZW50PXRoaXMuY3VycmVudC5jb25jYXQoYSksdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKHRoaXMuX2l0ZW1zLnRyYWNrQnkoYSkpfWRlc2VsZWN0SXRlbShhKXtpZih0aGlzLmN1cnJlbnQ9dGhpcy5j'@;
put 'dXJyZW50LnNsaWNlKDAsYSkuY29uY2F0KHRoaXMuY3VycmVudC5zbGljZShhKzEpKSxhPHRoaXMucHJldlNlbGVjdGlvblJlZnMubGVuZ3RoKXtjb25zdCBkPXRoaXMucHJldlNlbGVjdGlvblJlZnMuc3BsaWNlKGEsMSk7dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIo'@;
put 'aD0+aCE9PWRbMF0pfX1jYW5JdEJlTG9ja2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGUhPT1wbC5Ob25lfWVtaXRDaGFuZ2UoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09cGwuU2luZ2xlP3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudFNpbmdsZSk6dGhpcy5fc2VsZWN0aW9u'@;
put 'VHlwZT09PXBsLk11bHRpJiZ0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLmN1cnJlbnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihkZykseHIodWcpKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSko'@;
put 'KSxtRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3ZpZXc9bmV3IGVpKFF5LkRJU1BMQVkpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNBTENVTEFURV9NT0RFX09OKS5zdWJzY3JpYmUoKCk9'@;
put 'PnRoaXMuX3ZpZXcubmV4dChReS5DQUxDVUxBVEUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5maWx0ZXJSZW5kZXJTdGVwcyhKZi5DQUxDVUxBVEVfTU9ERV9PRkYpLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KFF5LkRJU1BMQVkpKSl9Z2V0IHZpZXcoKXtyZXR1cm4gdGhp'@;
put 'cy5fdmlldy5hc09ic2VydmFibGUoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHhyKEE3KSl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46'@;
put 'YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdkc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNlbGVjdGlvbj1hfW9uU2VsZWN0aW9uQ2VsbENsaWNrKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGV8fCJMQUJFTCIhPT1hLnRhcmdldC50YWdOYW1lJiYi'@;
put 'SU5QVVQiIT09YS50YXJnZXQudGFnTmFtZSYmYS50YXJnZXQucXVlcnlTZWxlY3RvcigiaW5wdXQiKT8uY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZV8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4'@;
put 'LCJkYXRhZ3JpZC1zZWxlY3QiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uU2VsZWN0aW9uQ2VsbENsaWNrKGYpfSl9fSksY30pKCksU3A9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1h'@;
put 'LHRoaXMucmVuZGVyZXI9ZCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5maWx0ZXJSZW5kZXJTdGVwcyhKZi5DTEVBUl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9u'@;
put 'cy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0U3RhdGUoYSl7dGhpcy5zZXRXaWR0aChhKSx0aGlzLnNldEhpZGRlbihhKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRo'@;
put 'P3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFh5KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJw'@;
put 'eCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwkeCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsJHgpfWNsZWFyV2lkdGgoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNz'@;
put 'KHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoSmkpLEdlKEVhKSxHZShBNykpfSxjLlx1MDI3'@;
put 'NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY2VsbCJdXX0pLGN9KSgpLHNPPTAseG09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFosbmUsY2UsYmUsRWUpe3RoaXMuc2VsZWN0aW9uPWEsdGhpcy5yb3dBY3Rpb25TZXJ2aWNlPWQsdGhpcy5nbG9i'@;
put 'YWxFeHBhbmRhYmxlPWgsdGhpcy5leHBhbmQ9Zix0aGlzLmRldGFpbFNlcnZpY2U9dix0aGlzLmRpc3BsYXlNb2RlPU0sdGhpcy52Y3I9RCx0aGlzLmNvbW1vblN0cmluZ3M9Y2UsdGhpcy5pdGVtcz1iZSx0aGlzLmRvY3VtZW50PUVlLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBYcighMSks'@;
put 'dGhpcy5leHBhbmRlZENoYW5nZT1uZXcgWHIoITEpLHRoaXMuZGV0YWlsRGlzYWJsZWQ9ITEsdGhpcy5kZXRhaWxIaWRkZW49ITEsdGhpcy5za2VsZXRvbkxvYWRpbmc9ITEsdGhpcy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSExLHRoaXMuU0VMRUNUSU9O'@;
put 'X1RZUEU9cGwsdGhpcy5pdGVtQ2hhbmdlcz1uZXcgYngoMSksdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fZGV0YWlsT3BlbkxhYmVsPSIiLHRoaXMuX2RldGFpbENsb3NlTGFiZWw9IiIsdGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9IiIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX3NlbGVj'@;
put 'dGFibGU9ITAsc08rKyx0aGlzLmlkPSJjbHItZGctcm93IitzTyx0aGlzLnJhZGlvSWQ9ImNsci1kZy1yb3ctcmQiK3NPLHRoaXMuY2hlY2tib3hJZD0iY2xyLWRnLXJvdy1jYiIrc08sdGhpcy5leHBhbmRhYmxlSWQ9Zi5leHBhbmRhYmxlSWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goSzgo'@;
put 'Zi5yZXBsYWNlLGYuZXhwYW5kQ2hhbmdlKS5zdWJzY3JpYmUoKFtCZSxxZV0pPT57QmUmJnFlPyh0aGlzLnJlcGxhY2VkPSEwLFouYWRkQ2xhc3MobmUubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpOih0aGlzLnJlcGxhY2VkPSExLFoucmVtb3ZlQ2xhc3MobmUubmF0'@;
put 'aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpfSkpfWdldCBpdGVtKCl7cmV0dXJuIHRoaXMuX2l0ZW19c2V0IGl0ZW0oYSl7dGhpcy5faXRlbT1hLHRoaXMuaXRlbUNoYW5nZXMubmV4dChhKSx0aGlzLmNsckRnU2VsZWN0YWJsZT10aGlzLl9zZWxlY3RhYmxlfWdldCBjbHJE'@;
put 'Z1NlbGVjdGFibGUoKXtyZXR1cm4hdGhpcy5zZWxlY3Rpb24uaXNMb2NrZWQodGhpcy5pdGVtKX1zZXQgY2xyRGdTZWxlY3RhYmxlKGEpe3RoaXMuaXRlbSYmdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCJmYWxzZSI9PT1hfHwhMT09PWEpLHRoaXMuX3NlbGVjdGFibGU9YX1n'@;
put 'ZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXBsLk5vbmU/dGhpcy5fc2VsZWN0ZWQ6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZCh0aGlzLml0ZW0pfXNldCBzZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuTm9u'@;
put 'ZT90aGlzLl9zZWxlY3RlZD1hOihhJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGk/dGhpcy5yYW5nZVNlbGVjdCgpOnRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQ9bnVsbCx0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3RlZCh0aGlzLml0ZW0sYSkpfWdldCBleHBhbmRl'@;
put 'ZCgpe3JldHVybiB0aGlzLmV4cGFuZC5leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmQuZXhwYW5kZWQ9YX1nZXQgY2xyRGdEZXRhaWxPcGVuTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsT3BlbkxhYmVsP3RoaXMuX2RldGFpbE9wZW5MYWJlbDp0aGlzLmNvbW1vblN0cmlu'@;
put 'Z3Mua2V5cy5vcGVufXNldCBjbHJEZ0RldGFpbE9wZW5MYWJlbChhKXt0aGlzLl9kZXRhaWxPcGVuTGFiZWw9YX1nZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKCl7cmV0dXJuIHRoaXMuX2RldGFpbENsb3NlTGFiZWw/dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mu'@;
put 'a2V5cy5jbG9zZX1zZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKGEpe3RoaXMuX2RldGFpbENsb3NlTGFiZWw9YX1nZXQgY2xyRGdSb3dTZWxlY3Rpb25MYWJlbCgpe3JldHVybiB0aGlzLl9yb3dTZWxlY3Rpb25MYWJlbD90aGlzLl9yb3dTZWxlY3Rpb25MYWJlbDp0aGlzLmNvbW1vblN0cmlu'@;
put 'Z3Mua2V5cy5zZWxlY3R9c2V0IGNsckRnUm93U2VsZWN0aW9uTGFiZWwoYSl7dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KGdHLHRoaXMudmNyKS5yb3dWaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0'@;
put 'b3I9bmV3IFdMKGdHLHRoaXMudmNyKSx0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sITE9PT10aGlzLmNsckRnU2VsZWN0YWJsZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5kZ0NlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5kZ0NlbGxzLmZvckVhY2goYT0+'@;
put 'e2EuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuaW5zZXJ0KGEuX3ZpZXcpfSl9KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vic2NyaWJlKGE9Pntmb3IobGV0IGQ9dGhpcy5fc2Nyb2xsYWJs'@;
put 'ZUNlbGxzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Njcm9sbGFibGVDZWxscy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fY2FsY3VsYXRlZENlbGxzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5kZXRhY2goKTthPT09UXkuQ0FMQ1VMQVRFPyh0aGlzLmRpc3BsYXlDZWxs'@;
put 'cz0hMSx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX2NhbGN1bGF0ZWRDZWxscy5pbnNlcnQoZC5fdmlldyl9KSk6KHRoaXMuZGlzcGxheUNlbGxzPSEwLHRoaXMuZGdDZWxscy5mb3JFYWNoKGQ9PntkLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Ny'@;
put 'b2xsYWJsZUNlbGxzLmluc2VydChkLl92aWV3KX0pKX0pLHRoaXMuZXhwYW5kLmFuaW1hdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5leHBhbmRBbmltYXRpb25UcmlnZ2VyPSF0aGlzLmV4cGFuZEFuaW1hdGlvblRyaWdnZXJ9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9y'@;
put 'RWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXRvZ2dsZShhPSF0aGlzLnNlbGVjdGVkKXthIT09dGhpcy5zZWxlY3RlZCYmKHRoaXMuc2VsZWN0ZWQ9YSx0aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpKX10b2dnbGVFeHBhbmQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlJiYodGhpcy5leHBh'@;
put 'bmRBbmltYXRpb24udXBkYXRlU3RhcnRIZWlnaHQoKSx0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Y2xlYXJSYW5nZXMoYSl7YS5zaGlmdEtleSYmKHRoaXMuZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkucmVtb3Zl'@;
put 'QWxsUmFuZ2VzKCksLTEhPT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IikmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy50b2dnbGUoITApKSl9c2VsZWN0Um93KGE9IXRoaXMuc2VsZWN0ZWQsZCl7IkxBQkVMIiE9PWQudGFyZ2V0LnRhZ05hbWUmJih0aGlz'@;
put 'LnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09dGhpcy5TRUxFQ1RJT05fVFlQRS5TaW5nbGU/dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT10aGlzLml0ZW06dGhpcy50b2dnbGUoYSkpfXJhbmdlU2VsZWN0KCl7Y29uc3QgYT10aGlzLml0ZW1zLmRpc3BsYXllZDtpZighYSlyZXR1cm47'@;
put 'Y29uc3QgZD1hLmluZGV4T2YodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCk7aWYodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCYmdGhpcy5zZWxlY3Rpb24uY3VycmVudC5pbmNsdWRlcyh0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0KSYmdGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkJiYt'@;
put 'MSE9PWQpe2NvbnN0IGg9YS5pbmRleE9mKHRoaXMuaXRlbSksZj1uZXcgU2V0KHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuY29uY2F0KGEuc2xpY2UoTWF0aC5taW4oZCxoKSxNYXRoLm1heChkLGgpKzEpKSk7dGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKSx0aGlzLnNlbGVjdGlvbi5j'@;
put 'dXJyZW50LnB1c2goLi4uZil9ZWxzZSB0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0PXRoaXMuaXRlbX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZV8pLEdlKEt5KSxHZShxeSksR2UoS3gpLEdlKFhmKSxHZShtRyksR2UoRGEpLEdlKEVhKSxH'@;
put 'ZShKaSksR2UobnMpLEdlKGRnKSxHZSh2cykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgsUWYsNCksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5kZ0NlbGxzPWYp'@;
put 'fX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYobmEoTkwsNSksbmEockJlLDUpLG5hKGlCZSw1LERhKSxuYShvQmUsNSxEYSksbmEoYUJlLDUsRGEpKSwyJmEpe2xldCBoO3hpKGg9RWkoKSkmJihkLmV4cGFuZEFuaW1hdGlvbj1oLmZpcnN0KSx4aShoPUVpKCkpJiYoZC5kZXRh'@;
put 'aWxCdXR0b249aC5maXJzdCkseGkoaD1FaSgpKSYmKGQuX3N0aWNreUNlbGxzPWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLl9zY3JvbGxhYmxlQ2VsbHM9aC5maXJzdCkseGkoaD1FaSgpKSYmKGQuX2NhbGN1bGF0ZWRDZWxscz1oLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJyb3dncm91'@;
put 'cCJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoZnIoImFyaWEtb3ducyIsZC5pZCksVHIoImRhdGFncmlkLXJvdyIsITApKCJkYXRhZ3JpZC1yb3ctc2tlbGV0b24iLGQuc2tlbGV0b25Mb2FkaW5nKSgiZGF0YWdyaWQtc2VsZWN0ZWQiLGQuc2VsZWN0ZWQp'@;
put 'KX0saW5wdXRzOntkZXRhaWxEaXNhYmxlZDpbam4uTm9uZSwiY2xyRGdEZXRhaWxEaXNhYmxlZCIsImRldGFpbERpc2FibGVkIl0sZGV0YWlsSGlkZGVuOltqbi5Ob25lLCJjbHJEZ0RldGFpbEhpZGRlbiIsImRldGFpbEhpZGRlbiJdLHNrZWxldG9uTG9hZGluZzpbam4uTm9uZSwiY2xyRGdT'@;
put 'a2VsZXRvbkxvYWRpbmciLCJza2VsZXRvbkxvYWRpbmciXSxpdGVtOltqbi5Ob25lLCJjbHJEZ0l0ZW0iLCJpdGVtIl0sY2xyRGdTZWxlY3RhYmxlOiJjbHJEZ1NlbGVjdGFibGUiLHNlbGVjdGVkOltqbi5Ob25lLCJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxleHBhbmRlZDpbam4uTm9u'@;
put 'ZSwiY2xyRGdFeHBhbmRlZCIsImV4cGFuZGVkIl0sY2xyRGdEZXRhaWxPcGVuTGFiZWw6ImNsckRnRGV0YWlsT3BlbkxhYmVsIixjbHJEZ0RldGFpbENsb3NlTGFiZWw6ImNsckRnRGV0YWlsQ2xvc2VMYWJlbCIsY2xyRGdSb3dTZWxlY3Rpb25MYWJlbDoiY2xyRGdSb3dTZWxlY3Rpb25MYWJl'@;
put 'bCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckRnRXhwYW5kZWRDaGFuZ2UifSxmZWF0dXJlczpbZm8oW0t4LHtwcm92aWRlOloxLHVzZUV4aXN0aW5nOkt4fSx7cHJvdmlkZTpreCx1c2VFeGlzdGluZzpLeH1dKV0s'@;
put 'bmdDb250ZW50U2VsZWN0b3JzOmxCZSxkZWNsczo5LHZhcnM6Myxjb25zdHM6W1siZGV0YWlsIiwiIl0sWyJyb3dDb250ZW50IiwiIl0sWyJjYWxjdWxhdGVkQ2VsbHMiLCIiXSxbInN0aWNreUNlbGxzIiwiIl0sWyJzY3JvbGxhYmxlQ2VsbHMiLCIiXSxbImRldGFpbEJ1dHRvbiIsIiJdLFsi'@;
put 'Y2xhc3MiLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayIsNCwibmdJZiJdLFszLCJjbHJFeHBhbmRUcmlnZ2VyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LWNsaWNrYWJsZSIsMywibW91c2Vkb3duIiwiY2xpY2siXSxbMywiY2xy'@;
put 'RXhwYW5kVHJpZ2dlciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiLDMsImlkIl0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbImNsYXNzIiwiZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlk'@;
put 'LWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiwzLCJuZ0NsYXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1hY3Rpb25zIGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1jZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0s'@;
put 'WyJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiBkYXRhZ3JpZC1j'@;
put 'ZWxsIiwicm9sZSIsImdyaWRjZWxsIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIiwzLCJuZ0NsYXNzIl0sWzEsImRhdGFncmlkLXNjcm9sbGluZy1jZWxscyJdLFsiY2xhc3MiLCJza2VsZXRvbi1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEs'@;
put 'ImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiaWQi'@;
put 'LCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiY2xpY2siLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmFtZSIsInZh'@;
put 'bHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2Vs'@;
put 'bCJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0'@;
put 'dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLDEsImRhdGFncmlkLWV4cGFu'@;
put 'ZGFibGUtY2FyZXQtaWNvbiJdLFsiY2xyU21hbGwiLCIiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRh'@;
put 'dGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwzLCJkaXNhYmxlZCIsImlzLW9wZW4iLCJjbGljayIsNCwibmdJZiJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1k'@;
put 'ZXRhaWwtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24iXSxbMSwic2tlbGV0b24tbG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKHNCZSksbXQoMCxw'@;
put 'QmUsMywyLCJkaXYiLDYpKDEsbUJlLDIsMiwiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw3KSgyLGJCZSwxLDEsbnVsbCw4KSgzLHlCZSwxLDAsIm5nLXRlbXBsYXRlIixudWxsLDAsX3UpKDUsT0JlLDE3LDE0LCJuZy10ZW1wbGF0ZSIsbnVsbCwxLF91KSxKbCg3LG51bGwsMikpLDImYSYm'@;
put 'KHhlKCJuZ0lmIixkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlKSxmZSgpLHhlKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSYmZC5leHBhbmQuZXhwYW5kYWJsZSksZmUoKSx4ZSgibmdJZiIsIWQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUmJiFkLmV4cGFuZC5l'@;
put 'eHBhbmRhYmxlKSl9LGRlcGVuZGVuY2llczpbd3UseW8sTjEsdXMsZHMsc0csYUcsZWMsQjEsdkwsbmwsR3MsTkwsTWgsUWYsdkcsU3BdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO3ZhciBZMT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLldJRFRIPTBdPSJXSURUSCIsY1tjLkhJRERFTj0xXT0i'@;
put 'SElEREVOIixjW2MuSU5JVElBTElaRT0yXT0iSU5JVElBTElaRSIsY30oWTF8fHt9KTtjb25zdCBFWmU9T2JqZWN0LmtleXMoWTEpLm1hcChjPT5ZMVtjXSkuZmlsdGVyKGM9PmM9PT1wYXJzZUludChjLDEwKSYmYyE9PVkxLklOSVRJQUxJWkUpO2xldCBoZz0oKCk9PntjbGFzcyBje2NvbnN0'@;
put 'cnVjdG9yKCl7dGhpcy5jb2x1bW5zPVtdLHRoaXMuY29sdW1uc1N0YXRlQ2hhbmdlPW5ldyBlaShudWxsKSx0aGlzLl9jYWNoZT1bXX1nZXQgY29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1ucy5tYXAoYT0+YS52YWx1ZSl9Z2V0IGhhc0hpZGVhYmxlQ29sdW1ucygpe3JldHVybiB0'@;
put 'aGlzLmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+YS5oaWRlYWJsZSkubGVuZ3RoPjB9Z2V0IHZpc2libGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcihhPT4hYS5oaWRkZW4pfWNhY2hlKCl7dGhpcy5fY2FjaGU9dGhpcy5jb2x1bW5zLm1hcChhPT57Y29uc3QgZD17'@;
put 'Li4uYS52YWx1ZX07cmV0dXJuIGRlbGV0ZSBkLmNoYW5nZXMsZH0pfWhhc0NhY2hlKCl7cmV0dXJuISF0aGlzLl9jYWNoZS5sZW5ndGh9cmVzZXRUb0xhc3RDYWNoZSgpe3RoaXMuX2NhY2hlLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPXsuLi5hLGNoYW5nZXM6RVplfTt0aGlzLmNvbHVtbnNb'@;
put 'ZF0ubmV4dChoKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGgpfSksdGhpcy5fY2FjaGU9W119ZW1pdFN0YXRlQ2hhbmdlQXQoYSxkKXt0aGlzLmNvbHVtbnNbYV0mJnRoaXMuZW1pdFN0YXRlQ2hhbmdlKHRoaXMuY29sdW1uc1thXSxkKX1lbWl0U3RhdGVDaGFuZ2UoYSxkKXtjb25z'@;
put 'dCBoPXsuLi5hLnZhbHVlLC4uLmR9O2EubmV4dChoKSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZS5uZXh0KGgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSko'@;
put 'KTtjb25zdCBUWmU9e2l0ZW1TaXplOjMyLG1pbkJ1ZmZlclB4OjIwMCxtYXhCdWZmZXJQeDo0MDB9O2xldCBUZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFosbmUsY2UsYmUsRWUsQmUpe3RoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9YSx0aGlzLml0ZXJhYmxlRGlm'@;
put 'ZmVycz1kLHRoaXMuaXRlbXM9aCx0aGlzLm5nWm9uZT1mLHRoaXMucmVuZGVyZXIyPXYsdGhpcy50ZW1wbGF0ZVJlZj1NLHRoaXMudmlld0NvbnRhaW5lclJlZj1ELHRoaXMuZGlyZWN0aW9uYWxpdHk9Wix0aGlzLnNjcm9sbERpc3BhdGNoZXI9bmUsdGhpcy52aWV3cG9ydFJ1bGVyPWNlLHRo'@;
put 'aXMuZGF0YWdyaWQ9YmUsdGhpcy5jb2x1bW5zU2VydmljZT1FZSx0aGlzLmluamVjdG9yPUJlLHRoaXMucmVuZGVyZWRSYW5nZUNoYW5nZT1uZXcgWHIsdGhpcy5wZXJzaXN0SXRlbXM9ITAsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cz17Li4uVFplfSx0aGlzLnN1YnNj'@;
put 'cmlwdGlvbnM9W10sdGhpcy50b3BJbmRleD0wLHRoaXMubXV0YXRpb25DaGFuZ2VzPW5ldyBNdXRhdGlvbk9ic2VydmVyKHFlPT57cWUuZm9yRWFjaChydD0+e3J0LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoImRhdGFncmlkLWNvbXBhY3QiKSYmdGhpcy5pdGVtU2l6ZT4yNCYmKHRoaXMu'@;
put 'aXRlbVNpemU9MjQpfSl9KSx0aGlzLnZpZXdSZXBlYXRlcj1uZXcgejBlLHRoaXMuY2RrVmlydHVhbEZvcklucHV0cz17Y2RrVmlydHVhbEZvclRyYWNrQnk6cWU9PnFlfSxoLnNtYXJ0ZW5VcCgpLGJlLmRldGFpbFNlcnZpY2UucHJldmVudEZvY3VzU2Nyb2xsPSEwLHRoaXMuZGF0YWdyaWRF'@;
put 'bGVtZW50UmVmPWJlLmVsLHRoaXMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplPTIwLHRoaXMubXV0YXRpb25DaGFuZ2VzLm9ic2VydmUodGhpcy5kYXRhZ3JpZEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCx7YXR0cmlidXRlRmlsdGVyOlsiY2xhc3MiXSxhdHRyaWJ1dGVPbGRWYWx1'@;
put 'ZTohMH0pLHRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5PW5ldyB3RmUodGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZSx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4LHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxT'@;
put 'Y3JvbGxJbnB1dHMubWF4QnVmZmVyUHgpfWdldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JPZn1zZXQgY2RrVmlydHVhbEZvck9mKGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yT2Y9YSx0aGlz'@;
put 'Lml0ZW1zLmFsbD1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KGEpe3RoaXMuY2RrVmly'@;
put 'dHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGUoKXtyZXR1cm4gdGhpcz8uY2RrVmlydHVhbEZvcklucHV0cz8uY2RrVmlydHVhbEZvclRlbXBsYXRlfXNldCBjZGtWaXJ0'@;
put 'dWFsRm9yVGVtcGxhdGUoYSl7dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZT1hLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5w'@;
put 'dXRzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemU9YzcoYSksdGhpcy51cGRhdGVDZGtWaXJ0dWFsRm9ySW5wdXRz'@;
put 'KCl9Z2V0IGl0ZW1TaXplKCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemV9c2V0IGl0ZW1TaXplKGEpe3RoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemU9YzcoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0'@;
put 'dWFsU2Nyb2xsSW5wdXRzKCl9Z2V0IG1pbkJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHh9c2V0IG1pbkJ1ZmZlclB4KGEpe3RoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWluQnVmZmVyUHg9Yzco'@;
put 'YSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9Z2V0IG1heEJ1ZmZlclB4KCl7cmV0dXJuIHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMubWF4QnVmZmVyUHh9c2V0IG1heEJ1ZmZlclB4KGEpe3RoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxT'@;
put 'Y3JvbGxJbnB1dHMubWF4QnVmZmVyUHg9YzcoYSksdGhpcy51cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl9c2V0IGRhdGFSYW5nZShhKXt0aGlzLnRvdGFsSXRlbXM9YS50b3RhbCx0aGlzLnVwZGF0ZURhdGFSYW5nZShhLnNraXAsYS5kYXRhKX1nZXQgdG90YWxJdGVtcygp'@;
put 'e3JldHVybiB0aGlzLl90b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpe3RoaXMuX3RvdGFsSXRlbXMhPT1hJiYodGhpcy5fdG90YWxJdGVtcz1hLHRoaXMucG9wdWxhdGVQbGFjZWhvbGRlckRhdGEoKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5pbmplY3Rvci5ydW5JbkNvbnRleHQoKCk9'@;
put 'Pnt0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydD10aGlzLmNyZWF0ZVZpcnR1YWxTY3JvbGxWaWV3cG9ydEZvckRhdGFncmlkKHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYsdGhpcy5uZ1pvbmUsdGhpcy5yZW5kZXJlcjIsdGhpcy5kaXJlY3Rpb25hbGl0eSx0aGlzLnNjcm9sbERpc3BhdGNoZXIs'@;
put 'dGhpcy52aWV3cG9ydFJ1bGVyLHRoaXMuZGF0YWdyaWRFbGVtZW50UmVmLHRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5KSx0aGlzLmNka1ZpcnR1YWxGb3I9ZnVuY3Rpb24ga1plKGMsbCxhLGQsaCxmKXtpZigrRmllLm1ham9yPDE5KXJldHVybiBuZXcgQUwoYyxsLGEsZCxoLGYpO3tjb25z'@;
put 'dCB2PURzLmNyZWF0ZSh7cGFyZW50OmZpKGhjKSxwcm92aWRlcnM6W3twcm92aWRlOmt5LHVzZVZhbHVlOmh9XX0pO3JldHVybiBEcy5jcmVhdGUoe3BhcmVudDp2LHByb3ZpZGVyczpbe3Byb3ZpZGU6RGEsdXNlVmFsdWU6Y30se3Byb3ZpZGU6U2wsdXNlVmFsdWU6bH0se3Byb3ZpZGU6UTUs'@;
put 'dXNlVmFsdWU6YX0se3Byb3ZpZGU6YlksdXNlVmFsdWU6ZH0se3Byb3ZpZGU6WW8sdXNlVmFsdWU6Zn0se3Byb3ZpZGU6QUwsdXNlQ2xhc3M6QUx9XX0pLmdldChBTCl9fSh0aGlzLnZpZXdDb250YWluZXJSZWYsdGhpcy50ZW1wbGF0ZVJlZix0aGlzLml0ZXJhYmxlRGlmZmVycyx0aGlzLnZp'@;
put 'ZXdSZXBlYXRlcix0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydCx0aGlzLm5nWm9uZSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQubmdPbkluaXQoKX0pLHRoaXMuZ3JpZFJvbGVFbGVtZW50PXRoaXMuZGF0YWdyaWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcign'@;
put 'W3JvbGU9ImdyaWQiXScpLHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuaXRlbXMuY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5jZGtWaXJ0dWFsRm9yLmNka1ZpcnR1YWxGb3JPZj1hfSksdGhpcy5jZGtWaXJ0dWFsRm9yLmRh'@;
put 'dGFTdHJlYW0uc3Vic2NyaWJlKGE9Pnt0aGlzLnVwZGF0ZUFyaWFSb3dDb3VudChhLmxlbmd0aCl9KSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy50b3BJbmRleD1hfSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQu'@;
put 'cmVuZGVyZWRSYW5nZVN0cmVhbS5zdWJzY3JpYmUoYT0+e3RoaXMucmVuZGVyZWRSYW5nZUNoYW5nZS5lbWl0KGEpfSksdGhpcy5kYXRhZ3JpZC5yZWZyZXNoLnN1YnNjcmliZShhPT57YS5maWx0ZXJzJiZ0aGlzLnNjcm9sbFRvSW5kZXgoMCl9KSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVt'@;
put 'bnNTdGF0ZUNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLnZpZXdSZXBlYXRlci5kZXRhY2goKX0pKX1uZ0RvQ2hlY2soKXt0aGlzLmNka1ZpcnR1YWxGb3I/Lm5nRG9DaGVjaygpLHRoaXMudXBkYXRlQXJpYVJvd0luZGV4ZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuY2RrVmlydHVhbEZvcj8u'@;
put 'bmdPbkRlc3Ryb3koKSx0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydD8ubmdPbkRlc3Ryb3koKSx0aGlzLm11dGF0aW9uQ2hhbmdlcz8uZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PnthLnVuc3Vic2NyaWJlKCl9KX1zY3JvbGxVcChhLGQ9ImF1dG8iKXt0aGlz'@;
put 'LnNjcm9sbFRvSW5kZXgodGhpcy50b3BJbmRleC1hLGQpfXNjcm9sbERvd24oYSxkPSJhdXRvIil7dGhpcy5zY3JvbGxUb0luZGV4KHRoaXMudG9wSW5kZXgrYSxkKX1zY3JvbGxUb0luZGV4KGEsZD0iYXV0byIpe3RoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Py5zY3JvbGxUb0luZGV4KGEs'@;
put 'ZCl9cG9wdWxhdGVQbGFjZWhvbGRlckRhdGEoKXt0aGlzLmNka1ZpcnR1YWxGb3JPZj1BcnJheSh0aGlzLnRvdGFsSXRlbXMpfXVwZGF0ZURhdGFSYW5nZShhLGQpe3RoaXMucGVyc2lzdEl0ZW1zfHx0aGlzLnBvcHVsYXRlUGxhY2Vob2xkZXJEYXRhKCk7Y29uc3QgaD10aGlzLml0ZW1zLmFs'@;
put 'bDtoLnNwbGljZShhLGQubGVuZ3RoLC4uLmQpLHRoaXMuaXRlbXMuYWxsPWh9dXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpe2lmKHRoaXMuY2RrVmlydHVhbEZvcilmb3IoY29uc3QgYSBvZiBPYmplY3Qua2V5cyh0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMpKXRoaXMuY2RrVmlydHVhbEZv'@;
put 'clthXSE9PXRoaXMuY2RrVmlydHVhbEZvcklucHV0c1thXSYmKHRoaXMuY2RrVmlydHVhbEZvclthXT10aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHNbYV0pfXVwZGF0ZUZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMoKXt0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneSYmdGhpcy52aXJ0dWFs'@;
put 'U2Nyb2xsU3RyYXRlZ3kudXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUodGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5pdGVtU2l6ZSx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4LHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3Jv'@;
put 'bGxJbnB1dHMubWF4QnVmZmVyUHgpfXVwZGF0ZUFyaWFSb3dDb3VudChhKXt0aGlzLmdyaWRSb2xlRWxlbWVudD8uc2V0QXR0cmlidXRlKCJhcmlhLXJvd2NvdW50IixhLnRvU3RyaW5nKCkpfXVwZGF0ZUFyaWFSb3dJbmRleGVzKCl7Zm9yKGxldCBhPTA7YTx0aGlzLnZpZXdDb250YWluZXJS'@;
put 'ZWYubGVuZ3RoO2ErKyl7Y29uc3QgZD10aGlzLnZpZXdDb250YWluZXJSZWYuZ2V0KGEpO2Qucm9vdE5vZGVzLmZpbmQoTT0+IkNMUi1ERy1ST1ciPT09TS50YWdOYW1lKT8ucXVlcnlTZWxlY3RvcignW3JvbGU9InJvdyJdJyk/LnNldEF0dHJpYnV0ZSgiYXJpYS1yb3dpbmRleCIsKGQuY29u'@;
put 'dGV4dC5pbmRleCsxKS50b1N0cmluZygpKX19Y3JlYXRlVmlydHVhbFNjcm9sbFZpZXdwb3J0Rm9yRGF0YWdyaWQoYSxkLGgsZix2LE0sRCxaKXtjb25zdCBuZT1ELm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkIiksY2U9RC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0'@;
put 'b3IoIi5kYXRhZ3JpZC10YWJsZSIpLGJlPUQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtcm93cyIpO2xldCBCZT0wLHFlPTA7ZnVuY3Rpb24gcnQoKXtiZS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVkoJHtCZX1weClgLGJlLnN0eWxlLmhlaWdodD1xZS1CZSsi'@;
put 'cHgifWNvbnN0IHB0PWZ1bmN0aW9uIEFaZShjLGwsYSxkLGgsZix2LE0sRCl7cmV0dXJuK0ZpZS5tYWpvcjwxOT9uZXcga3koYyxsLGEsaCxmLHYsTSxEKTpEcy5jcmVhdGUoe3BhcmVudDpmaShoYykscHJvdmlkZXJzOlt7cHJvdmlkZTpKaSx1c2VWYWx1ZTpjfSx7cHJvdmlkZTp4cyx1c2VW'@;
put 'YWx1ZTpsfSx7cHJvdmlkZTpZbyx1c2VWYWx1ZTphfSx7cHJvdmlkZTpFYSx1c2VWYWx1ZTpkfSx7cHJvdmlkZTpVMGUsdXNlVmFsdWU6aH0se3Byb3ZpZGU6Zm0sdXNlVmFsdWU6Zn0se3Byb3ZpZGU6QXksdXNlVmFsdWU6dn0se3Byb3ZpZGU6VEwsdXNlVmFsdWU6TX0se3Byb3ZpZGU6WTBl'@;
put 'LHVzZVZhbHVlOkR9LHtwcm92aWRlOmt5LHVzZUNsYXNzOmt5fV19KS5nZXQoa3kpfSh7bmF0aXZlRWxlbWVudDpuZX0sYSxkLGgsWixmLHYsTSxudWxsKTtyZXR1cm4gcHQuX2NvbnRlbnRXcmFwcGVyPXtuYXRpdmVFbGVtZW50OntzdHlsZTp7c2V0IHRyYW5zZm9ybShkdCl7QmU9dm9pZCAw'@;
put 'PT09ZHQ/MDorL3RyYW5zbGF0ZVlcKChbMC05XSspcHhcKS8uZXhlYyhkdCk/LlsxXSxydCgpfX19fSxwdC5zZXRUb3RhbENvbnRlbnRTaXplPWR0PT57cWU9ZHQsY2Uuc3R5bGUuaGVpZ2h0PWAke3FlfXB4YCxydCgpfSxwdH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8YykoR2UoeHMpLEdlKFE1KSxHZShkZyw0KSxHZShZbyksR2UoRWEpLEdlKFNsKSxHZShEYSksR2UoZm0pLEdlKEF5KSxHZShUTCksR2UoVG0pLEdlKGhnKSxHZShoYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJWaXJ0dWFsU2Nyb2xsIiwi'@;
put 'Il0sWyIiLCJDbHJWaXJ0dWFsU2Nyb2xsIiwiIl1dLGlucHV0czp7cGVyc2lzdEl0ZW1zOltqbi5Ob25lLCJjbHJWaXJ0dWFsUGVyc2lzdEl0ZW1zIiwicGVyc2lzdEl0ZW1zIl0sY2RrVmlydHVhbEZvck9mOltqbi5Ob25lLCJjbHJWaXJ0dWFsUm93c09mIiwiY2RrVmlydHVhbEZvck9mIl0s'@;
put 'Y2RrVmlydHVhbEZvclRyYWNrQnk6W2puLk5vbmUsImNsclZpcnR1YWxSb3dzVHJhY2tCeSIsImNka1ZpcnR1YWxGb3JUcmFja0J5Il0sY2RrVmlydHVhbEZvclRlbXBsYXRlOltqbi5Ob25lLCJjbHJWaXJ0dWFsUm93c1RlbXBsYXRlIiwiY2RrVmlydHVhbEZvclRlbXBsYXRlIl0sY2RrVmly'@;
put 'dHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplOltqbi5Ob25lLCJjbHJWaXJ0dWFsUm93c1RlbXBsYXRlQ2FjaGVTaXplIiwiY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplIl0saXRlbVNpemU6W2puLk5vbmUsImNsclZpcnR1YWxSb3dzSXRlbVNpemUiLCJpdGVtU2l6ZSJdLG1pbkJ1ZmZl'@;
put 'clB4Oltqbi5Ob25lLCJjbHJWaXJ0dWFsUm93c01pbkJ1ZmZlclB4IiwibWluQnVmZmVyUHgiXSxtYXhCdWZmZXJQeDpbam4uTm9uZSwiY2xyVmlydHVhbFJvd3NNYXhCdWZmZXJQeCIsIm1heEJ1ZmZlclB4Il0sZGF0YVJhbmdlOltqbi5Ob25lLCJjbHJWaXJ0dWFsRGF0YVJhbmdlIiwiZGF0'@;
put 'YVJhbmdlIl19LG91dHB1dHM6e3JlbmRlcmVkUmFuZ2VDaGFuZ2U6InJlbmRlcmVkUmFuZ2VDaGFuZ2UifSxmZWF0dXJlczpbZm8oW2RnXSldfSksY30pKCksQWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5maWx0ZXJzPWEsdGhpcy5zb3J0PWQsdGhpcy5wYWdl'@;
put 'PWgsdGhpcy5kZWJvdW5jZXI9Zix0aGlzLmNoYW5nZT10aGlzLmRlYm91bmNlci5jaGFuZ2UucGlwZShMcigoKT0+dGhpcy5zdGF0ZSkpfWdldCBzdGF0ZSgpe2NvbnN0IGE9e307dGhpcy5wYWdlLnNpemU+MCYmKGEucGFnZT17ZnJvbTp0aGlzLnBhZ2UuZmlyc3RJdGVtLHRvOnRoaXMucGFn'@;
put 'ZS5sYXN0SXRlbSxzaXplOnRoaXMucGFnZS5zaXplLGN1cnJlbnQ6dGhpcy5wYWdlLmN1cnJlbnR9KSx0aGlzLnNvcnQuY29tcGFyYXRvciYmKGEuc29ydD10aGlzLnNvcnQuY29tcGFyYXRvciBpbnN0YW5jZW9mIG9PP3tieTp0aGlzLnNvcnQuY29tcGFyYXRvci5wcm9wLHJldmVyc2U6dGhp'@;
put 'cy5zb3J0LnJldmVyc2V9OntieTp0aGlzLnNvcnQuY29tcGFyYXRvcixyZXZlcnNlOnRoaXMuc29ydC5yZXZlcnNlfSk7Y29uc3QgZD10aGlzLmZpbHRlcnMuZ2V0QWN0aXZlRmlsdGVycygpO2lmKGQubGVuZ3RoPjApe2EuZmlsdGVycz1bXTtmb3IoY29uc3QgaCBvZiBkKWEuZmlsdGVycy5w'@;
put 'dXNoKGguc3RhdGU/aC5zdGF0ZTpoKX1yZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoeHIodWcpLHhyKGFPKSx4cihTbSkseHIoWXgpKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxF'@;
put 'bT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuY29sdW1uc1NlcnZpY2U9YSx0aGlzLnN1YnNjcmlwdGlvbnM9W119bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRDZWxsc1N0YXRlKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jZWxscy5jaGFuZ2VzLnN1YnNj'@;
put 'cmliZSgoKT0+e3RoaXMuc2V0Q2VsbHNTdGF0ZSgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRDZWxsc1N0YXRlKCl7dGhpcy5jZWxscy5sZW5ndGg9PT10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3Ro'@;
put 'JiZ0aGlzLmNlbGxzLmZvckVhY2goKGEsZCk9Pnt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbZF0mJmEucmVzZXRTdGF0ZSh0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbZF0udmFsdWUpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdl'@;
put 'KGhnKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1yb3ciXSxbImNsci1kZy1yb3ctZGV0YWlsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihsYShoLGMsNSksbGEoaCxTcCw0KSksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYo'@;
put 'ZC5leHBhbmRhYmxlUm93PWYuZmlyc3QpLHhpKGY9RWkoKSkmJihkLmNlbGxzPWYpfX19KSxjfSkoKSxUbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixuZSxjZSxiZSxFZSxCZSxxZSxydCl7dGhpcy5vcmdhbml6ZXI9YSx0aGlzLml0ZW1zPWQsdGhpcy5leHBh'@;
put 'bmRhYmxlUm93cz1oLHRoaXMuc2VsZWN0aW9uPWYsdGhpcy5yb3dBY3Rpb25TZXJ2aWNlPXYsdGhpcy5zdGF0ZVByb3ZpZGVyPU0sdGhpcy5kaXNwbGF5TW9kZT1ELHRoaXMucmVuZGVyZXI9Wix0aGlzLmRldGFpbFNlcnZpY2U9bmUsdGhpcy5kb2N1bWVudD1jZSx0aGlzLmVsPWJlLHRoaXMu'@;
put 'cGFnZT1FZSx0aGlzLmNvbW1vblN0cmluZ3M9QmUsdGhpcy5rZXlOYXZpZ2F0aW9uPXFlLHRoaXMuem9uZT1ydCx0aGlzLmNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCx0aGlzLmNsckRnU2luZ2xl'@;
put 'QWN0aW9uYWJsZUFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGdE'@;
put 'aXNhYmxlUGFnZUZvY3VzPSExLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBYcighMSksdGhpcy5zaW5nbGVTZWxlY3RlZENoYW5nZWQ9bmV3IFhyKCExKSx0aGlzLnJlZnJlc2g9bmV3IFhyKCExKSx0aGlzLlNFTEVDVElPTl9UWVBFPXBsLHRoaXMuX3N1YnNjcmlwdGlvbnM9W107Y29uc3Qg'@;
put 'cHQ9U3UoKTt0aGlzLnNlbGVjdEFsbElkPSJjbHItZGctc2VsZWN0LWFsbC0iK3B0LG5lLmlkPXB0fWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuaXRlbXMubG9hZGluZ31zZXQgbG9hZGluZyhhKXt0aGlzLml0ZW1zLmxvYWRpbmc9YX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24u'@;
put 'c2VsZWN0aW9uVHlwZT1hP3BsLk11bHRpOnBsLk5vbmUsdGhpcy5zZWxlY3Rpb24udXBkYXRlQ3VycmVudChhLCExKX1zZXQgc2luZ2xlU2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT1wbC5TaW5nbGUsYT90aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPWE6dGhp'@;
put 'cy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSYmKHRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9bnVsbCl9c2V0IGNsckRnUHJlc2VydmVTZWxlY3Rpb24oYSl7dGhpcy5zZWxlY3Rpb24ucHJlc2VydmVTZWxlY3Rpb249YX1zZXQgcm93U2VsZWN0aW9uTW9kZShhKXt0aGlzLnNlbGVjdGlv'@;
put 'bi5yb3dTZWxlY3Rpb25Nb2RlPWF9c2V0IHRyYWNrQnkoYSl7dGhpcy5pdGVtcy50cmFja0J5PWF9Z2V0IGFsbFNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzQWxsU2VsZWN0ZWQoKX1zZXQgYWxsU2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24udG9nZ2xlQWxsKCl9bmdBZnRl'@;
put 'ckNvbnRlbnRJbml0KCl7dGhpcy5pdGVtcy5zbWFydHx8KHRoaXMuaXRlbXMuYWxsPXRoaXMucm93cy5tYXAoZD0+ZC5pdGVtKSk7Y29uc3QgYT10aGlzLnJvd3MuY2hhbmdlcy5waXBlKFYxKGQ9Pnl4KGZhKGQubWFwKGg9PmguaXRlbSkpLEs4KGQubWFwKGg9PmguaXRlbUNoYW5nZXMpKS5w'@;
put 'aXBlKGhtKDApKSkpKTt0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMuaXRlbXMuc21hcnR8fCh0aGlzLml0ZW1zLmFsbD1kKX0pLHRoaXMucm93cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e2ZvcihsZXQgZD10aGlzLl9kaXNwbGF5ZWRSb3dzLmxlbmd0aC0x'@;
put 'O2Q+PTA7ZC0tKXRoaXMuX2Rpc3BsYXllZFJvd3MuZ2V0KGQpLmRlc3Ryb3llZCYmdGhpcy5fZGlzcGxheWVkUm93cy5yZW1vdmUoZCk7aWYodGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMuX2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSksdGhpcy51cGRhdGVEZXRhaWxTdGF0ZSgp'@;
put 'LHRoaXMudmlydHVhbFNjcm9sbCl7Y29uc3QgZD10aGlzLmtleU5hdmlnYXRpb24uZ2V0QWN0aXZlQ2VsbCgpO2QmJnRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9PnRoaXMua2V5TmF2aWdhdGlvbi5zZXRBY3RpdmVDZWxsKGQpKX0pfX0pKX1uZ0FmdGVy'@;
put 'Vmlld0luaXQoKXt0aGlzLmtleU5hdmlnYXRpb24uaW5pdGlhbGl6ZUtleUdyaWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSx0aGlzLnVwZGF0ZURldGFpbFN0YXRlKCksdGhpcy5yZWZyZXNoLmVtaXQodGhpcy5zdGF0ZVByb3ZpZGVyLnN0YXRlKSx0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2go'@;
put 'dGhpcy5zdGF0ZVByb3ZpZGVyLmNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5yZWZyZXNoLmVtaXQoYSkpLHRoaXMuc2VsZWN0aW9uLmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1wbC5TaW5nbGU/dGhpcy5zaW5nbGVTZWxlY3RlZENoYW5nZWQu'@;
put 'ZW1pdChhKTp0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09cGwuTXVsdGkmJnRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoYSl9KSx0aGlzLnBhZ2UuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMua2V5TmF2aWdhdGlvbi5yZXNldEtleUdyaWQoKSx0aGlzLmNsckRnRGlzYWJsZVBh'@;
put 'Z2VGb2N1c3x8dGhpcy5kYXRhZ3JpZFRhYmxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pLHRoaXMuZGlzcGxheU1vZGUudmlldy5zdWJzY3JpYmUoYT0+e2ZvcihsZXQgZD10aGlzLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWREaXNwbGF5'@;
put 'Q29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fY2FsY3VsYXRpb25Sb3dzLmxlbmd0aDtkPjA7ZC0t'@;
put 'KXRoaXMuX2NhbGN1bGF0aW9uUm93cy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmRldGFjaCgpO2E9PT1ReS5ESVNQTEFZPyh0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxl'@;
put 'bWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSksdGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMuX2Rpc3BsYXllZFJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkp'@;
put 'Oih0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUiKSx0aGlzLmNvbHVtbnMuZm9yRWFjaChkPT57dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JF'@;
put 'YWNoKGQ9Pnt0aGlzLl9jYWxjdWxhdGlvblJvd3MuaW5zZXJ0KGQuX3ZpZXcpfSkpfSkpLHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh4ZCh0aGlzLmRvY3VtZW50LmJvZHksImtleWRvd24iKS5zdWJzY3JpYmUoYT0+eyJTaGlmdCI9'@;
put 'PT1hLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMCl9KSx4ZCh0aGlzLmRvY3VtZW50LmJvZHksImtleXVwIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQiPT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQ9ITEpfSkpfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9z'@;
put 'dWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGVBbGxTZWxlY3RlZChhKXthLnByZXZlbnREZWZhdWx0KCksIXRoaXMudmlydHVhbFNjcm9sbCYmKHRoaXMuYWxsU2VsZWN0ZWQ9IXRoaXMuYWxsU2VsZWN0ZWQpfXJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJl'@;
put 'c2l6ZSgpfXVwZGF0ZURldGFpbFN0YXRlKCl7aWYodGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlJiZ0aGlzLmRldGFpbFNlcnZpY2UuaXNPcGVuKXtjb25zdCBhPXRoaXMucm93cy5maW5kKGQ9PnRoaXMuaXRlbXMudHJhY2tCeShkLml0ZW0pPT09dGhpcy5pdGVtcy50cmFja0J5KHRoaXMuZGV0'@;
put 'YWlsU2VydmljZS5zdGF0ZSkpO2E/dGhpcy5kZXRhaWxTZXJ2aWNlLm9wZW4oYS5pdGVtLGEuZGV0YWlsQnV0dG9uLm5hdGl2ZUVsZW1lbnQpOnRoaXMudmlydHVhbFNjcm9sbHx8c2V0VGltZW91dCgoKT0+e3RoaXMuZGV0YWlsU2VydmljZS5jbG9zZSgpfSl9fWRhdGFDaGFuZ2VkKCl7dGhp'@;
put 'cy5pdGVtcy5yZWZyZXNoKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEE3KSxHZShkZyksR2UocXkpLEdlKGVfKSxHZShLeSksR2UoQWRlKSxHZShtRyksR2UoRWEpLEdlKFhmKSxHZSh2cyksR2UoSmkpLEdlKFNtKSxHZShucyksR2Uobk8p'@;
put 'LEdlKFlvKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYobGEoaCxUZGUsNSksbGEoaCxKeSw1KSxsYShoLGZHLDUpLGxhKGgsazcsNCksbGEoaCx4bSw0KSksMiZhKXts'@;
put 'ZXQgZjt4aShmPUVpKCkpJiYoZC52aXJ0dWFsU2Nyb2xsPWYuZmlyc3QpLHhpKGY9RWkoKSkmJihkLml0ZXJhdG9yPWYuZmlyc3QpLHhpKGY9RWkoKSkmJihkLnBsYWNlaG9sZGVyPWYuZmlyc3QpLHhpKGY9RWkoKSkmJihkLmNvbHVtbnM9ZikseGkoZj1FaSgpKSYmKGQucm93cz1mKX19LHZp'@;
put 'ZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKG5hKFBCZSw1LEppKSxuYShGQmUsNSxKaSksbmEoSEJlLDUsRGEpLG5hKE5CZSw1LERhKSxuYShWQmUsNSxEYSksbmEoQkJlLDUsRGEpLG5hKGpCZSw1LERhKSksMiZhKXtsZXQgaDt4aShoPUVpKCkpJiYoZC5kYXRhZ3JpZD1oLmZpcnN0'@;
put 'KSx4aShoPUVpKCkpJiYoZC5kYXRhZ3JpZFRhYmxlPWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLnNjcm9sbGFibGVDb2x1bW5zPWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLl9wcm9qZWN0ZWREaXNwbGF5Q29sdW1ucz1oLmZpcnN0KSx4aShoPUVpKCkpJiYoZC5fcHJvamVjdGVkQ2FsY3VsYXRp'@;
put 'b25Db2x1bW5zPWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLl9kaXNwbGF5ZWRSb3dzPWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLl9jYWxjdWxhdGlvblJvd3M9aC5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmVHIoImRhdGFncmlkLWhvc3QiLCEw'@;
put 'KSgiZGF0YWdyaWQtZGV0YWlsLW9wZW4iLGQuZGV0YWlsU2VydmljZS5pc09wZW4pfSxpbnB1dHM6e2xvYWRpbmdNb3JlSXRlbXM6W2puLk5vbmUsImNsckxvYWRpbmdNb3JlSXRlbXMiLCJsb2FkaW5nTW9yZUl0ZW1zIl0sY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6ImNsckRnU2lu'@;
put 'Z2xlU2VsZWN0aW9uQXJpYUxhYmVsIixjbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWw6ImNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbCIsY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbDoiY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCIsY2xyRGdEaXNhYmxlUGFnZUZv'@;
put 'Y3VzOiJjbHJEZ0Rpc2FibGVQYWdlRm9jdXMiLGxvYWRpbmc6W2puLk5vbmUsImNsckRnTG9hZGluZyIsImxvYWRpbmciXSxzZWxlY3RlZDpbam4uTm9uZSwiY2xyRGdTZWxlY3RlZCIsInNlbGVjdGVkIl0sc2luZ2xlU2VsZWN0ZWQ6W2puLk5vbmUsImNsckRnU2luZ2xlU2VsZWN0ZWQiLCJz'@;
put 'aW5nbGVTZWxlY3RlZCJdLGNsckRnUHJlc2VydmVTZWxlY3Rpb246ImNsckRnUHJlc2VydmVTZWxlY3Rpb24iLHJvd1NlbGVjdGlvbk1vZGU6W2puLk5vbmUsImNsckRnUm93U2VsZWN0aW9uIiwicm93U2VsZWN0aW9uTW9kZSJdLHRyYWNrQnk6W2puLk5vbmUsImNsckRnSXRlbXNUcmFja0J5'@;
put 'IiwidHJhY2tCeSJdfSxvdXRwdXRzOntzZWxlY3RlZENoYW5nZWQ6ImNsckRnU2VsZWN0ZWRDaGFuZ2UiLHNpbmdsZVNlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTaW5nbGVTZWxlY3RlZENoYW5nZSIscmVmcmVzaDoiY2xyRGdSZWZyZXNoIn0sZmVhdHVyZXM6W2ZvKFtlXyxhTyx1ZyxTbSxkZyxB'@;
put 'NyxLeSxxeSxZeCxYZixBZGUsaEcsaGcsbUcsbk9dKV0sbmdDb250ZW50U2VsZWN0b3JzOlVCZSxkZWNsczozNSx2YXJzOjksY29uc3RzOltbImRhdGFncmlkIiwiIl0sWyJkYXRhZ3JpZFRhYmxlIiwiIl0sWyJwcm9qZWN0ZWREaXNwbGF5Q29sdW1ucyIsIiJdLFsiZGlzcGxheWVkUm93cyIs'@;
put 'IiJdLFsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIiwiIl0sWyJjYWxjdWxhdGlvblJvd3MiLCIiXSxbMSwiZGF0YWdyaWQtb3V0ZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZC1pbm5lci13cmFwcGVyIl0sWzEsImRhdGFncmlkIl0sWzEsImRhdGFncmlkLXRhYmxlLXdyYXBwZXIiXSxb'@;
put 'InJvbGUiLCJncmlkIiwidGFiaW5kZXgiLCItMSIsMSwiZGF0YWdyaWQtdGFibGUiXSxbInJvbGUiLCJyb3dncm91cCIsMSwiZGF0YWdyaWQtaGVhZGVyIl0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ciXSxbMSwiZGF0YWdyaWQtcm93LW1hc3RlciIsImRhdGFncmlkLXJvdy1mbGV4'@;
put 'Il0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwzLCJrZXlkb3duLnNwYWNlIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVy'@;
put 'IiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXJvdy1hY3Rpb25zIGRhdGFncmlkLWZpeGVkLWNvbHVt'@;
put 'biIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIl0sWyJyb2xlIiwicHJlc2Vu'@;
put 'dGF0aW9uIiwxLCJkYXRhZ3JpZC1yb3dzIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1sb2FkaW5nIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtc3Bpbm5lciIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSJdLFsxLCJkYXRhZ3JpZC1j'@;
put 'YWxjdWxhdGlvbi1oZWFkZXIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSJdLFsiY2xhc3MiLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNCwibmdJZiJd'@;
put 'LFsxLCJkYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIl0sWzEsImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJ0YWJpbmRleCIsIi0xIiwzLCJuZ01vZGVsQ2hhbmdlIiwiaWQiLCJuZ01vZGVsIl0sWzEsImNsci1jb250cm9sLWxhYmVsIiwiY2xyLWNvbC1udWxs'@;
put 'IiwzLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdy'@;
put 'aWQtcm93LWFjdGlvbnMiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbMSwiZGF0YWdyaWQtcm93LWxvYWRpbmciXSxb'@;
put 'ImNsck1lZGl1bSIsIiJdLFsxLCJkYXRhZ3JpZC1zcGlubmVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oekJlKSxZcigwKSxkZSgxLCJkaXYiLDYpKDIsImRpdiIsNykoMywiZGl2Iiw4LDApKDUsImRpdiIsOSkoNiwiZGl2IiwxMCwxKSg4LCJkaXYiLDExKSg5LCJkaXYi'@;
put 'LDEyKSgxMCwiZGl2IiwxMykoMTEsImRpdiIsMTQpLG10KDEyLFdCZSwzLDEsImRpdiIsMTUpKDEzLFlCZSw0LDEsImRpdiIsMTYpKDE0LEdCZSw0LDEsImRpdiIsMTcpKDE1LCRCZSw0LDEsImRpdiIsMTgpLGhlKCksZGUoMTYsImRpdiIsMTkpLEpsKDE3LG51bGwsMiksaGUoKSgpKCkoKSxk'@;
put 'ZSgxOSwiZGl2IiwyMCksbXQoMjAsS0JlLDUsMSwiY2xyLWRnLXJvdyIsMjEpLEpsKDIxLG51bGwsMyksbXQoMjMscUJlLDUsMSwiY2xyLWRnLXJvdyIsMjEpLFlyKDI0LDEpLG10KDI1LFhCZSwxLDAsImNsci1kZy1wbGFjZWhvbGRlciIsMjIpLGhlKCkoKSgpKCksWXIoMjYsMiksbXQoMjcs'@;
put 'SkJlLDMsMCwiZGl2IiwyMyksaGUoKSxZcigyOCwzKSxoZSgpLGRlKDI5LCJkaXYiLDI0KSgzMCwiZGl2IiwyNSksSmwoMzEsbnVsbCw0KSxoZSgpLEpsKDMzLG51bGwsNSksaGUoKSksMiZhJiYoZmUoMyksZnIoImFyaWEtaGlkZGVuIiwhIWQuZGV0YWlsU2VydmljZS5pc09wZW58fG51bGwp'@;
put 'LGZlKDkpLHhlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5NdWx0aSksZmUoKSx4ZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSxmZSgpLHhlKCJuZ0lmIixkLnJvd0FjdGlvblNl'@;
put 'cnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksZmUoKSx4ZSgibmdJZiIsZC5leHBhbmRhYmxlUm93cy5oYXNFeHBhbmRhYmxlUm93fHxkLmRldGFpbFNlcnZpY2UuZW5hYmxlZCksZmUoNSkseGUoIm5nSWYiLGQubG9hZGluZ01vcmVJdGVtcyksZmUoMykseGUoIm5nSWYiLGQubG9hZGluZ01vcmVJ'@;
put 'dGVtcyksZmUoMikseGUoIm5nSWYiLCFkLnBsYWNlaG9sZGVyKSxmZSgyKSx4ZSgibmdJZiIsZC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbeW8sZHMsQjEsbmwsR3MsTWgsUWYsZkcseG0sdkcsU3AsRW0sRTcsVDddLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IExaZT1jPT5jO2xl'@;
put 'dCBrZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuY29sdW1uc1NlcnZpY2U9ZCx0aGlzLmFsbFNlbGVjdGVkPW5ldyBYcn1nZXQgY2xyQWxsU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5hbGxTZWxlY3RlZC5hc09ic2VydmFibGUoKX1n'@;
put 'ZXQgYWxsSGlkZWFibGVzVmlzaWJsZSgpe3JldHVybiAwPT09dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5maWx0ZXIoYT0+YS52YWx1ZS5oaWRkZW4pLmxlbmd0aH1zZWxlY3RBbGwoKXt0aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZvckVhY2goYT0+dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3Rh'@;
put 'dGVDaGFuZ2UoYSx7aGlkZGVuOiExLGNoYW5nZXM6W1kxLkhJRERFTl19KSksdGhpcy5hbGxTZWxlY3RlZC5uZXh0KCEwKX1oaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihhPT5hLnZhbHVlLmhpZGVhYmxlKX19cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UobnMpLEdlKGhnKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiJdXSxvdXRwdXRzOntjbHJBbGxTZWxlY3RlZDoiY2xyQWxsU2VsZWN0ZWQifSxkZWNs'@;
put 'czoyLHZhcnM6Mixjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJzd2l0Y2gtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxGdCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGQuc2VsZWN0QWxsKCl9KSxMZSgxKSxoZSgpKSwyJmEmJih4ZSgiZGlzYWJsZWQiLGQuYWxsSGlkZWFibGVzVmlzaWJsZSksZmUoKSxJcigiICIsZC5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsLCIgIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxEZGU9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2VydmljZT1kLHRoaXMucG9wb3ZlcklkPVN1KCksdGhpcy5vcGVuU3RhdGU9ITEsdGhpcy5zbWFydFBvc2l0aW9uPXtheGlzOmgxLlZFUlRJQ0FMLHNpZGU6azIuQkVGT1JFLGFu'@;
put 'Y2hvcjpPcy5TVEFSVCxjb250ZW50Ok9zLlNUQVJUfSx0aGlzLnRyYWNrQnlGbj1MWmUsdGhpcy5zdWJzY3JpcHRpb249aC5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT50aGlzLm9wZW5TdGF0ZT1mKX1nZXQgYWxsQ29sdW1uc1Zpc2libGUoKXtyZXR1cm4gdGhpcy5fYWxsQ29sdW1uc1Zpc2li'@;
put 'bGV9c2V0IGFsbENvbHVtbnNWaXNpYmxlKGEpe3RoaXMuX2FsbENvbHVtbnNWaXNpYmxlPWF9Z2V0IGhpZGVhYmxlQ29sdW1uU3RhdGVzKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIoZD0+ZC52YWx1ZS5oaWRlYWJsZSkubWFwKGQ9PmQudmFsdWUpfWdldCBo'@;
put 'YXNPbmx5T25lVmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoLXRoaXMuaGlkZWFibGVDb2x1bW5TdGF0ZXMubGVuZ3RoPT0wJiYxPT09dGhpcy5oaWRlYWJsZUNvbHVtblN0YXRlcy5maWx0ZXIoZD0+IWQuaGlkZGVuKS5sZW5ndGh9bmdP'@;
put 'bkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXRvZ2dsZUNvbHVtblN0YXRlKGEsZCl7Y29uc3QgaD10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGY9PmYudmFsdWU9PT1hKVswXTt0aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZSho'@;
put 'LHtoaWRkZW46ZCxjaGFuZ2VzOltZMS5ISURERU5dfSl9dG9nZ2xlU3dpdGNoUGFuZWwoKXt0aGlzLm9wZW5TdGF0ZT0hdGhpcy5vcGVuU3RhdGV9YWxsQ29sdW1uc1NlbGVjdGVkKCl7dGhpcy5hbGxTZWxlY3RlZEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShucyksR2UoaGcpLEdlKHNjKSl9LGMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tdG9nZ2xlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmbmEoZWplLDUsSmkpLDIm'@;
put 'YSl7bGV0IGg7eGkoaD1FaSgpKSYmKGQuYWxsU2VsZWN0ZWRFbGVtZW50PWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjb2x1bW4tc3dpdGNoLXdyYXBwZXIiLCEwKSgiYWN0aXZlIixkLm9wZW5TdGF0ZSl9LGZlYXR1cmVzOltiZChb'@;
put 'YWddKV0sZGVjbHM6Myx2YXJzOjgsY29uc3RzOltbImFsbFNlbGVjdGVkIiwiIl0sWyJyb2xlIiwiYnV0dG9uIiwidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3IiLCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJidG4iLCJidG4tc20iLCJjb2x1bW4tdG9nZ2xl'@;
put 'LS1hY3Rpb24iXSxbImNsYXNzIiwiY29sdW1uLXN3aXRjaCIsInJvbGUiLCJkaWFsb2ciLCJjZGtUcmFwRm9jdXMiLCIiLDMsImlkIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQ'@;
put 'b3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbInJvbGUiLCJkaWFsb2ciLCJjZGtUcmFwRm9jdXMiLCIiLDEsImNvbHVtbi1zd2l0Y2giLDMsImlkIl0sWzEsInN3aXRjaC1oZWFkZXIiXSxbInRhYmluZGV4IiwiLTEiLDEsImNsci1zci1vbmx5Il0sWyJjbHJQb3BvdmVyQ2xvc2VCdXR0'@;
put 'b24iLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsInRvZ2dsZS1zd2l0Y2gtY2xvc2UtYnV0dG9uIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSIsImFyaWEtaGlkZGVuIiwidHJ1ZSJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJzd2l0Y2gtY29udGVudCIs'@;
put 'Imxpc3QtdW5zdHlsZWQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIiwibmdGb3JUcmFja0J5Il0sWzEsInN3aXRjaC1mb290ZXIiXSxbMywiY2xyQWxsU2VsZWN0ZWQiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiZGlzYWJsZWQiLCJuZ01v'@;
put 'ZGVsIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDEpLExlKDEpLGhlKCksbXQoMixyamUsMTUsOSwiZGl2IiwyKSksMiZhJiYoZnIoImFyaWEtY29udHJvbHMiLGQucG9wb3ZlcklkKSgiYXJpYS1leHBhbmRlZCIs'@;
put 'ZC5vcGVuU3RhdGUpKCJhcmlhLWhhc3BvcHVwIiwibWVudSIpLGZlKCksSXIoIiAiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnBpY2tDb2x1bW5zLCIgIiksZmUoKSx4ZSgiY2xyUG9wb3ZlckNvbnRlbnQiLGQub3BlblN0YXRlKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9u'@;
put 'KSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVzOltscyxOMSxVeSx1cyxkcyxXMSxJZCxCMSxubCxHcyxPeCxEMWUsSHgsRngsa2RlXSxlbmNhcHN1bGF0aW9uOjJ9KSxj'@;
put 'fSkoKSxSZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQ9YSxhJiZhLnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRoaXMuZXhwYW5kYWJsZVJvd3NDb3VudC51bnJlZ2lzdGVyKCl9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHF5LDgpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXX0pLGN9KSgpLGxPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5z'@;
put 'ZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZpY2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT1wbH1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuaGFzSGlkZWFibGVDb2x1'@;
put 'bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlXyksR2UoWGYpLEdlKGhnKSxHZShucykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZm9vdGVyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0'@;
put 'aW9uKGEsZCl7MiZhJiZUcigiZGF0YWdyaWQtZm9vdGVyIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczphamUsZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIl0sWzEsImRhdGFncmlkLWZvb3Rlci1zZWxlY3QiXSxbImNsckNo'@;
put 'ZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiY2hlY2tlZCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIiJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJkYXRhZ3JpZC1mb290ZXItZGVzY3JpcHRpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhvamUpLG10KDAsc2plLDgs'@;
put 'MiwibmctY29udGFpbmVyIiwwKSgxLGNqZSw0LDEsIm5nLWNvbnRhaW5lciIsMCksWXIoMikpLDImYSYmKHhlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5NdWx0aSYmZC5zZWxlY3Rpb24uY3VycmVudC5sZW5ndGg+MCksZmUoKSx4ZSgibmdJ'@;
put 'ZiIsIWQuZGV0YWlsU2VydmljZS5pc09wZW4pKX0sZGVwZW5kZW5jaWVzOlt5byxkcyxXMSxJZCxEZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IGJHPW5ldyBTdCgiQ09MVU1OX1NUQVRFIiksSFplPXtwcm92aWRlOmJHLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gRlplKCl7cmV0dXJu'@;
put 'IG5ldyBlaSh7Y2hhbmdlczpbXX0pfX07bGV0IHF4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wYWdlPWEsdGhpcy5wYWdlU2l6ZU9wdGlvbnNJZD1TdSgpfW5nT25Jbml0KCl7KCF0aGlzLnBhZ2VTaXplT3B0aW9uc3x8MD09PXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0'@;
put 'aCkmJih0aGlzLnBhZ2VTaXplT3B0aW9ucz1bdGhpcy5wYWdlLnNpemVdKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoU20pKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2Utc2l6ZSJdXSxpbnB1dHM6'@;
put 'e3BhZ2VTaXplT3B0aW9uczpbam4uTm9uZSwiY2xyUGFnZVNpemVPcHRpb25zIiwicGFnZVNpemVPcHRpb25zIl0scGFnZVNpemVPcHRpb25zSWQ6W2puLk5vbmUsImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNpemVPcHRpb25zSWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xz'@;
put 'OjUsdmFyczo2LGNvbnN0czpbWzMsImZvciJdLFsxLCJjbHItc2VsZWN0LXdyYXBwZXIiXSxbMywibmdNb2RlbENoYW5nZSIsImlkIiwibmdNb2RlbCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYm'@;
put 'KGxvKCksZGUoMCwibGFiZWwiLDApLFlyKDEpLGhlKCksZGUoMiwiZGl2IiwxKSgzLCJzZWxlY3QiLDIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gYmkoZC5wYWdlLnNpemUsZil8fChkLnBhZ2Uuc2l6ZT1mKSxmfSksbXQoNCx1amUsMiwyLCJvcHRpb24iLDMpLGhl'@;
put 'KCkoKSksMiZhJiYoeGUoImZvciIsZC5wYWdlU2l6ZU9wdGlvbnNJZCksZmUoMyksVHIoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCkseGUoImlkIixkLnBhZ2VTaXplT3B0aW9uc0lkKSxwaSgibmdNb2RlbCIsZC5wYWdlLnNpemUpLGZlKCkseGUoIm5nRm9yT2YiLGQucGFnZVNpemVPcHRp'@;
put 'b25zKSl9LGRlcGVuZGVuY2llczpbbHMsZHMsWWYsR2YsV2YsbmwsR3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGNPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucGFnZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuZGV0YWlsU2VydmljZT1oLHRoaXMuY3Vy'@;
put 'cmVudENoYW5nZWQ9bmV3IFhyKCExKSxhLmFjdGl2YXRlZD0hMH1nZXQgcGFnZVNpemUoKXtyZXR1cm4gdGhpcy5wYWdlLnNpemV9c2V0IHBhZ2VTaXplKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5zaXplPWEpfWdldCB0b3RhbEl0ZW1zKCl7cmV0dXJuIHRoaXMucGFnZS50'@;
put 'b3RhbEl0ZW1zfXNldCB0b3RhbEl0ZW1zKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS50b3RhbEl0ZW1zPWEpfWdldCBsYXN0UGFnZSgpe3JldHVybiB0aGlzLnBhZ2UubGFzdH1zZXQgbGFzdFBhZ2UoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLmxhc3Q9YSl9'@;
put 'Z2V0IGN1cnJlbnRQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50fXNldCBjdXJyZW50UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UuY3VycmVudD1hKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMucGFnZS5maXJzdEl0ZW19Z2V0IGxhc3RJdGVtKCl7cmV0'@;
put 'dXJuIHRoaXMucGFnZS5sYXN0SXRlbX1nZXQgbWlkZGxlUGFnZXMoKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLnBhZ2UuY3VycmVudD4xJiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQtMSksYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KSx0aGlzLnBhZ2UuY3VycmVudDx0aGlzLnBhZ2UubGFz'@;
put 'dCYmYS5wdXNoKHRoaXMucGFnZS5jdXJyZW50KzEpLGF9bmdPbkluaXQoKXt0aGlzLnBhZ2Uuc2l6ZXx8KHRoaXMucGFnZS5zaXplPTEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uPXRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuY3VycmVudENoYW5nZWQuZW1pdChhKSl9bmdP'@;
put 'bkRlc3Ryb3koKXt0aGlzLnBhZ2UucmVzZXRQYWdlU2l6ZSghMCksdGhpcy5fcGFnZVN1YnNjcmlwdGlvbiYmdGhpcy5fcGFnZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXByZXZpb3VzKCl7dGhpcy5wYWdlLnByZXZpb3VzKCl9bmV4dCgpe3RoaXMucGFnZS5uZXh0KCl9dmVyaWZ5Q3Vy'@;
put 'cmVudFBhZ2UoYSl7cGFyc2VJbnQoYS50YXJnZXQudmFsdWUsMTApIT09dGhpcy5wYWdlLmN1cnJlbnQmJihhLnRhcmdldC52YWx1ZT10aGlzLnBhZ2UuY3VycmVudCl9dXBkYXRlQ3VycmVudFBhZ2UoYSl7Y29uc3QgZD1wYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCk7aXNOYU4oZCl8fCh0'@;
put 'aGlzLnBhZ2UuY3VycmVudD1kPDE/MTpkPnRoaXMucGFnZS5sYXN0P3RoaXMucGFnZS5sYXN0OmQpLHRoaXMuY3VycmVudFBhZ2VJbnB1dFJlZi5uYXRpdmVFbGVtZW50LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50LnRvU3RyaW5nKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGMpKEdlKFNtKSxHZShucyksR2UoWGYpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2luYXRpb24iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbGEoaCxxeCw1KSwyJmEpe2xldCBmO3hpKGY9RWko'@;
put 'KSkmJihkLl9wYWdlU2l6ZUNvbXBvbmVudD1mLmZpcnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmbmEoZGplLDUpLDImYSl7bGV0IGg7eGkoaD1FaSgpKSYmKGQuY3VycmVudFBhZ2VJbnB1dFJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0'@;
put 'aW9uKGEsZCl7MiZhJiZUcigicGFnaW5hdGlvbiIsITApfSxpbnB1dHM6e2Rpc2FibGVDdXJyZW50UGFnZUlucHV0Oltqbi5Ob25lLCJjbHJEZ1BhZ2VJbnB1dERpc2FibGVkIiwiZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQiXSxwYWdlU2l6ZTpbam4uTm9uZSwiY2xyRGdQYWdlU2l6ZSIsInBh'@;
put 'Z2VTaXplIl0sdG90YWxJdGVtczpbam4uTm9uZSwiY2xyRGdUb3RhbEl0ZW1zIiwidG90YWxJdGVtcyJdLGxhc3RQYWdlOltqbi5Ob25lLCJjbHJEZ0xhc3RQYWdlIiwibGFzdFBhZ2UiXSxjdXJyZW50UGFnZTpbam4uTm9uZSwiY2xyRGdQYWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7'@;
put 'Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5nZSJ9LG5nQ29udGVudFNlbGVjdG9yczpmamUsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInJlYWRPbmx5IiwiIl0sWyJjdXJyZW50UGFnZUlucHV0IiwiIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwicGFnaW5hdGlvbi1zaXplIiw0LCJuZ0lm'@;
put 'Il0sWzEsInBhZ2luYXRpb24tZGVzY3JpcHRpb24iXSxbImNsYXNzIiwicGFnaW5hdGlvbi1saXN0Iiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tc2l6ZSJdLFsxLCJwYWdpbmF0aW9uLWxpc3QiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tZmlyc3QiLDMsImNsaWNrIiwiZGlz'@;
put 'YWJsZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJkb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLXByZXZpb3VzIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwi'@;
put 'bGVmdCJdLFsidHlwZSIsInRleHQiLCJjbGFzcyIsInBhZ2luYXRpb24tY3VycmVudCBjbHItaW5wdXQiLDMsInNpemUiLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJibHVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIsMywiY2xp'@;
put 'Y2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsidHlwZSIs'@;
put 'InRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIsImNsci1pbnB1dCIsMywia2V5ZG93bi5lbnRlciIsImJsdXIiLCJzaXplIiwidmFsdWUiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oaGplKSxtdCgwLGJq'@;
put 'ZSw1LDIsIm5nLWNvbnRhaW5lciIsMikoMSx5amUsMTQsMTAsIm5nLWNvbnRhaW5lciIsMikpLDImYSYmKHhlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbiksZmUoKSx4ZSgibmdJZiIsZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W3lvLHVzXSxlbmNhcHN1'@;
put 'bGF0aW9uOjJ9KSxjfSkoKSxENz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5kb21BZGFwdGVyPWYsdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZT12LHRoaXMuY29sdW1uc1NlcnZpY2U9TSx0aGlzLmNvbHVt'@;
put 'blN0YXRlPUQsdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBYcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5maWx0ZXJSZW5kZXJTdGVwcyhKZi5DTEVBUl9XSURUSFMpLnN1YnNjcmliZSgoKT0+'@;
put 'dGhpcy5jbGVhcldpZHRoKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Z2V0Q29sdW1uV2lkdGhTdGF0ZSgpe2NvbnN0IGE9dGhpcy5kZXRlY3RTdHJpY3RXaWR0aCgpO3JldHVybnt3aWR0aDp0aGlzLmNvbXB1dGVXaWR0'@;
put 'aChhKSxzdHJpY3RXaWR0aDphfX1zZXRDb2x1bW5TdGF0ZShhKXt0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnNbYV09dGhpcy5jb2x1bW5TdGF0ZX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoPyh0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSYmKHRoaXMucmVzaXplRW1p'@;
put 'dHRlci5lbWl0KGEud2lkdGgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgiKSx0aGlzLndpZHRoU2V0PSExKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYeSksdGhpcy5hdXRvU2V0'@;
put 'PSExKToodGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWHkpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYS53aWR0aCsicHgiKSx0aGlzLndpZHRoU2V0PSEwLHRoaXMuYXV0b1NldD0hMCl9c2V0SGlk'@;
put 'ZGVuKGEpe2EuaGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCR4KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwkeCl9Y2xlYXJXaWR0aCgpe3RoaXMud2lkdGhTZXQmJiF0aGlzLmNvbHVtblJlc2l6ZXJT'@;
put 'ZXJ2aWNlLnJlc2l6ZWRCeSYmdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKSx0aGlzLmF1dG9TZXQmJnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFh5KX1kZXRlY3RTdHJpY3RXaWR0aCgpe3Jl'@;
put 'dHVybiB0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeT90aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLndpZHRoQWZ0ZXJSZXNpemU6dGhpcy5hdXRvU2V0PzA6dGhpcy5kb21BZGFwdGVyLnVzZXJEZWZpbmVkV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1jb21wdXRlV2lk'@;
put 'dGgoYSl7bGV0IGQ9YTtyZXR1cm4gZHx8KGQ9dGhpcy5kb21BZGFwdGVyLnNjcm9sbFdpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpLGR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSxHZShFYSksR2UoQTcpLEdlKG1tKSxHZShkRyks'@;
put 'R2UoaGcpLEdlKGJHKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4iXV0sb3V0cHV0czp7cmVzaXplRW1pdHRlcjoiY2xyRGdDb2x1bW5SZXNpemUifSxmZWF0dXJlczpbZm8oW2RHLEhaZV0pXX0pLGN9KSgpLGpaZT0oKCk9PntjbGFzcyBje3Vz'@;
put 'ZXJEZWZpbmVkV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsQmFyV2lkdGgoYSl7cmV0dXJuIDB9c2Nyb2xsV2lkdGgoYSl7cmV0dXJuIDB9Y29tcHV0ZWRIZWlnaHQoYSl7cmV0dXJuIDB9Y2xpZW50UmVjdChhKXtyZXR1cm57dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjAsd2lkdGg6MCxo'@;
put 'ZWlnaHQ6MH19bWluV2lkdGgoYSl7cmV0dXJuIDB9Zm9jdXMoYSl7fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCB6WmU9Yz0+ZWwoYyk/bmV3'@;
put 'IG1tOm5ldyBqWmU7bGV0IHRfPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLG5lLGNlLGJlLEVlKXt0aGlzLmRhdGFncmlkPWEsdGhpcy5vcmdhbml6ZXI9ZCx0aGlzLml0ZW1zPWgsdGhpcy5wYWdlPWYsdGhpcy5lbD12LHRoaXMucmVuZGVyZXI9TSx0aGlzLnRh'@;
put 'YmxlU2l6ZVNlcnZpY2U9Wix0aGlzLmNvbHVtbnNTZXJ2aWNlPW5lLHRoaXMubmdab25lPWNlLHRoaXMua2V5TmF2aWdhdGlvbj1iZSx0aGlzLmNoYW5nZURldGVjdG9yUmVmPUVlLHRoaXMuX2hlaWdodFNldD0hMSx0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAsdGhpcy5zdWJzY3Jp'@;
put 'cHRpb25zPVtdLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bnVsbCx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChkLmZpbHRlclJlbmRlclN0ZXBzKEpmLkNPTVBVVEVfQ09MVU1OX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNvbXB1dGVI'@;
put 'ZWFkZXJzV2lkdGgoKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGYuc2l6ZUNoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLl9oZWlnaHRTZXQmJnRoaXMucmVzZXREYXRhZ3JpZEhlaWdodCgpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKEQuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKEJl'@;
put 'PT50aGlzLnRvZ2dsZURldGFpbFBhbmUoQmUpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITApKX1uZ09uSW5pdCgpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1N0YXRlQ2hhbmdlLnN1YnNj'@;
put 'cmliZShhPT50aGlzLmNvbHVtblN0YXRlQ2hhbmdlZChhKSksbnVsbD09PXRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnQmJih0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoW2FdKT0+eyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub2Zm'@;
put 'c2V0UGFyZW50fHxhLmlzSW50ZXJzZWN0aW5nKSYmdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGUmJih0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKX0pLHRo'@;
put 'aXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldHVwQ29sdW1ucygpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuaGVhZGVycy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0'@;
put 'dXBDb2x1bW5zKCksdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITEsdGhpcy5zdGFiaWxpemVDb2x1bW5zKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50YWJsZVNpemVTZXJ2aWNlLnRhYmxlPXRoaXMuZWx9bmdBZnRlclZpZXdDaGVja2VkKCl7dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1'@;
put 'bW5zJiZ0aGlzLnN0YWJpbGl6ZUNvbHVtbnMoKSx0aGlzLnNob3VsZENvbXB1dGVIZWlnaHQoKSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5jb21wdXRlRGF0YWdyaWRIZWlnaHQoKX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNj'@;
put 'cmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKX10b2dnbGVEZXRhaWxQYW5lKGEpe3RoaXMuaGVhZGVycyYmKGEmJiF0aGlzLmNvbHVtbnNTZXJ2aWNlLmhhc0NhY2hlKCk/KHRoaXMuY29sdW1uc1NlcnZp'@;
put 'Y2UuY2FjaGUoKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLnZpc2libGVDb2x1bW5zLmZvckVhY2goKGQsaCk9PntoPjAmJnRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQoZC5jb2x1bW5JbmRleCx7Y2hhbmdlczpbWTEuSElEREVOXSxoaWRkZW46YX0pfSkpOmF8fHRoaXMuY29s'@;
put 'dW1uc1NlcnZpY2UucmVzZXRUb0xhc3RDYWNoZSgpKX1zZXR1cENvbHVtbnMoKXt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoYSxkKT0+YS5zZXRDb2x1bW5TdGF0ZShkKSksdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLnNwbGljZSh0aGlzLmhlYWRlcnMubGVuZ3RoKSx0aGlzLmNvbHVtbnNT'@;
put 'ZXJ2aWNlLmNvbHVtbnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGEse2NoYW5nZXM6W1kxLklOSVRJQUxJWkVdLGNvbHVtbkluZGV4OmR9KX0pfXNob3VsZENvbXB1dGVIZWlnaHQoKXtyZXR1cm4hdGhpcy5faGVpZ2h0U2V0JiZ0aGlzLnBh'@;
put 'Z2Uuc2l6ZT4wJiZ0aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGg9PT10aGlzLnBhZ2Uuc2l6ZX1jb21wdXRlRGF0YWdyaWRIZWlnaHQoKXtjb25zdCBhPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCkuaGVpZ2h0O3RoaXMucmVuZGVyZXIuc2V0U3R5bGUo'@;
put 'dGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLGEpLHRoaXMuX2hlaWdodFNldD0hMH1yZXNldERhdGFncmlkSGVpZ2h0KCl7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsIiIpLHRoaXMuX2hlaWdodFNldD0hMX1jb21wdXRlSGVhZGVy'@;
put 'c1dpZHRoKCl7Y29uc3QgYT10aGlzLmhlYWRlcnMubGVuZ3RoLGQ9dGhpcy5oZWFkZXJzLm1hcChmPT5mLmdldENvbHVtbldpZHRoU3RhdGUoKSk7bGV0IGg9ITA7dGhpcy5oZWFkZXJzLmZvckVhY2goKGYsdik9Pntjb25zdCBNPXtjaGFuZ2VzOltZMS5XSURUSF0sLi4uZFt2XX07TS5zdHJp'@;
put 'Y3RXaWR0aHx8KGg9ITEpLGE9PT12KzEmJmgmJihNLnN0cmljdFdpZHRoPTApLHRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlQXQodixNKX0pfWNvbHVtblN0YXRlQ2hhbmdlZChhKXtpZighdGhpcy5oZWFkZXJzfHxudWxsPT1hLmNvbHVtbkluZGV4KXJldHVybjtjb25zdCBk'@;
put 'PWEuY29sdW1uSW5kZXg7YS5jaGFuZ2VzJiZhLmNoYW5nZXMubGVuZ3RoJiZhLmNoYW5nZXMuZm9yRWFjaChoPT57c3dpdGNoKGgpe2Nhc2UgWTEuV0lEVEg6dGhpcy5oZWFkZXJzLmdldChkKS5zZXRXaWR0aChhKSx0aGlzLnJvd3MuZm9yRWFjaChmPT57Zj8uY2VsbHMubGVuZ3RoPT09dGhp'@;
put 'cy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxlbmd0aCYmKGYuY2VsbHMuZ2V0KGQpLnNldFdpZHRoKGEpLGYuZXhwYW5kYWJsZVJvdz8uY2VsbHMuZ2V0KGQpPy5zZXRXaWR0aChhKSl9KTticmVhaztjYXNlIFkxLkhJRERFTjp0aGlzLmhlYWRlcnMuZ2V0KGQpLnNldEhpZGRlbihhKSx0aGlz'@;
put 'LnJvd3MuZm9yRWFjaChmPT57Zi5jZWxscyYmZi5jZWxscy5sZW5ndGgmJihmLmNlbGxzLmdldChkKS5zZXRIaWRkZW4oYSksZi5leHBhbmRhYmxlUm93Py5jZWxscy5nZXQoZCk/LnNldEhpZGRlbihhKSl9KSx0aGlzLnVwZGF0ZUNvbHVtblNlcGFyYXRvcnNWaXNpYmlsaXR5KCksdGhpcy5r'@;
put 'ZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpO2JyZWFrO2Nhc2UgWTEuSU5JVElBTElaRTphLmhpZGVhYmxlJiZhLmhpZGRlbiYmKHRoaXMuaGVhZGVycy5nZXQoZCkuc2V0SGlkZGVuKGEpLHRoaXMucm93cy5mb3JFYWNoKGY9PntmLnNldENlbGxzU3RhdGUoKSxmLmV4cGFuZGFibGVSb3c/'@;
put 'LnNldENlbGxzU3RhdGUoKX0pKX19KX1zdGFiaWxpemVDb2x1bW5zKCl7dGhpcy5jb2x1bW5zU2l6ZXNTdGFibGV8fHRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD4wJiYodGhpcy5vcmdhbml6ZXIucmVzaXplKCksdGhpcy5jb2x1bW5zU2l6ZXNTdGFibGU9ITApfXVwZGF0ZUNvbHVtblNl'@;
put 'cGFyYXRvcnNWaXNpYmlsaXR5KCl7Y29uc3QgYT10aGlzLmRhdGFncmlkLmNvbHVtbnMuZmlsdGVyKGQ9PiFkLmlzSGlkZGVuKTthLmZvckVhY2goKGQsaCk9PntoPT09YS5sZW5ndGgtMT9kLnNob3dTZXBhcmF0b3I9ITE6ZC5zaG93U2VwYXJhdG9yfHwoZC5zaG93U2VwYXJhdG9yPSEwKX0p'@;
put 'fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShUbSksR2UoQTcpLEdlKGRnKSxHZShTbSksR2UoSmkpLEdlKEVhKSxHZShYZiksR2UoaEcpLEdlKGhnKSxHZShZbyksR2Uobk8pLEdlKHhzKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0'@;
put 'b3JzOltbImNsci1kYXRhZ3JpZCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYobGEoaCxENyw0KSxsYShoLEVtLDQpKSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLmhlYWRlcnM9ZikseGkoZj1FaSgpKSYmKGQucm93cz1mKX19LGZlYXR1cmVzOltmbyhbe3By'@;
put 'b3ZpZGU6bW0sdXNlRmFjdG9yeTp6WmUsZGVwczpbb2FdfV0pXX0pLGN9KSgpLFVaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RXMuYWRkSWNvbnMoUE9lLEZPZSxteCxIT2UsRTBlLE5PZSxUMGUsVk9lLEJPZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4g'@;
put 'bmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLF9aZSwkTCxUcyx5ZGUsSWMsTFksSTIsd1plLF9kZSxCeSxOeCxaWV19KSxjfSkoKSxMZGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1zdGFjay1jb250ZW50Il1dfSksY30pKCkseUc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2dlbmVyYXRlZElkPW51bGwsdGhpcy5faWQ9bnVsbH1nZXQgaWQoKXtyZXR1cm4g'@;
put 'dGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPSJzdHJpbmciPT10eXBlb2YgYSYmIiIhPT1hP2E6dGhpcy5fZ2VuZXJhdGVkSWQrIiJ9bmdPbkluaXQoKXt0aGlzLl9nZW5lcmF0ZWRJZD0iY2xyLXN0YWNrLWxhYmVsLSIrU3UoKSx0aGlzLmlkfHwodGhpcy5faWQ9dGhpcy5fZ2VuZXJhdGVk'@;
put 'SWQrIiIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWxhYmVsIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZmcigiaWQiLGQu'@;
put 'aWQpfSxpbnB1dHM6e2lkOiJpZCJ9LG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksWXIoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxPZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMu'@;
put 'cGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5leHBhbmRlZD0hMSx0aGlzLmV4cGFuZGFibGU9ITEsdGhpcy5leHBhbmRlZENoYW5nZT1uZXcgWHIoITEpLHRoaXMuZm9jdXNlZD0hMSx0aGlzLnVuaXF1ZUlkPVN1KCksdGhpcy5fY2hhbmdlZENoaWxkcmVuPTAsdGhpcy5fZnVs'@;
put 'bHlJbml0aWFsaXplZD0hMSx0aGlzLl9jaGFuZ2VkPSExLGEmJmEuYWRkQ2hpbGQoKX1zZXQgc2V0Q2hhbmdlZFZhbHVlKGEpe3RoaXMuX2NoYW5nZWQ9YSx0aGlzLnBhcmVudCYmdGhpcy5fZnVsbHlJbml0aWFsaXplZCYmKGE/dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbisrOnRoaXMu'@;
put 'cGFyZW50Ll9jaGFuZ2VkQ2hpbGRyZW4tLSl9Z2V0IGdldENoYW5nZWRWYWx1ZSgpe3JldHVybiB0aGlzLl9jaGFuZ2VkfHx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW4+MCYmIXRoaXMuZXhwYW5kZWR9Z2V0IG9uU3RhY2tMYWJlbEZvY3VzKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZSYmIXRoaXMu'@;
put 'ZXhwYW5kZWQmJnRoaXMuZm9jdXNlZH1nZXQgbGFiZWxsZWRCeUlkKCl7cmV0dXJuIHRoaXMuc3RhY2tCbG9ja1RpdGxlLmlkfWdldCBoZWFkaW5nTGV2ZWwoKXtyZXR1cm4gdGhpcy5hcmlhTGV2ZWw/dGhpcy5hcmlhTGV2ZWwrIiI6dGhpcy5wYXJlbnQ/IjQiOiIzIn1nZXQgY2FyZXREaXJl'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5leHBhbmRlZD8iZG93biI6InJpZ2h0In1nZXQgcm9sZSgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/ImJ1dHRvbiI6bnVsbH1nZXQgdGFiSW5kZXgoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlPyIwIjpudWxsfWdldCBhcmlhRXhwYW5kZWQoKXtyZXR1cm4g'@;
put 'dGhpcy5leHBhbmRhYmxlP3RoaXMuZXhwYW5kZWQ/InRydWUiOiJmYWxzZSI6bnVsbH1uZ09uSW5pdCgpe3RoaXMuX2Z1bGx5SW5pdGlhbGl6ZWQ9ITB9YWRkQ2hpbGQoKXt0aGlzLmV4cGFuZGFibGU9ITB9dG9nZ2xlRXhwYW5kKGEpe1BkZShhKXx8dGhpcy5leHBhbmRhYmxlJiYodGhpcy5l'@;
put 'eHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkpfWdldFN0YWNrQ2hpbGRyZW5JZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkP2BjbHItc3RhY2stY2hpbGRyZW4tJHt0aGlzLnVuaXF1ZUlkfWA6bnVsbH1wcmV2ZW50RGVmYXVsdElm'@;
put 'Tm90SW5wdXRFdmVudChhKXtQZGUoYSl8fGEucHJldmVudERlZmF1bHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoYywxMiksR2UobnMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWJsb2NrIl1d'@;
put 'LGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgseUcsNSksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5zdGFja0Jsb2NrVGl0bGU9Zi5maXJzdCl9fSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihmcigicm9sZSIsImhlYWRp'@;
put 'bmciKSgiYXJpYS1sZXZlbCIsZC5oZWFkaW5nTGV2ZWwpLFRyKCJzdGFjay1ibG9jayIsITApKCJzdGFjay1ibG9jay1leHBhbmRlZCIsZC5leHBhbmRlZCkoInN0YWNrLWJsb2NrLWV4cGFuZGFibGUiLGQuZXhwYW5kYWJsZSkoInN0YWNrLWJsb2NrLWNoYW5nZWQiLGQuZ2V0Q2hhbmdlZFZh'@;
put 'bHVlKSgib24tZm9jdXMiLGQub25TdGFja0xhYmVsRm9jdXMpKX0saW5wdXRzOntleHBhbmRlZDpbam4uTm9uZSwiY2xyU2JFeHBhbmRlZCIsImV4cGFuZGVkIl0sZXhwYW5kYWJsZTpbam4uTm9uZSwiY2xyU2JFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJdLGFyaWFMZXZlbDpbam4uTm9uZSwi'@;
put 'Y2xyU3RhY2tWaWV3TGV2ZWwiLCJhcmlhTGV2ZWwiXSxzZXRDaGFuZ2VkVmFsdWU6W2puLk5vbmUsImNsclNiTm90aWZ5Q2hhbmdlIiwic2V0Q2hhbmdlZFZhbHVlIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJTYkV4cGFuZGVkQ2hhbmdlIn0sbmdDb250ZW50U2VsZWN0b3JzOk1q'@;
put 'ZSxkZWNsczo5LHZhcnM6OSxjb25zdHM6W1sxLCJzdGFjay1ibG9jay1sYWJlbCIsMywiY2xpY2siLCJrZXl1cC5lbnRlciIsImtleXVwLnNwYWNlIiwia2V5ZG93bi5zcGFjZSIsImZvY3VzIiwiYmx1ciIsImlkIl0sWyJzaGFwZSIsImFuZ2xlIiwiY2xhc3MiLCJzdGFjay1ibG9jay1jYXJl'@;
put 'dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItc3Itb25seSIsNCwibmdJZiJdLFsxLCJzdGFjay12aWV3LWtleSJdLFsxLCJzdGFjay1ibG9jay1jb250ZW50Il0sWzEsInN0YWNrLWNoaWxkcmVuIiwzLCJjbHJFeHBhbmRUcmlnZ2VyIl0sWyJyb2xlIiwicmVnaW9uIiwzLCJoZWlnaHQiLDQs'@;
put 'Im5nSWYiXSxbInNoYXBlIiwiYW5nbGUiLDEsInN0YWNrLWJsb2NrLWNhcmV0Il0sWzEsImNsci1zci1vbmx5Il0sWyJyb2xlIiwicmVnaW9uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oU2plKSxkZSgwLCJkaXYiLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJu'@;
put 'IGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleXVwLmVudGVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVFeHBhbmQoZil9KSgia2V5dXAuc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRvZ2dsZUV4cGFuZChmKX0pKCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5w'@;
put 'cmV2ZW50RGVmYXVsdElmTm90SW5wdXRFdmVudChmKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5mb2N1c2VkPSEwfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQuZm9jdXNlZD0hMX0pLG10KDEseGplLDEsMSwiY2RzLWljb24iLDEpKDIsRWplLDIsMSwic3BhbiIsMiksZGUo'@;
put 'MywiZGl2IiwzKSxZcig0KSxoZSgpLGRlKDUsImRpdiIsNCksWXIoNiwxKSxoZSgpKCksZGUoNywiY2xyLWV4cGFuZGFibGUtYW5pbWF0aW9uIiw1KSxtdCg4LFRqZSwyLDQsImRpdiIsNiksaGUoKSksMiZhJiYoeGUoImlkIixkLnVuaXF1ZUlkKSxmcigicm9sZSIsZC5yb2xlKSgidGFiaW5k'@;
put 'ZXgiLGQudGFiSW5kZXgpKCJhcmlhLWV4cGFuZGVkIixkLmFyaWFFeHBhbmRlZCkoImFyaWEtY29udHJvbHMiLGQuZ2V0U3RhY2tDaGlsZHJlbklkKCkpLGZlKCkseGUoIm5nSWYiLGQuZXhwYW5kYWJsZSksZmUoKSx4ZSgibmdJZiIsZC5nZXRDaGFuZ2VkVmFsdWUpLGZlKDUpLHhlKCJjbHJF'@;
put 'eHBhbmRUcmlnZ2VyIixkLmV4cGFuZGVkKSxmZSgpLHhlKCJuZ0lmIixkLmV4cGFuZGVkKSl9LGRlcGVuZGVuY2llczpbeW8sdXMsTkxdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9ja30iXX0pLGN9KSgpO2Z1bmN0aW9uIFBkZShjKXtjb25zdCBsPWM/LnRhcmdldDty'@;
put 'ZXR1cm4hIWw/LnRhZ05hbWUmJlsiSU5QVVQiLCJURVhUQVJFQSIsIkJVVFRPTiIsIkEiLCJTRUxFQ1QiLCJPUFRJT04iXS5pbmNsdWRlcyhsLnRhZ05hbWUpfWxldCBfRz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c'@;
put 'dTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLXZpZXciXV0sbmdDb250ZW50U2VsZWN0b3JzOmtqZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJzdGFjay12aWV3Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oQWplKSxZcigwKSxkZSgxLCJk'@;
put 'aXYiLDApLFlyKDIsMSksaGUoKSl9LHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9ja30iXX0pLGN9KSgpLFdaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RXMuYWRkSWNvbnMoeHkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxJYyxUcyxfZGVdfSksY30pKCksSTc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VsZWN0YWJsZT0hMSx0aGlzLmVhZ2VyPSEwLHRoaXMuY2hpbGRyZW5GZXRjaGVkPW5l'@;
put 'dyBXbn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgRmRlPXtwcm92aWRlOkk3LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gWVplKGMpe3JldHVybiBj'@;
put 'fHxuZXcgSTd9LGRlcHM6W1tuZXcgSTEsbmV3IGNkLEk3XV19O2xldCBIZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlPWEsdGhpcy5leHBhbmRTZXJ2aWNlPWQsZCYmKHRoaXMuc3Vic2NyaXB0aW9uPWQuZXhwYW5kQ2hhbmdlLnN1YnNjcmli'@;
put 'ZShoPT57IWgmJnRoaXMucGFyZW50JiYhYS5lYWdlciYmYS5yZWN1cnNpb24mJnRoaXMucGFyZW50LmNsZWFyQ2hpbGRyZW4oKX0pKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldEFyaWFSb2xlcygpfXNob3VsZFJlbmRlcigpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1'@;
put 'cnNpb24mJih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcnx8IXRoaXMuZXhwYW5kU2VydmljZXx8dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkKX1nZXRDb250ZXh0KGEpe3JldHVybnskaW1wbGljaXQ6YS5tb2RlbCxjbHJNb2RlbDphfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0'@;
put 'aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLnBhcmVudD8iZ3JvdXAiOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEk3KSxHZShaMSw4KSl9LGMuXHUwMjc1Y21w'@;
put 'PVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmZyKCJyb2xlIixkLnJvbGUpfSxpbnB1dHM6e3BhcmVudDoicGFyZW50IixjaGlsZHJlbjoiY2hpbGRyZW4ifSxkZWNsczox'@;
put 'LHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJm10KDAsT2plLDIsMSwibmctY29udGFpbmVyIiwwKSwyJmEmJnhl'@;
put 'KCJuZ0lmIixkLnNob3VsZFJlbmRlcigpKX0sZGVwZW5kZW5jaWVzOltscyx5byxOMV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyIEd1PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVU5TRUxFQ1RFRD0wXT0iVU5TRUxFQ1RFRCIsY1tjLlNFTEVDVEVEPTFdPSJTRUxFQ1RFRCIsY1tjLklO'@;
put 'REVURVJNSU5BVEU9Ml09IklOREVURVJNSU5BVEUiLGN9KEd1fHx7fSk7Y2xhc3MgTmRle2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nJD1uZXcgZWkoITEpLHRoaXMuc2VsZWN0ZWQ9bmV3IGVpKEd1LlVOU0VMRUNURUQpLHRoaXMuX2xvYWRpbmc9ITF9Z2V0IGxvYWRpbmcoKXtyZXR1cm4g'@;
put 'dGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhsKXt0aGlzLl9sb2FkaW5nPWwsdGhpcy5sb2FkaW5nJC5uZXh0KGwpfWdldCBkaXNhYmxlZCgpe3JldHVybiEoIXRoaXMuX2Rpc2FibGVkJiYhdGhpcy5wYXJlbnQ/LmRpc2FibGVkKX1zZXQgZGlzYWJsZWQobCl7dGhpcy5fZGlzYWJsZWQ9bH1k'@;
put 'ZXN0cm95KCl7dGhpcy5zZWxlY3RlZC5jb21wbGV0ZSgpfXNldFNlbGVjdGVkKGwsYSxkKXtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSxkJiZsIT09R3UuSU5ERVRFUk1JTkFURSYmdGhpcy5jaGlsZHJlbiYmdGhpcy5jaGlsZHJlbi5mb3JFYWNoKGg9'@;
put 'PntoLmRpc2FibGVkfHxoLnNldFNlbGVjdGVkKGwsITEsITApfSksYSYmdGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9dG9nZ2xlU2VsZWN0aW9uKGwpe3RoaXMuZGlzYWJsZWR8fHRoaXMuc2V0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZC52'@;
put 'YWx1ZT09PUd1LlNFTEVDVEVEP0d1LlVOU0VMRUNURUQ6R3UuU0VMRUNURUQsITAsbCl9X3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpe2NvbnN0IGw9dGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRyZW4oKTtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2Vs'@;
put 'ZWN0ZWQubmV4dChsKSx0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX1jb21wdXRlU2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRyZW4oKXtsZXQgbD0hMSxhPSExO2Zvcihjb25zdCBkIG9mIHRoaXMuY2hpbGRyZW4pc3dpdGNoKGQuc2VsZWN0'@;
put 'ZWQudmFsdWUpe2Nhc2UgR3UuSU5ERVRFUk1JTkFURTppZihkLmRpc2FibGVkKWNvbnRpbnVlO3JldHVybiBHdS5JTkRFVEVSTUlOQVRFO2Nhc2UgR3UuU0VMRUNURUQ6aWYobD0hMCxhKXJldHVybiBHdS5JTkRFVEVSTUlOQVRFO2JyZWFrO2RlZmF1bHQ6aWYoYT0hMCxsKXJldHVybiBHdS5J'@;
put 'TkRFVEVSTUlOQVRFfXJldHVybiBsP2E/R3UuVU5TRUxFQ1RFRDpHdS5TRUxFQ1RFRDpHdS5VTlNFTEVDVEVEfX1jbGFzcyB1TyBleHRlbmRzIE5kZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcigpLHRoaXMuZ2V0Q2hpbGRyZW49ZCx0aGlzLmZlYXR1cmVzU2VydmljZT1oLHRoaXMuY2hp'@;
put 'bGRyZW5GZXRjaGVkPSExLHRoaXMuX2NoaWxkcmVuPVtdLHRoaXMubW9kZWw9bCx0aGlzLnBhcmVudD1hfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLmZldGNoQ2hpbGRyZW4oKSx0aGlzLl9jaGlsZHJlbn1zZXQgY2hpbGRyZW4obCl7dGhpcy5fY2hpbGRyZW49bH1kZXN0cm95KCl7dGhp'@;
put 'cy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksc3VwZXIuZGVzdHJveSgpfWNsZWFyQ2hpbGRyZW4oKXt0aGlzLl9jaGlsZHJlbi5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSxkZWxldGUgdGhpcy5fY2hpbGRyZW4sdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITF9'@;
put 'ZmV0Y2hDaGlsZHJlbigpe2lmKHRoaXMuY2hpbGRyZW5GZXRjaGVkKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Q2hpbGRyZW4odGhpcy5tb2RlbCk7IWZ1bmN0aW9uIEdaZShjKXtyZXR1cm4gYyYmImZ1bmN0aW9uIj09dHlwZW9mIGMudGhlbn0obCk/Qk0obCk/KHRoaXMubG9hZGluZz0hMCx0'@;
put 'aGlzLnN1YnNjcmlwdGlvbj1sLnN1YnNjcmliZShhPT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFwQ2hpbGRyZW4oYSksdGhpcy5sb2FkaW5nPSExfSkpOnRoaXMuX2NoaWxkcmVuPWw/dGhpcy53cmFwQ2hpbGRyZW4obCk6W106KHRoaXMubG9hZGluZz0hMCxsLnRoZW4oYT0+e3RoaXMuX2No'@;
put 'aWxkcmVuPXRoaXMud3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKSx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMCx0aGlzLmZlYXR1cmVzU2VydmljZSYmdGhpcy5mZWF0dXJlc1NlcnZpY2UuY2hpbGRyZW5GZXRjaGVkLm5leHQoKX13cmFwQ2hpbGRyZW4obCl7cmV0dXJuIGwubWFw'@;
put 'KGE9Pm5ldyB1TyhhLHRoaXMsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2VydmljZSkpfX1sZXQgVmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1kLHRoaXMuY2RyPWh9bmdPbkNoYW5nZXMoKXts'@;
put 'ZXQgYTthPUFycmF5LmlzQXJyYXkodGhpcy5ub2Rlcyk/dGhpcy5ub2Rlcy5tYXAoZD0+bmV3IHVPKGQsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSk6W25ldyB1Tyh0aGlzLm5vZGVzLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVzU2Vydmlj'@;
put 'ZSldLHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbnx8KHRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbj10aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQucGlwZShobSgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpfSkpLHRoaXMu'@;
put 'ZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbj17dGVtcGxhdGU6dGhpcy50ZW1wbGF0ZSxyb290OmF9fW5nT25EZXN0cm95KCl7dGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uJiZ0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoU2wpLEdlKEk3KSxHZSh4cykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJSZWN1cnNpdmVGb3IiLCIiLCJjbHJSZWN1cnNpdmVGb3JPZiIsIiJdXSxpbnB1dHM6e25vZGVzOltqbi5Ob25lLCJj'@;
put 'bHJSZWN1cnNpdmVGb3JPZiIsIm5vZGVzIl0sZ2V0Q2hpbGRyZW46W2puLk5vbmUsImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIiwiZ2V0Q2hpbGRyZW4iXX0sZmVhdHVyZXM6W3dsXX0pLGN9KSgpLHdHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9mb2N1c1JlcXVlc3Q9'@;
put 'bmV3IFduLHRoaXMuX2ZvY3VzQ2hhbmdlPW5ldyBXbn1nZXQgZm9jdXNSZXF1ZXN0KCl7cmV0dXJuIHRoaXMuX2ZvY3VzUmVxdWVzdC5hc09ic2VydmFibGUoKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Zm9jdXNOb2RlKGEpe2Em'@;
put 'JnRoaXMuX2ZvY3VzUmVxdWVzdC5uZXh0KGEubm9kZUlkKX1icm9hZGNhc3RGb2N1c2VkTm9kZShhKXt0aGlzLmZvY3VzZWROb2RlSWQhPT1hJiYodGhpcy5mb2N1c2VkTm9kZUlkPWEsdGhpcy5fZm9jdXNDaGFuZ2UubmV4dChhKSl9Zm9jdXNQYXJlbnQoYSl7YSYmdGhpcy5mb2N1c05vZGUo'@;
put 'YS5wYXJlbnQpfWZvY3VzRmlyc3RWaXNpYmxlTm9kZSgpe3RoaXMuZm9jdXNOb2RlKHRoaXMucm9vdE5vZGVNb2RlbHMmJnRoaXMucm9vdE5vZGVNb2RlbHNbMF0pfWZvY3VzTGFzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTGFzdFZpc2libGVJblRyZWUoKSl9Zm9j'@;
put 'dXNOb2RlQWJvdmUoYSl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kTm9kZUFib3ZlKGEpKX1mb2N1c05vZGVCZWxvdyhhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQmVsb3coYSkpfWZvY3VzTm9kZVN0YXJ0c1dpdGgoYSxkKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRDbG9zZXN0'@;
put 'Tm9kZVN0YXJ0c1dpdGgoYSxkKSl9ZmluZFNpYmxpbmdzKGEpe3JldHVybiBhLnBhcmVudD9hLnBhcmVudC5jaGlsZHJlbjp0aGlzLnJvb3ROb2RlTW9kZWxzfWZpbmRMYXN0VmlzaWJsZUluTm9kZShhKXtpZighYSlyZXR1cm4gbnVsbDtpZihhLmV4cGFuZGVkJiZhLmNoaWxkcmVuLmxlbmd0'@;
put 'aD4wKXtjb25zdCBkPWEuY2hpbGRyZW47cmV0dXJuIHRoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKGRbZC5sZW5ndGgtMV0pfXJldHVybiBhfWZpbmROZXh0Rm9jdXNhYmxlKGEpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0IGQ9dGhpcy5maW5kU2libGluZ3MoYSksaD1kLmluZGV4T2YoYSk7'@;
put 'cmV0dXJuIGg8ZC5sZW5ndGgtMT9kW2grMV06aD09PWQubGVuZ3RoLTE/dGhpcy5maW5kTmV4dEZvY3VzYWJsZShhLnBhcmVudCk6bnVsbH1maW5kTGFzdFZpc2libGVJblRyZWUoKXtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5y'@;
put 'b290Tm9kZU1vZGVscy5sZW5ndGgmJnRoaXMucm9vdE5vZGVNb2RlbHNbdGhpcy5yb290Tm9kZU1vZGVscy5sZW5ndGgtMV0pfWZpbmROb2RlQWJvdmUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4gMD09PWg/'@;
put 'YS5wYXJlbnQ6aD4wP3RoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKGRbaC0xXSk6bnVsbH1maW5kTm9kZUJlbG93KGEpe3JldHVybiBhP2EuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjA/YS5jaGlsZHJlblswXTp0aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEpOm51bGx9ZmluZERlc2Nl'@;
put 'bmRlbnROb2RlU3RhcnRzV2l0aChhLGQpe2lmKGQuZXhwYW5kZWQmJmQuY2hpbGRyZW4ubGVuZ3RoPjApZm9yKGNvbnN0IGggb2YgZC5jaGlsZHJlbil7Y29uc3QgZj10aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGgpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9ZmluZFNpYmxpbmdOb2Rl'@;
put 'U3RhcnRzV2l0aChhLGQpe2NvbnN0IGg9dGhpcy5maW5kU2libGluZ3MoZCk7Zm9yKGxldCB2PWguaW5kZXhPZihkKSsxO3Y8aC5sZW5ndGg7disrKXtjb25zdCBEPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaFt2XSk7aWYoRClyZXR1cm4gRH1yZXR1cm4gbnVsbH1maW5kUm9vdE5vZGVT'@;
put 'dGFydHNXaXRoKGEsZCl7Zm9yKGNvbnN0IGggb2YgdGhpcy5yb290Tm9kZU1vZGVscyl7aWYoZC5wYXJlbnQmJmQucGFyZW50PT09aCljb250aW51ZTtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kTm9kZVN0YXJ0c1dp'@;
put 'dGgoYSxkKXtyZXR1cm4gZD9kLnRleHRDb250ZW50LnN0YXJ0c1dpdGgoYSk/ZDp0aGlzLmZpbmREZXNjZW5kZW50Tm9kZVN0YXJ0c1dpdGgoYSxkKTpudWxsfWZpbmRDbG9zZXN0Tm9kZVN0YXJ0c1dpdGgoYSxkKXtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPXRoaXMuZmluZERlc2NlbmRl'@;
put 'bnROb2RlU3RhcnRzV2l0aChhLGQpO2lmKGgpcmV0dXJuIGg7Y29uc3QgZj10aGlzLmZpbmRTaWJsaW5nTm9kZVN0YXJ0c1dpdGgoYSxkKTtyZXR1cm4gZnx8KHRoaXMuZmluZFJvb3ROb2RlU3RhcnRzV2l0aChhLGQpfHx0aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGQucGFyZW50KSl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzICRaZSBleHRlbmRzIE5kZXtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMucGFyZW50PWwsbCYmbC5f'@;
put 'YWRkQ2hpbGQodGhpcyksdGhpcy5jaGlsZHJlbj1bXX1kZXN0cm95KCl7dGhpcy5wYXJlbnQmJnRoaXMucGFyZW50Ll9yZW1vdmVDaGlsZCh0aGlzKSxzdXBlci5kZXN0cm95KCl9X2FkZENoaWxkKGwpe3RoaXMuY2hpbGRyZW4ucHVzaChsKX1fcmVtb3ZlQ2hpbGQobCl7Y29uc3QgYT10aGlz'@;
put 'LmNoaWxkcmVuLmluZGV4T2YobCk7YT4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoYSwxKX19bGV0IGZnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5lbD1hfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygiYWN0'@;
put 'aXZlIil9YWN0aXZhdGUoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGljayYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEppKSl9LGMuXHUwMjc1'@;
put 'ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwiY2xyLXRyZWVub2RlLWxpbmsiXV19KSxjfSkoKSxQZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWil7dGhpcy5wbGF0Zm9ybUlkPWEsdGhpcy5mZWF0dXJlc1NlcnZpY2U9aCx0aGlzLmV4cGFuZFNlcnZp'@;
put 'Y2U9Zix0aGlzLmNvbW1vblN0cmluZ3M9dix0aGlzLmZvY3VzTWFuYWdlcj1NLHRoaXMuZWxlbWVudFJlZj1ELHRoaXMuc2VsZWN0ZWRDaGFuZ2U9bmV3IFhyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBYcix0aGlzLlNUQVRFUz1HdSx0aGlzLmlzTW9kZWxMb2FkaW5nPSExLHRoaXMu'@;
put 'bm9kZUlkPVN1KCksdGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9LTEsdGhpcy5za2lwRW1pdENoYW5nZT0hMSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIix0aGlzLnR5cGVBaGVhZEtleUV2ZW50PW5ldyBXbix0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fbW9kZWw9aC5yZWN1'@;
put 'cnNpb24/Wi52aWV3P1oudmlldy5jb250ZXh0LmNsck1vZGVsOlouX2xWaWV3WzhdLmNsck1vZGVsOm5ldyAkWmUoZD9kLl9tb2RlbDpudWxsKSx0aGlzLl9tb2RlbC5ub2RlSWQ9dGhpcy5ub2RlSWR9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX21vZGVsLmRpc2FibGVkfXNldCBkaXNh'@;
put 'YmxlZChhKXt0aGlzLl9tb2RlbC5kaXNhYmxlZD1hfWdldCBzZWxlY3RlZCgpe3JldHVybiB0aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZT0hMCwobnVsbD09PWF8fHR5cGVvZiBhPiJ1IikmJihhPUd1LlVO'@;
put 'U0VMRUNURUQpLCJib29sZWFuIj09dHlwZW9mIGEmJihhPWE/R3UuU0VMRUNURUQ6R3UuVU5TRUxFQ1RFRCksdGhpcy5za2lwRW1pdENoYW5nZT0hMCx0aGlzLl9tb2RlbC5zZXRTZWxlY3RlZChhLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyLHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2Vy'@;
put 'KSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD1hfXNldCBjbHJGb3JUeXBlQWhlYWQoYSl7dGhpcy5fbW9kZWwudGV4dENvbnRl'@;
put 'bnQ9QmRlKGF8fHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50KX1nZXQgYXJpYVNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RhYmxlKCk/dGhpcy5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT1HdS5TRUxFQ1RFRDohIXRoaXMudHJlZU5vZGVMaW5rPy5hY3Rp'@;
put 'dmV8fG51bGx9Z2V0IHRyZWVOb2RlTGluaygpe3JldHVybiB0aGlzLnRyZWVOb2RlTGlua0xpc3QmJnRoaXMudHJlZU5vZGVMaW5rTGlzdC5maXJzdH1nZXQgaXNQYXJlbnQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuY2hpbGRyZW4mJnRoaXMuX21vZGVsLmNoaWxkcmVuLmxlbmd0aD4wfW5nT25J'@;
put 'bml0KCl7dGhpcy5fbW9kZWwuZXhwYW5kZWQ9dGhpcy5leHBhbmRlZCx0aGlzLl9tb2RlbC5kaXNhYmxlZD10aGlzLmRpc2FibGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUoR2woKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJl'@;
put 'KGE9Pnt0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMu'@;
put 'c3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzUmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRl'@;
put 'eChhKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9tb2RlbC5sb2FkaW5nJC5waXBlKGhtKDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlF'@;
put 'dmVudC5waXBlKGhtKDIwMCkpLnN1YnNjcmliZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9tb2RlbC50ZXh0Q29udGVudHx8KHRoaXMu'@;
put 'X21vZGVsLnRleHRDb250ZW50PUJkZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCkpfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kZWwuZGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aXNFeHBhbmRhYmxlKCl7'@;
put 'cmV0dXJuIHR5cGVvZiB0aGlzLmV4cGFuZGFibGU8InUiP3RoaXMuZXhwYW5kYWJsZTohIXRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRhYmxlfHx0aGlzLmlzUGFyZW50fWlzU2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfWZvY3VzVHJlZU5vZGUo'@;
put 'KXtjb25zdCBhPXRoaXMuY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50O2VsKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1hJiYodGhpcy5zZXRUYWJJbmRleCgwKSxhLmZvY3VzKCksYS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGlu'@;
put 'ZToibmVhcmVzdCJ9KSl9YnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigpe3RoaXMuZm9jdXNNYW5hZ2VyLmJyb2FkY2FzdEZvY3VzZWROb2RlKHRoaXMubm9kZUlkKX1vbktleURvd24oYSl7c3dpdGNoKERZKGEpLEEyKGEua2V5KSl7Y2FzZSBRaS5BcnJvd1VwOnRoaXMuZm9jdXNNYW5hZ2Vy'@;
put 'LmZvY3VzTm9kZUFib3ZlKHRoaXMuX21vZGVsKTticmVhaztjYXNlIFFpLkFycm93RG93bjp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk7YnJlYWs7Y2FzZSBRaS5BcnJvd1JpZ2h0OnRoaXMuZXhwYW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKTticmVhaztjYXNl'@;
put 'IFFpLkFycm93TGVmdDp0aGlzLmNvbGxhcHNlT3JGb2N1c1BhcmVudCgpO2JyZWFrO2Nhc2UgUWkuSG9tZTphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNGaXJzdFZpc2libGVOb2RlKCk7YnJlYWs7Y2FzZSBRaS5FbmQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMu'@;
put 'Zm9jdXNNYW5hZ2VyLmZvY3VzTGFzdFZpc2libGVOb2RlKCk7YnJlYWs7Y2FzZSBRaS5FbnRlcjp0aGlzLnRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKTticmVhaztjYXNlIFFpLlNwYWNlOmNhc2UgUWkuU3BhY2ViYXI6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlRXhwYW5k'@;
put 'T3JUcmlnZ2VyRGVmYXVsdCgpO2JyZWFrO2RlZmF1bHQ6aWYodGhpcy5fbW9kZWwudGV4dENvbnRlbnQmJmZ1bmN0aW9uIE56ZShjKXtjb25zdCBsPWMua2V5O3JldHVybiBsLnRvTG93ZXJDYXNlKCkhPT1sLnRvVXBwZXJDYXNlKCl8fGw+PSIwIiYmbDw9IjkifShhKSlyZXR1cm4gdGhpcy50'@;
put 'eXBlQWhlYWRLZXlCdWZmZXIrPWEua2V5LHZvaWQgdGhpcy50eXBlQWhlYWRLZXlFdmVudC5uZXh0KHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyKX10aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn1zZXRUYWJJbmRleChhKXt0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD1hLHRoaXMuY29u'@;
put 'dGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLGEudG9TdHJpbmcoKSl9Y2hlY2tUYWJJbmRleChhKXtlbCh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0'@;
put 'VGFiSW5kZXgoLTEpfXRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5pc0V4cGFuZGFibGUoKSYmIXRoaXMuaXNTZWxlY3RhYmxlKCk/dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkOnRoaXMudHJpZ2dlckRlZmF1bHRB'@;
put 'Y3Rpb24oKSl9ZXhwYW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2Vydmlj'@;
put 'ZS5leHBhbmRlZD0hMCkpfWNvbGxhcHNlT3JGb2N1c1BhcmVudCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkP3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMTp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c1BhcmVudCh0aGlzLl9tb2RlbCkpfXRyaWdnZXJEZWZhdWx0QWN0aW9u'@;
put 'KCl7dGhpcy50cmVlTm9kZUxpbms/dGhpcy50cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKShHZShvYSksR2UoYywxMiksR2UoSTcpLEdlKFoxKSxHZShucyksR2Uod0cpLEdlKEppKSxHZShEcykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdHJlZS1ub2RlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxh'@;
put 'KGgsZmcsNCksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC50cmVlTm9kZUxpbmtMaXN0PWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZuYShQamUsNyxKaSksMiZhKXtsZXQgaDt4aShoPUVpKCkpJiYoZC5jb250ZW50Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6'@;
put 'NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJjbHItdHJlZS1ub2RlIiwhMCkoImRpc2FibGVkIixkLl9tb2RlbC5kaXNhYmxlZCl9LGlucHV0czp7ZXhwYW5kYWJsZTpbam4uTm9uZSwiY2xyRXhwYW5kYWJsZSIsImV4cGFuZGFibGUiXSxkaXNhYmxlZDpbam4uTm9uZSwi'@;
put 'Y2xyRGlzYWJsZWQiLCJkaXNhYmxlZCJdLHNlbGVjdGVkOltqbi5Ob25lLCJjbHJTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6W2puLk5vbmUsImNsckV4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJGb3JUeXBlQWhlYWQ6ImNsckZvclR5cGVBaGVhZCJ9LG91dHB1dHM6e3NlbGVjdGVk'@;
put 'Q2hhbmdlOiJjbHJTZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckV4cGFuZGVkQ2hhbmdlIn0sZmVhdHVyZXM6W2ZvKFtGZGUsWjEse3Byb3ZpZGU6a3gsdXNlRXhpc3Rpbmc6WjF9XSldLG5nQ29udGVudFNlbGVjdG9yczpIamUsZGVjbHM6MTIsdmFyczoxMixjb25zdHM6W1si'@;
put 'Y29udGVudENvbnRhaW5lciIsIiJdLFsidHJlZW5vZGVDb250ZW50IiwiIl0sWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlkb3duIiwiZm9jdXMiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUi'@;
put 'LCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImRpc2FibGVkIiwiY2xpY2siLCJmb2N1cyIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNoZWNr'@;
put 'Ym94LXdyYXBwZXIgY2xyLXRyZWVub2RlLWNoZWNrYm94Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1jb250ZW50IiwzLCJtb3VzZXVwIiw0LCJuZ0lmIl0sWzEsImNsci10cmVlbm9kZS1jaGlsZHJlbiJdLFszLCJwYXJlbnQiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5'@;
put 'cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImNsaWNrIiwiZm9jdXMiLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmdsZSIsMSwiY2xyLXRyZWVub2RlLWNhcmV0LWljb24iXSxbMSwiY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIl0s'@;
put 'WzEsImNsci10cmVlbm9kZS1zcGlubmVyIiwic3Bpbm5lciJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBlciIsImNsci10cmVlbm9kZS1jaGVja2JveCJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLWNoZWNrYm94IiwzLCJj'@;
put 'aGFuZ2UiLCJmb2N1cyIsImlkIiwiZGlzYWJsZWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsMywiZm9yIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXRyZWVub2RlLWNvbnRlbnQiLDMsIm1vdXNldXAiXSxbImNsYXNzIiwiY2xy'@;
put 'LXNyLW9ubHkiLDQsIm5nSWYiXSxbMSwiY2xyLXNyLW9ubHkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9TG4oKTtsbyhGamUpLGRlKDAsImRpdiIsMiwwKSxGdCgia2V5ZG93biIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQub25LZXlEb3duKHYpKX0p'@;
put 'KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoaCksQ3QoZC5icm9hZGNhc3RGb2N1c09uQ29udGFpbmVyKCkpfSksbXQoMixOamUsMiwyLCJidXR0b24iLDMpKDMsVmplLDIsMCwiZGl2Iiw0KSg0LEJqZSw0LDYsImRpdiIsNSkoNSxqamUsMiwxLCJkaXYiLDYpKDYsVWplLDIsMSwibmct'@;
put 'dGVtcGxhdGUiLG51bGwsMSxfdSksaGUoKSxkZSg4LCJkaXYiLDcpLFlyKDkpLFlyKDEwLDEpLEd0KDExLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiw4KSxoZSgpfTImYSYmKFRyKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmRpc2FibGVkKSxmcigiYXJpYS1kaXNhYmxlZCIsZC5k'@;
put 'aXNhYmxlZCkoImFyaWEtZXhwYW5kZWQiLGQuaXNFeHBhbmRhYmxlKCk/ZC5leHBhbmRlZDpudWxsKSgiYXJpYS1zZWxlY3RlZCIsZC5hcmlhU2VsZWN0ZWQpLGZlKDIpLHhlKCJuZ0lmIixkLmlzRXhwYW5kYWJsZSgpJiYhZC5pc01vZGVsTG9hZGluZyYmIWQuZXhwYW5kU2VydmljZS5sb2Fk'@;
put 'aW5nKSxmZSgpLHhlKCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksZmUoKSx4ZSgibmdJZiIsZC5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSksZmUoKSx4ZSgibmdJZiIsIWQuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLGZlKDMpLHhlKCJA'@;
put 'dG9nZ2xlQ2hpbGRyZW5BbmltIixkLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIiksZnIoInJvbGUiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24/Imdyb3VwIjpudWxsKSxmZSgzKSx4ZSgicGFyZW50IixkLl9tb2Rl'@;
put 'bCkpfSxkZXBlbmRlbmNpZXM6W3lvLE4xLHVzLEhkZV0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbX2goInRvZ2dsZUNoaWxkcmVuQW5pbSIsW3J1KCJjb2xsYXBzZWQgPT4gZXhwYW5kZWQiLFtjcyh7aGVpZ2h0OjB9KSxNMCgyMDAsY3Moe2hlaWdodDoiKiJ9KSldKSxydSgi'@;
put 'ZXhwYW5kZWQgPT4gY29sbGFwc2VkIixbY3Moe2hlaWdodDoiKiJ9KSxNMCgyMDAsY3Moe2hlaWdodDowfSkpXSksQ0woImV4cGFuZGVkIixjcyh7aGVpZ2h0OiIqIiwib3ZlcmZsb3cteSI6InZpc2libGUifSkpLENMKCJjb2xsYXBzZWQiLGNzKHtoZWlnaHQ6MH0pKV0pXX19KSxjfSkoKTtm'@;
put 'dW5jdGlvbiBCZGUoYyl7cmV0dXJuIGMudG9Mb2NhbGVMb3dlckNhc2UoKS50cmltKCl9bGV0IFRoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmZlYXR1cmVzU2VydmljZT1hLHRoaXMuZm9jdXNNYW5hZ2VyU2VydmljZT1kLHRoaXMucmVuZGVyZXI9aCx0aGlz'@;
put 'LmVsPWYsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlPSExO2NvbnN0IE09di5ydW5PdXRzaWRlQW5ndWxhcigoKT0+eGQoZi5uYXRpdmVFbGVtZW50LCJmb2N1c2luIikuc3Vic2NyaWJlKEQ9PntELnRhcmdldD09PWYubmF0aXZlRWxlbWVudCYmKGQuZm9j'@;
put 'dXNGaXJzdFZpc2libGVOb2RlKCksaC5yZW1vdmVBdHRyaWJ1dGUoZi5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIpKX0pKTt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChNKX1zZXQgbGF6eShhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcj0hYX1nZXQgaXNNdWx0aVNlbGVjdGFibGUoKXty'@;
put 'ZXR1cm4gdGhpcy5faXNNdWx0aVNlbGVjdGFibGV9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRSb290Tm9kZXMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnJvb3ROb2Rlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0TXVsdGlTZWxlY3RhYmxlKCksdGhpcy5z'@;
put 'ZXRSb290Tm9kZXMoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0TXVsdGlTZWxlY3RhYmxlKCl7dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSYmdGhpcy5yb290Tm9kZXMubGVuZ3RoPjA/KHRoaXMuX2lz'@;
put 'TXVsdGlTZWxlY3RhYmxlPSEwLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIikpOih0aGlzLl9pc011bHRpU2VsZWN0YWJsZT0hMSx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVs'@;
put 'Lm5hdGl2ZUVsZW1lbnQsImFyaWEtbXVsdGlzZWxlY3RhYmxlIikpfXNldFJvb3ROb2Rlcygpe3RoaXMuZm9jdXNNYW5hZ2VyU2VydmljZS5yb290Tm9kZU1vZGVscz10aGlzLnJvb3ROb2Rlcy5tYXAoYT0+YS5fbW9kZWwpLmZpbHRlcihhPT4hYS5wYXJlbnQpfX1yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShJNyksR2Uod0cpLEdlKEVhKSxHZShKaSksR2UoWW8pKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRyZWUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbGEoaCxQZCw0'@;
put 'KSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLnJvb3ROb2Rlcz1mKX19LGhvc3RBdHRyczpbInRhYmluZGV4IiwiMCJdLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZmcigicm9sZSIsInRyZWUiKX0saW5wdXRzOntsYXp5Oltqbi5Ob25lLCJjbHJMYXp5Iiwi'@;
put 'bGF6eSJdfSxmZWF0dXJlczpbZm8oW0ZkZSx3R10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMywiY2hpbGRyZW4iLDQsIm5nSWYiXSxbMywiY2hpbGRyZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLFlyKDApLG10KDEsWmpl'@;
put 'LDEsMSwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6W3lvLEhkZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWFplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtF'@;
put 'cy5hZGRJY29ucyh4eSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLFRzLExZXX0pLGN9KSgpLEpaZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltVWmUsV1plLFhaZV19KSxjfSkoKTtjb25zdCBRWmU9WyJpbmZvIiwid2FybmluZyIsImRhbmdlciIsInN1Y2Nlc3MiLCJuZXV0cmFsIiwi'@;
put 'dW5rbm93biIsImxvYWRpbmciXTtsZXQgQ0c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmRlZmF1bHRJY29uU2hhcGU9ImluZm8tc3RhbmRhcmQiLHRoaXMuX2FsZXJ0SWNvblNoYXBlPSIiLHRoaXMuX2FsZXJ0VHlwZT0iaW5mbyJ9Z2V0'@;
put 'IGFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLl9hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXtRWmUuaW5kZXhPZihhKT4tMSYmKHRoaXMuX2FsZXJ0VHlwZT1hKX1nZXQgYWxlcnRJY29uU2hhcGUoKXtyZXR1cm4iIj09PXRoaXMuX2FsZXJ0SWNvblNoYXBlP3RoaXMuaWNvbkluZm9Gcm9tVHlw'@;
put 'ZSh0aGlzLl9hbGVydFR5cGUpLnNoYXBlOnRoaXMuX2FsZXJ0SWNvblNoYXBlfXNldCBhbGVydEljb25TaGFwZShhKXthP2EhPT10aGlzLl9hbGVydEljb25TaGFwZSYmKHRoaXMuX2FsZXJ0SWNvblNoYXBlPWEpOnRoaXMuX2FsZXJ0SWNvblNoYXBlPSIifWdldCBhbGVydEljb25UaXRsZSgp'@;
put 'e3JldHVybiB0aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS50aXRsZX1pY29uSW5mb0Zyb21UeXBlKGEpe2NvbnN0IGQ9e3NoYXBlOiIiLGNzc0NsYXNzOiIiLHRpdGxlOiIifTtzd2l0Y2goYSl7Y2FzZSJ3YXJuaW5nIjpkLnNoYXBlPSJ3YXJuaW5nLXN0YW5kYXJkIixk'@;
put 'LmNzc0NsYXNzPSJhbGVydC13YXJuaW5nIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLndhcm5pbmc7YnJlYWs7Y2FzZSJkYW5nZXIiOmQuc2hhcGU9ImVycm9yLXN0YW5kYXJkIixkLmNzc0NsYXNzPSJhbGVydC1kYW5nZXIiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtl'@;
put 'eXMuZGFuZ2VyO2JyZWFrO2Nhc2Uic3VjY2VzcyI6ZC5zaGFwZT0ic3VjY2Vzcy1zdGFuZGFyZCIsZC5jc3NDbGFzcz0iYWxlcnQtc3VjY2VzcyIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdWNjZXNzO2JyZWFrO2Nhc2UibmV1dHJhbCI6ZC5zaGFwZT0ibm90ZSIsZC5jc3ND'@;
put 'bGFzcz0iYWxlcnQtbmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5uZXV0cmFsO2JyZWFrO2Nhc2UidW5rbm93biI6ZC5zaGFwZT0iaGVscCIsZC5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy51bmtub3duO2Jy'@;
put 'ZWFrO2Nhc2UibG9hZGluZyI6ZC5zaGFwZT0ibG9hZGluZyIsZC5jc3NDbGFzcz0iYWxlcnQtbmV1dHJhbCIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy51bmtub3duO2JyZWFrO2RlZmF1bHQ6ZC5zaGFwZT10aGlzLmRlZmF1bHRJY29uU2hhcGUsZC5jc3NDbGFzcz0iYWxlcnQt'@;
put 'aW5mbyIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5pbmZvfXJldHVybiBkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihucykpfSxjLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGRP'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9jaGFuZ2U9bmV3IFdufWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe2EhPT10aGlzLl9jdXJyZW50'@;
put 'JiYodGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpKX1nZXQgYWN0aXZlQWxlcnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzJiZ0aGlzLmFsbEFsZXJ0cy5maWx0ZXIoYT0+IWEuX2Nsb3NlZCl9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0cyYm'@;
put 'dGhpcy5hY3RpdmVBbGVydHNbdGhpcy5jdXJyZW50XX1zZXQgY3VycmVudEFsZXJ0KGEpe3RoaXMuY3VycmVudD10aGlzLmFjdGl2ZUFsZXJ0cy5pbmRleE9mKGEpfWdldCBjb3VudCgpe3JldHVybiB0aGlzLmFjdGl2ZUFsZXJ0cyYmdGhpcy5hY3RpdmVBbGVydHMubGVuZ3RofHwwfW1hbmFn'@;
put 'ZShhKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmFsbEFsZXJ0cz1hLHRoaXMuY3VycmVudD0ibnVtYmVyIj09dHlwZW9mIHRoaXMuX2N1cnJlbnQ/dGhpcy5fY3VycmVudDowLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudCks'@;
put 'dGhpcy5zdWJzY3JpcHRpb249dGhpcy5hbGxBbGVydHMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmN1cnJlbnQ+PXRoaXMuYWxsQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudD1NYXRoLm1heCgwLHRoaXMuYWxsQWxlcnRzLmxlbmd0aC0xKSl9KX1uZXh0KCl7dGhpcy5fY3VycmVu'@;
put 'dD10aGlzLmN1cnJlbnQ9PT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgtMT8wOnRoaXMuY3VycmVudCsxLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpfXByZXZpb3VzKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ9MD09PXRoaXMuY3VycmVu'@;
put 'dD90aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgtMTp0aGlzLmN1cnJlbnQtMSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9b3BlbigpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJih0aGlzLmN1cnJlbnRBbGVydHx8KHRoaXMuX2N1cnJlbnQ9MCksdGhpcy5fY2hhbmdl'@;
put 'Lm5leHQodGhpcy5fY3VycmVudCkpfWNsb3NlKGEpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJihhJiYodGhpcy5fY3VycmVudD1NYXRoLm1heCgwLHRoaXMuY3VycmVudC0xKSksdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCkpfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlw'@;
put 'dGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWHg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1'@;
put 'Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5pY29uU2VydmljZT1hLHRoaXMuY2RyPWQsdGhpcy5tdWx0aUFsZXJ0U2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMucmVuZGVyZXI9dix0aGlzLmhvc3RFbGVtZW50PU0sdGhpcy5pc1NtYWxsPSExLHRoaXMuY2xvc2FibGU9ITAsdGhp'@;
put 'cy5pc0FwcExldmVsPSExLHRoaXMuY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbCx0aGlzLl9jbG9zZWRDaGFuZ2VkPW5ldyBYcighMSksdGhpcy5fY2xvc2VkPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0'@;
put 'aGlzLl9pc0xpZ2h0d2VpZ2h0PSExfWdldCBpc0xpZ2h0d2VpZ2h0KCl7cmV0dXJuIHRoaXMuX2lzTGlnaHR3ZWlnaHR9c2V0IGlzTGlnaHR3ZWlnaHQoYSl7dGhpcy5faXNMaWdodHdlaWdodD1hLHRoaXMuY29uZmlnQWxlcnRUeXBlKHRoaXMuX29yaWdBbGVydFR5cGUpfWdldCBhbGVydFR5'@;
put 'cGUoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5hbGVydFR5cGV9c2V0IGFsZXJ0VHlwZShhKXt0aGlzLl9vcmlnQWxlcnRUeXBlPWEsdGhpcy5jb25maWdBbGVydFR5cGUoYSl9c2V0IGFsZXJ0SWNvblNoYXBlKGEpe3RoaXMuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGU9YX1zZXQgY2xv'@;
put 'c2VkKGEpe2EmJiF0aGlzLl9jbG9zZWQ/dGhpcy5jbG9zZSgpOiFhJiZ0aGlzLl9jbG9zZWQmJnRoaXMub3BlbigpfWdldCBhbGVydENsYXNzKCl7cmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZSkuY3NzQ2xhc3N9Z2V0'@;
put 'IGhpZGRlbigpe3JldHVybiB0aGlzLl9oaWRkZW59c2V0IGhpZGRlbihhKXthIT09dGhpcy5faGlkZGVuJiYodGhpcy5faGlkZGVuPWEsdGhpcy5faGlkZGVuP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCJhbGVydC1oaWRkZW4iKTp0aGlz'@;
put 'LnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwiYWxlcnQtaGlkZGVuIiksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1uZ09uSW5pdCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubXVsdGlB'@;
put 'bGVydFNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmhpZGRlbj10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydCE9PXRoaXN9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWNvbmZpZ0FsZXJ0'@;
put 'VHlwZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZT1hfW9wZW4oKXt0aGlzLl9jbG9zZWQ9ITEsdGhpcy5tdWx0aUFsZXJ0U2VydmljZSYmdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5vcGVuKCksdGhpcy5fY2xvc2VkQ2hhbmdlZC5lbWl0KCExKX1jbG9zZSgpe2lmKCF0aGlzLmNsb3Nh'@;
put 'YmxlKXJldHVybjtjb25zdCBhPXRoaXMubXVsdGlBbGVydFNlcnZpY2U/LmN1cnJlbnRBbGVydD09PXRoaXM7dGhpcy5fY2xvc2VkPSEwLHRoaXMubXVsdGlBbGVydFNlcnZpY2U/LmFjdGl2ZUFsZXJ0cyYmdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jbG9zZShhKSx0aGlzLl9jbG9zZWRDaGFu'@;
put 'Z2VkLmVtaXQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShDRyksR2UoeHMpLEdlKGRPLDgpLEdlKG5zKSxHZShFYSksR2UoSmkpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0Il1dLGlucHV0czp7'@;
put 'aXNTbWFsbDpbam4uTm9uZSwiY2xyQWxlcnRTaXplU21hbGwiLCJpc1NtYWxsIl0sY2xvc2FibGU6W2puLk5vbmUsImNsckFsZXJ0Q2xvc2FibGUiLCJjbG9zYWJsZSJdLGlzQXBwTGV2ZWw6W2puLk5vbmUsImNsckFsZXJ0QXBwTGV2ZWwiLCJpc0FwcExldmVsIl0sY2xyQ2xvc2VCdXR0b25B'@;
put 'cmlhTGFiZWw6ImNsckNsb3NlQnV0dG9uQXJpYUxhYmVsIixpc0xpZ2h0d2VpZ2h0Oltqbi5Ob25lLCJjbHJBbGVydExpZ2h0d2VpZ2h0IiwiaXNMaWdodHdlaWdodCJdLGFsZXJ0VHlwZTpbam4uTm9uZSwiY2xyQWxlcnRUeXBlIiwiYWxlcnRUeXBlIl0sYWxlcnRJY29uU2hhcGU6W2puLk5v'@;
put 'bmUsImNsckFsZXJ0SWNvbiIsImFsZXJ0SWNvblNoYXBlIl0sY2xvc2VkOltqbi5Ob25lLCJjbHJBbGVydENsb3NlZCIsImNsb3NlZCJdfSxvdXRwdXRzOntfY2xvc2VkQ2hhbmdlZDoiY2xyQWxlcnRDbG9zZWRDaGFuZ2UifSxmZWF0dXJlczpbZm8oW0NHXSldLG5nQ29udGVudFNlbGVjdG9y'@;
put 'czp5YSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJhbGVydCIsMywibmdDbGFzcyIsImFsZXJ0LXNtIiwiYWxlcnQtbGlnaHR3ZWlnaHQiLCJhbGVydC1hcHAtbGV2ZWwiLDQsIm5nSWYiXSxbMSwiYWxlcnQiLDMsIm5nQ2xhc3MiXSxbMSwiYWxlcnQtaXRlbXMiXSxbInR5cGUi'@;
put 'LCJidXR0b24iLCJjbGFzcyIsImNsb3NlIiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksbXQoMCxZamUsNCw4LCJkaXYiLDAp'@;
put 'KSwyJmEmJnhlKCJuZ0lmIiwhZC5fY2xvc2VkKX0sZGVwZW5kZW5jaWVzOlt3dSx5byx1c10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksamRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5pY29uU2VydmljZT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKShHZShDRykpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnQtaXRlbSJdXSxob3N0QXR0cnM6WzEsImFsZXJ0LWl0ZW0iXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiYWxlcnQtaWNvbi13'@;
put 'cmFwcGVyIl0sWyJjbGFzcyIsImFsZXJ0LXNwaW5uZXIiLCJjbHJJbmxpbmUiLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQtaWNvbiIsInJvbGUiLCJpbWciLDQsIm5nSWYiXSxbImNscklubGluZSIsIiIsMSwiYWxlcnQtc3Bpbm5lciJdLFsicm9sZSIsImltZyIsMSwiYWxlcnQtaWNv'@;
put 'biJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksZGUoMCwiZGl2IiwwKSxtdCgxLEdqZSwxLDAsImNsci1zcGlubmVyIiwxKSgyLCRqZSwxLDIsImNkcy1pY29uIiwyKSxoZSgpLFlyKDMpKSwyJmEmJihmZSgpLHhlKCJuZ0lmIiwibG9hZGluZyI9PT1kLmljb25TZXJ2aWNl'@;
put 'LmFsZXJ0SWNvblNoYXBlKSxmZSgpLHhlKCJuZ0lmIiwibG9hZGluZyIhPT1kLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSl9LGRlcGVuZGVuY2llczpbeW8sdXMsTWhdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEp4PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImFsZXJ0LXRleHQiXV19KSxjfSkoKSx6ZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubXVsdGlBbGVydFNlcnZpY2U9YSx0aGlzLmNvbW1vblN0cmlu'@;
put 'Z3M9ZCx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgWHIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IFhyfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0IGN1cnJlbnRBbGVydChhKXthJiYodGhp'@;
put 'cy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IHByZXZp'@;
put 'b3VzQWxlcnRBcmlhTGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbCx7Q1VSUkVOVDooMT09PWE/dGhpcy5tdWx0aUFs'@;
put 'ZXJ0U2VydmljZS5jb3VudDphLTEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9Z2V0IG5leHRBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3Mu'@;
put 'cGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnROZXh0QWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6KGE9PT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50PzE6YSsxKS50b1N0cmluZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQudG9TdHJpbmcoKX0pfW5n'@;
put 'T25Jbml0KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXM9dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5lbWl0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLmVtaXQodGhpcy5tdWx0aUFsZXJ0'@;
put 'U2VydmljZS5hY3RpdmVBbGVydHNbYV0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcy51bnN1YnNjcmliZSgpfXBhZ2VVcCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubmV4dCgpfXBhZ2VEb3duKCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5wcmV2aW91'@;
put 'cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShkTyksR2UobnMpKX0sYy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cy1wYWdlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezIm'@;
put 'YSYmVHIoImFsZXJ0cy1wYWdlciIsITApfSxpbnB1dHM6e2N1cnJlbnRBbGVydDpbam4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0IiwiY3VycmVudEFsZXJ0Il0sY3VycmVudEFsZXJ0SW5kZXg6W2puLk5vbmUsImNsckN1cnJlbnRBbGVydEluZGV4IiwiY3VycmVudEFsZXJ0SW5kZXgiXX0sb3V0'@;
put 'cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGRlY2xzOjksdmFyczo2LGNvbnN0czpbWzEsImFsZXJ0cy1wYWdlci1jb250cm9sIl0sWzEsImFsZXJ0cy1w'@;
put 'YWdlLWRvd24iXSxbInR5cGUiLCJidXR0b24iLDEsImFsZXJ0cy1wYWdlci1idXR0b24iLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsxLCJhbGVydHMtcGFnZXItdGV4dCJdLFsxLCJhbGVydHMtcGFnZS11cCJdLFsic2hhcGUiLCJhbmdsZSIsImRp'@;
put 'cmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBhZ2VEb3duKCl9KSxHdCgzLCJjZHMtaWNvbiIsMyksaGUoKSgpLGRlKDQsImRp'@;
put 'diIsNCksTGUoNSksaGUoKSxkZSg2LCJkaXYiLDUpKDcsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnBhZ2VVcCgpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCkoKSgpKSwyJmEmJihmZSgyKSxmcigiYXJpYS1sYWJlbCIsZC5wcmV2aW91c0FsZXJ0QXJpYUxh'@;
put 'YmVsKSxmZSgpLGZyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXMpLGZlKDIpLGp1KCIiLGQubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudCsxLCIgLyAiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQsIiIpLGZlKDIpLGZyKCJhcmlhLWxhYmVsIixkLm5leHRBbGVydEFy'@;
put 'aWFMYWJlbCksZmUoKSxmcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLm5leHQpKX0sZGVwZW5kZW5jaWVzOlt1c10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksVWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT1hLHRoaXMuY3VycmVu'@;
put 'dEFsZXJ0Q2hhbmdlPW5ldyBYcighMSksdGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZT1uZXcgWHIoITEpLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1zZXQgYWxsQWxlcnRzKGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2UubWFuYWdlKGEpfXNldCBfaW5wdXRDdXJyZW50SW5kZXgoYSl7TnVt'@;
put 'YmVyLmlzSW50ZWdlcihhKSYmYT49MCYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1hKX1nZXQgY3VycmVudEFsZXJ0SW5kZXgoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50fXNldCBjdXJyZW50QWxlcnRJbmRleChhKXt0aGlzLm11bHRpQWxlcnRTZXJ2'@;
put 'aWNlLmN1cnJlbnQ9YX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0fXNldCBjdXJyZW50QWxlcnQoYSl7YSYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0PWEpfWdldCBhbGVydHMoKXtyZXR1cm4gdGhpcy5h'@;
put 'bGxBbGVydHMuZmlsdGVyKGE9PiExPT09YS5oaWRkZW4pfWdldCBjdXJyZW50QWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0P3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0LmFsZXJ0VHlwZToiIn1uZ0FmdGVyQ29udGVudElu'@;
put 'aXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlLm5leHQoYSksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UubmV4dCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1'@;
put 'cnJlbnRBbGVydCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMubXVsdGlBbGVydFNlcnZpY2UuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShkTykp'@;
put 'fSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnRzIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgsWHgsNCksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5hbGxBbGVydHM9Zil9fSxob3N0VmFyczoxMixob3N0QmluZGlu'@;
put 'Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJlRyKCJhbGVydHMiLCEwKSgiYWxlcnQtZGFuZ2VyIiwiZGFuZ2VyIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtaW5mbyIsImluZm8iPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1zdWNjZXNzIiwic3VjY2VzcyI9PWQuY3VycmVudEFsZXJ0'@;
put 'VHlwZSkoImFsZXJ0LXdhcm5pbmciLCJ3YXJuaW5nIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtbmV1dHJhbCIsIm5ldXRyYWwiPT1kLmN1cnJlbnRBbGVydFR5cGUpfSxpbnB1dHM6e19pbnB1dEN1cnJlbnRJbmRleDpbam4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJfaW5w'@;
put 'dXRDdXJyZW50SW5kZXgiXSxjdXJyZW50QWxlcnQ6W2puLk5vbmUsImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVy'@;
put 'dEluZGV4Q2hhbmdlIn0sZmVhdHVyZXM6W2ZvKFtkT10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6cWplLGRlY2xzOjMsdmFyczoxLGNvbnN0czpbWzEsImFsZXJ0cy13cmFwcGVyIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4Iiw0LCJuZ0lmIl0sWzMsImNsckN1cnJlbnRBbGVydEluZGV4Il1d'@;
put 'LHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oS2plKSxkZSgwLCJkaXYiLDApLG10KDEsWGplLDEsMSwiY2xyLWFsZXJ0cy1wYWdlciIsMSksWXIoMiksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsZC5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD4xKSl9LGRlcGVuZGVuY2llczpb'@;
put 'eW8semRlXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KSxjfSkoKSxaZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKG9ZLGpPZSx6T2UsVU9lLGFZLFpPZSxteCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLFRzLEZZLEJ5XX0pLGN9KSgpLGVXZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9'@;
put 'a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltaZGVdfSksY30pKCksV2RlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YX1zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCJuby1zY3JvbGxpbmci'@;
put 'KX1yZXN1bWVTY3JvbGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygibm8tc2Nyb2xsaW5nIikmJnRoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgibm8tc2Nyb2xsaW5nIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpKHhyKHZzKSl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmZhZGVNb3ZlPSJmYWRlRG93biIsdGhpcy5iYWNrZHJvcD0hMH19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksb3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNl'@;
put 'PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5tb2RhbFN0YWNrU2VydmljZT1oLHRoaXMuY29uZmlndXJhdGlvbj1mLHRoaXMubW9kYWxJZD1TdSgpLHRoaXMuX29wZW49ITEsdGhpcy5fb3BlbkNoYW5nZWQ9bmV3IFhyKCExKSx0aGlzLmNsb3NhYmxlPSEwLHRoaXMuY2xvc2VCdXR0b25B'@;
put 'cmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UsdGhpcy5zaXplPSJtZCIsdGhpcy5zdGF0aWNCYWNrZHJvcD0hMCx0aGlzLnNraXBBbmltYXRpb249ITEsdGhpcy5zdG9wQ2xvc2U9ITEsdGhpcy5hbHRDbG9zZT1uZXcgWHIoITEpLHRoaXMuYnlwYXNzU2Nyb2xsU2Vydmlj'@;
put 'ZT0hMX1nZXQgZmFkZU1vdmUoKXtyZXR1cm4gdGhpcy5za2lwQW5pbWF0aW9uPyIiOnRoaXMuY29uZmlndXJhdGlvbi5mYWRlTW92ZX1zZXQgZmFkZU1vdmUoYSl7dGhpcy5jb25maWd1cmF0aW9uLmZhZGVNb3ZlPWF9Z2V0IGJhY2tkcm9wKCl7cmV0dXJuIHRoaXMuY29uZmlndXJhdGlvbi5i'@;
put 'YWNrZHJvcH1uZ09uQ2hhbmdlcyhhKXshdGhpcy5ieXBhc3NTY3JvbGxTZXJ2aWNlJiZhJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwiX29wZW4iKSYmKGEuX29wZW4uY3VycmVudFZhbHVlPyh0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnN0b3BTY3JvbGxpbmcoKSx0'@;
put 'aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpKTp0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnJlc3VtZVNjcm9sbGluZygpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3Njcm9sbGluZ1NlcnZpY2UucmVzdW1lU2Nyb2xsaW5nKCl9b3Blbigpe3RoaXMuX29wZW58fCh0aGlz'@;
put 'Ll9vcGVuPSEwLHRoaXMuX29wZW5DaGFuZ2VkLmVtaXQoITApLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbE9wZW4odGhpcykpfWJhY2tkcm9wQ2xpY2soKXt0aGlzLnN0YXRpY0JhY2tkcm9wP3RoaXMudGl0bGUubmF0aXZlRWxlbWVudC5mb2N1cygpOnRoaXMuY2xvc2UoKX1j'@;
put 'bG9zZSgpe3RoaXMuc3RvcENsb3NlP3RoaXMuYWx0Q2xvc2UuZW1pdCghMSk6IXRoaXMuY2xvc2FibGV8fCF0aGlzLl9vcGVufHwodGhpcy5fb3Blbj0hMSl9ZmFkZURvbmUoYSl7InZvaWQiPT09YS50b1N0YXRlJiYodGhpcy5fb3BlbkNoYW5nZWQuZW1pdCghMSksdGhpcy5tb2RhbFN0YWNr'@;
put 'U2VydmljZS50cmFja01vZGFsQ2xvc2UodGhpcykpfXNjcm9sbFRvcCgpe3RoaXMuYm9keUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxUbygwLDApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShXZGUpLEdlKG5zKSxHZShTZGUpLEdl'@;
put 'KFlkZSkpfSxjLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItbW9kYWwiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYobmEoXzFlLDUpLG5hKEpqZSw1KSksMiZhKXtsZXQgaDt4aShoPUVpKCkpJiYoZC50aXRsZT1oLmZpcnN0KSx4aShoPUVpKCkpJiYo'@;
put 'ZC5ib2R5RWxlbWVudFJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZUcigib3BlbiIsZC5fb3Blbil9LGlucHV0czp7X29wZW46W2puLk5vbmUsImNsck1vZGFsT3BlbiIsIl9vcGVuIl0sY2xvc2FibGU6W2puLk5vbmUsImNsck1vZGFs'@;
put 'Q2xvc2FibGUiLCJjbG9zYWJsZSJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOltqbi5Ob25lLCJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiXSxzaXplOltqbi5Ob25lLCJjbHJNb2RhbFNpemUiLCJzaXplIl0sc3RhdGljQmFja2Ryb3A6W2puLk5v'@;
put 'bmUsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJzdGF0aWNCYWNrZHJvcCJdLHNraXBBbmltYXRpb246W2puLk5vbmUsImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmltYXRpb24iXSxzdG9wQ2xvc2U6W2puLk5vbmUsImNsck1vZGFsUHJldmVudENsb3NlIiwic3RvcENsb3NlIl0s'@;
put 'bGFiZWxsZWRCeTpbam4uTm9uZSwiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il0sYnlwYXNzU2Nyb2xsU2VydmljZTpbam4uTm9uZSwiY2xyTW9kYWxPdmVycmlkZVNjcm9sbFNlcnZpY2UiLCJieXBhc3NTY3JvbGxTZXJ2aWNlIl19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoi'@;
put 'Y2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LGZlYXR1cmVzOltmbyhbXSxbV2RlXSksd2xdLG5nQ29udGVudFNlbGVjdG9yczplemUsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInRpdGxlIiwiIl0sWyJib2R5IiwiIl0sWyJjbGFzcyIsIm1v'@;
put 'ZGFsIiwzLCJtb2RhbC1mdWxsLXNjcmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbC1iYWNrZHJvcCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwiXSxbImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLCJhcmlhLW1vZGFsIiwi'@;
put 'dHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwzLCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJtb2RhbC1jb250ZW50LXdyYXBwZXIiXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXItLWFjY2Vzc2libGUiXSxbImNka0ZvY3VzSW5pdGlh'@;
put 'bCIsIiIsInRhYmluZGV4IiwiLTEiLDEsIm1vZGFsLXRpdGxlLXdyYXBwZXIiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFwcGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSIsMywiY2xp'@;
put 'Y2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKFFqZSksbXQoMCxuemUsMTksMTYsImRpdiIsMikoMSxyemUsMSwxLCJkaXYiLDMpKSwy'@;
put 'JmEmJih4ZSgibmdJZiIsZC5fb3BlbiksZmUoKSx4ZSgibmdJZiIsZC5iYWNrZHJvcCkpfSxkZXBlbmRlbmNpZXM6W3lvLFV5LHVzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6bm9uZX0ub3Blbltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmV9Il0sZGF0YTp7YW5p'@;
put 'bWF0aW9uOltfaCgiZmFkZU1vdmUiLFtydSgiKiA9PiBmYWRlRG93biIsW2NzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSksTTAoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLHJ1KCJmYWRlRG93biA9PiAqIixbTTAoIjAuMnMgZWFzZS1pbi1vdXQiLGNzKHtvcGFj'@;
put 'aXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSkscnUoIiogPT4gZmFkZUxlZnQiLFtjcyh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDI1JSwgMCkifSksTTAoIjAuMnMgZWFzZS1pbi1vdXQiKV0pLHJ1KCJmYWRlTGVmdCA9PiAqIixbTTAoIjAuMnMgZWFz'@;
put 'ZS1pbi1vdXQiLGNzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMjUlLCAwKSJ9KSldKV0pLF9oKCJmYWRlIixbcnUoInZvaWQgPT4gKiIsW2NzKHtvcGFjaXR5OjB9KSxNMCgiMC4ycyBlYXNlLWluLW91dCIsY3Moe29wYWNpdHk6Ljg1fSkpXSkscnUoIiogPT4gdm9pZCIsW00w'@;
put 'KCIwLjJzIGVhc2UtaW4tb3V0Iixjcyh7b3BhY2l0eTowfSkpXSldKV19fSksY30pKCksJHU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuaG9zdD1kLHRoaXMudGFiaW5kZXg9IjAiLHRoaXMudW5saXN0ZW5lcnM9W10saC5ydW5PdXRzaWRl'@;
put 'QW5ndWxhcigoKT0+e3RoaXMub2JzZXJ2ZXI9bmV3IFJlc2l6ZU9ic2VydmVyKCgpPT50aGlzLmFkZE9yUmVtb3ZlVGFiSW5kZXgoKSksdGhpcy5vYnNlcnZlci5vYnNlcnZlKGQubmF0aXZlRWxlbWVudCksdGhpcy51bmxpc3RlbmVycy5wdXNoKGEubGlzdGVuKGQubmF0aXZlRWxlbWVudCwi'@;
put 'bW91c2V1cCIsKCk9Pnt0aGlzLmFkZE9yUmVtb3ZlVGFiSW5kZXgoKX0pLGEubGlzdGVuKGQubmF0aXZlRWxlbWVudCwibW91c2Vkb3duIiwoKT0+e3RoaXMucmVtb3ZlVGFiSW5kZXgoKX0pKX0pfW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLnVubGlzdGVuZXJzLmxlbmd0aDspdGhpcy51bmxp'@;
put 'c3RlbmVycy5wb3AoKSgpO3RoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMub2JzZXJ2ZXI9bnVsbH1hZGRUYWJJbmRleCgpe3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsdGhpcy50YWJpbmRleCl9cmVtb3ZlVGFiSW5k'@;
put 'ZXgoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKX1hZGRPclJlbW92ZVRhYkluZGV4KCl7Y29uc3QgYT10aGlzLmhvc3QubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50O2EmJmEuY2xpZW50SGVpZ2h0PGEuc2Nyb2xs'@;
put 'SGVpZ2h0P3RoaXMuYWRkVGFiSW5kZXgoKTp0aGlzLnJlbW92ZVRhYkluZGV4KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKEVhKSxHZShKaSksR2UoWW8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJtb2Rh'@;
put 'bC1ib2R5Il1dfSksY30pKCksaE89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKG14KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpb'@;
put 'TG8sJEwsVHMsVHNdfSksY30pKCksdFdlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLCRMLFRzLGhPLGhPLFRzXX0pLGN9KSgp'@;
put 'LG5XZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMb119KSxjfSkoKSxpV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0Vz'@;
put 'LmFkZEljb25zKFdPZSxZT2Usb1ksYVkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxUcyxCeSxUcyxCeV19KSxjfSkoKSxjV2U9KCgpPT57Y2xhc3Mg'@;
put 'Y3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKG9ZLGFZKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8saE8sWmRlXX0pLGN9KSgpLEIwPSgoKT0+e2Ns'@;
put 'YXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W2VXZSxKWmUsVHMsaE8sTFksSTIsVkwscXplLHlkZSxZVWUsZ1VlLGNXZSx0V2UsSHplLEJ5LG5XZSxO'@;
put 'eCxpV2VdfSksY30pKCksdVdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmxvZ2dlclNlcnZpY2U9ZCx0aGlzLl9zdWJzY3JpcHRpb249bmV3IHF0LHRoaXMubG9hZGluZz0hMSx0aGlzLmFsZXJ0Q2xvc2VkPSEwLHRoaXMuZGF0YT17dXNl'@;
put 'cjpudWxsLHBhc3M6bnVsbH19bmdPbkluaXQoKXsiUmVkaXJlY3RlZCIhPT10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5sb2dpbk1lY2hhbmlzbSYmKHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4uc3Vic2NyaWJlKGQ9Pnt0aGlzLmlzQWN0'@;
put 'aXZlPWQ7bGV0IGg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpO2gmJihkP2guY2xhc3NMaXN0LmFkZCgic2hvdWxkLWxvZ2luIik6aC5jbGFzc0xpc3QucmVtb3ZlKCJzaG91bGQtbG9naW4iKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUo'@;
put 'KX1zdWJtaXQoKXt0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9ITAsdGhpcy5kYXRhLnVzZXImJnRoaXMuZGF0YS5wYXNzJiZ0aGlzLnNhc1NlcnZpY2UubG9naW4odGhpcy5kYXRhLnVzZXIsdGhpcy5kYXRhLnBhc3MpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSxhfHwodGhpcy5lcnJv'@;
put 'ck1zZz0iVXNlcm5hbWUgb3IgcGFzc3dvcmQgaW52YWxpZCIsdGhpcy5hbGVydENsb3NlZD0hMSl9LGE9Pnt0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGEpLHRoaXMubG9hZGluZz0hMSx0aGlzLmVycm9yTXNnPWEsdGhpcy5hbGVydENsb3NlZD0hMX0pKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh0bCksR2UoTWQpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1sb2dpbiJdXSxkZWNsczoyMCx2YXJzOjksY29uc3RzOltbMSwibG9naW4tc2lkZWJhci13cmFwcGVyIl0sWzEsImxvZ2lu'@;
put 'LXNpZGViYXIiLCJzaWRlQmFyUHJvcHMiXSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL2ltYWdlcy9kYXRhY29udHJvbGxlci5zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJsb2dpbi1sb2dvIl0sWzEsImxvZ2lu'@;
put 'IiwzLCJuZ1N1Ym1pdCJdLFsxLCJ0aXRsZSJdLFsxLCJ3ZWxjb21lIl0sWzEsImhpbnQiXSxbMSwibG9naW4tZ3JvdXAiXSxbImNscklucHV0IiwiIiwibmFtZSIsInVzZXIiLCJ0eXBlIiwidGV4dCIsInBsYWNlaG9sZGVyIiwiVXNlcm5hbWUiLDEsInVzZXJuYW1lIiwzLCJuZ01vZGVsQ2hh'@;
put 'bmdlIiwibmdNb2RlbCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwicGFzcyIsInR5cGUiLCJwYXNzd29yZCIsInBsYWNlaG9sZGVyIiwiUGFzc3dvcmQiLDEsInBhc3N3b3JkIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJjbHJBbGVydENsb3NlZENoYW5nZSIsImNsckFsZXJ0'@;
put 'VHlwZSIsImNsckFsZXJ0Q2xvc2VkIl0sWyJjbHItYWxlcnQtaXRlbSIsIiIsMSwiYWxlcnQtaXRlbSJdLFsxLCJhbGVydC10ZXh0Il0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWzEsIm92ZXJsYXki'@;
put 'XV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsImRpdiIsMSksR3QoMiwiaW1nIiwyKSxkZSgzLCJmb3JtIiwzKSxGdCgibmdTdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGguc3VibWl0KCl9KSxkZSg0LCJsYWJlbCIsNCkoNSwiaDMiLDUpLExlKDYsIldl'@;
put 'bGNvbWUgdG8iKSxoZSgpLExlKDcsIiBEYXRhIENvbnRyb2xsZXIgIiksZGUoOCwiaDQiLDYpLExlKDksIkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiKSxoZSgpKCksZGUoMTAsImRpdiIsNykoMTEsImlucHV0Iiw4KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJu'@;
put 'IGJpKGguZGF0YS51c2VyLHYpfHwoaC5kYXRhLnVzZXI9diksdn0pLGhlKCksZGUoMTIsImlucHV0Iiw5KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGJpKGguZGF0YS5wYXNzLHYpfHwoaC5kYXRhLnBhc3M9diksdn0pLGhlKCksZGUoMTMsImNsci1hbGVydCIsMTAp'@;
put 'LGdpKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGJpKGguYWxlcnRDbG9zZWQsdil8fChoLmFsZXJ0Q2xvc2VkPXYpLHZ9KSxkZSgxNCwiZGl2IiwxMSkoMTUsInNwYW4iLDEyKSxMZSgxNiksaGUoKSgpKCksZGUoMTcsImJ1dHRvbiIsMTMpLExlKDE4LCIgTG9n'@;
put 'IGluICIpLGhlKCkoKSgpKCksR3QoMTksImRpdiIsMTQpLGhlKCkpLDImZCYmKFRyKCJhY3RpdmUiLGguaXNBY3RpdmUpLGZlKDExKSxwaSgibmdNb2RlbCIsaC5kYXRhLnVzZXIpLGZlKCkscGkoIm5nTW9kZWwiLGguZGF0YS5wYXNzKSxmZSgpLHhlKCJjbHJBbGVydFR5cGUiLCJhbGVydC1k'@;
put 'YW5nZXIiKSxwaSgiY2xyQWxlcnRDbG9zZWQiLGguYWxlcnRDbG9zZWQpLGZlKDMpLHdyKGguZXJyb3JNc2cpLGZlKCkseGUoImNsckxvYWRpbmciLGgubG9hZGluZykoImRpc2FibGVkIixoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOlthNyxlYyxubCxpNyxHcyx5cCxYeCxKeCxWMCxSMixk'@;
put 'cyxSZF0sc3R5bGVzOlsiLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZTBlMGUwfS5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJh'@;
put 'clByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwfS5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6d2hlYXQhaW1wb3J0YW50fS5zaWRlQmFy'@;
put 'UHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2UwZTBlMH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtwb2ludGVyLWV2'@;
put 'ZW50czpub25lO3otaW5kZXg6MTAwMDB9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gPiAqW19uZ2NvbnRlbnQtJUNPTVAlXXtwb2ludGVyLWV2ZW50czphdXRvfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGVi'@;
put 'YXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjQwMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkO3BhZGRpbmc6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC00MDBweCk7dHJhbnNp'@;
put 'dGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjEwMTtkaXNwbGF5OmZsZXg7ZmxleC1k'@;
put 'aXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250'@;
put 'ZW50LSVDT01QJV17Zm9udC1zaXplOjMycHg7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjM2cHh9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV0gICAud2VsY29tZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDozNnB4fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'Zm9ybS5sb2dpbltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzo0OHB4IDAgMH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dp'@;
put 'bi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLWdyb3VwW19uZ2NvbnRlbnQtJUNPTVAlXSA+ICpbX25nY29udGVudC0lQ09NUCVde21hcmdpbjo2cHggMCAxOHB4fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZl'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3otaW5kZXg6MTAxfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vdmVybGF5W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtkaXNwbGF5OmJsb2NrfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5k'@;
put 'OiMyMTIxMjE4MDt6LWluZGV4OjEwMH0gIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIsICAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1pbnB1dC1ncm91cCwgICAubG9naW4tc2lkZWJhci13cmFwcGVy'@;
put 'IC5sb2dpbi1ncm91cCAudXNlcm5hbWUsICAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLnBhc3N3b3Jke3dpZHRoOjEwMCV9ICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9ICAubG9naW4t'@;
put 'c2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCBidXR0b257bWF4LXdpZHRoOm5vbmV9LmxvZ2luLWxvZ29bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDoyMDBweH0iXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gZFdlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTApLExlKDEsImxv'@;
put 'YWRpbmciKSxoZSgpKX1mdW5jdGlvbiBoV2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMSksTGUoMSwibG9hZGVkIiksaGUoKSl9ZnVuY3Rpb24gZldlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTIpLExlKDEsImZhaWxlZCIpLGhlKCkpfWZ1bmN0aW9uIHBXZShjLGwpe2lmKDEmYyYmKGRl'@;
put 'KDAsInAiKSgxLCJjb2RlIiksTGUoMiksaGUoKSxMZSgzLCIgXHhhMCAiKSxtdCg0LGRXZSwyLDAsInNwYW4iLDcpKDUsaFdlLDIsMCwic3BhbiIsOCkoNixmV2UsMiwwLCJzcGFuIiw5KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksd3IoYS5wcm9ncmFtKSxmZSgyKSx4'@;
put 'ZSgibmdJZiIsYS5ydW5uaW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5ydW5uaW5nJiZhLnN1Y2Nlc3NmdWwpLGZlKCkseGUoIm5nSWYiLCFhLnJ1bm5pbmcmJiFhLnN1Y2Nlc3NmdWwpfX1mdW5jdGlvbiBnV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc2lnbnBvc3QtY29udGVudCIsNSksbXQo'@;
put 'MSxwV2UsNyw0LCJwIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTt4ZSgiY2xyUG9zaXRpb24iLCJib3R0b20tbWlkZGxlIiksZmUoKSx4ZSgibmdGb3JPZiIsYS5yZXF1ZXN0cyl9fWxldCBtV2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZz0hMSx0aGlzLnJl'@;
put 'cXVlc3RzPVtdLHRoaXMuX2xvYWRpbmdTdWI9bmV3IHF0fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7dGhpcy5fbG9hZGluZ1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9'@;
put 'VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxvYWRpbmctaW5kaWNhdG9yIl1dLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzEsImxvYWRpbmctaW5kaWNhdG9yIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNwaW5uZXIiLCJzcGlubmVyLXNtIiwic3Bpbm5lci1pbnZlcnNlIl0s'@;
put 'WyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjIwIiwxLCJpcy1pbmZvIl0sWyJjbHJTaWducG9zdFRyaWdnZXIiLCIiLCJzaGFwZSIsImVycm9yIiwic2l6ZSIsIjI0IiwxLCJpcy1lcnJvciJdLFszLCJjbHJQb3NpdGlvbiIsNCwiY2xySWZPcGVuIl0s'@;
put 'WzMsImNsclBvc2l0aW9uIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJydW5uaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInN1Y2Nlc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZmFpbCIsNCwibmdJZiJdLFsxLCJydW5uaW5nIl0sWzEsInN1Y2Nlc3MiXSxbMSwiZmFpbCJdXSx0'@;
put 'ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiY2xyLXNpZ25wb3N0IiksR3QoMiwic3BhbiIsMSkoMywiY2xyLWljb24iLDIpKDQsImNsci1pY29uIiwzKSxtdCg1LGdXZSwyLDIsImNsci1zaWducG9zdC1jb250ZW50Iiw0KSxoZSgpKCkpLDImZCYmKGZlKDIp'@;
put 'LHdkKCJkaXNwbGF5IixoLmxvYWRpbmc/ImlubGluZS1ibG9jayI6Im5vbmUiKSxmZSgpLHdkKCJkaXNwbGF5IiwhaC5sb2FkaW5nJiZoLnJlcXVlc3RzLmxlbmd0aD4wJiZoLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSxmZSgpLHdkKCJkaXNwbGF5Iiwh'@;
put 'aC5sb2FkaW5nJiZoLnJlcXVlc3RzLmxlbmd0aD4wJiYhaC5yZXF1ZXN0c1swXS5zdWNjZXNzZnVsPyJpbmxpbmUtYmxvY2siOiJub25lIikpfSxkZXBlbmRlbmNpZXM6W2xzLHlvLEZsLEQyLFpMLEcxZSxVTF0sc3R5bGVzOlsiLmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtsaW5lLWhlaWdodDoyLjVyZW07aGVpZ2h0OjIuNXJlbTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlO21hcmdpbi1yaWdodDoxMHB4fS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICAuc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17'@;
put 'dmVydGljYWwtYWxpZ246bWlkZGxlfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6MjRweDtjb2xvcjojNTY1NjU2O2N1cnNvcjphdXRvfS5sb2FkaW5nLWluZGljYXRvcltf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjEwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5sb2FkaW5nLWluZGljYXRvcltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjEwcHh9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5ydW5u'@;
put 'aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTliZjA0fS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW4uc3VjY2Vzc1tfbmdjb250ZW50'@;
put 'LSVDT01QJV17Y29sb3I6IzYwYjUxNX0ubG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmZhaWxbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNj'@;
put 'OTIxMDB9Il19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHZXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNkcy1pY29uIiwxMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnRvZ2dsZURhcmtNb2RlKCEwKSl9KSxoZSgpfX1mdW5jdGlvbiBi'@;
put 'V2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjZHMtaWNvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS50b2dnbGVEYXJrTW9kZSghMSkpfSksaGUoKX19ZnVuY3Rpb24geVdlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLEd0KDEs'@;
put 'ImltZyIsMTQpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksZk0oInNyYyIsYS5nZXRQaWN0dXJlVXJsKCksWkMpfX1mdW5jdGlvbiBfV2UoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxNSksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7VHIoImhpZGRlbiIsMD09PWEuZmFp'@;
put 'bGVkUmVxcy5sZW5ndGgpLGZlKCksd3IoYS5mYWlsZWRSZXFzLmxlbmd0aCl9fWZ1bmN0aW9uIHdXZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDE2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtUcigiaGlkZGVuIiwwPT09YS5kZWJ1Z0xvZ3MubGVuZ3RoKSxmZSgpLHdyKGEu'@;
put 'ZGVidWdMb2dzLmxlbmd0aCl9fWZ1bmN0aW9uIENXZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDE3KX1mdW5jdGlvbiBTV2UoYyxsKXsxJmMmJihjaSgwKSxkZSgxLCJhIiwyOCkoMiwic3BhbiIsMjkpLExlKDMsIkRvY3VtZW50YXRpb24iKSxoZSgpKCksdWkoKSl9ZnVuY3Rpb24gTVdl'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDE4KSgxLCJkaXYiLDE5LDApKDMsImNsci10b2dnbGUtY29udGFpbmVyIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPXZvKDIpO3JldHVybiBDdChPZSgpLm9uRGVidWdS'@;
put 'b3dDbGljayhoLGYpKX0pLGRlKDQsImNsci10b2dnbGUtd3JhcHBlciIpKDUsImlucHV0IiwyMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gYmkoZi5zYXNqc0NvbmZpZy5kZWJ1ZyxoKXx8KGYuc2FzanNDb25maWcuZGVidWc9aCks'@;
put 'Q3QoaCl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkRlYnVnTW9kZUNoYW5nZSgpKX0pLGhlKCksZGUoNiwibGFiZWwiKSxMZSg3LCJEZWJ1ZyBNb2RlIiksaGUoKSgpKCkoKSxkZSg4LCJhIiwyMiksRnQoImNsaWNrIixmdW5jdGlvbigp'@;
put 'e3JldHVybiB3dChhKSxDdChPZSgpLm9wZW5SZXF1ZXN0c01vZGFsKCkpfSksZGUoOSwic3BhbiIpLExlKDEwLCJTQVMgUmVxdWVzdHMiKSxoZSgpKCksbXQoMTEsU1dlLDQsMCwibmctY29udGFpbmVyIiw3KSxHdCgxMiwiZGl2IiwyMyksZGUoMTMsImEiLDI0KSgxNCwic3BhbiIpLExlKDE1'@;
put 'LCJTeXN0ZW0iKSxoZSgpKCksZGUoMTYsImEiLDI1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLmxvZ291dChoKSl9KSxkZSgxNywic3BhbiIpLExlKDE4LCJMb2cgT3V0IiksaGUoKSxHdCgxOSwiY2xyLWljb24iLDI2KSxoZSgpLGRlKDIwLCJkaXYiLDI3'@;
put 'KSgyMSwic3BhbiIpLExlKDIyKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSg1KSxwaSgibmdNb2RlbCIsYS5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoNikseGUoIm5nSWYiLCFhLmlzRGVwbG95UGFnZSksZmUoMTEpLElyKCJ2IixhLmNvbW1pdFZlciwiIil9fWxldCB4V2U9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnVzZXJTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMudXNlck5hbWU9Ik5vdCBsb2dnZWQgaW4iLHRoaXMucmVxU3ViPW5ldyBxdCx0aGlzLnVzZXJTdWI9'@;
put 'bmV3IHF0LHRoaXMuYXBwTG9ncz1bXSx0aGlzLmRlYnVnTG9ncz1bXSx0aGlzLmZhaWxlZFJlcXM9W10sdGhpcy5zYXNFcnJvcnM9W10sdGhpcy5pc1ZpeWE9ITEsdGhpcy5zYXNqc0NvbmZpZz1uZXcgdmguU0FTanNDb25maWcsdGhpcy5yZXF1ZXN0c0NvdW50PTAsdGhpcy5jb21taXRWZXI9'@;
put 'IiIsdGhpcy5kYXJrTW9kZT10aGlzLmV2ZW50U2VydmljZS5kYXJrTW9kZX1uZ09uSW5pdCgpe3RoaXMudXNlclN1Yj10aGlzLnVzZXJTZXJ2aWNlLnVzZXJDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLnVzZXJOYW1lPWEudXNlcm5hbWV9KSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2Vy'@;
put 'dmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKSx0aGlzLmNvbW1pdFZlcj0idjYuMTQuNyIucmVwbGFjZSgidiIsIiIpKyIuZ2EzNzdmNmUifW5nT25EZXN0cm95KCl7dGhpcy5yZXFTdWIudW5zdWJz'@;
put 'Y3JpYmUoKSx0aGlzLnVzZXJTdWIudW5zdWJzY3JpYmUoKX10b2dnbGVEYXJrTW9kZShhKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVEYXJrTW9kZShhKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9b25EZWJ1Z01vZGVDaGFuZ2Uo'@;
put 'YSl7dGhpcy5zYXNqc0NvbmZpZyYmdGhpcy5zYXNTZXJ2aWNlLnNldERlYnVnU3RhdGUodGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyl9b25EZWJ1Z1Jvd0NsaWNrKGEsZCl7YS5zdG9wUHJvcGFnYXRpb24oKSxzZXRUaW1lb3V0KCgpPT57ZC5jbGljaygpfSwzMDApfWxvZ291dChhKXthLnByZXZl'@;
put 'bnREZWZhdWx0KCk7dHJ5e3RoaXMuc2FzU2VydmljZS5sb2dvdXQoKX1jYXRjaChkKXtjb25zb2xlLmVycm9yKGQpfX1nZXRQaWN0dXJlVXJsKCl7cmV0dXJuYCR7dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvJHt0aGlzLnVzZXJOYW1lfS9hdmF0YXIvY29u'@;
put 'dGVudGB9Z2V0IGlzRGVwbG95UGFnZSgpe3JldHVybiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHlXKSxHZSh0bCksR2UodmMpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3'@;
put 'NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaGVhZGVyLWFjdGlvbnMiXV0sZGVjbHM6MTQsdmFyczo3LGNvbnN0czpbWyJkcm9wZG93bkl0ZW1EZWJ1ZyIsIiJdLFsxLCJoZWFkZXItYWN0aW9ucyJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaXpl'@;
put 'IiwibWQiLCJjbGFzcyIsInRoZW1lLXRvZ2dsZS1pY29uIGN1cnNvci1wb2ludGVyIiwic2hhcGUiLCJtb29uIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNpemUiLCJtZCIsImNsYXNzIiwidGhlbWUtdG9nZ2xlLWljb24gY3Vyc29y'@;
put 'LXBvaW50ZXIiLCJzaGFwZSIsInN1biIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImFwcC1uYXYtZHJvcGRvd24iXSxbImNsckRyb3Bkb3duVG9nZ2xlIiwiIiwxLCJuYXYtdGV4dCIsImNvbG9yLXdoaXRlIiwidXNlci1uYXYtdG9n'@;
put 'Z2xlIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtZGFuZ2VyIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwiYmFkZ2UgYmFkZ2UtaW5mbyIsMywiaGlkZGVuIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwi'@;
put 'Ym90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbInNpemUiLCJtZCIsInNoYXBlIiwibW9vbiIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDEsInRoZW1lLXRvZ2dsZS1pY29uIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwibWQiLCJzaGFwZSIsInN1'@;
put 'biIsImludmVyc2UiLCJmYWxzZSIsInNvbGlkIiwiZmFsc2UiLDEsInRoZW1lLXRvZ2dsZS1pY29uIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJhbHQiLCJwcm9maWxlIHBpY3R1cmUiLDEsImF2YXRhci1pbWciLDMsInNyYyJdLFsxLCJiYWRnZSIsImJhZGdlLWRhbmdlciJdLFsx'@;
put 'LCJiYWRnZSIsImJhZGdlLWluZm8iXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZGVidWctc3dpdGNoLWl0ZW0iXSxbMSwidG9nZ2xlLXN3aXRjaCIsMywiY2xpY2siXSxbImlkIiwiZGVidWct'@;
put 'dG9nZ2xlMSIsInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbMSwic2VwYXJhdG9yIl0sWyJocmVmIiwiLi4uIiwicm91dGVyTGluayIsIi9zeXN0ZW0iLCJjbHJEcm9w'@;
put 'ZG93bkl0ZW0iLCIiXSxbImhyZWYiLCIuLi4iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImxvZ291dCIsMSwiY2xyLWxvZ291dCJdLFsxLCJjb3B5UmlnaHQiXSxbInRhcmdldCIsIl9ibGFuayIsImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIu'@;
put 'aW8iLCJjbHJEcm9wZG93bkl0ZW0iLCIiXSxbMSwiZHJvcGRvd24tdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxtdCgyLHZXZSwxLDAsImNkcy1pY29uIiwzKSgzLGJXZSwxLDAsImNkcy1pY29uIiw0KSxoZSgpLEd0KDQsImFw'@;
put 'cC1sb2FkaW5nLWluZGljYXRvciIpLGRlKDUsImNsci1kcm9wZG93biIsNSkoNiwiYnV0dG9uIiw2KSg3LCJzcGFuIiksTGUoOCksaGUoKSxtdCg5LHlXZSwyLDEsInNwYW4iLDcpKDEwLF9XZSwyLDMsInNwYW4iLDgpKDExLHdXZSwyLDMsInNwYW4iLDkpKDEyLENXZSwxLDAsImNsci1pY29u'@;
put 'IiwxMCksaGUoKSxtdCgxMyxNV2UsMjMsMywiY2xyLWRyb3Bkb3duLW1lbnUiLDExKSxoZSgpKCkpLDImZCYmKGZlKDIpLHhlKCJuZ0lmIiwhaC5kYXJrTW9kZS52YWx1ZSksZmUoKSx4ZSgibmdJZiIsISFoLmRhcmtNb2RlLnZhbHVlKSxmZSg1KSx3cihoLnVzZXJOYW1lKSxmZSgpLHhlKCJu'@;
put 'Z0lmIiwiTm90IGxvZ2dlZCBpbiIhPT1oLnVzZXJOYW1lJiZoLmlzVml5YSksZmUoKSx4ZSgibmdJZiIsIWguc2FzanNDb25maWcuZGVidWcpLGZlKCkseGUoIm5nSWYiLGguc2FzanNDb25maWcuZGVidWcpLGZlKCkseGUoIm5nSWYiLCFoLmlzVml5YSkpfSxkZXBlbmRlbmNpZXM6W3lvLEIx'@;
put 'LG5sLEdzLGMxLEZsLHVzLEQyLGRzLFcxLFZ5LElkLHNnLGY3LHA3LE55LG1XZV0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmNvbnRlbnRzfS5jb3B5UmlnaHRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTBweH0uY29weVJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde3dvcmQtYnJlYWs6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNX0udXNlci1uYXYtdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgMTBw'@;
put 'eCFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MTAwJX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdodDoxNXB4O2xpbmUtaGVpZ2h0OjNyZW07aGVpZ2h0OjNyZW19LmFwcC1uYXYtZHJvcGRvd25bX25nY29u'@;
put 'dGVudC0lQ09NUCVdID4gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZhZmFmYTtwb3NpdGlvbjpyZWxhdGl2ZX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gPiBidXR0b24uZHJvcGRvd24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXTphZnRlcntjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtvcGFjaXR5Oi4xNTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDo0MHB4O3RvcDoxMHB4fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGJ1dHRvbi5kcm9w'@;
put 'ZG93bi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmJhZGdlLmhpZGRlbltfbmdjb250ZW50LSVDT01QJV17dmlzaWJpbGl0eTpoaWRkZW59LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVde2NvbG9y'@;
put 'OiM1NjU2NTY7cGFkZGluZy1ib3R0b206MH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuc2VwYXJhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MTBweCAwO2JvcmRlci1ib3R0b206MXB4'@;
put 'IHNvbGlkIGdyYXl9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRl'@;
put 'bXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDo0NXB4O2xpbmUtaGVpZ2h0OjQwcHh9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmJhZGdlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTVweDtyaWdodDoyNnB4O21hcmdpbi1yaWdodDowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5k'@;
put 'cm9wZG93bi1pdGVtLmRlYnVnLXN3aXRjaC1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWxvZ291dFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MjBweDt0b3A6MTVweH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRv'@;
put 'd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24t'@;
put 'bWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci10b2dnbGUtd3JhcHBlcnt3aWR0aDoxMDAlO21hcmdpbjowO2hlaWdodDoxMDAlO3BhZGRpbmc6MTBweCAyMHB4fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaW5wdXR7aW5zZXQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2N1cnNvcjpwb2ludGVyfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDphZnRlcnt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50'@;
put 'fS5kZWJ1Zy10b2dnbGUtbGFiZWxbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmctbGVmdDo0MnB4fUBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCl7LnNpZGVuYXYtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBhLm5hdi1saW5rLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6'@;
put 'aW5oZXJpdDtwYWRkaW5nOjE1cHg7YmFja2dyb3VuZDojNTY1NjU2fX0ubmF2LWxpbmsuZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV0gICBzcGFuLmJhZGdlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZX0uYXZhdGFyLWltZ1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6'@;
put 'NDBweDtoZWlnaHQ6NDBweDttYXJnaW4tbGVmdDoxMHB4O2JvcmRlci1yYWRpdXM6NTBweH0nXX0pfX1yZXR1cm4gY30pKCksYWhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFsZXJ0cz1uZXcgV259c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBu'@;
put 'ZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gRVdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWFsZXJ0IiwyKSxnaSgiY2xyQWxlcnRDbG9zZWRDaGFuZ2Ui'@;
put 'LGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBiaShmLmNsb3NlZCxoKXx8KGYuY2xvc2VkPWgpLEN0KGgpfSksRnQoImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vbkFsZXJ0Q2xvc2UoKSl9KSxkZSgxLCJk'@;
put 'aXYiLDMpKDIsInNwYW4iLDQpLExlKDMpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgiY2xyQWxlcnRUeXBlIixhLnR5cGUpKCJjbHJBbGVydEFwcExldmVsIiwhMCkscGkoImNsckFsZXJ0Q2xvc2VkIixhLmNsb3NlZCksZmUoMyksSXIoIiAiLGEubWVzc2FnZSwi'@;
put 'ICIpfX1mdW5jdGlvbiBUV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItYWxlcnRzIiksbXQoMSxFV2UsNCw0LCJjbHItYWxlcnQiLDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nRm9yT2YiLGEuYWxlcnRzKX19bGV0IEFXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y'@;
put 'KGEpe3RoaXMuX2FsZXJ0c1NlcnZpY2U9YSx0aGlzLmFsZXJ0cz1bXSx0aGlzLmhhc09wZW5BbGVydD0hMSx0aGlzLmFsZXJ0c1N1Yj1uZXcgcXR9bmdPbkluaXQoKXt0aGlzLmFsZXJ0c1N1Yj10aGlzLl9hbGVydHNTZXJ2aWNlLmFsZXJ0cy5zdWJzY3JpYmUoYT0+e3RoaXMuYWxlcnRzLnB1'@;
put 'c2goYSksdGhpcy5oYXNPcGVuQWxlcnQ9ITAsYS5lcnImJmNvbnNvbGUuZXJyb3IoYS5lcnIpfSl9b25BbGVydENsb3NlKCl7dGhpcy5oYXNPcGVuQWxlcnQ9dGhpcy5hbGVydHMuc29tZShhPT4hYS5jbG9zZWQpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3'@;
put 'KGR8fGMpKEdlKGFoZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFsZXJ0cyJdXSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWzMsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0QXBwTGV2ZWwiLCJjbHJBbGVydENsb3NlZCIs'@;
put 'ImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiXSxbMSwiYWxlcnQtaXRlbSJdLFsxLCJhbGVydC10ZXh0Il1dLHRlbXBsYXRl'@;
put 'OmZ1bmN0aW9uKGQsaCl7MSZkJiZtdCgwLFRXZSwyLDEsImNsci1hbGVydHMiLDApLDImZCYmeGUoIm5nSWYiLGguaGFzT3BlbkFsZXJ0KX0sZGVwZW5kZW5jaWVzOltscyx5byxYeCxVZGUsSnhdLHN0eWxlczpbImNsci1hbGVydHNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9'@;
put 'Il19KX19cmV0dXJuIGN9KSgpLGZPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNsYXNzZXM9IiJ9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJjb250YWN0LWxpbmsiXV0saW5wdXRzOntjbGFzc2VzOiJjbGFzc2VzIn0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhyZWYiLCJtYWlsdG86c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbz9zdWJqZWN0PUxpY2VuY2UiLDMsIm5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rp'@;
put 'b24oZCxoKXsxJmQmJihkZSgwLCJhIiwwKSxMZSgxLCJzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksaGUoKSksMiZkJiYoVHIoInVuc2V0IiwiIiE9PWguY2xhc3NlcykseGUoIm5nQ2xhc3MiLGguY2xhc3NlcykpfSxkZXBlbmRlbmNpZXM6W3d1XSxzdHlsZXM6WyIudW5zZXRbX25nY29u'@;
put 'dGVudC0lQ09NUCVde2NvbG9yOnVuc2V0fSJdfSl9fXJldHVybiBjfSkoKSxzaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3B0aW9uc1N1YmplY3QkPW5ldyBXbix0aGlzLnJlc3VsdENoYW5nZSQ9bmV3IFdufW9wZW4oYSl7cmV0dXJuIHRoaXMub3B0aW9uc1N1YmplY3Qk'@;
put 'Lm5leHQoe29wZW46ITAsLi4uYX0pLHRoaXMucmVzdWx0Q2hhbmdlJD1uZXcgV24sdGhpcy5yZXN1bHRDaGFuZ2UkLmFzT2JzZXJ2YWJsZSgpfWNsb3NlKGEpe3RoaXMub3B0aW9uc1N1YmplY3QkLm5leHQoe29wZW46ITF9KSx0aGlzLnJlc3VsdENoYW5nZSQubmV4dCh7cGFzc3dvcmQ6YX0p'@;
put 'LHRoaXMucmVzdWx0Q2hhbmdlJC5jb21wbGV0ZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJu'@;
put 'IGN9KSgpO2Z1bmN0aW9uIGtXZShjLGwpezEmYyYmKGRlKDAsInAiLDEzKSxMZSgxLCIgU29ycnkgdGhhdCBkaWRuJ3Qgd29yaywgdHJ5IGFnYWluLiAiKSxoZSgpKX1mdW5jdGlvbiBEV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDIpKDEsImNsci1tb2RhbCIsMyko'@;
put 'MiwiaDMiLDQpLExlKDMsIiBQYXNzd29yZCBQcm90ZWN0ZWQgRmlsZSAiKSxoZSgpLGRlKDQsImRpdiIsNSkoNSwicCIsNiksTGUoNiwiUGxlYXNlIGVudGVyIHBhc3N3b3JkOiIpLGhlKCksZGUoNywiaW5wdXQiLDcsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2Nv'@;
put 'bnN0IGY9T2UoKTtyZXR1cm4gYmkoZi5wYXNzd29yZElucHV0LGgpfHwoZi5wYXNzd29yZElucHV0PWgpLEN0KGgpfSksaGUoKSgpLGRlKDksImRpdiIsOCkoMTAsImRpdiIpLG10KDExLGtXZSwyLDAsInAiLDkpLGhlKCksZGUoMTIsImRpdiIsMTApKDEzLCJidXR0b24iLDExKSxGdCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuY2xvc2UoKSl9KSxMZSgxNCwiIENhbmNlbCAiKSxoZSgpLGRlKDE1LCJidXR0b24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD12byg4KTtyZXR1cm4gQ3QoT2UoKS5jbG9zZShoLnZhbHVlKSl9KSxM'@;
put 'ZSgxNiwiIFVubG9jayAiKSxoZSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwubmdJZixkPXZvKDgpLGg9T2UoKTtmZSgpLHhlKCJjbHJNb2RhbE9wZW4iLGEub3BlbikoImNsck1vZGFsU2l6ZSIsIm1kIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSxwaSgibmdNb2RlbCIsaC5w'@;
put 'YXNzd29yZElucHV0KSxmZSg0KSx4ZSgibmdJZiIsYS5lcnJvciksZmUoNCkseGUoImRpc2FibGVkIixkLnZhbHVlLmxlbmd0aDwxKX19bGV0IElXZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZT1hLHRoaXMub3B0aW9ucyQ9dGhp'@;
put 'cy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLm9wdGlvbnNTdWJqZWN0JCx0aGlzLmZpbGVVbmxvY2tFcnJvcj0hMSx0aGlzLnBhc3N3b3JkSW5wdXQ9IiJ9Y2xvc2UoYSl7dGhpcy5wYXNzd29yZElucHV0PSIiLHRoaXMuZXhjZWxQYXNzd29yZE1vZGFsU2VydmljZS5jbG9zZShhKX1zdGF0'@;
put 'aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShzaGUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1leGNlbC1wYXNzd29yZC1tb2RhbCJdXSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siZmlsZVBhc3N3'@;
put 'b3JkSW5wdXQiLCIiXSxbImNsYXNzIiwiZXhjZWwtcGFzc3dvcmQtcm9vdCIsNCwibmdJZiJdLFsxLCJleGNlbC1wYXNzd29yZC1yb290Il0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0'@;
put 'LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtLTAiXSxbImRhdGEtbHBpZ25vcmUiLCJ0cnVlIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwiaWQiLCJmaWxlUGFzc3dvcmRJbnB1dCIs'@;
put 'InR5cGUiLCJ0ZXh0IiwxLCJjbHItaW5wdXQiLCJkaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsiY2xhc3MiLCJtLTAgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWzEsImJ1dHRvbnMiXSxbInR5cGUiLCJidXR0'@;
put 'b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJtLTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24o'@;
put 'ZCxoKXsxJmQmJihtdCgwLERXZSwxNyw2LCJkaXYiLDEpLFFzKDEsImFzeW5jIikpLDImZCYmeGUoIm5nSWYiLERjKDEsMSxoLm9wdGlvbnMkKSl9LGRlcGVuZGVuY2llczpbeW8sZWMsbmwsR3Msb3UsJHUsRU1dLHN0eWxlczpbIi5leGNlbC1wYXNzd29yZC1yb290W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgICAgLm1vZGFse3otaW5kZXg6MTA2MH0ubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5tb2RhbC1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmJ1dHRv'@;
put 'bnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtnYXA6NXB4fSJdfSl9fXJldHVybiBjfSkoKSxlRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5maWxlT3Zlcj0hMSx0aGlzLmZpbGVEcm9wcGVkPW5ldyBYcix0aGlzLmZpbGVEcmFnZ2VkT3Zlcj1uZXcgWHJ9b25E'@;
put 'cmFnT3ZlcihhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLmNvbnRhaW5zRmlsZXMoYSkmJiF0aGlzLmZpbGVPdmVyJiYodGhpcy5maWxlT3Zlcj0hMCx0aGlzLmZpbGVEcmFnZ2VkT3Zlci5lbWl0KCkpfW9uRHJhZ0xlYXZlKGEpe2EucHJldmVudERlZmF1'@;
put 'bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITF9b25kcm9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZmlsZU92ZXI9ITE7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlci5maWxlcztkLmxlbmd0aD4wJiZ0aGlzLmZpbGVEcm9wcGVk'@;
put 'LmVtaXQoZCl9Y29udGFpbnNGaWxlcyhhKXtpZihhJiZhLmRhdGFUcmFuc2ZlciYmYS5kYXRhVHJhbnNmZXIudHlwZXMpZm9yKGxldCBkPTA7ZDxhLmRhdGFUcmFuc2Zlci50eXBlcy5sZW5ndGg7ZCsrKWlmKCJGaWxlcyI9PWEuZGF0YVRyYW5zZmVyLnR5cGVzW2RdKXJldHVybiEwfXN0YXRp'@;
put 'Y3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiZHJh'@;
put 'Z292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdMZWF2ZSh2KX0pKCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbmRyb3Aodil9KSwyJmQmJlRyKCJmaWxlb3ZlciIsaC5maWxlT3Zlcil9'@;
put 'LG91dHB1dHM6e2ZpbGVEcm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJmaWxlRHJhZ2dlZE92ZXIifX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgbGhlPSgpPT5bXTtmdW5jdGlvbiBSV2UoYyxsKXsxJmMmJihkZSgwLCJwIiw2KSxMZSgxLCJObyByZXF1ZXN0cyBtYWRlIiks'@;
put 'aGUoKSl9ZnVuY3Rpb24gTFdlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1pY29uIiwxMyksaGUoKSl9ZnVuY3Rpb24gT1dlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLEd0KDEsImNsci1pY29uIiwxNCksaGUoKSl9ZnVuY3Rpb24gUFdlKGMsbCl7aWYoMSZjKXtjb25zdCBh'@;
put 'PUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPU9lKDMpLmluZGV4O3JldHVybiBDdChPZSgyKS5nb1RvTG9nTGluZShoLCJyZXF1ZXN0XyIrZiwiZXJyb3IiKSl9KSxkZSgxLCJidXR0b24iLDIyKSxM'@;
put 'ZSgyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIEZXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDE4KSxHdCgxLCJjbHItaWNvbiIsMTkpLExlKDIpLG10KDMsUFdlLDMsMSwiY2xyLXRyZWUtbm9k'@;
put 'ZSIsMjApLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoMiksSXIoIiBFcnJvcnMgKCIsYS5sb2dFcnJvcnMubGVuZ3RoLCIpICIpLGZlKCkseGUoIm5nRm9yT2YiLGEubG9nRXJyb3JzfHxZcygyLGxoZSkpfX1mdW5jdGlvbiBIV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9'@;
put 'TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9T2UoMykuaW5kZXg7cmV0dXJuIEN0KE9lKDIpLmdvVG9Mb2dMaW5lKGgsInJlcXVlc3RfIitmLCJ3YXJuaW5nIikpfSksZGUoMSwiYnV0dG9uIiwyMiks'@;
put 'TGUoMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiBOV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiwxOCksR3QoMSwiY2xyLWljb24iLDIzKSxMZSgyKSxtdCgzLEhXZSwzLDEsImNsci10cmVlLW5v'@;
put 'ZGUiLDIwKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMikuJGltcGxpY2l0O2ZlKDIpLElyKCIgV2FybmluZ3MgKCIsYS5sb2dXYXJuaW5ncy5sZW5ndGgsIikgIiksZmUoKSx4ZSgibmdGb3JPZiIsYS5sb2dXYXJuaW5nc3x8WXMoMixsaGUpKX19ZnVuY3Rpb24gVldlKGMsbCl7aWYoMSZjKXtj'@;
put 'b25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwyNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS5kb3dubG9hZExvZyhoLmxvZ0ZpbGUpKX0pLExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBCV2UoYyxs'@;
put 'KXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJjbHItdHJlZSIpLG10KDIsRldlLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpKDMsTldlLDQsMywiY2xyLXRyZWUtbm9kZSIsMTUpLGhlKCksR3QoNCwiZGl2IiwxNiksbXQoNSxWV2UsMiwwLCJidXR0b24iLDE3KSxoZSgpKSwy'@;
put 'JmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoMikseGUoIm5nSWYiLGEubG9nRXJyb3JzKSxmZSgpLHhlKCJuZ0lmIixhLmxvZ1dhcm5pbmdzKSxmZSgpLHhlKCJpbm5lckhUTUwiLGEubG9nRmlsZSxWNCksZmUoKSx4ZSgibmdJZiIsKG51bGw9PWEubG9nRmlsZT9udWxsOmEubG9nRmls'@;
put 'ZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBqV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDI0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLmRvd25sb2FkU291cmNlQ29kZShoLnNvdXJj'@;
put 'ZUNvZGUpKX0pLExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiB6V2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDI1KSxMZSgyKSxoZSgpLG10KDMsaldlLDIsMCwiYnV0dG9uIiwxNyksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxp'@;
put 'Y2l0O2ZlKDIpLHdyKGEuc291cmNlQ29kZSksZmUoKSx4ZSgibmdJZiIsKG51bGw9PWEuc291cmNlQ29kZT9udWxsOmEuc291cmNlQ29kZS5sZW5ndGgpPjApfX1mdW5jdGlvbiBVV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDI0KSxGdCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLmRvd25sb2FkR2VuZXJhdGVkQ29kZShoLmdlbmVyYXRlZENvZGUpKX0pLExlKDEsIiBEb3dubG9hZCAiKSxoZSgpfX1mdW5jdGlvbiBaV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRl'@;
put 'bnQiKSgxLCJkaXYiLDI1KSxMZSgyKSxoZSgpLG10KDMsVVdlLDIsMCwiYnV0dG9uIiwxNyksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDIpLElyKCIgIixhLmdlbmVyYXRlZENvZGUsIiAiKSxmZSgpLHhlKCJuZ0lmIiwobnVsbD09YS5nZW5lcmF0ZWRDb2RlP251bGw6'@;
put 'YS5nZW5lcmF0ZWRDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIFdXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMykuJGltcGxpY2l0LnNlbGVjdGVkVGFi'@;
put 'bGU9aC5rZXkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7VHIoInNlbGVjdGVkIixPZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT09PWEua2V5KSxmZSgpLElyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBZV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHIt'@;
put 'ZHJvcGRvd24tbWVudSIpLG10KDEsV1dlLDIsMywiZGl2IiwzMCksUXMoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMikuJGltcGxpY2l0O2ZlKCkseGUoIm5nRm9yT2YiLERjKDIsMSxhLlNBU1dPUkspKX19ZnVuY3Rpb24gR1dlKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIs'@;
put 'MzUpKDEsInN0cm9uZyIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpLiRpbXBsaWNpdDtmZSgyKSxJcigiIixhLnNlbGVjdGVkVGFibGUsIiAoZmlyc3QgMTAgcm93cykgIil9fWZ1bmN0aW9uICRXZShjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiksTGUoMSksaGUoKSksMiZjKXtj'@;
put 'b25zdCBhPWwuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIEtXZShjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKS4kaW1wbGljaXQ7ZmUoKSxJcigiICIsZFthLmtleV0sIiAiKX19ZnVu'@;
put 'Y3Rpb24gcVdlKGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSxtdCgxLEtXZSwyLDEsInRkIiwzNyksUXMoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nRm9yT2YiLERjKDIsMSxhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJz'@;
put 'dDEwcm93c1swXSkpfX1mdW5jdGlvbiBYV2UoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMzYpKDEsInRoZWFkIikoMiwidHIiKSxtdCgzLCRXZSwyLDEsInRoIiwzNyksUXMoNCwia2V5dmFsdWUiKSxoZSgpKCksZGUoNSwidGJvZHkiKSxtdCg2LHFXZSwzLDMsInRyIiwzNyksaGUoKSgp'@;
put 'KSwyJmMpe2NvbnN0IGE9T2UoMykuJGltcGxpY2l0O2ZlKDMpLHhlKCJuZ0Zvck9mIixEYyg0LDIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3NbMF0pKSxmZSgzKSx4ZSgibmdGb3JPZiIsYS5TQVNXT1JLW2Euc2VsZWN0ZWRUYWJsZV0uZmlyc3QxMHJvd3MpfX1mdW5j'@;
put 'dGlvbiBKV2UoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSxtdCgxLEdXZSwzLDEsInAiLDMyKSxkZSgyLCJkaXYiLDMzKSxtdCgzLFhXZSw3LDQsInRhYmxlIiwzNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMikuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLGEuc2Vs'@;
put 'ZWN0ZWRUYWJsZSksZmUoMikseGUoIm5nSWYiLGEuc2VsZWN0ZWRUYWJsZSl9fWZ1bmN0aW9uIFFXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10YWIiKSgxLCJjbHItZHJvcGRvd24iLDI2KSgyLCJidXR0b24iLDI3KSxMZSgzLCIgU0FTIFdvcmsgVGFibGVzICIpLEd0'@;
put 'KDQsImNsci1pY29uIiwyOCksaGUoKSxtdCg1LFlXZSwzLDMsImNsci1kcm9wZG93bi1tZW51IiwyOSksaGUoKSxtdCg2LEpXZSw0LDIsIm5nLXRlbXBsYXRlIiwxMiksZ2koImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpO3JldHVybiBiaShmLnRh'@;
put 'Ymxlc0FjdGl2ZSxoKXx8KGYudGFibGVzQWN0aXZlPWgpLEN0KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSx4ZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKSxmZSg1KSxwaSgiY2xySWZBY3RpdmUiLGEudGFibGVzQWN0aXZlKX19ZnVuY3Rpb24gZVllKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXN0YWNrLWJsb2NrIiw4KSgxLCJjbHItc3RhY2stbGFiZWwiKSxMZSgyKSxkZSgzLCJzcGFuIiw5KSxtdCg0LExXZSwyLDAsInNwYW4iLDUpKDUsT1dlLDIsMCwic3BhbiIsNSksaGUoKSgpLGRlKDYsImNsci1zdGFjay1jb250ZW50Iiks'@;
put 'TGUoNyksaGUoKSxkZSg4LCJjbHItc3RhY2stYmxvY2siLDEwKSg5LCJjbHItc3RhY2stY29udGVudCIpKDEwLCJjbHItdGFicyIpKDExLCJjbHItdGFiIikoMTIsImJ1dHRvbiIsMTEpLExlKDEzLCJTQVMgTG9nIiksaGUoKSxtdCgxNCxCV2UsNiw0LCJuZy10ZW1wbGF0ZSIsMTIpLGdpKCJj'@;
put 'bHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKTtyZXR1cm4gYmkoZi5zYXNMb2dBY3RpdmUsaCl8fChmLnNhc0xvZ0FjdGl2ZT1oKSxDdChoKX0pLGhlKCksZGUoMTUsImNsci10YWIiKSgxNiwiYnV0dG9uIiwxMSksTGUoMTcsIlNBUyBTb3VyY2UgQ29k'@;
put 'ZSIpLGhlKCksbXQoMTgseldlLDQsMiwibmctdGVtcGxhdGUiLDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMik7cmV0dXJuIGJpKGYuc2FzU291cmNlQ29kZUFjdGl2ZSxoKXx8KGYuc2FzU291cmNlQ29kZUFjdGl2ZT1oKSxDdChoKX0p'@;
put 'LGhlKCksZGUoMTksImNsci10YWIiKSgyMCwiYnV0dG9uIiwxMSksTGUoMjEsIlNBUyBHZW5lcmF0ZWQgQ29kZSIpLGhlKCksbXQoMjIsWldlLDQsMiwibmctdGVtcGxhdGUiLDEyKSxnaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMik7cmV0dXJu'@;
put 'IGJpKGYuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZSxoKXx8KGYuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT1oKSxDdChoKX0pLGhlKCksbXQoMjMsUVdlLDcsMiwiY2xyLXRhYiIsNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoMik7eGUoImlk'@;
put 'IiwicmVxdWVzdF8iK2QpKCJjbHJTdGFja1ZpZXdMZXZlbCIsMSksZmUoMiksSXIoIiAiLGEuc2VydmljZUxpbmssIiAiKSxmZSgyKSx4ZSgibmdJZiIsKG51bGw9PWEubG9nV2FybmluZ3M/bnVsbDphLmxvZ1dhcm5pbmdzLmxlbmd0aCk+MCksZmUoKSx4ZSgibmdJZiIsKG51bGw9PWEubG9n'@;
put 'RXJyb3JzP251bGw6YS5sb2dFcnJvcnMubGVuZ3RoKT4wKSxmZSgyKSx3cihhLnBhcnNlZFRpbWVzdGFtcCksZmUoNykscGkoImNscklmQWN0aXZlIixoLnNhc0xvZ0FjdGl2ZSksZmUoNCkscGkoImNscklmQWN0aXZlIixoLnNhc1NvdXJjZUNvZGVBY3RpdmUpLGZlKDQpLHBpKCJjbHJJZkFj'@;
put 'dGl2ZSIsaC5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlKSxmZSgpLHhlKCJuZ0lmIixhLlNBU1dPUkspfX1mdW5jdGlvbiB0WWUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItc3RhY2stdmlldyIpLG10KDEsZVllLDI0LDEwLCJjbHItc3RhY2stYmxvY2siLDcpLGhlKCkpLDImYyl7Y29uc3QgYT1P'@;
put 'ZSgpO2ZlKCkseGUoIm5nRm9yT2YiLGEuc2FzanNSZXF1ZXN0cyl9fWxldCBuWWU9KCgpPT57Y2xhc3MgY3tnZXQgb3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1zZXQgb3BlbmVkKGEpe3RoaXMuX29wZW5lZD1hLGEmJnRoaXMubW9kYWxPcGVuZWQoKSx0aGlzLmxvZ2dlclNlcnZpY2Uu'@;
put 'bG9nKHRoaXMuc2FzanNSZXF1ZXN0cyl9Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMubG9nZ2VyU2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuX29wZW5lZD0hMSx0aGlzLm9wZW5lZENoYW5nZT1uZXcgWHIsdGhpcy5zYXNMb2dBY3RpdmU9ITAs'@;
put 'dGhpcy5zYXNTb3VyY2VDb2RlQWN0aXZlPSExLHRoaXMuc2FzR2VuZXJhdGVkQ29kZUFjdGl2ZT0hMSx0aGlzLnRhYmxlc0FjdGl2ZT0hMSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2FzanNSZXF1ZXN0cz1bXX1uZ09uSW5pdCgpe31w'@;
put 'YXJzZUxvZ1RpbWVzdGFtcChhKXtyZXR1cm5gJHt0aGlzLmZvcm1hdFRpbWVzdGFtcChhKX0gJHt0aGlzLnRpbWVzdGFtcEZyb21Ob3coYSl9YH1jdXRBcHBMb2MoYSl7cmV0dXJuIGEucmVwbGFjZSh0aGlzLnNhc2pzQ29uZmlnLmFwcExvYysiLyIsIiIpfWZvcm1hdFRpbWVzdGFtcChhKXty'@;
put 'ZXR1cm4gT2EoYSkuZm9ybWF0KCk/T2EoYSkuZm9ybWF0KCJkZGRkLCBNTU1NIERvIFlZWVksIGg6bW06c3MgYSIpOmF9dGltZXN0YW1wRnJvbU5vdyhhKXtyZXR1cm4gT2EoYSkuZm9ybWF0KCk/YCAoJHtPYShhKS5mcm9tTm93KCl9KWA6IiJ9bW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMub3Bl'@;
put 'bmVkPWEsdGhpcy5vcGVuZWRDaGFuZ2UuZW1pdCh0aGlzLm9wZW5lZCl9bW9kYWxPcGVuZWQoKXt0aGlzLnNhc2pzUmVxdWVzdHM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc1JlcXVlc3RzKCk7Zm9yKGxldCBhIG9mIHRoaXMuc2FzanNSZXF1ZXN0cyl0aGlzLnBhcnNlRXJyb3JzQW5kV2Fybmlu'@;
put 'Z3MoYSksYS5zZXJ2aWNlTGluaz10aGlzLmN1dEFwcExvYyhhLnNlcnZpY2VMaW5rKSxhLnBhcnNlZFRpbWVzdGFtcD10aGlzLnBhcnNlTG9nVGltZXN0YW1wKGEudGltZXN0YW1wKX1nb1RvTG9nTGluZShhLGQsaCl7bGV0IGY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgIyR7ZH0gLmxv'@;
put 'Zy13cmFwcGVyLnNhc2xvZyBmb250YCksdj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nYCk7Zm9yKGxldCBNIG9mIGYpTS50ZXh0Q29udGVudC5pbmNsdWRlcyhhKSYmKHYuc2Nyb2xsVG9wPU0ub2Zmc2V0VG9wLXYub2Zmc2V0VG9wLE0uc3R5bGUu'@;
put 'YmFja2dyb3VuZENvbG9yPSIjNjFhMjIwMmIiLHNldFRpbWVvdXQoKCk9PntNLnN0eWxlPSIifSwzZTMpKX1wYXJzZUVycm9yc0FuZFdhcm5pbmdzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKCFhfHwhYS5sb2dGaWxlfHwic3RyaW5nIiE9dHlwZW9mIGEubG9nRmls'@;
put 'ZXx8dm9pZCAwIT09YS5sb2dFcnJvcnN8fHZvaWQgMCE9PWEubG9nV2FybmluZ3MpcmV0dXJuO2xldCBoPVtdLGY9W10sdj1hLmxvZ0ZpbGUuc3BsaXQoIlxuIik7Zm9yKGxldCBNPTA7TTx2Lmxlbmd0aDtNKyspe2lmKC88Lio+RVJST1IvZ20udGVzdCh2W01dKSl7bGV0IEQ9dltNXS5zdWJz'@;
put 'dHJpbmcodltNXS5pbmRleE9mKCJFIiksdltNXS5sZW5ndGgtMSk7aC5wdXNoKEQpfWVsc2UvXkVSUk9SL2dtLnRlc3QodltNXSkmJihoLnB1c2godltNXSksdltNXT0iPGZvbnQ+Iit2W01dKyI8L2ZvbnQ+Iik7aWYoLzwuKj5XQVJOSU5HL2dtLnRlc3QodltNXSkpe2xldCBEPXZbTV0uc3Vi'@;
put 'c3RyaW5nKHZbTV0uaW5kZXhPZigiVyIpLHZbTV0ubGVuZ3RoLTEpO2YucHVzaChEKX1lbHNlL15XQVJOSU5HL2dtLnRlc3QodltNXSkmJihmLnB1c2godltNXSksdltNXT0iPGZvbnQ+Iit2W01dKyI8L2ZvbnQ+Iil9ZC5sb2dnZXJTZXJ2aWNlLmxvZyhmKSxhLmxvZ0ZpbGU9di5qb2luKCJc'@;
put 'biIpLGEubG9nRXJyb3JzPWgsYS5sb2dXYXJuaW5ncz1mfSkoKX1kb3dubG9hZExvZyhhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBsb2dGaWxlLSR7ZH1gLGEpfWRvd25sb2FkU291cmNlQ29kZShhKXtjb25zdCBk'@;
put 'PShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzb3VyY2VDb2RlLSR7ZH1gLGEpfWRvd25sb2FkR2VuZXJhdGVkQ29kZShhKXtjb25zdCBkPShuZXcgRGF0ZSkudmFsdWVPZigpO3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRG'@;
put 'aWxlKGBnZW5lcmF0ZWRDb2RlLSR7ZH1gLGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHRsKSxHZShNZCksR2UoWXUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXF1ZXN0cy1tb2Rh'@;
put 'bCJdXSxpbnB1dHM6e29wZW5lZDoib3BlbmVkIn0sb3V0cHV0czp7b3BlbmVkQ2hhbmdlOiJvcGVuZWRDaGFuZ2UifSxkZWNsczo4LHZhcnM6NCxjb25zdHM6W1siY2xyTW9kYWxTaXplIiwieGwiLDEsInJlcXVlc3RzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9w'@;
put 'ZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibXQtMCIsImQtaW5saW5lLWJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiLCJoLTcwdmgiXSxbImNsYXNzIiwibm8tcmVxcyIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsIm5vLXJlcXMiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCIsNCwibmdG'@;
put 'b3IiLCJuZ0Zvck9mIl0sWzMsImlkIiwiY2xyU3RhY2tWaWV3TGV2ZWwiXSxbMSwibWwtMTAiXSxbMSwiY29udGVudCJdLFsiY2xyVGFiTGluayIsIiJdLFszLCJjbHJJZkFjdGl2ZUNoYW5nZSIsImNscklmQWN0aXZlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwibWItNSIs'@;
put 'ImNvbG9yLWdyZWVuIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3ItcmVkIl0sWyJjbGFzcyIsImVyci1saW5rcyIsNCwibmdJZiJdLFsxLCJsb2ctd3JhcHBlciIsInNhc2xvZyIsMywiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3Mi'@;
put 'LCJidG4gYnRuLWxpbmsiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImVyci1saW5rcyJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwiY29sb3ItcmVkIl0sWzMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsi'@;
put 'XSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJjb2xvci1ncmVlbiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzEsImxvZy13cmFwcGVyIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ3b3JrLXRhYmxlcy1kcm9wZG93biIsMywiY2xyQ2xv'@;
put 'c2VNZW51T25JdGVtQ2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xhc3MiLCJkcm9wZG93bi1pdGVtIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJzZWxlY3RlZCIsImNsaWNrIiw0LCJuZ0ZvciIsIm5n'@;
put 'Rm9yT2YiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMSwiZHJvcGRvd24taXRlbSIsMywiY2xpY2siXSxbImNsYXNzIiwibXQtMTAiLDQsIm5nSWYiXSxbMSwibWluLWgtNTB2aCJdLFsiY2xhc3MiLCJ0YWJsZSBtdC0xMCIsNCwibmdJZiJdLFsxLCJtdC0xMCJdLFsxLCJ0YWJsZSIsIm10LTEw'@;
put 'Il0sWzQsIm5nRm9yIiwibmdGb3JPZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksRnQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgubW9kYWxPcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLExlKDIsIiBSZXF1'@;
put 'ZXN0IEhpc3RvcnkgIiksZGUoMywicCIsMiksTGUoNCksaGUoKSgpLGRlKDUsImRpdiIsMyksbXQoNixSV2UsMiwwLCJwIiw0KSg3LHRZZSwyLDEsImNsci1zdGFjay12aWV3Iiw1KSxoZSgpKCkpLDImZCYmKHhlKCJjbHJNb2RhbE9wZW4iLGgub3BlbmVkKSxmZSg0KSxJcigiQXBwIExvY2F0'@;
put 'aW9uOiAiLGguc2FzanNDb25maWcuYXBwTG9jLCIiKSxmZSgyKSx4ZSgibmdJZiIsKG51bGw9PWguc2FzanNSZXF1ZXN0cz9udWxsOmguc2FzanNSZXF1ZXN0cy5sZW5ndGgpPDEpLGZlKCkseGUoIm5nSWYiLGgub3BlbmVkJiYobnVsbD09aC5zYXNqc1JlcXVlc3RzP251bGw6aC5zYXNqc1Jl'@;
put 'cXVlc3RzLmxlbmd0aCk+MCkpfSxkZXBlbmRlbmNpZXM6W2xzLHlvLF9HLE9kZSx5RyxMZGUsVGgsUGQsZmcsRmwsb3UsJHUsRnksRDIseW0sd20sUzcsX20sYm0sdzcsc2csZjcscDcsTnkseVJdLHN0eWxlczpbIi5yZXF1ZXN0cy1tb2RhbCAubW9kYWwtaGVhZGVyIC5jbG9zZSBjbHItaWNv'@;
put 'bntkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0gIC5yZXF1ZXN0cy1tb2RhbCAubW9kYWwtY29udGVudHtwYWRkaW5nOjIwcHggMTBweCA1cHh9ICAud29yay10YWJsZXMtZHJvcGRvd24gYnV0dG9ue2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1jb2xvciwgIzhjOGM4YykhaW1wb3J0YW50fSAg'@;
put 'LnN0YWNrLXZpZXd7aGVpZ2h0OmF1dG8haW1wb3J0YW50O21hc2staW1hZ2U6bm9uZSFpbXBvcnRhbnQ7LXdlYmtpdC1tYXNrLWltYWdlOm5vbmUhaW1wb3J0YW50fSAgLmNvbnRlbnQgY2xyLWljb257bWFyZ2luLWJvdHRvbTo1cHh9ICAuY29udGVudCBwcmV7d29yZC1icmVhazpicmVhay1h'@;
put 'bGw7d2hpdGUtc3BhY2U6cHJlLXdyYXA7bWF4LWhlaWdodDppbml0aWFsO292ZXJmbG93OnZpc2libGU7Ym9yZGVyOjB9ICAuY29udGVudCAuc3RhY2stYmxvY2stbGFiZWx7d2lkdGg6MTAwJTtwYWRkaW5nLWxlZnQ6LjZyZW0haW1wb3J0YW50fSAgLmNvbnRlbnQgLnN0YWNrLWJsb2NrLWxh'@;
put 'YmVsIC5zdGFjay12aWV3LWtleXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fSAgLmVyci1saW5rcyAuY2xyLXRyZWVub2RlLWNoaWxkcmVue21heC1oZWlnaHQ6NTVweDtvdmVyZmxvdzphdXRvfS5kcm9wZG93bi1pdGVtLnNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNk'@;
put 'OGUzZTl9Lm5vLXJlcXNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci10b3A6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjEwMTk2MDc4NDMpO3BhZGRpbmctdG9wOjVweDt0ZXh0LWFsaWduOmNlbnRlcn0iXX0pfX1yZXR1cm4gY30pKCk7Y2xhc3Mgcllle2NvbnN0cnVjdG9yKCl7dGhpcy5zYXNT'@;
put 'ZXJ2aWNlPW51bGwsdGhpcy5tZXNzYWdlPSIiLHRoaXMuZGV0YWlscz1uZXcgY2hlfX1jbGFzcyBjaGV7fWZ1bmN0aW9uIGlZZShjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDgpLExlKDEsIiBTQVMgU2VydmljZTogIiksZGUoMiwic3Ryb25nIiksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'T2UoKTtmZSgzKSx3cihhLmRhdGEuc2FzU2VydmljZSl9fWZ1bmN0aW9uIG9ZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOSkoMSwicCIpKDIsInN0cm9uZyIpLExlKDMsIlNZU1dBUk5JTkdURVhUOiIpLGhlKCksTGUoNCksaGUoKSxkZSg1LCJwIikoNiwic3Ryb25nIiksTGUoNywiU1lT'@;
put 'RVJST1JURVhUOiIpLGhlKCksTGUoOCksaGUoKSxkZSg5LCJwIikoMTAsInN0cm9uZyIpLExlKDExLCJNQUM6IiksaGUoKSxMZSgxMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg0KSxJcigiICIsYS5kYXRhLmRldGFpbHMuU1lTV0FSTklOR1RFWFQsIiIpLGZlKDQpLElyKCIgIixh'@;
put 'LmRhdGEuZGV0YWlscy5TWVNFUlJPUlRFWFQsIiIpLGZlKDQpLElyKCIgIixhLmRhdGEuZGV0YWlscy5NQUMsIiIpfX1mdW5jdGlvbiBhWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9l'@;
put 'KCkub3BlbkNvbmZpZ3VyYXRvcigpKX0pLExlKDEsIiBPcGVuIGNvbmZpZ3VyYXRvciAiKSxoZSgpfX1mdW5jdGlvbiBzWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub3BlblJl'@;
put 'cXVlc3RzTW9kYWwoKSl9KSxMZSgxLCIgT3BlbiByZXF1ZXN0cyBtb2RhbCAiKSxoZSgpfX1mdW5jdGlvbiBsWWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZG93bmxvYWRMb2co'@;
put 'KSl9KSxMZSgxLCIgRG93bmxvYWQgbG9nICIpLGhlKCl9fWZ1bmN0aW9uIGNZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5jbG9zZUFib3J0TW9kYWwoKSl9KSxMZSgxLCIgQ2xv'@;
put 'c2UgIiksaGUoKX19ZnVuY3Rpb24gdVllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnJlbG9hZCgpKX0pLExlKDEsIiBSZWxvYWQgIiksaGUoKX19bGV0IGRZZT0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2s9bmV3IFhyLHRoaXMuZGF0YT1uZXcgclllLHRoaXMuZm9yY2VSZWxvYWQ9'@;
put 'ITEsdGhpcy5tb2RhbEVuYWJsZWQ9ITAsdGhpcy5kZWZhdWx0RGF0YT17bW9kYWxUaXRsZToiQWJvcnQgTWVzc2FnZSIsc2FzU2VydmljZTpudWxsLG1lc3NhZ2U6IiIsZGV0YWlsczpuZXcgY2hlfX1uZ09uSW5pdCgpe2xldCBhPXsuLi50aGlzLmRlZmF1bHREYXRhLC4uLnRoaXMuZGF0YX07'@;
put 'dGhpcy5kYXRhPWF9c2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihhKXtjb25zdCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhPy5pbmNsdWRlcygic3RhcnR1cHNlcnZpY2UiKSYmZC5zZXJ2ZXJUeXBlPT09UzAuWS5TYXM5fWNsb3NlQWJvcnRNb2RhbCgpe3RoaXMu'@;
put 'b25Db25maXJtTW9kYWxDbGljay5lbWl0KCl9b3BlbkNvbmZpZ3VyYXRvcigpe3RoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLHRoaXMuY2xvc2VBYm9ydE1vZGFsKCl9ZG93bmxvYWRMb2coKXt0aGlzLmhl'@;
put 'bHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgJHt0aGlzLmRhdGEuc2FzU2VydmljZX0tTE9HYCx0aGlzLmRhdGEuZGV0YWlscz8uTE9HfHwiRXJyb3IgcGFyc2luZyB0aGUgbG9nIil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vcGVuUmVxdWVzdHNNb2RhbCgp'@;
put 'fXJlbG9hZCgpe2xvY2F0aW9uLnJlbG9hZCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFl1KSxHZSh2YyksR2UodGwpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaW5mby1t'@;
put 'b2RhbCJdXSxpbnB1dHM6e2RhdGE6ImRhdGEiLGZvcmNlUmVsb2FkOiJmb3JjZVJlbG9hZCJ9LG91dHB1dHM6e29uQ29uZmlybU1vZGFsQ2xpY2s6Im9uQ29uZmlybU1vZGFsQ2xpY2sifSxkZWNsczoxMyx2YXJzOjEyLGNvbnN0czpbWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNsci1hYm9ydC1t'@;
put 'b2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJzYXNTZXJ2aWNlIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiYWJvcnRNc2ciLDMsImlu'@;
put 'bmVySFRNTCJdLFsiY2xhc3MiLCJzeXN0ZXh0Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IiwzLCJjbGljayIsNCwibmdJZiJdLFsxLCJzYXNTZXJ2aWNlIl0sWzEsInN5c3RleHQiXSxbInR5cGUiLCJidXR0'@;
put 'b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGJpKGgubW9kYWxFbmFibGVkLHYpfHwoaC5tb2RhbEVuYWJs'@;
put 'ZWQ9diksdn0pLGRlKDEsImgzIiwxKSxMZSgyKSxtdCgzLGlZZSw0LDEsInAiLDIpLGhlKCksZGUoNCwiZGl2IiwzKSxHdCg1LCJkaXYiLDQpLG10KDYsb1llLDEzLDMsImRpdiIsNSksaGUoKSxkZSg3LCJkaXYiLDYpLG10KDgsYVllLDIsMCwiYnV0dG9uIiw3KSg5LHNZZSwyLDAsImJ1dHRv'@;
put 'biIsNykoMTAsbFllLDIsMCwiYnV0dG9uIiw3KSgxMSxjWWUsMiwwLCJidXR0b24iLDcpKDEyLHVZZSwyLDAsImJ1dHRvbiIsNyksaGUoKSgpKSwyJmQmJihwaSgiY2xyTW9kYWxPcGVuIixoLm1vZGFsRW5hYmxlZCkseGUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUi'@;
put 'LCFoLmZvcmNlUmVsb2FkKSxmZSgyKSxJcigiICIsaC5kYXRhLm1vZGFsVGl0bGUsIiAiKSxmZSgpLHhlKCJuZ0lmIixoLmRhdGEuc2FzU2VydmljZSYmaC5kYXRhLnNhc1NlcnZpY2UubGVuZ3RoPjApLGZlKDIpLHhlKCJpbm5lckhUTUwiLGguZGF0YS5tZXNzYWdlLFY0KSxmZSgpLHhlKCJu'@;
put 'Z0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKDIpLHhlKCJuZ0lmIixoLnNob3dDb25maWd1cmF0b3JCdXR0b24oaC5kYXRhLnNhc1NlcnZpY2UpKSxmZSgpLHhlKCJuZ0lmIixudWxsIT09aC5kYXRhLmRldGFpbHMpLGZlKCkseGUoIm5nSWYiLChudWxsPT1oLmRhdGEuZGV0YWlscz9u'@;
put 'dWxsOmguZGF0YS5kZXRhaWxzLkxPRykmJihudWxsPT1oLmRhdGEuZGV0YWlsc3x8bnVsbD09aC5kYXRhLmRldGFpbHMuTE9HP251bGw6aC5kYXRhLmRldGFpbHMuTE9HLnRyaW0oKS5sZW5ndGgpPjApLGZlKCkseGUoIm5nSWYiLCFoLmZvcmNlUmVsb2FkKSxmZSgpLHhlKCJuZ0lmIixoLmZv'@;
put 'cmNlUmVsb2FkKSl9LGRlcGVuZGVuY2llczpbeW8sb3UsJHUsZUVdLHN0eWxlczpbIi5jbHItYWJvcnQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtdGl0bGUtd3JhcHBlcnt3aWR0aDoxMDAlfS5jbHItYWJvcnQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9k'@;
put 'YWx7ei1pbmRleDoyMDUwfS5tb2RhbC10aXRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LnNhc1NlcnZpY2VbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7bWFyZ2luOjB9Lm1vZGFsLWZvb3Rlcltfbmdjb250ZW50'@;
put 'LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4dFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0bzttYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgI2RjZGNkY30uc3lzdGV4'@;
put 'dFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7d29yZC13cmFwOmJyZWFrLXdvcmR9Il19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGhZZT0oKT0+WyIvIl0sdWhlPSgpPT5bIi92aWV3Il0sZGhlPSgpPT5bIi9ob21lIl0sTUc9KCk9PlsiL3Jl'@;
put 'dmlldy9zdWJtaXR0ZWQiXSxmWWU9KCk9PlsiL3Jldmlldy9hcHByb3ZlIl0scFllPSgpPT5bIi9yZXZpZXcvaGlzdG9yeSJdO2Z1bmN0aW9uIGdZZShjLGwpezEmYyYmKGNpKDApLGRlKDEsImRpdiIsMTcpKDIsImRpdiIsMTgpKDMsImRpdiIsMTkpLEd0KDQsImNkcy1pY29uIiwyMCksaGUo'@;
put 'KSxkZSg1LCJkaXYiLDIxKSxMZSg2LCIgRGF0YSBDb250cm9sbGVyIChGUkVFIFRpZXIpIC0gdG8gdXBncmFkZSBjb250YWN0ICIpLEd0KDcsImNvbnRhY3QtbGluayIsMjIpLGhlKCkoKSgpLGRlKDgsImEiLDIzKSxMZSg5LCJVcGRhdGUgTGljZW5jZSBLZXkiKSxoZSgpLHVpKCkpfWZ1bmN0'@;
put 'aW9uIG1ZZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLGRlKDEsImRpdiIsMTcpKDIsImRpdiIsMTgpKDMsImRpdiIsMTkpLEd0KDQsImNkcy1pY29uIiwyMCksaGUoKSxkZSg1LCJkaXYiLDIxKSxMZSg2LCIgRGF0YSBDb250cm9sbGVyIChGUkVFIFRpZXIpIC0gUHJvYmxlbSB3'@;
put 'aXRoIGxpY2VuY2UgIiksaGUoKSgpKCksZGUoNywiYSIsMjQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDMpO3JldHVybiBDdChoLmxpY2VuY2VQcm9ibGVtRGV0YWlscyhoLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSl9KSxMZSg4LCJNb3JlIGRldGFpbHMiKSxoZSgp'@;
put 'LHVpKCl9fWZ1bmN0aW9uIHZZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTYpLG10KDEsZ1llLDEwLDAsIm5nLWNvbnRhaW5lciIsMSkoMixtWWUsOSwwLCJuZy1jb250YWluZXIiLDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIixudWxsPT09YS5saWNlbmNl'@;
put 'UHJvYmxlbS52YWx1ZSksZmUoKSx4ZSgibmdJZiIsbnVsbCE9PWEubGljZW5jZVByb2JsZW0udmFsdWUpfX1mdW5jdGlvbiBiWWUoYyxsKXsxJmMmJihkZSgwLCJhIiwyMyksTGUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IiksaGUoKSl9ZnVuY3Rpb24geVllKGMsbCl7aWYoMSZjJiYoZGUoMCwi'@;
put 'ZGl2IiwyNSkoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLExlKDYpLEd0KDcsImNvbnRhY3QtbGluayIsMjIpLExlKDgpLGhlKCkoKSgpLG10KDksYlllLDIsMCwiYSIsMjYpLGhlKCkpLDImYyl7Y29u'@;
put 'c3QgYT1PZSgyKTtmZSg2KSxqdSgiIFRoaXMgbGljZW5zZSBrZXkgd2lsbCBleHBpcmUgaW4gIixhLmxpY2Vuc2VFeHBpcmluZ0RheXMsIiAiLDE9PT1hLmxpY2Vuc2VFeHBpcmluZ0RheXM/ImRheSI6ImRheXMiLCIuIFBsZWFzZSBjb250YWN0ICIpLGZlKDIpLElyKCIgb3IgeW91ciByZXNl'@;
put 'bGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0ZSBpZCAiLGEuc3lzc2l0ZS5nZXRWYWx1ZSgpLCIuICIpLGZlKCkseGUoIm5nSWYiLCFhLmZyZWVUaWVyQmFubmVyKX19ZnVuY3Rpb24gX1llKGMsbCl7MSZjJiYoZGUoMCwiYSIsMjMpLExlKDEsIlVwZGF0ZSBMaWNl'@;
put 'bmNlIEtleSIpLGhlKCkpfWZ1bmN0aW9uIHdZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjUpKDEsImRpdiIsMTcpKDIsImRpdiIsMTgpKDMsImRpdiIsMTkpLEd0KDQsImNkcy1pY29uIiwyMCksaGUoKSxkZSg1LCJkaXYiLDIxKSxMZSg2LCIgVGhlIHJlZ2lzdGVyZWQgbnVtYmVyIG9m'@;
put 'IHVzZXJzIGV4Y2VlZHMgdGhlIGxpbWl0IHNwZWNpZmllZCBmb3IgeW91ciBsaWNlbnNlLiBQbGVhc2UgY29udGFjdCAiKSxHdCg3LCJjb250YWN0LWxpbmsiLDIyKSxMZSg4KSxoZSgpKCkoKSxtdCg5LF9ZZSwyLDAsImEiLDI2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoOCksSXIo'@;
put 'IiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlIGZvciBzaXRlIGlkICIsYS5zeXNzaXRlLmdldFZhbHVlKCksIi4gIiksZmUoKSx4ZSgibmdJZiIsIWEubGljZW5zZUV4cGlyaW5nRGF5cyYmIWEuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiBDWWUoYyxs'@;
put 'KXtpZigxJmMmJihjaSgwKSxtdCgxLHZZZSwzLDIsImRpdiIsMTQpKDIseVllLDEwLDQsImRpdiIsMTUpKDMsd1llLDEwLDIsImRpdiIsMTUpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLGEuZnJlZVRpZXJCYW5uZXImJighYS5saWNlbnNlRXhwaXJpbmdEYXlzfHxh'@;
put 'LmxpY2Vuc2VFeHBpcmluZ0RheXM8MCkpLGZlKCkseGUoIm5nSWYiLGEubGljZW5zZUV4cGlyaW5nRGF5cyYmIWEuZnJlZVRpZXJCYW5uZXIpLGZlKCkseGUoIm5nSWYiLGEuYXBwT3ZlckNhcGFjaXR5KX19ZnVuY3Rpb24gU1llKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2'@;
put 'IiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnRvZ2dsZVNpZGViYXIoKSl9KSxHdCgxLCJjbHItaWNvbiIsMjgpLGhlKCl9fWZ1bmN0aW9uIE1ZZShjLGwpezEmYyYmKGRlKDAsImEiLDI5KSxHdCgxLCJpbWciLDMwKSgyLCJpbWciLDMxKSxoZSgpKSwy'@;
put 'JmMmJnhlKCJyb3V0ZXJMaW5rIixZcygxLGhZZSkpfWZ1bmN0aW9uIHhZZShjLGwpezEmYyYmKGRlKDAsImEiKSxHdCgxLCJzcGFuIiwzMiksaGUoKSl9ZnVuY3Rpb24gRVllKGMsbCl7MSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDQwKSgxLCJhIiw0MSksTGUoMiwiVklFVyIpLGhl'@;
put 'KCksZGUoMywiYSIsNDEpLExlKDQsIkxPQUQiKSxoZSgpLGRlKDUsImEiLDQxKSxMZSg2LCJSRVZJRVciKSxoZSgpKCkpLDImYyYmKGZlKCkseGUoInJvdXRlckxpbmsiLFlzKDMsdWhlKSksZmUoMikseGUoInJvdXRlckxpbmsiLFlzKDQsZGhlKSksZmUoMikseGUoInJvdXRlckxpbmsiLFlz'@;
put 'KDUsTUcpKSl9ZnVuY3Rpb24gVFllKGMsbCl7aWYoMSZjJiYoY2koMCksZGUoMSwiZGl2IiwzMykoMiwiY2xyLWRyb3Bkb3duIikoMywiYnV0dG9uIiwzNCksTGUoNCwiIE1lbnUgIiksaGUoKSxtdCg1LEVZZSw3LDYsImNsci1kcm9wZG93bi1tZW51IiwzNSksaGUoKSgpLGRlKDYsImRpdiIs'@;
put 'MzYpKDcsImEiLDM3KSxMZSg4LCJWSUVXIiksaGUoKSxkZSg5LCJhIiwzOCksTGUoMTAsIkxPQUQiKSxoZSgpLGRlKDExLCJhIiwzOSksTGUoMTIsIlJFVklFVyIpLGhlKCkoKSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg3KSx4ZSgicm91dGVyTGluayIsWXMoNyx1aGUpKSxmZSgyKSxU'@;
put 'cigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoImVkaXRvciIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImVkaXQtcmVjb3JkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiaG9tZSIpKSx4ZSgicm91dGVyTGluayIsWXMoOCxkaGUpKSxmZSgyKSxUcigiYWN0aXZlIixhLnJvdXRl'@;
put 'ci51cmwuaW5jbHVkZXMoInN1Ym1pdHRlZCIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJoaXN0b3J5IikpLHhlKCJyb3V0ZXJMaW5rIixZcyg5LE1HKSl9fWZ1bmN0aW9uIEFZZShjLGwpe2lmKDEmYyYmKGRlKDAsIm5hdiIsNDIp'@;
put 'KDEsInVsIiw0MykoMiwibGkiLDQ0KSgzLCJhIiwzNyksTGUoNCwiU1VCTUlUIiksaGUoKSgpLGRlKDUsImxpIiw0NCkoNiwiYSIsMzcpLExlKDcsIkFQUFJPVkUiKSxoZSgpKCksZGUoOCwibGkiLDQ0KSg5LCJhIiwzNyksTGUoMTAsIkhJU1RPUlkiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0'@;
put 'IGE9T2UoKTtmZSgzKSx4ZSgicm91dGVyTGluayIsWXMoNSxNRykpLGZlKDMpLFRyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpKSx4ZSgicm91dGVyTGluayIsWXMoNixmWWUpKSxmZSgzKSx4ZSgicm91dGVyTGluayIsWXMoNyxwWWUpKX19ZnVuY3Rpb24ga1ll'@;
put 'KGMsbCl7MSZjJiZHdCgwLCJhcHAtYWxlcnRzIil9ZnVuY3Rpb24gRFllKGMsbCl7MSZjJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9ZnVuY3Rpb24gSVllKGMsbCl7MSZjJiZHdCgwLCJhcHAtYWxlcnRzIil9ZnVuY3Rpb24gUlllKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYXBw'@;
put 'LWluZm8tbW9kYWwiLDQ1KSxGdCgib25Db25maXJtTW9kYWxDbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5jbG9zZUFib3J0TW9kYWwoaC5pZCkpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpO3hlKCJkYXRh'@;
put 'IixhKSgiZm9yY2VSZWxvYWQiLCFkLnN0YXJ0dXBEYXRhTG9hZGVkJiYxPT09ZC5zYXNqc0Fib3J0cy5sZW5ndGgpfX1mdW5jdGlvbiBMWWUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ5KSxHdCgxLCJkaXYiLDUwKSgyLCJkaXYiLDUxKSgzLCJkaXYiLDUyKSxoZSgpKX1mdW5jdGlvbiBPWWUo'@;
put 'YyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ2KSxHdCgxLCJpbWciLDQ3KSxtdCgyLExZZSw0LDAsImRpdiIsNDgpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLHhlKCJuZ0lmIixudWxsPT09YS5hcHBBY3RpdmUpfX1Fcy5hZGRJY29ucyhbIm1vb24iLHtvdXRsaW5lOic8cGF0aCBk'@;
put 'PSJNMTguMTEgMzIuMDAwM0MxMC4zMyAzMi4wMDAzIDQgMjUuNzIwMyA0IDE3Ljk5MDNDNCAxMC4yNjAzIDEwLjAzIDQuMjAwMyAxNy43MyA0LjAwMDNDMTguMTUgMy45OTAzIDE4LjUyIDQuMjMwMyAxOC42OCA0LjYxMDNDMTguODQgNC45OTAzIDE4Ljc1IDUuNDMwMyAxOC40NiA1LjcyMDND'@;
put 'MTYuNjkgNy40NTAzIDE1LjcxIDkuNzYwMyAxNS43MSAxMi4yMTAzQzE1LjcxIDE3LjI0MDMgMTkuODMgMjEuMzMwMyAyNC45MSAyMS4zMzAzQzI2LjkgMjEuMzMwMyAyOC44IDIwLjcwMDMgMzAuNDEgMTkuNTEwM0MzMC43NCAxOS4yNzAzIDMxLjE5IDE5LjI1MDMgMzEuNTMgMTkuNDYwM0Mz'@;
put 'MS44OCAxOS42ODAzIDMyLjA2IDIwLjA4MDMgMzEuOTkgMjAuNDkwM0MzMC43OCAyNy4xNjAzIDI0Ljk0IDMyLjAwMDMgMTguMTEgMzIuMDAwM1pNMTUuNDMgNi4yOTAzQzkuOTkgNy40ODAzIDYgMTIuMjQwMyA2IDE3Ljk5MDNDNiAyNC42MTAzIDExLjQzIDMwLjAwMDMgMTguMTEgMzAuMDAw'@;
put 'M0MyMy4xNiAzMC4wMDAzIDI3LjU4IDI2LjkyMDMgMjkuMzcgMjIuNDAwM0MyNy45NyAyMy4wMTAzIDI2LjQ2IDIzLjMyMDMgMjQuOTEgMjMuMzIwM0MxOC43NCAyMy4zMjAzIDEzLjcxIDE4LjMzMDMgMTMuNzEgMTIuMjAwM0MxMy43MSAxMC4wNzAzIDE0LjMxIDguMDMwMyAxNS40MyA2LjI4'@;
put 'MDNWNi4yOTAzWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOC4xMSAzMi4wMDAzQzEwLjMzIDMyLjAwMDMgNCAyNS43MjAzIDQgMTcuOTkwM0M0IDEwLjI2MDMgMTAuMDMgNC4yMDAzIDE3LjczIDQuMDAwM0MxOC4xNSAzLjk5MDMgMTguNTIgNC4yMzAzIDE4LjY4IDQuNjEwM0MxOC44NCA0Ljk5'@;
put 'MDMgMTguNzUgNS40MzAzIDE4LjQ2IDUuNzIwM0MxNi42OSA3LjQ1MDMgMTUuNzEgOS43NjAzIDE1LjcxIDEyLjIxMDNDMTUuNzEgMTcuMjQwMyAxOS44MyAyMS4zMzAzIDI0LjkxIDIxLjMzMDNDMjYuOSAyMS4zMzAzIDI4LjggMjAuNzAwMyAzMC40MSAxOS41MTAzQzMwLjc0IDE5LjI3MDMg'@;
put 'MzEuMTkgMTkuMjUwMyAzMS41MyAxOS40NjAzQzMxLjg4IDE5LjY4MDMgMzIuMDYgMjAuMDgwMyAzMS45OSAyMC40OTAzQzMwLjc4IDI3LjE2MDMgMjQuOTQgMzIuMDAwMyAxOC4xMSAzMi4wMDAzWiIvPid9XSxbInN1biIse291dGxpbmU6JzxwYXRoIGQ9Ik04LjgxIDEwLjIyQzkuMDEgMTAu'@;
put 'NDIgOS4yNiAxMC41MSA5LjUyIDEwLjUxQzkuNzggMTAuNTEgMTAuMDMgMTAuNDEgMTAuMjMgMTAuMjJDMTAuNjIgOS44MyAxMC42MiA5LjIgMTAuMjMgOC44MUw4LjExIDYuNjlDNy43MiA2LjMgNy4wOSA2LjMgNi43IDYuNjlDNi4zMSA3LjA4IDYuMzEgNy43MSA2LjcgOC4xTDguODIgMTAu'@;
put 'MjJIOC44MVpNNyAxOEM3IDE3LjQ1IDYuNTUgMTcgNiAxN0gzQzIuNDUgMTcgMiAxNy40NSAyIDE4QzIgMTguNTUgMi40NSAxOSAzIDE5SDZDNi41NSAxOSA3IDE4LjU1IDcgMThaTTE4IDdDMTguNTUgNyAxOSA2LjU1IDE5IDZWM0MxOSAyLjQ1IDE4LjU1IDIgMTggMkMxNy40NSAyIDE3IDIu'@;
put 'NDUgMTcgM1Y2QzE3IDYuNTUgMTcuNDUgNyAxOCA3Wk0yNi40OSAxMC41MUMyNi43NSAxMC41MSAyNyAxMC40MSAyNy4yIDEwLjIyTDI5LjMyIDguMUMyOS43MSA3LjcxIDI5LjcxIDcuMDggMjkuMzIgNi42OUMyOC45MyA2LjMgMjguMyA2LjMgMjcuOTEgNi42OUwyNS43OSA4LjgxQzI1LjQg'@;
put 'OS4yIDI1LjQgOS44MyAyNS43OSAxMC4yMkMyNS45OSAxMC40MiAyNi4yNCAxMC41MSAyNi41IDEwLjUxSDI2LjQ5Wk04LjgxIDI1Ljc4TDYuNjkgMjcuOUM2LjMgMjguMjkgNi4zIDI4LjkyIDYuNjkgMjkuMzFDNi44OSAyOS41MSA3LjE0IDI5LjYgNy40IDI5LjZDNy42NiAyOS42IDcuOTEg'@;
put 'MjkuNSA4LjExIDI5LjMxTDEwLjIzIDI3LjE5QzEwLjYyIDI2LjggMTAuNjIgMjYuMTcgMTAuMjMgMjUuNzhDOS44NCAyNS4zOSA5LjIxIDI1LjM5IDguODIgMjUuNzhIOC44MVpNMzMgMTdIMzBDMjkuNDUgMTcgMjkgMTcuNDUgMjkgMThDMjkgMTguNTUgMjkuNDUgMTkgMzAgMTlIMzNDMzMu'@;
put 'NTUgMTkgMzQgMTguNTUgMzQgMThDMzQgMTcuNDUgMzMuNTUgMTcgMzMgMTdaTTE4IDlDMTMuMDQgOSA5IDEzLjA0IDkgMThDOSAyMi45NiAxMy4wNCAyNyAxOCAyN0MyMi45NiAyNyAyNyAyMi45NiAyNyAxOEMyNyAxMy4wNCAyMi45NiA5IDE4IDlaTTE4IDI1QzE0LjE0IDI1IDExIDIxLjg2'@;
put 'IDExIDE4QzExIDE0LjE0IDE0LjE0IDExIDE4IDExQzIxLjg2IDExIDI1IDE0LjE0IDI1IDE4QzI1IDIxLjg2IDIxLjg2IDI1IDE4IDI1Wk0yNy4xOSAyNS43OEMyNi44IDI1LjM5IDI2LjE3IDI1LjM5IDI1Ljc4IDI1Ljc4QzI1LjM5IDI2LjE3IDI1LjM5IDI2LjggMjUuNzggMjcuMTlMMjcu'@;
put 'OSAyOS4zMUMyOC4xIDI5LjUxIDI4LjM1IDI5LjYgMjguNjEgMjkuNkMyOC44NyAyOS42IDI5LjEyIDI5LjUgMjkuMzIgMjkuMzFDMjkuNzEgMjguOTIgMjkuNzEgMjguMjkgMjkuMzIgMjcuOUwyNy4yIDI1Ljc4SDI3LjE5Wk0xOCAyOUMxNy40NSAyOSAxNyAyOS40NSAxNyAzMFYzM0MxNyAz'@;
put 'My41NSAxNy40NSAzNCAxOCAzNEMxOC41NSAzNCAxOSAzMy41NSAxOSAzM1YzMEMxOSAyOS40NSAxOC41NSAyOSAxOCAyOVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNOC44MSAyNS43OEw2LjY5IDI3LjlDNi4zIDI4LjI5IDYuMyAyOC45MiA2LjY5IDI5LjMxQzYuODkgMjkuNTEgNy4xNCAyOS42'@;
put 'IDcuNCAyOS42QzcuNjYgMjkuNiA3LjkxIDI5LjUgOC4xMSAyOS4zMUwxMC4yMyAyNy4xOUMxMC42MiAyNi44IDEwLjYyIDI2LjE3IDEwLjIzIDI1Ljc4QzkuODQgMjUuMzkgOS4yMSAyNS4zOSA4LjgyIDI1Ljc4SDguODFaTTcgMThDNyAxNy40NSA2LjU1IDE3IDYgMTdIM0MyLjQ1IDE3IDIg'@;
put 'MTcuNDUgMiAxOEMyIDE4LjU1IDIuNDUgMTkgMyAxOUg2QzYuNTUgMTkgNyAxOC41NSA3IDE4Wk04LjgxIDEwLjIyQzkuMDEgMTAuNDIgOS4yNiAxMC41MSA5LjUyIDEwLjUxQzkuNzggMTAuNTEgMTAuMDMgMTAuNDEgMTAuMjMgMTAuMjJDMTAuNjIgOS44MyAxMC42MiA5LjIgMTAuMjMgOC44'@;
put 'MUw4LjExIDYuNjlDNy43MiA2LjMgNy4wOSA2LjMgNi43IDYuNjlDNi4zMSA3LjA4IDYuMzEgNy43MSA2LjcgOC4xTDguODIgMTAuMjJIOC44MVpNMjYuNDkgMTAuNTFDMjYuNzUgMTAuNTEgMjcgMTAuNDEgMjcuMiAxMC4yMkwyOS4zMiA4LjFDMjkuNzEgNy43MSAyOS43MSA3LjA4IDI5LjMy'@;
put 'IDYuNjlDMjguOTMgNi4zIDI4LjMgNi4zIDI3LjkxIDYuNjlMMjUuNzkgOC44MUMyNS40IDkuMiAyNS40IDkuODMgMjUuNzkgMTAuMjJDMjUuOTkgMTAuNDIgMjYuMjQgMTAuNTEgMjYuNSAxMC41MUgyNi40OVpNMTggN0MxOC41NSA3IDE5IDYuNTUgMTkgNlYzQzE5IDIuNDUgMTguNTUgMiAx'@;
put 'OCAyQzE3LjQ1IDIgMTcgMi40NSAxNyAzVjZDMTcgNi41NSAxNy40NSA3IDE4IDdaTTE4IDI5QzE3LjQ1IDI5IDE3IDI5LjQ1IDE3IDMwVjMzQzE3IDMzLjU1IDE3LjQ1IDM0IDE4IDM0QzE4LjU1IDM0IDE5IDMzLjU1IDE5IDMzVjMwQzE5IDI5LjQ1IDE4LjU1IDI5IDE4IDI5Wk0zMyAxN0gz'@;
put 'MEMyOS40NSAxNyAyOSAxNy40NSAyOSAxOEMyOSAxOC41NSAyOS40NSAxOSAzMCAxOUgzM0MzMy41NSAxOSAzNCAxOC41NSAzNCAxOEMzNCAxNy40NSAzMy41NSAxNyAzMyAxN1pNMjcuMTkgMjUuNzhDMjYuOCAyNS4zOSAyNi4xNyAyNS4zOSAyNS43OCAyNS43OEMyNS4zOSAyNi4xNyAyNS4z'@;
put 'OSAyNi44IDI1Ljc4IDI3LjE5TDI3LjkgMjkuMzFDMjguMSAyOS41MSAyOC4zNSAyOS42IDI4LjYxIDI5LjZDMjguODcgMjkuNiAyOS4xMiAyOS41IDI5LjMyIDI5LjMxQzI5LjcxIDI4LjkyIDI5LjcxIDI4LjI5IDI5LjMyIDI3LjlMMjcuMiAyNS43OEgyNy4xOVpNMTggOUMxMy4wNCA5IDkg'@;
put 'MTMuMDQgOSAxOEM5IDIyLjk2IDEzLjA0IDI3IDE4IDI3QzIyLjk2IDI3IDI3IDIyLjk2IDI3IDE4QzI3IDEzLjA0IDIyLjk2IDkgMTggOVoiLz4nfV0sWyJleGNsYW1hdGlvbi10cmlhbmdsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNy45OTQzIDIwLjhDMTguNTQ0IDIwLjggMTguOTkzOCAy'@;
put 'MC4zNSAxOC45OTM4IDE5LjhWMTRDMTguOTkzOCAxMy40NSAxOC41NDQgMTMgMTcuOTk0MyAxM0MxNy40NDQ1IDEzIDE2Ljk5NDcgMTMuNDUgMTYuOTk0NyAxNFYxOS44QzE2Ljk5NDcgMjAuMzUgMTcuNDQ0NSAyMC44IDE3Ljk5NDMgMjAuOFpNMTguODQzOSAyMi45NUMxOC43MjM5IDIyLjg0'@;
put 'IDE4LjU5NCAyMi43NSAxOC40NTQxIDIyLjY5QzE4LjE2NDIgMjIuNTcgMTcuODI0MyAyMi41NyAxNy41MzQ1IDIyLjY5QzE3LjM5NDUgMjIuNzUgMTcuMjY0NiAyMi44NCAxNy4xNDQ2IDIyLjk1QzE2LjkyNDcgMjMuMTggMTYuNzk0OCAyMy40OCAxNi43OTQ4IDIzLjhDMTYuNzk0OCAyNC4x'@;
put 'MiAxNi45MjQ3IDI0LjQyIDE3LjE0NDYgMjQuNjVDMTcuMjY0NiAyNC43NiAxNy4zOTQ1IDI0Ljg1IDE3LjUzNDUgMjQuOTFDMTcuNjg0NCAyNC45NyAxNy44MzQzIDI1IDE3Ljk5NDMgMjVDMTguMTU0MiAyNSAxOC4zMDQxIDI0Ljk3IDE4LjQ1NDEgMjQuOTFDMTguNTk0IDI0Ljg1IDE4Ljcy'@;
put 'MzkgMjQuNzYgMTguODQzOSAyNC42NUMxOS4wNjM4IDI0LjQyIDE5LjE5MzcgMjQuMTIgMTkuMTkzNyAyMy44QzE5LjE5MzcgMjMuNjQgMTkuMTYzNyAyMy40OSAxOS4xMDM4IDIzLjM0QzE5LjA0MzggMjMuMiAxOC45NTM4IDIzLjA2IDE4Ljg0MzkgMjIuOTVaTTMwLjU5ODYgMjUuNDNMMjAu'@;
put 'NjYzMSA3LjU3QzIwLjExMzMgNi41OSAxOS4xMjM4IDYgMTcuOTk0MyA2QzE2Ljg2NDggNiAxNS44NzUyIDYuNTkgMTUuMzI1NCA3LjU3TDUuMzg5ODggMjUuNDNDNC44NTAxMiAyNi4zOSA0Ljg3MDExIDI3LjUzIDUuNDE5ODcgMjguNDhDNS45Njk2MiAyOS40MyA2Ljk1OTE4IDMwIDguMDU4'@;
put 'NjkgMzBIMjcuOTI5OEMyOS4wMjkzIDMwIDMwLjAwODkgMjkuNDMgMzAuNTY4NiAyOC40OEMzMS4xMjg0IDI3LjUzIDMxLjEzODQgMjYuMzkgMzAuNTk4NiAyNS40M1pNMjguODQ5NCAyNy40N0MyOC43NTk1IDI3LjYzIDI4LjQ3OTYgMjggMjcuOTM5OCAyOEg4LjA1ODY5QzcuNTA4OTQgMjgg'@;
put 'Ny4yMzkwNiAyNy42MyA3LjE0OTEgMjcuNDdDNy4wNTkxNCAyNy4zMSA2Ljg2OTIyIDI2Ljg5IDcuMTQ5MSAyNi40MUwxNy4wNjQ3IDguNTVDMTcuMzM0NiA4LjA2IDE3LjgwNDMgOCAxNy45ODQzIDhDMTguMTY0MiA4IDE4LjYzNCA4LjA1IDE4LjkwMzkgOC41NUwyOC44Mzk0IDI2LjQxQzI5'@;
put 'LjEwOTMgMjYuODkgMjguOTE5NCAyNy4zMSAyOC44Mjk0IDI3LjQ3SDI4Ljg0OTRaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMwLjU5ODYgMjUuNDNMMjAuNjYzMSA3LjU3QzIwLjExMzMgNi41OSAxOS4xMjM4IDYgMTcuOTk0MyA2QzE2Ljg2NDggNiAxNS44NzUyIDYuNTkgMTUuMzI1NCA3LjU3'@;
put 'TDUuMzg5ODggMjUuNDNDNC44NTAxMiAyNi4zOSA0Ljg3MDExIDI3LjUzIDUuNDE5ODcgMjguNDhDNS45Njk2MiAyOS40MyA2Ljk1OTE4IDMwIDguMDU4NjkgMzBIMjcuOTI5OEMyOS4wMjkzIDMwIDMwLjAwODkgMjkuNDMgMzAuNTY4NiAyOC40OEMzMS4xMjg0IDI3LjUzIDMxLjEzODQgMjYu'@;
put 'MzkgMzAuNTk4NiAyNS40M1pNMTYuNzk0OCAxMy41QzE2Ljc5NDggMTIuODQgMTcuMzM0NiAxMi4zIDE3Ljk5NDMgMTIuM0MxOC42NTQgMTIuMyAxOS4xOTM3IDEyLjg0IDE5LjE5MzcgMTMuNVYxOS4zQzE5LjE5MzcgMTkuOTYgMTguNjU0IDIwLjUgMTcuOTk0MyAyMC41QzE3LjMzNDYgMjAu'@;
put 'NSAxNi43OTQ4IDE5Ljk2IDE2Ljc5NDggMTkuM1YxMy41Wk0xOC45NzM4IDI1QzE4LjgzMzkgMjUuMTMgMTguNjg0IDI1LjIzIDE4LjUyNCAyNS4zQzE4LjM0NDEgMjUuMzcgMTguMTc0MiAyNS40MSAxNy45OTQzIDI1LjQxQzE3LjgxNDMgMjUuNDEgMTcuNjM0NCAyNS4zOCAxNy40NTQ1IDI1'@;
put 'LjNDMTcuMzA0NiAyNS4yMyAxNy4xNTQ2IDI1LjEzIDE2Ljk5NDcgMjQuOTlDMTYuNzM0OCAyNC43MiAxNi41ODQ5IDI0LjM3IDE2LjU4NDkgMjRDMTYuNTg0OSAyMy42MyAxNi43MjQ4IDIzLjI5IDE2Ljk5NDcgMjNDMTcuMTM0NiAyMi44NyAxNy4yODQ2IDIyLjc3IDE3LjQ0NDUgMjIuN0Mx'@;
put 'Ny42MTQ0IDIyLjYzIDE3Ljc5NDMgMjIuNTkgMTcuOTg0MyAyMi41OUMxOC4xNzQyIDIyLjU5IDE4LjM1NDEgMjIuNjMgMTguNTI0IDIyLjdDMTguNjc0IDIyLjc3IDE4LjgyMzkgMjIuODcgMTguOTczOCAyM0MxOS4wOTM4IDIzLjEyIDE5LjIwMzcgMjMuMjggMTkuMjczNyAyMy40NkMxOS4z'@;
put 'NDM3IDIzLjY0IDE5LjM4MzYgMjMuODEgMTkuMzgzNiAyMy45OUMxOS4zODM2IDI0LjM1IDE5LjI0MzcgMjQuNyAxOC45NjM4IDI0Ljk5TDE4Ljk3MzggMjVaIi8+J31dLFsidGFibGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMgMThDMzMuNTUgMTggMzQgMTcuNTUgMzQgMTdDMzQgMTYuNDUg'@;
put 'MzMuNTUgMTYgMzMgMTZIMjhWOEgzM0MzMy41NSA4IDM0IDcuNTUgMzQgN0MzNCA2LjQ1IDMzLjU1IDYgMzMgNkg4VjNDOCAyLjQ1IDcuNTUgMiA3IDJDNi40NSAyIDYgMi40NSA2IDNWNkgzQzIuNDUgNiAyIDYuNDUgMiA3QzIgNy41NSAyLjQ1IDggMyA4SDZWMzNDNiAzMy41NSA2LjQ1IDM0'@;
put 'IDcgMzRDNy41NSAzNCA4IDMzLjU1IDggMzNWMjhIMTZWMzNDMTYgMzMuNTUgMTYuNDUgMzQgMTcgMzRDMTcuNTUgMzQgMTggMzMuNTUgMTggMzNWMjhIMjZWMzNDMjYgMzMuNTUgMjYuNDUgMzQgMjcgMzRDMjcuNTUgMzQgMjggMzMuNTUgMjggMzNWMjhIMzNDMzMuNTUgMjggMzQgMjcuNTUg'@;
put 'MzQgMjdDMzQgMjYuNDUgMzMuNTUgMjYgMzMgMjZIMjhWMThIMzNaTTE2IDI2SDhWMThIMTZWMjZaTTE2IDE2SDhWOEgxNlYxNlpNMjYgMjZIMThWMThIMjZWMjZaTTI2IDE2SDE4VjhIMjZWMTZaIi8+J31dLFsidHJhc2giLHtvdXRsaW5lOic8cGF0aCBkPSJNMjcuOTggMzFDMjggMzEuMjUg'@;
put 'MjcuOTIgMzEuNDkgMjcuNzYgMzEuNjhDMjcuNiAzMS44NyAyNy4zNyAzMS45OCAyNy4xMiAzMkg4Ljg1QzguNiAzMS45OCA4LjM3IDMxLjg3IDguMjEgMzEuNjhDOC4wNSAzMS40OSA3Ljk3IDMxLjI1IDcuOTkgMzFWMTEuMDNINS45N1YzMUM1Ljk1IDMxLjc4IDYuMjQgMzIuNTMgNi43OCAz'@;
put 'My4wOUM3LjMyIDMzLjY1IDguMDYgMzMuOTggOC44NSAzNEgyNy4xMkMyNy45IDMzLjk4IDI4LjY1IDMzLjY2IDI5LjE5IDMzLjA5QzI5LjczIDMyLjUyIDMwLjAyIDMxLjc3IDMwIDMxVjExLjAzSDI3Ljk4VjMxWk0xMyAxMi45OFYyNy45OEgxNS4wMlYxMi45OEgxM1pNMTUgNEgyMVY2SDIz'@;
put 'VjRDMjMgMi45IDIyLjEgMiAyMSAySDE1QzEzLjkgMiAxMyAyLjkgMTMgNFY2SDE1VjRaTTMwLjk5IDYuOThINS4wMUM0LjQ1IDYuOTggNCA3LjQzIDQgNy45OEM0IDguNTMgNC40NSA4Ljk4IDUuMDEgOC45OEgzMC45OUMzMS41NSA4Ljk4IDMyIDguNTMgMzIgNy45OEMzMiA3LjQzIDMxLjU1'@;
put 'IDYuOTggMzAuOTkgNi45OFpNMjAuOTggMTIuOThWMjcuOThIMjNWMTIuOThIMjAuOThaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE1IDRIMjFWNkgyM1Y0QzIzIDIuOSAyMi4xIDIgMjEgMkgxNUMxMy45IDIgMTMgMi45IDEzIDRWNkgxNVY0Wk0zMC45OSA2Ljk4SDUuMDFDNC40NSA2Ljk4IDQg'@;
put 'Ny40MyA0IDcuOThDNCA4LjUzIDQuNDUgOC45OCA1LjAxIDguOThIMzAuOTlDMzEuNTUgOC45OCAzMiA4LjUzIDMyIDcuOThDMzIgNy40MyAzMS41NSA2Ljk4IDMwLjk5IDYuOThaTTUuOTcgMTEuMDNWMzFDNS45NSAzMS43OCA2LjI0IDMyLjUzIDYuNzggMzMuMDlDNy4zMiAzMy42NSA4LjA2'@;
put 'IDMzLjk4IDguODUgMzRIMjcuMTJDMjcuOSAzMy45OCAyOC42NSAzMy42NiAyOS4xOSAzMy4wOUMyOS43MyAzMi41MiAzMC4wMiAzMS43NyAzMCAzMVYxMS4wM0g1Ljk3Wk0yMC43OSAyOC44MlYxNUgyMy4yMVYyOUgyMC43OVYyOC44MlpNMTIuODEgMjguODJWMTVIMTUuMjNWMjlIMTIuODFW'@;
put 'MjguODJaIi8+J31dLFsicHJvY2Vzcy1vbi12bSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xMiAxNC41MDAxVjI0LjUwMDFDMTIgMjUuMDUwMSAxMi40NSAyNS41MDAxIDEzIDI1LjUwMDFIMjNDMjMuNTUgMjUuNTAwMSAyNCAyNS4wNTAxIDI0IDI0LjUwMDFWMTQuNTAwMUMyNCAxMy45NTAxIDIz'@;
put 'LjU1IDEzLjUwMDEgMjMgMTMuNTAwMUgxM0MxMi40NSAxMy41MDAxIDEyIDEzLjk1MDEgMTIgMTQuNTAwMVpNMTQgMTUuNTAwMUgyMlYyMy41MDAxSDE0VjE1LjUwMDFaTTUuMjYgMjIuMjgwMUM1LjgxIDIyLjIwMDEgNi4xOSAyMS43MDAxIDYuMTEgMjEuMTUwMUM2LjAzIDIwLjYxMDEgNiAy'@;
put 'MC4wNTAxIDYgMTkuNDkwMUM2IDEzLjQxMDEgMTAuNTUgOC4zOTAwNiAxNi40NyA3LjYxMDA2TDE2LjI5IDcuNzkwMDZDMTUuOSA4LjE4MDA2IDE1LjkgOC44MTAwNiAxNi4yOSA5LjIwMDA2QzE2LjQ5IDkuNDAwMDYgMTYuNzQgOS40OTAwNiAxNyA5LjQ5MDA2QzE3LjI2IDkuNDkwMDYgMTcu'@;
put 'NTEgOS4zOTAwNiAxNy43MSA5LjIwMDA2TDIwLjQyIDYuNDkwMDZMMTcuNzEgMy43OTAwNkMxNy4zMiAzLjQwMDA2IDE2LjY5IDMuNDAwMDYgMTYuMyAzLjc5MDA2QzE1LjkxIDQuMTgwMDYgMTUuOTEgNC44MTAwNiAxNi4zIDUuMjAwMDZMMTYuNjYgNS41NjAwNkM5LjU2IDYuMjUwMDYgNCAx'@;
put 'Mi4yMzAxIDQgMTkuNTAwMUM0IDIwLjE1MDEgNC4wNCAyMC44MDAxIDQuMTMgMjEuNDMwMUM0LjIgMjEuOTMwMSA0LjYzIDIyLjI5MDEgNS4xMiAyMi4yOTAxQzUuMTYgMjIuMjkwMSA1LjIxIDIyLjI5MDEgNS4yNiAyMi4yOTAxVjIyLjI4MDFaTTIzLjY3IDMwLjA3MDFDMjEuOTQgMzEuMDAw'@;
put 'MSAxOS45OCAzMS40OTAxIDE4IDMxLjQ5MDFDMTQuMyAzMS40OTAxIDEwLjgzIDI5Ljc2MDEgOC41NyAyNi45MDAxTDguODMgMjYuOTQwMUM5LjM4IDI3LjA0MDEgOS44OSAyNi42NjAxIDkuOTggMjYuMTIwMUMxMC4wNyAyNS41ODAxIDkuNyAyNS4wNjAxIDkuMTYgMjQuOTcwMUw1LjM4IDI0'@;
put 'LjM0MDFMNC43NSAyOC4xMjAxQzQuNjYgMjguNjYwMSA1LjAzIDI5LjE4MDEgNS41NyAyOS4yNzAxQzUuNjMgMjkuMjcwMSA1LjY4IDI5LjI4MDEgNS43NCAyOS4yODAxQzYuMjIgMjkuMjgwMSA2LjY0IDI4LjkzMDEgNi43MyAyOC40NTAxTDYuODIgMjcuOTIwMUM5LjQ1IDMxLjQwMDEgMTMu'@;
put 'NTkgMzMuNTAwMSAxOCAzMy41MDAxQzIwLjMxIDMzLjUwMDEgMjIuNiAzMi45MzAxIDI0LjYyIDMxLjg0MDFDMjUuMTEgMzEuNTgwMSAyNS4yOSAzMC45NzAxIDI1LjAzIDMwLjQ5MDFDMjQuNzcgMzAuMDAwMSAyNC4xNiAyOS44MjAxIDIzLjY4IDMwLjA4MDFMMjMuNjcgMzAuMDcwMVpNMzAu'@;
put 'MDkgMjYuODMwMUwyOS45IDI2Ljg2MDFDMzEuMjYgMjQuNjYwMSAzMiAyMi4xMjAxIDMyIDE5LjQ5MDFDMzIgMTMuOTAwMSAyOC42OCA4Ljg1MDA2IDIzLjU1IDYuNjMwMDZDMjMuMDQgNi40MTAwNiAyMi40NiA2LjY0MDA2IDIyLjI0IDcuMTUwMDZDMjIuMDIgNy42NjAwNiAyMi4yNSA4LjI1'@;
put 'MDA2IDIyLjc2IDguNDYwMDZDMjcuMTYgMTAuMzYwMSAzMC4wMSAxNC42OTAxIDMwLjAxIDE5LjQ4MDFDMzAuMDEgMjEuODAwMSAyOS4zNCAyNC4wNDAxIDI4LjEgMjUuOTYwMUwyNy45OSAyNS4zMjAxQzI3LjkgMjQuNzgwMSAyNy4zOSAyNC40MDAxIDI2Ljg0IDI0LjUwMDFDMjYuMyAyNC41'@;
put 'OTAxIDI1LjkzIDI1LjEwMDEgMjYuMDIgMjUuNjUwMUwyNi42NCAyOS40MzAxTDMwLjQyIDI4LjgxMDFDMzAuOTYgMjguNzIwMSAzMS4zMyAyOC4yMTAxIDMxLjI0IDI3LjY2MDFDMzEuMTUgMjcuMTIwMSAzMC42NCAyNi43NDAxIDMwLjA5IDI2Ljg0MDFWMjYuODMwMVoiLz4nfV0pO2xldCBQ'@;
put 'WWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFosbmUpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91dGU9Zix0aGlzLmxvY2F0aW9uPXYsdGhpcy5ldmVudFNlcnZpY2U9TSx0aGlzLmFwcFN0b3Jl'@;
put 'U2VydmljZT1ELHRoaXMuY2RyPVosdGhpcy5lbGVtZW50UmVmPW5lLHRoaXMubGljZW5zZUV4cGlyaW5nRGF5cz1udWxsLHRoaXMuc2FzanNBYm9ydHM9W10sdGhpcy5lZGl0b3JBY3RpdmU9ITEsdGhpcy5hcHByb3ZlQWN0aXZlPSExLHRoaXMuZnJlZVRpZXJCYW5uZXI9dGhpcy5saWNlbmNl'@;
put 'U2VydmljZS5pc0FwcEZyZWVUaWVyLnZhbHVlLHRoaXMubGljZW5jZVByb2JsZW09dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlUHJvYmxlbSx0aGlzLmFwcE92ZXJDYXBhY2l0eT0hMSx0aGlzLmFwcEFjdGl2ZT1udWxsLHRoaXMucmVxdWVzdHNNb2RhbD0hMSx0aGlzLnNob3dSZWdpc3Ry'@;
put 'YXRpb249ITAsdGhpcy5zdGFydHVwRGF0YUxvYWRlZD0hMSx0aGlzLmRlbW9MaW1pdE5vdGljZT17b3BlbjohMSxmZWF0dXJlTmFtZToiIn0sdGhpcy5zeXNzaXRlPXRoaXMuYXBwU2VydmljZS5zeXNzaXRlLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0'@;
put 'YXRlLHRoaXMucGFyc2VEY0FkYXB0ZXJTZXR0aW5ncygpLHdpbmRvdy5hcHBpbmZvPSgpPT57Y29uc29sZS50YWJsZSh7IkFkYXB0ZXIgdmVyc2lvbiI6IjQuMTEuMyIsIkFwcCB2ZXJzaW9uIjoidjYuMTQuNyIucmVwbGFjZSgidiIsIiIpLCJCdWlsZCB0aW1lc3RhbXAiOk9hKHBhcnNlSW50'@;
put 'KCIxNzQ2NzA1MjYzMDc4IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKSwiLi4uIjoiLi4uIn0pfSx0aGlzLnN1YnNjcmliZVRvTGljZW5zZUV2ZW50cygpLHRoaXMuY29tbWl0VmVyPSJ2Ni4xNC43Ii5yZXBsYWNlKCJ2IiwiIikrIi5nYTM3N2Y2ZSIsaC5ldmVudHMuc3Vic2NyaWJl'@;
put 'KGNlPT57aWYodGhpcy5yb3V0ZVVybD10aGlzLnJvdXRlci51cmwsdHlwZW9mIHRoaXMucm91dGVVcmw8InUiJiZ0aGlzLnJvdXRlVXJsLmxlbmd0aD40KXtsZXQgYmU9dGhpcy5yb3V0ZVVybC5zcGxpdCgiLyIpWzFdOyJlZGl0b3IiPT09YmU/KHRoaXMuZXJyVG9wPSEwLHRoaXMuZWRpdG9y'@;
put 'QWN0aXZlPSEwLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSk6ImhvbWUiPT09YmU/KHRoaXMuZXJyVG9wPSExLHRoaXMuZWRpdG9yQWN0aXZlPSEwLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSk6KHRoaXMuZXJyVG9wPSEwLHRoaXMuZWRpdG9yQWN0aXZlPSExKSxLbi5yb290UGFyYW09YmV9dHlwZW9m'@;
put 'IHRoaXMucm91dGVVcmw8InUiJiZ0aGlzLnJvdXRlVXJsLmxlbmd0aD42JiYodGhpcy5hcHByb3ZlQWN0aXZlPSEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygiYXBwcm92ZURldCIpfHwhIXRoaXMucm91dGVVcmwuaW5jbHVkZXMoInRvYXBwcm92ZSIpKX0pLHRoaXMuc3Vic2NyaWJlVG9TaG93'@;
put 'QWJvcnRNb2RhbCgpLHRoaXMuc3Vic2NyaWJlVG9SZXF1ZXN0c01vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1N0YXJ0dXBEYXRhKCksdGhpcy5zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpLHRoaXMuc3Vic2NyaWJlVG9EZW1vTGltaXRNb2RhbCgpLHdpbmRvdy5mcmFtZUVsZW1lbnQmJih3aW5kb3cu'@;
put 'ZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFsbG93ZnVsbHNjcmVlbiIsIiIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRl'@;
put 'KCJmcmFtZWJvcmRlciIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2luaGVpZ2h0IiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW53aWR0aCIsIjAiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgic2Nyb2xs'@;
put 'aW5nIiwiYXV0byIpLHdpbmRvdy5mb2N1cygpKX1wYXJzZURjQWRhcHRlclNldHRpbmdzKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzYXNqcyIpO2lmKCFhKXJldHVybiB0aGlzLmxpY2VuY2VTZXJ2aWNlLmRlYWN0aXZhdGVBcHAoKSx2b2lkIHNldFRpbWVvdXQoKCk9Pnt0'@;
put 'aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJQbGVhc2UgbWFrZSBzdXJlICdTQVNKUycgdGFnIHdpdGggY29uZmlnIGF0dHJpYnV0ZXMgaXMgYWRkZWQgdG8gaW5kZXguaHRtbCIsbnVsbCwiU0FTanMgQ29uZmlnIG5vdCBmb3VuZCIpfSk7Y29uc3QgZD1mPT5hLmdldEF0'@;
put 'dHJpYnV0ZShmKXx8dm9pZCAwLGg9e3NlcnZlclVybDpkKCJzZXJ2ZXJVcmwiKXx8IiIsYXBwTG9jOmQoImFwcExvYyIpfHwiIixzZXJ2ZXJUeXBlOmQoInNlcnZlclR5cGUiKSxsb2dpbk1lY2hhbmlzbTpkKCJsb2dpbk1lY2hhbmlzbSIpfHwiIixhZG1pbkdyb3VwOmQoImFkbWluR3JvdXAi'@;
put 'KXx8IiIsZGNQYXRoOmQoImRjUGF0aCIpfHwiIixkZWJ1ZzoidHJ1ZSI9PT1kKCJkZWJ1ZyIpfHwhMSx1c2VDb21wdXRlQXBpOnRoaXMucGFyc2VDb21wdXRlQXBpKGQoInVzZUNvbXB1dGVBcGkiKSksY29udGV4dE5hbWU6ZCgiY29udGV4dE5hbWUiKXx8IiIsaG90TGljZW5jZUtleTpkKCJo'@;
put 'b3RMaWNlbmNlS2V5Iil8fCIifTt0aGlzLmRjQWRhcHRlclNldHRpbmdzPWgsdGhpcy5hcHBTdG9yZVNlcnZpY2Uuc2V0RGNBZGFwdGVyU2V0dGluZ3MoaCksdGhpcy5hcHBTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9bGljZW5jZVByb2JsZW1EZXRhaWxzKGEpe3RoaXMucm91dGVyLm5hdmln'@;
put 'YXRlQnlVcmwoYSl9cGFyc2VDb21wdXRlQXBpKGEpe3JldHVybiB2b2lkIDA9PT1hfHwidW5kZWZpbmVkIj09PWF8fCJudWxsIj09PWE/bnVsbDoidHJ1ZSI9PT1hfHwhMX1zdWJzY3JpYmVUb0RlbW9MaW1pdE1vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25EZW1vTGltaXRNb2RhbFNob3cu'@;
put 'c3Vic2NyaWJlKGE9Pnt0aGlzLmRlbW9MaW1pdE5vdGljZT17b3BlbjohMCxmZWF0dXJlTmFtZTphfX0pfXN1YnNjcmliZVRvTGljZW5zZUV2ZW50cygpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBGcmVlVGllci5zdWJzY3JpYmUoYT0+e3RoaXMuZnJlZVRpZXJCYW5uZXI9YX0pLHRoaXMu'@;
put 'bGljZW5jZVNlcnZpY2UubGljZW5zZUV4cGlyZXNJbkRheXMuc3Vic2NyaWJlKGE9PnthJiZhPD0xNCYmKHRoaXMubGljZW5zZUV4cGlyaW5nRGF5cz1hKX0pLHRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBPdmVyQ2FwYWNpdHkuc3Vic2NyaWJlKGE9Pnt0aGlzLmFwcE92ZXJDYXBhY2l0eT1h'@;
put 'fSl9c3Vic2NyaWJlVG9BcHBBY3RpdmUoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnN1YnNjcmliZShhPT57dGhpcy5hcHBBY3RpdmU9YX0pfXN1YnNjcmliZVRvU2hvd0Fib3J0TW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblNob3dBYm9ydE1vZGFsLnN1YnNjcmli'@;
put 'ZShhPT57YS5pZD10aGlzLnNhc2pzQWJvcnRzLmxlbmd0aCsxLHRoaXMuc2FzanNBYm9ydHMucHVzaChhKSx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCl9KX1zdWJzY3JpYmVUb1N0YXJ0dXBEYXRhKCl7dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9'@;
put 'Pnt0aGlzLnN0YXJ0dXBEYXRhTG9hZGVkPSEwfSl9c3Vic2NyaWJlVG9SZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub25SZXF1ZXN0c01vZGFsT3Blbi5zdWJzY3JpYmUoYT0+e3RoaXMucmVxdWVzdHNNb2RhbD0hMH0pfWNsb3NlQWJvcnRNb2RhbChhKXtsZXQgZD10aGlzLnNh'@;
put 'c2pzQWJvcnRzLmZpbmRJbmRleChoPT5oLmlkPT09YSk7dGhpcy5zYXNqc0Fib3J0cy5zcGxpY2UoZCwxKX10b2dnbGVTaWRlYmFyKCl7dGhpcy5ldmVudFNlcnZpY2UudG9nZ2xlU2lkZWJhcigpfWlzTWFpblJvdXRlKGEpe3JldHVybiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoYSl9b3Bl'@;
put 'bkxpY2VuY2luZ1BhZ2UoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL3VwZGF0ZSIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKG9MKSxHZSh1MSksR2UoTHMpLEdlKEN1KSxHZShwaCksR2UodmMpLEdlKFg4KSxH'@;
put 'ZSh4cyksR2UoSmkpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm15LWFwcCJdXSxkZWNsczoyNix2YXJzOjE3LGNvbnN0czpbWzEsIm1haW4tY29udGFpbmVyIl0sWzQsIm5nSWYiXSxbMSwiYXBwLWhlYWRlciJdLFsidHlwZSIsImJ1dHRvbiIsImNs'@;
put 'YXNzIiwiY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgbWwtMTAgZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImxvZ28iLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJo'@;
put 'cmVmIiwiIyIsImNsYXNzIiwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwic3VibmF2Iiw0LCJuZ0lmIl0sWzMsIm9wZW5lZENoYW5nZSIsIm9wZW5lZCJdLFszLCJkYXRhIiwiZm9yY2VSZWxvYWQiLCJvbkNvbmZpcm1Nb2RhbENsaWNrIiw0LCJuZ0ZvciIs'@;
put 'Im5nRm9yT2YiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbInNpemUiLCIyMCIsInNoYXBlIiwi'@;
put 'bG9jayJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsImFwcC1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC13YXJuaW5nIiwiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsNCwibmdJZiJdLFsiY2xhc3MiLCJhbGVydCBh'@;
put 'bGVydC1hcHAtbGV2ZWwgYWxlcnQtZGFuZ2VyIiwiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsNCwibmdJZiJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwiYWxlcnQiLCJhbGVydC1hcHAtbGV2ZWwiLCJhbGVydC13YXJuaW5nIl0sWzEsImFsZXJ0LWl0'@;
put 'ZW1zIl0sWzEsImFsZXJ0LWl0ZW0iLCJzdGF0aWMiXSxbMSwiYWxlcnQtaWNvbi13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLDEsImFsZXJ0LWljb24iXSxbMSwiYWxlcnQtdGV4dCJdLFsiY2xhc3NlcyIsImNvbG9yLXdoaXRlIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vu'@;
put 'c2luZy91cGRhdGUiLDEsInVwZGF0ZS1rZXkiXSxbMSwidXBkYXRlLWtleSIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwiYWxlcnQiLCJhbGVydC1hcHAtbGV2ZWwiLCJhbGVydC1kYW5nZXIiXSxbInJvdXRlckxpbmsi'@;
put 'LCIvbGljZW5zaW5nL3VwZGF0ZSIsImNsYXNzIiwidXBkYXRlLWtleSIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY3Vyc29yLXBvaW50ZXIiLCJzZWxlY3Qtbm9uZSIsIm1sLTEwIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItYWxpZ24taXRlbXMt'@;
put 'Y2VudGVyIiwzLCJjbGljayJdLFsic2l6ZSIsIjI0Iiwic2hhcGUiLCJ0cmVlLXZpZXciXSxbImhyZWYiLCIjIiwxLCJuYXYtbGluayIsMywicm91dGVyTGluayJdLFsic3JjIiwiL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2RjLWxv'@;
put 'Z28uc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyB3aXRob3V0IHRleHQiLDEsIndpdGhvdXQtdGV4dCIsImQtYmxvY2siLCJkLW1kLW5vbmUiXSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL2ltYWdlcy9kYXRhY29udHJv'@;
put 'bGxlci5zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJ3aXRoLXRleHQiLCJkLW5vbmUiLCJkLW1kLWJsb2NrIl0sWzEsImNsci1pY29uIiwiaGVhZGVyLWxvZ28iLCJtbC0xMCJdLFsxLCJoZWFkZXItbmF2IiwiZC1mbGV4IiwiZC1zbS1ub25lIl0sWyJjbHJEcm9wZG93blRy'@;
put 'aWdnZXIiLCIiLCJhcmlhLWxhYmVsIiwidG9nZ2xlIHNldHRpbmdzIG1lbnUiLDEsIm5hdi1pY29uIiwiY29sb3Itd2hpdGUtaSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsNCwiY2xySWZPcGVuIl0sWzEsImhlYWRlci1uYXYiLCJkLW5vbmUiLCJkLXNtLWZsZXgiXSxbInJvdXRl'@;
put 'ckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsMywicm91dGVyTGluayJdLFsxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwiY3Vyc29yLXBvaW50ZXIiLDMsInJvdXRlckxpbmsiXSxbImNs'@;
put 'clBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywicm91dGVyTGluayJdLFsxLCJzdWJuYXYiXSxbMSwibmF2Il0sWzEsIm5hdi1pdGVtIl0sWzMsIm9uQ29uZmlybU1vZGFsQ2xpY2siLCJkYXRhIiwiZm9yY2VSZWxvYWQiXSxbMSwiYXBwLWxvYWRpbmci'@;
put 'XSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL2ltYWdlcy9kYXRhY29udHJvbGxlci5zdmciLCJhbHQiLCJkYXRhY29udHJvbGxlciBsb2dvIiwxLCJsb2FkaW5nLWxvZ28iXSxbImNsYXNzIiwic2xpZGVyIiw0LCJuZ0lmIl0sWzEs'@;
put 'InNsaWRlciJdLFsxLCJsaW5lIl0sWzEsInN1YmxpbmUiLCJpbmMiXSxbMSwic3VibGluZSIsImRlYyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksbXQoMSxDWWUsNCwzLCJuZy1jb250YWluZXIiLDEpLGRlKDIsImhlYWRlciIsMiksbXQoMyxTWWUsMiww'@;
put 'LCJkaXYiLDMpLGRlKDQsImRpdiIsNCksbXQoNSxNWWUsMywyLCJhIiw1KSg2LHhZZSwyLDAsImEiLDEpLGhlKCksbXQoNyxUWWUsMTMsMTAsIm5nLWNvbnRhaW5lciIsMSksR3QoOCwiYXBwLWhlYWRlci1hY3Rpb25zIiksaGUoKSxtdCg5LEFZZSwxMSw4LCJuYXYiLDYpKDEwLGtZZSwxLDAs'@;
put 'ImFwcC1hbGVydHMiLDEpLGRlKDExLCJhcHAtcmVxdWVzdHMtbW9kYWwiLDcpLGdpKCJvcGVuZWRDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBiaShoLnJlcXVlc3RzTW9kYWwsdil8fChoLnJlcXVlc3RzTW9kYWw9diksdn0pLGhlKCksR3QoMTIsImFwcC1leGNlbC1wYXNzd29yZC1tb2Rh'@;
put 'bCIpLG10KDEzLERZZSwxLDAsInJvdXRlci1vdXRsZXQiLDEpLEd0KDE0LCJhcHAtbG9naW4iKSxtdCgxNSxJWWUsMSwwLCJhcHAtYWxlcnRzIiwxKSgxNixSWWUsMSwyLCJhcHAtaW5mby1tb2RhbCIsOCksZGUoMTcsImNsci1tb2RhbCIsOSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVu'@;
put 'Y3Rpb24odil7cmV0dXJuIGJpKGguZGVtb0xpbWl0Tm90aWNlLm9wZW4sdil8fChoLmRlbW9MaW1pdE5vdGljZS5vcGVuPXYpLHZ9KSxkZSgxOCwiaDMiLDEwKSxMZSgxOSksR3QoMjAsImNsci1pY29uIiwxMSksaGUoKSxkZSgyMSwiZGl2IiwxMiksTGUoMjIsIiBDb250YWN0ICIpLEd0KDIz'@;
put 'LCJjb250YWN0LWxpbmsiKSxMZSgyNCksaGUoKSgpKCksbXQoMjUsT1llLDMsMSwiZGl2IiwxMykpLDImZCYmKGZlKCkseGUoIm5nSWYiLCFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSx4ZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgidmlldyIpfHxoLmlzTWFpblJv'@;
put 'dXRlKCJob21lIikmJiFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSx4ZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLGZlKCkseGUoIm5nSWYiLGgucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikpLGZlKCkseGUoIm5nSWYiLCFo'@;
put 'LnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiYhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksZmUoMikseGUoIm5nSWYiLGgucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGgucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxoLnJvdXRlci51'@;
put 'cmwuaW5jbHVkZXMoImhpc3RvcnkiKSksZmUoKSx4ZSgibmdJZiIsIWguZXJyVG9wKSxmZSgpLHBpKCJvcGVuZWQiLGgucmVxdWVzdHNNb2RhbCksZmUoMikseGUoIm5nSWYiLGguc3RhcnR1cERhdGFMb2FkZWQpLGZlKDIpLHhlKCJuZ0lmIixoLmVyclRvcCksZmUoKSx4ZSgibmdGb3JPZiIs'@;
put 'aC5zYXNqc0Fib3J0cyksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLmRlbW9MaW1pdE5vdGljZS5vcGVuKSx4ZSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbFNpemUiLCJsZyIpLGZlKDIpLElyKCIgTG9ja2VkIEZlYXR1cmUgKCIsaC5kZW1vTGltaXROb3RpY2UuZmVhdHVyZU5h'@;
put 'bWUsIikgIiksZmUoNSksSXIoIiB3aXRoIHlvdXIgc2l0ZSBpZCAoIixoLnN5c3NpdGUudmFsdWUsIikgdG8gYWN0aXZhdGUhICIpLGZlKCkseGUoIm5nSWYiLCFoLnN0YXJ0dXBEYXRhTG9hZGVkKSl9LGRlcGVuZGVuY2llczpbbHMseW8scmcsYzEsZnksdVdlLHhXZSxBV2UsZk8sSVdlLEp4'@;
put 'LEZsLHVzLG91LCR1LEQyLHNnLGY3LHA3LE55LGVFLG5ZZSxkWWVdLHN0eWxlczpbImFwcC1yZXF1ZXN0cy1tb2RhbFtfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoxMDAwMH1oZWFkZXIuYXBwLWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFu'@;
put 'dDtjb2xvcjojZmZmfS5sb2dvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGltZy53aXRob3V0LXRleHRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjMwcHh9LmxvZ29bX25nY29udGVudC0lQ09NUCVdICAgaW1nLndpdGgtdGV4dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MjEwcHh9LmhlYWRl'@;
put 'ci1oYW1idXJnZXItdHJpZ2dlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO21hcmdpbi1sZWZ0OjEwcHh9LmRlbW8tZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNv'@;
put 'bnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7aGVpZ2h0OjEwMHZoIWltcG9ydGFudDt3aWR0aDoxMDB2dyFpbXBvcnRhbnQ7ei1pbmRleDoxMDU7YmFja2dyb3VuZDojMjEyMTIxODB9LmRlbW8tZXhwaXJlZC1ub3RpY2VbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLmV4cGlyZWQtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV17ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjMwcHg7ei1pbmRleDoxMTA7YmFja2dyb3VuZDojMzE0MzUxfS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5leHBpcmVkLWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwO2ZvbnQtc2l6ZToxNnB4fS5kZW1vLWV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBpcmVk'@;
put 'LWRldGFpbHNbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tYWlsdG9bX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM4ZGM1M2V9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC51cGRhdGUta2V5W19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2NvbG9yOiNmZmY7cGFkZGluZzowIDEwcHg7YmFja2dyb3VuZDojMDAwMDAwMjZ9LmFsZXJ0LWljb24td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowIWltcG9ydGFudH0ubmF2LXRleHRbX25n'@;
put 'Y29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDoyMHB4fS5zaWRlYmFyLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nLWxlZnQ6MTBweH0uc2lkZWJhci10b2dnbGVbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO3dpZHRoOjMwcHg7aGVpZ2h0OjMwcHh9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5oZWFkZXItYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde3Bv'@;
put 'c2l0aW9uOnVuc2V0fWhlYWRlcltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2NvbG9yOiNmYWZhZmF9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGluay5hY3RpdmVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6'@;
put 'IzFkMmYzZH0ubm90Zltfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMTZhNTdhO2NvbG9yOiNmZmZjZmM7Zm9udC1zaXplOjEycHh9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQg'@;
put 'KyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojNjE3MTdkO2JhY2tncm91bmQtY29sb3I6IzYxNzE3ZDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5tYWluLWNvbnRh'@;
put 'aW5lcltfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnR9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRk'@;
put 'aW5nOjByZW0gMXJlbSAxcmVtfS5jb250ZW50LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDowIWltcG9ydGFudH0ubmF2QmFyUmVzcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDojNDk1YTY3O2Nv'@;
put 'bG9yOiNmZmZ9ICAuaHRJbnZhbGlke2JhY2tncm91bmQ6IzAwMCFpbXBvcnRhbnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpeyAgaDJ7Zm9udC1zaXplOi43cmVtIWltcG9ydGFudH0gIGgze2ZvbnQtc2l6ZTouN3JlbX19ICAubmF2LWxpbmt7cGFkZGluZzowcmVtIDFy'@;
put 'ZW19ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0bi1wcmltYXJ5IC5idG4sICAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4uYnRuLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2NvbG9yOiNmZmZ9ICBib2R5W2Nkcy10aGVtZT1kYXJr'@;
put 'XSAuYnRuLXByaW1hcnkgLmJ0biwgICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1wcmltYXJ5e2JvcmRlci1jb2xvcjojNWU3MzgyO2JhY2tncm91bmQtY29sb3I6IzVlNzM4Mjtjb2xvcjojZmZmfSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2xyLWlj'@;
put 'b24sICAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi1wcmltYXJ5IC5idG4gY2RzLWljb24sICAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi5idG4tcHJpbWFyeSBjbHItaWNvbiwgICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1wcmltYXJ5IGNkcy1pY29ue2NvbG9yOiNmZmZ9'@;
put 'ICAuYnRuLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCwgICAuYnRuLmJ0bi1wcmltYXJ5OmRpc2FibGVke29wYWNpdHk6LjY1fSAgLmJ0bntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jazstd2Via2l0LWFwcGVhcmFuY2U6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVyLXJhZGl1czouMTI1'@;
put 'cmVtO2JvcmRlcjoxcHggc29saWQ7bWluLXdpZHRoOjNyZW07bWF4LXdpZHRoOjE1cmVtO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7dmVydGljYWwtYWxp'@;
put 'Z246bWlkZGxlO2xpbmUtaGVpZ2h0OjEuNXJlbTtsZXR0ZXItc3BhY2luZzouMTJlbTtmb250LXNpemU6LjVyZW07Zm9udC13ZWlnaHQ6NTAwO2hlaWdodDoxLjVyZW07cGFkZGluZzowIC41cmVtfSAgLmJ0bi5idG4tb3V0bGluZTpob3Zlcntib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3Jv'@;
put 'dW5kLWNvbG9yOiM0OTVhNjc7Y29sb3I6I2ZmZn0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4uYnRuLWljb24uYnRuLWRpbW1lZHtjb2xvcjojNzI5NWFlfSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5idG4uYnRuLWljb24uYnRuLWRpbW1lZHtjb2xvcjojMzE0MzUxfSAgYm9keVtjZHMt'@;
put 'dGhlbWU9bGlnaHRdIC5idG4uYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzE0MzUxfSAgLmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyIC5pbnB1dHMgdGV4dGFyZWF7Zm9udC1zaXplOjEzcHQ7Ym9yZGVyOjJweCBz'@;
put 'b2xpZCAjNDg1OTY3O2JvcmRlci1yYWRpdXM6NHB4Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2JveC1zaGFkb3c6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowIDAgMCAxNHB4O3BhZGRpbmc6N3B0O3dpZHRoOjI5MHB4fSAgLmh0TW9iaWxlRWRpdG9yQ29udGFpbmVyIC5wb3NpdGlv'@;
put 'bkNvbnRyb2xze3dpZHRoOjMzM3B4O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVwdDt0b3A6NTBweDtib3R0b206MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn0gIC5odE1vYmlsZUVkaXRvckNvbnRhaW5lci5hY3RpdmV7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTIwcHg7'@;
put 'd2lkdGg6MzUwcHh9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLnd0Qm9yZGVye2JhY2tncm91bmQtY29sb3I6IzQ5NWE2NyFpbXBvcnRhbnR9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLmh0X21hc3RlciB0cjpudGgtb2YtdHlwZShvZGQpPnRke2ZpbHRlcjpicmlnaHRuZXNzKC45Nyl9ICBi'@;
put 'b2R5W2Nkcy10aGVtZT1saWdodF0gLmh0X21hc3RlciAuaHREaW1tZWR7Y29sb3I6IzM3MzczNyFpbXBvcnRhbnQ7ZmlsdGVyOmJyaWdodG5lc3MoMSkhaW1wb3J0YW50fSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmh0X21hc3RlciB0cjpudGgtb2YtdHlwZShvZGQpPnRke2ZpbHRlcjpicmln'@;
put 'aHRuZXNzKDEuMil9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuaHRfbWFzdGVyOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlIHRib2R5IHRyIHRoLCAgIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXI6bm90KC5lbXB0eUNvbHVtbnMpfi5oYW5kc29udGFibGU6bm90KC5o'@;
put 'dF9jbG9uZV90b3ApIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxke2JhY2tncm91bmQtY29sb3I6IzJkNDA0ODtib3JkZXItY29sb3I6IzY5N2M4NX0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgdGR7Ym9yZGVyLWNvbG9yOiM2OTdjODV9ICBib2R5W2Nkcy10aGVtZT1kYXJr'@;
put 'XSAuaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRoLCAgIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLWNvbG9yOiM2OTdjODV9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIC5oYW5kc29udGFibGUuaHRf'@;
put 'Y2xvbmVfdG9wIC53dEhpZGVye2JvcmRlci1jb2xvcjojNjk3Yzg1fSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtiYWNrZ3JvdW5kLWNvbG9yOiMzYzU2NjI7Ym9yZGVyLWNvbG9yOiM2OTdjODV9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNv'@;
put 'bnRhYmxlSW5wdXR7YmFja2dyb3VuZC1jb2xvcjojNzA4Yjk4fSAgLmhhbmRzb250YWJsZSAuaGFuZHNvbnRhYmxlLmh0X2Nsb25lX3RvcCAud3RIaWRlcntwYWRkaW5nOjAhaW1wb3J0YW50O21hcmdpbjowO2JvcmRlci1ib3R0b206M3B4IHNvbGlkICNkNmQzZDN9ICBib2R5W2Nkcy10aGVt'@;
put 'ZT1saWdodF0gLmNvbnRlbnQtY29udGFpbmVye2JhY2tncm91bmQ6I2Y1ZjZmZn0gIC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZCwgICAuZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWR7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9y'@;
put 'ZGVyLXJhZGl1czouMTI1cmVtO21hcmdpbjowO21hcmdpbi10b3A6MXJlbTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlO3BhZGRpbmc6MTVweCAxNXB4IDUwcHh9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdCwgICAuZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQtZm9vdHtq'@;
put 'dXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW07bGluZS1oZWlnaHQ6Y2FsYygxLjVyZW0gLSAzcHgpO2ZvbnQtc2l6ZTouNDU4MzNyZW07YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci10b3A6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1'@;
put 'czowfSAgLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciwgICAuZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQtZm9vdGVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjMwcHg7dG9wOjFweH0gIC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZCAuZGF0YWdyaWQtaGVhZCwgICAu'@;
put 'ZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQgLmRhdGFncmlkLWhlYWR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9ICAuZHJvcGRvd24tbWVudXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjA7bWFyZ2luLXRvcDouMDgzMzMzcmVt'@;
put 'O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cGFkZGluZzouNXJlbSAwO2JvcmRlcjoxcHggc29saWQgI2NjYztib3gtc2hhZG93OjAgMXB4IC4xMjVyZW0gIzczNzM3MzQwO21pbi13aWR0aDo1cmVtO21heC13aWR0aDoxNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07dmlz'@;
put 'aWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDAwfSAgLnRhYmxle2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6MDttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRoOjEwMCU7d2lkdGg6MTAwJX0gIC50YWJs'@;
put 'ZSB0aHtmb250LXNpemU6LjQ1ODMzcmVtO2ZvbnQtd2VpZ2h0OjYwMDtsZXR0ZXItc3BhY2luZzouMDNlbTt2ZXJ0aWNhbC1hbGlnbjpib3R0b207Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjYzt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2V9ICAubW9kYWwtaGVhZGVye2JvcmRlci1ib3R0'@;
put 'b206MnB4IHNvbGlkICNlNGU0ZTQ7cGFkZGluZzowIDAgLjVyZW07bWFyZ2luLWJvdHRvbToxcmVtfSAgLm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lcnttaW4taGVpZ2h0OjBweDtwb3NpdGlvbjpyZWxhdGl2ZX0uYXBwLWxvYWRpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmxv'@;
put 'YWRpbmctbG9nb1tfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjQwMHB4O3dpZHRoOjEwMCV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5uYXZCYXJSZXNwW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQ7'@;
put 'YmFja2dyb3VuZDojNDk1YTY3O2NvbG9yOiNmZmZ9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMVtfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdjb250ZW50LSVDT01Q'@;
put 'JV0sIC5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTFbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLnN1Ym5hdi5jbHIt'@;
put 'bmF2LWxldmVsLTJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAuNXJlbSAwIDFyZW07d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxv'@;
put 'dzplbGxpcHNpcztib3JkZXItcmFkaXVzOi4xMjVyZW0gMCAwIC4xMjVyZW07Y29sb3I6Izk1Yzg0Yn0uY2FyZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV0sIC5jYXJkLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDAgMH0ubWFpbi1jb250YWluZXJbX25nY29udGVu'@;
put 'dC1jMF1bX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50LWFyZWFbX25nY29udGVudC1jMF1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MHJlbX19Il19KX19cmV0dXJuIGN9KSgpO2Z1'@;
put 'bmN0aW9uIGhoZShjKXtyZXR1cm4gbmV3IFFuKDNlMywhMSl9ZnVuY3Rpb24ga20oYyl7c3dpdGNoKGMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBfeDtjYXNlIDE6cmV0dXJuIGNbMF07ZGVmYXVsdDpyZXR1cm4gbmV3IEQwZShjKX19ZnVuY3Rpb24gZmhlKGMsbCxhPW5ldyBNYXAsZD1u'@;
put 'ZXcgTWFwKXtjb25zdCBoPVtdLGY9W107bGV0IHY9LTEsTT1udWxsO2lmKGwuZm9yRWFjaChEPT57Y29uc3QgWj1ELmdldCgib2Zmc2V0IiksbmU9Wj09dixjZT1uZSYmTXx8bmV3IE1hcDtELmZvckVhY2goKGJlLEVlKT0+e2xldCBCZT1FZSxxZT1iZTtpZigib2Zmc2V0IiE9PUVlKXN3aXRj'@;
put 'aChCZT1jLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShCZSxoKSxxZSl7Y2FzZSIhIjpxZT1hLmdldChFZSk7YnJlYWs7Y2FzZSBpZzpxZT1kLmdldChFZSk7YnJlYWs7ZGVmYXVsdDpxZT1jLm5vcm1hbGl6ZVN0eWxlVmFsdWUoRWUsQmUscWUsaCl9Y2Uuc2V0KEJlLHFlKX0pLG5lfHxmLnB1c2go'@;
put 'Y2UpLE09Y2Usdj1afSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gaUdlKGMpe3JldHVybiBuZXcgUW4oMzUwMiwhMSl9KCk7cmV0dXJuIGZ9ZnVuY3Rpb24geEcoYyxsLGEsZCl7c3dpdGNoKGwpe2Nhc2Uic3RhcnQiOmMub25TdGFydCgoKT0+ZChhJiZFRyhhLCJzdGFydCIsYykpKTticmVh'@;
put 'aztjYXNlImRvbmUiOmMub25Eb25lKCgpPT5kKGEmJkVHKGEsImRvbmUiLGMpKSk7YnJlYWs7Y2FzZSJkZXN0cm95IjpjLm9uRGVzdHJveSgoKT0+ZChhJiZFRyhhLCJkZXN0cm95IixjKSkpfX1mdW5jdGlvbiBFRyhjLGwsYSl7Y29uc3QgZj1URyhjLmVsZW1lbnQsYy50cmlnZ2VyTmFtZSxj'@;
put 'LmZyb21TdGF0ZSxjLnRvU3RhdGUsbHx8Yy5waGFzZU5hbWUsYS50b3RhbFRpbWU/P2MudG90YWxUaW1lLCEhYS5kaXNhYmxlZCksdj1jLl9kYXRhO3JldHVybiBudWxsIT12JiYoZi5fZGF0YT12KSxmfWZ1bmN0aW9uIFRHKGMsbCxhLGQsaD0iIixmPTAsdil7cmV0dXJue2VsZW1lbnQ6Yyx0'@;
put 'cmlnZ2VyTmFtZTpsLGZyb21TdGF0ZTphLHRvU3RhdGU6ZCxwaGFzZU5hbWU6aCx0b3RhbFRpbWU6ZixkaXNhYmxlZDohIXZ9fWZ1bmN0aW9uIEFoKGMsbCxhKXtsZXQgZD1jLmdldChsKTtyZXR1cm4gZHx8Yy5zZXQobCxkPWEpLGR9ZnVuY3Rpb24gcGhlKGMpe2NvbnN0IGw9Yy5pbmRleE9m'@;
put 'KCI6Iik7cmV0dXJuW2Muc3Vic3RyaW5nKDEsbCksYy5zbGljZShsKzEpXX1jb25zdCBtR2U9dHlwZW9mIGRvY3VtZW50PiJ1Ij9udWxsOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtmdW5jdGlvbiBBRyhjKXtjb25zdCBsPWMucGFyZW50Tm9kZXx8Yy5ob3N0fHxudWxsO3JldHVybiBsPT09'@;
put 'bUdlP251bGw6bH1sZXQgUjc9bnVsbCxnaGU9ITE7ZnVuY3Rpb24gbWhlKGMsbCl7Zm9yKDtsOyl7aWYobD09PWMpcmV0dXJuITA7bD1BRyhsKX1yZXR1cm4hMX1mdW5jdGlvbiB2aGUoYyxsLGEpe2lmKGEpcmV0dXJuIEFycmF5LmZyb20oYy5xdWVyeVNlbGVjdG9yQWxsKGwpKTtjb25zdCBk'@;
put 'PWMucXVlcnlTZWxlY3RvcihsKTtyZXR1cm4gZD9bZF06W119bGV0IGtHPSgoKT0+e2NsYXNzIGN7dmFsaWRhdGVTdHlsZVByb3BlcnR5KGEpe3JldHVybiBmdW5jdGlvbiBiR2UoYyl7Ujd8fChSNz1mdW5jdGlvbiB5R2UoKXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1bWVudC5i'@;
put 'b2R5Om51bGx9KCl8fHt9LGdoZT0hIVI3LnN0eWxlJiYiV2Via2l0QXBwZWFyYW5jZSJpbiBSNy5zdHlsZSk7bGV0IGw9ITA7cmV0dXJuIFI3LnN0eWxlJiYhZnVuY3Rpb24gdkdlKGMpe3JldHVybiJlYmtpdCI9PWMuc3Vic3RyaW5nKDEsNil9KGMpJiYobD1jIGluIFI3LnN0eWxlLCFsJiZn'@;
put 'aGUmJihsPSJXZWJraXQiK2MuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKWluIFI3LnN0eWxlKSksbH0oYSl9bWF0Y2hlc0VsZW1lbnQoYSxkKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQoYSxkKXtyZXR1cm4gbWhlKGEsZCl9Z2V0UGFyZW50RWxlbWVudChhKXtyZXR1cm4g'@;
put 'QUcoYSl9cXVlcnkoYSxkLGgpe3JldHVybiB2aGUoYSxkLGgpfWNvbXB1dGVTdHlsZShhLGQsaCl7cmV0dXJuIGh8fCIifWFuaW1hdGUoYSxkLGgsZix2LE09W10sRCl7cmV0dXJuIG5ldyBfeChoLGYpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp'@;
put 'fX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NsYXNzIERHe3N0YXRpY3t0aGlzLk5PT1A9bmV3IGtHfX1jbGFzcyBJR3t9Y29uc3Qgd0dlPTFlMyxSRz0ibmctZW50ZXIiLHBPPSJuZy1sZWF2ZSIsZ089Im5n'@;
put 'LXRyaWdnZXIiLG1PPSIubmctdHJpZ2dlciIseWhlPSJuZy1hbmltYXRpbmciLExHPSIubmctYW5pbWF0aW5nIjtmdW5jdGlvbiBwZyhjKXtpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIGM7Y29uc3QgbD1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKS8pO3JldHVybiFsfHxsLmxlbmd0'@;
put 'aDwyPzA6T0cocGFyc2VGbG9hdChsWzFdKSxsWzJdKX1mdW5jdGlvbiBPRyhjLGwpe3JldHVybiJzIj09PWw/Yyp3R2U6Y31mdW5jdGlvbiB2TyhjLGwsYSl7cmV0dXJuIGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIik/YzpmdW5jdGlvbiBTR2UoYyxsLGEpe2xldCBoLGY9MCx2PSIiO2lm'@;
put 'KCJzdHJpbmciPT10eXBlb2YgYyl7Y29uc3QgTT1jLm1hdGNoKC9eKC0/W1wuXGRdKykobT9zKSg/OlxzKygtP1tcLlxkXSspKG0/cykpPyg/OlxzKyhbLWEtel0rKD86XCguKz9cKSk/KSk/JC9pKTtpZihudWxsPT09TSlyZXR1cm4gbC5wdXNoKGhoZSgpKSx7ZHVyYXRpb246MCxkZWxheTow'@;
put 'LGVhc2luZzoiIn07aD1PRyhwYXJzZUZsb2F0KE1bMV0pLE1bMl0pO2NvbnN0IEQ9TVszXTtudWxsIT1EJiYoZj1PRyhwYXJzZUZsb2F0KEQpLE1bNF0pKTtjb25zdCBaPU1bNV07WiYmKHY9Wil9ZWxzZSBoPWM7aWYoIWEpe2xldCBNPSExLEQ9bC5sZW5ndGg7aDwwJiYobC5wdXNoKGZ1bmN0'@;
put 'aW9uIEZZZSgpe3JldHVybiBuZXcgUW4oMzEwMCwhMSl9KCkpLE09ITApLGY8MCYmKGwucHVzaChmdW5jdGlvbiBIWWUoKXtyZXR1cm4gbmV3IFFuKDMxMDEsITEpfSgpKSxNPSEwKSxNJiZsLnNwbGljZShELDAsaGhlKCkpfXJldHVybntkdXJhdGlvbjpoLGRlbGF5OmYsZWFzaW5nOnZ9fShj'@;
put 'LGwsYSl9ZnVuY3Rpb24gTXAoYyxsLGEpe2wuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9RkcoaCk7YSYmIWEuaGFzKGgpJiZhLnNldChoLGMuc3R5bGVbZl0pLGMuc3R5bGVbZl09ZH0pfWZ1bmN0aW9uIEw3KGMsbCl7bC5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD1GRyhkKTtjLnN0eWxlW2hd'@;
put 'PSIifSl9ZnVuY3Rpb24gdEUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/MT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbiBpUGUoYyxsPW51bGwpe3JldHVybnt0eXBlOkFhLlNlcXVlbmNlLHN0ZXBzOmMsb3B0aW9uczpsfX0oYyk6Y31jb25zdCBQRz1uZXcgUmVnRXhwKCJ7e1xccyooLis/'@;
put 'KVxccyp9fSIsImciKTtmdW5jdGlvbiB3aGUoYyl7bGV0IGw9W107aWYoInN0cmluZyI9PXR5cGVvZiBjKXtsZXQgYTtmb3IoO2E9UEcuZXhlYyhjKTspbC5wdXNoKGFbMV0pO1BHLmxhc3RJbmRleD0wfXJldHVybiBsfWZ1bmN0aW9uIG5FKGMsbCxhKXtjb25zdCBkPWAke2N9YCxoPWQucmVw'@;
put 'bGFjZShQRywoZix2KT0+e2xldCBNPWxbdl07cmV0dXJuIG51bGw9PU0mJihhLnB1c2goZnVuY3Rpb24gVlllKGMpe3JldHVybiBuZXcgUW4oMzAwMywhMSl9KCkpLE09IiIpLE0udG9TdHJpbmcoKX0pO3JldHVybiBoPT1kP2M6aH1jb25zdCBFR2U9Ly0rKFthLXowLTldKS9nO2Z1bmN0aW9u'@;
put 'IEZHKGMpe3JldHVybiBjLnJlcGxhY2UoRUdlLCguLi5sKT0+bFsxXS50b1VwcGVyQ2FzZSgpKX1mdW5jdGlvbiBraChjLGwsYSl7c3dpdGNoKGwudHlwZSl7Y2FzZSBBYS5UcmlnZ2VyOnJldHVybiBjLnZpc2l0VHJpZ2dlcihsLGEpO2Nhc2UgQWEuU3RhdGU6cmV0dXJuIGMudmlzaXRTdGF0'@;
put 'ZShsLGEpO2Nhc2UgQWEuVHJhbnNpdGlvbjpyZXR1cm4gYy52aXNpdFRyYW5zaXRpb24obCxhKTtjYXNlIEFhLlNlcXVlbmNlOnJldHVybiBjLnZpc2l0U2VxdWVuY2UobCxhKTtjYXNlIEFhLkdyb3VwOnJldHVybiBjLnZpc2l0R3JvdXAobCxhKTtjYXNlIEFhLkFuaW1hdGU6cmV0dXJuIGMu'@;
put 'dmlzaXRBbmltYXRlKGwsYSk7Y2FzZSBBYS5LZXlmcmFtZXM6cmV0dXJuIGMudmlzaXRLZXlmcmFtZXMobCxhKTtjYXNlIEFhLlN0eWxlOnJldHVybiBjLnZpc2l0U3R5bGUobCxhKTtjYXNlIEFhLlJlZmVyZW5jZTpyZXR1cm4gYy52aXNpdFJlZmVyZW5jZShsLGEpO2Nhc2UgQWEuQW5pbWF0'@;
put 'ZUNoaWxkOnJldHVybiBjLnZpc2l0QW5pbWF0ZUNoaWxkKGwsYSk7Y2FzZSBBYS5BbmltYXRlUmVmOnJldHVybiBjLnZpc2l0QW5pbWF0ZVJlZihsLGEpO2Nhc2UgQWEuUXVlcnk6cmV0dXJuIGMudmlzaXRRdWVyeShsLGEpO2Nhc2UgQWEuU3RhZ2dlcjpyZXR1cm4gYy52aXNpdFN0YWdnZXIo'@;
put 'bCxhKTtkZWZhdWx0OnRocm93IGZ1bmN0aW9uIEJZZShjKXtyZXR1cm4gbmV3IFFuKDMwMDQsITEpfSgpfX1mdW5jdGlvbiBIRyhjLGwpe3JldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjKVtsXX1jb25zdCBrR2U9bmV3IFNldChbIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJt'@;
put 'aW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImxlZnQiLCJ0b3AiLCJib3R0b20iLCJyaWdodCIsImZvbnRTaXplIiwib3V0bGluZVdpZHRoIiwib3V0bGluZU9mZnNldCIsInBhZGRpbmdUb3AiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nUmlnaHQiLCJt'@;
put 'YXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luUmlnaHQiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJXaWR0aCIsImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwidGV4dEluZGVu'@;
put 'dCIsInBlcnNwZWN0aXZlIl0pO2NsYXNzIENoZSBleHRlbmRzIElHe25vcm1hbGl6ZVByb3BlcnR5TmFtZShsLGEpe3JldHVybiBGRyhsKX1ub3JtYWxpemVTdHlsZVZhbHVlKGwsYSxkLGgpe2xldCBmPSIiO2NvbnN0IHY9ZC50b1N0cmluZygpLnRyaW0oKTtpZihrR2UuaGFzKGEpJiYwIT09'@;
put 'ZCYmIjAiIT09ZClpZigibnVtYmVyIj09dHlwZW9mIGQpZj0icHgiO2Vsc2V7Y29uc3QgTT1kLm1hdGNoKC9eWystXT9bXGRcLl0rKFthLXpdKikkLyk7TSYmMD09TVsxXS5sZW5ndGgmJmgucHVzaChmdW5jdGlvbiBqWWUoYyxsKXtyZXR1cm4gbmV3IFFuKDMwMDUsITEpfSgpKX1yZXR1cm4g'@;
put 'ditmfX1jb25zdCBiTz0iKiI7Y29uc3QgeU89bmV3IFNldChbInRydWUiLCIxIl0pLF9PPW5ldyBTZXQoWyJmYWxzZSIsIjAiXSk7ZnVuY3Rpb24gU2hlKGMsbCl7Y29uc3QgYT15Ty5oYXMoYyl8fF9PLmhhcyhjKSxkPXlPLmhhcyhsKXx8X08uaGFzKGwpO3JldHVybihoLGYpPT57bGV0IHY9'@;
put 'Yz09Yk98fGM9PWgsTT1sPT1iT3x8bD09ZjtyZXR1cm4hdiYmYSYmImJvb2xlYW4iPT10eXBlb2YgaCYmKHY9aD95Ty5oYXMoYyk6X08uaGFzKGMpKSwhTSYmZCYmImJvb2xlYW4iPT10eXBlb2YgZiYmKE09Zj95Ty5oYXMobCk6X08uaGFzKGwpKSx2JiZNfX1jb25zdCBMR2U9bmV3IFJlZ0V4'@;
put 'cCgicyo6c2VsZnMqLD8iLCJnIik7ZnVuY3Rpb24gTkcoYyxsLGEsZCl7cmV0dXJuIG5ldyBPR2UoYykuYnVpbGQobCxhLGQpfWNsYXNzIE9HZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kcml2ZXI9bH1idWlsZChsLGEsZCl7Y29uc3QgaD1uZXcgSEdlKGEpO3JldHVybiB0aGlzLl9yZXNldENv'@;
put 'bnRleHRTdHlsZVRpbWluZ1N0YXRlKGgpLGtoKHRoaXMsdEUobCksaCl9X3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUobCl7bC5jdXJyZW50UXVlcnlTZWxlY3Rvcj0iIixsLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLGwuY29sbGVjdGVkU3R5bGVzLnNldCgiIixuZXcgTWFwKSxsLmN1'@;
put 'cnJlbnRUaW1lPTB9dmlzaXRUcmlnZ2VyKGwsYSl7bGV0IGQ9YS5xdWVyeUNvdW50PTAsaD1hLmRlcENvdW50PTA7Y29uc3QgZj1bXSx2PVtdO3JldHVybiJAIj09bC5uYW1lLmNoYXJBdCgwKSYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiB6WWUoKXtyZXR1cm4gbmV3IFFuKDMwMDYsITEpfSgp'@;
put 'KSxsLmRlZmluaXRpb25zLmZvckVhY2goTT0+e2lmKHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoYSksTS50eXBlPT1BYS5TdGF0ZSl7Y29uc3QgRD1NLFo9RC5uYW1lO1oudG9TdHJpbmcoKS5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2gobmU9PntELm5hbWU9bmUsZi5wdXNo'@;
put 'KHRoaXMudmlzaXRTdGF0ZShELGEpKX0pLEQubmFtZT1afWVsc2UgaWYoTS50eXBlPT1BYS5UcmFuc2l0aW9uKXtjb25zdCBEPXRoaXMudmlzaXRUcmFuc2l0aW9uKE0sYSk7ZCs9RC5xdWVyeUNvdW50LGgrPUQuZGVwQ291bnQsdi5wdXNoKEQpfWVsc2UgYS5lcnJvcnMucHVzaChmdW5jdGlv'@;
put 'biBVWWUoKXtyZXR1cm4gbmV3IFFuKDMwMDcsITEpfSgpKX0pLHt0eXBlOkFhLlRyaWdnZXIsbmFtZTpsLm5hbWUsc3RhdGVzOmYsdHJhbnNpdGlvbnM6dixxdWVyeUNvdW50OmQsZGVwQ291bnQ6aCxvcHRpb25zOm51bGx9fXZpc2l0U3RhdGUobCxhKXtjb25zdCBkPXRoaXMudmlzaXRTdHls'@;
put 'ZShsLnN0eWxlcyxhKSxoPWwub3B0aW9ucyYmbC5vcHRpb25zLnBhcmFtc3x8bnVsbDtpZihkLmNvbnRhaW5zRHluYW1pY1N0eWxlcyl7Y29uc3QgZj1uZXcgU2V0LHY9aHx8e307ZC5zdHlsZXMuZm9yRWFjaChNPT57TSBpbnN0YW5jZW9mIE1hcCYmTS5mb3JFYWNoKEQ9Pnt3aGUoRCkuZm9y'@;
put 'RWFjaChaPT57di5oYXNPd25Qcm9wZXJ0eShaKXx8Zi5hZGQoWil9KX0pfSksZi5zaXplJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIFpZZShjLGwpe3JldHVybiBuZXcgUW4oMzAwOCwhMSl9KDAsZi52YWx1ZXMoKSkpfXJldHVybnt0eXBlOkFhLlN0YXRlLG5hbWU6bC5uYW1lLHN0eWxlOmQs'@;
put 'b3B0aW9uczpoP3twYXJhbXM6aH06bnVsbH19dmlzaXRUcmFuc2l0aW9uKGwsYSl7YS5xdWVyeUNvdW50PTAsYS5kZXBDb3VudD0wO2NvbnN0IGQ9a2godGhpcyx0RShsLmFuaW1hdGlvbiksYSksaD1mdW5jdGlvbiBER2UoYyxsKXtjb25zdCBhPVtdO3JldHVybiJzdHJpbmciPT10eXBlb2Yg'@;
put 'Yz9jLnNwbGl0KC9ccyosXHMqLykuZm9yRWFjaChkPT5mdW5jdGlvbiBJR2UoYyxsLGEpe2lmKCI6Ij09Y1swXSl7Y29uc3QgRD1mdW5jdGlvbiBSR2UoYyxsKXtzd2l0Y2goYyl7Y2FzZSI6ZW50ZXIiOnJldHVybiJ2b2lkID0+ICoiO2Nhc2UiOmxlYXZlIjpyZXR1cm4iKiA9PiB2b2lkIjtj'@;
put 'YXNlIjppbmNyZW1lbnQiOnJldHVybihhLGQpPT5wYXJzZUZsb2F0KGQpPnBhcnNlRmxvYXQoYSk7Y2FzZSI6ZGVjcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKTxwYXJzZUZsb2F0KGEpO2RlZmF1bHQ6cmV0dXJuIGwucHVzaChmdW5jdGlvbiBlR2UoYyl7cmV0dXJuIG5ldyBR'@;
put 'bigzMDE2LCExKX0oKSksIiogPT4gKiJ9fShjLGEpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBEKXJldHVybiB2b2lkIGwucHVzaChEKTtjPUR9Y29uc3QgZD1jLm1hdGNoKC9eKFwqfFstXHddKylccyooPD9bPS1dPilccyooXCp8Wy1cd10rKSQvKTtpZihudWxsPT1kfHxkLmxlbmd0aDw0KXJl'@;
put 'dHVybiBhLnB1c2goZnVuY3Rpb24gUVllKGMpe3JldHVybiBuZXcgUW4oMzAxNSwhMSl9KCkpLGw7Y29uc3QgaD1kWzFdLGY9ZFsyXSx2PWRbM107bC5wdXNoKFNoZShoLHYpKSwiPCI9PWZbMF0mJihoIT1iT3x8diE9Yk8pJiZsLnB1c2goU2hlKHYsaCkpfShkLGEsbCkpOmEucHVzaChjKSxh'@;
put 'fShsLmV4cHIsYS5lcnJvcnMpO3JldHVybnt0eXBlOkFhLlRyYW5zaXRpb24sbWF0Y2hlcnM6aCxhbmltYXRpb246ZCxxdWVyeUNvdW50OmEucXVlcnlDb3VudCxkZXBDb3VudDphLmRlcENvdW50LG9wdGlvbnM6TzcobC5vcHRpb25zKX19dmlzaXRTZXF1ZW5jZShsLGEpe3JldHVybnt0eXBl'@;
put 'OkFhLlNlcXVlbmNlLHN0ZXBzOmwuc3RlcHMubWFwKGQ9PmtoKHRoaXMsZCxhKSksb3B0aW9uczpPNyhsLm9wdGlvbnMpfX12aXNpdEdyb3VwKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lO2xldCBoPTA7Y29uc3QgZj1sLnN0ZXBzLm1hcCh2PT57YS5jdXJyZW50VGltZT1kO2NvbnN0IE09'@;
put 'a2godGhpcyx2LGEpO3JldHVybiBoPU1hdGgubWF4KGgsYS5jdXJyZW50VGltZSksTX0pO3JldHVybiBhLmN1cnJlbnRUaW1lPWgse3R5cGU6QWEuR3JvdXAsc3RlcHM6ZixvcHRpb25zOk83KGwub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZShsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gVkdlKGMsbCl7'@;
put 'aWYoYy5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKSlyZXR1cm4gYztpZigibnVtYmVyIj09dHlwZW9mIGMpcmV0dXJuIFZHKHZPKGMsbCkuZHVyYXRpb24sMCwiIik7Y29uc3QgYT1jO2lmKGEuc3BsaXQoL1xzKy8pLnNvbWUoZj0+InsiPT1mLmNoYXJBdCgwKSYmInsiPT1mLmNoYXJBdCgx'@;
put 'KSkpe2NvbnN0IGY9VkcoMCwwLCIiKTtyZXR1cm4gZi5keW5hbWljPSEwLGYuc3RyVmFsdWU9YSxmfWNvbnN0IGg9dk8oYSxsKTtyZXR1cm4gVkcoaC5kdXJhdGlvbixoLmRlbGF5LGguZWFzaW5nKX0obC50aW1pbmdzLGEuZXJyb3JzKTthLmN1cnJlbnRBbmltYXRlVGltaW5ncz1kO2xldCBo'@;
put 'LGY9bC5zdHlsZXM/bC5zdHlsZXM6Y3Moe30pO2lmKGYudHlwZT09QWEuS2V5ZnJhbWVzKWg9dGhpcy52aXNpdEtleWZyYW1lcyhmLGEpO2Vsc2V7bGV0IHY9bC5zdHlsZXMsTT0hMTtpZighdil7TT0hMDtjb25zdCBaPXt9O2QuZWFzaW5nJiYoWi5lYXNpbmc9ZC5lYXNpbmcpLHY9Y3MoWil9'@;
put 'YS5jdXJyZW50VGltZSs9ZC5kdXJhdGlvbitkLmRlbGF5O2NvbnN0IEQ9dGhpcy52aXNpdFN0eWxlKHYsYSk7RC5pc0VtcHR5U3RlcD1NLGg9RH1yZXR1cm4gYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx7dHlwZTpBYS5BbmltYXRlLHRpbWluZ3M6ZCxzdHlsZTpoLG9wdGlvbnM6bnVs'@;
put 'bH19dmlzaXRTdHlsZShsLGEpe2NvbnN0IGQ9dGhpcy5fbWFrZVN0eWxlQXN0KGwsYSk7cmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3QoZCxhKSxkfV9tYWtlU3R5bGVBc3QobCxhKXtjb25zdCBkPVtdLGg9QXJyYXkuaXNBcnJheShsLnN0eWxlcyk/bC5zdHlsZXM6W2wuc3R5bGVzXTtm'@;
put 'b3IobGV0IE0gb2YgaCkic3RyaW5nIj09dHlwZW9mIE0/TT09PWlnP2QucHVzaChNKTphLmVycm9ycy5wdXNoKG5ldyBRbigzMDAyLCExKSk6ZC5wdXNoKG5ldyBNYXAoT2JqZWN0LmVudHJpZXMoTSkpKTtsZXQgZj0hMSx2PW51bGw7cmV0dXJuIGQuZm9yRWFjaChNPT57aWYoTSBpbnN0YW5j'@;
put 'ZW9mIE1hcCYmKE0uaGFzKCJlYXNpbmciKSYmKHY9TS5nZXQoImVhc2luZyIpLE0uZGVsZXRlKCJlYXNpbmciKSksIWYpKWZvcihsZXQgRCBvZiBNLnZhbHVlcygpKWlmKEQudG9TdHJpbmcoKS5pbmRleE9mKCJ7eyIpPj0wKXtmPSEwO2JyZWFrfX0pLHt0eXBlOkFhLlN0eWxlLHN0eWxlczpk'@;
put 'LGVhc2luZzp2LG9mZnNldDpsLm9mZnNldCxjb250YWluc0R5bmFtaWNTdHlsZXM6ZixvcHRpb25zOm51bGx9fV92YWxpZGF0ZVN0eWxlQXN0KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncztsZXQgaD1hLmN1cnJlbnRUaW1lLGY9YS5jdXJyZW50VGltZTtkJiZmPjAmJihm'@;
put 'LT1kLmR1cmF0aW9uK2QuZGVsYXkpLGwuc3R5bGVzLmZvckVhY2godj0+eyJzdHJpbmciIT10eXBlb2YgdiYmdi5mb3JFYWNoKChNLEQpPT57Y29uc3QgWj1hLmNvbGxlY3RlZFN0eWxlcy5nZXQoYS5jdXJyZW50UXVlcnlTZWxlY3RvciksbmU9Wi5nZXQoRCk7bGV0IGNlPSEwO25lJiYoZiE9'@;
put 'aCYmZj49bmUuc3RhcnRUaW1lJiZoPD1uZS5lbmRUaW1lJiYoYS5lcnJvcnMucHVzaChmdW5jdGlvbiBZWWUoYyxsLGEsZCxoKXtyZXR1cm4gbmV3IFFuKDMwMTAsITEpfSgpKSxjZT0hMSksZj1uZS5zdGFydFRpbWUpLGNlJiZaLnNldChELHtzdGFydFRpbWU6ZixlbmRUaW1lOmh9KSxhLm9w'@;
put 'dGlvbnMmJmZ1bmN0aW9uIHhHZShjLGwsYSl7Y29uc3QgZD1sLnBhcmFtc3x8e30saD13aGUoYyk7aC5sZW5ndGgmJmguZm9yRWFjaChmPT57ZC5oYXNPd25Qcm9wZXJ0eShmKXx8YS5wdXNoKGZ1bmN0aW9uIE5ZZShjKXtyZXR1cm4gbmV3IFFuKDMwMDEsITEpfSgpKX0pfShNLGEub3B0aW9u'@;
put 'cyxhLmVycm9ycyl9KX0pfXZpc2l0S2V5ZnJhbWVzKGwsYSl7Y29uc3QgZD17dHlwZTpBYS5LZXlmcmFtZXMsc3R5bGVzOltdLG9wdGlvbnM6bnVsbH07aWYoIWEuY3VycmVudEFuaW1hdGVUaW1pbmdzKXJldHVybiBhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIEdZZSgpe3JldHVybiBuZXcgUW4o'@;
put 'MzAxMSwhMSl9KCkpLGQ7bGV0IGY9MDtjb25zdCB2PVtdO2xldCBNPSExLEQ9ITEsWj0wO2NvbnN0IG5lPWwuc3RlcHMubWFwKHB0PT57Y29uc3QgZHQ9dGhpcy5fbWFrZVN0eWxlQXN0KHB0LGEpO2xldCBKdD1udWxsIT1kdC5vZmZzZXQ/ZHQub2Zmc2V0OmZ1bmN0aW9uIE5HZShjKXtpZigi'@;
put 'c3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIG51bGw7bGV0IGw9bnVsbDtpZihBcnJheS5pc0FycmF5KGMpKWMuZm9yRWFjaChhPT57aWYoYSBpbnN0YW5jZW9mIE1hcCYmYS5oYXMoIm9mZnNldCIpKXtjb25zdCBkPWE7bD1wYXJzZUZsb2F0KGQuZ2V0KCJvZmZzZXQiKSksZC5kZWxldGUoIm9m'@;
put 'ZnNldCIpfX0pO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIE1hcCYmYy5oYXMoIm9mZnNldCIpKXtjb25zdCBhPWM7bD1wYXJzZUZsb2F0KGEuZ2V0KCJvZmZzZXQiKSksYS5kZWxldGUoIm9mZnNldCIpfXJldHVybiBsfShkdC5zdHlsZXMpLHZuPTA7cmV0dXJuIG51bGwhPUp0JiYoZisrLHZuPWR0'@;
put 'Lm9mZnNldD1KdCksRD1EfHx2bjwwfHx2bj4xLE09TXx8dm48WixaPXZuLHYucHVzaCh2biksZHR9KTtEJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uICRZZSgpe3JldHVybiBuZXcgUW4oMzAxMiwhMSl9KCkpLE0mJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gS1llKCl7cmV0dXJuIG5ldyBRbigz'@;
put 'MjAwLCExKX0oKSk7Y29uc3QgY2U9bC5zdGVwcy5sZW5ndGg7bGV0IGJlPTA7Zj4wJiZmPGNlP2EuZXJyb3JzLnB1c2goZnVuY3Rpb24gcVllKCl7cmV0dXJuIG5ldyBRbigzMjAyLCExKX0oKSk6MD09ZiYmKGJlPTEvKGNlLTEpKTtjb25zdCBFZT1jZS0xLEJlPWEuY3VycmVudFRpbWUscWU9'@;
put 'YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MscnQ9cWUuZHVyYXRpb247cmV0dXJuIG5lLmZvckVhY2goKHB0LGR0KT0+e2NvbnN0IEp0PWJlPjA/ZHQ9PUVlPzE6YmUqZHQ6dltkdF0sdm49SnQqcnQ7YS5jdXJyZW50VGltZT1CZStxZS5kZWxheSt2bixxZS5kdXJhdGlvbj12bix0aGlzLl92YWxp'@;
put 'ZGF0ZVN0eWxlQXN0KHB0LGEpLHB0Lm9mZnNldD1KdCxkLnN0eWxlcy5wdXNoKHB0KX0pLGR9dmlzaXRSZWZlcmVuY2UobCxhKXtyZXR1cm57dHlwZTpBYS5SZWZlcmVuY2UsYW5pbWF0aW9uOmtoKHRoaXMsdEUobC5hbmltYXRpb24pLGEpLG9wdGlvbnM6TzcobC5vcHRpb25zKX19dmlzaXRB'@;
put 'bmltYXRlQ2hpbGQobCxhKXtyZXR1cm4gYS5kZXBDb3VudCsrLHt0eXBlOkFhLkFuaW1hdGVDaGlsZCxvcHRpb25zOk83KGwub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZVJlZihsLGEpe3JldHVybnt0eXBlOkFhLkFuaW1hdGVSZWYsYW5pbWF0aW9uOnRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmlt'@;
put 'YXRpb24sYSksb3B0aW9uczpPNyhsLm9wdGlvbnMpfX12aXNpdFF1ZXJ5KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRRdWVyeVNlbGVjdG9yLGg9bC5vcHRpb25zfHx7fTthLnF1ZXJ5Q291bnQrKyxhLmN1cnJlbnRRdWVyeT1sO2NvbnN0W2Ysdl09ZnVuY3Rpb24gUEdlKGMpe2NvbnN0IGw9ISFj'@;
put 'LnNwbGl0KC9ccyosXHMqLykuZmluZChhPT4iOnNlbGYiPT1hKTtyZXR1cm4gbCYmKGM9Yy5yZXBsYWNlKExHZSwiIikpLGM9Yy5yZXBsYWNlKC9AXCovZyxtTykucmVwbGFjZSgvQFx3Ky9nLGE9Pm1PKyItIithLnNsaWNlKDEpKS5yZXBsYWNlKC86YW5pbWF0aW5nL2csTEcpLFtjLGxdfShs'@;
put 'LnNlbGVjdG9yKTthLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWQubGVuZ3RoP2QrIiAiK2Y6ZixBaChhLmNvbGxlY3RlZFN0eWxlcyxhLmN1cnJlbnRRdWVyeVNlbGVjdG9yLG5ldyBNYXApO2NvbnN0IE09a2godGhpcyx0RShsLmFuaW1hdGlvbiksYSk7cmV0dXJuIGEuY3VycmVudFF1ZXJ5PW51'@;
put 'bGwsYS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1kLHt0eXBlOkFhLlF1ZXJ5LHNlbGVjdG9yOmYsbGltaXQ6aC5saW1pdHx8MCxvcHRpb25hbDohIWgub3B0aW9uYWwsaW5jbHVkZVNlbGY6dixhbmltYXRpb246TSxvcmlnaW5hbFNlbGVjdG9yOmwuc2VsZWN0b3Isb3B0aW9uczpPNyhsLm9wdGlv'@;
put 'bnMpfX12aXNpdFN0YWdnZXIobCxhKXthLmN1cnJlbnRRdWVyeXx8YS5lcnJvcnMucHVzaChmdW5jdGlvbiBYWWUoKXtyZXR1cm4gbmV3IFFuKDMwMTMsITEpfSgpKTtjb25zdCBkPSJmdWxsIj09PWwudGltaW5ncz97ZHVyYXRpb246MCxkZWxheTowLGVhc2luZzoiZnVsbCJ9OnZPKGwudGlt'@;
put 'aW5ncyxhLmVycm9ycywhMCk7cmV0dXJue3R5cGU6QWEuU3RhZ2dlcixhbmltYXRpb246a2godGhpcyx0RShsLmFuaW1hdGlvbiksYSksdGltaW5nczpkLG9wdGlvbnM6bnVsbH19fWNsYXNzIEhHZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVycm9ycz1sLHRoaXMucXVlcnlDb3VudD0wLHRoaXMu'@;
put 'ZGVwQ291bnQ9MCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5jdXJyZW50UXVlcnk9bnVsbCx0aGlzLmN1cnJlbnRRdWVyeVNlbGVjdG9yPW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLmN1cnJlbnRUaW1lPTAsdGhpcy5jb2xsZWN0ZWRTdHlsZXM9'@;
put 'bmV3IE1hcCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLnVuc3VwcG9ydGVkQ1NTUHJvcGVydGllc0ZvdW5kPW5ldyBTZXR9fWZ1bmN0aW9uIE83KGMpe3JldHVybiBjPyhjPXsuLi5jfSkucGFyYW1zJiYoYy5wYXJhbXM9ZnVuY3Rpb24gRkdlKGMpe3JldHVybiBjP3suLi5jfTpudWxsfShjLnBh'@;
put 'cmFtcykpOmM9e30sY31mdW5jdGlvbiBWRyhjLGwsYSl7cmV0dXJue2R1cmF0aW9uOmMsZGVsYXk6bCxlYXNpbmc6YX19ZnVuY3Rpb24gQkcoYyxsLGEsZCxoLGYsdj1udWxsLE09ITEpe3JldHVybnt0eXBlOjEsZWxlbWVudDpjLGtleWZyYW1lczpsLHByZVN0eWxlUHJvcHM6YSxwb3N0U3R5'@;
put 'bGVQcm9wczpkLGR1cmF0aW9uOmgsZGVsYXk6Zix0b3RhbFRpbWU6aCtmLGVhc2luZzp2LHN1YlRpbWVsaW5lOk19fWNsYXNzIHdPe2NvbnN0cnVjdG9yKCl7dGhpcy5fbWFwPW5ldyBNYXB9Z2V0KGwpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGwpfHxbXX1hcHBlbmQobCxhKXtsZXQgZD10aGlz'@;
put 'Ll9tYXAuZ2V0KGwpO2R8fHRoaXMuX21hcC5zZXQobCxkPVtdKSxkLnB1c2goLi4uYSl9aGFzKGwpe3JldHVybiB0aGlzLl9tYXAuaGFzKGwpfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCl9fWNvbnN0IHpHZT1uZXcgUmVnRXhwKCI6ZW50ZXIiLCJnIiksWkdlPW5ldyBSZWdFeHAoIjpsZWF2'@;
put 'ZSIsImciKTtmdW5jdGlvbiBqRyhjLGwsYSxkLGgsZj1uZXcgTWFwLHY9bmV3IE1hcCxNLEQsWj1bXSl7cmV0dXJuKG5ldyBXR2UpLmJ1aWxkS2V5ZnJhbWVzKGMsbCxhLGQsaCxmLHYsTSxELFopfWNsYXNzIFdHZXtidWlsZEtleWZyYW1lcyhsLGEsZCxoLGYsdixNLEQsWixuZT1bXSl7Wj1a'@;
put 'fHxuZXcgd087Y29uc3QgY2U9bmV3IHpHKGwsYSxaLGgsZixuZSxbXSk7Y2Uub3B0aW9ucz1EO2NvbnN0IGJlPUQuZGVsYXk/cGcoRC5kZWxheSk6MDtjZS5jdXJyZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChiZSksY2UuY3VycmVudFRpbWVsaW5lLnNldFN0eWxlcyhbdl0sbnVsbCxjZS5l'@;
put 'cnJvcnMsRCksa2godGhpcyxkLGNlKTtjb25zdCBFZT1jZS50aW1lbGluZXMuZmlsdGVyKEJlPT5CZS5jb250YWluc0FuaW1hdGlvbigpKTtpZihFZS5sZW5ndGgmJk0uc2l6ZSl7bGV0IEJlO2ZvcihsZXQgcWU9RWUubGVuZ3RoLTE7cWU+PTA7cWUtLSl7Y29uc3QgcnQ9RWVbcWVdO2lmKHJ0'@;
put 'LmVsZW1lbnQ9PT1hKXtCZT1ydDticmVha319QmUmJiFCZS5hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpJiZCZS5zZXRTdHlsZXMoW01dLG51bGwsY2UuZXJyb3JzLEQpfXJldHVybiBFZS5sZW5ndGg/RWUubWFwKEJlPT5CZS5idWlsZEtleWZyYW1lcygpKTpbQkcoYSxbXSxbXSxbXSwwLGJl'@;
put 'LCIiLCExKV19dmlzaXRUcmlnZ2VyKGwsYSl7fXZpc2l0U3RhdGUobCxhKXt9dmlzaXRUcmFuc2l0aW9uKGwsYSl7fXZpc2l0QW5pbWF0ZUNoaWxkKGwsYSl7Y29uc3QgZD1hLnN1Ykluc3RydWN0aW9ucy5nZXQoYS5lbGVtZW50KTtpZihkKXtjb25zdCBoPWEuY3JlYXRlU3ViQ29udGV4dChs'@;
put 'Lm9wdGlvbnMpLGY9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsdj10aGlzLl92aXNpdFN1Ykluc3RydWN0aW9ucyhkLGgsaC5vcHRpb25zKTtmIT12JiZhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh2KX1hLnByZXZpb3VzTm9kZT1sfXZpc2l0QW5pbWF0ZVJlZihsLGEpe2NvbnN0'@;
put 'IGQ9YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyk7ZC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSx0aGlzLl9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhbbC5vcHRpb25zLGwuYW5pbWF0aW9uLm9wdGlvbnNdLGEsZCksdGhpcy52aXNpdFJlZmVyZW5jZShsLmFuaW1hdGlvbixkKSxh'@;
put 'LnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShkLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksYS5wcmV2aW91c05vZGU9bH1fYXBwbHlBbmltYXRpb25SZWZEZWxheXMobCxhLGQpe2Zvcihjb25zdCBoIG9mIGwpe2NvbnN0IGY9aD8uZGVsYXk7aWYoZil7Y29uc3Qgdj0ibnVtYmVyIj09'@;
put 'dHlwZW9mIGY/ZjpwZyhuRShmLGg/LnBhcmFtcz8/e30sYS5lcnJvcnMpKTtkLmRlbGF5TmV4dFN0ZXAodil9fX1fdmlzaXRTdWJJbnN0cnVjdGlvbnMobCxhLGQpe2xldCBmPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lO2NvbnN0IHY9bnVsbCE9ZC5kdXJhdGlvbj9wZyhkLmR1cmF0'@;
put 'aW9uKTpudWxsLE09bnVsbCE9ZC5kZWxheT9wZyhkLmRlbGF5KTpudWxsO3JldHVybiAwIT09diYmbC5mb3JFYWNoKEQ9Pntjb25zdCBaPWEuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKEQsdixNKTtmPU1hdGgubWF4KGYsWi5kdXJhdGlvbitaLmRlbGF5KX0pLGZ9dmlzaXRSZWZlcmVu'@;
put 'Y2UobCxhKXthLnVwZGF0ZU9wdGlvbnMobC5vcHRpb25zLCEwKSxraCh0aGlzLGwuYW5pbWF0aW9uLGEpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTZXF1ZW5jZShsLGEpe2NvbnN0IGQ9YS5zdWJDb250ZXh0Q291bnQ7bGV0IGg9YTtjb25zdCBmPWwub3B0aW9ucztpZihmJiYoZi5wYXJhbXN8'@;
put 'fGYuZGVsYXkpJiYoaD1hLmNyZWF0ZVN1YkNvbnRleHQoZiksaC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSxudWxsIT1mLmRlbGF5KSl7aC5wcmV2aW91c05vZGUudHlwZT09QWEuU3R5bGUmJihoLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxoLnByZXZpb3Vz'@;
put 'Tm9kZT1DTyk7Y29uc3Qgdj1wZyhmLmRlbGF5KTtoLmRlbGF5TmV4dFN0ZXAodil9bC5zdGVwcy5sZW5ndGgmJihsLnN0ZXBzLmZvckVhY2godj0+a2godGhpcyx2LGgpKSxoLmN1cnJlbnRUaW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxoLnN1YkNvbnRleHRDb3VudD5kJiZoLnRy'@;
put 'YW5zZm9ybUludG9OZXdUaW1lbGluZSgpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0R3JvdXAobCxhKXtjb25zdCBkPVtdO2xldCBoPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lO2NvbnN0IGY9bC5vcHRpb25zJiZsLm9wdGlvbnMuZGVsYXk/cGcobC5vcHRpb25zLmRlbGF5KTowO2wu'@;
put 'c3RlcHMuZm9yRWFjaCh2PT57Y29uc3QgTT1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKTtmJiZNLmRlbGF5TmV4dFN0ZXAoZiksa2godGhpcyx2LE0pLGg9TWF0aC5tYXgoaCxNLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSksZC5wdXNoKE0uY3VycmVudFRpbWVsaW5lKX0pLGQu'@;
put 'Zm9yRWFjaCh2PT5hLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKHYpKSxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShoKSxhLnByZXZpb3VzTm9kZT1sfV92aXNpdFRpbWluZyhsLGEpe2lmKGwuZHluYW1pYyl7Y29uc3QgZD1sLnN0clZhbHVlO3JldHVy'@;
put 'biB2TyhhLnBhcmFtcz9uRShkLGEucGFyYW1zLGEuZXJyb3JzKTpkLGEuZXJyb3JzKX1yZXR1cm57ZHVyYXRpb246bC5kdXJhdGlvbixkZWxheTpsLmRlbGF5LGVhc2luZzpsLmVhc2luZ319dmlzaXRBbmltYXRlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLl92'@;
put 'aXNpdFRpbWluZyhsLnRpbWluZ3MsYSksaD1hLmN1cnJlbnRUaW1lbGluZTtkLmRlbGF5JiYoYS5pbmNyZW1lbnRUaW1lKGQuZGVsYXkpLGguc25hcHNob3RDdXJyZW50U3R5bGVzKCkpO2NvbnN0IGY9bC5zdHlsZTtmLnR5cGU9PUFhLktleWZyYW1lcz90aGlzLnZpc2l0S2V5ZnJhbWVzKGYs'@;
put 'YSk6KGEuaW5jcmVtZW50VGltZShkLmR1cmF0aW9uKSx0aGlzLnZpc2l0U3R5bGUoZixhKSxoLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpKSxhLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTdHlsZShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZWxp'@;
put 'bmUsaD1hLmN1cnJlbnRBbmltYXRlVGltaW5nczshaCYmZC5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkmJmQuZm9yd2FyZEZyYW1lKCk7Y29uc3QgZj1oJiZoLmVhc2luZ3x8bC5lYXNpbmc7bC5pc0VtcHR5U3RlcD9kLmFwcGx5RW1wdHlTdGVwKGYpOmQuc2V0U3R5bGVzKGwuc3R5bGVz'@;
put 'LGYsYS5lcnJvcnMsYS5vcHRpb25zKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0S2V5ZnJhbWVzKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncyxoPWEuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uLGY9ZC5kdXJhdGlvbixNPWEuY3JlYXRlU3ViQ29udGV4dCgpLmN1cnJlbnRU'@;
put 'aW1lbGluZTtNLmVhc2luZz1kLmVhc2luZyxsLnN0eWxlcy5mb3JFYWNoKEQ9PntNLmZvcndhcmRUaW1lKChELm9mZnNldHx8MCkqZiksTS5zZXRTdHlsZXMoRC5zdHlsZXMsRC5lYXNpbmcsYS5lcnJvcnMsYS5vcHRpb25zKSxNLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpfSksYS5jdXJyZW50'@;
put 'VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhNKSxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZShoK2YpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRRdWVyeShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUsaD1sLm9wdGlvbnN8fHt9LGY9aC5k'@;
put 'ZWxheT9wZyhoLmRlbGF5KTowO2YmJihhLnByZXZpb3VzTm9kZS50eXBlPT09QWEuU3R5bGV8fDA9PWQmJmEuY3VycmVudFRpbWVsaW5lLmhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKSkmJihhLmN1cnJlbnRUaW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSxhLnByZXZpb3VzTm9k'@;
put 'ZT1DTyk7bGV0IHY9ZDtjb25zdCBNPWEuaW52b2tlUXVlcnkobC5zZWxlY3RvcixsLm9yaWdpbmFsU2VsZWN0b3IsbC5saW1pdCxsLmluY2x1ZGVTZWxmLCEhaC5vcHRpb25hbCxhLmVycm9ycyk7YS5jdXJyZW50UXVlcnlUb3RhbD1NLmxlbmd0aDtsZXQgRD1udWxsO00uZm9yRWFjaCgoWixu'@;
put 'ZSk9PnthLmN1cnJlbnRRdWVyeUluZGV4PW5lO2NvbnN0IGNlPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMsWik7ZiYmY2UuZGVsYXlOZXh0U3RlcChmKSxaPT09YS5lbGVtZW50JiYoRD1jZS5jdXJyZW50VGltZWxpbmUpLGtoKHRoaXMsbC5hbmltYXRpb24sY2UpLGNlLmN1cnJlbnRU'@;
put 'aW1lbGluZS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx2PU1hdGgubWF4KHYsY2UuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKX0pLGEuY3VycmVudFF1ZXJ5SW5kZXg9MCxhLmN1cnJlbnRRdWVyeVRvdGFsPTAsYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUodiksRCYmKGEuY3VycmVu'@;
put 'dFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoRCksYS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCkpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRTdGFnZ2VyKGwsYSl7Y29uc3QgZD1hLnBhcmVudENvbnRleHQsaD1hLmN1cnJlbnRUaW1lbGluZSxm'@;
put 'PWwudGltaW5ncyx2PU1hdGguYWJzKGYuZHVyYXRpb24pLE09diooYS5jdXJyZW50UXVlcnlUb3RhbC0xKTtsZXQgRD12KmEuY3VycmVudFF1ZXJ5SW5kZXg7c3dpdGNoKGYuZHVyYXRpb248MD8icmV2ZXJzZSI6Zi5lYXNpbmcpe2Nhc2UicmV2ZXJzZSI6RD1NLUQ7YnJlYWs7Y2FzZSJmdWxs'@;
put 'IjpEPWQuY3VycmVudFN0YWdnZXJUaW1lfWNvbnN0IG5lPWEuY3VycmVudFRpbWVsaW5lO0QmJm5lLmRlbGF5TmV4dFN0ZXAoRCk7Y29uc3QgY2U9bmUuY3VycmVudFRpbWU7a2godGhpcyxsLmFuaW1hdGlvbixhKSxhLnByZXZpb3VzTm9kZT1sLGQuY3VycmVudFN0YWdnZXJUaW1lPWguY3Vy'@;
put 'cmVudFRpbWUtY2UrKGguc3RhcnRUaW1lLWQuY3VycmVudFRpbWVsaW5lLnN0YXJ0VGltZSl9fWNvbnN0IENPPXt9O2NsYXNzIHpHe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7dGhpcy5fZHJpdmVyPWwsdGhpcy5lbGVtZW50PWEsdGhpcy5zdWJJbnN0cnVjdGlvbnM9ZCx0aGlzLl9l'@;
put 'bnRlckNsYXNzTmFtZT1oLHRoaXMuX2xlYXZlQ2xhc3NOYW1lPWYsdGhpcy5lcnJvcnM9dix0aGlzLnRpbWVsaW5lcz1NLHRoaXMucGFyZW50Q29udGV4dD1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5wcmV2aW91c05vZGU9Q08sdGhpcy5zdWJDb250ZXh0Q291'@;
put 'bnQ9MCx0aGlzLm9wdGlvbnM9e30sdGhpcy5jdXJyZW50UXVlcnlJbmRleD0wLHRoaXMuY3VycmVudFF1ZXJ5VG90YWw9MCx0aGlzLmN1cnJlbnRTdGFnZ2VyVGltZT0wLHRoaXMuY3VycmVudFRpbWVsaW5lPUR8fG5ldyBTTyh0aGlzLl9kcml2ZXIsYSwwKSxNLnB1c2godGhpcy5jdXJyZW50'@;
put 'VGltZWxpbmUpfWdldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc311cGRhdGVPcHRpb25zKGwsYSl7aWYoIWwpcmV0dXJuO2NvbnN0IGQ9bDtsZXQgaD10aGlzLm9wdGlvbnM7bnVsbCE9ZC5kdXJhdGlvbiYmKGguZHVyYXRpb249cGcoZC5kdXJhdGlvbikpLG51bGwhPWQu'@;
put 'ZGVsYXkmJihoLmRlbGF5PXBnKGQuZGVsYXkpKTtjb25zdCBmPWQucGFyYW1zO2lmKGYpe2xldCB2PWgucGFyYW1zO3Z8fCh2PXRoaXMub3B0aW9ucy5wYXJhbXM9e30pLE9iamVjdC5rZXlzKGYpLmZvckVhY2goTT0+eyghYXx8IXYuaGFzT3duUHJvcGVydHkoTSkpJiYodltNXT1uRShmW01d'@;
put 'LHYsdGhpcy5lcnJvcnMpKX0pfX1fY29weU9wdGlvbnMoKXtjb25zdCBsPXt9O2lmKHRoaXMub3B0aW9ucyl7Y29uc3QgYT10aGlzLm9wdGlvbnMucGFyYW1zO2lmKGEpe2NvbnN0IGQ9bC5wYXJhbXM9e307T2JqZWN0LmtleXMoYSkuZm9yRWFjaChoPT57ZFtoXT1hW2hdfSl9fXJldHVybiBs'@;
put 'fWNyZWF0ZVN1YkNvbnRleHQobD1udWxsLGEsZCl7Y29uc3QgaD1hfHx0aGlzLmVsZW1lbnQsZj1uZXcgekcodGhpcy5fZHJpdmVyLGgsdGhpcy5zdWJJbnN0cnVjdGlvbnMsdGhpcy5fZW50ZXJDbGFzc05hbWUsdGhpcy5fbGVhdmVDbGFzc05hbWUsdGhpcy5lcnJvcnMsdGhpcy50aW1lbGlu'@;
put 'ZXMsdGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayhoLGR8fDApKTtyZXR1cm4gZi5wcmV2aW91c05vZGU9dGhpcy5wcmV2aW91c05vZGUsZi5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsZi5vcHRpb25zPXRoaXMuX2NvcHlPcHRpb25zKCksZi51cGRh'@;
put 'dGVPcHRpb25zKGwpLGYuY3VycmVudFF1ZXJ5SW5kZXg9dGhpcy5jdXJyZW50UXVlcnlJbmRleCxmLmN1cnJlbnRRdWVyeVRvdGFsPXRoaXMuY3VycmVudFF1ZXJ5VG90YWwsZi5wYXJlbnRDb250ZXh0PXRoaXMsdGhpcy5zdWJDb250ZXh0Q291bnQrKyxmfXRyYW5zZm9ybUludG9OZXdUaW1l'@;
put 'bGluZShsKXtyZXR1cm4gdGhpcy5wcmV2aW91c05vZGU9Q08sdGhpcy5jdXJyZW50VGltZWxpbmU9dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yayh0aGlzLmVsZW1lbnQsbCksdGhpcy50aW1lbGluZXMucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSksdGhpcy5jdXJyZW50VGltZWxpbmV9YXBw'@;
put 'ZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKGwsYSxkKXtjb25zdCBoPXtkdXJhdGlvbjphPz9sLmR1cmF0aW9uLGRlbGF5OnRoaXMuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKyhkPz8wKStsLmRlbGF5LGVhc2luZzoiIn0sZj1uZXcgWUdlKHRoaXMuX2RyaXZlcixsLmVsZW1lbnQsbC5r'@;
put 'ZXlmcmFtZXMsbC5wcmVTdHlsZVByb3BzLGwucG9zdFN0eWxlUHJvcHMsaCxsLnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lKTtyZXR1cm4gdGhpcy50aW1lbGluZXMucHVzaChmKSxofWluY3JlbWVudFRpbWUobCl7dGhpcy5jdXJyZW50VGltZWxpbmUuZm9yd2FyZFRpbWUodGhpcy5jdXJyZW50'@;
put 'VGltZWxpbmUuZHVyYXRpb24rbCl9ZGVsYXlOZXh0U3RlcChsKXtsPjAmJnRoaXMuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAobCl9aW52b2tlUXVlcnkobCxhLGQsaCxmLHYpe2xldCBNPVtdO2lmKGgmJk0ucHVzaCh0aGlzLmVsZW1lbnQpLGwubGVuZ3RoPjApe2w9KGw9bC5yZXBs'@;
put 'YWNlKHpHZSwiLiIrdGhpcy5fZW50ZXJDbGFzc05hbWUpKS5yZXBsYWNlKFpHZSwiLiIrdGhpcy5fbGVhdmVDbGFzc05hbWUpO2xldCBaPXRoaXMuX2RyaXZlci5xdWVyeSh0aGlzLmVsZW1lbnQsbCwxIT1kKTswIT09ZCYmKFo9ZDwwP1ouc2xpY2UoWi5sZW5ndGgrZCxaLmxlbmd0aCk6Wi5z'@;
put 'bGljZSgwLGQpKSxNLnB1c2goLi4uWil9cmV0dXJuIWYmJjA9PU0ubGVuZ3RoJiZ2LnB1c2goZnVuY3Rpb24gSlllKGMpe3JldHVybiBuZXcgUW4oMzAxNCwhMSl9KCkpLE19fWNsYXNzIFNPe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuX2RyaXZlcj1sLHRoaXMuZWxlbWVudD1hLHRoaXMu'@;
put 'c3RhcnRUaW1lPWQsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwPWgsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZWFzaW5nPW51bGwsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcz1uZXcgTWFw'@;
put 'LHRoaXMuX3N0eWxlU3VtbWFyeT1uZXcgTWFwLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nU3R5bGVzPW5ldyBNYXAsdGhpcy5fYmFja0ZpbGw9bmV3IE1hcCx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbCx0aGlzLl9lbGVtZW50VGlt'@;
put 'ZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChhKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMu'@;
put 'X2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChhLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0'@;
put 'aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpyZXR1cm4gdGhpcy5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCk7ZGVmYXVsdDpyZXR1cm4hMH19aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2l6ZT4w'@;
put 'fWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlzLmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAobCl7Y29uc3QgYT0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJnRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZTt0aGlzLmR1cmF0aW9ufHxhPyh0aGlzLmZvcndhcmRUaW1l'@;
put 'KHRoaXMuY3VycmVudFRpbWUrbCksYSYmdGhpcy5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk6dGhpcy5zdGFydFRpbWUrPWx9Zm9yayhsLGEpe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyBTTyh0aGlzLl9kcml2ZXIsbCxhfHx0aGlzLmN1cnJlbnRUaW1lLHRoaXMu'@;
put 'X2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cCl9X2xvYWRLZXlmcmFtZSgpe3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1'@;
put 'cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXMuc2V0KHRoaXMuZHVyYXRpb24sdGhpcy5fY3VycmVudEtleWZyYW1lKSl9Zm9yd2FyZEZyYW1lKCl7dGhpcy5kdXJhdGlvbis9MSx0aGlzLl9sb2FkS2V5'@;
put 'ZnJhbWUoKX1mb3J3YXJkVGltZShsKXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHRoaXMuZHVyYXRpb249bCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1fdXBkYXRlU3R5bGUobCxhKXt0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLnNldChsLGEpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5'@;
put 'bGVzLnNldChsLGEpLHRoaXMuX3N0eWxlU3VtbWFyeS5zZXQobCx7dGltZTp0aGlzLmN1cnJlbnRUaW1lLHZhbHVlOmF9KX1hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpe3JldHVybiB0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWUhPT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9YXBwbHlF'@;
put 'bXB0eVN0ZXAobCl7bCYmdGhpcy5fcHJldmlvdXNLZXlmcmFtZS5zZXQoImVhc2luZyIsbCk7Zm9yKGxldFthLGRdb2YgdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpdGhpcy5fYmFja0ZpbGwuc2V0KGEsZHx8aWcpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxpZyk7dGhpcy5fY3Vy'@;
put 'cmVudEVtcHR5U3RlcEtleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1zZXRTdHlsZXMobCxhLGQsaCl7YSYmdGhpcy5fcHJldmlvdXNLZXlmcmFtZS5zZXQoImVhc2luZyIsYSk7Y29uc3QgZj1oJiZoLnBhcmFtc3x8e30sdj1mdW5jdGlvbiBHR2UoYyxsKXtjb25zdCBhPW5ldyBNYXA7'@;
put 'bGV0IGQ7cmV0dXJuIGMuZm9yRWFjaChoPT57aWYoIioiPT09aCl7ZD8/PWwua2V5cygpO2ZvcihsZXQgZiBvZiBkKWEuc2V0KGYsaWcpfWVsc2UgZm9yKGxldFtmLHZdb2YgaClhLnNldChmLHYpfSksYX0obCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFtNLERdb2Ygdil7'@;
put 'Y29uc3QgWj1uRShELGYsZCk7dGhpcy5fcGVuZGluZ1N0eWxlcy5zZXQoTSxaKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmhhcyhNKXx8dGhpcy5fYmFja0ZpbGwuc2V0KE0sdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMuZ2V0KE0pPz9pZyksdGhpcy5fdXBkYXRlU3R5bGUoTSxaKX19'@;
put 'YXBwbHlTdHlsZXNUb0tleWZyYW1lKCl7MCE9dGhpcy5fcGVuZGluZ1N0eWxlcy5zaXplJiYodGhpcy5fcGVuZGluZ1N0eWxlcy5mb3JFYWNoKChsLGEpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGwpfSksdGhpcy5fcGVuZGluZ1N0eWxlcy5jbGVhcigpLHRoaXMuX2xvY2FsVGlt'@;
put 'ZWxpbmVTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5oYXMoYSl8fHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxsKX0pKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtmb3IobGV0W2wsYV1vZiB0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX3Bl'@;
put 'bmRpbmdTdHlsZXMuc2V0KGwsYSksdGhpcy5fdXBkYXRlU3R5bGUobCxhKX1nZXRGaW5hbEtleWZyYW1lKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9Z2V0IHByb3BlcnRpZXMoKXtjb25zdCBsPVtdO2ZvcihsZXQgYSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJh'@;
put 'bWUpbC5wdXNoKGEpO3JldHVybiBsfW1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMobCl7bC5fc3R5bGVTdW1tYXJ5LmZvckVhY2goKGEsZCk9Pntjb25zdCBoPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoZCk7KCFofHxhLnRpbWU+aC50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoZCxhLnZh'@;
put 'bHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKTtjb25zdCBsPW5ldyBTZXQsYT1uZXcgU2V0LGQ9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbjtsZXQgaD1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoTSxEKT0+'@;
put 'e2NvbnN0IFo9bmV3IE1hcChbLi4udGhpcy5fYmFja0ZpbGwsLi4uTV0pO1ouZm9yRWFjaCgobmUsY2UpPT57IiEiPT09bmU/bC5hZGQoY2UpOm5lPT09aWcmJmEuYWRkKGNlKX0pLGR8fFouc2V0KCJvZmZzZXQiLEQvdGhpcy5kdXJhdGlvbiksaC5wdXNoKFopfSk7Y29uc3QgZj1bLi4ubC52'@;
put 'YWx1ZXMoKV0sdj1bLi4uYS52YWx1ZXMoKV07aWYoZCl7Y29uc3QgTT1oWzBdLEQ9bmV3IE1hcChNKTtNLnNldCgib2Zmc2V0IiwwKSxELnNldCgib2Zmc2V0IiwxKSxoPVtNLERdfXJldHVybiBCRyh0aGlzLmVsZW1lbnQsaCxmLHYsdGhpcy5kdXJhdGlvbix0aGlzLnN0YXJ0VGltZSx0aGlz'@;
put 'LmVhc2luZywhMSl9fWNsYXNzIFlHZSBleHRlbmRzIFNPe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE09ITEpe3N1cGVyKGwsYSx2LmRlbGF5KSx0aGlzLmtleWZyYW1lcz1kLHRoaXMucHJlU3R5bGVQcm9wcz1oLHRoaXMucG9zdFN0eWxlUHJvcHM9Zix0aGlzLl9zdHJldGNoU3RhcnRpbmdL'@;
put 'ZXlmcmFtZT1NLHRoaXMudGltaW5ncz17ZHVyYXRpb246di5kdXJhdGlvbixkZWxheTp2LmRlbGF5LGVhc2luZzp2LmVhc2luZ319Y29udGFpbnNBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5rZXlmcmFtZXMubGVuZ3RoPjF9YnVpbGRLZXlmcmFtZXMoKXtsZXQgbD10aGlzLmtleWZyYW1lcyx7'@;
put 'ZGVsYXk6YSxkdXJhdGlvbjpkLGVhc2luZzpofT10aGlzLnRpbWluZ3M7aWYodGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWUmJmEpe2NvbnN0IGY9W10sdj1kK2EsTT1hL3YsRD1uZXcgTWFwKGxbMF0pO0Quc2V0KCJvZmZzZXQiLDApLGYucHVzaChEKTtjb25zdCBaPW5ldyBNYXAobFsw'@;
put 'XSk7Wi5zZXQoIm9mZnNldCIsRWhlKE0pKSxmLnB1c2goWik7Y29uc3QgbmU9bC5sZW5ndGgtMTtmb3IobGV0IGNlPTE7Y2U8PW5lO2NlKyspe2xldCBiZT1uZXcgTWFwKGxbY2VdKTtjb25zdCBFZT1iZS5nZXQoIm9mZnNldCIpO2JlLnNldCgib2Zmc2V0IixFaGUoKGErRWUqZCkvdikpLGYu'@;
put 'cHVzaChiZSl9ZD12LGE9MCxoPSIiLGw9Zn1yZXR1cm4gQkcodGhpcy5lbGVtZW50LGwsdGhpcy5wcmVTdHlsZVByb3BzLHRoaXMucG9zdFN0eWxlUHJvcHMsZCxhLGgsITApfX1mdW5jdGlvbiBFaGUoYyxsPTMpe2NvbnN0IGE9TWF0aC5wb3coMTAsbC0xKTtyZXR1cm4gTWF0aC5yb3VuZChj'@;
put 'KmEpL2F9ZnVuY3Rpb24gVGhlKGMsbCxhLGQsaCxmLHYsTSxELFosbmUsY2UsYmUpe3JldHVybnt0eXBlOjAsZWxlbWVudDpjLHRyaWdnZXJOYW1lOmwsaXNSZW1vdmFsVHJhbnNpdGlvbjpoLGZyb21TdGF0ZTphLGZyb21TdHlsZXM6Zix0b1N0YXRlOmQsdG9TdHlsZXM6dix0aW1lbGluZXM6'@;
put 'TSxxdWVyaWVkRWxlbWVudHM6RCxwcmVTdHlsZVByb3BzOloscG9zdFN0eWxlUHJvcHM6bmUsdG90YWxUaW1lOmNlLGVycm9yczpiZX19Y29uc3QgVUc9e307Y2xhc3MgQWhle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl90cmlnZ2VyTmFtZT1sLHRoaXMuYXN0PWEsdGhpcy5fc3RhdGVTdHls'@;
put 'ZXM9ZH1tYXRjaChsLGEsZCxoKXtyZXR1cm4gZnVuY3Rpb24gJEdlKGMsbCxhLGQsaCl7cmV0dXJuIGMuc29tZShmPT5mKGwsYSxkLGgpKX0odGhpcy5hc3QubWF0Y2hlcnMsbCxhLGQsaCl9YnVpbGRTdHlsZXMobCxhLGQpe2xldCBoPXRoaXMuX3N0YXRlU3R5bGVzLmdldCgiKiIpO3JldHVy'@;
put 'biB2b2lkIDAhPT1sJiYoaD10aGlzLl9zdGF0ZVN0eWxlcy5nZXQobD8udG9TdHJpbmcoKSl8fGgpLGg/aC5idWlsZFN0eWxlcyhhLGQpOm5ldyBNYXB9YnVpbGQobCxhLGQsaCxmLHYsTSxELFosbmUpe2NvbnN0IGNlPVtdLGJlPXRoaXMuYXN0Lm9wdGlvbnMmJnRoaXMuYXN0Lm9wdGlvbnMu'@;
put 'cGFyYW1zfHxVRyxCZT10aGlzLmJ1aWxkU3R5bGVzKGQsTSYmTS5wYXJhbXN8fFVHLGNlKSxxZT1EJiZELnBhcmFtc3x8VUcscnQ9dGhpcy5idWlsZFN0eWxlcyhoLHFlLGNlKSxwdD1uZXcgU2V0LGR0PW5ldyBNYXAsSnQ9bmV3IE1hcCx2bj0idm9pZCI9PT1oLENuPXtwYXJhbXM6a2hlKHFl'@;
put 'LGJlKSxkZWxheTp0aGlzLmFzdC5vcHRpb25zPy5kZWxheX0sdG49bmU/W106akcobCxhLHRoaXMuYXN0LmFuaW1hdGlvbixmLHYsQmUscnQsQ24sWixjZSk7bGV0IE1uPTA7cmV0dXJuIHRuLmZvckVhY2goQ3I9PntNbj1NYXRoLm1heChDci5kdXJhdGlvbitDci5kZWxheSxNbil9KSxjZS5s'@;
put 'ZW5ndGg/VGhlKGEsdGhpcy5fdHJpZ2dlck5hbWUsZCxoLHZuLEJlLHJ0LFtdLFtdLGR0LEp0LE1uLGNlKToodG4uZm9yRWFjaChDcj0+e2NvbnN0IEdyPUNyLmVsZW1lbnQsZ3I9QWgoZHQsR3IsbmV3IFNldCk7Q3IucHJlU3R5bGVQcm9wcy5mb3JFYWNoKG9pPT5nci5hZGQob2kpKTtjb25z'@;
put 'dCBHbj1BaChKdCxHcixuZXcgU2V0KTtDci5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKG9pPT5Hbi5hZGQob2kpKSxHciE9PWEmJnB0LmFkZChHcil9KSxUaGUoYSx0aGlzLl90cmlnZ2VyTmFtZSxkLGgsdm4sQmUscnQsdG4sWy4uLnB0LnZhbHVlcygpXSxkdCxKdCxNbikpfX1mdW5jdGlvbiBr'@;
put 'aGUoYyxsKXtjb25zdCBhPXsuLi5sfTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2QsaF0pPT57bnVsbCE9aCYmKGFbZF09aCl9KSxhfWNsYXNzIEtHZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5zdHlsZXM9bCx0aGlzLmRlZmF1bHRQYXJhbXM9YSx0aGlzLm5vcm1hbGl6'@;
put 'ZXI9ZH1idWlsZFN0eWxlcyhsLGEpe2NvbnN0IGQ9bmV3IE1hcCxoPWtoZShsLHRoaXMuZGVmYXVsdFBhcmFtcyk7cmV0dXJuIHRoaXMuc3R5bGVzLnN0eWxlcy5mb3JFYWNoKGY9Pnsic3RyaW5nIiE9dHlwZW9mIGYmJmYuZm9yRWFjaCgodixNKT0+e3YmJih2PW5FKHYsaCxhKSk7Y29uc3Qg'@;
put 'RD10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplUHJvcGVydHlOYW1lKE0sYSk7dj10aGlzLm5vcm1hbGl6ZXIubm9ybWFsaXplU3R5bGVWYWx1ZShNLEQsdixhKSxkLnNldChNLHYpfSl9KSxkfX1jbGFzcyBYR2V7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMubmFtZT1sLHRoaXMuYXN0PWEsdGhp'@;
put 'cy5fbm9ybWFsaXplcj1kLHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcz1bXSx0aGlzLnN0YXRlcz1uZXcgTWFwLGEuc3RhdGVzLmZvckVhY2goaD0+e3RoaXMuc3RhdGVzLnNldChoLm5hbWUsbmV3IEtHZShoLnN0eWxlLGgub3B0aW9ucyYmaC5vcHRpb25zLnBhcmFtc3x8e30sZCkpfSksRGhl'@;
put 'KHRoaXMuc3RhdGVzLCJ0cnVlIiwiMSIpLERoZSh0aGlzLnN0YXRlcywiZmFsc2UiLCIwIiksYS50cmFuc2l0aW9ucy5mb3JFYWNoKGg9Pnt0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMucHVzaChuZXcgQWhlKGwsaCx0aGlzLnN0YXRlcykpfSksdGhpcy5mYWxsYmFja1RyYW5zaXRpb249ZnVu'@;
put 'Y3Rpb24gSkdlKGMsbCxhKXtyZXR1cm4gbmV3IEFoZShjLHt0eXBlOkFhLlRyYW5zaXRpb24sYW5pbWF0aW9uOnt0eXBlOkFhLlNlcXVlbmNlLHN0ZXBzOltdLG9wdGlvbnM6bnVsbH0sbWF0Y2hlcnM6Wyh2LE0pPT4hMF0sb3B0aW9uczpudWxsLHF1ZXJ5Q291bnQ6MCxkZXBDb3VudDowfSxs'@;
put 'KX0obCx0aGlzLnN0YXRlcyl9Z2V0IGNvbnRhaW5zUXVlcmllcygpe3JldHVybiB0aGlzLmFzdC5xdWVyeUNvdW50PjB9bWF0Y2hUcmFuc2l0aW9uKGwsYSxkLGgpe3JldHVybiB0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXMuZmluZCh2PT52Lm1hdGNoKGwsYSxkLGgpKXx8bnVsbH1tYXRjaFN0'@;
put 'eWxlcyhsLGEsZCl7cmV0dXJuIHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uLmJ1aWxkU3R5bGVzKGwsYSxkKX19ZnVuY3Rpb24gRGhlKGMsbCxhKXtjLmhhcyhsKT9jLmhhcyhhKXx8Yy5zZXQoYSxjLmdldChsKSk6Yy5oYXMoYSkmJmMuc2V0KGwsYy5nZXQoYSkpfWNvbnN0IFFHZT1uZXcgd087'@;
put 'Y2xhc3MgZSRle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5fZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMuX2FuaW1hdGlvbnM9bmV3IE1hcCx0aGlzLl9wbGF5ZXJzQnlJZD1uZXcgTWFwLHRoaXMucGxheWVycz1bXX1yZWdpc3RlcihsLGEpe2NvbnN0'@;
put 'IGQ9W10sZj1ORyh0aGlzLl9kcml2ZXIsYSxkLFtdKTtpZihkLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBvR2UoYyl7cmV0dXJuIG5ldyBRbigzNTAzLCExKX0oKTt0aGlzLl9hbmltYXRpb25zLnNldChsLGYpfV9idWlsZFBsYXllcihsLGEsZCl7Y29uc3QgaD1sLmVsZW1lbnQsZj1maGUodGhp'@;
put 'cy5fbm9ybWFsaXplcixsLmtleWZyYW1lcyxhLGQpO3JldHVybiB0aGlzLl9kcml2ZXIuYW5pbWF0ZShoLGYsbC5kdXJhdGlvbixsLmRlbGF5LGwuZWFzaW5nLFtdLCEwKX1jcmVhdGUobCxhLGQ9e30pe2NvbnN0IGg9W10sZj10aGlzLl9hbmltYXRpb25zLmdldChsKTtsZXQgdjtjb25zdCBN'@;
put 'PW5ldyBNYXA7aWYoZj8odj1qRyh0aGlzLl9kcml2ZXIsYSxmLFJHLHBPLG5ldyBNYXAsbmV3IE1hcCxkLFFHZSxoKSx2LmZvckVhY2gobmU9Pntjb25zdCBjZT1BaChNLG5lLmVsZW1lbnQsbmV3IE1hcCk7bmUucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChiZT0+Y2Uuc2V0KGJlLG51bGwpKX0p'@;
put 'KTooaC5wdXNoKGZ1bmN0aW9uIGFHZSgpe3JldHVybiBuZXcgUW4oMzMwMCwhMSl9KCkpLHY9W10pLGgubGVuZ3RoKXRocm93IGZ1bmN0aW9uIHNHZShjKXtyZXR1cm4gbmV3IFFuKDM1MDQsITEpfSgpO00uZm9yRWFjaCgobmUsY2UpPT57bmUuZm9yRWFjaCgoYmUsRWUpPT57bmUuc2V0KEVl'@;
put 'LHRoaXMuX2RyaXZlci5jb21wdXRlU3R5bGUoY2UsRWUsaWcpKX0pfSk7Y29uc3QgWj1rbSh2Lm1hcChuZT0+e2NvbnN0IGNlPU0uZ2V0KG5lLmVsZW1lbnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcihuZSxuZXcgTWFwLGNlKX0pKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWQuc2V0KGws'@;
put 'WiksWi5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveShsKSksdGhpcy5wbGF5ZXJzLnB1c2goWiksWn1kZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UGxheWVyKGwpO2EuZGVzdHJveSgpLHRoaXMuX3BsYXllcnNCeUlkLmRlbGV0ZShsKTtjb25zdCBkPXRoaXMucGxheWVycy5pbmRleE9m'@;
put 'KGEpO2Q+PTAmJnRoaXMucGxheWVycy5zcGxpY2UoZCwxKX1fZ2V0UGxheWVyKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyc0J5SWQuZ2V0KGwpO2lmKCFhKXRocm93IGZ1bmN0aW9uIGxHZShjKXtyZXR1cm4gbmV3IFFuKDMzMDEsITEpfSgpO3JldHVybiBhfWxpc3RlbihsLGEsZCxoKXtjb25z'@;
put 'dCBmPVRHKGEsIiIsIiIsIiIpO3JldHVybiB4Ryh0aGlzLl9nZXRQbGF5ZXIobCksZCxmLGgpLCgpPT57fX1jb21tYW5kKGwsYSxkLGgpe2lmKCJyZWdpc3RlciI9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZWdpc3RlcihsLGhbMF0pO2lmKCJjcmVhdGUiPT1kKXJldHVybiB2b2lkIHRoaXMuY3Jl'@;
put 'YXRlKGwsYSxoWzBdfHx7fSk7Y29uc3QgZj10aGlzLl9nZXRQbGF5ZXIobCk7c3dpdGNoKGQpe2Nhc2UicGxheSI6Zi5wbGF5KCk7YnJlYWs7Y2FzZSJwYXVzZSI6Zi5wYXVzZSgpO2JyZWFrO2Nhc2UicmVzZXQiOmYucmVzZXQoKTticmVhaztjYXNlInJlc3RhcnQiOmYucmVzdGFydCgpO2Jy'@;
put 'ZWFrO2Nhc2UiZmluaXNoIjpmLmZpbmlzaCgpO2JyZWFrO2Nhc2UiaW5pdCI6Zi5pbml0KCk7YnJlYWs7Y2FzZSJzZXRQb3NpdGlvbiI6Zi5zZXRQb3NpdGlvbihwYXJzZUZsb2F0KGhbMF0pKTticmVhaztjYXNlImRlc3Ryb3kiOnRoaXMuZGVzdHJveShsKX19fWNvbnN0IEloZT0ibmctYW5p'@;
put 'bWF0ZS1xdWV1ZWQiLFpHPSJuZy1hbmltYXRlLWRpc2FibGVkIixvJGU9W10sUmhlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JSZW1vdmFsOiExLHNldEZvck1vdmU6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExfSxhJGU9e25hbWVzcGFjZUlkOiIiLHNldEZvck1v'@;
put 'dmU6ITEsc2V0Rm9yUmVtb3ZhbDohMSxoYXNBbmltYXRpb246ITEscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITB9LGUzPSJfX25nX3JlbW92ZWQiO2NsYXNzIFdHe2dldCBwYXJhbXMoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhcmFtc31jb25zdHJ1Y3RvcihsLGE9IiIpe3RoaXMubmFtZXNwYWNl'@;
put 'SWQ9YTtjb25zdCBkPWwmJmwuaGFzT3duUHJvcGVydHkoInZhbHVlIik7aWYodGhpcy52YWx1ZT1mdW5jdGlvbiB1JGUoYyl7cmV0dXJuIGM/P251bGx9KGQ/bC52YWx1ZTpsKSxkKXtjb25zdHt2YWx1ZTpmLC4uLnZ9PWw7dGhpcy5vcHRpb25zPXZ9ZWxzZSB0aGlzLm9wdGlvbnM9e307dGhp'@;
put 'cy5vcHRpb25zLnBhcmFtc3x8KHRoaXMub3B0aW9ucy5wYXJhbXM9e30pfWFic29yYk9wdGlvbnMobCl7Y29uc3QgYT1sLnBhcmFtcztpZihhKXtjb25zdCBkPXRoaXMub3B0aW9ucy5wYXJhbXM7T2JqZWN0LmtleXMoYSkuZm9yRWFjaChoPT57bnVsbD09ZFtoXSYmKGRbaF09YVtoXSl9KX19'@;
put 'fWNvbnN0IHJFPSJ2b2lkIixZRz1uZXcgV0cockUpO2NsYXNzIHMkZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5pZD1sLHRoaXMuaG9zdEVsZW1lbnQ9YSx0aGlzLl9lbmdpbmU9ZCx0aGlzLnBsYXllcnM9W10sdGhpcy5fdHJpZ2dlcnM9bmV3IE1hcCx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9l'@;
put 'bGVtZW50TGlzdGVuZXJzPW5ldyBNYXAsdGhpcy5faG9zdENsYXNzTmFtZT0ibmctdG5zLSIrbCxMMihhLHRoaXMuX2hvc3RDbGFzc05hbWUpfWxpc3RlbihsLGEsZCxoKXtpZighdGhpcy5fdHJpZ2dlcnMuaGFzKGEpKXRocm93IGZ1bmN0aW9uIGNHZShjLGwpe3JldHVybiBuZXcgUW4oMzMw'@;
put 'MiwhMSl9KCk7aWYobnVsbD09ZHx8MD09ZC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gdUdlKGMpe3JldHVybiBuZXcgUW4oMzMwMywhMSl9KCk7aWYoIWZ1bmN0aW9uIGQkZShjKXtyZXR1cm4ic3RhcnQiPT1jfHwiZG9uZSI9PWN9KGQpKXRocm93IGZ1bmN0aW9uIGRHZShjLGwpe3JldHVybiBu'@;
put 'ZXcgUW4oMzQwMCwhMSl9KCk7Y29uc3QgZj1BaCh0aGlzLl9lbGVtZW50TGlzdGVuZXJzLGwsW10pLHY9e25hbWU6YSxwaGFzZTpkLGNhbGxiYWNrOmh9O2YucHVzaCh2KTtjb25zdCBNPUFoKHRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQsbCxuZXcgTWFwKTtyZXR1cm4gTS5oYXMoYSl8'@;
put 'fChMMihsLGdPKSxMMihsLGdPKyItIithKSxNLnNldChhLFlHKSksKCk9Pnt0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgoKT0+e2NvbnN0IEQ9Zi5pbmRleE9mKHYpO0Q+PTAmJmYuc3BsaWNlKEQsMSksdGhpcy5fdHJpZ2dlcnMuaGFzKGEpfHxNLmRlbGV0ZShhKX0pfX1yZWdpc3RlcihsLGEp'@;
put 'e3JldHVybiF0aGlzLl90cmlnZ2Vycy5oYXMobCkmJih0aGlzLl90cmlnZ2Vycy5zZXQobCxhKSwhMCl9X2dldFRyaWdnZXIobCl7Y29uc3QgYT10aGlzLl90cmlnZ2Vycy5nZXQobCk7aWYoIWEpdGhyb3cgZnVuY3Rpb24gaEdlKGMpe3JldHVybiBuZXcgUW4oMzQwMSwhMSl9KCk7cmV0dXJu'@;
put 'IGF9dHJpZ2dlcihsLGEsZCxoPSEwKXtjb25zdCBmPXRoaXMuX2dldFRyaWdnZXIoYSksdj1uZXcgR0codGhpcy5pZCxhLGwpO2xldCBNPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpO018fChMMihsLGdPKSxMMihsLGdPKyItIithKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlF'@;
put 'bGVtZW50LnNldChsLE09bmV3IE1hcCkpO2xldCBEPU0uZ2V0KGEpO2NvbnN0IFo9bmV3IFdHKGQsdGhpcy5pZCk7aWYoIShkJiZkLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpKSYmRCYmWi5hYnNvcmJPcHRpb25zKEQub3B0aW9ucyksTS5zZXQoYSxaKSxEfHwoRD1ZRyksWi52YWx1ZSE9PXJF'@;
put 'JiZELnZhbHVlPT09Wi52YWx1ZSl7aWYoIWZ1bmN0aW9uIHAkZShjLGwpe2NvbnN0IGE9T2JqZWN0LmtleXMoYyksZD1PYmplY3Qua2V5cyhsKTtpZihhLmxlbmd0aCE9ZC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZighbC5oYXNP'@;
put 'd25Qcm9wZXJ0eShmKXx8Y1tmXSE9PWxbZl0pcmV0dXJuITF9cmV0dXJuITB9KEQucGFyYW1zLFoucGFyYW1zKSl7Y29uc3QgcWU9W10scnQ9Zi5tYXRjaFN0eWxlcyhELnZhbHVlLEQucGFyYW1zLHFlKSxwdD1mLm1hdGNoU3R5bGVzKFoudmFsdWUsWi5wYXJhbXMscWUpO3FlLmxlbmd0aD90'@;
put 'aGlzLl9lbmdpbmUucmVwb3J0RXJyb3IocWUpOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57TDcobCxydCksTXAobCxwdCl9KX1yZXR1cm59Y29uc3QgYmU9QWgodGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsbCxbXSk7YmUuZm9yRWFjaChxZT0+e3FlLm5hbWVzcGFjZUlkPT10'@;
put 'aGlzLmlkJiZxZS50cmlnZ2VyTmFtZT09YSYmcWUucXVldWVkJiZxZS5kZXN0cm95KCl9KTtsZXQgRWU9Zi5tYXRjaFRyYW5zaXRpb24oRC52YWx1ZSxaLnZhbHVlLGwsWi5wYXJhbXMpLEJlPSExO2lmKCFFZSl7aWYoIWgpcmV0dXJuO0VlPWYuZmFsbGJhY2tUcmFuc2l0aW9uLEJlPSEwfXJl'@;
put 'dHVybiB0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxlbWVudDpsLHRyaWdnZXJOYW1lOmEsdHJhbnNpdGlvbjpFZSxmcm9tU3RhdGU6RCx0b1N0YXRlOloscGxheWVyOnYsaXNGYWxsYmFja1RyYW5zaXRpb246QmV9KSxCZXx8KEwyKGwsSWhl'@;
put 'KSx2Lm9uU3RhcnQoKCk9PntpXyhsLEloZSl9KSksdi5vbkRvbmUoKCk9PntsZXQgcWU9dGhpcy5wbGF5ZXJzLmluZGV4T2Yodik7cWU+PTAmJnRoaXMucGxheWVycy5zcGxpY2UocWUsMSk7Y29uc3QgcnQ9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKHJ0KXtsZXQg'@;
put 'cHQ9cnQuaW5kZXhPZih2KTtwdD49MCYmcnQuc3BsaWNlKHB0LDEpfX0pLHRoaXMucGxheWVycy5wdXNoKHYpLGJlLnB1c2godiksdn1kZXJlZ2lzdGVyKGwpe3RoaXMuX3RyaWdnZXJzLmRlbGV0ZShsKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goYT0+YS5kZWxldGUo'@;
put 'bCkpLHRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KGQsYS5maWx0ZXIoaD0+aC5uYW1lIT1sKSl9KX1jbGVhckVsZW1lbnRDYWNoZShsKXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZShsKSx0aGlzLl9l'@;
put 'bGVtZW50TGlzdGVuZXJzLmRlbGV0ZShsKTtjb25zdCBhPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiYoYS5mb3JFYWNoKGQ9PmQuZGVzdHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUobCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJU'@;
put 'cmlnZ2VycyhsLGEpe2NvbnN0IGQ9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeShsLG1PLCEwKTtkLmZvckVhY2goaD0+e2lmKGhbZTNdKXJldHVybjtjb25zdCBmPXRoaXMuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQoaCk7Zi5zaXplP2YuZm9yRWFjaCh2PT52LnRyaWdnZXJM'@;
put 'ZWF2ZUFuaW1hdGlvbihoLGEsITEsITApKTp0aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpfSksdGhpcy5fZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+ZC5mb3JFYWNoKGg9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoaCkpKX10cmlnZ2VyTGVhdmVBbmltYXRpb24obCxhLGQs'@;
put 'aCl7Y29uc3QgZj10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKSx2PW5ldyBNYXA7aWYoZil7Y29uc3QgTT1bXTtpZihmLmZvckVhY2goKEQsWik9PntpZih2LnNldChaLEQudmFsdWUpLHRoaXMuX3RyaWdnZXJzLmhhcyhaKSl7Y29uc3QgbmU9dGhpcy50cmlnZ2VyKGwsWixy'@;
put 'RSxoKTtuZSYmTS5wdXNoKG5lKX19KSxNLmxlbmd0aClyZXR1cm4gdGhpcy5fZW5naW5lLm1hcmtFbGVtZW50QXNSZW1vdmVkKHRoaXMuaWQsbCwhMCxhLHYpLGQmJmttKE0pLm9uRG9uZSgoKT0+dGhpcy5fZW5naW5lLnByb2Nlc3NMZWF2ZU5vZGUobCkpLCEwfXJldHVybiExfXByZXBhcmVM'@;
put 'ZWF2ZUFuaW1hdGlvbkxpc3RlbmVycyhsKXtjb25zdCBhPXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGwpLGQ9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7aWYoYSYmZCl7Y29uc3QgaD1uZXcgU2V0O2EuZm9yRWFjaChmPT57Y29uc3Qgdj1mLm5hbWU7aWYoaC5oYXMo'@;
put 'dikpcmV0dXJuO2guYWRkKHYpO2NvbnN0IEQ9dGhpcy5fdHJpZ2dlcnMuZ2V0KHYpLmZhbGxiYWNrVHJhbnNpdGlvbixaPWQuZ2V0KHYpfHxZRyxuZT1uZXcgV0cockUpLGNlPW5ldyBHRyh0aGlzLmlkLHYsbCk7dGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVl'@;
put 'LnB1c2goe2VsZW1lbnQ6bCx0cmlnZ2VyTmFtZTp2LHRyYW5zaXRpb246RCxmcm9tU3RhdGU6Wix0b1N0YXRlOm5lLHBsYXllcjpjZSxpc0ZhbGxiYWNrVHJhbnNpdGlvbjohMH0pfSl9fXJlbW92ZU5vZGUobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZTtpZihsLmNoaWxkRWxlbWVudENvdW50'@;
put 'JiZ0aGlzLl9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSwhMCkpcmV0dXJuO2xldCBoPSExO2lmKGQudG90YWxBbmltYXRpb25zKXtjb25zdCBmPWQucGxheWVycy5sZW5ndGg/ZC5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVu'@;
put 'dC5nZXQobCk6W107aWYoZiYmZi5sZW5ndGgpaD0hMDtlbHNle2xldCB2PWw7Zm9yKDt2PXYucGFyZW50Tm9kZTspaWYoZC5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHYpKXtoPSEwO2JyZWFrfX19aWYodGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCksaClkLm1hcmtFbGVtZW50'@;
put 'QXNSZW1vdmVkKHRoaXMuaWQsbCwhMSxhKTtlbHNle2NvbnN0IGY9bFtlM107KCFmfHxmPT09UmhlKSYmKGQuYWZ0ZXJGbHVzaCgoKT0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShsKSksZC5kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpLGQuX29uUmVtb3ZhbENvbXBsZXRlKGwsYSkpfX1pbnNl'@;
put 'cnROb2RlKGwsYSl7TDIobCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGwpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMuX3F1ZXVlLmZvckVhY2goZD0+e2NvbnN0IGg9ZC5wbGF5ZXI7aWYoaC5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGY9ZC5lbGVtZW50LHY9'@;
put 'dGhpcy5fZWxlbWVudExpc3RlbmVycy5nZXQoZik7diYmdi5mb3JFYWNoKE09PntpZihNLm5hbWU9PWQudHJpZ2dlck5hbWUpe2NvbnN0IEQ9VEcoZixkLnRyaWdnZXJOYW1lLGQuZnJvbVN0YXRlLnZhbHVlLGQudG9TdGF0ZS52YWx1ZSk7RC5fZGF0YT1sLHhHKGQucGxheWVyLE0ucGhhc2Us'@;
put 'RCxNLmNhbGxiYWNrKX19KSxoLm1hcmtlZEZvckRlc3Ryb3k/dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntoLmRlc3Ryb3koKX0pOmEucHVzaChkKX0pLHRoaXMuX3F1ZXVlPVtdLGEuc29ydCgoZCxoKT0+e2NvbnN0IGY9ZC50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCx2PWgudHJhbnNp'@;
put 'dGlvbi5hc3QuZGVwQ291bnQ7cmV0dXJuIDA9PWZ8fDA9PXY/Zi12OnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQuZWxlbWVudCxoLmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KGwpe3RoaXMucGxheWVycy5mb3JFYWNoKGE9PmEuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxS'@;
put 'ZW1vdmFsRm9ySW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LGwpfX1jbGFzcyBsJGV7X29uUmVtb3ZhbENvbXBsZXRlKGwsYSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZShsLGEpfWNvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuYm9keU5vZGU9bCx0aGlzLmRyaXZlcj1hLHRoaXMuX25v'@;
put 'cm1hbGl6ZXI9ZCx0aGlzLnNjaGVkdWxlcj1oLHRoaXMucGxheWVycz1bXSx0aGlzLm5ld0hvc3RFbGVtZW50cz1uZXcgTWFwLHRoaXMucGxheWVyc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcCx0aGlzLnN0YXRlc0J5RWxlbWVudD1uZXcg'@;
put 'TWFwLHRoaXMuZGlzYWJsZWROb2Rlcz1uZXcgU2V0LHRoaXMudG90YWxBbmltYXRpb25zPTAsdGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLl9uYW1lc3BhY2VMb29rdXA9e30sdGhpcy5fbmFtZXNwYWNlTGlzdD1bXSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnM9'@;
put 'W10sdGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXSx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHM9W10sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0oZix2KT0+e319Z2V0IHF1ZXVlZFBsYXllcnMoKXtjb25zdCBsPVtd'@;
put 'O3JldHVybiB0aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goYT0+e2EucGxheWVycy5mb3JFYWNoKGQ9PntkLnF1ZXVlZCYmbC5wdXNoKGQpfSl9KSxsfWNyZWF0ZU5hbWVzcGFjZShsLGEpe2NvbnN0IGQ9bmV3IHMkZShsLGEsdGhpcyk7cmV0dXJuIHRoaXMuYm9keU5vZGUmJnRoaXMuZHJp'@;
put 'dmVyLmNvbnRhaW5zRWxlbWVudCh0aGlzLmJvZHlOb2RlLGEpP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGQsYSk6KHRoaXMubmV3SG9zdEVsZW1lbnRzLnNldChhLGQpLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdPWR9X2JhbGFuY2VO'@;
put 'YW1lc3BhY2VMaXN0KGwsYSl7Y29uc3QgZD10aGlzLl9uYW1lc3BhY2VMaXN0LGg9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtpZihkLmxlbmd0aC0xPj0wKXtsZXQgdj0hMSxNPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoYSk7Zm9yKDtNOyl7Y29uc3QgRD1oLmdldChNKTtp'@;
put 'ZihEKXtjb25zdCBaPWQuaW5kZXhPZihEKTtkLnNwbGljZShaKzEsMCxsKSx2PSEwO2JyZWFrfU09dGhpcy5kcml2ZXIuZ2V0UGFyZW50RWxlbWVudChNKX12fHxkLnVuc2hpZnQobCl9ZWxzZSBkLnB1c2gobCk7cmV0dXJuIGguc2V0KGEsbCksbH1yZWdpc3RlcihsLGEpe2xldCBkPXRoaXMu'@;
put 'X25hbWVzcGFjZUxvb2t1cFtsXTtyZXR1cm4gZHx8KGQ9dGhpcy5jcmVhdGVOYW1lc3BhY2UobCxhKSksZH1yZWdpc3RlclRyaWdnZXIobCxhLGQpe2xldCBoPXRoaXMuX25hbWVzcGFjZUxvb2t1cFtsXTtoJiZoLnJlZ2lzdGVyKGEsZCkmJnRoaXMudG90YWxBbmltYXRpb25zKyt9ZGVzdHJv'@;
put 'eShsLGEpe2wmJih0aGlzLmFmdGVyRmx1c2goKCk9Pnt9KSx0aGlzLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+e2NvbnN0IGQ9dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk7dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5kZWxldGUoZC5ob3N0RWxlbWVudCk7Y29uc3QgaD10aGlz'@;
put 'Ll9uYW1lc3BhY2VMaXN0LmluZGV4T2YoZCk7aD49MCYmdGhpcy5fbmFtZXNwYWNlTGlzdC5zcGxpY2UoaCwxKSxkLmRlc3Ryb3koYSksZGVsZXRlIHRoaXMuX25hbWVzcGFjZUxvb2t1cFtsXX0pKX1fZmV0Y2hOYW1lc3BhY2UobCl7cmV0dXJuIHRoaXMuX25hbWVzcGFjZUxvb2t1cFtsXX1m'@;
put 'ZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQobCl7Y29uc3QgYT1uZXcgU2V0LGQ9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpO2lmKGQpZm9yKGxldCBoIG9mIGQudmFsdWVzKCkpaWYoaC5uYW1lc3BhY2VJZCl7Y29uc3QgZj10aGlzLl9mZXRjaE5hbWVzcGFjZShoLm5hbWVzcGFjZUlkKTtm'@;
put 'JiZhLmFkZChmKX1yZXR1cm4gYX10cmlnZ2VyKGwsYSxkLGgpe2lmKE1PKGEpKXtjb25zdCBmPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO2lmKGYpcmV0dXJuIGYudHJpZ2dlcihhLGQsaCksITB9cmV0dXJuITF9aW5zZXJ0Tm9kZShsLGEsZCxoKXtpZighTU8oYSkpcmV0dXJuO2NvbnN0IGY9'@;
put 'YVtlM107aWYoZiYmZi5zZXRGb3JSZW1vdmFsKXtmLnNldEZvclJlbW92YWw9ITEsZi5zZXRGb3JNb3ZlPSEwO2NvbnN0IHY9dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmluZGV4T2YoYSk7dj49MCYmdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnNwbGljZSh2LDEpfWlmKGwpe2Nv'@;
put 'bnN0IHY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk7diYmdi5pbnNlcnROb2RlKGEsZCl9aCYmdGhpcy5jb2xsZWN0RW50ZXJFbGVtZW50KGEpfWNvbGxlY3RFbnRlckVsZW1lbnQobCl7dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLnB1c2gobCl9bWFya0VsZW1lbnRBc0Rpc2FibGVkKGws'@;
put 'YSl7YT90aGlzLmRpc2FibGVkTm9kZXMuaGFzKGwpfHwodGhpcy5kaXNhYmxlZE5vZGVzLmFkZChsKSxMMihsLFpHKSk6dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhsKSYmKHRoaXMuZGlzYWJsZWROb2Rlcy5kZWxldGUobCksaV8obCxaRykpfXJlbW92ZU5vZGUobCxhLGQpe2lmKE1PKGEpKXt0'@;
put 'aGlzLnNjaGVkdWxlcj8ubm90aWZ5KCk7Y29uc3QgaD1sP3RoaXMuX2ZldGNoTmFtZXNwYWNlKGwpOm51bGw7aD9oLnJlbW92ZU5vZGUoYSxkKTp0aGlzLm1hcmtFbGVtZW50QXNSZW1vdmVkKGwsYSwhMSxkKTtjb25zdCBmPXRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZ2V0KGEpO2Ym'@;
put 'JmYuaWQhPT1sJiZmLnJlbW92ZU5vZGUoYSxkKX1lbHNlIHRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGEsZCl9bWFya0VsZW1lbnRBc1JlbW92ZWQobCxhLGQsaCxmKXt0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMucHVzaChhKSxhW2UzXT17bmFtZXNwYWNlSWQ6bCxzZXRGb3JSZW1vdmFs'@;
put 'OmgsaGFzQW5pbWF0aW9uOmQscmVtb3ZlZEJlZm9yZVF1ZXJpZWQ6ITEscHJldmlvdXNUcmlnZ2Vyc1ZhbHVlczpmfX1saXN0ZW4obCxhLGQsaCxmKXtyZXR1cm4gTU8oYSk/dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCkubGlzdGVuKGEsZCxoLGYpOigpPT57fX1fYnVpbGRJbnN0cnVjdGlvbihs'@;
put 'LGEsZCxoLGYpe3JldHVybiBsLnRyYW5zaXRpb24uYnVpbGQodGhpcy5kcml2ZXIsbC5lbGVtZW50LGwuZnJvbVN0YXRlLnZhbHVlLGwudG9TdGF0ZS52YWx1ZSxkLGgsbC5mcm9tU3RhdGUub3B0aW9ucyxsLnRvU3RhdGUub3B0aW9ucyxhLGYpfWRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCl7'@;
put 'bGV0IGE9dGhpcy5kcml2ZXIucXVlcnkobCxtTywhMCk7YS5mb3JFYWNoKGQ9PnRoaXMuZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGQpKSwwIT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LnNpemUmJihhPXRoaXMuZHJpdmVyLnF1ZXJ5KGwsTEcsITApLGEuZm9yRWFj'@;
put 'aChkPT50aGlzLmZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25PbkVsZW1lbnQoZCkpKX1kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQobCl7Y29uc3QgYT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2EmJmEuZm9yRWFjaChkPT57ZC5xdWV1ZWQ/ZC5tYXJrZWRGb3JE'@;
put 'ZXN0cm95PSEwOmQuZGVzdHJveSgpfSl9ZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudChsKXtjb25zdCBhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpO2EmJmEuZm9yRWFjaChkPT5kLmZpbmlzaCgpKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiBu'@;
put 'ZXcgUHJvbWlzZShsPT57aWYodGhpcy5wbGF5ZXJzLmxlbmd0aClyZXR1cm4ga20odGhpcy5wbGF5ZXJzKS5vbkRvbmUoKCk9PmwoKSk7bCgpfSl9cHJvY2Vzc0xlYXZlTm9kZShsKXtjb25zdCBhPWxbZTNdO2lmKGEmJmEuc2V0Rm9yUmVtb3ZhbCl7aWYobFtlM109UmhlLGEubmFtZXNwYWNl'@;
put 'SWQpe3RoaXMuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKTtjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGEubmFtZXNwYWNlSWQpO2QmJmQuY2xlYXJFbGVtZW50Q2FjaGUobCl9dGhpcy5fb25SZW1vdmFsQ29tcGxldGUobCxhLnNldEZvclJlbW92YWwpfWwuY2xhc3NMaXN0Py5jb250'@;
put 'YWlucyhaRykmJnRoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsITEpLHRoaXMuZHJpdmVyLnF1ZXJ5KGwsIi5uZy1hbmltYXRlLWRpc2FibGVkIiwhMCkuZm9yRWFjaChkPT57dGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQoZCwhMSl9KX1mbHVzaChsPS0xKXtsZXQgYT1bXTtpZih0aGlz'@;
put 'Lm5ld0hvc3RFbGVtZW50cy5zaXplJiYodGhpcy5uZXdIb3N0RWxlbWVudHMuZm9yRWFjaCgoZCxoKT0+dGhpcy5fYmFsYW5jZU5hbWVzcGFjZUxpc3QoZCxoKSksdGhpcy5uZXdIb3N0RWxlbWVudHMuY2xlYXIoKSksdGhpcy50b3RhbEFuaW1hdGlvbnMmJnRoaXMuY29sbGVjdGVkRW50ZXJF'@;
put 'bGVtZW50cy5sZW5ndGgpZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoO2QrKylMMih0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHNbZF0sIm5nLXN0YXItaW5zZXJ0ZWQiKTtpZih0aGlzLl9uYW1lc3BhY2VMaXN0Lmxlbmd0aCYmKHRoaXMudG90YWxR'@;
put 'dWV1ZWRQbGF5ZXJzfHx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoKSl7Y29uc3QgZD1bXTt0cnl7YT10aGlzLl9mbHVzaEFuaW1hdGlvbnMoZCxsKX1maW5hbGx5e2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKWRbaF0oKX19ZWxzZSBmb3IobGV0IGQ9MDtkPHRoaXMuY29s'@;
put 'bGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGg7ZCsrKXRoaXMucHJvY2Vzc0xlYXZlTm9kZSh0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbZF0pO2lmKHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuY29sbGVjdGVk'@;
put 'TGVhdmVFbGVtZW50cy5sZW5ndGg9MCx0aGlzLl9mbHVzaEZucy5mb3JFYWNoKGQ9PmQoKSksdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zLmxlbmd0aCl7Y29uc3QgZD10aGlzLl93aGVuUXVpZXRGbnM7dGhpcy5fd2hlblF1aWV0Rm5zPVtdLGEubGVuZ3RoP2ttKGEpLm9u'@;
put 'RG9uZSgoKT0+e2QuZm9yRWFjaChoPT5oKCkpfSk6ZC5mb3JFYWNoKGg9PmgoKSl9fXJlcG9ydEVycm9yKGwpe3Rocm93IGZ1bmN0aW9uIGZHZShjKXtyZXR1cm4gbmV3IFFuKDM0MDIsITEpfSgpfV9mbHVzaEFuaW1hdGlvbnMobCxhKXtjb25zdCBkPW5ldyB3TyxoPVtdLGY9bmV3IE1hcCx2'@;
put 'PVtdLE09bmV3IE1hcCxEPW5ldyBNYXAsWj1uZXcgTWFwLG5lPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goSm49PntuZS5hZGQoSm4pO2NvbnN0IERyPXRoaXMuZHJpdmVyLnF1ZXJ5KEpuLCIubmctYW5pbWF0ZS1xdWV1ZWQiLCEwKTtmb3IobGV0ICRyPTA7JHI8RHIubGVu'@;
put 'Z3RoOyRyKyspbmUuYWRkKERyWyRyXSl9KTtjb25zdCBjZT10aGlzLmJvZHlOb2RlLGJlPUFycmF5LmZyb20odGhpcy5zdGF0ZXNCeUVsZW1lbnQua2V5cygpKSxFZT1QaGUoYmUsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzKSxCZT1uZXcgTWFwO2xldCBxZT0wO0VlLmZvckVhY2goKEpu'@;
put 'LERyKT0+e2NvbnN0ICRyPVJHK3FlKys7QmUuc2V0KERyLCRyKSxKbi5mb3JFYWNoKHdpPT5MMih3aSwkcikpfSk7Y29uc3QgcnQ9W10scHQ9bmV3IFNldCxkdD1uZXcgU2V0O2ZvcihsZXQgSm49MDtKbjx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO0puKyspe2NvbnN0IERy'@;
put 'PXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tKbl0sJHI9RHJbZTNdOyRyJiYkci5zZXRGb3JSZW1vdmFsJiYocnQucHVzaChEcikscHQuYWRkKERyKSwkci5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoRHIsIi5uZy1zdGFyLWluc2VydGVkIiwhMCkuZm9yRWFjaCh3aT0+cHQu'@;
put 'YWRkKHdpKSk6ZHQuYWRkKERyKSl9Y29uc3QgSnQ9bmV3IE1hcCx2bj1QaGUoYmUsQXJyYXkuZnJvbShwdCkpO3ZuLmZvckVhY2goKEpuLERyKT0+e2NvbnN0ICRyPXBPK3FlKys7SnQuc2V0KERyLCRyKSxKbi5mb3JFYWNoKHdpPT5MMih3aSwkcikpfSksbC5wdXNoKCgpPT57RWUuZm9yRWFj'@;
put 'aCgoSm4sRHIpPT57Y29uc3QgJHI9QmUuZ2V0KERyKTtKbi5mb3JFYWNoKHdpPT5pXyh3aSwkcikpfSksdm4uZm9yRWFjaCgoSm4sRHIpPT57Y29uc3QgJHI9SnQuZ2V0KERyKTtKbi5mb3JFYWNoKHdpPT5pXyh3aSwkcikpfSkscnQuZm9yRWFjaChKbj0+e3RoaXMucHJvY2Vzc0xlYXZlTm9k'@;
put 'ZShKbil9KX0pO2NvbnN0IENuPVtdLHRuPVtdO2ZvcihsZXQgSm49dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtKbj49MDtKbi0tKXRoaXMuX25hbWVzcGFjZUxpc3RbSm5dLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoYSkuZm9yRWFjaCgkcj0+e2NvbnN0IHdpPSRyLnBsYXllcix0bz0k'@;
put 'ci5lbGVtZW50O2lmKENuLnB1c2god2kpLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe2NvbnN0IG9yPXRvW2UzXTtpZihvciYmb3Iuc2V0Rm9yTW92ZSl7aWYob3IucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcyYmb3IucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5oYXMoJHIudHJp'@;
put 'Z2dlck5hbWUpKXtjb25zdCBIcj1vci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmdldCgkci50cmlnZ2VyTmFtZSksS3I9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KCRyLmVsZW1lbnQpO2lmKEtyJiZLci5oYXMoJHIudHJpZ2dlck5hbWUpKXtjb25zdCBhbj1Lci5nZXQoJHIudHJpZ2dlck5h'@;
put 'bWUpO2FuLnZhbHVlPUhyLEtyLnNldCgkci50cmlnZ2VyTmFtZSxhbil9fXJldHVybiB2b2lkIHdpLmRlc3Ryb3koKX19Y29uc3QgcG89IWNlfHwhdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KGNlLHRvKSx2dD1KdC5nZXQodG8pLE50PUJlLmdldCh0byksSHQ9dGhpcy5fYnVpbGRJbnN0'@;
put 'cnVjdGlvbigkcixkLE50LHZ0LHBvKTtpZihIdC5lcnJvcnMmJkh0LmVycm9ycy5sZW5ndGgpcmV0dXJuIHZvaWQgdG4ucHVzaChIdCk7aWYocG8pcmV0dXJuIHdpLm9uU3RhcnQoKCk9Pkw3KHRvLEh0LmZyb21TdHlsZXMpKSx3aS5vbkRlc3Ryb3koKCk9Pk1wKHRvLEh0LnRvU3R5bGVzKSks'@;
put 'dm9pZCBoLnB1c2god2kpO2lmKCRyLmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiB3aS5vblN0YXJ0KCgpPT5MNyh0byxIdC5mcm9tU3R5bGVzKSksd2kub25EZXN0cm95KCgpPT5NcCh0byxIdC50b1N0eWxlcykpLHZvaWQgaC5wdXNoKHdpKTtjb25zdCBIbj1bXTtIdC50aW1lbGluZXMu'@;
put 'Zm9yRWFjaChvcj0+e29yLnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lPSEwLHRoaXMuZGlzYWJsZWROb2Rlcy5oYXMob3IuZWxlbWVudCl8fEhuLnB1c2gob3IpfSksSHQudGltZWxpbmVzPUhuLGQuYXBwZW5kKHRvLEh0LnRpbWVsaW5lcyksdi5wdXNoKHtpbnN0cnVjdGlvbjpIdCxwbGF5ZXI6'@;
put 'd2ksZWxlbWVudDp0b30pLEh0LnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKG9yPT5BaChNLG9yLFtdKS5wdXNoKHdpKSksSHQucHJlU3R5bGVQcm9wcy5mb3JFYWNoKChvcixIcik9PntpZihvci5zaXplKXtsZXQgS3I9RC5nZXQoSHIpO0tyfHxELnNldChIcixLcj1uZXcgU2V0KSxvci5mb3JF'@;
put 'YWNoKChhbix5bik9PktyLmFkZCh5bikpfX0pLEh0LnBvc3RTdHlsZVByb3BzLmZvckVhY2goKG9yLEhyKT0+e2xldCBLcj1aLmdldChIcik7S3J8fFouc2V0KEhyLEtyPW5ldyBTZXQpLG9yLmZvckVhY2goKGFuLHluKT0+S3IuYWRkKHluKSl9KX0pO2lmKHRuLmxlbmd0aCl7Y29uc3QgSm49'@;
put 'W107dG4uZm9yRWFjaChEcj0+e0puLnB1c2goZnVuY3Rpb24gcEdlKGMsbCl7cmV0dXJuIG5ldyBRbigzNTA1LCExKX0oKSl9KSxDbi5mb3JFYWNoKERyPT5Eci5kZXN0cm95KCkpLHRoaXMucmVwb3J0RXJyb3IoSm4pfWNvbnN0IE1uPW5ldyBNYXAsQ3I9bmV3IE1hcDt2LmZvckVhY2goSm49'@;
put 'Pntjb25zdCBEcj1Kbi5lbGVtZW50O2QuaGFzKERyKSYmKENyLnNldChEcixEciksdGhpcy5fYmVmb3JlQW5pbWF0aW9uQnVpbGQoSm4ucGxheWVyLm5hbWVzcGFjZUlkLEpuLmluc3RydWN0aW9uLE1uKSl9KSxoLmZvckVhY2goSm49Pntjb25zdCBEcj1Kbi5lbGVtZW50O3RoaXMuX2dldFBy'@;
put 'ZXZpb3VzUGxheWVycyhEciwhMSxKbi5uYW1lc3BhY2VJZCxKbi50cmlnZ2VyTmFtZSxudWxsKS5mb3JFYWNoKHdpPT57QWgoTW4sRHIsW10pLnB1c2god2kpLHdpLmRlc3Ryb3koKX0pfSk7Y29uc3QgR3I9cnQuZmlsdGVyKEpuPT5IaGUoSm4sRCxaKSksZ3I9bmV3IE1hcDtPaGUoZ3IsdGhp'@;
put 'cy5kcml2ZXIsZHQsWixpZykuZm9yRWFjaChKbj0+e0hoZShKbixELFopJiZHci5wdXNoKEpuKX0pO2NvbnN0IG9pPW5ldyBNYXA7RWUuZm9yRWFjaCgoSm4sRHIpPT57T2hlKG9pLHRoaXMuZHJpdmVyLG5ldyBTZXQoSm4pLEQsIiEiKX0pLEdyLmZvckVhY2goSm49Pntjb25zdCBEcj1nci5n'@;
put 'ZXQoSm4pLCRyPW9pLmdldChKbik7Z3Iuc2V0KEpuLG5ldyBNYXAoWy4uLkRyPy5lbnRyaWVzKCk/P1tdLC4uLiRyPy5lbnRyaWVzKCk/P1tdXSkpfSk7Y29uc3QgX2k9W10sT249W10senI9e307di5mb3JFYWNoKEpuPT57Y29uc3R7ZWxlbWVudDpEcixwbGF5ZXI6JHIsaW5zdHJ1Y3Rpb246'@;
put 'd2l9PUpuO2lmKGQuaGFzKERyKSl7aWYobmUuaGFzKERyKSlyZXR1cm4gJHIub25EZXN0cm95KCgpPT5NcChEcix3aS50b1N0eWxlcykpLCRyLmRpc2FibGVkPSEwLCRyLm92ZXJyaWRlVG90YWxUaW1lKHdpLnRvdGFsVGltZSksdm9pZCBoLnB1c2goJHIpO2xldCB0bz16cjtpZihDci5zaXpl'@;
put 'PjEpe2xldCB2dD1Ecjtjb25zdCBOdD1bXTtmb3IoO3Z0PXZ0LnBhcmVudE5vZGU7KXtjb25zdCBIdD1Dci5nZXQodnQpO2lmKEh0KXt0bz1IdDticmVha31OdC5wdXNoKHZ0KX1OdC5mb3JFYWNoKEh0PT5Dci5zZXQoSHQsdG8pKX1jb25zdCBwbz10aGlzLl9idWlsZEFuaW1hdGlvbigkci5u'@;
put 'YW1lc3BhY2VJZCx3aSxNbixmLG9pLGdyKTtpZigkci5zZXRSZWFsUGxheWVyKHBvKSx0bz09PXpyKV9pLnB1c2goJHIpO2Vsc2V7Y29uc3QgdnQ9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldCh0byk7dnQmJnZ0Lmxlbmd0aCYmKCRyLnBhcmVudFBsYXllcj1rbSh2dCkpLGgucHVzaCgkcil9'@;
put 'fWVsc2UgTDcoRHIsd2kuZnJvbVN0eWxlcyksJHIub25EZXN0cm95KCgpPT5NcChEcix3aS50b1N0eWxlcykpLE9uLnB1c2goJHIpLG5lLmhhcyhEcikmJmgucHVzaCgkcil9KSxPbi5mb3JFYWNoKEpuPT57Y29uc3QgRHI9Zi5nZXQoSm4uZWxlbWVudCk7aWYoRHImJkRyLmxlbmd0aCl7Y29u'@;
put 'c3QgJHI9a20oRHIpO0puLnNldFJlYWxQbGF5ZXIoJHIpfX0pLGguZm9yRWFjaChKbj0+e0puLnBhcmVudFBsYXllcj9Kbi5zeW5jUGxheWVyRXZlbnRzKEpuLnBhcmVudFBsYXllcik6Sm4uZGVzdHJveSgpfSk7Zm9yKGxldCBKbj0wO0puPHJ0Lmxlbmd0aDtKbisrKXtjb25zdCBEcj1ydFtK'@;
put 'bl0sJHI9RHJbZTNdO2lmKGlfKERyLHBPKSwkciYmJHIuaGFzQW5pbWF0aW9uKWNvbnRpbnVlO2xldCB3aT1bXTtpZihNLnNpemUpe2xldCBwbz1NLmdldChEcik7cG8mJnBvLmxlbmd0aCYmd2kucHVzaCguLi5wbyk7bGV0IHZ0PXRoaXMuZHJpdmVyLnF1ZXJ5KERyLExHLCEwKTtmb3IobGV0'@;
put 'IE50PTA7TnQ8dnQubGVuZ3RoO050Kyspe2xldCBIdD1NLmdldCh2dFtOdF0pO0h0JiZIdC5sZW5ndGgmJndpLnB1c2goLi4uSHQpfX1jb25zdCB0bz13aS5maWx0ZXIocG89PiFwby5kZXN0cm95ZWQpO3RvLmxlbmd0aD9oJGUodGhpcyxEcix0byk6dGhpcy5wcm9jZXNzTGVhdmVOb2RlKERy'@;
put 'KX1yZXR1cm4gcnQubGVuZ3RoPTAsX2kuZm9yRWFjaChKbj0+e3RoaXMucGxheWVycy5wdXNoKEpuKSxKbi5vbkRvbmUoKCk9PntKbi5kZXN0cm95KCk7Y29uc3QgRHI9dGhpcy5wbGF5ZXJzLmluZGV4T2YoSm4pO3RoaXMucGxheWVycy5zcGxpY2UoRHIsMSl9KSxKbi5wbGF5KCl9KSxfaX1h'@;
put 'ZnRlckZsdXNoKGwpe3RoaXMuX2ZsdXNoRm5zLnB1c2gobCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3doZW5RdWlldEZucy5wdXNoKGwpfV9nZXRQcmV2aW91c1BsYXllcnMobCxhLGQsaCxmKXtsZXQgdj1bXTtpZihhKXtjb25zdCBNPXRoaXMucGxheWVyc0J5UXVlcmll'@;
put 'ZEVsZW1lbnQuZ2V0KGwpO00mJih2PU0pfWVsc2V7Y29uc3QgTT10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKE0pe2NvbnN0IEQ9IWZ8fGY9PXJFO00uZm9yRWFjaChaPT57Wi5xdWV1ZWR8fCFEJiZaLnRyaWdnZXJOYW1lIT1ofHx2LnB1c2goWil9KX19cmV0dXJuKGR8fGgpJiYo'@;
put 'dj12LmZpbHRlcihNPT4hKGQmJmQhPU0ubmFtZXNwYWNlSWR8fGgmJmghPU0udHJpZ2dlck5hbWUpKSksdn1fYmVmb3JlQW5pbWF0aW9uQnVpbGQobCxhLGQpe2NvbnN0IGY9YS5lbGVtZW50LHY9YS5pc1JlbW92YWxUcmFuc2l0aW9uP3ZvaWQgMDpsLE09YS5pc1JlbW92YWxUcmFuc2l0aW9u'@;
put 'P3ZvaWQgMDphLnRyaWdnZXJOYW1lO2Zvcihjb25zdCBEIG9mIGEudGltZWxpbmVzKXtjb25zdCBaPUQuZWxlbWVudCxuZT1aIT09ZixjZT1BaChkLFosW10pO3RoaXMuX2dldFByZXZpb3VzUGxheWVycyhaLG5lLHYsTSxhLnRvU3RhdGUpLmZvckVhY2goRWU9Pntjb25zdCBCZT1FZS5nZXRS'@;
put 'ZWFsUGxheWVyKCk7QmUuYmVmb3JlRGVzdHJveSYmQmUuYmVmb3JlRGVzdHJveSgpLEVlLmRlc3Ryb3koKSxjZS5wdXNoKEVlKX0pfUw3KGYsYS5mcm9tU3R5bGVzKX1fYnVpbGRBbmltYXRpb24obCxhLGQsaCxmLHYpe2NvbnN0IE09YS50cmlnZ2VyTmFtZSxEPWEuZWxlbWVudCxaPVtdLG5l'@;
put 'PW5ldyBTZXQsY2U9bmV3IFNldCxiZT1hLnRpbWVsaW5lcy5tYXAoQmU9Pntjb25zdCBxZT1CZS5lbGVtZW50O25lLmFkZChxZSk7Y29uc3QgcnQ9cWVbZTNdO2lmKHJ0JiZydC5yZW1vdmVkQmVmb3JlUXVlcmllZClyZXR1cm4gbmV3IF94KEJlLmR1cmF0aW9uLEJlLmRlbGF5KTtjb25zdCBw'@;
put 'dD1xZSE9PUQsZHQ9ZnVuY3Rpb24gZiRlKGMpe2NvbnN0IGw9W107cmV0dXJuIEZoZShjLGwpLGx9KChkLmdldChxZSl8fG8kZSkubWFwKE1uPT5Nbi5nZXRSZWFsUGxheWVyKCkpKS5maWx0ZXIoTW49PiEhTW4uZWxlbWVudCYmTW4uZWxlbWVudD09PXFlKSxKdD1mLmdldChxZSksdm49di5n'@;
put 'ZXQocWUpLENuPWZoZSh0aGlzLl9ub3JtYWxpemVyLEJlLmtleWZyYW1lcyxKdCx2biksdG49dGhpcy5fYnVpbGRQbGF5ZXIoQmUsQ24sZHQpO2lmKEJlLnN1YlRpbWVsaW5lJiZoJiZjZS5hZGQocWUpLHB0KXtjb25zdCBNbj1uZXcgR0cobCxNLHFlKTtNbi5zZXRSZWFsUGxheWVyKHRuKSxa'@;
put 'LnB1c2goTW4pfXJldHVybiB0bn0pO1ouZm9yRWFjaChCZT0+e0FoKHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsQmUuZWxlbWVudCxbXSkucHVzaChCZSksQmUub25Eb25lKCgpPT5mdW5jdGlvbiBjJGUoYyxsLGEpe2xldCBkPWMuZ2V0KGwpO2lmKGQpe2lmKGQubGVuZ3RoKXtjb25z'@;
put 'dCBoPWQuaW5kZXhPZihhKTtkLnNwbGljZShoLDEpfTA9PWQubGVuZ3RoJiZjLmRlbGV0ZShsKX1yZXR1cm4gZH0odGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudCxCZS5lbGVtZW50LEJlKSl9KSxuZS5mb3JFYWNoKEJlPT5MMihCZSx5aGUpKTtjb25zdCBFZT1rbShiZSk7cmV0dXJuIEVl'@;
put 'Lm9uRGVzdHJveSgoKT0+e25lLmZvckVhY2goQmU9PmlfKEJlLHloZSkpLE1wKEQsYS50b1N0eWxlcyl9KSxjZS5mb3JFYWNoKEJlPT57QWgoaCxCZSxbXSkucHVzaChFZSl9KSxFZX1fYnVpbGRQbGF5ZXIobCxhLGQpe3JldHVybiBhLmxlbmd0aD4wP3RoaXMuZHJpdmVyLmFuaW1hdGUobC5l'@;
put 'bGVtZW50LGEsbC5kdXJhdGlvbixsLmRlbGF5LGwuZWFzaW5nLGQpOm5ldyBfeChsLmR1cmF0aW9uLGwuZGVsYXkpfX1jbGFzcyBHR3tjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5uYW1lc3BhY2VJZD1sLHRoaXMudHJpZ2dlck5hbWU9YSx0aGlzLmVsZW1lbnQ9ZCx0aGlzLl9wbGF5ZXI9bmV3'@;
put 'IF94LHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMSx0aGlzLl9xdWV1ZWRDYWxsYmFja3M9bmV3IE1hcCx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMubWFya2VkRm9yRGVzdHJveT0hMSx0aGlzLmRpc2FibGVkPSExLHRoaXMucXVldWVkPSEwLHRoaXMu'@;
put 'dG90YWxUaW1lPTB9c2V0UmVhbFBsYXllcihsKXt0aGlzLl9jb250YWluc1JlYWxQbGF5ZXJ8fCh0aGlzLl9wbGF5ZXI9bCx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuZm9yRWFjaCgoYSxkKT0+e2EuZm9yRWFjaChoPT54RyhsLGQsdm9pZCAwLGgpKX0pLHRoaXMuX3F1ZXVlZENhbGxiYWNrcy5j'@;
put 'bGVhcigpLHRoaXMuX2NvbnRhaW5zUmVhbFBsYXllcj0hMCx0aGlzLm92ZXJyaWRlVG90YWxUaW1lKGwudG90YWxUaW1lKSx0aGlzLnF1ZXVlZD0hMSl9Z2V0UmVhbFBsYXllcigpe3JldHVybiB0aGlzLl9wbGF5ZXJ9b3ZlcnJpZGVUb3RhbFRpbWUobCl7dGhpcy50b3RhbFRpbWU9bH1zeW5j'@;
put 'UGxheWVyRXZlbnRzKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyO2EudHJpZ2dlckNhbGxiYWNrJiZsLm9uU3RhcnQoKCk9PmEudHJpZ2dlckNhbGxiYWNrKCJzdGFydCIpKSxsLm9uRG9uZSgoKT0+dGhpcy5maW5pc2goKSksbC5vbkRlc3Ryb3koKCk9PnRoaXMuZGVzdHJveSgpKX1fcXVldWVF'@;
put 'dmVudChsLGEpe0FoKHRoaXMuX3F1ZXVlZENhbGxiYWNrcyxsLFtdKS5wdXNoKGEpfW9uRG9uZShsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZG9uZSIsbCksdGhpcy5fcGxheWVyLm9uRG9uZShsKX1vblN0YXJ0KGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJz'@;
put 'dGFydCIsbCksdGhpcy5fcGxheWVyLm9uU3RhcnQobCl9b25EZXN0cm95KGwpe3RoaXMucXVldWVkJiZ0aGlzLl9xdWV1ZUV2ZW50KCJkZXN0cm95IixsKSx0aGlzLl9wbGF5ZXIub25EZXN0cm95KGwpfWluaXQoKXt0aGlzLl9wbGF5ZXIuaW5pdCgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4hdGhp'@;
put 'cy5xdWV1ZWQmJnRoaXMuX3BsYXllci5oYXNTdGFydGVkKCl9cGxheSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBsYXkoKX1wYXVzZSgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnBhdXNlKCl9cmVzdGFydCgpeyF0aGlzLnF1ZXVlZCYmdGhpcy5fcGxheWVyLnJlc3RhcnQo'@;
put 'KX1maW5pc2goKXt0aGlzLl9wbGF5ZXIuZmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuX3BsYXllci5kZXN0cm95KCl9cmVzZXQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXNldCgpfXNldFBvc2l0aW9uKGwpe3RoaXMucXVldWVkfHx0aGlzLl9wbGF5'@;
put 'ZXIuc2V0UG9zaXRpb24obCl9Z2V0UG9zaXRpb24oKXtyZXR1cm4gdGhpcy5xdWV1ZWQ/MDp0aGlzLl9wbGF5ZXIuZ2V0UG9zaXRpb24oKX10cmlnZ2VyQ2FsbGJhY2sobCl7Y29uc3QgYT10aGlzLl9wbGF5ZXI7YS50cmlnZ2VyQ2FsbGJhY2smJmEudHJpZ2dlckNhbGxiYWNrKGwpfX1mdW5j'@;
put 'dGlvbiBNTyhjKXtyZXR1cm4gYyYmMT09PWMubm9kZVR5cGV9ZnVuY3Rpb24gTGhlKGMsbCl7Y29uc3QgYT1jLnN0eWxlLmRpc3BsYXk7cmV0dXJuIGMuc3R5bGUuZGlzcGxheT1sPz8ibm9uZSIsYX1mdW5jdGlvbiBPaGUoYyxsLGEsZCxoKXtjb25zdCBmPVtdO2EuZm9yRWFjaChEPT5mLnB1'@;
put 'c2goTGhlKEQpKSk7Y29uc3Qgdj1bXTtkLmZvckVhY2goKEQsWik9Pntjb25zdCBuZT1uZXcgTWFwO0QuZm9yRWFjaChjZT0+e2NvbnN0IGJlPWwuY29tcHV0ZVN0eWxlKFosY2UsaCk7bmUuc2V0KGNlLGJlKSwoIWJlfHwwPT1iZS5sZW5ndGgpJiYoWltlM109YSRlLHYucHVzaChaKSl9KSxj'@;
put 'LnNldChaLG5lKX0pO2xldCBNPTA7cmV0dXJuIGEuZm9yRWFjaChEPT5MaGUoRCxmW00rK10pKSx2fWZ1bmN0aW9uIFBoZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtpZihjLmZvckVhY2goTT0+YS5zZXQoTSxbXSkpLDA9PWwubGVuZ3RoKXJldHVybiBhO2NvbnN0IGg9bmV3IFNldChsKSxmPW5l'@;
put 'dyBNYXA7ZnVuY3Rpb24gdihNKXtpZighTSlyZXR1cm4gMTtsZXQgRD1mLmdldChNKTtpZihEKXJldHVybiBEO2NvbnN0IFo9TS5wYXJlbnROb2RlO3JldHVybiBEPWEuaGFzKFopP1o6aC5oYXMoWik/MTp2KFopLGYuc2V0KE0sRCksRH1yZXR1cm4gbC5mb3JFYWNoKE09Pntjb25zdCBEPXYo'@;
put 'TSk7MSE9PUQmJmEuZ2V0KEQpLnB1c2goTSl9KSxhfWZ1bmN0aW9uIEwyKGMsbCl7Yy5jbGFzc0xpc3Q/LmFkZChsKX1mdW5jdGlvbiBpXyhjLGwpe2MuY2xhc3NMaXN0Py5yZW1vdmUobCl9ZnVuY3Rpb24gaCRlKGMsbCxhKXtrbShhKS5vbkRvbmUoKCk9PmMucHJvY2Vzc0xlYXZlTm9kZShs'@;
put 'KSl9ZnVuY3Rpb24gRmhlKGMsbCl7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9Y1thXTtkIGluc3RhbmNlb2YgRDBlP0ZoZShkLnBsYXllcnMsbCk6bC5wdXNoKGQpfX1mdW5jdGlvbiBIaGUoYyxsLGEpe2NvbnN0IGQ9YS5nZXQoYyk7aWYoIWQpcmV0dXJuITE7bGV0IGg9'@;
put 'bC5nZXQoYyk7cmV0dXJuIGg/ZC5mb3JFYWNoKGY9PmguYWRkKGYpKTpsLnNldChjLGQpLGEuZGVsZXRlKGMpLCEwfWNsYXNzIGlFe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuX2RyaXZlcj1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLl90cmlnZ2VyQ2FjaGU9e30sdGhpcy5vblJlbW92'@;
put 'YWxDb21wbGV0ZT0oZix2KT0+e30sdGhpcy5fdHJhbnNpdGlvbkVuZ2luZT1uZXcgbCRlKGwuYm9keSxhLGQsaCksdGhpcy5fdGltZWxpbmVFbmdpbmU9bmV3IGUkZShsLmJvZHksYSxkKSx0aGlzLl90cmFuc2l0aW9uRW5naW5lLm9uUmVtb3ZhbENvbXBsZXRlPShmLHYpPT50aGlzLm9uUmVt'@;
put 'b3ZhbENvbXBsZXRlKGYsdil9cmVnaXN0ZXJUcmlnZ2VyKGwsYSxkLGgsZil7Y29uc3Qgdj1sKyItIitoO2xldCBNPXRoaXMuX3RyaWdnZXJDYWNoZVt2XTtpZighTSl7Y29uc3QgRD1bXSxuZT1ORyh0aGlzLl9kcml2ZXIsZixELFtdKTtpZihELmxlbmd0aCl0aHJvdyBmdW5jdGlvbiByR2Uo'@;
put 'YyxsKXtyZXR1cm4gbmV3IFFuKDM0MDQsITEpfSgpO009ZnVuY3Rpb24gcUdlKGMsbCxhKXtyZXR1cm4gbmV3IFhHZShjLGwsYSl9KGgsbmUsdGhpcy5fbm9ybWFsaXplciksdGhpcy5fdHJpZ2dlckNhY2hlW3ZdPU19dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlclRyaWdnZXIoYSxo'@;
put 'LE0pfXJlZ2lzdGVyKGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZWdpc3RlcihsLGEpfWRlc3Ryb3kobCxhKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmRlc3Ryb3kobCxhKX1vbkluc2VydChsLGEsZCxoKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmluc2VydE5vZGUobCxhLGQsaCl9'@;
put 'b25SZW1vdmUobCxhLGQpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVtb3ZlTm9kZShsLGEsZCl9ZGlzYWJsZUFuaW1hdGlvbnMobCxhKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLm1hcmtFbGVtZW50QXNEaXNhYmxlZChsLGEpfXByb2Nlc3MobCxhLGQsaCl7aWYoIkAiPT1kLmNoYXJBdCgw'@;
put 'KSl7Y29uc3RbZix2XT1waGUoZCk7dGhpcy5fdGltZWxpbmVFbmdpbmUuY29tbWFuZChmLGEsdixoKX1lbHNlIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUudHJpZ2dlcihsLGEsZCxoKX1saXN0ZW4obCxhLGQsaCxmKXtpZigiQCI9PWQuY2hhckF0KDApKXtjb25zdFt2LE1dPXBoZShkKTtyZXR1'@;
put 'cm4gdGhpcy5fdGltZWxpbmVFbmdpbmUubGlzdGVuKHYsYSxNLGYpfXJldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLmxpc3RlbihsLGEsZCxoLGYpfWZsdXNoKGw9LTEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZmx1c2gobCl9Z2V0IHBsYXllcnMoKXtyZXR1cm5bLi4udGhpcy5fdHJh'@;
put 'bnNpdGlvbkVuZ2luZS5wbGF5ZXJzLC4uLnRoaXMuX3RpbWVsaW5lRW5naW5lLnBsYXllcnNdfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUud2hlblJlbmRlcmluZ0RvbmUoKX1hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUobCl7dGhpcy5fdHJhbnNp'@;
put 'dGlvbkVuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUobCl9fWNsYXNzIG9Fe3N0YXRpY3t0aGlzLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQ9bmV3IFdlYWtNYXB9Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuX2VsZW1lbnQ9bCx0aGlzLl9zdGFydFN0eWxlcz1hLHRoaXMuX2VuZFN0eWxl'@;
put 'cz1kLHRoaXMuX3N0YXRlPTA7bGV0IGg9b0UuaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5nZXQobCk7aHx8b0UuaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5zZXQobCxoPW5ldyBNYXApLHRoaXMuX2luaXRpYWxTdHlsZXM9aH1zdGFydCgpe3RoaXMuX3N0YXRlPDEmJih0aGlzLl9zdGFydFN0eWxl'@;
put 'cyYmTXAodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0xKX1maW5pc2goKXt0aGlzLnN0YXJ0KCksdGhpcy5fc3RhdGU8MiYmKE1wKHRoaXMuX2VsZW1lbnQsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fZW5kU3R5bGVz'@;
put 'JiYoTXAodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSx0aGlzLl9zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5maW5pc2goKSx0aGlzLl9zdGF0ZTwzJiYob0UuaW5pdGlhbFN0eWxlc0J5RWxlbWVudC5kZWxldGUodGhpcy5fZWxlbWVudCksdGhp'@;
put 'cy5fc3RhcnRTdHlsZXMmJihMNyh0aGlzLl9lbGVtZW50LHRoaXMuX3N0YXJ0U3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fZW5kU3R5bGVzJiYoTDcodGhpcy5fZWxlbWVudCx0aGlzLl9lbmRTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcz1udWxsKSxNcCh0aGlzLl9lbGVtZW50'@;
put 'LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX3N0YXRlPTMpfX1mdW5jdGlvbiAkRyhjKXtsZXQgbD1udWxsO3JldHVybiBjLmZvckVhY2goKGEsZCk9PnsoZnVuY3Rpb24gbSRlKGMpe3JldHVybiJkaXNwbGF5Ij09PWN8fCJwb3NpdGlvbiI9PT1jfSkoZCkmJihsPWx8fG5ldyBNYXAsbC5z'@;
put 'ZXQoZCxhKSl9KSxsfWNsYXNzIE5oZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLmtleWZyYW1lcz1hLHRoaXMub3B0aW9ucz1kLHRoaXMuX3NwZWNpYWxTdHlsZXM9aCx0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ry'@;
put 'b3lGbnM9W10sdGhpcy5faW5pdGlhbGl6ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb3JpZ2luYWxPbkRvbmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMudGltZT0wLHRoaXMucGFyZW50UGxh'@;
put 'eWVyPW51bGwsdGhpcy5jdXJyZW50U25hcHNob3Q9bmV3IE1hcCx0aGlzLl9kdXJhdGlvbj1kLmR1cmF0aW9uLHRoaXMuX2RlbGF5PWQuZGVsYXl8fDAsdGhpcy50aW1lPXRoaXMuX2R1cmF0aW9uK3RoaXMuX2RlbGF5fV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNo'@;
put 'ZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfWluaXQoKXt0aGlzLl9idWlsZFBsYXllcigpLHRoaXMuX3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgpfV9idWlsZFBsYXllcigpe2lmKHRoaXMuX2luaXRpYWxpemVkKXJldHVybjt0aGlz'@;
put 'Ll9pbml0aWFsaXplZD0hMDtjb25zdCBsPXRoaXMua2V5ZnJhbWVzO3RoaXMuZG9tUGxheWVyPXRoaXMuX3RyaWdnZXJXZWJBbmltYXRpb24odGhpcy5lbGVtZW50LGwsdGhpcy5vcHRpb25zKSx0aGlzLl9maW5hbEtleWZyYW1lPWwubGVuZ3RoP2xbbC5sZW5ndGgtMV06bmV3IE1hcDtjb25z'@;
put 'dCBhPSgpPT50aGlzLl9vbkZpbmlzaCgpO3RoaXMuZG9tUGxheWVyLmFkZEV2ZW50TGlzdGVuZXIoImZpbmlzaCIsYSksdGhpcy5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRvbVBsYXllci5yZW1vdmVFdmVudExpc3RlbmVyKCJmaW5pc2giLGEpfSl9X3ByZXBhcmVQbGF5ZXJCZWZvcmVTdGFydCgp'@;
put 'e3RoaXMuX2RlbGF5P3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKTp0aGlzLmRvbVBsYXllci5wYXVzZSgpfV9jb252ZXJ0S2V5ZnJhbWVzVG9PYmplY3QobCl7Y29uc3QgYT1bXTtyZXR1cm4gbC5mb3JFYWNoKGQ9PnthLnB1c2goT2JqZWN0LmZyb21FbnRyaWVzKGQpKX0pLGF9X3RyaWdn'@;
put 'ZXJXZWJBbmltYXRpb24obCxhLGQpe3JldHVybiBsLmFuaW1hdGUodGhpcy5fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGEpLGQpfW9uU3RhcnQobCl7dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLnB1c2gobCksdGhpcy5fb25TdGFydEZucy5wdXNoKGwpfW9uRG9uZShsKXt0aGlzLl9vcmln'@;
put 'aW5hbE9uRG9uZUZucy5wdXNoKGwpLHRoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaChsKX1wbGF5KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChsPT5sKCkp'@;
put 'LHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLnN0YXJ0KCkpLHRoaXMuZG9tUGxheWVyLnBsYXkoKX1wYXVzZSgpe3RoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLnBhdXNlKCl9ZmluaXNoKCl7dGhp'@;
put 'cy5pbml0KCksdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5maW5pc2goKSx0aGlzLl9vbkZpbmlzaCgpLHRoaXMuZG9tUGxheWVyLmZpbmlzaCgpfXJlc2V0KCl7dGhpcy5fcmVzZXREb21QbGF5ZXJTdGF0ZSgpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5p'@;
put 'c2hlZD0hMSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX29uU3RhcnRGbnM9dGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zLHRoaXMuX29uRG9uZUZucz10aGlzLl9vcmlnaW5hbE9uRG9uZUZuc31fcmVzZXREb21QbGF5ZXJTdGF0ZSgpe3RoaXMuZG9tUGxheWVyJiZ0aGlzLmRvbVBsYXllci5jYW5j'@;
put 'ZWwoKX1yZXN0YXJ0KCl7dGhpcy5yZXNldCgpLHRoaXMucGxheSgpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1kZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9vbkZpbmlzaCgp'@;
put 'LHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZGVzdHJveSgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1zZXRQb3NpdGlvbihsKXt2b2lkIDA9PT10aGlzLmRvbVBsYXllciYmdGhpcy5pbml0KCksdGhp'@;
put 'cy5kb21QbGF5ZXIuY3VycmVudFRpbWU9bCp0aGlzLnRpbWV9Z2V0UG9zaXRpb24oKXtyZXR1cm4rKHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPz8wKS90aGlzLnRpbWV9Z2V0IHRvdGFsVGltZSgpe3JldHVybiB0aGlzLl9kZWxheSt0aGlzLl9kdXJhdGlvbn1iZWZvcmVEZXN0cm95KCl7'@;
put 'Y29uc3QgbD1uZXcgTWFwO3RoaXMuaGFzU3RhcnRlZCgpJiZ0aGlzLl9maW5hbEtleWZyYW1lLmZvckVhY2goKGQsaCk9Pnsib2Zmc2V0IiE9PWgmJmwuc2V0KGgsdGhpcy5fZmluaXNoZWQ/ZDpIRyh0aGlzLmVsZW1lbnQsaCkpfSksdGhpcy5jdXJyZW50U25hcHNob3Q9bH10cmlnZ2VyQ2Fs'@;
put 'bGJhY2sobCl7Y29uc3QgYT0ic3RhcnQiPT09bD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZD0+ZCgpKSxhLmxlbmd0aD0wfX1jbGFzcyBWaGV7dmFsaWRhdGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfXZhbGlkYXRlQW5pbWF0YWJsZVN0eWxlUHJvcGVy'@;
put 'dHkobCl7cmV0dXJuITB9bWF0Y2hlc0VsZW1lbnQobCxhKXtyZXR1cm4hMX1jb250YWluc0VsZW1lbnQobCxhKXtyZXR1cm4gbWhlKGwsYSl9Z2V0UGFyZW50RWxlbWVudChsKXtyZXR1cm4gQUcobCl9cXVlcnkobCxhLGQpe3JldHVybiB2aGUobCxhLGQpfWNvbXB1dGVTdHlsZShsLGEsZCl7'@;
put 'cmV0dXJuIEhHKGwsYSl9YW5pbWF0ZShsLGEsZCxoLGYsdj1bXSl7Y29uc3QgRD17ZHVyYXRpb246ZCxkZWxheTpoLGZpbGw6MD09aD8iYm90aCI6ImZvcndhcmRzIn07ZiYmKEQuZWFzaW5nPWYpO2NvbnN0IFo9bmV3IE1hcCxuZT12LmZpbHRlcihFZT0+RWUgaW5zdGFuY2VvZiBOaGUpOyhm'@;
put 'dW5jdGlvbiBUR2UoYyxsKXtyZXR1cm4gMD09PWN8fDA9PT1sfSkoZCxoKSYmbmUuZm9yRWFjaChFZT0+e0VlLmN1cnJlbnRTbmFwc2hvdC5mb3JFYWNoKChCZSxxZSk9Plouc2V0KHFlLEJlKSl9KTtsZXQgY2U9ZnVuY3Rpb24gTUdlKGMpe3JldHVybiBjLmxlbmd0aD9jWzBdaW5zdGFuY2Vv'@;
put 'ZiBNYXA/YzpjLm1hcChsPT5uZXcgTWFwKE9iamVjdC5lbnRyaWVzKGwpKSk6W119KGEpLm1hcChFZT0+bmV3IE1hcChFZSkpO2NlPWZ1bmN0aW9uIEFHZShjLGwsYSl7aWYoYS5zaXplJiZsLmxlbmd0aCl7bGV0IGQ9bFswXSxoPVtdO2lmKGEuZm9yRWFjaCgoZix2KT0+e2QuaGFzKHYpfHxo'@;
put 'LnB1c2godiksZC5zZXQodixmKX0pLGgubGVuZ3RoKWZvcihsZXQgZj0xO2Y8bC5sZW5ndGg7ZisrKXtsZXQgdj1sW2ZdO2guZm9yRWFjaChNPT52LnNldChNLEhHKGMsTSkpKX19cmV0dXJuIGx9KGwsY2UsWik7Y29uc3QgYmU9ZnVuY3Rpb24gZyRlKGMsbCl7bGV0IGE9bnVsbCxkPW51bGw7'@;
put 'cmV0dXJuIEFycmF5LmlzQXJyYXkobCkmJmwubGVuZ3RoPyhhPSRHKGxbMF0pLGwubGVuZ3RoPjEmJihkPSRHKGxbbC5sZW5ndGgtMV0pKSk6bCBpbnN0YW5jZW9mIE1hcCYmKGE9JEcobCkpLGF8fGQ/bmV3IG9FKGMsYSxkKTpudWxsfShsLGNlKTtyZXR1cm4gbmV3IE5oZShsLGNlLEQsYmUp'@;
put 'fX1jb25zdCBCaGU9IkAuZGlzYWJsZWQiO2NsYXNzIGpoZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLm5hbWVzcGFjZUlkPWwsdGhpcy5kZWxlZ2F0ZT1hLHRoaXMuZW5naW5lPWQsdGhpcy5fb25EZXN0cm95PWgsdGhpcy5cdTAyNzV0eXBlPTB9Z2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5k'@;
put 'ZWxlZ2F0ZS5kYXRhfWRlc3Ryb3lOb2RlKGwpe3RoaXMuZGVsZWdhdGUuZGVzdHJveU5vZGU/LihsKX1kZXN0cm95KCl7dGhpcy5lbmdpbmUuZGVzdHJveSh0aGlzLm5hbWVzcGFjZUlkLHRoaXMuZGVsZWdhdGUpLHRoaXMuZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+e3F1'@;
put 'ZXVlTWljcm90YXNrKCgpPT57dGhpcy5kZWxlZ2F0ZS5kZXN0cm95KCl9KX0pLHRoaXMuX29uRGVzdHJveT8uKCl9Y3JlYXRlRWxlbWVudChsLGEpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNyZWF0ZUVsZW1lbnQobCxhKX1jcmVhdGVDb21tZW50KGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLmNy'@;
put 'ZWF0ZUNvbW1lbnQobCl9Y3JlYXRlVGV4dChsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVUZXh0KGwpfWFwcGVuZENoaWxkKGwsYSl7dGhpcy5kZWxlZ2F0ZS5hcHBlbmRDaGlsZChsLGEpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsYSxsLCExKX1pbnNlcnRC'@;
put 'ZWZvcmUobCxhLGQsaD0hMCl7dGhpcy5kZWxlZ2F0ZS5pbnNlcnRCZWZvcmUobCxhLGQpLHRoaXMuZW5naW5lLm9uSW5zZXJ0KHRoaXMubmFtZXNwYWNlSWQsYSxsLGgpfXJlbW92ZUNoaWxkKGwsYSxkKXt0aGlzLmVuZ2luZS5vblJlbW92ZSh0aGlzLm5hbWVzcGFjZUlkLGEsdGhpcy5kZWxl'@;
put 'Z2F0ZSl9c2VsZWN0Um9vdEVsZW1lbnQobCxhKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5zZWxlY3RSb290RWxlbWVudChsLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUucGFyZW50Tm9kZShsKX1uZXh0U2libGluZyhsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5uZXh0U2li'@;
put 'bGluZyhsKX1zZXRBdHRyaWJ1dGUobCxhLGQsaCl7dGhpcy5kZWxlZ2F0ZS5zZXRBdHRyaWJ1dGUobCxhLGQsaCl9cmVtb3ZlQXR0cmlidXRlKGwsYSxkKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUF0dHJpYnV0ZShsLGEsZCl9YWRkQ2xhc3MobCxhKXt0aGlzLmRlbGVnYXRlLmFkZENsYXNzKGws'@;
put 'YSl9cmVtb3ZlQ2xhc3MobCxhKXt0aGlzLmRlbGVnYXRlLnJlbW92ZUNsYXNzKGwsYSl9c2V0U3R5bGUobCxhLGQsaCl7dGhpcy5kZWxlZ2F0ZS5zZXRTdHlsZShsLGEsZCxoKX1yZW1vdmVTdHlsZShsLGEsZCl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVTdHlsZShsLGEsZCl9c2V0UHJvcGVydHko'@;
put 'bCxhLGQpeyJAIj09YS5jaGFyQXQoMCkmJmE9PUJoZT90aGlzLmRpc2FibGVBbmltYXRpb25zKGwsISFkKTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGwsYSxkKX1zZXRWYWx1ZShsLGEpe3RoaXMuZGVsZWdhdGUuc2V0VmFsdWUobCxhKX1saXN0ZW4obCxhLGQpe3JldHVybiB0aGlzLmRl'@;
put 'bGVnYXRlLmxpc3RlbihsLGEsZCl9ZGlzYWJsZUFuaW1hdGlvbnMobCxhKXt0aGlzLmVuZ2luZS5kaXNhYmxlQW5pbWF0aW9ucyhsLGEpfX1jbGFzcyB2JGUgZXh0ZW5kcyBqaGV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcihhLGQsaCxmKSx0aGlzLmZhY3Rvcnk9bCx0aGlzLm5hbWVz'@;
put 'cGFjZUlkPWF9c2V0UHJvcGVydHkobCxhLGQpeyJAIj09YS5jaGFyQXQoMCk/Ii4iPT1hLmNoYXJBdCgxKSYmYT09QmhlP3RoaXMuZGlzYWJsZUFuaW1hdGlvbnMobCxkPXZvaWQgMD09PWR8fCEhZCk6dGhpcy5lbmdpbmUucHJvY2Vzcyh0aGlzLm5hbWVzcGFjZUlkLGwsYS5zbGljZSgxKSxk'@;
put 'KTp0aGlzLmRlbGVnYXRlLnNldFByb3BlcnR5KGwsYSxkKX1saXN0ZW4obCxhLGQpe2lmKCJAIj09YS5jaGFyQXQoMCkpe2NvbnN0IGg9ZnVuY3Rpb24gYiRlKGMpe3N3aXRjaChjKXtjYXNlImJvZHkiOnJldHVybiBkb2N1bWVudC5ib2R5O2Nhc2UiZG9jdW1lbnQiOnJldHVybiBkb2N1bWVu'@;
put 'dDtjYXNlIndpbmRvdyI6cmV0dXJuIHdpbmRvdztkZWZhdWx0OnJldHVybiBjfX0obCk7bGV0IGY9YS5zbGljZSgxKSx2PSIiO3JldHVybiJAIiE9Zi5jaGFyQXQoMCkmJihbZix2XT1mdW5jdGlvbiB5JGUoYyl7Y29uc3QgbD1jLmluZGV4T2YoIi4iKTtyZXR1cm5bYy5zdWJzdHJpbmcoMCxs'@;
put 'KSxjLnNsaWNlKGwrMSldfShmKSksdGhpcy5lbmdpbmUubGlzdGVuKHRoaXMubmFtZXNwYWNlSWQsaCxmLHYsTT0+e3RoaXMuZmFjdG9yeS5zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2soTS5fZGF0YXx8LTEsZCxNKX0pfXJldHVybiB0aGlzLmRlbGVnYXRlLmxpc3RlbihsLGEsZCl9fWNsYXNz'@;
put 'IF8kZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5kZWxlZ2F0ZT1sLHRoaXMuZW5naW5lPWEsdGhpcy5fem9uZT1kLHRoaXMuX2N1cnJlbnRJZD0wLHRoaXMuX21pY3JvdGFza0lkPTEsdGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyPVtdLHRoaXMuX3JlbmRlcmVyQ2FjaGU9bmV3IE1h'@;
put 'cCx0aGlzLl9jZFJlY3VyRGVwdGg9MCxhLm9uUmVtb3ZhbENvbXBsZXRlPShoLGYpPT57Y29uc3Qgdj1mPy5wYXJlbnROb2RlKGgpO3YmJmYucmVtb3ZlQ2hpbGQodixoKX19Y3JlYXRlUmVuZGVyZXIobCxhKXtjb25zdCBoPXRoaXMuZGVsZWdhdGUuY3JlYXRlUmVuZGVyZXIobCxhKTtpZigh'@;
put 'bHx8IWE/LmRhdGE/LmFuaW1hdGlvbil7Y29uc3QgWj10aGlzLl9yZW5kZXJlckNhY2hlO2xldCBuZT1aLmdldChoKTtyZXR1cm4gbmV8fChuZT1uZXcgamhlKCIiLGgsdGhpcy5lbmdpbmUsKCk9PlouZGVsZXRlKGgpKSxaLnNldChoLG5lKSksbmV9Y29uc3QgZj1hLmlkLHY9YS5pZCsiLSIr'@;
put 'dGhpcy5fY3VycmVudElkO3RoaXMuX2N1cnJlbnRJZCsrLHRoaXMuZW5naW5lLnJlZ2lzdGVyKHYsbCk7Y29uc3QgTT1aPT57QXJyYXkuaXNBcnJheShaKT9aLmZvckVhY2goTSk6dGhpcy5lbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGYsdixsLFoubmFtZSxaKX07cmV0dXJuIGEuZGF0YS5hbmlt'@;
put 'YXRpb24uZm9yRWFjaChNKSxuZXcgdiRlKHRoaXMsdixoLHRoaXMuZW5naW5lKX1iZWdpbigpe3RoaXMuX2NkUmVjdXJEZXB0aCsrLHRoaXMuZGVsZWdhdGUuYmVnaW4mJnRoaXMuZGVsZWdhdGUuYmVnaW4oKX1fc2NoZWR1bGVDb3VudFRhc2soKXtxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMu'@;
put 'X21pY3JvdGFza0lkKyt9KX1zY2hlZHVsZUxpc3RlbmVyQ2FsbGJhY2sobCxhLGQpe2lmKGw+PTAmJmw8dGhpcy5fbWljcm90YXNrSWQpcmV0dXJuIHZvaWQgdGhpcy5fem9uZS5ydW4oKCk9PmEoZCkpO2NvbnN0IGg9dGhpcy5fYW5pbWF0aW9uQ2FsbGJhY2tzQnVmZmVyOzA9PWgubGVuZ3Ro'@;
put 'JiZxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuX3pvbmUucnVuKCgpPT57aC5mb3JFYWNoKGY9Pntjb25zdFt2LE1dPWY7dihNKX0pLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXX0pfSksaC5wdXNoKFthLGRdKX1lbmQoKXt0aGlzLl9jZFJlY3VyRGVwdGgtLSwwPT10aGlzLl9j'@;
put 'ZFJlY3VyRGVwdGgmJnRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zY2hlZHVsZUNvdW50VGFzaygpLHRoaXMuZW5naW5lLmZsdXNoKHRoaXMuX21pY3JvdGFza0lkKX0pLHRoaXMuZGVsZWdhdGUuZW5kJiZ0aGlzLmRlbGVnYXRlLmVuZCgpfXdoZW5SZW5kZXJpbmdE'@;
put 'b25lKCl7cmV0dXJuIHRoaXMuZW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9fWxldCB3JGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGlFe2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQsaCxmaShtYix7b3B0aW9uYWw6ITB9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLmZsdXNoKCl9c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoeHIodnMpLHhyKERHKSx4cihJRykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHpoZT1be3Byb3ZpZGU6SUcsdXNl'@;
put 'RmFjdG9yeTpmdW5jdGlvbiBDJGUoKXtyZXR1cm4gbmV3IENoZX19LHtwcm92aWRlOmlFLHVzZUNsYXNzOnckZX0se3Byb3ZpZGU6TTgsdXNlRmFjdG9yeTpmdW5jdGlvbiBTJGUoYyxsLGEpe3JldHVybiBuZXcgXyRlKGMsbCxhKX0sZGVwczpbbFosaUUsWW9dfV0sS0c9W3twcm92aWRlOkRH'@;
put 'LHVzZUZhY3Rvcnk6KCk9Pm5ldyBWaGV9LHtwcm92aWRlOk9rLHVzZVZhbHVlOiJCcm93c2VyQW5pbWF0aW9ucyJ9LC4uLnpoZV0sVWhlPVt7cHJvdmlkZTpERyx1c2VDbGFzczprR30se3Byb3ZpZGU6T2ssdXNlVmFsdWU6Ik5vb3BBbmltYXRpb25zIn0sLi4uemhlXTtsZXQgTSRlPSgoKT0+'@;
put 'e2NsYXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOmEuZGlzYWJsZUFuaW1hdGlvbnM/VWhlOktHfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0'@;
put 'eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpLRyxpbXBvcnRzOlt4YWVdfSl9fXJldHVybiBjfSkoKSx4JGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1ub3QtZm91bmQiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwicCIpLExlKDIsIjQwNCAtIE5vdCBGb3VuZCIpLGhlKCkoKSl9fSl9fXJldHVybiBjfSkoKSxaaGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31kb3dubG9hZEZpbGUoYSxkLGg9InR4dCIpe2xldCBmPW5ldyBCbG9iKFthXSx7dHlw'@;
put 'ZToidGV4dC9wbGFpbiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihmLGAke2R9LiR7aH1gKTtlbHNle2xldCB2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTt2LmhyZWY9ImRhdGE6'@;
put 'dGV4dC9wbGFpbiwiK2VuY29kZVVSSUNvbXBvbmVudChhKSx2LmRvd25sb2FkPWAke2R9LiR7aH1gLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodiksdi5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodil9fXJlYWRGaWxlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+'@;
put 'e2xldCBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPSgpPT57Zi5yZXN1bHQmJmQoSlNPTi5wYXJzZShmLnJlc3VsdC50b1N0cmluZygpKSl9LGYucmVhZEFzVGV4dChhKX0pfWNsZWFyVXBsb2FkSW5wdXQoYSl7YS50YXJnZXQudmFsdWU9IiJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gRSRlKGMsbCl7MSZjJiYoY2koMCksZGUoMSwic3BhbiIsMTkpLExlKDIs'@;
put 'IiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywicCIpLExlKDQsIkRlcGxveWluZy4uLiIpLGhlKCksdWkoKSl9ZnVuY3Rpb24gVCRlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uIEEkZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBrJGUoYyxs'@;
put 'KXsxJmMmJkd0KDAsImNsci1pY29uIiwzMCl9ZnVuY3Rpb24gRCRlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIEkkZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjIpLG10KDEsayRlLDEsMCwiY2xyLWljb24iLDIzKSgyLEQkZSwxLDAsImNsci1pY29uIiwyNCks'@;
put 'ZGUoMywicCIpLExlKDQsIkNyZWF0ZSBkYXRhYmFzZSIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUoIm5nSWYiLGEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSksZmUoKSx4ZSgibmdJZiIsITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpfX1mdW5j'@;
put 'dGlvbiBSJGUoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gTCRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwicCIsMjApLExlKDIsIkRvbmUiKSxoZSgpLEd0KDMsImhyIiwyMSksZGUoNCwiZGl2IiwyMiksbXQoNSxUJGUsMSwwLCJjbHItaWNv'@;
put 'biIsMjMpKDYsQSRlLDEsMCwiY2xyLWljb24iLDI0KSxkZSg3LCJwIiksTGUoOCwiRGVwbG95IFNBUyBKb2JzIiksaGUoKSgpLG10KDksSSRlLDUsMiwiZGl2IiwyNSksR3QoMTAsImhyIiwyMSksZGUoMTEsImRpdiIsMjYpKDEyLCJidXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm5hdmlnYXRlVG9Ib21lKCkpfSksbXQoMTMsUiRlLDEsMCwiY2xyLWljb24iLDI0KSxMZSgxNCwiIExBVU5DSCAvIENPTkZJR1VSRSAiKSxoZSgpLGRlKDE1LCJidXR0b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgy'@;
put 'KTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5tYWtlRGF0YVJlc3BvbnNlLCJjcmVhdGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksTGUoMTYsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpLEd0KDE3LCJociIsMjEpLGRlKDE4LCJkaXYiLDI2KSgxOSwiYnV0dG9uIiwyOSksRnQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGguYXV0b2RlcGxveWluZz0hMSxDdChoLmF1dG9kZXBsb3lEb25lPSExKX0pLExlKDIwLCIgQ2xvc2UgIiksaGUoKSxkZSgyMSwiYnV0dG9uIiwyOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChP'@;
put 'ZSgyKS5vcGVuU2FzUmVxdWVzdHNNb2RhbCgpKX0pLExlKDIyLCIgU0FTIFJlcXVlc3RzICIpLGhlKCkoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg1KSx4ZSgibmdJZiIsYS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxmZSgpLHhlKCJuZ0lmIiwhYS5hdXRv'@;
put 'RGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrKSxmZSgzKSx4ZSgibmdJZiIsbnVsbCE9PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSksZmUoNCkseGUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLmRlcGxveVNlcnZpY2VQYWNrfHwhMT09PWEuYXV0b0RlcGxveVN0'@;
put 'YXR1cy5ydW5NYWtlRGF0YSl9fWZ1bmN0aW9uIE8kZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTYpKDEsImRpdiIsMTcpLG10KDIsRSRlLDUsMCwibmctY29udGFpbmVyIiwxOCkoMyxMJGUsMjMsNCwibmctY29udGFpbmVyIiwxOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgy'@;
put 'KSx4ZSgibmdJZiIsIWEuYXV0b2RlcGxveURvbmUpLGZlKCkseGUoIm5nSWYiLGEuYXV0b2RlcGxveURvbmUpfX1sZXQgUCRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlzLmRlcGxveVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9'@;
put 'aCx0aGlzLmxvZ2dlclNlcnZpY2U9Zix0aGlzLnNhc0pzQ29uZmlnPW5ldyB2aC5TQVNqc0NvbmZpZyx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IFhyLHRoaXMubWFrZURhdGFSZXNwb25z'@;
put 'ZT0iIix0aGlzLmpzb25GaWxlPW51bGwsdGhpcy5hdXRvZGVwbG95aW5nPSExLHRoaXMuYXV0b2RlcGxveURvbmU9ITEsdGhpcy5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9ITEsdGhpcy5pc1N1Ym1pdHRpbmdKc29uPSExLHRoaXMuaXNKc29uU3VibWl0dGVkPSExLHRoaXMucmVjcmVhdGVEYXRh'@;
put 'YmFzZT0hMSx0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMSx0aGlzLmF1dG9EZXBsb3lTdGF0dXM9e2RlcGxveVNlcnZpY2VQYWNrOm51bGwscnVuTWFrZURhdGE6bnVsbH19bmdPbkluaXQoKXt9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmF1'@;
put 'dG9kZXBsb3lpbmc9ITAsYS5pc1N1Ym1pdHRpbmdKc29uPSEwO3RyeXt5aWVsZCBhLnNhc0pzLmRlcGxveVNlcnZpY2VQYWNrKGEuanNvbkZpbGUsYS5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jLHZvaWQgMCx2b2lkIDAsITApLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFj'@;
put 'az0hMCxhLmlzSnNvblN1Ym1pdHRlZD0hMH1jYXRjaChkKXtsZXQgaD0iIjtyZXR1cm4gaD0ic3RyaW5nIiE9dHlwZW9mIGQubWVzc2FnZT9KU09OLnN0cmluZ2lmeShkKS5yZXBsYWNlKC9cXC9nbSwiIik6ZC5tZXNzYWdlLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjaz0h'@;
put 'MSxhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxuICR7IiIhPT1oP2g6ZH1gKSxhLmF1dG9kZXBsb3lpbmc9ITEsdm9pZChhLmF1dG9kZXBsb3lEb25lPSExKX1hLmlzU3VibWl0dGluZ0pzb249ITEsYS5yZWNyZWF0ZURhdGFiYXNlP2Eu'@;
put 'Y3JlYXRlRGF0YWJhc2UoKTphLmF1dG9kZXBsb3lEb25lPSEwfSkoKX1jcmVhdGVEYXRhYmFzZSgpe3RoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLHtmcm9tanM6W3tBRE1JTjp0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0s'@;
put 'e3VzZUNvbXB1dGVBcGk6ITEsY29udGV4dE5hbWU6dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZSxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKGg9Pnt0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVz'@;
put 'cG9uc2U9SlNPTi5zdHJpbmdpZnkoaCl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWh9dGhpcy5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhPSEhKGgucmVzdWx0JiZoLnJlc3VsdC5sZW5ndGg+MCl9KS5jYXRjaChoPT57dGhpcy5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRh'@;
put 'PSExLHRoaXMuYXV0b2RlcGxveURvbmU9ITA7dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShoKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9aH19KX1kb3dubG9hZEZpbGUoYSxkLGg9InR4dCIpe3RoaXMuZGVwbG95U2VydmljZS5kb3dubG9hZEZpbGUoYSxk'@;
put 'LGgpfW9uSnNvbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfXJlY3JlYXRlRGF0YWJhc2VDbGlja2VkKGEpeyEwPT09YS50'@;
put 'YXJnZXQuY2hlY2tlZCYmKHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSEwKX1jbGVhclVwbG9hZElucHV0KGEpe3RoaXMuZGVwbG95U2VydmljZS5jbGVhclVwbG9hZElucHV0KGEpfW9wZW5TYXNSZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwo'@;
put 'KX1uYXZpZ2F0ZVRvSG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodmMpLEdlKFpoZSksR2UodGwpLEdlKE1kKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNl'@;
put 'bGVjdG9yczpbWyJhcHAtYXV0b21hdGljLWRlcGxveSJdXSxpbnB1dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MiLGFwcExvYzoiYXBwTG9jIixkY1BhdGg6ImRjUGF0aCIsc2VsZWN0ZWRBZG1p'@;
put 'bkdyb3VwOiJzZWxlY3RlZEFkbWluR3JvdXAifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6NDYsdmFyczoxMCxjb25zdHM6W1sidXBsb2FkSnNvbkF1dG8iLCIiXSxbImNsYXNzIiwiYXV0by1kZXBsb3kiLDQsIm5nSWYiXSxbMSwidGV4dC1j'@;
put 'ZW50ZXIiLCJteS0xNSJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbMSwibXQtMCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2ti'@;
put 'b3giLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2xpY2siLCJuZ01vZGVsIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1ibG9jayIsIm1yLTEwIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImJ0bi1hdXRvZGVwbG95IiwiYnRu'@;
put 'IiwiYnRuLXByaW1hcnkiLCJkLWlubGluZS1ibG9jayIsIm1yLTEwIiwzLCJjbGljayJdLFsidHlwZSIsImZpbGUiLCJoaWRkZW4iLCIiLDMsImNsaWNrIiwiY2hhbmdlIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9k'@;
put 'YWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJhdXRvLWRlcGxveSJdLFsxLCJzcGlubmVyLWJveCJdLFs0LCJuZ0lmIl0sWzEsInNwaW5uZXIi'@;
put 'LCJzcGlubmVyLW1kIl0sWzEsIm0tMCIsImFsaWduLXNlbGYtc3RhcnQiXSxbMSwidy0xMDAiXSxbMSwiZGVwbG95LXN0YXR1cy1yb3ciXSxbImNsYXNzIiwiZGVwbG95LXN1Y2Nlc3MiLCJzaGFwZSIsInN1Y2Nlc3Mtc3RhbmRhcmQiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGVwbG95LWVycm9y'@;
put 'Iiwic2hhcGUiLCJ0aW1lcy1jaXJjbGUiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGVwbG95LXN0YXR1cy1yb3ciLDQsIm5nSWYiXSxbMSwiYnV0dG9ucyJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTE1IiwibXItMCIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGlu'@;
put 'ZSIsIm10LTE1IiwibXItMCIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTE1IiwibXItMCIsImFsaWduLXNlbGYtZW5kIiwzLCJjbGljayJdLFsic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiwxLCJkZXBsb3ktc3VjY2VzcyJdLFsic2hhcGUiLCJ0aW1l'@;
put 'cy1jaXJjbGUiLDEsImRlcGxveS1lcnJvciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO210KDAsTyRlLDQsMiwiZGl2IiwxKSxkZSgxLCJoNCIsMiksTGUoMiwiVml5YSBEZXBsb3kiKSxoZSgpLEd0KDMsImhyIiksZGUoNCwibGFiZWwiLDMpLExlKDUs'@;
put 'IkFwcCBMb2MiKSxoZSgpLGRlKDYsImRpdiIsNCkoNywiZGl2Iiw1KSg4LCJwIiw2KSxMZSg5KSxoZSgpKCkoKSxkZSgxMCwibGFiZWwiLDMpLExlKDExLCJEQyBMb2MiKSxoZSgpLGRlKDEyLCJkaXYiLDQpKDEzLCJkaXYiLDUpKDE0LCJwIiw2KSxMZSgxNSksaGUoKSgpKCksZGUoMTYsImxh'@;
put 'YmVsIiwzKSxMZSgxNywiU0FTIEFkbWluIGdyb3VwIiksaGUoKSxkZSgxOCwiZGl2Iiw0KSgxOSwiZGl2Iiw1KSgyMCwicCIsNiksTGUoMjEpLGhlKCkoKSgpLGRlKDIyLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIzLCJpbnB1dCIsNyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0p'@;
put 'e3JldHVybiB3dChmKSxiaShoLnJlY3JlYXRlRGF0YWJhc2UsTSl8fChoLnJlY3JlYXRlRGF0YWJhc2U9TSksQ3QoTSl9KSxGdCgiY2xpY2siLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLnJlY3JlYXRlRGF0YWJhc2VDbGlja2VkKE0pKX0pLGhlKCksZGUoMjQsImxhYmVsIiksTGUo'@;
put 'MjUsIlJlY3JlYXRlIGRhdGFiYXNlIiksaGUoKSgpLEd0KDI2LCJociIpLGRlKDI3LCJidXR0b24iLDgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5leGVjdXRlSnNvbigpKX0pLExlKDI4KSxoZSgpLGRlKDI5LCJidXR0b24iLDkpLEZ0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gd3QoZiksQ3Qodm8oMzIpLmNsaWNrKCkpfSksTGUoMzAsIiBVcGxvYWQgZGlmZmVyZW50IGZpbGUgdG8gZGVwbG95XG4iKSxoZSgpLGRlKDMxLCJpbnB1dCIsMTAsMCksRnQoImNsaWNrIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5jbGVhclVwbG9hZElucHV0'@;
put 'KE0pKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSnNvbkZpbGVDaGFuZ2UoTSkpfSksaGUoKSxkZSgzMywiY2xyLW1vZGFsIiwxMSksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGJpKGgucmVjcmVhdGVEYXRhYmFz'@;
put 'ZU1vZGFsLE0pfHwoaC5yZWNyZWF0ZURhdGFiYXNlTW9kYWw9TSksQ3QoTSl9KSxkZSgzNCwiaDMiLDEyKSxMZSgzNSwiV2FybmluZyIpLGhlKCksZGUoMzYsImRpdiIsMTMpLExlKDM3LCIgVGhpcyBhY3Rpb24gd2lsbCByZWNyZWF0ZSB0aGUgZGF0YWJhc2UgKGlmIGl0IGV4aXN0cykuIEZv'@;
put 'ciBhbiBpbml0aWFsIGRlcGxveW1lbnQsIHRoaXMgaXMgZXhwZWN0ZWQuIElmIHRoaXMgaXMgYSByZS1kZXBsb3ltZW50LCB5b3Ugd2lsbCBsb3NlIGFueSBleGlzdGluZyB0YWJsZXMgaW4gIiksZGUoMzgsInN0cm9uZyIpLExlKDM5KSxoZSgpLExlKDQwLCIuICIpLGhlKCksZGUoNDEsImRp'@;
put 'diIsMTQpKDQyLCJidXR0b24iLDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLEN0KGgucmVjcmVhdGVEYXRhYmFzZT0hMSl9KSxMZSg0MywiIENhbmNlbCAiKSxoZSgpLGRlKDQ0LCJidXR0b24iLDE1KSxGdCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLEN0KGgucmVjcmVhdGVEYXRhYmFzZT0hMCl9KSxMZSg0NSwiIE9rICIpLGhlKCkoKSgpfTImZCYmKHhlKCJuZ0lmIixoLmF1dG9kZXBsb3lpbmcpLGZlKDkpLHdyKGguYXBwTG9jKSxmZSg2KSx3ciho'@;
put 'LmRjUGF0aCksZmUoNiksd3IoaC5zZWxlY3RlZEFkbWluR3JvdXApLGZlKDIpLHBpKCJuZ01vZGVsIixoLnJlY3JlYXRlRGF0YWJhc2UpLGZlKDQpLHhlKCJkaXNhYmxlZCIsIWguanNvbkZpbGUpLGZlKCksSXIoIiBEZXBsb3kgIixoLmpzb25GaWxlPyIiOiIoanNvbiBmaWxlIGlzIG5vdCBh'@;
put 'dmFpbGFibGUpIiwiXG4iKSxmZSg1KSxwaSgiY2xyTW9kYWxPcGVuIixoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbCkseGUoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSx3cihoLmRjUGF0aCkpfSxkZXBlbmRlbmNpZXM6W3lvLEIxLG5sLEdzLEZsLG91LCR1LGRzLFcxLElkXSxzdHlsZXM6'@;
put 'WyIuYXV0by1kZXBsb3lbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2JhY2tncm91bmQ6IzAwMDY7ei1pbmRleDoxMDB9LnNwaW5uZXItYm94W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXt3aWR0aDo0MDBweDtwYWRkaW5nOjIwcHg7Ym9yZGVyLXJhZGl1czozcHg7YmFja2dyb3VuZDojZmZmO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Ym94LXNoYWRvdzoxcHggMXB4IDhw'@;
put 'eCAjMDAwMDAwODJ9LnNwaW5uZXItYm94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5idXR0b25zW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47d2lkdGg6MTAwJX0uZGVwbG95LXN0YXR1cy1yb3dbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5kZXBsb3ktc3RhdHVzLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAwIDAgMTBweH0uZGVwbG95LXN1Y2Nlc3NbX25nY29udGVudC0lQ09N'@;
put 'UCVde2NvbG9yOiM2ZWNmNDR9LmRlcGxveS1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2U3NGMzY30uZGVwbG95LXVuZGV0ZXJtaW5hdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojY2FjYWNhfWhyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MDtib3JkZXItYm90dG9t'@;
put 'OjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yNzA1ODgyMzUzKX0iXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgcUc9KCk9Pih7c3RhbmRhbG9uZTohMH0pO2Z1bmN0aW9uIEYkZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNikoMSwicCIsNyksTGUoMiwiUGxlYXNlIGxvZyBpbiBmaXJzdCIpLGhlKCks'@;
put 'ZGUoMywibGFiZWwiLDgpLExlKDQsIlVzZXJuYW1lIiksaGUoKSxkZSg1LCJkaXYiLDkpKDYsImRpdiIsMTApLEd0KDcsImlucHV0IiwxMSksaGUoKSgpLGRlKDgsImxhYmVsIiwxMiksTGUoOSwiUGFzc3dvcmQiKSxoZSgpLGRlKDEwLCJkaXYiLDkpKDExLCJkaXYiLDEwKSxHdCgxMiwiaW5w'@;
put 'dXQiLDEzKSxoZSgpKCksZGUoMTMsImJ1dHRvbiIsMTQpLExlKDE0LCJMb2cgaW4iKSxoZSgpKCkpfWZ1bmN0aW9uIEgkZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMzYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgidmFsdWUiLGEuaWQpLGZlKCksSXIo'@;
put 'IiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBOJGUoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCksSXIoIiggIixhLmF0dHJpYnV0ZXMuc3lzVXNlcklkLCIgKSIpfX1mdW5jdGlvbiBWJGUoYyxsKXtpZigxJmMm'@;
put 'JihkZSgwLCJvcHRpb24iLDM2KSxMZSgxKSxtdCgyLE4kZSwyLDEsInNwYW4iLDUpLFFzKDMsImpzb24iKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInZhbHVlIixhLm5hbWUpLGZlKCksSXIoIiAiLGEubmFtZSwiICIpLGZlKCkseGUoIm5nSWYiLCJ7fSIhPURjKDMsMyxh'@;
put 'LmF0dHJpYnV0ZXMpKX19ZnVuY3Rpb24gQiRlKGMsbCl7MSZjJiYoZGUoMCwic3BhbiIpLExlKDEsIkpTT04gU3VibWl0dGVkIFN1Y2Nlc3NmdWxseSIpLGhlKCkpfWZ1bmN0aW9uIGokZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMzcpLEZ0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpKX0pLEd0KDEsImNsci1pY29uIiwzOCksaGUoKX19ZnVuY3Rpb24geiRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwicCIsMzkpLExlKDIsIkZpbGUgZXhlY3V0ZSBjb21w'@;
put 'bGV0ZWQiKSxoZSgpLEd0KDMsImhyIiksZGUoNCwiZGl2IikoNSwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGguam9iTG9nLCJleGVjdXRlLXNjcmlwdC1sb2ciLCJ0eHQiKSl9KSxMZSg2LCIg'@;
put 'RG93bmxvYWQgbG9nICIpLGhlKCkoKSx1aSgpfX1mdW5jdGlvbiBVJGUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxJcigiICIsYS5tYWtlRGF0YVJlc3BvbnNlLCIgIil9fWZ1bmN0aW9uIFokZShjLGwpezEmYyYmKGNp'@;
put 'KDApLGRlKDEsInNwYW4iLDI1KSxMZSgyLCIgVmFsaWRhdGluZyBkZXBsb3kuLi4gIiksaGUoKSxkZSgzLCJzcGFuIiksTGUoNCwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLGhlKCksdWkoKSl9ZnVuY3Rpb24gVyRlKGMsbCl7MSZjJiYoY2koMCksR3QoMSwiY2xyLWljb24iLDQ2KSxkZSgy'@;
put 'LCJzcGFuIiksTGUoMywiIFZhbGlkYXRpb24gZmFpbGVkICIpLGhlKCksdWkoKSl9ZnVuY3Rpb24gWSRlKGMsbCl7MSZjJiYoY2koMCksR3QoMSwiY2xyLWljb24iLDQ3KSxkZSgyLCJzcGFuIiksTGUoMywiIFZhbGlkYXRpb24gc3VjY2VlZGVkICIpLGhlKCksdWkoKSl9ZnVuY3Rpb24gRyRl'@;
put 'KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0NSksbXQoMSxaJGUsNSwwLCJuZy1jb250YWluZXIiLDUpKDIsVyRlLDQsMCwibmctY29udGFpbmVyIiw1KSgzLFkkZSw0LDAsIm5nLWNvbnRhaW5lciIsNSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUoIm5nSWYiLGEuaXNWYWxp'@;
put 'ZGF0aW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJlcnJvciI9PT1hLnZhbGlkYXRpb25TdGF0ZSksZmUoKSx4ZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYic3VjY2VzcyI9PT1hLnZhbGlkYXRpb25TdGF0ZSl9fWZ1bmN0aW9uICQkZShjLGwpe2lmKDEmYyl7Y29uc3Qg'@;
put 'YT1MbigpO2NpKDApLGRlKDEsInAiLDM5KSxMZSgyLCJDcmVhdGUgRGF0YWJhc2UgQ29tcGxldGVkIiksaGUoKSxHdCgzLCJociIpLG10KDQsVSRlLDIsMSwiZGl2Iiw0MSksZGUoNSwiYnV0dG9uIiw0MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5uYXZp'@;
put 'Z2F0ZVRvSG9tZSgpKX0pLExlKDYsIiBMZXQncyBnZXQgc3RhcnRlZCAiKSxoZSgpLGRlKDcsImJ1dHRvbiIsNDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRh'@;
put 'YmFzZS1sb2ciLCJ0eHQiKSl9KSxMZSg4LCIgRG93bmxvYWQgbG9nICIpLGhlKCksZGUoOSwiYnV0dG9uIiw0MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS52YWxpZGF0ZURlcGxveSgpKX0pLExlKDEwLCIgVmFsaWRhdGUgIiksaGUoKSxtdCgxMSxHJGUs'@;
put 'NCwzLCJkaXYiLDQzKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg0KSx4ZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKSxmZSg3KSx4ZSgibmdJZiIsIm5vbmUiIT09YS52YWxpZGF0aW9uU3RhdGV8fGEuaXNWYWxpZGF0aW5nKX19ZnVuY3Rpb24gSyRlKGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiZm9ybSIpKDIsImRpdiIsMTUpKDMsImxhYmVsIiwxNiksTGUoNCwiQWRtaW4gZ3JvdXAiKSxoZSgpLGRlKDUsImRpdiIsMTcpKDYsImRpdiIsMTgpKDcsInNlbGVjdCIsMTkpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3'@;
put 'dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGJpKGYuc2VsZWN0ZWRBZG1pbkdyb3VwLGgpfHwoZi5zZWxlY3RlZEFkbWluR3JvdXA9aCksQ3QoaCl9KSxtdCg4LEgkZSwyLDIsIm9wdGlvbiIsMjApLGhlKCkoKSgpKCksZGUoOSwiZGl2IiwxNSkoMTAsImRpdiIpKDExLCJsYWJlbCIsMTYpLExl'@;
put 'KDEyLCJDb250ZXh0IiksaGUoKSxkZSgxMywiZGl2IiwxNykoMTQsImRpdiIsMTgpKDE1LCJzZWxlY3QiLDIxKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBiaShmLnNlbGVjdGVkQ29udGV4dCxoKXx8KGYuc2VsZWN0ZWRDb250ZXh0'@;
put 'PWgpLEN0KGgpfSksbXQoMTYsViRlLDQsNSwib3B0aW9uIiwyMCksaGUoKSgpKCksZGUoMTcsImJ1dHRvbiIsMjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5leGVjdXRhYmxlQ29udGV4dCgpKX0pLEd0KDE4LCJjbHItaWNvbiIsMjMpLGhlKCkoKSxkZSgx'@;
put 'OSwiZGl2IiwyNCkoMjAsInNwYW4iLDI1KSxMZSgyMSwiIExvYWRpbmcgY29udGV4dHMuLi4gIiksaGUoKSxkZSgyMiwic3BhbiIpLExlKDIzLCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSxoZSgpKCksZGUoMjQsImxhYmVsIiwyNiksTGUoMjUsIkRDIExvYyIpLGhlKCksZGUoMjYsImRpdiIs'@;
put 'OSkoMjcsImRpdiIsMTApKDI4LCJpbnB1dCIsMjcpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGJpKGYuZGNQYXRoLGgpfHwoZi5kY1BhdGg9aCksQ3QoaCl9KSxGdCgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0'@;
put 'KE9lKCkuc2F2ZURjUGF0aCgpKX0pLGhlKCkoKSgpLGRlKDI5LCJwIiwyOCksTGUoMzAsIiBTZWxlY3QgSlNPTiBmaWxlIHRvIHVwbG9hZCAoanNvbiBidWlsZCBmaWxlIHByZWxvYWRlZCk6ICIpLGhlKCksZGUoMzEsImRpdiIsMjkpKDMyLCJpbnB1dCIsMzApLEZ0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9KSgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkpzb25GaWxlQ2hhbmdlKGgpKX0pLGhlKCkoKSxkZSgzMywiZGl2IiwzMSkoMzQsImJ1dHRvbiIsMzIpLEZ0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5leGVjdXRlSnNvbigpKX0pLExlKDM1LCIgU1VCTUlUIEpTT04gIiksaGUoKSxtdCgzNixCJGUsMiwwLCJzcGFuIiw1KSxoZSgpLGRlKDM3LCJwIiwyOCksTGUoMzgsIlNlbGVjdCBTQVMgZmlsZSB0byB1cGxvYWQ6IiksaGUoKSxkZSgz'@;
put 'OSwiZGl2IiwyOSkoNDAsImlucHV0IiwzMCksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5jbGVhclVwbG9hZElucHV0KGgpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gZi5vblNhc0ZpbGVDaGFuZ2UoaCksQ3Qo'@;
put 'Zi5kb3dubG9hZEZpbGVCdG49ITApfSksaGUoKSxtdCg0MSxqJGUsMiwwLCJidXR0b24iLDMzKSxoZSgpLGRlKDQyLCJkaXYiLDMxKSg0MywiYnV0dG9uIiwzNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmV4ZWN1dGVTQVMoKSl9KSxMZSg0NCwiIFNVQk1J'@;
put 'VCAiKSxoZSgpKCkoKSxtdCg0NSx6JGUsNywwLCJuZy1jb250YWluZXIiLDUpLGRlKDQ2LCJidXR0b24iLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuY3JlYXRlRGF0YWJhc2UoKSl9KSxMZSg0NywiIENyZWF0ZSBEYXRhYmFzZSAiKSxoZSgpLG10KDQ4'@;
put 'LCQkZSwxMiwyLCJuZy1jb250YWluZXIiLDUpLGhlKCksdWkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSg3KSxwaSgibmdNb2RlbCIsYS5zZWxlY3RlZEFkbWluR3JvdXApLHhlKCJuZ01vZGVsT3B0aW9ucyIsWXMoMTkscUcpKSxmZSgpLHhlKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBzKSxm'@;
put 'ZSgyKSxUcigiaGlkZGVuIixhLmNvbnRleHRzTG9hZGluZyksZmUoNSkscGkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRDb250ZXh0KSx4ZSgibmdNb2RlbE9wdGlvbnMiLFlzKDIwLHFHKSksZmUoKSx4ZSgibmdGb3JPZiIsYS5hbGxDb250ZXh0cyksZmUoMyksVHIoImhpZGRlbiIsIWEuY29udGV4'@;
put 'dHNMb2FkaW5nKSxmZSg5KSxwaSgibmdNb2RlbCIsYS5kY1BhdGgpLHhlKCJuZ01vZGVsT3B0aW9ucyIsWXMoMjEscUcpKSxmZSg2KSx4ZSgiY2xyTG9hZGluZyIsYS5pc1N1Ym1pdHRpbmdKc29uKSxmZSgyKSx4ZSgibmdJZiIsYS5pc0pzb25TdWJtaXR0ZWQpLGZlKDUpLHhlKCJuZ0lmIixh'@;
put 'LmRvd25sb2FkRmlsZUJ0biksZmUoMikseGUoImNsckxvYWRpbmciLGEuZXhlY3V0aW5nU2NyaXB0KSxmZSgyKSx4ZSgibmdJZiIsYS5qb2JMb2cubGVuZ3RoPjApLGZlKCkseGUoImNsckxvYWRpbmciLGEuY3JlYXRlRGF0YWJhc2VMb2FkaW5nKSxmZSgyKSx4ZSgibmdJZiIsYS5tYWtlRGF0'@;
put 'YVJlc3BvbnNlLmxlbmd0aD4wKX19bGV0IHEkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5kZXBsb3lTZXJ2aWNlPWYsdGhpcy5zYXNKc0NvbmZpZz1uZXcg'@;
put 'dmguU0FTanNDb25maWcsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBYcix0aGlzLm5lZWRzTG9naW49ITEsdGhpcy5hZG1pbkdyb3Vwcz1bXSx0aGlzLmFsbENvbnRleHRzPVtdLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMu'@;
put 'c2VsZWN0ZWRDb250ZXh0PSIiLHRoaXMuam9iTG9nPSIiLHRoaXMubWFrZURhdGFSZXNwb25zZT0iIix0aGlzLmxpbmVzT2ZDb2RlPVtdLHRoaXMuZmlsZU5hbWU9IiIsdGhpcy5wcmVsb2FkZWRGaWxlPSEwLHRoaXMuZXhlY3V0ZVNBU0VuYWJsZWQ9ITEsdGhpcy5jb250ZXh0c0xvYWRpbmc9'@;
put 'ITEsdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5leGVjdXRpbmdTY3JpcHQ9ITEsdGhpcy5kb3dubG9hZEZpbGVCdG49ITEsdGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1pdHRl'@;
put 'ZD0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0ibm9uZSJ9bmdPbkluaXQoKXt9ZXhlY3V0YWJsZUNvbnRleHQoKXtyZXR1cm4gZWUoZnVuY3Rpb24qKCl7fSkoKX1jbGVhclVwbG9hZElucHV0KGEpe3RoaXMuZGVwbG95U2VydmljZS5jbGVhclVwbG9hZElucHV0KGEpfW9uU2FzRmlsZUNoYW5n'@;
put 'ZShhKXt0aGlzLnByZWxvYWRlZEZpbGU9ITE7bGV0IGQ9YS50YXJnZXQuZmlsZXNbMF07dGhpcy5maWxlTmFtZT1kLm5hbWU7bGV0IGg9bmV3IEZpbGVSZWFkZXI7aC5vbmxvYWQ9KCk9PntoLnJlc3VsdCYmKHRoaXMubGluZXNPZkNvZGU9aC5yZXN1bHQuc3BsaXQoIlxuIiksdGhpcy5saW5l'@;
put 'c09mQ29kZT10aGlzLmxpbmVzT2ZDb2RlLmZpbHRlcihmPT4iIiE9PWYmJm51bGwhPT1mKSx0aGlzLmV4ZWN1dGVTQVNFbmFibGVkPSEwLHRoaXMuYWRkUHJlY29kZUxpbmVzKCkpfSxoLnJlYWRBc1RleHQoZCl9b25Kc29uRmlsZUNoYW5nZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5j'@;
put 'dGlvbiooKXtsZXQgaD1hLnRhcmdldC5maWxlc1swXTtkLmpzb25GaWxlPXlpZWxkIGQuZGVwbG95U2VydmljZS5yZWFkRmlsZShoKX0pKCl9YWRkUHJlY29kZUxpbmVzKCl7dGhpcy5saW5lc09mQ29kZS51bnNoaWZ0KGAlbGV0IGNvbnRleHQ9JHt0aGlzLnNlbGVjdGVkQ29udGV4dH07YCxg'@;
put 'JWxldCBhcHBMb2M9JHt0aGlzLmFwcExvY307YCxgJWxldCBhZG1pbj0ke3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwfTtgLGAlbGV0IGRjcGF0aD0ke3RoaXMuZGNQYXRofTtgKX1kb3dubG9hZFNhc1ByZWNvZGVGaWxlKCl7bGV0IGE9dGhpcy5saW5lc09mQ29kZS5qb2luKCJcbiIpLGQ9dGhp'@;
put 'cy5maWxlTmFtZS5zcGxpdCgiLiIpWzBdO3RoaXMuZG93bmxvYWRGaWxlKGEsZCwic2FzIil9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGEsZCxoKX1zYXZlRGNQYXRoKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImRlcGxveV9kY19s'@;
put 'b2MiLHRoaXMuZGNQYXRoKX1leGVjdXRlSnNvbigpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIs'@;
put 'dm9pZCAwLHZvaWQgMCwhMCksYS5pc0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgvXFwvZ20sIiIpOmQubWVzc2FnZSx2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dJ'@;
put 'bmZvTW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9PWg/aDpkfWApfWEuaXNTdWJtaXR0aW5nSnNvbj0hMX0pKCl9ZXhlY3V0ZVNBUygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuZXhlY3V0aW5nU2NyaXB0PSEwLGEuam9iTG9nPSIiLGEubWFr'@;
put 'ZURhdGFSZXNwb25zZT0iIjt0cnl7bGV0IGQ9eWllbGQgYS5zYXNKcy5leGVjdXRlU2NyaXB0KHtmaWxlTmFtZTphLmZpbGVOYW1lLGxpbmVzT2ZDb2RlOmEubGluZXNPZkNvZGUsY29udGV4dE5hbWU6YS5zZWxlY3RlZENvbnRleHR9KTthLmxvZ2dlclNlcnZpY2UubG9nKGQpLCJzdHJpbmci'@;
put 'PT10eXBlb2YgZC5sb2cmJihkLmxvZz1KU09OLnBhcnNlKGQubG9nKSksImVycm9yIj09PWQuam9iU3RhdHVzP2FsZXJ0KCJFcnJvciEiKTphLmpvYkxvZz1kLmxvZy5pdGVtcz9kLmxvZy5pdGVtcy5tYXAoaD0+aC5saW5lKS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KGQubG9nKSxhLmV4'@;
put 'ZWN1dGluZ1NjcmlwdD0hMX1jYXRjaHthLmV4ZWN1dGluZ1NjcmlwdD0hMX19KSgpfWNyZWF0ZURhdGFiYXNlKGE9ITApe2lmKGEpe2xldCBmPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLnNlcnZlclVybCsiL1NBU0pvYkV4ZWN1dGlvbi8/X3Byb2dyYW09Iit0aGlzLmRjQWRh'@;
put 'cHRlclNldHRpbmdzPy5hcHBMb2N8fCIvYWRtaW4vbWFrZWRhdGEmQURNSU49Iit0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCsiJkRDUEFUSD0iK3RoaXMuZGNQYXRoKyImX2RlYnVnPTEzMSI7d2luZG93Lm9wZW4oZiwiX2JsYW5rIil9ZWxzZSB0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0h'@;
put 'MCx0aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIix7ZnJvbWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHt1c2VDb21wdXRlQXBpOiExLGNvbnRleHROYW1lOnRoaXMuc2FzSnNDb25maWcuY29udGV4dE5h'@;
put 'bWUsZGVidWc6ITB9LCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihmPT57dHJ5e3RoaXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn10aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGlu'@;
put 'Zz0hMX0pLmNhdGNoKGY9Pnt0aGlzLmNyZWF0ZURhdGFiYXNlTG9hZGluZz0hMTt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1mfX0pfW5hdmlnYXRlVG9Ib21lKCl7dGhpcy5vbk5hdmlnYXRlVG9Ib21lLmVt'@;
put 'aXQoKX12YWxpZGF0ZURlcGxveSgpe3RoaXMuaXNWYWxpZGF0aW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvc3RhcnR1cHNlcnZpY2UiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9nZ2VyU2VydmljZS5sb2coYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMudmFsaWRhdGlvblN0'@;
put 'YXRlPWEuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnM/InN1Y2Nlc3MiOiJlcnJvciIsdGhpcy5pc1ZhbGlkYXRpbmc9ITF9KS5jYXRjaChhPT57dGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9ImVycm9yIn0pfWRlbGV0ZUtleXMoKXtsb2NhbFN0b3JhZ2UucmVtb3Zl'@;
put 'SXRlbSgiZGVwbG95X2RjX2xvYyIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHRsKSxHZSh2YyksR2UoTWQpLEdlKFpoZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1hbnVhbC1kZXBs'@;
put 'b3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjksdmFyczozLGNvbnN0czpbWzEs'@;
put 'ImNhcmQtaGVhZGVyIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZC1pbmxpbmUtYmxvY2siLCJtbC0xMCIsIm1iLTEwIiwibXQtMCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImNsZWFyLW1lbW9yeS1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIsMywiY2xpY2siXSxbMSwiY2FyZC1i'@;
put 'bG9jayJdLFsiaWQiLCJsb2dpbkZvcm0iLCJjbGFzcyIsImQtbm9uZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJpZCIsImxvZ2luRm9ybSIsMSwiZC1ub25lIl0sWzEsIm1iLTEwIl0sWyJmb3IiLCJ1c2VybmFtZSIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHItY29u'@;
put 'dHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbInR5cGUiLCJ0ZXh0IiwiaWQiLCJ1c2VybmFtZSIsMSwiY2xyLWlucHV0Il0sWyJmb3IiLCJwYXNzd29yZCIsMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbInR5cGUiLCJwYXNzd29yZCIsImlkIiwicGFzc3dvcmQiLDEs'@;
put 'ImNsci1pbnB1dCJdLFsiaWQiLCJsb2dpbkJ0biIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJkLW5vbmUiXSxbMSwiY2xyLWZvcm0tY29udHJvbCJdLFsiZm9yIiwic2VsZWN0LWZ1bGwiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHIt'@;
put 'c2VsZWN0LXdyYXBwZXIiXSxbIm5hbWUiLCJzZWxlY3RlZEFkbWluR3JvdXAiLCJpZCIsImFkbWluR3JvdXBzU2VsZWN0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb'@;
put 'Im5hbWUiLCJzZWxlY3RlZENvbnRleHQiLDEsImNsci1zZWxlY3QiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsImNvbnRleHRzLWJ0biIsMSwiYnRuIiwiYnRuLWljb24iLDMsImNsaWNrIl0sWyJzaGFwZSIsInBs'@;
put 'YXkiXSxbMSwiZC1mbGV4Il0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSIsIm1yLTEwIl0sWyJmb3IiLCJkY2xvYyIsMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsibmFtZSIsImRjUGF0aCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJkY2xvYyIsMSwiY2xyLWlucHV0IiwzLCJu'@;
put 'Z01vZGVsQ2hhbmdlIiwiZm9jdXNvdXQiLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiXSxbMSwibXQtMTAiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbInR5cGUiLCJmaWxlIiwzLCJjbGljayIsImNoYW5nZSJdLFsxLCJtdC0yMCIsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRl'@;
put 'ciJdLFsiaWQiLCIiLDEsIm10LTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1pY29uIG1pbi13LTAgdy00MCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImlkIiwiZGVwbG95IiwxLCJtdC0wIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwiYnRu'@;
put 'IiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzMsInZhbHVlIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwibWluLXctMCIsInctNDAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsIm1iLTAiLCJtdC0xMCJdLFsxLCJidG4i'@;
put 'LCJidG4tcHJpbWFyeSIsIm10LTAiLCJtci0yMCIsMywiY2xpY2siXSxbImNsYXNzIiwibG9nLXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsMywiY2xpY2siXSxbImNsYXNzIiwidmFsaWRhdGlvbi1iYXIiLDQsIm5nSWYiXSxbMSwibG9nLXdyYXBw'@;
put 'ZXIiXSxbMSwidmFsaWRhdGlvbi1iYXIiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJpcy1lcnJvciJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLDEsImlzLXN1Y2Nlc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApLExlKDEsIiBDb25m'@;
put 'aWd1cmF0b3IgIiksZGUoMiwicCIsMSksTGUoMyksaGUoKSxkZSg0LCJidXR0b24iLDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5kZWxldGVLZXlzKCl9KSxMZSg1LCIgQ2xlYXIgbWVtb3J5ICIpLGhlKCkoKSxkZSg2LCJkaXYiLDMpLG10KDcsRiRlLDE1LDAsImRpdiIsNCko'@;
put 'OCxLJGUsNDksMjIsIm5nLWNvbnRhaW5lciIsNSksaGUoKSksMiZkJiYoZmUoMyksSXIoIkFwcCBMb2NhdGlvbjogIixoLmFwcExvYywiIiksZmUoNCkseGUoIm5nSWYiLGgubmVlZHNMb2dpbiksZmUoKSx4ZSgibmdJZiIsIWgubmVlZHNMb2dpbikpfSxkZXBlbmRlbmNpZXM6W2xzLHlvLGE3'@;
put 'LFlmLEdmLGVjLFdmLG5sLGk3LEdzLHlwLEZsLFYwLFIyLGRzLFFVXSxzdHlsZXM6WyIuY2xlYXItbWVtb3J5LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17cmlnaHQ6MTBweDt0b3A6MnB4fSJdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBYJGUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE1'@;
put 'KSxHdCgxLCJwcm9ncmVzcyIpLGhlKCkpfWZ1bmN0aW9uIEokZShjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMTYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgidmFsdWUiLGEuR1JPVVBOQU1FKSxmZSgpLGp1KCIgIixhLkdST1VQTkFNRSwiIC0gIixhLkdS'@;
put 'T1VQREVTQywiICIpfX1sZXQgUSRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuc2FzanNTZXJ2aWNlPWQsdGhpcy5sb2NhdGlvbj1oLHRoaXMuc2FzSnNDb25maWc9bmV3IHZoLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9t'@;
put 'ZT1uZXcgWHIsdGhpcy5kY0RpcmVjdG9yeT0iIix0aGlzLmRjQWRtaW5Hcm91cD0iRENERUZBVUxUIix0aGlzLk1FVEFQRVJTT049Im4vYSIsdGhpcy5NRVRBVVNFUj0ibi9hIix0aGlzLlNZU1VTRVJJRD0ibi9hIix0aGlzLlNZU0hPU1ROQU1FPSJuL2EiLHRoaXMuU1lTVkxPTkc9Im4vYSIs'@;
put 'dGhpcy5kY0FkbWluR3JvdXBMaXN0PVtdLHRoaXMubG9hZGluZz0hMSx0aGlzLnNob3dMb2dvdXQ9ITEsdGhpcy50bXBEaXJlY3Rvcmllcz17bGludXg6Ii90bXAvRGF0YUNvbnRyb2xsZXIiLHdpbmRvd3M6IkM6XFxEYXRhQ29udHJvbGxlciJ9fW5nT25Jbml0KCl7dGhpcy5nZXRVc2VyR3Jv'@;
put 'dXBzKCksdGhpcy5nZXRTZXJ2ZXJJbmZvKCl9Z2V0U2VydmVySW5mbygpe3RoaXMuc2FzanNTZXJ2aWNlLmdldFNlcnZlckluZm8oKS5zdWJzY3JpYmUoYT0+eyJkZXNrdG9wIiE9PWEubW9kZSYmKHRoaXMuc2hvd0xvZ291dD0hMCl9KX1nZXRVc2VyR3JvdXBzKCl7dGhpcy5sb2FkaW5nPSEw'@;
put 'LHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIsbnVsbCkudGhlbihhPT57dGhpcy5NRVRBUEVSU09OPWEuYWRhcHRlclJlc3BvbnNlLk1GX0dFVFVTRVIsdGhpcy5TWVNVU0VSSUQ9YS5hZGFwdGVyUmVzcG9uc2UuU1lTVVNFUklELHRoaXMuU1lT'@;
put 'SE9TVE5BTUU9YS5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVE5BTUUsdGhpcy5TWVNWTE9ORz1hLmFkYXB0ZXJSZXNwb25zZS5TWVNWTE9ORyx0aGlzLmRjRGlyZWN0b3J5PXRoaXMudG1wRGlyZWN0b3JpZXNbWyJMIiwiSCIsIkEiLCJTIl0uaW5jbHVkZXMoYS5hZGFwdGVyUmVzcG9uc2UuU1lT'@;
put 'U0NQTC5zdWJzdHJpbmcoMCwxKSk/ImxpbnV4Ijoid2luZG93cyJdLHRoaXMuZGNBZG1pbkdyb3VwTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsdGhpcy5kY0FkbWluR3JvdXA9dGhpcy5kY0FkbWluR3JvdXBMaXN0WzBdLkdST1VQTkFNRSx0aGlzLmxvYWRpbmc9ITF9LGE9Pnt0aGlz'@;
put 'LmxvYWRpbmc9ITF9KX1tYWtlRGF0YSgpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7Y29uc3QgaD10aGlzLnNhc0pzQ29uZmlnLmFwcExvYztsZXQgZj10aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCx2PXRoaXMuZGNEaXJlY3Rvcnk7dGhpcy5zYXNKc0NvbmZp'@;
put 'Zy5zZXJ2ZXJUeXBlPT09UzAuWS5TYXNqcz90aGlzLnNhc1NlcnZpY2Uuc2FzanNNYWtlZGF0YUNoZWNraW5nKCkudGhlbihEPT57RCYmKHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvIiksbG9jYXRpb24ucmVsb2FkKCkpfSk6dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09UzAu'@;
put 'WS5TYXM5JiYoZj0iIixkPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rZCsiLyIsdj1lbmNvZGVVUklDb21wb25lbnQodGhpcy5kY0RpcmVjdG9yeSkpLHdpbmRvdy5vcGVuKGAke2Z8fCIifSR7ZH0/X3Byb2dyYW09JHtofS9zZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSZhZG1pbj0ke3RoaXMuZGNB'@;
put 'ZG1pbkdyb3VwfSZwYXRoPSR7dn0gYCwiX2JsYW5rIil9bG9nb3V0KCl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHRsKSxHZShIY2UpLEdlKHBoKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1W'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2FzanMtY29uZmlndXJhdG9yIl1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9u'@;
put 'TmF2aWdhdGVUb0hvbWUifSxkZWNsczo0NCx2YXJzOjEwLGNvbnN0czpbWyJjbGFzcyIsInRoaW5Qcm9ncmVzcyBwcm9ncmVzU3RhdGljIHByb2dyZXNzIGxvb3AiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJteS0xNSJdLFsxLCJsaWdodCJdLFsxLCJtLTAiXSxbMSwibS0wIiwibXQt'@;
put 'MTAiXSxbMSwibXQtMjAiLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJtYi0xMCIsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsicGxhY2Vob2xkZXIiLCJUeXBlIGluIGRpcmVjdG9yeSIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwi'@;
put 'bmdNb2RlbCJdLFsxLCJtYi0xMCIsIm10LTAiLCJ3LTUwdnciXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbHItZmxleCJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsIm10LTE1IiwidGV4'@;
put 'dC1jZW50ZXIiLDMsImNsaWNrIl0sWzEsImNhcmQtdGV4dCIsInBiLTEwIl0sWzEsInRoaW5Qcm9ncmVzcyIsInByb2dyZXNTdGF0aWMiLCJwcm9ncmVzcyIsImxvb3AiXSxbMywidmFsdWUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihtdCgwLFgkZSwyLDAsImRpdiIsMCksZGUo'@;
put 'MSwiaDQiLDEpLExlKDIsIlNhc2pzIERlcGxveSIpLGhlKCksR3QoMywiaHIiLDIpLGRlKDQsInAiLDMpLExlKDUsIiBUbyBjb25maWd1cmUgRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGE5LCBwbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGRldGFpbHM6XG4iKSxoZSgpLGRlKDYsInAi'@;
put 'LDQpLExlKDcsIiBQbGVhc2Ugc3BlY2lmeSBhIHBoeXNpY2FsIGRpcmVjdG9yeSAob24gdGhlICIpLGRlKDgsInN0cm9uZyIpLExlKDkpLGhlKCksTGUoMTAsIiBjb21wdXRlIHNlcnZlcikgYmVsb3csIHRvIHdoaWNoIHVzZXIgIiksZGUoMTEsInN0cm9uZyIpLExlKDEyKSxoZSgpLExlKDEz'@;
put 'LCIgY2FuIHdyaXRlLCBvbiBiZWhhbGYgb2YgRGF0YSBDb250cm9sbGVyLlxuIiksaGUoKSxkZSgxNCwibGFiZWwiLDUpLExlKDE1LCJEQyBTdGFnaW5nIERpcmVjdG9yeSIpLGhlKCksZGUoMTYsImRpdiIsNikoMTcsImRpdiIsNykoMTgsImlucHV0Iiw4KSxnaSgibmdNb2RlbENoYW5nZSIs'@;
put 'ZnVuY3Rpb24odil7cmV0dXJuIGJpKGguZGNEaXJlY3Rvcnksdil8fChoLmRjRGlyZWN0b3J5PXYpLHZ9KSxoZSgpKCkoKSxkZSgxOSwicCIsNCksTGUoMjAsIiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIHlvdSBiZWxvbmcuIFRoZSBncm91cCB5b3Ugc2VsZWN0IHdp'@;
put 'bGwgYmVjb21lIHRoZSBEYXRhIENvbnRyb2xsZXIgQWRtaW4gR3JvdXAsIGFuZCBldmVyeW9uZSBpbiBpdCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBEYXRhIENvbnRyb2xsZXIuXG4iKSxoZSgpLGRlKDIxLCJsYWJlbCIsNSksTGUoMjIsIkRhdGEgQ29udHJvbGxlciBBZG1p'@;
put 'biBncm91cCIpLGhlKCksZGUoMjMsImNsci1zZWxlY3QtY29udGFpbmVyIiw5KSgyNCwic2VsZWN0IiwxMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBiaShoLmRjQWRtaW5Hcm91cCx2KXx8KGguZGNBZG1pbkdyb3VwPXYpLHZ9KSxtdCgyNSxKJGUsMiwzLCJvcHRp'@;
put 'b24iLDExKSxoZSgpKCksZGUoMjYsInAiLDQpLExlKDI3LCIgTm93LCBjcmVhdGUgdGhlIHRhcmdldCBkaXJlY3RvcnkgYW5kIGRlcGxveSB0aGUgY29udHJvbCBsaWJyYXJ5IHVzaW5nIHRoZSBhZG1pbiBncm91cCBzZWxlY3RlZCBhYm92ZTpcbiIpLGhlKCksZGUoMjgsImRpdiIsMTIpKDI5'@;
put 'LCJidXR0b24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgubWFrZURhdGEoKX0pLExlKDMwLCIgU1VCTUlUICIpLGhlKCkoKSxHdCgzMSwiaHIiLDIpLGRlKDMyLCJkaXYiLDE0KSgzMywicCIpLExlKDM0LCJZb3UgYXJlIGNvbm5lY3RlZCB3aXRoIHRoZSBmb2xsb3dpbmcg'@;
put 'Y3JlZGVudGlhbHM6IiksaGUoKSxkZSgzNSwidWwiKSgzNiwibGkiKSxMZSgzNyksaGUoKSxkZSgzOCwibGkiKSxMZSgzOSksaGUoKSxkZSg0MCwibGkiKSxMZSg0MSksaGUoKSxkZSg0MiwibGkiKSxMZSg0MyksaGUoKSgpKCkpLDImZCYmKHhlKCJuZ0lmIixoLmxvYWRpbmcpLGZlKDkpLEly'@;
put 'KCIgIixoLlNZU0hPU1ROQU1FLCIiKSxmZSgzKSx3cihoLlNZU1VTRVJJRCksZmUoNikscGkoIm5nTW9kZWwiLGguZGNEaXJlY3RvcnkpLGZlKDYpLHBpKCJuZ01vZGVsIixoLmRjQWRtaW5Hcm91cCksZmUoKSx4ZSgibmdGb3JPZiIsaC5kY0FkbWluR3JvdXBMaXN0KSxmZSgxMiksSXIoIk1F'@;
put 'VEFQRVJTT046ICIsaC5NRVRBUEVSU09OLCIiKSxmZSgyKSxJcigiU1lTVVNFUklEOiAiLGguU1lTVVNFUklELCIiKSxmZSgyKSxJcigiU1lTSE9TVE5BTUU6ICIsaC5TWVNIT1NUTkFNRSwiIiksZmUoMiksSXIoIlNZU1ZMT05HOiAiLGguU1lTVkxPTkcsIiIpKX0sZGVwZW5kZW5jaWVzOlts'@;
put 'cyx5byxZZixHZixlYyxXZixubCxHcyxkcywkeSxHeV0sc3R5bGVzOlsiLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NTB2d30uY2xyLWlucHV0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdLCAuY2xyLWlucHV0LXdyYXBwZXJbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LnRoaW5Qcm9ncmVzc1tfbmdjb250ZW50LSVDT01QJV17bGVmdDowO3JpZ2h0OjA7d2lkdGg6dW5zZXQ7aGVpZ2h0OjFweDttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS50aGluUHJvZ3Jlc3NbX25nY29udGVudC0l'@;
put 'Q09NUCVdOmFmdGVye3RvcDowfSJdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBlS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSksTGUoMiwiVGVybXMgYW5kIENvbmRpdGlvbnMiKSxoZSgpLGRlKDMsImRpdiIsNikoNCwiZGl2Iiw3KSg1LCJw'@;
put 'IiksTGUoNiwiIFRoZSBEZW1vIHZlcnNpb24gb2YgRGF0YSBDb250cm9sbGVyIGlzIGZyZWUgZm9yIEVWQUxVQVRJT04gcHVycG9zZXMgb25seS4gQmVmb3JlIHByb2NlZWRpbmcgd2l0aCBjb25maWd1cmF0aW9uLCBwbGVhc2UgY29uZmlybSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rv'@;
put 'b2QsIGFuZCBhZ3JlZWQgdG8gdGhlICIpLGRlKDcsImEiLDgpLExlKDgsIkRhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLGhlKCksTGUoOSwiLiAiKSxoZSgpKCksR3QoMTAsImhyIiw5KSxkZSgxMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMiwi'@;
put 'aW5wdXQiLDEwKSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnRlcm1zQWdyZWVDaGFuZ2UoKSl9KSxoZSgpLGRlKDEzLCJsYWJlbCIpLExlKDE0LCJJIGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoZSAiKSxkZSgxNSwiYSIsOCksTGUo'@;
put 'MTYsIkRhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSBFdmFsdWF0aW9uIEFncmVlbWVudCIpLGhlKCkoKSgpKCkoKX19ZnVuY3Rpb24gdEtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxNSkoMSwiYXBwLWF1dG9tYXRpYy1kZXBsb3kiLDE2KSxGdCgib25OYXZpZ2F0'@;
put 'ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSx4ZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdz'@;
put 'IixhLmRjQWRhcHRlclNldHRpbmdzKSgiYXBwTG9jIixhLmFwcExvYykoImRjUGF0aCIsYS5kY1BhdGgpKCJzZWxlY3RlZEFkbWluR3JvdXAiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKX19ZnVuY3Rpb24gbktlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxNykoMSwiYXBw'@;
put 'LW1hbnVhbC1kZXBsb3kiLDE4KSxGdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSx4ZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIs'@;
put 'YS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24gcktlKGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSx0S2UsMiw2LCJkaXYiLDEzKSgyLG5LZSwyLDMsImRpdiIsMTQpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhl'@;
put 'KCJuZ0lmIixhLmF1dG9kZXBsb3kpLGZlKCkseGUoIm5nSWYiLCFhLmF1dG9kZXBsb3kpfX1mdW5jdGlvbiBpS2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJkaXYiLDE1KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOCksRnQoIm9uTmF2aWdhdGVUb0hvbWUi'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCksdWkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMikseGUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIs'@;
put 'YS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIG9LZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLGRlKDEsImRpdiIsMTUpKDIsImFwcC1zYXNqcy1jb25maWd1cmF0b3IiLDE4KSxGdCgib25OYXZpZ2F0ZVRvSG9tZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2Uo'@;
put 'Mikub25OYXZpZ2F0ZVRvSG9tZSgpKX0pLGhlKCkoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSx4ZSgic2FzSnMiLGEuc2FzSnMpKCJzYXNKc0NvbmZpZyIsYS5zYXNKc0NvbmZpZykoImRjQWRhcHRlclNldHRpbmdzIixhLmRjQWRhcHRlclNldHRpbmdzKX19ZnVuY3Rpb24g'@;
put 'YUtlKGMsbCl7aWYoMSZjJiYoY2koMCwxMSksbXQoMSxyS2UsMywyLCJuZy1jb250YWluZXIiLDEyKSgyLGlLZSwzLDMsIm5nLWNvbnRhaW5lciIsMTIpKDMsb0tlLDMsMywibmctY29udGFpbmVyIiwxMiksdWkoKSksMiZjKXtjb25zdCBhPU9lKCk7eGUoIm5nU3dpdGNoIiwhMCksZmUoKSx4'@;
put 'ZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIixhLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzanMpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNK'@;
put 'c0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgV2hlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMu'@;
put 'c3RlcD0wLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5jbGllbnRfaWQ9IiIsdGhpcy5jbGllbnRfc2VjcmV0PSIiLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMuYXV0b2RlcGxveT0hMCx0aGlzLmpzb25GaWxlPW51bGwsdGhp'@;
put 'cy5zYXNKc0NvbmZpZz1uZXcgdmguU0FTanNDb25maWcsdGhpcy5TZXJ2ZXJUeXBlPVMwLlksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygibWFudWFsZGVwbG95IikmJih0'@;
put 'aGlzLmF1dG9kZXBsb3k9ITEpLHRoaXMuc2FzSnM9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzSW5zdGFuY2UoKSx0aGlzLnNhc0pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuYXBwTG9jPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdGhp'@;
put 'cy5jbGllbnRfaWQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9jbGllbnRfaWQiKXx8IiIsdGhpcy5jbGllbnRfc2VjcmV0PWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfc2VjcmV0X2tleSIpfHwiIix0aGlzLmRjUGF0aD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X2Rj'@;
put 'X2xvYyIpfHwiIn1uZ09uSW5pdCgpe3RoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PVMwLlkuU2FzVml5YSYmZmV0Y2goInNhc2J1aWxkL3ZpeWEuanNvbiIpLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBkPW51bGw7dHJ5e2Q9SlNPTi5wYXJzZShhKX1jYXRjaChoKXtjb25z'@;
put 'b2xlLmVycm9yKGgpfWQmJih0aGlzLmpzb25GaWxlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmpzb25GaWxlKSl9KSx0aGlzLnNldERlcGxveURlZmF1bHRzKCl9c2V0RGVwbG95RGVmYXVsdHMoKXt0aGlzLmRjUGF0aD10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5kY1BhdGh8fCIi'@;
put 'LHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPXRoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFkbWluR3JvdXB8fCIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwfHwodGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IlNBU0FkbWluaXN0cmF0b3JzIil9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYXV0b2Rl'@;
put 'cGxveXx8dGhpcy5nZXRBZG1pbkdyb3VwcygpLHRoaXMuc3RlcCsrfWdldEFkbWluR3JvdXBzKCl7ZmV0Y2godGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9zb3J0Qnk9bmFtZSZsaW1pdD01MDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9q'@;
put 'c29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZDt0cnl7ZD1KU09OLnBhcnNlKGEpfWNhdGNoKGgpe2NvbnNvbGUuZXJyb3IoaCl9ZCYmKHRoaXMuYWRtaW5Hcm91cHM9ZC5pdGVtcyx0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmFkbWluR3JvdXBzWzBdLmlkKX0p'@;
put 'fW9uTmF2aWdhdGVUb0hvbWUoKXt3aW5kb3cub3Blbihsb2NhdGlvbi5ocmVmLnNwbGl0KCIjIilbMF0sIl9ibGFuayIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFg4KSxHZSh0bCksR2UoTWQpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1'@;
put 'MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGVwbG95Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJjbHItcm93Il0sWyJpZCIsIlRD'@;
put 'UyIsImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCIsNCwibmdJZiJdLFsiaWQiLCJUQ1MiLDEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayJdLFsxLCJjYXJkLXRleHQiXSxbImhyZWYiLCJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8v'@;
put 'ZXZhbHVhdGlvbi1saWNlbmNlLWFncmVlbWVudCIsInRhcmdldCIsIl9ibGFuayJdLFsxLCJsaWdodCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsImNoYW5nZSJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiYXV0b2RlcGxveS1z'@;
put 'ZWN0aW9uIGNhcmQiLDQsIm5nSWYiXSxbImlkIiwibWFpbmJvZHkiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiYXV0b2RlcGxveS1zZWN0aW9uIiwiY2FyZCJdLFszLCJvbk5hdmlnYXRlVG9Ib21lIiwic2FzSnMiLCJzYXNKc0NvbmZpZyIsImRjQWRhcHRlclNldHRpbmdzIiwiYXBw'@;
put 'TG9jIiwiZGNQYXRoIiwic2VsZWN0ZWRBZG1pbkdyb3VwIl0sWyJpZCIsIm1haW5ib2R5IiwxLCJjYXJkIl0sWzMsIm9uTmF2aWdhdGVUb0hvbWUiLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJk'@;
put 'aXYiLDApKDEsImRpdiIsMSksbXQoMixlS2UsMTcsMCwiZGl2IiwyKSxoZSgpLG10KDMsYUtlLDQsNCwibmctY29udGFpbmVyIiwzKSxoZSgpKSwyJmQmJihmZSgyKSx4ZSgibmdJZiIsMD09PWguc3RlcCksZmUoKSx4ZSgibmdJZiIsaC5zdGVwPjApKX0sZGVwZW5kZW5jaWVzOlt5byxTMixj'@;
put 'cCxkcyxXMSxJZCxQJGUscSRlLFEkZV0sc3R5bGVzOlsiLmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MH0uYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjEwcHh9LmxvZy13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2JhY2tncm91bmQ6'@;
put 'I2YwZjBmMDtib3JkZXI6MXB4IHNvbGlkICNjOWM5Yzk7cGFkZGluZzoxMHB4O292ZXJmbG93OmF1dG87d2hpdGUtc3BhY2U6cHJlLXdyYXB9I2NvbnRleHRzLWJ0bltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozcHggMCAwO21pbi13aWR0aDozMHB4O21hcmdpbi1sZWZ0OjEwcHg7aGVp'@;
put 'Z2h0OjMwcHg7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0udmFsaWRhdGlvbi1iYXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOjIwcHg7YWxpZ24taXRlbXM6Y2VudGVyfS52YWxpZGF0aW9u'@;
put 'LWJhcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjVweH0uYXV0b2RlcGxveS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgMTVweH0uYXV0b2RlcGxveS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5jbHItY2hlY2tib3gtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHggMH0uYXV0b2RlcGxveS1zZWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5idG4tYXV0b2RlcGxveVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpibG9jazttYXJnaW46MTVweCAwfSJdfSl9'@;
put 'fXJldHVybiBjfSkoKTtjb25zdCBzS2U9W3twYXRoOiIiLGNvbXBvbmVudDpXaGV9LHtwYXRoOiJtYW51YWxkZXBsb3kiLGNvbXBvbmVudDpXaGV9XTtsZXQgbEtlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRp'@;
put 'Y3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltqYy5mb3JDaGlsZChzS2UpLGpjXX0pfX1yZXR1cm4gY30pKCksY0tlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco'@;
put 'ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxJYyxCMCxsS2VdfSl9fXJldHVybiBjfSkoKTtfKDQ5NTM3KSxfKDc3NTI1KSxfKDU3NzIpLF8oNjk4NzUpLF8oMTYwOTMpLF8oOTU2MDgpLF8oMTY0'@;
put 'OTMpLF8oNjE5MzQpLF8oMTAxMDEpLF8oMjY4ODkpLF8oNDMyODcpLF8oNjU3NDUpLF8oMjk3MDgpLF8oNjUxMTcpLF8oMTAzNjMpO2NvbnN0e2VudHJpZXM6WWhlLHNldFByb3RvdHlwZU9mOkdoZSxpc0Zyb3plbjp1S2UsZ2V0UHJvdG90eXBlT2Y6ZEtlLGdldE93blByb3BlcnR5RGVzY3Jp'@;
put 'cHRvcjpoS2V9PU9iamVjdDtsZXR7ZnJlZXplOkcxLHNlYWw6TzIsY3JlYXRlOiRoZX09T2JqZWN0LHthcHBseTpYRyxjb25zdHJ1Y3Q6Skd9PXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdDtHMXx8KEcxPWZ1bmN0aW9uKGwpe3JldHVybiBsfSksTzJ8fChPMj1mdW5jdGlvbihsKXtyZXR1'@;
put 'cm4gbH0pLFhHfHwoWEc9ZnVuY3Rpb24obCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9KSxKR3x8KEpHPWZ1bmN0aW9uKGwsYSl7cmV0dXJuIG5ldyBsKC4uLmEpfSk7Y29uc3QgRU89SzEoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLGZLZT1LMShBcnJheS5wcm90b3R5cGUubGFzdEluZGV4'@;
put 'T2YpLEtoZT1LMShBcnJheS5wcm90b3R5cGUucG9wKSxhRT1LMShBcnJheS5wcm90b3R5cGUucHVzaCkscEtlPUsxKEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLFRPPUsxKFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpLFFHPUsxKFN0cmluZy5wcm90b3R5cGUudG9TdHJpbmcpLHFoZT1L'@;
put 'MShTdHJpbmcucHJvdG90eXBlLm1hdGNoKSxzRT1LMShTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLGdLZT1LMShTdHJpbmcucHJvdG90eXBlLmluZGV4T2YpLG1LZT1LMShTdHJpbmcucHJvdG90eXBlLnRyaW0pLHQzPUsxKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpLCQxPUsx'@;
put 'KFJlZ0V4cC5wcm90b3R5cGUudGVzdCksbEU9ZnVuY3Rpb24gdktlKGMpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBKRyhjLGEpfX0oVHlwZUVycm9yKTtmdW5j'@;
put 'dGlvbiBLMShjKXtyZXR1cm4gZnVuY3Rpb24obCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3JldHVybiBYRyhjLGwsZCl9fWZ1bmN0aW9uIGJzKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxl'@;
put 'bmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOlRPO0doZSYmR2hlKGMsbnVsbCk7bGV0IGQ9bC5sZW5ndGg7Zm9yKDtkLS07KXtsZXQgaD1sW2RdO2lmKCJzdHJpbmciPT10eXBlb2YgaCl7Y29uc3QgZj1hKGgpO2YhPT1oJiYodUtlKGwpfHwobFtkXT1mKSxoPWYp'@;
put 'fWNbaF09ITB9cmV0dXJuIGN9ZnVuY3Rpb24gYktlKGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKXQzKGMsbCl8fChjW2xdPW51bGwpO3JldHVybiBjfWZ1bmN0aW9uIFA3KGMpe2NvbnN0IGw9JGhlKG51bGwpO2Zvcihjb25zdFthLGRdb2YgWWhlKGMpKXQzKGMsYSkmJihsW2FdPUFy'@;
put 'cmF5LmlzQXJyYXkoZCk/YktlKGQpOmQmJiJvYmplY3QiPT10eXBlb2YgZCYmZC5jb25zdHJ1Y3Rvcj09PU9iamVjdD9QNyhkKTpkKTtyZXR1cm4gbH1mdW5jdGlvbiBjRShjLGwpe2Zvcig7bnVsbCE9PWM7KXtjb25zdCBkPWhLZShjLGwpO2lmKGQpe2lmKGQuZ2V0KXJldHVybiBLMShkLmdl'@;
put 'dCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGQudmFsdWUpcmV0dXJuIEsxKGQudmFsdWUpfWM9ZEtlKGMpfXJldHVybiBmdW5jdGlvbiBhKCl7cmV0dXJuIG51bGx9fWNvbnN0IFhoZT1HMShbImEiLCJhYmJyIiwiYWNyb255bSIsImFkZHJlc3MiLCJhcmVhIiwiYXJ0aWNsZSIsImFzaWRlIiwi'@;
put 'YXVkaW8iLCJiIiwiYmRpIiwiYmRvIiwiYmlnIiwiYmxpbmsiLCJibG9ja3F1b3RlIiwiYm9keSIsImJyIiwiYnV0dG9uIiwiY2FudmFzIiwiY2FwdGlvbiIsImNlbnRlciIsImNpdGUiLCJjb2RlIiwiY29sIiwiY29sZ3JvdXAiLCJjb250ZW50IiwiZGF0YSIsImRhdGFsaXN0IiwiZGQiLCJk'@;
put 'ZWNvcmF0b3IiLCJkZWwiLCJkZXRhaWxzIiwiZGZuIiwiZGlhbG9nIiwiZGlyIiwiZGl2IiwiZGwiLCJkdCIsImVsZW1lbnQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvbnQiLCJmb290ZXIiLCJmb3JtIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2Iiwi'@;
put 'aGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpbWciLCJpbnB1dCIsImlucyIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJtYWluIiwibWFwIiwibWFyayIsIm1hcnF1ZWUiLCJtZW51IiwibWVudWl0ZW0iLCJtZXRlciIsIm5hdiIsIm5vYnIiLCJvbCIsIm9w'@;
put 'dGdyb3VwIiwib3B0aW9uIiwib3V0cHV0IiwicCIsInBpY3R1cmUiLCJwcmUiLCJwcm9ncmVzcyIsInEiLCJycCIsInJ0IiwicnVieSIsInMiLCJzYW1wIiwic2VjdGlvbiIsInNlbGVjdCIsInNoYWRvdyIsInNtYWxsIiwic291cmNlIiwic3BhY2VyIiwic3BhbiIsInN0cmlrZSIsInN0cm9u'@;
put 'ZyIsInN0eWxlIiwic3ViIiwic3VtbWFyeSIsInN1cCIsInRhYmxlIiwidGJvZHkiLCJ0ZCIsInRlbXBsYXRlIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidHIiLCJ0cmFjayIsInR0IiwidSIsInVsIiwidmFyIiwidmlkZW8iLCJ3YnIiXSksZSQ9RzEoWyJzdmci'@;
put 'LCJhIiwiYWx0Z2x5cGgiLCJhbHRnbHlwaGRlZiIsImFsdGdseXBoaXRlbSIsImFuaW1hdGVjb2xvciIsImFuaW1hdGVtb3Rpb24iLCJhbmltYXRldHJhbnNmb3JtIiwiY2lyY2xlIiwiY2xpcHBhdGgiLCJkZWZzIiwiZGVzYyIsImVsbGlwc2UiLCJmaWx0ZXIiLCJmb250IiwiZyIsImdseXBo'@;
put 'IiwiZ2x5cGhyZWYiLCJoa2VybiIsImltYWdlIiwibGluZSIsImxpbmVhcmdyYWRpZW50IiwibWFya2VyIiwibWFzayIsIm1ldGFkYXRhIiwibXBhdGgiLCJwYXRoIiwicGF0dGVybiIsInBvbHlnb24iLCJwb2x5bGluZSIsInJhZGlhbGdyYWRpZW50IiwicmVjdCIsInN0b3AiLCJzdHlsZSIs'@;
put 'InN3aXRjaCIsInN5bWJvbCIsInRleHQiLCJ0ZXh0cGF0aCIsInRpdGxlIiwidHJlZiIsInRzcGFuIiwidmlldyIsInZrZXJuIl0pLHQkPUcxKFsiZmVCbGVuZCIsImZlQ29sb3JNYXRyaXgiLCJmZUNvbXBvbmVudFRyYW5zZmVyIiwiZmVDb21wb3NpdGUiLCJmZUNvbnZvbHZlTWF0cml4Iiwi'@;
put 'ZmVEaWZmdXNlTGlnaHRpbmciLCJmZURpc3BsYWNlbWVudE1hcCIsImZlRGlzdGFudExpZ2h0IiwiZmVEcm9wU2hhZG93IiwiZmVGbG9vZCIsImZlRnVuY0EiLCJmZUZ1bmNCIiwiZmVGdW5jRyIsImZlRnVuY1IiLCJmZUdhdXNzaWFuQmx1ciIsImZlSW1hZ2UiLCJmZU1lcmdlIiwiZmVNZXJn'@;
put 'ZU5vZGUiLCJmZU1vcnBob2xvZ3kiLCJmZU9mZnNldCIsImZlUG9pbnRMaWdodCIsImZlU3BlY3VsYXJMaWdodGluZyIsImZlU3BvdExpZ2h0IiwiZmVUaWxlIiwiZmVUdXJidWxlbmNlIl0pLHlLZT1HMShbImFuaW1hdGUiLCJjb2xvci1wcm9maWxlIiwiY3Vyc29yIiwiZGlzY2FyZCIsImZv'@;
put 'bnQtZmFjZSIsImZvbnQtZmFjZS1mb3JtYXQiLCJmb250LWZhY2UtbmFtZSIsImZvbnQtZmFjZS1zcmMiLCJmb250LWZhY2UtdXJpIiwiZm9yZWlnbm9iamVjdCIsImhhdGNoIiwiaGF0Y2hwYXRoIiwibWVzaCIsIm1lc2hncmFkaWVudCIsIm1lc2hwYXRjaCIsIm1lc2hyb3ciLCJtaXNzaW5n'@;
put 'LWdseXBoIiwic2NyaXB0Iiwic2V0Iiwic29saWRjb2xvciIsInVua25vd24iLCJ1c2UiXSksbiQ9RzEoWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVy'@;
put 'IiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciIsIm1wcmVzY3JpcHRzIl0pLF9LZT1H'@;
put 'MShbIm1hY3Rpb24iLCJtYWxpZ25ncm91cCIsIm1hbGlnbm1hcmsiLCJtbG9uZ2RpdiIsIm1zY2FycmllcyIsIm1zY2FycnkiLCJtc2dyb3VwIiwibXN0YWNrIiwibXNsaW5lIiwibXNyb3ciLCJzZW1hbnRpY3MiLCJhbm5vdGF0aW9uIiwiYW5ub3RhdGlvbi14bWwiLCJtcHJlc2NyaXB0cyIs'@;
put 'Im5vbmUiXSksSmhlPUcxKFsiI3RleHQiXSksUWhlPUcxKFsiYWNjZXB0IiwiYWN0aW9uIiwiYWxpZ24iLCJhbHQiLCJhdXRvY2FwaXRhbGl6ZSIsImF1dG9jb21wbGV0ZSIsImF1dG9waWN0dXJlaW5waWN0dXJlIiwiYXV0b3BsYXkiLCJiYWNrZ3JvdW5kIiwiYmdjb2xvciIsImJvcmRlciIs'@;
put 'ImNhcHR1cmUiLCJjZWxscGFkZGluZyIsImNlbGxzcGFjaW5nIiwiY2hlY2tlZCIsImNpdGUiLCJjbGFzcyIsImNsZWFyIiwiY29sb3IiLCJjb2xzIiwiY29sc3BhbiIsImNvbnRyb2xzIiwiY29udHJvbHNsaXN0IiwiY29vcmRzIiwiY3Jvc3NvcmlnaW4iLCJkYXRldGltZSIsImRlY29kaW5n'@;
put 'IiwiZGVmYXVsdCIsImRpciIsImRpc2FibGVkIiwiZGlzYWJsZXBpY3R1cmVpbnBpY3R1cmUiLCJkaXNhYmxlcmVtb3RlcGxheWJhY2siLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY3R5cGUiLCJlbnRlcmtleWhpbnQiLCJmYWNlIiwiZm9yIiwiaGVhZGVycyIsImhlaWdodCIsImhpZGRl'@;
put 'biIsImhpZ2giLCJocmVmIiwiaHJlZmxhbmciLCJpZCIsImlucHV0bW9kZSIsImludGVncml0eSIsImlzbWFwIiwia2luZCIsImxhYmVsIiwibGFuZyIsImxpc3QiLCJsb2FkaW5nIiwibG9vcCIsImxvdyIsIm1heCIsIm1heGxlbmd0aCIsIm1lZGlhIiwibWV0aG9kIiwibWluIiwibWlubGVu'@;
put 'Z3RoIiwibXVsdGlwbGUiLCJtdXRlZCIsIm5hbWUiLCJub25jZSIsIm5vc2hhZGUiLCJub3ZhbGlkYXRlIiwibm93cmFwIiwib3BlbiIsIm9wdGltdW0iLCJwYXR0ZXJuIiwicGxhY2Vob2xkZXIiLCJwbGF5c2lubGluZSIsInBvcG92ZXIiLCJwb3BvdmVydGFyZ2V0IiwicG9wb3ZlcnRhcmdl'@;
put 'dGFjdGlvbiIsInBvc3RlciIsInByZWxvYWQiLCJwdWJkYXRlIiwicmFkaW9ncm91cCIsInJlYWRvbmx5IiwicmVsIiwicmVxdWlyZWQiLCJyZXYiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93c3BhbiIsInNwZWxsY2hlY2siLCJzY29wZSIsInNlbGVjdGVkIiwic2hhcGUiLCJzaXpl'@;
put 'Iiwic2l6ZXMiLCJzcGFuIiwic3JjbGFuZyIsInN0YXJ0Iiwic3JjIiwic3Jjc2V0Iiwic3RlcCIsInN0eWxlIiwic3VtbWFyeSIsInRhYmluZGV4IiwidGl0bGUiLCJ0cmFuc2xhdGUiLCJ0eXBlIiwidXNlbWFwIiwidmFsaWduIiwidmFsdWUiLCJ3aWR0aCIsIndyYXAiLCJ4bWxucyIsInNs'@;
put 'b3QiXSksciQ9RzEoWyJhY2NlbnQtaGVpZ2h0IiwiYWNjdW11bGF0ZSIsImFkZGl0aXZlIiwiYWxpZ25tZW50LWJhc2VsaW5lIiwiYW1wbGl0dWRlIiwiYXNjZW50IiwiYXR0cmlidXRlbmFtZSIsImF0dHJpYnV0ZXR5cGUiLCJhemltdXRoIiwiYmFzZWZyZXF1ZW5jeSIsImJhc2VsaW5lLXNo'@;
put 'aWZ0IiwiYmVnaW4iLCJiaWFzIiwiYnkiLCJjbGFzcyIsImNsaXAiLCJjbGlwcGF0aHVuaXRzIiwiY2xpcC1wYXRoIiwiY2xpcC1ydWxlIiwiY29sb3IiLCJjb2xvci1pbnRlcnBvbGF0aW9uIiwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwiY29sb3ItcHJvZmlsZSIsImNvbG9yLXJl'@;
put 'bmRlcmluZyIsImN4IiwiY3kiLCJkIiwiZHgiLCJkeSIsImRpZmZ1c2Vjb25zdGFudCIsImRpcmVjdGlvbiIsImRpc3BsYXkiLCJkaXZpc29yIiwiZHVyIiwiZWRnZW1vZGUiLCJlbGV2YXRpb24iLCJlbmQiLCJleHBvbmVudCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJm'@;
put 'aWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJn'@;
put 'MSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVuZGVyaW5nIiwiaW4iLCJpbjIiLCJpbnRlcmNlcHQiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwi'@;
put 'a2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxpZ2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtl'@;
put 'ci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9kIiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3Ii'@;
put 'LCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJl'@;
put 'c2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1y'@;
put 'ZW5kZXJpbmciLCJzbG9wZSIsInNwZWN1bGFyY29uc3RhbnQiLCJzcGVjdWxhcmV4cG9uZW50Iiwic3ByZWFkbWV0aG9kIiwic3RhcnRvZmZzZXQiLCJzdGRkZXZpYXRpb24iLCJzdGl0Y2h0aWxlcyIsInN0b3AtY29sb3IiLCJzdG9wLW9wYWNpdHkiLCJzdHJva2UtZGFzaGFycmF5Iiwic3Ry'@;
put 'b2tlLWRhc2hvZmZzZXQiLCJzdHJva2UtbGluZWNhcCIsInN0cm9rZS1saW5lam9pbiIsInN0cm9rZS1taXRlcmxpbWl0Iiwic3Ryb2tlLW9wYWNpdHkiLCJzdHJva2UiLCJzdHJva2Utd2lkdGgiLCJzdHlsZSIsInN1cmZhY2VzY2FsZSIsInN5c3RlbWxhbmd1YWdlIiwidGFiaW5kZXgiLCJ0'@;
put 'YWJsZXZhbHVlcyIsInRhcmdldHgiLCJ0YXJnZXR5IiwidHJhbnNmb3JtIiwidHJhbnNmb3JtLW9yaWdpbiIsInRleHQtYW5jaG9yIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1yZW5kZXJpbmciLCJ0ZXh0bGVuZ3RoIiwidHlwZSIsInUxIiwidTIiLCJ1bmljb2RlIiwidmFsdWVzIiwidmll'@;
put 'd2JveCIsInZpc2liaWxpdHkiLCJ2ZXJzaW9uIiwidmVydC1hZHYteSIsInZlcnQtb3JpZ2luLXgiLCJ2ZXJ0LW9yaWdpbi15Iiwid2lkdGgiLCJ3b3JkLXNwYWNpbmciLCJ3cmFwIiwid3JpdGluZy1tb2RlIiwieGNoYW5uZWxzZWxlY3RvciIsInljaGFubmVsc2VsZWN0b3IiLCJ4IiwieDEi'@;
put 'LCJ4MiIsInhtbG5zIiwieSIsInkxIiwieTIiLCJ6Iiwiem9vbWFuZHBhbiJdKSxlMmU9RzEoWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxpbmVzIiwiY29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0'@;
put 'aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGluZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxxdW90ZSIsIm1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwi'@;
put 'bWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXplIiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dzcGFuIiwicnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwi'@;
put 'LCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJzZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0cmljIiwidm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksQU89'@;
put 'RzEoWyJ4bGluazpocmVmIiwieG1sOmlkIiwieGxpbms6dGl0bGUiLCJ4bWw6c3BhY2UiLCJ4bWxuczp4bGluayJdKSx3S2U9TzIoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSxDS2U9TzIoLzwlW1x3XFddKnxbXHdcV10qJT4vZ20pLFNLZT1PMigvXCRce1tcd1xXXSovZ20pLE1LZT1P'@;
put 'MigvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0rJC8pLHhLZT1PMigvXmFyaWEtW1wtXHddKyQvKSx0MmU9TzIoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98c21zfGNpZHx4bXBwKTp8W15hLXpdfFthLXorLlwtXSsoPzpbXmEteisuXC06XXwkKSkvaSksRUtlPU8y'@;
put 'KC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxUS2U9TzIoL1tcdTAwMDAtXHUwMDIwXHUwMEEwXHUxNjgwXHUxODBFXHUyMDAwLVx1MjAyOVx1MjA1Rlx1MzAwMF0vZyksbjJlPU8yKC9eaHRtbCQvaSksQUtlPU8yKC9eW2Etel1bLlx3XSooLVsuXHddKykrJC9pKTt2YXIgcjJlPU9iamVjdC5m'@;
put 'cmVlemUoe19fcHJvdG9fXzpudWxsLEFSSUFfQVRUUjp4S2UsQVRUUl9XSElURVNQQUNFOlRLZSxDVVNUT01fRUxFTUVOVDpBS2UsREFUQV9BVFRSOk1LZSxET0NUWVBFX05BTUU6bjJlLEVSQl9FWFBSOkNLZSxJU19BTExPV0VEX1VSSTp0MmUsSVNfU0NSSVBUX09SX0RBVEE6RUtlLE1VU1RB'@;
put 'Q0hFX0VYUFI6d0tlLFRNUExJVF9FWFBSOlNLZX0pO3ZhciBJS2U9ZnVuY3Rpb24gbzJlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93O2NvbnN0IGw9dWE9Pm8yZSh1YSk7'@;
put 'aWYobC52ZXJzaW9uPSIzLjIuNCIsbC5yZW1vdmVkPVtdLCFjfHwhYy5kb2N1bWVudHx8OSE9PWMuZG9jdW1lbnQubm9kZVR5cGV8fCFjLkVsZW1lbnQpcmV0dXJuIGwuaXNTdXBwb3J0ZWQ9ITEsbDtsZXR7ZG9jdW1lbnQ6YX09Yztjb25zdCBkPWEsaD1kLmN1cnJlbnRTY3JpcHQse0RvY3Vt'@;
put 'ZW50RnJhZ21lbnQ6ZixIVE1MVGVtcGxhdGVFbGVtZW50OnYsTm9kZTpNLEVsZW1lbnQ6RCxOb2RlRmlsdGVyOlosTmFtZWROb2RlTWFwOm5lPWMuTmFtZWROb2RlTWFwfHxjLk1vek5hbWVkQXR0ck1hcCxIVE1MRm9ybUVsZW1lbnQ6Y2UsRE9NUGFyc2VyOmJlLHRydXN0ZWRUeXBlczpFZX09'@;
put 'YyxCZT1ELnByb3RvdHlwZSxxZT1jRShCZSwiY2xvbmVOb2RlIikscnQ9Y0UoQmUsInJlbW92ZSIpLHB0PWNFKEJlLCJuZXh0U2libGluZyIpLGR0PWNFKEJlLCJjaGlsZE5vZGVzIiksSnQ9Y0UoQmUsInBhcmVudE5vZGUiKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygdil7Y29uc3QgdWE9YS5j'@;
put 'cmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpO3VhLmNvbnRlbnQmJnVhLmNvbnRlbnQub3duZXJEb2N1bWVudCYmKGE9dWEuY29udGVudC5vd25lckRvY3VtZW50KX1sZXQgdm4sQ249IiI7Y29uc3R7aW1wbGVtZW50YXRpb246dG4sY3JlYXRlTm9kZUl0ZXJhdG9yOk1uLGNyZWF0ZURvY3VtZW50'@;
put 'RnJhZ21lbnQ6Q3IsZ2V0RWxlbWVudHNCeVRhZ05hbWU6R3J9PWEse2ltcG9ydE5vZGU6Z3J9PWQ7bGV0IEduPXthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0'@;
put 'ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfTtsLmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBZaGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBKdCYmdG4mJnZvaWQgMCE9PXRuLmNyZWF0ZUhUTUxEb2N1bWVudDtjb25zdHtNVVNUQUNIRV9FWFBSOm9pLEVSQl9FWFBSOl9pLFRNUExJVF9FWFBSOk9uLERBVEFfQVRUUjp6cixBUklBX0FUVFI6Sm4sSVNfU0NSSVBUX09SX0RBVEE6RHIsQVRU'@;
put 'Ul9XSElURVNQQUNFOiRyLENVU1RPTV9FTEVNRU5UOndpfT1yMmU7bGV0e0lTX0FMTE9XRURfVVJJOnRvfT1yMmUscG89bnVsbDtjb25zdCB2dD1icyh7fSxbLi4uWGhlLC4uLmUkLC4uLnQkLC4uLm4kLC4uLkpoZV0pO2xldCBOdD1udWxsO2NvbnN0IEh0PWJzKHt9LFsuLi5RaGUsLi4uciQs'@;
put 'Li4uZTJlLC4uLkFPXSk7bGV0IEhuPU9iamVjdC5zZWFsKCRoZShudWxsLHt0YWdOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOm51bGx9LGF0dHJpYnV0ZU5hbWVDaGVjazp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1l'@;
put 'cmFibGU6ITAsdmFsdWU6bnVsbH0sYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTohMX19KSksdHI9bnVsbCxvcj1udWxsLEhyPSEwLEtyPSEwLGFuPSExLHluPSEwLHBuPSExLHByPSEwLCRuPSEx'@;
put 'LGRyPSExLFVyPSExLFpuPSExLHNyPSExLE5yPSExLE1yPSEwLFpyPSExLGpvPSEwLElhPSExLFphPXt9LHBzPW51bGw7Y29uc3QgTWE9YnMoe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRo'@;
put 'IiwibWkiLCJtbiIsIm1vIiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKTtsZXQgaHM9bnVsbDtjb25zdCBuYz1icyh7'@;
put 'fSxbImF1ZGlvIiwidmlkZW8iLCJpbWciLCJzb3VyY2UiLCJpbWFnZSIsInRyYWNrIl0pO2xldCBRYT1udWxsO2NvbnN0IE0zPWJzKHt9LFsiYWx0IiwiY2xhc3MiLCJmb3IiLCJpZCIsImxhYmVsIiwibmFtZSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInJvbGUiLCJzdW1tYXJ5IiwidGl0'@;
put 'bGUiLCJ2YWx1ZSIsInN0eWxlIiwieG1sbnMiXSksYWQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLHpzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsWGM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiO2xldCBLcz1YYyxWbD0hMSxlcz1udWxsO2NvbnN0'@;
put 'IEUxPWJzKHt9LFthZCx6cyxYY10sUUcpO2xldCB4Mz1icyh7fSxbIm1pIiwibW8iLCJtbiIsIm1zIiwibXRleHQiXSksSmc9YnMoe30sWyJhbm5vdGF0aW9uLXhtbCJdKTtjb25zdCBkND1icyh7fSxbInRpdGxlIiwic3R5bGUiLCJmb250IiwiYSIsInNjcmlwdCJdKTtsZXQgcnY9bnVsbDtj'@;
put 'b25zdCBOQT1bImFwcGxpY2F0aW9uL3hodG1sK3htbCIsInRleHQvaHRtbCJdO2xldCBLbz1udWxsLE02PW51bGw7Y29uc3QgVXRlPWEuY3JlYXRlRWxlbWVudCgiZm9ybSIpLFVOPWZ1bmN0aW9uKG1yKXtyZXR1cm4gbXIgaW5zdGFuY2VvZiBSZWdFeHB8fG1yIGluc3RhbmNlb2YgRnVuY3Rp'@;
put 'b259LFZBPWZ1bmN0aW9uKCl7bGV0IG1yPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZighTTZ8fE02IT09bXIpe2lmKCghbXJ8fCJvYmplY3QiIT10eXBlb2YgbXIpJiYobXI9e30pLG1yPVA3KG1yKSxydj0tMT09PU5BLmluZGV4'@;
put 'T2YobXIuUEFSU0VSX01FRElBX1RZUEUpPyJ0ZXh0L2h0bWwiOm1yLlBBUlNFUl9NRURJQV9UWVBFLEtvPSJhcHBsaWNhdGlvbi94aHRtbCt4bWwiPT09cnY/UUc6VE8scG89dDMobXIsIkFMTE9XRURfVEFHUyIpP2JzKHt9LG1yLkFMTE9XRURfVEFHUyxLbyk6dnQsTnQ9dDMobXIsIkFMTE9X'@;
put 'RURfQVRUUiIpP2JzKHt9LG1yLkFMTE9XRURfQVRUUixLbyk6SHQsZXM9dDMobXIsIkFMTE9XRURfTkFNRVNQQUNFUyIpP2JzKHt9LG1yLkFMTE9XRURfTkFNRVNQQUNFUyxRRyk6RTEsUWE9dDMobXIsIkFERF9VUklfU0FGRV9BVFRSIik/YnMoUDcoTTMpLG1yLkFERF9VUklfU0FGRV9BVFRS'@;
put 'LEtvKTpNMyxocz10MyhtciwiQUREX0RBVEFfVVJJX1RBR1MiKT9icyhQNyhuYyksbXIuQUREX0RBVEFfVVJJX1RBR1MsS28pOm5jLHBzPXQzKG1yLCJGT1JCSURfQ09OVEVOVFMiKT9icyh7fSxtci5GT1JCSURfQ09OVEVOVFMsS28pOk1hLHRyPXQzKG1yLCJGT1JCSURfVEFHUyIpP2JzKHt9'@;
put 'LG1yLkZPUkJJRF9UQUdTLEtvKTp7fSxvcj10MyhtciwiRk9SQklEX0FUVFIiKT9icyh7fSxtci5GT1JCSURfQVRUUixLbyk6e30sWmE9ISF0MyhtciwiVVNFX1BST0ZJTEVTIikmJm1yLlVTRV9QUk9GSUxFUyxIcj0hMSE9PW1yLkFMTE9XX0FSSUFfQVRUUixLcj0hMSE9PW1yLkFMTE9XX0RB'@;
put 'VEFfQVRUUixhbj1tci5BTExPV19VTktOT1dOX1BST1RPQ09MU3x8ITEseW49ITEhPT1tci5BTExPV19TRUxGX0NMT1NFX0lOX0FUVFIscG49bXIuU0FGRV9GT1JfVEVNUExBVEVTfHwhMSxwcj0hMSE9PW1yLlNBRkVfRk9SX1hNTCwkbj1tci5XSE9MRV9ET0NVTUVOVHx8ITEsWm49bXIuUkVU'@;
put 'VVJOX0RPTXx8ITEsc3I9bXIuUkVUVVJOX0RPTV9GUkFHTUVOVHx8ITEsTnI9bXIuUkVUVVJOX1RSVVNURURfVFlQRXx8ITEsVXI9bXIuRk9SQ0VfQk9EWXx8ITEsTXI9ITEhPT1tci5TQU5JVElaRV9ET00sWnI9bXIuU0FOSVRJWkVfTkFNRURfUFJPUFN8fCExLGpvPSExIT09bXIuS0VFUF9D'@;
put 'T05URU5ULElhPW1yLklOX1BMQUNFfHwhMSx0bz1tci5BTExPV0VEX1VSSV9SRUdFWFB8fHQyZSxLcz1tci5OQU1FU1BBQ0V8fFhjLHgzPW1yLk1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU3x8eDMsSmc9bXIuSFRNTF9JTlRFR1JBVElPTl9QT0lOVFN8fEpnLEhuPW1yLkNVU1RPTV9F'@;
put 'TEVNRU5UX0hBTkRMSU5HfHx7fSxtci5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmVU4obXIuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSYmKEhuLnRhZ05hbWVDaGVjaz1tci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spLG1yLkNVU1RPTV9FTEVN'@;
put 'RU5UX0hBTkRMSU5HJiZVTihtci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spJiYoSG4uYXR0cmlidXRlTmFtZUNoZWNrPW1yLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayksbXIuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJiJi'@;
put 'b29sZWFuIj09dHlwZW9mIG1yLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyYmKEhuLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cz1tci5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVu'@;
put 'dHMpLHBuJiYoS3I9ITEpLHNyJiYoWm49ITApLFphJiYocG89YnMoe30sSmhlKSxOdD1bXSwhMD09PVphLmh0bWwmJihicyhwbyxYaGUpLGJzKE50LFFoZSkpLCEwPT09WmEuc3ZnJiYoYnMocG8sZSQpLGJzKE50LHIkKSxicyhOdCxBTykpLCEwPT09WmEuc3ZnRmlsdGVycyYmKGJzKHBvLHQk'@;
put 'KSxicyhOdCxyJCksYnMoTnQsQU8pKSwhMD09PVphLm1hdGhNbCYmKGJzKHBvLG4kKSxicyhOdCxlMmUpLGJzKE50LEFPKSkpLG1yLkFERF9UQUdTJiYocG89PT12dCYmKHBvPVA3KHBvKSksYnMocG8sbXIuQUREX1RBR1MsS28pKSxtci5BRERfQVRUUiYmKE50PT09SHQmJihOdD1QNyhOdCkp'@;
put 'LGJzKE50LG1yLkFERF9BVFRSLEtvKSksbXIuQUREX1VSSV9TQUZFX0FUVFImJmJzKFFhLG1yLkFERF9VUklfU0FGRV9BVFRSLEtvKSxtci5GT1JCSURfQ09OVEVOVFMmJihwcz09PU1hJiYocHM9UDcocHMpKSxicyhwcyxtci5GT1JCSURfQ09OVEVOVFMsS28pKSxqbyYmKHBvWyIjdGV4dCJd'@;
put 'PSEwKSwkbiYmYnMocG8sWyJodG1sIiwiaGVhZCIsImJvZHkiXSkscG8udGFibGUmJihicyhwbyxbInRib2R5Il0pLGRlbGV0ZSB0ci50Ym9keSksbXIuVFJVU1RFRF9UWVBFU19QT0xJQ1kpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtci5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVIVE1M'@;
put 'KXRocm93IGxFKCdUUlVTVEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlSFRNTCIgaG9vay4nKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbXIuVFJVU1RFRF9UWVBFU19QT0xJQ1kuY3JlYXRlU2NyaXB0VVJMKXRocm93IGxFKCdUUlVT'@;
put 'VEVEX1RZUEVTX1BPTElDWSBjb25maWd1cmF0aW9uIG9wdGlvbiBtdXN0IHByb3ZpZGUgYSAiY3JlYXRlU2NyaXB0VVJMIiBob29rLicpO3ZuPW1yLlRSVVNURURfVFlQRVNfUE9MSUNZLENuPXZuLmNyZWF0ZUhUTUwoIiIpfWVsc2Ugdm9pZCAwPT09dm4mJih2bj1mdW5jdGlvbihsLGEpe2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGwuY3JlYXRlUG9saWN5KXJldHVybiBudWxsO2xldCBkPW51bGw7Y29uc3QgaD0iZGF0YS10dC1wb2xpY3ktc3VmZml4IjthJiZhLmhhc0F0dHJpYnV0ZShoKSYmKGQ9YS5nZXRBdHRyaWJ1dGUoaCkpO2NvbnN0IGY9ImRv'@;
put 'bXB1cmlmeSIrKGQ/IiMiK2Q6IiIpO3RyeXtyZXR1cm4gbC5jcmVhdGVQb2xpY3koZix7Y3JlYXRlSFRNTDp2PT52LGNyZWF0ZVNjcmlwdFVSTDp2PT52fSl9Y2F0Y2h7cmV0dXJuIGNvbnNvbGUud2FybigiVHJ1c3RlZFR5cGVzIHBvbGljeSAiK2YrIiBjb3VsZCBub3QgYmUgY3JlYXRlZC4i'@;
put 'KSxudWxsfX0oRWUsaCkpLG51bGwhPT12biYmInN0cmluZyI9PXR5cGVvZiBDbiYmKENuPXZuLmNyZWF0ZUhUTUwoIiIpKTtHMSYmRzEobXIpLE02PW1yfX0sWk49YnMoe30sWy4uLmUkLC4uLnQkLC4uLnlLZV0pLFdOPWJzKHt9LFsuLi5uJCwuLi5fS2VdKSxZdD1mdW5jdGlvbihtcil7YUUo'@;
put 'bC5yZW1vdmVkLHtlbGVtZW50Om1yfSk7dHJ5e0p0KG1yKS5yZW1vdmVDaGlsZChtcil9Y2F0Y2h7cnQobXIpfX0sWjA9ZnVuY3Rpb24obXIsZW8pe3RyeXthRShsLnJlbW92ZWQse2F0dHJpYnV0ZTplby5nZXRBdHRyaWJ1dGVOb2RlKG1yKSxmcm9tOmVvfSl9Y2F0Y2h7YUUobC5yZW1vdmVk'@;
put 'LHthdHRyaWJ1dGU6bnVsbCxmcm9tOmVvfSl9aWYoZW8ucmVtb3ZlQXR0cmlidXRlKG1yKSwiaXMiPT09bXIpaWYoWm58fHNyKXRyeXtZdChlbyl9Y2F0Y2h7fWVsc2UgdHJ5e2VvLnNldEF0dHJpYnV0ZShtciwiIil9Y2F0Y2h7fX0sVXM9ZnVuY3Rpb24obXIpe2xldCBlbz1udWxsLFhvPW51'@;
put 'bGw7aWYoVXIpbXI9IjxyZW1vdmU+PC9yZW1vdmU+IittcjtlbHNle2NvbnN0IG0wPXFoZShtciwvXltcclxuXHQgXSsvKTtYbz1tMCYmbTBbMF19ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1ydiYmS3M9PT1YYyYmKG1yPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94'@;
put 'aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5PicrbXIrIjwvYm9keT48L2h0bWw+Iik7Y29uc3QgZGM9dm4/dm4uY3JlYXRlSFRNTChtcik6bXI7aWYoS3M9PT1YYyl0cnl7ZW89KG5ldyBiZSkucGFyc2VGcm9tU3RyaW5nKGRjLHJ2KX1jYXRjaHt9aWYoIWVvfHwhZW8uZG9jdW1lbnRFbGVtZW50'@;
put 'KXtlbz10bi5jcmVhdGVEb2N1bWVudChLcywidGVtcGxhdGUiLG51bGwpO3RyeXtlby5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MPVZsP0NuOmRjfWNhdGNoe319Y29uc3QgQTA9ZW8uYm9keXx8ZW8uZG9jdW1lbnRFbGVtZW50O3JldHVybiBtciYmWG8mJkEwLmluc2VydEJlZm9yZShhLmNy'@;
put 'ZWF0ZVRleHROb2RlKFhvKSxBMC5jaGlsZE5vZGVzWzBdfHxudWxsKSxLcz09PVhjP0dyLmNhbGwoZW8sJG4/Imh0bWwiOiJib2R5IilbMF06JG4/ZW8uZG9jdW1lbnRFbGVtZW50OkEwfSxZTj1mdW5jdGlvbihtcil7cmV0dXJuIE1uLmNhbGwobXIub3duZXJEb2N1bWVudHx8bXIsbXIsWi5T'@;
put 'SE9XX0VMRU1FTlR8Wi5TSE9XX0NPTU1FTlR8Wi5TSE9XX1RFWFR8Wi5TSE9XX1BST0NFU1NJTkdfSU5TVFJVQ1RJT058Wi5TSE9XX0NEQVRBX1NFQ1RJT04sbnVsbCl9LHg2PWZ1bmN0aW9uKG1yKXtyZXR1cm4gbXIgaW5zdGFuY2VvZiBjZSYmKCJzdHJpbmciIT10eXBlb2YgbXIubm9kZU5h'@;
put 'bWV8fCJzdHJpbmciIT10eXBlb2YgbXIudGV4dENvbnRlbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiBtci5yZW1vdmVDaGlsZHx8IShtci5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgbmUpfHwiZnVuY3Rpb24iIT10eXBlb2YgbXIucmVtb3ZlQXR0cmlidXRlfHwiZnVuY3Rpb24iIT10eXBlb2YgbXIu'@;
put 'c2V0QXR0cmlidXRlfHwic3RyaW5nIiE9dHlwZW9mIG1yLm5hbWVzcGFjZVVSSXx8ImZ1bmN0aW9uIiE9dHlwZW9mIG1yLmluc2VydEJlZm9yZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIG1yLmhhc0NoaWxkTm9kZXMpfSxRZz1mdW5jdGlvbihtcil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE0m'@;
put 'Jm1yIGluc3RhbmNlb2YgTX07ZnVuY3Rpb24gRTModWEsbXIsZW8pe0VPKHVhLFhvPT57WG8uY2FsbChsLG1yLGVvLE02KX0pfWNvbnN0IEdOPWZ1bmN0aW9uKG1yKXtsZXQgZW89bnVsbDtpZihFMyhHbi5iZWZvcmVTYW5pdGl6ZUVsZW1lbnRzLG1yLG51bGwpLHg2KG1yKSlyZXR1cm4gWXQo'@;
put 'bXIpLCEwO2NvbnN0IFhvPUtvKG1yLm5vZGVOYW1lKTtpZihFMyhHbi51cG9uU2FuaXRpemVFbGVtZW50LG1yLHt0YWdOYW1lOlhvLGFsbG93ZWRUYWdzOnBvfSksbXIuaGFzQ2hpbGROb2RlcygpJiYhUWcobXIuZmlyc3RFbGVtZW50Q2hpbGQpJiYkMSgvPFsvXHddL2csbXIuaW5uZXJIVE1M'@;
put 'KSYmJDEoLzxbL1x3XS9nLG1yLnRleHRDb250ZW50KXx8Nz09PW1yLm5vZGVUeXBlfHxwciYmOD09PW1yLm5vZGVUeXBlJiYkMSgvPFsvXHddL2csbXIuZGF0YSkpcmV0dXJuIFl0KG1yKSwhMDtpZighcG9bWG9dfHx0cltYb10pe2lmKCF0cltYb10mJktOKFhvKSYmKEhuLnRhZ05hbWVDaGVj'@;
put 'ayBpbnN0YW5jZW9mIFJlZ0V4cCYmJDEoSG4udGFnTmFtZUNoZWNrLFhvKXx8SG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJkhuLnRhZ05hbWVDaGVjayhYbykpKXJldHVybiExO2lmKGpvJiYhcHNbWG9dKXtjb25zdCBkYz1KdChtcil8fG1yLnBhcmVudE5vZGUsQTA9ZHQo'@;
put 'bXIpfHxtci5jaGlsZE5vZGVzO2lmKEEwJiZkYylmb3IobGV0IFQxPUEwLmxlbmd0aC0xO1QxPj0wOy0tVDEpe2NvbnN0IGVoPXFlKEEwW1QxXSwhMCk7ZWguX19yZW1vdmFsQ291bnQ9KG1yLl9fcmVtb3ZhbENvdW50fHwwKSsxLGRjLmluc2VydEJlZm9yZShlaCxwdChtcikpfX1yZXR1cm4g'@;
put 'WXQobXIpLCEwfXJldHVybiBtciBpbnN0YW5jZW9mIEQmJiFmdW5jdGlvbihtcil7bGV0IGVvPUp0KG1yKTsoIWVvfHwhZW8udGFnTmFtZSkmJihlbz17bmFtZXNwYWNlVVJJOktzLHRhZ05hbWU6InRlbXBsYXRlIn0pO2NvbnN0IFhvPVRPKG1yLnRhZ05hbWUpLGRjPVRPKGVvLnRhZ05hbWUp'@;
put 'O3JldHVybiEhZXNbbXIubmFtZXNwYWNlVVJJXSYmKG1yLm5hbWVzcGFjZVVSST09PXpzP2VvLm5hbWVzcGFjZVVSST09PVhjPyJzdmciPT09WG86ZW8ubmFtZXNwYWNlVVJJPT09YWQ/InN2ZyI9PT1YbyYmKCJhbm5vdGF0aW9uLXhtbCI9PT1kY3x8eDNbZGNdKTohIVpOW1hvXTptci5uYW1l'@;
put 'c3BhY2VVUkk9PT1hZD9lby5uYW1lc3BhY2VVUkk9PT1YYz8ibWF0aCI9PT1Ybzplby5uYW1lc3BhY2VVUkk9PT16cz8ibWF0aCI9PT1YbyYmSmdbZGNdOiEhV05bWG9dOm1yLm5hbWVzcGFjZVVSST09PVhjPyEoZW8ubmFtZXNwYWNlVVJJPT09enMmJiFKZ1tkY118fGVvLm5hbWVzcGFjZVVS'@;
put 'ST09PWFkJiYheDNbZGNdKSYmIVdOW1hvXSYmKGQ0W1hvXXx8IVpOW1hvXSk6ISgiYXBwbGljYXRpb24veGh0bWwreG1sIiE9PXJ2fHwhZXNbbXIubmFtZXNwYWNlVVJJXSkpfShtcil8fCgibm9zY3JpcHQiPT09WG98fCJub2VtYmVkIj09PVhvfHwibm9mcmFtZXMiPT09WG8pJiYkMSgvPFwv'@;
put 'bm8oc2NyaXB0fGVtYmVkfGZyYW1lcykvaSxtci5pbm5lckhUTUwpPyhZdChtciksITApOihwbiYmMz09PW1yLm5vZGVUeXBlJiYoZW89bXIudGV4dENvbnRlbnQsRU8oW29pLF9pLE9uXSxkYz0+e2VvPXNFKGVvLGRjLCIgIil9KSxtci50ZXh0Q29udGVudCE9PWVvJiYoYUUobC5yZW1vdmVk'@;
put 'LHtlbGVtZW50Om1yLmNsb25lTm9kZSgpfSksbXIudGV4dENvbnRlbnQ9ZW8pKSxFMyhHbi5hZnRlclNhbml0aXplRWxlbWVudHMsbXIsbnVsbCksITEpfSwkTj1mdW5jdGlvbihtcixlbyxYbyl7aWYoTXImJigiaWQiPT09ZW98fCJuYW1lIj09PWVvKSYmKFhvIGluIGF8fFhvIGluIFV0ZSkp'@;
put 'cmV0dXJuITE7aWYoKCFLcnx8b3JbZW9dfHwhJDEoenIsZW8pKSYmKCFIcnx8ISQxKEpuLGVvKSkpaWYoIU50W2VvXXx8b3JbZW9dKXtpZighKEtOKG1yKSYmKEhuLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmJDEoSG4udGFnTmFtZUNoZWNrLG1yKXx8SG4udGFnTmFtZUNoZWNr'@;
put 'IGluc3RhbmNlb2YgRnVuY3Rpb24mJkhuLnRhZ05hbWVDaGVjayhtcikpJiYoSG4uYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiYkMShIbi5hdHRyaWJ1dGVOYW1lQ2hlY2ssZW8pfHxIbi5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmSG4uYXR0'@;
put 'cmlidXRlTmFtZUNoZWNrKGVvKSl8fCJpcyI9PT1lbyYmSG4uYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzJiYoSG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiYkMShIbi50YWdOYW1lQ2hlY2ssWG8pfHxIbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYm'@;
put 'SG4udGFnTmFtZUNoZWNrKFhvKSkpKXJldHVybiExfWVsc2UgaWYoIVFhW2VvXSYmISQxKHRvLHNFKFhvLCRyLCIiKSkmJigic3JjIiE9PWVvJiYieGxpbms6aHJlZiIhPT1lbyYmImhyZWYiIT09ZW98fCJzY3JpcHQiPT09bXJ8fDAhPT1nS2UoWG8sImRhdGE6Iil8fCFoc1ttcl0pJiYoIWFu'@;
put 'fHwkMShEcixzRShYbywkciwiIikpKSYmWG8pcmV0dXJuITE7cmV0dXJuITB9LEtOPWZ1bmN0aW9uKG1yKXtyZXR1cm4iYW5ub3RhdGlvbi14bWwiIT09bXImJnFoZShtcix3aSl9LHFOPWZ1bmN0aW9uKG1yKXtFMyhHbi5iZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMsbXIsbnVsbCk7Y29uc3R7'@;
put 'YXR0cmlidXRlczplb309bXI7aWYoIWVvfHx4NihtcikpcmV0dXJuO2NvbnN0IFhvPXthdHRyTmFtZToiIixhdHRyVmFsdWU6IiIsa2VlcEF0dHI6ITAsYWxsb3dlZEF0dHJpYnV0ZXM6TnQsZm9yY2VLZWVwQXR0cjp2b2lkIDB9O2xldCBkYz1lby5sZW5ndGg7Zm9yKDtkYy0tOyl7Y29uc3Qg'@;
put 'QTA9ZW9bZGNdLHtuYW1lOm0wLG5hbWVzcGFjZVVSSTpUMSx2YWx1ZTplaH09QTAsb3Y9S28obTApO2xldCBXMD0idmFsdWUiPT09bTA/ZWg6bUtlKGVoKTtpZihYby5hdHRyTmFtZT1vdixYby5hdHRyVmFsdWU9VzAsWG8ua2VlcEF0dHI9ITAsWG8uZm9yY2VLZWVwQXR0cj12b2lkIDAsRTMo'@;
put 'R24udXBvblNhbml0aXplQXR0cmlidXRlLG1yLFhvKSxXMD1Yby5hdHRyVmFsdWUsWnImJigiaWQiPT09b3Z8fCJuYW1lIj09PW92KSYmKFowKG0wLG1yKSxXMD0idXNlci1jb250ZW50LSIrVzApLHByJiYkMSgvKCgtLSE/fF0pPil8PFwvKHN0eWxlfHRpdGxlKS9pLFcwKSl7WjAobTAsbXIp'@;
put 'O2NvbnRpbnVlfWlmKFhvLmZvcmNlS2VlcEF0dHJ8fChaMChtMCxtciksIVhvLmtlZXBBdHRyKSljb250aW51ZTtpZigheW4mJiQxKC9cLz4vaSxXMCkpe1owKG0wLG1yKTtjb250aW51ZX1wbiYmRU8oW29pLF9pLE9uXSxrdz0+e1cwPXNFKFcwLGt3LCIgIil9KTtjb25zdCBYTj1Lbyhtci5u'@;
put 'b2RlTmFtZSk7aWYoJE4oWE4sb3YsVzApKXtpZih2biYmIm9iamVjdCI9PXR5cGVvZiBFZSYmImZ1bmN0aW9uIj09dHlwZW9mIEVlLmdldEF0dHJpYnV0ZVR5cGUmJiFUMSlzd2l0Y2goRWUuZ2V0QXR0cmlidXRlVHlwZShYTixvdikpe2Nhc2UiVHJ1c3RlZEhUTUwiOlcwPXZuLmNyZWF0ZUhU'@;
put 'TUwoVzApO2JyZWFrO2Nhc2UiVHJ1c3RlZFNjcmlwdFVSTCI6VzA9dm4uY3JlYXRlU2NyaXB0VVJMKFcwKX10cnl7VDE/bXIuc2V0QXR0cmlidXRlTlMoVDEsbTAsVzApOm1yLnNldEF0dHJpYnV0ZShtMCxXMCkseDYobXIpP1l0KG1yKTpLaGUobC5yZW1vdmVkKX1jYXRjaHt9fX1FMyhHbi5h'@;
put 'ZnRlclNhbml0aXplQXR0cmlidXRlcyxtcixudWxsKX0saXY9ZnVuY3Rpb24gdWEobXIpe2xldCBlbz1udWxsO2NvbnN0IFhvPVlOKG1yKTtmb3IoRTMoR24uYmVmb3JlU2FuaXRpemVTaGFkb3dET00sbXIsbnVsbCk7ZW89WG8ubmV4dE5vZGUoKTspRTMoR24udXBvblNhbml0aXplU2hhZG93'@;
put 'Tm9kZSxlbyxudWxsKSxHTihlbykscU4oZW8pLGVvLmNvbnRlbnQgaW5zdGFuY2VvZiBmJiZ1YShlby5jb250ZW50KTtFMyhHbi5hZnRlclNhbml0aXplU2hhZG93RE9NLG1yLG51bGwpfTtyZXR1cm4gbC5zYW5pdGl6ZT1mdW5jdGlvbih1YSl7bGV0IG1yPWFyZ3VtZW50cy5sZW5ndGg+MSYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxlbz1udWxsLFhvPW51bGwsZGM9bnVsbCxBMD1udWxsO2lmKFZsPSF1YSxWbCYmKHVhPSJceDNjIS0tXHgzZSIpLCJzdHJpbmciIT10eXBlb2YgdWEmJiFRZyh1YSkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB1YS50b1N0cmlu'@;
put 'Zyl0aHJvdyBsRSgidG9TdHJpbmcgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigic3RyaW5nIiE9dHlwZW9mKHVhPXVhLnRvU3RyaW5nKCkpKXRocm93IGxFKCJkaXJ0eSBpcyBub3QgYSBzdHJpbmcsIGFib3J0aW5nIil9aWYoIWwuaXNTdXBwb3J0ZWQpcmV0dXJuIHVhO2lmKGRyfHxWQShtciks'@;
put 'bC5yZW1vdmVkPVtdLCJzdHJpbmciPT10eXBlb2YgdWEmJihJYT0hMSksSWEpe2lmKHVhLm5vZGVOYW1lKXtjb25zdCBlaD1Lbyh1YS5ub2RlTmFtZSk7aWYoIXBvW2VoXXx8dHJbZWhdKXRocm93IGxFKCJyb290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBjYW5ub3QgYmUgc2FuaXRpemVkIGlu'@;
put 'LXBsYWNlIil9fWVsc2UgaWYodWEgaW5zdGFuY2VvZiBNKWVvPVVzKCJceDNjIS0tLS1ceDNlIiksWG89ZW8ub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKHVhLCEwKSwxPT09WG8ubm9kZVR5cGUmJiJCT0RZIj09PVhvLm5vZGVOYW1lfHwiSFRNTCI9PT1Yby5ub2RlTmFtZT9lbz1Ybzplby5h'@;
put 'cHBlbmRDaGlsZChYbyk7ZWxzZXtpZighWm4mJiFwbiYmISRuJiYtMT09PXVhLmluZGV4T2YoIjwiKSlyZXR1cm4gdm4mJk5yP3ZuLmNyZWF0ZUhUTUwodWEpOnVhO2lmKGVvPVVzKHVhKSwhZW8pcmV0dXJuIFpuP251bGw6TnI/Q246IiJ9ZW8mJlVyJiZZdChlby5maXJzdENoaWxkKTtjb25z'@;
put 'dCBtMD1ZTihJYT91YTplbyk7Zm9yKDtkYz1tMC5uZXh0Tm9kZSgpOylHTihkYykscU4oZGMpLGRjLmNvbnRlbnQgaW5zdGFuY2VvZiBmJiZpdihkYy5jb250ZW50KTtpZihJYSlyZXR1cm4gdWE7aWYoWm4pe2lmKHNyKWZvcihBMD1Dci5jYWxsKGVvLm93bmVyRG9jdW1lbnQpO2VvLmZpcnN0'@;
put 'Q2hpbGQ7KUEwLmFwcGVuZENoaWxkKGVvLmZpcnN0Q2hpbGQpO2Vsc2UgQTA9ZW87cmV0dXJuKE50LnNoYWRvd3Jvb3R8fE50LnNoYWRvd3Jvb3Rtb2RlKSYmKEEwPWdyLmNhbGwoZCxBMCwhMCkpLEEwfWxldCBUMT0kbj9lby5vdXRlckhUTUw6ZW8uaW5uZXJIVE1MO3JldHVybiAkbiYmcG9b'@;
put 'IiFkb2N0eXBlIl0mJmVvLm93bmVyRG9jdW1lbnQmJmVvLm93bmVyRG9jdW1lbnQuZG9jdHlwZSYmZW8ub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUmJiQxKG4yZSxlby5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihUMT0iPCFET0NUWVBFICIrZW8ub3duZXJEb2N1bWVudC5kb2N0'@;
put 'eXBlLm5hbWUrIj5cbiIrVDEpLHBuJiZFTyhbb2ksX2ksT25dLGVoPT57VDE9c0UoVDEsZWgsIiAiKX0pLHZuJiZOcj92bi5jcmVhdGVIVE1MKFQxKTpUMX0sbC5zZXRDb25maWc9ZnVuY3Rpb24oKXtWQShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVu'@;
put 'dHNbMF06e30pLGRyPSEwfSxsLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKCl7TTY9bnVsbCxkcj0hMX0sbC5pc1ZhbGlkQXR0cmlidXRlPWZ1bmN0aW9uKHVhLG1yLGVvKXtNNnx8VkEoe30pO2NvbnN0IFhvPUtvKHVhKSxkYz1Lbyhtcik7cmV0dXJuICROKFhvLGRjLGVvKX0sbC5hZGRIb29rPWZ1'@;
put 'bmN0aW9uKHVhLG1yKXsiZnVuY3Rpb24iPT10eXBlb2YgbXImJmFFKEduW3VhXSxtcil9LGwucmVtb3ZlSG9vaz1mdW5jdGlvbih1YSxtcil7aWYodm9pZCAwIT09bXIpe2NvbnN0IGVvPWZLZShHblt1YV0sbXIpO3JldHVybi0xPT09ZW8/dm9pZCAwOnBLZShHblt1YV0sZW8sMSlbMF19cmV0'@;
put 'dXJuIEtoZShHblt1YV0pfSxsLnJlbW92ZUhvb2tzPWZ1bmN0aW9uKHVhKXtHblt1YV09W119LGwucmVtb3ZlQWxsSG9va3M9ZnVuY3Rpb24oKXtHbj17YWZ0ZXJTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYWZ0ZXJTYW5pdGl6ZUVsZW1lbnRzOltdLGFmdGVyU2FuaXRpemVTaGFkb3dET006W10s'@;
put 'YmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzOltdLGJlZm9yZVNhbml0aXplRWxlbWVudHM6W10sYmVmb3JlU2FuaXRpemVTaGFkb3dET006W10sdXBvblNhbml0aXplQXR0cmlidXRlOltdLHVwb25TYW5pdGl6ZUVsZW1lbnQ6W10sdXBvblNhbml0aXplU2hhZG93Tm9kZTpbXX19LGx9KCk7ZnVu'@;
put 'Y3Rpb24gYTJlKGMpe2NvbnN0IGw9Yy5sZW5ndGg7bGV0IGE9MDtmb3IoO2E8bDspY1thXT1bY1thXV0sYSs9MX1mdW5jdGlvbiBpJChjLGwpe2NvbnN0IGE9bC5sZW5ndGg7bGV0IGQ9MDtmb3IoO2Q8YTspYy5wdXNoKGxbZF0pLGQrPTF9ZnVuY3Rpb24gZEUoYyl7Y29uc3QgbD1bXTtpZigh'@;
put 'Y3x8MD09PWMubGVuZ3RofHwhY1swXXx8MD09PWNbMF0ubGVuZ3RoKXJldHVybiBsO2NvbnN0IGE9Yy5sZW5ndGgsZD1jWzBdLmxlbmd0aDtmb3IobGV0IGg9MDtoPGE7aCsrKWZvcihsZXQgZj0wO2Y8ZDtmKyspbFtmXXx8KGxbZl09W10pLGxbZl1baF09Y1toXVtmXTtyZXR1cm4gbH1mdW5j'@;
put 'dGlvbiBLdShjLGwsYSxkKXtsZXQgaD0tMSxmPWMsdj1hO0FycmF5LmlzQXJyYXkoYyl8fChmPUFycmF5LmZyb20oYykpO2NvbnN0IE09Zi5sZW5ndGg7Zm9yKGQmJk0mJihoKz0xLHY9ZltoXSksaCs9MTtoPE07KXY9bCh2LGZbaF0saCxmKSxoKz0xO3JldHVybiB2fWZ1bmN0aW9uIERtKGMs'@;
put 'bCl7bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShjKXx8KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aCxmPVtdO2xldCB2PS0xO2Zvcig7YTxoOyl7Y29uc3QgTT1kW2FdO2woTSxhLGQpJiYodis9MSxmW3ZdPU0pLGErPTF9cmV0dXJuIGZ9ZnVuY3Rpb24geXMoYyxsKXtsZXQg'@;
put 'YT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoLGY9W107bGV0IHY9LTE7Zm9yKDthPGg7KXYrPTEsZlt2XT1sKGRbYV0sYSxkKSxhKz0xO3JldHVybiBmfWZ1bmN0aW9uIFluKGMsbCl7bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShj'@;
put 'KXx8KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aDtmb3IoO2E8aCYmITEhPT1sKGRbYV0sYSxkKTspYSs9MTtyZXR1cm4gY31mdW5jdGlvbiBzMmUoYyl7cmV0dXJuIEt1KGMsKGwsYSk9PmwrYSwwKX1mdW5jdGlvbiBSS2UoYyl7cmV0dXJuIEt1KGMsKGwsYSk9Pmw+YT9sOmEs'@;
put 'QXJyYXkuaXNBcnJheShjKT9jWzBdOnZvaWQgMCl9ZnVuY3Rpb24gTEtlKGMpe3JldHVybiBLdShjLChsLGEpPT5sPGE/bDphLEFycmF5LmlzQXJyYXkoYyk/Y1swXTp2b2lkIDApfWZ1bmN0aW9uIE9LZShjKXtyZXR1cm4gYy5sZW5ndGg/czJlKGMpL2MubGVuZ3RoOjB9ZnVuY3Rpb24gbDJl'@;
put 'KGMpe3JldHVybiBLdShjLChsLGEpPT5sLmNvbmNhdChBcnJheS5pc0FycmF5KGEpP2wyZShhKTphKSxbXSl9ZnVuY3Rpb24gYzJlKGMpe2NvbnN0IGw9W107cmV0dXJuIFluKGMsYT0+ey0xPT09bC5pbmRleE9mKGEpJiZsLnB1c2goYSl9KSxsfWZ1bmN0aW9uIG8kKCl7Zm9yKHZhciBjPWFy'@;
put 'Z3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF07bGV0IGY9ZDtyZXR1cm4gWW4oaCx2PT57Zj1mLmZpbHRlcihNPT4hdi5pbmNsdWRlcyhNKSl9KSxmfWZ1bmN0aW9uIFBLZSgpe2Zvcih2YXIgYz1h'@;
put 'cmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdO2xldCBmPWQ7cmV0dXJuIFluKGgsdj0+e2Y9Zi5maWx0ZXIoTT0+di5pbmNsdWRlcyhNKSl9KSxmfWZ1bmN0aW9uIEZLZSgpe2Zvcih2YXIgYz1h'@;
put 'cmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09Wy4uLmxdLGY9bmV3IFNldChkKTtyZXR1cm4gWW4oaCx2PT57WW4odixNPT57Zi5oYXMoTSl8fGYuYWRkKE0pfSl9KSxBcnJheS5mcm9tKGYpfWZ1bmN0aW9u'@;
put 'IGEkKGMpe3JldHVybiBjLnNwbGl0KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiICIpfWZ1bmN0aW9uIGdsKGMpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtkLTFd'@;
put 'PWFyZ3VtZW50c1tkXTtyZXR1cm4gS3UoYywoZix2LE0pPT5mK3YucmVwbGFjZSgvXHI/XG5ccyovZywiIikrKGFbTV0/YVtNXToiIiksIiIpLnRyaW0oKX1mdW5jdGlvbiBsYyhjKXtsZXQgbDtzd2l0Y2godHlwZW9mIGMpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6bD1gJHtjfWA7YnJl'@;
put 'YWs7Y2FzZSJvYmplY3QiOmw9bnVsbD09PWM/IiI6Yy50b1N0cmluZygpO2JyZWFrO2Nhc2UidW5kZWZpbmVkIjpsPSIiO2JyZWFrO2RlZmF1bHQ6bD1jLnRvU3RyaW5nKCl9cmV0dXJuIGx9ZnVuY3Rpb24gRm8oYyl7cmV0dXJuIHR5cGVvZiBjPCJ1In1mdW5jdGlvbiB5YyhjKXtyZXR1cm4g'@;
put 'dHlwZW9mIGM+InUifWZ1bmN0aW9uIHpjKGMpe3JldHVybiBudWxsPT09Y3x8IiI9PT1jfHx5YyhjKX1mdW5jdGlvbiB1MmUoYyl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9Y29uc3QgaEU9Imxlbmd0aCIsZkU9Yz0+cGFyc2VJ'@;
put 'bnQoYywxNiksZDJlPWM9PnBhcnNlSW50KGMsMTApLGtPPShjLGwsYSk9PmMuc3Vic3RyKGwsYSkscEU9Yz0+Yy5jb2RlUG9pbnRBdCgwKS02NSxzJD1jPT5gJHtjfWAucmVwbGFjZSgvXC0vZywiIiksSEtlPWM9PmZFKGtPKHMkKGMpLGZFKCIxMiIpLHBFKCJGIikpKS8oZkUoa08ocyQoYyks'@;
put 'cEUoIkIiKSx+fiFbXVtoRV0pKXx8OSksTktlPSgpPT50eXBlb2YgbG9jYXRpb248InUiJiYvXihbYS16MC05XC1dK1wuKT9ceDY4XHg2MVx4NkVceDY0XHg3M1x4NkZceDZFXHg3NFx4NjFceDYyXHg2Q1x4NjVceDJFXHg2M1x4NkZceDZEJC9pLnRlc3QobG9jYXRpb24uaG9zdCk7bGV0IGgy'@;
put 'ZT0hMTtjb25zdCBmMmU9e2ludmFsaWQ6KCk9PmdsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzdXBwb3J0QGhhbmRzb250YWJsZS5jb20uYCxleHBpcmVkOmM9Pnts'@;
put 'ZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBnbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4gUmVuZXcg'@;
put 'eW91ciBsaWNlbnNlIGtleSBhdCBoYW5kc29udGFibGUuY29tIG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3JceDIwCiAgICB0byAke2x9LiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdCB1cyBhdCBzYWxlc0BoYW5kc29udGFibGUuY29tLmB9LG1pc3Npbmc6'@;
put 'KCk9PmdsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgbWlzc2luZy4gVXNlIHlvdXIgcHVyY2hhc2VkIGtleSB0byBhY3RpdmF0ZSB0aGUgcHJvZHVjdC5ceDIwCiAgICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGFjdGl2YXRlIEhhbmRzb250YWJsZSB0byB1c2Ug'@;
put 'Zm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5XHgyMAogICAgcGFzc2luZyB0aGUga2V5OiAnbm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24nLiBJZiB5b3UgbmVlZCBhbnkgaGVscCwgY29udGFjdFx4MjAKICAgIHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLG5vbl9j'@;
put 'b21tZXJjaWFsOigpPT4iIn0scDJlPXtpbnZhbGlkOigpPT5nbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIGludmFsaWQuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIgdGFy'@;
put 'Z2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gb24gaG93IHRvXHgyMAogICAgaW5zdGFsbCBpdCBwcm9wZXJseSBvciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxleHBpcmVkOmM9'@;
put 'PntsZXR7a2V5VmFsaWRpdHlEYXRlOmwsaG90VmVyc2lvbjphfT1jO3JldHVybiBnbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGV4cGlyZWQgb24gJHtsfSwgYW5kIGlzIG5vdCB2YWxpZCBmb3IgdGhlIGluc3RhbGxlZFx4MjAKICAgIHZlcnNpb24gJHthfS4gPGEg'@;
put 'aHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL3ByaWNpbmciIHRhcmdldD0iX2JsYW5rIj5SZW5ldzwvYT4geW91clx4MjAKICAgIGxpY2Vuc2Uga2V5IG9yIGRvd25ncmFkZSB0byBhIHZlcnNpb24gcmVsZWFzZWQgcHJpb3IgdG8gJHtsfS4gSWYgeW91IG5lZWQgYW55XHgyMAogICAg'@;
put 'aGVscCwgY29udGFjdCB1cyBhdCA8YSBocmVmPSJtYWlsdG86c2FsZXNAaGFuZHNvbnRhYmxlLmNvbSI+c2FsZXNAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYH0sbWlzc2luZzooKT0+Z2xgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2UgeW91ciBw'@;
put 'dXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29tbWVy'@;
put 'Y2lhbC1hbmQtZXZhbHVhdGlvbicuXHgyMAogICAgPGEgaHJlZj0iaHR0cHM6Ly9oYW5kc29udGFibGUuY29tL2RvY3MvdHV0b3JpYWwtbGljZW5zZS1rZXkuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPlJlYWQgbW9yZTwvYT4gYWJvdXQgaXQgaW5ceDIwCiAgICB0aGUgZG9jdW1lbnRhdGlvbiBv'@;
put 'ciBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzdXBwb3J0QGhhbmRzb250YWJsZS5jb20iPnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbTwvYT4uYCxub25fY29tbWVyY2lhbDooKT0+IiJ9O2Z1bmN0aW9uIGcyZShjLGwpe2NvbnN0IGE9IXpjKGMpLGQ9InN0cmluZyI9PXR5cGVvZiBj'@;
put 'JiYibm9uLWNvbW1lcmNpYWwtYW5kLWV2YWx1YXRpb24iPT09Yy50b0xvd2VyQ2FzZSgpLGg9IjE1LjMuMCI7bGV0IGYsdj0iaW52YWxpZCIsTT0iaW52YWxpZCI7Y29uc3QgRD1mdW5jdGlvbiBWS2UoYyl7bGV0IGw9W11baEVdLGE9bDtpZihjW2hFXSE9PXBFKCJaIikpcmV0dXJuITE7Zm9y'@;
put 'KGxldCBkPSIiLGg9IkI8SDRQKyIuc3BsaXQoIiIpLGY9cEUoaC5zaGlmdCgpKTtmO2Y9cEUoaC5zaGlmdCgpfHwiQSIpKS0tZjwiIltoRV0/YXw9KGQyZShgJHtkMmUoZkUoZCkrKGZFKGtPKGMsTWF0aC5hYnMoZiksMikpK1tdKS5wYWRTdGFydCgyLCIwIikpfWApJTk3fHwyKT4+MTpkPWtP'@;
put 'KGMsZixmPzE9PT1oW2hFXT85Ojg6Nik7cmV0dXJuIGE9PT1sfShjPXMkKGN8fCIiKSk7aWYoYXx8ZHx8RClpZihEKXtjb25zdCBaPU9hKCIyOS8wNC8yMDI1IiwiREQvTU0vWVlZWSIpLG5lPU1hdGguZmxvb3IoWi50b0RhdGUoKS5nZXRUaW1lKCkvODY0ZTUpLGNlPUhLZShjKTtmPU9hKDg2'@;
put 'NGU1KihjZSsxKSwieCIpLmZvcm1hdCgiTU1NTSBERCwgWVlZWSIpLG5lPmNlPyh2PSJleHBpcmVkIixNPSJleHBpcmVkIik6KHY9InZhbGlkIixNPSJ2YWxpZCIpfWVsc2UgZD8odj0ibm9uX2NvbW1lcmNpYWwiLE09InZhbGlkIik6KHY9ImludmFsaWQiLE09ImludmFsaWQiKTtlbHNlIHY9'@;
put 'Im1pc3NpbmciLE09Im1pc3NpbmciO2lmKE5LZSgpJiYodj0idmFsaWQiLE09InZhbGlkIiksIWgyZSYmInZhbGlkIiE9PXYmJihmMmVbdl0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pJiZjb25zb2xlWyJub25fY29tbWVyY2lhbCI9PT12PyJpbmZvIjoid2FybiJdKGYyZVt2'@;
put 'XSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkpLGgyZT0hMCksInZhbGlkIiE9PU0mJmwucGFyZW50Tm9kZSYmcDJlW01dKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSl7Y29uc3QgbmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bmUuY2xhc3NOYW1l'@;
put 'PSJoYW5kc29udGFibGUgaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIixuZS5pbm5lckhUTUw9cDJlW01dKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSxsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5lLGwubmV4dFNpYmxpbmcpfX1mdW5jdGlvbiBwMShjKXtyZXR1cm4gY1sw'@;
put 'XS50b1VwcGVyQ2FzZSgpK2Muc3Vic3RyKDEpfWZ1bmN0aW9uIEJLZSgpe2NvbnN0IGM9W107Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07bGV0IGg9YS5sZW5ndGg7Zm9yKDtoOyl7aC09MTtjb25zdCBmPWxj'@;
put 'KGFbaF0pLnRvTG93ZXJDYXNlKCk7LTE9PT1jLmluZGV4T2YoZikmJmMucHVzaChmKX1yZXR1cm4gMT09PWMubGVuZ3RofWZ1bmN0aW9uIGwkKCl7ZnVuY3Rpb24gYygpe3JldHVybiBNYXRoLmZsb29yKDY1NTM2KigxK01hdGgucmFuZG9tKCkpKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEp'@;
put 'fXJldHVybiBjKCkrYygpK2MoKStjKCl9ZnVuY3Rpb24gYyQoYyl7cmV0dXJuL14oWzAtOV1bMC05XT8lJCl8KF4xMDAlJCkvLnRlc3QoYyl9ZnVuY3Rpb24gdSQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3JldHVy'@;
put 'bmAke2N9YC5yZXBsYWNlKC8oPzpcXCk/XFsoW15bXF1dKyldL2csKGEsZCk9PiJcXCI9PT1hLmNoYXJBdCgwKT9hLnN1YnN0cigxLGEubGVuZ3RoLTEpOnZvaWQgMD09PWxbZF0/IiI6bFtkXSl9ZnVuY3Rpb24gZCQoYyl7cmV0dXJuIERPKGAke2N9YCx7QUxMT1dFRF9UQUdTOltdfSl9ZnVu'@;
put 'Y3Rpb24gRE8oYyxsKXtyZXR1cm4gSUtlLnNhbml0aXplKGMsbCl9Y29uc3QgRjc9Yz0+WyJ0YWJpbmRleCIsY10scUtlPSgpPT5bInJvbGUiLCJjaGVja2JveCJdLGdFPWM9PlsiYXJpYS1sYWJlbCIsY10sSDc9KCk9PlsiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sYjJlPWM9PlsiYXJpYS1oYXNw'@;
put 'b3B1cCIsY10seTJlPWM9PlsiYXJpYS1yb3djb3VudCIsY10sSU89Yz0+WyJhcmlhLWNvbGNvdW50IixjXSxfMmU9Yz0+WyJhcmlhLXJvd2luZGV4IixjXSxmJD1jPT5bImFyaWEtY29saW5kZXgiLGNdLFAyPWM9PlsiYXJpYS1leHBhbmRlZCIsY10sdzJlPSgpPT5bImFyaWEtcmVhZG9ubHki'@;
put 'LCJ0cnVlIl0sQzJlPSgpPT5bImFyaWEtaW52YWxpZCIsInRydWUiXSxTMmU9Yz0+WyJhcmlhLWNoZWNrZWQiLGNdLGlxZT1jPT5bImFyaWEtY29udHJvbHMiLGNdLGFxZT1jPT5bImFyaWEtbGl2ZSIsY10sc3FlPWM9PlsiYXJpYS1yZWxldmFudCIsY10sbHFlPWM9PlsiYXJpYS1zZXRzaXpl'@;
put 'IixjXSxjcWU9Yz0+WyJhcmlhLXBvc2luc2V0IixjXTtmdW5jdGlvbiBNMmUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsYT0tMSxkPW51bGwsaD1jO2Zvcig7bnVsbCE9PWg7KXtpZihhPT09bCl7ZD1oO2JyZWFrfWgu'@;
put 'aG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9oPWguaG9zdDooYSs9MSxoPWgucGFyZW50Tm9kZSl9cmV0dXJuIGR9ZnVuY3Rpb24gbUUoYyxsKXtjb25zdCBhPWMuY2xvc2VzdCgiLmhhbmRzb250YWJsZSIpO3JldHVybiEhYSYmKGEucGFyZW50Tm9kZT09'@;
put 'PWx8fGE9PT1sKX1mdW5jdGlvbiB4MmUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCkmJmMuZnJhbWVFbGVtZW50fWZ1bmN0aW9uIE43KGMpe3JldHVybiB4MmUoYykmJmMucGFyZW50fWZ1bmN0aW9uIHVxZShjKXtyZXR1cm4hIU9iamVjdC5nZXRQcm90b3R5cGVP'@;
put 'ZihjLnBhcmVudCl9ZnVuY3Rpb24gSW0oYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7Y29uc3R7RUxFTUVOVF9OT0RFOmQsRE9DVU1FTlRfRlJB'@;
put 'R01FTlRfTk9ERTpofT1Ob2RlO2xldCBmPWM7Zm9yKDtudWxsIT1mJiZmIT09YTspe2NvbnN0e25vZGVUeXBlOnYsbm9kZU5hbWU6TX09ZjtpZih2PT09ZCYmKGwuaW5jbHVkZXMoTSl8fGwuaW5jbHVkZXMoZikpKXJldHVybiBmO2NvbnN0e2hvc3Q6RH09ZjtmPUQmJnY9PT1oP0Q6Zi5wYXJl'@;
put 'bnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIHZFKGMsbCxhKXtjb25zdCBkPVtdO2xldCBoPWM7Zm9yKDtoJiYoaD1JbShoLGwsYSksaCYmKCFhfHxhLmNvbnRhaW5zKGgpKSk7KWQucHVzaChoKSxoPWguaG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9o'@;
put 'Lmhvc3Q6aC5wYXJlbnROb2RlO2NvbnN0IGY9ZC5sZW5ndGg7cmV0dXJuIGY/ZFtmLTFdOm51bGx9ZnVuY3Rpb24gRTJlKGMsbCl7Y29uc3QgYT17ZWxlbWVudDp2b2lkIDAsY2xhc3NOYW1lczpbXX07bGV0IGQ9Yztmb3IoO251bGwhPT1kJiZkIT09Yy5vd25lckRvY3VtZW50LmRvY3VtZW50'@;
put 'RWxlbWVudCYmIWEuZWxlbWVudDspe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmZC5jbGFzc0xpc3QuY29udGFpbnMobCkpYS5lbGVtZW50PWQsYS5jbGFzc05hbWVzLnB1c2gobCk7ZWxzZSBpZihsIGluc3RhbmNlb2YgUmVnRXhwKXtjb25zdCBoPUFycmF5LmZyb20oZC5jbGFzc0xpc3QpLmZp'@;
put 'bHRlcihmPT5sLnRlc3QoZikpO2gubGVuZ3RoJiYoYS5lbGVtZW50PWQsYS5jbGFzc05hbWVzLnB1c2goLi4uaCkpfWQ9ZC5wYXJlbnRFbGVtZW50fXJldHVybiBhfWZ1bmN0aW9uIFJtKGMsbCl7bGV0IGE9Yy5wYXJlbnROb2RlLGQ9W107Zm9yKCJzdHJpbmciPT10eXBlb2YgbD9kPUFycmF5'@;
put 'LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuZGVmYXVsdFZpZXc/Yy5xdWVyeVNlbGVjdG9yQWxsKGwpOmMub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGwpLDApOmQucHVzaChsKTtudWxsIT09YTspe2lmKGQuaW5kZXhPZihhKT4tMSlyZXR1cm4hMDthPWEucGFyZW50Tm9kZX1yZXR1'@;
put 'cm4hMX1mdW5jdGlvbiBUMmUoYyl7bGV0IGw9MCxhPWM7aWYoYS5wcmV2aW91c1NpYmxpbmcpZm9yKDthPWEucHJldmlvdXNTaWJsaW5nOylsKz0xO3JldHVybiBsfWZ1bmN0aW9uIExtKGMsbCxhKXtjb25zdCBkPWEucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKGAuaHRfY2xvbmVfJHtj'@;
put 'fWApO3JldHVybiBkP2QuY29udGFpbnMobCk6bnVsbH1mdW5jdGlvbiBBMmUoYyl7cmV0dXJuIGMmJmMubGVuZ3RoP2MuZmlsdGVyKGw9PiEhbCk6W119ZnVuY3Rpb24gazJlKGMsbCl7aWYoIWN8fCFjLmxlbmd0aClyZXR1cm4gbD97cmVnZXhGcmVlOltdLHJlZ2V4ZXM6W119OltdO2NvbnN0'@;
put 'IGE9W10sZD1bXTtyZXR1cm4gZC5wdXNoKC4uLmMuZmlsdGVyKGg9Pntjb25zdCBmPWggaW5zdGFuY2VvZiBSZWdFeHA7cmV0dXJuIGYmJmwmJmEucHVzaChoKSwhZn0pKSxsP3tyZWdleEZyZWU6ZCxyZWdleGVzOmF9OmR9ZnVuY3Rpb24gcGEoYyxsKXtyZXR1cm4gdm9pZCAwIT09Yy5jbGFz'@;
put 'c0xpc3QmJiJzdHJpbmciPT10eXBlb2YgbCYmIiIhPT1sJiZjLmNsYXNzTGlzdC5jb250YWlucyhsKX1mdW5jdGlvbiBUaShjLGwpeyJzdHJpbmciPT10eXBlb2YgbCYmKGw9bC5zcGxpdCgiICIpKSwobD1BMmUobCkpLmxlbmd0aD4wJiZjLmNsYXNzTGlzdC5hZGQoLi4ubCl9ZnVuY3Rpb24g'@;
put 'Y2EoYyxsKXsic3RyaW5nIj09dHlwZW9mIGw/bD1sLnNwbGl0KCIgIik6bCBpbnN0YW5jZW9mIFJlZ0V4cCYmKGw9W2xdKTtsZXR7cmVnZXhGcmVlOmEscmVnZXhlczpkfT1rMmUobCwhMCk7YT1BMmUoYSksYS5sZW5ndGg+MCYmYy5jbGFzc0xpc3QucmVtb3ZlKC4uLmEpLGQuZm9yRWFjaCho'@;
put 'PT57Yy5jbGFzc0xpc3QuZm9yRWFjaChmPT57aC50ZXN0KGYpJiZjLmNsYXNzTGlzdC5yZW1vdmUoZil9KX0pfWZ1bmN0aW9uIHZhKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+Mj9h'@;
put 'cmd1bWVudHNbMl06dm9pZCAwO0FycmF5LmlzQXJyYXkobCl8fChsPVtbbCxhXV0pLGwuZm9yRWFjaChkPT57QXJyYXkuaXNBcnJheShkKSYmIiIhPT1kWzBdJiZjLnNldEF0dHJpYnV0ZSguLi5kKX0pfWZ1bmN0aW9uIFY3KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTsic3RyaW5nIj09dHlwZW9mIGw/bD1sLnNwbGl0KCIgIik6bCBpbnN0YW5jZW9mIFJlZ0V4cCYmKGw9W2xdKTtjb25zdHtyZWdleEZyZWU6YSxyZWdleGVzOmR9PWsyZShsLCEwKTthLmZvckVhY2goaD0+eyIiIT09aCYmYy5yZW1vdmVBdHRy'@;
put 'aWJ1dGUoaCl9KSxkLmZvckVhY2goaD0+e2MuZ2V0QXR0cmlidXRlTmFtZXMoKS5mb3JFYWNoKGY9PntoLnRlc3QoZikmJmMucmVtb3ZlQXR0cmlidXRlKGYpfSl9KX1mdW5jdGlvbiBnJChjKXtpZigzPT09Yy5ub2RlVHlwZSljLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyk7ZWxzZSBpZihb'@;
put 'IlRBQkxFIiwiVEhFQUQiLCJUQk9EWSIsIlRGT09UIiwiVFIiXS5pbmRleE9mKGMubm9kZU5hbWUpPi0xKXtjb25zdCBsPWMuY2hpbGROb2Rlcztmb3IobGV0IGE9bC5sZW5ndGgtMTthPj0wO2EtLSlnJChsW2FdKX19ZnVuY3Rpb24geHAoYyl7bGV0IGw7Zm9yKDtsPWMubGFzdENoaWxkOylj'@;
put 'LnJlbW92ZUNoaWxkKGwpfWNvbnN0IEQyZT0vKDwoLiopPnwmKC4qKTspLztmdW5jdGlvbiBCNyhjLGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07RDJlLnRlc3QobCk/Yy5pbm5lckhUTUw9YT9ETyhsKTpsOk9tKGMs'@;
put 'bCl9ZnVuY3Rpb24gT20oYyxsKXtjb25zdCBhPWMuZmlyc3RDaGlsZDthJiYzPT09YS5ub2RlVHlwZSYmbnVsbD09PWEubmV4dFNpYmxpbmc/YS50ZXh0Q29udGVudD1sOih4cChjKSxjLmFwcGVuZENoaWxkKGMub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsKSkpfWZ1bmN0aW9uIGo3'@;
put 'KGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPWMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztsZXQgZD1jO2Zvcig7ZCE9PWw7KXtpZihudWxsPT09ZClyZXR1cm4hMTtpZihkLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXtpZihk'@;
put 'Lmhvc3Qpe2lmKGQuaG9zdC5pbXBsKXJldHVybiBqNyhkLmhvc3QuaW1wbCk7aWYoZC5ob3N0KXJldHVybiBqNyhkLmhvc3QpO3Rocm93IG5ldyBFcnJvcigiTG9zdCBpbiBXZWIgQ29tcG9uZW50cyB3b3JsZCIpfXJldHVybiExfWlmKCJub25lIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShkKS5k'@;
put 'aXNwbGF5KXJldHVybiExO2Q9ZC5wYXJlbnROb2RlfXJldHVybiEwfWZ1bmN0aW9uIEkyZShjKXtjb25zdCBhPWMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztsZXQgZD1jO2Zvcig7ZC5wYXJlbnROb2RlOyl7aWYoIjBweCI9PT1kLnN0eWxlLmhlaWdodHx8IjAiPT09ZC5zdHlsZS5oZWln'@;
put 'aHQpcmV0dXJuImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUoZCkub3ZlcmZsb3c7ZD1kLnBhcmVudE5vZGV9cmV0dXJuITF9ZnVuY3Rpb24gajAoYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQsYT1sLmRlZmF1bHRWaWV3LGQ9bC5kb2N1bWVudEVsZW1lbnQ7bGV0IGYsdixNLGg9Yztm'@;
put 'b3IoZj1oLm9mZnNldExlZnQsdj1oLm9mZnNldFRvcCxNPWg7KGg9aC5vZmZzZXRQYXJlbnQpJiZoIT09bC5ib2R5JiYib2Zmc2V0TGVmdCJpbiBoOylmKz1oLm9mZnNldExlZnQsdis9aC5vZmZzZXRUb3AsTT1oO3JldHVybiBNJiYiZml4ZWQiPT09TS5zdHlsZS5wb3NpdGlvbiYmKGYrPWEu'@;
put 'cGFnZVhPZmZzZXR8fGQuc2Nyb2xsTGVmdCx2Kz1hLnBhZ2VZT2Zmc2V0fHxkLnNjcm9sbFRvcCkse2xlZnQ6Zix0b3A6dn19ZnVuY3Rpb24gbSQoKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWX1m'@;
put 'dW5jdGlvbiBSTygpe3JldHVybihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93KS5zY3JvbGxYfWZ1bmN0aW9uIExPKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx'@;
put 'XTp3aW5kb3c7cmV0dXJuIGM9PT1sP20kKGwpOmMuc2Nyb2xsVG9wfWZ1bmN0aW9uIHYkKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7cmV0dXJuIGM9PT1sP1JPKGwpOmMuc2Nyb2xsTGVmdH1mdW5jdGlvbiBi'@;
put 'RShjKXtsZXQgbD1jLm93bmVyRG9jdW1lbnQsYT1sP2wuZGVmYXVsdFZpZXc6dm9pZCAwO2x8fChsPWMuZG9jdW1lbnQ/Yy5kb2N1bWVudDpjLGE9bC5kZWZhdWx0Vmlldyk7Y29uc3QgZD1bImF1dG8iLCJzY3JvbGwiXTtsZXQgaD1jLnBhcmVudE5vZGU7Zm9yKDtoJiZoLnN0eWxlJiZsLmJv'@;
put 'ZHkhPT1oOyl7bGV0e292ZXJmbG93OmYsb3ZlcmZsb3dYOnYsb3ZlcmZsb3dZOk19PWguc3R5bGU7aWYoW2YsdixNXS5pbmNsdWRlcygic2Nyb2xsIikpcmV0dXJuIGg7aWYoKHtvdmVyZmxvdzpmLG92ZXJmbG93WDp2LG92ZXJmbG93WTpNfT1hLmdldENvbXB1dGVkU3R5bGUoaCkpLGQuaW5j'@;
put 'bHVkZXMoZil8fGQuaW5jbHVkZXModil8fGQuaW5jbHVkZXMoTSl8fGguY2xpZW50SGVpZ2h0PD1oLnNjcm9sbEhlaWdodCsxJiYoZC5pbmNsdWRlcyhNKXx8ZC5pbmNsdWRlcyhmKSl8fGguY2xpZW50V2lkdGg8PWguc2Nyb2xsV2lkdGgrMSYmKGQuaW5jbHVkZXModil8fGQuaW5jbHVkZXMo'@;
put 'ZikpKXJldHVybiBoO2g9aC5wYXJlbnROb2RlfXJldHVybiBhfWZ1bmN0aW9uIFIyZShjKXtyZXR1cm4gYy5zY3JvbGxIZWlnaHQtYy5jbGllbnRIZWlnaHR9ZnVuY3Rpb24gTDJlKGMpe3JldHVybiBjLnNjcm9sbFdpZHRoLWMuY2xpZW50V2lkdGh9ZnVuY3Rpb24gb18oYyl7Y29uc3QgbD1j'@;
put 'Lm93bmVyRG9jdW1lbnQsYT1sLmRlZmF1bHRWaWV3O2xldCBkPWMucGFyZW50Tm9kZTtmb3IoO2QmJmQuc3R5bGUmJmwuYm9keSE9PWQ7KXtpZigidmlzaWJsZSIhPT1kLnN0eWxlLm92ZXJmbG93JiYiIiE9PWQuc3R5bGUub3ZlcmZsb3cpcmV0dXJuIGQ7Y29uc3QgaD1hLmdldENvbXB1dGVk'@;
put 'U3R5bGUoZCksZj1bInNjcm9sbCIsImhpZGRlbiIsImF1dG8iXSx2PWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKSxNPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteSIpLEQ9aC5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdy14Iik7aWYoZi5pbmNsdWRlcyh2KXx8Zi5pbmNs'@;
put 'dWRlcyhNKXx8Zi5pbmNsdWRlcyhEKSlyZXR1cm4gZDtkPWQucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiB5RShjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp3aW5kb3c7aWYoIWMpcmV0dXJuO2lmKGM9PT1hKXJl'@;
put 'dHVybiJ3aWR0aCI9PT1sP2Ake2EuaW5uZXJXaWR0aH1weGA6ImhlaWdodCI9PT1sP2Ake2EuaW5uZXJIZWlnaHR9cHhgOnZvaWQgMDtjb25zdCBkPWMuc3R5bGVbbF07aWYoIiIhPT1kJiZ2b2lkIDAhPT1kKXJldHVybiBkO2NvbnN0IGg9YS5nZXRDb21wdXRlZFN0eWxlKGMpO3JldHVybiIi'@;
put 'IT09aFtsXSYmdm9pZCAwIT09aFtsXT9oW2xdOnZvaWQgMH1mdW5jdGlvbiBkcWUoYyxsKXtjb25zdHtzZWxlY3RvclRleHQ6YX09bDtsZXQgZD0hMTtyZXR1cm4gbC50eXBlPT09Q1NTUnVsZS5TVFlMRV9SVUxFJiZhJiYoYy5tc01hdGNoZXNTZWxlY3Rvcj9kPWMubXNNYXRjaGVzU2VsZWN0'@;
put 'b3IoYSk6Yy5tYXRjaGVzJiYoZD1jLm1hdGNoZXMoYSkpKSxkfWZ1bmN0aW9uIGF1KGMpe3JldHVybiBjLm9mZnNldFdpZHRofWZ1bmN0aW9uIE11KGMpe3JldHVybiBjLm9mZnNldEhlaWdodH1mdW5jdGlvbiBhXyhjKXtyZXR1cm4gYy5jbGllbnRIZWlnaHR8fGMuaW5uZXJIZWlnaHR9ZnVu'@;
put 'Y3Rpb24gYiQoYyl7cmV0dXJuIGMuY2xpZW50V2lkdGh8fGMuaW5uZXJXaWR0aH1mdW5jdGlvbiBocWUoYyxsLGEpe2MuYWRkRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIGZxZShjLGwsYSl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24geSQoYyl7cmV0dXJu'@;
put 'IGMuc2VsZWN0aW9uU3RhcnQ/Yy5zZWxlY3Rpb25TdGFydDowfWZ1bmN0aW9uIE8yZShjKXtyZXR1cm4gYy5zZWxlY3Rpb25FbmQ/Yy5zZWxlY3Rpb25FbmQ6MH1mdW5jdGlvbiBwcWUoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNb'@;
put 'MF06d2luZG93O2NvbnN0IGw9Yy5kb2N1bWVudDtsZXQgYT0iIjtyZXR1cm4gYy5nZXRTZWxlY3Rpb24/YT1jLmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCk6bC5zZWxlY3Rpb24mJiJDb250cm9sIiE9PWwuc2VsZWN0aW9uLnR5cGUmJihhPWwuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4'@;
put 'dCksYX1mdW5jdGlvbiBfJCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3c7Yy5nZXRTZWxlY3Rpb24mJihjLmdldFNlbGVjdGlvbigpLmVtcHR5P2MuZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTpjLmdldFNlbGVjdGlv'@;
put 'bigpLnJlbW92ZUFsbFJhbmdlcyYmYy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKSl9ZnVuY3Rpb24gX0UoYyxsLGEpe2lmKHZvaWQgMD09PWEmJihhPWwpLGMuc2V0U2VsZWN0aW9uUmFuZ2Upe2MuZm9jdXMoKTt0cnl7Yy5zZXRTZWxlY3Rpb25SYW5nZShsLGEpfWNhdGNoe2Nv'@;
put 'bnN0IGg9Yy5wYXJlbnROb2RlLGY9aC5zdHlsZS5kaXNwbGF5O2guc3R5bGUuZGlzcGxheT0iYmxvY2siLGMuc2V0U2VsZWN0aW9uUmFuZ2UobCxhKSxoLnN0eWxlLmRpc3BsYXk9Zn19fWxldCB3JCxsXztmdW5jdGlvbiBoMCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpkb2N1bWVudDtyZXR1cm4gdm9pZCAwPT09dyQmJih3JD1mdW5jdGlvbiBncWUoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZG9jdW1lbnQ7Y29uc3QgbD1jLmNyZWF0ZUVsZW1l'@;
put 'bnQoImRpdiIpO2wuc3R5bGUuaGVpZ2h0PSIyMDBweCIsbC5zdHlsZS53aWR0aD0iMTAwJSI7Y29uc3QgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Euc3R5bGUuYm94U2l6aW5nPSJjb250ZW50LWJveCIsYS5zdHlsZS5oZWlnaHQ9IjE1MHB4IixhLnN0eWxlLmxlZnQ9IjBweCIsYS5zdHls'@;
put 'ZS5vdmVyZmxvdz0iaGlkZGVuIixhLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS5zdHlsZS50b3A9IjBweCIsYS5zdHlsZS53aWR0aD0iMjAwcHgiLGEuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIixhLmFwcGVuZENoaWxkKGwpLChjLmJvZHl8fGMuZG9jdW1lbnRFbGVtZW50KS5hcHBl'@;
put 'bmRDaGlsZChhKTtjb25zdCBkPWwub2Zmc2V0V2lkdGg7YS5zdHlsZS5vdmVyZmxvdz0ic2Nyb2xsIjtsZXQgaD1sLm9mZnNldFdpZHRoO3JldHVybiBkPT09aCYmKGg9YS5jbGllbnRXaWR0aCksKGMuYm9keXx8Yy5kb2N1bWVudEVsZW1lbnQpLnJlbW92ZUNoaWxkKGEpLGQtaH0oYykpLHck'@;
put 'fWZ1bmN0aW9uIEMkKGMpe3JldHVybiBjIGluc3RhbmNlb2YgV2luZG93P2MuZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQ+Yy5pbm5lckhlaWdodDpjLm9mZnNldFdpZHRoIT09Yy5jbGllbnRXaWR0aH1mdW5jdGlvbiBTJChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFdpbmRvdz9jLmRvY3Vt'@;
put 'ZW50LmJvZHkuc2Nyb2xsV2lkdGg+Yy5pbm5lcldpZHRoOmMub2Zmc2V0SGVpZ2h0IT09Yy5jbGllbnRIZWlnaHR9ZnVuY3Rpb24gT08oYyxsLGEpe2Muc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUzZCgke2x9LCR7YX0sMClgfWZ1bmN0aW9uIG1xZShjKXtsZXQgbDtyZXR1cm4gYy5zdHls'@;
put 'ZS50cmFuc2Zvcm0mJiIiIT09KGw9Yy5zdHlsZS50cmFuc2Zvcm0pP1sidHJhbnNmb3JtIixsXTotMX1mdW5jdGlvbiB3RShjKXtjLnN0eWxlLnRyYW5zZm9ybSYmIiIhPT1jLnN0eWxlLnRyYW5zZm9ybSYmKGMuc3R5bGUudHJhbnNmb3JtPSIiKX1mdW5jdGlvbiBDRShjKXtyZXR1cm4gYyYm'@;
put 'KFsiSU5QVVQiLCJTRUxFQ1QiLCJURVhUQVJFQSJdLmluZGV4T2YoYy5ub2RlTmFtZSk+LTF8fCJ0cnVlIj09PWMuY29udGVudEVkaXRhYmxlKX1mdW5jdGlvbiBQTyhjKXtyZXR1cm4gQ0UoYykmJiExPT09Yy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iil9ZnVuY3Rpb24gdnFlKGMp'@;
put 'e1BPKGMub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8Yy5zZWxlY3QoKX1mdW5jdGlvbiBNJChjKXtyZXR1cm4hYy5wYXJlbnROb2RlfWZ1bmN0aW9uIFAyZShjLGwpe25ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZCxoKT0+e2QuZm9yRWFjaChmPT57Zi5pc0ludGVyc2VjdGluZyYm'@;
put 'bnVsbCE9PWMub2Zmc2V0UGFyZW50JiYobCgpLGgudW5vYnNlcnZlKGMpKX0pfSx7cm9vdDpjLm93bmVyRG9jdW1lbnQuYm9keX0pLm9ic2VydmUoYyl9ZnVuY3Rpb24geCQoYyl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sx'@;
put 'XSxhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgZD1jLm93bmVyRG9jdW1lbnQsaD1kLmNyZWF0ZVJhbmdlKCksZj1kLmRlZmF1bHRWaWV3LmdldFNlbGVjdGlvbigpO3ZhKGMsImNvbnRlbnRlZGl0YWJsZSIsITApLGEm'@;
put 'JnZhKGMsLi4uSDcoKSksbCYmVGkoYywiaW52aXNpYmxlU2VsZWN0aW9uIiksaC5zZWxlY3ROb2RlQ29udGVudHMoYyksZi5yZW1vdmVBbGxSYW5nZXMoKSxmLmFkZFJhbmdlKGgpfWZ1bmN0aW9uIEUkKGMpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb'@;
put 'MV0pfHxhcmd1bWVudHNbMV07Y29uc3QgYT1jLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0U2VsZWN0aW9uKCk7Yy5oYXNBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikmJmMucmVtb3ZlQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpLGEucmVtb3ZlQWxsUmFuZ2VzKCksbCYmY2EoYywiaW52'@;
put 'aXNpYmxlU2VsZWN0aW9uIiksYy5yZW1vdmVBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpfWZ1bmN0aW9uIEYyZShjLGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07eCQoYyxhKSxsKCksRSQoYyxhKX1mdW5jdGlv'@;
put 'biBFcChjKXt2YXIgbDtjb25zdCBhPW51bGw9PWN8fG51bGw9PT0obD1jLm93bmVyRG9jdW1lbnQpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmRlZmF1bHRWaWV3LkVsZW1lbnQ7cmV0dXJuISEoYSYmbnVsbCE9PWEmJmMgaW5zdGFuY2VvZiBhKX1mdW5jdGlvbiBtbChjKXtyZXR1cm4iZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgY31mdW5jdGlvbiBIMmUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCxhPTA7Y29uc3QgZD17bGFzdENhbGxUaHJvdHRsZWQ6ITB9O2xldCBoPW51bGw7cmV0dXJuIGZ1bmN0aW9uIGYoKXtmb3Io'@;
put 'dmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2KSxEPTA7RDx2O0QrKylNW0RdPWFyZ3VtZW50c1tEXTtjb25zdCBaPURhdGUubm93KCk7bGV0IG5lPSExO2QubGFzdENhbGxUaHJvdHRsZWQ9ITAsYXx8KGE9WixuZT0hMCk7Y29uc3QgY2U9bC0oWi1hKTtyZXR1cm4gbmU/KGQu'@;
put 'bGFzdENhbGxUaHJvdHRsZWQ9ITEsYy5hcHBseSh0aGlzLE0pKTooaCYmY2xlYXJUaW1lb3V0KGgpLGg9c2V0VGltZW91dCgoKT0+e2QubGFzdENhbGxUaHJvdHRsZWQ9ITEsYy5hcHBseSh0aGlzLE0pLGE9MCxoPXZvaWQgMH0sY2UpKSxkfX1mdW5jdGlvbiBicWUoYyl7bGV0IGE9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjEwO2NvbnN0IGQ9SDJlKGMsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCk7bGV0IGg9YTtmdW5jdGlvbiB2KCl7Zm9yKHZhciBNPWFyZ3VtZW50'@;
put 'cy5sZW5ndGgsRD1uZXcgQXJyYXkoTSksWj0wO1o8TTtaKyspRFtaXT1hcmd1bWVudHNbWl07cmV0dXJuIGg/KGgtPTEsYy5hcHBseSh0aGlzLEQpKTpkLmFwcGx5KHRoaXMsRCl9cmV0dXJuIHYuY2xlYXJIaXRzPWZ1bmN0aW9uIGYoKXtoPWF9LHZ9ZnVuY3Rpb24gU0UoYyl7bGV0IGQsbD1h'@;
put 'cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjAwLGE9bnVsbDtyZXR1cm4gZnVuY3Rpb24gaCgpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO3JldHVybiBh'@;
put 'JiZjbGVhclRpbWVvdXQoYSksYT1zZXRUaW1lb3V0KCgpPT57ZD1jLmFwcGx5KHRoaXMsdil9LGwpLGR9fWZ1bmN0aW9uIHlxZSgpe2Zvcih2YXIgYz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KGMpLGE9MDthPGM7YSsrKWxbYV09YXJndW1lbnRzW2FdO2NvbnN0W2QsLi4uaF09bDty'@;
put 'ZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2KSxEPTA7RDx2O0QrKylNW0RdPWFyZ3VtZW50c1tEXTtyZXR1cm4gS3UoaCwoWixuZSk9Pm5lKFopLGQuYXBwbHkodGhpcyxNKSl9fWZ1bmN0aW9uIFQkKGMpe2Zvcih2YXIgbD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtkLTFdPWFyZ3VtZW50c1tkXTtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gYy5h'@;
put 'cHBseSh0aGlzLGEuY29uY2F0KHYpKX19ZnVuY3Rpb24gTjJlKGMpe2NvbnN0IGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGEoZCl7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNb'@;
put 'TV07Y29uc3QgRD1kLmNvbmNhdCh2KTtsZXQgWjtyZXR1cm4gWj1ELmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsRCk6YShEKSxafX0oW10pfWZ1bmN0aW9uIF9xZShjKXtjb25zdCBsPWMubGVuZ3RoO3JldHVybiBmdW5jdGlvbiBhKGQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1'@;
put 'bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO2NvbnN0IEQ9ZC5jb25jYXQodi5yZXZlcnNlKCkpO2xldCBaO3JldHVybiBaPUQubGVuZ3RoPj1sP2MuYXBwbHkodGhpcyxEKTphKEQpLFp9fShbXSl9ZnVuY3Rpb24gRk8oYyxsLGEsZCxo'@;
put 'LGYsdixNKXtyZXR1cm4gRm8oTSk/Yy5jYWxsKGwsYSxkLGgsZix2LE0pOkZvKHYpP2MuY2FsbChsLGEsZCxoLGYsdik6Rm8oZik/Yy5jYWxsKGwsYSxkLGgsZik6Rm8oaCk/Yy5jYWxsKGwsYSxkLGgpOkZvKGQpP2MuY2FsbChsLGEsZCk6Rm8oYSk/Yy5jYWxsKGwsYSk6Yy5jYWxsKGwpfWZ1'@;
put 'bmN0aW9uIHNfKGMpe2xldCBsO3JldHVybiBBcnJheS5pc0FycmF5KGMpP2w9Yy5sZW5ndGg/bmV3IEFycmF5KGMubGVuZ3RoKS5maWxsKG51bGwpOltdOihsPXt9LFhhKGMsKGEsZCk9PnsiX19jaGlsZHJlbiIhPT1kJiYobFtkXT1hJiYib2JqZWN0Ij09dHlwZW9mIGEmJiFBcnJheS5pc0Fy'@;
put 'cmF5KGEpP3NfKGEpOkFycmF5LmlzQXJyYXkoYSk/YS5sZW5ndGgmJiJvYmplY3QiPT10eXBlb2YgYVswXSYmIUFycmF5LmlzQXJyYXkoYVswXSk/W3NfKGFbMF0pXTpbXTpudWxsKX0pKSxsfWZ1bmN0aW9uIFYyZShjLGwpe3JldHVybiBsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1sLGMucHJv'@;
put 'dG90eXBlPW5ldyBsLGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWMsY31mdW5jdGlvbiB4dShjLGwsYSl7Y29uc3QgZD1BcnJheS5pc0FycmF5KGEpO3JldHVybiBYYShsLChoLGYpPT57KCExPT09ZHx8YS5pbmNsdWRlcyhmKSkmJihjW2ZdPWgpfSksY31mdW5jdGlvbiBNRShjLGwpe1hhKGws'@;
put 'KGEsZCk9PntsW2RdJiYib2JqZWN0Ij09dHlwZW9mIGxbZF0/KGNbZF18fChjW2RdPUFycmF5LmlzQXJyYXkobFtkXSk/W106IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGxbZF0pP2xbZF06e30pLE1FKGNbZF0sbFtkXSkpOmNbZF09bFtkXX0pfWZ1'@;
put 'bmN0aW9uIGcxKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYz9KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGMpKTpjfWZ1bmN0aW9uIG4zKGMpe2NvbnN0IGw9e307cmV0dXJuIFhhKGMsKGEsZCk9PntsW2RdPWF9KSxsfWZ1bmN0aW9uIFRsKGMpe2MuTUlYSU5TfHwoYy5NSVhJTlM9W10p'@;
put 'O2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtkLTFdPWFyZ3VtZW50c1tkXTtyZXR1cm4gWW4oYSxoPT57Yy5NSVhJTlMucHVzaChoLk1JWElOX05BTUUpLFhhKGgsKGYsdik9PntpZih2b2lkIDAhPT1jLnByb3RvdHlwZVt2'@;
put 'XSl0aHJvdyBuZXcgRXJyb3IoYE1peGluIGNvbmZsaWN0LiBQcm9wZXJ0eSAnJHt2fScgYWxyZWFkeSBleGlzdCBhbmQgY2Fubm90IGJlIG92ZXJ3cml0dGVuLmApO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBmKWMucHJvdG90eXBlW3ZdPWY7ZWxzZXtjb25zdCBEPWZ1bmN0aW9uKG5lKXtjb25z'@;
put 'dCBjZT1gXyR7bmV9YDtyZXR1cm4gZnVuY3Rpb24oYmUpe3RoaXNbY2VdPWJlfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvdG90eXBlLHYse2dldDpmdW5jdGlvbihuZSxjZSl7Y29uc3QgYmU9YF8ke25lfWA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXNbYmVd'@;
put 'JiYodGhpc1tiZV09KEJlPT57bGV0IHFlPUJlO3JldHVybihBcnJheS5pc0FycmF5KHFlKXx8cWEocWUpKSYmKHFlPWcxKHFlKSkscWV9KShjZSkpLHRoaXNbYmVdfX0odixmKSxzZXQ6RCh2KSxjb25maWd1cmFibGU6ITB9KX19KX0pLGN9ZnVuY3Rpb24gSE8oYyxsKXtyZXR1cm4gSlNPTi5z'@;
put 'dHJpbmdpZnkoYyk9PT1KU09OLnN0cmluZ2lmeShsKX1mdW5jdGlvbiBxYShjKXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX1mdW5jdGlvbiBUcChjLGwsYSxkKXtkLnZhbHVlPWEsZC53cml0YWJsZT0hMSE9PWQud3JpdGFibGUs'@;
put 'ZC5lbnVtZXJhYmxlPSExIT09ZC5lbnVtZXJhYmxlLGQuY29uZmlndXJhYmxlPSExIT09ZC5jb25maWd1cmFibGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCxkKX1mdW5jdGlvbiBYYShjLGwpe2Zvcihjb25zdCBhIGluIGMpaWYoKCFjLmhhc093blByb3BlcnR5fHxjLmhhc093blByb3Bl'@;
put 'cnR5JiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxhKSkmJiExPT09bChjW2FdLGEsYykpYnJlYWs7cmV0dXJuIGN9ZnVuY3Rpb24gQjJlKGMsbCl7Y29uc3QgYT1sLnNwbGl0KCIuIik7bGV0IGQ9YztyZXR1cm4gWGEoYSxoPT57aWYoZD1kW2hdLHZvaWQgMD09PWQp'@;
put 'cmV0dXJuIGQ9dm9pZCAwLCExfSksZH1mdW5jdGlvbiBOTyhjLGwsYSl7aWYoInN0cmluZyIhPXR5cGVvZiBsKXJldHVybjtjb25zdCBkPWwuc3BsaXQoIi4iKTtsZXQgaD1jO2QuZm9yRWFjaCgoZix2KT0+eyJfX3Byb3RvX18iPT09Znx8ImNvbnN0cnVjdG9yIj09PWZ8fCJwcm90b3R5cGUi'@;
put 'PT09Znx8KHYhPT1kLmxlbmd0aC0xPyhFdShoLGYpfHwoaFtmXT17fSksaD1oW2ZdKTpoW2ZdPWEpfSl9ZnVuY3Rpb24gVk8oYyl7aWYoIXFhKGMpKXJldHVybiAwO2NvbnN0IGw9ZnVuY3Rpb24oYSl7bGV0IGQ9MDtyZXR1cm4gcWEoYSk/WGEoYSwoaCxmKT0+eyJfX2NoaWxkcmVuIiE9PWYm'@;
put 'JihkKz1sKGgpKX0pOmQrPTEsZH07cmV0dXJuIGwoYyl9ZnVuY3Rpb24gRmQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ2YWx1ZSI7Y29uc3QgYT1gXyR7bH1gLGQ9e190b3VjaGVkOiExLFthXTpjLGlzVG91Y2hlZCgp'@;
put 'e3JldHVybiB0aGlzLl90b3VjaGVkfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoaCl7dGhpcy5fdG91Y2hlZD0hMCx0aGlzW2FdPWh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZH1mdW5jdGlvbiBFdShjLGwp'@;
put 'e3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxsKX1mdW5jdGlvbiB4RShjKXtyZXR1cm4gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjKX1mdW5jdGlvbiBFRShjKXt3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoYyl9ZnVuY3Rpb24gQSQoKXty'@;
put 'ZXR1cm4ib250b3VjaHN0YXJ0ImluIHdpbmRvd31mdW5jdGlvbiBqMmUoKXtyZXR1cm4gdHlwZW9mIHdpbmRvdzwidSJ9ZnVuY3Rpb24gejJlKGMpe3JldHVybiBsX3x8KGxfPSJvYmplY3QiPT10eXBlb2YgSW50bD9uZXcgSW50bC5Db2xsYXRvcihjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p'@;
put 'ZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuY29tcGFyZToiZnVuY3Rpb24iPT10eXBlb2YgU3RyaW5nLnByb3RvdHlwZS5sb2NhbGVDb21wYXJlPyhhLGQpPT5gJHthfWAubG9jYWxlQ29tcGFyZShkKTooYSxkKT0+YT09PWQ/MDphPmQ/LTE6MSxsXyl9Xyg5NTQ5Myk7Y29u'@;
put 'c3QgRjI9Yz0+e2NvbnN0IGw9e3ZhbHVlOiExLHRlc3Q6KGEsZCk9PntsLnZhbHVlPWMoYSxkKX19O3JldHVybiBsfSxtZz17Y2hyb21lOkYyKChjLGwpPT4vQ2hyb21lLy50ZXN0KGMpJiYvR29vZ2xlLy50ZXN0KGwpKSxjaHJvbWVXZWJLaXQ6RjIoYz0+L0NyaU9TLy50ZXN0KGMpKSxlZGdl'@;
put 'OkYyKGM9Pi9FZGdlLy50ZXN0KGMpKSxlZGdlV2ViS2l0OkYyKGM9Pi9FZGdpT1MvLnRlc3QoYykpLGZpcmVmb3g6RjIoYz0+L0ZpcmVmb3gvLnRlc3QoYykpLGZpcmVmb3hXZWJLaXQ6RjIoYz0+L0Z4aU9TLy50ZXN0KGMpKSxtb2JpbGU6RjIoYz0+L0FuZHJvaWR8d2ViT1N8aVBob25lfGlQ'@;
put 'YWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KGMpKSxzYWZhcmk6RjIoKGMsbCk9Pi9TYWZhcmkvLnRlc3QoYykmJi9BcHBsZSBDb21wdXRlci8udGVzdChsKSl9LGNfPXttYWM6RjIoYz0+L15NYWMvLnRlc3QoYykpLHdpbjpGMihjPT4vXldpbi8udGVzdChj'@;
put 'KSksbGludXg6RjIoYz0+L15MaW51eC8udGVzdChjKSksaW9zOkYyKGM9Pi9pUGhvbmV8aVBhZHxpUG9kL2kudGVzdChjKSl9O2Z1bmN0aW9uIFUyZSgpe2xldHt1c2VyQWdlbnQ6Yz1uYXZpZ2F0b3IudXNlckFnZW50LHZlbmRvcjpsPW5hdmlnYXRvci52ZW5kb3J9PWFyZ3VtZW50cy5sZW5n'@;
put 'dGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtYYShtZyxhPT57bGV0e3Rlc3Q6ZH09YTtkKGMsbCl9KX1mdW5jdGlvbiBaMmUoKXtsZXR7cGxhdGZvcm06Yz1uYXZpZ2F0b3IucGxhdGZvcm19PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzBdP2FyZ3VtZW50c1swXTp7fTtYYShjXyxsPT57bGV0e3Rlc3Q6YX09bDthKGMpfSl9ZnVuY3Rpb24gayQoKXtyZXR1cm4gbWcuY2hyb21lLnZhbHVlfWZ1bmN0aW9uIFcyZSgpe3JldHVybiBtZy5jaHJvbWVXZWJLaXQudmFsdWV9ZnVuY3Rpb24gQk8oKXtyZXR1cm4gbWcuZmlyZWZveC52'@;
put 'YWx1ZX1mdW5jdGlvbiBZMmUoKXtyZXR1cm4gbWcuZmlyZWZveFdlYktpdC52YWx1ZX1mdW5jdGlvbiBURSgpe3JldHVybiBtZy5zYWZhcmkudmFsdWV9ZnVuY3Rpb24gRzJlKCl7cmV0dXJuIG1nLmVkZ2UudmFsdWV9ZnVuY3Rpb24gd3FlKCl7cmV0dXJuIG1nLmVkZ2VXZWJLaXQudmFsdWV9'@;
put 'ZnVuY3Rpb24gQXAoKXtyZXR1cm4gbWcubW9iaWxlLnZhbHVlfWZ1bmN0aW9uIEQkKCl7cmV0dXJuIGNfLmlvcy52YWx1ZX1mdW5jdGlvbiBJJCgpe2xldHttYXhUb3VjaFBvaW50czpjfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bmF2'@;
put 'aWdhdG9yO3JldHVybiBjPjImJmNfLm1hYy52YWx1ZX1mdW5jdGlvbiBSJCgpe3JldHVybiBjXy53aW4udmFsdWV9ZnVuY3Rpb24gak8oKXtyZXR1cm4gY18ubWFjLnZhbHVlfWZ1bmN0aW9uIENxZSgpe3JldHVybiBjXy5saW51eC52YWx1ZX1qMmUoKSYmKFUyZSgpLFoyZSgpKTtjb25zdCBH'@;
put 'bz17QUxUOjE4LEFSUk9XX0RPV046NDAsQVJST1dfTEVGVDozNyxBUlJPV19SSUdIVDozOSxBUlJPV19VUDozOCxBVURJT19ET1dOOkJPKCk/MTgyOjE3NCxBVURJT19NVVRFOkJPKCk/MTgxOjE3MyxBVURJT19VUDpCTygpPzE4MzoxNzUsQkFDS1NQQUNFOjgsQ0FQU19MT0NLOjIwLENPTU1B'@;
put 'OjE4OCxDT01NQU5EX0xFRlQ6OTEsQ09NTUFORF9SSUdIVDo5MyxDT01NQU5EX0ZJUkVGT1g6MjI0LENPTlRST0w6MTcsREVMRVRFOjQ2LEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsRjE6MTEyLEYyOjExMyxGMzoxMTQsRjQ6MTE1LEY1OjExNixGNjoxMTcsRjc6MTE4LEY4OjExOSxGOTox'@;
put 'MjAsRjEwOjEyMSxGMTE6MTIyLEYxMjoxMjMsRjEzOjEyNCxGMTQ6MTI1LEYxNToxMjYsRjE2OjEyNyxGMTc6MTI4LEYxODoxMjksRjE5OjEzMCxIT01FOjM2LElOU0VSVDo0NSxNRURJQV9ORVhUOjE3NixNRURJQV9QTEFZX1BBVVNFOjE3OSxNRURJQV9QUkVWOjE3NyxNRURJQV9TVE9QOjE3'@;
put 'OCxOVUxMOjAsTlVNX0xPQ0s6MTQ0LFBBR0VfRE9XTjozNCxQQUdFX1VQOjMzLFBBVVNFOjE5LFBFUklPRDoxOTAsU0NST0xMX0xPQ0s6MTQ1LFNISUZUOjE2LFNQQUNFOjMyLFRBQjo5LEE6NjUsQzo2NyxEOjY4LEY6NzAsTDo3NixPOjc5LFA6ODAsUzo4MyxWOjg2LFg6ODgsWTo4OSxaOjkw'@;
put 'fSxTcWU9W0dvLkFMVCxHby5BUlJPV19ET1dOLEdvLkFSUk9XX0xFRlQsR28uQVJST1dfUklHSFQsR28uQVJST1dfVVAsR28uQVVESU9fRE9XTixHby5BVURJT19NVVRFLEdvLkFVRElPX1VQLEdvLkJBQ0tTUEFDRSxHby5DQVBTX0xPQ0ssR28uREVMRVRFLEdvLkVORCxHby5FTlRFUixHby5F'@;
put 'U0NBUEUsR28uRjEsR28uRjIsR28uRjMsR28uRjQsR28uRjUsR28uRjYsR28uRjcsR28uRjgsR28uRjksR28uRjEwLEdvLkYxMSxHby5GMTIsR28uRjEzLEdvLkYxNCxHby5GMTUsR28uRjE2LEdvLkYxNyxHby5GMTgsR28uRjE5LEdvLkhPTUUsR28uSU5TRVJULEdvLk1FRElBX05FWFQsR28u'@;
put 'TUVESUFfUExBWV9QQVVTRSxHby5NRURJQV9QUkVWLEdvLk1FRElBX1NUT1AsR28uTlVMTCxHby5OVU1fTE9DSyxHby5QQUdFX0RPV04sR28uUEFHRV9VUCxHby5QQVVTRSxHby5TQ1JPTExfTE9DSyxHby5TSElGVCxHby5UQUJdO2Z1bmN0aW9uICQyZShjKXtyZXR1cm4gMzI9PT1jfHxjPj00'@;
put 'OCYmYzw9NTd8fGM+PTk2JiZjPD0xMTF8fGM+PTE4NiYmYzw9MTkyfHxjPj0yMTkmJmM8PTIyMnx8Yz49MjI2fHxjPj02NSYmYzw9OTB9ZnVuY3Rpb24gTCQoYyl7cmV0dXJuIFNxZS5pbmNsdWRlcyhjKX1mdW5jdGlvbiBNcWUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gak8oKT9sLnB1c2goR28u'@;
put 'Q09NTUFORF9MRUZULEdvLkNPTU1BTkRfUklHSFQsR28uQ09NTUFORF9GSVJFRk9YKTpsLnB1c2goR28uQ09OVFJPTCksbC5pbmNsdWRlcyhjKX1mdW5jdGlvbiBLMmUoYyl7cmV0dXJuW0dvLkNPTlRST0wsR28uQ09NTUFORF9MRUZULEdvLkNPTU1BTkRfUklHSFQsR28uQ09NTUFORF9GSVJF'@;
put 'Rk9YXS5pbmNsdWRlcyhjKX1mdW5jdGlvbiB1XyhjLGwpe2NvbnN0IGE9bC5zcGxpdCgifCIpO2xldCBkPSExO3JldHVybiBZbihhLGg9PntpZihjPT09R29baF0pcmV0dXJuIGQ9ITAsITF9KSxkfWZ1bmN0aW9uIEgyKGMpe2MuaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWQ9ITEsYy5j'@;
put 'YW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gUG0oYyl7cmV0dXJuITE9PT1jLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkfWZ1bmN0aW9uIEZtKGMpe3JldHVybiAyPT09Yy5idXR0b259ZnVuY3Rpb24gek8oYyl7cmV0dXJuIDA9PT1jLmJ1dHRvbn1mdW5jdGlvbiBxMmUoYyl7cmV0dXJu'@;
put 'IGMgaW5zdGFuY2VvZiBUb3VjaEV2ZW50fWZ1bmN0aW9uIFgyZShjLGwpe2NvbnN0IGE9e3g6Yy5vZmZzZXRYLHk6Yy5vZmZzZXRZfTtsZXQgZD1jLnRhcmdldDtpZighRXAobCl8fGQhPT1sJiZkLmNvbnRhaW5zKGwpKXJldHVybiBhO2Zvcig7ZCE9PWw7KWEueCs9ZC5vZmZzZXRMZWZ0LGEu'@;
put 'eSs9ZC5vZmZzZXRUb3AsZD1kLm9mZnNldFBhcmVudDtyZXR1cm4gYX1mdW5jdGlvbiBpbCgpe0ZvKGNvbnNvbGUpJiZjb25zb2xlLndhcm4oLi4uYXJndW1lbnRzKX1mdW5jdGlvbiBPJCgpe0ZvKGNvbnNvbGUpJiZjb25zb2xlLmVycm9yKC4uLmFyZ3VtZW50cyl9Y29uc3Qgejc9WyJhZnRl'@;
put 'ckNlbGxNZXRhUmVzZXQiLCJhZnRlckNoYW5nZSIsImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIiwiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLCJhZnRlckNvbnRl'@;
put 'eHRNZW51SGlkZSIsImJlZm9yZUNvbnRleHRNZW51U2hvdyIsImFmdGVyQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb3B5TGltaXQiLCJiZWZvcmVDcmVhdGVDb2wiLCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIiwiYWZ0ZXJDcmVhdGVDb2wiLCJiZWZvcmVDcmVhdGVSb3ciLCJhZnRlckNy'@;
put 'ZWF0ZVJvdyIsImFmdGVyRGVzZWxlY3QiLCJhZnRlckRlc3Ryb3kiLCJhZnRlckRvY3VtZW50S2V5RG93biIsImFmdGVyRHJhd1NlbGVjdGlvbiIsImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiwiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsImFmdGVyR2V0Q2VsbE1ldGEiLCJhZnRlckdl'@;
put 'dENvbEhlYWRlciIsImFmdGVyR2V0Um93SGVhZGVyIiwiYWZ0ZXJJbml0IiwiYWZ0ZXJMb2FkRGF0YSIsImFmdGVyVXBkYXRlRGF0YSIsImFmdGVyTW9tZW50dW1TY3JvbGwiLCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsImFmdGVyT25DZWxsQ29ybmVyRGJsQ2xpY2siLCJhZnRlck9u'@;
put 'Q2VsbE1vdXNlRG93biIsImFmdGVyT25DZWxsTW91c2VVcCIsImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLCJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsImFmdGVyT25DZWxsTW91c2VPdXQiLCJhZnRlclJlbW92ZUNvbCIsImFmdGVyUmVtb3ZlUm93IiwiYmVmb3JlUmVuZGVyZXIiLCJhZnRlclJl'@;
put 'bmRlcmVyIiwiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IiwiYmVmb3JlVmlld3BvcnRTY3JvbGwiLCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsImFmdGVyU2Nyb2xsVmVy'@;
put 'dGljYWxseSIsImFmdGVyU2Nyb2xsIiwiYWZ0ZXJTZWxlY3Rpb24iLCJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsImFmdGVyU2VsZWN0aW9uRW5kIiwiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IiwiYmVmb3JlU2VsZWN0Q29sdW1ucyIsImFmdGVyU2Vs'@;
put 'ZWN0Q29sdW1ucyIsImJlZm9yZVNlbGVjdFJvd3MiLCJhZnRlclNlbGVjdFJvd3MiLCJhZnRlclNldENlbGxNZXRhIiwiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsImFmdGVyU2V0RGF0YUF0Q2VsbCIsImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsImFm'@;
put 'dGVyU2V0VGhlbWUiLCJhZnRlclVwZGF0ZVNldHRpbmdzIiwiYWZ0ZXJWYWxpZGF0ZSIsImJlZm9yZUxhbmd1YWdlQ2hhbmdlIiwiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsImJlZm9yZUF1dG9maWxsIiwiYWZ0ZXJBdXRvZmlsbCIsImJlZm9yZUNlbGxBbGlnbm1lbnQiLCJiZWZvcmVDaGFuZ2Ui'@;
put 'LCJiZWZvcmVDaGFuZ2VSZW5kZXIiLCJiZWZvcmVEcmF3Qm9yZGVycyIsImJlZm9yZUdldENlbGxNZXRhIiwiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLCJiZWZvcmVJbml0IiwiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIiwiYmVmb3JlTG9hZERhdGEiLCJiZWZvcmVVcGRhdGVEYXRhIiwiYmVmb3Jl'@;
put 'S2V5RG93biIsImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsImJlZm9yZU9uQ2VsbE1vdXNlVXAiLCJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsImJlZm9yZU9uQ2VsbE1vdXNlT3V0IiwiYmVmb3JlUmVtb3ZlQ29sIiwiYmVmb3JlUmVtb3ZlUm93Iiwi'@;
put 'YmVmb3JlVmlld1JlbmRlciIsImFmdGVyVmlld1JlbmRlciIsImJlZm9yZVJlbmRlciIsImFmdGVyUmVuZGVyIiwiYmVmb3JlUm93V3JhcCIsImJlZm9yZUNvbHVtbldyYXAiLCJiZWZvcmVTZXRDZWxsTWV0YSIsImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IiwiYmVmb3JlU2V0UmFuZ2VTdGFy'@;
put 'dE9ubHkiLCJiZWZvcmVTZXRSYW5nZVN0YXJ0IiwiYmVmb3JlU2V0UmFuZ2VFbmQiLCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLCJiZWZvcmVUb3VjaFNjcm9sbCIsImJlZm9yZVZhbGlkYXRlIiwiYmVmb3JlVmFsdWVSZW5kZXIiLCJjb25zdHJ1Y3QiLCJpbml0IiwibW9kaWZ5Q29s'@;
put 'SGVhZGVyIiwibW9kaWZ5Q29sV2lkdGgiLCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIsIm1vZGlmeUZvY3VzZWRFbGVtZW50IiwibW9kaWZ5Um93SGVhZGVyIiwibW9kaWZ5Um93SGVpZ2h0IiwibW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZSIsIm1vZGlmeURhdGEiLCJtb2Rp'@;
put 'ZnlTb3VyY2VEYXRhIiwibW9kaWZ5Um93RGF0YSIsIm1vZGlmeUdldENlbGxDb29yZHMiLCJtb2RpZnlHZXRDb29yZHNFbGVtZW50IiwibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFk'@;
put 'ZXIiLCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwicGVyc2lzdGVudFN0YXRlUmVzZXQiLCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiYmVmb3JlQ29sdW1uU29ydCIsImFmdGVyQ29sdW1uU29ydCIsIm1vZGlmeUF1dG9maWxsUmFuZ2UiLCJtb2RpZnlDb3B5YWJsZVJhbmdlIiwiYmVmb3JlQ3V0Iiwi'@;
put 'YWZ0ZXJDdXQiLCJiZWZvcmVDb3B5IiwiYWZ0ZXJDb3B5IiwiYmVmb3JlUGFzdGUiLCJhZnRlclBhc3RlIiwiYmVmb3JlQ29sdW1uRnJlZXplIiwiYWZ0ZXJDb2x1bW5GcmVlemUiLCJiZWZvcmVDb2x1bW5Nb3ZlIiwiYWZ0ZXJDb2x1bW5Nb3ZlIiwiYmVmb3JlQ29sdW1uVW5mcmVlemUiLCJh'@;
put 'ZnRlckNvbHVtblVuZnJlZXplIiwiYmVmb3JlUm93TW92ZSIsImFmdGVyUm93TW92ZSIsImJlZm9yZUNvbHVtblJlc2l6ZSIsImFmdGVyQ29sdW1uUmVzaXplIiwiYmVmb3JlUm93UmVzaXplIiwiYWZ0ZXJSb3dSZXNpemUiLCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsImFmdGVy'@;
put 'R2V0Um93SGVhZGVyUmVuZGVyZXJzIiwiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIiwiYmVmb3JlRmlsdGVyIiwiYWZ0ZXJGaWx0ZXIiLCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIiwiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIsImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3Zl'@;
put 'ZCIsImFmdGVyU2hlZXRBZGRlZCIsImFmdGVyU2hlZXRSZW5hbWVkIiwiYWZ0ZXJTaGVldFJlbW92ZWQiLCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsImJlZm9yZVVuZG8iLCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLCJhZnRlclVuZG8iLCJh'@;
put 'ZnRlclVuZG9TdGFja0NoYW5nZSIsImJlZm9yZVJlZG8iLCJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLCJhZnRlclJlZG8iLCJhZnRlclJlZG9TdGFja0NoYW5nZSIsIm1vZGlmeVJvd0hlYWRlcldpZHRoIiwibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsIm1v'@;
put 'ZGlmeVRyYW5zZm9ybUVuZCIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIiwiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0'@;
put 'b3JPdmVycmlkZSIsImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwiYmVmb3JlSGlkZVJvd3MiLCJhZnRlckhpZGVSb3dzIiwiYmVmb3JlVW5oaWRlUm93cyIsImFmdGVyVW5oaWRlUm93cyIsImJlZm9yZUhpZGVDb2x1bW5zIiwiYWZ0ZXJIaWRlQ29sdW1ucyIsImJlZm9yZVVuaGlkZUNvbHVt'@;
put 'bnMiLCJhZnRlclVuaGlkZUNvbHVtbnMiLCJiZWZvcmVUcmltUm93IiwiYWZ0ZXJUcmltUm93IiwiYmVmb3JlVW50cmltUm93IiwiYWZ0ZXJVbnRyaW1Sb3ciLCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiwiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiwi'@;
put 'YmVmb3JlQWRkQ2hpbGQiLCJhZnRlckFkZENoaWxkIiwiYmVmb3JlRGV0YWNoQ2hpbGQiLCJhZnRlckRldGFjaENoaWxkIiwiYmVmb3JlQmVnaW5FZGl0aW5nIiwiYWZ0ZXJCZWdpbkVkaXRpbmciLCJiZWZvcmVNZXJnZUNlbGxzIiwiYWZ0ZXJNZXJnZUNlbGxzIiwiYmVmb3JlVW5tZXJnZUNl'@;
put 'bGxzIiwiYWZ0ZXJVbm1lcmdlQ2VsbHMiLCJhZnRlckxpc3RlbiIsImFmdGVyVW5saXN0ZW4iLCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLCJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsImFmdGVyQ29sdW1uQ29sbGFwc2UiLCJiZWZvcmVDb2x1bW5F'@;
put 'eHBhbmQiLCJhZnRlckNvbHVtbkV4cGFuZCIsIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCJdLFAkPW5ldyBNYXAoW1sibW9kaWZ5Um93IiwiOC4wLjAiXSxbIm1vZGlmeUNvbCIsIjguMC4wIl0sWyJ1bm1vZGlmeVJvdyIsIjguMC4wIl0sWyJ1bm1vZGlmeUNvbCIsIjguMC4wIl0sWyJza2lw'@;
put 'TGVuZ3RoQ2FjaGUiLCI4LjAuMCJdLFsiaGlkZGVuQ29sdW1uIiwiOC4wLjAiXSxbImhpZGRlblJvdyIsIjguMC4wIl1dKSxGJD1uZXcgTWFwKFtbXV0pO2Z1bmN0aW9uIEgkKGMsbCxhKXtKMmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEoyZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUTJlKGMsbCxhKXtyZXR1cm4gYy5zZXQoVU8oYyxsKSxhKSxhfWZ1bmN0aW9uIHowKGMsbCl7cmV0dXJuIGMuZ2V0KFVPKGMsbCkpfWZ1'@;
put 'bmN0aW9uIFVPKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1fKDIzMDEyKSxf'@;
put 'KDgxMjYwKTt2YXIgRGg9bmV3IFdlYWtNYXAsZF89bmV3IFdlYWtNYXAsTiQ9bmV3IFdlYWtNYXAsViQ9bmV3IFdlYWtTZXQ7Y2xhc3MgZWZle2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIHhxZShjLGwpe0oyZShjLGwpLGwuYWRkKGMpfSkodGhpcyxWJCksSCQodGhpcyxEaCxuZXcgTWFwKSxI'@;
put 'JCh0aGlzLGRfLG5ldyBNYXApLEgkKHRoaXMsTiQsbmV3IFNldCksejcuZm9yRWFjaChsPT5VTyhWJCx0aGlzLHRmZSkuY2FsbCh0aGlzLGwpKX1nZXRIb29rcyhsKXt2YXIgYTtyZXR1cm4gbnVsbCE9PShhPXowKERoLHRoaXMpLmdldChsKSkmJnZvaWQgMCE9PWE/YTpbXX1hZGQobCxhKXts'@;
put 'ZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307ejAoRGgsdGhpcykuaGFzKGwpfHwoVU8oViQsdGhpcyx0ZmUpLmNhbGwodGhpcyxsKSx6Ny5wdXNoKGwpKTtjb25zdCBoPXowKERoLHRoaXMpLmdldChsKTtpZihoLmZpbmQoWj0+'@;
put 'Wi5jYWxsYmFjaz09PWEpKXJldHVybjtjb25zdCBmPU51bWJlci5pc0ludGVnZXIoZC5vcmRlckluZGV4KT9kLm9yZGVySW5kZXg6MCx2PSEhZC5ydW5PbmNlLE09ISFkLmluaXRpYWxIb29rO2xldCBEPSExO2lmKE0pe2NvbnN0IFo9aC5maW5kKG5lPT5uZS5pbml0aWFsSG9vayk7WiYmKFou'@;
put 'Y2FsbGJhY2s9YSxEPSEwKX1pZighRCl7aC5wdXNoKHtjYWxsYmFjazphLG9yZGVySW5kZXg6ZixydW5PbmNlOnYsaW5pdGlhbEhvb2s6TSxza2lwOiExfSk7bGV0IFo9ejAoTiQsdGhpcykuaGFzKGwpOyFaJiYwIT09ZiYmKFo9ITAsejAoTiQsdGhpcykuYWRkKGwpKSxaJiZoLmxlbmd0aD4x'@;
put 'JiZ6MChEaCx0aGlzKS5zZXQobCxoLnRvU29ydGVkKChuZSxjZSk9Pm5lLm9yZGVySW5kZXgtY2Uub3JkZXJJbmRleCkpfX1oYXMobCl7cmV0dXJuIHowKERoLHRoaXMpLmhhcyhsKSYmejAoRGgsdGhpcykuZ2V0KGwpLmxlbmd0aD4wfXJlbW92ZShsLGEpe2lmKCF6MChEaCx0aGlzKS5oYXMo'@;
put 'bCkpcmV0dXJuITE7Y29uc3QgZD16MChEaCx0aGlzKS5nZXQobCksaD1kLmZpbmQoZj0+Zi5jYWxsYmFjaz09PWEpO2lmKGgpe2xldCBmPXowKGRfLHRoaXMpLmdldChsKTtyZXR1cm4gaC5za2lwPSEwLGYrPTEsZj4xMDAmJih6MChEaCx0aGlzKS5zZXQobCxkLmZpbHRlcih2PT4hdi5za2lw'@;
put 'KSksZj0wKSx6MChkXyx0aGlzKS5zZXQobCxmKSwhMH1yZXR1cm4hMX1kZXN0cm95KCl7ejAoRGgsdGhpcykuY2xlYXIoKSx6MChkXyx0aGlzKS5jbGVhcigpLFEyZShEaCx0aGlzLG51bGwpLFEyZShkXyx0aGlzLG51bGwpfX1mdW5jdGlvbiB0ZmUoYyl7ejAoRGgsdGhpcykuc2V0KGMsW10p'@;
put 'LHowKGRfLHRoaXMpLnNldChjLDApfWNvbnN0IERxZT1nbGBUaGUgcGx1Z2luIGhvb2sgIltob29rTmFtZV0iIHdhcyByZW1vdmVkIGluIEhhbmRzb250YWJsZSBbcmVtb3ZlZEluVmVyc2lvbl0uXHgyMAogIFBsZWFzZSBjb25zdWx0IHJlbGVhc2Ugbm90ZXMgaHR0cHM6Ly9naXRodWIuY29t'@;
put 'L2hhbmRzb250YWJsZS9oYW5kc29udGFibGUvcmVsZWFzZXMvdGFnL1tyZW1vdmVkSW5WZXJzaW9uXSB0b1x4MjAKICBsZWFybiBhYm91dCB0aGUgbWlncmF0aW9uIHBhdGguYDtjbGFzcyBNb3tjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiBUcWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEFx'@;
put 'ZShjKXt2YXIgbD1mdW5jdGlvbiBrcWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4g'@;
put 'ZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJnbG9iYWxCdWNrZXQiLG5ldyBlZmUpfXN0YXRpYyBnZXRTaW5nbGV0b24oKXtyZXR1cm4gZnVuY3Rpb24gUnFlKCl7cmV0dXJu'@;
put 'IElxZX0oKX1nZXRCdWNrZXQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gbD8obC5wbHVnaW5Ib29rQnVja2V0fHwobC5wbHVnaW5Ib29rQnVja2V0PW5ldyBlZmUpLGwucGx1Z2luSG9va0J1Y2tldCk6'@;
put 'dGhpcy5nbG9iYWxCdWNrZXR9YWRkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsaD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9ZbihhLGY9'@;
put 'PnRoaXMuYWRkKGwsZixkKSk6KFAkLmhhcyhsKSYmaWwodSQoRHFlLHtob29rTmFtZTpsLHJlbW92ZWRJblZlcnNpb246UCQuZ2V0KGwpfSkpLEYkLmhhcyhsKSYmaWwoRiQuZ2V0KGwpKSx0aGlzLmdldEJ1Y2tldChkKS5hZGQobCxhLHtvcmRlckluZGV4OmgscnVuT25jZTohMX0pKSx0aGlz'@;
put 'fW9uY2UobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxoPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwO3JldHVybiBBcnJheS5pc0FycmF5KGEpP1luKGEsZj0+dGhpcy5vbmNlKGwsZixk'@;
put 'KSk6dGhpcy5nZXRCdWNrZXQoZCkuYWRkKGwsYSx7b3JkZXJJbmRleDpoLHJ1bk9uY2U6ITB9KSx0aGlzfWFkZEFzRml4ZWQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtyZXR1cm4gQXJyYXkuaXNBcnJheShh'@;
put 'KT9ZbihhLGg9PnRoaXMuYWRkQXNGaXhlZChsLGgsZCkpOnRoaXMuZ2V0QnVja2V0KGQpLmFkZChsLGEse2luaXRpYWxIb29rOiEwfSksdGhpc31yZW1vdmUobCxhKXtyZXR1cm4gdGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1l'@;
put 'bnRzWzJdOm51bGwpLnJlbW92ZShsLGEpfWhhcyhsKXtyZXR1cm4gdGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwpLmhhcyhsKX1ydW4obCxhLGQsaCxmLHYsTSxEKXt7Y29uc3QgWj10aGlzLmdldEJ1Y2tl'@;
put 'dCgpLmdldEhvb2tzKGEpLG5lPVo/Wi5sZW5ndGg6MDtsZXQgY2U9MDtpZihuZSlmb3IoO2NlPG5lOyl7aWYoIVpbY2VdfHxaW2NlXS5za2lwKXtjZSs9MTtjb250aW51ZX1jb25zdCBiZT1GTyhaW2NlXS5jYWxsYmFjayxsLGQsaCxmLHYsTSxEKTt2b2lkIDAhPT1iZSYmKGQ9YmUpLFpbY2Vd'@;
put 'JiZaW2NlXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShhLFpbY2VdLmNhbGxiYWNrKSxjZSs9MX19e2NvbnN0IFo9dGhpcy5nZXRCdWNrZXQobCkuZ2V0SG9va3MoYSksbmU9Wj9aLmxlbmd0aDowO2xldCBjZT0wO2lmKG5lKWZvcig7Y2U8bmU7KXtpZighWltjZV18fFpbY2VdLnNraXApe2NlKz0x'@;
put 'O2NvbnRpbnVlfWNvbnN0IGJlPUZPKFpbY2VdLmNhbGxiYWNrLGwsZCxoLGYsdixNLEQpO3ZvaWQgMCE9PWJlJiYoZD1iZSksWltjZV0mJlpbY2VdLnJ1bk9uY2UmJnRoaXMucmVtb3ZlKGEsWltjZV0uY2FsbGJhY2ssbCksY2UrPTF9fXJldHVybiBkfWRlc3Ryb3koKXt0aGlzLmdldEJ1Y2tl'@;
put 'dChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCkuZGVzdHJveSgpfXJlZ2lzdGVyKGwpe3RoaXMuaXNSZWdpc3RlcmVkKGwpfHx6Ny5wdXNoKGwpfWRlcmVnaXN0ZXIobCl7dGhpcy5pc1JlZ2lzdGVyZWQobCkmJno3LnNwbGljZSh6'@;
put 'Ny5pbmRleE9mKGwpLDEpfWlzRGVwcmVjYXRlZChsKXtyZXR1cm4gRiQuaGFzKGwpfHxQJC5oYXMobCl9aXNSZWdpc3RlcmVkKGwpe3JldHVybiB6Ny5pbmRleE9mKGwpPj0wfWdldFJlZ2lzdGVyZWQoKXtyZXR1cm4gejd9fWNvbnN0IElxZT1uZXcgTW8sQiQ9bmV3IE1hcDtmdW5jdGlvbiBy'@;
put 'Mygpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiY29tbW9uIjtCJC5oYXMoYyl8fEIkLnNldChjLG5ldyBNYXApO2NvbnN0IGw9QiQuZ2V0KGMpO3JldHVybntyZWdpc3RlcjpmdW5jdGlvbiBhKE0sRCl7bC5zZXQoTSxEKX0s'@;
put 'Z2V0SXRlbTpmdW5jdGlvbiBkKE0pe3JldHVybiBsLmdldChNKX0saGFzSXRlbTpmdW5jdGlvbiBoKE0pe3JldHVybiBsLmhhcyhNKX0sZ2V0TmFtZXM6ZnVuY3Rpb24gZigpe3JldHVyblsuLi5sLmtleXMoKV19LGdldFZhbHVlczpmdW5jdGlvbiB2KCl7cmV0dXJuWy4uLmwudmFsdWVzKCld'@;
put 'fX19Y29uc3QgaiQ9bmV3IFdlYWtNYXAse3JlZ2lzdGVyOkxxZSxnZXRJdGVtOm5mZSxoYXNJdGVtOnJmZSxnZXROYW1lczpPcWV9PXIzKCJlZGl0b3JzIik7ZnVuY3Rpb24gUHFlKGMpe2NvbnN0IGw9e30sYT1jO3RoaXMuZ2V0Q29uc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gY30sdGhp'@;
put 'cy5nZXRJbnN0YW5jZT1mdW5jdGlvbihkKXtyZXR1cm4gZC5ndWlkIGluIGx8fChsW2QuZ3VpZF09bmV3IGEoZCkpLGxbZC5ndWlkXX0sTW8uZ2V0U2luZ2xldG9uKCkuYWRkKCJhZnRlckRlc3Ryb3kiLGZ1bmN0aW9uKCl7bFt0aGlzLmd1aWRdPW51bGx9KX1mdW5jdGlvbiBpZmUoYyxsKXts'@;
put 'ZXQgYTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylqJC5nZXQoYyl8fEhkKG51bGwsYyksYT1qJC5nZXQoYyk7ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGMpdGhyb3cgRXJyb3IoJ09ubHkgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGNhbiBiZSBwYXNzZWQgYXMgImVkaXRvciIgcGFyYW1ldGVy'@;
put 'Jyk7YT1uZmUoYyl9aWYoIWEpdGhyb3cgRXJyb3IoYE5vIGVkaXRvciByZWdpc3RlcmVkIHVuZGVyIG5hbWUgIiR7Y30iYCk7cmV0dXJuIGEuZ2V0SW5zdGFuY2UobCl9ZnVuY3Rpb24gWk8oYyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIXJmZShjKSl0aHJvdyBFcnJv'@;
put 'cihgTm8gcmVnaXN0ZXJlZCBlZGl0b3IgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gbmZlKGMpLmdldENvbnN0cnVjdG9yKCl9ZnVuY3Rpb24gSGQoYyxsKXtjJiYic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLkVESVRPUl9UWVBFKTtjb25zdCBhPW5ldyBQcWUobCk7InN0'@;
put 'cmluZyI9PXR5cGVvZiBjJiZMcWUoYyxhKSxqJC5zZXQobCxhKX1sZXQgV089MDtjb25zdCBOMj1jbGFzcyBWcWV7Y29uc3RydWN0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDsoZnVuY3Rpb24gRnFlKGMsbCxh'@;
put 'KXtyZXR1cm4obD1mdW5jdGlvbiBIcWUoYyl7dmFyIGw9ZnVuY3Rpb24gTnFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2Jq'@;
put 'ZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9m'@;
put 'IGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsImNvbnRleHQiLHZvaWQgMCksdGhpcy5jb250ZXh0PWx8fHRoaXMsdGhpcy5jb250ZXh0'@;
put 'LmV2ZW50TGlzdGVuZXJzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzPVtdKX1hZGRFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2Z1bmN0aW9uIGYodil7ZC5jYWxsKHRoaXMsZnVu'@;
put 'Y3Rpb24gQnFlKGMpe2NvbnN0IGw9Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb247cmV0dXJuIGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPWZ1bmN0aW9uKCl7bC5hcHBseSh0aGlzKSxIMih0aGlzKX0sY30odikpfXJldHVybiB0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMucHVzaCh7'@;
put 'ZWxlbWVudDpsLGV2ZW50OmEsY2FsbGJhY2s6ZCxjYWxsYmFja1Byb3h5OmYsb3B0aW9uczpoLGV2ZW50TWFuYWdlcjp0aGlzfSksbC5hZGRFdmVudExpc3RlbmVyKGEsZixoKSxXTys9MSwoKT0+e3RoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsZCl9fXJlbW92ZUV2ZW50TGlzdGVuZXIo'@;
put 'bCxhLGQpe2xldCB2LGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxmPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7Zm9yKDtmOylpZihmLT0xLHY9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2ZdLHYuZXZlbnQ9'@;
put 'PT1hJiZ2LmVsZW1lbnQ9PT1sKXtpZihkJiZkIT09di5jYWxsYmFja3x8aCYmdi5ldmVudE1hbmFnZXIhPT10aGlzKWNvbnRpbnVlO3RoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5zcGxpY2UoZiwxKSx2LmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih2LmV2ZW50LHYuY2FsbGJhY2tQ'@;
put 'cm94eSx2Lm9wdGlvbnMpLFdPLT0xfX1jbGVhckV2ZW50cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYoIXRoaXMuY29udGV4dClyZXR1cm47bGV0IGE9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtm'@;
put 'b3IoO2E7KXthLT0xO2NvbnN0IGQ9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzW2FdO2wmJmQuZXZlbnRNYW5hZ2VyIT09dGhpc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5zcGxpY2UoYSwxKSxkLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihkLmV2ZW50LGQuY2FsbGJh'@;
put 'Y2tQcm94eSxkLm9wdGlvbnMpLFdPLT0xKX19Y2xlYXIoKXt0aGlzLmNsZWFyRXZlbnRzKCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJFdmVudHMoKSx0aGlzLmNvbnRleHQ9bnVsbH1kZXN0cm95V2l0aE93bkV2ZW50c09ubHkoKXt0aGlzLmNsZWFyRXZlbnRzKCEwKSx0aGlzLmNvbnRleHQ9bnVs'@;
put 'bH1maXJlRXZlbnQobCxhKXtsZXQgZD1sLmRvY3VtZW50LGg9bDtkfHwoZD1sLm93bmVyRG9jdW1lbnQ/bC5vd25lckRvY3VtZW50OmwsaD1kLmRlZmF1bHRWaWV3KTtjb25zdCBmPXtidWJibGVzOiEwLGNhbmNlbGFibGU6Im1vdXNlbW92ZSIhPT1hLHZpZXc6aCxkZXRhaWw6MCxzY3JlZW5Y'@;
put 'OjAsc2NyZWVuWTowLGNsaWVudFg6MSxjbGllbnRZOjEsY3RybEtleTohMSxhbHRLZXk6ITEsc2hpZnRLZXk6ITEsbWV0YUtleTohMSxidXR0b246MCxyZWxhdGVkVGFyZ2V0OnZvaWQgMH07bGV0IHY7ZC5jcmVhdGVFdmVudD8odj1kLmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpLHYuaW5p'@;
put 'dE1vdXNlRXZlbnQoYSxmLmJ1YmJsZXMsZi5jYW5jZWxhYmxlLGYudmlldyxmLmRldGFpbCxmLnNjcmVlblgsZi5zY3JlZW5ZLGYuY2xpZW50WCxmLmNsaWVudFksZi5jdHJsS2V5LGYuYWx0S2V5LGYuc2hpZnRLZXksZi5tZXRhS2V5LGYuYnV0dG9uLGYucmVsYXRlZFRhcmdldHx8ZC5ib2R5'@;
put 'LnBhcmVudE5vZGUpKTp2PWQuY3JlYXRlRXZlbnRPYmplY3QoKSxsLmRpc3BhdGNoRXZlbnQ/bC5kaXNwYXRjaEV2ZW50KHYpOmwuZmlyZUV2ZW50KGBvbiR7YX1gLHYpfX07ZnVuY3Rpb24gVTcoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFpxZShjKXt2YXIgbD1mdW5jdGlvbiBXcWUoYyxs'@;
put 'KXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv'@;
put 'UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFs'@;
put 'dWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHokKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgWU89bmV3IFdlYWtTZXQ7Y2xhc3MgVSR7Y29uc3RydWN0b3IobCxhLGQpeyhmdW5jdGlvbiB6cWUoYyxsKXsoZnVuY3Rpb24gVXFlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLFlPKSxVNyh0aGlzLCJob3QiLHZvaWQgMCksVTcodGhpcywidGFibGVNZXRhIix2b2lkIDApLFU3KHRoaXMsInNlbGVjdGlvbiIs'@;
put 'dm9pZCAwKSxVNyh0aGlzLCJldmVudE1hbmFnZXIiLHZvaWQgMCksVTcodGhpcywiZGVzdHJveWVkIiwhMSksVTcodGhpcywiYWN0aXZlRWRpdG9yIix2b2lkIDApLFU3KHRoaXMsImNlbGxQcm9wZXJ0aWVzIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy50YWJsZU1ldGE9YSx0aGlzLnNlbGVj'@;
put 'dGlvbj1kLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBOMihsKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRvY3VtZW50S2V5RG93biIsaD0+eiQoWU8sdGhpcyxvZmUpLmNhbGwodGhpcyxoKSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsaD0+eiQoWU8sdGhpcyxv'@;
put 'ZmUpLmNhbGwodGhpcyxoKSksdGhpcy5ob3Qudmlldy5fd3QudXBkYXRlKCJvbkNlbGxEYmxDbGljayIsKGgsZix2KT0+eiQoWU8sdGhpcyxZcWUpLmNhbGwodGhpcyxoLGYsdikpfWdldEFjdGl2ZUVkaXRvcigpe3JldHVybiB0aGlzLmFjdGl2ZUVkaXRvcn1wcmVwYXJlRWRpdG9yKCl7dmFy'@;
put 'IGw7aWYodGhpcy5hY3RpdmVFZGl0b3ImJnRoaXMuYWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKXJldHVybiB2b2lkIHRoaXMuY2xvc2VFZGl0b3IoITEsITEsWj0+e1omJnRoaXMucHJlcGFyZUVkaXRvcigpfSk7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxh'@;
put 'c3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O2lmKCFhfHxhLmlzSGVhZGVyKCkpcmV0dXJuO2NvbnN0e3JvdzpkLGNvbDpofT1hLGY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGQsaCwhMSwibWV0YSIpO2xldCB2PWQsTT1oO2lmKEFycmF5Lmlz'@;
put 'QXJyYXkoZikmJihbdixNXT1mKSx0aGlzLmNlbGxQcm9wZXJ0aWVzPXRoaXMuaG90LmdldENlbGxNZXRhKHYsTSksIXRoaXMuaXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7Y29uc3QgRD10aGlzLmhvdC5nZXRDZWxsKGQsaCwhMCk7aWYoRCl7'@;
put 'Y29uc3QgWj10aGlzLmhvdC5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLG5lPXRoaXMuaG90LmNvbFRvUHJvcChNKSxjZT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuaG90LnRvUGh5c2ljYWxSb3codiksTSk7dGhpcy5hY3RpdmVFZGl0b3I9aWZlKFosdGhp'@;
put 'cy5ob3QpLHRoaXMuYWN0aXZlRWRpdG9yLnByZXBhcmUoZCxoLG5lLEQsY2UsdGhpcy5jZWxsUHJvcGVydGllcyl9fWlzRWRpdG9yT3BlbmVkKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc09wZW5lZCgpfW9wZW5FZGl0b3IobCxhKXtsZXQgZD1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtsZXQgZj10aGlz'@;
put 'LmhvdC5ydW5Ib29rcygiYmVmb3JlQmVnaW5FZGl0aW5nIixoLmhpZ2hsaWdodC5yb3csaC5oaWdobGlnaHQuY29sLGwsYSxkKTthIGluc3RhbmNlb2YgTW91c2VFdmVudCYmImJvb2xlYW4iIT10eXBlb2YgZiYmKGY9MD09PXRoaXMuaG90LnNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkmJmgu'@;
put 'aXNTaW5nbGUoKSksITEhPT1mPyh0aGlzLmFjdGl2ZUVkaXRvcnx8KHRoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKSx0aGlzLnByZXBhcmVFZGl0b3IoKSksdGhpcy5hY3RpdmVFZGl0b3ImJihkJiZ0aGlzLmFjdGl2ZUVkaXRvci5lbmFibGVGdWxsRWRpdE1vZGUoKSx0aGlzLmFjdGl2'@;
put 'ZUVkaXRvci5iZWdpbkVkaXRpbmcobCxhKSkpOnRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKX1jbG9zZUVkaXRvcihsLGEsZCl7dGhpcy5hY3RpdmVFZGl0b3I/dGhpcy5hY3RpdmVFZGl0b3IuZmluaXNoRWRpdGluZyhsLGEsZCk6ZCYmZCghMSl9Y2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhs'@;
put 'KXt0aGlzLmNsb3NlRWRpdG9yKCExLGwpfWNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUobCl7dGhpcy5jbG9zZUVkaXRvcighMCxsKX1jbGVhckFjdGl2ZUVkaXRvcigpe3RoaXMuYWN0aXZlRWRpdG9yPXZvaWQgMH1pc0NlbGxFZGl0YWJsZSgpe2NvbnN0IGw9dGhpcy5ob3Qu'@;
put 'Z2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm4hMTtjb25zdCBhPXRoaXMuaG90LmdldENlbGxFZGl0b3IodGhpcy5jZWxsUHJvcGVydGllcykse3JvdzpkLGNvbDpofT1sLmhpZ2hsaWdodCx7cm93SW5kZXhNYXBwZXI6Zixjb2x1bW5JbmRleE1hcHBlcjp2fT10aGlzLmhvdCxN'@;
put 'PWYuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbFJvdyhkKSl8fHYuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihoKSk7cmV0dXJuISh0aGlzLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5fHwhYXx8TSl9bW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCl7Y29uc3QgYT17Li4u'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMudGFibGVNZXRhLmVudGVyTW92ZXM/dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcyhsKTp0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzfTtsLnNoaWZ0S2V5JiYoYS5yb3c9LWEucm93LGEuY29sPS1hLmNvbCksdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVs'@;
put 'dGlwbGUoKT90aGlzLnNlbGVjdGlvbi50cmFuc2Zvcm1Gb2N1cyhhLnJvdyxhLmNvbCk6dGhpcy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoYS5yb3csYS5jb2wsITApfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWZ1bmN0aW9uIG9m'@;
put 'ZShjKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fCFsfHxsLmhpZ2hsaWdodC5pc0hlYWRlcigpfHxQbShjKSlyZXR1cm47Y29uc3R7a2V5Q29kZTphfT1jLGQ9KGMuY3RybEtleXx8Yy5tZXRhS2V5KSYmIWMuYWx0'@;
put 'S2V5OyghdGhpcy5hY3RpdmVFZGl0b3J8fHRoaXMuYWN0aXZlRWRpdG9yJiYhdGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpJiYhTCQoYSkmJiFLMmUoYSkmJiFkJiYhdGhpcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLm9wZW5FZGl0b3IoIiIsYyl9ZnVuY3Rpb24gWXFlKGMsbCl7bC5p'@;
put 'c0NlbGwoKSYmdGhpcy5vcGVuRWRpdG9yKG51bGwsYywhMCl9Y29uc3QgYWZlPW5ldyBXZWFrTWFwO1UkLmdldEluc3RhbmNlPWZ1bmN0aW9uKGMsbCxhKXtsZXQgZD1hZmUuZ2V0KGMpO3JldHVybiBkfHwoZD1uZXcgVSQoYyxsLGEpLGFmZS5zZXQoYyxkKSksZH07Y29uc3QgR3FlPVUkO2Z1'@;
put 'bmN0aW9uIEFFKGMsbCxhKXtzZmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHNmZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gY2Mo'@;
put 'YyxsKXtyZXR1cm4gYy5nZXQodmcoYyxsKSl9ZnVuY3Rpb24ga0UoYyxsLGEpe3JldHVybiBjLnNldCh2ZyhjLGwpLGEpLGF9ZnVuY3Rpb24gdmcoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGhfPU9iamVjdC5mcmVlemUoe0NFTEw6ImNlbGwiLE1JWEVEOiJtaXhlZCJ9KTt2YXIgcXU9bmV3IFdlYWtNYXAsR089bmV3IFdlYWtNYXAsJE89bmV3IFdlYWtNYXAs'@;
put 'S089bmV3IFdlYWtNYXAscU89bmV3IFdlYWtNYXAsSG09bmV3IFdlYWtTZXQ7Y2xhc3MgS3Fle2NvbnN0cnVjdG9yKGwpe3ZhciBhPXRoaXM7KGZ1bmN0aW9uICRxZShjLGwpe3NmZShjLGwpLGwuYWRkKGMpfSkodGhpcyxIbSksQUUodGhpcyxxdSx2b2lkIDApLEFFKHRoaXMsR08sdm9pZCAw'@;
put 'KSxBRSh0aGlzLCRPLDEpLEFFKHRoaXMsS08sbnVsbCksQUUodGhpcyxxTyxuZXcgTWFwKTtjb25zdCBkPWwuZ2V0U2V0dGluZ3MoKTtrRShxdSx0aGlzLGwpLGtFKEdPLHRoaXMsZC5pbWVGYXN0RWRpdD9oXy5NSVhFRDpoXy5DRUxMKSxjYyhxdSx0aGlzKS5hZGRIb29rKCJhZnRlclVwZGF0'@;
put 'ZVNldHRpbmdzIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB2ZyhIbSxhLFhxZSkuY2FsbChhLC4uLmYpfSksY2MocXUsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24i'@;
put 'LGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHZnKEhtLGEsbGZlKS5jYWxsKGEsLi4uZil9KSxjYyhxdSx0aGlzKS5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0Iixm'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiB2ZyhIbSxhLGxmZSkuY2FsbChhLC4uLmYpfSksY2MocXUsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25FbmQiLGZ1bmN0aW9u'@;
put 'KCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIHZnKEhtLGEscXFlKS5jYWxsKGEsLi4uZil9KX1nZXRGb2N1c01vZGUoKXtyZXR1cm4gY2MoR08sdGhpcyl9c2V0Rm9jdXNNb2RlKGwpe09iamVj'@;
put 'dC52YWx1ZXMoaF8pLmluY2x1ZGVzKGwpP2tFKEdPLHRoaXMsbCk6aWwoYCIke2x9IiBpcyBub3QgYSB2YWxpZCBmb2N1cyBtb2RlLmApfWdldFJlZm9jdXNEZWxheSgpe3JldHVybiBjYygkTyx0aGlzKX1zZXRSZWZvY3VzRGVsYXkobCl7a0UoJE8sdGhpcyxsKX1zZXRSZWZvY3VzRWxlbWVu'@;
put 'dEdldHRlcihsKXtrRShLTyx0aGlzLGwpfWdldFJlZm9jdXNFbGVtZW50KCl7dmFyIGw7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGNjKEtPLHRoaXMpP2NjKEtPLHRoaXMpLmNhbGwodGhpcyk6bnVsbD09PShsPWNjKHF1LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09bD92'@;
put 'b2lkIDA6bC5URVhUQVJFQX1mb2N1c09uSGlnaGxpZ2h0ZWRDZWxsKGwpe2NvbnN0IGE9ZD0+e3ZhciBoLGY7Y29uc3Qgdj1udWxsPT09KGg9Y2MocXUsdGhpcykuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaGlnaGxpZ2h0O2lmKCF2KXJldHVybjtsZXQg'@;
put 'TT1jYyhxdSx0aGlzKS5ydW5Ib29rcygibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLHYucm93LHYuY29sLGQpO0VwKE0pfHwoTT1kKSxNJiYobnVsbD09PShmPWNjKHF1LHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09Znx8IWYuaXNPcGVuZWQoKSkmJk0uZm9jdXMoe3ByZXZlbnRT'@;
put 'Y3JvbGw6ITB9KX07bD9hKGwpOnZnKEhtLHRoaXMsWiQpLmNhbGwodGhpcyxkPT5hKGQpKX1yZWZvY3VzVG9FZGl0b3JUZXh0YXJlYSgpe3ZhciBsO2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpjYygkTyx0aGlzKTt2YXIgZCxo'@;
put 'OyFjYyhxdSx0aGlzKS5nZXRTZXR0aW5ncygpLmltZUZhc3RFZGl0fHxudWxsIT09KGw9Y2MocXUsdGhpcykuZ2V0QWN0aXZlRWRpdG9yKCkpJiZ2b2lkIDAhPT1sJiZsLmlzT3BlbmVkKCl8fChudWxsPT09KGQ9Y2MocXUsdGhpcykuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1kfHxu'@;
put 'dWxsPT09KGg9ZC5yZWZyZXNoVmFsdWUpfHx2b2lkIDA9PT1ofHxoLmNhbGwoZCksY2MocU8sdGhpcykuaGFzKGEpfHxjYyhxTyx0aGlzKS5zZXQoYSxTRSgoKT0+e3ZhciBmO2NjKHF1LHRoaXMpLmlzRGVzdHJveWVkfHxudWxsPT09KGY9dGhpcy5nZXRSZWZvY3VzRWxlbWVudCgpKXx8dm9p'@;
put 'ZCAwPT09Znx8Zi5zZWxlY3QoKX0sYSkpLGNjKHFPLHRoaXMpLmdldChhKSgpKX19ZnVuY3Rpb24gWiQoYyl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9Y2MocXUsdGhpcykuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O2lmKCFhfHwhY2Mo'@;
put 'cXUsdGhpcykuc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoYSkpcmV0dXJuIHZvaWQgYyhudWxsKTtjb25zdCBkPWNjKHF1LHRoaXMpLmdldENlbGwoYS5yb3csYS5jb2wsITApO251bGw9PT1kP2NjKHF1LHRoaXMpLmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIsKCk9PntjKGNjKHF1LHRoaXMp'@;
put 'LmdldENlbGwoYS5yb3csYS5jb2wsITApKX0pOmMoZCl9ZnVuY3Rpb24gbGZlKCl7dmcoSG0sdGhpcyxaJCkuY2FsbCh0aGlzLGM9Pntjb25zdHthY3RpdmVFbGVtZW50Omx9PWNjKHF1LHRoaXMpLnJvb3REb2N1bWVudDtsJiZQTyhsKSYmbC5ibHVyKCksdGhpcy5mb2N1c09uSGlnaGxpZ2h0'@;
put 'ZWRDZWxsKGMpfSl9ZnVuY3Rpb24gcXFlKCl7dmcoSG0sdGhpcyxaJCkuY2FsbCh0aGlzLGM9Pnt0aGlzLmdldEZvY3VzTW9kZSgpPT09aF8uTUlYRUQmJiJURCI9PT1jPy5ub2RlTmFtZSYmdGhpcy5yZWZvY3VzVG9FZGl0b3JUZXh0YXJlYSgpfSl9ZnVuY3Rpb24gWHFlKGMpeyJib29sZWFu'@;
put 'Ij09dHlwZW9mIGMuaW1lRmFzdEVkaXQmJnRoaXMuc2V0Rm9jdXNNb2RlKGMuaW1lRmFzdEVkaXQ/aF8uTUlYRUQ6aF8uQ0VMTCl9XygxNjIyOSksXyg0NDIxMyk7Y29uc3QgY2ZlPXsiJm5ic3A7IjoiICIsIiZhbXA7IjoiJiIsIiZsdDsiOiI8IiwiJmd0OyI6Ij4ifSxKcWU9bmV3IFJlZ0V4'@;
put 'cChPYmplY3Qua2V5cyhjZmUpLm1hcChjPT5gKCR7Y30pYCkuam9pbigifCIpLCJnaSIpO2Z1bmN0aW9uIFckKGMpe2NvbnN0IGw9Yy5oYXNDb2xIZWFkZXJzKCksYT1jLmhhc1Jvd0hlYWRlcnMoKSxkPVtsPy0xOjAsYT8tMTowLGMuY291bnRSb3dzKCktMSxjLmNvdW50Q29scygpLTFdLGg9'@;
put 'Yy5nZXREYXRhKC4uLmQpLGY9aC5sZW5ndGgsdj1mPjA/aFswXS5sZW5ndGg6MCxNPVsiPHRhYmxlPiIsIjwvdGFibGU+Il0sRD1sP1siPHRoZWFkPiIsIjwvdGhlYWQ+Il06W10sWj1bIjx0Ym9keT4iLCI8L3Rib2R5PiJdLG5lPWE/MTowLGNlPWw/MTowO2ZvcihsZXQgYmU9MDtiZTxmO2Jl'@;
put 'Kz0xKXtjb25zdCBFZT1sJiYwPT09YmUsQmU9W107Zm9yKGxldCBydD0wO3J0PHY7cnQrPTEpe2NvbnN0IHB0PSFFZSYmYSYmMD09PXJ0O2xldCBkdD0iIjtpZihFZSlkdD1gPHRoPiR7Yy5nZXRDb2xIZWFkZXIocnQtbmUpfTwvdGg+YDtlbHNlIGlmKHB0KWR0PWA8dGg+JHtjLmdldFJvd0hl'@;
put 'YWRlcihiZS1jZSl9PC90aD5gO2Vsc2V7Y29uc3QgSnQ9aFtiZV1bcnRdLHtoaWRkZW46dm4scm93c3BhbjpDbixjb2xzcGFuOnRufT1jLmdldENlbGxNZXRhKGJlLWNlLHJ0LW5lKTtpZighdm4pe2NvbnN0IE1uPVtdO2lmKENuJiZNbi5wdXNoKGByb3dzcGFuPSIke0NufSJgKSx0biYmTW4u'@;
put 'cHVzaChgY29sc3Bhbj0iJHt0bn0iYCksemMoSnQpKWR0PWA8dGQgJHtNbi5qb2luKCIgIil9PjwvdGQ+YDtlbHNle2NvbnN0IENyPUp0LnRvU3RyaW5nKCkucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IikucmVwbGFjZSgvKDxicihccyp8XC8pPihcclxufFxuKT98'@;
put 'XHJcbnxcbikvZywiPGJyPlxyXG4iKS5yZXBsYWNlKC9ceDIwL2dpLCImbmJzcDsiKS5yZXBsYWNlKC9cdC9naSwiJiM5OyIpO2R0PWA8dGQgJHtNbi5qb2luKCIgIil9PiR7Q3J9PC90ZD5gfX19QmUucHVzaChkdCl9Y29uc3QgcWU9WyI8dHI+IiwuLi5CZSwiPC90cj4iXS5qb2luKCIiKTtF'@;
put 'ZT9ELnNwbGljZSgxLDAscWUpOlouc3BsaWNlKC0xLDAscWUpfXJldHVybiBNLnNwbGljZSgxLDAsRC5qb2luKCIiKSxaLmpvaW4oIiIpKSxNLmpvaW4oIiIpfWZ1bmN0aW9uIFkkKGMpe2NvbnN0IGw9Yy5sZW5ndGgsYT1bIjx0YWJsZT4iXTtmb3IobGV0IGQ9MDtkPGw7ZCs9MSl7Y29uc3Qg'@;
put 'aD1jW2RdLGY9aC5sZW5ndGgsdj1bXTswPT09ZCYmYS5wdXNoKCI8dGJvZHk+Iik7Zm9yKGxldCBNPTA7TTxmO00rPTEpe2NvbnN0IEQ9aFtNXSxaPXpjKEQpPyIiOkQudG9TdHJpbmcoKS5yZXBsYWNlKC8mL2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCIm'@;
put 'Z3Q7IikucmVwbGFjZSgvKDxicihccyp8XC8pPihcclxufFxuKT98XHJcbnxcbikvZywiPGJyPlxyXG4iKS5yZXBsYWNlKC9ceDIwezIsfS9naSxuZT0+YDxzcGFuIHN0eWxlPSJtc28tc3BhY2VydW46IHllcyI+JHsiJm5ic3A7Ii5yZXBlYXQobmUubGVuZ3RoLTEpfSA8L3NwYW4+YCkucmVw'@;
put 'bGFjZSgvXHQvZ2ksIiYjOTsiKTt2LnB1c2goYDx0ZD4ke1p9PC90ZD5gKX1hLnB1c2goIjx0cj4iLC4uLnYsIjwvdHI+IiksZCsxPT09bCYmYS5wdXNoKCI8L3Rib2R5PiIpfXJldHVybiBhLnB1c2goIjwvdGFibGU+IiksYS5qb2luKCIiKX1mdW5jdGlvbiB1ZmUoYyl7bGV0IGw9YXJndW1l'@;
put 'bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmRvY3VtZW50O2NvbnN0IGE9e30sZD1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWwuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5hcHBlbmRDaGlsZChoKTtsZXQgZj1jO2lmKCJzdHJpbmciPT10eXBl'@;
put 'b2YgZil7Y29uc3QgSnQ9Zi5yZXBsYWNlKC88dGRcYltePl0qPz4oW1xzXFNdKj8pPFwvXHMqdGQ+L2csdm49Pntjb25zdCBDbj12bi5tYXRjaCgvPHRkXGJbXj5dKj8+L2cpWzBdO3JldHVybmAke0NufSR7dm4uc3Vic3RyaW5nKENuLmxlbmd0aCx2bi5sYXN0SW5kZXhPZigiPCIpKS50cmlt'@;
put 'KCkucmVwbGFjZUFsbCgvXG5ccysvZywiICIpLnJlcGxhY2VBbGwoLzxwLio/Pi9nLCJcbiIpLnJlcGxhY2UoIlxuIiwiIikucmVwbGFjZUFsbCgvPFwvKC4qKT5ccyskL2dtLCI8LyQxPiIpLnJlcGxhY2UoLyg8KD8hYnIpKFtePl0rKT4pL2dpLCIiKS5yZXBsYWNlQWxsKC9eJm5ic3A7JC9n'@;
put 'bSwiIil9PC90ZD5gfSk7aC5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLGAke0p0fWApLGY9aC5xdWVyeVNlbGVjdG9yKCJ0YWJsZSIpfWlmKCFmfHwhZnVuY3Rpb24gUXFlKGMpe3JldHVybiJUQUJMRSI9PT0oYyYmYy5ub2RlTmFtZXx8IiIpfShmKSlyZXR1cm47Y29uc3Qgdj1o'@;
put 'LnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZSQ9ImVuZXJhdG9yIl0nKSxNPW51bGwhPT1mLnF1ZXJ5U2VsZWN0b3IoInRib2R5IHRoIiksRD1mLnF1ZXJ5U2VsZWN0b3IoInRyIiksWj1EP0FycmF5LmZyb20oRC5jZWxscykucmVkdWNlKChKdCx2bik9Pkp0K3ZuLmNvbFNwYW4sMCktKE0/MTow'@;
put 'KTowLG5lPWYudEZvb3QmJkFycmF5LmZyb20oZi50Rm9vdC5yb3dzKXx8W10sY2U9W107bGV0IGJlPSExLEVlPTAsQmU9MDtpZihmLnRIZWFkKXtjb25zdCBKdD1BcnJheS5mcm9tKGYudEhlYWQucm93cykuZmlsdGVyKHZuPT57Y29uc3QgQ249bnVsbCE9PXZuLnF1ZXJ5U2VsZWN0b3IoInRk'@;
put 'Iik7cmV0dXJuIENuJiZjZS5wdXNoKHZuKSwhQ259KTtFZT1KdC5sZW5ndGgsYmU9RWU+MCxFZT4xP2EubmVzdGVkSGVhZGVycz1BcnJheS5mcm9tKEp0KS5yZWR1Y2UoKHZuLENuKT0+e2NvbnN0IHRuPUFycmF5LmZyb20oQ24uY2VsbHMpLnJlZHVjZSgoTW4sQ3IsR3IpPT57aWYoTSYmMD09'@;
put 'PUdyKXJldHVybiBNbjtjb25zdHtjb2xTcGFuOmdyLGlubmVySFRNTDpHbn09Q3I7cmV0dXJuIE1uLnB1c2goZ3I+MT97bGFiZWw6R24sY29sc3Bhbjpncn06R24pLE1ufSxbXSk7cmV0dXJuIHZuLnB1c2godG4pLHZufSxbXSk6YmUmJihhLmNvbEhlYWRlcnM9QXJyYXkuZnJvbShKdFswXS5j'@;
put 'aGlsZHJlbikucmVkdWNlKCh2bixDbix0bik9PihNJiYwPT09dG58fHZuLnB1c2goQ24uaW5uZXJIVE1MKSx2biksW10pKX1jZS5sZW5ndGgmJihhLmZpeGVkUm93c1RvcD1jZS5sZW5ndGgpLG5lLmxlbmd0aCYmKGEuZml4ZWRSb3dzQm90dG9tPW5lLmxlbmd0aCk7Y29uc3QgcWU9Wy4uLmNl'@;
put 'LC4uLkFycmF5LmZyb20oZi50Qm9kaWVzKS5yZWR1Y2UoKEp0LHZuKT0+KEp0LnB1c2goLi4uQXJyYXkuZnJvbSh2bi5yb3dzKSksSnQpLFtdKSwuLi5uZV07QmU9cWUubGVuZ3RoO2NvbnN0IHJ0PW5ldyBBcnJheShCZSk7Zm9yKGxldCBKdD0wO0p0PEJlO0p0KyspcnRbSnRdPW5ldyBBcnJh'@;
put 'eShaKTtjb25zdCBwdD1bXSxkdD1bXTtmb3IobGV0IEp0PTA7SnQ8QmU7SnQrKyl7Y29uc3QgQ249QXJyYXkuZnJvbShxZVtKdF0uY2VsbHMpLHRuPUNuLmxlbmd0aDtmb3IobGV0IE1uPTA7TW48dG47TW4rKyl7Y29uc3QgQ3I9Q25bTW5dLHtub2RlTmFtZTpHcixpbm5lckhUTUw6Z3Iscm93'@;
put 'U3BhbjpHbixjb2xTcGFuOm9pfT1DcixfaT1ydFtKdF0uZmluZEluZGV4KE9uPT52b2lkIDA9PT1Pbik7aWYoIlREIj09PUdyKXtpZihHbj4xfHxvaT4xKXtmb3IobGV0IERyPUp0O0RyPEp0K0duO0RyKyspaWYoRHI8QmUpZm9yKGxldCAkcj1faTskcjxfaStvaTskcisrKXJ0W0RyXVskcl09'@;
put 'bnVsbDtjb25zdCB6cj1Dci5nZXRBdHRyaWJ1dGUoInN0eWxlIik7enImJnpyLmluY2x1ZGVzKCJtc28taWdub3JlOmNvbHNwYW4iKXx8cHQucHVzaCh7Y29sOl9pLHJvdzpKdCxyb3dzcGFuOkduLGNvbHNwYW46b2l9KX1sZXQgT249IiI7T249diYmL2V4Y2VsL2dpLnRlc3Qodi5jb250ZW50'@;
put 'KT9nci5yZXBsYWNlKC9bXHJcbl1bXHgyMF17MCwyfS9nLCIgIikucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dP1tceDIwXXswLDN9L2dpbSwiXHJcbiIpOmdyLnJlcGxhY2UoLzxicihccyp8XC8pPltcclxuXT8vZ2ltLCJcclxuIikscnRbSnRdW19pXT1Pbi5yZXBsYWNlKEpxZSx6cj0+'@;
put 'Y2ZlW3pyXSl9ZWxzZSBkdC5wdXNoKGdyKX19cmV0dXJuIHB0Lmxlbmd0aCYmKGEubWVyZ2VDZWxscz1wdCksZHQubGVuZ3RoJiYoYS5yb3dIZWFkZXJzPWR0KSxydC5sZW5ndGgmJihhLmRhdGE9cnQpLGF9ZnVuY3Rpb24gbTEoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAh'@;
put 'PT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2NvbnN0IGE9dHlwZW9mIGM7aWYoIm51bWJlciI9PT1hKXJldHVybiFpc05hTihjKSYmaXNGaW5pdGUoYyk7aWYoInN0cmluZyI9PT1hKXtpZigwPT09Yy5sZW5ndGgpcmV0dXJuITE7aWYoMT09PWMubGVuZ3RoKXJldHVybi9cZC8udGVz'@;
put 'dChjKTtjb25zdCBkPUFycmF5LmZyb20obmV3IFNldChbIi4iLC4uLmxdKSkubWFwKGg9PmBcXCR7aH1gKS5qb2luKCJ8Iik7cmV0dXJuIG5ldyBSZWdFeHAoYF5bKy1dPygoKCR7ZH0pP1xcZCsoKCR7ZH0pXFxkKyk/KGVbKy1dP1xcZCspPyl8KDB4W2EtZlxcZF0rKSkkYCwiaSIpLnRlc3Qo'@;
put 'Yy50cmltKCkpfXJldHVybiJvYmplY3QiPT09YSYmISghY3x8Im51bWJlciIhPXR5cGVvZiBjLnZhbHVlT2YoKXx8YyBpbnN0YW5jZW9mIERhdGUpfWZ1bmN0aW9uIGRmZShjKXtyZXR1cm4gbTEoYyxbIiwiXSl9ZnVuY3Rpb24gJG8oYyxsLGEpe2xldCBkPS0xO2ZvcigiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgbD8oYT1sLGw9Yyk6ZD1jLTE7KytkPD1sJiYhMSE9PWEoZCk7KTt9ZnVuY3Rpb24gRyQoYyxsLGEpe2xldCBkPWMrMTtmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGwmJihhPWwsbD0wKTstLWQ+PWwmJiExIT09YShkKTspO31mdW5jdGlvbiAkJChjLGwpe3JldHVybiBsPXBhcnNlSW50'@;
put 'KGwudG9TdHJpbmcoKS5yZXBsYWNlKCIlIiwiIiksMTApLGw9aXNOYU4obCk/MDpsLHBhcnNlSW50KGMqbC8xMDAsMTApfWZ1bmN0aW9uIEFzKGMsbCxhKXtyZXR1cm4gTWF0aC5taW4oYyxsKT09PWM/bDpNYXRoLm1heChjLGEpPT09Yz9hOmN9Y29uc3QgaGZlPW5ldyBNYXAoW1siYXNjIixb'@;
put 'LTEsMV1dLFsiZGVzYyIsWzEsLTFdXV0pLHRYZT1jPT5gVGhlIHByaW9yaXR5ICcke2N9JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgbWFwLmAsblhlPWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlzIG5vdCBhIG51bWJlci5gLGlYZT1jPT5gVGhlIGlkICcke2N9JyBpcyBhbHJlYWR5IGRl'@;
put 'Y2xhcmVkIGluIGEgbWFwLmA7ZnVuY3Rpb24gWE8oKXtsZXR7ZXJyb3JJZEV4aXN0czpjfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgbD1uZXcgTWFwO2Z1bmN0aW9uIE0oKXtyZXR1cm5bLi4ubF19ZnVuY3Rpb24gRCha'@;
put 'KXtyZXR1cm4gbC5oYXMoWil9cmV0dXJuIGM9bWwoYyk/YzppWGUse2FkZEl0ZW06ZnVuY3Rpb24gYShaLG5lKXtpZihEKFopKXRocm93IG5ldyBFcnJvcihjKFopKTtsLnNldChaLG5lKX0sY2xlYXI6ZnVuY3Rpb24gaCgpe2wuY2xlYXIoKX0sZ2V0SWQ6ZnVuY3Rpb24gZihaKXtjb25zdFtu'@;
put 'ZV09TSgpLmZpbmQoY2U9PntsZXRbYmUsRWVdPWNlO3JldHVybiBaPT09RWUmJmJlfSl8fFtudWxsXTtyZXR1cm4gbmV9LGdldEl0ZW06ZnVuY3Rpb24gdihaKXtyZXR1cm4gbC5nZXQoWil9LGdldEl0ZW1zOk0saGFzSXRlbTpELHJlbW92ZUl0ZW06ZnVuY3Rpb24gZChaKXtyZXR1cm4gbC5k'@;
put 'ZWxldGUoWil9fX1jb25zdCBvWGU9Yz0+YCcke2N9JyB2YWx1ZSBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIGEgdW5pcXVlIHNldC5gLHEkPWM9PmBUaGVyZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgIiR7Y30iIHBsdWdpbi5gLGZmZT1mdW5jdGlvbiByWGUoKXtsZXR7ZXJyb3JQcmlvcml0eUV4'@;
put 'aXN0czpjLGVycm9yUHJpb3JpdHlOYU46bH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGE9bmV3IE1hcDtyZXR1cm4gYz1tbChjKT9jOnRYZSxsPW1sKGwpP2w6blhlLHthZGRJdGVtOmZ1bmN0aW9uIGQoZix2KXtpZigh'@;
put 'bTEoZikpdGhyb3cgbmV3IEVycm9yKGwoZikpO2lmKGEuaGFzKGYpKXRocm93IG5ldyBFcnJvcihjKGYpKTthLnNldChmLHYpfSxnZXRJdGVtczpmdW5jdGlvbiBoKCl7bGV0IGY9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiJhc2MiO2Nv'@;
put 'bnN0W3YsTV09aGZlLmdldChmKXx8aGZlLmdldCgiYXNjIik7cmV0dXJuWy4uLmFdLnNvcnQoKEQsWik9PkRbMF08WlswXT92Ok0pLm1hcChEPT5EWzFdKX19fSh7ZXJyb3JQcmlvcml0eUV4aXN0czpjPT5gVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHBsdWdpbiBvbiBwcmlvcml0eSAi'@;
put 'JHtjfSIuYCxlcnJvclByaW9yaXR5TmFOOmM9PmBUaGUgcHJpb3JpdHkgIiR7Y30iIGlzIG5vdCBhIG51bWJlci5gfSkscGZlPWZ1bmN0aW9uIGFYZSgpe2xldHtlcnJvckl0ZW1FeGlzdHM6Y309YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBd'@;
put 'Ont9O2NvbnN0IGw9bmV3IFNldDtyZXR1cm4gYz1tbChjKT9jOm9YZSx7YWRkSXRlbTpmdW5jdGlvbiBhKGYpe2lmKGwuaGFzKGYpKXRocm93IG5ldyBFcnJvcihjKGYpKTtsLmFkZChmKX0sY2xlYXI6ZnVuY3Rpb24gaCgpe2wuY2xlYXIoKX0sZ2V0SXRlbXM6ZnVuY3Rpb24gZCgpe3JldHVy'@;
put 'blsuLi5sXX19fSh7ZXJyb3JJdGVtRXhpc3RzOnEkfSksWCQ9WE8oe2Vycm9ySWRFeGlzdHM6cSR9KTtmdW5jdGlvbiBKJCgpe3JldHVyblsuLi5mZmUuZ2V0SXRlbXMoKSwuLi5wZmUuZ2V0SXRlbXMoKV19ZnVuY3Rpb24gREUoYyl7Y29uc3QgbD1wMShjKTtyZXR1cm4gWCQuZ2V0SXRlbShs'@;
put 'KX1mdW5jdGlvbiBQcyhjLGwsYSl7W2MsbCxhXT1mdW5jdGlvbiBjWGUoYyxsLGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjJiYoYz0obD1jKS5QTFVHSU5fS0VZLGE9bC5QTFVHSU5fUFJJT1JJVFkpLFtjLGwsYV19KGMsbCxhKSx2b2lkIDA9PT1ERShjKSYmZnVuY3Rpb24gbFhlKGMs'@;
put 'bCxhKXtjb25zdCBkPXAxKGMpO2lmKFgkLmhhc0l0ZW0oZCkpdGhyb3cgbmV3IEVycm9yKHEkKGQpKTt2b2lkIDA9PT1hP3BmZS5hZGRJdGVtKGQpOmZmZS5hZGRJdGVtKGEsZCksWCQuYWRkSXRlbShkLGwpfShjLGwsYSl9Y29uc3R7cmVnaXN0ZXI6dVhlLGdldEl0ZW06ZFhlLGhhc0l0ZW06'@;
put 'Z2ZlLGdldE5hbWVzOmhYZX09cjMoInJlbmRlcmVycyIpO2Z1bmN0aW9uIEpPKGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFnZmUoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgcmVuZGVyZXIgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gZFhl'@;
put 'KGMpfWZ1bmN0aW9uIEloKGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5SRU5ERVJFUl9UWVBFKSx1WGUoYyxsKX1jb25zdHtyZWdpc3RlcjpmWGUsZ2V0SXRlbTpwWGUsaGFzSXRlbTptZmUsZ2V0TmFtZXM6Z1hlfT1yMygidmFsaWRhdG9ycyIpO2Z1bmN0aW9uIFEkKGMpe2lm'@;
put 'KCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFtZmUoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIHBYZShjKX1mdW5jdGlvbiBaNyhjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9Yyku'@;
put 'VkFMSURBVE9SX1RZUEUpLGZYZShjLGwpfWZ1bmN0aW9uIGtwKGMsbCxhKXsoZnVuY3Rpb24gbVhlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMs'@;
put 'bCksbC5zZXQoYyxhKX1mdW5jdGlvbiBRbyhjLGwpe3JldHVybiBjLmdldCh2ZmUoYyxsKSl9ZnVuY3Rpb24gTm0oYyxsLGEpe3JldHVybiBjLnNldCh2ZmUoYyxsKSxhKSxhfWZ1bmN0aW9uIHZmZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu'@;
put 'IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFYyPW5ldyBXZWFrTWFwLGVLPW5ldyBXZWFrTWFwLHgwPW5ldyBXZWFrTWFwLGZfPW5ldyBXZWFrTWFwLFFPPW5ldyBX'@;
put 'ZWFrTWFwLGkzPW5ldyBXZWFrTWFwLHRLPW5ldyBXZWFrTWFwLElFPW5ldyBXZWFrTWFwLFc3PW5ldyBXZWFrTWFwLERwPW5ldyBXZWFrTWFwO2NvbnN0IGJmZT1jbGFzcyB2WGV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe2xldCBNPWFyZ3VtZW50cy5sZW5ndGg+NiYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzZdP2FyZ3VtZW50c1s2XTpudWxsO2twKHRoaXMsVjIsdm9pZCAwKSxrcCh0aGlzLGVLLHZvaWQgMCksa3AodGhpcyx4MCx2b2lkIDApLGtwKHRoaXMsZl8sdm9pZCAwKSxrcCh0aGlzLFFPLHZvaWQgMCksa3AodGhpcyxpMyx2b2lkIDApLGtwKHRoaXMsdEssdm9pZCAwKSxrcCh0'@;
put 'aGlzLElFLHZvaWQgMCksa3AodGhpcyxXNyxbbnVsbCxudWxsXSksa3AodGhpcyxEcCxbbnVsbCxudWxsXSksTm0oVjIsdGhpcyxkKSxObShlSyx0aGlzLGEpLE5tKHgwLHRoaXMsZiksTm0oZl8sdGhpcyx2KSxObShRTyx0aGlzLE0pLE5tKGkzLHRoaXMsaCksTm0odEssdGhpcyxsKSx0aGlz'@;
put 'LnJlZ2lzdGVyRXZlbnRzKCl9cmVnaXN0ZXJFdmVudHMoKXtRbyhpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFvKHgwLHRoaXMpLmhvbGRlciwiY29udGV4dG1lbnUiLGQ9PnRoaXMub25Db250ZXh0TWVudShkKSksUW8oaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRbyh4MCx0aGlzKS5U'@;
put 'QUJMRSwibW91c2VvdmVyIixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSxRbyhpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFvKHgwLHRoaXMpLlRBQkxFLCJtb3VzZW91dCIsZD0+dGhpcy5vbk1vdXNlT3V0KGQpKTtjb25zdCBsPSgpPT57UW8oaTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihR'@;
put 'byh4MCx0aGlzKS5ob2xkZXIsInRvdWNoc3RhcnQiLGQ9PnRoaXMub25Ub3VjaFN0YXJ0KGQpKSxRbyhpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFvKHgwLHRoaXMpLmhvbGRlciwidG91Y2hlbmQiLGQ9PnRoaXMub25Ub3VjaEVuZChkKSksdGhpcy5tb21lbnR1bVNjcm9sbGluZ3x8KHRo'@;
put 'aXMubW9tZW50dW1TY3JvbGxpbmc9e30pLFFvKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUW8oeDAsdGhpcykuaG9sZGVyLCJzY3JvbGwiLCgpPT57Y2xlYXJUaW1lb3V0KHRoaXMubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQpLHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZ3x8'@;
put 'UW8oVjIsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVUb3VjaFNjcm9sbCIpLHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25nb2luZz0hMCx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLl90aW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnRvdWNoQXBwbGllZHx8KHRoaXMubW9tZW50dW1TY3Jv'@;
put 'bGxpbmcub25nb2luZz0hMSxRbyhWMix0aGlzKS5nZXRTZXR0aW5nKCJvbkFmdGVyTW9tZW50dW1TY3JvbGwiKSl9LDIwMCl9KX07QXAoKT9sKCk6KEEkKCkmJmwoKSwoKCk9PntRbyhpMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFvKHgwLHRoaXMpLmhvbGRlciwibW91c2V1cCIsZD0+dGhp'@;
put 'cy5vbk1vdXNlVXAoZCkpLFFvKGkzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUW8oeDAsdGhpcykuaG9sZGVyLCJtb3VzZWRvd24iLGQ9PnRoaXMub25Nb3VzZURvd24oZCkpfSkoKSl9c2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChsKXtjb25zdCBkPXRoaXMucGFyZW50Q2VsbChsKS5jb29yZHM7'@;
put 'aWYoUW8oSUUsdGhpcykmJmQpe2NvbnN0W2gsZl09W2Qucm93LFFvKElFLHRoaXMpLmZyb20ucm93XSxbdixNXT1bZC5jb2wsUW8oSUUsdGhpcykuZnJvbS5jb2xdO3JldHVybiBoPT09ZiYmdj09PU19cmV0dXJuITF9cGFyZW50Q2VsbChsKXtjb25zdCBhPXt9LGg9dkUobCxbIlREIiwiVEgi'@;
put 'XSxRbyh4MCx0aGlzKS5UQUJMRSk7cmV0dXJuIGg/KGEuY29vcmRzPVFvKHgwLHRoaXMpLmdldENvb3JkcyhoKSxhLlREPWgpOnBhKGwsInd0Qm9yZGVyIikmJnBhKGwsImN1cnJlbnQiKT8oYS5jb29yZHM9UW8oZl8sdGhpcykuZ2V0Rm9jdXNTZWxlY3Rpb24oKS5jZWxsUmFuZ2UuaGlnaGxp'@;
put 'Z2h0LGEuVEQ9UW8oeDAsdGhpcykuZ2V0Q2VsbChhLmNvb3JkcykpOnBhKGwsInd0Qm9yZGVyIikmJnBhKGwsImFyZWEiKSYmUW8oZl8sdGhpcykuZ2V0QXJlYVNlbGVjdGlvbigpLmNlbGxSYW5nZSYmKGEuY29vcmRzPVFvKGZfLHRoaXMpLmdldEFyZWFTZWxlY3Rpb24oKS5jZWxsUmFuZ2Uu'@;
put 'dG8sYS5URD1Rbyh4MCx0aGlzKS5nZXRDZWxsKGEuY29vcmRzKSksYX1vbk1vdXNlRG93bihsKXtjb25zdCBhPVFvKGVLLHRoaXMpLnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50LGQ9VCQoTTJlLGwudGFyZ2V0KSxoPWwudGFyZ2V0O2lmKCFbIlREIiwiVEgiXS5pbmNsdWRlcyhhLm5vZGVO'@;
put 'YW1lKSYmKGg9PT1hfHxkKDApPT09YXx8ZCgxKT09PWEpKXJldHVybjtjb25zdCBmPXRoaXMucGFyZW50Q2VsbChoKTtwYShoLCJjb3JuZXIiKT9RbyhWMix0aGlzKS5nZXRTZXR0aW5nKCJvbkNlbGxDb3JuZXJNb3VzZURvd24iLGwsaCk6Zi5URCYmUW8oVjIsdGhpcykuaGFzKCJvbkNlbGxN'@;
put 'b3VzZURvd24iKSYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlRG93biIsbCxmLmNvb3JkcyxmLlREKSwoMD09PWwuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJmYuVEQmJihRbyhEcCx0aGlzKVswXT1mLlRELGNsZWFyVGltZW91dChRbyhXNyx0aGlzKVswXSksUW8oVzcsdGhp'@;
put 'cylbMF09c2V0VGltZW91dCgoKT0+e1FvKERwLHRoaXMpWzBdPW51bGx9LDFlMykpfW9uQ29udGV4dE1lbnUobCl7aWYoUW8oVjIsdGhpcykuaGFzKCJvbkNlbGxDb250ZXh0TWVudSIpKXtjb25zdCBhPXRoaXMucGFyZW50Q2VsbChsLnRhcmdldCk7YS5URCYmdGhpcy5jYWxsTGlzdGVuZXIo'@;
put 'Im9uQ2VsbENvbnRleHRNZW51IixsLGEuY29vcmRzLGEuVEQpfX1vbk1vdXNlT3ZlcihsKXtpZighUW8oVjIsdGhpcykuaGFzKCJvbkNlbGxNb3VzZU92ZXIiKSlyZXR1cm47Y29uc3QgYT1Rbyh4MCx0aGlzKS5UQUJMRSxkPXZFKGwudGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGg9UW8oUU8sdGhp'@;
put 'cyl8fHRoaXM7ZCYmZCE9PWgubGFzdE1vdXNlT3ZlciYmUm0oZCxhKSYmKGgubGFzdE1vdXNlT3Zlcj1kLHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU92ZXIiLGwsUW8oeDAsdGhpcykuZ2V0Q29vcmRzKGQpLGQpKX1vbk1vdXNlT3V0KGwpe2lmKCFRbyhWMix0aGlzKS5oYXMoIm9u'@;
put 'Q2VsbE1vdXNlT3V0IikpcmV0dXJuO2NvbnN0IGE9UW8oeDAsdGhpcykuVEFCTEUsZD12RShsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPXZFKGwucmVsYXRlZFRhcmdldCxbIlREIiwiVEgiXSxhKSxmPVFvKFFPLHRoaXMpfHx0aGlzO2QmJmQhPT1oJiZSbShkLGEpJiYodGhpcy5jYWxsTGlz'@;
put 'dGVuZXIoIm9uQ2VsbE1vdXNlT3V0IixsLFFvKHgwLHRoaXMpLmdldENvb3JkcyhkKSxkKSxudWxsPT09aCYmKGYubGFzdE1vdXNlT3Zlcj1udWxsKSl9b25Nb3VzZVVwKGwpe2NvbnN0IGE9dGhpcy5wYXJlbnRDZWxsKGwudGFyZ2V0KTthLlREJiZRbyhWMix0aGlzKS5oYXMoIm9uQ2VsbE1v'@;
put 'dXNlVXAiKSYmdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlVXAiLGwsYS5jb29yZHMsYS5URCksKDA9PT1sLmJ1dHRvbnx8dGhpcy50b3VjaEFwcGxpZWQpJiYoYS5URD09PVFvKERwLHRoaXMpWzBdJiZhLlREPT09UW8oRHAsdGhpcylbMV0/KHBhKGwudGFyZ2V0LCJjb3JuZXIiKT90'@;
put 'aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsQ29ybmVyRGJsQ2xpY2siLGwsYS5jb29yZHMsYS5URCk6dGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbERibENsaWNrIixsLGEuY29vcmRzLGEuVEQpLFFvKERwLHRoaXMpWzBdPW51bGwsUW8oRHAsdGhpcylbMV09bnVsbCk6YS5URD09PVFvKERwLHRo'@;
put 'aXMpWzBdJiYoUW8oRHAsdGhpcylbMV09YS5URCxjbGVhclRpbWVvdXQoUW8oVzcsdGhpcylbMV0pLFFvKFc3LHRoaXMpWzFdPXNldFRpbWVvdXQoKCk9PntRbyhEcCx0aGlzKVsxXT1udWxsfSw1MDApKSl9b25Ub3VjaFN0YXJ0KGwpe05tKElFLHRoaXMsUW8oZl8sdGhpcykuZ2V0Rm9jdXNT'@;
put 'ZWxlY3Rpb24oKS5jZWxsUmFuZ2UpLHRoaXMudG91Y2hBcHBsaWVkPSEwLHRoaXMub25Nb3VzZURvd24obCl9b25Ub3VjaEVuZChsKXt2YXIgYTtjb25zdCBkPWwudGFyZ2V0LGg9bnVsbD09PShhPXRoaXMucGFyZW50Q2VsbChkKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuY29vcmRzLGY9Rm8o'@;
put 'aCkmJmgucm93Pj0wJiZoLmNvbD49MDtpZihsLmNhbmNlbGFibGUmJmYmJlFvKFYyLHRoaXMpLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpKXtjb25zdCBNPVsiQSIsIkJVVFRPTiIsIklOUFVUIl07RCQoKSYmKFcyZSgpfHxZMmUoKSkmJnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91'@;
put 'Y2hlZChkKSYmIU0uaW5jbHVkZXMoZC50YWdOYW1lKT9sLnByZXZlbnREZWZhdWx0KCk6dGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGQpfHxsLnByZXZlbnREZWZhdWx0KCl9dGhpcy5vbk1vdXNlVXAobCksdGhpcy50b3VjaEFwcGxpZWQ9ITF9Y2FsbExpc3RlbmVyKGwsYSxkLGgpe2Nv'@;
put 'bnN0IGY9UW8oVjIsdGhpcykuZ2V0U2V0dGluZ1B1cmUobCk7ZiYmZihhLGQsaCxRbyh0Syx0aGlzKS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7Y2xlYXJUaW1lb3V0KFFvKFc3LHRoaXMpWzBdKSxjbGVhclRpbWVvdXQoUW8oVzcsdGhpcylbMV0pLFFvKGkzLHRoaXMpLmRlc3Ryb3koKX19O2Z1'@;
put 'bmN0aW9uIG5LKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBiWGUoYyl7dmFyIGw9ZnVuY3Rpb24geVhlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl'@;
put 'ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i'@;
put 'c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCB3WGU9Y2xhc3MgX1hle2NvbnN0cnVjdG9yKGwsYSxkKXtuSyh0'@;
put 'aGlzLCJvZmZzZXQiLHZvaWQgMCksbksodGhpcywidG90YWwiLHZvaWQgMCksbksodGhpcywiY291bnRUSCIsdm9pZCAwKSx0aGlzLm9mZnNldD1sLHRoaXMudG90YWw9YSx0aGlzLmNvdW50VEg9ZH1vZmZzZXR0ZWQobCl7cmV0dXJuIGwrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQobCl7cmV0'@;
put 'dXJuIGwtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5vZmZzZXR0ZWQobCl9c291cmNlVG9SZW5kZXJlZChsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChsKX1vZmZzZXR0ZWRUSChsKXtyZXR1cm4gbC10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSChsKXty'@;
put 'ZXR1cm4gbCt0aGlzLmNvdW50VEh9dmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNlQ29sdW1uKGwpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSChsKSl9c291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpe3JldHVybiB0aGlzLnVu'@;
put 'T2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKGwpKX19O2Z1bmN0aW9uIHJLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBDWGUoYyl7dmFyIGw9ZnVuY3Rpb24gU1hlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1p'@;
put 'dGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9'@;
put 'PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31j'@;
put 'b25zdCB4WGU9Y2xhc3MgTVhle2NvbnN0cnVjdG9yKGwsYSxkKXtySyh0aGlzLCJvZmZzZXQiLHZvaWQgMCkscksodGhpcywidG90YWwiLHZvaWQgMCkscksodGhpcywiY291bnRUSCIsdm9pZCAwKSx0aGlzLm9mZnNldD1sLHRoaXMudG90YWw9YSx0aGlzLmNvdW50VEg9ZH1vZmZzZXR0ZWQo'@;
put 'bCl7cmV0dXJuIGwrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQobCl7cmV0dXJuIGwtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5vZmZzZXR0ZWQobCl9c291cmNlVG9SZW5kZXJlZChsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChsKX1vZmZzZXR0ZWRUSChs'@;
put 'KXtyZXR1cm4gbC10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSChsKXtyZXR1cm4gbCt0aGlzLmNvdW50VEh9dmlzaWJsZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KGwpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSChsKSl9c291cmNlUm93VG9WaXNpYmxl'@;
put 'Q29sSGVhZGVkUm93KGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKGwpKX19O2Z1bmN0aW9uIGVQKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBFWGUoYyl7dmFyIGw9ZnVuY3Rpb24gVFhlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYyly'@;
put 'ZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1p'@;
put 'dGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFi'@;
put 'bGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBBWGV7Y29uc3RydWN0b3IoKXtlUCh0aGlzLCJjdXJyZW50U2l6ZSIsMCksZVAodGhpcywibmV4dFNpemUiLDApLGVQKHRoaXMsImN1cnJlbnRPZmZzZXQiLDApLGVQKHRoaXMsIm5leHRPZmZzZXQiLDApfXNldFNpemUobCl7dGhp'@;
put 'cy5jdXJyZW50U2l6ZT10aGlzLm5leHRTaXplLHRoaXMubmV4dFNpemU9bH1zZXRPZmZzZXQobCl7dGhpcy5jdXJyZW50T2Zmc2V0PXRoaXMubmV4dE9mZnNldCx0aGlzLm5leHRPZmZzZXQ9bH19ZnVuY3Rpb24gb0soYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIERYZShjKXt2YXIgbD1mdW5j'@;
put 'dGlvbiBJWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFJYZXtjb25zdHJ1Y3Rvcigpe29LKHRoaXMsInNpemUiLG5ldyBBWGUpLG9LKHRoaXMsIndvcmtpbmdTcGFjZSIsMCksb0sodGhpcywic2hhcmVkU2l6ZSIs'@;
put 'bnVsbCl9c2V0U2l6ZShsKXt0aGlzLnNpemUuc2V0U2l6ZShsKX1zZXRPZmZzZXQobCl7dGhpcy5zaXplLnNldE9mZnNldChsKX1nZXRWaWV3U2l6ZSgpe3JldHVybiB0aGlzLnNpemV9aXNTaGFyZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuc2hhcmVkU2l6ZX1pc1BsYWNlT24obCl7cmV0dXJu'@;
put 'IHRoaXMud29ya2luZ1NwYWNlPT09bH1hcHBlbmQobCl7dGhpcy53b3JraW5nU3BhY2U9MSxsLndvcmtpbmdTcGFjZT0yLHRoaXMuc2hhcmVkU2l6ZT1sLmdldFZpZXdTaXplKCl9cHJlcGVuZChsKXt0aGlzLndvcmtpbmdTcGFjZT0yLGwud29ya2luZ1NwYWNlPTEsdGhpcy5zaGFyZWRTaXpl'@;
put 'PWwuZ2V0Vmlld1NpemUoKX19XygyOTc2MCk7Y2xhc3MgX2Zle2NvbnN0cnVjdG9yKGwsYSl7KGZ1bmN0aW9uIExYZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gT1hlKGMpe3ZhciBsPWZ1bmN0aW9uIFBYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9'@;
put 'Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9'@;
put 'cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl'@;
put 'OiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJvcmRlciIsW10pLHRoaXMub3JkZXI9Wy4uLkFycmF5KGEpLmtleXMoKV0ubWFwKGQ9PmwrZCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLm9yZGVyLmxlbmd0aH1oYXMobCl7cmV0dXJuIHRoaXMub3JkZXIuaW5kZXhPZihsKT4tMX1nZXQobCl7cmV0'@;
put 'dXJuIGw8dGhpcy5vcmRlci5sZW5ndGg/dGhpcy5vcmRlcltsXTotMX1yZW1vdmUobCl7dGhpcy5vcmRlci5zcGxpY2UodGhpcy5vcmRlci5pbmRleE9mKGwpLDEpfXByZXBlbmQobCl7cmV0dXJuIHRoaXMub3JkZXIudW5zaGlmdChsKSx0aGlzLm9yZGVyLnBvcCgpfX1jbGFzcyBWWGV7Y29u'@;
put 'c3RydWN0b3IobCl7KGZ1bmN0aW9uIEZYZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSFhlKGMpe3ZhciBsPWZ1bmN0aW9uIE5YZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk'@;
put 'PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi'@;
put 'c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJzaXplU2V0Iix2b2lkIDApLHRo'@;
put 'aXMuc2l6ZVNldD1sfWRpZmYoKXtjb25zdHtzaXplU2V0Omx9PXRoaXMse2N1cnJlbnRTaXplOmEsbmV4dFNpemU6ZH09bC5nZXRWaWV3U2l6ZSgpO2xldCBoPU1hdGgubWF4KGQsYSk7aWYoMD09PWgpcmV0dXJuW107Y29uc3R7Y3VycmVudE9mZnNldDpmLG5leHRPZmZzZXQ6dn09bC5nZXRW'@;
put 'aWV3U2l6ZSgpLE09bmV3IF9mZShmLGEpLEQ9bmV3IF9mZSh2LGQpLFo9W107Zm9yKGxldCBuZT0wO25lPGg7bmUrKyl7Y29uc3QgY2U9TS5nZXQobmUpLGJlPUQuZ2V0KG5lKTtpZigtMT09PWJlKVoucHVzaChbInJlbW92ZSIsY2VdKTtlbHNlIGlmKC0xPT09Y2UpIWwuaXNTaGFyZWQoKXx8'@;
put 'bC5pc1NoYXJlZCgpJiZsLmlzUGxhY2VPbigyKT9aLnB1c2goWyJhcHBlbmQiLGJlXSk6Wi5wdXNoKFsicHJlcGVuZCIsYmVdKTtlbHNlIGlmKGJlPmNlKU0uaGFzKGJlKSYmKE0ucmVtb3ZlKGJlKSxkPD1NLmxlbmd0aCYmKGgtPTEpKSxaLnB1c2goWyJyZXBsYWNlIixiZSxjZV0pO2Vsc2Ug'@;
put 'aWYoYmU8Y2Upe2NvbnN0IEVlPU0ucHJlcGVuZChiZSk7Wi5wdXNoKFsiaW5zZXJ0X2JlZm9yZSIsYmUsY2UsRWVdKX1lbHNlIFoucHVzaChbIm5vbmUiLGJlXSl9cmV0dXJuIFp9fWZ1bmN0aW9uIHBfKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBCWGUoYyl7dmFyIGw9ZnVuY3Rpb24galhl'@;
put 'KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws'@;
put 'e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB3ZmV7Y29uc3RydWN0b3IobCxhKXtwXyh0aGlzLCJyb290Tm9kZSIsdm9pZCAwKSxwXyh0aGlzLCJub2Rlc1Bvb2wiLHZvaWQgMCkscF8odGhpcywic2l6ZVNldCIsbmV3'@;
put 'IFJYZSkscF8odGhpcywiY29sbGVjdGVkTm9kZXMiLFtdKSxwXyh0aGlzLCJ2aWV3RGlmZmVyIixuZXcgVlhlKHRoaXMuc2l6ZVNldCkpLHBfKHRoaXMsImxlYWRzIixbXSksdGhpcy5yb290Tm9kZT1sLHRoaXMubm9kZXNQb29sPWF9c2V0U2l6ZShsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnNl'@;
put 'dFNpemUobCksdGhpc31zZXRPZmZzZXQobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5zZXRPZmZzZXQobCksdGhpc31pc1NoYXJlZFZpZXdTZXQoKXtyZXR1cm4gdGhpcy5zaXplU2V0LmlzU2hhcmVkKCl9Z2V0Tm9kZShsKXtyZXR1cm4gbDx0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD90aGlz'@;
put 'LmNvbGxlY3RlZE5vZGVzW2xdOm51bGx9Z2V0Q3VycmVudE5vZGUoKXtjb25zdCBsPXRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoO3JldHVybiBsPjA/dGhpcy5jb2xsZWN0ZWROb2Rlc1tsLTFdOm51bGx9YXBwbHlDb21tYW5kKGwpe2NvbnN0e3Jvb3ROb2RlOmF9PXRoaXMsW2QsaCxmLHZd'@;
put 'PWwsTT10aGlzLm5vZGVzUG9vbChoKTtzd2l0Y2godGhpcy5jb2xsZWN0ZWROb2Rlcy5wdXNoKE0pLGQpe2Nhc2UicHJlcGVuZCI6YS5pbnNlcnRCZWZvcmUoTSxhLmZpcnN0Q2hpbGQpO2JyZWFrO2Nhc2UiYXBwZW5kIjphLmFwcGVuZENoaWxkKE0pO2JyZWFrO2Nhc2UiaW5zZXJ0X2JlZm9y'@;
put 'ZSI6YS5pbnNlcnRCZWZvcmUoTSx0aGlzLm5vZGVzUG9vbChmKSksYS5yZW1vdmVDaGlsZCh0aGlzLm5vZGVzUG9vbCh2KSk7YnJlYWs7Y2FzZSJyZXBsYWNlIjphLnJlcGxhY2VDaGlsZChNLHRoaXMubm9kZXNQb29sKGYpKTticmVhaztjYXNlInJlbW92ZSI6YS5yZW1vdmVDaGlsZChNKX19'@;
put 'c3RhcnQoKXt0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD0wLHRoaXMubGVhZHM9dGhpcy52aWV3RGlmZmVyLmRpZmYoKX1yZW5kZXIoKXt0aGlzLmxlYWRzLmxlbmd0aD4wJiZ0aGlzLmFwcGx5Q29tbWFuZCh0aGlzLmxlYWRzLnNoaWZ0KCkpfWVuZCgpe2Zvcig7dGhpcy5sZWFkcy5sZW5n'@;
put 'dGg+MDspdGhpcy5hcHBseUNvbW1hbmQodGhpcy5sZWFkcy5zaGlmdCgpKX19Y2xhc3MgQ2ZlIGV4dGVuZHMgd2Zle3ByZXBlbmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVTZXQucHJlcGVuZChsLnNpemVTZXQpLGwuc2l6ZVNldC5hcHBlbmQodGhpcy5zaXplU2V0KSx0aGlzfWFwcGVuZFZp'@;
put 'ZXcobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5hcHBlbmQobC5zaXplU2V0KSxsLnNpemVTZXQucHJlcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9fWZ1bmN0aW9uIFNmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gelhlKGMpe3ZhciBsPWZ1bmN0aW9uIFVYZShjLGwpe2lmKCJvYmplY3QiIT10'@;
put 'eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCBy'@;
put 'ZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6'@;
put 'ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgWlhle2NvbnN0cnVjdG9yKGwpe1NmZSh0aGlzLCJub2RlVHlwZSIsdm9pZCAwKSxTZmUodGhpcywicG9vbCIsbmV3IE1hcCksdGhpcy5ub2RlVHlwZT1sLnRvVXBwZXJDYXNlKCl9c2V0Um9vdERvY3VtZW50'@;
put 'KGwpe3RoaXMucm9vdERvY3VtZW50PWx9b2J0YWluKGwsYSl7Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGE/YCR7bH14JHthfWA6bC50b1N0cmluZygpO2lmKHRoaXMucG9vbC5oYXMoaCkpcmV0dXJuIHRoaXMucG9vbC5nZXQoaCk7Y29uc3QgZj10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVF'@;
put 'bGVtZW50KHRoaXMubm9kZVR5cGUpO3JldHVybiB0aGlzLnBvb2wuc2V0KGgsZiksZn19ZnVuY3Rpb24gUkUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFdYZShjKXt2YXIgbD1mdW5jdGlvbiBZWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3lt'@;
put 'Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVy'@;
put 'bigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0p'@;
put 'OmNbbF09YSxjfWNsYXNzIExFe2NvbnN0cnVjdG9yKGwsYSl7UkUodGhpcywibm9kZXNQb29sIixudWxsKSxSRSh0aGlzLCJub2RlVHlwZSIsdm9pZCAwKSxSRSh0aGlzLCJyb290Tm9kZSIsdm9pZCAwKSxSRSh0aGlzLCJ0YWJsZSIsbnVsbCksUkUodGhpcywicmVuZGVyZWROb2RlcyIsMCks'@;
put 'dGhpcy5ub2Rlc1Bvb2w9InN0cmluZyI9PXR5cGVvZiBsP25ldyBaWGUobCk6bnVsbCx0aGlzLm5vZGVUeXBlPWwsdGhpcy5yb290Tm9kZT1hfXNldFRhYmxlKGwpe3RoaXMubm9kZXNQb29sJiZ0aGlzLm5vZGVzUG9vbC5zZXRSb290RG9jdW1lbnQobC5yb290RG9jdW1lbnQpLHRoaXMudGFi'@;
put 'bGU9bH1hZGp1c3QoKXt9cmVuZGVyKCl7fX1mdW5jdGlvbiBNZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEdYZShjKXt2YXIgbD1mdW5jdGlvbiAkWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lk'@;
put 'IDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51'@;
put 'bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEtYZSBleHRl'@;
put 'bmRzIExFe2NvbnN0cnVjdG9yKCl7c3VwZXIoIlRIIiksTWZlKHRoaXMsIm9yZGVyVmlld3MiLG5ldyBXZWFrTWFwKSxNZmUodGhpcywic291cmNlUm93SW5kZXgiLDApfW9idGFpbk9yZGVyVmlldyhsKXtsZXQgYTtyZXR1cm4gdGhpcy5vcmRlclZpZXdzLmhhcyhsKT9hPXRoaXMub3JkZXJW'@;
put 'aWV3cy5nZXQobCk6KGE9bmV3IENmZShsLGQ9PnRoaXMubm9kZXNQb29sLm9idGFpbih0aGlzLnNvdXJjZVJvd0luZGV4LGQpKSx0aGlzLm9yZGVyVmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmwscm93SGVhZGVyRnVuY3Rpb25zOmEscm93SGVhZGVyc0Nv'@;
put 'dW50OmQscm93czpoLGNlbGxzOmZ9PXRoaXMudGFibGU7Zm9yKGxldCB2PTA7djxsO3YrKyl7Y29uc3QgTT10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UodiksRD1oLmdldFJlbmRlcmVkTm9kZSh2KTt0aGlzLnNvdXJjZVJvd0luZGV4PU07Y29uc3QgWj10aGlzLm9idGFpbk9yZGVy'@;
put 'VmlldyhEKSxuZT1mLm9idGFpbk9yZGVyVmlldyhEKTtaLmFwcGVuZFZpZXcobmUpLnNldFNpemUoZCkuc2V0T2Zmc2V0KDApLnN0YXJ0KCk7Zm9yKGxldCBjZT1kLTE7Y2U+PTA7Y2UtLSl7Wi5yZW5kZXIoKTtjb25zdCBiZT1aLmdldEN1cnJlbnROb2RlKCk7YmUuY2xhc3NOYW1lPSIiLGJl'@;
put 'LnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxWNyhiZSxbbmV3IFJlZ0V4cCgiYXJpYS0oLiopIiksbmV3IFJlZ0V4cCgicm9sZSIpXSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZhKGJlLFtbInJvbGUiLCJyb3doZWFkZXIiXSxbInNjb3BlIiwicm93Il0sZiQoY2UrMSksRjcoLTEp'@;
put 'XSksYVtjZV0oTSxiZSxjZSl9Wi5lbmQoKX19fWNsYXNzIHFYZSBleHRlbmRzIExFe2NvbnN0cnVjdG9yKGwpe3N1cGVyKG51bGwsbCl9YWRqdXN0KCl7Y29uc3R7Y29sdW1uSGVhZGVyc0NvdW50Omwscm93SGVhZGVyc0NvdW50OmF9PXRoaXMudGFibGU7bGV0IGQ9dGhpcy5yb290Tm9kZS5m'@;
put 'aXJzdENoaWxkO2lmKGwpe2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpofT10aGlzLnRhYmxlLGY9aCthO2ZvcihsZXQgTT0wLEQ9bDtNPEQ7TSsrKXtmb3IoZD10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbTV0sZHx8KGQ9dGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIi'@;
put 'KSx0aGlzLnJvb3ROb2RlLmFwcGVuZENoaWxkKGQpKSx0aGlzLnJlbmRlcmVkTm9kZXM9ZC5jaGlsZE5vZGVzLmxlbmd0aDt0aGlzLnJlbmRlcmVkTm9kZXM8ZjspZC5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aCIpKSx0aGlzLnJlbmRlcmVk'@;
put 'Tm9kZXMrPTE7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM+ZjspZC5yZW1vdmVDaGlsZChkLmxhc3RDaGlsZCksdGhpcy5yZW5kZXJlZE5vZGVzLT0xfWNvbnN0IHY9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aDtpZih2PmwpZm9yKGxldCBNPWw7TTx2O00rKyl0aGlzLnJvb3ROb2Rl'@;
put 'LnJlbW92ZUNoaWxkKHRoaXMucm9vdE5vZGUubGFzdENoaWxkKX1lbHNlIGQmJnhwKGQpfXJlbmRlcigpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDpsfT10aGlzLnRhYmxlO3RoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2YSh0aGlzLnJvb3ROb2RlLFtbInJvbGUiLCJyb3dncm91cCJd'@;
put 'XSk7Zm9yKGxldCBhPTA7YTxsO2ErPTEpe2NvbnN0e2NvbHVtbkhlYWRlckZ1bmN0aW9uczpkLGNvbHVtbnNUb1JlbmRlcjpoLHJvd0hlYWRlcnNDb3VudDpmfT10aGlzLnRhYmxlLHY9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW2FdO3RoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2YSh2'@;
put 'LFtbInJvbGUiLCJyb3ciXSxfMmUoYSsxKV0pO2ZvcihsZXQgTT0tMSpmO008aDtNKz0xKXtjb25zdCBEPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShNKSxaPXYuY2hpbGROb2Rlc1tNK2ZdO1ouY2xhc3NOYW1lPSIiLFoucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLFY3KFos'@;
put 'W25ldyBSZWdFeHAoImFyaWEtKC4qKSIpLG5ldyBSZWdFeHAoInJvbGUiKV0pLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2YShaLFtmJChNKzErdGhpcy50YWJsZS5yb3dIZWFkZXJzQ291bnQpLEY3KC0xKSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiXSwuLi5NPj0wP1tbInNjb3BlIiwi'@;
put 'Y29sIl1dOltbInJvbGUiLCJyb3ciXV1dKSxkW2FdKEQsWixhKX19fX1sZXQgeGZlPSExO2NsYXNzIFhYZSBleHRlbmRzIExFe2NvbnN0cnVjdG9yKGwpe3N1cGVyKG51bGwsbCl9YWRqdXN0KCl7Y29uc3R7Y29sdW1uc1RvUmVuZGVyOmwscm93SGVhZGVyc0NvdW50OmF9PXRoaXMudGFibGUs'@;
put 'ZD1sK2E7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM8ZDspdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmQ7KXRoaXMucm9vdE5v'@;
put 'ZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1yZW5kZXIoKXt0aGlzLmFkanVzdCgpO2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlOyF4ZmUmJmw+MWUzJiYoeGZlPSEwLGlsKGds'@;
put 'YFBlcmZvcm1hbmNlIHRpcDogSGFuZHNvbnRhYmxlIHJlbmRlcmVkIG1vcmUgdGhhbiAxMDAwIHZpc2libGUgY29sdW1ucy5ceDIwCiAgICAgICAgQ29uc2lkZXIgbGltaXRpbmcgdGhlIG51bWJlciBvZiByZW5kZXJlZCBjb2x1bW5zIGJ5IHNwZWNpZnlpbmcgdGhlIHRhYmxlIHdpZHRoIGFu'@;
put 'ZC9vclx4MjAKICAgICAgICB0dXJuaW5nIG9mZiB0aGUgInJlbmRlckFsbENvbHVtbnMiIG9wdGlvbi5gKSk7Zm9yKGxldCBoPTA7aDxhO2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaCksdj10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldEhlYWRlcldp'@;
put 'ZHRoKGYpO3RoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1toXS5zdHlsZS53aWR0aD1gJHt2fXB4YH1mb3IobGV0IGg9MDtoPGw7aCsrKXtjb25zdCBmPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShoKSx2PXRoaXMudGFibGUuY29sdW1uVXRpbHMuZ2V0V2lkdGgoZik7dGhpcy5y'@;
put 'b290Tm9kZS5jaGlsZE5vZGVzW2grYV0uc3R5bGUud2lkdGg9YCR7dn1weGB9Y29uc3QgZD10aGlzLnJvb3ROb2RlLmZpcnN0Q2hpbGQ7ZCYmVGkoZCwicm93SGVhZGVyIil9fWxldCBFZmU9ITE7Y2xhc3MgdEplIGV4dGVuZHMgTEV7Y29uc3RydWN0b3IobCl7c3VwZXIoIlRSIixsKSxmdW5j'@;
put 'dGlvbiBKWGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFFYZShjKXt2YXIgbD1mdW5jdGlvbiBlSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVm'@;
put 'YXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJz'@;
put 'eW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJvcmRlclZpZXciLHZvaWQgMCksdGhpcy5vcmRlclZpZXc9bmV3'@;
put 'IHdmZShsLGE9PnRoaXMubm9kZXNQb29sLm9idGFpbihhKSl9Z2V0UmVuZGVyZWROb2RlKGwpe3JldHVybiB0aGlzLm9yZGVyVmlldy5nZXROb2RlKGwpfWhhc1N0YWxlQ29udGVudChsKXtyZXR1cm4gdGhpcy5vcmRlclZpZXcuaGFzU3RhbGVDb250ZW50KGwpfXJlbmRlcigpe2NvbnN0e3Jv'@;
put 'd3NUb1JlbmRlcjpsfT10aGlzLnRhYmxlOyFFZmUmJmw+MWUzJiYoRWZlPSEwLGlsKGdsYFBlcmZvcm1hbmNlIHRpcDogSGFuZHNvbnRhYmxlIHJlbmRlcmVkIG1vcmUgdGhhbiAxMDAwIHZpc2libGUgcm93cy5ceDIwCiAgICAgICAgQ29uc2lkZXIgbGltaXRpbmcgdGhlIG51bWJlciBvZiBy'@;
put 'ZW5kZXJlZCByb3dzIGJ5IHNwZWNpZnlpbmcgdGhlIHRhYmxlIGhlaWdodCBhbmQvb3JceDIwCiAgICAgICAgdHVybmluZyBvZmYgdGhlICJyZW5kZXJBbGxSb3dzIiBvcHRpb24uYCkpLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2YSh0aGlzLnJvb3ROb2RlLFtbInJvbGUiLCJyb3dn'@;
put 'cm91cCJdXSksdGhpcy5vcmRlclZpZXcuc2V0U2l6ZShsKS5zZXRPZmZzZXQodGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKDApKS5zdGFydCgpO2ZvcihsZXQgaD0wO2g8bDtoKyspe3RoaXMub3JkZXJWaWV3LnJlbmRlcigpO2NvbnN0IGY9dGhpcy5vcmRlclZpZXcuZ2V0Q3VycmVu'@;
put 'dE5vZGUoKSx2PXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShoKTt2YXIgYSxkO3RoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2YShmLFtbInJvbGUiLCJyb3ciXSxfMmUodisobnVsbCE9PShhPW51bGw9PT0oZD10aGlzLnRhYmxlLnJvd1V0aWxzKXx8dm9pZCAwPT09ZHx8bnVs'@;
put 'bD09PShkPWQuZGF0YUFjY2Vzc09iamVjdCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY29sdW1uSGVhZGVycy5sZW5ndGgpJiZ2b2lkIDAhPT1hP2E6MCkrMSldKSwodisxKSUyPT0wP3BhKGYsImh0X19yb3dfZXZlbiIpfHwoY2EoZiwiaHRfX3Jvd19vZGQiKSxUaShmLCJodF9fcm93X2V2ZW4i'@;
put 'KSk6cGEoZiwiaHRfX3Jvd19vZGQiKXx8KGNhKGYsImh0X19yb3dfZXZlbiIpLFRpKGYsImh0X19yb3dfb2RkIikpfXRoaXMub3JkZXJWaWV3LmVuZCgpfX1mdW5jdGlvbiBUZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG5KZShjKXt2YXIgbD1mdW5jdGlvbiBySmUoYyxsKXtpZigib2Jq'@;
put 'ZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZl'@;
put 'IG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVt'@;
put 'ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGlKZSBleHRlbmRzIExFe2NvbnN0cnVjdG9yKCl7c3VwZXIoIlREIiksVGZlKHRoaXMsIm9yZGVyVmlld3MiLG5ldyBXZWFrTWFwKSxUZmUodGhpcywic291cmNlUm93SW5kZXgiLDApfW9idGFp'@;
put 'bk9yZGVyVmlldyhsKXtsZXQgYTtyZXR1cm4gdGhpcy5vcmRlclZpZXdzLmhhcyhsKT9hPXRoaXMub3JkZXJWaWV3cy5nZXQobCk6KGE9bmV3IENmZShsLGQ9PnRoaXMubm9kZXNQb29sLm9idGFpbih0aGlzLnNvdXJjZVJvd0luZGV4LGQpLHRoaXMubm9kZVR5cGUpLHRoaXMub3JkZXJWaWV3'@;
put 'cy5zZXQobCxhKSksYX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bCxjb2x1bW5zVG9SZW5kZXI6YSxyb3dzOmQscm93SGVhZGVyczpofT10aGlzLnRhYmxlO2ZvcihsZXQgTT0wO008bDtNKyspe2NvbnN0IEQ9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKE0pLFo9ZC5nZXRS'@;
put 'ZW5kZXJlZE5vZGUoTSk7dGhpcy5zb3VyY2VSb3dJbmRleD1EO2NvbnN0IG5lPXRoaXMub2J0YWluT3JkZXJWaWV3KFopLGNlPWgub2J0YWluT3JkZXJWaWV3KFopO25lLnByZXBlbmRWaWV3KGNlKS5zZXRTaXplKGEpLnNldE9mZnNldCgwKS5zdGFydCgpO2ZvcihsZXQgYmU9MDtiZTxhO2Jl'@;
put 'Kyspe25lLnJlbmRlcigpO2NvbnN0IEVlPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShiZSksQmU9bmUuZ2V0Q3VycmVudE5vZGUoKTt2YXIgZix2O3BhKEJlLCJoaWRlIil8fChCZS5jbGFzc05hbWU9IiIpLEJlLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxCZS5yZW1vdmVB'@;
put 'dHRyaWJ1dGUoImRpciIpLFY3KEJlLFtuZXcgUmVnRXhwKCJhcmlhLSguKikiKSxuZXcgUmVnRXhwKCJyb2xlIildKSx0aGlzLnRhYmxlLmNlbGxSZW5kZXJlcihELEVlLEJlKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdmEoQmUsWy4uLkJlLmhhc0F0dHJpYnV0ZSgicm9sZSIpP1td'@;
put 'OltbInJvbGUiLCJncmlkY2VsbCJdXSxGNygtMSksZiQoRWUrKG51bGwhPT0oZj1udWxsPT09KHY9dGhpcy50YWJsZS5yb3dVdGlscyl8fHZvaWQgMD09PXZ8fG51bGw9PT0odj12LmRhdGFBY2Nlc3NPYmplY3QpfHx2b2lkIDA9PT12P3ZvaWQgMDp2LnJvd0hlYWRlcnMubGVuZ3RoKSYmdm9p'@;
put 'ZCAwIT09Zj9mOjApKzEpXSl9bmUuZW5kKCl9fX1mdW5jdGlvbiBYdShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gb0plKGMpe3ZhciBsPWZ1bmN0aW9uIGFKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv'@;
put 'aWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6'@;
put 'TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgc0ple2Nv'@;
put 'bnN0cnVjdG9yKGwpe2xldHtjZWxsUmVuZGVyZXI6YSxzdHlsZXNIYW5kbGVyOmR9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtYdSh0aGlzLCJyb290Tm9kZSIsdm9pZCAwKSxYdSh0aGlzLCJyb290RG9jdW1lbnQiLHZvaWQgMCks'@;
put 'WHUodGhpcywicm93SGVhZGVycyIsbnVsbCksWHUodGhpcywiY29sdW1uSGVhZGVycyIsbnVsbCksWHUodGhpcywiY29sR3JvdXAiLG51bGwpLFh1KHRoaXMsInJvd3MiLG51bGwpLFh1KHRoaXMsImNlbGxzIixudWxsKSxYdSh0aGlzLCJyb3dGaWx0ZXIiLG51bGwpLFh1KHRoaXMsImNvbHVt'@;
put 'bkZpbHRlciIsbnVsbCksWHUodGhpcywicm93VXRpbHMiLG51bGwpLFh1KHRoaXMsImNvbHVtblV0aWxzIixudWxsKSxYdSh0aGlzLCJyb3dzVG9SZW5kZXIiLDApLFh1KHRoaXMsImNvbHVtbnNUb1JlbmRlciIsMCksWHUodGhpcywicm93SGVhZGVyRnVuY3Rpb25zIixbXSksWHUodGhpcywi'@;
put 'cm93SGVhZGVyc0NvdW50IiwwKSxYdSh0aGlzLCJjb2x1bW5IZWFkZXJGdW5jdGlvbnMiLFtdKSxYdSh0aGlzLCJjb2x1bW5IZWFkZXJzQ291bnQiLDApLFh1KHRoaXMsImNlbGxSZW5kZXJlciIsdm9pZCAwKSxYdSh0aGlzLCJhY3RpdmVPdmVybGF5TmFtZSIsdm9pZCAwKSxYdSh0aGlzLCJz'@;
put 'dHlsZXNIYW5kbGVyIix2b2lkIDApLHRoaXMucm9vdE5vZGU9bCx0aGlzLnJvb3REb2N1bWVudD10aGlzLnJvb3ROb2RlLm93bmVyRG9jdW1lbnQsdGhpcy5jZWxsUmVuZGVyZXI9YSx0aGlzLnN0eWxlc0hhbmRsZXI9ZH1zZXRBY3RpdmVPdmVybGF5TmFtZShsKXt0aGlzLmFjdGl2ZU92ZXJs'@;
put 'YXlOYW1lPWx9c2V0QXhpc1V0aWxzKGwsYSl7dGhpcy5yb3dVdGlscz1sLHRoaXMuY29sdW1uVXRpbHM9YX1zZXRWaWV3cG9ydFNpemUobCxhKXt0aGlzLnJvd3NUb1JlbmRlcj1sLHRoaXMuY29sdW1uc1RvUmVuZGVyPWF9c2V0RmlsdGVycyhsLGEpe3RoaXMucm93RmlsdGVyPWwsdGhpcy5j'@;
put 'b2x1bW5GaWx0ZXI9YX1zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKGwsYSl7dGhpcy5yb3dIZWFkZXJGdW5jdGlvbnM9bCx0aGlzLnJvd0hlYWRlcnNDb3VudD1sLmxlbmd0aCx0aGlzLmNvbHVtbkhlYWRlckZ1bmN0aW9ucz1hLHRoaXMuY29sdW1uSGVhZGVyc0NvdW50PWEubGVuZ3RofXNl'@;
put 'dFJlbmRlcmVycygpe2xldHtyb3dIZWFkZXJzOmwsY29sdW1uSGVhZGVyczphLGNvbEdyb3VwOmQscm93czpoLGNlbGxzOmZ9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtsLnNldFRhYmxlKHRoaXMpLGEuc2V0VGFibGUodGhpcyks'@;
put 'ZC5zZXRUYWJsZSh0aGlzKSxoLnNldFRhYmxlKHRoaXMpLGYuc2V0VGFibGUodGhpcyksdGhpcy5yb3dIZWFkZXJzPWwsdGhpcy5jb2x1bW5IZWFkZXJzPWEsdGhpcy5jb2xHcm91cD1kLHRoaXMucm93cz1oLHRoaXMuY2VsbHM9Zn1yZW5kZXJlZFJvd1RvU291cmNlKGwpe3JldHVybiB0aGlz'@;
put 'LnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpfXJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCl9aXNBcmlhRW5hYmxlZCgpe3JldHVybiB0aGlzLnJvd1V0aWxzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJp'@;
put 'YVRhZ3MiKX1yZW5kZXIoKXt0aGlzLmNvbEdyb3VwLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVycy5hZGp1c3QoKSx0aGlzLnJvd3MuYWRqdXN0KCksdGhpcy5yb3dIZWFkZXJzLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVycy5yZW5kZXIoKSx0aGlzLnJvd3MucmVuZGVyKCksdGhpcy5y'@;
put 'b3dIZWFkZXJzLnJlbmRlcigpLHRoaXMuY2VsbHMucmVuZGVyKCksdGhpcy5jb2x1bW5VdGlscy5jYWxjdWxhdGVXaWR0aHMoKSx0aGlzLmNvbEdyb3VwLnJlbmRlcigpO2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd3M6YX09dGhpcztmb3IobGV0IGQ9MDtkPGw7ZCsrKXtjb25zdCBoPWEuZ2V0'@;
put 'UmVuZGVyZWROb2RlKGQpLGY9dGhpcy5yb3dVdGlscztpZihoLmZpcnN0Q2hpbGQpe2NvbnN0IHY9dGhpcy5yZW5kZXJlZFJvd1RvU291cmNlKGQpLE09Zi5nZXRIZWlnaHRCeU92ZXJsYXlOYW1lKHYsdGhpcy5hY3RpdmVPdmVybGF5TmFtZSksWj10aGlzLnN0eWxlc0hhbmRsZXIuYXJlQ2Vs'@;
put 'bHNCb3JkZXJCb3goKT8wOjE7aC5maXJzdENoaWxkLnN0eWxlLmhlaWdodD1NP00tWisicHgiOiIifX19fWNsYXNzIGxKZXtjb25zdHJ1Y3Rvcigpe2xldHtUQUJMRTpsLFRIRUFEOmEsQ09MR1JPVVA6ZCxUQk9EWTpoLHJvd1V0aWxzOmYsY29sdW1uVXRpbHM6dixjZWxsUmVuZGVyZXI6TSxz'@;
put 'dHlsZXNIYW5kbGVyOkR9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTt0aGlzLnJlbmRlcmVyPW5ldyBzSmUobCx7Y2VsbFJlbmRlcmVyOk0sc3R5bGVzSGFuZGxlcjpEfSksdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJlcnMoe3Jvd0hl'@;
put 'YWRlcnM6bmV3IEtYZSxjb2x1bW5IZWFkZXJzOm5ldyBxWGUoYSksY29sR3JvdXA6bmV3IFhYZShkKSxyb3dzOm5ldyB0SmUoaCksY2VsbHM6bmV3IGlKZX0pLHRoaXMucmVuZGVyZXIuc2V0QXhpc1V0aWxzKGYsdil9c2V0QWN0aXZlT3ZlcmxheU5hbWUobCl7cmV0dXJuIHRoaXMucmVuZGVy'@;
put 'ZXIuc2V0QWN0aXZlT3ZlcmxheU5hbWUobCksdGhpc31zZXRGaWx0ZXJzKGwsYSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0RmlsdGVycyhsLGEpLHRoaXN9c2V0Vmlld3BvcnRTaXplKGwsYSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0Vmlld3BvcnRTaXplKGwsYSksdGhpc31zZXRIZWFk'@;
put 'ZXJDb250ZW50UmVuZGVyZXJzKGwsYSl7cmV0dXJuIHRoaXMucmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpLHRoaXN9YWRqdXN0KCl7dGhpcy5yZW5kZXJlci5hZGp1c3QoKX1yZW5kZXIoKXt0aGlzLnJlbmRlcmVyLnJlbmRlcigpfX1mdW5jdGlvbiBhSyhjLGwsYSl7'@;
put 'cmV0dXJuKGw9ZnVuY3Rpb24gY0plKGMpe3ZhciBsPWZ1bmN0aW9uIHVKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj'@;
put 'dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs'@;
put 'P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZEple2NvbnN0cnVjdG9yKGwsYSl7YUsodGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAw'@;
put 'KSxhSyh0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLGFLKHRoaXMsImhlYWRlcldpZHRocyIsbmV3IE1hcCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWF9Z2V0V2lkdGgobCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5XaWR0aCIs'@;
put 'bCl8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKX1nZXRIZWFkZXJIZWlnaHQobCl7bGV0IGE9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2NvbnN0IGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0'@;
put 'Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tsXTtyZXR1cm4gdm9pZCAwIT09ZCYmKGE9YT9NYXRoLm1heChhLGQpOmQpLGF9Z2V0SGVhZGVyV2lkdGgobCl7cmV0dXJuIHRoaXMuaGVhZGVyV2lkdGhzLmdldCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5jb2x1bW5G'@;
put 'aWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKSl9Y2FsY3VsYXRlV2lkdGhzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzO2xldCBhPWwuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKTtpZihhPWwuZ2V0U2V0dGluZygib25Nb2RpZnlSb3dIZWFkZXJXaWR0aCIsYSksbnVsbCE9YSl7Y29u'@;
put 'c3QgZD1sLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgsaD1sLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpO2ZvcihsZXQgZj0wO2Y8ZDtmKyspe2xldCB2PUFycmF5LmlzQXJyYXkoYSk/YVtmXTphO3Y9dj8/aCx0aGlzLmhlYWRlcldpZHRocy5zZXQoZix2KX19fX1m'@;
put 'dW5jdGlvbiBBZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGhKZShjKXt2YXIgbD1mdW5jdGlvbiBmSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwi'@;
put 'ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy'@;
put 'biJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHBKZXtjb25zdHJ1Y3RvcihsLGEpe0FmZSh0aGlzLCJkYXRh'@;
put 'QWNjZXNzT2JqZWN0Iix2b2lkIDApLEFmZSh0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud3RTZXR0aW5ncz1hfWdldEhlaWdodChsKXtsZXQgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVpZ2h0IixsKTtjb25zdCBkPXRo'@;
put 'aXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3NbbF07cmV0dXJuIHZvaWQgMCE9PWQmJihhPXZvaWQgMD09PWE/ZDpNYXRoLm1heChhLGQpKSxhfWdldEhlaWdodEJ5T3ZlcmxheU5hbWUobCxhKXtsZXQgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93'@;
put 'SGVpZ2h0QnlPdmVybGF5TmFtZSIsbCxhKTtjb25zdCBoPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZFJvd3NbbF07cmV0dXJuIHZvaWQgMCE9PWgmJihkPXZvaWQgMD09PWQ/aDpNYXRoLm1heChkLGgpKSxkfX1jb25zdCBZNz0idG9wIixJcD0iYm90dG9tIixH'@;
put 'Nz0iaW5saW5lX3N0YXJ0IiwkNz0idG9wX2lubGluZV9zdGFydF9jb3JuZXIiLFZtPSJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciIsa2ZlPVtZNyxJcCxHNywkNyxWbV0sZ0plPW5ldyBNYXAoW1tZNyxgaHRfY2xvbmVfJHtZN31gXSxbSXAsYGh0X2Nsb25lXyR7SXB9YF0sW0c3LGBodF9j'@;
put 'bG9uZV8ke0c3fSBodF9jbG9uZV9sZWZ0YF0sWyQ3LGBodF9jbG9uZV8keyQ3fSBodF9jbG9uZV90b3BfbGVmdF9jb3JuZXJgXSxbVm0sYGh0X2Nsb25lXyR7Vm19IGh0X2Nsb25lX2JvdHRvbV9sZWZ0X2Nvcm5lcmBdXSk7ZnVuY3Rpb24gUnAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG1K'@;
put 'ZShjKXt2YXIgbD1mdW5jdGlvbiB2SmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4g'@;
put 'ZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IG1fPWNsYXNzIGJKZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe1JwKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLFJwKHRoaXMsImRv'@;
put 'bUJpbmRpbmdzIix2b2lkIDApLFJwKHRoaXMsIlRCT0RZIixudWxsKSxScCh0aGlzLCJUSEVBRCIsbnVsbCksUnAodGhpcywiQ09MR1JPVVAiLG51bGwpLFJwKHRoaXMsImhhc1RhYmxlSGVpZ2h0IiwhMCksUnAodGhpcywiaGFzVGFibGVXaWR0aCIsITApLFJwKHRoaXMsImlzVGFibGVWaXNp'@;
put 'YmxlIiwhMSksUnAodGhpcywidGFibGVPZmZzZXQiLDApLFJwKHRoaXMsImhvbGRlck9mZnNldCIsMCksdGhpcy5kb21CaW5kaW5ncz1kLHRoaXMuaXNNYXN0ZXI9Im1hc3RlciI9PT1mLHRoaXMubmFtZT1mLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhp'@;
put 'cy53dFNldHRpbmdzPWgsdGhpcy5pbnN0YW5jZT10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud290LHRoaXMud290PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy5UQUJMRT1kLnJvb3RUYWJsZSxnJCh0aGlzLlRBQkxFKSx0aGlzLnNwcmVhZGVyPXRoaXMuY3JlYXRlU3ByZWFkZXIodGhp'@;
put 'cy5UQUJMRSksdGhpcy5oaWRlcj10aGlzLmNyZWF0ZUhpZGVyKHRoaXMuc3ByZWFkZXIpLHRoaXMuaG9sZGVyPXRoaXMuY3JlYXRlSG9sZGVyKHRoaXMuaGlkZXIpLHRoaXMud3RSb290RWxlbWVudD10aGlzLmhvbGRlci5wYXJlbnROb2RlLHRoaXMuaXNNYXN0ZXImJnRoaXMuYWxpZ25PdmVy'@;
put 'bGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMuZml4VGFibGVEb21UcmVlKCksdGhpcy5yb3dGaWx0ZXI9bnVsbCx0aGlzLmNvbHVtbkZpbHRlcj1udWxsLHRoaXMuY29ycmVjdEhlYWRlcldpZHRoPSExO2NvbnN0IHY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKCJyb3dI'@;
put 'ZWFkZXJXaWR0aCIpO3RoaXMud3RTZXR0aW5ncy51cGRhdGUoInJvd0hlYWRlcldpZHRoIiwoKT0+dGhpcy5fbW9kaWZ5Um93SGVhZGVyV2lkdGgodikpLHRoaXMucm93VXRpbHM9bmV3IHBKZSh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLmNvbHVtblV0aWxz'@;
put 'PW5ldyBkSmUodGhpcy5kYXRhQWNjZXNzT2JqZWN0LHRoaXMud3RTZXR0aW5ncyksdGhpcy50YWJsZVJlbmRlcmVyPW5ldyBsSmUoe1RBQkxFOnRoaXMuVEFCTEUsVEhFQUQ6dGhpcy5USEVBRCxDT0xHUk9VUDp0aGlzLkNPTEdST1VQLFRCT0RZOnRoaXMuVEJPRFkscm93VXRpbHM6dGhpcy5y'@;
put 'b3dVdGlscyxjb2x1bW5VdGlsczp0aGlzLmNvbHVtblV0aWxzLGNlbGxSZW5kZXJlcjp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoImNlbGxSZW5kZXJlciIpLHN0eWxlc0hhbmRsZXI6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0eWxlc0hhbmRsZXJ9KX1pcyhsKXtyZXR1cm4gdGhp'@;
put 'cy5uYW1lPT09bH1maXhUYWJsZURvbVRyZWUoKXtjb25zdCBsPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50O3RoaXMuVEJPRFk9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJ0Ym9keSIpLHRoaXMuVEJPRFl8fCh0aGlzLlRCT0RZPWwuY3JlYXRlRWxlbWVudCgidGJvZHkiKSx0aGlz'@;
put 'LlRBQkxFLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpKSx0aGlzLlRIRUFEPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGhlYWQiKSx0aGlzLlRIRUFEfHwodGhpcy5USEVBRD1sLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksdGhpcy5UQUJMRS5pbnNlcnRCZWZvcmUodGhpcy5USEVBRCx0aGlz'@;
put 'LlRCT0RZKSksdGhpcy5DT0xHUk9VUD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoImNvbGdyb3VwIiksdGhpcy5DT0xHUk9VUHx8KHRoaXMuQ09MR1JPVVA9bC5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuQ09MR1JPVVAsdGhpcy5USEVB'@;
put 'RCkpfWNyZWF0ZVNwcmVhZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhcGEoYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp'@;
put 'LGQuY2xhc3NOYW1lPSJ3dFNwcmVhZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQobCkpLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIix0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdmEoZCxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1d'@;
put 'KSxkfWNyZWF0ZUhpZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhcGEoYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQu'@;
put 'Y2xhc3NOYW1lPSJ3dEhpZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQobCkpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2YShkLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pLGR9Y3JlYXRlSG9sZGVyKGwpe2NvbnN0IGE9bC5wYXJl'@;
put 'bnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhcGEoYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixkLmNsYXNz'@;
put 'TmFtZT0id3RIb2xkZXIiLHZhKGQsW0Y3KC0xKV0pLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksdGhpcy5pc01hc3RlciYmKGQucGFyZW50Tm9kZS5jbGFzc05hbWUrPSJodF9tYXN0ZXIgaGFuZHNvbnRhYmxlIixkLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMud3RTZXR0aW5n'@;
put 'cy5nZXRTZXR0aW5nUHVyZSgicnRsTW9kZSIpPyJydGwiOiJsdHIiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdmEoZC5wYXJlbnROb2RlLFtbInJvbGUiLCJwcmVzZW50YXRpb24iXV0pKSxkLmFwcGVuZENoaWxkKGwpKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0'@;
put 'dGluZygiYXJpYVRhZ3MiKSYmdmEoZCxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSxkfWRyYXcoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyx7d3RPdmVybGF5czpkLHd0Vmll'@;
put 'd3BvcnQ6aH09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LGY9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSx2PWEuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksTT1hLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSxEPU0ubGVuZ3RoLFo9YS5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIiksbmU9'@;
put 'Wi5sZW5ndGg7bGV0IGNlPWw7aWYodGhpcy5pc01hc3RlciYmKGQuYmVmb3JlRHJhdygpLHRoaXMuaG9sZGVyT2Zmc2V0PWowKHRoaXMuaG9sZGVyKSxjZT1oLmNyZWF0ZUNhbGN1bGF0b3JzKGNlKSxEJiYhYS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpKSl7Y29uc3QgRWU9ZC5p'@;
put 'bmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxCZT10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aDt0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aD0wIT09RWUsQmUhPT10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKGNlPSExKX1pZihjZSl0aGlzLmlzTWFzdGVyJiZkLnJlZnJlc2go'@;
put 'ITApO2Vsc2V7dGhpcy50YWJsZU9mZnNldD10aGlzLmlzTWFzdGVyP2owKHRoaXMuVEFCTEUpOnRoaXMuZGF0YUFjY2Vzc09iamVjdC5wYXJlbnRUYWJsZU9mZnNldDtjb25zdCBFZT1NYXRoLm1heCh0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKSwwKSxCZT1NYXRoLm1heCh0aGlzLmdldEZp'@;
put 'cnN0UmVuZGVyZWRDb2x1bW4oKSwwKTt0aGlzLnJvd0ZpbHRlcj1uZXcgeFhlKEVlLGYsbmUpLHRoaXMuY29sdW1uRmlsdGVyPW5ldyB3WGUoQmUsdixEKTtsZXQgcWU9ITA7aWYodGhpcy5pc01hc3Rlcil7dGhpcy5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCk7Y29uc3Qg'@;
put 'cnQ9e307dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImJlZm9yZURyYXciLCEwLHJ0KSxxZT0hMCE9PXJ0LnNraXBSZW5kZXJ9cWUmJih0aGlzLnRhYmxlUmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhNLFopLCh0aGlzLmlzKElwKXx8dGhpcy5pcyhWbSkpJiZ0aGlzLnRh'@;
put 'YmxlUmVuZGVyZXIuc2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhNLFtdKSx0aGlzLnJlc2V0T3ZlcnNpemVkUm93cygpLHRoaXMudGFibGVSZW5kZXJlci5zZXRBY3RpdmVPdmVybGF5TmFtZSh0aGlzLm5hbWUpLnNldFZpZXdwb3J0U2l6ZSh0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCks'@;
put 'dGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpKS5zZXRGaWx0ZXJzKHRoaXMucm93RmlsdGVyLHRoaXMuY29sdW1uRmlsdGVyKS5yZW5kZXIoKSx0aGlzLmlzTWFzdGVyJiZ0aGlzLm1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzKCksdGhpcy5hZGp1c3RDb2x1bW5IZWFkZXJIZWlnaHRz'@;
put 'KCksKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXMoSXApKSYmdGhpcy5tYXJrT3ZlcnNpemVkUm93cygpLHRoaXMuaXNNYXN0ZXI/KHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKXx8aC5jcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMoKSxkLnJlZnJlc2go'@;
put 'ITEpLGQuYXBwbHlUb0RPTSgpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkRyYXciLCEwKSk6dGhpcy5pcyhJcCkmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5jbG9uZVNvdXJjZS53dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpKX1sZXQgYmU9ITE7cmV0dXJuIHRoaXMuaXNN'@;
put 'YXN0ZXImJihiZT1kLnRvcE92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCksZC5ib3R0b21PdmVybGF5LmNsb25lJiYoYmU9ZC5ib3R0b21PdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpfHxiZSksYmU9ZC5pbmxpbmVTdGFydE92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fGJlLGQu'@;
put 'dG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxkLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJmQuYm90dG9tSW5s'@;
put 'aW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpKSxiZT8oZC5yZWZyZXNoQWxsKCksZC5hZGp1c3RFbGVtZW50c1NpemUoKSk6dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnNlbGVjdGlvbk1hbmFnZXIuc2V0QWN0aXZlT3ZlcmxheSh0aGlzLmZhY2FkZUdldHRlcigpKS5y'@;
put 'ZW5kZXIoY2UpLHRoaXMuaXNNYXN0ZXImJmQuYWZ0ZXJEcmF3KCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmRyYXduPSEwLHRoaXN9bWFya0lmT3ZlcnNpemVkQ29sdW1uSGVhZGVyKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKTtsZXQgZD10aGlzLnd0'@;
put 'U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtjb25zdCBoPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgZix2LE07Y29uc3QgRD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVh'@;
put 'ZGVySGVpZ2h0Iil8fFtdO2Zvcig7ZDspZC09MSxmPXRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KGQpLHY9dGhpcy5nZXRDb2x1bW5IZWFkZXIoYSxkKSx2JiYoTT1hXyh2KSwoIWYmJmg8TXx8ZjxNKSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVt'@;
put 'bkhlYWRlcnNbZF09TSksQXJyYXkuaXNBcnJheShEKT9udWxsIT1EW2RdJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1EW2RdKTppc05hTihEKXx8KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENv'@;
put 'bHVtbkhlYWRlcnNbZF09RCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXTwoRFtkXXx8RCkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPURbZF18fEQpKX1hZGp1c3RD'@;
put 'b2x1bW5IZWFkZXJIZWlnaHRzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlzLGE9dGhpcy5USEVBRC5jaGlsZE5vZGVzLGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVycztmb3IobGV0IGY9MCx2PWwuZ2V0U2V0dGluZygiY29sdW1uSGVh'@;
put 'ZGVycyIpLmxlbmd0aDtmPHY7ZisrKWlmKGRbZl0pe2lmKCFhW2ZdfHwwPT09YVtmXS5jaGlsZE5vZGVzLmxlbmd0aClyZXR1cm47YVtmXS5jaGlsZE5vZGVzWzBdLnN0eWxlLmhlaWdodD1gJHtkW2ZdfXB4YH19cmVzZXRPdmVyc2l6ZWRSb3dzKCl7Y29uc3R7d3RTZXR0aW5nczpsfT10aGlz'@;
put 'LHt3dFZpZXdwb3J0OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZigodGhpcy5pc01hc3Rlcnx8dGhpcy5pcyhJcCkpJiYhbC5nZXRTZXR0aW5nKCJleHRlcm5hbFJvd0NhbGN1bGF0b3IiKSl7Y29uc3QgZD10aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCk7Zm9yKGxldCBoPTA7aDxkO2gr'@;
put 'Kyl7Y29uc3QgZj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGgpO2Eub3ZlcnNpemVkUm93cyYmYS5vdmVyc2l6ZWRSb3dzW2ZdJiYoYS5vdmVyc2l6ZWRSb3dzW2ZdPXZvaWQgMCl9fX1nZXRDZWxsKGwpe2xldCBhPWwucm93LGQ9bC5jb2w7Y29uc3QgaD10aGlzLnd0U2V0dGlu'@;
put 'Z3MuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDZWxsQ29vcmRzIixhLGQsIXRoaXMuaXNNYXN0ZXIsInJlbmRlciIpO2lmKGgmJkFycmF5LmlzQXJyYXkoaCkmJihbYSxkXT1oKSx0aGlzLmlzUm93QmVmb3JlUmVuZGVyZWRSb3dzKGEpKXJldHVybi0xO2lmKHRoaXMuaXNSb3dBZnRlclJlbmRl'@;
put 'cmVkUm93cyhhKSlyZXR1cm4tMjtpZih0aGlzLmlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGQpKXJldHVybi0zO2lmKHRoaXMuaXNDb2x1bW5BZnRlclJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4tNDtjb25zdCBmPXRoaXMuZ2V0Um93KGEpO2lmKCFmJiZhPj0wKXRocm93IG5ldyBF'@;
put 'cnJvcigiVFIgd2FzIGV4cGVjdGVkIHRvIGJlIHJlbmRlcmVkIGJ1dCBpcyBub3QiKTtjb25zdCB2PWYuY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oZCldO2lmKCF2JiZkPj0wKXRocm93IG5ldyBFcnJvcigiVEQgb3Ig'@;
put 'VEggd2FzIGV4cGVjdGVkIHRvIGJlIHJlbmRlcmVkIGJ1dCBpcyBub3QiKTtyZXR1cm4gdn1nZXRSb3cobCl7bGV0IGE9bnVsbCxkPW51bGw7dmFyIGgsZjtyZXR1cm4gbDwwPyhhPW51bGw9PT0oaD10aGlzLnJvd0ZpbHRlcil8fHZvaWQgMD09PWg/dm9pZCAwOmguc291cmNlUm93VG9WaXNp'@;
put 'YmxlQ29sSGVhZGVkUm93KGwpLGQ9dGhpcy5USEVBRCk6KGE9bnVsbD09PShmPXRoaXMucm93RmlsdGVyKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5zb3VyY2VUb1JlbmRlcmVkKGwpLGQ9dGhpcy5UQk9EWSksdm9pZCAwIT09YSYmdm9pZCAwIT09ZCYmIShkLmNoaWxkTm9kZXMubGVuZ3RoPGEr'@;
put 'MSkmJmQuY2hpbGROb2Rlc1thXX1nZXRDb2x1bW5IZWFkZXIobCl7Y29uc3QgZD10aGlzLlRIRUFELmNoaWxkTm9kZXNbYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjBdO3JldHVybiBkPy5jaGlsZE5vZGVzW3RoaXMuY29sdW1uRmlsdGVy'@;
put 'LnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKV19Z2V0Q29sdW1uSGVhZGVycyhsKXtjb25zdCBhPVtdLGQ9dGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpO3JldHVybiB0aGlzLlRIRUFELmNoaWxkTm9kZXMuZm9y'@;
put 'RWFjaChoPT57Y29uc3QgZj1oLmNoaWxkTm9kZXNbZF07ZiYmYS5wdXNoKGYpfSksYX1nZXRSb3dIZWFkZXIobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoYT49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJv'@;
put 'd0hlYWRlcnMiKS5sZW5ndGgpcmV0dXJuO2NvbnN0IGg9dGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKSxmPWg8MD90aGlzLnJvd0ZpbHRlci5zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCk6aCxNPShoPDA/dGhpcy5USEVBRDp0aGlzLlRCT0RZKS5jaGlsZE5vZGVz'@;
put 'W2ZdO3JldHVybiBNPy5jaGlsZE5vZGVzW2FdfWdldFJvd0hlYWRlcnMobCl7Y29uc3QgYT1bXSxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5UQk9EWS5jaGlsZE5vZGVzW3RoaXMucm93'@;
put 'RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCldLHY9Zj8uY2hpbGROb2Rlc1toXTt2JiZhLnB1c2godil9cmV0dXJuIGF9Z2V0Q29vcmRzKGwpe2xldCBhPWw7aWYoIlREIiE9PWEubm9kZU5hbWUmJiJUSCIhPT1hLm5vZGVOYW1lJiYoYT1JbShhLFsiVEQiLCJUSCJdKSksbnVsbD09PWEpcmV0'@;
put 'dXJuIG51bGw7Y29uc3QgZD1hLnBhcmVudE5vZGU7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD1kLnBhcmVudE5vZGU7bGV0IGY9VDJlKGQpLHY9YS5jZWxsSW5kZXg7TG0oJDcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxMbShZNyxhLHRoaXMud3RSb290RWxlbWVudCk/IlRIRUFEIj09PWgu'@;
put 'bm9kZU5hbWUmJihmLT1oLmNoaWxkTm9kZXMubGVuZ3RoKTpMbShWbSxhLHRoaXMud3RSb290RWxlbWVudCl8fExtKElwLGEsdGhpcy53dFJvb3RFbGVtZW50KT9mPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS1oLmNoaWxkTm9kZXMubGVuZ3RoK2Y6aD09PXRoaXMu'@;
put 'VEhFQUQ/Zj10aGlzLnJvd0ZpbHRlci52aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3coZik6dGhpcy5yb3dGaWx0ZXImJihmPXRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoZikpLExtKCQ3LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8TG0oRzcsYSx0aGlzLnd0Um9vdEVsZW1l'@;
put 'bnQpfHxMbShWbSxhLHRoaXMud3RSb290RWxlbWVudCk/dj10aGlzLmNvbHVtbkZpbHRlci5vZmZzZXR0ZWRUSCh2KTp0aGlzLmNvbHVtbkZpbHRlciYmKHY9dGhpcy5jb2x1bW5GaWx0ZXIudmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNlQ29sdW1uKHYpKTtjb25zdCBNPXRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQiLGYsdik7cmV0dXJuIE0mJkFycmF5LmlzQXJyYXkoTSkmJihbZix2XT1NKSx0aGlzLndvdC5jcmVhdGVDZWxsQ29vcmRzKGYsdil9bWFya092ZXJzaXplZFJvd3MoKXtpZih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0'@;
put 'dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIikpcmV0dXJuO2xldCBsPXRoaXMuVEJPRFkuY2hpbGROb2Rlcy5sZW5ndGg7Y29uc3QgYT1sKnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKSxkPWFfKHRoaXMuVEJPRFkpLTEsaD10aGlz'@;
put 'LndvdC5zdHlsZXNIYW5kbGVyLmFyZUNlbGxzQm9yZGVyQm94KCksZj1oP011OmFfLHY9aD8wOjEsTT1oPzE6MDtsZXQgRCxaLG5lLGNlLGJlO2lmKGEhPT1kfHx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIikpZm9yKDtsOyl7bC09MSxuZT10aGlzLnJvd0Zp'@;
put 'bHRlci5yZW5kZXJlZFRvU291cmNlKGwpLEQ9dGhpcy5nZXRSb3dIZWlnaHQobmUpLGNlPXRoaXMuZ2V0VHJGb3JSb3cobmUpLGJlPWNlLnF1ZXJ5U2VsZWN0b3IoInRoIik7Y29uc3QgRWU9MD09PW5lP006MDtaPWJlP2YoYmUpOmYoY2UpLXYsKCFEJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3Qu'@;
put 'c3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCk8Wi1FZXx8RDxaKSYmKGh8fChaKz0xKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW25lXT1aKX19Z2V0VHJGb3JSb3cobCl7cmV0dXJuIHRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJv'@;
put 'd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXX1pc0NvbHVtbkhlYWRlclJlbmRlcmVkKGwpe2lmKGw+PTApcmV0dXJuITE7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtyZXR1cm4gTWF0aC5hYnMobCk8PWR9aXNSb3dIZWFkZXJSZW5k'@;
put 'ZXJlZChsKXtpZihsPj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1kfWlzUm93QmVmb3JlUmVuZGVyZWRSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93'@;
put 'KCk7cmV0dXJuIGw8MCYmYTw9MD8hdGhpcy5pc1Jvd0hlYWRlclJlbmRlcmVkKGwpOmw8YX1pc1Jvd0FmdGVyUmVuZGVyZWRSb3dzKGwpe3JldHVybiBsPnRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNDb2x1bW5CZWZvcmVSZW5kZXJlZENvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEZp'@;
put 'cnN0UmVuZGVyZWRDb2x1bW4oKTtyZXR1cm4gbDwwJiZhPD0wPyF0aGlzLmlzQ29sdW1uSGVhZGVyUmVuZGVyZWQobCk6bDxhfWlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZsPnRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9aXND'@;
put 'b2x1bW5BZnRlclZpZXdwb3J0KGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCl9aXNSb3dBZnRlclZpZXdwb3J0KGwpe3JldHVybiB0aGlzLnJvd0ZpbHRlciYmbD50aGlzLmdldExhc3RWaXNpYmxlUm93KCl9aXNDb2x1bW5CZWZvcmVW'@;
put 'aWV3cG9ydChsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJnRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCk8MCYmbD49MH1pc0xhc3RSb3dGdWxseVZpc2libGUoKXtyZXR1cm4gdGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRSb3co'@;
put 'KX1pc0xhc3RDb2x1bW5GdWxseVZpc2libGUoKXtyZXR1cm4gdGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpPT09dGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1hbGxSb3dzSW5WaWV3cG9ydCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik9PT10'@;
put 'aGlzLmdldFZpc2libGVSb3dzQ291bnQoKX1hbGxDb2x1bW5zSW5WaWV3cG9ydCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik9PT10aGlzLmdldFZpc2libGVDb2x1bW5zQ291bnQoKX1nZXRSb3dIZWlnaHQobCl7cmV0dXJuIHRoaXMucm93VXRp'@;
put 'bHMuZ2V0SGVpZ2h0KGwpfWdldENvbHVtbkhlYWRlckhlaWdodChsKXtyZXR1cm4gdGhpcy5jb2x1bW5VdGlscy5nZXRIZWFkZXJIZWlnaHQobCl9Z2V0Q29sdW1uV2lkdGgobCl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0V2lkdGgobCl9aGFzRGVmaW5lZFNpemUoKXtyZXR1cm4gdGhp'@;
put 'cy5oYXNUYWJsZUhlaWdodCYmdGhpcy5oYXNUYWJsZVdpZHRofWdldFdpZHRoKCl7cmV0dXJuIGF1KHRoaXMuVEFCTEUpfWdldEhlaWdodCgpe3JldHVybiBNdSh0aGlzLlRBQkxFKX1nZXRUb3RhbFdpZHRoKCl7Y29uc3QgbD1hdSh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWw/bDp0aGlzLmdl'@;
put 'dFdpZHRoKCl9Z2V0VG90YWxIZWlnaHQoKXtjb25zdCBsPU11KHRoaXMuaGlkZXIpO3JldHVybiAwIT09bD9sOnRoaXMuZ2V0SGVpZ2h0KCl9aXNWaXNpYmxlKCl7cmV0dXJuIGo3KHRoaXMuVEFCTEUpfV9tb2RpZnlSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1tbChsKT9sKCk6bnVsbDtyZXR1'@;
put 'cm4gQXJyYXkuaXNBcnJheShhKT8oYT1bLi4uYV0sYVthLmxlbmd0aC0xXT10aGlzLl9jb3JyZWN0Um93SGVhZGVyV2lkdGgoYVthLmxlbmd0aC0xXSkpOmE9dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKGEpLGF9X2NvcnJlY3RSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1sO3JldHVybiJu'@;
put 'dW1iZXIiIT10eXBlb2YgbCYmKGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpKSx0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKGErPTEpLGF9fSxEZmU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtyZXR1cm4gMD09PXRoaXMuZ2V0UmVuZGVyZWRSb3dz'@;
put 'Q291bnQoKT8tMTowfSxnZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFJlbmRlcmVkUm93KCl7cmV0dXJuIHRo'@;
put 'aXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3Vu'@;
put 'dCgpe3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9LGdl'@;
put 'dENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY29sdW1uSGVhZGVycy5sZW5ndGh9fTtUcChEZmUsIk1JWElOX05BTUUiLCJzdGlja3lSb3dzVG9wIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IElmZT1EZmUsUmZlPXtnZXRGaXJz'@;
put 'dFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5SZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5WaXNpYmxlO3Jl'@;
put 'dHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVtblBhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RSZW5kZXJlZENvbHVtbigpe2NvbnN0IGM9'@;
put 'dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVtblJlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZENvbHVtblZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RQYXJ0'@;
put 'aWFsbHlWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uUGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1u'@;
put 'c1JlbmRlcmVkfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudENvbHVtbnNWaXNpYmxlfSxnZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvd0hlYWRlcnMubGVuZ3RofX07VHAoUmZlLCJN'@;
put 'SVhJTl9OQU1FIiwiY2FsY3VsYXRlZENvbHVtbnMiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3Qgc0s9UmZlO2NsYXNzIGxLIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxZNyl9fVRsKGxLLElmZSksVGwobEssc0spO2NvbnN0IHdKZT1s'@;
put 'SztmdW5jdGlvbiB0UChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIE9F'@;
put 'PW5ldyBXZWFrU2V0O2Z1bmN0aW9uIExmZShjKXtjb25zdHt3dFNldHRpbmdzOmwsaW5saW5lU3RhcnRPdmVybGF5OmEsd3RUYWJsZTpkLHd0Vmlld3BvcnQ6aCx0b3RhbENvbHVtbnM6Zixyb290V2luZG93OnZ9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihhLm1haW5UYWJsZVNjcm9sbGFi'@;
put 'bGVFbGVtZW50PT09dil7bGV0IEQ9bnVsbDtpZihsLmdldFNldHRpbmcoInJ0bE1vZGUiKSl7Y29uc3QgbmU9ZC5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtEPU1hdGguYWJzKG5lLnJpZ2h0LXRoaXMuZGF0YUFjY2Vzc09iamVjdC5yb290V2luZG93LmRvY3VtZW50LmRvY3VtZW50'@;
put 'RWxlbWVudC5vZmZzZXRXaWR0aCl9ZWxzZSBEPWowKGQud3RSb290RWxlbWVudCkubGVmdDtjb25zdCBaPU1hdGguYWJzKHYkKHYsdikpO2lmKEQ+Wil7Y29uc3QgbmU9YiQodik7bGV0IGNlPWguZ2V0Um93SGVhZGVyV2lkdGgoKTtmb3IobGV0IGJlPTE7YmU8PWY7YmUrKylpZihjZSs9YS5z'@;
put 'dW1DZWxsU2l6ZXMoYmUtMSxiZSksRCtjZS1aPj1uZSl7Yz1iZS0yO2JyZWFrfX19cmV0dXJuIGN9ZnVuY3Rpb24gT2ZlKGMpe2NvbnN0e3RvcE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9ydDpkLHRvdGFsUm93czpoLHJvb3RXaW5kb3c6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lm'@;
put 'KGwubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1mKXtjb25zdCB2PWowKGEud3RSb290RWxlbWVudCksTT1MTyhmLGYpO2lmKHYudG9wPk0pe2NvbnN0IEQ9YV8oZik7bGV0IFo9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtmb3IobGV0IG5lPTE7bmU8PWg7bmUrKylpZihaKz1sLnN1'@;
put 'bUNlbGxTaXplcyhuZS0xLG5lKSx2LnRvcCtaLU0+PUQpe2M9bmUtMjticmVha319fXJldHVybiBjfWNvbnN0IEFKZT1jbGFzcyBUSmV7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIENKZShjLGwpeyhmdW5jdGlvbiBTSmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJD'@;
put 'YW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsT0UpLGZ1bmN0aW9uIE1KZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geEplKGMpe3ZhciBsPWZ1bmN0aW9uIEVKZShjLGwpe2lmKCJv'@;
put 'YmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRp'@;
put 'dmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVu'@;
put 'dW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImRhdGFBY2Nlc3NPYmplY3QiLHZvaWQgMCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWx9c2Nyb2xsVmlld3BvcnQobCxhLGQpe2lmKGwuY29sPDB8fGwucm93PDApcmV0dXJuITE7Y29uc3Qg'@;
put 'aD10aGlzLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwuY29sLGEpLGY9dGhpcy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobC5yb3csZCk7cmV0dXJuIGh8fGZ9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1'@;
put 'bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhdXRvIjtjb25zdHtkcmF3bjpkLHRvdGFsQ29sdW1uczpofT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuITE7Y29uc3QgZj1GZChhKTtpZihsPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVm'@;
put 'b3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLGwsZiksIU51bWJlci5pc0ludGVnZXIobCl8fGw8MHx8bD5oKXJldHVybiExO2E9Zi52YWx1ZTtjb25zdHtmaXhlZENvbHVtbnNTdGFydDp2LGlubGluZVN0YXJ0T3ZlcmxheTpNfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsRD0iYXV0byI9'@;
put 'PT1hO2lmKEQmJmw8dilyZXR1cm4hMTtjb25zdCBaPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksbmU9dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO2xldCBjZT0hMTtyZXR1cm4oRCYmKGw8Wnx8bD5uZSl8fCFEKSYmKGNlPU0uc2Nyb2xsVG8obCxEP2w+PXRoaXMuZ2V0TGFzdFBh'@;
put 'cnRpYWxseVZpc2libGVDb2x1bW4oKToiZW5kIj09PWEpKSxjZX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJhdXRvIjtjb25zdHtkcmF3bjpkLHRvdGFsUm93czpofT10aGlz'@;
put 'LmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuITE7Y29uc3QgZj1GZChhKTtpZihsPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5IixsLGYpLCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+'@;
put 'aClyZXR1cm4hMTthPWYudmFsdWU7Y29uc3R7Zml4ZWRSb3dzQm90dG9tOnYsZml4ZWRSb3dzVG9wOk0sdG9wT3ZlcmxheTpEfT10aGlzLmRhdGFBY2Nlc3NPYmplY3QsWj0iYXV0byI9PT1hO2lmKFomJihsPE18fGw+aC12LTEpKXJldHVybiExO2NvbnN0IG5lPXRoaXMuZ2V0Rmlyc3RWaXNp'@;
put 'YmxlUm93KCksY2U9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpO2xldCBiZT0hMTtyZXR1cm4oWiYmKGw8bmV8fGw+Y2UpfHwhWikmJihiZT1ELnNjcm9sbFRvKGwsWj9sPj10aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCk6ImJvdHRvbSI9PT1hKSksYmV9Z2V0Rmlyc3RWaXNpYmxl'@;
put 'Um93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpfWdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRQKE9FLHRoaXMsT2ZlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3co'@;
put 'KSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRQKE9FLHRoaXMsT2ZlKS5jYWxsKHRoaXMsdGhp'@;
put 'cy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKSl9Z2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpfWdldExhc3RWaXNpYmxlQ29sdW1uKCl7'@;
put 'cmV0dXJuIHRQKE9FLHRoaXMsTGZlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSl9Z2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmdldEZpcnN0'@;
put 'UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfWdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRQKE9FLHRoaXMsTGZlKS5jYWxsKHRoaXMsdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSl9fTtmdW5jdGlvbiBQ'@;
put 'ZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIElKZShjKXt2YXIgbD1mdW5jdGlvbiBSSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIp'@;
put 'O2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wi'@;
put 'PT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHZfKGMsbCl7cmV0dXJuIGMuZ2V0KEhmZShjLGwpKX1mdW5jdGlvbiBG'@;
put 'ZmUoYyxsLGEpe3JldHVybiBjLnNldChIZmUoYyxsKSxhKSxhfWZ1bmN0aW9uIEhmZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlz'@;
put 'IG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGJnPW5ldyBXZWFrTWFwO2NsYXNzIG5Qe2NvbnN0cnVjdG9yKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtQZmUodGhpcywicm93IixudWxsKSxQZmUodGhp'@;
put 'cywiY29sIixudWxsKSxmdW5jdGlvbiBrSmUoYyxsLGEpeyhmdW5jdGlvbiBESmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChj'@;
put 'LGEpfSh0aGlzLGJnLCExKSxGZmUoYmcsdGhpcyxkKSx0eXBlb2YgbDwidSImJnR5cGVvZiBhPCJ1IiYmKHRoaXMucm93PWwsdGhpcy5jb2w9YSl9aXNWYWxpZChsKXtjb25zdHtjb3VudFJvd3M6YSxjb3VudENvbHM6ZCxjb3VudFJvd0hlYWRlcnM6aCxjb3VudENvbEhlYWRlcnM6Zn09e2Nv'@;
put 'dW50Um93czowLGNvdW50Q29sczowLGNvdW50Um93SGVhZGVyczowLGNvdW50Q29sSGVhZGVyczowLC4uLmx9O3JldHVybiEoIU51bWJlci5pc0ludGVnZXIodGhpcy5yb3cpfHwhTnVtYmVyLmlzSW50ZWdlcih0aGlzLmNvbCl8fHRoaXMucm93PC1mfHx0aGlzLmNvbDwtaHx8dGhpcy5yb3c+'@;
put 'PWF8fHRoaXMuY29sPj1kKX1pc0VxdWFsKGwpe3JldHVybiBsPT09dGhpc3x8dGhpcy5yb3c9PT1sLnJvdyYmdGhpcy5jb2w9PT1sLmNvbH1pc0hlYWRlcigpe3JldHVybiF0aGlzLmlzQ2VsbCgpfWlzQ2VsbCgpe3JldHVybiB0aGlzLnJvdz49MCYmdGhpcy5jb2w+PTB9aXNSdGwoKXtyZXR1'@;
put 'cm4gdl8oYmcsdGhpcyl9aXNTb3V0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c+PWwucm93JiYodl8oYmcsdGhpcyk/dGhpcy5jb2w8PWwuY29sOnRoaXMuY29sPj1sLmNvbCl9aXNOb3J0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c8PWwucm93JiYodl8oYmcsdGhpcyk/dGhpcy5jb2w+'@;
put 'PWwuY29sOnRoaXMuY29sPD1sLmNvbCl9aXNTb3V0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c+PWwucm93JiYodl8oYmcsdGhpcyk/dGhpcy5jb2w+PWwuY29sOnRoaXMuY29sPD1sLmNvbCl9aXNOb3J0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5yb3c8PWwucm93JiYodl8oYmcsdGhpcyk/'@;
put 'dGhpcy5jb2w8PWwuY29sOnRoaXMuY29sPj1sLmNvbCl9bm9ybWFsaXplKCl7cmV0dXJuIHRoaXMucm93PW51bGw9PT10aGlzLnJvdz90aGlzLnJvdzpNYXRoLm1heCh0aGlzLnJvdywwKSx0aGlzLmNvbD1udWxsPT09dGhpcy5jb2w/dGhpcy5jb2w6TWF0aC5tYXgodGhpcy5jb2wsMCksdGhp'@;
put 'c31hc3NpZ24obCl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobD8ucm93KSYmKHRoaXMucm93PWwucm93KSxOdW1iZXIuaXNJbnRlZ2VyKGw/LmNvbCkmJih0aGlzLmNvbD1sLmNvbCksbCBpbnN0YW5jZW9mIG5QJiZGZmUoYmcsdGhpcyxsLmlzUnRsKCkpLHRoaXN9Y2xvbmUoKXtyZXR1cm4g'@;
put 'bmV3IG5QKHRoaXMucm93LHRoaXMuY29sLHZfKGJnLHRoaXMpKX10b09iamVjdCgpe3JldHVybntyb3c6dGhpcy5yb3csY29sOnRoaXMuY29sfX19Y29uc3QgclA9blA7ZnVuY3Rpb24gY0soYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFBKZShjKXt2YXIgbD1mdW5jdGlvbiBGSmUoYyxsKXtp'@;
put 'Zigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJp'@;
put 'bWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6'@;
put 'YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEIyKGMsbCl7cmV0dXJuIGMuZ2V0KE5mZShjLGwpKX1mdW5jdGlvbiBOZmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1'@;
put 'bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBOZD1uZXcgV2Vha01hcDtjbGFzcyB1S3tjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9'@;
put 'PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpsLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjSyh0aGlzLCJoaWdobGlnaHQi'@;
put 'LG51bGwpLGNLKHRoaXMsImZyb20iLG51bGwpLGNLKHRoaXMsInRvIixudWxsKSxmdW5jdGlvbiBMSmUoYyxsLGEpeyhmdW5jdGlvbiBPSmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3'@;
put 'aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLE5kLCExKSx0aGlzLmhpZ2hsaWdodD1sLmNsb25lKCksdGhpcy5mcm9tPWEuY2xvbmUoKSx0aGlzLnRvPWQuY2xvbmUoKSxmdW5jdGlvbiBISmUoYyxsLGEpe2Muc2V0KE5mZShjLGwpLGEpfShOZCx0aGlzLGgpfXNl'@;
put 'dEhpZ2hsaWdodChsKXtyZXR1cm4gdGhpcy5oaWdobGlnaHQ9bC5jbG9uZSgpLHRoaXN9c2V0RnJvbShsKXtyZXR1cm4gdGhpcy5mcm9tPWwuY2xvbmUoKSx0aGlzfXNldFRvKGwpe3JldHVybiB0aGlzLnRvPWwuY2xvbmUoKSx0aGlzfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlzLmhpZ2hsaWdo'@;
put 'dC5ub3JtYWxpemUoKSx0aGlzLmZyb20ubm9ybWFsaXplKCksdGhpcy50by5ub3JtYWxpemUoKSx0aGlzfWlzVmFsaWQobCl7cmV0dXJuIHRoaXMuZnJvbS5pc1ZhbGlkKGwpJiZ0aGlzLnRvLmlzVmFsaWQobCl9aXNTaW5nbGUoKXtyZXR1cm4gdGhpcy5pc1NpbmdsZUNlbGwoKXx8dGhpcy5p'@;
put 'c1NpbmdsZUhlYWRlcigpfWlzU2luZ2xlQ2VsbCgpe3JldHVybiB0aGlzLmZyb20ucm93Pj0wJiZ0aGlzLmZyb20ucm93PT09dGhpcy50by5yb3cmJnRoaXMuZnJvbS5jb2w+PTAmJnRoaXMuZnJvbS5jb2w9PT10aGlzLnRvLmNvbH1pc1NpbmdsZUhlYWRlcigpe3JldHVybih0aGlzLmZyb20u'@;
put 'cm93PDB8fHRoaXMuZnJvbS5jb2w8MCkmJnRoaXMuZnJvbS5yb3c9PT10aGlzLnRvLnJvdyYmdGhpcy5mcm9tLmNvbD09PXRoaXMudG8uY29sfWlzSGVhZGVyKCl7cmV0dXJuISghdGhpcy5mcm9tLmlzSGVhZGVyKCl8fCF0aGlzLnRvLmlzSGVhZGVyKCkpfHx0aGlzLmZyb20uY29sPDAmJnRo'@;
put 'aXMudG8uY29sPDB8fHRoaXMuZnJvbS5yb3c8MCYmdGhpcy50by5yb3c8MH1jb250YWluc0hlYWRlcnMoKXtyZXR1cm4gdGhpcy5mcm9tLmlzSGVhZGVyKCl8fHRoaXMudG8uaXNIZWFkZXIoKX1nZXRPdXRlckhlaWdodCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8u'@;
put 'cm93KS1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSsxfWdldE91dGVyV2lkdGgoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCktTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkrMX1nZXRIZWlnaHQoKXtpZih0aGlzLmZyb20u'@;
put 'cm93PDAmJnRoaXMudG8ucm93PDApcmV0dXJuIDA7Y29uc3QgbD1NYXRoLm1heCh0aGlzLmZyb20ucm93LDApLGE9TWF0aC5tYXgodGhpcy50by5yb3csMCk7cmV0dXJuIE1hdGgubWF4KGwsYSktTWF0aC5taW4obCxhKSsxfWdldFdpZHRoKCl7aWYodGhpcy5mcm9tLmNvbDwwJiZ0aGlzLnRv'@;
put 'LmNvbDwwKXJldHVybiAwO2NvbnN0IGw9TWF0aC5tYXgodGhpcy5mcm9tLmNvbCwwKSxhPU1hdGgubWF4KHRoaXMudG8uY29sLDApO3JldHVybiBNYXRoLm1heChsLGEpLU1hdGgubWluKGwsYSkrMX1nZXRDZWxsc0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0V2lkdGgoKSp0aGlzLmdldEhlaWdo'@;
put 'dCgpfWluY2x1ZGVzKGwpe2NvbnN0e3JvdzphLGNvbDpkfT1sLGg9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksZj10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuIGgucm93PD1hJiZmLnJvdz49YSYmaC5jb2w8PWQmJmYuY29sPj1kfWluY2x1ZGVzUmFuZ2UobCl7'@;
put 'cmV0dXJuIHRoaXMuaW5jbHVkZXMobC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpJiZ0aGlzLmluY2x1ZGVzKGwuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSl9aXNFcXVhbChsKXtyZXR1cm4gTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyk9PT1NYXRoLm1pbihsLmZyb20u'@;
put 'cm93LGwudG8ucm93KSYmTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyk9PT1NYXRoLm1heChsLmZyb20ucm93LGwudG8ucm93KSYmTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCk9PT1NYXRoLm1pbihsLmZyb20uY29sLGwudG8uY29sKSYmTWF0aC5tYXgodGhp'@;
put 'cy5mcm9tLmNvbCx0aGlzLnRvLmNvbCk9PT1NYXRoLm1heChsLmZyb20uY29sLGwudG8uY29sKX1vdmVybGFwcyhsKXtyZXR1cm4gbC5pc1NvdXRoRWFzdE9mKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkpJiZsLmlzTm9ydGhXZXN0T2YodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29y'@;
put 'bmVyKCkpfWlzU291dGhFYXN0T2YobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNTb3V0aEVhc3RPZihsKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkuaXNTb3V0aEVhc3RPZihsKX1pc05vcnRoV2VzdE9mKGwpe3JldHVybiB0aGlzLmdldE91dGVy'@;
put 'VG9wTGVmdENvcm5lcigpLmlzTm9ydGhXZXN0T2YobCl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzTm9ydGhXZXN0T2YobCl9aXNPdmVybGFwcGluZ0hvcml6b250YWxseShsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRv'@;
put 'cFN0YXJ0Q29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sPD1sLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sfHx0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2w8PWwuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2wmJnRoaXMuZ2V0T3V0ZXJUb3BT'@;
put 'dGFydENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sfWlzT3ZlcmxhcHBpbmdWZXJ0aWNhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3c+PWwuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdyYmdGhpcy5nZXRPdXRl'@;
put 'ckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93PD1sLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3d8fHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvdyYmdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLnJvdz49bC5n'@;
put 'ZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93fWV4cGFuZChsKXtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybihsLnJvdzxhLnJvd3x8bC5jb2w8YS5jb2x8fGwucm93PmQucm93fHxsLmNvbD5kLmNv'@;
put 'bCkmJih0aGlzLmZyb209dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbihhLnJvdyxsLnJvdyksTWF0aC5taW4oYS5jb2wsbC5jb2wpKSx0aGlzLnRvPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgoZC5yb3csbC5yb3cpLE1hdGgubWF4KGQuY29sLGwuY29sKSksITApfWV4'@;
put 'cGFuZEJ5UmFuZ2UobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtpZih0aGlzLmluY2x1ZGVzUmFuZ2UobCl8fCF0aGlzLm92ZXJsYXBzKGwpKXJldHVybiExO2NvbnN0IGQ9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29y'@;
put 'bmVyKCksaD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZj10aGlzLmdldERpcmVjdGlvbigpLHY9bC5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksTT1sLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksRD1NYXRoLm1pbihkLnJvdyx2LnJvdyksWj1NYXRoLm1pbihkLmNvbCx2LmNv'@;
put 'bCksbmU9TWF0aC5tYXgoaC5yb3csTS5yb3cpLGNlPU1hdGgubWF4KGguY29sLE0uY29sKSxiZT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKEQsWiksRWU9dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhuZSxjZSk7cmV0dXJuIHRoaXMuZnJvbT1iZSx0aGlzLnRvPUVlLHRoaXMuc2V0RGlyZWN0aW9u'@;
put 'KGYpLGEmJih0aGlzLmhpZ2hsaWdodC5yb3c9PT10aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3cmJiJOLVMiPT09dGhpcy5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCksdGhpcy5oaWdobGlnaHQuY29sPT09dGhpcy5nZXRP'@;
put 'dXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sJiYiVy1FIj09PXRoaXMuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkoKSksITB9Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuZnJvbS5pc05vcnRoV2VzdE9mKHRoaXMudG8pPyJOVy1TRSI6'@;
put 'dGhpcy5mcm9tLmlzTm9ydGhFYXN0T2YodGhpcy50byk/Ik5FLVNXIjp0aGlzLmZyb20uaXNTb3V0aEVhc3RPZih0aGlzLnRvKT8iU0UtTlciOnRoaXMuZnJvbS5pc1NvdXRoV2VzdE9mKHRoaXMudG8pPyJTVy1ORSI6dm9pZCAwfXNldERpcmVjdGlvbihsKXtzd2l0Y2gobCl7Y2FzZSJOVy1T'@;
put 'RSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKV07YnJlYWs7Y2FzZSJORS1TVyI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCksdGhpcy5nZXRP'@;
put 'dXRlckJvdHRvbUxlZnRDb3JuZXIoKV07YnJlYWs7Y2FzZSJTRS1OVyI6W3RoaXMuZnJvbSx0aGlzLnRvXT1bdGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCksdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKV07YnJlYWs7Y2FzZSJTVy1ORSI6W3RoaXMuZnJvbSx0aGlzLnRvXT1b'@;
put 'dGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKV19fWdldFZlcnRpY2FsRGlyZWN0aW9uKCl7cmV0dXJuWyJORS1TVyIsIk5XLVNFIl0uaW5kZXhPZih0aGlzLmdldERpcmVjdGlvbigpKT4tMT8iTi1TIjoiUy1OIn1nZXRIb3Jpem9u'@;
put 'dGFsRGlyZWN0aW9uKCl7cmV0dXJuWyJOVy1TRSIsIlNXLU5FIl0uaW5kZXhPZih0aGlzLmdldERpcmVjdGlvbigpKT4tMT8iVy1FIjoiRS1XIn1mbGlwRGlyZWN0aW9uVmVydGljYWxseSgpe3N3aXRjaCh0aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0aGlzLnNldERpcmVjdGlv'@;
put 'bigiU1ctTkUiKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiU0UtTlciKTticmVhaztjYXNlIlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiTkUtU1ciKTticmVhaztjYXNlIlNXLU5FIjp0aGlzLnNldERpcmVjdGlvbigiTlctU0UiKX19ZmxpcERpcmVjdGlvbkhvcml6'@;
put 'b250YWxseSgpe3N3aXRjaCh0aGlzLmdldERpcmVjdGlvbigpKXtjYXNlIk5XLVNFIjp0aGlzLnNldERpcmVjdGlvbigiTkUtU1ciKTticmVhaztjYXNlIk5FLVNXIjp0aGlzLnNldERpcmVjdGlvbigiTlctU0UiKTticmVhaztjYXNlIlNFLU5XIjp0aGlzLnNldERpcmVjdGlvbigiU1ctTkUi'@;
put 'KTticmVhaztjYXNlIlNXLU5FIjp0aGlzLnNldERpcmVjdGlvbigiU0UtTlciKX19Z2V0VG9wU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8u'@;
put 'Y29sKSkubm9ybWFsaXplKCl9Z2V0VG9wTGVmdENvcm5lcigpe3JldHVybiBCMihOZCx0aGlzKT90aGlzLmdldFRvcEVuZENvcm5lcigpOnRoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKX1nZXRCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0'@;
put 'aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gQjIoTmQsdGhpcyk/dGhpcy5nZXRCb3R0b21TdGFydENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tRW5kQ29y'@;
put 'bmVyKCl9Z2V0VG9wRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldFRvcFJpZ2h0Q29ybmVyKCl7cmV0dXJu'@;
put 'IEIyKE5kLHRoaXMpP3RoaXMuZ2V0VG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldFRvcEVuZENvcm5lcigpfWdldEJvdHRvbVN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5m'@;
put 'cm9tLmNvbCx0aGlzLnRvLmNvbCkpLm5vcm1hbGl6ZSgpfWdldEJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gQjIoTmQsdGhpcyk/dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlz'@;
put 'Ll9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlclRvcExlZnRDb3JuZXIoKXtyZXR1cm4gQjIoTmQsdGhpcyk/dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpOnRo'@;
put 'aXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpfWdldE91dGVyQm90dG9tRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVy'@;
put 'Qm90dG9tUmlnaHRDb3JuZXIoKXtyZXR1cm4gQjIoTmQsdGhpcyk/dGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpfWdldE91dGVyVG9wRW5kQ29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4o'@;
put 'dGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5tYXgodGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gQjIoTmQsdGhpcyk/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigp'@;
put 'fWdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCl7cmV0dXJu'@;
put 'IEIyKE5kLHRoaXMpP3RoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTp0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKX1pc0Nvcm5lcihsKXtyZXR1cm4gbC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFJp'@;
put 'Z2h0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSl9Z2V0T3Bwb3NpdGVDb3JuZXIobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiByUCYmKGwuaXNFcXVhbCh0aGlzLmdl'@;
put 'dE91dGVyQm90dG9tRW5kQ29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpOmwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOmwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkp'@;
put 'P3RoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpOmwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpOnZvaWQgMCl9Z2V0Qm9yZGVyc1NoYXJlZFdpdGgobCl7aWYoIXRoaXMuaW5jbHVkZXNSYW5nZShsKSly'@;
put 'ZXR1cm5bXTtjb25zdCBhX3RvcD1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2JvdHRvbT1NYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2xlZnQ9TWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksYV9yaWdodD1NYXRoLm1heCh0aGlz'@;
put 'LmZyb20uY29sLHRoaXMudG8uY29sKSxkX3RvcD1NYXRoLm1pbihsLmZyb20ucm93LGwudG8ucm93KSxkX2JvdHRvbT1NYXRoLm1heChsLmZyb20ucm93LGwudG8ucm93KSxkX2xlZnQ9TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCksZF9yaWdodD1NYXRoLm1heChsLmZyb20uY29sLGwu'@;
put 'dG8uY29sKSxoPVtdO3JldHVybiBhX3RvcD09PWRfdG9wJiZoLnB1c2goInRvcCIpLGFfcmlnaHQ9PT1kX3JpZ2h0JiZoLnB1c2goQjIoTmQsdGhpcyk/ImxlZnQiOiJyaWdodCIpLGFfYm90dG9tPT09ZF9ib3R0b20mJmgucHVzaCgiYm90dG9tIiksYV9sZWZ0PT09ZF9sZWZ0JiZoLnB1c2go'@;
put 'QjIoTmQsdGhpcyk/InJpZ2h0IjoibGVmdCIpLGh9Z2V0SW5uZXIoKXtjb25zdCBsPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9'@;
put 'YS5jb2w7ZisrKSh0aGlzLmZyb20ucm93IT09aHx8dGhpcy5mcm9tLmNvbCE9PWYpJiYodGhpcy50by5yb3chPT1ofHx0aGlzLnRvLmNvbCE9PWYpJiZkLnB1c2godGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1nZXRBbGwoKXtjb25zdCBsPXRoaXMuZ2V0T3V0ZXJUb3BT'@;
put 'dGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKWQucHVzaChsLnJvdz09PWgmJmwuY29sPT09Zj9sOmEucm93PT09aCYmYS5jb2w9PT1mP2E6dGhp'@;
put 'cy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1mb3JBbGwobCl7Y29uc3QgYT10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IGg9YS5yb3c7aDw9ZC5yb3c7aCsrKWZvcihsZXQgZj1hLmNvbDtmPD1k'@;
put 'LmNvbDtmKyspaWYoITE9PT1sKGgsZikpcmV0dXJufWNsb25lKCl7cmV0dXJuIG5ldyB1Syh0aGlzLmhpZ2hsaWdodCx0aGlzLmZyb20sdGhpcy50byxCMihOZCx0aGlzKSl9dG9PYmplY3QoKXtyZXR1cm57ZnJvbTp0aGlzLmZyb20udG9PYmplY3QoKSx0bzp0aGlzLnRvLnRvT2JqZWN0KCl9'@;
put 'fV9jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIG5ldyByUChsLGEsQjIoTmQsdGhpcykpfX1jb25zdCBkSz11SztmdW5jdGlvbiBqMihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTkplKGMpe3ZhciBsPWZ1bmN0aW9uIFZKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0'@;
put 'dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp'@;
put 'dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl'@;
put 'OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgaEt7Z2V0IGV2ZW50TWFuYWdlcigpe3JldHVybiBuZXcgTjIodGhpcyl9Y29uc3RydWN0b3IobCxhKXtqMih0aGlzLCJ3dFRhYmxlIix2b2lkIDApLGoyKHRoaXMsInd0U2Nyb2xsIix2b2lkIDApLGoyKHRoaXMsInd0Vmlld3BvcnQi'@;
put 'LHZvaWQgMCksajIodGhpcywid3RPdmVybGF5cyIsdm9pZCAwKSxqMih0aGlzLCJzZWxlY3Rpb25NYW5hZ2VyIix2b2lkIDApLGoyKHRoaXMsInd0RXZlbnQiLHZvaWQgMCksajIodGhpcywiZ3VpZCIsYHd0XyR7bCQoKX1gKSxqMih0aGlzLCJkcmF3SW50ZXJydXB0ZWQiLCExKSxqMih0aGlz'@;
put 'LCJkcmF3biIsITEpLGoyKHRoaXMsImFjdGl2ZU92ZXJsYXlOYW1lIiwibWFzdGVyIiksajIodGhpcywiZG9tQmluZGluZ3MiLHZvaWQgMCksajIodGhpcywid3RTZXR0aW5ncyIsdm9pZCAwKSx0aGlzLmRvbUJpbmRpbmdzPXtyb290VGFibGU6bCxyb290RG9jdW1lbnQ6bC5vd25lckRvY3Vt'@;
put 'ZW50LHJvb3RXaW5kb3c6bC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fSx0aGlzLnd0U2V0dGluZ3M9YSx0aGlzLnd0U2Nyb2xsPW5ldyBBSmUodGhpcy5jcmVhdGVTY3JvbGxEYW8oKSl9ZmluZE9yaWdpbmFsSGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy53dFRhYmxlLlRIRUFELmNo'@;
put 'aWxkTm9kZXMubGVuZ3RoJiZ0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aCl7Zm9yKGxldCBhPTAsZD10aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzLmxlbmd0aDthPGQ7YSsrKWwucHVzaCh0aGlzLnd0VGFibGUuVEhF'@;
put 'QUQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzW2FdLmlubmVySFRNTCk7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGh8fHRoaXMud3RTZXR0aW5ncy51cGRhdGUoImNvbHVtbkhlYWRlcnMiLFtmdW5jdGlvbihhLGQpe09tKGQsbFthXSl9XSl9fWNy'@;
put 'ZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gbmV3IHJQKGwsYSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiBuZXcgZEsobCxhLGQsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJ0bE1vZGUiKSl9ZHJhdygp'@;
put 'e2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMuZHJhd0ludGVycnVwdGVkPSExLCF0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCl8fEkyZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlKT90'@;
put 'aGlzLmRyYXdJbnRlcnJ1cHRlZD0hMDp0aGlzLnd0VGFibGUuZHJhdyhsKSx0aGlzfWdldENlbGwobCl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKSlyZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCk7Y29uc3QgZD10aGlz'@;
put 'Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRD'@;
put 'b2x1bW5zU3RhcnQiKTtpZihsLnJvdzxoJiZsLmNvbDx2KXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxoKXJldHVybiB0aGlzLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRh'@;
put 'YmxlLmdldENlbGwobCk7aWYobC5jb2w8diYmbC5yb3c+PWQtZil7aWYodGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlz'@;
put 'LmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENlbGwobCl9ZWxzZXtpZihsLmNvbDx2KXJldHVybiB0aGlzLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLnJvdzxkJiZsLnJvdz49ZC1mJiZ0'@;
put 'aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheSYmdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKX1yZXR1cm4gdGhpcy53dFRhYmxlLmdldENlbGwobCl9c2Nyb2xs'@;
put 'Vmlld3BvcnQobCxhLGQpe3JldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0KGwsYSxkKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEpe3JldHVybiB0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNh'@;
put 'bGx5KGwsYSl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl9Z2V0Vmlld3BvcnQoKXtyZXR1cm5bdGhpcy53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpLHRoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSx0aGlzLnd0VGFibGUu'@;
put 'Z2V0TGFzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0TGFzdFZpc2libGVDb2x1bW4oKV19ZGVzdHJveSgpe3RoaXMud3RPdmVybGF5cy5kZXN0cm95KCksdGhpcy53dEV2ZW50LmRlc3Ryb3koKX1jcmVhdGVTY3JvbGxEYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCBkcmF3bigp'@;
put 'e3JldHVybiBsLmRyYXdufSxnZXQgdG9wT3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheX0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheSgpe3JldHVybiBsLnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5fSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFibGV9LGdl'@;
put 'dCB3dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0U2V0dGluZ3MoKXtyZXR1cm4gbC53dFNldHRpbmdzfSxnZXQgcm9vdFdpbmRvdygpe3JldHVybiBsLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9LGdldCB0b3RhbFJvd3MoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNl'@;
put 'dHRpbmcoInRvdGFsUm93cyIpfSxnZXQgdG90YWxDb2x1bW5zKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKX0sZ2V0IGZpeGVkUm93c1RvcCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9LGdldCBmaXhlZFJv'@;
put 'd3NCb3R0b20oKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpfSxnZXQgZml4ZWRDb2x1bW5zU3RhcnQoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iil9fX1nZXRUYWJsZURhbygpe2NvbnN0IGw9dGhp'@;
put 'cztyZXR1cm57Z2V0IHdvdCgpe3JldHVybiBsfSxnZXQgcGFyZW50VGFibGVPZmZzZXQoKXtyZXR1cm4gbC5jbG9uZVNvdXJjZS53dFRhYmxlLnRhYmxlT2Zmc2V0fSxnZXQgY2xvbmVTb3VyY2UoKXtyZXR1cm4gbC5jbG9uZVNvdXJjZX0sZ2V0IHdvcmtzcGFjZVdpZHRoKCl7cmV0dXJuIGwu'@;
put 'd3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpfSxnZXQgd3RWaWV3cG9ydCgpe3JldHVybiBsLnd0Vmlld3BvcnR9LGdldCB3dE92ZXJsYXlzKCl7cmV0dXJuIGwud3RPdmVybGF5c30sZ2V0IHNlbGVjdGlvbk1hbmFnZXIoKXtyZXR1cm4gbC5zZWxlY3Rpb25NYW5hZ2VyfSxnZXQgc3R5'@;
put 'bGVzSGFuZGxlcigpe3JldHVybiBsLnN0eWxlc0hhbmRsZXJ9LGdldCBkcmF3bigpe3JldHVybiBsLmRyYXdufSxzZXQgZHJhd24oYSl7bC5kcmF3bj1hfSxnZXQgd3RUYWJsZSgpe3JldHVybiBsLnd0VGFibGV9LGdldCBzdGFydENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9y'@;
put 'dC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IHN0YXJ0Q29sdW1uVmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgc3RhcnRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwu'@;
put 'd3RWaWV3cG9ydC5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBlbmRDb2x1bW5SZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgZW5kQ29sdW1uVmlzaWJsZSgpe3JldHVy'@;
put 'biBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGVuZENvbHVtblBhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59LGdldCBjb3VudENvbHVtbnNS'@;
put 'ZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudENvbHVtbnNWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IuY291bnR9LGdldCBzdGFydFJvd1JlbmRlcmVkKCl7cmV0'@;
put 'dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IHN0YXJ0Um93VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgc3RhcnRSb3dQYXJ0aWFsbHlWaXNpYmxlKCl7cmV0dXJuIGwud3RW'@;
put 'aWV3cG9ydC5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBlbmRSb3dSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IuZW5kUm93fSxnZXQgZW5kUm93VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zp'@;
put 'c2libGVDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGVuZFJvd1BhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9LGdldCBjb3VudFJvd3NSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRl'@;
put 'ckNhbGN1bGF0b3IuY291bnR9LGdldCBjb3VudFJvd3NWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuY291bnR9LGdldCBjb2x1bW5IZWFkZXJzKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIil9LGdldCBy'@;
put 'b3dIZWFkZXJzKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIil9fX19ZnVuY3Rpb24gVmZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBCSmUoYyl7dmFyIGw9ZnVuY3Rpb24gakplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2'@;
put 'YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1'@;
put 'ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp'@;
put 'dGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB6SmUgZXh0ZW5kcyBoS3tjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIobCxhKSxWZmUodGhpcywiY2xvbmVTb3VyY2UiLHZvaWQgMCksVmZlKHRoaXMsImNsb25lT3ZlcmxheSIsdm9pZCAwKTtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0'@;
put 'aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMuY2xvbmVTb3VyY2U9ZC5zb3VyY2UsdGhpcy5jbG9uZU92ZXJsYXk9ZC5vdmVybGF5LHRoaXMuc3R5bGVzSGFuZGxlcj1kLnN0eWxlc0hhbmRsZXIsdGhpcy53dFRhYmxlPXRoaXMuY2xvbmVPdmVybGF5LmNyZWF0ZVRhYmxlKHRoaXMuZ2V0VGFibGVE'@;
put 'YW8oKSxoLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzKSx0aGlzLnd0Vmlld3BvcnQ9ZC52aWV3cG9ydCx0aGlzLnNlbGVjdGlvbk1hbmFnZXI9ZC5zZWxlY3Rpb25NYW5hZ2VyLHRoaXMud3RFdmVudD1uZXcgYmZlKGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3Ms'@;
put 'dGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9uTWFuYWdlcixkLmV2ZW50KSx0aGlzLmZpbmRPcmlnaW5hbEhlYWRlcnMoKX19Y2xhc3MgUEV7Y29uc3RydWN0b3IobCxhLGQsaCxmKXsoZnVuY3Rpb24gVUplKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBaSmUo'@;
put 'Yyl7dmFyIGw9ZnVuY3Rpb24gV0plKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLFRwKHRoaXMsIndvdCIsbCx7d3JpdGFibGU6ITF9KSx0aGlzLmRvbUJpbmRpbmdzPWYsdGhpcy5m'@;
put 'YWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aDtjb25zdHtUQUJMRTp2LGhpZGVyOk0sc3ByZWFkZXI6RCxob2xkZXI6Wix3dFJvb3RFbGVtZW50Om5lfT10aGlzLndvdC53dFRhYmxlO3RoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy50eXBlPWQsdGhpcy5tYWluVGFibGVTY3JvbGxh'@;
put 'YmxlRWxlbWVudD1udWxsLHRoaXMuVEFCTEU9dix0aGlzLmhpZGVyPU0sdGhpcy5zcHJlYWRlcj1ELHRoaXMuaG9sZGVyPVosdGhpcy53dFJvb3RFbGVtZW50PW5lLHRoaXMudHJpbW1pbmdDb250YWluZXI9b18odGhpcy5oaWRlci5wYXJlbnROb2RlLnBhcmVudE5vZGUpLHRoaXMubmVlZEZ1'@;
put 'bGxSZW5kZXI9dGhpcy5zaG91bGRCZVJlbmRlcmVkKCksdGhpcy5jbG9uZT10aGlzLm1ha2VDbG9uZSgpfWhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpe3JldHVybiB0aGlzLm5lZWRGdWxsUmVuZGVyIT09dGhpcy5zaG91bGRCZVJlbmRlcmVkKCl9dXBkYXRlU3RhdGVPZlJlbmRlcmluZyhs'@;
put 'KXsiYmVmb3JlIj09PWwmJnRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpP3RoaXMubmVlZEZ1bGxSZW5kZXI9ITA6ImFmdGVyIj09PWwmJiF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKSYmKHRoaXMubmVlZEZ1bGxSZW5kZXI9ITEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4hMH11cGRhdGVUcmlt'@;
put 'bWluZ0NvbnRhaW5lcigpe3RoaXMudHJpbW1pbmdDb250YWluZXI9b18odGhpcy5oaWRlci5wYXJlbnROb2RlLnBhcmVudE5vZGUpfXVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpe2NvbnN0e3d0VGFibGU6bH09dGhpcy53b3Qse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5nczt0'@;
put 'aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PSJoaWRkZW4iPT09YS5nZXRDb21wdXRlZFN0eWxlKGwud3RSb290RWxlbWVudC5wYXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpP3RoaXMud290Lnd0VGFibGUuaG9sZGVyOmJFKGwuVEFCTEUpfWdldFJlbGF0aXZl'@;
put 'Q2VsbFBvc2l0aW9uKGwsYSxkKXtpZighMT09PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuY29udGFpbnMobCkpcmV0dXJuIHZvaWQgaWwoYFRoZSBwcm92aWRlZCBlbGVtZW50IGlzIG5vdCBhIGNoaWxkIG9mIHRoZSAke3RoaXMudHlwZX0gb3ZlcmxheWApO2NvbnN0IGg9dGhpcy5tYWlu'@;
put 'VGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyxmPWQ8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iiksdj1hPHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxNPWE+PXRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksRD10aGlzLmNsb25lLnd0VGFibGUuc3ByZWFkZXIsWj17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24oRCksdG9wOkQub2Zmc2V0VG9w'@;
put 'fSxuZT17c3RhcnQ6dGhpcy5nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24obCksdG9wOmwub2Zmc2V0VG9wfTtsZXQgY2U9bnVsbDtyZXR1cm4gY2U9aD90aGlzLmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KHYsZixuZSxaKTp0aGlzLmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9u'@;
put 'V2l0aGluSG9sZGVyKHYsTSxmLG5lLFopLGNlfWdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5pc1J0bCgpP2wub2Zmc2V0UGFyZW50Lm9mZnNldFdpZHRoLWwub2Zmc2V0TGVmdC1sLm9mZnNldFdpZHRoOmwub2Zmc2V0TGVmdH1nZXRSZWxhdGl2ZUNlbGxQb3NpdGlv'@;
put 'bldpdGhpbldpbmRvdyhsLGEsZCxoKXtjb25zdCBmPXRoaXMud290Lnd0VGFibGUud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgdj0wLE09MDtpZihhKXtsZXQgRD1mLmxlZnQ7dGhpcy5pc1J0bCgpJiYoRD10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cuaW5u'@;
put 'ZXJXaWR0aC0oZi5sZWZ0K2Yud2lkdGgraDAoKSkpLHY9RDw9MD8tMSpEOjB9ZWxzZSB2PWguc3RhcnQ7cmV0dXJuIE09bD90aGlzLmNsb25lLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLWYudG9wOmgudG9wLHtzdGFydDpkLnN0YXJ0K3YsdG9wOmQudG9wK019'@;
put 'fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluSG9sZGVyKGwsYSxkLGgsZil7Y29uc3Qgdl9ob3Jpem9udGFsPXRoaXMud290Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksdl92ZXJ0aWNhbD10aGlzLndvdC53dE92ZXJsYXlzLnRvcE92ZXJs'@;
put 'YXkuZ2V0U2Nyb2xsUG9zaXRpb24oKTtsZXQgTT0wLEQ9MDtpZihkfHwoTT12X2hvcml6b250YWwtZi5zdGFydCksYSl7Y29uc3QgWj10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7RD0tMSp0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUuZ2V0'@;
put 'Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wK1oudG9wfWVsc2UgbHx8KEQ9dl92ZXJ0aWNhbC1mLnRvcCk7cmV0dXJue3N0YXJ0Omguc3RhcnQtTSx0b3A6aC50b3AtRH19bWFrZUNsb25lKCl7aWYoLTE9PT1rZmUuaW5kZXhPZih0aGlzLnR5cGUpKXRocm93IG5ldyBFcnJvcihgQ2xvbmUgdHlw'@;
put 'ZSAiJHt0aGlzLnR5cGV9IiBpcyBub3Qgc3VwcG9ydGVkLmApO2NvbnN0e3d0VGFibGU6bCx3dFNldHRpbmdzOmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3MsZj1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHY9ZC5jcmVhdGVFbGVtZW50'@;
put 'KCJ0YWJsZSIpLE09bC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7Zi5jbGFzc05hbWU9YCR7Z0plLmdldCh0aGlzLnR5cGUpfSBoYW5kc29udGFibGVgLGYuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaXNSdGwoKT8icnRsIjoibHRyIiksZi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYu'@;
put 'c3R5bGUudG9wPTAsZi5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIsdGhpcy5pc1J0bCgpP2Yuc3R5bGUucmlnaHQ9MDpmLnN0eWxlLmxlZnQ9MCxhLmdldFNldHRpbmcoImFyaWFUYWdzIikmJnZhKGYsW1sicm9sZSIsInByZXNlbnRhdGlvbiJdXSksdi5jbGFzc05hbWU9bC5UQUJMRS5jbGFz'@;
put 'c05hbWUsbC5UQUJMRS5nZXRBdHRyaWJ1dGUoInJvbGUiKSYmdi5zZXRBdHRyaWJ1dGUoInJvbGUiLGwuVEFCTEUuZ2V0QXR0cmlidXRlKCJyb2xlIikpLGYuYXBwZW5kQ2hpbGQodiksTS5hcHBlbmRDaGlsZChmKTtjb25zdCBaPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50'@;
put 'T3ZlcmZsb3ciKTtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD0hMD09PVp8fCJob3Jpem9udGFsIj09PVomJnRoaXMudHlwZT09PVk3fHwidmVydGljYWwiPT09WiYmdGhpcy50eXBlPT09Rzc/aDoiaGlkZGVuIj09PWguZ2V0Q29tcHV0ZWRTdHlsZShNKS5nZXRQcm9w'@;
put 'ZXJ0eVZhbHVlKCJvdmVyZmxvdyIpP2wuaG9sZGVyOmJFKGwuVEFCTEUpLG5ldyB6SmUodix0aGlzLnd0U2V0dGluZ3Mse3NvdXJjZTp0aGlzLndvdCxvdmVybGF5OnRoaXMsdmlld3BvcnQ6dGhpcy53b3Qud3RWaWV3cG9ydCxldmVudDp0aGlzLndvdC53dEV2ZW50LHNlbGVjdGlvbk1hbmFn'@;
put 'ZXI6dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlcixzdHlsZXNIYW5kbGVyOnRoaXMud290LnN0eWxlc0hhbmRsZXJ9KX1yZWZyZXNoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLm5lZWRGdWxsUmVuZGVyKXtj'@;
put 'b25zdCBhPXRoaXMuY2xvbmUuY2xvbmVTb3VyY2U7YS5hY3RpdmVPdmVybGF5TmFtZT10aGlzLmNsb25lLnd0VGFibGUubmFtZSx0aGlzLmNsb25lLmRyYXcobCksYS5hY3RpdmVPdmVybGF5TmFtZT0ibWFzdGVyIn19cmVzZXQoKXtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXI7'@;
put 'W2wuc3R5bGUsdGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLGwucGFyZW50Tm9kZS5zdHlsZV0uZm9yRWFjaCh2PT57di53aWR0aD0iIix2LmhlaWdodD0iIn0pfWlzUnRsKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIil9ZGVzdHJveSgpe3RoaXMu'@;
put 'Y2xvbmUuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKX19Y29uc3QgZks9Yz0+e2NvbnN0IGw9Yy5zdHlsZXNIYW5kbGVyO2lmKGwuaXNDbGFzc2ljVGhlbWUoKSlyZXR1cm4gT2JqZWN0LmZyZWV6ZSh7d2lkdGg6NixoZWlnaHQ6Nixib3JkZXJXaWR0aDoxLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9y'@;
put 'ZGVyQ29sb3I6IiNGRkYifSk7Y29uc3QgYT1sLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtYXV0b2ZpbGwtc2l6ZSIpLGQ9bC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWF1dG9maWxsLWJvcmRlci13aWR0aCIpLGg9bC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWF1dG9maWxsLWJv'@;
put 'cmRlci1jb2xvciIpO3JldHVybiBPYmplY3QuZnJlZXplKHt3aWR0aDphLGhlaWdodDphLGJvcmRlcldpZHRoOmQsYm9yZGVyU3R5bGU6InNvbGlkIixib3JkZXJDb2xvcjpofSl9O2NsYXNzIEtKZSBleHRlbmRzIFBFe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxZNyxkLGgpLGZ1'@;
put 'bmN0aW9uIFlKZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gR0plKGMpe3ZhciBsPWZ1bmN0aW9uICRKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJk'@;
put 'ZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJu'@;
put 'InN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImNhY2hlZEZpeGVkUm93c1RvcCIsLTEpLHRoaXMuY2FjaGVk'@;
put 'Rml4ZWRSb3dzVG9wPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgd0plKC4uLmEpfXNo'@;
put 'b3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlclRvcE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZighdGhpcy5uZWVkRnVsbFJlbmRlcnx8IXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpfHwhdGhpcy53b3Qud3RUYWJs'@;
put 'ZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBoPTAsZj0h'@;
put 'MTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09YXx8ZCYmInZlcnRpY2FsIj09PWQpaD10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksd0UobCk7ZWxzZXtjb25zdHt3dFRhYmxlOk19PXRoaXMud290LEQ9TS5oaWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtmPU1hdGguY2VpbChELmJv'@;
put 'dHRvbSk9PT1sLm9mZnNldEhlaWdodCxoPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpLE9PKGwsIjBweCIsYCR7aH1weGApfWNvbnN0IHY9dGhpcy5hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24oaCxmKTtyZXR1cm4gdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSx2fXNldFNjcm9sbFBvc2l0'@;
put 'aW9uKGwpe2NvbnN0e3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7bGV0IGg9ITE7aWYoZD09PWEmJmwhPT1hLnNjcm9sbFkpe2NvbnN0IGY9YS5zY3JvbGxZO2Euc2Nyb2xsVG8oUk8oYSksbCksaD1mIT09YS5zY3JvbGxZ'@;
put 'fWVsc2UgaWYobCE9PWQuc2Nyb2xsVG9wKXtjb25zdCBmPWQuc2Nyb2xsVG9wO2Quc2Nyb2xsVG9wPWwsaD1mIT09ZC5zY3JvbGxUb3B9cmV0dXJuIGh9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxIb3Jpem9udGFsbHkiKX1zdW1DZWxsU2l6ZXMobCxh'@;
put 'KXtjb25zdCBkPXRoaXMud290LnN0eWxlc0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBoPWwsZj0wO2Zvcig7aDxhOyl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmdldFJvd0hlaWdodChoKTtmKz12b2lkIDA9PT12P2Q6dixoKz0xfXJldHVybiBmfWFkanVzdEVsZW1lbnRz'@;
put 'U2l6ZSgpe3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSx0aGlzLm5lZWRGdWxsUmVuZGVyJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmll'@;
put 'd3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyx2PXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlz'@;
put 'LnRyaW1taW5nQ29udGFpbmVyIT09aHx8Imhvcml6b250YWwiPT09TSl7bGV0IFo9YS5nZXRXb3Jrc3BhY2VXaWR0aCgpO2EuaGFzVmVydGljYWxTY3JvbGwoKSYmKFotPWgwKGQpKSxaPU1hdGgubWluKFosbC53dFJvb3RFbGVtZW50LnNjcm9sbFdpZHRoKSx2LndpZHRoPWAke1p9cHhgfWVs'@;
put 'c2Ugdi53aWR0aD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLndpZHRoPXYud2lkdGg7bGV0IEQ9TXUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtsLmhhc0RlZmluZWRTaXplKCl8fChEPTApLHYuaGVpZ2h0PWAke0R9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtj'@;
put 'b25zdHtob2xkZXI6bH09dGhpcy5jbG9uZS53dFRhYmxlLGE9ZksodGhpcy53b3QpLGQ9dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRGb2N1c1NlbGVjdGlvbigpP3BhcnNlSW50KGEuaGVpZ2h0LDEwKS8yOjA7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRoaXMu'@;
put 'aGlkZXIuc3R5bGUud2lkdGgsbC5zdHlsZS53aWR0aD1sLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsbC5zdHlsZS5oZWlnaHQ9YCR7cGFyc2VJbnQobC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCwxMCkrZH1weGB9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRp'@;
put 'bmcoInRvdGFsUm93cyIpO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAke3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQ'@;
put 'b3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9dGhpcy5zcHJlYWRlci5zdHlsZS5ib3R0b209IiIsdGhpcy5uZWVkRnVsbFJlbmRl'@;
put 'ciYmdGhpcy5zeW5jT3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgbD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZTthLnN0eWxlW2xdPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5j'@;
put 'b2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtjb25zdHt3b3Q6ZCx3dFNldHRpbmdzOmh9PXRoaXMsdj0oZC5jbG9uZVNvdXJj'@;
put 'ZT9kLmNsb25lU291cmNlOmQpLnd0VGFibGUuaG9sZGVyLE09aC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIiksWj0wPT09aC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSYmTS5sZW5ndGg+MCYmIXBhKHYucGFyZW50Tm9kZSwiaW5uZXJCb3JkZXJUb3AiKT8xOjA7bGV0IG5lPXRoaXMu'@;
put 'Z2V0VGFibGVQYXJlbnRPZmZzZXQoKSxjZT0wO2lmKGEmJnRoaXMud290Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGwpPnRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKSYmKGE9ITEpLGEmJnYub2Zmc2V0SGVpZ2h0IT09di5jbGllbnRIZWlnaHQmJihjZT1oMCh0aGlzLmRv'@;
put 'bUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGEpe2NvbnN0IGJlPWguZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksRWU9aC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtuZSs9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLG5lLT1kLnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKS10'@;
put 'aGlzLnN1bUNlbGxTaXplcyhFZS1iZSxFZSksbmUrPTEsbmUrPVp9ZWxzZSBuZSs9dGhpcy5zdW1DZWxsU2l6ZXMoaC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsKTtyZXR1cm4gbmUrPWNlLFIyZSh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50KT09PW5lLVomJlo+MCYmdGhp'@;
put 'cy53b3Qud3RPdmVybGF5cy5leHBhbmRIaWRlclZlcnRpY2FsbHlCeShaKSx0aGlzLnNldFNjcm9sbFBvc2l0aW9uKG5lKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe3JldHVybiB0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3Ro'@;
put 'aXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIExPKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10'@;
put 'aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lcj09PWwmJighYXx8InZlcnRpY2FsIiE9PWEpKXtjb25zdCB2PXRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQo'@;
put 'KS10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKTtkPU1hdGgubWF4KHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksMCksZD52JiYoZD0wKX1yZXR1cm4gZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7bGV0IGE9YXJn'@;
put 'dW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdHt3dFNldHRpbmdzOmR9PXRoaXMsaD10aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGY9ZC5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSx2PSJob3Jpem9udGFsIj09PWQu'@;
put 'Z2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7Zj9jYShoLCJlbXB0eUNvbHVtbnMiKTpUaShoLCJlbXB0eUNvbHVtbnMiKTtsZXQgTT0hMTtpZighYSYmIXYpe2NvbnN0IEQ9ZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxaPXRoaXMuY2FjaGVkRml4ZWRSb3dzVG9wIT09RCxuZT1k'@;
put 'LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtpZigoWnx8MD09PUQpJiZuZS5sZW5ndGg+MCl7Y29uc3QgY2U9cGEoaCwiaW5uZXJCb3JkZXJUb3AiKTt0aGlzLmNhY2hlZEZpeGVkUm93c1RvcD1kLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGx8fDA9PT1kLmdldFNldHRpbmcoInRv'@;
put 'dGFsUm93cyIpPyhUaShoLCJpbm5lckJvcmRlclRvcCIpLE09IWNlKTooY2EoaCwiaW5uZXJCb3JkZXJUb3AiKSxNPWNlKX19cmV0dXJuIE19fWNvbnN0IEJmZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpO3JldHVybiAwPT09Yz8t'@;
put 'MTp0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktY30sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9'@;
put 'LGdldExhc3RSZW5kZXJlZFJvdygpe3JldHVybiAwPT09dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpPy0xOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xfSxnZXRMYXN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRM'@;
put 'YXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfSxnZXRSZW5kZXJlZFJvd3NDb3VudCgpe3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco'@;
put 'ImZpeGVkUm93c0JvdHRvbSIpKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9LGdldENvbHVtbkhlYWRlcnNDb3VudDooKT0+MH07VHAoQmZlLCJNSVhJTl9OQU1FIiwic3RpY2t5Um93c0JvdHRvbSIse3dyaXRhYmxlOiExLGVudW1l'@;
put 'cmFibGU6ITF9KTtjb25zdCBqZmU9QmZlO2NsYXNzIHBLIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxJcCl9fVRsKHBLLGpmZSksVGwocEssc0spO2NvbnN0IFhKZT1wSztjbGFzcyB0UWUgZXh0ZW5kcyBQRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBl'@;
put 'cihsLGEsSXAsZCxoKSxmdW5jdGlvbiBKSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFFKZShjKXt2YXIgbD1mdW5jdGlvbiBlUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg'@;
put 'ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs'@;
put 'InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhlZFJvd3NCb3R0'@;
put 'b20iLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tk'@;
put 'XTtyZXR1cm4gbmV3IFhKZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJl'@;
put 'UmVuZGVyZWQoKXx8IXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2Euc3R5bGUudG9wPSIiO2xldCBkPTA7Y29uc3QgaD10'@;
put 'aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWx8fGgmJiJ2ZXJ0aWNhbCI9PT1oPyhkPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCkpOihkPXRoaXMuZ2V0T3ZlcmxheU9m'@;
put 'ZnNldCgpLGEuc3R5bGUuYm90dG9tPWAke2R9cHhgKTtjb25zdCBmPXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGQpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLGZ9cmVwb3NpdGlvbk92ZXJsYXkoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlz'@;
put 'LndvdCx7cm9vdERvY3VtZW50OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7bGV0IGY9MDthLmhhc1ZlcnRpY2FsU2Nyb2xsKCl8fChmKz1hLmdldFdvcmtzcGFjZUhlaWdodCgpLWwuZ2V0VG90YWxIZWlnaHQoKSksYS5oYXNWZXJ0'@;
put 'aWNhbFNjcm9sbCgpJiZhLmhhc0hvcml6b250YWxTY3JvbGwoKSYmKGYrPWgwKGQpKSxoLnN0eWxlLmJvdHRvbT1gJHtmfXB4YH1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3MsZD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50'@;
put 'O2xldCBoPSExO2lmKGQ9PT1hJiZsIT09YS5zY3JvbGxZKXtjb25zdCBmPWEuc2Nyb2xsWTthLnNjcm9sbFRvKFJPKGEpLHRvcCksaD1mIT09YS5zY3JvbGxZfWVsc2UgaWYobCE9PWQuc2Nyb2xsVG9wKXtjb25zdCBmPWQuc2Nyb2xsVG9wO2Quc2Nyb2xsVG9wPWwsaD1mIT09ZC5zY3JvbGxU'@;
put 'b3B9cmV0dXJuIGh9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxIb3Jpem9udGFsbHkiKX1zdW1DZWxsU2l6ZXMobCxhKXtjb25zdHt3dFRhYmxlOmQsc3R5bGVzSGFuZGxlcjpofT10aGlzLndvdCxmPWguZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCB2'@;
put 'PWwsTT0wO2Zvcig7djxhOyl7Y29uc3QgRD1kLmdldFJvd0hlaWdodCh2KTtNKz12b2lkIDA9PT1EP2Y6RCx2Kz0xfXJldHVybiBNfWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSx0aGlzLm5lZWRGdWxsUmVuZGVyJiYodGhpcy5hZGp1c3RSb290'@;
put 'RWxlbWVudFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyx2PXRoaXMuY2xv'@;
put 'bmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aHx8Imhvcml6b250YWwiPT09TSl7bGV0IFo9YS5nZXRXb3Jrc3BhY2VXaWR0aCgpO2EuaGFz'@;
put 'VmVydGljYWxTY3JvbGwoKSYmKFotPWgwKGQpKSxaPU1hdGgubWluKFosbC53dFJvb3RFbGVtZW50LnNjcm9sbFdpZHRoKSx2LndpZHRoPWAke1p9cHhgfWVsc2Ugdi53aWR0aD0iIjt0aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnN0eWxlLndpZHRoPXYud2lkdGg7bGV0IEQ9TXUodGhpcy5j'@;
put 'bG9uZS53dFRhYmxlLlRBQkxFKTtsLmhhc0RlZmluZWRTaXplKCl8fChEPTApLHYuaGVpZ2h0PWAke0R9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6bH09dGhpcy5jbG9uZS53dFRhYmxlO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53aWR0aD10aGlz'@;
put 'LmhpZGVyLnN0eWxlLndpZHRoLGwuc3R5bGUud2lkdGg9bC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGwuc3R5bGUuaGVpZ2h0PWwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHR9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpO2lmKCJu'@;
put 'dW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGUudG9wPWAke3RoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigw'@;
put 'IT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2YWx1ZSBvZiB0aGUgcm93c1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD0iMCJ9dGhpcy5zcHJlYWRlci5zdHlsZS5ib3R0b209IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5jT3ZlcmxheU9m'@;
put 'ZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7Y29uc3QgbD10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCIse3NwcmVhZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZTthLnN0eWxlW2xdPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRv'@;
put 'ci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtsZXQgZD10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCk7Y29uc3QgZj0odGhpcy53b3QuY2xvbmVTb3VyY2U/dGhp'@;
put 'cy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyO2xldCB2PTA7YSYmZi5vZmZzZXRIZWlnaHQhPT1mLmNsaWVudEhlaWdodCYmKHY9aDAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhPyhkKz10aGlzLnN1bUNlbGxTaXplcygwLGwrMSksZC09dGhpcy53'@;
put 'b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydEhlaWdodCgpLGQrPTEpOmQrPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxsKSxkKz12LHRoaXMuc2V0U2Nyb2xsUG9zaXRpb24oZCl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXty'@;
put 'ZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBMTyh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50'@;
put 'LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO2lmKHRoaXMudHJpbW1pbmdDb250YWlu'@;
put 'ZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3QgaD10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksdj1oLXRoaXMuY2xvbmUud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLE09dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVu'@;
put 'dEhlaWdodDtkPU1hdGgubWF4KHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktTStoLDApLGQ+diYmKGQ9MCl9cmV0dXJuIGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2NvbnN0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco'@;
put 'ImZpeGVkUm93c0JvdHRvbSIpLGQ9dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b20hPT1hLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKTtsZXQgZj0hMTtpZigoZHx8MD09PWEpJiZoLmxlbmd0aD4wKXtjb25zdCB2PXRoaXMud290Lnd0VGFibGUuaG9sZGVy'@;
put 'LnBhcmVudE5vZGUsTT1wYSh2LCJpbm5lckJvcmRlckJvdHRvbSIpO3RoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxsfHwwPT09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPyhUaSh2'@;
put 'LCJpbm5lckJvcmRlckJvdHRvbSIpLGY9IU0pOihjYSh2LCJpbm5lckJvcmRlckJvdHRvbSIpLGY9TSl9cmV0dXJuIGZ9fWNvbnN0IHpmZT17Z2V0Rmlyc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93UmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1j'@;
put 'Py0xOmN9LGdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Um93VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dQ'@;
put 'YXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRSb3dSZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFj'@;
put 'Y2Vzc09iamVjdC5lbmRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1BhcnRpYWxseVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldFJlbmRlcmVkUm93'@;
put 'c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NSZW5kZXJlZH0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRSb3dzVmlzaWJsZX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0'@;
put 'YUFjY2Vzc09iamVjdC5jb2x1bW5IZWFkZXJzLmxlbmd0aH19O1RwKHpmZSwiTUlYSU5fTkFNRSIsImNhbGN1bGF0ZWRSb3dzIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IFVmZT16ZmUsWmZlPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7cmV0dXJuIDA9PT10aGlzLmdl'@;
put 'dFJlbmRlcmVkQ29sdW1uc0NvdW50KCk/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl9LGdl'@;
put 'dExhc3RSZW5kZXJlZENvbHVtbigpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCktMX0sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhp'@;
put 'cy5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX0sZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKXtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpKX0sZ2V0'@;
put 'VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl9LGdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm93SGVhZGVycy5sZW5ndGh9fTtUcChaZmUsIk1JWElOX05BTUUiLCJzdGlja3lDb2x1bW5z'@;
put 'U3RhcnQiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgZ0s9WmZlO2NsYXNzIG1LIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxHNyl9fVRsKG1LLFVmZSksVGwobUssZ0spO2NvbnN0IGlRZT1tSztjbGFzcyBvUWUgZXh0ZW5kcyBQRXtj'@;
put 'b25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsRzcsZCxoKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgaVFlKC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXty'@;
put 'ZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3d0VGFibGU6bH09dGhpcy53b3Q7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8'@;
put 'IWwuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBmPTA7dGhp'@;
put 'cy50cmltbWluZ0NvbnRhaW5lciE9PWF8fGgmJiJob3Jpem9udGFsIj09PWg/KGY9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLHdFKGQpKTooZj10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpLE9PKGQsYCR7Zn1weGAsIjBweCIpKTtjb25zdCB2PXRoaXMuYWRq'@;
put 'dXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHZ9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2xldCBkPSExO3RoaXMuaXNSdGwoKSYmKGw9LWwpO2NvbnN0IGg9dGhpcy5t'@;
put 'YWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDtpZihoPT09YSYmbCE9PWEuc2Nyb2xsWCl7Y29uc3QgZj1hLnNjcm9sbFg7YS5zY3JvbGxUbyhsLG0kKGEpKSxkPWYhPT1hLnNjcm9sbFh9ZWxzZSBpZihsIT09aC5zY3JvbGxMZWZ0KXtjb25zdCBmPWguc2Nyb2xsTGVmdDtoLnNjcm9sbExlZnQ9'@;
put 'bCxkPWYhPT1oLnNjcm9sbExlZnR9cmV0dXJuIGR9b25TY3JvbGwoKXt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25TY3JvbGxWZXJ0aWNhbGx5Iil9c3VtQ2VsbFNpemVzKGwsYSl7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7'@;
put 'bGV0IGg9bCxmPTA7Zm9yKDtoPGE7KWYrPXRoaXMud290Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgoaCl8fGQsaCs9MTtyZXR1cm4gZn1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9v'@;
put 'dEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3Msdj10aGlzLmNs'@;
put 'b25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8fCJ2ZXJ0aWNhbCI9PT1NKXtsZXQgWj1hLmdldFdvcmtzcGFjZUhlaWdodCgpO2EuaGFz'@;
put 'SG9yaXpvbnRhbFNjcm9sbCgpJiYoWi09aDAoZCkpLFo9TWF0aC5taW4oWixsLnd0Um9vdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KSx2LmhlaWdodD1gJHtafXB4YH1lbHNlIHYuaGVpZ2h0PSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUuaGVpZ2h0PXYuaGVpZ2h0O2NvbnN0IEQ9'@;
put 'YXUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTt2LndpZHRoPWAke0R9cHhgfWFkanVzdFJvb3RDaGlsZHJlblNpemUoKXtjb25zdHtob2xkZXI6bH09dGhpcy5jbG9uZS53dFRhYmxlLGE9ZksodGhpcy53b3QpLGQ9dGhpcy53b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRGb2N1c1NlbGVjdGlv'@;
put 'bigpP3BhcnNlSW50KGEud2lkdGgsMTApLzI6MDt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUuaGVpZ2h0PXRoaXMuaGlkZXIuc3R5bGUuaGVpZ2h0LGwuc3R5bGUuaGVpZ2h0PWwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsbC5zdHlsZS53aWR0aD1gJHtwYXJzZUludChsLnBhcmVu'@;
put 'dE5vZGUuc3R5bGUud2lkdGgsMTApK2R9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxhPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0IjtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQuY29s'@;
put 'dW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPWAke3RoaXMud290Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA7ZWxzZXtpZigwIT09bCl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCB2'@;
put 'YWx1ZSBvZiB0aGUgY29sdW1uc1JlbmRlckNhbGN1bGF0b3IiKTt0aGlzLnNwcmVhZGVyLnN0eWxlW2FdPSIwIn10aGlzLmlzUnRsKCk/dGhpcy5zcHJlYWRlci5zdHlsZS5sZWZ0PSIiOnRoaXMuc3ByZWFkZXIuc3R5bGUucmlnaHQ9IiIsdGhpcy5uZWVkRnVsbFJlbmRlciYmdGhpcy5zeW5j'@;
put 'T3ZlcmxheU9mZnNldCgpfXN5bmNPdmVybGF5T2Zmc2V0KCl7dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLnN0eWxlLnRvcD0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdw'@;
put 'b3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7Y29uc3R7d3RTZXR0aW5nczpkfT10aGlzLGg9ZC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksZj1kLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksTT0odGhpcy53b3QuY2xv'@;
put 'bmVTb3VyY2U/dGhpcy53b3QuY2xvbmVTb3VyY2U6dGhpcy53b3QpLnd0VGFibGUuaG9sZGVyLEQ9MD09PWYmJmgubGVuZ3RoPjAmJiFwYShNLnBhcmVudE5vZGUsImlubmVyQm9yZGVySW5saW5lU3RhcnQiKT8xOjA7bGV0IFo9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLG5lPTA7cmV0'@;
put 'dXJuIGEmJnRoaXMud290Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgobCk+dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCkmJihhPSExKSxhJiZNLm9mZnNldFdpZHRoIT09TS5jbGllbnRXaWR0aCYmKG5lPWgwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYT8o'@;
put 'Wis9dGhpcy5zdW1DZWxsU2l6ZXMoMCxsKzEpLFotPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRXaWR0aCgpLForPUQpOlorPXRoaXMuc3VtQ2VsbFNpemVzKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLGwpLForPW5lLEwyZSh0aGlzLm1h'@;
put 'aW5UYWJsZVNjcm9sbGFibGVFbGVtZW50KT09PVotRCYmRD4wJiZ0aGlzLndvdC53dE92ZXJsYXlzLmV4cGFuZEhpZGVySG9yaXpvbnRhbGx5QnkoRCksdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihaKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe2xldCBhPTA7cmV0dXJuIXRoaXMud3RTZXR0aW5n'@;
put 'cy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKSYmdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyYmKGE9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQubGVmdCksYX1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBNYXRoLmFicyh2'@;
put 'JCh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdykpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93'@;
put 'Iik7bGV0IGQ9MDtyZXR1cm4gdGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWx8fGEmJiJob3Jpem9udGFsIj09PWF8fChkPXRoaXMuaXNSdGwoKT9NYXRoLmFicyhNYXRoLm1pbih0aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLDApKTpNYXRoLm1h'@;
put 'eCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbFdpZHRoKCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsV2lkdGgoKSYmKGQ9MCkpLGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9u'@;
put 'KGwpe2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyxkPXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUsaD1hLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSxmPWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSx2PWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksTT0idmVy'@;
put 'dGljYWwiPT09YS5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTt2P2NhKGQsImVtcHR5Um93cyIpOlRpKGQsImVtcHR5Um93cyIpO2xldCBEPSExO2lmKCFNKWlmKGYmJiFoLmxlbmd0aClUaShkLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2Vsc2UgaWYo'@;
put 'IWYmJmgubGVuZ3RoKXtjb25zdCBaPXBhKGQsImlubmVyQm9yZGVySW5saW5lU3RhcnQiKTtsPyhUaShkLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLEQ9IVopOihjYShkLCJpbm5lckJvcmRlckxlZnQgaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpLEQ9Wil9cmV0'@;
put 'dXJuIER9fWNsYXNzIHZLIGV4dGVuZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCwkNyl9fVRsKHZLLElmZSksVGwodkssZ0spO2NvbnN0IGFRZT12SztmdW5jdGlvbiBXZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHNRZShjKXt2YXIgbD1mdW5jdGlvbiBsUWUo'@;
put 'YyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJA'@;
put 'QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7'@;
put 'dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGNRZSBleHRlbmRzIFBFe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtzdXBlcihsLGEsJDcsZCxoKSxXZmUodGhpcywidG9wT3ZlcmxheSIsdm9pZCAwKSxXZmUodGhpcywi'@;
put 'aW5saW5lU3RhcnRPdmVybGF5Iix2b2lkIDApLHRoaXMudG9wT3ZlcmxheT1mLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PXZ9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4g'@;
put 'bmV3IGFRZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5IikmJnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXkiKX1yZXNldEZpeGVk'@;
put 'UG9zaXRpb24oKXtpZih0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksIXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7dGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMu'@;
put 'ZG9tQmluZGluZ3Mucm9vdFdpbmRvdz9PTyhsLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpKyJweCIsYCR7dGhpcy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKX1weGApOndFKGwpO2xldCBhPU11KHRoaXMuY2xvbmUu'@;
put 'd3RUYWJsZS5UQUJMRSk7Y29uc3QgZD1hdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3JldHVybiB0aGlzLndvdC53dFRhYmxlLmhhc0RlZmluZWRTaXplKCl8fChhPTApLGwuc3R5bGUuaGVpZ2h0PWAke2F9cHhgLGwuc3R5bGUud2lkdGg9YCR7ZH1weGAsITF9fWNsYXNzIGJLIGV4dGVu'@;
put 'ZHMgbV97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxWbSl9fVRsKGJLLGpmZSksVGwoYkssZ0spO2NvbnN0IHVRZT1iSztjbGFzcyBkUWUgZXh0ZW5kcyBQRXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCxhLFZtLGQsaCksdGhpcy5ib3R0b21PdmVybGF5PWYs'@;
put 'dGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9dn1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgdVFlKC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53'@;
put 'dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3dvdDpsfT10aGlzO2lmKHRoaXMudXBkYXRl'@;
put 'VHJpbW1pbmdDb250YWluZXIoKSwhbC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2lmKGEuc3R5bGUudG9wPSIiLHRoaXMudHJpbW1pbmdDb250YWluZXI9PT10aGlzLmRvbUJpbmRpbmdzLnJv'@;
put 'b3RXaW5kb3cpe2NvbnN0IGY9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpLHY9dGhpcy5ib3R0b21PdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKTthLnN0eWxlW3RoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7Zn1weGAsYS5zdHlsZS5ib3R0b209YCR7'@;
put 'dn1weGB9ZWxzZSB3RShhKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCk7bGV0IGQ9TXUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBoPWF1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KGQ9MCksYS5z'@;
put 'dHlsZS5oZWlnaHQ9YCR7ZH1weGAsYS5zdHlsZS53aWR0aD1gJHtofXB4YCwhMX1yZXBvc2l0aW9uT3ZlcmxheSgpe2NvbnN0e3d0VGFibGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xk'@;
put 'ZXIucGFyZW50Tm9kZTtsZXQgZj0wO2EuaGFzVmVydGljYWxTY3JvbGwoKXx8KGYrPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCktbC5nZXRUb3RhbEhlaWdodCgpKSxhLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJmEuaGFzSG9yaXpvbnRhbFNjcm9sbCgpJiYoZis9aDAoZCkpLGguc3R5bGUuYm90dG9t'@;
put 'PWAke2Z9cHhgfX1mdW5jdGlvbiBpUChjLGwsYSl7KGZ1bmN0aW9uIGhRZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9'@;
put 'ZnVuY3Rpb24geWcoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGZRZShjKXt2YXIgbD1mdW5jdGlvbiBwUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwi'@;
put 'ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy'@;
put 'biJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEs3KGMsbCxhKXtyZXR1cm4gYy5zZXQoWWZlKGMsbCks'@;
put 'YSksYX1mdW5jdGlvbiBfZyhjLGwpe3JldHVybiBjLmdldChZZmUoYyxsKSl9ZnVuY3Rpb24gWWZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVs'@;
put 'ZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgYl89bmV3IFdlYWtNYXAsb1A9bmV3IFdlYWtNYXAseV89bmV3IFdlYWtNYXAsYVA9bmV3IFdlYWtNYXA7Y29uc3QgbVFlPWNsYXNzIGdRZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7eWcodGhpcywid290IixudWxs'@;
put 'KSxpUCh0aGlzLGJfLFtdKSx5Zyh0aGlzLCJ0b3BPdmVybGF5IixudWxsKSx5Zyh0aGlzLCJib3R0b21PdmVybGF5IixudWxsKSx5Zyh0aGlzLCJpbmxpbmVTdGFydE92ZXJsYXkiLG51bGwpLHlnKHRoaXMsInRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSIsbnVsbCkseWcodGhpcywiYm90'@;
put 'dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSx5Zyh0aGlzLCJicm93c2VyTGluZUhlaWdodCIsdm9pZCAwKSx5Zyh0aGlzLCJ3dFNldHRpbmdzIixudWxsKSxpUCh0aGlzLG9QLCExKSxpUCh0aGlzLHlfLDApLGlQKHRoaXMsYVAsbnVsbCkseWcodGhpcywicmVzaXplT2JzZXJ2'@;
put 'ZXIiLG5ldyBSZXNpemVPYnNlcnZlcihuZT0+e3hFKCgpPT57IUFycmF5LmlzQXJyYXkobmUpfHwhbmUubGVuZ3RofHwoSzcoeV8sdGhpcyxfZyh5Xyx0aGlzKSsxKSwxMDA9PT1fZyh5Xyx0aGlzKSYmKGlsKCJUaGUgUmVzaXplT2JzZXJ2ZXIgY2FsbGJhY2sgd2FzIGZpcmVkIHRvbyBtYW55'@;
put 'IHRpbWVzIGluIGRpcmVjdCBzdWNjZXNzaW9uLlxuVGhpcyBtYXkgYmUgZHVlIHRvIGFuIGluZmluaXRlIGxvb3AgY2F1c2VkIGJ5IHNldHRpbmcgYSBkeW5hbWljIGhlaWdodC93aWR0aCAoZm9yIGV4YW1wbGUsIHdpdGggdGhlIGBkdmhgIHVuaXRzKSB0byBhIEhhbmRzb250YWJsZSBjb250'@;
put 'YWluZXIncyBwYXJlbnQuIFxuVGhlIG9ic2VydmVyIHdpbGwgYmUgZGlzY29ubmVjdGVkLiIpLHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpKSxudWxsIT09X2coYVAsdGhpcykmJmNsZWFyVGltZW91dChfZyhhUCx0aGlzKSksSzcoYVAsdGhpcyxzZXRUaW1lb3V0KCgpPT57Szco'@;
put 'eV8sdGhpcywwKX0sMTAwKSksdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZSIpKX0pfSkpLHRoaXMud290PWwsdGhpcy53dFNldHRpbmdzPWgsdGhpcy5kb21CaW5kaW5ncz1kLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFRhYmxlPXY7Y29u'@;
put 'c3R7cm9vdERvY3VtZW50Ok0scm9vdFdpbmRvdzpEfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5ldmVudE1hbmFnZXI9Zix0aGlzLnNjcm9sbGJhclNpemU9aDAoTSk7Y29uc3QgWj0iaGlkZGVuIj09PUQuZ2V0Q29tcHV0ZWRTdHlsZSh2Lnd0Um9vdEVs'@;
put 'ZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKTt0aGlzLnNjcm9sbGFibGVFbGVtZW50PVo/di5ob2xkZXI6YkUodi5UQUJMRSksdGhpcy5pbml0T3ZlcmxheXMoKSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmtleVByZXNzZWQ9ITEsdGhpcy5zcHJlYWRlckxh'@;
put 'c3RTaXplPXt3aWR0aDpudWxsLGhlaWdodDpudWxsfSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0hMSx0aGlzLmluaXRCcm93c2VyTGluZUhlaWdodCgpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSx0aGlzLmxhc3RTY3JvbGxYPUQuc2Nyb2xs'@;
put 'WCx0aGlzLmxhc3RTY3JvbGxZPUQuc2Nyb2xsWX1nZXRPdmVybGF5cygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgYT1bLi4uX2coYl8sdGhpcyldO3JldHVybiBsJiZhLnB1c2godGhpcy53dFRhYmxlKSxhfWlu'@;
put 'aXRCcm93c2VyTGluZUhlaWdodCgpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RG9jdW1lbnQ6YX09dGhpcy5kb21CaW5kaW5ncyxkPWwuZ2V0Q29tcHV0ZWRTdHlsZShhLmJvZHkpLGg9cGFyc2VJbnQoZC5saW5lSGVpZ2h0LDEwKSxmPTEuMipwYXJzZUludChkLmZvbnRTaXplLDEwKTt0aGlz'@;
put 'LmJyb3dzZXJMaW5lSGVpZ2h0PWh8fGZ9aW5pdE92ZXJsYXlzKCl7Y29uc3QgbD1bdGhpcy53b3QsdGhpcy5mYWNhZGVHZXR0ZXIsdGhpcy53dFNldHRpbmdzLHRoaXMuZG9tQmluZGluZ3NdO3RoaXMudG9wT3ZlcmxheT1uZXcgS0plKC4uLmwpLHRoaXMuYm90dG9tT3ZlcmxheT1uZXcgdFFl'@;
put 'KC4uLmwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5PW5ldyBvUWUoLi4ubCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk9bmV3IGNRZSguLi5sLHRoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJs'@;
put 'YXk9bmV3IGRRZSguLi5sLHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSksSzcoYl8sdGhpcyxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0'@;
put 'aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0pfWJlZm9yZURyYXcoKXtLNyhvUCx0aGlzLF9nKGJfLHRoaXMpLnJlZHVjZSgobCxhKT0+YS5oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKXx8bCwhMSkpLF9nKGJfLHRoaXMpLmZvckVhY2gobD0+bC51cGRhdGVTdGF0ZU9mUmVu'@;
put 'ZGVyaW5nKCJiZWZvcmUiKSl9YWZ0ZXJEcmF3KCl7dGhpcy5zeW5jU2Nyb2xsV2l0aE1hc3RlcigpLF9nKGJfLHRoaXMpLmZvckVhY2gobD0+e2NvbnN0IGE9bC5oYXNSZW5kZXJpbmdTdGF0ZUNoYW5nZWQoKTtsLnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoImFmdGVyIiksYSYmIWwubmVlZEZ1'@;
put 'bGxSZW5kZXImJmwucmVzZXQoKX0pfXJlZnJlc2hBbGwoKXtpZih0aGlzLndvdC5kcmF3bil7aWYoIXRoaXMud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4gdm9pZCB0aGlzLmRlc3Ryb3koKTt0aGlzLndvdC5kcmF3KCEwKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiZ0aGlzLmlu'@;
put 'bGluZVN0YXJ0T3ZlcmxheS5vblNjcm9sbCgpLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyYmdGhpcy50b3BPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz0hMSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmc9ITF9fXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9v'@;
put 'dERvY3VtZW50Omwscm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpkfT10aGlzLnRvcE92ZXJsYXkse21haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50Omh9PXRoaXMuaW5saW5lU3RhcnRPdmVybGF5O3RoaXMuZXZlbnRNYW5hZ2VyLmFk'@;
put 'ZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudEVsZW1lbnQsImtleWRvd24iLGNlPT50aGlzLm9uS2V5RG93bihjZSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudEVsZW1lbnQsImtleXVwIiwoKT0+dGhpcy5vbktleVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2Vy'@;
put 'LmFkZEV2ZW50TGlzdGVuZXIobCwidmlzaWJpbGl0eWNoYW5nZSIsKCk9PnRoaXMub25LZXlVcCgpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGQsInNjcm9sbCIsY2U9PnRoaXMub25UYWJsZVNjcm9sbChjZSkse3Bhc3NpdmU6ITB9KSxkIT09aCYmdGhpcy5ldmVudE1h'@;
put 'bmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJzY3JvbGwiLGNlPT50aGlzLm9uVGFibGVTY3JvbGwoY2UpLHtwYXNzaXZlOiEwfSk7Y29uc3QgZj1hLmRldmljZVBpeGVsUmF0aW8mJmEuZGV2aWNlUGl4ZWxSYXRpbz4xLHY9dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWEsTT10aGlzLnd0U2V0'@;
put 'dGluZ3MuZ2V0U2V0dGluZygicHJldmVudFdoZWVsIiksRD17cGFzc2l2ZTp2fTtsZXQgbmU7KE18fGZ8fCFrJCgpKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUud3RSb290RWxlbWVudCwid2hlZWwiLGNlPT50aGlzLm9uQ2xvbmVXaGVlbChjZSxN'@;
put 'KSxEKSxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0uZm9yRWFjaChjZT0+e3RoaXMuZXZlbnRNYW5hZ2Vy'@;
put 'LmFkZEV2ZW50TGlzdGVuZXIoY2UuY2xvbmUud3RUYWJsZS5ob2xkZXIsIndoZWVsIixiZT0+dGhpcy5vbkNsb25lV2hlZWwoYmUsTSksRCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInJlc2l6ZSIsKCk9Pnt4RSgoKT0+e2NsZWFyVGltZW91dChuZSksdGhpcy53'@;
put 'dFNldHRpbmdzLmdldFNldHRpbmcoIm9uV2luZG93UmVzaXplIiksbmU9c2V0VGltZW91dCgoKT0+e0s3KHlfLHRoaXMsMCl9LDIwMCl9KX0pLHZ8fHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnRFbGVtZW50KX1vblRhYmxlU2Ny'@;
put 'b2xsKGwpe2NvbnN0IGE9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGQ9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsaD10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsZj1sLnRhcmdldDt0aGlzLmtleVByZXNz'@;
put 'ZWQmJihoIT09YSYmZiE9PWEmJiFsLnRhcmdldC5jb250YWlucyhoKXx8ZCE9PWEmJmYhPT1hJiYhbC50YXJnZXQuY29udGFpbnMoZCkpfHx0aGlzLnN5bmNTY3JvbGxQb3NpdGlvbnMobCl9b25DbG9uZVdoZWVsKGwsYSl7Y29uc3R7cm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9'@;
put 'dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsZj10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdj1sLnRhcmdldCxNPWYhPT1kJiZ2IT09ZCYmIXYuY29udGFpbnMoZiksRD1oIT09ZCYmdiE9PWQmJiF2LmNvbnRhaW5z'@;
put 'KGgpO2lmKHRoaXMua2V5UHJlc3NlZCYmKE18fEQpfHx0aGlzLnNjcm9sbGFibGVFbGVtZW50PT09ZClyZXR1cm47Y29uc3QgWj10aGlzLnRyYW5zbGF0ZU1vdXNlV2hlZWxUb1Njcm9sbChsKTsoYXx8dGhpcy5zY3JvbGxhYmxlRWxlbWVudCE9PWQmJlopJiZsLnByZXZlbnREZWZhdWx0KCl9'@;
put 'b25LZXlEb3duKGwpe3RoaXMua2V5UHJlc3NlZD11XyhsLmtleUNvZGUsIkFSUk9XX1VQfEFSUk9XX1JJR0hUfEFSUk9XX0RPV058QVJST1dfTEVGVCIpfW9uS2V5VXAoKXt0aGlzLmtleVByZXNzZWQ9ITF9dHJhbnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGwpe2xldCBhPWlzTmFOKGwuZGVs'@;
put 'dGFZKT8tMSpsLndoZWVsRGVsdGFZOmwuZGVsdGFZLGQ9aXNOYU4obC5kZWx0YVgpPy0xKmwud2hlZWxEZWx0YVg6bC5kZWx0YVg7MT09PWwuZGVsdGFNb2RlJiYoZCs9ZCp0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0LGErPWEqdGhpcy5icm93c2VyTGluZUhlaWdodCk7Y29uc3QgaD10aGlzLnNj'@;
put 'cm9sbFZlcnRpY2FsbHkoYSksZj10aGlzLnNjcm9sbEhvcml6b250YWxseShkKTtyZXR1cm4gaHx8Zn1zY3JvbGxWZXJ0aWNhbGx5KGwpe2NvbnN0IGE9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A7cmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wKz1sLGEh'@;
put 'PT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcH1zY3JvbGxIb3Jpem9udGFsbHkobCl7Y29uc3QgYT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQ7cmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdCs9bCxhIT09dGhpcy5zY3JvbGxhYmxlRWxl'@;
put 'bWVudC5zY3JvbGxMZWZ0fXN5bmNTY3JvbGxQb3NpdGlvbnMoKXtpZih0aGlzLmRlc3Ryb3llZClyZXR1cm47Y29uc3QgbD10aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIsYT10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjtsZXQgZD10aGlz'@;
put 'LnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQsaD10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcDtpZih0aGlzLndvdC53dFZpZXdwb3J0LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJihkPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsWCksdGhpcy53'@;
put 'b3Qud3RWaWV3cG9ydC5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSYmKGg9dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxZKSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmc9dGhpcy5sYXN0U2Nyb2xsWCE9PWQsdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz10aGlzLmxhc3RTY3Jv'@;
put 'bGxZIT09aCx0aGlzLmxhc3RTY3JvbGxYPWQsdGhpcy5sYXN0U2Nyb2xsWT1oLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyl7bC5zY3JvbGxMZWZ0PWQ7Y29uc3QgZj10aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXI/dGhpcy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuaG9s'@;
put 'ZGVyOm51bGw7ZiYmKGYuc2Nyb2xsTGVmdD1kKX10aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiYoYS5zY3JvbGxUb3A9aCksdGhpcy5yZWZyZXNoQWxsKCl9c3luY1Njcm9sbFdpdGhNYXN0ZXIoKXtpZighX2cob1AsdGhpcykpcmV0dXJuO2NvbnN0IGw9dGhpcy50b3BPdmVybGF5Lm1haW5UYWJs'@;
put 'ZVNjcm9sbGFibGVFbGVtZW50LHtzY3JvbGxMZWZ0OmEsc2Nyb2xsVG9wOmR9PWw7dGhpcy50b3BPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9YSksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVy'@;
put 'JiYodGhpcy5ib3R0b21PdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLnNjcm9sbExlZnQ9YSksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxUb3A9ZCksSzcob1AsdGhp'@;
put 'cywhMSl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyRXZlbnRzKCEwKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKSx0aGlzLnRvcE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVt'@;
put 'ZW50KCksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmJvdHRvbU92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCk7Y29uc3R7d3RUYWJsZTpsfT10aGlzLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5zY3JvbGxhYmxlRWxlbWVu'@;
put 'dD0iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShsLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT9sLmhvbGRlcjpiRShsLlRBQkxFKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCl9ZGVzdHJveSgpe3RoaXMucmVzaXplT2JzZXJ2ZXIu'@;
put 'ZGlzY29ubmVjdCgpLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLnRvcE92ZXJsYXkuZGVzdHJveSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LmRlc3Ryb3koKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5kZXN0cm95KCksdGhpcy50b3BJ'@;
put 'bmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tSW5saW5l'@;
put 'U3RhcnRDb3JuZXJPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmRlc3Ryb3llZD0hMH1yZWZyZXNoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLnVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKSYmdGhpcy5hZGp1c3RFbGVt'@;
put 'ZW50c1NpemUoKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnJlZnJlc2gobCksdGhpcy50b3BPdmVybGF5LnJlZnJlc2gobCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRo'@;
put 'aXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJlc2gobCksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZWZyZXNo'@;
put 'KGwpfXVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKXtjb25zdCBsPXRoaXMud3RUYWJsZS5zcHJlYWRlcixhPWwuY2xpZW50V2lkdGgsZD1sLmNsaWVudEhlaWdodCxoPWEhPT10aGlzLnNwcmVhZGVyTGFzdFNpemUud2lkdGh8fGQhPT10aGlzLnNwcmVhZGVyTGFzdFNpemUuaGVpZ2h0O3JldHVy'@;
put 'biBoJiYodGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRoPWEsdGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodD1kKSxofWFkanVzdEVsZW1lbnRzU2l6ZSgpe2NvbnN0e3d0Vmlld3BvcnQ6bH09dGhpcy53b3Qse3d0VGFibGU6YX09dGhpcyx7cm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRp'@;
put 'bmdzLGg9dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWQsZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksTT1sLmdldFJvd0hlYWRlcldpZHRoKCksWj1sLmdldENvbHVtbkhlYWRlckhl'@;
put 'aWdodCgpK3RoaXMudG9wT3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCx2KSsxLG5lPU0rdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsZiksYmU9YS5oaWRlci5zdHlsZSxxZT0oKCk9PiFoJiZ0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcD5NYXRoLm1heCgwLFot'@;
put 'YS5ob2xkZXIuY2xpZW50SGVpZ2h0KSkoKT8xOjAscnQ9KCgpPT4haCYmdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0Pk1hdGgubWF4KDAsbmUtYS5ob2xkZXIuY2xpZW50V2lkdGgpKSgpPzE6MDtiZS53aWR0aD1gJHtuZStydH1weGAsYmUuaGVpZ2h0PWAke1orcWV9cHhgLHRo'@;
put 'aXMudG9wT3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmJvdHRvbU92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKCl9ZXhwYW5kSGlkZXJWZXJ0aWNhbGx5QnkobCl7Y29uc3R7d3RUYWJsZTphfT10'@;
put 'aGlzO2EuaGlkZXIuc3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KGEuaGlkZXIuc3R5bGUuaGVpZ2h0LDEwKStsfXB4YH1leHBhbmRIaWRlckhvcml6b250YWxseUJ5KGwpe2NvbnN0e3d0VGFibGU6YX09dGhpczthLmhpZGVyLnN0eWxlLndpZHRoPWAke3BhcnNlSW50KGEuaGlkZXIuc3R5bGUu'@;
put 'd2lkdGgsMTApK2x9cHhgfWFwcGx5VG9ET00oKXt0aGlzLnd0VGFibGUuaXNWaXNpYmxlKCkmJih0aGlzLnRvcE92ZXJsYXkuYXBwbHlUb0RPTSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LmFwcGx5VG9ET00oKSx0aGlzLmlubGluZVN0YXJ0T3Zlcmxh'@;
put 'eS5hcHBseVRvRE9NKCkpfWdldFBhcmVudE92ZXJsYXkobCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGQ9bnVsbDtyZXR1cm4gWW4oW3RoaXMudG9wT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJs'@;
put 'YXksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXldLGg9PntoJiZoLmNsb25lJiZoLmNsb25lLnd0VGFibGUuVEFCTEUuY29udGFpbnMobCkmJihkPWguY2xvbmUpfSksZH1zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygpe2NvbnN0IGw9dGhpcy53dFRhYmxlLlRBQkxFO1lu'@;
put 'KFt0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSxkPT57ZCYmKGQuY2xvbmUud3RUYWJsZS5UQUJMRS5jbGFz'@;
put 'c05hbWU9bC5jbGFzc05hbWUpfSl9fTtmdW5jdGlvbiBHZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHZRZShjKXt2YXIgbD1mdW5jdGlvbiBiUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh'@;
put 'PT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJl'@;
put 'cikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHlRZXtjb25zdHJ1'@;
put 'Y3RvcihsKXtHZmUodGhpcywic2V0dGluZ3MiLHt9KSxHZmUodGhpcywiZGVmYXVsdHMiLE9iamVjdC5mcmVlemUodGhpcy5nZXREZWZhdWx0cygpKSksWGEodGhpcy5kZWZhdWx0cywoYSxkKT0+e2lmKHZvaWQgMCE9PWxbZF0pdGhpcy5zZXR0aW5nc1tkXT1sW2RdO2Vsc2V7aWYodm9pZCAw'@;
put 'PT09YSl0aHJvdyBuZXcgRXJyb3IoYEEgcmVxdWlyZWQgc2V0dGluZyAiJHtkfSIgd2FzIG5vdCBwcm92aWRlZGApO3RoaXMuc2V0dGluZ3NbZF09YX19KX1nZXREZWZhdWx0cygpe3JldHVybntmYWNhZGU6dm9pZCAwLHRhYmxlOnZvaWQgMCxpc0RhdGFWaWV3SW5zdGFuY2U6ITAsZXh0ZXJu'@;
put 'YWxSb3dDYWxjdWxhdG9yOiExLGN1cnJlbnRSb3dDbGFzc05hbWU6bnVsbCxjdXJyZW50Q29sdW1uQ2xhc3NOYW1lOm51bGwscHJldmVudE92ZXJmbG93OigpPT4hMSxwcmV2ZW50V2hlZWw6ITEsZGF0YTp2b2lkIDAsZml4ZWRDb2x1bW5zU3RhcnQ6MCxmaXhlZFJvd3NUb3A6MCxmaXhlZFJv'@;
put 'd3NCb3R0b206MCxzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT4wfHx0aGlzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJUb3BPdmVybGF5OigpPT50aGlzLmdldFNldHRp'@;
put 'bmcoImZpeGVkUm93c1RvcCIpPjB8fHRoaXMuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik+MCxtaW5TcGFyZVJvd3M6MCxyb3dIZWFkZXJzOigpPT5bXSxj'@;
put 'b2x1bW5IZWFkZXJzOigpPT5bXSx0b3RhbFJvd3M6dm9pZCAwLHRvdGFsQ29sdW1uczp2b2lkIDAsY2VsbFJlbmRlcmVyOihsLGEsZCk9PntPbShkLHRoaXMuZ2V0U2V0dGluZygiZGF0YSIsbCxhKT8/IiIpfSxjb2x1bW5XaWR0aCgpe30scm93SGVpZ2h0KCl7fSxyb3dIZWlnaHRCeU92ZXJs'@;
put 'YXlOYW1lKCl7fSxkZWZhdWx0Q29sdW1uV2lkdGg6NTAsc2VsZWN0aW9uczpudWxsLGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6ITEsdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZTpudWxsLHZpZXdwb3J0Um93UmVu'@;
put 'ZGVyaW5nVGhyZXNob2xkOm51bGwsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQ6bnVsbCxvbkNlbGxNb3VzZURvd246bnVsbCxvbkNlbGxDb250ZXh0TWVudTpudWxsLG9uQ2VsbE1vdXNlT3ZlcjpudWxsLG9uQ2VsbE1vdXNlT3V0Om51bGwsb25DZWxsTW91c2VVcDpudWxsLG9u'@;
put 'Q2VsbERibENsaWNrOm51bGwsb25DZWxsQ29ybmVyTW91c2VEb3duOm51bGwsb25DZWxsQ29ybmVyRGJsQ2xpY2s6bnVsbCxiZWZvcmVEcmF3Om51bGwsb25EcmF3Om51bGwsb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczpudWxsLG9uQWZ0ZXJEcmF3U2VsZWN0aW9uOm51bGwsb25CZWZv'@;
put 'cmVEcmF3Qm9yZGVyczpudWxsLG9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHk6bD0+bCxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseTpsPT5sLG9uU2Nyb2xsSG9yaXpvbnRhbGx5Om51bGwsb25TY3JvbGxWZXJ0aWNhbGx5Om51bGwsb25CZWZvcmVUb3VjaFNjcm9s'@;
put 'bDpudWxsLG9uQWZ0ZXJNb21lbnR1bVNjcm9sbDpudWxsLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6bnVsbCxvbk1vZGlmeUdldENlbGxDb29yZHM6bnVsbCxvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQ6bnVsbCxvbk1vZGlmeUdldENvb3JkczpudWxsLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93'@;
put 'SGVhZGVyOmw9Pmwsb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6bD0+bCxvbldpbmRvd1Jlc2l6ZTpudWxsLG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTpudWxsLHJlbmRlckFsbENvbHVtbnM6ITEscmVuZGVyQWxsUm93czohMSxncm91cHM6ITEscm93SGVhZGVyV2lkdGg6bnVs'@;
put 'bCxjb2x1bW5IZWFkZXJIZWlnaHQ6bnVsbCxoZWFkZXJDbGFzc05hbWU6bnVsbCxydGxNb2RlOiExLGFyaWFUYWdzOiEwfX11cGRhdGUobCxhKXtyZXR1cm4gdm9pZCAwPT09YT9YYShsLChkLGgpPT57dGhpcy5zZXR0aW5nc1toXT1kfSk6dGhpcy5zZXR0aW5nc1tsXT1hLHRoaXN9Z2V0U2V0'@;
put 'dGluZyhsLGEsZCxoLGYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzW2xdP3RoaXMuc2V0dGluZ3NbbF0oYSxkLGgsZik6dm9pZCAwIT09YSYmQXJyYXkuaXNBcnJheSh0aGlzLnNldHRpbmdzW2xdKT90aGlzLnNldHRpbmdzW2xdW2FdOnRoaXMuc2V0dGluZ3NbbF19'@;
put 'Z2V0U2V0dGluZ1B1cmUobCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NbbF19aGFzKGwpe3JldHVybiEhdGhpcy5zZXR0aW5nc1tsXX19Y2xhc3MgeUsgZXh0ZW5kcyBtX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLCJtYXN0ZXIiKX1hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5n'@;
put 'Q29udGFpbmVyKCl7Y29uc3QgbD1vXyh0aGlzLnd0Um9vdEVsZW1lbnQpLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7aWYobD09PWEpdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpfHwodGhpcy5ob2xkZXIuc3R5bGUub3ZlcmZsb3c9InZpc2li'@;
put 'bGUiLHRoaXMud3RSb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIpO2Vsc2V7Y29uc3QgZD1sLnBhcmVudEVsZW1lbnQsaD15RShsLCJoZWlnaHQiLGEpLGY9eUUobCwib3ZlcmZsb3ciLGEpLHY9dGhpcy5ob2xkZXIuc3R5bGUse3Njcm9sbFdpZHRoOk0sc2Nyb2xsSGVpZ2h0'@;
put 'OkR9PWw7bGV0IFo9bC5vZmZzZXRXaWR0aCxuZT1sLm9mZnNldEhlaWdodDtpZihkJiZbImF1dG8iLCJoaWRkZW4iLCJzY3JvbGwiXS5pbmNsdWRlcyhmKSl7Y29uc3QgYmU9bC5jbG9uZU5vZGUoITEpO2JlLnN0eWxlLm92ZXJmbG93PSJhdXRvIixiZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1'@;
put 'dGUiLGwubmV4dEVsZW1lbnRTaWJsaW5nP2QuaW5zZXJ0QmVmb3JlKGJlLGwubmV4dEVsZW1lbnRTaWJsaW5nKTpkLmFwcGVuZENoaWxkKGJlKTtjb25zdCBFZT1wYXJzZUludChhLmdldENvbXB1dGVkU3R5bGUoYmUpLmhlaWdodCwxMCk7ZC5yZW1vdmVDaGlsZChiZSksMD09PUVlJiYobmU9'@;
put 'MCl9bmU9TWF0aC5taW4obmUsRCksdi5oZWlnaHQ9ImF1dG8iPT09aD8iYXV0byI6YCR7bmV9cHhgLFo9TWF0aC5taW4oWixNKSx2LndpZHRoPWAke1p9cHhgLHYub3ZlcmZsb3c9IiIsdGhpcy5oYXNUYWJsZUhlaWdodD0iYXV0byI9PT12LmhlaWdodHx8bmU+MCx0aGlzLmhhc1RhYmxlV2lk'@;
put 'dGg9Wj4wfXRoaXMuaXNUYWJsZVZpc2libGU9ajcodGhpcy5UQUJMRSl9bWFya092ZXJzaXplZENvbHVtbkhlYWRlcnMoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3d0Vmlld3BvcnQ6YX09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LGQ9Im1hc3RlciIsZj1sLmdldFNldHRpbmcoImNvbHVt'@;
put 'bkhlYWRlcnMiKS5sZW5ndGg7aWYoZiYmIWEuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZFtkXSl7Y29uc3QgTT1sLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGgsRD10aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk7Zm9yKGxldCBaPTA7WjxmO1orKylmb3IobGV0'@;
put 'IG5lPS0xKk07bmU8RDtuZSsrKXRoaXMubWFya0lmT3ZlcnNpemVkQ29sdW1uSGVhZGVyKG5lKTthLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbZF09ITB9fX1UbCh5SyxVZmUpLFRsKHlLLHNLKTtjb25zdCBfUWU9eUs7ZnVuY3Rpb24gRkUoYyxsLGEpe3JldHVybihsPWZ1bmN0'@;
put 'aW9uIHdRZShjKXt2YXIgbD1mdW5jdGlvbiBDUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZCly'@;
put 'ZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWlu'@;
put 'IGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFNRZXtjb25zdHJ1Y3Rvcigpe0ZFKHRoaXMsImNvdW50IiwwKSxGRSh0aGlzLCJzdGFydFJvdyIsMCksRkUodGhpcywi'@;
put 'ZW5kUm93IiwwKSxGRSh0aGlzLCJzdGFydFBvc2l0aW9uIiwwKSxGRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMCl9aW5pdGlhbGl6ZShsKXtsZXR7dG90YWxSb3dzOmF9PWw7dGhpcy5jb3VudD1hLHRoaXMuZW5kUm93PXRoaXMuY291bnQtMX1wcm9jZXNzKCl7fWZp'@;
put 'bmFsaXplKCl7fX1mdW5jdGlvbiBIRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTVFlKGMpe3ZhciBsPWZ1bmN0aW9uIHhRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEu'@;
put 'Y2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3Ry'@;
put 'aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9XygzOTA5MiksXygxNDM2MCk7Y2xhc3MgJGZle2Nv'@;
put 'bnN0cnVjdG9yKCl7SEUodGhpcywiY291bnQiLDApLEhFKHRoaXMsInN0YXJ0Um93IixudWxsKSxIRSh0aGlzLCJlbmRSb3ciLG51bGwpLEhFKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLEhFKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7'@;
put 'fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRIZWlnaHQ6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCxpbm5lclZpZXdwb3J0SGVpZ2h0OmZ9PWE7ZDw9aCYmKHRoaXMuc3RhcnRSb3c9bCksZD49aCYmZDw9ZiYmbnVsbD09PXRoaXMuc3RhcnRSb3cmJih0aGlzLnN0YXJ0Um93'@;
put 'PWwpLHRoaXMuZW5kUm93PWx9ZmluYWxpemUobCl7dmFyIGE7Y29uc3R7c2Nyb2xsT2Zmc2V0OmQsdmlld3BvcnRIZWlnaHQ6aCxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OmYsdG90YWxSb3dzOnYsbmVlZFJldmVyc2U6TSxzdGFydFBvc2l0aW9uczpELHJvd0hlaWdodDpafT1sO2lmKHRo'@;
put 'aXMuZW5kUm93PT09di0xJiZNKWZvcih0aGlzLnN0YXJ0Um93PXRoaXMuZW5kUm93O3RoaXMuc3RhcnRSb3c+MDspe2NvbnN0IGNlPURbdGhpcy5lbmRSb3ddK1otRFt0aGlzLnN0YXJ0Um93LTFdO2lmKHRoaXMuc3RhcnRSb3ctPTEsY2U+PWgtZilicmVha310aGlzLnN0YXJ0UG9zaXRpb249'@;
put 'bnVsbCE9PShhPURbdGhpcy5zdGFydFJvd10pJiZ2b2lkIDAhPT1hP2E6bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShkK2gtZjwwfHxkPkQuYXQoLTEpK1opLHY8dGhpcy5lbmRSb3cmJih0aGlzLmVuZFJvdz12LTEpLG51bGwhPT10aGlzLnN0YXJ0Um93JiYodGhp'@;
put 'cy5jb3VudD10aGlzLmVuZFJvdy10aGlzLnN0YXJ0Um93KzEpfX1mdW5jdGlvbiBLZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEVRZShjKXt2YXIgbD1mdW5jdGlvbiBUUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0'@;
put 'aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09'@;
put 'PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNs'@;
put 'YXNzIEFRZSBleHRlbmRzICRmZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksS2ZlKHRoaXMsInJvd1N0YXJ0T2Zmc2V0IiwwKSxLZmUodGhpcywicm93RW5kT2Zmc2V0IiwwKX1maW5hbGl6ZShsKXt2YXIgYTtzdXBlci5maW5hbGl6ZShsKTtjb25zdHtvdmVycmlkZUZuOmQs'@;
put 'dG90YWxSb3dzOmgsc3RhcnRQb3NpdGlvbnM6Zn09bDtpZihudWxsIT09dGhpcy5zdGFydFJvdyYmImZ1bmN0aW9uIj09dHlwZW9mIGQpe2NvbnN0IHY9dGhpcy5zdGFydFJvdyxNPXRoaXMuZW5kUm93O2QodGhpcyksdGhpcy5yb3dTdGFydE9mZnNldD12LXRoaXMuc3RhcnRSb3csdGhpcy5y'@;
put 'b3dFbmRPZmZzZXQ9dGhpcy5lbmRSb3ctTX10aGlzLnN0YXJ0Um93PDAmJih0aGlzLnN0YXJ0Um93PTApLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9Zlt0aGlzLnN0YXJ0Um93XSkmJnZvaWQgMCE9PWE/YTpudWxsLGg8dGhpcy5lbmRSb3cmJih0aGlzLmVuZFJvdz1oLTEpLG51bGwh'@;
put 'PT10aGlzLnN0YXJ0Um93JiYodGhpcy5jb3VudD10aGlzLmVuZFJvdy10aGlzLnN0YXJ0Um93KzEpfX1mdW5jdGlvbiBORShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga1FlKGMpe3ZhciBsPWZ1bmN0aW9uIERRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy'@;
put 'IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu'@;
put 'Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh'@;
put 'YmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgSVFle2NvbnN0cnVjdG9yKCl7TkUodGhpcywiY291bnQiLDApLE5FKHRoaXMsInN0YXJ0Um93IixudWxsKSxORSh0aGlzLCJlbmRSb3ciLG51bGwpLE5FKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLE5FKHRoaXMsImlzVmlzaWJsZUluVHJpbW1p'@;
put 'bmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRIZWlnaHQ6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCxpbm5lclZpZXdwb3J0SGVpZ2h0OmYscm93SGVpZ2h0OnZ9PWE7ZD49aCYmZCt2PD1mJiYobnVsbD09PXRoaXMuc3Rh'@;
put 'cnRSb3cmJih0aGlzLnN0YXJ0Um93PWwpLHRoaXMuZW5kUm93PWwpfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0SGVpZ2h0OmgsaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpmLHRvdGFsUm93czp2LG5lZWRSZXZlcnNlOk0sc3RhcnRQb3NpdGlvbnM6'@;
put 'RCxyb3dIZWlnaHQ6Wn09bDtpZih0aGlzLmVuZFJvdz09PXYtMSYmTSlmb3IodGhpcy5zdGFydFJvdz10aGlzLmVuZFJvdzt0aGlzLnN0YXJ0Um93PjA7KXtjb25zdCBiZT1EW3RoaXMuZW5kUm93XStaLURbdGhpcy5zdGFydFJvdy0xXTtpZihiZTw9aC1mJiYodGhpcy5zdGFydFJvdy09MSks'@;
put 'YmU+PWgtZilicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPURbdGhpcy5zdGFydFJvd10pJiZ2b2lkIDAhPT1hP2E6bnVsbDtjb25zdCBuZT1kK2gtZixjZT1udWxsPT09dGhpcy5zdGFydFJvdz8wOmwuZ2V0Um93SGVpZ2h0KHRoaXMuc3RhcnRSb3cpO3RoaXMuaXNWaXNpYmxl'@;
put 'SW5UcmltbWluZ0NvbnRhaW5lcj0hKG5lPGNlfHxkPkQuYXQoLTEpKSx2PHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9di0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gVkUoYyxsLGEpe3JldHVybihs'@;
put 'PWZ1bmN0aW9uIFJRZShjKXt2YXIgbD1mdW5jdGlvbiBMUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBl'@;
put 'b2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9'@;
put 'KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIE9RZXtjb25zdHJ1Y3Rvcigpe1ZFKHRoaXMsImNvdW50IiwwKSxWRSh0aGlzLCJzdGFydENvbHVtbiIsMCks'@;
put 'VkUodGhpcywiZW5kQ29sdW1uIiwwKSxWRSh0aGlzLCJzdGFydFBvc2l0aW9uIiwwKSxWRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMCl9aW5pdGlhbGl6ZShsKXtsZXR7dG90YWxDb2x1bW5zOmF9PWw7dGhpcy5jb3VudD1hLHRoaXMuZW5kQ29sdW1uPXRoaXMuY291'@;
put 'bnQtMX1wcm9jZXNzKCl7fWZpbmFsaXplKCl7fX1mdW5jdGlvbiBCRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUFFlKGMpe3ZhciBsPWZ1bmN0aW9uIEZRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv'@;
put 'aWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6'@;
put 'TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgcWZle2Nv'@;
put 'bnN0cnVjdG9yKCl7QkUodGhpcywiY291bnQiLDApLEJFKHRoaXMsInN0YXJ0Q29sdW1uIixudWxsKSxCRSh0aGlzLCJlbmRDb2x1bW4iLG51bGwpLEJFKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLEJFKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFs'@;
put 'aXplKCl7fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRXaWR0aDpkLHplcm9CYXNlZFNjcm9sbE9mZnNldDpoLHZpZXdwb3J0V2lkdGg6Zn09YTtkPD1oJiYodGhpcy5zdGFydENvbHVtbj1sKSxkPj1oJiZkPD1oKyhoPjA/ZisxOmYpJiZudWxsPT10aGlzLnN0YXJ0Q29sdW1u'@;
put 'JiYodGhpcy5zdGFydENvbHVtbj1sKSx0aGlzLmVuZENvbHVtbj1sfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0V2lkdGg6aCxpbmxpbmVTdGFydE9mZnNldDpmLHplcm9CYXNlZFNjcm9sbE9mZnNldDp2LHRvdGFsQ29sdW1uczpNLG5lZWRSZXZlcnNl'@;
put 'OkQsc3RhcnRQb3NpdGlvbnM6Wixjb2x1bW5XaWR0aDpuZX09bDtpZih0aGlzLmVuZENvbHVtbj09PU0tMSYmRClmb3IodGhpcy5zdGFydENvbHVtbj10aGlzLmVuZENvbHVtbjt0aGlzLnN0YXJ0Q29sdW1uPjA7KXtjb25zdCBFZT1aW3RoaXMuZW5kQ29sdW1uXStuZS1aW3RoaXMuc3RhcnRD'@;
put 'b2x1bW4tMV07aWYodGhpcy5zdGFydENvbHVtbi09MSxFZT5oKWJyZWFrfXRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9Wlt0aGlzLnN0YXJ0Q29sdW1uXSkmJnZvaWQgMCE9PWE/YTpudWxsLHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcj0hKGQraC0odj4wP2grMTpoKTwt'@;
put 'MSpmfHxkPlouYXQoLTEpK25lfHwtMSpkLWg+MCksTTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPU0tMSksbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0aW9uIFhmZShjLGwsYSl7cmV0'@;
put 'dXJuKGw9ZnVuY3Rpb24gSFFlKGMpe3ZhciBsPWZ1bmN0aW9uIE5RZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh'@;
put 'PXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6'@;
put 'bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVlFlIGV4dGVuZHMgcWZle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxYZmUodGhp'@;
put 'cywiY29sdW1uU3RhcnRPZmZzZXQiLDApLFhmZSh0aGlzLCJjb2x1bW5FbmRPZmZzZXQiLDApfWZpbmFsaXplKGwpe3ZhciBhO3N1cGVyLmZpbmFsaXplKGwpO2NvbnN0e292ZXJyaWRlRm46ZCx0b3RhbENvbHVtbnM6aCxzdGFydFBvc2l0aW9uczpmfT1sO2lmKG51bGwhPT10aGlzLnN0YXJ0'@;
put 'Q29sdW1uJiYiZnVuY3Rpb24iPT10eXBlb2YgZCl7Y29uc3Qgdj10aGlzLnN0YXJ0Q29sdW1uLE09dGhpcy5lbmRDb2x1bW47ZCh0aGlzKSx0aGlzLmNvbHVtblN0YXJ0T2Zmc2V0PXYtdGhpcy5zdGFydENvbHVtbix0aGlzLmNvbHVtbkVuZE9mZnNldD10aGlzLmVuZENvbHVtbi1NfXRoaXMu'@;
put 'c3RhcnRDb2x1bW48MCYmKHRoaXMuc3RhcnRDb2x1bW49MCksdGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1mW3RoaXMuc3RhcnRDb2x1bW5dKSYmdm9pZCAwIT09YT9hOm51bGwsaDx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPWgtMSksbnVsbCE9PXRoaXMuc3RhcnRDb2x1'@;
put 'bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0aW9uIGpFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBCUWUoYyl7dmFyIGw9ZnVuY3Rpb24galFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5'@;
put 'bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1'@;
put 'cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9'@;
put 'KTpjW2xdPWEsY31jbGFzcyB6UWV7Y29uc3RydWN0b3IoKXtqRSh0aGlzLCJjb3VudCIsMCksakUodGhpcywic3RhcnRDb2x1bW4iLG51bGwpLGpFKHRoaXMsImVuZENvbHVtbiIsbnVsbCksakUodGhpcywic3RhcnRQb3NpdGlvbiIsbnVsbCksakUodGhpcywiaXNWaXNpYmxlSW5UcmltbWlu'@;
put 'Z0NvbnRhaW5lciIsITEpfWluaXRpYWxpemUoKXt9cHJvY2VzcyhsLGEpe2NvbnN0e3RvdGFsQ2FsY3VsYXRlZFdpZHRoOmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0Omgsdmlld3BvcnRXaWR0aDpmLGNvbHVtbldpZHRoOnZ9PWE7ZD49aCYmZCt2PD1oKyhoPjA/ZisxOmYpJiYobnVsbD09dGhp'@;
put 'cy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49bCksdGhpcy5lbmRDb2x1bW49bCl9ZmluYWxpemUobCl7dmFyIGE7Y29uc3R7c2Nyb2xsT2Zmc2V0OmQsdmlld3BvcnRXaWR0aDpoLGlubGluZVN0YXJ0T2Zmc2V0OmYsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OnYsdG90YWxDb2x1bW5z'@;
put 'Ok0sbmVlZFJldmVyc2U6RCxzdGFydFBvc2l0aW9uczpaLGNvbHVtbldpZHRoOm5lfT1sO2lmKHRoaXMuZW5kQ29sdW1uPT09TS0xJiZEKWZvcih0aGlzLnN0YXJ0Q29sdW1uPXRoaXMuZW5kQ29sdW1uO3RoaXMuc3RhcnRDb2x1bW4+MDspe2NvbnN0IEJlPVpbdGhpcy5lbmRDb2x1bW5dK25l'@;
put 'LVpbdGhpcy5zdGFydENvbHVtbi0xXTtpZihCZTw9aCYmKHRoaXMuc3RhcnRDb2x1bW4tPTEpLEJlPj1oKWJyZWFrfXRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9Wlt0aGlzLnN0YXJ0Q29sdW1uXSkmJnZvaWQgMCE9PWE/YTpudWxsO2NvbnN0IGJlPWQraC0odj4wP2grMTpoKSxFZT1u'@;
put 'dWxsPT09dGhpcy5zdGFydENvbHVtbj8wOmwuZ2V0Q29sdW1uV2lkdGgodGhpcy5zdGFydENvbHVtbik7dGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoYmU8LTEqZnx8ZD5aLmF0KC0xKXx8LTEqZC1oPi0xKkVlKSxNPHRoaXMuZW5kQ29sdW1uJiYodGhpcy5lbmRDb2x1bW49'@;
put 'TS0xKSxudWxsIT09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuY291bnQ9dGhpcy5lbmRDb2x1bW4tdGhpcy5zdGFydENvbHVtbisxKX19ZnVuY3Rpb24gSmZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVUWUoYyl7dmFyIGw9ZnVuY3Rpb24gWlFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv'@;
put 'ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy'@;
put 'biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj'@;
put 'b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBRZmV7Y29uc3RydWN0b3IobCl7SmZlKHRoaXMsImNhbGN1bGF0aW9uVHlwZXMiLFtdKSxKZmUodGhpcywiY2FsY3VsYXRpb25SZXN1bHRzIixuZXcgTWFwKSx0aGlzLmNhbGN1bGF0aW9uVHlwZXM9bH1faW5pdGlh'@;
put 'bGl6ZShsKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChhPT57bGV0W2QsaF09YTt0aGlzLmNhbGN1bGF0aW9uUmVzdWx0cy5zZXQoZCxoKSxoLmluaXRpYWxpemUobCl9KX1fcHJvY2VzcyhsLGEpe3RoaXMuY2FsY3VsYXRpb25UeXBlcy5mb3JFYWNoKGQ9PntsZXRbLGhdPWQ7cmV0'@;
put 'dXJuIGgucHJvY2VzcyhsLGEpfSl9X2ZpbmFsaXplKGwpe3RoaXMuY2FsY3VsYXRpb25UeXBlcy5mb3JFYWNoKGE9PntsZXRbLGRdPWE7cmV0dXJuIGQuZmluYWxpemUobCl9KX1nZXRSZXN1bHRzRm9yKGwpe3JldHVybiB0aGlzLmNhbGN1bGF0aW9uUmVzdWx0cy5nZXQobCl9fWZ1bmN0aW9u'@;
put 'IHoyKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBXUWUoYyl7dmFyIGw9ZnVuY3Rpb24gWVFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi'@;
put 'KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s'@;
put 'Ij09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBHUWUgZXh0ZW5kcyBRZmV7Y29uc3RydWN0b3IobCl7bGV0e2NhbGN1bGF0'@;
put 'aW9uVHlwZXM6YSx2aWV3cG9ydEhlaWdodDpkLHNjcm9sbE9mZnNldDpoLHRvdGFsUm93czpmLGRlZmF1bHRSb3dIZWlnaHQ6dixyb3dIZWlnaHRGbjpNLG92ZXJyaWRlRm46RCxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0Olp9PWw7c3VwZXIoYSksejIodGhpcywidmlld3BvcnRIZWlnaHQi'@;
put 'LDApLHoyKHRoaXMsInNjcm9sbE9mZnNldCIsMCksejIodGhpcywiemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0IiwwKSx6Mih0aGlzLCJ0b3RhbFJvd3MiLDApLHoyKHRoaXMsInJvd0hlaWdodEZuIixudWxsKSx6Mih0aGlzLCJyb3dIZWlnaHQiLDApLHoyKHRoaXMsIm92ZXJyaWRlRm4iLG51bGwp'@;
put 'LHoyKHRoaXMsImhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQiLDApLHoyKHRoaXMsImlubmVyVmlld3BvcnRIZWlnaHQiLDApLHoyKHRoaXMsInRvdGFsQ2FsY3VsYXRlZEhlaWdodCIsMCksejIodGhpcywic3RhcnRQb3NpdGlvbnMiLFtdKSx6Mih0aGlzLCJuZWVkUmV2ZXJzZSIsITApLHRo'@;
put 'aXMuZGVmYXVsdEhlaWdodD12LHRoaXMudmlld3BvcnRIZWlnaHQ9ZCx0aGlzLnNjcm9sbE9mZnNldD1oLHRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0PU1hdGgubWF4KGgsMCksdGhpcy50b3RhbFJvd3M9Zix0aGlzLnJvd0hlaWdodEZuPU0sdGhpcy5vdmVycmlkZUZuPUQsdGhpcy5ob3Jp'@;
put 'em9udGFsU2Nyb2xsYmFySGVpZ2h0PVo/PzAsdGhpcy5pbm5lclZpZXdwb3J0SGVpZ2h0PXRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0K3RoaXMudmlld3BvcnRIZWlnaHQtdGhpcy5ob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0LHRoaXMuY2FsY3VsYXRlKCl9Y2FsY3VsYXRlKCl7dGhpcy5f'@;
put 'aW5pdGlhbGl6ZSh0aGlzKTtmb3IobGV0IGw9MDtsPHRoaXMudG90YWxSb3dzO2wrKylpZih0aGlzLnJvd0hlaWdodD10aGlzLmdldFJvd0hlaWdodChsKSx0aGlzLl9wcm9jZXNzKGwsdGhpcyksdGhpcy5zdGFydFBvc2l0aW9ucy5wdXNoKHRoaXMudG90YWxDYWxjdWxhdGVkSGVpZ2h0KSx0'@;
put 'aGlzLnRvdGFsQ2FsY3VsYXRlZEhlaWdodCs9dGhpcy5yb3dIZWlnaHQsdGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQ+PXRoaXMuaW5uZXJWaWV3cG9ydEhlaWdodCl7dGhpcy5uZWVkUmV2ZXJzZT0hMTticmVha310aGlzLl9maW5hbGl6ZSh0aGlzKX1nZXRSb3dIZWlnaHQobCl7Y29uc3Qg'@;
put 'YT10aGlzLnJvd0hlaWdodEZuKGwpO3JldHVybiBpc05hTihhKT90aGlzLmRlZmF1bHRIZWlnaHQ6YX19ZnVuY3Rpb24gbzMoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uICRRZShjKXt2YXIgbD1mdW5jdGlvbiBLUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3Zh'@;
put 'ciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl'@;
put 'LiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0'@;
put 'YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IF9fPTUwO2NsYXNzIHFRZSBleHRlbmRzIFFmZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y2FsY3VsYXRpb25UeXBlczphLHZpZXdwb3J0V2lkdGg6ZCxzY3JvbGxPZmZzZXQ6aCx0b3RhbENvbHVtbnM6Zixjb2x1bW5XaWR0aEZuOnYsb3ZlcnJpZGVGbjpN'@;
put 'LGlubGluZVN0YXJ0T2Zmc2V0OkR9PWw7c3VwZXIoYSksbzModGhpcywidmlld3BvcnRXaWR0aCIsMCksbzModGhpcywic2Nyb2xsT2Zmc2V0IiwwKSxvMyh0aGlzLCJ6ZXJvQmFzZWRTY3JvbGxPZmZzZXQiLDApLG8zKHRoaXMsInRvdGFsQ29sdW1ucyIsMCksbzModGhpcywiY29sdW1uV2lk'@;
put 'dGhGbiIsbnVsbCksbzModGhpcywiY29sdW1uV2lkdGgiLDApLG8zKHRoaXMsIm92ZXJyaWRlRm4iLG51bGwpLG8zKHRoaXMsImlubGluZVN0YXJ0T2Zmc2V0IiwwKSxvMyh0aGlzLCJ0b3RhbENhbGN1bGF0ZWRXaWR0aCIsMCksbzModGhpcywic3RhcnRQb3NpdGlvbnMiLFtdKSxvMyh0aGlz'@;
put 'LCJuZWVkUmV2ZXJzZSIsITApLHRoaXMudmlld3BvcnRXaWR0aD1kLHRoaXMuc2Nyb2xsT2Zmc2V0PWgsdGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQ9TWF0aC5tYXgoaCwwKSx0aGlzLnRvdGFsQ29sdW1ucz1mLHRoaXMuY29sdW1uV2lkdGhGbj12LHRoaXMub3ZlcnJpZGVGbj1NLHRoaXMu'@;
put 'aW5saW5lU3RhcnRPZmZzZXQ9RCx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe3RoaXMuX2luaXRpYWxpemUodGhpcyk7Zm9yKGxldCBsPTA7bDx0aGlzLnRvdGFsQ29sdW1ucztsKyspaWYodGhpcy5jb2x1bW5XaWR0aD10aGlzLmdldENvbHVtbldpZHRoKGwpLHRoaXMuX3Byb2Nlc3Mo'@;
put 'bCx0aGlzKSx0aGlzLnN0YXJ0UG9zaXRpb25zLnB1c2godGhpcy50b3RhbENhbGN1bGF0ZWRXaWR0aCksdGhpcy50b3RhbENhbGN1bGF0ZWRXaWR0aCs9dGhpcy5jb2x1bW5XaWR0aCx0aGlzLnRvdGFsQ2FsY3VsYXRlZFdpZHRoPj10aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldCt0aGlzLnZp'@;
put 'ZXdwb3J0V2lkdGgpe3RoaXMubmVlZFJldmVyc2U9ITE7YnJlYWt9dGhpcy5fZmluYWxpemUodGhpcyl9Z2V0Q29sdW1uV2lkdGgobCl7Y29uc3QgYT10aGlzLmNvbHVtbldpZHRoRm4obCk7cmV0dXJuIGlzTmFOKGEpP19fOmF9fWNvbnN0IEpRZT1jbGFzcyBYUWV7Y29uc3RydWN0b3IobCxh'@;
put 'LGQsaCxmKXt0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0aGlzLndvdD1sLndvdCx0aGlzLmluc3RhbmNlPXRoaXMud290LHRoaXMuZG9tQmluZGluZ3M9YSx0aGlzLnd0U2V0dGluZ3M9ZCx0aGlzLnd0VGFibGU9Zix0aGlzLm92ZXJzaXplZFJvd3M9W10sdGhpcy5vdmVyc2l6ZWRDb2x1bW5I'@;
put 'ZWFkZXJzPVtdLHRoaXMuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZD17fSx0aGlzLmNsaWVudEhlaWdodD0wLHRoaXMucm93SGVhZGVyV2lkdGg9TmFOLHRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCx0aGlz'@;
put 'LnJvd3NDYWxjdWxhdG9yVHlwZXM9bmV3IE1hcChbWyJyZW5kZXJlZCIsKCk9PnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyZW5kZXJBbGxSb3dzIik/bmV3IFNRZTpuZXcgQVFlXSxbImZ1bGx5VmlzaWJsZSIsKCk9Pm5ldyBJUWVdLFsicGFydGlhbGx5VmlzaWJsZSIsKCk9Pm5ldyAk'@;
put 'ZmVdXSksdGhpcy5jb2x1bW5zQ2FsY3VsYXRvclR5cGVzPW5ldyBNYXAoW1sicmVuZGVyZWQiLCgpPT50aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicmVuZGVyQWxsQ29sdW1ucyIpP25ldyBPUWU6bmV3IFZRZV0sWyJmdWxseVZpc2libGUiLCgpPT5uZXcgelFlXSxbInBhcnRpYWxseVZp'@;
put 'c2libGUiLCgpPT5uZXcgcWZlXV0pLHRoaXMuZXZlbnRNYW5hZ2VyPWgsdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csInJlc2l6ZSIsKCk9Pnt0aGlzLmNsaWVudEhlaWdodD10aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpfSl9'@;
put 'Z2V0V29ya3NwYWNlSGVpZ2h0KCl7Y29uc3QgYT10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyO2xldCBkPTA7cmV0dXJuIGQ9YT09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVu'@;
put 'dEVsZW1lbnQuY2xpZW50SGVpZ2h0Ok11KGEpPjAmJmEuY2xpZW50SGVpZ2h0PjA/YS5jbGllbnRIZWlnaHQ6MS8wLGR9Z2V0Vmlld3BvcnRIZWlnaHQoKXtsZXQgbD10aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpO2lmKGw9PT0xLzApcmV0dXJuIGw7Y29uc3QgYT10aGlzLmdldENvbHVtbkhl'@;
put 'YWRlckhlaWdodCgpO3JldHVybiBhPjAmJihsLT1hKSxsfWdldFdvcmtzcGFjZVdpZHRoKCl7Y29uc3R7cm9vdERvY3VtZW50Omwscm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVy'@;
put 'O2xldCBoO2lmKGQ9PT1hKXtjb25zdCBmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKTtoPXRoaXMud3RUYWJsZS5ob2xkZXIub2Zmc2V0V2lkdGgsdGhpcy5nZXRSb3dIZWFkZXJXaWR0aCgpK3RoaXMuc3VtQ29sdW1uV2lkdGhzKDAsZik+aCYmKGg9bC5kb2N1'@;
put 'bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpfWVsc2UgaD1kLmNsaWVudFdpZHRoO3JldHVybiBofWdldFZpZXdwb3J0V2lkdGgoKXtjb25zdCBsPXRoaXMuZ2V0V29ya3NwYWNlV2lkdGgoKTtpZihsPT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRSb3dIZWFkZXJXaWR0aCgpO3JldHVy'@;
put 'biBhPjA/bC1hOmx9aGFzVmVydGljYWxTY3JvbGwoKXtpZih0aGlzLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBmPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudDtyZXR1cm4gZi5zY3JvbGxIZWlnaHQ+Zi5jbGllbnRIZWlnaHR9'@;
put 'Y29uc3R7aG9sZGVyOmwsaGlkZXI6YX09dGhpcy53dFRhYmxlLGg9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGwuY2xpZW50SGVpZ2h0PGh8fGg+dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX1oYXNIb3Jpem9udGFsU2Nyb2xsKCl7aWYodGhpcy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5k'@;
put 'b3coKSl7Y29uc3QgZj10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGYuc2Nyb2xsV2lkdGg+Zi5jbGllbnRXaWR0aH1jb25zdHtob2xkZXI6bCxoaWRlcjphfT10aGlzLnd0VGFibGUsaD1hLm9mZnNldFdpZHRoO3JldHVybiBsLmNsaWVudFdp'@;
put 'ZHRoPGh8fGg+dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpfWlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93fWlzSG9yaXpvbnRh'@;
put 'bGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31zdW1Db2x1bW5XaWR0aHMobCxhKXtsZXQgZD0wLGg9bDtmb3IoO2g8YTspZCs9'@;
put 'dGhpcy53dFRhYmxlLmdldENvbHVtbldpZHRoKGgpLGgrPTE7cmV0dXJuIGR9Z2V0V29ya3NwYWNlT2Zmc2V0KCl7cmV0dXJuIGowKHRoaXMud3RUYWJsZS5ob2xkZXIpfWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVh'@;
put 'ZGVycyIpLmxlbmd0aD9pc05hTih0aGlzLmNvbHVtbkhlYWRlckhlaWdodCkmJih0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1NdSh0aGlzLnd0VGFibGUuVEhFQUQpKTp0aGlzLmNvbHVtbkhlYWRlckhlaWdodD0wLHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0fWdldFJvd0hlYWRlcldpZHRoKCl7'@;
put 'Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVyV2lkdGgiKSxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIik7aWYobCl7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgZD0wLGg9YS5sZW5ndGg7ZDxoO2QrKyl0aGlzLnJvd0hl'@;
put 'YWRlcldpZHRoKz1sW2RdfHxsfWlmKGlzTmFOKHRoaXMucm93SGVhZGVyV2lkdGgpKWlmKGEubGVuZ3RoKXtsZXQgZD10aGlzLnd0VGFibGUuVEFCTEUucXVlcnlTZWxlY3RvcigiVEgiKTt0aGlzLnJvd0hlYWRlcldpZHRoPTA7Zm9yKGxldCBoPTAsZj1hLmxlbmd0aDtoPGY7aCsrKWQ/KHRo'@;
put 'aXMucm93SGVhZGVyV2lkdGgrPWF1KGQpLGQ9ZC5uZXh0U2libGluZyk6dGhpcy5yb3dIZWFkZXJXaWR0aCs9NTB9ZWxzZSB0aGlzLnJvd0hlYWRlcldpZHRoPTA7cmV0dXJuIHRoaXMucm93SGVhZGVyV2lkdGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVy'@;
put 'V2lkdGgiLHRoaXMucm93SGVhZGVyV2lkdGgpfHx0aGlzLnJvd0hlYWRlcldpZHRoLHRoaXMucm93SGVhZGVyV2lkdGh9Y3JlYXRlUm93c0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06WyJyZW5kZXJlZCIs'@;
put 'ImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBmLHYsaD10aGlzLmdldFZpZXdwb3J0SGVpZ2h0KCk7dGhpcy5yb3dIZWFkZXJXaWR0aD1OYU47bGV0IE09dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcFNjcm9s'@;
put 'bFBvc2l0aW9uLXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BQYXJlbnRPZmZzZXQ7Y29uc3QgRD1hLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLFo9YS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxuZT1hLmdldFNldHRpbmcoInRvdGFsUm93cyIpO3JldHVybiBEJiZNPj0wJiYo'@;
put 'dj10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxEKSxNKz12LGgtPXYpLFomJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LmNsb25lJiYodj10aGlzLmRhdGFBY2Nlc3NPYmplY3QuYm90dG9tT3ZlcmxheS5zdW1DZWxsU2l6ZXMobmUt'@;
put 'WixuZSksaC09diksZj1kLmhvbGRlci5jbGllbnRIZWlnaHQ9PT1kLmhvbGRlci5vZmZzZXRIZWlnaHQ/MDpoMCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCksbmV3IEdRZSh7Y2FsY3VsYXRpb25UeXBlczpsLm1hcChjZT0+W2NlLHRoaXMucm93c0NhbGN1bGF0b3JUeXBlcy5nZXQo'@;
put 'Y2UpKCldKSx2aWV3cG9ydEhlaWdodDpoLHNjcm9sbE9mZnNldDpNLHRvdGFsUm93czphLmdldFNldHRpbmcoInRvdGFsUm93cyIpLGRlZmF1bHRSb3dIZWlnaHQ6dGhpcy5pbnN0YW5jZS5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKSxyb3dIZWlnaHRGbjpjZT0+ZC5nZXRS'@;
put 'b3dIZWlnaHQoY2UpLG92ZXJyaWRlRm46YS5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiKSxob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0OmZ9KX1jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbInJlbmRlcmVkIiwiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdO2NvbnN0e3d0U2V0dGluZ3M6YSx3dFRhYmxlOmR9PXRoaXM7bGV0IGg9dGhpcy5nZXRWaWV3cG9ydFdpZHRoKCksZj1NYXRoLmFicyh0aGlzLmRhdGFBY2Nlc3NP'@;
put 'YmplY3QuaW5saW5lU3RhcnRTY3JvbGxQb3NpdGlvbiktdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0UGFyZW50T2Zmc2V0O3RoaXMuY29sdW1uSGVhZGVySGVpZ2h0PU5hTjtjb25zdCB2PWEuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKTtpZih2JiZmPj0wKXtjb25z'@;
put 'dCBNPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsdik7Zis9TSxoLT1NfXJldHVybiBkLmhvbGRlci5jbGllbnRXaWR0aCE9PWQuaG9sZGVyLm9mZnNldFdpZHRoJiYoaC09aDAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxu'@;
put 'ZXcgcVFlKHtjYWxjdWxhdGlvblR5cGVzOmwubWFwKE09PltNLHRoaXMuY29sdW1uc0NhbGN1bGF0b3JUeXBlcy5nZXQoTSkoKV0pLHZpZXdwb3J0V2lkdGg6aCxzY3JvbGxPZmZzZXQ6Zix0b3RhbENvbHVtbnM6YS5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxjb2x1bW5XaWR0aEZuOk09'@;
put 'PmQuZ2V0Q29sdW1uV2lkdGgoTSksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIpLGlubGluZVN0YXJ0T2Zmc2V0OnRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldH0pfWNyZWF0ZUNhbGN1bGF0'@;
put 'b3JzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRpbmdzOmF9PXRoaXMsZD10aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKCksaD10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKCk7aWYobCYmIWEu'@;
put 'Z2V0U2V0dGluZygicmVuZGVyQWxsUm93cyIpKXtjb25zdCBmPWQuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIik7bD10aGlzLmFyZUFsbFByb3Bvc2VkVmlzaWJsZVJvd3NBbHJlYWR5UmVuZGVyZWQoZil9aWYobCYmIWEuZ2V0U2V0dGluZygicmVuZGVyQWxsQ29sdW1ucyIpKXtjb25z'@;
put 'dCBmPWguZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIik7bD10aGlzLmFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQoZil9cmV0dXJuIGx8fCh0aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0ZvcigicmVuZGVyZWQiKSx0aGlzLmNvbHVt'@;
put 'bnNSZW5kZXJDYWxjdWxhdG9yPWguZ2V0UmVzdWx0c0ZvcigicmVuZGVyZWQiKSksdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9ZC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJs'@;
put 'ZSIpLHRoaXMucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yPWguZ2V0UmVzdWx0c0ZvcigicGFydGlhbGx5VmlzaWJsZSIpLGx9Y3JlYXRlVmlzaWJs'@;
put 'ZUNhbGN1bGF0b3JzKCl7Y29uc3QgbD10aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKFsiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdKSxhPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoWyJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl0pO3RoaXMucm93c1Zp'@;
put 'c2libGVDYWxjdWxhdG9yPWwuZ2V0UmVzdWx0c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9YS5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1sLmdldFJlc3VsdHNGb3IoInBh'@;
put 'cnRpYWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1hLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKX1hcmVBbGxQcm9wb3NlZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGwpe2lmKCF0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRv'@;
put 'cilyZXR1cm4hMTtsZXR7c3RhcnRSb3c6YSxlbmRSb3c6ZH09bDtpZihudWxsPT09YSYmbnVsbD09PWQpe2lmKCFsLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIpcmV0dXJuITA7YT10aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvdyxkPXRoaXMucm93c1Bh'@;
put 'cnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZFJvd31jb25zdHtzdGFydFJvdzpoLGVuZFJvdzpmLHJvd1N0YXJ0T2Zmc2V0OnYscm93RW5kT2Zmc2V0Ok19PXRoaXMucm93c1JlbmRlckNhbGN1bGF0b3IsRD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMSxaPXRo'@;
put 'aXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZCIpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKFopJiZaPjA/KGE9TWF0aC5tYXgoMCxhLU1hdGgubWluKHYsWikpLGQ9TWF0aC5taW4oRCxkK01hdGgubWluKE0sWikpKToiYXV0byI9PT1aJiYo'@;
put 'YT1NYXRoLm1heCgwLGEtTWF0aC5jZWlsKHYvMikpLGQ9TWF0aC5taW4oRCxkK01hdGguY2VpbChNLzIpKSksIShhPGh8fGE9PT1oJiZhPjB8fGQ+Znx8ZD09PWYmJmQ8RCl9YXJlQWxsUHJvcG9zZWRWaXNpYmxlQ29sdW1uc0FscmVhZHlSZW5kZXJlZChsKXtpZighdGhpcy5jb2x1bW5zVmlz'@;
put 'aWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7bGV0e3N0YXJ0Q29sdW1uOmEsZW5kQ29sdW1uOmR9PWw7aWYobnVsbD09PWEmJm51bGw9PT1kKXtpZighbC5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyKXJldHVybiEwO2E9dGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iu'@;
put 'c3RhcnRDb2x1bW4sZD10aGlzLmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRDb2x1bW59Y29uc3R7c3RhcnRDb2x1bW46aCxlbmRDb2x1bW46Zixjb2x1bW5TdGFydE9mZnNldDp2LGNvbHVtbkVuZE9mZnNldDpNfT10aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLEQ9'@;
put 'dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEsWj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQiKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihaKSYmWj4wPyhhPU1hdGgubWF4KDAsYS1NYXRoLm1p'@;
put 'bih2LFopKSxkPU1hdGgubWluKEQsZCtNYXRoLm1pbihNLFopKSk6ImF1dG8iPT09WiYmKGE9TWF0aC5tYXgoMCxhLU1hdGguY2VpbCh2LzIpKSxkPU1hdGgubWluKEQsZCtNYXRoLmNlaWwoTS8yKSkpLCEoYTxofHxhPT09aCYmYT4wfHxkPmZ8fGQ9PT1mJiZkPEQpfXJlc2V0SGFzT3ZlcnNp'@;
put 'emVkQ29sdW1uSGVhZGVyc01hcmtlZCgpe1hhKHRoaXMuaGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCwobCxhLGQpPT57ZFthXT12b2lkIDB9KX19O2Z1bmN0aW9uIGUzZShjLGwsYSl7dDNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB0M2UoYyxsKXtpZihsLmhhcyhjKSl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFVjKGMsbCl7cmV0dXJuIGMuZ2V0KHpFKGMsbCkpfWZ1bmN0aW9uIG4zZShjLGwsYSl7cmV0dXJuIGMuc2V0KHpFKGMsbCksYSks'@;
put 'YX1mdW5jdGlvbiB6RShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Xyg5Mzkw'@;
put 'OSk7dmFyIGEzPW5ldyBXZWFrTWFwLHYxPW5ldyBXZWFrTWFwLHNQPW5ldyBXZWFrU2V0O2NsYXNzIGVldHtjb25zdHJ1Y3RvcigpeyhmdW5jdGlvbiBRUWUoYyxsKXt0M2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsc1ApLGUzZSh0aGlzLGEzLHZvaWQgMCksZTNlKHRoaXMsdjEsdm9pZCAwKX1z'@;
put 'ZXRBY3RpdmVPdmVybGF5KGwpe3JldHVybiBuM2UodjEsdGhpcyxsKSx0aGlzfXNldEFjdGl2ZVNlbGVjdGlvbihsKXtyZXR1cm4gbjNlKGEzLHRoaXMsbCksdGhpc31zY2FuKCl7Y29uc3QgbD1VYyhhMyx0aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLGE9bmV3IFNldDtyZXR1cm4iYWN0'@;
put 'aXZlLWhlYWRlciI9PT1sPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSkpOiJhcmVhIj09PWw/dGhpcy5zY2FuQ2VsbHNSYW5nZShkPT5hLmFkZChkKSk6ImZvY3VzIj09PWw/KHRoaXMu'@;
put 'c2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSk6ImZpbGwiPT09bD90aGlzLnNjYW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKToiaGVhZGVy'@;
put 'Ij09PWw/KHRoaXMuc2NhbkNvbHVtbnNJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSk6InJvdyI9PT1sPyh0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkNlbGxz'@;
put 'UmFuZ2UoZD0+YS5hZGQoZCkpKToiY29sdW1uIj09PWwmJih0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhbkNvbHVtbnNJbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpKSxhfXNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UobCl7Y29uc3RbYSxkLGgs'@;
put 'Zl09VWMoYTMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOnZ9PVVjKHYxLHRoaXMpLE09di5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpLEQ9di5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKTtsZXQgWj0wO2ZvcihsZXQgbmU9LXYuZ2V0Um93SGVhZGVyc0NvdW50KCk7bmU8TTtuZSsrKXtj'@;
put 'b25zdCBjZT12LmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKG5lKTtpZighKGNlPGR8fGNlPmYpKXtmb3IobGV0IGJlPS1EO2JlPDA7YmUrKyl7aWYoYmU8YXx8YmU+aCljb250aW51ZTtjb25zdCBFZT1iZStEO2xldCBCZT12LmdldENvbHVtbkhlYWRlcihjZSxFZSk7Y29uc3QgcWU9'@;
put 'VWModjEsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGNlLEVlLHtzZWxlY3Rpb25UeXBlOlVjKGEzLHRoaXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGUsY29sdW1uQ3Vyc29yOlosc2VsZWN0aW9uV2lkdGg6Zi1kKzF9KTtudWxsIT09cWUmJihx'@;
put 'ZSE9PWNlJiYoQmU9di5nZXRDb2x1bW5IZWFkZXIocWUsRWUpKSxsKEJlKSl9Wis9MX19fXNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2UobCl7Y29uc3RbYSxkLGgsZl09VWMoYTMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOnZ9PVVjKHYxLHRoaXMpLE09di5nZXRSZW5kZXJlZFJvd3NDb3Vu'@;
put 'dCgpLEQ9di5nZXRSb3dIZWFkZXJzQ291bnQoKTtsZXQgWj0wO2ZvcihsZXQgbmU9LXYuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCk7bmU8TTtuZSsrKXtjb25zdCBjZT12LnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKG5lKTtpZighKGNlPGF8fGNlPmgpKXtmb3IobGV0IGJlPS1EO2JlPDA7'@;
put 'YmUrKyl7aWYoYmU8ZHx8YmU+Ziljb250aW51ZTtjb25zdCBFZT1iZStEO2xldCBCZT12LmdldFJvd0hlYWRlcihjZSxFZSk7Y29uc3QgcWU9VWModjEsdGhpcykuZ2V0U2V0dGluZygib25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLGNlLEVlLHtzZWxlY3Rpb25UeXBlOlVjKGEzLHRo'@;
put 'aXMpLnNldHRpbmdzLnNlbGVjdGlvblR5cGUscm93Q3Vyc29yOlosc2VsZWN0aW9uSGVpZ2h0OmgtYSsxfSk7bnVsbCE9PXFlJiYocWUhPT1jZSYmKEJlPXYuZ2V0Um93SGVhZGVyKHFlLEVlKSksbChCZSkpfVorPTF9fX1zY2FuQ2VsbHNSYW5nZShsKXtjb25zdHt3dFRhYmxlOmF9PVVjKHYx'@;
put 'LHRoaXMpO3pFKHNQLHRoaXMsdGV0KS5jYWxsKHRoaXMsKGQsaCk9Pntjb25zdCBmPWEuZ2V0Q2VsbChVYyh2MSx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGQsaCkpLHY9VWModjEsdGhpcykuZ2V0U2V0dGluZygib25BZnRlckRyYXdTZWxlY3Rpb24iLGQsaCxVYyhhMyx0aGlzKS5zZXR0aW5n'@;
put 'cy5sYXllckxldmVsKTsic3RyaW5nIj09dHlwZW9mIHYmJlRpKGYsdiksbChmKX0pfXNjYW5Sb3dzSW5DZWxsc1JhbmdlKGwpe2NvbnN0W2EsLGRdPVVjKGEzLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTpofT1VYyh2MSx0aGlzKTt6RShzUCx0aGlzLHIzZSkuY2FsbCh0aGlzLChmLHYp'@;
put 'PT57aWYoZj49YSYmZjw9ZCl7Y29uc3QgTT1oLmdldENlbGwoVWModjEsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhmLHYpKTtsKE0pfX0pfXNjYW5Db2x1bW5zSW5DZWxsc1JhbmdlKGwpe2NvbnN0WyxhLCxkXT1VYyhhMyx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6aH09VWModjEsdGhp'@;
put 'cyk7ekUoc1AsdGhpcyxyM2UpLmNhbGwodGhpcywoZix2KT0+e2lmKHY+PWEmJnY8PWQpe2NvbnN0IE09aC5nZXRDZWxsKFVjKHYxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZix2KSk7bChNKX19KX19ZnVuY3Rpb24gdGV0KGMpe2xldFtsLGEsZCxoXT1VYyhhMyx0aGlzKS5nZXRDb3JuZXJz'@;
put 'KCk7aWYobDwwJiZkPDB8fGE8MCYmaDwwKXJldHVybjtjb25zdHt3dFRhYmxlOmZ9PVVjKHYxLHRoaXMpLHY9bCE9PWR8fGEhPT1oO2lmKGE9TWF0aC5tYXgoYSwwKSxoPU1hdGgubWF4KGgsMCksbD1NYXRoLm1heChsLDApLGQ9TWF0aC5tYXgoZCwwKSx2KXtpZihhPU1hdGgubWF4KGEsZi5n'@;
put 'ZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpLGg9TWF0aC5taW4oaCxmLmdldExhc3RSZW5kZXJlZENvbHVtbigpKSxsPU1hdGgubWF4KGwsZi5nZXRGaXJzdFJlbmRlcmVkUm93KCkpLGQ9TWF0aC5taW4oZCxmLmdldExhc3RSZW5kZXJlZFJvdygpKSxoPGF8fGQ8bClyZXR1cm59ZWxzZSBpZigh'@;
put 'RXAoZi5nZXRDZWxsKFVjKHYxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMobCxhKSkpKXJldHVybjtmb3IobGV0IE09bDtNPD1kO00rPTEpZm9yKGxldCBEPWE7RDw9aDtEKz0xKWMoTSxEKX1mdW5jdGlvbiByM2UoYyl7Y29uc3R7d3RUYWJsZTpsfT1VYyh2MSx0aGlzKSxhPWwuZ2V0UmVuZGVy'@;
put 'ZWRSb3dzQ291bnQoKSxkPWwuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTtmb3IobGV0IGg9MDtoPGE7aCs9MSl7Y29uc3QgZj1sLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGgpO2ZvcihsZXQgdj0wO3Y8ZDt2Kz0xKWMoZixsLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKHYp'@;
put 'KX19Y29uc3QgaTNlPWNsYXNzIG5ldHtjb25zdHJ1Y3RvcihsLGEpe2EmJih0aGlzLmV2ZW50TWFuYWdlcj1sLmV2ZW50TWFuYWdlcix0aGlzLmluc3RhbmNlPWwsdGhpcy53b3Q9bCx0aGlzLnNldHRpbmdzPWEsdGhpcy5tb3VzZURvd249ITEsdGhpcy5tYWluPW51bGwsdGhpcy50b3A9bnVs'@;
put 'bCx0aGlzLmJvdHRvbT1udWxsLHRoaXMuc3RhcnQ9bnVsbCx0aGlzLmVuZD1udWxsLHRoaXMudG9wU3R5bGU9bnVsbCx0aGlzLmJvdHRvbVN0eWxlPW51bGwsdGhpcy5zdGFydFN0eWxlPW51bGwsdGhpcy5lbmRTdHlsZT1udWxsLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlPWZLKHRoaXMuaW5z'@;
put 'dGFuY2UpLHRoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQ9LU1hdGguY2VpbChwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMiksdGhpcy5jb3JuZXI9bnVsbCx0aGlzLmNvcm5lclN0eWxlPW51bGwsdGhpcy5jcmVhdGVCb3JkZXJzKGEpLHRoaXMucmVnaXN0'@;
put 'ZXJMaXN0ZW5lcnMoKSl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdCBsPXRoaXMud290LnJvb3REb2N1bWVudC5ib2R5O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIiwoKT0+dGhpcy5vbk1vdXNlRG93bigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRF'@;
put 'dmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT50aGlzLm9uTW91c2VVcCgpKTtmb3IobGV0IGE9MCxkPXRoaXMubWFpbi5jaGlsZE5vZGVzLmxlbmd0aDthPGQ7YSsrKXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5tYWluLmNoaWxkTm9kZXNbYV0sIm1vdXNlZW50'@;
put 'ZXIiLGY9PnRoaXMub25Nb3VzZUVudGVyKGYsdGhpcy5tYWluLmNoaWxkTm9kZXNbYV0pKX1vbk1vdXNlRG93bigpe3RoaXMubW91c2VEb3duPSEwfW9uTW91c2VVcCgpe3RoaXMubW91c2VEb3duPSExfW9uTW91c2VFbnRlcihsLGEpe2lmKCF0aGlzLm1vdXNlRG93bnx8IXRoaXMud290Lmdl'@;
put 'dFNldHRpbmcoImhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXIiKSlyZXR1cm47bC5wcmV2ZW50RGVmYXVsdCgpLEgyKGwpO2NvbnN0IGQ9dGhpcyxoPXRoaXMud290LnJvb3REb2N1bWVudC5ib2R5LGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRo'@;
put 'aXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwibW91c2Vtb3ZlIixmdW5jdGlvbiBNKEQpeyhmdW5jdGlvbiB2KEQpe2lmKEQuY2xpZW50WTxNYXRoLmZsb29yKGYudG9wKXx8RC5jbGllbnRZPk1hdGguY2VpbChmLnRvcCtmLmhlaWdodCl8fEQuY2xpZW50WDxNYXRoLmZsb29y'@;
put 'KGYubGVmdCl8fEQuY2xpZW50WD5NYXRoLmNlaWwoZi5sZWZ0K2Yud2lkdGgpKXJldHVybiEwfSkoRCkmJihkLmV2ZW50TWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsTSksYS5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSl9Y3JlYXRlQm9yZGVycyhsKXtjb25zdHty'@;
put 'b290RG9jdW1lbnQ6YX09dGhpcy53b3Q7dGhpcy5tYWluPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7Y29uc3QgZD1bInRvcCIsInN0YXJ0IiwiYm90dG9tIiwiZW5kIiwiY29ybmVyIl07bGV0IGg9dGhpcy5tYWluLnN0eWxlO2gucG9zaXRpb249ImFic29sdXRlIixoLnRvcD0wLGgubGVmdD0w'@;
put 'O2ZvcihsZXQgTT0wO008NTtNKyspe2NvbnN0IEQ9ZFtNXSxaPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7Wi5jbGFzc05hbWU9YHd0Qm9yZGVyICR7dGhpcy5zZXR0aW5ncy5jbGFzc05hbWV8fCIifWAsdGhpcy5zZXR0aW5nc1tEXSYmdGhpcy5zZXR0aW5nc1tEXS5oaWRlJiYoWi5jbGFzc05h'@;
put 'bWUrPSIgaGlkZGVuIiksaD1aLnN0eWxlLGguYmFja2dyb3VuZENvbG9yPXRoaXMuc2V0dGluZ3NbRF0mJnRoaXMuc2V0dGluZ3NbRF0uY29sb3I/dGhpcy5zZXR0aW5nc1tEXS5jb2xvcjpsLmJvcmRlci5jb2xvcixoLmhlaWdodD10aGlzLnNldHRpbmdzW0RdJiZ0aGlzLnNldHRpbmdzW0Rd'@;
put 'LndpZHRoP2Ake3RoaXMuc2V0dGluZ3NbRF0ud2lkdGh9cHhgOmAke2wuYm9yZGVyLndpZHRofXB4YCxoLndpZHRoPXRoaXMuc2V0dGluZ3NbRF0mJnRoaXMuc2V0dGluZ3NbRF0ud2lkdGg/YCR7dGhpcy5zZXR0aW5nc1tEXS53aWR0aH1weGA6YCR7bC5ib3JkZXIud2lkdGh9cHhgLHRoaXMu'@;
put 'bWFpbi5hcHBlbmRDaGlsZChaKX10aGlzLnRvcD10aGlzLm1haW4uY2hpbGROb2Rlc1swXSx0aGlzLnN0YXJ0PXRoaXMubWFpbi5jaGlsZE5vZGVzWzFdLHRoaXMuYm90dG9tPXRoaXMubWFpbi5jaGlsZE5vZGVzWzJdLHRoaXMuZW5kPXRoaXMubWFpbi5jaGlsZE5vZGVzWzNdLHRoaXMudG9w'@;
put 'U3R5bGU9dGhpcy50b3Auc3R5bGUsdGhpcy5zdGFydFN0eWxlPXRoaXMuc3RhcnQuc3R5bGUsdGhpcy5ib3R0b21TdHlsZT10aGlzLmJvdHRvbS5zdHlsZSx0aGlzLmVuZFN0eWxlPXRoaXMuZW5kLnN0eWxlLHRoaXMuY29ybmVyPXRoaXMubWFpbi5jaGlsZE5vZGVzWzRdLHRoaXMuY29ybmVy'@;
put 'LmNsYXNzTmFtZSs9IiBjb3JuZXIiLHRoaXMuY29ybmVyU3R5bGU9dGhpcy5jb3JuZXIuc3R5bGUsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5oZWlnaHQ9YCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5'@;
put 'bGUuaGVpZ2h0fXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlcj1bYCR7dGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGh9cHhgLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlclN0eWxlLHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlckNvbG9yXS5qb2luKCIgIiks'@;
put 'QXAoKSYmdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5nKCJpc0RhdGFWaWV3SW5zdGFuY2UiKSYmdGhpcy5jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFuZGxlcygpLHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTpmfT10aGlzLndvdDtsZXQgdj1mLmJvcmRlcnNIb2xkZXI7dnx8KHY9YS5j'@;
put 'cmVhdGVFbGVtZW50KCJkaXYiKSx2LmNsYXNzTmFtZT0iaHRCb3JkZXJzIixmLmJvcmRlcnNIb2xkZXI9dixmLnNwcmVhZGVyLmFwcGVuZENoaWxkKHYpKSx2LmFwcGVuZENoaWxkKHRoaXMubWFpbil9Y3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMoKXtjb25zdHtyb290RG9jdW1lbnQ6'@;
put 'bCxzdHlsZXNIYW5kbGVyOmF9PXRoaXMud290LGQ9YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtc2l6ZSIpLGg9YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtYm9yZGVyLXJhZGl1cyIpLGY9YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJj'@;
put 'ZWxsLW1vYmlsZS1oYW5kbGUtYmFja2dyb3VuZC1jb2xvciIpLHY9YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtYm9yZGVyLXdpZHRoIiksTT1hLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtbW9iaWxlLWhhbmRsZS1ib3JkZXItY29sb3IiKTt0aGlzLnNlbGVj'@;
put 'dGlvbkhhbmRsZXM9e3RvcDpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRvcEhpdEFyZWE6bC5jcmVhdGVFbGVtZW50KCJESVYiKSxib3R0b206bC5jcmVhdGVFbGVtZW50KCJESVYiKSxib3R0b21IaXRBcmVhOmwuY3JlYXRlRWxlbWVudCgiRElWIil9LHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50'@;
put 'b3AuY2xhc3NOYW1lPSJ0b3BTZWxlY3Rpb25IYW5kbGUgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuY2xhc3NOYW1lPSJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSB0b3BMZWZ0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiLHRoaXMu'@;
put 'c2VsZWN0aW9uSGFuZGxlcy5ib3R0b20uY2xhc3NOYW1lPSJib3R0b21TZWxlY3Rpb25IYW5kbGUgYm90dG9tUmlnaHRTZWxlY3Rpb25IYW5kbGUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhLmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEgYm90'@;
put 'dG9tUmlnaHRTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcz17dG9wOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3Auc3R5bGUsdG9wSGl0QXJlYTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5zdHlsZSxib3R0b206dGhpcy5zZWxl'@;
put 'Y3Rpb25IYW5kbGVzLmJvdHRvbS5zdHlsZSxib3R0b21IaXRBcmVhOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhLnN0eWxlfSxYYSh7cG9zaXRpb246ImFic29sdXRlIixoZWlnaHQ6IjQwcHgiLHdpZHRoOiI0MHB4IiwiYm9yZGVyLXJhZGl1cyI6YCR7cGFyc2VJbnQoNDAv'@;
put 'MS41LDEwKX1weGB9LChiZSxFZSk9Pnt0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbUhpdEFyZWFbRWVdPWJlLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wSGl0QXJlYVtFZV09YmV9KSxYYShhLmlzQ2xhc3NpY1RoZW1lKCk/e3Bvc2l0aW9uOiJhYnNvbHV0ZSIs'@;
put 'aGVpZ2h0OiIxMHB4Iix3aWR0aDoiMTBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDEwLzEuNSwxMCl9cHhgLGJhY2tncm91bmQ6IiNGNUY1RkYiLGJvcmRlcjoiMXB4IHNvbGlkICM0Mjg1YzgifTp7cG9zaXRpb246ImFic29sdXRlIixoZWlnaHQ6YCR7ZH1weGAsd2lkdGg6YCR7'@;
put 'ZH1weGAsImJvcmRlci1yYWRpdXMiOmAke2h9cHhgLGJhY2tncm91bmQ6YCR7Zn1gLGJvcmRlcjpgJHt2fXB4IHNvbGlkICR7TX1gfSwoYmUsRWUpPT57dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21bRWVdPWJlLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wW0Vl'@;
put 'XT1iZX0pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVhKSx0'@;
put 'aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbUhpdEFyZWEpfWlzUGFydFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyLmdldEFyZWFTZWxlY3Rpb24oKTtyZXR1cm4hKCFkLmNlbGxSYW5nZXx8bD09PWQuY2VsbFJhbmdl'@;
put 'LnRvLnJvdyYmYT09PWQuY2VsbFJhbmdlLnRvLmNvbCl9dXBkYXRlTXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzUG9zaXRpb24obCxhLGQsaCxmLHYpe2NvbnN0IEQ9dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIik/InJpZ2h0IjoibGVmdCIse3RvcDpaLHRvcEhpdEFy'@;
put 'ZWE6bmUsYm90dG9tOmNlLGJvdHRvbUhpdEFyZWE6YmV9PXRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMsRWU9cGFyc2VJbnQoWi5ib3JkZXJXaWR0aCwxMCksQmU9cGFyc2VJbnQoWi53aWR0aCwxMCkscWU9cGFyc2VJbnQobmUud2lkdGgsMTApLHJ0PXRoaXMud290Lnd0VGFibGUuZ2V0'@;
put 'V2lkdGgoKSxwdD10aGlzLndvdC53dFRhYmxlLmdldEhlaWdodCgpO1oudG9wPWAke3BhcnNlSW50KGQtQmUtMSwxMCl9cHhgLFpbRF09YCR7cGFyc2VJbnQoaC1CZS0xLDEwKX1weGAsbmUudG9wPWAke3BhcnNlSW50KGQtcWUvNCozLDEwKX1weGAsbmVbRF09YCR7cGFyc2VJbnQoaC1xZS80'@;
put 'KjMsMTApfXB4YDtjb25zdCBkdD1NYXRoLm1pbihwYXJzZUludChoK2YsMTApLHJ0LUJlLTIqRWUpLEp0PU1hdGgubWluKHBhcnNlSW50KGgrZi1xZS80LDEwKSxydC1xZS0yKkVlKTtjZVtEXT1gJHtkdH1weGAsYmVbRF09YCR7SnR9cHhgO2NvbnN0IHZuPU1hdGgubWluKHBhcnNlSW50KGQr'@;
put 'diwxMCkscHQtQmUtMipFZSksQ249TWF0aC5taW4ocGFyc2VJbnQoZCt2LXFlLzQsMTApLHB0LXFlLTIqRWUpO2NlLnRvcD1gJHt2bn1weGAsYmUudG9wPWAke0NufXB4YCx0aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNpYmxlJiZ0aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNp'@;
put 'YmxlKCk/KFouZGlzcGxheT0iYmxvY2siLG5lLmRpc3BsYXk9ImJsb2NrIix0aGlzLmlzUGFydFJhbmdlKGwsYSk/KGNlLmRpc3BsYXk9Im5vbmUiLGJlLmRpc3BsYXk9Im5vbmUiKTooY2UuZGlzcGxheT0iYmxvY2siLGJlLmRpc3BsYXk9ImJsb2NrIikpOihaLmRpc3BsYXk9Im5vbmUiLGNl'@;
put 'LmRpc3BsYXk9Im5vbmUiLG5lLmRpc3BsYXk9Im5vbmUiLGJlLmRpc3BsYXk9Im5vbmUiKSxsPT09dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKXx8YT09PXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT8oWi56'@;
put 'SW5kZXg9Ijk5OTkiLG5lLnpJbmRleD0iOTk5OSIpOihaLnpJbmRleD0iIixuZS56SW5kZXg9IiIpfWFwcGVhcihsKXtpZih0aGlzLmRpc2FibGVkKXJldHVybjtsZXRbYSxkLGgsZl09bDtpZihhPDAmJmg8MHx8ZDwwJiZmPDApcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtjb25zdHt3'@;
put 'dFRhYmxlOnYscm9vdERvY3VtZW50Ok0scm9vdFdpbmRvdzpEfT10aGlzLndvdCxaPWEhPT1ofHxkIT09ZixuZT12LmdldEZpcnN0UmVuZGVyZWRSb3coKSxjZT12LmdldExhc3RSZW5kZXJlZFJvdygpLGJlPXYuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpLEVlPXYuZ2V0TGFzdFJlbmRlcmVk'@;
put 'Q29sdW1uKCk7aWYoYmU8MCYmRWU8MHx8bmU8MCYmY2U8MClyZXR1cm4gdm9pZCB0aGlzLmRpc2FwcGVhcigpO2xldCBCZTtpZihaKXtpZihkPU1hdGgubWF4KGQsYmUpLGY9TWF0aC5taW4oZixFZSksYT1NYXRoLm1heChhLG5lKSxoPU1hdGgubWluKGgsY2UpLGY8ZHx8aDxhKXJldHVybiB2'@;
put 'b2lkIHRoaXMuZGlzYXBwZWFyKCk7QmU9di5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoYSxkKSl9ZWxzZSBpZihCZT12LmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhhLGQpKSwhRXAoQmUpKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7Y29uc3QgcWU9'@;
put 'Wj92LmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTpCZSxydD1qMChCZSkscHQ9Wj9qMChxZSk6cnQsZHQ9ajAodi5UQUJMRSksSnQ9cnQudG9wLHZuPXJ0LmxlZnQsQ249dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIik7bGV0IHRuPTAsTW49'@;
put 'MDtpZihDbil7Y29uc3QgRHI9YXUodi5UQUJMRSksJHI9YXUoQmUpO01uPXZuKyRyLXB0LmxlZnQsdG49RC5pbm5lcldpZHRoLXZuLSRyLShELmlubmVyV2lkdGgtZHQubGVmdC1EciktMX1lbHNlIE1uPXB0LmxlZnQrYXUocWUpLXZuLHRuPXZuLWR0LmxlZnQtMTtpZih0aGlzLmlzRW50aXJl'@;
put 'Q29sdW1uU2VsZWN0ZWQoYSxoKSl7Y29uc3QgJHI9dGhpcy5nZXREaW1lbnNpb25zRnJvbUhlYWRlcigiY29sdW1ucyIsZCxmLGEsZHQpO2xldCB3aT1udWxsOyRyJiYoW3dpLHRuLE1uXT0kciksd2kmJihCZT13aSl9bGV0IENyPUp0LWR0LnRvcC0xLEdyPXB0LnRvcCtNdShxZSktSnQ7aWYo'@;
put 'dGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKGQsZikpe2NvbnN0ICRyPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoInJvd3MiLGEsaCxkLGR0KTtsZXQgd2k9bnVsbDskciYmKFt3aSxDcixHcl09JHIpLHdpJiYoQmU9d2kpfWNvbnN0IGdyPUQuZ2V0Q29tcHV0ZWRTdHlsZShCZSk7cGFy'@;
put 'c2VJbnQoZ3IuYm9yZGVyVG9wV2lkdGgsMTApPjAmJihDcis9MSxHcj1Hcj4wP0dyLTE6MCkscGFyc2VJbnQoZ3JbQ24/ImJvcmRlclJpZ2h0V2lkdGgiOiJib3JkZXJMZWZ0V2lkdGgiXSwxMCk+MCYmKHRuKz0xLE1uPU1uPjA/TW4tMTowKTtjb25zdCBHbj1Dbj8icmlnaHQiOiJsZWZ0Ijt0'@;
put 'aGlzLnRvcFN0eWxlLnRvcD1gJHtDcn1weGAsdGhpcy50b3BTdHlsZVtHbl09YCR7dG59cHhgLHRoaXMudG9wU3R5bGUud2lkdGg9YCR7TW59cHhgLHRoaXMudG9wU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuc3RhcnRTdHlsZS50b3A9YCR7Q3J9cHhgLHRoaXMuc3RhcnRTdHlsZVtHbl09'@;
put 'YCR7dG59cHhgLHRoaXMuc3RhcnRTdHlsZS5oZWlnaHQ9YCR7R3J9cHhgLHRoaXMuc3RhcnRTdHlsZS5kaXNwbGF5PSJibG9jayI7Y29uc3Qgb2k9TWF0aC5mbG9vcih0aGlzLnNldHRpbmdzLmJvcmRlci53aWR0aC8yKTt0aGlzLmJvdHRvbVN0eWxlLnRvcD1DcitHci1vaSsicHgiLHRoaXMu'@;
put 'Ym90dG9tU3R5bGVbR25dPWAke3RufXB4YCx0aGlzLmJvdHRvbVN0eWxlLndpZHRoPWAke01ufXB4YCx0aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmVuZFN0eWxlLnRvcD1gJHtDcn1weGAsdGhpcy5lbmRTdHlsZVtHbl09dG4rTW4tb2krInB4Iix0aGlzLmVuZFN0eWxl'@;
put 'LmhlaWdodD1gJHtHcisxfXB4YCx0aGlzLmVuZFN0eWxlLmRpc3BsYXk9ImJsb2NrIjtsZXQgX2k9dGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZTtfaT0iZnVuY3Rpb24iPT10eXBlb2YgX2k/X2kodGhpcy5zZXR0aW5ncy5sYXllckxldmVsKTpfaTtjb25zdCBPbj10aGlzLndv'@;
put 'dC5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENlbGxDb29yZHMiLGgsZiwhMSwicmVuZGVyIik7bGV0W3pyLEpuXT1baCxmXTtpZihPbiYmQXJyYXkuaXNBcnJheShPbikmJihbLCx6cixKbl09T24pLEFwKCl8fCFfaXx8dGhpcy5pc1BhcnRSYW5nZSh6cixKbikpdGhpcy5jb3JuZXJTdHlsZS5k'@;
put 'aXNwbGF5PSJub25lIjtlbHNle3RoaXMuY29ybmVyU3R5bGUudG9wPUNyK0dyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgrInB4Iix0aGlzLmNvcm5lclN0eWxlW0duXT10bitNbit0aGlzLmNvcm5lckNlbnRlclBvaW50'@;
put 'T2Zmc2V0LXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoKyJweCIsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJSaWdodFdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlckxlZnRXaWR0aD1gJHt0aGlz'@;
put 'LmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0'@;
put 'aCx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2xldCBEcj1vXyh2LlRBQkxFKTtjb25zdCAkcj1Ecj09PUQ7JHImJihEcj1NLmRvY3VtZW50RWxlbWVudCk7Y29uc3Qgd2k9cGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgsMTApLTEsdG89TWF0aC5j'@;
put 'ZWlsKHBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yKSxwbz1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yKTtpZihmPT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiktMSl7Y29uc3QgdnQ9'@;
put 'JHI/cWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDpxZS5vZmZzZXRMZWZ0O2xldCBOdD0hMSxIdD0wO0NuPyhIdD12dC1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMixOdD1IdDwwKTooSHQ9dnQrYXUocWUpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVm'@;
put 'YXVsdFN0eWxlLndpZHRoLDEwKS8yLE50PUh0Pj1iJChEcikpLE50JiYodGhpcy5jb3JuZXJTdHlsZVtHbl09YCR7TWF0aC5mbG9vcih0bitNbit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LXRvLXdpKX1weGAsdGhpcy5jb3JuZXJTdHlsZVtDbj8iYm9yZGVyTGVmdFdpZHRoIjoiYm9y'@;
put 'ZGVyUmlnaHRXaWR0aCJdPTApfWlmKGg9PT10aGlzLndvdC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xKXtjb25zdCBIdD0oJHI/cWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOnFlLm9mZnNldFRvcCkrTXUocWUpK3BhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdo'@;
put 'dCwxMCkvMj49YV8oRHIpLEhuPXRoaXMud290LnN0eWxlc0hhbmRsZXIuaXNDbGFzc2ljVGhlbWUoKTtpZihIdCl7Y29uc3QgdHI9TWF0aC5mbG9vcihDcitHcit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LXBvLXdpKTtIbj8odGhpcy5jb3JuZXJTdHlsZS50b3A9YCR7dHJ9cHhgLHRo'@;
put 'aXMuY29ybmVyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9MCk6dGhpcy5jb3JuZXJTdHlsZS50b3A9dHItMSsicHgifX10aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9ImJsb2NrIn1BcCgpJiZ0aGlzLmluc3RhbmNlLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpJiZ0aGlzLnVwZGF0'@;
put 'ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKGgsZixDcix0bixNbixHcil9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkmJmE9PT10aGlzLndvdC53dFRhYmxlLmdldExhc3RSZW5kZXJl'@;
put 'ZFJvdygpfWlzRW50aXJlUm93U2VsZWN0ZWQobCxhKXtyZXR1cm4gbD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpJiZhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1nZXREaW1lbnNpb25zRnJvbUhlYWRlcihsLGEsZCxoLGYp'@;
put 'e2NvbnN0e3d0VGFibGU6dn09dGhpcy53b3QsTT12Lnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtsZXQgRD1udWxsLFo9bnVsbCxuZT1udWxsLGNlPW51bGwsYmU9bnVsbCxFZT1udWxsLEJlPW51bGwscWU9bnVsbDtzd2l0Y2gobCl7Y2FzZSJyb3dzIjpEPWZ1bmN0aW9uKCl7cmV0dXJuIHYu'@;
put 'Z2V0Um93SGVhZGVyKC4uLmFyZ3VtZW50cyl9LFo9ZnVuY3Rpb24oKXtyZXR1cm4gTXUoLi4uYXJndW1lbnRzKX0sbmU9Imh0X19zZWxlY3Rpb24tLXJvd3MiLEVlPSJ0b3AiO2JyZWFrO2Nhc2UiY29sdW1ucyI6RD1mdW5jdGlvbigpe3JldHVybiB2LmdldENvbHVtbkhlYWRlciguLi5hcmd1'@;
put 'bWVudHMpfSxaPWZ1bmN0aW9uKCl7cmV0dXJuIGF1KC4uLmFyZ3VtZW50cyl9LG5lPSJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIixFZT0ibGVmdCJ9aWYoTS5jbGFzc0xpc3QuY29udGFpbnMobmUpKXtjb25zdCBydD10aGlzLndvdC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3Ro'@;
put 'O2lmKEJlPUQoYSxydC1oKSxxZT1EKGQscnQtaCksIUJlfHwhcWUpcmV0dXJuITE7Y29uc3QgcHQ9ajAoQmUpLGR0PWowKHFlKTtyZXR1cm4gQmUmJnFlJiYoY2U9cHRbRWVdLWZbRWVdLTEsYmU9ZHRbRWVdK1oocWUpLXB0W0VlXSksW0JlLGNlLGJlXX1yZXR1cm4hMX1jaGFuZ2VCb3JkZXJT'@;
put 'dHlsZShsLGEpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZSxoPWFbbF07IWh8fGguaGlkZT9UaSh0aGlzW2xdLCJoaWRkZW4iKToocGEodGhpc1tsXSwiaGlkZGVuIikmJmNhKHRoaXNbbF0sImhpZGRlbiIpLGQuYmFja2dyb3VuZENvbG9yPWguY29sb3IsKCJ0b3AiPT09bHx8ImJvdHRvbSI9PT1s'@;
put 'KSYmKGQuaGVpZ2h0PWAke2gud2lkdGh9cHhgKSwoInN0YXJ0Ij09PWx8fCJlbmQiPT09bCkmJihkLndpZHRoPWAke2gud2lkdGh9cHhgKSl9Y2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCl7Y29uc3QgZD10aGlzW2xdLnN0eWxlO2QuYmFja2dyb3VuZENvbG9yPSIjMDAwIixkLndpZHRo'@;
put 'PSIxcHgiLGQuaGVpZ2h0PSIxcHgifXRvZ2dsZUhpZGRlbkNsYXNzKGwsYSl7dGhpcy5jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZShsKSxhP1RpKHRoaXNbbF0sImhpZGRlbiIpOmNhKHRoaXNbbF0sImhpZGRlbiIpfWRpc2FwcGVhcigpe3RoaXMudG9wU3R5bGUuZGlzcGxheT0ibm9uZSIs'@;
put 'dGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiLEFwKCkmJnRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygiaXNEYXRhVmll'@;
put 'd0luc3RhbmNlIikmJih0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcC5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWEuZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b20uZGlzcGxheT0ibm9u'@;
put 'ZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhLmRpc3BsYXk9Im5vbmUiKX1kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCksdGhpcy5tYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5tYWluKX19O2Z1'@;
put 'bmN0aW9uIHdfKGMsbCxhKXtvM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG8zZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gcnMo'@;
put 'YyxsKXtyZXR1cm4gYy5nZXQoX0soYyxsKSl9ZnVuY3Rpb24gYTNlKGMsbCxhKXtyZXR1cm4gYy5zZXQoX0soYyxsKSxhKSxhfWZ1bmN0aW9uIF9LKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgYjE9bmV3IFdlYWtNYXAsVmQ9bmV3IFdlYWtNYXAsd0s9bmV3IFdlYWtNYXAsVUU9bmV3IFdlYWtNYXAsQ0s9bmV3IFdlYWtNYXAscTc9bmV3IFdlYWtNYXAsczNlPW5l'@;
put 'dyBXZWFrU2V0O2NsYXNzIGlldHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gcmV0KGMsbCl7bzNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLHMzZSksd18odGhpcyxiMSx2b2lkIDApLHdfKHRoaXMsVmQsdm9pZCAwKSx3Xyh0aGlzLHdLLG5ldyBlZXQpLHdfKHRoaXMsVUUsbmV3IFdlYWtNYXAp'@;
put 'LHdfKHRoaXMsQ0ssbmV3IFdlYWtTZXQpLHdfKHRoaXMscTcsbmV3IE1hcCksYTNlKFZkLHRoaXMsbCl9c2V0QWN0aXZlT3ZlcmxheShsKXtyZXR1cm4gYTNlKGIxLHRoaXMsbCkscnMod0ssdGhpcykuc2V0QWN0aXZlT3ZlcmxheShycyhiMSx0aGlzKSkscnMoVUUsdGhpcykuaGFzKHJzKGIx'@;
put 'LHRoaXMpKXx8cnMoVUUsdGhpcykuc2V0KHJzKGIxLHRoaXMpLG5ldyBTZXQpLHRoaXN9Z2V0Rm9jdXNTZWxlY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXJzKFZkLHRoaXMpP3JzKFZkLHRoaXMpLmdldEZvY3VzKCk6bnVsbH1nZXRBcmVhU2VsZWN0aW9uKCl7cmV0dXJuIG51bGwhPT1ycyhWZCx0'@;
put 'aGlzKT9ycyhWZCx0aGlzKS5jcmVhdGVMYXllcmVkQXJlYSgpOm51bGx9Z2V0Qm9yZGVySW5zdGFuY2UobCl7aWYoIWwuc2V0dGluZ3MuYm9yZGVyKXJldHVybiBudWxsO2lmKHJzKHE3LHRoaXMpLmhhcyhsKSl7Y29uc3QgZD1ycyhxNyx0aGlzKS5nZXQobCk7aWYoZC5oYXMocnMoYjEsdGhp'@;
put 'cykpKXJldHVybiBkLmdldChycyhiMSx0aGlzKSk7Y29uc3QgaD1uZXcgaTNlKHJzKGIxLHRoaXMpLGwuc2V0dGluZ3MpO3JldHVybiBkLnNldChycyhiMSx0aGlzKSxoKSxofWNvbnN0IGE9bmV3IGkzZShycyhiMSx0aGlzKSxsLnNldHRpbmdzKTtyZXR1cm4gcnMocTcsdGhpcykuc2V0KGws'@;
put 'bmV3IE1hcChbW3JzKGIxLHRoaXMpLGFdXSkpLGF9Z2V0Qm9yZGVySW5zdGFuY2VzKGwpe3ZhciBhLGQ7cmV0dXJuIEFycmF5LmZyb20obnVsbCE9PShhPW51bGw9PT0oZD1ycyhxNyx0aGlzKS5nZXQobCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLnZhbHVlcygpKSYmdm9pZCAwIT09YT9hOltd'@;
put 'KX1kZXN0cm95Qm9yZGVycyhsKXtycyhxNyx0aGlzKS5nZXQobCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSkscnMocTcsdGhpcykuZGVsZXRlKGwpfXJlbmRlcihsKXtpZihudWxsPT09cnMoVmQsdGhpcykpcmV0dXJuO2wmJl9LKHMzZSx0aGlzLG9ldCkuY2FsbCh0aGlzKTtjb25zdCBhPUFy'@;
put 'cmF5LmZyb20ocnMoVmQsdGhpcykpLGQ9bmV3IE1hcCxoPW5ldyBNYXA7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IHY9YVtmXSx7Y2xhc3NOYW1lOk0saGVhZGVyQXR0cmlidXRlczpELGNyZWF0ZUxheWVyczpaLHNlbGVjdGlvblR5cGU6bmV9PXYuc2V0dGluZ3M7cnMoQ0ss'@;
put 'dGhpcykuaGFzKHYpfHwocnMoQ0ssdGhpcykuYWRkKHYpLHYuYWRkTG9jYWxIb29rKCJkZXN0cm95IiwoKT0+dGhpcy5kZXN0cm95Qm9yZGVycyh2KSkpO2NvbnN0IGNlPXRoaXMuZ2V0Qm9yZGVySW5zdGFuY2Uodik7aWYodi5pc0VtcHR5KCkpe2NlPy5kaXNhcHBlYXIoKTtjb250aW51ZX1N'@;
put 'JiZycyh3Syx0aGlzKS5zZXRBY3RpdmVTZWxlY3Rpb24odikuc2NhbigpLmZvckVhY2goQmU9PntpZihkLmhhcyhCZSkpe2NvbnN0IHFlPWQuZ2V0KEJlKTtxZS5oYXMoTSkmJiEwPT09Wj9xZS5zZXQoTSxxZS5nZXQoTSkrMSk6cWUuc2V0KE0sMSl9ZWxzZSBkLnNldChCZSxuZXcgTWFwKFtb'@;
put 'TSwxXV0pKTtEJiYoaC5oYXMoQmUpfHxoLnNldChCZSxbXSksIlRIIj09PUJlLm5vZGVOYW1lJiZoLmdldChCZSkucHVzaCguLi5EKSl9KTtjb25zdCBiZT12LmdldENvcm5lcnMoKTtycyhiMSx0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZURyYXdCb3JkZXJzIixiZSxuZSksY2U/LmFwcGVh'@;
put 'cihiZSl9ZC5mb3JFYWNoKChmLHYpPT57dmFyIE07Y29uc3QgRD1BcnJheS5mcm9tKGYpLm1hcChaPT57bGV0W25lLGNlXT1aO3JldHVybiAxPT09Y2U/bmU6W25lLC4uLkFycmF5LmZyb20oe2xlbmd0aDpjZS0xfSwoYmUsRWUpPT5gJHtuZX0tJHtFZSsxfWApXX0pLmZsYXQoKTtELmZvckVh'@;
put 'Y2goWj0+cnMoVUUsdGhpcykuZ2V0KHJzKGIxLHRoaXMpKS5hZGQoWikpLFRpKHYsRCksIlREIj09PXYubm9kZU5hbWUmJkFycmF5LmlzQXJyYXkobnVsbD09PShNPXJzKFZkLHRoaXMpLm9wdGlvbnMpfHx2b2lkIDA9PT1NP3ZvaWQgMDpNLmNlbGxBdHRyaWJ1dGVzKSYmdmEodixycyhWZCx0'@;
put 'aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1dGVzKX0pLEFycmF5LmZyb20oaC5rZXlzKCkpLmZvckVhY2goZj0+e3ZhKGYsWy4uLmguZ2V0KGYpXSl9KX19ZnVuY3Rpb24gb2V0KCl7Y29uc3QgYz1ycyhVRSx0aGlzKS5nZXQocnMoYjEsdGhpcykpLGw9cnMoYjEsdGhpcykud3RTZXR0aW5ncy5n'@;
put 'ZXRTZXR0aW5nKCJvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIik7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyljLmFkZChsW2FdKTtjLmZvckVhY2goYT0+e3ZhciBkLGg7Y29uc3QgZj1ycyhiMSx0aGlzKS53dFRhYmxlLlRBQkxFLnF1ZXJ5U2Vs'@;
put 'ZWN0b3JBbGwoYC4ke2F9YCk7bGV0IHY9W107QXJyYXkuaXNBcnJheShudWxsPT09KGQ9cnMoVmQsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2VsbEF0dHJpYnV0ZXMpJiYodj1ycyhWZCx0aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1dGVzLm1hcChNPT5NWzBdKSksQXJy'@;
put 'YXkuaXNBcnJheShudWxsPT09KGg9cnMoVmQsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PWg/dm9pZCAwOmguaGVhZGVyQXR0cmlidXRlcykmJih2PVsuLi52LC4uLnJzKFZkLHRoaXMpLm9wdGlvbnMuaGVhZGVyQXR0cmlidXRlcy5tYXAoTT0+TVswXSldKTtmb3IobGV0IE09MCxEPWYubGVu'@;
put 'Z3RoO008RDtNKyspY2EoZltNXSxhKSxWNyhmW01dLHYpfSksYy5jbGVhcigpfWZ1bmN0aW9uIFg3KGMsbCxhKXtsM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGwzZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy'@;
put 'aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gX2MoYyxsKXtyZXR1cm4gYy5nZXQobDMoYyxsKSl9ZnVuY3Rpb24gczMoYyxsLGEpe3JldHVybiBjLnNldChsMyhjLGwpLGEpLGF9ZnVuY3Rpb24gbDMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9'@;
put 'PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBMcD1uZXcgV2Vha01hcCx3Zz1uZXcgV2Vha01hcCxTSz1uZXcgV2Vha01hcCxNSz1u'@;
put 'ZXcgV2Vha01hcCxCbT1uZXcgV2Vha01hcCxaRT1uZXcgV2Vha01hcCxXRT1uZXcgV2Vha01hcCxPcD1uZXcgV2Vha1NldDtjbGFzcyBzZXR7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIGFldChjLGwpe2wzZShjLGwpLGwuYWRkKGMpfSkodGhpcyxPcCksWDcodGhpcyxMcCx2b2lkIDApLFg3'@;
put 'KHRoaXMsd2csdm9pZCAwKSxYNyh0aGlzLFNLLHZvaWQgMCksWDcodGhpcyxNSyx2b2lkIDApLFg3KHRoaXMsQm0sITApLFg3KHRoaXMsWkUse30pLFg3KHRoaXMsV0Use30pLHMzKHdnLHRoaXMsbC5yb290VGFibGUucGFyZW50RWxlbWVudC5wYXJlbnRFbGVtZW50KSxzMyhNSyx0aGlzLGwu'@;
put 'cm9vdERvY3VtZW50KX1pc0NsYXNzaWNUaGVtZSgpe3JldHVybiBfYyhCbSx0aGlzKX1nZXRDU1NWYXJpYWJsZVZhbHVlKGwpe3ZhciBhO2lmKF9jKEJtLHRoaXMpKXJldHVybiBudWxsO2lmKF9jKFpFLHRoaXMpW2AtLWh0LSR7bH1gXSlyZXR1cm4gX2MoWkUsdGhpcylbYC0taHQtJHtsfWBd'@;
put 'O2NvbnN0IGQ9bnVsbCE9PShhPWwzKE9wLHRoaXMsaGV0KS5jYWxsKHRoaXMsYC0taHQtJHtsfWApKSYmdm9pZCAwIT09YT9hOmwzKE9wLHRoaXMsZDNlKS5jYWxsKHRoaXMsYC0taHQtJHtsfWApO3JldHVybiBudWxsIT09ZD8oX2MoWkUsdGhpcylbYC0taHQtJHtsfWBdPWQsZCk6dm9pZCAw'@;
put 'fWdldFN0eWxlRm9yVEQobCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT1fYyhXRSx0aGlzKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEudGRbbF19Z2V0RGVmYXVsdFJvd0hlaWdodCgpe2lmKF9jKEJtLHRoaXMpKXJldHVybiAyMztjb25zdCBsPWwzKE9wLHRoaXMsY2V0KS5jYWxsKHRoaXMpO3Jl'@;
put 'dHVybiFsJiZwYShfYyh3Zyx0aGlzKSwiaHQtd3JhcHBlciIpPyhpbChgVGhlICIke19jKExwLHRoaXMpfSIgdGhlbWUgaXMgZW5hYmxlZCwgYnV0IGl0cyBzdHlsZXNoZWV0cyBhcmUgbWlzc2luZyBvciBub3QgaW1wb3J0ZWQgY29ycmVjdGx5LiBJbXBvcnQgdGhlIGNvcnJlY3QgQ1NTIGZp'@;
put 'bGVzIGluIG9yZGVyIHRvIHVzZSB0aGF0IHRoZW1lLmApLHMzKEJtLHRoaXMsITApLHRoaXMudXNlVGhlbWUoKSwyMyk6bH1hcmVDZWxsc0JvcmRlckJveCgpe3JldHVybiJib3JkZXItYm94Ij09PXRoaXMuZ2V0U3R5bGVGb3JURCgiYm94LXNpemluZyIpfXVzZVRoZW1lKGwpe2lmKCFsKXJl'@;
put 'dHVybiBsMyhPcCx0aGlzLHUzZSkuY2FsbCh0aGlzKSxzMyhCbSx0aGlzLCEwKSx2b2lkIHMzKExwLHRoaXMsbHx8dm9pZCAwKTtsJiZsIT09X2MoTHAsdGhpcykmJihfYyhMcCx0aGlzKSYmbDMoT3AsdGhpcyxmZXQpLmNhbGwodGhpcyksczMoTHAsdGhpcyxsKSxzMyhCbSx0aGlzLCExKSxs'@;
put 'MyhPcCx0aGlzLHVldCkuY2FsbCh0aGlzKSxsMyhPcCx0aGlzLHUzZSkuY2FsbCh0aGlzKSl9Z2V0VGhlbWVOYW1lKCl7cmV0dXJuIF9jKExwLHRoaXMpfXJlbW92ZUNsYXNzTmFtZXMoKXtwYShfYyh3Zyx0aGlzKSxfYyhMcCx0aGlzKSkmJmNhKF9jKHdnLHRoaXMpLF9jKExwLHRoaXMpKX19'@;
put 'ZnVuY3Rpb24gY2V0KCl7Y29uc3QgYz10aGlzLmdldENTU1ZhcmlhYmxlVmFsdWUoImxpbmUtaGVpZ2h0IiksbD10aGlzLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtdmVydGljYWwtcGFkZGluZyIpLGE9TWF0aC5jZWlsKHBhcnNlRmxvYXQodGhpcy5nZXRTdHlsZUZvclREKCJib3JkZXIt'@;
put 'Ym90dG9tLXdpZHRoIikpKTtyZXR1cm4gbnVsbD09PWN8fG51bGw9PT1sfHxpc05hTihhKT9udWxsOmMrMipsK2F9ZnVuY3Rpb24gdWV0KCl7Y2EoX2Mod2csdGhpcyksL2h0LXRoZW1lLS4qL2cpLFRpKF9jKHdnLHRoaXMpLF9jKExwLHRoaXMpKX1mdW5jdGlvbiB1M2UoKXt0aGlzLmlzQ2xh'@;
put 'c3NpY1RoZW1lKCl8fHMzKFNLLHRoaXMsZ2V0Q29tcHV0ZWRTdHlsZShfYyh3Zyx0aGlzKSkpO2NvbnN0IGM9bDMoT3AsdGhpcyxkZXQpLmNhbGwodGhpcyxbImJveC1zaXppbmciLCJib3JkZXItYm90dG9tLXdpZHRoIl0pO19jKFdFLHRoaXMpLnRkPXsuLi5fYyhXRSx0aGlzKS50ZCwiYm94'@;
put 'LXNpemluZyI6Y1siYm94LXNpemluZyJdLCJib3JkZXItYm90dG9tLXdpZHRoIjpjWyJib3JkZXItYm90dG9tLXdpZHRoIl19fWZ1bmN0aW9uIGRldChjKXtjb25zdCBsPV9jKE1LLHRoaXMpLGE9X2Mod2csdGhpcyksZD1sLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksaD1sLmNyZWF0ZUVsZW1l'@;
put 'bnQoInRib2R5IiksZj1sLmNyZWF0ZUVsZW1lbnQoInRyIiksdj1sLmNyZWF0ZUVsZW1lbnQoInRyIiksTT1sLmNyZWF0ZUVsZW1lbnQoInRkIik7di5hcHBlbmRDaGlsZChNKSxoLmFwcGVuZENoaWxkKGYpLGguYXBwZW5kQ2hpbGQodiksZC5hcHBlbmRDaGlsZChoKSxhLmFwcGVuZENoaWxk'@;
put 'KGQpO2NvbnN0IEQ9Z2V0Q29tcHV0ZWRTdHlsZShNKSxaPXt9O3JldHVybiBjLmZvckVhY2gobmU9PntaW25lXT1ELmdldFByb3BlcnR5VmFsdWUobmUpfSksYS5yZW1vdmVDaGlsZChkKSxafWZ1bmN0aW9uIGhldChjKXtjb25zdCBsPU1hdGguY2VpbChwYXJzZUZsb2F0KGwzKE9wLHRoaXMs'@;
put 'ZDNlKS5jYWxsKHRoaXMsYykpKTtyZXR1cm4gTnVtYmVyLmlzTmFOKGwpP251bGw6bH1mdW5jdGlvbiBkM2UoYyl7Y29uc3QgbD1fYyhTSyx0aGlzKS5nZXRQcm9wZXJ0eVZhbHVlKGMpO3JldHVybiIiPT09bD9udWxsOmx9ZnVuY3Rpb24gZmV0KCl7czMoV0UsdGhpcyx7fSksczMoWkUsdGhp'@;
put 'cyx7fSksczMoQm0sdGhpcywhMCl9Y2xhc3MgcGV0IGV4dGVuZHMgaEt7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLG5ldyB5UWUoYSkpLHRoaXMuc3R5bGVzSGFuZGxlcj1uZXcgc2V0KHRoaXMuZG9tQmluZGluZ3MpO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZhY2Fk'@;
put 'ZSIsdGhpcyk7dGhpcy53dFRhYmxlPW5ldyBfUWUodGhpcy5nZXRUYWJsZURhbygpLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1uZXcgSlFlKHRoaXMuZ2V0Vmlld3BvcnREYW8oKSx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0'@;
put 'aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuc2VsZWN0aW9uTWFuYWdlcj1uZXcgaWV0KHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzZWxlY3Rpb25zIikpLHRoaXMud3RFdmVudD1uZXcgYmZlKGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5l'@;
put 'dmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9uTWFuYWdlciksdGhpcy53dE92ZXJsYXlzPW5ldyBtUWUodGhpcyxkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSksdGhpcy5leHBvcnRTZXR0aW5nc0Fz'@;
put 'Q2xhc3NOYW1lcygpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfWV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl7Y29uc3QgYT1bXSxkPVtdO1hhKHtyb3dIZWFkZXJzOiJodFJvd0hlYWRlcnMiLGNvbHVtbkhlYWRlcnM6Imh0Q29sdW1uSGVhZGVycyJ9LChoLGYpPT57dGhpcy53dFNl'@;
put 'dHRpbmdzLmdldFNldHRpbmcoZikubGVuZ3RoJiZkLnB1c2goaCksYS5wdXNoKGgpfSksY2EodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxhKSxUaSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlLGQpfWdldE92ZXJsYXlCeU5hbWUobCl7dmFyIGE7'@;
put 'aWYoIWtmZS5pbmNsdWRlcyhsKSlyZXR1cm4gbnVsbDtjb25zdCBkPWwucmVwbGFjZSgvXyhbYS16XSkvZyxoPT5oWzFdLnRvVXBwZXJDYXNlKCkpO3JldHVybiBudWxsIT09KGE9dGhpcy53dE92ZXJsYXlzW2Ake2R9T3ZlcmxheWBdKSYmdm9pZCAwIT09YT9hOm51bGx9Z2V0Vmlld3BvcnRE'@;
put 'YW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCB3b3QoKXtyZXR1cm4gbH0sZ2V0IHRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcn0sZ2V0IGlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFp'@;
put 'bmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCB0b3BTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpfSxnZXQgdG9wUGFyZW50T2Zmc2V0KCl7cmV0'@;
put 'dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCBpbmxpbmVTdGFydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0sZ2V0IGlubGluZVN0YXJ0UGFyZW50'@;
put 'T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlz'@;
put 'LmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IGJvdHRvbU92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXl9fX19Y2xhc3MgeEt7Y29uc3RydWN0b3IobCl7bCBpbnN0YW5jZW9mIGhLP3RoaXMuX3dvdD1sOnRoaXMuX2luaXRGcm9tU2V0dGluZ3MobCl9X2luaXRGcm9t'@;
put 'U2V0dGluZ3MobCl7bC5mYWNhZGU9YT0+e2NvbnN0IGQ9bmV3IHhLKGEpO3JldHVybigpPT5kfSx0aGlzLl93b3Q9bmV3IHBldChsLnRhYmxlLGwpfWdldCBndWlkKCl7cmV0dXJuIHRoaXMuX3dvdC5ndWlkfWdldCByb290RG9jdW1lbnQoKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdz'@;
put 'LnJvb3REb2N1bWVudH1nZXQgcm9vdFdpbmRvdygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31nZXQgd3RTZXR0aW5ncygpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5nc31nZXQgY2xvbmVTb3VyY2UoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lU291cmNlfWdl'@;
put 'dCBjbG9uZU92ZXJsYXkoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheX1nZXQgc2VsZWN0aW9uTWFuYWdlcigpe3JldHVybiB0aGlzLl93b3Quc2VsZWN0aW9uTWFuYWdlcn1nZXQgd3RWaWV3cG9ydCgpe3JldHVybiB0aGlzLl93b3Qud3RWaWV3cG9ydH1nZXQgd3RPdmVybGF5cygp'@;
put 'e3JldHVybiB0aGlzLl93b3Qud3RPdmVybGF5c31nZXQgd3RUYWJsZSgpe3JldHVybiB0aGlzLl93b3Qud3RUYWJsZX1nZXQgd3RFdmVudCgpe3JldHVybiB0aGlzLl93b3Qud3RFdmVudH1nZXQgd3RTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2Nyb2xsfWdldCBkcmF3bigpe3JldHVy'@;
put 'biB0aGlzLl93b3QuZHJhd259c2V0IGRyYXduKGwpe3RoaXMuX3dvdC5kcmF3bj1sfWdldCBhY3RpdmVPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93b3QuYWN0aXZlT3ZlcmxheU5hbWV9Z2V0IGRyYXdJbnRlcnJ1cHRlZCgpe3JldHVybiB0aGlzLl93b3QuZHJhd0ludGVycnVwdGVkfXNl'@;
put 'dCBkcmF3SW50ZXJydXB0ZWQobCl7dGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZD1sfWdldCBsYXN0TW91c2VPdmVyKCl7cmV0dXJuIHRoaXMuX3dvdC5sYXN0TW91c2VPdmVyfXNldCBsYXN0TW91c2VPdmVyKGwpe3RoaXMuX3dvdC5sYXN0TW91c2VPdmVyPWx9Z2V0IG1vbWVudHVtU2Nyb2xs'@;
put 'aW5nKCl7cmV0dXJuIHRoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZ31zZXQgbW9tZW50dW1TY3JvbGxpbmcobCl7dGhpcy5fd290Lm1vbWVudHVtU2Nyb2xsaW5nPWx9Z2V0IHRvdWNoQXBwbGllZCgpe3JldHVybiB0aGlzLl93b3QudG91Y2hBcHBsaWVkfXNldCB0b3VjaEFwcGxpZWQobCl7'@;
put 'dGhpcy5fd290LnRvdWNoQXBwbGllZD1sfWdldCBkb21CaW5kaW5ncygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3N9Z2V0IGV2ZW50TGlzdGVuZXJzKCl7cmV0dXJuIHRoaXMuX3dvdC5ldmVudExpc3RlbmVyc31zZXQgZXZlbnRMaXN0ZW5lcnMobCl7dGhpcy5fd290LmV2ZW50TGlz'@;
put 'dGVuZXJzPWx9Z2V0IGV2ZW50TWFuYWdlcigpe3JldHVybiB0aGlzLl93b3QuZXZlbnRNYW5hZ2VyfWdldCBzdHlsZXNIYW5kbGVyKCl7cmV0dXJuIHRoaXMuX3dvdC5zdHlsZXNIYW5kbGVyfWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxDb29yZHMo'@;
put 'bCxhKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiB0aGlzLl93b3QuY3JlYXRlQ2VsbFJhbmdlKGwsYSxkKX1kcmF3KCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pLHRoaXN9Z2V0Q2Vs'@;
put 'bChsKXtyZXR1cm4gdGhpcy5fd290LmdldENlbGwobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKX1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydChsLGEsZCl9c2Nyb2xsVmlld3BvcnRI'@;
put 'b3Jpem9udGFsbHkobCxhKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKX1nZXRWaWV3cG9ydCgpe3JldHVybiB0'@;
put 'aGlzLl93b3QuZ2V0Vmlld3BvcnQoKX1nZXRPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVPdmVybGF5P3RoaXMuX3dvdC5jbG9uZU92ZXJsYXkudHlwZToibWFzdGVyIn1nZXRPdmVybGF5QnlOYW1lKGwpe3JldHVybiB0aGlzLl93b3QuZ2V0T3ZlcmxheUJ5TmFtZShsKX1l'@;
put 'eHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe3JldHVybiB0aGlzLl93b3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKX11cGRhdGUobCxhKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MudXBkYXRlKGwsYSksdGhpc31nZXRTZXR0aW5nKGwsYSxkLGgsZil7cmV0dXJuIHRoaXMu'@;
put 'X3dvdC53dFNldHRpbmdzLmdldFNldHRpbmcobCxhLGQsaCxmKX1oYXNTZXR0aW5nKGwpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy5oYXNTZXR0aW5nKGwpfWRlc3Ryb3koKXt0aGlzLl93b3QuZGVzdHJveSgpfX1mdW5jdGlvbiBoM2UoYyl7bGV0e2lzU2hpZnRLZXk6bCxpc0xlZnRD'@;
put 'bGljazphLGlzUmlnaHRDbGljazpkLGNvb3JkczpoLHNlbGVjdGlvbjpmLGNvbnRyb2xsZXI6dixjZWxsQ29vcmRzRmFjdG9yeTpNfT1jO2NvbnN0IEQ9Zi5pc1NlbGVjdGVkKCk/Zi5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpOm51bGwsWj1mLmlzU2VsZWN0ZWRCeUNvcm5lcigpLG5l'@;
put 'PWYuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoZi5tYXJrU291cmNlKCJtb3VzZSIpLGwmJkQpaC5yb3c+PTAmJmguY29sPj0wJiYhdi5jZWxsP2Yuc2V0UmFuZ2VFbmQoaCk6KFp8fG5lKSYmaC5yb3c+PTAmJmguY29sPj0wJiYhdi5jZWxsP2Yuc2V0UmFuZ2VFbmQoTShoLnJvdyxoLmNv'@;
put 'bCkpOlomJmgucm93PDAmJiF2LmNvbHVtbj9mLnNldFJhbmdlRW5kKE0oRC50by5yb3csaC5jb2wpKTpuZSYmaC5jb2w8MCYmIXYucm93P2Yuc2V0UmFuZ2VFbmQoTShoLnJvdyxELnRvLmNvbCkpOighWiYmIW5lJiZoLmNvbDwwfHxaJiZoLmNvbDwwKSYmIXYucm93P2Yuc2VsZWN0Um93cyhN'@;
put 'YXRoLm1heChELmZyb20ucm93LDApLGgucm93LGguY29sKTooIVomJiFuZSYmaC5yb3c8MHx8bmUmJmgucm93PDApJiYhdi5jb2x1bW4mJmYuc2VsZWN0Q29sdW1ucyhNYXRoLm1heChELmZyb20uY29sLDApLGguY29sLGgucm93KTtlbHNle2NvbnN0IGNlPSFmLmluSW5TZWxlY3Rpb24oaCks'@;
put 'YmU9YXx8ZCYmY2U7aC5yb3c8MCYmaC5jb2w+PTAmJiF2LmNvbHVtbj9iZSYmZi5zZWxlY3RDb2x1bW5zKGguY29sLGguY29sLGgucm93KTpoLmNvbDwwJiZoLnJvdz49MCYmIXYucm93P2JlJiZmLnNlbGVjdFJvd3MoaC5yb3csaC5yb3csaC5jb2wpOmguY29sPj0wJiZoLnJvdz49MCYmIXYu'@;
put 'Y2VsbD9iZSYmZi5zZXRSYW5nZVN0YXJ0KGgpOmguY29sPDAmJmgucm93PDAmJmYuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMCxmb2N1c1Bvc2l0aW9uOntyb3c6MCxjb2w6MH19KX1mLm1hcmtFbmRTb3VyY2UoKX1jb25zdCBtZXQ9bmV3IE1hcChbWyJtb3Vz'@;
put 'ZWRvd24iLGgzZV0sWyJtb3VzZW92ZXIiLGZ1bmN0aW9uIGdldChjKXtsZXR7aXNMZWZ0Q2xpY2s6bCxjb29yZHM6YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jkc0ZhY3Rvcnk6Zn09YztpZighbClyZXR1cm47Y29uc3Qgdj1kLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLE09'@;
put 'ZC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxEPWQudGFibGVQcm9wcy5jb3VudENvbHMoKSxaPWQudGFibGVQcm9wcy5jb3VudFJvd3MoKTtkLm1hcmtTb3VyY2UoIm1vdXNlIiksTSYmIWguY29sdW1uP2Quc2V0UmFuZ2VFbmQoZihaLTEsYS5jb2wpKTp2JiYhaC5yb3c/ZC5zZXRSYW5n'@;
put 'ZUVuZChmKGEucm93LEQtMSkpOmguY2VsbHx8ZC5zZXRSYW5nZUVuZChhKSxkLm1hcmtFbmRTb3VyY2UoKX1dLFsidG91Y2hzdGFydCIsaDNlXV0pO2Z1bmN0aW9uIGYzZShjLGwpe2xldHtjb29yZHM6YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jkc0ZhY3Rvcnk6Zn09bDtt'@;
put 'ZXQuZ2V0KGMudHlwZSkoe2Nvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmLGlzU2hpZnRLZXk6Yy5zaGlmdEtleSxpc0xlZnRDbGljazp6TyhjKXx8InRvdWNoc3RhcnQiPT09Yy50eXBlLGlzUmlnaHRDbGljazpGbShjKX0pfWNvbnN0IHAzZT1u'@;
put 'ZXcgV2Vha01hcCxFSz1TeW1ib2woInJvb3RJbnN0YW5jZSIpO2Z1bmN0aW9uIGxQKGMpe3JldHVybiBwM2UuaGFzKGMpfWZ1bmN0aW9uIGptKGMsbCxhKXtnM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGczZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5v'@;
put 'dCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gem0oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIF9ldChjKXt2YXIgbD1mdW5jdGlvbiB3ZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3Zh'@;
put 'ciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl'@;
put 'LiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0'@;
put 'YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFR1KGMsbCl7cmV0dXJuIGMuZ2V0KENfKGMsbCkpfWZ1bmN0aW9uIEJkKGMsbCxhKXtyZXR1cm4gYy5zZXQoQ18oYyxsKSxhKSxhfWZ1bmN0aW9uIENfKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1'@;
put 'cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgVEs9bmV3IFdlYWtNYXAsY1A9bmV3IFdlYWtNYXAsdVA9bmV3IFdlYWtNYXAsQ2c9bmV3IFdlYWtNYXAsYzM9bmV3'@;
put 'IFdlYWtNYXAsQUs9bmV3IFdlYWtNYXAsa0s9bmV3IFdlYWtNYXAsU189bmV3IFdlYWtNYXAsWUU9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gbTNlKCl7cmV0dXJuIHBhcnNlSW50KHRoaXMuaG90LnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZShJTygpWzBdKSwxMCl9ZnVuY3Rpb24gTWV0KGMpe2Nv'@;
put 'bnN0IGw9Q18oWUUsdGhpcyxtM2UpLmNhbGwodGhpcykrYzt2YSh0aGlzLmhvdC5yb290RWxlbWVudCwuLi5JTyhsKSl9ZnVuY3Rpb24geGV0KCl7Y29uc3QgYz10aGlzLmhvdC5yb290RWxlbWVudDt0aGlzLmhhc1ZlcnRpY2FsU2Nyb2xsKCk/VGkoYywiaHRIYXNTY3JvbGxZIik6Y2EoYywi'@;
put 'aHRIYXNTY3JvbGxZIiksdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsKCk/VGkoYywiaHRIYXNTY3JvbGxYIik6Y2EoYywiaHRIYXNTY3JvbGxYIil9Y29uc3QgRWV0PWNsYXNzIENldHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24geWV0KGMsbCl7ZzNlKGMsbCksbC5hZGQoYyl9KSh0aGlzLFlF'@;
put 'KSx6bSh0aGlzLCJob3QiLHZvaWQgMCksem0odGhpcywiZXZlbnRNYW5hZ2VyIix2b2lkIDApLHptKHRoaXMsInNldHRpbmdzIix2b2lkIDApLHptKHRoaXMsIlRIRUFEIix2b2lkIDApLHptKHRoaXMsIlRCT0RZIix2b2lkIDApLHptKHRoaXMsIl93dCIsdm9pZCAwKSx6bSh0aGlzLCJhY3Rp'@;
put 'dmVXdCIsdm9pZCAwKSxqbSh0aGlzLFRLLDApLGptKHRoaXMsY1AsMCksem0odGhpcywicG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplIiwhMSksam0odGhpcyx1UCwhMSksam0odGhpcyxDZyx2b2lkIDApLGptKHRoaXMsYzMsdm9pZCAwKSxqbSh0aGlzLEFLLDApLGptKHRoaXMsa0ssMCks'@;
put 'am0odGhpcyxTXyxudWxsKSx0aGlzLmhvdD1sLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBOMih0aGlzLmhvdCksdGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHRoaXMuY3JlYXRlRWxlbWVudHMoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5pbml0aWFsaXplV2Fsa29u'@;
put 'dGFibGUoKX1yZW5kZXIoKXtpZighdGhpcy5ob3QuaXNSZW5kZXJTdXNwZW5kZWQoKSl7Y29uc3QgbD10aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbmRlciIsbCksdGhpcy5wb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUmJih0aGlzLnBvc3Rw'@;
put 'b25lZEFkanVzdEVsZW1lbnRzU2l6ZT0hMSx0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpKSx0aGlzLl93dC5kcmF3KCFsKSxDXyhZRSx0aGlzLHhldCkuY2FsbCh0aGlzKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW5kZXIiLGwpLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMX19YWRq'@;
put 'dXN0RWxlbWVudHNTaXplKCl7dGhpcy5ob3QuaXNSZW5kZXJTdXNwZW5kZWQoKT90aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZT0hMDp0aGlzLl93dC53dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpfWdldENlbGxBdENvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5fd3QuZ2V0'@;
put 'Q2VsbChsLGEpO3JldHVybiBkPDA/bnVsbDpkfXNjcm9sbFZpZXdwb3J0KGwsYSxkKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnQobCxhLGQpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGws'@;
put 'YSl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLGEpfWNyZWF0ZUVsZW1lbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1sLmdldEF0dHJpYnV0ZSgic3R5bGUi'@;
put 'KTtkJiZsLnNldEF0dHJpYnV0ZSgiZGF0YS1vcmlnaW5hbHN0eWxlIixkKSxUaShsLCJoYW5kc29udGFibGUiKSxCZChjMyx0aGlzLGEuY3JlYXRlRWxlbWVudCgiVEFCTEUiKSksVGkoVHUoYzMsdGhpcyksImh0Q29yZSIpLHRoaXMuaG90LmdldFNldHRpbmdzKCkudGFibGVDbGFzc05hbWUm'@;
put 'JlRpKFR1KGMzLHRoaXMpLHRoaXMuaG90LmdldFNldHRpbmdzKCkudGFibGVDbGFzc05hbWUpLHRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MmJih2YShUdShjMyx0aGlzKSxbWyJyb2xlIiwicHJlc2VudGF0aW9uIl1dKSx2YShsLFtbInJvbGUiLCJ0cmVlZ3JpZCJdLHkyZSgtMSksSU8odGhpcy5o'@;
put 'b3QuY291bnRDb2xzKCkpLFsiYXJpYS1tdWx0aXNlbGVjdGFibGUiLCJ0cnVlIl1dKSksdGhpcy5USEVBRD1hLmNyZWF0ZUVsZW1lbnQoIlRIRUFEIiksVHUoYzMsdGhpcykuYXBwZW5kQ2hpbGQodGhpcy5USEVBRCksdGhpcy5UQk9EWT1hLmNyZWF0ZUVsZW1lbnQoIlRCT0RZIiksVHUoYzMs'@;
put 'dGhpcykuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSksdGhpcy5ob3QudGFibGU9VHUoYzMsdGhpcyksdGhpcy5ob3QuY29udGFpbmVyLmluc2VydEJlZm9yZShUdShjMyx0aGlzKSx0aGlzLmhvdC5jb250YWluZXIuZmlyc3RDaGlsZCl9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtyb290RWxlbWVu'@;
put 'dDpsLHJvb3REb2N1bWVudDphLHNlbGVjdGlvbjpkLHJvb3RXaW5kb3c6aH09dGhpcy5ob3QsZj1hLmRvY3VtZW50RWxlbWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsTT0+e0JkKHVQLHRoaXMsITApLHRoaXMuaXNUZXh0U2VsZWN0aW9uQWxs'@;
put 'b3dlZChNLnRhcmdldCl8fChfJChoKSxNLnByZXZlbnREZWZhdWx0KCksaC5mb2N1cygpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PntCZCh1UCx0aGlzLCExKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91'@;
put 'c2Vtb3ZlIixNPT57VHUodVAsdGhpcykmJiF0aGlzLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoTS50YXJnZXQpJiYodGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmXyQoaCksTS5wcmV2ZW50RGVmYXVsdCgpKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwi'@;
put 'a2V5dXAiLE09PntkLmlzSW5Qcm9ncmVzcygpJiYhTS5zaGlmdEtleSYmZC5maW5pc2goKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2V1cCIsTT0+e2QuaXNJblByb2dyZXNzKCkmJnpPKE0pJiZkLmZpbmlzaCgpLEJkKENnLHRoaXMsITEpO2NvbnN0IEQ9'@;
put 'UE8oYS5hY3RpdmVFbGVtZW50KTtDRShhLmFjdGl2ZUVsZW1lbnQpJiYhRHx8KER8fCFkLmlzU2VsZWN0ZWQoKSYmIWQuaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCkmJiFsLmNvbnRhaW5zKE0udGFyZ2V0KSYmIUZtKE0pKSYmdGhpcy5ob3QudW5saXN0ZW4oKX0pLHRoaXMuZXZlbnRNYW5hZ2Vy'@;
put 'LmFkZEV2ZW50TGlzdGVuZXIoZiwiY29udGV4dG1lbnUiLE09PntkLmlzSW5Qcm9ncmVzcygpJiZGbShNKSYmKGQuZmluaXNoKCksQmQoQ2csdGhpcywhMSkpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJ0b3VjaGVuZCIsKCk9PntkLmlzSW5Qcm9ncmVzcygpJiZk'@;
put 'LmZpbmlzaCgpLEJkKENnLHRoaXMsITEpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihmLCJtb3VzZWRvd24iLE09Pntjb25zdCBEPU0udGFyZ2V0LFo9TS54fHxNLmNsaWVudFgsbmU9TS55fHxNLmNsaWVudFk7bGV0IGNlPU0udGFyZ2V0O2lmKFR1KENnLHRoaXMpfHwh'@;
put 'bHx8IXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0e2hvbGRlcjpiZX09dGhpcy5fd3Qud3RUYWJsZTtpZihjZT09PWJlKXtjb25zdCBCZT1oMChhKTtpZihhLmVsZW1lbnRGcm9tUG9pbnQoWitCZSxuZSkhPT1iZXx8YS5lbGVtZW50RnJvbVBvaW50KFosbmUrQmUpIT09YmUpcmV0dXJufWVs'@;
put 'c2UgZm9yKDtjZSE9PWY7KXtpZihudWxsPT09Y2Upe2lmKE0uaXNUYXJnZXRXZWJDb21wb25lbnQpYnJlYWs7cmV0dXJufWlmKGNlPT09bClyZXR1cm47Y2U9Y2UucGFyZW50Tm9kZX0oImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxlY3RzP3RoaXMu'@;
put 'c2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxlY3RzKEQpOnRoaXMuc2V0dGluZ3Mub3V0c2lkZUNsaWNrRGVzZWxlY3RzKT90aGlzLmhvdC5kZXNlbGVjdENlbGwoKTp0aGlzLmhvdC5kZXN0cm95RWRpdG9yKCExLCExKX0pO2xldCB2PU43KGgpO2Zvcig7bnVsbCE9PXY7KXRoaXMuZXZlbnRN'@;
put 'YW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+e3RoaXMuaG90LnVubGlzdGVuKCl9KSx2PU43KHYpO3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoVHUoYzMsdGhpcyksInNlbGVjdHN0YXJ0IixNPT57dGhpcy5z'@;
put 'ZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbnx8Q0UoTS50YXJnZXQpfHxNLnByZXZlbnREZWZhdWx0KCl9KX10cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoLi4udGhpcy50'@;
put 'cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgoYSxkKSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGwsYSl7bGV0IGQ9bD49MD90aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpOmwsaD1hPj0wP3RoaXMu'@;
put 'aG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSk6YTtyZXR1cm4gbnVsbD09PWQmJihkPWwpLG51bGw9PT1oJiYoaD1hKSxbZCxoXX1jb3VudFJlbmRlcmFibGVJbmRleGVzKGwsYSl7Y29uc3QgZD1NYXRoLm1pbihsLmdldE5vdFRyaW1tZWRJbmRl'@;
put 'eGVzTGVuZ3RoKCksYSksaD1sLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLTEsLTEpO3JldHVybiBudWxsPT09aD8wOmwuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSsxfWNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVz'@;
put 'KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Q29scyl9Y291bnRSZW5kZXJhYmxlUm93cygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsdGhpcy5zZXR0aW5ncy5tYXhSb3dzKX1jb3VudE5vdEhp'@;
put 'ZGRlblJvd0luZGV4ZXMobCxhKXtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuY291bnRSZW5kZXJhYmxlUm93cygpKX1jb3VudE5vdEhpZGRlbkNvbHVtbkluZGV4ZXMobCxhKXtyZXR1cm4gdGhpcy5jb3VudE5vdEhp'@;
put 'ZGRlbkluZGV4ZXMobCxhLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLHRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpKX1jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLGQsaCl7aWYoaXNOYU4obCl8fGw8MClyZXR1cm4gMDtjb25zdCBmPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4'@;
put 'KGwsYSksdj1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7aWYoIU51bWJlci5pc0ludGVnZXIodikpcmV0dXJuIDA7bGV0IE09MDtyZXR1cm4gYTwwP009disxOmE+MCYmKE09aC12KSxNfWNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKXtjb25zdCBsPXRoaXMuaG90'@;
put 'LmNvdW50Q29scygpLGE9TWF0aC5taW4ocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlbkNvbHVtbkluZGV4ZXMoYSwtMSl9Y291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKXtjb25zdCBsPXRoaXMuaG90'@;
put 'LmNvdW50Um93cygpLGE9TWF0aC5taW4ocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3AsMTApLGwpLTE7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Sb3dJbmRleGVzKGEsLTEpfWNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCl7Y29uc3QgbD10aGlzLmhvdC5jb3Vu'@;
put 'dFJvd3MoKSxhPU1hdGgubWF4KGwtcGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZFJvd3NCb3R0b20sMTApLDApO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhhLDEpfWNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGwsYSl7bGV0IGQ9MDtmb3IobGV0IGg9bDto'@;
put 'PD1hO2grKyludWxsIT09dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSYmKGQrPTEpO3JldHVybiBkfWNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGwsYSl7bGV0IGQ9MDtmb3IobGV0IGg9bDtoPD1hO2grKyludWxsIT09dGhpcy5o'@;
put 'b3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSYmKGQrPTEpO3JldHVybiBkfWdldFN0eWxlc0hhbmRsZXIoKXtyZXR1cm4gdGhpcy5fd3Quc3R5bGVzSGFuZGxlcn1nZXREZWZhdWx0Um93SGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0LnN0eWxlc0hhbmRs'@;
put 'ZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpfWFkZENsYXNzTmFtZVRvTGljZW5zZUVsZW1lbnQobCl7dmFyIGE7Y29uc3QgZD1udWxsPT09KGE9dGhpcy5ob3Qucm9vdEVsZW1lbnQucGFyZW50Tm9kZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEucXVlcnlTZWxlY3RvcigiLmhvdC1kaXNwbGF5LWxp'@;
put 'Y2Vuc2UtaW5mbyIpO2QmJlRpKGQsbCl9cmVtb3ZlQ2xhc3NOYW1lRnJvbUxpY2Vuc2VFbGVtZW50KGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuaG90LnJvb3RFbGVtZW50LnBhcmVudE5vZGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3IoIi5ob3QtZGlzcGxh'@;
put 'eS1saWNlbnNlLWluZm8iKTtkJiZjYShkLGwpfWlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpe2NvbnN0IGw9dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpK3RoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxhPXRoaXMuY291bnROb3RIaWRk'@;
put 'ZW5GaXhlZENvbHVtbnNTdGFydCgpO3JldHVybiB0aGlzLmhvdC5jb3VudFJlbmRlcmVkUm93cygpPmwmJnRoaXMuaG90LmNvdW50UmVuZGVyZWRDb2xzKCk+YX1pbml0aWFsaXplV2Fsa29udGFibGUoKXtjb25zdCBsPXthcmlhVGFnczp0aGlzLnNldHRpbmdzLmFyaWFUYWdzLHJ0bE1vZGU6'@;
put 'dGhpcy5ob3QuaXNSdGwoKSxleHRlcm5hbFJvd0NhbGN1bGF0b3I6dGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIpJiZ0aGlzLmhvdC5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIikuaXNFbmFibGVkKCksdGFibGU6VHUoYzMsdGhpcyksaXNEYXRhVmlld0luc3RhbmNlOigpPT5sUCh0'@;
put 'aGlzLmhvdCkscHJldmVudE92ZXJmbG93OigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRPdmVyZmxvdyxwcmV2ZW50V2hlZWw6KCk9PnRoaXMuc2V0dGluZ3MucHJldmVudFdoZWVsLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOigpPT50aGlzLnNldHRpbmdzLnZpZXdwb3J0Q29s'@;
put 'dW1uUmVuZGVyaW5nVGhyZXNob2xkLHZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkOigpPT50aGlzLnNldHRpbmdzLnZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkLGRhdGE6KGYsdik9PnRoaXMuaG90LmdldERhdGFBdENlbGwoLi4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJs'@;
put 'ZVRvVmlzdWFsSW5kZXgoZix2KSksdG90YWxSb3dzOigpPT50aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSx0b3RhbENvbHVtbnM6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGZpeGVkQ29sdW1uc1N0YXJ0OigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3Rh'@;
put 'cnQoKSxmaXhlZFJvd3NUb3A6KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKSxmaXhlZFJvd3NCb3R0b206KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4'@;
put 'ZWRDb2x1bW5zU3RhcnQ+MHx8bC5yb3dIZWFkZXJzKCkubGVuZ3RoPjAsc2hvdWxkUmVuZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3A+MHx8bC5jb2x1bW5IZWFkZXJzKCkubGVuZ3RoPjAsc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheTooKT0+dGhpcy5zZXR0'@;
put 'aW5ncy5maXhlZFJvd3NCb3R0b20+MCxtaW5TcGFyZVJvd3M6KCk9PnRoaXMuc2V0dGluZ3MubWluU3BhcmVSb3dzLHJlbmRlckFsbFJvd3M6dGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxSb3dzLHJlbmRlckFsbENvbHVtbnM6dGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxDb2x1bW5zLHJvd0hlYWRl'@;
put 'cnM6KCk9Pntjb25zdCBmPVtdO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJmYucHVzaCgodixNKT0+e2NvbnN0IEQ9dj49MD90aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpOnY7dGhpcy5hcHBlbmRSb3dIZWFkZXIoRCxNKX0p'@;
put 'LHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldFJvd0hlYWRlclJlbmRlcmVycyIsZiksQmQoY1AsdGhpcyxmLmxlbmd0aCksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmQ18oWUUsdGhpcyxtM2UpLmNhbGwodGhpcyk9PT10aGlzLmhvdC5jb3VudENvbHMoKSYmQ18oWUUsdGhp'@;
put 'cyxNZXQpLmNhbGwodGhpcyxUdShjUCx0aGlzKSksZn0sY29sdW1uSGVhZGVyczooKT0+e2NvbnN0IGY9W107cmV0dXJuIHRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKSYmZi5wdXNoKCh2LE0pPT57Y29uc3QgRD12Pj0wP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21S'@;
put 'ZW5kZXJhYmxlSW5kZXgodik6djt0aGlzLmFwcGVuZENvbEhlYWRlcihELE0pfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixmKSxCZChUSyx0aGlzLGYubGVuZ3RoKSxmfSxjb2x1bW5XaWR0aDpmPT57Y29uc3Qgdj10aGlzLmhvdC5jb2x1bW5J'@;
put 'bmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpO3JldHVybiB0aGlzLmhvdC5nZXRDb2xXaWR0aChudWxsPT09dj9mOnYpfSxyb3dIZWlnaHQ6Zj0+e2NvbnN0IHY9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTty'@;
put 'ZXR1cm4gdGhpcy5ob3QuZ2V0Um93SGVpZ2h0KG51bGw9PT12P2Y6dil9LHJvd0hlaWdodEJ5T3ZlcmxheU5hbWU6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZiksRD1udWxsPT09TT9mOk07cmV0dXJuIHRoaXMu'@;
put 'aG90LnJ1bkhvb2tzKCJtb2RpZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lIix0aGlzLmhvdC5nZXRSb3dIZWlnaHQoRCksRCx2KX0sY2VsbFJlbmRlcmVyOihmLHYsTSk9Pntjb25zdFtELFpdPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGYsdiksbmU9dGhpcy5o'@;
put 'b3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLEQsWiwhMSwibWV0YSIpO2xldCBjZT1ELGJlPVo7QXJyYXkuaXNBcnJheShuZSkmJihbY2UsYmVdPW5lKTtjb25zdCBFZT10aGlzLmhvdC5nZXRDZWxsTWV0YShjZSxiZSksQmU9dGhpcy5ob3QuY29sVG9Qcm9wKGJlKTtsZXQgcWU9'@;
put 'dGhpcy5ob3QuZ2V0RGF0YUF0Um93UHJvcChjZSxCZSk7dGhpcy5ob3QuaGFzSG9vaygiYmVmb3JlVmFsdWVSZW5kZXIiKSYmKHFlPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWYWx1ZVJlbmRlciIscWUsRWUpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVuZGVyZXIiLE0sRCxaLEJl'@;
put 'LHFlLEVlKSx0aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoRWUpKHRoaXMuaG90LE0sRCxaLEJlLHFlLEVlKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW5kZXJlciIsTSxELFosQmUscWUsRWUpfSxzZWxlY3Rpb25zOnRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQsaGlkZUJvcmRlck9u'@;
put 'TW91c2VEb3duT3ZlcjooKT0+dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbixvbldpbmRvd1Jlc2l6ZTooKT0+e3RoaXMuaG90JiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJnRoaXMuaG90LnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTooKT0+e3Ro'@;
put 'aXMuaG90JiYhdGhpcy5ob3QuaXNEZXN0cm95ZWQmJmo3KHRoaXMuaG90LnJvb3RFbGVtZW50KSYmdGhpcy5ob3QucmVmcmVzaERpbWVuc2lvbnMoKX0sb25DZWxsTW91c2VEb3duOihmLHYsTSxEKT0+e2NvbnN0IFo9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRz'@;
put 'KHYpLG5lPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuYWN0aXZlV3Q9RCxCZChDZyx0aGlzLCEwKSxCZChTXyx0aGlzLHt4OmYuY2xpZW50WCx5OmYuY2xpZW50WX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGYs'@;
put 'WixNLG5lKSwhUG0oZikmJihmM2UoZix7Y29vcmRzOlosc2VsZWN0aW9uOnRoaXMuaG90LnNlbGVjdGlvbixjb250cm9sbGVyOm5lLGNlbGxDb29yZHNGYWN0b3J5OihjZSxiZSk9PnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGNlLGJlKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9u'@;
put 'Q2VsbE1vdXNlRG93biIsZixaLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxDb250ZXh0TWVudTooZix2LE0sRCk9Pntjb25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KTt0aGlzLmFjdGl2ZVd0PUQsQmQoQ2csdGhpcywhMSksdGhp'@;
put 'cy5ob3Quc2VsZWN0aW9uLmlzSW5Qcm9ncmVzcygpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uZmluaXNoKCksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IixmLFosTSksIVBtKGYpJiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGYs'@;
put 'WixNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsTW91c2VPdXQ6KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModik7dGhpcy5hY3RpdmVXdD1ELHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU91'@;
put 'dCIsZixaLE0pLCFQbShmKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlT3V0IixmLFosTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3ZlcjooZix2LE0sRCk9Pntjb25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENv'@;
put 'b3Jkcyh2KSxuZT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTt0aGlzLmFjdGl2ZVd0PUQsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZixaLE0sbmUpLCFQbShmKSYmKFR1KENnLHRoaXMpJiYoIVR1KFNfLHRoaXMpfHxUdShTXyx0aGlzKS54IT09Zi5jbGll'@;
put 'bnRYfHxUdShTXyx0aGlzKS55IT09Zi5jbGllbnRZKSYmZjNlKGYse2Nvb3JkczpaLHNlbGVjdGlvbjp0aGlzLmhvdC5zZWxlY3Rpb24sY29udHJvbGxlcjpuZSxjZWxsQ29vcmRzRmFjdG9yeTooY2UsYmUpPT50aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhjZSxiZSl9KSx0aGlzLmhvdC5y'@;
put 'dW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLGYsWixNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0LEJkKFNfLHRoaXMsbnVsbCkpfSxvbkNlbGxNb3VzZVVwOihmLHYsTSxEKT0+e2NvbnN0IFo9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHYpO3RoaXMu'@;
put 'YWN0aXZlV3Q9RCx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VVcCIsZixaLE0pLCFQbShmKSYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiYodGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VVcCIsZixaLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNl'@;
put 'bGxDb3JuZXJNb3VzZURvd246Zj0+e2YucHJldmVudERlZmF1bHQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGYpfSxvbkNlbGxDb3JuZXJEYmxDbGljazpmPT57Zi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2Vs'@;
put 'bENvcm5lckRibENsaWNrIixmKX0sYmVmb3JlRHJhdzooZix2KT0+dGhpcy5iZWZvcmVSZW5kZXIoZix2KSxvbkRyYXc6Zj0+dGhpcy5hZnRlclJlbmRlcihmKSxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseTooZix2KT0+e2NvbnN0IE09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIs'@;
put 'RD1mPDA7bGV0IFo9ZjtyZXR1cm4gRHx8KFo9TS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpLG51bGwhPT1aKT8oWj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5IixaLHYpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNj'@;
put 'cm9sbCIpLEQ/WjpNLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWikpOmZ9LG9uQmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHk6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLEQ9ZjwwO2xldCBaPWY7cmV0dXJuIER8fChaPU0uZ2V0VmlzdWFs'@;
put 'RnJvbVJlbmRlcmFibGVJbmRleChmKSxudWxsIT09Wik/KFo9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixaLHYpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbCIpLEQ/WjpNLmdldFJlbmRlcmFibGVGcm9tVmlzdWFs'@;
put 'SW5kZXgoWikpOmZ9LG9uU2Nyb2xsVmVydGljYWxseTooKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGwiKX0sb25TY3JvbGxIb3Jpem9udGFsbHk6KCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJT'@;
put 'Y3JvbGxIb3Jpem9udGFsbHkiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGwiKX0sb25CZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczooKT0+dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiksb25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6'@;
put 'KGYsdixNKT0+e2NvbnN0IEQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsWj1mPDA7bGV0IG5lPWY7Wnx8KG5lPUQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSk7Y29uc3QgY2U9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsbmUsdixNKTty'@;
put 'ZXR1cm4gWj9jZTpELmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2UsMSkpfSxvbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjooZix2LE0pPT57Y29uc3QgRD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixaPWY8MDtsZXQg'@;
put 'bmU9ZjtafHwobmU9RC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpKTtjb25zdCBjZT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixuZSx2LE0pO3JldHVybiBaP2NlOkQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChELmdldE5l'@;
put 'YXJlc3ROb3RIaWRkZW5JbmRleChjZSwxKSl9LG9uQWZ0ZXJEcmF3U2VsZWN0aW9uOihmLHYsTSk9PntsZXQgRDtjb25zdFtaLG5lXT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChmLHYpLGNlPXRoaXMuaG90LnNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCk7'@;
put 'aWYoY2Uuc2l6ZSgpPjApe2NvbnN0IEVlPWNlLnBlZWtCeUluZGV4KE0/PzApO0Q9W0VlLmZyb20ucm93LEVlLmZyb20uY29sLEVlLnRvLnJvdyxFZS50by5jb2xdfXJldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcmF3U2VsZWN0aW9uIixaLG5lLEQsTSl9LG9uQmVmb3JlRHJhd0Jv'@;
put 'cmRlcnM6KGYsdik9Pntjb25zdFtNLEQsWixuZV09ZixjZT1bdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChNKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEQpLHRoaXMuaG90LnJvd0lu'@;
put 'ZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoWiksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChuZSldO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJhd0JvcmRlcnMiLGNlLHYpfSxvbkJlZm9yZVRv'@;
put 'dWNoU2Nyb2xsOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVG91Y2hTY3JvbGwiKSxvbkFmdGVyTW9tZW50dW1TY3JvbGw6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck1vbWVudHVtU2Nyb2xsIiksb25Nb2RpZnlSb3dIZWFkZXJXaWR0aDpmPT50aGlzLmhvdC5ydW5Ib29rcygi'@;
put 'bW9kaWZ5Um93SGVhZGVyV2lkdGgiLGYpLG9uTW9kaWZ5R2V0Q2VsbENvb3JkczooZix2LE0sRCk9Pntjb25zdCBaPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLG5lPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGNlPXY+PTA/bmUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2'@;
put 'LGJlPWY+PTA/Wi5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpOmYsRWU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGJlLGNlLE0sRCk7aWYoQXJyYXkuaXNBcnJheShFZSkpe2NvbnN0W0JlLHFlLHJ0LHB0XT1FZTtyZXR1cm5bQmU+PTA/Wi5nZXRSZW5k'@;
put 'ZXJhYmxlRnJvbVZpc3VhbEluZGV4KFouZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEJlLDEpKTpCZSxxZT49MD9uZS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG5lLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChxZSwxKSk6cWUscnQ+PTA/Wi5nZXRSZW5kZXJhYmxlRnJvbVZpc3Vh'@;
put 'bEluZGV4KFouZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHJ0LC0xKSk6cnQscHQ+PTA/bmUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChuZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgocHQsLTEpKTpwdF19fSxvbk1vZGlmeUdldENvb3Jkc0VsZW1lbnQ6KGYsdik9Pntjb25zdCBN'@;
put 'PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLEQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsWj12Pj0wP0QuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2LG5lPWY+PTA/TS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpOmYsY2U9dGhpcy5ob3QucnVuSG9va3MoIm1v'@;
put 'ZGlmeUdldENvb3Jkc0VsZW1lbnQiLG5lLFopO2lmKEFycmF5LmlzQXJyYXkoY2UpKXtjb25zdFtiZSxFZV09Y2U7cmV0dXJuW2JlPj0wP00uZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChNLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChiZSwxKSk6YmUsRWU+PTA/RC5nZXRSZW5kZXJh'@;
put 'YmxlRnJvbVZpc3VhbEluZGV4KEQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEVlLDEpKTpFZV19fSx2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTpmPT57bGV0IHY9dGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDtpZigiYXV0byI9PT12JiZ0aGlzLnNldHRp'@;
put 'bmdzLmZpeGVkUm93c1RvcCYmKHY9MTApLHY+MHx8ImF1dG8iPT09dil7Y29uc3QgTT10aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSxEPWYuc3RhcnRSb3csWj1mLmVuZFJvdztpZigibnVtYmVyIj09dHlwZW9mIHYpZi5zdGFydFJvdz1NYXRoLm1heChELXYsMCksZi5lbmRSb3c9TWF0aC5t'@;
put 'aW4oWit2LE0tMSk7ZWxzZSBpZigiYXV0byI9PT12KXtjb25zdCBuZT1NYXRoLm1heCgxLE1hdGguY2VpbChaL00qMTIpKTtmLnN0YXJ0Um93PU1hdGgubWF4KEQtbmUsMCksZi5lbmRSb3c9TWF0aC5taW4oWituZSxNLTEpfX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydFJvd0Nh'@;
put 'bGN1bGF0b3JPdmVycmlkZSIsZil9LHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOmY9PntsZXQgdj10aGlzLnNldHRpbmdzLnZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0O2lmKCJhdXRvIj09PXYmJnRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQmJih2PTEwKSx2'@;
put 'PjB8fCJhdXRvIj09PXYpe2NvbnN0IE09dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksRD1mLnN0YXJ0Q29sdW1uLFo9Zi5lbmRDb2x1bW47aWYoIm51bWJlciI9PXR5cGVvZiB2JiYoZi5zdGFydENvbHVtbj1NYXRoLm1heChELXYsMCksZi5lbmRDb2x1bW49TWF0aC5taW4oWit2LE0t'@;
put 'MSkpLCJhdXRvIj09PXYpe2NvbnN0IG5lPU1hdGgubWF4KDEsTWF0aC5jZWlsKFovTSo2KSk7Zi5zdGFydENvbHVtbj1NYXRoLm1heChELW5lLDApLGYuZW5kQ29sdW1uPU1hdGgubWluKForbmUsTS0xKX19dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9y'@;
put 'T3ZlcnJpZGUiLGYpfSxyb3dIZWFkZXJXaWR0aDooKT0+dGhpcy5zZXR0aW5ncy5yb3dIZWFkZXJXaWR0aCxjb2x1bW5IZWFkZXJIZWlnaHQ6KCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiKTtyZXR1cm4gdGhpcy5zZXR0aW5ncy5jb2x1'@;
put 'bW5IZWFkZXJIZWlnaHR8fGZ9fTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIixsKSx0aGlzLl93dD1uZXcgeEsobCksdGhpcy5hY3RpdmVXdD10aGlzLl93dDtjb25zdCBhPXRoaXMuX3d0Lnd0VGFibGUuc3ByZWFkZXIse3dpZHRoOmQsaGVpZ2h0Omh9PXRoaXMu'@;
put 'aG90LnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc2V0TGFzdFNpemUoZCxoKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZG93biIsZj0+e2YudGFyZ2V0PT09YSYmMz09PWYud2hpY2gmJmYuc3RvcFByb3BhZ2F0aW9uKCl9KSx0'@;
put 'aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsImNvbnRleHRtZW51IixmPT57Zi50YXJnZXQ9PT1hJiYzPT09Zi53aGljaCYmZi5zdG9wUHJvcGFnYXRpb24oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3Vt'@;
put 'ZW50RWxlbWVudCwiY2xpY2siLCgpPT57dGhpcy5zZXR0aW5ncy5vYnNlcnZlRE9NVmlzaWJpbGl0eSYmdGhpcy5fd3QuZHJhd0ludGVycnVwdGVkJiZ0aGlzLmhvdC5yZW5kZXIoKX0pfWlzVGV4dFNlbGVjdGlvbkFsbG93ZWQobCl7aWYoQ0UobCkpcmV0dXJuITA7Y29uc3QgYT1SbShsLHRo'@;
put 'aXMuX3d0Lnd0VGFibGUuc3ByZWFkZXIpO3JldHVybiEhKCEwPT09dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmYXx8ImNlbGwiPT09dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmdGhpcy5pc1NlbGVjdGVkT25seUNlbGwoKSYmYXx8IXRoaXMuc2V0dGluZ3MuZnJh'@;
put 'Z21lbnRTZWxlY3Rpb24mJnRoaXMuaXNDZWxsRWRpdGVkKCkmJnRoaXMuaXNTZWxlY3RlZE9ubHlDZWxsKCkpfWlzTW91c2VEb3duKCl7cmV0dXJuIFR1KENnLHRoaXMpfWlzU2VsZWN0ZWRPbmx5Q2VsbCgpe3ZhciBsLGE7cmV0dXJuIG51bGwhPT0obD1udWxsPT09KGE9dGhpcy5ob3QuZ2V0'@;
put 'U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGVDZWxsKCkpJiZ2b2lkIDAhPT1sJiZsfWlzQ2VsbEVkaXRlZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCk7cmV0dXJuIGwmJmwuaXNPcGVuZWQoKX1iZWZvcmVSZW5kZXIobCxhKXts'@;
put 'JiZ0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld1JlbmRlciIsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyLGEpfWFmdGVyUmVuZGVyKGwpe2wmJnRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclZpZXdSZW5kZXIiLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcil9YXBwZW5kUm93SGVhZGVyKGws'@;
put 'YSl7aWYoYS5maXJzdENoaWxkKXtjb25zdCBkPWEuZmlyc3RDaGlsZDtpZighcGEoZCwicmVsYXRpdmUiKSlyZXR1cm4geHAoYSksdm9pZCB0aGlzLmFwcGVuZFJvd0hlYWRlcihsLGEpO3RoaXMudXBkYXRlQ2VsbEhlYWRlcihkLnF1ZXJ5U2VsZWN0b3IoIi5yb3dIZWFkZXIiKSxsLHRoaXMu'@;
put 'aG90LmdldFJvd0hlYWRlcil9ZWxzZXtjb25zdHtyb290RG9jdW1lbnQ6ZCxnZXRSb3dIZWFkZXI6aH09dGhpcy5ob3QsZj1kLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHY9ZC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zi5jbGFzc05hbWU9InJlbGF0aXZlIix2LmNsYXNzTmFtZT0icm93SGVhZGVy'@;
put 'Iix0aGlzLnVwZGF0ZUNlbGxIZWFkZXIodixsLGgpLGYuYXBwZW5kQ2hpbGQodiksYS5hcHBlbmRDaGlsZChmKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGwsYSl9YXBwZW5kQ29sSGVhZGVyKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1h'@;
put 'cmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuaG90LmdldENvbEhlYWRlcixoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowO2NvbnN0IGY9KCk9Pntjb25zdCB2PWw+PTA/dGhpcy5ob3QuZ2V0Q29sdW1uTWV0YShsKS5oZWFkZXJD'@;
put 'bGFzc05hbWU6bnVsbDtyZXR1cm4gdj92LnNwbGl0KCIgIik6W119O2lmKGEuZmlyc3RDaGlsZCl7Y29uc3Qgdj1hLmZpcnN0Q2hpbGQ7cGEodiwicmVsYXRpdmUiKT8odGhpcy51cGRhdGVDZWxsSGVhZGVyKHYucXVlcnlTZWxlY3RvcigiLmNvbEhlYWRlciIpLGwsZCxoKSx2LmNsYXNzTmFt'@;
put 'ZT0iIixUaSh2LFsicmVsYXRpdmUiLC4uLmYoKV0pKTooeHAoYSksdGhpcy5hcHBlbmRDb2xIZWFkZXIobCxhLGQsaCkpfWVsc2V7Y29uc3R7cm9vdERvY3VtZW50OnZ9PXRoaXMuaG90LE09di5jcmVhdGVFbGVtZW50KCJkaXYiKSxEPXYuY3JlYXRlRWxlbWVudCgic3BhbiIpLFo9ZigpO00u'@;
put 'Y2xhc3NMaXN0LmFkZCgicmVsYXRpdmUiLC4uLlopLEQuY2xhc3NOYW1lPSJjb2xIZWFkZXIiLHRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MmJih2YShNLCJyb2xlIiwicHJlc2VudGF0aW9uIiksdmEoRCwicm9sZSIsInByZXNlbnRhdGlvbiIpKSx0aGlzLnVwZGF0ZUNlbGxIZWFkZXIoRCxsLGQs'@;
put 'aCksTS5hcHBlbmRDaGlsZChEKSxhLmFwcGVuZENoaWxkKE0pfXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldENvbEhlYWRlciIsbCxhLGgpfXVwZGF0ZUNlbGxIZWFkZXIobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1sz'@;
put 'XTowLGY9YTtjb25zdCB2PXRoaXMuX3d0Lnd0T3ZlcmxheXMuZ2V0UGFyZW50T3ZlcmxheShsKXx8dGhpcy5fd3Q7bC5wYXJlbnROb2RlJiYocGEobCwiY29sSGVhZGVyIik/Zj12Lnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoYSk6cGEobCwicm93SGVhZGVyIikmJihm'@;
put 'PXYud3RUYWJsZS5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKSkpLGY+LTE/QjcobCxkKGEsaCkpOihPbShsLCJceGEwIiksVGkobCwiY29ybmVySGVhZGVyIikpfW1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3Bh'@;
put 'Y2VXaWR0aCgpLWw7cmV0dXJuIGQ+MD9kOjB9bWF4aW11bVZpc2libGVFbGVtZW50SGVpZ2h0KGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sO3JldHVybiBkPjA/ZDowfXNldExhc3RTaXplKGwsYSl7QmQoQUssdGhpcyxsKSxCZChrSyx0aGlz'@;
put 'LGEpfWdldExhc3RTaXplKCl7cmV0dXJue3dpZHRoOlR1KEFLLHRoaXMpLGhlaWdodDpUdShrSyx0aGlzKX19Z2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90'@;
put 'LnJvd0luZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpKTtyZXR1cm4gbC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYT8/MCwxKX1nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCl7aWYoIXRo'@;
put 'aXMuX3d0Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixhPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpKTtyZXR1cm4gbC5n'@;
put 'ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYT8/dGhpcy5ob3QuY291bnRSb3dzKCktMSwtMSl9Z2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpKTtyZXR1cm4gbC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYT8/MCwxKX1nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl7'@;
put 'aWYoIXRoaXMuX3d0Lnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixhPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFRhYmxlLmdldExhc3RSZW5kZXJlZENvbHVt'@;
put 'bigpKTtyZXR1cm4gbC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYT8/dGhpcy5ob3QuY291bnRDb2xzKCktMSwtMSl9Z2V0Rmlyc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53'@;
put 'dFNjcm9sbC5nZXRGaXJzdFZpc2libGVSb3coKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RWaXNpYmxlUm93KCkpfWdldEZpcnN0RnVs'@;
put 'bHlWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCkpfWdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5o'@;
put 'b3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJv'@;
put 'bVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKSl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53'@;
put 'dFNjcm9sbC5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFBhcnRp'@;
put 'YWxseVZpc2libGVDb2x1bW4oKSl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigp'@;
put 'KX1nZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gVHUoVEssdGhpcyl9Z2V0Um93SGVhZGVyc0NvdW50KCl7cmV0dXJuIFR1KGNQLHRoaXMpfWdldFZpZXdwb3J0V2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCl9Z2V0V29ya3NwYWNlV2lk'@;
put 'dGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpfWdldFZpZXdwb3J0SGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKX1nZXRXb3Jrc3BhY2VIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9y'@;
put 'dC5nZXRXb3Jrc3BhY2VIZWlnaHQoKX1nZXRFbGVtZW50T3ZlcmxheU5hbWUobCl7dmFyIGE7cmV0dXJuKG51bGwhPT0oYT10aGlzLl93dC53dE92ZXJsYXlzLmdldFBhcmVudE92ZXJsYXkobCkpJiZ2b2lkIDAhPT1hP2E6dGhpcy5fd3QpLnd0VGFibGUubmFtZX1nZXRPdmVybGF5QnlOYW1l'@;
put 'KGwpe3JldHVybiB0aGlzLl93dC5nZXRPdmVybGF5QnlOYW1lKGwpfWdldEFjdGl2ZU92ZXJsYXlOYW1lKCl7cmV0dXJuIHRoaXMuX3d0LmFjdGl2ZU92ZXJsYXlOYW1lfWlzVmlzaWJsZSgpe3JldHVybiB0aGlzLl93dC53dFRhYmxlLmlzVmlzaWJsZSgpfWhhc1ZlcnRpY2FsU2Nyb2xsKCl7'@;
put 'cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaGFzVmVydGljYWxTY3JvbGwoKX1oYXNIb3Jpem9udGFsU2Nyb2xsKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaGFzSG9yaXpvbnRhbFNjcm9sbCgpfWdldFRhYmxlV2lkdGgoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRXaWR0'@;
put 'aCgpfWdldFRhYmxlSGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuZ2V0SGVpZ2h0KCl9Z2V0VGFibGVPZmZzZXQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VPZmZzZXQoKX1nZXRSb3dIZWFkZXJXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdw'@;
put 'b3J0LmdldFJvd0hlYWRlcldpZHRoKCl9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl9aXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuaXNWZXJ0'@;
put 'aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCl9aXNIb3Jpem9udGFsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpfWRlc3Ryb3koKXt0aGlzLl93dC5kZXN0cm95KCksdGhpcy5ldmVudE1h'@;
put 'bmFnZXIuZGVzdHJveSgpfX07XygxMzkwOCk7Y29uc3QgdjNlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIsREs9djNlLmxlbmd0aDtmdW5jdGlvbiBkUChjKXtsZXQgZCxsPWMrMSxhPSIiO2Zvcig7bD4wOylkPShsLTEpJURLLGE9U3RyaW5nLmZyb21DaGFyQ29kZSg2NStkKSthLGw9'@;
put 'cGFyc2VJbnQoKGwtZCkvREssMTApO3JldHVybiBhfWZ1bmN0aW9uIFRldChjKXtsZXQgbD0wO2lmKGMpZm9yKGxldCBhPTAsZD1jLmxlbmd0aC0xO2E8Yy5sZW5ndGg7YSs9MSxkLT0xKWwrPURLKipkKih2M2UuaW5kZXhPZihjW2FdKSsxKTtyZXR1cm4gbC09MSxsfWZ1bmN0aW9uIEFldCgp'@;
put 'e2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25z'@;
put 'dCBmPVtdO2ZvcihoPTA7aDxsO2grKylmLnB1c2goZFAoaCkrKGQrMSkpO2EucHVzaChmKX1yZXR1cm4gYX1mdW5jdGlvbiBrZXQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTAwLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2'@;
put 'b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7Y29uc3QgYT1bXTtsZXQgZCxoO2ZvcihkPTA7ZDxjO2QrKyl7Y29uc3QgZj17fTtmb3IoaD0wO2g8bDtoKyspZltgcHJvcCR7aH1gXT1kUChoKSsoZCsxKTthLnB1c2goZil9cmV0dXJuIGF9ZnVuY3Rpb24gRGV0KGMsbCl7Y29u'@;
put 'c3QgYT1bXTtsZXQgZDtmb3IobGV0IGg9MDtoPGM7aCsrKXtkPVtdO2ZvcihsZXQgZj0wO2Y8bDtmKyspZC5wdXNoKCIiKTthLnB1c2goZCl9cmV0dXJuIGF9ZnVuY3Rpb24gSUsoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd'@;
put 'OjAsYT1jO2NvbnN0IGQ9W107cmV0dXJuKCFBcnJheS5pc0FycmF5KGMpfHwhQXJyYXkuaXNBcnJheShjWzBdKSkmJihhPVtjXSksYS5mb3JFYWNoKChoLGYpPT57QXJyYXkuaXNBcnJheShoKT9oLmZvckVhY2goKHYsTSk9PntkLnB1c2goW2YrbCxNLHZdKX0pOk9iamVjdC5rZXlzKGgpLmZv'@;
put 'ckVhY2godj0+e2QucHVzaChbZitsLHYsaFt2XV0pfSl9KSxkfWZ1bmN0aW9uIFJLKGMpe2xldCBsPTA7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJihjWzBdJiZBcnJheS5pc0FycmF5KGNbMF0pP2w9Y1swXS5sZW5ndGg6Y1swXSYmcWEoY1swXSkmJihsPVZPKGNbMF0pKSksbH1mdW5jdGlv'@;
put 'biBiM2UoYyl7cmV0dXJuISEoQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGgmJmMuZXZlcnkobD0+QXJyYXkuaXNBcnJheShsKSkpfWZ1bmN0aW9uIHkzZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYmYy5ldmVyeShsPT4ib2JqZWN0Ij09dHlwZW9mIGwmJiFBcnJh'@;
put 'eS5pc0FycmF5KGwpJiZudWxsIT09bCkpfWZ1bmN0aW9uIEdFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBJZXQoYyl7dmFyIGw9ZnVuY3Rpb24gUmV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAw'@;
put 'IT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1i'@;
put 'ZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBPZXQ9Y2xhc3Mg'@;
put 'TGV0e2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtHRSh0aGlzLCJob3QiLHZvaWQgMCksR0UodGhpcywiZGF0YSIsdm9pZCAwKSxHRSh0aGlzLCJkYXRhVHlwZSIsImFycmF5IiksR0UodGhpcywi'@;
put 'Y29sVG9Qcm9wIiwoKT0+e30pLEdFKHRoaXMsInByb3BUb0NvbCIsKCk9Pnt9KSx0aGlzLmhvdD1sLHRoaXMuZGF0YT1hfW1vZGlmeVJvd0RhdGEobCl7bGV0IGE7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeVJvd0RhdGEiKSYmKGE9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJv'@;
put 'd0RhdGEiLGwpKSx2b2lkIDA9PT1hfHxOdW1iZXIuaXNJbnRlZ2VyKGEpP3RoaXMuZGF0YVtsXTphfWdldERhdGEoKXtyZXR1cm4gdGhpcy5kYXRhJiYwIT09dGhpcy5kYXRhLmxlbmd0aD90aGlzLmdldEJ5UmFuZ2UobnVsbCxudWxsLGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pOnRoaXMuZGF0YX1zZXREYXRhKGwpe3RoaXMuZGF0YT1sfWdldEF0Q29sdW1uKGwpe2NvbnN0IGE9W107cmV0dXJuIFluKHRoaXMuZGF0YSwoZCxoKT0+e2NvbnN0IGY9dGhpcy5nZXRBdENlbGwoaCxsKTthLnB1c2goZil9KSxhfWdldEF0Um93KGws'@;
put 'YSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2NvbnN0IGY9dm9pZCAwPT09YSYmdm9pZCAwPT09ZCx7ZGF0YURvdE5vdGF0aW9uOnZ9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7bGV0IE09bnVsbCxEPW51bGw7aWYoTT10'@;
put 'aGlzLm1vZGlmeVJvd0RhdGEobCksQXJyYXkuaXNBcnJheShNKSlEPVtdLGY/TS5mb3JFYWNoKChaLG5lKT0+e0RbbmVdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxuZSxNKX0pOiRvKGEsZCxaPT57RFtaLWFdPXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxaLE0pfSk7ZWxzZSBpZihxYShN'@;
put 'KXx8bWwoTSkpaWYoRD1oP1tdOnt9LCFmfHxoKXtjb25zdCBuZT10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCktMTskbygwLG5lLGNlPT57Y29uc3QgYmU9dGhpcy5jb2xUb1Byb3AoY2UpO2lmKGNlPj0oYXx8MCkmJmNlPD0oZHx8bmUpJiYhTnVtYmVyLmlzSW50ZWdlcihiZSkpe2NvbnN0IEVl'@;
put 'PXRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxiZSxNKTtoP0QucHVzaChFZSk6dj9OTyhELGJlLEVlKTpEW2JlXT1FZX19KX1lbHNlIFhhKE0sKFosbmUpPT57Y29uc3QgY2U9dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLG5lLE0pO3Y/Tk8oRCxuZSxjZSk6RFtuZV09Y2V9KTtyZXR1cm4gRH1z'@;
put 'ZXRBdENlbGwobCxhLGQpe2lmKCEobD49dGhpcy5jb3VudFJvd3MoKXx8YT49dGhpcy5jb3VudEZpcnN0Um93S2V5cygpKSl7aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBoPUZkKGQpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixs'@;
put 'LGEsaCwic2V0IiksaC5pc1RvdWNoZWQoKSYmKGQ9aC52YWx1ZSl9WyJfX3Byb3RvX18iLCJjb25zdHJ1Y3RvciIsInByb3RvdHlwZSJdLmluY2x1ZGVzKGwpfHwoTnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF1bYV09ZDpOTyh0aGlzLmRhdGFbbF0sYSxkKSl9fWdldEF0UGh5c2lj'@;
put 'YWxDZWxsKGwsYSxkKXtsZXQgaD1udWxsO2lmKGQpaWYoInN0cmluZyI9PXR5cGVvZiBhKXtjb25zdHtkYXRhRG90Tm90YXRpb246Zn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtoPWY/QjJlKGQsYSk6ZFthXX1lbHNlIGg9ImZ1bmN0aW9uIj09dHlwZW9mIGE/YShkKTpkW2FdO2lmKHRoaXMu'@;
put 'aG90Lmhhc0hvb2soIm1vZGlmeVNvdXJjZURhdGEiKSl7Y29uc3QgZj1GZChoKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlRGF0YSIsbCxhLGYsImdldCIpLGYuaXNUb3VjaGVkKCkmJihoPWYudmFsdWUpfXJldHVybiBofWdldEF0Q2VsbChsLGEpe2NvbnN0IGQ9dGhpcy5tb2Rp'@;
put 'ZnlSb3dEYXRhKGwpO3JldHVybiB0aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsdGhpcy5jb2xUb1Byb3AoYSksZCl9Z2V0QnlSYW5nZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLGE9YXJndW1lbnRzLmxlbmd0aD4x'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLGg9ITEsZj1udWxsLHY9bnVsbCxNPW51bGwsRD1udWxsO251bGw9PT1sfHxudWxsPT09YT8oaD0hMCxmPTAsTT10'@;
put 'aGlzLmNvdW50Um93cygpLTEpOihmPU1hdGgubWluKGwucm93LGEucm93KSx2PU1hdGgubWluKGwuY29sLGEuY29sKSxNPU1hdGgubWF4KGwucm93LGEucm93KSxEPU1hdGgubWF4KGwuY29sLGEuY29sKSk7Y29uc3QgWj1bXTtyZXR1cm4gJG8oZixNLG5lPT57Wi5wdXNoKGg/dGhpcy5nZXRB'@;
put 'dFJvdyhuZSx2b2lkIDAsdm9pZCAwLGQpOnRoaXMuZ2V0QXRSb3cobmUsdixELGQpKX0pLFp9Y291bnRSb3dzKCl7aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlTGVuZ3RoIikpe2NvbnN0IGw9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZUxlbmd0aCIpO2lmKE51bWJl'@;
put 'ci5pc0ludGVnZXIobCkpcmV0dXJuIGx9cmV0dXJuIHRoaXMuZGF0YS5sZW5ndGh9Y291bnRGaXJzdFJvd0tleXMoKXtyZXR1cm4gUksodGhpcy5kYXRhKX1kZXN0cm95KCl7dGhpcy5kYXRhPW51bGwsdGhpcy5ob3Q9bnVsbH19O18oMjAyOTEpO2NvbnN0IF8zZT17X2xvY2FsSG9va3M6T2Jq'@;
put 'ZWN0LmNyZWF0ZShudWxsKSxhZGRMb2NhbEhvb2soYyxsKXtyZXR1cm4gdGhpcy5fbG9jYWxIb29rc1tjXXx8KHRoaXMuX2xvY2FsSG9va3NbY109W10pLHRoaXMuX2xvY2FsSG9va3NbY10ucHVzaChsKSx0aGlzfSxydW5Mb2NhbEhvb2tzKGMsbCxhLGQsaCxmLHYpe2lmKHRoaXMuX2xvY2Fs'@;
put 'SG9va3NbY10pe2NvbnN0IE09dGhpcy5fbG9jYWxIb29rc1tjXS5sZW5ndGg7Zm9yKGxldCBEPTA7RDxNO0QrKylGTyh0aGlzLl9sb2NhbEhvb2tzW2NdW0RdLHRoaXMsbCxhLGQsaCxmLHYpfX0sY2xlYXJMb2NhbEhvb2tzKCl7cmV0dXJuIHRoaXMuX2xvY2FsSG9va3M9e30sdGhpc319O1Rw'@;
put 'KF8zZSwiTUlYSU5fTkFNRSIsImxvY2FsSG9va3MiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgeTE9XzNlO2Z1bmN0aW9uIHczZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRmV0KGMpe3ZhciBsPWZ1bmN0aW9uIEhldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8'@;
put 'IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw'@;
put 'cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln'@;
put 'dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgSjd7Y29uc3RydWN0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt3M2UodGhpcywiaW5kZXhlZFZhbHVlcyIsW10pLHczZSh0aGlzLCJpbml0'@;
put 'VmFsdWVPckZuIix2b2lkIDApLHRoaXMuaW5pdFZhbHVlT3JGbj1sfWdldFZhbHVlcygpe3JldHVybiB0aGlzLmluZGV4ZWRWYWx1ZXN9Z2V0VmFsdWVBdEluZGV4KGwpe2NvbnN0IGE9dGhpcy5pbmRleGVkVmFsdWVzO2lmKGw8YS5sZW5ndGgpcmV0dXJuIGFbbF19c2V0VmFsdWVzKGwpe3Ro'@;
put 'aXMuaW5kZXhlZFZhbHVlcz1sLnNsaWNlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1zZXRWYWx1ZUF0SW5kZXgobCxhKXtyZXR1cm4gbDx0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoJiYodGhpcy5pbmRleGVkVmFsdWVzW2xdPWEsdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2Ui'@;
put 'KSwhMCl9Y2xlYXIoKXt0aGlzLnNldERlZmF1bHRWYWx1ZXMoKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXRWYWx1ZXMoKS5sZW5ndGh9c2V0RGVmYXVsdFZhbHVlcygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlz'@;
put 'LmluZGV4ZWRWYWx1ZXMubGVuZ3RoO3RoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg9MCxtbCh0aGlzLmluaXRWYWx1ZU9yRm4pPyRvKGwtMSxhPT50aGlzLmluZGV4ZWRWYWx1ZXMucHVzaCh0aGlzLmluaXRWYWx1ZU9yRm4oYSkpKTokbyhsLTEsKCk9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNo'@;
put 'KHRoaXMuaW5pdFZhbHVlT3JGbikpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9aW5pdChsKXtyZXR1cm4gdGhpcy5zZXREZWZhdWx0VmFsdWVzKGwpLHRoaXMucnVuTG9jYWxIb29rcygiaW5pdCIpLHRoaXN9aW5zZXJ0KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1yZW1v'@;
put 'dmUoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuaW5kZXhlZFZhbHVlcz1udWxsLHRoaXMuaW5pdFZhbHVlT3JGbj1udWxsfX1mdW5jdGlvbiBMSyhjLGwsYSl7cmV0dXJuWy4uLmMuc2xpY2UoMCxsKSwuLi5hLC4u'@;
put 'LmMuc2xpY2UobCldfWZ1bmN0aW9uICRFKGMsbCl7cmV0dXJuIERtKGMsYT0+ITE9PT1sLmluY2x1ZGVzKGEpKX1mdW5jdGlvbiBPSyhjLGwpe3JldHVybiB5cyhjLGE9PmEtbC5maWx0ZXIoZD0+ZDxhKS5sZW5ndGgpfWZ1bmN0aW9uIFBLKGMsbCl7Y29uc3QgYT1sWzBdLGQ9bC5sZW5ndGg7'@;
put 'cmV0dXJuIHlzKGMsaD0+aD49YT9oK2Q6aCl9VGwoSjcseTEpO2NsYXNzIEMzZSBleHRlbmRzIEo3e2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7Y29uc3QgZD1QSyh0aGlzLmluZGV4ZWRWYWx1ZXMsYSk7dGhpcy5pbmRleGVkVmFsdWVzPUxLKGQsbCxhKSxzdXBlci5p'@;
put 'bnNlcnQobCxhKX1yZW1vdmUobCl7Y29uc3QgYT0kRSh0aGlzLmluZGV4ZWRWYWx1ZXMsbCk7dGhpcy5pbmRleGVkVmFsdWVzPU9LKGEsbCksc3VwZXIucmVtb3ZlKGwpfX1mdW5jdGlvbiBGSyhjLGwsYSxkKXtjb25zdCBoPWEubGVuZ3RoP2FbMF06dm9pZCAwO3JldHVyblsuLi5jLnNsaWNl'@;
put 'KDAsaCksLi4uYS5tYXAoKGYsdik9Pm1sKGQpP2QoZix2KTpkKSwuLi52b2lkIDA9PT1oP1tdOmMuc2xpY2UoaCldfWZ1bmN0aW9uIEhLKGMsbCl7cmV0dXJuIERtKGMsKGEsZCk9PiExPT09bC5pbmNsdWRlcyhkKSl9Y2xhc3MgVW0gZXh0ZW5kcyBKN3tpbnNlcnQobCxhKXt0aGlzLmluZGV4'@;
put 'ZWRWYWx1ZXM9RksodGhpcy5pbmRleGVkVmFsdWVzLDAsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9SEsodGhpcy5pbmRleGVkVmFsdWVzLGwpLHN1cGVyLnJlbW92ZShsKX19Y2xhc3MgaFAgZXh0ZW5kcyBVbXtj'@;
put 'b25zdHJ1Y3Rvcigpe3N1cGVyKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfWdldEhpZGRlbkluZGV4ZXMoKXtyZXR1cm4gS3UodGhpcy5nZXRWYWx1ZXMoKSwobCxhLGQpPT4oYSYmbC5wdXNoKGQpLGwpLFtdKX19Y2xhc3MgZlAgZXh0'@;
put 'ZW5kcyBKN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gTmV0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBWZXQoYyl7dmFyIGw9ZnVuY3Rpb24gQmV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By'@;
put 'aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu'@;
put 'ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs'@;
put 'Y30odGhpcywib3JkZXJPZkluZGV4ZXMiLFtdKX1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+dGhpcy5pbmRleGVkVmFsdWVzW2xdKX1zZXRWYWx1ZXMobCl7dGhpcy5vcmRlck9mSW5kZXhlcz1bLi4uQXJyYXkobC5sZW5ndGgpLmtleXMoKV0sc3VwZXIu'@;
put 'c2V0VmFsdWVzKGwpfXNldFZhbHVlQXRJbmRleChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aDtyZXR1cm4gbDx0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoJiYodGhpcy5p'@;
put 'bmRleGVkVmFsdWVzW2xdPWEsITE9PT10aGlzLm9yZGVyT2ZJbmRleGVzLmluY2x1ZGVzKGwpJiZ0aGlzLm9yZGVyT2ZJbmRleGVzLnNwbGljZShkLDAsbCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKSwhMCl9Y2xlYXJWYWx1ZShsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPSRFKHRoaXMu'@;
put 'b3JkZXJPZkluZGV4ZXMsW2xdKSxtbCh0aGlzLmluaXRWYWx1ZU9yRm4pP3N1cGVyLnNldFZhbHVlQXRJbmRleChsLHRoaXMuaW5pdFZhbHVlT3JGbihsKSk6c3VwZXIuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5pbml0VmFsdWVPckZuKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5vcmRlck9m'@;
put 'SW5kZXhlcy5sZW5ndGh9c2V0RGVmYXVsdFZhbHVlcygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoO3RoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoPTAsc3VwZXIuc2V0RGVmYXVs'@;
put 'dFZhbHVlcyhsKX1pbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9RksodGhpcy5pbmRleGVkVmFsdWVzLDAsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHRoaXMub3JkZXJPZkluZGV4ZXM9UEsodGhpcy5vcmRlck9mSW5kZXhlcyxhKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhp'@;
put 'cy5pbmRleGVkVmFsdWVzPUhLKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPSRFKHRoaXMub3JkZXJPZkluZGV4ZXMsbCksdGhpcy5vcmRlck9mSW5kZXhlcz1PSyh0aGlzLm9yZGVyT2ZJbmRleGVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXRFbnRyaWVzKCl7cmV0'@;
put 'dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubWFwKGw9PltsLHRoaXMuZ2V0VmFsdWVBdEluZGV4KGwpXSl9fWNsYXNzIEtFIGV4dGVuZHMgVW17Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRUcmlt'@;
put 'bWVkSW5kZXhlcygpe3JldHVybiBLdSh0aGlzLmdldFZhbHVlcygpLChsLGEsZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jb25zdCBTM2U9bmV3IE1hcChbWyJoaWRpbmciLGhQXSxbImluZGV4IixKN10sWyJsaW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZSIsZlBdLFsicGh5c2ljYWxJbmRl'@;
put 'eFRvVmFsdWUiLFVtXSxbInRyaW1taW5nIixLRV1dKTtsZXQgTks9MDtjbGFzcyBWS3tjb25zdHJ1Y3RvcigpeyFmdW5jdGlvbiB6ZXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFVldChjKXt2YXIgbD1mdW5jdGlvbiBaZXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVy'@;
put 'biBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZl'@;
put 'IHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZToh'@;
put 'MCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjb2xsZWN0aW9uIixuZXcgTWFwKX1yZWdpc3RlcihsLGEpeyExPT09dGhpcy5jb2xsZWN0aW9uLmhhcyhsKSYmKHRoaXMuY29sbGVjdGlvbi5zZXQobCxhKSxhLmFkZExvY2FsSG9vaygiY2hhbmdlIiwoKT0+dGhpcy5ydW5Mb2NhbEhv'@;
put 'b2tzKCJjaGFuZ2UiLGEpKSxOSys9MSl9dW5yZWdpc3RlcihsKXtjb25zdCBhPXRoaXMuY29sbGVjdGlvbi5nZXQobCk7Rm8oYSkmJihhLmRlc3Ryb3koKSx0aGlzLmNvbGxlY3Rpb24uZGVsZXRlKGwpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixhKSxOSy09MSl9dW5yZWdpc3RlckFs'@;
put 'bCgpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKChsLGEpPT50aGlzLnVucmVnaXN0ZXIoYSkpLHRoaXMuY29sbGVjdGlvbi5jbGVhcigpfWdldChsKXtyZXR1cm4geWMobCk/QXJyYXkuZnJvbSh0aGlzLmNvbGxlY3Rpb24udmFsdWVzKCkpOnRoaXMuY29sbGVjdGlvbi5nZXQobCl9Z2V0TGVu'@;
put 'Z3RoKCl7cmV0dXJuIHRoaXMuY29sbGVjdGlvbi5zaXplfXJlbW92ZUZyb21FdmVyeShsKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChhPT57YS5yZW1vdmUobCl9KX1pbnNlcnRUb0V2ZXJ5KGwsYSl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goZD0+e2QuaW5zZXJ0KGwsYSl9KX1pbml0RXZl'@;
put 'cnkobCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goYT0+e2EuaW5pdChsKX0pfX1mdW5jdGlvbiBCSyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWWV0KGMpe3ZhciBsPWZ1bmN0aW9uIEdldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu'@;
put 'dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz'@;
put 'dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts'@;
put 'XT1hLGN9VGwoVksseTEpO2NsYXNzIE0zZSBleHRlbmRzIFZLe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSxCSyh0aGlzLCJtZXJnZWRWYWx1ZXNDYWNoZSIsW10pLEJLKHRoaXMsImFnZ3JlZ2F0aW9uRnVuY3Rpb24iLHZvaWQgMCksQksodGhpcywiZmFsbGJhY2tWYWx1ZSIsdm9pZCAwKSx0'@;
put 'aGlzLmFnZ3JlZ2F0aW9uRnVuY3Rpb249bCx0aGlzLmZhbGxiYWNrVmFsdWU9YX1nZXRNZXJnZWRWYWx1ZXMoKXtpZighMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5tZXJnZWRWYWx1ZXNDYWNoZTtp'@;
put 'ZigwPT09dGhpcy5nZXRMZW5ndGgoKSlyZXR1cm5bXTtjb25zdCBhPXlzKHRoaXMuZ2V0KCksZj0+Zi5nZXRWYWx1ZXMoKSksZD1bXSxoPUZvKGFbMF0pJiZhWzBdLmxlbmd0aHx8MDtmb3IobGV0IGY9MDtmPGg7Zis9MSl7Y29uc3Qgdj1bXTtmb3IobGV0IE09MDtNPHRoaXMuZ2V0TGVuZ3Ro'@;
put 'KCk7TSs9MSl2LnB1c2goYVtNXVtmXSk7ZC5wdXNoKHYpfXJldHVybiB5cyhkLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbil9Z2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwsYSl7Y29uc3QgZD10aGlzLmdldE1lcmdlZFZhbHVlcyhhKVtsXTtyZXR1cm4gRm8oZCk/ZDp0aGlzLmZhbGxiYWNrVmFs'@;
put 'dWV9dXBkYXRlQ2FjaGUoKXt0aGlzLm1lcmdlZFZhbHVlc0NhY2hlPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKCExKX19ZnVuY3Rpb24geDNlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgaks9bmV3IFdlYWtNYXA7Y2xhc3MgRTNle2NvbnN0cnVjdG9yKCl7IWZ1bmN0aW9uICRldChjLGwsYSl7KGZ1bmN0aW9uIEtldChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsakssW10pfXN1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5hZGRMb2NhbEhvb2soImNoYW5nZSIsbCksdGhpcy5fd3Jp'@;
put 'dGUoZnVuY3Rpb24gWGV0KGMsbCl7cmV0dXJuIGMuZ2V0KHgzZShjLGwpKX0oakssdGhpcykpLHRoaXN9dW5zdWJzY3JpYmUoKXtyZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJ1bnN1YnNjcmliZSIpLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpc31fd3JpdGUobCl7cmV0dXJuIGwubGVu'@;
put 'Z3RoPjAmJnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsKSx0aGlzfV93cml0ZUluaXRpYWxDaGFuZ2VzKGwpeyFmdW5jdGlvbiBxZXQoYyxsLGEpe2Muc2V0KHgzZShjLGwpLGEpfShqSyx0aGlzLGwpfX1mdW5jdGlvbiBUM2UoYyxsKXtjb25zdCBhPVtdO2xldCBkPTAsaD0wO2Zvcig7'@;
put 'ZDxjLmxlbmd0aCYmaDxsLmxlbmd0aDtkKyssaCsrKWNbZF0hPT1sW2hdJiZhLnB1c2goe29wOiJyZXBsYWNlIixpbmRleDpoLG9sZFZhbHVlOmNbZF0sbmV3VmFsdWU6bFtoXX0pO2Zvcig7ZDxsLmxlbmd0aDtkKyspYS5wdXNoKHtvcDoiaW5zZXJ0IixpbmRleDpkLG9sZFZhbHVlOnZvaWQg'@;
put 'MCxuZXdWYWx1ZTpsW2RdfSk7Zm9yKDtoPGMubGVuZ3RoO2grKylhLnB1c2goe29wOiJyZW1vdmUiLGluZGV4Omgsb2xkVmFsdWU6Y1toXSxuZXdWYWx1ZTp2b2lkIDB9KTtyZXR1cm4gYX1mdW5jdGlvbiBxRShjLGwsYSl7KGZ1bmN0aW9uIEpldChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gVTIoYyxsKXtyZXR1cm4gYy5nZXQoQTNlKGMsbCkpfWZ1bmN0aW9uIHBQKGMsbCxhKXtyZXR1cm4gYy5z'@;
put 'ZXQoQTNlKGMsbCksYSksYX1mdW5jdGlvbiBBM2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlz'@;
put 'IG9iamVjdCIpfVRsKEUzZSx5MSk7dmFyIGdQPW5ldyBXZWFrTWFwLFhFPW5ldyBXZWFrTWFwLG1QPW5ldyBXZWFrTWFwLHZQPW5ldyBXZWFrTWFwLGJQPW5ldyBXZWFrTWFwO2NsYXNzIFFldHtjb25zdHJ1Y3Rvcigpe2xldHtpbml0aWFsSW5kZXhWYWx1ZTpsfT1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307cUUodGhpcyxnUCxuZXcgU2V0KSxxRSh0aGlzLFhFLFtdKSxxRSh0aGlzLG1QLFtdKSxxRSh0aGlzLHZQLCExKSxxRSh0aGlzLGJQLCExKSxwUChiUCx0aGlzLGw/PyExKX1jcmVhdGVPYnNlcnZlcigpe2NvbnN0IGw9'@;
put 'bmV3IEUzZTtyZXR1cm4gVTIoZ1AsdGhpcykuYWRkKGwpLGwuYWRkTG9jYWxIb29rKCJ1bnN1YnNjcmliZSIsKCk9PntVMihnUCx0aGlzKS5kZWxldGUobCl9KSxsLl93cml0ZUluaXRpYWxDaGFuZ2VzKFQzZShVMihYRSx0aGlzKSxVMihtUCx0aGlzKSkpLGx9ZW1pdChsKXtsZXQgYT1VMiht'@;
put 'UCx0aGlzKTsoIVUyKHZQLHRoaXMpfHxVMihYRSx0aGlzKS5sZW5ndGghPT1sLmxlbmd0aCkmJigwPT09bC5sZW5ndGg/bD1uZXcgQXJyYXkoYS5sZW5ndGgpLmZpbGwoVTIoYlAsdGhpcykpOnBQKFhFLHRoaXMsbmV3IEFycmF5KGwubGVuZ3RoKS5maWxsKFUyKGJQLHRoaXMpKSksVTIodlAs'@;
put 'dGhpcyl8fChwUCh2UCx0aGlzLCEwKSxhPVUyKFhFLHRoaXMpKSk7Y29uc3QgZD1UM2UoYSxsKTtVMihnUCx0aGlzKS5mb3JFYWNoKGg9PmguX3dyaXRlKGQpKSxwUChtUCx0aGlzLGwpfX1mdW5jdGlvbiBxMShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZXR0KGMpe3ZhciBsPWZ1bmN0aW9u'@;
put 'IHR0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mgekt7Y29uc3RydWN0b3IoKXtxMSh0aGlzLCJpbmRleGVzU2VxdWVuY2UiLG5ldyBDM2UpLHExKHRoaXMsInRyaW1taW5nTWFwc0NvbGxlY3Rpb24iLG5ldyBNM2Uo'@;
put 'bD0+bC5zb21lKGE9PiEwPT09YSksITEpKSxxMSh0aGlzLCJoaWRpbmdNYXBzQ29sbGVjdGlvbiIsbmV3IE0zZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSkpLHExKHRoaXMsInZhcmlvdXNNYXBzQ29sbGVjdGlvbiIsbmV3IFZLKSxxMSh0aGlzLCJoaWRpbmdDaGFuZ2VzT2JzZXJ2YWJsZSIs'@;
put 'bmV3IFFldCh7aW5pdGlhbEluZGV4VmFsdWU6ITF9KSkscTEodGhpcywibm90VHJpbW1lZEluZGV4ZXNDYWNoZSIsW10pLHExKHRoaXMsIm5vdEhpZGRlbkluZGV4ZXNDYWNoZSIsW10pLHExKHRoaXMsImlzQmF0Y2hlZCIsITEpLHExKHRoaXMsImluZGV4ZXNTZXF1ZW5jZUNoYW5nZWQiLCEx'@;
put 'KSxxMSh0aGlzLCJpbmRleGVzQ2hhbmdlU291cmNlIix2b2lkIDApLHExKHRoaXMsInRyaW1tZWRJbmRleGVzQ2hhbmdlZCIsITEpLHExKHRoaXMsImhpZGRlbkluZGV4ZXNDaGFuZ2VkIiwhMSkscTEodGhpcywicmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlIixbXSkscTEodGhpcywi'@;
put 'ZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUiLG5ldyBNYXApLHExKHRoaXMsImZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUiLG5ldyBNYXApLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmFkZExvY2FsSG9vaygiY2hhbmdlIiwoKT0+e3RoaXMuaW5kZXhlc1NlcXVlbmNl'@;
put 'Q2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLG51bGwpfSksdGhpcy50cmlt'@;
put 'bWluZ01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQ9ITAsdGhpcy51cGRhdGVDYWNoZSgpLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbil9KSx0aGlzLmhpZGlu'@;
put 'Z01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbil9KSx0aGlzLnZhcmlvdXNNYXBz'@;
put 'Q29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImNoYW5nZSIsbD0+e3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uKX0pfXN1c3BlbmRPcGVyYXRpb25zKCl7dGhpcy5pc0JhdGNoZWQ9ITB9cmVzdW1lT3BlcmF0aW9ucygpe3RoaXMuaXNCYXRj'@;
put 'aGVkPSExLHRoaXMudXBkYXRlQ2FjaGUoKX1jcmVhdGVDaGFuZ2VzT2JzZXJ2ZXIobCl7aWYoImhpZGluZyIhPT1sKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgaW5kZXggbWFwIHR5cGUgIiR7bH0iLmApO3JldHVybiB0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmNyZWF0ZU9i'@;
put 'c2VydmVyKCl9Y3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcChsLGEsZCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJNYXAobCxmdW5jdGlvbiBqZXQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7aWYoIVMzZS5oYXMoYykp'@;
put 'dGhyb3cgbmV3IEVycm9yKGBUaGUgcHJvdmlkZWQgbWFwIHR5cGUgKCIke2N9IikgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIG5ldyhTM2UuZ2V0KGMpKShsKX0oYSxkKSl9cmVnaXN0ZXJNYXAobCxhKXtpZih0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGwpfHx0aGlzLmhpZGlu'@;
put 'Z01hcHNDb2xsZWN0aW9uLmdldChsKXx8dGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uZ2V0KGwpKXRocm93IEVycm9yKGBNYXAgd2l0aCBuYW1lICIke2x9IiBoYXMgYmVlbiBhbHJlYWR5IHJlZ2lzdGVyZWQuYCk7YSBpbnN0YW5jZW9mIEtFP3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlv'@;
put 'bi5yZWdpc3RlcihsLGEpOmEgaW5zdGFuY2VvZiBoUD90aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk6dGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTtjb25zdCBkPXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7cmV0dXJuIGQ+MCYmYS5pbml0'@;
put 'KGQpLGF9dW5yZWdpc3Rlck1hcChsKXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXIobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKX11bnJlZ2lzdGVyQWxsKCl7dGhp'@;
put 'cy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyQWxsKCl9Z2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT10'@;
put 'aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGVbbF07cmV0dXJuIEZvKGEpP2E6bnVsbH1nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgobCl7Y29uc3QgYT10aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZVtsXTtyZXR1cm4gRm8oYSk/YTpudWxsfWdldFZpc3VhbEZyb21Q'@;
put 'aHlzaWNhbEluZGV4KGwpe2NvbnN0IGE9dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5nZXQobCk7cmV0dXJuIEZvKGEpP2E6bnVsbH1nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpe3JldHVybiB0aGlzLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHRoaXMu'@;
put 'Z2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpKX1nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9dGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmdldChsKTtyZXR1cm4gRm8oYSk/YTpudWxsfWdldE5lYXJlc3ROb3RIaWRkZW5JbmRl'@;
put 'eChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYobnVsbD09PXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgobCkpcmV0dXJuIG51bGw7aWYodGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0Nh'@;
put 'Y2hlLmhhcyhsKSlyZXR1cm4gbDtjb25zdCBmPUFycmF5LmZyb20odGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLmtleXMoKSk7bGV0IHY9LTE7cmV0dXJuIHY9YT4wP2YuZmluZEluZGV4KE09Pk0+bCk6Zi5yZXZlcnNlKCkuZmluZEluZGV4KE09Pk08bCksLTE9PT12'@;
put 'P2Q/dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCwtYSwhMSk6bnVsbDpmW3ZdfWluaXRUb0xlbmd0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpO3RoaXMubm90VHJp'@;
put 'bW1lZEluZGV4ZXNDYWNoZT1bLi4ubmV3IEFycmF5KGwpLmtleXMoKV0sdGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU9Wy4uLm5ldyBBcnJheShsKS5rZXlzKCldLHRoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9ImluaXQiLHRoaXMuaW5kZXhlc1Nl'@;
put 'cXVlbmNlLmluaXQobCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpLHRoaXMuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmlu'@;
put 'aXRFdmVyeShsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbml0Iil9Zml0VG9MZW5ndGgobCl7Y29uc3QgYT10aGlzLmdldE51bWJlck9mSW5kZXhlcygpO2lmKGw8YSl7Y29uc3Qg'@;
put 'ZD1bLi4uQXJyYXkodGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKS1sKS5rZXlzKCldLm1hcChoPT5oK2wpO3RoaXMucmVtb3ZlSW5kZXhlcyhkKX1lbHNlIHRoaXMuaW5zZXJ0SW5kZXhlcyhhLGwtYSl9Z2V0SW5kZXhlc1NlcXVlbmNlKCl7cmV0dXJuIHRoaXMuaW5kZXhlc1NlcXVlbmNlLmdl'@;
put 'dFZhbHVlcygpfXNldEluZGV4ZXNTZXF1ZW5jZShsKXt2b2lkIDA9PT10aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2UmJih0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9InVwZGF0ZSIpLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnNldFZhbHVlcyhsKSwidXBkYXRlIj09PXRoaXMuaW5kZXhlc0NoYW5n'@;
put 'ZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDApfWdldE5vdFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hl'@;
put 'OnRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuZmlsdGVyKGQ9PiExPT09dGhpcy5pc1RyaW1tZWQoZCkpfWdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKS5sZW5ndGh9Z2V0Tm90SGlkZGVuSW5kZXhlcygpe3JldHVybiEwPT09'@;
put 'KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlOnRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuZmlsdGVyKGQ9PiExPT09dGhpcy5pc0hpZGRlbihkKSl9Z2V0Tm90SGlkZGVuSW5kZXhl'@;
put 'c0xlbmd0aCgpe3JldHVybiB0aGlzLmdldE5vdEhpZGRlbkluZGV4ZXMoKS5sZW5ndGh9Z2V0UmVuZGVyYWJsZUluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLnJlbmRlcmFibGVQaHlz'@;
put 'aWNhbEluZGV4ZXNDYWNoZTp0aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCkuZmlsdGVyKGQ9PiExPT09dGhpcy5pc0hpZGRlbihkKSl9Z2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcygpLmxlbmd0aH1nZXROdW1iZXJPZkluZGV4'@;
put 'ZXMoKXtyZXR1cm4gdGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5sZW5ndGh9bW92ZUluZGV4ZXMobCxhKXsibnVtYmVyIj09dHlwZW9mIGwmJihsPVtsXSk7Y29uc3QgZD15cyhsLFo9PnRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoWikpLGg9dGhpcy5nZXROb3RUcmltbWVkSW5k'@;
put 'ZXhlc0xlbmd0aCgpLGY9bC5sZW5ndGgsdj0kRSh0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQpLE09di5maWx0ZXIoWj0+ITE9PT10aGlzLmlzVHJpbW1lZChaKSk7bGV0IEQ9di5pbmRleE9mKE1bTS5sZW5ndGgtMV0pKzE7YStmPGgmJihEPXYuaW5kZXhPZihNW2FdKSksdGhpcy5pbmRl'@;
put 'eGVzQ2hhbmdlU291cmNlPSJtb3ZlIix0aGlzLnNldEluZGV4ZXNTZXF1ZW5jZShMSyh2LEQsZCkpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDB9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwpfWlz'@;
put 'SGlkZGVuKGwpe3JldHVybiB0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlQXRJbmRleChsKX1pbnNlcnRJbmRleGVzKGwsYSl7Y29uc3QgZD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKClbbF0saD1GbyhkKT9kOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksZj10'@;
put 'aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmluY2x1ZGVzKGQpP3RoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5kZXhPZihkKTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLHY9eXMobmV3IEFycmF5KGEpLmZpbGwoaCksKE0sRCk9Pk0rRCk7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRo'@;
put 'aXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5zZXJ0Iix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5pbnNlcnQoZix2KSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGYsdiksdGhpcy5oaWRpbmdNYXBzQ29sbGVj'@;
put 'dGlvbi5pbnNlcnRUb0V2ZXJ5KGYsdiksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShmLHYpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpfXJlbW92ZUluZGV4ZXMobCl7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0icmVt'@;
put 'b3ZlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5yZW1vdmUobCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMu'@;
put 'dmFyaW91c01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKX11cGRhdGVDYWNoZSgpeyghMD09PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKXx8ITE9PT10aGlzLmlzQmF0Y2hlZCYm'@;
put 'ITA9PT0odGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkfHx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZHx8dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZCkpJiYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51cGRh'@;
put 'dGVDYWNoZSgpLHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZT10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCExKSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT10aGlzLmdldE5vdEhpZGRlbkluZGV4ZXMoITEpLHRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlPXRoaXMu'@;
put 'Z2V0UmVuZGVyYWJsZUluZGV4ZXMoITEpLHRoaXMuY2FjaGVGcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXMoKSx0aGlzLmNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkJiZ0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmVt'@;
put 'aXQodGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZXMoKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjYWNoZVVwZGF0ZWQiLHtpbmRleGVzU2VxdWVuY2VDaGFuZ2VkOnRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZCx0cmltbWVkSW5kZXhlc0NoYW5nZWQ6dGhpcy50cmlt'@;
put 'bWVkSW5kZXhlc0NoYW5nZWQsaGlkZGVuSW5kZXhlc0NoYW5nZWQ6dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZH0pLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZD0hMSx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSExKX1jYWNoZUZy'@;
put 'b21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygpe2NvbnN0IGw9dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3QgZD10aGlzLmdldFBoeXNpY2FsRnJv'@;
put 'bVZpc3VhbEluZGV4KGEpO3RoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuc2V0KGQsYSl9fWNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKXtjb25zdCBsPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRl'@;
put 'cmFibGVJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3QgZD10aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChhKSxoPXRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoZCk7dGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhl'@;
put 'c0NhY2hlLnNldChoLGEpfX19ZnVuY3Rpb24gazNlKGMpe2NvbnN0IGE9L14oW2EtekEtWl17Mn0pLShbYS16QS1aXXsyfSkkLy5leGVjKGMpO3JldHVybiBhP2Ake2FbMV0udG9Mb3dlckNhc2UoKX0tJHthWzJdLnRvVXBwZXJDYXNlKCl9YDpjfWZ1bmN0aW9uIEQzZShjKXtGbyhjKSYmTyQo'@;
put 'Z2xgTGFuZ3VhZ2Ugd2l0aCBjb2RlICIke2N9IiB3YXMgbm90IGZvdW5kLiBZb3Ugc2hvdWxkIHJlZ2lzdGVyIHBhcnRpY3VsYXIgbGFuZ3VhZ2VceDIwCiAgICBiZWZvcmUgdXNpbmcgaXQuIFJlYWQgbW9yZSBhYm91dCB0aGlzIGlzc3VlIGF0OiBodHRwczovL2RvY3MuaGFuZHNvbnRhYmxl'@;
put 'LmNvbS9pMThuL21pc3NpbmctbGFuZ3VhZ2UtY29kZS5gKX1UbCh6Syx5MSk7Y29uc3R7cmVnaXN0ZXI6aXR0LGdldFZhbHVlczpvdHR9PXIzKCJwaHJhc2VGb3JtYXR0ZXJzIik7IWZ1bmN0aW9uIGF0dChjLGwpe2l0dChjLGwpfSgicGx1cmFsaXplIixmdW5jdGlvbiBydHQoYyxsKXtyZXR1'@;
put 'cm4gQXJyYXkuaXNBcnJheShjKSYmTnVtYmVyLmlzSW50ZWdlcihsKT9jW2xdOmN9KTtjb25zdCBJM2U9IkNvbnRleHRNZW51Oml0ZW1zIixVSz1gJHtJM2V9Lm5vSXRlbXNgLFpLPWAke0kzZX0uaW5zZXJ0Um93QWJvdmVgLFdLPWAke0kzZX0uaW5zZXJ0Um93QmVsb3dgLFlLPWAke0kzZX0u'@;
put 'aW5zZXJ0Q29sdW1uT25UaGVMZWZ0YCxHSz1gJHtJM2V9Lmluc2VydENvbHVtbk9uVGhlUmlnaHRgLCRLPWAke0kzZX0ucmVtb3ZlUm93YCxLSz1gJHtJM2V9LnJlbW92ZUNvbHVtbmAscUs9YCR7STNlfS51bmRvYCxYSz1gJHtJM2V9LnJlZG9gLHlQPWAke0kzZX0ucmVhZE9ubHlgLEpLPWAk'@;
put 'e0kzZX0uY2xlYXJDb2x1bW5gLFFLPWAke0kzZX0uY29weWAsZXE9YCR7STNlfS5jb3B5V2l0aEhlYWRlcnNgLHRxPWAke0kzZX0uY29weVdpdGhHcm91cEhlYWRlcnNgLG5xPWAke0kzZX0uY29weUhlYWRlcnNPbmx5YCxycT1gJHtJM2V9LmN1dGAsaXE9YCR7STNlfS5mcmVlemVDb2x1bW5g'@;
put 'LG9xPWAke0kzZX0udW5mcmVlemVDb2x1bW5gLGFxPWAke0kzZX0ubWVyZ2VDZWxsc2Asc3E9YCR7STNlfS51bm1lcmdlQ2VsbHNgLGxxPWAke0kzZX0uYWRkQ29tbWVudGAsY3E9YCR7STNlfS5lZGl0Q29tbWVudGAsdXE9YCR7STNlfS5yZW1vdmVDb21tZW50YCxkcT1gJHtJM2V9LnJlYWRP'@;
put 'bmx5Q29tbWVudGAsaHE9YCR7STNlfS5hbGlnbmAsZnE9YCR7STNlfS5hbGlnbi5sZWZ0YCxwcT1gJHtJM2V9LmFsaWduLmNlbnRlcmAsZ3E9YCR7STNlfS5hbGlnbi5yaWdodGAsbXE9YCR7STNlfS5hbGlnbi5qdXN0aWZ5YCx2cT1gJHtJM2V9LmFsaWduLnRvcGAsYnE9YCR7STNlfS5hbGln'@;
put 'bi5taWRkbGVgLHlxPWAke0kzZX0uYWxpZ24uYm90dG9tYCxfcT1gJHtJM2V9LmJvcmRlcnNgLHdxPWAke0kzZX0uYm9yZGVycy50b3BgLENxPWAke0kzZX0uYm9yZGVycy5yaWdodGAsU3E9YCR7STNlfS5ib3JkZXJzLmJvdHRvbWAsTXE9YCR7STNlfS5ib3JkZXJzLmxlZnRgLHhxPWAke0kz'@;
put 'ZX0uYm9yZGVycy5yZW1vdmVgLEVxPWAke0kzZX0ubmVzdGVkSGVhZGVycy5pbnNlcnRDaGlsZFJvd2AsVHE9YCR7STNlfS5uZXN0ZWRIZWFkZXJzLmRldGFjaEZyb21QYXJlbnRgLEFxPWAke0kzZX0uaGlkZUNvbHVtbmAsa3E9YCR7STNlfS5zaG93Q29sdW1uYCxEcT1gJHtJM2V9LmhpZGVS'@;
put 'b3dgLElxPWAke0kzZX0uc2hvd1Jvd2AsWDE9IkZpbHRlcnM6IixaYz1gJHtYMX1jb25kaXRpb25zYCxfUD1gJHtaY30ubm9uZWAsUnE9YCR7WmN9LmlzRW1wdHlgLExxPWAke1pjfS5pc05vdEVtcHR5YCxPcT1gJHtaY30uaXNFcXVhbFRvYCxQcT1gJHtaY30uaXNOb3RFcXVhbFRvYCxGcT1g'@;
put 'JHtaY30uYmVnaW5zV2l0aGAsSHE9YCR7WmN9LmVuZHNXaXRoYCxOcT1gJHtaY30uY29udGFpbnNgLFZxPWAke1pjfS5kb2VzTm90Q29udGFpbmAsbHR0PWAke1pjfS5ieVZhbHVlYCxCcT1gJHtaY30uZ3JlYXRlclRoYW5gLGpxPWAke1pjfS5ncmVhdGVyVGhhbk9yRXF1YWxUb2AsenE9YCR7'@;
put 'WmN9Lmxlc3NUaGFuYCxVcT1gJHtaY30ubGVzc1RoYW5PckVxdWFsVG9gLFpxPWAke1pjfS5pc0JldHdlZW5gLFdxPWAke1pjfS5pc05vdEJldHdlZW5gLFlxPWAke1pjfS5hZnRlcmAsR3E9YCR7WmN9LmJlZm9yZWAsJHE9YCR7WmN9LnRvZGF5YCxLcT1gJHtaY30udG9tb3Jyb3dgLHFxPWAk'@;
put 'e1pjfS55ZXN0ZXJkYXlgLFhxPWAke1gxfWxhYmVscy5maWx0ZXJCeUNvbmRpdGlvbmAsSnE9YCR7WDF9bGFiZWxzLmZpbHRlckJ5VmFsdWVgLFFxPWAke1gxfWxhYmVscy5jb25qdW5jdGlvbmAsd1A9YCR7WDF9bGFiZWxzLmRpc2p1bmN0aW9uYCxDUD1gJHtYMX12YWx1ZXMuYmxhbmtDZWxs'@;
put 'c2AsZVg9YCR7WDF9YnV0dG9ucy5zZWxlY3RBbGxgLHRYPWAke1gxfWJ1dHRvbnMuY2xlYXJgLG5YPWAke1gxfWJ1dHRvbnMub2tgLHJYPWAke1gxfWJ1dHRvbnMuY2FuY2VsYCxpWD1gJHtYMX1idXR0b25zLnBsYWNlaG9sZGVyLnNlYXJjaGAsb1g9YCR7WDF9YnV0dG9ucy5wbGFjZWhvbGRl'@;
put 'ci52YWx1ZWAsYVg9YCR7WDF9YnV0dG9ucy5wbGFjZWhvbGRlci5zZWNvbmRWYWx1ZWAsc1g9IkNoZWNrYm94UmVuZGVyZXI6IixsWD1gJHtzWH1jaGVja2VkYCxjWD1gJHtzWH11bmNoZWNrZWRgLFIzZT17bGFuZ3VhZ2VDb2RlOiJlbi1VUyIsW1VLXToiTm8gYXZhaWxhYmxlIG9wdGlvbnMi'@;
put 'LFtaS106Ikluc2VydCByb3cgYWJvdmUiLFtXS106Ikluc2VydCByb3cgYmVsb3ciLFtZS106Ikluc2VydCBjb2x1bW4gbGVmdCIsW0dLXToiSW5zZXJ0IGNvbHVtbiByaWdodCIsWyRLXTpbIlJlbW92ZSByb3ciLCJSZW1vdmUgcm93cyJdLFtLS106WyJSZW1vdmUgY29sdW1uIiwiUmVtb3Zl'@;
put 'IGNvbHVtbnMiXSxbcUtdOiJVbmRvIixbWEtdOiJSZWRvIixbeVBdOiJSZWFkIG9ubHkiLFtKS106IkNsZWFyIGNvbHVtbiIsW2hxXToiQWxpZ25tZW50IixbZnFdOiJMZWZ0IixbcHFdOiJDZW50ZXIiLFtncV06IlJpZ2h0IixbbXFdOiJKdXN0aWZ5IixbdnFdOiJUb3AiLFticV06Ik1pZGRs'@;
put 'ZSIsW3lxXToiQm90dG9tIixbaXFdOiJGcmVlemUgY29sdW1uIixbb3FdOiJVbmZyZWV6ZSBjb2x1bW4iLFtfcV06IkJvcmRlcnMiLFt3cV06IlRvcCIsW0NxXToiUmlnaHQiLFtTcV06IkJvdHRvbSIsW01xXToiTGVmdCIsW3hxXToiUmVtb3ZlIGJvcmRlcihzKSIsW2xxXToiQWRkIGNvbW1l'@;
put 'bnQiLFtjcV06IkVkaXQgY29tbWVudCIsW3VxXToiRGVsZXRlIGNvbW1lbnQiLFtkcV06IlJlYWQtb25seSBjb21tZW50IixbYXFdOiJNZXJnZSBjZWxscyIsW3NxXToiVW5tZXJnZSBjZWxscyIsW1FLXToiQ29weSIsW2VxXTpbIkNvcHkgd2l0aCBoZWFkZXIiLCJDb3B5IHdpdGggaGVhZGVy'@;
put 'cyJdLFt0cV06WyJDb3B5IHdpdGggZ3JvdXAgaGVhZGVyIiwiQ29weSB3aXRoIGdyb3VwIGhlYWRlcnMiXSxbbnFdOlsiQ29weSBoZWFkZXIgb25seSIsIkNvcHkgaGVhZGVycyBvbmx5Il0sW3JxXToiQ3V0IixbRXFdOiJJbnNlcnQgY2hpbGQgcm93IixbVHFdOiJEZXRhY2ggZnJvbSBwYXJl'@;
put 'bnQiLFtBcV06WyJIaWRlIGNvbHVtbiIsIkhpZGUgY29sdW1ucyJdLFtrcV06WyJTaG93IGNvbHVtbiIsIlNob3cgY29sdW1ucyJdLFtEcV06WyJIaWRlIHJvdyIsIkhpZGUgcm93cyJdLFtJcV06WyJTaG93IHJvdyIsIlNob3cgcm93cyJdLFtfUF06Ik5vbmUiLFtScV06IklzIGVtcHR5Iixb'@;
put 'THFdOiJJcyBub3QgZW1wdHkiLFtPcV06IklzIGVxdWFsIHRvIixbUHFdOiJJcyBub3QgZXF1YWwgdG8iLFtGcV06IkJlZ2lucyB3aXRoIixbSHFdOiJFbmRzIHdpdGgiLFtOcV06IkNvbnRhaW5zIixbVnFdOiJEb2VzIG5vdCBjb250YWluIixbQnFdOiJHcmVhdGVyIHRoYW4iLFtqcV06Ikdy'@;
put 'ZWF0ZXIgdGhhbiBvciBlcXVhbCB0byIsW3pxXToiTGVzcyB0aGFuIixbVXFdOiJMZXNzIHRoYW4gb3IgZXF1YWwgdG8iLFtacV06IklzIGJldHdlZW4iLFtXcV06IklzIG5vdCBiZXR3ZWVuIixbWXFdOiJBZnRlciIsW0dxXToiQmVmb3JlIixbJHFdOiJUb2RheSIsW0txXToiVG9tb3Jyb3ci'@;
put 'LFtxcV06Illlc3RlcmRheSIsW0NQXToiQmxhbmsgY2VsbHMiLFtYcV06IkZpbHRlciBieSBjb25kaXRpb24iLFtKcV06IkZpbHRlciBieSB2YWx1ZSIsW1FxXToiQW5kIixbd1BdOiJPciIsW2VYXToiU2VsZWN0IGFsbCIsW3RYXToiQ2xlYXIiLFtuWF06Ik9LIixbclhdOiJDYW5jZWwiLFtp'@;
put 'WF06IlNlYXJjaCIsW29YXToiVmFsdWUiLFthWF06IlNlY29uZCB2YWx1ZSIsW2xYXToiQ2hlY2tlZCIsW2NYXToiVW5jaGVja2VkIn0sY3R0PVcsdVg9UjNlLmxhbmd1YWdlQ29kZSx7cmVnaXN0ZXI6dXR0LGdldEl0ZW06TDNlLGhhc0l0ZW06ZHR0LGdldFZhbHVlczpodHR9PXIzKCJsYW5n'@;
put 'dWFnZXNEaWN0aW9uYXJpZXMiKTtmdW5jdGlvbiBPM2UoYyxsKXtsZXQgYT1jLGQ9bDtyZXR1cm4gcWEoYykmJihkPWMsYT1kLmxhbmd1YWdlQ29kZSksZnVuY3Rpb24gZnR0KGMsbCl7YyE9PXVYJiZmdW5jdGlvbiBudHQoYyxsKXtYYShsLChhLGQpPT57eWMoY1tkXSkmJihjW2RdPWEpfSl9'@;
put 'KGwsTDNlKHVYKSl9KGEsZCksdXR0KGEsZzEoZCkpLGcxKGQpfWZ1bmN0aW9uIFAzZShjKXtyZXR1cm4gZFgoYyk/ZzEoTDNlKGMpKTpudWxsfWZ1bmN0aW9uIGRYKGMpe3JldHVybiBkdHQoYyl9ZnVuY3Rpb24gRjNlKGMsbCxhKXtjb25zdCBkPVAzZShjKTtpZihudWxsPT09ZClyZXR1cm4g'@;
put 'bnVsbDtjb25zdCBoPWRbbF07aWYoeWMoaCkpcmV0dXJuIG51bGw7Y29uc3QgZj1mdW5jdGlvbiBndHQoYyxsKXtsZXQgYT1jO3JldHVybiBZbihmdW5jdGlvbiBzdHQoKXtyZXR1cm4gb3R0KCl9KCksZD0+e2E9ZChjLGwpfSksYX0oaCxhKTtyZXR1cm4gQXJyYXkuaXNBcnJheShmKT9mWzBd'@;
put 'OmZ9TzNlKFIzZSk7Y29uc3QgSDNlPSJhY3RpdmUtaGVhZGVyIixoWD0iaGVhZGVyIixmWD0iYXJlYSIsSkU9ImZvY3VzIjtjbGFzcyBOM2V7Y29uc3RydWN0b3IobCxhKXt0aGlzLnNldHRpbmdzPWwsdGhpcy5jZWxsUmFuZ2U9YXx8bnVsbH1pc0VtcHR5KCl7cmV0dXJuIG51bGw9PT10aGlz'@;
put 'LmNlbGxSYW5nZX1hZGQobCl7cmV0dXJuIHRoaXMuaXNFbXB0eSgpP3RoaXMuY2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGwpOnRoaXMuY2VsbFJhbmdlLmV4cGFuZChsKSx0aGlzfXJlcGxhY2UobCxhKXtpZighdGhpcy5pc0VtcHR5KCkpe2lmKHRoaXMuY2VsbFJh'@;
put 'bmdlLmZyb20uaXNFcXVhbChsKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UuZnJvbT1hLCEwO2lmKHRoaXMuY2VsbFJhbmdlLnRvLmlzRXF1YWwobCkpcmV0dXJuIHRoaXMuY2VsbFJhbmdlLnRvPWEsITB9cmV0dXJuITF9Y2xlYXIoKXtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVsbCx0aGlzfWdl'@;
put 'dENvcm5lcnMoKXtjb25zdCBsPXRoaXMuY2VsbFJhbmdlLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxhPXRoaXMuY2VsbFJhbmdlLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuW2wucm93LGwuY29sLGEucm93LGEuY29sXX1kZXN0cm95KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJk'@;
put 'ZXN0cm95Iil9fVRsKE4zZSx5MSk7Y29uc3Qgd3R0PU4zZTtjb25zdCBTZz1jbGFzcyB4dHQgZXh0ZW5kcyB3dHR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLG51bGwpLGZ1bmN0aW9uIEN0dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gU3R0KGMpe3ZhciBsPWZ1bmN0aW9uIE10dChjLGwp'@;
put 'e2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q'@;
put 'cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1'@;
put 'ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInZpc3VhbENlbGxSYW5nZSIsbnVsbCksdGhpcy52aXN1YWxDZWxsUmFuZ2U9YXx8bnVsbCx0aGlzLmNvbW1pdCgpfWFkZChsKXtyZXR1cm4gbnVsbD09PXRoaXMudmlzdWFsQ2Vs'@;
put 'bFJhbmdlP3RoaXMudmlzdWFsQ2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGwpOnRoaXMudmlzdWFsQ2VsbFJhbmdlLmV4cGFuZChsKSx0aGlzfWNsZWFyKCl7cmV0dXJuIHRoaXMudmlzdWFsQ2VsbFJhbmdlPW51bGwsc3VwZXIuY2xlYXIoKX10cmltVG9WaXNpYmxl'@;
put 'Q2VsbHNSYW5nZU9ubHkobCl7bGV0e2Zyb206YSx0bzpkfT1sLGg9dGhpcy5nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGEsMSksZj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoZCwtMSk7cmV0dXJuIG51bGw9PT1ofHxudWxsPT09Zj9udWxsOigoaC5yb3c+Zi5yb3d8fGguY29s'@;
put 'PmYuY29sKSYmKGg9YSxmPWQpLHRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGgsaCxmKSl9Z2V0TmVhcmVzdE5vdEhpZGRlbkNvb3JkcyhsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTphO2NvbnN0IGg9dGhpcy5n'@;
put 'ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5yb3dJbmRleE1hcHBlcixsLnJvdyxhKTtpZihudWxsPT09aClyZXR1cm4gbnVsbDtjb25zdCBmPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHRoaXMuc2V0dGluZ3MuY29sdW1uSW5kZXhNYXBwZXIsbC5jb2wsZCk7'@;
put 'cmV0dXJuIG51bGw9PT1mP251bGw6dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGgsZil9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSxkKXtyZXR1cm4gYTwwP2E6bC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYSxkKX1jb21taXQoKXtpZihudWxsPT09dGhpcy52aXN1YWxD'@;
put 'ZWxsUmFuZ2UpcmV0dXJuIHRoaXM7Y29uc3QgbD10aGlzLnRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seSh0aGlzLnZpc3VhbENlbGxSYW5nZSk7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGw9PT1sP251bGw6dGhpcy5jcmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGwuZnJvbSxsLnRvKSx0'@;
put 'aGlzfXN5bmNXaXRoKGwpe2NvbnN0IGE9bC5mcm9tLmNsb25lKCkubm9ybWFsaXplKCksZD0iTi1TIj09PWwuZ2V0VmVydGljYWxEaXJlY3Rpb24oKT8xOi0xLGg9IlctRSI9PT1sLmdldEhvcml6b250YWxEaXJlY3Rpb24oKT8xOi0xLGY9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFi'@;
put 'bGVDb29yZHModGhpcy52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0KTtsZXQgdj1udWxsO2lmKChudWxsPT09Znx8bnVsbD09PWYuY29sfHxudWxsPT09Zi5yb3cpJiYodj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoYSxkLGgpKSxudWxsIT09diYmbC5vdmVybGFwcyh2KSl7Y29u'@;
put 'c3QgTT1sLmhpZ2hsaWdodC5jbG9uZSgpO2lmKE0ucm93Pj0wJiYoTS5yb3c9di5yb3cpLE0uY29sPj0wJiYoTS5jb2w9di5jb2wpLG51bGw9PT10aGlzLmNlbGxSYW5nZSl7Y29uc3QgRD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhNKTt0aGlzLmNlbGxSYW5nZT10'@;
put 'aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShEKX1sLnNldEhpZ2hsaWdodChNKX1yZXR1cm4iZm9jdXMiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlJiZudWxsIT09ZiYmbnVsbD09PXYmJmwuc2V0SGlnaGxpZ2h0KHRoaXMudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodCksdGhp'@;
put 'c31nZXRDb3JuZXJzKCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuY2VsbFJhbmdlO3JldHVybltNYXRoLm1pbihsLnJvdyxhLnJvdyksTWF0aC5taW4obC5jb2wsYS5jb2wpLE1hdGgubWF4KGwucm93LGEucm93KSxNYXRoLm1heChsLmNvbCxhLmNvbCldfWdldFZpc3VhbENvcm5lcnMoKXtj'@;
put 'b25zdCBsPXRoaXMuc2V0dGluZ3MucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKHRoaXMuY2VsbFJhbmdlLmdldFRvcFN0YXJ0Q29ybmVyKCkpLGE9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCkpO3JldHVy'@;
put 'bltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19Y3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShsLGEpe2NvbnN0IGQ9dGhpcy5zZXR0aW5ncy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMobCksaD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhhKTtyZXR1cm4gbnVsbD09'@;
put 'PWQucm93fHxudWxsPT09ZC5jb2x8fG51bGw9PT1oLnJvd3x8bnVsbD09PWguY29sP251bGw6dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoZCxkLGgpfX07ZnVuY3Rpb24gcFgoYyl7bGV0e2FjdGl2ZUhlYWRlckNsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyBTZyh7Y2xhc3NO'@;
put 'YW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOkgzZX0pfWZ1bmN0aW9uIEV0dChjKXtsZXR7YXJlYUNvcm5lclZpc2libGU6bCwuLi5hfT1jO3JldHVybiBuZXcgU2coe2NsYXNzTmFtZToiYXJlYSIsY3JlYXRlTGF5ZXJzOiEwLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzRiODlmZiIsY29ybmVy'@;
put 'VmlzaWJsZTpsfSwuLi5hLHNlbGVjdGlvblR5cGU6Zlh9KX1mdW5jdGlvbiBUdHQoYyl7bGV0ey4uLmx9PWM7cmV0dXJuIG5ldyBTZyh7Y2xhc3NOYW1lOiJoaWdobGlnaHQiLC4uLmwsc2VsZWN0aW9uVHlwZTpmWH0pfWZ1bmN0aW9uIEF0dChjKXtsZXR7Y29sdW1uQ2xhc3NOYW1lOmwsLi4u'@;
put 'YX09YztyZXR1cm4gbmV3IFNnKHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6ImNvbHVtbiJ9KX1mdW5jdGlvbiBWM2UoYyl7bGV0e2hlYWRlckNsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyBTZyh7Y2xhc3NOYW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOmhYfSl9ZnVuY3Rp'@;
put 'b24gUnR0KGMpe2xldHtyb3dDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgU2coe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZToicm93In0pfWZ1bmN0aW9uIGpkKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBQdHQoYyl7dmFyIGw9ZnVuY3Rpb24gRnR0KGMsbCl7aWYoIm9i'@;
put 'amVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2'@;
put 'ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51'@;
put 'bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBNZyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0'@;
put 'ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFBwPW5ldyBXZWFrU2V0O2NsYXNzIEh0dHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gTHR0KGMsbCl7KGZ1bmN0aW9uIE90dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBp'@;
put 'bml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxQcCksamQodGhpcywib3B0aW9ucyIsdm9pZCAwKSxqZCh0aGlzLCJsYXllckxldmVsIiwwKSxqZCh0aGlzLCJmb2N1cyIsdm9pZCAwKSxqZCh0aGlz'@;
put 'LCJmaWxsIix2b2lkIDApLGpkKHRoaXMsImxheWVyZWRBcmVhcyIsbmV3IE1hcCksamQodGhpcywiYXJlYXMiLG5ldyBNYXApLGpkKHRoaXMsInJvd0hlYWRlcnMiLG5ldyBNYXApLGpkKHRoaXMsImNvbHVtbkhlYWRlcnMiLG5ldyBNYXApLGpkKHRoaXMsImFjdGl2ZVJvd0hlYWRlcnMiLG5l'@;
put 'dyBNYXApLGpkKHRoaXMsImFjdGl2ZUNvbHVtbkhlYWRlcnMiLG5ldyBNYXApLGpkKHRoaXMsImFjdGl2ZUNvcm5lckhlYWRlcnMiLG5ldyBNYXApLGpkKHRoaXMsInJvd0hpZ2hsaWdodHMiLG5ldyBNYXApLGpkKHRoaXMsImNvbHVtbkhpZ2hsaWdodHMiLG5ldyBNYXApLGpkKHRoaXMsImN1'@;
put 'c3RvbVNlbGVjdGlvbnMiLFtdKSx0aGlzLm9wdGlvbnM9bCx0aGlzLmZvY3VzPWZ1bmN0aW9uIGt0dChjKXtsZXR7Y2VsbENvcm5lclZpc2libGU6bCwuLi5hfT1jO3JldHVybiBuZXcgU2coe2NsYXNzTmFtZToiY3VycmVudCIsaGVhZGVyQXR0cmlidXRlczpbWyJhcmlhLXNlbGVjdGVkIiwi'@;
put 'dHJ1ZSJdXSxib3JkZXI6e3dpZHRoOjIsY29sb3I6IiM0Yjg5ZmYiLGNvcm5lclZpc2libGU6bH0sLi4uYSxzZWxlY3Rpb25UeXBlOkpFfSl9KGwpLHRoaXMuZmlsbD1mdW5jdGlvbiBJdHQoYyl7bGV0ey4uLmx9PWM7cmV0dXJuIG5ldyBTZyh7Y2xhc3NOYW1lOiJmaWxsIixib3JkZXI6e3dp'@;
put 'ZHRoOjEsY29sb3I6IiNmZjAwMDAifSwuLi5sLHNlbGVjdGlvblR5cGU6ImZpbGwifSl9KGwpfWlzRW5hYmxlZEZvcihsLGEpe2xldCBkPWw7bD09PUpFJiYoZD0iY3VycmVudCIpO2xldCBoPXRoaXMub3B0aW9ucy5kaXNhYmxlZENlbGxTZWxlY3Rpb24oYS5yb3csYS5jb2wpO3JldHVybiJz'@;
put 'dHJpbmciPT10eXBlb2YgaCYmKGg9W2hdKSwhMT09PWh8fEFycmF5LmlzQXJyYXkoaCkmJiFoLmluY2x1ZGVzKGQpfXVzZUxheWVyTGV2ZWwoKXtyZXR1cm4gdGhpcy5sYXllckxldmVsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowLHRo'@;
put 'aXN9Z2V0Rm9jdXMoKXtyZXR1cm4gdGhpcy5mb2N1c31nZXRGaWxsKCl7cmV0dXJuIHRoaXMuZmlsbH1jcmVhdGVMYXllcmVkQXJlYSgpe3JldHVybiBNZyhQcCx0aGlzLHhnKS5jYWxsKHRoaXMsdGhpcy5sYXllcmVkQXJlYXMsRXR0KX1nZXRMYXllcmVkQXJlYXMoKXtyZXR1cm5bLi4udGhp'@;
put 'cy5sYXllcmVkQXJlYXMudmFsdWVzKCldfWNyZWF0ZUFyZWEoKXtyZXR1cm4gTWcoUHAsdGhpcyx4ZykuY2FsbCh0aGlzLHRoaXMuYXJlYXMsVHR0KX1nZXRBcmVhcygpe3JldHVyblsuLi50aGlzLmFyZWFzLnZhbHVlcygpXX1jcmVhdGVSb3dIZWFkZXIoKXtyZXR1cm4gTWcoUHAsdGhpcyx4'@;
put 'ZykuY2FsbCh0aGlzLHRoaXMucm93SGVhZGVycyxWM2UpfWdldFJvd0hlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5yb3dIZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVDb2x1bW5IZWFkZXIoKXtyZXR1cm4gTWcoUHAsdGhpcyx4ZykuY2FsbCh0aGlzLHRoaXMuY29sdW1uSGVhZGVycyxWM2UpfWdl'@;
put 'dENvbHVtbkhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVSb3dIZWFkZXIoKXtyZXR1cm4gTWcoUHAsdGhpcyx4ZykuY2FsbCh0aGlzLHRoaXMuYWN0aXZlUm93SGVhZGVycyxwWCl9Z2V0QWN0aXZlUm93SGVhZGVycygpe3JldHVy'@;
put 'blsuLi50aGlzLmFjdGl2ZVJvd0hlYWRlcnMudmFsdWVzKCldfWNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpe3JldHVybiBNZyhQcCx0aGlzLHhnKS5jYWxsKHRoaXMsdGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLHBYKX1nZXRBY3RpdmVDb2x1bW5IZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMu'@;
put 'YWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCl7cmV0dXJuIE1nKFBwLHRoaXMseGcpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMscFgpfWdldEFjdGl2ZUNvcm5lckhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVD'@;
put 'b3JuZXJIZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVSb3dIaWdobGlnaHQoKXtyZXR1cm4gTWcoUHAsdGhpcyx4ZykuY2FsbCh0aGlzLHRoaXMucm93SGlnaGxpZ2h0cyxSdHQpfWdldFJvd0hpZ2hsaWdodHMoKXtyZXR1cm5bLi4udGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpXX1jcmVhdGVD'@;
put 'b2x1bW5IaWdobGlnaHQoKXtyZXR1cm4gTWcoUHAsdGhpcyx4ZykuY2FsbCh0aGlzLHRoaXMuY29sdW1uSGlnaGxpZ2h0cyxBdHQpfWdldENvbHVtbkhpZ2hsaWdodHMoKXtyZXR1cm5bLi4udGhpcy5jb2x1bW5IaWdobGlnaHRzLnZhbHVlcygpXX1nZXRDdXN0b21TZWxlY3Rpb25zKCl7cmV0'@;
put 'dXJuWy4uLnRoaXMuY3VzdG9tU2VsZWN0aW9ucy52YWx1ZXMoKV19YWRkQ3VzdG9tU2VsZWN0aW9uKGwpe3RoaXMuY3VzdG9tU2VsZWN0aW9ucy5wdXNoKGZ1bmN0aW9uIER0dChjKXtsZXR7Ym9yZGVyOmwsdmlzdWFsQ2VsbFJhbmdlOmEsLi4uZH09YztyZXR1cm4gbmV3IFNnKHsuLi5sLC4u'@;
put 'LmQsc2VsZWN0aW9uVHlwZToiY3VzdG9tLXNlbGVjdGlvbiJ9LGEpfSh7Li4udGhpcy5vcHRpb25zLC4uLmx9KSl9Y2xlYXIoKXt0aGlzLmZvY3VzLmNsZWFyKCksdGhpcy5maWxsLmNsZWFyKCksWW4odGhpcy5hcmVhcy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5sYXllcmVk'@;
put 'QXJlYXMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRoaXMucm93SGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmFjdGl2ZVJvd0hlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xl'@;
put 'YXIoKX0pLFluKHRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLnJvd0hpZ2hsaWdodHMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFluKHRo'@;
put 'aXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm5bdGhpcy5mb2N1cyx0aGlzLmZpbGwsLi4udGhpcy5hcmVhcy52YWx1ZXMoKSwuLi50aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKSwuLi50aGlzLnJvd0hlYWRlcnMu'@;
put 'dmFsdWVzKCksLi4udGhpcy5jb2x1bW5IZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZUNvbHVtbkhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVDb3JuZXJIZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMucm93SGlnaGxp'@;
put 'Z2h0cy52YWx1ZXMoKSwuLi50aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFsdWVzKCksLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zXVtTeW1ib2wuaXRlcmF0b3JdKCl9fWZ1bmN0aW9uIHhnKGMsbCl7Y29uc3QgYT10aGlzLmxheWVyTGV2ZWw7aWYoYy5oYXMoYSkpcmV0dXJuIGMuZ2V0KGEpO2Nv'@;
put 'bnN0IGQ9bCh7bGF5ZXJMZXZlbDphLC4uLnRoaXMub3B0aW9uc30pO3JldHVybiBjLnNldChhLGQpLGR9Y29uc3QgTnR0PUh0dDtmdW5jdGlvbiBCM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFZ0dChjKXt2YXIgbD1mdW5jdGlvbiBCdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8'@;
put 'fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg'@;
put 'cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp'@;
put 'Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGp0dHtjb25zdHJ1Y3RvcihsKXtCM2UodGhpcywicmFuZ2VzIixbXSksQjNlKHRoaXMsImNyZWF0ZUNlbGxSYW5nZSIsdm9pZCAwKSx0aGlzLmNyZWF0ZUNlbGxSYW5nZT1sfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMu'@;
put 'c2l6ZSgpfXNldChsKXtyZXR1cm4gdGhpcy5jbGVhcigpLHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFuZ2UobCkpLHRoaXN9YWRkKGwpe3JldHVybiB0aGlzLnJhbmdlcy5wdXNoKHRoaXMuY3JlYXRlQ2VsbFJhbmdlKGwpKSx0aGlzfXBvcCgpe3JldHVybiB0aGlzLnJhbmdl'@;
put 'cy5wb3AoKSx0aGlzfWN1cnJlbnQoKXtyZXR1cm4gdGhpcy5wZWVrQnlJbmRleCh0aGlzLnNpemUoKS0xKX1wcmV2aW91cygpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KHRoaXMuc2l6ZSgpLTIpfWluY2x1ZGVzKGwpe3JldHVybiB0aGlzLnJhbmdlcy5zb21lKGE9PmEuaW5jbHVkZXMobCkp'@;
put 'fWNsZWFyKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aD0wLHRoaXN9c2l6ZSgpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGh9cGVla0J5SW5kZXgoKXtsZXQgYSxsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO3JldHVybiBsPj0w'@;
put 'JiZsPHRoaXMuc2l6ZSgpJiYoYT10aGlzLnJhbmdlc1tsXSksYX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLnJhbmdlc1tTeW1ib2wuaXRlcmF0b3JdKCl9fWNvbnN0IHp0dD1qdHQ7ZnVuY3Rpb24gZ1goYyxsLGEpe2ozZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gajNlKGMs'@;
put 'bCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBCcyhjLGwpe3JldHVybiBjLmdldChKdShjLGwpKX1mdW5jdGlvbiBTUChjLGwsYSl7cmV0dXJu'@;
put 'IGMuc2V0KEp1KGMsbCksYSksYX1mdW5jdGlvbiBKdShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRo'@;
put 'aXMgb2JqZWN0Iil9dmFyIE1QPW5ldyBXZWFrTWFwLHVjPW5ldyBXZWFrTWFwLHUzPW5ldyBXZWFrTWFwLGYwPW5ldyBXZWFrU2V0O2NsYXNzIHozZXtjb25zdHJ1Y3RvcihsLGEpeyhmdW5jdGlvbiBVdHQoYyxsKXtqM2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsZjApLGdYKHRoaXMsTVAsdm9p'@;
put 'ZCAwKSxnWCh0aGlzLHVjLHZvaWQgMCksZ1godGhpcyx1Myx7eDowLHk6MH0pLFNQKE1QLHRoaXMsbCksU1AodWMsdGhpcyxhKX10cmFuc2Zvcm1TdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1C'@;
put 'cyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGwsYSk7bGV0IGY9QnMoTVAsdGhpcykuY3VycmVudCgpLmhpZ2hsaWdodDtjb25zdCB2PUJzKHVjLHRoaXMpLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhmKTtsZXQgTT0wLEQ9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5z'@;
put 'Zm9ybVN0YXJ0IixoKSxudWxsIT09di5yb3cmJm51bGwhPT12LmNvbCl7Y29uc3R7d2lkdGg6WixoZWlnaHQ6bmV9PUp1KGYwLHRoaXMsWjNlKS5jYWxsKHRoaXMpLHtyb3c6Y2UsY29sOmJlfT1KdShmMCx0aGlzLFczZSkuY2FsbCh0aGlzLGYpLEVlPUJzKHVjLHRoaXMpLmZpeGVkUm93c0Jv'@;
put 'dHRvbSgpLEJlPUJzKHVjLHRoaXMpLm1pblNwYXJlUm93cygpLHFlPUJzKHVjLHRoaXMpLm1pblNwYXJlQ29scygpLHJ0PUJzKHVjLHRoaXMpLmF1dG9XcmFwUm93KCkscHQ9QnModWMsdGhpcykuYXV0b1dyYXBDb2woKSxkdD1Ccyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGNlK2gucm93'@;
put 'LGJlK2guY29sKTtpZihkdC5yb3c+PW5lKXtjb25zdCBDbj1GZChkJiZCZT4wJiYwPT09RWUpLHRuPWR0LmNvbCsxLE1uPUJzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZHQucm93LW5lLHRuPj1aP3RuLVo6dG4pO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ29sdW1uV3JhcCIsQ24s'@;
put 'SnUoZjAsdGhpcyxNXykuY2FsbCh0aGlzLE1uKSx0bj49WiksQ24udmFsdWU/dGhpcy5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIixCcyh1Yyx0aGlzKS5jb3VudFJlbmRlcmFibGVSb3dzKCkpOnB0JiZkdC5hc3NpZ24oTW4pfWVsc2UgaWYoZHQucm93PDApe2NvbnN0IENuPUZk'@;
put 'KHB0KSx0bj1kdC5jb2wtMSxNbj1Ccyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKG5lK2R0LnJvdyx0bjwwP1ordG46dG4pO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ29sdW1uV3JhcCIsQ24sSnUoZjAsdGhpcyxNXykuY2FsbCh0aGlzLE1uKSx0bjwwKSxwdCYmZHQuYXNzaWduKE1u'@;
put 'KX1pZihkdC5jb2w+PVope2NvbnN0IENuPUZkKGQmJnFlPjApLHRuPWR0LnJvdysxLE1uPUJzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHModG4+PW5lP3RuLW5lOnRuLGR0LmNvbC1aKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJvd1dyYXAiLENuLEp1KGYwLHRoaXMsTV8pLmNhbGwo'@;
put 'dGhpcyxNbiksdG4+PW5lKSxDbi52YWx1ZT90aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJlcXVpcmUiLEJzKHVjLHRoaXMpLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSk6cnQmJmR0LmFzc2lnbihNbil9ZWxzZSBpZihkdC5jb2w8MCl7Y29uc3QgQ249RmQocnQpLHRuPWR0LnJvdy0x'@;
put 'LE1uPUJzKHVjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHModG48MD9uZSt0bjp0bixaK2R0LmNvbCk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFwIixDbixKdShmMCx0aGlzLE1fKS5jYWxsKHRoaXMsTW4pLHRuPDApLHJ0JiZkdC5hc3NpZ24oTW4pfWNvbnN0e3Jvd0RpcjpKdCxj'@;
put 'b2xEaXI6dm59PUp1KGYwLHRoaXMsVTNlKS5jYWxsKHRoaXMsZHQpO009SnQsRD12bixmPUp1KGYwLHRoaXMsTV8pLmNhbGwodGhpcyxkdCl9cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsZixNLEQpLGZ9dHJhbnNmb3JtRW5kKGwsYSl7Y29uc3QgZD1C'@;
put 'cyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGwsYSksaD1CcyhNUCx0aGlzKS5jdXJyZW50KCksZj1Ccyh1Yyx0aGlzKS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaC5oaWdobGlnaHQpLHY9SnUoZjAsdGhpcyxtWCkuY2FsbCh0aGlzLGgudG8ucm93LGguZnJvbS5yb3cpLE09SnUoZjAs'@;
put 'dGhpcyx2WCkuY2FsbCh0aGlzLGgudG8uY29sLGguZnJvbS5jb2wpLEQ9aC50by5jbG9uZSgpO2xldCBaPTAsbmU9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybUVuZCIsZCksbnVsbCE9PWYucm93JiZudWxsIT09Zi5jb2wmJm51bGwhPT12JiZudWxsIT09TSl7Y29u'@;
put 'c3R7cm93OmNlLGNvbDpiZX09SnUoZjAsdGhpcyxXM2UpLmNhbGwodGhpcyxoLmhpZ2hsaWdodCksRWU9QnModWMsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh2K2Qucm93LE0rZC5jb2wpLEJlPWguZ2V0VG9wU3RhcnRDb3JuZXIoKSxxZT1oLmdldFRvcEVuZENvcm5lcigpLHJ0PWguZ2V0Qm90'@;
put 'dG9tRW5kQ29ybmVyKCk7aWYoZC5jb2w8MCYmTT49YmUmJkVlLmNvbDxiZSl7Y29uc3Qgdm49RWUuY29sLWJlO0VlLmNvbD1KdShmMCx0aGlzLHZYKS5jYWxsKHRoaXMsQmUuY29sLHFlLmNvbCkrdm59ZWxzZSBpZihkLmNvbD4wJiZNPD1iZSYmRWUuY29sPmJlKXtjb25zdCB2bj1KdShmMCx0'@;
put 'aGlzLHZYKS5jYWxsKHRoaXMscWUuY29sLEJlLmNvbCksQ249TWF0aC5tYXgoRWUuY29sLXZuLDEpO0VlLmNvbD12bitDbn1pZihkLnJvdzwwJiZ2Pj1jZSYmRWUucm93PGNlKXtjb25zdCB2bj1FZS5yb3ctY2U7RWUucm93PUp1KGYwLHRoaXMsbVgpLmNhbGwodGhpcyxCZS5yb3cscnQucm93'@;
put 'KSt2bn1lbHNlIGlmKGQucm93PjAmJnY8PWNlJiZFZS5yb3c+Y2Upe2NvbnN0IHZuPUp1KGYwLHRoaXMsbVgpLmNhbGwodGhpcyxydC5yb3csQmUucm93KSxDbj1NYXRoLm1heChFZS5yb3ctdm4sMSk7RWUucm93PXZuK0NufWNvbnN0e3Jvd0RpcjpwdCxjb2xEaXI6ZHR9PUp1KGYwLHRoaXMs'@;
put 'VTNlKS5jYWxsKHRoaXMsRWUpO1o9cHQsbmU9ZHQ7Y29uc3QgSnQ9SnUoZjAsdGhpcyxNXykuY2FsbCh0aGlzLEVlKTswPT09ZC5yb3cmJjAhPT1kLmNvbD9ELmNvbD1KdC5jb2w6MCE9PWQucm93JiYwPT09ZC5jb2w/RC5yb3c9SnQucm93OihELnJvdz1KdC5yb3csRC5jb2w9SnQuY29sKX1y'@;
put 'ZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybUVuZCIsRCxaLG5lKSxEfXNldE9mZnNldFNpemUobCl7bGV0e3g6YSx5OmR9PWw7U1AodTMsdGhpcyx7eDphLHk6ZH0pfXJlc2V0T2Zmc2V0U2l6ZSgpe1NQKHUzLHRoaXMse3g6MCx5OjB9KX19ZnVuY3Rpb24gVTNlKGMp'@;
put 'e2NvbnN0e3dpZHRoOmwsaGVpZ2h0OmF9PUp1KGYwLHRoaXMsWjNlKS5jYWxsKHRoaXMpO2xldCBkPTAsaD0wO3JldHVybiBjLnJvdzwwPyhkPS0xLGMucm93PTApOmMucm93PjAmJmMucm93Pj1hJiYoZD0xLGMucm93PWEtMSksYy5jb2w8MD8oaD0tMSxjLmNvbD0wKTpjLmNvbD4wJiZjLmNv'@;
put 'bD49bCYmKGg9MSxjLmNvbD1sLTEpLHtyb3dEaXI6ZCxjb2xEaXI6aH19ZnVuY3Rpb24gWjNlKCl7cmV0dXJue3dpZHRoOkJzKHUzLHRoaXMpLngrQnModWMsdGhpcykuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGhlaWdodDpCcyh1Myx0aGlzKS55K0JzKHVjLHRoaXMpLmNvdW50UmVuZGVy'@;
put 'YWJsZVJvd3MoKX19ZnVuY3Rpb24gbVgoYyxsKXtjb25zdCBhPUJzKHVjLHRoaXMpLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3coYyxsKTtyZXR1cm4gbnVsbD09PWE/bnVsbDpCcyh1Myx0aGlzKS55K2F9ZnVuY3Rpb24gdlgoYyxsKXtjb25zdCBhPUJzKHVjLHRoaXMpLmZpbmRG'@;
put 'aXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4oYyxsKTtyZXR1cm4gbnVsbD09PWE/bnVsbDpCcyh1Myx0aGlzKS54K2F9ZnVuY3Rpb24gVzNlKGMpe2NvbnN0e3JvdzpsLGNvbDphfT1Ccyh1Yyx0aGlzKS52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoYyk7aWYobnVsbD09PWx8fG51bGw9'@;
put 'PT1hKXRocm93IG5ldyBFcnJvcigiUmVuZGVyYWJsZSBjb29yZHMgYXJlIG5vdCB2aXNpYmxlLiIpO3JldHVybiBCcyh1Yyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKEJzKHUzLHRoaXMpLnkrbCxCcyh1Myx0aGlzKS54K2EpfWZ1bmN0aW9uIE1fKGMpe2NvbnN0IGw9Yy5jbG9uZSgpO3JldHVy'@;
put 'biBsLmNvbD1jLmNvbC1Ccyh1Myx0aGlzKS54LGwucm93PWMucm93LUJzKHUzLHRoaXMpLnksQnModWMsdGhpcykucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKGwpfVRsKHozZSx5MSk7Y29uc3QgWTNlPXozZSxadHQ9WzMsMl0sV3R0PVtbIm51bWJlciJdLFsibnVtYmVyIiwic3RyaW5nIl0s'@;
put 'WyJudW1iZXIiLCJ1bmRlZmluZWQiXSxbIm51bWJlciIsInN0cmluZyIsInVuZGVmaW5lZCJdXSx5WD1TeW1ib2woInJvb3QiKSwkM2U9U3ltYm9sKCJjaGlsZCIpO2Z1bmN0aW9uIHhfKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50'@;
put 'c1sxXTp5WDtpZihsIT09eVgmJmwhPT0kM2UpdGhyb3cgbmV3IEVycm9yKCJUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHVzZWQgaW50ZXJuYWxseSBvbmx5IGFuZCBjYW5ub3QgYmUgb3ZlcndyaXR0ZW4uIik7Y29uc3QgYT1BcnJheS5pc0FycmF5KGMpLGQ9bD09PXlYO2xldCBoPTA7aWYoYSl7'@;
put 'Y29uc3QgZj1jWzBdOzA9PT1jLmxlbmd0aD9oPTE6ZCYmZiBpbnN0YW5jZW9mIGRLP2g9MzpkJiZBcnJheS5pc0FycmF5KGYpP2g9eF8oZiwkM2UpOmMubGVuZ3RoPj0yJiZjLmxlbmd0aDw9NCYmIWMuc29tZSgoTSxEKT0+IVd0dFtEXS5pbmNsdWRlcyh0eXBlb2YgTSkpJiYoaD0yKX1yZXR1'@;
put 'cm4gaH1mdW5jdGlvbiBRRShjKXtsZXR7Y3JlYXRlQ2VsbENvb3JkczpsLGNyZWF0ZUNlbGxSYW5nZTphLGtlZXBEaXJlY3Rpb246ZD0hMSxwcm9wVG9Db2w6aH09YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFadHQuaW5jbHVk'@;
put 'ZXMoYykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzZWxlY3Rpb24gcmFuZ2VzIHNjaGVtYSB0eXBlIHdhcyBwcm92aWRlZC4iKTtyZXR1cm4gZnVuY3Rpb24oZil7Y29uc3Qgdj0zPT09YztsZXQgTT12P2YuZnJvbS5yb3c6ZlswXSxEPXY/Zi5mcm9tLmNvbDpmWzFdLFo9dj9mLnRv'@;
put 'LnJvdzpmWzJdLG5lPXY/Zi50by5jb2w6ZlszXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgaCYmKCJzdHJpbmciPT10eXBlb2YgRCYmKEQ9aChEKSksInN0cmluZyI9PXR5cGVvZiBuZSYmKG5lPWgobmUpKSkseWMoWikmJihaPU0pLHljKG5lKSYmKG5lPUQpLCFkKXtjb25zdCBFZT1NLEJlPUQs'@;
put 'cWU9WixydD1uZTtNPU1hdGgubWluKEVlLHFlKSxEPU1hdGgubWluKEJlLHJ0KSxaPU1hdGgubWF4KEVlLHFlKSxuZT1NYXRoLm1heChCZSxydCl9Y29uc3QgY2U9bChNLEQpLGJlPWwoWixuZSk7cmV0dXJuIGEoY2UsY2UsYmUpfX1mdW5jdGlvbiBFXyhjLGwsYSl7KGZ1bmN0aW9uICR0dChj'@;
put 'LGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUTcoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEt0dChjKXt2'@;
put 'YXIgbD1mdW5jdGlvbiBxdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHdjKGMsbCl7cmV0dXJuIGMuZ2V0KEszZShjLGwpKX1mdW5jdGlvbiBGcChjLGwsYSl7cmV0dXJuIGMuc2V0KEszZShjLGwpLGEpLGF9'@;
put 'ZnVuY3Rpb24gSzNlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgXzE9'@;
put 'bmV3IFdlYWtNYXAsZTk9bmV3IFdlYWtNYXAsVFA9bmV3IFdlYWtNYXAsZVQ9bmV3IFdlYWtNYXAsQVA9bmV3IFdlYWtNYXAsdFQ9bmV3IFdlYWtNYXA7Y2xhc3MgcTNle2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpcztRNyh0aGlzLCJzZXR0aW5ncyIsdm9pZCAwKSxRNyh0aGlzLCJ0YWJs'@;
put 'ZVByb3BzIix2b2lkIDApLFE3KHRoaXMsImluUHJvZ3Jlc3MiLCExKSxRNyh0aGlzLCJzZWxlY3RlZFJhbmdlIixuZXcgenR0KChoLGYsdik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsUmFuZ2UoaCxmLHYpKSksUTcodGhpcywiaGlnaGxpZ2h0Iix2b2lkIDApLEVfKHRoaXMsXzEsdm9p'@;
put 'ZCAwKSxFXyh0aGlzLGU5LHZvaWQgMCksUTcodGhpcywic2VsZWN0ZWRCeVJvd0hlYWRlciIsbmV3IFNldCksUTcodGhpcywic2VsZWN0ZWRCeUNvbHVtbkhlYWRlciIsbmV3IFNldCksRV8odGhpcyxUUCwhMSksRV8odGhpcyxlVCwhMSksRV8odGhpcyxBUCwidW5rbm93biIpLEVfKHRoaXMs'@;
put 'dFQsLTEpLHRoaXMuc2V0dGluZ3M9bCx0aGlzLnRhYmxlUHJvcHM9YSx0aGlzLmhpZ2hsaWdodD1uZXcgTnR0KHtoZWFkZXJDbGFzc05hbWU6bC5jdXJyZW50SGVhZGVyQ2xhc3NOYW1lLGFjdGl2ZUhlYWRlckNsYXNzTmFtZTpsLmFjdGl2ZUhlYWRlckNsYXNzTmFtZSxyb3dDbGFzc05hbWU6'@;
put 'bC5jdXJyZW50Um93Q2xhc3NOYW1lLGNvbHVtbkNsYXNzTmFtZTpsLmN1cnJlbnRDb2xDbGFzc05hbWUsY2VsbEF0dHJpYnV0ZXM6W1siYXJpYS1zZWxlY3RlZCIsInRydWUiXV0scm93SW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVy'@;
put 'OnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcixkaXNhYmxlZENlbGxTZWxlY3Rpb246KGgsZik9PnRoaXMudGFibGVQcm9wcy5pc0Rpc2FibGVkQ2VsbFNlbGVjdGlvbihoLGYpLGNlbGxDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNDZWxsQ29ybmVyVmlzaWJs'@;
put 'ZSguLi5hcmd1bWVudHMpfSxhcmVhQ29ybmVyVmlzaWJsZTpmdW5jdGlvbigpe3JldHVybiBkLmlzQXJlYUNvcm5lclZpc2libGUoLi4uYXJndW1lbnRzKX0sdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVu'@;
put 'ZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKSxjcmVhdGVDZWxsUmFuZ2U6KGgsZix2KT0+dGhpcy50YWJs'@;
put 'ZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShoLGYsdil9KSxGcChfMSx0aGlzLG5ldyBZM2UodGhpcy5zZWxlY3RlZFJhbmdlLHtyb3dJbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLGNvdW50UmVuZGVyYWJsZVJvd3M6KCk9PnRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVSb3dzKCksY291bnRSZW5kZXJhYmxlQ29sdW1uczooKT0+dGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhp'@;
put 'cy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93OmZ1bmN0aW9uKCl7cmV0dXJuIGQu'@;
put 'dGFibGVQcm9wcy5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93KC4uLmFyZ3VtZW50cyl9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW46ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4oLi4uYXJn'@;
put 'dW1lbnRzKX0sY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKSxmaXhlZFJvd3NCb3R0b206KCk9PmwuZml4ZWRSb3dzQm90dG9tLG1pblNwYXJlUm93czooKT0+bC5taW5TcGFyZVJvd3MsbWluU3BhcmVDb2xzOigpPT5sLm1pblNw'@;
put 'YXJlQ29scyxhdXRvV3JhcFJvdzooKT0+bC5hdXRvV3JhcFJvdyxhdXRvV3JhcENvbDooKT0+bC5hdXRvV3JhcENvbH0pKSxGcChlOSx0aGlzLG5ldyBZM2UodGhpcy5zZWxlY3RlZFJhbmdlLHtyb3dJbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMucm93SW5kZXhNYXBwZXIsY29sdW1uSW5k'@;
put 'ZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLmNvbHVtbkluZGV4TWFwcGVyLGNvdW50UmVuZGVyYWJsZVJvd3M6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7cmV0dXJuIHRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGguZ2V0T3V0'@;
put 'ZXJCb3R0b21FbmRDb3JuZXIoKS5yb3cpfSxjb3VudFJlbmRlcmFibGVDb2x1bW5zOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO3JldHVybiB0aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxoLmdldE91dGVyQm90dG9tRW5k'@;
put 'Q29ybmVyKCkuY29sKX0sdmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMoaCkscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmg9PnRoaXMudGFibGVQcm9wcy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoaCksZmluZEZp'@;
put 'cnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdzpmdW5jdGlvbigpe3JldHVybiBkLnRhYmxlUHJvcHMuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdyguLi5hcmd1bWVudHMpfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uOmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVQ'@;
put 'cm9wcy5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uKC4uLmFyZ3VtZW50cyl9LGNyZWF0ZUNlbGxDb29yZHM6KGgsZik9PnRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGgsZiksZml4ZWRSb3dzQm90dG9tOigpPT4wLG1pblNwYXJlUm93czooKT0+MCxtaW5TcGFy'@;
put 'ZUNvbHM6KCk9PjAsYXV0b1dyYXBSb3c6KCk9PiEwLGF1dG9XcmFwQ29sOigpPT4hMH0pKSx3YyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disr'@;
put 'KWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLHdjKF8xLHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxm'@;
put 'PW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5mKX0pLHdjKF8xLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2'@;
put 'YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsLi4uZil9KSx3YyhfMSx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3Jt'@;
put 'RW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLHdjKF8xLHRoaXMpLmFkZExvY2Fs'@;
put 'SG9vaygiaW5zZXJ0Um93UmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRSb3dSZXF1aXJlIiwuLi5mKX0pLHdjKF8xLHRo'@;
put 'aXMpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJpbnNlcnRDb2xSZXF1aXJlIiwuLi5m'@;
put 'KX0pLHdjKF8xLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlUm93V3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVSb3dXcmFw'@;
put 'IiwuLi5mKX0pLHdjKF8xLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlQ29sdW1uV3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZv'@;
put 'cmVDb2x1bW5XcmFwIiwuLi5mKX0pLHdjKGU5LHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVu'@;
put 'TG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLmYpfSksd2MoZTksdGhpcykuYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09'@;
put 'YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLmYpfSl9Z2V0U2VsZWN0ZWRSYW5nZSgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2V9bWFya1NvdXJjZShsKXtGcChBUCx0aGlzLGwpfW1hcmtFbmRTb3VyY2UoKXtGcChB'@;
put 'UCx0aGlzLCJ1bmtub3duIil9Z2V0U2VsZWN0aW9uU291cmNlKCl7cmV0dXJuIHdjKEFQLHRoaXMpfXNldEV4cGVjdGVkTGF5ZXJzKGwpe0ZwKHRULHRoaXMsbCl9YmVnaW4oKXt0aGlzLmluUHJvZ3Jlc3M9ITB9ZmluaXNoKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkZp'@;
put 'bmlzaGVkIixBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkpLHRoaXMuaW5Qcm9ncmVzcz0hMSxGcCh0VCx0aGlzLC0xKX1pc0luUHJvZ3Jlc3MoKXtyZXR1cm4gdGhpcy5pblByb2dyZXNzfXNldFJhbmdlU3RhcnQobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9'@;
put 'PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOmw7Y29uc3QgZj0ibXVsdGlwbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlLHY9eWMoYSk/dGhpcy50YWJsZVByb3BzLmdldFNo'@;
put 'b3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKTphLE09bC5jbG9uZSgpO0ZwKFRQLHRoaXMsITEpLHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydCIrKGQ/Ik9ubHkiOiIiKSxNKSwoIWZ8fGYmJiF2JiZ5YyhhKSkmJnRoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigp'@;
put 'LHRoaXMuc2VsZWN0ZWRSYW5nZS5hZGQoTSkuY3VycmVudCgpLnNldEhpZ2hsaWdodChoLmNsb25lKCkpLDA9PT10aGlzLmdldExheWVyTGV2ZWwoKSYmKHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5jbGVhcigpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5jbGVhcigpKSxkfHx0aGlz'@;
put 'LnNldFJhbmdlRW5kKGwpfXNldFJhbmdlU3RhcnRPbmx5KGwsYSl7dGhpcy5zZXRSYW5nZVN0YXJ0KGwsYSwhMCxhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bCl9c2V0UmFuZ2VFbmQobCl7aWYodGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1w'@;
put 'dHkoKSlyZXR1cm47Y29uc3QgYT1sLmNsb25lKCksZD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksaD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksZj10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmNsb25lKCkuc2V0VG8obCkuaXNTaW5nbGVIZWFkZXIoKTtpZigoZD4wfHxo'@;
put 'PjApJiYoMD09PWQmJmEuY29sPDAmJiFmfHwwPT09aCYmYS5yb3c8MCYmIWYpKXJldHVybjt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIixhKSx0aGlzLmJlZ2luKCk7Y29uc3Qgdj10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO2lmKHRoaXMuc2V0dGluZ3MubmF2'@;
put 'aWdhYmxlSGVhZGVyc3x8di5oaWdobGlnaHQubm9ybWFsaXplKCksInNpbmdsZSI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUpdi5zZXRGcm9tKHYuaGlnaGxpZ2h0KSx2LnNldFRvKHYuaGlnaGxpZ2h0KTtlbHNle2NvbnN0IEQ9di5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCksWj12'@;
put 'LmdldFZlcnRpY2FsRGlyZWN0aW9uKCksbmU9dGhpcy5pc011bHRpcGxlKCk7di5zZXRUbyhhKSxuZSYmKEQhPT12LmdldEhvcml6b250YWxEaXJlY3Rpb24oKXx8MT09PXYuZ2V0V2lkdGgoKSYmIXYuaW5jbHVkZXModi5oaWdobGlnaHQpKSYmdi5mcm9tLmFzc2lnbih7Y29sOnYuaGlnaGxp'@;
put 'Z2h0LmNvbH0pLG5lJiYoWiE9PXYuZ2V0VmVydGljYWxEaXJlY3Rpb24oKXx8MT09PXYuZ2V0SGVpZ2h0KCkmJiF2LmluY2x1ZGVzKHYuaGlnaGxpZ2h0KSkmJnYuZnJvbS5hc3NpZ24oe3Jvdzp2LmhpZ2hsaWdodC5yb3d9KX1kPjAmJmg+MCYmKCF0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhl'@;
put 'YWRlcnN8fHRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycyYmIXYuaXNTaW5nbGVIZWFkZXIoKSkmJnYudG8ubm9ybWFsaXplKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVIaWdobGlnaHRTZXQiKSx0aGlzLnNldFJhbmdlRm9jdXModGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQo'@;
put 'KS5oaWdobGlnaHQpLHRoaXMuYXBwbHlBbmRDb21taXQoKTtjb25zdCBNPS0xPT09d2ModFQsdGhpcyl8fHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk9PT13Yyh0VCx0aGlzKTt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2V0UmFuZ2VFbmQiLGwsTSl9YXBwbHlBbmRDb21taXQoKXtsZXQg'@;
put 'bD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmdldExheWVyTGV2ZWwoKTtj'@;
put 'b25zdCBkPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxoPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTthPHRoaXMuaGlnaGxpZ2h0LmxheWVyTGV2ZWwmJihZbih0aGlzLmhpZ2hsaWdodC5nZXRBcmVhcygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldExh'@;
put 'eWVyZWRBcmVhcygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldFJvd0hlYWRlcnMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRDb2x1bW5IZWFkZXJzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZl'@;
put 'Um93SGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldEFjdGl2ZUNvbHVtbkhlYWRlcnMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVDb3JuZXJIZWFkZXJzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdo'@;
put 'bGlnaHQuZ2V0Um93SGlnaGxpZ2h0cygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldENvbHVtbkhpZ2hsaWdodHMoKSxCZT0+e0JlLmNsZWFyKCl9KSksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChhKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFy'@;
put 'ZWEoKSx2PXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCksTT10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dIZWFkZXIoKSxEPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhlYWRlcigpLFo9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlUm93SGVhZGVyKCksbmU9dGhpcy5o'@;
put 'aWdobGlnaHQuY3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCksY2U9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCksYmU9dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0KCksRWU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7aWYo'@;
put 'Zi5jbGVhcigpLHYuY2xlYXIoKSxNLmNsZWFyKCksRC5jbGVhcigpLFouY2xlYXIoKSxuZS5jbGVhcigpLGNlLmNsZWFyKCksYmUuY2xlYXIoKSxFZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihmWCxsLmhpZ2hsaWdodCkmJih0aGlzLmlzTXVsdGlwbGUoKXx8YT49MSkm'@;
put 'JihmLmFkZChsLmZyb20pLmFkZChsLnRvKS5jb21taXQoKSx2LmFkZChsLmZyb20pLmFkZChsLnRvKS5jb21taXQoKSwxPT09YSkpe2NvbnN0IEJlPXRoaXMuc2VsZWN0ZWRSYW5nZS5wcmV2aW91cygpO3RoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYS0xKSx0aGlzLmhpZ2hsaWdodC5j'@;
put 'cmVhdGVBcmVhKCkuYWRkKEJlLmZyb20pLmNvbW1pdCgpLnN5bmNXaXRoKEJlKSx0aGlzLmhpZ2hsaWdodC5jcmVhdGVMYXllcmVkQXJlYSgpLmFkZChCZS5mcm9tKS5jb21taXQoKS5zeW5jV2l0aChCZSksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChhKX1pZih0aGlzLmhpZ2hsaWdo'@;
put 'dC5pc0VuYWJsZWRGb3IoaFgsbC5oaWdobGlnaHQpKXtpZighbC5pc1NpbmdsZUhlYWRlcigpKXtjb25zdCBydD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChsLmZyb20ucm93LDApLC0xKSxwdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLnRv'@;
put 'LnJvdywtMSksZHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsTWF0aC5tYXgobC5mcm9tLmNvbCwwKSksSnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsbC50by5jb2wpOyJzaW5nbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlPyhNLmFk'@;
put 'ZChydCkuY29tbWl0KCksRC5hZGQoZHQpLmNvbW1pdCgpLGJlLmFkZChydCkuY29tbWl0KCksRWUuYWRkKGR0KS5jb21taXQoKSk6KE0uYWRkKHJ0KS5hZGQocHQpLmNvbW1pdCgpLEQuYWRkKGR0KS5hZGQoSnQpLmNvbW1pdCgpLGJlLmFkZChydCkuYWRkKHB0KS5jb21taXQoKSxFZS5hZGQo'@;
put 'ZHQpLmFkZChKdCkuY29tbWl0KCkpfWNvbnN0IEJlPSF3YyhlVCx0aGlzKSYmdGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJihoPjAmJmg9PT1sLmdldFdpZHRoKCl8fDA9PT1oJiZ0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKSxxZT0hd2MoZVQsdGhpcykmJnRoaXMuaXNFbnRpcmVD'@;
put 'b2x1bW5TZWxlY3RlZCgpJiYoZD4wJiZkPT09bC5nZXRIZWlnaHQoKXx8MD09PWQmJnRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpO0JlJiZaLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChsLmZyb20ucm93LDApLE1hdGgubWluKC10aGlzLnRh'@;
put 'YmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksLTEpKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGwudG8ucm93LDApLC0xKSkuY29tbWl0KCkscWUmJm5lLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbigtdGhpcy50'@;
put 'YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLC0xKSxNYXRoLm1heChsLmZyb20uY29sLDApKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLE1hdGgubWF4KGwudG8uY29sLDApKSkuY29tbWl0KCksQmUmJnFlJiZjZS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0'@;
put 'ZUNlbGxDb29yZHMoLXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSwtdGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpKSkuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLC0xKSkuY29tbWl0KCl9fXNldFJhbmdlRm9jdXMobCl7aWYodGhpcy5z'@;
put 'ZWxlY3RlZFJhbmdlLmlzRW1wdHkoKSlyZXR1cm47Y29uc3QgYT10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO3RoaXMuaW5Qcm9ncmVzc3x8dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRGb2N1cyIsbCk7Y29uc3QgZD10aGlzLmhpZ2hsaWdodC5nZXRGb2N1cygpO2QuY2xlYXIo'@;
put 'KSxhLnNldEhpZ2hsaWdodChsKSx0aGlzLmluUHJvZ3Jlc3N8fHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlSGlnaGxpZ2h0U2V0IiksdGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKEpFLGEuaGlnaGxpZ2h0KSYmZC5hZGQoYS5oaWdobGlnaHQpLmNvbW1pdCgpLnN5bmNXaXRoKGEpLHRo'@;
put 'aXMuaW5Qcm9ncmVzc3x8KEZwKFRQLHRoaXMsITApLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZXRGb2N1cyIsYS5oaWdobGlnaHQpKX10cmFuc2Zvcm1TdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07dGhp'@;
put 'cy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzP3djKF8xLHRoaXMpLnNldE9mZnNldFNpemUoe3g6dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLHk6dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpfSk6d2MoXzEsdGhpcykucmVzZXRPZmZzZXRTaXplKCksdGhpcy5z'@;
put 'ZXRSYW5nZVN0YXJ0KHdjKF8xLHRoaXMpLnRyYW5zZm9ybVN0YXJ0KGwsYSxkKSl9dHJhbnNmb3JtRW5kKGwsYSl7dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzP3djKF8xLHRoaXMpLnNldE9mZnNldFNpemUoe3g6dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLHk6dGhp'@;
put 'cy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpfSk6d2MoXzEsdGhpcykucmVzZXRPZmZzZXRTaXplKCksdGhpcy5zZXRSYW5nZUVuZCh3YyhfMSx0aGlzKS50cmFuc2Zvcm1FbmQobCxhKSl9dHJhbnNmb3JtRm9jdXMobCxhKXtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50'@;
put 'KCkse3JvdzpoLGNvbDpmfT1kLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGYtMSksTT10aGlzLnRhYmxlUHJvcHMuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxoLTEpO2QuaGlnaGxpZ2h0Lmlz'@;
put 'SGVhZGVyKCk/d2MoZTksdGhpcykuc2V0T2Zmc2V0U2l6ZSh7eDpmPDA/TWF0aC5hYnMoZik6LXYseTpoPDA/TWF0aC5hYnMoaCk6LU19KTp3YyhlOSx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OmY8MD8wOi12LHk6aDwwPzA6LU19KTtjb25zdCBEPXdjKGU5LHRoaXMpLnRyYW5zZm9ybVN0YXJ0'@;
put 'KGwsYSk7dGhpcy5zZXRSYW5nZUZvY3VzKEQubm9ybWFsaXplKCkpfXNoaWZ0Um93cyhsLGEpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO2lmKHRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKCkpdGhpcy5zZWxlY3RBbGwo'@;
put 'ITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwfSk7ZWxzZSBpZih0aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxkLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5yb3c+PWwpe2NvbnN0e2Zyb206aCx0bzpmLGhpZ2hsaWdodDp2fT1kLE09dGhpcy50YWJsZVByb3BzLmNv'@;
put 'dW50Um93cygpLEQ9dGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxaPXRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksbmU9Wj8tMTowLGNlPVo/MDphO3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLnBvcCgpO2NvbnN0IGJlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRz'@;
put 'KEFzKGgucm93K2NlLG5lLE0tMSksaC5jb2wpLEVlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKEFzKGYucm93K2EsbmUsTS0xKSxmLmNvbCk7dGhpcy5tYXJrU291cmNlKCJzaGlmdCIpLHYucm93Pj1sP3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkoYmUsITAsdGhpcy50YWJsZVBy'@;
put 'b3BzLmNyZWF0ZUNlbGxDb29yZHMoQXModi5yb3crYSwwLE0tMSksdi5jb2wpKTp0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGJlLCEwKSxEJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxaJiZ0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuYWRk'@;
put 'KHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSx0aGlzLnNldFJhbmdlRW5kKEVlKSx0aGlzLm1hcmtFbmRTb3VyY2UoKX19c2hpZnRDb2x1bW5zKGwsYSl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7aWYodGhpcy5pc1NlbGVj'@;
put 'dGVkQnlDb3JuZXIoKSl0aGlzLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITB9KTtlbHNlIGlmKHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fGQuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbD49bCl7Y29uc3R7ZnJvbTpoLHRvOmYsaGlnaGxpZ2h0'@;
put 'OnZ9PWQsTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksRD10aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFo9dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxuZT1EPy0xOjAsY2U9RD8wOmE7dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkucG9wKCk7Y29uc3QgYmU9dGhpcy50'@;
put 'YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoaC5yb3csQXMoaC5jb2wrY2UsbmUsTS0xKSksRWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZi5yb3csQXMoZi5jb2wrYSxuZSxNLTEpKTt0aGlzLm1hcmtTb3VyY2UoInNoaWZ0Iiksdi5jb2w+PWw/dGhpcy5zZXRSYW5nZVN0'@;
put 'YXJ0T25seShiZSwhMCx0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxBcyh2LmNvbCthLDAsTS0xKSkpOnRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoYmUsITApLEQmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLFomJnRoaXMu'@;
put 'c2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoRWUpLHRoaXMubWFya0VuZFNvdXJjZSgpfX1nZXRMYXllckxldmVsKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCktMX1pc1NlbGVjdGVkKCl7cmV0dXJuIXRo'@;
put 'aXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCl9aXNNdWx0aXBsZSgpe2lmKCF0aGlzLmlzU2VsZWN0ZWQoKSlyZXR1cm4hMTtjb25zdCBsPUZkKCF0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmlzU2luZ2xlKCkpO3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVySXNNdWx0aXBs'@;
put 'ZVNlbGVjdGlvbiIsbCksbC52YWx1ZX1pc0ZvY3VzU2VsZWN0aW9uQ2hhbmdlZCgpe3JldHVybiB0aGlzLmlzU2VsZWN0ZWQoKSYmd2MoVFAsdGhpcyl9aXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l'@;
put 'bnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybiF0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcihsKSYmKC0xPT09bD90aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5oYXMobCkpfWlzRW50aXJlUm93U2VsZWN0ZWQoKXtsZXQgbD1h'@;
put 'cmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7Y29uc3QgYT1oPT57Y29uc3R7Y29sOmZ9PWguZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLE09'@;
put 'dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO3JldHVybih2PjAmJmY8MHx8MD09PXYpJiZoLmdldFdpZHRoKCk9PT1NfTtpZigtMT09PWwpcmV0dXJuIEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKS5zb21lKGg9PmEoaCkpO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtC'@;
put 'eUluZGV4KGwpO3JldHVybiEhZCYmYShkKX1pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7cmV0dXJuIXRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVy'@;
put 'KCkmJigtMT09PWw/dGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKGwpKX1pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz'@;
put 'WzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2NvbnN0IGE9aD0+e2NvbnN0e3JvdzpmfT1oLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSx2PXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKTtyZXR1cm4odj4wJiZmPDB8fDA9PT12'@;
put 'KSYmaC5nZXRIZWlnaHQoKT09PU19O2lmKC0xPT09bClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkUmFuZ2UpLnNvbWUoaD0+YShoKSk7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgobCk7cmV0dXJuISFkJiZhKGQpfWlzU2VsZWN0ZWRCeUFueUhlYWRlcigp'@;
put 'e3JldHVybiB0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigtMSl8fHRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKC0xKXx8dGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKX1pc1NlbGVjdGVkQnlDb3JuZXIoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmhhcyh0aGlz'@;
put 'LmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5oYXModGhpcy5nZXRMYXllckxldmVsKCkpfWluSW5TZWxlY3Rpb24obCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5pbmNsdWRlcyhsKX1pc0NlbGxDb3JuZXJWaXNpYmxlKCl7cmV0dXJuIHRoaXMuc2V0dGlu'@;
put 'Z3MuZmlsbEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiYhdGhpcy5pc011bHRpcGxlKCl9aXNDZWxsVmlzaWJsZShsKXtjb25zdCBhPXRoaXMudGFibGVQcm9wcy52aXN1YWxUb1JlbmRlcmFibGVDb29yZHMobCk7cmV0dXJuIG51bGwhPT1hLnJvdyYmbnVsbCE9'@;
put 'PWEuY29sfWlzQXJlYUNvcm5lclZpc2libGUobCl7cmV0dXJuKCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPT09dGhpcy5nZXRMYXllckxldmVsKCkpJiZ0aGlzLnNldHRpbmdzLmZpbGxIYW5kbGUmJiF0aGlzLnRhYmxlUHJvcHMuaXNFZGl0b3JPcGVuZWQoKSYmdGhpcy5pc011bHRpcGxlKCl9'@;
put 'Y2xlYXIoKXt0aGlzLnNlbGVjdGVkUmFuZ2UuY2xlYXIoKSx0aGlzLmhpZ2hsaWdodC5jbGVhcigpfWRlc2VsZWN0KCl7dGhpcy5pc1NlbGVjdGVkKCkmJih0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJEZXNlbGVjdCIpKX1zZWxlY3RB'@;
put 'bGwoKXt2YXIgbDtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxoPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7Zm9jdXNQb3NpdGlvbjohMSxkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMX07Y29uc3QgZj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFk'@;
put 'ZXJzKCksRD10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksWj1kPy1EOjAsbmU9YT8tTTowO2lmKDA9PT1aJiYwPT09bmUmJigwPT09Znx8MD09PXYpKXJldHVybjtsZXQgY2U9bnVsbD09PShsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKSl8fHZvaWQgMD09PWw/'@;
put 'dm9pZCAwOmwuaGlnaGxpZ2h0O2NvbnN0e2ZvY3VzUG9zaXRpb246YmUsZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6RWV9PWg7RnAoZVQsdGhpcyxFZSksYmUmJk51bWJlci5pc0ludGVnZXIoYmU/LnJvdykmJk51bWJlci5pc0ludGVnZXIoYmU/LmNvbCkmJihjZT10aGlzLnRhYmxlUHJvcHMu'@;
put 'Y3JlYXRlQ2VsbENvb3JkcyhBcyhiZS5yb3csWixmLTEpLEFzKGJlLmNvbCxuZSx2LTEpKSk7Y29uc3QgQmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoWixuZSkscWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZi0xLHYtMSk7dGhpcy5jbGVhcigpLHRoaXMu'@;
put 'c2V0UmFuZ2VTdGFydE9ubHkoQmUsdm9pZCAwLGNlKSxuZTwwJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSxaPDAmJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQo'@;
put 'cWUpLHRoaXMuZmluaXNoKCksRnAoZVQsdGhpcywhMSl9c2VsZWN0Q2VsbHMobCl7dmFyIGE9dGhpcztjb25zdCBkPXhfKGwpO2lmKDE9PT1kKXJldHVybiExO2lmKDA9PT1kKXRocm93IG5ldyBFcnJvcihnbGBVbnN1cHBvcnRlZCBmb3JtYXQgb2YgdGhlIHNlbGVjdGlvbiByYW5nZXMgd2Fz'@;
put 'IHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBhc3NceDIwCiAgICAgICAgdGhlIGNvb3JkaW5hdGVzIGFzIGFuIGFycmF5IG9mIGFycmF5cyAoW1tyb3dTdGFydCwgY29sdW1uU3RhcnQvY29sdW1uUHJvcFN0YXJ0LCByb3dFbmQsXHgyMAogICAgICAgIGNvbHVtbkVuZC9jb2x1bW5Qcm9wRW5k'@;
put 'XV0pIG9yIGFzIGFuIGFycmF5IG9mIENlbGxSYW5nZSBvYmplY3RzLmApO2NvbnN0IGg9UUUoZCx7Y3JlYXRlQ2VsbENvb3JkczpmdW5jdGlvbigpe3JldHVybiBhLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyguLi5hcmd1bWVudHMpfSxjcmVhdGVDZWxsUmFuZ2U6ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gYS50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZSguLi5hcmd1bWVudHMpfSxwcm9wVG9Db2w6RD0+dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChEKSxrZWVwRGlyZWN0aW9uOiEwfSksZj10aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnMsdj17Y291bnRSb3dzOnRoaXMudGFi'@;
put 'bGVQcm9wcy5jb3VudFJvd3MoKSxjb3VudENvbHM6dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLGNvdW50Um93SGVhZGVyczpmP3RoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKTowLGNvdW50Q29sSGVhZGVyczpmP3RoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKTow'@;
put 'fSxNPSFsLnNvbWUoRD0+e2NvbnN0IFo9aChEKSxuZT1aLmlzVmFsaWQodik7cmV0dXJuIShuZSYmIVouY29udGFpbnNIZWFkZXJzKCl8fG5lJiZaLmNvbnRhaW5zSGVhZGVycygpJiZaLmlzU2luZ2xlSGVhZGVyKCkpfSk7cmV0dXJuIE0mJih0aGlzLmNsZWFyKCksdGhpcy5zZXRFeHBlY3Rl'@;
put 'ZExheWVycyhsLmxlbmd0aCksWW4obCxEPT57Y29uc3R7ZnJvbTpaLHRvOm5lfT1oKEQpO3RoaXMuc2V0UmFuZ2VTdGFydE9ubHkoWi5jbG9uZSgpLCExKSx0aGlzLnNldFJhbmdlRW5kKG5lLmNsb25lKCkpfSksdGhpcy5maW5pc2goKSksTX1zZWxlY3RDb2x1bW5zKGwpe2xldCBhPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7Y29uc3QgaD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChs'@;
put 'KTpsLGY9InN0cmluZyI9PXR5cGVvZiBhP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woYSk6YSx2PXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxEPXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxaPTA9PT1EPzA6LUQs'@;
put 'bmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoWixoKSxjZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcyh2LTEsZiksYmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShuZSxuZSxjZSkuaXNWYWxpZCh7Y291bnRSb3dzOnYsY291bnRDb2xzOk0sY291'@;
put 'bnRSb3dIZWFkZXJzOjAsY291bnRDb2xIZWFkZXJzOkR9KTtpZihiZSl7bGV0IEVlPTAsQmU9MDtOdW1iZXIuaXNJbnRlZ2VyKGQ/LnJvdykmJk51bWJlci5pc0ludGVnZXIoZD8uY29sKT8oRWU9QXMoZC5yb3csWix2LTEpLEJlPUFzKGQuY29sLE1hdGgubWluKGgsZiksTWF0aC5tYXgoaCxm'@;
put 'KSkpOihFZT1BcyhkLFosdi0xKSxCZT1oKTtjb25zdCBxZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhFZSxCZSkscnQ9MD09PUQ/MDpBcyhxZS5yb3csWiwtMSkscHQ9di0xLGR0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHJ0LGgpLEp0PXRoaXMudGFibGVQ'@;
put 'cm9wcy5jcmVhdGVDZWxsQ29vcmRzKHB0LGYpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsZHQsSnQscWUpLGR0LnJvdz1ydCxKdC5yb3c9cHQsdGhpcy5zZXRSYW5nZVN0YXJ0T25seShkdCx2b2lkIDAscWUpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5h'@;
put 'ZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoSnQpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RDb2x1bW5zIixkdCxKdCxxZSksdGhpcy5maW5pc2goKX1yZXR1cm4gYmV9c2VsZWN0Um93cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQg'@;
put 'MCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTowO2NvbnN0IGg9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLHY9dGhpcy50'@;
put 'YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygpLE09MD09PXY/MDotdixEPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGwsTSksWj10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhhLGYtMSksbmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxSYW5nZShELEQsWiku'@;
put 'aXNWYWxpZCh7Y291bnRSb3dzOmgsY291bnRDb2xzOmYsY291bnRSb3dIZWFkZXJzOnYsY291bnRDb2xIZWFkZXJzOjB9KTtpZihuZSl7bGV0IGNlPTAsYmU9MDtOdW1iZXIuaXNJbnRlZ2VyKGQ/LnJvdykmJk51bWJlci5pc0ludGVnZXIoZD8uY29sKT8oY2U9QXMoZC5yb3csTWF0aC5taW4o'@;
put 'bCxhKSxNYXRoLm1heChsLGEpKSxiZT1BcyhkLmNvbCxNLGYtMSkpOihjZT1sLGJlPUFzKGQsTSxmLTEpKTtjb25zdCBFZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhjZSxiZSksQmU9MD09PXY/MDpBcyhFZS5jb2wsTSwtMSkscWU9Zi0xLHJ0PXRoaXMudGFibGVQcm9wcy5j'@;
put 'cmVhdGVDZWxsQ29vcmRzKGwsQmUpLHB0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEscWUpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2VsZWN0Um93cyIscnQscHQsRWUpLHJ0LmNvbD1CZSxwdC5jb2w9cWUsdGhpcy5zZXRSYW5nZVN0YXJ0T25seShydCx2b2lkIDAs'@;
put 'RWUpLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQocHQpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJTZWxlY3RSb3dzIixydCxwdCxFZSksdGhpcy5maW5pc2goKX1yZXR1cm4gbmV9cmVmcmVzaCgpe2lmKCF0aGlz'@;
put 'LmlzU2VsZWN0ZWQoKSlyZXR1cm47Y29uc3QgbD10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksYT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7aWYoMD09PWx8fDA9PT1hKXJldHVybiB2b2lkIHRoaXMuZGVzZWxlY3QoKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5wZWVrQnlJ'@;
put 'bmRleCh0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpLTEpLHtmcm9tOmgsdG86ZixoaWdobGlnaHQ6dn09ZDt0aGlzLmNsZWFyKCksdi5hc3NpZ24oe3JvdzpBcyh2LnJvdywtMS8wLGwtMSksY29sOkFzKHYuY29sLC0xLzAsYS0xKX0pLGguYXNzaWduKHtyb3c6QXMoaC5yb3csLTEvMCxsLTEp'@;
put 'LGNvbDpBcyhoLmNvbCwtMS8wLGEtMSl9KSxmLmFzc2lnbih7cm93OkFzKGYucm93LDAsbC0xKSxjb2w6QXMoZi5jb2wsMCxhLTEpfSksdGhpcy5zZWxlY3RlZFJhbmdlLnJhbmdlcy5wdXNoKGQpLHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihKRSx0aGlzLnNlbGVjdGVkUmFuZ2UuY3Vy'@;
put 'cmVudCgpLmhpZ2hsaWdodCkmJnRoaXMuaGlnaGxpZ2h0LmdldEZvY3VzKCkuYWRkKHYpLmNvbW1pdCgpLnN5bmNXaXRoKGQpLHRoaXMuYXBwbHlBbmRDb21taXQoZCl9Y29tbWl0KCl7aWYodGhpcy5oaWdobGlnaHQuZ2V0Q3VzdG9tU2VsZWN0aW9ucygpLmZvckVhY2goaD0+e2guY29tbWl0'@;
put 'KCl9KSwhdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRMYXllckxldmVsKCksZD10aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpO3RoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihKRSxkLmhpZ2hsaWdodCkmJnRoaXMuaGlnaGxpZ2h0LmdldEZvY3VzKCkuY29t'@;
put 'bWl0KCkuc3luY1dpdGgoZCk7Zm9yKGxldCBoPTA7aDx0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpO2grPTEpe3RoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoaCk7Y29uc3QgZj10aGlzLmhpZ2hsaWdodC5jcmVhdGVBcmVhKCksdj10aGlzLmhpZ2hsaWdodC5jcmVhdGVMYXllcmVkQXJl'@;
put 'YSgpLE09dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGVhZGVyKCksRD10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IZWFkZXIoKSxaPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigpLG5lPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvbHVtbkhlYWRlcigpLGNl'@;
put 'PXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFjdGl2ZUNvcm5lckhlYWRlcigpLGJlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hpZ2hsaWdodCgpLEVlPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgpO2YuY29tbWl0KCksdi5jb21taXQoKSxNLmNvbW1pdCgpLEQuY29tbWl0'@;
put 'KCksWi5jb21taXQoKSxuZS5jb21taXQoKSxjZS5jb21taXQoKSxiZS5jb21taXQoKSxFZS5jb21taXQoKX10aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEpfX1UbChxM2UseTEpO2NvbnN0IFh0dD1xM2Use3JlZ2lzdGVyOkp0dCxnZXRJdGVtOlF0dCxoYXNJdGVtOlgzZSxnZXROYW1l'@;
put 'czplbnR9PXIzKCJjZWxsVHlwZXMiKTtmdW5jdGlvbiBfWChjKXtpZighWDNlKGMpKXRocm93IEVycm9yKGBZb3UgZGVjbGFyZWQgY2VsbCB0eXBlICIke2N9IiBhcyBhIHN0cmluZyB0aGF0IGlzIG5vdCBtYXBwZWQgdG8gYSBrbm93biBvYmplY3QuXG4gICAgICAgICAgICAgICAgIENlbGwg'@;
put 'dHlwZSBtdXN0IGJlIGFuIG9iamVjdCBvciBhIHN0cmluZyBtYXBwZWQgdG8gYW4gb2JqZWN0IHJlZ2lzdGVyZWQgYnlcbiAgICAgICAgICAgICAgICAgIkhhbmRzb250YWJsZS5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZSIgbWV0aG9kYCk7cmV0dXJuIFF0dChjKX1mdW5jdGlvbiBaMihj'@;
put 'LGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9KGw9YykuQ0VMTF9UWVBFKTtjb25zdHtlZGl0b3I6YSxyZW5kZXJlcjpkLHZhbGlkYXRvcjpofT1sO2EmJkhkKGMsYSksZCYmSWgoYyxkKSxoJiZaNyhjLGgpLEp0dChjLGwpfWZ1bmN0aW9uIGtQKGMsbCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0'@;
put 'aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmM7Y29uc3QgZD0ic3RyaW5nIj09dHlwZW9mIGwudHlwZT9fWChsLnR5cGUpOmwudHlwZTtpZihjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMmJlhhKGwsKGYsdik9PntjLl9hdXRvbWF0aWNhbGx5QXNzaWdu'@;
put 'ZWRNZXRhUHJvcHMuZGVsZXRlKHYpfSksIXFhKGQpKXJldHVybjthPT09YyYmIWMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyYmKGMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcz1uZXcgU2V0KTtjb25zdCBoPXt9O1hhKGQsKGYsdik9Pnt2YXIgTTsoZnVuY3Rpb24g'@;
put 'dG50KGMsbCl7dmFyIGE7cmV0dXJuIkNFTExfVFlQRSIhPT1jJiYoKG51bGw9PT0oYT1sLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhhcyhjKSl8fCFFdShsLGMpKX0pKHYsYSkmJihoW3ZdPWYsbnVsbD09PShNPWMuX2F1dG9tYXRpY2Fs'@;
put 'bHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PU18fE0uYWRkKHYpKX0pLHh1KGMsaCl9ZnVuY3Rpb24gRFAoYyl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoYykmJmM+PTB9ZnVuY3Rpb24gSVAoYyxsKXtpZighYygpKXRocm93IG5ldyBFcnJvcihgQXNzZXJ0aW9uIGZhaWxlZDogJHts'@;
put 'fWApfWZ1bmN0aW9uIFJQKGMpe3JldHVybiBudWxsPT1jfWNvbnN0IEozZT0oKT0+KHtfYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzOnZvaWQgMCxhY3RpdmVIZWFkZXJDbGFzc05hbWU6Imh0X19hY3RpdmVfaGlnaGxpZ2h0IixhbGxvd0VtcHR5OiEwLGFsbG93SHRtbDohMSxhbGxv'@;
put 'd0luc2VydENvbHVtbjohMCxhbGxvd0luc2VydFJvdzohMCxhbGxvd0ludmFsaWQ6ITAsYWxsb3dSZW1vdmVDb2x1bW46ITAsYWxsb3dSZW1vdmVSb3c6ITAsYXJpYVRhZ3M6ITAsYXV0b0NvbHVtblNpemU6dm9pZCAwLGF1dG9Sb3dTaXplOnZvaWQgMCxhdXRvV3JhcENvbDohMSxhdXRvV3Jh'@;
put 'cFJvdzohMSxiaW5kUm93c1dpdGhIZWFkZXJzOnZvaWQgMCxjZWxsOltdLGNlbGxzOnZvaWQgMCxjaGVja2VkVGVtcGxhdGU6dm9pZCAwLGNsYXNzTmFtZTp2b2lkIDAsY29sSGVhZGVyczpudWxsLGNvbGxhcHNpYmxlQ29sdW1uczp2b2lkIDAsY29sdW1uSGVhZGVySGVpZ2h0OnZvaWQgMCxj'@;
put 'b2x1bW5zOnZvaWQgMCxjb2x1bW5Tb3J0aW5nOnZvaWQgMCxjb2x1bW5TdW1tYXJ5OnZvaWQgMCxjb2xXaWR0aHM6dm9pZCAwLGNvbW1lbnRlZENlbGxDbGFzc05hbWU6Imh0Q29tbWVudENlbGwiLGNvbW1lbnRzOiExLGNvbnRleHRNZW51OnZvaWQgMCxjb3B5YWJsZTohMCxjb3B5UGFzdGU6'@;
put 'ITAsY29ycmVjdEZvcm1hdDohMSxjdXJyZW50Q29sQ2xhc3NOYW1lOnZvaWQgMCxjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJodF9faGlnaGxpZ2h0IixjdXJyZW50Um93Q2xhc3NOYW1lOnZvaWQgMCxjdXN0b21Cb3JkZXJzOiExLGRhdGE6dm9pZCAwLGRhdGFEb3ROb3RhdGlvbjohMCxkYXRh'@;
put 'U2NoZW1hOnZvaWQgMCxkYXRlRm9ybWF0OiJERC9NTS9ZWVlZIix0aW1lRm9ybWF0OiJoOm1tOnNzIGEiLGRhdGVQaWNrZXJDb25maWc6dm9pZCAwLGRlZmF1bHREYXRlOnZvaWQgMCxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiExLGRyYWdUb1Njcm9sbDohMCxkcm9wZG93bk1lbnU6dm9pZCAw'@;
put 'LGVkaXRvcjp2b2lkIDAsZW50ZXJCZWdpbnNFZGl0aW5nOiEwLGVudGVyTW92ZXM6e2NvbDowLHJvdzoxfSxmaWxsSGFuZGxlOnthdXRvSW5zZXJ0Um93OiExfSxmaWx0ZXI6ITAsZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTohMSxmaWx0ZXJzOnZvaWQgMCxmaXhlZENvbHVtbnNMZWZ0OjAsZml4'@;
put 'ZWRDb2x1bW5zU3RhcnQ6MCxmaXhlZFJvd3NCb3R0b206MCxmaXhlZFJvd3NUb3A6MCxmb3JtdWxhczp2b2lkIDAsZnJhZ21lbnRTZWxlY3Rpb246ITEsaGVhZGVyQ2xhc3NOYW1lOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGhpZGRlbkNvbHVtbnM6dm9pZCAwLGhpZGRlblJvd3M6dm9pZCAwLGlu'@;
put 'dmFsaWRDZWxsQ2xhc3NOYW1lOiJodEludmFsaWQiLGltZUZhc3RFZGl0OiExLGlzRW1wdHlDb2woYyl7bGV0IGwsYSxkO2ZvcihsPTAsYT10aGlzLmNvdW50Um93cygpO2w8YTtsKyspaWYoZD10aGlzLmdldERhdGFBdENlbGwobCxjKSwhMT09PXpjKGQpKXJldHVybiExO3JldHVybiEwfSxp'@;
put 'c0VtcHR5Um93KGMpe2xldCBsLGEsZCxoO2ZvcihsPTAsYT10aGlzLmNvdW50Q29scygpO2w8YTtsKyspaWYoZD10aGlzLmdldERhdGFBdENlbGwoYyxsKSwhMT09PXpjKGQpKXJldHVybiJvYmplY3QiPT10eXBlb2YgZCYmKGg9dGhpcy5nZXRDZWxsTWV0YShjLGwpLEhPKHRoaXMuZ2V0U2No'@;
put 'ZW1hKClbaC5wcm9wXSxkKSk7cmV0dXJuITB9LGxhYmVsOnZvaWQgMCxsYW5ndWFnZToiZW4tVVMiLGxheW91dERpcmVjdGlvbjoiaW5oZXJpdCIsbGljZW5zZUtleTp2b2lkIDAsbG9jYWxlOiJlbi1VUyIsbWFudWFsQ29sdW1uRnJlZXplOnZvaWQgMCxtYW51YWxDb2x1bW5Nb3ZlOnZvaWQg'@;
put 'MCxtYW51YWxDb2x1bW5SZXNpemU6dm9pZCAwLG1hbnVhbFJvd01vdmU6dm9pZCAwLG1hbnVhbFJvd1Jlc2l6ZTp2b2lkIDAsbWF4Q29sczoxLzAsbWF4Um93czoxLzAsbWVyZ2VDZWxsczohMSxtaW5Db2xzOjAsbWluUm93czowLG1pblNwYXJlQ29sczowLG1pblNwYXJlUm93czowLG11bHRp'@;
put 'Q29sdW1uU29ydGluZzp2b2lkIDAsbmF2aWdhYmxlSGVhZGVyczohMSx0YWJOYXZpZ2F0aW9uOiEwLG5lc3RlZEhlYWRlcnM6dm9pZCAwLG5lc3RlZFJvd3M6dm9pZCAwLG5vV29yZFdyYXBDbGFzc05hbWU6Imh0Tm9XcmFwIixudW1lcmljRm9ybWF0OnZvaWQgMCxvYnNlcnZlRE9NVmlzaWJp'@;
put 'bGl0eTohMCxvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6ITAscGVyc2lzdGVudFN0YXRlOnZvaWQgMCxwbGFjZWhvbGRlcjp2b2lkIDAscGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lOiJodFBsYWNlaG9sZGVyIixwcmV2ZW50T3ZlcmZsb3c6ITEscHJldmVudFdoZWVsOiExLHJlYWRPbmx5OiExLHJl'@;
put 'YWRPbmx5Q2VsbENsYXNzTmFtZToiaHREaW1tZWQiLHJlbmRlckFsbFJvd3M6ITEscmVuZGVyQWxsQ29sdW1uczohMSxyZW5kZXJlcjp2b2lkIDAscm93SGVhZGVyczp2b2lkIDAscm93SGVhZGVyV2lkdGg6dm9pZCAwLHJvd0hlaWdodHM6dm9pZCAwLHNlYXJjaDohMSxzZWxlY3Rpb25Nb2Rl'@;
put 'OiJtdWx0aXBsZSIsc2VsZWN0T3B0aW9uczp2b2lkIDAsc2tpcENvbHVtbk9uUGFzdGU6ITEsc2tpcFJvd09uUGFzdGU6ITEsc29ydEJ5UmVsZXZhbmNlOiEwLHNvdXJjZTp2b2lkIDAsc3RhcnRDb2xzOjUsc3RhcnRSb3dzOjUsc3RyZXRjaEg6Im5vbmUiLHN0cmljdDp2b2lkIDAsdGFibGVD'@;
put 'bGFzc05hbWU6dm9pZCAwLHRoZW1lTmFtZTp2b2lkIDAsdGFiTW92ZXM6e3JvdzowLGNvbDoxfSx0aXRsZTp2b2lkIDAsdHJpbURyb3Bkb3duOiEwLHRyaW1Sb3dzOnZvaWQgMCx0cmltV2hpdGVzcGFjZTohMCx0eXBlOiJ0ZXh0Iix1bmNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAsdW5kbzohMCx2'@;
put 'YWxpZGF0b3I6dm9pZCAwLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDoiYXV0byIsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdUaHJlc2hvbGQ6MCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDowLHZpc2libGVSb3dz'@;
put 'OjEwLHdpZHRoOnZvaWQgMCx3b3JkV3JhcDohMH0pO2Z1bmN0aW9uIFEzZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcm50KGMpe3ZhciBsPWZ1bmN0aW9uIGludChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lm'@;
put 'KHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJp'@;
put 'bmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgYW50'@;
put 'e2NvbnN0cnVjdG9yKGwpe1EzZSh0aGlzLCJtZXRhQ3RvciIsY2xhc3N7fSksUTNlKHRoaXMsIm1ldGEiLHZvaWQgMCksdGhpcy5tZXRhPXRoaXMubWV0YUN0b3IucHJvdG90eXBlLHh1KHRoaXMubWV0YSxKM2UoKSksdGhpcy5tZXRhLmluc3RhbmNlPWx9Z2V0TWV0YUNvbnN0cnVjdG9yKCl7'@;
put 'cmV0dXJuIHRoaXMubWV0YUN0b3J9Z2V0TWV0YSgpe3JldHVybiB0aGlzLm1ldGF9dXBkYXRlTWV0YShsKXt2YXIgYTt4dSh0aGlzLm1ldGEsbCksa1AodGhpcy5tZXRhLHsuLi5sLHR5cGU6bnVsbCE9PShhPWwudHlwZSkmJnZvaWQgMCE9PWE/YTp0aGlzLm1ldGEudHlwZX0sbCl9fWNsYXNz'@;
put 'IHVudHtjb25zdHJ1Y3RvcihsKXshZnVuY3Rpb24gc250KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBsbnQoYyl7dmFyIGw9ZnVuY3Rpb24gY250KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09'@;
put 'YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp'@;
put 'KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywibWV0YSIsdm9pZCAw'@;
put 'KTtjb25zdCBhPWwuZ2V0TWV0YUNvbnN0cnVjdG9yKCk7dGhpcy5tZXRhPW5ldyBhfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEobCl7eHUodGhpcy5tZXRhLGwpLGtQKHRoaXMubWV0YSxsLGwpfX1mdW5jdGlvbiBMUChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZG50'@;
put 'KGMpe3ZhciBsPWZ1bmN0aW9uIGhudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgT1B7Y29uc3RydWN0b3IobCl7TFAodGhpcywidmFsdWVGYWN0b3J5Iix2b2lkIDApLExQKHRoaXMsImRhdGEiLFtdKSxMUCh0aGlz'@;
put 'LCJpbmRleCIsW10pLExQKHRoaXMsImhvbGVzIixuZXcgU2V0KSx0aGlzLnZhbHVlRmFjdG9yeT1sfW9idGFpbihsKXtJUCgoKT0+RFAobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29uc3QgYT10aGlzLl9nZXRTdG9yYWdlSW5kZXhCeUtleShsKTtsZXQgZDtpZihhPj0w'@;
put 'KWQ9dGhpcy5kYXRhW2FdLHZvaWQgMD09PWQmJihkPXRoaXMudmFsdWVGYWN0b3J5KGwpLHRoaXMuZGF0YVthXT1kKTtlbHNlIGlmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5ob2xlcy5zaXplPjApe2NvbnN0IGg9dGhpcy5ob2xlcy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7dGhpcy5o'@;
put 'b2xlcy5kZWxldGUoaCksdGhpcy5kYXRhW2hdPWQsdGhpcy5pbmRleFtsXT1ofWVsc2UgdGhpcy5kYXRhLnB1c2goZCksdGhpcy5pbmRleFtsXT10aGlzLmRhdGEubGVuZ3RoLTE7cmV0dXJuIGR9aW5zZXJ0KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzFdP2FyZ3VtZW50c1sxXToxO0lQKCgpPT5EUChsKXx8UlAobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIgb3IgbnVsbC91bmRlZmluZWQgYXJndW1lbnQuIik7Y29uc3QgZD1bXSxoPXRoaXMuZGF0YS5sZW5ndGg7Zm9yKGxldCB2PTA7djxhO3YrKylkLnB1c2goaCt2KSx0aGlz'@;
put 'LmRhdGEucHVzaCh2b2lkIDApO2NvbnN0IGY9UlAobCk/dGhpcy5pbmRleC5sZW5ndGg6bDt0aGlzLmluZGV4PVsuLi50aGlzLmluZGV4LnNsaWNlKDAsZiksLi4uZCwuLi50aGlzLmluZGV4LnNsaWNlKGYpXX1yZW1vdmUobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1h'@;
put 'cmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7SVAoKCk9PkRQKGwpfHxSUChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPXRoaXMuaW5kZXguc3BsaWNlKFJQKGwpP3RoaXMuaW5kZXgubGVuZ3RoLWE6bCxhKTtm'@;
put 'b3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdOyJudW1iZXIiPT10eXBlb2YgZiYmdGhpcy5ob2xlcy5hZGQoZil9fXNpemUoKXtyZXR1cm4gdGhpcy5kYXRhLmxlbmd0aC10aGlzLmhvbGVzLnNpemV9dmFsdWVzKCl7cmV0dXJuIHRoaXMuZGF0YS5maWx0ZXIoKGwsYSk9'@;
put 'PnZvaWQgMCE9PWwmJiF0aGlzLmhvbGVzLmhhcyhhKSlbU3ltYm9sLml0ZXJhdG9yXSgpfWVudHJpZXMoKXtjb25zdCBsPVtdO2ZvcihsZXQgZD0wO2Q8dGhpcy5kYXRhLmxlbmd0aDtkKyspe2NvbnN0IGg9dGhpcy5fZ2V0S2V5QnlTdG9yYWdlSW5kZXgoZCk7LTEhPT1oJiZ2b2lkIDAhPT10'@;
put 'aGlzLmRhdGFbZF0mJmwucHVzaChbaCx0aGlzLmRhdGFbZF1dKX1sZXQgYT0wO3JldHVybntuZXh0OigpPT57aWYoYTxsLmxlbmd0aCl7Y29uc3QgZD1sW2FdO3JldHVybiBhKz0xLHt2YWx1ZTpkLGRvbmU6ITF9fXJldHVybntkb25lOiEwfX19fWNsZWFyKCl7dGhpcy5kYXRhPVtdLHRoaXMu'@;
put 'aW5kZXg9W10sdGhpcy5ob2xlcy5jbGVhcigpfV9nZXRTdG9yYWdlSW5kZXhCeUtleShsKXtyZXR1cm4gdGhpcy5pbmRleC5sZW5ndGg+bD90aGlzLmluZGV4W2xdOi0xfV9nZXRLZXlCeVN0b3JhZ2VJbmRleChsKXtyZXR1cm4gdGhpcy5pbmRleC5pbmRleE9mKGwpfVtTeW1ib2wuaXRlcmF0'@;
put 'b3JdKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfX1mdW5jdGlvbiBlcGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGZudChjKXt2YXIgbD1mdW5jdGlvbiBwbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2'@;
put 'b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5n'@;
put 'Ok51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGdudD1b'@;
put 'ImRhdGEiLCJ3aWR0aCJdO2NsYXNzIG1udHtjb25zdHJ1Y3RvcihsKXtlcGUodGhpcywiZ2xvYmFsTWV0YSIsdm9pZCAwKSxlcGUodGhpcywibWV0YXMiLG5ldyBPUCgoKT0+dGhpcy5fY3JlYXRlTWV0YSgpKSksdGhpcy5nbG9iYWxNZXRhPWwsdGhpcy5tZXRhcz1uZXcgT1AoKCk9PnRoaXMu'@;
put 'X2NyZWF0ZU1ldGEoKSl9dXBkYXRlTWV0YShsLGEpe2NvbnN0IGQ9dGhpcy5nZXRNZXRhKGwpO3h1KGQsYSksa1AoZCxhKX1jcmVhdGVDb2x1bW4obCxhKXt0aGlzLm1ldGFzLmluc2VydChsLGEpfXJlbW92ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMucmVtb3ZlKGwsYSl9Z2V0TWV0YShsKXty'@;
put 'ZXR1cm4gdGhpcy5tZXRhcy5vYnRhaW4obCl9Z2V0TWV0YUNvbnN0cnVjdG9yKGwpe3JldHVybiB0aGlzLm1ldGFzLm9idGFpbihsKS5jb25zdHJ1Y3Rvcn1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVhcigpfV9jcmVhdGVNZXRhKCl7cmV0dXJuIGZ1bmN0aW9uIG5udChjKXtsZXQgbD1h'@;
put 'cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107ZnVuY3Rpb24gYSgpe31WMmUoYSxjKTtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKylhLnByb3RvdHlwZVtsW2RdXT12b2lkIDA7cmV0dXJuIGF9KHRoaXMuZ2xvYmFsTWV0YS5nZXRNZXRh'@;
put 'Q29uc3RydWN0b3IoKSxnbnQpLnByb3RvdHlwZX19ZnVuY3Rpb24gdHBlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB2bnQoYyl7dmFyIGw9ZnVuY3Rpb24gYm50KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYo'@;
put 'dm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmlu'@;
put 'ZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB5bnR7'@;
put 'Y29uc3RydWN0b3IobCl7dHBlKHRoaXMsImNvbHVtbk1ldGEiLHZvaWQgMCksdHBlKHRoaXMsIm1ldGFzIixuZXcgT1AoKCk9PnRoaXMuX2NyZWF0ZVJvdygpKSksdGhpcy5jb2x1bW5NZXRhPWx9dXBkYXRlTWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmdldE1ldGEobCxhKTt4dShoLGQpLGtQ'@;
put 'KGgsZCl9Y3JlYXRlUm93KGwsYSl7dGhpcy5tZXRhcy5pbnNlcnQobCxhKX1jcmVhdGVDb2x1bW4obCxhKXtmb3IobGV0IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2QrKyl0aGlzLm1ldGFzLm9idGFpbihkKS5pbnNlcnQobCxhKX1yZW1vdmVSb3cobCxhKXt0aGlzLm1ldGFzLnJlbW92ZShs'@;
put 'LGEpfXJlbW92ZUNvbHVtbihsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXRhcy5zaXplKCk7ZCsrKXRoaXMubWV0YXMub2J0YWluKGQpLnJlbW92ZShsLGEpfWdldE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5tZXRhcy5vYnRhaW4obCkub2J0YWluKGEpO3JldHVybiB2b2lkIDA9PT1kP2g6'@;
put 'aFtkXX1zZXRNZXRhKGwsYSxkLGgpe3ZhciBmO2NvbnN0IHY9dGhpcy5tZXRhcy5vYnRhaW4obCkub2J0YWluKGEpO251bGw9PT0oZj12Ll9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1mfHxmLmRlbGV0ZShkKSx2W2RdPWh9cmVtb3ZlTWV0YShsLGEsZCl7ZGVs'@;
put 'ZXRlIHRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKVtkXX1nZXRNZXRhcygpe2NvbnN0IGw9W10sYT1BcnJheS5mcm9tKHRoaXMubWV0YXMudmFsdWVzKCkpO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKUZvKGFbZF0pJiZsLnB1c2goLi4uYVtkXS52YWx1ZXMoKSk7cmV0dXJuIGx9'@;
put 'Z2V0TWV0YXNBdFJvdyhsKXtJUCgoKT0+RFAobCksIkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29uc3QgYT1uZXcgTWFwKHRoaXMubWV0YXMpO3JldHVybiBhLmhhcyhsKT9BcnJheS5mcm9tKGEuZ2V0KGwpLnZhbHVlcygpKTpbXX1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5j'@;
put 'bGVhcigpfV9jcmVhdGVSb3coKXtyZXR1cm4gbmV3IE9QKGw9PnRoaXMuX2NyZWF0ZU1ldGEobCkpfV9jcmVhdGVNZXRhKGwpe3JldHVybiBuZXcodGhpcy5jb2x1bW5NZXRhLmdldE1ldGFDb25zdHJ1Y3RvcihsKSl9fWNsYXNzIG5wZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107dGhpcy5ob3Q9bCx0aGlzLmdsb2JhbE1ldGE9bmV3IGFudChsKSx0aGlzLnRhYmxlTWV0YT1uZXcg'@;
put 'dW50KHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jb2x1bW5NZXRhPW5ldyBtbnQodGhpcy5nbG9iYWxNZXRhKSx0aGlzLmNlbGxNZXRhPW5ldyB5bnQodGhpcy5jb2x1bW5NZXRhKSxkLmZvckVhY2goaD0+bmV3IGgodGhpcykpLHRoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGEpfWdldEdsb2Jh'@;
put 'bE1ldGEoKXtyZXR1cm4gdGhpcy5nbG9iYWxNZXRhLmdldE1ldGEoKX11cGRhdGVHbG9iYWxNZXRhKGwpe3RoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGwpfWdldFRhYmxlTWV0YSgpe3JldHVybiB0aGlzLnRhYmxlTWV0YS5nZXRNZXRhKCl9dXBkYXRlVGFibGVNZXRhKGwpe3RoaXMudGFi'@;
put 'bGVNZXRhLnVwZGF0ZU1ldGEobCl9Z2V0Q29sdW1uTWV0YShsKXtyZXR1cm4gdGhpcy5jb2x1bW5NZXRhLmdldE1ldGEobCl9dXBkYXRlQ29sdW1uTWV0YShsLGEpe3RoaXMuY29sdW1uTWV0YS51cGRhdGVNZXRhKGwsYSl9Z2V0Q2VsbE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5jZWxsTWV0'@;
put 'YS5nZXRNZXRhKGwsYSk7cmV0dXJuIGgudmlzdWFsUm93PWQudmlzdWFsUm93LGgudmlzdWFsQ29sPWQudmlzdWFsQ29sdW1uLGgucm93PWwsaC5jb2w9YSxkLnNraXBNZXRhRXh0ZW5zaW9ufHx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyR2V0Q2VsbE1ldGEiLGgpLGh9Z2V0Q2VsbE1ldGFL'@;
put 'ZXlWYWx1ZShsLGEsZCl7aWYoInN0cmluZyIhPXR5cGVvZiBkKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBjZWxsIG1ldGEgb2JqZWN0IGtleSBpcyBub3QgYSBzdHJpbmciKTtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhKGwsYSxkKX1zZXRDZWxsTWV0YShsLGEsZCxoKXt0aGlz'@;
put 'LmNlbGxNZXRhLnNldE1ldGEobCxhLGQsaCl9dXBkYXRlQ2VsbE1ldGEobCxhLGQpe3RoaXMuY2VsbE1ldGEudXBkYXRlTWV0YShsLGEsZCl9cmVtb3ZlQ2VsbE1ldGEobCxhLGQpe3RoaXMuY2VsbE1ldGEucmVtb3ZlTWV0YShsLGEsZCl9Z2V0Q2VsbHNNZXRhKCl7cmV0dXJuIHRoaXMuY2Vs'@;
put 'bE1ldGEuZ2V0TWV0YXMoKX1nZXRDZWxsc01ldGFBdFJvdyhsKXtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhc0F0Um93KGwpfWNyZWF0ZVJvdyhsKXt0aGlzLmNlbGxNZXRhLmNyZWF0ZVJvdyhsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50'@;
put 'c1sxXToxKX1yZW1vdmVSb3cobCl7dGhpcy5jZWxsTWV0YS5yZW1vdmVSb3cobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSl9Y3JlYXRlQ29sdW1uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEuY3JlYXRlQ29sdW1uKGwsYSksdGhpcy5jb2x1bW5NZXRhLmNyZWF0ZUNvbHVtbihsLGEpfXJlbW92ZUNvbHVtbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0'@;
put 'aGlzLmNlbGxNZXRhLnJlbW92ZUNvbHVtbihsLGEpLHRoaXMuY29sdW1uTWV0YS5yZW1vdmVDb2x1bW4obCxhKX1jbGVhckNlbGxzQ2FjaGUoKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKX1jbGVhckNhY2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCksdGhpcy5jb2x1bW5NZXRh'@;
put 'LmNsZWFyQ2FjaGUoKX19ZnVuY3Rpb24gcnBlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBfbnQoYyl7dmFyIGw9ZnVuY3Rpb24gd250KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy'@;
put 'IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj'@;
put 'LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31UbChucGUseTEpO2NsYXNzIENudHtjb25z'@;
put 'dHJ1Y3RvcihsKXt2YXIgYT10aGlzO3JwZSh0aGlzLCJtZXRhTWFuYWdlciIsdm9pZCAwKSxycGUodGhpcywibWV0YVN5bmNNZW1vIixuZXcgTWFwKSx0aGlzLm1ldGFNYW5hZ2VyPWwsbC5hZGRMb2NhbEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEuZXh0ZW5k'@;
put 'Q2VsbE1ldGEoLi4uYXJndW1lbnRzKX0pLE1vLmdldFNpbmdsZXRvbigpLmFkZCgiYmVmb3JlUmVuZGVyIixkPT57ZCYmdGhpcy5tZXRhU3luY01lbW8uY2xlYXIoKX0sdGhpcy5tZXRhTWFuYWdlci5ob3QpfWV4dGVuZENlbGxNZXRhKGwpe3ZhciBhO2NvbnN0e3JvdzpkLGNvbDpofT1sO2lm'@;
put 'KG51bGwhPT0oYT10aGlzLm1ldGFTeW5jTWVtby5nZXQoZCkpJiZ2b2lkIDAhPT1hJiZhLmhhcyhoKSlyZXR1cm47Y29uc3R7dmlzdWFsUm93OmYsdmlzdWFsQ29sOnZ9PWwsTT10aGlzLm1ldGFNYW5hZ2VyLmhvdCxEPU0uY29sVG9Qcm9wKHYpO2wucHJvcD1ELE0ucnVuSG9va3MoImJlZm9y'@;
put 'ZUdldENlbGxNZXRhIixmLHYsbCk7Y29uc3QgWj1FdShsLCJ0eXBlIik/bC50eXBlOm51bGw7bGV0IG5lPW1sKGwuY2VsbHMpP2wuY2VsbHMoZCxoLEQpOm51bGw7aWYoWilpZihuZSl7dmFyIGNlO25lLnR5cGU9bnVsbCE9PShjZT1uZS50eXBlKSYmdm9pZCAwIT09Y2U/Y2U6Wn1lbHNlIG5l'@;
put 'PXt0eXBlOlp9O25lJiZ0aGlzLm1ldGFNYW5hZ2VyLnVwZGF0ZUNlbGxNZXRhKGQsaCxuZSksTS5ydW5Ib29rcygiYWZ0ZXJHZXRDZWxsTWV0YSIsZix2LGwpLHRoaXMubWV0YVN5bmNNZW1vLmhhcyhkKXx8dGhpcy5tZXRhU3luY01lbW8uc2V0KGQsbmV3IFNldCksdGhpcy5tZXRhU3luY01l'@;
put 'bW8uZ2V0KGQpLmFkZChoKX19ZnVuY3Rpb24gd1goYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhudChjKXt2YXIgbD1mdW5jdGlvbiBFbnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2'@;
put 'YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9'@;
put 'KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfXZhciBpcGU9bmV3IFdlYWtNYXA7Y2xh'@;
put 'c3Mga250e2NvbnN0cnVjdG9yKGwpe3dYKHRoaXMsIm1ldGFNYW5hZ2VyIix2b2lkIDApLHdYKHRoaXMsInVzYWdlVHJhY2tlciIsbmV3IFNldCksd1godGhpcywicHJvcERlc2NyaXB0b3JzIixuZXcgTWFwKFtbImFyaWFUYWdzIix7aW5pdE9ubHk6ITB9XSxbImZpeGVkQ29sdW1uc0xlZnQi'@;
put 'LHt0YXJnZXQ6ImZpeGVkQ29sdW1uc1N0YXJ0IixvbkNoYW5nZShhKXtpZih0aGlzLm1ldGFNYW5hZ2VyLmhvdC5pc1J0bCgpJiYiZml4ZWRDb2x1bW5zTGVmdCI9PT1hKXRocm93IG5ldyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBpcyBub3Qgc3VwcG9ydGVkIGZvciBSVEwuIFBs'@;
put 'ZWFzZSB1c2Ugb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIik7aWYodGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNMZWZ0IikmJnRoaXMudXNhZ2VUcmFja2VyLmhhcygiZml4ZWRDb2x1bW5zU3RhcnQiKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgZml4ZWRDb2x1bW5zTGVm'@;
put 'dGAgYW5kIGBmaXhlZENvbHVtbnNTdGFydGAgc2hvdWxkIG5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBQbGVhc2UgdXNlIG9ubHkgdGhlIG9wdGlvbiBgZml4ZWRDb2x1bW5zU3RhcnRgLiIpfX1dLFsibGF5b3V0RGlyZWN0aW9uIix7aW5pdE9ubHk6ITB9XSxbInJlbmRlckFsbENvbHVtbnMiLHtp'@;
put 'bml0T25seTohMH1dLFsicmVuZGVyQWxsUm93cyIse2luaXRPbmx5OiEwfV1dKSksZnVuY3Rpb24gU250KGMsbCxhKXsoZnVuY3Rpb24gTW50KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0'@;
put 'd2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxpcGUsKGEsZCxoKT0+e2lmKCFoKXRocm93IG5ldyBFcnJvcihgVGhlIFxgJHthfVxgIG9wdGlvbiBjYW4gbm90IGJlIHVwZGF0ZWQgYWZ0ZXIgdGhlIEhhbmRzb250YWJsZSBpcyBpbml0aWFsaXplZC5gKX0pLHRo'@;
put 'aXMubWV0YU1hbmFnZXI9bCx0aGlzLmV4dGVuZE1ldGFQcm9wcygpfWV4dGVuZE1ldGFQcm9wcygpe3RoaXMucHJvcERlc2NyaXB0b3JzLmZvckVhY2goKGwsYSk9Pntjb25zdHtpbml0T25seTpkLHRhcmdldDpoLG9uQ2hhbmdlOmZ9PWwsdj0ic3RyaW5nIj09dHlwZW9mIGgsTT12P2g6YSxE'@;
put 'PWBfJHtNfWA7dGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGFbRF09dGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGFbTV0sZj8odGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoYSxELGYpLHYmJnRoaXMuaW5zdGFsbFByb3BXYXRjaGVyKGgsRCxmKSk6ZCYmKHRoaXMuaW5zdGFs'@;
put 'bFByb3BXYXRjaGVyKGEsRCxmdW5jdGlvbiBUbnQoYyxsKXtyZXR1cm4gYy5nZXQoZnVuY3Rpb24gQW50KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRl'@;
put 'IGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oYyxsKSl9KGlwZSx0aGlzKSksdGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3N8fCh0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5ncz1b'@;
put 'XSksdGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEuX2luaXRPbmx5U2V0dGluZ3MucHVzaChhKSl9KX1pbnN0YWxsUHJvcFdhdGNoZXIobCxhLGQpe2NvbnN0IGg9dGhpcztPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5tZXRhTWFuYWdlci5nbG9iYWxNZXRhLm1ldGEsbCx7Z2V0'@;
put 'KCl7cmV0dXJuIHRoaXNbYV19LHNldChmKXtjb25zdCB2PSFoLnVzYWdlVHJhY2tlci5oYXMobCk7aC51c2FnZVRyYWNrZXIuYWRkKGwpLGQuY2FsbChoLGwsZix2KSx0aGlzW2FdPWZ9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fWNvbnN0IG9wZT0vXihcclxufFxuXHJ8XHJ8'@;
put 'XG4pLyxEbnQ9L15bXlx0XHJcbl0rLyxhcGU9L15cdC87ZnVuY3Rpb24gblQoYyl7bGV0IGwsYSxkLGgsdixmPSIiO2ZvcihsPTAsYT1jLmxlbmd0aDtsPGE7bCs9MSl7Zm9yKGg9Y1tsXS5sZW5ndGgsZD0wO2Q8aDtkKz0xKWQ+MCYmKGYrPSJcdCIpLHY9Y1tsXVtkXSwic3RyaW5nIj09dHlw'@;
put 'ZW9mIHY/di5pbmRleE9mKCJcbiIpPi0xP2YrPWAiJHt2LnJlcGxhY2UoLyIvZywnIiInKX0iYDpmKz12OmYrPW51bGw9PXY/IiI6djtsIT09YS0xJiYoZis9IlxuIil9cmV0dXJuIGZ9ZnVuY3Rpb24gdDkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFJudChjKXt2YXIgbD1mdW5jdGlvbiBM'@;
put 'bnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs'@;
put 'bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFRfe3N0YXRpYyBnZXQgREVTVElOQVRJT05fUkVOREVSRVIoKXtyZXR1cm4gMX1zdGF0aWMgZ2V0IERFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1IoKXtyZXR1'@;
put 'cm4gMn1jb25zdHJ1Y3RvcihsLGEsZCl7dDkodGhpcywiaG90Iix2b2lkIDApLHQ5KHRoaXMsIm1ldGFNYW5hZ2VyIix2b2lkIDApLHQ5KHRoaXMsInRhYmxlTWV0YSIsdm9pZCAwKSx0OSh0aGlzLCJkYXRhU291cmNlIix2b2lkIDApLHQ5KHRoaXMsImR1Y2tTY2hlbWEiLHZvaWQgMCksdDko'@;
put 'dGhpcywiY29sVG9Qcm9wQ2FjaGUiLHZvaWQgMCksdDkodGhpcywicHJvcFRvQ29sQ2FjaGUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm1ldGFNYW5hZ2VyPWQsdGhpcy50YWJsZU1ldGE9ZC5nZXRUYWJsZU1ldGEoKSx0aGlzLmRhdGFTb3VyY2U9YSx0aGlzLnJlZnJlc2hEdWNrU2NoZW1h'@;
put 'KCksdGhpcy5jcmVhdGVNYXAoKX1jcmVhdGVNYXAoKXtjb25zdCBsPXRoaXMuZ2V0U2NoZW1hKCk7aWYodHlwZW9mIGw+InUiKXRocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGNyZWF0ZSBgY29sdW1uc2AgZGVmaW5pdGlvbiBidXQgeW91IGRpZG4ndCBwcm92aWRlIGBzY2hlbWFgIG5vciBg'@;
put 'ZGF0YWAiKTtjb25zdCBhPXRoaXMudGFibGVNZXRhLmNvbHVtbnM7bGV0IGQ7aWYodGhpcy5jb2xUb1Byb3BDYWNoZT1bXSx0aGlzLnByb3BUb0NvbENhY2hlPW5ldyBNYXAsYSl7bGV0IGg9MCxmPTAsdj0hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSl7Y29uc3QgTT1WTyhsKTtoPU0+MD9N'@;
put 'OnRoaXMuY291bnRGaXJzdFJvd0tleXMoKSx2PSEwfWVsc2UgaD1NYXRoLm1pbih0aGlzLnRhYmxlTWV0YS5tYXhDb2xzLGEubGVuZ3RoKTtmb3IoZD0wO2Q8aDtkKyspe2NvbnN0IE09dj9hKGQpOmFbZF07aWYocWEoTSkpe2lmKHR5cGVvZiBNLmRhdGE8InUiKXtjb25zdCBEPXY/ZjpkO3Ro'@;
put 'aXMuY29sVG9Qcm9wQ2FjaGVbRF09TS5kYXRhLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KE0uZGF0YSxEKX1mKz0xfX19ZWxzZSB0aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKGwpfWNvdW50Rmlyc3RSb3dLZXlzKCl7cmV0dXJuIFJLKHRoaXMuZGF0YVNvdXJjZSl9cmVjdXJzaXZlRHVja0Nv'@;
put 'bHVtbnMobCxhLGQpe2xldCB2LGg9YSxmPWQ7cmV0dXJuIHR5cGVvZiBoPiJ1IiYmKGg9MCxmPSIiKSwib2JqZWN0Ij09dHlwZW9mIGwmJiFBcnJheS5pc0FycmF5KGwpJiZYYShsLChNLEQpPT57bnVsbD09PU0/KHY9ZitELHRoaXMuY29sVG9Qcm9wQ2FjaGUucHVzaCh2KSx0aGlzLnByb3BU'@;
put 'b0NvbENhY2hlLnNldCh2LGgpLGgrPTEpOmg9dGhpcy5yZWN1cnNpdmVEdWNrQ29sdW1ucyhNLGgsYCR7RH0uYCl9KSxofWNvbFRvUHJvcChsKXtpZighMT09PU51bWJlci5pc0ludGVnZXIobCkpcmV0dXJuIGw7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3JldHVybiBu'@;
put 'dWxsPT09YT9sOnRoaXMuY29sVG9Qcm9wQ2FjaGUmJkZvKHRoaXMuY29sVG9Qcm9wQ2FjaGVbYV0pP3RoaXMuY29sVG9Qcm9wQ2FjaGVbYV06YX1wcm9wVG9Db2wobCl7Y29uc3QgYT10aGlzLnByb3BUb0NvbENhY2hlLmdldChsKTtpZihGbyhhKSlyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxD'@;
put 'b2x1bW4oYSk7Y29uc3QgZD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWQ/bDpkfWdldFNjaGVtYSgpe2NvbnN0IGw9dGhpcy50YWJsZU1ldGEuZGF0YVNjaGVtYTtyZXR1cm4gbD8iZnVuY3Rpb24iPT10eXBlb2YgbD9sKCk6bDp0aGlzLmR1Y2tTY2hlbWF9Y3Jl'@;
put 'YXRlRHVja1NjaGVtYSgpe3JldHVybiB0aGlzLmRhdGFTb3VyY2UmJnRoaXMuZGF0YVNvdXJjZVswXT9zXyh0aGlzLmRhdGFTb3VyY2VbMF0pOnt9fXJlZnJlc2hEdWNrU2NoZW1hKCl7dGhpcy5kdWNrU2NoZW1hPXRoaXMuY3JlYXRlRHVja1NjaGVtYSgpfWNyZWF0ZVJvdyhsKXtsZXQgYT1h'@;
put 'cmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSx7c291cmNlOmQsbW9kZTpoPSJhYm92ZSJ9PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBmPXRoaXMuaG90LmNvdW50U291'@;
put 'cmNlUm93cygpO2xldCB2PWYsTT0wLEQ9bDtpZigoIm51bWJlciIhPXR5cGVvZiBEfHxEPj1mKSYmKEQ9ZiksRDx0aGlzLmhvdC5jb3VudFJvd3MoKSYmKHY9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhEKSksITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixELGEsZCl8'@;
put 'fG51bGw9PT12KXJldHVybntkZWx0YTowfTtjb25zdCBuZT10aGlzLnRhYmxlTWV0YS5tYXhSb3dzLGNlPXRoaXMuZ2V0U2NoZW1hKCkubGVuZ3RoLGJlPVtdO2Zvcig7TTxhJiZmK008bmU7KXtsZXQgQmU9bnVsbDsiYXJyYXkiPT09dGhpcy5ob3QuZGF0YVR5cGU/dGhpcy50YWJsZU1ldGEu'@;
put 'ZGF0YVNjaGVtYT9CZT1nMSh0aGlzLmdldFNjaGVtYSgpKTooQmU9W10sJG8oY2UtMSwoKT0+QmUucHVzaChudWxsKSkpOiJmdW5jdGlvbiI9PT10aGlzLmhvdC5kYXRhVHlwZT9CZT10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKEQrTSk6KEJlPXt9LE1FKEJlLHRoaXMuZ2V0U2NoZW1hKCkp'@;
put 'KSxiZS5wdXNoKEJlKSxNKz0xfXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoRCxNKSwiYmVsb3ciPT09aCYmKHY9TWF0aC5taW4odisxLGYpKSx0aGlzLnNwbGljZURhdGEodiwwLGJlKTtjb25zdCBFZT10aGlzLmhvdC50b1Zpc3VhbFJvdyh2KTtyZXR1cm4gdGhpcy5o'@;
put 'b3QuY291bnRTb3VyY2VSb3dzKCk9PT1iZS5sZW5ndGgmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmhvdC5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksTT4wJiYobnVsbD09bD90aGlzLm1ldGFNYW5hZ2VyLmNyZWF0ZVJvdyhudWxsLE0pOiJhdXRvIiE9'@;
put 'PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KHYsYSkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsRWUsTSxkKSx7ZGVsdGE6TSxzdGFydFBoeXNpY2FsSW5kZXg6dn19Y3JlYXRlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzFdP2FyZ3VtZW50c1sxXToxLHtzb3VyY2U6ZCxtb2RlOmg9InN0YXJ0In09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2lmKCF0aGlzLmhvdC5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IkNhbm5vdCBjcmVhdGUgbmV3IGNvbHVtbi4gV2hlbiBkYXRhIHNvdXJjZSBpbiBhbiBvYmplY3QsIHlvdSBjYW4gb25seSBoYXZlIGFzIG11Y2ggY29sdW1ucyBhcyBkZWZpbmVkIGluIGZpcnN0IGRhdGEgcm93LCBkYXRhIHNjaGVtYSBvciBpbiB0aGUgJ2NvbHVtbnMnIHNldHRpbmcuSWYg'@;
put 'eW91IHdhbnQgdG8gYmUgYWJsZSB0byBhZGQgbmV3IGNvbHVtbnMsIHlvdSBoYXZlIHRvIHVzZSBhcnJheSBkYXRhc291cmNlLiIpO2NvbnN0IGY9dGhpcy5kYXRhU291cmNlLHY9dGhpcy50YWJsZU1ldGEubWF4Q29scyxNPXRoaXMuaG90LmNvdW50U291cmNlQ29scygpO2xldCBEPWw7aWYo'@;
put 'KCJudW1iZXIiIT10eXBlb2YgRHx8RD49TSkmJihEPU0pLCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZUNvbCIsRCxhLGQpKXJldHVybntkZWx0YTowfTtsZXQgbmU9TTtEPHRoaXMuaG90LmNvdW50Q29scygpJiYobmU9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihEKSk7'@;
put 'Y29uc3QgY2U9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7bGV0IGJlPXRoaXMuaG90LmNvdW50Q29scygpLEVlPTAsQmU9bmU7ImVuZCI9PT1oJiYoQmU9TWF0aC5taW4oQmUrMSxNKSk7Y29uc3QgcWU9QmU7Zm9yKDtFZTxhJiZiZTx2Oyl7aWYoIm51bWJlciIhPXR5cGVvZiBEfHxEPj1i'@;
put 'ZSlpZihjZT4wKWZvcihsZXQgcHQ9MDtwdDxjZTtwdCs9MSl0eXBlb2YgZltwdF0+InUiJiYoZltwdF09W10pLGZbcHRdLnB1c2gobnVsbCk7ZWxzZSBmLnB1c2goW251bGxdKTtlbHNlIGZvcihsZXQgcHQ9MDtwdDxjZTtwdCsrKWZbcHRdLnNwbGljZShCZSwwLG51bGwpO0VlKz0xLEJlKz0x'@;
put 'LGJlKz0xfXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoRCxFZSksRWU+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4obnVsbCxFZSk6ImF1dG8iIT09ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4ocWUsYSkpO2NvbnN0IHJ0'@;
put 'PXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKHFlKTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlQ29sIixydCxFZSxkKSx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCkse2RlbHRhOkVlLHN0YXJ0UGh5c2ljYWxJbmRleDpxZX19cmVtb3ZlUm93KGwpe2xldCBhPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsaD1OdW1iZXIuaXNJbnRlZ2VyKGwpP2w6LWE7Y29uc3QgZj10aGlzLnZpc3VhbFJvd3NUb1BoeXNpY2FsKGgsYSksdj10aGlzLmhv'@;
put 'dC5jb3VudFNvdXJjZVJvd3MoKTtpZihoPSh2K2gpJXYsITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlUm93IixoLGYubGVuZ3RoLGYsZCkpcmV0dXJuITE7Y29uc3QgRD1mLmxlbmd0aDtpZih0aGlzLmZpbHRlckRhdGEoaCxELGYpLGg8dGhpcy5ob3QuY291bnRSb3dzKCkp'@;
put 'e3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlbW92ZUluZGV4ZXMoZik7Y29uc3QgbmU9Rm8odGhpcy50YWJsZU1ldGEuY29sdW1ucyl8fEZvKHRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEpfHx0aGlzLnRhYmxlTWV0YS5jb2xIZWFkZXJzOzA9PT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5n'@;
put 'ZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiYhbmUmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSl9cmV0dXJuIGYuc2xpY2UoMCkuc29ydCgobmUsY2UpPT5jZS1uZSkuZm9yRWFjaChuZT0+e3RoaXMubWV0YU1hbmFnZXIucmVtb3ZlUm93KG5l'@;
put 'LDEpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlUm93IixoLEQsZixkKSwhMH1yZW1vdmVDb2wobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEsZD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZv'@;
put 'aWQgMDtpZigib2JqZWN0Ij09PXRoaXMuaG90LmRhdGFUeXBlfHx0aGlzLnRhYmxlTWV0YS5jb2x1bW5zKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHJlbW92ZSBjb2x1bW4gd2l0aCBvYmplY3QgZGF0YSBzb3VyY2Ugb3IgY29sdW1ucyBvcHRpb24gc3BlY2lmaWVkIik7bGV0IGg9Im51bWJl'@;
put 'ciIhPXR5cGVvZiBsPy1hOmw7aD0odGhpcy5ob3QuY291bnRDb2xzKCkraCkldGhpcy5ob3QuY291bnRDb2xzKCk7Y29uc3QgZj10aGlzLnZpc3VhbENvbHVtbnNUb1BoeXNpY2FsKGgsYSksdj1mLnNsaWNlKDApLnNvcnQoKGNlLGJlKT0+YmUtY2UpO2lmKCExPT09dGhpcy5ob3QucnVuSG9v'@;
put 'a3MoImJlZm9yZVJlbW92ZUNvbCIsaCxhLGYsZCkpcmV0dXJuITE7bGV0IEQ9ITA7Y29uc3QgWj12Lmxlbmd0aCxuZT10aGlzLmRhdGFTb3VyY2U7Zm9yKGxldCBjZT0wO2NlPFo7Y2UrKylEJiZmWzBdIT09ZltjZV0tY2UmJihEPSExKTtpZihEKWZvcihsZXQgY2U9MCxiZT10aGlzLmhvdC5j'@;
put 'b3VudFNvdXJjZVJvd3MoKTtjZTxiZTtjZSsrKW5lW2NlXS5zcGxpY2UoZlswXSxhKSwwPT09Y2UmJnRoaXMubWV0YU1hbmFnZXIucmVtb3ZlQ29sdW1uKGZbMF0sYSk7ZWxzZSBmb3IobGV0IGNlPTAsYmU9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7Y2U8YmU7Y2UrKylmb3IobGV0IEVl'@;
put 'PTA7RWU8WjtFZSsrKW5lW2NlXS5zcGxpY2UodltFZV0sMSksMD09PWNlJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbih2W0VlXSwxKTtyZXR1cm4gaDx0aGlzLmhvdC5jb3VudENvbHMoKSYmKHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlbW92ZUluZGV4ZXMoZiksIXRoaXMu'@;
put 'dGFibGVNZXRhLnJvd0hlYWRlcnMmJjA9PT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiZ0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UoW10pKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSZW1vdmVDb2wi'@;
put 'LGgsYSxmLGQpLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSwhMH1zcGxpY2VDb2wobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwpLGY9aC5zbGljZShhLGErZCksdj1oLnNsaWNlKGErZCk7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsRD1uZXcgQXJyYXkoTT4zP00t'@;
put 'MzowKSxaPTM7WjxNO1orKylEW1otM109YXJndW1lbnRzW1pdO2kkKEQsdik7bGV0IG5lPTA7Zm9yKDtuZTxkOylELnB1c2gobnVsbCksbmUrPTE7cmV0dXJuIGEyZShEKSx0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShhLGwsRCxudWxsLG51bGwsInNwbGljZUNvbCIpLGZ9c3BsaWNlUm93'@;
put 'KGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdFJvdyhsKSxmPWguc2xpY2UoYSxhK2QpLHY9aC5zbGljZShhK2QpO2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5KE0+Mz9NLTM6MCksWj0zO1o8TTtaKyspRFtaLTNdPWFyZ3VtZW50c1taXTtpJChE'@;
put 'LHYpO2xldCBuZT0wO2Zvcig7bmU8ZDspRC5wdXNoKG51bGwpLG5lKz0xO3JldHVybiB0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShsLGEsW0RdLG51bGwsbnVsbCwic3BsaWNlUm93IiksZn1zcGxpY2VEYXRhKGwsYSxkKXtpZighMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEYXRh'@;
put 'U3BsaWNlIixsLGEsZCkpe2NvbnN0IGY9Wy4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZSgwLGwpLC4uLmQsLi4udGhpcy5kYXRhU291cmNlLnNsaWNlKGwpXTt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsZi5mb3JFYWNoKHY9PnRoaXMuZGF0YVNvdXJjZS5wdXNoKHYpKX19ZmlsdGVyRGF0YShs'@;
put 'LGEsZCl7bGV0IGg9dGhpcy5ob3QucnVuSG9va3MoImZpbHRlckRhdGEiLGwsYSxkKTshMT09PUFycmF5LmlzQXJyYXkoaCkmJihoPXRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKGYsdik9Pi0xPT09ZC5pbmRleE9mKHYpKSksdGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLEFycmF5LnByb3RvdHlw'@;
put 'ZS5wdXNoLmFwcGx5KHRoaXMuZGF0YVNvdXJjZSxoKX1nZXQobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCk7bGV0IGg9dGhpcy5kYXRhU291cmNlW2RdO2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGQpO2g9aXNOYU4oZik/ZjpoO2NvbnN0'@;
put 'e2RhdGFEb3ROb3RhdGlvbjp2fT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2xldCBNPW51bGw7aWYoaCYmaC5oYXNPd25Qcm9wZXJ0eSYmRXUoaCxhKSlNPWhbYV07ZWxzZSBpZih2JiYic3RyaW5nIj09dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtsZXQgRD1oO2lmKCFEKXJldHVybiBu'@;
put 'dWxsO2NvbnN0IFo9YS5zcGxpdCgiLiIpO2ZvcihsZXQgbmU9MCxjZT1aLmxlbmd0aDtuZTxjZTtuZSsrKWlmKEQ9RFtaW25lXV0sdHlwZW9mIEQ+InUiKXJldHVybiBudWxsO009RH1lbHNlImZ1bmN0aW9uIj09dHlwZW9mIGEmJihNPWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGQsZCsxKVsw'@;
put 'XSkpO2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgRD1GZChNKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RGF0YSIsZCx0aGlzLnByb3BUb0NvbChhKSxELCJnZXQiKSxELmlzVG91Y2hlZCgpJiYoTT1ELnZhbHVlKX1yZXR1cm4gTX1nZXRDb3B5YWJsZShsLGEp'@;
put 'e3JldHVybiB0aGlzLmhvdC5nZXRDZWxsTWV0YShsLHRoaXMucHJvcFRvQ29sKGEpKS5jb3B5YWJsZT90aGlzLmdldChsLGEpOiIifXNldChsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpO2xldCBmPWQsdj10aGlzLmRhdGFTb3VyY2VbaF07Y29uc3QgTT10aGlzLmhv'@;
put 'dC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsaCk7aWYodj1pc05hTihNKT9NOnYsdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBaPUZkKGYpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlEYXRhIixoLHRoaXMucHJvcFRvQ29sKGEpLFosInNldCIpLFouaXNUb3VjaGVk'@;
put 'KCkmJihmPVoudmFsdWUpfWNvbnN0e2RhdGFEb3ROb3RhdGlvbjpEfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2lmKHYmJnYuaGFzT3duUHJvcGVydHkmJkV1KHYsYSkpdlthXT1mO2Vsc2UgaWYoRCYmInN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7bGV0IGNlLFo9dixu'@;
put 'ZT0wO2NvbnN0IGJlPWEuc3BsaXQoIi4iKTtmb3IobmU9MCxjZT1iZS5sZW5ndGgtMTtuZTxjZTtuZSsrKXtpZigiX19wcm90b19fIj09PWJlW25lXXx8ImNvbnN0cnVjdG9yIj09PWJlW25lXXx8InByb3RvdHlwZSI9PT1iZVtuZV0pcmV0dXJuO3R5cGVvZiBaW2JlW25lXV0+InUiJiYoWlti'@;
put 'ZVtuZV1dPXt9KSxaPVpbYmVbbmVdXX1aW2JlW25lXV09Zn1lbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGgsaCsxKVswXSxmKTtlbHNle2lmKCJfX3Byb3RvX18iPT09YXx8ImNvbnN0cnVjdG9yIj09PWF8fCJwcm90b3R5cGUiPT09YSlyZXR1'@;
put 'cm47dlthXT1mfX12aXN1YWxSb3dzVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCksaD1bXTtsZXQgTSxmPShkK2wpJWQsdj1hO2Zvcig7ZjxkJiZ2OylNPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coZiksaC5wdXNoKE0pLHYtPTEsZis9MTtyZXR1cm4g'@;
put 'aH12aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCksaD1bXTtsZXQgZj0oZCtsKSVkLHY9YTtmb3IoO2Y8ZCYmdjspe2NvbnN0IE09dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKTtoLnB1c2goTSksdi09MSxmKz0xfXJldHVybiBofWNs'@;
put 'ZWFyKCl7Zm9yKGxldCBsPTA7bDx0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsKyspZm9yKGxldCBhPTA7YTx0aGlzLmhvdC5jb3VudENvbHMoKTthKyspdGhpcy5zZXQobCx0aGlzLmNvbFRvUHJvcChhKSwiIil9Z2V0TGVuZ3RoKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5tYXhSb3dz'@;
put 'O2xldCBhO2E9bDwwfHwwPT09bD8wOmx8fDEvMDtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKGQsYSl9Z2V0QWxsKCl7Y29uc3QgbD17cm93OjAsY29sOjB9LGE9e3JvdzpNYXRoLm1heCh0aGlzLmhv'@;
put 'dC5jb3VudFJvd3MoKS0xLDApLGNvbDpNYXRoLm1heCh0aGlzLmhvdC5jb3VudENvbHMoKS0xLDApfTtyZXR1cm4gbC5yb3ctYS5yb3chPTB8fHRoaXMuaG90LmNvdW50U291cmNlUm93cygpP3RoaXMuZ2V0UmFuZ2UobCxhLFRfLkRFU1RJTkFUSU9OX1JFTkRFUkVSKTpbXX1jb3VudENhY2hl'@;
put 'ZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2xUb1Byb3BDYWNoZS5sZW5ndGh9Z2V0UmFuZ2UobCxhLGQpe2NvbnN0IGg9W107bGV0IGYsdixNO2NvbnN0IEQ9dGhpcy50YWJsZU1ldGEubWF4Um93cyxaPXRoaXMudGFibGVNZXRhLm1heENvbHM7aWYoMD09PUR8fDA9PT1aKXJldHVybltdO2Nv'@;
put 'bnN0IG5lPWQ9PT1UXy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SP3RoaXMuZ2V0Q29weWFibGU6dGhpcy5nZXQsY2U9TWF0aC5taW4oTWF0aC5tYXgoRC0xLDApLE1hdGgubWF4KGwucm93LGEucm93KSksYmU9TWF0aC5taW4oTWF0aC5tYXgoWi0xLDApLE1hdGgubWF4KGwuY29s'@;
put 'LGEuY29sKSk7Zm9yKGY9TWF0aC5taW4obC5yb3csYS5yb3cpO2Y8PWNlO2YrKyl7TT1bXTtjb25zdCBFZT1mPj0wP3RoaXMuaG90LnRvUGh5c2ljYWxSb3coZik6Zjtmb3Iodj1NYXRoLm1pbihsLmNvbCxhLmNvbCk7djw9YmUmJm51bGwhPT1FZTt2KyspTS5wdXNoKG5lLmNhbGwodGhpcyxm'@;
put 'LHRoaXMuY29sVG9Qcm9wKHYpKSk7bnVsbCE9PUVlJiZoLnB1c2goTSl9cmV0dXJuIGh9Z2V0VGV4dChsLGEpe3JldHVybiBuVCh0aGlzLmdldFJhbmdlKGwsYSxUXy5ERVNUSU5BVElPTl9SRU5ERVJFUikpfWdldENvcHlhYmxlVGV4dChsLGEpe3JldHVybiBuVCh0aGlzLmdldFJhbmdlKGws'@;
put 'YSxUXy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKSl9ZGVzdHJveSgpe3RoaXMuaG90PW51bGwsdGhpcy5tZXRhTWFuYWdlcj1udWxsLHRoaXMuZGF0YVNvdXJjZT1udWxsLHRoaXMuZHVja1NjaGVtYT1udWxsLHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RoPTAsdGhpcy5wcm9w'@;
put 'VG9Db2xDYWNoZS5jbGVhcigpLHRoaXMucHJvcFRvQ29sQ2FjaGU9dm9pZCAwfX1jb25zdCBPbnQ9VF87ZnVuY3Rpb24gc3BlKGMsbCxhLGQpe2NvbnN0e2hvdEluc3RhbmNlOmgsZGF0YU1hcDpmLGRhdGFTb3VyY2U6dixpbnRlcm5hbFNvdXJjZTpNLHNvdXJjZTpELG1ldGFNYW5hZ2VyOlos'@;
put 'Zmlyc3RSdW46bmV9PWQsY2U9cDEoTSksYmU9aC5nZXRTZXR0aW5ncygpO2guZGF0YVR5cGU9QXJyYXkuaXNBcnJheShiZS5kYXRhU2NoZW1hKT8iYXJyYXkiOm1sKGJlLmRhdGFTY2hlbWEpPyJmdW5jdGlvbiI6Im9iamVjdCIsZiYmZi5kZXN0cm95KCksYz1oLnJ1bkhvb2tzKGBiZWZvcmUk'@;
put 'e2NlfWAsYyxuZSxEKTtjb25zdCBFZT1uZXcgT250KGgsYyxaKTtpZihsKEVlKSwib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jKWMucHVzaCYmYy5zcGxpY2V8fChjPVtjXSk7ZWxzZXtpZihudWxsIT09Yyl0aHJvdyBuZXcgRXJyb3IoYCR7TX0gb25seSBhY2NlcHRzIGFycmF5IG9mIG9i'@;
put 'amVjdHMgb3IgYXJyYXkgb2YgYXJyYXlzICgke3R5cGVvZiBjfSBnaXZlbilgKTt7Y29uc3QgQmU9RWUuZ2V0U2NoZW1hKCk7Yz1bXTtsZXQgcWUscnQ9MCxwdD0wO2ZvcihydD0wLHB0PWJlLnN0YXJ0Um93cztydDxwdDtydCsrKWlmKCJvYmplY3QiIT09aC5kYXRhVHlwZSYmImZ1bmN0aW9u'@;
put 'IiE9PWguZGF0YVR5cGV8fCFiZS5kYXRhU2NoZW1hKWlmKCJhcnJheSI9PT1oLmRhdGFUeXBlKXFlPWcxKEJlWzBdKSxjLnB1c2gocWUpO2Vsc2V7cWU9W107Zm9yKGxldCBkdD0wLEp0PWJlLnN0YXJ0Q29scztkdDxKdDtkdCsrKXFlLnB1c2gobnVsbCk7Yy5wdXNoKHFlKX1lbHNlIHFlPWcx'@;
put 'KEJlKSxjLnB1c2gocWUpfX1BcnJheS5pc0FycmF5KGNbMF0pJiYoaC5kYXRhVHlwZT0iYXJyYXkiKSxiZS5kYXRhPWMsRWUuZGF0YVNvdXJjZT1jLHYuZGF0YT1jLHYuZGF0YVR5cGU9aC5kYXRhVHlwZSx2LmNvbFRvUHJvcD1FZS5jb2xUb1Byb3AuYmluZChFZSksdi5wcm9wVG9Db2w9RWUu'@;
put 'cHJvcFRvQ29sLmJpbmQoRWUpLHYuY291bnRDYWNoZWRDb2x1bW5zPUVlLmNvdW50Q2FjaGVkQ29sdW1ucy5iaW5kKEVlKSxhKEVlKSxoLnJ1bkhvb2tzKGBhZnRlciR7Y2V9YCxjLG5lLEQpLG5lfHwoaC5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLG51bGwsTSksaC5yZW5kZXIoKSksaC5nZXRT'@;
put 'ZXR0aW5ncygpLmFyaWFUYWdzJiZ2YShoLnJvb3RFbGVtZW50LFt5MmUoLTEpLElPKGguY291bnRDb2xzKCkrKGgudmlldz9oLmNvdW50Um93SGVhZGVycygpOjApKV0pfWZ1bmN0aW9uIEFfKGMpe0VwKGMpJiZjLnNjcm9sbEludG9WaWV3KHtibG9jazoibmVhcmVzdCIsaW5saW5lOiJuZWFy'@;
put 'ZXN0In0pfWZ1bmN0aW9uIFBQKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHZpZXc6YX09YyxkPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPWwuZ2V0U2VsZWN0aW9uU291cmNlKCksZj1hLmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCksdj1hLmdldExhc3RGdWxseVZpc2libGVDb2x1bW4o'@;
put 'KSxNPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsRD1kLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCxaPU08PWYsbmU9RD49dixjZT1hLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksYmU9YS5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCksRWU9ZC5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxC'@;
put 'ZT1kLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyxxZT1FZTw9Y2UscnQ9QmU+PWJlO3JldHVybntnZXRDb21wdXRlZENvbHVtblRhcmdldDpwdD0+Im1vdXNlIj09PWh8fCJrZXlib2FyZCI9PT1oP3B0LmNvbDpaJiZuZT9kLmhpZ2hsaWdodC5jb2w6Wj9NOm5lP0Q6cHQuY29sLGdldENvbXB1'@;
put 'dGVkUm93VGFyZ2V0OnB0PT4ibW91c2UiPT09aHx8ImtleWJvYXJkIj09PWg/cHQucm93OnFlJiZydD9kLmhpZ2hsaWdodC5yb3c6cWU/RWU6cnQ/QmU6cHQucm93fX1jb25zdCBscGU9ImdyaWREZWZhdWx0IixabT0iZWRpdG9yTWFuYWdlci5oYW5kbGluZ0VkaXRvciI7ZnVuY3Rpb24gY3Bl'@;
put 'KGMpe2NvbnN0IGE9Yy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gYS50eXBlPSJ0ZXh0IixhLm5hbWU9Il9faHRGb2N1c0NhdGNoZXIiLGEuY2xhc3NMaXN0LmFkZCgiaHRGb2N1c0NhdGNoZXIiKSxjLmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZhKGEsW2dF'@;
put 'KCJGb2N1cyBjYXRjaGVyIildKSxhfWZ1bmN0aW9uIENYKGMpe2NvbnN0e3Jvd0luZGV4TWFwcGVyOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7bmF2aWdhYmxlSGVhZGVyczpkfT1jLmdldFNldHRpbmdzKCk7bGV0IGg9ZCYmYy5jb3VudENvbEhlYWRlcnMoKT4wPy1jLmNvdW50Q29sSGVh'@;
put 'ZGVycygpOjAsZj1kJiZjLmNvdW50Um93SGVhZGVycygpPjA/LWMuY291bnRSb3dIZWFkZXJzKCk6MDtyZXR1cm4gMD09PWgmJihoPWwuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKSksMD09PWYmJihmPWEuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSksbnVsbD09PWh8'@;
put 'fG51bGw9PT1mP251bGw6Yy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpfWZ1bmN0aW9uIFNYKGMpe3ZhciBsLGE7Y29uc3R7cm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT1jLHtuYXZpZ2FibGVIZWFkZXJzOmZ9PWMuZ2V0U2V0dGluZ3MoKTtsZXQgdj1kLmdldFJlbmRlcmFi'@;
put 'bGVJbmRleGVzTGVuZ3RoKCktMSxNPWguZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS0xO2lmKHY8MCl7aWYoIWZ8fDA9PT1jLmNvdW50Q29sSGVhZGVycygpKXJldHVybiBudWxsO3Y9LTF9aWYoTTwwKXtpZighZnx8MD09PWMuY291bnRDb2xIZWFkZXJzKCkpcmV0dXJuIG51bGw7TT0t'@;
put 'MX1yZXR1cm4gYy5fY3JlYXRlQ2VsbENvb3JkcyhudWxsIT09KGw9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpKSYmdm9pZCAwIT09bD9sOnYsbnVsbCE9PShhPWguZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChNKSkmJnZvaWQgMCE9PWE/YTpNKX1jb25zdCB1cGU9bmV3'@;
put 'IE1hcChbWyIgIiwic3BhY2UiXSxbInNwYWNlYmFyIiwic3BhY2UiXSxbInNjcm9sbCIsInNjcm9sbGxvY2siXSxbImRlbCIsImRlbGV0ZSJdLFsiZXNjIiwiZXNjYXBlIl0sWyJtZWRpYW5leHR0cmFjayIsIm1lZGlhdHJhY2tuZXh0Il0sWyJtZWRpYXByZXZpb3VzdHJhY2siLCJtZWRpYXRy'@;
put 'YWNrcHJldmlvdXMiXSxbInZvbHVtZXVwIiwiYXVkaW92b2x1bWV1cCJdLFsidm9sdW1lZG93biIsImF1ZGlvdm9sdW1lZG93biJdLFsidm9sdW1lbXV0ZSIsImF1ZGlvdm9sdW1lbXV0ZSJdLFsibXVsdGlwbHkiLCIqIl0sWyJhZGQiLCIrIl0sWyJkaXZpZGUiLCIvIl0sWyJzdWJ0cmFjdCIs'@;
put 'Ii0iXSxbImxlZnQiLCJhcnJvd2xlZnQiXSxbInJpZ2h0IiwiYXJyb3dyaWdodCJdLFsidXAiLCJhcnJvd3VwIl0sWyJkb3duIiwiYXJyb3dkb3duIl1dKSxGUD1jPT5jLm1hcChsPT57Y29uc3QgYT1sLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHVwZS5oYXMoYSk/dXBlLmdldChhKTphfSkuc29y'@;
put 'dCgpLmpvaW4oIisiKSxkcGU9bmV3IE1hcChbWzk2LCJudW1wYWQwIl0sWzk3LCJudW1wYWQxIl0sWzk4LCJudW1wYWQyIl0sWzk5LCJudW1wYWQzIl0sWzEwMCwibnVtcGFkNCJdLFsxMDEsIm51bXBhZDUiXSxbMTAyLCJudW1wYWQ2Il0sWzEwMywibnVtcGFkNyJdLFsxMDQsIm51bXBhZDgi'@;
put 'XSxbMTA1LCJudW1wYWQ5Il0sWzEwNiwibXVsdGlwbHkiXSxbMTA3LCJhZGQiXSxbMTA4LCJkZWNpbWFsIl0sWzEwOSwic3VidHJhY3QiXSxbMTEwLCJkZWNpbWFsIl0sWzExMSwiZGl2aWRlIl0sWzExMiwiZjEiXSxbMTEzLCJmMiJdLFsxMTQsImYzIl0sWzExNSwiZjQiXSxbMTE2LCJmNSJd'@;
put 'LFsxMTcsImY2Il0sWzExOCwiZjciXSxbMTE5LCJmOCJdLFsxMjAsImY5Il0sWzEyMSwiZjEwIl0sWzEyMiwiZjExIl0sWzEyMywiZjEyIl0sWzE4Niwic2VtaWNvbG9uIl0sWzE4NywiZXF1YWwiXSxbMTg4LCJjb21tYSJdLFsxODksIm1pbnVzIl0sWzE5MCwicGVyaW9kIl0sWzE5MSwic2xh'@;
put 'c2giXSxbMTkyLCJiYWNrcXVvdGUiXSxbMjE5LCJicmFja2V0bGVmdCJdLFsyMjAsImJhY2tzbGFzaCJdLFsyMjEsImJyYWNrZXRyaWdodCJdLFsyMjIsInF1b3RlIl1dKSxNWD1jPT57bGV0e3doaWNoOmwsa2V5OmF9PWM7aWYoZHBlLmhhcyhsKSlyZXR1cm4gZHBlLmdldChsKTtjb25zdCBk'@;
put 'PVN0cmluZy5mcm9tQ2hhckNvZGUobCkudG9Mb3dlckNhc2UoKTtyZXR1cm4vXlthLXowLTldJC8udGVzdChkKT9kOmEudG9Mb3dlckNhc2UoKX0saHBlPVN5bWJvbCgic2hvcnRjdXQtY29udGV4dCIpO2Z1bmN0aW9uIGZwZShjKXtyZXR1cm4gcWEoYykmJmMuX19raW5kT2Y9PT1ocGV9Y29u'@;
put 'c3QgS250PVsibWV0YSIsImFsdCIsInNoaWZ0IiwiY29udHJvbCJdLHJUPWZ1bmN0aW9uICRudCgpe2NvbnN0IGM9bmV3IFNldDtyZXR1cm57cHJlc3MobCl7Yy5hZGQobCl9LHJlbGVhc2UobCl7Yy5kZWxldGUobCl9LHJlbGVhc2VBbGwoKXtjLmNsZWFyKCl9LGlzUHJlc3NlZDpsPT5jLmhh'@;
put 'cyhsKX19KCksaVQ9W107bGV0IEhQPTA7Y29uc3QgWG50PWM9PntsZXR7b3duZXJXaW5kb3c6bCxoYW5kbGVFdmVudDphLGJlZm9yZUtleURvd246ZCxhZnRlcktleURvd246aH09Yztjb25zdCBmPVhPKHtlcnJvcklkRXhpc3RzOkJlPT5gVGhlICIke0JlfSIgY29udGV4dCBuYW1lIGlzIGFs'@;
put 'cmVhZHkgcmVnaXN0ZXJlZC5gfSk7bGV0IHY9ImdyaWQiO2NvbnN0IEQ9KCk9PnYsWj1CZT0+Zi5nZXRJdGVtKEJlKTtsZXQgY2U9ITE7Y29uc3QgYmU9ZnVuY3Rpb24oQmUscWUpe2xldCBydD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06'@;
put 'RCgpO2NvbnN0IHB0PWZwZShydCk/cnQ6WihydCk7bGV0IGR0PSExO2lmKCFwdC5oYXNTaG9ydGN1dChxZSkpcmV0dXJuIGR0O2NvbnN0IEp0PXB0LmdldFNob3J0Y3V0cyhxZSk7Zm9yKGxldCB2bj0wO3ZuPEp0Lmxlbmd0aDt2bisrKXtjb25zdHtjYWxsYmFjazpDbixydW5Pbmx5SWY6dG4s'@;
put 'cHJldmVudERlZmF1bHQ6TW4sc3RvcFByb3BhZ2F0aW9uOkNyLGNhcHR1cmVDdHJsOkdyLGZvcndhcmRUb0NvbnRleHQ6Z3J9PUp0W3ZuXTtpZighMD09PXRuKEJlKSl7aWYoY2U9R3IsZHQ9ITE9PT1DbihCZSxxZSksY2U9ITEsTW4mJkJlLnByZXZlbnREZWZhdWx0KCksQ3ImJihIMihCZSks'@;
put 'QmUuc3RvcFByb3BhZ2F0aW9uKCkpLGR0KWJyZWFrO2dyJiZiZShCZSxxZSxncil9fXJldHVybiBkdH0sRWU9ZnVuY3Rpb24gcW50KGMsbCxhLGQsaCl7Y29uc3QgZj1FZT0+S250LmluY2x1ZGVzKEVlKSx2PWZ1bmN0aW9uKEVlKXtsZXQgQmU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAh'@;
put 'PT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBxZT1bXTtyZXR1cm4gRWUuYWx0S2V5JiZxZS5wdXNoKCJhbHQiKSxCZSYmKEVlLmN0cmxLZXl8fEVlLm1ldGFLZXkpP3FlLnB1c2goImNvbnRyb2wvbWV0YSIpOihFZS5jdHJsS2V5JiZxZS5wdXNoKCJjb250cm9sIiksRWUubWV0'@;
put 'YUtleSYmcWUucHVzaCgibWV0YSIpKSxFZS5zaGlmdEtleSYmcWUucHVzaCgic2hpZnQiKSxxZX0sTT1FZT0+e2lmKCExPT09bChFZSl8fCExPT09YShFZSl8fDIyOT09PUVlLmtleUNvZGV8fCJzdHJpbmciIT10eXBlb2YgRWUua2V5fHxQbShFZSkpcmV0dXJuO2NvbnN0IHFlPU1YKEVlKTts'@;
put 'ZXQgcnQ9W107ZihxZSl8fChydD12KEVlKSk7Y29uc3QgcHQ9W3FlXS5jb25jYXQocnQpOyFoKEVlLHB0KSYmKGpPKCkmJnJ0LmluY2x1ZGVzKCJtZXRhIil8fCFqTygpJiZydC5pbmNsdWRlcygiY29udHJvbCIpKSYmaChFZSxbcWVdLmNvbmNhdCh2KEVlLCEwKSkpLGQoRWUpfSxEPUVlPT57'@;
put 'aWYoInN0cmluZyI9PXR5cGVvZiBFZS5rZXkpe2NvbnN0IEJlPU1YKEVlKTtmKEJlKSYmclQucHJlc3MoQmUpfX0sWj1FZT0+e2lmKCJzdHJpbmciPT10eXBlb2YgRWUua2V5KXtjb25zdCBCZT1NWChFZSk7ZihCZSkmJnJULnJlbGVhc2UoQmUpfX0sbmU9KCk9PntyVC5yZWxlYXNlQWxsKCl9'@;
put 'O3JldHVybnttb3VudDooKT0+e2xldCBFZT1jO2ZvcihIUCs9MTtFZTspMT09PUhQJiYoRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLEQpLGlULnB1c2goe2V2ZW50OiJrZXlkb3duIixsaXN0ZW5lcjpEfSksRWUuZG9jdW1lbnQuZG9jdW1l'@;
put 'bnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixaKSxpVC5wdXNoKHtldmVudDoia2V5dXAiLGxpc3RlbmVyOlp9KSksRWUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLE0pLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRF'@;
put 'dmVudExpc3RlbmVyKCJibHVyIixuZSksRWU9TjcoRWUpfSx1bm1vdW50OigpPT57bGV0IEVlPWM7Zm9yKEhQLT0xO0VlOyl7aWYoMD09PUhQKXtmb3IobGV0IEJlPTA7QmU8aVQubGVuZ3RoO0JlKyspe2NvbnN0e2V2ZW50OnFlLGxpc3RlbmVyOnJ0fT1pVFtCZV07RWUuZG9jdW1lbnQuZG9j'@;
put 'dW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIocWUscnQpfWlULmxlbmd0aD0wfUVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixNKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1'@;
put 'ciIsbmUpLEVlPU43KEVlKX19LGlzUHJlc3NlZDpFZT0+clQuaXNQcmVzc2VkKEVlKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PnJULnJlbGVhc2VBbGwoKX19KGwsYSxkLGgsYmUpO3JldHVybiBFZS5tb3VudCgpLHthZGRDb250ZXh0OkJlPT57Y29uc3QgcWU9KGM9Pntjb25zdCBsPVhPKHtl'@;
put 'cnJvcklkRXhpc3RzOkQ9PmBUaGUgIiR7RH0iIHNob3J0Y3V0IGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBpbiB0aGUgIiR7Y30iIGNvbnRleHQuYH0pLGE9ZnVuY3Rpb24oKXtsZXR7a2V5czpELGNhbGxiYWNrOlosZ3JvdXA6bmUscnVuT25seUlmOmNlPSgoKT0+ITApLGNhcHR1cmVDdHJsOmJl'@;
put 'PSExLHByZXZlbnREZWZhdWx0OkVlPSEwLHN0b3BQcm9wYWdhdGlvbjpCZT0hMSxyZWxhdGl2ZVRvR3JvdXA6cWUscG9zaXRpb246cnQsZm9yd2FyZFRvQ29udGV4dDpwdH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKHljKG5l'@;
put 'KSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSB0aGUgc2hvcnRjdXQncyBncm91cC4iKTtpZighMT09PW1sKFopKXRocm93IG5ldyBFcnJvcigiVGhlIHNob3J0Y3V0J3MgY2FsbGJhY2sgbmVlZHMgdG8gYmUgYSBmdW5jdGlvbi4iKTtpZighMT09PUFycmF5LmlzQXJyYXko'@;
put 'RCkpdGhyb3cgbmV3IEVycm9yKGdsYFBhc3MgdGhlIHNob3J0Y3V0XCdzIGtleXMgYXMgYW4gYXJyYXkgb2YgYXJyYXlzLFx4MjAKICAgICAgdXNpbmcgdGhlIEtleWJvYXJkRXZlbnQua2V5IHByb3BlcnRpZXM6XHgyMAogICAgICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1V'@;
put 'Uy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkvS2V5X1ZhbHVlcy5gKTtjb25zdCBkdD17Y2FsbGJhY2s6Wixncm91cDpuZSxydW5Pbmx5SWY6Y2UsY2FwdHVyZUN0cmw6YmUscHJldmVudERlZmF1bHQ6RWUsc3RvcFByb3BhZ2F0aW9uOkJlfTtGbyhxZSkmJihkdC5yZWxhdGl2ZVRv'@;
put 'R3JvdXA9cWUsZHQucG9zaXRpb249cnQpLGZwZShwdCkmJihkdC5mb3J3YXJkVG9Db250ZXh0PXB0KSxELmZvckVhY2goSnQ9Pntjb25zdCB2bj1GUChKdCk7aWYobC5oYXNJdGVtKHZuKSl7Y29uc3QgdG49bC5nZXRJdGVtKHZuKTtsZXQgTW49dG4uZmluZEluZGV4KENyPT5Dci5ncm91cD09'@;
put 'PXFlKTstMSE9PU1uPyJiZWZvcmUiPT09cnQ/TW4tPTE6TW4rPTE6TW49dG4ubGVuZ3RoLHRuLnNwbGljZShNbiwwLGR0KX1lbHNlIGwuYWRkSXRlbSh2bixbZHRdKX0pfSxoPUQ9Pntjb25zdCBaPUZQKEQpO2wucmVtb3ZlSXRlbShaKX07cmV0dXJue19fa2luZE9mOmhwZSxhZGRTaG9ydGN1'@;
put 'dDphLGFkZFNob3J0Y3V0czpmdW5jdGlvbihEKXtsZXQgWj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307RC5mb3JFYWNoKG5lPT57WGEoWiwoY2UsYmUpPT57ITE9PT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo'@;
put 'bmUsYmUpJiYobmVbYmVdPVpbYmVdKX0pLGEobmUpfSl9LGdldFNob3J0Y3V0czpEPT57Y29uc3QgWj1GUChEKSxuZT1sLmdldEl0ZW0oWik7cmV0dXJuIEZvKG5lKT9uZS5zbGljZSgpOltdfSxoYXNTaG9ydGN1dDpEPT57Y29uc3QgWj1GUChEKTtyZXR1cm4gbC5oYXNJdGVtKFopfSxyZW1v'@;
put 'dmVTaG9ydGN1dHNCeUtleXM6aCxyZW1vdmVTaG9ydGN1dHNCeUdyb3VwOkQ9PntsLmdldEl0ZW1zKCkuZm9yRWFjaChuZT0+e2xldFtjZSxiZV09bmU7Y29uc3QgRWU9YmUuZmlsdGVyKEJlPT5CZS5ncm91cCE9PUQpOzA9PT1FZS5sZW5ndGg/aCgoYz0+Yy5zcGxpdCgiKyIpKShjZSkpOihi'@;
put 'ZS5sZW5ndGg9MCxiZS5wdXNoKC4uLkVlKSl9KX19fSkoQmUpO3JldHVybiBmLmFkZEl0ZW0oQmUscWUpLHFlfSxnZXRBY3RpdmVDb250ZXh0TmFtZTpELGdldENvbnRleHQ6WixzZXRBY3RpdmVDb250ZXh0TmFtZTpCZT0+e2lmKCFmLmhhc0l0ZW0oQmUpKXRocm93IG5ldyBFcnJvcihnbGBZ'@;
put 'b3UndmUgdHJpZWQgdG8gYWN0aXZhdGUgdGhlICIke0JlfSIgc2hvcnRjdXQgY29udGV4dFx4MjAKICAgICAgICB0aGF0IGRvZXMgbm90IGV4aXN0LiBCZWZvcmUgYWN0aXZhdGlvbiwgcmVnaXN0ZXIgdGhlIGNvbnRleHQgdXNpbmcgdGhlICJhZGRDb250ZXh0IiBtZXRob2QuYCk7dj1CZX0s'@;
put 'aXNDdHJsUHJlc3NlZDooKT0+IWNlJiYoRWUuaXNQcmVzc2VkKCJjb250cm9sIil8fEVlLmlzUHJlc3NlZCgibWV0YSIpKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PkVlLnJlbGVhc2VQcmVzc2VkS2V5cygpLGRlc3Ryb3k6KCk9PkVlLnVubW91bnQoKX19LEpudD17bmFtZToiZWRpdG9yQ2xv'@;
put 'c2VBbmRTYXZlIixjYWxsYmFjayhjKXtjLl9nZXRFZGl0b3JNYW5hZ2VyKCkuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcygpfX0scHBlPXtfaG9va3NTdG9yYWdlOk9iamVjdC5jcmVhdGUobnVsbCksYWRkSG9vayhjLGwpe3JldHVybiB0aGlzLl9ob29rc1N0b3JhZ2VbY118fCh0aGlzLl9o'@;
put 'b29rc1N0b3JhZ2VbY109W10pLHRoaXMuaG90LmFkZEhvb2soYyxsKSx0aGlzLl9ob29rc1N0b3JhZ2VbY10ucHVzaChsKSx0aGlzfSxyZW1vdmVIb29rc0J5S2V5KGMpe1luKHRoaXMuX2hvb2tzU3RvcmFnZVtjXXx8W10sbD0+e3RoaXMuaG90LnJlbW92ZUhvb2soYyxsKX0pfSxjbGVhckhv'@;
put 'b2tzKCl7WGEodGhpcy5faG9va3NTdG9yYWdlLChjLGwpPT50aGlzLnJlbW92ZUhvb2tzQnlLZXkobCkpLHRoaXMuX2hvb2tzU3RvcmFnZT17fX19O1RwKHBwZSwiTUlYSU5fTkFNRSIsImhvb2tzUmVmUmVnaXN0ZXJlciIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBlcnQ9'@;
put 'cHBlO2Z1bmN0aW9uIGQzKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB0cnQoYyl7dmFyIGw9ZnVuY3Rpb24gbnJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMs'@;
put 'bHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTty'@;
put 'ZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBzdT1PYmplY3QuZnJlZXplKHtWSVJHSU46IlNUQVRF'@;
put 'X1ZJUkdJTiIsRURJVElORzoiU1RBVEVfRURJVElORyIsV0FJVElORzoiU1RBVEVfV0FJVElORyIsRklOSVNIRUQ6IlNUQVRFX0ZJTklTSEVEIn0pO2NsYXNzIGtfe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iYmFzZSJ9Y29uc3RydWN0b3IobCl7ZDModGhpcywiaG90Iix2b2lk'@;
put 'IDApLGQzKHRoaXMsInN0YXRlIixzdS5WSVJHSU4pLGQzKHRoaXMsIl9vcGVuZWQiLCExKSxkMyh0aGlzLCJfZnVsbEVkaXRNb2RlIiwhMSksZDModGhpcywiX2Nsb3NlQ2FsbGJhY2siLG51bGwpLGQzKHRoaXMsIlREIixudWxsKSxkMyh0aGlzLCJyb3ciLG51bGwpLGQzKHRoaXMsImNvbCIs'@;
put 'bnVsbCksZDModGhpcywicHJvcCIsbnVsbCksZDModGhpcywib3JpZ2luYWxWYWx1ZSIsbnVsbCksZDModGhpcywiY2VsbFByb3BlcnRpZXMiLG51bGwpLHRoaXMuaG90PWwsdGhpcy5pbml0KCl9X2ZpcmVDYWxsYmFja3MobCl7dGhpcy5fY2xvc2VDYWxsYmFjayYmKHRoaXMuX2Nsb3NlQ2Fs'@;
put 'bGJhY2sobCksdGhpcy5fY2xvc2VDYWxsYmFjaz1udWxsKX1pbml0KCl7fWdldFZhbHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBnZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9c2V0VmFsdWUoKXt0aHJvdyBFcnJvcigiRWRpdG9yIHNldFZhbHVlKCkgbWV0aG9kIHVuaW1wbGVt'@;
put 'ZW50ZWQiKX1vcGVuKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBvcGVuKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1jbG9zZSgpe3Rocm93IEVycm9yKCJFZGl0b3IgY2xvc2UoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXByZXBhcmUobCxhLGQsaCxmLHYpe3RoaXMuVEQ9aCx0aGlzLnJvdz1s'@;
put 'LHRoaXMuY29sPWEsdGhpcy5wcm9wPWQsdGhpcy5vcmlnaW5hbFZhbHVlPWYsdGhpcy5jZWxsUHJvcGVydGllcz12LHRoaXMuc3RhdGU9dGhpcy5pc09wZW5lZCgpP3RoaXMuc3RhdGU6c3UuVklSR0lOfWV4dGVuZCgpe3JldHVybiBjbGFzcyBleHRlbmRzIHRoaXMuY29uc3RydWN0b3J7fX1z'@;
put 'YXZlVmFsdWUobCxhKXtsZXQgZCxoLGYsdjtpZihhKXtjb25zdCBEPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpO2Q9TWF0aC5tYXgoTWF0aC5taW4oRFswXSxEWzJdKSwwKSxoPU1hdGgubWF4KE1hdGgubWluKERbMV0sRFszXSksMCksZj1NYXRoLm1heChEWzBdLERbMl0pLHY9TWF0aC5t'@;
put 'YXgoRFsxXSxEWzNdKX1lbHNlW2QsaCxmLHZdPVt0aGlzLnJvdyx0aGlzLmNvbCxudWxsLG51bGxdO2NvbnN0IE09dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGQsaCwhMSwibWV0YSIpO0FycmF5LmlzQXJyYXkoTSkmJihbZCxoXT1NKSx0aGlzLmhvdC5wb3B1bGF0'@;
put 'ZUZyb21BcnJheShkLGgsbCxmLHYsImVkaXQiKX1iZWdpbkVkaXRpbmcobCxhKXtpZih0aGlzLnN0YXRlIT09c3UuVklSR0lOKXJldHVybjtjb25zdCBkPXRoaXMuaG90LGg9ZC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRoaXMucm93KSxmPWQuY29sdW1u'@;
put 'SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLmNvbCksdj0oKT0+e2lmKHRoaXMuc3RhdGU9c3UuRURJVElORyx0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSl7Y29uc3QgRD0ic3RyaW5nIj09dHlwZW9mIGw/bDpsYyh0aGlzLm9yaWdpbmFsVmFsdWUpO3RoaXMu'@;
put 'c2V0VmFsdWUoRCl9dGhpcy5vcGVuKGEpLHRoaXMuX29wZW5lZD0hMCx0aGlzLmZvY3VzKCksZC52aWV3LnJlbmRlcigpLGQucnVuSG9va3MoImFmdGVyQmVnaW5FZGl0aW5nIix0aGlzLnJvdyx0aGlzLmNvbCl9O3RoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclNjcm9sbCIsdiksZC52aWV3'@;
put 'LnNjcm9sbFZpZXdwb3J0KGQuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSl8fCh0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlclNjcm9sbCIsdiksdigpKX1maW5pc2hFZGl0aW5nKGwsYSxkKXtsZXQgaDtpZihkKXtjb25zdCBmPXRoaXMuX2Nsb3NlQ2FsbGJhY2s7dGhpcy5fY2xvc2VDYWxsYmFj'@;
put 'az12PT57ZiYmZih2KSxkKHYpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9fWlmKCF0aGlzLmlzV2FpdGluZygpKXtpZih0aGlzLnN0YXRlPT09c3UuVklSR0lOKXJldHVybiB2b2lkIHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKX0pO2lmKHRo'@;
put 'aXMuc3RhdGU9PT1zdS5FRElUSU5HKXtpZihsKXJldHVybiB0aGlzLmNhbmNlbENoYW5nZXMoKSx2b2lkIHRoaXMuaG90LnZpZXcucmVuZGVyKCk7Y29uc3QgZj10aGlzLmdldFZhbHVlKCk7aD10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1XaGl0ZXNwYWNlP1tbInN0cmluZyI9PXR5cGVvZiBm'@;
put 'P1N0cmluZy5wcm90b3R5cGUudHJpbS5jYWxsKGZ8fCIiKTpmXV06W1tmXV0sdGhpcy5zdGF0ZT1zdS5XQUlUSU5HLHRoaXMuc2F2ZVZhbHVlKGgsYSksdGhpcy5ob3QuZ2V0Q2VsbFZhbGlkYXRvcih0aGlzLmNlbGxQcm9wZXJ0aWVzKT90aGlzLmhvdC5hZGRIb29rT25jZSgicG9zdEFmdGVy'@;
put 'VmFsaWRhdGUiLHY9Pnt0aGlzLnN0YXRlPXN1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcih2KX0pOih0aGlzLnN0YXRlPXN1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcighMCkpfX19Y2FuY2VsQ2hhbmdlcygpe3RoaXMuc3RhdGU9c3UuRklOSVNIRUQsdGhpcy5kaXNjYXJkRWRp'@;
put 'dG9yKCl9ZGlzY2FyZEVkaXRvcihsKXt0aGlzLnN0YXRlPT09c3UuRklOSVNIRUQmJighMT09PWwmJiEwIT09dGhpcy5jZWxsUHJvcGVydGllcy5hbGxvd0ludmFsaWQ/KHRoaXMuaG90LnNlbGVjdENlbGwodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuZm9jdXMoKSx0aGlzLnN0YXRlPXN1LkVE'@;
put 'SVRJTkcsdGhpcy5fZmlyZUNhbGxiYWNrcyghMSkpOih0aGlzLmNsb3NlKCksdGhpcy5fb3BlbmVkPSExLHRoaXMuX2Z1bGxFZGl0TW9kZT0hMSx0aGlzLnN0YXRlPXN1LlZJUkdJTix0aGlzLl9maXJlQ2FsbGJhY2tzKCEwKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3Rp'@;
put 'dmVDb250ZXh0TmFtZSgiZ3JpZCIpKSl9ZW5hYmxlRnVsbEVkaXRNb2RlKCl7dGhpcy5fZnVsbEVkaXRNb2RlPSEwfWlzSW5GdWxsRWRpdE1vZGUoKXtyZXR1cm4gdGhpcy5fZnVsbEVkaXRNb2RlfWlzT3BlbmVkKCl7cmV0dXJuIHRoaXMuX29wZW5lZH1pc1dhaXRpbmcoKXtyZXR1cm4gdGhp'@;
put 'cy5zdGF0ZT09PXN1LldBSVRJTkd9Z2V0RWRpdGVkQ2VsbFJlY3QoKXt2YXIgbDtjb25zdCBhPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpO2lmKCFhKXJldHVybjtjb25zdHt3dE92ZXJsYXlzOmQsd3RWaWV3cG9ydDpofT10aGlzLmhvdC52aWV3Ll93dCxmPXRoaXMuaG90LnJvb3RXaW5kb3csdj1q'@;
put 'MChhKSxNPWF1KGEpLEQ9ajAodGhpcy5ob3Qucm9vdEVsZW1lbnQpLFo9YXUodGhpcy5ob3Qucm9vdEVsZW1lbnQpLG5lPWQudG9wT3ZlcmxheS5ob2xkZXIsY2U9ZC5pbmxpbmVTdGFydE92ZXJsYXkuaG9sZGVyLGJlPW5lIT09Zj9uZS5zY3JvbGxUb3A6MCxFZT1jZSE9PWY/Y2Uuc2Nyb2xs'@;
put 'TGVmdDowLEJlPWYuaW5uZXJXaWR0aC1ELmxlZnQtWix7d3RUYWJsZTpxZX09bnVsbCE9PShsPWQuZ2V0UGFyZW50T3ZlcmxheShhKSkmJnZvaWQgMCE9PWw/bDp0aGlzLmhvdC52aWV3Ll93dCxydD1xZS5uYW1lLHB0PVsibWFzdGVyIiwiaW5saW5lX3N0YXJ0Il0uaW5jbHVkZXMocnQpP2Jl'@;
put 'OjAsZHQ9WyJtYXN0ZXIiLCJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyhydCk/RWU6MDtsZXQgdm49di50b3AtRC50b3AtKHYudG9wPT09RC50b3A/MDoxKS1wdCxDbj0wO0NuPXRoaXMuaG90LmlzUnRsKCk/Zi5pbm5lcldpZHRoLXYubGVmdC1NLUJlLTErZHQ6di5sZWZ0LUQubGVmdC0xLWR0'@;
put 'LFsidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhydCkmJih2bis9ZC50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSksWyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKHJ0KSYmKENuKz1NYXRoLmFicyhkLmlubGlu'@;
put 'ZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpKTtjb25zdCB0bj10aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCksTW49dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksQ3I9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIu'@;
put 'Z2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLmNvbCksZ3I9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKS10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKTsodG4mJk1uPD0wfHxNbj09PWdyKSYm'@;
put 'KHZuKz0xKSxDcjw9MCYmKENuKz0xKTtjb25zdCBHbj1oLnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24sb2k9aC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLF9pPU1hdGguYWJzKGQuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCkp'@;
put 'LE9uPWQudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLHpyPWgwKHRoaXMuaG90LnJvb3REb2N1bWVudCk7bGV0IEpuPWEub2Zmc2V0VG9wO2lmKFsiaW5saW5lX3N0YXJ0IiwibWFzdGVyIl0uaW5jbHVkZXMocnQpJiYoSm4rPUduLU9uKSxbImJvdHRvbSIsImJvdHRvbV9pbmxpbmVf'@;
put 'c3RhcnRfY29ybmVyIl0uaW5jbHVkZXMocnQpKXtjb25zdHt3dFZpZXdwb3J0OkhyLHd0VGFibGU6S3J9PWQuYm90dG9tT3ZlcmxheS5jbG9uZTtKbis9SHIuZ2V0V29ya3NwYWNlSGVpZ2h0KCktS3IuZ2V0SGVpZ2h0KCktenJ9bGV0IERyPWEub2Zmc2V0TGVmdDt0aGlzLmhvdC5pc1J0bCgp'@;
put 'PyhEcj1Ecj49MD9xZS5nZXRXaWR0aCgpLWEub2Zmc2V0TGVmdDpNYXRoLmFicyhEciksRHIrPW9pLV9pLU0pOlsidG9wIiwibWFzdGVyIiwiYm90dG9tIl0uaW5jbHVkZXMocnQpJiYoRHIrPW9pLV9pKTtjb25zdCAkcj1mLmdldENvbXB1dGVkU3R5bGUodGhpcy5URCksd2k9dGhpcy5ob3Qu'@;
put 'aXNSdGwoKT8iYm9yZGVyUmlnaHRXaWR0aCI6ImJvcmRlckxlZnRXaWR0aCIsdG89cGFyc2VJbnQoJHJbd2ldLDEwKT4wPzA6MSxwbz1wYXJzZUludCgkci5ib3JkZXJUb3BXaWR0aCwxMCk+MD8wOjEsdnQ9YXUoYSkrdG8sTnQ9TXUoYSkrcG8sSHQ9QyQobmUpP3pyOjAsSG49UyQoY2UpP3py'@;
put 'OjAsdHI9dGhpcy5ob3Qudmlldy5tYXhpbXVtVmlzaWJsZUVsZW1lbnRXaWR0aChEciktSHQrdG87cmV0dXJue3RvcDp2bixzdGFydDpDbixoZWlnaHQ6TnQsbWF4SGVpZ2h0Ok1hdGgubWF4KHRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50SGVpZ2h0KEpuKS1Ibitwbyx0aGlz'@;
put 'LmhvdC52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKSksd2lkdGg6dnQsbWF4V2lkdGg6dHJ9fWdldEVkaXRlZENlbGxzTGF5ZXJDbGFzcygpe3N3aXRjaCh0aGlzLmNoZWNrRWRpdG9yU2VjdGlvbigpKXtjYXNlImlubGluZS1zdGFydCI6cmV0dXJuImh0X2Nsb25lX2xlZnQgaHRfY2xvbmVf'@;
put 'aW5saW5lX3N0YXJ0IjtjYXNlImJvdHRvbSI6cmV0dXJuImh0X2Nsb25lX2JvdHRvbSI7Y2FzZSJib3R0b20taW5saW5lLXN0YXJ0LWNvcm5lciI6cmV0dXJuImh0X2Nsb25lX2JvdHRvbV9sZWZ0X2Nvcm5lciBodF9jbG9uZV9ib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciI7Y2FzZSJ0b3Ai'@;
put 'OnJldHVybiJodF9jbG9uZV90b3AiO2Nhc2UidG9wLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV90b3BfbGVmdF9jb3JuZXIgaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXIiO2RlZmF1bHQ6cmV0dXJuImh0X2Nsb25lX21hc3RlciJ9fWdldEVkaXRlZENlbGwo'@;
put 'KXtyZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbCh0aGlzLnJvdyx0aGlzLmNvbCwhMCl9Y2hlY2tFZGl0b3JTZWN0aW9uKCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKTtsZXQgYT0iIjtyZXR1cm4gdGhpcy5yb3c8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3A/YT10aGlz'@;
put 'LmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0PyJ0b3AtaW5saW5lLXN0YXJ0LWNvcm5lciI6InRvcCI6dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20mJnRoaXMucm93Pj1sLXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90'@;
put 'dG9tP2E9dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8iYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOiJib3R0b20iOnRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQmJihhPSJpbmxpbmUtc3RhcnQiKSxh'@;
put 'fX1UbChrXyxlcnQpO2NvbnN0IGlydD17bmFtZToiZWRpdG9yQ2xvc2VBbmRTYXZlQnlBcnJvd0tleXMiLGNhbGxiYWNrKGMsbCxhKXtjb25zdCBkPWMuX2dldEVkaXRvck1hbmFnZXIoKSxoPWQuZ2V0QWN0aXZlRWRpdG9yKCk7aC5pc0luRnVsbEVkaXRNb2RlKCkmJmguc3RhdGU9PT1zdS5F'@;
put 'RElUSU5HfHwoZC5jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKCksYy5nZXRTZWxlY3RlZCgpJiYoYS5pbmNsdWRlcygiYXJyb3dkb3duIik/Yy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMSwwKTphLmluY2x1ZGVzKCJhcnJvd3VwIik/Yy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLTEs'@;
put 'MCk6YS5pbmNsdWRlcygiYXJyb3dsZWZ0Iik/Yy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCwtMSpjLmdldERpcmVjdGlvbkZhY3RvcigpKTphLmluY2x1ZGVzKCJhcnJvd3JpZ2h0IikmJmMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsYy5nZXREaXJlY3Rpb25GYWN0b3IoKSkpLGwu'@;
put 'cHJldmVudERlZmF1bHQoKSl9fSxvcnQ9e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIiLGNhbGxiYWNrKGMsbCl7Y29uc3QgYT1jLl9nZXRFZGl0b3JNYW5hZ2VyKCk7YS5jbG9zZUVkaXRvckFuZFNhdmVDaGFuZ2VzKGwuY3RybEtleXx8bC5tZXRhS2V5KSxhLm1vdmVTZWxlY3Rp'@;
put 'b25BZnRlckVudGVyKGwpfX0sYXJ0PXtuYW1lOiJlZGl0b3JDbG9zZVdpdGhvdXRTYXZpbmciLGNhbGxiYWNrKGMpe2NvbnN0IGw9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpO2wuY2xvc2VFZGl0b3JBbmRSZXN0b3JlT3JpZ2luYWxWYWx1ZShjLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFBy'@;
put 'ZXNzZWQoKSksbC5hY3RpdmVFZGl0b3IuZm9jdXMoKX19LHNydD17bmFtZToiZWRpdG9yRmFzdE9wZW4iLGNhbGxiYWNrKGMsbCl7Y29uc3R7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTthLmlzSGVhZGVyKCl8fGMuX2dldEVkaXRvck1hbmFnZXIoKS5vcGVuRWRpdG9y'@;
put 'KG51bGwsbCwhMCl9fSxscnQ9e25hbWU6ImVkaXRvck9wZW4iLGNhbGxiYWNrKGMsbCxhKXtjb25zdCBkPWMuX2dldEVkaXRvck1hbmFnZXIoKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7aGlnaGxpZ2h0OmZ9PWg7aWYoYy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpJiYhaC5pc0hlYWRl'@;
put 'cigpJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjApe2NvbnN0IHY9Yy5nZXRTZXR0aW5ncygpLE09ImZ1bmN0aW9uIj09dHlwZW9mIHYuZW50ZXJNb3Zlcz92LmVudGVyTW92ZXMobCk6di5lbnRlck1vdmVzO2EuaW5jbHVkZXMoInNoaWZ0Iik/Yy5z'@;
put 'ZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoLU0ucm93LC1NLmNvbCk6Yy5zZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoTS5yb3csTS5jb2wpfWVsc2UgZi5pc0hlYWRlcigpfHwoYy5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZz9kLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5P2QubW92'@;
put 'ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCk6ZC5vcGVuRWRpdG9yKG51bGwsbCwhMCk6ZC5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKSxIMihsKSl9fSx1cnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uRG93biIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdo'@;
put 'dDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYoYS5pc0NlbGwoKXx8YS5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKSYmKGwubWFya1NvdXJjZSgia2V5Ym9hcmQi'@;
put 'KSxsLnRyYW5zZm9ybUVuZCgxLDApLGwubWFya0VuZFNvdXJjZSgpKX19LGRydD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwscm93SW5kZXhNYXBwZXI6YX09Yyx7dG86ZH09Yy5nZXRTZWxlY3Rl'@;
put 'ZFJhbmdlTGFzdCgpLGg9TWF0aC5taW4oZC5yb3crYy5jb3VudFZpc2libGVSb3dzKCksYy5jb3VudFJvd3MoKS0xKSxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsLTEpO2lmKG51bGwhPT1mKXtjb25zdCB2PWMuX2NyZWF0ZUNlbGxDb29yZHMoZixkLmNvbCksTT1kLnJvdy1jLmdl'@;
put 'dEZpcnN0RnVsbHlWaXNpYmxlUm93KCksRD1NYXRoLm1pbih2LnJvdy1NLGMuY291bnRSb3dzKCktMSk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VFbmQodiksbC5tYXJrRW5kU291cmNlKCksYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6RCx2ZXJ0aWNhbFNuYXA6InRvcCIs'@;
put 'aG9yaXpvbnRhbFNuYXA6InN0YXJ0In0pfX19LGhydD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25MZWZ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTshbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYm'@;
put 'IWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKDAsLTEqYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291'@;
put 'cmNlKCkpfX0sZnJ0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTshbC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29y'@;
put 'bmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKDAsYy5nZXREaXJlY3Rpb25GYWN0b3IoKSksbC5tYXJrRW5kU291cmNlKCkpfX0scHJ0PXtuYW1lOiJl'@;
put 'eHRlbmRDZWxsc1NlbGVjdGlvblRvQ29sdW1ucyIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse2hpZ2hsaWdodDphLGZyb206ZCx0bzpofT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk/'@;
put 'bC5zZWxlY3RBbGwoITAsITApOmMuc2VsZWN0Q29sdW1ucyhkLmNvbCxoLmNvbCxhKSxsLm1hcmtFbmRTb3VyY2UoKX19LGdydD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RCb3R0b20iLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmF9PWMs'@;
put 'e2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1kLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Um93cygpLTEsLTEp'@;
put 'LEQ9aC5jbG9uZSgpO0Qucm93PWQucm93LGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoRCx2b2lkIDAsITEsZC5jbG9uZSgpKSx2JiZsLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKGwuZ2V0TGF5ZXJMZXZlbCgpKSxsLnNldFJhbmdlRW5kKGMuX2NyZWF0ZUNlbGxD'@;
put 'b29yZHMoTSxmLmNvbCkpLGwubWFya0VuZFNvdXJjZSgpfX19LG1ydD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1j'@;
put 'LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFsLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZkLmlzQ2VsbCgpKXtjb25zdCB2PWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRDb2xzKCktMSwtMSksTT1oLmNsb25lKCk7TS5jb2w9'@;
put 'ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChNLHZvaWQgMCwhMSxkLmNsb25lKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyx2KSksbC5tYXJrRW5kU291cmNlKCl9fX0sdnJ0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlv'@;
put 'blRvTW9zdElubGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhbC5pc1NlbGVj'@;
put 'dGVkQnlDb3JuZXIoKSYmZC5pc0NlbGwoKSl7Y29uc3Qgdj1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodiwxKSxEPWguY2xvbmUoKTtELmNvbD1kLmNvbCxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiks'@;
put 'bC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxicnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0TGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7'@;
put 'c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWQuaXNIZWFkZXIoKSYmbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVh'@;
put 'cmVzdE5vdEhpZGRlbkluZGV4KC4uLmMuaXNSdGwoKT9bYy5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSksRD1oLmNsb25lKCk7RC5jb2w9ZC5jb2wsbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeUNv'@;
put 'bHVtbkhlYWRlci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxNKSksbC5tYXJrRW5kU291cmNlKCl9fX0seXJ0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxl'@;
put 'Y3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpO2lmKGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0'@;
put 'Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1swLDFdOltjLmNvdW50Q29scygpLTEsLTFdKSxEPWguY2xvbmUoKTtELmNvbD1kLmNvbCxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Q29sdW1u'@;
put 'SGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LE0pKSxsLm1hcmtFbmRTb3VyY2UoKX19fSxfcnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0VG9wIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246'@;
put 'bCxyb3dJbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZsLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO2lmKGQuaXNDZWxsKCl8fHYpe2NvbnN0IE09YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5k'@;
put 'ZXgoMCwxKSxEPWguY2xvbmUoKTtELnJvdz1kLnJvdyxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVh'@;
put 'dGVDZWxsQ29vcmRzKE0sZi5jb2wpKSxsLm1hcmtFbmRTb3VyY2UoKX19fSx3cnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Sb3dzIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmEsZnJvbTpkLHRvOmh9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo'@;
put 'KTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKT9sLnNlbGVjdEFsbCghMCwhMCk6Yy5zZWxlY3RSb3dzKGQucm93LGgucm93LGEpLGwubWFya0VuZFNvdXJjZSgpfX0sQ3J0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblVwIixjYWxsYmFj'@;
put 'ayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7aGlnaGxpZ2h0OmF9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTshbC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIWwuaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihhLmlzQ2VsbCgpfHxhLmlzSGVhZGVyKCkmJmwuaXNTZWxlY3RlZEJ5Um93'@;
put 'SGVhZGVyKCkpJiYobC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtRW5kKC0xLDApLGwubWFya0VuZFNvdXJjZSgpKX19LFNydD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0lu'@;
put 'ZGV4TWFwcGVyOmF9PWMse3RvOmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPU1hdGgubWF4KGQucm93LWMuY291bnRWaXNpYmxlUm93cygpLDApLGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaCwxKTtpZihudWxsIT09Zil7Y29uc3Qgdj1jLl9jcmVhdGVDZWxsQ29vcmRzKGYs'@;
put 'ZC5jb2wpLE09ZC5yb3ctYy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLEQ9TWF0aC5tYXgodi5yb3ctTSwwKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZUVuZCh2KSxsLm1hcmtFbmRTb3VyY2UoKSxjLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpELHZlcnRpY2FsU25hcDoi'@;
put 'dG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0seHJ0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbkRvd24iLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgxLDApLGwubWFya0VuZFNvdXJjZSgpfX0s'@;
put 'RXJ0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bH09Yyx7bmF2aWdhYmxlSGVhZGVyczphfT1jLmdldFNldHRpbmdzKCksZD1hP2MuY291bnRDb2xIZWFkZXJzKCk6MCx7cm93Omh9PWMuZ2V0U2VsZWN0'@;
put 'ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGY9Yy5jb3VudFZpc2libGVSb3dzKCkrZDtmPTA9PT1mPzE6ZixoPT09Yy5jb3VudFJvd3MoKS0xP2Y9MTpoK2Y+Yy5jb3VudFJvd3MoKSYmKGY9Yy5jb3VudFJvd3MoKS1oLTEpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnRyYW5zZm9y'@;
put 'bVN0YXJ0KGYsMCksbC5tYXJrRW5kU291cmNlKCksYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3c8MCYmYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6MH0pfX0sVHJ0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbklubGluZUVuZCIsY2FsbGJhY2soYyxsKXtjb25zdHtzZWxl'@;
put 'Y3Rpb246YX09YyxkPWMuZ2V0U2V0dGluZ3MoKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxmPSJmdW5jdGlvbiI9PXR5cGVvZiBkLnRhYk1vdmVzP2QudGFiTW92ZXMobCk6ZC50YWJNb3ZlczthLm1hcmtTb3VyY2UoImtleWJvYXJkIiksYS5pc011bHRpcGxlKCkmJiFoLmlzSGVhZGVy'@;
put 'KCkmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wJiZjLmNvdW50UmVuZGVyZWRSb3dzKCk+MD9hLnRyYW5zZm9ybUZvY3VzKC1mLnJvdywtZi5jb2wpOmEudHJhbnNmb3JtU3RhcnQoLWYucm93LC1mLmNvbCksYS5tYXJrRW5kU291cmNlKCl9fSxBcnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9u'@;
put 'SW5saW5lU3RhcnQiLGNhbGxiYWNrKGMsbCl7Y29uc3R7c2VsZWN0aW9uOmF9PWMsZD1jLmdldFNldHRpbmdzKCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZj0iZnVuY3Rpb24iPT10eXBlb2YgZC50YWJNb3Zlcz9kLnRhYk1vdmVzKGwpOmQudGFiTW92ZXM7YS5tYXJrU291cmNlKCJr'@;
put 'ZXlib2FyZCIpLGEuaXNNdWx0aXBsZSgpJiYhaC5pc0hlYWRlcigpJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjA/YS50cmFuc2Zvcm1Gb2N1cyhmLnJvdyxmLmNvbCk6YS50cmFuc2Zvcm1TdGFydChmLnJvdyxmLmNvbCksYS5tYXJrRW5kU291cmNl'@;
put 'KCl9fSxrcnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uTGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoMCwtMSpjLmdldERpcmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKX19LERy'@;
put 'dD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25SaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwudHJhbnNmb3JtU3RhcnQoMCxjLmdldERpcmVjdGlvbkZhY3RvcigpKSxsLm1hcmtFbmRTb3VyY2UoKX19LElydD17bmFtZToi'@;
put 'bW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b20iLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtjb2w6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgZD1jLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjLmNvdW50Um93'@;
put 'cygpLTEsLTEpO251bGw9PT1kJiYoZD0tMSksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoZCxhKSl9fSxScnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tSW5saW5lRW5kIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBl'@;
put 'cjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PWMsaD1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLDEwKSxmPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRSb3dzKCktaC0xLC0xKSx2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRDb2xz'@;
put 'KCktMSwtMSk7bC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGYsdikpLGwubWFya0VuZFNvdXJjZSgpfX0sTHJ0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZUVuZCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0'@;
put 'aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3csYS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudENv'@;
put 'bHMoKS0xLC0xKSkpLGwubWFya0VuZFNvdXJjZSgpfX0sT3J0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLGQ9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVk'@;
put 'Q29sdW1uc1N0YXJ0LDEwKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCwxKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKSksbC5tYXJr'@;
put 'RW5kU291cmNlKCl9fSxQcnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0TGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09YyxkPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93O2xldCBoPWEuZ2V0TmVhcmVz'@;
put 'dE5vdEhpZGRlbkluZGV4KC4uLmMuaXNSdGwoKT9bYy5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSk7bnVsbD09PWgmJihoPWMuaXNSdGwoKT8tMTotYy5jb3VudFJvd0hlYWRlcnMoKSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRz'@;
put 'KGQsaCkpLGwubWFya0VuZFNvdXJjZSgpfX0sRnJ0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtyb3c6ZH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDts'@;
put 'ZXQgaD1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5jLmlzUnRsKCk/WzAsMV06W2MuY291bnRDb2xzKCktMSwtMV0pO251bGw9PT1oJiYoaD1jLmlzUnRsKCk/LWMuY291bnRSb3dIZWFkZXJzKCk6LTEpLGwubWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNldFJhbmdlU3RhcnQoYy5f'@;
put 'Y3JlYXRlQ2VsbENvb3JkcyhkLGgpKSxsLm1hcmtFbmRTb3VyY2UoKX19LEhydD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsfT1jLHtjb2w6YX09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtsZXQgZD1j'@;
put 'LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCgwLDEpO251bGw9PT1kJiYoZD0tYy5jb3VudENvbEhlYWRlcnMoKSksbC5tYXJrU291cmNlKCJrZXlib2FyZCIpLGwuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKGQsYSkpLGwubWFya0VuZFNvdXJjZSgp'@;
put 'fX0sTnJ0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFRvcElubGluZVN0YXJ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9PWMsaD1wYXJzZUludChjLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLDEw'@;
put 'KSxmPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksdj1hLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLDEpLE09ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZiwxKTtsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZXRSYW5nZVN0YXJ0KGMuX2Ny'@;
put 'ZWF0ZUNlbGxDb29yZHModixNKSksbC5tYXJrRW5kU291cmNlKCl9fSxWcnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVXAiLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydCgtMSwwKSxsLm1hcmtFbmRTb3Vy'@;
put 'Y2UoKX19LEJydD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWMse25hdmlnYWJsZUhlYWRlcnM6YX09Yy5nZXRTZXR0aW5ncygpLGQ9YT9jLmNvdW50Q29sSGVhZGVycygpOjAse3JvdzpofT1jLmdldFNl'@;
put 'bGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBmPWMuY291bnRWaXNpYmxlUm93cygpK2Q7Zj0wPT09Zj8tMTotZixoPT09LWQ/Zj0tMTpoK2Y8ZCYmKGY9LShoK2QpKSxsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC50cmFuc2Zvcm1TdGFydChmLDApLGwubWFya0VuZFNvdXJjZSgp'@;
put 'LGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93PDAmJmMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KX19LHpydD17bmFtZToiZW1wdHlTZWxlY3RlZENlbGxzIixjYWxsYmFjayhjKXtjLmVtcHR5U2VsZWN0ZWRDZWxscygpLGMuX2dldEVkaXRvck1hbmFnZXIoKS5wcmVw'@;
put 'YXJlRWRpdG9yKCl9fSxVcnQ9e25hbWU6InNjcm9sbFRvRm9jdXNlZENlbGwiLGNhbGxiYWNrKGMpe2NvbnN0e2hpZ2hsaWdodDpsfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1jLmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCktMSxkPWMuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4o'@;
put 'KS0xLGg9Yy5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCkrMSxmPWMuZ2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpKzEsdj1jLl9jcmVhdGVDZWxsQ29vcmRzKGEsZCksTT1jLl9jcmVhdGVDZWxsQ29vcmRzKGgsZik7aWYoIWMuX2NyZWF0ZUNlbGxSYW5nZSh2LHYsTSkuaW5jbHVkZXMobCkm'@;
put 'JihsLnJvdz49MHx8bC5jb2w+PTApKXtjb25zdCBaPXt9O2lmKGwuY29sPj0wKXtjb25zdCBuZT1NYXRoLmZsb29yKGMuY291bnRWaXNpYmxlQ29scygpLzIpO1ouY29sPU1hdGgubWF4KGwuY29sLW5lLDApfWlmKGwucm93Pj0wKXtjb25zdCBuZT1NYXRoLmZsb29yKGMuY291bnRWaXNpYmxl'@;
put 'Um93cygpLzIpO1oucm93PU1hdGgubWF4KGwucm93LW5lLDApfWMuc2Nyb2xsVmlld3BvcnRUbyh7Li4uWix2ZXJ0aWNhbFNuYXA6InRvcCIsaG9yaXpvbnRhbFNuYXA6InN0YXJ0In0pfX19LFpydD17bmFtZToic2VsZWN0QWxsQ2VsbHMiLGNhbGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09'@;
put 'YztsLm1hcmtTb3VyY2UoImtleWJvYXJkIiksbC5zZWxlY3RBbGwoITAsITAse2Rpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiEwfSksbC5tYXJrRW5kU291cmNlKCl9fSxXcnQ9e25hbWU6InNlbGVjdEFsbENlbGxzQW5kSGVhZGVycyIsY2FsbGJhY2soYyl7bGV0e3NlbGVjdGlvbjpsfT1jO2wu'@;
put 'bWFya1NvdXJjZSgia2V5Ym9hcmQiKSxsLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITF9KSxsLm1hcmtFbmRTb3VyY2UoKX19LFlydD17bmFtZToicG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSIsY2FsbGJhY2soYyl7Y29uc3QgbD1jLmdldFNlbGVjdGVkUmFu'@;
put 'Z2UoKSx7cm93OmEsY29sOmR9PWxbbC5sZW5ndGgtMV0uaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLGg9Yy5nZXREYXRhQXRDZWxsKGEsZCksZj1uZXcgTWFwO2ZvcihsZXQgdj0wO3Y8bC5sZW5ndGg7disrKWxbdl0uZm9yQWxsKChNLEQpPT57aWYoTT49MCYmRD49MCYmKE0hPT1hfHxEIT09ZCkp'@;
put 'e2NvbnN0e3JlYWRPbmx5Olp9PWMuZ2V0Q2VsbE1ldGEoTSxEKTtafHxmLnNldChgJHtNfXgke0R9YCxbTSxELGhdKX19KTtjLnNldERhdGFBdENlbGwoQXJyYXkuZnJvbShmLnZhbHVlcygpKSl9fSxHcnQ9Wy4uLmZ1bmN0aW9uIGNydCgpe3JldHVybltKbnQsaXJ0LG9ydCxhcnQsc3J0LGxy'@;
put 'dF19KCksLi4uZnVuY3Rpb24gTXJ0KCl7cmV0dXJuW3VydCxkcnQsaHJ0LGZydCxwcnQsZ3J0LG1ydCx2cnQsYnJ0LHlydCxfcnQsd3J0LENydCxTcnRdfSgpLC4uLmZ1bmN0aW9uIGpydCgpe3JldHVyblt4cnQsRXJ0LFRydCxBcnQsa3J0LERydCxJcnQsUnJ0LExydCxPcnQsUHJ0LEZydCxI'@;
put 'cnQsTnJ0LFZydCxCcnRdfSgpLHpydCxVcnQsWnJ0LFdydCxZcnRdO2Z1bmN0aW9uIGdwZShjKXtjb25zdCBsPXt9O3JldHVybiBHcnQuZm9yRWFjaChhPT57bGV0e25hbWU6ZCxjYWxsYmFjazpofT1hO2xbZF09ZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBB'@;
put 'cnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gaChjLC4uLnYpfX0pLGx9ZnVuY3Rpb24gJHJ0KGMpe2NvbnN0IGw9Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0KCJlZGl0b3IiKSxhPWdwZShjKSxkPXtncm91cDpabX07bC5hZGRTaG9ydGN1dHMo'@;
put 'W3trZXlzOltbIkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0Il1dLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIoaCxmKX0se2tleXM6W1siRW50ZXIiLCJDb250cm9sL01ldGEiXSxbIkVudGVyIiwiQ29udHJvbC9NZXRhIiwiU2hpZnQiXV0sY2FwdHVyZUN0cmw6'@;
put 'ITAsY2FsbGJhY2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlcihoLGYpfSx7a2V5czpbWyJUYWIiXSxbIlRhYiIsIlNoaWZ0Il0sWyJQYWdlRG93biJdLFsiUGFnZVVwIl1dLGZvcndhcmRUb0NvbnRleHQ6Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlk'@;
put 'IiksY2FsbGJhY2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlKGgsZil9LHtrZXlzOltbIkFycm93RG93biJdLFsiQXJyb3dVcCJdLFsiQXJyb3dMZWZ0Il0sWyJBcnJvd1JpZ2h0Il1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZUJ5'@;
put 'QXJyb3dLZXlzKGgsZil9LHtrZXlzOltbIkVzY2FwZSJdLFsiRXNjYXBlIiwiQ29udHJvbC9NZXRhIl1dLGNhbGxiYWNrOigpPT5hLmVkaXRvckNsb3NlV2l0aG91dFNhdmluZygpfV0sZCl9ZnVuY3Rpb24gS3J0KGMpe2NvbnN0IGw9Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0'@;
put 'KCJncmlkIiksYT1ncGUoYyksZD17cnVuT25seUlmOigpPT57Y29uc3R7bmF2aWdhYmxlSGVhZGVyczpofT1jLmdldFNldHRpbmdzKCk7cmV0dXJuIEZvKGMuZ2V0U2VsZWN0ZWQoKSkmJihofHwhaCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjAmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wKX0s'@;
put 'Z3JvdXA6bHBlfTtsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRjIiXV0sY2FsbGJhY2s6aD0+YS5lZGl0b3JGYXN0T3BlbihoKX0se2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGgsZik9PmEuZWRpdG9yT3BlbihoLGYpfSx7a2V5czpbWyJCYWNrc3BhY2Ui'@;
put 'XSxbIkRlbGV0ZSJdXSxjYWxsYmFjazooKT0+YS5lbXB0eVNlbGVjdGVkQ2VsbHMoKX1dLHtncm91cDpabSxydW5Pbmx5SWY6KCk9PkZvKGMuZ2V0U2VsZWN0ZWQoKSl9KSxsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+YS5zZWxlY3RB'@;
put 'bGxDZWxscygpLHJ1bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiEobnVsbCE9PShoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkmJnZvaWQgMCE9PWgmJmguaGlnaGxpZ2h0LmlzSGVhZGVyKCkpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+e30scnVuT25s'@;
put 'eUlmOigpPT57dmFyIGg7cmV0dXJuIG51bGw9PT0oaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodC5pc0hlYWRlcigpfSxwcmV2ZW50RGVmYXVsdDohMH0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJTcGFjZSJdXSxjYWxs'@;
put 'YmFjazooKT0+YS5zZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMoKX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PmEucG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSgpLHJ1bk9ubHlJZjooKT0+e3ZhciBoLGY7cmV0dXJuIShudWxsIT09KGg9Yy5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpKSYmdm9pZCAwIT09aCYmaC5oaWdobGlnaHQuaXNIZWFkZXIoKSkmJihudWxsPT09KGY9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5nZXRDZWxsc0NvdW50KCkpPjF9fSx7a2V5czpbWyJDb250cm9sIiwiU3BhY2UiXV0sY2Fw'@;
put 'dHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub0NvbHVtbnMoKX0se2tleXM6W1siU2hpZnQiLCJTcGFjZSJdXSxzdG9wUHJvcGFnYXRpb246ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub1Jvd3MoKX0se2tleXM6W1siQXJyb3dV'@;
put 'cCJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblVwKCl9LHtrZXlzOltbIkFycm93VXAiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0Il1d'@;
put 'LGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVXAoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0VG9wKCkscnVuT25seUlmOigpPT4hKGMu'@;
put 'c2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvbkRvd24oKX0se2tleXM6W1siQXJyb3dEb3duIiwiQ29udHJvbC9N'@;
put 'ZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tKCl9LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uRG93bigpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJT'@;
put 'aGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdEJvdHRvbSgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29s'@;
put 'dW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9z'@;
put 'dExlZnQoKX0se2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENl'@;
put 'bGxzU2VsZWN0aW9uVG9Nb3N0TGVmdCgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0'@;
put 'aW9uUmlnaHQoKX0se2tleXM6W1siQXJyb3dSaWdodCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRD'@;
put 'ZWxsc1NlbGVjdGlvblJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0KCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2Vs'@;
put 'ZWN0ZWRCeUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkhvbWUiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFp'@;
put 'blRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJIb21lIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpfSx7a2V5czpbWyJIb21lIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNh'@;
put 'bGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVD'@;
put 'ZWxsU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kKCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5k'@;
put 'KCl9LHtrZXlzOltbIkVuZCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygp'@;
put 'fSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIaWdodCgpfSx7a2V5czpbWyJQYWdlVXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpb'@;
put 'WyJQYWdlRG93biJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlBhZ2VEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpb'@;
put 'WyJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6aD0+YS5tb3ZlQ2VsbFNlbGVjdGlvbklubGluZVN0YXJ0KGgpfSx7a2V5czpbWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpoPT5hLm1vdmVDZWxsU2VsZWN0aW9uSW5saW5lRW5kKGgpfSx7a2V5'@;
put 'czpbWyJDb250cm9sL01ldGEiLCJCYWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PmEuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpfV0sZCl9ZnVuY3Rpb24gbXBlKGMpe2NvbnN0e2NsYXNzTmFtZXM6bH09RTJlKGMsL2h0LXRoZW1lLVthLXpBLVowLTlfLV0rLyk7cmV0dXJuIGwucG9wKCl9bGV0IHhY'@;
put 'PW51bGw7Y29uc3QgRVg9bmV3IE1hcDtmdW5jdGlvbiB2cGUoYyxsKXt2YXIgYSxkPXRoaXM7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxmPXRoaXM7Y29uc3Qgdj1uZXcgTjIoZik7bGV0IE0sRCxaLG5lLGNlLGJlLEVlPSEw'@;
put 'OyhmdW5jdGlvbiBiZXQoYyl7cmV0dXJuIGM9PT1FS30pKGgpJiZmdW5jdGlvbiB2ZXQoYyl7cDNlLnNldChjLCEwKX0odGhpcyksdGhpcy5yb290RWxlbWVudD1jLHRoaXMucm9vdERvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLnJvb3RXaW5kb3c9dGhpcy5yb290RG9jdW1lbnQuZGVm'@;
put 'YXVsdFZpZXcsdGhpcy5pc0Rlc3Ryb3llZD0hMSx0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9MCx0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9MDtjb25zdCBCZT1udWxsIT09KGE9bD8ubGF5b3V0RGlyZWN0aW9uKSYmdm9pZCAwIT09YT9hOiJpbmhlcml0IixxZT1bInJ0bCIs'@;
put 'Imx0ciJdLmluY2x1ZGVzKEJlKT9CZTp0aGlzLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJvb3RFbGVtZW50KS5kaXJlY3Rpb247dGhpcy5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRpciIscWUpLHRoaXMuaXNSdGw9ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PXFlfSx0'@;
put 'aGlzLmlzTHRyPWZ1bmN0aW9uKCl7cmV0dXJuIWYuaXNSdGwoKX0sdGhpcy5nZXREaXJlY3Rpb25GYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZi5pc0x0cigpPzE6LTF9LGwubGFuZ3VhZ2U9ZnVuY3Rpb24gbXR0KGMpe2xldCBsPWszZShjKTtyZXR1cm4gZFgobCl8fChsPXVYLEQzZShjKSks'@;
put 'bH0obC5sYW5ndWFnZSk7Y29uc3QgcnQ9T2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGwpLmZpbHRlcih2dD0+e2xldFtOdF09dnQ7cmV0dXJuIShNby5nZXRTaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWQoTnQpfHxNby5nZXRTaW5nbGV0b24oKS5pc0RlcHJlY2F0ZWQoTnQpKX0p'@;
put 'KSxwdD1uZXcgbnBlKGYscnQsW0NudCxrbnRdKSxkdD1wdC5nZXRUYWJsZU1ldGEoKSxKdD1wdC5nZXRHbG9iYWxNZXRhKCksdm49WE8oKTt0aGlzLmNvbnRhaW5lcj10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxjLmluc2VydEJlZm9yZSh0aGlzLmNvbnRhaW5lcixj'@;
put 'LmZpcnN0Q2hpbGQpLGxQKHRoaXMpJiYoZzJlKGwubGljZW5zZUtleSxjKSxUaShjLCJodC13cmFwcGVyIikpLHRoaXMuZ3VpZD1gaHRfJHtsJCgpfWAsRVguc2V0KHRoaXMuZ3VpZCx0aGlzKSx0aGlzLmNvbHVtbkluZGV4TWFwcGVyPW5ldyB6Syx0aGlzLnJvd0luZGV4TWFwcGVyPW5ldyB6'@;
put 'Syx0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix2dD0+e2YucnVuSG9va3MoImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHZ0KX0pLHRoaXMucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFu'@;
put 'Z2UiLHZ0PT57Zi5ydW5Ib29rcygiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsdnQpfSksdi5hZGRFdmVudExpc3RlbmVyKHRoaXMucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiY29tcG9zaXRpb25zdGFydCIsdnQ9PntmLnJ1bkhvb2tzKCJiZWZvcmVDb21wb3NpdGlvblN0YXJ0Iix2'@;
put 'dCl9KSxEPW5ldyBPZXQoZiksKCF0aGlzLnJvb3RFbGVtZW50LmlkfHwiaHRfIj09PXRoaXMucm9vdEVsZW1lbnQuaWQuc3Vic3RyaW5nKDAsMykpJiYodGhpcy5yb290RWxlbWVudC5pZD10aGlzLmd1aWQpO2xldCBHcj1uZXcgWHR0KGR0LHtyb3dJbmRleE1hcHBlcjpmLnJvd0luZGV4TWFw'@;
put 'cGVyLGNvbHVtbkluZGV4TWFwcGVyOmYuY29sdW1uSW5kZXhNYXBwZXIsY291bnRDb2xzOigpPT5mLmNvdW50Q29scygpLGNvdW50Um93czooKT0+Zi5jb3VudFJvd3MoKSxwcm9wVG9Db2w6dnQ9Pk0ucHJvcFRvQ29sKHZ0KSxpc0VkaXRvck9wZW5lZDooKT0+ISFmLmdldEFjdGl2ZUVkaXRv'@;
put 'cigpJiZmLmdldEFjdGl2ZUVkaXRvcigpLmlzT3BlbmVkKCksY291bnRSZW5kZXJhYmxlQ29sdW1uczooKT0+dGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSxjb3VudFJlbmRlcmFibGVSb3dzOigpPT50aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlUm93cygpLGNvdW50Um93SGVh'@;
put 'ZGVyczooKT0+dGhpcy5jb3VudFJvd0hlYWRlcnMoKSxjb3VudENvbEhlYWRlcnM6KCk9PnRoaXMuY291bnRDb2xIZWFkZXJzKCksY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gZC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKC4uLmFyZ3VtZW50'@;
put 'cyl9LGNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlOmZ1bmN0aW9uKCl7cmV0dXJuIGQudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSguLi5hcmd1bWVudHMpfSxnZXRTaG9ydGN1dE1hbmFnZXI6KCk9PmYuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksY3JlYXRlQ2VsbENvb3Jk'@;
put 'czoodnQsTnQpPT5mLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KSxjcmVhdGVDZWxsUmFuZ2U6KHZ0LE50LEh0KT0+Zi5fY3JlYXRlQ2VsbFJhbmdlKHZ0LE50LEh0KSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6dnQ9Pntjb25zdHtyb3c6TnQsY29sOkh0fT12dDtyZXR1cm4gZi5fY3JlYXRl'@;
put 'Q2VsbENvb3JkcyhOdD49MD9mLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTnQpOk50LEh0Pj0wP2YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChIdCk6SHQpfSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6dnQ9Pntj'@;
put 'b25zdHtyb3c6TnQsY29sOkh0fT12dDtyZXR1cm4gZi5fY3JlYXRlQ2VsbENvb3JkcyhOdD49MD9mLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTnQpOk50LEh0Pj0wP2YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChI'@;
put 'dCk6SHQpfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93Oih2dCxOdCk9Pntjb25zdCBIdD1OdD52dD8xOi0xLEhuPU1hdGgubWluKHZ0LE50KSx0cj1NYXRoLm1heCh2dCxOdCksb3I9Zi5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodnQsSHQpO3JldHVy'@;
put 'biBudWxsPT09b3J8fDE9PT1IdCYmb3I+dHJ8fC0xPT09SHQmJm9yPEhuP251bGw6b3I+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG9yKTpvcn0sZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbjoodnQsTnQpPT57Y29uc3QgSHQ9TnQ+'@;
put 'dnQ/MTotMSxIbj1NYXRoLm1pbih2dCxOdCksdHI9TWF0aC5tYXgodnQsTnQpLG9yPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHZ0LEh0KTtyZXR1cm4gbnVsbD09PW9yfHwxPT09SHQmJm9yPnRyfHwtMT09PUh0JiZvcjxIbj9udWxsOm9yPj0wP2YuY29s'@;
put 'dW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChvcik6b3J9LGlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uOih2dCxOdCk9PnZ0PDB8fE50PDA/Zi5nZXRTZXR0aW5ncygpLmRpc2FibGVWaXN1YWxTZWxlY3Rpb246Zi5nZXRDZWxsTWV0YSh2dCxOdCkuZGlzYWJsZVZp'@;
put 'c3VhbFNlbGVjdGlvbn0pO3RoaXMuc2VsZWN0aW9uPUdyO2NvbnN0IGdyPXZ0PT57bGV0e2hpZGRlbkluZGV4ZXNDaGFuZ2VkOk50fT12dDt0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCxOdCYmdGhpcy5zZWxlY3Rpb24uY29tbWl0KCl9O2Z1bmN0aW9uIG9pKHZ0LE50KXtjb25zdCBIdD0iY2xh'@;
put 'c3NOYW1lIj09PXZ0P2Yucm9vdEVsZW1lbnQ6Zi50YWJsZTtpZihFZSlUaShIdCxOdCk7ZWxzZXtsZXQgSG49W10sdHI9W107SnRbdnRdJiYoSG49QXJyYXkuaXNBcnJheShKdFt2dF0pP0p0W3Z0XTphJChKdFt2dF0pKSxOdCYmKHRyPUFycmF5LmlzQXJyYXkoTnQpP050OmEkKE50KSk7Y29u'@;
put 'c3Qgb3I9byQoSG4sdHIpLEhyPW8kKHRyLEhuKTtvci5sZW5ndGgmJmNhKEh0LG9yKSxIci5sZW5ndGgmJlRpKEh0LEhyKX1KdFt2dF09TnR9ZnVuY3Rpb24gX2koKXtsZXQgdnQ9ITE7cmV0dXJue3ZhbGlkYXRvcnNJblF1ZXVlOjAsdmFsaWQ6ITAsYWRkVmFsaWRhdG9yVG9RdWV1ZSgpe3Ro'@;
put 'aXMudmFsaWRhdG9yc0luUXVldWUrPTEsdnQ9ITF9LHJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWU9dGhpcy52YWxpZGF0b3JzSW5RdWV1ZS0xPDA/MDp0aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTEsdGhpcy5jaGVja0lmUXVldWVJc0VtcHR5KCl9LG9u'@;
put 'UXVldWVFbXB0eSgpe30sY2hlY2tJZlF1ZXVlSXNFbXB0eSgpezA9PT10aGlzLnZhbGlkYXRvcnNJblF1ZXVlJiYhMT09PXZ0JiYodnQ9ITAsdGhpcy5vblF1ZXVlRW1wdHkodGhpcy52YWxpZCkpfX19ZnVuY3Rpb24gT24odnQpe2NvbnN0IE50PXZ0LnJlcGxhY2UoIiwiLCIuIik7cmV0dXJu'@;
put 'ITE9PT1pc05hTihwYXJzZUZsb2F0KE50KSk/cGFyc2VGbG9hdChOdCk6dnR9ZnVuY3Rpb24genIodnQsTnQsSHQpe2lmKCF2dC5sZW5ndGgpcmV0dXJuIHZvaWQgSHQoKTtjb25zdCBIbj1mLmdldEFjdGl2ZUVkaXRvcigpLHRyPW5ldyBfaTtsZXQgb3I9ITA7dHIub25RdWV1ZUVtcHR5PSgp'@;
put 'PT57SG4mJm9yJiZIbi5jYW5jZWxDaGFuZ2VzKCksSHQoKX07Zm9yKGxldCBIcj12dC5sZW5ndGgtMTtIcj49MDtIci0tKXtjb25zdFtLcixhbl09dnRbSHJdLHluPU0ucHJvcFRvQ29sKGFuKTtsZXQgcG47cG49TnVtYmVyLmlzSW50ZWdlcih5bik/Zi5nZXRDZWxsTWV0YShLcix5bik6ey4u'@;
put 'Lk9iamVjdC5nZXRQcm90b3R5cGVPZihkdCksLi4uZHR9LGYuZ2V0Q2VsbFZhbGlkYXRvcihwbikmJih0ci5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksZi52YWxpZGF0ZUNlbGwodnRbSHJdWzNdLHBuLGZ1bmN0aW9uKHByLCRuKXtyZXR1cm4gZnVuY3Rpb24oZHIpe2lmKCJib29sZWFuIiE9dHlw'@;
put 'ZW9mIGRyKXRocm93IG5ldyBFcnJvcigiVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuIik7ITE9PT1kciYmITE9PT0kbi5hbGxvd0ludmFsaWQmJihvcj0hMSx2dC5zcGxpY2UocHIsMSksJG4udmFsaWQ9ITApLHRyLnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfX0o'@;
put 'SHIscG4pLE50KSl9dHIuY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfWZ1bmN0aW9uIEpuKHZ0LE50KXtmb3IobGV0IEhuPXZ0Lmxlbmd0aC0xO0huPj0wO0huLS0pe2xldCB0cj0hMTtpZihudWxsIT09dnRbSG5dKXtpZihudWxsIT12dFtIbl1bMl18fG51bGwhPXZ0W0huXVszXSl7aWYoZHQuYWxs'@;
put 'b3dJbnNlcnRSb3cpZm9yKDt2dFtIbl1bMF0+Zi5jb3VudFJvd3MoKS0xOyl7Y29uc3R7ZGVsdGE6b3J9PU0uY3JlYXRlUm93KHZvaWQgMCx2b2lkIDAse3NvdXJjZToiYXV0byJ9KTtpZigwPT09b3Ipe3RyPSEwO2JyZWFrfX1pZigiYXJyYXkiPT09Zi5kYXRhVHlwZSYmKCFkdC5jb2x1bW5z'@;
put 'fHwwPT09ZHQuY29sdW1ucy5sZW5ndGgpJiZkdC5hbGxvd0luc2VydENvbHVtbilmb3IoO00ucHJvcFRvQ29sKHZ0W0huXVsxXSk+Zi5jb3VudENvbHMoKS0xOyl7Y29uc3R7ZGVsdGE6b3J9PU0uY3JlYXRlQ29sKHZvaWQgMCx2b2lkIDAse3NvdXJjZToiYXV0byJ9KTtpZigwPT09b3Ipe3Ry'@;
put 'PSEwO2JyZWFrfX10cnx8TS5zZXQodnRbSG5dWzBdLHZ0W0huXVsxXSx2dFtIbl1bM10pfX1lbHNlIHZ0LnNwbGljZShIbiwxKX1pZih2dC5sZW5ndGg+MCl7Wi5hZGp1c3RSb3dzQW5kQ29scygpLGYucnVuSG9va3MoImJlZm9yZUNoYW5nZVJlbmRlciIsdnQsTnQpLG5lLmNsb3NlRWRpdG9y'@;
put 'KCksZi5yZW5kZXIoKSxuZS5wcmVwYXJlRWRpdG9yKCksZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGYucnVuSG9va3MoImFmdGVyQ2hhbmdlIix2dCxOdHx8ImVkaXQiKTtjb25zdCBIbj1mLmdldEFjdGl2ZUVkaXRvcigpO0huJiZGbyhIbi5yZWZyZXNoVmFsdWUpJiZIbi5yZWZyZXNo'@;
put 'VmFsdWUoKX1lbHNlIGYucmVuZGVyKCl9ZnVuY3Rpb24gRHIodnQsTnQsSHQpe3JldHVybiBBcnJheS5pc0FycmF5KHZ0KT92dDpbW3Z0LE50LEh0XV19ZnVuY3Rpb24gJHIodnQsTnQpe2NvbnN0IEh0PWYucnVuSG9va3MoImJlZm9yZUNoYW5nZSIsdnQsTnR8fCJlZGl0IiksSG49dnQuZmls'@;
put 'dGVyKG9yPT5udWxsIT09b3IpO3ZhciB0cjtpZighMT09PUh0fHwwPT09SG4ubGVuZ3RoKXJldHVybiBudWxsPT09KHRyPWYuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT10cnx8dHIuY2FuY2VsQ2hhbmdlcygpLFtdO2ZvcihsZXQgb3I9SG4ubGVuZ3RoLTE7b3I+PTA7b3ItLSl7Y29u'@;
put 'c3RbSHIsS3IsLGFuXT1Ibltvcl0seW49TS5wcm9wVG9Db2woS3IpO2xldCBwbjtwbj1OdW1iZXIuaXNJbnRlZ2VyKHluKT9mLmdldENlbGxNZXRhKEhyLHluKTp7Li4uT2JqZWN0LmdldFByb3RvdHlwZU9mKGR0KSwuLi5kdH07Y29uc3R7dHlwZTpwcixjaGVja2VkVGVtcGxhdGU6JG4sdW5j'@;
put 'aGVja2VkVGVtcGxhdGU6ZHJ9PXBuO2lmKCJudW1lcmljIj09PXByJiYic3RyaW5nIj09dHlwZW9mIGFuJiZkZmUoYW4pJiYoSG5bb3JdWzNdPU9uKGFuKSksImNoZWNrYm94Ij09PXByKXtjb25zdCBVcj1sYyhhbiksWm49VXI9PT1sYygkbiksc3I9VXI9PT1sYyhkcik7KFpufHxzcikmJihI'@;
put 'bltvcl1bM109Wm4/JG46ZHIpfX1yZXR1cm4gSG59dGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsZ3IpLHRoaXMucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLGdyKSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2so'@;
put 'ImFmdGVyU2V0UmFuZ2VFbmQiLCh2dCxOdCk9Pntjb25zdCBIdD1GZCghMSksSG49dGhpcy5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpLHtmcm9tOnRyLHRvOm9yfT1Ibi5jdXJyZW50KCksSHI9SG4uc2l6ZSgpLTE7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb24iLHRyLnJvdyx0'@;
put 'ci5jb2wsb3Iucm93LG9yLmNvbCxIdCxIciksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLHRyLnJvdyxmLmNvbFRvUHJvcCh0ci5jb2wpLG9yLnJvdyxmLmNvbFRvUHJvcChvci5jb2wpLEh0LEhyKSxOdCYmKCFIdC5pc1RvdWNoZWQoKXx8SHQuaXNUb3VjaGVkKCkmJiFI'@;
put 'dC52YWx1ZSkmJmJlLnNjcm9sbFRvKHZ0KTtjb25zdCBLcj1Hci5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxhbj1Hci5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtLciYmYW4/VGkodGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1'@;
put 'bW5zIl0pOktyPyhjYSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIiksVGkodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpKTphbj8oY2EodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tcm93cyIpLFRpKHRoaXMucm9vdEVsZW1l'@;
put 'bnQsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiKSk6Y2EodGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJvd3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLCJzaGlmdCIhPT1Hci5nZXRTZWxlY3Rpb25Tb3VyY2UoKSYmbmUuY2xvc2VFZGl0b3IobnVsbCksZi52aWV3LnJl'@;
put 'bmRlcigpLG5lLnByZXBhcmVFZGl0b3IoKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0Rm9jdXMiLHZ0PT57dGhpcy5ydW5Ib29rcygiYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQiLHZ0LnJvdyx2dC5jb2wpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJh'@;
put 'ZnRlclNldEZvY3VzIix2dD0+e2NvbnN0IE50PUZkKCExKTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0Iix2dC5yb3csdnQuY29sLE50KSwoIU50LmlzVG91Y2hlZCgpfHxOdC5pc1RvdWNoZWQoKSYmIU50LnZhbHVlKSYmYmUuc2Nyb2xsVG8odnQpLG5lLmNsb3NlRWRp'@;
put 'dG9yKCksZi52aWV3LnJlbmRlcigpLG5lLnByZXBhcmVFZGl0b3IoKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3Rpb25GaW5pc2hlZCIsdnQ9Pntjb25zdCBOdD12dC5sZW5ndGgtMSx7ZnJvbTpIdCx0bzpIbn09dnRbTnRdO3RoaXMucnVuSG9va3MoImFmdGVy'@;
put 'U2VsZWN0aW9uRW5kIixIdC5yb3csSHQuY29sLEhuLnJvdyxIbi5jb2wsTnQpLHRoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIixIdC5yb3csZi5jb2xUb1Byb3AoSHQuY29sKSxIbi5yb3csZi5jb2xUb1Byb3AoSG4uY29sKSxOdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRM'@;
put 'b2NhbEhvb2soImFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbiIsdnQ9Pntjb25zdCBOdD10aGlzLnJ1bkhvb2tzKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHZ0LnZhbHVlKTt2dC52YWx1ZSYmKHZ0LnZhbHVlPU50KX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJEZXNl'@;
put 'bGVjdCIsKCk9PntuZS5jbG9zZUVkaXRvcigpLGYudmlldy5yZW5kZXIoKSxjYSh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSksdGhpcy5ydW5Ib29rcygiYWZ0ZXJEZXNlbGVjdCIpfSksdGhpcy5zZWxlY3Rpb24uYWRk'@;
put 'TG9jYWxIb29rKCJiZWZvcmVIaWdobGlnaHRTZXQiLCgpPT50aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiKSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJy'@;
put 'YXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlRW5kIixmdW5jdGlvbigpe2Zvcih2YXIg'@;
put 'dnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24o'@;
put 'KXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNlbGVjdENvbHVtbnMiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3RDb2x1bW5z'@;
put 'IixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0ZXJTZWxlY3RDb2x1bW5zIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNl'@;
put 'bGVjdFJvd3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3RSb3dzIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFm'@;
put 'dGVyU2VsZWN0Um93cyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyU2VsZWN0Um93cyIsLi4uTnQpfSkuYWRkTG9jYWxIb29r'@;
put 'KCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybVN0YXJ0Iiwu'@;
put 'Li5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksSHQ9MDtIdDx2dDtIdCsrKU50W0h0XT1hcmd1bWVudHNbSHRdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRl'@;
put 'ck1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUZvY3VzIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0'@;
put 'XTtyZXR1cm4gZC5ydW5Ib29rcygibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0Kysp'@;
put 'TnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJy'@;
put 'YXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygibW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxl'@;
put 'bmd0aCxOdD1uZXcgQXJyYXkodnQpLEh0PTA7SHQ8dnQ7SHQrKylOdFtIdF09YXJndW1lbnRzW0h0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlUm93V3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFy'@;
put 'Z3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVJvd1dyYXAiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlQ29sdW1uV3JhcCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxIdD0wO0h0PHZ0O0h0KyspTnRbSHRdPWFyZ3VtZW50c1tIdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiaW5zZXJ0Um93UmVxdWlyZSIsdnQ9PnRoaXMuYWx0ZXIo'@;
put 'Imluc2VydF9yb3dfYWJvdmUiLHZ0LDEsImF1dG8iKSkuYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIix2dD0+dGhpcy5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdnQsMSwiYXV0byIpKSxaPXthbHRlcih2dCxOdCl7bGV0IEh0PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxLEhuPWFyZ3VtZW50cy5sZW5ndGg+Mz9hcmd1bWVudHNbM106dm9pZCAwLHRyPWFyZ3VtZW50cy5sZW5ndGg+ND9hcmd1bWVudHNbNF06dm9pZCAwO2NvbnN0IG9yPUhyPT57aWYoMD09PUhyLmxlbmd0aClyZXR1cm5bXTtjb25zdCBLcj1bLi4u'@;
put 'SHJdO3JldHVybiBLci5zb3J0KCh5bixwbik9PntsZXRbcHJdPXluLFskbl09cG47cmV0dXJuIHByPT09JG4/MDpwcj4kbj8xOi0xfSksS3UoS3IsKHluLHBuKT0+e2xldFtwciwkbl09cG47Y29uc3QgZHI9eW5beW4ubGVuZ3RoLTFdLFtVcixabl09ZHIsc3I9VXIrWm47aWYocHI8PXNyKXtj'@;
put 'b25zdCBOcj1NYXRoLm1heCgkbi0oc3ItcHIpLDApO2RyWzFdKz1Ocn1lbHNlIHluLnB1c2goW3ByLCRuXSk7cmV0dXJuIHlufSxbS3JbMF1dKX07c3dpdGNoKHZ0KXtjYXNlImluc2VydF9yb3dfYmVsb3ciOmNhc2UiaW5zZXJ0X3Jvd19hYm92ZSI6Y29uc3QgSHI9Zi5jb3VudFNvdXJjZVJv'@;
put 'd3MoKTtpZihkdC5tYXhSb3dzPT09SHIpcmV0dXJuO2NvbnN0IEtyPSJpbnNlcnRfcm93X2JlbG93Ij09PXZ0PyJiZWxvdyI6ImFib3ZlIjtOdD1OdD8/KCJiZWxvdyI9PT1Lcj9IcjowKTtjb25zdHtkZWx0YTphbixzdGFydFBoeXNpY2FsSW5kZXg6eW59PU0uY3JlYXRlUm93KE50LEh0LHtz'@;
put 'b3VyY2U6SG4sbW9kZTpLcn0pO0dyLnNoaWZ0Um93cyhmLnRvVmlzdWFsUm93KHluKSxhbik7YnJlYWs7Y2FzZSJpbnNlcnRfY29sX3N0YXJ0IjpjYXNlImluc2VydF9jb2xfZW5kIjpjb25zdCBwbj0iaW5zZXJ0X2NvbF9lbmQiPT09dnQ/ImVuZCI6InN0YXJ0IjtOdD1OdD8/KCJlbmQiPT09'@;
put 'cG4/Zi5jb3VudFNvdXJjZUNvbHMoKTowKTtjb25zdHtkZWx0YTpwcixzdGFydFBoeXNpY2FsSW5kZXg6JG59PU0uY3JlYXRlQ29sKE50LEh0LHtzb3VyY2U6SG4sbW9kZTpwbn0pO2lmKHByKXtpZihBcnJheS5pc0FycmF5KGR0LmNvbEhlYWRlcnMpKXtjb25zdCBabj1bZi50b1Zpc3VhbENv'@;
put 'bHVtbigkbiksMF07Wm4ubGVuZ3RoKz1wcixBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGR0LmNvbEhlYWRlcnMsWm4pfUdyLnNoaWZ0Q29sdW1ucyhmLnRvVmlzdWFsQ29sdW1uKCRuKSxwcil9YnJlYWs7Y2FzZSJyZW1vdmVfcm93Ijpjb25zdCBkcj1abj0+e2xldCBzcj0wO1luKFpu'@;
put 'LE5yPT57bGV0W01yLFpyXT1Ocjtjb25zdCBhbz16YyhNcik/Zi5jb3VudFJvd3MoKS0xOk1hdGgubWF4KE1yLXNyLDApO2lmKE51bWJlci5pc0ludGVnZXIoTXIpJiYoTXI9TWF0aC5tYXgoTXItc3IsMCkpLCFNLnJlbW92ZVJvdyhNcixacixIbikpcmV0dXJuO2lmKEdyLmlzU2VsZWN0ZWQo'@;
put 'KSl7Y29uc3R7cm93Ok1hfT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O01hPj1NciYmTWE8PU1yK1pyLTEmJm5lLmNsb3NlRWRpdG9yKCEwKX1jb25zdCBJYT1mLmNvdW50Um93cygpLFphPWR0LmZpeGVkUm93c1RvcDtaYT49YW8rMSYmKGR0LmZpeGVkUm93c1RvcC09TWF0'@;
put 'aC5taW4oWnIsWmEtYW8pKTtjb25zdCBwcz1kdC5maXhlZFJvd3NCb3R0b207cHMmJmFvPj1JYS1wcyYmKGR0LmZpeGVkUm93c0JvdHRvbS09TWF0aC5taW4oWnIscHMpKSwwPT09SWE/R3IuZGVzZWxlY3QoKToiQ29udGV4dE1lbnUucmVtb3ZlUm93Ij09PUhuP0dyLnJlZnJlc2goKTpHci5z'@;
put 'aGlmdFJvd3MoTXIsLVpyKSxzcis9WnJ9KX07QXJyYXkuaXNBcnJheShOdCk/ZHIob3IoTnQpKTpkcihbW050LEh0XV0pO2JyZWFrO2Nhc2UicmVtb3ZlX2NvbCI6Y29uc3QgVXI9Wm49PntsZXQgc3I9MDtZbihabixOcj0+e2xldFtNcixacl09TnI7Y29uc3QgYW89emMoTXIpP2YuY291bnRD'@;
put 'b2xzKCktMTpNYXRoLm1heChNci1zciwwKTtsZXQgam89Zi50b1BoeXNpY2FsQ29sdW1uKGFvKTtpZihOdW1iZXIuaXNJbnRlZ2VyKE1yKSYmKE1yPU1hdGgubWF4KE1yLXNyLDApKSwhTS5yZW1vdmVDb2woTXIsWnIsSG4pKXJldHVybjtpZihHci5pc1NlbGVjdGVkKCkpe2NvbnN0e2NvbDpN'@;
put 'YX09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtNYT49TXImJk1hPD1Ncitaci0xJiZuZS5jbG9zZUVkaXRvcighMCl9MD09PWYuY291bnRDb2xzKCk/R3IuZGVzZWxlY3QoKToiQ29udGV4dE1lbnUucmVtb3ZlQ29sdW1uIj09PUhuP0dyLnJlZnJlc2goKTpHci5zaGlmdENv'@;
put 'bHVtbnMoTXIsLVpyKTtjb25zdCBwcz1kdC5maXhlZENvbHVtbnNTdGFydDtwcz49YW8rMSYmKGR0LmZpeGVkQ29sdW1uc1N0YXJ0LT1NYXRoLm1pbihacixwcy1hbykpLEFycmF5LmlzQXJyYXkoZHQuY29sSGVhZGVycykmJih0eXBlb2Ygam8+InUiJiYoam89LTEpLGR0LmNvbEhlYWRlcnMu'@;
put 'c3BsaWNlKGpvLFpyKSksc3IrPVpyfSl9O0FycmF5LmlzQXJyYXkoTnQpP1VyKG9yKE50KSk6VXIoW1tOdCxIdF1dKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gc3VjaCBhY3Rpb24gIiR7dnR9ImApfXRyfHxaLmFkanVzdFJvd3NBbmRDb2xzKCksZi52aWV3'@;
put 'LnJlbmRlcigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sYWRqdXN0Um93c0FuZENvbHMoKXtjb25zdCB2dD1kdC5taW5Sb3dzLE50PWR0Lm1pblNwYXJlUm93cyxIdD1kdC5taW5Db2xzLEhuPWR0Lm1pblNwYXJlQ29scztpZih2dCl7Y29uc3QgdHI9Zi5jb3VudFJvd3MoKTt0cjx2'@;
put 'dCYmTS5jcmVhdGVSb3codHIsdnQtdHIse3NvdXJjZToiYXV0byJ9KX1pZihOdCl7Y29uc3QgdHI9Zi5jb3VudEVtcHR5Um93cyghMCk7aWYodHI8TnQpe2NvbnN0IEhyPU1hdGgubWluKE50LXRyLGR0Lm1heFJvd3MtZi5jb3VudFNvdXJjZVJvd3MoKSk7TS5jcmVhdGVSb3coZi5jb3VudFJv'@;
put 'd3MoKSxIcix7c291cmNlOiJhdXRvIn0pfX17bGV0IHRyOyhIdHx8SG4pJiYodHI9Zi5jb3VudEVtcHR5Q29scyghMCkpO2xldCBvcj1mLmNvdW50Q29scygpO2lmKEh0JiYhZHQuY29sdW1ucyYmb3I8SHQpe2NvbnN0IEhyPUh0LW9yO3RyKz1IcixNLmNyZWF0ZUNvbChvcixIcix7c291cmNl'@;
put 'OiJhdXRvIn0pfWlmKEhuJiYhZHQuY29sdW1ucyYmImFycmF5Ij09PWYuZGF0YVR5cGUmJnRyPEhuKXtvcj1mLmNvdW50Q29scygpO2NvbnN0IEtyPU1hdGgubWluKEhuLXRyLGR0Lm1heENvbHMtb3IpO00uY3JlYXRlQ29sKG9yLEtyLHtzb3VyY2U6ImF1dG8ifSl9fX0scG9wdWxhdGVGcm9t'@;
put 'QXJyYXkodnQsTnQsSHQsSG4sdHIpe2xldCBvcixIcixLcixhbjtjb25zdCB5bj1bXSxwbj17fSxwcj1bXSwkbj12dC5yb3csZHI9dnQuY29sO2lmKEhyPU50Lmxlbmd0aCwwPT09SHIpcmV0dXJuITE7bGV0IFVyPTAsWm49MDtzd2l0Y2gocWEoSHQpJiYoVXI9SHQuY29sLWRyKzEsWm49SHQu'@;
put 'cm93LSRuKzEpLHRyKXtjYXNlInNoaWZ0X2Rvd24iOmNvbnN0IHNyPWRFKE50KSxOcj1zci5sZW5ndGgsTXI9TWF0aC5tYXgoTnIsVXIpLFpyPWYuZ2V0RGF0YSgpLnNsaWNlKCRuKSxhbz1kRShacikuc2xpY2UoZHIsZHIrTXIpO2ZvcihLcj0wO0tyPE1yO0tyKz0xKWlmKEtyPE5yKXtmb3Io'@;
put 'b3I9MCxIcj1zcltLcl0ubGVuZ3RoO29yPFpuLUhyO29yKz0xKXNyW0tyXS5wdXNoKHNyW0tyXVtvciVIcl0pO3ByLnB1c2goc3JbS3JdLmNvbmNhdChLcjxhby5sZW5ndGg/YW9bS3JdOm5ldyBBcnJheShaci5sZW5ndGgpLmZpbGwobnVsbCkpKX1lbHNlIHByLnB1c2goc3JbS3IlTnJdLmNv'@;
put 'bmNhdChhb1tLcl0pKTtmLnBvcHVsYXRlRnJvbUFycmF5KCRuLGRyLGRFKHByKSk7YnJlYWs7Y2FzZSJzaGlmdF9yaWdodCI6Y29uc3Qgam89TnQubGVuZ3RoLElhPU1hdGgubWF4KGpvLFpuKSxaYT1mLmdldERhdGEoKS5zbGljZSgkbikubWFwKHpzPT56cy5zbGljZShkcikpO2Zvcihvcj0w'@;
put 'O29yPElhO29yKz0xKWlmKG9yPGpvKXtmb3IoS3I9MCxhbj1OdFtvcl0ubGVuZ3RoO0tyPFVyLWFuO0tyKz0xKU50W29yXS5wdXNoKE50W29yXVtLciVhbl0pO2lmKG9yPFphLmxlbmd0aClmb3IobGV0IHpzPTA7enM8WmFbb3JdLmxlbmd0aDt6cys9MSlOdFtvcl0ucHVzaChaYVtvcl1benNd'@;
put 'KTtlbHNlIE50W29yXS5wdXNoKC4uLm5ldyBBcnJheShaYVswXS5sZW5ndGgpLmZpbGwobnVsbCkpfWVsc2UgTnQucHVzaChOdFtvciVIcl0uc2xpY2UoMCxJYSkuY29uY2F0KFphW29yXSkpO2YucG9wdWxhdGVGcm9tQXJyYXkoJG4sZHIsTnQpO2JyZWFrO2RlZmF1bHQ6cG4ucm93PXZ0LnJv'@;
put 'dyxwbi5jb2w9dnQuY29sO2xldCBuYyxwcz0wLE1hPTAsaHM9ITA7Y29uc3QgUWE9ZnVuY3Rpb24oWGMpe2xldCBLcz1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtjb25zdCBWbD1OdFtYYyVOdC5sZW5ndGhdO3JldHVybiBudWxs'@;
put 'IT09S3M/VmxbS3MlVmwubGVuZ3RoXTpWbH0sTTM9TnQubGVuZ3RoLGFkPUh0P0h0LnJvdy12dC5yb3crMTowO2ZvcihIcj1IdD9hZDpNYXRoLm1heChNMyxhZCksb3I9MDtvcjxIciYmIShIdCYmcG4ucm93Pkh0LnJvdyYmYWQ+TTN8fCFkdC5hbGxvd0luc2VydFJvdyYmcG4ucm93PmYuY291'@;
put 'bnRSb3dzKCktMXx8cG4ucm93Pj1kdC5tYXhSb3dzKTtvcisrKXtjb25zdCB6cz1vci1wcyxYYz1RYSh6cykubGVuZ3RoLEtzPUh0P0h0LmNvbC12dC5jb2wrMTowO2lmKGFuPUh0P0tzOk1hdGgubWF4KFhjLEtzKSxwbi5jb2w9dnQuY29sLG5jPWYuZ2V0Q2VsbE1ldGEocG4ucm93LHBuLmNv'@;
put 'bCksIkNvcHlQYXN0ZS5wYXN0ZSIhPT1IbiYmIkF1dG9maWxsLmZpbGwiIT09SG58fCFuYy5za2lwUm93T25QYXN0ZSl7Zm9yKE1hPTAsS3I9MDtLcjxhbiYmIShIdCYmcG4uY29sPkh0LmNvbCYmS3M+WGN8fCFkdC5hbGxvd0luc2VydENvbHVtbiYmcG4uY29sPmYuY291bnRDb2xzKCktMXx8'@;
put 'cG4uY29sPj1kdC5tYXhDb2xzKTtLcisrKXtpZihuYz1mLmdldENlbGxNZXRhKHBuLnJvdyxwbi5jb2wpLCgiQ29weVBhc3RlLnBhc3RlIj09PUhufHwiQXV0b2ZpbGwuZmlsbCI9PT1IbikmJm5jLnNraXBDb2x1bW5PblBhc3RlKXtNYSs9MSxwbi5jb2wrPTEsYW4rPTE7Y29udGludWV9aWYo'@;
put 'bmMucmVhZE9ubHkmJiJVbmRvUmVkby51bmRvIiE9PUhuKXtwbi5jb2wrPTE7Y29udGludWV9bGV0IGVzPVFhKHpzLEtyLU1hKSxFMT1mLmdldERhdGFBdENlbGwocG4ucm93LHBuLmNvbCk7aWYobnVsbCE9PWVzJiYib2JqZWN0Ij09dHlwZW9mIGVzKWlmKEFycmF5LmlzQXJyYXkoZXMpJiZu'@;
put 'dWxsPT09RTEmJihFMT1bXSksbnVsbD09PUUxfHwib2JqZWN0IiE9dHlwZW9mIEUxKWhzPSExO2Vsc2V7Y29uc3QgeDM9c18oQXJyYXkuaXNBcnJheShFMSk/RTE6RTFbMF18fEUxKSxKZz1zXyhBcnJheS5pc0FycmF5KGVzKT9lczplc1swXXx8ZXMpO0hPKHgzLEpnKXx8QXJyYXkuaXNBcnJh'@;
put 'eSh4MykmJkFycmF5LmlzQXJyYXkoSmcpP2VzPWcxKGVzKTpocz0hMX1lbHNlIG51bGwhPT1FMSYmIm9iamVjdCI9PXR5cGVvZiBFMSYmKGhzPSExKTtocyYmeW4ucHVzaChbcG4ucm93LHBuLmNvbCxlc10pLGhzPSEwLHBuLmNvbCs9MX1wbi5yb3crPTF9ZWxzZSBwcys9MSxwbi5yb3crPTEs'@;
put 'SHIrPTF9Zi5zZXREYXRhQXRDZWxsKHluLG51bGwsbnVsbCxIbnx8InBvcHVsYXRlRnJvbUFycmF5Iil9fX0sdGhpcy5pbml0PWZ1bmN0aW9uKCl7RC5zZXREYXRhKGR0LmRhdGEpLGYucnVuSG9va3MoImJlZm9yZUluaXQiKSwoQXAoKXx8SSQoKSkmJlRpKGYucm9vdEVsZW1lbnQsIm1vYmls'@;
put 'ZSIpLHRoaXMudXBkYXRlU2V0dGluZ3MobCwhMCksdGhpcy52aWV3PW5ldyBFZXQodGhpcyk7Y29uc3QgdnQ9ZHQudGhlbWVOYW1lfHxtcGUoZi5yb290RWxlbWVudCk7Zi51c2VUaGVtZSh2dCksZi52aWV3LmFkZENsYXNzTmFtZVRvTGljZW5zZUVsZW1lbnQoZi5nZXRDdXJyZW50VGhlbWVO'@;
put 'YW1lKCkpLG5lPUdxZS5nZXRJbnN0YW5jZShmLGR0LEdyKSxiZT1mdW5jdGlvbiB6bnQoYyl7Y29uc3R7c2VsZWN0aW9uOmx9PWM7bGV0IGE9ITEsZD0hMTtyZXR1cm57cmVzdW1lKCl7ZD0hMX0sc3VzcGVuZCgpe2Q9ITB9LHNraXBOZXh0U2Nyb2xsQ3ljbGUoKXthPSEwfSxzY3JvbGxUbyho'@;
put 'KXt2YXIgZjtpZihhfHxkKXJldHVybiB2b2lkKGE9ITEpO2xldCB2O2wuaXNGb2N1c1NlbGVjdGlvbkNoYW5nZWQoKT92PWZ1bmN0aW9uIEhudChjKXtyZXR1cm4gbD0+e2Muc2Nyb2xsVmlld3BvcnRUbyhsLnRvT2JqZWN0KCksKCk9Pntjb25zdHtyb3c6YSxjb2w6ZH09Yy5nZXRTZWxlY3Rl'@;
put 'ZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtBXyhjLmdldENlbGwoYSxkLCEwKSl9KX19KGMpOmwuaXNTZWxlY3RlZEJ5Q29ybmVyKCk/dj0oKT0+e306bC5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKT92PWZ1bmN0aW9uIEJudChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9UFAoYykuZ2V0Q29tcHV0ZWRS'@;
put 'b3dUYXJnZXQobCk7Yy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6YX0sKCk9Pntjb25zdCBkPSEhYy5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnM7QV8oYy5nZXRDZWxsKGEsZD8tMTowLCEwKSl9KX19KGMpOmwuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk/dj1mdW5jdGlvbiBQbnQoYyl7cmV0'@;
put 'dXJuIGw9Pntjb25zdCBhPVBQKGMpLmdldENvbXB1dGVkQ29sdW1uVGFyZ2V0KGwpO2Muc2Nyb2xsVmlld3BvcnRUbyh7Y29sOmF9LCgpPT57Y29uc3QgZD0hIWMuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzO0FfKGMuZ2V0Q2VsbChkPy0xOjAsYSwhMCkpfSl9fShjKToxPT09bC5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlKCkuc2l6ZSgpJiZsLmlzTXVsdGlwbGUoKT92PWZ1bmN0aW9uIE5udChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9UFAoYyksZD17cm93OmEuZ2V0Q29tcHV0ZWRSb3dUYXJnZXQobCksY29sOmEuZ2V0Q29tcHV0ZWRDb2x1bW5UYXJnZXQobCl9O2Muc2Nyb2xsVmlld3BvcnRUbyhk'@;
put 'LCgpPT57Y29uc3R7cm93OmgsY29sOmZ9PWQ7QV8oYy5nZXRDZWxsKGgsZiwhMCkpfSl9fShjKToxIT09bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpfHxsLmlzTXVsdGlwbGUoKT9sLmdldFNlbGVjdGVkUmFuZ2UoKS5zaXplKCk+MSYmKHY9ZnVuY3Rpb24gVm50KGMpe3JldHVybiBsPT57'@;
put 'Y29uc3QgYT1QUChjKSxkPXtyb3c6YS5nZXRDb21wdXRlZFJvd1RhcmdldChsKSxjb2w6YS5nZXRDb21wdXRlZENvbHVtblRhcmdldChsKX07Yy5zY3JvbGxWaWV3cG9ydFRvKGQsKCk9Pntjb25zdHtyb3c6aCxjb2w6Zn09ZDtBXyhjLmdldENlbGwoaCxmLCEwKSl9KX19KGMpKTp2PWZ1bmN0'@;
put 'aW9uIGpudChjKXtyZXR1cm4gbD0+e2NvbnN0IGE9Yy5zZWxlY3Rpb24uZ2V0U2VsZWN0aW9uU291cmNlKCkse3JvdzpkLGNvbDpofT1sLGY9KCk9PntBXyhjLmdldENlbGwoZCxoLCEwKSl9O2lmKGQ8MCYmaD49MCljLnNjcm9sbFZpZXdwb3J0VG8oe2NvbDpofSxmKTtlbHNlIGlmKGg8MCYm'@;
put 'ZD49MCljLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpkfSxmKTtlbHNle2lmKCJtb3VzZSI9PT1hJiYoaD09PWMudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpfHxkPT09Yy52aWV3LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpKXJldHVybjtjLnNjcm9sbFZpZXdwb3J0'@;
put 'VG8oe3JvdzpkLGNvbDpofSxmKX19fShjKSxudWxsPT09KGY9dil8fHZvaWQgMD09PWZ8fGYoaCl9fX0oZiksY2U9bmV3IEtxZShmKSxsUCh0aGlzKSYmZnVuY3Rpb24gWm50KGMpe2NvbnN0IGw9ZnVuY3Rpb24gV250KGMpe3JldHVybiBsPT57aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1D'@;
put 'WChjKSxkPVNYKGMpO3JldHVybiBsLmNvbDxhLmNvbCYmKGwuY29sPWEuY29sKSxsLmNvbD5kLmNvbCYmKGwuY29sPWQuY29sKSxsLnJvdzxhLnJvdyYmKGwucm93PWEucm93KSxsLnJvdz5kLnJvdyYmKGwucm93PWQucm93KSxsfX0oYyk7bGV0IGE7Y29uc3R7YWN0aXZhdGU6ZCxkZWFjdGl2'@;
put 'YXRlOmh9PWZ1bmN0aW9uIFVudChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3QgYT1jLnJvb3RFbGVtZW50LGQ9Y3BlKGMpLGg9Y3BlKGMpO3JldHVybiBkLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+'@;
put 'bD8ub25Gb2N1c0Zyb21Ub3AoKSksaC5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsKCk9Pmw/Lm9uRm9jdXNGcm9tQm90dG9tKCkpLGEuZmlyc3RDaGlsZC5iZWZvcmUoZCksYS5sYXN0Q2hpbGQuYWZ0ZXIoaCkse2FjdGl2YXRlKCl7Yy5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57ZC50YWJJbmRl'@;
put 'eD0wLGgudGFiSW5kZXg9MH0sMTApfSxkZWFjdGl2YXRlKCl7Yy5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57ZC50YWJJbmRleD0tMSxoLnRhYkluZGV4PS0xfSwxMCl9fX0oYyx7b25Gb2N1c0Zyb21Ub3AoKXt2YXIgY2U7Y29uc3QgYmU9bnVsbCE9PShjZT1sKGEpKSYmdm9pZCAwIT09Y2U/Y2U6'@;
put 'Q1goYyk7YmUmJihjLnJ1bkhvb2tzKCJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsImZyb21fYWJvdmUiLGJlKSxjLnNlbGVjdENlbGwoYmUucm93LGJlLmNvbCkpLGMubGlzdGVuKCl9LG9uRm9jdXNGcm9tQm90dG9tKCl7dmFyIGNlO2NvbnN0IGJlPW51bGwhPT0oY2U9bChhKSkmJnZv'@;
put 'aWQgMCE9PWNlP2NlOlNYKGMpO2JlJiYoYy5ydW5Ib29rcygibW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb24iLCJmcm9tX2JlbG93IixiZSksYy5zZWxlY3RDZWxsKGJlLnJvdyxiZS5jb2wpKSxjLmxpc3RlbigpfX0pLGY9e3dyYXBwZWQ6ITEsZmxpcHBlZDohMX07bGV0IHY9ITAsTT0hMSxE'@;
put 'PSExO2MuYWRkSG9vaygiYWZ0ZXJMaXN0ZW4iLCgpPT5oKCkpLGMuYWRkSG9vaygiYWZ0ZXJVbmxpc3RlbiIsKCk9PmQoKSksYy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKGNlLGJlLEVlLEJlLHFlKT0+e3ZhciBydDtNJiYoZi53cmFwcGVkJiZmLmZsaXBwZWR8fEQpJiYoRD0hMSxxZS52'@;
put 'YWx1ZT0hMCksdiYmKGE9bnVsbD09PShydD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1ydD92b2lkIDA6cnQuaGlnaGxpZ2h0KX0pLGMuYWRkSG9vaygiYmVmb3JlUm93V3JhcCIsKGNlLGJlLEVlKT0+e2Yud3JhcHBlZD0hMCxmLmZsaXBwZWQ9RWV9KTtjb25zdCBuZT17'@;
put 'a2V5czpbWyJUYWIiXSxbIlNoaWZ0IiwiVGFiIl1dLHByZXZlbnREZWZhdWx0OiExLHN0b3BQcm9wYWdhdGlvbjohMSxyZWxhdGl2ZVRvR3JvdXA6bHBlLGdyb3VwOiJmb2N1c0NhdGNoZXIifTtjLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMo'@;
put 'W3suLi5uZSxjYWxsYmFjazooKT0+e2NvbnN0e3RhYk5hdmlnYXRpb246Y2V9PWMuZ2V0U2V0dGluZ3MoKTtNPSEwLGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSYmIWNlJiYodj0hMSksY2V8fChEPSEwKX0scG9zaXRpb246ImJlZm9yZSJ9LHsuLi5uZSxjYWxsYmFjazpjZT0+e2NvbnN0e3Rh'@;
put 'Yk5hdmlnYXRpb246YmUsYXV0b1dyYXBSb3c6RWV9PWMuZ2V0U2V0dGluZ3MoKTtpZihNPSExLHY9ITAsIWJlfHwhYy5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpfHxFZSYmZi53cmFwcGVkJiZmLmZsaXBwZWR8fCFFZSYmZi53cmFwcGVkKXJldHVybiBFZSYmZi53cmFwcGVkJiZmLmZsaXBwZWQm'@;
put 'JihhPWNlLnNoaWZ0S2V5P0NYKGMpOlNYKGMpKSxmdW5jdGlvbiBaKCl7Zi53cmFwcGVkPSExLGYuZmxpcHBlZD0hMSxjLmRlc2VsZWN0Q2VsbCgpLGMudW5saXN0ZW4oKX0oKSwhMTtjZS5wcmV2ZW50RGVmYXVsdCgpfSxwb3NpdGlvbjoiYWZ0ZXIifV0pfShmKSxmLnJ1bkhvb2tzKCJpbml0'@;
put 'IiksdGhpcy5yZW5kZXIoKSxFZSYmbnVsbD09PWYucm9vdEVsZW1lbnQub2Zmc2V0UGFyZW50JiZQMmUoZi5yb290RWxlbWVudCwoKT0+e2Yudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCksZi5yZW5kZXIoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9'@;
put 'KSwib2JqZWN0Ij09dHlwZW9mIEVlJiYoZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLEVlWzBdLEVlWzFdKSxFZT0hMSksZi5ydW5Ib29rcygiYWZ0ZXJJbml0Iil9LHRoaXMuX2NyZWF0ZUNlbGxDb29yZHM9ZnVuY3Rpb24odnQsTnQpe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxDb29y'@;
put 'ZHModnQsTnQpfSx0aGlzLl9jcmVhdGVDZWxsUmFuZ2U9ZnVuY3Rpb24odnQsTnQsSHQpe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxSYW5nZSh2dCxOdCxIdCl9LHRoaXMudmFsaWRhdGVDZWxsPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtsZXQgdHI9Zi5nZXRDZWxsVmFsaWRhdG9yKE50'@;
put 'KTtmdW5jdGlvbiBvcihIcil7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJiFhcmd1bWVudHNbMV18fCEwPT09TnQuaGlkZGVuKXJldHVybiB2b2lkIEh0KEhyKTtjb25zdCBhbj1OdC52aXN1YWxDb2wseW49TnQudmlzdWFsUm93LHBuPWYuZ2V0Q2VsbCh5'@;
put 'bixhbiwhMCk7aWYocG4mJiJUSCIhPT1wbi5ub2RlTmFtZSl7Y29uc3QgcHI9Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHluKSwkbj1mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYW4pO2Yudmlldy5fd3QuZ2V0'@;
put 'U2V0dGluZygiY2VsbFJlbmRlcmVyIixwciwkbixwbil9SHQoSHIpfXUyZSh0cikmJih0cj1mdW5jdGlvbihIcil7cmV0dXJuIGZ1bmN0aW9uKEtyLGFuKXthbihIci50ZXN0KEtyKSl9fSh0cikpLG1sKHRyKT8odnQ9Zi5ydW5Ib29rcygiYmVmb3JlVmFsaWRhdGUiLHZ0LE50LnZpc3VhbFJv'@;
put 'dyxOdC5wcm9wLEhuKSxmLl9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e3RyLmNhbGwoTnQsdnQsSHI9PntmJiYoSHI9Zi5ydW5Ib29rcygiYWZ0ZXJWYWxpZGF0ZSIsSHIsdnQsTnQudmlzdWFsUm93LE50LnByb3AsSG4pLE50LnZhbGlkPUhyLG9yKEhyKSxmLnJ1bkhvb2tzKCJwb3N0QWZ0ZXJW'@;
put 'YWxpZGF0ZSIsSHIsdnQsTnQudmlzdWFsUm93LE50LnByb3AsSG4pKX0pfSkpOmYuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57TnQudmFsaWQ9ITAsb3IoTnQudmFsaWQsITEpfSl9LHRoaXMuc2V0RGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxOdCxIdCxIbil7Y29uc3QgdHI9RHIodnQsTnQsSHQp'@;
put 'LG9yPVtdO2xldCBLcixhbix5bixIcj1Ibjtmb3IoS3I9MCxhbj10ci5sZW5ndGg7S3I8YW47S3IrKyl7aWYoIm9iamVjdCIhPXR5cGVvZiB0cltLcl0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IG51bWJlciBvciBjaGFuZ2VzIGFycmF5IG9m'@;
put 'IGFycmF5cyBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyIik7aWYoIm51bWJlciIhPXR5cGVvZiB0cltLcl1bMV0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IGFuZCBjb2x1bW4gbnVtYmVyIGFzIGl0cyBwYXJhbWV0ZXJzLiBJZiB5b3Ugd2FudCB0'@;
put 'byB1c2Ugb2JqZWN0IHByb3BlcnR5IG5hbWUsIHVzZSBtZXRob2QgYHNldERhdGFBdFJvd1Byb3BgIik7eW49dHJbS3JdWzFdPj10aGlzLmNvdW50Q29scygpP3RyW0tyXVsxXTpNLmNvbFRvUHJvcCh0cltLcl1bMV0pLG9yLnB1c2goW3RyW0tyXVswXSx5bixELmdldEF0Q2VsbCh0aGlzLnRv'@;
put 'UGh5c2ljYWxSb3codHJbS3JdWzBdKSx0cltLcl1bMV0pLHRyW0tyXVsyXV0pfSFIciYmIm9iamVjdCI9PXR5cGVvZiB2dCYmKEhyPU50KTtjb25zdCBwbj0kcihvcixIcik7Zi5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRDZWxsIixwbixIciksenIocG4sSHIsKCk9PntKbihwbixIcil9KX0s'@;
put 'dGhpcy5zZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtjb25zdCB0cj1Ecih2dCxOdCxIdCksb3I9W107bGV0IEtyLGFuLEhyPUhuO2ZvcihLcj0wLGFuPXRyLmxlbmd0aDtLcjxhbjtLcisrKW9yLnB1c2goW3RyW0tyXVswXSx0cltLcl1bMV0sRC5nZXRBdENlbGwodGhp'@;
put 'cy50b1BoeXNpY2FsUm93KHRyW0tyXVswXSksdHJbS3JdWzFdKSx0cltLcl1bMl1dKTshSHImJiJvYmplY3QiPT10eXBlb2YgdnQmJihIcj1OdCk7Y29uc3QgeW49JHIob3IsSG4pO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Um93UHJvcCIseW4sSHIpLHpyKHluLEhyLCgpPT57Sm4oeW4s'@;
put 'SHIpfSl9LHRoaXMubGlzdGVuPWZ1bmN0aW9uKCl7ZiYmIWYuaXNMaXN0ZW5pbmcoKSYmKEVYLmZvckVhY2godnQ9PntmIT09dnQmJnZ0LnVubGlzdGVuKCl9KSx4WD1mLmd1aWQsZi5ydW5Ib29rcygiYWZ0ZXJMaXN0ZW4iKSl9LHRoaXMudW5saXN0ZW49ZnVuY3Rpb24oKXt0aGlzLmlzTGlz'@;
put 'dGVuaW5nKCkmJih4WD1udWxsLGYucnVuSG9va3MoImFmdGVyVW5saXN0ZW4iKSl9LHRoaXMuaXNMaXN0ZW5pbmc9ZnVuY3Rpb24oKXtyZXR1cm4geFg9PT1mLmd1aWR9LHRoaXMuZGVzdHJveUVkaXRvcj1mdW5jdGlvbigpe2xldCBOdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO25lLmNsb3NlRWRpdG9yKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pLGYudmlldy5yZW5kZXIoKSxOdCYmR3IuaXNTZWxlY3RlZCgpJiZuZS5wcmVwYXJlRWRpdG9yKCl9LHRoaXMucG9w'@;
put 'dWxhdGVGcm9tQXJyYXk9ZnVuY3Rpb24odnQsTnQsSHQsSG4sdHIsb3IsSHIpe2lmKCJvYmplY3QiIT10eXBlb2YgSHR8fCJvYmplY3QiIT10eXBlb2YgSHRbMF0pdGhyb3cgbmV3IEVycm9yKCJwb3B1bGF0ZUZyb21BcnJheSBwYXJhbWV0ZXIgYGlucHV0YCBtdXN0IGJlIGFuIGFycmF5IG9m'@;
put 'IGFycmF5cyIpO2NvbnN0IEtyPSJudW1iZXIiPT10eXBlb2YgSG4/Zi5fY3JlYXRlQ2VsbENvb3JkcyhIbix0cik6bnVsbDtyZXR1cm4gWi5wb3B1bGF0ZUZyb21BcnJheShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KSxIdCxLcixvcixIcil9LHRoaXMuc3BsaWNlQ29sPWZ1bmN0aW9uKHZ0'@;
put 'LE50LEh0KXtmb3IodmFyIEhuPWFyZ3VtZW50cy5sZW5ndGgsdHI9bmV3IEFycmF5KEhuPjM/SG4tMzowKSxvcj0zO29yPEhuO29yKyspdHJbb3ItM109YXJndW1lbnRzW29yXTtyZXR1cm4gTS5zcGxpY2VDb2wodnQsTnQsSHQsLi4udHIpfSx0aGlzLnNwbGljZVJvdz1mdW5jdGlvbih2dCxO'@;
put 'dCxIdCl7Zm9yKHZhciBIbj1hcmd1bWVudHMubGVuZ3RoLHRyPW5ldyBBcnJheShIbj4zP0huLTM6MCksb3I9MztvcjxIbjtvcisrKXRyW29yLTNdPWFyZ3VtZW50c1tvcl07cmV0dXJuIE0uc3BsaWNlUm93KHZ0LE50LEh0LC4uLnRyKX0sdGhpcy5nZXRTZWxlY3RlZD1mdW5jdGlvbigpe2lm'@;
put 'KEdyLmlzU2VsZWN0ZWQoKSlyZXR1cm4geXMoR3IuZ2V0U2VsZWN0ZWRSYW5nZSgpLHZ0PT57bGV0e2Zyb206TnQsdG86SHR9PXZ0O3JldHVybltOdC5yb3csTnQuY29sLEh0LnJvdyxIdC5jb2xdfSl9LHRoaXMuZ2V0U2VsZWN0ZWRMYXN0PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRT'@;
put 'ZWxlY3RlZCgpO2xldCBOdDtyZXR1cm4gdnQmJnZ0Lmxlbmd0aD4wJiYoTnQ9dnRbdnQubGVuZ3RoLTFdKSxOdH0sdGhpcy5nZXRTZWxlY3RlZFJhbmdlPWZ1bmN0aW9uKCl7aWYoR3IuaXNTZWxlY3RlZCgpKXJldHVybiBBcnJheS5mcm9tKEdyLmdldFNlbGVjdGVkUmFuZ2UoKSl9LHRoaXMu'@;
put 'Z2V0U2VsZWN0ZWRSYW5nZUxhc3Q9ZnVuY3Rpb24oKXtjb25zdCB2dD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgTnQ7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKE50PXZ0W3Z0Lmxlbmd0aC0xXSksTnR9LHRoaXMuZW1wdHlTZWxlY3RlZENlbGxzPWZ1bmN0aW9uKHZ0KXtpZighR3Iu'@;
put 'aXNTZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IE50PVtdO1luKEdyLmdldFNlbGVjdGVkUmFuZ2UoKSxIdD0+e2lmKEh0LmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuO2NvbnN0IEhuPUh0LmdldFRvcFN0YXJ0Q29ybmVy'@;
put 'KCksdHI9SHQuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7JG8oSG4ucm93LHRyLnJvdyxvcj0+eyRvKEhuLmNvbCx0ci5jb2wsSHI9Pnt0aGlzLmdldENlbGxNZXRhKG9yLEhyKS5yZWFkT25seXx8TnQucHVzaChbb3IsSHIsbnVsbF0pfSl9KX0pLE50Lmxlbmd0aD4wJiZ0aGlzLnNldERhdGFBdENl'@;
put 'bGwoTnQsdnQpfSx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj4wfSx0aGlzLnN1c3BlbmRSZW5kZXI9ZnVuY3Rpb24oKXt0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXIrPTF9LHRoaXMucmVzdW1lUmVuZGVyPWZ1'@;
put 'bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KHZ0LDApLCF0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCkmJnZ0PT09dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyJiZmLnZpZXcucmVuZGVy'@;
put 'KCl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy52aWV3JiYodGhpcy5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5pc1JlbmRlclN1c3BlbmRlZCgpfHxmLnZpZXcucmVuZGVyKCkpfSx0aGlzLmJhdGNoUmVuZGVyPWZ1bmN0aW9uKHZ0KXt0aGlzLnN1c3BlbmRSZW5kZXIoKTtjb25zdCBO'@;
put 'dD12dCgpO3JldHVybiB0aGlzLnJlc3VtZVJlbmRlcigpLE50fSx0aGlzLmlzRXhlY3V0aW9uU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcj4wfSx0aGlzLnN1c3BlbmRFeGVjdXRpb249ZnVuY3Rpb24oKXt0aGlzLmV4ZWN1dGlvblN1'@;
put 'c3BlbmRlZENvdW50ZXIrPTEsdGhpcy5jb2x1bW5JbmRleE1hcHBlci5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMucm93SW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJhdGlvbnMoKX0sdGhpcy5yZXN1bWVFeGVjdXRpb249ZnVuY3Rpb24oKXtsZXQgdnQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBOdD10aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXItMTt0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9TWF0aC5tYXgoTnQsMCksKCF0aGlzLmlzRXhlY3V0aW9uU3VzcGVuZGVkKCkmJk50PT09dGhpcy5leGVj'@;
put 'dXRpb25TdXNwZW5kZWRDb3VudGVyfHx2dCkmJih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnJvd0luZGV4TWFwcGVyLnJlc3VtZU9wZXJhdGlvbnMoKSl9LHRoaXMuYmF0Y2hFeGVjdXRpb249ZnVuY3Rpb24odnQpe2xldCBOdD1hcmd1bWVudHMubGVu'@;
put 'Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3RoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2NvbnN0IEh0PXZ0KCk7cmV0dXJuIHRoaXMucmVzdW1lRXhlY3V0aW9uKE50KSxIdH0sdGhpcy5iYXRjaD1mdW5jdGlvbih2dCl7dGhpcy5zdXNwZW5kUmVuZGVyKCksdGhp'@;
put 'cy5zdXNwZW5kRXhlY3V0aW9uKCk7Y29uc3QgTnQ9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVFeGVjdXRpb24oKSx0aGlzLnJlc3VtZVJlbmRlcigpLE50fSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zPWZ1bmN0aW9uKCl7aWYoIWYudmlldylyZXR1cm47Y29uc3QgdnQ9Zi52aWV3LHt3aWR0aDpO'@;
put 'dCxoZWlnaHQ6SHR9PXZ0LmdldExhc3RTaXplKCkse3dpZHRoOkhuLGhlaWdodDp0cn09Zi5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvcj1IbiE9PU50fHx0ciE9PUh0OyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDpOdCxoZWln'@;
put 'aHQ6SHR9LHt3aWR0aDpIbixoZWlnaHQ6dHJ9LG9yKSYmKChvcnx8dnQuX3d0Lnd0T3ZlcmxheXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1mLnJvb3RXaW5kb3cpJiYodnQuc2V0TGFzdFNpemUoSG4sdHIpLGYucmVuZGVyKCksdnQuYWRqdXN0RWxlbWVudHNTaXplKCkpLGYucnVuSG9va3MoImFm'@;
put 'dGVyUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDpOdCxoZWlnaHQ6SHR9LHt3aWR0aDpIbixoZWlnaHQ6dHJ9LG9yKSl9LHRoaXMudXBkYXRlRGF0YT1mdW5jdGlvbih2dCxOdCl7c3BlKHZ0LEh0PT57TT1IdH0sSHQ9PntNPUh0LGYuY29sdW1uSW5kZXhNYXBwZXIuZml0VG9MZW5ndGgodGhp'@;
put 'cy5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksZi5yb3dJbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93cygpKSxaLmFkanVzdFJvd3NBbmRDb2xzKCksR3IucmVmcmVzaCgpfSx7aG90SW5zdGFuY2U6ZixkYXRhTWFwOk0sZGF0YVNvdXJjZTpELGludGVybmFsU291'@;
put 'cmNlOiJ1cGRhdGVEYXRhIixzb3VyY2U6TnQsbWV0YU1hbmFnZXI6cHQsZmlyc3RSdW46RWV9KX0sdGhpcy5sb2FkRGF0YT1mdW5jdGlvbih2dCxOdCl7c3BlKHZ0LEh0PT57TT1IdH0sKCk9PntwdC5jbGVhckNlbGxzQ2FjaGUoKSxmLmluaXRJbmRleE1hcHBlcnMoKSxaLmFkanVzdFJvd3NB'@;
put 'bmRDb2xzKCksR3IucmVmcmVzaCgpLEVlJiYoRWU9W251bGwsImxvYWREYXRhIl0pfSx7aG90SW5zdGFuY2U6ZixkYXRhTWFwOk0sZGF0YVNvdXJjZTpELGludGVybmFsU291cmNlOiJsb2FkRGF0YSIsc291cmNlOk50LG1ldGFNYW5hZ2VyOnB0LGZpcnN0UnVuOkVlfSl9LHRoaXMuZ2V0SW5p'@;
put 'dGlhbENvbHVtbkNvdW50PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9ZHQuY29sdW1ucztsZXQgTnQ9MDtpZihBcnJheS5pc0FycmF5KHZ0KSlOdD12dC5sZW5ndGg7ZWxzZSBpZihtbCh2dCkpaWYoImFycmF5Ij09PWYuZGF0YVR5cGUpe2NvbnN0IEh0PXRoaXMuY291bnRTb3VyY2VDb2xzKCk7Zm9y'@;
put 'KGxldCBIbj0wO0huPEh0O0huKz0xKXZ0KEhuKSYmKE50Kz0xKX1lbHNlKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8ImZ1bmN0aW9uIj09PWYuZGF0YVR5cGUpJiYoTnQ9TS5jb2xUb1Byb3BDYWNoZS5sZW5ndGgpO2Vsc2UgaWYoRm8oZHQuZGF0YVNjaGVtYSkpe2NvbnN0IEh0PU0uZ2V0U2No'@;
put 'ZW1hKCk7TnQ9QXJyYXkuaXNBcnJheShIdCk/SHQubGVuZ3RoOlZPKEh0KX1lbHNlIE50PXRoaXMuY291bnRTb3VyY2VDb2xzKCk7cmV0dXJuIE50fSx0aGlzLmluaXRJbmRleE1hcHBlcnM9ZnVuY3Rpb24oKXt0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmdldElu'@;
put 'aXRpYWxDb2x1bW5Db3VudCgpKSx0aGlzLnJvd0luZGV4TWFwcGVyLmluaXRUb0xlbmd0aCh0aGlzLmNvdW50U291cmNlUm93cygpKX0sdGhpcy5nZXREYXRhPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtyZXR1cm4geWModnQpP00uZ2V0QWxsKCk6TS5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29v'@;
put 'cmRzKHZ0LE50KSxmLl9jcmVhdGVDZWxsQ29vcmRzKEh0LEhuKSxNLkRFU1RJTkFUSU9OX1JFTkRFUkVSKX0sdGhpcy5nZXRDb3B5YWJsZVRleHQ9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe3JldHVybiBNLmdldENvcHlhYmxlVGV4dChmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KSxmLl9jcmVh'@;
put 'dGVDZWxsQ29vcmRzKEh0LEhuKSl9LHRoaXMuZ2V0Q29weWFibGVEYXRhPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gTS5nZXRDb3B5YWJsZSh2dCxNLmNvbFRvUHJvcChOdCkpfSx0aGlzLmdldFNjaGVtYT1mdW5jdGlvbigpe3JldHVybiBNLmdldFNjaGVtYSgpfSx0aGlzLnVwZGF0ZVNldHRp'@;
put 'bmdzPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBIdD0oRWU/Zi5sb2FkRGF0YTpmLnVwZGF0ZURhdGEpLmJpbmQodGhpcyk7bGV0IHRyLG9yLEhuPSExO2lmKEZvKHZ0LnJvd3MpKXRocm93'@;
put 'IG5ldyBFcnJvcignVGhlICJyb3dzIiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0Um93cywgbWluUm93cyBvciBtYXhSb3dzPycpO2lmKEZvKHZ0LmNvbHMpKXRocm93IG5ldyBFcnJvcignVGhlICJjb2xzIiBzZXR0aW5nIGlzIG5vIGxvbmdlciBz'@;
put 'dXBwb3J0ZWQuIERvIHlvdSBtZWFuIHN0YXJ0Q29scywgbWluQ29scyBvciBtYXhDb2xzPycpO2lmKEZvKHZ0LmdhbnR0Q2hhcnQpKXRocm93IG5ldyBFcnJvcignU2luY2UgOC4wLjAgdGhlICJnYW50dENoYXJ0IiBzZXR0aW5nIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuJyk7Zm9yKHRyIGlu'@;
put 'IHZ0Lmxhbmd1YWdlJiZmdW5jdGlvbiBHbih2dCl7Y29uc3QgTnQ9azNlKHZ0KTtkWChOdCk/KGYucnVuSG9va3MoImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixOdCksSnQubGFuZ3VhZ2U9TnQsZi5ydW5Ib29rcygiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsTnQpKTpEM2UodnQpfSh2dC5sYW5ndWFn'@;
put 'ZSksdnQpaWYoImRhdGEiIT09dHImJiJsYW5ndWFnZSIhPT10cilpZigiY2xhc3NOYW1lIj09PXRyKW9pKCJjbGFzc05hbWUiLHZ0LmNsYXNzTmFtZSk7ZWxzZSBpZigidGFibGVDbGFzc05hbWUiPT09dHImJmYudGFibGUpb2koInRhYmxlQ2xhc3NOYW1lIix2dC50YWJsZUNsYXNzTmFtZSks'@;
put 'Zi52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNPdmVybGF5VGFibGVDbGFzc05hbWVzKCk7ZWxzZSBpZihNby5nZXRTaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWQodHIpfHxNby5nZXRTaW5nbGV0b24oKS5pc0RlcHJlY2F0ZWQodHIpKXtjb25zdCBwbj12dFt0cl07bWwocG4pPyhNby5nZXRTaW5n'@;
put 'bGV0b24oKS5hZGRBc0ZpeGVkKHRyLHBuLGYpLGR0W3RyXT1wbik6QXJyYXkuaXNBcnJheShwbikmJihNby5nZXRTaW5nbGV0b24oKS5hZGQodHIscG4sZiksZHRbdHJdPXBuKX1lbHNlIU50JiZFdSh2dCx0cikmJihKdFt0cl09dnRbdHJdKTt2b2lkIDA9PT12dC5kYXRhJiZ2b2lkIDA9PT1k'@;
put 'dC5kYXRhP0h0KG51bGwsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09dnQuZGF0YT9IdCh2dC5kYXRhLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmNvbHVtbnMmJihNLmNyZWF0ZU1hcCgpLGYuaW5pdEluZGV4TWFwcGVycygpKTtjb25zdCBIcj1mLmNvdW50Q29scygpLEtyPWR0'@;
put 'LmNvbHVtbnM7aWYoS3ImJm1sKEtyKSYmKEhuPSEwKSwodm9pZCAwIT09dnQuY2VsbHx8dm9pZCAwIT09dnQuY2VsbHN8fHZvaWQgMCE9PXZ0LmNvbHVtbnMpJiZwdC5jbGVhckNhY2hlKCksSHI+MClmb3IodHI9MCxvcj0wO3RyPEhyO3RyKyspe2lmKEtyKXtjb25zdCBwbj1Ibj9Lcih0cik6'@;
put 'S3Jbb3JdO3BuJiZwdC51cGRhdGVDb2x1bW5NZXRhKG9yLHBuKX1vcis9MX1Gbyh2dC5jZWxsKSYmWGEodnQuY2VsbCxwbj0+e2Yuc2V0Q2VsbE1ldGFPYmplY3QocG4ucm93LHBuLmNvbCxwbil9KSxmLnJ1bkhvb2tzKCJhZnRlckNlbGxNZXRhUmVzZXQiKTtsZXQgYW49Zi5yb290RWxlbWVu'@;
put 'dC5zdHlsZS5oZWlnaHQ7IiIhPT1hbiYmKGFuPXBhcnNlSW50KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKSk7bGV0IHluPXZ0LmhlaWdodDtpZihtbCh5bikmJih5bj15bigpKSxOdCYmZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikmJmYucm9vdEVsZW1lbnQuc2V0'@;
put 'QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIsZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLG51bGw9PT15bil7Y29uc3QgcG49Zi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRhdGEtaW5pdGlhbHN0eWxlIik7cG4mJihwbi5pbmRleE9mKCJoZWlnaHQiKT4tMXx8'@;
put 'cG4uaW5kZXhPZigib3ZlcmZsb3ciKT4tMSk/Zi5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIixwbik6KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PSIiLGYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9IiIpfWVsc2Ugdm9pZCAwIT09eW4mJihmLnJvb3RFbGVtZW50LnN0'@;
put 'eWxlLmhlaWdodD1pc05hTih5bik/YCR7eW59YDpgJHt5bn1weGAsZi5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7aWYodHlwZW9mIHZ0LndpZHRoPCJ1Iil7bGV0IHBuPXZ0LndpZHRoO21sKHBuKSYmKHBuPXBuKCkpLGYucm9vdEVsZW1lbnQuc3R5bGUud2lkdGg9aXNO'@;
put 'YU4ocG4pP2Ake3BufWA6YCR7cG59cHhgfWlmKCFOdCl7aWYoZi52aWV3KXtmLnZpZXcuX3d0Lnd0Vmlld3BvcnQucmVzZXRIYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkKCksZi52aWV3Ll93dC5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpO2NvbnN0IHBuPWYuZ2V0Q3VycmVu'@;
put 'dFRoZW1lTmFtZSgpLHByPUV1KHZ0LCJ0aGVtZU5hbWUiKTtwbiYmcHImJnBuIT09dnQudGhlbWVOYW1lJiYoZi52aWV3LmdldFN0eWxlc0hhbmRsZXIoKS5yZW1vdmVDbGFzc05hbWVzKCksZi52aWV3LnJlbW92ZUNsYXNzTmFtZUZyb21MaWNlbnNlRWxlbWVudChwbikpO2NvbnN0ICRuPXBy'@;
put 'JiZ2dC50aGVtZU5hbWV8fG1wZShmLnJvb3RFbGVtZW50KTtmLnVzZVRoZW1lKCRuKSxmLnZpZXcuYWRkQ2xhc3NOYW1lVG9MaWNlbnNlRWxlbWVudChmLmdldEN1cnJlbnRUaGVtZU5hbWUoKSl9Zi5ydW5Ib29rcygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsdnQpfVouYWRqdXN0Um93c0FuZENv'@;
put 'bHMoKSxmLnZpZXcmJiFFZSYmKGYucmVuZGVyKCksZi52aWV3Ll93dC53dE92ZXJsYXlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpKSwhTnQmJmYudmlldyYmKCIiPT09YW58fCIiPT09eW58fHZvaWQgMD09PXluKSYmYW4hPT15biYmZi52aWV3Ll93dC53dE92ZXJsYXlzLnVwZGF0ZU1haW5TY3Jv'@;
put 'bGxhYmxlRWxlbWVudHMoKX0sdGhpcy5nZXRWYWx1ZT1mdW5jdGlvbigpe2NvbnN0IHZ0PWYuZ2V0U2VsZWN0ZWRMYXN0KCk7aWYoZHQuZ2V0VmFsdWUpe2lmKG1sKGR0LmdldFZhbHVlKSlyZXR1cm4gZHQuZ2V0VmFsdWUuY2FsbChmKTtpZih2dClyZXR1cm4gZi5nZXREYXRhKClbdnRbMF1b'@;
put 'MF1dW2R0LmdldFZhbHVlXX1lbHNlIGlmKHZ0KXJldHVybiBmLmdldERhdGFBdENlbGwodnRbMF0sdnRbMV0pfSx0aGlzLmdldFNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIGR0fSx0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RBbGwoKSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxs'@;
put 'cygpfSx0aGlzLmFsdGVyPWZ1bmN0aW9uKHZ0LE50LEh0LEhuLHRyKXtaLmFsdGVyKHZ0LE50LEh0LEhuLHRyKX0sdGhpcy5nZXRDZWxsPWZ1bmN0aW9uKHZ0LE50KXtsZXQgSHQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxIbj1OdCx0'@;
put 'cj12dDtpZihOdD49MCl7aWYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLnRvUGh5c2ljYWxDb2x1bW4oTnQpKSlyZXR1cm4gbnVsbDtIbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTnQpfWlmKHZ0Pj0wKXtpZih0aGlz'@;
put 'LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlzaWNhbFJvdyh2dCkpKXJldHVybiBudWxsO3RyPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2dCl9cmV0dXJuIG51bGw9PT10cnx8bnVsbD09PUhufHx2b2lkIDA9PT10cnx8dm9pZCAw'@;
put 'PT09SG4/bnVsbDpmLnZpZXcuZ2V0Q2VsbEF0Q29vcmRzKGYuX2NyZWF0ZUNlbGxDb29yZHModHIsSG4pLEh0KX0sdGhpcy5nZXRDb29yZHM9ZnVuY3Rpb24odnQpe2NvbnN0IE50PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHModnQpO2lmKG51bGw9PT1OdClyZXR1cm4gbnVsbDtj'@;
put 'b25zdHtyb3c6SHQsY29sOkhufT1OdDtsZXQgdHI9SHQsb3I9SG47cmV0dXJuIEh0Pj0wJiYodHI9dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KEh0KSksSG4+PTAmJihvcj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJh'@;
put 'YmxlSW5kZXgoSG4pKSxmLl9jcmVhdGVDZWxsQ29vcmRzKHRyLG9yKX0sdGhpcy5jb2xUb1Byb3A9ZnVuY3Rpb24odnQpe3JldHVybiBNLmNvbFRvUHJvcCh2dCl9LHRoaXMucHJvcFRvQ29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gTS5wcm9wVG9Db2wodnQpfSx0aGlzLnRvVmlzdWFsUm93PXZ0'@;
put 'PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvVmlzdWFsQ29sdW1uPXZ0PT50aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxSb3c9dnQ9PnRoaXMucm93SW5k'@;
put 'ZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMudG9QaHlzaWNhbENvbHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh2dCksdGhpcy5nZXREYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gTS5n'@;
put 'ZXQodnQsTS5jb2xUb1Byb3AoTnQpKX0sdGhpcy5nZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gTS5nZXQodnQsTnQpfSx0aGlzLmdldERhdGFBdENvbD1mdW5jdGlvbih2dCl7Y29uc3QgTnQ9W10sSHQ9TS5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKDAsdnQp'@;
put 'LGYuX2NyZWF0ZUNlbGxDb29yZHMoZHQuZGF0YS5sZW5ndGgtMSx2dCksTS5ERVNUSU5BVElPTl9SRU5ERVJFUik7Zm9yKGxldCBIbj0wO0huPEh0Lmxlbmd0aDtIbis9MSlmb3IobGV0IHRyPTA7dHI8SHRbSG5dLmxlbmd0aDt0cis9MSlOdC5wdXNoKEh0W0huXVt0cl0pO3JldHVybiBOdH0s'@;
put 'dGhpcy5nZXREYXRhQXRQcm9wPWZ1bmN0aW9uKHZ0KXtjb25zdCBOdD1bXSxIdD1NLmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMoMCxNLnByb3BUb0NvbCh2dCkpLGYuX2NyZWF0ZUNlbGxDb29yZHMoZHQuZGF0YS5sZW5ndGgtMSxNLnByb3BUb0NvbCh2dCkpLE0uREVTVElOQVRJT05f'@;
put 'UkVOREVSRVIpO2ZvcihsZXQgSG49MDtIbjxIdC5sZW5ndGg7SG4rPTEpZm9yKGxldCB0cj0wO3RyPEh0W0huXS5sZW5ndGg7dHIrPTEpTnQucHVzaChIdFtIbl1bdHJdKTtyZXR1cm4gTnR9LHRoaXMuZ2V0U291cmNlRGF0YT1mdW5jdGlvbih2dCxOdCxIdCxIbil7bGV0IHRyO3JldHVybiB0'@;
put 'cj12b2lkIDA9PT12dD9ELmdldERhdGEoKTpELmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhIdCxIbikpLHRyfSx0aGlzLmdldFNvdXJjZURhdGFBcnJheT1mdW5jdGlvbih2dCxOdCxIdCxIbil7bGV0IHRyO3JldHVybiB0cj12b2lk'@;
put 'IDA9PT12dD9ELmdldERhdGEoITApOkQuZ2V0QnlSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KSxmLl9jcmVhdGVDZWxsQ29vcmRzKEh0LEhuKSwhMCksdHJ9LHRoaXMuZ2V0U291cmNlRGF0YUF0Q29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gRC5nZXRBdENvbHVtbih2dCl9LHRoaXMu'@;
put 'c2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxOdCxIdCxIbil7Y29uc3QgdHI9RHIodnQsTnQsSHQpLG9yPXRoaXMuaGFzSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiksSHI9W107b3ImJlluKHRyLGFuPT57bGV0W3luLHBuLHByXT1hbjtIci5wdXNoKFt5bixwbixELmdl'@;
put 'dEF0Q2VsbCh5bixwbikscHJdKX0pLFluKHRyLGFuPT57bGV0W3luLHBuLHByXT1hbjtELnNldEF0Q2VsbCh5bixwbixwcil9KSxvciYmdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixIcixIbiksdGhpcy5yZW5kZXIoKTtjb25zdCBLcj1mLmdldEFjdGl2ZUVkaXRv'@;
put 'cigpO0tyJiZGbyhLci5yZWZyZXNoVmFsdWUpJiZLci5yZWZyZXNoVmFsdWUoKX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBELmdldEF0Um93KHZ0KX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gRC5nZXRBdENl'@;
put 'bGwodnQsTnQpfSx0aGlzLmdldERhdGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIE0uZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCwwKSxmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LHRoaXMuY291bnRDb2xzKCktMSksTS5ERVNUSU5BVElPTl9SRU5ERVJFUilbMF18fFtdfSx0aGlz'@;
put 'LmdldERhdGFUeXBlPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtjb25zdCB0cj12b2lkIDA9PT12dD9bMCwwLHRoaXMuY291bnRSb3dzKCksdGhpcy5jb3VudENvbHMoKV06W3Z0LE50LEh0LEhuXSxbb3IsSHJdPXRyO2xldFssLEtyLGFuXT10cix5bj1udWxsLHBuPW51bGw7dm9pZCAwPT09S3Im'@;
put 'JihLcj1vciksdm9pZCAwPT09YW4mJihhbj1Icik7bGV0IHByPSJtaXhlZCI7cmV0dXJuICRvKE1hdGgubWF4KE1hdGgubWluKG9yLEtyKSwwKSxNYXRoLm1heChvcixLciksJG49PntsZXQgZHI9ITA7cmV0dXJuICRvKE1hdGgubWF4KE1hdGgubWluKEhyLGFuKSwwKSxNYXRoLm1heChIcixh'@;
put 'biksVXI9Pihwbj10aGlzLmdldENlbGxNZXRhKCRuLFVyKS50eXBlLHluP2RyPXluPT09cG46eW49cG4sZHIpKSxwcj1kcj9wbjoibWl4ZWQiLGRyfSkscHJ9LHRoaXMucmVtb3ZlQ2VsbE1ldGE9ZnVuY3Rpb24odnQsTnQsSHQpe2NvbnN0W0huLHRyXT1bdGhpcy50b1BoeXNpY2FsUm93KHZ0'@;
put 'KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW4oTnQpXTtsZXQgb3I9cHQuZ2V0Q2VsbE1ldGFLZXlWYWx1ZShIbix0cixIdCk7ITEhPT1mLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsdnQsTnQsSHQsb3IpJiYocHQucmVtb3ZlQ2VsbE1ldGEoSG4sdHIsSHQpLGYucnVuSG9va3MoImFm'@;
put 'dGVyUmVtb3ZlQ2VsbE1ldGEiLHZ0LE50LEh0LG9yKSksb3I9bnVsbH0sdGhpcy5zcGxpY2VDZWxsc01ldGE9ZnVuY3Rpb24odnQpe2xldCBOdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtmb3IodmFyIEh0PWFyZ3VtZW50cy5sZW5n'@;
put 'dGgsSG49bmV3IEFycmF5KEh0PjI/SHQtMjowKSx0cj0yO3RyPEh0O3RyKyspSG5bdHItMl09YXJndW1lbnRzW3RyXTtpZihIbi5sZW5ndGg+MCYmIUFycmF5LmlzQXJyYXkoSG5bMF0pKXRocm93IG5ldyBFcnJvcigiVGhlIDNyZCBhcmd1bWVudCAoY2VsbE1ldGFSb3dzKSBoYXMgdG8gYmUg'@;
put 'cGFzc2VkIGFzIGFuIGFycmF5IG9mIGNlbGwgbWV0YSBvYmplY3RzIGFycmF5LiIpO050PjAmJnB0LnJlbW92ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3codnQpLE50KSxIbi5sZW5ndGg+MCYmWW4oSG4ucmV2ZXJzZSgpLG9yPT57cHQuY3JlYXRlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2dCkp'@;
put 'LFluKG9yLChIcixLcik9PnRoaXMuc2V0Q2VsbE1ldGFPYmplY3QodnQsS3IsSHIpKX0pLGYucmVuZGVyKCl9LHRoaXMuc2V0Q2VsbE1ldGFPYmplY3Q9ZnVuY3Rpb24odnQsTnQsSHQpeyJvYmplY3QiPT10eXBlb2YgSHQmJlhhKEh0LChIbix0cik9Pnt0aGlzLnNldENlbGxNZXRhKHZ0LE50'@;
put 'LHRyLEhuKX0pfSx0aGlzLnNldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE50LEh0LEhuKXtpZighMT09PWYucnVuSG9va3MoImJlZm9yZVNldENlbGxNZXRhIix2dCxOdCxIdCxIbikpcmV0dXJuO2xldCBvcj12dCxIcj1OdDt2dDx0aGlzLmNvdW50Um93cygpJiYob3I9dGhpcy50b1BoeXNpY2Fs'@;
put 'Um93KHZ0KSksTnQ8dGhpcy5jb3VudENvbHMoKSYmKEhyPXRoaXMudG9QaHlzaWNhbENvbHVtbihOdCkpLHB0LnNldENlbGxNZXRhKG9yLEhyLEh0LEhuKSxmLnJ1bkhvb2tzKCJhZnRlclNldENlbGxNZXRhIix2dCxOdCxIdCxIbil9LHRoaXMuZ2V0Q2VsbHNNZXRhPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHB0LmdldENlbGxzTWV0YSgpfSx0aGlzLmdldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE50KXtsZXQgSHQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOntza2lwTWV0YUV4dGVuc2lvbjohMX0sSG49dGhpcy50b1BoeXNpY2FsUm93KHZ0'@;
put 'KSx0cj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oTnQpO3JldHVybiBudWxsPT09SG4mJihIbj12dCksbnVsbD09PXRyJiYodHI9TnQpLHB0LmdldENlbGxNZXRhKEhuLHRyLHt2aXN1YWxSb3c6dnQsdmlzdWFsQ29sdW1uOk50LC4uLkh0fSl9LHRoaXMuZ2V0Q29sdW1uTWV0YT1mdW5jdGlvbih2'@;
put 'dCl7cmV0dXJuIHB0LmdldENvbHVtbk1ldGEodGhpcy50b1BoeXNpY2FsQ29sdW1uKHZ0KSl9LHRoaXMuZ2V0Q2VsbE1ldGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIHB0LmdldENlbGxzTWV0YUF0Um93KHZ0KX0sdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQ9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4hKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8ZHQuY29sdW1ucyl9LHRoaXMuZ2V0Q2VsbFJlbmRlcmVyPWZ1bmN0aW9uKHZ0LE50KXtjb25zdCBIdD0ibnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsTnQpLnJlbmRlcmVyOnZ0LnJlbmRlcmVyO3JldHVybiJzdHJp'@;
put 'bmciPT10eXBlb2YgSHQ/Sk8oSHQpOnljKEh0KT9KTygidGV4dCIpOkh0fSx0aGlzLmdldENlbGxFZGl0b3I9ZnVuY3Rpb24odnQsTnQpe2NvbnN0IEh0PSJudW1iZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCxOdCkuZWRpdG9yOnZ0LmVkaXRvcjtyZXR1cm4ic3RyaW5nIj09dHlw'@;
put 'ZW9mIEh0P1pPKEh0KTp5YyhIdCk/Wk8oInRleHQiKTpIdH0sdGhpcy5nZXRDZWxsVmFsaWRhdG9yPWZ1bmN0aW9uKHZ0LE50KXtjb25zdCBIdD0ibnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsTnQpLnZhbGlkYXRvcjp2dC52YWxpZGF0b3I7cmV0dXJuInN0cmluZyI9PXR5'@;
put 'cGVvZiBIdD9RJChIdCk6SHR9LHRoaXMudmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCl7dGhpcy5fdmFsaWRhdGVDZWxscyh2dCl9LHRoaXMudmFsaWRhdGVSb3dzPWZ1bmN0aW9uKHZ0LE50KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZVJvd3MgcGFy'@;
put 'YW1ldGVyIGByb3dzYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhOdCx2dCl9LHRoaXMudmFsaWRhdGVDb2x1bW5zPWZ1bmN0aW9uKHZ0LE50KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZUNvbHVtbnMgcGFyYW1ldGVyIGBj'@;
put 'b2x1bW5zYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhOdCx2b2lkIDAsdnQpfSx0aGlzLl92YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKHZ0LE50LEh0KXtjb25zdCBIbj1uZXcgX2k7dnQmJihIbi5vblF1ZXVlRW1wdHk9dnQpO2xldCB0cj1mLmNvdW50Um93cygpLTE7'@;
put 'Zm9yKDt0cj49MDspe2lmKHZvaWQgMCE9PU50JiYtMT09PU50LmluZGV4T2YodHIpKXt0ci09MTtjb250aW51ZX1sZXQgb3I9Zi5jb3VudENvbHMoKS0xO2Zvcig7b3I+PTA7KXZvaWQgMD09PUh0fHwtMSE9PUh0LmluZGV4T2Yob3IpPyhIbi5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksZi52YWxp'@;
put 'ZGF0ZUNlbGwoZi5nZXREYXRhQXRDZWxsKHRyLG9yKSxmLmdldENlbGxNZXRhKHRyLG9yKSxIcj0+e2lmKCJib29sZWFuIiE9dHlwZW9mIEhyKXRocm93IG5ldyBFcnJvcigiVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuIik7ITE9PT1IciYmKEhuLnZhbGlkPSExKSxI'@;
put 'bi5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKX0sInZhbGlkYXRlQ2VsbHMiKSxvci09MSk6b3ItPTE7dHItPTF9SG4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSx0aGlzLmdldFJvd0hlYWRlcj1mdW5jdGlvbih2dCl7bGV0IE50PWR0LnJvd0hlYWRlcnMsSHQ9dnQ7cmV0dXJuIHZvaWQgMCE9'@;
put 'PUh0JiYoSHQ9Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyIixIdCkpLHZvaWQgMD09PUh0PyhOdD1bXSwkbyhmLmNvdW50Um93cygpLTEsSG49PntOdC5wdXNoKGYuZ2V0Um93SGVhZGVyKEhuKSl9KSk6QXJyYXkuaXNBcnJheShOdCkmJnZvaWQgMCE9PU50W0h0XT9OdD1OdFtIdF06bWwo'@;
put 'TnQpP050PU50KEh0KTpOdCYmInN0cmluZyIhPXR5cGVvZiBOdCYmIm51bWJlciIhPXR5cGVvZiBOdCYmKE50PUh0KzEpLE50fSx0aGlzLmhhc1Jvd0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hIWR0LnJvd0hlYWRlcnN9LHRoaXMuaGFzQ29sSGVhZGVycz1mdW5jdGlvbigpe2lmKG51bGwh'@;
put 'PWR0LmNvbEhlYWRlcnMpcmV0dXJuISFkdC5jb2xIZWFkZXJzO2ZvcihsZXQgdnQ9MCxOdD1mLmNvdW50Q29scygpO3Z0PE50O3Z0KyspaWYoZi5nZXRDb2xIZWFkZXIodnQpKXJldHVybiEwO3JldHVybiExfSx0aGlzLmdldENvbEhlYWRlcj1mdW5jdGlvbih2dCl7bGV0IE50PWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTotMTtjb25zdCBIdD1mLnJ1bkhvb2tzKCJtb2RpZnlDb2xIZWFkZXIiLHZ0KTtpZih2b2lkIDA9PT1IdCl7Y29uc3QgS3I9W10sYW49Zi5jb3VudENvbHMoKTtmb3IobGV0IHluPTA7eW48YW47eW4rKylLci5w'@;
put 'dXNoKGYuZ2V0Q29sSGVhZGVyKHluKSk7cmV0dXJuIEtyfWxldCBIbj1kdC5jb2xIZWFkZXJzO2NvbnN0IG9yPWYudG9QaHlzaWNhbENvbHVtbihIdCksSHI9ZnVuY3Rpb24oS3Ipe2NvbnN0IGFuPVtdLHluPWYuY291bnRDb2xzKCk7bGV0IHBuPTA7Zm9yKDtwbjx5bjtwbisrKW1sKGR0LmNv'@;
put 'bHVtbnMpJiZkdC5jb2x1bW5zKHBuKSYmYW4ucHVzaChwbik7cmV0dXJuIGFuW0tyXX0ob3IpO3JldHVybiExPT09ZHQuY29sSGVhZGVycz9Ibj1udWxsOmR0LmNvbHVtbnMmJm1sKGR0LmNvbHVtbnMpJiZkdC5jb2x1bW5zKEhyKSYmZHQuY29sdW1ucyhIcikudGl0bGU/SG49ZHQuY29sdW1u'@;
put 'cyhIcikudGl0bGU6ZHQuY29sdW1ucyYmZHQuY29sdW1uc1tvcl0mJmR0LmNvbHVtbnNbb3JdLnRpdGxlP0huPWR0LmNvbHVtbnNbb3JdLnRpdGxlOkFycmF5LmlzQXJyYXkoZHQuY29sSGVhZGVycykmJnZvaWQgMCE9PWR0LmNvbEhlYWRlcnNbb3JdP0huPWR0LmNvbEhlYWRlcnNbb3JdOm1s'@;
put 'KGR0LmNvbEhlYWRlcnMpP0huPWR0LmNvbEhlYWRlcnMob3IpOmR0LmNvbEhlYWRlcnMmJiJzdHJpbmciIT10eXBlb2YgZHQuY29sSGVhZGVycyYmIm51bWJlciIhPXR5cGVvZiBkdC5jb2xIZWFkZXJzJiYoSG49ZFAoSHQpKSxIbj1mLnJ1bkhvb2tzKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1'@;
put 'ZSIsSG4sdnQsTnQpLEhufSx0aGlzLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncz1mdW5jdGlvbih2dCl7bGV0IE50O2lmKHZ0Pj0wJiYoTnQ9Zi5nZXRDZWxsTWV0YSgwLHZ0KS53aWR0aCksKHZvaWQgMD09PU50fHxOdD09PWR0LndpZHRoKSYmKE50PWR0LmNvbFdpZHRocyksbnVsbCE9TnQp'@;
put 'e3N3aXRjaCh0eXBlb2YgTnQpe2Nhc2Uib2JqZWN0IjpOdD1OdFt2dF07YnJlYWs7Y2FzZSJmdW5jdGlvbiI6TnQ9TnQodnQpfSJzdHJpbmciPT10eXBlb2YgTnQmJihOdD1wYXJzZUludChOdCwxMCkpfXJldHVybiBOdH0sdGhpcy5nZXRDb2xXaWR0aD1mdW5jdGlvbih2dCxOdCl7bGV0IEh0'@;
put 'PWYuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gSHQ9Zi5ydW5Ib29rcygibW9kaWZ5Q29sV2lkdGgiLEh0LHZ0LE50KSx2b2lkIDA9PT1IdCYmKEh0PV9fKSxIdH0sdGhpcy5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzPWZ1bmN0aW9uKHZ0KXtjb25zdCBOdD10aGlzLnZp'@;
put 'ZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBIdD1kdC5yb3dIZWlnaHRzO2lmKG51bGwhPUh0KXtzd2l0Y2godHlwZW9mIEh0KXtjYXNlIm9iamVjdCI6SHQ9SHRbdnRdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOkh0PUh0KHZ0KX0ic3RyaW5nIj09dHlwZW9mIEh0JiYoSHQ9cGFyc2VJbnQo'@;
put 'SHQsMTApKX1yZXR1cm4gbnVsbCE9SHQmJkh0PE50P050Okh0fSx0aGlzLmdldFJvd0hlaWdodD1mdW5jdGlvbih2dCxOdCl7bGV0IEh0PWYuX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncyh2dCk7cmV0dXJuIEh0PWYucnVuSG9va3MoIm1vZGlmeVJvd0hlaWdodCIsSHQsdnQsTnQpLEh0fSx0'@;
put 'aGlzLmNvdW50U291cmNlUm93cz1mdW5jdGlvbigpe3JldHVybiBELmNvdW50Um93cygpfSx0aGlzLmNvdW50U291cmNlQ29scz1mdW5jdGlvbigpe3JldHVybiBELmNvdW50Rmlyc3RSb3dLZXlzKCl9LHRoaXMuY291bnRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIE0uZ2V0TGVuZ3RoKCl9LHRo'@;
put 'aXMuY291bnRDb2xzPWZ1bmN0aW9uKCl7Y29uc3QgdnQ9ZHQubWF4Q29scyxOdD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKHZ0LE50KX0sdGhpcy5jb3VudFJlbmRlcmVkUm93cz1mdW5jdGlvbigpe3JldHVybiBm'@;
put 'LnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZFJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50VmlzaWJsZVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0VmlzaWJsZVJvd3NDb3VudCgpOi0xfSx0'@;
put 'aGlzLmNvdW50UmVuZGVyZWRDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxlQ29scz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yu'@;
put 'dmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlldy5nZXRSb3dIZWFkZXJzQ291bnQoKX0sdGhpcy5jb3VudENvbEhlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52aWV3'@;
put 'LmdldENvbHVtbkhlYWRlcnNDb3VudCgpfSx0aGlzLmNvdW50RW1wdHlSb3dzPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sTnQ9MDtyZXR1cm4gRyQoZi5jb3VudFJvd3MoKS0xLEh0PT57aWYoZi5pc0Vt'@;
put 'cHR5Um93KEh0KSlOdCs9MTtlbHNlIGlmKCEwPT09dnQpcmV0dXJuITF9KSxOdH0sdGhpcy5jb3VudEVtcHR5Q29scz1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLE50PTA7cmV0dXJuIEckKGYuY291bnRD'@;
put 'b2xzKCktMSxIdD0+e2lmKGYuaXNFbXB0eUNvbChIdCkpTnQrPTE7ZWxzZSBpZighMD09PXZ0KXJldHVybiExfSksTnR9LHRoaXMuaXNFbXB0eVJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIGR0LmlzRW1wdHlSb3cuY2FsbChmLHZ0KX0sdGhpcy5pc0VtcHR5Q29sPWZ1bmN0aW9uKHZ0KXtyZXR1'@;
put 'cm4gZHQuaXNFbXB0eUNvbC5jYWxsKGYsdnQpfSx0aGlzLnNlbGVjdENlbGw9ZnVuY3Rpb24odnQsTnQsSHQsSG4pe2xldCB0cj0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdLG9yPSEoYXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAh'@;
put 'PT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07cmV0dXJuIXljKHZ0KSYmIXljKE50KSYmdGhpcy5zZWxlY3RDZWxscyhbW3Z0LE50LEh0LEhuXV0sdHIsb3IpfSx0aGlzLnNlbGVjdENlbGxzPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzBdP2FyZ3VtZW50c1swXTpbW11dLEh0PSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07ITE9PT0oIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSkmJmJlLnN1c3BlbmQo'@;
put 'KTtjb25zdCBIbj1Hci5zZWxlY3RDZWxscyh2dCk7cmV0dXJuIEhuJiZIdCYmZi5saXN0ZW4oKSxiZS5yZXN1bWUoKSxIbn0sdGhpcy5zZWxlY3RDb2x1bW5zPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gR3Iuc2VsZWN0Q29sdW1ucyh2dCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1sxXT9hcmd1bWVudHNbMV06dnQsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSx0aGlzLnNlbGVjdFJvd3M9ZnVuY3Rpb24odnQpe3JldHVybiBHci5zZWxlY3RSb3dzKHZ0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3Vt'@;
put 'ZW50c1sxXTp2dCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHRoaXMuZGVzZWxlY3RDZWxsPWZ1bmN0aW9uKCl7R3IuZGVzZWxlY3QoKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXtsZXQgdnQ9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1swXSl8fGFyZ3VtZW50c1swXSxOdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dnQsSHQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7YmUuc2tpcE5leHRTY3JvbGxDeWNsZSgpLEdyLnNlbGVjdEFsbCh2'@;
put 'dCxOdCxIdCl9O2NvbnN0IHdpPSh2dCxOdCk9PnZ0LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChOdCwxLCEwKTt0aGlzLnNjcm9sbFZpZXdwb3J0VG89ZnVuY3Rpb24odnQsTnQpe3ZhciBIdDsibnVtYmVyIj09dHlwZW9mIHZ0JiYodnQ9e3Jvdzphcmd1bWVudHNbMF0sY29sOmFyZ3VtZW50'@;
put 'c1sxXSx2ZXJ0aWNhbFNuYXA6YXJndW1lbnRzWzJdPyJib3R0b20iOiJ0b3AiLGhvcml6b250YWxTbmFwOmFyZ3VtZW50c1szXT8iZW5kIjoic3RhcnQiLGNvbnNpZGVySGlkZGVuSW5kZXhlczpudWxsPT09KEh0PWFyZ3VtZW50c1s0XSl8fHZvaWQgMD09PUh0fHxIdH0pO2NvbnN0e3JvdzpI'@;
put 'bixjb2w6dHIsY29uc2lkZXJIaWRkZW5JbmRleGVzOm9yfT12dD8/e307bGV0IEhyPUhuLEtyPXRyO2lmKG1sKE50KSYmdGhpcy5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLE50KSx2b2lkIDA9PT1vcnx8b3Ipe2NvbnN0IHByPU51bWJlci5pc0ludGVnZXIoSG4pJiZIbj49MCwkbj1OdW1i'@;
put 'ZXIuaXNJbnRlZ2VyKHRyKSYmdHI+PTAsZHI9cHI/d2kodGhpcy5yb3dJbmRleE1hcHBlcixIbik6dm9pZCAwLFVyPSRuP3dpKHRoaXMuY29sdW1uSW5kZXhNYXBwZXIsdHIpOnZvaWQgMDtpZihudWxsPT09ZHJ8fG51bGw9PT1VcilyZXR1cm4hMTtIcj1wcj9mLnJvd0luZGV4TWFwcGVyLmdl'@;
put 'dFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZHIpOkhuLEtyPSRuP2YuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChVcik6dHJ9Y29uc3QgYW49TnVtYmVyLmlzSW50ZWdlcihIcikseW49TnVtYmVyLmlzSW50ZWdlcihLcik7bGV0IHBuPSExO3JldHVy'@;
put 'biBhbiYmSHI+PTAmJnluJiZLcj49MD9wbj1mLnZpZXcuc2Nyb2xsVmlld3BvcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhIcixLciksdnQuaG9yaXpvbnRhbFNuYXAsdnQudmVydGljYWxTbmFwKTphbiYmSHI+PTAmJih5biYmS3I8MHx8IXluKT9wbj1mLnZpZXcuc2Nyb2xsVmlld3BvcnRWZXJ0'@;
put 'aWNhbGx5KEhyLHZ0LnZlcnRpY2FsU25hcCk6eW4mJktyPj0wJiYoYW4mJkhyPDB8fCFhbikmJihwbj1mLnZpZXcuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoS3IsdnQuaG9yaXpvbnRhbFNuYXApKSxtbChOdCkmJihwbj90aGlzLnZpZXcucmVuZGVyKCk6KHRoaXMucmVtb3ZlSG9vaygi'@;
put 'YWZ0ZXJTY3JvbGwiLE50KSx0aGlzLl9yZWdpc3Rlck1pY3JvdGFzaygoKT0+TnQoKSkpKSxwbn0sdGhpcy5zY3JvbGxUb0ZvY3VzZWRDZWxsPWZ1bmN0aW9uKHZ0KXtpZighdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpKXJldHVybiExO21sKHZ0KSYmdGhpcy5hZGRIb29rT25jZSgiYWZ0'@;
put 'ZXJTY3JvbGwiLHZ0KTtjb25zdHtoaWdobGlnaHQ6TnR9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxIdD10aGlzLnNjcm9sbFZpZXdwb3J0VG8oTnQudG9PYmplY3QoKSk7cmV0dXJuIEh0P3RoaXMudmlldy5yZW5kZXIoKTptbCh2dCkmJih0aGlzLnJlbW92ZUhvb2soImFmdGVyU2Ny'@;
put 'b2xsIix2dCksdGhpcy5fcmVnaXN0ZXJNaWNyb3Rhc2soKCk9PnZ0KCkpKSxIdH0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYoZi5fY2xlYXJUaW1lb3V0cygpLGYuX2NsZWFySW1tZWRpYXRlcygpLGYudmlldyYmZi52aWV3LmRlc3Ryb3koKSxEJiZELmRlc3Ryb3koKSxEPW51bGwsdGhp'@;
put 'cy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5kZXN0cm95KCkscHQuY2xlYXJDYWNoZSgpLEVYLmRlbGV0ZSh0aGlzLmd1aWQpLGxQKGYpKXtjb25zdCB2dD10aGlzLnJvb3REb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7dnQmJnZ0LnBhcmVudE5vZGUu'@;
put 'cmVtb3ZlQ2hpbGQodnQpfXhwKGYucm9vdEVsZW1lbnQpLHYuZGVzdHJveSgpLG5lJiZuZS5kZXN0cm95KCksZi5iYXRjaEV4ZWN1dGlvbigoKT0+e2Yucm93SW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpLGYuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpLHZuLmdldEl0ZW1z'@;
put 'KCkuZm9yRWFjaCh2dD0+e2xldFssTnRdPXZ0O050LmRlc3Ryb3koKX0pLHZuLmNsZWFyKCksZi5ydW5Ib29rcygiYWZ0ZXJEZXN0cm95Iil9LCEwKSxNby5nZXRTaW5nbGV0b24oKS5kZXN0cm95KGYpLFhhKGYsKHZ0LE50LEh0KT0+e21sKHZ0KT9IdFtOdF09ZnVuY3Rpb24gdG8odnQpe3Jl'@;
put 'dHVybigpPT57dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7dnR9IiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3llZGApfX0oTnQpOiJndWlkIiE9PU50JiYoSHRbTnRdPW51bGwpfSksZi5pc0Rlc3Ryb3ll'@;
put 'ZD0hMCxNJiZNLmRlc3Ryb3koKSxNPW51bGwsWj1udWxsLEdyPW51bGwsbmU9bnVsbCxmPW51bGx9LHRoaXMuZ2V0QWN0aXZlRWRpdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIG5lLmdldEFjdGl2ZUVkaXRvcigpfSx0aGlzLmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIGYudmlldy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RSZW5kZXJlZFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKX0sdGhpcy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbj1mdW5j'@;
put 'dGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0Rmlyc3RGdWxseVZp'@;
put 'c2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCl9LHRoaXMuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldEZpcnN0RnVsbHlWaXNpYmxl'@;
put 'Q29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldExhc3RGdWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRGaXJzdFBhcnRp'@;
put 'YWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpfSx0aGlzLmdl'@;
put 'dEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RQYXJ0aWFsbHlW'@;
put 'aXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0UGx1Z2luPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gdm4uZ2V0SXRlbShwMSh2dCkpfSx0aGlzLmdldFBsdWdpbk5hbWU9ZnVuY3Rpb24odnQpe3JldHVybiB2dD09PXRoaXMudW5kb1JlZG8/dGhpcy51bmRvUmVkby5jb25zdHJ1Y3Rvci5QTFVHSU5fS0VZ'@;
put 'OnZuLmdldElkKHZ0KX0sdGhpcy5nZXRJbnN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBmfSx0aGlzLmFkZEhvb2s9ZnVuY3Rpb24odnQsTnQsSHQpe01vLmdldFNpbmdsZXRvbigpLmFkZCh2dCxOdCxmLEh0KX0sdGhpcy5oYXNIb29rPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gTW8uZ2V0U2luZ2xl'@;
put 'dG9uKCkuaGFzKHZ0LGYpfHxNby5nZXRTaW5nbGV0b24oKS5oYXModnQpfSx0aGlzLmFkZEhvb2tPbmNlPWZ1bmN0aW9uKHZ0LE50LEh0KXtNby5nZXRTaW5nbGV0b24oKS5vbmNlKHZ0LE50LGYsSHQpfSx0aGlzLnJlbW92ZUhvb2s9ZnVuY3Rpb24odnQsTnQpe01vLmdldFNpbmdsZXRvbigp'@;
put 'LnJlbW92ZSh2dCxOdCxmKX0sdGhpcy5ydW5Ib29rcz1mdW5jdGlvbih2dCxOdCxIdCxIbix0cixvcixIcil7cmV0dXJuIE1vLmdldFNpbmdsZXRvbigpLnJ1bihmLHZ0LE50LEh0LEhuLHRyLG9yLEhyKX0sdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4g'@;
put 'RjNlKGR0Lmxhbmd1YWdlLHZ0LE50KX0sdGhpcy50b0hUTUw9KCk9PlckKHRoaXMpLHRoaXMudG9UYWJsZUVsZW1lbnQ9KCk9Pntjb25zdCB2dD10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdnQuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixX'@;
put 'JCh0aGlzKSksdnQuZmlyc3RFbGVtZW50Q2hpbGR9LHRoaXMudGltZW91dHM9W10sdGhpcy51c2VUaGVtZT12dD0+e3RoaXMudmlldy5nZXRTdHlsZXNIYW5kbGVyKCkudXNlVGhlbWUodnQpLHRoaXMucnVuSG9va3MoImFmdGVyU2V0VGhlbWUiLHZ0LCEhRWUpfSx0aGlzLmdldEN1cnJlbnRU'@;
put 'aGVtZU5hbWU9KCk9PnRoaXMudmlldy5nZXRTdHlsZXNIYW5kbGVyKCkuZ2V0VGhlbWVOYW1lKCksdGhpcy5fcmVnaXN0ZXJUaW1lb3V0PWZ1bmN0aW9uKHZ0KXtsZXQgSHQ9dnQ7ImZ1bmN0aW9uIj09dHlwZW9mIEh0JiYoSHQ9c2V0VGltZW91dChIdCxhcmd1bWVudHMubGVuZ3RoPjEmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCkpLHRoaXMudGltZW91dHMucHVzaChIdCl9LHRoaXMuX2NsZWFyVGltZW91dHM9ZnVuY3Rpb24oKXtZbih0aGlzLnRpbWVvdXRzLHZ0PT57Y2xlYXJUaW1lb3V0KHZ0KX0pfSx0aGlzLmltbWVkaWF0ZXM9W10sdGhpcy5fcmVnaXN0'@;
put 'ZXJJbW1lZGlhdGU9ZnVuY3Rpb24odnQpe3RoaXMuaW1tZWRpYXRlcy5wdXNoKHNldEltbWVkaWF0ZSh2dCkpfSx0aGlzLl9jbGVhckltbWVkaWF0ZXM9ZnVuY3Rpb24oKXtZbih0aGlzLmltbWVkaWF0ZXMsdnQ9PntjbGVhckltbWVkaWF0ZSh2dCl9KX0sdGhpcy5fcmVnaXN0ZXJNaWNyb3Rh'@;
put 'c2s9ZnVuY3Rpb24odnQpe3RoaXMucm9vdFdpbmRvdy5xdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuaXNEZXN0cm95ZWR8fHZ0KCl9KX0sdGhpcy5fZ2V0RWRpdG9yTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiBuZX07Y29uc3QgcG89WG50KHtoYW5kbGVFdmVudDooKT0+Zi5pc0xpc3Rlbmlu'@;
put 'ZygpLGJlZm9yZUtleURvd246dnQ9PnRoaXMucnVuSG9va3MoImJlZm9yZUtleURvd24iLHZ0KSxhZnRlcktleURvd246dnQ9Pnt0aGlzLmlzRGVzdHJveWVkfHxmLnJ1bkhvb2tzKCJhZnRlckRvY3VtZW50S2V5RG93biIsdnQpfSxvd25lcldpbmRvdzp0aGlzLnJvb3RXaW5kb3d9KTt0aGlz'@;
put 'LmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsdnQ9PnshMT09PXZ0LmN0cmxLZXkmJiExPT09dnQubWV0YUtleSYmcG8ucmVsZWFzZVByZXNzZWRLZXlzKCl9KSx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiBwb30sdGhpcy5nZXRGb2N1c01hbmFnZXI9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gY2V9LEokKCkuZm9yRWFjaCh2dD0+e2NvbnN0IE50PURFKHZ0KTt2bi5hZGRJdGVtKHZ0LG5ldyBOdCh0aGlzKSl9KSxmdW5jdGlvbiBxcnQoYyl7W0tydCwkcnRdLmZvckVhY2gobD0+bChjKSl9KGYpLHBvLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIiks'@;
put 'TW8uZ2V0U2luZ2xldG9uKCkucnVuKGYsImNvbnN0cnVjdCIpfWZ1bmN0aW9uIGJwZShjLGwsYSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24geXBlKGMsbCxhKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBOUChjKXtyZXR1cm4gYy5vd25lckRv'@;
put 'Y3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYyl9ZnVuY3Rpb24gX3BlKGMpe2NvbnN0IGE9e21pbkhlaWdodDoyMDAsbWF4SGVpZ2h0OjMwMCxtaW5XaWR0aDoxMDAsbWF4V2lkdGg6MzAwLHRleHRDb250ZW50OmNlPT5jZS52YWx1ZSwuLi5hcmd1bWVudHMubGVuZ3RoPjEm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e319LGQ9Yy5ib2R5LGg9Yy5jcmVhdGVUZXh0Tm9kZSgiIiksZj1jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgdjtmdW5jdGlvbiBNKCl7dmFyIGNlLGJlO2gudGV4dENvbnRlbnQ9YS50ZXh0Q29udGVudCh2KSxmLnN0eWxl'@;
put 'LnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS5mb250U2l6ZT1OUCh2KS5mb250U2l6ZSxmLnN0eWxlLmZvbnRGYW1pbHk9TlAodikuZm9udEZhbWlseSxmLnN0eWxlLndoaXRlU3BhY2U9InByZSIsZC5hcHBlbmRDaGlsZChmKTtjb25zdCBFZT1wYXJzZUludCgobnVsbD09PShjZT1OUCh2'@;
put 'KSl8fHZvaWQgMD09PWNlP3ZvaWQgMDpjZS5wYWRkaW5nSW5saW5lU3RhcnQpfHwwLDEwKSxCZT1wYXJzZUludCgobnVsbD09PShiZT1OUCh2KSl8fHZvaWQgMD09PWJlP3ZvaWQgMDpiZS5wYWRkaW5nSW5saW5lRW5kKXx8MCwxMCkscWU9Zi5jbGllbnRXaWR0aCtFZStCZSsxO2QucmVtb3Zl'@;
put 'Q2hpbGQoZik7Y29uc3QgcnQ9di5zdHlsZTtydC5oZWlnaHQ9YCR7YS5taW5IZWlnaHR9cHhgLHJ0LndpZHRoPWEubWluV2lkdGg+cWU/YCR7YS5taW5XaWR0aH1weGA6cWU+YS5tYXhXaWR0aD9gJHthLm1heFdpZHRofXB4YDpgJHtxZX1weGA7Y29uc3QgcHQ9di5zY3JvbGxIZWlnaHQ/di5z'@;
put 'Y3JvbGxIZWlnaHQtMTowO2EubWluSGVpZ2h0PnB0P3J0LmhlaWdodD1gJHthLm1pbkhlaWdodH1weGA6YS5tYXhIZWlnaHQ8cHQ/KHJ0LmhlaWdodD1gJHthLm1heEhlaWdodH1weGAscnQub3ZlcmZsb3dZPSJ2aXNpYmxlIik6cnQuaGVpZ2h0PWAke3B0fXB4YH1mdW5jdGlvbiBEKCl7Yy5k'@;
put 'ZWZhdWx0Vmlldy5zZXRUaW1lb3V0KE0sMCl9cmV0dXJue2luaXQ6ZnVuY3Rpb24gbmUoY2UsYmUpe2xldCBFZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3Y9Y2UsZnVuY3Rpb24gWihjZSl7aWYoY2UmJmNlLm1pbkhlaWdodClpZigi'@;
put 'aW5oZXJpdCI9PT1jZS5taW5IZWlnaHQpYS5taW5IZWlnaHQ9di5jbGllbnRIZWlnaHQ7ZWxzZXtjb25zdCBiZT1wYXJzZUludChjZS5taW5IZWlnaHQsMTApO2lzTmFOKGJlKXx8KGEubWluSGVpZ2h0PWJlKX1pZihjZSYmY2UubWF4SGVpZ2h0KWlmKCJpbmhlcml0Ij09PWNlLm1heEhlaWdo'@;
put 'dClhLm1heEhlaWdodD12LmNsaWVudEhlaWdodDtlbHNle2NvbnN0IGJlPXBhcnNlSW50KGNlLm1heEhlaWdodCwxMCk7aXNOYU4oYmUpfHwoYS5tYXhIZWlnaHQ9YmUpfWlmKGNlJiZjZS5taW5XaWR0aClpZigiaW5oZXJpdCI9PT1jZS5taW5XaWR0aClhLm1pbldpZHRoPXYuY2xpZW50V2lk'@;
put 'dGg7ZWxzZXtjb25zdCBiZT1wYXJzZUludChjZS5taW5XaWR0aCwxMCk7aXNOYU4oYmUpfHwoYS5taW5XaWR0aD1iZSl9aWYoY2UmJmNlLm1heFdpZHRoKWlmKCJpbmhlcml0Ij09PWNlLm1heFdpZHRoKWEubWF4V2lkdGg9di5jbGllbnRXaWR0aDtlbHNle2NvbnN0IGJlPXBhcnNlSW50KGNl'@;
put 'Lm1heFdpZHRoLDEwKTtpc05hTihiZSl8fChhLm1heFdpZHRoPWJlKX1mLmZpcnN0Q2hpbGR8fChmLmNsYXNzTmFtZT0iYXV0b1Jlc2l6ZSIsZi5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLGYuYXBwZW5kQ2hpbGQoaCkpfShiZSksIlRFWFRBUkVBIj09PXYubm9kZU5hbWUmJih2LnN0'@;
put 'eWxlLnJlc2l6ZT0ibm9uZSIsdi5zdHlsZS5oZWlnaHQ9YCR7YS5taW5IZWlnaHR9cHhgLHYuc3R5bGUubWluV2lkdGg9YCR7YS5taW5XaWR0aH1weGAsdi5zdHlsZS5tYXhXaWR0aD1gJHthLm1heFdpZHRofXB4YCx2LnN0eWxlLm92ZXJmbG93WT0iaGlkZGVuIiksRWUmJihicGUodiwiaW5w'@;
put 'dXQiLE0pLGJwZSh2LCJrZXlkb3duIixEKSksTSgpfSxyZXNpemU6TSx1bk9ic2VydmUoKXt5cGUodiwiaW5wdXQiLE0pLHlwZSh2LCJrZXlkb3duIixEKX19fWZ1bmN0aW9uIHdwZShjLGwpe2NvbnN0IGE9eSQobCksZD1sLnZhbHVlLnNwbGl0KCJcbiIpO2xldCBoPWEsZj0wO2ZvcihsZXQg'@;
put 'dj0wO3Y8ZC5sZW5ndGg7disrKXswIT09diYmKGYrPWRbdi0xXS5sZW5ndGgrMSk7Y29uc3QgRD1mK2Rbdl0ubGVuZ3RoO2lmKCJob21lIj09PWM/aD1mOiJlbmQiPT09YyYmKGg9RCksYTw9RClicmVha31fRShsLGgpfWZ1bmN0aW9uIG45KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBYcnQo'@;
put 'Yyl7dmFyIGw9ZnVuY3Rpb24gSnJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBWUD0iaHRfZWRpdG9yX2hpZGRlbiIsQ3BlPSJ0ZXh0RWRpdG9yIjtjbGFzcyByOSBleHRlbmRzIGtfe3N0YXRpYyBnZXQgRURJVE9S'@;
put 'X1RZUEUoKXtyZXR1cm4idGV4dCJ9Y29uc3RydWN0b3IobCl7c3VwZXIobCksbjkodGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgTjIodGhpcykpLG45KHRoaXMsImF1dG9SZXNpemUiLF9wZSh0aGlzLmhvdC5yb290RG9jdW1lbnQpKSxuOSh0aGlzLCJURVhUQVJFQSIsdm9pZCAwKSxuOSh0aGlz'@;
put 'LCJ0ZXh0YXJlYVN0eWxlIix2b2lkIDApLG45KHRoaXMsIlRFWFRBUkVBX1BBUkVOVCIsdm9pZCAwKSxuOSh0aGlzLCJ0ZXh0YXJlYVBhcmVudFN0eWxlIix2b2lkIDApLG45KHRoaXMsImxheWVyQ2xhc3MiLHZvaWQgMCksdGhpcy5ldmVudE1hbmFnZXI9bmV3IE4yKHRoaXMpLHRoaXMuY3Jl'@;
put 'YXRlRWxlbWVudHMoKSx0aGlzLmJpbmRFdmVudHMoKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+dGhpcy5kZXN0cm95KCkpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuVEVYVEFSRUEudmFsdWV9c2V0VmFsdWUobCl7dGhpcy5URVhUQVJFQS52YWx1ZT1sfW9wZW4o'@;
put 'KXt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImVkaXRvciIpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuYXV0b1Jlc2l6ZS51'@;
put 'bk9ic2VydmUoKSxtRSh0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCx0aGlzLmhvdC5yb290RWxlbWVudCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpfXByZXBhcmUobCxhLGQsaCxmLHYp'@;
put 'e2NvbnN0IE09dGhpcy5zdGF0ZTtpZihzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KSwhdi5yZWFkT25seSl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucyghMCk7Y29uc3R7YWxsb3dJbnZhbGlkOkR9PXY7RCYmIXRoaXMuaXNPcGVuZWQoKSYmKHRoaXMuVEVYVEFSRUEudmFsdWU9IiIpLE0hPT1z'@;
put 'dS5GSU5JU0hFRCYmIXRoaXMuaXNPcGVuZWQoKSYmdGhpcy5oaWRlRWRpdGFibGVFbGVtZW50KCl9fWJlZ2luRWRpdGluZyhsLGEpe3RoaXMuc3RhdGU9PT1zdS5WSVJHSU4mJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiLHN1cGVyLmJlZ2luRWRpdGluZyhsLGEpKX1mb2N1cygpe3RoaXMuVEVY'@;
put 'VEFSRUEuc2VsZWN0KCksX0UodGhpcy5URVhUQVJFQSx0aGlzLlRFWFRBUkVBLnZhbHVlLmxlbmd0aCl9Y3JlYXRlRWxlbWVudHMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3Q7dGhpcy5URVhUQVJFQT1sLmNyZWF0ZUVsZW1lbnQoIlRFWFRBUkVBIiksdmEodGhpcy5URVhUQVJF'@;
put 'QSxbWyJkYXRhLWhvdC1pbnB1dCIsIiJdLEY3KC0xKV0pLFRpKHRoaXMuVEVYVEFSRUEsImhhbmRzb250YWJsZUlucHV0IiksdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0w'@;
put 'LHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMuVEVYVEFSRUFfUEFSRU5UPWwuY3JlYXRlRWxlbWVudCgiRElWIiksVGkodGhpcy5URVhUQVJFQV9QQVJFTlQsImhhbmRzb250YWJsZUlucHV0SG9sZGVyIikscGEodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5s'@;
put 'YXllckNsYXNzKSYmY2EodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSxUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxWUCksdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlPXRoaXMuVEVYVEFSRUFfUEFSRU5ULnN0eWxlLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxk'@;
put 'KHRoaXMuVEVYVEFSRUEpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUFfUEFSRU5UKX1oaWRlRWRpdGFibGVFbGVtZW50KCl7RzJlKCkmJih0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iLTk5OTk5cHgiKSx0aGlzLnRleHRhcmVhU3R5bGUub3Zl'@;
put 'cmZsb3dZPSJ2aXNpYmxlIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0eT0iMCIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iMXB4IixjYSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpLFRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULFZQKX1zaG93'@;
put 'RWRpdGFibGVFbGVtZW50KCl7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3ZlcmZsb3c9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnBvc2l0aW9uPSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0'@;
put 'bCgpPyJsZWZ0IjoicmlnaHQiXT0iYXV0byIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjEiLHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSIiO2NvbnN0IGw9dGhpcy5URVhUQVJFQV9QQVJFTlQuY2hpbGROb2RlcztsZXQgYT0hMTskbyhsLmxlbmd0aC0xLGQ9Pntp'@;
put 'ZihwYShsW2RdLCJoYW5kc29udGFibGVFZGl0b3IiKSlyZXR1cm4gYT0hMCwhMX0pLHBhKHRoaXMuVEVYVEFSRUFfUEFSRU5ULFZQKSYmY2EodGhpcy5URVhUQVJFQV9QQVJFTlQsVlApLGE/KHRoaXMubGF5ZXJDbGFzcz0iaHRfZWRpdG9yX3Zpc2libGUiLFRpKHRoaXMuVEVYVEFSRUFfUEFS'@;
put 'RU5ULHRoaXMubGF5ZXJDbGFzcykpOih0aGlzLmxheWVyQ2xhc3M9dGhpcy5nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKSxUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpKX1yZWZyZXNoVmFsdWUoKXtjb25zdCBsPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codGhpcy5y'@;
put 'b3cpLGE9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChsLHRoaXMuY29sKTt0aGlzLm9yaWdpbmFsVmFsdWU9YSx0aGlzLnNldFZhbHVlKGEpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1yZWZyZXNoRGltZW5zaW9ucygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5zdGF0ZSE9PXN1LkVESVRJTkcmJiFsKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkKGx8fHRoaXMuY2xvc2UoKSk7Y29uc3R7dG9wOmEsc3RhcnQ6ZCx3aWR0aDpoLG1h'@;
put 'eFdpZHRoOmYsaGVpZ2h0OnYsbWF4SGVpZ2h0Ok19PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKTt0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUudG9wPWAke2F9cHhgLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHtkfXB4YCx0aGlz'@;
put 'LnNob3dFZGl0YWJsZUVsZW1lbnQoKTtjb25zdCBEPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLlREKTt0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRTaXplPUQuZm9udFNpemUsdGhpcy5URVhUQVJFQS5zdHlsZS5mb250RmFtaWx5PUQuZm9udEZhbWlseSx0aGlz'@;
put 'LlRFWFRBUkVBLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLlRELnN0eWxlLmJhY2tncm91bmRDb2xvcix0aGlzLmF1dG9SZXNpemUuaW5pdCh0aGlzLlRFWFRBUkVBLHttaW5XaWR0aDpNYXRoLm1pbihoLGYpLG1pbkhlaWdodDpNYXRoLm1pbih2LE0pLG1heFdpZHRoOmYsbWF4SGVpZ2h0'@;
put 'Ok19LCEwKX1iaW5kRXZlbnRzKCl7RCQoKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJmb2N1c291dCIsKCk9PnRoaXMuZmluaXNoRWRpdGluZyghMSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50aGlzLnJl'@;
put 'ZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnN0YXRlPT09c3Uu'@;
put 'RURJVElORyYmdGhpcy5mb2N1cygpfSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zdGF0ZT09PXN1LkVESVRJTkcmJnRoaXMuZm9jdXMoKX0pfWFsbG93S2V5RXZlbnRQcm9wYWdhdGlvbigpe31kZXN0cm95KCl7dGhp'@;
put 'cy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMuY2xlYXJIb29rcygpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKSxoPSgpPT57dGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKCJp'@;
put 'bnNlcnRUZXh0IiwhMSwiXG4iKX07YS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGgoKSwhMSkscnVuT25seUlmOmY9PiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpJiYhZi5hbHRLZXl9LHtrZXlzOltbIk1ldGEiLCJFbnRl'@;
put 'ciJdXSxjYWxsYmFjazooKT0+KGgoKSwhMSkscnVuT25seUlmOigpPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKX0se2tleXM6W1siQWx0IiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpfSx7a2V5czpbWyJIb21lIl1dLGNhbGxiYWNrOihmLHYpPT57bGV0W01dPXY7'@;
put 'd3BlKE0sdGhpcy5URVhUQVJFQSl9fSx7a2V5czpbWyJFbmQiXV0sY2FsbGJhY2s6KGYsdik9PntsZXRbTV09djt3cGUoTSx0aGlzLlRFWFRBUkVBKX19XSx7cnVuT25seUlmOigpPT5Gbyh0aGlzLmhvdC5nZXRTZWxlY3RlZCgpKSxncm91cDpDcGV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7'@;
put 'dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChDcGUpfX1mdW5jdGlvbiBvVChjLGwsYSxkLGgsZix2KXtjb25zdCBNPXYuYXJpYVRhZ3MsRD1bXSxaPVtdLG5lPVtdLGNlPVtdO3YuY2xhc3NOYW1lJiZUaShs'@;
put 'LHYuY2xhc3NOYW1lKSx2LnJlYWRPbmx5PyhELnB1c2godi5yZWFkT25seUNlbGxDbGFzc05hbWUpLE0mJmNlLnB1c2godzJlKCkpKTpNJiZuZS5wdXNoKHcyZSgpWzBdKSwhMT09PXYudmFsaWQmJnYuaW52YWxpZENlbGxDbGFzc05hbWU/KEQucHVzaCh2LmludmFsaWRDZWxsQ2xhc3NOYW1l'@;
put 'KSxNJiZjZS5wdXNoKEMyZSgpKSk6KFoucHVzaCh2LmludmFsaWRDZWxsQ2xhc3NOYW1lKSxNJiZuZS5wdXNoKEMyZSgpWzBdKSksITE9PT12LndvcmRXcmFwJiZ2Lm5vV29yZFdyYXBDbGFzc05hbWUmJkQucHVzaCh2Lm5vV29yZFdyYXBDbGFzc05hbWUpLCFmJiZ2LnBsYWNlaG9sZGVyJiZE'@;
put 'LnB1c2godi5wbGFjZWhvbGRlckNlbGxDbGFzc05hbWUpLGNhKGwsWiksVGkobCxEKSxWNyhsLG5lKSx2YShsLGNlKX1mdW5jdGlvbiBFZyhjLGwsYSxkLGgsZix2KXtvVC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSk7bGV0IE09ZjshTSYmdi5wbGFjZWhvbGRlciYmKE09di5wbGFjZWhv'@;
put 'bGRlciksTT1sYyhNKSx2LnRyaW1XaGl0ZXNwYWNlJiYoTT1NLnRyaW0oKSksT20obCxNKX1vVC5SRU5ERVJFUl9UWVBFPSJiYXNlIixFZy5SRU5ERVJFUl9UWVBFPSJ0ZXh0Ijtjb25zdCBTcGU9e0NFTExfVFlQRToidGV4dCIsZWRpdG9yOnI5LHJlbmRlcmVyOkVnfTtmdW5jdGlvbiBoMyhj'@;
put 'LGwpe2NvbnN0IGE9bmV3IHZwZShjLGx8fHt9LEVLKTtyZXR1cm4gYS5pbml0KCksYX1aMihTcGUpLGgzLmVkaXRvcnM9e0Jhc2VFZGl0b3I6a199LGgzLkNvcmU9ZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyB2cGUoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9h'@;
put 'cmd1bWVudHNbMV06e30sRUspfSxoMy5EZWZhdWx0U2V0dGluZ3M9SjNlKCksaDMuaG9va3M9TW8uZ2V0U2luZ2xldG9uKCksaDMuQ2VsbENvb3Jkcz1yUCxoMy5DZWxsUmFuZ2U9ZEssaDMucGFja2FnZU5hbWU9ImhhbmRzb250YWJsZSIsaDMuYnVpbGREYXRlPSIyNC8wNC8yMDI1IDEwOjU5'@;
put 'OjAwIixoMy52ZXJzaW9uPSIxNS4zLjAiLGgzLmxhbmd1YWdlcz17ZGljdGlvbmFyeUtleXM6Y3R0LGdldExhbmd1YWdlRGljdGlvbmFyeTpQM2UsZ2V0TGFuZ3VhZ2VzRGljdGlvbmFyaWVzOmZ1bmN0aW9uIHB0dCgpe3JldHVybiBodHQoKX0scmVnaXN0ZXJMYW5ndWFnZURpY3Rpb25hcnk6'@;
put 'TzNlLGdldFRyYW5zbGF0ZWRQaHJhc2U6RjNlfTtjb25zdCBpcz1oMyxyaXQ9WyJjb250YWluZXIiXSxUWD1uZXcgTWFwLE1wZT0iVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudCB3YXMgZGVzdHJveWVkIGFuZCBjYW5ub3QgYmUgdXNlZCBwcm9wZXJs'@;
put 'eS4iO2xldCBXbT0oKCk9PntjbGFzcyBje2dldEluc3RhbmNlKGEpe2NvbnN0IGQ9VFguZ2V0KGEpO3JldHVybiBkLmlzRGVzdHJveWVkPyhjb25zb2xlLndhcm4oTXBlKSxudWxsKTpkfXJlZ2lzdGVySW5zdGFuY2UoYSxkKXtyZXR1cm4gVFguc2V0KGEsZCl9cmVtb3ZlSW5zdGFuY2UoYSl7'@;
put 'cmV0dXJuIFRYLmRlbGV0ZShhKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y29uc3QgaWl0PU9iamVjdC5rZXlzKGlzLkRlZmF1bHRT'@;
put 'ZXR0aW5ncykseHBlPWlzLmhvb2tzLmdldFJlZ2lzdGVyZWQoKTtsZXQgRXBlPSgoKT0+e2NsYXNzIGN7bWVyZ2VTZXR0aW5ncyhhKXtjb25zdCBkPSJzZXR0aW5ncyJpbiBhJiYib2JqZWN0Ij09dHlwZW9mIGEuc2V0dGluZ3MsaD1kP2Euc2V0dGluZ3M6e307cmV0dXJuIHhwZS5jb25jYXQo'@;
put 'aWl0KS5mb3JFYWNoKHY9Pntjb25zdCBNPXhwZS5pbmRleE9mKHYpPi0xO2xldCBEO2QmJk0mJihEPWEuc2V0dGluZ3Nbdl0pLHZvaWQgMCE9PWFbdl0mJihEPWFbdl0pLHZvaWQgMCE9PUQmJihoW3ZdPSJuZ1pvbmUiaW4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIEQmJk0/ZnVuY3Rpb24oLi4u'@;
put 'Wil7cmV0dXJuIGEubmdab25lLnJ1bigoKT0+RC5hcHBseSh0aGlzLFopKX06RCl9KSxofXByZXBhcmVDaGFuZ2VzKGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGEpLmZvckVhY2goZj0+e2EuaGFzT3duUHJvcGVydHkoZikmJihkW2ZdPWFbZl0uY3VycmVudFZhbHVlKX0pLGR9'@;
put 'c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpLERfPSgoKT0+e2NsYXNzIGN7X2hvdFRhYmxlUmVnaXN0ZXJlcjtfaG90U2V0dGluZ3NSZXNv'@;
put 'bHZlcjtuZ1pvbmU7Y29udGFpbmVyO19faG90SW5zdGFuY2U9bnVsbDtjb2x1bW5zQ29tcG9uZW50cz1bXTtzZXR0aW5ncztob3RJZD0iIjthY3RpdmVIZWFkZXJDbGFzc05hbWU7YWxsb3dFbXB0eTthbGxvd0h0bWw7YWxsb3dJbnNlcnRDb2x1bW47YWxsb3dJbnNlcnRSb3c7YWxsb3dJbnZh'@;
put 'bGlkO2FsbG93UmVtb3ZlQ29sdW1uO2FsbG93UmVtb3ZlUm93O2FyaWFUYWdzO2F1dG9Db2x1bW5TaXplO2F1dG9Sb3dTaXplO2F1dG9XcmFwQ29sO2F1dG9XcmFwUm93O2JpbmRSb3dzV2l0aEhlYWRlcnM7Y2VsbDtjZWxscztjaGVja2VkVGVtcGxhdGU7Y2xhc3NOYW1lO2NvbEhlYWRlcnM7'@;
put 'Y29sbGFwc2libGVDb2x1bW5zO2NvbHVtbkhlYWRlckhlaWdodDtjb2x1bW5zO2NvbHVtblNvcnRpbmc7Y29sdW1uU3VtbWFyeTtjb2xXaWR0aHM7Y29tbWVudGVkQ2VsbENsYXNzTmFtZTtjb21tZW50cztjb250ZXh0TWVudTtjb3B5YWJsZTtjb3B5UGFzdGU7Y29ycmVjdEZvcm1hdDtjdXJy'@;
put 'ZW50Q29sQ2xhc3NOYW1lO2N1cnJlbnRIZWFkZXJDbGFzc05hbWU7Y3VycmVudFJvd0NsYXNzTmFtZTtjdXN0b21Cb3JkZXJzO2RhdGE7ZGF0YURvdE5vdGF0aW9uO2RhdGFTY2hlbWE7ZGF0ZUZvcm1hdDtkYXRlUGlja2VyQ29uZmlnO2RlZmF1bHREYXRlO3RhYk5hdmlnYXRpb247dGhlbWVO'@;
put 'YW1lO2Rpc2FibGVWaXN1YWxTZWxlY3Rpb247ZHJhZ1RvU2Nyb2xsO2Ryb3Bkb3duTWVudTtlZGl0b3I7ZW50ZXJCZWdpbnNFZGl0aW5nO2VudGVyTW92ZXM7ZmlsbEhhbmRsZTtmaWx0ZXI7ZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTtmaWx0ZXJzO2ZpeGVkQ29sdW1uc0xlZnQ7Zml4ZWRDb2x1'@;
put 'bW5zU3RhcnQ7Zml4ZWRSb3dzQm90dG9tO2ZpeGVkUm93c1RvcDtmb3JtdWxhcztmcmFnbWVudFNlbGVjdGlvbjtoZWFkZXJDbGFzc05hbWU7aGVpZ2h0O2hpZGRlbkNvbHVtbnM7aGlkZGVuUm93cztpbnZhbGlkQ2VsbENsYXNzTmFtZTtpbWVGYXN0RWRpdDtsYWJlbDtsYW5ndWFnZTtsYXlv'@;
put 'dXREaXJlY3Rpb247bGljZW5zZUtleTtsb2NhbGU7bWFudWFsQ29sdW1uRnJlZXplO21hbnVhbENvbHVtbk1vdmU7bWFudWFsQ29sdW1uUmVzaXplO21hbnVhbFJvd01vdmU7bWFudWFsUm93UmVzaXplO21heENvbHM7bWF4Um93czttZXJnZUNlbGxzO21pbkNvbHM7bWluUm93czttaW5TcGFy'@;
put 'ZUNvbHM7bWluU3BhcmVSb3dzO211bHRpQ29sdW1uU29ydGluZztuYXZpZ2FibGVIZWFkZXJzO25lc3RlZEhlYWRlcnM7bmVzdGVkUm93cztub1dvcmRXcmFwQ2xhc3NOYW1lO251bWVyaWNGb3JtYXQ7b2JzZXJ2ZURPTVZpc2liaWxpdHk7b3V0c2lkZUNsaWNrRGVzZWxlY3RzO3BlcnNpc3Rl'@;
put 'bnRTdGF0ZTtwbGFjZWhvbGRlcjtwbGFjZWhvbGRlckNlbGxDbGFzc05hbWU7cHJldmVudE92ZXJmbG93O3ByZXZlbnRXaGVlbDtyZWFkT25seTtyZWFkT25seUNlbGxDbGFzc05hbWU7cmVuZGVyQWxsQ29sdW1ucztyZW5kZXJBbGxSb3dzO3JlbmRlcmVyO3Jvd0hlYWRlcnM7cm93SGVhZGVy'@;
put 'V2lkdGg7cm93SGVpZ2h0cztzZWFyY2g7c2VsZWN0aW9uTW9kZTtzZWxlY3RPcHRpb25zO3NraXBDb2x1bW5PblBhc3RlO3NraXBSb3dPblBhc3RlO3NvcnRCeVJlbGV2YW5jZTtzb3VyY2U7c3RhcnRDb2xzO3N0YXJ0Um93cztzdHJldGNoSDtzdHJpY3Q7dGFibGVDbGFzc05hbWU7dGFiTW92'@;
put 'ZXM7dGl0bGU7dHJpbURyb3Bkb3duO3RyaW1Sb3dzO3RyaW1XaGl0ZXNwYWNlO3R5cGU7dW5jaGVja2VkVGVtcGxhdGU7dW5kbzt2YWxpZGF0b3I7dmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ7dmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ7dmlzaWJsZVJvd3M7d2lkdGg7d29yZFdy'@;
put 'YXA7YWZ0ZXJBZGRDaGlsZDthZnRlckF1dG9maWxsO2FmdGVyQmVnaW5FZGl0aW5nO2FmdGVyQ2VsbE1ldGFSZXNldDthZnRlckNoYW5nZTthZnRlckNoYW5nZXNPYnNlcnZlZDthZnRlckNvbHVtbkNvbGxhcHNlO2FmdGVyQ29sdW1uRXhwYW5kO2FmdGVyQ29sdW1uRnJlZXplO2FmdGVyQ29s'@;
put 'dW1uTW92ZTthZnRlckNvbHVtblJlc2l6ZTthZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlO2FmdGVyQ29sdW1uU29ydDthZnRlckNvbHVtblVuZnJlZXplO2FmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uczthZnRlckNvbnRleHRNZW51SGlkZTthZnRlckNvbnRleHRNZW51U2hvdzthZnRl'@;
put 'ckNvcHk7YWZ0ZXJDb3B5TGltaXQ7YWZ0ZXJDcmVhdGVDb2w7YWZ0ZXJDcmVhdGVSb3c7YWZ0ZXJDdXQ7YWZ0ZXJEZXNlbGVjdDthZnRlckRlc3Ryb3k7YWZ0ZXJEZXRhY2hDaGlsZDthZnRlckRvY3VtZW50S2V5RG93bjthZnRlckRyYXdTZWxlY3Rpb247YWZ0ZXJEcm9wZG93bk1lbnVEZWZh'@;
put 'dWx0T3B0aW9uczthZnRlckRyb3Bkb3duTWVudUhpZGU7YWZ0ZXJEcm9wZG93bk1lbnVTaG93O2FmdGVyRmlsdGVyO2FmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGU7YWZ0ZXJHZXRDZWxsTWV0YTthZnRlckdldENvbEhlYWRlcjthZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVyczthZnRlckdl'@;
put 'dFJvd0hlYWRlcjthZnRlckdldFJvd0hlYWRlclJlbmRlcmVyczthZnRlckhpZGVDb2x1bW5zO2FmdGVySGlkZVJvd3M7YWZ0ZXJJbml0O2FmdGVyTGFuZ3VhZ2VDaGFuZ2U7YWZ0ZXJMaXN0ZW47YWZ0ZXJMb2FkRGF0YTthZnRlck1lcmdlQ2VsbHM7YWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQ7'@;
put 'YWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1czthZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0O2FmdGVyTW9tZW50dW1TY3JvbGw7YWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZDthZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQ7YWZ0ZXJPbkNlbGxDb250ZXh0TWVudTthZnRlck9uQ2VsbENvcm5l'@;
put 'ckRibENsaWNrO2FmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duO2FmdGVyT25DZWxsTW91c2VEb3duO2FmdGVyT25DZWxsTW91c2VPdXQ7YWZ0ZXJPbkNlbGxNb3VzZU92ZXI7YWZ0ZXJPbkNlbGxNb3VzZVVwO2FmdGVyUGFzdGU7YWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQ7YWZ0ZXJSZWRvO2Fm'@;
put 'dGVyUmVkb1N0YWNrQ2hhbmdlO2FmdGVyUmVmcmVzaERpbWVuc2lvbnM7YWZ0ZXJSZW1vdmVDZWxsTWV0YTthZnRlclJlbW92ZUNvbDthZnRlclJlbW92ZVJvdzthZnRlclJlbmRlcjthZnRlclJlbmRlcmVyO2FmdGVyUm93TW92ZTthZnRlclJvd1Jlc2l6ZTthZnRlclJvd1NlcXVlbmNlQ2hh'@;
put 'bmdlO2FmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5O2FmdGVyU2Nyb2xsVmVydGljYWxseTthZnRlclNjcm9sbDthZnRlclNlbGVjdENvbHVtbnM7YWZ0ZXJTZWxlY3Rpb247YWZ0ZXJTZWxlY3Rpb25CeVByb3A7YWZ0ZXJTZWxlY3Rpb25FbmQ7YWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3A7YWZ0ZXJT'@;
put 'ZWxlY3Rpb25Gb2N1c1NldDthZnRlclNlbGVjdFJvd3M7YWZ0ZXJTZXRDZWxsTWV0YTthZnRlclNldERhdGFBdENlbGw7YWZ0ZXJTZXREYXRhQXRSb3dQcm9wO2FmdGVyU2V0U291cmNlRGF0YUF0Q2VsbDthZnRlclNldFRoZW1lO2FmdGVyU2hlZXRBZGRlZDthZnRlclNoZWV0UmVuYW1lZDth'@;
put 'ZnRlclNoZWV0UmVtb3ZlZDthZnRlclRyaW1Sb3c7YWZ0ZXJVbmRvO2FmdGVyVW5kb1N0YWNrQ2hhbmdlO2FmdGVyVW5oaWRlQ29sdW1uczthZnRlclVuaGlkZVJvd3M7YWZ0ZXJVbmxpc3RlbjthZnRlclVubWVyZ2VDZWxsczthZnRlclVudHJpbVJvdzthZnRlclVwZGF0ZURhdGE7YWZ0ZXJV'@;
put 'cGRhdGVTZXR0aW5nczthZnRlclZhbGlkYXRlO2FmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU7YWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTthZnRlclZpZXdSZW5kZXI7YmVmb3JlQWRkQ2hpbGQ7YmVmb3JlQXV0b2ZpbGw7YmVmb3JlQmVnaW5FZGl0aW5n'@;
put 'O2JlZm9yZUNlbGxBbGlnbm1lbnQ7YmVmb3JlQ2hhbmdlO2JlZm9yZUNoYW5nZVJlbmRlcjtiZWZvcmVDb2x1bW5Db2xsYXBzZTtiZWZvcmVDb2x1bW5FeHBhbmQ7YmVmb3JlQ29sdW1uRnJlZXplO2JlZm9yZUNvbHVtbk1vdmU7YmVmb3JlQ29sdW1uUmVzaXplO2JlZm9yZUNvbHVtblNvcnQ7'@;
put 'YmVmb3JlQ29sdW1uV3JhcDtiZWZvcmVDb2x1bW5VbmZyZWV6ZTtiZWZvcmVDb21wb3NpdGlvblN0YXJ0O2JlZm9yZUNvbnRleHRNZW51U2V0SXRlbXM7YmVmb3JlQ29udGV4dE1lbnVTaG93O2JlZm9yZUNvcHk7YmVmb3JlQ3JlYXRlQ29sO2JlZm9yZUNyZWF0ZVJvdztiZWZvcmVDdXQ7YmVm'@;
put 'b3JlRGV0YWNoQ2hpbGQ7YmVmb3JlRHJhd0JvcmRlcnM7YmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXM7YmVmb3JlRHJvcGRvd25NZW51U2hvdztiZWZvcmVGaWx0ZXI7YmVmb3JlR2V0Q2VsbE1ldGE7YmVmb3JlSGlkZUNvbHVtbnM7YmVmb3JlSGlkZVJvd3M7YmVmb3JlSGlnaGxpZ2h0aW5n'@;
put 'Q29sdW1uSGVhZGVyO2JlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjtiZWZvcmVJbml0O2JlZm9yZUluaXRXYWxrb250YWJsZTtiZWZvcmVLZXlEb3duO2JlZm9yZUxhbmd1YWdlQ2hhbmdlO2JlZm9yZUxvYWREYXRhO2JlZm9yZU1lcmdlQ2VsbHM7YmVmb3JlT25DZWxsQ29udGV4dE1lbnU7'@;
put 'YmVmb3JlT25DZWxsTW91c2VEb3duO2JlZm9yZU9uQ2VsbE1vdXNlT3V0O2JlZm9yZU9uQ2VsbE1vdXNlT3ZlcjtiZWZvcmVPbkNlbGxNb3VzZVVwO2JlZm9yZVBhc3RlO2JlZm9yZVJlZG87YmVmb3JlUmVkb1N0YWNrQ2hhbmdlO2JlZm9yZVJlZnJlc2hEaW1lbnNpb25zO2JlZm9yZVJlbW92'@;
put 'ZUNlbGxDbGFzc05hbWVzO2JlZm9yZVJlbW92ZUNlbGxNZXRhO2JlZm9yZVJlbW92ZUNvbDtiZWZvcmVSZW1vdmVSb3c7YmVmb3JlUmVuZGVyO2JlZm9yZVJlbmRlcmVyO2JlZm9yZVJvd01vdmU7YmVmb3JlUm93UmVzaXplO2JlZm9yZVJvd1dyYXA7YmVmb3JlU2VsZWN0Q29sdW1ucztiZWZv'@;
put 'cmVTZWxlY3Rpb25Gb2N1c1NldDtiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQ7YmVmb3JlU2VsZWN0Um93cztiZWZvcmVTZXRDZWxsTWV0YTtiZWZvcmVTZXRSYW5nZUVuZDtiZWZvcmVTZXRSYW5nZVN0YXJ0O2JlZm9yZVNldFJhbmdlU3RhcnRPbmx5O2JlZm9yZVN0cmV0Y2hpbmdDb2x1'@;
put 'bW5XaWR0aDtiZWZvcmVUb3VjaFNjcm9sbDtiZWZvcmVUcmltUm93O2JlZm9yZVVuZG87YmVmb3JlVW5kb1N0YWNrQ2hhbmdlO2JlZm9yZVVuaGlkZUNvbHVtbnM7YmVmb3JlVW5oaWRlUm93cztiZWZvcmVVbm1lcmdlQ2VsbHM7YmVmb3JlVW50cmltUm93O2JlZm9yZVVwZGF0ZURhdGE7YmVm'@;
put 'b3JlVmFsaWRhdGU7YmVmb3JlVmFsdWVSZW5kZXI7YmVmb3JlVmlld3BvcnRTY3JvbGw7YmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHk7YmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5O2JlZm9yZVZpZXdSZW5kZXI7Y29uc3RydWN0O2luaXQ7bW9kaWZ5QXV0b0NvbHVtblNp'@;
put 'emVTZWVkO21vZGlmeUF1dG9maWxsUmFuZ2U7bW9kaWZ5Q29sSGVhZGVyO21vZGlmeUNvbHVtbkhlYWRlckhlaWdodDttb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZTttb2RpZnlDb2xXaWR0aDttb2RpZnlDb3B5YWJsZVJhbmdlO21vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlO21vZGlmeUZv'@;
put 'Y3VzZWRFbGVtZW50O21vZGlmeURhdGE7bW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb247bW9kaWZ5R2V0Q2VsbENvb3Jkczttb2RpZnlHZXRDb29yZHNFbGVtZW50O21vZGlmeVJvd0RhdGE7bW9kaWZ5Um93SGVhZGVyO21vZGlmeVJvd0hlYWRlcldpZHRoO21vZGlmeVJvd0hlaWdodDttb2Rp'@;
put 'ZnlSb3dIZWlnaHRCeU92ZXJsYXlOYW1lO21vZGlmeVNvdXJjZURhdGE7bW9kaWZ5VHJhbnNmb3JtRW5kO21vZGlmeVRyYW5zZm9ybUZvY3VzO21vZGlmeVRyYW5zZm9ybVN0YXJ0O3BlcnNpc3RlbnRTdGF0ZUxvYWQ7cGVyc2lzdGVudFN0YXRlUmVzZXQ7cGVyc2lzdGVudFN0YXRlU2F2ZTtj'@;
put 'b25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5faG90VGFibGVSZWdpc3RlcmVyPWEsdGhpcy5faG90U2V0dGluZ3NSZXNvbHZlcj1kLHRoaXMubmdab25lPWh9Z2V0IGhvdEluc3RhbmNlKCl7cmV0dXJuIXRoaXMuX19ob3RJbnN0YW5jZXx8dGhpcy5fX2hvdEluc3RhbmNlJiYhdGhpcy5fX2hvdElu'@;
put 'c3RhbmNlLmlzRGVzdHJveWVkP3RoaXMuX19ob3RJbnN0YW5jZToodGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlbW92ZUluc3RhbmNlKHRoaXMuaG90SWQpLGNvbnNvbGUud2FybihNcGUpLG51bGwpfXNldCBob3RJbnN0YW5jZShhKXt0aGlzLl9faG90SW5zdGFuY2U9YX1uZ0FmdGVyVmll'@;
put 'd0luaXQoKXtjb25zdCBhPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyh0aGlzKTtpZih0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0aD4wKXtjb25zdCBkPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57ZC5wdXNoKHRoaXMuX2hvdFNldHRp'@;
put 'bmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhoKSl9KSxhLmNvbHVtbnM9ZH10aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2U9bmV3IGlzLkNvcmUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCxhKSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RUYWJs'@;
put 'ZVJlZ2lzdGVyZXIucmVnaXN0ZXJJbnN0YW5jZSh0aGlzLmhvdElkLHRoaXMuaG90SW5zdGFuY2UpLHRoaXMuaG90SW5zdGFuY2UuaW5pdCgpfSl9bmdPbkNoYW5nZXMoYSl7aWYobnVsbD09PXRoaXMuaG90SW5zdGFuY2UpcmV0dXJuO2NvbnN0IGQ9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZl'@;
put 'ci5wcmVwYXJlQ2hhbmdlcyhhKTt0aGlzLnVwZGF0ZUhvdFRhYmxlKGQpfW5nT25EZXN0cm95KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3RhbmNlLmRlc3Ryb3koKX0pLHRoaXMuaG90SWQmJnRoaXMuX2hvdFRhYmxl'@;
put 'UmVnaXN0ZXJlci5yZW1vdmVJbnN0YW5jZSh0aGlzLmhvdElkKX11cGRhdGVIb3RUYWJsZShhKXt0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3MoYSwhMSl9KX1vbkFmdGVyQ29sdW1uc0No'@;
put 'YW5nZSgpe2lmKHZvaWQgMCE9PXRoaXMuY29sdW1uc0NvbXBvbmVudHMmJnRoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjApe2NvbnN0IGE9W107dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGg9PnthLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRp'@;
put 'bmdzKGgpKX0pLHRoaXMudXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfX1vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpe2NvbnN0IGE9W107dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5sZW5ndGg+MCYmdGhpcy5jb2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGQ9PnthLnB1c2godGhpcy5f'@;
put 'aG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGQpKX0pLHRoaXMudXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfWFkZENvbHVtbihhKXt0aGlzLmNvbHVtbnNDb21wb25lbnRzLnB1c2goYSksdGhpcy5vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpfXJlbW92ZUNvbHVtbihh'@;
put 'KXtjb25zdCBkPXRoaXMuY29sdW1uc0NvbXBvbmVudHMuaW5kZXhPZihhKTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLnNwbGljZShkLDEpLHRoaXMub25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2UoKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoV20p'@;
put 'LEdlKEVwZSksR2UoWW8pKX07c3RhdGljIFx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJob3QtdGFibGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZuYShyaXQsNSksMiZkKXtsZXQgZjt4aShmPUVpKCkpJiYoaC5jb250YWluZXI9Zi5maXJzdCl9fSxpbnB1'@;
put 'dHM6e3NldHRpbmdzOiJzZXR0aW5ncyIsaG90SWQ6ImhvdElkIixhY3RpdmVIZWFkZXJDbGFzc05hbWU6ImFjdGl2ZUhlYWRlckNsYXNzTmFtZSIsYWxsb3dFbXB0eToiYWxsb3dFbXB0eSIsYWxsb3dIdG1sOiJhbGxvd0h0bWwiLGFsbG93SW5zZXJ0Q29sdW1uOiJhbGxvd0luc2VydENvbHVt'@;
put 'biIsYWxsb3dJbnNlcnRSb3c6ImFsbG93SW5zZXJ0Um93IixhbGxvd0ludmFsaWQ6ImFsbG93SW52YWxpZCIsYWxsb3dSZW1vdmVDb2x1bW46ImFsbG93UmVtb3ZlQ29sdW1uIixhbGxvd1JlbW92ZVJvdzoiYWxsb3dSZW1vdmVSb3ciLGFyaWFUYWdzOiJhcmlhVGFncyIsYXV0b0NvbHVtblNp'@;
put 'emU6ImF1dG9Db2x1bW5TaXplIixhdXRvUm93U2l6ZToiYXV0b1Jvd1NpemUiLGF1dG9XcmFwQ29sOiJhdXRvV3JhcENvbCIsYXV0b1dyYXBSb3c6ImF1dG9XcmFwUm93IixiaW5kUm93c1dpdGhIZWFkZXJzOiJiaW5kUm93c1dpdGhIZWFkZXJzIixjZWxsOiJjZWxsIixjZWxsczoiY2VsbHMi'@;
put 'LGNoZWNrZWRUZW1wbGF0ZToiY2hlY2tlZFRlbXBsYXRlIixjbGFzc05hbWU6ImNsYXNzTmFtZSIsY29sSGVhZGVyczoiY29sSGVhZGVycyIsY29sbGFwc2libGVDb2x1bW5zOiJjb2xsYXBzaWJsZUNvbHVtbnMiLGNvbHVtbkhlYWRlckhlaWdodDoiY29sdW1uSGVhZGVySGVpZ2h0Iixjb2x1'@;
put 'bW5zOiJjb2x1bW5zIixjb2x1bW5Tb3J0aW5nOiJjb2x1bW5Tb3J0aW5nIixjb2x1bW5TdW1tYXJ5OiJjb2x1bW5TdW1tYXJ5Iixjb2xXaWR0aHM6ImNvbFdpZHRocyIsY29tbWVudGVkQ2VsbENsYXNzTmFtZToiY29tbWVudGVkQ2VsbENsYXNzTmFtZSIsY29tbWVudHM6ImNvbW1lbnRzIixj'@;
put 'b250ZXh0TWVudToiY29udGV4dE1lbnUiLGNvcHlhYmxlOiJjb3B5YWJsZSIsY29weVBhc3RlOiJjb3B5UGFzdGUiLGNvcnJlY3RGb3JtYXQ6ImNvcnJlY3RGb3JtYXQiLGN1cnJlbnRDb2xDbGFzc05hbWU6ImN1cnJlbnRDb2xDbGFzc05hbWUiLGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1'@;
put 'cnJlbnRIZWFkZXJDbGFzc05hbWUiLGN1cnJlbnRSb3dDbGFzc05hbWU6ImN1cnJlbnRSb3dDbGFzc05hbWUiLGN1c3RvbUJvcmRlcnM6ImN1c3RvbUJvcmRlcnMiLGRhdGE6ImRhdGEiLGRhdGFEb3ROb3RhdGlvbjoiZGF0YURvdE5vdGF0aW9uIixkYXRhU2NoZW1hOiJkYXRhU2NoZW1hIixk'@;
put 'YXRlRm9ybWF0OiJkYXRlRm9ybWF0IixkYXRlUGlja2VyQ29uZmlnOiJkYXRlUGlja2VyQ29uZmlnIixkZWZhdWx0RGF0ZToiZGVmYXVsdERhdGUiLHRhYk5hdmlnYXRpb246InRhYk5hdmlnYXRpb24iLHRoZW1lTmFtZToidGhlbWVOYW1lIixkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJkaXNh'@;
put 'YmxlVmlzdWFsU2VsZWN0aW9uIixkcmFnVG9TY3JvbGw6ImRyYWdUb1Njcm9sbCIsZHJvcGRvd25NZW51OiJkcm9wZG93bk1lbnUiLGVkaXRvcjoiZWRpdG9yIixlbnRlckJlZ2luc0VkaXRpbmc6ImVudGVyQmVnaW5zRWRpdGluZyIsZW50ZXJNb3ZlczoiZW50ZXJNb3ZlcyIsZmlsbEhhbmRs'@;
put 'ZToiZmlsbEhhbmRsZSIsZmlsdGVyOiJmaWx0ZXIiLGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6ImZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLGZpbHRlcnM6ImZpbHRlcnMiLGZpeGVkQ29sdW1uc0xlZnQ6ImZpeGVkQ29sdW1uc0xlZnQiLGZpeGVkQ29sdW1uc1N0YXJ0OiJmaXhlZENvbHVtbnNT'@;
put 'dGFydCIsZml4ZWRSb3dzQm90dG9tOiJmaXhlZFJvd3NCb3R0b20iLGZpeGVkUm93c1RvcDoiZml4ZWRSb3dzVG9wIixmb3JtdWxhczoiZm9ybXVsYXMiLGZyYWdtZW50U2VsZWN0aW9uOiJmcmFnbWVudFNlbGVjdGlvbiIsaGVhZGVyQ2xhc3NOYW1lOiJoZWFkZXJDbGFzc05hbWUiLGhlaWdo'@;
put 'dDoiaGVpZ2h0IixoaWRkZW5Db2x1bW5zOiJoaWRkZW5Db2x1bW5zIixoaWRkZW5Sb3dzOiJoaWRkZW5Sb3dzIixpbnZhbGlkQ2VsbENsYXNzTmFtZToiaW52YWxpZENlbGxDbGFzc05hbWUiLGltZUZhc3RFZGl0OiJpbWVGYXN0RWRpdCIsbGFiZWw6ImxhYmVsIixsYW5ndWFnZToibGFuZ3Vh'@;
put 'Z2UiLGxheW91dERpcmVjdGlvbjoibGF5b3V0RGlyZWN0aW9uIixsaWNlbnNlS2V5OiJsaWNlbnNlS2V5Iixsb2NhbGU6ImxvY2FsZSIsbWFudWFsQ29sdW1uRnJlZXplOiJtYW51YWxDb2x1bW5GcmVlemUiLG1hbnVhbENvbHVtbk1vdmU6Im1hbnVhbENvbHVtbk1vdmUiLG1hbnVhbENvbHVt'@;
put 'blJlc2l6ZToibWFudWFsQ29sdW1uUmVzaXplIixtYW51YWxSb3dNb3ZlOiJtYW51YWxSb3dNb3ZlIixtYW51YWxSb3dSZXNpemU6Im1hbnVhbFJvd1Jlc2l6ZSIsbWF4Q29sczoibWF4Q29scyIsbWF4Um93czoibWF4Um93cyIsbWVyZ2VDZWxsczoibWVyZ2VDZWxscyIsbWluQ29sczoibWlu'@;
put 'Q29scyIsbWluUm93czoibWluUm93cyIsbWluU3BhcmVDb2xzOiJtaW5TcGFyZUNvbHMiLG1pblNwYXJlUm93czoibWluU3BhcmVSb3dzIixtdWx0aUNvbHVtblNvcnRpbmc6Im11bHRpQ29sdW1uU29ydGluZyIsbmF2aWdhYmxlSGVhZGVyczoibmF2aWdhYmxlSGVhZGVycyIsbmVzdGVkSGVh'@;
put 'ZGVyczoibmVzdGVkSGVhZGVycyIsbmVzdGVkUm93czoibmVzdGVkUm93cyIsbm9Xb3JkV3JhcENsYXNzTmFtZToibm9Xb3JkV3JhcENsYXNzTmFtZSIsbnVtZXJpY0Zvcm1hdDoibnVtZXJpY0Zvcm1hdCIsb2JzZXJ2ZURPTVZpc2liaWxpdHk6Im9ic2VydmVET01WaXNpYmlsaXR5IixvdXRz'@;
put 'aWRlQ2xpY2tEZXNlbGVjdHM6Im91dHNpZGVDbGlja0Rlc2VsZWN0cyIscGVyc2lzdGVudFN0YXRlOiJwZXJzaXN0ZW50U3RhdGUiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIscGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lOiJwbGFjZWhvbGRlckNlbGxDbGFzc05hbWUiLHByZXZlbnRPdmVy'@;
put 'ZmxvdzoicHJldmVudE92ZXJmbG93IixwcmV2ZW50V2hlZWw6InByZXZlbnRXaGVlbCIscmVhZE9ubHk6InJlYWRPbmx5IixyZWFkT25seUNlbGxDbGFzc05hbWU6InJlYWRPbmx5Q2VsbENsYXNzTmFtZSIscmVuZGVyQWxsQ29sdW1uczoicmVuZGVyQWxsQ29sdW1ucyIscmVuZGVyQWxsUm93'@;
put 'czoicmVuZGVyQWxsUm93cyIscmVuZGVyZXI6InJlbmRlcmVyIixyb3dIZWFkZXJzOiJyb3dIZWFkZXJzIixyb3dIZWFkZXJXaWR0aDoicm93SGVhZGVyV2lkdGgiLHJvd0hlaWdodHM6InJvd0hlaWdodHMiLHNlYXJjaDoic2VhcmNoIixzZWxlY3Rpb25Nb2RlOiJzZWxlY3Rpb25Nb2RlIixz'@;
put 'ZWxlY3RPcHRpb25zOiJzZWxlY3RPcHRpb25zIixza2lwQ29sdW1uT25QYXN0ZToic2tpcENvbHVtbk9uUGFzdGUiLHNraXBSb3dPblBhc3RlOiJza2lwUm93T25QYXN0ZSIsc29ydEJ5UmVsZXZhbmNlOiJzb3J0QnlSZWxldmFuY2UiLHNvdXJjZToic291cmNlIixzdGFydENvbHM6InN0YXJ0'@;
put 'Q29scyIsc3RhcnRSb3dzOiJzdGFydFJvd3MiLHN0cmV0Y2hIOiJzdHJldGNoSCIsc3RyaWN0OiJzdHJpY3QiLHRhYmxlQ2xhc3NOYW1lOiJ0YWJsZUNsYXNzTmFtZSIsdGFiTW92ZXM6InRhYk1vdmVzIix0aXRsZToidGl0bGUiLHRyaW1Ecm9wZG93bjoidHJpbURyb3Bkb3duIix0cmltUm93'@;
put 'czoidHJpbVJvd3MiLHRyaW1XaGl0ZXNwYWNlOiJ0cmltV2hpdGVzcGFjZSIsdHlwZToidHlwZSIsdW5jaGVja2VkVGVtcGxhdGU6InVuY2hlY2tlZFRlbXBsYXRlIix1bmRvOiJ1bmRvIix2YWxpZGF0b3I6InZhbGlkYXRvciIsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6InZpZXdw'@;
put 'b3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0Iix2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDoidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLHZpc2libGVSb3dzOiJ2aXNpYmxlUm93cyIsd2lkdGg6IndpZHRoIix3b3JkV3JhcDoid29yZFdyYXAiLGFmdGVyQWRkQ2hpbGQ6ImFmdGVyQWRk'@;
put 'Q2hpbGQiLGFmdGVyQXV0b2ZpbGw6ImFmdGVyQXV0b2ZpbGwiLGFmdGVyQmVnaW5FZGl0aW5nOiJhZnRlckJlZ2luRWRpdGluZyIsYWZ0ZXJDZWxsTWV0YVJlc2V0OiJhZnRlckNlbGxNZXRhUmVzZXQiLGFmdGVyQ2hhbmdlOiJhZnRlckNoYW5nZSIsYWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQ6ImFm'@;
put 'dGVyQ2hhbmdlc09ic2VydmVkIixhZnRlckNvbHVtbkNvbGxhcHNlOiJhZnRlckNvbHVtbkNvbGxhcHNlIixhZnRlckNvbHVtbkV4cGFuZDoiYWZ0ZXJDb2x1bW5FeHBhbmQiLGFmdGVyQ29sdW1uRnJlZXplOiJhZnRlckNvbHVtbkZyZWV6ZSIsYWZ0ZXJDb2x1bW5Nb3ZlOiJhZnRlckNvbHVt'@;
put 'bk1vdmUiLGFmdGVyQ29sdW1uUmVzaXplOiJhZnRlckNvbHVtblJlc2l6ZSIsYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZToiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJDb2x1bW5Tb3J0OiJhZnRlckNvbHVtblNvcnQiLGFmdGVyQ29sdW1uVW5mcmVlemU6ImFmdGVyQ29sdW1u'@;
put 'VW5mcmVlemUiLGFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uczoiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixhZnRlckNvbnRleHRNZW51SGlkZToiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLGFmdGVyQ29udGV4dE1lbnVTaG93OiJhZnRlckNvbnRleHRNZW51U2hvdyIsYWZ0'@;
put 'ZXJDb3B5OiJhZnRlckNvcHkiLGFmdGVyQ29weUxpbWl0OiJhZnRlckNvcHlMaW1pdCIsYWZ0ZXJDcmVhdGVDb2w6ImFmdGVyQ3JlYXRlQ29sIixhZnRlckNyZWF0ZVJvdzoiYWZ0ZXJDcmVhdGVSb3ciLGFmdGVyQ3V0OiJhZnRlckN1dCIsYWZ0ZXJEZXNlbGVjdDoiYWZ0ZXJEZXNlbGVjdCIs'@;
put 'YWZ0ZXJEZXN0cm95OiJhZnRlckRlc3Ryb3kiLGFmdGVyRGV0YWNoQ2hpbGQ6ImFmdGVyRGV0YWNoQ2hpbGQiLGFmdGVyRG9jdW1lbnRLZXlEb3duOiJhZnRlckRvY3VtZW50S2V5RG93biIsYWZ0ZXJEcmF3U2VsZWN0aW9uOiJhZnRlckRyYXdTZWxlY3Rpb24iLGFmdGVyRHJvcGRvd25NZW51'@;
put 'RGVmYXVsdE9wdGlvbnM6ImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGFmdGVyRHJvcGRvd25NZW51SGlkZToiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIixhZnRlckRyb3Bkb3duTWVudVNob3c6ImFmdGVyRHJvcGRvd25NZW51U2hvdyIsYWZ0ZXJGaWx0ZXI6ImFmdGVyRmlsdGVy'@;
put 'IixhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlOiJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixhZnRlckdldENlbGxNZXRhOiJhZnRlckdldENlbGxNZXRhIixhZnRlckdldENvbEhlYWRlcjoiYWZ0ZXJHZXRDb2xIZWFkZXIiLGFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzOiJhZnRl'@;
put 'ckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsYWZ0ZXJHZXRSb3dIZWFkZXI6ImFmdGVyR2V0Um93SGVhZGVyIixhZnRlckdldFJvd0hlYWRlclJlbmRlcmVyczoiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLGFmdGVySGlkZUNvbHVtbnM6ImFmdGVySGlkZUNvbHVtbnMiLGFmdGVySGlk'@;
put 'ZVJvd3M6ImFmdGVySGlkZVJvd3MiLGFmdGVySW5pdDoiYWZ0ZXJJbml0IixhZnRlckxhbmd1YWdlQ2hhbmdlOiJhZnRlckxhbmd1YWdlQ2hhbmdlIixhZnRlckxpc3RlbjoiYWZ0ZXJMaXN0ZW4iLGFmdGVyTG9hZERhdGE6ImFmdGVyTG9hZERhdGEiLGFmdGVyTWVyZ2VDZWxsczoiYWZ0ZXJN'@;
put 'ZXJnZUNlbGxzIixhZnRlck1vZGlmeVRyYW5zZm9ybUVuZDoiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLGFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXM6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3Rh'@;
put 'cnQiLGFmdGVyTW9tZW50dW1TY3JvbGw6ImFmdGVyTW9tZW50dW1TY3JvbGwiLGFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZDoiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIixhZnRlck9u'@;
put 'Q2VsbENvbnRleHRNZW51OiJhZnRlck9uQ2VsbENvbnRleHRNZW51IixhZnRlck9uQ2VsbENvcm5lckRibENsaWNrOiJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93bjoiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGFmdGVyT25DZWxsTW91'@;
put 'c2VEb3duOiJhZnRlck9uQ2VsbE1vdXNlRG93biIsYWZ0ZXJPbkNlbGxNb3VzZU91dDoiYWZ0ZXJPbkNlbGxNb3VzZU91dCIsYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6ImFmdGVyT25DZWxsTW91c2VPdmVyIixhZnRlck9uQ2VsbE1vdXNlVXA6ImFmdGVyT25DZWxsTW91c2VVcCIsYWZ0ZXJQYXN0'@;
put 'ZToiYWZ0ZXJQYXN0ZSIsYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQ6ImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIixhZnRlclJlZG86ImFmdGVyUmVkbyIsYWZ0ZXJSZWRvU3RhY2tDaGFuZ2U6ImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixhZnRlclJlZnJlc2hEaW1lbnNpb25zOiJhZnRlclJlZnJl'@;
put 'c2hEaW1lbnNpb25zIixhZnRlclJlbW92ZUNlbGxNZXRhOiJhZnRlclJlbW92ZUNlbGxNZXRhIixhZnRlclJlbW92ZUNvbDoiYWZ0ZXJSZW1vdmVDb2wiLGFmdGVyUmVtb3ZlUm93OiJhZnRlclJlbW92ZVJvdyIsYWZ0ZXJSZW5kZXI6ImFmdGVyUmVuZGVyIixhZnRlclJlbmRlcmVyOiJhZnRl'@;
put 'clJlbmRlcmVyIixhZnRlclJvd01vdmU6ImFmdGVyUm93TW92ZSIsYWZ0ZXJSb3dSZXNpemU6ImFmdGVyUm93UmVzaXplIixhZnRlclJvd1NlcXVlbmNlQ2hhbmdlOiJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIixhZnRlclNjcm9sbEhvcml6b250YWxseToiYWZ0ZXJTY3JvbGxIb3Jpem9udGFs'@;
put 'bHkiLGFmdGVyU2Nyb2xsVmVydGljYWxseToiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IixhZnRlclNjcm9sbDoiYWZ0ZXJTY3JvbGwiLGFmdGVyU2VsZWN0Q29sdW1uczoiYWZ0ZXJTZWxlY3RDb2x1bW5zIixhZnRlclNlbGVjdGlvbjoiYWZ0ZXJTZWxlY3Rpb24iLGFmdGVyU2VsZWN0aW9uQnlQ'@;
put 'cm9wOiJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsYWZ0ZXJTZWxlY3Rpb25FbmQ6ImFmdGVyU2VsZWN0aW9uRW5kIixhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLGFmdGVyU2VsZWN0aW9uRm9jdXNTZXQ6ImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLGFm'@;
put 'dGVyU2VsZWN0Um93czoiYWZ0ZXJTZWxlY3RSb3dzIixhZnRlclNldENlbGxNZXRhOiJhZnRlclNldENlbGxNZXRhIixhZnRlclNldERhdGFBdENlbGw6ImFmdGVyU2V0RGF0YUF0Q2VsbCIsYWZ0ZXJTZXREYXRhQXRSb3dQcm9wOiJhZnRlclNldERhdGFBdFJvd1Byb3AiLGFmdGVyU2V0U291'@;
put 'cmNlRGF0YUF0Q2VsbDoiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixhZnRlclNldFRoZW1lOiJhZnRlclNldFRoZW1lIixhZnRlclNoZWV0QWRkZWQ6ImFmdGVyU2hlZXRBZGRlZCIsYWZ0ZXJTaGVldFJlbmFtZWQ6ImFmdGVyU2hlZXRSZW5hbWVkIixhZnRlclNoZWV0UmVtb3ZlZDoiYWZ0'@;
put 'ZXJTaGVldFJlbW92ZWQiLGFmdGVyVHJpbVJvdzoiYWZ0ZXJUcmltUm93IixhZnRlclVuZG86ImFmdGVyVW5kbyIsYWZ0ZXJVbmRvU3RhY2tDaGFuZ2U6ImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixhZnRlclVuaGlkZUNvbHVtbnM6ImFmdGVyVW5oaWRlQ29sdW1ucyIsYWZ0ZXJVbmhpZGVSb3dz'@;
put 'OiJhZnRlclVuaGlkZVJvd3MiLGFmdGVyVW5saXN0ZW46ImFmdGVyVW5saXN0ZW4iLGFmdGVyVW5tZXJnZUNlbGxzOiJhZnRlclVubWVyZ2VDZWxscyIsYWZ0ZXJVbnRyaW1Sb3c6ImFmdGVyVW50cmltUm93IixhZnRlclVwZGF0ZURhdGE6ImFmdGVyVXBkYXRlRGF0YSIsYWZ0ZXJVcGRhdGVT'@;
put 'ZXR0aW5nczoiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsYWZ0ZXJWYWxpZGF0ZToiYWZ0ZXJWYWxpZGF0ZSIsYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZToiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JP'@;
put 'dmVycmlkZToiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsYWZ0ZXJWaWV3UmVuZGVyOiJhZnRlclZpZXdSZW5kZXIiLGJlZm9yZUFkZENoaWxkOiJiZWZvcmVBZGRDaGlsZCIsYmVmb3JlQXV0b2ZpbGw6ImJlZm9yZUF1dG9maWxsIixiZWZvcmVCZWdpbkVkaXRpbmc6ImJl'@;
put 'Zm9yZUJlZ2luRWRpdGluZyIsYmVmb3JlQ2VsbEFsaWdubWVudDoiYmVmb3JlQ2VsbEFsaWdubWVudCIsYmVmb3JlQ2hhbmdlOiJiZWZvcmVDaGFuZ2UiLGJlZm9yZUNoYW5nZVJlbmRlcjoiYmVmb3JlQ2hhbmdlUmVuZGVyIixiZWZvcmVDb2x1bW5Db2xsYXBzZToiYmVmb3JlQ29sdW1uQ29s'@;
put 'bGFwc2UiLGJlZm9yZUNvbHVtbkV4cGFuZDoiYmVmb3JlQ29sdW1uRXhwYW5kIixiZWZvcmVDb2x1bW5GcmVlemU6ImJlZm9yZUNvbHVtbkZyZWV6ZSIsYmVmb3JlQ29sdW1uTW92ZToiYmVmb3JlQ29sdW1uTW92ZSIsYmVmb3JlQ29sdW1uUmVzaXplOiJiZWZvcmVDb2x1bW5SZXNpemUiLGJl'@;
put 'Zm9yZUNvbHVtblNvcnQ6ImJlZm9yZUNvbHVtblNvcnQiLGJlZm9yZUNvbHVtbldyYXA6ImJlZm9yZUNvbHVtbldyYXAiLGJlZm9yZUNvbHVtblVuZnJlZXplOiJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsYmVmb3JlQ29tcG9zaXRpb25TdGFydDoiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsYmVm'@;
put 'b3JlQ29udGV4dE1lbnVTZXRJdGVtczoiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsYmVmb3JlQ29udGV4dE1lbnVTaG93OiJiZWZvcmVDb250ZXh0TWVudVNob3ciLGJlZm9yZUNvcHk6ImJlZm9yZUNvcHkiLGJlZm9yZUNyZWF0ZUNvbDoiYmVmb3JlQ3JlYXRlQ29sIixiZWZvcmVDcmVh'@;
put 'dGVSb3c6ImJlZm9yZUNyZWF0ZVJvdyIsYmVmb3JlQ3V0OiJiZWZvcmVDdXQiLGJlZm9yZURldGFjaENoaWxkOiJiZWZvcmVEZXRhY2hDaGlsZCIsYmVmb3JlRHJhd0JvcmRlcnM6ImJlZm9yZURyYXdCb3JkZXJzIixiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtczoiYmVmb3JlRHJvcGRvd25N'@;
put 'ZW51U2V0SXRlbXMiLGJlZm9yZURyb3Bkb3duTWVudVNob3c6ImJlZm9yZURyb3Bkb3duTWVudVNob3ciLGJlZm9yZUZpbHRlcjoiYmVmb3JlRmlsdGVyIixiZWZvcmVHZXRDZWxsTWV0YToiYmVmb3JlR2V0Q2VsbE1ldGEiLGJlZm9yZUhpZGVDb2x1bW5zOiJiZWZvcmVIaWRlQ29sdW1ucyIs'@;
put 'YmVmb3JlSGlkZVJvd3M6ImJlZm9yZUhpZGVSb3dzIixiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXI6ImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOiJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLGJlZm9yZUluaXQ6'@;
put 'ImJlZm9yZUluaXQiLGJlZm9yZUluaXRXYWxrb250YWJsZToiYmVmb3JlSW5pdFdhbGtvbnRhYmxlIixiZWZvcmVLZXlEb3duOiJiZWZvcmVLZXlEb3duIixiZWZvcmVMYW5ndWFnZUNoYW5nZToiYmVmb3JlTGFuZ3VhZ2VDaGFuZ2UiLGJlZm9yZUxvYWREYXRhOiJiZWZvcmVMb2FkRGF0YSIs'@;
put 'YmVmb3JlTWVyZ2VDZWxsczoiYmVmb3JlTWVyZ2VDZWxscyIsYmVmb3JlT25DZWxsQ29udGV4dE1lbnU6ImJlZm9yZU9uQ2VsbENvbnRleHRNZW51IixiZWZvcmVPbkNlbGxNb3VzZURvd246ImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsYmVmb3JlT25DZWxsTW91c2VPdXQ6ImJlZm9yZU9uQ2Vs'@;
put 'bE1vdXNlT3V0IixiZWZvcmVPbkNlbGxNb3VzZU92ZXI6ImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsYmVmb3JlT25DZWxsTW91c2VVcDoiYmVmb3JlT25DZWxsTW91c2VVcCIsYmVmb3JlUGFzdGU6ImJlZm9yZVBhc3RlIixiZWZvcmVSZWRvOiJiZWZvcmVSZWRvIixiZWZvcmVSZWRvU3RhY2tD'@;
put 'aGFuZ2U6ImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsYmVmb3JlUmVmcmVzaERpbWVuc2lvbnM6ImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIixiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lczoiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiLGJlZm9yZVJlbW92ZUNlbGxNZXRhOiJiZWZvcmVS'@;
put 'ZW1vdmVDZWxsTWV0YSIsYmVmb3JlUmVtb3ZlQ29sOiJiZWZvcmVSZW1vdmVDb2wiLGJlZm9yZVJlbW92ZVJvdzoiYmVmb3JlUmVtb3ZlUm93IixiZWZvcmVSZW5kZXI6ImJlZm9yZVJlbmRlciIsYmVmb3JlUmVuZGVyZXI6ImJlZm9yZVJlbmRlcmVyIixiZWZvcmVSb3dNb3ZlOiJiZWZvcmVS'@;
put 'b3dNb3ZlIixiZWZvcmVSb3dSZXNpemU6ImJlZm9yZVJvd1Jlc2l6ZSIsYmVmb3JlUm93V3JhcDoiYmVmb3JlUm93V3JhcCIsYmVmb3JlU2VsZWN0Q29sdW1uczoiYmVmb3JlU2VsZWN0Q29sdW1ucyIsYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQ6ImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0Iixi'@;
put 'ZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQ6ImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsYmVmb3JlU2VsZWN0Um93czoiYmVmb3JlU2VsZWN0Um93cyIsYmVmb3JlU2V0Q2VsbE1ldGE6ImJlZm9yZVNldENlbGxNZXRhIixiZWZvcmVTZXRSYW5nZUVuZDoiYmVmb3JlU2V0UmFuZ2VF'@;
put 'bmQiLGJlZm9yZVNldFJhbmdlU3RhcnQ6ImJlZm9yZVNldFJhbmdlU3RhcnQiLGJlZm9yZVNldFJhbmdlU3RhcnRPbmx5OiJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoOiJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLGJlZm9yZVRvdWNo'@;
put 'U2Nyb2xsOiJiZWZvcmVUb3VjaFNjcm9sbCIsYmVmb3JlVHJpbVJvdzoiYmVmb3JlVHJpbVJvdyIsYmVmb3JlVW5kbzoiYmVmb3JlVW5kbyIsYmVmb3JlVW5kb1N0YWNrQ2hhbmdlOiJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGJlZm9yZVVuaGlkZUNvbHVtbnM6ImJlZm9yZVVuaGlkZUNvbHVt'@;
put 'bnMiLGJlZm9yZVVuaGlkZVJvd3M6ImJlZm9yZVVuaGlkZVJvd3MiLGJlZm9yZVVubWVyZ2VDZWxsczoiYmVmb3JlVW5tZXJnZUNlbGxzIixiZWZvcmVVbnRyaW1Sb3c6ImJlZm9yZVVudHJpbVJvdyIsYmVmb3JlVXBkYXRlRGF0YToiYmVmb3JlVXBkYXRlRGF0YSIsYmVmb3JlVmFsaWRhdGU6'@;
put 'ImJlZm9yZVZhbGlkYXRlIixiZWZvcmVWYWx1ZVJlbmRlcjoiYmVmb3JlVmFsdWVSZW5kZXIiLGJlZm9yZVZpZXdwb3J0U2Nyb2xsOiJiZWZvcmVWaWV3cG9ydFNjcm9sbCIsYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHk6ImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5'@;
put 'IixiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHk6ImJlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseSIsYmVmb3JlVmlld1JlbmRlcjoiYmVmb3JlVmlld1JlbmRlciIsY29uc3RydWN0OiJjb25zdHJ1Y3QiLGluaXQ6ImluaXQiLG1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZDoibW9k'@;
put 'aWZ5QXV0b0NvbHVtblNpemVTZWVkIixtb2RpZnlBdXRvZmlsbFJhbmdlOiJtb2RpZnlBdXRvZmlsbFJhbmdlIixtb2RpZnlDb2xIZWFkZXI6Im1vZGlmeUNvbEhlYWRlciIsbW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0OiJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLG1vZGlmeUNvbHVtbkhl'@;
put 'YWRlclZhbHVlOiJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsbW9kaWZ5Q29sV2lkdGg6Im1vZGlmeUNvbFdpZHRoIixtb2RpZnlDb3B5YWJsZVJhbmdlOiJtb2RpZnlDb3B5YWJsZVJhbmdlIixtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZToibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0'@;
put 'VmFsdWUiLG1vZGlmeUZvY3VzZWRFbGVtZW50OiJtb2RpZnlGb2N1c2VkRWxlbWVudCIsbW9kaWZ5RGF0YToibW9kaWZ5RGF0YSIsbW9kaWZ5Rm9jdXNPblRhYk5hdmlnYXRpb246Im1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIixtb2RpZnlHZXRDZWxsQ29vcmRzOiJtb2RpZnlHZXRDZWxs'@;
put 'Q29vcmRzIixtb2RpZnlHZXRDb29yZHNFbGVtZW50OiJtb2RpZnlHZXRDb29yZHNFbGVtZW50Iixtb2RpZnlSb3dEYXRhOiJtb2RpZnlSb3dEYXRhIixtb2RpZnlSb3dIZWFkZXI6Im1vZGlmeVJvd0hlYWRlciIsbW9kaWZ5Um93SGVhZGVyV2lkdGg6Im1vZGlmeVJvd0hlYWRlcldpZHRoIixt'@;
put 'b2RpZnlSb3dIZWlnaHQ6Im1vZGlmeVJvd0hlaWdodCIsbW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZToibW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZSIsbW9kaWZ5U291cmNlRGF0YToibW9kaWZ5U291cmNlRGF0YSIsbW9kaWZ5VHJhbnNmb3JtRW5kOiJtb2RpZnlUcmFuc2Zvcm1F'@;
put 'bmQiLG1vZGlmeVRyYW5zZm9ybUZvY3VzOiJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsbW9kaWZ5VHJhbnNmb3JtU3RhcnQ6Im1vZGlmeVRyYW5zZm9ybVN0YXJ0IixwZXJzaXN0ZW50U3RhdGVMb2FkOiJwZXJzaXN0ZW50U3RhdGVMb2FkIixwZXJzaXN0ZW50U3RhdGVSZXNldDoicGVyc2lzdGVu'@;
put 'dFN0YXRlUmVzZXQiLHBlcnNpc3RlbnRTdGF0ZVNhdmU6InBlcnNpc3RlbnRTdGF0ZVNhdmUifSxmZWF0dXJlczpbZm8oW1dtLEVwZV0pLHdsXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1siY29udGFpbmVyIiwiIl0sWzMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgw'@;
put 'LCJkaXYiLDEsMCksMiZkJiZ4ZSgiaWQiLGguaG90SWQpfSxlbmNhcHN1bGF0aW9uOjJ9KX1yZXR1cm4gY30pKCksaTk9KCgpPT57Y2xhc3MgY3tzdGF0aWMgdmVyc2lvbj0iMTUuMy4wIjtzdGF0aWMgZm9yUm9vdCgpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbV21dfX1zdGF0aWMg'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVtb2Q9a2koe3R5cGU6Y30pO3N0YXRpYyBcdTAyNzVpbmo9QXIoe30pfXJldHVybiBjfSkoKTtjb25zdCBUcGU9ImhhbmRzb250YWJsZUVkaXRvciI7Y2xhc3MgQVggZXh0ZW5kcyByOXtzdGF0aWMg'@;
put 'Z2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImhhbmRzb250YWJsZSJ9b3Blbigpe3N1cGVyLm9wZW4oKTtjb25zdCBsPXRoaXMuaHRDb250YWluZXIuc3R5bGU7dGhpcy5odEVkaXRvciYmKHRoaXMuaHRFZGl0b3IuZGVzdHJveSgpLGwud2lkdGg9IiIsbC5oZWlnaHQ9IiIsbC5vdmVyZmxvdz0i'@;
put 'IiksIm5vbmUiPT09bC5kaXNwbGF5JiYobC5kaXNwbGF5PSIiKSx0aGlzLmh0RWRpdG9yPW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3Rvcih0aGlzLmh0Q29udGFpbmVyLHRoaXMuaHRPcHRpb25zKSx0aGlzLmh0RWRpdG9yLmluaXQoKSx0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRp'@;
put 'c3BsYXk9IiIsdGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3Q/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKDAsMCk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKSxfRSh0aGlzLlRFWFRBUkVBLDAsdGhpcy5URVhUQVJFQS52YWx1ZS5sZW5ndGgpLHRoaXMuaHRFZGl0b3IudXBkYXRlU2V0'@;
put 'dGluZ3Moe3dpZHRoOnRoaXMuZ2V0V2lkdGgoKSxoZWlnaHQ6dGhpcy5nZXRIZWlnaHQoKX0pLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1jbG9zZSgpe3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLnJlbW92ZUhv'@;
put 'b2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpO2NvbnN0IE09dGhpcyxEPXtzdGFydFJvd3M6MCxzdGFydENvbHM6MCxtaW5Sb3dzOjAsbWluQ29sczowLGNsYXNzTmFtZToibGlzdGJv'@;
put 'eCIsY29weVBhc3RlOiExLGF1dG9Db2x1bW5TaXplOiExLGF1dG9Sb3dTaXplOiExLHJlYWRPbmx5OiEwLGZpbGxIYW5kbGU6ITEsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYXJpYVRhZ3M6ITEsdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSxhZnRlck9u'@;
put 'Q2VsbE1vdXNlRG93bihaLG5lKXtjb25zdCBjZT10aGlzLmdldFNvdXJjZURhdGEobmUucm93LG5lLmNvbCk7dm9pZCAwIT09Y2UmJk0uc2V0VmFsdWUoY2UpLE0uaG90LmRlc3Ryb3lFZGl0b3IoKX0scHJldmVudFdoZWVsOiEwLGxheW91dERpcmVjdGlvbjp0aGlzLmhvdC5pc1J0bCgpPyJy'@;
put 'dGwiOiJsdHIifTt0aGlzLmNlbGxQcm9wZXJ0aWVzLmhhbmRzb250YWJsZSYmeHUoRCx2LmhhbmRzb250YWJsZSksdGhpcy5odE9wdGlvbnM9RH1iZWdpbkVkaXRpbmcobCxhKXtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKCkub25CZWdpbkVkaXRpbmc7ZCYmITE9PT1kKCl8fHN1cGVy'@;
put 'LmJlZ2luRWRpdGluZyhsLGEpfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKTtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtsLmNsYXNzTmFtZT0iaGFuZHNvbnRhYmxlRWRpdG9yIix0aGlzLlRFWFRBUkVBX1BBUkVOVC5h'@;
put 'cHBlbmRDaGlsZChsKSx0aGlzLmh0Q29udGFpbmVyPWwsdGhpcy5hc3NpZ25Ib29rcygpfWZpbmlzaEVkaXRpbmcobCxhLGQpe2lmKHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuaXNMaXN0ZW5pbmcoKSYmdGhpcy5ob3QubGlzdGVuKCksdGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRv'@;
put 'ci5nZXRTZWxlY3RlZExhc3QoKSl7Y29uc3QgaD10aGlzLmh0RWRpdG9yLmdldFZhbHVlKCk7dm9pZCAwIT09aCYmdGhpcy5zZXRWYWx1ZShoKX1zdXBlci5maW5pc2hFZGl0aW5nKGwsYSxkKX1nZXRIZWlnaHQoKXtyZXR1cm4gdGhpcy5odEVkaXRvci52aWV3LmdldFRhYmxlSGVpZ2h0KCkr'@;
put 'MX1nZXRXaWR0aCgpe3JldHVybiB0aGlzLmh0RWRpdG9yLnZpZXcuZ2V0VGFibGVXaWR0aCgpfWFzc2lnbkhvb2tzKCl7dGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IiwoKT0+e3ZhciBsO251bGw9PT0obD10aGlzLmh0RWRpdG9yKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCl9KSx0'@;
put 'aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwobCxhKT0+e3ZhciBkO2F8fG51bGw9PT0oZD10aGlzLmh0RWRpdG9yKXx8dm9pZCAwPT09ZHx8ZC51c2VUaGVtZShsKX0pfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRD'@;
put 'b250ZXh0KCJlZGl0b3IiKTtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpO2NvbnN0IGg9KGYsdik9Pntjb25zdCBNPXRoaXMuaHRFZGl0b3I7aWYodm9pZCAwIT09ZiYmKGY8MHx8TS5mbGlwcGVkJiZmPk0uY291bnRSb3dzKCktMT9NLmRlc2VsZWN0Q2VsbCgpOk0uc2VsZWN0Q2VsbChmLDAp'@;
put 'LE0uZ2V0RGF0YSgpLmxlbmd0aCkpcmV0dXJuIHYucHJldmVudERlZmF1bHQoKSxIMih2KSx0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLlRFWFRBUkVBLmZvY3VzKCksITF9O2EuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOmY9Pntjb25zdCB2PXRoaXMuaHRFZGl0'@;
put 'b3I7bGV0IE0sRDtyZXR1cm4hdi5nZXRTZWxlY3RlZExhc3QoKSYmdi5mbGlwcGVkP009di5jb3VudFJvd3MoKS0xOnYuZ2V0U2VsZWN0ZWRMYXN0KCkmJih2LmZsaXBwZWQ/KEQ9di5nZXRTZWxlY3RlZExhc3QoKVswXSxNPU1hdGgubWF4KDAsRC0xKSk6KEQ9di5nZXRTZWxlY3RlZExhc3Qo'@;
put 'KVswXSxNPUQtMSkpLGgoTSxmKX0scHJldmVudERlZmF1bHQ6ITF9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazpmPT57Y29uc3Qgdj10aGlzLmh0RWRpdG9yO2xldCBNLEQ7aWYodi5nZXRTZWxlY3RlZExhc3QoKXx8di5mbGlwcGVkKXtpZih2LmdldFNlbGVjdGVkTGFzdCgpKWlm'@;
put 'KHYuZmxpcHBlZClNPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0rMTtlbHNlIGlmKCF2LmZsaXBwZWQpe2NvbnN0IFo9di5jb3VudFJvd3MoKS0xO0Q9di5nZXRTZWxlY3RlZExhc3QoKVswXSxNPU1hdGgubWluKFosRCsxKX19ZWxzZSBNPTA7cmV0dXJuIGgoTSxmKX0scHJldmVudERlZmF1bHQ6'@;
put 'ITF9XSx7Z3JvdXA6VHBlLHJlbGF0aXZlVG9Hcm91cDpabSxwb3NpdGlvbjoiYmVmb3JlIn0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXtzdXBlci51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hv'@;
put 'cnRjdXRzQnlHcm91cChUcGUpfX1mdW5jdGlvbiBBcGUoYyxsLGEpe2twZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24ga3BlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBh'@;
put 'biBvYmplY3QiKX1mdW5jdGlvbiBCUChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gc2l0KGMpe3ZhciBsPWZ1bmN0aW9uIGxpdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEu'@;
put 'Y2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3Ry'@;
put 'aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24ga1goYyxsKXtyZXR1cm4gYy5nZXQo'@;
put 'RFgoYyxsKSl9ZnVuY3Rpb24gRFgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIp'@;
put 'fXZhciBJWD1uZXcgV2Vha01hcCxEcGU9bmV3IFdlYWtNYXAsUlg9bmV3IFdlYWtTZXQ7Y2xhc3MgTFggZXh0ZW5kcyBBWHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gYWl0KGMsbCl7a3BlKGMsbCksbC5hZGQoYyl9KHRoaXMsUlgpLEJQKHRoaXMsInF1ZXJ5'@;
put 'IixudWxsKSxCUCh0aGlzLCJzdHJpcHBlZENob2ljZXMiLFtdKSxCUCh0aGlzLCJyYXdDaG9pY2VzIixbXSksQXBlKHRoaXMsSVgsdGhpcy5ob3QuZ3VpZC5zbGljZSgwLDkpKSxBcGUodGhpcyxEcGUsU0UoKCk9Pnt0aGlzLmZvY3VzKCl9LDEwMCkpLEJQKHRoaXMsInNvcnRCeVJlbGV2YW5j'@;
put 'ZSIsZnVuY3Rpb24obCxhLGQpe2NvbnN0IGg9W10sZj1bXSx2PWwubGVuZ3RoO2xldCBELFosbmUsY2UsTT1hLmxlbmd0aDtpZigwPT09dil7Zm9yKG5lPTA7bmU8TTtuZSsrKWYucHVzaChuZSk7cmV0dXJuIGZ9Zm9yKG5lPTA7bmU8TTtuZSsrKXtpZihaPWQkKGxjKGFbbmVdKSksZCljZT1a'@;
put 'LmluZGV4T2YobCk7ZWxzZXtjb25zdCBiZT10aGlzLmNlbGxQcm9wZXJ0aWVzLmxvY2FsZTtjZT1aLnRvTG9jYWxlTG93ZXJDYXNlKGJlKS5pbmRleE9mKGwudG9Mb2NhbGVMb3dlckNhc2UoYmUpKX0tMSE9PWNlJiYoRD1aLmxlbmd0aC1jZS12LGgucHVzaCh7YmFzZUluZGV4Om5lLGluZGV4'@;
put 'OmNlLGNoYXJzTGVmdDpELHZhbHVlOlp9KSl9Zm9yKGguc29ydCgoYmUsRWUpPT57aWYoLTE9PT1FZS5pbmRleClyZXR1cm4tMTtpZigtMT09PWJlLmluZGV4KXJldHVybiAxO2lmKGJlLmluZGV4PEVlLmluZGV4KXJldHVybi0xO2lmKEVlLmluZGV4PGJlLmluZGV4KXJldHVybiAxO2lmKGJl'@;
put 'LmluZGV4PT09RWUuaW5kZXgpe2lmKGJlLmNoYXJzTGVmdDxFZS5jaGFyc0xlZnQpcmV0dXJuLTE7aWYoYmUuY2hhcnNMZWZ0PkVlLmNoYXJzTGVmdClyZXR1cm4gMX1yZXR1cm4gMH0pLG5lPTAsTT1oLmxlbmd0aDtuZTxNO25lKyspZi5wdXNoKGhbbmVdLmJhc2VJbmRleCk7cmV0dXJuIGZ9'@;
put 'KX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImF1dG9jb21wbGV0ZSJ9Z2V0VmFsdWUoKXtjb25zdCBsPXRoaXMucmF3Q2hvaWNlcy5maW5kKGE9PnRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKGEpPT09dGhpcy5URVhUQVJFQS52YWx1ZSk7cmV0dXJuIEZvKGwpP2w6dGhpcy5URVhU'@;
put 'QVJFQS52YWx1ZX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksVGkodGhpcy5odENvbnRhaW5lciwiYXV0b2NvbXBsZXRlRWRpdG9yIiksVGkodGhpcy5odENvbnRhaW5lciwtMT09PXRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2Yo'@;
put 'Ik1hYyIpPyIiOiJodE1hY1Njcm9sbCIpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZhKHRoaXMuVEVYVEFSRUEsW1sidHlwZSIsInRleHQiXSxbInJvbGUiLCJjb21ib2JveCJdLGIyZSgibGlzdGJveCIpLFsiYXJpYS1hdXRvY29tcGxldGUiLCJsaXN0Il1dKX1wcmVwYXJl'@;
put 'KGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2YSh0aGlzLlRFWFRBUkVBLFtQMigiZmFsc2UiKSxpcWUoYCR7a1goSVgsdGhpcyl9LWxpc3Rib3gtJHtsfS0ke2F9YCldKX1vcGVuKCl7c3VwZXIub3Blbigp'@;
put 'O2NvbnN0IGw9dm9pZCAwPT09dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd258fHRoaXMuY2VsbFByb3BlcnRpZXMudHJpbURyb3Bkb3duLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyxkPUFycmF5LmlzQXJyYXkodGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2UpP3Ro'@;
put 'aXMuY2VsbFByb3BlcnRpZXMuc291cmNlOm51bGwsaD1kPy5sZW5ndGgse3JvdzpmLGNvbDp2fT10aGlzO3RoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXMoKSx0aGlzLmFkZEhvb2soImJlZm9yZUtleURvd24iLE09PnRoaXMub25CZWZvcmVLZXlEb3duKE0pKSx0aGlzLmh0'@;
put 'RWRpdG9yLmFkZEhvb2soImFmdGVyU2Nyb2xsIixrWChEcGUsdGhpcykpLHRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2NvbFdpZHRoczpsP1thdSh0aGlzLlRFWFRBUkVBKS0yXTp2b2lkIDAsYXV0b0NvbHVtblNpemU6ITAscmVuZGVyZXI6KE0sRCxaLG5lLGNlLGJlLEVlKT0+e0Vn'@;
put 'KE0sRCxaLG5lLGNlLGJlLEVlKTtjb25zdHtmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOkJlLGFsbG93SHRtbDpxZSxsb2NhbGU6cnR9PXRoaXMuY2VsbFByb3BlcnRpZXMscHQ9dGhpcy5xdWVyeTtsZXQgSnQsdm4sZHQ9bGMoYmUpO2R0JiYhcWUmJihKdD0hMD09PUJlP2R0LmluZGV4T2YocHQp'@;
put 'OmR0LnRvTG9jYWxlTG93ZXJDYXNlKHJ0KS5pbmRleE9mKHB0LnRvTG9jYWxlTG93ZXJDYXNlKHJ0KSksLTEhPT1KdCYmKHZuPWR0LnN1YnN0cihKdCxwdC5sZW5ndGgpLGR0PWR0LnJlcGxhY2Uodm4sYDxzdHJvbmc+JHt2bn08L3N0cm9uZz5gKSkpLGEmJnZhKEQsW1sicm9sZSIsIm9wdGlv'@;
put 'biJdLC4uLmQ/W2xxZShoKV06W10sLi4uZD9bY3FlKGQuaW5kZXhPZihiZSkrMSldOltdLFsiaWQiLGAke3RoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuaWR9XyR7Wn0tJHtuZX1gXV0pLEQuaW5uZXJIVE1MPWR0fSxhZnRlclNlbGVjdGlvbkVuZDooTSxEKT0+e2lmKGEpe2NvbnN0IFo9Y2U9'@;
put 'Pnt2YShjZSxbWyJhcmlhLXNlbGVjdGVkIiwidHJ1ZSJdXSksdmEodGhpcy5URVhUQVJFQSwuLi4oYz0+WyJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLGNdKShjZS5pZCkpfSxuZT10aGlzLmh0RWRpdG9yLmdldENlbGwoTSxELCEwKTtudWxsIT09bmU/WihuZSk6dGhpcy5odEVkaXRvci5hZGRI'@;
put 'b29rT25jZSgiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+e2NvbnN0IGNlPXRoaXMuaHRFZGl0b3IuZ2V0Q2VsbChNLEQsITApO1ooY2UpfSl9fX0pLGEmJih2YSh0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0T3ZlcmxheXMud3RUYWJsZS5UQUJMRSwicm9sZSIsInByZXNlbnRhdGlvbiIp'@;
put 'LHZhKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQsW1sicm9sZSIsImxpc3Rib3giXSxhcWUoInBvbGl0ZSIpLHNxZSgidGV4dCIpLFsiaWQiLGAke2tYKElYLHRoaXMpfS1saXN0Ym94LSR7Zn0tJHt2fWBdXSksdmEodGhpcy5URVhUQVJFQSwuLi5QMigidHJ1ZSIpKSksdGhpcy5ob3QuX3Jl'@;
put 'Z2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVlcnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpfSl9Y2xvc2UoKXt0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZhKHRoaXMuVEVY'@;
put 'VEFSRUEsW1AyKCJmYWxzZSIpXSl9ZGlzY2FyZEVkaXRvcihsKXtzdXBlci5kaXNjYXJkRWRpdG9yKGwpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9cXVlcnlDaG9pY2VzKGwpe2NvbnN0IGE9dGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2U7dGhpcy5xdWVyeT1sLCJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBhP2EuY2FsbCh0aGlzLmNlbGxQcm9wZXJ0aWVzLGwsZD0+e3RoaXMucmF3Q2hvaWNlcz1kLHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGQpKX0pOkFycmF5LmlzQXJyYXkoYSk/KHRoaXMucmF3Q2hvaWNlcz1hLHRoaXMudXBkYXRlQ2hvaWNlc0xp'@;
put 'c3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGEpKSk6dGhpcy51cGRhdGVDaG9pY2VzTGlzdChbXSl9dXBkYXRlQ2hvaWNlc0xpc3QobCl7Y29uc3QgYT15JCh0aGlzLlRFWFRBUkVBKSxkPU8yZSh0aGlzLlRFWFRBUkVBKSxoPXRoaXMuY2VsbFByb3BlcnRpZXMuc29ydEJ5UmVsZXZhbmNl'@;
put 'LGY9dGhpcy5jZWxsUHJvcGVydGllcy5maWx0ZXI7bGV0IHY9bnVsbCxNPW51bGwsRD1sO2gmJih2PXRoaXMuc29ydEJ5UmVsZXZhbmNlKHRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKHRoaXMuZ2V0VmFsdWUoKSksRCx0aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUp'@;
put 'KTtjb25zdCBaPUFycmF5LmlzQXJyYXkodik/di5sZW5ndGg6MDtpZighMT09PWYpWiYmKE09dlswXSk7ZWxzZXtjb25zdCBuZT1bXTtmb3IobGV0IGNlPTAsYmU9RC5sZW5ndGg7Y2U8YmUmJiEoaCYmWjw9Y2UpO2NlKyspbmUucHVzaChaP0RbdltjZV1dOkRbY2VdKTtNPTAsRD1uZX10aGlz'@;
put 'LnN0cmlwcGVkQ2hvaWNlcz1ELHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUuZGlzcGxheT0wPT09RC5sZW5ndGg/Im5vbmUiOiIiLHRoaXMuaHRFZGl0b3IubG9hZERhdGEoZEUoW0RdKSksRC5sZW5ndGg+MCYmKHRoaXMudXBkYXRlRHJvcGRvd25EaW1lbnNpb25zKCksdGhpcy5m'@;
put 'bGlwRHJvcGRvd25JZk5lZWRlZCgpLCEwPT09dGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3QmJnRoaXMuaGlnaGxpZ2h0QmVzdE1hdGNoaW5nQ2hvaWNlKE0pKSx0aGlzLmhvdC5saXN0ZW4oKSxfRSh0aGlzLlRFWFRBUkVBLGEsYT09PWQ/dm9pZCAwOmQpfWZsaXBEcm9wZG93bklmTmVlZGVk'@;
put 'KCl7Y29uc3QgbD10aGlzLmdldEVkaXRlZENlbGxSZWN0KCksYT1sLmhlaWdodDtsZXQgZD1sLnRvcDtpZih0aGlzLmhvdC52aWV3LmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXtjb25zdCBNPXRoaXMuaG90LnZpZXcuZ2V0VGFibGVPZmZzZXQoKS50b3AtdGhpcy5ob3Qucm9v'@;
put 'dFdpbmRvdy5zY3JvbGxZO2Q9TWF0aC5tYXgoZCtNLDApfWNvbnN0IGg9dGhpcy5nZXRIZWlnaHQoKSxmPXRoaXMuaG90LnZpZXcuZ2V0V29ya3NwYWNlSGVpZ2h0KCktZC1hLHY9aD5mJiZkPmYrYTtyZXR1cm4gdj90aGlzLmZsaXBEcm9wZG93bihoKTp0aGlzLnVuZmxpcERyb3Bkb3duKCks'@;
put 'dGhpcy5saW1pdERyb3Bkb3duSWZOZWVkZWQodj9kOmYsaCksdn1saW1pdERyb3Bkb3duSWZOZWVkZWQobCxhKXtpZihhPmwpe2xldCBkPTAsaD0wLGY9MCx2PW51bGw7ZG97Zj10aGlzLmh0RWRpdG9yLmdldFJvd0hlaWdodChoKXx8dGhpcy5odEVkaXRvci52aWV3LmdldERlZmF1bHRSb3dI'@;
put 'ZWlnaHQoKSxkKz1mLGgrPTF9d2hpbGUoZDxsKTt2PWQtZix0aGlzLmh0RWRpdG9yLmZsaXBwZWQmJih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLnRvcD1wYXJzZUludCh0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLnRvcCwxMCkrYS12KyJweCIpLHRoaXMuc2V0RHJv'@;
put 'cGRvd25IZWlnaHQoZC1mKX19ZmxpcERyb3Bkb3duKGwpe2NvbnN0IGE9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTthLnBvc2l0aW9uPSJhYnNvbHV0ZSIsYS50b3A9LWwrInB4Iix0aGlzLmh0RWRpdG9yLmZsaXBwZWQ9ITB9dW5mbGlwRHJvcGRvd24oKXtjb25zdCBsPXRoaXMu'@;
put 'aHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGU7bC5wb3NpdGlvbj0iYWJzb2x1dGUiLGwudG9wPSIiLHRoaXMuaHRFZGl0b3IuZmxpcHBlZD12b2lkIDB9dXBkYXRlRHJvcGRvd25EaW1lbnNpb25zKCl7dGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6dGhpcy5nZXRXaWR0aCgp'@;
put 'LGhlaWdodDp0aGlzLmdldEhlaWdodCgpfSksRFgoUlgsdGhpcyxJcGUpLmNhbGwodGhpcyksdGhpcy5odEVkaXRvci52aWV3Ll93dC53dFRhYmxlLmFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKX1zZXREcm9wZG93bkhlaWdodChsKXt0aGlzLmh0RWRpdG9yLnVwZGF0ZVNl'@;
put 'dHRpbmdzKHtoZWlnaHQ6bH0pLERYKFJYLHRoaXMsSXBlKS5jYWxsKHRoaXMpLHRoaXMuaHRFZGl0b3Iudmlldy5fd3Qud3RUYWJsZS5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl9aGlnaGxpZ2h0QmVzdE1hdGNoaW5nQ2hvaWNlKGwpeyJudW1iZXIiPT10eXBlb2YgbD90'@;
put 'aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwobCwwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCExKTp0aGlzLmh0RWRpdG9yLmRlc2VsZWN0Q2VsbCgpfWdldEhlaWdodCgpe2NvbnN0IGw9dGhpcy5ob3Qucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaHRDb250YWluZXIucXVlcnlTZWxl'@;
put 'Y3RvcigiLmh0Q29yZSIpKSxhPXBhcnNlSW50KGwuYm9yZGVyVG9wV2lkdGgsMTApK3BhcnNlSW50KGwuYm9yZGVyQm90dG9tV2lkdGgsMTApLGQ9TWF0aC5taW4odGhpcy5jZWxsUHJvcGVydGllcy52aXNpYmxlUm93cyx0aGlzLnN0cmlwcGVkQ2hvaWNlcy5sZW5ndGgpO3JldHVybiBBcnJh'@;
put 'eS5mcm9tKHtsZW5ndGg6ZH0sKGYsdik9PnYpLnJlZHVjZSgoZix2KT0+ZisodGhpcy5odEVkaXRvci5nZXRSb3dIZWlnaHQodil8fHRoaXMuaHRFZGl0b3Iudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCkpLDApK2ErMX1nZXRXaWR0aCgpe2NvbnN0IGw9dGhpcy5ob3Qucm9vdFdpbmRvdy5n'@;
put 'ZXRDb21wdXRlZFN0eWxlKHRoaXMuaHRDb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0Q29yZSIpKSxhPXBhcnNlSW50KGwuYm9yZGVySW5saW5lU3RhcnRXaWR0aCwxMCkrcGFyc2VJbnQobC5ib3JkZXJJbmxpbmVFbmRXaWR0aCwxMCk7cmV0dXJuIHRoaXMuaHRFZGl0b3IuZ2V0Q29sV2lk'@;
put 'dGgoMCkrYX1zdHJpcFZhbHVlSWZOZWVkZWQobCl7cmV0dXJuIHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChbbF0pWzBdfXN0cmlwVmFsdWVzSWZOZWVkZWQobCl7Y29uc3R7YWxsb3dIdG1sOmF9PXRoaXMuY2VsbFByb3BlcnRpZXMsZD15cyhsLGY9PmxjKGYpKTtyZXR1cm4geXMoZCxmPT5h'@;
put 'P2Y6ZCQoZikpfWFsbG93S2V5RXZlbnRQcm9wYWdhdGlvbihsKXtjb25zdCBhPXRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkX3Jvdz1hP2EuZnJvbS5yb3c6LTE7bGV0IGg9ITE7cmV0dXJuIGw9PT1Hby5BUlJPV19ET1dOJiZkX3Jvdz4wJiZkX3Jvdzx0aGlzLmh0RWRp'@;
put 'dG9yLmNvdW50Um93cygpLTEmJihoPSEwKSxsPT09R28uQVJST1dfVVAmJmRfcm93Pi0xJiYoaD0hMCksaH1vbkJlZm9yZUtleURvd24obCl7aWYoJDJlKGwua2V5Q29kZSl8fGwua2V5Q29kZT09PUdvLkJBQ0tTUEFDRXx8bC5rZXlDb2RlPT09R28uREVMRVRFfHxsLmtleUNvZGU9PT1Hby5J'@;
put 'TlNFUlQpe2xldCBhPTEwO2lmKGwua2V5Q29kZT09PUdvLkMmJihsLmN0cmxLZXl8fGwubWV0YUtleSkpcmV0dXJuO3RoaXMuaXNPcGVuZWQoKXx8KGErPTEwKSx0aGlzLmh0RWRpdG9yJiZ0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5xdWVyeUNob2ljZXModGhpcy5URVhU'@;
put 'QVJFQS52YWx1ZSl9LGEpfX19ZnVuY3Rpb24gSXBlKCl7dGhpcy5odEVkaXRvci52aWV3Lmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJnRoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOnRoaXMuZ2V0V2lkdGgoKStoMCh0aGlzLmhvdC5yb290RG9jdW1lbnQpfSl9Y2xhc3MgUnBlIGV4'@;
put 'dGVuZHMga197c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJjaGVja2JveCJ9YmVnaW5FZGl0aW5nKGwsYSl7aWYoYSYmIm1vdXNldXAiPT09YS50eXBlJiYiVEQiPT09YS50YXJnZXQubm9kZU5hbWUpe2NvbnN0IGQ9dGhpcy5URC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJj'@;
put 'aGVja2JveCJdJyk7cGEoZCwiaHRCYWRWYWx1ZSIpfHxkLmNsaWNrKCl9fWZpbmlzaEVkaXRpbmcoKXt9aW5pdCgpe31vcGVuKCl7fWNsb3NlKCl7fWdldFZhbHVlKCl7fXNldFZhbHVlKCl7fWZvY3VzKCl7fX1jb25zdCBZbT0oKT0+d2luZG93LFcyPSgpPT53aW5kb3cuZG9jdW1lbnQsT1g9'@;
put 'KGMsbCk9PndpbmRvdy5zZXRUaW1lb3V0KGMsbCksSHA9ZnVuY3Rpb24oYyxsLGEsZCl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhIWQpfSxUZz1mdW5jdGlvbihjLGwsYSxkKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLCEhZCl9LFJoPWZ1bmN0aW9uKGMsbCl7cmV0dXJuLTEhPT0oIiAi'@;
put 'K2MuY2xhc3NOYW1lKyIgIikuaW5kZXhPZigiICIrbCsiICIpfSxQWD1mdW5jdGlvbihjLGwpe1JoKGMsbCl8fChjLmNsYXNzTmFtZT0iIj09PWMuY2xhc3NOYW1lP2w6Yy5jbGFzc05hbWUrIiAiK2wpfSxGWD1mdW5jdGlvbihjLGwpe2MuY2xhc3NOYW1lPWZ1bmN0aW9uKGMpe3JldHVybiBj'@;
put 'LnRyaW0/Yy50cmltKCk6Yy5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KCgiICIrYy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKCIgIitsKyIgIiwiICIpKX0sSFg9ZnVuY3Rpb24oYyl7cmV0dXJuL0FycmF5Ly50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSl9LExoPWZ1'@;
put 'bmN0aW9uKGMpe3JldHVybi9EYXRlLy50ZXN0KE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSkmJiFpc05hTihjLmdldFRpbWUoKSl9LGhpdD1mdW5jdGlvbihjKXtsZXQgbD1jLmdldERheSgpO3JldHVybiAwPT09bHx8Nj09PWx9LGZpdD1mdW5jdGlvbihjKXtyZXR1cm4gYyU0'@;
put 'PT0wJiZjJTEwMCE9MHx8YyU0MDA9PTB9LExwZT1mdW5jdGlvbihjLGwpe3JldHVyblszMSxmaXQoYyk/Mjk6MjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdW2xdfSxqUD1mdW5jdGlvbihjKXtMaChjKSYmYy5zZXRIb3VycygwLDAsMCwwKX0selA9ZnVuY3Rpb24oYyxsKXtyZXR1'@;
put 'cm4gYy5nZXRUaW1lKCk9PT1sLmdldFRpbWUoKX0sVVA9ZnVuY3Rpb24oYyxsLGEpe2xldCBkLGg7Zm9yKGQgaW4gbCloPXZvaWQgMCE9PWNbZF0saCYmIm9iamVjdCI9PXR5cGVvZiBsW2RdJiZudWxsIT09bFtkXSYmdm9pZCAwPT09bFtkXS5ub2RlTmFtZT9MaChsW2RdKT9hJiYoY1tkXT1u'@;
put 'ZXcgRGF0ZShsW2RdLmdldFRpbWUoKSkpOkhYKGxbZF0pP2EmJihjW2RdPWxbZF0uc2xpY2UoMCkpOmNbZF09VVAoe30sbFtkXSxhKTooYXx8IWgpJiYoY1tkXT1sW2RdKTtyZXR1cm4gY30sT3BlPWZ1bmN0aW9uKGMsbCxhKXtsZXQgZD1XMigpLmNyZWF0ZUV2ZW50KCJIVE1MRXZlbnRzIik7'@;
put 'ZC5pbml0RXZlbnQobCwhMCwhMSksZD1VUChkLGEpLGMuZGlzcGF0Y2hFdmVudChkKX0sUHBlPWZ1bmN0aW9uKGMpe3JldHVybiBjLm1vbnRoPDAmJihjLnllYXItPU1hdGguY2VpbChNYXRoLmFicyhjLm1vbnRoKS8xMiksYy5tb250aCs9MTIpLGMubW9udGg+MTEmJihjLnllYXIrPU1hdGgu'@;
put 'Zmxvb3IoTWF0aC5hYnMoYy5tb250aCkvMTIpLGMubW9udGgtPTEyKSxjfSxOcD17ZmllbGQ6bnVsbCxib3VuZDp2b2lkIDAsYXJpYUxhYmVsOiJVc2UgdGhlIGFycm93IGtleXMgdG8gcGljayBhIGRhdGUiLHBvc2l0aW9uOiJib3R0b20gbGVmdCIscmVwb3NpdGlvbjohMCxmb3JtYXQ6IllZ'@;
put 'WVktTU0tREQiLHRvU3RyaW5nOm51bGwscGFyc2U6bnVsbCxkZWZhdWx0RGF0ZTpudWxsLHNldERlZmF1bHREYXRlOiExLGZpcnN0RGF5OjAsZmlyc3RXZWVrT2ZZZWFyTWluRGF5czo0LGZvcm1hdFN0cmljdDohMSxtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLHllYXJSYW5nZToxMCxzaG93'@;
put 'V2Vla051bWJlcjohMSxwaWNrV2hvbGVXZWVrOiExLG1pblllYXI6MCxtYXhZZWFyOjk5OTksbWluTW9udGg6dm9pZCAwLG1heE1vbnRoOnZvaWQgMCxzdGFydFJhbmdlOm51bGwsZW5kUmFuZ2U6bnVsbCxpc1JUTDohMSx5ZWFyU3VmZml4OiIiLHNob3dNb250aEFmdGVyWWVhcjohMSxzaG93'@;
put 'RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiExLGVuYWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczohMSxudW1iZXJPZk1vbnRoczoxLG1haW5DYWxlbmRhcjoibGVmdCIsY29udGFpbmVyOnZvaWQgMCxibHVyRmllbGRPblNlbGVjdDohMCxpMThuOntwcmV2aW91'@;
put 'c01vbnRoOiJQcmV2aW91cyBNb250aCIsbmV4dE1vbnRoOiJOZXh0IE1vbnRoIixtb250aHM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJd'@;
put 'LHdlZWtkYXlzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSx3ZWVrZGF5c1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il19LHRoZW1lOm51bGwsZXZlbnRzOltdLG9u'@;
put 'U2VsZWN0Om51bGwsb25PcGVuOm51bGwsb25DbG9zZTpudWxsLG9uRHJhdzpudWxsLGtleWJvYXJkSW5wdXQ6ITB9LEZwZT1mdW5jdGlvbihjLGwsYSl7Zm9yKGwrPWMuZmlyc3REYXk7bD49NzspbC09NztyZXR1cm4gYT9jLmkxOG4ud2Vla2RheXNTaG9ydFtsXTpjLmkxOG4ud2Vla2RheXNb'@;
put 'bF19LHBpdD1mdW5jdGlvbihjKXtsZXQgbD1bXSxhPSJmYWxzZSI7aWYoYy5pc0VtcHR5KXtpZighYy5zaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzKXJldHVybic8dGQgY2xhc3M9ImlzLWVtcHR5Ij48L3RkPic7bC5wdXNoKCJpcy1vdXRzaWRlLWN1cnJlbnQtbW9udGgiKSxjLmVu'@;
put 'YWJsZVNlbGVjdGlvbkRheXNJbk5leHRBbmRQcmV2aW91c01vbnRoc3x8bC5wdXNoKCJpcy1zZWxlY3Rpb24tZGlzYWJsZWQiKX1yZXR1cm4gYy5pc0Rpc2FibGVkJiZsLnB1c2goImlzLWRpc2FibGVkIiksYy5pc1RvZGF5JiZsLnB1c2goImlzLXRvZGF5IiksYy5pc1NlbGVjdGVkJiYobC5w'@;
put 'dXNoKCJpcy1zZWxlY3RlZCIpLGE9InRydWUiKSxjLmhhc0V2ZW50JiZsLnB1c2goImhhcy1ldmVudCIpLGMuaXNJblJhbmdlJiZsLnB1c2goImlzLWlucmFuZ2UiKSxjLmlzU3RhcnRSYW5nZSYmbC5wdXNoKCJpcy1zdGFydHJhbmdlIiksYy5pc0VuZFJhbmdlJiZsLnB1c2goImlzLWVuZHJh'@;
put 'bmdlIiksJzx0ZCBkYXRhLWRheT0iJytjLmRheSsnIiBjbGFzcz0iJytsLmpvaW4oIiAiKSsnIiBhcmlhLXNlbGVjdGVkPSInK2ErJyI+PGJ1dHRvbiBjbGFzcz0icGlrYS1idXR0b24gcGlrYS1kYXkiIHR5cGU9ImJ1dHRvbiIgZGF0YS1waWthLXllYXI9IicrYy55ZWFyKyciIGRhdGEtcGlr'@;
put 'YS1tb250aD0iJytjLm1vbnRoKyciIGRhdGEtcGlrYS1kYXk9IicrYy5kYXkrJyI+JytjLmRheSsiPC9idXR0b24+PC90ZD4ifSxtaXQ9ZnVuY3Rpb24oYyxsLGEsZCxoKXtsZXQgZj1uZXcgRGF0ZShkLGEsbCk7cmV0dXJuJzx0ZCBjbGFzcz0icGlrYS13ZWVrIj4nKyhjLmhhc01vbWVudD9j'@;
put 'Lm1vbWVudChmKS5pc29XZWVrKCk6ZnVuY3Rpb24oYyxsKXtjLnNldEhvdXJzKDAsMCwwLDApO2xldCBhPWMuZ2V0RGF0ZSgpLGQ9Yy5nZXREYXkoKSxoPWwsZj1oLTEsTT1mdW5jdGlvbihiZSl7cmV0dXJuKGJlKzctMSklN307Yy5zZXREYXRlKGErZi1NKGQpKTtsZXQgRD1uZXcgRGF0ZShj'@;
put 'LmdldEZ1bGxZZWFyKCksMCxoKSxuZT0oYy5nZXRUaW1lKCktRC5nZXRUaW1lKCkpLzg2NGU1O3JldHVybiAxK01hdGgucm91bmQoKG5lLWYrTShELmdldERheSgpKSkvNyl9KGYsaCkpKyI8L3RkPiJ9LHZpdD1mdW5jdGlvbihjLGwsYSxkKXtyZXR1cm4nPHRyIGNsYXNzPSJwaWthLXJvdycr'@;
put 'KGE/IiBwaWNrLXdob2xlLXdlZWsiOiIiKSsoZD8iIGlzLXNlbGVjdGVkIjoiIikrJyI+JysobD9jLnJldmVyc2UoKTpjKS5qb2luKCIiKSsiPC90cj4ifSxfaXQ9ZnVuY3Rpb24oYyxsLGEsZCxoLGYpe2xldCB2LE0sRCxFZSxCZSxaPWMuX28sbmU9YT09PVoubWluWWVhcixjZT1hPT09Wi5t'@;
put 'YXhZZWFyLGJlPSc8ZGl2IGlkPSInK2YrJyIgY2xhc3M9InBpa2EtdGl0bGUiIHJvbGU9ImhlYWRpbmciIGFyaWEtbGl2ZT0icG9saXRlIj4nLHFlPSEwLHJ0PSEwO2ZvcihEPVtdLHY9MDt2PDEyO3YrKylELnB1c2goJzxvcHRpb24gdmFsdWU9IicrKGE9PT1oP3YtbDoxMit2LWwpKyciJyso'@;
put 'dj09PWQ/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzoiIikrKG5lJiZ2PFoubWluTW9udGh8fGNlJiZ2PloubWF4TW9udGg/JyBkaXNhYmxlZD0iZGlzYWJsZWQiJzoiIikrIj4iK1ouaTE4bi5tb250aHNbdl0rIjwvb3B0aW9uPiIpO2ZvcihFZT0nPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+Jyta'@;
put 'LmkxOG4ubW9udGhzW2RdKyc8c2VsZWN0IGNsYXNzPSJwaWthLXNlbGVjdCBwaWthLXNlbGVjdC1tb250aCIgdGFiaW5kZXg9Ii0xIj4nK0Quam9pbigiIikrIjwvc2VsZWN0PjwvZGl2PiIsSFgoWi55ZWFyUmFuZ2UpPyh2PVoueWVhclJhbmdlWzBdLE09Wi55ZWFyUmFuZ2VbMV0rMSk6KHY9'@;
put 'YS1aLnllYXJSYW5nZSxNPTErYStaLnllYXJSYW5nZSksRD1bXTt2PE0mJnY8PVoubWF4WWVhcjt2Kyspdj49Wi5taW5ZZWFyJiZELnB1c2goJzxvcHRpb24gdmFsdWU9IicrdisnIicrKHY9PT1hPycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyI+Iit2KyI8L29wdGlvbj4iKTtyZXR1cm4g'@;
put 'QmU9JzxkaXYgY2xhc3M9InBpa2EtbGFiZWwiPicrYStaLnllYXJTdWZmaXgrJzxzZWxlY3QgY2xhc3M9InBpa2Etc2VsZWN0IHBpa2Etc2VsZWN0LXllYXIiIHRhYmluZGV4PSItMSI+JytELmpvaW4oIiIpKyI8L3NlbGVjdD48L2Rpdj4iLGJlKz1aLnNob3dNb250aEFmdGVyWWVhcj9CZStF'@;
put 'ZTpFZStCZSxuZSYmKDA9PT1kfHxaLm1pbk1vbnRoPj1kKSYmKHFlPSExKSxjZSYmKDExPT09ZHx8Wi5tYXhNb250aDw9ZCkmJihydD0hMSksMD09PWwmJihiZSs9JzxidXR0b24gY2xhc3M9InBpa2EtcHJldicrKHFlPyIiOiIgaXMtZGlzYWJsZWQiKSsnIiB0eXBlPSJidXR0b24iPicrWi5p'@;
put 'MThuLnByZXZpb3VzTW9udGgrIjwvYnV0dG9uPiIpLGw9PT1jLl9vLm51bWJlck9mTW9udGhzLTEmJihiZSs9JzxidXR0b24gY2xhc3M9InBpa2EtbmV4dCcrKHJ0PyIiOiIgaXMtZGlzYWJsZWQiKSsnIiB0eXBlPSJidXR0b24iPicrWi5pMThuLm5leHRNb250aCsiPC9idXR0b24+IiksYmUr'@;
put 'IjwvZGl2PiJ9O2Z1bmN0aW9uIE5YKGMpe2xldCBsPXRoaXMsYT1sLmNvbmZpZyhjKTtsLl9vbk1vdXNlRG93bj1mdW5jdGlvbihoKXtpZighbC5fdilyZXR1cm47bGV0IGY9KGg9aHx8WW0oKS5ldmVudCkudGFyZ2V0fHxoLnNyY0VsZW1lbnQ7aWYoZilpZihSaChmLCJpcy1kaXNhYmxlZCIp'@;
put 'fHwoIVJoKGYsInBpa2EtYnV0dG9uIil8fFJoKGYsImlzLWVtcHR5Iil8fFJoKGYucGFyZW50Tm9kZSwiaXMtZGlzYWJsZWQiKT9SaChmLCJwaWthLXByZXYiKT9sLnByZXZNb250aCgpOlJoKGYsInBpa2EtbmV4dCIpJiZsLm5leHRNb250aCgpOihsLnNldERhdGUobmV3IERhdGUoZi5nZXRB'@;
put 'dHRyaWJ1dGUoImRhdGEtcGlrYS15ZWFyIiksZi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1tb250aCIpLGYuZ2V0QXR0cmlidXRlKCJkYXRhLXBpa2EtZGF5IikpKSxhLmJvdW5kJiZPWChmdW5jdGlvbigpe2wuaGlkZSgpLGEuYmx1ckZpZWxkT25TZWxlY3QmJmEuZmllbGQmJmEuZmllbGQu'@;
put 'Ymx1cigpfSwxMDApKSksUmgoZiwicGlrYS1zZWxlY3QiKSlsLl9jPSEwO2Vsc2V7aWYoIWgucHJldmVudERlZmF1bHQpcmV0dXJuIGgucmV0dXJuVmFsdWU9ITEsITE7aC5wcmV2ZW50RGVmYXVsdCgpfX0sbC5fb25DaGFuZ2U9ZnVuY3Rpb24oaCl7bGV0IGY9KGg9aHx8WW0oKS5ldmVudCku'@;
put 'dGFyZ2V0fHxoLnNyY0VsZW1lbnQ7ZiYmKFJoKGYsInBpa2Etc2VsZWN0LW1vbnRoIik/bC5nb3RvTW9udGgoZi52YWx1ZSk6UmgoZiwicGlrYS1zZWxlY3QteWVhciIpJiZsLmdvdG9ZZWFyKGYudmFsdWUpKX0sbC5fb25LZXlDaGFuZ2U9ZnVuY3Rpb24oaCl7aWYoaD1ofHxZbSgpLmV2ZW50'@;
put 'LGwuaXNWaXNpYmxlKCkpc3dpdGNoKGgua2V5Q29kZSl7Y2FzZSAxMzpjYXNlIDI3OmEuZmllbGQmJmEuZmllbGQuYmx1cigpO2JyZWFrO2Nhc2UgMzc6bC5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsMSk7YnJlYWs7Y2FzZSAzODpsLmFkanVzdERhdGUoInN1YnRyYWN0Iiw3KTticmVhaztjYXNl'@;
put 'IDM5OmwuYWRqdXN0RGF0ZSgiYWRkIiwxKTticmVhaztjYXNlIDQwOmwuYWRqdXN0RGF0ZSgiYWRkIiw3KTticmVhaztjYXNlIDg6Y2FzZSA0NjpsLnNldERhdGUobnVsbCl9fSxsLl9wYXJzZUZpZWxkVmFsdWU9ZnVuY3Rpb24oKXtpZihhLnBhcnNlKXJldHVybiBhLnBhcnNlKGEuZmllbGQu'@;
put 'dmFsdWUsYS5mb3JtYXQpO2lmKHRoaXMuaGFzTW9tZW50KXtsZXQgaD10aGlzLm1vbWVudChhLmZpZWxkLnZhbHVlLGEuZm9ybWF0LGEuZm9ybWF0U3RyaWN0KTtyZXR1cm4gaCYmaC5pc1ZhbGlkKCk/aC50b0RhdGUoKTpudWxsfXJldHVybiBuZXcgRGF0ZShEYXRlLnBhcnNlKGEuZmllbGQu'@;
put 'dmFsdWUpKX0sbC5fb25JbnB1dENoYW5nZT1mdW5jdGlvbihoKXtsZXQgZjtoLmZpcmVkQnkhPT1sJiYoZj1sLl9wYXJzZUZpZWxkVmFsdWUoKSxMaChmKSYmbC5zZXREYXRlKGYpLGwuX3Z8fGwuc2hvdygpKX0sbC5fb25JbnB1dEZvY3VzPWZ1bmN0aW9uKCl7bC5zaG93KCl9LGwuX29uSW5w'@;
put 'dXRDbGljaz1mdW5jdGlvbigpe2wuc2hvdygpfSxsLl9vbklucHV0Qmx1cj1mdW5jdGlvbigpe2xldCBoPVcyKCkuYWN0aXZlRWxlbWVudDtkb3tpZihSaChoLCJwaWthLXNpbmdsZSIpKXJldHVybn13aGlsZShoPWgucGFyZW50Tm9kZSk7bC5fY3x8KGwuX2I9T1goZnVuY3Rpb24oKXtsLmhp'@;
put 'ZGUoKX0sNTApKSxsLl9jPSExfSxsLl9vbkNsaWNrPWZ1bmN0aW9uKGgpe2xldCBmPShoPWh8fFltKCkuZXZlbnQpLnRhcmdldHx8aC5zcmNFbGVtZW50LHY9ZjtpZihmKXshaGFzRXZlbnRMaXN0ZW5lcnMmJlJoKGYsInBpa2Etc2VsZWN0IikmJihmLm9uY2hhbmdlfHwoZi5zZXRBdHRyaWJ1'@;
put 'dGUoIm9uY2hhbmdlIiwicmV0dXJuOyIpLEhwKGYsImNoYW5nZSIsbC5fb25DaGFuZ2UpKSk7ZG97aWYoUmgodiwicGlrYS1zaW5nbGUiKXx8dj09PWEudHJpZ2dlcilyZXR1cm59d2hpbGUodj12LnBhcmVudE5vZGUpO2wuX3YmJmYhPT1hLnRyaWdnZXImJnYhPT1hLnRyaWdnZXImJmwuaGlk'@;
put 'ZSgpfX0sbC5lbD1XMigpLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGwuZWwuY2xhc3NOYW1lPSJwaWthLXNpbmdsZSIrKGEuaXNSVEw/IiBpcy1ydGwiOiIiKSsoYS50aGVtZT8iICIrYS50aGVtZToiIiksSHAobC5lbCwibW91c2Vkb3duIixsLl9vbk1vdXNlRG93biwhMCksSHAobC5lbCwidG91'@;
put 'Y2hlbmQiLGwuX29uTW91c2VEb3duLCEwKSxIcChsLmVsLCJjaGFuZ2UiLGwuX29uQ2hhbmdlKSxhLmtleWJvYXJkSW5wdXQmJkhwKFcyKCksImtleWRvd24iLGwuX29uS2V5Q2hhbmdlKSxhLmZpZWxkJiYoYS5jb250YWluZXI/YS5jb250YWluZXIuYXBwZW5kQ2hpbGQobC5lbCk6YS5ib3Vu'@;
put 'ZD9XMigpLmJvZHkuYXBwZW5kQ2hpbGQobC5lbCk6YS5maWVsZC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLmVsLGEuZmllbGQubmV4dFNpYmxpbmcpLEhwKGEuZmllbGQsImNoYW5nZSIsbC5fb25JbnB1dENoYW5nZSksYS5kZWZhdWx0RGF0ZXx8KGEuZGVmYXVsdERhdGU9bC5fcGFyc2VG'@;
put 'aWVsZFZhbHVlKCksYS5zZXREZWZhdWx0RGF0ZT0hMCkpO2xldCBkPWEuZGVmYXVsdERhdGU7TGgoZCk/YS5zZXREZWZhdWx0RGF0ZT9sLnNldERhdGUoZCwhMCk6bC5nb3RvRGF0ZShkKTpsLmdvdG9EYXRlKG5ldyBEYXRlKSxhLmJvdW5kPyh0aGlzLmhpZGUoKSxsLmVsLmNsYXNzTmFtZSs9'@;
put 'IiBpcy1ib3VuZCIsSHAoYS50cmlnZ2VyLCJjbGljayIsbC5fb25JbnB1dENsaWNrKSxIcChhLnRyaWdnZXIsImZvY3VzIixsLl9vbklucHV0Rm9jdXMpLEhwKGEudHJpZ2dlciwiYmx1ciIsbC5fb25JbnB1dEJsdXIpKTp0aGlzLnNob3coKX1mdW5jdGlvbiBIcGUoYyxsLGEpe3JldHVybihs'@;
put 'PWZ1bmN0aW9uIE1pdChjKXt2YXIgbD1mdW5jdGlvbiB4aXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBl'@;
put 'b2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9'@;
put 'KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFZYKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJn'@;
put 'dW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1OWC5wcm90b3R5cGU9e2NvbmZpZzpmdW5jdGlvbihjKXt0aGlzLl9vfHwodGhpcy5fbz1VUCh7fSxOcCwhMCkpO2xldCBsPVVQKHRo'@;
put 'aXMuX28sYywhMCk7bC5pc1JUTD0hIWwuaXNSVEwsbC5maWVsZD1sLmZpZWxkJiZsLmZpZWxkLm5vZGVOYW1lP2wuZmllbGQ6bnVsbCxsLnRoZW1lPSJzdHJpbmciPT10eXBlb2YgbC50aGVtZSYmbC50aGVtZT9sLnRoZW1lOm51bGwsbC5ib3VuZD0hISh2b2lkIDAhPT1sLmJvdW5kP2wuZmll'@;
put 'bGQmJmwuYm91bmQ6bC5maWVsZCksbC50cmlnZ2VyPWwudHJpZ2dlciYmbC50cmlnZ2VyLm5vZGVOYW1lP2wudHJpZ2dlcjpsLmZpZWxkLGwuZGlzYWJsZVdlZWtlbmRzPSEhbC5kaXNhYmxlV2Vla2VuZHMsbC5kaXNhYmxlRGF5Rm49ImZ1bmN0aW9uIj09dHlwZW9mIGwuZGlzYWJsZURheUZu'@;
put 'P2wuZGlzYWJsZURheUZuOm51bGw7bGV0IGE9cGFyc2VJbnQobC5udW1iZXJPZk1vbnRocywxMCl8fDE7aWYobC5udW1iZXJPZk1vbnRocz1hPjQ/NDphLExoKGwubWluRGF0ZSl8fChsLm1pbkRhdGU9ITEpLExoKGwubWF4RGF0ZSl8fChsLm1heERhdGU9ITEpLGwubWluRGF0ZSYmbC5tYXhE'@;
put 'YXRlJiZsLm1heERhdGU8bC5taW5EYXRlJiYobC5tYXhEYXRlPWwubWluRGF0ZT0hMSksbC5taW5EYXRlJiZ0aGlzLnNldE1pbkRhdGUobC5taW5EYXRlKSxsLm1heERhdGUmJnRoaXMuc2V0TWF4RGF0ZShsLm1heERhdGUpLEhYKGwueWVhclJhbmdlKSl7bGV0IGQ9KG5ldyBEYXRlKS5nZXRG'@;
put 'dWxsWWVhcigpLTEwO2wueWVhclJhbmdlWzBdPXBhcnNlSW50KGwueWVhclJhbmdlWzBdLDEwKXx8ZCxsLnllYXJSYW5nZVsxXT1wYXJzZUludChsLnllYXJSYW5nZVsxXSwxMCl8fGR9ZWxzZSBsLnllYXJSYW5nZT1NYXRoLmFicyhwYXJzZUludChsLnllYXJSYW5nZSwxMCkpfHxOcC55ZWFy'@;
put 'UmFuZ2UsbC55ZWFyUmFuZ2U+MTAwJiYobC55ZWFyUmFuZ2U9MTAwKTtyZXR1cm4gbH0sdG9TdHJpbmc6ZnVuY3Rpb24oYyl7cmV0dXJuIGM9Y3x8dGhpcy5fby5mb3JtYXQsTGgodGhpcy5fZCk/dGhpcy5fby50b1N0cmluZz90aGlzLl9vLnRvU3RyaW5nKHRoaXMuX2QsYyk6dGhpcy5oYXNN'@;
put 'b21lbnQ/dGhpcy5tb21lbnQodGhpcy5fZCkuZm9ybWF0KGMpOnRoaXMuX2QudG9EYXRlU3RyaW5nKCk6IiJ9LGdldE1vbWVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc01vbWVudD90aGlzLm1vbWVudCh0aGlzLl9kKTpudWxsfSxzZXRNb21lbnQ6ZnVuY3Rpb24oYyxsKXt0aGlzLmhh'@;
put 'c01vbWVudCYmdGhpcy5tb21lbnQuaXNNb21lbnQoYykmJnRoaXMuc2V0RGF0ZShjLnRvRGF0ZSgpLGwpfSx1c2VNb21lbnQ6ZnVuY3Rpb24oYyl7dGhpcy5oYXNNb21lbnQ9ITAsdGhpcy5tb21lbnQ9Y30sZ2V0RGF0ZTpmdW5jdGlvbigpe3JldHVybiBMaCh0aGlzLl9kKT9uZXcgRGF0ZSh0'@;
put 'aGlzLl9kLmdldFRpbWUoKSk6bnVsbH0sc2V0RGF0ZTpmdW5jdGlvbihjLGwpe2lmKCFjKXJldHVybiB0aGlzLl9kPW51bGwsdGhpcy5fby5maWVsZCYmKHRoaXMuX28uZmllbGQudmFsdWU9IiIsT3BlKHRoaXMuX28uZmllbGQsImNoYW5nZSIse2ZpcmVkQnk6dGhpc30pKSx0aGlzLmRyYXco'@;
put 'KTtpZigic3RyaW5nIj09dHlwZW9mIGMmJihjPW5ldyBEYXRlKERhdGUucGFyc2UoYykpKSwhTGgoYykpcmV0dXJuO2xldCBhPXRoaXMuX28ubWluRGF0ZSxkPXRoaXMuX28ubWF4RGF0ZTtMaChhKSYmYzxhP2M9YTpMaChkKSYmYz5kJiYoYz1kKSx0aGlzLl9kPW5ldyBEYXRlKGMuZ2V0VGlt'@;
put 'ZSgpKSxqUCh0aGlzLl9kKSx0aGlzLmdvdG9EYXRlKHRoaXMuX2QpLHRoaXMuX28uZmllbGQmJih0aGlzLl9vLmZpZWxkLnZhbHVlPXRoaXMudG9TdHJpbmcoKSxPcGUodGhpcy5fby5maWVsZCwiY2hhbmdlIix7ZmlyZWRCeTp0aGlzfSkpLCFsJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5f'@;
put 'by5vblNlbGVjdCYmdGhpcy5fby5vblNlbGVjdC5jYWxsKHRoaXMsdGhpcy5nZXREYXRlKCkpfSxjbGVhcjpmdW5jdGlvbigpe3RoaXMuc2V0RGF0ZShudWxsKX0sZ290b0RhdGU6ZnVuY3Rpb24oYyl7bGV0IGw9ITA7aWYoTGgoYykpe2lmKHRoaXMuY2FsZW5kYXJzKXtsZXQgYT1uZXcgRGF0'@;
put 'ZSh0aGlzLmNhbGVuZGFyc1swXS55ZWFyLHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLDEpLGQ9bmV3IERhdGUodGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLnllYXIsdGhpcy5jYWxlbmRhcnNbdGhpcy5jYWxlbmRhcnMubGVuZ3RoLTFdLm1vbnRoLDEpLGg9Yy5nZXRU'@;
put 'aW1lKCk7ZC5zZXRNb250aChkLmdldE1vbnRoKCkrMSksZC5zZXREYXRlKGQuZ2V0RGF0ZSgpLTEpLGw9aDxhLmdldFRpbWUoKXx8ZC5nZXRUaW1lKCk8aH1sJiYodGhpcy5jYWxlbmRhcnM9W3ttb250aDpjLmdldE1vbnRoKCkseWVhcjpjLmdldEZ1bGxZZWFyKCl9XSwicmlnaHQiPT09dGhp'@;
put 'cy5fby5tYWluQ2FsZW5kYXImJih0aGlzLmNhbGVuZGFyc1swXS5tb250aCs9MS10aGlzLl9vLm51bWJlck9mTW9udGhzKSksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKX19LGFkanVzdERhdGU6ZnVuY3Rpb24oYyxsKXtsZXQgaCxhPXRoaXMuZ2V0RGF0ZSgpfHxuZXcgRGF0ZSxkPTI0KnBhcnNl'@;
put 'SW50KGwpKjYwKjYwKjFlMzsiYWRkIj09PWM/aD1uZXcgRGF0ZShhLnZhbHVlT2YoKStkKToic3VidHJhY3QiPT09YyYmKGg9bmV3IERhdGUoYS52YWx1ZU9mKCktZCkpLHRoaXMuc2V0RGF0ZShoKX0sYWRqdXN0Q2FsZW5kYXJzOmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF09UHBlKHRo'@;
put 'aXMuY2FsZW5kYXJzWzBdKTtmb3IobGV0IGM9MTtjPHRoaXMuX28ubnVtYmVyT2ZNb250aHM7YysrKXRoaXMuY2FsZW5kYXJzW2NdPVBwZSh7bW9udGg6dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgrYyx5ZWFyOnRoaXMuY2FsZW5kYXJzWzBdLnllYXJ9KTt0aGlzLmRyYXcoKX0sZ290b1RvZGF5'@;
put 'OmZ1bmN0aW9uKCl7dGhpcy5nb3RvRGF0ZShuZXcgRGF0ZSl9LGdvdG9Nb250aDpmdW5jdGlvbihjKXtpc05hTihjKXx8KHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoPXBhcnNlSW50KGMsMTApLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCkpfSxuZXh0TW9udGg6ZnVuY3Rpb24oKXt0aGlzLmNhbGVu'@;
put 'ZGFyc1swXS5tb250aCsrLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCl9LHByZXZNb250aDpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdLm1vbnRoLS0sdGhpcy5hZGp1c3RDYWxlbmRhcnMoKX0sZ290b1llYXI6ZnVuY3Rpb24oYyl7aXNOYU4oYyl8fCh0aGlzLmNhbGVuZGFyc1swXS55ZWFy'@;
put 'PXBhcnNlSW50KGMsMTApLHRoaXMuYWRqdXN0Q2FsZW5kYXJzKCkpfSxzZXRNaW5EYXRlOmZ1bmN0aW9uKGMpe2MgaW5zdGFuY2VvZiBEYXRlPyhqUChjKSx0aGlzLl9vLm1pbkRhdGU9Yyx0aGlzLl9vLm1pblllYXI9Yy5nZXRGdWxsWWVhcigpLHRoaXMuX28ubWluTW9udGg9Yy5nZXRNb250'@;
put 'aCgpKToodGhpcy5fby5taW5EYXRlPU5wLm1pbkRhdGUsdGhpcy5fby5taW5ZZWFyPU5wLm1pblllYXIsdGhpcy5fby5taW5Nb250aD1OcC5taW5Nb250aCx0aGlzLl9vLnN0YXJ0UmFuZ2U9TnAuc3RhcnRSYW5nZSksdGhpcy5kcmF3KCl9LHNldE1heERhdGU6ZnVuY3Rpb24oYyl7YyBpbnN0'@;
put 'YW5jZW9mIERhdGU/KGpQKGMpLHRoaXMuX28ubWF4RGF0ZT1jLHRoaXMuX28ubWF4WWVhcj1jLmdldEZ1bGxZZWFyKCksdGhpcy5fby5tYXhNb250aD1jLmdldE1vbnRoKCkpOih0aGlzLl9vLm1heERhdGU9TnAubWF4RGF0ZSx0aGlzLl9vLm1heFllYXI9TnAubWF4WWVhcix0aGlzLl9vLm1h'@;
put 'eE1vbnRoPU5wLm1heE1vbnRoLHRoaXMuX28uZW5kUmFuZ2U9TnAuZW5kUmFuZ2UpLHRoaXMuZHJhdygpfSxzZXRTdGFydFJhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuX28uc3RhcnRSYW5nZT1jfSxzZXRFbmRSYW5nZTpmdW5jdGlvbihjKXt0aGlzLl9vLmVuZFJhbmdlPWN9LGRyYXc6ZnVuY3Rp'@;
put 'b24oYyl7aWYoIXRoaXMuX3YmJiFjKXJldHVybjtsZXQgTSxsPXRoaXMuX28sYT1sLm1pblllYXIsZD1sLm1heFllYXIsaD1sLm1pbk1vbnRoLGY9bC5tYXhNb250aCx2PSIiO3RoaXMuX3k8PWEmJih0aGlzLl95PWEsIWlzTmFOKGgpJiZ0aGlzLl9tPGgmJih0aGlzLl9tPWgpKSx0aGlzLl95'@;
put 'Pj1kJiYodGhpcy5feT1kLCFpc05hTihmKSYmdGhpcy5fbT5mJiYodGhpcy5fbT1mKSk7Zm9yKGxldCBEPTA7RDxsLm51bWJlck9mTW9udGhzO0QrKylNPSJwaWthLXRpdGxlLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZSgvW15hLXpdKy9nLCIiKS5zdWJzdHIoMCwyKSx2'@;
put 'Kz0nPGRpdiBjbGFzcz0icGlrYS1sZW5kYXIiPicrX2l0KHRoaXMsRCx0aGlzLmNhbGVuZGFyc1tEXS55ZWFyLHRoaXMuY2FsZW5kYXJzW0RdLm1vbnRoLHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsTSkrdGhpcy5yZW5kZXIodGhpcy5jYWxlbmRhcnNbRF0ueWVhcix0aGlzLmNhbGVuZGFyc1tE'@;
put 'XS5tb250aCxNKSsiPC9kaXY+Ijt0aGlzLmVsLmlubmVySFRNTD12LGwuYm91bmQmJiJoaWRkZW4iIT09bC5maWVsZC50eXBlJiZPWChmdW5jdGlvbigpe2wudHJpZ2dlci5mb2N1cygpfSwxKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbkRyYXcmJnRoaXMuX28ub25EcmF3KHRoaXMp'@;
put 'LGwuYm91bmQmJmwuZmllbGQuc2V0QXR0cmlidXRlKCJhcmlhLWxhYmVsIixsLmFyaWFMYWJlbCl9LGFkanVzdFBvc2l0aW9uOmZ1bmN0aW9uKCl7bGV0IGMsbCxhLGQsaCxmLHYsTSxELFosbmU7dGhpcy5fby5jb250YWluZXJ8fCh0aGlzLmVsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIs'@;
put 'Yz10aGlzLl9vLnRyaWdnZXIsbD10aGlzLmVsLm9mZnNldFdpZHRoLGE9dGhpcy5lbC5vZmZzZXRIZWlnaHQsZD1ZbSgpLmlubmVyV2lkdGh8fFcyKCkuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGg9WW0oKS5pbm5lckhlaWdodHx8VzIoKS5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVp'@;
put 'Z2h0LGY9VzIoKS5ib2R5LnNjcm9sbFRvcHx8VzIoKS5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wLFo9ITAsbmU9ITAsRD1jLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHY9RC5sZWZ0K1ltKCkucGFnZVhPZmZzZXQsTT1ELmJvdHRvbStZbSgpLnBhZ2VZT2Zmc2V0LCh0aGlzLl9vLnJlcG9z'@;
put 'aXRpb24mJnYrbD5kfHx0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoInJpZ2h0Iik+LTEmJnYtbCtjLm9mZnNldFdpZHRoPjApJiYodj12LWwrYy5vZmZzZXRXaWR0aCxaPSExKSwodGhpcy5fby5yZXBvc2l0aW9uJiZNK2E+aCtmfHx0aGlzLl9vLnBvc2l0aW9uLmluZGV4T2YoInRvcCIpPi0x'@;
put 'JiZNLWEtYy5vZmZzZXRIZWlnaHQ+MCkmJihNPU0tYS1jLm9mZnNldEhlaWdodCxuZT0hMSksdjwwJiYodj0wKSxNPDAmJihNPTApLHRoaXMuZWwuc3R5bGUubGVmdD12KyJweCIsdGhpcy5lbC5zdHlsZS50b3A9TSsicHgiLFBYKHRoaXMuZWwsWj8ibGVmdC1hbGlnbmVkIjoicmlnaHQtYWxp'@;
put 'Z25lZCIpLFBYKHRoaXMuZWwsbmU/ImJvdHRvbS1hbGlnbmVkIjoidG9wLWFsaWduZWQiKSxGWCh0aGlzLmVsLFo/InJpZ2h0LWFsaWduZWQiOiJsZWZ0LWFsaWduZWQiKSxGWCh0aGlzLmVsLG5lPyJ0b3AtYWxpZ25lZCI6ImJvdHRvbS1hbGlnbmVkIikpfSxyZW5kZXI6ZnVuY3Rpb24oYyxs'@;
put 'LGEpe2xldCBkPXRoaXMuX28saD1uZXcgRGF0ZSxmPUxwZShjLGwpLHY9bmV3IERhdGUoYyxsLDEpLmdldERheSgpLE09W10sRD1bXTtqUChoKSxkLmZpcnN0RGF5PjAmJih2LT1kLmZpcnN0RGF5LHY8MCYmKHYrPTcpKTtsZXQgWj0wPT09bD8xMTpsLTEsbmU9MTE9PT1sPzA6bCsxLGNlPTA9'@;
put 'PT1sP2MtMTpjLGJlPTExPT09bD9jKzE6YyxFZT1McGUoY2UsWiksQmU9Zit2LHFlPUJlO2Zvcig7cWU+NzspcWUtPTc7QmUrPTctcWU7bGV0IHJ0PSExO2ZvcihsZXQgcHQ9MCxkdD0wO3B0PEJlO3B0Kyspe2xldCBKdD1uZXcgRGF0ZShjLGwscHQtdisxKSx2bj0hIUxoKHRoaXMuX2QpJiZ6'@;
put 'UChKdCx0aGlzLl9kKSxDbj16UChKdCxoKSx0bj0tMSE9PWQuZXZlbnRzLmluZGV4T2YoSnQudG9EYXRlU3RyaW5nKCkpLE1uPXB0PHZ8fHB0Pj1mK3YsQ3I9cHQtdisxLEdyPWwsZ3I9YyxHbj1kLnN0YXJ0UmFuZ2UmJnpQKGQuc3RhcnRSYW5nZSxKdCksb2k9ZC5lbmRSYW5nZSYmelAoZC5l'@;
put 'bmRSYW5nZSxKdCksX2k9ZC5zdGFydFJhbmdlJiZkLmVuZFJhbmdlJiZkLnN0YXJ0UmFuZ2U8SnQmJkp0PGQuZW5kUmFuZ2UsT249ZC5taW5EYXRlJiZKdDxkLm1pbkRhdGV8fGQubWF4RGF0ZSYmSnQ+ZC5tYXhEYXRlfHxkLmRpc2FibGVXZWVrZW5kcyYmaGl0KEp0KXx8ZC5kaXNhYmxlRGF5'@;
put 'Rm4mJmQuZGlzYWJsZURheUZuKEp0KTtNbiYmKHB0PHY/KENyPUVlK0NyLEdyPVosZ3I9Y2UpOihDci09ZixHcj1uZSxncj1iZSkpLGQucGlja1dob2xlV2VlayYmdm4mJihydD0hMCksRC5wdXNoKHBpdCh7ZGF5OkNyLG1vbnRoOkdyLHllYXI6Z3IsaGFzRXZlbnQ6dG4saXNTZWxlY3RlZDp2'@;
put 'bixpc1RvZGF5OkNuLGlzRGlzYWJsZWQ6T24saXNFbXB0eTpNbixpc1N0YXJ0UmFuZ2U6R24saXNFbmRSYW5nZTpvaSxpc0luUmFuZ2U6X2ksc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRoczpkLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMsZW5hYmxlU2VsZWN0aW9uRGF5'@;
put 'c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOmQuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzfSkpLDc9PSsrZHQmJihkLnNob3dXZWVrTnVtYmVyJiZELnVuc2hpZnQobWl0KHRoaXMscHQtdixsLGMsZC5maXJzdFdlZWtPZlllYXJNaW5EYXlzKSksTS5wdXNoKHZp'@;
put 'dChELGQuaXNSVEwsZC5waWNrV2hvbGVXZWVrLHJ0KSksRD1bXSxkdD0wLHJ0PSExKX1yZXR1cm4gZnVuY3Rpb24oYyxsLGEpe3JldHVybic8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGlrYS10YWJsZSIgcm9sZT0iZ3JpZCIgYXJpYS1sYWJlbGxlZGJ5'@;
put 'PSInK2ErJyI+JytmdW5jdGlvbihjKXtsZXQgbCxhPVtdO2ZvcihjLnNob3dXZWVrTnVtYmVyJiZhLnB1c2goIjx0aD48L3RoPiIpLGw9MDtsPDc7bCsrKWEucHVzaCgnPHRoIHNjb3BlPSJjb2wiPjxhYmJyIHRpdGxlPSInK0ZwZShjLGwpKyciPicrRnBlKGMsbCwhMCkrIjwvYWJicj48L3Ro'@;
put 'PiIpO3JldHVybiI8dGhlYWQ+PHRyPiIrKGMuaXNSVEw/YS5yZXZlcnNlKCk6YSkuam9pbigiIikrIjwvdHI+PC90aGVhZD4ifShjKStmdW5jdGlvbihjKXtyZXR1cm4iPHRib2R5PiIrYy5qb2luKCIiKSsiPC90Ym9keT4ifShsKSsiPC90YWJsZT4ifShkLE0sYSl9LGlzVmlzaWJsZTpmdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLl92fSxzaG93OmZ1bmN0aW9uKCl7dGhpcy5pc1Zpc2libGUoKXx8KHRoaXMuX3Y9ITAsdGhpcy5kcmF3KCksRlgodGhpcy5lbCwiaXMtaGlkZGVuIiksdGhpcy5fby5ib3VuZCYmKEhwKFcyKCksImNsaWNrIix0aGlzLl9vbkNsaWNrKSx0aGlzLmFkanVzdFBv'@;
put 'c2l0aW9uKCkpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uT3BlbiYmdGhpcy5fby5vbk9wZW4uY2FsbCh0aGlzKSl9LGhpZGU6ZnVuY3Rpb24oKXtsZXQgYz10aGlzLl92OyExIT09YyYmKHRoaXMuX28uYm91bmQmJlRnKFcyKCksImNsaWNrIix0aGlzLl9vbkNsaWNrKSx0aGlzLl9v'@;
put 'LmNvbnRhaW5lcnx8KHRoaXMuZWwuc3R5bGUucG9zaXRpb249InN0YXRpYyIsdGhpcy5lbC5zdHlsZS5sZWZ0PSJhdXRvIix0aGlzLmVsLnN0eWxlLnRvcD0iYXV0byIpLFBYKHRoaXMuZWwsImlzLWhpZGRlbiIpLHRoaXMuX3Y9ITEsdm9pZCAwIT09YyYmImZ1bmN0aW9uIj09dHlwZW9mIHRo'@;
put 'aXMuX28ub25DbG9zZSYmdGhpcy5fby5vbkNsb3NlLmNhbGwodGhpcykpfSxkZXN0cm95OmZ1bmN0aW9uKCl7bGV0IGM9dGhpcy5fbzt0aGlzLmhpZGUoKSxUZyh0aGlzLmVsLCJtb3VzZWRvd24iLHRoaXMuX29uTW91c2VEb3duLCEwKSxUZyh0aGlzLmVsLCJ0b3VjaGVuZCIsdGhpcy5fb25N'@;
put 'b3VzZURvd24sITApLFRnKHRoaXMuZWwsImNoYW5nZSIsdGhpcy5fb25DaGFuZ2UpLGMua2V5Ym9hcmRJbnB1dCYmVGcoVzIoKSwia2V5ZG93biIsdGhpcy5fb25LZXlDaGFuZ2UpLGMuZmllbGQmJihUZyhjLmZpZWxkLCJjaGFuZ2UiLHRoaXMuX29uSW5wdXRDaGFuZ2UpLGMuYm91bmQmJihU'@;
put 'ZyhjLnRyaWdnZXIsImNsaWNrIix0aGlzLl9vbklucHV0Q2xpY2spLFRnKGMudHJpZ2dlciwiZm9jdXMiLHRoaXMuX29uSW5wdXRGb2N1cyksVGcoYy50cmlnZ2VyLCJibHVyIix0aGlzLl9vbklucHV0Qmx1cikpKSx0aGlzLmVsLnBhcmVudE5vZGUmJnRoaXMuZWwucGFyZW50Tm9kZS5yZW1v'@;
put 'dmVDaGlsZCh0aGlzLmVsKX19O2NvbnN0IE5wZT0iZGF0ZSIsVnBlPSJkYXRlRWRpdG9yIjt2YXIgWlA9bmV3IFdlYWtTZXQ7Y2xhc3MgQnBlIGV4dGVuZHMgcjl7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIENpdChjLGwpeyhmdW5jdGlvbiBTaXQoYyxsKXtp'@;
put 'ZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxaUCksSHBlKHRoaXMsInBhcmVudERlc3Ryb3llZCIsITEpLEhwZSh0aGlzLCIk'@;
put 'ZGF0ZVBpY2tlciIsbnVsbCl9c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiBOcGV9aW5pdCgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBPYSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGluY2x1ZGUgbW9tZW50LmpzIHRvIHlvdXIgcHJvamVjdC4iKTtzdXBlci5pbml0KCks'@;
put 'dGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJEZXN0cm95IiwoKT0+e3RoaXMucGFyZW50RGVzdHJveWVkPSEwLHRoaXMuZGVzdHJveUVsZW1lbnRzKCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwobCxhKT0+e2F8fChjYSh0aGlzLmRhdGVQaWNrZXIsL2h0LXRoZW1lLS4qL2cp'@;
put 'LFRpKHRoaXMuZGF0ZVBpY2tlcixsKSl9KX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5kYXRlUGlja2VyPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLmRhdGVQaWNrZXJTdHlsZT10aGlzLmRhdGVQaWNrZXIuc3R5'@;
put 'bGUsdGhpcy5kYXRlUGlja2VyU3R5bGUucG9zaXRpb249ImFic29sdXRlIix0aGlzLmRhdGVQaWNrZXJTdHlsZS50b3A9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS5sZWZ0PTAsdGhpcy5kYXRlUGlja2VyU3R5bGUuekluZGV4PTk5OTksdGhpcy5kYXRlUGlja2VyLnNldEF0dHJpYnV0ZSgiZGly'@;
put 'Iix0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIiKSxUaSh0aGlzLmRhdGVQaWNrZXIsImh0RGF0ZXBpY2tlckhvbGRlciIpO2NvbnN0IGw9dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpO2NhKHRoaXMuZGF0ZVBpY2tlciwvaHQtdGhlbWUtLiovZyksVGkodGhpcy5kYXRlUGlja2Vy'@;
put 'LGwpLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZGF0ZVBpY2tlciksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRhdGVQaWNrZXIsIm1vdXNlZG93biIsYT0+e3BhKGEudGFyZ2V0LCJwaWthLWRheSIpJiZ0aGlzLmhpZGVEYXRl'@;
put 'cGlja2VyKCksYS5zdG9wUHJvcGFnYXRpb24oKX0pfWRlc3Ryb3lFbGVtZW50cygpe2NvbnN0IGw9dGhpcy5kYXRlUGlja2VyLnBhcmVudE5vZGU7dGhpcy4kZGF0ZVBpY2tlciYmdGhpcy4kZGF0ZVBpY2tlci5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmRhdGVQaWNrZXIpfXBy'@;
put 'ZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpfW9wZW4oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtjb25zdCBkPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRl'@;
put 'eHQoImVkaXRvciIpO3RoaXMuc2hvd0RhdGVwaWNrZXIobCksc3VwZXIub3BlbigpLGQuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLiRkYXRlUGlja2VyLmFkanVzdERhdGUoInN1YnRyYWN0IiwxKX19LHtrZXlzOltbIkFycm93UmlnaHQi'@;
put 'XV0sY2FsbGJhY2s6KCk9Pnt0aGlzLiRkYXRlUGlja2VyLmFkanVzdERhdGUoImFkZCIsMSl9fSx7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT57dGhpcy4kZGF0ZVBpY2tlci5hZGp1c3REYXRlKCJzdWJ0cmFjdCIsNyl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6'@;
put 'KCk9Pnt0aGlzLiRkYXRlUGlja2VyLmFkanVzdERhdGUoImFkZCIsNyl9fV0se2dyb3VwOlZwZX0pfWNsb3NlKCl7dmFyIGw7dGhpcy5fb3BlbmVkPSExLG51bGwhPT0obD10aGlzLiRkYXRlUGlja2VyKSYmdm9pZCAwIT09bCYmbC5kZXN0cm95JiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3ko'@;
put 'KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57Y29uc3QgaD10aGlzLmhvdC5fZ2V0RWRpdG9yTWFuYWdlcigpO2guY2xvc2VFZGl0b3IoKSx0aGlzLmhvdC52aWV3LnJlbmRlcigpLGgucHJlcGFyZUVkaXRvcigpfSksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29u'@;
put 'dGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChWcGUpLHN1cGVyLmNsb3NlKCl9ZmluaXNoRWRpdGluZygpe3N1cGVyLmZpbmlzaEVkaXRpbmcoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxhcmd1bWVudHMubGVuZ3Ro'@;
put 'PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKX1zaG93RGF0ZXBpY2tlcihsKXtjb25zdCBhPVZYKFpQLHRoaXMsQlgpLmNhbGwodGhpcyksZD10aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCksaD0hIWwmJkwkKGwua2V5Q29kZSk7bGV0IGY7dGhpcy5kYXRlUGlja2Vy'@;
put 'LnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLiRkYXRlUGlja2VyPW5ldyBOWCh0aGlzLmdldERhdGVQaWNrZXJDb25maWcoKSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuJGRhdGVQaWNrZXIudXNlTW9tZW50JiZ0aGlzLiRkYXRlUGlja2VyLnVzZU1vbWVudChPYSksdGhpcy4kZGF0ZVBp'@;
put 'Y2tlci5fb25JbnB1dEZvY3VzPWZ1bmN0aW9uKCl7fSx0aGlzLm9yaWdpbmFsVmFsdWU/KGY9dGhpcy5vcmlnaW5hbFZhbHVlLE9hKGYsYSwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudChPYShmLGEpLCEwKSx0aGlzLmdldFZhbHVlKCkhPT10aGlzLm9yaWdpbmFs'@;
put 'VmFsdWUmJnRoaXMuc2V0VmFsdWUodGhpcy5vcmlnaW5hbFZhbHVlKSwhaCYmIWQmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlPyhmPXRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGUsT2EoZixhLCEwKS5pc1ZhbGlkKCkmJnRoaXMuJGRh'@;
put 'dGVQaWNrZXIuc2V0TW9tZW50KE9hKGYsYSksITApLCFoJiYhZCYmdGhpcy5zZXRWYWx1ZSgiIikpOnRoaXMuJGRhdGVQaWNrZXIuZ290b1RvZGF5KCl9aGlkZURhdGVwaWNrZXIoKXt0aGlzLmRhdGVQaWNrZXJTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLiRkYXRlUGlja2VyLmhpZGUoKX1n'@;
put 'ZXREYXRlUGlja2VyQ29uZmlnKCl7dmFyIGw7Y29uc3QgYT10aGlzLlRFWFRBUkVBLGQ9e307dGhpcy5jZWxsUHJvcGVydGllcyYmdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlja2VyQ29uZmlnJiZNRShkLHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyk7Y29uc3QgaD1k'@;
put 'Lm9uU2VsZWN0LGY9ZC5vbkNsb3NlO3JldHVybiBkLmZpZWxkPWEsZC50cmlnZ2VyPWEsZC5jb250YWluZXI9dGhpcy5kYXRlUGlja2VyLGQuYm91bmQ9ITEsZC5rZXlib2FyZElucHV0PSExLGQuZm9ybWF0PW51bGwhPT0obD1kLmZvcm1hdCkmJnZvaWQgMCE9PWw/bDpWWChaUCx0aGlzLEJY'@;
put 'KS5jYWxsKHRoaXMpLGQucmVwb3NpdGlvbj1kLnJlcG9zaXRpb258fCExLGQuaXNSVEw9ITEsZC5vblNlbGVjdD12PT57bGV0IE09djtpc05hTihNLmdldFRpbWUoKSl8fChNPU9hKE0pLmZvcm1hdChWWChaUCx0aGlzLEJYKS5jYWxsKHRoaXMpKSksdGhpcy5zZXRWYWx1ZShNKSxoJiZoKCks'@;
put 'QXAoKSYmdGhpcy5oaWRlRGF0ZXBpY2tlcigpfSxkLm9uQ2xvc2U9KCk9Pnt0aGlzLnBhcmVudERlc3Ryb3llZHx8dGhpcy5maW5pc2hFZGl0aW5nKCExKSxmJiZmKCl9LGR9cmVmcmVzaERpbWVuc2lvbnMobCl7dmFyIGE7aWYoc3VwZXIucmVmcmVzaERpbWVuc2lvbnMobCksdGhpcy5zdGF0'@;
put 'ZSE9PXN1LkVESVRJTkcpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQgdGhpcy5oaWRlRGF0ZXBpY2tlcigpO2NvbnN0e3Jvd0luZGV4TWFwcGVyOmQsY29sdW1uSW5kZXhNYXBwZXI6aH09dGhpcy5ob3Qse3d0T3ZlcmxheXM6Zn09'@;
put 'dGhpcy5ob3Qudmlldy5fd3Qse3d0VGFibGU6dn09bnVsbCE9PShhPWYuZ2V0UGFyZW50T3ZlcmxheSh0aGlzLlREKSkmJnZvaWQgMCE9PWE/YTp0aGlzLmhvdC52aWV3Ll93dCxNPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygp'@;
put 'KSxEPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpLFo9aC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpLG5lPWguZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJ'@;
put 'bmRleCh2LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpO2lmKHRoaXMucm93Pj1NJiZ0aGlzLnJvdzw9RCYmdGhpcy5jb2w+PVomJnRoaXMuY29sPD1uZSl7Y29uc3QgY2U9dGhpcy5URC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLmRhdGVQaWNrZXJTdHlsZS50b3A9YCR7'@;
put 'dGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWU9mZnNldCtjZS50b3ArTXUodGhpcy5URCl9cHhgO2xldCBiZT10aGlzLmhvdC5yb290V2luZG93LnBhZ2VYT2Zmc2V0O3RoaXMuaG90LmlzUnRsKCk/YmUrPWNlLnJpZ2h0LWF1KHRoaXMuZGF0ZVBpY2tlcik6YmUrPWNlLmxlZnQsdGhpcy5kYXRl'@;
put 'UGlja2VyU3R5bGUubGVmdD1gJHtiZX1weGB9ZWxzZSB0aGlzLmhpZGVEYXRlcGlja2VyKCl9fWZ1bmN0aW9uIEJYKCl7dmFyIGM7cmV0dXJuIG51bGwhPT0oYz10aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVGb3JtYXQpJiZ2b2lkIDAhPT1jP2M6IkREL01NL1lZWVkifWNsYXNzIGpwZSBleHRl'@;
put 'bmRzIExYe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iZHJvcGRvd24ifXByZXBhcmUobCxhLGQsaCxmLHYpe3YuZmlsdGVyPSExLHYuc3RyaWN0PSEwLHN1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpfX1jbGFzcyB6cGUgZXh0ZW5kcyByOXtzdGF0aWMgZ2V0IEVESVRPUl9UWVBF'@;
put 'KCl7cmV0dXJuIm51bWVyaWMifX1jbGFzcyBVcGUgZXh0ZW5kcyByOXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24ga2l0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEaXQoYyl7dmFyIGw9ZnVuY3Rpb24gSWl0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBj'@;
put 'fHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBh'@;
put 'IHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m'@;
put 'aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiYXV0b1Jlc2l6ZSIsX3BlKHRoaXMuaG90LnJvb3REb2N1bWVudCx7dGV4dENvbnRlbnQ6bD0+Ilx1MjAyMiIucmVwZWF0KGwudmFsdWUubGVuZ3RoKX0pKX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInBh'@;
put 'c3N3b3JkIn1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5URVhUQVJFQT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgidHlwZSIsInBhc3N3b3JkIiksdGhpcy5URVhUQVJF'@;
put 'QS5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwiIiksdGhpcy5URVhUQVJFQS5jbGFzc05hbWU9ImhhbmRzb250YWJsZUlucHV0Iix0aGlzLnRleHRhcmVhU3R5bGU9dGhpcy5URVhUQVJFQS5zdHlsZSx0aGlzLnRleHRhcmVhU3R5bGUud2lkdGg9MCx0aGlzLnRleHRhcmVhU3R5bGUu'@;
put 'aGVpZ2h0PTAseHAodGhpcy5URVhUQVJFQV9QQVJFTlQpLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUEpfX1jb25zdCBqWD0iaHRfZWRpdG9yX3Zpc2libGUiLFpwZT0ic2VsZWN0RWRpdG9yIjtjbGFzcyBXcGUgZXh0ZW5kcyBrX3tzdGF0aWMgZ2V0IEVE'@;
put 'SVRPUl9UWVBFKCl7cmV0dXJuInNlbGVjdCJ9aW5pdCgpe3RoaXMuc2VsZWN0V3JhcHBlcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zZWxlY3Q9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLHRoaXMuc2VsZWN0'@;
put 'LnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCJ0cnVlIiksdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFnczts'@;
put 'LmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJvdyIsYSYmbC5zZXRBdHRyaWJ1dGUoLi4uSDcoKSksbC5hcHBlbmRDaGlsZCh0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIlx1MjViYyIpKSxUaSh0aGlzLnNlbGVjdFdyYXBwZXIsImh0U2VsZWN0RWRpdG9yIiksdGhp'@;
put 'cy5zZWxlY3RXcmFwcGVyLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0KSx0aGlzLnNlbGVjdFdyYXBwZXIuaW5zZXJ0QmVmb3JlKGwsdGhpcy5zZWxlY3RXcmFwcGVyLmZpcnN0Q2hpbGQpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0V3JhcHBlciksdGhpcy5y'@;
put 'ZWdpc3Rlckhvb2tzKCl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5zZWxlY3QudmFsdWV9c2V0VmFsdWUobCl7dGhpcy5zZWxlY3QudmFsdWU9bH1vcGVuKCl7dGhpcy5fb3BlbmVkPSEwLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnNlbGVjdFdyYXBwZXIuc3R5bGUuZGlzcGxheT0i'@;
put 'Iix0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpfWNsb3NlKCl7dGhpcy5fb3BlbmVkPSExLHRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSJub25lIixwYSh0aGlzLnNlbGVj'@;
put 'dFdyYXBwZXIsalgpJiZjYSh0aGlzLnNlbGVjdFdyYXBwZXIsalgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJIb29rcygpfWZvY3VzKCl7dGhpcy5zZWxlY3QuZm9jdXMoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxs'@;
put 'eSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRo'@;
put 'aXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpO2NvbnN0IE09dGhpcy5jZWxsUHJvcGVydGllcy5zZWxlY3RPcHRpb25zO2xldCBEO0Q9dGhpcy5wcmVw'@;
put 'YXJlT3B0aW9ucygiZnVuY3Rpb24iPT10eXBlb2YgTT9NKHRoaXMucm93LHRoaXMuY29sLHRoaXMucHJvcCk6TSkseHAodGhpcy5zZWxlY3QpLFhhKEQsKFosbmUpPT57Y29uc3QgY2U9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIk9QVElPTiIpO2NlLnZhbHVlPW5lLEI3'@;
put 'KGNlLFopLHRoaXMuc2VsZWN0LmFwcGVuZENoaWxkKGNlKX0pfXByZXBhcmVPcHRpb25zKGwpe2xldCBhPXt9O2lmKEFycmF5LmlzQXJyYXkobCkpZm9yKGxldCBkPTAsaD1sLmxlbmd0aDtkPGg7ZCsrKWFbbFtkXV09bFtkXTtlbHNlIm9iamVjdCI9PXR5cGVvZiBsJiYoYT1sKTtyZXR1cm4g'@;
put 'YX1yZWZyZXNoVmFsdWUoKXtjb25zdCBsPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5yb3csdGhpcy5wcm9wKTt0aGlzLm9yaWdpbmFsVmFsdWU9bCx0aGlzLnNldFZhbHVlKGwpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1yZWZyZXNoRGltZW5zaW9ucygpe2lmKHRoaXMu'@;
put 'c3RhdGUhPT1zdS5FRElUSU5HKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkIHRoaXMuY2xvc2UoKTtjb25zdHt0b3A6bCxzdGFydDphLHdpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuZ2V0RWRpdGVkQ2VsbFJlY3QoKSxmPXRoaXMuc2Vs'@;
put 'ZWN0V3JhcHBlci5zdHlsZTtmLmhlaWdodD1gJHtofXB4YCxmLndpZHRoPWAke2R9cHhgLGYudG9wPWAke2x9cHhgLGZbdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Il09YCR7YX1weGAsZi5tYXJnaW49IjBweCIsVGkodGhpcy5zZWxlY3RXcmFwcGVyLGpYKX1yZWdpc3RlclNob3J0'@;
put 'Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksZD17Z3JvdXA6WnBlfTt0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSYmYS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRo'@;
put 'aXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgtMTtoPj0wJiYodGhpcy5zZWxlY3RbaF0uc2VsZWN0ZWQ9ITApfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLnNlbGVjdC5zZWxlY3RlZEluZGV4KzE7aDw9dGhpcy5zZWxlY3QubGVuZ3RoLTEmJih0aGlz'@;
put 'LnNlbGVjdFtoXS5zZWxlY3RlZD0hMCl9fV0sZCl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoWnBlKX19Y2xhc3MgWXBlIGV4dGVuZHMgcjl7c3RhdGljIGdldCBF'@;
put 'RElUT1JfVFlQRSgpe3JldHVybiJ0aW1lIn1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KSx0aGlzLlRFWFRBUkVBLmRpcj0ibHRyIn19ZnVuY3Rpb24gelgoYyxsLGEsZCxoLGYsdil7b1QuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLEI3KGwsZj8/'@;
put 'IiIsITEpfWZ1bmN0aW9uIElfKGMsbCxhLGQsaCxmLHYpe2NvbnN0e3Jvb3REb2N1bWVudDpNfT1jLEQ9di5hbGxvd0h0bWw/elg6RWcsWj1NLmNyZWF0ZUVsZW1lbnQoIkRJViIpLG5lPWMuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztpZihaLmNsYXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJv'@;
put 'dyIsbmUmJlouc2V0QXR0cmlidXRlKC4uLkg3KCkpLFouYXBwZW5kQ2hpbGQoTS5jcmVhdGVUZXh0Tm9kZSgiXHUyNWJjIikpLEQuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGwuZmlyc3RDaGlsZHx8bC5hcHBlbmRDaGlsZChNLmNyZWF0ZVRleHROb2RlKCJceGEwIikpLGwuaW5zZXJ0'@;
put 'QmVmb3JlKFosbC5maXJzdENoaWxkKSxUaShsLCJodEF1dG9jb21wbGV0ZSIpLCFjLmFjQXJyb3dMaXN0ZW5lcil7Y29uc3QgY2U9bmV3IE4yKGMpO2MuYWNBcnJvd0xpc3RlbmVyPWZ1bmN0aW9uKGJlKXtwYShiZS50YXJnZXQsImh0QXV0b2NvbXBsZXRlQXJyb3ciKSYmYy52aWV3Ll93dC5n'@;
put 'ZXRTZXR0aW5nKCJvbkNlbGxEYmxDbGljayIsbnVsbCxjLl9jcmVhdGVDZWxsQ29vcmRzKGEsZCksbCl9LGNlLmFkZEV2ZW50TGlzdGVuZXIoYy5yb290RWxlbWVudCwibW91c2Vkb3duIixjLmFjQXJyb3dMaXN0ZW5lciksYy5hZGRIb29rT25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+e2NlLmRl'@;
put 'c3Ryb3koKX0pfX1mdW5jdGlvbiBVWChjLGwsYSxkLGgsZix2KXtJXy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9elguUkVOREVSRVJfVFlQRT0iaHRtbCIsSV8uUkVOREVSRVJfVFlQRT0iYXV0b2NvbXBsZXRlIixVWC5SRU5ERVJFUl9UWVBFPSJkcm9wZG93biI7Y29uc3QgR3BlPW5l'@;
put 'dyBXZWFrTWFwLCRwZT1uZXcgV2Vha01hcCxWaXQ9Imh0QmFkVmFsdWUiLFJfPSJkYXRhLXJvdyIsTF89ImRhdGEtY29sIixCaXQ9ImNoZWNrYm94UmVuZGVyZXIiO2Z1bmN0aW9uIFpYKGMsbCxhLGQsaCxmLHYpe2NvbnN0e3Jvb3REb2N1bWVudDpNfT1jLEQ9Yy5nZXRTZXR0aW5ncygpLmFy'@;
put 'aWFUYWdzO29ULmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKSxmdW5jdGlvbiBqaXQoYyl7bGV0IGw9JHBlLmdldChjKTtpZighbCl7Y29uc3R7cm9vdEVsZW1lbnQ6YX09YztsPW5ldyBOMihjKSxsLmFkZEV2ZW50TGlzdGVuZXIoYSwiY2xpY2siLGQ9PmZ1bmN0aW9uIFdpdChjLGwpe2Nv'@;
put 'bnN0e3RhcmdldDphfT1jO2lmKCFXWChhKXx8IWEuaGFzQXR0cmlidXRlKFJfKXx8IWEuaGFzQXR0cmlidXRlKExfKSlyZXR1cm47Y29uc3QgZD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShSXyksMTApLGg9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoTF8pLDEwKTtsLmdldENlbGxNZXRhKGQs'@;
put 'aCkucmVhZE9ubHkmJmMucHJldmVudERlZmF1bHQoKX0oZCxjKSksbC5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNldXAiLGQ9PmZ1bmN0aW9uIFppdChjLGwpe2NvbnN0e3RhcmdldDphfT1jO1dYKGEpJiYoIWEuaGFzQXR0cmlidXRlKFJfKXx8IWEuaGFzQXR0cmlidXRlKExfKXx8c2V0VGlt'@;
put 'ZW91dChsLmxpc3RlbiwxMCkpfShkLGMpKSxsLmFkZEV2ZW50TGlzdGVuZXIoYSwiY2hhbmdlIixkPT5mdW5jdGlvbiBZaXQoYyxsKXtjb25zdHt0YXJnZXQ6YX09YztpZighV1goYSl8fCFhLmhhc0F0dHJpYnV0ZShSXyl8fCFhLmhhc0F0dHJpYnV0ZShMXykpcmV0dXJuO2NvbnN0IGQ9cGFy'@;
put 'c2VJbnQoYS5nZXRBdHRyaWJ1dGUoUl8pLDEwKSxoPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKExfKSwxMCksZj1sLmdldENlbGxNZXRhKGQsaCk7aWYoIWYucmVhZE9ubHkpe2xldCB2PW51bGw7dj1jLnRhcmdldC5jaGVja2VkP3ZvaWQgMD09PWYudW5jaGVja2VkVGVtcGxhdGV8fGYuY2hl'@;
put 'Y2tlZFRlbXBsYXRlOnZvaWQgMCE9PWYudW5jaGVja2VkVGVtcGxhdGUmJmYudW5jaGVja2VkVGVtcGxhdGUsbC5zZXREYXRhQXRDZWxsKGQsaCx2KX19KGQsYykpLCRwZS5zZXQoYyxsKX19KGMpO2xldCBaPWZ1bmN0aW9uIHppdChjKXtjb25zdCBsPWMuY3JlYXRlRWxlbWVudCgiaW5wdXQi'@;
put 'KTtyZXR1cm4gbC5jbGFzc05hbWU9Imh0Q2hlY2tib3hSZW5kZXJlcklucHV0IixsLnR5cGU9ImNoZWNrYm94IixsLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGwuY2xvbmVOb2RlKCExKX0oTSk7Y29uc3QgbmU9di5sYWJlbDtsZXQgY2U9ITE7aWYodHlwZW9mIHYuY2hlY2tlZFRl'@;
put 'bXBsYXRlPiJ1IiYmKHYuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2Ygdi51bmNoZWNrZWRUZW1wbGF0ZT4idSImJih2LnVuY2hlY2tlZFRlbXBsYXRlPSExKSx4cChsKSxmPT09di5jaGVja2VkVGVtcGxhdGV8fGxjKGYpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT09PWxjKHYuY2hl'@;
put 'Y2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk/Wi5jaGVja2VkPSEwOmY9PT12LnVuY2hlY2tlZFRlbXBsYXRlfHxsYyhmKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk9PT1sYyh2LnVuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2Fs'@;
put 'ZSk/Wi5jaGVja2VkPSExOnpjKGYpP1RpKFosIm5vVmFsdWUiKTooWi5zdHlsZS5kaXNwbGF5PSJub25lIixUaShaLFZpdCksY2U9ITApLHZhKFosW1tSXyxhXSxbTF8sZF1dKSxEJiZ2YShaLFtnRShjLmdldFRyYW5zbGF0ZWRQaHJhc2UoWi5jaGVja2VkP2xYOmNYKSksUzJlKFouY2hlY2tl'@;
put 'ZCkscUtlKCldKSwhY2UmJm5lKXtsZXQgcWU9IiI7aWYobmUudmFsdWUpcWU9ImZ1bmN0aW9uIj09dHlwZW9mIG5lLnZhbHVlP25lLnZhbHVlLmNhbGwodGhpcyxhLGQsaCxmKTpuZS52YWx1ZTtlbHNlIGlmKG5lLnByb3BlcnR5KXtjb25zdCBwdD1jLmdldERhdGFBdFJvd1Byb3AoYSxuZS5w'@;
put 'cm9wZXJ0eSk7cWU9bnVsbCE9PXB0P3B0OiIifWNvbnN0IHJ0PWZ1bmN0aW9uIFVpdChjLGwsYSl7Y29uc3QgZD1jLmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7ZC5jbGFzc05hbWU9Imh0Q2hlY2tib3hSZW5kZXJlckxhYmVsICIrKGE/ImZ1bGxXaWR0aCI6IiIpO2NvbnN0IGg9Yy5jcmVhdGVU'@;
put 'ZXh0Tm9kZShsKTtpZihhKXtjb25zdCBmPWMuY3JlYXRlRWxlbWVudCgic3BhbiIpO2YuYXBwZW5kQ2hpbGQoaCksZC5hcHBlbmRDaGlsZChmKX1lbHNlIGQuYXBwZW5kQ2hpbGQoaCk7cmV0dXJuIGQuY2xvbmVOb2RlKCEwKX0oTSxxZSwhMCE9PW5lLnNlcGFyYXRlZCk7ImJlZm9yZSI9PT1u'@;
put 'ZS5wb3NpdGlvbj9uZS5zZXBhcmF0ZWQ/KGwuYXBwZW5kQ2hpbGQocnQpLGwuYXBwZW5kQ2hpbGQoWikpOihydC5hcHBlbmRDaGlsZChaKSxaPXJ0KTooIW5lLnBvc2l0aW9ufHwiYWZ0ZXIiPT09bmUucG9zaXRpb24pJiYobmUuc2VwYXJhdGVkPyhsLmFwcGVuZENoaWxkKFopLGwuYXBwZW5k'@;
put 'Q2hpbGQocnQpKToocnQuaW5zZXJ0QmVmb3JlKFoscnQuZmlyc3RDaGlsZCksWj1ydCkpfWZ1bmN0aW9uIEVlKCl7bGV0IHFlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgcnQ9Yy5nZXRTZWxlY3RlZFJhbmdlKCkscHQ9W10s'@;
put 'ZHQ9bmV3IE1hcDtsZXQgSnQ9W10sdm49MDtpZihydCl7Zm9yKGxldCBDbj0wO0NuPHJ0Lmxlbmd0aDtDbisrKXtjb25zdHtyb3c6dG4sY29sOk1ufT1ydFtDbl0uZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OkNyLGNvbDpHcn09cnRbQ25dLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQg'@;
put 'Z3I9dG47Z3I8PUNyO2dyKz0xKWZvcihsZXQgR249TW47R248PUdyO0duKz0xKXtjb25zdCBvaT1jLmdldENlbGxNZXRhKGdyLEduKTtpZihvaS5oaWRkZW4pY29udGludWU7Y29uc3QgX2k9e2NoZWNrZWRUZW1wbGF0ZTpvaS5jaGVja2VkVGVtcGxhdGUsdW5jaGVja2VkVGVtcGxhdGU6b2ku'@;
put 'dW5jaGVja2VkVGVtcGxhdGV9O2lmKCJjaGVja2JveCIhPT1vaS50eXBlKXshMD09PXFlJiYhb2kucmVhZE9ubHkmJihkdC5oYXMocHQubGVuZ3RoKT9kdC5zZXQocHQubGVuZ3RoLFsuLi5kdC5nZXQocHQubGVuZ3RoKSxbZ3IsR24sbnVsbF1dKTpkdC5zZXQocHQubGVuZ3RoLFtbZ3IsR24s'@;
put 'bnVsbF1dKSk7Y29udGludWV9aWYoITA9PT1vaS5yZWFkT25seSljb250aW51ZTt0eXBlb2Ygb2kuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKG9pLmNoZWNrZWRUZW1wbGF0ZT0hMCksdHlwZW9mIG9pLnVuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKG9pLnVuY2hlY2tlZFRlbXBsYXRlPSExKTtjb25z'@;
put 'dCBPbj1jLmdldERhdGFBdENlbGwoZ3IsR24pOyExPT09cWU/W29pLmNoZWNrZWRUZW1wbGF0ZSxvaS5jaGVja2VkVGVtcGxhdGUudG9TdHJpbmcoKV0uaW5jbHVkZXMoT24pP0p0LnB1c2goW2dyLEduLG9pLnVuY2hlY2tlZFRlbXBsYXRlLF9pXSk6W29pLnVuY2hlY2tlZFRlbXBsYXRlLG9p'@;
put 'LnVuY2hlY2tlZFRlbXBsYXRlLnRvU3RyaW5nKCksbnVsbCx2b2lkIDBdLmluY2x1ZGVzKE9uKSYmSnQucHVzaChbZ3IsR24sb2kuY2hlY2tlZFRlbXBsYXRlLF9pXSk6SnQucHVzaChbZ3IsR24sb2kudW5jaGVja2VkVGVtcGxhdGUsX2ldKSx2bis9MX1wdC5wdXNoKHZuKSx2bj0wfUp0PUp0'@;
put 'LmV2ZXJ5KENuPT57bGV0WywsdG5dPUNuO3JldHVybiB0bj09PUp0WzBdWzJdfSk/SnQubWFwKENuPT57bGV0W3RuLE1uLENyXT1DbjtyZXR1cm5bdG4sTW4sQ3JdfSk6SnQubWFwKENuPT57bGV0W3RuLE1uLCxDcl09Q247cmV0dXJuW3RuLE1uLENyLmNoZWNrZWRUZW1wbGF0ZV19KSxKdC5s'@;
put 'ZW5ndGg+MCYmcHQuZm9yRWFjaCgoQ24sdG4pPT57bGV0IE1uPUp0LnNwbGljZSgwLENuKTtkdC5zaXplJiZkdC5oYXModG4pJiYoTW49Wy4uLk1uLC4uLmR0LmdldCh0bildKSxjLnNldERhdGFBdENlbGwoTW4pfSl9fWZ1bmN0aW9uIEJlKCl7Y29uc3QgcWU9Yy5nZXRTZWxlY3RlZFJhbmdl'@;
put 'KCk7aWYocWUpe2ZvcihsZXQgcnQ9MDtydDxxZS5sZW5ndGg7cnQrKyl7Y29uc3QgcHQ9cWVbcnRdLmdldFRvcFN0YXJ0Q29ybmVyKCksZHQ9cWVbcnRdLmdldEJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgSnQ9cHQucm93O0p0PD1kdC5yb3c7SnQrKylmb3IobGV0IHZuPXB0LmNvbDt2bjw9'@;
put 'ZHQuY29sO3ZuKyspe2lmKGMuZ2V0Q2VsbE1ldGEoSnQsdm4pLnJlYWRPbmx5KWNvbnRpbnVlO2NvbnN0IHRuPWMuZ2V0Q2VsbChKdCx2bik7aWYoRXAodG4pJiZ0bi5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFt0eXBlPWNoZWNrYm94XSIpLmxlbmd0aD4wKXJldHVybiEwfX1yZXR1cm4hMX19'@;
put 'KCFuZXx8bmUmJiFuZS5zZXBhcmF0ZWQpJiZsLmFwcGVuZENoaWxkKFopLGNlJiZsLmFwcGVuZENoaWxkKE0uY3JlYXRlVGV4dE5vZGUoIiNiYWQtdmFsdWUjIikpLEdwZS5oYXMoYyl8fChHcGUuc2V0KGMsITApLGZ1bmN0aW9uIGJlKCl7Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250'@;
put 'ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJzcGFjZSJdXSxjYWxsYmFjazooKT0+KEVlKCksIUJlKCkpLHJ1bk9ubHlJZjooKT0+e3ZhciBkdDtyZXR1cm4gbnVsbD09PShkdD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1kdD92b2lkIDA6ZHQuaGlnaGxp'@;
put 'Z2h0LmlzQ2VsbCgpfX0se2tleXM6W1siZW50ZXIiXV0sY2FsbGJhY2s6KCk9PihFZSgpLCFCZSgpKSxydW5Pbmx5SWY6KCk9Pntjb25zdCBkdD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuIGMuZ2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmcmJmR0Py5oaWdobGlnaHQu'@;
put 'aXNDZWxsKCkmJiFjLnNlbGVjdGlvbi5pc011bHRpcGxlKCl9fSx7a2V5czpbWyJkZWxldGUiXSxbImJhY2tzcGFjZSJdXSxjYWxsYmFjazooKT0+KEVlKCEwKSwhQmUoKSkscnVuT25seUlmOigpPT57dmFyIGR0O3JldHVybiBudWxsPT09KGR0PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8'@;
put 'fHZvaWQgMD09PWR0P3ZvaWQgMDpkdC5oaWdobGlnaHQuaXNDZWxsKCl9fV0se2dyb3VwOkJpdCxyZWxhdGl2ZVRvR3JvdXA6Wm0scG9zaXRpb246ImJlZm9yZSJ9KX0oKSl9ZnVuY3Rpb24gV1goYyl7cmV0dXJuIklOUFVUIj09PWMudGFnTmFtZSYmImNoZWNrYm94Ij09PWMuZ2V0QXR0cmli'@;
put 'dXRlKCJ0eXBlIil9ZnVuY3Rpb24gWVgoYyxsLGEsZCxoLGYsdil7SV8uYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pfU1vLmdldFNpbmdsZXRvbigpLmFkZCgibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixmdW5jdGlvbihjLGwsYSl7Y29uc3R7bGFiZWw6ZCx0eXBlOmgscm93OmYsY29s'@;
put 'dW1uOnYscHJvcDpNfT1sO2lmKCJjaGVja2JveCI9PT1oKXtpZihkKXtjb25zdHt2YWx1ZTpELHByb3BlcnR5Olp9PWQ7bGV0IG5lPWE7aWYoRCluZT0iZnVuY3Rpb24iPT10eXBlb2YgRD9EKGYsdixNLGEpOkQ7ZWxzZSBpZihaKXtjb25zdCBjZT10aGlzLmdldERhdGFBdFJvd1Byb3AoZixa'@;
put 'KTtuZT1udWxsIT09Y2U/Y2U6YX1jPW5lfXJldHVybiBjfX0pLFpYLlJFTkRFUkVSX1RZUEU9ImNoZWNrYm94IixZWC5SRU5ERVJFUl9UWVBFPSJoYW5kc29udGFibGUiO3ZhciBHWCxxcGUsJFgsWHBlLEtYLFFwZSwkaXQ9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9m'@;
put 'IHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTtmdW5jdGlvbiBLaXQoYyl7cmV0dXJuIGMmJmMuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsImRlZmF1bHQiKT9jLmRlZmF1'@;
put 'bHQ6Y31mdW5jdGlvbiBKcGUoKXtpZihYcGUpcmV0dXJuICRYO1hwZT0xO2NvbnN0IGM9W3trZXk6IlppQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNyl9LHtrZXk6IlpCIixmYWN0b3I6TWF0aC5wb3coMWUzLDcpfSx7a2V5OiJZaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDgpfSx7a2V5OiJZ'@;
put 'QiIsZmFjdG9yOk1hdGgucG93KDFlMyw4KX0se2tleToiVGlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw0KX0se2tleToiVEIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNCl9LHtrZXk6IlBpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNSl9LHtrZXk6IlBCIixmYWN0b3I6TWF0aC5wb3coMWUzLDUp'@;
put 'fSx7a2V5OiJNaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDIpfSx7a2V5OiJNQiIsZmFjdG9yOk1hdGgucG93KDFlMywyKX0se2tleToiS2lCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwxKX0se2tleToiS0IiLGZhY3RvcjpNYXRoLnBvdygxZTMsMSl9LHtrZXk6IkdpQiIsZmFjdG9yOk1hdGgu'@;
put 'cG93KDEwMjQsMyl9LHtrZXk6IkdCIixmYWN0b3I6TWF0aC5wb3coMWUzLDMpfSx7a2V5OiJFaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDYpfSx7a2V5OiJFQiIsZmFjdG9yOk1hdGgucG93KDFlMyw2KX0se2tleToiQiIsZmFjdG9yOjF9XTtmdW5jdGlvbiBsKEQpe3JldHVybiBELnJlcGxh'@;
put 'Y2UoL1stL1xcXiQqKz8uKCl8W1xde31dL2csIlxcJCYiKX1mdW5jdGlvbiBhKEQsWixuZSxjZSxiZSxFZSxCZSl7aWYoIWlzTmFOKCtEKSlyZXR1cm4rRDtsZXQgcWU9IiIscnQ9RC5yZXBsYWNlKC8oXlteKF0qKVwoKC4qKVwpKFteKV0qJCkvLCIkMSQyJDMiKTtpZihydCE9PUQpcmV0dXJu'@;
put 'LTEqYShydCxaLG5lLGNlLGJlLEVlKTtmb3IobGV0IHRuPTA7dG48Yy5sZW5ndGg7dG4rKyl7bGV0IE1uPWNbdG5dO2lmKHFlPUQucmVwbGFjZShSZWdFeHAoYChbMC05IF0pKCR7TW4ua2V5fSkkYCksIiQxIikscWUhPT1EKXJldHVybiBhKHFlLFosbmUsY2UsYmUsRWUpKk1uLmZhY3Rvcn1p'@;
put 'ZihxZT1ELnJlcGxhY2UoIiUiLCIiKSxxZSE9PUQpcmV0dXJuIGEocWUsWixuZSxjZSxiZSxFZSkvMTAwO2xldCBwdD1wYXJzZUZsb2F0KEQpO2lmKGlzTmFOKHB0KSlyZXR1cm47bGV0IGR0PWNlKHB0KTtpZihkdCYmIi4iIT09ZHQmJihxZT1ELnJlcGxhY2UobmV3IFJlZ0V4cChgJHtsKGR0'@;
put 'KX0kYCksIiIpLHFlIT09RCkpcmV0dXJuIGEocWUsWixuZSxjZSxiZSxFZSk7bGV0IEp0PXt9O09iamVjdC5rZXlzKEVlKS5mb3JFYWNoKHRuPT57SnRbRWVbdG5dXT10bn0pO2xldCB2bj1PYmplY3Qua2V5cyhKdCkuc29ydCgpLnJldmVyc2UoKSxDbj12bi5sZW5ndGg7Zm9yKGxldCB0bj0w'@;
put 'O3RuPENuO3RuKyspe2xldCBNbj12blt0bl0sQ3I9SnRbTW5dO2lmKHFlPUQucmVwbGFjZShNbiwiIikscWUhPT1EKXtsZXQgR3I7c3dpdGNoKENyKXtjYXNlInRob3VzYW5kIjpHcj1NYXRoLnBvdygxMCwzKTticmVhaztjYXNlIm1pbGxpb24iOkdyPU1hdGgucG93KDEwLDYpO2JyZWFrO2Nh'@;
put 'c2UiYmlsbGlvbiI6R3I9TWF0aC5wb3coMTAsOSk7YnJlYWs7Y2FzZSJ0cmlsbGlvbiI6R3I9TWF0aC5wb3coMTAsMTIpfXJldHVybiBhKHFlLFosbmUsY2UsYmUsRWUpKkdyfX19ZnVuY3Rpb24gaChELFosbmU9IiIsY2UsYmUsRWUsQmUpe2lmKCIiPT09RClyZXR1cm47aWYoRD09PWJlKXJl'@;
put 'dHVybiAwO2xldCBxZT1mdW5jdGlvbiBkKEQsWixuZSl7bGV0IGNlPUQucmVwbGFjZShuZSwiIik7cmV0dXJuIGNlPWNlLnJlcGxhY2UobmV3IFJlZ0V4cChgKFswLTldKSR7bChaLnRob3VzYW5kcyl9KFswLTldKWAsImciKSwiJDEkMiIpLGNlPWNlLnJlcGxhY2UoWi5kZWNpbWFsLCIuIiks'@;
put 'Y2V9KEQsWixuZSk7cmV0dXJuIGEocWUsWixuZSxjZSxiZSxFZSl9cmV0dXJuICRYPXt1bmZvcm1hdDpmdW5jdGlvbiBNKEQsWil7Y29uc3QgbmU9UVgoKTtsZXQgcnQsY2U9bmUuY3VycmVudERlbGltaXRlcnMoKSxiZT1uZS5jdXJyZW50Q3VycmVuY3koKS5zeW1ib2wsRWU9bmUuY3VycmVu'@;
put 'dE9yZGluYWwoKSxCZT1uZS5nZXRaZXJvRm9ybWF0KCkscWU9bmUuY3VycmVudEFiYnJldmlhdGlvbnMoKTtpZigic3RyaW5nIj09dHlwZW9mIEQpcnQ9ZnVuY3Rpb24gZihELFope2lmKCFELmluZGV4T2YoIjoiKXx8IjoiPT09Wi50aG91c2FuZHMpcmV0dXJuITE7bGV0IGNlPUQuc3BsaXQo'@;
put 'IjoiKTtpZigzIT09Y2UubGVuZ3RoKXJldHVybiExO2xldCBFZT0rY2VbMV0sQmU9K2NlWzJdO3JldHVybiFpc05hTigrY2VbMF0pJiYhaXNOYU4oRWUpJiYhaXNOYU4oQmUpfShELGNlKT9mdW5jdGlvbiB2KEQpe2xldCBaPUQuc3BsaXQoIjoiKTtyZXR1cm4rWlsyXSs2MCorWlsxXSszNjAw'@;
put 'KitaWzBdfShEKTpoKEQsY2UsYmUsRWUsQmUscWUpO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBEKXJldHVybjtydD1EfWlmKHZvaWQgMCE9PXJ0KXJldHVybiBydH19fWZ1bmN0aW9uIHFYKCl7aWYoUXBlKXJldHVybiBLWDtRcGU9MTtsZXQgYz1KcGUoKTtjb25zdCBsPS9eW2Etel17Miwz'@;
put 'fSgtW2EtekEtWl17NH0pPygtKFtBLVpdezJ9fFswLTldezN9KSk/JC8sWj17b3V0cHV0Ont0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsiY3VycmVuY3kiLCJwZXJjZW50IiwiYnl0ZSIsInRpbWUiLCJvcmRpbmFsIiwibnVtYmVyIl19LGJhc2U6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1'@;
put 'ZXM6WyJkZWNpbWFsIiwiYmluYXJ5IiwiZ2VuZXJhbCJdLHJlc3RyaWN0aW9uOihydCxwdCk9PiJieXRlIj09PXB0Lm91dHB1dCxtZXNzYWdlOiJgYmFzZWAgbXVzdCBiZSBwcm92aWRlZCBvbmx5IHdoZW4gdGhlIG91dHB1dCBpcyBgYnl0ZWAiLG1hbmRhdG9yeTpydD0+ImJ5dGUiPT09cnQu'@;
put 'b3V0cHV0fSxjaGFyYWN0ZXJpc3RpYzp7dHlwZToibnVtYmVyIixyZXN0cmljdGlvbjpydD0+cnQ+PTAsbWVzc2FnZToidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSJ9LHByZWZpeDoic3RyaW5nIixwb3N0Zml4OiJzdHJpbmciLGZvcmNlQXZlcmFnZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVl'@;
put 'czpbInRyaWxsaW9uIiwiYmlsbGlvbiIsIm1pbGxpb24iLCJ0aG91c2FuZCJdfSxhdmVyYWdlOiJib29sZWFuIixsb3dQcmVjaXNpb246e3R5cGU6ImJvb2xlYW4iLHJlc3RyaWN0aW9uOihydCxwdCk9PiEwPT09cHQuYXZlcmFnZSxtZXNzYWdlOiJgbG93UHJlY2lzaW9uYCBtdXN0IGJlIHBy'@;
put 'b3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3B0aW9uIGBhdmVyYWdlYCBpcyBzZXQifSxjdXJyZW5jeVBvc2l0aW9uOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsicHJlZml4IiwiaW5maXgiLCJwb3N0Zml4Il19LGN1cnJlbmN5U3ltYm9sOiJzdHJpbmciLHRvdGFsTGVuZ3RoOnt0eXBlOiJu'@;
put 'dW1iZXIiLHJlc3RyaWN0aW9uczpbe3Jlc3RyaWN0aW9uOnJ0PT5ydD49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0se3Jlc3RyaWN0aW9uOihydCxwdCk9PiFwdC5leHBvbmVudGlhbCxtZXNzYWdlOiJgdG90YWxMZW5ndGhgIGlzIGluY29tcGF0aWJsZSB3aXRoIGBleHBv'@;
put 'bmVudGlhbGAifV19LG1hbnRpc3NhOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9uOnJ0PT5ydD49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0sb3B0aW9uYWxNYW50aXNzYToiYm9vbGVhbiIsdHJpbU1hbnRpc3NhOiJib29sZWFuIixyb3VuZGluZ0Z1bmN0aW9uOiJmdW5j'@;
put 'dGlvbiIsb3B0aW9uYWxDaGFyYWN0ZXJpc3RpYzoiYm9vbGVhbiIsdGhvdXNhbmRTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkOiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiJib29sZWFuIixzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjoiYm9vbGVhbiIsYWJi'@;
put 'cmV2aWF0aW9uczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmQ6InN0cmluZyIsbWlsbGlvbjoic3RyaW5nIixiaWxsaW9uOiJzdHJpbmciLHRyaWxsaW9uOiJzdHJpbmcifX0sbmVnYXRpdmU6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJzaWduIiwicGFyZW50aGVzaXMi'@;
put 'XX0sZm9yY2VTaWduOiJib29sZWFuIixleHBvbmVudGlhbDp7dHlwZToiYm9vbGVhbiJ9LHByZWZpeFN5bWJvbDp7dHlwZToiYm9vbGVhbiIscmVzdHJpY3Rpb246KHJ0LHB0KT0+InBlcmNlbnQiPT09cHQub3V0cHV0LG1lc3NhZ2U6ImBwcmVmaXhTeW1ib2xgIGNhbiBiZSBwcm92aWRlZCBv'@;
put 'bmx5IHdoZW4gdGhlIG91dHB1dCBpcyBgcGVyY2VudGAifX0sbmU9e2xhbmd1YWdlVGFnOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMCxyZXN0cmljdGlvbjpydD0+cnQubWF0Y2gobCksbWVzc2FnZToidGhlIGxhbmd1YWdlIHRhZyBtdXN0IGZvbGxvdyB0aGUgQkNQIDQ3IHNwZWNpZmlj'@;
put 'YXRpb24gKHNlZSBodHRwczovL3Rvb2xzLmllZnQub3JnL2h0bWwvYmNwNDcpIn0sZGVsaW1pdGVyczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7dGhvdXNhbmRzOiJzdHJpbmciLGRlY2ltYWw6InN0cmluZyIsdGhvdXNhbmRzU2l6ZToibnVtYmVyIn0sbWFuZGF0b3J5OiEwfSxhYmJyZXZp'@;
put 'YXRpb25zOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZDp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LG1pbGxpb246e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSxiaWxsaW9uOnt0eXBlOiJzdHJpbmciLG1hbmRhdG9yeTohMH0sdHJpbGxpb246e3R5cGU6InN0cmlu'@;
put 'ZyIsbWFuZGF0b3J5OiEwfX0sbWFuZGF0b3J5OiEwfSxzcGFjZVNlcGFyYXRlZDoiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeToiYm9vbGVhbiIsb3JkaW5hbDp7dHlwZToiZnVuY3Rpb24iLG1hbmRhdG9yeTohMH0sYnl0ZXM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e2JpbmFy'@;
put 'eVN1ZmZpeGVzOiJvYmplY3QiLGRlY2ltYWxTdWZmaXhlczoib2JqZWN0In19LGN1cnJlbmN5Ont0eXBlOiJvYmplY3QiLGNoaWxkcmVuOntzeW1ib2w6InN0cmluZyIscG9zaXRpb246InN0cmluZyIsY29kZToic3RyaW5nIn0sbWFuZGF0b3J5OiEwfSxkZWZhdWx0czoiZm9ybWF0IixvcmRp'@;
put 'bmFsRm9ybWF0OiJmb3JtYXQiLGJ5dGVGb3JtYXQ6ImZvcm1hdCIscGVyY2VudGFnZUZvcm1hdDoiZm9ybWF0IixjdXJyZW5jeUZvcm1hdDoiZm9ybWF0Iix0aW1lRGVmYXVsdHM6ImZvcm1hdCIsZm9ybWF0czp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7Zm91ckRpZ2l0czp7dHlwZToiZm9y'@;
put 'bWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3R5cGU6ImZvcm1hdCIsbWFuZGF0b3J5OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7dHlwZToiZm9ybWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7dHlwZToiZm9ybWF0IixtYW5k'@;
put 'YXRvcnk6ITB9fX19O2Z1bmN0aW9uIGJlKHJ0KXtyZXR1cm4gdm9pZCAwIT09Yy51bmZvcm1hdChydCl9ZnVuY3Rpb24gRWUocnQscHQsZHQsSnQ9ITEpe2xldCB2bj1PYmplY3Qua2V5cyhydCkubWFwKENuPT57aWYoIXB0W0NuXSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHtkdH0gSW52YWxp'@;
put 'ZCBrZXk6ICR7Q259YCksITE7bGV0IHRuPXJ0W0NuXSxNbj1wdFtDbl07aWYoInN0cmluZyI9PXR5cGVvZiBNbiYmKE1uPXt0eXBlOk1ufSksImZvcm1hdCI9PT1Nbi50eXBlKXtpZighRWUodG4sWixgW1ZhbGlkYXRlICR7Q259XWAsITApKXJldHVybiExfWVsc2UgaWYodHlwZW9mIHRuIT09'@;
put 'TW4udHlwZSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHtkdH0gJHtDbn0gdHlwZSBtaXNtYXRjaGVkOiAiJHtNbi50eXBlfSIgZXhwZWN0ZWQsICIke3R5cGVvZiB0bn0iIHByb3ZpZGVkYCksITE7aWYoTW4ucmVzdHJpY3Rpb25zJiZNbi5yZXN0cmljdGlvbnMubGVuZ3RoKXtsZXQgQ3I9TW4u'@;
put 'cmVzdHJpY3Rpb25zLmxlbmd0aDtmb3IobGV0IEdyPTA7R3I8Q3I7R3IrKyl7bGV0e3Jlc3RyaWN0aW9uOmdyLG1lc3NhZ2U6R259PU1uLnJlc3RyaWN0aW9uc1tHcl07aWYoIWdyKHRuLHJ0KSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHtkdH0gJHtDbn0gaW52YWxpZCB2YWx1ZTogJHtHbn1g'@;
put 'KSwhMX19cmV0dXJuIE1uLnJlc3RyaWN0aW9uJiYhTW4ucmVzdHJpY3Rpb24odG4scnQpPyhjb25zb2xlLmVycm9yKGAke2R0fSAke0NufSBpbnZhbGlkIHZhbHVlOiAke01uLm1lc3NhZ2V9YCksITEpOk1uLnZhbGlkVmFsdWVzJiYtMT09PU1uLnZhbGlkVmFsdWVzLmluZGV4T2YodG4pPyhj'@;
put 'b25zb2xlLmVycm9yKGAke2R0fSAke0NufSBpbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGFtb25nICR7SlNPTi5zdHJpbmdpZnkoTW4udmFsaWRWYWx1ZXMpfSwgIiR7dG59IiBwcm92aWRlZGApLCExKTohKE1uLmNoaWxkcmVuJiYhRWUodG4sTW4uY2hpbGRyZW4sYFtWYWxpZGF0ZSAke0NufV1g'@;
put 'KSl9KTtyZXR1cm4gSnR8fHZuLnB1c2goLi4uT2JqZWN0LmtleXMocHQpLm1hcChDbj0+e2xldCB0bj1wdFtDbl07aWYoInN0cmluZyI9PXR5cGVvZiB0biYmKHRuPXt0eXBlOnRufSksdG4ubWFuZGF0b3J5KXtsZXQgTW49dG4ubWFuZGF0b3J5O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBNbiYm'@;
put 'KE1uPU1uKHJ0KSksTW4mJnZvaWQgMD09PXJ0W0NuXSlyZXR1cm4gY29uc29sZS5lcnJvcihgJHtkdH0gTWlzc2luZyBtYW5kYXRvcnkga2V5ICIke0NufSJgKSwhMX1yZXR1cm4hMH0pKSx2bi5yZWR1Y2UoKENuLHRuKT0+Q24mJnRuLCEwKX1mdW5jdGlvbiBCZShydCl7cmV0dXJuIEVlKHJ0'@;
put 'LFosIltWYWxpZGF0ZSBmb3JtYXRdIil9cmV0dXJuIEtYPXt2YWxpZGF0ZTpmdW5jdGlvbiBjZShydCxwdCl7bGV0IGR0PWJlKHJ0KSxKdD1CZShwdCk7cmV0dXJuIGR0JiZKdH0sdmFsaWRhdGVGb3JtYXQ6QmUsdmFsaWRhdGVJbnB1dDpiZSx2YWxpZGF0ZUxhbmd1YWdlOmZ1bmN0aW9uIHFl'@;
put 'KHJ0KXtyZXR1cm4gRWUocnQsbmUsIltWYWxpZGF0ZSBsYW5ndWFnZV0iKX19fXZhciBKWCxlNGUsWFg9e3BhcnNlRm9ybWF0OmZ1bmN0aW9uIGhvdChjLGw9e30pe3JldHVybiJzdHJpbmciIT10eXBlb2YgYz9jOihjPWZ1bmN0aW9uIFhpdChjLGwpe2xldCBhPWMubWF0Y2goL157KFtefV0q'@;
put 'KX0vKTtyZXR1cm4gYT8obC5wcmVmaXg9YVsxXSxjLnNsaWNlKGFbMF0ubGVuZ3RoKSk6Y30oYyxsKSxjPWZ1bmN0aW9uIEppdChjLGwpe2xldCBhPWMubWF0Y2goL3soW159XSopfSQvKTtyZXR1cm4gYT8obC5wb3N0Zml4PWFbMV0sYy5zbGljZSgwLC1hWzBdLmxlbmd0aCkpOmN9KGMsbCks'@;
put 'ZnVuY3Rpb24gUWl0KGMsbCl7aWYoLTE9PT1jLmluZGV4T2YoIiQiKSl7aWYoLTE9PT1jLmluZGV4T2YoIiUiKSlyZXR1cm4tMSE9PWMuaW5kZXhPZigiYmQiKT8obC5vdXRwdXQ9ImJ5dGUiLHZvaWQobC5iYXNlPSJnZW5lcmFsIikpOi0xIT09Yy5pbmRleE9mKCJiIik/KGwub3V0cHV0PSJi'@;
put 'eXRlIix2b2lkKGwuYmFzZT0iYmluYXJ5IikpOi0xIT09Yy5pbmRleE9mKCJkIik/KGwub3V0cHV0PSJieXRlIix2b2lkKGwuYmFzZT0iZGVjaW1hbCIpKTp2b2lkKC0xPT09Yy5pbmRleE9mKCI6Iik/LTEhPT1jLmluZGV4T2YoIm8iKSYmKGwub3V0cHV0PSJvcmRpbmFsIik6bC5vdXRwdXQ9'@;
put 'InRpbWUiKTtsLm91dHB1dD0icGVyY2VudCJ9ZWxzZSBsLm91dHB1dD0iY3VycmVuY3kifShjLGwpLGZ1bmN0aW9uIG5vdChjLGwpe2xldCBhPWMubWF0Y2goL1sxLTldK1swLTldKi8pO2EmJihsLnRvdGFsTGVuZ3RoPSthWzBdKX0oYyxsKSxmdW5jdGlvbiByb3QoYyxsKXtsZXQgZD1jLnNw'@;
put 'bGl0KCIuIilbMF0ubWF0Y2goLzArLyk7ZCYmKGwuY2hhcmFjdGVyaXN0aWM9ZFswXS5sZW5ndGgpfShjLGwpLGZ1bmN0aW9uIGNvdChjLGwpe2lmKC0xIT09Yy5pbmRleE9mKCIuIikpe2xldCBhPWMuc3BsaXQoIi4iKVswXTtsLm9wdGlvbmFsQ2hhcmFjdGVyaXN0aWM9LTE9PT1hLmluZGV4'@;
put 'T2YoIjAiKX19KGMsbCksZnVuY3Rpb24gYW90KGMsbCl7LTEhPT1jLmluZGV4T2YoImEiKSYmKGwuYXZlcmFnZT0hMCl9KGMsbCksZnVuY3Rpb24gc290KGMsbCl7LTEhPT1jLmluZGV4T2YoIksiKT9sLmZvcmNlQXZlcmFnZT0idGhvdXNhbmQiOi0xIT09Yy5pbmRleE9mKCJNIik/bC5mb3Jj'@;
put 'ZUF2ZXJhZ2U9Im1pbGxpb24iOi0xIT09Yy5pbmRleE9mKCJCIik/bC5mb3JjZUF2ZXJhZ2U9ImJpbGxpb24iOi0xIT09Yy5pbmRleE9mKCJUIikmJihsLmZvcmNlQXZlcmFnZT0idHJpbGxpb24iKX0oYyxsKSxmdW5jdGlvbiBpb3QoYyxsKXtsZXQgYT1jLnNwbGl0KCIuIilbMV07aWYoYSl7'@;
put 'bGV0IGQ9YS5tYXRjaCgvMCsvKTtkJiYobC5tYW50aXNzYT1kWzBdLmxlbmd0aCl9fShjLGwpLGZ1bmN0aW9uIGxvdChjLGwpe2MubWF0Y2goL1xbXC5dLyk/bC5vcHRpb25hbE1hbnRpc3NhPSEwOmMubWF0Y2goL1wuLykmJihsLm9wdGlvbmFsTWFudGlzc2E9ITEpfShjLGwpLGZ1bmN0aW9u'@;
put 'IG9vdChjLGwpe2NvbnN0IGE9Yy5zcGxpdCgiLiIpWzFdO2EmJihsLnRyaW1NYW50aXNzYT0tMSE9PWEuaW5kZXhPZigiWyIpKX0oYyxsKSxmdW5jdGlvbiBlb3QoYyxsKXstMSE9PWMuaW5kZXhPZigiLCIpJiYobC50aG91c2FuZFNlcGFyYXRlZD0hMCl9KGMsbCksZnVuY3Rpb24gdG90KGMs'@;
put 'bCl7LTEhPT1jLmluZGV4T2YoIiAiKSYmKGwuc3BhY2VTZXBhcmF0ZWQ9ITAsbC5zcGFjZVNlcGFyYXRlZEN1cnJlbmN5PSEwLChsLmF2ZXJhZ2V8fGwuZm9yY2VBdmVyYWdlKSYmKGwuc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb249ITApKX0oYyxsKSxmdW5jdGlvbiB1b3QoYyxsKXtjLm1h'@;
put 'dGNoKC9eXCs/XChbXildKlwpJC8pJiYobC5uZWdhdGl2ZT0icGFyZW50aGVzaXMiKSxjLm1hdGNoKC9eXCs/LS8pJiYobC5uZWdhdGl2ZT0ic2lnbiIpfShjLGwpLGZ1bmN0aW9uIGRvdChjLGwpe2MubWF0Y2goL15cKy8pJiYobC5mb3JjZVNpZ249ITApfShjLGwpLGwpfX07ZnVuY3Rpb24g'@;
put 'UVgoKXtpZihlNGUpcmV0dXJuIEpYO2U0ZT0xO2NvbnN0IGM9ZnVuY3Rpb24gcWl0KCl7cmV0dXJuIHFwZXx8KHFwZT0xLEdYPXtsYW5ndWFnZVRhZzoiZW4tVVMiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxs'@;
put 'aW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LHNwYWNlU2VwYXJhdGVkOiExLG9yZGluYWw6ZnVuY3Rpb24oYyl7bGV0IGw9YyUxMDtyZXR1cm4gMT09fn4oYyUxMDAvMTApPyJ0aCI6MT09PWw/InN0IjoyPT09bD8ibmQiOjM9PT1sPyJyZCI6InRoIn0sYnl0ZXM6e2JpbmFyeVN1'@;
put 'ZmZpeGVzOlsiQiIsIktpQiIsIk1pQiIsIkdpQiIsIlRpQiIsIlBpQiIsIkVpQiIsIlppQiIsIllpQiJdLGRlY2ltYWxTdWZmaXhlczpbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiIsIlBCIiwiRUIiLCJaQiIsIllCIl19LGN1cnJlbmN5OntzeW1ib2w6IiQiLHBvc2l0aW9uOiJwcmVmaXgiLGNv'@;
put 'ZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITB9LGZ1bGxX'@;
put 'aXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ont0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVu'@;
put 'Y3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pLEdYfSgpLGw9cVgoKSxhPVhYO2xldCBoLGQ9e30sZj17fSx2PW51bGwsTT17fTtmdW5jdGlvbiBEKG5lKXtoPW5lfWZ1bmN0aW9uIFooKXtyZXR1cm4gZltoXX1yZXR1cm4gZC5sYW5ndWFnZXM9KCk9Pk9iamVjdC5hc3Np'@;
put 'Z24oe30sZiksZC5jdXJyZW50TGFuZ3VhZ2U9KCk9PmgsZC5jdXJyZW50Qnl0ZXM9KCk9PlooKS5ieXRlc3x8e30sZC5jdXJyZW50Q3VycmVuY3k9KCk9PlooKS5jdXJyZW5jeSxkLmN1cnJlbnRBYmJyZXZpYXRpb25zPSgpPT5aKCkuYWJicmV2aWF0aW9ucyxkLmN1cnJlbnREZWxpbWl0ZXJz'@;
put 'PSgpPT5aKCkuZGVsaW1pdGVycyxkLmN1cnJlbnRPcmRpbmFsPSgpPT5aKCkub3JkaW5hbCxkLmN1cnJlbnREZWZhdWx0cz0oKT0+T2JqZWN0LmFzc2lnbih7fSxaKCkuZGVmYXVsdHMsTSksZC5jdXJyZW50T3JkaW5hbERlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJy'@;
put 'ZW50RGVmYXVsdHMoKSxaKCkub3JkaW5hbEZvcm1hdCksZC5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxaKCkuYnl0ZUZvcm1hdCksZC5jdXJyZW50UGVyY2VudGFnZURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3Np'@;
put 'Z24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxaKCkucGVyY2VudGFnZUZvcm1hdCksZC5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksWigpLmN1cnJlbmN5Rm9ybWF0KSxkLmN1cnJlbnRUaW1lRGVmYXVsdEZvcm1h'@;
put 'dD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS50aW1lRm9ybWF0KSxkLnNldERlZmF1bHRzPW5lPT57bmU9YS5wYXJzZUZvcm1hdChuZSksbC52YWxpZGF0ZUZvcm1hdChuZSkmJihNPW5lKX0sZC5nZXRaZXJvRm9ybWF0PSgpPT52LGQuc2V0WmVyb0Zvcm1h'@;
put 'dD1uZT0+dj0ic3RyaW5nIj09dHlwZW9mIG5lP25lOm51bGwsZC5oYXNaZXJvRm9ybWF0PSgpPT5udWxsIT09dixkLmxhbmd1YWdlRGF0YT1uZT0+e2lmKG5lKXtpZihmW25lXSlyZXR1cm4gZltuZV07dGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHRhZyAiJHtuZX0iYCl9cmV0dXJuIFooKX0s'@;
put 'ZC5yZWdpc3Rlckxhbmd1YWdlPShuZSxjZT0hMSk9PntpZighbC52YWxpZGF0ZUxhbmd1YWdlKG5lKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGFuZ3VhZ2UgZGF0YSIpO2ZbbmUubGFuZ3VhZ2VUYWddPW5lLGNlJiZEKG5lLmxhbmd1YWdlVGFnKX0sZC5zZXRMYW5ndWFnZT0obmUsY2U9'@;
put 'Yy5sYW5ndWFnZVRhZyk9PntpZighZltuZV0pe2xldCBiZT1uZS5zcGxpdCgiLSIpWzBdLEVlPU9iamVjdC5rZXlzKGYpLmZpbmQoQmU9PkJlLnNwbGl0KCItIilbMF09PT1iZSk7cmV0dXJuIGZbRWVdP3ZvaWQgRChFZSk6dm9pZCBEKGNlKX1EKG5lKX0sZC5yZWdpc3Rlckxhbmd1YWdlKGMp'@;
put 'LGg9Yy5sYW5ndWFnZVRhZyxKWD1kfXZhciB0NGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihjKXshZnVuY3Rpb24obCl7dmFyIGEsZD0vXi0/KD86XGQrKD86XC5cZCopP3xcLlxkKykoPzplWystXT9cZCspPyQvaSxoPU1hdGguY2VpbCxmPU1hdGguZmxvb3Isdj0iW0JpZ051bWJlciBFcnJv'@;
put 'cl0gIixNPXYrIk51bWJlciBwcmltaXRpdmUgaGFzIG1vcmUgdGhhbiAxNSBzaWduaWZpY2FudCBkaWdpdHM6ICIsRD0xZTE0LFo9MTQsbmU9OTAwNzE5OTI1NDc0MDk5MSxjZT1bMSwxMCwxMDAsMWUzLDFlNCwxZTUsMWU2LDFlNywxZTgsMWU5LDFlMTAsMWUxMSwxZTEyLDFlMTNdLGJlPTFl'@;
put 'NyxFZT0xZTk7ZnVuY3Rpb24gcWUodG4pe3ZhciBNbj0wfHRuO3JldHVybiB0bj4wfHx0bj09PU1uP01uOk1uLTF9ZnVuY3Rpb24gcnQodG4pe2Zvcih2YXIgTW4sQ3IsR3I9MSxncj10bi5sZW5ndGgsR249dG5bMF0rIiI7R3I8Z3I7KXtmb3IoTW49dG5bR3IrK10rIiIsQ3I9Wi1Nbi5sZW5n'@;
put 'dGg7Q3ItLTtNbj0iMCIrTW4pO0duKz1Nbn1mb3IoZ3I9R24ubGVuZ3RoOzQ4PT09R24uY2hhckNvZGVBdCgtLWdyKTspO3JldHVybiBHbi5zbGljZSgwLGdyKzF8fDEpfWZ1bmN0aW9uIHB0KHRuLE1uKXt2YXIgQ3IsR3IsZ3I9dG4uYyxHbj1Nbi5jLG9pPXRuLnMsX2k9TW4ucyxPbj10bi5l'@;
put 'LHpyPU1uLmU7aWYoIW9pfHwhX2kpcmV0dXJuIG51bGw7aWYoR3I9R24mJiFHblswXSwoQ3I9Z3ImJiFnclswXSl8fEdyKXJldHVybiBDcj9Hcj8wOi1faTpvaTtpZihvaSE9X2kpcmV0dXJuIG9pO2lmKENyPW9pPDAsR3I9T249PXpyLCFncnx8IUduKXJldHVybiBHcj8wOiFncl5Dcj8xOi0x'@;
put 'O2lmKCFHcilyZXR1cm4gT24+enJeQ3I/MTotMTtmb3IoX2k9KE9uPWdyLmxlbmd0aCk8KHpyPUduLmxlbmd0aCk/T246enIsb2k9MDtvaTxfaTtvaSsrKWlmKGdyW29pXSE9R25bb2ldKXJldHVybiBncltvaV0+R25bb2ldXkNyPzE6LTE7cmV0dXJuIE9uPT16cj8wOk9uPnpyXkNyPzE6LTF9'@;
put 'ZnVuY3Rpb24gZHQodG4sTW4sQ3IsR3Ipe2lmKHRuPE1ufHx0bj5Dcnx8dG4hPT1mKHRuKSl0aHJvdyBFcnJvcih2KyhHcnx8IkFyZ3VtZW50IikrKCJudW1iZXIiPT10eXBlb2YgdG4/dG48TW58fHRuPkNyPyIgb3V0IG9mIHJhbmdlOiAiOiIgbm90IGFuIGludGVnZXI6ICI6IiBub3QgYSBw'@;
put 'cmltaXRpdmUgbnVtYmVyOiAiKStTdHJpbmcodG4pKX1mdW5jdGlvbiBKdCh0bil7dmFyIE1uPXRuLmMubGVuZ3RoLTE7cmV0dXJuIHFlKHRuLmUvWik9PU1uJiZ0bi5jW01uXSUyIT0wfWZ1bmN0aW9uIHZuKHRuLE1uKXtyZXR1cm4odG4ubGVuZ3RoPjE/dG4uY2hhckF0KDApKyIuIit0bi5z'@;
put 'bGljZSgxKTp0bikrKE1uPDA/ImUiOiJlKyIpK01ufWZ1bmN0aW9uIENuKHRuLE1uLENyKXt2YXIgR3IsZ3I7aWYoTW48MCl7Zm9yKGdyPUNyKyIuIjsrK01uO2dyKz1Dcik7dG49Z3IrdG59ZWxzZSBpZigrK01uPihHcj10bi5sZW5ndGgpKXtmb3IoZ3I9Q3IsTW4tPUdyOy0tTW47Z3IrPUNy'@;
put 'KTt0bis9Z3J9ZWxzZSBNbjxHciYmKHRuPXRuLnNsaWNlKDAsTW4pKyIuIit0bi5zbGljZShNbikpO3JldHVybiB0bn1hPWZ1bmN0aW9uIEJlKHRuKXt2YXIgTW4sQ3IsR3IsYW4seW4sZ3I9SHQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpIdCx0b1N0cmluZzpudWxsLHZhbHVlT2Y6bnVsbH0s'@;
put 'R249bmV3IEh0KDEpLG9pPTIwLF9pPTQsT249LTcsenI9MjEsSm49LTFlNyxEcj0xZTcsJHI9ITEsd2k9MSx0bz0wLHBvPXtwcmVmaXg6IiIsZ3JvdXBTaXplOjMsc2Vjb25kYXJ5R3JvdXBTaXplOjAsZ3JvdXBTZXBhcmF0b3I6IiwiLGRlY2ltYWxTZXBhcmF0b3I6Ii4iLGZyYWN0aW9uR3Jv'@;
put 'dXBTaXplOjAsZnJhY3Rpb25Hcm91cFNlcGFyYXRvcjoiXHhhMCIsc3VmZml4OiIifSx2dD0iMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixOdD0hMDtmdW5jdGlvbiBIdChhbix5bil7dmFyIHBuLHByLCRuLGRyLFVyLFpuLHNyLE5yLE1yPXRoaXM7aWYoIShNciBpbnN0'@;
put 'YW5jZW9mIEh0KSlyZXR1cm4gbmV3IEh0KGFuLHluKTtpZihudWxsPT15bil7aWYoYW4mJiEwPT09YW4uX2lzQmlnTnVtYmVyKXJldHVybiBNci5zPWFuLnMsdm9pZCghYW4uY3x8YW4uZT5Ecj9Nci5jPU1yLmU9bnVsbDphbi5lPEpuP01yLmM9W01yLmU9MF06KE1yLmU9YW4uZSxNci5jPWFu'@;
put 'LmMuc2xpY2UoKSkpO2lmKChabj0ibnVtYmVyIj09dHlwZW9mIGFuKSYmMCphbj09MCl7aWYoTXIucz0xL2FuPDA/KGFuPS1hbiwtMSk6MSxhbj09PX5+YW4pe2Zvcihkcj0wLFVyPWFuO1VyPj0xMDtVci89MTAsZHIrKyk7cmV0dXJuIHZvaWQoZHI+RHI/TXIuYz1Nci5lPW51bGw6KE1yLmU9'@;
put 'ZHIsTXIuYz1bYW5dKSl9TnI9U3RyaW5nKGFuKX1lbHNle2lmKCFkLnRlc3QoTnI9U3RyaW5nKGFuKSkpcmV0dXJuIEdyKE1yLE5yLFpuKTtNci5zPTQ1PT1Oci5jaGFyQ29kZUF0KDApPyhOcj1Oci5zbGljZSgxKSwtMSk6MX0oZHI9TnIuaW5kZXhPZigiLiIpKT4tMSYmKE5yPU5yLnJlcGxh'@;
put 'Y2UoIi4iLCIiKSksKFVyPU5yLnNlYXJjaCgvZS9pKSk+MD8oZHI8MCYmKGRyPVVyKSxkcis9K05yLnNsaWNlKFVyKzEpLE5yPU5yLnN1YnN0cmluZygwLFVyKSk6ZHI8MCYmKGRyPU5yLmxlbmd0aCl9ZWxzZXtpZihkdCh5biwyLHZ0Lmxlbmd0aCwiQmFzZSIpLDEwPT15biYmTnQpcmV0dXJu'@;
put 'IEhyKE1yPW5ldyBIdChhbiksb2krTXIuZSsxLF9pKTtpZihOcj1TdHJpbmcoYW4pLFpuPSJudW1iZXIiPT10eXBlb2YgYW4pe2lmKDAqYW4hPTApcmV0dXJuIEdyKE1yLE5yLFpuLHluKTtpZihNci5zPTEvYW48MD8oTnI9TnIuc2xpY2UoMSksLTEpOjEsSHQuREVCVUcmJk5yLnJlcGxhY2Uo'@;
put 'L14wXC4wKnxcLi8sIiIpLmxlbmd0aD4xNSl0aHJvdyBFcnJvcihNK2FuKX1lbHNlIE1yLnM9NDU9PT1Oci5jaGFyQ29kZUF0KDApPyhOcj1Oci5zbGljZSgxKSwtMSk6MTtmb3IocG49dnQuc2xpY2UoMCx5biksZHI9VXI9MCxzcj1Oci5sZW5ndGg7VXI8c3I7VXIrKylpZihwbi5pbmRleE9m'@;
put 'KHByPU5yLmNoYXJBdChVcikpPDApe2lmKCIuIj09cHIpe2lmKFVyPmRyKXtkcj1zcjtjb250aW51ZX19ZWxzZSBpZighJG4mJihOcj09TnIudG9VcHBlckNhc2UoKSYmKE5yPU5yLnRvTG93ZXJDYXNlKCkpfHxOcj09TnIudG9Mb3dlckNhc2UoKSYmKE5yPU5yLnRvVXBwZXJDYXNlKCkpKSl7'@;
put 'JG49ITAsVXI9LTEsZHI9MDtjb250aW51ZX1yZXR1cm4gR3IoTXIsU3RyaW5nKGFuKSxabix5bil9Wm49ITEsKGRyPShOcj1DcihOcix5biwxMCxNci5zKSkuaW5kZXhPZigiLiIpKT4tMT9Ocj1Oci5yZXBsYWNlKCIuIiwiIik6ZHI9TnIubGVuZ3RofWZvcihVcj0wOzQ4PT09TnIuY2hhckNv'@;
put 'ZGVBdChVcik7VXIrKyk7Zm9yKHNyPU5yLmxlbmd0aDs0OD09PU5yLmNoYXJDb2RlQXQoLS1zcik7KTtpZihOcj1Oci5zbGljZShVciwrK3NyKSl7aWYoc3ItPVVyLFpuJiZIdC5ERUJVRyYmc3I+MTUmJihhbj5uZXx8YW4hPT1mKGFuKSkpdGhyb3cgRXJyb3IoTStNci5zKmFuKTtpZigoZHI9'@;
put 'ZHItVXItMSk+RHIpTXIuYz1Nci5lPW51bGw7ZWxzZSBpZihkcjxKbilNci5jPVtNci5lPTBdO2Vsc2V7aWYoTXIuZT1kcixNci5jPVtdLFVyPShkcisxKSVaLGRyPDAmJihVcis9WiksVXI8c3Ipe2ZvcihVciYmTXIuYy5wdXNoKCtOci5zbGljZSgwLFVyKSksc3ItPVo7VXI8c3I7KU1yLmMu'@;
put 'cHVzaCgrTnIuc2xpY2UoVXIsVXIrPVopKTtVcj1aLShOcj1Oci5zbGljZShVcikpLmxlbmd0aH1lbHNlIFVyLT1zcjtmb3IoO1VyLS07TnIrPSIwIik7TXIuYy5wdXNoKCtOcil9fWVsc2UgTXIuYz1bTXIuZT0wXX1mdW5jdGlvbiBIbihhbix5bixwbixwcil7dmFyICRuLGRyLFVyLFpuLHNy'@;
put 'O2lmKG51bGw9PXBuP3BuPV9pOmR0KHBuLDAsOCksIWFuLmMpcmV0dXJuIGFuLnRvU3RyaW5nKCk7aWYoJG49YW4uY1swXSxVcj1hbi5lLG51bGw9PXluKXNyPXJ0KGFuLmMpLHNyPTE9PXByfHwyPT1wciYmKFVyPD1Pbnx8VXI+PXpyKT92bihzcixVcik6Q24oc3IsVXIsIjAiKTtlbHNlIGlm'@;
put 'KGRyPShhbj1IcihuZXcgSHQoYW4pLHluLHBuKSkuZSxabj0oc3I9cnQoYW4uYykpLmxlbmd0aCwxPT1wcnx8Mj09cHImJih5bjw9ZHJ8fGRyPD1Pbikpe2Zvcig7Wm48eW47c3IrPSIwIixabisrKTtzcj12bihzcixkcil9ZWxzZSBpZih5bi09VXIsc3I9Q24oc3IsZHIsIjAiKSxkcisxPlpu'@;
put 'KXtpZigtLXluPjApZm9yKHNyKz0iLiI7eW4tLTtzcis9IjAiKTt9ZWxzZSBpZigoeW4rPWRyLVpuKT4wKWZvcihkcisxPT1abiYmKHNyKz0iLiIpO3luLS07c3IrPSIwIik7cmV0dXJuIGFuLnM8MCYmJG4/Ii0iK3NyOnNyfWZ1bmN0aW9uIHRyKGFuLHluKXtmb3IodmFyIHBuLHByLCRuPTEs'@;
put 'ZHI9bmV3IEh0KGFuWzBdKTskbjxhbi5sZW5ndGg7JG4rKykoIShwcj1uZXcgSHQoYW5bJG5dKSkuc3x8KHBuPXB0KGRyLHByKSk9PT15bnx8MD09PXBuJiZkci5zPT09eW4pJiYoZHI9cHIpO3JldHVybiBkcn1mdW5jdGlvbiBvcihhbix5bixwbil7Zm9yKHZhciBwcj0xLCRuPXluLmxlbmd0'@;
put 'aDsheW5bLS0kbl07eW4ucG9wKCkpO2Zvcigkbj15blswXTskbj49MTA7JG4vPTEwLHByKyspO3JldHVybihwbj1wcitwbipaLTEpPkRyP2FuLmM9YW4uZT1udWxsOnBuPEpuP2FuLmM9W2FuLmU9MF06KGFuLmU9cG4sYW4uYz15biksYW59ZnVuY3Rpb24gSHIoYW4seW4scG4scHIpe3ZhciAk'@;
put 'bixkcixVcixabixzcixOcixNcixacj1hbi5jLGFvPWNlO2lmKFpyKXtlOntmb3IoJG49MSxabj1aclswXTtabj49MTA7Wm4vPTEwLCRuKyspO2lmKChkcj15bi0kbik8MClkcis9Wixzcj1acltOcj0wXSxNcj1mKHNyL2FvWyRuLShVcj15biktMV0lMTApO2Vsc2UgaWYoKE5yPWgoKGRyKzEp'@;
put 'L1opKT49WnIubGVuZ3RoKXtpZighcHIpYnJlYWsgZTtmb3IoO1pyLmxlbmd0aDw9TnI7WnIucHVzaCgwKSk7c3I9TXI9MCwkbj0xLFVyPShkciU9WiktWisxfWVsc2V7Zm9yKHNyPVpuPVpyW05yXSwkbj0xO1puPj0xMDtabi89MTAsJG4rKyk7TXI9KFVyPShkciU9WiktWiskbik8MD8wOmYo'@;
put 'c3IvYW9bJG4tVXItMV0lMTApfWlmKHByPXByfHx5bjwwfHxudWxsIT1acltOcisxXXx8KFVyPDA/c3I6c3IlYW9bJG4tVXItMV0pLHByPXBuPDQ/KE1yfHxwcikmJigwPT1wbnx8cG49PShhbi5zPDA/MzoyKSk6TXI+NXx8NT09TXImJig0PT1wbnx8cHJ8fDY9PXBuJiYoZHI+MD9Vcj4wP3Ny'@;
put 'L2FvWyRuLVVyXTowOlpyW05yLTFdKSUxMCYxfHxwbj09KGFuLnM8MD84OjcpKSx5bjwxfHwhWnJbMF0pcmV0dXJuIFpyLmxlbmd0aD0wLHByPyhaclswXT1hb1soWi0oeW4tPWFuLmUrMSklWiklWl0sYW4uZT0teW58fDApOlpyWzBdPWFuLmU9MCxhbjtpZigwPT1kcj8oWnIubGVuZ3RoPU5y'@;
put 'LFpuPTEsTnItLSk6KFpyLmxlbmd0aD1OcisxLFpuPWFvW1otZHJdLFpyW05yXT1Vcj4wP2Yoc3IvYW9bJG4tVXJdJWFvW1VyXSkqWm46MCkscHIpZm9yKDs7KXtpZigwPT1Ocil7Zm9yKGRyPTEsVXI9WnJbMF07VXI+PTEwO1VyLz0xMCxkcisrKTtmb3IoVXI9WnJbMF0rPVpuLFpuPTE7VXI+'@;
put 'PTEwO1VyLz0xMCxabisrKTtkciE9Wm4mJihhbi5lKyssWnJbMF09PUQmJihaclswXT0xKSk7YnJlYWt9aWYoWnJbTnJdKz1abixacltOcl0hPUQpYnJlYWs7WnJbTnItLV09MCxabj0xfWZvcihkcj1aci5sZW5ndGg7MD09PVpyWy0tZHJdO1pyLnBvcCgpKTt9YW4uZT5Ecj9hbi5jPWFuLmU9'@;
put 'bnVsbDphbi5lPEpuJiYoYW4uYz1bYW4uZT0wXSl9cmV0dXJuIGFufWZ1bmN0aW9uIEtyKGFuKXt2YXIgeW4scG49YW4uZTtyZXR1cm4gbnVsbD09PXBuP2FuLnRvU3RyaW5nKCk6KHluPXJ0KGFuLmMpLHluPXBuPD1Pbnx8cG4+PXpyP3ZuKHluLHBuKTpDbih5bixwbiwiMCIpLGFuLnM8MD8i'@;
put 'LSIreW46eW4pfXJldHVybiBIdC5jbG9uZT1CZSxIdC5ST1VORF9VUD0wLEh0LlJPVU5EX0RPV049MSxIdC5ST1VORF9DRUlMPTIsSHQuUk9VTkRfRkxPT1I9MyxIdC5ST1VORF9IQUxGX1VQPTQsSHQuUk9VTkRfSEFMRl9ET1dOPTUsSHQuUk9VTkRfSEFMRl9FVkVOPTYsSHQuUk9VTkRfSEFM'@;
put 'Rl9DRUlMPTcsSHQuUk9VTkRfSEFMRl9GTE9PUj04LEh0LkVVQ0xJRD05LEh0LmNvbmZpZz1IdC5zZXQ9ZnVuY3Rpb24oYW4pe3ZhciB5bixwbjtpZihudWxsIT1hbil7aWYoIm9iamVjdCIhPXR5cGVvZiBhbil0aHJvdyBFcnJvcih2KyJPYmplY3QgZXhwZWN0ZWQ6ICIrYW4pO2lmKGFuLmhh'@;
put 'c093blByb3BlcnR5KHluPSJERUNJTUFMX1BMQUNFUyIpJiYoZHQocG49YW5beW5dLDAsRWUseW4pLG9pPXBuKSxhbi5oYXNPd25Qcm9wZXJ0eSh5bj0iUk9VTkRJTkdfTU9ERSIpJiYoZHQocG49YW5beW5dLDAsOCx5biksX2k9cG4pLGFuLmhhc093blByb3BlcnR5KHluPSJFWFBPTkVOVElB'@;
put 'TF9BVCIpJiYoKHBuPWFuW3luXSkmJnBuLnBvcD8oZHQocG5bMF0sLUVlLDAseW4pLGR0KHBuWzFdLDAsRWUseW4pLE9uPXBuWzBdLHpyPXBuWzFdKTooZHQocG4sLUVlLEVlLHluKSxPbj0tKHpyPXBuPDA/LXBuOnBuKSkpLGFuLmhhc093blByb3BlcnR5KHluPSJSQU5HRSIpKWlmKChwbj1h'@;
put 'blt5bl0pJiZwbi5wb3ApZHQocG5bMF0sLUVlLC0xLHluKSxkdChwblsxXSwxLEVlLHluKSxKbj1wblswXSxEcj1wblsxXTtlbHNle2lmKGR0KHBuLC1FZSxFZSx5biksIXBuKXRocm93IEVycm9yKHYreW4rIiBjYW5ub3QgYmUgemVybzogIitwbik7Sm49LShEcj1wbjwwPy1wbjpwbil9aWYo'@;
put 'YW4uaGFzT3duUHJvcGVydHkoeW49IkNSWVBUTyIpKXtpZigocG49YW5beW5dKSE9PSEhcG4pdGhyb3cgRXJyb3Iodit5bisiIG5vdCB0cnVlIG9yIGZhbHNlOiAiK3BuKTtpZihwbil7aWYoISh0eXBlb2YgY3J5cHRvPCJ1IiYmY3J5cHRvJiYoY3J5cHRvLmdldFJhbmRvbVZhbHVlc3x8Y3J5'@;
put 'cHRvLnJhbmRvbUJ5dGVzKSkpdGhyb3cgJHI9IXBuLEVycm9yKHYrImNyeXB0byB1bmF2YWlsYWJsZSIpOyRyPXBufWVsc2UgJHI9cG59aWYoYW4uaGFzT3duUHJvcGVydHkoeW49Ik1PRFVMT19NT0RFIikmJihkdChwbj1hblt5bl0sMCw5LHluKSx3aT1wbiksYW4uaGFzT3duUHJvcGVydHko'@;
put 'eW49IlBPV19QUkVDSVNJT04iKSYmKGR0KHBuPWFuW3luXSwwLEVlLHluKSx0bz1wbiksYW4uaGFzT3duUHJvcGVydHkoeW49IkZPUk1BVCIpKXtpZigib2JqZWN0IiE9dHlwZW9mKHBuPWFuW3luXSkpdGhyb3cgRXJyb3Iodit5bisiIG5vdCBhbiBvYmplY3Q6ICIrcG4pO3BvPXBufWlmKGFu'@;
put 'Lmhhc093blByb3BlcnR5KHluPSJBTFBIQUJFVCIpKXtpZigic3RyaW5nIiE9dHlwZW9mKHBuPWFuW3luXSl8fC9eLj8kfFsrXC0uXHNdfCguKS4qXDEvLnRlc3QocG4pKXRocm93IEVycm9yKHYreW4rIiBpbnZhbGlkOiAiK3BuKTtOdD0iMDEyMzQ1Njc4OSI9PXBuLnNsaWNlKDAsMTApLHZ0'@;
put 'PXBufX1yZXR1cm57REVDSU1BTF9QTEFDRVM6b2ksUk9VTkRJTkdfTU9ERTpfaSxFWFBPTkVOVElBTF9BVDpbT24senJdLFJBTkdFOltKbixEcl0sQ1JZUFRPOiRyLE1PRFVMT19NT0RFOndpLFBPV19QUkVDSVNJT046dG8sRk9STUFUOnBvLEFMUEhBQkVUOnZ0fX0sSHQuaXNCaWdOdW1iZXI9'@;
put 'ZnVuY3Rpb24oYW4pe2lmKCFhbnx8ITAhPT1hbi5faXNCaWdOdW1iZXIpcmV0dXJuITE7aWYoIUh0LkRFQlVHKXJldHVybiEwO3ZhciB5bixwbixwcj1hbi5jLCRuPWFuLmUsZHI9YW4ucztlOmlmKCJbb2JqZWN0IEFycmF5XSI9PXt9LnRvU3RyaW5nLmNhbGwocHIpKXtpZigoMT09PWRyfHwt'@;
put 'MT09PWRyKSYmJG4+PS1FZSYmJG48PUVlJiYkbj09PWYoJG4pKXtpZigwPT09cHJbMF0pe2lmKDA9PT0kbiYmMT09PXByLmxlbmd0aClyZXR1cm4hMDticmVhayBlfWlmKCh5bj0oJG4rMSklWik8MSYmKHluKz1aKSxTdHJpbmcocHJbMF0pLmxlbmd0aD09eW4pe2Zvcih5bj0wO3luPHByLmxl'@;
put 'bmd0aDt5bisrKWlmKChwbj1wclt5bl0pPDB8fHBuPj1EfHxwbiE9PWYocG4pKWJyZWFrIGU7aWYoMCE9PXBuKXJldHVybiEwfX19ZWxzZSBpZihudWxsPT09cHImJm51bGw9PT0kbiYmKG51bGw9PT1kcnx8MT09PWRyfHwtMT09PWRyKSlyZXR1cm4hMDt0aHJvdyBFcnJvcih2KyJJbnZhbGlk'@;
put 'IEJpZ051bWJlcjogIithbil9LEh0Lm1heGltdW09SHQubWF4PWZ1bmN0aW9uKCl7cmV0dXJuIHRyKGFyZ3VtZW50cywtMSl9LEh0Lm1pbmltdW09SHQubWluPWZ1bmN0aW9uKCl7cmV0dXJuIHRyKGFyZ3VtZW50cywxKX0sSHQucmFuZG9tPShhbj05MDA3MTk5MjU0NzQwOTkyLHluPU1hdGgu'@;
put 'cmFuZG9tKCkqYW4mMjA5NzE1MT9mdW5jdGlvbigpe3JldHVybiBmKE1hdGgucmFuZG9tKCkqYW4pfTpmdW5jdGlvbigpe3JldHVybiA4Mzg4NjA4KigxMDczNzQxODI0Kk1hdGgucmFuZG9tKCl8MCkrKDgzODg2MDgqTWF0aC5yYW5kb20oKXwwKX0sZnVuY3Rpb24ocG4pe3ZhciBwciwkbixk'@;
put 'cixVcixabixzcj0wLE5yPVtdLE1yPW5ldyBIdChHbik7aWYobnVsbD09cG4/cG49b2k6ZHQocG4sMCxFZSksVXI9aChwbi9aKSwkcilpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXtmb3IocHI9Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoVXIqPTIpKTtzcjxVcjsp'@;
put 'KFpuPTEzMTA3Mipwcltzcl0rKHByW3NyKzFdPj4+MTEpKT49OWUxNT8oJG49Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpLHByW3NyXT0kblswXSxwcltzcisxXT0kblsxXSk6KE5yLnB1c2goWm4lMWUxNCksc3IrPTIpO3NyPVVyLzJ9ZWxzZXtpZighY3J5cHRv'@;
put 'LnJhbmRvbUJ5dGVzKXRocm93ICRyPSExLEVycm9yKHYrImNyeXB0byB1bmF2YWlsYWJsZSIpO2Zvcihwcj1jcnlwdG8ucmFuZG9tQnl0ZXMoVXIqPTcpO3NyPFVyOykoWm49MjgxNDc0OTc2NzEwNjU2KigzMSZwcltzcl0pKzEwOTk1MTE2Mjc3NzYqcHJbc3IrMV0rNDI5NDk2NzI5Nipwcltz'@;
put 'cisyXSsxNjc3NzIxNipwcltzciszXSsocHJbc3IrNF08PDE2KSsocHJbc3IrNV08PDgpK3ByW3NyKzZdKT49OWUxNT9jcnlwdG8ucmFuZG9tQnl0ZXMoNykuY29weShwcixzcik6KE5yLnB1c2goWm4lMWUxNCksc3IrPTcpO3NyPVVyLzd9aWYoISRyKWZvcig7c3I8VXI7KShabj15bigpKTw5'@;
put 'ZTE1JiYoTnJbc3IrK109Wm4lMWUxNCk7Zm9yKFVyPU5yWy0tc3JdLHBuJT1aLFVyJiZwbiYmKE5yW3NyXT1mKFVyLyhabj1jZVtaLXBuXSkpKlpuKTswPT09TnJbc3JdO05yLnBvcCgpLHNyLS0pO2lmKHNyPDApTnI9W2RyPTBdO2Vsc2V7Zm9yKGRyPS0xOzA9PT1OclswXTtOci5zcGxpY2Uo'@;
put 'MCwxKSxkci09Wik7Zm9yKHNyPTEsWm49TnJbMF07Wm4+PTEwO1puLz0xMCxzcisrKTtzcjxaJiYoZHItPVotc3IpfXJldHVybiBNci5lPWRyLE1yLmM9TnIsTXJ9KSxIdC5zdW09ZnVuY3Rpb24oKXtmb3IodmFyIGFuPTEseW49YXJndW1lbnRzLHBuPW5ldyBIdCh5blswXSk7YW48eW4ubGVu'@;
put 'Z3RoOylwbj1wbi5wbHVzKHluW2FuKytdKTtyZXR1cm4gcG59LENyPWZ1bmN0aW9uKCl7dmFyIGFuPSIwMTIzNDU2Nzg5IjtmdW5jdGlvbiB5bihwbixwciwkbixkcil7Zm9yKHZhciBVcixzcixabj1bMF0sTnI9MCxNcj1wbi5sZW5ndGg7TnI8TXI7KXtmb3Ioc3I9Wm4ubGVuZ3RoO3NyLS07'@;
put 'Wm5bc3JdKj1wcik7Zm9yKFpuWzBdKz1kci5pbmRleE9mKHBuLmNoYXJBdChOcisrKSksVXI9MDtVcjxabi5sZW5ndGg7VXIrKylabltVcl0+JG4tMSYmKG51bGw9PVpuW1VyKzFdJiYoWm5bVXIrMV09MCksWm5bVXIrMV0rPVpuW1VyXS8kbnwwLFpuW1VyXSU9JG4pfXJldHVybiBabi5yZXZl'@;
put 'cnNlKCl9cmV0dXJuIGZ1bmN0aW9uKHBuLHByLCRuLGRyLFVyKXt2YXIgWm4sc3IsTnIsTXIsWnIsYW8sam8sSWEsWmE9cG4uaW5kZXhPZigiLiIpLHBzPW9pLE1hPV9pO2ZvcihaYT49MCYmKE1yPXRvLHRvPTAscG49cG4ucmVwbGFjZSgiLiIsIiIpLGFvPShJYT1uZXcgSHQocHIpKS5wb3co'@;
put 'cG4ubGVuZ3RoLVphKSx0bz1NcixJYS5jPXluKENuKHJ0KGFvLmMpLGFvLmUsIjAiKSwxMCwkbixhbiksSWEuZT1JYS5jLmxlbmd0aCksTnI9TXI9KGpvPXluKHBuLHByLCRuLFVyPyhabj12dCxhbik6KFpuPWFuLHZ0KSkpLmxlbmd0aDswPT1qb1stLU1yXTtqby5wb3AoKSk7aWYoIWpvWzBd'@;
put 'KXJldHVybiBabi5jaGFyQXQoMCk7aWYoWmE8MD8tLU5yOihhby5jPWpvLGFvLmU9TnIsYW8ucz1kcixqbz0oYW89TW4oYW8sSWEscHMsTWEsJG4pKS5jLFpyPWFvLnIsTnI9YW8uZSksWmE9am9bc3I9TnIrcHMrMV0sTXI9JG4vMixacj1acnx8c3I8MHx8bnVsbCE9am9bc3IrMV0sWnI9TWE8'@;
put 'ND8obnVsbCE9WmF8fFpyKSYmKDA9PU1hfHxNYT09KGFvLnM8MD8zOjIpKTpaYT5Ncnx8WmE9PU1yJiYoND09TWF8fFpyfHw2PT1NYSYmMSZqb1tzci0xXXx8TWE9PShhby5zPDA/ODo3KSksc3I8MXx8IWpvWzBdKXBuPVpyP0NuKFpuLmNoYXJBdCgxKSwtcHMsWm4uY2hhckF0KDApKTpabi5j'@;
put 'aGFyQXQoMCk7ZWxzZXtpZihqby5sZW5ndGg9c3IsWnIpZm9yKC0tJG47Kytqb1stLXNyXT4kbjspam9bc3JdPTAsc3J8fCgrK05yLGpvPVsxXS5jb25jYXQoam8pKTtmb3IoTXI9am8ubGVuZ3RoOyFqb1stLU1yXTspO2ZvcihaYT0wLHBuPSIiO1phPD1Ncjtwbis9Wm4uY2hhckF0KGpvW1ph'@;
put 'KytdKSk7cG49Q24ocG4sTnIsWm4uY2hhckF0KDApKX1yZXR1cm4gcG59fSgpLE1uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYW4ocHIsJG4sZHIpe3ZhciBVcixabixzcixOcixNcj0wLFpyPXByLmxlbmd0aCxhbz0kbiViZSxqbz0kbi9iZXwwO2Zvcihwcj1wci5zbGljZSgpO1pyLS07KU1yPSgo'@;
put 'Wm49YW8qKHNyPXByW1pyXSViZSkrKFVyPWpvKnNyKyhOcj1wcltacl0vYmV8MCkqYW8pJWJlKmJlK01yKS9kcnwwKSsoVXIvYmV8MCkram8qTnIscHJbWnJdPVpuJWRyO3JldHVybiBNciYmKHByPVtNcl0uY29uY2F0KHByKSkscHJ9ZnVuY3Rpb24geW4ocHIsJG4sZHIsVXIpe3ZhciBabixz'@;
put 'cjtpZihkciE9VXIpc3I9ZHI+VXI/MTotMTtlbHNlIGZvcihabj1zcj0wO1puPGRyO1puKyspaWYocHJbWm5dIT0kbltabl0pe3NyPXByW1puXT4kbltabl0/MTotMTticmVha31yZXR1cm4gc3J9ZnVuY3Rpb24gcG4ocHIsJG4sZHIsVXIpe2Zvcih2YXIgWm49MDtkci0tOylwcltkcl0tPVpu'@;
put 'LHByW2RyXT0oWm49cHJbZHJdPCRuW2RyXT8xOjApKlVyK3ByW2RyXS0kbltkcl07Zm9yKDshcHJbMF0mJnByLmxlbmd0aD4xO3ByLnNwbGljZSgwLDEpKTt9cmV0dXJuIGZ1bmN0aW9uKHByLCRuLGRyLFVyLFpuKXt2YXIgc3IsTnIsTXIsWnIsYW8sam8sSWEsWmEscHMsTWEsaHMsbmMsUWEs'@;
put 'TTMsYWQsenMsWGMsS3M9cHIucz09JG4ucz8xOi0xLFZsPXByLmMsZXM9JG4uYztpZighKFZsJiZWbFswXSYmZXMmJmVzWzBdKSlyZXR1cm4gbmV3IEh0KHByLnMmJiRuLnMmJihWbD8hZXN8fFZsWzBdIT1lc1swXTplcyk/VmwmJjA9PVZsWzBdfHwhZXM/MCpLczpLcy8wOk5hTik7Zm9yKHBz'@;
put 'PShaYT1uZXcgSHQoS3MpKS5jPVtdLEtzPWRyKyhOcj1wci5lLSRuLmUpKzEsWm58fChabj1ELE5yPXFlKHByLmUvWiktcWUoJG4uZS9aKSxLcz1Lcy9afDApLE1yPTA7ZXNbTXJdPT0oVmxbTXJdfHwwKTtNcisrKTtpZihlc1tNcl0+KFZsW01yXXx8MCkmJk5yLS0sS3M8MClwcy5wdXNoKDEp'@;
put 'LFpyPSEwO2Vsc2V7Zm9yKE0zPVZsLmxlbmd0aCx6cz1lcy5sZW5ndGgsTXI9MCxLcys9MiwoYW89Zihabi8oZXNbMF0rMSkpKT4xJiYoZXM9YW4oZXMsYW8sWm4pLFZsPWFuKFZsLGFvLFpuKSx6cz1lcy5sZW5ndGgsTTM9VmwubGVuZ3RoKSxRYT16cyxocz0oTWE9Vmwuc2xpY2UoMCx6cykp'@;
put 'Lmxlbmd0aDtoczx6cztNYVtocysrXT0wKTtYYz1lcy5zbGljZSgpLFhjPVswXS5jb25jYXQoWGMpLGFkPWVzWzBdLGVzWzFdPj1abi8yJiZhZCsrO2Rve2lmKGFvPTAsKHNyPXluKGVzLE1hLHpzLGhzKSk8MCl7aWYobmM9TWFbMF0senMhPWhzJiYobmM9bmMqWm4rKE1hWzFdfHwwKSksKGFv'@;
put 'PWYobmMvYWQpKT4xKWZvcihhbz49Wm4mJihhbz1abi0xKSxJYT0oam89YW4oZXMsYW8sWm4pKS5sZW5ndGgsaHM9TWEubGVuZ3RoOzE9PXluKGpvLE1hLElhLGhzKTspYW8tLSxwbihqbyx6czxJYT9YYzplcyxJYSxabiksSWE9am8ubGVuZ3RoLHNyPTE7ZWxzZSAwPT1hbyYmKHNyPWFvPTEp'@;
put 'LElhPShqbz1lcy5zbGljZSgpKS5sZW5ndGg7aWYoSWE8aHMmJihqbz1bMF0uY29uY2F0KGpvKSkscG4oTWEsam8saHMsWm4pLGhzPU1hLmxlbmd0aCwtMT09c3IpZm9yKDt5bihlcyxNYSx6cyxocyk8MTspYW8rKyxwbihNYSx6czxocz9YYzplcyxocyxabiksaHM9TWEubGVuZ3RofWVsc2Ug'@;
put 'MD09PXNyJiYoYW8rKyxNYT1bMF0pO3BzW01yKytdPWFvLE1hWzBdP01hW2hzKytdPVZsW1FhXXx8MDooTWE9W1ZsW1FhXV0saHM9MSl9d2hpbGUoKFFhKys8TTN8fG51bGwhPU1hWzBdKSYmS3MtLSk7WnI9bnVsbCE9TWFbMF0scHNbMF18fHBzLnNwbGljZSgwLDEpfWlmKFpuPT1EKXtmb3Io'@;
put 'TXI9MSxLcz1wc1swXTtLcz49MTA7S3MvPTEwLE1yKyspO0hyKFphLGRyKyhaYS5lPU1yK05yKlotMSkrMSxVcixacil9ZWxzZSBaYS5lPU5yLFphLnI9K1pyO3JldHVybiBaYX19KCksR3I9ZnVuY3Rpb24oKXt2YXIgYW49L14oLT8pMChbeGJvXSkoPz1cd1tcdy5dKiQpL2kseW49L14oW14u'@;
put 'XSspXC4kLyxwbj0vXlwuKFteLl0rKSQvLHByPS9eLT8oSW5maW5pdHl8TmFOKSQvLCRuPS9eXHMqXCsoPz1bXHcuXSl8XlxzK3xccyskL2c7cmV0dXJuIGZ1bmN0aW9uKGRyLFVyLFpuLHNyKXt2YXIgTnIsTXI9Wm4/VXI6VXIucmVwbGFjZSgkbiwiIik7aWYocHIudGVzdChNcikpZHIucz1p'@;
put 'c05hTihNcik/bnVsbDpNcjwwPy0xOjE7ZWxzZXtpZighWm4mJihNcj1Nci5yZXBsYWNlKGFuLGZ1bmN0aW9uKFpyLGFvLGpvKXtyZXR1cm4gTnI9IngiPT0oam89am8udG9Mb3dlckNhc2UoKSk/MTY6ImIiPT1qbz8yOjgsc3ImJnNyIT1Ocj9acjphb30pLHNyJiYoTnI9c3IsTXI9TXIucmVw'@;
put 'bGFjZSh5biwiJDEiKS5yZXBsYWNlKHBuLCIwLiQxIikpLFVyIT1NcikpcmV0dXJuIG5ldyBIdChNcixOcik7aWYoSHQuREVCVUcpdGhyb3cgRXJyb3IodisiTm90IGEiKyhzcj8iIGJhc2UgIitzcjoiIikrIiBudW1iZXI6ICIrVXIpO2RyLnM9bnVsbH1kci5jPWRyLmU9bnVsbH19KCksZ3Iu'@;
put 'YWJzb2x1dGVWYWx1ZT1nci5hYnM9ZnVuY3Rpb24oKXt2YXIgYW49bmV3IEh0KHRoaXMpO3JldHVybiBhbi5zPDAmJihhbi5zPTEpLGFufSxnci5jb21wYXJlZFRvPWZ1bmN0aW9uKGFuLHluKXtyZXR1cm4gcHQodGhpcyxuZXcgSHQoYW4seW4pKX0sZ3IuZGVjaW1hbFBsYWNlcz1nci5kcD1m'@;
put 'dW5jdGlvbihhbix5bil7dmFyIHBuLHByLCRuO2lmKG51bGwhPWFuKXJldHVybiBkdChhbiwwLEVlKSxudWxsPT15bj95bj1faTpkdCh5biwwLDgpLEhyKG5ldyBIdCh0aGlzKSxhbit0aGlzLmUrMSx5bik7aWYoIShwbj10aGlzLmMpKXJldHVybiBudWxsO2lmKHByPSgoJG49cG4ubGVuZ3Ro'@;
put 'LTEpLXFlKHRoaXMuZS9aKSkqWiwkbj1wblskbl0pZm9yKDskbiUxMD09MDskbi89MTAscHItLSk7cmV0dXJuIHByPDAmJihwcj0wKSxwcn0sZ3IuZGl2aWRlZEJ5PWdyLmRpdj1mdW5jdGlvbihhbix5bil7cmV0dXJuIE1uKHRoaXMsbmV3IEh0KGFuLHluKSxvaSxfaSl9LGdyLmRpdmlkZWRU'@;
put 'b0ludGVnZXJCeT1nci5pZGl2PWZ1bmN0aW9uKGFuLHluKXtyZXR1cm4gTW4odGhpcyxuZXcgSHQoYW4seW4pLDAsMSl9LGdyLmV4cG9uZW50aWF0ZWRCeT1nci5wb3c9ZnVuY3Rpb24oYW4seW4pe3ZhciBwbixwciwkbixkcixabixzcixOcixNcixacj10aGlzO2lmKChhbj1uZXcgSHQoYW4p'@;
put 'KS5jJiYhYW4uaXNJbnRlZ2VyKCkpdGhyb3cgRXJyb3IodisiRXhwb25lbnQgbm90IGFuIGludGVnZXI6ICIrS3IoYW4pKTtpZihudWxsIT15biYmKHluPW5ldyBIdCh5bikpLFpuPWFuLmU+MTQsIVpyLmN8fCFaci5jWzBdfHwxPT1aci5jWzBdJiYhWnIuZSYmMT09WnIuYy5sZW5ndGh8fCFh'@;
put 'bi5jfHwhYW4uY1swXSlyZXR1cm4gTXI9bmV3IEh0KE1hdGgucG93KCtLcihaciksWm4/YW4ucyooMi1KdChhbikpOitLcihhbikpKSx5bj9Nci5tb2QoeW4pOk1yO2lmKHNyPWFuLnM8MCx5bil7aWYoeW4uYz8heW4uY1swXToheW4ucylyZXR1cm4gbmV3IEh0KE5hTik7KHByPSFzciYmWnIu'@;
put 'aXNJbnRlZ2VyKCkmJnluLmlzSW50ZWdlcigpKSYmKFpyPVpyLm1vZCh5bikpfWVsc2V7aWYoYW4uZT45JiYoWnIuZT4wfHxaci5lPC0xfHwoMD09WnIuZT9aci5jWzBdPjF8fFpuJiZaci5jWzFdPj0yNGU3OlpyLmNbMF08OGUxM3x8Wm4mJlpyLmNbMF08PTk5OTk5NzVlNykpKXJldHVybiBk'@;
put 'cj1aci5zPDAmJkp0KGFuKT8tMDowLFpyLmU+LTEmJihkcj0xL2RyKSxuZXcgSHQoc3I/MS9kcjpkcik7dG8mJihkcj1oKHRvL1orMikpfWZvcihabj8ocG49bmV3IEh0KC41KSxzciYmKGFuLnM9MSksTnI9SnQoYW4pKTpOcj0oJG49TWF0aC5hYnMoK0tyKGFuKSkpJTIsTXI9bmV3IEh0KEdu'@;
put 'KTs7KXtpZihOcil7aWYoIShNcj1Nci50aW1lcyhacikpLmMpYnJlYWs7ZHI/TXIuYy5sZW5ndGg+ZHImJihNci5jLmxlbmd0aD1kcik6cHImJihNcj1Nci5tb2QoeW4pKX1pZigkbil7aWYoMD09PSgkbj1mKCRuLzIpKSlicmVhaztOcj0kbiUyfWVsc2UgaWYoSHIoYW49YW4udGltZXMocG4p'@;
put 'LGFuLmUrMSwxKSxhbi5lPjE0KU5yPUp0KGFuKTtlbHNle2lmKDA9PSgkbj0rS3IoYW4pKSlicmVhaztOcj0kbiUyfVpyPVpyLnRpbWVzKFpyKSxkcj9aci5jJiZaci5jLmxlbmd0aD5kciYmKFpyLmMubGVuZ3RoPWRyKTpwciYmKFpyPVpyLm1vZCh5bikpfXJldHVybiBwcj9Ncjooc3ImJihN'@;
put 'cj1Hbi5kaXYoTXIpKSx5bj9Nci5tb2QoeW4pOmRyP0hyKE1yLHRvLF9pLHZvaWQgMCk6TXIpfSxnci5pbnRlZ2VyVmFsdWU9ZnVuY3Rpb24oYW4pe3ZhciB5bj1uZXcgSHQodGhpcyk7cmV0dXJuIG51bGw9PWFuP2FuPV9pOmR0KGFuLDAsOCksSHIoeW4seW4uZSsxLGFuKX0sZ3IuaXNFcXVh'@;
put 'bFRvPWdyLmVxPWZ1bmN0aW9uKGFuLHluKXtyZXR1cm4gMD09PXB0KHRoaXMsbmV3IEh0KGFuLHluKSl9LGdyLmlzRmluaXRlPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmN9LGdyLmlzR3JlYXRlclRoYW49Z3IuZ3Q9ZnVuY3Rpb24oYW4seW4pe3JldHVybiBwdCh0aGlzLG5ldyBIdChhbix5'@;
put 'bikpPjB9LGdyLmlzR3JlYXRlclRoYW5PckVxdWFsVG89Z3IuZ3RlPWZ1bmN0aW9uKGFuLHluKXtyZXR1cm4gMT09PSh5bj1wdCh0aGlzLG5ldyBIdChhbix5bikpKXx8MD09PXlufSxnci5pc0ludGVnZXI9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYyYmcWUodGhpcy5lL1opPnRoaXMuYy5s'@;
put 'ZW5ndGgtMn0sZ3IuaXNMZXNzVGhhbj1nci5sdD1mdW5jdGlvbihhbix5bil7cmV0dXJuIHB0KHRoaXMsbmV3IEh0KGFuLHluKSk8MH0sZ3IuaXNMZXNzVGhhbk9yRXF1YWxUbz1nci5sdGU9ZnVuY3Rpb24oYW4seW4pe3JldHVybi0xPT09KHluPXB0KHRoaXMsbmV3IEh0KGFuLHluKSkpfHww'@;
put 'PT09eW59LGdyLmlzTmFOPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuc30sZ3IuaXNOZWdhdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnM8MH0sZ3IuaXNQb3NpdGl2ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnM+MH0sZ3IuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuISF0aGlzLmMmJjA9'@;
put 'PXRoaXMuY1swXX0sZ3IubWludXM9ZnVuY3Rpb24oYW4seW4pe3ZhciBwbixwciwkbixkcixVcj10aGlzLFpuPVVyLnM7aWYoeW49KGFuPW5ldyBIdChhbix5bikpLnMsIVpufHwheW4pcmV0dXJuIG5ldyBIdChOYU4pO2lmKFpuIT15bilyZXR1cm4gYW4ucz0teW4sVXIucGx1cyhhbik7dmFy'@;
put 'IHNyPVVyLmUvWixOcj1hbi5lL1osTXI9VXIuYyxacj1hbi5jO2lmKCFzcnx8IU5yKXtpZighTXJ8fCFacilyZXR1cm4gTXI/KGFuLnM9LXluLGFuKTpuZXcgSHQoWnI/VXI6TmFOKTtpZighTXJbMF18fCFaclswXSlyZXR1cm4gWnJbMF0/KGFuLnM9LXluLGFuKTpuZXcgSHQoTXJbMF0/VXI6'@;
put 'Mz09X2k/LTA6MCl9aWYoc3I9cWUoc3IpLE5yPXFlKE5yKSxNcj1Nci5zbGljZSgpLFpuPXNyLU5yKXtmb3IoKGRyPVpuPDApPyhabj0tWm4sJG49TXIpOihOcj1zciwkbj1aciksJG4ucmV2ZXJzZSgpLHluPVpuO3luLS07JG4ucHVzaCgwKSk7JG4ucmV2ZXJzZSgpfWVsc2UgZm9yKHByPShk'@;
put 'cj0oWm49TXIubGVuZ3RoKTwoeW49WnIubGVuZ3RoKSk/Wm46eW4sWm49eW49MDt5bjxwcjt5bisrKWlmKE1yW3luXSE9WnJbeW5dKXtkcj1Nclt5bl08WnJbeW5dO2JyZWFrfWlmKGRyJiYoJG49TXIsTXI9WnIsWnI9JG4sYW4ucz0tYW4ucyksKHluPShwcj1aci5sZW5ndGgpLShwbj1Nci5s'@;
put 'ZW5ndGgpKT4wKWZvcig7eW4tLTtNcltwbisrXT0wKTtmb3IoeW49RC0xO3ByPlpuOyl7aWYoTXJbLS1wcl08WnJbcHJdKXtmb3IocG49cHI7cG4mJiFNclstLXBuXTtNcltwbl09eW4pOy0tTXJbcG5dLE1yW3ByXSs9RH1Ncltwcl0tPVpyW3ByXX1mb3IoOzA9PU1yWzBdO01yLnNwbGljZSgw'@;
put 'LDEpLC0tTnIpO3JldHVybiBNclswXT9vcihhbixNcixOcik6KGFuLnM9Mz09X2k/LTE6MSxhbi5jPVthbi5lPTBdLGFuKX0sZ3IubW9kdWxvPWdyLm1vZD1mdW5jdGlvbihhbix5bil7dmFyIHBuLHByLCRuPXRoaXM7cmV0dXJuIGFuPW5ldyBIdChhbix5biksISRuLmN8fCFhbi5zfHxhbi5j'@;
put 'JiYhYW4uY1swXT9uZXcgSHQoTmFOKTohYW4uY3x8JG4uYyYmISRuLmNbMF0/bmV3IEh0KCRuKTooOT09d2k/KHByPWFuLnMsYW4ucz0xLHBuPU1uKCRuLGFuLDAsMyksYW4ucz1wcixwbi5zKj1wcik6cG49TW4oJG4sYW4sMCx3aSksIShhbj0kbi5taW51cyhwbi50aW1lcyhhbikpKS5jWzBd'@;
put 'JiYxPT13aSYmKGFuLnM9JG4ucyksYW4pfSxnci5tdWx0aXBsaWVkQnk9Z3IudGltZXM9ZnVuY3Rpb24oYW4seW4pe3ZhciBwbixwciwkbixkcixVcixabixzcixOcixNcixacixhbyxqbyxJYSxaYSxwcyxNYT10aGlzLGhzPU1hLmMsbmM9KGFuPW5ldyBIdChhbix5bikpLmM7aWYoIShocyYm'@;
put 'bmMmJmhzWzBdJiZuY1swXSkpcmV0dXJuIU1hLnN8fCFhbi5zfHxocyYmIWhzWzBdJiYhbmN8fG5jJiYhbmNbMF0mJiFocz9hbi5jPWFuLmU9YW4ucz1udWxsOihhbi5zKj1NYS5zLGhzJiZuYz8oYW4uYz1bMF0sYW4uZT0wKTphbi5jPWFuLmU9bnVsbCksYW47Zm9yKHByPXFlKE1hLmUvWikr'@;
put 'cWUoYW4uZS9aKSxhbi5zKj1NYS5zLChzcj1ocy5sZW5ndGgpPChacj1uYy5sZW5ndGgpJiYoSWE9aHMsaHM9bmMsbmM9SWEsJG49c3Isc3I9WnIsWnI9JG4pLCRuPXNyK1pyLElhPVtdOyRuLS07SWEucHVzaCgwKSk7Zm9yKFphPUQscHM9YmUsJG49WnI7LS0kbj49MDspe2Zvcihwbj0wLGFv'@;
put 'PW5jWyRuXSVwcyxqbz1uY1skbl0vcHN8MCxkcj0kbisoVXI9c3IpO2RyPiRuOylwbj0oKE5yPWFvKihOcj1oc1stLVVyXSVwcykrKFpuPWpvKk5yKyhNcj1oc1tVcl0vcHN8MCkqYW8pJXBzKnBzK0lhW2RyXStwbikvWmF8MCkrKFpuL3BzfDApK2pvKk1yLElhW2RyLS1dPU5yJVphO0lhW2Ry'@;
put 'XT1wbn1yZXR1cm4gcG4/KytwcjpJYS5zcGxpY2UoMCwxKSxvcihhbixJYSxwcil9LGdyLm5lZ2F0ZWQ9ZnVuY3Rpb24oKXt2YXIgYW49bmV3IEh0KHRoaXMpO3JldHVybiBhbi5zPS1hbi5zfHxudWxsLGFufSxnci5wbHVzPWZ1bmN0aW9uKGFuLHluKXt2YXIgcG4scHI9dGhpcywkbj1wci5z'@;
put 'O2lmKHluPShhbj1uZXcgSHQoYW4seW4pKS5zLCEkbnx8IXluKXJldHVybiBuZXcgSHQoTmFOKTtpZigkbiE9eW4pcmV0dXJuIGFuLnM9LXluLHByLm1pbnVzKGFuKTt2YXIgZHI9cHIuZS9aLFVyPWFuLmUvWixabj1wci5jLHNyPWFuLmM7aWYoIWRyfHwhVXIpe2lmKCFabnx8IXNyKXJldHVy'@;
put 'biBuZXcgSHQoJG4vMCk7aWYoIVpuWzBdfHwhc3JbMF0pcmV0dXJuIHNyWzBdP2FuOm5ldyBIdChablswXT9wcjowKiRuKX1pZihkcj1xZShkciksVXI9cWUoVXIpLFpuPVpuLnNsaWNlKCksJG49ZHItVXIpe2Zvcigkbj4wPyhVcj1kcixwbj1zcik6KCRuPS0kbixwbj1abikscG4ucmV2ZXJz'@;
put 'ZSgpOyRuLS07cG4ucHVzaCgwKSk7cG4ucmV2ZXJzZSgpfWZvcigoJG49Wm4ubGVuZ3RoKS0oeW49c3IubGVuZ3RoKTwwJiYocG49c3Isc3I9Wm4sWm49cG4seW49JG4pLCRuPTA7eW47KSRuPShablstLXluXT1ablt5bl0rc3JbeW5dKyRuKS9EfDAsWm5beW5dPUQ9PT1ablt5bl0/MDpablt5'@;
put 'bl0lRDtyZXR1cm4gJG4mJihabj1bJG5dLmNvbmNhdChabiksKytVciksb3IoYW4sWm4sVXIpfSxnci5wcmVjaXNpb249Z3Iuc2Q9ZnVuY3Rpb24oYW4seW4pe3ZhciBwbixwciwkbjtpZihudWxsIT1hbiYmYW4hPT0hIWFuKXJldHVybiBkdChhbiwxLEVlKSxudWxsPT15bj95bj1faTpkdCh5'@;
put 'biwwLDgpLEhyKG5ldyBIdCh0aGlzKSxhbix5bik7aWYoIShwbj10aGlzLmMpKXJldHVybiBudWxsO2lmKHByPSgkbj1wbi5sZW5ndGgtMSkqWisxLCRuPXBuWyRuXSl7Zm9yKDskbiUxMD09MDskbi89MTAscHItLSk7Zm9yKCRuPXBuWzBdOyRuPj0xMDskbi89MTAscHIrKyk7fXJldHVybiBh'@;
put 'biYmdGhpcy5lKzE+cHImJihwcj10aGlzLmUrMSkscHJ9LGdyLnNoaWZ0ZWRCeT1mdW5jdGlvbihhbil7cmV0dXJuIGR0KGFuLC1uZSxuZSksdGhpcy50aW1lcygiMWUiK2FuKX0sZ3Iuc3F1YXJlUm9vdD1nci5zcXJ0PWZ1bmN0aW9uKCl7dmFyIGFuLHluLHBuLHByLCRuLGRyPXRoaXMsVXI9'@;
put 'ZHIuYyxabj1kci5zLHNyPWRyLmUsTnI9b2krNCxNcj1uZXcgSHQoIjAuNSIpO2lmKDEhPT1abnx8IVVyfHwhVXJbMF0pcmV0dXJuIG5ldyBIdCghWm58fFpuPDAmJighVXJ8fFVyWzBdKT9OYU46VXI/ZHI6MS8wKTtpZigwPT0oWm49TWF0aC5zcXJ0KCtLcihkcikpKXx8Wm49PTEvMD8oKCh5'@;
put 'bj1ydChVcikpLmxlbmd0aCtzciklMj09MCYmKHluKz0iMCIpLFpuPU1hdGguc3FydCgreW4pLHNyPXFlKChzcisxKS8yKS0oc3I8MHx8c3IlMikscG49bmV3IEh0KHluPVpuPT0xLzA/IjVlIitzcjooeW49Wm4udG9FeHBvbmVudGlhbCgpKS5zbGljZSgwLHluLmluZGV4T2YoImUiKSsxKStz'@;
put 'cikpOnBuPW5ldyBIdChabisiIikscG4uY1swXSlmb3IoKFpuPShzcj1wbi5lKStOcik8MyYmKFpuPTApOzspaWYocG49TXIudGltZXMoKCRuPXBuKS5wbHVzKE1uKGRyLCRuLE5yLDEpKSkscnQoJG4uYykuc2xpY2UoMCxabik9PT0oeW49cnQocG4uYykpLnNsaWNlKDAsWm4pKXtpZihwbi5l'@;
put 'PHNyJiYtLVpuLCI5OTk5IiE9KHluPXluLnNsaWNlKFpuLTMsWm4rMSkpJiYocHJ8fCI0OTk5IiE9eW4pKXsoISt5bnx8ISt5bi5zbGljZSgxKSYmIjUiPT15bi5jaGFyQXQoMCkpJiYoSHIocG4scG4uZStvaSsyLDEpLGFuPSFwbi50aW1lcyhwbikuZXEoZHIpKTticmVha31pZighcHImJihI'@;
put 'cigkbiwkbi5lK29pKzIsMCksJG4udGltZXMoJG4pLmVxKGRyKSkpe3BuPSRuO2JyZWFrfU5yKz00LFpuKz00LHByPTF9cmV0dXJuIEhyKHBuLHBuLmUrb2krMSxfaSxhbil9LGdyLnRvRXhwb25lbnRpYWw9ZnVuY3Rpb24oYW4seW4pe3JldHVybiBudWxsIT1hbiYmKGR0KGFuLDAsRWUpLGFu'@;
put 'KyspLEhuKHRoaXMsYW4seW4sMSl9LGdyLnRvRml4ZWQ9ZnVuY3Rpb24oYW4seW4pe3JldHVybiBudWxsIT1hbiYmKGR0KGFuLDAsRWUpLGFuPWFuK3RoaXMuZSsxKSxIbih0aGlzLGFuLHluKX0sZ3IudG9Gb3JtYXQ9ZnVuY3Rpb24oYW4seW4scG4pe3ZhciBwcjtpZihudWxsPT1wbiludWxs'@;
put 'IT1hbiYmeW4mJiJvYmplY3QiPT10eXBlb2YgeW4/KHBuPXluLHluPW51bGwpOmFuJiYib2JqZWN0Ij09dHlwZW9mIGFuPyhwbj1hbixhbj15bj1udWxsKTpwbj1wbztlbHNlIGlmKCJvYmplY3QiIT10eXBlb2YgcG4pdGhyb3cgRXJyb3IodisiQXJndW1lbnQgbm90IGFuIG9iamVjdDogIitw'@;
put 'bik7aWYocHI9dGhpcy50b0ZpeGVkKGFuLHluKSx0aGlzLmMpe3ZhciBkcixVcj1wci5zcGxpdCgiLiIpLFpuPStwbi5ncm91cFNpemUsc3I9K3BuLnNlY29uZGFyeUdyb3VwU2l6ZSxOcj1wbi5ncm91cFNlcGFyYXRvcnx8IiIsTXI9VXJbMF0sWnI9VXJbMV0sYW89dGhpcy5zPDAsam89YW8/'@;
put 'TXIuc2xpY2UoMSk6TXIsSWE9am8ubGVuZ3RoO2lmKHNyJiYoZHI9Wm4sWm49c3Isc3I9ZHIsSWEtPWRyKSxabj4wJiZJYT4wKXtmb3IoTXI9am8uc3Vic3RyKDAsZHI9SWElWm58fFpuKTtkcjxJYTtkcis9Wm4pTXIrPU5yK2pvLnN1YnN0cihkcixabik7c3I+MCYmKE1yKz1Ocitqby5zbGlj'@;
put 'ZShkcikpLGFvJiYoTXI9Ii0iK01yKX1wcj1acj9NcisocG4uZGVjaW1hbFNlcGFyYXRvcnx8IiIpKygoc3I9K3BuLmZyYWN0aW9uR3JvdXBTaXplKT9aci5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcZHsiK3NyKyJ9XFxCIiwiZyIpLCIkJiIrKHBuLmZyYWN0aW9uR3JvdXBTZXBhcmF0b3J8fCIi'@;
put 'KSk6WnIpOk1yfXJldHVybihwbi5wcmVmaXh8fCIiKStwcisocG4uc3VmZml4fHwiIil9LGdyLnRvRnJhY3Rpb249ZnVuY3Rpb24oYW4pe3ZhciB5bixwbixwciwkbixkcixVcixabixzcixOcixNcixacixhbyxqbz10aGlzLElhPWpvLmM7aWYobnVsbCE9YW4mJighKFpuPW5ldyBIdChhbikp'@;
put 'LmlzSW50ZWdlcigpJiYoWm4uY3x8MSE9PVpuLnMpfHxabi5sdChHbikpKXRocm93IEVycm9yKHYrIkFyZ3VtZW50ICIrKFpuLmlzSW50ZWdlcigpPyJvdXQgb2YgcmFuZ2U6ICI6Im5vdCBhbiBpbnRlZ2VyOiAiKStLcihabikpO2lmKCFJYSlyZXR1cm4gbmV3IEh0KGpvKTtmb3IoeW49bmV3'@;
put 'IEh0KEduKSxOcj1wbj1uZXcgSHQoR24pLHByPXNyPW5ldyBIdChHbiksYW89cnQoSWEpLGRyPXluLmU9YW8ubGVuZ3RoLWpvLmUtMSx5bi5jWzBdPWNlWyhVcj1kciVaKTwwP1orVXI6VXJdLGFuPSFhbnx8Wm4uY29tcGFyZWRUbyh5bik+MD9kcj4wP3luOk5yOlpuLFVyPURyLERyPTEvMCxa'@;
put 'bj1uZXcgSHQoYW8pLHNyLmNbMF09MDtNcj1Nbihabix5biwwLDEpLDEhPSgkbj1wbi5wbHVzKE1yLnRpbWVzKHByKSkpLmNvbXBhcmVkVG8oYW4pOylwbj1wcixwcj0kbixOcj1zci5wbHVzKE1yLnRpbWVzKCRuPU5yKSksc3I9JG4seW49Wm4ubWludXMoTXIudGltZXMoJG49eW4pKSxabj0k'@;
put 'bjtyZXR1cm4gJG49TW4oYW4ubWludXMocG4pLHByLDAsMSksc3I9c3IucGx1cygkbi50aW1lcyhOcikpLHBuPXBuLnBsdXMoJG4udGltZXMocHIpKSxzci5zPU5yLnM9am8ucyxacj1NbihOcixwcixkcio9MixfaSkubWludXMoam8pLmFicygpLmNvbXBhcmVkVG8oTW4oc3IscG4sZHIsX2kp'@;
put 'Lm1pbnVzKGpvKS5hYnMoKSk8MT9bTnIscHJdOltzcixwbl0sRHI9VXIsWnJ9LGdyLnRvTnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuK0tyKHRoaXMpfSxnci50b1ByZWNpc2lvbj1mdW5jdGlvbihhbix5bil7cmV0dXJuIG51bGwhPWFuJiZkdChhbiwxLEVlKSxIbih0aGlzLGFuLHluLDIpfSxn'@;
put 'ci50b1N0cmluZz1mdW5jdGlvbihhbil7dmFyIHluLHBuPXRoaXMscHI9cG4ucywkbj1wbi5lO3JldHVybiBudWxsPT09JG4/cHI/KHluPSJJbmZpbml0eSIscHI8MCYmKHluPSItIit5bikpOnluPSJOYU4iOihudWxsPT1hbj95bj0kbjw9T258fCRuPj16cj92bihydChwbi5jKSwkbik6Q24o'@;
put 'cnQocG4uYyksJG4sIjAiKToxMD09PWFuJiZOdD95bj1DbihydCgocG49SHIobmV3IEh0KHBuKSxvaSskbisxLF9pKSkuYykscG4uZSwiMCIpOihkdChhbiwyLHZ0Lmxlbmd0aCwiQmFzZSIpLHluPUNyKENuKHJ0KHBuLmMpLCRuLCIwIiksMTAsYW4scHIsITApKSxwcjwwJiZwbi5jWzBdJiYo'@;
put 'eW49Ii0iK3luKSkseW59LGdyLnZhbHVlT2Y9Z3IudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIEtyKHRoaXMpfSxnci5faXNCaWdOdW1iZXI9ITAsbnVsbCE9dG4mJkh0LnNldCh0biksSHR9KCksYS5kZWZhdWx0PWEuQmlnTnVtYmVyPWEsYy5leHBvcnRzP2MuZXhwb3J0cz1hOihsfHwobD10'@;
put 'eXBlb2Ygc2VsZjwidSImJnNlbGY/c2VsZjp3aW5kb3cpLGwuQmlnTnVtYmVyPWEpfSgkaXQpfSh0NGUpO3ZhciBuNGU9dDRlLmV4cG9ydHM7Y29uc3QgZjM9UVgoKSxtb3Q9cVgoKSx2b3Q9WFgsYm90PW40ZSxVMD17dHJpbGxpb246TWF0aC5wb3coMTAsMTIpLGJpbGxpb246TWF0aC5wb3co'@;
put 'MTAsOSksbWlsbGlvbjpNYXRoLnBvdygxMCw2KSx0aG91c2FuZDpNYXRoLnBvdygxMCwzKX0sYVQ9e3RvdGFsTGVuZ3RoOjAsY2hhcmFjdGVyaXN0aWM6MCxmb3JjZUF2ZXJhZ2U6ITEsYXZlcmFnZTohMSxtYW50aXNzYTotMSxvcHRpb25hbE1hbnRpc3NhOiEwLHRob3VzYW5kU2VwYXJhdGVk'@;
put 'OiExLHNwYWNlU2VwYXJhdGVkOiExLG5lZ2F0aXZlOiJzaWduIixmb3JjZVNpZ246ITEscm91bmRpbmdGdW5jdGlvbjpNYXRoLnJvdW5kLHNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uOiExfSx7YmluYXJ5U3VmZml4ZXM6cjRlLGRlY2ltYWxTdWZmaXhlczpXUH09ZjMuY3VycmVudEJ5dGVz'@;
put 'KCksZUo9e2dlbmVyYWw6e3NjYWxlOjEwMjQsc3VmZml4ZXM6V1AsbWFya2VyOiJiZCJ9LGJpbmFyeTp7c2NhbGU6MTAyNCxzdWZmaXhlczpyNGUsbWFya2VyOiJiIn0sZGVjaW1hbDp7c2NhbGU6MWUzLHN1ZmZpeGVzOldQLG1hcmtlcjoiZCJ9fTtmdW5jdGlvbiBZUChjLGwsYSl7bGV0IGQ9'@;
put 'bFswXSxoPU1hdGguYWJzKGMpO2lmKGg+PWEpe2ZvcihsZXQgZj0xO2Y8bC5sZW5ndGg7KytmKXtsZXQgdj1NYXRoLnBvdyhhLGYpLE09TWF0aC5wb3coYSxmKzEpO2lmKGg+PXYmJmg8TSl7ZD1sW2ZdLGMvPXY7YnJlYWt9fWQ9PT1sWzBdJiYoYy89TWF0aC5wb3coYSxsLmxlbmd0aC0xKSxk'@;
put 'PWxbbC5sZW5ndGgtMV0pfXJldHVybnt2YWx1ZTpjLHN1ZmZpeDpkfX1mdW5jdGlvbiBHUChjKXtsZXQgbD0iIjtmb3IobGV0IGE9MDthPGM7YSsrKWwrPSIwIjtyZXR1cm4gbH1mdW5jdGlvbiBzVCh7aW5zdGFuY2U6Yyxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmE9ZjMsZGVjaW1hbFNlcGFy'@;
put 'YXRvcjpkLGRlZmF1bHRzOmg9YS5jdXJyZW50RGVmYXVsdHMoKX0pe2xldCBmPWMuX3ZhbHVlO2lmKDA9PT1mJiZhLmhhc1plcm9Gb3JtYXQoKSlyZXR1cm4gYS5nZXRaZXJvRm9ybWF0KCk7aWYoIWlzRmluaXRlKGYpKXJldHVybiBmLnRvU3RyaW5nKCk7bGV0IHY9T2JqZWN0LmFzc2lnbih7'@;
put 'fSxhVCxoLGwpLE09di50b3RhbExlbmd0aCxEPU0/MDp2LmNoYXJhY3RlcmlzdGljLFo9di5vcHRpb25hbENoYXJhY3RlcmlzdGljLG5lPXYuZm9yY2VBdmVyYWdlLGJlPSEhTXx8ISFuZXx8di5hdmVyYWdlLEVlPU0/LTE6YmUmJnZvaWQgMD09PWwubWFudGlzc2E/MDp2Lm1hbnRpc3NhLEJl'@;
put 'PSFNJiYodm9pZCAwPT09bC5vcHRpb25hbE1hbnRpc3NhPy0xPT09RWU6di5vcHRpb25hbE1hbnRpc3NhKSxxZT12LnRyaW1NYW50aXNzYSxydD12LnRob3VzYW5kU2VwYXJhdGVkLHB0PXYuc3BhY2VTZXBhcmF0ZWQsZHQ9di5uZWdhdGl2ZSxKdD12LmZvcmNlU2lnbix2bj12LmV4cG9uZW50'@;
put 'aWFsLENuPXYucm91bmRpbmdGdW5jdGlvbix0bj0iIjtpZihiZSl7bGV0IENyPWZ1bmN0aW9uIGtvdCh7dmFsdWU6Yyxmb3JjZUF2ZXJhZ2U6bCxsb3dQcmVjaXNpb246YT0hMCxhYmJyZXZpYXRpb25zOmQsc3BhY2VTZXBhcmF0ZWQ6aD0hMSx0b3RhbExlbmd0aDpmPTAscm91bmRpbmdGdW5j'@;
put 'dGlvbjp2PU1hdGgucm91bmR9KXtsZXQgTT0iIixEPU1hdGguYWJzKGMpLFo9LTE7aWYobCYmZFtsXSYmVTBbbF0/KE09ZFtsXSxjLz1VMFtsXSk6RD49VTAudHJpbGxpb258fGEmJjE9PT12KEQvVTAudHJpbGxpb24pPyhNPWQudHJpbGxpb24sYy89VTAudHJpbGxpb24pOkQ8VTAudHJpbGxp'@;
put 'b24mJkQ+PVUwLmJpbGxpb258fGEmJjE9PT12KEQvVTAuYmlsbGlvbik/KE09ZC5iaWxsaW9uLGMvPVUwLmJpbGxpb24pOkQ8VTAuYmlsbGlvbiYmRD49VTAubWlsbGlvbnx8YSYmMT09PXYoRC9VMC5taWxsaW9uKT8oTT1kLm1pbGxpb24sYy89VTAubWlsbGlvbik6KEQ8VTAubWlsbGlvbiYm'@;
put 'RD49VTAudGhvdXNhbmR8fGEmJjE9PT12KEQvVTAudGhvdXNhbmQpKSYmKE09ZC50aG91c2FuZCxjLz1VMC50aG91c2FuZCksTSYmKE09KGg/IiAiOiIiKStNKSxmKXtsZXQgY2U9YzwwLGJlPWMudG9TdHJpbmcoKS5zcGxpdCgiLiIpWzBdO1o9TWF0aC5tYXgoZi0oY2U/YmUubGVuZ3RoLTE6'@;
put 'YmUubGVuZ3RoKSwwKX1yZXR1cm57dmFsdWU6YyxhYmJyZXZpYXRpb246TSxtYW50aXNzYVByZWNpc2lvbjpafX0oe3ZhbHVlOmYsZm9yY2VBdmVyYWdlOm5lLGxvd1ByZWNpc2lvbjp2Lmxvd1ByZWNpc2lvbixhYmJyZXZpYXRpb25zOmEuY3VycmVudEFiYnJldmlhdGlvbnMoKSxzcGFjZVNl'@;
put 'cGFyYXRlZDpwdCxyb3VuZGluZ0Z1bmN0aW9uOkNuLHRvdGFsTGVuZ3RoOk19KTtmPUNyLnZhbHVlLHRuKz1Dci5hYmJyZXZpYXRpb24sTSYmKEVlPUNyLm1hbnRpc3NhUHJlY2lzaW9uKX1pZih2bil7bGV0IENyPWZ1bmN0aW9uIERvdCh7dmFsdWU6YyxjaGFyYWN0ZXJpc3RpY1ByZWNpc2lv'@;
put 'bjpsfSl7bGV0W2EsZF09Yy50b0V4cG9uZW50aWFsKCkuc3BsaXQoImUiKSxoPSthO3JldHVybiBsPygxPGwmJihoKj1NYXRoLnBvdygxMCxsLTEpLGQ9K2QtKGwtMSksZD1kPj0wP2ArJHtkfWA6ZCkse3ZhbHVlOmgsYWJicmV2aWF0aW9uOmBlJHtkfWB9KTp7dmFsdWU6aCxhYmJyZXZpYXRp'@;
put 'b246YGUke2R9YH19KHt2YWx1ZTpmLGNoYXJhY3RlcmlzdGljUHJlY2lzaW9uOkR9KTtmPUNyLnZhbHVlLHRuPUNyLmFiYnJldmlhdGlvbit0bn1sZXQgTW49ZnVuY3Rpb24gTG90KGMsbCxhLGQsaCxmKXtpZigtMT09PWQpcmV0dXJuIGM7bGV0IHY9ZnVuY3Rpb24gUm90KGMsbCxhPU1hdGgu'@;
put 'cm91bmQpe3JldHVybi0xIT09Yy50b1N0cmluZygpLmluZGV4T2YoImUiKT9mdW5jdGlvbiBJb3QoYyxsKXtsZXQgYT1jLnRvU3RyaW5nKCksW2QsaF09YS5zcGxpdCgiZSIpLFtmLHY9IiJdPWQuc3BsaXQoIi4iKTtpZigraD4wKWE9Zit2K0dQKGgtdi5sZW5ndGgpO2Vsc2V7bGV0IE09Ii4i'@;
put 'O009K2Y8MD9gLTAke019YDpgMCR7TX1gO2xldCBEPShHUCgtaC0xKStNYXRoLmFicyhmKSt2KS5zdWJzdHIoMCxsKTtELmxlbmd0aDxsJiYoRCs9R1AobC1ELmxlbmd0aCkpLGE9TStEfXJldHVybitoPjAmJmw+MCYmKGErPWAuJHtHUChsKX1gKSxhfShjLGwpOm5ldyBib3QoYSgrYCR7Y31l'@;
put 'KyR7bH1gKS9NYXRoLnBvdygxMCxsKSkudG9GaXhlZChsKX0obCxkLGYpLFtNLEQ9IiJdPXYudG9TdHJpbmcoKS5zcGxpdCgiLiIpO2lmKEQubWF0Y2goL14wKyQvKSYmKGF8fGgpKXJldHVybiBNO2xldCBaPUQubWF0Y2goLzArJC8pO3JldHVybiBoJiZaP2Ake019LiR7RC50b1N0cmluZygp'@;
put 'LnNsaWNlKDAsWi5pbmRleCl9YDp2LnRvU3RyaW5nKCl9KGYudG9TdHJpbmcoKSxmLEJlLEVlLHFlLENuKTtyZXR1cm4gTW49ZnVuY3Rpb24gT290KGMsbCxhLGQpe2xldCBoPWMsW2Ysdl09aC50b1N0cmluZygpLnNwbGl0KCIuIik7aWYoZi5tYXRjaCgvXi0/MCQvKSYmYSlyZXR1cm4gdj9g'@;
put 'JHtmLnJlcGxhY2UoIjAiLCIiKX0uJHt2fWA6Zi5yZXBsYWNlKCIwIiwiIik7Y29uc3QgTT1sPDAmJjA9PT1mLmluZGV4T2YoIi0iKTtpZihNJiYoZj1mLnNsaWNlKDEpLGg9aC5zbGljZSgxKSksZi5sZW5ndGg8ZCl7bGV0IEQ9ZC1mLmxlbmd0aDtmb3IobGV0IFo9MDtaPEQ7WisrKWg9YDAk'@;
put 'e2h9YH1yZXR1cm4gTSYmKGg9YC0ke2h9YCksaC50b1N0cmluZygpfShNbixmLFosRCksTW49ZnVuY3Rpb24gRm90KGMsbCxhLGQsaCl7bGV0IGY9ZC5jdXJyZW50RGVsaW1pdGVycygpLHY9Zi50aG91c2FuZHM7aD1ofHxmLmRlY2ltYWw7bGV0IE09Zi50aG91c2FuZHNTaXplfHwzLEQ9Yy50'@;
put 'b1N0cmluZygpLFo9RC5zcGxpdCgiLiIpWzBdLG5lPUQuc3BsaXQoIi4iKVsxXTtjb25zdCBjZT1sPDAmJjA9PT1aLmluZGV4T2YoIi0iKTtyZXR1cm4gYSYmKGNlJiYoWj1aLnNsaWNlKDEpKSxmdW5jdGlvbiBQb3QoYyxsKXtsZXQgYT1bXSxkPTA7Zm9yKGxldCBoPWM7aD4wO2gtLSlkPT09'@;
put 'bCYmKGEudW5zaGlmdChoKSxkPTApLGQrKztyZXR1cm4gYX0oWi5sZW5ndGgsTSkuZm9yRWFjaCgoRWUsQmUpPT57Wj1aLnNsaWNlKDAsRWUrQmUpK3YrWi5zbGljZShFZStCZSl9KSxjZSYmKFo9YC0ke1p9YCkpLEQ9bmU/WitoK25lOlosRH0oTW4sZixydCxhLGQpLChiZXx8dm4pJiYoTW49'@;
put 'ZnVuY3Rpb24gSG90KGMsbCl7cmV0dXJuIGMrbH0oTW4sdG4pKSwoSnR8fGY8MCkmJihNbj1mdW5jdGlvbiBOb3QoYyxsLGEpe3JldHVybiAwPT09bD9jOjA9PStjP2MucmVwbGFjZSgiLSIsIiIpOmw+MD9gKyR7Y31gOiJzaWduIj09PWE/YzpgKCR7Yy5yZXBsYWNlKCItIiwiIil9KWB9KE1u'@;
put 'LGYsZHQpKSxNbn1mdW5jdGlvbiBPXyhjLGwpe2lmKCFjKXJldHVybiBsO2xldCBhPU9iamVjdC5rZXlzKGMpO3JldHVybiAxPT09YS5sZW5ndGgmJiJvdXRwdXQiPT09YVswXT9sOmN9Y29uc3QgQWc9bjRlO2Z1bmN0aW9uIGk0ZShjLGwsYSl7bGV0IGQ9bmV3IEFnKGMuX3ZhbHVlKSxoPWw7'@;
put 'cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBBZyhoKSxjLl92YWx1ZT1kLm1pbnVzKGgpLnRvTnVtYmVyKCksY31jb25zdCBWcD1RWCgpLEtvdD1xWCgpLHFvdD0oYz0+KHtsb2FkTGFuZ3VhZ2VzSW5Ob2RlOmw9PmZ1bmN0aW9uIHBvdChjLGwpe2MuZm9yRWFjaChh'@;
put 'PT57bGV0IGQ7dHJ5e2Q9ZnVuY3Rpb24gZm90KGMpe3Rocm93IG5ldyBFcnJvcignQ291bGQgbm90IGR5bmFtaWNhbGx5IHJlcXVpcmUgIicrYysnIi4gUGxlYXNlIGNvbmZpZ3VyZSB0aGUgZHluYW1pY1JlcXVpcmVUYXJnZXRzIG9yL2FuZCBpZ25vcmVEeW5hbWljUmVxdWlyZXMgb3B0aW9u'@;
put 'IG9mIEByb2xsdXAvcGx1Z2luLWNvbW1vbmpzIGFwcHJvcHJpYXRlbHkgZm9yIHRoaXMgcmVxdWlyZSBjYWxsIHRvIHdvcmsuJyl9KGAuLi9sYW5ndWFnZXMvJHthfWApfWNhdGNoe2NvbnNvbGUuZXJyb3IoYFVuYWJsZSB0byBsb2FkICIke2F9Ii4gTm8gbWF0Y2hpbmcgbGFuZ3VhZ2UgZmls'@;
put 'ZSBmb3VuZC5gKX1kJiZsLnJlZ2lzdGVyTGFuZ3VhZ2UoZCl9KX0obCxjKX0pKShsdSksWG90PUpwZSgpO2xldCBvOT0oYz0+KHtmb3JtYXQ6KC4uLmwpPT5mdW5jdGlvbiB5b3QoYyxsPXt9LGEpe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmKGw9dm90LnBhcnNlRm9ybWF0KGwpKSwhbW90LnZh'@;
put 'bGlkYXRlRm9ybWF0KGwpKXJldHVybiJFUlJPUjogaW52YWxpZCBmb3JtYXQiO2xldCBoPWwucHJlZml4fHwiIixmPWwucG9zdGZpeHx8IiIsdj1mdW5jdGlvbiBfb3QoYyxsLGEpe3N3aXRjaChsLm91dHB1dCl7Y2FzZSJjdXJyZW5jeSI6cmV0dXJuIGZ1bmN0aW9uIEFvdChjLGwsYSl7Y29u'@;
put 'c3QgZD1hLmN1cnJlbnRDdXJyZW5jeSgpO2xldCB2LGg9T2JqZWN0LmFzc2lnbih7fSxsKSxmPU9iamVjdC5hc3NpZ24oe30sYVQsaCksTT0iIixEPSEhZi50b3RhbExlbmd0aHx8ISFmLmZvcmNlQXZlcmFnZXx8Zi5hdmVyYWdlLFo9aC5jdXJyZW5jeVBvc2l0aW9ufHxkLnBvc2l0aW9uLG5l'@;
put 'PWguY3VycmVuY3lTeW1ib2x8fGQuc3ltYm9sO2NvbnN0IGNlPXZvaWQgMCE9PWYuc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeT9mLnNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6Zi5zcGFjZVNlcGFyYXRlZDt2b2lkIDA9PT1oLmxvd1ByZWNpc2lvbiYmKGgubG93UHJlY2lzaW9uPSExKSxjZSYmKE09'@;
put 'IiAiKSwiaW5maXgiPT09WiYmKHY9TStuZStNKTtsZXQgYmU9c1Qoe2luc3RhbmNlOmMscHJvdmlkZWRGb3JtYXQ6aCxzdGF0ZTphLGRlY2ltYWxTZXBhcmF0b3I6dn0pO3JldHVybiJwcmVmaXgiPT09WiYmKGJlPWMuX3ZhbHVlPDAmJiJzaWduIj09PWYubmVnYXRpdmU/YC0ke019JHtuZX0k'@;
put 'e2JlLnNsaWNlKDEpfWA6Yy5fdmFsdWU+MCYmZi5mb3JjZVNpZ24/YCske019JHtuZX0ke2JlLnNsaWNlKDEpfWA6bmUrTStiZSksKCFafHwicG9zdGZpeCI9PT1aKSYmKE09IWYuc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb24mJkQ/IiI6TSxiZT1iZStNK25lKSxiZX0oYyxsPU9fKGwsZjMu'@;
put 'Y3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCgpKSxmMyk7Y2FzZSJwZXJjZW50IjpyZXR1cm4gZnVuY3Rpb24gVG90KGMsbCxhLGQpe2xldCBoPWwucHJlZml4U3ltYm9sLGY9c1Qoe2luc3RhbmNlOmQoMTAwKmMuX3ZhbHVlKSxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmF9KSx2PU9iamVj'@;
put 'dC5hc3NpZ24oe30sYVQsbCk7cmV0dXJuIGg/YCUke3Yuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7Zn1gOmAke2Z9JHt2LnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0lYH0oYyxsPU9fKGwsZjMuY3VycmVudFBlcmNlbnRhZ2VEZWZhdWx0Rm9ybWF0KCkpLGYzLGEpO2Nhc2UiYnl0ZSI6cmV0dXJu'@;
put 'IGZ1bmN0aW9uIE1vdChjLGwsYSxkKXtsZXQgaD1sLmJhc2V8fCJiaW5hcnkiLGY9T2JqZWN0LmFzc2lnbih7fSxhVCxsKTtjb25zdHtiaW5hcnlTdWZmaXhlczp2LGRlY2ltYWxTdWZmaXhlczpNfT1hLmN1cnJlbnRCeXRlcygpO2xldCBaPXtnZW5lcmFsOntzY2FsZToxMDI0LHN1ZmZpeGVz'@;
put 'Ok18fFdQLG1hcmtlcjoiYmQifSxiaW5hcnk6e3NjYWxlOjEwMjQsc3VmZml4ZXM6dnx8cjRlLG1hcmtlcjoiYiJ9LGRlY2ltYWw6e3NjYWxlOjFlMyxzdWZmaXhlczpNfHxXUCxtYXJrZXI6ImQifX1baF0se3ZhbHVlOm5lLHN1ZmZpeDpjZX09WVAoYy5fdmFsdWUsWi5zdWZmaXhlcyxaLnNj'@;
put 'YWxlKTtyZXR1cm5gJHtzVCh7aW5zdGFuY2U6ZChuZSkscHJvdmlkZWRGb3JtYXQ6bCxzdGF0ZTphLGRlZmF1bHRzOmEuY3VycmVudEJ5dGVEZWZhdWx0Rm9ybWF0KCl9KX0ke2Yuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7Y2V9YH0oYyxsPU9fKGwsZjMuY3VycmVudEJ5dGVEZWZhdWx0Rm9y'@;
put 'bWF0KCkpLGYzLGEpO2Nhc2UidGltZSI6cmV0dXJuIGw9T18obCxmMy5jdXJyZW50VGltZURlZmF1bHRGb3JtYXQoKSksZnVuY3Rpb24gRW90KGMpe2xldCBsPU1hdGguZmxvb3IoYy5fdmFsdWUvNjAvNjApLGE9TWF0aC5mbG9vcigoYy5fdmFsdWUtNjAqbCo2MCkvNjApLGQ9TWF0aC5yb3Vu'@;
put 'ZChjLl92YWx1ZS02MCpsKjYwLTYwKmEpO3JldHVybmAke2x9OiR7YTwxMD8iMCI6IiJ9JHthfToke2Q8MTA/IjAiOiIifSR7ZH1gfShjKTtjYXNlIm9yZGluYWwiOnJldHVybiBmdW5jdGlvbiB4b3QoYyxsLGEpe2xldCBkPWEuY3VycmVudE9yZGluYWwoKSxoPU9iamVjdC5hc3NpZ24oe30s'@;
put 'YVQsbCksZj1zVCh7aW5zdGFuY2U6Yyxwcm92aWRlZEZvcm1hdDpsLHN0YXRlOmF9KSx2PWQoYy5fdmFsdWUpO3JldHVybmAke2Z9JHtoLnNwYWNlU2VwYXJhdGVkPyIgIjoiIn0ke3Z9YH0oYyxsPU9fKGwsZjMuY3VycmVudE9yZGluYWxEZWZhdWx0Rm9ybWF0KCkpLGYzKTtkZWZhdWx0OnJl'@;
put 'dHVybiBzVCh7aW5zdGFuY2U6Yyxwcm92aWRlZEZvcm1hdDpsLG51bWJybzphfSl9fShjLGwsYSk7cmV0dXJuIHY9ZnVuY3Rpb24gVm90KGMsbCl7cmV0dXJuIGwrY30odixoKSx2PWZ1bmN0aW9uIEJvdChjLGwpe3JldHVybiBjK2x9KHYsZiksdn0oLi4ubCxjKSxnZXRCeXRlVW5pdDooLi4u'@;
put 'bCk9PmZ1bmN0aW9uIFNvdChjKXtsZXQgbD1lSi5nZW5lcmFsO3JldHVybiBZUChjLl92YWx1ZSxsLnN1ZmZpeGVzLGwuc2NhbGUpLnN1ZmZpeH0oLi4ubCxjKSxnZXRCaW5hcnlCeXRlVW5pdDooLi4ubCk9PmZ1bmN0aW9uIENvdChjKXtsZXQgbD1lSi5iaW5hcnk7cmV0dXJuIFlQKGMuX3Zh'@;
put 'bHVlLGwuc3VmZml4ZXMsbC5zY2FsZSkuc3VmZml4fSguLi5sLGMpLGdldERlY2ltYWxCeXRlVW5pdDooLi4ubCk9PmZ1bmN0aW9uIHdvdChjKXtsZXQgbD1lSi5kZWNpbWFsO3JldHVybiBZUChjLl92YWx1ZSxsLnN1ZmZpeGVzLGwuc2NhbGUpLnN1ZmZpeH0oLi4ubCxjKSxmb3JtYXRPckRl'@;
put 'ZmF1bHQ6T199KSkobHUpLGE5PShjPT4oe2FkZDoobCxhKT0+ZnVuY3Rpb24gem90KGMsbCxhKXtsZXQgZD1uZXcgQWcoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IEFnKGgpLGMuX3ZhbHVlPWQucGx1cyhoKS50b051bWJlcigpLGN9KGws'@;
put 'YSxjKSxzdWJ0cmFjdDoobCxhKT0+aTRlKGwsYSxjKSxtdWx0aXBseToobCxhKT0+ZnVuY3Rpb24gVW90KGMsbCxhKXtsZXQgZD1uZXcgQWcoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IEFnKGgpLGMuX3ZhbHVlPWQudGltZXMoaCkudG9O'@;
put 'dW1iZXIoKSxjfShsLGEsYyksZGl2aWRlOihsLGEpPT5mdW5jdGlvbiBab3QoYyxsLGEpe2xldCBkPW5ldyBBZyhjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1uZXcgQWcoaCksYy5fdmFsdWU9ZC5kaXZpZGVkQnkoaCkudG9OdW1iZXIoKSxjfShs'@;
put 'LGEsYyksc2V0OihsLGEpPT5mdW5jdGlvbiBXb3QoYyxsLGEpe2xldCBkPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihkPWwuX3ZhbHVlKSxjLl92YWx1ZT1kLGN9KGwsYSxjKSxkaWZmZXJlbmNlOihsLGEpPT5mdW5jdGlvbiBZb3QoYyxsLGEpe2xldCBkPWEoYy5fdmFsdWUpO3JldHVybiBp'@;
put 'NGUoZCxsLGEpLE1hdGguYWJzKGQuX3ZhbHVlKX0obCxhLGMpLEJpZ051bWJlcjpBZ30pKShsdSk7Y29uc3QgSm90PVhYO2NsYXNzIG80ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl92YWx1ZT1sfWNsb25lKCl7cmV0dXJuIGx1KHRoaXMuX3ZhbHVlKX1mb3JtYXQobD17fSl7cmV0dXJuIG85LmZv'@;
put 'cm1hdCh0aGlzLGwpfWZvcm1hdEN1cnJlbmN5KGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgbCYmKGw9Sm90LnBhcnNlRm9ybWF0KGwpKSwobD1vOS5mb3JtYXRPckRlZmF1bHQobCxWcC5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0KCkpKS5vdXRwdXQ9ImN1cnJlbmN5IixvOS5mb3Jt'@;
put 'YXQodGhpcyxsKX1mb3JtYXRUaW1lKGw9e30pe3JldHVybiBsLm91dHB1dD0idGltZSIsbzkuZm9ybWF0KHRoaXMsbCl9YmluYXJ5Qnl0ZVVuaXRzKCl7cmV0dXJuIG85LmdldEJpbmFyeUJ5dGVVbml0KHRoaXMpfWRlY2ltYWxCeXRlVW5pdHMoKXtyZXR1cm4gbzkuZ2V0RGVjaW1hbEJ5dGVV'@;
put 'bml0KHRoaXMpfWJ5dGVVbml0cygpe3JldHVybiBvOS5nZXRCeXRlVW5pdCh0aGlzKX1kaWZmZXJlbmNlKGwpe3JldHVybiBhOS5kaWZmZXJlbmNlKHRoaXMsbCl9YWRkKGwpe3JldHVybiBhOS5hZGQodGhpcyxsKX1zdWJ0cmFjdChsKXtyZXR1cm4gYTkuc3VidHJhY3QodGhpcyxsKX1tdWx0'@;
put 'aXBseShsKXtyZXR1cm4gYTkubXVsdGlwbHkodGhpcyxsKX1kaXZpZGUobCl7cmV0dXJuIGE5LmRpdmlkZSh0aGlzLGwpfXNldChsKXtyZXR1cm4gYTkuc2V0KHRoaXMsYTRlKGwpKX12YWx1ZSgpe3JldHVybiB0aGlzLl92YWx1ZX12YWx1ZU9mKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5j'@;
put 'dGlvbiBhNGUoYyl7bGV0IGw9YztyZXR1cm4gbHUuaXNOdW1icm8oYyk/bD1jLl92YWx1ZToic3RyaW5nIj09dHlwZW9mIGM/bD1sdS51bmZvcm1hdChjKTppc05hTihjKSYmKGw9TmFOKSxsfWZ1bmN0aW9uIGx1KGMpe3JldHVybiBuZXcgbzRlKGE0ZShjKSl9bHUudmVyc2lvbj0iMi41LjAi'@;
put 'LGx1LmlzTnVtYnJvPWZ1bmN0aW9uKGMpe3JldHVybiBjIGluc3RhbmNlb2YgbzRlfSxsdS5sYW5ndWFnZT1WcC5jdXJyZW50TGFuZ3VhZ2UsbHUucmVnaXN0ZXJMYW5ndWFnZT1WcC5yZWdpc3Rlckxhbmd1YWdlLGx1LnNldExhbmd1YWdlPVZwLnNldExhbmd1YWdlLGx1Lmxhbmd1YWdlcz1W'@;
put 'cC5sYW5ndWFnZXMsbHUubGFuZ3VhZ2VEYXRhPVZwLmxhbmd1YWdlRGF0YSxsdS56ZXJvRm9ybWF0PVZwLnNldFplcm9Gb3JtYXQsbHUuZGVmYXVsdEZvcm1hdD1WcC5jdXJyZW50RGVmYXVsdHMsbHUuc2V0RGVmYXVsdHM9VnAuc2V0RGVmYXVsdHMsbHUuZGVmYXVsdEN1cnJlbmN5Rm9ybWF0'@;
put 'PVZwLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQsbHUudmFsaWRhdGU9S290LnZhbGlkYXRlLGx1LmxvYWRMYW5ndWFnZXNJbk5vZGU9cW90LmxvYWRMYW5ndWFnZXNJbk5vZGUsbHUudW5mb3JtYXQ9WG90LnVuZm9ybWF0LGx1LkJpZ051bWJlcj1hOS5CaWdOdW1iZXI7dmFyIEdtPUtp'@;
put 'dChsdSk7ZnVuY3Rpb24gczRlKGMsbCl7aWYobTEoYykpe2NvbnN0IGE9bC5udW1lcmljRm9ybWF0LGQ9YSYmYS5jdWx0dXJlfHwiLSIsaD1hJiZhLnBhdHRlcm47aWYodHlwZW9mIGQ8InUiJiYhR20ubGFuZ3VhZ2VzKClbZF0pe2NvbnN0IGY9ZC5yZXBsYWNlKCItIiwiIiksdj1HbS5hbGxM'@;
put 'YW5ndWFnZXM/R20uYWxsTGFuZ3VhZ2VzW2RdOkdtW2ZdO3YmJkdtLnJlZ2lzdGVyTGFuZ3VhZ2Uodil9R20uc2V0TGFuZ3VhZ2UoZCksYz1HbShjKS5mb3JtYXQoaHx8IjAiKX1yZXR1cm4gY31mdW5jdGlvbiB0SihjLGwsYSxkLGgsZix2KXtsZXQgTT1mO2lmKG0xKE0pKXtsZXQgWj1bXTtp'@;
put 'ZihBcnJheS5pc0FycmF5KHYuY2xhc3NOYW1lKSlaPXYuY2xhc3NOYW1lO2Vsc2V7dmFyIEQ7Y29uc3QgbmU9bnVsbCE9PShEPXYuY2xhc3NOYW1lKSYmdm9pZCAwIT09RD9EOiIiO25lLmxlbmd0aCYmKFo9bmUuc3BsaXQoIiAiKSl9TT1zNGUoTSx2KSxaLmluZGV4T2YoImh0TGVmdCIpPDAm'@;
put 'JlouaW5kZXhPZigiaHRDZW50ZXIiKTwwJiZaLmluZGV4T2YoImh0UmlnaHQiKTwwJiZaLmluZGV4T2YoImh0SnVzdGlmeSIpPDAmJloucHVzaCgiaHRSaWdodCIpLFouaW5kZXhPZigiaHROdW1lcmljIik8MCYmWi5wdXNoKCJodE51bWVyaWMiKSx2LmNsYXNzTmFtZT1aLmpvaW4oIiAiKSxs'@;
put 'LmRpcj0ibHRyIn1FZyhjLGwsYSxkLGgsTSx2KX1mdW5jdGlvbiBuSihjLGwsYSxkLGgsZix2KXtFZy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSk7Y29uc3QgRD12Lmhhc2hTeW1ib2x8fCIqIjtsZXQgWj0iIjskbygodi5oYXNoTGVuZ3RofHxsLmlubmVySFRNTC5sZW5ndGgpLTEsKCk9'@;
put 'PntaKz1EfSksQjcobCxaKX1mdW5jdGlvbiBySihjLGwsYSxkLGgsZix2KXtFZy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9ZnVuY3Rpb24gaUooYyxsLGEsZCxoLGYsdil7RWcuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGwuZGlyPSJsdHIifWZ1bmN0aW9uIGxUKGMsbCl7bGV0'@;
put 'IGE9YztudWxsPT1hJiYoYT0iIiksdGhpcy5hbGxvd0VtcHR5JiYiIj09PWE/bCghMCk6dGhpcy5zdHJpY3QmJnRoaXMuc291cmNlPyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNvdXJjZT90aGlzLnNvdXJjZShhLGw0ZShhLGwpKTpsNGUoYSxsKSh0aGlzLnNvdXJjZSk6bCghMCl9ZnVuY3Rp'@;
put 'b24gbDRlKGMsbCl7Y29uc3QgYT1jO3JldHVybiBmdW5jdGlvbihkKXtsZXQgaD0hMTtmb3IobGV0IGY9MCx2PWQubGVuZ3RoO2Y8djtmKyspaWYoYT09PWRbZl0pe2g9ITA7YnJlYWt9bChoKX19ZnVuY3Rpb24gYzRlKGMpe2NvbnN0IGw9bmV3IERhdGUoYyk7cmV0dXJuIGlzTmFOKG5ldyBE'@;
put 'YXRlKGAke2N9VDAwOjAwYCkuZ2V0RGF0ZSgpKT9sOm5ldyBEYXRlKGwuZ2V0VGltZSgpKzZlNCpsLmdldFRpbWV6b25lT2Zmc2V0KCkpfWZ1bmN0aW9uICRQKGMsbCl7Y29uc3QgYT1pZmUoTnBlLHRoaXMuaW5zdGFuY2UpO2xldCBkPWMsaD0hMDtudWxsPT1kJiYoZD0iIik7bGV0IGY9T2Eo'@;
put 'ZCx0aGlzLmRhdGVGb3JtYXR8fGEuZGVmYXVsdERhdGVGb3JtYXQsITApLmlzVmFsaWQoKSx2PU9hKG5ldyBEYXRlKGQpKS5pc1ZhbGlkKCl8fGY7aWYodGhpcy5hbGxvd0VtcHR5JiYiIj09PWQmJih2PSEwLGY9ITApLHZ8fChoPSExKSwhdiYmZiYmKGg9ITApLHYmJiFmKWlmKCEwPT09dGhp'@;
put 'cy5jb3JyZWN0Rm9ybWF0KXtjb25zdCBNPWZ1bmN0aW9uIHNhdChjLGwpe2NvbnN0IGE9T2EoYzRlKGMpKSxkPU9hKGMsbCksaD1jLnNlYXJjaCgvW0EtWmEtel0vZyk+LTE7bGV0IGY7cmV0dXJuIGY9YS5pc1ZhbGlkKCkmJmEuZm9ybWF0KCJ4Iik9PT1kLmZvcm1hdCgieCIpfHwhZC5pc1Zh'@;
put 'bGlkKCl8fGg/YTpkLGYuZm9ybWF0KGwpfShkLHRoaXMuZGF0ZUZvcm1hdCk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKHRoaXMudmlzdWFsUm93LHRoaXMudmlzdWFsQ29sLE0sImRhdGVWYWxpZGF0b3IiKSxoPSEwfWVsc2UgaD0hMTtsKGgpfWZ1bmN0aW9uIG9KKGMsbCl7bFQuYXBw'@;
put 'bHkodGhpcyxbYyxsXSl9ZnVuY3Rpb24gYUooYyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSxsKCEoIXRoaXMuYWxsb3dFbXB0eXx8IiIhPT1hKXx8IiIhPT1hJiZtMShjKSl9dEouUkVOREVSRVJfVFlQRT0ibnVtZXJpYyIsbkouUkVOREVSRVJfVFlQRT0icGFzc3dvcmQiLHJKLlJFTkRF'@;
put 'UkVSX1RZUEU9InNlbGVjdCIsaUouUkVOREVSRVJfVFlQRT0idGltZSIsbFQuVkFMSURBVE9SX1RZUEU9ImF1dG9jb21wbGV0ZSIsJFAuVkFMSURBVE9SX1RZUEU9ImRhdGUiLG9KLlZBTElEQVRPUl9UWVBFPSJkcm9wZG93biIsYUouVkFMSURBVE9SX1RZUEU9Im51bWVyaWMiO2NvbnN0IHVh'@;
put 'dD1bIllZWVktTU0tRERUSEg6bW06c3MuU1NTWiIsIlgiLCJ4Il07ZnVuY3Rpb24gS1AoYyxsKXtjb25zdCBhPXRoaXMudGltZUZvcm1hdHx8Img6bW06c3MgYSI7bGV0IGQ9ITAsaD1jO251bGw9PT1oJiYoaD0iIiksaD0vXlxkezMsfSQvLnRlc3QoaCk/cGFyc2VJbnQoaCwxMCk6aDtjb25z'@;
put 'dCBmPS9eXGR7MSwyfSQvLnRlc3QoaCk7ZiYmKGgrPSI6MDAiKTtjb25zdCB2PU9hKGgsdWF0LCEwKS5pc1ZhbGlkKCk/T2EoaCk6T2EoaCxhKTtsZXQgTT12LmlzVmFsaWQoKSxEPU9hKGgsYSwhMCkuaXNWYWxpZCgpJiYhZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09aCYmKE09ITAsRD0h'@;
put 'MCksTXx8KGQ9ITEpLCFNJiZEJiYoZD0hMCksTSYmIUQpaWYoITA9PT10aGlzLmNvcnJlY3RGb3JtYXQpe2NvbnN0IFo9di5mb3JtYXQoYSk7dGhpcy5pbnN0YW5jZS5zZXREYXRhQXRDZWxsKHRoaXMudmlzdWFsUm93LHRoaXMudmlzdWFsQ29sLFosInRpbWVWYWxpZGF0b3IiKSxkPSEwfWVs'@;
put 'c2UgZD0hMTtsKGQpfUtQLlZBTElEQVRPUl9UWVBFPSJ0aW1lIjtjb25zdCBmYXQ9e0NFTExfVFlQRToiYXV0b2NvbXBsZXRlIixlZGl0b3I6TFgscmVuZGVyZXI6SV8sdmFsaWRhdG9yOmxUfSxwYXQ9e0NFTExfVFlQRToiY2hlY2tib3giLGVkaXRvcjpScGUscmVuZGVyZXI6Wlh9O2Z1bmN0'@;
put 'aW9uIHU0ZShjLGwsYSxkLGgsZix2KXtJXy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSl9dTRlLlJFTkRFUkVSX1RZUEU9ImRhdGUiO2NvbnN0IG1hdD17Q0VMTF9UWVBFOiJkYXRlIixlZGl0b3I6QnBlLHJlbmRlcmVyOnU0ZSx2YWxpZGF0b3I6JFB9LHZhdD17Q0VMTF9UWVBFOiJkcm9w'@;
put 'ZG93biIsZWRpdG9yOmpwZSxyZW5kZXJlcjpVWCx2YWxpZGF0b3I6b0osZmlsdGVyOiExLHN0cmljdDohMH0sYmF0PXtDRUxMX1RZUEU6ImhhbmRzb250YWJsZSIsZWRpdG9yOkFYLHJlbmRlcmVyOllYfSx5YXQ9e0NFTExfVFlQRToibnVtZXJpYyIsZWRpdG9yOnpwZSxyZW5kZXJlcjp0Six2'@;
put 'YWxpZGF0b3I6YUosZGF0YVR5cGU6Im51bWJlciJ9LF9hdD17Q0VMTF9UWVBFOiJwYXNzd29yZCIsZWRpdG9yOlVwZSxyZW5kZXJlcjpuSixjb3B5YWJsZTohMX0sd2F0PXtDRUxMX1RZUEU6InNlbGVjdCIsZWRpdG9yOldwZSxyZW5kZXJlcjpySn0sQ2F0PXtDRUxMX1RZUEU6InRpbWUiLGVk'@;
put 'aXRvcjpZcGUscmVuZGVyZXI6aUosdmFsaWRhdG9yOktQfTtmdW5jdGlvbiBkNGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFBfKGMs'@;
put 'bCxhKXtyZXR1cm4obD1mdW5jdGlvbiBFYXQoYyl7dmFyIGw9ZnVuY3Rpb24gVGF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi'@;
put 'b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw'@;
put 'ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBGXyhjLGwpe3JldHVybiBjLmdldChoNGUoYyxsKSl9ZnVuY3Rpb24gaDRlKGMs'@;
put 'bCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBmNGU9bmV3IE1hcChbWyJw'@;
put 'bHVnaW4iLGZ1bmN0aW9uIHNYZShjKXtyZXR1cm4hIURFKGMpfV0sWyJjZWxsLXR5cGUiLFgzZV0sWyJlZGl0b3IiLHJmZV0sWyJyZW5kZXJlciIsZ2ZlXSxbInZhbGlkYXRvciIsbWZlXV0pLHA0ZT1TeW1ib2woIm1haW5TZXR0aW5nIikscVA9W107bGV0IHM5PW51bGw7dmFyIGw5PW5ldyBX'@;
put 'ZWFrTWFwLGc0ZT1uZXcgV2Vha1NldDtjbGFzcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYmFzZSJ9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bdGhpcy5QTFVHSU5fS0VZXX1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57fX1jb25zdHJ1'@;
put 'Y3RvcihsKXsoZnVuY3Rpb24gTWF0KGMsbCl7ZDRlKGMsbCksbC5hZGQoYyl9KSh0aGlzLGc0ZSksUF8odGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgTjIodGhpcykpLFBfKHRoaXMsInBsdWdpbk5hbWUiLG51bGwpLFBfKHRoaXMsInBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcyIsW10pLFBf'@;
put 'KHRoaXMsImlzUGx1Z2luc1JlYWR5IiwhMSksUF8odGhpcywiZW5hYmxlZCIsITEpLFBfKHRoaXMsImluaXRpYWxpemVkIiwhMSksZnVuY3Rpb24geGF0KGMsbCxhKXtkNGUoYyxsKSxsLnNldChjLGEpfSh0aGlzLGw5LHt9KSxUcCh0aGlzLCJob3QiLGwse3dyaXRhYmxlOiExfSksczk9bnVs'@;
put 'bCx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsKCk9PnRoaXMub25BZnRlclBsdWdpbnNJbml0aWFsaXplZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixhPT50aGlzLm9uVXBkYXRlU2V0dGluZ3MoYSkpLHRoaXMuaG90LmFkZEhv'@;
put 'b2soImJlZm9yZUluaXQiLCgpPT50aGlzLmluaXQoKSl9aW5pdCgpe3RoaXMucGx1Z2luTmFtZT10aGlzLmhvdC5nZXRQbHVnaW5OYW1lKHRoaXMpO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fREVQUyxhPUFycmF5LmlzQXJyYXkobCk/bDpbXTtpZihhLmxlbmd0aD4wKXtjb25z'@;
put 'dCBoPVtdO2lmKGEuZm9yRWFjaChmPT57Y29uc3RbdixNXT1mLnNwbGl0KCI6Iik7aWYoIWY0ZS5oYXModikpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBsdWdpbiBkZXBlbmRlbmN5IHR5cGUgIiR7dn0iIHdhcyBmb3VuZC5gKTtmNGUuZ2V0KHYpKE0pfHxoLnB1c2goYCAtICR7TX0gKCR7'@;
put 'dn0pYCl9KSxoLmxlbmd0aD4wKXtjb25zdCBmPVtgVGhlICR7dGhpcy5wbHVnaW5OYW1lfSBwbHVnaW4gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBtb2R1bGVzOlxuYCxgJHtoLmpvaW4oIlxuIil9XG5gXS5qb2luKCIiKTtxUC5wdXNoKGYpfX1pZihzOXx8KHM5PUokKCkpLHM5LmluZGV4T2Yo'@;
put 'dGhpcy5wbHVnaW5OYW1lKT49MCYmczkuc3BsaWNlKHM5LmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKSwxKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiLCgpPT57dGhpcy5pc0VuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1Z2lu'@;
put 'KCl9KSwwPT09czkubGVuZ3RoKXtpZihxUC5sZW5ndGg+MCl7Y29uc3QgaD1bYCR7cVAuam9pbigiXG4iKX1cbmAsIllvdSBoYXZlIHRvIGltcG9ydCBhbmQgcmVnaXN0ZXIgdGhlbSBtYW51YWxseS4iXS5qb2luKCIiKTt0aHJvdyBxUC5sZW5ndGg9MCxuZXcgRXJyb3IoaCl9dGhpcy5ob3Qu'@;
put 'cnVuSG9va3MoImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIil9dGhpcy5pbml0aWFsaXplZD0hMH1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWQ9ITB9ZGlzYWJsZVBsdWdpbigpe3ZhciBsO251bGw9PT0obD10aGlzLmV2ZW50TWFuYWdlcil8fHZvaWQgMD09PWx8fGwuY2xlYXIoKSx0aGlz'@;
put 'LmNsZWFySG9va3MoKSx0aGlzLmVuYWJsZWQ9ITF9Z2V0U2V0dGluZyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fS0VZXTtpZih2b2lkIDA9PT1sKXJldHVybiBhO2NvbnN0IGQ9dGhpcy5jb25zdHJ1Y3Rvci5ERUZBVUxUX1NFVFRJ'@;
put 'TkdTO3ZhciBoLGY7cmV0dXJuKEFycmF5LmlzQXJyYXkoYSl8fHFhKGEpKSYmZFtwNGVdPT09bD9BcnJheS5pc0FycmF5KGEpP2E6bnVsbCE9PShoPWFbbF0pJiZ2b2lkIDAhPT1oP2g6ZFtsXTpxYShhKSYmbnVsbCE9PShmPWFbbF0pJiZ2b2lkIDAhPT1mP2Y6ZFtsXX1hZGRIb29rKGwsYSxk'@;
put 'KXtGXyhsOSx0aGlzKVtsXT1GXyhsOSx0aGlzKVtsXXx8W107Y29uc3QgaD1GXyhsOSx0aGlzKVtsXTt0aGlzLmhvdC5hZGRIb29rKGwsYSxkKSxoLnB1c2goYSksRl8obDksdGhpcylbbF09aH1yZW1vdmVIb29rcyhsKXtZbihGXyhsOSx0aGlzKVtsXXx8W10sYT0+e3RoaXMuaG90LnJlbW92'@;
put 'ZUhvb2sobCxhKX0pfWNsZWFySG9va3MoKXtjb25zdCBsPUZfKGw5LHRoaXMpO1hhKGwsKGEsZCk9PnRoaXMucmVtb3ZlSG9va3MoZCkpLGwubGVuZ3RoPTB9Y2FsbE9uUGx1Z2luc1JlYWR5KGwpe3RoaXMuaXNQbHVnaW5zUmVhZHk/bCgpOnRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJh'@;
put 'Y2tzLnB1c2gobCl9b25BZnRlclBsdWdpbnNJbml0aWFsaXplZCgpe1luKHRoaXMucGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzLGw9PmwoKSksdGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MubGVuZ3RoPTAsdGhpcy5pc1BsdWdpbnNSZWFkeT0hMH1vblVwZGF0ZVNldHRpbmdz'@;
put 'KGwpe2NvbnN0IGE9aDRlKGc0ZSx0aGlzLGthdCkuY2FsbCh0aGlzLGwpO3RoaXMuaXNFbmFibGVkJiYodGhpcy5lbmFibGVkJiYhdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5kaXNhYmxlUGx1Z2luKCksIXRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4o'@;
put 'KSx0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJmEmJnRoaXMudXBkYXRlUGx1Z2luKGwpKX11cGRhdGVQbHVnaW4oKXt9ZGVzdHJveSgpe3ZhciBsO251bGw9PT0obD10aGlzLmV2ZW50TWFuYWdlcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHRoaXMuY2xlYXJIb29rcygpLFhh'@;
put 'KHRoaXMsKGEsZCk9PnsiaG90IiE9PWQmJih0aGlzW2RdPW51bGwpfSksZGVsZXRlIHRoaXMudCxkZWxldGUgdGhpcy5ob3R9fWZ1bmN0aW9uIGthdChjKXtpZighYylyZXR1cm4hMTtjb25zdCBsPXRoaXMuY29uc3RydWN0b3IuU0VUVElOR19LRVlTO2lmKCJib29sZWFuIj09dHlwZW9mIGwp'@;
put 'cmV0dXJuIGw7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspaWYodm9pZCAwIT09Y1tsW2FdXSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBjOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRGF0KGMpe3ZhciBsPWZ1bmN0aW9uIElhdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8'@;
put 'IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw'@;
put 'cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln'@;
put 'dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3Qgc0o9Y2xhc3MgUmF0e2NvbnN0cnVjdG9yKGwpe2M5KHRoaXMsImhvdCIsbnVsbCksYzkodGhpcywiY29udGFpbmVyIixudWxsKSxjOSh0aGlzLCJpbmplY3RlZCIsITEpLGM5KHRoaXMsInJvd3MiLFtdKSxjOSh0aGlzLCJj'@;
put 'b2x1bW5zIixbXSksYzkodGhpcywic2FtcGxlcyIsbnVsbCksYzkodGhpcywic2V0dGluZ3MiLHt1c2VIZWFkZXJzOiEwfSksdGhpcy5ob3Q9bH1hZGRSb3cobCxhKXtpZih0aGlzLmNvbHVtbnMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRG9lc24ndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lv'@;
put 'bmFsIHRhYmxlIik7dGhpcy5yb3dzLmxlbmd0aHx8KHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSkpO2NvbnN0IGQ9e3JvdzpsfTt0aGlzLnJvd3MucHVzaChkKSx0aGlzLnNhbXBsZXM9YSx0aGlzLnRhYmxlPXRoaXMu'@;
put 'Y3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1lKSx0aGlzLnRhYmxlLmNvbEdyb3VwLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sR3JvdXBzQ29sKGwpKSx0aGlzLnRhYmxlLnRyLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlUm93KGwpKSwwPT09bCYmVGkodGhpcy50YWJsZS50'@;
put 'YWJsZSwiaHRHaG9zdFRhYmxlRmlyc3RSb3ciKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWFkZENvbHVtbkhlYWRlcnNSb3cobCl7aWYobnVsbCE9dGhpcy5ob3QuZ2V0Q29sSGVhZGVy'@;
put 'KDApKXtjb25zdCBkPXtyb3c6LTF9O3RoaXMucm93cy5wdXNoKGQpLHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSksdGhpcy5zYW1wbGVzPWwsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxl'@;
put 'LmNsYXNzTmFtZSksdGhpcy50YWJsZS5jb2xHcm91cC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEdyb3Vwc0NvbCgpKSx0aGlzLmFwcGVuZENvbHVtbkhlYWRlcnNSb3coKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJs'@;
put 'ZT10aGlzLnRhYmxlLnRhYmxlfX1hZGRDb2x1bW4obCxhKXtpZih0aGlzLnJvd3MubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiRG9lc24ndCBzdXBwb3J0IG11bHRpLWRpbWVuc2lvbmFsIHRhYmxlIik7dGhpcy5jb2x1bW5zLmxlbmd0aHx8KHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29u'@;
put 'dGFpbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LmNsYXNzTmFtZSkpO2NvbnN0IGQ9e2NvbDpsfTt0aGlzLmNvbHVtbnMucHVzaChkKSx0aGlzLnNhbXBsZXM9YSx0aGlzLnRhYmxlPXRoaXMuY3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1lKSx0aGlzLmdldFNldHRpbmcoInVz'@;
put 'ZUhlYWRlcnMiKSYmbnVsbCE9PXRoaXMuaG90LmdldENvbEhlYWRlcihsKSYmdGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIobCx0aGlzLnRhYmxlLnRoLHZvaWQgMCwtMSksdGhpcy50YWJsZS50Qm9keS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbChsKSksdGhpcy5jb250YWluZXIu'@;
put 'Y29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1nZXRIZWlnaHRzKGwpe3RoaXMuaW5qZWN0ZWR8fHRoaXMuaW5qZWN0VGFibGUoKSxZbih0aGlzLnJvd3MsYT0+e2NvbnN0e2hlaWdodDpkfT1hLnRhYmxlLmdldEJvdW5k'@;
put 'aW5nQ2xpZW50UmVjdCgpO2woYS5yb3csTWF0aC5jZWlsKGQpKX0pfWdldFdpZHRocyhsKXt0aGlzLmluamVjdGVkfHx0aGlzLmluamVjdFRhYmxlKCksWW4odGhpcy5jb2x1bW5zLGE9Pntjb25zdHt3aWR0aDpkfT1hLnRhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2woYS5jb2wsTWF0'@;
put 'aC5jZWlsKGQpKX0pfXNldFNldHRpbmdzKGwpe3RoaXMuc2V0dGluZ3M9bH1zZXRTZXR0aW5nKGwsYSl7dGhpcy5zZXR0aW5nc3x8KHRoaXMuc2V0dGluZ3M9e30pLHRoaXMuc2V0dGluZ3NbbF09YX1nZXRTZXR0aW5ncygpe3JldHVybiB0aGlzLnNldHRpbmdzfWdldFNldHRpbmcobCl7cmV0'@;
put 'dXJuIHRoaXMuc2V0dGluZ3M/dGhpcy5zZXR0aW5nc1tsXTpudWxsfWNyZWF0ZUNvbEdyb3Vwc0NvbChsKXtjb25zdCBhPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmYS5hcHBlbmRDaGlsZCh0'@;
put 'aGlzLmNyZWF0ZUNvbEVsZW1lbnQoLTEsLTEpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChkPT57WW4oZC5zdHJpbmdzLGg9PnthLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudChoLmNvbCxsKSl9KX0pLGF9Y3JlYXRlUm93KGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhv'@;
put 'dCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmhvdC5oYXNSb3dIZWFkZXJzKCkmJih0aGlzLmhvdC52aWV3LmFwcGVuZFJvd0hlYWRlcihsLGgpLGQuYXBwZW5kQ2hpbGQoaCkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGY9'@;
put 'PntZbihmLnN0cmluZ3Msdj0+e2NvbnN0IE09di5jb2wsRD10aGlzLmhvdC5nZXRDZWxsTWV0YShsLE0pLFo9dGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKEQpLG5lPWEuY3JlYXRlRWxlbWVudCgidGQiKTtuZS5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxaKHRoaXMuaG90LG5lLGws'@;
put 'TSx0aGlzLmhvdC5jb2xUb1Byb3AoTSksdi52YWx1ZSxEKSxkLmFwcGVuZENoaWxkKG5lKX0pfSksZH1hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90LGE9bC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZD1bXTtpZih0aGlzLmhvdC5oYXNS'@;
put 'b3dIZWFkZXJzKCkpe2NvbnN0IGg9bC5jcmVhdGVFbGVtZW50KCJ0aCIpO2QucHVzaChbLTEsaF0pLGEuYXBwZW5kQ2hpbGQoaCl9dGhpcy5zYW1wbGVzLmZvckVhY2goaD0+e1luKGguc3RyaW5ncyxmPT57Y29uc3Qgdj1mLmNvbCxNPWwuY3JlYXRlRWxlbWVudCgidGgiKTtkLnB1c2goW3Ys'@;
put 'TV0pLGEuYXBwZW5kQ2hpbGQoTSl9KX0pLHRoaXMudGFibGUudEhlYWQuYXBwZW5kQ2hpbGQoYSksWW4oZCxoPT57Y29uc3RbZix2XT1oO3RoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGYsdil9KX1jcmVhdGVDb2wobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5j'@;
put 'cmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntZbihoLnN0cmluZ3MsZj0+e2NvbnN0IHY9Zi5yb3csTT10aGlzLmhvdC5nZXRDZWxsTWV0YSh2LGwpLEQ9dGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKE0pLFo9YS5jcmVhdGVFbGVtZW50KCJ0'@;
put 'ZCIpLG5lPWEuY3JlYXRlRWxlbWVudCgidHIiKTtaLnNldEF0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiLDEpLEQodGhpcy5ob3QsWix2LGwsdGhpcy5ob3QuY29sVG9Qcm9wKGwpLGYudmFsdWUsTSksbmUuYXBwZW5kQ2hpbGQoWiksZC5hcHBlbmRDaGlsZChuZSl9KX0pLGR9Y2xlYW4oKXt0aGlz'@;
put 'LnJvd3MubGVuZ3RoPTAsdGhpcy5yb3dzWy0xXT12b2lkIDAsdGhpcy5jb2x1bW5zLmxlbmd0aD0wLHRoaXMuc2FtcGxlcyYmdGhpcy5zYW1wbGVzLmNsZWFyKCksdGhpcy5zYW1wbGVzPW51bGwsdGhpcy5yZW1vdmVUYWJsZSgpfWluamVjdFRhYmxlKCl7dGhpcy5pbmplY3RlZHx8KCgoYXJn'@;
put 'dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpfHx0aGlzLmhvdC5yb290RWxlbWVudCkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIuZnJhZ21lbnQpLHRoaXMuaW5qZWN0ZWQ9ITApfXJlbW92ZVRhYmxlKCl7dGhpcy5pbmplY3RlZCYm'@;
put 'dGhpcy5jb250YWluZXIuY29udGFpbmVyLnBhcmVudE5vZGUmJih0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lci5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5pbmplY3RlZD0hMSl9Y3JlYXRlQ29sRWxlbWVu'@;
put 'dChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNvbCIpO2xldCBoPTA7YT49MCYmbD49MCYmKGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxsKS5jb2xzcGFuKTtsZXQgZj10aGlzLmhvdC5nZXRDb2xXaWR0aChsKTtpZihoPjEpZm9yKGxldCB2PWwr'@;
put 'MTt2PGwraDt2KyspZis9dGhpcy5ob3QuZ2V0Q29sV2lkdGgodik7cmV0dXJuIGQuc3R5bGUud2lkdGg9YCR7Zn1weGAsZH1jcmVhdGVUYWJsZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIjtjb25zdHtyb290RG9jdW1l'@;
put 'bnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgidGFibGUiKSxmPWEuY3JlYXRlRWxlbWVudCgidGhlYWQiKSx2PWEuY3JlYXRlRWxlbWVudCgidGJvZHkiKSxNPWEuY3JlYXRlRWxlbWVudCgiY29sZ3JvdXAiKSxEPWEuY3JlYXRl'@;
put 'RWxlbWVudCgidHIiKSxaPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5pc1ZlcnRpY2FsKCkmJmguYXBwZW5kQ2hpbGQoTSksdGhpcy5pc0hvcml6b250YWwoKSYmKEQuYXBwZW5kQ2hpbGQoWiksZi5hcHBlbmRDaGlsZChEKSxoLnN0eWxlLnRhYmxlTGF5b3V0PSJhdXRvIixo'@;
put 'LnN0eWxlLndpZHRoPSJhdXRvIiksaC5hcHBlbmRDaGlsZChmKSx0aGlzLmlzVmVydGljYWwoKSYmdi5hcHBlbmRDaGlsZChEKSxoLmFwcGVuZENoaWxkKHYpLFRpKGgsbCksZC5hcHBlbmRDaGlsZChoKSx7ZnJhZ21lbnQ6ZCx0YWJsZTpoLHRIZWFkOmYsdEJvZHk6dixjb2xHcm91cDpNLHRy'@;
put 'OkQsdGg6Wn19Y3JlYXRlQ29udGFpbmVyKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVt'@;
put 'ZW50KCJkaXYiKTtyZXR1cm4gVGkoaCxgaHRHaG9zdFRhYmxlIGh0QXV0b1NpemUgJHtsLnRyaW0oKX1gKSxkLmFwcGVuZENoaWxkKGgpLHtmcmFnbWVudDpkLGNvbnRhaW5lcjpofX1pc1ZlcnRpY2FsKCl7cmV0dXJuISghdGhpcy5yb3dzLmxlbmd0aHx8dGhpcy5jb2x1bW5zLmxlbmd0aCl9'@;
put 'aXNIb3Jpem9udGFsKCl7cmV0dXJuISghdGhpcy5jb2x1bW5zLmxlbmd0aHx8dGhpcy5yb3dzLmxlbmd0aCl9fTtmdW5jdGlvbiBYUChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTGF0KGMpe3ZhciBsPWZ1bmN0aW9uIE9hdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJu'@;
put 'IGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUg'@;
put 'dmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw'@;
put 'LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgbEp7c3RhdGljIGdldCBTQU1QTEVfQ09VTlQoKXtyZXR1cm4gM31jb25zdHJ1Y3RvcihsKXtYUCh0aGlzLCJzYW1wbGVzIixudWxsKSxYUCh0aGlzLCJkYXRhRmFjdG9yeSIsbnVsbCksWFAodGhpcywiY3VzdG9tU2FtcGxlQ291bnQiLG51'@;
put 'bGwpLFhQKHRoaXMsImFsbG93RHVwbGljYXRlcyIsITEpLHRoaXMuZGF0YUZhY3Rvcnk9bH1nZXRTYW1wbGVDb3VudCgpe3JldHVybiB0aGlzLmN1c3RvbVNhbXBsZUNvdW50P3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ6bEouU0FNUExFX0NPVU5UfXNldFNhbXBsZUNvdW50KGwpe3RoaXMuY3Vz'@;
put 'dG9tU2FtcGxlQ291bnQ9bH1zZXRBbGxvd0R1cGxpY2F0ZXMobCl7dGhpcy5hbGxvd0R1cGxpY2F0ZXM9bH1nZW5lcmF0ZVJvd1NhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoInJvdyIsYSxsKX1nZW5lcmF0ZUNvbHVtblNhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5n'@;
put 'ZW5lcmF0ZVNhbXBsZXMoImNvbCIsYSxsKX1nZW5lcmF0ZVNhbXBsZXMobCxhLGQpe2NvbnN0IGg9bmV3IE1hcCx7ZnJvbTpmLHRvOnZ9PSJudW1iZXIiPT10eXBlb2YgZD97ZnJvbTpkLHRvOmR9OmQ7cmV0dXJuICRvKGYsdixNPT57Y29uc3QgRD10aGlzLmdlbmVyYXRlU2FtcGxlKGwsYSxN'@;
put 'KTtoLnNldChNLEQpfSksaH1nZW5lcmF0ZVNhbXBsZShsLGEsZCl7aWYoInJvdyIhPT1sJiYiY29sIiE9PWwpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzYW1wbGUgdHlwZSIpO2NvbnN0IGg9bmV3IE1hcCxmPSJyb3ciPT09bD8iY29sIjoicm93Iix2PVtdO3JldHVybiAkbyhhLmZy'@;
put 'b20sYS50byxNPT57Y29uc3QgRD0icm93Ij09PWw/dGhpcy5kYXRhRmFjdG9yeShkLE0pOnRoaXMuZGF0YUZhY3RvcnkoTSxkKTtpZighMT09PUQpcmV0dXJuO2NvbnN0e3ZhbHVlOlosYnVuZGxlU2VlZDpuZX09RCxjZT0ic3RyaW5nIj09dHlwZW9mIG5lJiZuZS5sZW5ndGg+MDtsZXQgYmU7'@;
put 'YmU9Y2U/bmU6cWEoWik/YCR7T2JqZWN0LmtleXMoWikubGVuZ3RofWA6QXJyYXkuaXNBcnJheShaKT9gJHtaLmxlbmd0aH1gOmAke2xjKFopLmxlbmd0aH1gLGguaGFzKGJlKXx8aC5zZXQoYmUse25lZWRlZDp0aGlzLmdldFNhbXBsZUNvdW50KCksc3RyaW5nczpbXX0pO2NvbnN0IEVlPWgu'@;
put 'Z2V0KGJlKTtFZS5uZWVkZWQmJighKHYuaW5kZXhPZihaKT4tMSl8fHRoaXMuYWxsb3dEdXBsaWNhdGVzfHxjZSkmJihFZS5zdHJpbmdzLnB1c2goe3ZhbHVlOlosW2ZdOk19KSx2LnB1c2goWiksRWUubmVlZGVkLT0xKX0pLGh9fWNvbnN0IG00ZT1sSjtmdW5jdGlvbiBjSihjLGwsYSl7djRl'@;
put 'KGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB2NGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGNUKGMsbCxhKXtyZXR1cm4obD1mdW5j'@;
put 'dGlvbiBGYXQoYyl7dmFyIGw9ZnVuY3Rpb24gSGF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQp'@;
put 'cmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlp'@;
put 'biBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiAkbShjLGwpe3JldHVybiBjLmdldCh6ZChjLGwpKX1mdW5jdGlvbiBKUChjLGwsYSl7cmV0dXJuIGMuc2V0KHpk'@;
put 'KGMsbCksYSksYX1mdW5jdGlvbiB6ZChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0'@;
put 'Iil9TW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpO2NvbnN0IHVKPSJhdXRvQ29sdW1uU2l6ZSI7dmFyIGRKPW5ldyBXZWFrTWFwLEhfPW5ldyBXZWFrTWFwLE5fPW5ldyBXZWFrTWFwLE9oPW5ldyBXZWFrU2V0O2NsYXNzIHVUIGV4dGVuZHMg'@;
put 'RnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHVKfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3VzZUhlYWRlcnM6ITAsc2Ft'@;
put 'cGxpbmdSYXRpbzpudWxsLGFsbG93U2FtcGxlRHVwbGljYXRlczohMX19c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1JVCgpe3JldHVybiA1MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBQYXQo'@;
put 'YyxsKXt2NGUoYyxsKSxsLmFkZChjKX0odGhpcyxPaCksY1QodGhpcywiZ2hvc3RUYWJsZSIsbmV3IHNKKHRoaXMuaG90KSksY1QodGhpcywic2FtcGxlc0dlbmVyYXRvciIsbmV3IG00ZSgoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKSxmPXRoaXMuaG90LnRvUGh5'@;
put 'c2ljYWxDb2x1bW4oZCk7aWYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4oaCl8fHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKGYpKXJldHVybiExO2NvbnN0IHY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxkKTtsZXQgTT0iIjt2LnNwYW5uZWR8fChNPXRoaXMu'@;
put 'aG90LmdldERhdGFBdENlbGwoYSxkKSk7bGV0IEQ9IiI7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpJiYoRD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIixELHYsTSkpLHt2YWx1ZTpNLGJ1bmRsZVNlZWQ6RH19'@;
put 'KSksY1QodGhpcywiaW5Qcm9ncmVzcyIsITEpLGNUKHRoaXMsIm1lYXN1cmVkQ29sdW1ucyIsMCksY1QodGhpcywiY29sdW1uV2lkdGhzTWFwIixuZXcgVW0pLGNKKHRoaXMsZEosITEpLGNKKHRoaXMsSF8sW10pLGNKKHRoaXMsTl8sW10pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJl'@;
put 'Z2lzdGVyTWFwKCJhdXRvQ29sdW1uU2l6ZSIsdGhpcy5jb2x1bW5XaWR0aHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoYSxkLGgpPT56ZChPaCx0aGlzLF80ZSkuY2FsbCh0aGlzLGEsZCxoKSl9aXNFbmFibGVkKCl7cmV0dXJuITEhPT10aGlzLmhvdC5nZXRTZXR0'@;
put 'aW5ncygpW3VKXSYmIXRoaXMuaG90LmdldFNldHRpbmdzKCkuY29sV2lkdGhzfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLmdob3N0VGFibGUuc2V0U2V0dGluZygidXNlSGVhZGVycyIsdGhpcy5nZXRTZXR0aW5nKCJ1c2VIZWFkZXJzIikp'@;
put 'LHRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1cGxpY2F0ZXModGhpcy5nZXRTZXR0aW5nKCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKSk7Y29uc3QgYT10aGlzLmdldFNldHRpbmcoInNhbXBsaW5nUmF0aW8iKTthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRT'@;
put 'YW1wbGVDb3VudChwYXJzZUludChhLDEwKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6ZChPaCxsLHphdCkuY2FsbChs'@;
put 'LC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpkKE9oLGwsVWF0KS5jYWxsKGwsLi4uaCl9KSx0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpkKE9oLGwsV2F0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhv'@;
put 'b2soImJlZm9yZVJlbmRlciIsKCk9PnpkKE9oLHRoaXMsamF0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwoZCxoKT0+dGhpcy5nZXRDb2x1bW5XaWR0aChoLGQpKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT56ZChPaCx0aGlzLFphdCkuY2FsbCh0aGlzKSks'@;
put 'c3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7SlAoTl8sdGhpcyx0aGlzLmZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCkpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZv'@;
put 'cmVDb2x1bW5SZXNpemUiLChsLGEsZCk9PnpkKE9oLHRoaXMsXzRlKS5jYWxsKHRoaXMsbCxhLGQpKX1jYWxjdWxhdGVWaXNpYmxlQ29sdW1uc1dpZHRoKCl7aWYoIXRoaXMuaG90LmNvdW50Um93cygpKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksYT10aGlz'@;
put 'LmdldExhc3RWaXNpYmxlQ29sdW1uKCk7LTEhPT1sJiYtMSE9PWEmJnRoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOmwsdG86YX0sdm9pZCAwLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcil9Y2FsY3VsYXRlQ29sdW1uc1dpZHRoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2'@;
put 'b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxkPWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTskbyhoLmZyb20saC50byx2PT57bGV0IE09dGhpcy5o'@;
put 'b3QudG9QaHlzaWNhbENvbHVtbih2KTtudWxsPT09TSYmKE09diksKGR8fG51bGw9PT10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoTSkmJiF0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoTSkpJiZ6ZChPaCx0aGlzLGI0ZSkuY2FsbCh0aGlzLHYsZil9KSx0'@;
put 'aGlzLmdob3N0VGFibGUuY29sdW1ucy5sZW5ndGgmJih6ZChPaCx0aGlzLHk0ZSkuY2FsbCh0aGlzKSx0aGlzLm1lYXN1cmVkQ29sdW1ucz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPTA7Y29uc3QgaD10aGlzLmhvdC5jb3VudENvbHMoKS0xO2xl'@;
put 'dCBmPW51bGw7dGhpcy5pblByb2dyZXNzPSEwO2NvbnN0IHY9KCk9PntpZighdGhpcy5ob3QpcmV0dXJuIEVFKGYpLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTpkLHRvOk1hdGgubWluKGQrdVQuQ0FMQ1VMQVRJT05fU1RFUCxoKX0s'@;
put 'bCxhKSxkPWQrdVQuQ0FMQ1VMQVRJT05fU1RFUCsxLGQ8aD9mPXhFKHYpOihFRShmKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LE09dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO00+PTAmJih0aGlzLmNhbGN1bGF0ZUNvbHVt'@;
put 'bnNXaWR0aCh7ZnJvbTowLHRvOk19LGwsYSksZD1NKzEpLGQ8aD92KCk6dGhpcy5pblByb2dyZXNzPSExfXJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl7dGhpcy5ob3Qudmlldy5pc1Zpc2libGUoKSYmdGhpcy5jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoe2Zyb206MCx0bzp0aGlzLmhv'@;
put 'dC5jb3VudFJvd3MoKS0xfSwhMCl9Z2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbdUpdO2xldCBhPXVULlNZTkNfQ0FMQ1VMQVRJT05fTElNSVQ7Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMoKS0xO3JldHVybiBxYShsKSYmKGE9bC5z'@;
put 'eW5jTGltaXQsYyQoYSk/YT0kJChkLGEpOmE+Pj0wKSxNYXRoLm1pbihhLGQpfWdldENvbHVtbldpZHRoKGwsYSl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXSxoPWE7cmV0dXJuIHZvaWQgMD09PWgmJihoPXRoaXMuY29s'@;
put 'dW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSxkJiYibnVtYmVyIj09dHlwZW9mIGgmJihoPU1hdGgubWF4KGgsX18pKSksaH1nZXRGaXJzdFZpc2libGVDb2x1bW4oKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldEZp'@;
put 'cnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkpJiZ2b2lkIDAhPT1sP2w6LTF9Z2V0TGFzdFZpc2libGVDb2x1bW4oKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSkmJnZvaWQgMCE9PWw/bDotMX1maW5kQ29sdW1uc1doZXJl'@;
put 'SGVhZGVyV2FzQ2hhbmdlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRDb2xIZWFkZXIoKS5yZWR1Y2UoKGQsaCxmKT0+e2NvbnN0IHY9JG0oSF8sdGhpcykubGVuZ3RoO3JldHVybih2LTE8Znx8JG0oSF8sdGhpcylbZl0hPT1oKSYmZC5wdXNoKHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGYpKSx2'@;
put 'LTE8Zj8kbShIXyx0aGlzKS5wdXNoKGgpOiRtKEhfLHRoaXMpW2ZdPWgsZH0sW10pfWNsZWFyQ2FjaGUobCl7QXJyYXkuaXNBcnJheShsKT90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wuZm9yRWFjaChhPT57dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVs'@;
put 'bCl9KX0sITApOnRoaXMuY29sdW1uV2lkdGhzTWFwLmNsZWFyKCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZENvbHVtbnMpLmZpbHRlcihsPT5udWxsPT09bCkubGVuZ3RofWRlc3Ryb3ko'@;
put 'KXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEJhdChjKXtjb25zdCBsPXtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX07Yy5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7bnVsbCE9PWQmJih0'@;
put 'aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoZCl8fHpkKE9oLHRoaXMsYjRlKS5jYWxsKHRoaXMsYSxsKSl9KSx0aGlzLmdob3N0VGFibGUuY29sdW1ucy5sZW5ndGgmJih6ZChPaCx0aGlzLHk0ZSkuY2FsbCh0aGlzKSx0aGlzLmdob3N0VGFibGUuY2xlYW4oKSl9ZnVuY3Rpb24g'@;
put 'YjRlKGMsbCl7dGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlQ29sdW1uU2FtcGxlcyhjLGwpLmZvckVhY2goKGQsaCk9PnRoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW4oaCxkKSl9ZnVuY3Rpb24geTRlKCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUu'@;
put 'Z2V0V2lkdGhzKChjLGwpPT57Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGMpO3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChhLGwpfSl9LCEwKX1mdW5jdGlvbiBqYXQoKXt0aGlzLmNhbGN1bGF0ZVZpc2libGVDb2x1bW5zV2lkdGgoKSx0aGlzLmluUHJv'@;
put 'Z3Jlc3N8fCh6ZChPaCx0aGlzLEJhdCkuY2FsbCh0aGlzLCRtKE5fLHRoaXMpKSxKUChOXyx0aGlzLFtdKSl9ZnVuY3Rpb24gemF0KGMsbCl7bHx8dGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpfWZ1bmN0aW9uIFVhdChjKXtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57bGV0Wyxo'@;
put 'XT1kO2NvbnN0IGY9dGhpcy5ob3QucHJvcFRvQ29sKGgpO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGYpJiYtMT09PWEuaW5kZXhPZihmKSYmYS5wdXNoKGYpLGF9LFtdKTskbShOXyx0aGlzKS5wdXNoKC4uLmwpfWZ1bmN0aW9uIF80ZShjLGwsYSl7bGV0IGQ9YztyZXR1cm4gYSYmKHRoaXMu'@;
put 'Y2FsY3VsYXRlQ29sdW1uc1dpZHRoKGwsdm9pZCAwLCEwKSxkPXRoaXMuZ2V0Q29sdW1uV2lkdGgobCx2b2lkIDAsITEpKSxkfWZ1bmN0aW9uIFphdCgpe0pQKEhfLHRoaXMsdGhpcy5ob3QuZ2V0Q29sSGVhZGVyKCkpLHRoaXMucmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKSxKUChkSix0'@;
put 'aGlzLCEwKX1mdW5jdGlvbiBXYXQoYyl7aWYoISRtKGRKLHRoaXMpKXJldHVybjtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57dmFyIGg7Y29uc3QgZj1udWxsPT09KGg9ZC5hZGRyZXNzKXx8dm9pZCAwPT09aD92b2lkIDA6aC5jb2w7aWYoTnVtYmVyLmlzSW50ZWdlcihmKSl7Y29uc3Qgdj10'@;
put 'aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKTstMT09PWEuaW5kZXhPZih2KSYmYS5wdXNoKHYpfXJldHVybiBhfSxbXSk7JG0oTl8sdGhpcykucHVzaCguLi5sKX1jb25zdCB1OT17aG9yaXpvbnRhbDoiaG9yaXpvbnRhbCIsdmVydGljYWw6InZlcnRpY2FsIn07ZnVuY3Rpb24gVl8oYyxsLGEp'@;
put 'e3JldHVybihsPWZ1bmN0aW9uIHFhdChjKXt2YXIgbD1mdW5jdGlvbiBYYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl'@;
put 'Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg'@;
put 'bD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGRUKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSly'@;
put 'ZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1Nby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b2ZpbGxSYW5nZSIpLE1vLmdldFNpbmdsZXRvbigp'@;
put 'LnJlZ2lzdGVyKCJiZWZvcmVBdXRvZmlsbCIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckF1dG9maWxsIik7Y29uc3QgUWF0PVsiZmlsbEhhbmRsZSJdO3ZhciBCXz1uZXcgV2Vha1NldDtjbGFzcyBuc3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3Vt'@;
put 'ZW50cyksZnVuY3Rpb24gJGF0KGMsbCl7KGZ1bmN0aW9uIEthdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLEJf'@;
put 'KSxWXyh0aGlzLCJhZGRpbmdTdGFydGVkIiwhMSksVl8odGhpcywibW91c2VEb3duT25DZWxsQ29ybmVyIiwhMSksVl8odGhpcywibW91c2VEcmFnT3V0c2lkZSIsITEpLFZfKHRoaXMsImhhbmRsZURyYWdnZWRDZWxscyIsMCksVl8odGhpcywiZGlyZWN0aW9ucyIsW10pLFZfKHRoaXMsImF1'@;
put 'dG9JbnNlcnRSb3ciLCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYXV0b2ZpbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuWyJhdXRvZmlsbCIsLi4uUWF0XX1pc0VuYWJsZWQoKXtyZXR1'@;
put 'cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMubWFwU2V0dGluZ3MoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+ZFQoQl8sdGhpcyxp'@;
put 'c3QpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixsPT5kVChCXyx0aGlzLHJzdCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsKGwsYSk9PmRUKEJfLHRoaXMsb3N0KS5jYWxsKHRoaXMsYSkp'@;
put 'LHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsZWFyTWFwcGVkU2V0dGluZ3MoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9'@;
put 'Z2V0U2VsZWN0aW9uRGF0YSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7cm93OmEsY29sOmR9PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmgsY29sOmZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksdj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFi'@;
put 'bGVSYW5nZSIsW3tzdGFydFJvdzphLHN0YXJ0Q29sOmQsZW5kUm93OmgsZW5kQ29sOmZ9XSksTT1bXSxEPVtdLFo9W107cmV0dXJuIFluKHYsbmU9Pntmb3IobGV0IGNlPW5lLnN0YXJ0Um93O2NlPD1uZS5lbmRSb3c7Y2UrPTEpLTE9PT1NLmluZGV4T2YoY2UpJiZNLnB1c2goY2UpO2Zvcihs'@;
put 'ZXQgY2U9bmUuc3RhcnRDb2w7Y2U8PW5lLmVuZENvbDtjZSs9MSktMT09PUQuaW5kZXhPZihjZSkmJkQucHVzaChjZSl9KSxZbihNLG5lPT57Y29uc3QgY2U9W107WW4oRCxiZT0+e2NlLnB1c2godGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKG5lLGJlKSl9KSxaLnB1c2goY2UpfSksWn1maWxs'@;
put 'SW4oKXtpZih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5pc0VtcHR5KCkpcmV0dXJuITE7Y29uc3RbbCxhLGQsaF09dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0VmlzdWFsQ29ybmVycygpLGY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5n'@;
put 'ZUxhc3QoKSx2PWYuZ2V0VG9wU3RhcnRDb3JuZXIoKSxNPWYuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7dGhpcy5yZXNldFNlbGVjdGlvbk9mRHJhZ2dlZEFyZWEoKTtjb25zdCBEPVt2LnJvdyx2LmNvbCxNLnJvdyxNLmNvbF0sWj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b2ZpbGxSYW5n'@;
put 'ZSIsW01hdGgubWluKHYucm93LGwpLE1hdGgubWluKHYuY29sLGEpLE1hdGgubWF4KE0ucm93LGQpLE1hdGgubWF4KE0uY29sLGgpXSxEKSx7ZGlyZWN0aW9uT2ZEcmFnOm5lLHN0YXJ0T2ZEcmFnQ29vcmRzOmNlLGVuZE9mRHJhZ0Nvb3JkczpiZX09ZnVuY3Rpb24gWWF0KGMsbCxhKXtsZXQg'@;
put 'ZCxoLGY7cmV0dXJuIGxbMF09PT1jWzBdJiZsWzFdPGNbMV0/KGY9ImxlZnQiLGQ9YShsWzBdLGxbMV0pLGg9YShsWzJdLGNbMV0tMSkpOmxbMl09PT1jWzJdJiZsWzBdPT09Y1swXSYmbFszXT5jWzNdPyhmPSJyaWdodCIsZD1hKGxbMF0sY1szXSsxKSxoPWEobFsyXSxsWzNdKSk6bFswXTxj'@;
put 'WzBdJiZsWzFdPT09Y1sxXT8oZj0idXAiLGQ9YShsWzBdLGxbMV0pLGg9YShjWzBdLTEsbFszXSkpOmxbMl0+Y1syXSYmbFsxXT09PWNbMV0mJihmPSJkb3duIixkPWEoY1syXSsxLGxbMV0pLGg9YShsWzJdLGxbM10pKSxkJiZkLm5vcm1hbGl6ZSgpLGgmJmgubm9ybWFsaXplKCkse2RpcmVj'@;
put 'dGlvbk9mRHJhZzpmLHN0YXJ0T2ZEcmFnQ29vcmRzOmQsZW5kT2ZEcmFnQ29vcmRzOmh9fShELFosKEVlLEJlKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoRWUsQmUpKTtpZihjZSYmY2Uucm93Pi0xJiZjZS5jb2w+LTEpe2NvbnN0IEVlPXRoaXMuZ2V0U2VsZWN0aW9uRGF0YSgpLEJl'@;
put 'PWYuY2xvbmUoKSxxZT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGNlLGNlLGJlKSxydD10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQXV0b2ZpbGwiLEVlLEJlLHFlLG5lKTtpZighMT09PXJ0KXJldHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigp'@;
put 'LHRoaXMuaG90LnJlbmRlcigpLCExO2xldCBwdD1ydDtjb25zdCBkdD1ydDtpZihbInVwIiwibGVmdCJdLmluZGV4T2YobmUpPi0xJiYoMSE9PWR0Lmxlbmd0aHx8MCE9PWR0WzBdLmxlbmd0aCkpaWYocHQ9W10sInVwIj09PW5lKXtjb25zdCBKdD1iZS5yb3ctY2Uucm93KzEsdm49SnQlZHQu'@;
put 'bGVuZ3RoO2ZvcihsZXQgQ249MDtDbjxKdDtDbisrKXB0LnB1c2goZHRbKENuKyhkdC5sZW5ndGgtdm4pKSVkdC5sZW5ndGhdKX1lbHNle2NvbnN0IEp0PWJlLmNvbC1jZS5jb2wrMSx2bj1KdCVkdFswXS5sZW5ndGg7Zm9yKGxldCBDbj0wO0NuPGR0Lmxlbmd0aDtDbisrKXtwdC5wdXNoKFtd'@;
put 'KTtmb3IobGV0IHRuPTA7dG48SnQ7dG4rKylwdFtDbl0ucHVzaChkdFtDbl1bKHRuKyhkdFtDbl0ubGVuZ3RoLXZuKSklZHRbQ25dLmxlbmd0aF0pfX10aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShjZS5yb3csY2UuY29sLHB0LGJlLnJvdyxiZS5jb2wsYCR7dGhpcy5wbHVnaW5OYW1lfS5m'@;
put 'aWxsYCxudWxsKSx0aGlzLnNldFNlbGVjdGlvbihaKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJBdXRvZmlsbCIscHQsQmUscWUsbmUpLHRoaXMuaG90LnJlbmRlcigpfWVsc2UgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTtyZXR1cm4hMH1yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQobCl7'@;
put 'cmV0dXJuIGwucm93PDAmJihsLnJvdz0wKSxsLmNvbDwwJiYobC5jb2w9MCksbH1nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2xldCBoPWw7aWYodGhpcy5kaXJl'@;
put 'Y3Rpb25zLmluY2x1ZGVzKHU5LnZlcnRpY2FsKSYmdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKHU5Lmhvcml6b250YWwpKXtjb25zdCBmPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKTsoZC5jb2w8PWwuY29sfHxmLmNvbD49bC5jb2wpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJv'@;
put 'dyxsLmNvbCkpLChkLnJvdzxsLnJvd3x8Zi5yb3c+bC5yb3cpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxkLmNvbCkpfWVsc2UgaWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKHU5LnZlcnRpY2FsKSloPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQu'@;
put 'Y29sKTtlbHNle2lmKCF0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXModTkuaG9yaXpvbnRhbCkpcmV0dXJuO2g9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csbC5jb2wpfXJldHVybiB0aGlzLnJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChoKX1zaG93Qm9yZGVyKGwpe2NvbnN0'@;
put 'IGE9dGhpcy5nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhsKTthJiZ0aGlzLnJlZHJhd0JvcmRlcnMoYSl9YWRkUm93KCl7dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2JlbG93Iix2b2lkIDAsMSxgJHt0aGlzLnBsdWdpbk5h'@;
put 'bWV9LmZpbGxgKSx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITF9LDIwMCl9YWRkTmV3Um93SWZOZWVkZWQoKXtpZighdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpJiYhMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5hdXRvSW5zZXJ0Um93KXtjb25zdCBs'@;
put 'PXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0VmlzdWFsQ29ybmVycygpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bFsyXTxkLTEmJmFbMl09PT1kLTEmJih0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITAsdGhpcy5hZGRS'@;
put 'b3coKSl9fWdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyhsKXtjb25zdCBhPXRoaXMuaG90LmdldERhdGEoKSxkPXRoaXMuaG90LmNvdW50Um93cygpO2xldCBoO2ZvcihsZXQgZj1sWzJdKzE7ZjxkO2YrKyl7Zm9yKGxldCBEPWxbMV07RDw9bFszXTtEKyspaWYoIXpjKGFbZl1b'@;
put 'RF0pKXJldHVybi0xO2NvbnN0IE09YVtmXVtsWzNdKzFdOyghemMoYVtmXVtsWzFdLTFdKXx8IXpjKE0pKSYmKGg9Zil9cmV0dXJuIGh9YWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJbmRleChsLGEpe3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgp'@;
put 'LmNsZWFyKCkuYWRkKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGxbMF0sbFsxXSkpLmFkZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLGxbM10pKS5jb21taXQoKX1zZXRTZWxlY3Rpb24obCl7dGhpcy5ob3Quc2VsZWN0Q2VsbCguLi55cyhsLGE9Pk1hdGgubWF4KGEsMCkpLCEx'@;
put 'LCExKX1zZWxlY3RBZGphY2VudCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksYT10aGlzLmdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyhsKTtyZXR1cm4tMSE9PWEmJnZvaWQgMCE9PWEmJih0aGlzLmFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNp'@;
put 'ZmljUm93SW5kZXgobCxhKSwhMCl9cmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MCx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpfXJlZHJhd0JvcmRlcnMobCl7dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hs'@;
put 'aWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mcm9tKS5hZGQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS50bykuYWRkKGwpLmNvbW1pdCgpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9Z2V0SWZNb3VzZVdhc0RyYWdnZWRP'@;
put 'dXRzaWRlKGwpe2NvbnN0e2RvY3VtZW50RWxlbWVudDphfT10aGlzLmhvdC5yb290RG9jdW1lbnQsZD1qMCh0aGlzLmhvdC50YWJsZSkudG9wLSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0fHxhLnNjcm9sbFRvcCkrTXUodGhpcy5ob3QudGFibGUpLGg9ajAodGhpcy5ob3QudGFi'@;
put 'bGUpLmxlZnQtKHRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXR8fGEuc2Nyb2xsTGVmdCkrYXUodGhpcy5ob3QudGFibGUpO3JldHVybiBsLmNsaWVudFk+ZCYmbC5jbGllbnRYPD1ofXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3RE'@;
put 'b2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5kVChCXyx0aGlzLGFzdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PmRUKEJfLHRoaXMsc3N0KS5jYWxsKHRoaXMs'@;
put 'YSkpfWNsZWFyTWFwcGVkU2V0dGluZ3MoKXt0aGlzLmRpcmVjdGlvbnMubGVuZ3RoPTAsdGhpcy5hdXRvSW5zZXJ0Um93PSExfW1hcFNldHRpbmdzKCl7Y29uc3QgbD1mdW5jdGlvbiBHYXQoYyl7Y29uc3QgbD17fTtyZXR1cm4hMD09PWM/KGwuZGlyZWN0aW9ucz1PYmplY3Qua2V5cyh1OSks'@;
put 'bC5hdXRvSW5zZXJ0Um93PSEwKTpxYShjKT8obC5hdXRvSW5zZXJ0Um93PSEhRm8oYy5hdXRvSW5zZXJ0Um93KSYmYy5kaXJlY3Rpb24hPT11OS5ob3Jpem9udGFsJiZjLmF1dG9JbnNlcnRSb3csbC5kaXJlY3Rpb25zPUZvKGMuZGlyZWN0aW9uKT9bYy5kaXJlY3Rpb25dOk9iamVjdC5rZXlz'@;
put 'KHU5KSk6InN0cmluZyI9PXR5cGVvZiBjPyhsLmRpcmVjdGlvbnM9W2NdLGwuYXV0b0luc2VydFJvdz0hMCk6KGwuZGlyZWN0aW9ucz1bXSxsLmF1dG9JbnNlcnRSb3c9ITEpLGx9KHRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsbEhhbmRsZSk7dGhpcy5kaXJlY3Rpb25zPWwuZGlyZWN0aW9u'@;
put 'cyx0aGlzLmF1dG9JbnNlcnRSb3c9bC5hdXRvSW5zZXJ0Um93fWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHJzdCgpe3RoaXMuc2VsZWN0QWRqYWNlbnQoKSYmdGhpcy5maWxsSW4oKX1mdW5jdGlvbiBpc3QoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0xLHRoaXMubW91'@;
put 'c2VEb3duT25DZWxsQ29ybmVyPSEwfWZ1bmN0aW9uIG9zdChjKXt0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lciYmIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSYmdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscys9MSx0aGlzLnNob3dCb3JkZXIo'@;
put 'YyksdGhpcy5hZGROZXdSb3dJZk5lZWRlZCgpKX1mdW5jdGlvbiBhc3QoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjEmJnRoaXMuZmlsbEluKCksdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MCx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0h'@;
put 'MSl9ZnVuY3Rpb24gc3N0KGMpe2NvbnN0IGw9dGhpcy5nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUoYyk7ITE9PT10aGlzLmFkZGluZ1N0YXJ0ZWQmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjAmJmw/KHRoaXMubW91c2VEcmFnT3V0c2lkZT0hMCx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITAp'@;
put 'OnRoaXMubW91c2VEcmFnT3V0c2lkZT0hMSx0aGlzLm1vdXNlRHJhZ091dHNpZGUmJnRoaXMuYXV0b0luc2VydFJvdyYmdGhpcy5hZGRSb3coKX1mdW5jdGlvbiBDNGUoYyxsLGEpe1M0ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUzRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBqXyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gY3N0KGMpe3ZhciBsPWZ1bmN0aW9uIHVzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8'@;
put 'IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw'@;
put 'cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln'@;
put 'dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gTTRlKGMsbCxhKXtyZXR1cm4gYy5zZXQoQnAoYyxsKSxhKSxhfWZ1bmN0aW9uIFFQKGMsbCl7cmV0dXJuIGMuZ2V0KEJwKGMsbCkpfWZ1bmN0aW9uIEJwKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09'@;
put 'bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBoSj0iYXV0b1Jvd1NpemUiO3ZhciBoVD1uZXcgV2Vha01hcCxmSj1uZXcgV2Vha01h'@;
put 'cCxrZz1uZXcgV2Vha1NldDtjbGFzcyBmVCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBoSn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA0MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgREVGQVVMVF9T'@;
put 'RVRUSU5HUygpe3JldHVybnt1c2VIZWFkZXJzOiEwLHNhbXBsaW5nUmF0aW86bnVsbCxhbGxvd1NhbXBsZUR1cGxpY2F0ZXM6ITF9fXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1zdGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTAwfWNv'@;
put 'bnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIGxzdChjLGwpe1M0ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGtnKSxqXyh0aGlzLCJoZWFkZXJIZWlnaHQiLG51bGwpLGpfKHRoaXMsImdob3N0VGFibGUiLG5ldyBzSih0aGlzLmhvdCkpLGpfKHRoaXMsInNhbXBsZXNHZW5lcmF0b3IiLG5l'@;
put 'dyBtNGUoKGEsZCk9Pntjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGQpO2lmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKGgpfHx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihmKXx8YT49MCYm'@;
put 'ZD49MCYmdGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxkKS5oaWRkZW4pcmV0dXJuITE7bGV0IHY7cmV0dXJuIGE+PTA/dj10aGlzLmhvdC5nZXREYXRhQXRDZWxsKGEsZCk6LTE9PT1hJiYodj10aGlzLmhvdC5nZXRDb2xIZWFkZXIoZCkpLHt2YWx1ZTp2fX0pKSxqXyh0aGlzLCJpblByb2dyZXNz'@;
put 'IiwhMSksal8odGhpcywibWVhc3VyZWRSb3dzIiwwKSxqXyh0aGlzLCJyb3dIZWlnaHRzTWFwIixuZXcgVW0pLEM0ZSh0aGlzLGhULFtdKSxDNGUodGhpcyxmSiwhMSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImF1dG9Sb3dTaXplIix0aGlzLnJvd0hlaWdodHNNYXAp'@;
put 'LHRoaXMuYWRkSG9vaygiYmVmb3JlUm93UmVzaXplIiwoYSxkLGgpPT5CcChrZyx0aGlzLHg0ZSkuY2FsbCh0aGlzLGEsZCxoKSl9aXNFbmFibGVkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2hKXTtyZXR1cm4hMD09PWx8fHFhKGwpfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRo'@;
put 'aXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0QWxsb3dEdXBsaWNhdGVzKHRoaXMuZ2V0U2V0dGluZygiYWxsb3dTYW1wbGVEdXBsaWNhdGVzIikpO2NvbnN0IGE9dGhpcy5nZXRTZXR0aW5nKCJzYW1wbGluZ1JhdGlvIik7YSYmIWlzTmFOKGEpJiZ0'@;
put 'aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQocGFyc2VJbnQoYSwxMCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTty'@;
put 'ZXR1cm4gQnAoa2csbCxnc3QpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBCcChrZyxs'@;
put 'LG1zdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpKSx0aGlzLmFkZEhvb2soImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEJwKGtnLGwsYnN0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbmRlciIsKCk9PkJwKGtnLHRoaXMscHN0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlm'@;
put 'eVJvd0hlaWdodCIsKGQsaCk9PnRoaXMuZ2V0Um93SGVpZ2h0KGgsZCkpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PkJwKGtnLHRoaXMsdnN0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsKCk9PnRoaXMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0'@;
put 'KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhlYWRlckhlaWdodD1udWxsLHN1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIsKGwsYSxkKT0+QnAoa2csdGhpcyx4NGUpLmNhbGwodGhpcyxsLGEsZCkpfWNhbGN1'@;
put 'bGF0ZVZpc2libGVSb3dzSGVpZ2h0KCl7aWYoIXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybjtjb25zdCBsPXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCksYT10aGlzLmdldExhc3RWaXNpYmxlUm93KCk7LTEhPT1sJiYtMSE9PWEmJnRoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTps'@;
put 'LHRvOmF9LHZvaWQgMCx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXIpfWNhbGN1bGF0ZVJvd3NIZWlnaHQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxhPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPSJudW1iZXIiPT10eXBl'@;
put 'b2YgbD97ZnJvbTpsLHRvOmx9OmwsZj0ibnVtYmVyIj09dHlwZW9mIGE/e2Zyb206YSx0bzphfTphO2lmKG51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIoMCkpe2NvbnN0IHY9dGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcygtMSxmKTt0aGlzLmdob3N0VGFibGUu'@;
put 'YWRkQ29sdW1uSGVhZGVyc1Jvdyh2LmdldCgtMSkpfSRvKGguZnJvbSxoLnRvLHY9PntsZXQgTT10aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpO251bGw9PT1NJiYoTT12KSwoZHx8bnVsbD09PXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgoTSkpJiZ0aGlzLnNhbXBsZXNHZW5l'@;
put 'cmF0b3IuZ2VuZXJhdGVSb3dTYW1wbGVzKHYsZikuZm9yRWFjaCgoWixuZSk9PnRoaXMuZ2hvc3RUYWJsZS5hZGRSb3cobmUsWikpfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0cygo'@;
put 'dixNKT0+e3Y8MD90aGlzLmhlYWRlckhlaWdodD1NOnRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSxNKX0pfSwhMCksdGhpcy5tZWFzdXJlZFJvd3M9aC50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVBbGxS'@;
put 'b3dzSGVpZ2h0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFd'@;
put 'LGQ9MDtjb25zdCBoPXRoaXMuaG90LmNvdW50Um93cygpLTE7bGV0IGY9bnVsbDt0aGlzLmluUHJvZ3Jlc3M9ITA7Y29uc3Qgdj0oKT0+e2lmKCF0aGlzLmhvdClyZXR1cm4gRUUoZiksdm9pZCh0aGlzLmluUHJvZ3Jlc3M9ITEpO3RoaXMuY2FsY3VsYXRlUm93c0hlaWdodCh7ZnJvbTpkLHRv'@;
put 'Ok1hdGgubWluKGQrZlQuQ0FMQ1VMQVRJT05fU1RFUCxoKX0sbCxhKSxkPWQrZlQuQ0FMQ1VMQVRJT05fU1RFUCsxLGQ8aD9mPXhFKHYpOihFRShmKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LE09dGhpcy5nZXRTeW5jQ2FsY3VsYXRp'@;
put 'b25MaW1pdCgpO00+PTAmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206MCx0bzpNfSxsLGEpLGQ9TSsxKSxkPGg/digpOih0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9cmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl7dGhpcy5o'@;
put 'b3Qudmlldy5pc1Zpc2libGUoKSYmdGhpcy5jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KHtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sITApfWdldFN5bmNDYWxjdWxhdGlvbkxpbWl0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2hKXTtsZXQgYT1mVC5TWU5DX0NB'@;
put 'TENVTEFUSU9OX0xJTUlUO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRSb3dzKCktMTtyZXR1cm4gcWEobCkmJihhPWwuc3luY0xpbWl0LGMkKGEpP2E9JCQoZCxhKTphPj49MCksTWF0aC5taW4oYSxkKX1nZXRSb3dIZWlnaHQobCxhKXtjb25zdCBkPWw8MD90aGlzLmhlYWRlckhlaWdodDp0aGlz'@;
put 'LnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpO2xldCBoPWE7cmV0dXJuIG51bGwhPT1kJiZkPihhfHwwKSYmKGg9ZCksaH1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy5oZWFkZXJIZWlnaHR9Z2V0Rmlyc3RWaXNpYmxl'@;
put 'Um93KCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpKSYmdm9pZCAwIT09bD9sOi0xfWdldExhc3RWaXNpYmxlUm93KCl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD10aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCkp'@;
put 'JiZ2b2lkIDAhPT1sP2w6LTF9Y2xlYXJDYWNoZShsKXt0aGlzLmhlYWRlckhlaWdodD1udWxsLEFycmF5LmlzQXJyYXkobCk/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2goYT0+e3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSxudWxsKX0pfSwhMCk6'@;
put 'dGhpcy5yb3dIZWlnaHRzTWFwLmNsZWFyKCl9Y2xlYXJDYWNoZUJ5UmFuZ2UobCl7Y29uc3R7ZnJvbTphLHRvOmR9PSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9Omw7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PnskbyhNYXRoLm1pbihhLGQpLE1hdGgubWF4KGEsZCksaD0+'@;
put 'e3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxudWxsKX0pfSwhMCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgwLHRoaXMubWVhc3VyZWRSb3dzKS5maWx0ZXIobD0+bnVsbD09PWwpLmxlbmd0aH1k'@;
put 'ZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFuKCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBmc3QoYyl7Y29uc3QgbD17ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9O2MuZm9yRWFjaChhPT57dGhpcy5zYW1wbGVzR2VuZXJhdG9yLmdlbmVyYXRlUm93U2FtcGxlcyhh'@;
put 'LGwpLmZvckVhY2goKGgsZik9PnRoaXMuZ2hvc3RUYWJsZS5hZGRSb3coZixoKSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRIZWlnaHRzKChhLGQpPT57Y29uc3QgaD10aGlzLmhvdC50b1Bo'@;
put 'eXNpY2FsUm93KGEpO3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxkKX0pfSwhMCksdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWZ1bmN0aW9uIHBzdCgpe3RoaXMuY2FsY3VsYXRlVmlzaWJsZVJvd3NIZWlnaHQoKSx0aGlzLmluUHJvZ3Jlc3N8fChCcChrZyx0aGlzLGZz'@;
put 'dCkuY2FsbCh0aGlzLFFQKGhULHRoaXMpKSxNNGUoaFQsdGhpcyxbXSkpfWZ1bmN0aW9uIHg0ZShjLGwsYSl7bGV0IGQ9YztyZXR1cm4gYSYmKHRoaXMuY2FsY3VsYXRlUm93c0hlaWdodChsLHZvaWQgMCwhMCksZD10aGlzLmdldFJvd0hlaWdodChsKSksZH1mdW5jdGlvbiBnc3QoYyxsKXts'@;
put 'fHx0aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpfWZ1bmN0aW9uIG1zdChjKXtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57bGV0W2hdPWQ7cmV0dXJuLTE9PT1hLmluZGV4T2YoaCkmJmEucHVzaChoKSxhfSxbXSk7UVAoaFQsdGhpcykucHVzaCguLi5sKX1mdW5jdGlvbiB2c3QoKXt0'@;
put 'aGlzLnJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpLE00ZShmSix0aGlzLCEwKX1mdW5jdGlvbiBic3QoYyl7aWYoIVFQKGZKLHRoaXMpKXJldHVybjtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57dmFyIGg7Y29uc3QgZj1udWxsPT09KGg9ZC5hZGRyZXNzKXx8dm9pZCAwPT09aD92b2lkIDA6'@;
put 'aC5yb3c7aWYoTnVtYmVyLmlzSW50ZWdlcihmKSl7Y29uc3Qgdj10aGlzLmhvdC50b1Zpc3VhbFJvdyhmKTstMT09PWEuaW5kZXhPZih2KSYmYS5wdXNoKHYpfXJldHVybiBhfSxbXSk7UVAoaFQsdGhpcykucHVzaCguLi5sKX1jb25zdCBFNGU9bmV3IE1hcChbWyJpbmRleGVzU2VxdWVuY2Ui'@;
put 'LHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6TEssZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6JEV9XSxbInBoeXNpY2FsbHlJbmRleGVkIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOkZLLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOkhLfV1dKSxUNGU9Yz0+e2lmKCExPT09RTRlLmhhcyhj'@;
put 'KSl0aHJvdyBuZXcgRXJyb3IoYEFsdGVyIHN0cmF0ZWd5IHdpdGggSUQgJyR7Y30nIGRvZXMgbm90IGV4aXN0LmApO3JldHVybiBFNGUuZ2V0KGMpfSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOnlzdCxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpfc3R9PVQ0ZSgicGh5c2ljYWxseUluZGV4'@;
put 'ZWQiKSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOlNzdCxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpNc3R9PVQ0ZSgicGh5c2ljYWxseUluZGV4ZWQiKTtjb25zdCBBNGU9ImJpbmRSb3dzV2l0aEhlYWRlcnMiLGs0ZT1uZXcgTWFwKFtbImxvb3NlIixjbGFzcyB3c3QgZXh0ZW5kcyBKN3tj'@;
put 'b25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe2NvbnN0IGQ9UEsodGhpcy5pbmRleGVkVmFsdWVzLGEpO3RoaXMuaW5kZXhlZFZhbHVlcz15c3QoZCxsLGEsdGhpcy5pbml0VmFsdWVPckZuKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7Y29uc3QgYT1fc3QodGhpcy5p'@;
put 'bmRleGVkVmFsdWVzLGwpO3RoaXMuaW5kZXhlZFZhbHVlcz1PSyhhLGwpLHN1cGVyLnJlbW92ZShsKX19XSxbInN0cmljdCIsY2xhc3MgeHN0IGV4dGVuZHMgSjd7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9U3N0KHRoaXMuaW5kZXhl'@;
put 'ZFZhbHVlcyxsLGEsKGQsaCk9PnRoaXMuZ2V0TmV4dFZhbHVlKGgpKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPU1zdCh0aGlzLmluZGV4ZWRWYWx1ZXMsbCksc3VwZXIucmVtb3ZlKGwpfWdldE5leHRWYWx1ZShsKXtyZXR1cm4gTWF0aC5tYXgoLi4u'@;
put 'dGhpcy5nZXRWYWx1ZXMoKSkrMStsfX1dXSk7dmFyIEQ0ZT1uZXcgV2Vha1NldDtjbGFzcyBQc3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gVHN0KGMsbCl7KGZ1bmN0aW9uIEFzdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLEQ0ZSksZnVuY3Rpb24ga3N0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEc3QoYyl7dmFyIGw9ZnVuY3Rpb24gSXN0KGMs'@;
put 'bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0'@;
put 'b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh'@;
put 'bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiaGVhZGVySW5kZXhlcyIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEE0ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMTB9aXNF'@;
put 'bmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0E0ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPW51bGwhPT0obD1rNGUuZ2V0KHRoaXMuZ2V0U2V0dGluZygpKSkmJnZvaWQgMCE9PWw/bDprNGUuZ2V0KCJsb29zZSIp'@;
put 'O3RoaXMuaGVhZGVySW5kZXhlcz10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVhZGVycyIsbmV3IGEpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVhZGVyIixkPT5mdW5jdGlvbiBSc3QoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9'@;
put 'PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShENGUsdGhpcyxGc3QpLmNhbGwodGhpcyxkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlz'@;
put 'YWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoImJpbmRSb3dzV2l0aEhlYWRlcnMiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gRnN0KGMpe3JldHVybiB0aGlzLmhlYWRlckluZGV4ZXMu'@;
put 'Z2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3coYykpfWZ1bmN0aW9uIEk0ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rp'@;
put 'b24gUjRlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBWc3QoYyl7dmFyIGw9ZnVuY3Rpb24gQnN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1'@;
put 'bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3lt'@;
put 'Ym9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBMNGUoYyxsKXtyZXR1cm4gYy5nZXQoel8oYyxsKSl9ZnVuY3Rp'@;
put 'b24gcEooYyxsLGEpe3JldHVybiBjLnNldCh6XyhjLGwpLGEpLGF9ZnVuY3Rpb24gel8oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBp'@;
put 'cyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGVGPSJjb2xsYXBzaWJsZUNvbHVtbnMiLHpzdD1bIm5lc3RlZEhlYWRlcnMiXSxVXz0iY29sbGFwc2libGVJbmRpY2F0b3IiLE80ZT1lRixQNGU9bmV3IE1hcChbWyJjb2xsYXBzZSIse2hpZGVDb2x1bW46ITAsYmVmb3JlSG9v'@;
put 'azoiYmVmb3JlQ29sdW1uQ29sbGFwc2UiLGFmdGVySG9vazoiYWZ0ZXJDb2x1bW5Db2xsYXBzZSJ9XSxbImV4cGFuZCIse2hpZGVDb2x1bW46ITEsYmVmb3JlSG9vazoiYmVmb3JlQ29sdW1uRXhwYW5kIixhZnRlckhvb2s6ImFmdGVyQ29sdW1uRXhwYW5kIn1dXSk7dmFyIFpfPW5ldyBXZWFr'@;
put 'TWFwLHBUPW5ldyBXZWFrU2V0O2NsYXNzIFVzdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBIc3QoYyxsKXtJNGUoYyxsKSxsLmFkZChjKX0odGhpcyxwVCksUjRlKHRoaXMsIm5lc3RlZEhlYWRlcnNQbHVnaW4iLG51bGwpLFI0ZSh0aGlz'@;
put 'LCJoZWFkZXJTdGF0ZU1hbmFnZXIiLG51bGwpLGZ1bmN0aW9uIE5zdChjLGwsYSl7STRlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxaXyxudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gZUZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjkwfXN0YXRpYyBn'@;
put 'ZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpOZXN0ZWRIZWFkZXJzIl19c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bZUYsLi4uenN0XX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbZUZdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7'@;
put 'aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmF9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7YXx8aWwoIllvdSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIGluIG9yZGVyIHRvIHVzZSBjb2xsYXBzaWJsZSBoZWFkZXJzLiIpLHBK'@;
put 'KFpfLHRoaXMsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCh0aGlzLnBsdWdpbk5hbWUsImhpZGluZyIpKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJuZXN0ZWRIZWFkZXJzIiksdGhpcy5oZWFkZXJTdGF0'@;
put 'ZU1hbmFnZXI9dGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luLmdldFN0YXRlTWFuYWdlcigpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PnpfKHBULHRoaXMsWXN0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHpfKHBULGwsR3N0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFy'@;
put 'cmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiB6XyhwVCxsLFpzdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLChkLGgsZik9PnpfKHBULHRoaXMsV3N0KS5jYWxsKHRoaXMsZCxoLGYpKSx0aGlzLnJlZ2lzdGVy'@;
put 'U2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy51cGRhdGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtpZih0aGlzLmhvdC52aWV3KXtpZighdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnMpe2NvbnN0e2NvbGxhcHNpYmxlQ29sdW1u'@;
put 'czpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpOyJib29sZWFuIj09dHlwZW9mIGw/dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoYT0+KHtjb2xsYXBzaWJsZTphLm9yaWdDb2xzcGFuPjF9KSk6QXJyYXkuaXNBcnJheShsKSYmKHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1hcFN0'@;
put 'YXRlKCgpPT4oe2NvbGxhcHNpYmxlOiExfSkpLHRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1lcmdlU3RhdGVXaXRoKGwpKX1zdXBlci51cGRhdGVQbHVnaW4oKX19ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1l'@;
put 'KSxwSihaXyx0aGlzLG51bGwpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj1udWxsLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJCdXR0b25zKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2Vy'@;
put 'KCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVudGVyIl1dLGNhbGxiYWNrOigpPT57dmFyIGw7Y29uc3R7cm93OmEsY29sOmR9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LHtjb2xsYXBzaWJsZTpoLGlzQ29sbGFwc2VkOmYsY29s'@;
put 'dW1uSW5kZXg6dn09bnVsbCE9PShsPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclRyZWVOb2RlRGF0YShhLGQpKSYmdm9pZCAwIT09bD9sOnt9O2lmKGgpcmV0dXJuIGY/dGhpcy5leHBhbmRTZWN0aW9uKHtyb3c6YSxjb2w6dn0pOnRoaXMuY29sbGFwc2VTZWN0aW9uKHtyb3c6'@;
put 'YSxjb2w6dn0pLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO3JldHVybihudWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaXNTaW5nbGUoKSkmJihudWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8'@;
put 'fHZvaWQgMD09PWE/dm9pZCAwOmEuaGlnaGxpZ2h0LmlzSGVhZGVyKCkpfSxncm91cDpPNGUscmVsYXRpdmVUb0dyb3VwOlptLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5y'@;
put 'ZW1vdmVTaG9ydGN1dHNCeUdyb3VwKE80ZSl9Y2xlYXJCdXR0b25zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxhPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQsZD10'@;
put 'aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCxoPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3Ju'@;
put 'ZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbCxmPWZ1bmN0aW9uKHYpe3YmJnYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2KX07JG8oMCxsLTEsdj0+e2NvbnN0IE09YS5jaGlsZE5vZGVzW3ZdLEQ9ZC5jaGlsZE5vZGVzW3ZdLFo9aD9oLmNoaWxkTm9kZXNbdl06bnVsbDskbygw'@;
put 'LE0uY2hpbGROb2Rlcy5sZW5ndGgtMSxuZT0+e2xldCBjZT1NLmNoaWxkTm9kZXNbbmVdLnF1ZXJ5U2VsZWN0b3IoYC4ke1VffWApO2YoY2UpLEQmJkQuY2hpbGROb2Rlc1tuZV0mJihjZT1ELmNoaWxkTm9kZXNbbmVdLnF1ZXJ5U2VsZWN0b3IoYC4ke1VffWApLGYoY2UpKSxoJiZaJiZaLmNo'@;
put 'aWxkTm9kZXNbbmVdJiYoY2U9Wi5jaGlsZE5vZGVzW25lXS5xdWVyeVNlbGVjdG9yKGAuJHtVX31gKSxmKGNlKSl9KX0pfWV4cGFuZFNlY3Rpb24obCl7dGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJleHBhbmQiKX1jb2xsYXBzZVNlY3Rpb24obCl7dGhpcy50b2dnbGVDb2xs'@;
put 'YXBzaWJsZVNlY3Rpb24oW2xdLCJjb2xsYXBzZSIpfXRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMobCl7Y29uc3QgYT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBOb2RlcyhkPT57Y29uc3R7Y29sbGFwc2libGU6aCxvcmlnQ29sc3BhbjpmLGhlYWRlckxldmVsOnYsY29sdW1uSW5k'@;
put 'ZXg6TSxpc0NvbGxhcHNlZDpEfT1kO2lmKCEwPT09aCYmZj4xJiYoRCYmImV4cGFuZCI9PT1sfHwhRCYmImNvbGxhcHNlIj09PWwpKXJldHVybntyb3c6dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubGV2ZWxUb1Jvd0Nvb3Jkcyh2KSxjb2w6TX19KTt0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2Vj'@;
put 'dGlvbihhLGwpfWNvbGxhcHNlQWxsKCl7dGhpcy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCJjb2xsYXBzZSIpfWV4cGFuZEFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiZXhwYW5kIil9dG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKGwsYSl7aWYoIVA0ZS5o'@;
put 'YXMoYSkpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBhY3Rpb24gaXMgcGFzc2VkICgke2F9KS5gKTtpZighQXJyYXkuaXNBcnJheShsKSlyZXR1cm47Y29uc3QgZD1EbShsLEVlPT57bGV0e3JvdzpCZX09RWU7cmV0dXJuIEJlPDB9KTtsZXQgaD1kLmxlbmd0aD4wO1luKGQsRWU9Pnt2'@;
put 'YXIgQmU7bGV0e3JvdzpxZSxjb2w6cnR9PUVlO2NvbnN0e2NvbGxhcHNpYmxlOnB0LGlzQ29sbGFwc2VkOmR0fT1udWxsIT09KEJlPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmdldEhlYWRlclNldHRpbmdzKHFlLHJ0KSkmJnZvaWQgMCE9PUJlP0JlOnt9O2lmKCFwdHx8ZHQmJiJjb2xsYXBz'@;
put 'ZSI9PT1hfHwhZHQmJiJleHBhbmQiPT09YSlyZXR1cm4gaD0hMSwhMX0pO2NvbnN0IGY9W10sdj1bXTtoJiZZbihkLEVlPT57bGV0e3JvdzpCZSxjb2w6cWV9PUVlO2NvbnN0e2NvbHNwYW5Db21wZW5zYXRpb246cnQsYWZmZWN0ZWRDb2x1bW5zOnB0LHJvbGxiYWNrTW9kaWZpY2F0aW9uOmR0'@;
put 'fT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihhLEJlLHFlKTtydD4wJiYodi5wdXNoKC4uLnB0KSxmLnB1c2goZHQpKX0pO2NvbnN0IE09dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCk7bGV0IEQ9W107ImNvbGxhcHNlIj09PWE/RD1jMmUoWy4uLk0s'@;
put 'Li4udl0pOiJleHBhbmQiPT09YSYmKEQ9RG0oTSxFZT0+IXYuaW5jbHVkZXMoRWUpKSk7Y29uc3QgWj1QNGUuZ2V0KGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoWi5iZWZvcmVIb29rLE0sRCxoKSlyZXR1cm4gdm9pZCBZbihmLEVlPT57RWUoKX0pO3RoaXMuaG90LmJhdGNoRXhlY3V0'@;
put 'aW9uKCgpPT57WW4odixFZT0+e0w0ZShaXyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihFZSksWi5oaWRlQ29sdW1uKX0pfSwhMCk7Y29uc3QgY2U9dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCkubGVuZ3RoIT09TS5sZW5ndGgsYmU9dGhpcy5ob3Qu'@;
put 'Z2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZigiY29sbGFwc2UiPT09YSYmY2UmJmJlKXtjb25zdHtyb3c6RWUsY29sOkJlfT1iZS5oaWdobGlnaHQ7aWYoKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKEVlKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oQmUp'@;
put 'KSYmdi5pbmNsdWRlcyhCZSkpe2NvbnN0IHJ0PUVlPj0wP3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChFZSwxLCEwKTpFZSxwdD1CZT49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoQmUsMSwhMCk6'@;
put 'QmU7bnVsbCE9PXJ0JiZudWxsIT09cHQmJnRoaXMuaG90LnNlbGVjdENlbGwocnQscHQpfX10aGlzLmhvdC5ydW5Ib29rcyhaLmFmdGVySG9vayxNLEQsaCxjZSksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX1nZXRDb2xsYXBzZWRDb2x1bW5z'@;
put 'KCl7cmV0dXJuIEw0ZShaXyx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCl9ZGVzdHJveSgpe3BKKFpfLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBac3QoYyxsLGEpe3ZhciBkO2NvbnN0e2NvbGxhcHNpYmxlOmgsb3JpZ0NvbHNwYW46Zixpc0NvbGxhcHNlZDp2fT1udWxs'@;
put 'IT09KGQ9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyU2V0dGluZ3MoYSxjKSkmJnZvaWQgMCE9PWQ/ZDp7fSxNPWgmJmY+MSYmYz49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxEPXRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7bGV0IFo9'@;
put 'bC5xdWVyeVNlbGVjdG9yKGAuJHtVX31gKTt2YXIgbmU7VjcobCxbUDIoIiIpWzBdXSksTT8oWnx8KFo9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFRpKFosVV8pLGwucXVlcnlTZWxlY3RvcigiZGl2OmZpcnN0LWNoaWxkIikuYXBwZW5kQ2hpbGQoWikpLGNh'@;
put 'KFosWyJjb2xsYXBzZWQiLCJleHBhbmRlZCJdKSx2PyhUaShaLCJjb2xsYXBzZWQiKSxPbShaLCIrIiksRCYmdmEobCwuLi5QMighMSkpKTooVGkoWiwiZXhwYW5kZWQiKSxPbShaLCItIiksRCYmdmEobCwuLi5QMighMCkpKSxEJiZ2YShaLC4uLkg3KCkpKTpudWxsPT09KG5lPVopfHx2b2lk'@;
put 'IDA9PT1uZXx8bmUucmVtb3ZlKCl9ZnVuY3Rpb24gV3N0KGMsbCl7cGEoYy50YXJnZXQsVV8pJiYocGEoYy50YXJnZXQsImV4cGFuZGVkIik/KHRoaXMuZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChjLnRhcmdldCwibW91c2V1cCIpLHRoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwi'@;
put 'Y29sbGFwc2UiKSk6cGEoYy50YXJnZXQsImNvbGxhcHNlZCIpJiYodGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGMudGFyZ2V0LCJtb3VzZXVwIiksdGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJleHBhbmQiKSksSDIoYykpfWZ1bmN0aW9uIFlzdCgpe3RoaXMudXBkYXRl'@;
put 'UGx1Z2luKCl9ZnVuY3Rpb24gR3N0KGMsbCl7bHx8dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBkOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gJHN0KGMpe3ZhciBsPWZ1bmN0aW9uIEtzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1i'@;
put 'b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu'@;
put 'KCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6'@;
put 'Y1tsXT1hLGN9Y29uc3QgcXN0PVsic29ydEVtcHR5Q2VsbHMiLCJpbmRpY2F0b3IiLCJoZWFkZXJBY3Rpb24iLCJjb21wYXJlRnVuY3Rpb25GYWN0b3J5Il07Y2xhc3MgZWx0e2NvbnN0cnVjdG9yKGwsYSl7ZDkodGhpcywiaG90Iix2b2lkIDApLGQ5KHRoaXMsInNvcnRpbmdTdGF0ZXMiLG5l'@;
put 'dyBmUCksZDkodGhpcywic29ydEVtcHR5Q2VsbHMiLCExKSxkOSh0aGlzLCJpbmRpY2F0b3IiLCEwKSxkOSh0aGlzLCJoZWFkZXJBY3Rpb24iLCEwKSxkOSh0aGlzLCJjb21wYXJlRnVuY3Rpb25GYWN0b3J5Iix2b2lkIDApLGQ5KHRoaXMsIm1hcE5hbWUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0'@;
put 'aGlzLm1hcE5hbWU9YSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChhLHRoaXMuc29ydGluZ1N0YXRlcyl9dXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMobCl7cWEobCkmJlhhKGwsKGEsZCk9Pntxc3QuaW5jbHVkZXMoZCkmJih0aGlzW2RdPWEpfSl9Z2V0QWxsQ29s'@;
put 'dW1uc1Byb3BlcnRpZXMoKXtjb25zdCBsPXtzb3J0RW1wdHlDZWxsczp0aGlzLnNvcnRFbXB0eUNlbGxzLGluZGljYXRvcjp0aGlzLmluZGljYXRvcixoZWFkZXJBY3Rpb246dGhpcy5oZWFkZXJBY3Rpb259O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbXBhcmVGdW5jdGlvbkZh'@;
put 'Y3RvcnkmJihsLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk9dGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5KSxsfWdldFNvcnRPcmRlck9mQ29sdW1uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2Fs'@;
put 'Q29sdW1uKGwpKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc29ydE9yZGVyfWdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKXtyZXR1cm4gbD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpLHRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCkuZmluZEluZGV4KGE9PntsZXRbZF09'@;
put 'YTtyZXR1cm4gZD09PWx9KX1nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5zb3J0aW5nU3RhdGVzLmdldExlbmd0aCgpfWlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpfWlzQ29sdW1uU29y'@;
put 'dGVkKGwpe3JldHVybiBxYSh0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpKX1nZXRTb3J0U3RhdGVzKCl7cmV0dXJuIG51bGw9PT10aGlzLnNvcnRpbmdTdGF0ZXM/W106dGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMo'@;
put 'KS5tYXAoYT0+e2xldFtkLGhdPWE7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKSwuLi5ofX0pfWdldENvbHVtblNvcnRTdGF0ZShsKXtjb25zdCBhPXRoaXMuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7aWYoRm8oYSkpcmV0dXJue2NvbHVtbjpsLHNvcnRPcmRlcjph'@;
put 'fX1zZXRTb3J0U3RhdGVzKGwpe3RoaXMuc29ydGluZ1N0YXRlcy5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSs9MSl0aGlzLnNvcnRpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obFthXS5jb2x1bW4pLHtzb3J0T3JkZXI6bFthXS5z'@;
put 'b3J0T3JkZXJ9KX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLm1hcE5hbWUpLHRoaXMuc29ydGluZ1N0YXRlcz1udWxsfX1mdW5jdGlvbiBGNGUoYyxsLGEpe2NvbnN0IGQ9bC5sb2NhbGU7cmV0dXJuIGZ1bmN0aW9uKGgsZil7Y29uc3R7'@;
put 'c29ydEVtcHR5Q2VsbHM6dn09YTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGgmJihoPWgudG9Mb2NhbGVMb3dlckNhc2UoZCkpLCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi50b0xvY2FsZUxvd2VyQ2FzZShkKSksaD09PWY/anA6emMoaCk/emMoZik/anA6diYmImFzYyI9PT1jP1djOlljOnpj'@;
put 'KGYpP3YmJiJhc2MiPT09Yz9ZYzpXYzppc05hTihoKSYmIWlzTmFOKGYpPyJhc2MiPT09Yz9ZYzpXYzohaXNOYU4oaCkmJmlzTmFOKGYpfHwoaXNOYU4oaCl8fGlzTmFOKGYpfHwoaD1wYXJzZUZsb2F0KGgpLGY9cGFyc2VGbG9hdChmKSksaDxmKT8iYXNjIj09PWM/V2M6WWM6aD5mPyJhc2Mi'@;
put 'PT09Yz9ZYzpXYzpqcH19Y29uc3R7cmVnaXN0ZXI6Z1QsZ2V0SXRlbTpONGUsaGFzSXRlbTpjbHR9PXIzKCJzb3J0aW5nLmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiKSx7cmVnaXN0ZXI6VjRlLGdldEl0ZW06dWx0fT1yMygic29ydGluZy5tYWluU29ydENvbXBhcmF0b3IiKTtmdW5jdGlvbiBC'@;
put 'NGUoYyl7cmV0dXJuIGNsdChjKT9ONGUoYyk6TjRlKCJkZWZhdWx0Iil9Z1QoImNoZWNrYm94IixmdW5jdGlvbiBybHQoYyxsLGEpe2NvbnN0IGQ9bC5jaGVja2VkVGVtcGxhdGUsaD1sLnVuY2hlY2tlZFRlbXBsYXRlLHtzb3J0RW1wdHlDZWxsczpmfT1hO3JldHVybiBmdW5jdGlvbih2LE0p'@;
put 'e2NvbnN0IEQ9emModiksWj16YyhNKSxuZT1EP2g6dixjZT1aP2g6TSxiZT1uZT09PWh8fG5lPT09ZCxFZT1jZT09PWh8fGNlPT09ZDtpZighMT09PWYpe2lmKEQmJiExPT09WilyZXR1cm4gWWM7aWYoITE9PT1EJiZaKXJldHVybiBXY31yZXR1cm4hMT09PWJlJiZFZT8iYXNjIj09PWM/V2M6'@;
put 'WWM6YmUmJiExPT09RWU/ImFzYyI9PT1jP1ljOldjOiExPT09YmUmJiExPT09RWU/RjRlKGMsbCxhKSh2LE0pOm5lPT09aCYmY2U9PT1kPyJhc2MiPT09Yz9XYzpZYzpuZT09PWQmJmNlPT09aD8iYXNjIj09PWM/WWM6V2M6anB9fSksZ1QoImRhdGUiLGZ1bmN0aW9uIG9sdChjLGwsYSl7cmV0'@;
put 'dXJuIFc0ZShjLGwuZGF0ZUZvcm1hdCxhKX0pLGdUKCJkZWZhdWx0IixGNGUpLGdUKCJudW1lcmljIixmdW5jdGlvbiB0bHQoYyxsLGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0IGY9cGFyc2VGbG9hdChkKSx2PXBhcnNlRmxvYXQoaCkse3NvcnRFbXB0eUNlbGxzOk19PWE7aWYoZj09'@;
put 'PXZ8fGlzTmFOKGYpJiZpc05hTih2KSlyZXR1cm4ganA7aWYoTSl7aWYoemMoZCkpcmV0dXJuImFzYyI9PT1jP1djOlljO2lmKHpjKGgpKXJldHVybiJhc2MiPT09Yz9ZYzpXY31yZXR1cm4gaXNOYU4oZik/WWM6aXNOYU4odik/V2M6Zjx2PyJhc2MiPT09Yz9XYzpZYzpmPnY/ImFzYyI9PT1j'@;
put 'P1ljOldjOmpwfX0pLGdUKCJ0aW1lIixmdW5jdGlvbiBzbHQoYyxsLGEpe3JldHVybiBXNGUoYyxsLnRpbWVGb3JtYXQsYSl9KTtjb25zdCBqcD0wLFdjPS0xLFljPTEsdEY9ImFzYyIsbkY9ImRlc2MiLGo0ZT0iY29sSGVhZGVyIjtmdW5jdGlvbiB6NGUoYyl7aWYoYyE9PW5GKXJldHVybiBj'@;
put 'PT09dEY/bkY6dEZ9ZnVuY3Rpb24gVTRlKGMpe3JldHVybiBjLnF1ZXJ5U2VsZWN0b3IoYC4ke2o0ZX1gKX1mdW5jdGlvbiBaNGUoYyxsKXtpZihjPDB8fCFsLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgYT1sLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzO3JldHVybiBBcnJh'@;
put 'eS5mcm9tKGEpLmluZGV4T2YobC5wYXJlbnROb2RlKS1hLmxlbmd0aD09LTF9ZnVuY3Rpb24gZ0ooYyxsLGEpe3JldHVybi0xPT09YyYmbD49MCYmITE9PT1GbShhKX1mdW5jdGlvbiBXNGUoYyxsLGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOmZ9PWE7aWYo'@;
put 'ZD09PWgpcmV0dXJuIGpwO2lmKHpjKGQpKXJldHVybiB6YyhoKT9qcDpmJiYiYXNjIj09PWM/V2M6WWM7aWYoemMoaCkpcmV0dXJuIGYmJiJhc2MiPT09Yz9ZYzpXYztjb25zdCB2PU9hKGQsbCksTT1PYShoLGwpO3JldHVybiB2LmlzVmFsaWQoKT9NLmlzVmFsaWQoKT9NLmlzQWZ0ZXIodik/'@;
put 'ImFzYyI9PT1jP1djOlljOk0uaXNCZWZvcmUodik/ImFzYyI9PT1jP1ljOldjOmpwOldjOlljfX1jb25zdCBZNGU9ImluZGljYXRvckRpc2FibGVkIixHNGU9ImNvbHVtblNvcnRpbmciLCQ0ZT0ic29ydEFjdGlvbiIsSzRlPW5ldyBNYXAoW1t0RiwiYXNjZW5kaW5nIl0sW25GLCJkZXNjZW5k'@;
put 'aW5nIl1dKTtmdW5jdGlvbiByRihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQ2x0KGMpe3ZhciBsPWZ1bmN0aW9uIFNsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs'@;
put 'bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n'@;
put 'Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gV18oYyxsLGEpe2lmKCJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGlGPSJjb2x1bW5Tb3J0aW5nIixvRj0iYXBwZW5kIixxNGU9'@;
put 'aUY7VjRlKGlGLGZ1bmN0aW9uIHlsdChjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24oTSl7Y29uc3QgRD1jWzBdLFo9bFswXSxuZT1oWzBdLGNlPWZbMF0sYmU9Wi5jb2x1bW5Tb3J0aW5nO3JldHVybihiZS5jb21wYXJl'@;
put 'RnVuY3Rpb25GYWN0b3J5P2JlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk6QjRlKFoudHlwZSkpKEQsWixiZSkobmUsY2UpfSgpfX0pLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Tb3J0IiksTW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uU29y'@;
put 'dCIpO2NvbnN0IG1UPW5ldyBXZWFrTWFwO3ZhciBoOT1uZXcgV2Vha1NldDtjbGFzcyBYNGUgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gX2x0KGMsbCl7KGZ1bmN0aW9uIHdsdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGg5KSxyRih0aGlzLCJjb2x1bW5TdGF0ZXNNYW5hZ2VyIixudWxsKSxyRih0aGlzLCJjb2x1bW5NZXRhQ2FjaGUiLG51bGwpLHJG'@;
put 'KHRoaXMsInBsdWdpbktleSIsaUYpLHJGKHRoaXMsImluZGV4ZXNTZXF1ZW5jZUNhY2hlIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gaUZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRT'@;
put 'ZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKG1ULmhhcyh0aGlzLmhvdCkmJm1ULmdldCh0aGlzLmhvdCkhPT10aGlzLnBsdWdpbktleSlyZXR1cm4gdGhpcy5ob3QudXBkYXRlU2V0dGluZ3Moe1t0aGlzLnBsdWdpbktleV06ITF9KSx2b2lk'@;
put 'IGZ1bmN0aW9uIHBsdChjLGwpe2lsKGdsYFBsdWdpbnMgXGBjb2x1bW5Tb3J0aW5nXGAgYW5kIFxgbXVsdGlDb2x1bW5Tb3J0aW5nXGAgc2hvdWxkIG5vdCBiZSBlbmFibGVkIHNpbXVsdGFuZW91c2x5Llx4MjAKICAgIE9ubHkgXGAke2N9XGAgd2lsbCB3b3JrLiBUaGUgXGAke2x9XGAgcGx1'@;
put 'Z2luIHdpbGwgcmVtYWluIGRpc2FibGVkLmApfShtVC5nZXQodGhpcy5ob3QpLHRoaXMucGx1Z2luS2V5KTt0aGlzLmVuYWJsZWR8fChtVC5zZXQodGhpcy5ob3QsdGhpcy5wbHVnaW5LZXkpLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1uZXcgZWx0KHRoaXMuaG90LGAke3RoaXMucGx1Z2lu'@;
put 'S2V5fS5zb3J0aW5nU3RhdGVzYCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bmV3IFVtKGE9PntsZXQgZD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtyZXR1cm4gbnVsbD09PWQmJihkPWEpLHRoaXMuZ2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3MoZCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1h'@;
put 'cHBlci5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWAsdGhpcy5jb2x1bW5NZXRhQ2FjaGUpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChhLGQpPT5XXyhoOSx0aGlzLEVsdCkuY2FsbCh0aGlzLGEsZCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25D'@;
put 'ZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBXXyhoOSxsLEFsdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93'@;
put 'biIsKGEsZCk9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlRG93bihhLGQpKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsKCk9PldfKGg5LHRoaXMsbUopLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0'@;
put 'aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gV18oaDksbCxUbHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuaG90LnZpZXcmJldfKGg5LHRoaXMsbUopLmNhbGwodGhpcyksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdp'@;
put 'bigpKX1kaXNhYmxlUGx1Z2luKCl7Y29uc3QgbD0oYSxkKT0+e2NvbnN0IGg9VTRlKGQpOyExPT09WjRlKGEsZCl8fG51bGw9PT1ofHx0aGlzLnVwZGF0ZUhlYWRlckNsYXNzZXMoaCl9O21ULmRlbGV0ZSh0aGlzLmhvdCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGwp'@;
put 'LHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLCgpPT57dGhpcy5ob3QucmVtb3ZlSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGwpfSksdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntudWxsIT09dGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZSYmKHRoaXMuaG90LnJv'@;
put 'd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLmdldFZhbHVlcygpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luS2V5KSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlPW51bGwpfSwhMCksdGhp'@;
put 'cy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWApLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5kZXN0cm95KCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bnVsbCx0aGlzLmNvbHVtblN0YXRlc01hbmFnZXI9bnVsbCx0aGlz'@;
put 'LnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHto'@;
put 'aWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4gdGhpcy5zb3J0KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhsLmNvbCkpLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO2NvbnN0IGQ9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VM'@;
put 'YXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoZCkmJi0x'@;
put 'PT09ZC5yb3cmJmQuY29sPj0wfSxyZWxhdGl2ZVRvR3JvdXA6Wm0scG9zaXRpb246ImJlZm9yZSIsZ3JvdXA6cTRlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHE0'@;
put 'ZSl9c29ydChsKXtjb25zdCBhPXRoaXMuZ2V0U29ydENvbmZpZygpLGQ9dGhpcy5nZXROb3JtYWxpemVkU29ydENvbmZpZ3MobCksaD10aGlzLmFyZVZhbGlkU29ydENvbmZpZ3MoZCk7ITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uU29ydCIsYSxkLGgpJiYoMD09PWEubGVu'@;
put 'Z3RoJiZudWxsPT09dGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZSYmKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXksbmV3IEMzZSksdGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZS5zZXRWYWx1ZXModGhp'@;
put 'cy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpKSxoJiYodGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMoZCksdGhpcy5zb3J0QnlQcmVzZXRTb3J0U3RhdGVzKGQpLHRoaXMuc2F2ZUFsbFNvcnRTZXR0aW5ncyhkKSksdGhpcy5ob3QucnVuSG9v'@;
put 'a3MoImFmdGVyQ29sdW1uU29ydCIsYSxoP2Q6YSxoKSxoJiZ0aGlzLmhvdC5yZW5kZXIoKSl9Y2xlYXJTb3J0KCl7dGhpcy5zb3J0KFtdKX1pc1NvcnRlZCgpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuaXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHko'@;
put 'KX1nZXRTb3J0Q29uZmlnKGwpe3JldHVybiBGbyhsKT90aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0Q29sdW1uU29ydFN0YXRlKGwpOnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0U3RhdGVzKCl9c2V0U29ydENvbmZpZyhsKXtjb25zdCBhPXRoaXMuZ2V0Tm9ybWFsaXplZFNv'@;
put 'cnRDb25maWdzKGwpO3RoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhhKSYmdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMoYSl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l'@;
put 'bnRzWzBdOltdO3JldHVybiBBcnJheS5pc0FycmF5KGwpP2wuc2xpY2UoMCwxKTpbbF19YXJlVmFsaWRTb3J0Q29uZmlncyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiBmdW5jdGlvbiBmbHQoYyl7aWYoYy5zb21lKGE9PiExPT09ZnVuY3Rpb24gaGx0KGMpe2lmKCEx'@;
put 'PT09cWEoYykpcmV0dXJuITE7Y29uc3R7Y29sdW1uOmwsc29ydE9yZGVyOmF9PWM7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobCkmJlt0RixuRl0uaW5jbHVkZXMoYSl9KGEpKSlyZXR1cm4hMTtjb25zdCBsPWMubWFwKGE9PntsZXR7Y29sdW1uOmR9PWE7cmV0dXJuIGR9KTtyZXR1cm4gbmV3'@;
put 'IFNldChsKS5zaXplPT09bC5sZW5ndGh9KGwpJiZsLmV2ZXJ5KGQ9PntsZXR7Y29sdW1uOmh9PWQ7cmV0dXJuIGg8PWEmJmg+PTB9KX1zYXZlQWxsU29ydFNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCk7YS5pbml0'@;
put 'aWFsQ29uZmlnPXlzKGwsaD0+e2xldHtjb2x1bW46ZiwuLi52fT1oO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKSwuLi52fX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiY29sdW1uU29ydGluZyIsYSl9Z2V0QWxsU2F2ZWRTb3J0'@;
put 'U2V0dGluZ3MoKXtjb25zdCBsPXt9O3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwiY29sdW1uU29ydGluZyIsbCk7Y29uc3QgYT1sLnZhbHVlO3JldHVybiBGbyhhKSYmQXJyYXkuaXNBcnJheShhLmluaXRpYWxDb25maWcpJiYoYS5pbml0aWFsQ29uZmlnPXlzKGEu'@;
put 'aW5pdGlhbENvbmZpZyxoPT57bGV0e2NvbHVtbjpmLC4uLnZ9PWg7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKSwuLi52fX0pKSxhfWdldENvbHVtbk5leHRDb25maWcobCl7Y29uc3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydE9yZGVyT2ZDb2x1'@;
put 'bW4obCk7aWYoRm8oYSkpe2NvbnN0IGg9ejRlKGEpO3JldHVybiBGbyhoKT97Y29sdW1uOmwsc29ydE9yZGVyOmh9OnZvaWQgMH1jb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpO2lmKE51bWJlci5pc0ludGVnZXIobCkmJmw+PTAmJmw8ZClyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOno0'@;
put 'ZSgpfX1nZXROZXh0U29ydENvbmZpZyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06b0Y7Y29uc3QgZD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpLGg9LTEhPT1kLGY9'@;
put 'dGhpcy5nZXRTb3J0Q29uZmlnKCksdj10aGlzLmdldENvbHVtbk5leHRDb25maWcobCk7aWYoaCl7aWYoeWModikpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSwuLi5mLnNsaWNlKGQrMSldO2lmKGE9PT1vRilyZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKSx2XTtpZigicmVw'@;
put 'bGFjZSI9PT1hKXJldHVyblsuLi5mLnNsaWNlKDAsZCksdiwuLi5mLnNsaWNlKGQrMSldfXJldHVybiBGbyh2KT9mLmNvbmNhdCh2KTpmfWdldFBsdWdpbkNvbHVtbkNvbmZpZyhsKXtpZihxYShsKSl7Y29uc3QgYT1sW3RoaXMucGx1Z2luS2V5XTtpZihxYShhKSlyZXR1cm4gYX1yZXR1cm57'@;
put 'fX1nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldLGQ9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCksaD10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGY9T2JqZWN0'@;
put 'LmdldFByb3RvdHlwZU9mKGgpO3JldHVybiBBcnJheS5pc0FycmF5KGYuY29sdW1ucyk/T2JqZWN0LmFzc2lnbihkLGEsdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoZi5jb2x1bW5zW2xdKSk6bWwoZi5jb2x1bW5zKT9PYmplY3QuYXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNvbHVtbkNv'@;
put 'bmZpZyhmLmNvbHVtbnMobCkpKTpPYmplY3QuYXNzaWduKGQsYSl9Z2V0Rmlyc3RDZWxsU2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGQ9T2JqZWN0LmNyZWF0ZShhKTtyZXR1cm4gZFt0aGlzLnBsdWdpbktleV09dGhpcy5jb2x1bW5NZXRhQ2FjaGUuZ2V0'@;
put 'VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpLGR9Z2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtyZXR1cm4gYS5tYXhSb3dzPD1sP2EubWF4Um93czpsLWEubWluU3BhcmVSb3dzfXNvcnRCeVByZXNldFNvcnRT'@;
put 'dGF0ZXMobCl7aWYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpLDA9PT1sLmxlbmd0aClyZXR1cm47Y29uc3QgYT1bXSxkPXRoaXMuaG90LmNvdW50Um93cygpLGg9Wj0+eXMobCxuZT0+dGhp'@;
put 'cy5ob3QuZ2V0RGF0YUF0Q2VsbChaLG5lLmNvbHVtbikpO2ZvcihsZXQgWj0wO1o8dGhpcy5nZXROdW1iZXJPZlJvd3NUb1NvcnQoZCk7Wis9MSlhLnB1c2goW3RoaXMuaG90LnRvUGh5c2ljYWxSb3coWildLmNvbmNhdChoKFopKSk7Y29uc3QgZj15cyhhLFo9PlpbMF0pOyFmdW5jdGlvbiBk'@;
put 'bHQoYyxsKXtjb25zdCBhPXVsdChsKTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkPjI/ZC0yOjApLGY9MjtmPGQ7ZisrKWhbZi0yXT1hcmd1bWVudHNbZl07Yy5zb3J0KGEoLi4uaCkpfShhLHRoaXMucGx1Z2luS2V5LHlzKGwsWj0+Wi5zb3J0T3JkZXIpLHlzKGws'@;
put 'Wj0+dGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhaLmNvbHVtbikpKTtmb3IobGV0IFo9YS5sZW5ndGg7WjxkO1orPTEpYS5wdXNoKFtaXS5jb25jYXQoaChaKSkpO2NvbnN0IHY9eXMoYSxaPT5aWzBdKSxNPW5ldyBNYXAoeXMoZiwoWixuZSk9PltaLHZbbmVdXSkpLEQ9eXModGhpcy5ob3Qu'@;
put 'cm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCksWj0+TS5oYXMoWik/TS5nZXQoWik6Wik7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKEQpfXNvcnRCeVNldHRpbmdzKGwpe2lmKHFhKGwpKXt0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIudXBkYXRl'@;
put 'QWxsQ29sdW1uc1Byb3BlcnRpZXMobCk7Y29uc3QgYT1sLmluaXRpYWxDb25maWc7KEFycmF5LmlzQXJyYXkoYSl8fHFhKGEpKSYmdGhpcy5zb3J0KGEpfWVsc2UgdGhpcy5ob3QucmVuZGVyKCl9dXBkYXRlSGVhZGVyQ2xhc3NlcyhsKXtpZihjYShsLGZ1bmN0aW9uIGJsdCgpe3JldHVybiBB'@;
put 'cnJheS5mcm9tKEs0ZS52YWx1ZXMoKSkuY29uY2F0KCQ0ZSxZNGUsRzRlKX0oKSksITEhPT10aGlzLmVuYWJsZWQpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtUaShsLGZ1bmN0aW9uIHZs'@;
put 'dChjLGwsYSxkKXtjb25zdCBoPVtHNGVdO2lmKGQmJmgucHVzaCgkNGUpLCExPT09YSlyZXR1cm4gaC5wdXNoKFk0ZSksaDtjb25zdCBmPWMuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7cmV0dXJuIEZvKGYpJiZoLnB1c2goSzRlLmdldChmKSksaH0oLi4uZCkpfX1vblVwZGF0ZVNldHRpbmdz'@;
put 'KGwpe3N1cGVyLm9uVXBkYXRlU2V0dGluZ3MobCksbnVsbCE9PXRoaXMuY29sdW1uTWV0YUNhY2hlJiZ0aGlzLmNvbHVtbk1ldGFDYWNoZS5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKSxGbyhsW3RoaXMucGx1Z2luS2V5XSkmJnRoaXMuc29y'@;
put 'dEJ5U2V0dGluZ3MobFt0aGlzLnBsdWdpbktleV0pfXdhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhKXtyZXR1cm4gdGhpcy5nZXRGaXJzdENlbGxTZXR0aW5ncyhhKVt0aGlzLnBsdWdpbktleV0uaGVhZGVyQWN0aW9uJiZwYShsLnRhcmdldCxqNGUpfW9uQWZ0ZXJPbkNlbGxNb3VzZURv'@;
put 'd24obCxhKXtpZighMSE9PWdKKGEucm93LGEuY29sLGwpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhLmNvbCkpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSYmKHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuaG90LnNlbGVjdENv'@;
put 'bHVtbnMoYS5jb2wpKTtjb25zdCBkPXRoaXMuaG90LmdldEFjdGl2ZUVkaXRvcigpLGg9dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGEuY29sKTtudWxsIT1kJiZkLmlzT3BlbmVkKCkmJnRoaXMuaG90LmdldENlbGxWYWxpZGF0b3IoZC5yb3csZC5jb2wpP3RoaXMuaG90LmFkZEhvb2tPbmNl'@;
put 'KCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsKCk9Pnt0aGlzLnNvcnQoaCl9KTp0aGlzLnNvcnQoaCl9fWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBtSigpe2Nv'@;
put 'bnN0IGM9dGhpcy5nZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpO2lmKHFhKGMpKXRoaXMuc29ydEJ5U2V0dGluZ3MoYyk7ZWxzZXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldO3RoaXMuc29ydEJ5U2V0dGluZ3MobCl9fWZ1bmN0aW9uIEVsdChjLGwpe2Nv'@;
put 'bnN0IGE9VTRlKGwpO2lmKCExPT09WjRlKGMsbCl8fG51bGw9PT1hKXJldHVybjtjb25zdCBkPXRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYylbdGhpcy5wbHVnaW5LZXldO2lmKHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhhLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcixjLGQuaW5kaWNh'@;
put 'dG9yLGQuaGVhZGVyQWN0aW9uKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzKXtjb25zdCB2PXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0T3JkZXJPZkNvbHVtbihjKTt2YShsLC4uLihjPT5bImFyaWEtc29ydCIsY10pKHY/YCR7dn1lbmRpbmdgOiJub25lIikpfX1m'@;
put 'dW5jdGlvbiBUbHQoYyl7ITA9PT1jJiZ0aGlzLmhvdC52aWV3JiZXXyhoOSx0aGlzLG1KKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEFsdChjLGwsYSxkKXshMSE9PWdKKGwucm93LGwuY29sLGMpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQoYyxsLmNvbCkmJnRoaXMuaG90LmdldFNo'@;
put 'b3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKSYmKGQuY29sdW1uPSEwKX1mdW5jdGlvbiBmOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24ga2x0KGMpe3ZhciBsPWZ1bmN0aW9uIERsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu'@;
put 'dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz'@;
put 'dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts'@;
put 'XT1hLGN9Y29uc3QgUmx0PWNsYXNzIElsdHtjb25zdHJ1Y3RvcihsLGEpe2Y5KHRoaXMsInBsdWdpbiIsdm9pZCAwKSxmOSh0aGlzLCJob3QiLHZvaWQgMCksZjkodGhpcywiZW5kcG9pbnRzIixbXSksZjkodGhpcywic2V0dGluZ3MiLHZvaWQgMCksZjkodGhpcywic2V0dGluZ3NUeXBlIiwi'@;
put 'YXJyYXkiKSxmOSh0aGlzLCJjdXJyZW50RW5kcG9pbnQiLG51bGwpLGY5KHRoaXMsImNlbGxzVG9TZXRDYWNoZSIsW10pLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9dGhpcy5wbHVnaW4uaG90LHRoaXMuc2V0dGluZ3M9YX1pbml0RW5kcG9pbnRzKCl7dGhpcy5lbmRwb2ludHM9dGhpcy5wYXJz'@;
put 'ZVNldHRpbmdzKCksdGhpcy5yZWZyZXNoQWxsRW5kcG9pbnRzKCl9Z2V0RW5kcG9pbnQobCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncylbbF06dGhpcy5lbmRwb2ludHNbbF19Z2V0QWxsRW5k'@;
put 'cG9pbnRzKCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncyk6dGhpcy5lbmRwb2ludHN9ZmlsbE1pc3NpbmdFbmRwb2ludERhdGEobCl7cmV0dXJuIHRoaXMucGFyc2VTZXR0aW5ncyhsLmNhbGwo'@;
put 'dGhpcykpfXBhcnNlU2V0dGluZ3MobCl7Y29uc3QgYT1bXTtsZXQgZD1sO2lmKGR8fCJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLnNldHRpbmdzKXJldHVybiBkfHwoZD10aGlzLnNldHRpbmdzKSxZbihkLGg9Pntjb25zdCBmPXt9O3RoaXMuYXNzaWduU2V0dGluZyhoLGYsInJhbmdlcyIsW1sw'@;
put 'LHRoaXMuaG90LmNvdW50Um93cygpLTFdXSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmV2ZXJzZWRSb3dDb29yZHMiLCExKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlvblJvdyIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9u'@;
put 'IHJvdyBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uQ29sdW1uIixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRp'@;
put 'b24gY29sdW1uIGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdvcmsgcHJvcGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic291cmNlQ29sdW1uIixoLmRlc3RpbmF0aW9uQ29sdW1uKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJ0eXBl'@;
put 'Iiwic3VtIiksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZm9yY2VOdW1lcmljIiwhMSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImN1c3RvbUZ1bmN0aW9uIixudWxsKSx0aGlzLmFzc2lnblNldHRp'@;
put 'bmcoaCxmLCJyZWFkT25seSIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJvdW5kRmxvYXQiLCExKSxhLnB1c2goZil9KSxhO3RoaXMuc2V0dGluZ3NUeXBlPSJmdW5jdGlvbiJ9YXNzaWduU2V0dGluZyhsLGEsZCxoKXtpZigicmFuZ2VzIiE9PWR8fHZvaWQgMCE9PWxbZF0pe2lmKCJy'@;
put 'YW5nZXMiIT09ZHx8MCE9PWxbZF0ubGVuZ3RoKWlmKHZvaWQgMD09PWxbZF0pe2lmKGggaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBoO2FbZF09aH1lbHNlIGFbZF09ImRlc3RpbmF0aW9uUm93Ij09PWQmJmEucmV2ZXJzZWRSb3dDb29yZHM/dGhpcy5ob3QuY291bnRSb3dzKCktbFtkXS0xOmxb'@;
put 'ZF19ZWxzZSBhW2RdPWh9cmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24obCxhLGQpe2lmKCJmdW5jdGlvbiIhPT10aGlzLnNldHRpbmdzVHlwZSlyZXR1cm47Y29uc3QgaD1sLmluZGV4T2YoInJvdyIpPi0xPyJyb3ciOiJjb2wiLGY9dGhpcy5nZXRBbGxFbmRwb2ludHMoKTtZ'@;
put 'bihmLHY9Pnsicm93Ij09PWgmJnYuZGVzdGluYXRpb25Sb3c+PWEmJigiaW5zZXJ0X3JvdyI9PT1sP3YuYWx0ZXJSb3dPZmZzZXQ9ZDoicmVtb3ZlX3JvdyI9PT1sJiYodi5hbHRlclJvd09mZnNldD0tMSpkKSksImNvbCI9PT1oJiZ2LmRlc3RpbmF0aW9uQ29sdW1uPj1hJiYoImluc2VydF9j'@;
put 'b2wiPT09bD92LmFsdGVyQ29sdW1uT2Zmc2V0PWQ6InJlbW92ZV9jb2wiPT09bCYmKHYuYWx0ZXJDb2x1bW5PZmZzZXQ9LTEqZCkpfSksdGhpcy5yZXNldEFsbEVuZHBvaW50cyhmLCExKX1yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkLGgsZil7bGV0IHY9IShhcmd1'@;
put 'bWVudHMubGVuZ3RoPjUmJnZvaWQgMCE9PWFyZ3VtZW50c1s1XSl8fGFyZ3VtZW50c1s1XTtpZigiZnVuY3Rpb24iPT09dGhpcy5zZXR0aW5nc1R5cGUpe2NvbnN0IGJlPSgpPT4odGhpcy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlVmlld1JlbmRlciIsYmUpLHRoaXMucmVmcmVzaEFsbEVuZHBv'@;
put 'aW50cygpKTtyZXR1cm4gdm9pZCB0aGlzLmhvdC5hZGRIb29rT25jZSgiYmVmb3JlVmlld1JlbmRlciIsYmUpfWNvbnN0IE09bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixEPWwuaW5kZXhPZigicmVtb3ZlIik+LTE/LTE6MSxaPXRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksbmU9MD09'@;
put 'PWwuaW5kZXhPZigibW92ZV9yb3ciKSxjZT1hO1luKFosYmU9Pnsicm93Ij09PU0mJmJlLmRlc3RpbmF0aW9uUm93Pj1jZSYmKGJlLmFsdGVyUm93T2Zmc2V0PUQqZCksImNvbCI9PT1NJiZiZS5kZXN0aW5hdGlvbkNvbHVtbj49Y2UmJihiZS5hbHRlckNvbHVtbk9mZnNldD1EKmQpfSksdGhp'@;
put 'cy5yZXNldEFsbEVuZHBvaW50cyhaLCFuZSksWW4oWixuZT9iZT0+e3RoaXMuZXh0ZW5kRW5kcG9pbnRSYW5nZXMoYmUsY2UsaFswXSxoLmxlbmd0aCksdGhpcy5yZWNyZWF0ZVBoeXNpY2FsUmFuZ2VzKGJlKSx0aGlzLmNsZWFyT2Zmc2V0SW5mb3JtYXRpb24oYmUpfTpiZT0+e3RoaXMuc2hp'@;
put 'ZnRFbmRwb2ludENvb3JkaW5hdGVzKGJlLGNlKX0pLHYmJnRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpfWNsZWFyT2Zmc2V0SW5mb3JtYXRpb24obCl7bC5hbHRlclJvd09mZnNldD12b2lkIDAsbC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9ZXh0ZW5kRW5kcG9pbnRSYW5nZXMobCxhLGQs'@;
put 'aCl7WW4obC5yYW5nZXMsZj0+e2ZbMV0mJihhPj1mWzBdJiZhPD1mWzFdP2Q+ZlsxXT9mWzFdKz1oOmQ8ZlswXSYmKGZbMF0tPWgpOmQ+PWZbMF0mJmQ8PWZbMV0mJihmWzFdLT1oLGE8PWZbMF0mJihmWzBdKz0xLGZbMV0rPTEpKSl9KX1yZWNyZWF0ZVBoeXNpY2FsUmFuZ2VzKGwpe2NvbnN0'@;
put 'IGQ9W10saD1bXTtZbihsLnJhbmdlcyxmPT57Y29uc3Qgdj1bXTtpZihmWzFdKWZvcihsZXQgTT1mWzBdO008PWZbMV07TSsrKXYucHVzaCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KE0pKTtlbHNlIHYucHVzaCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KGZbMF0pKTtoLnB1c2godil9KSxZbiho'@;
put 'LGY9PntsZXQgdj1bXTtZbihmLChNLEQpPT57MD09PUQ/di5wdXNoKE0pOmZbRF0hPT1mW0QtMV0rMSYmKHYucHVzaChmW0QtMV0pLGQucHVzaCh2KSx2PVtdLHYucHVzaChNKSksRD09PWYubGVuZ3RoLTEmJih2LnB1c2goTSksZC5wdXNoKHYpKX0pfSksbC5yYW5nZXM9ZH1zaGlmdEVuZHBv'@;
put 'aW50Q29vcmRpbmF0ZXMobCxhKXtsLmFsdGVyUm93T2Zmc2V0JiYwIT09bC5hbHRlclJvd09mZnNldD8obC5kZXN0aW5hdGlvblJvdys9bC5hbHRlclJvd09mZnNldHx8MCxZbihsLnJhbmdlcyxkPT57WW4oZCwoaCxmKT0+e2g+PWEmJihkW2ZdKz1sLmFsdGVyUm93T2Zmc2V0fHwwKX0pfSkp'@;
put 'OmwuYWx0ZXJDb2x1bW5PZmZzZXQmJjAhPT1sLmFsdGVyQ29sdW1uT2Zmc2V0JiYobC5kZXN0aW5hdGlvbkNvbHVtbis9bC5hbHRlckNvbHVtbk9mZnNldHx8MCxsLnNvdXJjZUNvbHVtbis9bC5hbHRlckNvbHVtbk9mZnNldHx8MCl9cmVzZXRBbGxFbmRwb2ludHMoKXtsZXQgbD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRBbGxFbmRwb2ludHMoKSxhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07bC5zb21lKGg9Pntjb25zdCB2PWguYWx0ZXJDb2x1bW5P'@;
put 'ZmZzZXR8fDA7cmV0dXJuIGguZGVzdGluYXRpb25Sb3crKGguYWx0ZXJSb3dPZmZzZXR8fDApPj10aGlzLmhvdC5jb3VudFJvd3MoKXx8aC5kZXN0aW5hdGlvbkNvbHVtbit2Pj10aGlzLmhvdC5jb3VudENvbHMoKX0pfHwodGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sWW4obCxoPT57dGhpcy5y'@;
put 'ZXNldEVuZHBvaW50VmFsdWUoaCxhKX0pLHRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSl9cmVmcmVzaEFsbEVuZHBvaW50cygpe3RoaXMuY2VsbHNUb1NldENhY2hlPVtdLFlu'@;
put 'KHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksbD0+e3RoaXMuY3VycmVudEVuZHBvaW50PWwsdGhpcy5wbHVnaW4uY2FsY3VsYXRlKGwpLHRoaXMuc2V0RW5kcG9pbnRWYWx1ZShsLCJpbml0Iil9KSx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsLHRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5j'@;
put 'ZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX1yZWZyZXNoQ2hhbmdlZEVuZHBvaW50cyhsKXtjb25zdCBhPVtdO3RoaXMuY2VsbHNUb1NldENhY2hlPVtdLFluKGwsKGQsaCxmKT0+e2Ake2RbMl18fCIifWAhPWAke2RbM119YCYm'@;
put 'WW4odGhpcy5nZXRBbGxFbmRwb2ludHMoKSwodixNKT0+e3RoaXMuaG90LnByb3BUb0NvbChmW2hdWzFdKT09PXYuc291cmNlQ29sdW1uJiYtMT09PWEuaW5kZXhPZihNKSYmYS5wdXNoKE0pfSl9KSxZbihhLGQ9Pnt0aGlzLnJlZnJlc2hFbmRwb2ludCh0aGlzLmdldEVuZHBvaW50KGQpKX0p'@;
put 'LHRoaXMuaG90LnNldERhdGFBdENlbGwodGhpcy5jZWxsc1RvU2V0Q2FjaGUsIkNvbHVtblN1bW1hcnkucmVzZXQiKSx0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXX1yZWZyZXNoQ2VsbE1ldGFzKCl7dGhpcy5lbmRwb2ludHMuZm9yRWFjaChsPT57Y29uc3QgYT10aGlzLmhvdC50b1Zpc3VhbFJv'@;
put 'dyhsLmRlc3RpbmF0aW9uUm93KTtpZihudWxsIT09YSl7Y29uc3QgZD10aGlzLmhvdC5nZXRDZWxsTWV0YShhLGwuZGVzdGluYXRpb25Db2x1bW4pO2QucmVhZE9ubHk9bC5yZWFkT25seSxkLmNsYXNzTmFtZT0iY29sdW1uU3VtbWFyeVJlc3VsdCJ9fSl9cmVmcmVzaEVuZHBvaW50KGwpe3Ro'@;
put 'aXMuY3VycmVudEVuZHBvaW50PWwsdGhpcy5wbHVnaW4uY2FsY3VsYXRlKGwpLHRoaXMuc2V0RW5kcG9pbnRWYWx1ZShsKSx0aGlzLmN1cnJlbnRFbmRwb2ludD1udWxsfXJlc2V0RW5kcG9pbnRWYWx1ZShsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGg9bC5hbHRlckNvbHVtbk9mZnNldHx8MDt0aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFt0aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KyhhJiZsLmFsdGVyUm93T2Zmc2V0fHwwKSksdGhpcy5ob3QudG9WaXN1YWxDb2x1bW4o'@;
put 'bC5kZXN0aW5hdGlvbkNvbHVtbisoYT9oOjApKSwiIl0pfXNldEVuZHBvaW50VmFsdWUobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7'@;
put 'aWYobC5kZXN0aW5hdGlvblJvdz49dGhpcy5ob3QuY291bnRSb3dzKCl8fGwuZGVzdGluYXRpb25Db2x1bW4+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybiB2b2lkIHRoaXMudGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGlu'@;
put 'YXRpb25Sb3cpO2lmKG51bGwhPT1mKXtjb25zdCB2PXRoaXMuaG90LmdldENlbGxNZXRhKGYsbC5kZXN0aW5hdGlvbkNvbHVtbik7KCJpbml0Ij09PWF8fHYucmVhZE9ubHkhPT1sLnJlYWRPbmx5KSYmKHYucmVhZE9ubHk9bC5yZWFkT25seSx2LmNsYXNzTmFtZT0iY29sdW1uU3VtbWFyeVJl'@;
put 'c3VsdCIpfWlmKCghMD09PWwucm91bmRGbG9hdHx8TnVtYmVyLmlzSW50ZWdlcihsLnJvdW5kRmxvYXQpKSYmIWlzTmFOKGwucmVzdWx0KSl7Y29uc3Qgdj1sLnJvdW5kRmxvYXQ7bGV0IE09MDtOdW1iZXIuaXNJbnRlZ2VyKHYpJiYoTT1NYXRoLm1pbihNYXRoLm1heCgwLHYpLDEwMCkpLGwu'@;
put 'cmVzdWx0PWwucmVzdWx0LnRvRml4ZWQoTSl9ZD90aGlzLmhvdC5zZXREYXRhQXRDZWxsKGgsbC5kZXN0aW5hdGlvbkNvbHVtbixsLnJlc3VsdCwiQ29sdW1uU3VtbWFyeS5zZXQiKTp0aGlzLmNlbGxzVG9TZXRDYWNoZS5wdXNoKFtoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHRdKSxs'@;
put 'LmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFsdGVyQ29sdW1uT2Zmc2V0PXZvaWQgMH10aHJvd091dE9mQm91bmRzV2FybmluZygpe2lsKCJPbmUgb2YgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbnMnIGRlc3RpbmF0aW9uIHBvaW50cyB5b3UgcHJvdmlkZWQgaXMgYmV5b25kIHRoZSB0YWJs'@;
put 'ZSBib3VuZGFyaWVzISIpfX07ZnVuY3Rpb24gdkooYyl7cmV0dXJuIG51bGw9PWN8fGlzTmFOKGMpfWZ1bmN0aW9uIGFGKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBiSj0iY29sdW1uU3VtbWFyeSI7dmFyIHZUPW5ldyBXZWFrU2V0O2NsYXNzIFZsdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBMbHQoYyxs'@;
put 'KXsoZnVuY3Rpb24gT2x0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsdlQpLGZ1bmN0aW9uIFBsdChjLGwsYSl7'@;
put 'cmV0dXJuKGw9ZnVuY3Rpb24gRmx0KGMpe3ZhciBsPWZ1bmN0aW9uIEhsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj'@;
put 'dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs'@;
put 'P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImVuZHBvaW50cyIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGJKfXN0'@;
put 'YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIyMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbYkpdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2JK'@;
put 'XSx0aGlzLmVuZHBvaW50cz1uZXcgUmx0KHRoaXMsdGhpcy5zZXR0aW5ncyksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGFGKHZU'@;
put 'LGwsQmx0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBhRih2VCxsLHpsdCkuY2FsbChsLC4uLmQp'@;
put 'fSksdGhpcy5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBhRih2VCxsLGpsdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRI'@;
put 'b29rKCJiZWZvcmVDcmVhdGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJl'@;
put 'c2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1'@;
put 'bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfcm93IiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5'@;
put 'KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5y'@;
put 'ZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfcm93IixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X2NvbCIsYSxk'@;
put 'LG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVy'@;
put 'ZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMu'@;
put 'cmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX2NvbCIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93TW92ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1to'@;
put 'XTtyZXR1cm4gYUYodlQsbCxVbHQpLmNhbGwobCwuLi5kKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5lbmRwb2ludHM9bnVsbCx0aGlzLnNldHRpbmdzPW51bGwsdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBk'@;
put 'YXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmVuZHBvaW50cy5pbml0RW5kcG9pbnRzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9Y2FsY3VsYXRlKGwpe3N3aXRjaChsLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJzdW0iOmwucmVzdWx0'@;
put 'PXRoaXMuY2FsY3VsYXRlU3VtKGwpO2JyZWFrO2Nhc2UibWluIjpjYXNlIm1heCI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVNaW5NYXgobCxsLnR5cGUpO2JyZWFrO2Nhc2UiY291bnQiOmwucmVzdWx0PXRoaXMuY291bnRFbnRyaWVzKGwpO2JyZWFrO2Nhc2UiYXZlcmFnZSI6bC5yZXN1bHQ9'@;
put 'dGhpcy5jYWxjdWxhdGVBdmVyYWdlKGwpO2JyZWFrO2Nhc2UiY3VzdG9tIjpsLnJlc3VsdD1sLmN1c3RvbUZ1bmN0aW9uLmNhbGwodGhpcyxsKX19Y2FsY3VsYXRlU3VtKGwpe2xldCBhPTA7cmV0dXJuIFhhKGwucmFuZ2VzLGQ9PnthKz10aGlzLmdldFBhcnRpYWxTdW0oZCxsLnNvdXJjZUNv'@;
put 'bHVtbil9KSxhfWdldFBhcnRpYWxTdW0obCxhKXtsZXQgZD0wLGg9bFsxXXx8bFswXSxmPW51bGwsdj0wO2Rve2lmKGY9dGhpcy5nZXRDZWxsVmFsdWUoaCxhKSxmPXZKKGYpP251bGw6ZixudWxsIT09Zil7Y29uc3QgTT0oYCR7Zn1gLnNwbGl0KCIuIilbMV18fFtdKS5sZW5ndGh8fDE7TT52'@;
put 'JiYodj1NKX1kKz1mfHwwLGgtPTF9d2hpbGUoaD49bFswXSk7cmV0dXJuIE1hdGgucm91bmQoZCoxMCoqdikvMTAqKnZ9Y2FsY3VsYXRlTWluTWF4KGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gWGEobC5yYW5nZXMsaD0+e2NvbnN0IGY9dGhpcy5nZXRQYXJ0aWFsTWluTWF4KGgsbC5zb3VyY2VD'@;
put 'b2x1bW4sYSk7aWYobnVsbD09PWQmJm51bGwhPT1mJiYoZD1mKSxudWxsIT09Zilzd2l0Y2goYSl7Y2FzZSJtaW4iOmQ9TWF0aC5taW4oZCxmKTticmVhaztjYXNlIm1heCI6ZD1NYXRoLm1heChkLGYpfX0pLG51bGw9PT1kPyJOb3QgZW5vdWdoIGRhdGEiOmR9Z2V0UGFydGlhbE1pbk1heChs'@;
put 'LGEsZCl7bGV0IHYsaD1udWxsLGY9bFsxXXx8bFswXTtkb3tpZih2PXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksdj12Sih2KT9udWxsOnYsbnVsbD09PWgpaD12O2Vsc2UgaWYobnVsbCE9PXYpc3dpdGNoKGQpe2Nhc2UibWluIjpoPU1hdGgubWluKGgsdik7YnJlYWs7Y2FzZSJtYXgiOmg9TWF0'@;
put 'aC5tYXgoaCx2KX1mLT0xfXdoaWxlKGY+PWxbMF0pO3JldHVybiBofWNvdW50RW1wdHkobCxhKXtsZXQgZCxoPTAsZj1sWzFdfHxsWzBdO2Rve2Q9dGhpcy5nZXRDZWxsVmFsdWUoZixhKSxkPXZKKGQpP251bGw6ZCxudWxsPT09ZCYmKGgrPTEpLGYtPTF9d2hpbGUoZj49bFswXSk7cmV0dXJu'@;
put 'IGh9Y291bnRFbnRyaWVzKGwpe2xldCBhPTA7cmV0dXJuIFhhKGwucmFuZ2VzLGg9Pntjb25zdCBmPXZvaWQgMD09PWhbMV0/MTpoWzFdLWhbMF0rMSx2PXRoaXMuY291bnRFbXB0eShoLGwuc291cmNlQ29sdW1uKTthKz1mLGEtPXZ9KSxhfWNhbGN1bGF0ZUF2ZXJhZ2UobCl7cmV0dXJuIHRo'@;
put 'aXMuY2FsY3VsYXRlU3VtKGwpL3RoaXMuY291bnRFbnRyaWVzKGwpfWdldENlbGxWYWx1ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9WaXN1YWxSb3cobCksaD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtsZXQgZj10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsYSksdj0iIjtp'@;
put 'ZihudWxsIT09ZCYmbnVsbCE9PWgmJih2PXRoaXMuaG90LmdldENlbGxNZXRhKGQsaCkuY2xhc3NOYW1lfHwiIiksdi5pbmRleE9mKCJjb2x1bW5TdW1tYXJ5UmVzdWx0Iik+LTEpcmV0dXJuIG51bGw7aWYodGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LmZvcmNlTnVtZXJpYyYmKCJz'@;
put 'dHJpbmciPT10eXBlb2YgZiYmKGY9Zi5yZXBsYWNlKC8sLywiLiIpKSxmPXBhcnNlRmxvYXQoZikpLGlzTmFOKGYpJiYhdGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LnN1cHByZXNzRGF0YVR5cGVFcnJvcnMpdGhyb3cgbmV3IEVycm9yKGdsYENvbHVtblN1bW1hcnkgcGx1Z2luOiBj'@;
put 'ZWxsIGF0ICgke2x9LCAke2F9KSBpcyBub3QgaW4gYVx4MjAKICAgICAgICAgIG51bWVyaWMgZm9ybWF0LiBDYW5ub3QgZG8gdGhlIGNhbGN1bGF0aW9uLmApO3JldHVybiBmfX1mdW5jdGlvbiBCbHQoKXt0aGlzLmVuZHBvaW50cy5pbml0RW5kcG9pbnRzKCl9ZnVuY3Rpb24gamx0KGMpe3Zv'@;
put 'aWQgMCE9PWMuY29sdW1ucyYmdGhpcy5lbmRwb2ludHMucmVmcmVzaENlbGxNZXRhcygpfWZ1bmN0aW9uIHpsdChjLGwpe2MmJiJDb2x1bW5TdW1tYXJ5LnJlc2V0IiE9PWwmJiJDb2x1bW5TdW1tYXJ5LnNldCIhPT1sJiYibG9hZERhdGEiIT09bCYmdGhpcy5lbmRwb2ludHMucmVmcmVzaENo'@;
put 'YW5nZWRFbmRwb2ludHMoYyl9ZnVuY3Rpb24gVWx0KGMsbCl7dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oIm1vdmVfcm93IixjWzBdLGMubGVuZ3RoLGMsdGhpcy5wbHVnaW5OYW1lKSx0aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1'@;
put 'Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsbCxjLmxlbmd0aCxjLHRoaXMucGx1Z2luTmFtZSl9ZnVuY3Rpb24geUooYyxsLGEpe0o0ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSjRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUg'@;
put 'dGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBZXyhjLGwpe3JldHVybiBjLmdldCh3SihjLGwpKX1mdW5jdGlvbiBfSihjLGwsYSl7cmV0dXJuIGMuc2V0KHdKKGMsbCksYSksYX1mdW5jdGlvbiB3SihjLGwsYSl7aWYoImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHNGPW5ldyBXZWFrTWFwLGxGPW5ldyBXZWFrTWFwLGNGPW5ldyBX'@;
put 'ZWFrTWFwLFE0ZT1uZXcgV2Vha1NldDtjbGFzcyBlZ2V7Y29uc3RydWN0b3IoKXsoZnVuY3Rpb24gWmx0KGMsbCl7SjRlKGMsbCksbC5hZGQoYyl9KSh0aGlzLFE0ZSkseUoodGhpcyxzRiwhMCkseUoodGhpcyxsRixudWxsKSx5Sih0aGlzLGNGLG5ldyBSZXNpemVPYnNlcnZlcihsPT53SihR'@;
put 'NGUsdGhpcyxXbHQpLmNhbGwodGhpcyxsKSkpfXNldE9ic2VydmVkRWxlbWVudChsKXtfSihsRix0aGlzLGwpfXVub2JzZXJ2ZSgpe1lfKGNGLHRoaXMpLnVub2JzZXJ2ZShZXyhsRix0aGlzKSl9b2JzZXJ2ZSgpe19KKHNGLHRoaXMsITApLFlfKGNGLHRoaXMpLm9ic2VydmUoWV8obEYsdGhp'@;
put 'cykpfWRlc3Ryb3koKXtZXyhjRix0aGlzKS5kaXNjb25uZWN0KCl9fWZ1bmN0aW9uIFdsdChjKXshWV8oc0YsdGhpcykmJkFycmF5LmlzQXJyYXkoYykmJmMubGVuZ3RoP2MuZm9yRWFjaChsPT57bGV0e2JvcmRlckJveFNpemU6YX09bDtjb25zdHtpbmxpbmVTaXplOmQsYmxvY2tTaXplOmh9'@;
put 'PWFbMF07dGhpcy5ydW5Mb2NhbEhvb2tzKCJyZXNpemUiLGQsaCl9KTpfSihzRix0aGlzLCExKX1mdW5jdGlvbiBwOShjLGwsYSl7KGZ1bmN0aW9uIFlsdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxl'@;
put 'bWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gSGwoYyxsKXtyZXR1cm4gYy5nZXQodGdlKGMsbCkpfWZ1bmN0aW9uIERnKGMsbCxhKXtyZXR1cm4gYy5zZXQodGdlKGMsbCksYSksYX1mdW5jdGlvbiB0Z2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVRsKGVnZSx5MSk7dmFyIGc5PW5ldyBXZWFrTWFwLENKPW5ldyBXZWFr'@;
put 'TWFwLElnPW5ldyBXZWFrTWFwLEttPW5ldyBXZWFrTWFwLHFtPW5ldyBXZWFrTWFwLHVGPW5ldyBXZWFrTWFwLEdfPW5ldyBXZWFrTWFwO2NsYXNzIG05e3N0YXRpYyBnZXQgQ0xBU1NfRURJVE9SX0NPTlRBSU5FUigpe3JldHVybiJodENvbW1lbnRzQ29udGFpbmVyIn1zdGF0aWMgZ2V0IENM'@;
put 'QVNTX0VESVRPUigpe3JldHVybiJodENvbW1lbnRzIn1zdGF0aWMgZ2V0IENMQVNTX0lOUFVUKCl7cmV0dXJuImh0Q29tbWVudFRleHRBcmVhIn1zdGF0aWMgZ2V0IENMQVNTX0NFTEwoKXtyZXR1cm4iaHRDb21tZW50Q2VsbCJ9Y29uc3RydWN0b3IobCxhKXt2YXIgZD10aGlzO3A5KHRoaXMs'@;
put 'Zzksdm9pZCAwKSxwOSh0aGlzLENKLCExKSxwOSh0aGlzLElnLG51bGwpLHA5KHRoaXMsS20sdm9pZCAwKSxwOSh0aGlzLHFtLHZvaWQgMCkscDkodGhpcyx1RiwhMCkscDkodGhpcyxHXyxuZXcgZWdlKSxEZyhnOSx0aGlzLGwpLERnKENKLHRoaXMsYSksRGcoS20sdGhpcyx0aGlzLmNyZWF0'@;
put 'ZUVkaXRvcigpKSxEZyhxbSx0aGlzLEhsKEttLHRoaXMpLnN0eWxlKSxIbChHXyx0aGlzKS5zZXRPYnNlcnZlZEVsZW1lbnQodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSksSGwoR18sdGhpcykuYWRkTG9jYWxIb29rKCJyZXNpemUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5n'@;
put 'dGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygicmVzaXplIiwuLi5mKX0pLHRoaXMuaGlkZSgpfXNldFBvc2l0aW9uKGwsYSl7SGwocW0sdGhpcykubGVmdD1gJHtsfXB4YCxIbChxbSx0aGlzKS50b3A9YCR7YX1w'@;
put 'eGB9c2V0U2l6ZShsLGEpe2lmKGwmJmEpe2NvbnN0IGQ9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtkLnN0eWxlLndpZHRoPWAke2x9cHhgLGQuc3R5bGUuaGVpZ2h0PWAke2F9cHhgfX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOmF1KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLGhlaWdodDpNdSh0'@;
put 'aGlzLmdldElucHV0RWxlbWVudCgpKX19b2JzZXJ2ZVNpemUoKXtIbChHXyx0aGlzKS5vYnNlcnZlKCl9cmVzZXRTaXplKCl7Y29uc3QgbD10aGlzLmdldElucHV0RWxlbWVudCgpO2wuc3R5bGUud2lkdGg9IiIsbC5zdHlsZS5oZWlnaHQ9IiJ9c2V0UmVhZE9ubHlTdGF0ZShsKXt0aGlzLmdl'@;
put 'dElucHV0RWxlbWVudCgpLnJlYWRPbmx5PWx9c2hvdygpe0hsKHFtLHRoaXMpLmRpc3BsYXk9ImJsb2NrIixEZyh1Rix0aGlzLCExKX1oaWRlKCl7SGwoR18sdGhpcykudW5vYnNlcnZlKCksSGwodUYsdGhpcyl8fChIbChxbSx0aGlzKS5kaXNwbGF5PSJub25lIiksRGcodUYsdGhpcywhMCl9'@;
put 'aXNWaXNpYmxlKCl7cmV0dXJuImJsb2NrIj09PUhsKHFtLHRoaXMpLmRpc3BsYXl9c2V0VmFsdWUoKXtjb25zdCBhPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIpfHwiIjt0aGlzLmdldElucHV0RWxlbWVudCgpLnZhbHVlPWF9Z2V0'@;
put 'VmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZX1pc0ZvY3VzZWQoKXtyZXR1cm4gSGwoZzksdGhpcykuYWN0aXZlRWxlbWVudD09PXRoaXMuZ2V0SW5wdXRFbGVtZW50KCl9Zm9jdXMoKXt0aGlzLmdldElucHV0RWxlbWVudCgpLmZvY3VzKCl9Y3JlYXRlRWRpdG9y'@;
put 'KCl7Y29uc3QgbD1IbChnOSx0aGlzKS5jcmVhdGVFbGVtZW50KCJkaXYiKSxhPUhsKGc5LHRoaXMpLmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIGwuc3R5bGUuZGlzcGxheT0ibm9uZSIsRGcoSWcsdGhpcyxIbChnOSx0aGlzKS5jcmVhdGVFbGVtZW50KCJkaXYiKSksSGwoSWcs'@;
put 'dGhpcykuc2V0QXR0cmlidXRlKCJkaXIiLEhsKENKLHRoaXMpPyJydGwiOiJsdHIiKSxUaShIbChJZyx0aGlzKSxtOS5DTEFTU19FRElUT1JfQ09OVEFJTkVSKSxIbChnOSx0aGlzKS5ib2R5LmFwcGVuZENoaWxkKEhsKElnLHRoaXMpKSxUaShsLG05LkNMQVNTX0VESVRPUiksVGkoYSxtOS5D'@;
put 'TEFTU19JTlBVVCksYS5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksbC5hcHBlbmRDaGlsZChhKSxIbChJZyx0aGlzKS5hcHBlbmRDaGlsZChsKSxsfWdldElucHV0RWxlbWVudCgpe3JldHVybiBIbChLbSx0aGlzKS5xdWVyeVNlbGVjdG9yKGAuJHttOS5DTEFTU19JTlBVVH1g'@;
put 'KX1nZXRFZGl0b3JFbGVtZW50KCl7cmV0dXJuIEhsKEttLHRoaXMpfWRlc3Ryb3koKXtjb25zdCBsPUhsKElnLHRoaXMpP0hsKElnLHRoaXMpLnBhcmVudE5vZGU6bnVsbDtIbChLbSx0aGlzKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKEhsKEttLHRoaXMpKSxEZyhLbSx0aGlzLG51bGwpLERn'@;
put 'KHFtLHRoaXMsbnVsbCksSGwoR18sdGhpcykuZGVzdHJveSgpLGwmJmwucmVtb3ZlQ2hpbGQoSGwoSWcsdGhpcykpfX1UbChtOSx5MSk7Y29uc3QgR2x0PW05O2Z1bmN0aW9uIFNKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiAkbHQoYyl7dmFyIGw9ZnVuY3Rpb24gS2x0KGMsbCl7aWYoIm9i'@;
put 'amVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2'@;
put 'ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51'@;
put 'bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBuZ2V7Y29uc3RydWN0b3IobCl7U0oodGhpcywid2FzTGFzdEFjdGlvblNob3ciLCEwKSxTSih0aGlzLCJzaG93RGVib3VuY2VkIixudWxsKSxTSih0aGlzLCJoaWRpbmdUaW1lciIsbnVsbCks'@;
put 'dGhpcy51cGRhdGVEZWxheShsKX1oaWRlKCl7dGhpcy53YXNMYXN0QWN0aW9uU2hvdz0hMSx0aGlzLmhpZGluZ1RpbWVyPXNldFRpbWVvdXQoKCk9PnshMT09PXRoaXMud2FzTGFzdEFjdGlvblNob3cmJnRoaXMucnVuTG9jYWxIb29rcygiaGlkZSIpfSwyNTApfXNob3cobCl7dGhpcy53YXNM'@;
put 'YXN0QWN0aW9uU2hvdz0hMCx0aGlzLnNob3dEZWJvdW5jZWQobCl9Y2FuY2VsSGlkaW5nKCl7dGhpcy53YXNMYXN0QWN0aW9uU2hvdz0hMCxjbGVhclRpbWVvdXQodGhpcy5oaWRpbmdUaW1lciksdGhpcy5oaWRpbmdUaW1lcj1udWxsfXVwZGF0ZURlbGF5KCl7dGhpcy5zaG93RGVib3VuY2Vk'@;
put 'PVNFKGE9Pnt0aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoInNob3ciLGEuZnJvbS5yb3csYS5mcm9tLmNvbCl9LGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToyNTApfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9j'@;
put 'YWxIb29rcygpfX1UbChuZ2UseTEpO2NvbnN0IEpsdD1uZ2Usb3M9Ii0tLS0tLS0tLSI7ZnVuY3Rpb24gdjkoYyxsKXtjb25zdCBhPXt9O3JldHVybiBZbihjLGQ9PntkLmZvckFsbCgoaCxmKT0+e2g+PTAmJmY+PTAmJihhW2hdfHwoYVtoXT1bXSksYVtoXVtmXT1sKGgsZikpfSl9KSxhfWZ1'@;
put 'bmN0aW9uIFhtKGMsbCxhLGQsaCl7WW4oYyxmPT57Zi5mb3JBbGwoKHYsTSk9Pnt2Pj0wJiZNPj0wJiZmdW5jdGlvbiBpY3QoYyxsLGEsZCxoLGYpe2NvbnN0IHY9aChjLGwpO2xldCBNPWQ7di5jbGFzc05hbWUmJihNPSJ2ZXJ0aWNhbCI9PT1hP2Z1bmN0aW9uIG5jdChjLGwpe3JldHVybi0x'@;
put 'IT09Yy5pbmRleE9mKGwpP2M6YCR7Yy5yZXBsYWNlKCJodFRvcCIsIiIpLnJlcGxhY2UoImh0TWlkZGxlIiwiIikucmVwbGFjZSgiaHRCb3R0b20iLCIiKS5yZXBsYWNlKCIgICIsIiIpfSAke2x9YH0odi5jbGFzc05hbWUsZCk6ZnVuY3Rpb24gcmN0KGMsbCl7cmV0dXJuLTEhPT1jLmluZGV4'@;
put 'T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0TGVmdCIsIiIpLnJlcGxhY2UoImh0Q2VudGVyIiwiIikucmVwbGFjZSgiaHRSaWdodCIsIiIpLnJlcGxhY2UoImh0SnVzdGlmeSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7bH1gfSh2LmNsYXNzTmFtZSxkKSksZihjLGwsImNsYXNzTmFtZSIsTSl9'@;
put 'KHYsTSxsLGEsZCxoKX0pfSl9ZnVuY3Rpb24gcmdlKGMpe3JldHVybmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQiPlx1MjcxMzwvc3Bhbj4ke2N9YH1mdW5jdGlvbiBkRihjLGwpe2xldCBhPSExO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZZbihjLGQ9PihkLmZvckFsbCgoaCxmKT0+e2lmKGg+'@;
put 'PTAmJmY+PTAmJmwoaCxmKSlyZXR1cm4gYT0hMCwhMX0pLGEpKSxhfWZ1bmN0aW9uIGhGKGMsbCl7Y29uc3QgYT17dG9wOjAsbGVmdDowfTtpZihsIT09Yy5vd25lckRvY3VtZW50KXtjb25zdHtmcmFtZUVsZW1lbnQ6ZH09bC5kZWZhdWx0Vmlldyx7dG9wOmgsbGVmdDpmfT1kLmdldEJvdW5k'@;
put 'aW5nQ2xpZW50UmVjdCgpO2EudG9wPWgsYS5sZWZ0PWZ9cmV0dXJuIGF9ZnVuY3Rpb24gJF8oYyxsLGEpe2lnZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gaWdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0'@;
put 'ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBKbShjLGwsYSl7cmV0dXJuIGMuc2V0KFVkKGMsbCksYSksYX1mdW5jdGlvbiBKYShjLGwpe3JldHVybiBjLmdldChVZChjLGwpKX1mdW5jdGlvbiBVZChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6'@;
put 'Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgZkY9ImNvbW1lbnRzIixSZz0iY29tbWVudCIsYlQ9InZhbHVlIixwRj0icmVhZE9ubHki'@;
put 'LHlUPWZGLE1KPWBwbHVnaW46JHtmRn1gO3ZhciBBbD1uZXcgV2Vha01hcCx6cD1uZXcgV2Vha01hcCxnRj1uZXcgV2Vha01hcCxtRj1uZXcgV2Vha01hcCx4Sj1uZXcgV2Vha01hcCx2Rj1uZXcgV2Vha01hcCxQaD1uZXcgV2Vha1NldDtjbGFzcyBkY3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rv'@;
put 'cigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gYWN0KGMsbCl7aWdlKGMsbCksbC5hZGQoYyl9KHRoaXMsUGgpLGZ1bmN0aW9uIHNjdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbGN0KGMpe3ZhciBsPWZ1bmN0aW9uIGNjdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMp'@;
put 'cmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmlt'@;
put 'aXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJh'@;
put 'YmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInJhbmdlIix7fSksJF8odGhpcyxBbCxudWxsKSwkXyh0aGlzLHpwLG51bGwpLCRfKHRoaXMsZ0YsITEpLCRfKHRoaXMsbUYsITEpLCRfKHRoaXMseEosbnVsbCksJF8odGhpcyx2RiwiIil9c3RhdGljIGdldCBQTFVHSU5fS0VZ'@;
put 'KCl7cmV0dXJuIGZGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDYwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntkaXNwbGF5RGVsYXk6MjUwfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbZkZdfWVuYWJsZVBsdWdp'@;
put 'bigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoSmEoQWwsdGhpcyl8fChKbShBbCx0aGlzLG5ldyBHbHQodGhpcy5ob3Qucm9vdERvY3VtZW50LHRoaXMuaG90LmlzUnRsKCkpKSxKYShBbCx0aGlzKS5hZGRMb2NhbEhvb2soInJlc2l6ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1l'@;
put 'bnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gVWQoUGgsbCx5Y3QpLmNhbGwobCwuLi5kKX0pKSxKYSh6cCx0aGlzKXx8Sm0oenAsdGhpcyxuZXcgSmx0KHRoaXMuZ2V0U2V0dGluZygiZGlzcGxheURlbGF5IikpKSx0aGlzLmFk'@;
put 'ZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsYT0+dGhpcy5hZGRUb0NvbnRleHRNZW51KGEpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyZXIiLChhLGQsaCxmLHYsTSk9PlVkKFBoLHRoaXMsbWN0KS5jYWxsKHRoaXMsYSxNKSksdGhpcy5hZGRIb29rKCJhZnRlclNj'@;
put 'cm9sbCIsKCk9PlVkKFBoLHRoaXMsX2N0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyQmVnaW5FZGl0aW5nIiwoKT0+dGhpcy5oaWRlKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEb2N1bWVudEtleURvd24iLGE9PlVkKFBoLHRoaXMsYWdlKS5jYWxsKHRoaXMsYSkpLHRoaXMuYWRk'@;
put 'SG9vaygiYmVmb3JlQ29tcG9zaXRpb25TdGFydCIsYT0+VWQoUGgsdGhpcyxhZ2UpLmNhbGwodGhpcyxhKSksdGhpcy5hZGRIb29rKCJhZnRlclNldFRoZW1lIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJn'@;
put 'dW1lbnRzW2hdO3JldHVybiBVZChQaCxsLHdjdCkuY2FsbChsLC4uLmQpfSksSmEoenAsdGhpcykuYWRkTG9jYWxIb29rKCJoaWRlIiwoKT0+dGhpcy5oaWRlKCkpLEphKHpwLHRoaXMpLmFkZExvY2FsSG9vaygic2hvdyIsKGEsZCk9PnRoaXMuc2hvd0F0Q2VsbChhLGQpKSx0aGlzLnJlZ2lz'@;
put 'dGVyU2hvcnRjdXRzKCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtKYSh6cCx0aGlzKS51cGRhdGVEZWxheSh0aGlzLmdldFNldHRpbmcoImRpc3BsYXlEZWxheSIpKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1'@;
put 'Z2luKCl7dGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKSxhPWwuZ2V0Q29udGV4dCgiZ3JpZCIpLGQ9bC5hZGRDb250ZXh0KE1KKTthLmFkZFNob3J0'@;
put 'Y3V0KHtrZXlzOltbIkNvbnRyb2wiLCJBbHQiLCJNIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgaD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO0ptKG1GLHRoaXMsITApLHRoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKCk9Pnt0aGlzLnNldFJhbmdlKGgpLHRoaXMuc2hvdygp'@;
put 'LHRoaXMuZm9jdXNFZGl0b3IoKSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKE1KKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57Sm0obUYsdGhpcywhMSl9KX0pfSxzdG9wUHJvcGFnYXRpb246ITAscnVuT25seUlmOigpPT57dmFyIGg7cmV0dXJuIG51bGw9PT0oaD10aGlzLmhvdC5n'@;
put 'ZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09aD92b2lkIDA6aC5oaWdobGlnaHQuaXNDZWxsKCl9LGdyb3VwOnlUfSksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9PntKYShBbCx0aGlzKS5zZXRWYWx1ZShKYSh2Rix0aGlzKSksdGhpcy5oaWRl'@;
put 'KCksbC5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpfSxydW5Pbmx5SWY6KCk9PkphKEFsLHRoaXMpLmlzVmlzaWJsZSgpJiZKYShBbCx0aGlzKS5pc0ZvY3VzZWQoKSxncm91cDp5VH0pLGQuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6'@;
put 'KCk9Pnt0aGlzLmhpZGUoKSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LHJ1bk9ubHlJZjooKT0+SmEoQWwsdGhpcykuaXNWaXNpYmxlKCkmJkphKEFsLHRoaXMpLmlzRm9jdXNlZCgpLGdyb3VwOnlUfSksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJTaGlmdCIsIlRhYiJdLFsiVGFi'@;
put 'Il1dLGZvcndhcmRUb0NvbnRleHQ6bC5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJhY2s6KCk9PntKYShBbCx0aGlzKS5zZXRWYWx1ZShKYShBbCx0aGlzKS5nZXRWYWx1ZSgpKSx0aGlzLmhpZGUoKSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LGdyb3VwOnlUfSl9dW5yZWdpc3Rl'@;
put 'clNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKHlUKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPXRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVt'@;
put 'ZW50KCk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW92ZXIiLGQ9PlVkKFBoLHRoaXMscGN0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIixkPT5VZChQaCx0aGlzLGhjdCkuY2FsbCh0aGlz'@;
put 'LGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5VZChQaCx0aGlzLGdjdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJmb2N1cyIsKCk9PlVkKFBoLHRoaXMsYmN0KS5jYWxsKHRoaXMpKSx0aGlz'@;
put 'LmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsImJsdXIiLCgpPT5VZChQaCx0aGlzLHZjdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpLCJtb3VzZWRvd24iLGQ9PlVkKFBoLHRoaXMsZmN0'@;
put 'KS5jYWxsKHRoaXMsZCkpfXNldFJhbmdlKGwpe3RoaXMucmFuZ2U9bH1jbGVhclJhbmdlKCl7dGhpcy5yYW5nZT17fX10YXJnZXRJc0NlbGxXaXRoQ29tbWVudChsKXtjb25zdCBhPUltKGwudGFyZ2V0LCJURCIsIlRCT0RZIik7cmV0dXJuISEoYSYmcGEoYSwiaHRDb21tZW50Q2VsbCIpJiZJ'@;
put 'bShhLFt0aGlzLmhvdC5yb290RWxlbWVudF0pKX10YXJnZXRJc0NvbW1lbnRUZXh0QXJlYShsKXtyZXR1cm4gdGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKT09PWwudGFyZ2V0fXNldENvbW1lbnQobCl7aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2lu'@;
put 'ZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO2NvbnN0IGE9SmEoQWwsdGhpcykuZ2V0VmFsdWUoKTtsZXQgZD0iIjtudWxsIT1sP2Q9bDpudWxsIT1hJiYoZD1hKSx0aGlzLnVwZGF0ZUNvbW1lbnRNZXRh'@;
put 'KHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx7W2JUXTpkfSksdGhpcy5ob3QucmVuZGVyKCl9c2V0Q29tbWVudEF0Q2VsbChsLGEsZCl7dGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpfSksdGhpcy5zZXRDb21tZW50KGQp'@;
put 'fXJlbW92ZUNvbW1lbnQoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO2lmKCF0aGlzLnJhbmdlLmZyb20pdGhyb3cgbmV3IEVycm9yKCdCZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QsIGZpcnN0IHNldCBjZWxsIHJhbmdl'@;
put 'IChob3QuZ2V0UGx1Z2luKCJjb21tZW50Iikuc2V0UmFuZ2UoKSknKTt0aGlzLmhvdC5zZXRDZWxsTWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wsUmcpLGwmJnRoaXMuaG90LnJlbmRlcigpLHRoaXMuaGlkZSgpfXJlbW92ZUNvbW1lbnRBdENlbGwobCxhKXts'@;
put 'ZXQgZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3RoaXMuc2V0UmFuZ2Uoe2Zyb206dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKX0pLHRoaXMucmVtb3ZlQ29tbWVudChkKX1nZXRDb21tZW50KCl7cmV0dXJuIHRoaXMu'@;
put 'Z2V0Q29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLGJUKX1nZXRDb21tZW50QXRDZWxsKGwsYSl7cmV0dXJuIHRoaXMuZ2V0Q29tbWVudE1ldGEobCxhLGJUKX1zaG93KCl7dmFyIGw7aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'J0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO2NvbnN0e2Zyb206e3JvdzphLGNvbDpkfX09dGhpcy5yYW5nZTtpZihhPDB8fGE+dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMXx8'@;
put 'ZDwwfHxkPnRoaXMuaG90LmNvdW50U291cmNlQ29scygpLTEpcmV0dXJuITE7Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wpO3JldHVybiBKYSh6cCx0aGlzKS5jYW5jZWxIaWRpbmcoKSxKYShBbCx0aGlzKS5zZXRW'@;
put 'YWx1ZShudWxsIT09KGw9aFtSZ10/aFtSZ11bYlRdOm51bGwpJiZ2b2lkIDAhPT1sP2w6IiIpLEphKEFsLHRoaXMpLnNob3coKSx0aGlzLnJlZnJlc2hFZGl0b3IoITApLCEwfXNob3dBdENlbGwobCxhKXtyZXR1cm4gdGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENv'@;
put 'b3JkcyhsLGEpfSksdGhpcy5zaG93KCl9aGlkZSgpe0phKEFsLHRoaXMpLmhpZGUoKX1yZWZyZXNoRWRpdG9yKCl7aWYoIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdfHx0aGlzLnJhbmdlLmZyb20mJkphKEFsLHRoaXMpLmlzVmlzaWJs'@;
put 'ZSgpKSlyZXR1cm47Y29uc3R7cm93SW5kZXhNYXBwZXI6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT10aGlzLmhvdCx7cm93OmgsY29sOmZ9PXRoaXMucmFuZ2UuZnJvbTtsZXQgdj1hLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5k'@;
put 'ZXgoZik7Y29uc3QgRD1udWxsPT09djtKYShBbCx0aGlzKS5zZXRQb3NpdGlvbigwLDApLG51bGw9PT12JiYodj1hLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoYS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoaCwtMSkpKSxudWxsPT09TSYmKE09ZC5nZXRSZW5kZXJhYmxlRnJvbVZp'@;
put 'c3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYsLTEpKSk7Y29uc3QgWj1udWxsPT09dixuZT1udWxsPT09TTt2PXY/PzAsTT1NPz8wO2NvbnN0e3Jvb3RXaW5kb3c6Y2Usdmlldzp7X3d0OmJlfX09dGhpcy5ob3Qse3d0VGFibGU6RWV9PWJlLEJlPWJlLmdldENlbGwoe3Jv'@;
put 'dzp2LGNvbDpNfSwhMCkscWU9dGhpcy5nZXRDb21tZW50TWV0YShoLGYsInN0eWxlIik7cWU/SmEoQWwsdGhpcykuc2V0U2l6ZShxZS53aWR0aCxxZS5oZWlnaHQpOkphKEFsLHRoaXMpLnJlc2V0U2l6ZSgpO2NvbnN0IHJ0PW5lPzA6RWUuZ2V0Q29sdW1uV2lkdGgoTSkscHQ9RCYmIVo/TXUo'@;
put 'QmUpOjAse2xlZnQ6ZHQsdG9wOkp0LHdpZHRoOnZuLGhlaWdodDpDbn09QmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3dpZHRoOnRuLGhlaWdodDpNbn09SmEoQWwsdGhpcykuZ2V0U2l6ZSgpLHtpbm5lcldpZHRoOkNyLGlubmVySGVpZ2h0OkdyfT10aGlzLmhvdC5yb290V2luZG93LGdy'@;
put 'PXRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsR249aDAodGhpcy5ob3Qucm9vdERvY3VtZW50KSxvaT1DJCh0aGlzLmhvdC5yb290V2luZG93KT9HbjowLF9pPVMkKHRoaXMuaG90LnJvb3RXaW5kb3cpP0duOjA7bGV0IE9uPWR0K2NlLnNjcm9sbFgrcnQsenI9SnQrY2Uu'@;
put 'c2Nyb2xsWStwdDt0aGlzLmhvdC5pc1J0bCgpJiYoT24tPXRuK3J0KSx0aGlzLmhvdC5pc0x0cigpJiZkdCt2bit0bj5Dci1vaT9Pbj1kdCtjZS5zY3JvbGxYLXRuLTE6dGhpcy5ob3QuaXNSdGwoKSYmT248LShnci5zY3JvbGxXaWR0aC1nci5jbGllbnRXaWR0aCkmJihPbj1kdCtjZS5zY3Jv'@;
put 'bGxYK3J0KzEpLEp0K01uPkdyLV9pJiYoenItPU1uLUNuKzEpLEphKEFsLHRoaXMpLnNldFBvc2l0aW9uKE9uLHpyKSxKYShBbCx0aGlzKS5zZXRSZWFkT25seVN0YXRlKHRoaXMuZ2V0Q29tbWVudE1ldGEoaCxmLHBGKSksSmEoQWwsdGhpcykub2JzZXJ2ZVNpemUoKX1mb2N1c0VkaXRvcigp'@;
put 'e0phKEFsLHRoaXMpLmZvY3VzKCl9dXBkYXRlQ29tbWVudE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKVtSZ107bGV0IGY7aD8oZj1nMShoKSxNRShmLGQpKTpmPWQsdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLFJnLGYpfWdldENvbW1lbnRNZXRhKGwsYSxk'@;
put 'KXtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSk7aWYoaFtSZ10pcmV0dXJuIGhbUmddW2RdfWFkZFRvQ29udGV4dE1lbnUobCl7bC5pdGVtcy5wdXNoKHtuYW1lOm9zfSxmdW5jdGlvbiBlY3QoYyl7cmV0dXJue2tleToiY29tbWVudHNBZGRFZGl0IixuYW1lKCl7dmFyIGw7Y29u'@;
put 'c3QgYT1udWxsPT09KGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7cmV0dXJuIG51bGwhPWEmJmEuaXNDZWxsKCkmJmMuZ2V0Q29tbWVudEF0Q2VsbChhLnJvdyxhLmNvbCk/dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGNxKTp0'@;
put 'aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobHEpfSxjYWxsYmFjaygpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2Muc2V0UmFuZ2UobCksYy5zaG93KCksYy5mb2N1c0VkaXRvcigpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3Jl'@;
put 'dHVybiEhKCFsfHxsLmhpZ2hsaWdodC5pc0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJnRoaXMuc2VsZWN0aW9uLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZFJvd3MoKXx8MD09PXRoaXMuY291bnRSZW5kZXJl'@;
put 'ZENvbHMoKSl9fX0odGhpcyksZnVuY3Rpb24gdGN0KGMpe3JldHVybntrZXk6ImNvbW1lbnRzUmVtb3ZlIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh1cSl9LGNhbGxiYWNrKCl7dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmZvckFsbCgoYSxkKT0+e2E+PTAm'@;
put 'JmQ+PTAmJmMucmVtb3ZlQ29tbWVudEF0Q2VsbChhLGQsITEpfSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghbHx8bC5oaWdobGlnaHQuaXNIZWFkZXIoKXx8dGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVSb3dT'@;
put 'ZWxlY3RlZCgpJiZ0aGlzLnNlbGVjdGlvbi5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRSb3dzKCl8fDA9PT10aGlzLmNvdW50UmVuZGVyZWRDb2xzKCkpfX19KHRoaXMpLGZ1bmN0aW9uIG9jdChjKXtyZXR1cm57a2V5OiJjb21tZW50c1JlYWRPbmx5'@;
put 'IixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZHEpO3JldHVybiBkRih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoZCxoKT0+Yy5nZXRDb21tZW50TWV0YShkLGgscEYpKT9yZ2UobCk6bH0sY2FsbGJhY2soKXt0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZm9y'@;
put 'QWxsKChhLGQpPT57aWYoYT49MCYmZD49MCl7Y29uc3QgaD0hIWMuZ2V0Q29tbWVudE1ldGEoYSxkLHBGKTtjLnVwZGF0ZUNvbW1lbnRNZXRhKGEsZCx7W3BGXTohaH0pfX0pfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFsfHxsLmhp'@;
put 'Z2hsaWdodC5pc0hlYWRlcigpfHwhYy5nZXRDb21tZW50QXRDZWxsKGwuaGlnaGxpZ2h0LnJvdyxsLmhpZ2hsaWdodC5jb2wpfHx0aGlzLnNlbGVjdGlvbi5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJnRoaXMuc2VsZWN0aW9uLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291'@;
put 'bnRSZW5kZXJlZFJvd3MoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZENvbHMoKSl9fX0odGhpcykpfWdldEVkaXRvcklucHV0RWxlbWVudCgpe3JldHVybiBKYShBbCx0aGlzKS5nZXRJbnB1dEVsZW1lbnQoKX1kZXN0cm95KCl7dmFyIGwsYTtudWxsPT09KGw9SmEoQWwsdGhpcykpfHx2b2lk'@;
put 'IDA9PT1sfHxsLmRlc3Ryb3koKSxudWxsPT09KGE9SmEoenAsdGhpcykpfHx2b2lkIDA9PT1hfHxhLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGhjdChjKXtpZih0aGlzLmhvdC52aWV3JiZ0aGlzLmhvdC52aWV3Ll93dCYmIUphKGdGLHRoaXMpJiYhdGhpcy50YXJnZXRJ'@;
put 'c0NvbW1lbnRUZXh0QXJlYShjKSl7Y29uc3QgbD1JbShjLnRhcmdldCwiVEQiLCJUQk9EWSIpO2xldCBhPW51bGw7bCYmKGE9dGhpcy5ob3QuZ2V0Q29vcmRzKGwpKSwoIWx8fHRoaXMucmFuZ2UuZnJvbSYmYSYmKHRoaXMucmFuZ2UuZnJvbS5yb3chPT1hLnJvd3x8dGhpcy5yYW5nZS5mcm9t'@;
put 'LmNvbCE9PWEuY29sKSkmJnRoaXMuaGlkZSgpfX1mdW5jdGlvbiBmY3QoYyl7Yy5zdG9wUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBwY3QoYyl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90O2lmKCEoSmEoZ0YsdGhpcyl8fEphKEFsLHRoaXMpLmlzRm9jdXNlZCgpfHxwYShjLnRhcmdl'@;
put 'dCwid3RCb3JkZXIiKXx8SmEoeEosdGhpcyk9PT1jLnRhcmdldCkmJkphKEFsLHRoaXMpKWlmKEptKHhKLHRoaXMsbC5lbGVtZW50RnJvbVBvaW50KGMuY2xpZW50WCxjLmNsaWVudFkpKSx0aGlzLnRhcmdldElzQ2VsbFdpdGhDb21tZW50KGMpKXtjb25zdCBhPXRoaXMuaG90Ll9jcmVhdGVD'@;
put 'ZWxsUmFuZ2UodGhpcy5ob3QuZ2V0Q29vcmRzKGMudGFyZ2V0KSk7SmEoenAsdGhpcykuc2hvdyhhKX1lbHNlIFJtKGMudGFyZ2V0LGwpJiYhdGhpcy50YXJnZXRJc0NvbW1lbnRUZXh0QXJlYShjKSYmSmEoenAsdGhpcykuaGlkZSgpfWZ1bmN0aW9uIGdjdCgpe0ptKGdGLHRoaXMsITEpfWZ1'@;
put 'bmN0aW9uIG1jdChjLGwpe2xbUmddJiZsW1JnXVtiVF0mJlRpKGMsbC5jb21tZW50ZWRDZWxsQ2xhc3NOYW1lKX1mdW5jdGlvbiB2Y3QoKXtKbSh2Rix0aGlzLCIiKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZ3JpZCIpLHRoaXMuc2V0Q29t'@;
put 'bWVudCgpfWZ1bmN0aW9uIGJjdCgpe0ptKHZGLHRoaXMsdGhpcy5nZXRDb21tZW50KCkpLHRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKE1KKX1mdW5jdGlvbiB5Y3QoYyxsKXt0aGlzLnVwZGF0ZUNvbW1lbnRNZXRh'@;
put 'KHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx7c3R5bGU6e3dpZHRoOmMsaGVpZ2h0Omx9fSl9ZnVuY3Rpb24gYWdlKGMpe0phKEFsLHRoaXMpLmlzRm9jdXNlZCgpJiZIMihjKX1mdW5jdGlvbiBfY3QoKXtKYShtRix0aGlzKXx8dGhpcy5oaWRlKCl9ZnVuY3Rpb24g'@;
put 'd2N0KCl7Y29uc3QgYz1KYShBbCx0aGlzKS5nZXRFZGl0b3JFbGVtZW50KCk7Y2EoYywvaHQtdGhlbWUtLiovZyksVGkoYyx0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCkpfWZ1bmN0aW9uIEVKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBDY3QoYyl7dmFyIGw9ZnVuY3Rpb24gU2N0'@;
put 'KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws'@;
put 'e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBzZ2V7Y29uc3RydWN0b3IobCl7RUoodGhpcywiaG90Iix2b2lkIDApLEVKKHRoaXMsImNvbW1hbmRzIix7fSksRUoodGhpcywiY29tbW9uQ2FsbGJhY2siLG51bGwpLHRo'@;
put 'aXMuaG90PWx9cmVnaXN0ZXJDb21tYW5kKGwsYSl7dGhpcy5jb21tYW5kc1tsXT1hfXNldENvbW1vbkNhbGxiYWNrKGwpe3RoaXMuY29tbW9uQ2FsbGJhY2s9bH1leGVjdXRlKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKysp'@;
put 'ZFtoLTFdPWFyZ3VtZW50c1toXTtjb25zdCBmPWwuc3BsaXQoIjoiKSx2PWZbMF0sTT0yPT09Zi5sZW5ndGg/ZlsxXTpudWxsO2xldCBEPXRoaXMuY29tbWFuZHNbdl07aWYoIUQpdGhyb3cgbmV3IEVycm9yKGBNZW51IGNvbW1hbmQgJyR7dn0nIG5vdCBleGlzdHMuYCk7aWYoTSYmRC5zdWJt'@;
put 'ZW51JiYoRD1mdW5jdGlvbiBNY3QoYyxsKXtsZXQgYTtyZXR1cm4gWW4obCxkPT57Y29uc3QgaD1kLmtleT9kLmtleS5zcGxpdCgiOiIpOm51bGw7aWYoQXJyYXkuaXNBcnJheShoKSYmaFsxXT09PWMpcmV0dXJuIGE9ZCwhMX0pLGF9KE0sRC5zdWJtZW51Lml0ZW1zKSksITA9PT1ELmRpc2Fi'@;
put 'bGVkfHwiZnVuY3Rpb24iPT10eXBlb2YgRC5kaXNhYmxlZCYmITA9PT1ELmRpc2FibGVkLmNhbGwodGhpcy5ob3QpfHxFdShELCJzdWJtZW51IikpcmV0dXJuO2NvbnN0IFo9W107ImZ1bmN0aW9uIj09dHlwZW9mIEQuY2FsbGJhY2smJloucHVzaChELmNhbGxiYWNrKSwiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgdGhpcy5jb21tb25DYWxsYmFjayYmWi5wdXNoKHRoaXMuY29tbW9uQ2FsbGJhY2spLGQudW5zaGlmdChmLmpvaW4oIjoiKSksWW4oWixuZT0+bmUuYXBwbHkodGhpcy5ob3QsZCkpfX1jb25zdCBZMj0iYWxpZ25tZW50IixiRj0iY2xlYXJfY29sdW1uIixfVD0iY29sX2xlZnQiLHdU'@;
put 'PSJjb2xfcmlnaHQiLENUPSJtYWtlX3JlYWRfb25seSIseUY9InJlZG8iLFNUPSJyZW1vdmVfY29sIixfRj0icmVtb3ZlX3JvdyIsd0Y9InJvd19hYm92ZSIsQ0Y9InJvd19iZWxvdyIsTVQ9Im5vX2l0ZW1zIixTRj0idW5kbyIsbGdlPVt3RixDRixfVCx3VCxiRixfRixTVCxTRix5RixDVCxZ'@;
put 'MixvcyxNVF0sY2dlPXtbb3NdOmZ1bmN0aW9uIFFsdCgpe3JldHVybntuYW1lOm9zfX0sW01UXTpmdW5jdGlvbiBQY3QoKXtyZXR1cm57a2V5Ok1ULG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFVLKX0sZGlzYWJsZWQ6ITAsaXNDb21tYW5kOiExfX0sW3dGXTpmdW5j'@;
put 'dGlvbiBMY3QoKXtyZXR1cm57a2V5OndGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFpLKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BMZWZ0Q29ybmVyKCk7dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIs'@;
put 'Yy5yb3csMSwiQ29udGV4dE1lbnUucm93QWJvdmUiKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGln'@;
put 'aHQucm93PDB8fHRoaXMuY291bnRTb3VyY2VSb3dzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzKXx8ISF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmMD09PXRoaXMuY291bnRSb3dzKCl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJ'@;
put 'bnNlcnRSb3d9fX0sW0NGXTpmdW5jdGlvbiBPY3QoKXtyZXR1cm57a2V5OkNGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFdLKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRCb3R0b21SaWdodENvcm5lcigpO3RoaXMu'@;
put 'YWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0JlbG93Iil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHxjLmlz'@;
put 'U2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LnJvdzwwfHx0aGlzLmNvdW50U291cmNlUm93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Um93cyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sW19UXTpmdW5jdGlvbiBUY3QoKXtyZXR1'@;
put 'cm57a2V5Ol9ULG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFlLKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BMZWZ0Q29ybmVyKCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9jb2xfZW5kIjoiaW5zZXJ0X2NvbF9z'@;
put 'dGFydCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtbkxlZnQiKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSlyZXR1cm4hMDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghY3x8dGhp'@;
put 'cy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDB8fHRoaXMuY291bnRTb3VyY2VDb2xzKCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhDb2xzKXx8ISF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIo'@;
put 'KSYmMD09PXRoaXMuY291bnRDb2xzKCl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW3dUXTpmdW5jdGlvbiBBY3QoKXtyZXR1cm57a2V5OndULG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEdLKX0sY2FsbGJh'@;
put 'Y2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BSaWdodENvcm5lcigpLGw9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX3N0YXJ0IjoiaW5zZXJ0X2NvbF9lbmQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5SaWdodCIpfSxkaXNh'@;
put 'YmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8Yy5pc1NpbmdsZUhlYWRlcigpJiZj'@;
put 'LmhpZ2hsaWdodC5jb2w8MHx8dGhpcy5jb3VudFNvdXJjZUNvbHMoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heENvbHMpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Q29sdW1ufX19LFtiRl06ZnVuY3Rpb24gRWN0KCl7cmV0dXJue2tleTpiRixuYW1l'@;
put 'KCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShKSyl9LGNhbGxiYWNrKGMsbCl7Y29uc3QgYT1sWzBdLnN0YXJ0LmNvbCxkPWxbMF0uZW5kLmNvbDt0aGlzLmNvdW50Um93cygpJiZ0aGlzLnBvcHVsYXRlRnJvbUFycmF5KDAsYSxbW251bGxdXSxNYXRoLm1heChsWzBdLnN0YXJ0'@;
put 'LnJvdyxsWzBdLmVuZC5yb3cpLGQsIkNvbnRleHRNZW51LmNsZWFyQ29sdW1uIil9LGRpc2FibGVkKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWN8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDB8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVj'@;
put 'dGVkQnlDb2x1bW5IZWFkZXIoKSlyZXR1cm4hMDtsZXQgbD0hMTtyZXR1cm4gYy5mb3JBbGwoKGEsZCk9PntpZihhPDB8fGQ8MClyZXR1cm4hMDtjb25zdHtyZWFkT25seTpofT10aGlzLmdldENlbGxNZXRhKGEsZCk7cmV0dXJuISFofHwobD0hMCwhMSl9KSwhbH19fSxbX0ZdOmZ1bmN0aW9u'@;
put 'IFJjdCgpe3JldHVybntrZXk6X0YsbmFtZSgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0W2EsLGRdPWNbMF07YS1kIT0wJiYobD0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKCRLLGwpfSxjYWxs'@;
put 'YmFjaygpe3RoaXMuYWx0ZXIoInJlbW92ZV9yb3ciLGZ1bmN0aW9uIEd0dChjKXtjb25zdCBsPXhfKGMuZ2V0U2VsZWN0ZWQoKSk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9UUUobCx7Y3JlYXRlQ2VsbENvb3JkczpjLl9jcmVhdGVDZWxsQ29vcmRzLmJpbmQoYyksY3JlYXRl'@;
put 'Q2VsbFJhbmdlOmMuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKGMpfSksZD1uZXcgU2V0O3JldHVybiBZbihjLmdldFNlbGVjdGVkKCksdj0+e2NvbnN0e2Zyb206TSx0bzpEfT1hKHYpLFo9TWF0aC5tYXgoTS5yb3csMCk7WW4oQXJyYXkuZnJvbShuZXcgQXJyYXkoRC5yb3ctWisxKSwoY2UsYmUp'@;
put 'PT5aK2JlKSxjZT0+e2QuaGFzKGNlKXx8ZC5hZGQoY2UpfSl9KSxLdShBcnJheS5mcm9tKGQpLnNvcnQoKHYsTSk9PnYtTSksKHYsTSxELFopPT4oMCE9PUQmJk09PT1aW0QtMV0rMT92W3YubGVuZ3RoLTFdWzFdKz0xOnYucHVzaChbTSwxXSksdiksW10pfSh0aGlzKSwxLCJDb250ZXh0TWVu'@;
put 'dS5yZW1vdmVSb3ciKX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighY3x8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5yb3c8MClyZXR1cm4hMDtjb25zdCBsPXRoaXMuY291bnRSb3dzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlz'@;
put 'U2VsZWN0ZWRCeUNvcm5lcigpPzA9PT1sOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHwwPT09bH0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1JlbW92ZVJvd319fSxbU1RdOmZ1bmN0aW9uIEljdCgpe3JldHVybntrZXk6U1QsbmFt'@;
put 'ZSgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0WyxhLCxkXT1jWzBdO2EtZCE9MCYmKGw9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShLSyxsKX0sY2FsbGJhY2soKXt0aGlzLmFsdGVyKCJyZW1v'@;
put 'dmVfY29sIixmdW5jdGlvbiBZdHQoYyl7Y29uc3QgbD14XyhjLmdldFNlbGVjdGVkKCkpO2lmKDA9PT1sfHwxPT09bClyZXR1cm5bXTtjb25zdCBhPVFFKGwse2NyZWF0ZUNlbGxDb29yZHM6Yy5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKGMpLGNyZWF0ZUNlbGxSYW5nZTpjLl9jcmVhdGVDZWxs'@;
put 'UmFuZ2UuYmluZChjKX0pLGQ9bmV3IFNldDtyZXR1cm4gWW4oYy5nZXRTZWxlY3RlZCgpLHY9Pntjb25zdHtmcm9tOk0sdG86RH09YSh2KSxaPU1hdGgubWF4KE0uY29sLDApO1luKEFycmF5LmZyb20obmV3IEFycmF5KEQuY29sLVorMSksKGNlLGJlKT0+WitiZSksY2U9PntkLmhhcyhjZSl8'@;
put 'fGQuYWRkKGNlKX0pfSksS3UoQXJyYXkuZnJvbShkKS5zb3J0KCh2LE0pPT52LU0pLCh2LE0sRCxaKT0+KDAhPT1EJiZNPT09WltELTFdKzE/dlt2Lmxlbmd0aC0xXVsxXSs9MTp2LnB1c2goW00sMV0pLHYpLFtdKX0odGhpcyksbnVsbCwiQ29udGV4dE1lbnUucmVtb3ZlQ29sdW1uIil9LGRp'@;
put 'c2FibGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWN8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQuY29sPDApcmV0dXJuITA7Y29uc3QgbD10aGlzLmNvdW50'@;
put 'Q29scygpO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKT8wPT09bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVDb2x1bW59fX0sW1NGXTpm'@;
put 'dW5jdGlvbiBGY3QoKXtyZXR1cm57a2V5OlNGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHFLKX0sY2FsbGJhY2soKXt0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS51bmRvKCl9LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIik7cmV0'@;
put 'dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKS5pc1VuZG9BdmFpbGFibGUoKX19fSxbeUZdOmZ1bmN0aW9uIERjdCgpe3JldHVybntrZXk6eUYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoWEsp'@;
put 'fSxjYWxsYmFjaygpe3RoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLnJlZG8oKX0saGlkZGVuKCl7Y29uc3QgYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4hY3x8IWMuaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLmlz'@;
put 'UmVkb0F2YWlsYWJsZSgpfX19LFtDVF06ZnVuY3Rpb24ga2N0KCl7cmV0dXJue2tleTpDVCxjaGVja2FibGU6ITAsYXJpYUNoZWNrZWQoKXtyZXR1cm4gZEYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGwsYSk9PnRoaXMuZ2V0Q2VsbE1ldGEobCxhKS5yZWFkT25seSl9LGFyaWFMYWJlbCgp'@;
put 'e3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoeVApfSxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHlQKTtyZXR1cm4gZEYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9PnRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSkmJihjPXJnZShjKSks'@;
put 'Y30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9ZEYoYywoYSxkKT0+dGhpcy5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KTtZbihjLGE9PnthLmZvckFsbCgoZCxoKT0+e2Q+PTAmJmg+PTAmJnRoaXMuc2V0Q2VsbE1ldGEoZCxoLCJyZWFkT25seSIsIWwp'@;
put 'fSl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEoYyYmIWMuaXNTaW5nbGVIZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwIT09dGhpcy5jb3VudFJvd3MoKSYmMCE9PXRo'@;
put 'aXMuY291bnRDb2xzKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYwIT09dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkubGVuZ3RoKX19fSxbWTJdOmZ1bmN0aW9uIHhjdCgpe3JldHVybntrZXk6WTIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoaHEpfSxkaXNhYmxl'@;
put 'ZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hKGMmJiFjLmlzU2luZ2xlSGVhZGVyKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYhdGhpcy5zZWxlY3Rp'@;
put 'b24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfSxzdWJtZW51OntpdGVtczpbe2tleTpgJHtZMn06bGVmdGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZnEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD12OShjLChoLGYpPT50aGlz'@;
put 'LmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodExlZnQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLFhtKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRh'@;
put 'KGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtZMn06Y2VudGVyYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShwcSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXY5KGMsKGgsZik9PnRoaXMu'@;
put 'Z2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0Q2VudGVyIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxYbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0'@;
put 'YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7WTJ9OnJpZ2h0YCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShncSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXY5KGMsKGgsZik9PnRoaXMu'@;
put 'Z2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0UmlnaHQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLFhtKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRh'@;
put 'KGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtZMn06anVzdGlmeWAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobXEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD12OShjLChoLGYpPT50aGlz'@;
put 'LmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodEp1c3RpZnkiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLFhtKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxN'@;
put 'ZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se25hbWU6b3N9LHtrZXk6YCR7WTJ9OnRvcGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UodnEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD12OShjLCho'@;
put 'LGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRUb3AiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLFhtKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENl'@;
put 'bGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtZMn06bWlkZGxlYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShicSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPXY5KGMsKGgsZik9'@;
put 'PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodE1pZGRsZSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksWG0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2Vs'@;
put 'bE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke1kyfTpib3R0b21gLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHlxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9djkoYywoaCxmKT0+'@;
put 'dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0Qm90dG9tIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxYbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxs'@;
put 'TWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9XX19fX07ZnVuY3Rpb24gdWdlKCl7Y29uc3QgYz17fTtyZXR1cm4gWGEoY2dlLChsLGEpPT57Y1thXT1sKCl9KSxjfWZ1bmN0aW9uIFRKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBIY3QoYyl7dmFyIGw9ZnVuY3Rp'@;
put 'b24gTmN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBkZ2V7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7VEoodGhp'@;
put 'cywiaG90Iix2b2lkIDApLFRKKHRoaXMsInByZWRlZmluZWRJdGVtcyIsdWdlKCkpLFRKKHRoaXMsImRlZmF1bHRPcmRlclBhdHRlcm4iLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm49YX1zZXRQcmVkZWZpbmVkSXRlbXMobCl7Y29uc3QgYT17fTt0aGlzLmRl'@;
put 'ZmF1bHRPcmRlclBhdHRlcm4ubGVuZ3RoPTAsWGEobCwoZCxoKT0+e2xldCBmPSIiO2QubmFtZT09PW9zPyhhW29zXT1kLGY9b3MpOmlzTmFOKHBhcnNlSW50KGgsMTApKT8oZC5rZXk9dm9pZCAwPT09ZC5rZXk/aDpkLmtleSxhW2hdPWQsZj1kLmtleSk6KGFbZC5rZXldPWQsZj1kLmtleSks'@;
put 'dGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLnB1c2goZil9KSx0aGlzLnByZWRlZmluZWRJdGVtcz1hfWdldEl0ZW1zKCl7cmV0dXJuIGZ1bmN0aW9uIFZjdCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBkPVtdO2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBoJiZoLml0ZW1zP2g9aC5pdGVtczpBcnJheS5pc0Fy'@;
put 'cmF5KGgpfHwoaD1sKSxxYShoKT9YYShoLChmLHYpPT57bGV0IE09YVsic3RyaW5nIj09dHlwZW9mIGY/Zjp2XTtNfHwoTT1mKSxxYShmKT94dShNLGYpOiJzdHJpbmciPT10eXBlb2YgTSYmKE09e25hbWU6TX0pLHZvaWQgMD09PU0ua2V5JiYoTS5rZXk9diksZC5wdXNoKE0pfSk6WW4oaCwo'@;
put 'Zix2KT0+e2xldCBNPWFbZl07IU0mJmxnZS5pbmRleE9mKGYpPj0wfHwoTXx8KE09e25hbWU6ZixrZXk6YCR7dn1gfSkscWEoZikmJnh1KE0sZiksdm9pZCAwPT09TS5rZXkmJihNLmtleT12KSxkLnB1c2goTSkpfSksZH0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb'@;
put 'MF0/YXJndW1lbnRzWzBdOm51bGwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLHRoaXMucHJlZGVmaW5lZEl0ZW1zKX19ZnVuY3Rpb24gUW0oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEJjdChjKXt2YXIgbD1mdW5jdGlvbiBqY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJl'@;
put 'dHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0'@;
put 'aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJs'@;
put 'ZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHpjdHtjb25zdHJ1Y3RvcihsLGEpe1FtKHRoaXMsInRvcCIsdm9pZCAwKSxRbSh0aGlzLCJ0b3BSZWxhdGl2ZSIsdm9pZCAwKSxRbSh0aGlzLCJsZWZ0Iix2b2lkIDApLFFtKHRoaXMsImxlZnRSZWxhdGl2ZSIsdm9pZCAwKSxRbSh0'@;
put 'aGlzLCJzY3JvbGxUb3AiLHZvaWQgMCksUW0odGhpcywic2Nyb2xsTGVmdCIsdm9pZCAwKSxRbSh0aGlzLCJjZWxsSGVpZ2h0Iix2b2lkIDApLFFtKHRoaXMsImNlbGxXaWR0aCIsdm9pZCAwKTtjb25zdCBkPWEuc2Nyb2xsWSxoPWEuc2Nyb2xsWDtsZXQgZix2LE0sRCxaLG5lO3RoaXMucm9v'@;
put 'dFdpbmRvdz1hLHRoaXMudHlwZT10aGlzLmdldFNvdXJjZVR5cGUobCksImxpdGVyYWwiPT09dGhpcy50eXBlPyhmPXBhcnNlSW50KGwudG9wLDEwKSxNPXBhcnNlSW50KGwubGVmdCwxMCksWj1sLmhlaWdodHx8MCxuZT1sLndpZHRofHwwLHY9ZixEPU0sZis9ZCxNKz1oKToiZXZlbnQiPT09'@;
put 'dGhpcy50eXBlJiYoZj1wYXJzZUludChsLnBhZ2VZLDEwKSxNPXBhcnNlSW50KGwucGFnZVgsMTApLFo9bC50YXJnZXQuY2xpZW50SGVpZ2h0LG5lPWwudGFyZ2V0LmNsaWVudFdpZHRoLHY9Zi1kLEQ9TS1oKSx0aGlzLnRvcD1mLHRoaXMudG9wUmVsYXRpdmU9dix0aGlzLmxlZnQ9TSx0aGlz'@;
put 'LmxlZnRSZWxhdGl2ZT1ELHRoaXMuc2Nyb2xsVG9wPWQsdGhpcy5zY3JvbGxMZWZ0PWgsdGhpcy5jZWxsSGVpZ2h0PVosdGhpcy5jZWxsV2lkdGg9bmV9Z2V0U291cmNlVHlwZShsKXtsZXQgYT0ibGl0ZXJhbCI7cmV0dXJuIGwgaW5zdGFuY2VvZiBFdmVudCYmKGE9ImV2ZW50IiksYX1maXRz'@;
put 'QWJvdmUobCl7cmV0dXJuIHRoaXMudG9wUmVsYXRpdmU+PWwub2Zmc2V0SGVpZ2h0fWZpdHNCZWxvdyhsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZStsLm9mZnNldEhlaWdodDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJv'@;
put 'b3RXaW5kb3cuaW5uZXJIZWlnaHQpfWZpdHNPblJpZ2h0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZSt0aGlzLmNlbGxXaWR0aCtsLm9mZnNldFdpZHRoPD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5p'@;
put 'bm5lcldpZHRoKX1maXRzT25MZWZ0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZT49bC5vZmZzZXRXaWR0aH19ZnVuY3Rpb24geFQoYyxsLGEpeyhmdW5jdGlvbiBVY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBw'@;
put 'cml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFVhKGMsbCl7cmV0dXJuIGMuZ2V0KGhnZShjLGwpKX1mdW5jdGlvbiBNRihjLGwsYSl7cmV0dXJuIGMuc2V0KGhnZShjLGwpLGEpLGF9ZnVuY3Rpb24gaGdlKGMsbCxhKXtpZigi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgSjE9bmV3IFdlYWtNYXAsWmQ9bmV3IFdlYWtN'@;
put 'YXAsV2Q9bmV3IFdlYWtNYXAsQUo9bmV3IFdlYWtNYXAsS189bmV3IFdlYWtNYXA7Y2xhc3MgWmN0e2NvbnN0cnVjdG9yKGwpe3hUKHRoaXMsSjEsdm9pZCAwKSx4VCh0aGlzLFpkLHZvaWQgMCkseFQodGhpcyxXZCx2b2lkIDApLHhUKHRoaXMsQUosITEpLHhUKHRoaXMsS18se2Fib3ZlOjAs'@;
put 'YmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH0pLE1GKEFKLHRoaXMsbCl9c2V0T2Zmc2V0KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO3JldHVybiBVYShLXyx0aGlzKVtsXT1hLHRoaXN9c2V0RWxlbWVudChsKXtyZXR1cm4g'@;
put 'TUYoSjEsdGhpcyxsKSx0aGlzfXNldFBhcmVudEVsZW1lbnQobCl7cmV0dXJuIE1GKFpkLHRoaXMsbCksdGhpc311cGRhdGVQb3NpdGlvbihsKXtNRihXZCx0aGlzLG5ldyB6Y3QobCxVYShKMSx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSksVWEoQUosdGhpcyk/KFVhKFdkLHRo'@;
put 'aXMpLmZpdHNCZWxvdyhVYShKMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCk6VWEoV2QsdGhpcykuZml0c0Fib3ZlKFVhKEoxLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uQWJvdmVDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKSx0aGlzLnVwZGF0ZUhv'@;
put 'cml6b250YWxQb3NpdGlvbigpKToodGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCksdGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpKX11cGRhdGVIb3Jpem9udGFsUG9zaXRpb24oKXsicnRsIj09PVVhKEoxLHRoaXMpLmRpcj9VYShXZCx0aGlzKS5maXRzT25MZWZ0KFVhKEox'@;
put 'LHRoaXMpKT90aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCk6VWEoV2QsdGhpcykuZml0c09uUmlnaHQoVWEoSjEsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uT25M'@;
put 'ZWZ0T2ZDdXJzb3IoKX1zZXRQb3NpdGlvbkFib3ZlQ3Vyc29yKCl7bGV0IGw9VWEoS18sdGhpcykuYWJvdmUrVWEoV2QsdGhpcykudG9wLVVhKEoxLHRoaXMpLm9mZnNldEhlaWdodDtpZihVYShaZCx0aGlzKSl7Y29uc3QgZD1VYShaZCx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3'@;
put 'LmdldENvbXB1dGVkU3R5bGUoVWEoWmQsdGhpcykucXVlcnlTZWxlY3RvcigiLmh0X21hc3RlciIpKSxoPU51bWJlci5wYXJzZUludChkLnBhZGRpbmdUb3AsMTApLGY9TnVtYmVyLnBhcnNlSW50KGQuYm9yZGVyVG9wLDEwKTtsPVVhKFdkLHRoaXMpLnRvcCtVYShXZCx0aGlzKS5jZWxsSGVp'@;
put 'Z2h0LVVhKEoxLHRoaXMpLnNjcm9sbEhlaWdodCtoK2Z9VWEoSjEsdGhpcykuc3R5bGUudG9wPWAke2x9cHhgfXNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKXtsZXQgbD1VYShLXyx0aGlzKS5iZWxvdytVYShXZCx0aGlzKS50b3ArMTtpZihVYShaZCx0aGlzKSl7Y29uc3QgZD1VYShaZCx0aGlz'@;
put 'KS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoVWEoWmQsdGhpcykucXVlcnlTZWxlY3RvcigiLmh0X21hc3RlciIpKSxoPU51bWJlci5wYXJzZUludChkLnBhZGRpbmdUb3AsMTApLGY9TnVtYmVyLnBhcnNlSW50KGQuYm9yZGVyVG9wLDEwKTtsPVVhKFdkLHRo'@;
put 'aXMpLnRvcC1oLWYtMX1VYShKMSx0aGlzKS5zdHlsZS50b3A9YCR7bH1weGB9c2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKXtsZXQgbD1VYShXZCx0aGlzKS5sZWZ0O2lmKFVhKFpkLHRoaXMpKXtjb25zdCBhPVVhKFpkLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcsZD1OdW1i'@;
put 'ZXIucGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKFVhKFpkLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyUmlnaHRXaWR0aCwxMCk7bCs9VWEoV2QsdGhpcykuY2VsbFdpZHRoK2R9ZWxzZSBsKz1VYShLXyx0aGlzKS5yaWdodDtVYShKMSx0aGlzKS5zdHlsZS5sZWZ0'@;
put 'PWAke2x9cHhgfXNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKXtsZXQgbD1VYShLXyx0aGlzKS5sZWZ0K1VhKFdkLHRoaXMpLmxlZnQtVWEoSjEsdGhpcykub2Zmc2V0V2lkdGg7aWYoVWEoWmQsdGhpcykpe2NvbnN0IGE9VWEoWmQsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldzts'@;
put 'LT1OdW1iZXIucGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKFVhKFpkLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyTGVmdFdpZHRoLDEwKX1VYShKMSx0aGlzKS5zdHlsZS5sZWZ0PWAke2x9cHhgfX1mdW5jdGlvbiBmZ2UoYyl7bGV0e2luaXRpYWxQYWdlOmw9LTEs'@;
put 'c2l6ZTphPSgoKT0+MCksb25JdGVtU2VsZWN0OmQ9KCgpPT57fSksb25DbGVhcjpoPSgoKT0+e30pfT1jO2NvbnN0IGY9bmV3IFNldDtsZXQgdj1BcyhsLC0xLEJlKCktMSk7ZnVuY3Rpb24gTShydCxwdCl7Y29uc3QgZHQ9QmUoKS0xO3JldHVybiBydDwwJiYocnQ9ZHQpLHJ0PmR0JiYocnQ9'@;
put 'MCksZi5oYXMocnQpPy0xOihmLmFkZChydCksITE9PT1kKHJ0LCExKSYmKHJ0PU0oMT09PXB0PysrcnQ6LS1ydCxwdCkpLHJ0KX1mdW5jdGlvbiBCZSgpe3JldHVybiBNYXRoLm1heChhKCksMCl9cmV0dXJue3NldEN1cnJlbnRQYWdlOmZ1bmN0aW9uIEQocnQpe3J0Pi0xJiZydDxCZSgpJiYh'@;
put 'MSE9PWQocnQsITApJiYodj1ydCl9LGdldEN1cnJlbnRQYWdlOmZ1bmN0aW9uIFooKXtyZXR1cm4gdn0sdG9GaXJzdEl0ZW06ZnVuY3Rpb24gbmUoKXtCZSgpPjAmJihmLmNsZWFyKCksdj1NKDAsMSkpfSx0b0xhc3RJdGVtOmZ1bmN0aW9uIGNlKCl7QmUoKT4wJiYoZi5jbGVhcigpLHY9TShC'@;
put 'ZSgpLTEsLTEpKX0sdG9OZXh0SXRlbTpmdW5jdGlvbiBiZSgpe0JlKCk+MCYmKGYuY2xlYXIoKSx2PU0oKyt2LDEpKX0sdG9QcmV2aW91c0l0ZW06ZnVuY3Rpb24gRWUoKXtCZSgpPjAmJihmLmNsZWFyKCksdj1NKC0tdiwtMSkpfSxnZXRTaXplOkJlLGNsZWFyOmZ1bmN0aW9uIHFlKCl7Zi5j'@;
put 'bGVhcigpLHY9bCxoKCl9fX1mdW5jdGlvbiBrSihjKXtyZXR1cm4gRXUoYywic3VibWVudSIpfWZ1bmN0aW9uIERKKGMpe3JldHVybiBuZXcgUmVnRXhwKG9zLCJpIikudGVzdChjLm5hbWUpfWZ1bmN0aW9uIHhGKGMsbCl7cmV0dXJuITA9PT1jLmRpc2FibGVkfHwiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgYy5kaXNhYmxlZCYmITA9PT1jLmRpc2FibGVkLmNhbGwobCl9ZnVuY3Rpb24gcGdlKGMpe3JldHVybiBFdShjLCJkaXNhYmxlU2VsZWN0aW9uIil9ZnVuY3Rpb24gZ2dlKGMsbCl7Y29uc3QgYT1jLnNsaWNlKDApO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGgmJmFbZF0ubmFtZT09PWw7KWEu'@;
put 'c2hpZnQoKTtyZXR1cm4gYX1mdW5jdGlvbiBldXQoYyl7cmV0dXJuITA9PT1jLmNoZWNrYWJsZX1mdW5jdGlvbiBpdXQoYyl7cmV0dXJuKGwsYSxkLGgsZix2KT0+e2NvbnN0IE09bC5nZXRTb3VyY2VEYXRhQXRSb3coZCksRD1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxa'@;
put 'PSJmdW5jdGlvbiI9PXR5cGVvZiB2P3YuY2FsbChjKTp2LG5lPSJmdW5jdGlvbiI9PXR5cGVvZiBNLmFyaWFMYWJlbD9NLmFyaWFMYWJlbC5jYWxsKGMpOk0uYXJpYUxhYmVsLGNlPSJmdW5jdGlvbiI9PXR5cGVvZiBNLmFyaWFDaGVja2VkP00uYXJpYUNoZWNrZWQuY2FsbChjKTpNLmFyaWFD'@;
put 'aGVja2VkO2lmKHhwKGEpLFRpKEQsImh0SXRlbVdyYXBwZXIiKSxjLmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0IGJlPSF4RihNLGMpJiYhcGdlKE0pJiYhREooTSk7dmEoYSxbLi4uZXV0KE0pP1tbInJvbGUiLCJtZW51aXRlbWNoZWNrYm94Il0sZ0UobmUpLFMyZShjZSldOltbInJv'@;
put 'bGUiLCJtZW51aXRlbSJdLGdFKFopXSwuLi5iZT9bRjcoLTEpXTpbXSwuLi54RihNLGMpP1tbImFyaWEtZGlzYWJsZWQiLCJ0cnVlIl1dOltdLC4uLmtKKE0pP1tQMighMSldOltdXSl9YS5jbGFzc05hbWU9IiIsYS5hcHBlbmRDaGlsZChEKSxESihNKT9UaShhLCJodFNlcGFyYXRvciIpOiJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBNLnJlbmRlcmVyPyhUaShhLCJodEN1c3RvbU1lbnVSZW5kZXJlciIpLGEuYXBwZW5kQ2hpbGQoTS5yZW5kZXJlcihsLEQsZCxoLGYsWikpKTpCNyhELFopLHhGKE0sYyk/VGkoYSwiaHREaXNhYmxlZCIpOnBnZShNKT9UaShhLCJodFNlbGVjdGlvbkRpc2FibGVk'@;
put 'Iik6a0ooTSkmJlRpKGEsImh0U3VibWVudSIpfX1mdW5jdGlvbiBJSihjLGwsYSl7KGZ1bmN0aW9uIG91dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9'@;
put 'KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gVXAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGF1dChjKXt2YXIgbD1mdW5jdGlvbiBzdXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2'@;
put 'YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9'@;
put 'KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFJKKGMsbCxhKXtyZXR1'@;
put 'cm4gYy5zZXQoYmdlKGMsbCksYSksYX1mdW5jdGlvbiBiOShjLGwpe3JldHVybiBjLmdldChiZ2UoYyxsKSl9ZnVuY3Rpb24gYmdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgRVQ9bmV3IFdlYWtNYXAsRUY9bmV3IFdlYWtNYXAsVEY9bmV3IFdlYWtNYXA7Y2xhc3MgcV97Z2V0IHRhYmxlQm9yZGVyV2lkdGgoKXtyZXR1cm4gdm9pZCAwPT09YjkoVEYsdGhpcykm'@;
put 'JnRoaXMuaG90TWVudSYmUkooVEYsdGhpcyxwYXJzZUludCh0aGlzLmhvdE1lbnUucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaG90TWVudS52aWV3Ll93dC53dFRhYmxlLlRBQkxFKS5ib3JkZXJXaWR0aCwxMCkpLGI5KFRGLHRoaXMpfWNvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9'@;
put 'dGhpcztVcCh0aGlzLCJob3QiLHZvaWQgMCksVXAodGhpcywib3B0aW9ucyIsdm9pZCAwKSxVcCh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBOMih0aGlzKSksVXAodGhpcywiY29udGFpbmVyIix2b2lkIDApLFVwKHRoaXMsInBvc2l0aW9uZXIiLHZvaWQgMCksVXAodGhpcywiaG90TWVudSIs'@;
put 'bnVsbCksVXAodGhpcywiaG90U3ViTWVudXMiLHt9KSxVcCh0aGlzLCJwYXJlbnRNZW51Iix2b2lkIDApLFVwKHRoaXMsIm1lbnVJdGVtcyIsbnVsbCksVXAodGhpcywib3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cyIsbnVsbCksSUoodGhpcyxFVCx2b2lkIDApLElKKHRoaXMsRUYsdm9pZCAw'@;
put 'KSxJSih0aGlzLFRGLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm9wdGlvbnM9YXx8e3BhcmVudDpudWxsLG5hbWU6bnVsbCxjbGFzc05hbWU6IiIsa2VlcEluVmlld3BvcnQ6ITAsc3RhbmRhbG9uZTohMSxtaW5XaWR0aDoyMTUsY29udGFpbmVyOnRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1'@;
put 'bWVudEVsZW1lbnR9LHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLnBvc2l0aW9uZXI9bmV3IFpjdCh0aGlzLm9wdGlvbnMua2VlcEluVmlld3BvcnQpLHRoaXMucGFyZW50TWVudT10aGlzLm9wdGlvbnMucGFyZW50fHxudWxsLHRo'@;
put 'aXMucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0'@;
put 'dXJuIGQucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsLi4uZil9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwoaCxmKT0+e3ZhciB2O2Z8fG51bGw9PT0odj10aGlzLmhvdE1lbnUpfHx2b2lkIDA9PT12fHx2LnVzZVRoZW1lKGgpfSl9'@;
put 'cmVnaXN0ZXJFdmVudHMoKXtsZXQgbD10aGlzLmhvdC5yb290V2luZG93O2Zvcig7bDspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJtb3VzZWRvd24iLGE9PnRoaXMub25Eb2N1bWVudE1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZl'@;
put 'bnRMaXN0ZW5lcihsLmRvY3VtZW50LCJ0b3VjaHN0YXJ0IixhPT50aGlzLm9uRG9jdW1lbnRNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwiY29udGV4dG1lbnUiLGE9PnRoaXMub25Eb2N1bWVudENvbnRleHRNZW51KGEpKSxsPU43'@;
put 'KGwpfXNldE1lbnVJdGVtcyhsKXt0aGlzLm1lbnVJdGVtcz1sfWdldE5hdmlnYXRvcigpe3JldHVybiBiOShFVCx0aGlzKX1nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKXtyZXR1cm4gYjkoRUYsdGhpcyl9Z2V0U2VsZWN0ZWRJdGVtKCl7cmV0dXJuIHRoaXMuaGFzU2VsZWN0ZWRJdGVtKCk/'@;
put 'dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pOm51bGx9aGFzU2VsZWN0ZWRJdGVtKCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpKX1pc1N1Yk1lbnUoKXtyZXR1cm4gbnVs'@;
put 'bCE9PXRoaXMucGFyZW50TWVudX1vcGVuKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVPcGVuIiksdGhpcy5jb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjtjb25zdCBsPVNFKE09PnRoaXMub3BlblN1Yk1l'@;
put 'bnUoTSksMzAwKSxhPXRoaXMub3B0aW9ucy5taW5XaWR0aHx8MjE1O2xldCBkPSExLGg9RG0odGhpcy5tZW51SXRlbXMsTT0+KE0ua2V5PT09TVQmJihkPSEwKSxmdW5jdGlvbiBxY3QoYyxsKXtyZXR1cm4hYy5oaWRkZW58fCEoImZ1bmN0aW9uIj09dHlwZW9mIGMuaGlkZGVuJiZjLmhpZGRl'@;
put 'bi5jYWxsKGwpKX0oTSx0aGlzLmhvdCkpKTtpZihoLmxlbmd0aDwxJiYhZCloLnB1c2godWdlKClbTVRdKTtlbHNlIGlmKDA9PT1oLmxlbmd0aClyZXR1cm47aD1mdW5jdGlvbiBRY3QoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRz'@;
put 'WzFdOm9zLGE9Yy5zbGljZSgwKTtyZXR1cm4gYT1nZ2UoYSxsKSxhPWZ1bmN0aW9uIFhjdChjLGwpe2xldCBhPWMuc2xpY2UoMCk7cmV0dXJuIGEucmV2ZXJzZSgpLGE9Z2dlKGEsbCksYS5yZXZlcnNlKCksYX0oYSxsKSxhPWZ1bmN0aW9uIEpjdChjKXtjb25zdCBsPVtdO3JldHVybiBZbihj'@;
put 'LChhLGQpPT57ZD4wP2xbbC5sZW5ndGgtMV0ubmFtZSE9PWEubmFtZSYmbC5wdXNoKGEpOmwucHVzaChhKX0pLGx9KGEpLGF9KGgsb3MpO2xldCBmPSExO2NvbnN0IHY9e2RhdGE6aCxjb2xIZWFkZXJzOiExLGF1dG9Db2x1bW5TaXplOiEwLGF1dG9XcmFwUm93OiExLG1vZGlmeUNvbFdpZHRo'@;
put 'Ok09PkZvKE0pJiZNPGE/YTpNLGF1dG9Sb3dTaXplOiExLHJlYWRPbmx5OiEwLGVkaXRvcjohMSxjb3B5UGFzdGU6ITEsaGlkZGVuUm93czohMCxtYXhDb2xzOjEsY29sdW1uczpbe2RhdGE6Im5hbWUiLHJlbmRlcmVyOml1dCh0aGlzLmhvdCl9XSxyZW5kZXJBbGxSb3dzOiEwLGZyYWdtZW50'@;
put 'U2VsZWN0aW9uOiExLG91dHNpZGVDbGlja0Rlc2VsZWN0czohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIixhcmlhVGFnczohMSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgp'@;
put 'LGJlZm9yZVJlZnJlc2hEaW1lbnNpb25zOigpPT4hMSxiZWZvcmVPbkNlbGxNb3VzZU92ZXI6KE0sRCk9PntiOShFVCx0aGlzKS5zZXRDdXJyZW50UGFnZShELnJvdyl9LGFmdGVyT25DZWxsTW91c2VPdmVyOihNLEQpPT57dGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCk/bChELnJvdyk6dGhp'@;
put 'cy5vcGVuU3ViTWVudShELnJvdyl9LGFmdGVyT25DZWxsQ29udGV4dE1lbnU6TT0+e00ucHJldmVudERlZmF1bHQoKSxSJCgpJiZmJiZ0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiZ0aGlzLmNsb3NlKCEwKX0sYWZ0ZXJTZWxlY3Rpb246KE0sRCxaLG5lLGNlKT0+e3RoaXMuaG90TWVudS52aWV3'@;
put 'LmlzTW91c2VEb3duKCkmJihjZS52YWx1ZT0hMCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsdGhpcy5nZXRTZWxlY3RlZEl0ZW0oKSl9LGJlZm9yZU9uQ2VsbE1vdXNlVXA6TT0+e3RoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJihmPSF0aGlzLmlzQ29tbWFuZFBh'@;
put 'c3NpdmUodGhpcy5nZXRTZWxlY3RlZEl0ZW0oKSksdGhpcy5leGVjdXRlQ29tbWFuZChNKSl9LGFmdGVyT25DZWxsTW91c2VVcDpNPT57KCFSJCgpfHwhRm0oTSkpJiZmJiZ0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiYoQXAoKXx8SSQoKT90aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT50'@;
put 'aGlzLmNsb3NlKCEwKSwzMjUpOnRoaXMuY2xvc2UoITApKX0sYWZ0ZXJVbmxpc3RlbjooKT0+eyF0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiZ0aGlzLmlzT3BlbmVkKCkmJnRoaXMuaG90TWVudS5saXN0ZW4oKX19O3RoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cz10aGlzLmhvdC5nZXRT'@;
put 'ZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cyx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2VsZWN0cz0hMSx0aGlzLmhvdE1lbnU9bmV3IHRoaXMuaG90LmNvbnN0cnVjdG9yKHRoaXMuY29udGFpbmVyLHYpLHRoaXMuaG90TWVudS5hZGRIb29rKCJhZnRlcklu'@;
put 'aXQiLCgpPT50aGlzLm9uQWZ0ZXJJbml0KCkpLHRoaXMuaG90TWVudS5pbml0KCksUkooRVQsdGhpcyxmdW5jdGlvbiB0dXQoYyl7cmV0dXJuIGZnZSh7c2l6ZTooKT0+Yy5jb3VudFJvd3MoKSxvbkl0ZW1TZWxlY3QobCxhKXtjb25zdCBkPWMuZ2V0Q2VsbChsLDApO2lmKCFkfHxmdW5jdGlv'@;
put 'biBZY3QoYyl7cmV0dXJuIHBhKGMsImh0U2VwYXJhdG9yIil9KGQpfHxmdW5jdGlvbiAkY3QoYyl7cmV0dXJuIHBhKGMsImh0RGlzYWJsZWQiKX0oZCl8fGZ1bmN0aW9uIEtjdChjKXtyZXR1cm4gcGEoYywiaHRTZWxlY3Rpb25EaXNhYmxlZCIpfShkKSlyZXR1cm4hMTtjLnNlbGVjdENlbGwo'@;
put 'bCwwLC4uLmE/W2wsMCwhMSwhMV06W10pfSxvbkNsZWFyKCl7Yy5kZXNlbGVjdENlbGwoKX19KX0odGhpcy5ob3RNZW51KSksUkooRUYsdGhpcyxmdW5jdGlvbiBydXQoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO2Nv'@;
put 'bnN0IGE9W107ZnVuY3Rpb24gZChaLG5lKXtNKG5lKS5hZGRTaG9ydGN1dHMoWix7Z3JvdXA6Im1lbnUifSl9ZnVuY3Rpb24gaChaLG5lKXtjb25zdCBjZT1NKG5lKTtaLmZvckVhY2goYmU9PntsZXR7a2V5czpFZX09YmU7RWUuZm9yRWFjaChCZT0+Y2UucmVtb3ZlU2hvcnRjdXRzQnlLZXlz'@;
put 'KEJlKSl9KSxhLnB1c2goe3Nob3J0Y3V0czpaLGNvbnRleHROYW1lOm5lfSksZChaLG5lKX1mdW5jdGlvbiB2KFope3JldHVybiBaP2BtZW51OiR7Wn1gOiJtZW51In1mdW5jdGlvbiBNKFope3ZhciBuZTtjb25zdCBjZT1jLmhvdE1lbnUuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksYmU9dihaKTty'@;
put 'ZXR1cm4gbnVsbCE9PShuZT1jZS5nZXRDb250ZXh0KGJlKSkmJnZvaWQgMCE9PW5lP25lOmNlLmFkZENvbnRleHQoYmUpfXJldHVybiBkKGZ1bmN0aW9uIG51dChjKXtjb25zdHtob3Q6bCxob3RNZW51OmF9PWM7cmV0dXJuW3trZXlzOltbIkNvbnRyb2wvTWV0YSIsIkEiXV0sZm9yd2FyZFRv'@;
put 'Q29udGV4dDpsLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKSxjYWxsYmFjazooKT0+Yy5jbG9zZSghMCl9LHtrZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6KGQsaCk9Pntjb25zdCBmPWwuZ2V0U2V0dGluZ3MoKSx2PSJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBmLnRhYk1vdmVzP2YudGFiTW92ZXMoZCk6Zi50YWJNb3ZlcztoLmluY2x1ZGVzKCJzaGlmdCIpP2wuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC12LnJvdywtdi5jb2wpOmwuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KHYucm93LHYuY29sKSxjLmNsb3NlKCEwKX19LHtrZXlzOltb'@;
put 'IkVzY2FwZSJdXSxjYWxsYmFjazooKT0+Yy5jbG9zZSgpfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9OZXh0SXRlbSgpfSx7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT5jLmdldE5hdmlnYXRvcigpLnRvUHJldmlvdXNJdGVt'@;
put 'KCl9LHtrZXlzOltbbC5pc1J0bCgpPyJBcnJvd0xlZnQiOiJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT57Y29uc3QgZD1hLmdldFNlbGVjdGVkTGFzdCgpO2lmKGQpe2NvbnN0IGg9Yy5vcGVuU3ViTWVudShkWzBdKTtoJiZoLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9fX0se2tl'@;
put 'eXM6W1tsLmlzUnRsKCk/IkFycm93UmlnaHQiOiJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9PnthLmdldFNlbGVjdGVkTGFzdCgpJiZjLmlzU3ViTWVudSgpJiYoYy5jbG9zZSgpLGMuaXNTdWJNZW51KCkmJmMucGFyZW50TWVudS5ob3RNZW51Lmxpc3RlbigpKX19LHtrZXlzOltbIkNvbnRy'@;
put 'b2wvTWV0YSIsIkFycm93VXAiXSxbIkhvbWUiXV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQXJyb3dEb3duIl0sWyJFbmQiXV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9MYXN0SXRlbSgpfSx7'@;
put 'a2V5czpbWyJFbnRlciJdLFsiU3BhY2UiXV0sY2FsbGJhY2s6ZD0+e2NvbnN0IGg9YS5nZXRTZWxlY3RlZExhc3QoKTtoJiYoYS5nZXRTb3VyY2VEYXRhQXRSb3coaFswXSkuc3VibWVudT9jLm9wZW5TdWJNZW51KGhbMF0pLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCk6KGMuZXhlY3V0'@;
put 'ZUNvbW1hbmQoZCksYy5jbG9zZSghMCkpKX19LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+e2EuZ2V0U2VsZWN0ZWRMYXN0KCk/YS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLWEuY291bnRWaXNpYmxlUm93cygpLDApOmMuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19'@;
put 'LHtrZXlzOltbIlBhZ2VEb3duIl1dLGNhbGxiYWNrOigpPT57YS5nZXRTZWxlY3RlZExhc3QoKT9hLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydChhLmNvdW50VmlzaWJsZVJvd3MoKSwwKTpjLmdldE5hdmlnYXRvcigpLnRvTGFzdEl0ZW0oKX19XX0oYykpLGwuZm9yRWFjaChaPT57bGV0e3No'@;
put 'b3J0Y3V0czpuZSxjb250ZXh0TmFtZTpjZX09WjtoKG5lLGNlKX0pLHthZGRDdXN0b21TaG9ydGN1dHM6aCxnZXRDdXN0b21TaG9ydGN1dHM6ZnVuY3Rpb24gZigpe3JldHVyblsuLi5hXX0sZ2V0Q29udGV4dDpNLGxpc3RlbjpmdW5jdGlvbiBEKFope2MuaG90TWVudS5nZXRTaG9ydGN1dE1h'@;
put 'bmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSh2KFopKX19fSh0aGlzKSksYjkoRUYsdGhpcykubGlzdGVuKCksdGhpcy5mb2N1cygpLHRoaXMuaXNTdWJNZW51KCkmJnRoaXMuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLCgpPT50aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiYWZ0'@;
put 'ZXJTdWJtZW51T3BlbiIsdGhpcykpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJPcGVuIix0aGlzKX1jbG9zZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5pc09wZW5lZCgpKWlmKGwmJnRoaXMuaXNTdWJN'@;
put 'ZW51KCkpdGhpcy5wYXJlbnRNZW51LmNsb3NlKCk7ZWxzZSBpZihiOShFVCx0aGlzKS5jbGVhcigpLHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuaG90TWVudS5kZXN0cm95KCksdGhpcy5ob3RNZW51PW51bGwsdGhpcy5o'@;
put 'b3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpLHRoaXMuaXNTdWJNZW51KCkpe2lmKHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0IGE9'@;
put 'dGhpcy5wYXJlbnRNZW51LmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCk7YSYmdmEodGhpcy5wYXJlbnRNZW51LmhvdE1lbnUuZ2V0Q2VsbChhWzBdLDApLFtQMighMSldKX10aGlzLnBhcmVudE1lbnUuaG90TWVudS5saXN0ZW4oKX19b3BlblN1Yk1lbnUobCl7aWYoIXRoaXMuaG90TWVudSly'@;
put 'ZXR1cm4hMTtjb25zdCBhPXRoaXMuaG90TWVudS5nZXRDZWxsKGwsMCk7aWYodGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCksIWF8fCFmdW5jdGlvbiBHY3QoYyl7cmV0dXJuIHBhKGMsImh0U3VibWVudSIpfShhKSlyZXR1cm4hMTtjb25zdCBkPXRoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRS'@;
put 'b3cobCksaD1uZXcgcV8odGhpcy5ob3Qse3BhcmVudDp0aGlzLG5hbWU6ZC5uYW1lLGNsYXNzTmFtZTp0aGlzLm9wdGlvbnMuY2xhc3NOYW1lLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjp0aGlzLm9wdGlvbnMuY29udGFpbmVyfSk7cmV0dXJuIGguc2V0TWVudUl0ZW1zKGQuc3VibWVu'@;
put 'dS5pdGVtcyksaC5vcGVuKCksaC5zZXRQb3NpdGlvbihhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKSx0aGlzLmhvdFN1Yk1lbnVzW2Qua2V5XT1oLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZhKGEsW1AyKCEwKV0pLGh9Y2xvc2VTdWJNZW51KGwpe2NvbnN0IGE9dGhpcy5o'@;
put 'b3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhsKSxkPXRoaXMuaG90U3ViTWVudXNbYS5rZXldO2lmKGQpe2QuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmhvdFN1Yk1lbnVzW2Eua2V5XTtjb25zdCBoPXRoaXMuaG90TWVudS5nZXRDZWxsKGwsMCk7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlh'@;
put 'VGFncyYmdmEoaCxbUDIoITEpXSl9fWNsb3NlQWxsU3ViTWVudXMoKXtZbih0aGlzLmhvdE1lbnUuZ2V0RGF0YSgpLChsLGEpPT50aGlzLmNsb3NlU3ViTWVudShhKSl9aXNBbGxTdWJNZW51c0Nsb3NlZCgpe3JldHVybiAwPT09T2JqZWN0LmtleXModGhpcy5ob3RTdWJNZW51cykubGVuZ3Ro'@;
put 'fWZvY3VzKCl7dGhpcy5pc09wZW5lZCgpJiYodGhpcy5ob3RNZW51LnJvb3RFbGVtZW50LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSksdGhpcy5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5saXN0ZW4oKSx0aGlzLmhvdE1lbnUubGlzdGVuKCkpfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMu'@;
put 'Y29udGFpbmVyLnBhcmVudE5vZGU7dGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmNsb3NlKCksdGhpcy5wYXJlbnRNZW51PW51bGwsdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLGwmJmwucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpfWlzT3BlbmVkKCl7cmV0dXJuIG51bGwhPT10'@;
put 'aGlzLmhvdE1lbnV9ZXhlY3V0ZUNvbW1hbmQobCl7aWYoIXRoaXMuaXNPcGVuZWQoKXx8IXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZEl0ZW0oKTtpZih0aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdCIsYSxsKSx0aGlzLmlzQ29tbWFuZFBh'@;
put 'c3NpdmUoYSkpcmV0dXJuO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLGg9ZD9mdW5jdGlvbiBXY3QoYyl7cmV0dXJuIHlzKGMsbD0+KHtzdGFydDpsLmdldFRvcFN0YXJ0Q29ybmVyKCksZW5kOmwuZ2V0Qm90dG9tRW5kQ29ybmVyKCl9KSl9KGQpOltdO3RoaXMucnVuTG9j'@;
put 'YWxIb29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCksdGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5wYXJlbnRNZW51LnJ1bkxvY2FsSG9va3MoImV4ZWN1dGVDb21tYW5kIixhLmtleSxoLGwpfWlzQ29tbWFuZFBhc3NpdmUobCl7cmV0dXJuITE9PT1sLmlzQ29tbWFuZHx8REoobCl8fHhG'@;
put 'KGwsdGhpcy5ob3QpfHxrSihsKX1zZXRPZmZzZXQobCl7dGhpcy5wb3NpdGlvbmVyLnNldE9mZnNldChsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowKX1zZXRQb3NpdGlvbihsKXt0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBvc2l0aW9u'@;
put 'ZXIuc2V0UGFyZW50RWxlbWVudCh0aGlzLnBhcmVudE1lbnUuY29udGFpbmVyKSx0aGlzLnBvc2l0aW9uZXIuc2V0RWxlbWVudCh0aGlzLmNvbnRhaW5lcikudXBkYXRlUG9zaXRpb24obCl9dXBkYXRlTWVudURpbWVuc2lvbnMoKXtjb25zdCBsPXRoaXMuaG90TWVudS52aWV3LmdldFN0eWxl'@;
put 'c0hhbmRsZXIoKSx7d3RUYWJsZTphfT10aGlzLmhvdE1lbnUudmlldy5fd3QsZD10aGlzLmhvdE1lbnUuZ2V0U2V0dGluZ3MoKS5kYXRhLGg9YS5oaWRlci5zdHlsZSxmPWEuaG9sZGVyLnN0eWxlLHY9cGFyc2VJbnQoaC53aWR0aCwxMCksTT1LdShkLChELFosbmUpPT57Y29uc3QgYmU9dGhp'@;
put 'cy5ob3RNZW51LmdldENlbGwobmUsMCk/TXUodGhpcy5ob3RNZW51LmdldENlbGwobmUsMCkpOjA7cmV0dXJuIEQrKFoubmFtZT09PW9zPzE6YmUpfSwwKTtsLmlzQ2xhc3NpY1RoZW1lKCk/KGYud2lkdGg9YCR7diszfXB4YCxmLmhlaWdodD1gJHtNKzN9cHhgKTooZi53aWR0aD1gJHt2fXB4'@;
put 'YCxmLmhlaWdodD1gJHtNfXB4YCksaC5oZWlnaHQ9Zi5oZWlnaHR9Y3JlYXRlQ29udGFpbmVyKCl7Y29uc3QgYT10aGlzLm9wdGlvbnMuY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7bGV0IGgsZD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06'@;
put 'bnVsbDtyZXR1cm4gZCYmKG1sKGQpJiYoZD1kLmNhbGwodGhpcy5ob3QpLGQ9bnVsbD09PWR8fHljKGQpPyIiOmQudG9TdHJpbmcoKSksZD1kLnJlcGxhY2UoL1teQS1aYS16MC05XS9nLCJfIiksZD1gJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfVN1Yl8ke2R9YCxoPWEucXVlcnlTZWxlY3Rv'@;
put 'cihgLiR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX0uJHtkfWApKSxofHwoaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLFRpKGgsYGh0TWVudSBoYW5kc29udGFibGUgJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfWApLGQmJlRpKGgsZCksdGhpcy5vcHRpb25zLmNvbnRhaW5lci5hcHBlbmRDaGls'@;
put 'ZChoKSksaH1vbkFmdGVySW5pdCgpe3RoaXMudXBkYXRlTWVudURpbWVuc2lvbnMoKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2YSh0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQsW1sicm9sZSIsIm1lbnUiXSxGNygtMSldKX1vbkRvY3VtZW50TW91c2VEb3duKGwpe3RoaXMu'@;
put 'aXNPcGVuZWQoKSYmKHRoaXMub3B0aW9ucy5zdGFuZGFsb25lJiZ0aGlzLmhvdE1lbnUmJiFSbShsLnRhcmdldCx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpfHwodGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCl8fHRoaXMuaXNTdWJNZW51KCkpJiYhUm0obC50YXJnZXQsIi5odE1lbnUiKSkm'@;
put 'JnRoaXMuY2xvc2UoITApfW9uRG9jdW1lbnRDb250ZXh0TWVudShsKXt0aGlzLmlzT3BlbmVkKCkmJnBhKGwudGFyZ2V0LCJodENvcmUiKSYmUm0obC50YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KSYmbC5wcmV2ZW50RGVmYXVsdCgpfX1mdW5jdGlvbiBMSihjLGwsYSl7cmV0dXJu'@;
put 'KGw9ZnVuY3Rpb24gdXV0KGMpe3ZhciBsPWZ1bmN0aW9uIGR1dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5'@;
put 'cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsi'@;
put 'In0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gQUYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBh'@;
put 'cmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfVRsKHFfLHkxKTtjb25zdCBUVD0iY29udGV4dE1lbnUiLF9nZT1UVDtNby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJD'@;
put 'b250ZXh0TWVudURlZmF1bHRPcHRpb25zIiksTW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbnRleHRNZW51U2hvdyIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51U2hvdyIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNv'@;
put 'bnRleHRNZW51SGlkZSIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51RXhlY3V0ZSIpO3ZhciBBVD1uZXcgV2Vha1NldDtjbGFzcyBrRiBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBsdXQoYyxsKXsoZnVu'@;
put 'Y3Rpb24gY3V0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsQVQpLExKKHRoaXMsImNvbW1hbmRFeGVjdXRvciIs'@;
put 'bmV3IHNnZSh0aGlzLmhvdCkpLExKKHRoaXMsIml0ZW1zRmFjdG9yeSIsbnVsbCksTEoodGhpcywibWVudSIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFRUfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDcwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMo'@;
put 'KXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVyblt3RixDRixvcyxfVCx3VCxvcyxfRixTVCxvcyxTRix5RixvcyxDVCxvcyxZMl19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1RUXX1lbmFi'@;
put 'bGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1RUXTsiZnVuY3Rpb24iPT10eXBlb2YgYS5jYWxsYmFjayYmdGhpcy5jb21tYW5kRXhlY3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2soYS5jYWxsYmFjayksdGhp'@;
put 'cy5tZW51PW5ldyBxXyh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodENvbnRleHRNZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6YS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHl9KSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJiZWZvcmVPcGVuIiwoKT0+QUYo'@;
put 'QVQsdGhpcyxwdXQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PkFGKEFULHRoaXMsZ3V0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+QUYoQVQsdGhpcyxtdXQpLmNhbGwodGhpcykpLHRoaXMu'@;
put 'bWVudS5hZGRMb2NhbEhvb2soImV4ZWN1dGVDb21tYW5kIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBsLmV4ZWN1dGVDb21tYW5kLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRk'@;
put 'SG9vaygiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsZD0+QUYoQVQsdGhpcyxmdXQpLmNhbGwodGhpcyxkKSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCks'@;
put 'c3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJih0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMubWVudT1udWxsKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMo'@;
put 'KXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJCYWNrc2xhc2giXSxbIlNoaWZ0IiwiRjEwIl1dLGNhbGxiYWNrOigpPT57Y29uc3R7aGlnaGxpZ2h0Omx9PXRoaXMuaG90'@;
put 'LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7dGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpO2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbChsLnJvdyxsLmNvbCwhMCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1oRih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVu'@;
put 'dCk7dGhpcy5vcGVuKHtsZWZ0OmEubGVmdCtkLmxlZnQsdG9wOmEudG9wK2QudG9wLTErYS5oZWlnaHR9LHtsZWZ0OmEud2lkdGgsYWJvdmU6LWEuaGVpZ2h0fSksdGhpcy5tZW51LmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCl9LHJ1bk9ubHlJZjooKT0+e3ZhciBsO2NvbnN0IGE9bnVs'@;
put 'bD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gYSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoYSkmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKX0sZ3JvdXA6X2dlfSl9dW5yZWdpc3RlclNo'@;
put 'b3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKF9nZSl9b3BlbihsKXt2YXIgYTtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Fi'@;
put 'b3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH07aWYobnVsbCE9PShhPXRoaXMubWVudSkmJnZvaWQgMCE9PWEmJmEuaXNPcGVuZWQoKSlyZXR1cm47dGhpcy5wcmVwYXJlTWVudUl0ZW1zKCksdGhpcy5tZW51Lm9wZW4oKTtjb25zdCBoPXRoaXMubWVudS50YWJsZUJvcmRlcldpZHRoPjA7'@;
put 'WGEoZCwoZix2KT0+e2NvbnN0IE09WyJiZWxvdyIsInJpZ2h0Il0uaW5jbHVkZXModik/ZisxOmYtMTt0aGlzLm1lbnUuc2V0T2Zmc2V0KHYsaD9mOk0pfSksdGhpcy5tZW51LnNldFBvc2l0aW9uKGwpfWNsb3NlKCl7dmFyIGw7bnVsbD09PShsPXRoaXMubWVudSl8fHZvaWQgMD09PWx8fGwu'@;
put 'Y2xvc2UoKSx0aGlzLml0ZW1zRmFjdG9yeT1udWxsfWV4ZWN1dGVDb21tYW5kKGwpe251bGw9PT10aGlzLml0ZW1zRmFjdG9yeSYmdGhpcy5wcmVwYXJlTWVudUl0ZW1zKCk7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gt'@;
put 'MV09YXJndW1lbnRzW2hdO3RoaXMuY29tbWFuZEV4ZWN1dG9yLmV4ZWN1dGUobCwuLi5kKX1wcmVwYXJlTWVudUl0ZW1zKCl7dGhpcy5pdGVtc0ZhY3Rvcnk9bmV3IGRnZSh0aGlzLmhvdCxrRi5ERUZBVUxUX0lURU1TKTtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbVFRdLGE9e2l0'@;
put 'ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGwpfTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixhKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoYS5pdGVtcyk7Y29uc3QgZD10aGlzLml0ZW1zRmFjdG9yeS5nZXRJ'@;
put 'dGVtcyhsKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsZCksdGhpcy5tZW51LnNldE1lbnVJdGVtcyhkKSxZbihkLGg9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChoLmtleSxoKSl9ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0aGlz'@;
put 'Lm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBmdXQoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGE9bC5yb3dIZWFkZXJzLGQ9bC5jb2xIZWFkZXJzLGY9Yy50YXJnZXQ7aWYodGhpcy5jbG9zZSgpLHBhKGYsImhhbmRzb250YWJs'@;
put 'ZUlucHV0Iil8fChjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKSwhKGF8fGR8fGZ1bmN0aW9uIGgoTSl7cmV0dXJuIlREIj09PU0ubm9kZU5hbWV8fCJURCI9PT1NLnBhcmVudE5vZGUubm9kZU5hbWV9KGYpfHxwYShmLCJjdXJyZW50IikmJnBhKGYsInd0Qm9yZGVyIikp'@;
put 'KSlyZXR1cm47Y29uc3Qgdj1oRih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCk7dGhpcy5vcGVuKHt0b3A6Yy5jbGllbnRZK3YudG9wLGxlZnQ6Yy5jbGllbnRYK3YubGVmdH0pfWZ1bmN0aW9uIHB1dCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb250ZXh0'@;
put 'TWVudVNob3ciLHRoaXMpfWZ1bmN0aW9uIGd1dCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gbXV0KCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVIaWRlIix0aGlzKX1rRi5TRVBB'@;
put 'UkFUT1I9e25hbWU6b3N9O2NsYXNzIEN1dHtjb25zdHJ1Y3Rvcigpe3RoaXMuZGF0YT17fX1zZXREYXRhKGwsYSl7dGhpcy5kYXRhW2xdPWF9Z2V0RGF0YShsKXtyZXR1cm4gdGhpcy5kYXRhW2xdfHx2b2lkIDB9fWNsYXNzIFN1dHtjb25zdHJ1Y3Rvcigpe3RoaXMuY2xpcGJvYXJkRGF0YT1u'@;
put 'ZXcgQ3V0fXByZXZlbnREZWZhdWx0KCl7fWNvbXBvc2VkUGF0aCgpe3JldHVybltdfX1mdW5jdGlvbiBYXyhjLGwsYSl7d2dlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3Z2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2Ft'@;
put 'ZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFExKGMsbCl7cmV0dXJuIGMuZ2V0KFFfKGMsbCkpfWZ1bmN0aW9uIEpfKGMsbCxhKXtyZXR1cm4gYy5zZXQoUV8oYyxsKSxhKSxhfWZ1bmN0aW9uIFFfKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZTY9bmV3IFdlYWtNYXAsT0o9bmV3IFdlYWtNYXAsa1Q9bmV3IFdlYWtNYXAs'@;
put 'UEo9bmV3IFdlYWtNYXAsRko9bmV3IFdlYWtNYXAsRFQ9bmV3IFdlYWtNYXAsSVQ9bmV3IFdlYWtTZXQ7Y2xhc3MgeHV0e2NvbnN0cnVjdG9yKGwpe2xldHtjb3VudFJvd3M6YSxjb3VudENvbHVtbnM6ZCxyb3dzTGltaXQ6aCxjb2x1bW5zTGltaXQ6Zixjb3VudENvbHVtbkhlYWRlcnM6dn09'@;
put 'bDsoZnVuY3Rpb24gTXV0KGMsbCl7d2dlKGMsbCksbC5hZGQoYyl9KSh0aGlzLElUKSxYXyh0aGlzLGU2LHZvaWQgMCksWF8odGhpcyxPSix2b2lkIDApLFhfKHRoaXMsa1Qsdm9pZCAwKSxYXyh0aGlzLFBKLHZvaWQgMCksWF8odGhpcyxGSix2b2lkIDApLFhfKHRoaXMsRFQsdm9pZCAwKSxK'@;
put 'XyhPSix0aGlzLGEpLEpfKGtULHRoaXMsZCksSl8oUEosdGhpcyxoKSxKXyhGSix0aGlzLGYpLEpfKERULHRoaXMsdil9c2V0U2VsZWN0ZWRSYW5nZShsKXtKXyhlNix0aGlzLGwpfWdldENlbGxzUmFuZ2UoKXtpZigwPT09UTEoT0osdGhpcykuY2FsbCh0aGlzKXx8MD09PVExKGtULHRoaXMp'@;
put 'LmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7cm93OmwsY29sOmF9PVExKGU2LHRoaXMpLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpkLGNvbDpofT1RMShlNix0aGlzKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxmPVFfKElULHRoaXMsRXV0KS5jYWxsKHRoaXMsbCxkKSx2PVFfKElULHRo'@;
put 'aXMsSEopLmNhbGwodGhpcyxhLGgpO3JldHVybntpc1JhbmdlVHJpbW1lZDpkIT09Znx8aCE9PXYsc3RhcnRSb3c6bCxzdGFydENvbDphLGVuZFJvdzpmLGVuZENvbDp2fX1nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PVExKGtULHRoaXMpLmNhbGwodGhpcyl8fDA9'@;
put 'PT1RMShEVCx0aGlzKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDpsfT1RMShlNix0aGlzKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09UTEoZTYsdGhpcykuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZD1RXyhJVCx0aGlzLEhKKS5jYWxsKHRoaXMsbCxhKTtyZXR1cm57aXNS'@;
put 'YW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LTEsc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fWdldEFsbENvbHVtbkhlYWRlcnNSYW5nZSgpe2lmKDA9PT1RMShrVCx0aGlzKS5jYWxsKHRoaXMpfHwwPT09UTEoRFQsdGhpcykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtj'@;
put 'b2w6bH09UTEoZTYsdGhpcykuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7Y29sOmF9PVExKGU2LHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLGQ9UV8oSVQsdGhpcyxISikuY2FsbCh0aGlzLGwsYSk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmEhPT1kLHN0YXJ0Um93Oi1RMShEVCx0aGlzKS5jYWxs'@;
put 'KHRoaXMpLHN0YXJ0Q29sOmwsZW5kUm93Oi0xLGVuZENvbDpkfX19ZnVuY3Rpb24gSEooYyxsKXtyZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK1ExKEZKLHRoaXMpLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gRXV0KGMsbCl7cmV0dXJuIE1hdGgubWluKGwsTWF0aC5tYXgoYytRMShQ'@;
put 'Six0aGlzKS5jYWxsKHRoaXMpLTEsYykpfWZ1bmN0aW9uIENnZShjKXtjb25zdCBsPVtdLGE9W107cmV0dXJuIFluKGMsZD0+eyRvKE1hdGgubWluKGQuc3RhcnRSb3csZC5lbmRSb3cpLE1hdGgubWF4KGQuc3RhcnRSb3csZC5lbmRSb3cpLEQ9PnstMT09PWwuaW5kZXhPZihEKSYmbC5wdXNo'@;
put 'KEQpfSksJG8oTWF0aC5taW4oZC5zdGFydENvbCxkLmVuZENvbCksTWF0aC5tYXgoZC5zdGFydENvbCxkLmVuZENvbCksRD0+ey0xPT09YS5pbmRleE9mKEQpJiZhLnB1c2goRCl9KX0pLHtyb3dzOmwsY29sdW1uczphfX1mdW5jdGlvbiB0NihjLGwsYSl7U2dlKGMsbCksbC5zZXQoYyxhKX1m'@;
put 'dW5jdGlvbiBTZ2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFJUKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBBdXQoYyl7dmFyIGw9'@;
put 'ZnVuY3Rpb24ga3V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBZZChjLGwpe3JldHVybiBjLmdldChHZChjLGwpKX1mdW5jdGlvbiBwMyhjLGwsYSl7cmV0dXJuIGMuc2V0KEdkKGMsbCksYSksYX1mdW5jdGlv'@;
put 'biBHZChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9TW8uZ2V0U2luZ2xldG9u'@;
put 'KCkucmVnaXN0ZXIoImFmdGVyQ29weUxpbWl0IiksTW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiKSxNby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ3V0IiksTW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ3V0IiksTW8uZ2V0'@;
put 'U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVBhc3RlIiksTW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUGFzdGUiKSxNby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29weSIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvcHkiKTtjb25zdCBO'@;
put 'Sj0iY29weVBhc3RlIixJdXQ9WyJmcmFnbWVudFNlbGVjdGlvbiJdLE1nZT1bJzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iSGFuZHNvbnRhYmxlIi8+JywnPHN0eWxlIHR5cGU9InRleHQvY3NzIj50ZHt3aGl0ZS1zcGFjZTpub3JtYWx9YnJ7bXNvLWRhdGEtcGxhY2VtZW50OnNh'@;
put 'bWUtY2VsbH08L3N0eWxlPiddLmpvaW4oIiIpO3ZhciBWSj1uZXcgV2Vha01hcCxCSj1uZXcgV2Vha01hcCxqSj1uZXcgV2Vha01hcCxldz1uZXcgV2Vha01hcCxERj1uZXcgV2Vha01hcCxJRj1uZXcgV2Vha01hcCx0dz1uZXcgV2Vha01hcCxSRj1uZXcgV2Vha01hcCxGaD1uZXcgV2Vha1Nl'@;
put 'dDtjbGFzcyBSdXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gVHV0KGMsbCl7U2dlKGMsbCksbC5hZGQoYyl9KHRoaXMsRmgpLFJUKHRoaXMsImNvbHVtbnNMaW1pdCIsMS8wKSxSVCh0aGlzLCJyb3dzTGltaXQiLDEvMCksUlQodGhpcywi'@;
put 'cGFzdGVNb2RlIiwib3ZlcndyaXRlIiksUlQodGhpcywidWlDb250YWluZXIiLHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5KSx0Nih0aGlzLFZKLCExKSx0Nih0aGlzLEJKLCExKSx0Nih0aGlzLGpKLCExKSx0Nih0aGlzLGV3LCJjZWxscy1vbmx5IiksdDYodGhpcyxERiwhMSksdDYodGhp'@;
put 'cyxJRiwhMSksdDYodGhpcyx0dyxuZXcgeHV0KHtjb3VudFJvd3M6KCk9PnRoaXMuaG90LmNvdW50Um93cygpLGNvdW50Q29sdW1uczooKT0+dGhpcy5ob3QuY291bnRDb2xzKCkscm93c0xpbWl0OigpPT50aGlzLnJvd3NMaW1pdCxjb2x1bW5zTGltaXQ6KCk9PnRoaXMuY29sdW1uc0xpbWl0'@;
put 'LGNvdW50Q29sdW1uSGVhZGVyczooKT0+dGhpcy5ob3Qudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKX0pKSx0Nih0aGlzLFJGLCExKSxSVCh0aGlzLCJjb3B5YWJsZVJhbmdlcyIsW10pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBOSn1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZ'@;
put 'Uygpe3JldHVybltOSiwuLi5JdXRdfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDgwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntwYXN0ZU1vZGU6Im92ZXJ3cml0ZSIscm93c0xpbWl0OjEvMCxjb2x1bW5zTGltaXQ6MS8wLGNvcHlDb2x1bW5IZWFk'@;
put 'ZXJzOiExLGNvcHlDb2x1bW5Hcm91cEhlYWRlcnM6ITEsY29weUNvbHVtbkhlYWRlcnNPbmx5OiExfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbTkpdfWVuYWJsZVBsdWdpbigpe3ZhciBsLGEsZD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMucGFzdGVNb2Rl'@;
put 'PW51bGwhPT0obD10aGlzLmdldFNldHRpbmcoInBhc3RlTW9kZSIpKSYmdm9pZCAwIT09bD9sOnRoaXMucGFzdGVNb2RlLHRoaXMucm93c0xpbWl0PWlzTmFOKHRoaXMuZ2V0U2V0dGluZygicm93c0xpbWl0IikpP3RoaXMucm93c0xpbWl0OnRoaXMuZ2V0U2V0dGluZygicm93c0xpbWl0Iiks'@;
put 'dGhpcy5jb2x1bW5zTGltaXQ9aXNOYU4odGhpcy5nZXRTZXR0aW5nKCJjb2x1bW5zTGltaXQiKSk/dGhpcy5jb2x1bW5zTGltaXQ6dGhpcy5nZXRTZXR0aW5nKCJjb2x1bW5zTGltaXQiKSxwMyhWSix0aGlzLHRoaXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkhlYWRlcnMiKSkscDMoQkosdGhp'@;
put 'cyx0aGlzLmdldFNldHRpbmcoImNvcHlDb2x1bW5Hcm91cEhlYWRlcnMiKSkscDMoakosdGhpcyx0aGlzLmdldFNldHRpbmcoImNvcHlDb2x1bW5IZWFkZXJzT25seSIpKSx0aGlzLnVpQ29udGFpbmVyPW51bGwhPT0oYT10aGlzLmdldFNldHRpbmcoInVpQ29udGFpbmVyIikpJiZ2b2lkIDAh'@;
put 'PT1hP2E6dGhpcy51aUNvbnRhaW5lcix0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsaD0+R2QoRmgsdGhpcyxQdXQpLmNhbGwodGhpcyxoKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxl'@;
put 'bmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gR2QoRmgsZCxGdXQpLmNhbGwoZCwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25FbmQiLCgpPT5HZChGaCx0aGlzLEh1dCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFn'@;
put 'ZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQsImNvcHkiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Db3B5KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwiY3V0IixmdW5jdGlvbigp'@;
put 'e3JldHVybiBkLm9uQ3V0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwicGFzdGUiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25QYXN0ZSguLi5hcmd1bWVudHMpfSksVEUoKSYmKHRoaXMuZXZlbnRNYW5hZ2Vy'@;
put 'LmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHksIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIEdkKEZoLGQsTnV0KS5jYWxs'@;
put 'KGQsLi4uZil9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRz'@;
put 'W3ZdO3JldHVybiBHZChGaCxkLFZ1dCkuY2FsbChkLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKCk9PkdkKEZoLHRoaXMsQnV0KS5jYWxsKHRoaXMpKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMu'@;
put 'ZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1jb3B5KCl7cDMoZXcsdGhpcyxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNlbGxzLW9ubHkiKSxwMyhE'@;
put 'Rix0aGlzLCEwKSxHZChGaCx0aGlzLHhnZSkuY2FsbCh0aGlzLCJjb3B5Iil9Y29weUNlbGxzT25seSgpe3RoaXMuY29weSgiY2VsbHMtb25seSIpfWNvcHlDb2x1bW5IZWFkZXJzT25seSgpe3RoaXMuY29weSgiY29sdW1uLWhlYWRlcnMtb25seSIpfWNvcHlXaXRoQWxsQ29sdW1uSGVhZGVy'@;
put 'cygpe3RoaXMuY29weSgid2l0aC1jb2x1bW4tZ3JvdXAtaGVhZGVycyIpfWNvcHlXaXRoQ29sdW1uSGVhZGVycygpe3RoaXMuY29weSgid2l0aC1jb2x1bW4taGVhZGVycyIpfWN1dCgpe3AzKElGLHRoaXMsITApLEdkKEZoLHRoaXMseGdlKS5jYWxsKHRoaXMsImN1dCIpfWdldFJhbmdlZENv'@;
put 'cHlhYmxlRGF0YShsKXtyZXR1cm4gblQodGhpcy5nZXRSYW5nZWREYXRhKGwpKX1nZXRSYW5nZWREYXRhKGwpe2NvbnN0IGE9W10se3Jvd3M6ZCxjb2x1bW5zOmh9PUNnZShsKTtyZXR1cm4gWW4oZCxmPT57Y29uc3Qgdj1bXTtZbihoLE09Pnt2LnB1c2goZjwwP3RoaXMuaG90LmdldENvbEhl'@;
put 'YWRlcihNLGYpOnRoaXMuaG90LmdldENvcHlhYmxlRGF0YShmLE0pKX0pLGEucHVzaCh2KX0pLGF9cGFzdGUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1sxXT9hcmd1bWVudHNbMV06bDtpZighbCYmIWEpcmV0dXJuO2NvbnN0IGQ9bmV3IFN1dDtsJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsbCksYSYmZC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsYSksdGhpcy5vblBhc3RlKGQpfXNldENvcHlh'@;
put 'YmxlVGV4dCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47aWYobC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiB2b2lkKHRoaXMuY29weWFibGVSYW5nZXM9W10pO1lkKHR3LHRoaXMpLnNldFNlbGVjdGVkUmFuZ2UobCk7Y29uc3QgYT1uZXcg'@;
put 'TWFwKFtbImhlYWRlcnMiLG51bGxdLFsiY2VsbHMiLG51bGxdXSk7ImNvbHVtbi1oZWFkZXJzLW9ubHkiPT09WWQoZXcsdGhpcyk/YS5zZXQoImhlYWRlcnMiLFlkKHR3LHRoaXMpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk6KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIj09PVlk'@;
put 'KGV3LHRoaXMpP2Euc2V0KCJoZWFkZXJzIixZZCh0dyx0aGlzKS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1JhbmdlKCkpOiJ3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzIj09PVlkKGV3LHRoaXMpJiZhLnNldCgiaGVhZGVycyIsWWQodHcsdGhpcykuZ2V0QWxsQ29sdW1uSGVhZGVyc1Jh'@;
put 'bmdlKCkpLGEuc2V0KCJjZWxscyIsWWQodHcsdGhpcykuZ2V0Q2VsbHNSYW5nZSgpKSksdGhpcy5jb3B5YWJsZVJhbmdlcz1BcnJheS5mcm9tKGEudmFsdWVzKCkpLmZpbHRlcihoPT5udWxsIT09aCkubWFwKGg9PntsZXR7c3RhcnRSb3c6ZixzdGFydENvbDp2LGVuZFJvdzpNLGVuZENvbDpE'@;
put 'fT1oO3JldHVybntzdGFydFJvdzpmLHN0YXJ0Q29sOnYsZW5kUm93Ok0sZW5kQ29sOkR9fSksdGhpcy5jb3B5YWJsZVJhbmdlcz10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsdGhpcy5jb3B5YWJsZVJhbmdlcyk7Y29uc3QgZD1hLmdldCgiY2VsbHMiKTtpZihudWxs'@;
put 'IT09ZCYmZC5pc1JhbmdlVHJpbW1lZCl7Y29uc3R7c3RhcnRSb3c6aCxzdGFydENvbDpmLGVuZFJvdzp2LGVuZENvbDpNfT1kO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvcHlMaW1pdCIsdi1oKzEsTS1mKzEsdGhpcy5yb3dzTGltaXQsdGhpcy5jb2x1bW5zTGltaXQpfX1pc0VkaXRvck9w'@;
put 'ZW5lZCgpe3ZhciBsO3JldHVybiBudWxsPT09KGw9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmlzT3BlbmVkKCl9cG9wdWxhdGVWYWx1ZXMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRz'@;
put 'WzFdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwubGVuZ3RoKXJldHVybjtjb25zdCBkPWwubGVuZ3RoLGg9bFswXS5sZW5ndGgsZj1bXSx7cm93OnYsY29sOk19PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OkQsY29sOlp9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7'@;
put 'bGV0IG5lPXYsY2U9TSxiZT12LEVlPU07Zm9yKDtmLmxlbmd0aDxkfHxuZTw9RDspe2NvbnN0e3NraXBSb3dPblBhc3RlOkJlLHZpc3VhbFJvdzpxZX09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobmUsTSk7aWYobmU9cWUrMSwhMD09PUJlKWNvbnRpbnVlO2JlPXFlLGNlPU07Y29uc3QgcnQ9W10s'@;
put 'cHQ9Zi5sZW5ndGglZDtmb3IoO3J0Lmxlbmd0aDxofHxjZTw9Wjspe2NvbnN0e3NraXBDb2x1bW5PblBhc3RlOmR0LHZpc3VhbENvbDpKdH09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodixjZSk7KGNlPUp0KzEsITAhPT1kdCkmJihFZT1KdCxydC5wdXNoKGxbcHRdW3J0Lmxlbmd0aCVoXSkpfWYu'@;
put 'cHVzaChydCl9cmV0dXJuIHAzKFJGLHRoaXMsITApLHRoaXMuaG90LnBvcHVsYXRlRnJvbUFycmF5KHYsTSxmLHZvaWQgMCx2b2lkIDAsIkNvcHlQYXN0ZS5wYXN0ZSIsdGhpcy5wYXN0ZU1vZGUpLFt2LE0sYmUsRWVdfW9uQ29weShsKXtjb25zdCBhPWwuY29tcG9zZWRQYXRoKClbMF0sZD10'@;
put 'aGlzLmhvdC5nZXRGb2N1c01hbmFnZXIoKS5nZXRSZWZvY3VzRWxlbWVudCgpLGg9YT8uaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhWWQoREYsdGhpcyl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8RXAoYSkmJihoJiZhIT09ZHx8'@;
put 'IWgmJmEhPT10aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSYmIW1FKGEsdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47bC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuc2V0Q29weWFibGVUZXh0KCkscDMoREYsdGhpcywhMSk7Y29uc3QgZj10aGlzLmdldFJhbmdlZERhdGEodGhpcy5jb3B5'@;
put 'YWJsZVJhbmdlcyksdj1HZChGaCx0aGlzLEx1dCkuY2FsbCh0aGlzLHRoaXMuY29weWFibGVSYW5nZXMpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb3B5IixmLHRoaXMuY29weWFibGVSYW5nZXMsdikpe2NvbnN0IEQ9blQoZik7aWYobCYmbC5jbGlwYm9hcmREYXRhKXtjb25zdCBa'@;
put 'PVkkKGYpO2wuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixEKSxsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixbTWdlLFpdLmpvaW4oIiIpKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0'@;
put 'YS5zZXREYXRhKCJUZXh0IixEKTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb3B5IixmLHRoaXMuY29weWFibGVSYW5nZXMsdil9cDMoZXcsdGhpcywiY2VsbHMtb25seSIpfW9uQ3V0KGwpe2NvbnN0IGE9bC5jb21wb3NlZFBhdGgoKVswXSxkPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigp'@;
put 'LmdldFJlZm9jdXNFbGVtZW50KCksaD1hPy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iik7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFZZChJRix0aGlzKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpfHxFcChhKSYmKGgmJmEhPT1kfHwhaCYmYSE9PXRoaXMuaG90LnJvb3REb2N1'@;
put 'bWVudC5ib2R5JiYhbUUoYSx0aGlzLmhvdC5yb290RWxlbWVudCkpKXJldHVybjtsLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDb3B5YWJsZVRleHQoKSxwMyhJRix0aGlzLCExKTtjb25zdCBmPXRoaXMuZ2V0UmFuZ2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhvdC5y'@;
put 'dW5Ib29rcygiYmVmb3JlQ3V0IixmLHRoaXMuY29weWFibGVSYW5nZXMpKXtjb25zdCBNPW5UKGYpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7Y29uc3QgRD1ZJChmKTtsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsTSksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQv'@;
put 'aHRtbCIsW01nZSxEXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsTSk7dGhpcy5ob3QuZW1wdHlTZWxlY3RlZENlbGxzKCJDb3B5UGFzdGUuY3V0IiksdGhpcy5ob3QucnVu'@;
put 'SG9va3MoImFmdGVyQ3V0IixmLHRoaXMuY29weWFibGVSYW5nZXMpfX1vblBhc3RlKGwpe2NvbnN0IGE9bC5jb21wb3NlZFBhdGgoKVswXSxkPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9jdXNFbGVtZW50KCksaD1hPy5oYXNBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0Iik7'@;
put 'aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8IXRoaXMuaG90LmdldFNlbGVjdGVkKCl8fEVwKGEpJiYoaCYmYSE9PWR8fCFoJiZhIT09dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkmJiFtRShhLHRoaXMuaG90LnJvb3RFbGVtZW50KSkpcmV0dXJu'@;
put 'O2xldCBmO2lmKGwucHJldmVudERlZmF1bHQoKSxsJiZ0eXBlb2YgbC5jbGlwYm9hcmREYXRhPCJ1Iil7Y29uc3QgbmU9RE8obC5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvaHRtbCIpLHtBRERfVEFHUzpbIm1ldGEiXSxBRERfQVRUUjpbImNvbnRlbnQiXSxGT1JDRV9CT0RZOiEwfSk7'@;
put 'Zj1uZSYmLyg8dGFibGUpfCg8VEFCTEUpL2cudGVzdChuZSk/dWZlKG5lLHRoaXMuaG90LnJvb3REb2N1bWVudCkuZGF0YTpsLmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9wbGFpbiIpfWVsc2UgdHlwZW9mIENsaXBib2FyZEV2ZW50PiJ1IiYmdHlwZW9mIHRoaXMuaG90LnJvb3RXaW5k'@;
put 'b3cuY2xpcGJvYXJkRGF0YTwidSImJihmPXRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJUZXh0IikpO2lmKCJzdHJpbmciPT10eXBlb2YgZiYmKGY9ZnVuY3Rpb24gSW50KGMpe2NvbnN0IGw9W1siIl1dO2lmKDA9PT1jLmxlbmd0aClyZXR1cm4gbDtsZXQgaCxh'@;
put 'PTAsZD0wO2Zvcig7Yy5sZW5ndGg+MCYmaCE9PWMubGVuZ3RoOylpZihoPWMubGVuZ3RoLGMubWF0Y2goYXBlKSljPWMucmVwbGFjZShhcGUsIiIpLGErPTEsbFtkXVthXT0iIjtlbHNlIGlmKGMubWF0Y2gob3BlKSljPWMucmVwbGFjZShvcGUsIiIpLGE9MCxkKz0xLGxbZF09WyIiXTtlbHNl'@;
put 'e2xldCBmPSIiO2lmKGMuc3RhcnRzV2l0aCgnIicpKXtsZXQgdj0wLE09ITA7Zm9yKDtNOyl7Y29uc3QgRD1jLnNsaWNlKDAsMSk7JyInPT09RCYmKHYrPTEpLGYrPUQsKDA9PT0oYz1jLnNsaWNlKDEpKS5sZW5ndGh8fGMubWF0Y2goL15bXHRcclxuXS8pJiZ2JTI9PTApJiYoTT0hMSl9Zj1m'@;
put 'LnJlcGxhY2UoL14iLywiIikucmVwbGFjZSgvIiQvLCIiKS5yZXBsYWNlKC9bIl0qL2csRD0+bmV3IEFycmF5KE1hdGguZmxvb3IoRC5sZW5ndGgvMikpLmZpbGwoJyInKS5qb2luKCIiKSl9ZWxzZXtjb25zdCB2PWMubWF0Y2goRG50KTtmPXY/dlswXToiIixjPWMuc2xpY2UoZi5sZW5ndGgp'@;
put 'fWxbZF1bYV09Zn1yZXR1cm4gbH0oZikpLHZvaWQgMD09PWZ8fGYmJjA9PT1mLmxlbmd0aHx8ITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUGFzdGUiLGYsdGhpcy5jb3B5YWJsZVJhbmdlcykpcmV0dXJuO2NvbnN0W3YsTSxELFpdPXRoaXMucG9wdWxhdGVWYWx1ZXMoZik7dGhpcy5o'@;
put 'b3Quc2VsZWN0Q2VsbCh2LE0sTWF0aC5taW4odGhpcy5ob3QuY291bnRSb3dzKCktMSxEKSxNYXRoLm1pbih0aGlzLmhvdC5jb3VudENvbHMoKS0xLFopKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQYXN0ZSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJv'@;
put 'eSgpfX1mdW5jdGlvbiB4Z2UoYyl7aWYoVEUoKSl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKGwpe2NvbnN0e3JvdzphLGNvbDpkfT1sLmhpZ2hsaWdodCxoPXRoaXMuaG90LmdldENlbGwoYSxkLCEwKTtoJiZGMmUoaCwoKT0+e3RoaXMuaG90LnJvb3REb2N1'@;
put 'bWVudC5leGVjQ29tbWFuZChjKX0pfX1lbHNlIHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZChjKX1mdW5jdGlvbiBMdXQoYyl7Y29uc3R7cm93czpsfT1DZ2UoYyk7bGV0IGE9MDtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoJiYhKGxbZF0+PTApO2QrKylhKz0xO3JldHVybntjb2x1'@;
put 'bW5IZWFkZXJzQ291bnQ6YX19ZnVuY3Rpb24gT3V0KCl7aWYodGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKGMpe2NvbnN0e3JvdzpsLGNvbDphfT1jLmhpZ2hsaWdodCxkPXRoaXMuaG90LmdldENlbGwobCxhLCEwKTtk'@;
put 'JiZ4JChkKX19fWZ1bmN0aW9uIEVnZSgpe2lmKHRoaXMuaG90LmlzTGlzdGVuaW5nKCkpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZihjKXtjb25zdHtyb3c6bCxjb2w6YX09Yy5oaWdobGlnaHQsZD10aGlzLmhvdC5nZXRDZWxsKGwsYSwhMCk7bnVsbCE9ZCYm'@;
put 'ZC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpJiZFJChkKX19fWZ1bmN0aW9uIFB1dChjKXtjLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIHZ1dChjKXtyZXR1cm57a2V5OiJjb3B5IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShR'@;
put 'Syl9LGNhbGxiYWNrKCl7Yy5jb3B5Q2VsbHNPbmx5KCl9LGRpc2FibGVkKCl7aWYoMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0'@;
put 'dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxZZChWSix0aGlzKSYmYy5pdGVtcy5wdXNoKGZ1bmN0aW9uIF91dChjKXtyZXR1cm57a2V5OiJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLG5hbWUoKXtjb25z'@;
put 'dCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/QXMobC5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoZXEsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5V2l0aENvbHVtbkhlYWRlcnMoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xI'@;
put 'ZWFkZXJzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLFlkKEJKLHRo'@;
put 'aXMpJiZjLml0ZW1zLnB1c2goZnVuY3Rpb24geXV0KGMpe3JldHVybntrZXk6ImNvcHlfd2l0aF9jb2x1bW5fZ3JvdXBfaGVhZGVycyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9BcyhsLmdldFdpZHRoKCktMSwwLDEpOjA7cmV0dXJuIHRoaXMuZ2V0'@;
put 'VHJhbnNsYXRlZFBocmFzZSh0cSxhKX0sY2FsbGJhY2soKXtjLmNvcHlXaXRoQWxsQ29sdW1uSGVhZGVycygpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKXx8IXRoaXMuZ2V0U2V0dGluZ3MoKS5uZXN0ZWRIZWFkZXJzKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxl'@;
put 'Y3RlZFJhbmdlTGFzdCgpO2lmKCFsfHxsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuITA7Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWF8fGEubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxZZChqSix0aGlzKSYmYy5pdGVtcy5wdXNoKGZ1bmN0aW9uIGJ1dChjKXtyZXR1'@;
put 'cm57a2V5OiJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/QXMobC5nZXRXaWR0aCgpLTEsMCwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UobnEsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5Q29s'@;
put 'dW1uSGVhZGVyc09ubHkoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5oYXNDb2xIZWFkZXJzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1'@;
put 'cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLGMuaXRlbXMucHVzaChmdW5jdGlvbiB3dXQoYyl7cmV0dXJue2tleToiY3V0IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShycSl9LGNhbGxiYWNrKCl7Yy5jdXQoKX0sZGlzYWJsZWQoKXtpZigwPT09'@;
put 'dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+'@;
put 'MX0saGlkZGVuOiExfX0odGhpcykpfWZ1bmN0aW9uIEZ1dChjLGwsYSxkLGgpe1lkKFJGLHRoaXMpJiYoaC52YWx1ZT0hMCkscDMoUkYsdGhpcywhMSl9ZnVuY3Rpb24gSHV0KCl7dGhpcy5pc0VkaXRvck9wZW5lZCgpfHx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZyYWdtZW50U2VsZWN0aW9u'@;
put 'fHx0aGlzLnNldENvcHlhYmxlVGV4dCgpfWZ1bmN0aW9uIE51dCgpe0dkKEZoLHRoaXMsRWdlKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFZ1dCgpe0dkKEZoLHRoaXMsT3V0KS5jYWxsKHRoaXMpfWZ1bmN0aW9uIEJ1dCgpe0dkKEZoLHRoaXMsRWdlKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFRnZShj'@;
put 'LGwpe3JldHVybmBib3JkZXJfcm93JHtjfWNvbCR7bH1gfWZ1bmN0aW9uIHpKKGMpe3ZhciBsLGE7cmV0dXJuKEZvKGMuc3RhcnQpfHxGbyhjLmxlZnQpKSYmKGMuc3RhcnQ9bnVsbCE9PShsPWMuc3RhcnQpJiZ2b2lkIDAhPT1sP2w6Yy5sZWZ0KSwoRm8oYy5lbmQpfHxGbyhjLnJpZ2h0KSkm'@;
put 'JihjLmVuZD1udWxsIT09KGE9Yy5lbmQpJiZ2b2lkIDAhPT1hP2E6Yy5yaWdodCksZGVsZXRlIGMubGVmdCxkZWxldGUgYy5yaWdodCxjfWZ1bmN0aW9uIE9UKGMpe3JldHVybiBGbyhjLnN0YXJ0KSYmKGMubGVmdD1jLnN0YXJ0KSxGbyhjLmVuZCkmJihjLnJpZ2h0PWMuZW5kKSxjfWZ1bmN0'@;
put 'aW9uIFVKKGMsbCl7cmV0dXJue2lkOlRnZShjLGwpLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzAwMCIsY29ybmVyVmlzaWJsZTohMX0scm93OmMsY29sOmwsdG9wOntoaWRlOiEwfSxib3R0b206e2hpZGU6ITB9LHN0YXJ0OntoaWRlOiEwfSxlbmQ6e2hpZGU6ITB9fX1mdW5jdGlvbiBPZyhj'@;
put 'LGwpe2xldCBhPSExO3JldHVybiBZbihjLmdldFNlbGVjdGVkUmFuZ2UoKSxkPT57ZC5mb3JBbGwoKGgsZik9PntpZihoPDB8fGY8MClyZXR1cm47Y29uc3Qgdj1jLmdldENlbGxNZXRhKGgsZikuYm9yZGVycztpZih2KXtpZighbClyZXR1cm4gYT0hMCwhMTtpZighRXUodltsXSwiaGlkZSIp'@;
put 'fHwhMT09PXZbbF0uaGlkZSlyZXR1cm4gYT0hMCwhMX19KX0pLGF9ZnVuY3Rpb24gTEYoYyl7cmV0dXJuYDxzcGFuIGNsYXNzPSJzZWxlY3RlZCI+XHUyNzEzPC9zcGFuPiR7Y31gfWNvbnN0IFd1dD1uZXcgTWFwKFtbImxlZnQiLCJzdGFydCJdLFsicmlnaHQiLCJlbmQiXV0pO2Z1bmN0aW9u'@;
put 'IEd1dChjKXtyZXR1cm57a2V5OiJib3JkZXJzOnRvcCIsbmFtZSgpe2xldCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh3cSk7cmV0dXJuIE9nKHRoaXMsInRvcCIpJiYobD1MRihsKSksbH0sY2FsbGJhY2sobCxhKXtjb25zdCBkPU9nKHRoaXMsInRvcCIpO2MucHJlcGFyZUJvcmRlcihh'@;
put 'LCJ0b3AiLGQpfX19ZnVuY3Rpb24gJHV0KGMpe2NvbnN0IGw9Yy5ob3QuaXNSdGwoKT8ic3RhcnQiOiJlbmQiO3JldHVybntrZXk6ImJvcmRlcnM6cmlnaHQiLG5hbWUoKXtsZXQgYT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQ3EpO3JldHVybiBPZyh0aGlzLGwpJiYoYT1MRihhKSksYX0s'@;
put 'Y2FsbGJhY2soYSxkKXtjb25zdCBoPU9nKHRoaXMsbCk7Yy5wcmVwYXJlQm9yZGVyKGQsbCxoKX19fWZ1bmN0aW9uIEt1dChjKXtyZXR1cm57a2V5OiJib3JkZXJzOmJvdHRvbSIsbmFtZSgpe2xldCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShTcSk7cmV0dXJuIE9nKHRoaXMsImJvdHRv'@;
put 'bSIpJiYobD1MRihsKSksbH0sY2FsbGJhY2sobCxhKXtjb25zdCBkPU9nKHRoaXMsImJvdHRvbSIpO2MucHJlcGFyZUJvcmRlcihhLCJib3R0b20iLGQpfX19ZnVuY3Rpb24gcXV0KGMpe2NvbnN0IGw9Yy5ob3QuaXNSdGwoKT8iZW5kIjoic3RhcnQiO3JldHVybntrZXk6ImJvcmRlcnM6bGVm'@;
put 'dCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShNcSk7cmV0dXJuIE9nKHRoaXMsbCkmJihhPUxGKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9T2codGhpcyxsKTtjLnByZXBhcmVCb3JkZXIoZCxsLGgpfX19ZnVuY3Rpb24gWHV0KGMpe3JldHVybntrZXk6ImJv'@;
put 'cmRlcnM6bm9fYm9yZGVycyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoeHEpfSxjYWxsYmFjayhsLGEpe2MucHJlcGFyZUJvcmRlcihhLCJub0JvcmRlcnMiKX0sZGlzYWJsZWQoKXtyZXR1cm4hT2codGhpcyl9fX1mdW5jdGlvbiBBZ2UoYyxsLGEpe2lmKCJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IE9GPSJjdXN0b21Cb3JkZXJzIjt2YXIgWko9bmV3'@;
put 'IFdlYWtTZXQ7Y2xhc3MgaTB0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEp1dChjLGwpeyhmdW5jdGlvbiBRdXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2'@;
put 'YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxaSiksZnVuY3Rpb24gZTB0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB0MHQoYyl7dmFyIGw9ZnVuY3Rpb24gbjB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2'@;
put 'YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1'@;
put 'ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp'@;
put 'dGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywic2F2ZWRCb3JkZXJzIixbXSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIE9GfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDkwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtPRl19'@;
put 'ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGw9PkFnZShaSix0aGlzLG8wdCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT5BZ2UoWkosdGhpcyxhMHQpLmNhbGwodGhpcykpLHN1'@;
put 'cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oaWRlQm9yZGVycygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuY2hhbmdlQm9yZGVyU2V0dGluZ3MoKSxzdXBl'@;
put 'ci51cGRhdGVQbHVnaW4oKX1zZXRCb3JkZXJzKGwsYSl7bGV0IGQ9WyJ0b3AiLCJib3R0b20iLCJzdGFydCIsImVuZCJdLGg9bnVsbDthJiYodGhpcy5jaGVja1NldHRpbmdzQ29oZXNpb24oW2FdKSxkPU9iamVjdC5rZXlzKGEpLGg9ekooYSkpO2NvbnN0IHY9UUUoeF8obCkse2NyZWF0ZUNl'@;
put 'bGxDb29yZHM6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMuYmluZCh0aGlzLmhvdCksY3JlYXRlQ2VsbFJhbmdlOnRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UuYmluZCh0aGlzLmhvdCl9KTtZbihsLE09Pnt2KE0pLmZvckFsbCgoRCxaKT0+e1luKGQsbmU9Pnt0aGlzLnByZXBhcmVCb3Jk'@;
put 'ZXJGcm9tQ3VzdG9tQWRkZWQoRCxaLGgsZnVuY3Rpb24gWXV0KGMpe3ZhciBsO3JldHVybiBudWxsIT09KGw9V3V0LmdldChjKSkmJnZvaWQgMCE9PWw/bDpjfShuZSkpfSl9KX0pLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9Z2V0Qm9yZGVycyhsKXtpZighQXJyYXkuaXNBcnJheShsKSlyZXR1'@;
put 'cm4gdGhpcy5zYXZlZEJvcmRlcnM7Y29uc3QgZD1RRSh4XyhsKSx7Y3JlYXRlQ2VsbENvb3Jkczp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKHRoaXMuaG90KSxjcmVhdGVDZWxsUmFuZ2U6dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKHRoaXMuaG90KX0pLGg9W107cmV0'@;
put 'dXJuIFluKGwsZj0+e2QoZikuZm9yQWxsKCh2LE0pPT57WW4odGhpcy5zYXZlZEJvcmRlcnMsRD0+e0Qucm93PT09diYmRC5jb2w9PT1NJiZoLnB1c2goT1QoRCkpfSl9KX0pLGh9Y2xlYXJCb3JkZXJzKGwpe2w/dGhpcy5zZXRCb3JkZXJzKGwpOihZbih0aGlzLnNhdmVkQm9yZGVycyxhPT57'@;
put 'dGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MoYS5pZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShhLnJvdyxhLmNvbCwiYm9yZGVycyIpfSksdGhpcy5zYXZlZEJvcmRlcnMubGVuZ3RoPTApfWluc2VydEJvcmRlckludG9T'@;
put 'ZXR0aW5ncyhsLGEpe3RoaXMuY2hlY2tTYXZlZEJvcmRlcnMobCl8fHRoaXMuc2F2ZWRCb3JkZXJzLnB1c2gobCk7Y29uc3QgaD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGwuY29sKSk7dGhpcy5jaGVja0N1c3RvbVNlbGVjdGlv'@;
put 'bnMobCxoLGEpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmFkZEN1c3RvbVNlbGVjdGlvbih7Ym9yZGVyOmwsdmlzdWFsQ2VsbFJhbmdlOmh9KX1wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuY291bnRSb3dzKCksdj10aGlzLmhv'@;
put 'dC5jb3VudENvbHMoKTtpZihsPj1mfHxhPj12KXJldHVybjtsZXQgTT1VSihsLGEpO2QmJihNPWZ1bmN0aW9uIHp1dChjLGwpe3JldHVybiBFdShsLCJib3JkZXIiKSYmbC5ib3JkZXImJihjLmJvcmRlcj1sLmJvcmRlciksRXUobCwidG9wIikmJkZvKGwudG9wKSYmKGwudG9wPyhxYShsLnRv'@;
put 'cCl8fChsLnRvcD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLnRvcD1sLnRvcCk6KGwudG9wPXtoaWRlOiEwfSxjLnRvcD1sLnRvcCkpLEV1KGwsImJvdHRvbSIpJiZGbyhsLmJvdHRvbSkmJihsLmJvdHRvbT8ocWEobC5ib3R0b20pfHwobC5ib3R0b209e3dpZHRoOjEsY29sb3I6IiMwMDAi'@;
put 'fSksYy5ib3R0b209bC5ib3R0b20pOihsLmJvdHRvbT17aGlkZTohMH0sYy5ib3R0b209bC5ib3R0b20pKSxFdShsLCJzdGFydCIpJiZGbyhsLnN0YXJ0KSYmKGwuc3RhcnQ/KHFhKGwuc3RhcnQpfHwobC5zdGFydD17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLnN0YXJ0PWwuc3RhcnQpOihs'@;
put 'LnN0YXJ0PXtoaWRlOiEwfSxjLnN0YXJ0PWwuc3RhcnQpKSxFdShsLCJlbmQiKSYmRm8obC5lbmQpJiYobC5lbmQ/KHFhKGwuZW5kKXx8KGwuZW5kPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuZW5kPWwuZW5kKToobC5lbmQ9e2hpZGU6ITB9LGMuZW5kPWwuZW5kKSksY30oTSxkKSxZbih0'@;
put 'aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsRD0+e2lmKE0uaWQ9PT1ELnNldHRpbmdzLmlkKXJldHVybiBPYmplY3QuYXNzaWduKEQuc2V0dGluZ3MsZCksTS5pZD1ELnNldHRpbmdzLmlkLE0udG9wPUQuc2V0dGluZ3MudG9wLE0uYm90dG9tPUQuc2V0dGlu'@;
put 'Z3MuYm90dG9tLE0uc3RhcnQ9RC5zZXR0aW5ncy5zdGFydCxNLmVuZD1ELnNldHRpbmdzLmVuZCwhMX0pKSx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsImJvcmRlcnMiLE9UKE0pKSx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhNLGgpfXByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRk'@;
put 'ZWRSYW5nZShsLGEpe2NvbnN0IGQ9TWF0aC5taW4obC50by5yb3csdGhpcy5ob3QuY291bnRSb3dzKCktMSksaD1NYXRoLm1pbihsLnRvLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKS0xKTskbyhsLmZyb20ucm93LGQsZj0+eyRvKGwuZnJvbS5jb2wsaCx2PT57Y29uc3QgTT1VSihmLHYpO2xl'@;
put 'dCBEPTA7Zj09PWwuZnJvbS5yb3cmJkV1KGEsInRvcCIpJiYoRCs9MSxNLnRvcD1hLnRvcCksZj09PWwudG8ucm93JiZFdShhLCJib3R0b20iKSYmKEQrPTEsTS5ib3R0b209YS5ib3R0b20pLHY9PT1sLmZyb20uY29sJiZFdShhLCJzdGFydCIpJiYoRCs9MSxNLnN0YXJ0PWEuc3RhcnQpLHY9'@;
put 'PT1sLnRvLmNvbCYmRXUoYSwiZW5kIikmJihEKz0xLE0uZW5kPWEuZW5kKSxEPjAmJih0aGlzLmhvdC5zZXRDZWxsTWV0YShmLHYsImJvcmRlcnMiLE9UKE0pKSx0aGlzLmluc2VydEJvcmRlckludG9TZXR0aW5ncyhNKSl9KX0pfXJlbW92ZUFsbEJvcmRlcnMobCxhKXtjb25zdCBkPVRnZShs'@;
put 'LGEpO3RoaXMuc3BsaWNlQm9yZGVyKGQpLHRoaXMuY2xlYXJCb3JkZXJzRnJvbVNlbGVjdGlvblNldHRpbmdzKGQpLHRoaXMuY2xlYXJOdWxsQ2VsbFJhbmdlKCksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEobCxhLCJib3JkZXJzIil9c2V0Qm9yZGVyKGwsYSxkLGgpe2xldCBmPXRoaXMuaG90'@;
put 'LmdldENlbGxNZXRhKGwsYSkuYm9yZGVycztmPWYmJnZvaWQgMCE9PWYuYm9yZGVyP3pKKGYpOlVKKGwsYSksaD8oZltkXT17aGlkZTohMH0sND09PXRoaXMuY291bnRIaWRlKGYpP3RoaXMucmVtb3ZlQWxsQm9yZGVycyhsLGEpOih0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250'@;
put 'ZXh0TWVudShmLGQsaCl8fHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGYpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIsT1QoZikpKSk6KGZbZF09e3dpZHRoOjEsY29sb3I6IiMwMDAifSx0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShm'@;
put 'LGQsaCl8fHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGYpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIsT1QoZikpKX1wcmVwYXJlQm9yZGVyKGwsYSxkKXtZbihsLGg9PntsZXR7c3RhcnQ6ZixlbmQ6dn09aDtpZihmLnJvdz09PXYucm93JiZmLmNvbD09PXYuY29s'@;
put 'KSJub0JvcmRlcnMiPT09YT90aGlzLnJlbW92ZUFsbEJvcmRlcnMoZi5yb3csZi5jb2wpOnRoaXMuc2V0Qm9yZGVyKGYucm93LGYuY29sLGEsZCk7ZWxzZSBzd2l0Y2goYSl7Y2FzZSJub0JvcmRlcnMiOiRvKGYuY29sLHYuY29sLE09PnskbyhmLnJvdyx2LnJvdyxEPT57dGhpcy5yZW1vdmVB'@;
put 'bGxCb3JkZXJzKEQsTSl9KX0pO2JyZWFrO2Nhc2UidG9wIjokbyhmLmNvbCx2LmNvbCxNPT57dGhpcy5zZXRCb3JkZXIoZi5yb3csTSxhLGQpfSk7YnJlYWs7Y2FzZSJib3R0b20iOiRvKGYuY29sLHYuY29sLE09Pnt0aGlzLnNldEJvcmRlcih2LnJvdyxNLGEsZCl9KTticmVhaztjYXNlInN0'@;
put 'YXJ0IjokbyhmLnJvdyx2LnJvdyxNPT57dGhpcy5zZXRCb3JkZXIoTSxmLmNvbCxhLGQpfSk7YnJlYWs7Y2FzZSJlbmQiOiRvKGYucm93LHYucm93LE09Pnt0aGlzLnNldEJvcmRlcihNLHYuY29sLGEsZCl9KX19KX1jcmVhdGVDdXN0b21Cb3JkZXJzKGwpe1luKGwsYT0+e2NvbnN0IGQ9ekoo'@;
put 'YSk7YS5yYW5nZT90aGlzLnByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWRSYW5nZShhLnJhbmdlLGQpOnRoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChhLnJvdyxhLmNvbCxkKX0pfWNvdW50SGlkZShsKXtjb25zdHt0b3A6YSxib3R0b206ZCxzdGFydDpoLGVuZDpmfT1sO3Jl'@;
put 'dHVybiBLdShbYSxkLGgsZl0sKE0sRCk9PntsZXQgWj1NO3JldHVybiBEJiZELmhpZGUmJihaKz0xKSxafSwwKX1jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MobCl7Y29uc3QgYT15cyh0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsZD0+ZC5z'@;
put 'ZXR0aW5ncy5pZCkuaW5kZXhPZihsKTthPi0xJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnNbYV0uY2xlYXIoKX1jbGVhck51bGxDZWxsUmFuZ2UoKXtZbih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsKGwsYSk9Pntp'@;
put 'ZihudWxsPT09bC5jZWxsUmFuZ2UpcmV0dXJuIHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9uc1thXS5kZXN0cm95KCksdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zLnNwbGljZShhLDEpLCExfSl9aGlkZUJvcmRlcnMoKXtZ'@;
put 'bih0aGlzLnNhdmVkQm9yZGVycyxsPT57dGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MobC5pZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKX0pfXNwbGljZUJvcmRlcihsKXtjb25zdCBhPXlzKHRoaXMuc2F2ZWRCb3JkZXJzLGQ9PmQuaWQpLmluZGV4T2YobCk7YT4t'@;
put 'MSYmdGhpcy5zYXZlZEJvcmRlcnMuc3BsaWNlKGEsMSl9Y2hlY2tTYXZlZEJvcmRlcnMobCl7bGV0IGE9ITE7cmV0dXJuIDQ9PT10aGlzLmNvdW50SGlkZShsKT8odGhpcy5zcGxpY2VCb3JkZXIobC5pZCksYT0hMCk6WW4odGhpcy5zYXZlZEJvcmRlcnMsKGgsZik9PntpZihsLmlkPT09aC5p'@;
put 'ZClyZXR1cm4gdGhpcy5zYXZlZEJvcmRlcnNbZl09bCxhPSEwLCExfSksYX1jaGVja0N1c3RvbVNlbGVjdGlvbnNGcm9tQ29udGV4dE1lbnUobCxhLGQpe2xldCBoPSExO3JldHVybiBZbih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsZj0+e2lmKGwuaWQ9'@;
put 'PT1mLnNldHRpbmdzLmlkKXJldHVybiBZbih0aGlzLmhvdC52aWV3Ll93dC5zZWxlY3Rpb25NYW5hZ2VyLmdldEJvcmRlckluc3RhbmNlcyhmKSxNPT57TS50b2dnbGVIaWRkZW5DbGFzcyhhLGQpfSksaD0hMCwhMX0pLGh9Y2hlY2tDdXN0b21TZWxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPXRo'@;
put 'aXMuY291bnRIaWRlKGwpO2xldCBmPSExO3JldHVybiA0PT09aD8odGhpcy5yZW1vdmVBbGxCb3JkZXJzKGwucm93LGwuY29sKSxmPSEwKTpZbih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMsdj0+e2lmKGwuaWQ9PT12LnNldHRpbmdzLmlkKXJldHVybiB2'@;
put 'LnZpc3VhbENlbGxSYW5nZT1hLHYuY29tbWl0KCksZCYmWW4odGhpcy5ob3Qudmlldy5fd3Quc2VsZWN0aW9uTWFuYWdlci5nZXRCb3JkZXJJbnN0YW5jZXModiksRD0+e0QuY2hhbmdlQm9yZGVyU3R5bGUoZCxsKX0pLGY9ITAsITF9KSxmfWNoYW5nZUJvcmRlclNldHRpbmdzKCl7Y29uc3Qg'@;
put 'bD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW09GXTtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdCBhPWcxKGwpO3RoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKGEpLGEubGVuZ3RofHwodGhpcy5zYXZlZEJvcmRlcnM9YSksdGhpcy5jcmVhdGVDdXN0b21Cb3JkZXJzKGEpfWVsc2Ugdm9pZCAw'@;
put 'IT09bCYmdGhpcy5jcmVhdGVDdXN0b21Cb3JkZXJzKHRoaXMuc2F2ZWRCb3JkZXJzKX1jaGVja1NldHRpbmdzQ29oZXNpb24obCl7Y29uc3QgYT1mdW5jdGlvbiBVdXQoYyl7cmV0dXJuIGMuc29tZShsPT5GbyhsLmxlZnQpfHxGbyhsLnJpZ2h0KSl9KGwpLGQ9ZnVuY3Rpb24gWnV0KGMpe3Jl'@;
put 'dHVybiBjLnNvbWUobD0+Rm8obC5zdGFydCl8fEZvKGwuZW5kKSl9KGwpO2lmKGEmJmQpdGhyb3cgbmV3IEVycm9yKCdUaGUgImxlZnQiLyJyaWdodCIgYW5kICJzdGFydCIvImVuZCIgb3B0aW9ucyBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFzZSB1c2Ugb25seSB0aGUgb3B0'@;
put 'aW9uICJzdGFydCIvImVuZCIuJyk7aWYodGhpcy5ob3QuaXNSdGwoKSYmYSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAibGVmdCIvInJpZ2h0IiBwcm9wZXJ0aWVzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBSVEwuIFBsZWFzZSB1c2Ugb3B0aW9uICJzdGFydCIvImVuZCIuJyl9ZGVzdHJveSgpe3N1'@;
put 'cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gbzB0KGMpe3RoaXMuaG90LmdldFNldHRpbmdzKClbT0ZdJiZjLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LHtrZXk6ImJvcmRlcnMiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9xKX0sZGlzYWJsZWQoKXtjb25z'@;
put 'dCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hKGwmJiFsLmlzU2luZ2xlSGVhZGVyKCkpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKX0sc3VibWVudTp7aXRlbXM6W0d1dCh0aGlzKSwkdXQodGhpcyksS3V0KHRoaXMpLHF1dCh0aGlzKSxYdXQodGhp'@;
put 'cyldfX0pfWZ1bmN0aW9uIGEwdCgpe3RoaXMuY2hhbmdlQm9yZGVyU2V0dGluZ3MoKX1mdW5jdGlvbiBXSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYzB0KGMpe3ZhciBsPWZ1bmN0aW9uIHUwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1i'@;
put 'b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu'@;
put 'KCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6'@;
put 'Y1tsXT1hLGN9ZnVuY3Rpb24ga2dlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3Qi'@;
put 'KX1jb25zdCBEZ2U9ImRyYWdUb1Njcm9sbCI7dmFyIFlKPW5ldyBXZWFrU2V0O2NsYXNzIGgwdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBzMHQoYyxsKXsoZnVuY3Rpb24gbDB0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsWUopLFdKKHRoaXMsImJvdW5kYXJpZXMiLG51bGwpLFdKKHRoaXMsImNhbGxiYWNrIixudWxsKSxXSih0aGlzLCJsaXN0ZW5p'@;
put 'bmciLCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gRGdlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEwMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbRGdlXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlz'@;
put 'LmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixsPT5rZ2UoWUosdGhpcyxJZ2UpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+a2dlKFlKLHRoaXMsSWdlKS5jYWxsKHRoaXMsbCkpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxz'@;
put 'dXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNldEJv'@;
put 'dW5kYXJpZXMoKXt0aGlzLmJvdW5kYXJpZXM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntsZWZ0OjAscmlnaHQ6dGhpcy5ob3Qucm9vdFdpbmRvdy5pbm5lcldpZHRoLHRvcDowLGJvdHRvbTp0aGlzLmhvdC5yb290V2luZG93LmlubmVy'@;
put 'SGVpZ2h0fX1zZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNrPWx9Y2hlY2sobCxhKXtsZXQgZD0wLGg9MDthPHRoaXMuYm91bmRhcmllcy50b3A/aD1hLXRoaXMuYm91bmRhcmllcy50b3A6YT50aGlzLmJvdW5kYXJpZXMuYm90dG9tJiYoaD1hLXRoaXMuYm91bmRhcmllcy5ib3R0b20pLGw8'@;
put 'dGhpcy5ib3VuZGFyaWVzLmxlZnQ/ZD1sLXRoaXMuYm91bmRhcmllcy5sZWZ0Omw+dGhpcy5ib3VuZGFyaWVzLnJpZ2h0JiYoZD1sLXRoaXMuYm91bmRhcmllcy5yaWdodCksdGhpcy5jYWxsYmFjayhkLGgpfWxpc3Rlbigpe3RoaXMubGlzdGVuaW5nPSEwfXVubGlzdGVuKCl7dGhpcy5saXN0'@;
put 'ZW5pbmc9ITF9aXNMaXN0ZW5pbmcoKXtyZXR1cm4gdGhpcy5saXN0ZW5pbmd9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuaG90O2xldCBhPWw7Zm9yKDthOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsImNvbnRleHRtZW51'@;
put 'IiwoKT0+dGhpcy51bmxpc3RlbigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsIm1vdXNldXAiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91c2Vtb3ZlIixkPT50aGlz'@;
put 'Lm9uTW91c2VNb3ZlKGQpKSxhPU43KGEpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfW9uTW91c2VNb3ZlKGwpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmdGhpcy5jaGVjayhsLmNsaWVudFgsbC5jbGllbnRZKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1m'@;
put 'dW5jdGlvbiBJZ2UoYyl7aWYoRm0oYykpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BPdmVybGF5Lm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50O3RoaXMuc2V0Qm91bmRhcmllcyhsIT09dGhpcy5ob3Qucm9vdFdpbmRvdz9sLmdldEJvdW5kaW5nQ2xp'@;
put 'ZW50UmVjdCgpOnZvaWQgMCksdGhpcy5zZXRDYWxsYmFjaygoYSxkKT0+e3ZhciBoLGY7Y29uc3Qgdj1udWxsIT09KGg9bC5zY3JvbGxMZWZ0KSYmdm9pZCAwIT09aD9oOmwuc2Nyb2xsWCxNPW51bGwhPT0oZj1sLnNjcm9sbFRvcCkmJnZvaWQgMCE9PWY/ZjpsLnNjcm9sbFk7bC5zY3JvbGwo'@;
put 'dis1MCpNYXRoLnNpZ24oYSksTSsyMCpNYXRoLnNpZ24oZCkpfSksdGhpcy5saXN0ZW4oKX1mdW5jdGlvbiBSZ2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVj'@;
put 'dCIpfWZ1bmN0aW9uIEdKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBnMHQoYyl7dmFyIGw9ZnVuY3Rpb24gbTB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMs'@;
put 'bHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTty'@;
put 'ZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBMZ2UoYyxsLGEpe3JldHVybiBjLnNldChHMihj'@;
put 'LGwpLGEpLGF9ZnVuY3Rpb24gRzIoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIp'@;
put 'fU1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIiksTW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZURyb3Bkb3duTWVudVNob3ciKSxNby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVTaG93'@;
put 'IiksTW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51SGlkZSIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudUV4ZWN1dGUiKTtjb25zdCBQRj0iZHJvcGRvd25NZW51IixQVD0iY2hhbmdlVHlwZSIsJEo9UEY7dmFyIEZGPW5l'@;
put 'dyBXZWFrTWFwLGczPW5ldyBXZWFrU2V0O2NsYXNzIEhGIGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFBGfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIzMH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46QXV0b0Nv'@;
put 'bHVtblNpemUiXX1zdGF0aWMgZ2V0IERFRkFVTFRfSVRFTVMoKXtyZXR1cm5bX1Qsd1Qsb3MsU1Qsb3MsYkYsb3MsQ1Qsb3MsWTJdfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIGYwdChjLGwpe1JnZShjLGwpLGwuYWRkKGMpfSh0aGlzLGczKSxHSih0aGlzLCJjb21tYW5kRXhl'@;
put 'Y3V0b3IiLG5ldyBzZ2UodGhpcy5ob3QpKSxHSih0aGlzLCJpdGVtc0ZhY3RvcnkiLG51bGwpLEdKKHRoaXMsIm1lbnUiLG51bGwpLGZ1bmN0aW9uIHAwdChjLGwsYSl7UmdlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxGRiwhMSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIi'@;
put 'LChhLGQpPT5HMihnMyx0aGlzLF8wdCkuY2FsbCh0aGlzLGEsZCkpfWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BGXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5pdGVtc0ZhY3Rvcnk9bmV3IGRnZSh0aGlz'@;
put 'LmhvdCxIRi5ERUZBVUxUX0lURU1TKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gRzIoZzMsbCxFMHQpLmNh'@;
put 'bGwobCwuLi5mKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld3BvcnRTY3JvbGxIb3Jpem9udGFsbHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIEcyKGczLGwseDB0KS5j'@;
put 'YWxsKGwsLi4uZil9KTtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbUEZdLGQ9e2l0ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGEpfTt0aGlzLnJlZ2lzdGVyRXZlbnRzKCksImZ1bmN0aW9uIj09dHlwZW9mIGEuY2FsbGJhY2smJnRoaXMuY29tbWFuZEV4ZWN1dG9yLnNl'@;
put 'dENvbW1vbkNhbGxiYWNrKGEuY2FsbGJhY2spLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLmNhbGxPblBsdWdpbnNSZWFkeSgoKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixkKSx0aGlzLml0'@;
put 'ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoZC5pdGVtcyk7Y29uc3QgaD10aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKTt0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksdGhpcy5tZW51PW5ldyBxXyh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodERyb3Bkb3duTWVudSIsa2Vl'@;
put 'cEluVmlld3BvcnQ6ITAsY29udGFpbmVyOmEudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5fSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixoKSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKGgpLHRoaXMubWVudS5hZGRMb2NhbEhv'@;
put 'b2soImJlZm9yZU9wZW4iLCgpPT5HMihnMyx0aGlzLHcwdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+RzIoZzMsdGhpcyxDMHQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyU3VibWVudU9wZW4iLGY9PkcyKGcz'@;
put 'LHRoaXMsUzB0KS5jYWxsKHRoaXMsZikpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5HMihnMyx0aGlzLE0wdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiZXhlY3V0ZUNvbW1hbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGwuZXhlY3V0ZUNvbW1hbmQuY2FsbChsLC4uLnYpfSksWW4oaCxmPT50aGlzLmNvbW1hbmRFeGVjdXRvci5yZWdpc3RlckNvbW1hbmQoZi5rZXksZikpfSl9dXBkYXRlUGx1Z2luKCl7dGhp'@;
put 'cy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2lu'@;
put 'KCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBhPSgpPT57Y29uc3R7aGlnaGxpZ2h0OmR9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoKGQuaXNIZWFkZXIoKSYmLTE9PT1kLnJvd3x8ZC5pc0NlbGwoKSkmJmQuY29sPj0wKXt0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGQu'@;
put 'Y29sLGQuY29sLC0xKTtjb25zdHtmcm9tOmh9PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZj1oRih0aGlzLm1lbnUuY29udGFpbmVyLHRoaXMuaG90LnJvb3REb2N1bWVudCksdj10aGlzLmhvdC5nZXRDZWxsKC0xLGguY29sLCEwKS5xdWVyeVNlbGVjdG9yKGAuJHtQVH1gKSxN'@;
put 'PXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5vcGVuKHtsZWZ0Ok0ubGVmdCtmLmxlZnQsdG9wOk0udG9wK3Yub2Zmc2V0SGVpZ2h0K2YudG9wfSx7bGVmdDpNLndpZHRoLHJpZ2h0OjAsYWJvdmU6MCxiZWxvdzozfSksdGhpcy5tZW51LmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVt'@;
put 'KCl9fTt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJTaGlmdCIsIkFsdCIsIkFycm93RG93biJdLFsiQ29udHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6YSxydW5Pbmx5SWY6KCk9Pnt2YXIgZDtjb25z'@;
put 'dCBoPW51bGw9PT0oZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5oaWdobGlnaHQ7cmV0dXJuIGgmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGgpJiZoLmlzSGVhZGVyKCkmJiF0aGlzLm1lbnUuaXNPcGVuZWQoKX0sY2Fw'@;
put 'dHVyZUN0cmw6ITAsZ3JvdXA6JEp9LHtrZXlzOltbIlNoaWZ0IiwiQWx0IiwiQXJyb3dEb3duIl1dLGNhbGxiYWNrOmEscnVuT25seUlmOigpPT57dmFyIGQ7Y29uc3QgaD1udWxsPT09KGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuaGln'@;
put 'aGxpZ2h0O3JldHVybiBoJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShoKSYmaC5pc0NlbGwoKSYmIXRoaXMubWVudS5pc09wZW5lZCgpfSxncm91cDokSn1dKX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgi'@;
put 'Z3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoJEopfXJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RWxlbWVudCwiY2xpY2siLGw9PkcyKGczLHRoaXMseTB0KS5jYWxsKHRoaXMsbCkpfW9wZW4obCl7dmFyIGE7bGV0'@;
put 'IGQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnthYm92ZTowLGJlbG93OjAsbGVmdDowLHJpZ2h0OjB9O251bGwhPT0oYT10aGlzLm1lbnUpJiZ2b2lkIDAhPT1hJiZhLmlzT3BlbmVkKCl8fCh0aGlzLm1lbnUub3BlbigpLFhhKGQsKGgs'@;
put 'Zik9Pnt0aGlzLm1lbnUuc2V0T2Zmc2V0KGYsaCl9KSx0aGlzLm1lbnUuc2V0UG9zaXRpb24obCkpfWNsb3NlKCl7dmFyIGw7bnVsbD09PShsPXRoaXMubWVudSl8fHZvaWQgMD09PWx8fGwuY2xvc2UoKX1leGVjdXRlQ29tbWFuZChsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5l'@;
put 'dyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07dGhpcy5jb21tYW5kRXhlY3V0b3IuZXhlY3V0ZShsLC4uLmQpfXNldExpc3RlbmluZygpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNb'@;
put 'MF07dGhpcy5tZW51LmlzT3BlbmVkKCkmJihsP3RoaXMubWVudS5ob3RNZW51Lmxpc3RlbigpOnRoaXMubWVudS5ob3RNZW51LnVubGlzdGVuKCkpfWRlc3Ryb3koKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24g'@;
put 'T2dlKGMpe2MuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT4hMX1dKX1mdW5jdGlvbiB5MHQoYyl7aWYocGEoYy50YXJnZXQsUFQpKXtjb25zdCBsPWhGKHRoaXMubWVudS5jb250'@;
put 'YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KSxhPWMudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Muc3RvcFByb3BhZ2F0aW9uKCksTGdlKEZGLHRoaXMsITEpLHRoaXMub3Blbih7bGVmdDphLmxlZnQrbC5sZWZ0LHRvcDphLnRvcCtjLnRhcmdldC5vZmZzZXRIZWlnaHQrbC50'@;
put 'b3B9LHtsZWZ0OmEud2lkdGgscmlnaHQ6MCxhYm92ZTowLGJlbG93OjN9KX19ZnVuY3Rpb24gXzB0KGMsbCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5wYXJlbnROb2RlLmNoaWxkTm9kZXMsaD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGQsYSk7'@;
put 'aWYoYzwwfHxoIT09ZC5sZW5ndGgtMSlyZXR1cm47Y29uc3QgZj1sLnF1ZXJ5U2VsZWN0b3IoYC4ke1BUfWApO2lmKHRoaXMuZW5hYmxlZCYmZilyZXR1cm47aWYoIXRoaXMuZW5hYmxlZClyZXR1cm4gdm9pZChmJiZmLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZikpO2NvbnN0IHY9dGhpcy5o'@;
put 'b3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO3YuY2xhc3NOYW1lPVBULHYudHlwZT0iYnV0dG9uIix2LnRhYkluZGV4PS0xLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJih2YSh2LFtINygpLGdFKCIgIildKSx2YShsLFtiMmUoIm1lbnUiKV0pKSx2Lm9u'@;
put 'Y2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbC5maXJzdENoaWxkLmluc2VydEJlZm9yZSh2LGwuZmlyc3RDaGlsZC5maXJzdENoaWxkKX1mdW5jdGlvbiB3MHQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gQzB0KCl7dGhpcy5o'@;
put 'b3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51U2hvdyIsdGhpcyksRzIoZzMsdGhpcyxPZ2UpLmNhbGwodGhpcyx0aGlzLm1lbnUpfWZ1bmN0aW9uIFMwdChjKXtHMihnMyx0aGlzLE9nZSkuY2FsbCh0aGlzLGMpfWZ1bmN0aW9uIE0wdCgpe3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90'@;
put 'LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudUhpZGUiLHRoaXMpfWZ1bmN0aW9uIHgwdChjKXtyZXR1cm4gZnVuY3Rpb24gdjB0KGMsbCl7cmV0dXJuIGMuZ2V0KEcyKGMsbCkpfShGRix0aGlzKT9udWxsOmN9ZnVuY3Rpb24gRTB0KGMpe3BhKGMudGFyZ2V0LFBUKSYmTGdlKEZGLHRoaXMs'@;
put 'ITApfWZ1bmN0aW9uIFBnZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVDB0KGMpe3ZhciBsPWZ1bmN0aW9uIEEwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChj'@;
put 'LGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7'@;
put 'cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9SEYuU0VQQVJBVE9SPXtuYW1lOm9zfTtjb25zdCBEMHQ9Y2xh'@;
put 'c3MgazB0e2NvbnN0cnVjdG9yKGwpe1BnZSh0aGlzLCJob3QiLHZvaWQgMCksUGdlKHRoaXMsIm9wdGlvbnMiLHt9KSx0aGlzLmhvdD1sfXNldE9wdGlvbnMobCl7dGhpcy5vcHRpb25zPWx9Z2V0RGF0YSgpe2NvbnN0e3N0YXJ0Um93Omwsc3RhcnRDb2w6YSxlbmRSb3c6ZCxlbmRDb2w6aH09'@;
put 'dGhpcy5fZ2V0RGF0YVJhbmdlKCksZj10aGlzLm9wdGlvbnMsdj1bXTtyZXR1cm4gJG8obCxkLE09Pntjb25zdCBEPVtdOyFmLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KE0pfHwoJG8oYSxoLFo9PnshZi5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNv'@;
put 'bHVtbihaKXx8RC5wdXNoKHRoaXMuaG90LmdldERhdGFBdENlbGwoTSxaKSl9KSx2LnB1c2goRCkpfSksdn1nZXRSb3dIZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMucm93SGVhZGVycyl7Y29uc3R7c3RhcnRSb3c6YSxlbmRSb3c6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCks'@;
put 'aD10aGlzLmhvdC5nZXRSb3dIZWFkZXIoKTskbyhhLGQsZj0+eyF0aGlzLm9wdGlvbnMuZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coZil8fGwucHVzaChoW2ZdKX0pfXJldHVybiBsfWdldENvbHVtbkhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMub3B0aW9ucy5jb2x1'@;
put 'bW5IZWFkZXJzKXtjb25zdHtzdGFydENvbDphLGVuZENvbDpkfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxoPXRoaXMuaG90LmdldENvbEhlYWRlcigpOyRvKGEsZCxmPT57IXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihmKXx8bC5wdXNoKGhb'@;
put 'Zl0pfSl9cmV0dXJuIGx9X2dldERhdGFSYW5nZSgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCktMSxhPXRoaXMuaG90LmNvdW50Um93cygpLTE7bGV0W2Q9MCxoPTAsZj1hLHY9bF09dGhpcy5vcHRpb25zLnJhbmdlO3JldHVybiBkPU1hdGgubWF4KGQsMCksaD1NYXRoLm1heChoLDAp'@;
put 'LGY9TWF0aC5taW4oZixhKSx2PU1hdGgubWluKHYsbCkse3N0YXJ0Um93OmQsc3RhcnRDb2w6aCxlbmRSb3c6ZixlbmRDb2w6dn19X2lzSGlkZGVuUm93KGwpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKX1faXNIaWRk'@;
put 'ZW5Db2x1bW4obCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfX07ZnVuY3Rpb24gRmdlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBJMHQoYyl7dmFyIGw9ZnVuY3Rpb24gUjB0KGMsbCl7aWYoIm9iamVj'@;
put 'dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt'@;
put 'dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy'@;
put 'YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBLSntzdGF0aWMgZ2V0IERFRkFVTFRfT1BUSU9OUygpe3JldHVybnttaW1lVHlwZToidGV4dC9wbGFpbiIsZmlsZUV4dGVuc2lvbjoidHh0IixmaWxlbmFtZToiSGFuZHNvbnRhYmxlIFtZWVlZXS1b'@;
put 'TU1dLVtERF0iLGVuY29kaW5nOiJ1dGYtOCIsYm9tOiExLGNvbHVtbkhlYWRlcnM6ITEscm93SGVhZGVyczohMSxleHBvcnRIaWRkZW5Db2x1bW5zOiExLGV4cG9ydEhpZGRlblJvd3M6ITEscmFuZ2U6W119fWNvbnN0cnVjdG9yKGwsYSl7RmdlKHRoaXMsImRhdGFQcm92aWRlciIsdm9pZCAw'@;
put 'KSxGZ2UodGhpcywib3B0aW9ucyIsdm9pZCAwKSx0aGlzLmRhdGFQcm92aWRlcj1sLHRoaXMub3B0aW9ucz10aGlzLl9tZXJnZU9wdGlvbnMoYSksdGhpcy5kYXRhUHJvdmlkZXIuc2V0T3B0aW9ucyh0aGlzLm9wdGlvbnMpfV9tZXJnZU9wdGlvbnMobCl7bGV0IGE9bjModGhpcy5jb25zdHJ1'@;
put 'Y3Rvci5ERUZBVUxUX09QVElPTlMpO2NvbnN0IGQ9bmV3IERhdGU7cmV0dXJuIGE9eHUobjMoS0ouREVGQVVMVF9PUFRJT05TKSxhKSxhPXh1KGEsbCksYS5maWxlbmFtZT11JChhLmZpbGVuYW1lLHtZWVlZOmQuZ2V0RnVsbFllYXIoKSxNTTpgJHtkLmdldE1vbnRoKCkrMX1gLnBhZFN0YXJ0'@;
put 'KDIsIjAiKSxERDpgJHtkLmdldERhdGUoKX1gLnBhZFN0YXJ0KDIsIjAiKX0pLGF9fWNvbnN0IEwwdD1LSjtmdW5jdGlvbiBIZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBxSj1uZXcgV2Vha1NldDtmdW5jdGlvbiBaMHQoYyl7cmV0dXJuIGMuc3RhcnRzV2l0aCgiPSIpfHxjLnN0YXJ0c1dpdGgoIisiKXx8Yy5zdGFydHNXaXRoKCItIil8fGMuc3RhcnRzV2l0'@;
put 'aCgiQCIpfHxjLnN0YXJ0c1dpdGgoIlx0Iil8fGMuc3RhcnRzV2l0aCgiXHIiKT9gJyR7Y31gOmN9ZnVuY3Rpb24gVzB0KGMsbCl7cmV0dXJuIGwudGVzdChjKT9gJyR7Y31gOmN9Y29uc3QgWEo9e2NzdjpjbGFzcyBVMHQgZXh0ZW5kcyBMMHR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1'@;
put 'bWVudHMpLGZ1bmN0aW9uIE8wdChjLGwpeyhmdW5jdGlvbiBQMHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxx'@;
put 'Sil9c3RhdGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRleHQvY3N2IixmaWxlRXh0ZW5zaW9uOiJjc3YiLGJvbTohMCxjb2x1bW5EZWxpbWl0ZXI6IiwiLHJvd0RlbGltaXRlcjoiXHJcbiIsc2FuaXRpemVWYWx1ZXM6ITF9fWV4cG9ydCgpe2NvbnN0IGw9dGhp'@;
put 'cy5vcHRpb25zLGE9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0RGF0YSgpO2xldCBkPXRoaXMuZGF0YVByb3ZpZGVyLmdldENvbHVtbkhlYWRlcnMoKTtjb25zdCBoPWQubGVuZ3RoPjAsZj10aGlzLmRhdGFQcm92aWRlci5nZXRSb3dIZWFkZXJzKCksdj1mLmxlbmd0aD4wO2xldCBNPWwuYm9tPyJc'@;
put 'dWZlZmYiOiIiO3JldHVybiBoJiYoZD15cyhkLEQ9PnRoaXMuX2VzY2FwZUNlbGwoRCx7Zm9yY2U6ITAsc2FuaXRpemVWYWx1ZTpsLnNhbml0aXplVmFsdWVzfSkpLHYmJihNKz1sLmNvbHVtbkRlbGltaXRlciksTSs9ZC5qb2luKGwuY29sdW1uRGVsaW1pdGVyKSxNKz1sLnJvd0RlbGltaXRl'@;
put 'ciksWW4oYSwoRCxaKT0+e1o+MCYmKE0rPWwucm93RGVsaW1pdGVyKSx2JiYoTSs9dGhpcy5fZXNjYXBlQ2VsbChmW1pdLHtzYW5pdGl6ZVZhbHVlOmwuc2FuaXRpemVWYWx1ZXN9KSxNKz1sLmNvbHVtbkRlbGltaXRlcik7Y29uc3QgbmU9RC5tYXAoY2U9PnRoaXMuX2VzY2FwZUNlbGwoY2Us'@;
put 'e3Nhbml0aXplVmFsdWU6bC5zYW5pdGl6ZVZhbHVlc30pKS5qb2luKGwuY29sdW1uRGVsaW1pdGVyKTtNKz1uZX0pLE19X2VzY2FwZUNlbGwobCl7bGV0e2ZvcmNlOmE9ITEsc2FuaXRpemVWYWx1ZTpkPSExfT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1'@;
put 'bWVudHNbMV06e30saD1sYyhsKTtyZXR1cm4iIj09PWh8fChkJiYoYT0hMCksZCBpbnN0YW5jZW9mIFJlZ0V4cD9oPUhnZShxSix0aGlzLFcwdCkuY2FsbCh0aGlzLGgsZCk6ImZ1bmN0aW9uIj09dHlwZW9mIGQ/aD1kKGgpOmQmJihoPUhnZShxSix0aGlzLFowdCkuY2FsbCh0aGlzLGgpKSwo'@;
put 'YXx8aC5pbmRleE9mKCJcciIpPj0wfHxoLmluZGV4T2YoJyInKT49MHx8aC5pbmRleE9mKCJcbiIpPj0wfHxoLmluZGV4T2YodGhpcy5vcHRpb25zLmNvbHVtbkRlbGltaXRlcik+PTApJiYoaD1oLnJlcGxhY2UobmV3IFJlZ0V4cCgnIicsImciKSwnIiInKSxoPWAiJHtofSJgKSksaH19fTtj'@;
put 'bGFzcyBYMHQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iZXhwb3J0RmlsZSJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjQwfWlzRW5hYmxlZCgpe3JldHVybiEwfWV4cG9ydEFzU3RyaW5nKGwpe3JldHVybiB0aGlzLl9jcmVhdGVUeXBl'@;
put 'Rm9ybWF0dGVyKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5leHBvcnQoKX1leHBvcnRBc0Jsb2IobCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUJsb2IodGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5sZW5ndGg+'@;
put 'MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkpfWRvd25sb2FkRmlsZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307Y29uc3R7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmhv'@;
put 'dCxmPXRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhKSx2PXRoaXMuX2NyZWF0ZUJsb2IoZiksTT1oLlVSTHx8aC53ZWJraXRVUkwsRD1kLmNyZWF0ZUVsZW1lbnQoImEiKSxaPWAke2Yub3B0aW9ucy5maWxlbmFtZX0uJHtmLm9wdGlvbnMuZmlsZUV4dGVuc2lvbn1gO2lmKHZvaWQgMCE9'@;
put 'PUQuZG93bmxvYWQpe2NvbnN0IG5lPU0uY3JlYXRlT2JqZWN0VVJMKHYpO0Quc3R5bGUuZGlzcGxheT0ibm9uZSIsRC5zZXRBdHRyaWJ1dGUoImhyZWYiLG5lKSxELnNldEF0dHJpYnV0ZSgiZG93bmxvYWQiLFopLGQuYm9keS5hcHBlbmRDaGlsZChEKSxELmRpc3BhdGNoRXZlbnQobmV3IE1v'@;
put 'dXNlRXZlbnQoImNsaWNrIikpLGQuYm9keS5yZW1vdmVDaGlsZChEKSxzZXRUaW1lb3V0KCgpPT57TS5yZXZva2VPYmplY3RVUkwobmUpfSwxMDApfWVsc2UgbmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2ImJm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKHYsWil9X2NyZWF0ZVR5cGVGb3Jt'@;
put 'YXR0ZXIobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFYSltsXSl0aHJvdyBuZXcgRXJyb3IoYEV4cG9ydCBmb3JtYXQgdHlwZSAiJHtsfSIgaXMgbm90IHN1cHBvcnRlZC5gKTtyZXR1cm4gZnVuY3Rpb24gJDB0'@;
put 'KGMsbCxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgWEpbY10/bmV3IFhKW2NdKGwsYSk6bnVsbH0obCxuZXcgRDB0KHRoaXMuaG90KSxhKX1fY3JlYXRlQmxvYihsKXtsZXQgYT1udWxsO3JldHVybiB0eXBlb2YgQmxvYjwidSImJihhPW5ldyBCbG9iKFtsLmV4cG9ydCgpXSx7dHlwZTpg'@;
put 'JHtsLm9wdGlvbnMubWltZVR5cGV9O2NoYXJzZXQ9JHtsLm9wdGlvbnMuZW5jb2Rpbmd9YH0pKSxhfX1mdW5jdGlvbiBudyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSjB0KGMpe3ZhciBsPWZ1bmN0aW9uIFEwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFy'@;
put 'IGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUu'@;
put 'Iil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRh'@;
put 'YmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgRlR7Y29uc3RydWN0b3IobCxhKXtsZXR7aWQ6ZCxzdGF0ZWxlc3M6aD0hMH09YTtudyh0aGlzLCJob3QiLHZvaWQgMCksbncodGhpcywiaWQiLHZvaWQgMCksbncodGhpcywiZWxlbWVudHMiLFtdKSxudyh0aGlzLCJoaWRkZW4iLCExKSxudyh0aGlz'@;
put 'LCJzdGF0ZUlkIiwiIiksbncodGhpcywic3RhdGUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLmlkPWQsdGhpcy5zdGF0ZUlkPWBGaWx0ZXJzLmNvbXBvbmVudC4ke3RoaXMuaWR9YCx0aGlzLnN0YXRlPWg/bnVsbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlz'@;
put 'LnN0YXRlSWQsbmV3IGZQKX1nZXRFbGVtZW50cygpe3JldHVybiB0aGlzLmVsZW1lbnRzfXJlc2V0KCl7WW4odGhpcy5lbGVtZW50cyxsPT5sLnJlc2V0KCkpfWhpZGUoKXt0aGlzLmhpZGRlbj0hMH1zaG93KCl7dGhpcy5oaWRkZW49ITF9aXNIaWRkZW4oKXtyZXR1cm4gbnVsbD09PXRoaXMu'@;
put 'aG90fHx0aGlzLmhpZGRlbn1yZXN0b3JlU3RhdGUobCl7dGhpcy5zdGF0ZSYmdGhpcy5zZXRTdGF0ZSh0aGlzLnN0YXRlLmdldFZhbHVlQXRJbmRleChsKSl9c2V0U3RhdGUoKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBzdGF0ZSBzZXR0aW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXNh'@;
put 'dmVTdGF0ZShsKXt0aGlzLnN0YXRlJiZ0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChsLHRoaXMuZ2V0U3RhdGUoKSl9Z2V0U3RhdGUoKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBzdGF0ZSBnYXRoZXJpbmcgbG9naWMgaXMgbm90IGltcGxlbWVudGVkIil9ZGVzdHJveSgpe3RoaXMuaG90LmNv'@;
put 'bHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5zdGF0ZUlkKSx0aGlzLmNsZWFyTG9jYWxIb29rcygpLFluKHRoaXMuZWxlbWVudHMsbD0+bC5kZXN0cm95KCkpLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmVsZW1lbnRzPW51bGwsdGhpcy5ob3Q9bnVsbH19VGwoRlQseTEpO2NvbnN0'@;
put 'IEhUPXt9O2Z1bmN0aW9uIG42KGMsbCl7aWYoIUhUW2NdKXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdHtjb25kaXRpb246YSxkZXNjcmlwdG9yOmR9PUhUW2NdO2xldCBoPWw7cmV0dXJuIGQuaW5wdXRWYWx1ZXNEZWNvcmF0b3Im'@;
put 'JihoPWQuaW5wdXRWYWx1ZXNEZWNvcmF0b3IoaCkpLGZ1bmN0aW9uKGYpe3JldHVybiBhLmFwcGx5KGYubWV0YS5pbnN0YW5jZSxbXS5jb25jYXQoW2ZdLFtoXSkpfX1mdW5jdGlvbiB5OShjKXtpZighSFRbY10pdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gIiR7Y30iIGRvZXMgbm90'@;
put 'IGV4aXN0LmApO3JldHVybiBIVFtjXS5kZXNjcmlwdG9yfWZ1bmN0aW9uIEF1KGMsbCxhKXthLmtleT1jLEhUW2NdPXtjb25kaXRpb246bCxkZXNjcmlwdG9yOmF9fWNvbnN0IEUwPSJub25lIjtBdShFMCxmdW5jdGlvbiBlMXQoKXtyZXR1cm4hMH0se25hbWU6X1AsaW5wdXRzQ291bnQ6MCxz'@;
put 'aG93T3BlcmF0b3JzOiExfSk7Y29uc3QgTlQ9ImVtcHR5IjtBdShOVCxmdW5jdGlvbiB0MXQoYyl7cmV0dXJuIHpjKGMudmFsdWUpfSx7bmFtZTpScSxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBORj0ibm90X2VtcHR5IjtBdShORixmdW5jdGlvbiBuMXQoYyxsKXty'@;
put 'ZXR1cm4hbjYoTlQsbCkoYyl9LHtuYW1lOkxxLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFZUPSJlcSI7QXUoVlQsZnVuY3Rpb24gcjF0KGMsbCl7bGV0W2FdPWw7cmV0dXJuIGxjKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpPT09bGMo'@;
put 'YSl9LHtuYW1lOk9xLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFZGPSJuZXEiO0F1KFZGLGZ1bmN0aW9uIGkxdChjLGwpe3JldHVybiFuNihWVCxsKShjKX0se25hbWU6UHEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksQXUoImd0IixmdW5jdGlvbiBv'@;
put 'MXQoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU+ZH0se25hbWU6QnEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksQXUoImd0ZSIsZnVuY3Rpb24gYTF0KGMsbCl7bGV0W2FdPWwsZD1h'@;
put 'O3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPj1kfSx7bmFtZTpqcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxBdSgibHQiLGZ1bmN0aW9uIHMxdChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1j'@;
put 'Lm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZTxkfSx7bmFtZTp6cSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxBdSgibHRlIixmdW5jdGlvbiBsMXQoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNl'@;
put 'RmxvYXQoZCwxMCkpLGMudmFsdWU8PWR9LHtuYW1lOlVxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IEpKPSJkYXRlX2FmdGVyIjtBdShKSixmdW5jdGlvbiBjMXQoYyxsKXtsZXRbYV09bDtjb25zdCBkPU9hKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9T2Eo'@;
put 'YSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFsaWQoKSkmJmQuZGlmZihoKT49MH0se25hbWU6WXEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgUUo9ImRhdGVfYmVmb3JlIjtBdShRSixmdW5jdGlvbiB1MXQoYyxsKXtsZXRb'@;
put 'YV09bDtjb25zdCBkPU9hKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpLGg9T2EoYSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISghZC5pc1ZhbGlkKCl8fCFoLmlzVmFsaWQoKSkmJmQuZGlmZihoKTw9MH0se25hbWU6R3EsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29u'@;
put 'c3QgQkY9ImJldHdlZW4iO0F1KEJGLGZ1bmN0aW9uIGQxdChjLGwpe2xldFthLGRdPWwsaD1hLGY9ZDtpZigibnVtZXJpYyI9PT1jLm1ldGEudHlwZSl7Y29uc3Qgdj1wYXJzZUZsb2F0KGgsMTApLE09cGFyc2VGbG9hdChmLDEwKTtoPU1hdGgubWluKHYsTSksZj1NYXRoLm1heCh2LE0pfWVs'@;
put 'c2UgaWYoImRhdGUiPT09Yy5tZXRhLnR5cGUpe2NvbnN0IHY9bjYoUUosW2ZdKSxNPW42KEpKLFtoXSk7cmV0dXJuIHYoYykmJk0oYyl9cmV0dXJuIGMudmFsdWU+PWgmJmMudmFsdWU8PWZ9LHtuYW1lOlpxLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFVnZT0ibm90'@;
put 'X2JldHdlZW4iO0F1KFVnZSxmdW5jdGlvbiBoMXQoYyxsKXtyZXR1cm4hbjYoQkYsbCkoYyl9LHtuYW1lOldxLGlucHV0c0NvdW50OjIsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFpnZT0iYmVnaW5zX3dpdGgiO0F1KFpnZSxmdW5jdGlvbiBmMXQoYyxsKXtsZXRbYV09bDtyZXR1cm4gbGMo'@;
put 'Yy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuc3RhcnRzV2l0aChsYyhhKSl9LHtuYW1lOkZxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLEF1KCJlbmRzX3dpdGgiLGZ1bmN0aW9uIHAxdChjLGwpe2xldFthXT1sO3JldHVybiBsYyhjLnZhbHVlKS50'@;
put 'b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5lbmRzV2l0aChsYyhhKSl9LHtuYW1lOkhxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IGVRPSJjb250YWlucyI7QXUoZVEsZnVuY3Rpb24gZzF0KGMsbCl7bGV0W2FdPWw7cmV0dXJuIGxjKGMudmFsdWUpLnRv'@;
put 'TG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLmluZGV4T2YobGMoYSkpPj0wfSx7bmFtZTpOcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBZZ2U9Im5vdF9jb250YWlucyI7QXUoWWdlLGZ1bmN0aW9uIG0xdChjLGwpe3JldHVybiFuNihlUSxsKShjKX0se25h'@;
put 'bWU6VnEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgR2dlPSJkYXRlX3RvbW9ycm93IjtBdShHZ2UsZnVuY3Rpb24gdjF0KGMpe2NvbnN0IGw9T2EoYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoT2EoKS5zdWJ0'@;
put 'cmFjdCgtMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOktxLGlucHV0c0NvdW50OjB9KTtjb25zdCAkZ2U9ImRhdGVfdG9kYXkiO0F1KCRnZSxmdW5jdGlvbiBiMXQoYyl7Y29uc3QgbD1PYShjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgp'@;
put 'JiZsLmlzU2FtZShPYSgpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOiRxLGlucHV0c0NvdW50OjB9KTtjb25zdCBLZ2U9ImRhdGVfeWVzdGVyZGF5IjtBdShLZ2UsZnVuY3Rpb24geTF0KGMpe2NvbnN0IGw9T2EoYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFs'@;
put 'aWQoKSYmbC5pc1NhbWUoT2EoKS5zdWJ0cmFjdCgxLCJkYXlzIikuc3RhcnRPZigiZGF5IiksImQiKX0se25hbWU6cXEsaW5wdXRzQ291bnQ6MH0pO2NvbnN0IFhnZT17bnVtZXJpYzpbRTAsb3MsTlQsTkYsb3MsVlQsVkYsb3MsImd0IiwiZ3RlIiwibHQiLCJsdGUiLEJGLFVnZV0sdGV4dDpb'@;
put 'RTAsb3MsTlQsTkYsb3MsVlQsVkYsb3MsWmdlLCJlbmRzX3dpdGgiLG9zLGVRLFlnZV0sZGF0ZTpbRTAsb3MsTlQsTkYsb3MsVlQsVkYsb3MsUUosSkosQkYsb3MsR2dlLCRnZSxLZ2VdfTtmdW5jdGlvbiBCVChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUzF0KGMpe3ZhciBsPWZ1bmN0aW9u'@;
put 'IE0xdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgdFE9ImJ1aWx0IixuUT0iYnVpbGRpbmciLEpnZT1bImNsaWNrIiwiaW5wdXQiLCJrZXlkb3duIiwia2V5cHJlc3MiLCJrZXl1cCIsImZvY3VzIiwiYmx1ciIsImNo'@;
put 'YW5nZSJdO2NsYXNzIEhoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gbjMoe2NsYXNzTmFtZToiIix2YWx1ZToiIix0YWdOYW1lOiJkaXYiLGNoaWxkcmVuOltdLHdyYXBJdDohMH0pfWNvbnN0cnVjdG9yKGwsYSl7QlQodGhpcywiaG90Iix2b2lkIDApLEJUKHRoaXMsImV2ZW50TWFu'@;
put 'YWdlciIsbmV3IE4yKHRoaXMpKSxCVCh0aGlzLCJvcHRpb25zIix2b2lkIDApLEJUKHRoaXMsIl9lbGVtZW50Iix2b2lkIDApLEJUKHRoaXMsImJ1aWxkU3RhdGUiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm9wdGlvbnM9eHUoSGguREVGQVVMVFMsYSksdGhpcy5fZWxlbWVudD10aGlzLmhv'@;
put 'dC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMud3JhcEl0PyJkaXYiOnRoaXMub3B0aW9ucy50YWdOYW1lKX1zZXRWYWx1ZShsKXt0aGlzLm9wdGlvbnMudmFsdWU9bCx0aGlzLnVwZGF0ZSgpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZX1nZXQg'@;
put 'ZWxlbWVudCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1uUT90aGlzLl9lbGVtZW50OnRoaXMuYnVpbGRTdGF0ZT09PXRRPyh0aGlzLnVwZGF0ZSgpLHRoaXMuX2VsZW1lbnQpOih0aGlzLmJ1aWxkU3RhdGU9blEsdGhpcy5idWlsZCgpLHRoaXMuYnVpbGRTdGF0ZT10USx0aGlzLl9lbGVt'@;
put 'ZW50KX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuYnVpbGRTdGF0ZT09PXRRfXRyYW5zbGF0ZUlmUG9zc2libGUobCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsJiZsLnN0YXJ0c1dpdGgoWDEpP3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UobCk6bH1idWlsZCgpe2NvbnN0IGw9KGEsZCk9'@;
put 'Pnt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsZCxoPT50aGlzLnJ1bkxvY2FsSG9va3MoZCxoLHRoaXMpKX07aWYodGhpcy5idWlsZFN0YXRlfHwodGhpcy5idWlsZFN0YXRlPW5RKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCEwKSx2'@;
put 'b2lkIDAhPT10aGlzLm9wdGlvbnMudGFiSW5kZXgmJnRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsdGhpcy5vcHRpb25zLnRhYkluZGV4KSx2b2lkIDAhPT10aGlzLm9wdGlvbnMucm9sZSYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoInJvbGUiLHRoaXMub3B0aW9u'@;
put 'cy5yb2xlKSx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lJiZUaSh0aGlzLl9lbGVtZW50LHRoaXMub3B0aW9ucy5jbGFzc05hbWUpLHRoaXMub3B0aW9ucy5jaGlsZHJlbi5sZW5ndGgpWW4odGhpcy5vcHRpb25zLmNoaWxkcmVuLGE9PnRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYS5lbGVtZW50'@;
put 'KSk7ZWxzZSBpZih0aGlzLm9wdGlvbnMud3JhcEl0KXtjb25zdCBhPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy50YWdOYW1lKTthLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCEwKSxYYSh0aGlzLm9wdGlvbnMsKGQsaCk9Pnt2b2lkIDAh'@;
put 'PT1hW2hdJiYiY2xhc3NOYW1lIiE9PWgmJiJ0YWdOYW1lIiE9PWgmJiJjaGlsZHJlbiIhPT1oJiYoYVtoXT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUoZCkpfSksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChhKSxZbihKZ2UsZD0+bChhLGQpKX1lbHNlIFluKEpnZSxhPT5sKHRoaXMuX2Vs'@;
put 'ZW1lbnQsYSkpfXVwZGF0ZSgpe31yZXNldCgpe3RoaXMub3B0aW9ucy52YWx1ZT0iIix0aGlzLnVwZGF0ZSgpfXNob3coKXt0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheT0iIn1oaWRlKCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUifWZvY3VzKCl7fWRlc3Ryb3koKXt0aGlz'@;
put 'LmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXI9bnVsbCx0aGlzLmhvdD1udWxsLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSYmdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbH19ZnVuY3Rp'@;
put 'b24gUWdlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBqRihjLGwpe3JldHVybiBjLmdldChyUShjLGwpKX1mdW5jdGlvbiByUShjLGws'@;
put 'YSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9VGwoSGgseTEpO3ZhciBydz1uZXcgV2Vh'@;
put 'a01hcCxlNWU9bmV3IFdlYWtTZXQ7Y2xhc3MgcjYgZXh0ZW5kcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtwbGFjZWhvbGRlcjoiIix0eXBlOiJ0ZXh0Iix0YWdOYW1lOiJpbnB1dCIsdGFiSW5kZXg6LTF9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwseHUocjYuREVG'@;
put 'QVVMVFMsYSkpLGZ1bmN0aW9uIHgxdChjLGwpe1FnZShjLGwpLGwuYWRkKGMpfSh0aGlzLGU1ZSksZnVuY3Rpb24gRTF0KGMsbCxhKXtRZ2UoYyxsKSxsLnNldChjLGEpfSh0aGlzLHJ3LHZvaWQgMCksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxI'@;
put 'b29rKCJrZXl1cCIsbD0+clEoZTVlLHRoaXMsQTF0KS5jYWxsKHRoaXMsbCkpfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKTtjb25zdCBsPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsoZnVuY3Rpb24gVDF0KGMsbCxhKXtjLnNldChyUShjLGwpLGEpfSkocncsdGhp'@;
put 'cyx0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpLFRpKHRoaXMuX2VsZW1lbnQsImh0VUlJbnB1dCIpLFRpKGwsImh0VUlJbnB1dEljb24iKSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGwpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihqRihydyx0aGlzKS50eXBl'@;
put 'PXRoaXMub3B0aW9ucy50eXBlLGpGKHJ3LHRoaXMpLnBsYWNlaG9sZGVyPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIpLGpGKHJ3LHRoaXMpLnZhbHVlPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudmFsdWUpKX1mb2N1cygp'@;
put 'e3RoaXMuaXNCdWlsdCgpJiZqRihydyx0aGlzKS5mb2N1cygpfX1mdW5jdGlvbiBBMXQoYyl7dGhpcy5vcHRpb25zLnZhbHVlPWMudGFyZ2V0LnZhbHVlfWZ1bmN0aW9uIGpUKGMsbCxhKXt0NWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHQ1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gaXcoYyxsLGEpe3JldHVybiBjLnNldCh6VChjLGwpLGEpLGF9ZnVuY3Rpb24gR2MoYyxsKXtyZXR1cm4gYy5nZXQoelQoYyxsKSl9ZnVu'@;
put 'Y3Rpb24gelQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBwMD1uZXcg'@;
put 'V2Vha01hcCx6Rj1uZXcgV2Vha01hcCxVRj1uZXcgV2Vha01hcCxpUT1uZXcgV2Vha01hcCxaRj1uZXcgV2Vha01hcCxXRj1uZXcgV2Vha1NldDtjbGFzcyBVVCBleHRlbmRzIEhoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gbjMoe2NsYXNzTmFtZToiaHRVSVNlbGVjdCIsd3JhcEl0'@;
put 'OiExLHRhYkluZGV4Oi0xfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHh1KFVULkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBrMXQoYyxsKXt0NWUoYyxsKSxsLmFkZChjKX0odGhpcyxXRiksalQodGhpcyxwMCxudWxsKSxqVCh0aGlzLHpGLFtdKSxqVCh0aGlzLFVGLHZvaWQgMCksalQodGhp'@;
put 'cyxpUSx2b2lkIDApLGpUKHRoaXMsWkYsdm9pZCAwKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1nZXRNZW51KCl7cmV0dXJuIEdjKHAwLHRoaXMpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygiY2xpY2siLCgpPT56VChXRix0aGlzLFIxdCkuY2FsbCh0aGlzKSl9c2V0SXRlbXMo'@;
put 'bCl7aXcoekYsdGhpcyx0aGlzLnRyYW5zbGF0ZU5hbWVzKGwpKSxHYyhwMCx0aGlzKSYmR2MocDAsdGhpcykuc2V0TWVudUl0ZW1zKEdjKHpGLHRoaXMpKX10cmFuc2xhdGVOYW1lcyhsKXtyZXR1cm4gWW4obCxhPT57YS5uYW1lPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZShhLm5hbWUpfSks'@;
put 'bH1idWlsZCgpe3N1cGVyLmJ1aWxkKCksaXcocDAsdGhpcyxuZXcgcV8odGhpcy5ob3Qse2NsYXNzTmFtZToiaHRTZWxlY3RVSSBodEZpbHRlcnNDb25kaXRpb25zTWVudSIsa2VlcEluVmlld3BvcnQ6ITEsc3RhbmRhbG9uZTohMCxjb250YWluZXI6dGhpcy5vcHRpb25zLm1lbnVDb250YWlu'@;
put 'ZXJ9KSksR2MocDAsdGhpcykuc2V0TWVudUl0ZW1zKEdjKHpGLHRoaXMpKTtjb25zdCBsPW5ldyBIaCh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Q2FwdGlvbiJ9KSxhPW5ldyBIaCh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFVJU2VsZWN0RHJvcGRvd24ifSk7aXcoVUYsdGhpcyxs'@;
put 'KSxpdyhpUSx0aGlzLGwuZWxlbWVudCksaXcoWkYsdGhpcyxhKSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiYodmEoYS5lbGVtZW50LFtINygpXSksdmEodGhpcy5fZWxlbWVudCxbWyJyb2xlIiwibGlzdGJveCJdXSkpLFluKFtsLGFdLGQ9PnRoaXMuX2VsZW1lbnQuYXBwZW5k'@;
put 'Q2hpbGQoZC5lbGVtZW50KSksR2MocDAsdGhpcykuYWRkTG9jYWxIb29rKCJzZWxlY3QiLGQ9PnpUKFdGLHRoaXMsRDF0KS5jYWxsKHRoaXMsZCkpLEdjKHAwLHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnpUKFdGLHRoaXMsSTF0KS5jYWxsKHRoaXMpKSx0aGlzLnVwZGF0'@;
put 'ZSgpfXVwZGF0ZSgpe2lmKCF0aGlzLmlzQnVpbHQoKSlyZXR1cm47bGV0IGw7bD10aGlzLm9wdGlvbnMudmFsdWU/dGhpcy5vcHRpb25zLnZhbHVlLm5hbWU6R2MocDAsdGhpcykuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoX1ApLEdjKGlRLHRoaXMpLnRleHRDb250ZW50PWwsc3VwZXIudXBk'@;
put 'YXRlKCl9b3Blbk9wdGlvbnMoKXtjb25zdCBsPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtHYyhwMCx0aGlzKSYmKEdjKHAwLHRoaXMpLm9wZW4oKSxHYyhwMCx0aGlzKS5zZXRQb3NpdGlvbih7bGVmdDp0aGlzLmhvdC5pc0x0cigpP2wubGVmdC01OmwubGVmdC0zMSx0'@;
put 'b3A6bC50b3AtMSx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodH0pLEdjKHAwLHRoaXMpLmdldE5hdmlnYXRvcigpLnRvRmlyc3RJdGVtKCksR2MocDAsdGhpcykuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXSxbIlNoaWZ0'@;
put 'IiwiVGFiIl1dLGNhbGxiYWNrOmE9Pnt0aGlzLmNsb3NlT3B0aW9ucygpLHRoaXMucnVuTG9jYWxIb29rcygidGFiS2V5ZG93biIsYSl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBIl1dLGNhbGxiYWNrOigpPT4hMX1dKSl9Y2xvc2VPcHRpb25zKCl7R2MocDAsdGhpcykmJkdjKHAwLHRo'@;
put 'aXMpLmNsb3NlKCl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmdGhpcy5lbGVtZW50LmZvY3VzKCl9ZGVzdHJveSgpe0djKHAwLHRoaXMpJiYoR2MocDAsdGhpcykuZGVzdHJveSgpLGl3KHAwLHRoaXMsbnVsbCkpLEdjKFVGLHRoaXMpJiZHYyhVRix0aGlzKS5kZXN0cm95KCksR2MoWkYsdGhp'@;
put 'cykmJkdjKFpGLHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEQxdChjKXtjLm5hbWUhPT1vcyYmKHRoaXMub3B0aW9ucy52YWx1ZT1jLHRoaXMudXBkYXRlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJzZWxlY3QiLHRoaXMub3B0aW9ucy52YWx1ZSkpfWZ1bmN0aW9u'@;
put 'IEkxdCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpfWZ1bmN0aW9uIFIxdCgpe3RoaXMub3Blbk9wdGlvbnMoKX1mdW5jdGlvbiBuNWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFAxdChjKXt2YXIgbD1mdW5jdGlvbiBGMXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8'@;
put 'fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg'@;
put 'cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp'@;
put 'Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHI1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5v'@;
put 'dCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIG9RPW5ldyBXZWFrU2V0O2NsYXNzIGFRIGV4dGVuZHMgRlR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLGZ1bmN0aW9uIEwxdChjLGwpeyhmdW5jdGlvbiBPMXQoYyxsKXtpZihsLmhhcyhjKSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxvUSksbjVlKHRoaXMsIm5hbWUiLCIiKSxuNWUodGhpcywiYWRkU2VwYXJhdG9yIiwhMSksdGhpcy5u'@;
put 'YW1lPWEubmFtZSx0aGlzLmFkZFNlcGFyYXRvcj1hLmFkZFNlcGFyYXRvcix0aGlzLmVsZW1lbnRzLnB1c2gobmV3IFVUKHRoaXMuaG90LHttZW51Q29udGFpbmVyOmEubWVudUNvbnRhaW5lcn0pKSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IHI2KHRoaXMuaG90LHtwbGFjZWhvbGRlcjpvWH0p'@;
put 'KSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IHI2KHRoaXMuaG90LHtwbGFjZWhvbGRlcjphWH0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJzZWxlY3QiLGw9PnI1ZShvUSx0aGlzLEgxdCkuY2FsbCh0'@;
put 'aGlzLGwpKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKSkuYWRkTG9jYWxIb29rKCJ0YWJLZXlkb3duIixsPT50aGlzLnJ1bkxvY2FsSG9va3MoInNlbGVjdFRhYktleWRvd24iLGwpKSxZbih0aGlzLmdldElucHV0RWxlbWVu'@;
put 'dHMoKSxsPT57bC5hZGRMb2NhbEhvb2soImtleWRvd24iLGE9PnI1ZShvUSx0aGlzLE4xdCkuY2FsbCh0aGlzLGEpKX0pfXNldFN0YXRlKGwpe2lmKHRoaXMucmVzZXQoKSwhbClyZXR1cm47Y29uc3QgYT1uMyhsLmNvbW1hbmQpO2EubmFtZS5zdGFydHNXaXRoKFpjKSYmKGEubmFtZT10aGlz'@;
put 'LmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGEubmFtZSkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGEpLFluKGwuYXJncywoZCxoKT0+e2lmKGg+YS5pbnB1dHNDb3VudC0xKXJldHVybiExO2NvbnN0IGY9dGhpcy5nZXRJbnB1dEVsZW1lbnQoaCk7Zi5zZXRWYWx1ZShkKSxm'@;
put 'W2EuaW5wdXRzQ291bnQ+aD8ic2hvdyI6ImhpZGUiXSgpLGh8fHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PmYuZm9jdXMoKSwxMCl9KX1nZXRTdGF0ZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuZ2V0VmFsdWUoKXx8eTkoRTApLGE9W107cmV0dXJuIFluKHRoaXMu'@;
put 'Z2V0SW5wdXRFbGVtZW50cygpLChkLGgpPT57bC5pbnB1dHNDb3VudD5oJiZhLnB1c2goZC5nZXRWYWx1ZSgpKX0pLHtjb21tYW5kOmwsYXJnczphfX11cGRhdGVTdGF0ZShsLGEpe2NvbnN0IGQ9eTkobD9sLm5hbWU6RTApO3RoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGEse2NvbW1hbmQ6'@;
put 'ZCxhcmdzOmw/bC5hcmdzOltdfSksbHx8WW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksaD0+aC5zZXRWYWx1ZShudWxsKSl9Z2V0U2VsZWN0RWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgVVQpWzBdfWdldElucHV0RWxlbWVudCgpe2xldCBs'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO3JldHVybiB0aGlzLmdldElucHV0RWxlbWVudHMoKVtsXX1nZXRJbnB1dEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2VvZiByNil9Z2V0TWVu'@;
put 'dUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEsZCxoLGYsdik9PntUaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01l'@;
put 'bnVDb25kaXRpb24iKSx0aGlzLmFkZFNlcGFyYXRvciYmVGkoYS5wYXJlbnROb2RlLCJib3JkZXIiKTtjb25zdCBNPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gVGkoTSwiaHRGaWx0ZXJzTWVudUxhYmVsIiksTS50ZXh0Q29udGVudD12LGEuYXBw'@;
put 'ZW5kQ2hpbGQoTSksYS5wYXJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8WW4odGhpcy5lbGVtZW50cyxEPT5hLmFwcGVuZENoaWxkKEQuZWxlbWVudCkpLGF9fX1yZXNldCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRD'@;
put 'b2x1bW4oKTtsZXQgYT1beTkoRTApXTtpZihudWxsIT09bCl7Y29uc3R7dmlzdWFsSW5kZXg6ZH09bDthPWZ1bmN0aW9uIEMxdChjKXtjb25zdCBsPVtdO2xldCBhPWM7cmV0dXJuIFhnZVthXXx8KGE9InRleHQiKSxZbihYZ2VbYV0sZD0+e2xldCBoO2g9ZD09PW9zP3tuYW1lOm9zfTpuMyh5'@;
put 'OShkKSksbC5wdXNoKGgpfSksbH0odGhpcy5ob3QuZ2V0RGF0YVR5cGUoMCxkLHRoaXMuaG90LmNvdW50Um93cygpLGQpKX1Zbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxkPT5kLmhpZGUoKSksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0SXRlbXMoYSksc3VwZXIucmVzZXQoKSx0aGlz'@;
put 'LmdldFNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShhWzBdKX19ZnVuY3Rpb24gSDF0KGMpe1luKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLChsLGEpPT57bFtjLmlucHV0c0NvdW50PmE/InNob3ciOiJoaWRlIl0oKSwwPT09YSYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+bC5mb2N1'@;
put 'cygpLDEwKX0pLHRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixjKX1mdW5jdGlvbiBOMXQoYyl7dV8oYy5rZXlDb2RlLCJFU0NBUEUiKSYmKHRoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIiksSDIoYykpfWNvbnN0IFpUPXt9O2Z1bmN0aW9uIEIxdChjKXtyZXR1cm4gWlRbY10ubmFtZX1m'@;
put 'dW5jdGlvbiBzUShjLGwsYSl7WlRbY109e25hbWU6bCxmdW5jOmF9fWNvbnN0IGk2PSJjb25qdW5jdGlvbiI7c1EoaTYsUXEsZnVuY3Rpb24gejF0KGMsbCl7cmV0dXJuIGMuZXZlcnkoYT0+YS5mdW5jKGwpKX0pO2NvbnN0IFlGPSJkaXNqdW5jdGlvbiI7c1EoWUYsd1AsZnVuY3Rpb24gWjF0'@;
put 'KGMsbCl7cmV0dXJuIGMuc29tZShhPT5hLmZ1bmMobCkpfSk7Y29uc3QgbFE9ImRpc2p1bmN0aW9uV2l0aEV4dHJhQ29uZGl0aW9uIjtmdW5jdGlvbiBpNWUoYyxsLGEpeyhmdW5jdGlvbiBHMXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6'@;
put 'ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFdUKGMsbCl7cmV0dXJuIGMuZ2V0KGE1ZShjLGwpKX1mdW5jdGlvbiBvNWUoYyxsLGEpe3JldHVybiBjLnNldChhNWUoYyxsKSxhKSxhfWZ1bmN0aW9uIGE1'@;
put 'ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9c1EobFEsd1AsZnVuY3Rpb24g'@;
put 'WTF0KGMsbCl7aWYoYy5sZW5ndGg8Myl0aHJvdyBFcnJvcigiT3BlcmF0aW9uIGRvZXNuJ3Qgd29yayBvbiBsZXNzIHRoZW4gdGhyZWUgY29uZGl0aW9ucy4iKTtyZXR1cm4gYy5zbGljZSgwLGMubGVuZ3RoLTEpLnNvbWUoYT0+YS5mdW5jKGwpKSYmY1tjLmxlbmd0aC0xXS5mdW5jKGwpfSk7'@;
put 'dmFyIG93PW5ldyBXZWFrTWFwLGNRPW5ldyBXZWFrTWFwO2NsYXNzIEdGIGV4dGVuZHMgSGh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBuMyh7dHlwZToicmFkaW8iLHRhZ05hbWU6ImlucHV0IixjbGFzc05hbWU6Imh0VUlSYWRpbyIsbGFiZWw6e319KX1jb25zdHJ1Y3RvcihsLGEp'@;
put 'e3N1cGVyKGwseHUoR0YuREVGQVVMVFMsYSkpLGk1ZSh0aGlzLG93LHZvaWQgMCksaTVlKHRoaXMsY1Esdm9pZCAwKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwiKTtsLnRleHRDb250ZW50PXRoaXMudHJh'@;
put 'bnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwudGV4dENvbnRlbnQpLGwuaHRtbEZvcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLmh0bWxGb3IpLG81ZShjUSx0aGlzLGwpLG81ZShvdyx0aGlzLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCks'@;
put 'V1Qob3csdGhpcykuY2hlY2tlZD10aGlzLm9wdGlvbnMuY2hlY2tlZCx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGwpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkmJihXVChjUSx0aGlzKS50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5v'@;
put 'cHRpb25zLmxhYmVsLnRleHRDb250ZW50KSl9aXNDaGVja2VkKCl7cmV0dXJuISF0aGlzLmlzQnVpbHQoKSYmV1Qob3csdGhpcykuY2hlY2tlZH1zZXRDaGVja2VkKCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTt0aGlz'@;
put 'LmlzQnVpbHQoKSYmKFdUKG93LHRoaXMpLmNoZWNrZWQ9bCl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmV1Qob3csdGhpcykuZm9jdXMoKX19dmFyIGw1ZT1uZXcgV2Vha1NldDtjbGFzcyBlZHQgZXh0ZW5kcyBGVHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNz'@;
put 'OiExfSksZnVuY3Rpb24gJDF0KGMsbCl7KGZ1bmN0aW9uIEsxdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGw1'@;
put 'ZSksZnVuY3Rpb24gcTF0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBYMXQoYyl7dmFyIGw9ZnVuY3Rpb24gSjF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMs'@;
put 'bHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTty'@;
put 'ZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywibmFtZSIsIiIpLHRoaXMubmFtZT1hLm5hbWUsdGhp'@;
put 'cy5idWlsZE9wZXJhdG9yc0VsZW1lbnQoKX1nZXRNZW51SXRlbURlc2NyaXB0b3IoKXtyZXR1cm57a2V5OnRoaXMuaWQsbmFtZTp0aGlzLm5hbWUsaXNDb21tYW5kOiExLGRpc2FibGVTZWxlY3Rpb246ITAsaGlkZGVuOigpPT50aGlzLmlzSGlkZGVuKCkscmVuZGVyZXI6KGwsYSk9PihUaShh'@;
put 'LnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVPcGVyYXRvcnMiKSxZbih0aGlzLmVsZW1lbnRzLGQ9PmEuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSksYSl9fWJ1aWxkT3BlcmF0b3JzRWxlbWVudCgpe2NvbnN0IGw9W2k2LFlGXTtZbihsLGE9Pntjb25zdCBkPW5ldyBHRih0aGlzLmhvdCx7bmFt'@;
put 'ZToib3BlcmF0b3IiLGxhYmVsOntodG1sRm9yOmEsdGV4dENvbnRlbnQ6QjF0KGEpfSx2YWx1ZTphLGNoZWNrZWQ6YT09PWxbMF0saWQ6YX0pO2QuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGg9PmZ1bmN0aW9uIFExdChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMo'@;
put 'bCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KGw1ZSx0aGlzLHRkdCkuY2FsbCh0aGlzLGgpKSx0aGlzLmVsZW1lbnRzLnB1c2goZCl9KX1zZXRDaGVja2Vk'@;
put 'KGwpe2lmKHRoaXMuZWxlbWVudHMubGVuZ3RoPGwpdGhyb3cgRXJyb3IoZ2xgUmFkaW8gYnV0dG9uIHdpdGggaW5kZXggJHtsfSBkb2Vzbid0IGV4aXN0LmApO1luKHRoaXMuZWxlbWVudHMsKGEsZCk9PnthLnNldENoZWNrZWQoZD09PWwpfSl9Z2V0QWN0aXZlT3BlcmF0aW9uSWQoKXtjb25z'@;
put 'dCBsPXRoaXMuZWxlbWVudHMuZmluZChhPT5hIGluc3RhbmNlb2YgR0YmJmEuaXNDaGVja2VkKCkpO3JldHVybiBsP2wuZ2V0VmFsdWUoKTppNn1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCl9c2V0U3RhdGUobCl7dGhpcy5yZXNldCgpLGwmJnRoaXMuZ2V0'@;
put 'QWN0aXZlT3BlcmF0aW9uSWQoKSE9PWwmJlluKHRoaXMuZWxlbWVudHMsYT0+e2Euc2V0Q2hlY2tlZChhLmdldFZhbHVlKCk9PT1sKX0pfXVwZGF0ZVN0YXRlKCl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmk2O2Q9PT1sUSYm'@;
put 'KGQ9WUYpLHRoaXMuc3RhdGUuc2V0VmFsdWVBdEluZGV4KGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGQpfXJlc2V0KCl7dGhpcy5zZXRDaGVja2VkKDApfX1mdW5jdGlvbiB0ZHQoYyl7dGhpcy5zZXRTdGF0ZShjLnRhcmdldC52YWx1ZSl9ZnVuY3Rpb24gcmR0KGMs'@;
put 'bCl7bGV0IGE9YztyZXR1cm4iIj09PWEmJihhPWAoJHtsfSlgKSxhfWZ1bmN0aW9uIFlUKGMpe2NvbnN0IGw9bmV3IFNldChjKTtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGwuaGFzKGEpfX1mdW5jdGlvbiB1UShjKXtyZXR1cm4gYz8/IiJ9ZnVuY3Rpb24gZFEoYyl7cmV0dXJuIEFycmF5'@;
put 'LmZyb20obmV3IFNldChjKSkubWFwKGw9PnVRKGwpKS5zb3J0KChsLGEpPT4ibnVtYmVyIj09dHlwZW9mIGwmJiJudW1iZXIiPT10eXBlb2YgYT9sLWE6bD09PWE/MDpsPmE/MTotMSl9ZnVuY3Rpb24gYzVlKGMsbCxhLGQpe2NvbnN0IGg9W10sZj1jPT09bDtsZXQgdjtyZXR1cm4gZnx8KHY9'@;
put 'WVQobCkpLGMuZm9yRWFjaChNPT57bGV0IEQ9ITE7KGZ8fHYoTSkpJiYoRD0hMCk7Y29uc3QgWj17Y2hlY2tlZDpELHZhbHVlOk0sdmlzdWFsVmFsdWU6cmR0KE0sYSl9O2QmJmQoWiksaC5wdXNoKFopfSksaH1mdW5jdGlvbiBoUShjLGwpe3JldHVybiBjLmdldCh1NWUoYyxsKSl9ZnVuY3Rp'@;
put 'b24gdTVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX16MmUoKTt2YXIgR1Q9'@;
put 'bmV3IFdlYWtNYXA7Y2xhc3MgJFQgZXh0ZW5kcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtocmVmOiIjIix0YWdOYW1lOiJhIix0YWJJbmRleDotMSxyb2xlOiJidXR0b24ifSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHh1KCRULkRFRkFVTFRTLGEpKSxmdW5jdGlv'@;
put 'biBpZHQoYyxsLGEpeyhmdW5jdGlvbiBvZHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLEdULHZvaWQgMCl9'@;
put 'YnVpbGQoKXtzdXBlci5idWlsZCgpLGZ1bmN0aW9uIGFkdChjLGwsYSl7Yy5zZXQodTVlKGMsbCksYSl9KEdULHRoaXMsdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKX11cGRhdGUoKXt0aGlzLmlzQnVpbHQoKSYmKGhRKEdULHRoaXMpLnRleHRDb250ZW50PXRoaXMudHJhbnNsYXRlSWZQb3Nz'@;
put 'aWJsZSh0aGlzLm9wdGlvbnMudGV4dENvbnRlbnQpKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZoUShHVCx0aGlzKS5mb2N1cygpfWFjdGl2YXRlKCl7aFEoR1QsdGhpcykuY2xpY2soKX19ZnVuY3Rpb24gYXcoYyxsLGEpe2Q1ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZDVlKGMsbCl7'@;
put 'aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBqYShjLGwpe3JldHVybiBjLmdldChzdyhjLGwpKX1mdW5jdGlvbiBtMyhjLGwsYSl7cmV0dXJuIGMu'@;
put 'c2V0KHN3KGMsbCksYSksYX1mdW5jdGlvbiBzdyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMg'@;
put 'b2JqZWN0Iil9Y29uc3QgaDVlPSJtdWx0aXBsZVNlbGVjdC5pdGVtQm94Ijt2YXIgdjM9bmV3IFdlYWtNYXAsY3U9bmV3IFdlYWtNYXAsZlE9bmV3IFdlYWtNYXAsUGc9bmV3IFdlYWtNYXAsbzY9bmV3IFdlYWtNYXAsYTY9bmV3IFdlYWtNYXAsS1Q9bmV3IFdlYWtTZXQ7Y2xhc3MgcVQgZXh0'@;
put 'ZW5kcyBIaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIG4zKHtjbGFzc05hbWU6Imh0VUlNdWx0aXBsZVNlbGVjdCIsdmFsdWU6W119KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwseHUocVQuREVGQVVMVFMsYSkpLGZ1bmN0aW9uIHNkdChjLGwpe2Q1ZShjLGwpLGwuYWRkKGMpfSh0'@;
put 'aGlzLEtUKSxhdyh0aGlzLHYzLFtdKSxhdyh0aGlzLGN1LHZvaWQgMCksYXcodGhpcyxmUSx2b2lkIDApLGF3KHRoaXMsUGcsdm9pZCAwKSxhdyh0aGlzLG82LHZvaWQgMCksYXcodGhpcyxhNix2b2lkIDApLG0zKFBnLHRoaXMsbmV3IHI2KHRoaXMuaG90LHtwbGFjZWhvbGRlcjppWCxjbGFz'@;
put 'c05hbWU6Imh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaCJ9KSksbTMobzYsdGhpcyxuZXcgJFQodGhpcy5ob3Qse3RleHRDb250ZW50OmVYLGNsYXNzTmFtZToiaHRVSVNlbGVjdEFsbCJ9KSksbTMoYTYsdGhpcyxuZXcgJFQodGhpcy5ob3Qse3RleHRDb250ZW50OnRYLGNsYXNzTmFtZToiaHRV'@;
put 'SUNsZWFyQWxsIn0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1nZXRJdGVtc0JveCgpe3JldHVybiBqYShjdSx0aGlzKX1yZWdpc3Rlckhvb2tzKCl7amEoUGcsdGhpcykuYWRkTG9jYWxIb29rKCJrZXlkb3duIixsPT5zdyhLVCx0aGlzLGNkdCkuY2FsbCh0aGlzLGwpKSxqYShQZyx0aGlzKS5h'@;
put 'ZGRMb2NhbEhvb2soImlucHV0IixsPT5zdyhLVCx0aGlzLGxkdCkuY2FsbCh0aGlzLGwpKSxqYShvNix0aGlzKS5hZGRMb2NhbEhvb2soImNsaWNrIixsPT5zdyhLVCx0aGlzLHVkdCkuY2FsbCh0aGlzLGwpKSxqYShhNix0aGlzKS5hZGRMb2NhbEhvb2soImNsaWNrIixsPT5zdyhLVCx0aGlz'@;
put 'LGRkdCkuY2FsbCh0aGlzLGwpKX1zZXRJdGVtcyhsKXt2YXIgYTttMyh2Myx0aGlzLGwpLG51bGw9PT0oYT1qYShjdSx0aGlzKSl8fHZvaWQgMD09PWF8fGEubG9hZERhdGEoamEodjMsdGhpcykpfXNldExvY2FsZShsKXttMyhmUSx0aGlzLGwpfWdldExvY2FsZSgpe3JldHVybiBqYShmUSx0'@;
put 'aGlzKX1nZXRJdGVtcygpe3JldHVyblsuLi5qYSh2Myx0aGlzKV19Z2V0VmFsdWUoKXtyZXR1cm4gZnVuY3Rpb24gZmR0KGMpe2NvbnN0IGw9W107cmV0dXJuIGMuZm9yRWFjaChhPT57YS5jaGVja2VkJiZsLnB1c2goYS52YWx1ZSl9KSxsfShqYSh2Myx0aGlzKSl9Z2V0U2VhcmNoSW5wdXRF'@;
put 'bGVtZW50KCl7cmV0dXJuIGphKFBnLHRoaXMpfWdldFNlbGVjdEFsbEVsZW1lbnQoKXtyZXR1cm4gamEobzYsdGhpcyl9Z2V0Q2xlYXJBbGxFbGVtZW50KCl7cmV0dXJuIGphKGE2LHRoaXMpfWlzU2VsZWN0ZWRBbGxWYWx1ZXMoKXtyZXR1cm4gamEodjMsdGhpcykubGVuZ3RoPT09dGhpcy5n'@;
put 'ZXRWYWx1ZSgpLmxlbmd0aH1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90LGE9bC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPW5ldyBIaCh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFVJU2VsZWN0aW9uQ29udHJvbHMiLGNoaWxkcmVuOltqYShvNix0'@;
put 'aGlzKSxqYShhNix0aGlzKV19KTt0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGphKFBnLHRoaXMpLmVsZW1lbnQpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoZC5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpO2NvbnN0IGg9Zj0+e3ZhciB2O2lmKCF0aGlzLl9lbGVt'@;
put 'ZW50KXJldHVybjtudWxsPT09KHY9amEoY3UsdGhpcykpfHx2b2lkIDA9PT12fHx2LmRlc3Ryb3koKSxUaShmLCJodFVJTXVsdGlwbGVTZWxlY3RIb3QiKSxtMyhjdSx0aGlzLG5ldyB0aGlzLmhvdC5jb25zdHJ1Y3RvcihmLHtkYXRhOmphKHYzLHRoaXMpLGNvbHVtbnM6W3tkYXRhOiJjaGVj'@;
put 'a2VkIix0eXBlOiJjaGVja2JveCIsbGFiZWw6e3Byb3BlcnR5OiJ2aXN1YWxWYWx1ZSIscG9zaXRpb246ImFmdGVyIn19XSxiZWZvcmVSZW5kZXJlcjooWixuZSxjZSxiZSxFZSxCZSk9PntaLnRpdGxlPUJlLmluc3RhbmNlLmdldERhdGFBdFJvd1Byb3AobmUsQmUubGFiZWwucHJvcGVydHkp'@;
put 'fSxhZnRlckxpc3RlbjooKT0+e3RoaXMucnVuTG9jYWxIb29rcygiZm9jdXMiLHRoaXMpfSxiZWZvcmVPbkNlbGxNb3VzZVVwOigpPT57amEoY3UsdGhpcykubGlzdGVuKCl9LG1vZGlmeUNvbFdpZHRoOlo9Pntjb25zdCBuZT1qYShjdSx0aGlzKS5jb250YWluZXIuc2Nyb2xsV2lkdGgtaDAo'@;
put 'bCk7cmV0dXJuIHZvaWQgMCE9PVomJlo8bmU/bmU6Wn0sbWF4Q29sczoxLGF1dG9XcmFwQ29sOiEwLGhlaWdodDoxMTAsY29weVBhc3RlOiExLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ImFyZWEiLGZpbGxIYW5kbGU6ITEsZnJhZ21lbnRTZWxlY3Rpb246ImNlbGwiLHRhYk1vdmVzOntyb3c6'@;
put 'MSxjb2w6MH0sdGhlbWVOYW1lOnRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn0pKSxqYShjdSx0aGlzKS5pbml0KCksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKFosbmUpPT57bmV8fGph'@;
put 'KGN1LHRoaXMpLnVzZVRoZW1lKFopfSk7Y29uc3QgRD1qYShjdSx0aGlzKS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIik7RC5yZW1vdmVTaG9ydGN1dHNCeUtleXMoWyJUYWIiXSksRC5yZW1vdmVTaG9ydGN1dHNCeUtleXMoWyJTaGlmdCIsIlRhYiJdKSxELmFkZFNo'@;
put 'b3J0Y3V0KHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazpaPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixaLHRoaXMpfSxncm91cDpoNWV9KSxELmFkZFNob3J0Y3V0KHtrZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6Wj0+e2phKGN1LHRoaXMpLmRlc2Vs'@;
put 'ZWN0Q2VsbCgpLHRoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsWix0aGlzKSx0aGlzLnJ1bkxvY2FsSG9va3MoImxpc3RUYWJLZXlkb3duIixaLHRoaXMpfSxncm91cDpoNWV9KX07aChhKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT5oKGEpLDEwMCl9Zm9jdXMoKXt0aGlzLmlz'@;
put 'QnVpbHQoKSYmamEoY3UsdGhpcykubGlzdGVuKCl9cmVzZXQoKXtqYShQZyx0aGlzKS5yZXNldCgpLGphKG82LHRoaXMpLnJlc2V0KCksamEoYTYsdGhpcykucmVzZXQoKX11cGRhdGUoKXt0aGlzLmlzQnVpbHQoKSYmKGphKGN1LHRoaXMpLmxvYWREYXRhKGZ1bmN0aW9uIGhkdChjLGwpe2Nv'@;
put 'bnN0IGE9WVQobCk7cmV0dXJuIGMubWFwKGQ9PihkLmNoZWNrZWQ9YShkLnZhbHVlKSxkKSl9KGphKHYzLHRoaXMpLHRoaXMub3B0aW9ucy52YWx1ZSkpLHN1cGVyLnVwZGF0ZSgpKX1kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPWphKGN1LHRoaXMpKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95'@;
put 'KCksamEoUGcsdGhpcykuZGVzdHJveSgpLGphKGE2LHRoaXMpLmRlc3Ryb3koKSxqYShvNix0aGlzKS5kZXN0cm95KCksbTMoUGcsdGhpcyxudWxsKSxtMyhhNix0aGlzLG51bGwpLG0zKG82LHRoaXMsbnVsbCksbTMoY3UsdGhpcyxudWxsKSxtMyh2Myx0aGlzLG51bGwpLHN1cGVyLmRlc3Ry'@;
put 'b3koKX19ZnVuY3Rpb24gbGR0KGMpe2NvbnN0IGw9Yy50YXJnZXQudmFsdWUudG9Mb2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSk7bGV0IGE7YT0iIj09PWw/Wy4uLmphKHYzLHRoaXMpXTpqYSh2Myx0aGlzKS5maWx0ZXIoZD0+YCR7ZC52YWx1ZX1gLnRvTG9jYWxlTG93ZXJDYXNl'@;
put 'KHRoaXMuZ2V0TG9jYWxlKCkpLmluZGV4T2YobCk+PTApLGphKGN1LHRoaXMpLmxvYWREYXRhKGEpfWZ1bmN0aW9uIGNkdChjKXt0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLGMsdGhpcyksVCQodV8sYy5rZXlDb2RlKSgiQVJST1dfRE9XTiIpJiYoYy5wcmV2ZW50RGVmYXVsdCgpLEgy'@;
put 'KGMpLGphKGN1LHRoaXMpLmxpc3RlbigpLGphKGN1LHRoaXMpLnNlbGVjdENlbGwoMCwwKSl9ZnVuY3Rpb24gdWR0KGMpe2NvbnN0IGw9W107Yy5wcmV2ZW50RGVmYXVsdCgpLGphKGN1LHRoaXMpLmdldFNvdXJjZURhdGEoKS5mb3JFYWNoKChhLGQpPT57YS5jaGVja2VkPSEwLGwucHVzaChJ'@;
put 'SyhhLGQpWzBdKX0pLGphKGN1LHRoaXMpLnNldFNvdXJjZURhdGFBdENlbGwobCl9ZnVuY3Rpb24gZGR0KGMpe2NvbnN0IGw9W107Yy5wcmV2ZW50RGVmYXVsdCgpLGphKGN1LHRoaXMpLmdldFNvdXJjZURhdGEoKS5mb3JFYWNoKChhLGQpPT57YS5jaGVja2VkPSExLGwucHVzaChJSyhhLGQp'@;
put 'WzBdKX0pLGphKGN1LHRoaXMpLnNldFNvdXJjZURhdGFBdENlbGwobCl9Y29uc3QgXzk9ImJ5X3ZhbHVlIjtmdW5jdGlvbiAkRihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9QXUoXzksZnVuY3Rpb24gcGR0KGMsbCl7bGV0W2FdPWw7cmV0dXJuIGEoYy52YWx1ZSl9LHtuYW1lOiJCeSB2YWx1ZSIsaW5wdXRzQ291bnQ6MCxpbnB1dFZhbHVlc0RlY29yYXRvcihjKXtsZXRb'@;
put 'bF09YztyZXR1cm5bWVQobCldfSxzaG93T3BlcmF0b3JzOiExfSk7dmFyIHA1ZSxYVD1uZXcgV2Vha1NldDtjbGFzcyBfZHQgZXh0ZW5kcyBGVHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiExfSksZnVuY3Rpb24gZ2R0KGMsbCl7KGZ1bmN0aW9uIG1kdChj'@;
put 'LGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLFhUKSxmdW5jdGlvbiB2ZHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9u'@;
put 'IGJkdChjKXt2YXIgbD1mdW5jdGlvbiB5ZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1'@;
put 'cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJuYW1lIiwiIiksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IHFUKHRoaXMuaG90KSksdGhpcy5y'@;
put 'ZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJrZXlkb3duIixsPT4kRihYVCx0aGlzLHdkdCkuY2FsbCh0aGlzLGwpKS5hZGRMb2NhbEhvb2soImxpc3RUYWJLZXlkb3duIixsPT50aGlzLnJ1bkxvY2Fs'@;
put 'SG9va3MoImxpc3RUYWJLZXlkb3duIixsKSksdGhpcy5ob3QuYWRkSG9vaygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLChsLGEpPT4kRihYVCx0aGlzLENkdCkuY2FsbCh0aGlzLGwsYSkpfWdldEVsZW1lbnRzKCl7Y29uc3QgbD10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVu'@;
put 'dCgpO3JldHVybltsLmdldFNlYXJjaElucHV0RWxlbWVudCgpLGwuZ2V0U2VsZWN0QWxsRWxlbWVudCgpLGwuZ2V0Q2xlYXJBbGxFbGVtZW50KCksdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKV19c2V0U3RhdGUobCl7aWYodGhpcy5yZXNldCgpLGwmJmwuY29tbWFuZC5rZXk9PT1f'@;
put 'OSl7Y29uc3QgYT10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpO2Euc2V0SXRlbXMobC5pdGVtc1NuYXBzaG90KSxhLnNldFZhbHVlKGwuYXJnc1swXSksYS5zZXRMb2NhbGUobC5sb2NhbGUpfX1nZXRTdGF0ZSgpe2NvbnN0IGw9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQo'@;
put 'KSxhPWwuZ2V0SXRlbXMoKTtyZXR1cm57Y29tbWFuZDp7a2V5OmwuaXNTZWxlY3RlZEFsbFZhbHVlcygpfHwhYS5sZW5ndGg/RTA6Xzl9LGFyZ3M6W2wuZ2V0VmFsdWUoKV0saXRlbXNTbmFwc2hvdDphfX11cGRhdGVTdGF0ZShsKXtjb25zdCBhPShkLGgsZix2LE0pPT57Y29uc3RbRF09RG0o'@;
put 'aCxjZT0+Y2UubmFtZT09PV85KSxaPXt9LG5lPXRoaXMuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoQ1ApO2lmKEQpe2NvbnN0IGNlPXYoZCxNKSxiZT15cyhjZSxkdD0+ZHQudmFsdWUpLEVlPW5ldyBNYXAoY2UubWFwKGR0PT5bZHQudmFsdWUsdGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZHQubWV0'@;
put 'YS52aXN1YWxSb3csZHQubWV0YS52aXN1YWxDb2wpXSkpLEJlPWRRKGJlKTtmJiYoRC5hcmdzWzBdPWYpO2NvbnN0IHFlPVtdLHJ0PWM1ZShCZSxELmFyZ3NbMF0sbmUsZHQ9PntkdC5jaGVja2VkJiZxZS5wdXNoKGR0LnZhbHVlKSwkRihYVCx0aGlzLGY1ZSkuY2FsbCh0aGlzLGR0LEVlKX0p'@;
put 'O1oubG9jYWxlPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4pLmxvY2FsZSxaLmFyZ3M9W3FlXSxaLmNvbW1hbmQ9eTkoXzkpLFouaXRlbXNTbmFwc2hvdD1ydH1lbHNlIFouYXJncz1bXSxaLmNvbW1hbmQ9eTkoRTApO3RoaXMuc3RhdGUuc2V0'@;
put 'VmFsdWVBdEluZGV4KGQsWil9O2EobC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb2x1bW4sbC5lZGl0ZWRDb25kaXRpb25TdGFjay5jb25kaXRpb25zLGwuY29uZGl0aW9uQXJnc0NoYW5nZSxsLmZpbHRlcmVkUm93c0ZhY3RvcnkpLGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzLmxlbmd0aCYm'@;
put 'YShsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrc1swXS5jb2x1bW4sbC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3NbMF0uY29uZGl0aW9ucyxsLmNvbmRpdGlvbkFyZ3NDaGFuZ2UsbC5maWx0ZXJlZFJvd3NGYWN0b3J5LGwuZWRpdGVkQ29uZGl0aW9uU3RhY2spfWdldE11bHRpcGxlU2VsZWN0'@;
put 'RWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgcVQpWzBdfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRo'@;
put 'aXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhLGQsaCxmLHYpPT57VGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51VmFsdWUiKTtjb25zdCBNPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gVGkoTSwiaHRGaWx0ZXJzTWVudUxhYmVsIiksTS50'@;
put 'ZXh0Q29udGVudD12LGEuYXBwZW5kQ2hpbGQoTSksYS5wYXJlbnRFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8WW4odGhpcy5lbGVtZW50cyxEPT5hLmFwcGVuZENoaWxkKEQuZWxlbWVudCkpLGF9fX1yZXNldCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBo'@;
put 'cmFzZShDUCksYT10aGlzLl9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCksZD1hLm1hcChEPT5ELnZhbHVlKSxoPW5ldyBNYXAoYS5tYXAoRD0+W0QudmFsdWUsRC5tZXRhXSkpLGY9ZFEoZCksdj1jNWUoZixmLGwsRD0+eyRGKFhULHRoaXMsZjVlKS5jYWxsKHRoaXMsRCxoKX0pO3RoaXMuZ2V0'@;
put 'TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0SXRlbXModiksc3VwZXIucmVzZXQoKSx0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldFZhbHVlKGYpO2NvbnN0IE09dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtudWxsIT09TSYmdGhp'@;
put 'cy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRMb2NhbGUodGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxNLnZpc3VhbEluZGV4KS5sb2NhbGUpfV9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVt'@;
put 'bigpO3JldHVybiBudWxsPT09bD9bXTp5cyh0aGlzLmhvdC5nZXREYXRhQXRDb2wobC52aXN1YWxJbmRleCksKGEsZCk9Pih7dmFsdWU6dVEoYSksbWV0YTp0aGlzLmhvdC5nZXRDZWxsTWV0YShkLGwudmlzdWFsSW5kZXgpfSkpfX1mdW5jdGlvbiB3ZHQoYyl7dV8oYy5rZXlDb2RlLCJFU0NB'@;
put 'UEUiKSYmKHRoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIiksSDIoYykpfWZ1bmN0aW9uIGY1ZShjLGwpe3RoaXMuaG90Lmhhc0hvb2soIm1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIikmJihjLnZpc3VhbFZhbHVlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlGaWx0ZXJzTXVsdGlT'@;
put 'ZWxlY3RWYWx1ZSIsYy52aXN1YWxWYWx1ZSxsLmdldChjLnZhbHVlKSkpfWZ1bmN0aW9uIENkdChjLGwpe3JldHVybiJudW1lcmljIj09PWwudHlwZT9zNGUoYyxsKTpjfXZhciBnNWU9bmV3IFdlYWtTZXQ7Y2xhc3MgSlQgZXh0ZW5kcyBGVHtzdGF0aWMgZ2V0IEJVVFRPTl9PSygpe3JldHVy'@;
put 'biJvayJ9c3RhdGljIGdldCBCVVRUT05fQ0FOQ0VMKCl7cmV0dXJuImNhbmNlbCJ9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMH0pLGZ1bmN0aW9uIFNkdChjLGwpeyhmdW5jdGlvbiBNZHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxnNWUpLGZ1bmN0aW9uIHhkdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRWR0KGMpe3ZhciBsPWZ1bmN0aW9uIFRkdChjLGwpe2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt'@;
put 'aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph'@;
put 'LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVudHMucHVzaChuZXcgcjYodGhpcy5ob3Qse3R5cGU6ImJ1dHRvbiIsdmFsdWU6blgsY2xhc3NOYW1lOiJodFVJQnV0'@;
put 'dG9uIGh0VUlCdXR0b25PSyIsaWRlbnRpZmllcjpKVC5CVVRUT05fT0t9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyByNih0aGlzLmhvdCx7dHlwZToiYnV0dG9uIix2YWx1ZTpyWCxjbGFzc05hbWU6Imh0VUlCdXR0b24gaHRVSUJ1dHRvbkNhbmNlbCIsaWRlbnRpZmllcjpKVC5CVVRUT05f'@;
put 'Q0FOQ0VMfSkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXtZbih0aGlzLmVsZW1lbnRzLGw9PntsLmFkZExvY2FsSG9vaygiY2xpY2siLChhLGQpPT5mdW5jdGlvbiBBZHQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBh'@;
put 'cmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShnNWUsdGhpcyxrZHQpLmNhbGwodGhpcyxhLGQpKX0pfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5p'@;
put 'ZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhKT0+KFRpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudUFjdGlvbkJhciIpLFluKHRoaXMuZWxlbWVudHMsZD0+YS5hcHBlbmRD'@;
put 'aGlsZChkLmVsZW1lbnQpKSxhKX19YWNjZXB0KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhY2NlcHQiKX1jYW5jZWwoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpfX1mdW5jdGlvbiBrZHQoYyxsKXtsLm9wdGlvbnMuaWRlbnRpZmllcj09PXA1ZS5CVVRUT05fT0s/dGhpcy5hY2NlcHQo'@;
put 'KTp0aGlzLmNhbmNlbCgpfWZ1bmN0aW9uIHBRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEZHQoYyl7dmFyIGw9ZnVuY3Rpb24gSWR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy'@;
put 'IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj'@;
put 'LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31wNWU9SlQ7Y29uc3QgbTVlPSJDb25kaXRp'@;
put 'b25Db2xsZWN0aW9uLmZpbHRlcmluZ1N0YXRlcyI7Y2xhc3MgdjVle2NvbnN0cnVjdG9yKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07cFEodGhpcywiaG90Iix2b2lkIDApLHBRKHRoaXMsImlzTWFwUmVnaXN0cmFi'@;
put 'bGUiLHZvaWQgMCkscFEodGhpcywiZmlsdGVyaW5nU3RhdGVzIixuZXcgZlApLHRoaXMuaG90PWwsdGhpcy5pc01hcFJlZ2lzdHJhYmxlPWEsITA9PT10aGlzLmlzTWFwUmVnaXN0cmFibGU/dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAobTVlLHRoaXMuZmlsdGVyaW5n'@;
put 'U3RhdGVzKTp0aGlzLmZpbHRlcmluZ1N0YXRlcy5pbml0KHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKX1pc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmxlbmd0aH1pc01hdGNoKGwsYSl7dmFyIGQ7Y29uc3QgaD10'@;
put 'aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgoYSksZj1udWxsIT09KGQ9aD8uY29uZGl0aW9ucykmJnZvaWQgMCE9PWQ/ZDpbXSx2PWg/Lm9wZXJhdGlvbjtyZXR1cm4gdGhpcy5pc01hdGNoSW5Db25kaXRpb25zKGYsbCx2KX1pc01hdGNoSW5Db25kaXRpb25zKGwsYSl7cmV0'@;
put 'dXJuIWwubGVuZ3RofHxmdW5jdGlvbiBWMXQoYyl7aWYoIVpUW2NdKXRocm93IEVycm9yKGBPcGVyYXRpb24gd2l0aCBpZCAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7Y29uc3QgbD1aVFtjXS5mdW5jO3JldHVybiBmdW5jdGlvbihhLGQpe3JldHVybiBsKGEsZCl9fShhcmd1bWVudHMubGVu'@;
put 'Z3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06aTYpKGwsYSl9YWRkQ29uZGl0aW9uKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmk2LGg9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1sz'@;
put 'XTp2b2lkIDA7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLmxvY2FsZSx2PWEuYXJncy5tYXAobmU9PiJzdHJpbmciPT10eXBlb2YgbmU/bmUudG9Mb2NhbGVMb3dlckNhc2UoZik6bmUpLE09YS5uYW1lfHxhLmNvbW1hbmQua2V5O3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3Jl'@;
put 'QWRkIixsKTtjb25zdCBEPXRoaXMuZ2V0T3BlcmF0aW9uKGwpO2lmKEQpe2lmKEQhPT1kKXRocm93IEVycm9yKGdsYFRoZSBjb2x1bW4gb2YgaW5kZXggJHtsfSBoYXMgYmVlbiBhbHJlYWR5IGFwcGxpZWQgd2l0aCBhIFxgJHtEfVxgXHgyMAogICAgICAgIGZpbHRlciBvcGVyYXRpb24uIFVz'@;
put 'ZSBcYHJlbW92ZUNvbmRpdGlvbnNcYCB0byBjbGVhciB0aGUgY3VycmVudCBjb25kaXRpb25zIGFuZCB0aGVuIGFkZCBuZXcgb25lcy5ceDIwCiAgICAgICAgTWluZCB0aGF0IHlvdSBjYW5ub3QgbWl4IGRpZmZlcmVudCB0eXBlcyBvZiBvcGVyYXRpb25zIChmb3IgaW5zdGFuY2UsIGlmIHlv'@;
put 'dSB1c2UgXGBjb25qdW5jdGlvblxgLFx4MjAKICAgICAgICB1c2UgaXQgY29uc2VxdWVudGx5IGZvciBhIHBhcnRpY3VsYXIgY29sdW1uKS5gKX1lbHNlIGlmKHljKFpUW2RdKSl0aHJvdyBuZXcgRXJyb3IoZ2xgVW5leHBlY3RlZCBvcGVyYXRpb24gbmFtZWQgXGAke2R9XGAuIFBvc3NpYmxl'@;
put 'IG9uZXMgYXJlXHgyMAogICAgICAgIFxgZGlzanVuY3Rpb25cYCBhbmQgXGBjb25qdW5jdGlvblxgLmApO2NvbnN0IFo9dGhpcy5nZXRDb25kaXRpb25zKGwpOzA9PT1aLmxlbmd0aD90aGlzLmZpbHRlcmluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgobCx7b3BlcmF0aW9uOmQsY29uZGl0aW9u'@;
put 'czpbe25hbWU6TSxhcmdzOnYsZnVuYzpuNihNLHYpfV19LGgpOloucHVzaCh7bmFtZTpNLGFyZ3M6dixmdW5jOm42KE0sdil9KSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQWRkIixsKX1nZXRDb25kaXRpb25zKGwpe3ZhciBhLGQ7cmV0dXJuIG51bGwhPT0oYT1udWxsPT09KGQ9dGhpcy5m'@;
put 'aWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGwpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jb25kaXRpb25zKSYmdm9pZCAwIT09YT9hOltdfWdldE9wZXJhdGlvbihsKXt2YXIgYTtyZXR1cm4gbnVsbD09PShhPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChsKSl8'@;
put 'fHZvaWQgMD09PWE/dm9pZCAwOmEub3BlcmF0aW9ufWdldEZpbHRlcmVkQ29sdW1ucygpe3JldHVybiB0aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRFbnRyaWVzKCkubWFwKGw9PntsZXRbYV09bDtyZXR1cm4gYX0pfWdldENvbHVtblN0YWNrUG9zaXRpb24obCl7cmV0dXJuIHRoaXMuZ2V0Rmls'@;
put 'dGVyZWRDb2x1bW5zKCkuaW5kZXhPZihsKX1leHBvcnRBbGxDb25kaXRpb25zKCl7cmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKS5yZWR1Y2UoKGwsYSk9PntsZXRbZCx7b3BlcmF0aW9uOmgsY29uZGl0aW9uczpmfV09YTtyZXR1cm4gbC5wdXNoKHtjb2x1bW46ZCxv'@;
put 'cGVyYXRpb246aCxjb25kaXRpb25zOmYubWFwKHY9PntsZXR7bmFtZTpNLGFyZ3M6RH09djtyZXR1cm57bmFtZTpNLGFyZ3M6Wy4uLkRdfX0pfSksbH0sW10pfWltcG9ydEFsbENvbmRpdGlvbnMobCl7dGhpcy5jbGVhbigpLGwuZm9yRWFjaChhPT57YS5jb25kaXRpb25zLmZvckVhY2goZD0+'@;
put 'dGhpcy5hZGRDb25kaXRpb24oYS5jb2x1bW4sZCkpfSl9cmVtb3ZlQ29uZGl0aW9ucyhsKXt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJlbW92ZSIsbCksdGhpcy5maWx0ZXJpbmdTdGF0ZXMuY2xlYXJWYWx1ZShsKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyUmVtb3ZlIixsKX1jbGVh'@;
put 'bigpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlQ2xlYW4iKSx0aGlzLmZpbHRlcmluZ1N0YXRlcy5jbGVhcigpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbGVhbiIpfWhhc0NvbmRpdGlvbnMobCxhKXtjb25zdCBkPXRoaXMuZ2V0Q29uZGl0aW9ucyhsKTtyZXR1cm4gYT9kLnNvbWUo'@;
put 'aD0+aC5uYW1lPT09YSk6ZC5sZW5ndGg+MH1kZXN0cm95KCl7dGhpcy5pc01hcFJlZ2lzdHJhYmxlJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKG01ZSksdGhpcy5maWx0ZXJpbmdTdGF0ZXM9bnVsbCx0aGlzLmNsZWFyTG9jYWxIb29rcygpfX1UbCh2NWUseTEp'@;
put 'O2NvbnN0IGI1ZT12NWU7ZnVuY3Rpb24geTVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBSZHQoYyl7dmFyIGw9ZnVuY3Rpb24gTGR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy'@;
put 'IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj'@;
put 'LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBfNWU9Y2xhc3MgT2R0e2NvbnN0'@;
put 'cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTooKT0+W107eTVlKHRoaXMsImNvbmRpdGlvbkNvbGxlY3Rpb24iLHZvaWQgMCkseTVlKHRoaXMsImNvbHVtbkRhdGFGYWN0b3J5Iix2b2lkIDApLHRoaXMuY29uZGl0'@;
put 'aW9uQ29sbGVjdGlvbj1sLHRoaXMuY29sdW1uRGF0YUZhY3Rvcnk9YX1maWx0ZXIoKXtsZXQgbD1bXTtyZXR1cm4gWW4odGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldEZpbHRlcmVkQ29sdW1ucygpLChhLGQpPT57bGV0IGg9dGhpcy5jb2x1bW5EYXRhRmFjdG9yeShhKTtkJiYoaD10aGlz'@;
put 'Ll9nZXRJbnRlcnNlY3REYXRhKGgsbCkpLGw9dGhpcy5maWx0ZXJCeUNvbHVtbihhLGgpfSksbH1maWx0ZXJCeUNvbHVtbihsKXtjb25zdCBkPVtdO3JldHVybiBZbihhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10saD0+e3ZvaWQgMCE9'@;
put 'PWgmJnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc01hdGNoKGgsbCkmJmQucHVzaChoKX0pLGR9X2dldEludGVyc2VjdERhdGEobCxhKXtjb25zdCBkPVtdO3JldHVybiBZbihhLGg9Pntjb25zdCBmPWgubWV0YS52aXN1YWxSb3c7dm9pZCAwIT09bFtmXSYmKGRbZl09bFtmXSl9KSxkfX07'@;
put 'ZnVuY3Rpb24gdzkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEhkdChjKXt2YXIgbD1mdW5jdGlvbiBOZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwi'@;
put 'ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy'@;
put 'biJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGdRKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgS0Y9bmV3IFdlYWtTZXQ7Y2xhc3MgdzVle2NvbnN0cnVjdG9yKGwsYSl7bGV0'@;
put 'IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOigpPT5bXTsoZnVuY3Rpb24gUGR0KGMsbCl7KGZ1bmN0aW9uIEZkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy'@;
put 'aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxLRiksdzkodGhpcywiaG90Iix2b2lkIDApLHc5KHRoaXMsImNvbmRpdGlvbkNvbGxlY3Rpb24iLHZvaWQgMCksdzkodGhpcywiY29sdW1uRGF0YUZhY3RvcnkiLHZvaWQgMCksdzkodGhp'@;
put 'cywiY2hhbmdlcyIsW10pLHc5KHRoaXMsImdyb3VwaW5nIiwhMSksdzkodGhpcywibGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb24iLC0xKSx3OSh0aGlzLCJsYXRlc3RPcmRlclN0YWNrIixbXSksdGhpcy5ob3Q9bCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249YSx0aGlzLmNvbHVtbkRhdGFG'@;
put 'YWN0b3J5PWQsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlUmVtb3ZlIixoPT5nUShLRix0aGlzLFZkdCkuY2FsbCh0aGlzLGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclJlbW92ZSIsaD0+dGhpcy51cGRhdGVTdGF0'@;
put 'ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJBZGQiLGg9PnRoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZUNsZWFuIiwoKT0+Z1EoS0YsdGhpcyxC'@;
put 'ZHQpLmNhbGwodGhpcykpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyQ2xlYW4iLCgpPT5nUShLRix0aGlzLGpkdCkuY2FsbCh0aGlzKSl9Z3JvdXBDaGFuZ2VzKCl7dGhpcy5ncm91cGluZz0hMH1mbHVzaCgpe3RoaXMuZ3JvdXBpbmc9ITEsWW4odGhpcy5j'@;
put 'aGFuZ2VzLGw9Pnt0aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwpfSksdGhpcy5jaGFuZ2VzLmxlbmd0aD0wfXVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwsYSl7dmFyIGQ9dGhpcztpZih0aGlzLmdyb3VwaW5nKXJldHVybiB2b2lkKC0xPT09dGhpcy5jaGFuZ2VzLmluZGV4T2YobCkmJnRoaXMu'@;
put 'Y2hhbmdlcy5wdXNoKGwpKTtjb25zdCBoPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5leHBvcnRBbGxDb25kaXRpb25zKCk7bGV0IGY9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24obCk7LTE9PT1mJiYoZj10aGlzLmxhdGVzdEVkaXRlZENvbHVtblBv'@;
put 'c2l0aW9uKTtjb25zdCB2PWguc2xpY2UoMCxmKSxNPWguc2xpY2UoZik7TS5sZW5ndGgmJk1bMF0uY29sdW1uPT09bCYmTS5zaGlmdCgpO2NvbnN0IEQ9TjJlKGZ1bmN0aW9uKG5lLGNlKXtsZXQgYmU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRz'@;
put 'WzJdOltdO2NvbnN0IEVlPW5ldyBiNWUoZC5ob3QsITEpLEJlPVtdLmNvbmNhdChuZSxiZSk7RWUuaW1wb3J0QWxsQ29uZGl0aW9ucyhCZSk7Y29uc3QgcWU9ZC5jb2x1bW5EYXRhRmFjdG9yeShjZSk7bGV0IHJ0O3J0PUVlLmlzRW1wdHkoKT9xZTpuZXcgXzVlKEVlLGR0PT5kLmNvbHVtbkRh'@;
put 'dGFGYWN0b3J5KGR0KSkuZmlsdGVyKCkscnQ9eXMocnQsZHQ9PmR0Lm1ldGEudmlzdWFsUm93KTtjb25zdCBwdD1ZVChydCk7cmV0dXJuIEVlLmRlc3Ryb3koKSxEbShxZSxkdD0+cHQoZHQubWV0YS52aXN1YWxSb3cpKX0pKHYpLFo9W10uY29uY2F0KHRoaXMuY29uZGl0aW9uQ29sbGVjdGlv'@;
put 'bi5nZXRDb25kaXRpb25zKGwpKTt0aGlzLnJ1bkxvY2FsSG9va3MoInVwZGF0ZSIse2VkaXRlZENvbmRpdGlvblN0YWNrOntjb2x1bW46bCxjb25kaXRpb25zOlp9LGRlcGVuZGVudENvbmRpdGlvblN0YWNrczpNLGZpbHRlcmVkUm93c0ZhY3Rvcnk6RCxjb25kaXRpb25BcmdzQ2hhbmdlOmF9'@;
put 'KX1kZXN0cm95KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKSxYYSh0aGlzLChsLGEpPT57dGhpc1thXT1udWxsfSl9fWZ1bmN0aW9uIFZkdChjKXt0aGlzLmxhdGVzdEVkaXRlZENvbHVtblBvc2l0aW9uPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGMp'@;
put 'fWZ1bmN0aW9uIEJkdCgpe3RoaXMubGF0ZXN0T3JkZXJTdGFjaz10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0RmlsdGVyZWRDb2x1bW5zKCl9ZnVuY3Rpb24gamR0KCl7WW4odGhpcy5sYXRlc3RPcmRlclN0YWNrLGM9Pnt0aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGMpfSl9VGwodzVl'@;
put 'LHkxKTtjb25zdCB6ZHQ9dzVlLFFUPSJmaWx0ZXJzIjtmdW5jdGlvbiBtUShjLGwsYSl7QzVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBDNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRz'@;
put 'IHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGVBKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZZHQoYyl7dmFyIGw9ZnVuY3Rpb24gR2R0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09'@;
put 'YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp'@;
put 'KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBxRihjLGwsYSl7'@;
put 'cmV0dXJuIGMuc2V0KCRkKGMsbCksYSksYX1mdW5jdGlvbiAkMihjLGwpe3JldHVybiBjLmdldCgkZChjLGwpKX1mdW5jdGlvbiAkZChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdlE9ImZpbHRlcnMiLFM1ZT12UTt2YXIgRmc9bmV3IFdlYWtNYXAsYlE9bmV3IFdlYWtNYXAsQzk9bmV3IFdlYWtNYXAsTmg9bmV3IFdlYWtTZXQ7Y2xhc3MgS2R0IGV4dGVuZHMg'@;
put 'RnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHZRfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI1MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46RHJvcGRvd25NZW51IiwicGx1Z2luOkhpZGRlblJvd3MiLCJjZWxsLXR5cGU6Y2hl'@;
put 'Y2tib3giXX1jb25zdHJ1Y3RvcihsKXt2YXIgYTtzdXBlcihsKSxhPXRoaXMsZnVuY3Rpb24gV2R0KGMsbCl7QzVlKGMsbCksbC5hZGQoYyl9KHRoaXMsTmgpLGVBKHRoaXMsImRyb3Bkb3duTWVudVBsdWdpbiIsbnVsbCksZUEodGhpcywiY29uZGl0aW9uQ29sbGVjdGlvbiIsbnVsbCksZUEo'@;
put 'dGhpcywiY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIiLG51bGwpLGVBKHRoaXMsImNvbXBvbmVudHMiLG5ldyBNYXAoW1siZmlsdGVyX2J5X2NvbmRpdGlvbiIsbnVsbF0sWyJmaWx0ZXJfb3BlcmF0b3JzIixudWxsXSxbImZpbHRlcl9ieV9jb25kaXRpb24yIixudWxsXSxbImZpbHRlcl9ieV92'@;
put 'YWx1ZSIsbnVsbF0sWyJmaWx0ZXJfYWN0aW9uX2JhciIsbnVsbF1dKSksZUEodGhpcywiZmlsdGVyc1Jvd3NNYXAiLG51bGwpLG1RKHRoaXMsRmcsdm9pZCAwKSxtUSh0aGlzLGJRLG5ldyBXZWFrU2V0KSxtUSh0aGlzLEM5LFtdKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRl'@;
put 'ciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gJGQoTmgsYSxuaHQpLmNhbGwoYSwuLi5oKX0pfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt2'@;
put 'UV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuZmlsdGVyc1Jvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLG5ldyBLRSksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW49dGhpcy5ob3Qu'@;
put 'Z2V0UGx1Z2luKCJkcm9wZG93bk1lbnUiKTtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51LGQ9YSYmYS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHksaD1NPT4oTS5hZGRMb2NhbEhvb2soImFjY2VwdCIsKCk9PiRkKE5oLHRoaXMsTTVl'@;
put 'KS5jYWxsKHRoaXMsImFjY2VwdCIpKSxNLmFkZExvY2FsSG9vaygiY2FuY2VsIiwoKT0+JGQoTmgsdGhpcyxNNWUpLmNhbGwodGhpcywiY2FuY2VsIikpLE0uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLEQ9PiRkKE5oLHRoaXMsdGh0KS5jYWxsKHRoaXMsTSxEKSksTSksZj0oKT0+YCR7dGhpcy5o'@;
put 'b3QuZ2V0VHJhbnNsYXRlZFBocmFzZShYcSl9OmA7aWYoIXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKSl7Y29uc3QgTT1uZXcgYVEodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfY29uZGl0aW9uIixuYW1lOmYsYWRkU2VwYXJhdG9yOiExLG1lbnVDb250YWluZXI6'@;
put 'ZH0pO00uYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+JGQoTmgsdGhpcyx4NWUpLmNhbGwodGhpcykpLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV9jb25kaXRpb24iLGgoTSkpfWlmKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKXx8dGhpcy5jb21w'@;
put 'b25lbnRzLnNldCgiZmlsdGVyX29wZXJhdG9ycyIsbmV3IGVkdCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9vcGVyYXRvcnMiLG5hbWU6Ik9wZXJhdG9ycyJ9KSksIXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikpe2NvbnN0IE09bmV3IGFRKHRoaXMuaG90LHtpZDoi'@;
put 'ZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG5hbWU6IiIsYWRkU2VwYXJhdG9yOiEwLG1lbnVDb250YWluZXI6ZH0pO00uYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+JGQoTmgsdGhpcyx4NWUpLmNhbGwodGhpcykpLHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV9jb25kaXRpb24y'@;
put 'IixoKE0pKX1pZih0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X3ZhbHVlIixoKG5ldyBfZHQodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYnlfdmFsdWUiLG5hbWU6KCk9PmAke3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQ'@;
put 'aHJhc2UoSnEpfTpgfSkpKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYWN0aW9uX2JhciIsaChuZXcgSlQodGhpcy5ob3Qse2lkOiJmaWx0ZXJfYWN0aW9uX2JhciIsbmFtZToiQWN0aW9uIGJhciJ9KSkpLHRo'@;
put 'aXMuY29uZGl0aW9uQ29sbGVjdGlvbnx8KHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1uZXcgYjVlKHRoaXMuaG90KSksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcnx8KHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXI9bmV3IHpkdCh0aGlzLmhvdCx0aGlzLmNvbmRpdGlvbkNvbGxl'@;
put 'Y3Rpb24sTT0+dGhpcy5nZXREYXRhTWFwQXRDb2x1bW4oTSkpLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuYWRkTG9jYWxIb29rKCJ1cGRhdGUiLE09PiRkKE5oLHRoaXMscmh0KS5jYWxsKHRoaXMsTSkpKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChNPT5NLnNob3coKSksdGhpcy5h'@;
put 'ZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5KE0pLFo9MDtaPE07WisrKURbWl09YXJndW1lbnRzW1pdO3JldHVybiAkZChOaCxsLGVodCkuY2FsbChsLC4uLkQpfSksdGhpcy5h'@;
put 'ZGRIb29rKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93IiwoKT0+JGQoTmgsdGhpcyxRZHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93IiwoKT0+JGQoTmgsdGhpcyxYZHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVI'@;
put 'aWRlIiwoKT0+JGQoTmgsdGhpcyxKZHQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLE09PiRkKE5oLHRoaXMscWR0KS5jYWxsKHRoaXMsTSkpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51JiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmKHRoaXMu'@;
put 'ZHJvcGRvd25NZW51UGx1Z2luLmRpc2FibGVQbHVnaW4oKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5lbmFibGVQbHVnaW4oKSksISQyKEZnLHRoaXMpJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5lbmFibGVkKXtjb25zdCBNPVt7Zm9jdXM6KCk9Pntjb25zdCBaPSQyKEZnLHRoaXMpLmdl'@;
put 'dE1lbnUoKSxuZT1aLmdldE5hdmlnYXRvcigpLGNlPSQyKEZnLHRoaXMpLmdldExhc3RNZW51UGFnZSgpO1ouZm9jdXMoKSxjZT4wP25lLnNldEN1cnJlbnRQYWdlKGNlKTpuZS50b0ZpcnN0SXRlbSgpfX0sLi4uQXJyYXkuZnJvbSh0aGlzLmNvbXBvbmVudHMpLm1hcChaPT57bGV0WyxuZV09'@;
put 'WjtyZXR1cm4gbmUuZ2V0RWxlbWVudHMoKX0pLmZsYXQoKV07cUYoRmcsdGhpcyxmdW5jdGlvbiBaZHQoYyxsKXtsZXQgZCxhPS0xO2NvbnN0IGg9ZnVuY3Rpb24gVWR0KGMpe3JldHVybiBmZ2Uoe2luaXRpYWxQYWdlOjAsc2l6ZTooKT0+Yy5sZW5ndGgsb25JdGVtU2VsZWN0OihhLGQpPT57'@;
put 'Y29uc3QgaD1jW2FdO3JldHVybiBoIGluc3RhbmNlb2YgcVQ/ZDohKGguZWxlbWVudCYmIWo3KGguZWxlbWVudCkpJiZ2b2lkIGguZm9jdXMoKX19KX0obCksZj1jZT0+KCk9PntkLmlzT3BlbmVkKCkmJmQuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCkubGlzdGVuKFFUKSxoLnNldEN1cnJl'@;
put 'bnRQYWdlKGwuaW5kZXhPZihjZSkpfTtmdW5jdGlvbiB2KGNlKXtjb25zdCBiZT1kLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLEVlPWNlLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpO2guY2xlYXIoKSxFZS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hpZnQi'@;
put 'LCJUYWIiXV0sZm9yd2FyZFRvQ29udGV4dDpiZS5nZXRDb250ZXh0KFFUKSxjYWxsYmFjazooKT0+e2NlLmlzU3ViTWVudSgpJiZjZS5jbG9zZSgpLGJlLmxpc3RlbihRVCl9fV0pLCFjZS5pc1N1Yk1lbnUoKSYmYmUuYWRkQ3VzdG9tU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXSxbIlNoaWZ0'@;
put 'IiwiVGFiIl1dLGNhbGxiYWNrOkJlPT57Y29uc3QgcWU9ZC5nZXROYXZpZ2F0b3IoKTtxZS5nZXRDdXJyZW50UGFnZSgpPi0xJiYoYT1xZS5nZXRDdXJyZW50UGFnZSgpKSxxZS5jbGVhcigpLEJlLnNoaWZ0S2V5P2gudG9QcmV2aW91c0l0ZW0oKTpoLnRvTmV4dEl0ZW0oKX19LHtrZXlzOltb'@;
put 'IkVzY2FwZSJdXSxjYWxsYmFjazooKT0+e2QuY2xvc2UoKX19LHtrZXlzOltbIkVudGVyIl0sWyJTcGFjZSJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpCZT0+e2NvbnN0IHFlPWxbaC5nZXRDdXJyZW50UGFnZSgpXTtxZSBpbnN0YW5jZW9mIFVUJiYocWUub3Blbk9wdGlvbnMoKSxC'@;
put 'ZS5wcmV2ZW50RGVmYXVsdCgpKSxxZSBpbnN0YW5jZW9mICRUJiYocWUuYWN0aXZhdGUoKSxCZS5wcmV2ZW50RGVmYXVsdCgpKSxxZSBpbnN0YW5jZW9mIEhofHxCZS5wcmV2ZW50RGVmYXVsdCgpfX1dLFFUKX1mdW5jdGlvbiBEKGNlKXtjZS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9u'@;
put 'Q2hhbmdlIixiZT0+e2JlLmtleS5zdGFydHNXaXRoKCJmaWx0ZXJfIil8fGguY2xlYXIoKX0pLGNlLmFkZExvY2FsSG9vaygiYWZ0ZXJTdWJtZW51T3BlbiIsdiksY2UuYWRkTG9jYWxIb29rKCJhZnRlck9wZW4iLHYpLGQ9Y2V9cmV0dXJuIGwuZm9yRWFjaChjZT0+e2NlIGluc3RhbmNlb2Yg'@;
put 'SGgmJihjZS5hZGRMb2NhbEhvb2soImNsaWNrIixmKGNlKSksY2UuYWRkTG9jYWxIb29rKCJmb2N1cyIsZihjZSkpLGNlLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsZihjZSkpKX0pLEQoYyksey4uLmgsbGlzdGVuOmZ1bmN0aW9uIE0oKXtkLmZvY3VzKCksZC5nZXRLZXlib2FyZFNob3J0'@;
put 'Y3V0c0N0cmwoKS5saXN0ZW4oUVQpfSxzZXRNZW51OkQsZ2V0TWVudTpmdW5jdGlvbiBaKCl7cmV0dXJuIGR9LGdldExhc3RNZW51UGFnZTpmdW5jdGlvbiBuZSgpe3JldHVybiBhfX19KHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUsTSkpO2NvbnN0IEQ9Wj0+eyQyKEZnLHRoaXMpLmxp'@;
put 'c3RlbigpLFoucHJldmVudERlZmF1bHQoKSx1XyhaLmtleUNvZGUsIlRBQiIpJiYoWi5zaGlmdEtleT8kMihGZyx0aGlzKS50b1ByZXZpb3VzSXRlbSgpOiQyKEZnLHRoaXMpLnRvTmV4dEl0ZW0oKSl9O3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpLmFkZExvY2FsSG9v'@;
put 'aygibGlzdFRhYktleWRvd24iLEQpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS5hZGRMb2NhbEhvb2soInNlbGVjdFRhYktleWRvd24iLEQpfXRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dmFy'@;
put 'IGw7dGhpcy5lbmFibGVkJiYobnVsbCE9PShsPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKSYmdm9pZCAwIT09bCYmbC5lbmFibGVkJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKChhLGQpPT57YS5kZXN0cm95'@;
put 'KCksdGhpcy5jb21wb25lbnRzLnNldChkLG51bGwpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bnVsbCx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHRoaXMudW5yZWdp'@;
put 'c3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJBbHQiLCJBIl1dLHN0b3BQcm9wYWdhdGlvbjohMCxjYWxsYmFj'@;
put 'azooKT0+e2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKTt0aGlzLmNsZWFyQ29uZGl0aW9ucygpLHRoaXMuZmlsdGVyKCksbCYmdGhpcy5ob3Quc2VsZWN0Q2VsbHMobCl9LGdyb3VwOlM1ZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIo'@;
put 'KS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChTNWUpfWFkZENvbmRpdGlvbihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOmk2O2NvbnN0IGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVt'@;
put 'bihsKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYse2NvbW1hbmQ6e2tleTphfSxhcmdzOmR9LGgpfXJlbW92ZUNvbmRpdGlvbnMobCl7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25k'@;
put 'aXRpb25zKGEpfWNsZWFyQ29uZGl0aW9ucyhsKXtpZih2b2lkIDA9PT1sKXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5jbGVhbigpO2Vsc2V7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGEpfX1p'@;
put 'bXBvcnRDb25kaXRpb25zKGwpe3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pbXBvcnRBbGxDb25kaXRpb25zKGwpfWV4cG9ydENvbmRpdGlvbnMoKXtyZXR1cm4gdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKX1maWx0ZXIoKXtjb25zdHtuYXZpZ2FibGVI'@;
put 'ZWFkZXJzOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCksYT10aGlzLl9jcmVhdGVEYXRhRmlsdGVyKCksZD0hdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmlzRW1wdHkoKTtsZXQgaD1bXTtjb25zdCBmPXRoaXMuZXhwb3J0Q29uZGl0aW9ucygpLHY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9y'@;
put 'ZUZpbHRlciIsZiwkMihDOSx0aGlzKSk7aWYoITEhPT12JiZkKXtjb25zdCBNPVtdO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5maWx0ZXJzUm93c01hcC5jbGVhcigpLGg9eXMoYS5maWx0ZXIoKSxaPT5aLm1ldGEudmlzdWFsUm93KTtjb25zdCBEPVlUKGgpOyRvKHRoaXMu'@;
put 'aG90LmNvdW50U291cmNlUm93cygpLTEsWj0+e0QoWil8fE0ucHVzaChaKX0pLFluKE0sWj0+e3RoaXMuZmlsdGVyc1Jvd3NNYXAuc2V0VmFsdWVBdEluZGV4KFosITApfSl9LCEwKSwhbCYmIWgubGVuZ3RoJiZ0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSxxRihDOSx0aGlzLHRoaXMuZXhwb3J0'@;
put 'Q29uZGl0aW9ucygpKX1lbHNlITE9PT12fHxkP3RoaXMuaW1wb3J0Q29uZGl0aW9ucygkMihDOSx0aGlzKSk6KHFGKEM5LHRoaXMsdGhpcy5leHBvcnRDb25kaXRpb25zKCkpLHRoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKSk7dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSYmdGhp'@;
put 'cy5ob3Quc2VsZWN0Q2VsbChsPy0xOjAsdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQuY29sKSwhMSE9PXYmJih0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJGaWx0ZXIiLGYpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucmVuZGVy'@;
put 'KCkpfWdldFNlbGVjdGVkQ29sdW1uKCl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBhP3t2aXN1YWxJbmRleDphLmNvbCxwaHlzaWNhbEluZGV4OnRoaXMuaG90LnRv'@;
put 'UGh5c2ljYWxDb2x1bW4oYS5jb2wpfTpudWxsfWdldERhdGFNYXBBdENvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpLGQ9W107cmV0dXJuIFluKHRoaXMuaG90LmdldFNvdXJjZURhdGFBdENvbChhKSwoaCxmKT0+e3ZhciB2O2NvbnN0e3JvdzpNLGNvbDpELHZp'@;
put 'c3VhbENvbDpaLHZpc3VhbFJvdzpuZSx0eXBlOmNlLGluc3RhbmNlOmJlLGRhdGVGb3JtYXQ6RWUsbG9jYWxlOkJlfT10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGEpLHFlPW51bGwhPT0odj10aGlzLmhvdC5nZXREYXRhQXRDZWxsKHRoaXMuaG90LnRvVmlzdWFsUm93KGYpLGEpKSYmdm9pZCAw'@;
put 'IT09dj92Omg7ZC5wdXNoKHttZXRhOntyb3c6TSxjb2w6RCx2aXN1YWxDb2w6Wix2aXN1YWxSb3c6bmUsdHlwZTpjZSxpbnN0YW5jZTpiZSxkYXRlRm9ybWF0OkVlLGxvY2FsZTpCZX0sdmFsdWU6dVEocWUpfSl9KSxkfXVwZGF0ZVZhbHVlQ29tcG9uZW50Q29uZGl0aW9uKGwpe2NvbnN0IGQ9'@;
put 'ZFEodGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwpKTt0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwsZCl9cmVzdG9yZUNvbXBvbmVudHMobCl7dmFyIGE7Y29uc3QgZD1udWxsPT09KGE9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpKXx8dm9pZCAwPT09'@;
put 'YT92b2lkIDA6YS5waHlzaWNhbEluZGV4O2wuZm9yRWFjaChoPT57aC5pc0hpZGRlbigpfHxoLnJlc3RvcmVTdGF0ZShkKX0pLHRoaXMudXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKX1nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKGwsYSxkLGgpe2xldCBmPWw7cmV0'@;
put 'dXJuIGY9PT1ZRiYmYS5jb21tYW5kLmtleSE9PUUwJiZkLmNvbW1hbmQua2V5IT09RTAmJmguY29tbWFuZC5rZXkhPT1FMD9mPWxROmguY29tbWFuZC5rZXkhPT1FMCYmKGEuY29tbWFuZC5rZXk9PT1FMHx8ZC5jb21tYW5kLmtleT09PUUwKSYmKGY9aTYpLGZ9c2V0TGlzdGVuaW5nRHJvcGRv'@;
put 'd25NZW51KCl7dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLnNldExpc3RlbmluZygpfXVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl7Y29uc3QgbD10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikse2Nv'@;
put 'bW1hbmQ6YX09bC5nZXRTdGF0ZSgpLGQ9W3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIiksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpXTthLnNob3dPcGVyYXRvcnM/dGhpcy5zaG93Q29tcG9uZW50cyguLi5kKTp0aGlzLmhpZGVDb21w'@;
put 'b25lbnRzKC4uLmQpfV9jcmVhdGVEYXRhRmlsdGVyKCl7cmV0dXJuIG5ldyBfNWUoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbixhPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihhKSl9Z2V0SW5k'@;
put 'ZXhlc09mQ29tcG9uZW50cygpe2NvbnN0IGw9W107aWYoIXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXJldHVybiBsO2NvbnN0IGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFy'@;
put 'Z3VtZW50c1tmXTtyZXR1cm4gWW4oaCx2PT57WW4oYS5tZW51SXRlbXMsKE0sRCk9PntNLmtleT09PXYuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkua2V5JiZsLnB1c2goRCl9KX0pLGx9Y2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9p'@;
put 'ZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO2lmKCF0aGlzLmRyb3Bkb3duTWVudVBsdWdpbilyZXR1cm47Y29uc3QgZD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmhvdE1lbnUsaD1kLmdldFBsdWdpbigiaGlkZGVuUm93cyIpO2Zvcih2YXIgZj1hcmd1bWVudHMubGVu'@;
put 'Z3RoLHY9bmV3IEFycmF5KGY+MT9mLTE6MCksTT0xO008ZjtNKyspdltNLTFdPWFyZ3VtZW50c1tNXTtjb25zdCBEPXRoaXMuZ2V0SW5kZXhlc09mQ29tcG9uZW50cyguLi52KTtsP2guc2hvd1Jvd3MoRCk6aC5oaWRlUm93cyhEKSxkLnJlbmRlcigpfWhpZGVDb21wb25lbnRzKCl7Zm9yKHZh'@;
put 'ciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSghMSwuLi5hKX1zaG93Q29tcG9uZW50cygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwp'@;
put 'LGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoITAsLi4uYSl9ZGVzdHJveSgpe3RoaXMuZW5hYmxlZCYmKHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKChsLGEpPT57bnVsbCE9PWwmJihsLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVu'@;
put 'dHMuc2V0KGEsbnVsbCkpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3koKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmRlc3Ryb3koKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHN1cGVyLmRlc3Ryb3koKX19'@;
put 'ZnVuY3Rpb24gcWR0KGMpe2MmJlluKGMsbD0+e2NvbnN0WyxhXT1sLGQ9dGhpcy5ob3QucHJvcFRvQ29sKGEpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGQpJiZ0aGlzLnVwZGF0ZVZhbHVlQ29tcG9uZW50Q29uZGl0aW9uKGQpfSl9ZnVuY3Rpb24gWGR0KCl7Y29u'@;
put 'c3QgYz10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O3RoaXMucmVzdG9yZUNvbXBvbmVudHMoQXJyYXkuZnJvbSh0aGlzLmNvbXBvbmVudHMudmFsdWVzKCkpKSxjLnVwZGF0ZU1lbnVEaW1lbnNpb25zKCl9ZnVuY3Rpb24gSmR0KCl7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5'@;
put 'X2NvbmRpdGlvbiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKX1mdW5jdGlvbiBRZHQoKXtjb25zdCBjPXRoaXMuZHJvcGRvd25NZW51'@;
put 'UGx1Z2luLm1lbnU7JDIoYlEsdGhpcykuaGFzKGMpfHwkMihGZyx0aGlzKS5zZXRNZW51KGMpLCQyKGJRLHRoaXMpLmFkZChjKX1mdW5jdGlvbiBlaHQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOm9zfSksdGhpcy5jb21wb25lbnRzLmZvckVhY2gobD0+e2MuaXRlbXMucHVzaChsLmdldE1lbnVJ'@;
put 'dGVtRGVzY3JpcHRvcigpKX0pfWZ1bmN0aW9uIE01ZShjKXt2YXIgbDtpZigiYWNjZXB0Ij09PWMpe2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpO3ZhciBhO2lmKG51bGw9PT1kKXJldHVybiB2b2lkKG51bGw9PT0oYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09'@;
put 'PWF8fGEuY2xvc2UoKSk7Y29uc3R7cGh5c2ljYWxJbmRleDpofT1kLGY9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFN0YXRlKCksdj10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLmdldFN0YXRlKCksTT10aGlzLmNvbXBv'@;
put 'bmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5nZXRTdGF0ZSgpLEQ9dGhpcy5nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS5nZXRBY3RpdmVPcGVyYXRpb25JZCgpLGYsdixNKTt0aGlzLmNvbmRpdGlvblVwZGF0'@;
put 'ZU9ic2VydmVyLmdyb3VwQ2hhbmdlcygpO2xldCBaPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGgpOy0xPT09WiYmKFo9dm9pZCAwKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhoKSxmLmNvbW1hbmQua2V5IT09RTAm'@;
put 'Jih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGgsZixELFopLHYuY29tbWFuZC5rZXkhPT1FMCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihoLHYsRCxaKSksTS5jb21tYW5kLmtleSE9PUUwJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRk'@;
put 'Q29uZGl0aW9uKGgsTSxELFopLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZmx1c2goKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChuZT0+bmUuc2F2ZVN0YXRlKGgpKSx0aGlzLmZpbHRlcigpfW51bGw9PT0obD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWx8fGwu'@;
put 'Y2xvc2UoKX1mdW5jdGlvbiB0aHQoYyxsKXtjb25zdCBhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7dGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpLGMuY29uc3RydWN0b3I9PT1hUSYmIWwuaW5wdXRzQ291bnQmJnRoaXMuc2V0TGlzdGVuaW5nRHJvcGRv'@;
put 'd25NZW51KCksYS51cGRhdGVNZW51RGltZW5zaW9ucygpfWZ1bmN0aW9uIHg1ZSgpe3RoaXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl9ZnVuY3Rpb24gbmh0KGMsbCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYyk7dGhpcy5lbmFibGVkJiZ0aGlzLmNvbmRpdGlv'@;
put 'bkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9ucyhkKSYmYT09PXRoaXMuaG90LnZpZXcuZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCktMT9UaShsLCJodEZpbHRlcnNBY3RpdmUiKTpjYShsLCJodEZpbHRlcnNBY3RpdmUiKX1mdW5jdGlvbiByaHQoYyl7dmFyIGw7aWYobnVsbD09PShsPXRoaXMuZHJv'@;
put 'cGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09bHx8IWwuZW5hYmxlZClyZXR1cm47Y29uc3R7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbmRpdGlvbnM6YSxjb2x1bW46ZH0sY29uZGl0aW9uQXJnc0NoYW5nZTpofT1jO0FycmF5LmlzQXJyYXkoaCkmJnFGKEM5LHRoaXMsJDIoQzksdGhpcyku'@;
put 'bWFwKE09PihNLmNvbHVtbj09PWQmJmEubGVuZ3RoPjAmJk0uY29uZGl0aW9ucy5mb3JFYWNoKEQ9PnsiYnlfdmFsdWUiPT09RC5uYW1lJiYoRC5hcmdzPVtbLi4uaF1dKX0pLE0pKSk7Y29uc3QgZj1hLmZpbHRlcihNPT5NLm5hbWU9PT1fOSksdj1hLmZpbHRlcihNPT5NLm5hbWUhPT1fOSk7'@;
put 'aWYoZi5sZW5ndGg+PTJ8fHYubGVuZ3RoPj0zKWlsKGdsYFRoZSBmaWx0ZXIgY29uZGl0aW9ucyBoYXZlIGJlZW4gYXBwbGllZCBwcm9wZXJseSwgYnV0IGNvdWxkbuKAmXQgYmUgZGlzcGxheWVkIHZpc3VhbGx5Llx4MjAKICAgICAgICBUaGUgb3ZlcmFsbCBhbW91bnQgb2YgY29uZGl0aW9u'@;
put 'cyBleGNlZWQgdGhlIGNhcGFiaWxpdHkgb2YgdGhlIGRyb3Bkb3duIG1lbnUuXHgyMAogICAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLmApO2Vsc2V7Y29uc3QgTT10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0T3BlcmF0aW9uKGQpO3RoaXMuY29tcG9u'@;
put 'ZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS51cGRhdGVTdGF0ZSh2WzBdLGQpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikudXBkYXRlU3RhdGUodlsxXSxkKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikudXBkYXRlU3Rh'@;
put 'dGUoTSxkKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS51cGRhdGVTdGF0ZShjKX19Y29uc3QgRTVlPSJpbnRlcm5hbC11c2UtaW4taGFuZHNvbnRhYmxlIix5UT17bGljZW5zZUtleTpFNWUsdXNlQXJyYXlBcml0aG1ldGljOiEwLHVzZUNvbHVtbkluZGV4OiExLHVz'@;
put 'ZVN0YXRzOiExLGV2YWx1YXRlTnVsbFRvWmVybzohMCxwcmVjaXNpb25FcHNpbG9uOjFlLTEzLHByZWNpc2lvblJvdW5kaW5nOjE0LHNtYXJ0Um91bmRpbmc6ITAsbGVhcFllYXIxOTAwOiExLG51bGxEYXRlOnt5ZWFyOjE4OTksbW9udGg6MTIsZGF5OjMwfSxudWxsWWVhcjozMCxkYXRlRm9y'@;
put 'bWF0czpbIkREL01NL1lZWVkiLCJERC9NTS9ZWSJdLHRpbWVGb3JtYXRzOlsiaGg6bW0iLCJoaDptbTpzcy5zc3MiXSxtYXRjaFdob2xlQ2VsbDohMCx1c2VSZWd1bGFyRXhwcmVzc2lvbnM6ITEsdXNlV2lsZGNhcmRzOiEwLGZ1bmN0aW9uQXJnU2VwYXJhdG9yOiIsIix0aG91c2FuZFNlcGFy'@;
put 'YXRvcjoiIixkZWNpbWFsU2VwYXJhdG9yOiIuIixsYW5ndWFnZToiZW5HQiJ9O2Z1bmN0aW9uIFQ1ZShjKXt2YXIgbDtyZXR1cm57bWF4Q29sdW1uczpjLm1heENvbHVtbnMsbWF4Um93czpjLm1heFJvd3MsbGFuZ3VhZ2U6bnVsbD09PShsPWNbdzFdKXx8dm9pZCAwPT09bHx8bnVsbD09PShs'@;
put 'PWwubGFuZ3VhZ2UpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmxhbmdDb2RlfX1mdW5jdGlvbiBBNWUoYyl7cmV0dXJuIE9iamVjdC5rZXlzKGMpLnJlZHVjZSgobCxhKT0+KCJoeXBlcmZvcm11bGEiIT09YSYmKGxbYV09Y1thXSksbCkse30pfWZ1bmN0aW9uIFhGKCl7Y29uc3QgYz0iZW5naW5l'@;
put 'X3JlbGF0aW9uc2hpcCIsbD1yMyh3MSk7cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdpc3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5jdGlvbiBfUSgpe2NvbnN0IGM9InNoYXJlZF9lbmdpbmVfdXNhZ2UiLGw9cjModzEpO3JldHVybiBsLmhhc0l0ZW0oYyl8fGwucmVnaXN0ZXIo'@;
put 'YyxuZXcgTWFwKSxsLmdldEl0ZW0oYyl9ZnVuY3Rpb24gazVlKGMpe3ZhciBsO2NvbnN0IGE9WEYoKSxkPTA9PT1hLnNpemU/W106QXJyYXkuZnJvbShudWxsIT09KGw9YS5nZXQoYykpJiZ2b2lkIDAhPT1sP2w6W10pO3JldHVybiBuZXcgTWFwKGQubWFwKGg9PltoLmdldFBsdWdpbigiZm9y'@;
put 'bXVsYXMiKS5zaGVldElkLGhdKSl9ZnVuY3Rpb24gRDVlKGMsbCl7aWYoYyl7Y29uc3QgYT1YRigpLGQ9YS5nZXQoYyksaD1fUSgpLGY9aC5nZXQoYyk7ZCYmZC5pbmNsdWRlcyhsKSYmKGQuc3BsaWNlKGQuaW5kZXhPZihsKSwxKSwwPT09ZC5sZW5ndGgmJmEuZGVsZXRlKGMpKSxmJiZmLmlu'@;
put 'Y2x1ZGVzKGwuZ3VpZCkmJihmLnNwbGljZShmLmluZGV4T2YobC5ndWlkKSwxKSwwPT09Zi5sZW5ndGgmJihoLmRlbGV0ZShjKSxjLmRlc3Ryb3koKSkpfX1jb25zdCBJNWU9IkREL01NL1lZWVkiO2Z1bmN0aW9uIHdRKGMsbCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiYiZGF0ZSI9PT1s'@;
put 'fWZ1bmN0aW9uIFI1ZShjLGwpe3JldHVybiBPYShjLGwsITApLmlzVmFsaWQoKX1mdW5jdGlvbiBMNWUoYyxsKXtyZXR1cm4gT2EoYyxsLCEwKS5mb3JtYXQoSTVlKX1mdW5jdGlvbiBtaHQoYyxsKXtyZXR1cm4gT2EoYyxJNWUsITApLmZvcm1hdChsKX1mdW5jdGlvbiBPNWUoYyxsKXtjb25z'@;
put 'dCBkPW5ldyBEYXRlKERhdGUuVVRDKDAsMCxjKy0xKSk7cmV0dXJuIE9hKGQpLmZvcm1hdChsKX1mdW5jdGlvbiBDUShjLGwsYSl7Y29uc3QgZD1mdW5jdGlvbiBiaHQoYyxsKXtjb25zdCBhPVtdO3JldHVybiBjLmZvckVhY2goZD0+e2NvbnN0IGg9e2Zyb206ZCx0bzpsfTthLmZvckVhY2go'@;
put 'Zj0+e2YuZnJvbT5oLmZyb20mJmYudG88PWguZnJvbSYmZi5mcm9tPmYudG8mJihoLmZyb20rPTEpfSksaC5mcm9tPj1sJiYobCs9MSksYS5wdXNoKGgpfSksYX0oYyxmdW5jdGlvbiB2aHQoYyxsLGEpe2NvbnN0IGQ9QXJyYXkuZnJvbShBcnJheShhKS5rZXlzKCkpLmZpbHRlcihmPT4hMT09'@;
put 'PWMuaW5jbHVkZXMoZikpO3ZhciBoO3JldHVybiAwPT09bD9udWxsIT09KGg9ZFtsXSkmJnZvaWQgMCE9PWg/aDowOmRbbC0xXSsxfShjLGwsYSkpO3JldHVybiBmdW5jdGlvbiB5aHQoYyl7cmV0dXJuIGMuZm9yRWFjaCgobCxhKT0+e2Muc2xpY2UoYSsxKS5mb3JFYWNoKGg9PntoLmZyb20+'@;
put 'bC5mcm9tJiZoLmZyb208aC50byYmKGguZnJvbS09MSl9KX0pLGN9KGQpfWZ1bmN0aW9uIFM5KGMsbCxhKXsoZnVuY3Rpb24gX2h0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBv'@;
put 'biBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBDYyhjLGwpe3JldHVybiBjLmdldChQNWUoYyxsKSl9ZnVuY3Rpb24gczYoYyxsLGEpe3JldHVybiBjLnNldChQNWUoYyxsKSxhKSxhfWZ1bmN0aW9uIFA1ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09'@;
put 'PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIHRBPW5ldyBXZWFrTWFwLGw2PW5ldyBXZWFrTWFwLFZoPW5ldyBXZWFrTWFwLEpGPW5l'@;
put 'dyBXZWFrTWFwLFNRPW5ldyBXZWFrTWFwLE1RPW5ldyBXZWFrTWFwLFFGPW5ldyBXZWFrTWFwO2NvbnN0IEY1ZT1jbGFzcyB3aHR7Y29uc3RydWN0b3IobCxhLGQpe1M5KHRoaXMsdEEsdm9pZCAwKSxTOSh0aGlzLGw2LHZvaWQgMCksUzkodGhpcyxWaCx2b2lkIDApLFM5KHRoaXMsSkYsW10p'@;
put 'LFM5KHRoaXMsU1EsW10pLFM5KHRoaXMsTVEsdm9pZCAwKSxTOSh0aGlzLFFGLFtdKSxzNih0QSx0aGlzLGwpLHM2KGw2LHRoaXMsYSksczYoVmgsdGhpcyxkKX1zZXRSZW1vdmVkSGZJbmRleGVzKGwpe3JldHVybiBzNihRRix0aGlzLGwubWFwKGE9Pntjb25zdCBkPUNjKGw2LHRoaXMpLmdl'@;
put 'dFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGEpO3JldHVybiB0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCl9KSksQ2MoUUYsdGhpcyl9Z2V0UmVtb3ZlZEhmSW5kZXhlcygpe3JldHVybiBDYyhRRix0aGlzKX1nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpe2NvbnN0IGE9Q2Mo'@;
put 'bDYsdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCksZD1DYyhsNix0aGlzKS5nZXROb3RUcmltbWVkSW5kZXhlcygpO3JldHVybiBhLmluZGV4T2YoZFtsXSxsKX1zeW5jTW92ZXMobCl7Y29uc3QgZD1gbW92ZSR7cDEoQ2ModEEsdGhpcykpfXNgO0NjKFZoLHRoaXMpLmdldEVuZ2luZSgpLmJh'@;
put 'dGNoKCgpPT57bC5mb3JFYWNoKGg9PntoLmZyb20hPT1oLnRvJiZoLmZyb20rMSE9PWgudG8mJkNjKFZoLHRoaXMpLmdldEVuZ2luZSgpW2RdKENjKFZoLHRoaXMpLmdldFNoZWV0SWQoKSxoLmZyb20sMSxoLnRvKX0pfSl9c3RvcmVNb3Zlc0luZm9ybWF0aW9uKGwsYSxkKXshMSE9PWQmJihz'@;
put 'NihTUSx0aGlzLGwubWFwKGg9PnRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSkpLHM2KE1RLHRoaXMsdGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpKSl9Y2FsY3VsYXRlQW5kU3luY01vdmVzKGwsYSl7aWYoQ2MoVmgsdGhpcykuaXNQZXJmb3JtaW5nVW5kb1JlZG8o'@;
put 'KXx8ITE9PT1sfHwhMT09PWEpcmV0dXJuO2NvbnN0IGQ9Q1EoQ2MoU1EsdGhpcyksQ2MoTVEsdGhpcyksQ2MobDYsdGhpcykuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpO251bGw9PT1DYyhWaCx0aGlzKS5nZXRTaGVldElkKCk/Q2MoVmgsdGhpcykuZ2V0UG9zdHBvbmVBY3Rpb24oKCk9PnRoaXMu'@;
put 'c3luY01vdmVzKGQpKTp0aGlzLnN5bmNNb3ZlcyhkKX1nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpe2NvbnN0IGw9YHNldCR7cDEoQ2ModEEsdGhpcykpfU9yZGVyYDtyZXR1cm4gYT0+e2lmKENjKFZoLHRoaXMpLmlzUGVyZm9ybWluZ1VuZG9SZWRvKCkpcmV0dXJuO2NvbnN0IGQ9Q2Mo'@;
put 'bDYsdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7aWYoInVwZGF0ZSI9PT1hJiZkLmxlbmd0aD4wKXtjb25zdCBoPUNjKEpGLHRoaXMpLm1hcChEPT5kLmluZGV4T2YoRCkpLGY9Q2MoVmgsdGhpcykuZ2V0RW5naW5lKCkuZ2V0U2hlZXREaW1lbnNpb25zKENjKFZoLHRoaXMpLmdldFNoZWV0'@;
put 'SWQoKSk7bGV0IHY7dj0icm93Ij09PUNjKHRBLHRoaXMpP2YuaGVpZ2h0OmYud2lkdGg7Zm9yKGxldCBEPWgubGVuZ3RoO0Q8djtEKz0xKWgucHVzaChEKTtDYyhWaCx0aGlzKS5nZXRFbmdpbmUoKVtsXShDYyhWaCx0aGlzKS5nZXRTaGVldElkKCksaCl9czYoSkYsdGhpcyxkKX19aW5pdCgp'@;
put 'e3M2KEpGLHRoaXMsQ2MobDYsdGhpcykuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfX07ZnVuY3Rpb24gTTkoYyxsLGEpeyhmdW5jdGlvbiBDaHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3'@;
put 'aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEhnKGMsbCl7cmV0dXJuIGMuZ2V0KEg1ZShjLGwpKX1mdW5jdGlvbiB4OShjLGwsYSl7cmV0dXJuIGMuc2V0KEg1ZShjLGwpLGEpLGF9ZnVuY3Rpb24gSDVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZUg9bmV3IFdlYWtNYXAsdEg9bmV3IFdlYWtNYXAseFE9bmV3IFdlYWtNYXAs'@;
put 'RVE9bmV3IFdlYWtNYXAsVFE9bmV3IFdlYWtNYXAsQVE9bmV3IFdlYWtNYXAsa1E9bmV3IFdlYWtNYXA7Y29uc3QgTWh0PWNsYXNzIFNodHtjb25zdHJ1Y3RvcihsLGEsZCl7TTkodGhpcyxlSCx2b2lkIDApLE05KHRoaXMsdEgsdm9pZCAwKSxNOSh0aGlzLHhRLHZvaWQgMCksTTkodGhpcyxF'@;
put 'USwhMSksTTkodGhpcyxUUSwhMSksTTkodGhpcyxBUSxudWxsKSxNOSh0aGlzLGtRLG51bGwpLHg5KGVILHRoaXMsbmV3IEY1ZSgicm93IixsLHRoaXMpKSx4OSh0SCx0aGlzLG5ldyBGNWUoImNvbHVtbiIsYSx0aGlzKSkseDkoeFEsdGhpcyxkKX1nZXRGb3JBeGlzKGwpe3JldHVybiBIZygi'@;
put 'cm93Ij09PWw/ZUg6dEgsdGhpcyl9c2V0UGVyZm9ybVVuZG8obCl7eDkoRVEsdGhpcyxsKX1zZXRQZXJmb3JtUmVkbyhsKXt4OShUUSx0aGlzLGwpfWlzUGVyZm9ybWluZ1VuZG9SZWRvKCl7cmV0dXJuIEhnKEVRLHRoaXMpfHxIZyhUUSx0aGlzKX1nZXRTaGVldElkKCl7cmV0dXJuIEhnKGtR'@;
put 'LHRoaXMpfWdldEVuZ2luZSgpe3JldHVybiBIZyhBUSx0aGlzKX1nZXRQb3N0cG9uZUFjdGlvbigpe3JldHVybiBIZyh4USx0aGlzKX1zZXR1cFN5bmNFbmRwb2ludChsLGEpe3g5KEFRLHRoaXMsbCkseDkoa1EsdGhpcyxhKSxIZyhlSCx0aGlzKS5pbml0KCksSGcodEgsdGhpcykuaW5pdCgp'@;
put 'fX07ZnVuY3Rpb24gRTkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEVodChjKXt2YXIgbD1mdW5jdGlvbiBUaHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxs'@;
put 'fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3Jl'@;
put 'dHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIERRKGMsbCxhKXtONWUoYyxsKSxsLnNldChjLGEp'@;
put 'fWZ1bmN0aW9uIE41ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYzYoYyxsLGEpe3JldHVybiBjLnNldChqcyhjLGwpLGEpLGF9ZnVu'@;
put 'Y3Rpb24gVDkoYyxsKXtyZXR1cm4gYy5nZXQoanMoYyxsKSl9ZnVuY3Rpb24ganMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBu'@;
put 'b3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IHcxPSJmb3JtdWxhcyIsQWh0PVsibWF4Um93cyIsIm1heENvbHVtbnMiLCJsYW5ndWFnZSJdO01vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIiksTW8uZ2V0U2luZ2xldG9uKCkucmVn'@;
put 'aXN0ZXIoImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0QWRkZWQiKSxNby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldFJlbW92ZWQiKSxNby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJT'@;
put 'aGVldFJlbmFtZWQiKSxNby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIpO2NvbnN0IGx3PWM9PiJVbmRvUmVkby51bmRvIj09PWN8fCJVbmRvUmVkby5yZWRvIj09PWN8fCJhdXRvIj09PWM7dmFyIE5nPW5ldyBXZWFrTWFwLG5IPW5ldyBXZWFr'@;
put 'TWFwLG5BPW5ldyBXZWFrTWFwLCRzPW5ldyBXZWFrU2V0O2NsYXNzIERodCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7dmFyIGw7c3VwZXIoLi4uYXJndW1lbnRzKSxsPXRoaXMsZnVuY3Rpb24geGh0KGMsbCl7TjVlKGMsbCksbC5hZGQoYyl9KHRoaXMsJHMpLERRKHRoaXMsTmcsITEpLERR'@;
put 'KHRoaXMsbkgsITEpLERRKHRoaXMsbkEsW1sidmFsdWVzVXBkYXRlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ganMoJHMsbCxZaHQpLmNhbGwobCwuLi5kKX1dLFsibmFt'@;
put 'ZWRFeHByZXNzaW9uQWRkZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGpzKCRzLGwsR2h0KS5jYWxsKGwsLi4uZCl9XSxbIm5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLGZ1'@;
put 'bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGpzKCRzLGwsJGh0KS5jYWxsKGwsLi4uZCl9XSxbInNoZWV0QWRkZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5n'@;
put 'dGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGpzKCRzLGwsS2h0KS5jYWxsKGwsLi4uZCl9XSxbInNoZWV0UmVuYW1lZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylk'@;
put 'W2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ganMoJHMsbCxxaHQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRSZW1vdmVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBqcygkcyxs'@;
put 'LFhodCkuY2FsbChsLC4uLmQpfV1dKSxFOSh0aGlzLCJzdGF0aWNSZWdpc3RlciIscjMoImZvcm11bGFzIikpLEU5KHRoaXMsImVuZ2luZSIsbnVsbCksRTkodGhpcywic2hlZXRJZCIsbnVsbCksRTkodGhpcywic2hlZXROYW1lIixudWxsKSxFOSh0aGlzLCJpbmRleFN5bmNlciIsbnVsbCks'@;
put 'RTkodGhpcywicm93QXhpc1N5bmNlciIsbnVsbCksRTkodGhpcywiY29sdW1uQXhpc1N5bmNlciIsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHcxfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI2MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3Jl'@;
put 'dHVyblt3MSwuLi5BaHRdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt3MV19ZW5hYmxlUGx1Z2luKCl7dmFyIGwsYT10aGlzO2lmKCF0aGlzLmVuYWJsZWQpe2lmKHRoaXMuZW5naW5lPW51bGwhPT0obD1mdW5jdGlvbiBzaHQoYyl7Y29uc3QgbD1jLmdldFNl'@;
put 'dHRpbmdzKCksYT1sW3cxXSxkPWE/LmVuZ2luZTtpZighMD09PWF8fHljKGQpKXJldHVybiBudWxsO3ZhciBoO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBkLmh5cGVyZm9ybXVsYXx8ImZ1bmN0aW9uIj09dHlwZW9mIGQpcmV0dXJuIGZ1bmN0aW9uIGxodChjLGwsYSl7Y29uc3QgZD1sW3cxXSxo'@;
put 'PWZ1bmN0aW9uIGlodChjKXt2YXIgbDtjb25zdCBhPWNbdzFdLGQ9QTVlKG51bGwhPWEmJm51bGwhPT0obD1hLmVuZ2luZSkmJnZvaWQgMCE9PWwmJmwuaHlwZXJmb3JtdWxhP2EuZW5naW5lOnt9KSxoPVQ1ZShjKTtyZXR1cm57Li4ueVEsLi4uZCwuLi5ofX0obCksZj1YRigpLHY9X1EoKTso'@;
put 'ZnVuY3Rpb24gY2h0KGMsbCl7bCYmbC5mb3JFYWNoKGE9Pntjb25zdHtuYW1lOmQscGx1Z2luOmgsdHJhbnNsYXRpb25zOmZ9PWE7dHJ5e2MucmVnaXN0ZXJGdW5jdGlvbihkLGgsZil9Y2F0Y2godil7aWwodi5tZXNzYWdlKX19KX0pKGMsZC5mdW5jdGlvbnMpLGZ1bmN0aW9uIHVodChjLGwp'@;
put 'e2lmKGwpe2NvbnN0e2xhbmdDb2RlOmF9PWw7dHJ5e2MucmVnaXN0ZXJMYW5ndWFnZShhLGwpfWNhdGNoKGQpe2lsKGQubWVzc2FnZSl9fX0oYyxkLmxhbmd1YWdlKTtjb25zdCBNPWMuYnVpbGRFbXB0eShoKTtyZXR1cm4gZi5zZXQoTSxbYV0pLHYuc2V0KE0sW2EuZ3VpZF0pLGZ1bmN0aW9u'@;
put 'IGRodChjLGwpe2wmJihjLnN1c3BlbmRFdmFsdWF0aW9uKCksbC5mb3JFYWNoKGE9Pntjb25zdHtuYW1lOmQsZXhwcmVzc2lvbjpoLHNjb3BlOmYsb3B0aW9uczp2fT1hO3RyeXtjLmFkZE5hbWVkRXhwcmVzc2lvbihkLGgsZix2KX1jYXRjaChNKXtpbChNLm1lc3NhZ2UpfX0pLGMucmVzdW1l'@;
put 'RXZhbHVhdGlvbigpKX0oTSxkLm5hbWVkRXhwcmVzc2lvbnMpLE0ub24oInNoZWV0QWRkZWQiLCgpPT57TS5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKX0pLE0ub24oInNoZWV0UmVtb3ZlZCIsKCk9PntNLnJlYnVpbGRBbmRSZWNhbGN1bGF0ZSgpfSksTX0obnVsbCE9PShoPWQuaHlwZXJmb3Jt'@;
put 'dWxhKSYmdm9pZCAwIT09aD9oOmQsbCxjKTtpZigib2JqZWN0Ij09dHlwZW9mIGQmJnljKGQuaHlwZXJmb3JtdWxhKSl7Y29uc3QgZj1YRigpLHY9X1EoKS5nZXQoZCk7cmV0dXJuIGYuaGFzKGQpfHxmLnNldChkLFtdKSxmLmdldChkKS5wdXNoKGMpLHYmJnYucHVzaChjLmd1aWQpLGQuZ2V0'@;
put 'Q29uZmlnKCkubGljZW5zZUtleXx8ZC51cGRhdGVDb25maWcoe2xpY2Vuc2VLZXk6RTVlfSksKGQuZ2V0Q29uZmlnKCkubGVhcFllYXIxOTAwIT09eVEubGVhcFllYXIxOTAwfHwhMT09PUhPKGQuZ2V0Q29uZmlnKCkubnVsbERhdGUseVEubnVsbERhdGUpKSYmaWwoZ2xgSWYgeW91IHVzZSBI'@;
put 'eXBlckZvcm11bGEgd2l0aCBIYW5kc29udGFibGUsIGtlZXAgdGhlIGRlZmF1bHQgXGBsZWFwWWVhcjE5MDBcYCBhbmQgXGBudWxsRGF0ZVxgIAogICAgICBzZXR0aW5ncy4gT3RoZXJ3aXNlLCBIeXBlckZvcm11bGEncyBkYXRlcyBtYXkgbm90IHN5bmMgY29ycmVjdGx5IHdpdGggSGFuZHNv'@;
put 'bnRhYmxlJ3MgZGF0ZXMuYCksZH1yZXR1cm4gbnVsbH0odGhpcy5ob3QpKSYmdm9pZCAwIT09bD9sOnRoaXMuZW5naW5lLCF0aGlzLmVuZ2luZSlyZXR1cm4gdm9pZCBpbCgiTWlzc2luZyB0aGUgcmVxdWlyZWQgYGVuZ2luZWAga2V5IGluIHRoZSBGb3JtdWxhcyBzZXR0aW5ncy4gUGxlYXNl'@;
put 'IGZpbGwgaXQgd2l0aCBlaXRoZXIgYW4gZW5naW5lIGNsYXNzIG9yIGFuIGVuZ2luZSBpbnN0YW5jZS4iKTtpZihudWxsIT09dGhpcy5zaGVldE5hbWUmJiF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpe2NvbnN0IGQ9dGhpcy5hZGRTaGVldCh0aGlzLnNoZWV0'@;
put 'TmFtZSx0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKSk7ITEhPT1kJiZqcygkcyx0aGlzLHJBKS5jYWxsKHRoaXMsZCl9dGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2Yr'@;
put 'KyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoJHMsYSxWNWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tm'@;
put 'XTtyZXR1cm4ganMoJHMsYSxCNWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVXBkYXRlRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoJHMs'@;
put 'YSxWNWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLEI1ZSkuY2FsbChhLC4u'@;
put 'LmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLE9odCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJt'@;
put 'b2RpZnlTb3VyY2VEYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLFBodCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWYWxpZGF0ZSIs'@;
put 'ZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoJHMsYSxJaHQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixmdW5jdGlv'@;
put 'bigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLEZodCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdENlbGwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBk'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKCRzLGEsajVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRz'@;
put 'Lmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoJHMsYSxqNWUpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFy'@;
put 'cmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLEhodCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtm'@;
put 'KyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKCRzLGEsTmh0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRz'@;
put 'W2ZdO3JldHVybiBqcygkcyxhLGpodCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoJHMs'@;
put 'YSx6aHQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLFZodCkuY2FsbChhLC4u'@;
put 'LmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGpzKCRzLGEsQmh0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhv'@;
put 'b2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBqcygkcyxhLFVodCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNv'@;
put 'bCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoJHMsYSxaaHQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuaW5kZXhTeW5jZXI9bmV3IE1odCh0aGlzLmhvdC5yb3dJbmRleE1h'@;
put 'cHBlcix0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixkPT57dGhpcy5ob3QuYWRkSG9va09uY2UoImluaXQiLCgpPT57ZCgpfSl9KSx0aGlzLnJvd0F4aXNTeW5jZXI9dGhpcy5pbmRleFN5bmNlci5nZXRGb3JBeGlzKCJyb3ciKSx0aGlzLmNvbHVtbkF4aXNTeW5jZXI9dGhpcy5pbmRleFN5'@;
put 'bmNlci5nZXRGb3JBeGlzKCJjb2x1bW4iKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIix0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsdGhp'@;
put 'cy5jb2x1bW5BeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZVJvd01vdmUiLChkLGgsZix2KT0+e3RoaXMucm93QXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oZCxoLHYpfSksdGhpcy5ob3QuYWRkSG9vaygiYmVm'@;
put 'b3JlQ29sdW1uTW92ZSIsKGQsaCxmLHYpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihkLGgsdil9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclJvd01vdmUiLChkLGgsZix2LE0pPT57dGhpcy5yb3dBeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3Zl'@;
put 'cyh2LE0pfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5Nb3ZlIiwoZCxoLGYsdixNKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXModixNKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtbkZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVt'@;
put 'bkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtkXSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5'@;
put 'bmNNb3ZlcyhoLGgpfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xLGgpfSksdGhpcy5o'@;
put 'b3QuYWRkSG9vaygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKGgsaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ2VsbE1ldGFSZXNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxo'@;
put 'PW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4ganMoJHMsYSxMaHQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1VbmRvKCEwKSx0aGlzLmVuZ2luZS51bmRvKCl9'@;
put 'KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVkbyghMCksdGhpcy5lbmdpbmUucmVkbygpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMSl9KSx0aGlzLmFk'@;
put 'ZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFy'@;
put 'Z3VtZW50c1tmXTtyZXR1cm4ganMoJHMsYSxXaHQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQXV0b2ZpbGwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJu'@;
put 'IGpzKCRzLGEsUmh0KS5jYWxsKGEsLi4uaCl9KSxUOShuQSx0aGlzKS5mb3JFYWNoKGQ9PntsZXRbaCxmXT1kO3JldHVybiB0aGlzLmVuZ2luZS5vbihoLGYpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9fWRpc2FibGVQbHVnaW4oKXtUOShuQSx0aGlzKS5mb3JFYWNoKGw9PntsZXRbYSxkXT1s'@;
put 'O3JldHVybiB0aGlzLmVuZ2luZS5vZmYoYSxkKX0pLEQ1ZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKGwpe2NvbnN0IGE9ZnVuY3Rpb24gb2h0KGMpe3ZhciBsO2NvbnN0IGE9Y1t3MV07cmV0dXJuey4u'@;
put 'LkE1ZShudWxsIT1hJiZudWxsIT09KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksLi4uVDVlKGMpfX0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSk7KGZ1bmN0aW9uIGFodChjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5zb21lKGE9PnZvaWQg'@;
put 'MCE9PWxbYV0mJmxbYV0hPT1jW2FdKX0pKHRoaXMuZW5naW5lLmdldENvbmZpZygpLGEpJiZ0aGlzLmVuZ2luZS51cGRhdGVDb25maWcoYSk7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3cxXTtpZihGbyhkKSYmRm8oZC5zaGVldE5hbWUpJiZkLnNoZWV0TmFtZSE9PXRoaXMuc2hl'@;
put 'ZXROYW1lJiZ0aGlzLnN3aXRjaFNoZWV0KGQuc2hlZXROYW1lKSwhbC5kYXRhJiZudWxsPT09dGhpcy5zaGVldE5hbWUpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt3MV0uc2hlZXROYW1lO2lmKGgmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGgpKXRoaXMuc3dpdGNoU2hl'@;
put 'ZXQodGhpcy5zaGVldE5hbWUpO2Vsc2V7Y29uc3QgZj10aGlzLmFkZFNoZWV0KGg/P3ZvaWQgMCx0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKSk7anMoJHMsdGhpcyxyQSkuY2FsbCh0aGlzLGYpfX1zdXBlci51cGRhdGVQbHVnaW4obCl9ZGVzdHJveSgpe1Q5KG5BLHRoaXMpLmZvckVh'@;
put 'Y2gobD0+e3ZhciBhO2xldFtkLGhdPWw7cmV0dXJuIG51bGw9PT0oYT10aGlzLmVuZ2luZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEub2ZmKGQsaCl9KSxjNihuQSx0aGlzLG51bGwpLEQ1ZSh0aGlzLmVuZ2luZSx0aGlzLmhvdCksdGhpcy5lbmdpbmU9bnVsbCxzdXBlci5kZXN0cm95KCl9YWRk'@;
put 'U2hlZXQobCxhKXtpZihGbyhhKSYmIWIzZShhKSlyZXR1cm4gaWwoIlRoZSBwcm92aWRlZCBkYXRhIHNob3VsZCBiZSBhbiBhcnJheSBvZiBhcnJheXMuIiksITE7aWYobnVsbCE9bCYmdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QobCkpcmV0dXJuIGlsKCJTaGVldCB3aXRoIHRoZSBwcm92'@;
put 'aWRlZCBuYW1lIGFscmVhZHkgZXhpc3RzLiIpLCExO3RyeXtjb25zdCBkPXRoaXMuZW5naW5lLmFkZFNoZWV0KGw/P3ZvaWQgMCk7cmV0dXJuIGEmJnRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLmVuZ2luZS5nZXRTaGVldElkKGQpLGEpLGR9Y2F0Y2goZCl7cmV0dXJuIGlsKGQu'@;
put 'bWVzc2FnZSksITF9fXN3aXRjaFNoZWV0KGwpe2lmKCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChsKSlyZXR1cm4gdm9pZCBPJChgVGhlIHNoZWV0IG5hbWVkIFxgJHtsfVxgIGRvZXMgbm90IGV4aXN0LCBzd2l0Y2ggYWJvcnRlZC5gKTtqcygkcyx0aGlzLHJBKS5jYWxsKHRoaXMsbCk7'@;
put 'Y29uc3QgYT10aGlzLmVuZ2luZS5nZXRTaGVldFNlcmlhbGl6ZWQodGhpcy5zaGVldElkKTthLmxlbmd0aD4wJiZ0aGlzLmhvdC5sb2FkRGF0YShhLGAke3AxKHcxKX0uc3dpdGNoU2hlZXRgKX1nZXRDZWxsVHlwZShsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLnNoZWV0SWQ7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKTtyZXR1cm4gbnVsbCE9PWgmJm51bGwhPT1mP3RoaXMuZW5naW5lLmdldENlbGxUeXBlKHtzaGVldDpkLHJvdzp0'@;
put 'aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSl9KToiRU1QVFkifWlzRm9ybXVsYUNlbGxUeXBlKGwsYSl7cmV0dXJuIHRoaXMuZW5naW5lLmRvZXNDZWxsSGF2'@;
put 'ZUZvcm11bGEoe3NoZWV0OmFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLnNoZWV0SWQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0'@;
put 'SGZJbmRleEZyb21WaXN1YWxJbmRleChhKX0pfXJlbmRlckRlcGVuZGVudFNoZWV0cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9bmV3IFNldDtsLmZvckVhY2goaD0+e3ZhciBmO2NvbnN0IHY9bnVsbD09'@;
put 'aHx8bnVsbD09PShmPWguYWRkcmVzcyl8fHZvaWQgMD09PWY/dm9pZCAwOmYuc2hlZXQ7dm9pZCAwIT09diYmKGQuaGFzKHYpfHxkLmFkZCh2KSl9KSxrNWUodGhpcy5lbmdpbmUpLmZvckVhY2goKGgsZik9Pnt2YXIgdjsoYXx8ZiE9PXRoaXMuc2hlZXRJZCkmJmQuaGFzKGYpJiYoaC5yZW5k'@;
put 'ZXIoKSxudWxsPT09KHY9aC52aWV3KXx8dm9pZCAwPT09dnx8di5hZGp1c3RFbGVtZW50c1NpemUoKSl9KX12YWxpZGF0ZURlcGVuZGVudENlbGxzKGwpe2NvbnN0IGQ9Zj0+e3ZhciB2O2NvbnN0e3JvdzpNLGNvbDpELHNoZWV0Olp9PW51bGwhPT0odj1mPy5hZGRyZXNzKSYmdm9pZCAwIT09'@;
put 'dj92Ont9O3JldHVybiBGbyhaKT9gJHtafToke019eCR7RH1gOiIifSxoPW5ldyBTZXQoKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSkubWFwKGY9PmQoZikpKTtsLmZvckVhY2goZj0+e3ZhciB2LE07Y29uc3R7cm93OkQsY29sOlp9'@;
put 'PW51bGwhPT0odj1mLmFkZHJlc3MpJiZ2b2lkIDAhPT12P3Y6e307aWYoITE9PT1GbyhEKXx8ITE9PT1GbyhaKXx8RD49dGhpcy5ob3QuY291bnRSb3dzKCl8fFo+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybjtjb25zdCBuZT1udWxsPT1mfHxudWxsPT09KE09Zi5hZGRyZXNzKXx8dm9p'@;
put 'ZCAwPT09TT92b2lkIDA6TS5zaGVldCxjZT1kKGYpO2lmKHZvaWQgMCE9PW5lJiYhaC5oYXMoY2UpKXtjb25zdCBiZT1rNWUodGhpcy5lbmdpbmUpLmdldChuZSk7aWYoIWJlKXJldHVybjtiZS52YWxpZGF0ZUNlbGwoYmUuZ2V0RGF0YUF0Q2VsbChELFopLGJlLmdldENlbGxNZXRhKEQsWiks'@;
put 'KCk9Pnt9KX19KX1zeW5jQ2hhbmdlV2l0aEVuZ2luZShsLGEsZCl7Y29uc3QgaD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSxzaGVldDp0aGlz'@;
put 'LnNoZWV0SWR9O2lmKCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhoKSlyZXR1cm4gdm9pZCBpbChgTm90IHBvc3NpYmxlIHRvIHNldCBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShoKX1gKTtjb25zdCBmPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSk7'@;
put 'cmV0dXJuIHdRKGQsZi50eXBlKSYmKFI1ZShkLGYuZGF0ZUZvcm1hdCk/ZD1MNWUoZCxmLmRhdGVGb3JtYXQpOiExPT09ZnVuY3Rpb24gZ2h0KGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmYy5zdGFydHNXaXRoKCI9Iil9KGQpJiYoZD1gJyR7ZH1gKSksdGhpcy5lbmdpbmUuc2V0Q2Vs'@;
put 'bENvbnRlbnRzKGgsZCl9fWZ1bmN0aW9uIHJBKGMpe3RoaXMuc2hlZXROYW1lPWMsdGhpcy5zaGVldElkPXRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpfWZ1bmN0aW9uIElodChjLGwsYSl7Y29uc3QgZD10aGlzLmhvdC5wcm9wVG9Db2woYSk7aWYodGhpcy5pc0Zvcm11'@;
put 'bGFDZWxsVHlwZShsLGQpKXtjb25zdCBoPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZj10aGlzLmhvdC5n'@;
put 'ZXRDZWxsTWV0YShsLGQpO2xldCB2PXRoaXMuZW5naW5lLmdldENlbGxWYWx1ZShoKTtyZXR1cm4iZGF0ZSI9PT1mLnR5cGUmJm0xKHYpJiYodj1PNWUodixmLmRhdGVGb3JtYXQpKSwib2JqZWN0Ij09dHlwZW9mIHYmJm51bGwhPT12P3YudmFsdWU6dn1yZXR1cm4gY31mdW5jdGlvbiBSaHQo'@;
put 'YyxsLGEpe2NvbnN0e3JvdzpkLGNvbDpofT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpmLGNvbDp2fT1sLmdldEJvdHRvbUVuZENvcm5lcigpLHtyb3c6TSxjb2w6RH09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Wixjb2w6bmV9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCksY2U9e3N0'@;
put 'YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhm'@;
put 'SW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHYpLHNoZWV0OnRoaXMuc2hlZXRJZH19LGJlPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KE0pLGNv'@;
put 'bDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChEKSxzaGVldDp0aGlzLnNoZWV0SWR9LGVuZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFopLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRl'@;
put 'eEZyb21WaXN1YWxJbmRleChuZSksc2hlZXQ6dGhpcy5zaGVldElkfX07aWYoITE9PT10aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhiZSkpcmV0dXJuITE7Y29uc3QgRWU9dGhpcy5lbmdpbmUuZ2V0RmlsbFJhbmdlRGF0YShjZSxiZSkse3JvdzpCZSxjb2w6cWV9'@;
put 'PWNlLnN0YXJ0LHtyb3c6cnQsY29sOnB0fT1jZS5lbmQsZHQ9cnQtQmUrMSxKdD1wdC1xZSsxO2ZvcihsZXQgdm49MDt2bjxFZS5sZW5ndGg7dm4rPTEpZm9yKGxldCBDbj0wO0NuPEVlW3ZuXS5sZW5ndGg7Q24rPTEpe2NvbnN0IHRuPUVlW3ZuXVtDbl0sTW49QmUrdm4lZHQsQ3I9cWUrQ24l'@;
put 'SnQsR3I9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoTW4sQ3IpO3dRKHRuLEdyLnR5cGUpJiYodG4uc3RhcnRzV2l0aCgiJyIpP0VlW3ZuXVtDbl09dG4uc2xpY2UoMSk6ITE9PT10aGlzLmlzRm9ybXVsYUNlbGxUeXBlKE1uLENyLHRoaXMuc2hlZXRJZCkmJihFZVt2bl1bQ25dPW1odCh0bixHci5k'@;
put 'YXRlRm9ybWF0KSkpfXJldHVybiBFZX1mdW5jdGlvbiBWNWUoYyxsKXsoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiKS5pbmNsdWRlcyhwMSh3MSkpfHxjNihuSCx0aGlzLHljKHRoaXMuaG90LmdldFNldHRpbmdzKCkuZGF0YSkpfWZ1'@;
put 'bmN0aW9uIExodCgpe2lmKFQ5KG5ILHRoaXMpKXJldHVybiB2b2lkIHRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpO2NvbnN0IGM9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCk7Yy5mb3JFYWNoKChhLGQpPT57YS5mb3JFYWNoKChoLGYpPT57Y29uc3Qgdj10aGlzLmhvdC5n'@;
put 'ZXRDZWxsTWV0YShkLGYse3NraXBNZXRhRXh0ZW5zaW9uOiEwfSksTT12LmRhdGVGb3JtYXQ7d1EoaCx2LnR5cGUpJiYoUjVlKGgsTSk/Y1tkXVtmXT1MNWUoaCxNKTpoLnN0YXJ0c1dpdGgoIj0iKXx8KGNbZF1bZl09YCcke2h9YCkpfSl9KSxjNihOZyx0aGlzLCEwKTtjb25zdCBsPXRoaXMu'@;
put 'ZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0SWQsYyk7dGhpcy5pbmRleFN5bmNlci5zZXR1cFN5bmNFbmRwb2ludCh0aGlzLmVuZ2luZSx0aGlzLnNoZWV0SWQpLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGwpLGM2KE5nLHRoaXMsITEpfWZ1bmN0aW9uIEI1ZShjLGwpe2xl'@;
put 'dCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIjtpZihhLmluY2x1ZGVzKHAxKHcxKSkpcmV0dXJuO2NvbnN0IGQ9ZnVuY3Rpb24gaGh0KGMsbCl7cmV0dXJuKHljKGwpfHwhYy5kb2VzU2hlZXRFeGlzdChsKSkmJihsPWMuYWRkU2hl'@;
put 'ZXQobCkpLGx9KHRoaXMuZW5naW5lLHRoaXMuaG90LmdldFNldHRpbmdzKClbdzFdLnNoZWV0TmFtZSk7aWYoanMoJHMsdGhpcyxyQSkuY2FsbCh0aGlzLGQpLCJ1cGRhdGVTZXR0aW5ncyIhPT1hKWlmKFQ5KG5ILHRoaXMpKXRoaXMuc3dpdGNoU2hlZXQodGhpcy5zaGVldE5hbWUpO2Vsc2V7'@;
put 'Y29uc3QgaD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKTtpZih0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlcGxhY2VTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGgpKXtjNihOZyx0aGlzLCEwKTtjb25zdCBmPXRoaXMuZW5naW5lLnNldFNoZWV0Q29udGVudCh0aGlzLnNoZWV0'@;
put 'SWQsaCk7dGhpcy5pbmRleFN5bmNlci5zZXR1cFN5bmNFbmRwb2ludCh0aGlzLmVuZ2luZSx0aGlzLnNoZWV0SWQpLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGYpLGM2KE5nLHRoaXMsITEpfX19ZnVuY3Rpb24gT2h0KGMsbCxhLGQpe2lmKCJnZXQiIT09ZHx8VDkoTmcsdGhpcyl8fG51'@;
put 'bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdC50b1Zpc3VhbFJvdyhjKTtpZihudWxsPT09aHx8bnVsbD09PWwpcmV0dXJuO2NvbnN0IGY9dGhpcy5nZXRDZWxsVHlwZShoLGwpO2lm'@;
put 'KCJWQUxVRSI9PT1mfHwiRU1QVFkiPT09ZilyZXR1cm4gdm9pZChhLnZhbHVlPWZ1bmN0aW9uIHBodChjKXtyZXR1cm4gZnVuY3Rpb24gZmh0KGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmIiciPT09Yy5jaGFyQXQoMCkmJiI9Ij09PWMuY2hhckF0KDEpfShjKT9jLnN1YnN0cigxKTpj'@;
put 'fShhLnZhbHVlKSk7Y29uc3Qgdj17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxzaGVldDp0aGlzLnNoZWV0SWR9O2xldCBNPXRoaXMuZW5naW5l'@;
put 'LmdldENlbGxWYWx1ZSh2KTtjb25zdCBEPXRoaXMuaG90LmdldENlbGxNZXRhKGgsbCx7c2tpcE1ldGFFeHRlbnNpb246ITB9KTsiZGF0ZSI9PT1ELnR5cGUmJm0xKE0pJiYoTT1PNWUoTSxELmRhdGVGb3JtYXQpKSxhLnZhbHVlPSJvYmplY3QiPT10eXBlb2YgTSYmbnVsbCE9PU0/TS52YWx1'@;
put 'ZTpNfWZ1bmN0aW9uIFBodChjLGwsYSxkKXtpZigiZ2V0IiE9PWR8fFQ5KE5nLHRoaXMpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QudG9WaXN1YWxSb3coYyksZj10aGlz'@;
put 'LmhvdC5wcm9wVG9Db2wobCk7aWYobnVsbD09PWh8fG51bGw9PT1mKXJldHVybjtjb25zdCB2PXRoaXMuZ2V0Q2VsbFR5cGUoaCxmKTtpZigiVkFMVUUiPT09dnx8IkVNUFRZIj09PXYpcmV0dXJuO2NvbnN0IE09dGhpcy5lbmdpbmUuZ2V0U2hlZXREaW1lbnNpb25zKHRoaXMuZW5naW5lLmdl'@;
put 'dFNoZWV0SWQodGhpcy5zaGVldE5hbWUpKTtpZigwPT09TS53aWR0aCYmMD09PU0uaGVpZ2h0KXJldHVybjtjb25zdCBEPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZp'@;
put 'c3VhbEluZGV4KGYpLHNoZWV0OnRoaXMuc2hlZXRJZH07YS52YWx1ZT10aGlzLmVuZ2luZS5nZXRDZWxsU2VyaWFsaXplZChEKX1mdW5jdGlvbiBqNWUoYyxsKXtpZihsdyhsKSlyZXR1cm47Y29uc3QgYT1bXSxkPVtdLGg9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntjLmZvckVhY2goZj0+e2xl'@;
put 'dFt2LE0sLERdPWY7Y29uc3QgWj10aGlzLmhvdC5wcm9wVG9Db2woTSksbmU9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSxjZT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKFopLGJlPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodiksY29sOnRo'@;
put 'aXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFopLHNoZWV0OnRoaXMuc2hlZXRJZH07bnVsbCE9PW5lJiZudWxsIT09Y2U/dGhpcy5zeW5jQ2hhbmdlV2l0aEVuZ2luZSh2LFosRCk6YS5wdXNoKFt2LFosRF0pLGQucHVzaCh7YWRkcmVzczpiZX0pfSl9KTth'@;
put 'Lmxlbmd0aCYmdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIiwoKT0+e2NvbnN0IGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PnthLmZvckVhY2godj0+e2xldFtNLEQsWl09djt0aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKE0sRCxaKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRT'@;
put 'aGVldHMoZiwhMCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhoKSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMoaCxkKX1mdW5jdGlvbiBGaHQoYyxsKXtpZihsdyhsKSlyZXR1cm47Y29uc3QgYT1bXSxkPVtdO2MuZm9yRWFjaChoPT57bGV0W2YsdiwsTV09aDtjb25zdCBEPXRo'@;
put 'aXMuaG90LnByb3BUb0NvbCh2KTtpZighbTEoRCkpcmV0dXJuO2NvbnN0IFo9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoRCksc2hlZXQ6dGhpcy5z'@;
put 'aGVldElkfTt0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhaKT8oZC5wdXNoKHthZGRyZXNzOlp9KSxhLnB1c2goLi4udGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKFosTSkpKTppbChgTm90IHBvc3NpYmxlIHRvIHNldCBzb3VyY2UgY2VsbCBkYXRhIGF0ICR7'@;
put 'SlNPTi5zdHJpbmdpZnkoWil9YCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhhKSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMoYSxkKX1mdW5jdGlvbiBIaHQoYyxsKXtsZXQgYT10aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKTtpZihjPj10'@;
put 'aGlzLmhvdC5jb3VudFJvd3MoKSYmKGE9YyksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKXx8IXRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvQWRkUm93cyh0aGlzLnNoZWV0SWQsW2EsbF0pKXJldHVybiExfWZ1bmN0aW9u'@;
put 'IE5odChjLGwpe2xldCBhPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpO2lmKGM+PXRoaXMuaG90LmNvdW50Q29scygpJiYoYT1jKSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUp'@;
put 'fHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbYSxsXSkpcmV0dXJuITF9ZnVuY3Rpb24gVmh0KGMsbCxhKXtyZXR1cm4hMSE9PXRoaXMucm93QXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGEpLmV2ZXJ5KGY9PnRoaXMuZW5naW5lLmlz'@;
put 'SXRQb3NzaWJsZVRvUmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW2YsMV0pKSYmdm9pZCAwfWZ1bmN0aW9uIEJodChjLGwsYSl7cmV0dXJuITEhPT10aGlzLmNvbHVtbkF4aXNTeW5jZXIuc2V0UmVtb3ZlZEhmSW5kZXhlcyhhKS5ldmVyeShmPT50aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1Jl'@;
put 'bW92ZUNvbHVtbnModGhpcy5zaGVldElkLFtmLDFdKSkmJnZvaWQgMH1mdW5jdGlvbiBqaHQoYyxsLGEpe2lmKGx3KGEpKXJldHVybjtjb25zdCBkPXRoaXMuZW5naW5lLmFkZFJvd3ModGhpcy5zaGVldElkLFt0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChj'@;
put 'KSxsXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZCl9ZnVuY3Rpb24gemh0KGMsbCxhKXtpZihsdyhhKSlyZXR1cm47Y29uc3QgZD10aGlzLmVuZ2luZS5hZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgo'@;
put 'YyksbF0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGQpfWZ1bmN0aW9uIFVodChjLGwsYSxkKXtpZihsdyhkKSlyZXR1cm47Y29uc3QgaD10aGlzLnJvd0F4aXNTeW5jZXIuZ2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKHYsTSk9Pk0tdiksZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+'@;
put 'e2guZm9yRWFjaCh2PT57dGhpcy5lbmdpbmUucmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW3YsMV0pfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmKX1mdW5jdGlvbiBaaHQoYyxsLGEsZCl7aWYobHcoZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldFJl'@;
put 'bW92ZWRIZkluZGV4ZXMoKS5zb3J0KCh2LE0pPT5NLXYpLGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntoLmZvckVhY2godj0+e3RoaXMuZW5naW5lLnJlbW92ZUNvbHVtbnModGhpcy5zaGVldElkLFt2LDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZil9ZnVuY3Rpb24gV2h0'@;
put 'KGMsbCxhKXt2YXIgZDtjNihOZyx0aGlzLCEwKTtjb25zdCBoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheShhLDAsYSsoKG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmxlbmd0aCl8fDApLHRoaXMuaG90LmNvdW50U291cmNlQ29scygpKTtjNihOZyx0'@;
put 'aGlzLCExKSxoLmZvckVhY2goKGYsdik9PntmLmZvckVhY2goKE0sRCk9Pnt0aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoe2NvbDpELHJvdzphK3Ysc2hlZXQ6dGhpcy5zaGVldElkfSxbW01dXSl9KX0pfWZ1bmN0aW9uIFlodChjKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJGb3JtdWxh'@;
put 'c1ZhbHVlc1VwZGF0ZSIsYyl9ZnVuY3Rpb24gR2h0KGMsbCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGMsbCl9ZnVuY3Rpb24gJGh0KGMsbCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsYyxsKX1mdW5jdGlv'@;
put 'biBLaHQoYyl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRBZGRlZCIsYyl9ZnVuY3Rpb24gcWh0KGMsbCl7anMoJHMsdGhpcyxyQSkuY2FsbCh0aGlzLGwpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVuYW1lZCIsYyxsKX1mdW5jdGlvbiBYaHQoYyxsKXt0aGlzLmhvdC5y'@;
put 'dW5Ib29rcygiYWZ0ZXJTaGVldFJlbW92ZWQiLGMsbCl9ZnVuY3Rpb24gejVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBBOShjLGwp'@;
put 'e3JldHVybiBjLmdldCh1NihjLGwpKX1mdW5jdGlvbiBVNWUoYyxsLGEpe3JldHVybiBjLnNldCh1NihjLGwpLGEpLGF9ZnVuY3Rpb24gdTYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5l'@;
put 'dyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfU1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVIaWRlQ29sdW1ucyIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhpZGVDb2x1bW5zIiksTW8uZ2V0U2lu'@;
put 'Z2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuaGlkZUNvbHVtbnMiKSxNby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmhpZGVDb2x1bW5zIik7Y29uc3QgWjVlPSJoaWRkZW5Db2x1bW5zIjt2YXIgWnA9bmV3IFdlYWtNYXAsazk9bmV3IFdlYWtTZXQ7Y2xhc3MgcjJ0IGV4dGVu'@;
put 'ZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGUydChjLGwpe3o1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGs5KSxmdW5jdGlvbiB0MnQoYyxsLGEpe3o1ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsWnAsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7'@;
put 'cmV0dXJuIFo1ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue2NvcHlQYXN0ZUVuYWJsZWQ6ITAsaW5kaWNhdG9yczohMSxjb2x1bW5zOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90Lmdl'@;
put 'dFNldHRpbmdzKClbWjVlXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KFU1ZShacCx0aGlzLG5ldyBoUCksQTkoWnAsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dTYoazksdGhpcyxjMnQpLmNhbGwodGhpcykpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFw'@;
put 'cGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxBOShacCx0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1'@;
put 'bWVudHNbaF07cmV0dXJuIHU2KGs5LGwsbDJ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChhLGQsaCk9PnU2KGs5LHRoaXMsbzJ0KS5jYWxsKHRoaXMsYSxkLGgpKSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbFdpZHRoIiwoYSxkKT0+dTYoazksdGhp'@;
put 'cyxpMnQpLmNhbGwodGhpcyxhLGQpLDIpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHU2KGs5LGwsczJ0KS5jYWxs'@;
put 'KGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvcHlhYmxlUmFuZ2UiLGE9PnU2KGs5LHRoaXMsYTJ0KS5jYWxsKHRoaXMsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVw'@;
put 'ZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHRoaXMucmVzZXRDZWxsc01ldGEoKX1zaG93Q29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlk'@;
put 'ZGVuQ29sdW1ucygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj1BOShacCx0aGlzKS5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9bC5sZW5ndGg+MDtkJiZ2JiYoWW4obC5tYXAoWj0+dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihaKSksWj0+e2ZbWl09ITF9KSxoPUt1'@;
put 'KGYsKFosbmUsY2UpPT4obmUmJloucHVzaCh0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihjZSkpLFopLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlQ29sdW1ucyIsYSxoLGQmJnYpJiYoZCYmdiYmQTkoWnAsdGhpcykuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnZpZXcu'@;
put 'YWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlQ29sdW1ucyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX1zaG93Q29sdW1uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1h'@;
put 'cmd1bWVudHNbZF07dGhpcy5zaG93Q29sdW1ucyhhKX1oaWRlQ29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuQ29sdW1ucygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3Qu'@;
put 'cnVuSG9va3MoImJlZm9yZUhpZGVDb2x1bW5zIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKGwsdj0+e0E5KFpwLHRoaXMpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYpLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3Mo'@;
put 'ImFmdGVySGlkZUNvbHVtbnMiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZUNvbHVtbigpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZUNvbHVtbnMoYSl9Z2V0SGlkZGVuQ29s'@;
put 'dW1ucygpe3JldHVybiB5cyhBOShacCx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCkpfWlzSGlkZGVuKGwpe3JldHVybiBBOShacCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl8fCExfWlzVmFs'@;
put 'aWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7WW4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRh'@;
put 'KCksbD0+e2wuc2tpcENvbHVtbk9uUGFzdGU9ITF9KX1kZXN0cm95KCl7VTVlKFpwLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBpMnQoYyxsKXtyZXR1cm4gdGhpcy5pc0hpZGRlbihsKT8wOnRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpJiYodGhpcy5pc0hpZGRl'@;
put 'bihsKzEpfHx0aGlzLmlzSGlkZGVuKGwtMSkpJiYibnVtYmVyIj09dHlwZW9mIGMmJnRoaXMuaG90Lmhhc0NvbEhlYWRlcnMoKT9jKzE1OnZvaWQgMH1mdW5jdGlvbiBvMnQoYyxsLGEpe2lmKCExPT09dGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikmJnRoaXMuaXNIaWRkZW4o'@;
put 'bCkmJihhLnNraXBDb2x1bW5PblBhc3RlPSEwKSx0aGlzLmlzSGlkZGVuKGwtMSkpYS5jbGFzc05hbWU9YS5jbGFzc05hbWV8fCIiLC0xPT09YS5jbGFzc05hbWUuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKSYmKGEuY2xhc3NOYW1lKz0iIGFmdGVySGlkZGVuQ29sdW1uIik7ZWxzZSBp'@;
put 'ZihhLmNsYXNzTmFtZSl7Y29uc3QgZD1hLmNsYXNzTmFtZS5zcGxpdCgiICIpO2lmKGQubGVuZ3RoPjApe2NvbnN0IGg9ZC5pbmRleE9mKCJhZnRlckhpZGRlbkNvbHVtbiIpO2g+LTEmJmQuc3BsaWNlKGgsMSksYS5jbGFzc05hbWU9ZC5qb2luKCIgIil9fX1mdW5jdGlvbiBhMnQoYyl7aWYo'@;
put 'dGhpcy5nZXRTZXR0aW5nKCJjb3B5UGFzdGVFbmFibGVkIikpcmV0dXJuIGM7Y29uc3QgbD1bXSxhPShkLGgsZix2KT0+e2wucHVzaCh7c3RhcnRSb3c6ZCxlbmRSb3c6aCxzdGFydENvbDpmLGVuZENvbDp2fSl9O3JldHVybiBZbihjLGQ9PntsZXQgaD0hMCxmPTA7JG8oZC5zdGFydENvbCxk'@;
put 'LmVuZENvbCx2PT57dGhpcy5pc0hpZGRlbih2KT8oaHx8YShkLnN0YXJ0Um93LGQuZW5kUm93LGYsdi0xKSxoPSEwKTooaCYmKGY9diksdj09PWQuZW5kQ29sJiZhKGQuc3RhcnRSb3csZC5lbmRSb3csZix2KSxoPSExKX0pfSksbH1mdW5jdGlvbiBzMnQoYyxsKXtpZighdGhpcy5nZXRTZXR0'@;
put 'aW5nKCJpbmRpY2F0b3JzIil8fGM8MClyZXR1cm47Y29uc3QgYT1bXTtjPj0xJiZ0aGlzLmlzSGlkZGVuKGMtMSkmJmEucHVzaCgiYWZ0ZXJIaWRkZW5Db2x1bW4iKSxjPHRoaXMuaG90LmNvdW50Q29scygpLTEmJnRoaXMuaXNIaWRkZW4oYysxKSYmYS5wdXNoKCJiZWZvcmVIaWRkZW5Db2x1'@;
put 'bW4iKSxUaShsLGEpfWZ1bmN0aW9uIGwydChjKXtjLml0ZW1zLnB1c2goe25hbWU6b3N9LGZ1bmN0aW9uIEpodChjKXtyZXR1cm57a2V5OiJoaWRkZW5fY29sdW1uc19oaWRlIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO2xldCBhPTA7aWYoQXJyYXkuaXNBcnJheShs'@;
put 'KSl7Y29uc3RbLGQsLGhdPWw7ZC1oIT0wJiYoYT0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEFxLGEpfSxjYWxsYmFjaygpe2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1NYXRoLm1heChNYXRoLm1pbihsLmNvbCxhLmNvbCksMCks'@;
put 'aD1NYXRoLm1heChsLmNvbCxhLmNvbCksZj1bXTtmb3IobGV0IEQ9ZDtEPD1oO0QrPTEpZi5wdXNoKEQpO2MuaGlkZUNvbHVtbnMoZik7Y29uc3QgTT10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmW2YubGVuZ3RoLTFdLDEsITApO051bWJlci5pc0lu'@;
put 'dGVnZXIoTSkmJk0+PTA/dGhpcy5zZWxlY3RDb2x1bW5zKE0pOnRoaXMuZGVzZWxlY3RDZWxsKCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGRpc2FibGVkOiExLGhpZGRlbigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1u'@;
put 'SGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiBRaHQoYyl7Y29uc3QgbD1bXTtyZXR1cm57a2V5OiJoaWRkZW5fY29sdW1uc19zaG93IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShrcSxsLmxlbmd0'@;
put 'aD4xPzE6MCl9LGNhbGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVsbCE9PShhPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxm'@;
put 'PW51bGwhPT0oZD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudENvbHMoKS0xLGMuc2hvd0NvbHVtbnMobCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksZi1o'@;
put 'KzE9PT10aGlzLmNvdW50Q29scygpfHx0aGlzLnNlbGVjdENvbHVtbnMoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgYT15cyhjLmdldEhpZGRlbkNvbHVtbnMoKSxjZT0+dGhpcy50b1BoeXNpY2FsQ29sdW1uKGNlKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNv'@;
put 'bHVtbkhlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5sZW5ndGg9MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsZj1kLmdldEJvdHRvbUVuZENv'@;
put 'cm5lcigpLmNvbCx2PXRoaXMuY29sdW1uSW5kZXhNYXBwZXIsTT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksRD12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZiksWj12LmdldE5vdFRyaW1tZWRJbmRleGVzKCksbmU9W107aWYoaCE9PWYpe2lmKGYtaCsxPkQtTSsx'@;
put 'KXtjb25zdCBFZT1aLnNsaWNlKGgsZisxKTtuZS5wdXNoKC4uLkVlLmZpbHRlcihCZT0+YS5pbmNsdWRlcyhCZSkpKX19ZWxzZSBpZigwPT09TSYmTTxoKW5lLnB1c2goLi4uWi5zbGljZSgwLGgpKTtlbHNlIGlmKG51bGw9PT1NKW5lLnB1c2goLi4uWi5zbGljZSgwLHRoaXMuY291bnRDb2xz'@;
put 'KCkpKTtlbHNle2NvbnN0IGNlPXRoaXMuY291bnRDb2xzKCktMTtEPT09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLC0xKSkmJmNlPmYmJm5lLnB1c2goLi4uWi5zbGljZShmKzEpKX1yZXR1cm4gWW4obmUsY2U9PntsLnB1c2go'@;
put 'dGhpcy50b1Zpc3VhbENvbHVtbihjZSkpfSksMD09PWwubGVuZ3RofX19KHRoaXMpKX1mdW5jdGlvbiBjMnQoKXtjb25zdCBjPXRoaXMuZ2V0U2V0dGluZygiY29sdW1ucyIpO0FycmF5LmlzQXJyYXkoYykmJnRoaXMuaGlkZUNvbHVtbnMoYyl9ZnVuY3Rpb24gVzVlKGMsbCl7aWYobC5oYXMo'@;
put 'YykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBEOShjLGwpe3JldHVybiBjLmdldChkNihjLGwpKX1mdW5jdGlvbiBZNWUoYyxsLGEpe3JldHVybiBjLnNldChkNihj'@;
put 'LGwpLGEpLGF9ZnVuY3Rpb24gZDYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIp'@;
put 'fU1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVIaWRlUm93cyIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhpZGVSb3dzIiksTW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuaGlkZVJvd3MiKSxNby5nZXRTaW5nbGV0b24oKS5yZWdpc3Rlcigi'@;
put 'YWZ0ZXJVbmhpZGVSb3dzIik7Y29uc3QgRzVlPSJoaWRkZW5Sb3dzIjt2YXIgV3A9bmV3IFdlYWtNYXAsSTk9bmV3IFdlYWtTZXQ7Y2xhc3MgZzJ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGgydChjLGwpe1c1ZShjLGwpLGwuYWRkKGMp'@;
put 'fSh0aGlzLEk5KSxmdW5jdGlvbiBmMnQoYyxsLGEpe1c1ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsV3AsbnVsbCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEc1ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMjB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJ'@;
put 'TkdTKCl7cmV0dXJue2NvcHlQYXN0ZUVuYWJsZWQ6ITAsaW5kaWNhdG9yczohMSxyb3dzOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbRzVlXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KFk1ZShXcCx0aGlzLG5ldyBoUCks'@;
put 'RDkoV3AsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+ZDYoSTksdGhpcyx3MnQpLmNhbGwodGhpcykpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxEOShXcCx0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVs'@;
put 'dE9wdGlvbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGQ2KEk5LGwsXzJ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChhLGQs'@;
put 'aCk9PmQ2KEk5LHRoaXMsdjJ0KS5jYWxsKHRoaXMsYSxkLGgpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodCIsKGEsZCk9PmQ2KEk5LHRoaXMsbTJ0KS5jYWxsKHRoaXMsYSxkKSksdGhpcy5hZGRIb29rKCJhZnRlckdldFJvd0hlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJn'@;
put 'dW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZDYoSTksbCx5MnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29weWFibGVSYW5nZSIsYT0+ZDYoSTksdGhpcyxiMnQpLmNhbGwodGhpcyxhKSksc3Vw'@;
put 'ZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lz'@;
put 'dGVyTWFwKHRoaXMucGx1Z2luTmFtZSksdGhpcy5yZXNldENlbGxzTWV0YSgpfXNob3dSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Sb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPUQ5KFdwLHRoaXMpLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxl'@;
put 'bmd0aD4wO2QmJnYmJihZbihsLm1hcChaPT50aGlzLmhvdC50b1BoeXNpY2FsUm93KFopKSxaPT57ZltaXT0hMX0pLGg9S3UoZiwoWixuZSxjZSk9PihuZSYmWi5wdXNoKHRoaXMuaG90LnRvVmlzdWFsUm93KGNlKSksWiksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmhp'@;
put 'ZGVSb3dzIixhLGgsZCYmdikmJihkJiZ2JiZEOShXcCx0aGlzKS5zZXRWYWx1ZXMoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlUm93cyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX1zaG93Um93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJy'@;
put 'YXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy5zaG93Um93cyhhKX1oaWRlUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkp'@;
put 'LCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZGVSb3dzIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKGwsdj0+e0Q5KFdwLHRoaXMpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLCEwKX0pfSwhMCksdGhpcy5ob3Qu'@;
put 'cnVuSG9va3MoImFmdGVySGlkZVJvd3MiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZVJvd3MoYSl9Z2V0SGlkZGVuUm93'@;
put 'cygpe3JldHVybiB5cyhEOShXcCx0aGlzKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5ob3QudG9WaXN1YWxSb3cobCkpfWlzSGlkZGVuKGwpe3JldHVybiBEOShXcCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl8fCExfWlzVmFsaWRDb25maWco'@;
put 'bCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudFJvd3MoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7WW4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCksbD0+e2wu'@;
put 'c2tpcFJvd09uUGFzdGU9ITF9KX1kZXN0cm95KCl7WTVlKFdwLHRoaXMsbnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBtMnQoYyxsKXtyZXR1cm4gdGhpcy5pc0hpZGRlbihsKT8wOmN9ZnVuY3Rpb24gdjJ0KGMsbCxhKXtpZighMT09PXRoaXMuZ2V0U2V0dGluZygiY29weVBhc3Rl'@;
put 'RW5hYmxlZCIpJiZ0aGlzLmlzSGlkZGVuKGMpJiYoYS5za2lwUm93T25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihjLTEpKWEuY2xhc3NOYW1lPWEuY2xhc3NOYW1lfHwiIiwtMT09PWEuY2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVuUm93IikmJihhLmNsYXNzTmFtZSs9IiBhZnRlckhp'@;
put 'ZGRlblJvdyIpO2Vsc2UgaWYoYS5jbGFzc05hbWUpe2NvbnN0IGQ9YS5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihkLmxlbmd0aD4wKXtjb25zdCBoPWQuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Sb3ciKTtoPi0xJiZkLnNwbGljZShoLDEpLGEuY2xhc3NOYW1lPWQuam9pbigiICIpfX19ZnVuY3Rp'@;
put 'b24gYjJ0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpKXJldHVybiBjO2NvbnN0IGw9W10sYT0oZCxoLGYsdik9PntsLnB1c2goe3N0YXJ0Um93OmQsZW5kUm93Omgsc3RhcnRDb2w6ZixlbmRDb2w6dn0pfTtyZXR1cm4gWW4oYyxkPT57bGV0IGg9ITAsZj0wOyRv'@;
put 'KGQuc3RhcnRSb3csZC5lbmRSb3csdj0+e3RoaXMuaXNIaWRkZW4odik/KGh8fGEoZix2LTEsZC5zdGFydENvbCxkLmVuZENvbCksaD0hMCk6KGgmJihmPXYpLHY9PT1kLmVuZFJvdyYmYShmLHYsZC5zdGFydENvbCxkLmVuZENvbCksaD0hMSl9KX0pLGx9ZnVuY3Rpb24geTJ0KGMsbCl7aWYo'@;
put 'IXRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpfHxjPDApcmV0dXJuO2NvbnN0IGE9W107Yz49MSYmdGhpcy5pc0hpZGRlbihjLTEpJiZhLnB1c2goImFmdGVySGlkZGVuUm93IiksYzx0aGlzLmhvdC5jb3VudFJvd3MoKS0xJiZ0aGlzLmlzSGlkZGVuKGMrMSkmJmEucHVzaCgiYmVmb3Jl'@;
put 'SGlkZGVuUm93IiksVGkobCxhKX1mdW5jdGlvbiBfMnQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOm9zfSxmdW5jdGlvbiB1MnQoYyl7cmV0dXJue2tleToiaGlkZGVuX3Jvd3NfaGlkZSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJy'@;
put 'YXkobCkpe2NvbnN0W2QsLGhdPWw7ZC1oIT0wJiYoYT0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKERxLGEpfSxjYWxsYmFjaygpe2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1NYXRoLm1heChNYXRoLm1pbihsLnJvdyxhLnJvdyks'@;
put 'MCksaD1NYXRoLm1heChsLnJvdyxhLnJvdyksZj1bXTtmb3IobGV0IEQ9ZDtEPD1oO0QrPTEpZi5wdXNoKEQpO2MuaGlkZVJvd3MoZik7Y29uc3QgTT10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmW2YubGVuZ3RoLTFdLDEsITApO051bWJlci5pc0ludGVn'@;
put 'ZXIoTSkmJk0+PTA/dGhpcy5zZWxlY3RSb3dzKE0pOnRoaXMuZGVzZWxlY3RDZWxsKCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGRpc2FibGVkOiExLGhpZGRlbigpe3JldHVybiEodGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8'@;
put 'fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpKX19fSh0aGlzKSxmdW5jdGlvbiBkMnQoYyl7Y29uc3QgbD1bXTtyZXR1cm57a2V5OiJoaWRkZW5fcm93c19zaG93IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShJcSxsLmxlbmd0aD4xPzE6MCl9LGNh'@;
put 'bGxiYWNrKCl7dmFyIGEsZDtpZigwPT09bC5sZW5ndGgpcmV0dXJuO2xldCBoPWxbMF0sZj1sW2wubGVuZ3RoLTFdO2g9bnVsbCE9PShhPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgtMSwtMSkpJiZ2b2lkIDAhPT1hP2E6MCxmPW51bGwhPT0oZD10aGlz'@;
put 'LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmKzEsMSkpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5jb3VudFJvd3MoKS0xLGMuc2hvd1Jvd3MobCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCksZi1oKzE9PT10aGlzLmNvdW50Um93cygp'@;
put 'fHx0aGlzLnNlbGVjdFJvd3MoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgYT15cyhjLmdldEhpZGRlblJvd3MoKSxjZT0+dGhpcy50b1BoeXNpY2FsUm93KGNlKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNT'@;
put 'ZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5sZW5ndGg9MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csZj1kLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyx2PXRoaXMucm93SW5kZXhNYXBwZXIs'@;
put 'TT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksRD12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZiksWj12LmdldE5vdFRyaW1tZWRJbmRleGVzKCksbmU9W107aWYoaCE9PWYpe2lmKGYtaCsxPkQtTSsxKXtjb25zdCBFZT1aLnNsaWNlKGgsZisxKTtuZS5wdXNoKC4u'@;
put 'LkVlLmZpbHRlcihCZT0+YS5pbmNsdWRlcyhCZSkpKX19ZWxzZSBpZigwPT09TSYmTTxoKW5lLnB1c2goLi4uWi5zbGljZSgwLGgpKTtlbHNlIGlmKG51bGw9PT1NKW5lLnB1c2goLi4uWi5zbGljZSgwLHRoaXMuY291bnRSb3dzKCkpKTtlbHNle2NvbnN0IGNlPXRoaXMuY291bnRSb3dzKCkt'@;
put 'MTtEPT09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLC0xKSkmJmNlPmYmJm5lLnB1c2goLi4uWi5zbGljZShmKzEpKX1yZXR1cm4gWW4obmUsY2U9PntsLnB1c2godGhpcy50b1Zpc3VhbFJvdyhjZSkpfSksMD09PWwubGVuZ3Ro'@;
put 'fX19KHRoaXMpKX1mdW5jdGlvbiB3MnQoKXtjb25zdCBjPXRoaXMuZ2V0U2V0dGluZygicm93cyIpO0FycmF5LmlzQXJyYXkoYykmJnRoaXMuaGlkZVJvd3MoYyl9ZnVuY3Rpb24gJDVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhl'@;
put 'IHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBJUShjLGwpe3JldHVybiBjLmdldChySChjLGwpKX1mdW5jdGlvbiBSUShjLGwsYSl7cmV0dXJuIGMuc2V0KHJIKGMsbCksYSksYX1mdW5jdGlvbiBySChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9TW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbkZyZWV6'@;
put 'ZSIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtbkZyZWV6ZSIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblVuZnJlZXplIik7Y29uc3QgSzVlPSJt'@;
put 'YW51YWxDb2x1bW5GcmVlemUiO3ZhciBSOT1uZXcgV2Vha01hcCxMUT1uZXcgV2Vha1NldDtjbGFzcyBUMnQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gTTJ0KGMsbCl7JDVlKGMsbCksbC5hZGQoYyl9KHRoaXMsTFEpLGZ1bmN0aW9uIHgy'@;
put 'dChjLGwsYSl7JDVlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxSOSwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEs1ZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxMTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0s1ZV19'@;
put 'ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGw9PnJIKExRLHRoaXMsQTJ0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGwsYSk9PnJIKExRLHRoaXMsazJ0KS5j'@;
put 'YWxsKHRoaXMsbCxhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtSUShSOSx0aGlzLCExKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4o'@;
put 'KX1mcmVlemVDb2x1bW4obCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLGQ9YS5maXhlZENvbHVtbnNTdGFydDx0aGlzLmhvdC5jb3VudENvbHMoKSYmbD5hLmZpeGVkQ29sdW1uc1N0YXJ0LTE7SVEoUjksdGhpcyl8fFJRKFI5LHRoaXMsITApLCExIT09dGhpcy5ob3QucnVuSG9v'@;
put 'a3MoImJlZm9yZUNvbHVtbkZyZWV6ZSIsbCxkKSYmKGQmJih0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEuZml4ZWRDb2x1bW5zU3RhcnQpLGEuX2ZpeGVkQ29sdW1uc1N0YXJ0Kz0xKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5GcmVlemUiLGwsZCkp'@;
put 'fXVuZnJlZXplQ29sdW1uKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxkPWEuZml4ZWRDb2x1bW5zU3RhcnQ+MCYmbDw9YS5maXhlZENvbHVtbnNTdGFydC0xO0lRKFI5LHRoaXMpfHxSUShSOSx0aGlzLCEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5V'@;
put 'bmZyZWV6ZSIsbCxkKSYmKGQmJihhLl9maXhlZENvbHVtbnNTdGFydC09MSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEuZml4ZWRDb2x1bW5zU3RhcnQpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsbCxkKSl9fWZ1bmN0aW9uIEEy'@;
put 'dChjKXtjLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIEMydChjKXtyZXR1cm57a2V5OiJmcmVlemVfY29sdW1uIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShpcSl9LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2Mu'@;
put 'ZnJlZXplQ29sdW1uKGQpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxoaWRkZW4oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBhPSExO3JldHVybih2b2lkIDA9PT1sfHxsLmxlbmd0aD4xfHxsWzBdLmZyb20uY29sIT09bFswXS50'@;
put 'by5jb2x8fGxbMF0uZnJvbS5jb2w8PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydC0xKSYmKGE9ITApLGF9fX0odGhpcyksZnVuY3Rpb24gUzJ0KGMpe3JldHVybntrZXk6InVuZnJlZXplX2NvbHVtbiIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uo'@;
put 'b3EpfSxjYWxsYmFjayhsLGEpe2NvbnN0W3tzdGFydDp7Y29sOmR9fV09YTtjLnVuZnJlZXplQ29sdW1uKGQpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxoaWRkZW4oKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2xldCBhPSExO3JldHVy'@;
put 'bih2b2lkIDA9PT1sfHxsLmxlbmd0aD4xfHxsWzBdLmZyb20uY29sIT09bFswXS50by5jb2x8fGxbMF0uZnJvbS5jb2w+PXRoaXMuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCkmJihhPSEwKSxhfX19KHRoaXMpKX1mdW5jdGlvbiBrMnQoYyxsKXtpZihJUShSOSx0aGlzKSl7Y29u'@;
put 'c3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0O2lmKGw8YXx8Yy5zb21lKGQ9PmQ8YSkpcmV0dXJuITF9fWZ1bmN0aW9uIGlIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEMnQoYyl7dmFyIGw9ZnVuY3Rpb24gSTJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv'@;
put 'ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy'@;
put 'biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj'@;
put 'b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBjdz0icHgiLEo1ZT1jbGFzcyBSMnR7Y29uc3RydWN0b3IobCl7aUgodGhpcywiaG90Iix2b2lkIDApLGlIKHRoaXMsIl9lbGVtZW50IixudWxsKSxpSCh0aGlzLCJzdGF0ZSIsMCksaUgodGhpcywiaW5saW5lUHJv'@;
put 'cGVydHkiLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLmlubGluZVByb3BlcnR5PWwuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1hcHBlbmRUbyhsKXtsLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuc3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10'@;
put 'aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0FwcGVuZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5z'@;
put 'dGF0ZT0wfWlzQXBwZW5kZWQoKXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNldFBvc2l0aW9uKGwsYSl7bTEobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD1sK2N3KSxtMShhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbdGhpcy5pbmxp'@;
put 'bmVQcm9wZXJ0eV09YStjdyl9Z2V0UG9zaXRpb24oKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGU7cmV0dXJue3RvcDpsLnRvcD9wYXJzZUludChsLnRvcCwxMCk6MCxzdGFydDpsW3RoaXMuaW5saW5lUHJvcGVydHldP3BhcnNlSW50KGxbdGhpcy5pbmxpbmVQcm9wZXJ0eV0sMTApOjB9'@;
put 'fXNldFNpemUobCxhKXttMShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9bCtjdyksbTEoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD1hK2N3KX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5fZWxlbWVu'@;
put 'dC5zdHlsZS53aWR0aCwxMCk6MCxoZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldChsLGEpe20xKGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtjdyksbTEoYSkmJih0'@;
put 'aGlzLl9lbGVtZW50LnN0eWxlW2BtYXJnaW4ke3AxKHRoaXMuaW5saW5lUHJvcGVydHkpfWBdPWErY3cpfWdldE9mZnNldCgpe2NvbnN0IGw9dGhpcy5fZWxlbWVudC5zdHlsZSxhPWBtYXJnaW4ke3AxKHRoaXMuaW5saW5lUHJvcGVydHkpfWA7cmV0dXJue3RvcDpsLm1hcmdpblRvcD9wYXJz'@;
put 'ZUludChsLm1hcmdpblRvcCwxMCk6MCxzdGFydDpsW2FdP3BhcnNlSW50KGxbYV0sMTApOjB9fX0sUDJ0PWNsYXNzIE8ydCBleHRlbmRzIEo1ZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksVGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodCIpfX0sTjJ0PWNs'@;
put 'YXNzIEgydCBleHRlbmRzIEo1ZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksVGkodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZSIpfX07ZnVuY3Rpb24gYjMoYyxsLGEpe1E1ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gUTVlKGMsbCl7aWYobC5oYXMoYykp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBLZChjLGwsYSl7cmV0dXJuIGMuc2V0KGg2KGMsbCksYSksYX1mdW5jdGlvbiBVbyhjLGwpe3JldHVybiBjLmdldChoNihj'@;
put 'LGwpKX1mdW5jdGlvbiBoNihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9TW8u'@;
put 'Z2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbk1vdmUiKSxNby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5Nb3ZlIik7Y29uc3QgUFE9Im1hbnVhbENvbHVtbk1vdmUiLGVtZT0iaHRfX21hbnVhbENvbHVtbk1vdmUiLG9IPSJzaG93LXVpIixGUT0ib24t'@;
put 'bW92aW5nLS1jb2x1bW5zIixIUT0iYWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIjt2YXIgZWQ9bmV3IFdlYWtNYXAsZjY9bmV3IFdlYWtNYXAsVmc9bmV3IFdlYWtNYXAsYUg9bmV3IFdlYWtNYXAscDY9bmV3IFdlYWtNYXAsdGQ9bmV3IFdlYWtNYXAsc0g9bmV3IFdlYWtNYXAsSzI9bmV3IFdl'@;
put 'YWtNYXAsdXc9bmV3IFdlYWtNYXAsbEg9bmV3IFdlYWtNYXAsaUE9bmV3IFdlYWtNYXAsTDk9bmV3IFdlYWtTZXQ7Y2xhc3MgajJ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFYydChjLGwpe1E1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLEw5'@;
put 'KSxiMyh0aGlzLGVkLG5ldyBQMnQodGhpcy5ob3QpKSxiMyh0aGlzLGY2LG5ldyBOMnQodGhpcy5ob3QpKSxiMyh0aGlzLFZnLFtdKSxiMyh0aGlzLGFILDApLGIzKHRoaXMscDYsITEpLGIzKHRoaXMsdGQse30pLGIzKHRoaXMsc0gsdm9pZCAwKSxiMyh0aGlzLEsyLHZvaWQgMCksYjModGhp'@;
put 'cyx1dyx2b2lkIDApLGIzKHRoaXMsbEgsdm9pZCAwKSxiMyh0aGlzLGlBLHZvaWQgMCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFBRfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEyMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdz'@;
put 'KClbUFFdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNb'@;
put 'aF07cmV0dXJuIGg2KEw5LGwsejJ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4g'@;
put 'aDYoTDksbCxaMnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+aDYoTDksdGhpcyxZMnQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxk'@;
put 'PW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gaDYoTDksbCxHMnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxUaSh0aGlzLmhvdC5yb290RWxlbWVudCxlbWUpLHN1cGVyLmVuYWJsZVBs'@;
put 'dWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7Y2EodGhpcy5ob3Qucm9vdEVsZW1lbnQsZW1lKSx0aGlzLnVu'@;
put 'cmVnaXN0ZXJFdmVudHMoKSxVbyhlZCx0aGlzKS5kZXN0cm95KCksVW8oZjYsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMubW92ZUNvbHVtbnMoW2xdLGEpfW1vdmVDb2x1bW5zKGwsYSl7Y29uc3QgZD1VbyhzSCx0aGlz'@;
put 'KSxoPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSxmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Nb3ZlIixsLGEsZCxoKTtpZihLZChzSCx0aGlzLHZvaWQgMCksITE9PT1mKXJldHVybjtoJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEpO2NvbnN0'@;
put 'IHY9aCYmdGhpcy5pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Nb3ZlIixsLGEsZCxoLHYpLHZ9ZHJhZ0NvbHVtbihsLGEpe3JldHVybiB0aGlzLmRyYWdDb2x1bW5zKFtsXSxhKX1kcmFnQ29sdW1ucyhsLGEpe2NvbnN0IGQ9'@;
put 'dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4gS2Qoc0gsdGhpcyxhKSx0aGlzLm1vdmVDb2x1bW5zKGwsZCl9aXNNb3ZlUG9zc2libGUobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaD1sLmxlbmd0aCth'@;
put 'PmQsZj1hPDAsdj1sLnNvbWUoRD0+RDwwKSxNPWwuc29tZShEPT5EPj1kKTtyZXR1cm4hKGh8fGZ8fHZ8fE0pfWlzQ29sdW1uT3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9Y291bnRGaW5hbEluZGV4KGwsYSl7Y29uc3QgZD1LdShsLChoLGYpPT4oZjxh'@;
put 'JiYoaCs9MSksaCksMCk7cmV0dXJuIGEtZH1nZXRDb2x1bW5zV2lkdGgobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyO2xldCBoPTA7Zm9yKGxldCBmPWw7Zjw9YTtmKz0xKXtjb25zdCB2PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtmPDA/aCs9dGhp'@;
put 'cy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpfHwwOm51bGwhPT12JiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aCh2KXx8MCl9cmV0dXJuIGh9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNl'@;
put 'dHRpbmdzKClbUFFdO2lmKEFycmF5LmlzQXJyYXkobCkpdGhpcy5tb3ZlQ29sdW1ucyhsLDApO2Vsc2UgaWYodm9pZCAwIT09bCl7Y29uc3QgYT10aGlzLnBlcnNpc3RlbnRTdGF0ZUxvYWQoKTthLmxlbmd0aCYmdGhpcy5tb3ZlQ29sdW1ucyhhLDApfX1pc0ZpeGVkQ29sdW1uc1N0YXJ0KGwp'@;
put 'e3JldHVybiBsPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnR9cGVyc2lzdGVudFN0YXRlU2F2ZSgpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwibWFudWFsQ29sdW1uTW92ZSIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0SW5k'@;
put 'ZXhlc1NlcXVlbmNlKCkpfXBlcnNpc3RlbnRTdGF0ZUxvYWQoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsIm1hbnVhbENvbHVtbk1vdmUiLGwpLGwudmFsdWU/bC52YWx1ZTpbXX1wcmVwYXJlQ29sdW1uc1RvTW92aW5nKGwsYSl7'@;
put 'Y29uc3QgZD1bXTtyZXR1cm4gJG8obCxhLGg9PntkLnB1c2goaCl9KSxkfXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKTt0aGlzLmlzRml4ZWRDb2x1bW5zU3RhcnQoVW8oSzIsdGhpcykpJiZsPjAmJnRoaXMuaG90'@;
put 'LnNjcm9sbFZpZXdwb3J0VG8oe2NvbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobC0xLC0xKX0pO2NvbnN0IGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxkPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuc2Nyb2xsYWJsZUVsZW1l'@;
put 'bnQsaD0ibnVtYmVyIj09dHlwZW9mIGQuc2Nyb2xsWD9kLnNjcm9sbFg6ZC5zY3JvbGxMZWZ0O2xldCBmPXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0TGVmdCt0aGlzLmdldENvbHVtbnNXaWR0aCgwLFVvKEsyLHRoaXMpLTEpO2NvbnN0IHY9YS5oaWRlci5vZmZzZXRXaWR0aCxNPWEuVEJP'@;
put 'RFkub2Zmc2V0TGVmdCxEPVVvKGVkLHRoaXMpLmdldE9mZnNldCgpLnN0YXJ0LFo9VW8oZWQsdGhpcykuZ2V0U2l6ZSgpLndpZHRoO2xldCBuZT0wLGNlPTA7aWYodGhpcy5ob3QuaXNSdGwoKSl7Y29uc3QgQmU9dGhpcy5ob3Qucm9vdFdpbmRvdyxxZT1hdSh0aGlzLmhvdC5yb290RWxlbWVu'@;
put 'dCkscnQ9QmUuaW5uZXJXaWR0aC1Vbyh1dyx0aGlzKS1xZTtjZT1CZS5pbm5lcldpZHRoLVVvKHRkLHRoaXMpLmV2ZW50UGFnZVgtcnQtKHZvaWQgMD09PWQuc2Nyb2xsWD9oOjApfWVsc2UgY2U9VW8odGQsdGhpcykuZXZlbnRQYWdlWC0oVW8odXcsdGhpcyktKHZvaWQgMD09PWQuc2Nyb2xs'@;
put 'WD9oOjApKTtpZihVbyhsSCx0aGlzKSYmKG5lPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q29sdW1uSGVhZGVyKC0xKS5vZmZzZXRXaWR0aCksdGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KFVvKEsyLHRoaXMpKSYmKGYr'@;
put 'PWgpLGYrPW5lLFVvKEsyLHRoaXMpPDApVW8oaUEsdGhpcyk+MD9Vbyh0ZCx0aGlzKS5jb2w9MDpVbyh0ZCx0aGlzKS5jb2w9bD4wP2wtMTpsO2Vsc2UgaWYoVW8odGQsdGhpcykuVEQub2Zmc2V0V2lkdGgvMitmPD1jZSl7Y29uc3QgQmU9VW8oSzIsdGhpcyk+PVVvKGFILHRoaXMpP1VvKGFI'@;
put 'LHRoaXMpLTE6VW8oSzIsdGhpcyk7VW8odGQsdGhpcykuY29sPUJlKzEsZis9VW8odGQsdGhpcykuVEQub2Zmc2V0V2lkdGh9ZWxzZSBVbyh0ZCx0aGlzKS5jb2w9VW8oSzIsdGhpcyk7bGV0IGJlPWNlLEVlPWY7Y2UrWitEPj12P2JlPXYtWi1EOmNlK0Q8TStuZSYmKGJlPU0rbmUrTWF0aC5h'@;
put 'YnMoRCkpLGY+PXYtMT9FZT12LTE6MD09PUVlP0VlPTE6dm9pZCAwIT09ZC5zY3JvbGxYJiZVbyhLMix0aGlzKTxVbyhpQSx0aGlzKSYmKEVlLT1Vbyh1dyx0aGlzKTw9ZC5zY3JvbGxYP1VvKHV3LHRoaXMpOjApLFVvKGVkLHRoaXMpLnNldFBvc2l0aW9uKG51bGwsYmUpLFVvKGY2LHRoaXMp'@;
put 'LnNldFBvc2l0aW9uKG51bGwsRWUpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+aDYoTDksdGhpcyxVMnQpLmNhbGwodGhpcyxh'@;
put 'KSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+aDYoTDksdGhpcyxXMnQpLmNhbGwodGhpcykpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfWJ1aWxkUGx1Z2luVUkoKXtVbyhlZCx0aGlzKS5idWlsZCgpLFVv'@;
put 'KGY2LHRoaXMpLmJ1aWxkKCl9ZGVzdHJveSgpe1VvKGVkLHRoaXMpLmRlc3Ryb3koKSxVbyhmNix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB6MnQoYyxsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGY9dGhpcy5ob3Quc2VsZWN0aW9u'@;
put 'LmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLHY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxNPXBhKGMudGFyZ2V0LCJzb3J0QWN0aW9uIik7aWYoIXZ8fCFmfHxVbyhwNix0aGlzKXx8MCE9PWMuYnV0dG9ufHxNKXJldHVybiBLZChwNix0aGlzLCExKSxVbyhWZyx0aGlzKS5s'@;
put 'ZW5ndGg9MCx2b2lkIGNhKHRoaXMuaG90LnJvb3RFbGVtZW50LFtGUSxvSF0pO2NvbnN0IEQ9VW8oZjYsdGhpcykuaXNCdWlsdCgpJiYhVW8oZjYsdGhpcykuaXNBcHBlbmRlZCgpLFo9VW8oZWQsdGhpcykuaXNCdWlsdCgpJiYhVW8oZWQsdGhpcykuaXNBcHBlbmRlZCgpO0QmJlomJihVbyhm'@;
put 'Nix0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSxVbyhlZCx0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSk7Y29uc3R7ZnJvbTpuZSx0bzpjZX09dixiZT1NYXRoLm1pbihuZS5jb2wsY2UuY29sKSxFZT1NYXRoLm1heChuZS5jb2wsY2UuY29sKTtpZihsLnJvdzwwJiZsLmNvbD49YmUmJmwuY29sPD1F'@;
put 'ZSl7ZC5jb2x1bW49ITAsS2QocDYsdGhpcywhMCk7Y29uc3QgQmU9YS5maXJzdENoaWxkP1gyZShjLGEuZmlyc3RDaGlsZCkueDpjLm9mZnNldFg7VW8odGQsdGhpcykuZXZlbnRQYWdlWD1jLnBhZ2VYLEtkKEsyLHRoaXMsbC5jb2wpLFVvKHRkLHRoaXMpLlREPWEsVW8odGQsdGhpcykuY29s'@;
put 'PWwuY29sLEtkKFZnLHRoaXMsdGhpcy5wcmVwYXJlQ29sdW1uc1RvTW92aW5nKGJlLEVlKSksS2QobEgsdGhpcywhIXRoaXMuaG90LmdldFNldHRpbmdzKCkucm93SGVhZGVycyksS2QoYUgsdGhpcyx0aGlzLmhvdC5jb3VudENvbHMoKSksS2QoaUEsdGhpcyx0aGlzLmhvdC5nZXRTZXR0aW5n'@;
put 'cygpLmZpeGVkQ29sdW1uc1N0YXJ0KSxLZCh1dyx0aGlzLGowKHRoaXMuaG90LnJvb3RFbGVtZW50KS5sZWZ0KTtjb25zdCBxZT1VbyhsSCx0aGlzKT8tMTowLHJ0PWguaG9sZGVyLnNjcm9sbFRvcCtoLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxLHB0PWwuY29sPFVvKGlBLHRoaXMpLGR0'@;
put 'PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSxKdD1NYXRoLmFicyhCZS0odGhpcy5ob3QuaXNSdGwoKT9hLm9mZnNldFdpZHRoOjApKSx2bj10aGlzLmdldENvbHVtbnNXaWR0aChiZSxsLmNvbC0xKStKdCxDbj10aGlz'@;
put 'LmdldENvbHVtbnNXaWR0aChxZSxiZS0xKSsocHQ/ZHQ6MCkrdm47VW8oZWQsdGhpcykuc2V0UG9zaXRpb24ocnQsQ24pLFVvKGVkLHRoaXMpLnNldFNpemUodGhpcy5nZXRDb2x1bW5zV2lkdGgoYmUsRWUpLGguaGlkZXIub2Zmc2V0SGVpZ2h0LXJ0KSxVbyhlZCx0aGlzKS5zZXRPZmZzZXQo'@;
put 'bnVsbCwtdm4pLFRpKHRoaXMuaG90LnJvb3RFbGVtZW50LEZRKX1lbHNlIGNhKHRoaXMuaG90LnJvb3RFbGVtZW50LEhRKSxLZChwNix0aGlzLCExKSxVbyhWZyx0aGlzKS5sZW5ndGg9MH1mdW5jdGlvbiBVMnQoYyl7VW8ocDYsdGhpcykmJihVbyh0ZCx0aGlzKS5ldmVudFBhZ2VYPWMucGFn'@;
put 'ZVgsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCkpfWZ1bmN0aW9uIFoydChjLGwsYSxkKXshdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKXx8IVVvKHA2LHRoaXMpfHwoVW8oVmcsdGhpcykuaW5kZXhPZihsLmNvbCk+LTE/Y2EodGhpcy5ob3Qucm9vdEVsZW1lbnQsb0gpOlRpKHRoaXMu'@;
put 'aG90LnJvb3RFbGVtZW50LG9IKSxkLnJvdz0hMCxkLmNvbHVtbj0hMCxkLmNlbGw9ITAsS2QoSzIsdGhpcyxsLmNvbCksVW8odGQsdGhpcykuVEQ9YSl9ZnVuY3Rpb24gVzJ0KCl7Y29uc3QgYz1Vbyh0ZCx0aGlzKS5jb2wsbD1VbyhWZyx0aGlzKS5sZW5ndGg7aWYoS2QoSzIsdGhpcyx2b2lk'@;
put 'IDApLEtkKHA2LHRoaXMsITEpLGNhKHRoaXMuaG90LnJvb3RFbGVtZW50LFtGUSxvSCxIUV0pLHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsSFEpLGw8MXx8dm9pZCAwPT09YylyZXR1cm47Y29uc3QgYT1VbyhW'@;
put 'Zyx0aGlzKVswXSxkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSksaD10aGlzLmRyYWdDb2x1bW5zKFVvKFZnLHRoaXMpLGMpO2lmKFVvKFZnLHRoaXMpLmxlbmd0aD0wLCEwPT09aCl7dGhpcy5wZXJzaXN0ZW50U3RhdGVTYXZlKCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmll'@;
put 'dy5hZGp1c3RFbGVtZW50c1NpemUoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGQpO3RoaXMuaG90LnNlbGVjdENvbHVtbnMoZixmK2wtMSl9fWZ1bmN0aW9uIFkydCgpe2NvbnN0IGM9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxkPWMuZ2V0Q29sdW1uSGVhZGVySGVpZ2h0'@;
put 'KDApKzErYy5ob2xkZXIuc2Nyb2xsVG9wO1VvKGVkLHRoaXMpLnNldFBvc2l0aW9uKGQpLFVvKGVkLHRoaXMpLnNldFNpemUobnVsbCxjLmhpZGVyLm9mZnNldEhlaWdodC1kKX1mdW5jdGlvbiBHMnQoKXt0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZnVuY3Rpb24gQzEoYyxsLGEpe3Rt'@;
put 'ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gdG1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB1dShjLGwsYSl7cmV0dXJuIGMuc2V0'@;
put 'KHkzKGMsbCksYSksYX1mdW5jdGlvbiBUbyhjLGwpe3JldHVybiBjLmdldCh5MyhjLGwpKX1mdW5jdGlvbiB5MyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJp'@;
put 'dmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgY0g9Im1hbnVhbENvbHVtblJlc2l6ZSIsbm1lPSJtYW51YWxDb2x1bW5XaWR0aHMiO3ZhciBCZz1uZXcgV2Vha01hcCx1SD1uZXcgV2Vha01hcCxCaD1uZXcgV2Vha01hcCxkSD1uZXcgV2Vha01hcCxZ'@;
put 'cD1uZXcgV2Vha01hcCxxMnQ9bmV3IFdlYWtNYXAsZHc9bmV3IFdlYWtNYXAsaEg9bmV3IFdlYWtNYXAscWQ9bmV3IFdlYWtNYXAsamc9bmV3IFdlYWtNYXAsTzk9bmV3IFdlYWtNYXAsZkg9bmV3IFdlYWtNYXAsb0E9bmV3IFdlYWtNYXAsYUE9bmV3IFdlYWtNYXAsamg9bmV3IFdlYWtNYXAs'@;
put 'c0E9bmV3IFdlYWtNYXAsR3A9bmV3IFdlYWtTZXQ7Y2xhc3MgWDJ0IGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGNIfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiAkMnQoYyxs'@;
put 'KXt0bWUoYyxsKSxsLmFkZChjKX0odGhpcyxHcCksQzEodGhpcyxCZyxudWxsKSxDMSh0aGlzLHVILG51bGwpLEMxKHRoaXMsQmgsW10pLEMxKHRoaXMsZEgsbnVsbCksQzEodGhpcyxZcCxudWxsKSxDMSh0aGlzLHEydCxudWxsKSxDMSh0aGlzLGR3LG51bGwpLEMxKHRoaXMsaEgsbnVsbCks'@;
put 'QzEodGhpcyxxZCx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikpLEMxKHRoaXMsamcsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxDMSh0aGlzLE85LG51bGwpLEMxKHRoaXMsZkgsITEpLEMxKHRoaXMsb0EsMCksQzEodGhpcyxh'@;
put 'QSxudWxsKSxDMSh0aGlzLGpoLHZvaWQgMCksQzEodGhpcyxzQSx2b2lkIDApLFRpKFRvKHFkLHRoaXMpLCJtYW51YWxDb2x1bW5SZXNpemVyIiksVGkoVG8oamcsdGhpcyksIm1hbnVhbENvbHVtblJlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXtyZXR1cm4gdGhpcy5ob3QuaXNSdGwo'@;
put 'KT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtjSF19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh1dShqaCx0aGlzLG5ldyBVbSksVG8oamgsdGhpcykuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+eTMoR3As'@;
put 'dGhpcyxKMnQpLmNhbGwodGhpcykpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxUbyhqaCx0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB'@;
put 'cnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4geTMoR3AsbCxpZnQpLmNhbGwobCwuLi5kKX0sMSksdGhpcy5hZGRIb29rKCJiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJy'@;
put 'YXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHkzKEdwLGwsb2Z0KS5jYWxsKGwsLi4uZCl9LDEpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDto'@;
put 'PGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB5MyhHcCxsLGFmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5iaW5kRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBk'@;
put 'YXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3V1KHNBLHRoaXMsVG8oamgsdGhpcykuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2F2ZU1hbnVhbENvbHVtbldpZHRo'@;
put 'cygpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIixubWUsVG8oamgsdGhpcykuZ2V0VmFsdWVzKCkpfWxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsbm1lLGwpLGwu'@;
put 'dmFsdWV9c2V0TWFudWFsU2l6ZShsLGEpe2NvbnN0IGQ9TWF0aC5tYXgoYSwyMCksaD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3JldHVybiBUbyhqaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoaCxkKSxkfWNsZWFyTWFudWFsU2l6ZShsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2lj'@;
put 'YWxDb2x1bW4obCk7VG8oamgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9c2V0dXBIYW5kbGVQb3NpdGlvbihsKXtpZighbC5wYXJlbnROb2RlKXJldHVybjt1dShCZyx0aGlzLGwpO2NvbnN0e193dDphfT10aGlzLmhvdC52aWV3LGQ9YS53dFRhYmxlLmdldENvb3JkcyhUbyhCZyx0'@;
put 'aGlzKSksaD1kLmNvbDtpZihoPDApcmV0dXJuO2NvbnN0IGY9TXUoVG8oQmcsdGhpcykpLHY9VG8oQmcsdGhpcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IEQ7aDxhLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IikmJihEPWEud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENv'@;
put 'cm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oVG8oQmcsdGhpcyksZC5yb3csZC5jb2wpKSxEfHwoRD1hLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihUbyhCZyx0aGlzKSxkLnJvdyxkLmNvbCkpLHV1KHVILHRoaXMsdGhpcy5ob3QuY29s'@;
put 'dW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKSksdXUoQmgsdGhpcyxbXSk7Y29uc3QgWj10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTt0aGlzLmhv'@;
put 'dC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZaJiZZbih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksY2U9PnskbyhjZS5nZXRUb3BTdGFydENvcm5lcigpLmNvbCxjZS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsQmU9PntUbyhCaCx0aGlzKS5pbmNsdWRlcyhCZSl8fFRvKEJoLHRoaXMp'@;
put 'LnB1c2goQmUpfSl9KSxUbyhCaCx0aGlzKS5pbmNsdWRlcyhUbyh1SCx0aGlzKSl8fHV1KEJoLHRoaXMsW1RvKHVILHRoaXMpXSksdXUoaEgsdGhpcyxELnN0YXJ0LTYpLHV1KGR3LHRoaXMscGFyc2VJbnQodi53aWR0aCwxMCkpLFRvKHFkLHRoaXMpLnN0eWxlLnRvcD1gJHtELnRvcH1weGAs'@;
put 'VG8ocWQsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke1RvKGhILHRoaXMpK1RvKGR3LHRoaXMpfXB4YCxUbyhxZCx0aGlzKS5zdHlsZS5oZWlnaHQ9YCR7Zn1weGAsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoVG8ocWQsdGhpcykpfXJlZnJlc2hIYW5kbGVQb3NpdGlv'@;
put 'bigpe1RvKHFkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHtUbyhoSCx0aGlzKStUbyhkSCx0aGlzKX1weGB9c2V0dXBHdWlkZVBvc2l0aW9uKCl7Y29uc3QgbD1wYXJzZUludChNdShUbyhxZCx0aGlzKSksMTApLGE9cGFyc2VJbnQoVG8ocWQsdGhpcykuc3R5bGUudG9wLDEwKSts'@;
put 'LGQ9dGhpcy5ob3Qudmlldy5nZXRUYWJsZUhlaWdodCgpO1RpKFRvKHFkLHRoaXMpLCJhY3RpdmUiKSxUaShUbyhqZyx0aGlzKSwiYWN0aXZlIiksVG8oamcsdGhpcykuc3R5bGUudG9wPWAke2F9cHhgLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKSxUbyhqZyx0aGlzKS5zdHlsZS5oZWln'@;
put 'aHQ9ZC1sKyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoVG8oamcsdGhpcykpfXJlZnJlc2hHdWlkZVBvc2l0aW9uKCl7VG8oamcsdGhpcykuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPVRvKHFkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXX1oaWRlSGFuZGxlQW5kR3Vp'@;
put 'ZGUoKXtjYShUbyhxZCx0aGlzKSwiYWN0aXZlIiksY2EoVG8oamcsdGhpcyksImFjdGl2ZSIpfWNoZWNrSWZDb2x1bW5IZWFkZXIobCl7Y29uc3QgYT1JbShsLFsiVEhFQUQiXSx0aGlzLmhvdC5yb290RWxlbWVudCkse3RvcE92ZXJsYXk6ZCx0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk6'@;
put 'aH09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cztyZXR1cm5bZC5jbG9uZS53dFRhYmxlLlRIRUFELGguY2xvbmUud3RUYWJsZS5USEVBRF0uaW5jbHVkZXMoYSl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVybiJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRo'@;
put 'aXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1hZnRlck1vdXNlRG93blRpbWVvdXQoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sYT0oZCxoKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9v'@;
put 'a3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsVG8oWXAsdGhpcyksZCwhMCk7dm9pZCAwIT09ZiYmdXUoWXAsdGhpcyxmKSx0aGlzLnNldE1hbnVhbFNpemUoZCxUbyhZcCx0aGlzKSksdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVz'@;
put 'aXplIixUbyhZcCx0aGlzKSxkLCEwKSxoJiZsKCl9O1RvKG9BLHRoaXMpPj0yJiYoVG8oQmgsdGhpcykubGVuZ3RoPjE/KFluKFRvKEJoLHRoaXMpLGg9PnthKGgpfSksbCgpKTpZbihUbyhCaCx0aGlzKSxoPT57YShoLCEwKX0pKSx1dShvQSx0aGlzLDApLHV1KGFBLHRoaXMsbnVsbCl9Ymlu'@;
put 'ZEV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RWxlbWVudDphfT10aGlzLmhvdDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlb3ZlciIsZD0+eTMoR3AsdGhpcyxRMnQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0'@;
put 'ZW5lcihhLCJtb3VzZWRvd24iLGQ9PnkzKEdwLHRoaXMsZWZ0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixkPT55MyhHcCx0aGlzLHRmdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3Rl'@;
put 'bmVyKGwsIm1vdXNldXAiLCgpPT55MyhHcCx0aGlzLG5mdCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihUbyhxZCx0aGlzKSwiY29udGV4dG1lbnUiLCgpPT55MyhHcCx0aGlzLHJmdCkuY2FsbCh0aGlzKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3ko'@;
put 'KX19ZnVuY3Rpb24gSjJ0KCl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2NIXSxsPXRoaXMubG9hZE1hbnVhbENvbHVtbldpZHRocygpO3R5cGVvZiBsPCJ1Ij90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2wuZm9yRWFjaCgoYSxkKT0+e1RvKGpoLHRoaXMpLnNldFZhbHVl'@;
put 'QXRJbmRleChkLGEpfSl9LCEwKTpBcnJheS5pc0FycmF5KGMpPyh0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e2MuZm9yRWFjaCgoYSxkKT0+e1RvKGpoLHRoaXMpLnNldFZhbHVlQXRJbmRleChkLGEpfSl9LCEwKSx1dShzQSx0aGlzLGMpKTohMD09PWMmJkFycmF5LmlzQXJyYXkoVG8o'@;
put 'c0EsdGhpcykpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1RvKHNBLHRoaXMpLmZvckVhY2goKGEsZCk9PntUbyhqaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCl9ZnVuY3Rpb24gUTJ0KGMpe2lmKCFNJChjLnRhcmdldCkmJiEwIT09VG8oZkgsdGhpcykmJnRoaXMu'@;
put 'Y2hlY2tJZkNvbHVtbkhlYWRlcihjLnRhcmdldCkpe2NvbnN0IGw9dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQoYy50YXJnZXQpO2lmKCFsKXJldHVybjtjb25zdCBhPWwuZ2V0QXR0cmlidXRlKCJjb2xzcGFuIik7bCYmKG51bGw9PT1hfHwiMSI9PT1hKSYmKFRvKE85LHRoaXMpfHx0aGlzLnNl'@;
put 'dHVwSGFuZGxlUG9zaXRpb24obCkpfX1mdW5jdGlvbiBlZnQoYyl7Yy50YXJnZXQucGFyZW50Tm9kZT09PXRoaXMuaG90LnJvb3RFbGVtZW50JiZwYShjLnRhcmdldCwibWFudWFsQ29sdW1uUmVzaXplciIpJiYodGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKFRvKEJnLHRoaXMpKSx0aGlzLnNl'@;
put 'dHVwR3VpZGVQb3NpdGlvbigpLHV1KE85LHRoaXMsITApLG51bGw9PT1UbyhhQSx0aGlzKSYmKHV1KGFBLHRoaXMsc2V0VGltZW91dCgoKT0+dGhpcy5hZnRlck1vdXNlRG93blRpbWVvdXQoKSw1MDApKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KFRvKGFBLHRoaXMpKSksdXUob0EsdGhp'@;
put 'cyxUbyhvQSx0aGlzKSsxKSx0aGlzLnN0YXJ0WD1jLnBhZ2VYLHV1KFlwLHRoaXMsVG8oZHcsdGhpcykpKX1mdW5jdGlvbiB0ZnQoYyl7aWYoVG8oTzksdGhpcykpe2NvbnN0IGw9KGMucGFnZVgtdGhpcy5zdGFydFgpKnRoaXMuaG90LmdldERpcmVjdGlvbkZhY3RvcigpO3V1KGRILHRoaXMs'@;
put 'VG8oZHcsdGhpcykrbCksWW4oVG8oQmgsdGhpcyksYT0+e3V1KFlwLHRoaXMsdGhpcy5zZXRNYW51YWxTaXplKGEsVG8oZEgsdGhpcykpKX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpfX1mdW5jdGlvbiBuZnQoKXtjb25zdCBjPSgp'@;
put 'PT57dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sbD0oYSxkKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5SZXNpemUiLFRvKFlwLHRoaXMpLGEsITEpLGQmJmMoKSx0aGlzLnNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKSx0aGlz'@;
put 'LmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5SZXNpemUiLFRvKFlwLHRoaXMpLGEsITEpfTtUbyhPOSx0aGlzKSYmKHRoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdXUoTzksdGhpcywhMSksVG8oWXAsdGhpcykhPT1Ubyhkdyx0aGlzKSYmKFRvKEJoLHRoaXMpLmxlbmd0aD4xPyhZbihUbyhC'@;
put 'aCx0aGlzKSxkPT57bChkKX0pLGMoKSk6WW4oVG8oQmgsdGhpcyksZD0+e2woZCwhMCl9KSksdGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKFRvKEJnLHRoaXMpKSl9ZnVuY3Rpb24gcmZ0KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGls'@;
put 'ZChUbyhxZCx0aGlzKSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoVG8oamcsdGhpcykpLHV1KE85LHRoaXMsITEpLHV1KGZILHRoaXMsITApLHRoaXMuaG90Ll9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e3V1KGZILHRoaXMsITEpfSl9ZnVuY3Rpb24gaWZ0KGMsbCl7bGV0IGE9'@;
put 'YztpZih0aGlzLmVuYWJsZWQpe2NvbnN0IGQ9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSxoPVRvKGpoLHRoaXMpLmdldFZhbHVlQXRJbmRleChkKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2NIXSYmaCYmKGE9aCl9cmV0dXJuIGF9ZnVuY3Rpb24gb2Z0KGMsbCl7Y29uc3QgYT1Ubyhq'@;
put 'aCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBhP2E6Y31mdW5jdGlvbiBhZnQoKXt0aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgp'@;
put 'fWZ1bmN0aW9uIE5RKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBzZnQoYyl7dmFyIGw9ZnVuY3Rpb24gbGZ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8'@;
put 'ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1'@;
put 'cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBodz0icHgiLG9tZT1jbGFzcyBjZnR7Y29uc3RydWN0b3Io'@;
put 'bCl7TlEodGhpcywiaG90Iix2b2lkIDApLE5RKHRoaXMsIl9lbGVtZW50IixudWxsKSxOUSh0aGlzLCJzdGF0ZSIsMCksdGhpcy5ob3Q9bH1hcHBlbmRUbyhsKXtsLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuc3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5f'@;
put 'ZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0FwcGVuZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51'@;
put 'bGwsdGhpcy5zdGF0ZT0wfWlzQXBwZW5kZWQoKXtyZXR1cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNldFBvc2l0aW9uKGwsYSl7dm9pZCAwIT09bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wPWwraHcpLHZvaWQgMCE9PWEmJih0aGlzLl9lbGVt'@;
put 'ZW50LnN0eWxlLmxlZnQ9YStodyl9Z2V0UG9zaXRpb24oKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUudG9wP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUudG9wLDEwKTowLGxlZnQ6dGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5'@;
put 'bGUubGVmdCwxMCk6MH19c2V0U2l6ZShsLGEpe2wmJih0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoPWwraHcpLGEmJih0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD1hK2h3KX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5f'@;
put 'ZWxlbWVudC5zdHlsZS53aWR0aCwxMCk6MCxoZWlnaHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldChsLGEpe2wmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD1sK2h3KSxhJiYodGhp'@;
put 'cy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0PWEraHcpfWdldE9mZnNldCgpe3JldHVybnt0b3A6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxl'@;
put 'ZnQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0LDEwKTowfX19LGhmdD1jbGFzcyBkZnQgZXh0ZW5kcyBvbWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxSb3dNb3ZlLS1iYWNrbGlnaHQiKX19LGdmdD1jbGFzcyBwZnQg'@;
put 'ZXh0ZW5kcyBvbWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmUiKX19O2Z1bmN0aW9uIGZ3KGMsbCxhKXthbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGFtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUDkoYyxsLGEpe3JldHVybiBjLnNldChnNihjLGwpLGEpLGF9ZnVuY3Rpb24gRmEoYyxsKXtyZXR1cm4gYy5nZXQoZzYoYyxsKSl9ZnVuY3Rp'@;
put 'b24gZzYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfU1vLmdldFNpbmdsZXRv'@;
put 'bigpLnJlZ2lzdGVyKCJiZWZvcmVSb3dNb3ZlIiksTW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUm93TW92ZSIpO2NvbnN0IEJRPSJtYW51YWxSb3dNb3ZlIixzbWU9Imh0X19tYW51YWxSb3dNb3ZlIixwSD0ic2hvdy11aSIsalE9Im9uLW1vdmluZy0tcm93cyIselE9ImFmdGVy'@;
put 'LXNlbGVjdGlvbi0tcm93cyI7dmFyIG5kPW5ldyBXZWFrTWFwLG02PW5ldyBXZWFrTWFwLHpnPW5ldyBXZWFrTWFwLHY2PW5ldyBXZWFrTWFwLFhkPW5ldyBXZWFrTWFwLGdIPW5ldyBXZWFrTWFwLEY5PW5ldyBXZWFrU2V0O2NsYXNzIGJmdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3Vw'@;
put 'ZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBtZnQoYyxsKXthbWUoYyxsKSxsLmFkZChjKX0odGhpcyxGOSksZncodGhpcyxuZCxuZXcgaGZ0KHRoaXMuaG90KSksZncodGhpcyxtNixuZXcgZ2Z0KHRoaXMuaG90KSksZncodGhpcyx6ZyxbXSksZncodGhpcyx2Nix2b2lkIDApLGZ3KHRoaXMs'@;
put 'WGQse30pLGZ3KHRoaXMsZ0gsdm9pZCAwKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gQlF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTQwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtCUV19ZW5hYmxlUGx1Z2luKCl7dmFy'@;
put 'IGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZzYoRjksbCx5ZnQpLmNh'@;
put 'bGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnNihGOSxsLHdmdCkuY2FsbChsLC4uLmQp'@;
put 'fSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9Pmc2KEY5LHRoaXMsU2Z0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTto'@;
put 'KyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGc2KEY5LGwsTWZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsc21lKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7'@;
put 'dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe2NhKHRoaXMuaG90LnJvb3RFbGVtZW50LHNtZSksdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksRmEobmQs'@;
put 'dGhpcykuZGVzdHJveSgpLEZhKG02LHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9bW92ZVJvdyhsLGEpe3JldHVybiB0aGlzLm1vdmVSb3dzKFtsXSxhKX1tb3ZlUm93cyhsLGEpe2NvbnN0IGQ9RmEoZ0gsdGhpcyksaD10aGlzLmlzTW92ZVBvc3NpYmxlKGwsYSksZj10'@;
put 'aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93TW92ZSIsbCxhLGQsaCk7aWYoUDkoZ0gsdGhpcyx2b2lkIDApLCExPT09ZilyZXR1cm47aCYmdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhKTtjb25zdCB2PWgmJnRoaXMuaXNSb3dPcmRlckNoYW5nZWQobCxhKTtyZXR1'@;
put 'cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGQsaCx2KSx2fWRyYWdSb3cobCxhKXtyZXR1cm4gdGhpcy5kcmFnUm93cyhbbF0sYSl9ZHJhZ1Jvd3MobCxhKXtjb25zdCBkPXRoaXMuY291bnRGaW5hbEluZGV4KGwsYSk7cmV0dXJuIFA5KGdILHRoaXMsYSksdGhpcy5t'@;
put 'b3ZlUm93cyhsLGQpfWlzTW92ZVBvc3NpYmxlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGg9bC5sZW5ndGgrYT5kLGY9YTwwLHY9bC5zb21lKEQ9PkQ8MCksTT1sLnNvbWUoRD0+RD49ZCk7cmV0dXJuIShofHxmfHx2'@;
put 'fHxNKX1pc1Jvd09yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfWNvdW50RmluYWxJbmRleChsLGEpe2NvbnN0IGQ9S3UobCwoaCxmKT0+KGY8YSYmKGgrPTEpLGgpLDApO3JldHVybiBhLWR9Z2V0Um93c0hlaWdodChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qu'@;
put 'cm93SW5kZXhNYXBwZXI7bGV0IGg9MDtmb3IobGV0IGY9bDtmPD1hO2YrKyl7Y29uc3Qgdj1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7bnVsbCE9PXYmJihoKz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFJvd0hlaWdodCh2KXx8dGhpcy5ob3Qudmlldy5nZXREZWZh'@;
put 'dWx0Um93SGVpZ2h0KCkpfXJldHVybiBofW1vdmVCeVNldHRpbmdzT3JMb2FkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0JRXTtpZihBcnJheS5pc0FycmF5KGwpKXRoaXMubW92ZVJvd3MobCwwKTtlbHNlIGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50'@;
put 'U3RhdGVMb2FkKCk7YS5sZW5ndGgmJnRoaXMubW92ZVJvd3MoYSwwKX19aXNGaXhlZFJvd1RvcChsKXtyZXR1cm4gbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcH1pc0ZpeGVkUm93Qm90dG9tKGwpe3JldHVybiBsPnRoaXMuaG90LmNvdW50Um93cygpLTEtdGhpcy5ob3Qu'@;
put 'Z2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b219cGVyc2lzdGVudFN0YXRlU2F2ZSgpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwibWFudWFsUm93TW92ZSIsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkpfXBlcnNpc3RlbnRT'@;
put 'dGF0ZUxvYWQoKXtjb25zdCBsPXt9O3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsIm1hbnVhbFJvd01vdmUiLGwpLGwudmFsdWU/bC52YWx1ZTpbXX1wcmVwYXJlUm93c1RvTW92aW5nKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFz'@;
put 'dCgpLGE9W107aWYoIWwpcmV0dXJuIGE7Y29uc3R7ZnJvbTpkLHRvOmh9PWw7cmV0dXJuICRvKE1hdGgubWluKGQucm93LGgucm93KSxNYXRoLm1heChkLnJvdyxoLnJvdyksTT0+e2EucHVzaChNKX0pLGF9cmVmcmVzaFBvc2l0aW9ucygpe2NvbnN0IGw9RmEoWGQsdGhpcykuY29vcmRzLGE9'@;
put 'dGhpcy5ob3QuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxkPXRoaXMuaG90LmdldExhc3RGdWxseVZpc2libGVSb3coKSxoPXRoaXMuaG90LmNvdW50Um93cygpO3RoaXMuaXNGaXhlZFJvd1RvcChsLnJvdykmJmE+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJ'@;
put 'bmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS0xLC0xKSksdGhpcy5pc0ZpeGVkUm93Qm90dG9tKGwucm93KSYmZDxoJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkKzEsMSksdm9p'@;
put 'ZCAwLCEwKTtjb25zdCBmPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsdj1GYShYZCx0aGlzKS5URCxNPXRoaXMuaG90LnJvb3RFbGVtZW50LEQ9ajAoTSksWj1vXyhNKSxuZT1mLmhvbGRlci5zY3JvbGxUb3AsYmU9RC50b3AtKHRoaXMuaG90LnJvb3RXaW5kb3chPT1aP1ouc2Nyb2xsVG9w'@;
put 'OjApLEVlPUZhKFhkLHRoaXMpLmV2ZW50UGFnZVktYmUrbmUsQmU9Zi5oaWRlci5vZmZzZXRIZWlnaHQscWU9Zi5UQk9EWS5vZmZzZXRUb3AscnQ9RmEobmQsdGhpcykuZ2V0T2Zmc2V0KCkudG9wLHB0PUZhKG5kLHRoaXMpLmdldFNpemUoKS5oZWlnaHQsZHQ9di5vZmZzZXRIZWlnaHQvMixK'@;
put 'dD12Lm9mZnNldEhlaWdodDtsZXQgdm49dGhpcy5ob3Qudmlldy5USEVBRC5vZmZzZXRIZWlnaHQrdGhpcy5nZXRSb3dzSGVpZ2h0KDAsbC5yb3ctMSk7Y29uc3QgQ249RWU+PXZuK2R0O3RoaXMuaXNGaXhlZFJvd1RvcChsLnJvdykmJih2bis9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5'@;
put 'cy50b3BPdmVybGF5LmdldE92ZXJsYXlPZmZzZXQoKSksbC5yb3c8MD9GYShYZCx0aGlzKS5yb3c9YT4wP2EtMTphOkNuPyhGYShYZCx0aGlzKS5yb3c9bC5yb3crMSx2bis9MD09PWwucm93P0p0LTE6SnQpOkZhKFhkLHRoaXMpLnJvdz1sLnJvdztsZXQgdG49RWUsTW49dm47RWUrcHQrcnQ+'@;
put 'PUJlP3RuPUJlLXB0LXJ0OkVlK3J0PHFlJiYodG49cWUrTWF0aC5hYnMocnQpKSx2bj49QmUtMSYmKE1uPUJlLTEpLEZhKG5kLHRoaXMpLnNldFBvc2l0aW9uKHRuKSxGYShtNix0aGlzKS5zZXRQb3NpdGlvbihNbil9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09'@;
put 'dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT5nNihGOSx0aGlzLF9mdCkuY2FsbCh0aGlzLGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5nNihGOSx0aGlz'@;
put 'LENmdCkuY2FsbCh0aGlzKSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9YnVpbGRQbHVnaW5VSSgpe0ZhKG5kLHRoaXMpLmJ1aWxkKCksRmEobTYsdGhpcykuYnVpbGQoKX1kZXN0cm95KCl7RmEobmQsdGhpcykuZGVzdHJveSgpLEZhKG02LHRoaXMpLmRl'@;
put 'c3Ryb3koKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHlmdChjLGwsYSxkKXtjb25zdHt3dFRhYmxlOmgsd3RWaWV3cG9ydDpmfT10aGlzLmhvdC52aWV3Ll93dCx2PXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSxNPXRoaXMuaG90LmdldFNlbGVjdGVkUmFu'@;
put 'Z2VMYXN0KCk7aWYoIU18fCF2fHxGYSh2Nix0aGlzKXx8MCE9PWMuYnV0dG9uKXJldHVybiBQOSh2Nix0aGlzLCExKSxGYSh6Zyx0aGlzKS5sZW5ndGg9MCx2b2lkIGNhKHRoaXMuaG90LnJvb3RFbGVtZW50LFtqUSxwSF0pO2NvbnN0IEQ9RmEobTYsdGhpcykuaXNCdWlsdCgpJiYhRmEobTYs'@;
put 'dGhpcykuaXNBcHBlbmRlZCgpLFo9RmEobmQsdGhpcykuaXNCdWlsdCgpJiYhRmEobmQsdGhpcykuaXNBcHBlbmRlZCgpO0QmJlomJihGYShtNix0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSxGYShuZCx0aGlzKS5hcHBlbmRUbyhoLmhpZGVyKSk7Y29uc3R7ZnJvbTpuZSx0bzpjZX09TSxiZT1N'@;
put 'YXRoLm1pbihuZS5yb3csY2Uucm93KSxFZT1NYXRoLm1heChuZS5yb3csY2Uucm93KTtpZihsLmNvbDwwJiZsLnJvdz49YmUmJmwucm93PD1FZSl7ZC5yb3c9ITAsUDkodjYsdGhpcywhMCksRmEoWGQsdGhpcykuZXZlbnRQYWdlWT1jLnBhZ2VZLEZhKFhkLHRoaXMpLmNvb3Jkcz1sLEZhKFhk'@;
put 'LHRoaXMpLlREPWEsUDkoemcsdGhpcyx0aGlzLnByZXBhcmVSb3dzVG9Nb3ZpbmcoKSk7Y29uc3QgQmU9aC5ob2xkZXIuc2Nyb2xsTGVmdCtmLmdldFJvd0hlYWRlcldpZHRoKCkscWU9dGhpcy5nZXRSb3dzSGVpZ2h0KGJlLGwucm93LTEpKyhjLmNsaWVudFktYS5nZXRCb3VuZGluZ0NsaWVu'@;
put 'dFJlY3QoKS50b3ApO0ZhKG5kLHRoaXMpLnNldFBvc2l0aW9uKG51bGwsQmUpLEZhKG5kLHRoaXMpLnNldFNpemUoaC5oaWRlci5vZmZzZXRXaWR0aC1CZSx0aGlzLmdldFJvd3NIZWlnaHQoYmUsRWUpKSxGYShuZCx0aGlzKS5zZXRPZmZzZXQoLXFlLG51bGwpLFRpKHRoaXMuaG90LnJvb3RF'@;
put 'bGVtZW50LGpRKSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX1lbHNlIGNhKHRoaXMuaG90LnJvb3RFbGVtZW50LHpRKSxQOSh2Nix0aGlzLCExKSxGYSh6Zyx0aGlzKS5sZW5ndGg9MH1mdW5jdGlvbiBfZnQoYyl7RmEodjYsdGhpcykmJihGYShYZCx0aGlzKS5ldmVudFBhZ2VZPWMucGFnZVks'@;
put 'dGhpcy5yZWZyZXNoUG9zaXRpb25zKCkpfWZ1bmN0aW9uIHdmdChjLGwsYSxkKXshdGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKXx8IUZhKHY2LHRoaXMpfHwoRmEoemcsdGhpcykuaW5kZXhPZihsLnJvdyk+LTE/Y2EodGhpcy5ob3Qucm9vdEVsZW1lbnQscEgpOlRpKHRoaXMuaG90'@;
put 'LnJvb3RFbGVtZW50LHBIKSxkLnJvdz0hMCxkLmNvbHVtbj0hMCxkLmNlbGw9ITAsRmEoWGQsdGhpcykuY29vcmRzPWwsRmEoWGQsdGhpcykuVEQ9YSl9ZnVuY3Rpb24gQ2Z0KCl7Y29uc3QgYz1GYShYZCx0aGlzKS5yb3csbD1GYSh6Zyx0aGlzKS5sZW5ndGg7aWYoUDkodjYsdGhpcywhMSks'@;
put 'Y2EodGhpcy5ob3Qucm9vdEVsZW1lbnQsW2pRLHBILHpRXSksdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiZUaSh0aGlzLmhvdC5yb290RWxlbWVudCx6USksbDwxfHx2b2lkIDA9PT1jKXJldHVybjtjb25zdCBhPUZhKHpnLHRoaXMpWzBdLGQ9dGhpcy5ob3Qu'@;
put 'dG9QaHlzaWNhbFJvdyhhKSxoPXRoaXMuZHJhZ1Jvd3MoRmEoemcsdGhpcyksYyk7aWYoRmEoemcsdGhpcykubGVuZ3RoPTAsITA9PT1oKXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpO2NvbnN0'@;
put 'IGY9dGhpcy5ob3QudG9WaXN1YWxSb3coZCk7dGhpcy5ob3Quc2VsZWN0Um93cyhmLGYrbC0xKX19ZnVuY3Rpb24gU2Z0KCl7Y29uc3QgYz10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGQ9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpK2MuaG9sZGVy'@;
put 'LnNjcm9sbExlZnQ7RmEobmQsdGhpcykuc2V0UG9zaXRpb24obnVsbCxkKSxGYShuZCx0aGlzKS5zZXRTaXplKGMuaGlkZXIub2Zmc2V0V2lkdGgtZCl9ZnVuY3Rpb24gTWZ0KCl7dGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpfWZ1bmN0aW9uIFMxKGMsbCxhKXtsbWUoYyxsKSxsLnNldChj'@;
put 'LGEpfWZ1bmN0aW9uIGxtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gJGMoYyxsLGEpe3JldHVybiBjLnNldChVZyhjLGwpLGEpLGF9'@;
put 'ZnVuY3Rpb24geG8oYyxsKXtyZXR1cm4gYy5nZXQoVWcoYyxsKSl9ZnVuY3Rpb24gVWcoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBp'@;
put 'cyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IG1IPSJtYW51YWxSb3dSZXNpemUiLGNtZT0ibWFudWFsUm93SGVpZ2h0cyI7dmFyICRwPW5ldyBXZWFrTWFwLHZIPW5ldyBXZWFrTWFwLHpoPW5ldyBXZWFrTWFwLGxBPW5ldyBXZWFrTWFwLGI2PW5ldyBXZWFrTWFwLFVRPW5l'@;
put 'dyBXZWFrTWFwLHB3PW5ldyBXZWFrTWFwLGJIPW5ldyBXZWFrTWFwLHJkPW5ldyBXZWFrTWFwLEtwPW5ldyBXZWFrTWFwLEg5PW5ldyBXZWFrTWFwLHlIPW5ldyBXZWFrTWFwLGNBPW5ldyBXZWFrTWFwLHVBPW5ldyBXZWFrTWFwLF8zPW5ldyBXZWFrTWFwLGRBPW5ldyBXZWFrTWFwLHk2PW5l'@;
put 'dyBXZWFrU2V0O2NsYXNzIFRmdCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBtSH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiB4ZnQoYyxsKXtsbWUoYyxsKSxsLmFkZChjKX0o'@;
put 'dGhpcyx5NiksUzEodGhpcywkcCxudWxsKSxTMSh0aGlzLHZILG51bGwpLFMxKHRoaXMsemgsW10pLFMxKHRoaXMsbEEsbnVsbCksUzEodGhpcyxiNixudWxsKSxTMSh0aGlzLFVRLG51bGwpLFMxKHRoaXMscHcsbnVsbCksUzEodGhpcyxiSCxudWxsKSxTMSh0aGlzLHJkLHRoaXMuaG90LnJv'@;
put 'b3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksUzEodGhpcyxLcCx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIikpLFMxKHRoaXMsSDksITEpLFMxKHRoaXMseUgsITEpLFMxKHRoaXMsY0EsMCksUzEodGhpcyx1QSxudWxsKSxTMSh0aGlzLF8zLHZvaWQg'@;
put 'MCksUzEodGhpcyxkQSx2b2lkIDApLFRpKHhvKHJkLHRoaXMpLCJtYW51YWxSb3dSZXNpemVyIiksVGkoeG8oS3AsdGhpcyksIm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXtyZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXty'@;
put 'ZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVttSF19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwoJGMoXzMsdGhpcyxuZXcgVW0pLHhvKF8zLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PlVnKHk2LHRoaXMsT2Z0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1h'@;
put 'cHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUseG8oXzMsdGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwobCxhKT0+VWcoeTYsdGhpcyxMZnQpLmNhbGwodGhpcyxsLGEpKSx0aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1'@;
put 'Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7JGMoZEEsdGhpcyx4byhfMyx0aGlzKS5nZXRWYWx1ZXMoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBs'@;
put 'dWdpbk5hbWUpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1zYXZlTWFudWFsUm93SGVpZ2h0cygpe3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIixjbWUseG8oXzMsdGhpcykuZ2V0VmFsdWVzKCkpfWxvYWRNYW51YWxSb3dIZWlnaHRzKCl7Y29uc3QgbD17fTtyZXR1cm4g'@;
put 'dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLGNtZSxsKSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD1NYXRoLm1heChhLHRoaXMuaG90LnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKTtyZXR1cm4g'@;
put 'eG8oXzMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsaCksaH1nZXRMYXN0RGVzaXJlZFJvd0hlaWdodCgpe3JldHVybiB4byhsQSx0aGlzKX1zZXR1cEhhbmRsZVBvc2l0aW9uKGwpeyRjKCRwLHRoaXMsbCk7Y29uc3R7dmlldzphfT10aGlzLmhvdCx7X3d0OmR9PWEsaD1kLnd0VGFibGUuZ2V0'@;
put 'Q29vcmRzKHhvKCRwLHRoaXMpKSxmPWgucm93O2lmKGY8MClyZXR1cm47Y29uc3Qgdj1hdSh4bygkcCx0aGlzKSksTT14bygkcCx0aGlzKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxEPWY8ZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxaPWY+PWEuY291bnROb3RIaWRkZW5Sb3dJbmRl'@;
put 'eGVzKDAsMSktZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKTtsZXQgbmU7RD9uZT1kLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKHhvKCRwLHRoaXMpLGgucm93LGguY29sKTpaJiYobmU9ZC53dE92ZXJsYXlzLmJv'@;
put 'dHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih4bygkcCx0aGlzKSxoLnJvdyxoLmNvbCkpLG5lfHwobmU9ZC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbih4bygkcCx0aGlzKSxoLnJvdyxoLmNv'@;
put 'bCkpLCRjKHZILHRoaXMsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSksJGMoemgsdGhpcyxbXSk7Y29uc3QgY2U9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3Rl'@;
put 'ZEJ5Um93SGVhZGVyKCk7dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSYmY2UmJlluKHRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2UoKSxFZT0+eyRvKEVlLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93LEVlLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCkucm93LHJ0PT57eG8oemgsdGhpcyku'@;
put 'aW5jbHVkZXMocnQpfHx4byh6aCx0aGlzKS5wdXNoKHJ0KX0pfSkseG8oemgsdGhpcykuaW5jbHVkZXMoeG8odkgsdGhpcykpfHwkYyh6aCx0aGlzLFt4byh2SCx0aGlzKV0pLCRjKGJILHRoaXMsbmUudG9wLTYpLCRjKHB3LHRoaXMscGFyc2VJbnQoTS5oZWlnaHQsMTApKSx4byhyZCx0aGlz'@;
put 'KS5zdHlsZS50b3A9YCR7eG8oYkgsdGhpcykreG8ocHcsdGhpcyl9cHhgLHhvKHJkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHtuZS5zdGFydH1weGAseG8ocmQsdGhpcykuc3R5bGUud2lkdGg9YCR7dn1weGAsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoeG8ocmQs'@;
put 'dGhpcykpfXJlZnJlc2hIYW5kbGVQb3NpdGlvbigpe3hvKHJkLHRoaXMpLnN0eWxlLnRvcD1gJHt4byhiSCx0aGlzKSt4byhsQSx0aGlzKX1weGB9c2V0dXBHdWlkZVBvc2l0aW9uKCl7Y29uc3QgbD1wYXJzZUludChhdSh4byhyZCx0aGlzKSksMTApLGE9cGFyc2VJbnQoeG8ocmQsdGhpcyku'@;
put 'c3R5bGVbdGhpcy5pbmxpbmVEaXJdLDEwKStsLGQ9dGhpcy5ob3Qudmlldy5nZXRUYWJsZVdpZHRoKCk7VGkoeG8ocmQsdGhpcyksImFjdGl2ZSIpLFRpKHhvKEtwLHRoaXMpLCJhY3RpdmUiKSx4byhLcCx0aGlzKS5zdHlsZS50b3A9eG8ocmQsdGhpcykuc3R5bGUudG9wLHhvKEtwLHRoaXMp'@;
put 'LnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHthfXB4YCx4byhLcCx0aGlzKS5zdHlsZS53aWR0aD1kLWwrInB4Iix0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh4byhLcCx0aGlzKSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXt4byhLcCx0aGlzKS5zdHlsZS50b3A9eG8ocmQsdGhp'@;
put 'cykuc3R5bGUudG9wfWhpZGVIYW5kbGVBbmRHdWlkZSgpe2NhKHhvKHJkLHRoaXMpLCJhY3RpdmUiKSxjYSh4byhLcCx0aGlzKSwiYWN0aXZlIil9Y2hlY2tJZlJvd0hlYWRlcihsKXtjb25zdCBhPUltKGwsWyJUQk9EWSJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSx7aW5saW5lU3RhcnRPdmVy'@;
put 'bGF5OmQsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmgsYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmZ9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7cmV0dXJuW2QuY2xvbmUud3RUYWJsZS5UQk9EWSxoLmNsb25lLnd0VGFibGUuVEJPRFksZi5jbG9uZS53dFRhYmxl'@;
put 'LlRCT0RZXS5pbmNsdWRlcyhhKX1nZXRDbG9zZXN0VEhQYXJlbnQobCl7cmV0dXJuIlRBQkxFIiE9PWwudGFnTmFtZT8iVEgiPT09bC50YWdOYW1lP2w6dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC5wYXJlbnROb2RlKTpudWxsfWdldEFjdHVhbFJvd0hlaWdodChsKXtjb25zdCBhPXRoaXMu'@;
put 'aG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0KGwpO3JldHVybiB2b2lkIDAhPT1hJiZ4byhiNix0aGlzKTxhP2E6eG8oYjYsdGhpcyl9YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVu'@;
put 'dHNTaXplKCl9LGE9KGQsaCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApO3ZvaWQgMCE9PWYmJiRjKGI2LHRoaXMsZiksdGhpcy5zZXRNYW51YWxTaXplKGQseG8oYjYsdGhpcykpLHRoaXMuaG90'@;
put 'LnJ1bkhvb2tzKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMCksaCYmbCgpfTt4byhjQSx0aGlzKT49MiYmKHhvKHpoLHRoaXMpLmxlbmd0aD4xPyhZbih4byh6aCx0aGlzKSxoPT57YShoKX0pLGwoKSk6WW4oeG8oemgsdGhpcyksaD0+e2EoaCwhMCl9'@;
put 'KSksJGMoY0EsdGhpcywwKSwkYyh1QSx0aGlzLG51bGwpfWJpbmRFdmVudHMoKXtjb25zdHtyb290RWxlbWVudDpsLHJvb3RXaW5kb3c6YX09dGhpcy5ob3Q7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW92ZXIiLGQ9PlVnKHk2LHRoaXMsQWZ0KS5jYWxsKHRo'@;
put 'aXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIixkPT5VZyh5Nix0aGlzLGtmdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlbW92ZSIsZD0+VWcoeTYsdGhpcyxEZnQpLmNhbGwodGhp'@;
put 'cyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIiwoKT0+VWcoeTYsdGhpcyxJZnQpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoeG8ocmQsdGhpcyksImNvbnRleHRtZW51IiwoKT0+VWcoeTYsdGhpcyxSZnQp'@;
put 'LmNhbGwodGhpcykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEFmdChjKXtpZighTSQoYy50YXJnZXQpJiYhMCE9PXhvKHlILHRoaXMpJiZ0aGlzLmNoZWNrSWZSb3dIZWFkZXIoYy50YXJnZXQpKXtjb25zdCBsPXRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGMudGFyZ2V0'@;
put 'KTtsJiYoeG8oSDksdGhpcyl8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihsKSl9fWZ1bmN0aW9uIGtmdChjKXtwYShjLnRhcmdldCwibWFudWFsUm93UmVzaXplciIpJiYodGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKHhvKCRwLHRoaXMpKSx0aGlzLnNldHVwR3VpZGVQb3NpdGlvbigpLCRj'@;
put 'KEg5LHRoaXMsITApLG51bGw9PT14byh1QSx0aGlzKSYmKCRjKHVBLHRoaXMsc2V0VGltZW91dCgoKT0+dGhpcy5hZnRlck1vdXNlRG93blRpbWVvdXQoKSw1MDApKSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KHhvKHVBLHRoaXMpKSksJGMoY0EsdGhpcyx4byhjQSx0aGlzKSsxKSwkYyhV'@;
put 'USx0aGlzLGMucGFnZVkpLCRjKGI2LHRoaXMseG8ocHcsdGhpcykpKX1mdW5jdGlvbiBEZnQoYyl7eG8oSDksdGhpcykmJigkYyhsQSx0aGlzLHhvKHB3LHRoaXMpKyhjLnBhZ2VZLXhvKFVRLHRoaXMpKSksWW4oeG8oemgsdGhpcyksbD0+eyRjKGI2LHRoaXMsdGhpcy5zZXRNYW51YWxTaXpl'@;
put 'KGwseG8obEEsdGhpcykpKX0pLHRoaXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpKX1mdW5jdGlvbiBJZnQoKXtjb25zdCBjPSgpPT57dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0sbD0oYSxk'@;
put 'KT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGEpLGEsITEpLGQmJmMoKSx0aGlzLnNhdmVNYW51YWxSb3dIZWlnaHRzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdo'@;
put 'dChhKSxhLCExKX07eG8oSDksdGhpcykmJih0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLCRjKEg5LHRoaXMsITEpLHhvKGI2LHRoaXMpIT09eG8ocHcsdGhpcykmJih4byh6aCx0aGlzKS5sZW5ndGg+MT8oWW4oeG8oemgsdGhpcyksZD0+e2woZCl9KSxjKCkpOlluKHhvKHpoLHRoaXMpLGQ9'@;
put 'PntsKGQsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbih4bygkcCx0aGlzKSkpfWZ1bmN0aW9uIFJmdCgpe3RoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoeG8ocmQsdGhpcykpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92'@;
put 'ZUNoaWxkKHhvKEtwLHRoaXMpKSwkYyhIOSx0aGlzLCExKSwkYyh5SCx0aGlzLCEwKSx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9PnskYyh5SCx0aGlzLCExKX0pfWZ1bmN0aW9uIExmdChjLGwpe2xldCBhPWM7aWYodGhpcy5lbmFibGVkKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5'@;
put 'c2ljYWxSb3cobCksaD14byhfMyx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgoZCk7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVttSF0mJmgmJihhPWgpfXJldHVybiBhfWZ1bmN0aW9uIE9mdCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVttSF0sbD10aGlzLmxvYWRNYW51YWxSb3dIZWln'@;
put 'aHRzKCk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0eXBlb2YgbDwidSI/bC5mb3JFYWNoKChhLGQpPT57eG8oXzMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KTpBcnJheS5pc0FycmF5KGMpPyhjLmZvckVhY2goKGEsZCk9Pnt4byhfMyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgo'@;
put 'ZCxhKX0pLCRjKGRBLHRoaXMsYykpOiEwPT09YyYmQXJyYXkuaXNBcnJheSh4byhkQSx0aGlzKSkmJnhvKGRBLHRoaXMpLmZvckVhY2goKGEsZCk9Pnt4byhfMyx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCl9ZnVuY3Rpb24gTjkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEhm'@;
put 'dChjKXt2YXIgbD1mdW5jdGlvbiBOZnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4g'@;
put 'ZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHVtZShjLGwpe3JldHVybiBjLmdldChkbWUoYyxsKSl9ZnVuY3Rpb24gX0goYyxsLGEpe3JldHVybiBjLnNldChkbWUoYyxs'@;
put 'KSxhKSxhfWZ1bmN0aW9uIGRtZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9'@;
put 'Xyg2ODE0NiksXyg3NDk5KTt2YXIgVjk9bmV3IFdlYWtNYXA7Y29uc3QgcXA9Y2xhc3MgVmZ0e2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtOOSh0aGlzLCJyb3ciLHZvaWQgMCksTjkodGhpcywiY29sIix2b2lkIDApLE45KHRoaXMsInJvd3NwYW4iLHZvaWQgMCksTjkodGhpcywiY29sc3Bh'@;
put 'biIsdm9pZCAwKSxOOSh0aGlzLCJyZW1vdmVkIiwhMSksTjkodGhpcywiY2VsbENvb3Jkc0ZhY3RvcnkiLHZvaWQgMCksTjkodGhpcywiY2VsbFJhbmdlRmFjdG9yeSIsdm9pZCAwKSxmdW5jdGlvbiBQZnQoYyxsLGEpeyhmdW5jdGlvbiBGZnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcg'@;
put 'VHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLFY5LG51bGwpLHRoaXMucm93PWwsdGhpcy5jb2w9YSx0aGlzLnJvd3NwYW49ZCx0aGlzLmNvbHNwYW49aCx0aGlz'@;
put 'LmNlbGxDb29yZHNGYWN0b3J5PWYsdGhpcy5jZWxsUmFuZ2VGYWN0b3J5PXZ9c3RhdGljIE5FR0FUSVZFX1ZBTFVFU19XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZCxyb3dzcGFuOmgsY29sc3BhbjpmfT1sO3JldHVybiBnbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgd2l0aCB7cm93OiAk'@;
put 'e2F9LCBjb2w6ICR7ZH0sXHgyMAogICAgICByb3dzcGFuOiAke2h9LCBjb2xzcGFuOiAke2Z9fSBjb250YWlucyBuZWdhdGl2ZSB2YWx1ZXMsIHdoaWNoIGlzXHgyMAogICAgICBub3Qgc3VwcG9ydGVkLiBJdCB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBJ'@;
put 'U19PVVRfT0ZfQk9VTkRTX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBnbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGlzIHBvc2l0aW9uZWRceDIwCiAgICAgIChvciBwb3NpdGlvbmVkIHBhcnRpYWxseSkgb3V0c2lkZSBvZiB0aGUgdGFi'@;
put 'bGUgcmFuZ2UuIEl0IHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2UgZml4IHlvdXIgc2V0dXAuYH1zdGF0aWMgSVNfU0lOR0xFX0NFTEwobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBnbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGhhcyBi'@;
put 'b3RoICJyb3dzcGFuIlx4MjAKICAgICAgYW5kICJjb2xzcGFuIiBkZWNsYXJlZCBhcyAiMSIsIHdoaWNoIG1ha2VzIGl0IGEgc2luZ2xlIGNlbGwuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBaRVJPX1NQQU5fV0FSTklORyhsKXtsZXR7cm93OmEsY29s'@;
put 'OmR9PWw7cmV0dXJuIGdsYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0gaGFzICJyb3dzcGFuIlx4MjAKICAgICAgb3IgImNvbHNwYW4iIGRlY2xhcmVkIGFzICIwIiwgd2hpY2ggaXMgbm90IHN1cHBvcnRlZC4gSXQgY2Fubm90IGJlIGFkZGVkIHRvIHRoZSBjb2xs'@;
put 'ZWN0aW9uLmB9c3RhdGljIGNvbnRhaW5zTmVnYXRpdmVWYWx1ZXMobCl7bGV0e3JvdzphLGNvbDpkLHJvd3NwYW46aCxjb2xzcGFuOmZ9PWw7cmV0dXJuIGE8MHx8ZDwwfHxoPDB8fGY8MH1zdGF0aWMgaXNTaW5nbGVDZWxsKGwpe2xldHtyb3dzcGFuOmEsY29sc3BhbjpkfT1sO3JldHVybiAx'@;
put 'PT09ZCYmMT09PWF9c3RhdGljIGNvbnRhaW5zWmVyb1NwYW4obCl7bGV0e3Jvd3NwYW46YSxjb2xzcGFuOmR9PWw7cmV0dXJuIDA9PT1kfHwwPT09YX1zdGF0aWMgaXNPdXRPZkJvdW5kcyhsLGEsZCl7cmV0dXJuIGwucm93PDB8fGwuY29sPDB8fGwucm93Pj1hfHxsLnJvdytsLnJvd3NwYW4t'@;
put 'MT49YXx8bC5jb2w+PWR8fGwuY29sK2wuY29sc3Bhbi0xPj1kfW5vcm1hbGl6ZShsKXtjb25zdCBhPWwuY291bnRSb3dzKCksZD1sLmNvdW50Q29scygpO3RoaXMucm93PDA/dGhpcy5yb3c9MDp0aGlzLnJvdz5hLTEmJih0aGlzLnJvdz1hLTEpLHRoaXMuY29sPDA/dGhpcy5jb2w9MDp0aGlz'@;
put 'LmNvbD5kLTEmJih0aGlzLmNvbD1kLTEpLHRoaXMucm93K3RoaXMucm93c3Bhbj5hLTEmJih0aGlzLnJvd3NwYW49YS10aGlzLnJvdyksdGhpcy5jb2wrdGhpcy5jb2xzcGFuPmQtMSYmKHRoaXMuY29sc3Bhbj1kLXRoaXMuY29sKSxfSChWOSx0aGlzLG51bGwpfWluY2x1ZGVzKGwsYSl7cmV0'@;
put 'dXJuIHRoaXMucm93PD1sJiZ0aGlzLmNvbDw9YSYmdGhpcy5yb3crdGhpcy5yb3dzcGFuLTE+PWwmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj1hfWluY2x1ZGVzSG9yaXpvbnRhbGx5KGwpe3JldHVybiB0aGlzLmNvbDw9bCYmdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE+PWx9aW5jbHVkZXNW'@;
put 'ZXJ0aWNhbGx5KGwpe3JldHVybiB0aGlzLnJvdzw9bCYmdGhpcy5yb3crdGhpcy5yb3dzcGFuLTE+PWx9c2hpZnQobCxhKXtjb25zdCBkPWxbMF18fGxbMV0saD1hK01hdGguYWJzKGxbMF18fGxbMV0pLTEsZj1sWzBdPyJjb2xzcGFuIjoicm93c3BhbiIsdj1sWzBdPyJjb2wiOiJyb3ciLE09'@;
put 'TWF0aC5taW4oYSxoKSxEPU1hdGgubWF4KGEsaCksWj10aGlzW3ZdLG5lPXRoaXNbdl0rdGhpc1tmXS0xO2lmKFo+PWEmJih0aGlzW3ZdKz1kKSxkPjApYTw9bmUmJmE+WiYmKHRoaXNbZl0rPWQpO2Vsc2UgaWYoZDwwKXtpZihNPD1aJiZEPj1uZSlyZXR1cm4gdGhpcy5yZW1vdmVkPSEwLF9I'@;
put 'KFY5LHRoaXMsbnVsbCksITE7aWYoWj49TSYmWjw9RCl7Y29uc3QgY2U9RC1aKzEsYmU9TWF0aC5hYnMoZCktY2U7dGhpc1t2XS09YmUrZCx0aGlzW2ZdLT1jZX1lbHNlIFo8PU0mJm5lPj1EP3RoaXNbZl0rPWQ6Wjw9TSYmbmU+PU0mJm5lPEQmJih0aGlzW2ZdLT1uZS1NKzEpfXJldHVybiBf'@;
put 'SChWOSx0aGlzLG51bGwpLCEwfWlzRmFydGhlcihsLGEpe3JldHVybiFsfHwoImRvd24iPT09YT9sLnJvdytsLnJvd3NwYW4tMTx0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMToidXAiPT09YT9sLnJvdz50aGlzLnJvdzoicmlnaHQiPT09YT9sLmNvbCtsLmNvbHNwYW4tMTx0aGlzLmNvbCt0aGlz'@;
put 'LmNvbHNwYW4tMToibGVmdCI9PT1hP2wuY29sPnRoaXMuY29sOm51bGwpfWdldExhc3RSb3coKXtyZXR1cm4gdGhpcy5yb3crdGhpcy5yb3dzcGFuLTF9Z2V0TGFzdENvbHVtbigpe3JldHVybiB0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMX1nZXRSYW5nZSgpe3JldHVybiB1bWUoVjksdGhpcyl8'@;
put 'fF9IKFY5LHRoaXMsdGhpcy5jZWxsUmFuZ2VGYWN0b3J5KHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5yb3csdGhpcy5jb2wpLHRoaXMuY2VsbENvb3Jkc0ZhY3RvcnkodGhpcy5nZXRMYXN0Um93KCksdGhpcy5n'@;
put 'ZXRMYXN0Q29sdW1uKCkpKSksdW1lKFY5LHRoaXMpfX07ZnVuY3Rpb24gd0goYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHpmdChjKXt2YXIgbD1mdW5jdGlvbiBVZnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtp'@;
put 'Zih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3Ry'@;
put 'aW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9u'@;
put 'IEI5KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgXzY9bmV3IFdlYWtT'@;
put 'ZXQ7Y2xhc3MgQ0h7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIEJmdChjLGwpeyhmdW5jdGlvbiBqZnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSko'@;
put 'YyxsKSxsLmFkZChjKX0pKHRoaXMsXzYpLHdIKHRoaXMsInBsdWdpbiIsdm9pZCAwKSx3SCh0aGlzLCJtZXJnZWRDZWxscyIsW10pLHdIKHRoaXMsIm1lcmdlZENlbGxzTWF0cml4IixuZXcgTWFwKSx3SCh0aGlzLCJob3QiLHZvaWQgMCksdGhpcy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdH1z'@;
put 'dGF0aWMgSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhsKXtsZXR7cm93OmEsY29sOmR9PWw7cmV0dXJuIGdsYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHthfSwgJHtkfV0sIG92ZXJsYXBzXHgyMAogICAgICB3aXRoIHRoZSBvdGhlciBkZWNsYXJlZCBtZXJnZWQgY2VsbC4gVGhlIG92'@;
put 'ZXJsYXBwaW5nIG1lcmdlZCBjZWxsIHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2VceDIwCiAgICAgIGZpeCB5b3VyIHNldHVwLmB9Z2V0KGwsYSl7dmFyIGQ7cmV0dXJuISghdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5oYXMobCl8fG51bGw9PT0oZD10aGlzLm1lcmdlZENlbGxz'@;
put 'TWF0cml4LmdldChsKS5nZXQoYSkpfHx2b2lkIDA9PT1kKSYmZH1nZXRCeVJhbmdlKGwpe2NvbnN0e3JvdzphLGNvbDpkfT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkse3JvdzpoLGNvbDpmfT1sLmdldEJvdHRvbUVuZENvcm5lcigpLHY9dGhpcy5tZXJnZWRDZWxscy5sZW5ndGg7bGV0IE09ITE7'@;
put 'Zm9yKGxldCBEPTA7RDx2O0QrKyl7Y29uc3QgWj10aGlzLm1lcmdlZENlbGxzW0RdLHtyb3c6bmUsY29sOmNlLHJvd3NwYW46YmUsY29sc3BhbjpFZX09WjtpZihuZT49YSYmbmUrYmUtMTw9aCYmY2U+PWQmJmNlK0VlLTE8PWYpe009WjticmVha319cmV0dXJuIE19ZmlsdGVyT3ZlcmxhcHBp'@;
put 'bmdNZXJnZUNlbGxzKGwpe2NvbnN0IGE9bmV3IFNldDtyZXR1cm4gdGhpcy5tZXJnZWRDZWxscy5mb3JFYWNoKGg9Pntjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpEfT1oO2ZvcihsZXQgWj1mO1o8ZitEO1orKylmb3IobGV0IG5lPXY7bmU8ditNO25lKyspYS5hZGQoYHIk'@;
put 'e1p9LGMke25lfWApfSksbC5maWx0ZXIoaD0+e2NvbnN0e3JvdzpmLGNvbDp2LGNvbHNwYW46TSxyb3dzcGFuOkR9PWgsWj1uZXcgU2V0O2xldCBuZT0hMTtmb3IobGV0IGNlPWY7Y2U8ZitEO2NlKyspe2ZvcihsZXQgYmU9djtiZTx2K007YmUrKyl7Y29uc3QgRWU9YHIke2NlfSxjJHtiZX1g'@;
put 'O2lmKGEuaGFzKEVlKSl7aWwoQ0guSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhoKSksbmU9ITA7YnJlYWt9Wi5hZGQoRWUpfWlmKG5lKWJyZWFrfXJldHVybiBuZXx8YS5hZGQoLi4uWiksIW5lfSl9Z2V0V2l0aGluUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1h'@;
put 'cmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdHtyb3c6ZCxjb2w6aH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Zixjb2w6dn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxNPVtdO2ZvcihsZXQgRD1kO0Q8PWY7RCsrKWZvcihsZXQgWj1oO1o8PXY7WisrKXtjb25zdCBuZT10aGlz'@;
put 'LmdldChELFopO25lJiYoYXx8IWEmJm5lLnJvdz09PUQmJm5lLmNvbD09PVopJiZNLnB1c2gobmUpfXJldHVybiBNfWFkZChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9bC5yb3csaD1sLmNvbCxNPW5ldyBx'@;
put 'cChkLGgsbC5yb3dzcGFuLGwuY29sc3Bhbix0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyx0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKSxEPXRoaXMuZ2V0KGQsaCksWj0hYSYmdGhpcy5pc092ZXJsYXBwaW5nKE0pO3JldHVybiBEfHxaPyhaJiZpbChDSC5JU19PVkVSTEFQUElOR19XQVJO'@;
put 'SU5HKE0pKSwhMSk6KHRoaXMuaG90JiZNLm5vcm1hbGl6ZSh0aGlzLmhvdCksdGhpcy5tZXJnZWRDZWxscy5wdXNoKE0pLEI5KF82LHRoaXMsaG1lKS5jYWxsKHRoaXMsTSksTSl9cmVtb3ZlKGwsYSl7Y29uc3QgZD10aGlzLmdldChsLGEpLGg9ZD90aGlzLm1lcmdlZENlbGxzLmluZGV4T2Yo'@;
put 'ZCk6LTE7cmV0dXJuISghZHx8LTE9PT1oKSYmKHRoaXMubWVyZ2VkQ2VsbHMuc3BsaWNlKGgsMSksQjkoXzYsdGhpcyxaZnQpLmNhbGwodGhpcyxkKSxkKX1jbGVhcigpe1luKHRoaXMubWVyZ2VkQ2VsbHMsbD0+e2xldHtyb3c6YSxjb2w6ZCxyb3dzcGFuOmgsY29sc3BhbjpmfT1sOyRvKGEs'@;
put 'YStoLHY9PnskbyhkLGQrZixNPT57Y29uc3QgRD10aGlzLmhvdC5nZXRDZWxsKHYsTSk7RCYmKEQucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksRC5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxELnN0eWxlLmRpc3BsYXk9IiIpfSl9KX0pLHRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoPTAs'@;
put 'dGhpcy5tZXJnZWRDZWxsc01hdHJpeD1uZXcgTWFwfWlzT3ZlcmxhcHBpbmcobCl7Y29uc3QgYT1sLmdldFJhbmdlKCk7Zm9yKGxldCBkPTA7ZDx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aDtkKyspaWYodGhpcy5tZXJnZWRDZWxsc1tkXS5nZXRSYW5nZSgpLm92ZXJsYXBzKGEpKXJldHVybiEw'@;
put 'O3JldHVybiExfWlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtpZighZClyZXR1cm4hMTtjb25zdHtyb3c6aCxjb2w6Zixyb3dzcGFuOnYsY29sc3BhbjpNfT1kLEQ9dGhpcy5ob3Qudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpLFo9WyJ0'@;
put 'b3AiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEQpPzA6dGhpcy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSxuZT1bImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRl'@;
put 'cyhEKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCksY2U9QXMoWixoLGgrdi0xKSxiZT1BcyhuZSxmLGYrTS0xKTtyZXR1cm4gdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLDEpPT09bCYmdGhpcy5ob3QuY29sdW1u'@;
put 'SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGJlLDEpPT09YX1nZXRGaXJzdFJlbmRlcmFibGVDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSk7aWYoIWR8fHRoaXMuaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSkpcmV0dXJuIHRoaXMuaG90Ll9jcmVh'@;
put 'dGVDZWxsQ29vcmRzKGwsYSk7Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5yb3csMSksZj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5jb2wsMSk7cmV0dXJuIHRoaXMuaG90Ll9j'@;
put 'cmVhdGVDZWxsQ29vcmRzKGgsZil9Z2V0U3RhcnRNb3N0Q29sdW1uSW5kZXgobCxhKXtjb25zdCBkPUI5KF82LHRoaXMsU0gpLmNhbGwodGhpcyxsLCJjb2wiLC0xKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl08PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1n'@;
put 'ZXRFbmRNb3N0Q29sdW1uSW5kZXgobCxhKXtjb25zdCBkPUI5KF82LHRoaXMsU0gpLmNhbGwodGhpcyxsLCJjb2wiLDEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXT49YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofWdldFRvcE1vc3RSb3dJbmRleChsLGEpe2Nv'@;
put 'bnN0IGQ9QjkoXzYsdGhpcyxTSCkuY2FsbCh0aGlzLGwsInJvdyIsLTEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXTw9YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofWdldEJvdHRvbU1vc3RSb3dJbmRleChsLGEpe2NvbnN0IGQ9QjkoXzYsdGhpcyxTSCkuY2Fs'@;
put 'bCh0aGlzLGwsInJvdyIsMSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPj1hKXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9c2hpZnRDb2xsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD1bMCwwXTtzd2l0Y2gobCl7Y2FzZSJyaWdodCI6aFswXSs9ZDticmVhaztjYXNl'@;
put 'ImxlZnQiOmhbMF0tPWQ7YnJlYWs7Y2FzZSJkb3duIjpoWzFdKz1kO2JyZWFrO2Nhc2UidXAiOmhbMV0tPWR9Y29uc3QgZj1bXTt0aGlzLm1lcmdlZENlbGxzLmZvckVhY2godj0+e3Yuc2hpZnQoaCxhKSx2LnJlbW92ZWQmJmYucHVzaCh2KX0pLGYuZm9yRWFjaCh2PT57dGhpcy5tZXJnZWRD'@;
put 'ZWxscy5zcGxpY2UodGhpcy5tZXJnZWRDZWxscy5pbmRleE9mKHYpLDEpfSksdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5jbGVhcigpLHRoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaCh2PT57QjkoXzYsdGhpcyxobWUpLmNhbGwodGhpcyx2KX0pfX1mdW5jdGlvbiBTSChjLGwpe2xldCBhPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO2NvbnN0IGQ9bmV3IE1hcCxoPTE9PT1hP2MuZ2V0VG9wU3RhcnRDb3JuZXIoKTpjLmdldEJvdHRvbUVuZENvcm5lcigpLGY9MT09PWE/Yy5nZXRCb3R0b21FbmRDb3JuZXIoKTpjLmdldFRvcFN0YXJ0'@;
put 'Q29ybmVyKCk7Zm9yKGxldCB2PWgucm93OzE9PT1hP3Y8PWYucm93OnY+PWYucm93O3YrPWEpZm9yKGxldCBNPWguY29sOzE9PT1hP008PWYuY29sOk0+PWYuY29sO00rPWEpe2NvbnN0IEQ9InJvdyI9PT1sP3Y6TSxaPXRoaXMuZ2V0KHYsTSk7bGV0IG5lPUQ7WiYmKG5lPTE9PT1hP1pbbF0r'@;
put 'WltgJHtsfXNwYW5gXS0xOlpbbF0pLGQuaGFzKEQpfHxkLnNldChELG5ldyBTZXQpLGQuZ2V0KEQpLmFkZChuZSl9cmV0dXJuIEFycmF5LmZyb20obmV3IFNldChBcnJheS5mcm9tKGQuZW50cmllcygpKS5maWx0ZXIodj0+e2xldFssTV09djtyZXR1cm4gMT09PU0uc2l6ZX0pLmZsYXRNYXAo'@;
put 'dj0+e2xldFssTV09djtyZXR1cm4gQXJyYXkuZnJvbShNKX0pKSl9ZnVuY3Rpb24gaG1lKGMpe2ZvcihsZXQgbD1jLnJvdztsPGMucm93K2Mucm93c3BhbjtsKyspZm9yKGxldCBhPWMuY29sO2E8Yy5jb2wrYy5jb2xzcGFuO2ErKyl0aGlzLm1lcmdlZENlbGxzTWF0cml4LmhhcyhsKXx8dGhp'@;
put 'cy5tZXJnZWRDZWxsc01hdHJpeC5zZXQobCxuZXcgTWFwKSx0aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldChsKS5zZXQoYSxjKX1mdW5jdGlvbiBaZnQoYyl7Zm9yKGxldCBsPWMucm93O2w8Yy5yb3crYy5yb3dzcGFuO2wrKylmb3IobGV0IGE9Yy5jb2w7YTxjLmNvbCtjLmNvbHNwYW47YSsr'@;
put 'KXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguZ2V0KGwpLmRlbGV0ZShhKX1jb25zdCBXZnQ9Q0g7ZnVuY3Rpb24gWlEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFlmdChjKXt2YXIgbD1mdW5jdGlvbiBHZnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNb'@;
put 'U3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJl'@;
put 'dHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZToh'@;
put 'MH0pOmNbbF09YSxjfWNvbnN0IEtmdD1jbGFzcyAkZnR7Y29uc3RydWN0b3IobCl7WlEodGhpcywicGx1Z2luIix2b2lkIDApLFpRKHRoaXMsIm1lcmdlZENlbGxzQ29sbGVjdGlvbiIsdm9pZCAwKSxaUSh0aGlzLCJjdXJyZW50RmlsbERhdGEiLG51bGwpLHRoaXMucGx1Z2luPWwsdGhpcy5t'@;
put 'ZXJnZWRDZWxsc0NvbGxlY3Rpb249dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9ufWdldERpcmVjdGlvbihsLGEpe2xldCBkPW51bGw7cmV0dXJuIGQ9YVswXT09PWxbMF0mJmFbMV09PT1sWzFdJiZhWzNdPT09bFszXT8iZG93biI6YVsyXT09PWxbMl0mJmFbMV09PT1sWzFdJiZh'@;
put 'WzNdPT09bFszXT8idXAiOmFbMV09PT1sWzFdJiZhWzJdPT09bFsyXT8icmlnaHQiOiJsZWZ0IixkfXNuYXBEcmFnQXJlYShsLGEsZCxoKXtjb25zdCBmPWEuc2xpY2UoMCksdj10aGlzLmdldEF1dG9maWxsU2l6ZShsLGEsZCksW00sRCxaLG5lXT1sLGJlPVsidXAiLCJkb3duIl0uaW5kZXhP'@;
put 'ZihkKT4tMT9aLU0rMTpuZS1EKzEsQmU9di1NYXRoLmZsb29yKHYvYmUpKmJlLHFlPXRoaXMuZ2V0RmFydGhlc3RDb2xsZWN0aW9uKGwsYSxkLGgpO2lmKHFlKWlmKCJkb3duIj09PWQpe2NvbnN0IHJ0PXFlLnJvdytxZS5yb3dzcGFuLU0tQmU7ZlsyXStydD49dGhpcy5wbHVnaW4uaG90LmNv'@;
put 'dW50Um93cygpP2ZbMl0tPUJlOmZbMl0rPUJlP3J0OjB9ZWxzZSBpZigicmlnaHQiPT09ZCl7Y29uc3QgcnQ9cWUuY29sK3FlLmNvbHNwYW4tRC1CZTtmWzNdK3J0Pj10aGlzLnBsdWdpbi5ob3QuY291bnRDb2xzKCk/ZlszXS09QmU6ZlszXSs9QmU/cnQ6MH1lbHNlIGlmKCJ1cCI9PT1kKXtj'@;
put 'b25zdCBydD1aLUJlLXFlLnJvdysxO2ZbMF0rcnQ8MD9mWzBdKz1CZTpmWzBdLT1CZT9ydDowfWVsc2UgaWYoImxlZnQiPT09ZCl7Y29uc3QgcnQ9bmUtQmUtcWUuY29sKzE7ZlsxXStydDwwP2ZbMV0rPUJlOmZbMV0tPUJlP3J0OjB9cmV0dXJuIHRoaXMudXBkYXRlQ3VycmVudEZpbGxDYWNo'@;
put 'ZSh7YmFzZUFyZWE6bCxkcmFnRGlyZWN0aW9uOmQsZm91bmRNZXJnZWRDZWxsczpoLGZpbGxTaXplOnYsZHJhZ0FyZWE6ZixjeWNsZUxlbmd0aDpiZX0pLGZ9dXBkYXRlQ3VycmVudEZpbGxDYWNoZShsKXt0aGlzLmN1cnJlbnRGaWxsRGF0YXx8KHRoaXMuY3VycmVudEZpbGxEYXRhPXt9KSx4'@;
put 'dSh0aGlzLmN1cnJlbnRGaWxsRGF0YSxsKX1nZXRBdXRvZmlsbFNpemUobCxhLGQpe2NvbnN0W2gsZix2LE1dPWwsW0QsWixuZSxjZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuIGgtRDtjYXNlImRvd24iOnJldHVybiBuZS12O2Nhc2UibGVmdCI6cmV0dXJuIGYtWjtjYXNlInJpZ2h0'@;
put 'IjpyZXR1cm4gY2UtTTtkZWZhdWx0OnJldHVybiBudWxsfX1nZXREcmFnQXJlYShsLGEsZCl7Y29uc3RbaCxmLHYsTV09bCxbRCxaLG5lLGNlXT1hO3N3aXRjaChkKXtjYXNlInVwIjpyZXR1cm5bRCxaLGgtMSxNXTtjYXNlImRvd24iOntjb25zdCBiZT10aGlzLm1lcmdlZENlbGxzQ29sbGVj'@;
put 'dGlvbi5nZXQobmUsTSk7cmV0dXJuW3YrMSxmLG5lKyhiZT9iZS5yb3dzcGFuLTE6MCksTV19Y2FzZSJsZWZ0IjpyZXR1cm5bRCxaLHYsZi0xXTtjYXNlInJpZ2h0Ijp7Y29uc3QgYmU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KG5lLE0pO3JldHVybltoLE0rKGJlP2JlLmNvbHNw'@;
put 'YW4tMTowKSxuZSxjZV19ZGVmYXVsdDpyZXR1cm4gbnVsbH19Z2V0RmFydGhlc3RDb2xsZWN0aW9uKGwsYSxkLGgpe2NvbnN0W2YsdixNLERdPWwsWj1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTEsbmU9Wj9NOkQsY2U9Wj9mOnYsYmU9dGhpcy5nZXRBdXRvZmlsbFNpemUobCxhLGQpLEVl'@;
put 'PVo/TS1mKzE6RC12KzEscWU9YmUtTWF0aC5mbG9vcihiZS9FZSkqRWU7bGV0IHJ0PW51bGwscHQ9bnVsbCxkdD1udWxsO3N3aXRjaChkKXtjYXNlInVwIjpydD0iaW5jbHVkZXNWZXJ0aWNhbGx5IixkdD1uZS1xZSsxO2JyZWFrO2Nhc2UibGVmdCI6cnQ9ImluY2x1ZGVzSG9yaXpvbnRhbGx5'@;
put 'IixkdD1uZS1xZSsxO2JyZWFrO2Nhc2UiZG93biI6cnQ9ImluY2x1ZGVzVmVydGljYWxseSIsZHQ9Y2UrcWUtMTticmVhaztjYXNlInJpZ2h0IjpydD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLGR0PWNlK3FlLTF9cmV0dXJuIFluKGgsSnQ9PntKdFtydF0oZHQpJiZKdC5pc0ZhcnRoZXIocHQs'@;
put 'ZCkmJihwdD1KdCl9KSxwdH1yZWNyZWF0ZUFmdGVyRGF0YVBvcHVsYXRpb24obCl7aWYoIXRoaXMuY3VycmVudEZpbGxEYXRhKXJldHVybjtjb25zdCBhPXRoaXMuZ2V0UmFuZ2VGcm9tQ2hhbmdlcyhsKSxkPXRoaXMuY3VycmVudEZpbGxEYXRhLmZvdW5kTWVyZ2VkQ2VsbHMsaD10aGlzLmN1'@;
put 'cnJlbnRGaWxsRGF0YS5kcmFnRGlyZWN0aW9uLGY9KFosbmUpPT57c3dpdGNoKGgpe2Nhc2UidXAiOnJldHVybiBaLnJvdy1uZT49YS5mcm9tLnJvdztjYXNlImRvd24iOnJldHVybiBaLnJvdytaLnJvd3NwYW4tMStuZTw9YS50by5yb3c7Y2FzZSJsZWZ0IjpyZXR1cm4gWi5jb2wtbmU+PWEu'@;
put 'ZnJvbS5jb2x1bW47Y2FzZSJyaWdodCI6cmV0dXJuIFouY29sK1ouY29sc3Bhbi0xK25lPD1hLnRvLmNvbHVtbjtkZWZhdWx0OnJldHVybiBudWxsfX07bGV0IHY9MCxNPW51bGwsRD0xO2Rve2ZvcihsZXQgWj0wO1o8ZC5sZW5ndGg7Wis9MSl7aWYoTT1kW1pdLHY9RCp0aGlzLmN1cnJlbnRG'@;
put 'aWxsRGF0YS5jeWNsZUxlbmd0aCxmKE0sdikpc3dpdGNoKGgpe2Nhc2UidXAiOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdy12LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCxjb2xzcGFuOk0uY29sc3Bhbn0sITApO2JyZWFrO2Nhc2UiZG93biI6'@;
put 'dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93K3Yscm93c3BhbjpNLnJvd3NwYW4sY29sOk0uY29sLGNvbHNwYW46TS5jb2xzcGFufSwhMCk7YnJlYWs7Y2FzZSJsZWZ0Ijp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5y'@;
put 'b3cscm93c3BhbjpNLnJvd3NwYW4sY29sOk0uY29sLXYsY29sc3BhbjpNLmNvbHNwYW59LCEwKTticmVhaztjYXNlInJpZ2h0Ijp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5yb3cscm93c3BhbjpNLnJvd3NwYW4sY29sOk0uY29sK3YsY29sc3BhbjpNLmNv'@;
put 'bHNwYW59LCEwKX1aPT09ZC5sZW5ndGgtMSYmKEQrPTEpfX13aGlsZShmKE0sdikpO3RoaXMuY3VycmVudEZpbGxEYXRhPW51bGwsdGhpcy5wbHVnaW4uaG90LnJlbmRlcigpLGQubGVuZ3RoPjAmJnRoaXMucGx1Z2luLmlmQ2hyb21lRm9yY2VSZXBhaW50KCl9Z2V0UmFuZ2VGcm9tQ2hhbmdl'@;
put 'cyhsKXtjb25zdCBhPXttaW46bnVsbCxtYXg6bnVsbH0sZD17bWluOm51bGwsbWF4Om51bGx9O3JldHVybiBZbihsLGg9Pntjb25zdCBmPWhbMF0sdj10aGlzLnBsdWdpbi5ob3QucHJvcFRvQ29sKGhbMV0pOyhudWxsPT09YS5taW58fGY8YS5taW4pJiYoYS5taW49ZiksKG51bGw9PT1hLm1h'@;
put 'eHx8Zj5hLm1heCkmJihhLm1heD1mKSwobnVsbD09PWQubWlufHx2PGQubWluKSYmKGQubWluPXYpLChudWxsPT09ZC5tYXh8fHY+ZC5tYXgpJiYoZC5tYXg9dil9KSx7ZnJvbTp7cm93OmEubWluLGNvbHVtbjpkLm1pbn0sdG86e3JvdzphLm1heCxjb2x1bW46ZC5tYXh9fX1kcmFnQXJlYU92'@;
put 'ZXJsYXBzQ29sbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXREcmFnQXJlYShsLGEsZCksW2YsdixNLERdPWgsWj10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSxuZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoTSxEKSxjZT10aGlzLnBsdWdp'@;
put 'bi5ob3QuX2NyZWF0ZUNlbGxSYW5nZShaLFosbmUpO2lmKDA9PT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShjZSwhMCkubGVuZ3RoKXJldHVybiExO2NvbnN0IEVlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGNlLCExKTtyZXR1'@;
put 'cm4gMD09PUVlLmxlbmd0aHx8KCJ1cCI9PT1kfHwiZG93biI9PT1kPyFFZS5ldmVyeShCZT0+e2xldHtjb2xzcGFuOnFlfT1CZTtyZXR1cm4gcWU9PT1jZS5nZXRXaWR0aCgpfSk6IUVlLmV2ZXJ5KEJlPT57bGV0e3Jvd3NwYW46cWV9PUJlO3JldHVybiBxZT09PWNlLmdldEhlaWdodCgpfSkp'@;
put 'fX07ZnVuY3Rpb24gV1EoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHFmdChjKXt2YXIgbD1mdW5jdGlvbiBYZnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxs'@;
put 'fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3Jl'@;
put 'dHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IFFmdD1jbGFzcyBKZnR7Y29uc3RydWN0b3IobCl7V1Eo'@;
put 'dGhpcywicGx1Z2luIix2b2lkIDApLFdRKHRoaXMsImhvdCIsdm9pZCAwKSxXUSh0aGlzLCJmdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZSIsImZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsIiksdGhpcy5wbHVnaW49bCx0aGlzLmhvdD1sLmhvdH1nZXRTZWxlY3RlZE1lcmdlZENlbGxD'@;
put 'bGFzc05hbWUobCxhLGQsaCl7Y29uc3QgZj1NYXRoLm1pbihkWzBdLGRbMl0pLHY9TWF0aC5taW4oZFsxXSxkWzNdKSxNPU1hdGgubWF4KGRbMF0sZFsyXSksRD1NYXRoLm1heChkWzFdLGRbM10pO2lmKHZvaWQgMD09PWh8fCF0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uaXNG'@;
put 'aXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSkpcmV0dXJuO2NvbnN0IG5lPXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKTtpZighbmUpcmV0dXJuO2NvbnN0IGNlPW5lLmdldExhc3RSb3coKSxiZT1uZS5nZXRMYXN0Q29sdW1uKCk7cmV0dXJuIGY8PW5lLnJv'@;
put 'dyYmdjw9bmUuY29sJiZNPj1jZSYmRD49YmU/YCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHtofWA6dGhpcy5pc01lcmdlQ2VsbEZ1bGx5U2VsZWN0ZWQobmUsdGhpcy5wbHVnaW4uaG90LmdldFNlbGVjdGVkUmFuZ2UoKSk/YCR7dGhpcy5mdWxseVNlbGVjdGVk'@;
put 'TWVyZ2VkQ2VsbENsYXNzTmFtZX0tbXVsdGlwbGVgOnZvaWQgMH1pc01lcmdlQ2VsbEZ1bGx5U2VsZWN0ZWQobCxhKXtjb25zdCBkPVtdO2lmKCFhfHwhbClyZXR1cm4hMTtmb3IobGV0IGg9MDtoPGwucm93c3BhbjtoKz0xKWZvcihsZXQgZj0wO2Y8bC5jb2xzcGFuO2YrPTEpZC5wdXNoKHRo'@;
put 'aXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93K2gsbC5jb2wrZikpO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCs9MSl7Y29uc3QgZj1bXTtmb3IobGV0IHY9MDt2PGEubGVuZ3RoO3YrPTEpZlt2XT1hW3ZdLmluY2x1ZGVzKGRbaF0pO2lmKCFmLmluY2x1ZGVzKCEwKSlyZXR1cm4hMX1y'@;
put 'ZXR1cm4hMH1nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWVUb1JlbW92ZSgpe2NvbnN0IGw9W107Zm9yKGxldCBhPTA7YTw9NzthKz0xKWwucHVzaChgJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS0ke2F9YCk7cmV0dXJuIGwucHVzaChgJHt0aGlzLmZ1bGx5'@;
put 'U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS1tdWx0aXBsZWApLGx9fTtmdW5jdGlvbiBoQShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdDN0KGMpe3ZhciBsPWZ1bmN0aW9uIG4zdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q'@;
put 'cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp'@;
put 'bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h'@;
put 'LGN9Y2xhc3MgZm1le2NvbnN0cnVjdG9yKGwpe2hBKHRoaXMsImRhdGEiLHZvaWQgMCksaEEodGhpcywibmV4dCIsbnVsbCksaEEodGhpcywicHJldiIsbnVsbCksdGhpcy5kYXRhPWx9fWNvbnN0IE1IPWNsYXNzIHIzdHtjb25zdHJ1Y3Rvcigpe2hBKHRoaXMsImZpcnN0IixudWxsKSxoQSh0'@;
put 'aGlzLCJsYXN0IixudWxsKX1wdXNoKGwpe2NvbnN0IGE9bmV3IGZtZShsKTtpZihudWxsPT09dGhpcy5maXJzdCl0aGlzLmZpcnN0PWEsdGhpcy5sYXN0PWE7ZWxzZXtjb25zdCBkPXRoaXMubGFzdDt0aGlzLmxhc3Q9YSxhLnByZXY9ZCxkLm5leHQ9YX1yZXR1cm4gYX11bnNoaWZ0KGwpe2Nv'@;
put 'bnN0IGE9bmV3IGZtZShsKTtpZihudWxsPT09dGhpcy5maXJzdCl0aGlzLmZpcnN0PWEsdGhpcy5sYXN0PWE7ZWxzZXtjb25zdCBkPXRoaXMuZmlyc3Q7dGhpcy5maXJzdD1hLGEubmV4dD1kLGQucHJldj1hfX1pbm9yZGVyKGwpe2xldCBhPXRoaXMuZmlyc3Q7Zm9yKDthOyl7Y29uc3QgZD1s'@;
put 'KGEpO2lmKGE9PT10aGlzLmxhc3R8fCEwPT09ZClicmVhazthPWEubmV4dH19cmVtb3ZlKGwpe2lmKG51bGw9PT10aGlzLmZpcnN0KXJldHVybiExO2xldCBkLGgsYT10aGlzLmZpcnN0O2Zvcig7YTspe2lmKGEuZGF0YT09PWwpcmV0dXJuIGQ9YS5uZXh0LGg9YS5wcmV2LGQmJihkLnByZXY9'@;
put 'aCksaCYmKGgubmV4dD1kKSxhPT09dGhpcy5maXJzdCYmKHRoaXMuZmlyc3Q9ZCksYT09PXRoaXMubGFzdCYmKHRoaXMubGFzdD1oKSwhMDthPWEubmV4dH1yZXR1cm4hMX1oYXNDeWNsZSgpe2xldCBsPXRoaXMuZmlyc3QsYT10aGlzLmZpcnN0O2Zvcig7Oyl7aWYobnVsbD09PWx8fChsPWwu'@;
put 'bmV4dCxudWxsPT09bCkpcmV0dXJuITE7aWYobD1sLm5leHQsYT1hLm5leHQsbD09PWEpcmV0dXJuITB9fXBvcCgpe2lmKG51bGw9PT10aGlzLmxhc3QpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmxhc3Q7cmV0dXJuIHRoaXMubGFzdD10aGlzLmxhc3QucHJldixsfXNoaWZ0KCl7aWYobnVs'@;
put 'bD09PXRoaXMuZmlyc3QpcmV0dXJuIG51bGw7Y29uc3QgbD10aGlzLmZpcnN0O3JldHVybiB0aGlzLmZpcnN0PXRoaXMuZmlyc3QubmV4dCxsfXJlY3Vyc2l2ZVJldmVyc2UoKXtpZighdGhpcy5maXJzdClyZXR1cm47KGZ1bmN0aW9uIGwoZCxoKXtoJiYobChoLGgubmV4dCksaC5uZXh0PWQp'@;
put 'fSkodGhpcy5maXJzdCx0aGlzLmZpcnN0Lm5leHQpLHRoaXMuZmlyc3QubmV4dD1udWxsO2NvbnN0IGE9dGhpcy5maXJzdDt0aGlzLmZpcnN0PXRoaXMubGFzdCx0aGlzLmxhc3Q9YX1yZXZlcnNlKCl7aWYoIXRoaXMuZmlyc3R8fCF0aGlzLmZpcnN0Lm5leHQpcmV0dXJuO2xldCBkLGw9dGhp'@;
put 'cy5maXJzdC5uZXh0LGE9dGhpcy5maXJzdDtmb3IoO2w7KWQ9bC5uZXh0LGwubmV4dD1hLGEucHJldj1sLGE9bCxsPWQ7dGhpcy5maXJzdC5uZXh0PW51bGwsdGhpcy5sYXN0LnByZXY9bnVsbCxkPXRoaXMuZmlyc3QsdGhpcy5maXJzdD1hLHRoaXMubGFzdD1kfX07ZnVuY3Rpb24gajkoYyxs'@;
put 'LGEpe3BtZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gcG1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiB2bChjLGwpe3JldHVybiBj'@;
put 'LmdldCh4SChjLGwpKX1mdW5jdGlvbiBVaChjLGwsYSl7cmV0dXJuIGMuc2V0KHhIKGMsbCksYSksYX1mdW5jdGlvbiB4SChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFhwPW5ldyBXZWFrTWFwLEpwPW5ldyBXZWFrTWFwLFFwPW5ldyBXZWFrTWFwLGU0PW5ldyBXZWFrTWFwLFlRPW5ldyBXZWFrTWFwLEVIPW5ldyBXZWFrTWFwLFRIPW5ldyBXZWFrTWFwLEdRPW5l'@;
put 'dyBXZWFrU2V0O2NsYXNzIG8zdHtjb25zdHJ1Y3RvcihsKXtsZXR7bWVyZ2VkQ2VsbHNHZXR0ZXI6YSxyb3dJbmRleE1hcHBlcjpkLGNvbHVtbkluZGV4TWFwcGVyOmh9PWw7KGZ1bmN0aW9uIGkzdChjLGwpe3BtZShjLGwpLGwuYWRkKGMpfSkodGhpcyxHUSksajkodGhpcyxYcCxuZXcgTUgp'@;
put 'LGo5KHRoaXMsSnAsbmV3IE1IKSxqOSh0aGlzLFFwLG51bGwpLGo5KHRoaXMsZTQsbnVsbCksajkodGhpcyxZUSxudWxsKSxqOSh0aGlzLEVILG51bGwpLGo5KHRoaXMsVEgsbnVsbCksVWgoWVEsdGhpcyxhKSxVaChFSCx0aGlzLGQpLFVoKFRILHRoaXMsaCl9Z2V0Q3VycmVudFZlcnRpY2Fs'@;
put 'Tm9kZSgpe3JldHVybiB2bChlNCx0aGlzKS5kYXRhfWdldEZpcnN0VmVydGljYWxOb2RlKCl7cmV0dXJuIHZsKEpwLHRoaXMpLmZpcnN0LmRhdGF9Z2V0TmV4dFZlcnRpY2FsTm9kZSgpe3JldHVybiB2bChlNCx0aGlzKS5uZXh0LmRhdGF9Z2V0UHJldlZlcnRpY2FsTm9kZSgpe3JldHVybiB2'@;
put 'bChlNCx0aGlzKS5wcmV2LmRhdGF9Z2V0Q3VycmVudEhvcml6b250YWxOb2RlKCl7cmV0dXJuIHZsKFFwLHRoaXMpLmRhdGF9Z2V0Rmlyc3RIb3Jpem9udGFsTm9kZSgpe3JldHVybiB2bChYcCx0aGlzKS5maXJzdC5kYXRhfWdldE5leHRIb3Jpem9udGFsTm9kZSgpe3JldHVybiB2bChRcCx0'@;
put 'aGlzKS5uZXh0LmRhdGF9Z2V0UHJldkhvcml6b250YWxOb2RlKCl7cmV0dXJuIHZsKFFwLHRoaXMpLnByZXYuZGF0YX1zZXRQcmV2Tm9kZUFzQWN0aXZlKCl7VWgoZTQsdGhpcyx2bChlNCx0aGlzKS5wcmV2KSxVaChRcCx0aGlzLHZsKFFwLHRoaXMpLnByZXYpfXNldE5leHROb2RlQXNBY3Rp'@;
put 'dmUoKXtVaChlNCx0aGlzLHZsKGU0LHRoaXMpLm5leHQpLFVoKFFwLHRoaXMsdmwoUXAsdGhpcykubmV4dCl9YnVpbGRGb2N1c09yZGVyKGwpe2NvbnN0IGE9bC5nZXRUb3BTdGFydENvcm5lcigpLGQ9bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxoPW5ldyBXZWFrU2V0O1VoKFhwLHRoaXMsbmV3'@;
put 'IE1IKTtmb3IobGV0IHY9YS5yb3c7djw9ZC5yb3c7disrKWlmKCF2bChFSCx0aGlzKS5pc0hpZGRlbih2KSlmb3IobGV0IE09YS5jb2w7TTw9ZC5jb2w7TSsrKXtpZih2bChUSCx0aGlzKS5pc0hpZGRlbihNKSljb250aW51ZTtjb25zdCBEPXhIKEdRLHRoaXMsZ21lKS5jYWxsKHRoaXMsbCx2'@;
put 'bChYcCx0aGlzKSxoLHYsTSk7RCYmVWgoUXAsdGhpcyxEKX12bChYcCx0aGlzKS5maXJzdCYmKHZsKFhwLHRoaXMpLmZpcnN0LnByZXY9dmwoWHAsdGhpcykubGFzdCx2bChYcCx0aGlzKS5sYXN0Lm5leHQ9dmwoWHAsdGhpcykuZmlyc3QpO2NvbnN0IGY9bmV3IFdlYWtTZXQ7VWgoSnAsdGhp'@;
put 'cyxuZXcgTUgpO2ZvcihsZXQgdj1hLmNvbDt2PD1kLmNvbDt2KyspaWYoIXZsKFRILHRoaXMpLmlzSGlkZGVuKHYpKWZvcihsZXQgTT1hLnJvdztNPD1kLnJvdztNKyspe2lmKHZsKEVILHRoaXMpLmlzSGlkZGVuKE0pKWNvbnRpbnVlO2NvbnN0IEQ9eEgoR1EsdGhpcyxnbWUpLmNhbGwodGhp'@;
put 'cyxsLHZsKEpwLHRoaXMpLGYsTSx2KTtEJiZVaChlNCx0aGlzLEQpfXZsKEpwLHRoaXMpLmZpcnN0JiYodmwoSnAsdGhpcykuZmlyc3QucHJldj12bChKcCx0aGlzKS5sYXN0LHZsKEpwLHRoaXMpLmxhc3QubmV4dD12bChKcCx0aGlzKS5maXJzdCl9c2V0QWN0aXZlTm9kZShsLGEpe3JldHVy'@;
put 'biB2bChYcCx0aGlzKS5pbm9yZGVyKGQ9Pntjb25zdHtyb3dTdGFydDpoLHJvd0VuZDpmLGNvbFN0YXJ0OnYsY29sRW5kOk19PWQuZGF0YTtpZihsPj1oJiZsPD1mJiZhPj12JiZhPD1NKXJldHVybiBVaChRcCx0aGlzLGQpLCExfSksdmwoSnAsdGhpcykuaW5vcmRlcihkPT57Y29uc3R7cm93'@;
put 'U3RhcnQ6aCxyb3dFbmQ6Zixjb2xTdGFydDp2LGNvbEVuZDpNfT1kLmRhdGE7aWYobD49aCYmbDw9ZiYmYT49diYmYTw9TSlyZXR1cm4gVWgoZTQsdGhpcyxkKSwhMX0pLHRoaXN9fWZ1bmN0aW9uIGdtZShjLGwsYSxkLGgpe2NvbnN0IGY9Yy5nZXRUb3BTdGFydENvcm5lcigpLHY9Yy5nZXRC'@;
put 'b3R0b21FbmRDb3JuZXIoKSxNPWMuaGlnaGxpZ2h0LmNsb25lKCkubm9ybWFsaXplKCksRD12bChZUSx0aGlzKS5jYWxsKHRoaXMsZCxoKTtpZihEJiZhLmhhcyhEKSlyZXR1cm4gbnVsbDtjb25zdCBaPXtjb2xTdGFydDpoLGNvbEVuZDpoLHJvd1N0YXJ0OmQscm93RW5kOmR9O2lmKEQpe2lm'@;
put 'KGEuYWRkKEQpLEQucm93PGYucm93fHxELnJvdytELnJvd3NwYW4tMT52LnJvd3x8RC5jb2w8Zi5jb2x8fEQuY29sK0QuY29sc3Bhbi0xPnYuY29sKXJldHVybiBudWxsO1ouY29sU3RhcnQ9RC5jb2wsWi5jb2xFbmQ9RC5jb2wrRC5jb2xzcGFuLTEsWi5yb3dTdGFydD1ELnJvdyxaLnJvd0Vu'@;
put 'ZD1ELnJvdytELnJvd3NwYW4tMX1jb25zdCBuZT1sLnB1c2goWik7cmV0dXJuIGQ9PT1NLnJvdyYmaD09PU0uY29sfHxEJiZNLnJvdz49RC5yb3cmJk0ucm93PD1ELnJvdytELnJvd3NwYW4tMSYmTS5jb2w+PUQuY29sJiZNLmNvbDw9RC5jb2wrRC5jb2xzcGFuLTE/bmU6bnVsbH1mdW5jdGlv'@;
put 'biBtbWUoYyxsLGEpe2NvbnN0e3ZpZXc6ZCxyb3dJbmRleE1hcHBlcjpofT1jLGY9ZC5nZXRTdHlsZXNIYW5kbGVyKCksdj1kLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgTT0wO2ZvcihsZXQgWj1sO1o8bCthO1orKylpZighaC5pc0hpZGRlbihaKSl7dmFyIEQ7TSs9bnVsbCE9PShEPWMu'@;
put 'Z2V0Um93SGVpZ2h0KFopKSYmdm9pZCAwIT09RD9EOnYsMD09PVomJiFmLmlzQ2xhc3NpY1RoZW1lKCkmJihNKz0xKX1yZXR1cm4gTX1mdW5jdGlvbiBBSChjLGwsYSl7dm1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB2bWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uICRRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBsM3QoYyl7dmFyIGw9ZnVuY3Rpb24gYzN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1'@;
put 'cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2'@;
put 'ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6'@;
put 'ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBmQShjLGwsYSl7cmV0dXJuIGMuc2V0KGtsKGMsbCksYSksYX1mdW5jdGlvbiB0YyhjLGwpe3JldHVybiBjLmdldChrbChjLGwpKX1mdW5jdGlvbiBrbChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMo'@;
put 'bCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9TW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZU1lcmdlQ2VsbHMiKSxNby5nZXRTaW5nbGV0b24o'@;
put 'KS5yZWdpc3RlcigiYWZ0ZXJNZXJnZUNlbGxzIiksTW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVubWVyZ2VDZWxscyIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVubWVyZ2VDZWxscyIpO2NvbnN0IEtRPSJtZXJnZUNlbGxzIixibWU9S1E7dmFyIHEyPW5l'@;
put 'dyBXZWFrTWFwLFgyPW5ldyBXZWFrTWFwLHQ0PW5ldyBXZWFrTWFwLHltZT1uZXcgV2Vha01hcCxObD1uZXcgV2Vha1NldDtjbGFzcyBkM3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gczN0KGMsbCl7dm1lKGMsbCksbC5hZGQoYyl9KHRo'@;
put 'aXMsTmwpLCRRKHRoaXMsIm1lcmdlZENlbGxzQ29sbGVjdGlvbiIsbnVsbCksJFEodGhpcywiYXV0b2ZpbGxDYWxjdWxhdGlvbnMiLG51bGwpLCRRKHRoaXMsInNlbGVjdGlvbkNhbGN1bGF0aW9ucyIsbnVsbCksQUgodGhpcyxxMixudWxsKSxBSCh0aGlzLFgyLHtyb3c6MCxjb2w6MH0pLEFI'@;
put 'KHRoaXMsdDQsbmV3IG8zdCh7bWVyZ2VkQ2VsbHNHZXR0ZXI6KGwsYSk9PnRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpLHJvd0luZGV4TWFwcGVyOnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyfSkp'@;
put 'LEFIKHRoaXMseW1lLGZ1bmN0aW9uIGEzdChjKXtjb25zdHtob3Q6bH09Yyx7cm93SW5kZXhNYXBwZXI6YSxjb2x1bW5JbmRleE1hcHBlcjpkfT1sLGg9bmV3IE1hcDtyZXR1cm57YmVmb3JlOmZ1bmN0aW9uIGYoKXt9LGFmdGVyOmZ1bmN0aW9uIHYoTSxELFope2NvbnN0IG5lPWMubWVyZ2Vk'@;
put 'Q2VsbHNDb2xsZWN0aW9uLmdldChELFopO2lmKCFxYShuZSkpcmV0dXJuIE0ucmVtb3ZlQXR0cmlidXRlKCJyb3dzcGFuIiksTS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxURSgpJiZoLmhhcyhEKSYmIWwuZ2V0U2V0dGluZ3MoKS5yb3dIZWFkZXJzJiYoTS5zdHlsZS5oZWlnaHQ9YCR7'@;
put 'aC5nZXQoRCl9cHhgLGguZGVsZXRlKEQpKSx2b2lkKE0uc3R5bGUuZGlzcGxheT0iIik7Y29uc3R7cm93OmNlLGNvbDpiZSxjb2xzcGFuOkVlLHJvd3NwYW46QmV9PW5lLFtxZSxydF09Yy50cmFuc2xhdGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxlKGNlLEJlLGJlLEVlKSxwdD1jLmdldFNldHRp'@;
put 'bmcoInZpcnR1YWxpemVkIik7aWYoVEUoKSYmMD09PWJlJiYhbC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMpe2NvbnN0IGdyPW1tZShsLGNlLEJlKTtoLnNldChELGdyL0JlKX1jb25zdCB2bj1xZS1hLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRCkrMSxDbj1ydC1kLmdldFJlbmRl'@;
put 'cmFibGVGcm9tVmlzdWFsSW5kZXgoWikrMTtsZXQgdG49YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2UsMSksTW49ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYmUsMSk7aWYocHQpe2NvbnN0IGdyPWwudmlldy5nZXRBY3RpdmVPdmVybGF5TmFtZSgpO1sidG9wIiwidG9wX2lubGlu'@;
put 'ZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhncil8fCh0bj1NYXRoLm1heCh0bixsLmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCkpKSxbImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhncil8'@;
put 'fChNbj1NYXRoLm1heChNbixsLmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkpKX1jb25zdCBDcj1NYXRoLm1pbihCZSx2biksR3I9TWF0aC5taW4oRWUsQ24pO3RuPT09RCYmTW49PT1aPyhNLnNldEF0dHJpYnV0ZSgicm93c3BhbiIsQ3IpLE0uc2V0QXR0cmlidXRlKCJjb2xzcGFu'@;
put 'IixHcikpOihNLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLE0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksTS5zdHlsZS5kaXNwbGF5PSJub25lIil9fX0odGhpcykpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBLUX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3Jl'@;
put 'dHVybiAxNTB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue1twNGVdOiJjZWxscyIsdmlydHVhbGl6ZWQ6ITEsY2VsbHM6W119fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtLUV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVu'@;
put 'YWJsZWR8fCh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbj1uZXcgV2Z0KHRoaXMpLHRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnM9bmV3IEtmdCh0aGlzKSx0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucz1uZXcgUWZ0KHRoaXMpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigp'@;
put 'e2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChObCxsLGgzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9'@;
put 'YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woTmwsbCxwM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKE5sLGwsZzN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBB'@;
put 'cnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woTmwsbCxtM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5'@;
put 'KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChObCxsLHYzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7'@;
put 'aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChObCxsLHdtZSkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hd'@;
put 'PWFyZ3VtZW50c1toXTtyZXR1cm4ga2woTmwsbCx3bWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVu'@;
put 'dHNbaF07cmV0dXJuIGtsKE5sLGwseTN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0'@;
put 'dXJuIGtsKE5sLGwsXzN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChObCxsLHcz'@;
put 'dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChObCxsLF9tZSkuY2FsbChsLC4u'@;
put 'LmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlHZXRDb29yZHNFbGVtZW50IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChObCxsLF9tZSkuY2FsbChsLC4uLmQpfSksdGhp'@;
put 'cy5hZGRIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKE5sLGwsZjN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhv'@;
put 'b2soImFmdGVyUmVuZGVyZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRjKHltZSxsKS5hZnRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXko'@;
put 'YSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKE5sLGwsYjN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKysp'@;
put 'ZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKE5sLGwsQzN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTto'@;
put 'KyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKE5sLGwsUzN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0w'@;
put 'O2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKE5sLGwsTTN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUF1dG9maWxsUmFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFto'@;
put 'XT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKE5sLGwseDN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3Jl'@;
put 'dHVybiBrbChObCxsLEUzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woTmwsbCxUM3Qp'@;
put 'LmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKE5sLGwsQTN0KS5jYWxsKGwsLi4uZCl9KSx0'@;
put 'aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBrbChObCxsLGszdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRl'@;
put 'ckNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woTmwsbCxEM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlRHJhd0JvcmRlcnMiLGZ1bmN0'@;
put 'aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKE5sLGwsSTN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyRHJhd1NlbGVjdGlvbiIsZnVuY3Rpb24oKXtmb3IodmFy'@;
put 'IGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woTmwsbCxSM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFy'@;
put 'Z3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGtsKE5sLGwsTDN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUJlZ2luRWRpdGluZyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0'@;
put 'aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woTmwsbCxPM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxk'@;
put 'PW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4ga2woTmwsbCxQM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIiwoYSxkKT0+e2lmKCJNZXJnZUNlbGxzIj09PWQpcmV0dXJuITF9KSx0aGlzLnJlZ2lz'@;
put 'dGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsZWFyQ29sbGVjdGlvbnMoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5yZW5kZXIoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5k'@;
put 'aXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmdlbmVyYXRlRnJvbVNldHRpbmdzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9aWZDaHJvbWVGb3JjZVJlcGFpbnQoKXtpZighayQoKSlyZXR1cm47Y29uc3QgbD1bXTtsZXQgYT1bXTt0aGlzLm1lcmdlZENlbGxzQ29sbGVj'@;
put 'dGlvbi5tZXJnZWRDZWxscy5mb3JFYWNoKGQ9Pntjb25zdHtyb3c6aCxyb3dzcGFuOmZ9PWQ7Zm9yKGxldCB2PWgrMTt2PGgrZjt2KyspYS5wdXNoKHYpfSksYT1bLi4ubmV3IFNldChhKV0sYS5mb3JFYWNoKGQ9Pntjb25zdCBoPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFi'@;
put 'bGVGcm9tVmlzdWFsSW5kZXgoZCk7dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy5nZXRPdmVybGF5cyghMCkubWFwKGY9PiJtYXN0ZXIiPT09Zj8ubmFtZT9mOmYuY2xvbmUud3RUYWJsZSkuZm9yRWFjaChmPT57Y29uc3Qgdj1mLmdldFJvdyhoKTt2JiYodi5zdHlsZS5iYWNrZ3JvdW5k'@;
put 'PXlFKHYsImJhY2tncm91bmRDb2xvciIpLnJlcGxhY2UoIikiLCIsIDAuOTkpIiksbC5wdXNoKHYpKX0pfSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e2wuZm9yRWFjaChkPT57dmFyIGg7ZC5zdHlsZS5iYWNrZ3JvdW5kPW51bGw9PT0oaD15RShkLCJiYWNrZ3JvdW5kQ29sb3Ii'@;
put 'KSl8fHZvaWQgMD09PWg/dm9pZCAwOmgucmVwbGFjZSgiLCAwLjk5KSIsIikiKX0pfSwxKX12YWxpZGF0ZVNldHRpbmcobCl7cmV0dXJuISghbHx8KHFwLmNvbnRhaW5zTmVnYXRpdmVWYWx1ZXMobCk/KGlsKHFwLk5FR0FUSVZFX1ZBTFVFU19XQVJOSU5HKGwpKSwxKTpxcC5pc091dE9mQm91'@;
put 'bmRzKGwsdGhpcy5ob3QuY291bnRSb3dzKCksdGhpcy5ob3QuY291bnRDb2xzKCkpPyhpbChxcC5JU19PVVRfT0ZfQk9VTkRTX1dBUk5JTkcobCkpLDEpOnFwLmlzU2luZ2xlQ2VsbChsKT8oaWwocXAuSVNfU0lOR0xFX0NFTEwobCkpLDEpOnFwLmNvbnRhaW5zWmVyb1NwYW4obCkmJihpbChx'@;
put 'cC5aRVJPX1NQQU5fV0FSTklORyhsKSksMSkpKX1nZW5lcmF0ZUZyb21TZXR0aW5ncygpe2NvbnN0IGw9dGhpcy5nZXRTZXR0aW5nKCJjZWxscyIpLmZpbHRlcihoPT50aGlzLnZhbGlkYXRlU2V0dGluZyhoKSksYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5maWx0ZXJPdmVybGFwcGlu'@;
put 'Z01lcmdlQ2VsbHMobCksZD1bXTthLmZvckVhY2goaD0+e2NvbnN0e3JvdzpmLGNvbDp2LHJvd3NwYW46TSxjb2xzcGFuOkR9PWgsWj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpLG5lPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYrTS0xLHYrRC0xKSxjZT10aGlzLmhvdC5f'@;
put 'Y3JlYXRlQ2VsbFJhbmdlKFosWixuZSk7dGhpcy5tZXJnZVJhbmdlKGNlLCEwLCEwKTtmb3IobGV0IGJlPWY7YmU8ZitNO2JlKyspZm9yKGxldCBFZT12O0VlPHYrRDtFZSsrKShiZSE9PWZ8fEVlIT09dikmJmQucHVzaChbYmUsRWUsbnVsbF0pfSksMCE9PWQubGVuZ3RoJiZ0aGlzLmhvdC5z'@;
put 'ZXREYXRhQXRDZWxsKGQsdm9pZCAwLHZvaWQgMCx0aGlzLnBsdWdpbk5hbWUpfWNsZWFyQ29sbGVjdGlvbnMoKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5jbGVhcigpfWNhbk1lcmdlUmFuZ2UobCl7cmV0dXJuISEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb'@;
put 'MV0mJmFyZ3VtZW50c1sxXSl8fHRoaXMudmFsaWRhdGVTZXR0aW5nKGwpfW1lcmdlU2VsZWN0aW9uKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJu'@;
put 'O2wuc2V0RGlyZWN0aW9uKHRoaXMuaG90LmlzUnRsKCk/Ik5FLVNXIjoiTlctU0UiKTtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnVubWVyZ2VSYW5nZShsLCEwKSx0aGlzLm1lcmdlUmFuZ2UobCksdGhpcy5ob3Quc2VsZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9dW5t'@;
put 'ZXJnZVNlbGVjdGlvbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtjb25zdHtmcm9tOmEsdG86ZH09bDt0aGlzLnVubWVyZ2VSYW5nZShsLCEw'@;
put 'KSx0aGlzLmhvdC5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX1tZXJnZVJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9bC5nZXRUb3BTdGFydENvcm5lcigpLGY9bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx2PXtyb3c6aC5yb3csY29sOmguY29sLHJvd3NwYW46Zi5yb3ctaC5yb3crMSxjb2xzcGFuOmYuY29sLWguY29sKzF9LE09W107bGV0IEQ9bnVsbDtyZXR1cm4h'@;
put 'IXRoaXMuY2FuTWVyZ2VSYW5nZSh2LGEpJiYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU1lcmdlQ2VsbHMiLGwsYSksJG8oMCx2LnJvd3NwYW4tMSxuZT0+eyRvKDAsdi5jb2xzcGFuLTEsY2U9PntsZXQgYmU9bnVsbDtNW25lXXx8KE1bbmVdPVtdKSwwPT09bmUmJjA9PT1jZT9iZT10aGlz'@;
put 'LmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuaG90LnRvUGh5c2ljYWxSb3codi5yb3cpLHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4odi5jb2wpKTp0aGlzLmhvdC5zZXRDZWxsTWV0YSh2LnJvdytuZSx2LmNvbCtjZSwiaGlkZGVuIiwhMCksTVtuZV1bY2VdPWJlfSl9KSx0aGlzLmhv'@;
put 'dC5zZXRDZWxsTWV0YSh2LnJvdyx2LmNvbCwic3Bhbm5lZCIsITApLCF0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQodixhKXx8KGQ/RD1bdi5yb3csdi5jb2wsTV06dGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkodi5yb3csdi5jb2wsTSx2b2lkIDAsdm9pZCAwLHRoaXMucGx1Z2lu'@;
put 'TmFtZSksYXx8dGhpcy5pZkNocm9tZUZvcmNlUmVwYWludCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck1lcmdlQ2VsbHMiLGwsdixhKSxEKSl9dW5tZXJnZVJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29u'@;
put 'c3QgZD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShsKTswIT09ZC5sZW5ndGgmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5tZXJnZUNlbGxzIixsLGEpLFluKGQsaD0+e3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnJlbW92ZShoLnJvdyxoLmNvbCks'@;
put 'JG8oMCxoLnJvd3NwYW4tMSxmPT57JG8oMCxoLmNvbHNwYW4tMSx2PT57dGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3crZixoLmNvbCt2LCJoaWRkZW4iKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdytmLGguY29sK3YsImNvcHlhYmxlIil9KX0pLHRoaXMuaG90LnJlbW92ZUNl'@;
put 'bGxNZXRhKGgucm93LGguY29sLCJzcGFubmVkIil9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLGwsYSksdGhpcy5ob3QucmVuZGVyKCkpfXRvZ2dsZU1lcmdlKGwpe2NvbnN0e2Zyb206YSx0bzpkfT1sLmNsb25lKCkubm9ybWFsaXplKCksaD10aGlzLm1lcmdlZENl'@;
put 'bGxzQ29sbGVjdGlvbi5nZXQoYS5yb3csYS5jb2wpO2gucm93PT09YS5yb3cmJmguY29sPT09YS5jb2wmJmgucm93K2gucm93c3Bhbi0xPT09ZC5yb3cmJmguY29sK2guY29sc3Bhbi0xPT09ZC5jb2w/dGhpcy51bm1lcmdlUmFuZ2UobCk6dGhpcy5tZXJnZVNlbGVjdGlvbihsKX1tZXJnZShs'@;
put 'LGEsZCxoKXtjb25zdCBmPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSksdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpO3RoaXMubWVyZ2VSYW5nZSh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGYsZix2KSl9dW5tZXJnZShsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90'@;
put 'Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSksdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpO3RoaXMudW5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZixmLHYpKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENv'@;
put 'bnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sIiwibSJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtkJiYhZC5pc1NpbmdsZUhlYWRlcigpJiYodGhpcy50b2dnbGVNZXJnZShkKSx0aGlzLmhvdC5yZW5kZXIo'@;
put 'KSl9LHJ1bk9ubHlJZjpkPT4hZC5hbHRLZXksZ3JvdXA6Ym1lfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKGJtZSl9bW9kaWZ5Vmlld3BvcnRSb3dTdGFydChsLGEp'@;
put 'e2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5zdGFydFJvdyk7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGgsZik7aWYocWEodikpe2NvbnN0IE09ZC5n'@;
put 'ZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYucm93LDEpKTtpZihNPGwuc3RhcnRSb3cpcmV0dXJuIGwuc3RhcnRSb3c9TSx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dTdGFydChsLGEpfX19bW9kaWZ5Vmlld3BvcnRSb3dFbmQobCxh'@;
put 'KXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuZW5kUm93KTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoaCxmKTtpZihxYSh2KSl7Y29uc3QgRD1kLmdl'@;
put 'dFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodi5yb3crdi5yb3dzcGFuLTEsLTEpKTtpZihEPmwuZW5kUm93KXJldHVybiBsLmVuZFJvdz1ELHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZChsLGEpfX19bW9kaWZ5Vmlld3BvcnRDb2x1'@;
put 'bW5TdGFydChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5zdGFydENvbHVtbik7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGYsaCk7aWYo'@;
put 'cWEodikpe2NvbnN0IE09ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYuY29sLDEpKTtpZihNPGwuc3RhcnRDb2x1bW4pcmV0dXJuIGwuc3RhcnRDb2x1bW49TSx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChsLGEp'@;
put 'fX19bW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGg9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuZW5kQ29sdW1uKTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdlZENlbGxzQ29sbGVj'@;
put 'dGlvbi5nZXQoZixoKTtpZihxYSh2KSl7Y29uc3QgRD1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodi5jb2wrdi5jb2xzcGFuLTEsLTEpKTtpZihEPmwuZW5kQ29sdW1uKXJldHVybiBsLmVuZENvbHVtbj1ELHZvaWQgdGhpcy5tb2Rp'@;
put 'ZnlWaWV3cG9ydENvbHVtbkVuZChsLGEpfX19dHJhbnNsYXRlTWVyZ2VkQ2VsbFRvUmVuZGVyYWJsZShsLGEsZCxoKXtjb25zdHtyb3dJbmRleE1hcHBlcjpmLGNvbHVtbkluZGV4TWFwcGVyOnZ9PXRoaXMuaG90O2xldCBNLEQ7cmV0dXJuIE09MD09PWE/Zi5nZXROZWFyZXN0Tm90SGlkZGVu'@;
put 'SW5kZXgobCwxKTpmLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsK2EtMSwtMSksRD0wPT09aD92LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkLDEpOnYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQraC0xLC0xKSxbbD49MD9mLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTSk6'@;
put 'bCxkPj0wP3YuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChEKTpkXX19ZnVuY3Rpb24gaDN0KCl7dGhpcy5nZW5lcmF0ZUZyb21TZXR0aW5ncygpLHRoaXMuaG90LnJlbmRlcigpfWZ1bmN0aW9uIGYzdChjKXtpZihjKXtjb25zdCBsPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1l'@;
put 'cmdlZENlbGxzLGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSxoPWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBmPTA7ZjxsLmxlbmd0aDtmKz0xKWlmKGQucm93PT09bFtmXS5yb3cmJmQuY29sPT09bFtmXS5jb2wmJmgucm93'@;
put 'PT09bFtmXS5yb3crbFtmXS5yb3dzcGFuLTEmJmguY29sPT09bFtmXS5jb2wrbFtmXS5jb2xzcGFuLTEpcmV0dXJuITF9cmV0dXJuIGN9ZnVuY3Rpb24gcDN0KGMpe3RjKFgyLHRoaXMpLnJvdz1jLnJvdyx0YyhYMix0aGlzKS5jb2w9Yy5jb2x9ZnVuY3Rpb24gZzN0KGMpe2NvbnN0IGw9dGhp'@;
put 'cy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7aGlnaGxpZ2h0OmF9PWwse2NvbHVtbkluZGV4TWFwcGVyOmQscm93SW5kZXhNYXBwZXI6aH09dGhpcy5ob3Q7dGMocTIsdGhpcykmJihudWxsIT09aC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHRjKHEyLHRoaXMpLnJvdykmJihh'@;
put 'LnJvdz10YyhxMix0aGlzKS5yb3cpLG51bGwhPT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGMocTIsdGhpcykuY29sKSYmKGEuY29sPXRjKHEyLHRoaXMpLmNvbCksZkEocTIsdGhpcyxudWxsKSk7Y29uc3QgZj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoYS5yb3cs'@;
put 'YS5jb2wpO2lmKCFmKXJldHVybjtjb25zdCB2PWYuY29sLE09Zi5jb2wrZi5jb2xzcGFuLTE7aWYoYy5jb2w8MCl7Y29uc3QgY2U9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5jb2w+PXYmJmEuY29sPD1NP3YtMTpNLC0xKTtjLmNvbD1udWxsPT09Y2U/LXRoaXMuaG90LnZpZXcuY291'@;
put 'bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoMCxhLmNvbCk6LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoY2UsYS5jb2wpLTEsMSl9ZWxzZSBpZihjLmNvbD4wKXtjb25zdCBjZT1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLmNvbD49'@;
put 'diYmYS5jb2w8PU0/TSsxOnYsMSk7Yy5jb2w9bnVsbD09PWNlP3RoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoYS5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCkpOk1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UoYS5j'@;
put 'b2wsY2UpLTEsMSl9Y29uc3QgRD1mLnJvdyxaPWYucm93K2Yucm93c3Bhbi0xO2lmKGMucm93PDApe2NvbnN0IGNlPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEucm93Pj1EJiZhLnJvdzw9Wj9ELTE6WiwtMSk7Yy5yb3c9bnVsbD09PWNlPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVy'@;
put 'YWJsZVJvd3NJblJhbmdlKDAsYS5yb3cpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGNlLGEucm93KS0xLDEpfWVsc2UgaWYoYy5yb3c+MCl7Y29uc3QgY2U9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYS5yb3c+PUQmJmEucm93PD1aP1or'@;
put 'MTpELDEpO2Mucm93PW51bGw9PT1jZT90aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGEucm93LHRoaXMuaG90LmNvdW50Um93cygpKTpNYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKGEucm93LGNlKS0xLDEpfX1mdW5jdGlv'@;
put 'biBtM3QoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bC5jbG9uZSgpLHt0bzpkfT1sLHtjb2x1bW5JbmRleE1hcHBlcjpoLHJvd0luZGV4TWFwcGVyOmZ9PXRoaXMuaG90LHY9KE0sRCk9PnthLmV4cGFuZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhN'@;
put 'LEQpKTtmb3IobGV0IFo9MDtaPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtaKz0xKWEuZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1taXS5nZXRSYW5nZSgpKX07aWYoYy5jb2w8MCl7bGV0IE09dGhpcy5t'@;
put 'ZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0U3RhcnRNb3N0Q29sdW1uSW5kZXgobCxkLmNvbCkrYy5jb2w7dihkLnJvdyxNKSwiRS1XIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYiRS1XIj09PWEuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiYoTT1hLmdldFRvcFN0YXJ0Q29ybmVy'@;
put 'KCkuY29sKTtjb25zdCBEPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sMSk7bnVsbCE9PUQmJihjLmNvbD0tTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShELGQuY29sKS0xLDEpKX1lbHNlIGlmKGMuY29sPjApe2xldCBNPXRoaXMubWVy'@;
put 'Z2VkQ2VsbHNDb2xsZWN0aW9uLmdldEVuZE1vc3RDb2x1bW5JbmRleChsLGQuY29sKStjLmNvbDt2KGQucm93LE0pLCJXLUUiPT09bC5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJiJXLUUiPT09YS5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJihNPWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCku'@;
put 'Y29sKTtjb25zdCBEPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sLTEpO251bGwhPT1EJiYoYy5jb2w9TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShkLmNvbCxEKS0xLDEpKX1pZihjLnJvdzwwKXtsZXQgTT10aGlzLm1lcmdlZENlbGxz'@;
put 'Q29sbGVjdGlvbi5nZXRUb3BNb3N0Um93SW5kZXgobCxkLnJvdykrYy5yb3c7dihNLGQuY29sKSwiUy1OIj09PWwuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmIlMtTiI9PT1hLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJihNPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3cpO2NvbnN0IEQ9Zi5n'@;
put 'ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKTtudWxsIT09RCYmKGMucm93PS1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKEQsZC5yb3cpLTEsMSkpfWVsc2UgaWYoYy5yb3c+MCl7bGV0IE09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0'@;
put 'Qm90dG9tTW9zdFJvd0luZGV4KGwsZC5yb3cpK2Mucm93O3YoTSxkLmNvbCksIk4tUyI9PT1sLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJiJOLVMiPT09YS5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiYoTT1hLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCkucm93KTtjb25zdCBEPWYuZ2V0TmVhcmVz'@;
put 'dE5vdEhpZGRlbkluZGV4KE0sLTEpO251bGwhPT1EJiYoYy5yb3c9TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZShkLnJvdyxEKS0xLDEpKX19ZnVuY3Rpb24gdjN0KCl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtoaWdo'@;
put 'bGlnaHQ6bH09YztpZih0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSlyZXR1cm4gdm9pZCBmQShxMix0aGlzLGwuY2xvbmUoKSk7Zm9yKGxldCBkPTA7ZDx0aGlzLm1lcmdlZENl'@;
put 'bGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5sZW5ndGg7ZCs9MSljLmV4cGFuZEJ5UmFuZ2UodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHNbZF0uZ2V0UmFuZ2UoKSwhMSk7Zm9yKGxldCBkPTA7ZDx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxscy5s'@;
put 'ZW5ndGg7ZCs9MSljLmV4cGFuZEJ5UmFuZ2UodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHNbZF0uZ2V0UmFuZ2UoKSwhMSk7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobC5yb3csbC5jb2wpO2ZBKHEyLHRoaXMsbC5jbG9uZSgpKSxhJiZsLmFz'@;
put 'c2lnbihhKX1mdW5jdGlvbiBfbWUoYyxsLGEsZCl7aWYoYzwwfHxsPDApcmV0dXJuO2NvbnN0IGg9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGMsbCk7aWYoIWgpcmV0dXJuO2NvbnN0e3JvdzpmLGNvbDp2LGNvbHNwYW46TSxyb3dzcGFuOkR9PWgsWj1mLG5lPXYsY2U9ZitELTEs'@;
put 'YmU9ditNLTE7aWYoInJlbmRlciI9PT1kJiZ0aGlzLmdldFNldHRpbmcoInZpcnR1YWxpemVkIikpe2NvbnN0IEVlPXRoaXMuaG90LnZpZXcuZ2V0QWN0aXZlT3ZlcmxheU5hbWUoKSxCZT1bInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRWUpPzA6dGhpcy5ob3Qu'@;
put 'Z2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSxxZT1bImlubGluZV9zdGFydCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIiwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhFZSk/MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpO3JldHVy'@;
put 'bltBcyhCZSxaLGNlKSxBcyhxZSxuZSxiZSksQXModGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpLFosY2UpLEFzKHRoaXMuaG90LmdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKSxuZSxiZSldfXJldHVybltaLG5lLGNlLGJlXX1mdW5jdGlvbiBiM3QoYyl7Yy5pdGVt'@;
put 'cy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBlM3QoYyl7cmV0dXJue2tleToibWVyZ2VDZWxscyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtpZihsKXtjb25zdCBhPWMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsWzBdLGxbMV0pO2lmKGEucm93'@;
put 'PT09bFswXSYmYS5jb2w9PT1sWzFdJiZhLnJvdythLnJvd3NwYW4tMT09PWxbMl0mJmEuY29sK2EuY29sc3Bhbi0xPT09bFszXSlyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHNxKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGFxKX0sY2FsbGJhY2soKXtjb25zdCBs'@;
put 'PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24odGhpcy5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29uc3R7ZnJvbTphLHRvOmR9PWw7Yy50b2dnbGVNZXJnZShsKSx0aGlzLnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2ws'@;
put 'ITEpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtyZXR1cm4hbHx8cXAuaXNTaW5nbGVDZWxsKHtyb3c6bFswXSxjb2w6bFsxXSxyb3dzcGFuOmxbMl0tbFswXSsxLGNvbHNwYW46bFszXS1sWzFdKzF9KXx8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29y'@;
put 'bmVyKCl9LGhpZGRlbjohMX19KHRoaXMpKX1mdW5jdGlvbiB3bWUoKXtmQShxMix0aGlzLG51bGwpfWZ1bmN0aW9uIHkzdCgpe2lmKHRjKHEyLHRoaXMpLmlzQ2VsbCgpKXJldHVybjtjb25zdCBjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbD1jLmdldFZlcnRpY2FsRGlyZWN0'@;
put 'aW9uKCksYT1jLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSxkPXRjKHEyLHRoaXMpLmNsb25lKCkubm9ybWFsaXplKCk7dGModDQsdGhpcykuc2V0QWN0aXZlTm9kZShkLnJvdyxkLmNvbCksdGMoWDIsdGhpcykucm93PjB8fHRjKFgyLHRoaXMpLmNvbD4wP3RjKHQ0LHRoaXMpLnNldFByZXZO'@;
put 'b2RlQXNBY3RpdmUoKTooIkUtVyI9PT1hJiZ0YyhYMix0aGlzKS5jb2w8MHx8IlMtTiI9PT1sJiZ0YyhYMix0aGlzKS5yb3c8MCkmJnRjKHQ0LHRoaXMpLnNldE5leHROb2RlQXNBY3RpdmUoKX1mdW5jdGlvbiBfM3QoYyxsKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0'@;
put 'KCkse2NvbHVtbkluZGV4TWFwcGVyOmQscm93SW5kZXhNYXBwZXI6aH09dGhpcy5ob3Q7bGV0IGY9bnVsbCx2PW51bGw7aWYodGMoWDIsdGhpcykuY29sPDApe2NvbnN0e3Jvd0VuZDpNLGNvbEVuZDpEfT10Yyh0NCx0aGlzKS5nZXRQcmV2SG9yaXpvbnRhbE5vZGUoKTt2PWQuZ2V0TmVhcmVz'@;
put 'dE5vdEhpZGRlbkluZGV4KEQsLTEpLGY9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSl9ZWxzZSBpZih0YyhYMix0aGlzKS5jb2w+MCl7Y29uc3R7cm93U3RhcnQ6TSxjb2xTdGFydDpEfT10Yyh0NCx0aGlzKS5nZXROZXh0SG9yaXpvbnRhbE5vZGUoKTt2PWQuZ2V0TmVhcmVzdE5v'@;
put 'dEhpZGRlbkluZGV4KEQsMSksZj1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpfWVsc2UgaWYodGMoWDIsdGhpcykucm93PDApe2NvbnN0e3Jvd0VuZDpNLGNvbEVuZDpEfT10Yyh0NCx0aGlzKS5nZXRQcmV2VmVydGljYWxOb2RlKCk7dj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRl'@;
put 'eChELC0xKSxmPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sLTEpfWVsc2UgaWYodGMoWDIsdGhpcykucm93PjApe2NvbnN0e3Jvd1N0YXJ0Ok0sY29sU3RhcnQ6RH09dGModDQsdGhpcykuZ2V0TmV4dFZlcnRpY2FsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwx'@;
put 'KSxmPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sMSl9aWYobnVsbCE9PWZ8fG51bGwhPT12KXtjb25zdCBNPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsdiksRD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoTS5yb3csTS5jb2wpLFo9dGhpcy5ob3Quc2VsZWN0aW9u'@;
put 'LmhpZ2hsaWdodC5nZXRGb2N1cygpO2M9TS5yb3csbD1NLmNvbCxhLmhpZ2hsaWdodC5hc3NpZ24oRD97cm93OnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELnJvdywxKSxjb2w6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5v'@;
put 'dEhpZGRlbkluZGV4KEQuY29sLDEpfTpNKSxaLmNsZWFyKCksWi5hZGQoTSkuY29tbWl0KCl9dGModDQsdGhpcykuc2V0QWN0aXZlTm9kZShjLGwpLGZBKFgyLHRoaXMse3JvdzowLGNvbDowfSl9ZnVuY3Rpb24gdzN0KCl7dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5pc0hlYWRl'@;
put 'cigpfHx0Yyh0NCx0aGlzKS5idWlsZEZvY3VzT3JkZXIodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl9ZnVuY3Rpb24gQzN0KGMsbCxhKXtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChjLGwpO2QmJihkLnJvdyE9PWN8fGQuY29sIT09bD9hLmNvcHlhYmxl'@;
put 'PSExOihhLnJvd3NwYW49ZC5yb3dzcGFuLGEuY29sc3Bhbj1kLmNvbHNwYW4pKX1mdW5jdGlvbiBTM3QoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpKXJldHVybjtjb25zdCBsPXRoaXMuaG90LmNvdW50Q29scygpO3RoaXMubW9kaWZ5Vmlld3BvcnRSb3dTdGFydChjLGwp'@;
put 'LHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dFbmQoYyxsKX1mdW5jdGlvbiBNM3QoYyl7aWYodGhpcy5nZXRTZXR0aW5nKCJ2aXJ0dWFsaXplZCIpKXJldHVybjtjb25zdCBsPXRoaXMuaG90LmNvdW50Um93cygpO3RoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5TdGFydChjLGwpLHRoaXMubW9kaWZ5'@;
put 'Vmlld3BvcnRDb2x1bW5FbmQoYyxsKX1mdW5jdGlvbiB4M3QoYyxsKXtjb25zdCBhPXRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuZ2V0RGlyZWN0aW9uKGwsYyk7aWYodGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5kcmFnQXJlYU92ZXJsYXBzQ29sbGVjdGlvbnMobCxjLGEpKXJldHVybiBs'@;
put 'O2NvbnN0IGQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobFswXSxsWzFdKSxoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGxbMl0sbFszXSksZj10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGQsZCxoKSx2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdl'@;
put 'KGYpO3JldHVybiAwPT09di5sZW5ndGg/Yzp0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLnNuYXBEcmFnQXJlYShsLGMsYSx2KX1mdW5jdGlvbiBFM3QoYyxsKXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJyaWdodCIsYyxsKX1mdW5jdGlvbiBUM3QoYyxs'@;
put 'KXt0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJsZWZ0IixjLGwpfWZ1bmN0aW9uIEEzdChjLGwsYSl7ImF1dG8iIT09YSYmdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygiZG93biIsYyxsKX1mdW5jdGlvbiBrM3QoYyxsKXt0'@;
put 'aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJ1cCIsYyxsKX1mdW5jdGlvbiBEM3QoYyxsKXsiQXV0b2ZpbGwuZmlsbCI9PT1sJiZ0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLnJlY3JlYXRlQWZ0ZXJEYXRhUG9wdWxhdGlvbihjKX1mdW5jdGlvbiBJM3QoYyxs'@;
put 'KXtpZihsJiYiYXJlYSI9PT1sKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7WW4odGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoYSksaD0+e2EuZ2V0Qm90dG9tRW5kQ29ybmVyKCkucm93PT09aC5nZXRMYXN0Um93KCkmJmEuZ2V0Qm90'@;
put 'dG9tRW5kQ29ybmVyKCkuY29sPT09aC5nZXRMYXN0Q29sdW1uKCkmJihjWzJdPWgucm93LGNbM109aC5jb2wpfSl9fWZ1bmN0aW9uIFIzdChjLGwsYSxkKXtpZihhKXJldHVybiB0aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUoYyxsLGEs'@;
put 'ZCl9ZnVuY3Rpb24gTDN0KCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl9ZnVuY3Rpb24gTzN0KGMsbCxhLGQpe2lmKCEoZCBpbnN0YW5jZW9mIE1vdXNlRXZlbnQpKXJldHVybjtjb25zdCBoPXRoaXMu'@;
put 'aG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRCeVJhbmdlKGgpO2lmKCFmKXJldHVybjtjb25zdCB2PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYucm93LGYuY29sKSxNPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYucm93'@;
put 'K2Yucm93c3Bhbi0xLGYuY29sK2YuY29sc3Bhbi0xKTtyZXR1cm4gMD09PXRoaXMuaG90LnNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkmJmguaXNFcXVhbCh0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHYsdixNKSl9ZnVuY3Rpb24gUDN0KGMsbCxhKXtpZih0aGlzLmhvdC5nZXRTZXR0aW5n'@;
put 'cygpLnJvd0hlYWRlcnN8fCJib3R0b20iPT09YXx8ImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIj09PWEpcmV0dXJuIGM7bGV0IGQsaDtpZigibWFzdGVyIj09PWEpZD10aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLGg9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVk'@;
put 'VmlzaWJsZUNvbHVtbigpO2Vsc2V7Y29uc3QgYmU9dGhpcy5ob3Qudmlldy5nZXRPdmVybGF5QnlOYW1lKGEpO2Q9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChiZS5jbG9uZS53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSks'@;
put 'aD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGJlLmNsb25lLnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCkpfWlmKCF0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxkKSlyZXR1cm4gYztjb25zdCB2PXRoaXMuaG90'@;
put 'Ll9jcmVhdGVDZWxsQ29vcmRzKGwsZCksTT10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGgpLEQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh2LHYsTSksWj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShELCEwKSxuZT1aLnJlZHVjZSgoYmUsRWUpPT57'@;
put 'bGV0e3Jvd3NwYW46QmV9PUVlO3JldHVybiBNYXRoLm1heChiZSxCZSl9LDEpO2xldCBjZT0wO3JldHVybiBaLmxlbmd0aD4xJiZaWzBdLnJvd3NwYW48bmUmJihjZT1uZS1aWzBdLnJvd3NwYW4pLFouZm9yRWFjaChiZT0+e2xldHtyb3dzcGFuOkVlfT1iZSxCZT0wO0JlPSJ0b3AiPT09YXx8'@;
put 'InRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIj09PWE/TWF0aC5taW4obmUsdGhpcy5ob3Qudmlldy5jb3VudE5vdEhpZGRlbkZpeGVkUm93c1RvcCgpLWwpOkVlLWNlLGM9TWF0aC5tYXgoYz8/MCxtbWUodGhpcy5ob3QsbCxCZSkpfSksY31jb25zdCBrSD0ibXVsdGlDb2x1bW5Tb3J0aW5nIixT'@;
put 'bWU9a0g7VjRlKGtILGZ1bmN0aW9uIEYzdChjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24gdihNKXtjb25zdCBEPWNbTV0sWj1sW01dLG5lPWhbTV0sY2U9ZltNXSxiZT1aLm11bHRpQ29sdW1uU29ydGluZyxCZT0oYmUu'@;
put 'Y29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9iZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5OkI0ZShaLnR5cGUpKShELFosYmUpKG5lLGNlKTtpZihCZT09PWpwKXtjb25zdCBxZT1NKzE7aWYodHlwZW9mIGxbcWVdPCJ1IilyZXR1cm4gdihxZSl9cmV0dXJuIEJlfSgwKX19KTtjbGFzcyBVM3QgZXh0'@;
put 'ZW5kcyBYNGV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFYzdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQjN0KGMpe3ZhciBsPWZ1bmN0aW9uIGozdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q'@;
put 'cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp'@;
put 'bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h'@;
put 'LGN9KHRoaXMsInBsdWdpbktleSIsa0gpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBrSH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNzB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XX1lbmFibGVQ'@;
put 'bHVnaW4oKXtzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRk'@;
put 'U2hvcnRjdXQoe2tleXM6W1siU2hpZnQiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybi0xPT09bC5yb3cmJmwuY29sPj0wJiZ0aGlzLnNvcnQodGhpcy5nZXROZXh0U29ydENvbmZpZyhsLmNv'@;
put 'bCxvRikpLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO2NvbnN0IGQ9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFz'@;
put 'dCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoZCkmJmQuaXNIZWFkZXIoKX0scmVsYXRpdmVUb0dyb3VwOlptLHBvc2l0aW9uOiJiZWZvcmUiLGdyb3VwOlNtZX0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXtzdXBl'@;
put 'ci51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoU21lKX1zb3J0KGwpe3N1cGVyLnNvcnQobCl9Y2xlYXJTb3J0KCl7c3VwZXIuY2xlYXJTb3J0KCl9aXNTb3J0ZWQoKXty'@;
put 'ZXR1cm4gc3VwZXIuaXNTb3J0ZWQoKX1nZXRTb3J0Q29uZmlnKGwpe3JldHVybiBzdXBlci5nZXRTb3J0Q29uZmlnKGwpfXNldFNvcnRDb25maWcobCl7c3VwZXIuc2V0U29ydENvbmZpZyhsKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bDpbbF19dXBkYXRlSGVhZGVyQ2xhc3NlcyhsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVu'@;
put 'dHNbaF07c3VwZXIudXBkYXRlSGVhZGVyQ2xhc3NlcyhsLC4uLmQpLGNhKGwsZnVuY3Rpb24gTjN0KGMpe2NvbnN0IGw9Yy5jbGFzc05hbWUuc3BsaXQoIiAiKSxhPW5ldyBSZWdFeHAoIl5zb3J0LVswLTldezEsMn0kIik7cmV0dXJuIGwuZmlsdGVyKGQ9PmEudGVzdChkKSl9KGwpKSwhMSE9'@;
put 'PXRoaXMuZW5hYmxlZCYmVGkobCxmdW5jdGlvbiBIM3QoYyxsLGEpe2NvbnN0IGQ9W107cmV0dXJuITE9PT1hfHxjLmlzQ29sdW1uU29ydGVkKGwpJiZjLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpPjEmJmQucHVzaChgc29ydC0ke2MuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwp'@;
put 'KzF9YCksZH0oLi4uZCkpfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24obCxhKXshMSE9PWdKKGEucm93LGEuY29sLGwpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhLmNvbCkmJih0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk/KHRoaXMuaG90'@;
put 'LmRlc2VsZWN0Q2VsbCgpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoYS5jb2wpLHRoaXMuc29ydCh0aGlzLmdldE5leHRTb3J0Q29uZmlnKGEuY29sLG9GKSkpOnRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcoYS5jb2wpKSl9fWZ1bmN0aW9uIE1tZShjLGwsYSl7cmV0dXJuKGw9'@;
put 'ZnVuY3Rpb24gWjN0KGMpe3ZhciBsPWZ1bmN0aW9uIFczdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVv'@;
put 'ZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0o'@;
put 'bCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgJDN0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLE1tZSh0aGlzLCJkcmFn'@;
put 'Z2VkIixbXSksTW1lKHRoaXMsImxhc3RTZXRDZWxsIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ibXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNjB9aXNFbmFibGVkKCl7cmV0dXJuIEFwKCl9ZW5hYmxl'@;
put 'UGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0IGw9dGhpcyx7cm9vdEVsZW1lbnQ6YX09dGhpcy5ob3Q7ZnVuY3Rpb24gZChoKXtpZigxPT09bC5kcmFnZ2VkLmxlbmd0'@;
put 'aClyZXR1cm4gbC5kcmFnZ2VkLnNwbGljZSgwLGwuZHJhZ2dlZC5sZW5ndGgpLCEwO2NvbnN0IGY9bC5kcmFnZ2VkLmluZGV4T2YoaCk7aWYoLTE9PT1mKXJldHVybiExOzA9PT1mP2wuZHJhZ2dlZD1sLmRyYWdnZWQuc2xpY2UoMCwxKToxPT09ZiYmKGwuZHJhZ2dlZD1sLmRyYWdnZWQuc2xp'@;
put 'Y2UoLTEpKX10aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoc3RhcnQiLGg9PntsZXQgZjtyZXR1cm4gcGEoaC50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxsLmRyYWdnZWQucHVzaCgi'@;
put 'dG9wIiksbC50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRoOmYuZ2V0V2lkdGgoKSxoZWlnaHQ6Zi5nZXRIZWlnaHQoKSxkaXJlY3Rpb246Zi5nZXREaXJlY3Rpb24oKX0saC5wcmV2ZW50RGVmYXVsdCgpLCExKTpwYShoLnRhcmdldCwiYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZj1s'@;
put 'LmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGwuZHJhZ2dlZC5wdXNoKCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhlaWdodCgpLGRpcmVjdGlvbjpmLmdldERpcmVjdGlvbigpfSxoLnByZXZlbnREZWZhdWx0KCksITEpOnZv'@;
put 'aWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hlbmQiLGg9PnBhKGgudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwobCwidG9wIiksbC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAwLGgucHJldmVudERlZmF1bHQoKSwhMSk6'@;
put 'cGEoaC50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGQuY2FsbChsLCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT12b2lkIDAsaC5wcmV2ZW50RGVmYXVsdCgpLCExKTp2b2lkIDApLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2ht'@;
put 'b3ZlIixoPT57Y29uc3R7cm9vdERvY3VtZW50OmZ9PXRoaXMuaG90O2xldCB2LE0sRCxaLG5lLGNlO2lmKDA9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybjtjb25zdCBiZT1mLmVsZW1lbnRGcm9tUG9pbnQoaC50b3VjaGVzWzBdLmNsaWVudFgsaC50b3VjaGVzWzBdLmNsaWVudFkpOyFiZXx8'@;
put 'YmU9PT1sLmxhc3RTZXRDZWxsfHwoKCJURCI9PT1iZS5ub2RlTmFtZXx8IlRIIj09PWJlLm5vZGVOYW1lKSYmKHY9bC5ob3QuZ2V0Q29vcmRzKGJlKSwtMT09PXYuY29sJiYodi5jb2w9MCksTT1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLEQ9TS5nZXRXaWR0aCgpLFo9TS5nZXRIZWln'@;
put 'aHQoKSxuZT1NLmdldERpcmVjdGlvbigpLDE9PT1EJiYxPT09WiYmbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKHYpLGNlPWwuZ2V0Q3VycmVudFJhbmdlQ29vcmRzKE0sdixsLnRvdWNoU3RhcnRSYW5nZS5kaXJlY3Rpb24sbmUsbC5kcmFnZ2VkWzBdKSxudWxsIT09Y2Uuc3RhcnQmJmwu'@;
put 'aG90LnNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KGNlLnN0YXJ0KSxsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQoY2UuZW5kKSxsLmxhc3RTZXRDZWxsPWJlKSxoLnByZXZlbnREZWZhdWx0KCkpfSl9Z2V0Q3VycmVudFJhbmdlQ29vcmRzKGwsYSxkLGgsZil7Y29uc3Qgdj1sLmdldFRvcFN0'@;
put 'YXJ0Q29ybmVyKCksTT1sLmdldEJvdHRvbUVuZENvcm5lcigpLEQ9bC5nZXRCb3R0b21TdGFydENvcm5lcigpLFo9bC5nZXRUb3BFbmRDb3JuZXIoKTtsZXQgbmU9e3N0YXJ0Om51bGwsZW5kOm51bGx9O3N3aXRjaChkKXtjYXNlIk5FLVNXIjpzd2l0Y2goaCl7Y2FzZSJORS1TVyI6Y2FzZSJO'@;
put 'Vy1TRSI6bmU9InRvcCI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxsLmhpZ2hsaWdodC5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhELnJvdyxhLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdo'@;
put 'dC5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09ZiYmKG5lPXtzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhNLnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxs'@;
put 'Q29vcmRzKGEucm93LHYuY29sKX0pfWJyZWFrO2Nhc2UiTlctU0UiOnN3aXRjaChoKXtjYXNlIk5FLVNXIjoidG9wIj09PWY/bmU9e3N0YXJ0OmEsZW5kOkR9Om5lLmVuZD1hO2JyZWFrO2Nhc2UiTlctU0UiOiJ0b3AiPT09Zj9uZT17c3RhcnQ6YSxlbmQ6TX06bmUuZW5kPWE7YnJlYWs7Y2Fz'@;
put 'ZSJTRS1OVyI6InRvcCI9PT1mP25lPXtzdGFydDphLGVuZDp2fTpuZS5lbmQ9YTticmVhaztjYXNlIlNXLU5FIjoidG9wIj09PWY/bmU9e3N0YXJ0OmEsZW5kOlp9Om5lLmVuZD1hfWJyZWFrO2Nhc2UiU1ctTkUiOnN3aXRjaChoKXtjYXNlIk5XLVNFIjpuZT0iYm90dG9tIj09PWY/e3N0YXJ0'@;
put 'OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoRC5yb3csYS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModi5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyhh'@;
put 'LnJvdyxNLmNvbCl9O2JyZWFrO2Nhc2UiU1ctTkUiOm5lPSJ0b3AiPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5oaWdobGlnaHQucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csTS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2Ny'@;
put 'ZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxhLmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09Zj9uZT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csWi5jb2wpLGVuZDp0aGlzLmhv'@;
put 'dC5fY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxhLmNvbCl9OiJ0b3AiPT09ZiYmKG5lPXtzdGFydDpELGVuZDphfSl9YnJlYWs7Y2FzZSJTRS1OVyI6c3dpdGNoKGgpe2Nhc2UiTlctU0UiOmNhc2UiTkUtU1ciOmNhc2UiU1ctTkUiOiJ0b3AiPT09ZiYmKG5lLmVuZD1hKTticmVhaztjYXNlIlNF'@;
put 'LU5XIjoidG9wIj09PWY/bmUuZW5kPWE6bmU9e3N0YXJ0OmEsZW5kOnZ9fX1yZXR1cm4gbmV9aXNEcmFnZ2VkKCl7cmV0dXJuIHRoaXMuZHJhZ2dlZC5sZW5ndGg+MH19ZnVuY3Rpb24gcVEoKXtsZXR7bGFiZWw6Yz0iIixjb2xzcGFuOmw9MSxvcmlnQ29sc3BhbjphPTEsY29sbGFwc2libGU6'@;
put 'ZD0hMSxjcm9zc0hpZGRlbkNvbHVtbnM6aD1bXSxpc0NvbGxhcHNlZDpmPSExLGlzSGlkZGVuOnY9ITEsaXNSb290Ok09ITEsaXNQbGFjZWhvbGRlcjpEPSExLGhlYWRlckNsYXNzTmFtZXM6Wj1bXX09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRz'@;
put 'WzBdOnt9O3JldHVybntsYWJlbDpjLGNvbHNwYW46bCxvcmlnQ29sc3BhbjphLGNvbGxhcHNpYmxlOmQsaXNDb2xsYXBzZWQ6Zixjcm9zc0hpZGRlbkNvbHVtbnM6aCxpc0hpZGRlbjp2LGlzUm9vdDpNLGlzUGxhY2Vob2xkZXI6RCxoZWFkZXJDbGFzc05hbWVzOlp9fWZ1bmN0aW9uIFhRKGMs'@;
put 'bCxhKXsoZnVuY3Rpb24gcTN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3MyhjLGwpe3JldHVybiBj'@;
put 'LmdldChFbWUoYyxsKSl9ZnVuY3Rpb24gcEEoYyxsLGEpe3JldHVybiBjLnNldChFbWUoYyxsKSxhKSxhfWZ1bmN0aW9uIEVtZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgVG1lPVsibGFiZWwiLCJjb2xsYXBzaWJsZSJdO3ZhciBaZz1uZXcgV2Vha01hcCx6OT1uZXcgV2Vha01hcCxKUT1uZXcgV2Vha01hcDtjbGFzcyBYM3R7Y29uc3RydWN0b3IoKXtYUSh0'@;
put 'aGlzLFpnLFtdKSxYUSh0aGlzLHo5LDApLFhRKHRoaXMsSlEsMS8wKX1zZXRDb2x1bW5zTGltaXQobCl7cEEoSlEsdGhpcyxsKX1zZXREYXRhKCl7cEEoWmcsdGhpcyxmdW5jdGlvbiBLM3QoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l'@;
put 'bnRzWzFdOjEvMDtjb25zdCBhPVtdO2lmKDA9PT1sKXJldHVybiBhO1luKGMsaD0+e2NvbnN0IGY9W107bGV0IHY9MDthLnB1c2goZiksWW4oaCxNPT57Y29uc3QgRD1xUSgpO2lmKHFhKE0pKXtjb25zdHtsYWJlbDpuZSxjb2xzcGFuOmNlLGhlYWRlckNsYXNzTmFtZTpiZX09TTtELmxhYmVs'@;
put 'PWxjKG5lKSwibnVtYmVyIj09dHlwZW9mIGNlJiZjZT4xJiYoRC5jb2xzcGFuPWNlLEQub3JpZ0NvbHNwYW49Y2UpLCJzdHJpbmciPT10eXBlb2YgYmUmJihELmhlYWRlckNsYXNzTmFtZXM9Wy4uLmJlLnNwbGl0KCIgIildKX1lbHNlIEQubGFiZWw9bGMoTSk7dis9RC5vcmlnQ29sc3Bhbjts'@;
put 'ZXQgWj0hMTtpZih2Pj1sJiYoRC5jb2xzcGFuPUQub3JpZ0NvbHNwYW4tKHYtbCksRC5vcmlnQ29sc3Bhbj1ELmNvbHNwYW4sWj0hMCksZi5wdXNoKEQpLEQuY29sc3Bhbj4xKWZvcihsZXQgbmU9MDtuZTxELmNvbHNwYW4tMTtuZSsrKWYucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjoh'@;
put 'MH0pO3JldHVybiFafSl9KTtjb25zdCBkPU1hdGgubWF4KC4uLnlzKGEsaD0+aC5sZW5ndGgpKTtyZXR1cm4gWW4oYSxoPT57aWYoaC5sZW5ndGg8ZCl7Y29uc3QgZj15cyhuZXcgQXJyYXkoZC1oLmxlbmd0aCksKCk9PnFRKCkpO2guc3BsaWNlKGgubGVuZ3RoLDAsLi4uZil9fSksYX0oYXJn'@;
put 'dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLHczKEpRLHRoaXMpKSkscEEoejksdGhpcyx3MyhaZyx0aGlzKS5sZW5ndGgpfWdldERhdGEoKXtyZXR1cm4gdzMoWmcsdGhpcyl9bWVyZ2VXaXRoKGwpe1luKGwsYT0+e2xldHtyb3c6ZCxjb2w6'@;
put 'aCwuLi5mfT1hO2NvbnN0IHY9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhkLGgpO251bGwhPT12JiZ4dSh2LGYsVG1lKX0pfW1hcChsKXtZbih3MyhaZyx0aGlzKSxhPT57WW4oYSxkPT57Y29uc3QgaD1sKHsuLi5kfSk7cWEoaCkmJnh1KGQsaCxUbWUpfSl9KX1nZXRIZWFkZXJTZXR0aW5ncyhs'@;
put 'LGEpe3ZhciBkO2lmKGw+PXczKHo5LHRoaXMpfHxsPDApcmV0dXJuIG51bGw7Y29uc3QgaD13MyhaZyx0aGlzKVtsXTtyZXR1cm4hMT09PUFycmF5LmlzQXJyYXkoaCl8fGE+PWgubGVuZ3RoP251bGw6bnVsbCE9PShkPWhbYV0pJiZ2b2lkIDAhPT1kP2Q6bnVsbH1nZXRIZWFkZXJzU2V0dGlu'@;
put 'Z3MobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBoPVtdO2lmKGw+PXczKHo5LHRoaXMpfHxsPDApcmV0dXJuIGg7Y29uc3QgZj13MyhaZyx0aGlzKVtsXTtsZXQgdj0wO2ZvcihsZXQgTT1hO008Zi5sZW5n'@;
put 'dGg7TSsrKXtjb25zdCBEPWZbTV07aWYoRC5pc1BsYWNlaG9sZGVyKXRocm93IG5ldyBFcnJvcigiVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpO2lmKHYrPUQuY29sc3BhbixoLnB1c2goRCksRC5jb2xzcGFuPjEmJihN'@;
put 'Kz1ELmNvbHNwYW4tMSksdj09PWQpYnJlYWs7aWYodj5kKXRocm93IG5ldyBFcnJvcigiVGhlIGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9cmV0dXJuIGh9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gdzMoejksdGhpcyl9Z2V0'@;
put 'Q29sdW1uc0NvdW50KCl7cmV0dXJuIHczKHo5LHRoaXMpPjA/dzMoWmcsdGhpcylbMF0ubGVuZ3RoOjB9Y2xlYXIoKXtwQShaZyx0aGlzLFtdKSxwQSh6OSx0aGlzLDApfX1mdW5jdGlvbiBRUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSjN0KGMpe3ZhciBsPWZ1bmN0aW9uIFEzdChjLGwp'@;
put 'e2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q'@;
put 'cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1'@;
put 'ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgQW1lPSJERi1wcmUtb3JkZXIiLFJtZT1uZXcgTWFwKFtbQW1lLGZ1bmN0aW9uIGttZShjLGwpe2xldCBhPWMuY2FsbChsLHRoaXMpO2ZvcihsZXQgZD0wO2Q8dGhpcy5jaGlsZHMu'@;
put 'bGVuZ3RoO2QrKyl7aWYoITE9PT1hKXJldHVybiExO2E9a21lLmNhbGwodGhpcy5jaGlsZHNbZF0sYyxsKX1yZXR1cm4gYX1dLFsiREYtcG9zdC1vcmRlciIsZnVuY3Rpb24gRG1lKGMsbCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcy5sZW5ndGg7YSsrKWlmKCExPT09RG1lLmNhbGwodGhp'@;
put 'cy5jaGlsZHNbYV0sYyxsKSlyZXR1cm4hMTtyZXR1cm4gYy5jYWxsKGwsdGhpcyl9XSxbIkJGIixmdW5jdGlvbiB0cHQoYyxsKXtjb25zdCBhPVt0aGlzXTshZnVuY3Rpb24gZCgpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm47Y29uc3QgaD1hLnNoaWZ0KCk7YS5wdXNoKC4uLmguY2hpbGRzKSwh'@;
put 'MSE9PWMuY2FsbChsLGgpJiZkKCl9KCl9XV0pO2NsYXNzIERIe2NvbnN0cnVjdG9yKGwpe1FRKHRoaXMsImRhdGEiLHt9KSxRUSh0aGlzLCJwYXJlbnQiLG51bGwpLFFRKHRoaXMsImNoaWxkcyIsW10pLHRoaXMuZGF0YT1sfWFkZENoaWxkKGwpe2wucGFyZW50PXRoaXMsdGhpcy5jaGlsZHMu'@;
put 'cHVzaChsKX1jbG9uZVRyZWUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcztjb25zdCBhPW5ldyBESCh7Li4ubC5kYXRhfSk7Zm9yKGxldCBkPTA7ZDxsLmNoaWxkcy5sZW5ndGg7ZCsrKWEuYWRkQ2hpbGQodGhpcy5j'@;
put 'bG9uZVRyZWUobC5jaGlsZHNbZF0pKTtyZXR1cm4gYX1yZXBsYWNlVHJlZVdpdGgobCl7dGhpcy5kYXRhPXsuLi5sLmRhdGF9LHRoaXMuY2hpbGRzPVtdO2ZvcihsZXQgYT0wO2E8bC5jaGlsZHMubGVuZ3RoO2ErKyl0aGlzLmFkZENoaWxkKGwuY2hpbGRzW2FdKX13YWxrRG93bihsKXtsZXQg'@;
put 'YT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IkJGIjtpZighUm1lLmhhcyhhKSl0aHJvdyBuZXcgRXJyb3IoYFRyYXZlcnNhbCBzdHJhdGVneSAiJHthfSIgZG9lcyBub3QgZXhpc3RgKTtSbWUuZ2V0KGEpLmNhbGwodGhpcyxsLHRoaXMp'@;
put 'fXdhbGtVcChsKXtjb25zdCBhPXRoaXMsZD1oPT57ITEhPT1sLmNhbGwoYSxoKSYmbnVsbCE9PWgucGFyZW50JiZkKGgucGFyZW50KX07ZCh0aGlzKX19ZnVuY3Rpb24gZWVlKGMsbCxhKXsoZnVuY3Rpb24gcnB0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90'@;
put 'IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBpZChjLGwpe3JldHVybiBjLmdldChMbWUoYyxsKSl9ZnVuY3Rpb24gTG1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09'@;
put 'bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZ3c9bmV3IFdlYWtNYXAsVTk9bmV3IFdlYWtNYXAsbXc9bmV3IFdlYWtNYXA7Y2xhc3Mg'@;
put 'b3B0e2NvbnN0cnVjdG9yKGwpe2VlZSh0aGlzLGd3LG5ldyBNYXApLGVlZSh0aGlzLFU5LG5ldyBNYXApLGVlZSh0aGlzLG13LG51bGwpLGZ1bmN0aW9uIGlwdChjLGwsYSl7Yy5zZXQoTG1lKGMsbCksYSl9KG13LHRoaXMsbCl9Z2V0Um9vdHMoKXtyZXR1cm4gQXJyYXkuZnJvbShpZChndyx0'@;
put 'aGlzKS52YWx1ZXMoKSl9Z2V0Um9vdEJ5Q29sdW1uKGwpe2xldCBhO3JldHVybiBpZChVOSx0aGlzKS5oYXMobCkmJihhPWlkKGd3LHRoaXMpLmdldChpZChVOSx0aGlzKS5nZXQobCkpKSxhfWdldE5vZGUobCxhKXtjb25zdCBkPXRoaXMuZ2V0Um9vdEJ5Q29sdW1uKGEpO2lmKCFkKXJldHVy'@;
put 'bjtjb25zdCBoPWEtaWQoVTksdGhpcykuZ2V0KGEpO2xldCB2LGY9MDtyZXR1cm4gZC53YWxrRG93bihNPT57Y29uc3R7ZGF0YTp7b3JpZ0NvbHNwYW46RCxoZWFkZXJMZXZlbDpafX09TTtpZihsPT09Wil7aWYoaD49ZiYmaDw9ZitELTEpcmV0dXJuIHY9TSx2LmRhdGEuaXNSb290PWE9PT12'@;
put 'LmRhdGEuY29sdW1uSW5kZXgsITE7Zis9RH19KSx2fXJlYnVpbGRUcmVlSW5kZXgoKXtsZXQgbD0wO2lkKFU5LHRoaXMpLmNsZWFyKCksWW4oaWQoZ3csdGhpcyksYT0+e2xldFsse2RhdGE6e2NvbHNwYW46ZH19XT1hO2ZvcihsZXQgaD1sO2g8bCtkO2grKylpZChVOSx0aGlzKS5zZXQoaCxs'@;
put 'KTtsKz1kfSl9YnVpbGRUcmVlKCl7dGhpcy5jbGVhcigpO2NvbnN0IGw9aWQobXcsdGhpcykuZ2V0Q29sdW1uc0NvdW50KCk7bGV0IGE9MDtmb3IoO2E8bDspe2NvbnN0IGQ9aWQobXcsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MoMCxhKSxoPW5ldyBESDtpZChndyx0aGlzKS5zZXQoYSxoKSx0'@;
put 'aGlzLmJ1aWxkTGVhdmVzKGgsYSwwLGQub3JpZ0NvbHNwYW4pLGErPWQub3JpZ0NvbHNwYW59dGhpcy5yZWJ1aWxkVHJlZUluZGV4KCl9YnVpbGRMZWF2ZXMobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXToxO2NvbnN0'@;
put 'IGY9aWQobXcsdGhpcykuZ2V0SGVhZGVyc1NldHRpbmdzKGQsYSxoKTtkKz0xLFluKGYsdj0+e2NvbnN0IE09ey4uLnYsaGVhZGVyTGV2ZWw6ZC0xLGNvbHVtbkluZGV4OmF9O2xldCBEOzE9PT1kPyhsLmRhdGE9TSxEPWwpOihEPW5ldyBESChNKSxsLmFkZENoaWxkKEQpKSxkPGlkKG13LHRo'@;
put 'aXMpLmdldExheWVyc0NvdW50KCkmJnRoaXMuYnVpbGRMZWF2ZXMoRCxhLGQsdi5vcmlnQ29sc3BhbiksYSs9di5vcmlnQ29sc3Bhbn0pfWNsZWFyKCl7aWQoZ3csdGhpcykuY2xlYXIoKSxpZChVOSx0aGlzKS5jbGVhcigpfX1mdW5jdGlvbiBPbWUoYyxsKXtjLndhbGtEb3duKGE9PntsZXR7'@;
put 'ZGF0YTpkLGNoaWxkczpofT1hO2lmKCFkLmlzSGlkZGVuJiYobChkLmNvbHVtbkluZGV4KSwwPT09aC5sZW5ndGgpKWZvcihsZXQgZj0xO2Y8ZC5jb2xzcGFuO2YrKylsKGQuY29sdW1uSW5kZXgrZil9KX1mdW5jdGlvbiBJSChjLGwpe2xldHtjaGlsZHM6YX09YztpZigwIT09YS5sZW5ndGgp'@;
put 'cmV0dXJuIGFbMF0uZGF0YVtsXX1mdW5jdGlvbiBSSChjKXtyZXR1cm4gSUgoYywib3JpZ0NvbHNwYW4iKT09PWMuZGF0YS5vcmlnQ29sc3Bhbn1mdW5jdGlvbiB0ZWUoYyl7Y29uc3R7ZGF0YTpsLGNoaWxkczphfT1jO2lmKCFsLmlzQ29sbGFwc2VkfHxsLmlzSGlkZGVufHxsLm9yaWdDb2xz'@;
put 'cGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoUkgoYykpcmV0dXJuIHRlZShhWzBdKTtsLmlzQ29sbGFwc2VkPSExO2NvbnN0IGg9YS5zbGljZSgxKSxmPW5ldyBTZXQ7bGV0IHY9MDtp'@;
put 'ZihoLmxlbmd0aD4wKVluKGgsTT0+e00ucmVwbGFjZVRyZWVXaXRoKE0uZGF0YS5jbG9uZWRUcmVlKSxNLmRhdGEuY2xvbmVkVHJlZT1udWxsLHYrPU0uZGF0YS5jb2xzcGFuLE9tZShNLFo9PntmLmFkZChaKX0pfSk7ZWxzZXtjb25zdHtjb2xzcGFuOk0sb3JpZ0NvbHNwYW46RCxjb2x1bW5J'@;
put 'bmRleDpafT1sO3Y9RC1NO2ZvcihsZXQgbmU9MTtuZTxEO25lKyspZi5hZGQoWituZSl9cmV0dXJuIGMud2Fsa1VwKE09Pntjb25zdHtkYXRhOkR9PU07RC5jb2xzcGFuKz12LEQuY29sc3Bhbj49RC5vcmlnQ29sc3Bhbj8oRC5jb2xzcGFuPUQub3JpZ0NvbHNwYW4sRC5pc0NvbGxhcHNlZD0h'@;
put 'MSk6UkgoTSkmJihELmlzQ29sbGFwc2VkPUlIKE0sImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT5uZWUoYyksYWZmZWN0ZWRDb2x1bW5zOkFycmF5LmZyb20oZiksY29sc3BhbkNvbXBlbnNhdGlvbjp2fX1mdW5jdGlvbiBuZWUoYyl7dmFyIGw7Y29uc3R7ZGF0'@;
put 'YTphLGNoaWxkczpkfT1jO2lmKGEuaXNDb2xsYXBzZWR8fGEuaXNIaWRkZW58fGEub3JpZ0NvbHNwYW48PTEpcmV0dXJue3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT57fSxhZmZlY3RlZENvbHVtbnM6W10sY29sc3BhbkNvbXBlbnNhdGlvbjowfTtpZihSSChjKSlyZXR1cm4gbmVlKGRbMF0p'@;
put 'O2EuaXNDb2xsYXBzZWQ9ITA7Y29uc3QgZj1kLnNsaWNlKDEpLHY9bmV3IFNldDtpZihmLmxlbmd0aD4wKVluKGYsRD0+e09tZShELFo9Pnt2LmFkZChaKX0pLEQuZGF0YS5jbG9uZWRUcmVlPUQuY2xvbmVUcmVlKCksRC53YWxrRG93bihaPT57bGV0e2RhdGE6bmV9PVo7bmUuaXNIaWRkZW49'@;
put 'ITB9KX0pO2Vsc2V7Y29uc3R7b3JpZ0NvbHNwYW46RCxjb2x1bW5JbmRleDpafT1hO2ZvcihsZXQgbmU9MTtuZTxEO25lKyspdi5hZGQoWituZSl9Y29uc3QgTT1hLmNvbHNwYW4tKG51bGwhPT0obD1JSChjLCJjb2xzcGFuIikpJiZ2b2lkIDAhPT1sP2w6MSk7cmV0dXJuIGMud2Fsa1VwKEQ9'@;
put 'Pntjb25zdHtkYXRhOlp9PUQ7Wi5jb2xzcGFuLT1NLFouY29sc3Bhbjw9MT8oWi5jb2xzcGFuPTEsWi5pc0NvbGxhcHNlZD0hMCk6UkgoRCkmJihaLmlzQ29sbGFwc2VkPUlIKEQsImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT50ZWUoYyksYWZmZWN0ZWRDb2x1'@;
put 'bW5zOkFycmF5LmZyb20odiksY29sc3BhbkNvbXBlbnNhdGlvbjpNfX1jb25zdCBQbWU9bmV3IE1hcChbWyJjb2xsYXBzZSIsbmVlXSxbImV4cGFuZCIsdGVlXSxbImhpZGUtY29sdW1uIixmdW5jdGlvbiBhcHQoYyxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'IlRoZSBwYXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKGdsYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBmb3JceDIwCnRoZSBs'@;
put 'YXN0IG5vZGUsIHRoZSBoaWRlIGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZihhLmluY2x1ZGVzKGwpKXJldHVybjtsZXQgZD0hMTtjLndhbGtVcChoPT57Y29uc3R7ZGF0YTp7Y29sbGFwc2libGU6Zn19'@;
put 'PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jvc3NIaWRkZW5Db2x1bW5zLnB1c2gobCksZi5jb2xzcGFuPjE/Zi5jb2xzcGFuLT0xOmYuaXNIaWRkZW49ITB9KX1dLFsic2hvdy1jb2x1bW4iLGZ1bmN0aW9uIHNwdChjLGwpe2lm'@;
put 'KCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihjLmNoaWxkcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoZ2xgVGhlIHBhc3NlZCBub2RlIGlzIG5vdCB0aGUgbGFz'@;
put 'dCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwgdGhlIHNob3cgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6YX09Yy5kYXRhO2lmKCFhLmluY2x1ZGVzKGwpKXJldHVybjtsZXQgZD0hMTtj'@;
put 'LndhbGtVcChoPT57Y29uc3R7ZGF0YTp7Y29sbGFwc2libGU6Zn19PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jvc3NIaWRkZW5Db2x1bW5zLnNwbGljZShmLmNyb3NzSGlkZGVuQ29sdW1ucy5pbmRleE9mKGwpLDEpLCFmLmlz'@;
put 'SGlkZGVuJiZmLmNvbHNwYW48Zi5vcmlnQ29sc3BhbiYmKGYuY29sc3Bhbis9MSksZi5pc0hpZGRlbj0hMX0pfV1dKTtmdW5jdGlvbiBMSChjKXtjb25zdCBsPVtdO3JldHVybiBZbihjLGE9PnthLndhbGtEb3duKGQ9Pntjb25zdCBoPWQuZGF0YSx7b3JpZ0NvbHNwYW46Zixjb2x1bW5JbmRl'@;
put 'eDp2LGhlYWRlckxldmVsOk0sY3Jvc3NIaWRkZW5Db2x1bW5zOkR9PWgsWj1mdW5jdGlvbiB1cHQoYyxsKXtsZXQgYTtyZXR1cm4gQXJyYXkuaXNBcnJheShjW2xdKT9hPWNbbF06KGE9W10sY1tsXT1hKSxhfShsLE0pO2xldCBuZT0hMTtmb3IobGV0IGNlPXY7Y2U8ditmO2NlKyspaWYoRC5p'@;
put 'bmNsdWRlcyhjZSl8fG5lKVoucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO2Vsc2V7Y29uc3QgRWU9Y3B0KGgpO0VlLmlzUm9vdD0hMCxaLnB1c2goRWUpLG5lPSEwfX0pfSksbH1mdW5jdGlvbiBjcHQoYyl7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmwsLi4uYX09cVEoYyk7'@;
put 'cmV0dXJuIGF9ZnVuY3Rpb24gcmVlKGMsbCxhKXsoZnVuY3Rpb24gZHB0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1m'@;
put 'dW5jdGlvbiBnQShjLGwsYSl7cmV0dXJuIGMuc2V0KEZtZShjLGwpLGEpLGF9ZnVuY3Rpb24gS2MoYyxsKXtyZXR1cm4gYy5nZXQoRm1lKGMsbCkpfWZ1bmN0aW9uIEZtZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5n'@;
put 'dGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIG40PW5ldyBXZWFrTWFwLEpkPW5ldyBXZWFrTWFwLFo5PW5ldyBXZWFrTWFwO2NsYXNzIGhwdHtjb25zdHJ1Y3Rvcigpe3JlZSh0aGlzLG40LG5l'@;
put 'dyBYM3QpLHJlZSh0aGlzLEpkLG5ldyBvcHQoS2MobjQsdGhpcykpKSxyZWUodGhpcyxaOSxbW11dKX1zZXRTdGF0ZShsKXtLYyhuNCx0aGlzKS5zZXREYXRhKGwpO2xldCBhPSExO3RyeXtLYyhKZCx0aGlzKS5idWlsZFRyZWUoKX1jYXRjaHtLYyhKZCx0aGlzKS5jbGVhcigpLEtjKG40LHRo'@;
put 'aXMpLmNsZWFyKCksYT0hMH1yZXR1cm4gZ0EoWjksdGhpcyxMSChLYyhKZCx0aGlzKS5nZXRSb290cygpKSksYX1zZXRDb2x1bW5zTGltaXQobCl7S2MobjQsdGhpcykuc2V0Q29sdW1uc0xpbWl0KGwpfW1lcmdlU3RhdGVXaXRoKGwpe2NvbnN0IGE9eXMobCxkPT57bGV0e3JvdzpoLC4uLmZ9'@;
put 'PWQ7cmV0dXJue3JvdzpoPDA/dGhpcy5yb3dDb29yZHNUb0xldmVsKGgpOmgsLi4uZn19KTtLYyhuNCx0aGlzKS5tZXJnZVdpdGgoYSksS2MoSmQsdGhpcykuYnVpbGRUcmVlKCksZ0EoWjksdGhpcyxMSChLYyhKZCx0aGlzKS5nZXRSb290cygpKSl9bWFwU3RhdGUobCl7S2MobjQsdGhpcyku'@;
put 'bWFwKGwpLEtjKEpkLHRoaXMpLmJ1aWxkVHJlZSgpLGdBKFo5LHRoaXMsTEgoS2MoSmQsdGhpcykuZ2V0Um9vdHMoKSkpfW1hcE5vZGVzKGwpe3JldHVybiBLdShLYyhKZCx0aGlzKS5nZXRSb290cygpLChhLGQpPT4oZC53YWxrRG93bihoPT57Y29uc3QgZj1sKGguZGF0YSk7dm9pZCAwIT09'@;
put 'ZiYmYS5wdXNoKGYpfSksYSksW10pfXRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGwsYSxkKXthPDAmJihhPXRoaXMucm93Q29vcmRzVG9MZXZlbChhKSk7Y29uc3QgaD1LYyhKZCx0aGlzKS5nZXROb2RlKGEsZCk7bGV0IGY7cmV0dXJuIGgmJihmPWZ1bmN0aW9uIGxwdChjLGwsYSl7aWYoIVBt'@;
put 'ZS5oYXMoYykpdGhyb3cgbmV3IEVycm9yKGBUaGUgbm9kZSBtb2RpZmllciBhY3Rpb24gKCIke2N9IikgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIFBtZS5nZXQoYykobCxhKX0obCxoLGQpLGdBKFo5LHRoaXMsTEgoS2MoSmQsdGhpcykuZ2V0Um9vdHMoKSkpKSxmfXRyaWdnZXJDb2x1bW5N'@;
put 'b2RpZmljYXRpb24obCxhKXtyZXR1cm4gdGhpcy50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihsLC0xLGEpfXJvd0Nvb3Jkc1RvTGV2ZWwobCl7aWYobD49MClyZXR1cm4gbnVsbDtjb25zdCBhPWwrTWF0aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiBhPDA/bnVsbDphfWxl'@;
put 'dmVsVG9Sb3dDb29yZHMobCl7aWYobDwwKXJldHVybiBudWxsO2NvbnN0IGE9bC1NYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIGE+PTA/bnVsbDphfWdldEhlYWRlclNldHRpbmdzKGwsYSl7dmFyIGQsaDtyZXR1cm4gbDwwJiYobD10aGlzLnJvd0Nvb3Jkc1RvTGV2'@;
put 'ZWwobCkpLG51bGw9PT1sfHxsPj10aGlzLmdldExheWVyc0NvdW50KCk/bnVsbDpudWxsIT09KGQ9bnVsbD09PShoPUtjKFo5LHRoaXMpW2xdKXx8dm9pZCAwPT09aD92b2lkIDA6aFthXSkmJnZvaWQgMCE9PWQ/ZDpudWxsfWdldEhlYWRlclRyZWVOb2RlRGF0YShsLGEpe2NvbnN0IGQ9dGhp'@;
put 'cy5nZXRIZWFkZXJUcmVlTm9kZShsLGEpO3JldHVybiBkP3suLi5kLmRhdGF9Om51bGx9Z2V0SGVhZGVyVHJlZU5vZGUobCxhKXtyZXR1cm4gbDwwJiYobD10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwobCkpLG51bGw9PT1sfHxsPj10aGlzLmdldExheWVyc0NvdW50KCk/bnVsbDpLYyhKZCx0aGlz'@;
put 'KS5nZXROb2RlKGwsYSl8fG51bGx9ZmluZFRvcE1vc3RFbnRpcmVIZWFkZXJMZXZlbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bDtjb25zdCBkPWEtbCsxO2xldCBoPSExLGY9bnVsbDtmb3IobGV0IHY9bDt2PD1hO3Yr'@;
put 'Kyl7Y29uc3QgTT1LYyhKZCx0aGlzKS5nZXRSb290QnlDb2x1bW4odik7aWYoIU0pYnJlYWs7aD0hMCxNLndhbGtEb3duKEQ9Pntjb25zdHtjb2x1bW5JbmRleDpaLGhlYWRlckxldmVsOm5lLG9yaWdDb2xzcGFuOmNlLGlzSGlkZGVuOmJlfT1ELmRhdGE7YmV8fGNlPD1kJiZaPj1sJiZaK2Nl'@;
put 'LTE8PWEmJihudWxsPT09Znx8bmU8ZikmJihmPW5lKX0sQW1lKX1yZXR1cm4gaCYmbnVsbD09PWY/LTE6dGhpcy5sZXZlbFRvUm93Q29vcmRzKGY/PzApfWZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGwsYSl7dmFyIGQ7Y29uc3R7aXNSb290Omh9PW51bGwhPT0oZD10aGlzLmdldEhlYWRlclNl'@;
put 'dHRpbmdzKGwsYSkpJiZ2b2lkIDAhPT1kP2Q6e2lzUm9vdDohMH07aWYoaClyZXR1cm4gYTtsZXQgZj1hLTE7Zm9yKDtmPj0wOyl7dmFyIHY7Y29uc3R7aXNSb290Ok19PW51bGwhPT0odj10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsZikpJiZ2b2lkIDAhPT12P3Y6e2lzUm9vdDohMH07aWYo'@;
put 'TSlicmVhaztmLT0xfXJldHVybiBmfWZpbmRSaWdodE1vc3RDb2x1bW5JbmRleChsLGEpe3ZhciBkO2NvbnN0e2lzUm9vdDpoLG9yaWdDb2xzcGFuOmZ9PW51bGwhPT0oZD10aGlzLmdldEhlYWRlclNldHRpbmdzKGwsYSkpJiZ2b2lkIDAhPT1kP2Q6e2lzUm9vdDohMCxvcmlnQ29sc3Bhbjox'@;
put 'fTtpZihoKXJldHVybiBhK2YtMTtsZXQgdj1hKzE7Zm9yKDt2PHRoaXMuZ2V0Q29sdW1uc0NvdW50KCk7KXt2YXIgTTtjb25zdHtpc1Jvb3Q6RH09bnVsbCE9PShNPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCx2KSkmJnZvaWQgMCE9PU0/TTp7aXNSb290OiEwfTtpZihEKWJyZWFrO3YrPTF9'@;
put 'cmV0dXJuIHYtMX1nZXRMYXllcnNDb3VudCgpe3JldHVybiBLYyhuNCx0aGlzKS5nZXRMYXllcnNDb3VudCgpfWdldENvbHVtbnNDb3VudCgpe3JldHVybiBLYyhuNCx0aGlzKS5nZXRDb2x1bW5zQ291bnQoKX1jbGVhcigpe2dBKFo5LHRoaXMsW10pLEtjKG40LHRoaXMpLmNsZWFyKCksS2Mo'@;
put 'SmQsdGhpcykuY2xlYXIoKX19ZnVuY3Rpb24gbUEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGZwdChjKXt2YXIgbD1mdW5jdGlvbiBwcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2'@;
put 'YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9'@;
put 'KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IG1wdD1jbGFzcyBncHR7Y29u'@;
put 'c3RydWN0b3IobCxhKXttQSh0aGlzLCJob3QiLHZvaWQgMCksbUEodGhpcywibmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXIiLHZvaWQgMCksbUEodGhpcywibGF5ZXJzQ291bnQiLDApLG1BKHRoaXMsImNvbnRhaW5lciIsdm9pZCAwKSxtQSh0aGlzLCJ3aWR0aHNNYXAiLHZvaWQgMCksdGhp'@;
put 'cy5ob3Q9bCx0aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyPWEsdGhpcy53aWR0aHNNYXA9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0ZXJJbmRleE1hcCgibmVzdGVkSGVhZGVycy53aWR0aHNNYXAiLCJwaHlzaWNhbEluZGV4VG9WYWx1ZSIpfXNldExh'@;
put 'eWVyc0NvdW50KGwpe3JldHVybiB0aGlzLmxheWVyc0NvdW50PWwsdGhpc31nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53aWR0aHNNYXAuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfWJ1aWxkV2lkdGhzTWFwKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRDdXJy'@;
put 'ZW50VGhlbWVOYW1lKCk7dGhpcy5jb250YWluZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImhhbmRzb250YWJsZSIsImh0R2hvc3RUYWJsZSIsImh0QXV0b1NpemUiKSxsJiZ0aGlzLmNvbnRhaW5lci5j'@;
put 'bGFzc0xpc3QuYWRkKGwpLHRoaXMuX2J1aWxkR2hvc3RUYWJsZSh0aGlzLmNvbnRhaW5lciksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpO2NvbnN0IGE9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgidHI6bGFzdC1vZi10eXBl'@;
put 'IHRoIiksZD1hLmxlbmd0aDt0aGlzLndpZHRoc01hcC5jbGVhcigpO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKSx2PXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZik7dGhpcy53'@;
put 'aWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KHYsYVtoXS5vZmZzZXRXaWR0aCl9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVsbH1fYnVpbGRHaG9zdFRhYmxlKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphLGNvbHVt'@;
put 'bkluZGV4TWFwcGVyOmR9PXRoaXMuaG90LGg9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZj1hLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksdj0hIXRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51LE09ZC5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO2ZvcihsZXQgRD0w'@;
put 'O0Q8dGhpcy5sYXllcnNDb3VudDtEKyspe2NvbnN0IFo9YS5jcmVhdGVFbGVtZW50KCJ0ciIpO2ZvcihsZXQgbmU9MDtuZTxNO25lKyspe2xldCBjZT1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobmUpO251bGw9PT1jZSYmKGNlPW5lKTtjb25zdCBiZT1hLmNyZWF0ZUVsZW1lbnQo'@;
put 'InRoIiksRWU9dGhpcy5uZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlcihELGNlKTtpZihFZSYmKCFFZS5pc1BsYWNlaG9sZGVyfHxFZS5pc0hpZGRlbikpe2xldCBCZT1FZS5sYWJlbDt2JiYoQmUrPSc8YnV0dG9uIGNsYXNzPSJjaGFuZ2VUeXBlIj48L2J1dHRvbj4nKSxCNyhiZSxCZSksYmUu'@;
put 'Y29sU3Bhbj1FZS5jb2xzcGFuLFouYXBwZW5kQ2hpbGQoYmUpfX1mLmFwcGVuZENoaWxkKFopfWguYXBwZW5kQ2hpbGQoZiksbC5hcHBlbmRDaGlsZChoKX1jbGVhcigpe3RoaXMud2lkdGhzTWFwLmNsZWFyKCksdGhpcy5jb250YWluZXI9bnVsbH19O2Z1bmN0aW9uIEhtZShjLGwsYSl7cmV0'@;
put 'dXJuKGw9ZnVuY3Rpb24gYnB0KGMpe3ZhciBsPWZ1bmN0aW9uIHlwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIh'@;
put 'PXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6'@;
put 'bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gdkEoYyxsLGEpe05tZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gTm1lKGMsbCl7aWYobC5o'@;
put 'YXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBXZyhjLGwsYSl7cmV0dXJuIGMuc2V0KHFjKGMsbCksYSksYX1mdW5jdGlvbiBfcyhjLGwpe3JldHVybiBjLmdl'@;
put 'dChxYyhjLGwpKX1mdW5jdGlvbiBxYyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0'@;
put 'Iil9Y29uc3QgVm1lPSJuZXN0ZWRIZWFkZXJzIjt2YXIgRGw9bmV3IFdlYWtNYXAsdzY9bmV3IFdlYWtNYXAsYkE9bmV3IFdlYWtNYXAsT0g9bmV3IFdlYWtNYXAsUEg9bmV3IFdlYWtNYXAsZHU9bmV3IFdlYWtTZXQ7Y2xhc3Mgd3B0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlcigu'@;
put 'Li5hcmd1bWVudHMpLGZ1bmN0aW9uIHZwdChjLGwpe05tZShjLGwpLGwuYWRkKGMpfSh0aGlzLGR1KSx2QSh0aGlzLERsLG5ldyBocHQpLHZBKHRoaXMsdzYsbnVsbCksdkEodGhpcyxiQSxudWxsKSx2QSh0aGlzLE9ILCExKSx2QSh0aGlzLFBILG51bGwpLEhtZSh0aGlzLCJnaG9zdFRhYmxl'@;
put 'IixuZXcgbXB0KHRoaXMuaG90LChsLGEpPT50aGlzLmdldEhlYWRlclNldHRpbmdzKGwsYSkpKSxIbWUodGhpcywiZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBWbWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1'@;
put 'cm4gMjgwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtWbWVdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmF9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7KCFBcnJheS5pc0FycmF5'@;
put 'KGEpfHwhQXJyYXkuaXNBcnJheShhWzBdKSkmJmlsKGdsYFlvdXIgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZC4gVGhlIHNldHRpbmdzIGhhcyB0byBiZVx4MjAKICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGFycmF5'@;
put 'cyBlLnEuIFtbJ0ExJywgeyBsYWJlbDogJ0EyJywgY29sc3BhbjogMiB9XV1gKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT5xYyhkdSx0aGlzLEhwdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'LGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBxYyhkdSxsLE5wdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJy'@;
put 'YXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHFjKGR1LGwseHB0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtm'@;
put 'PGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBxYyhkdSxsLEVwdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtm'@;
put 'XT1hcmd1bWVudHNbZl07cmV0dXJuIHFjKGR1LGwsVHB0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNb'@;
put 'Zl07cmV0dXJuIHFjKGR1LGwsQXB0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTty'@;
put 'ZXR1cm4gcWMoZHUsbCxrcHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHFjKGR1'@;
put 'LGwsRHB0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoKT0+cWMoZHUsdGhpcyxGSCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IiwoKT0+cWMoZHUsdGhpcyxGSCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29r'@;
put 'KCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gcWMoZHUsbCxDcHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9v'@;
put 'aygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGQ9PnFjKGR1LHRoaXMsUnB0KS5jYWxsKHRoaXMsZCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtm'@;
put 'XT1hcmd1bWVudHNbZl07cmV0dXJuIHFjKGR1LGwsT3B0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1l'@;
put 'bnRzW2ZdO3JldHVybiBxYyhkdSxsLFBwdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVu'@;
put 'dHNbZl07cmV0dXJuIHFjKGR1LGwsU3B0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNvcHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHFjKGR1LGws'@;
put 'TXB0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHFjKGR1LGwsSXB0KS5jYWxsKGws'@;
put 'Li4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIHFjKGR1LGwsTHB0KS5j'@;
put 'YWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeUZvY3VzZWRFbGVtZW50IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBxYyhkdSxsLEZwdCkuY2FsbChsLC4uLmgp'@;
put 'fSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLCgpPT5xYyhkdSx0aGlzLEZIKS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsKCk9PnFjKGR1LHRoaXMsRkgpLmNhbGwo'@;
put 'dGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpLHRoaXMudXBkYXRlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtfcyhEbCx0aGlzKS5zZXRDb2x1bW5zTGltaXQodGhp'@;
put 'cy5ob3QuY291bnRDb2xzKCkpLEFycmF5LmlzQXJyYXkobCkmJih0aGlzLmRldGVjdGVkT3ZlcmxhcHBlZEhlYWRlcnM9X3MoRGwsdGhpcykuc2V0U3RhdGUobCkpLHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyYmaWwoZ2xgWW91ciBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gc2V0dXAg'@;
put 'Y29udGFpbnMgb3ZlcmxhcHBpbmcgaGVhZGVycy4gVGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb25ceDIwCiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLmApLHRoaXMuZW5hYmxlZCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaGlkaW5nTWFw'@;
put 'c0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVzKCkuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9ITA9PT1hPyJoaWRlLWNvbHVtbiI6InNob3ctY29sdW1uIjtfcyhEbCx0aGlzKS50cmlnZ2VyQ29sdW1uTW9kaWZpY2F0aW9uKGgsZCl9KSwhX3ModzYsdGhpcykmJnRoaXMuZW5hYmxlZCYmV2co'@;
put 'dzYsdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVDaGFuZ2VzT2JzZXJ2ZXIoImhpZGluZyIpLnN1YnNjcmliZShhPT57YS5mb3JFYWNoKGQ9PntsZXR7b3A6aCxpbmRleDpmLG5ld1ZhbHVlOnZ9PWQ7aWYoInJlcGxhY2UiPT09aCl7Y29uc3QgTT0hMD09PXY/ImhpZGUt'@;
put 'Y29sdW1uIjoic2hvdy1jb2x1bW4iO19zKERsLHRoaXMpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oTSxmKX19KSx0aGlzLmdob3N0VGFibGUuYnVpbGRXaWR0aHNNYXAoKX0pKSx0aGlzLmdob3N0VGFibGUuc2V0TGF5ZXJzQ291bnQodGhpcy5nZXRMYXllcnNDb3VudCgpKS5idWlsZFdp'@;
put 'ZHRoc01hcCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsZWFyQ29sc3BhbnMoKSxfcyhEbCx0aGlzKS5jbGVhcigpLF9zKHc2LHRoaXMpLnVuc3Vic2NyaWJlKCksV2codzYsdGhpcyxudWxsKSx0aGlzLmdob3N0VGFibGUuY2xlYXIoKSxzdXBlci5kaXNh'@;
put 'YmxlUGx1Z2luKCl9Z2V0U3RhdGVNYW5hZ2VyKCl7cmV0dXJuIF9zKERsLHRoaXMpfWdldExheWVyc0NvdW50KCl7cmV0dXJuIF9zKERsLHRoaXMpLmdldExheWVyc0NvdW50KCl9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXtyZXR1cm4gX3MoRGwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MobCxh'@;
put 'KX1jbGVhckNvbHNwYW5zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0e193dDpsfT10aGlzLmhvdC52aWV3LGE9bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoLGQ9bC53dFRhYmxlLlRIRUFELGg9bC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJs'@;
put 'ZS5USEVBRCxmPWwud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk/bC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFEOm51bGw7Zm9yKGxldCB2PTA7djxhO3YrKyl7Y29uc3QgTT1kLmNoaWxkTm9kZXNbdl07aWYo'@;
put 'IU0pYnJlYWs7Y29uc3QgRD1oLmNoaWxkTm9kZXNbdl0sWj1mP2YuY2hpbGROb2Rlc1t2XTpudWxsO2ZvcihsZXQgbmU9MCxjZT1NLmNoaWxkTm9kZXMubGVuZ3RoO25lPGNlO25lKyspTS5jaGlsZE5vZGVzW25lXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxjYShNLmNoaWxkTm9kZXNb'@;
put 'bmVdLCJoaWRkZW5IZWFkZXIiKSxEJiZELmNoaWxkTm9kZXNbbmVdJiYoRC5jaGlsZE5vZGVzW25lXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxjYShELmNoaWxkTm9kZXNbbmVdLCJoaWRkZW5IZWFkZXIiKSksZiYmWiYmWi5jaGlsZE5vZGVzW25lXSYmKFouY2hpbGROb2Rlc1tuZV0u'@;
put 'cmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksY2EoWi5jaGlsZE5vZGVzW25lXSwiaGlkZGVuSGVhZGVyIikpfX1oZWFkZXJSZW5kZXJlckZhY3RvcnkobCl7dmFyIGE9dGhpcztjb25zdCBkPXRoaXMuaG90LnZpZXcuX3d0LmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7cmV0dXJu'@;
put 'KGgsZik9Pnt2YXIgdjtjb25zdHtjb2x1bW5JbmRleE1hcHBlcjpNLHZpZXc6RH09dGhpcy5ob3Q7bGV0IFo9TS5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpO251bGw9PT1aJiYoWj1oKSxmLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGNhKGYsImhpZGRlbkhlYWRlciIpLGNh'@;
put 'KGYsImhpZGRlbkhlYWRlclRleHQiKTtjb25zdHtjb2xzcGFuOm5lLGlzSGlkZGVuOmNlLGlzUGxhY2Vob2xkZXI6YmUsaGVhZGVyQ2xhc3NOYW1lczpFZX09bnVsbCE9PSh2PV9zKERsLHRoaXMpLmdldEhlYWRlclNldHRpbmdzKGwsWikpJiZ2b2lkIDAhPT12P3Y6e2xhYmVsOiIifTtpZihi'@;
put 'ZXx8Y2UpVGkoZiwiaGlkZGVuSGVhZGVyIik7ZWxzZSBpZihuZT4xKXt2YXIgQmUscWUscnQ7Y29uc3R7d3RPdmVybGF5czpwdH09RC5fd3QsZHQ9bnVsbD09PShCZT1wdC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkpfHx2b2lkIDA9PT1CZT92b2lkIDA6QmUuY2xvbmUud3RUYWJsZS5U'@;
put 'SEVBRC5jb250YWlucyhmKSxKdD1udWxsPT09KHFlPXB0LmlubGluZVN0YXJ0T3ZlcmxheSl8fHZvaWQgMD09PXFlP3ZvaWQgMDpxZS5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpOyhudWxsPT09KHJ0PXB0LnRvcE92ZXJsYXkpfHx2b2lkIDA9PT1ydD92b2lkIDA6cnQuY2xvbmUu'@;
put 'd3RUYWJsZS5USEVBRC5jb250YWlucyhmKSkmJlo8ZCYmVGkoZiwiaGlkZGVuSGVhZGVyVGV4dCIpO2NvbnN0IENuPWR0fHxKdD9NYXRoLm1pbihuZSxkLWgpOm5lO0NuPjEmJmYuc2V0QXR0cmlidXRlKCJjb2xzcGFuIixDbil9aWYodGhpcy5ob3Qudmlldy5hcHBlbmRDb2xIZWFkZXIoWixm'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0Q29sdW1uSGVhZGVyVmFsdWUoLi4uYXJndW1lbnRzKX0sbCksIWJlJiYhY2Upe2NvbnN0IHB0PWYucXVlcnlTZWxlY3RvcigiZGl2LnJlbGF0aXZlIik7cHQmJkVlJiZFZS5sZW5ndGg+MCYmKGNhKHB0LHRoaXMuaG90LmdldENvbHVtbk1ldGEoWiku'@;
put 'aGVhZGVyQ2xhc3NOYW1lKSxUaShwdCxFZSkpfX19Z2V0Q29sdW1uSGVhZGVyVmFsdWUobCxhKXt2YXIgZDtjb25zdHtpc0hpZGRlbjpoLGlzUGxhY2Vob2xkZXI6Zn09bnVsbCE9PShkPV9zKERsLHRoaXMpLmdldEhlYWRlclNldHRpbmdzKGEsbCkpJiZ2b2lkIDAhPT1kP2Q6e307cmV0dXJu'@;
put 'IGZ8fGg/IiI6dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGwsYSl9ZGVzdHJveSgpe1dnKERsLHRoaXMsbnVsbCksbnVsbCE9PV9zKHc2LHRoaXMpJiYoX3ModzYsdGhpcykudW5zdWJzY3JpYmUoKSxXZyh3Nix0aGlzLG51bGwpKSxzdXBlci5kZXN0cm95KCl9X2dldEhlYWRlclRyZWVOb2RlRGF0'@;
put 'YUJ5Q29vcmRzKGwpe2lmKCEobC5yb3c+PTB8fGwuY29sPDApKXJldHVybiBfcyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEobC5yb3csbC5jb2wpfX1mdW5jdGlvbiBGSCgpe3ZhciBjO2NvbnN0IGw9bnVsbD09PShjPXRoaXMuaG90KXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5nZXRT'@;
put 'ZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtjb25zdHtoaWdobGlnaHQ6YX09bDtpZihhLmlzSGVhZGVyKCkmJmEuY29sPj0wKXtjb25zdCBoPV9zKERsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGEucm93LGEuY29sKSxmPXRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGln'@;
put 'aHQuZ2V0Rm9jdXMoKTtmLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQuY29sPWgsZi52aXN1YWxDZWxsUmFuZ2UuZnJvbS5jb2w9aCxmLnZpc3VhbENlbGxSYW5nZS50by5jb2w9aCxmLmNvbW1pdCgpfX1mdW5jdGlvbiBDcHQoYyxsKXt2YXIgYTtjb25zdCBkPXRoaXMuaG90LmdldFNlbGVj'@;
put 'dGVkUmFuZ2VMYXN0KCk7aWYoIWQpcmV0dXJuIGM7Y29uc3R7aGlnaGxpZ2h0Omh9PWQse25hdmlnYWJsZUhlYWRlcnM6Zn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSx2PXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxNPWY/aC5yb3c6bnVsbD09PShhPV9z'@;
put 'KFBILHRoaXMpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5yb3csRD12P2M6aC5jb2wsWj1NPDAmJkQ+PTA7aWYoV2coUEgsdGhpcyxudWxsKSwhWilyZXR1cm4gYztjb25zdCBuZT10aGlzLmhvdC5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLGNlPXRoaXMuaG90LmdldExhc3RGdWxseVZp'@;
put 'c2libGVDb2x1bW4oKSxiZT1jZS1uZSsxLEVlPV9zKERsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KE0sRCksQmU9X3MoRGwsdGhpcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KE0sRCkscWU9QmUtRWUrMTtpZihFZTxuZSYmQmU+Y2UpcmV0dXJuIEVlO2lmKHYpe2xldCBydD1u'@;
put 'dWxsO3JldHVybiBFZT49bmUmJkJlPmNlP3FlPmJlPyhsLnZhbHVlPSJzdGFydCIscnQ9RWUpOihsLnZhbHVlPSJlbmQiLHJ0PUJlKTpFZTxuZSYmQmU8PWNlJiYocWU+YmU/KGwudmFsdWU9ImVuZCIscnQ9QmUpOihsLnZhbHVlPSJzdGFydCIscnQ9RWUpKSxydH1yZXR1cm4gRWU8PW5lP0Vl'@;
put 'OkJlfWZ1bmN0aW9uIFNwdChjLGwsYSl7Y29uc3QgZD1fcyhEbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEobCxjKTtpZighZClyZXR1cm4gYztjb25zdHtjb2x1bW5DdXJzb3I6aCxzZWxlY3Rpb25UeXBlOmYsc2VsZWN0aW9uV2lkdGg6dn09YSx7aXNSb290Ok0sY29sc3BhbjpEfT1f'@;
put 'cyhEbCx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncyhsLGMpO2lmKGY9PT1oWCl7aWYoIU0pcmV0dXJuIGQuY29sdW1uSW5kZXh9ZWxzZSBpZihmPT09SDNlJiYoRD52LWh8fCFNKSlyZXR1cm4gbnVsbDtyZXR1cm4gY31mdW5jdGlvbiBNcHQoYyxsLGEpe2xldHtjb2x1bW5IZWFkZXJzQ291bnQ6'@;
put 'ZH09YTtpZigwIT09ZClmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2YrKyl7Y29uc3R7c3RhcnRSb3c6dixzdGFydENvbDpNLGVuZFJvdzpELGVuZENvbDpafT1sW2ZdLG5lPUQtdisxO2lmKHY+PTB8fDE9PU0tWisxKWJyZWFrO2ZvcihsZXQgYmU9TTtiZTw9WjtiZSsrKWZvcihsZXQgRWU9djtF'@;
put 'ZTw9RDtFZSsrKXt2YXIgaDtjb25zdCBCZT1uZStFZSxxZT1iZS1NOzAhPT1xZSYmITE9PT0obnVsbD09PShoPV9zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShFZSxiZSkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmlzUm9vdCkmJihjW0JlXVtxZV09IiIpfX19ZnVuY3Rpb24geHB0'@;
put 'KGMsbCxhLGQpe3RoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpJiYoZC5jb2x1bW49ITApfWZ1bmN0aW9uIEVwdChjLGwpe2NvbnN0IGE9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCk7aWYoIWEpcmV0dXJuO1dnKGJBLHRoaXMsbC5jbG9uZSgpKSxX'@;
put 'ZyhPSCx0aGlzLCEwKTtjb25zdHtzZWxlY3Rpb246ZH09dGhpcy5ob3QsaD1kLmlzU2VsZWN0ZWQoKT9kLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50KCk6bnVsbCxmPVtdLHtjb2x1bW5JbmRleDp2LG9yaWdDb2xzcGFuOk19PWEsRD0hZC5pbkluU2VsZWN0aW9uKGwpO2Muc2hpZnRLZXkm'@;
put 'Jmg/bC5jb2w8aC5mcm9tLmNvbD9mLnB1c2goaC5nZXRUb3BFbmRDb3JuZXIoKS5jb2wsdixsLnJvdyk6Zi5wdXNoKGwuY29sPmguZnJvbS5jb2w/aC5nZXRUb3BTdGFydENvcm5lcigpLmNvbDp2LHYrTS0xLGwucm93KTooek8oYyl8fEZtKGMpJiZEfHxxMmUoYykpJiZmLnB1c2godix2K00t'@;
put 'MSxsLnJvdyksZC5zZWxlY3RDb2x1bW5zKC4uLmYpfWZ1bmN0aW9uIFRwdChjLGwsYSxkKXtpZighdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpfHxkLmNvbHVtbilyZXR1cm47Y29uc3QgaD10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKTtpZighaClyZXR1cm47Y29u'@;
put 'c3R7Y29sdW1uSW5kZXg6ZixvcmlnQ29sc3Bhbjp2fT1oLE09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxEPU0uZ2V0VG9wU3RhcnRDb3JuZXIoKSxaPU0uZ2V0Qm90dG9tRW5kQ29ybmVyKCkse2Zyb206bmV9PU07ZC5jb2x1bW49ITAsZC5jZWxsPSEwO2NvbnN0IGNlPVtdLGJl'@;
put 'PUFzKGwucm93LC0xLzAsLTEpO2wuY29sPG5lLmNvbD9jZS5wdXNoKFouY29sLGYsYmUpOmNlLnB1c2gobC5jb2w+bmUuY29sP0QuY29sOmYsZit2LTEsYmUpLHRoaXMuaG90LnNlbGVjdGlvbi5zZWxlY3RDb2x1bW5zKC4uLmNlKX1mdW5jdGlvbiBBcHQoKXtXZyhPSCx0aGlzLCExKX1mdW5j'@;
put 'dGlvbiBrcHQoKXtjb25zdHtuYXZpZ2FibGVIZWFkZXJzOmN9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7aWYoIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKXx8IV9zKE9ILHRoaXMpfHwhYylyZXR1cm47Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bC5nZXRU'@;
put 'b3BTdGFydENvcm5lcigpLmNvbCxkPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCkuY29sLHtjb2x1bW5JbmRleDpoLG9yaWdDb2xzcGFuOmZ9PV9zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShfcyhiQSx0aGlzKS5yb3csX3MoYkEsdGhpcykuY29sKTtpZihsLnNldEhpZ2hsaWdodChf'@;
put 'cyhiQSx0aGlzKSksZj5sLmdldFdpZHRoKCl8fGg8YXx8aCtmLTE+ZCl7Y29uc3Qgdj1fcyhEbCx0aGlzKS5maW5kVG9wTW9zdEVudGlyZUhlYWRlckxldmVsKEFzKGEsaCxoK2YtMSksQXMoZCxoLGgrZi0xKSk7bC5oaWdobGlnaHQucm93PXYsbC5oaWdobGlnaHQuY29sPWwuZnJvbS5jb2x9'@;
put 'fWZ1bmN0aW9uIERwdChjKXtjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93K2Mucm93LGwuY29sK2MuY29sKTtpZighKGEuaXNIZWFkZXIoKSYmYS5jb2w+PTApKXJldHVybjtjb25zdCBo'@;
put 'PV9zKERsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGEucm93LGEuY29sKSxmPV9zKERsLHRoaXMpLmZpbmRSaWdodE1vc3RDb2x1bW5JbmRleChhLnJvdyxhLmNvbCk7aWYoYy5jb2w8MCl7Y29uc3QgTT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlk'@;
put 'ZGVuSW5kZXgobC5jb2w+PWgmJmwuY29sPD1mP2gtMTpmLC0xKTtjLmNvbD1udWxsPT09TT8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGwuY29sKTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShNLGwu'@;
put 'Y29sKS0xLDEpfWVsc2UgaWYoYy5jb2w+MCl7Y29uc3QgTT10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobC5jb2w+PWgmJmwuY29sPD1mP2YrMTpoLDEpO2MuY29sPW51bGw9PT1NP3RoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1u'@;
put 'c0luUmFuZ2UobC5jb2wsdGhpcy5ob3QuY291bnRDb2xzKCkpOk1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2UobC5jb2wsTSktMSwxKX19ZnVuY3Rpb24gSXB0KGMsbCxhKXtjb25zdCBkPWMucm93LGg9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVE'@;
put 'YXRhQnlDb29yZHMoe3JvdzpkLGNvbDpjLmNvbH0pLGY9dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMoe3JvdzpkLGNvbDpsLmNvbH0pO1dnKFBILHRoaXMsYS5jbG9uZSgpKSxsLmNvbDxjLmNvbD8oaCYmKGMuY29sPWguY29sdW1uSW5kZXgraC5vcmlnQ29sc3Bhbi0xKSxm'@;
put 'JiYobC5jb2w9Zi5jb2x1bW5JbmRleCkpOmwuY29sPj1jLmNvbCYmKGgmJihjLmNvbD1oLmNvbHVtbkluZGV4KSxmJiYobC5jb2w9Zi5jb2x1bW5JbmRleCtmLm9yaWdDb2xzcGFuLTEpKX1mdW5jdGlvbiBScHQoYyl7aWYoX3MoRGwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKT4wKXtjLmxlbmd0'@;
put 'aD0wO2ZvcihsZXQgbD0wO2w8X3MoRGwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKTtsKyspYy5wdXNoKHRoaXMuaGVhZGVyUmVuZGVyZXJGYWN0b3J5KGwpKX19ZnVuY3Rpb24gTHB0KGMpe2NvbnN0IGw9X3MoRGwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKTtsZXQgYT1jLnN0YXJ0Q29sdW1uLGQ9'@;
put 'ISFsO2ZvcihsZXQgaD0wO2g8bDtoKyspe2NvbnN0IGY9X3MoRGwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoaCxjLnN0YXJ0Q29sdW1uKSx2PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7aWYoZj49MCYmKGQ9ITEpLG0x'@;
put 'KHYpJiZ2PGMuc3RhcnRDb2x1bW4pe2E9djticmVha319Yy5zdGFydENvbHVtbj1kP19zKERsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YSgwLGEpLmNvbHVtbkluZGV4OmF9ZnVuY3Rpb24gT3B0KGMsbCl7Y29uc3QgYT10aGlzLmdob3N0VGFibGUuZ2V0V2lkdGgobCk7cmV0dXJuIGM+'@;
put 'YT9jOmF9ZnVuY3Rpb24gUHB0KGMsbCxhKXt2YXIgZDtjb25zdHtsYWJlbDpofT1udWxsIT09KGQ9X3MoRGwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGEsbCkpJiZ2b2lkIDAhPT1kP2Q6e2xhYmVsOiIifTtyZXR1cm4gaH1mdW5jdGlvbiBGcHQoYyxsKXtpZihjPDApcmV0dXJuIHRo'@;
put 'aXMuaG90LmdldENlbGwoYyxfcyhEbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChjLGwpLCEwKX1mdW5jdGlvbiBIcHQoKXt0aGlzLnVwZGF0ZVBsdWdpbigpfWZ1bmN0aW9uIE5wdChjLGwpe2x8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24geUEoYyxsLGEpe3JldHVybihs'@;
put 'PWZ1bmN0aW9uIFZwdChjKXt2YXIgbD1mdW5jdGlvbiBCcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBl'@;
put 'b2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9'@;
put 'KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IHpwdD1jbGFzcyBqcHR7Y29uc3RydWN0b3IobCxhKXt5QSh0aGlzLCJob3QiLHZvaWQgMCkseUEodGhpcywi'@;
put 'ZGF0YSIsbnVsbCkseUEodGhpcywicGx1Z2luIix2b2lkIDApLHlBKHRoaXMsInBhcmVudFJlZmVyZW5jZSIsbmV3IFdlYWtNYXApLHlBKHRoaXMsImNhY2hlIix7bGV2ZWxzOltdLGxldmVsQ291bnQ6MCxyb3dzOltdLG5vZGVJbmZvOm5ldyBXZWFrTWFwfSksdGhpcy5ob3Q9YSx0aGlzLnBs'@;
put 'dWdpbj1sfXNldERhdGEobCl7dGhpcy5kYXRhPWx9Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRhdGF9Z2V0UmF3U291cmNlRGF0YSgpe2xldCBsPW51bGw7cmV0dXJuIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksbD10aGlzLmhvdC5nZXRTb3VyY2VEYXRhKCksdGhpcy5w'@;
put 'bHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLGx9dXBkYXRlV2l0aERhdGEobCl7dGhpcy5zZXREYXRhKGwpLHRoaXMucmV3cml0ZUNhY2hlKCl9cmV3cml0ZUNhY2hlKCl7dGhpcy5jYWNoZT17bGV2ZWxzOltdLGxldmVsQ291bnQ6MCxyb3dzOltdLG5vZGVJbmZvOm5ldyBXZWFrTWFw'@;
put 'fSwkbygwLHRoaXMuZGF0YS5sZW5ndGgtMSxsPT57dGhpcy5jYWNoZU5vZGUodGhpcy5kYXRhW2xdLDAsbnVsbCl9KX1jYWNoZU5vZGUobCxhLGQpe3RoaXMuY2FjaGUubGV2ZWxzW2FdfHwodGhpcy5jYWNoZS5sZXZlbHNbYV09W10sdGhpcy5jYWNoZS5sZXZlbENvdW50Kz0xKSx0aGlzLmNh'@;
put 'Y2hlLmxldmVsc1thXS5wdXNoKGwpLHRoaXMuY2FjaGUucm93cy5wdXNoKGwpLHRoaXMuY2FjaGUubm9kZUluZm8uc2V0KGwse3BhcmVudDpkLHJvdzp0aGlzLmNhY2hlLnJvd3MubGVuZ3RoLTEsbGV2ZWw6YX0pLHRoaXMuaGFzQ2hpbGRyZW4obCkmJlluKGwuX19jaGlsZHJlbixoPT57dGhp'@;
put 'cy5jYWNoZU5vZGUoaCxhKzEsbCl9KX1nZXREYXRhT2JqZWN0KGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5yb3dzW2xdfXJlYWRUcmVlTm9kZXMobCxhLGQsaCl7bGV0IGY9ITEsdj1hO2lmKGlzTmFOKHYpJiZ2LmVuZClyZXR1cm4gdjtsZXQgTT1sO3JldHVybiBNfHwoTT17'@;
put 'X19jaGlsZHJlbjp0aGlzLmRhdGF9LGY9ITAsdi09MSksbnVsbCE9ZCYmdj09PWQ/e3Jlc3VsdDpNLGVuZDohMH06bnVsbCE9aCYmTT09PWg/e3Jlc3VsdDp2LGVuZDohMH06KHYrPTEsTS5fX2NoaWxkcmVuJiZZbihNLl9fY2hpbGRyZW4sRD0+e2lmKHRoaXMucGFyZW50UmVmZXJlbmNlLnNl'@;
put 'dChELGY/bnVsbDpNKSx2PXRoaXMucmVhZFRyZWVOb2RlcyhELHYsZCxoKSxpc05hTih2KSYmdi5lbmQpcmV0dXJuITF9KSx2KX1tb2NrUGFyZW50KCl7Y29uc3QgbD10aGlzLm1vY2tOb2RlKCk7cmV0dXJuIGwuX19jaGlsZHJlbj10aGlzLmRhdGEsbH1tb2NrTm9kZSgpe2NvbnN0IGw9e307'@;
put 'cmV0dXJuIFhhKHRoaXMuZGF0YVswXSwoYSxkKT0+e2xbZF09bnVsbH0pLGx9Z2V0Um93SW5kZXgobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5yb3d9Z2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCl7bGV0IGE9bnVsbDthPWlzTmFOKGwpP2w6dGhp'@;
put 'cy5nZXREYXRhT2JqZWN0KGwpO2NvbnN0IGQ9dGhpcy5nZXRSb3dQYXJlbnQobCk7cmV0dXJuIG51bGw9PWQ/dGhpcy5kYXRhLmluZGV4T2YoYSk6ZC5fX2NoaWxkcmVuLmluZGV4T2YoYSl9Y291bnRBbGxSb3dzKCl7cmV0dXJuIHRoaXMuY291bnRDaGlsZHJlbih7X19jaGlsZHJlbjp0aGlz'@;
put 'LmRhdGF9KX1jb3VudENoaWxkcmVuKGwpe2xldCBhPTAsZD1sO3JldHVybiBpc05hTihkKXx8KGQ9dGhpcy5nZXREYXRhT2JqZWN0KGQpKSxkJiZkLl9fY2hpbGRyZW4/KFluKGQuX19jaGlsZHJlbixoPT57YSs9MSxoLl9fY2hpbGRyZW4mJihhKz10aGlzLmNvdW50Q2hpbGRyZW4oaCkpfSks'@;
put 'YSk6MH1nZXRSb3dQYXJlbnQobCl7bGV0IGE7cmV0dXJuIGE9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCksdGhpcy5nZXRSb3dPYmplY3RQYXJlbnQoYSl9Z2V0Um93T2JqZWN0UGFyZW50KGwpe3JldHVybiBsJiYib2JqZWN0Ij09dHlwZW9mIGw/dGhpcy5jYWNoZS5ub2RlSW5m'@;
put 'by5nZXQobCkucGFyZW50Om51bGx9Z2V0Um93TGV2ZWwobCl7bGV0IGE9bnVsbDtyZXR1cm4gYT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSxhP3RoaXMuZ2V0Um93T2JqZWN0TGV2ZWwoYSk6bnVsbH1nZXRSb3dPYmplY3RMZXZlbChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRo'@;
put 'aXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLmxldmVsfWhhc0NoaWxkcmVuKGwpe2xldCBhPWw7cmV0dXJuIGlzTmFOKGEpfHwoYT10aGlzLmdldERhdGFPYmplY3QoYSkpLCEoIWEuX19jaGlsZHJlbnx8IWEuX19jaGlsZHJlbi5sZW5ndGgpfWlzQ2hpbGQobCl7cmV0dXJuIG51bGwhPT10aGlz'@;
put 'LmdldFJvd1BhcmVudChsKX1nZXRDaGlsZChsLGEpe3ZhciBkO3JldHVybihudWxsPT09KGQ9bC5fX2NoaWxkcmVuKXx8dm9pZCAwPT09ZD92b2lkIDA6ZFthXSl8fG51bGx9aXNSb3dIaWdoZXN0TGV2ZWwobCl7cmV0dXJuIXRoaXMuaXNDaGlsZChsKX1pc1BhcmVudChsKXt2YXIgYTtsZXQg'@;
put 'ZD1sO3JldHVybiBpc05hTihkKXx8KGQ9dGhpcy5nZXREYXRhT2JqZWN0KGQpKSxkJiYhIWQuX19jaGlsZHJlbiYmMCE9PShudWxsPT09KGE9ZC5fX2NoaWxkcmVuKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpfWFkZENoaWxkKGwsYSl7bGV0IGQ9YTt0aGlzLmhvdC5ydW5Ib29rcygi'@;
put 'YmVmb3JlQWRkQ2hpbGQiLGwsZCk7bGV0IGg9bnVsbDtsJiYoaD10aGlzLmdldFJvd0luZGV4KGwpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixoK3RoaXMuY291bnRDaGlsZHJlbihsKSsxLDEpO2xldCBmPWw7bHx8KGY9dGhpcy5tb2NrUGFyZW50KCkpLGYuX19jaGls'@;
put 'ZHJlbnx8KGYuX19jaGlsZHJlbj1bXSksZHx8KGQ9dGhpcy5tb2NrTm9kZSgpKSxmLl9fY2hpbGRyZW4ucHVzaChkKSx0aGlzLnJld3JpdGVDYWNoZSgpO2NvbnN0IHY9dGhpcy5nZXRSb3dJbmRleChkKTt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKHYsMSksdGhpcy5o'@;
put 'b3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93Iix2LDEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixsLGQpfWFkZENoaWxkQXRJbmRleChsLGEsZCl7bGV0IGYsaD1kO2lmKGh8fChoPXRoaXMubW9ja05vZGUoKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUFkZENoaWxk'@;
put 'IixsLGgsYSksbCl7Y29uc3QgTT10aGlzLmdldFJvd0luZGV4KGwpK2ErMTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixNLDEpLGwuX19jaGlsZHJlbi5zcGxpY2UoYSxudWxsLGgpLHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2Rp'@;
put 'ZmllcnMoKSx0aGlzLmhvdC5zZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksIl9fY2hpbGRyZW4iLGwuX19jaGlsZHJlbiwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKE0s'@;
put 'MSksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsTSwxKSxmPU19ZWxzZSB0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixhLDEs'@;
put 'Ik5lc3RlZFJvd3MuYWRkQ2hpbGRBdEluZGV4IiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpLGY9dGhpcy5nZXRSb3dJbmRleCh0aGlzLmRhdGFbYV0pO2g9dGhpcy5nZXREYXRhT2JqZWN0KGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckFkZENoaWxkIixsLGgsYSl9'@;
put 'YWRkU2libGluZyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImJlbG93Ijtjb25zdCBkPXRoaXMudHJhbnNsYXRlVHJpbW1lZFJvdyhsKSxoPXRoaXMuZ2V0Um93UGFyZW50KGQpLGY9dGhpcy5nZXRSb3dJbmRleFdpdGhp'@;
put 'blBhcmVudChkKTtzd2l0Y2goYSl7Y2FzZSJiZWxvdyI6dGhpcy5hZGRDaGlsZEF0SW5kZXgoaCxmKzEsbnVsbCk7YnJlYWs7Y2FzZSJhYm92ZSI6dGhpcy5hZGRDaGlsZEF0SW5kZXgoaCxmLG51bGwpfX1kZXRhY2hGcm9tUGFyZW50KGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2'@;
put 'b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1udWxsO2NvbnN0IGg9W107QXJyYXkuaXNBcnJheShsKT8oJG8obFswXSxsWzJdLGJlPT57Y29uc3QgRWU9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGJlKTtoLnB1c2godGhpcy5nZXREYXRhT2JqZWN0KEVlKSl9KSwkbygw'@;
put 'LGgubGVuZ3RoLTIsYmU9Pnt0aGlzLmRldGFjaEZyb21QYXJlbnQoaFtiZV0sITEpfSksZD1oW2gubGVuZ3RoLTFdKTpkPWw7Y29uc3QgZj10aGlzLmdldFJvd0luZGV4KGQpLHY9dGhpcy5jb3VudENoaWxkcmVuKGQpLE09dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChkKSxEPXRoaXMu'@;
put 'Z2V0Um93UGFyZW50KGQpLFo9dGhpcy5nZXRSb3dQYXJlbnQoRCksbmU9dGhpcy5nZXRSb3dJbmRleChaKTtsZXQgY2U9bnVsbDtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlRGV0YWNoQ2hpbGQiLEQsZCksbnVsbCE9TSl7Y29uc3QgYmU9QXJyYXkuZnJvbShuZXcgQXJyYXkoZit2KzEp'@;
put 'LmtleXMoKSkuc3BsaWNlKC0xKih2KzEpKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlUm93IixmLHYrMSxiZSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSxELl9fY2hpbGRyZW4uc3BsaWNlKE0sMSksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0'@;
put 'ZXJSZW1vdmVSb3ciLGYsdisxLGJlLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLFope2NlPW5lK3RoaXMuY291bnRDaGlsZHJlbihaKTtjb25zdCBFZT10aGlzLmdldENoaWxkKFosdGhpcy5jb3VudENoaWxkcmVuKFopLTEpLEJlPXRoaXMuZ2V0Um93SW5kZXgoRWUpO3RoaXMuaG90LnJ1bkhv'@;
put 'b2tzKCJiZWZvcmVDcmVhdGVSb3ciLEJlKzEsdisxLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLFouX19jaGlsZHJlbi5wdXNoKGQpfWVsc2UgY2U9dGhpcy5ob3QuY291bnRSb3dzKCkrMSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixjZS0yLHYrMSx0aGlzLnBsdWdpbi5w'@;
put 'bHVnaW5OYW1lKSx0aGlzLmRhdGEucHVzaChkKX10aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsY2UtMix2KzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGV0YWNoQ2hpbGQiLEQsZCx0aGlzLmdl'@;
put 'dFJvd0luZGV4KGQpKSxhJiZ0aGlzLmhvdC5yZW5kZXIoKX1maWx0ZXJEYXRhKGwsYSxkKXtjb25zdCBoPVtdO1luKGQsZj0+e2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoZikpfSksWW4oaCxmPT57Y29uc3Qgdj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGYpLE09dGhpcy5nZXRS'@;
put 'b3dQYXJlbnQoZik7bnVsbD09PU0/dGhpcy5kYXRhLnNwbGljZSh2LDEpOk0uX19jaGlsZHJlbi5zcGxpY2UodiwxKX0pLHRoaXMucmV3cml0ZUNhY2hlKCl9c3BsaWNlRGF0YShsLGEsZCl7Y29uc3QgaD10aGlzLmdldERhdGFPYmplY3QobC0xKTtsZXQgZj1udWxsLHY9bDtoJiZoLl9fY2hp'@;
put 'bGRyZW4mJjA9PT1oLl9fY2hpbGRyZW4ubGVuZ3RoPyhmPWgsdj0wKTpsPHRoaXMuY291bnRBbGxSb3dzKCkmJihmPXRoaXMuZ2V0Um93UGFyZW50KGwpLHY9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSksZj9kP2YuX19jaGlsZHJlbi5zcGxpY2UodixhLC4uLmQpOmYuX19jaGls'@;
put 'ZHJlbi5zcGxpY2UodixhKTpkP3RoaXMuZGF0YS5zcGxpY2UodixhLC4uLmQpOnRoaXMuZGF0YS5zcGxpY2UodixhKSx0aGlzLnJld3JpdGVDYWNoZSgpfXN5bmNSb3dXaXRoUmF3U291cmNlKGwpe2xldCBhPWwsZD1hO2Rve2Q9dGhpcy5nZXRSb3dQYXJlbnQoZCksbnVsbCE9PWQmJihhPWQp'@;
put 'fXdoaWxlKG51bGwhPT1kKTt0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChhKSwiX19jaGlsZHJlbiIsYS5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLnN5bmNSb3dXaXRo'@;
put 'UmF3U291cmNlIiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpfW1vdmVSb3cobCxhLGQsaCl7Y29uc3QgZj1hPT09dGhpcy5ob3QuY291bnRSb3dzKCksdj10aGlzLmdldFJvd1BhcmVudChsKSxNPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksRD12Ll9fY2hp'@;
put 'bGRyZW4uc2xpY2UoTSxNKzEpLFo9bD5hO2xldCBuZT10aGlzLmdldFJvd1BhcmVudChmP2EtMTphKTtudWxsPT1uZSYmKG5lPXRoaXMuZ2V0Um93UGFyZW50KGEtMSkpLG51bGw9PW5lJiYobmU9dGhpcy5nZXREYXRhT2JqZWN0KGEtMSkpLG5lP25lLl9fY2hpbGRyZW58fChuZS5fX2NoaWxk'@;
put 'cmVuPVtdKToobmU9dGhpcy5nZXREYXRhT2JqZWN0KGEpLG5lLl9fY2hpbGRyZW49W10pO2NvbnN0IGNlPWZ8fGR8fGg/bmUuX19jaGlsZHJlbi5sZW5ndGg6dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChhKSxiZT12PT09bmU7bmUuX19jaGlsZHJlbi5zcGxpY2UoY2UsMCxEWzBdKSx2'@;
put 'Ll9fY2hpbGRyZW4uc3BsaWNlKE0rKFomJmJlPzE6MCksMSksdGhpcy5zeW5jUm93V2l0aFJhd1NvdXJjZSh2KSxiZXx8dGhpcy5zeW5jUm93V2l0aFJhd1NvdXJjZShuZSl9dHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJP3RoaXMucGx1Z2lu'@;
put 'LmNvbGxhcHNpbmdVSS50cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9dW50cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhsKTpsfX07ZnVuY3Rpb24gQm1lKGMs'@;
put 'bCxhKXtyZXR1cm4obD1mdW5jdGlvbiBVcHQoYyl7dmFyIGw9ZnVuY3Rpb24gWnB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi'@;
put 'b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw'@;
put 'ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBpZWU9Y2xhc3MgV3B0e2NvbnN0cnVjdG9yKGwsYSl7Qm1lKHRoaXMsImhvdCIsdm9p'@;
put 'ZCAwKSxCbWUodGhpcywicGx1Z2luIix2b2lkIDApLHRoaXMuaG90PWEsdGhpcy5wbHVnaW49bH19O2NsYXNzIFlnIGV4dGVuZHMgaWVle3N0YXRpYyBnZXQgQ1NTX0NMQVNTRVMoKXtyZXR1cm57aW5kaWNhdG9yQ29udGFpbmVyOiJodF9uZXN0aW5nTGV2ZWxzIixwYXJlbnQ6Imh0X25lc3Rp'@;
put 'bmdQYXJlbnQiLGluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsIixlbXB0eUluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsX2VtcHR5IixidXR0b246Imh0X25lc3RpbmdCdXR0b24iLGV4cGFuZEJ1dHRvbjoiaHRfbmVzdGluZ0V4cGFuZCIsY29sbGFwc2VCdXR0b246Imh0X25lc3RpbmdDb2xs'@;
put 'YXBzZSJ9fWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2luZ1VJPXRoaXMucGx1Z2luLmNvbGxhcHNpbmdVSSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9bnVsbH1hcHBlbmRMZXZlbEluZGlj'@;
put 'YXRvcnMobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0xldmVsKGQpLGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpLHY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiRElWIilbMF0sTT12LnF1ZXJ5U2VsZWN0'@;
put 'b3IoInNwYW4ucm93SGVhZGVyIiksRD12LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzc149Imh0X25lc3RpbmciXScpLFo9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztpZihZbihELG5lPT57bmUmJnYucmVtb3ZlQ2hpbGQobmUpfSksVGkoYSxZZy5DU1NfQ0xBU1NFUy5pbmRpY2F0'@;
put 'b3JDb250YWluZXIpLGgpe2NvbnN0e3Jvb3REb2N1bWVudDpuZX09dGhpcy5ob3QsY2U9TS5jbG9uZU5vZGUoITApO3YuaW5uZXJIVE1MPSIiLCRvKDAsaC0xLCgpPT57Y29uc3QgYmU9bmUuY3JlYXRlRWxlbWVudCgiU1BBTiIpO1RpKGJlLFlnLkNTU19DTEFTU0VTLmVtcHR5SW5kaWNhdG9y'@;
put 'KSx2LmFwcGVuZENoaWxkKGJlKX0pLHYuYXBwZW5kQ2hpbGQoY2UpfWlmKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikpe2NvbnN0IG5lPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtaJiZ2YShuZSxbSDcoKV0pLFRpKGEsWWcuQ1NTX0NMQVNTRVMu'@;
put 'cGFyZW50KSx0aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZChkKT8oVGkobmUsYCR7WWcuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke1lnLkNTU19DTEFTU0VTLmV4cGFuZEJ1dHRvbn1gKSxaJiZ2YShhLFtQMighMSldKSk6KFRpKG5lLGAke1lnLkNTU19DTEFTU0VTLmJ1dHRv'@;
put 'bn0gJHtZZy5DU1NfQ0xBU1NFUy5jb2xsYXBzZUJ1dHRvbn1gKSxaJiZ2YShhLFtQMighMCldKSksdi5hcHBlbmRDaGlsZChuZSl9fXVwZGF0ZVJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWw7YXx8KGE9dGhpcy5kYXRhTWFuYWdlci5jYWNoZS5sZXZlbENvdW50KTtjb25zdCBkPXRoaXMuaG90'@;
put 'LnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpO2xldCBoPTExO2QuaXNDbGFzc2ljVGhlbWUoKXx8KGg9MipkLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtaG9yaXpvbnRhbC1wYWRkaW5nIikpLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1NYXRoLm1heCg1MCxoKzEwKmErMjUpLHRoaXMuaG90'@;
put 'LnJlbmRlcigpfX1jb25zdCBqbWU9WWcsR3B0PWNsYXNzIFlwdCBleHRlbmRzIGllZXtjb25zdHJ1Y3RvcihsLGEpe3ZhciBkO3N1cGVyKGwsYSksZD10aGlzLHRoaXMuZGF0YU1hbmFnZXI9dGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzZWRSb3dzPVtdLHRoaXMuY29sbGFw'@;
put 'c2VkUm93c1N0YXNoPXtzdGFzaDpmdW5jdGlvbigpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07ZC5sYXN0Q29sbGFwc2VkUm93cz1kLmNvbGxhcHNlZFJvd3Muc2xpY2UoMCksZC5leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGQu'@;
put 'bGFzdENvbGxhcHNlZFJvd3MsaCl9LHNoaWZ0U3Rhc2g6ZnVuY3Rpb24oaCxmKXtsZXQgdj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtudWxsPT1mJiYoZj0xLzApLFluKGQubGFzdENvbGxhcHNlZFJvd3MsKE0sRCk9PntNPj1oJiZN'@;
put 'PGYmJihkLmxhc3RDb2xsYXBzZWRSb3dzW0RdPU0rdil9KX0sYXBwbHlTdGFzaDpmdW5jdGlvbigpe2QuY29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGQubGFzdENvbGxhcHNlZFJvd3MsIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSks'@;
put 'ZC5sYXN0Q29sbGFwc2VkUm93cz12b2lkIDB9LHRyaW1TdGFzaDooaCxmKT0+eyRvKGgsaCtmLTEsdj0+e2NvbnN0IE09dGhpcy5sYXN0Q29sbGFwc2VkUm93cy5pbmRleE9mKHYpO00+LTEmJnRoaXMubGFzdENvbGxhcHNlZFJvd3Muc3BsaWNlKE0sMSl9KX19fWNvbGxhcHNlQ2hpbGRyZW4o'@;
put 'bCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtsZXQgZj1udWxsLHY9bnVsbCxNPW51bGw7'@;
put 'cmV0dXJuIGlzTmFOKGwpPyhmPWwsdj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGYpKTooZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksdj1sKSx0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGYpJiZZbihmLl9fY2hpbGRyZW4sRD0+e2gucHVzaCh0aGlzLmRh'@;
put 'dGFNYW5hZ2VyLmdldFJvd0luZGV4KEQpKX0pLE09dGhpcy5jb2xsYXBzZVJvd3MoaCwhMCwhMSksZCYmdGhpcy50cmltUm93cyhNKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpLC0xPT09dGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YodikmJnRoaXMuY29sbGFwc2VkUm93cy5wdXNoKHYp'@;
put 'LE19Y29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9'@;
put 'W107WW4obCxmPT57aC5wdXNoKC4uLnRoaXMuY29sbGFwc2VDaGlsZHJlbihmLCExLCExKSl9KSxkJiZ0aGlzLnRyaW1Sb3dzKGgpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCl9Y29sbGFwc2VSb3cobCl7dGhpcy5jb2xsYXBzZVJvd3MoW2xdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pfWNvbGxhcHNlUm93cyhsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3Vt'@;
put 'ZW50c1syXTtjb25zdCBoPVtdO3JldHVybiBZbihsLGY9PntoLnB1c2goZiksYSYmdGhpcy5jb2xsYXBzZUNoaWxkUm93cyhmLGgpfSksZCYmdGhpcy50cmltUm93cyhoKSxofWNvbGxhcHNlQ2hpbGRSb3dzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzFdP2FyZ3VtZW50c1sxXTpbXSxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihsKSYmWW4odGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLl9fY2hpbGRyZW4sdj0+e2Nv'@;
put 'bnN0IE09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleCh2KTthLnB1c2goTSksdGhpcy5jb2xsYXBzZUNoaWxkUm93cyhNLGEpfSksaCYmdGhpcy50cmltUm93cyhhKX1leHBhbmRSb3cobCl7dGhpcy5leHBhbmRSb3dzKFtsXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn'@;
put 'dW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX1leHBhbmRSb3dzKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2Nv'@;
put 'bnN0IGg9W107cmV0dXJuIFluKGwsZj0+e2gucHVzaChmKSxhJiZ0aGlzLmV4cGFuZENoaWxkUm93cyhmLGgpfSksZCYmdGhpcy51bnRyaW1Sb3dzKGgpLGh9ZXhwYW5kQ2hpbGRSb3dzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50'@;
put 'c1sxXTpbXSxoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihsKSYmWW4odGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLl9fY2hpbGRyZW4sdj0+e2lmKCF0aGlzLmlzQW55'@;
put 'UGFyZW50Q29sbGFwc2VkKHYpKXtjb25zdCBNPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgodik7YS5wdXNoKE0pLHRoaXMuZXhwYW5kQ2hpbGRSb3dzKE0sYSl9fSksaCYmdGhpcy51bnRyaW1Sb3dzKGEpfWV4cGFuZENoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4x'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107bGV0IGY9bnVsbCx2PW51bGwsTT1udWxsO3JldHVybiBpc05hTihsKT8oZj1sLHY9dGhpcy5k'@;
put 'YXRhTWFuYWdlci5nZXRSb3dJbmRleChsKSk6KGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLHY9bCksdGhpcy5jb2xsYXBzZWRSb3dzLnNwbGljZSh0aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZih2KSwxKSx0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGYpJiZZbihm'@;
put 'Ll9fY2hpbGRyZW4sRD0+e2NvbnN0IFo9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChEKTtoLnB1c2goWil9KSxNPXRoaXMuZXhwYW5kUm93cyhoLCEwLCExKSxkJiZ0aGlzLnVudHJpbVJvd3MoTSksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKSxNfWV4cGFuZE11bHRpcGxlQ2hpbGRy'@;
put 'ZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtZbihsLGY9PntoLnB1c2goLi4udGhp'@;
put 'cy5leHBhbmRDaGlsZHJlbihmLCExLCExKSl9KSxkJiZ0aGlzLnVudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZUFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCksYT1bXTtZbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxk'@;
put 'cmVuKGQpJiZhLnB1c2goZCl9KSx0aGlzLmNvbGxhcHNlTXVsdGlwbGVDaGlsZHJlbihhKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfWV4cGFuZEFsbCgpe2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCksYT1bXTtZbihsLGQ9Pnt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVu'@;
put 'KGQpJiZhLnB1c2goZCl9KSx0aGlzLmV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oYSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX10cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKGwsYT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4'@;
put 'KGEsITApfSl9LCEwKX11bnRyaW1Sb3dzKGwpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCxhPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMSl9KX0sITApfWFyZUNoaWxkcmVuQ29sbGFwc2VkKGwpe2xldCBhPWlzTmFOKGwpP2w6'@;
put 'dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGwpLGQ9ITA7cmV0dXJuIG51bGw9PT1hJiYoYT17X19jaGlsZHJlbjp0aGlzLmRhdGFNYW5hZ2VyLmRhdGF9KSx0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGEpJiZZbihhLl9fY2hpbGRyZW4saD0+e2NvbnN0IGY9dGhpcy5kYXRh'@;
put 'TWFuYWdlci5nZXRSb3dJbmRleChoKTtpZighdGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5nZXRWYWx1ZUF0SW5kZXgoZikpcmV0dXJuIGQ9ITEsITF9KSxkfWlzQW55UGFyZW50Q29sbGFwc2VkKGwpe2xldCBhPWw7Zm9yKDtudWxsIT09YTspe2E9dGhpcy5kYXRhTWFuYWdlci5nZXRS'@;
put 'b3dQYXJlbnQoYSk7Y29uc3QgZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGEpO2lmKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKGQpPi0xKXJldHVybiEwfXJldHVybiExfXRvZ2dsZVN0YXRlKGwsYSl7aWYoYS5jb2w+PTApcmV0dXJuO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVU'@;
put 'cmltbWVkUm93KGEucm93KTtwYShsLnRhcmdldCxqbWUuQ1NTX0NMQVNTRVMuYnV0dG9uKSYmKHRoaXMuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoZCk/dGhpcy5leHBhbmRDaGlsZHJlbihkKTp0aGlzLmNvbGxhcHNlQ2hpbGRyZW4oZCksSDIobCkpfXRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0'@;
put 'dXJuIHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCl9dW50cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLmhvdC50b1Zpc3VhbFJvdyhsKX1yZW5kZXJBbmRBZGp1c3QoKXt0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfX07dmFyIHpt'@;
put 'ZT1uZXcgV2Vha01hcDtjb25zdCBuNHQ9Y2xhc3MgdDR0IGV4dGVuZHMgaWVle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBxcHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFhwdChjKXt2YXIgbD1mdW5jdGlvbiBKcHQoYyxsKXtpZigib2JqZWN0IiE9dHlw'@;
put 'ZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0'@;
put 'dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEw'@;
put 'LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJkYXRhTWFuYWdlciIsdGhpcy5wbHVnaW4uZGF0YU1hbmFnZXIpLGZ1bmN0aW9uICRwdChjLGwsYSl7KGZ1bmN0aW9uIEtwdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBp'@;
put 'bml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsem1lLHtyb3dfYWJvdmU6KGwsYSk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoYVthLmxlbmd0aC0xXS5zdGFydC5yb3csImFib3ZlIil9'@;
put 'LHJvd19iZWxvdzoobCxhKT0+e3RoaXMuZGF0YU1hbmFnZXIuYWRkU2libGluZyhhW2EubGVuZ3RoLTFdLnN0YXJ0LnJvdywiYmVsb3ciKX19KX1hcHBlbmRPcHRpb25zKGwpe2NvbnN0IGE9W3trZXk6ImFkZF9jaGlsZCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uo'@;
put 'RXEpfSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpWzBdKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChkKTt0aGlzLmRhdGFNYW5hZ2VyLmFkZENoaWxkKGgpfSxkaXNh'@;
put 'YmxlZDooKT0+e2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7cmV0dXJuIWR8fGRbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0s'@;
put 'e2tleToiZGV0YWNoX2Zyb21fcGFyZW50IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShUcSl9LGNhbGxiYWNrOigpPT57dGhpcy5kYXRhTWFuYWdlci5kZXRhY2hGcm9tUGFyZW50KHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpKX0sZGlzYWJsZWQ6KCk9Pntjb25z'@;
put 'dCBkPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGg9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGRbMF0pO3JldHVybiF0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChoKXx8IWR8fGRbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVt'@;
put 'bkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se25hbWU6Ii0tLS0tLS0tLSJ9XTtyZXR1cm4gJG8oMCxsLml0ZW1zLmxlbmd0aC0xLGQ9PntpZigwPT09ZClyZXR1cm4gWW4oYSwoaCxmKT0+e2wuaXRlbXMuc3BsaWNlKGQr'@;
put 'ZiwwLGgpfSksITF9KSx0aGlzLm1vZGlmeVJvd0luc2VydGluZ09wdGlvbnMobCl9bW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9ucyhsKXtyZXR1cm4gJG8oMCxsLml0ZW1zLmxlbmd0aC0xLGE9Pntjb25zdCBkPWZ1bmN0aW9uIFFwdChjLGwpe3JldHVybiBjLmdldChmdW5jdGlvbiBlNHQoYyxs'@;
put 'LGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShjLGwpKX0oem1lLHRoaXMpW2wuaXRl'@;
put 'bXNbYV0ua2V5XTtudWxsIT1kJiYobC5pdGVtc1thXS5jYWxsYmFjaz1kKX0pLGx9fTtmdW5jdGlvbiBISChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcjR0KGMpe3ZhciBsPWZ1bmN0aW9uIGk0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1i'@;
put 'b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu'@;
put 'KCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6'@;
put 'Y1tsXT1hLGN9Y2xhc3MgbzR0e2NvbnN0cnVjdG9yKGwpe0hIKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxISCh0aGlzLCJob3QiLHZvaWQgMCksSEgodGhpcywiZGF0YU1hbmFnZXIiLHZvaWQgMCksSEgodGhpcywiY29sbGFwc2luZ1VJIix2b2lkIDApLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9'@;
put 'bC5ob3QsdGhpcy5kYXRhTWFuYWdlcj1sLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2luZ1VJPWwuY29sbGFwc2luZ1VJfW9uQmVmb3JlUm93TW92ZShsLGEsZCxoKXtpZih0aGlzLmRpc3BsYXlBUElDb21wYXRpYmlsaXR5V2FybmluZyh7cm93czpsLGZpbmFsSW5kZXg6YSxkcm9wSW5kZXg6'@;
put 'ZCxtb3ZlUG9zc2libGU6aH0pKXJldHVybiExO3RoaXMubW92ZWRUb0NvbGxhcHNlZD0hMTtjb25zdCB2PWQ9PT10aGlzLmhvdC5jb3VudFJvd3MoKSxNPXY/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk6dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGQpO2xldCBEPSEw'@;
put 'O2NvbnN0IFo9bC5tYXAoQmU9PntpZighRClyZXR1cm4hMTtjb25zdCBxZT10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coQmUpO3JldHVybiBEPXRoaXMuc2hvdWxkQWxsb3dNb3ZpbmcocWUsTSkscWV9KSxuZT0tMT09PVouaW5kZXhPZihNKTtpZighRHx8IW5lKXJldHVy'@;
put 'biExO2NvbnN0IGNlPXRoaXMuZ2V0QmFzZVBhcmVudChaKSxiZT10aGlzLmdldFRhcmdldFBhcmVudCh2LE0pLEVlPWNlPT09YmU7cmV0dXJuIHRoaXMubW92ZWRUb0NvbGxhcHNlZD10aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZChiZSksdGhpcy5jb2xsYXBzaW5nVUku'@;
put 'Y29sbGFwc2VkUm93c1N0YXNoLnN0YXNoKCksdGhpcy5zaGlmdENvbGxhcHNpYmxlUGFyZW50c0xvY2F0aW9ucyhaLE0sRWUpLHRoaXMubW92ZVJvd3MoWixNLGJlKSx0aGlzLmRhdGFNYW5hZ2VyLnJld3JpdGVDYWNoZSgpLHRoaXMubW92ZUNlbGxzTWV0YShaLE0pLHRoaXMuY29sbGFwc2lu'@;
put 'Z1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCExKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dNb3ZlIixsLGEsZCxoLGgmJnRoaXMuaXNSb3dPcmRlckNoYW5nZWQobCxhKSksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5zZWxlY3RDZWxscyhsLGQpLCExfWRpc3BsYXlBUElD'@;
put 'b21wYXRpYmlsaXR5V2FybmluZyhsKXtjb25zdHtyb3dzOmEsZmluYWxJbmRleDpkLGRyb3BJbmRleDpoLG1vdmVQb3NzaWJsZTpmfT1sO2xldCB2PSExO3JldHVybiB5YyhoKSYmKGlsKGdsYFNpbmNlIHZlcnNpb24gOC4wLjAgb2YgdGhlIEhhbmRzb250YWJsZSB0aGUgJ21vdmVSb3dzJyBt'@;
put 'ZXRob2QgaXNuJ3QgdXNlZCBmb3IgbW92aW5nIHJvd3NceDIwCiAgICAgIHdoZW4gdGhlIE5lc3RlZFJvd3MgcGx1Z2luIGlzIGVuYWJsZWQuIFBsZWFzZSB1c2UgdGhlICdkcmFnUm93cycgbWV0aG9kIGluc3RlYWQuYCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsYSxkLGgs'@;
put 'ZiwhMSksdj0hMCksdn1zaG91bGRBbGxvd01vdmluZyhsLGEpe3JldHVybiEodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChsKXx8dGhpcy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChsKXx8bD09PWF8fDA9PT1hKX1nZXRCYXNlUGFyZW50KGwpe3JldHVybiB0aGlzLmRhdGFNYW5h'@;
put 'Z2VyLmdldFJvd1BhcmVudChsWzBdKX1nZXRUYXJnZXRQYXJlbnQobCxhKXtsZXQgZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChsP2EtMTphKTtyZXR1cm4gbnVsbD09ZCYmKGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoYS0xKSksZH1zaGlmdENvbGxhcHNpYmxlUGFy'@;
put 'ZW50c0xvY2F0aW9ucyhsLGEsZCl7ZHx8KE1hdGgubWF4KC4uLmwpPD1hP3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGxbMF0sYSwtMSpsLmxlbmd0aCk6dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYSxsWzBd'@;
put 'LGwubGVuZ3RoKSl9bW92ZVJvd3MobCxhLGQpe2NvbnN0IGg9YT09PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZCkrdGhpcy5kYXRhTWFuYWdlci5jb3VudENoaWxkcmVuKGQpKzE7dGhpcy5ob3QuYmF0Y2hSZW5kZXIoKCk9PntsLmZvckVhY2goZj0+e3RoaXMuZGF0YU1hbmFnZXIu'@;
put 'bW92ZVJvdyhmLGEsdGhpcy5tb3ZlZFRvQ29sbGFwc2VkLGgpfSl9KX1tb3ZlQ2VsbHNNZXRhKGwsYSl7Y29uc3QgZD1bXSxoPU1hdGgubWF4KC4uLmwpPGE7bC5mb3JFYWNoKGY9PntkLnB1c2godGhpcy5ob3QuZ2V0Q2VsbE1ldGFBdFJvdyhmKSl9KSx0aGlzLmhvdC5zcGxpY2VDZWxsc01l'@;
put 'dGEobFswXSxsLmxlbmd0aCksdGhpcy5ob3Quc3BsaWNlQ2VsbHNNZXRhKGEtKGg/ZC5sZW5ndGg6MCksMCwuLi5kKX1zZWxlY3RDZWxscyhsLGEpe2NvbnN0IGQ9bC5sZW5ndGg7bGV0IGg9MCxmPTA7aWYodGhpcy5tb3ZlZFRvQ29sbGFwc2VkKXtsZXQgdj1udWxsO3Y9dGhpcy5kYXRhTWFu'@;
put 'YWdlci50cmFuc2xhdGVUcmltbWVkUm93KGxbZC0xXTxhP2EtZDphKTtjb25zdCBNPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KG51bGw9PT12P3RoaXMuaG90LmNvdW50U291cmNlUm93cygpLTE6di0xKSxEPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoTSk7aD10aGlzLmRh'@;
put 'dGFNYW5hZ2VyLnVudHJhbnNsYXRlVHJpbW1lZFJvdyhEKSxmPWh9ZWxzZSBsW2QtMV08YT8oZj1hLTEsaD1mLWQrMSk6KGg9YSxmPWgrZC0xKTt0aGlzLmhvdC5zZWxlY3RDZWxscyhbW2gsMCxmLHRoaXMuaG90LmNvdW50Q29scygpLTFdXSwhMSl9aXNSb3dPcmRlckNoYW5nZWQobCxhKXty'@;
put 'ZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX19ZnVuY3Rpb24gVW1lKGMsbCxhKXtabWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFptZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMg'@;
put 'dHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gb2VlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBzNHQoYyl7dmFyIGw9ZnVuY3Rpb24gbDR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09'@;
put 'YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIp'@;
put 'KGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBOSChjLGwpe3Jl'@;
put 'dHVybiBjLmdldChnMChjLGwpKX1mdW5jdGlvbiBWSChjLGwsYSl7cmV0dXJuIGMuc2V0KGcwKGMsbCksYSksYX1mdW5jdGlvbiBnMChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgQkg9Im5lc3RlZFJvd3MiLFdtZT1CSDt2YXIgakg9bmV3IFdlYWtNYXAsdnc9bmV3IFdlYWtNYXAsVDA9bmV3IFdlYWtTZXQ7Y2xhc3MgZDR0IGV4dGVuZHMgRnN7Y29uc3RydWN0'@;
put 'b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIGE0dChjLGwpe1ptZShjLGwpLGwuYWRkKGMpfSh0aGlzLFQwKSxvZWUodGhpcywiZGF0YU1hbmFnZXIiLG51bGwpLG9lZSh0aGlzLCJoZWFkZXJzVUkiLG51bGwpLG9lZSh0aGlzLCJjb2xsYXBzZWRSb3dzTWFwIixudWxsKSxVbWUo'@;
put 'dGhpcyxqSCwhMSksVW1lKHRoaXMsdncsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBCSH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0JIXX1lbmFibGVQbHVnaW4oKXt2'@;
put 'YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuY29sbGFwc2VkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgibmVzdGVkUm93cyIsbmV3IEtFKSx0aGlzLmRhdGFNYW5hZ2VyPW5ldyB6cHQodGhpcyx0aGlzLmhvdCksdGhpcy5jb2xsYXBzaW5nVUk9bmV3'@;
put 'IEdwdCh0aGlzLHRoaXMuaG90KSx0aGlzLmhlYWRlcnNVST1uZXcgam1lKHRoaXMsdGhpcy5ob3QpLHRoaXMuY29udGV4dE1lbnVVST1uZXcgbjR0KHRoaXMsdGhpcy5ob3QpLHRoaXMucm93TW92ZUNvbnRyb2xsZXI9bmV3IG80dCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVu'@;
put 'Y3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZzAoVDAsbCx4NHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFy'@;
put 'IGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZzAoVDAsbCxFNHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93RGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVJvd0RhdGEo'@;
put 'Li4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5U291cmNlTGVuZ3RoIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5U291cmNlTGVuZ3RoKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURhdGFTcGxpY2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZv'@;
put 'cmVEYXRhU3BsaWNlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImZpbHRlckRhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGcwKFQwLGwscDR0KS5jYWxsKGws'@;
put 'Li4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZzAoVDAsbCxnNHQpLmNhbGwobCwu'@;
put 'Li5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGcwKFQwLGwsbTR0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFk'@;
put 'ZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZzAoVDAsbCxmNHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVm'@;
put 'b3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnMChUMCxsLHk0dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVu'@;
put 'Y3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZzAoVDAsbCxiNHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBh'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGcwKFQwLGwsXzR0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgs'@;
put 'ZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGcwKFQwLGwsdzR0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEp'@;
put 'LGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnMChUMCxsLEM0dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRb'@;
put 'aF09YXJndW1lbnRzW2hdO3JldHVybiBnMChUMCxsLFM0dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50'@;
put 'c1toXTtyZXR1cm4gZzAoVDAsbCx2NHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGcwKFQw'@;
put 'LGwsTTR0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd01vdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGcwKFQwLGwsaDR0KS5jYWxsKGwsLi4u'@;
put 'ZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUxvYWREYXRhIixhPT5nMChUMCx0aGlzLFltZSkuY2FsbCh0aGlzLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGE9PmcwKFQwLHRoaXMsWW1lKS5jYWxsKHRoaXMsYSkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5l'@;
put 'bmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoIm5lc3RlZFJvd3MiKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2lu'@;
put 'KCk7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKTt0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZGF0YU1hbmFnZXIudXBkYXRlV2l0aERhdGEobCksc3VwZXIudXBkYXRlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5n'@;
put 'ZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPXRoaXMuY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobC5yb3cpO3JldHVy'@;
put 'biB0aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZChhKT90aGlzLmNvbGxhcHNpbmdVSS5leHBhbmRDaGlsZHJlbihhKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZUNoaWxkcmVuKGEpLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO2NvbnN0IGQ9bnVsbD09PShsPXRo'@;
put 'aXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdGhpcy5ob3Quc2VsZWN0'@;
put 'aW9uLmlzQ2VsbFZpc2libGUoZCkmJi0xPT09ZC5jb2wmJmQucm93Pj0wfSxncm91cDpXbWUscmVsYXRpdmVUb0dyb3VwOlptLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5y'@;
put 'ZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFdtZSl9ZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKXtWSCh2dyx0aGlzLCEwKX1lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCl7VkgodncsdGhpcywhMSl9b25Nb2RpZnlSb3dEYXRhKGwpe2lmKCFOSCh2dyx0aGlzKSlyZXR1cm4gdGhpcy5kYXRhTWFuYWdl'@;
put 'ci5nZXREYXRhT2JqZWN0KGwpfW9uTW9kaWZ5U291cmNlTGVuZ3RoKCl7aWYoIU5IKHZ3LHRoaXMpKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmNvdW50QWxsUm93cygpfW9uQmVmb3JlRGF0YVNwbGljZShsLGEsZCl7cmV0dXJuISghTkgodncsdGhpcykmJiF0aGlzLmRhdGFNYW5hZ2VyLmlz'@;
put 'Um93SGlnaGVzdExldmVsKGwpJiYodGhpcy5kYXRhTWFuYWdlci5zcGxpY2VEYXRhKGwsYSxkKSwxKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gaDR0KGMsbCxhLGQpe3JldHVybiB0aGlzLnJvd01vdmVDb250cm9sbGVyLm9uQmVmb3JlUm93TW92ZShjLGwsYSxkKX1m'@;
put 'dW5jdGlvbiBmNHQoYyxsLGEpe3RoaXMuY29sbGFwc2luZ1VJLnRvZ2dsZVN0YXRlKGMsbCxhKX1mdW5jdGlvbiBwNHQoYyxsLGEpe3JldHVybiB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gu'@;
put 'dHJpbVN0YXNoKGFbMF0sbCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYVswXSxudWxsLC0xKmwpLHRoaXMuZGF0YU1hbmFnZXIuZmlsdGVyRGF0YShjLGwsYSksVkgoakgsdGhpcywhMCksdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCkuc2xpY2Uo'@;
put 'KX1mdW5jdGlvbiBnNHQoYyl7cmV0dXJuIHRoaXMuY29udGV4dE1lbnVVSS5hcHBlbmRPcHRpb25zKGMpfWZ1bmN0aW9uIG00dChjLGwpe3RoaXMuaGVhZGVyc1VJLmFwcGVuZExldmVsSW5kaWNhdG9ycyhjLGwpfWZ1bmN0aW9uIHY0dChjKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWFkZXJz'@;
put 'VUkucm93SGVhZGVyV2lkdGhDYWNoZSxjKX1mdW5jdGlvbiBiNHQoYyxsLGEsZCl7ZCE9PXRoaXMucGx1Z2luTmFtZSYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e1ZIKGpILHRoaXMsITEpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCksdGhpcy5jb2xsYXBz'@;
put 'aW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKX0pfWZ1bmN0aW9uIHk0dChjLGwsYSl7Y29uc3QgZD1BcnJheS5mcm9tKGEucmVkdWNlKChoLGYpPT57aWYodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChmKSl7Y29uc3Qgdj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmpl'@;
put 'Y3QoZikuX19jaGlsZHJlbjtyZXR1cm4gaC5hZGQoZiksQXJyYXkuaXNBcnJheSh2KSYmdi5mb3JFYWNoKE09PmguYWRkKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoTSkpKSxofXJldHVybiBoLmFkZChmKX0sbmV3IFNldCkpO2EubGVuZ3RoPTAsYS5wdXNoKC4uLmQpfWZ1bmN0aW9u'@;
put 'IF80dCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfWZ1bmN0aW9uIHc0dChjLGwpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobCkpLHRoaXMuY29sbGFwc2lu'@;
put 'Z1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCksdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiBDNHQoKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX1mdW5jdGlvbiBTNHQoYyxsLGEpe3RoaXMuY29sbGFw'@;
put 'c2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGEsbnVsbCwtMSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIE00dCgpe3RoaXMuZGF0YU1hbmFn'@;
put 'ZXIucmV3cml0ZUNhY2hlKCl9ZnVuY3Rpb24geDR0KCl7dGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiBFNHQoYyxsKXtOSChqSCx0aGlzKSYmKGwuc2tpcFJlbmRlcj0hMCl9ZnVuY3Rpb24gWW1lKGMpe2lmKCF5M2UoYykpcmV0dXJuIE8kKCJUaGUgTmVz'@;
put 'dGVkIFJvd3MgcGx1Z2luIHJlcXVpcmVzIGFuIEFycmF5IG9mIE9iamVjdHMgYXMgYSBkYXRhc2V0IHRvIGJlIHByb3ZpZGVkLiBUaGUgcGx1Z2luIGhhcyBiZWVuIGRpc2FibGVkLiIpLHRoaXMuaG90LmdldFNldHRpbmdzKClbQkhdPSExLHZvaWQgdGhpcy5kaXNhYmxlUGx1Z2luKCk7dGhp'@;
put 'cy5kYXRhTWFuYWdlci5zZXREYXRhKGMpLHRoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCl9ZnVuY3Rpb24gYWVlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBUNHQoYyl7dmFyIGw9ZnVuY3Rpb24gQTR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIg'@;
put 'YT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4i'@;
put 'KX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFi'@;
put 'bGU6ITB9KTpjW2xdPWEsY31jb25zdCBENHQ9Y2xhc3MgazR0e2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp3aW5kb3c7YWVlKHRoaXMsInJvb3RXaW5kb3ciLHZvaWQgMCksYWVlKHRoaXMsInByZWZp'@;
put 'eCIsdm9pZCAwKSxhZWUodGhpcywic2F2ZWRLZXlzIixbXSksdGhpcy5yb290V2luZG93PWEsdGhpcy5wcmVmaXg9bCx0aGlzLmxvYWRTYXZlZEtleXMoKX1zYXZlVmFsdWUobCxhKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7bH1gLEpT'@;
put 'T04uc3RyaW5naWZ5KGEpKSwtMT09PXRoaXMuc2F2ZWRLZXlzLmluZGV4T2YobCkmJih0aGlzLnNhdmVkS2V5cy5wdXNoKGwpLHRoaXMuc2F2ZVNhdmVkS2V5cygpKX1sb2FkVmFsdWUobCxhKXtjb25zdCBoPXRoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShgJHt0aGlzLnBy'@;
put 'ZWZpeH1fJHt0eXBlb2YgbD4idSI/YTpsfWApO3JldHVybiBudWxsPT09aD92b2lkIDA6SlNPTi5wYXJzZShoKX1yZXNldChsKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7bH1gKX1yZXNldEFsbCgpe1luKHRoaXMuc2F2ZWRLZXlz'@;
put 'LChsLGEpPT57dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMucHJlZml4fV8ke3RoaXMuc2F2ZWRLZXlzW2FdfWApfSksdGhpcy5jbGVhclNhdmVkS2V5cygpfWxvYWRTYXZlZEtleXMoKXtjb25zdCBsPXRoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uu'@;
put 'Z2V0SXRlbShgJHt0aGlzLnByZWZpeH1fX3BlcnNpc3RlbnRTdGF0ZUtleXNgKSxhPSJzdHJpbmciPT10eXBlb2YgbD9KU09OLnBhcnNlKGwpOnZvaWQgMDt0aGlzLnNhdmVkS2V5cz1hfHxbXX1zYXZlU2F2ZWRLZXlzKCl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGAk'@;
put 'e3RoaXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5c2AsSlNPTi5zdHJpbmdpZnkodGhpcy5zYXZlZEtleXMpKX1jbGVhclNhdmVkS2V5cygpe3RoaXMuc2F2ZWRLZXlzLmxlbmd0aD0wLHRoaXMuc2F2ZVNhdmVkS2V5cygpfX07TW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNp'@;
put 'c3RlbnRTdGF0ZVNhdmUiKSxNby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlTG9hZCIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIpO2NvbnN0IEdtZT0icGVyc2lzdGVudFN0YXRlIjtjbGFzcyBQNHQgZXh0ZW5kcyBG'@;
put 'c3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gSTR0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBSNHQoYyl7dmFyIGw9ZnVuY3Rpb24gTDR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2'@;
put 'ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s'@;
put 'P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhp'@;
put 'cywic3RvcmFnZSIsdm9pZCAwKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gR21lfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0dtZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFi'@;
put 'bGVkfHwodGhpcy5zdG9yYWdlfHwodGhpcy5zdG9yYWdlPW5ldyBENHQodGhpcy5ob3Qucm9vdEVsZW1lbnQuaWQsdGhpcy5ob3Qucm9vdFdpbmRvdykpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVudFN0YXRlU2F2ZSIsKGwsYSk9PnRoaXMuc2F2ZVZhbHVlKGwsYSkpLHRoaXMuYWRkSG9vaygi'@;
put 'cGVyc2lzdGVudFN0YXRlTG9hZCIsKGwsYSk9PnRoaXMubG9hZFZhbHVlKGwsYSkpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVudFN0YXRlUmVzZXQiLCgpPT50aGlzLnJlc2V0VmFsdWUoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnN0b3JhZ2U9dm9pZCAw'@;
put 'LHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWxvYWRWYWx1ZShsLGEpe2EudmFsdWU9dGhpcy5zdG9yYWdlLmxvYWRWYWx1ZShsKX1zYXZlVmFsdWUobCxhKXt0'@;
put 'aGlzLnN0b3JhZ2Uuc2F2ZVZhbHVlKGwsYSl9cmVzZXRWYWx1ZShsKXt0eXBlb2YgbD4idSI/dGhpcy5zdG9yYWdlLnJlc2V0QWxsKCk6dGhpcy5zdG9yYWdlLnJlc2V0KGwpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHNlZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g'@;
put 'TjR0KGMpe3ZhciBsPWZ1bmN0aW9uIFY0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy'@;
put 'biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gJG1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxl'@;
put 'bmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBsZWU9InNlYXJjaCIsejR0PWZ1bmN0aW9uKGMsbCxhLGQsaCl7Yy5nZXRDZWxsTWV0YShsLGEpLmlzU2VhcmNoUmVzdWx0PWh9LFU0dD1m'@;
put 'dW5jdGlvbihjLGwsYSl7cmV0dXJuISh5YyhjKXx8bnVsbD09PWN8fCFjLnRvTG9jYWxlTG93ZXJDYXNlfHwwPT09Yy5sZW5ndGh8fHljKGwpfHxudWxsPT09bCkmJi0xIT09bC50b1N0cmluZygpLnRvTG9jYWxlTG93ZXJDYXNlKGEubG9jYWxlKS5pbmRleE9mKGMudG9Mb2NhbGVMb3dlckNh'@;
put 'c2UoYS5sb2NhbGUpKX07dmFyIGNlZT1uZXcgV2Vha1NldDtjbGFzcyBaNHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRjR0KGMsbCl7KGZ1bmN0aW9uIEg0dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5v'@;
put 'dCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGNlZSksc2VlKHRoaXMsImNhbGxiYWNrIix6NHQpLHNlZSh0aGlzLCJxdWVyeU1ldGhvZCIsVTR0KSxzZWUodGhpcywic2VhcmNoUmVzdWx0Q2xh'@;
put 'c3MiLCJodFNlYXJjaFJlc3VsdCIpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBsZWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTkwfWlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2xlZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9'@;
put 'dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtsZWVdO3RoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3MoYSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXJlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5l'@;
put 'dyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gJG1lKGNlZSxsLEttZSkuY2FsbChsLC4uLmgpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7Y29uc3QgYT1mdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMu'@;
put 'bGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiAkbWUoY2VlLGwsS21lKS5jYWxsKGwsLi4uaCl9O3RoaXMuaG90LmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixhKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwo'@;
put 'KT0+e3RoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVJlbmRlcmVyIixhKX0pLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXF1ZXJ5KGwpe2xldCBhPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmdldENhbGxiYWNrKCksZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5nZXRRdWVyeU1ldGhvZCgpO2NvbnN0IGg9dGhpcy5ob3Qu'@;
put 'Y291bnRSb3dzKCksZj10aGlzLmhvdC5jb3VudENvbHMoKSx2PVtdLE09dGhpcy5ob3Q7cmV0dXJuICRvKDAsaC0xLEQ9PnskbygwLGYtMSxaPT57Y29uc3QgbmU9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChELFopLGNlPXRoaXMuaG90LmdldENlbGxNZXRhKEQsWiksYmU9Y2Uuc2VhcmNoLmNh'@;
put 'bGxiYWNrfHxhLEJlPShjZS5zZWFyY2gucXVlcnlNZXRob2R8fGQpKGwsbmUsY2UpO0JlJiZ2LnB1c2goe3JvdzpELGNvbDpaLGRhdGE6bmV9KSxiZSYmYmUoTSxELFosbmUsQmUpfSl9KSx2fWdldENhbGxiYWNrKCl7cmV0dXJuIHRoaXMuY2FsbGJhY2t9c2V0Q2FsbGJhY2sobCl7dGhpcy5j'@;
put 'YWxsYmFjaz1sfWdldFF1ZXJ5TWV0aG9kKCl7cmV0dXJuIHRoaXMucXVlcnlNZXRob2R9c2V0UXVlcnlNZXRob2QobCl7dGhpcy5xdWVyeU1ldGhvZD1sfWdldFNlYXJjaFJlc3VsdENsYXNzKCl7cmV0dXJuIHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9c2V0U2VhcmNoUmVzdWx0Q2xhc3MobCl7'@;
put 'dGhpcy5zZWFyY2hSZXN1bHRDbGFzcz1sfXVwZGF0ZVBsdWdpblNldHRpbmdzKGwpe3FhKGwpJiYobC5zZWFyY2hSZXN1bHRDbGFzcyYmdGhpcy5zZXRTZWFyY2hSZXN1bHRDbGFzcyhsLnNlYXJjaFJlc3VsdENsYXNzKSxsLnF1ZXJ5TWV0aG9kJiZ0aGlzLnNldFF1ZXJ5TWV0aG9kKGwucXVl'@;
put 'cnlNZXRob2QpLGwuY2FsbGJhY2smJnRoaXMuc2V0Q2FsbGJhY2sobC5jYWxsYmFjaykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEttZShjLGwsYSxkLGgsZil7Y29uc3Qgdj1mLmNsYXNzTmFtZXx8W107bGV0IE09W107InN0cmluZyI9PXR5cGVvZiB2P009di5zcGxp'@;
put 'dCgiICIpOk0ucHVzaCguLi52KSx0aGlzLmlzRW5hYmxlZCgpJiZmLmlzU2VhcmNoUmVzdWx0P00uaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcyl8fE0ucHVzaChgJHt0aGlzLnNlYXJjaFJlc3VsdENsYXNzfWApOk0uaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcykmJk0u'@;
put 'c3BsaWNlKE0uaW5kZXhPZih0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSwxKSxmLmNsYXNzTmFtZT1NLmpvaW4oIiAiKX1mdW5jdGlvbiB6SChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVzR0KGMpe3ZhciBsPWZ1bmN0aW9uIFk0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0'@;
put 'dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp'@;
put 'dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl'@;
put 'OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgcW1le2NvbnN0cnVjdG9yKGwpe3pIKHRoaXMsInZpZXdwb3J0V2lkdGgiLHZvaWQgMCksekgodGhpcywib3ZlcndyaXRlQ29sdW1uV2lkdGhGbiIsdm9pZCAwKSx6SCh0aGlzLCJiYXNlV2lkdGhzIixuZXcgTWFwKSx6SCh0aGlzLCJz'@;
put 'dHJldGNoZWRXaWR0aHMiLG5ldyBNYXApLHRoaXMub3ZlcndyaXRlQ29sdW1uV2lkdGhGbj1sfXByZXBhcmUobCl7bGV0e3ZpZXdwb3J0V2lkdGg6YX09bDt0aGlzLnZpZXdwb3J0V2lkdGg9YSx0aGlzLmJhc2VXaWR0aHMuY2xlYXIoKSx0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpfXNl'@;
put 'dENvbHVtbkJhc2VXaWR0aChsLGEpe3RoaXMuYmFzZVdpZHRocy5zZXQobCxhKX1jYWxjdWxhdGUoKXt9Z2V0V2lkdGhzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5zdHJldGNoZWRXaWR0aHMpfX1jbGFzcyBHNHQgZXh0ZW5kcyBxbWV7Y2FsY3VsYXRlKCl7Y29uc3QgbD1BcnJheS5mcm9t'@;
put 'KHRoaXMuYmFzZVdpZHRocykucmVkdWNlKChjZSxiZSk9PntsZXRbLEVlXT1iZTtyZXR1cm4gY2UrRWV9LDApO2lmKHRoaXMudmlld3BvcnRXaWR0aC1sPDApcmV0dXJuIHZvaWQgdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKTtjb25zdCBkPXRoaXMudmlld3BvcnRXaWR0aC9sLGg9W10s'@;
put 'Zj1bXTtsZXQgdj10aGlzLnZpZXdwb3J0V2lkdGgsTT0wO2lmKHRoaXMuYmFzZVdpZHRocy5mb3JFYWNoKChjZSxiZSk9Pntjb25zdCBFZT1NYXRoLnJvdW5kKGNlKmQpLEJlPXRoaXMub3ZlcndyaXRlQ29sdW1uV2lkdGhGbihFZSxiZSk7RWU9PT1CZSYmRWU+PV9fPyhoLnB1c2goW2JlLEJl'@;
put 'XSksTSs9QmUpOkVlIT09QmUmJihoLnB1c2goW2JlLEJlXSksZi5wdXNoKGJlKSx2LT1CZSl9KSx2PD1fXylyZXR1cm4gdm9pZCB0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpO2NvbnN0IEQ9di9NO2xldCBaPS0xLG5lPTA7aC5mb3JFYWNoKChjZSxiZSk9PntsZXRbRWUsQmVdPWNlLHFl'@;
put 'PUJlO2YuaW5jbHVkZXMoRWUpfHwocWU9TWF0aC5yb3VuZChCZSpEKSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KEVlLHFlKSxaPUVlLGJlPGgubGVuZ3RoLTEmJihuZSs9cWUpfSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2l6ZT4xJiZ0aGlzLnN0cmV0Y2hlZFdpZHRocy5zZXQoWixNYXRo'@;
put 'LnJvdW5kKHRoaXMudmlld3BvcnRXaWR0aC1uZSkpfX1mdW5jdGlvbiBYbWUoYyxsLGEpeyhmdW5jdGlvbiAkNHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVj'@;
put 'dCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHVlZShjLGwpe3JldHVybiBjLmdldChKbWUoYyxsKSl9ZnVuY3Rpb24gVUgoYyxsLGEpe3JldHVybiBjLnNldChKbWUoYyxsKSxhKSxhfWZ1bmN0aW9uIEptZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMo'@;
put 'bCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFpIPW5ldyBXZWFrTWFwLF9BPW5ldyBXZWFrTWFwO2NsYXNzIEs0dCBleHRlbmRzIHFtZXtjb25zdHJ1'@;
put 'Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksWG1lKHRoaXMsWkgsMCksWG1lKHRoaXMsX0EsLTEpfXByZXBhcmUobCl7c3VwZXIucHJlcGFyZShsKSxVSChaSCx0aGlzLDApLFVIKF9BLHRoaXMsLTEpfXNldENvbHVtbkJhc2VXaWR0aChsLGEpe3N1cGVyLnNldENvbHVtbkJhc2VXaWR0aChs'@;
put 'LGEpLFVIKF9BLHRoaXMsbCksVUgoWkgsdGhpcyxhKX1jYWxjdWxhdGUoKXtpZigtMT09PXVlZShfQSx0aGlzKSlyZXR1cm47Y29uc3QgbD1BcnJheS5mcm9tKHRoaXMuYmFzZVdpZHRocykucmVkdWNlKChkLGgpPT57bGV0WyxmXT1oO3JldHVybiBkK2Z9LDApLGE9TWF0aC5tYXgodGhpcy52'@;
put 'aWV3cG9ydFdpZHRoLWwrdWVlKFpILHRoaXMpLDApO3RoaXMuc3RyZXRjaGVkV2lkdGhzLnNldCh1ZWUoX0EsdGhpcyksYSl9fWZ1bmN0aW9uIFdIKGMsbCxhKXtRbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFFtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNh'@;
put 'bm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gaHUoYyxsKXtyZXR1cm4gYy5nZXQoYncoYyxsKSl9ZnVuY3Rpb24gZGVlKGMsbCxhKXtyZXR1cm4gYy5zZXQoYncoYyxsKSxhKSxhfWZ1bmN0aW9uIGJ3KGMsbCxh'@;
put 'KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTTE9bmV3IFdlYWtNYXAseXc9bmV3'@;
put 'IFdlYWtNYXAsaGVlPW5ldyBXZWFrTWFwLFlIPW5ldyBXZWFrTWFwLHdBPW5ldyBXZWFrU2V0O2NsYXNzIEo0dHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gcTR0KGMsbCl7UW1lKGMsbCksbC5hZGQoYyl9KSh0aGlzLHdBKSxXSCh0aGlzLE0xLHZvaWQgMCksV0godGhpcyx5dyx2b2lkIDAp'@;
put 'LFdIKHRoaXMsaGVlLG5ldyBNYXAoW1siYWxsIixuZXcgRzR0KGJ3KHdBLHRoaXMsZTZlKS5iaW5kKHRoaXMpKV0sWyJsYXN0IixuZXcgSzR0KGJ3KHdBLHRoaXMsZTZlKS5iaW5kKHRoaXMpKV1dKSksV0godGhpcyxZSCwibm9uZSIpLGRlZShNMSx0aGlzLGwpLGRlZSh5dyx0aGlzLGh1KE0x'@;
put 'LHRoaXMpLmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAoInN0cmV0Y2hDb2x1bW5zIiwicGh5c2ljYWxJbmRleFRvVmFsdWUiKSl9dXNlU3RyYXRlZ3kobCl7ZGVlKFlILHRoaXMsaHUoaGVlLHRoaXMpLmhhcyhsKT9sOiJub25lIil9cmVmcmVzaFN0cmV0Y2hp'@;
put 'bmcoKXsibm9uZSIhPT1odShZSCx0aGlzKT9odShNMSx0aGlzKS5iYXRjaEV4ZWN1dGlvbigoKT0+e2h1KHl3LHRoaXMpLmNsZWFyKCk7Y29uc3QgbD1odShoZWUsdGhpcykuZ2V0KGh1KFlILHRoaXMpKTtsZXQgZD1odShNMSx0aGlzKS52aWV3LmdldFZpZXdwb3J0V2lkdGgoKTtidyh3QSx0'@;
put 'aGlzLFE0dCkuY2FsbCh0aGlzKSYmKGQtPWgwKGh1KE0xLHRoaXMpLnJvb3REb2N1bWVudCkpLGwucHJlcGFyZSh7dmlld3BvcnRXaWR0aDpkfSk7Zm9yKGxldCBoPTA7aDxodShNMSx0aGlzKS5jb3VudENvbHMoKTtoKyspaHUoTTEsdGhpcykuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4o'@;
put 'aHUoTTEsdGhpcykudG9QaHlzaWNhbENvbHVtbihoKSl8fGwuc2V0Q29sdW1uQmFzZVdpZHRoKGgsYncod0EsdGhpcyxlZ3QpLmNhbGwodGhpcyxoKSk7bC5jYWxjdWxhdGUoKSxsLmdldFdpZHRocygpLmZvckVhY2goaD0+e2xldFtmLHZdPWg7aHUoeXcsdGhpcykuc2V0VmFsdWVBdEluZGV4'@;
put 'KGh1KE0xLHRoaXMpLnRvUGh5c2ljYWxDb2x1bW4oZiksdil9KX0sITApOmh1KHl3LHRoaXMpLmNsZWFyKCl9Z2V0U3RyZXRjaGVkV2lkdGgobCl7cmV0dXJuIGh1KHl3LHRoaXMpLmdldFZhbHVlQXRJbmRleChodShNMSx0aGlzKS50b1BoeXNpY2FsQ29sdW1uKGwpKX19ZnVuY3Rpb24gUTR0'@;
put 'KCl7Y29uc3R7dmlldzpjfT1odShNMSx0aGlzKTtpZihjLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXJldHVybiExO2NvbnN0IGw9Yy5nZXRWaWV3cG9ydEhlaWdodCgpLGE9aHUoTTEsdGhpcykuY291bnRSb3dzKCksZD1jLmdldFN0eWxlc0hhbmRsZXIoKS5nZXREZWZhdWx0'@;
put 'Um93SGVpZ2h0KCk7bGV0IGg9MCxmPSExO2ZvcihsZXQgTT0wO008YTtNKyspe3ZhciB2O2lmKGgrPShudWxsIT09KHY9aHUoTTEsdGhpcykuZ2V0Um93SGVpZ2h0KE0pKSYmdm9pZCAwIT09dj92OmQpKygwPT09TT8xOjApLGg+bCl7Zj0hMDticmVha319cmV0dXJuIGZ9ZnVuY3Rpb24gZWd0'@;
put 'KGMpe3ZhciBsO3JldHVybiBudWxsIT09KGw9aHUoTTEsdGhpcykuZ2V0Q29sV2lkdGgoYywiU3RyZXRjaENvbHVtbnMiKSkmJnZvaWQgMCE9PWw/bDpfX31mdW5jdGlvbiBlNmUoYyxsKXtyZXR1cm4gaHUoTTEsdGhpcykucnVuSG9va3MoImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIs'@;
put 'YyxsKX1mdW5jdGlvbiBmZWUoYyxsLGEpe3Q2ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gdDZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5j'@;
put 'dGlvbiBwZWUoYyxsLGEpe3JldHVybiBjLnNldChHSChjLGwpLGEpLGF9ZnVuY3Rpb24gR2coYyxsKXtyZXR1cm4gYy5nZXQoR0goYyxsKSl9ZnVuY3Rpb24gR0goYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/'@;
put 'bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBfdz1uZXcgV2Vha01hcCwkSD1uZXcgV2Vha01hcCxDQT1uZXcgV2Vha01hcCxnZWU9bmV3IFdlYWtTZXQ7Y2xhc3MgaWd0IGV4dGVuZHMgRnN7Y29uc3Ry'@;
put 'dWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHRndChjLGwpe3Q2ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGdlZSksZmVlKHRoaXMsX3csbmV3IEo0dCh0aGlzLmhvdCkpLGZlZSh0aGlzLCRILG51bGwpLGZlZSh0aGlzLENBLG5ldyBSZXNpemVPYnNlcnZlcihsPT57cmVxdWVz'@;
put 'dEFuaW1hdGlvbkZyYW1lKCgpPT57dmFyIGE7bnVsbCE9PShhPXRoaXMuaG90KSYmdm9pZCAwIT09YSYmYS52aWV3LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJmwuZm9yRWFjaChkPT57bGV0e2NvbnRlbnRSZWN0Omh9PWQ7bnVsbCE9PUdnKCRILHRoaXMpJiZHZygkSCx0'@;
put 'aGlzKSE9PWgud2lkdGgmJih0aGlzLmhvdC5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpLHBlZSgkSCx0aGlzLGgud2lkdGgpfSl9KX0pKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ic3RyZXRjaENvbHVtbnMifXN0YXRpYyBn'@;
put 'ZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE1NX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWlzRW5hYmxlZCgpe3JldHVyblsiYWxsIiwibGFzdCJdLmluY2x1ZGVzKHRoaXMuaG90LmdldFNldHRpbmdzKCkuc3RyZXRjaEgpfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRo'@;
put 'aXM7dGhpcy5lbmFibGVkfHwoR2coX3csdGhpcykudXNlU3RyYXRlZ3kodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCksR2coQ0EsdGhpcykub2JzZXJ2ZSh0aGlzLmhvdC5yb290RWxlbWVudCksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBh'@;
put 'PWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEdIKGdlZSxsLGFndCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0'@;
put 'aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gR0goZ2VlLGwsb2d0KS5jYWxsKGwsLi4uZCl9LDEwKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7R2coX3csdGhpcykudXNlU3RyYXRlZ3kodGhpcy5ob3QuZ2V0U2V0dGlu'@;
put 'Z3MoKS5zdHJldGNoSCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSxHZyhDQSx0aGlzKS51bm9ic2VydmUodGhpcy5ob3Qucm9vdEVsZW1lbnQpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiBHZyhfdyx0aGlzKS5nZXRTdHJldGNo'@;
put 'ZWRXaWR0aChsKX1kZXN0cm95KCl7R2coQ0EsdGhpcykuZGlzY29ubmVjdCgpLHBlZShDQSx0aGlzLG51bGwpLHBlZShfdyx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gb2d0KGMsbCxhKXtpZihhPT09dGhpcy5wbHVnaW5OYW1lKXJldHVybjtjb25zdCBkPXRoaXMuZ2V0'@;
put 'Q29sdW1uV2lkdGgobCk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBkP2Q6Y31mdW5jdGlvbiBhZ3QoYyl7YyYmR2coX3csdGhpcykucmVmcmVzaFN0cmV0Y2hpbmcoKX1mdW5jdGlvbiBLSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gY2d0KGMpe3ZhciBsPWZ1bmN0aW9uIHVndChjLGwpe2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt'@;
put 'aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph'@;
put 'LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gbWVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQ'@;
put 'cml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgcUg9bmV3IFdlYWtTZXQ7Y2xhc3MgZmd0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHNndChjLGwpeyhmdW5jdGlvbiBsZ3QoYyxsKXtpZihsLmhh'@;
put 'cyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxxSCksS0godGhpcywic2Nyb2xsYmFycyIsW10pLEtIKHRoaXMsImNsb25lcyIsW10pLEtI'@;
put 'KHRoaXMsImxvY2tlZENvbGxlY3Rpb24iLCExKSxLSCh0aGlzLCJmcmVlemVPdmVybGF5cyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJ0b3VjaFNjcm9sbCJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjAwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlT'@;
put 'KCl7cmV0dXJuITB9aXNFbmFibGVkKCl7cmV0dXJuIEEkKCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlclZpZXdSZW5kZXIiLCgpPT5tZWUocUgsdGhpcyxwZ3QpLmNhbGwodGhpcykpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5lbmFibGVQ'@;
put 'bHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSExLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJFdmVudHMoKXt0aGlzLmFkZEhvb2soImJlZm9yZVRvdWNoU2Nyb2xsIiwoKT0+bWVl'@;
put 'KHFILHRoaXMsZ2d0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTW9tZW50dW1TY3JvbGwiLCgpPT5tZWUocUgsdGhpcyxtZ3QpLmNhbGwodGhpcykpfX1mdW5jdGlvbiBwZ3QoKXtpZih0aGlzLmxvY2tlZENvbGxlY3Rpb24pcmV0dXJuO2NvbnN0e3RvcE92ZXJsYXk6Yyxib3R0'@;
put 'b21PdmVybGF5OmwsaW5saW5lU3RhcnRPdmVybGF5OmEsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmQsYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Omh9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSEwLHRoaXMuc2Nyb2xsYmFy'@;
put 'cy5sZW5ndGg9MCx0aGlzLnNjcm9sbGJhcnMucHVzaChjKSxsLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChsKSx0aGlzLnNjcm9sbGJhcnMucHVzaChhKSxkJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChkKSxoJiZoLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChoKSx0aGlzLmNsb25l'@;
put 'cz1bXSxjLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmNsb25lcy5wdXNoKGMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksbC5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChsLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGEubmVlZEZ1bGxSZW5kZXImJnRo'@;
put 'aXMuY2xvbmVzLnB1c2goYS5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxkJiZ0aGlzLmNsb25lcy5wdXNoKGQuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksaCYmaC5jbG9uZSYmdGhpcy5jbG9uZXMucHVzaChoLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5v'@;
put 'ZGUpfWZ1bmN0aW9uIGdndCgpe3RoaXMuZnJlZXplT3ZlcmxheXM9ITAsWW4odGhpcy5jbG9uZXMsYz0+e1RpKGMsImhpZGUtdHdlZW4iKX0pfWZ1bmN0aW9uIG1ndCgpe3RoaXMuZnJlZXplT3ZlcmxheXM9ITEsWW4odGhpcy5jbG9uZXMsYz0+e2NhKGMsImhpZGUtdHdlZW4iKSxUaShjLCJz'@;
put 'aG93LXR3ZWVuIil9KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57WW4odGhpcy5jbG9uZXMsYz0+e2NhKGMsInNob3ctdHdlZW4iKX0pfSw0MDApLFluKHRoaXMuc2Nyb2xsYmFycyxjPT57Yy5yZWZyZXNoKCksYy5yZXNldEZpeGVkUG9zaXRpb24oKX0pLHRoaXMuaG90LnZpZXcu'@;
put 'X3d0Lnd0T3ZlcmxheXMuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKX1jb25zdCBYSD0idHJpbVJvd3MiO3ZhciBuNmU9bmV3IFdlYWtTZXQ7Y2xhc3MgTWd0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHZndChjLGwpeyhmdW5jdGlvbiBiZ3Qo'@;
put 'YyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxuNmUpLGZ1bmN0aW9uIHlndChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp'@;
put 'b24gX2d0KGMpe3ZhciBsPWZ1bmN0aW9uIHdndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl'@;
put 'dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g'@;
put 'Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInRyaW1tZWRSb3dzTWFwIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gWEh9c3RhdGljIGdldCBQ'@;
put 'TFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzMwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtYSF19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy50cmltbWVkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgidHJp'@;
put 'bVJvd3MiLG5ldyBLRSksdGhpcy50cmltbWVkUm93c01hcC5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5mdW5jdGlvbiBDZ3QoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShuNmUsdGhpcyx4Z3QpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbWEhdO0FycmF5LmlzQXJyYXko'@;
put 'bCkmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy50cmltbWVkUm93c01hcC5jbGVhcigpLFluKGwsYT0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qu'@;
put 'cm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCgidHJpbVJvd3MiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0VHJpbW1lZFJvd3MoKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRUcmltbWVkSW5kZXhlcygpfXRyaW1Sb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93'@;
put 'cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRyaW1Sb3ciLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCx2PT57'@;
put 'dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgodiwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclRyaW1Sb3ciLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9dHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9'@;
put 'MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMudHJpbVJvd3MoYSl9dW50cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9dGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZXMoKS5zbGlj'@;
put 'ZSgpLHY9bC5sZW5ndGg+MDtkJiZ2JiYoWW4obCxEPT57ZltEXT0hMX0pLGg9S3UoZiwoRCxaLG5lKT0+KFomJkQucHVzaChuZSksRCksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbnRyaW1Sb3ciLGEsaCxkJiZ2KSYmKGQmJnYmJnRoaXMudHJpbW1lZFJvd3NNYXAuc2V0'@;
put 'VmFsdWVzKGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVudHJpbVJvdyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX11bnRyaW1Sb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlz'@;
put 'LnVudHJpbVJvd3MoYSl9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChsKXx8ITF9dW50cmltQWxsKCl7dGhpcy51bnRyaW1Sb3dzKHRoaXMuZ2V0VHJpbW1lZFJvd3MoKSl9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNv'@;
put 'dW50U291cmNlUm93cygpO3JldHVybiBsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24geGd0KCl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1hIXTtBcnJheS5pc0FycmF5KGMpJiZ0aGlz'@;
put 'LmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1luKGMsbD0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGwsITApfSl9LCEwKX1jbGFzcyBKMntjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gRWd0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBUZ3QoYyl7dmFyIGw9ZnVuY3Rp'@;
put 'b24gQWd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsImFjdGlvblR5cGUiLCIiKSx0aGlzLmFjdGlvblR5cGU9bH11bmRvKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX1yZWRvKCl7dGhyb3cg'@;
put 'bmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX19ZnVuY3Rpb24gSkgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGtndChjKXt2YXIgbD1mdW5jdGlvbiBEZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2'@;
put 'b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5n'@;
put 'Ok51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHZlZSBl'@;
put 'eHRlbmRzIEoye2NvbnN0cnVjdG9yKGwpe2xldHtzdGF0ZUJlZm9yZTphLHJhbmdlOmQsdHlwZTpoLGFsaWdubWVudDpmfT1sO3N1cGVyKCJjZWxsX2FsaWdubWVudCIpLEpIKHRoaXMsInN0YXRlQmVmb3JlIix2b2lkIDApLEpIKHRoaXMsInJhbmdlIix2b2lkIDApLEpIKHRoaXMsInR5cGUi'@;
put 'LHZvaWQgMCksSkgodGhpcywiYWxpZ25tZW50Iix2b2lkIDApLHRoaXMuc3RhdGVCZWZvcmU9YSx0aGlzLnJhbmdlPWQsdGhpcy50eXBlPWgsdGhpcy5hbGlnbm1lbnQ9Zn1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ2VsbEFsaWdubWVudCIs'@;
put 'KGQsaCxmLHYpPT57YS5kb25lKCgpPT5uZXcgdmVlKHtzdGF0ZUJlZm9yZTpkLHJhbmdlOmgsdHlwZTpmLGFsaWdubWVudDp2fSkpfSl9dW5kbyhsLGEpe1luKHRoaXMucmFuZ2UsZD0+e2QuZm9yQWxsKChoLGYpPT57aD49MCYmZj49MCYmbC5zZXRDZWxsTWV0YShoLGYsImNsYXNzTmFtZSIs'@;
put 'dGhpcy5zdGF0ZUJlZm9yZVtoXVtmXXx8IiBodExlZnQiKX0pfSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnJlbmRlcigpfXJlZG8obCxhKXtYbSh0aGlzLnJhbmdlLHRoaXMudHlwZSx0aGlzLmFsaWdubWVudCwoZCxoKT0+bC5nZXRDZWxsTWV0YShkLGgpLChkLGgs'@;
put 'Zix2KT0+bC5zZXRDZWxsTWV0YShkLGgsZix2KSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnJlbmRlcigpfX1mdW5jdGlvbiByNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIElndChjKXt2YXIgbD1mdW5jdGlvbiBSZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9m'@;
put 'IGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJu'@;
put 'IGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNv'@;
put 'bmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGJlZSBleHRlbmRzIEoye2NvbnN0cnVjdG9yKGwpe2xldHtjb2x1bW5zOmEsZmluYWxJbmRleDpkfT1sO3N1cGVyKCJjb2xfbW92ZSIpLHI2ZSh0aGlzLCJjb2x1bW5zIix2b2lkIDApLHI2ZSh0aGlzLCJmaW5hbENv'@;
put 'bHVtbkluZGV4Iix2b2lkIDApLHRoaXMuY29sdW1ucz1hLnNsaWNlKCksdGhpcy5maW5hbENvbHVtbkluZGV4PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChkLGgpPT57ITEhPT1kJiZhLmRvbmUoKCk9Pm5ldyBiZWUo'@;
put 'e2NvbHVtbnM6ZCxmaW5hbEluZGV4Omh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksQ1EodGhpcy5jb2x1bW5zLHRoaXMuZmluYWxDb2x1bW5JbmRleCxsLmNvbHVtbkluZGV4'@;
put 'TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaChmPT57bGV0e2Zyb206dix0bzpNfT1mO3Y8TSYmKE0tPTEpLGQubW92ZUNvbHVtbihNLHYpfSksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Q29sdW1ucyh0aGlzLmNvbHVtbnNbMF0sdGhp'@;
put 'cy5jb2x1bW5zWzBdK3RoaXMuY29sdW1ucy5sZW5ndGgtMSl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubW92ZUNvbHVtbnModGhpcy5jb2x1bW5zLnNsaWNlKCksdGhpcy5maW5h'@;
put 'bENvbHVtbkluZGV4KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RDb2x1bW5zKHRoaXMuZmluYWxDb2x1bW5JbmRleCx0aGlzLmZpbmFsQ29sdW1uSW5kZXgrdGhpcy5jb2x1bW5zLmxlbmd0aC0xKX19ZnVuY3Rpb24gaTZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBM'@;
put 'Z3QoYyl7dmFyIGw9ZnVuY3Rpb24gT2d0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJu'@;
put 'IGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB5ZWUgZXh0ZW5kcyBKMntjb25zdHJ1Y3RvcihsKXtsZXR7Y3VycmVudFNvcnRTdGF0ZTphLG5ld1NvcnRTdGF0ZTpkfT1sO3N1'@;
put 'cGVyKCJjb2xfc29ydCIpLGk2ZSh0aGlzLCJwcmV2aW91c1NvcnRTdGF0ZSIsdm9pZCAwKSxpNmUodGhpcywibmV4dFNvcnRTdGF0ZSIsdm9pZCAwKSx0aGlzLnByZXZpb3VzU29ydFN0YXRlPWEsdGhpcy5uZXh0U29ydFN0YXRlPWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxh'@;
put 'KXtsLmFkZEhvb2soImJlZm9yZUNvbHVtblNvcnQiLChkLGgsZik9PntmJiZhLmRvbmUoKCk9Pm5ldyB5ZWUoe2N1cnJlbnRTb3J0U3RhdGU6ZCxuZXdTb3J0U3RhdGU6aH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJjb2x1bW5Tb3J0aW5nIiksaD1sLmdldFBsdWdpbigi'@;
put 'bXVsdGlDb2x1bW5Tb3J0aW5nIiksZj1oLmlzRW5hYmxlZCgpP2g6ZDt0aGlzLnByZXZpb3VzU29ydFN0YXRlLmxlbmd0aD9mLnNvcnQodGhpcy5wcmV2aW91c1NvcnRTdGF0ZSk6Zi5jbGVhclNvcnQoKSxhKCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImNvbHVtblNvcnRpbmci'@;
put 'KSxoPWwuZ2V0UGx1Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKTsoaC5pc0VuYWJsZWQoKT9oOmQpLnNvcnQodGhpcy5uZXh0U29ydFN0YXRlKSxhKCl9fWZ1bmN0aW9uIG82ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUGd0KGMpe3ZhciBsPWZ1bmN0aW9uIEZndChjLGwpe2lmKCJvYmpl'@;
put 'Y3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg'@;
put 'bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1l'@;
put 'cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgX2VlIGV4dGVuZHMgSjJ7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsYW1vdW50OmR9PWw7c3VwZXIoImluc2VydF9jb2wiKSxvNmUodGhpcywiaW5kZXgiLHZvaWQgMCksbzZlKHRoaXMsImFt'@;
put 'b3VudCIsdm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5hbW91bnQ9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChkLGgsZik9PnthLmRvbmUoKCk9Pm5ldyBfZWUoe2luZGV4OmQsYW1vdW50Omh9KSxmKX0pfXVuZG8obCxh'@;
put 'KXtsLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZUNvbCIsYSksbC5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlckNyZWF0ZUNvbCIsYSksbC5hbHRlcigiaW5zZXJ0X2NvbF9zdGFy'@;
put 'dCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBhNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEhndChjKXt2YXIgbD1mdW5jdGlvbiBOZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv'@;
put 'UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry'@;
put 'aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09'@;
put 'YSxjfWNsYXNzIHdlZSBleHRlbmRzIEoye2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGFtb3VudDpkfT1sO3N1cGVyKCJpbnNlcnRfcm93IiksYTZlKHRoaXMsImluZGV4Iix2b2lkIDApLGE2ZSh0aGlzLCJhbW91bnQiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuYW1vdW50PWR9c3Rh'@;
put 'dGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoZCxoLGYpPT57YS5kb25lKCgpPT5uZXcgd2VlKHtpbmRleDpkLGFtb3VudDpofSksZil9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmNvdW50Um93cygpLGg9bC5nZXRTZXR0aW5ncygpLm1p'@;
put 'blNwYXJlUm93czt0aGlzLmluZGV4Pj1kJiZ0aGlzLmluZGV4LWg8ZCYmKHRoaXMuaW5kZXgtPWgpLGwuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlUm93IixhKSxsLmFsdGVyKCJyZW1vdmVfcm93Iix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wu'@;
put 'YWRkSG9va09uY2UoImFmdGVyQ3JlYXRlUm93IixhKSxsLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIFFIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBWZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gQmd0KGMs'@;
put 'bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0'@;
put 'b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh'@;
put 'bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBDZWUgZXh0ZW5kcyBKMntjb25zdHJ1Y3RvcihsKXtsZXR7Y2hhbmdlczphLHNlbGVjdGVkOmQsY291bnRDb2xzOmgsY291bnRSb3dzOmZ9PWw7c3VwZXIoImNoYW5nZSIpLFFI'@;
put 'KHRoaXMsImNoYW5nZXMiLHZvaWQgMCksUUgodGhpcywic2VsZWN0ZWQiLHZvaWQgMCksUUgodGhpcywiY291bnRDb2xzIix2b2lkIDApLFFIKHRoaXMsImNvdW50Um93cyIsdm9pZCAwKSx0aGlzLmNoYW5nZXM9YSx0aGlzLnNlbGVjdGVkPWQsdGhpcy5jb3VudENvbHM9aCx0aGlzLmNvdW50'@;
put 'Um93cz1mfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVDaGFuZ2UiLGZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1kJiZkLmxlbmd0aDtmJiZkLmZpbmQoRD0+e2NvbnN0WywsWixuZV09RDtyZXR1cm4gWiE9PW5lfSkmJmEuZG9uZSgoKT0+e2NvbnN0'@;
put 'IEQ9ZC5yZWR1Y2UoKG5lLGNlKT0+KG5lLnB1c2goWy4uLmNlXSksbmUpLFtdKTtELmZvckVhY2gobmU9PntuZVsxXT1sLnByb3BUb0NvbChuZVsxXSl9KTtjb25zdCBaPWY+MT90aGlzLmdldFNlbGVjdGVkKCk6W1tEWzBdWzBdLERbMF1bMV1dXTtyZXR1cm4gbmV3IENlZSh7Y2hhbmdlczpE'@;
put 'LHNlbGVjdGVkOlosY291bnRDb2xzOmwuY291bnRDb2xzKCksY291bnRSb3dzOmwuY291bnRSb3dzKCl9KX0saCl9KX11bmRvKGwsYSl7Y29uc3QgZD1nMSh0aGlzLmNoYW5nZXMpO2ZvcihsZXQgdj0wLE09ZC5sZW5ndGg7djxNO3YrKylkW3ZdLnNwbGljZSgzLDEpO2wuYWRkSG9va09uY2Uo'@;
put 'ImFmdGVyQ2hhbmdlIixhKSxsLnNldERhdGFBdENlbGwoZCxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKTtjb25zdCBoPWwuY291bnRSb3dzKCktdGhpcy5jb3VudFJvd3M7aD4wJiZsLmFsdGVyKCJyZW1vdmVfcm93IixudWxsLGgsIlVuZG9SZWRvLnVuZG8iKTtjb25zdCBmPWwuY291bnRD'@;
put 'b2xzKCktdGhpcy5jb3VudENvbHM7Zj4wJiZsLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpJiZsLmFsdGVyKCJyZW1vdmVfY29sIixudWxsLGYsIlVuZG9SZWRvLnVuZG8iKSxsLnNjcm9sbFRvRm9jdXNlZENlbGwoKSxsLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEpfXJl'@;
put 'ZG8obCxhKXtjb25zdCBkPWcxKHRoaXMuY2hhbmdlcyk7Zm9yKGxldCBoPTAsZj1kLmxlbmd0aDtoPGY7aCsrKWRbaF0uc3BsaWNlKDIsMSk7bC5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGEpLGwuc2V0RGF0YUF0Q2VsbChkLG51bGwsbnVsbCwiVW5kb1JlZG8ucmVkbyIpLHRoaXMuc2Vs'@;
put 'ZWN0ZWQmJmwuc2VsZWN0Q2VsbHModGhpcy5zZWxlY3RlZCwhMSwhMSl9fWZ1bmN0aW9uIHM2ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gamd0KGMpe3ZhciBsPWZ1bmN0aW9uIHpndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q'@;
put 'cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp'@;
put 'bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h'@;
put 'LGN9Y2xhc3MgU2VlIGV4dGVuZHMgSjJ7Y29uc3RydWN0b3IobCl7bGV0e2NvbmRpdGlvbnNTdGFjazphLHByZXZpb3VzQ29uZGl0aW9uc1N0YWNrOmR9PWw7c3VwZXIoImZpbHRlciIpLHM2ZSh0aGlzLCJjb25kaXRpb25zU3RhY2siLHZvaWQgMCksczZlKHRoaXMsInByZXZpb3VzQ29uZGl0'@;
put 'aW9uc1N0YWNrIix2b2lkIDApLHRoaXMuY29uZGl0aW9uc1N0YWNrPWEsdGhpcy5wcmV2aW91c0NvbmRpdGlvbnNTdGFjaz1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVGaWx0ZXIiLChkLGgpPT57YS5kb25lKCgpPT5uZXcgU2VlKHtjb25k'@;
put 'aXRpb25zU3RhY2s6ZCxwcmV2aW91c0NvbmRpdGlvbnNTdGFjazpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImZpbHRlcnMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQuaW1wb3J0Q29uZGl0aW9ucyh0aGlzLnByZXZpb3VzQ29uZGl0aW9uc1N0'@;
put 'YWNrKSxkLmZpbHRlcigpfXJlZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLmltcG9ydENvbmRpdGlvbnModGhpcy5jb25kaXRpb25zU3RhY2spLGQuZmlsdGVyKCl9fWNsYXNzIE1lZSBleHRlbmRzIEoy'@;
put 'e2NvbnN0cnVjdG9yKGwpe2xldHtkYXRhOmEsY2VsbFJhbmdlOmR9PWw7c3VwZXIoIm1lcmdlX2NlbGxzIiksZnVuY3Rpb24gVWd0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBaZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gV2d0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4g'@;
put 'Yzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2'@;
put 'YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAs'@;
put 'd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY2VsbFJhbmdlPWQsdGhpcy5kYXRhPWF9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZU1lcmdlQ2VsbHMiLChkLGgpPT57aWYoaClyZXR1cm47Y29u'@;
put 'c3QgZj1kLmdldFRvcFN0YXJ0Q29ybmVyKCksdj1kLmdldEJvdHRvbUVuZENvcm5lcigpLE09bC5nZXREYXRhKGYucm93LGYuY29sLHYucm93LHYuY29sKTthLmRvbmUoKCk9Pm5ldyBNZWUoe2RhdGE6TSxjZWxsUmFuZ2U6ZH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJt'@;
put 'ZXJnZUNlbGxzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCk7Y29uc3QgaD10aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpO2wucG9wdWxhdGVGcm9tQXJyYXkoaC5yb3csaC5jb2wsdGhpcy5kYXRh'@;
put 'LHZvaWQgMCx2b2lkIDAsIk1lcmdlQ2VsbHMiKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlKX19ZnVuY3Rpb24gbDZlKGMsbCxhLGQsaCl7Y29u'@;
put 'c3QgZj1bInZpc3VhbFJvdyIsInZpc3VhbENvbCIsInJvdyIsImNvbCIsInByb3AiXSx2PWYubGVuZ3RoLE09W107cmV0dXJuICRvKGQsaCxEPT57JG8obCxhLFo9Pntjb25zdCBuZT1jLmdldENlbGxNZXRhKFosRCk7aWYoT2JqZWN0LmtleXMobmUpLmxlbmd0aCE9PXYpe2NvbnN0IGNlPU9i'@;
put 'amVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhuZSkuZmlsdGVyKGJlPT57bGV0W0VlXT1iZTtyZXR1cm4hMT09PWYuaW5jbHVkZXMoRWUpfSkpO00ucHVzaChbbmUudmlzdWFsUm93LG5lLnZpc3VhbENvbCxjZV0pfX0pfSksTX1mdW5jdGlvbiAkZyhjLGwsYSl7cmV0dXJuKGw9ZnVu'@;
put 'Y3Rpb24gWWd0KGMpe3ZhciBsPWZ1bmN0aW9uIEdndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBk'@;
put 'KXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkp'@;
put 'aW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgeGVlIGV4dGVuZHMgSjJ7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsaW5kZXhlczpkLGRhdGE6aCxhbW91bnQ6'@;
put 'ZixoZWFkZXJzOnYsY29sdW1uUG9zaXRpb25zOk0scm93UG9zaXRpb25zOkQsZml4ZWRDb2x1bW5zU3RhcnQ6WixyZW1vdmVkQ2VsbE1ldGFzOm5lfT1sO3N1cGVyKCJyZW1vdmVfY29sIiksJGcodGhpcywiaW5kZXgiLHZvaWQgMCksJGcodGhpcywiaW5kZXhlcyIsdm9pZCAwKSwkZyh0aGlz'@;
put 'LCJkYXRhIix2b2lkIDApLCRnKHRoaXMsImFtb3VudCIsdm9pZCAwKSwkZyh0aGlzLCJoZWFkZXJzIix2b2lkIDApLCRnKHRoaXMsImNvbHVtblBvc2l0aW9ucyIsdm9pZCAwKSwkZyh0aGlzLCJyb3dQb3NpdGlvbnMiLHZvaWQgMCksJGcodGhpcywiZml4ZWRDb2x1bW5zU3RhcnQiLHZvaWQg'@;
put 'MCksJGcodGhpcywicmVtb3ZlZENlbGxNZXRhcyIsdm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5pbmRleGVzPWQsdGhpcy5kYXRhPWgsdGhpcy5hbW91bnQ9Zix0aGlzLmhlYWRlcnM9dix0aGlzLmNvbHVtblBvc2l0aW9ucz1NLnNsaWNlKDApLHRoaXMucm93UG9zaXRpb25zPUQuc2xpY2Uo'@;
put 'MCksdGhpcy5maXhlZENvbHVtbnNTdGFydD1aLHRoaXMucmVtb3ZlZENlbGxNZXRhcz1uZX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlUmVtb3ZlQ29sIiwoZCxoLGYsdik9PnthLmRvbmUoKCk9Pntjb25zdCBEPWwuZ2V0U291cmNlRGF0YUFy'@;
put 'cmF5KCksWj0obC5jb3VudENvbHMoKStkKSVsLmNvdW50Q29scygpLG5lPVoraC0xLGNlPVtdLGJlPVtdLEVlPVtdO3JldHVybiAkbyhELmxlbmd0aC0xLEJlPT57Y29uc3QgcWU9W10scnQ9RFtCZV07JG8oWixuZSxwdD0+e3FlLnB1c2gocnRbbC50b1BoeXNpY2FsQ29sdW1uKHB0KV0pfSks'@;
put 'Y2UucHVzaChxZSl9KSwkbyhoLTEsQmU9PntFZS5wdXNoKGwudG9QaHlzaWNhbENvbHVtbihaK0JlKSl9KSxBcnJheS5pc0FycmF5KGwuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzKSYmJG8oaC0xLEJlPT57YmUucHVzaChsLmdldFNldHRpbmdzKCkuY29sSGVhZGVyc1tsLnRvUGh5c2ljYWxD'@;
put 'b2x1bW4oWitCZSldfHxudWxsKX0pLG5ldyB4ZWUoe2luZGV4OlosaW5kZXhlczpFZSxkYXRhOmNlLGFtb3VudDpoLGhlYWRlcnM6YmUsY29sdW1uUG9zaXRpb25zOmwuY29sdW1uSW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkscm93UG9zaXRpb25zOmwucm93SW5kZXhNYXBwZXIu'@;
put 'Z2V0SW5kZXhlc1NlcXVlbmNlKCksZml4ZWRDb2x1bW5zU3RhcnQ6bC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LHJlbW92ZWRDZWxsTWV0YXM6bDZlKGwsMCxsLmNvdW50Um93cygpLFosbmUpfSl9LHYpfSl9dW5kbyhsLGEpe2wuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNT'@;
put 'dGFydD10aGlzLmZpeGVkQ29sdW1uc1N0YXJ0O2NvbnN0IGg9dGhpcy5pbmRleGVzLnNsaWNlKDApLnNvcnQoKSxmPShuZSxjZSxiZSk9PmJlW3RoaXMuaW5kZXhlcy5pbmRleE9mKGhbY2VdKV0sdj10aGlzLmRhdGEubGVuZ3RoLE09W107Zm9yKGxldCBuZT0wO25lPHY7bmUrKylNLnB1c2go'@;
put 'eXModGhpcy5kYXRhW25lXSxmKSk7Y29uc3QgRD15cyh0aGlzLmhlYWRlcnMsZiksWj1bXTtsLmNvbHVtbkluZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmNvbHVtblBvc2l0aW9ucyksbC5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsbC50b1Zpc3VhbENvbHVtbih0aGlzLmlu'@;
put 'ZGV4ZXNbMF0pLHRoaXMuaW5kZXhlcy5sZW5ndGgsIlVuZG9SZWRvLnVuZG8iKSxsLmJhdGNoRXhlY3V0aW9uKCgpPT57bC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dQb3NpdGlvbnMpLGwuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRo'@;
put 'aXMuY29sdW1uUG9zaXRpb25zKX0sITApLFluKGwuZ2V0U291cmNlRGF0YUFycmF5KCksKG5lLGNlKT0+e1luKGgsKGJlLEVlKT0+e25lW2JlXT1NW2NlXVtFZV0sWi5wdXNoKFtjZSxiZSxuZVtiZV1dKX0pfSksdHlwZW9mIHRoaXMuaGVhZGVyczwidSImJlluKEQsKG5lLGNlKT0+e2wuZ2V0'@;
put 'U2V0dGluZ3MoKS5jb2xIZWFkZXJzW2hbY2VdXT1uZX0pLHRoaXMucmVtb3ZlZENlbGxNZXRhcy5mb3JFYWNoKG5lPT57bGV0W2NlLGJlLEVlXT1uZTtsLnNldENlbGxNZXRhT2JqZWN0KGNlLGJlLEVlKX0pLGwuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksbC5zZXRTb3VyY2VE'@;
put 'YXRhQXRDZWxsKFosbnVsbCxudWxsLCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlQ29sIixhKSxsLmFsdGVyKCJyZW1vdmVfY29sIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIHd3KGMsbCxhKXty'@;
put 'ZXR1cm4obD1mdW5jdGlvbiAkZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gS2d0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0'@;
put 'IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/'@;
put 'bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBFZWUgZXh0ZW5kcyBKMntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxkYXRhOmQsZml4ZWRS'@;
put 'b3dzQm90dG9tOmgsZml4ZWRSb3dzVG9wOmYscm93SW5kZXhlc1NlcXVlbmNlOnYscmVtb3ZlZENlbGxNZXRhczpNfT1sO3N1cGVyKCJyZW1vdmVfcm93Iiksd3codGhpcywiaW5kZXgiLHZvaWQgMCksd3codGhpcywiZGF0YSIsdm9pZCAwKSx3dyh0aGlzLCJmaXhlZFJvd3NCb3R0b20iLHZv'@;
put 'aWQgMCksd3codGhpcywiZml4ZWRSb3dzVG9wIix2b2lkIDApLHd3KHRoaXMsInJvd0luZGV4ZXNTZXF1ZW5jZSIsdm9pZCAwKSx3dyh0aGlzLCJyZW1vdmVkQ2VsbE1ldGFzIix2b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmRhdGE9ZCx0aGlzLmZpeGVkUm93c0JvdHRvbT1oLHRoaXMuZml4'@;
put 'ZWRSb3dzVG9wPWYsdGhpcy5yb3dJbmRleGVzU2VxdWVuY2U9dix0aGlzLnJlbW92ZWRDZWxsTWV0YXM9TX1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IiwoZCxoLGYsdik9PnthLmRvbmUoKCk9Pntjb25zdCBEPWwudG9QaHlz'@;
put 'aWNhbFJvdyhkKSxaPUQraC0xLG5lPWcxKGwuZ2V0U291cmNlRGF0YShELDAsRCtoLTEsbC5jb3VudFNvdXJjZUNvbHMoKS0xKSk7cmV0dXJuIG5ldyBFZWUoe2luZGV4OkQsZGF0YTpuZSxmaXhlZFJvd3NCb3R0b206bC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbSxmaXhlZFJvd3NU'@;
put 'b3A6bC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c1RvcCxyb3dJbmRleGVzU2VxdWVuY2U6bC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSxyZW1vdmVkQ2VsbE1ldGFzOmw2ZShsLEQsWiwwLGwuY291bnRDb2xzKCktMSl9KX0sdil9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdl'@;
put 'dFNldHRpbmdzKCksaD1bXTtkLmZpeGVkUm93c0JvdHRvbT10aGlzLmZpeGVkUm93c0JvdHRvbSxkLmZpeGVkUm93c1RvcD10aGlzLmZpeGVkUm93c1RvcCx0aGlzLmRhdGEuZm9yRWFjaCgoZix2KT0+e09iamVjdC5rZXlzKGYpLmZvckVhY2goTT0+e2NvbnN0IEQ9cGFyc2VJbnQoTSwxMCk7'@;
put 'aC5wdXNoKFt0aGlzLmluZGV4K3YsaXNOYU4oRCk/TTpELGZbTV1dKX0pfSksbC5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dJbmRleGVzU2VxdWVuY2UpLGwuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGwudG9WaXN1YWxSb3codGhpcy5pbmRleCksdGhpcy5k'@;
put 'YXRhLmxlbmd0aCwiVW5kb1JlZG8udW5kbyIpLGwucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93SW5kZXhlc1NlcXVlbmNlKSx0aGlzLnJlbW92ZWRDZWxsTWV0YXMuZm9yRWFjaChmPT57bGV0W3YsTSxEXT1mO2wuc2V0Q2VsbE1ldGFPYmplY3QodixNLEQpfSks'@;
put 'bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnNldFNvdXJjZURhdGFBdENlbGwoaCxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKX1yZWRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVSb3ciLGEpLGwuYWx0ZXIoInJlbW92ZV9yb3ciLGwudG9WaXN1YWxSb3co'@;
put 'dGhpcy5pbmRleCksdGhpcy5kYXRhLmxlbmd0aCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBjNmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHFndChjKXt2YXIgbD1mdW5jdGlvbiBYZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s'@;
put 'LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi'@;
put 'c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb'@;
put 'bF09YSxjfWNsYXNzIFRlZSBleHRlbmRzIEoye2NvbnN0cnVjdG9yKGwpe2xldHtyb3dzOmEsZmluYWxJbmRleDpkfT1sO3N1cGVyKCJyb3dfbW92ZSIpLGM2ZSh0aGlzLCJyb3dzIix2b2lkIDApLGM2ZSh0aGlzLCJmaW5hbFJvd0luZGV4Iix2b2lkIDApLHRoaXMucm93cz1hLnNsaWNlKCks'@;
put 'dGhpcy5maW5hbFJvd0luZGV4PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZVJvd01vdmUiLChkLGgpPT57ITEhPT1kJiZhLmRvbmUoKCk9Pm5ldyBUZWUoe3Jvd3M6ZCxmaW5hbEluZGV4Omh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdl'@;
put 'dFBsdWdpbigibWFudWFsUm93TW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksQ1EodGhpcy5yb3dzLHRoaXMuZmluYWxSb3dJbmRleCxsLnJvd0luZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaChmPT57bGV0e2Zyb206dix0'@;
put 'bzpNfT1mO3Y8TSYmKE0tPTEpLGQubW92ZVJvdyhNLHYpfSksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Um93cyh0aGlzLnJvd3NbMF0sdGhpcy5yb3dzWzBdK3RoaXMucm93cy5sZW5ndGgtMSl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbFJvd01v'@;
put 'dmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubW92ZVJvd3ModGhpcy5yb3dzLnNsaWNlKCksdGhpcy5maW5hbFJvd0luZGV4KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RSb3dzKHRoaXMuZmluYWxSb3dJbmRleCx0aGlzLmZpbmFsUm93SW5k'@;
put 'ZXgrdGhpcy5yb3dzLmxlbmd0aC0xKX19Y2xhc3MgQWVlIGV4dGVuZHMgSjJ7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSYW5nZTphfT1sO3N1cGVyKCJ1bm1lcmdlX2NlbGxzIiksZnVuY3Rpb24gSmd0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBRZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gZTV0'@;
put 'KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi'@;
put 'QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws'@;
put 'e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY2VsbFJhbmdlPWF9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyVW5tZXJnZUNl'@;
put 'bGxzIiwoZCxoKT0+e2h8fGEuZG9uZSgoKT0+bmV3IEFlZSh7Y2VsbFJhbmdlOmR9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKX1y'@;
put 'ZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC51bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApLGwucmVuZGVyKCl9fWZ1bmN0aW9uIGtlZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gaTV0'@;
put 'KGMpe3ZhciBsPWZ1bmN0aW9uIG81dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gRGVlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0'@;
put 'aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1Nby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5kbyIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVuZG8iKSxNby5nZXRT'@;
put 'aW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUmVkbyIpLE1vLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJlZG8iKTtjb25zdCBkNmU9bmV3IFNldDt2YXIgZU49bmV3IFdlYWtTZXQ7Y2xhc3MgbDV0IGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuInVu'@;
put 'ZG9SZWRvIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxZTN9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBuNXQoYyxsKXsoZnVuY3Rpb24gcjV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsZU4pLGtlZSh0aGlzLCJkb25lQWN0aW9ucyIsW10pLGtlZSh0aGlzLCJ1bmRvbmVBY3Rpb25zIixbXSksa2VlKHRo'@;
put 'aXMsImlnbm9yZU5ld0FjdGlvbnMiLCExKSxmdW5jdGlvbiB0NXQoYyxsKXtbdmVlLGJlZSx5ZWUsX2VlLHdlZSxDZWUsU2VlLE1lZSx4ZWUsRWVlLFRlZSxBZWVdLmZvckVhY2goYT0+YS5zdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGMsbCkpfShsLHRoaXMpfWlzRW5hYmxlZCgpe3JldHVybiEh'@;
put 'dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS51bmRvfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hd'@;
put 'PWFyZ3VtZW50c1toXTtyZXR1cm4gRGVlKGVOLGwsYzV0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksRGVlKGVOLHRoaXMsdTV0KS5jYWxsKHRoaXMpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRo'@;
put 'aXMuY2xlYXIoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxEZWUoZU4sdGhpcyxkNXQpLmNhbGwodGhpcyl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9s'@;
put 'L01ldGEiLCJ6Il1dLGNhbGxiYWNrOigpPT57dGhpcy51bmRvKCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJ5Il0sWyJDb250cm9sL01ldGEiLCJTaGlmdCIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnJlZG8oKX19XSx7cnVuT25seUlmOmY9PiFmLmFsdEtleSxncm91cDoidW5kb1Jl'@;
put 'ZG8ifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKCJ1bmRvUmVkbyIpfWRvbmUobCxhKXtpZih0aGlzLmlnbm9yZU5ld0FjdGlvbnN8fCJVbmRvUmVkby51bmRvIj09'@;
put 'PWF8fCJVbmRvUmVkby5yZWRvIj09PWF8fCJhdXRvIj09PWEpcmV0dXJuO2NvbnN0IGg9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsaCxhKSlyZXR1cm47Y29uc3Qgdj1sKCksTT10aGlzLnVuZG9uZUFj'@;
put 'dGlvbnMuc2xpY2UoKTt0aGlzLmRvbmVBY3Rpb25zLnB1c2godiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixoLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsTSksdGhpcy51bmRvbmVB'@;
put 'Y3Rpb25zLmxlbmd0aD0wLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsTSx0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKSl9dW5kbygpe2lmKCF0aGlzLmlzVW5kb0F2YWlsYWJsZSgpKXJldHVybjtjb25zdCBsPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlz'@;
put 'LmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixsKTtjb25zdCBhPXRoaXMuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixsLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSk7Y29uc3QgZD1nMShhKTtpZighMT09PXRo'@;
put 'aXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvIixkKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO2NvbnN0IGY9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsZiksYS51bmRvKHRoaXMuaG90LCgpPT57'@;
put 'dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMudW5kb25lQWN0aW9ucy5wdXNoKGEpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixmLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbmRvIixkKX1yZWRvKCl7'@;
put 'aWYoIXRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsbCk7Y29uc3QgYT10aGlzLnVuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5ob3QucnVuSG9va3Mo'@;
put 'ImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixsLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBkPWcxKGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG8iLGQpKXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgZj10aGlzLmRvbmVBY3Rpb25z'@;
put 'LnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsZiksYS5yZWRvKHRoaXMuaG90LCgpPT57dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMuZG9uZUFjdGlvbnMucHVzaChhKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuZG9TdGFja0NoYW5n'@;
put 'ZSIsZix0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG8iLGQpfWlzVW5kb0F2YWlsYWJsZSgpe3JldHVybiB0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD4wfWlzUmVkb0F2YWlsYWJsZSgpe3JldHVybiB0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3Ro'@;
put 'PjB9Y2xlYXIoKXt0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MH1kZXN0cm95KCl7dGhpcy5jbGVhcigpLHRoaXMuZG9uZUFjdGlvbnM9bnVsbCx0aGlzLnVuZG9uZUFjdGlvbnM9bnVsbCxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGM1dChj'@;
put 'LGwpeyJsb2FkRGF0YSI9PT1sJiZ0aGlzLmNsZWFyKCl9ZnVuY3Rpb24gdTV0KCl7Y29uc3QgYz1sPT57ZDZlLmhhcyhsKXx8KGlsKGdsYFRoZSAiJHtsfSIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIGl0IHdpbGwgYmUgcmVtb3ZlZFx4MjAKICAgICAgICAgIGZyb20gdGhlIENvcmUgQVBJ'@;
put 'IGluIHRoZSBmdXR1cmUuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCBmcm9tIHRoZSBVbmRvUmVkbyBwbHVnaW5ceDIwCiAgICAgICAgICAoZS5nLiBcYGhvdEluc3RhbmNlLmdldFBsdWdpbigidW5kb1JlZG8iKS4ke2x9KClcYCkuYCksZDZlLmFkZChsKSl9O3RoaXMuaG90LnVuZG89KCk9Pntj'@;
put 'KCJ1bmRvIiksdGhpcy51bmRvKCl9LHRoaXMuaG90LnJlZG89KCk9PntjKCJyZWRvIiksdGhpcy5yZWRvKCl9LHRoaXMuaG90LmlzVW5kb0F2YWlsYWJsZT0oKT0+KGMoImlzVW5kb0F2YWlsYWJsZSIpLHRoaXMuaXNVbmRvQXZhaWxhYmxlKCkpLHRoaXMuaG90LmlzUmVkb0F2YWlsYWJsZT0o'@;
put 'KT0+KGMoImlzUmVkb0F2YWlsYWJsZSIpLHRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpLHRoaXMuaG90LmNsZWFyVW5kbz0oKT0+e2MoImNsZWFyIiksdGhpcy5jbGVhcigpfSx0aGlzLmhvdC51bmRvUmVkbz10aGlzfWZ1bmN0aW9uIGQ1dCgpe2RlbGV0ZSB0aGlzLmhvdC51bmRvLGRlbGV0ZSB0'@;
put 'aGlzLmhvdC5yZWRvLGRlbGV0ZSB0aGlzLmhvdC5pc1VuZG9BdmFpbGFibGUsZGVsZXRlIHRoaXMuaG90LmlzUmVkb0F2YWlsYWJsZSxkZWxldGUgdGhpcy5ob3QuY2xlYXJVbmRvLGRlbGV0ZSB0aGlzLmhvdC51bmRvUmVkb31mdW5jdGlvbiB0TigpeyhmdW5jdGlvbiBQaXQoKXtIZChrXyks'@;
put 'SGQoTFgpLEhkKFJwZSksSGQoQnBlKSxIZChqcGUpLEhkKEFYKSxIZCh6cGUpLEhkKFVwZSksSGQoV3BlKSxIZChyOSksSGQoWXBlKX0pKCksZnVuY3Rpb24gaWF0KCl7SWgoSV8pLEloKG9UKSxJaChaWCksSWgoVVgpLEloKFlYKSxJaCh6WCksSWgodEopLEloKG5KKSxJaChySiksSWgoRWcp'@;
put 'LEloKGlKKX0oKSxmdW5jdGlvbiBoYXQoKXtaNyhsVCksWjcob0opLFo3KCRQKSxaNyhhSiksWjcoS1ApfSgpLGZ1bmN0aW9uIFNhdCgpe1oyKGZhdCksWjIocGF0KSxaMihtYXQpLFoyKHZhdCksWjIoYmF0KSxaMih5YXQpLFoyKF9hdCksWjIod2F0KSxaMihTcGUpLFoyKENhdCl9KCksZnVu'@;
put 'Y3Rpb24gaDV0KCl7UHModVQpLFBzKG5zdCksUHMoZlQpLFBzKFBzdCksUHMoVXN0KSxQcyhYNGUpLFBzKFZsdCksUHMoZGN0KSxQcyhrRiksUHMoUnV0KSxQcyhpMHQpLFBzKGgwdCksUHMoSEYpLFBzKFgwdCksUHMoS2R0KSxQcyhEaHQpLFBzKHIydCksUHMoZzJ0KSxQcyhUMnQpLFBzKGoy'@;
put 'dCksUHMoWDJ0KSxQcyhiZnQpLFBzKFRmdCksUHMoZDN0KSxQcyhVM3QpLFBzKCQzdCksUHMod3B0KSxQcyhkNHQpLFBzKFA0dCksUHMoWjR0KSxQcyhpZ3QpLFBzKGZndCksUHMoTWd0KSxQcyhsNXQpfSgpfWxldCBRMj0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG9dfSl9fXJldHVybiBjfSkoKSxDdz0oKCk9PntjbGFzcyBje25nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOlt5VyxhaGVdLGltcG9ydHM6W0xvLEljLGpjLEIwLFEyXX0pfX1yZXR1cm4gY30pKCksU0E9KCgpPT57Y2xh'@;
put 'c3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0pfX1yZXR1cm4gY30pKCksaDZlPSgoKT0+e2NsYXNzIGN7'@;
put 'c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxCMCxMbyxJY119KX19cmV0dXJuIGN9KSgpLFc5PSgoKT0+e2NsYXNz'@;
put 'IGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxJYyxCMCxqYyxDdyxTQSxRMixoNmVdfSl9fXJldHVybiBjfSko'@;
put 'KTt2YXIgUmVlLExlZSxPZWUsUGVlLEZlZSxLZz1fKDU5NDgpO2NsYXNzIEllZXtjb25zdHJ1Y3Rvcigpe3RoaXMucXVldWU9W119YWRkVG9RdWV1ZShsKXt0aGlzLnF1ZXVlLnB1c2goLi4ubCl9fXROKCksZnVuY3Rpb24gZjV0KGMpe2NvbnN0IGw9ISh0eXBlb2Ygd2luZG93PiJ1IikmJndp'@;
put 'bmRvdy5qUXVlcnk7bCYmKGwuZm4uaGFuZHNvbnRhYmxlPWZ1bmN0aW9uKGEpe2NvbnN0IGQ9dGhpcy5maXJzdCgpO2xldCBmLGg9ZC5kYXRhKCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpe2NvbnN0IFo9YXx8e307cmV0dXJuIGg/aC51cGRhdGVTZXR0aW5ncyhaKToo'@;
put 'aD1uZXcgYy5Db3JlKGRbMF0sWiksZC5kYXRhKCJoYW5kc29udGFibGUiLGgpLGguaW5pdCgpKSxkfWlmKGgpe2lmKCEodHlwZW9mIGhbYV08InUiKSl0aHJvdyBuZXcgRXJyb3IoYEhhbmRzb250YWJsZSBkbyBub3QgcHJvdmlkZSBhY3Rpb246ICR7YX1gKTtmb3IodmFyIHY9YXJndW1lbnRz'@;
put 'Lmxlbmd0aCxNPW5ldyBBcnJheSh2PjE/di0xOjApLEQ9MTtEPHY7RCsrKU1bRC0xXT1hcmd1bWVudHNbRF07Zj1oW2FdLmNhbGwoaCwuLi5NKSwiZGVzdHJveSI9PT1hJiZkLnJlbW92ZURhdGEoKX1yZXR1cm4gZn0pfShpcyksaXMuX19HaG9zdFRhYmxlPXNKLGlzLl9nZXRMaXN0ZW5lcnND'@;
put 'b3VudGVyPWZ1bmN0aW9uIGpxZSgpe3JldHVybiBXT30saXMuX2dldFJlZ2lzdGVyZWRNYXBzQ291bnRlcj1mdW5jdGlvbiBXZXQoKXtyZXR1cm4gTkt9LGlzLkV2ZW50TWFuYWdlcj1OMjtjb25zdCBwNXQ9W0ksTyxVLFksRix3LHksSyxQLGcseixMXSxnNXQ9W0IsTl07aXMuaGVscGVyPXt9'@;
put 'LGlzLmRvbT17fSxZbihwNXQsYz0+e1luKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKGlzLmhlbHBlcltsXT1jW2xdKX0pfSksWW4oZzV0LGM9PntZbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjKSxsPT57Il8iIT09bC5jaGFyQXQo'@;
put 'MCkmJihpcy5kb21bbF09Y1tsXSl9KX0pLGlzLmNlbGxUeXBlcz1udWxsIT09KFJlZT1pcy5jZWxsVHlwZXMpJiZ2b2lkIDAhPT1SZWU/UmVlOnt9LFluKGVudCgpLGM9Pntpcy5jZWxsVHlwZXNbY109X1goYyl9KSxpcy5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZT1aMixpcy5jZWxsVHlw'@;
put 'ZXMuZ2V0Q2VsbFR5cGU9X1gsaXMuZWRpdG9ycz1udWxsIT09KExlZT1pcy5lZGl0b3JzKSYmdm9pZCAwIT09TGVlP0xlZTp7fSxZbihPcWUoKSxjPT57aXMuZWRpdG9yc1tgJHtwMShjKX1FZGl0b3JgXT1aTyhjKX0pLGlzLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3I9SGQsaXMuZWRpdG9ycy5n'@;
put 'ZXRFZGl0b3I9Wk8saXMucmVuZGVyZXJzPW51bGwhPT0oT2VlPWlzLnJlbmRlcmVycykmJnZvaWQgMCE9PU9lZT9PZWU6e30sWW4oaFhlKCksYz0+e2NvbnN0IGw9Sk8oYyk7ImJhc2UiPT09YyYmKGlzLnJlbmRlcmVycy5jZWxsRGVjb3JhdG9yPWwpLGlzLnJlbmRlcmVyc1tgJHtwMShjKX1S'@;
put 'ZW5kZXJlcmBdPWx9KSxpcy5yZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcj1JaCxpcy5yZW5kZXJlcnMuZ2V0UmVuZGVyZXI9Sk8saXMudmFsaWRhdG9ycz1udWxsIT09KFBlZT1pcy52YWxpZGF0b3JzKSYmdm9pZCAwIT09UGVlP1BlZTp7fSxZbihnWGUoKSxjPT57aXMudmFsaWRhdG9yc1tg'@;
put 'JHtwMShjKX1WYWxpZGF0b3JgXT1RJChjKX0pLGlzLnZhbGlkYXRvcnMucmVnaXN0ZXJWYWxpZGF0b3I9WjcsaXMudmFsaWRhdG9ycy5nZXRWYWxpZGF0b3I9USQsaXMucGx1Z2lucz1udWxsIT09KEZlZT1pcy5wbHVnaW5zKSYmdm9pZCAwIT09RmVlP0ZlZTp7fSxZbihKJCgpLGM9Pntpcy5w'@;
put 'bHVnaW5zW2NdPURFKGMpfSksaXMucGx1Z2luc1tgJHtwMShGcy5QTFVHSU5fS0VZKX1QbHVnaW5gXT1Gcyxpcy5wbHVnaW5zLnJlZ2lzdGVyUGx1Z2luPVBzLGlzLnBsdWdpbnMuZ2V0UGx1Z2luPURFO2NvbnN0IEhlZT1pcyxOZWU9KGMsbCxhKT0+e2ZvcihsZXQgZCBvZiBjKXtjb25zdCBo'@;
put 'PWwuZmluZCh2PT52LmRhdGE9PT1kLk5BTUUpLGY9YS52YXJzW2QuTkFNRV07ZiYmKGQuVFlQRT1bIkRBVEUiLCJEQVRFVElNRSIsIlRJTUUiXS5pbmNsdWRlcyhkLkREVFlQRSk/Im51bSI6Zi50eXBlKSxoJiZkLkRFU0MmJihoLmRlc2M9ZC5ERVNDKSxoJiZmLmxlbmd0aCYmKGgubGVuZ3Ro'@;
put 'PXBhcnNlSW50KGYubGVuZ3RoKSksaCYmZC5DTFNfUlVMRSYmKGguY2xzUnVsZT1kLkNMU19SVUxFKX1yZXR1cm4gbH07ZnVuY3Rpb24gVmVlKGMsbCl7aWYobnVsbD09Y3x8IWlzTmFOKGMpJiZpc0Zpbml0ZShjKSlyZXR1cm4gbCYmbCghMCksITA7Y29uc3QgYT0oMCxLZy5pc1NwZWNpYWxN'@;
put 'aXNzaW5nKShjKTtyZXR1cm4gbCYmbChhKSxhfWNvbnN0IGY2ZT17Q0FTRTooYyxsKT0+e3N3aXRjaChsKXtjYXNlIlVQQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b1VwcGVy'@;
put 'Q2FzZSgpO2Nhc2UiTE9XQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpfXJldHVybiEwfSxNSU5WQUw6KGMsbCk9Pntjb25zdCBhPVZlZShjKSxkPXBhcnNl'@;
put 'RmxvYXQoYyk7cmV0dXJuKCFhfHwhaXNOYU4oZCkpJiZkPj1OdW1iZXIobC50b1N0cmluZygpKX0sTUFYVkFMOihjLGwpPT57Y29uc3QgYT1WZWUoYyksZD1wYXJzZUZsb2F0KGMpO3JldHVybiEoIWF8fCFpc05hTihkKSl8fGQ8PU51bWJlcihsLnRvU3RyaW5nKCkpfSxOT1ROVUxMOihjLGwp'@;
put 'PT5udWxsIT1jJiZjLnRvU3RyaW5nKCkubGVuZ3RoPjB9O3ZhciBCZWU9Xyg3ODM3NSk7Y2xhc3MgXzV0IGV4dGVuZHMgSGVlLmVkaXRvcnMuQXV0b2NvbXBsZXRlRWRpdG9ye2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKX1v'@;
put 'cGVuKGwpe3N1cGVyLm9wZW4obCksdGhpcy5pc0NlbGxOdW1lcmljKCk/dGhpcy5odENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJudW1lcmljTGlzdGJveCIpOnRoaXMuaHRDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibnVtZXJpY0xpc3Rib3giKX1pc0NlbGxOdW1lcmljKCl7cmV0dXJu'@;
put 'IHRoaXMuY2VsbFByb3BlcnRpZXM/LmNsYXNzTmFtZT8uaW5jbHVkZXMoImh0TnVtZXJpYyIpfX1jbGFzcyBwNmV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3RoaXMucnVsZXM9W10sdGhpcy5kcXJ1bGVzPVtdLHRoaXMuZHFkYXRhPVtdLHRoaXMuaGlkZGVuQ29sdW1ucz1bXSx0aGlzLnBy'@;
put 'aW1hcnlLZXlzPVtdLHRoaXMuZXhlY3V0ZUhvdFZhbGlkYXRvcj0oTSxELFopPT57Y29uc3QgbmU9ey4uLk0sdmFsaWRhdG9yOnZvaWQgMCxjb3JyZWN0Rm9ybWF0OiExLHJvdzowLGNvbDowLGluc3RhbmNlOm5ldyBIZWUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikse30pLHZpc3Vh'@;
put 'bFJvdzowLHZpc3VhbENvbDowLHByb3A6MH07bnVsbD09RCYmKEQ9IiIpLE0mJk0udmFsaWRhdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTS52YWxpZGF0b3I/TS52YWxpZGF0b3IuY2FsbChuZSxELGNlPT57WiYmWihjZSl9KTpaJiZaKCExKX0sdGhpcy5yZWdpc3RlckN1c3RvbUVkaXRvcnMo'@;
put 'KSx0aGlzLnNhc3BhcmFtcz1sLHRoaXMuaG90SW5zdGFuY2U9dix0aGlzLnJ1bGVzPShjPT57dHJ5e3JldHVybiBKU09OLnBhcnNlKGBbJHtjfV1gKX1jYXRjaHtyZXR1cm5bXX19KShsLkNPTFRZUEUpLHRoaXMucnVsZXM9TmVlKGQsdGhpcy5ydWxlcyxhKSx0aGlzLnJ1bGVzPShjPT57aWYo'@;
put 'IUJlZVt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSlyZXR1cm4gYztmb3IobGV0IGEgb2YgYykibnVtZXJpYyI9PT1hLnR5cGUmJihhLm51bWVyaWNGb3JtYXQ9e3BhdHRlcm46IjAsMCIsY3VsdHVyZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSk7cmV0dXJuIGN9KSh0aGlzLnJ1bGVz'@;
put 'KSx0aGlzLmRxcnVsZXM9aCx0aGlzLmRxZGF0YT1mLHRoaXMucHJpbWFyeUtleXM9bC5QSy5zcGxpdCgiICIpLHRoaXMudXBkYXRlRHFEYXRhKCksdGhpcy5zZXR1cFZhbGlkYXRpb25zKCl9cmVnaXN0ZXJDdXN0b21FZGl0b3JzKCl7SGVlLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3IoImF1dG9j'@;
put 'b21wbGV0ZS5jdXN0b20iLF81dCl9Z2V0UnVsZXMoKXtyZXR1cm4gdGhpcy5ydWxlc31nZXRSdWxlKGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgobCk7cmV0dXJuIHRoaXMucnVsZXNbYV19Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiB0aGlzLmhpZGRlbkNvbHVtbnN9dXBkYXRlUnVs'@;
put 'ZShsLGEpe2xldCBkPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXNbZF09ey4uLnRoaXMucnVsZXNbZF0sLi4uYX19cmVtb3ZlUnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXMuc3BsaWNlKGEsMSl9Z2V0RHFEZXRhaWxzKGwpe3JldHVybiBsP3Ro'@;
put 'aXMuZHFydWxlcy5maWx0ZXIoYT0+YS5CQVNFX0NPTD09PWwpOnRoaXMuZHFydWxlc31pc0RxQ29sKGwpe3JldHVybiEhdGhpcy5kcXJ1bGVzLmZpbmQoYT0+YS5CQVNFX0NPTD09PWwpfWhhc0RxUnVsZXMobCxhLGQ9ITEpe3JldHVybiBkP3RoaXMuZHFydWxlcy5maWx0ZXIoaD0+aC5CQVNF'@;
put 'X0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZUEUpKS5sZW5ndGg9PT1hLmxlbmd0aDohIXRoaXMuZHFydWxlcy5maW5kKGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSl9Z2V0RHFEcm9wZG93blNvdXJjZShsKXtsZXQgYT1bXTtyZXR1cm4gdGhpcy5kcXJ1'@;
put 'bGVzLmZvckVhY2goZD0+e2QuQkFTRV9DT0wudG9TdHJpbmcoKT09PWwuZGF0YSYmbC5kYXRhLnRvU3RyaW5nKCkmJlsiSEFSRFNFTEVDVCIsIlNPRlRTRUxFQ1QiLCJIQVJEU0VMRUNUX0hPT0siLCJTT0ZUU0VMRUNUX0hPT0siXS5pbmNsdWRlcyhkLlJVTEVfVFlQRS50b1N0cmluZygpKSYm'@;
put 'dGhpcy5kcWRhdGEuZmlsdGVyKGg9PmguQkFTRV9DT0w9PT1kLkJBU0VfQ09MKS5mb3JFYWNoKGg9PnthLnB1c2gobC50eXBlJiYibnVtZXJpYyI9PT1sLnR5cGU/TnVtYmVyKGguUlVMRV9EQVRBKTpoLlJVTEVfREFUQSl9KX0pLGF9dXBkYXRlRHFEYXRhKCl7dGhpcy5kcWRhdGEubGVuZ3Ro'@;
put 'PjAmJihjPT57Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5kcWRhdGEuZm9yRWFjaChhPT57bC5pbmNsdWRlcyhhLkJBU0VfQ09MKXx8bC5wdXNoKGEuQkFTRV9DT0wpfSksbH0pKCkuZm9yRWFjaChhPT57bGV0IGQ9ITE7dGhpcy5kcXJ1bGVzLmxlbmd0aD4wJiZ0aGlzLmRxcnVsZXMuZm9yRWFj'@;
put 'aChoPT57aC5CQVNFX0NPTD09PWEmJigiU09GVFNFTEVDVCI9PT1oLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1QiPT09aC5SVUxFX1RZUEUpJiYoZD0hMCl9KSxkfHx0aGlzLmRxcnVsZXMucHVzaCh7QkFTRV9DT0w6YSxSVUxFX1RZUEU6IlNPRlRTRUxFQ1QiLFJVTEVfVkFMVUU6YSxYOjF9KX0p'@;
put 'fXNldHVwVmFsaWRhdGlvbnMoKXtmb3IobGV0IGw9MDtsPHRoaXMucnVsZXMubGVuZ3RoO2wrKyl7Y29uc3QgYT10aGlzLnJ1bGVzW2xdLmRhdGF8fCIiO2lmKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YSl7aWYodGhpcy5pc0RxQ29sKGEpKXtsZXQgaD10aGlzLmdldERx'@;
put 'RHJvcGRvd25Tb3VyY2UodGhpcy5ydWxlc1tsXSk7aC5sZW5ndGg+MCYmKHRoaXMucnVsZXNbbF0uc291cmNlPWgsdGhpcy5ydWxlc1tsXS50eXBlPSJhdXRvY29tcGxldGUiLHRoaXMucnVsZXNbbF0uZWRpdG9yPSJhdXRvY29tcGxldGUuY3VzdG9tIix0aGlzLnJ1bGVzW2xdLmZpbHRlcj0h'@;
put 'MSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJTT0ZUU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFSRFNFTEVDVCJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1RfSE9PSyJdKSYm'@;
put 'KHRoaXMucnVsZXNbbF0uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxFQ1RfSE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIk5PVE5VTEwiXSkmJih0aGlzLnJ1bGVzW2xdLmFsbG93RW1wdHk9ITEpfSJ0cnVlIj09PXRo'@;
put 'aXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdCYmKHRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdD0hMCksdGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKHRoaXMsbCksdGhpcy5zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpfX10aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcmJnRoaXMuaGlkZGVuQ29s'@;
put 'dW1ucy5wdXNoKDApfXNldERlZmF1bHRWYWxpZGF0b3IobCxhKXt0aGlzLnJ1bGVzW2FdLnZhbGlkYXRvcj1mdW5jdGlvbihkLGgpe2NvbnN0IGY9bC5ydWxlc1thXS5kYXRhPy50b1N0cmluZygpLHY9bC5ydWxlc1thXS50eXBlfHwiIjtsZXQgTT1udWxsO3JldHVybiJhdXRvY29tcGxldGUi'@;
put 'IT09dGhpcy5lZGl0b3ImJiJhdXRvY29tcGxldGUuY3VzdG9tIiE9PXRoaXMuZWRpdG9yfHwobC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IoImF1dG9jb21wbGV0ZSIpLmNhbGwodGhpcyxkLEQ9PntNPUR9KSxNKT8obC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IodikuY2FsbCh0aGlzLGQs'@;
put 'RD0+e009RH0pLE0/bC5sZW5ndGhDaGVjayhkLGwucnVsZXNbYV0ubGVuZ3RoLHYpP2wuaXNEcUNvbChmfHwiIikmJiEoKGMsbCk9Pntmb3IobGV0IGEgb2YgYylpZihmNmVbYS5SVUxFX1RZUEVdJiYhZjZlW2EuUlVMRV9UWVBFXShsLGEuUlVMRV9WQUxVRSkpcmV0dXJuIGNvbnNvbGUud2Fy'@;
put 'bihgRFEgSW52YWxpZCBSZWFzb246ICR7YS5SVUxFX1RZUEV9XG5WYWx1ZTogJHtsfSlcblJ1bGUgVmFsdWU6ICR7YS5SVUxFX1ZBTFVFLmxlbmd0aD4wJiYiICIhPT1hLlJVTEVfVkFMVUU/YS5SVUxFX1ZBTFVFOiJOb3QgZGVmaW5lZCJ9YCksITE7cmV0dXJuITB9KShsLmdldERxRGV0YWls'@;
put 'cyhmfHwiIiksZCk/KGNvbnNvbGUud2FybihgRFEgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpOnZvaWQgaCghMCk6KGNvbnNvbGUud2FybihgTGVuZ3RoIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKTooY29u'@;
put 'c29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKSk6KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIChhdXRvY29tcGxldGUpIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSl9fWxl'@;
put 'bmd0aENoZWNrKGwsYSxkKXtpZigoMCxLZy5pc1NwZWNpYWxNaXNzaW5nKShsKXx8bnVsbD09bHx8bnVsbD09YSlyZXR1cm4hMDtpZigibnVtZXJpYyI9PT1kKXtpZig4PT09YSlyZXR1cm4hMDtpZihhPDN8fGE+OHx8IU51bWJlci5pc0ludGVnZXIoYSkpcmV0dXJuIGNvbnNvbGUud2Fybigi'@;
put 'aW52YWxpZCBsZW5ndGggZnJvbSBTQVMsIHJ1bGUgbGVuZ3RoIGNhbiBvbmx5IGJlIGFuIGludGVnZXIgYmV0d2VlbiAzLTgiKSwhMTtjb25zdCBoPU51bWJlcihsKT09PWwmJmwlMSE9MDtpZihhPDgmJmgpcmV0dXJuIGNvbnNvbGUud2FybigicmVkdWNlZCBsZW5ndGggbnVtZXJpY3MgY2Fu'@;
put 'bm90IGNvbnRhaW4gZGVjaW1hbHMgZWxzZSBwcmVjaXNpb24gd2lsbCBiZSBhZmZlY3RlZCIpLCExO3N3aXRjaChhKXtjYXNlIDM6cmV0dXJuIGw8PTgxOTI7Y2FzZSA0OnJldHVybiBsPD0yMDk3MTUyO2Nhc2UgNTpyZXR1cm4gbDw9NTM2ODcwOTEyO2Nhc2UgNjpyZXR1cm4gbDw9MTM3NDM4'@;
put 'OTUzNDcyO2Nhc2UgNzpyZXR1cm4gbDw9MzUxODQzNzIwODg4MzJ9fXJldHVybiBsLnRvU3RyaW5nKCkubGVuZ3RoPD1hfWdldEhhbmRzb250YWJsZVZhbGlkYXRvcihsKXtzd2l0Y2gobCl7Y2FzZSJhdXRvY29tcGxldGUiOnJldHVybiBsVDtjYXNlIm51bWVyaWMiOnJldHVybiBWZWU7Y2Fz'@;
put 'ZSJkYXRlIjpyZXR1cm4gJFA7Y2FzZSJ0aW1lIjpyZXR1cm4gS1A7ZGVmYXVsdDpyZXR1cm4oYSxkKT0+ZD9kKCEwKTpudWxsfX1nZXRSdWxlSW5kZXgobCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBsP2w6dGhpcy5ydWxlcy5maW5kSW5kZXgoYT0+YS5kYXRhPT09bCl9c2V0Q29sdW1uTGV2'@;
put 'ZWxTZWN1cml0eShsKXtpZighdGhpcy5zYXNwYXJhbXM/LkNMU19GTEFHKXJldHVybjtjb25zdCBhPXRoaXMucnVsZXNbbF07aWYodGhpcy5wcmltYXJ5S2V5cy5pbmNsdWRlcyhhLmRhdGEpJiYoYS5jbHNSdWxlPSJSRUFEIiksIkhJREUiPT09YS5jbHNSdWxlJiZ0aGlzLmhpZGRlbkNvbHVt'@;
put 'bnMucHVzaChsKSwiUkVBRCI9PT1hLmNsc1J1bGUmJihhLnJlYWRPbmx5PSEwKSwiRURJVCI9PT1hLmNsc1J1bGUpe2EucmVhZE9ubHk9ITE7Y29uc3QgZD10aGlzLmhpZGRlbkNvbHVtbnMuaW5kZXhPZihsKTt0aGlzLmhpZGRlbkNvbHVtbnMuc3BsaWNlKGQsMSl9fX1jb25zdCBuTj17bnVt'@;
put 'ZXJpYzoiIixkZWZhdWx0OiIifSx3NXQ9KGMsbCk9PmM/ImF1dG9jb21wbGV0ZSI9PT1jP2wmJmwuc291cmNlP2wuc291cmNlWzBdOltdOm5OLmhhc093blByb3BlcnR5KGMpP25OW2NdOm5OLmRlZmF1bHQ6bk4uZGVmYXVsdCxqZWU9Yz0+bmV3IERhdGUoTWF0aC5yb3VuZCg4NjQwMCooYy0y'@;
put 'NTU2OSkqMWUzKSksUzV0PShjLGwsYSxkLGgsZix2KT0+KFVlZShsKSxsLmlubmVySFRNTD1gJHtmP2YudG9TdHJpbmcoKToiIn0gPGNkcy1pY29uIHNoYXBlPSJleGNsYW1hdGlvbi10cmlhbmdsZSIgc3RhdHVzPSJ3YXJuaW5nIj48L2Nkcy1pY29uPmAsbCksemVlPShjLGwsYSxkLGgsZix2'@;
put 'KT0+KFVlZShsKSxsLmlubmVySFRNTD1mfHwiIixsKSxNNXQ9KGMsbCxhLGQsaCxmLHYpPT4oVWVlKGwpLGwuaW5uZXJIVE1MPWAke2Y/Zi50b1N0cmluZygpOiIifSA8c3BhbiBjbGFzcz0ic3Bpbm5lciBzcGlubmVyLXNtIHZlcnRpY2FsLWFsaWduLW1pZGRsZSI+PC9zcGFuPmAsbCksVWVl'@;
put 'PWM9PntjLmNsYXNzTGlzdC5jb250YWlucygiaHREYXJrIil8fGMuY2xhc3NMaXN0LmFkZCgiaHREYXJrIil9LFplZT1mdW5jdGlvbiBFNXQoYyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBjfHx3eShjKSYmIltvYmplY3QgU3ltYm9sXSI9PXZ5KGMpfTt2YXIgVDV0PS9cLnxcWyg/OlteW1xd'@;
put 'XSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLEE1dD0vXlx3KiQvO2Z1bmN0aW9uIFdlZShjLGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjfHxudWxsIT1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7'@;
put 'dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMsaD1sP2wuYXBwbHkodGhpcyxkKTpkWzBdLGY9YS5jYWNoZTtpZihmLmhhcyhoKSlyZXR1cm4gZi5nZXQoaCk7dmFyIHY9Yy5hcHBseSh0aGlzLGQpO3JldHVybiBhLmNhY2hlPWYuc2V0KGgsdil8fGYsdn07cmV0dXJuIGEuY2FjaGU9'@;
put 'bmV3KFdlZS5DYWNoZXx8VFcpLGF9V2VlLkNhY2hlPVRXO2NvbnN0IFI1dD1XZWU7dmFyIEY1dD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxINXQ9L1xcKFxc'@;
put 'KT8vZyxONXQ9ZnVuY3Rpb24gTzV0KGMpe3ZhciBsPVI1dChjLGZ1bmN0aW9uKGQpe3JldHVybiA1MDA9PT1hLnNpemUmJmEuY2xlYXIoKSxkfSksYT1sLmNhY2hlO3JldHVybiBsfShmdW5jdGlvbihjKXt2YXIgbD1bXTtyZXR1cm4gNDY9PT1jLmNoYXJDb2RlQXQoMCkmJmwucHVzaCgiIiks'@;
put 'Yy5yZXBsYWNlKEY1dCxmdW5jdGlvbihhLGQsaCxmKXtsLnB1c2goaD9mLnJlcGxhY2UoSDV0LCIkMSIpOmR8fGEpfSksbH0pO2NvbnN0IFY1dD1ONXQ7dmFyIGc2ZT1jbT9jbS5wcm90b3R5cGU6dm9pZCAwLG02ZT1nNmU/ZzZlLnRvU3RyaW5nOnZvaWQgMDtjb25zdCBVNXQ9ZnVuY3Rpb24g'@;
put 'djZlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihDeShjKSlyZXR1cm4gZnVuY3Rpb24gQjV0KGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9QXJyYXkoZCk7KythPGQ7KWhbYV09bChjW2FdLGEsYyk7cmV0dXJuIGh9KGMsdjZlKSsiIjtpZiha'@;
put 'ZWUoYykpcmV0dXJuIG02ZT9tNmUuY2FsbChjKToiIjt2YXIgbD1jKyIiO3JldHVybiIwIj09bCYmMS9jPT0tMS8wPyItMCI6bH0sRzV0PWZ1bmN0aW9uIFk1dChjLGwpe3JldHVybiBDeShjKT9jOmZ1bmN0aW9uIGs1dChjLGwpe2lmKEN5KGMpKXJldHVybiExO3ZhciBhPXR5cGVvZiBjO3Jl'@;
put 'dHVybiEoIm51bWJlciIhPWEmJiJzeW1ib2wiIT1hJiYiYm9vbGVhbiIhPWEmJm51bGwhPWMmJiFaZWUoYykpfHxBNXQudGVzdChjKXx8IVQ1dC50ZXN0KGMpfHxudWxsIT1sJiZjIGluIE9iamVjdChsKX0oYyxsKT9bY106VjV0KGZ1bmN0aW9uIFo1dChjKXtyZXR1cm4gbnVsbD09Yz8iIjpV'@;
put 'NXQoYyl9KGMpKX0scTV0PWZ1bmN0aW9uIEs1dChjKXtpZigic3RyaW5nIj09dHlwZW9mIGN8fFplZShjKSlyZXR1cm4gYzt2YXIgbD1jKyIiO3JldHVybiIwIj09bCYmMS9jPT0tMS8wPyItMCI6bH0sU2M9ZnVuY3Rpb24gUTV0KGMsbCxhKXt2YXIgZD1udWxsPT1jP3ZvaWQgMDpmdW5jdGlv'@;
put 'biBYNXQoYyxsKXtmb3IodmFyIGE9MCxkPShsPUc1dChsLGMpKS5sZW5ndGg7bnVsbCE9YyYmYTxkOyljPWNbcTV0KGxbYSsrXSldO3JldHVybiBhJiZhPT1kP2M6dm9pZCAwfShjLGwpO3JldHVybiB2b2lkIDA9PT1kP2E6ZH07bGV0IFpoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxk'@;
put 'LGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucmVzcG9uc2U9bmV3IFduLHRoaXMuY2hhbmdlZFRhYmxlPW5ldyBXbix0aGlzLmRldGFpbHM9bmV3IFduLHRoaXMuZGlmZnM9bmV3IFduLHRoaXMuY29sdW1ucz1uZXcg'@;
put 'V24sdGhpcy52YWx1ZXM9bmV3IFduLHRoaXMuZmlsdGVyPW5ldyBXbix0aGlzLnF1ZXJ5PW5ldyBXbix0aGlzLnN1Ym1pdHREZXRhaWw9bmV3IFduLHRoaXMucmVtb3ZlUXVlcnk9bmV3IFduLHRoaXMuc2V0U3VibWl0PW5ldyBXbix0aGlzLnNldFN1Ym1pdExpc3Q9bmV3IFdufWNhbGxTZXJ2'@;
put 'aWNlKGEsZCxoLGYpe3ZhciB2PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IE09e307cmV0dXJuIE1bZF09W2FdLHtkYXRhOih5aWVsZCB2LnNhc1NlcnZpY2UucmVxdWVzdChoLE0pKS5hZGFwdGVyUmVzcG9uc2UsbGliZHM6Zn19KSgpfXVwZGF0ZVRhYmxlKGEsZCxoLGYsdixN'@;
put 'LEQpe3ZhciBaPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBuZT17anNkYXRhOmR9O2lmKHYpe2xldCBiZT1aLnBhcnNlRm9ybWF0cyh2KTtuZS4kanNkYXRhPXtmb3JtYXRzOmJlfX1yZXR1cm4gbmVbaF09W2FdLHlpZWxkIFouc2FzU2VydmljZS5yZXF1ZXN0KGYsbmUsRCx7c3Vw'@;
put 'cHJlc3NFcnJvckFib3J0TW9kYWw6TSxzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOk19KX0pKCl9Z2V0QXBwcm92YWxzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgs'@;
put 'dikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2VuZERldGFpbHMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PU9iamVjdC5hc3NpZ24oe3N1YjohMH0sYSk7Zi5zdWJtaXR0RGV0YWlsLm5leHQoe2RhdGE6aFtkXSx2aWV3RGF0YTp2fSl9KSgpfWdldFN1Ym1p'@;
put 'dHRzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHN1Ym1pdHMiLG51bGwpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdMaWJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7'@;
put 'cmV0dXJuKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMiLG51bGwpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXJlZnJlc2hMaWJJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9e2xpYjJyZWZyZXNoOlt7bGlicmVmOmF9XX07'@;
put 'cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvcmVmcmVzaGxpYmluZm8iLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdUYWJsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9e1NBU0NvbnRyb2xUYWJsZTpbe01QTElCOmF9XX07'@;
put 'cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld3RhYmxlcyIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0RhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7TElCRFM6YSxGSUxURVJf'@;
put 'Uks6ZH1dfTtyZXR1cm4oeWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsZikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0RhdGFTZWFyY2goYSxkPSExLGgsZil7dmFyIHY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IEQ9e1NBU0NvbnRyb2xUYWJs'@;
put 'ZTpbe1NFQVJDSFRZUEU6YS5sZW5ndGg+MD9kPyJOVU0iOiJDSEFSIjoiTk9ORSIsU0VBUkNIVkFMOmEsTElCRFM6aCxGSUxURVJfUks6Zn1dfTtyZXR1cm4oeWllbGQgdi5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsRCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Z2V0WExN'@;
put 'YXBSdWxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBoPXtnZXR4bG1hcHNfaW46W3tYTE1BUF9JRDphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXR4bG1hcHMiLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNob3dE'@;
put 'aWZmcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYse3VzZUNvbXB1dGVBcGk6ITF9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1yZWplY3RpbmcoYSxkLGgpe3ZhciBm'@;
put 'PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2LHt1c2VDb21wdXRlQXBpOiExfSkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9YXBwcm92ZVRhYmxlKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBl'@;
put 'ZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Z2V0SGlzdG9yeShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09'@;
put 'W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNldFF1ZXJ5VmFyaWFibGVzKGEsZCl7dGhpcy5jb2x1bW5zLm5leHQoe2RhdGE6e2NvbHM6ZH0sbGliZHM6YX0pfWdldENoYW5nZUluZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVu'@;
put 'Y3Rpb24qKCl7bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe1RBQkxFOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsZikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Z2V0UXVlcnlWYWx1ZXMoYSxkLGgsZix2KXt2YXIgTT10aGlzO3Jl'@;
put 'dHVybiBlZShmdW5jdGlvbiooKXtsZXQgRD17aXdhbnQ6W3tsaWJkczpkLGNvbDphLC4uLmYmJntTVEFSVFJPVzpmfSwuLi52JiZ7Uk9XUzp2fX1dfTtyZXR1cm4gaC5sZW5ndGg+MCYmKEQuRklMVEVSUVVFUlk9aCksKHlpZWxkIE0uc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Y29s'@;
put 'dmFscyIsRCkuY2F0Y2goWj0+e3Rocm93IFp9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zYXZlUXVlcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj17aXdhbnQ6W3tmaWx0ZXJfdGFibGU6YX1dLGZpbHRlcnF1ZXJ5OmR9O2NvbnN0IHY9eWllbGQgaC5zYXNT'@;
put 'ZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92YWxpZGF0ZWZpbHRlciIsZik7cmV0dXJuIGguZmlsdGVyLm5leHQodiksdi5hZGFwdGVyUmVzcG9uc2V9KSgpfW9wZW5UYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgaD17aXdhbnQ6W3t0YWJsZV9pZDphfV19O3Jl'@;
put 'dHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiYXVkaXRvcnMvZ2V0c3RhZ2V0YWJsZSIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Y2hlY2tPcGVyYXRvcihhLGQsaCl7bGV0IGY7c3dpdGNoKGEpe2Nhc2UiQkVUV0VFTiI6ZCBpbnN0YW5jZW9mIEFycmF5JiYoIiIhPT1kWzBdJiYi'@;
put 'IiE9PWRbMV0/Zj1kWzBdKyIgQU5EICIrZFsxXToiIiE9PWRbMF0mJiIiPT09ZFsxXT8oZFsxXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSk6IiI9PT1kWzBdJiYiIiE9PWRbMV0/KGRbMF09Ii4iLGY9ZFswXSsiIEFORCAiK2RbMV0pOihkWzBdPSIuIixkWzFdPSIuIixmPWRbMF0rIiBBTkQg'@;
put 'IitkWzFdKSk7YnJlYWs7Y2FzZSJJTiI6Y2FzZSJOT1QgSU4iOmxldCBNPVtdO2lmKHR5cGVvZiBkPCJ1Iilmb3IobGV0IEQ9MDtEPGQubGVuZ3RoO0QrKykhMD09PWRbRF0uY2hlY2tlZCYmKCJjaGFyIj09PWg/KCJzdHJpbmciPT10eXBlb2YgZFtEXS52YWwmJihkW0RdLnZhbD1kW0RdLnZh'@;
put 'bC5yZXBsYWNlKCInIiwiJyciKSksTS5wdXNoKCInIitkW0RdLnZhbCsiJyIpKToobnVsbD09PWRbRF0udmFsJiYoZFtEXS52YWw9Ii4iKSxNLnB1c2goZFtEXS52YWwpKSk7ZD0iKCIrTSsiKSI7YnJlYWs7Y2FzZSJDT05UQUlOUyI6YT0iPyI7YnJlYWs7Y2FzZSJOT1QgRVFVQUwiOmE9Im5l'@;
put 'In1yZXR1cm4ibnVtIj09PWgmJm51bGw9PT1kJiYoZD0iLiIpLCJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PWQmJihkPSIiKSwtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihhKSYmIm51bSI9PT1oJiYiIj09PWQmJihkPSIuIiksIkJFVFdFRU4iPT09YT97dmFsdWU6'@;
put 'ZixvcGVyYXRvcjphfTp7dmFsdWU6ZCxvcGVyYXRvcjphfX13aGVyZUNsYXVzZUNyZWF0b3IoYSxkLGgpe2xldCBELGNlLGY9IiIsWj0iIixuZT1bXTtmb3IobGV0IEVlPTA7RWU8YS5xdWVyeU9iai5sZW5ndGg7RWUrKyl7bGV0IEJlPSIiLHFlPWEucXVlcnlPYmpbRWVdO2ZvcihsZXQgcnQ9'@;
put 'MDtydDxxZS5lbGVtZW50cy5sZW5ndGg7cnQrKyl7bGV0IGR0LHB0PXFlLmVsZW1lbnRzW3J0XTtEPXJ0PHFlLmVsZW1lbnRzLmxlbmd0aC0xP3FlLmNsYXVzZUxvZ2ljOiIiO2ZvcihsZXQgQ3I9MDtDcjxwdC52YWx1ZXMubGVuZ3RoO0NyKyspe2lmKCJzdHJpbmciPT10eXBlb2YgcHQudmFs'@;
put 'dWUmJiJudW1iZXIiPT10eXBlb2YgcHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQpcHQudmFsdWU9PT1KU09OLnN0cmluZ2lmeShwdC52YWx1ZXNbQ3JdLmZvcm1hdHRlZCkmJihkdD1wdC52YWx1ZXNbQ3JdLnVuZm9ybWF0dGVkKTtlbHNle2xldCBncj0ibnVtYmVyIiE9dHlwZW9mIHB0LnZhbHVl'@;
put 'c1tDcl0uZm9ybWF0dGVkJiZudWxsIT09cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQ/cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQudHJpbSgpOnB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkO3B0LnZhbHVlPT09Z3ImJihkdD1wdC52YWx1ZXNbQ3JdLnVuZm9ybWF0dGVkKX0iUGxlYXNlIHNlbGVjdCB2'@;
put 'YWx1ZSI9PT1wdC52YWx1ZSYmLTEhPT1bIj0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YocHQub3BlcmF0b3IpJiYoZHQ9IiIpLCgiQ09OVEFJTlMiPT09cHQub3BlcmF0b3J8fCJMSUtFIj09PXB0Lm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09cHQub3BlcmF0b3IpJiYoZHQ9'@;
put 'cHQudmFsdWUpfWlmKGR0fHwoZHQ9cHQudmFsdWUpLHB0LnZhbHVlIGluc3RhbmNlb2YgQXJyYXkmJiJCRVRXRUVOIj09PXB0Lm9wZXJhdG9yKXtkdD1bXSxkdC5wdXNoKHB0LnZhbHVlWzBdKSxkdC5wdXNoKHB0LnZhbHVlWzFdKTtmb3IobGV0IENyPTA7Q3I8cHQudmFsdWVzLmxlbmd0aDtD'@;
put 'cisrKWR0WzBdPT09cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQmJihkdFswXT1wdC52YWx1ZXNbQ3JdLnVuZm9ybWF0dGVkKSxkdFsxXT09PXB0LnZhbHVlc1tDcl0uZm9ybWF0dGVkJiYoZHRbMV09cHQudmFsdWVzW0NyXS51bmZvcm1hdHRlZCl9aWYocHQudmFsdWUgaW5zdGFuY2VvZiBBcnJh'@;
put 'eSYmKCJJTiI9PT1wdC5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1wdC5vcGVyYXRvcikpe2R0PVtdLGR0PXB0LnZhbHVlO2ZvcihsZXQgQ3I9MDtDcjxwdC52YWx1ZXMubGVuZ3RoO0NyKyspZHRbQ3JdJiZkdFtDcl0udmFsPT09cHQudmFsdWVzW0NyXS5mb3JtYXR0ZWQmJihkdFtDcl0udmFsPXB0'@;
put 'LnZhbHVlc1tDcl0udW5mb3JtYXR0ZWQpfWxldCBKdD1wdC50eXBlO2NvbnN0IHZuPXB0LnZhbHVlVmFyaWFibGU7bGV0IE1uLENuPW51bGw9PT1wdC52YXJpYWJsZT8iIjpwdC52YXJpYWJsZSx0bj1udWxsPT09cHQub3BlcmF0b3I/IiI6cHQub3BlcmF0b3I7TW49dGhpcy5jaGVja09wZXJh'@;
put 'dG9yKHRuLGR0LEp0KS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIE1uJiYiKCIhPT1NblswXSYmKE1uPU1uLnJlcGxhY2UoIiciLCInJyIpKSx0bj10aGlzLmNoZWNrT3BlcmF0b3IodG4sTW4sSnQpLm9wZXJhdG9yLCJjaGFyIj09PUp0JiYiSU4iIT09dG4mJiJOT1QgSU4iIT09dG4/KHR5cGVv'@;
put 'ZiBNbj4idSImJihNbj0iIiksTW49dm4/IiAiK01uKyIgIjoiICciK01uKyInICIsQmU9QmUrIiAiK0NuKyIgIit0bitNbitEKTooIm51bSI9PT1KdCYmdHlwZW9mIE1uPiJ1IiYmKE1uPSIuIiksTW49dHlwZW9mIE1uPiJ1Ij8iIjoiICIrTW4rIiAiLEJlPUJlKyIgIitDbisiICIrdG4rTW4r'@;
put 'RCl9bmUucHVzaChCZSl9Wj0iIjtmb3IobGV0IEVlPTA7RWU8bmUubGVuZ3RoO0VlKyspY2U9RWU8bmUubGVuZ3RoLTE/ZDoiIixaPTE9PT1uZS5sZW5ndGg/bmVbMF06WisiICgiK25lW0VlXSsiKSAiK2NlO3JldHVybiBmPVouc3Vic3RyKDEpLnNsaWNlKDAsLTEpLFo9IldIRVJFIitaKyI7'@;
put 'Iix0aGlzLnF1ZXJ5Lm5leHQoe3doZXJlQ2xhdXNlOlosc3RyaW5nOmYsb2JqOmEsbGliZHM6aH0pLHt3aGVyZUNsYXVzZTpaLHN0cmluZzpmfX1jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGEpe2NvbnN0IGQ9W107cmV0dXJuIGEuZmlsdGVyR3JvdXBzLmZvckVhY2goKGgsZik9PntoLmZpbHRl'@;
put 'ckNsYXVzZXMuZm9yRWFjaCh2PT57bGV0IE09IiI7IkJFVFdFRU4iPT09di5vcGVyYXRvcj9NPWAke3YudmFsdWVbMF19IEFORCAke3YudmFsdWVbMV19YDoiSU4iPT09di5vcGVyYXRvcnx8Ik5PVCBJTiI9PT12Lm9wZXJhdG9yPyh2LnZhbHVlLmZvckVhY2goRD0+e2lmKEQuY2hlY2tlZCl7'@;
put 'Y29uc3QgWj1ELnZhbDsic3RyaW5nIiE9dHlwZW9mIFp8fCgwLEtnLmlzU3BlY2lhbE1pc3NpbmcpKFopJiYiY2hhciIhPT12LnR5cGU/TS5sZW5ndGg+MD9NKz1gLCR7Wn1gOk09YCgke1p9YDpNLmxlbmd0aD4wP00rPWAsJyR7Wi5yZXBsYWNlKC8nL2csIicnIil9J2A6TT1gKCcke1oucmVw'@;
put 'bGFjZSgvJy9nLCInJyIpfSdgfX0pLE0ubGVuZ3RoPjAmJihNKz0iKSIpKToiIj09PXYudmFsdWU/TT0iY2hhciI9PT12LnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PXYudHlwZSYmIXYudmFsdWVWYXJpYWJsZSYmKE09YCcke3YudmFsdWUucmVwbGFjZSgvJy9nLCInJyIpfSdgKSxkLnB1c2go'@;
put 'e0dST1VQX0xPR0lDOmEuZ3JvdXBMb2dpYyxTVUJHUk9VUF9MT0dJQzpoLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOnYudmFyaWFibGUsT1BFUkFUT1JfTk06di5vcGVyYXRvcixSQVdfVkFMVUU6TXx8di52YWx1ZX0pfSl9KSxkfWluaXRpYWxpemVHbG9i'@;
put 'YWxGaWx0ZXJDbGF1c2UoYSxkKXtjb25zdCBoPXtxdWVyeU9iajpbXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOlNjKEtuLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQ307U2MoS24sYSkuZmlsdGVyLmNsYXVzZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoKSxTYyhL'@;
put 'bixhKS5maWx0ZXIuZ3JvdXBMb2dpYz1TYyhLbixhKS5maWx0ZXIucXVlcnlbMF0uR1JPVVBfTE9HSUM7bGV0IGY9IiIsdj17ZWxlbWVudHM6W119LE09MDtTYyhLbixhKS5maWx0ZXIucXVlcnkuZm9yRWFjaChEPT57Y29uc3QgWj17fTtmb3IobGV0IG5lPTA7bmU8ZC5sZW5ndGg7bmUrKylp'@;
put 'ZihkW25lXS5OQU1FPT09RC5WQVJJQUJMRV9OTSl7aWYoZj1ELlNVQkdST1VQX0xPR0lDLFouZGR0eXBlPWRbbmVdLkREVFlQRSxaLnR5cGU9ZFtuZV0uVFlQRSxaLm9wZXJhdG9ycz0ibnVtIj09PWRbbmVdLlRZUEU/S24ub3BlcmF0b3JzLm51bU9wZXJhdG9yczpLbi5vcGVyYXRvcnMuY2hh'@;
put 'ck9wZXJhdG9ycyxaLmxvZ2ljPW51bGwsWi5vcGVyYXRvcj1ELk9QRVJBVE9SX05NLFoudmFyaWFibGU9RC5WQVJJQUJMRV9OTSwiY2hhciI9PT1kW25lXS5UWVBFKWlmKCJJTiI9PT1ELk9QRVJBVE9SX05NfHwiTk9UIElOIj09PUQuT1BFUkFUT1JfTk0pe2NvbnN0IGNlPVtdLEVlPUQuUkFX'@;
put 'X1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCInLCciKTsxPT09RWUubGVuZ3RoP2NlLnB1c2goe2NoZWNrZWQ6ITAsdmFsOkVlWzBdLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKX0pOkVlLmZvckVhY2goKEJlLHFlKT0+e2NlLnB1c2goMD09PXFlP3tjaGVja2VkOiEwLHZhbDpCZS5z'@;
put 'bGljZSgxKS5yZXBsYWNlKC8nJy9nLCInIil9OnFlPT09RWUubGVuZ3RoLTE/e2NoZWNrZWQ6ITAsdmFsOkJlLnNsaWNlKDAsLTEpLnJlcGxhY2UoLycnL2csIiciKX06e2NoZWNrZWQ6ITAsdmFsOkJlLnJlcGxhY2UoLycnL2csIiciKX0pfSksWi52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2Uu'@;
put 'ZGVlcENsb25lKGNlKX1lbHNlIFoudmFsdWU9RC5SQVdfVkFMVUUuc2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpO2Vsc2UgaWYoIklOIj09PUQuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09RC5PUEVSQVRPUl9OTSl7Y29uc3QgY2U9W107RC5SQVdfVkFMVUUuc2xpY2UoMSwtMSkuc3Bs'@;
put 'aXQoIiwiKS5mb3JFYWNoKChCZSxxZSk9PntjZS5wdXNoKHtjaGVja2VkOiEwLHZhbDpCZX0pfSksWi52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGNlKX1lbHNlIGlmKCJCRVRXRUVOIj09PUQuT1BFUkFUT1JfTk0pe2NvbnN0IGNlPUQuUkFXX1ZBTFVFLnNwbGl0KCIgQU5E'@;
put 'ICIpO1oudmFsdWU9Y2V9ZWxzZSBaLnZhbHVlPUQuUkFXX1ZBTFVFO1oudmFsdWVzPVtdLE09PT1ELlNVQkdST1VQX0lEfHwoU2MoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHYpKSxTYyhLbixhKS5maWx0ZXIuY2xhdXNl'@;
put 'cy5xdWVyeU9ialtNXS5jbGF1c2VMb2dpYz1mLFNjKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmludmFsaWRDbGF1c2U9ITEsTSsrLHYuZWxlbWVudHM9W10pLHYuZWxlbWVudHMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFopKTticmVha319KSx2LmVsZW1l'@;
put 'bnRzLmxlbmd0aD4wJiYoU2MoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHYpKSxTYyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5jbGF1c2VMb2dpYz1mLFNjKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5'@;
put 'T2JqW01dLmludmFsaWRDbGF1c2U9ITEpLFNjKEtuLGEpLmZpbHRlci5xdWVyeT1bXX1yZW1vdmVDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gYS5yZW1vdmVRdWVyeS5uZXh0KCEwKSwhMH0pKCl9c3BlY0NvbnZlcnNpb24oYSl7bGV0IGQ9e30saD1b'@;
put 'XTtpZihoPWEubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBmLk5BTUUudG9VcHBlckNhc2UoKX0pLGEgaW5zdGFuY2VvZiBBcnJheSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylkW2hbZl1dPTE9PT1hW2ZdLlRZUEU/e2NvbFR5cGU6Im51bSIsY29sTGVuZ3RoOmFbZl0uTEVOR1RIfTp7Y29s'@;
put 'VHlwZToic3RyaW5nIixjb2xMZW5ndGg6YVtmXS5MRU5HVEh9O3JldHVybiBkfXNldFN1Ym1pdFJlYWR5KCl7dGhpcy5zZXRTdWJtaXQubmV4dCghMCl9cGFyc2VGb3JtYXRzKGEpe2NvbnN0IGQ9e30saD1hLnZhcnM7Zm9yKGxldCBmIG9mIE9iamVjdC5rZXlzKGgpKXtjb25zdCB2PWhbZl0u'@;
put 'dHlwZSxNPWhbZl0ubGVuZ3RoOyJudW0iPT09dj9kW2ZdPSJiZXN0LiI6ImNoYXIiPT09diYmKGRbZl09YCRjaGFyJHtNfS5gKX1yZXR1cm4gZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih0bCkseHIoWXUpLHhyKE1kKSl9fXN0YXRpY3t0'@;
put 'aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgYjZlPWM9PntsZXQgbD0oIjAiK2MuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpKyI6IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSsi'@;
put 'OiIsbCs9KCIwIitjLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpLGx9LFllZT1jPT5jLmdldEZ1bGxZZWFyKCkrIi0iKygiMCIrKGMuZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpKyItIisoIjAiK2MuZ2V0RGF0ZSgpKS5zbGljZSgtMiksR2VlPWM9PiEhL14tezAsMX1cZCskLy50ZXN0KGMp'@;
put 'LHk2ZT1jPT4hIS9eXGQrXC5cZCskLy50ZXN0KGMpLCRlZT0oYyxsKT0+bmV3IEZpbGUoW2NdLGwse2xhc3RNb2RpZmllZDoobmV3IERhdGUpLmdldFRpbWUoKX0pO3ZhciBrdT1fKDYzNTc4KSxfNmU9Xyg5NDI0OCksdzZlPV8oODM4MzgpO2NsYXNzIEM2ZXtjb25zdHJ1Y3RvcihsKXt0aGlz'@;
put 'LmxpY2VuY2VTdGF0ZT1sLmxpY2VuY2VTdGF0ZX1wYXJzZVNwcmVhZHNoZWV0RmlsZShsLGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgodixNKT0+e2NvbnN0IEQ9bC51cGxvYWRlcnx8bmV3IEllZTtpZihsLndvcmtib29rKXRoaXMucGFyc2VFeGNlbEZpbGUobCxsLndv'@;
put 'cmtib29rLEQsaCkudGhlbihaPT57dihaKX0pLmNhdGNoKFo9PntNKFopfSk7ZWxzZXtjb25zdCBuZT1sLmZpbGU7bC5lbmNvZGluZ3x8KGwuZW5jb2Rpbmc9IlVURi04IiksZCYmZChgTG9hZGluZyAke25lLm5hbWV9IGludG8gdGhlIGJyb3dzZXJgKTtsZXQgY2U9bmUubmFtZS5zbGljZShu'@;
put 'ZS5uYW1lLmxhc3RJbmRleE9mKCIuIikrMSxuZS5uYW1lLmxhc3RJbmRleE9mKCIuIikrNCk7aWYoInhscyIhPT1jZS50b0xvd2VyQ2FzZSgpKXtpZigiY3N2Ij09PWNlLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMucGFyc2VDc3ZGaWxlKGwsRCxjZSkudGhlbihiZT0+dihiZSkpLmNhdGNo'@;
put 'KGJlPT5NKGJlKSk7e2xldCBiZT0nSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrbC5maWxlLm5hbWUrJzwvYj4iLiBQbGVhc2UgdXBsb2FkIGNzdiBvciBleGNlbCBmaWxlLic7cmV0dXJuIEQucXVldWUucG9wKCksTShiZSl9fXtsZXQgYmU9bmV3IEZpbGVSZWFkZXI7YmUub25sb2FkPWZ1bmN0'@;
put 'aW9uKCl7dmFyIEJlPWVlKGZ1bmN0aW9uKihxZSl7Y29uc3QgcnQ9eWllbGQgZi54c2x4U3RhcnRSZWFkaW5nKHFlLGEsbC5wYXNzd29yZCk7aWYoIXJ0KXJldHVybiBNKCJObyB3b3JrYm9vayBmb3VuZC4iKTtmLnBhcnNlRXhjZWxGaWxlKGwscnQsRCxoKS50aGVuKHB0PT57dihwdCl9KS5j'@;
put 'YXRjaChwdD0+e00ocHQpfSl9KTtyZXR1cm4gZnVuY3Rpb24ocWUpe3JldHVybiBCZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGJlLnJlYWRBc0FycmF5QnVmZmVyKG5lKX19fSl9cGFyc2VFeGNlbEZpbGUobCxhLGQsaCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09ITEs'@;
put 'RD1bXTtjb25zdCBaPVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi5sLmhlYWRlckFycmF5XSxuZT10aGlzLnNlYXJjaERhdGFJbkV4Y2VsKGEsbCk7bGV0IGNlPVtdO2lmKG5lLmZvdW5kPyhNPSEwLGNlPW5lLmZvdW5kLmFycmF5RGF0YSxuZS5mb3VuZC5oZWFkZXJzLmlu'@;
put 'Y2x1ZGVzKCJfX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18iKXx8KGNlPWNlLm1hcChCZT0+KEJlLnVuc2hpZnQoe3Y6IiJ9KSxCZSkpKSxoJiZoKGBTaGVldDogJHtuZS5mb3VuZC5zaGVldE5hbWV9XG5SYW5nZTogJHtuZS5mb3VuZC5zdGFydEFkZHJlc3N9OiR7bmUuZm91bmQuZW5k'@;
put 'QWRkcmVzc31gKSk6RD1uZS5taXNzaW5nfHxbXSxELmxlbmd0aD4wKXtsZXQgQmU9RC5tYXAocWU9PmBTaGVldDogJHtxZS5zaGVldE5hbWV9LlxuTWlzc2luZyBjb2x1bW5zOiAke3FlLm1pc3NpbmdIZWFkZXJzLmpvaW4oIiwiKX1gKS5qb2luKCJcblxuIik7cmV0dXJuIGQucXVldWUucG9w'@;
put 'KCksdihCZSl9aWYoMD09PWNlLmxlbmd0aHx8MD09PWNlWzBdLmxlbmd0aCl7bGV0IEJlPSJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISI7cmV0dXJuIGQucXVldWUucG9wKCksdihCZSl9aWYoKGwuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wfHxsLmRhdGVIZWFkZXJzLmxlbmd0'@;
put 'aD4wfHxsLnRpbWVIZWFkZXJzLmxlbmd0aD4wKSYmKGNlPXRoaXMudXBkYXRlRGF0ZVRpbWVDb2xzKFosY2UsbCkpLGwueGxSdWxlcy5sZW5ndGg+MCYmKGNlPXRoaXMudXBkYXRlWExSdWxlQ29scyhaLGNlLGwpKSwhTSl7bGV0IEJlPSIiO3JldHVybiBCZT0wPT09RC5sZW5ndGg/Ik5vIHJl'@;
put 'bGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIjpELm1hcChxZT0+YFNoZWV0OiAke3FlLnNoZWV0TmFtZX0uXG5NaXNzaW5nIGNvbHVtbnM6ICR7cWUubWlzc2luZ0hlYWRlcnMuam9pbigiLCIpfWApLmpvaW4oIlxuXG4iKSxkLnF1ZXVlLnBvcCgpLHYoQmUpfXtsLmhlYWRlclNob3c9Wixj'@;
put 'ZT1jZS5tYXAoSnQ9Pkp0Lm1hcCh2bj0+Im4iPT09dm4udHx8dm4udz92bi52OiJzdHJpbmciPT10eXBlb2Ygdm4udj92bi52LnRyaW0oKTp2bi52KSksY2U9Y2UubWFwKEp0PT5KdC5tYXAoKHZuLENuKT0+eyF2biYmMCE9PXZuJiYodm49IiIpO2NvbnN0IHRuPWwuaGVhZGVyU2hvd1tDbl07'@;
put 'cmV0dXJuIm51bWVyaWMiPT09bC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZSh0bik/LnR5cGUmJigwLEtnLmlzU3BlY2lhbE1pc3NpbmcpKHZuKSYmIXZuLmluY2x1ZGVzKCIuIikmJih2bj0iLiIrdm4pLHZufSkpO2NvbnN0IEJlPWNlLnNsaWNlKDAsdGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3Vi'@;
put 'bWl0X3Jvd3NfbGltaXQpO2xldCBwdCxxZT1rdS51dGlscy5qc29uX3RvX3NoZWV0KEJlLHtza2lwSGVhZGVyOiEwfSkscnQ9a3UudXRpbHMuc2hlZXRfdG9fY3N2KHFlKTtpZihydD1aLmpvaW4oIiwiKSsiXG4iK3J0LCJXTEFUSU4xIj09PWwuZW5jb2Rpbmcpe2xldCBKdD1fNmUuZGVjb2Rl'@;
put 'KHc2ZS5CdWZmZXIuZnJvbShydCksIkNQLTEyNTIiKTtwdD1uZXcgQmxvYihbSnRdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSl9ZWxzZSBwdD1uZXcgQmxvYihbcnRdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7bGV0IGR0PSRlZShwdCxsLmZpbGUubmFtZSsiLmNzdiIpO2QuYWRkVG9R'@;
put 'dWV1ZShbZHRdKX1pZigwPT09Y2UubGVuZ3RoKXJldHVybiB2KGBUYWJsZSBpbiB0aGUgZmlsZSBpcyBlbXB0eS4gRGF0YSBmb3VuZCBvbiBzaGVldDogJHtuZS5mb3VuZD8uc2hlZXROYW1lfHwiIn1gKTtpZighbmUuZm91bmQpcmV0dXJuIHYoIk5vIHJlbGV2YW50IGRhdGEgZm91bmQuICdm'@;
put 'b3VuZCcgb2JqZWN0IGlzIGVtcHR5LCB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLiIpO2NvbnN0IGJlPW5lLmZvdW5kLnN0YXJ0QWRkcmVzc3x8IiIsRWU9bmUuZm91bmQuZW5kQWRkcmVzc3x8IiI7cmV0dXJuIGYoe3VwbG9hZGVyOmQsZGF0YTpjZSxyYW5nZVNoZWV0UmVzOntmb3VuZDoh'@;
put 'IW5lLmZvdW5kLHNoZWV0TmFtZTpuZS5mb3VuZC5zaGVldE5hbWUscmFuZ2VTdGFydEFkZHJlc3M6YmUscmFuZ2VFbmRBZGRyZXNzOkVlLHJhbmdlQWRkcmVzczpgJHtiZX06JHtFZX1gLG1pc3NpbmdIZWFkZXJzOkR9LGhlYWRlclNob3c6bC5oZWFkZXJTaG93fSl9KX1wYXJzZUNzdkZpbGUo'@;
put 'bCxhLGQpe3JldHVybiBuZXcgUHJvbWlzZSgoaCxmKT0+e2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09MS8wKXJldHVybiBhLnF1ZXVlLnBvcCgpLGYoIkV4Y2VsIGZpbGVzIG9ubHkuIFRvIHVubG9jayBDU1YgdXBsb2FkcywgcGxlYXNlIGNvbnRhY3Qg'@;
put 'c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpO2lmKCJXTEFUSU4xIiE9PWwuZW5jb2RpbmcpcmV0dXJuIGgoe3VwbG9hZGVyOmF9KTt7bGV0IHY9bmV3IEZpbGVSZWFkZXI7di5vbmxvYWQ9RD0+e2xldCBaPV82ZS5kZWNvZGUodzZlLkJ1ZmZlci5mcm9tKEQudGFyZ2V0LnJlc3VsdCksIkNQ'@;
put 'LTEyNTIiKSxuZT1uZXcgQmxvYihbWl0se3R5cGU6ZH0pLGNlPSRlZShuZSxsLmZpbGUubmFtZSk7cmV0dXJuIGEucXVldWUucG9wKCksYS5hZGRUb1F1ZXVlKFtjZV0pLGgoe3VwbG9hZGVyOmF9KX0sdi5yZWFkQXNBcnJheUJ1ZmZlcihsLmZpbGUpfX0pfWJ5dGVzVG9NQihsKXtyZXR1cm4g'@;
put 'cGFyc2VGbG9hdCgobC8xMDQ4NTc2KS50b0ZpeGVkKDIpKX14c2x4U3RhcnRSZWFkaW5nKGwsYSxkKXt2YXIgaD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBmPWVlKGZ1bmN0aW9uKih2LE0pe2NvbnN0IEQ9aC50b0JzdHIobC50YXJnZXQucmVzdWx0KTtsZXQgWixu'@;
put 'ZT0hMTtjb25zdCBjZT17dHlwZToiYmluYXJ5IixjZWxsRGF0ZXM6ITEsY2VsbEZvcm11bGE6ITAsY2VsbFN0eWxlczohMCxjZWxsTkY6ITEsY2VsbFRleHQ6ITEscGFzc3dvcmQ6ZH07dHJ5e1o9eWllbGQgaC54bHN4UmVhZChELHsuLi5jZX0pfWNhdGNoKGJlKXtpZighYmUubWVzc2FnZS50'@;
put 'b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpKXJldHVybiBNKCJFcnJvciByZWFkaW5nIHRoZSBmaWxlIik7e25lPSEwO2xldCBFZT0hMTtmb3IoO25lOyl7Y29uc3QgQmU9eWllbGQgYSh7ZXJyb3I6RWV9KTtpZihCZSl0cnl7Wj15aWVsZCBoLnhsc3hSZWFkKEQsey4uLmNlLHBh'@;
put 'c3N3b3JkOkJlfSksbmU9ITEsRWU9ITF9Y2F0Y2gocWUpe0VlPSEwLHFlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKXx8KG5lPSExKX1lbHNlIG5lPSExfX19cmV0dXJuIFo/dihaKTpNKCJGYWlsZWQgdG8gcGFyc2UgYSB3b3JrYm9vayIpfSk7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKHYsTSl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9eGxzeFJlYWQobCxhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntpZihhJiZhLnBhc3N3b3JkKXJldHVybiBjb25zb2xlLmluZm8oIk5vdCB1c2luZyB3b3JrZXIgdG8gcGFyc2UgdGhlIFhMU1ggLSBo'@;
put 'YXMgcGFzc3dvcmQiKSxkKGt1LnJlYWQobCxhKSk7aWYodHlwZW9mIFdvcmtlcj4idSIpcmV0dXJuIGNvbnNvbGUuaW5mbygiTm90IHVzaW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCAtIG5vIFdvcmtlciBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCIpLGQoa3UucmVhZChsLGEp'@;
put 'KTtjb25zb2xlLmluZm8oIlVzaW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCIpO2NvbnN0IGY9bmV3IFdvcmtlcihfLnR1KG5ldyBVUkwoXy5wK18udSg0MTEpLF8uYikpKTtmLm9ubWVzc2FnZT0oe2RhdGE6dn0pPT57InJlYWRpbmdfZW5kIj09PXYuZXZlbnQ/ZCh2Lndvcmtib29rKTp2'@;
put 'LmVycm9yP2godi5lcnJvcik6KGNvbnNvbGUuaW5mbygiV29ya2VyIGZhaWxlZCB0byBwYXJzZSB0aGUgWExTWCAtIGZhbGxiYWNrIHRvIG5vbiB3b3JrZXIgcGFyc2luZyIpLGQoa3UucmVhZCh2LGEpKSl9LGYucG9zdE1lc3NhZ2Uoe2RhdGE6bCxvcHRzOmF9KSxzZXRUaW1lb3V0KCgpPT5k'@;
put 'KGt1LnJlYWQobCxhKSksNmU1KX0pfXNlYXJjaERhdGFJbkV4Y2VsKGwsYSl7bGV0IGQsaCxmLHYsTT0iIixEPVtdLG5lPVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi5hLmhlYWRlckFycmF5XS5tYXAoYmU9PmJlLnRvTG93ZXJDYXNlKCkpLGNlPW5lLnJlZHVjZSgoYmUs'@;
put 'RWUpPT4oYmVbRWVdPS0xLGJlKSx7fSk7Zm9yKGxldCBiZSBvZiBsLlNoZWV0TmFtZXMpe2Q9dm9pZCAwLGg9dm9pZCAwLGNlPW5lLnJlZHVjZSgodG4sTW4pPT4odG5bTW5dPS0xLHRuKSx7fSk7bGV0IEVlPVtdO009YmU7Y29uc3QgQmU9bC5TaGVldHNbTV07aWYoT2JqZWN0LmtleXMoQmUp'@;
put 'LmZvckVhY2godG49Pntjb25zdCBNbj1CZVt0bl0udjtpZihNbiYmInN0cmluZyI9PXR5cGVvZiBNbil7Y29uc3QgQ3I9TW4udG9Mb3dlckNhc2UoKTtuZS5pbmRleE9mKENyKT4tMSYmKGNlW0NyXT10bixkfHwoZD10biksaD10bil9fSksLTE9PT1jZS5fX19fX2RlbGV0ZV9fdGhpc19fcmVj'@;
put 'b3JkX19fX18mJmRlbGV0ZSBjZS5fX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18sRWU9T2JqZWN0LmtleXMoY2UpLmZpbHRlcih0bj0+LTE9PT1jZVt0bl0pLEVlLmxlbmd0aD4wKXtELnB1c2goe3NoZWV0TmFtZTpNLG1pc3NpbmdIZWFkZXJzOkVlLm1hcCh0bj0+dG4udG9VcHBlckNh'@;
put 'c2UoKSl9KTtjb250aW51ZX1jb25zdCBxZT1PYmplY3Qua2V5cyhjZSk7bGV0IGR0LHJ0PVtdLHB0PVtdO3FlLnNvcnQoKHRuLE1uKT0+e2NvbnN0IENyPWEuaGVhZGVyUGtzLmluY2x1ZGVzKHRuKT8xOjA7cmV0dXJuKGEuaGVhZGVyUGtzLmluY2x1ZGVzKE1uKT8xOjApLUNyfSkuZm9yRWFj'@;
put 'aCh0bj0+e2NvbnN0IE1uPWNlW3RuXSxDcj1Nbi5tYXRjaCgvXEQrLyksR3I9TW4ubWF0Y2goL1xkKy8pLGdyPShDcj9DclswXTotMSl8fC0xLG9pPXBhcnNlSW50KChHcj9HclswXTotMSl8fC0xKSsxO2xldCBfaT0wO2lmKGR0KWZvcihsZXQgT249b2k7T248PWR0O09uKyspe2NvbnN0IEpu'@;
put 'PUJlW2Ake2dyfSR7T259YF07aWYoYS5oZWFkZXJQa3MuaW5jbHVkZXModG4pJiYodm9pZCAwPT09Sm58fHZvaWQgMD09PUpuLnYpKXtkdD1PbjticmVha31ydFtfaV18fHJ0LnB1c2goe30pLEpuJiYocnRbX2ldW3RuXT0ic3RyaW5nIj09dHlwZW9mIEpuLnY/Sm4udi50cmltKCk6Sm4udiks'@;
put 'cHRbX2ldfHxwdC5wdXNoKFtdKSxwdFtfaV0ucHVzaChKbj8/e3Y6IiJ9KSxfaSsrfWVsc2V7bGV0IE9uPW9pO2Zvcig7dm9pZCAwPT09ZHQ7KXtjb25zdCB6cj1gJHtncn0ke09ufWAsSm49QmVbenJdO2lmKCFKbnx8dm9pZCAwPT09Sm4udil7ZHQ9T24tMTticmVha31ydFtfaV18fHJ0LnB1'@;
put 'c2goe30pLHJ0W19pXVt0bl09Im4iPT09QmVbenJdLnQ/QmVbenJdLnY6QmVbenJdLnc/QmVbenJdLnc6InN0cmluZyI9PXR5cGVvZiBCZVt6cl0udj9CZVt6cl0udi50cmltKCk6QmVbenJdLnYscHRbX2ldfHxwdC5wdXNoKFtdKSxwdFtfaV0ucHVzaChKbj8/e3Y6IiJ9KSxPbisrLF9pKyt9'@;
put 'fWlmKGQmJmgpe2NvbnN0IE9uPWgubWF0Y2goL1xEKy8pO2Y9ZCx2PWAke09ufSR7ZHR9YH19KTtjb25zdCB2bj1bXTtsZXQgQ247cmV0dXJuIHJ0LmZvckVhY2goKHRuLE1uKT0+e2xldCBDcj0hMTthLmhlYWRlclBrcy5mb3JFYWNoKEdyPT57dm9pZCAwPT09dG5bR3IudG9Mb3dlckNhc2Uo'@;
put 'KV0mJihDcj0hMCl9KSxDciYmKHZuLnB1c2goTW4pLENufHwoQ249TW4pKX0pLENuPyhydC5zcGxpY2UoQ24sMS8wKSxwdC5zcGxpY2UoQ24sMS8wKSk6dm4uc29ydCgodG4sTW4pPT5Nbi10bikuZm9yRWFjaCh0bj0+e3J0LnNwbGljZSh0biwxKSxwdC5zcGxpY2UodG4sMSl9KSxwdC5sZW5n'@;
put 'dGg/e2ZvdW5kOntkYXRhOnJ0LGFycmF5RGF0YTpwdCxzaGVldE5hbWU6TSxzdGFydEFkZHJlc3M6ZixlbmRBZGRyZXNzOnYsaGVhZGVyczpxZX19Ont9fXJldHVybnttaXNzaW5nOkR9fXVwZGF0ZURhdGVUaW1lQ29scyhsLGEsZCl7aWYoZC5kYXRlSGVhZGVycy5sZW5ndGg+MCl7Y29uc3Qg'@;
put 'aD1bXTtkLmRhdGVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYoR2VlKE0udikpe2NvbnN0IEQ9amVlKE51bWJlcihNLnYpKTtNLnY9RC5nZXRGdWxs'@;
put 'WWVhcigpKyItIisoIjAiKyhELmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitELmdldERhdGUoKSkuc2xpY2UoLTIpfWVsc2UgaWYoTSYmTS52JiYtMT09PU0udi50b1N0cmluZygpLmluZGV4T2YoIjoiKSl7Y29uc3QgRD1uZXcgRGF0ZShNLnYpOyJJbnZhbGlkIERhdGUiIT09'@;
put 'RC50b1VUQ1N0cmluZygpJiYoTS52PVllZShEKSl9Zlt2XT1NfSl9KX1pZihkLnRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTtkLnRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JF'@;
put 'YWNoKHY9Pntjb25zdCBNPWZbdl07aWYoR2VlKE0udil8fHk2ZShNLnYpfHxNLnYuaW5jbHVkZXMoIkUtIikpe2NvbnN0IEQ9amVlKE51bWJlcihNLnYpKTtNLnY9YjZlKEQpfWZbdl09TX0pfSl9aWYoZC5kYXRlVGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtdO2QuZGF0ZVRpbWVIZWFk'@;
put 'ZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYoR2VlKE0udil8fHk2ZShNLnYpKXtjb25zdCBEPWplZShOdW1iZXIoTS52KSk7TS52PVllZShEKSsiICIrYjZl'@;
put 'KEQpfWVsc2V7aWYoLTE9PT1NLnYuaW5kZXhPZigiICIpJiYtMSE9PU0udi5pbmRleE9mKCI6Iikpe2xldCBaPU0udi5zdWJzdHJpbmcoMCxNLnYuaW5kZXhPZigiOiIpKTtaPVorIiAiK00udi5zdWJzdHJpbmcoTS52LmluZGV4T2YoIjoiKSsxKSxNLnY9Wn1jb25zdCBEPW5ldyBEYXRlKE0u'@;
put 'dik7IkludmFsaWQgRGF0ZSIhPT1ELnRvVVRDU3RyaW5nKCkmJihNLnY9WWVlKEQpKyIgIisoYz0+e2xldCBsPSgiMCIrYy5nZXRIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIwIitjLmdldE1pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixsKz0oIjAiK2MuZ2V0U2Vjb25kcygp'@;
put 'KS5zbGljZSgtMiksbH0pKEQpKX1mW3ZdPU19KX0pfXJldHVybiBhfXVwZGF0ZVhMUnVsZUNvbHMobCxhLGQpe2lmKGQueGxSdWxlcy5sZW5ndGg+MCl7Y29uc3QgaD1bXTtkLnhsUnVsZXMuZm9yRWFjaChmPT57LTEhPT1sLmluZGV4T2YoZi5YTF9DT0xVTU4pJiYoZi5pbmRleD1sLmluZGV4'@;
put 'T2YoZi5YTF9DT0xVTU4pLGgucHVzaChmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3YuaW5kZXhdOyJGT1JNVUxBIj09PXYuWExfUlVMRSYmImYiaW4gTSYmKCJuIj09PU0udD9NLnY9Ij0iK00uZjpNLnc9Ij0iK00uZiksZlt2XT1NfSl9KX1yZXR1cm4gYX10'@;
put 'b0JzdHIobCl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkobCksZD0iIixoPWEuYnl0ZUxlbmd0aDtmb3IobGV0IGY9MDtmPGg7ZisrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtmXSk7cmV0dXJuIGR9fWxldCBTNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5leGNlbFBh'@;
put 'c3N3b3JkTW9kYWxTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkPWY9Pm5ldyBQcm9taXNlKCh2LE0pPT57dGhp'@;
put 'cy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLm9wZW4oZikuc3Vic2NyaWJlKEQ9Pnt2KEQucGFzc3dvcmQpfSl9KX1wYXJzZUV4Y2VsRmlsZShhLGQsaCl7cmV0dXJuIG5ldyBDNmUoe2xpY2VuY2VTdGF0ZTp0aGlzLmxpY2VuY2VTdGF0ZX0pLnBhcnNlU3ByZWFkc2hlZXRGaWxlKGEsdGhp'@;
put 'cy5wcm9tcHRFeGNlbFBhc3N3b3JkLGQsaCl9eGxzeFJlYWRGaWxlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2NvbnN0IGY9bmV3IEM2ZSh7bGljZW5jZVN0YXRlOnRoaXMubGljZW5jZVN0YXRlfSk7bGV0IHY9bmV3IEZpbGVSZWFkZXI7di5vbmxvYWQ9TT0+e2YueHNseFN0YXJ0'@;
put 'UmVhZGluZyhNLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZCkudGhlbihEPT57ZChEKX0pLmNhdGNoKEQ9PntoKEQpfSl9LHYucmVhZEFzQXJyYXlCdWZmZXIoYSl9KX1wYXJzZUV4Y2VsU2hlZXROYW1lcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFBy'@;
put 'b21pc2UoKGgsZik9Pntjb25zdCB2PW5ldyBGaWxlUmVhZGVyO2lmKCFhKXJldHVybiBjb25zb2xlLndhcm4oImZpbGUgaXMgbWlzc2luZyIpLGgoe3NoZWV0TmFtZXM6W119KTt2Lm9ubG9hZD1mdW5jdGlvbigpe3ZhciBNPWVlKGZ1bmN0aW9uKihEKXtpZighRD8udGFyZ2V0KXJldHVybiB2'@;
put 'b2lkIGNvbnNvbGUud2FybigiRmlsZSByZWFkZXIgZXZlbnQudGFyZ2V0IGlzIG1pc3NpbmciKTtsZXQgWixjZSxuZT0hMTtjb25zdCBiZT1ELnRhcmdldC5yZXN1bHQ7dHJ5e1o9a3UucmVhZChiZSx7Ym9va1NoZWV0czohMCx0eXBlOiJiaW5hcnkifSl9Y2F0Y2goRWUpe2lmKCFFZS5tZXNz'@;
put 'YWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikpcmV0dXJuIGYoIkVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKTt7bmU9ITA7bGV0IEJlPSExO2Zvcig7bmU7KXtpZihjZT15aWVsZCBkLnByb21wdEV4Y2VsUGFzc3dvcmQoe2Vycm9yOkJlfSksIWNlKXJldHVybiBuZT0hMSxm'@;
put 'KCJObyBwYXNzd29yZCBwcm92aWRlZCIpO3RyeXtaPWt1LnJlYWQoYmUse2Jvb2tTaGVldHM6ITAsdHlwZToiYmluYXJ5IixwYXNzd29yZDpjZX0pLG5lPSExLEJlPSExfWNhdGNoKHFlKXtCZT0hMCxxZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIil8fChuZT0h'@;
put 'MSl9aWYoIWNlKXJldHVybiBmKCJJbnZhbGlkIHBhc3N3b3JkLCBmYWlsZWQgdG8gZGVjcnlwdCB0aGUgZmlsZSIpfX19aWYoIVopcmV0dXJuIGYoIkVycm9yIHBhcnNpbmcgdGhlIHdvcmtib29rIik7dHJ5e3JldHVybiBoKHtzaGVldE5hbWVzOlouU2hlZXROYW1lcyxwYXNzd29yZDpjZX0p'@;
put 'fWNhdGNoKEVlKXtjb25zb2xlLmVycm9yKEVlKX19KTtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIE0uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx2Lm9uZXJyb3I9ZnVuY3Rpb24oTSl7Y29uc29sZS5sb2coTSl9LHYucmVhZEFzQmluYXJ5U3RyaW5nKGEpfSl9KSgpfWJ5dGVzVG9NQihh'@;
put 'KXtyZXR1cm4gcGFyc2VGbG9hdCgoYS8xMDQ4NTc2KS50b0ZpeGVkKDIpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cihzaGUpLHhyKHZjKSx4cih1MSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PW9uKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c'@;
put 'dTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFk5PXZvaWQgMCxybXQ9WyJlbi1HQiIsW1siYSIsInAiXSxbImFtIiwicG0iXSxZOV0sW1siYW0iLCJwbSJdLFk5LFk5XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJU'@;
put 'dWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSxZOSxbWyJKIiwiRiIsIk0iLCJBIiwiTSIs'@;
put 'IkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcHQiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1'@;
put 'Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLFk5LFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMSxbNiwwXSxbImRkL01NL3kiLCJkIE1NTSB5IiwiZCBNTU1NIHkiLCJFRUVFLCBkIE1NTU0g'@;
put 'eSJdLFsiSEg6bW0iLCJISDptbTpzcyIsIkhIOm1tOnNzIHoiLCJISDptbTpzcyB6enp6Il0sWyJ7MX0sIHswfSIsWTksInsxfSAnYXQnIHswfSIsWTldLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6Il0sWyIjLCMjMC4jIyMi'@;
put 'LCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiR0JQIiwiXHhhMyIsIkJyaXRpc2ggUG91bmQiLHtKUFk6WyJKUFx4YTUiLCJceGE1Il0sVVNEOlsiVVMkIiwiJCJdfSwibHRyIixmdW5jdGlvbiBubXQoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9TdHJp'@;
put 'bmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1hJiYwPT09ZD8xOjV9XSxpbXQ9WyJpbnB1dCJdLG9tdD1bIioiXSxhbXQ9KGMsbCk9Pih7IndpZHRoLnB4IjpjLCJtYXgtaGVpZ2h0LnB4IjpsfSk7ZnVuY3Rpb24gc210KGMsbCl7aWYoMSZjJiYoZGUoMCwi'@;
put 'b3B0aW9uIiw3KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLElyKCIgIixhLmxvYWRpbmdNb3JlPyJMb2FkaW5nLi4uIjoiTE9BRCBNT1JFIiwiICIpfX1sZXQgTTZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jZHI9YSx0aGlzLmlucHV0SWQ9IiIsdGhp'@;
put 'cy5wbGFjZWhvbGRlcj0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmF1dG9jb21wbGV0ZT0ib2ZmIix0aGlzLnRhYmluZGV4PSIiLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxvYWRNb3JlPSExLHRoaXMub25JbnB1'@;
put 'dEtleWRvd249bmV3IFhyLHRoaXMub25JbnB1dENoYW5nZT1uZXcgWHIsdGhpcy52YWx1ZUNoYW5nZT1uZXcgWHIsdGhpcy5vbkxvYWRpbmdNb3JlPW5ldyBYcix0aGlzLmRhdGFsaXN0T3Blbj0hMSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheT0xNTAsdGhpcy5hZnRlck9wZW5Mb2NrPSExLHRo'@;
put 'aXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuaW5wdXRDbGllbnRSZWN0PXt9LHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5sb2FkaW5nTW9yZT0hMX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5jYWxjdWxhdGVJbnB1dFBvc2l0aW9u'@;
put 'KCl9LDUwMCl9b25JbnB1dEZpcmVkKGEsZCxoKXt0aGlzLm9wZW5EYXRhbGlzdCgiY2xpY2siIT09aCksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLmZpbHRlck9wdGlvbnNMaXN0KCksKCF0aGlzLmVtaXRPbmx5U2VsZWN0ZWR8fGQpJiYodGhpcy5vbklucHV0Q2hhbmdlLmVtaXQo'@;
put 'e3RhcmdldDp7dmFsdWU6dGhpcy52YWx1ZX19KSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSkpfW9uSW5wdXRDbGljayhhKXt0aGlzLm9wZW5EYXRhbGlzdCgpfW9wZW5EYXRhbGlzdChhPSEwKXt0aGlzLmRhdGFsaXN0T3Blbj0hMCxhJiYodGhpcy5hZnRlck9wZW5Mb2NrPSEw'@;
put 'LHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5hZnRlck9wZW5Mb2NrPSExfSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheSkpfWNsb3NlRGF0YWxpc3QoKXtjbGVhclRpbWVvdXQodGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0KSx0aGlzLmFm'@;
put 'dGVyT3BlbkxvY2s9ITEsdGhpcy5kYXRhbGlzdE9wZW49ITF9cmVzZXREYXRhbGlzdEZpbHRlcigpe3RoaXMuZmlsdGVyT3B0aW9uc0xpc3QoITApfW9uSW5wdXRGb2N1c2luKGEpe3RoaXMuaW5wdXRGb2N1c2VkPSEwfW9uSW5wdXRGb2N1c291dChhKXt0aGlzLmlucHV0Rm9jdXNlZD0hMSx0'@;
put 'aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uSW5wdXRNb3VzZWVudGVyKGEpe3RoaXMuaW5wdXRDbGllbnRSZWN0LndpZHRofHx0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1maWx0ZXJPcHRpb25zTGlzdChhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRh'@;
put 'bGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTtpZigwPT09dGhpcy52YWx1ZS5sZW5ndGgpe2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9aWYoYSl7Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRk'@;
put 'ZW4iKTtjb250aW51ZX1jb25zdCB2PWYuaW5uZXJUZXh0fHwiIixNPWYudmFsdWV8fCIiOyh2K00pPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudmFsdWUudG9Mb3dlckNhc2UoKSk/Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTpmLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpfX1z'@;
put 'ZXRUb0Nsb3NlRGF0YWxpc3QoKXt0aGlzLmRhdGFsaXN0Q2xvc2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlfHx0aGlzLmFmdGVyT3BlbkxvY2t8fCh0aGlzLmNsb3NlRGF0YWxpc3QoKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMucmVz'@;
put 'ZXREYXRhbGlzdEZpbHRlcigpKX0sMTAwKX1jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl7Y29uc3QgZD10aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLndpZHRoPjAmJmQuaGVpZ2h0PjAmJih0aGlzLmlucHV0Q2xpZW50UmVjdD17d2lk'@;
put 'dGg6ZC53aWR0aCxib3R0b206ZC5ib3R0b219KSx0aGlzLmlubmVySGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodH1vbkRhdGFMaXN0TW91c2VFbnRlcihhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSEwfW9uRGF0YUxpc3RNb3VzZUxlYXZlKGEpe3RoaXMucHJldmVudERhdGFsaXN0Q2xv'@;
put 'c2U9ITEsdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRGF0YUxpc3RTY3JvbGwoYSl7dGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1vbkRhdGFMaXN0Q2xpY2soYSl7Y29uc3QgZD1hLnRhcmdldDsibG9hZC1tb3JlIiE9PWQuZGF0YXNldD8udHlwZT8iT1BUSU9O'@;
put 'IiE9PWQudGFnTmFtZXx8dGhpcy5zZXRPcHRpb25WYWx1ZShkLmlubmVyVGV4dCxkLnZhbHVlKTp0aGlzLmxvYWRNb3JlKCl9bG9hZE1vcmUoKXt0aGlzLm9uTG9hZGluZ01vcmUuZW1pdCh7bG9hZE1vcmVGaW5pc2hlZDphPT57dGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmVuYWJsZUxvYWRN'@;
put 'b3JlPWF9fSksdGhpcy5sb2FkaW5nTW9yZT0hMH1zZXRPcHRpb25WYWx1ZShhLGQpeyhhfHxkKSYmKGR8fChkPWEpKSxkJiYodGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLnZhbHVlPWQsdGhpcy5vbklucHV0RmlyZWQobnVsbCwhMCwiY2xpY2siKSx0aGlzLnNldFRvQ2xvc2VE'@;
put 'YXRhbGlzdCgpKX1vbk1haW5LZXlkb3duKGEpe3N3aXRjaChhLmtleSl7Y2FzZSJBcnJvd1VwIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoInVwIik7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygiZG93biIpO2JyZWFrO2Nhc2UiRW50ZXIiOnRoaXMu'@;
put 'c2VsZWN0Rm9jdXNlZE9wdGlvbigpfX1vbklucHV0S2V5dXAoYSl7cmV0dXJuIXRoaXMuZGF0YWxpc3RPcGVufHwoIkVzY2FwZSI9PT1hLmtleT8oYS5zdG9wUHJvcGFnYXRpb24oKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCksITEpOnZv'@;
put 'aWQgMCl9dW5zZWxlY3RBbGxPcHRpb25zKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbmApO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpfXNlbGVjdEZv'@;
put 'Y3VzZWRPcHRpb24oKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uLmZvY3VzZWRgKTthJiZ0aGlzLm9uRGF0YUxpc3RDbGljayh7dGFyZ2V0OmF9KSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfWdldE9wdGlvbnNNb3Zl'@;
put 'Rm9jdXMoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbjpub3QoLmhpZGRlbilgKTtsZXQgaD0wO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCB2PWRbZl07aWYodi5jbGFzc0xpc3QuY29udGFpbnMo'@;
put 'ImZvY3VzZWQiKSl7aD0iZG93biI9PT1hP2YrMTpmLTEsaDwwJiYoaD1kLmxlbmd0aC0xKSxoPmQubGVuZ3RoLTEmJihoPTApLHYuY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpO2JyZWFrfX1kW2hdLmNsYXNzTGlzdC5hZGQoImZvY3VzZWQiKX1vblJlc2l6ZShhKXt0aGlzLmNhbGN1bGF0'@;
put 'ZUlucHV0UG9zaXRpb24oKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh4cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9jb21wbGV0ZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxo'@;
put 'KXtpZigxJmQmJm5hKGltdCw1KSwyJmQpe2xldCBmO3hpKGY9RWkoKSkmJihoLmlucHV0RWxlbWVudD1mLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoInJlc2l6ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25SZXNpemUodil9LDAscUMpfSxpbnB1dHM6e2lu'@;
put 'cHV0SWQ6ImlucHV0SWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGF1dG9jb21wbGV0ZToiYXV0b2NvbXBsZXRlIix0YWJpbmRleDoidGFiaW5kZXgiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2Vs'@;
put 'ZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e29uSW5wdXRLZXlkb3duOiJvbklucHV0S2V5ZG93biIsb25JbnB1dENoYW5nZToib25JbnB1dENoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbkxvYWRpbmdNb3JlOiJvbkxvYWRpbmdNb3Jl'@;
put 'In0sbmdDb250ZW50U2VsZWN0b3JzOm9tdCxkZWNsczo5LHZhcnM6MTUsY29uc3RzOltbImlucHV0IiwiIl0sWyJvcHRpb25zIiwiIl0sWzEsImF1dG9jb21wbGV0ZS13cmFwcGVyIiwzLCJrZXlkb3duIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIs'@;
put 'IiIsInRhYmluZGV4IiwiMCIsMSwiaW5wdXQtdmFsIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2xpY2siLCJtb3VzZWVudGVyIiwiZm9jdXMiLCJmb2N1c291dCIsImtleXVwIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il0sWzEsImRhdGFsaXN0'@;
put 'IiwzLCJjbGljayIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwic2Nyb2xsIiwibmdTdHlsZSIsImlkIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLCJjbGFzcyIsImxvYWQtbW9yZSIsNCwibmdJZiJdLFsiZGF0YS10eXBlIiwibG9hZC1tb3JlIiwxLCJsb2FkLW1vcmUiXV0sdGVtcGxh'@;
put 'dGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtsbygpLGRlKDAsImRpdiIsMiksRnQoImtleWRvd24iLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uTWFpbktleWRvd24oTSkpfSksZGUoMSwiaW5wdXQiLDMsMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KE0pe3JldHVybiB3dChmKSxiaShoLnZhbHVlLE0pfHwoaC52YWx1ZT1NKSxDdChNKX0pLEZ0KCJjbGljayIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dENsaWNrKE0pKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0'@;
put 'RmlyZWQoTSkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRNb3VzZWVudGVyKE0pKX0pKCJmb2N1cyIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dEZvY3VzaW4oTSkpfSkoImZvY3Vzb3V0IixmdW5jdGlvbihNKXtyZXR1'@;
put 'cm4gd3QoZiksQ3QoaC5vbklucHV0Rm9jdXNvdXQoTSkpfSkoImtleXVwIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0S2V5dXAoTSkpfSksaGUoKSxHdCgzLCJkaXYiLDQpLGRlKDQsImRpdiIsNSksRnQoImNsaWNrIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3Qo'@;
put 'aC5vbkRhdGFMaXN0Q2xpY2soTSkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RNb3VzZUVudGVyKE0pKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkRhdGFMaXN0TW91c2VMZWF2ZShNKSl9KSgi'@;
put 'c2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkRhdGFMaXN0U2Nyb2xsKE0pKX0pLGRlKDUsImRpdiIsbnVsbCwxKSxZcig3KSxoZSgpLG10KDgsc210LDIsMSwib3B0aW9uIiw2KSxoZSgpKCl9aWYoMiZkKXtjb25zdCBmPXZvKDYpO2ZlKCkseGUoImlkIixoLmlucHV0'@;
put 'SWQpKCJwbGFjZWhvbGRlciIsaC5wbGFjZWhvbGRlcikscGkoIm5nTW9kZWwiLGgudmFsdWUpLHhlKCJkaXNhYmxlZCIsaC5kaXNhYmxlZCksZnIoImxpc3QiLCJkYXRhbGlzdF8iK2guaW5wdXRJZCksZmUoMiksVHIoImhpZGRlbiIsIWguZGF0YWxpc3RPcGVuKSxmZSgpLFRyKCJoaWRkZW4i'@;
put 'LCFoLmRhdGFsaXN0T3BlbikseGUoIm5nU3R5bGUiLGxwKDEyLGFtdCxoLmlucHV0Q2xpZW50UmVjdC53aWR0aCxoLmlubmVySGVpZ2h0JiZoLmlucHV0Q2xpZW50UmVjdC5ib3R0b20/aC5pbm5lckhlaWdodC1oLmlucHV0Q2xpZW50UmVjdC5ib3R0b206dm9pZCAwKSkoImlkIiwiZGF0YWxp'@;
put 'c3RfIitoLmlucHV0SWQpLGZlKDQpLHhlKCJuZ0lmIixmLmNoaWxkcmVuLmxlbmd0aD4wJiZoLmVuYWJsZUxvYWRNb3JlKX19LGRlcGVuZGVuY2llczpbeW8sZWFlLFlmLEdmLGVjLG5sLEdzXSxzdHlsZXM6WyIuaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MHB4O2JhY2tn'@;
put 'cm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzk5OTk5OX1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9aW5wdXRbX25nY29udGVudC0lQ09NUCVdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2lu'@;
put 'LXRvcDotNXB4fSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmRhdGFsaXN0e2JhY2tncm91bmQ6IzIxMzMzYjtib3JkZXI6MXB4IHNvbGlkICM1NzU3NTd9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSBpbnB1dHtjb2xvcjojZmZmfSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmRhdGFsaXN0IG9wdGlv'@;
put 'bntjb2xvcjojZmZmfSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5kYXRhbGlzdHtiYWNrZ3JvdW5kOiNmZmZ9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3otaW5kZXg6'@;
put 'MTUwMH0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtib3gtc2hhZG93OjAgM3B4IDEwcHggLTFweCAjMDAwMDAwMmI7b3ZlcmZsb3c6YXV0bzt6LWluZGV4OjIwMDB9LmF1dG9jb21w'@;
put 'bGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV0gICAgIG9wdGlvbntwYWRkaW5nOjVweCAxMHB4O2N1cnNvcjpwb2ludGVyfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgICBvcHRpb246aG92ZXJ7YmFja2dyb3VuZDojMDAwMDAwMGZ9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV0gICAgIG9wdGlvbi5mb2N1c2Vke2JhY2tncm91bmQ6IzAwMDAwMDBmfS5h'@;
put 'dXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9hZC1tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2fSJdfSl9fXJldHVybiBjfSkoKSxsbXQ9KCgpPT57Y2xhc3MgY3t0cmFuc2Zvcm0o'@;
put 'YSxkKXtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEubGVuZ3RoPDEpcmV0dXJuIGE7c3dpdGNoKGQpe2Nhc2UiZGF0ZSI6cmV0dXJuIE9hKGEsIkRETU1NWVlZWTpoaDptbTpzcyIpLmZvcm1hdCgiREQvTU0vWVlZWSIpO2Nhc2UidGltZSI6e2lmKCJzdHJpbmciIT10eXBlb2YgYSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGltZS4gVmFsdWUgaXMgbm90IHN0cmluZy4iKTtjb25zdCBoPXBhcnNlSW50KGEuc3BsaXQoIjoiKVswXSksZj1wYXJzZUludChhLnNwbGl0KCI6IilbMV0pLHY9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzJdKTtyZXR1cm5gJHtoPDEwPyIwIitoOmh9'@;
put 'OiR7ZjwxMD8iMCIrZjpmfToke3Y8MTA/IjAiK3Y6dn1gfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/YTphLnRvU3RyaW5nKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6ImRhdGVU'@;
put 'aW1lRm9ybWF0dGVyIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgY210PVsiaW5wdXQiXSx1bXQ9WyIqIl07ZnVuY3Rpb24gZG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksTGUoMSwiIC8gIiksZGUoMiwic3BhbiIsNSksRnQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vbkNoYW5nZUxhYmVsKCJzZWNvbmQiKSl9KSxMZSgzKSxoZSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLFRyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwic2Vjb25kIj09PWEubGFiZWxTZWxlY3RlZCksZmUoKSx3cihhLnNlY29u'@;
put 'ZExhYmVsKX19ZnVuY3Rpb24gaG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwibGFiZWwiLDQpKDEsInNwYW4iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkNoYW5nZUxhYmVsKCJmaXJzdCIpKX0pLExlKDIpLGhlKCksbXQoMyxkbXQs'@;
put 'NCwzLCJuZy1jb250YWluZXIiLDYpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7VHIoInNlY29uZExhYmVsQWN0aXZlIixhLnNlY29uZExhYmVsJiZhLnNlY29uZExhYmVsLmxlbmd0aD4wKSxmZSgpLFRyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwiZmlyc3QiPT09YS5sYWJlbFNlbGVjdGVk'@;
put 'KSxmZSgpLHdyKGEubGFiZWwpLGZlKCkseGUoIm5nSWYiLGEuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBmbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJjbHItZGF0ZS1jb250YWluZXIiKSgyLCJpbnB1dCIsNyksUXMoMywiZGF0ZVRpbWVGb3JtYXR0ZXIiKSxGdCgi'@;
put 'Y2xyRGF0ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25EYXRlSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSks'@;
put 'Q3QoT2UoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91'@;
put 'dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbklucHV0TW91c2VPdXQoKSl9KSxoZSgpKCksdWkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgyKSx4ZSgiaWQiLGEuaW5wdXRJZCkoInBsYWNlaG9sZGVyIixqOCgzLDUsYS50ZW1wLCJkYXRlIikpKCJjbHJEYXRlIixhLnZh'@;
put 'bHVlKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLGZyKCJsaXN0IiwiZGF0YWxpc3RfIithLmlucHV0SWQpfX1mdW5jdGlvbiBwbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJpbnB1dCIsOCksRnQoImlucHV0IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2Uo'@;
put 'KS5vbklucHV0RmlyZWQoaCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2luIixmdW5jdGlvbihoKXty'@;
put 'ZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkZvY3VzaW5JbnB1dChoKSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25JbnB1dE1vdXNlT3V0'@;
put 'KCkpfSksaGUoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoInZhbHVlIixhLnZhbHVlKSgiaWQiLGEuaW5wdXRJZCkoImRpc2FibGVkIixhLmRpc2FibGVkKSxmcigibGlzdCIsImRhdGFsaXN0XyIrYS5pbnB1dElkKX19ZnVuY3Rpb24gZ210KGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPUxuKCk7Y2koMCksZGUoMSwiYXBwLWF1dG9jb21wbGV0ZSIsOSwwKSxGdCgib25JbnB1dENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25JbnB1dEZpcmVkKGgpKX0pKCJvbkxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5h'@;
put 'dXRvY29tcGxldGVMb2FkaW5nTW9yZShoKSl9KSxZcigzKSxoZSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgiaW5wdXRJZCIsYS5pbnB1dElkKSgidmFsdWUiLChudWxsPT1hLnZhbHVlP251bGw6YS52YWx1ZS50b1N0cmluZygpKXx8IiIpKCJlbmFibGVMb2FkTW9yZSIs'@;
put 'YS5lbmFibGVMb2FkTW9yZSkoImVtaXRPbmx5U2VsZWN0ZWQiLGEuZW1pdE9ubHlTZWxlY3RlZCkoImRpc2FibGVkIixhLmRpc2FibGVkKX19bGV0IHg2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5pbnB1dElkPSIiLHRoaXMudmFsdWU9IiIsdGhpcy5kaXNhYmxlZD0hMSx0'@;
put 'aGlzLnR5cGU9InRleHQiLHRoaXMuZGlzYWJsZVNvZnRzZWxlY3Q9ITEsdGhpcy5lbWl0T25seVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy52YWx1ZUNoYW5nZT1uZXcgWHIsdGhpcy5vbklucHV0RXZlbnQ9bmV3IFhyLHRoaXMuZm9jdXNpbklucHV0PW5ldyBYcix0'@;
put 'aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU9bmV3IFhyLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZT1uZXcgWHIsdGhpcy50ZW1wPSIiLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMubGFiZWxTZWxlY3RlZD0iZmlyc3QifW5nT25DaGFuZ2VzKGEpe2EudmFsdWUmJmEudmFsdWUuY3Vy'@;
put 'cmVudFZhbHVlIT09YS52YWx1ZS5wcmV2aW91c1ZhbHVlJiZ0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoYS52YWx1ZS5jdXJyZW50VmFsdWUpfW5nT25Jbml0KCl7fWF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEpe3RoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZS5lbWl0KGEpfW9uSW5wdXRG'@;
put 'aXJlZChhKXtjb25zdCBkPWEudGFyZ2V0LnZhbHVlO3RoaXMudGVtcD1kLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChkKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGEpfW9uRGF0ZUlucHV0RmlyZWQoYSl7dGhpcy50ZW1wPWEsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGEpLHRoaXMub25JbnB1dEV2'@;
put 'ZW50LmVtaXQoYSl9b25JbnB1dE1vdXNlT3V0KCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRoaXMudmFsdWU9dGhpcy50ZW1wLHRoaXMudGVtcD0iIil9b25JbnB1dE1vdXNlT3Zlcigpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnRlbXA9dGhpcy52YWx1ZT90aGlzLnZhbHVl'@;
put 'OiIiLHRoaXMudmFsdWU9IiIpfW9uRm9jdXNpbklucHV0KGEpe3RoaXMuZm9jdXNpbklucHV0LmVtaXQoYSl9b25DaGFuZ2VMYWJlbChhKXt0aGlzLmxhYmVsU2VsZWN0ZWQ9YSx0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdCgiZmlyc3QiPT09YT90aGlzLmxhYmVsOnRoaXMuc2Vjb25k'@;
put 'TGFiZWwpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNvZnQtc2VsZWN0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmbmEoY210LDUp'@;
put 'LDImZCl7bGV0IGY7eGkoZj1FaSgpKSYmKGguaW5wdXRFbGVtZW50PWYuZmlyc3QpfX0saW5wdXRzOntpbnB1dElkOiJpbnB1dElkIixsYWJlbDoibGFiZWwiLHNlY29uZExhYmVsOiJzZWNvbmRMYWJlbCIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGRp'@;
put 'c2FibGVTb2Z0c2VsZWN0OiJkaXNhYmxlU29mdHNlbGVjdCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9ubHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7dmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbklucHV0RXZlbnQ6Im9uSW5wdXRFdmVu'@;
put 'dCIsZm9jdXNpbklucHV0OiJmb2N1c2luSW5wdXQiLG9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU6Im9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLHNlbGVjdGVkTGFiZWxDaGFuZ2U6InNlbGVjdGVkTGFiZWxDaGFuZ2UifSxmZWF0dXJlczpbd2xdLG5nQ29udGVudFNlbGVjdG9yczp1bXQs'@;
put 'ZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbImlucHV0IiwiIl0sWyJjbGFzcyIsImNsci1jb250cm9sLWxhYmVsIiwzLCJzZWNvbmRMYWJlbEFjdGl2ZSIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMywiY2xpY2si'@;
put 'XSxbNCwibmdJZiJdLFsidHlwZSIsImRhdGUiLCJjbHJEYXRlIiwiIiwzLCJjbHJEYXRlQ2hhbmdlIiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImlkIiwicGxhY2Vob2xkZXIiLCJjbHJEYXRlIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJ0aW1l'@;
put 'Iiwic3RlcCIsIjEiLDEsImlucHV0LXZhbCIsMywiaW5wdXQiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIs'@;
put 'MSwiaW5wdXQtdmFsIiwzLCJvbklucHV0Q2hhbmdlIiwib25Mb2FkaW5nTW9yZSIsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwiZW1pdE9ubHlTZWxlY3RlZCIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYobG8oKSxtdCgwLGhtdCw0LDYsImxh'@;
put 'YmVsIiwxKSxjaSgxLDIpLG10KDIsZm10LDQsOCwibmctY29udGFpbmVyIiwzKSgzLHBtdCwyLDQsIm5nLWNvbnRhaW5lciIsMykoNCxnbXQsNCw1LCJuZy1jb250YWluZXIiLDMpLHVpKCkpLDImZCYmKHhlKCJuZ0lmIixoLmxhYmVsKSxmZSgpLHhlKCJuZ1N3aXRjaCIsaC50eXBlKSxmZSgp'@;
put 'LHhlKCJuZ1N3aXRjaENhc2UiLCJkYXRlIiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwidGltZSIpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsInRleHQiKSl9LGRlcGVuZGVuY2llczpbeW8sUzIsY3AsZHMsV3gsWEwsb0csTTZlLGxtdF0sc3R5bGVzOlsiLmlucHV0LXZhbFtfbmdjb250ZW50'@;
put 'LSVDT01QJV17Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7b3V0bGluZTpub25lfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXTo6LXdlYmtpdC1jYWxlbmRh'@;
put 'ci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi10b3A6LTVweH1jbHItZGF0ZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6MnB4IWltcG9ydGFudH1jbHItZGF0ZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWlu'@;
put 'cHV0LWdyb3VwLWljb24tYWN0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi01cHh9Y2xyLWRhdGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcnttYXJnaW4tcmlnaHQ6MjBweDttYXJnaW4tdG9wOi01'@;
put 'cHh9bGFiZWwuc2Vjb25kTGFiZWxBY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV06bm90KC52YWx1ZS10eXBlLXNlbGVjdGVkKXt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdoO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6LjZ9Il19KX19cmV0dXJu'@;
put 'IGN9KSgpLFN3PSgoKT0+e2NsYXNzIGN7c2V0IG5nVmFyKGEpe3RoaXMuY29udGV4dC4kaW1wbGljaXQ9dGhpcy5jb250ZXh0Lm5nVmFyPWEsdGhpcy5oYXNWaWV3fHwodGhpcy52Y1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZix0aGlzLmNvbnRleHQpLHRoaXMuaGFz'@;
put 'Vmlldz0hMCl9Y29uc3RydWN0b3IoYSxkKXt0aGlzLnRlbXBsYXRlUmVmPWEsdGhpcy52Y1JlZj1kLHRoaXMuY29udGV4dD17JGltcGxpY2l0Om51bGwsbmdWYXI6bnVsbH0sdGhpcy5oYXNWaWV3PSExfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp'@;
put 'KEdlKFNsKSxHZShEYSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdWYXIiLCIiXV0saW5wdXRzOntuZ1ZhcjoibmdWYXIifX0pfX1yZXR1cm4gY30pKCksbW10PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxwZXJTZXJ2'@;
put 'aWNlPWF9dHJhbnNmb3JtKGEsZD0iZGF5cyIsaD0hMSl7aWYodm9pZCAwPT09YSYmKGE9IiIpLCJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSwwPT09YS5sZW5ndGgpe2lmKCJkYXlzIj09PWQpcmV0dXJuIG51bGw7aWYoInNlY29uZHMiPT09ZClyZXR1cm4gaD8iMTE6MDA6'@;
put 'MDAiOm51bGx9bGV0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRTYXNEYXlzVG9Kc0RhdGUoYSxkKTtpZig0PT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3QgTT1hLnNwbGl0KCI6Iik7Zj1uZXcgRGF0ZShNWzBdKSxmLnNldEhvdXJzKHBhcnNlSW50KE1bMV0pKSxmLnNldE1pbnV0'@;
put 'ZXMocGFyc2VJbnQoTVsyXSkpLGYuc2V0U2Vjb25kcyhwYXJzZUludChNWzNdKSl9ZWxzZSBpc05hTihOdW1iZXIoYSkpJiYoZj1uZXcgRGF0ZShhKSk7bGV0IHY9YCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0SG91cnMoKS50b1N0cmluZygpKX06JHt0aGlzLmhl'@;
put 'bHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkpfWA7cmV0dXJuIGg/djpmfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihk'@;
put 'KXtyZXR1cm4gbmV3KGR8fGMpKEdlKFl1LDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9bGwoe25hbWU6InNhc1RvSnNEYXRlIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCksdm10PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxwZXJTZXJ2aWNlPWF9dHJh'@;
put 'bnNmb3JtKGEpe2lmKG51bGw9PWF8fCIiPT09YSlyZXR1cm4iIjtsZXQgZCxoLGY7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYzPT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3Qgdj1hLnNwbGl0KCI6Iik7ZD12WzBdLGg9dlsxXSxmPXZbMl19ZWxzZSJudW1iZXIiIT10eXBlb2YgYSYmKGE9'@;
put 'cGFyc2VJbnQoYSkpLGQ9TWF0aC5mbG9vcihhLzM2MDApLGg9TWF0aC5mbG9vcihhJTM2MDAvNjApLGY9TWF0aC5mbG9vcihhJTM2MDAlNjApO3JldHVybmAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhkKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8o'@;
put 'aCl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYpfWB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoWXUsMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToic2Vjb25kc1BhcnNlciIsdHlwZTpjLHB1'@;
put 'cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGJtdD0oYyxsLGEpPT4oe3F1ZXJ5OmMscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmF9KSx5bXQ9KGMsbCxhLGQpPT4oe3F1ZXJ5OmMscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSksX210PShjLGwsYSxkKT0+KHty'@;
put 'YW5nZToic3RhcnQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4OjAscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSksd210PShjLGwsYSxkKT0+KHtyYW5nZToiZW5kIixxdWVyeTpjLHF1ZXJ5VmFsdWVJbmRleDoxLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlz'@;
put 'RGF0ZVRpbWU6ZH0pO2Z1bmN0aW9uIENtdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMjIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgic2VsZWN0ZWQiLE9lKCkubG9naWNPcGVyYXRvcnNbMF0pLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gU210'@;
put 'KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyMyksTGUoMSwiXG4gICAgICAgICIpLEd0KDIsInByb2dyZXNzIiksTGUoMywiXG4gICAgICAiKSxoZSgpKX1mdW5jdGlvbiBNbXQoYyxsKXsxJmMmJkd0KDAsImRpdiIpfWZ1bmN0aW9uIHhtdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMjIp'@;
put 'LExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgic2VsZWN0ZWQiLE9lKDIpLmxvZ2ljT3BlcmF0b3JzWzBdKSxmZSgpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIEVtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMzIpLEZ0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuYWRkR3JvdXBDbGF1c2UoKSl9KSxHdCgxLCJjbHItaWNvbiIsMzMpLGRlKDIsInNwYW4iKSxMZSgzLCJHcm91cCIpLGhlKCkoKX19ZnVuY3Rpb24gVG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDM0'@;
put 'KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLmluZGV4O3JldHVybiBDdChPZSgpLnJlbW92ZUdyb3VwQ2xhdXNlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIEFtdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRp'@;
put 'bXBsaWNpdDtmZSgpLElyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24ga210KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksd3IoYSl9fWZ1bmN0aW9uIERtdChjLGwpezEmYyYmSmwoMCl9ZnVuY3Rpb24gSW10'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMikuaW5kZXgsZj1PZSgpLmluZGV4LHY9T2UoKTtyZXR1cm4gdi5jdXJyZW50UXVlcnlJbmRleD1oLEN0KHYuY3VycmVu'@;
put 'dENsYXVzZUluZGV4PWYpfSksTGUoMiwiIENob29zZSB2YWx1ZXMgIiksaGUoKSxtdCgzLERtdCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4LGY9T2UoKS5pbmRleDtPZSgpO2NvbnN0IHY9dm8oMzcpO2Zl'@;
put 'KDMpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0Iix2KSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLHBNKDIsYm10LGQsaCxmKSl9fWZ1bmN0aW9uIFJtdChjLGwpezEmYyYmSmwoMCl9ZnVuY3Rpb24gTG10KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1NCksbXQoMSxSbXQsMSwwLCJuZy1jb250'@;
put 'YWluZXIiLDUzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5uZ1ZhcixkPU9lKCksaD1kLiRpbXBsaWNpdCxmPWQuaW5kZXgsdj1PZSgpLmluZGV4LE09T2UoKSxEPXZvKDMxKSxaPXZvKDMzKTtmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZNLnVzZVBpY2tlcnM/RDpaKSgibmdUZW1w'@;
put 'bGF0ZU91dGxldENvbnRleHQiLHFJKDIseW10LGgsZix2LGEpKX19ZnVuY3Rpb24gT210KGMsbCl7MSZjJiZKbCgwKX1mdW5jdGlvbiBQbXQoYyxsKXsxJmMmJkpsKDApfWZ1bmN0aW9uIEZtdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTUpKDEsImRpdiIsNTYpLG10KDIsT210LDEsMCwi'@;
put 'bmctY29udGFpbmVyIiw1MyksaGUoKSxkZSgzLCJkaXYiLDU3KSxtdCg0LFBtdCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCkubmdWYXIsZD1PZSgpLGg9ZC4kaW1wbGljaXQsZj1kLmluZGV4LHY9T2UoKS5pbmRleCxNPU9lKCksRD12bygzMSksWj12'@;
put 'bygzNSk7ZmUoMikseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9EOlopKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIscUkoNCxfbXQsaCxmLHYsYSkpLGZlKDIpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZNLnVzZVBpY2tlcnM/RDpaKSgibmdUZW1wbGF0ZU91dGxl'@;
put 'dENvbnRleHQiLHFJKDksd210LGgsZix2LGEpKX19ZnVuY3Rpb24gSG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1OCkoMSwibGFiZWwiLDcpLExlKDIsIlZhbHVlIiksaGUoKSxkZSgzLCJpbnB1dCIsNTkpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3'@;
put 'dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gYmkoZi52YWx1ZSxoKXx8KGYudmFsdWU9aCksQ3QoaCl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKS5pbmRleCx2PU9lKCkuaW5kZXg7cmV0dXJuIEN0KE9lKCkuc2V0VmFyaWFi'@;
put 'bGVWYWx1ZXMoaCxmLHYpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMikuJGltcGxpY2l0O2ZlKDMpLHBpKCJuZ01vZGVsIixhLnZhbHVlKX19ZnVuY3Rpb24gTm10KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0NiksbXQoMSxJbXQsNCw2LCJkaXYiLDQ3KSgyLExtdCwyLDcsImRp'@;
put 'diIsNDgpKDMsRm10LDUsMTQsImRpdiIsNDkpKDQsSG10LDQsMSwiZGl2Iiw1MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCJJTiI9PT1hLm9wZXJhdG9yfHwiTk9UIElOIj09PWEub3BlcmF0b3IpLGZlKCkseGUoIm5nSWYiLCJCRVRXRUVOIiE9'@;
put 'PWEub3BlcmF0b3ImJiJJTiIhPT1hLm9wZXJhdG9yJiYiTk9UIElOIiE9PWEub3BlcmF0b3ImJiJMSUtFIiE9PWEub3BlcmF0b3ImJiJDT05UQUlOUyIhPT1hLm9wZXJhdG9yJiYiQkVHSU5TX1dJVEgiIT09YS5vcGVyYXRvciksZmUoKSx4ZSgibmdJZiIsIkJFVFdFRU4iPT09YS5vcGVyYXRv'@;
put 'ciksZmUoKSx4ZSgibmdJZiIsIkxJS0UiPT09YS5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PWEub3BlcmF0b3J8fCJDT05UQUlOUyI9PT1hLm9wZXJhdG9yKX19ZnVuY3Rpb24gVm10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwxMCkoMSwiZGl2IiwzNSkoMiwiZGl2'@;
put 'IiwzNikoMywiYXBwLXNvZnQtc2VsZWN0IiwzNyksZ2koInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gYmkoZi52YXJpYWJsZSxoKXx8KGYudmFyaWFibGU9aCksQ3QoaCl9KSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtjb25z'@;
put 'dCBmPXd0KGEpLHY9Zi4kaW1wbGljaXQsTT1mLmluZGV4LEQ9T2UoKS5pbmRleDtyZXR1cm4gQ3QoT2UoKS52YXJpYWJsZUlucHV0Q2hhbmdlKHYudmFyaWFibGUsTSxELGgpKX0pLG10KDQsQW10LDIsMSwib3B0aW9uIiwzOCksaGUoKSgpKCksZGUoNSwiZGl2IiwzOSkoNiwiY2xyLXNlbGVj'@;
put 'dC1jb250YWluZXIiKSg3LCJsYWJlbCIpLExlKDgsIk9wZXJhdG9yIiksaGUoKSxkZSg5LCJzZWxlY3QiLDQwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIGJpKGYub3BlcmF0b3IsaCl8fChmLm9wZXJhdG9yPWgpLEN0KGgp'@;
put 'fSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPU9lKCkuaW5kZXg7cmV0dXJuIEN0KE9lKCkuc2V0VmFyaWFibGVPcGVyYXRvcih2LGYub3BlcmF0b3IsTSkpfSksbXQoMTAsa210LDIsMSwib3B0aW9uIiwzOCks'@;
put 'aGUoKSgpKCksbXQoMTEsTm10LDUsNCwiZGl2Iiw0MSksZGUoMTIsImRpdiIsNDIpKDEzLCJidXR0b24iLDQzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleCxmPU9lKCkuaW5kZXg7cmV0dXJuIEN0KE9lKCkucmVtb3ZlQ2xhdXNlKGgsZikpfSksR3QoMTQsImNs'@;
put 'ci1pY29uIiw0NCkoMTUsInNwYW4iKSxoZSgpLGRlKDE2LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLmluZGV4O3JldHVybiBDdChPZSgpLmFkZENsYXVzZShoKSl9KSxHdCgxNywiY2xyLWljb24iLDMzKSgxOCwic3BhbiIpLGhlKCkoKSgp'@;
put 'fWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1PZSgpLmluZGV4LGY9T2UoKTtUcigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxpZENsYXVzZSksZmUoMykseGUoImlkIiwic2VsZWN0X3ZhbHNfdmFyX2lkIitkKyJfIitoKSgiaW5wdXRJZCIsInZhbHNfdmFyX2lkIitk'@;
put 'KyJfIitoKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLHBpKCJ2YWx1ZSIsYS52YXJpYWJsZSksZmUoKSx4ZSgibmdGb3JPZiIsZi5jb2xzKSxmZSg1KSxwaSgibmdNb2RlbCIsYS5vcGVyYXRvciksZmUoKSx4ZSgibmdGb3JPZiIsYS5vcGVyYXRvcnMpLGZlKCkseGUoIm5nVmFyIiwiREFURSI9'@;
put 'PT1hLmRkdHlwZXx8IkRBVEVUSU1FIj09PWEuZGR0eXBlfHwiVElNRSI9PT1hLmRkdHlwZSksZmUoMikseGUoImRpc2FibGVkIiwxPT09Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzLmxlbmd0aCl9fWZ1bmN0aW9uIEJtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRp'@;
put 'diIsMjQpKDEsImRpdiIsMTApKDIsImRpdiIsMjUpKDMsImRpdiIsMjYpKDQsImNsci1zZWxlY3QtY29udGFpbmVyIikoNSwibGFiZWwiKSxMZSg2LCJMb2dpYyIpLGhlKCksZGUoNywic2VsZWN0IiwyNyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGlt'@;
put 'cGxpY2l0O3JldHVybiBiaShmLmNsYXVzZUxvZ2ljLGgpfHwoZi5jbGF1c2VMb2dpYz1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnNldExvZ2ljKCkpfSksbXQoOCx4bXQsMiwyLCJvcHRpb24iLDEzKSxoZSgpKCkoKSxHdCg5'@;
put 'LCJiciIpLG10KDEwLEVtdCw0LDAsImJ1dHRvbiIsMjgpLGhlKCksZGUoMTEsImRpdiIsMjkpLG10KDEyLFRtdCwxLDAsImNsci1pY29uIiwzMCkoMTMsVm10LDE5LDExLCJkaXYiLDMxKSxoZSgpKCksR3QoMTQsImJyIiksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgp'@;
put 'O2ZlKCksVHIoImludmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLGZlKDYpLHBpKCJuZ01vZGVsIixhLmNsYXVzZUxvZ2ljKSx4ZSgiZGlzYWJsZWQiLGEuZWxlbWVudHMubGVuZ3RoPDIpLGZlKCkseGUoIm5nRm9yT2YiLGQubG9naWNPcGVyYXRvcnMpLGZlKDIpLHhlKCJuZ0lmIixk'@;
put 'LmlubmVyV2lkdGg+NzY4KSxmZSgyKSx4ZSgibmdJZiIsZC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xKSxmZSgpLHhlKCJuZ0Zvck9mIixhLmVsZW1lbnRzKX19ZnVuY3Rpb24gam10KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2Miks'@;
put 'UXMoMiwic2FzVG9Kc0RhdGUiKSxRcygzLCJzYXNUb0pzRGF0ZSIpLEZ0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLHY9Zi5xdWVyeSxNPWYucXVlcnlWYWx1ZUluZGV4LEQ9Zi5xdWVyeUluZGV4LFo9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5k'@;
put 'YXRlQ2hhbmdlKGgsdixELFosTSkpfSksaGUoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLGQ9YS5xdWVyeSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtmZSgpLHhlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19k'@;
put 'YXRlIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/RGMoMiwzLGQudmFsdWVbaF0pOkRjKDMsNSxkLnZhbHVlKSl9fWZ1bmN0aW9uIHptdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLGRlKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjMpLFFzKDIsInNhc1RvSnNEYXRlIiksUXMo'@;
put 'Mywic2FzVG9Kc0RhdGUiKSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuZ2V0UXVlcnlEYXRlVGltZShNLHYpLmRhdGU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlv'@;
put 'bigpe3d0KGEpO2NvbnN0IGg9T2UoKSxmPWgucXVlcnksdj1oLnF1ZXJ5VmFsdWVJbmRleCxNPWgucXVlcnlJbmRleCxEPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuZGF0ZVRpbWVDaGFuZ2UoZixNLEQsdikpfSksaGUoKSxkZSg0LCJhcHAtc29mdC1zZWxlY3QiLDY0KSxRcyg1LCJz'@;
put 'YXNUb0pzRGF0ZSIpLFFzKDYsInNhc1RvSnNEYXRlIiksRnQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgpLmdldFF1ZXJ5RGF0ZVRpbWUoTSx2KS50aW1lPWgpfSkoIm9uSW5w'@;
put 'dXRFdmVudCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCksZj1oLnF1ZXJ5LHY9aC5xdWVyeVZhbHVlSW5kZXgsTT1oLnF1ZXJ5SW5kZXgsRD1oLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgpLmRhdGVUaW1lQ2hhbmdlKGYsTSxELHYpKX0pLGhlKCksdWkoKX1pZigyJmMpe2NvbnN0'@;
put 'IGE9T2UoKSxkPWEucXVlcnksaD1hLnF1ZXJ5VmFsdWVJbmRleCxmPWEucXVlcnlJbmRleCx2PWEuY2xhdXNlSW5kZXg7ZmUoKSx4ZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfZGF0ZSIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP2o4KDIsNixkLnZhbHVl'@;
put 'W2hdLCJzZWNvbmRzIik6ajgoMyw5LGQudmFsdWUsInNlY29uZHMiKSksZmUoMykseGUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX3RpbWUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD92VSg1LDEyLGQudmFsdWVbaF0sInNlY29uZHMiLCEwKTp2VSg2LDE2'@;
put 'LGQudmFsdWUsInNlY29uZHMiLCEwKSl9fWZ1bmN0aW9uIFVtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLGRlKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjUpLFFzKDIsInNlY29uZHNQYXJzZXIiKSxRcygzLCJzZWNvbmRzUGFyc2VyIiksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rp'@;
put 'b24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLHY9Zi5xdWVyeSxNPWYucXVlcnlWYWx1ZUluZGV4LEQ9Zi5xdWVyeUluZGV4LFo9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS50aW1lQ2hhbmdlKGgsdixELFosTSkpfSksaGUoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLGQ9YS5xdWVy'@;
put 'eSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtmZSgpLHhlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc18iK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD9EYygyLDMsZC52YWx1ZVtoXSk6RGMoMyw1LGQudmFsdWUp'@;
put 'KX19ZnVuY3Rpb24gWm10KGMsbCl7MSZjJiYoY2koMCw2MCksbXQoMSxqbXQsNCw3LCJuZy1jb250YWluZXIiLDYxKSgyLHptdCw3LDIwLCJuZy1jb250YWluZXIiLDYxKSgzLFVtdCw0LDcsIm5nLWNvbnRhaW5lciIsNjEpLHVpKCkpLDImYyYmKHhlKCJuZ1N3aXRjaCIsbC5xdWVyeS5kZHR5'@;
put 'cGUpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsIkRBVEUiKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCJEQVRFVElNRSIpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsIlRJTUUiKSl9ZnVuY3Rpb24gV210KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw2OCksTGUoMSksaGUoKSksMiZjKXtj'@;
put 'b25zdCBhPWwuJGltcGxpY2l0O3hlKCJ2YWx1ZSIsYS51bmZvcm1hdHRlZCksZmUoKSxJcigiICIsYS5mb3JtYXR0ZWQudHJpbSgpLCIgIil9fWZ1bmN0aW9uIFltdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLG10KDEsV210LDIsMiwib3B0aW9uIiw2NyksaGUoKSksMiZjKXtjb25zdCBh'@;
put 'PU9lKCkucXVlcnk7ZmUoKSx4ZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiBHbXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDY4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7eGUoInZhbHVlIixhLk5BTUUpLGZlKCksSXIoIiAiLGEuTkFNRSwi'@;
put 'ICIpfX1mdW5jdGlvbiAkbXQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLEdtdCwyLDIsIm9wdGlvbiIsNjkpLHVpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDIpLnF1ZXJ5O2ZlKCkseGUoIm5nSWYiLGEuVFlQRT09PWQudHlwZSl9fWZ1bmN0aW9uIEttdChjLGwpe2lmKDEm'@;
put 'YyYmKGRlKDAsImRpdiIpLG10KDEsJG10LDIsMSwibmctY29udGFpbmVyIiwzOCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCkseGUoIm5nRm9yT2YiLGEuY29scyl9fWZ1bmN0aW9uIHFtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImFwcC1zb2Z0LXNlbGVjdCIsNjYp'@;
put 'LEZ0KCJzZWxlY3RlZExhYmVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLnF1ZXJ5O3JldHVybiBDdChPZSgpLnNlbGVjdGVkTGFiZWxDaGFuZ2UoaCxmKSl9KSxnaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkucXVlcnk7cmV0dXJuIGJpKGYudmFs'@;
put 'dWUsaCl8fChmLnZhbHVlPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuc2V0VmFyaWFibGVWYWx1ZXMoaC50YXJnZXQudmFsdWUsdixNKSl9KSgib25BdXRv'@;
put 'Y29tcGxldGVMb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnksTT1mLnF1ZXJ5SW5kZXgsRD1mLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgpLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCx2LnZhcmlhYmxlLE0sRCkpfSksbXQoMSxZbXQsMiwxLCJk'@;
put 'aXYiLDIwKSgyLEttdCwyLDEsImRpdiIsMjApLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5kZXgsaD1sLmNsYXVzZUluZGV4O3hlKCJzZWNvbmRMYWJlbCIsIlZhcmlhYmxlIikoImVtaXRPbmx5U2VsZWN0ZWQiLGEudmFsdWVWYXJpYWJsZSkoImlucHV0SWQiLCJ2'@;
put 'YWxzXyIrZCsiXyIraCkscGkoInZhbHVlIixhLnZhbHVlKSx4ZSgiZW5hYmxlTG9hZE1vcmUiLGEubm9icz5hLnZhbHVlcy5sZW5ndGgpLGZlKCkseGUoIm5nSWYiLCFhLnZhbHVlVmFyaWFibGUpLGZlKCkseGUoIm5nSWYiLGEudmFsdWVWYXJpYWJsZSl9fWZ1bmN0aW9uIFhtdChjLGwpe2lm'@;
put 'KDEmYyYmKGRlKDAsIm9wdGlvbiIsNjgpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgidmFsdWUiLGEuZm9ybWF0dGVkKSxmZSgpLElyKCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiBKbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJhcHAt'@;
put 'c29mdC1zZWxlY3QiLDcwKSxnaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXg7cmV0dXJuIGJpKHYudmFsdWVbTV0saCl8fCh2LnZhbHVlW01dPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24o'@;
put 'KXtjb25zdCBoPXd0KGEpLGY9aC5xdWVyeSx2PWgucXVlcnlJbmRleCxNPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuc2V0VmFyaWFibGVWYWx1ZXMoZi52YWx1ZSx2LE0pKX0pKCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi5x'@;
put 'dWVyeSxNPWYucXVlcnlJbmRleCxEPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShoLHYudmFyaWFibGUsTSxEKSl9KSxtdCgxLFhtdCwyLDIsIm9wdGlvbiIsNjcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwucmFuZ2UsZD1sLnF1ZXJ5LGg9'@;
put 'bC5xdWVyeVZhbHVlSW5kZXg7eGUoImlucHV0SWQiLCJ2YWxzLSIrYSsiXyIrbC5xdWVyeUluZGV4KyJfIitsLmNsYXVzZUluZGV4KSxwaSgidmFsdWUiLGQudmFsdWVbaF0pLHhlKCJlbmFibGVMb2FkTW9yZSIsZC5ub2JzPmQudmFsdWVzLmxlbmd0aCkoImRpc2FibGVkIix2b2lkIDAhPT1o'@;
put 'JiYic3RhcnQiIT09YSYmIWQudmFsdWVbMF0pLGZlKCkseGUoIm5nRm9yT2YiLGQudmFsdWVzKX19ZnVuY3Rpb24gUW10KGMsbCl7MSZjJiYoZGUoMCwiaDUiLDc4KSxMZSgxLCIgTm8gdmFsdWVzIGF2YWlsYWJsZS4gIiksaGUoKSl9ZnVuY3Rpb24gZTZ0KGMsbCl7aWYoMSZjKXtjb25zdCBh'@;
put 'PUxuKCk7ZGUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxLCJpbnB1dCIsODApLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLmluZGV4LHY9T2UoMikucXVlcnk7cmV0dXJuIGJpKHYudmFsdWVbZl0uY2hlY2tlZCxoKXx8KHYudmFsdWVbZl0uY2hlY2tl'@;
put 'ZD1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLHYsTSkpfSksaGUoKSxkZSgyLCJsYWJlbCIpLExlKDMpLGhl'@;
put 'KCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoMikucXVlcnk7ZmUoKSxwaSgibmdNb2RlbCIsaC52YWx1ZVtkXS5jaGVja2VkKSxmZSgyKSxJcigiICIsYS5mb3JtYXR0ZWQsIiAiKX19ZnVuY3Rpb24gdDZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwic2VjdGlv'@;
put 'biIsNzkpKDEsImNsci1jaGVja2JveC1jb250YWluZXIiKSxtdCgyLGU2dCw0LDIsImNsci1jaGVja2JveC13cmFwcGVyIiwzOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5xdWVyeTtmZSgyKSx4ZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiBuNnQoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9TG4oKTtkZSgwLCJjbHItbW9kYWwiLDcxKSgxLCJoMyIsNzIpLExlKDIsIlNlbGVjdCB2YWx1ZXMiKSxoZSgpLGRlKDMsImRpdiIsNzMpLG10KDQsUW10LDIsMCwiaDUiLDc0KSg1LHQ2dCwzLDEsInNlY3Rpb24iLDc1KSxoZSgpLGRlKDYsImRpdiIsNzYpKDcsImJ1dHRvbiIsNzcp'@;
put 'LEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIGguY3VycmVudFF1ZXJ5SW5kZXg9LTEsQ3QoaC5jdXJyZW50Q2xhdXNlSW5kZXg9LTEpfSksTGUoOCwiIEFwcGx5ICIpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLnF1ZXJ5LGQ9bC5xdWVyeUluZGV4'@;
put 'LGg9bC5jbGF1c2VJbmRleCxmPU9lKCk7eGUoImNsck1vZGFsT3BlbiIsZi5jdXJyZW50UXVlcnlJbmRleD09PWQmJmYuY3VycmVudENsYXVzZUluZGV4PT09aCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg0KSx4ZSgibmdJZiIsIWYuaXNBcnIoYS52YWx1ZSkpLGZlKCkseGUoIm5nSWYi'@;
put 'LGYuaXNBcnIoYS52YWx1ZSkpfX0hZnVuY3Rpb24gSl9lKGMsbCxhKXsoZnVuY3Rpb24gVDllKGMsbCxhKXsic3RyaW5nIiE9dHlwZW9mIGwmJihhPWwsbD1jW1FsLkxvY2FsZUlkXSksbD1sLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIiksamJbbF09YyxhJiYoamJbbF1bUWwuRXh0'@;
put 'cmFEYXRhXT1hKX0pKGMsbCxhKX0ocm10KTtsZXQgS2VlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuY2RmPWYsdGhpcy5jYWNoaW5nPSEwLHRoaXMu'@;
put 'cm93c19pbmNyZW1lbnQ9MTAwLHRoaXMuaW5pdGlhbF9yb3dzPTFlMyx0aGlzLmNsYXVzZUFtdD1bIiJdLHRoaXMubnVtT3BlcmF0b3JzPVsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkJFVFdFRU4iLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5jaGFyT3BlcmF0b3JzPVsiPSIsIjwiLCI+Iiwi'@;
put 'PD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4iLCJOT1QgSU4iLCJORSJdLHRoaXMubm90SW49ITEsdGhpcy5ub3RBcnI9ITAsdGhpcy53YXNCZXR3ZWVuPSExLHRoaXMud2hlcmVDbGF1c2VMb2FkaW5nPSExLHRoaXMuZHluYW1pY1doZXJlQ2xhdXNlPSEwLHRoaXMudXNlUGlja2Vycz0hMSx0aGlz'@;
put 'LnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlVmFyaWFibGU6ITEsc3RhcnRyb3c6MCxyb3dzOjAsbm9iczowLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XSxjbGF1'@;
put 'c2VMb2dpYzoiIixpbnZhbGlkQ2xhdXNlOiExfSx0aGlzLnNlbFZhcj17aW5kZXg6bnVsbCxmb3JtYXQ6bnVsbCx0eXBlOm51bGx9LHRoaXMuaW5PYmo9W3tjaGVja2VkOiExLHZhbHVlOm51bGx9XSx0aGlzLmdyb3VwTG9naWM9IkFORCIsdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5x'@;
put 'dWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRoaXMubG9naWNPcGVyYXRvcnM9WyJBTkQiLCJPUiJdLHRoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLmN1cnJlbnRDbGF1c2VJbmRleD0tMSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PS0xLHRoaXMu'@;
put 'cGVuZGluZ0lOVmFsdWVzU2V0PW51bGwsdGhpcy5pbm5lcldpZHRoPXdpbmRvdy5zY3JlZW4ud2lkdGgsdGhpcy5pbm5lcldpZHRoPjc2OCYmKHRoaXMubm9Cb3JkZXI9ImJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JheTsiKX1nZXRRdWVyeURhdGVUaW1lKGEsZCl7bGV0IGg9dGhpcy5xdWVy'@;
put 'eURhdGVUaW1lLmZpbmQoZj0+Zi5jbGF1c2VJbmRleD09PWEmJmYucXVlcnlJbmRleD09PWQpO2lmKCFoKXtjb25zdCBmPXRoaXMucXVlcnlEYXRlVGltZS5wdXNoKHtjbGF1c2VJbmRleDphLHF1ZXJ5SW5kZXg6ZCxkYXRlOiIiLHRpbWU6IiJ9KS0xO2g9dGhpcy5xdWVyeURhdGVUaW1lW2Zd'@;
put 'fXJldHVybiBofXVzZVBpY2tlcnNDaGFuZ2UoKXt0aGlzLnF1ZXJ5RGF0ZVRpbWU9W10sdGhpcy51c2VQaWNrZXJzJiZ0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChhPT57YS5lbGVtZW50cy5mb3JFYWNoKGQ9PntbIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhkLmRk'@;
put 'dHlwZSkmJmQudmFsdWVWYXJpYWJsZSYmKGQudmFsdWU9IiIsZC52YWx1ZVZhcmlhYmxlPSExKX0pfSl9cmVzZXRGaWx0ZXIoKXt0aGlzLndoZXJlU3RyaW5nPXZvaWQgMCx0aGlzLndoZXJlQ2xhdXNlPXZvaWQgMCx0aGlzLnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpu'@;
put 'dWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XX0sdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRo'@;
put 'aXMud2hlcmVDbGF1c2VGbighMCl9c2V0VG9HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUtuLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJl'@;
put 'ZGl0b3IiOiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLFNjKEtuLGEpLmZpbHRlci5ncm91cExvZ2ljPXRoaXMuZ3JvdXBMb2dpYywic3RyaW5nIj09dHlwZW9mIHRoaXMud2hlcmVDbGF1c2UmJihTYyhLbixhKS5maWx0ZXIud2hlcmVDbGF1c2U9dGhpcy53aGVyZUNsYXVz'@;
put 'ZSksInN0cmluZyI9PXR5cGVvZiB0aGlzLmxpYmRzJiYoU2MoS24sYSkuZmlsdGVyLmxpYmRzPXRoaXMubGliZHMpLFNjKEtuLGEpLmZpbHRlci5jbGF1c2VzPXRoaXMuY2xhdXNlc31nZXRGcm9tR2xvYmFscygpe2lmKCF0aGlzLmNhY2hpbmcpcmV0dXJuO2xldCBhPSIiOyJob21lIj09PUtu'@;
put 'LnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0/YT10aGlzLnZpZXdib3hJZD9gdmlld2JveGVzLiR7dGhpcy52aWV3Ym94SWR9YDoiZWRpdG9yIjoidmlldyI9PT1Lbi5yb290UGFyYW0mJihhPSJ2aWV3ZXIiKSxTYyhLbixhKS5maWx0ZXIuY29scy5sZW5ndGg+MCYmKHRoaXMu'@;
put 'Y29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFNjKEtuLGEpLmZpbHRlci5jb2xzKSkpLFNjKEtuLGEpLmZpbHRlci52YWxzLmxlbmd0aD4wJiYodGhpcy52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoU2MoS24sYSkuZmlsdGVyLnZhbHMpKSksIiIhPT1TYyhLbixhKS5maWx0'@;
put 'ZXIuZ3JvdXBMb2dpYyYmKHRoaXMuZ3JvdXBMb2dpYz1TYyhLbixhKS5maWx0ZXIuZ3JvdXBMb2dpYyx0aGlzLndoZXJlQ2xhdXNlPVNjKEtuLGEpLmZpbHRlci53aGVyZUNsYXVzZSx0aGlzLmxpYmRzPVNjKEtuLGEpLmZpbHRlci5saWJkcyx0aGlzLmNsYXVzZXM9U2MoS24sYSkuZmlsdGVy'@;
put 'LmNsYXVzZXMsdGhpcy53aGVyZUNsYXVzZUZuKCkpfXNldEdyb3VwTG9naWMoYSl7dGhpcy5ncm91cExvZ2ljPWEsdGhpcy5jbGF1c2VzLmdyb3VwTG9naWM9YSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWRhdGVDaGFuZ2UoYSxkLGgsZix2KXtsZXQgTT10aGlz'@;
put 'LmhlbHBlclNlcnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZShhKTsiQkVUV0VFTiI9PT1kLm9wZXJhdG9yJiZ2b2lkIDAhPT12JiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlW3ZdPU0pLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoTSxoLGYpfWRhdGVUaW1l'@;
put 'Q2hhbmdlKGEsZCxoLGYpe2NvbnN0IHY9dGhpcy5nZXRRdWVyeURhdGVUaW1lKGgsZCk7aWYoIiI9PT12LmRhdGUpe2lmKCIiPT09YS52YWx1ZSlyZXR1cm47di5kYXRlPWEudmFsdWUuc3BsaXQoIjoiKVswXX1jb25zdCBNPXBhcnNlSW50KHYudGltZS5zcGxpdCgiOiIpWzBdKSxEPXBhcnNl'@;
put 'SW50KHYudGltZS5zcGxpdCgiOiIpWzFdKSxaPXBhcnNlSW50KHYudGltZS5zcGxpdCgiOiIpWzJdKXx8MDtsZXQgbmU9bmV3IERhdGUodi5kYXRlKSxjZT1uZXcgRGF0ZShuZS5nZXRGdWxsWWVhcigpLG5lLmdldE1vbnRoKCksbmUuZ2V0RGF0ZSgpLE0sRCxaKSxiZT10aGlzLmhlbHBlclNl'@;
put 'cnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZShjZSwic2Vjb25kcyIpOyJCRVRXRUVOIj09PWEub3BlcmF0b3ImJnZvaWQgMCE9PWYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVbZl09YmUpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoYmUsZCxoKX10aW1l'@;
put 'Q2hhbmdlKGEsZCxoLGYsdil7YT1hLnRhcmdldC52YWx1ZTtsZXQgYmU9NjAqcGFyc2VJbnQoYS5zcGxpdCgiOiIpWzBdKSo2MCs2MCpwYXJzZUludChhLnNwbGl0KCI6IilbMV0pKyhwYXJzZUludChhLnNwbGl0KCI6IilbMl0pfHwwKTsiQkVUV0VFTiI9PT1kLm9wZXJhdG9yJiZ2b2lkIDAh'@;
put 'PT12JiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlW3ZdPWJlKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKGJlLGgsZil9ZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihhLGQpe2xldCBoPVtdO2lmKHRoaXMuY2xhdXNlcy5xdWVyeU9iai5sZW5ndGg+MXx8dGhp'@;
put 'cy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzLmxlbmd0aD4xKWZvcihsZXQgZj0wO2Y8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDtmKyspZm9yKGxldCB2PTA7djx0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHMubGVuZ3RoO3YrKyl7aWYoZj09PWEmJnY9PT1kfHxb'@;
put 'bnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YXJpYWJsZSl8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLm9wZXJhdG9yKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0'@;
put 'aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWUpKWNvbnRpbnVlO2xldCBNPSIiO2NvbnN0IEQ9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLm9wZXJhdG9yLFo9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhcmlhYmxlOyJC'@;
put 'RVRXRUVOIj09PUQ/TT1gJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWVbMF19IEFORCAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXVt2XS52YWx1ZVsxXX1gOiJJTiI9PT1EfHwiTk9UIElOIj09PUQ/KHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXVt2XS52YWx1'@;
put 'ZS5mb3JFYWNoKG5lPT57aWYobmUuY2hlY2tlZCl7bGV0IGNlPW5lLnZhbDsic3RyaW5nIiE9dHlwZW9mIGNlfHwoMCxLZy5pc1NwZWNpYWxNaXNzaW5nKShjZSk/TS5sZW5ndGg+MD9NKz1gLCR7Y2V9YDpNPWAoJHtjZX1gOk0ubGVuZ3RoPjA/TSs9YCwnJHtjZX0nYDpNPWAoJyR7Y2V9J2B9'@;
put 'fSksTS5sZW5ndGg+MCYmKE0rPSIpIikpOiIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlP009ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9i'@;
put 'altmXS5lbGVtZW50c1t2XS50eXBlJiYoTT1gJyR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlfSdgKSxoLnB1c2goe0dST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5jbGF1'@;
put 'c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6ZixWQVJJQUJMRV9OTTpaLE9QRVJBVE9SX05NOkQsUkFXX1ZBTFVFOk18fHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZX0pfXJldHVybiBofWdldFZhbHVlc0xvYWRNb3JlKGEsZCxoLGYpe3ZhciB2PXRoaXM7cmV0'@;
put 'dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IE09di5saWJkc3x8IiI7dHJ5e2lmKHZvaWQgMCE9PXYuY29scyl7Zm9yKGxldCBxZT0wO3FlPHYuY29scy5sZW5ndGg7cWUrKyl2LmNvbHNbcWVdLk5BTUU9PT1kJiYodi5zZWxWYXIuaW5kZXg9cWUpO2NvbnN0IEQ9di5jb2xzW3Yuc2VsVmFyLmlu'@;
put 'ZGV4XS5ERFRZUEUse3N0YXJ0cm93Oloscm93czpuZX09di5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLGNlPXYucm93c19pbmNyZW1lbnQsYmU9WituZTtsZXQgRWU9W107di5keW5hbWljV2hlcmVDbGF1c2UmJihFZT12LmR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IoZixoKSk7'@;
put 'Y29uc3QgQmU9WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoRCk7di5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoZCxNLEVlLGJlLGNlKS50aGVuKHFlPT57Y29uc3QgcnQ9cWUudmFscyx7U1RBUlRST1c6cHQsUk9XUzpkdCxOT0JTOkp0fT1xZS5tZXRhWzBdO2lm'@;
put 'KHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5zdGFydHJvdz1wdCx2LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0ucm93cz1kdCx2LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0ubm9icz1KdCwxPT09cnQubGVuZ3RoJiYiIj09PXJ0WzBdLkZPUk1BVFRF'@;
put 'RCYmIiI9PT1ydFswXS5VTkZPUk1BVFRFRD9hLmxvYWRNb3JlRmluaXNoZWQoITEpOih2LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVzLnB1c2goLi4ucnQubWFwKHRuPT57Y29uc3QgTW49Im51bSI9PT1xZS4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7bGV0IEdy'@;
put 'PU1uJiYoMCxLZy5pc1NwZWNpYWxNaXNzaW5nKSh0bi5VTkZPUk1BVFRFRCk/Ii4iK3RuLlVORk9STUFUVEVEOnRuLlVORk9STUFUVEVEO3JldHVybiBNbiYmbnVsbD09PUdyJiYoR3I9Ii4iKSx7Zm9ybWF0dGVkOkJlP3RuLkZPUk1BVFRFRC5zcGxpdCgiLiIpWzBdOnRuLkZPUk1BVFRFRCx1'@;
put 'bmZvcm1hdHRlZDpHcn19KSksYS5sb2FkTW9yZUZpbmlzaGVkKEp0LXYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMubGVuZ3RoPjApKSx2LndoZXJlQ2xhdXNlRm4oKSx2LnNldFRvR2xvYmFscygpLHYud2hlcmVDbGF1c2VMb2FkaW5nPSExLG51bGwhPT12LnBlbmRp'@;
put 'bmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5kZXg6dm4scXVlcnlJbmRleDpDbn09di5wZW5kaW5nSU5WYWx1ZXNTZXQ7di5zZXRJTlZhbHVlcyh2bixDbiksdi5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH12LmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChxZT0+e3Yud2hlcmVDbGF1'@;
put 'c2VMb2FkaW5nPSExfSl9fWNhdGNoKEQpe3YuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLEQpfX0pKCl9Z2V0VmFsdWVzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtmLndoZXJlQ2xhdXNlTG9hZGluZz0hMDtsZXQg'@;
put 'dj0iIjt2b2lkIDAhPT1mLmxpYmRzJiYodj1mLmxpYmRzKSxmLmNsZWFyVmFsdWVzKGQsaCksZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlcz1bXSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWU9IiIsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVs'@;
put 'ZW1lbnRzW2RdLm9wZXJhdG9yPSI9IixmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFyaWFibGU9YTt0cnl7aWYodm9pZCAwIT09Zi5jb2xzKXtmb3IobGV0IG5lPTA7bmU8Zi5jb2xzLmxlbmd0aDtuZSsrKWYuY29sc1tuZV0uTkFNRT09PWEmJihmLnNlbFZhci5pbmRleD1u'@;
put 'ZSk7Y29uc3QgTT1mLmNvbHNbZi5zZWxWYXIuaW5kZXhdLkREVFlQRTtmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0uZGR0eXBlPU0sZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnR5cGU9Zi5jb2xzW2Yuc2VsVmFyLmluZGV4XS5UWVBFLGYuY2xhdXNlcy5xdWVy'@;
put 'eU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcnM9Im51bSI9PT1mLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udHlwZT9mLm51bU9wZXJhdG9yczpmLmNoYXJPcGVyYXRvcnM7bGV0IEQ9W107Zi5keW5hbWljV2hlcmVDbGF1c2UmJihEPWYuZHluYW1pY1doZXJlQ2xhdXNlQ3Jl'@;
put 'YXRvcihoLGQpKTtjb25zdCBaPVsiREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKE0pO2Yuc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGEsdixELDEsZi5pbml0aWFsX3Jvd3MpLnRoZW4obmU9Pntjb25zdCBjZT1uZS52YWxzLHtTVEFSVFJPVzpiZSxST1dTOkVlLE5P'@;
put 'QlM6QmV9PW5lLm1ldGFbMF07aWYoZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnN0YXJ0cm93PWJlLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5yb3dzPUVlLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5ub2JzPUJlLGYuY2xhdXNlcy5xdWVy'@;
put 'eU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9Y2UubWFwKHFlPT57Y29uc3QgcnQ9Im51bSI9PT1uZS4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7bGV0IGR0PXJ0JiYoMCxLZy5pc1NwZWNpYWxNaXNzaW5nKShxZS5VTkZPUk1BVFRFRCk/Ii4iK3FlLlVORk9STUFUVEVEOnFlLlVORk9S'@;
put 'TUFUVEVEO3JldHVybiBydCYmbnVsbD09PWR0JiYoZHQ9Ii4iKSx7Zm9ybWF0dGVkOlo/cWUuRk9STUFUVEVELnNwbGl0KCIuIilbMF06cWUuRk9STUFUVEVELHVuZm9ybWF0dGVkOmR0fX0pLnNsaWNlKDAsMmUzKSxmLndoZXJlQ2xhdXNlRm4oKSxmLnNldFRvR2xvYmFscygpLGYud2hlcmVD'@;
put 'bGF1c2VMb2FkaW5nPSExLG51bGwhPT1mLnBlbmRpbmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5kZXg6cWUscXVlcnlJbmRleDpydH09Zi5wZW5kaW5nSU5WYWx1ZXNTZXQ7Zi5zZXRJTlZhbHVlcyhxZSxydCksZi5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH1mLmNkZi5kZXRlY3RDaGFu'@;
put 'Z2VzKCl9KS5jYXRjaChuZT0+e2Yud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKE0pe2YuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLE0pfX0pKCl9Z2V0bG9naWMoYSl7dGhpcy5sb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpfXNl'@;
put 'dExvZ2ljKCl7dGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1pc0FycihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5JiZhLmxlbmd0aD4wJiZ0eXBlb2YgYVswXS5jaGVja2VkPCJ1In1zZWxlY3RlZExhYmVsQ2hhbmdlKGEsZCl7ZC52YWx1ZVZhcmlhYmxlPSJW'@;
put 'YXJpYWJsZSI9PT1hLGQudmFsdWU9IiIsdGhpcy53aGVyZUNsYXVzZUZuKCl9dmFyaWFibGVJbnB1dENoYW5nZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlcyhhLGQsaCl9c2V0VmFyaWFibGVWYWx1ZXMoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5v'@;
put 'cGVyYXRvcjsiQkVUV0VFTiIhPT1mJiYiSU4iIT09ZiYmIk5PVCBJTiIhPT1mJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPWEudG9TdHJpbmcoKSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRWYXJpYWJsZU9wZXJhdG9y'@;
put 'KGEsZCxoKXtsZXQgZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU7ZiBpbnN0YW5jZW9mIEFycmF5JiYiSU4iIT09ZCYmIk5PVCBJTiIhPT1kJiYoZj1mIGluc3RhbmNlb2YgQXJyYXkmJjI9PT1mLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBmWzBdP2ZbMF06'@;
put 'IiIpLHRoaXMuY2xlYXJWYWx1ZXNPcGVyYXRvcihhLGgpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS5vcGVyYXRvcj1kLCgiPSI9PT1kfHwiPiI9PT1kfHwiPCI9PT1kfHwiPD0iPT09ZHx8Ij49Ij09PWR8fCJORSI9PT1kKSYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialto'@;
put 'XS5lbGVtZW50c1thXS52YWx1ZT1mKSwiQkVUV0VFTiI9PT1kJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPVtdLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKGYpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVt'@;
put 'ZW50c1thXS52YWx1ZS5wdXNoKCIiKSksKCJJTiI9PT1kfHwiTk9UIElOIj09PWQpJiZ0aGlzLnNldElOVmFsdWVzKGgsYSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRJTlZhbHVlcyhhLGQpe2NvbnN0IGg9W10sZj10aGlzLmNsYXVzZXMucXVlcnlPYmpb'@;
put 'YV0uZWxlbWVudHNbZF0udmFsdWVzO2YubGVuZ3RoPDEmJih0aGlzLnBlbmRpbmdJTlZhbHVlc1NldD17Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmR9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyloLnB1c2goe2NoZWNrZWQ6ITEsdmFsOmZbdl0uZm9ybWF0dGVkfSk7dGhpcy5jbGF1'@;
put 'c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2RdLnZhbHVlPWh9Y2xlYXJWYWx1ZXMoYSxkKXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0udmFsdWU9IiJ9Y2xlYXJWYWx1ZXNPcGVyYXRvcihhLGQpe2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1th'@;
put 'XS5vcGVyYXRvcjsoIkJFVFdFRU4iPT09aHx8IklOIj09PWh8fCJOT1QgSU4iPT09aHx8IkNPTlRBSU5TIj09PWgpJiZ0aGlzLmNsZWFyVmFsdWVzKGEsZCl9aGFzSW52YWxpZENsdWFzZShhKXtmb3IobGV0IGQgb2YgYSlpZihkLmludmFsaWRDbGF1c2U9ITEsIiI9PT1kLnZhbHVlJiYiTkUi'@;
put 'IT09ZC5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWQub3BlcmF0b3J8fG51bGw9PT1kLnZhcmlhYmxlfHxudWxsPT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFsdWUpcmV0dXJuIGQuaW52YWxpZENsYXVzZT0hMCwhMDtyZXR1cm4gYS5pbnZhbGlkQ2xhdXNlPSExLCExfWhhc0ludmFsaWRHcm91'@;
put 'cENsdWFzZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDthKyspe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMpKXJldHVybiB0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0h'@;
put 'MCwhMDt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMX1yZXR1cm4hMX1hZGRDbGF1c2UoYSl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHZvaWQgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0lu'@;
put 'Zm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKTt0aGlzLmNsYXVzZUFtdC5wdXNoKCIiKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMucHVzaCh7bG9naWM6bnVsbCx0'@;
put 'eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX0pO2xldCBkPXRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYzt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9naWM9dHlwZW9mIGQ+InUi'@;
put 'PyJBTkQiOiJPUiI9PT1kPyJPUiI6IkFORCIsdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1hZGRHcm91cENsYXVzZSgpe3RoaXMuaGFzSW52YWxpZEdyb3VwQ2x1YXNlKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRk'@;
put 'IG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKToodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2goe2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFs'@;
put 'dWVzOltdLG9wZXJhdG9yczpbXX1dfSksdGhpcy5zZXRUb0dsb2JhbHMoKSl9aXNJbkh0bWxDb2xsZWN0aW9uKGEsZCl7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspaWYoZFtoXS52YWx1ZT09PWEpcmV0dXJuITA7cmV0dXJuITF9cmVtb3ZlR3JvdXBDbGF1c2UoYSl7dGhpcy5jbGF1c2Vz'@;
put 'LnF1ZXJ5T2JqLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpfXJlbW92ZUNsYXVzZShhLGQpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50cy5zcGxpY2UoYSwxKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXdoZXJlQ2xhdXNlRm4oYT0h'@;
put 'MSl7Y29uc3QgZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuY2xhdXNlcyk7aWYoYSYmKGQucXVlcnlPYmpbMF0uZWxlbWVudHM9W10pLHZvaWQgMCE9PXRoaXMubGliZHMpe2xldCBoPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLndoZXJlQ2xhdXNlQ3JlYXRvcihkLHRoaXMuZ3Jv'@;
put 'dXBMb2dpYyx0aGlzLmxpYmRzKTthfHwodGhpcy53aGVyZUNsYXVzZT1oLndoZXJlQ2xhdXNlLHRoaXMud2hlcmVTdHJpbmc9aC5zdHJpbmcpfX1uZ0FmdGVyVmlld0luaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLl9yZW1vdmVRcnk9YS5zYXNTdG9yZVNlcnZpY2Uu'@;
put 'cmVtb3ZlUXVlcnkuc3Vic2NyaWJlKGQ9PnthLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPj0xJiYoYS5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD0xLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHMubGVuZ3Ro'@;
put 'PTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzPVtdLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0b3JzOltdfSksYS53aGVy'@;
put 'ZUNsYXVzZUZuKCkpKX0pLGEuY29sdW1uc1N1Yj1hLnNhc1N0b3JlU2VydmljZS5jb2x1bW5zLnN1YnNjcmliZShkPT57bGV0IGg9ZC5kYXRhLmNvbHM7ImhvbWUiIT09S24ucm9vdFBhcmFtJiYiZWRpdG9yIiE9PUtuLnJvb3RQYXJhbXx8KGEuY29scz1oLGEubGliZHM9ZC5saWJkcyxLbi5l'@;
put 'ZGl0b3IuZmlsdGVyLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShoKSkpLCJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmS24udmlld2VyLmZpbHRlci5jb2xzLmxlbmd0aDwxJiYoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEtuLnZpZXdlci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpT'@;
put 'T04uc3RyaW5naWZ5KGgpKSksYS5saWJkc3x8KGEubGliZHM9ZC5saWJkcyl9KSxhLnZhbHVlc1N1Yj1hLnNhc1N0b3JlU2VydmljZS52YWx1ZXMuc3Vic2NyaWJlKGQ9PnsoImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUtuLnJvb3RQYXJhbSkmJktuLmVkaXRvci5maWx0ZXIu'@;
put 'dmFscy5sZW5ndGg8MSYmKGEudmFscz1kLnZhbHMsS24uZWRpdG9yLmZpbHRlci52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZC52YWxzKSkpLCJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmS24udmlld2VyLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxLbi52aWV3'@;
put 'ZXIuZmlsdGVyLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSl9KX0pKCl9b25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlc0xvYWRNb3JlKGEsZCxoLGYpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZ2V0RnJvbUdsb2JhbHMo'@;
put 'KSxzZXRUaW1lb3V0KCgpPT57bGV0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3ZhbHNfdmFyX2lkMF8wIik7YSYmYS5mb2N1cygpfSw1MDApfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5zU3ViJiZ0aGlzLmNvbHVtbnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnZhbHVlc1N1YiYmdGhp'@;
put 'cy52YWx1ZXNTdWIudW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShaaCksR2UodmMpLEdlKFl1KSxHZSh4cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXF1ZXJ5Il1d'@;
put 'LGlucHV0czp7Y2FjaGluZzoiY2FjaGluZyIsdmlld2JveElkOiJ2aWV3Ym94SWQifSxmZWF0dXJlczpbZm8oW3twcm92aWRlOkhmLHVzZVZhbHVlOiJlbi1HQiJ9XSldLGRlY2xzOjM4LHZhcnM6MTEsY29uc3RzOltbInBpY2tlciIsIiJdLFsibm90UGlja2VyIiwiIl0sWyJub3RQaWNrZXJS'@;
put 'YW5nZSIsIiJdLFsiY2hlY2tib3hWYWx1ZXMiLCIiXSxbMSwiY2xyLWZsZXgtcm93IiwiY2xyLWZvcm0tY29udHJvbCIsIm0tMCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2Rl'@;
put 'bCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLCJtbC0xNSJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJpZCIsInVzZVBpY2tlcnMiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImNsci1y'@;
put 'b3ciXSxbMSwic2VsZWN0IiwiY2xyLWNvbC1tZC0yIiwibWItMzAiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLFszLCJzZWxlY3RlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1jb2wtbWQtMTAiLCJtYi0zMCJdLFsxLCJs'@;
put 'aW5lLW51bWJlcnMiLCJsYW5ndWFnZS1tYXJrdXAiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsImxhbmd1YWdlLXNxbCJdLFsxLCJjb250ZW50Il0sWzEsImNsYXVzZXMtY29udGFpbmVyIiwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0s'@;
put 'WyJjbGFzcyIsImNsYXVzZS1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJzZWxlY3RlZCJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsYXVzZS1yb3ciXSxbMSwiY2xhdXNlLWxvZ2ljIiwiY2xyLWNvbC1tZC0yIl0sWzEsInNlbGVjdCJdLFsiY2xy'@;
put 'U2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgbXQtMTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNsYXVzZS1xdWVyeSIsImNsci1jb2wtbWQtMTAiXSxbInNoYXBlIiwidGltZXMi'@;
put 'LCJzaXplIiwiMzYiLCJjbGFzcyIsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IiwzLCJpbnZhbGlkLWNsYXVzZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwi'@;
put 'bXQtMTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsdXMiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLDEsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJ2YXJpYWJsZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWzEsImRhdGFsaXN0'@;
put 'LXdyYXBwZXIiXSxbImxhYmVsIiwiVmFyaWFibGUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiaWQiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZhbHVlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJvcGVyYXRvci1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNv'@;
put 'bC1tZC0zIl0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbGFzcyIsInZhbHVlLWNvbCBmb3JtLWdyb3VwIGNsci1jb2wtbWQtMyIsNCwibmdWYXIiXSxbMSwiY2xhdXNlLWJ1dHRvbnMiLCJjbHItY29sLW1kLTIiLCJidG4tZ3JvdXAiXSxbMSwiYnRu'@;
put 'IiwiYnRuLXdhcm5pbmciLCJidG4tYmxvY2siLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwibWludXMiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWzEsInZhbHVlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsYXNz'@;
put 'IiwiY2hlY2tib3gtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaW5nbGUtZmllbGQtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJyYW5nZS12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbnRhaW5zLXZhbHMiLDQsIm5nSWYiXSxbMSwiY2hlY2tib3gtdmFscyJdLFsidHlwZSIsImJ1'@;
put 'dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJzaW5nbGUtZmllbGQtdmFscyJdLFsxLCJyYW5nZS12YWxzIl0sWzEsImZyb20iXSxbMSwidG8iXSxbMSwiY29udGFpbnMtdmFscyJd'@;
put 'LFsidHlwZSIsInRleHQiLDEsImlucHV0LXZhbCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsImRhdGUiLDMsInZhbHVlQ2hhbmdlIiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1'@;
put 'dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsidHlwZSIsInRpbWUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiZGlz'@;
put 'YWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwidGltZSIsMywib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLDMsInNlbGVjdGVkTGFiZWxDaGFuZ2UiLCJ2'@;
put 'YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJzZWNvbmRMYWJlbCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVl'@;
put 'Il0sWzMsInZhbHVlIiw0LCJuZ0lmIl0sWyJsYWJlbCIsIlZhbHVlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImRpc2FibGVkIl0sWzEsImluLXZhbHVlcy1tb2Rh'@;
put 'bCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsIm5vLXZhbHVlcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmb3JtLWJsb2NrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIs'@;
put 'ImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsIm5vLXZhbHVlcyJdLFsxLCJmb3JtLWJsb2NrIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtp'@;
put 'ZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgzLCJpbnB1dCIsNiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxiaShoLmR5bmFtaWNXaGVyZUNsYXVzZSxNKXx8KGguZHluYW1p'@;
put 'Y1doZXJlQ2xhdXNlPU0pLEN0KE0pfSksaGUoKSxkZSg0LCJsYWJlbCIsNyksTGUoNSwiRHluYW1pYyB3aGVyZSBjbGF1c2UiKSxoZSgpKCkoKSxkZSg2LCJkaXYiLDgpKDcsImNsci1jaGVja2JveC13cmFwcGVyIikoOCwiaW5wdXQiLDkpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihN'@;
put 'KXtyZXR1cm4gd3QoZiksYmkoaC51c2VQaWNrZXJzLE0pfHwoaC51c2VQaWNrZXJzPU0pLEN0KE0pfSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC51c2VQaWNrZXJzQ2hhbmdlKCkpfSksaGUoKSxkZSg5LCJsYWJlbCIsNyksTGUoMTAsIiBVc2UgcGlja2VycyAi'@;
put 'KSxoZSgpKCkoKSgpLGRlKDExLCJkaXYiLDEwKSgxMiwiZGl2IiwxMSkoMTMsImNsci1zZWxlY3QtY29udGFpbmVyIikoMTQsImxhYmVsIiksTGUoMTUsIkdyb3VwIGxvZ2ljIiksaGUoKSxkZSgxNiwic2VsZWN0IiwxMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3'@;
put 'dChmKSxiaShoLmdyb3VwTG9naWMsTSl8fChoLmdyb3VwTG9naWM9TSksQ3QoTSl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zZXRHcm91cExvZ2ljKGguZ3JvdXBMb2dpYykpfSksbXQoMTcsQ210LDIsMiwib3B0aW9uIiwxMyksaGUoKSgpKCks'@;
put 'ZGUoMTgsImRpdiIsMTQpKDE5LCJwcmUiLDE1KSxMZSgyMCwiICAgICAgIiksbXQoMjEsU210LDQsMCwiZGl2IiwxNiksTGUoMjIsIlxuXG4gICAgICAiKSxkZSgyMywiY29kZSIsMTcpLExlKDI0KSxoZSgpLExlKDI1LCJcbiAgICAiKSxoZSgpKCkoKSxkZSgyNiwiZGl2IiwxOCkoMjcsImRp'@;
put 'diIsMTkpLG10KDI4LE1tdCwxLDAsImRpdiIsMjApKDI5LEJtdCwxNSw4LCJkaXYiLDIxKSxoZSgpKCksbXQoMzAsWm10LDQsNCwibmctdGVtcGxhdGUiLG51bGwsMCxfdSkoMzIscW10LDMsNywibmctdGVtcGxhdGUiLG51bGwsMSxfdSkoMzQsSm10LDIsNSwibmctdGVtcGxhdGUiLG51bGws'@;
put 'MixfdSkoMzYsbjZ0LDksNCwibmctdGVtcGxhdGUiLG51bGwsMyxfdSl9MiZkJiYoZmUoMykscGkoIm5nTW9kZWwiLGguZHluYW1pY1doZXJlQ2xhdXNlKSxmZSg1KSxwaSgibmdNb2RlbCIsaC51c2VQaWNrZXJzKSxmZSg4KSx4ZSgiZGlzYWJsZWQiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9'@;
put 'PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPDEpLHBpKCJuZ01vZGVsIixoLmdyb3VwTG9naWMpLGZlKCkseGUoIm5nRm9yT2YiLGgubG9naWNPcGVyYXRvcnMpLGZlKDQpLHhlKCJuZ0lmIixoLndoZXJlQ2xhdXNlTG9hZGluZyksZmUoMyksd3Io'@;
put 'aC53aGVyZUNsYXVzZSksZmUoMyksVHIoImNsci1jb2wtbWQtMTAiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLGZlKCkseGUoIm5nSWYiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9PWguY2xhdXNl'@;
put 'cy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLGZlKCkseGUoIm5nRm9yT2YiLGguY2xhdXNlcy5xdWVyeU9iaikpfSxkZXBlbmRlbmNpZXM6W2xzLHlvLE4xLFMyLGNwLEZsLG91LCR1LGRzLFcxLFZ5LElkLCR5LEd5LFlmLEdmLGVjLEIxLFdmLG5sLEdzLHg2'@;
put 'ZSxTdyxtbXQsdm10XSxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOyAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmNsYXVzZS1sb2dpY3tiYWNrZ3JvdW5kOiMxOTJhMzB9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuY2xhdXNlLXF1ZXJ5e2JhY2tncm91bmQ6IzI2M2U0OH0gIGJvZHlbY2RzLXRo'@;
put 'ZW1lPWxpZ2h0XSAuY2xhdXNlLWxvZ2lje2JhY2tncm91bmQ6I2U5ZTllOX0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY2xhdXNlLXF1ZXJ5e2JhY2tncm91bmQ6I2ZiZjhmOH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1sb2dpY1tf'@;
put 'bmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MTVweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVz'@;
put 'ZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozMHB4IDAgMjBweCAyMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNl'@;
put 'cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gPiAuY2xyLXJvd1tfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMt'@;
put 'Y29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdID4gLmNsci1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFzdC1jaGlsZCl7cGFkZGluZy1ib3R0b206MTVweDttYXJnaW4tYm90dG9tOjE1cHg7Ym9yZGVyLWJvdHRvbTox'@;
put 'cHggc29saWQgcmdiYSgwLDAsMCwuMTYpfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZW1vdmUtZ3JvdXAtY2xhdXNlLWJ1dHRvbltfbmdjb250'@;
put 'ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MTBweDtjb2xvcjpncmF5fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52'@;
put 'YXJpYWJsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3BhZGRpbmctYm90dG9tOjFweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1x'@;
put 'dWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFyaWFibGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhcmlhYmxlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3Qtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAub3BlcmF0b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY29udGVu'@;
put 'dFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAub3BlcmF0b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zZWxlY3QtY29udGFpbmVyW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtoZWlnaHQ6NDVweDttYXJnaW4tdG9wOjA7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hlY2tib3gtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nOjAgNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWNoZWNrYm94LWNvbnRh'@;
put 'aW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMjBweDtvdmVyZmxvdy15OnNjcm9sbH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNl'@;
put 'cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7'@;
put 'd2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFs'@;
put 'c1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAl'@;
put 'fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2Vz'@;
put 'LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250'@;
put 'YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxz'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX0uY29udGVu'@;
put 'dFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5m'@;
put 'cm9tW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjEwcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29u'@;
put 'dGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjEwMHB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5l'@;
put 'cltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVu'@;
put 'dC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAu'@;
put 'Y2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250'@;
put 'YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFp'@;
put 'bmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0u'@;
put 'Y29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5jbGF1c2UtYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNl'@;
put 'cy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLWJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6YXV0b30uaW52YWxpZC1jbGF1c2VbX25n'@;
put 'Y29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZDk0YjMxfS5jbGF1c2Utcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0uY2xhdXNlLXJvd1tfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7cG9zaXRpb246cmVs'@;
put 'YXRpdmU7Y29udGVudDoiIjtoZWlnaHQ6LjQxNjY3cmVtO3dpZHRoOi40MTY2N3JlbTt0b3A6LjI5MTY3cmVtO3JpZ2h0Oi4yNXJlbTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3'@;
put 'dy53My5vcmdcXDIwMjYlMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtt'@;
put 'YXJnaW46MH0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5saW5lLW51bWJlcnN7Ym9yZGVyLWNvbG9yOiM5ODk3OTchaW1wb3J0YW50fXByZVtjbGFzcyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzo4cHg7bWFyZ2luOjA7Ym9yZGVyLXJhZGl1czoxcHg7ZGlzcGxheTpm'@;
put 'bGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6NjZweDtwb3NpdGlvbjpyZWxhdGl2ZX1wcmVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjph'@;
put 'YnNvbHV0ZTtsZWZ0OjEwcHg7dG9wOjEwcHh9cHJlW2NsYXNzKj1sYW5ndWFnZS1dW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNvZGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtib3JkZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fWlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde2Jv'@;
put 'cmRlcjowO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2IzYjNiM31pbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOm5vbmV9LmluLXZhbHVlcy1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtZm9v'@;
put 'dGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZDhkOGQ4O21hcmdpbi10b3A6MTBweH0ucHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVdLCAucHJvZ3Jlc3Mtc3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O3dp'@;
put 'ZHRoOjEwMCU7aGVpZ2h0OjRweDt0b3A6M3B4fSddfSl9fXJldHVybiBjfSkoKSxyND0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW9uQ2xpY2soYSl7YS50YXJnZXQuZm9jdXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlj'@;
put 'e3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcFN0ZWFsRm9jdXMiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2xpY2siLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2xpY2sodil9KX19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHI2'@;
put 'dD1bInNlYXJjaExpYlRyZWVJbnB1dCJdO2Z1bmN0aW9uIGk2dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDExKX1mdW5jdGlvbiBvNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9l'@;
put 'KDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIGE2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgsMCksZ2koIm5nTW9kZWxD'@;
put 'aGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gYmkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxo'@;
put 'ZSgpLG10KDQsaTZ0LDEsMCwiY2xyLWljb24iLDkpKDUsbzZ0LDEsMCwiY2xyLWljb24iLDEwKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPXZvKDMpLGQ9T2UoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxm'@;
put 'ZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gczZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIGw2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLE9l'@;
put 'KCk7Y29uc3QgaD12bygzKSxmPU9lKDIpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIGM2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Mbigp'@;
put 'O2RlKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDE4LDIpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gYmkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdCho'@;
put 'KX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxtdCg0LHM2dCwxLDAsImNsci1pY29uIiw5KSg1LGw2dCwxLDAsImNsci1pY29uIiwxMCksaGUoKSgpfWlm'@;
put 'KDImYyl7Y29uc3QgYT12bygzKSxkPU9lKDIpLiRpbXBsaWNpdDtmZSgyKSxwaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gdTZ0KGMsbCl7MSZjJiZH'@;
put 'dCgwLCJjbHItaWNvbiIsMjYpfWZ1bmN0aW9uIGQ2dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI3KX1mdW5jdGlvbiBoNnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiksTGUoMSwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiks'@;
put 'aGUoKSl9ZnVuY3Rpb24gZjZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjgpLG10KDEsaDZ0LDIsMCwic3BhbiIsMjUpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLm5nVmFyO2ZlKCkseGUoIm5nSWYiLGEpfX1mdW5jdGlvbiBwNnQoYyxsKXsxJmMmJkd0KDAs'@;
put 'ImNsci1pY29uIiwxMSl9ZnVuY3Rpb24gZzZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksT2UoKTtjb25zdCBoPXZvKDMpLGY9T2UoMykuJGltcGxpY2l0LHY9T2UoMyk7cmV0dXJuIGgudmFsdWU9IiIs'@;
put 'Zi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwiY29sdW1ucy5DT0xOQU1FIikpfSksaGUoKX19ZnVuY3Rpb24gbTZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIsMjksMiksZ2koIm5nTW9k'@;
put 'ZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMykuJGltcGxpY2l0O3JldHVybiBiaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMykuJGltcGxpY2l0O3JldHVy'@;
put 'biBDdChPZSgzKS50cmVlT25GaWx0ZXIoaCwiY29sdW1ucy5DT0xOQU1FIikpfSksaGUoKSxtdCg0LHA2dCwxLDAsImNsci1pY29uIiw5KSg1LGc2dCwxLDAsImNsci1pY29uIiwxMCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKDMpLiRpbXBsaWNpdDtmZSgyKSxwaSgibmdN'@;
put 'b2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gdjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsMzAp'@;
put 'LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPU9lKDMpLiRpbXBsaWNpdCx2PU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5jb2x1bW5PbkNsaWNrKGgsdixmKSl9KSxHdCgyLCJjbHItaWNvbiIsMzEpLExlKDMpLGhlKCkoKX1pZigyJmMpe2Nv'@;
put 'bnN0IGE9bC4kaW1wbGljaXQsZD1PZSg2KTtmZSgpLFRyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShhLkNPTFVSSSkpLGZlKDIpLElyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gYjZ0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxtNnQsNiwzLCJjbHItdHJlZS1u'@;
put 'b2RlIiwzKSgyLHY2dCw0LDMsImNsci10cmVlLW5vZGUiLDQpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsYS5jb2x1bW5zKSxmZSgpLHhlKCJuZ0Zvck9mIixhLmNvbHVtbnMpfX1mdW5jdGlvbiB5NnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4o'@;
put 'KTtkZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLm5nVmFyLGY9T2UoKS4kaW1wbGljaXQsdj1PZSgyKS4kaW1wbGljaXQsTT1PZSgpO3JldHVybiBDdChoPyIiOk0udGFibGVPbkNsaWNrKGYuVEFCTEVVUkksZix2'@;
put 'KSl9KSxjaSgyLDIxKSxtdCgzLHU2dCwxLDAsImNsci1pY29uIiwyMikoNCxkNnQsMSwwLCJjbHItaWNvbiIsMjMpLHVpKCksTGUoNSksaGUoKSxtdCg2LGY2dCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDI0KSg3LGI2dCwzLDIsIm5nLWNvbnRhaW5lciIsMjUpLGhlKCl9aWYoMiZjKXtj'@;
put 'b25zdCBhPWwubmdWYXIsZD1PZSgpLiRpbXBsaWNpdCxoPU9lKDIpLiRpbXBsaWNpdCxmPU9lKCk7ZmUoKSxUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSx4ZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIp'@;
put 'KSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLElyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksZmUoMikseGUoIm5nSWYiLGYuaGFzQ29sdW1ucyl9fWZ1bmN0aW9uIF82dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl'@;
put 'KDAsImNsci10cmVlLW5vZGUiLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYsdi50YWJsZXMpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rp'@;
put 'b24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIGJpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksbXQoMSx5NnQsOCw5LCJjbHItdG9vbHRpcCIsMTkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPU9lKDMpO1RyKCJj'@;
put 'bHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLHBpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLGEubG9hZGluZ0NvbHVtbnMmJiFhLmNvbHVtbnMpLGZlKCkseGUoIm5nVmFyIixkKzE+aC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQp'@;
put 'fX1mdW5jdGlvbiB3NnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNCwxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5saWJy'@;
put 'YXJ5TGlzdCkpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0O3JldHVybiBiaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDIsInAiLDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7'@;
put 'Y29uc3QgaD12bygxKSxmPU9lKCkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gdi5saWI9Zi5MSUJSQVJZSUQsQ3Qodi5saWJyYXJ5T25DbGljayh2LmxpYnx8IiIsZixoKSl9KSxHdCgzLCJjbHItaWNvbiIsMTYpLExlKDQpLGhlKCksbXQoNSxjNnQsNiwzLCJjbHItdHJlZS1ub2RlIiwzKSg2'@;
put 'LF82dCwyLDUsImNsci10cmVlLW5vZGUiLDE3KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxl'@;
put 'cyksZmUoNCksSXIoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlcyksZmUoKSx4ZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBDNnQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLHc2dCw3LDcsImNsci10cmVlLW5vZGUiLDEzKSx1aSgpKSwyJmMp'@;
put 'e2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIFM2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMzIpKDEsInNwYW4iLDMzKSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWxldCBNNnQ9KCgpPT57Y2xhc3Mg'@;
put 'Y3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNlYXJjaExpYklucHV0TGlzdD1uZXcgcGQsdGhpcy50YWJsZU9uQ2xpY2tFbWl0dGVyPW5ldyBYcix0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlcj1uZXcgWHIsdGhpcy5o'@;
put 'YXNDb2x1bW5zPSExLHRoaXMucGFnaW5nPSEwLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGliPSIiLHRoaXMudGFibGU9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGV9bmdPbkluaXQoKXt9'@;
put 'bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2VhcmNoTGliSW5wdXRMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pfW5nT25DaGFuZ2VzKGEpe2EubGlicmFyeUxpc3Q/LmN1cnJlbnRWYWx1ZSYmdGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5oZWxwZXJTZXJ2'@;
put 'aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCl9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJ5TGlzdCx0'@;
put 'aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxLbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxp'@;
put 'YnJhcnlPbkNsaWNrKGEsZCxoKXtkLmluRm9yZWdyb3VuZD0hMDtjb25zdCBmPSgpPT5zZXRUaW1lb3V0KCgpPT5oLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuZm9jdXMoKSk7aWYoZC50YWJsZXMpZC5leHBhbmRl'@;
put 'ZD0hZC5leHBhbmRlZCx0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxpYnJhcnk6ZCx0YWJsZXNMb2FkZWQ6ITB9KTtlbHNle2QubG9hZGluZ1RhYmxlcz0hMCx0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxpYnJhcnk6ZCx0YWJsZXNM'@;
put 'b2FkZWQ6ITF9KTtjb25zdCB2PXNldEludGVydmFsKCgpPT57ZC5sb2FkaW5nVGFibGVzfHwoZigpLGNsZWFySW50ZXJ2YWwodikpfSw1MDApfWQuZXhwYW5kZWQmJmYoKSx0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKHRoaXMubGlicmFyeUxpc3QsZCl9dGFibGVPbkNsaWNrKGEsZCxoKXt2YXIg'@;
put 'Zj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtmLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDUwLCgpPT57Zi5oYXNDb2x1bW5zPyhkLmNvbHVtbnM/KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsITA9PT1kLmV4cGFuZGVkJiYoZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5l'@;
put 'bWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITB9KSkpOihkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQubG9hZGluZ0NvbHVtbnM9ITAsZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGli'@;
put 'cmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITF9KSksZi5jb2xsYXBzZVRyZWVJdGVtcyhoLnRhYmxlcyxkKSk6Zi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pfSl9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgp'@;
put 'e3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVSSX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfWxpYkNvbHVtbkFjdGl2ZShhKXtp'@;
put 'ZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3RoLTFdPT1oW2gubGVuZ3RoLTFdfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpT'@;
put 'T04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5s'@;
put 'aWJyYXJpZXNQYWdpbmc9ITEpfWhhbmRsZVNjcm9sbChhKXtsZXQgZD1hLnRhcmdldDtkJiZkLnNjcm9sbFRvcD49ZC5zY3JvbGxIZWlnaHQtZC5vZmZzZXRIZWlnaHQtMTAmJnRoaXMubG9hZE1vcmVMaWJyYXJpZXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJu'@;
put 'IG5ldyhkfHxjKShHZShZdSksR2UodTEpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRjLXRyZWUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZuYShyNnQsNSksMiZkKXtsZXQgZjt4aShmPUVpKCkpJiYoaC5zZWFyY2hMaWJJbnB1'@;
put 'dExpc3Q9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJzY3JvbGwiLGZ1bmN0aW9uKHYpe3JldHVybiBoLmhhbmRsZVNjcm9sbCh2KX0pfSxpbnB1dHM6e2hhc0NvbHVtbnM6Imhhc0NvbHVtbnMiLHBhZ2luZzoicGFnaW5nIixsaWJyYXJ5TGlzdDoibGlicmFyeUxp'@;
put 'c3QifSxvdXRwdXRzOnt0YWJsZU9uQ2xpY2tFbWl0dGVyOiJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixsaWJyYXJ5T25DbGlja0VtaXR0ZXI6ImxpYnJhcnlPbkNsaWNrRW1pdHRlciJ9LGZlYXR1cmVzOlt3bF0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJd'@;
put 'LFsibGliVHJlZU5vZGUiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1z'@;
put 'ZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNo'@;
put 'Iiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFu'@;
put 'Z2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwi'@;
put 'Y2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2Rl'@;
put 'bENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQs'@;
put 'Im5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxn'@;
put 'Il0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNr'@;
put 'Il0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci10cmVlIiksbXQoMSxhNnQsNiwzLCJjbHItdHJlZS1ub2RlIiwzKSgyLEM2dCwyLDEs'@;
put 'Im5nLWNvbnRhaW5lciIsNCksaGUoKSxtdCgzLFM2dCwzLDAsImRpdiIsNSkpLDImZCYmKGZlKCkseGUoIm5nSWYiLGgubGlicmFyeUxpc3QpLGZlKCkseGUoIm5nRm9yT2YiLGgubGlicmFyeUxpc3QpLGZlKCkseGUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSl9LGRlcGVuZGVuY2llczpb'@;
put 'bHMseW8sUzIsY3AsVGgsUGQsZmcsRmwsVjAsRDIsUmQsZzcsdjcsbTcsZWMsbmwsR3MsU3cscjRdLHN0eWxlczpbImNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Y2xyLXRyZWVbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgICAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcjpmb2N1cyAuY2xyLXRyZWVub2RlLWxpbmt7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLXRyZWUtbGluay1ob3Zlci1jb2xvciwgI2U4ZThlOCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9'@;
put 'Il19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHg2dD1bInJlc2l6ZUJveCJdLEU2dD1bImRyYWdIYW5kbGVDb3JuZXIiXSxUNnQ9KGMsbCxhKT0+KHtjb2xIZWFkZXJzSGlkZGVuOmMsY29sSGVhZGVyc1Zpc2libGU6bCxoZWFkZXJQa3M6YX0pLEE2dD0oYyxsKT0+KHt4OmMseTpsfSk7ZnVuY3Rp'@;
put 'b24gazZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMzcpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksanUoIlRvIHVubG9jayBtb3JlIHRoZW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUudmll'@;
put 'd2JveF9saW1pdD8idmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIEQ2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMzgpLEd0KDEsImNsci1zcGlubmVyIiwzOSksaGUoKSl9ZnVuY3Rpb24gSTZ0KGMsbCl7MSZjJiYo'@;
put 'ZGUoMCwicCIsNDApLExlKDEsIiBWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCAiKSxoZSgpKX1mdW5jdGlvbiBSNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkYy10cmVlIiw0MSksRnQoImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEp'@;
put 'LEN0KE9lKCkubGlicmFyeU9uQ2xpY2soaCkpfSkoInRhYmxlT25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLnRhYmxlT25DbGljayhoKSl9KSxoZSgpfTImYyYmeGUoImxpYnJhcnlMaXN0IixPZSgpLmxpYnJhcmllcyl9ZnVuY3Rpb24gTDZ0KGMsbCl7'@;
put 'MSZjJiYoZGUoMCwicCIsNDIpLExlKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxpc3Qgb24gdGhlIGxlZnQgIiksaGUoKSl9ZnVuY3Rpb24gTzZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsNTApfWZ1bmN0aW9uIFA2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEi'@;
put 'LDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiB2Lm1pbmltaXplKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDEsImNsci1pY29uIiwyMCksZGUoMiwic3BhbiIsMTkpLExlKDMsIk1pbmltaXplIHZp'@;
put 'ZXdib3giKSxoZSgpKCl9fWZ1bmN0aW9uIEY2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiB2LnJlc3RvcmUoZiksQ3Qodi5zdG9wUHJvcGFnYXRp'@;
put 'b24oaCkpfSksR3QoMSwiY2xyLWljb24iLDIxKSxkZSgyLCJzcGFuIiwxOSksTGUoMywiUmVzdG9yZSB2aWV3Ym94IiksaGUoKSgpfX1mdW5jdGlvbiBINnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChh'@;
put 'KS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuc2VsZWN0Vmlld2JveChoKSl9KSxkZSgxLCJkaXYiLDQ0KSxMZSgyKSxtdCgzLE82dCwxLDAsImNsci1zcGlubmVyIiw0NSksaGUoKSxkZSg0LCJkaXYiKSg1LCJhIiw0NiksRnQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRp'@;
put 'bXBsaWNpdCx2PU9lKCk7cmV0dXJuIHYucmVzZXRQb3NTaXplKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDYsImNsci1pY29uIiw0NyksZGUoNywic3BhbiIsMTkpLExlKDgsIlJlc2V0IHBvc2l0aW9uIGFuZCBzaXplIiksaGUoKSgpLG10KDksUDZ0LDQsMCwiYSIsNDgpKDEw'@;
put 'LEY2dCw0LDAsImEiLDQ4KSxkZSgxMSwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiB2LmNsb3NlKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDEyLCJjbHItaWNvbiIsNDkpLGRlKDEzLCJzcGFuIiwx'@;
put 'OSksTGUoMTQsIkNsb3NlIHZpZXdib3giKSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKCk7VHIoInNlbGVjdGVkIiwobnVsbD09ZC5zZWxlY3RlZFZpZXdib3g/bnVsbDpkLnNlbGVjdGVkVmlld2JveC5pZCk9PT1hLmlkKSxmZSgyKSxGZigiICMiLGEuaWQs'@;
put 'IiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLGZlKCkseGUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKDIpLFRyKCJkaXNhYmxlZCIsMD09PWEueCYmMD09PWEueSksZmUoNCkseGUoIm5nSWYiLCFhLm1pbmltaXplZCksZmUoKSx4ZSgibmdJZiIsYS5taW5pbWl6ZWQpfX1mdW5jdGlv'@;
put 'biBONnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxJcigiICIsYSwiICIpfX1mdW5jdGlvbiBWNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJkaXYiLDUzKSgyLCJhcHAtYXV0b2Nv'@;
put 'bXBsZXRlIiw1NCwwKSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9dm8oMyksdj1PZSgpLm5nVmFyO3JldHVybiBDdChPZSgpLm9uQ29sc2VhcmNoQ2hhbmdlKGYsaCx2LmNvbEhlYWRlcnNIaWRkZW4pKX0pLG10KDQsTjZ0LDIsMSwib3B0aW9uIiw1NSksaGUo'@;
put 'KSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkubmdWYXI7ZmUoMikseGUoImlucHV0SWQiLCJ2aWV3Ym94LWNvbHVtbi1zZWFyY2giKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLGZlKDIpLHhlKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNIaWRkZW4pfX1mdW5jdGlvbiBCNnQoYyxsKXsxJmMm'@;
put 'Jkd0KDAsImNsci1pY29uIiw2MSl9ZnVuY3Rpb24gajZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDYyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMykub25Db2xSZW1vdmUoaCkpfSks'@;
put 'aGUoKX19ZnVuY3Rpb24gejZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1OCkoMSwic3BhbiIpLExlKDIpLG10KDMsQjZ0LDEsMCwiY2xyLWljb24iLDU5KSxoZSgpLG10KDQsajZ0LDEsMCwiY2xyLWljb24iLDYwKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgyKS5u'@;
put 'Z1ZhcixoPU9lKCk7Y3JlKCJjb2wtYm94IGNvbHVtbi0iLGEsIiIpLFRyKCJjdXJzb3ItZGVmYXVsdC1pIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSkoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLHhlKCJjZGtEcmFnRGF0YSIsYSkoImNka0RyYWdE'@;
put 'aXNhYmxlZCIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLGZlKDIpLGp1KCIgIixhLCIgIiwibnVtIj09PShudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJs'@;
put 'ZS4kZGF0YWZvcm1hdHMudmFyc1thXS50eXBlKT8iKG51bWVyaWMpIjoiIiwiICIpLGZlKCkseGUoIm5nSWYiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxmZSgpLHhlKCJuZ0lmIiwhZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpfX1mdW5jdGlvbiBVNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9'@;
put 'TG4oKTtjaSgwKSxkZSgxLCJwIiwxMCksTGUoMiwiQ29sdW1ucyBUbyBEaXNwbGF5IChkcmFnIGFuZCByZS1vcmRlcikiKSxoZSgpLGRlKDMsImRpdiIsNTYpLEZ0KCJjZGtEcm9wTGlzdERyb3BwZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgyKS5jb2x1bW5zRHJvcChoKSl9'@;
put 'KSxtdCg0LHo2dCw1LDEzLCJkaXYiLDU3KSxoZSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkubmdWYXI7ZmUoMykseGUoImNka0Ryb3BMaXN0RGF0YSIsYS5jb2xIZWFkZXJzVmlzaWJsZSksZmUoKSx4ZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIFo2dChj'@;
put 'LGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTEpLG10KDEsVjZ0LDUsMywibmctY29udGFpbmVyIiw1MikoMixVNnQsNSwyLCJuZy1jb250YWluZXIiLDUyKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcjtmZSgpLHhlKCJuZ0lmIixhLmNvbEhlYWRlcnNIaWRkZW4pLGZlKCkseGUoIm5nSWYi'@;
put 'LGEuY29sSGVhZGVyc1Zpc2libGUpfX1mdW5jdGlvbiBXNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsODYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmNvbGxhcHNlKGgpKX0pLGhl'@;
put 'KCl9fWZ1bmN0aW9uIFk2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw4NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuZXhwYW5kKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIEc2dChjLGwp'@;
put 'e2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiw4OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQsZj12bygxNik7cmV0dXJuIEN0KE9lKCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpfX1mdW5jdGlvbiAkNnQoYyxsKXsxJmMm'@;
put 'JihkZSgwLCJzcGFuIiw4OSksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gSzZ0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsOTApLExlKDEsIkxvYWRpbmcuLi4iKSxoZSgpKX1mdW5jdGlvbiBxNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIs'@;
put 'OTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0LGY9dm8oMTYpO3JldHVybiBPZSgpLnJlbG9hZFRhYmxlRGF0YShoKSxDdChmLnZhbHVlPSIiKX0pLGhlKCl9fWZ1bmN0aW9uIFg2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsOTUpLEd0KDEsImNs'@;
put 'ci1zcGlubmVyIiwzOSksaGUoKSl9ZnVuY3Rpb24gSjZ0KGMsbCl7aWYoMSZjJiZHdCgwLCJob3QtdGFibGUiLDk2KSwyJmMpe2NvbnN0IGE9T2UoKS5uZ1ZhcixkPU9lKCkuJGltcGxpY2l0LGg9T2UoKTt4ZSgiaG90SWQiLCJob3RJbnN0YW5jZV92aWV3Ym94XyIrZC5pZCkoInJlYWRPbmx5'@;
put 'IiwhMCkoIm1vZGlmeUNvbFdpZHRoIixoLm1heFdpZHRoQ2hla2VyKSgiY29weVBhc3RlIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29weVBhc3RlKSgiY29udGV4dE1lbnUiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb250ZXh0TWVudSkoIm11bHRpQ29sdW1uU29ydGlu'@;
put 'ZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsaC52aWV3Ym94VGFibGVzW2FdLmhv'@;
put 'dFRhYmxlLmNvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3duTWVudSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmRyb3Bkb3duTWVudSkoImhlaWdodCIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmhlaWdodCkoImNlbGxzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFi'@;
put 'bGUuY2VsbHMpKCJtYXhSb3dzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUubWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJsaWNlbnNlS2V5IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUubGljZW5zZUtleSl9fWZ1bmN0aW9uIFE2dChjLGwpe2lmKDEmYyYmKGRl'@;
put 'KDAsImRpdiIsOTIpLG10KDEsWDZ0LDIsMCwiZGl2Iiw5MykoMixKNnQsMSwxNywiaG90LXRhYmxlIiw5NCksaGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXIsZD1PZSgpLiRpbXBsaWNpdDt3ZCgiZGlzcGxheSIsZC5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxmZSgpLHhlKCJuZ0lmIixkLmxvYWRp'@;
put 'bmdEYXRhJiZhPDApLGZlKCkseGUoIm5nSWYiLGE+LTEpfX1mdW5jdGlvbiBlOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDYzLDEpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuZm9jdXNWaWV3'@;
put 'Ym94KGgpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnZpZXdib3hEcmFnRW5kZWQoaCxmKSl9KSxkZSgyLCJkaXYiLDY0KSgzLCJzcGFuIiw2NSksTGUoNCksaGUoKSxkZSg1LCJkaXYiLDY2KSxtdCg2LFc2dCwx'@;
put 'LDAsImNsci1pY29uIiw2NykoNyxZNnQsMSwwLCJjbHItaWNvbiIsNjgpLGRlKDgsImNsci1pY29uIiw2OSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLm1pbmltaXplKGgpKX0pLGhlKCksZGUoOSwiY2xyLWljb24iLDcwKSxG'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuY2xvc2UoaCkpfSksaGUoKSgpKCksZGUoMTAsInNwYW4iLDcxLDIpLEZ0KCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9dm8oMSksTT12'@;
put 'bygxMSk7cmV0dXJuIEN0KE9lKCkuZHJhZ01vdmUoTSx2LGYsaCkpfSksaGUoKSxkZSgxMiwiZm9ybSIsNzIpKDEzLCJkaXYiLDczKSgxNCwiZGl2Iiw3NCkoMTUsImlucHV0Iiw3NSwzKSxGdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj12bygx'@;
put 'Nik7cmV0dXJuIEN0KE9lKCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpLG10KDE3LEc2dCwxLDAsImNsci1pY29uIiw3NikoMTgsJDZ0LDIsMCwic3BhbiIsNzcpLGhlKCksZGUoMTksImNsci1jaGVja2JveC1jb250YWluZXIiKSgyMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMSwiaW5w'@;
put 'dXQiLDc4KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIGJpKGYuc2VhcmNoTnVtZXJpYyxoKXx8KGYuc2VhcmNoTnVtZXJpYz1oKSxDdChoKX0pLGhlKCksZGUoMjIsImxhYmVsIiksTGUoMjMsIk51bWVyaWMiKSxoZSgpKCko'@;
put 'KSgpLGRlKDI0LCJkaXYiLDQ0KSxtdCgyNSxLNnQsMiwwLCJzcGFuIiw3OSkoMjYscTZ0LDEsMCwiY2xyLWljb24iLDgwKSxkZSgyNywiYSIsODEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPXZvKDE2KTtyZXR1cm4gT2UoKS5vcGVuRmlsdGVyKGgp'@;
put 'LEN0KGYudmFsdWU9IiIpfSksR3QoMjgsImNsci1pY29uIiw4MiksZGUoMjksInNwYW4iLDgzKSxMZSgzMCksaGUoKSgpLGRlKDMxLCJjbHItaWNvbiIsODQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5vcGVuVGFibGVFZGl0'@;
put 'KGgpKX0pLGhlKCkoKSgpLG10KDMyLFE2dCwzLDQsImRpdiIsODUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTt3ZCgiZGlzcGxheSIsYS5taW5pbWl6ZWQ/Im5vbmUiOiIiKSgid2lkdGgiLGEud2lkdGgsInB4IikoImhlaWdodCIsYS5oZWlnaHQsInB4IikoInBv'@;
put 'aW50ZXItZXZlbnRzIixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpKCJib3gtc2hhZG93IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLFRyKCJmb2N1c2VkIixhLmZvY3VzZWQpLHhlKCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsbHAoMzQsQTZ0LGEueCxhLnkpKSgiaWQiLCJ2aWV3Ym94XyIrYS5p'@;
put 'ZCksZmUoNCksRmYoIiAjIixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxmZSgyKSx4ZSgibmdJZiIsIWEuY29sbGFwc2VkKSxmZSgpLHhlKCJuZ0lmIixhLmNvbGxhcHNlZCksZmUoMykseGUoImlkIiwiaGFuZGxlX3ZpZXdib3hfIithLmlkKSxmZSgyKSx3ZCgiZGlzcGxh'@;
put 'eSIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxmZSgzKSx4ZSgidHlwZSIsYS5zZWFyY2hOdW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksZmUoMikseGUoIm5nSWYiLCFhLnNlYXJjaExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksZmUoMykscGkoIm5nTW9kZWwiLGEuc2Vh'@;
put 'cmNoTnVtZXJpYyksZmUoNCkseGUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRpbmdEYXRhKSxmZSgyKSxUcigiZmlsdGVyLWFjdGl2ZSIsIjAiIT09YS5maWx0ZXJfcGspLGZlKDIpLHdyKGEuZmlsdGVyVGV4dCksZmUoKSxUcigiZGlzYWJsZWQiLCFkLnRh'@;
put 'YmxlRWRpdEV4aXN0cyhhKSksZmUoKSx4ZSgibmdWYXIiLGQuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSkpfX1mdW5jdGlvbiB0OHQoYyxsKXtpZigxJmMmJkd0KDAsImFwcC1xdWVyeSIsOTcsNCksMiZjKXtjb25zdCBhPU9lKCk7eGUoInZpZXdib3hJZCIsbnVsbD09YS5maWx0ZXJpbmdWaWV3'@;
put 'Ym94P251bGw6YS5maWx0ZXJpbmdWaWV3Ym94LmlkKX19bGV0IEU2ZT0oKCk9PntjbGFzcyBje2dldCB2aWV3Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5fdmlld2JveE1vZGFsfXNldCB2aWV3Ym94TW9kYWwoYSl7aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94JiZhKXJl'@;
put 'dHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdCghMSk7dGhpcy5fdmlld2JveE1vZGFsPWEsYSYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0cnVjdG9yKGEsZCxoLGYs'@;
put 'dixNLEQsWixuZSxjZSl7dGhpcy5uZ1pvbmU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLnNhc1N0b3JlU2VydmljZT12LHRoaXMubG9nZ2VyU2VydmljZT1NLHRoaXMuaGVscGVyU2VydmljZT1ELHRoaXMucm91dGVy'@;
put 'PVosdGhpcy5hY3RpdmF0ZWRSb3V0ZT1uZSx0aGlzLmNkZj1jZSx0aGlzLl92aWV3Ym94TW9kYWw9ITEsdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2U9bmV3IFhyLHRoaXMubGliaW5mbz1udWxsLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMCx0aGlzLnZpZXdib3hlcz1bXSx0aGlzLmRlZmF1bHRD'@;
put 'b25maWc9e2lkOi0xLGxpYnJhcnk6IiIsdGFibGU6IiIsd2lkdGg6NTAwLGhlaWdodDozMDAseDowLHk6MTUwLGNvbHVtbnM6W119LHRoaXMuc2FzanNDb25maWc9bmV3IHZoLlNBU2pzQ29uZmlnLHRoaXMuaG90VGFibGVEZWZhdWx0PXtkYXRhOltdLGhlYWRlclBrczpbXSwkZGF0YWZvcm1h'@;
put 'dHM6e30sYWxsQ29sSGVhZGVyczpbXSxjb2xIZWFkZXJzSGlkZGVuOltdLGNvbEhlYWRlcnNWaXNpYmxlOltdLGNvbEhlYWRlcnM6W10sY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5UGFzdGU6e2NvcHlDb2x1'@;
put 'bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sY29sdW1uczpbXSxjb2xzOltdLGhlaWdodDoiMTAwJSIsc2V0dGluZ3M6e30saGlkZGVuQ29sdW1uczohMCxtYW51YWxDb2x1bW5Nb3ZlOiExLGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxk'@;
put 'cm9wZG93bk1lbnU6dm9pZCAwfSx0aGlzLnZpZXdib3hUYWJsZXM9W10sdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJMb2FkaW5nPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5'@;
put 'PTEvMCx0aGlzLm1heFZpZXdib3hlcz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0PT09MS8wPzY6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdHx8Nix0aGlzLmhvdFRhYmxlUmVnaXN0ZXJlcj1uZXcgV219bmdPbkluaXQoKXt0aGlzLnNhc1N0b3Jl'@;
put 'U2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e3RoaXMubGlicmFyaWVzPWQuc2FzbGlic30pLmNhdGNoKGQ9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KS5maW5hbGx5KCgpPT57dGhpcy5saWJyYXJpZXNMb2FkaW5nPSExfSksdGhpcy5fcXVlcnk9dGhpcy5zYXNTdG9yZVNlcnZp'@;
put 'Y2UucXVlcnkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmNsYXVzZXM9ZC5vYmosdGhpcy5maWx0ZXJMaWJkcz1kLmxpYmRzfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUo'@;
put 'ZD0+e3RoaXMuaG90VGFibGVEZWZhdWx0LmxpY2Vuc2VLZXk9ZH0pO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3Ym94ZXM7YSYmKCExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveD8oc2V0VGltZW91dCgoKT0+dGhpcy5ldmVu'@;
put 'dFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJMaW5raW5nIFZpZXdib3hlcyIpKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOnt9fSkpOih0aGlzLnZpZXdib3hlcz10aGlzLmRlY29kZVVybERhdGEoYSksc2V0'@;
put 'VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KSkpLHRoaXMucmVMb2FkVmlld2JveHRhYmxlcyh0aGlzLnZpZXdib3hlcyl9bmdBZnRlclZpZXdJbml0KCl7fWdldCB2aWV3Ym94TGltaXRSZWFjaGVkKCl7cmV0dXJuIHRoaXMudmlld2JveGVzLmxlbmd0aD49dGhp'@;
put 'cy5tYXhWaWV3Ym94ZXN9Y2xyTW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoYSl9bGlicmFyeU9uQ2xpY2soYSl7YS50YWJsZXNMb2FkZWR8fHRoaXMubG9hZFRhYmxlcyhhLmxpYnJhcnkuTElCUkFSWVJFRixhLmxpYnJhcnkpfXRhYmxlT25DbGljayhh'@;
put 'KXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihkLnZpZXdib3hMaW1pdFJlYWNoZWQpcmV0dXJuO2NvbnN0IGg9ey4uLmQuZGVmYXVsdENvbmZpZyx0YWJsZTphLmxpYlRhYmxlLGxpYnJhcnk6YS5saWJyYXJ5LkxJQlJBUllOQU1FLGxvYWRpbmdEYXRhOiEwLGZpbHRlcl9w'@;
put 'azoiMCIsaWQ6ZC52aWV3Ym94ZXMubGVuZ3RoKzEseDp3aW5kb3cuaW5uZXJXaWR0aC1kLmRlZmF1bHRDb25maWcud2lkdGgseToxNTB9O2Qudmlld2JveGVzLnB1c2goaCksc2V0VGltZW91dCgoKT0+e2Quc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KTtjb25zdCBmPWAke2EubGlicmFyeS5M'@;
put 'SUJSQVJZUkVGfS4ke2EubGliVGFibGV9YDt5aWVsZCBkLmxvYWREYXRhKGYsaCksaC5sb2FkaW5nRGF0YT0hMSxkLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSxkLnNuYXBUb0dyaWQoKX0pKCl9bG9hZFRhYmxlcyhhLGQpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnZpZXdU'@;
put 'YWJsZXMoYSkudGhlbihoPT57bGV0IGY9aC5tcHRhYmxlcy5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuTUVNTkFNRX0pO3RoaXMubGliaW5mbz1oLmxpYmluZm98fFtdLHRoaXMudGFibGVzPWYsZCYmKGQudGFibGVzPWYsZC5saWJpbmZvPXRoaXMubGliaW5mbyxkLmxvYWRpbmdUYWJsZXM9'@;
put 'ITEsZi5sZW5ndGg+MCYmKGQuZXhwYW5kZWQ9ITApKX0pLmNhdGNoKGg9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoaCl9KX1yZWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09aC52aWV3Ym94'@;
put 'VGFibGVzLmZpbmQoRD0+RC52aWV3Ym94SWQ9PT1kLmlkKTtoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShhLHBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpKS50aGVuKEQ9PntNJiYoTS5ob3RUYWJsZS5kYXRhPUQudmlld2RhdGEpLGYobnVsbCl9KS5jYXRjaCgoKT0+e3YoKX0pfSl9KSgp'@;
put 'fWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09ITEsRD1oLnZpZXdib3hUYWJsZXMuZmluZChaPT5aLnZpZXdib3hJZD09PWQuaWQpO0QmJigiMCI9PT1kLmZpbHRlcl9wa3x8IWQuZmlsdGVyX3Br'@;
put 'KSYmZigpLGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oWj0+e0Q/TT0hMDpEPXt2aWV3Ym94SWQ6ZC5pZCx2aWV3Ym94TGliRGF0YXNldDphLGhvdFRhYmxlOmlMKGguaG90VGFibGVEZWZhdWx0KX0sRC5ob3RUYWJsZS5kYXRh'@;
put 'PVoudmlld2RhdGEsRC5ob3RUYWJsZS4kZGF0YWZvcm1hdHM9Wi4kdmlld2RhdGEsRC5ob3RUYWJsZS5jb2xzPVouY29scyxOZWUoRC5ob3RUYWJsZS5jb2xzLFtdLFouJHZpZXdkYXRhKTtsZXQgbmU9W10sY2U9W107Zm9yKGxldCBiZSBpbiBaLnZpZXdkYXRhWzBdKWJlJiZjZS5wdXNoKGJl'@;
put 'KTtmb3IobGV0IGJlPTA7YmU8Y2UubGVuZ3RoO2JlKyspbmUucHVzaCh7ZGF0YTpjZVtiZV19KTtELmhvdFRhYmxlLmhlYWRlclBrcz1pTChaLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSksRC5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzPWNlLmZpbHRlcihiZT0+IUQuaG90VGFi'@;
put 'bGUuaGVhZGVyUGtzLmluY2x1ZGVzKGJlKSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuPWlMKEQuaG90VGFibGUuYWxsQ29sSGVhZGVycyksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZT1jZS5maWx0ZXIoYmU9PkQuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKGJlKSksRC5o'@;
put 'b3RUYWJsZS5jb2xIZWFkZXJzPWNlLEQuaG90VGFibGUuY29sdW1ucz1uZSxkLmNvbHVtbnMmJmQuY29sdW1ucy5sZW5ndGg+MD8oRC5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlPWQuY29sdW1ucyxkLmNvbHVtbnM/Lm1hcCgoYmUsRWUpPT57Y29uc3QgQmU9Y2VbYmVdLHFlPUQuaG90VGFi'@;
put 'bGUuY29sSGVhZGVyc0hpZGRlbi5pbmRleE9mKEJlKTtxZT4tMSYmKEQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UocWUsMSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZVtFZV09QmUpfSkpOkQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVzaCguLi5ELmhvdFRh'@;
put 'YmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKDAsMTApKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPUQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuZmlsdGVyKGJlPT5iZSksTXx8aC52aWV3Ym94VGFibGVzLnB1c2goRCksZC5xdWVyeT1oLmhlbHBlclNlcnZpY2UuZGVlcENs'@;
put 'b25lKFoucXVlcnkpLGQuZmlsdGVyVGV4dD1aLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxzZXRUaW1lb3V0KCgpPT57aC51cGRhdGVIb3RDb2x1bW5zKEQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbnx8W10sZC5pZCk7Y29uc3QgYmU9aC5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZC5pZCk7'@;
put 'YmU/LnVwZGF0ZVNldHRpbmdzKHttYW51YWxDb2x1bW5Nb3ZlOkQuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZSxhZnRlckdldENvbEhlYWRlcjooRWUsQmUpPT57Y29uc3QgcWU9YmU/LmNvbFRvUHJvcChFZSk7cWUmJkQuaG90VGFibGUuaGVhZGVyUGtzLmluZGV4T2YocWUpPi0xJiZCZS5j'@;
put 'bGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxCZS5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9fSksYmU/LnJlbmRlcigpLGguc2VsZWN0ZWRWaWV3Ym94JiZoLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGQpfSksZigpfSkuY2F0'@;
put 'Y2goWj0+e2gubG9nZ2VyU2VydmljZS5lcnJvcihaKSx2KCl9KX0pfSkoKX1yZUxvYWRWaWV3Ym94dGFibGVzKGEpe2EubWFwKGQ9Pntjb25zdCBoPWAke2QubGlicmFyeX0uJHtkLnRhYmxlfWA7ZC5sb2FkaW5nRGF0YT0hMCx0aGlzLmxvYWREYXRhKGgsZCkudGhlbigoKT0+e2QubG9hZGlu'@;
put 'Z0RhdGE9ITF9KX0pfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfWdldFZpZXdib3hUYWJsZUluZGV4KGEpe3JldHVybiB0aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGg9Pmgudmlld2JveElkPT09YS5pZCl9cmVzaXplKGEsZCl7Y29uc3QgaD1hLmdldEJvdW5k'@;
put 'aW5nQ2xpZW50UmVjdCgpLGY9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PWgubGVmdC1mLmxlZnQraC53aWR0aCxNPWgudG9wLWYudG9wK2guaGVpZ2h0O3JldHVybiBkLnN0eWxlLndpZHRoPXYrInB4IixkLnN0eWxlLmhlaWdodD1NKyJweCIsdGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zv'@;
put 'cm0oKSx0aGlzLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDFlMywoKT0+e3RoaXMudmlld2JveENoYW5nZWQoKSx0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pLHt3aWR0aDp2LGhlaWdodDpNfX1kcmFnTW92ZShhLGQsaCxmKXt0aGlzLm5nWm9uZS5ydW5P'@;
put 'dXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IHY9dGhpcy5yZXNpemUoYSxkKTtoLndpZHRoPXYud2lkdGgsaC5oZWlnaHQ9di5oZWlnaHR9KX1zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKXt0aGlzLnJlc2l6ZUJveFF1ZXJ5LmZvckVhY2goYT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LmdldEJv'@;
put 'dW5kaW5nQ2xpZW50UmVjdCgpLGg9YGhhbmRsZV8ke2EubmF0aXZlRWxlbWVudC5pZH1gLGY9dGhpcy5kcmFnSGFuZGxlQ29ybmVyUXVlcnkuZmluZCgodixNKT0+di5uYXRpdmVFbGVtZW50LmlkPT09aCk7dGhpcy5zZXRIYW5kbGVUcmFuc2Zvcm0oZj8ubmF0aXZlRWxlbWVudCxkLCJib3Ro'@;
put 'Iil9KX1zZXRIYW5kbGVUcmFuc2Zvcm0oYSxkLGgpe2NvbnN0IGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgdj1kLndpZHRoLWYud2lkdGgsTT1kLmhlaWdodC1mLmhlaWdodDt2Kz01LE0rPTUsIngiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHt2fXB4LCAw'@;
put 'KWApLCJ5Ij09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKDAsICR7TX1weClgKSwiYm90aCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Z9cHgsICR7TX1weClgKX1mb2N1c1ZpZXdib3goYSl7dGhpcy52aWV3Ym94ZXMubWFwKGQ9PntkLmZvY3VzZWQ9'@;
put 'ITF9KSxhLmZvY3VzZWQ9ITB9dmlld2JveERyYWdFbmRlZChhLGQpe2xldCBmPWEuc291cmNlLmdldFJvb3RFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC54PWYubGVmdCxkLnk9Zi50b3AsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNuYXBUb0dyaWQoKXtjb25zdCBhPXdpbmRv'@;
put 'dy5pbm5lcldpZHRoLGQ9d2luZG93LmlubmVySGVpZ2h0LE09TWF0aC5jZWlsKHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSxEPU1hdGguZmxvb3IodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLGNlPShhLTUqKE0rMSkpL00sYmU9KGEtNSooRCsxKSkvRDtsZXQgQmU9MCxydD0oZC0yNTAtNjAp'@;
put 'LzIscHQ9MCxkdD0wO2ZvcihsZXQgSnQ9MDtKdDx0aGlzLnZpZXdib3hlcy5sZW5ndGg7SnQrKyl7bGV0IHZuPXRoaXMudmlld2JveGVzW0p0XSxDbj0hKEp0Pk0tMSk7Y29uc3QgdG49Q24/Y2U6YmU7IUNuJiYwPT09ZHQmJihwdD0wLGR0KyssQmU9MCksdm4ueD01K0JlK3B0Kih0bis1KSx2'@;
put 'bi55PTI1MCtkdCoocnQrNSksdm4ud2lkdGg9dG4sdm4uaGVpZ2h0PXJ0LHB0Kyt9dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSl9bWluaW1pemVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmlt'@;
put 'aXplZD0hMH0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzZXRQb3NTaXplKGEpe2EueD13aW5kb3cuaW5uZXJXaWR0aC10aGlzLmRlZmF1bHRDb25m'@;
put 'aWcud2lkdGgsYS55PXRoaXMuZGVmYXVsdENvbmZpZy55LGEud2lkdGg9dGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEuaGVpZ2h0PXRoaXMuZGVmYXVsdENvbmZpZy5oZWlnaHQsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfW1pbmltaXplKGEpe2EubWluaW1pemVkPSEwLHRoaXMudmlld2JveENo'@;
put 'YW5nZWQoKX1yZXN0b3JlKGEpe2EubWluaW1pemVkPSExLHRoaXMudmlld2JveENoYW5nZWQoKX1jb2xsYXBzZShhKXthLmNvbGxhcHNlZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9ZXhwYW5kKGEpe2EuY29sbGFwc2VkPSExLHRoaXMudmlld2JveENoYW5nZWQoKX1jbG9zZShhKXtjb25z'@;
put 'dCBkPXRoaXMudmlld2JveGVzLmZpbmRJbmRleChmPT5mLmlkPT09YS5pZCksaD10aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGY9PmYudmlld2JveElkPT09YS5pZCk7ZD4tMSYmdGhpcy52aWV3Ym94ZXMuc3BsaWNlKGQsMSksaD4tMSYmdGhpcy52aWV3Ym94VGFibGVzLnNwbGljZSho'@;
put 'LDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD09PWEuaWQmJnRoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKSxLbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShkWiksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNlbGVjdFZpZXdib3goYSl7dm9pZCAwPT09'@;
put 'dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZSYmdm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKTphLmlkPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkP3RoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKTp0aGlzLnJlc2V0U2VsZWN0ZWRW'@;
put 'aWV3Ym94KGEpfWNvbHVtbnNEcm9wKGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4mJihhLnByZXZpb3VzQ29udGFpbmVyPT09YS5jb250YWluZXI/YzFlKGEuY29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4'@;
put 'KTpmdW5jdGlvbiBPRmUoYyxsLGEsZCl7Y29uc3QgaD1UeChhLGMubGVuZ3RoLTEpLGY9VHgoZCxsLmxlbmd0aCk7Yy5sZW5ndGgmJmwuc3BsaWNlKGYsMCxjLnNwbGljZShoLDEpWzBdKX0oYS5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGEuY29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4'@;
put 'LGEuY3VycmVudEluZGV4KSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlJiYib2JqZWN0Ij09dHlwZW9mIHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVycykmJnRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYS5pdGVtLmRhdGEsYS5jdXJyZW50'@;
put 'SW5kZXgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfW9uQ29sc2VhcmNoQ2hhbmdlKGEsZCxoKXtjb25zdCBmPWguaW5kZXhPZihkKTtoLnNwbGljZShmLDEpLGEudmFsdWU9IiIsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUmJih0aGlzLnNlbGVjdGVk'@;
put 'Vmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnB1c2goZCksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMu'@;
put 'dXBkYXRlQ29sdW1uT3JkZXJIb3QoZCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aC0xLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSl9b25Db2xSZW1vdmUoYSl7aWYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJs'@;
put 'ZT8uaG90VGFibGUpe2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5pbmRleE9mKGEpO3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuc3BsaWNlKGQsMSksdGhpcy5zZWxlY3RlZFZp'@;
put 'ZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnB1c2goYSksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMudXBk'@;
put 'YXRlQ29sdW1uT3JkZXJIb3QoYSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9fXJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PWEs'@;
put 'dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT10aGlzLnZpZXdib3hUYWJsZXMuZmluZChkPT5kLnZpZXdib3hJZD09PWEuaWQpfXVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl7dGhpcy5zZWxlY3RlZFZpZXdib3g9dm9pZCAwLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9dm9pZCAwfXN0b3BQcm9w'@;
put 'YWdhdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfW9wZW5GaWx0ZXIoYSl7dGhpcy5zZWxlY3RWaWV3Ym94KGEpO2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzW3RoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSldO3RoaXMuZmlsdGVyTGliZHM9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9'@;
put 'YCx0aGlzLmZpbHRlcmluZ1ZpZXdib3g9YSx0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5maWx0ZXJMaWJkcyxkLmhvdFRhYmxlLmNvbHMpfW9wZW5UYWJsZUVkaXQoYSl7Y29uc3QgZD1h'@;
put 'LmxpYnJhcnkrIi4iK2EudGFibGU7bGV0IGg9bG9jYXRpb24uaHJlZi5zbGljZSgwLGxvY2F0aW9uLmhyZWYuaW5kZXhPZigiIyIpKTtoPWAke2h9Iy9lZGl0b3IvJHtkfWAsd2luZG93Lm9wZW4oaCwiX2JsYW5rIil9cmVzZXRGaWx0ZXIoKXt0aGlzLmZpbHRlcmluZ1ZpZXdib3gmJih0aGlz'@;
put 'LmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPSIwIix0aGlzLnJlbG9hZFRhYmxlRGF0YSh0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLHRoaXMuZmlsdGVyPSExLHRoaXMudmlld2JveENoYW5nZWQoKSxLbi52aWV3Ym94ZXNbdGhpcy5maWx0ZXJpbmdWaWV3Ym94LmlkXT10aGlzLmhlbHBlclNl'@;
put 'cnZpY2UuZGVlcENsb25lKGRaKSl9c2VuZENsYXVzZSgpe3RoaXMuZmlsdGVyTG9hZGluZz0hMDtsZXQgYT1bXSxkPVtdO2lmKHR5cGVvZiB0aGlzLmNsYXVzZXM+InUiKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3tsZXQgaD10aGlz'@;
put 'LmNsYXVzZXMucXVlcnlPYmo7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspe2NvbnN0IHY9aFtmXS5lbGVtZW50czthPXYuZmlsdGVyKGZ1bmN0aW9uKE0pe3JldHVybiBudWxsPT09TS52YXJpYWJsZX0pLGEubGVuZ3RoJiZkLnB1c2godil9fWlmKGQubGVuZ3RoKXJldHVybiB0aGlzLm51'@;
put 'bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3RyeXtpZih2b2lkIDAhPT10aGlzLmNsYXVzZXMmJnRoaXMuZmlsdGVyTGliZHMpe2NvbnN0IGg9e2dyb3VwTG9naWM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTt0aGlzLmNsYXVzZXMu'@;
put 'cXVlcnlPYmouZm9yRWFjaCh2PT57Y29uc3QgTT17ZmlsdGVyQ2xhdXNlczpbXX07di5lbGVtZW50cy5mb3JFYWNoKEQ9PntNLmZpbHRlckNsYXVzZXMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEQpKX0pLE0uY2xhdXNlTG9naWM9di5jbGF1c2VMb2dpYyxoLmZpbHRlckdy'@;
put 'b3Vwcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoTSkpfSk7Y29uc3QgZj10aGlzLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGgpO3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeSh0aGlzLmZpbHRlckxpYmRzLGYpLnRoZW4odj0+e3RoaXMu'@;
put 'ZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9di5yZXN1bHRbMF0uRklMVEVSX1JLLHRoaXMubG9hZERhdGEodGhpcy5maWx0ZXJMaWJkcyx0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLnRoZW4oKCk9Pnt0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITF9KSx0aGlzLnZpZXdib3hD'@;
put 'aGFuZ2VkKCl9KS5jYXRjaCh2PT57dGhpcy5maWx0ZXJMb2FkaW5nPSExfSl9fWNhdGNoe3RoaXMuZmlsdGVyTG9hZGluZz0hMX19c2VhcmNoVGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtkLnNlYXJjaExvYWRpbmc9ITA7bGV0IGY9YS52YWx1ZSx2PWQubGli'@;
put 'cmFyeSsiLiIrZC50YWJsZSxNPXBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpO2NvbnN0IEQ9aC52aWV3Ym94VGFibGVzLmZpbmQoWj0+Wi52aWV3Ym94SWQ9PT1kLmlkKTtEJiYoeWllbGQgaC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFTZWFyY2goZixkLnNlYXJjaE51bWVyaWMsdixNKS50'@;
put 'aGVuKFo9PntaLnNhc3BhcmFtc3x8Wi52aWV3RGF0YT9ELmhvdFRhYmxlLmRhdGE9Wi52aWV3ZGF0YTpkLnNlYXJjaExvYWRpbmc9ITB9KS5jYXRjaChaPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKFopfSksZC5zZWFyY2hMb2FkaW5nPSExKX0pKCl9cmVsb2FkVGFibGVEYXRhKGEpe3ZhciBk'@;
put 'PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YDthLmxvYWRpbmdEYXRhPSEwLHlpZWxkIGQucmVsb2FkRGF0YShoLGEpLGEubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSgpfXVw'@;
put 'ZGF0ZUhvdENvbHVtbnMoYSxkKXt0aGlzLnVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKSx0aGlzLnNldENvbHVtbk9yZGVyKGQpfXVwZGF0ZUNvbHVtbk9yZGVySG90KGEsZCxoKXtjb25zdCBmPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGgpO2lmKGYpe2NvbnN0IHY9Zi5wcm9wVG9D'@;
put 'b2woYSk7Zi5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKS5tb3ZlQ29sdW1uKHYsZCksZi5yZW5kZXIoKSx0aGlzLnNldENvbHVtbk9yZGVyKGgpfX10YWJsZUVkaXRFeGlzdHMoYSl7Y29uc3QgZD1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcyxoPWEubGlicmFyeTtyZXR1cm4hIWRbaF0m'@;
put 'JmRbaF0uaW5jbHVkZXMoYS50YWJsZSl9c2V0Q29sdW1uT3JkZXIoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kKGg9PmguaWQ9PT1hKTtpZihkKXtjb25zdCBoPXRoaXMuY3JlYXRlQ29sdW1uT3JkZXIoYSk7ZC5jb2x1bW5zPWgubGVuZ3RoPjA/aDpkLmNvbHVtbnN9dGhpcy52aWV3'@;
put 'Ym94Q2hhbmdlZCgpfWNyZWF0ZUNvbHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSk7aWYoIWQpcmV0dXJuW107Y29uc3QgaD1kLmdldENvbEhlYWRlcigpLGY9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVycztpZigh'@;
put 'ZilyZXR1cm5bXTtjb25zdCB2PXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlPy5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGh8fDUsTT1bXTtyZXR1cm4gaC5tYXAoKEQsWik9PntpZihaPHYpe2NvbnN0IG5lPWYuaW5kZXhPZihEKTtuZT4tMSYmTS5wdXNoKG5lKX19KSxNfXVw'@;
put 'ZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKXtjb25zdCBoPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGQpO2lmKGgpe2NvbnN0IGY9YS5tYXAodj0+aC5wcm9wVG9Db2wodikpO2gudXBkYXRlU2V0dGluZ3Moe2hpZGRlbkNvbHVtbnM6e2NvbHVtbnM6Zn19KSxoLnJlbmRlcigpfX1nZXRW'@;
put 'aWV3Ym94SG90SW5zdGFuY2UoYSl7cmV0dXJuIGE/dGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoYGhvdEluc3RhbmNlX3ZpZXdib3hfJHthfWApOnZvaWQgMH12aWV3Ym94Q2hhbmdlZCgpe2xldCBhO2NvbnN0IGQ9dGhpcy5lbmNvZGVVcmxEYXRhKHRoaXMudmlld2JveGVz'@;
put 'KTtkLmxlbmd0aD4wJiYoYT17dmlld2JveGVzOmR9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOmF9KSx0aGlzLnByZXBhcmVGaWx0ZXJDYWNoZSgpfXByZXBhcmVGaWx0ZXJDYWNoZSgpe2ZvcihsZXQgYSBvZiB0'@;
put 'aGlzLnZpZXdib3hlcylpZihLbi52aWV3Ym94ZXNbYS5pZF18fChLbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShkWikpLGEucXVlcnkmJmEucXVlcnkubGVuZ3RoPjApe2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzLmZpbmQoZj0+Zi52aWV3Ym94SWQ9'@;
put 'PT1hLmlkKSxoPWB2aWV3Ym94ZXMuJHthLmlkfWA7S24udmlld2JveGVzW2EuaWRdLmZpbHRlci5xdWVyeT1hLnF1ZXJ5LEtuLnZpZXdib3hlc1thLmlkXS5maWx0ZXIubGliZHM9YS5saWJyYXJ5KyIuIithLnRhYmxlLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0'@;
put 'ZXJDbGF1c2UoaCxkPy5ob3RUYWJsZS5jb2xzKX19ZW5jb2RlVXJsRGF0YShhKXtsZXQgZD0iIjtyZXR1cm4gYS5tYXAoKGgsZik9PntkKz1gJHtoLmlkfS0ke2gubGlicmFyeX0tJHtoLnRhYmxlfS0ke2gud2lkdGh9LSR7aC5oZWlnaHR9LSR7aC54fS0ke2gueX0tJHtoLmNvbGxhcHNlZD8x'@;
put 'OjB9LSR7aC5taW5pbWl6ZWQ/MTowfS0ke2guZmlsdGVyX3BrfHwwfSR7aC5jb2x1bW5zJiZoLmNvbHVtbnMubGVuZ3RoPjA/Ii0iK2guY29sdW1ucz8uam9pbigiLCIpOiIifWAsZiE9PWEubGVuZ3RoLTEmJihkKz0iOyIpfSksZH1kZWNvZGVVcmxEYXRhKGEpe2xldCBoPVtdO3JldHVybiBh'@;
put 'LnNwbGl0KCI7IikubWFwKHY9Pntjb25zdCBNPXYuc3BsaXQoIi0iKTtoLnB1c2goe2lkOnBhcnNlSW50KE1bMF0pLGxpYnJhcnk6TVsxXSx0YWJsZTpNWzJdLHdpZHRoOnBhcnNlSW50KE1bM10pLGhlaWdodDpwYXJzZUludChNWzRdKSx4OnBhcnNlSW50KE1bNV0pLHk6cGFyc2VJbnQoTVs2'@;
put 'XSksY29sbGFwc2VkOiEhcGFyc2VJbnQoTVs3XSksbWluaW1pemVkOiEhcGFyc2VJbnQoTVs4XSksY29sdW1uczpNWzEwXT8uc3BsaXQoIiwiKS5tYXAoRD0+cGFyc2VJbnQoRCkpfHxbXSxmaWx0ZXJfcGs6TVs5XX0pfSksaH1uZ09uRGVzdHJveSgpe3RoaXMuX3F1ZXJ5Py51bnN1YnNjcmli'@;
put 'ZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFlvKSxHZSh1MSksR2UodGwpLEdlKHZjKSxHZShaaCksR2UoTWQpLEdlKFl1KSxHZShMcyksR2UoQ3UpLEdlKHhzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVj'@;
put 'dG9yczpbWyJhcHAtdmlld2JveGVzIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKG5hKHg2dCw1KSxuYShFNnQsNSkpLDImZCl7bGV0IGY7eGkoZj1FaSgpKSYmKGgucmVzaXplQm94UXVlcnk9ZikseGkoZj1FaSgpKSYmKGguZHJhZ0hhbmRsZUNvcm5lclF1ZXJ5PWYpfX0s'@;
put 'aW5wdXRzOnt2aWV3Ym94TW9kYWw6InZpZXdib3hNb2RhbCJ9LG91dHB1dHM6e3ZpZXdib3hNb2RhbENoYW5nZToidmlld2JveE1vZGFsQ2hhbmdlIn0sZGVjbHM6NTYsdmFyczoyMyxjb25zdHM6W1siaW5wdXQiLCIiXSxbInJlc2l6ZUJveCIsIiJdLFsiZHJhZ0hhbmRsZUNvcm5lciIsIiJd'@;
put 'LFsic2VhcmNoRWwiLCIiXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsInJvb3QtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSJdLFsx'@;
put 'LCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJsaWNlbmNlLW5vdGljZSIsNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4Il0sWzEsImFkZC1uZXciLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwibXQtMC1pIl0sWzEsInctMTAwIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1'@;
put 'dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibS0wIHZpZXdib3gtbGltaXQtbm90aWNlIiw0LCJuZ0lmIl0sWzMsImxpYnJhcnlMaXN0IiwibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVPbkNsaWNrRW1pdHRlciIsNCwibmdJZiJdLFsxLCJjdXJyZW50bHktb3BlbiJd'@;
put 'LFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsIm1sLTMiLDMsImNsaWNrIl0sWyJzaGFwZSIsImdyaWQt'@;
put 'dmlldyIsInNpemUiLCIxOSJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbInNoYXBlIiwibWludXMiLCJzaXplIiwiMTkiXSxbInNoYXBlIiwid2luZG93LXJlc3RvcmUiLCJzaXplIiwiMTkiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9w'@;
put 'ZW4tdmlld2JveCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24t'@;
put 'aXRlbXMtY2VudGVyIiwibXQtMTAiXSxbMSwibS0wIl0sWyJjbGFzcyIsImNvbmZpZ3VyYXRpb24td3JhcHBlciIsImNka0Ryb3BMaXN0R3JvdXAiLCIiLDQsIm5nVmFyIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUi'@;
put 'LDMsImNsaWNrIl0sWzEsInZpZXdib3hlcy1jb250YWluZXIiXSxbImNsYXNzIiwidmlld2JveCIsImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4IiwiMCIsMywiZm9jdXNlZCIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIs'@;
put 'InBvaW50ZXItZXZlbnRzIiwiYm94LXNoYWRvdyIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIs'@;
put 'ImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMywidmlld2JveElkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJi'@;
put 'dG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJsaWNlbmNlLW5vdGljZSJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxb'@;
put 'ImNsck1lZGl1bSIsIiJdLFsxLCJtLTAiLCJ2aWV3Ym94LWxpbWl0LW5vdGljZSJdLFszLCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiwibGlicmFyeUxpc3QiXSxbMSwidGV4dC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJvcGVuLXZpZXdib3giLCJk'@;
put 'LWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFsbCIsIiIsImNsYXNzIiwibWwtMyIsNCwibmdJZiJdLFsicm9sZSIsInRvb2x0'@;
put 'aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjdXJzb3ItbW92ZSIsInNpemUiLCIxMyJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsImNs'@;
put 'YXNzIiwidG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtYm90dG9tLWxlZnQgbWwtMyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMTkiXSxbImNsclNtYWxsIiwiIiwxLCJtbC0zIl0sWyJjZGtEcm9wTGlzdEdyb3VwIiwiIiwxLCJjb25maWd1cmF0aW9u'@;
put 'LXdyYXBwZXIiXSxbNCwibmdJZiJdLFsxLCJjb2xzLXNlYXJjaCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBjb2x1bW5zIiwidGFiaW5kZXgiLCIwIiwzLCJ2YWx1ZUNoYW5nZSIsImlucHV0SWQiLCJl'@;
put 'bWl0T25seVNlbGVjdGVkIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2RrRHJvcExpc3QiLCIiLDEsImNvbHMtbGlzdCIsMywiY2RrRHJvcExpc3REcm9wcGVkIiwiY2RrRHJvcExpc3REYXRhIl0sWyJjZGtEcmFnIiwiIiwzLCJjbGFzcyIsImN1cnNvci1kZWZhdWx0LWkiLCJwcmltYXJ5'@;
put 'S2V5SGVhZGVyU3R5bGUiLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcmFnIiwiIiwzLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbInNoYXBlIiwidHJhc2giLCJjbGFz'@;
put 'cyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJrZXkiXSxbInNoYXBlIiwidHJhc2giLDEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwiIiwidGFiaW5k'@;
put 'ZXgiLCIwIiwxLCJ2aWV3Ym94IiwzLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImlkIl0sWyJjZGtEcmFnSGFuZGxlIiwiIiwxLCJkcmFnLWhhbmRsZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGln'@;
put 'bi1pdGVtcy1jZW50ZXIiXSxbMSwidGFibGUtdGl0bGUiXSxbMSwiYWN0aW9ucyJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsIm1pbnVzIiwzLCJjbGljayJdLFsic2hh'@;
put 'cGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbImNka0RyYWciLCIiLDEsImRyYWdIYW5kbGUiLCJjb3JuZXIiLDMsImNka0RyYWdNb3ZlZCIsImlkIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHIt'@;
put 'ZmxleC13cmFwIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWZsZXgtd3JhcCJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIsInNlYXJjaC1pbnB1dCIs'@;
put 'Mywia2V5dXAuZW50ZXIiLCJ0eXBlIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwibnVtZXJpY19jaGVjayIs'@;
put 'MywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInJlZnJlc2giLCJjbGFzcyIsImNsaWNrLWljb24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0'@;
put 'cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1sZyIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJtbC01IiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiLDEsImNsaWNrLWljb24iXSxbMSwidG9vbHRpcC1jb250ZW50IiwidG9vbHRpcC1sb25nIl0sWyJzaGFwZSIsInBlbmNpbCIsMSwiY2xp'@;
put 'Y2staWNvbiIsIm1sLTUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImNvbnRlbnQiLDMsImRpc3BsYXkiLDQsIm5nVmFyIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUgZG93biIsMywiY2xpY2siXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayJdLFsx'@;
put 'LCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbInNoYXBlIiwicmVmcmVzaCIsMSwiY2xpY2staWNvbiIsMywiY2xpY2siXSxbMSwiY29udGVudCJdLFsiY2xhc3MiLCJob3Qtc3Bpbm5lciBteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0'@;
put 'LCJuZ0lmIl0sWyJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsImhvdElkIiwicmVhZE9ubHkiLCJtb2RpZnlDb2xXaWR0aCIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5k'@;
put 'ZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwibGljZW5zZUtleSIsNCwibmdJZiJdLFsxLCJob3Qtc3Bpbm5lciIsIm15LTEwLW14'@;
put 'LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsInN0cmV0Y2hIIiwiYWxsIiwzLCJob3RJZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsIm11bHRpQ29sdW1uU29ydGluZyIsInZp'@;
put 'ZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImxpY2Vuc2VLZXkiXSxbMywidmlld2JveElkIl1dLHRlbXBs'@;
put 'YXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiw1KSxGdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5jbHJNb2RhbE9wZW5DaGFuZ2Uodil9KSxkZSgxLCJoMyIsNiksTGUoMiwiIFZpZXdib3hlcyAiKSxtdCgzLGs2dCwyLDIsInNwYW4i'@;
put 'LDcpLGhlKCksZGUoNCwiZGl2Iiw4KSg1LCJkaXYiLDkpKDYsInAiLDEwKSxMZSg3LCJBZGQgbmV3IiksaGUoKSxHdCg4LCJociIsMTEpLG10KDksRDZ0LDIsMCwiZGl2IiwxMikoMTAsSTZ0LDIsMCwicCIsMTMpKDExLFI2dCwxLDEsImRjLXRyZWUiLDE0KSxoZSgpLGRlKDEyLCJkaXYiLDE1'@;
put 'KSgxMywiZGl2IiwxNikoMTQsInAiLDEwKSxMZSgxNSwiQ3VycmVudGx5IG9wZW4iKSxoZSgpLGRlKDE2LCJkaXYiKSgxNywiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zbmFwVG9HcmlkKCl9KSxHdCgxOCwiY2xyLWljb24iLDE4KSxkZSgxOSwic3BhbiIsMTkpLExl'@;
put 'KDIwLCJTbmFwIHZpZXdib3hlcyB0byBncmlkIiksaGUoKSgpLGRlKDIxLCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm1pbmltaXplQWxsKCl9KSxHdCgyMiwiY2xyLWljb24iLDIwKSxkZSgyMywic3BhbiIsMTkpLExlKDI0LCJNaW5pbWl6ZSBhbGwgdmlld2JveGVz'@;
put 'IiksaGUoKSgpLGRlKDI1LCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3RvcmVBbGwoKX0pLEd0KDI2LCJjbHItaWNvbiIsMjEpLGRlKDI3LCJzcGFuIiwxOSksTGUoMjgsIlJlc3RvcmUgYWxsIHZpZXdib3hlcyIpLGhlKCkoKSgpKCksR3QoMjksImhyIiksbXQo'@;
put 'MzAsTDZ0LDIsMCwicCIsMjIpKDMxLEg2dCwxNSwxMCwiZGl2IiwyMyksZGUoMzIsImRpdiIsMjQpKDMzLCJwIiwyNSksTGUoMzQpLGhlKCkoKSxHdCgzNSwiaHIiKSxtdCgzNixaNnQsMywyLCJkaXYiLDI2KSxoZSgpKCksZGUoMzcsImRpdiIsMjcpKDM4LCJidXR0b24iLDI4KSxGdCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgudmlld2JveE1vZGFsPSExfSksTGUoMzksIiBPayAiKSxoZSgpKCkoKSxkZSg0MCwiZGl2IiwyOSksbXQoNDEsZTh0LDMzLDM3LCJkaXYiLDMwKSxoZSgpLGRlKDQyLCJjbHItbW9kYWwiLDMxKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlv'@;
put 'bih2KXtyZXR1cm4gYmkoaC5maWx0ZXIsdil8fChoLmZpbHRlcj12KSx2fSksZGUoNDMsImgzIiwzMiksTGUoNDQsIiBGaWx0ZXIgZm9yIHZpZXdib3ggdGFibGU6ICIpLGRlKDQ1LCJzcGFuIiksTGUoNDYpLGhlKCkoKSxkZSg0NywiZGl2IiwzMyksbXQoNDgsdDh0LDIsMSwiYXBwLXF1ZXJ5'@;
put 'IiwzNCksaGUoKSxkZSg0OSwiZGl2IiwyNykoNTAsImJ1dHRvbiIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXNldEZpbHRlcigpfSksTGUoNTEsIiByZXNldCBmaWx0ZXIgIiksaGUoKSxkZSg1MiwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBoLmZpbHRlcj0hMX0pLExlKDUzLCIgQ2FuY2VsICIpLGhlKCksZGUoNTQsImJ1dHRvbiIsMzYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zZW5kQ2xhdXNlKCl9KSxMZSg1NSwiIE9rICIpLGhlKCkoKSgpKSwyJmQmJih4ZSgiY2xyTW9kYWxPcGVuIixoLnZpZXdib3hNb2Rh'@;
put 'bCkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxmZSgzKSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PWguSW5maW5pdHkpLGZlKDYpLHhlKCJuZ0lmIixoLmxpYnJhcmllc0xvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGgu'@;
put 'dmlld2JveExpbWl0UmVhY2hlZCksZmUoKSx4ZSgibmdJZiIsaC52aWV3Ym94TW9kYWwpLGZlKDE5KSx4ZSgibmdJZiIsaC52aWV3Ym94ZXMubGVuZ3RoPDEpLGZlKCkseGUoIm5nRm9yT2YiLGgudmlld2JveGVzKSxmZSgzKSxJcigiIENvbmZpZ3VyYXRpb24gKCIsbnVsbCE9aC5zZWxlY3Rl'@;
put 'ZFZpZXdib3hUYWJsZSYmaC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldD8iIyIrKG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkrIiAiKyhudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlP251'@;
put 'bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldCk6InNlbGVjdCB2aWV3Ym94IGZyb20gYWJvdmUiLCIpICIpLGZlKDIpLHhlKCJuZ1ZhciIscE0oMTksVDZ0LG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUu'@;
put 'aG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sbnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFi'@;
put 'bGUuY29sSGVhZGVyc1Zpc2libGUsbnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuaGVhZGVyUGtzKSksZmUoNSkseGUoIm5nRm9yT2YiLGgudmlld2Jv'@;
put 'eGVzKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSx4ZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLGp1KCIgIyIsbnVsbD09aC5maWx0ZXJpbmdWaWV3Ym94P251bGw6aC5maWx0ZXJpbmdWaWV3Ym94LmlkLCIgIixoLmZpbHRlckxp'@;
put 'YmRzLCIgIiksZmUoMikseGUoIm5nSWYiLGguZmlsdGVyKSxmZSg2KSx4ZSgiY2xyTG9hZGluZyIsaC5maWx0ZXJMb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbHMseW8sRmwsb3UsJHUsVjAsUjIsZHMscTFlLFcxLFZ5LElkLFJkLE1oLGE3LFlmLEdmLEIxLG5sLGk3LEdzLHlwLEtlZSxEXyx2'@;
put 'MWUsbTFlLHhZLGcxZSxNNmUsTTZ0LFN3LGVFXSxzdHlsZXM6WyIubGljZW5jZS1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTouNn1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoxMzAw'@;
put 'fWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6Y2FsYygxMDAlIC0gNjBweCl9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtY29udGVudHtoZWlnaHQ6ODB2aH1jbHIt'@;
put 'bW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6'@;
put 'MTAwJTtoZWlnaHQ6MTAwJX1kYy10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6MX0udG9vbHRpcC1sb25nW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmFkZC1uZXdbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJTtwYWRkaW5n'@;
put 'LXJpZ2h0OjVweH0uYWRkLW5ld1tfbmdjb250ZW50LSVDT01QJV0gPiBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjFweH0udmlld2JveC1saW1pdC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6Ljc7Y29sb3I6I2U3NGMzY30gIGJvZHlbY2RzLXRoZW1lPWRh'@;
put 'cmtdIC5jdXJyZW50bHktb3BlbiAub3Blbi12aWV3Ym94OmhvdmVye2JhY2tncm91bmQ6IzMxNGI1N30gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5jb2xzLWxpc3R7YmFja2dyb3VuZDojMzE0YjU3O2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiM4NTg1ODV9ICBib2R5W2Nkcy10aGVtZT1kYXJr'@;
put 'XSAuY29sLWJveHtiYWNrZ3JvdW5kOiMzMTRiNTc7Ym9yZGVyLWNvbG9yOiM4NTg1ODU7Y29sb3I6aW5oZXJpdH0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY3VycmVudGx5LW9wZW4gLm9wZW4tdmlld2JveDpob3ZlcntiYWNrZ3JvdW5kOiNlOGU4ZTh9ICBib2R5W2Nkcy10aGVtZT1saWdo'@;
put 'dF0gLmNvbHMtbGlzdHtiYWNrZ3JvdW5kOiNmZmZ9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbC1ib3h7YmFja2dyb3VuZDojZmZmfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NTAlfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV0gICAub3Bl'@;
put 'bi12aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjNweCA1cHh9LmN1cnJlbnRseS1vcGVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcGVuLXZpZXdib3guc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzNjODUwMDJlfS52aWV3'@;
put 'Ym94ZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDo5OTl9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDoyMDBweDttaW4taGVpZ2h0OjIwMHB4O3Bvc2l0aW9uOmZpeGVk'@;
put 'O2xlZnQ6MDt0b3A6MDtwb2ludGVyLWV2ZW50czphbGw7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDAgMTBweCAtM3B4ICMwMDB9LnZpZXdib3guZm9j'@;
put 'dXNlZFtfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoxMTAwO291dGxpbmU6bm9uZX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4zMDE5NjA3ODQzKTtiYWNrZ3JvdW5kOiNmZmY7'@;
put 'aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtmbGV4OjE7b3ZlcmZsb3cteDphdXRvfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttaW4taGVpZ2h0OjIwcHg7YmFja2dyb3VuZC1jb2xvcjojM2M4NTAwO2JvcmRl'@;
put 'ci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtjb2xvcjojZmZmO3BhZGRpbmc6MCA1cHg7cG9pbnRlci1ldmVudHM6YWxsfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAudGFibGUt'@;
put 'dGl0bGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstYWxsfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxh'@;
put 'eTpmbGV4O21pbi13aWR0aDozNXB4fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7bWFyZ2lu'@;
put 'LWxlZnQ6NXB4fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7dHJhbnNmb3JtOnNjYWxlKDEuMyl9LnZpZXdi'@;
put 'b3hbX25nY29udGVudC0lQ09NUCVdICAgLmNsaWNrLWljb25bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGljay1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcnt0cmFuc2Zvcm06c2NhbGUoMS4zKX0udmlld2Jv'@;
put 'eFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGUuY29ybmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNXB4O2hlaWdodDoxNXB4O2N1'@;
put 'cnNvcjpud3NlLXJlc2l6ZX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZS5yaWdodFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MnB4O2hlaWdodDoxMDAlO2N1cnNvcjpldy1yZXNpemV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGUu'@;
put 'Ym90dG9tW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7Y3Vyc29yOm5zLXJlc2l6ZX0uY29scy1zZWFyY2hbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHg7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4yNzg0MzEzNzI1KTti'@;
put 'b3JkZXItcmFkaXVzOjNweH0uY29scy1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6c29saWQgMXB4ICNjY2M7bWluLWhlaWdodDo2MHB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOjQwMHB4O21heC13aWR0aDoxMDAlO21hcmdp'@;
put 'bi10b3A6NXB4fS5jb2wtYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAxMHB4O2JvcmRlci1ib3R0b206c29saWQgMXB4ICNjY2M7Y29sb3I6IzAwMDAwMGRlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVu'@;
put 'dDpzcGFjZS1iZXR3ZWVuO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6bW92ZTtmb250LXNpemU6MTRweH0uY29sLWJveC5zZWFyY2hbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze2JhY2tncm91bmQ6IzAwMDAwMDFhfS5jb2wtYm94LnByaW1hcnlLZXlIZWFkZXJTdHlsZVtfbmdjb250'@;
put 'ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzA2YjAwMjR9LmNkay1kcmFnLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4ICMwMDAzLDAgOHB4IDEwcHggMXB4ICMwMDAwMDAy'@;
put 'NCwwIDNweCAxNHB4IDJweCAjMDAwMDAwMWY7ei1pbmRleDoxMzAwIWltcG9ydGFudH0uY2RrLWRyYWctcGxhY2Vob2xkZXJbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLWRyYWctYW5pbWF0aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVz'@;
put 'IGN1YmljLWJlemllcigwLDAsLjIsMSl9LmNvbC1ib3hbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7Ym9yZGVyOm5vbmV9LmNvbHMtbGlzdC5jZGstZHJvcC1saXN0LWRyYWdnaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2wtYm94W19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoLmNk'@;
put 'ay1kcmFnLXBsYWNlaG9sZGVyKXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9LmRpc2FibGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi41O3RyYW5zZm9ybTpub25lIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpub25lfS5maWx0ZXItYWN0'@;
put 'aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMDA3MmEzfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5maXJzdENvbHVtbkhlYWRlclN0eWxlIGJ1dHRvbi5jaGFuZ2VUeXBle2Rpc3BsYXk6bm9uZX1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuaGFuZHNv'@;
put 'bnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxlLCBob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMwNmIwMGIw'@;
put 'fWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwNmV9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWhvdC10YWJsZVtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAgIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fSJdfSl9fXJldHVybiBjfSkoKSxUNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVPdmVyPW5ldyBYcix0aGlzLmZpbGVEcm9wPW5ldyBYcix0aGlzLmVsZW1lbnQ9YX1vbkRyb3AoYSl7dGhpcy5fcHJl'@;
put 'dmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlcj8uZmlsZXMsaD1bXTtpZihkKWZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWgucHVzaChkW2ZdKTt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGgpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSksdGhpcy5maWxlRHJvcC5lbWl0'@;
put 'KGgpfW9uRHJhZ092ZXIoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2ZlcjtpZihkKXtpZigtMT09PWQudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47ZC5kcm9wRWZmZWN0PSJjb3B5In10aGlzLmZpbGVPdmVyLmVtaXQoITApfW9uRHJhZ0xlYXZl'@;
put 'KGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3ByZXZlbnRBbmRTdG9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEpp'@;
put 'KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlRHJvcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyb3Aodil9KSgiZHJhZ292ZXIiLGZ1bmN0aW9u'@;
put 'KHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdMZWF2ZSh2KX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVPdmVyOiJmaWxlT3ZlciIsZmlsZURyb3A6ImZpbGVEcm9wIn19KX19cmV0'@;
put 'dXJuIGN9KSgpLEE2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsZVNlbGVjdGVkPW5ldyBYcix0aGlzLmVsZW1lbnQ9YX1pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKXtyZXR1cm4hIXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXMubXVsdGlwbGV9b25D'@;
put 'aGFuZ2UoKXtjb25zdCBhPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZpbGVzO3RoaXMudXBsb2FkZXI/LmFkZFRvUXVldWUoYSksdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChhKSx0aGlzLmlzRW1wdHlBZnRlclNlbGVjdGlvbigpJiYodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFs'@;
put 'dWU9IiIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEppKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlU2VsZWN0IiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEm'@;
put 'ZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNoYW5nZSgpfSl9LGlucHV0czp7dXBsb2FkZXI6InVwbG9hZGVyIn0sb3V0cHV0czp7ZmlsZVNlbGVjdGVkOiJmaWxlU2VsZWN0ZWQifX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbjh0KGMsbCl7MSZjJiYoZGUoMCwicCIs'@;
put 'OCksTGUoMSwiIE5vIGRhdGFzZXQgbWV0YSB0byBzaG93LiAiKSxoZSgpKX1mdW5jdGlvbiByOHQoYyxsKXtpZigxJmMmJihjaSgwKSxkZSgxLCJjbHItZGctY29sdW1uIiksTGUoMiksaGUoKSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksd3IoYS5jb2xOYW1lfHxhLmNv'@;
put 'bEtleSl9fWZ1bmN0aW9uIGk4dChjLGwpe2lmKDEmYyYmKGNpKDApLGRlKDEsImNsci1kZy1jZWxsIiksTGUoMiksaGUoKSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpLiRpbXBsaWNpdDtmZSgyKSx3cihkW2EuY29sS2V5XSl9fWZ1bmN0aW9uIG84dChjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1yb3ciLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KGYub25Sb3dDbGljaz9mLm9uUm93Q2xpY2soaCk6IiIpfSksbXQoMSxpOHQsMywxLCJuZy1j'@;
put 'b250YWluZXIiLDUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0Zvck9mIixhLmNvbHNUb0Rpc3BsYXkpfX1mdW5jdGlvbiBhOHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiLDExKSgxLCJjbHItZGF0YWdyaWQiKSxtdCgyLHI4'@;
put 'dCwzLDEsIm5nLWNvbnRhaW5lciIsNSkoMyxvOHQsMiwxLCJjbHItZGctcm93IiwxMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoMikseGUoIm5nRm9yT2YiLGEuY29sc1RvRGlzcGxheSksZmUoKSx4ZSgibmdGb3JPZiIsYS5tZXRhKX19ZnVuY3Rpb24gczh0KGMs'@;
put 'bCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYiIpKDEsImJ1dHRvbiIsOSksTGUoMiksaGUoKSxtdCgzLGE4dCw0LDIsImNsci10YWItY29udGVudCIsMTApLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXg7ZmUoMiksd3IoYS5uYW1lKSxmZSgpLHhlKCJjbHJJZkFjdGl2'@;
put 'ZSIsMD09PWQpfX1sZXQgazZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm9wZW49ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLm9wZW5DaGFuZ2U9bmV3IFhyLHRoaXMucm93Q2xpY2tlZD1uZXcgWHIsdGhpcy5kc21ldGFUYWJzPVtdLHRoaXMudmVy'@;
put 'c2lvbnNUYWJzPVtdLHRoaXMudGFicz1bXX1uZ09uSW5pdCgpe31uZ09uQ2hhbmdlcyhhKXthLmRzbWV0YT8uY3VycmVudFZhbHVlPy5sZW5ndGg+MCYmKHRoaXMucGFyc2VEU01ldGEoKSx0aGlzLnBhcnNlVmVyc2lvbnMoKSx0aGlzLnRhYnM9Wy4uLnRoaXMuZHNtZXRhVGFicywuLi50aGlz'@;
put 'LnZlcnNpb25zVGFic10pfXBhcnNlRFNNZXRhKCl7dGhpcy5kc21ldGFUYWJzPVtdO2ZvcihsZXQgYSBvZiB0aGlzLmRzbWV0YSl7bGV0IGQ9dGhpcy5kc21ldGFUYWJzLmZpbmRJbmRleChoPT5oLm5hbWU9PT1hLk9EU19UQUJMRSk7ZDwwJiYoZD10aGlzLmRzbWV0YVRhYnMucHVzaCh7bmFt'@;
put 'ZTphLk9EU19UQUJMRSx0aXRsZToiRGF0YXNldCBNZXRhIixjb2xzVG9EaXNwbGF5Olt7Y29sS2V5OiJOQU1FIn0se2NvbEtleToiVkFMVUUifV0sbWV0YTpbXSxvblJvd0NsaWNrOmg9Pnt0aGlzLnJvd0NsaWNrZWQuZW1pdChoKX19KS0xKSx0aGlzLmRzbWV0YVRhYnNbZF0ubWV0YS5wdXNo'@;
put 'KGEpfX1wYXJzZVZlcnNpb25zKCl7dGhpcy52ZXJzaW9uc1RhYnM9W3tuYW1lOiJWRVJTSU9OUyIsdGl0bGU6IkRhdGFzZXQgTWV0YSIsY29sc1RvRGlzcGxheTpbe2NvbEtleToiTE9BRF9SRUYifSx7Y29sS2V5OiJVU0VSX05NIn0se2NvbEtleToiVkVSU0lPTl9EVFRNIn0se2NvbEtleToi'@;
put 'TkVXX1JFQ09SRFMiLGNvbE5hbWU6IkFERCJ9LHtjb2xLZXk6IkNIQU5HRURfUkVDT1JEUyIsY29sTmFtZToiTU9EIn0se2NvbEtleToiREVMRVRFRF9SRUNPUkRTIixjb2xOYW1lOiJERUwifSx7Y29sS2V5OiJWRVJTSU9OX0RFU0MifV0sbWV0YTp0aGlzLnZlcnNpb25zLG9uUm93Q2xpY2s6'@;
put 'YT0+e3RoaXMucm93Q2xpY2tlZC5lbWl0KGEpfX1dfW9uT3BlbkNoYW5nZShhKXt0aGlzLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKX1vbkNsb3NlQ2xpY2soKXt0aGlzLm9uT3BlbkNoYW5nZSghMSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco'@;
put 'ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGF0YXNldC1pbmZvIl1dLGlucHV0czp7b3Blbjoib3BlbiIsZHNtZXRhOiJkc21ldGEiLHZlcnNpb25zOiJ2ZXJzaW9ucyJ9LG91dHB1dHM6e29wZW5DaGFuZ2U6Im9wZW5DaGFuZ2UiLHJv'@;
put 'd0NsaWNrZWQ6InJvd0NsaWNrZWQifSxmZWF0dXJlczpbd2xdLGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1szLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4'@;
put 'dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJMYXlvdXQiLCJ2ZXJ0aWNhbCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwx'@;
put 'LCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyVGFiTGluayIsIiIsImlkIiwibGluazEiXSxbImlkIiwiY29udGVudDEiLCJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCIsNCwi'@;
put 'Y2xySWZBY3RpdmUiXSxbImlkIiwiY29udGVudDEiLDEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiXSxbImNsYXNzIiwiY2xpY2thYmxlLXJvdyIsMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbGlja2FibGUtcm93IiwzLCJjbGljayJd'@;
put 'XSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksRnQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25PcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLExlKDIsIkRhdGFzZXQgTWV0YSIpLGhlKCksZGUoMywiZGl2Iiwy'@;
put 'KSxtdCg0LG44dCwyLDAsInAiLDMpLGRlKDUsImNsci10YWJzIiw0KSxtdCg2LHM4dCw0LDIsImNsci10YWIiLDUpLGhlKCkoKSxkZSg3LCJkaXYiLDYpKDgsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm9uQ2xvc2VDbGljaygpfSksTGUoOSwiIENsb3NlICIp'@;
put 'LGhlKCkoKSgpKSwyJmQmJih4ZSgiY2xyTW9kYWxPcGVuIixoLm9wZW4pKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCksZmUoNCkseGUoIm5nSWYiLGguZHNtZXRhVGFicy5sZW5ndGg8MSksZmUoMikseGUoIm5nRm9yT2YiLGgudGFicykpfSxkZXBlbmRlbmNp'@;
put 'ZXM6W2xzLHlvLFRtLFFmLGs3LHhtLFNwLEQ3LHRfLEVtLEU3LE1tLFQ3LG91LCR1LEZ5LHltLHdtLFM3LF9tLGJtLHc3XSxzdHlsZXM6WyIubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItdGFic1tfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDo3MHZofS5tb2RhbC1i'@;
put 'b2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRhYi1jb250ZW50e3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b30ubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICAgIC50YWItY29udGVudCAuZGF0YWdyaWQtb3V0ZXItd3JhcHBlcnt3aWR0aDoxMDAlfWNsci1tb2RhbFtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAgIC5tb2RhbC1kaWFsb2d7aGVpZ2h0OjEwMCV9LmNsaWNrYWJsZS1yb3dbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfSAgLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsOmZvY3Vze291dGxpbmU6bm9uZTtvdXRsaW5lLW9mZnNldDowfSJdfSl9'@;
put 'fXJldHVybiBjfSkoKTtjb25zdCBsOHQ9KCk9PlsibnVtZXJpYyIsdm9pZCAwXSxENmU9KCk9PlsiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSJdLHFlZT0oYyxsKT0+KHtjb2w6Yyxjb2xJbmRleDpsfSksYzh0PSgpPT5bdm9pZCAwXSx1OHQ9KCk9PlsiU09GVFNFTEVDVCIs'@;
put 'IlNPRlRTRUxFQ1RfSE9PSyJdO2Z1bmN0aW9uIGQ4dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDE1KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSx3cihhLmdlbmVyYXRlZFJlY29yZFVybCl9fWZ1bmN0aW9uIGg4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Rl'@;
put 'KDAsImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsKCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7eGUoImRpc2FibGVkIixhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmcp'@;
put 'LGZlKCksSXIoIiAiLGEuZ2VuZXJhdGVkUmVjb3JkVXJsPyJjb3B5IHRvIGNsaXBib2FyZCI6YS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPyJHZW5lcmF0aW5nIHVybC4uLiI6IkxpbmsgdG8gdGhpcyByZWNvcmQiLCIgIil9fWZ1bmN0aW9uIGY4dChjLGwpe2lmKDEmYyYmKGNpKDAp'@;
put 'LG10KDEsZDh0LDIsMSwic3BhbiIsMTMpKDIsaDh0LDIsMiwiYnV0dG9uIiwxNCksdWkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsIShudWxsIT1hLmN1cnJlbnRSZWNvcmQmJmEuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb24pKSxmZSgpLHhlKCJuZ0lmIiwhKG51bGwh'@;
put 'PWEuY3VycmVudFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpfX1mdW5jdGlvbiBwOHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE3KSgxLCJzcGFuIiwxOCksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBnOHQoYyxsKXsxJmMmJkd0KDAsImNsci1p'@;
put 'Y29uIiwzMSl9ZnVuY3Rpb24gbTh0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMzIpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIHY4dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMzKX1mdW5jdGlvbiBiOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJj'@;
put 'bHItaW5wdXQtY29udGFpbmVyIiwzNSkoMSwiaW5wdXQiLDM2KSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKS5pbmRleDtyZXR1cm4gQ3QoT2UoMikub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSks'@;
put 'Q3QoT2UoNSkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMykuJGltcGxpY2l0LHY9T2UoMik7cmV0dXJuIHYucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSksQ3Qodi5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbj0hMCl9KSxn'@;
put 'aSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKS4kaW1wbGljaXQsdj1PZSgyKTtyZXR1cm4gYmkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9l'@;
put 'KDMpLiRpbXBsaWNpdCxkPU9lKDIpO1RyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSksZmUoKSxwaSgibmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSl9fWZ1bmN0aW9uIHk4dChjLGwpezEmYyYmSmwoMCl9ZnVuY3Rpb24g'@;
put 'Xzh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksbXQoMSx5OHQsMSwwLCJuZy1jb250YWluZXIiLDM3KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7T2UoMik7Y29uc3QgZj12bygxNik7ZmUoKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsZikoIm5n'@;
put 'VGVtcGxhdGVPdXRsZXRDb250ZXh0IixscCgyLHFlZSxkLGgpKX19ZnVuY3Rpb24gdzh0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxiOHQsMiwzLCJjbHItaW5wdXQtY29udGFpbmVyIiwzNCkoMixfOHQsMiw1LCJkaXYiLDUpLHVpKCkpLDImYyl7bGV0IGEsZDtjb25zdCBoPU9lKDIpLiRp'@;
put 'bXBsaWNpdCxmPU9lKDIpO2ZlKCkseGUoIm5nSWYiLFlzKDIsbDh0KS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDphLmVkaXRvcikpLGZlKCkseGUoIm5nSWYiLFlz'@;
put 'KDMsRDZlKS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDpkLmVkaXRvcikpfX1mdW5jdGlvbiBDOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHIt'@;
put 'dGV4dGFyZWEtY29udGFpbmVyIikoMSwidGV4dGFyZWEiLDM4LDEpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpLmluZGV4O3JldHVybiBDdChPZSgyKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChh'@;
put 'KSxDdChPZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChh'@;
put 'KTtjb25zdCBmPU9lKDMpLiRpbXBsaWNpdCx2PU9lKDIpO3JldHVybiBiaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLExlKDMsIiAgICAgICAgICAgICAgICAgICIpLGhlKCksZGUoNCwiY2xyLWNvbnRyb2wtaGVscGVyIiks'@;
put 'TGUoNSksaGUoKSgpfWlmKDImYyl7bGV0IGEsZCxoO2NvbnN0IGY9dm8oMiksdj1PZSgzKS4kaW1wbGljaXQsTT1PZSgyKTtmZSgpLFRyKCJpbnZhbGlkLWRhdGEiLE0uY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKHYua2V5KSkoIm5vdC1jaGFyIixudWxsPT1NLmN1cnJlbnRS'@;
put 'ZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKHYua2V5KSk/bnVsbDphLnR5cGUpLHhlKCJyb3dzIix2LnZhbHVlLmxlbmd0aD44MD82OjEpLHBpKCJuZ01vZGVsIixNLmN1cnJlbnRSZWNvcmRbdi5rZXldKSx4ZSgibWF4TGVuZ3RoIixu'@;
put 'dWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKHYua2V5KSk/bnVsbDpkLmxlbmd0aCksZmUoNCksanUoIiIsZi52YWx1ZS5sZW5ndGgsIiAvICIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxs'@;
put 'PT0oaD1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZSh2LmtleSkpP251bGw6aC5sZW5ndGgsIiIpfX1mdW5jdGlvbiBTOHQoYyxsKXsxJmMmJkpsKDApfWZ1bmN0aW9uIE04dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLG10KDEsUzh0LDEsMCwibmctY29udGFpbmVyIiwzNyks'@;
put 'aGUoKSksMiZjKXtjb25zdCBhPU9lKDMpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O09lKDIpO2NvbnN0IGY9dm8oMTYpO2ZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbHAoMixxZWUsZCxoKSl9fWZ1bmN0aW9uIHg4dChjLGwpe2lmKDEm'@;
put 'YyYmKGNpKDApLG10KDEsQzh0LDYsOSwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsNSkoMixNOHQsMiw1LCJkaXYiLDUpLHVpKCkpLDImYyl7bGV0IGEsZDtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdCxmPU9lKDIpO2ZlKCkseGUoIm5nSWYiLFlzKDIsYzh0KS5pbmNsdWRlcyhudWxsPT1mLmN1'@;
put 'cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDphLmVkaXRvcikpLGZlKCkseGUoIm5nSWYiLFlzKDMsRDZlKS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPWYu'@;
put 'Y3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDpkLmVkaXRvcikpfX1mdW5jdGlvbiBFOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiwzOSkoMSwidGV4dGFyZWEiLDQwKSxGdCgicGFzdGUiLGZ1bmN0aW9u'@;
put 'KGgpe3JldHVybiB3dChhKSxDdChPZSg0KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pLGdpKCJuZ01vZGVsQ2hhbmdlIixm'@;
put 'dW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdCx2PU9lKDIpO3JldHVybiBiaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGhlKCksZGUoMiwiY2xyLWNvbnRyb2wtaGVscGVyIiksTGUoMywiSEg6bW06'@;
put 'c3MiKSxoZSgpKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPU9lKDIpLiRpbXBsaWNpdCxoPU9lKDIpO2ZlKCksVHIoImludmFsaWQtZGF0YSIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoZC5rZXkpKSgibm90LWNoYXIiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRv'@;
put 'cnx8bnVsbD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmEudHlwZSkseGUoInJvd3MiLGQudmFsdWUubGVuZ3RoPjgwPzY6MSkscGkoIm5nTW9kZWwiLGguY3VycmVudFJlY29yZFtkLmtleV0pfX1mdW5jdGlvbiBUOHQoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9TG4oKTtkZSgwLCJkaXYiLDM5KSgxLCJ0ZXh0YXJlYSIsNDEpLEZ0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1'@;
put 'cm4gQ3QoT2UoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0LHY9T2UoMik7cmV0dXJuIGJpKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRb'@;
put 'Zi5rZXldPWgpLEN0KGgpfSksaGUoKSxkZSgyLCJjbHItZGF0ZS1jb250YWluZXIiLDQyKSgzLCJpbnB1dCIsNDMpLEZ0KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikucmVjb3JkRGF0ZUNoYW5nZShoLGYu'@;
put 'a2V5KSl9KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMikuJGltcGxpY2l0LGQ9T2UoMik7ZmUoKSxUcigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhhLmtleSkpLHBpKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVu'@;
put 'Y3Rpb24gQTh0KGMsbCl7MSZjJiZKbCgwKX1mdW5jdGlvbiBrOHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxtdCgxLEE4dCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtPZSgyKTtjb25zdCBmPXZvKDE2'@;
put 'KTtmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxwKDIscWVlLGQsaCkpfX1mdW5jdGlvbiBEOHQoYyxsKXtpZigxJmMmJihjaSgwKSxkZSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJwIiwyMiksTGUoNCksbXQoNSxnOHQsMSwwLCJj'@;
put 'bHItaWNvbiIsMjMpLGhlKCksZGUoNiwicCIsMjQpLExlKDcpLGhlKCkoKSxkZSg4LCJkaXYiLDI1KSxtdCg5LG04dCwyLDAsInNwYW4iLDI2KSgxMCx2OHQsMSwwLCJjbHItaWNvbiIsMjcpKDExLHc4dCwzLDQsIm5nLWNvbnRhaW5lciIsMjgpKDEyLHg4dCwzLDQsIm5nLWNvbnRhaW5lciIs'@;
put 'MjgpKDEzLEU4dCw0LDYsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDI5KSgxNCxUOHQsNCwzLCJkaXYiLDI5KSgxNSxrOHQsMiw1LCJkaXYiLDI4KSxoZSgpKCksR3QoMTYsImhyIiwzMCksdWkoKSksMiZjKXtsZXQgYSxkO2NvbnN0IGg9T2UoKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxN'@;
put 'PU9lKDIpO2ZlKDQpLElyKCIgIixmLmtleSwiICIpLGZlKCkseGUoIm5nSWYiLE0uaXNDb2xQayhmLmtleSkpLGZlKDIpLElyKCIgIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGYua2V5KSk/bnVsbDph'@;
put 'LmRlc2MsIiAiKSxmZSgpLHhlKCJuZ1N3aXRjaCIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShmLmtleSkpP251bGw6ZC50eXBlKSxmZSgpLHhlKCJuZ0lmIixNLmN1cnJlbnRSZWNvcmRMb2FkaW5ncy5p'@;
put 'bmNsdWRlcyh2KSksZmUoKSx4ZSgibmdJZiIsTS5jdXJyZW50UmVjb3JkRXJyb3JzLmluY2x1ZGVzKHYpKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCJudW1lcmljIiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIix2b2lkIDApLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsInRpbWUiKSxmZSgpLHhl'@;
put 'KCJuZ1N3aXRjaENhc2UiLCJkYXRlIiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwiYXV0b2NvbXBsZXRlIil9fWZ1bmN0aW9uIEk4dChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsRDh0LDE3LDExLCJuZy1jb250YWluZXIiLDUpLHVpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgp'@;
put 'LHhlKCJuZ0lmIiwiQWN0aW9uIiE9PWEua2V5JiYiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWEua2V5JiYibm9MaW5rT3B0aW9uIiE9PWEua2V5KX19ZnVuY3Rpb24gUjh0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxJOHQsMiwxLCJuZy1jb250YWluZXIiLDE5KSxRcygy'@;
put 'LCJrZXl2YWx1ZSIpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nRm9yT2YiLGo4KDIsMixhLmN1cnJlbnRSZWNvcmQsYS5vcmlnaW5hbE9yZGVyKSkoIm5nRm9yVHJhY2tCeSIsYS50cmFja0J5Rm4pfX1mdW5jdGlvbiBMOHQoYyxsKXsxJmMmJihkZSgwLCJjbHItYWxlcnQi'@;
put 'LDQ0KSgxLCJjbHItYWxlcnQtaXRlbSIpKDIsInNwYW4iLDQ1KSxMZSgzLCIgRGF0YSBWYWxpZGF0aW9uIEVycm9ycyAtIFBsZWFzZSBSZXZpZXcgIiksaGUoKSgpKCkpLDImYyYmKHdkKCJ2aXNpYmlsaXR5IixPZSgpLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MD8idmlzaWJs'@;
put 'ZSI6ImhpZGRlbiIpLHhlKCJjbHJBbGVydENsb3NhYmxlIiwhMSkoImNsckFsZXJ0VHlwZSIsImRhbmdlciIpKX1mdW5jdGlvbiBPOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQ2KSgxLCJidXR0b24iLDQ3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0'@;
put 'KGEpLEN0KE9lKCkub25QcmV2aW91c1JlY29yZENsaWNrKCkpfSksR3QoMiwiY2xyLWljb24iLDQ4KSxoZSgpLGRlKDMsInAiKSxMZSg0LCIgQ3VycmVudCByb3c6ICIpLGRlKDUsInN0cm9uZyIpLExlKDYpLGhlKCkoKSxkZSg3LCJidXR0b24iLDQ3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHd0KGEpLEN0KE9lKCkub25OZXh0UmVjb3JkQ2xpY2soKSl9KSxHdCg4LCJjbHItaWNvbiIsNDkpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJkaXNhYmxlZCIsYS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLGZlKDUpLElyKCIgIixhLmN1'@;
put 'cnJlbnRSZWNvcmRJbmRleCsxLCIgIiksZmUoKSx4ZSgiZGlzYWJsZWQiLGEuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKX19ZnVuY3Rpb24gUDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw1MyksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hl'@;
put 'KCJuZ1ZhbHVlIixhKSxmZSgpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9uIEY4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIpKDEsImFwcC1zb2Z0LXNlbGVjdCIsNTEpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuY29sSW5kZXg7cmV0'@;
put 'dXJuIEN0KE9lKCkub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSksZ2koInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuY29sLHY9T2UoKTtyZXR1cm4gYmkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3Qo'@;
put 'aCl9KSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKSxmPWguY29sLHY9aC5jb2xJbmRleDtyZXR1cm4gQ3QoT2UoKS5vblJlY29yZERyb3Bkb3duQ2hhbmdlKGYua2V5LHYpKX0pLG10KDIsUDh0LDIsMiwib3B0aW9uIiw1MiksaGUoKSgpfWlmKDImYyl7'@;
put 'bGV0IGE7Y29uc3QgZD1PZSgpLmNvbCxoPU9lKCk7ZmUoKSxwaSgidmFsdWUiLGguY3VycmVudFJlY29yZFtkLmtleV0pLHhlKCJpbnB1dElkIixkLmtleSksZmUoKSx4ZSgibmdGb3JPZiIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1oLmN1cnJlbnRSZWNvcmRW'@;
put 'YWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6YS5zb3VyY2UpfX1mdW5jdGlvbiBIOHQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDU2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInZhbHVlIixhKSxmZSgpLElyKCIgIixhLCIgIil9fWZ1bmN0aW9u'@;
put 'IE44dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNlbGVjdCIsNTQpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuY29sSW5kZXg7cmV0dXJuIEN0KE9lKCkub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1'@;
put 'bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS5jb2wsdj1PZSgpO3JldHVybiBiaSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLG10KDEsSDh0LDIsMiwib3B0aW9uIiw1NSksaGUoKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9'@;
put 'T2UoKS5jb2wsaD1PZSgpO3BpKCJuZ01vZGVsIixoLmN1cnJlbnRSZWNvcmRbZC5rZXldKSxmZSgpLHhlKCJuZ0Zvck9mIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDphLnNvdXJj'@;
put 'ZSl9fWZ1bmN0aW9uIFY4dChjLGwpe2lmKDEmYyYmbXQoMCxGOHQsMywzLCJkaXYiLDUwKSgxLE44dCwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIsX3UpLDImYyl7Y29uc3QgYT1sLmNvbCxkPXZvKDIpLGg9T2UoKTt4ZSgibmdJZiIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yP251'@;
put 'bGw6aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmhhc0RxUnVsZXMoYS5rZXksWXMoMix1OHQpKSkoIm5nSWZFbHNlIixkKX19bGV0IEI4dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJlY29y'@;
put 'ZEFjdGlvbj1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuY3VycmVudFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudFJlY29yZExvYWRpbmdzPVtdLHRoaXMuY3VycmVudFJlY29y'@;
put 'ZEVycm9ycz1bXSx0aGlzLm9uUmVjb3JkQ2hhbmdlPW5ldyBYcix0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkPW5ldyBYcix0aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkPW5ldyBYcix0aGlzLm9uUmVjb3JkRWRpdENsb3NlPW5ldyBYcix0aGlzLm9uUmVjb3JkRWRpdENvbmZpcm09bmV3'@;
put 'IFhyLHRoaXMub25OZXh0UmVjb3JkPW5ldyBYcix0aGlzLm9uUHJldmlvdXNSZWNvcmQ9bmV3IFhyLHRoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzPVtdLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMuYWRk'@;
put 'UmVjb3JkVXJsPW51bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRoaXMub3JpZ2luYWxPcmRlcj0oaCxmKT0+MH1uZ09uSW5pdCgpe312YWxpZGF0ZVJlY29yZENvbChhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigp'@;
put 'e3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2guY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZXhlY3V0ZUhvdFZhbGlkYXRvcihhLGQsTT0+e2YoTSl9KX0pfSkoKX1yZWNvcmREYXRlQ2hhbmdlKGEsZCl7bGV0IGg9dGhpcy5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLGY9'@;
put 'aD9oLmRhdGVGb3JtYXQ6IiI7dGhpcy5jdXJyZW50UmVjb3JkJiYodGhpcy5jdXJyZW50UmVjb3JkW2RdPWthZSgpKGEpLmZvcm1hdChmKSl9Y29uZmlybVJlY29yZEVkaXQoKXt0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg8MSYmdGhpcy5vblJlY29yZENoYW5nZS5lbWl0'@;
put 'KHRoaXMuY3VycmVudFJlY29yZCl9Y2xvc2VSZWNvcmRFZGl0KCl7dGhpcy5vblJlY29yZEVkaXRDbG9zZS5lbWl0KCl9b25SZWNvcmREcm9wZG93bkNoYW5nZShhLGQpe3RoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQuZW1pdCh7Y29sTmFtZTphLGNvbDpkfSl9b25SZWNvcmRJbnB1dEZv'@;
put 'Y3VzKGEsZCl7dGhpcy5vblJlY29yZElucHV0Rm9jdXNlZC5lbWl0KHtldmVudDphLGNvbE5hbWU6ZH0pfXJlY29yZElucHV0UGFzdGUoYSl7c2V0VGltZW91dCgoKT0+e2EudGFyZ2V0LnZhbHVlPWEudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xzKyQvLCIiKX0sMCl9cmVjb3JkSW5wdXRDaGFu'@;
put 'Z2UoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBmPWguY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZ2V0UnVsZShkKSx2PWEudGFyZ2V0LnZhbHVlO2guaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMzAwLCgpPT57aC52YWxpZGF0ZVJlY29yZENvbChmLHYp'@;
put 'LnRoZW4oTT0+e2NvbnN0IEQ9aC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5kZXhPZihkKTtNP0Q+LTEmJmguY3VycmVudFJlY29yZEludmFsaWRDb2xzLnNwbGljZShELDEpOkQ8MCYmaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMucHVzaChkKX0pfSl9KSgpfW9uTmV4dFJlY29yZENs'@;
put 'aWNrKCl7dGhpcy5vbk5leHRSZWNvcmQuZW1pdCgpfW9uUHJldmlvdXNSZWNvcmRDbGljaygpe3RoaXMub25QcmV2aW91c1JlY29yZC5lbWl0KCl9Y29weVRvQ2xpcChhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNyZWNvcmRNb2RhbFJlZiAubW9kYWwtdGl0bGUiKTtpZihk'@;
put 'KXtjb25zdCBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7aC5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGguc3R5bGUubGVmdD0iMCIsaC5zdHlsZS50b3A9IjAiLGguc3R5bGUub3BhY2l0eT0iMCIsaC5zdHlsZS56SW5kZXg9IjUwMDAiLGgudmFsdWU9YSxkLmFwcGVuZENo'@;
put 'aWxkKGgpLGguZm9jdXMoKSxoLnNlbGVjdCgpLGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5IiksZC5yZW1vdmVDaGlsZChoKSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1hfX1nZW5lcmF0ZUVkaXRSZWNvcmRVcmwoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihhLmdl'@;
put 'bmVyYXRlZFJlY29yZFVybClhLmNvcHlUb0NsaXAoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpO2Vsc2V7YS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSEwO2NvbnN0IGQ9W107YS5oZWFkZXJQa3MuZm9yRWFjaChoPT57bGV0IGY9IkMiLHY9IiI7Zm9yKGxldCBNPTA7TTxhLmNlbGxWYWxp'@;
put 'ZGF0aW9uLmxlbmd0aDtNKyspe2NvbnN0IEQ9YS5jZWxsVmFsaWRhdGlvbltNXTtpZihELmRhdGE9PT1oKXsoIm51bWVyaWMiPT09RC50eXBlfHwiZGF0ZSI9PT1ELnR5cGV8fCJ0aW1lIj09PUQudHlwZSkmJihmPSJOIik7YnJlYWt9fXY9IkMiPT09Zj9gJyR7YS5jdXJyZW50UmVjb3JkW2hd'@;
put 'fSdgOmEuY3VycmVudFJlY29yZFtoXS50b1N0cmluZygpLGQucHVzaCh7R1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfSUQ6MCxWQVJJQUJMRV9OTTpoLE9QRVJBVE9SX05NOiI9IixSQVdfVkFMVUU6dn0pfSksZC5sZW5ndGg+MCYmYS5saWJkcyYmKHlp'@;
put 'ZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLGQpLnRoZW4oaD0+e2EucXVlcnlGaWx0ZXI9e2lkOmgucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTpoLnJlc3VsdFswXS5GSUxURVJfVEFCTEV9O2NvbnN0IE09bG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKyIjL2Vk'@;
put 'aXRvci9lZGl0LXJlY29yZC8iK2EucXVlcnlGaWx0ZXIudGFibGUrIi8iK2EucXVlcnlGaWx0ZXIuaWQ7YS5jb3B5VG9DbGlwKE0pLGEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSxhLmZpbHRlcj0hMX0pLmNhdGNoKGg9PnthLnN1Ym1pdExvYWRpbmc9ITF9KSl9fSkoKX1pc0Nv'@;
put 'bFBrKGEpe3JldHVybiB0aGlzLmhlYWRlclBrcy5pbmRleE9mKGEpPi0xfXRyYWNrQnlGbihhLGQpe3JldHVybiBhfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFpoKSxHZShZdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siYXBwLWVkaXQtcmVjb3JkIl1dLGlucHV0czp7Y3VycmVudFJlY29yZDoiY3VycmVudFJlY29yZCIscmVjb3JkQWN0aW9uOiJyZWNvcmRBY3Rpb24iLGxpYmRzOiJsaWJkcyIscXVlcnlGaWx0ZXI6InF1ZXJ5RmlsdGVyIixmaWx0ZXI6ImZpbHRlciIsc3VibWl0TG9h'@;
put 'ZGluZzoic3VibWl0TG9hZGluZyIsaGVhZGVyUGtzOiJoZWFkZXJQa3MiLGNlbGxWYWxpZGF0aW9uOiJjZWxsVmFsaWRhdGlvbiIsY3VycmVudFJlY29yZEluZGV4OiJjdXJyZW50UmVjb3JkSW5kZXgiLGN1cnJlbnRSZWNvcmRMb2FkaW5nczoiY3VycmVudFJlY29yZExvYWRpbmdzIixjdXJy'@;
put 'ZW50UmVjb3JkRXJyb3JzOiJjdXJyZW50UmVjb3JkRXJyb3JzIixjdXJyZW50UmVjb3JkVmFsaWRhdG9yOiJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIn0sb3V0cHV0czp7b25SZWNvcmRDaGFuZ2U6Im9uUmVjb3JkQ2hhbmdlIixvblJlY29yZElucHV0Rm9jdXNlZDoib25SZWNvcmRJbnB1dEZv'@;
put 'Y3VzZWQiLG9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkOiJvblJlY29yZERyb3Bkb3duQ2hhbmdlZCIsb25SZWNvcmRFZGl0Q2xvc2U6Im9uUmVjb3JkRWRpdENsb3NlIixvblJlY29yZEVkaXRDb25maXJtOiJvblJlY29yZEVkaXRDb25maXJtIixvbk5leHRSZWNvcmQ6Im9uTmV4dFJlY29yZCIs'@;
put 'b25QcmV2aW91c1JlY29yZDoib25QcmV2aW91c1JlY29yZCJ9LGRlY2xzOjE3LHZhcnM6MTEsY29uc3RzOltbImF1dG9jb21wbGV0ZSIsIiJdLFsiY2hhclRleHRhcmVhIiwiIl0sWyJvdGhlcl90aGFuX3NvZnRfc2VsZWN0IiwiIl0sWyJpZCIsInJlY29yZE1vZGFsUmVmIiwxLCJyZWNvcmQt'@;
put 'ZWRpdC1tb2RhbCIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVt'@;
put 'cy1jZW50ZXIgdy0xMDAgcHktMTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwicC0wIiwiY2xyLWdhcC01IiwiY2xyLWdhcC1tZC0wIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0sWyJjbGFzcyIsInZhbGlkYXRpb24taW5mby1hbGVydCIsMywidmlzaWJpbGl0'@;
put 'eSIsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiLDQsIm5nSWYiXSxbImNsYXNzIiwicHJldi1uZXh0Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsIm1yLTVpIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIs'@;
put 'MSwiYnRuIiwiYnRuLXByaW1hcnkiLCJmb2N1c2FibGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwicG9zaXRpb24tYWJzb2x1dGUgZ2VuZXJhdGUtcmVjb3JkLXVybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJidG4gYnRuLWxpbmsgZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24g'@;
put 'cG9zaXRpb24tYWJzb2x1dGUiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicG9zaXRpb24tYWJzb2x1dGUiLCJnZW5lcmF0ZS1yZWNvcmQtdXJsIl0sWzEsImJ0biIsImJ0bi1saW5rIiwiZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIs'@;
put 'MywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIiwidy0xMDAiLCJweS0xMCJdLFsxLCJzcGlubmVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjb2x1bW4tZW50cnki'@;
put 'LCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbMSwibmFtZS1pbnB1dC1yb3ciXSxbMSwiZm9udC13ZWlnaHQtYm9sZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbMSwiY2VsbC1kZXNjIl0sWzEsImlucHV0cy13cmFwcGVyIiwicG9zaXRpb24tcmVsYXRpdmUiLDMs'@;
put 'Im5nU3dpdGNoIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUgZmxleC11bnNldCBwb3NpdGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsNCwibmdJZiJdLFsiY2xhc3MiLCJmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQt'@;
put 'b2Zmc2V0Iiwic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLDQsIm5nSWYiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImRhdGUtZmllbGQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtdC0xMCJdLFsic2hhcGUiLCJrZXkiXSxbMSwic3Bpbm5lciIsInNw'@;
put 'aW5uZXItaW5saW5lIiwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiwxLCJmbGV4LXVuc2V0IiwicG9zaXRpb24tYWJzb2x1dGUiLCJlbnRyeS1pbnB1'@;
put 'dC1sZWZ0LW9mZnNldCJdLFsiY2xhc3MiLCJudW1lcmljLWlucHV0IiwzLCJpbnZhbGlkLWRhdGEiLDQsIm5nSWYiXSxbMSwibnVtZXJpYy1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJ0eXBlIiwidGV4dCIsMSwibm90LWNoYXIiLDMsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0IiwibmdNb2Rl'@;
put 'bENoYW5nZSIsIm5nTW9kZWwiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWyJjbHJUZXh0YXJlYSIsIiIsMywiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwicm93cyIsIm5nTW9kZWwiLCJtYXhMZW5ndGgiXSxbMSwi'@;
put 'ZGF0ZS1maWVsZCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwicm93cyIsIm5nTW9kZWwiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjEiLCJjb2xzIiwiYXV0byIsMSwibm90LWNoYXIiLDMsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVs'@;
put 'Q2hhbmdlIiwibmdNb2RlbCJdLFsxLCJkYXRlLXBpY2tlciJdLFsidHlwZSIsImRhdGUiLCJuYW1lIiwiZGF0ZSIsImNsckRhdGUiLCIiLDEsImQtbm9uZSIsMywiY2xyRGF0ZUNoYW5nZSJdLFsxLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVy'@;
put 'dFR5cGUiXSxbMSwiYWxlcnQtdGV4dCJdLFsxLCJwcmV2LW5leHQiXSxbInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIGxlZnQiLCJzaXplIiwiMjMiXSxb'@;
put 'InNoYXBlIiwiYW5nbGUgcmlnaHQiLCJzaXplIiwiMjMiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWzMsImZvY3VzaW4iLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsInZhbHVlIiwiaW5wdXRJZCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdWYWx1ZSJd'@;
put 'LFsiY2xyU2VsZWN0IiwiIiwzLCJmb2N1c2luIiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1MbigpO2RlKDAsImNsci1tb2RhbCIsMyko'@;
put 'MSwiaDMiLDQpLExlKDIpLG10KDMsZjh0LDMsMiwibmctY29udGFpbmVyIiw1KSxoZSgpLGRlKDQsImRpdiIsNiksbXQoNSxwOHQsMywwLCJkaXYiLDcpKDYsUjh0LDMsNSwibmctY29udGFpbmVyIiw1KSxoZSgpLGRlKDcsImRpdiIsOCksbXQoOCxMOHQsNCw0LCJjbHItYWxlcnQiLDkpKDks'@;
put 'Tzh0LDksMywiZGl2IiwxMCksZGUoMTAsImRpdiIpKDExLCJidXR0b24iLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb249ITEsQ3QoaC5jbG9zZVJlY29yZEVkaXQoKSl9KSxMZSgxMiwiIENhbmNlbCAiKSxoZSgpLGRl'@;
put 'KDEzLCJidXR0b24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguY29uZmlybVJlY29yZEVkaXQoKSl9KSxMZSgxNCwiIENvbmZpcm0gIiksaGUoKSgpKCksbXQoMTUsVjh0LDMsMywibmctdGVtcGxhdGUiLG51bGwsMCxfdSksaGUoKX0yJmQmJih4ZSgiY2xy'@;
put 'TW9kYWxPcGVuIiwhMCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSgyKSxGZigiICIsIkFERCI9PT1oLnJlY29yZEFjdGlvbj8iQWRkIjoiRWRpdCIsIiByZWNvcmQgaW4gIixudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzBdLCIuIixudWxsPT1oLmxpYmRzP251bGw6'@;
put 'aC5saWJkcy5zcGxpdCgiLiIpWzFdLCIgIiksZmUoKSx4ZSgibmdJZiIsIkVESVQiPT09aC5yZWNvcmRBY3Rpb24pLGZlKDIpLHhlKCJuZ0lmIixoLmFkZFJlY29yZExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLCFoLmFkZFJlY29yZExvYWRpbmcpLGZlKDIpLHhlKCJuZ0lmIixoLmN1cnJlbnRS'@;
put 'ZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCksZmUoKSx4ZSgibmdJZiIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEpLGZlKDQpLHhlKCJkaXNhYmxlZCIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOltscyx5byxOMSxTMixj'@;
put 'cCxZZixHZixlYyxXZixubCxHcyxYeCxqZGUsSngsRmwsb3UsJHUsQkwsV3gsWEwsb0csUmQsWUwsJHksSkwsYmRlLHg2ZSx5Ul0sc3R5bGVzOlsiLnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6'@;
put 'ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAubmFtZS1pbnB1dC1yb3dbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWF4LXdpZHRo'@;
put 'OjI2MHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYW1lLWlucHV0LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuY2VsbC1kZXNjW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MzBw'@;
put 'eDttYXJnaW4tdG9wOjEwcHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLmlucHV0cy13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRl'@;
put 'cn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAuaW5wdXRzLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgID4qOm5vdCguZGF0ZS1maWVsZCk6bm90KGNsci1zZWxlY3QtY29udGFpbmVyKXtmbGV4'@;
put 'OjF9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWZvcm0tY29udHJvbHtt'@;
put 'YXJnaW4tdG9wOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjI0cHg7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2Nv'@;
put 'bG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQxNjY3cmVtO21hcmdpbi1yaWdodDo2cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgICBhcHAtc29mdC1zZWxlY3QgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDpmb2N1c3tiYWNr'@;
put 'Z3JvdW5kOm5vbmU7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLCAucmVjb3Jk'@;
put 'LWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0ucmVjb3JkLWVkaXQt'@;
put 'bW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGQgICBwW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRl'@;
put 'LWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVd'@;
put 'e3dpZHRoOjIzMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1waWNrZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjRweH0ucmVjb3JkLWVkaXQt'@;
put 'bW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtcGlja2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1pbnB1dC1ncm91cHtib3JkZXI6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIC5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVye2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO2JvcmRlci1yYWRp'@;
put 'dXM6LjEyNXJlbTttYXJnaW4tcmlnaHQ6NXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDp1bnNldH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3RvcDoxNXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdHtoZWlnaHQ6YXV0bztwYWRkaW5nOjEwcHggMjBweCAxMHB4'@;
put 'IDEwcHg7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdDpmb2N1c3tiYWNrZ3JvdW5kOjAgMCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'ICAgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmhvdmVye2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lcnt3aWR0aDoyMjRweDtib3JkZXI6MXB4IHNvbGlkICM5OTk7Y29sb3I6IzAw'@;
put 'MDtwYWRkaW5nOmNhbGMoLjI1cmVtICsgMnB4KSAuNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07Zm9udC1zaXplOi41NDE2NjdyZW07bWFyZ2luLXJpZ2h0OjZweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIC5jbHItaW5w'@;
put 'dXQtZ3JvdXB7d2lkdGg6MTAwJTtib3JkZXI6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0e3dpZHRoOjEwMCU7Ym9yZGVyOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlu'@;
put 'cHV0LWNvbnRhaW5lciBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sIC5yZWNvcmQt'@;
put 'ZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xy'@;
put 'LWlucHV0LWNvbnRhaW5lci5pbnZhbGlkLWRhdGF7Ym9yZGVyLWNvbG9yOnJlZH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtZGlhbG9ne3dpZHRoOjgwdnd9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250'@;
put 'cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWF7d2lkdGg6MTAwJTtyZXNpemU6bm9uZTtib3JkZXItY29sb3I6Izk5OX0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhLmludmFsaWQtZGF0YXtib3JkZXItY29sb3I6cmVkO291dGxpbmU6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhLm5v'@;
put 'dC1jaGFye2ZvbnQtZmFtaWx5Okx1Y2lkYSBDb25zb2xlLE1vbmFjbyxtb25vc3BhY2V9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmdlbmVyYXRlLXJlY29yZC11cmx7cmlnaHQ6NDBweDt0b3A6NDBweDtmb250LXNpemU6MTJweH0ucmVjb3JkLWVkaXQtbW9k'@;
put 'YWxbX25nY29udGVudC0lQ09NUCVdICAgICAuZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b257cmlnaHQ6MjVweDt0b3A6NXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1oZWFkZXJ7cGFkZGluZzowIDAgMXJlbX0ucmVjb3JkLWVkaXQtbW9kYWxb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtZm9vdGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWZvb3RlciAuYWxlcnR7bWFy'@;
put 'Z2luOjB9LnByZXYtbmV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ucHJldi1uZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowfS5wcmV2LW5leHRbX25nY29udGVudC0lQ09NUCVdICAgYnV0'@;
put 'dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAxMHB4fS5mb2N1c2FibGVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze2JveC1zaGFkb3c6MCAwIDNweCAjNWFhMjIwfS5lbnRyeS1pbnB1dC1sZWZ0LW9mZnNldFtfbmdjb250ZW50LSVDT01QJV17bGVmdDotMzBweH0udmFsaWRhdGlv'@;
put 'bi1pbmZvLWFsZXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMTBweH0iXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gajh0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMyksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEsIiAiKX19bGV0IHo4'@;
put 'dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShhKXtpZigie2ZpbmlzaH0iPT09YSlyZXR1'@;
put 'cm4gdGhpcy5zdGF0ZXJJblByb2dyZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKGEpLHRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2goYSl9cmVwbGFjZUxhc3RTdGF0ZShhKXt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjA/'@;
put 'KHRoaXMuc3RhdGVzTGlzdC5wb3AoKSx0aGlzLnN0YXRlc0xpc3QucHVzaChhKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMubGVuZ3RoLTFdPWF9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0YXRlcigpe3RoaXMuc3RhdGVy'@;
put 'SW5Qcm9ncmVzcz0hMCx0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKSx0aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJv'@;
put 'Y2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAt'@;
put 'dXBsb2FkLXN0YXRlciJdXSxkZWNsczo1LHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJtLTAiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSIsInZlcnRpY2FsLWFsaWduLW1pZGRsZSJdLFsxLCJtLTAiXV0sdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiKSxtdCgxLGo4dCwyLDEsInAiLDApLGhlKCksZGUoMiwiZGl2IiwxKSgzLCJzcGFuIiwyKSxMZSg0LCJMb2FkaW5nLi4uIiksaGUoKSgpKSwyJmQmJihmZSgpLHhlKCJuZ0Zvck9mIixoLnByb2Nlc3NlZFN0YXRlcykpfSxkZXBlbmRlbmNp'@;
put 'ZXM6W2xzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9cFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXJ9Il19KX19cmV0dXJuIGN9KSgpLFU4dD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gYS5yZXBsYWNlKC9c'@;
put 'fC9nLCIgfCAiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToicGtTcGFjZVNlcGFyYXRlIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCksSTZlPSgoKT0+e2NsYXNzIGN7dHJh'@;
put 'bnNmb3JtKGEsZCl7cmV0dXJuIHRoaXMuYWRkU2VwYXJhdG9ycyhhLnRvU3RyaW5nKCksZCl9YWRkU2VwYXJhdG9ycyhhLGQ9IiAiKXtjb25zdCBoPShhKz0iIikuc3BsaXQoIi4iKTtsZXQgZj1oWzBdO2NvbnN0IHY9aC5sZW5ndGg+MT8iLiIraFsxXToiIixNPS8oXGQrKShcZHszfSkvO2Zv'@;
put 'cig7TS50ZXN0KGYpOylmPWYucmVwbGFjZShNLCIkMSIrZCsiJDIiKTtyZXR1cm4gZit2fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJ0aG91c2FuZFNlcGFyYXRvciIsdHlwZTpjLHB1'@;
put 'cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFo4dD1bImh0Il0sVzh0PVsidXBsb2FkU3RhdGVyIl0sWTh0PVsicXVlcnlGaWx0ZXIiXSxHOHQ9WyJob3RJbnN0YW5jZSJdLCQ4dD1bImZpbGVVcGxvYWRJbnB1dCJdLEs4dD0oYyxsKT0+KHtsaWJOYW1lOmMsdGFibGVOYW1lOmx9KSxSNmU9'@;
put 'KCk9PlsiIiwiICJdLHE4dD1jPT4oe2hlYWRlckJhckZpbHRlcjpjfSksWDh0PSgpPT5bIi9ob21lIl07ZnVuY3Rpb24gSjh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NCkoMSwic3BhbiIsNjUpKDIsImxhYmVsIiw2NiksTGUoMywiIEJyb3dzZSAiKSxoZSgpKCks'@;
put 'ZGUoNCwiaW5wdXQiLDY3LDMpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLmF0dGFjaEZpbGUoaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDQpLHhlKCJ1cGxvYWRlciIsYS51cGxvYWRlcil9fWZ1bmN0aW9uIFE4dChjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNjgpKDEsImJ1dHRvbiIsNjkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS51cGxvYWRQYXJzZWRGaWxlcygpKX0pLExlKDIsIiBVcGxvYWQgIiksaGUoKSgpfTImYyYmKGZlKCkseGUoImRpc2FibGVkIiwhMCkp'@;
put 'fWZ1bmN0aW9uIGU3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5zaG93VXBsb2FkTW9kYWw9ITEpfSksTGUoMSwiIENsb3NlICIpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7'@;
put 'eGUoImRpc2FibGVkIixhLmV4Y2VsRmlsZVBhcnNpbmd8fGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIHQ3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5zaG93VXBsb2FkTW9k'@;
put 'YWw9ITEpfSksTGUoMSwiIFNraXAgIiksaGUoKX19ZnVuY3Rpb24gbjd0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3MiksR3QoMSwiYXBwLXVwbG9hZC1zdGF0ZXIiLG51bGwsNCksaGUoKSl9ZnVuY3Rpb24gcjd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYXBwLWVkaXQtcmVj'@;
put 'b3JkIiw3MyksRnQoIm9uUmVjb3JkQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNvbmZpcm1SZWNvcmRFZGl0KCkpfSkoIm9uUmVjb3JkSW5wdXRGb2N1c2VkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vblJlY29yZElucHV0Rm9jdXMoaCkpfSko'@;
put 'Im9uUmVjb3JkRWRpdENsb3NlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNsb3NlUmVjb3JkRWRpdCgpKX0pKCJvbk5leHRSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25OZXh0UmVjb3JkKCkpfSkoIm9uUHJldmlvdXNSZWNvcmQiLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25QcmV2aW91c1JlY29yZCgpKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7eGUoImN1cnJlbnRSZWNvcmQiLGEuY3VycmVudEVkaXRSZWNvcmQpKCJyZWNvcmRBY3Rpb24iLGEucmVjb3JkQWN0aW9uKSgibGliZHMiLGEubGliZHMpKCJxdWVy'@;
put 'eUZpbHRlciIsYS5xdWVyeUZpbHRlcikoImZpbHRlciIsYS5maWx0ZXIpKCJzdWJtaXRMb2FkaW5nIixhLnN1Ym1pdExvYWRpbmcpKCJoZWFkZXJQa3MiLGEuaGVhZGVyUGtzKSgiY2VsbFZhbGlkYXRpb24iLGEuY2VsbFZhbGlkYXRpb24pKCJjdXJyZW50UmVjb3JkSW5kZXgiLGEuY3VycmVu'@;
put 'dEVkaXRSZWNvcmRJbmRleCkoImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsYS5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzKSgiY3VycmVudFJlY29yZEVycm9ycyIsYS5jdXJyZW50RWRpdFJlY29yZEVycm9ycykoImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLGEuY3VycmVudEVkaXRSZWNvcmRW'@;
put 'YWxpZGF0b3IpfX1mdW5jdGlvbiBpN3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDc0KSxHdCgxLCJwcm9ncmVzcyIpLGhlKCkpfWZ1bmN0aW9uIG83dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNzUpKDEsInNwYW4iLDc2KSxHdCgyLCJjbHItaWNvbiIsNzcpLGRlKDMs'@;
put 'InNwYW4iLDc4KSxMZSg0LCJCYWNrIHRvIHRhYmxlIHNlbGVjdGlvbiIpLGhlKCkoKSxkZSg1LCJzcGFuIiw3OSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnZpZXdib3hNYW5hZ2VyKCkpfSksR3QoNiwiY2xyLWljb24iLDgwKSxkZSg3LCJzcGFuIiw3OCks'@;
put 'TGUoOCwiVmlld2JveGVzIiksaGUoKSgpKCl9MiZjJiYoZmUoKSx4ZSgicm91dGVyTGluayIsWXMoMSxYOHQpKSl9ZnVuY3Rpb24gYTd0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsODYpfWZ1bmN0aW9uIHM3dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDg4'@;
put 'KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxJcigiICIsYS5kc05vdGUsIiAiKX19ZnVuY3Rpb24gbDd0KGMsbCl7MSZjJiYoY2koMCksbXQoMSxzN3QsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4NyksdWkoKSl9ZnVuY3Rpb24gYzd0KGMsbCl7aWYoMSZjJiYoY2ko'@;
put 'MCksTGUoMSksUXMoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxHSSgiICgiLGo4KDIsNCxhLmRhdGFTb3VyY2UubGVuZ3RoLCIsIiksIiAiLDE9PT1hLmRhdGFTb3VyY2UubGVuZ3RoPyJyb3ciOiJyb3dzIiwiLCAiLGEuY29scy5sZW5ndGgs'@;
put 'IiIsMT09PWEuY29scy5sZW5ndGg/IiBjb2wiOiIgY29scyIsIikgIil9fWZ1bmN0aW9uIHU3dChjLGwpezEmYyYmKGNpKDApLExlKDEsIiAoMCByb3dzKSAiKSx1aSgpKX1mdW5jdGlvbiBkN3QoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLGM3dCwzLDcsIm5nLWNvbnRhaW5lciIsMzkpKDIs'@;
put 'dTd0LDIsMCwibmctY29udGFpbmVyIiwzOSksdWkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCkseGUoIm5nSWYiLCFhLnplcm9GaWx0ZXJSb3dzKSxmZSgpLHhlKCJuZ0lmIixhLnplcm9GaWx0ZXJSb3dzKX19ZnVuY3Rpb24gaDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi'@;
put 'aDQiLDgxKSgxLCJjbHItdG9vbHRpcCIpKDIsImNsci1pY29uIiw4MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmRhdGFzZXRJbmZvPSEwKX0pLGhlKCksbXQoMyxhN3QsMSwwLCJjbHItaWNvbiIsODMpLGRlKDQsInNwYW4iLDg0KSxMZSg1KSxkZSg2LCJh'@;
put 'Iiw4NSksTGUoNyksaGUoKSgpLG10KDgsbDd0LDIsMCwibmctY29udGFpbmVyIiwzOSksaGUoKSxtdCg5LGQ3dCwzLDIsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1PZSgpO2ZlKDMpLHhlKCJuZ0lmIixhLnRhYmxlTmFtZS5pbmNsdWRlcygiLUZD'@;
put 'IikpLGZlKDIpLElyKCIgIixhLmxpYk5hbWUsIi4iKSxmZSgpLHhlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2QubGliZHMpLGZlKCksd3IoYS50YWJsZU5hbWUucmVwbGFjZSgiLUZDIiwiIikpLGZlKCkseGUoIm5nSWYiLGQuZHNOb3RlJiZkLmRzTm90ZS5sZW5ndGg+MCksZmUoKSx4'@;
put 'ZSgibmdJZiIsZC5kYXRhU291cmNlKX19ZnVuY3Rpb24gZjd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiYnV0dG9uIiw5NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgzKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLEd0KDEsImNsci1pY29uIiw5'@;
put 'NiksZGUoMiwic3BhbiIsNzgpLExlKDMsIlVwbG9hZCIpLGhlKCkoKX19ZnVuY3Rpb24gcDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiYnV0dG9uIiw5MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vcGVuUWIoKSl9KSxHdCgy'@;
put 'LCJjbHItaWNvbiIsOTEpLGRlKDMsInNwYW4iLDc4KSxMZSg0LCJGaWx0ZXIiKSxoZSgpKCksZGUoNSwiYnV0dG9uIiw5MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5lZGl0VGFibGUoKSl9KSxHdCg2LCJjbHItaWNvbiIsOTMpLGRlKDcsInNwYW4iLDc4'@;
put 'KSxMZSg4LCJFZGl0IiksaGUoKSgpLG10KDksZjd0LDQsMCwiYnV0dG9uIiw5NCksdWkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoOSkseGUoIm5nSWYiLCFhLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnKX19ZnVuY3Rpb24gZzd0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEp'@;
put 'LGhlKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgpLGp1KCJUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNv'@;
put 'bnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBtN3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4OCksbXQoMSxnN3QsMiwyLCJzcGFuIiwzOSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUoIm5nSWYiLGEucmVzdHJp'@;
put 'Y3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gdjd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiYnV0dG9uIiw5NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5jYW5jZWxFZGl0KCkpfSksR3QoMiwiY2xyLWljb24iLDk4'@;
put 'KSxkZSgzLCJzcGFuIiksTGUoNCwiQ2FuY2VsIiksaGUoKSgpLGRlKDUsImNsci10b29sdGlwIikoNiwiYnV0dG9uIiw5OSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUm93'@;
put 'KCkpfSksR3QoNywiY2xyLWljb24iLDEwMCksTGUoOCwiQWRkIFJvdyAiKSxoZSgpLG10KDksbTd0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsODcpLGhlKCksZGUoMTAsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuY2hlY2tTYXZl'@;
put 'KCkpfSksR3QoMTEsImNsci1pY29uIiwxMDEpLExlKDEyLCJTdWJtaXQgIiksaGUoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg2KSxUcigiZGMtbG9ja2VkLWNvbnRyb2wiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KSx4ZSgiY2xyTG9hZGluZyIsYS5hZGRpbmdOZXdS'@;
put 'b3cpfX1mdW5jdGlvbiBiN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDEwNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgzKS5tYW51YWxGaWxlRWRpdE1vZGFsPSEwKX0pLEd0KDEsImNsci1pY29uIiw5MyksZGUoMiwic3BhbiIp'@;
put 'LExlKDMsIkVkaXQiKSxoZSgpKCl9fWZ1bmN0aW9uIHk3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLGRlKDEsImJ1dHRvbiIsMTAyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLmRpc2NhcmRTb3VyY2VGaWxlPSEwKX0pLEd0KDIsImNsci1p'@;
put 'Y29uIiw5OCksZGUoMywic3BhbiIpLExlKDQsIkRpc2NhcmQgZmlsZSIpLGhlKCkoKSxtdCg1LGI3dCw0LDAsImJ1dHRvbiIsMTAzKSxkZSg2LCJidXR0b24iLDEwNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5zdWJtaXRFeGNlbCgpKX0pLEd0KDcsImNs'@;
put 'ci1pY29uIiwxMDEpLExlKDgsIiBTdWJtaXQgIiksaGUoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg1KSx4ZSgibmdJZiIsYS5ob3RUYWJsZS5yZWFkT25seSksZmUoKSx4ZSgiY2xyTG9hZGluZyIsYS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24gXzd0KGMsbCl7aWYoMSZjJiYo'@;
put 'ZGUoMCwiZGl2Iiw4OSksbXQoMSxwN3QsMTAsMSwibmctY29udGFpbmVyIiwzOSkoMix2N3QsMTMsMywibmctY29udGFpbmVyIiwzOSkoMyx5N3QsOSwyLCJuZy1jb250YWluZXIiLDM5KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5'@;
put 'JiYhYS51cGxvYWRQcmV2aWV3KSxmZSgpLHhlKCJuZ0lmIiwhYS5ob3RUYWJsZS5yZWFkT25seSYmIWEudXBsb2FkUHJldmlldyksZmUoKSx4ZSgibmdJZiIsYS51cGxvYWRQcmV2aWV3KX19ZnVuY3Rpb24gdzd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDYpKDEsInNwYW4iKSxMZSgy'@;
put 'LCJGSUxURVIgOiAiKSxkZSgzLCJiIiksTGUoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDQpLHdyKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24gQzd0KGMsbCl7MSZjJiYoY2koMCksZGUoMSwic3BhbiIsMTA5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsImRpdiIs'@;
put 'MTEwKSg0LCJwIiwxMTEpLExlKDUsIkxvYWRpbmcgdGFibGUiKSxoZSgpKCksdWkoKSl9ZnVuY3Rpb24gUzd0KGMsbCl7MSZjJiYoY2koMCksZGUoMSwic3BhbiIpLEd0KDIsImNsci1pY29uIiwxMTIpLGhlKCksZGUoMywiZGl2IiwxMTApKDQsInAiLDExMSksTGUoNSwiTG9hZGluZyB0YWJs'@;
put 'ZSBlcnJvciIpLGhlKCkoKSx1aSgpKX1mdW5jdGlvbiBNN3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNykoMSwiZGl2IiwxMDgpLG10KDIsQzd0LDYsMCwibmctY29udGFpbmVyIiwzOSkoMyxTN3QsNiwwLCJuZy1jb250YWluZXIiLDM5KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgp'@;
put 'O2ZlKDIpLHhlKCJuZ0lmIiwhYS5nZXRkYXRhRXJyb3IpLGZlKCkseGUoIm5nSWYiLGEuZ2V0ZGF0YUVycm9yKX19ZnVuY3Rpb24geDd0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLGp1KCJUbyB1bmxvY2sgbW9yZSB0aGFu'@;
put 'ICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBFN3QoYyxsKXtp'@;
put 'ZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTUpLG10KDEseDd0LDIsMiwic3BhbiIsMzkpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIFQ3dChjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1MbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwxMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUmVjb3JkQnV0dG9uQ2xpY2soKSl9KSxHdCgyLCJj'@;
put 'bHItaWNvbiIsMTAwKSxMZSgzLCIgQWRkIFJlY29yZCAiKSxoZSgpLG10KDQsRTd0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE0KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksVHIoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9'@;
put 'fWZ1bmN0aW9uIEE3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDExNiksTGUoMSksR3QoMiwiY29udGFjdC1saW5rIiksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxJcigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dl'@;
put 'ZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIGs3dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDEyOCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksanUoIk9ubHkgIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiICIsMT09PWEubGlj'@;
put 'ZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PyJyb3ciOiJyb3dzIiwiIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gRDd0KGMsbCl7aWYoMSZjKXtjb25zdCBh'@;
put 'PUxuKCk7ZGUoMCwiZGl2IiwxMjkpKDEsImRpdiIsMTMwKSgyLCJsYWJlbCIsMTMxKSxMZSgzLCJNZXNzYWdlIiksaGUoKSxkZSg0LCJ0ZXh0YXJlYSIsMTMyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKTtyZXR1cm4gYmkoZi5tZXNzYWdlLGgp'@;
put 'fHwoZi5tZXNzYWdlPWgpLEN0KGgpfSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDQpLHBpKCJuZ01vZGVsIixhLm1lc3NhZ2UpLHhlKCJkaXNhYmxlZCIsIWEudmFsaWRhdGlvbkRvbmUpKCJ2YWx1ZSIsYS52YWxpZGF0aW9uRG9uZT8iIjoiUGxlYXNlIHdhaXQgd2hpbGUg'@;
put 'd2UgdmFsaWRhdGUgIithLmNvbHMubGVuZ3RoKmEubW9kaWZlZFJvd3NJbmRleGVzLmxlbmd0aCsiIGNlbGxzLiIpfX1mdW5jdGlvbiBJN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDExNykoMSwiZGl2IiwxMTgpKDIsImRpdiIsMTE5KSgzLCJkaXYiLDEyMCkoNCwi'@;
put 'YnV0dG9uIiwxMjEpLEd0KDUsImNsci1pY29uIiwxMjIpLGhlKCksZGUoNiwiaDMiLDgpLExlKDcpLGhlKCkoKSxkZSg4LCJkaXYiLDkpLG10KDksazd0LDIsMiwic3BhbiIsMTIzKSgxMCxEN3QsNSwzLCJkaXYiLDEyNCksaGUoKSxkZSgxMSwiZGl2IiwxMjUpKDEyLCJidXR0b24iLDEyNiks'@;
put 'RnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5zYXZlVGFibGUoaC5ob3RUYWJsZS5kYXRhKSl9KSxMZSgxMywiIFN1Ym1pdCAiKSxoZSgpLGRlKDE0LCJidXR0b24iLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2Uo'@;
put 'KTtyZXR1cm4gaC5jYW5jZWxTdWJtaXQoKSxoLnN1Ym1pdD0hMSxDdChoLnZhbGlkYXRpb25Eb25lPTApfSksTGUoMTUsIiBDYW5jZWwgIiksaGUoKSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDcpLEZmKCIgU3VibWl0IGZvciBBcHByb3ZhbCAoIixhLnJvd3NDaGFuZ2VkLnJv'@;
put 'd3NBZGRlZCwiIGFkZGVkLCAiLGEucm93c0NoYW5nZWQucm93c1VwZGF0ZWQsIiB1cGRhdGVkLCAiLGEucm93c0NoYW5nZWQucm93c0RlbGV0ZWQsIiBkZWxldGVkKSAiKSxmZSgyKSx4ZSgibmdJZiIsYS50b3RhbFJvd3NDaGFuZ2VkPmEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dz'@;
put 'X2xpbWl0JiZhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWEuSW5maW5pdHkpLGZlKCkseGUoIm5nSWYiLGEudGFibGVUcnVlKSxmZSgyKSx4ZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKX19ZnVuY3Rpb24gUjd0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3Bh'@;
put 'biIsMTMzKSxMZSgxKSxRcygyLCJwa1NwYWNlU2VwYXJhdGUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpO2ZlKCksanUoIiBPbiByb3cgIixhKzEsIjogIixEYygyLDIsZC5wa0ZpZWxkc1thXS5yZXBsYWNlKCJ8IiwiIikpLCIgIil9fWZ1bmN0aW9uIEw3dChjLGwp'@;
put 'e2lmKDEmYyYmKGRlKDAsInAiKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxGZigiICIsYS5jb2wsIigiLGEubGVuLCIpLCAiLGEudmFsLCIgIil9fWZ1bmN0aW9uIE83dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTM0KSgxLCJkaXYi'@;
put 'LDEzNSkoMiwiZGl2IiwxMTkpKDMsImRpdiIsMTIwKSg0LCJidXR0b24iLDEyMSksR3QoNSwiY2xyLWljb24iLDEyMiksaGUoKSxkZSg2LCJoMyIsOCksTGUoNywiRXJyb3IiKSxoZSgpKCksZGUoOCwiZGl2Iiw5KSg5LCJwIiksTGUoMTAsIllvdSBjYW5ub3Qgc3VibWl0IGVtcHR5IGNsYXVz'@;
put 'ZXMiKSxoZSgpKCksZGUoMTEsImRpdiIsMjMpKDEyLCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkubnVsbFZhcmlhYmxlcz0hMSl9KSxMZSgxMywiIE9rICIpLGhlKCkoKSgpKCkoKX19ZnVuY3Rpb24gUDd0KGMsbCl7MSZjJiZHdCgwLCJh'@;
put 'cHAtcXVlcnkiLG51bGwsNSl9ZnVuY3Rpb24gRjd0KGMsbCl7MSZjJiYoZGUoMCwicCIsMTM2KSxMZSgxLCIgU29ycnkgdGhhdCBkaWRuJ3Qgd29yaywgdHJ5IGFnYWluLiAiKSxoZSgpKX1sZXQgck49KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5jbnQ9MH1zdGF0aWN7dGhpcy5ub25Qa0Nu'@;
put 'dD0wfXN0YXRpY3t0aGlzLmxhc3RDZWxsPTB9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLG5lLGNlLGJlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1mLHRoaXMuaGVscGVyU2Vy'@;
put 'dmljZT12LHRoaXMucm91dGVyPU0sdGhpcy5yb3V0ZT1ELHRoaXMuc2FzU2VydmljZT1aLHRoaXMuY2RmPW5lLHRoaXMuaG90UmVnaXN0ZXJlcj1jZSx0aGlzLnNwcmVhZHNoZWV0U2VydmljZT1iZSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0PW5ldyBwZCx0aGlzLnF1ZXJ5RmlsdGVyQ29t'@;
put 'cExpc3Q9bmV3IHBkLHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdD1uZXcgcGQsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgcGQsdGhpcy5tZXNzYWdlPSIiLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5jb2xzPVtdLHRoaXMucmVzdHJpY3Rpb25zPXt9LHRoaXMuZGF0YXNl'@;
put 'dEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLnZpZXdib3hlcz0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10saGlkZGVuOiEwLGNvbHVtbnM6W10saGVpZ2h0OiIxMDAlIixt'@;
put 'aW5TcGFyZVJvd3M6MSxsaWNlbnNlS2V5OnZvaWQgMCxyZWFkT25seTohMCxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sc2V0dGluZ3M6e2NvbnRleHRNZW51OntpdGVtczp7ZWRpdF9yb3c6e25hbWU6IkVkaXQgcm93IixoaWRkZW4o'@;
put 'KXtjb25zdCBxZT10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtpZighcWUpcmV0dXJuITE7Y29uc3QgcnQ9cWVbMF07cmV0dXJuIHJ0LmZyb20ucm93IT09cnQudG8ucm93fSxjYWxsYmFjazooQmUscWUscnQpPT57Y29uc3QgcHQ9cWVbMF07cHQuc3RhcnQucm93PT09cHQuZW5kLnJvdyYmdGhp'@;
put 'cy5lZGl0UmVjb3JkKG51bGwscHQuc3RhcnQucm93KX19LHJvd19hYm92ZTp7bmFtZToiSW5zZXJ0IFJvdyBhYm92ZSJ9LHJvd19iZWxvdzp7bmFtZToiSW5zZXJ0IFJvdyBiZWxvdyJ9LHJlbW92ZV9yb3c6e25hbWU6Iklnbm9yZSByb3cifSxjb3B5OntuYW1lOiJDb3B5IHdpdGhvdXQgaGVh'@;
put 'ZGVycyJ9LGNvcHlfd2l0aF9jb2x1bW5faGVhZGVyczp7bmFtZToiQ29weSB3aXRoIGhlYWRlcnMifSxjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHk6e25hbWU6IkNvcHkgaGVhZGVycyBvbmx5In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSx1bmRvOntuYW1lOiJVbmRvIn0scmVkbzp7bmFtZToi'@;
put 'UmVkbyJ9fX19fSx0aGlzLmhvdENlbGxzUHJvcFJvdz1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6MCxyb3dzRGVsZXRlZDowLHJvd3NBZGRlZDowfSx0aGlzLm1vZGlm'@;
put 'ZWRSb3dzSW5kZXhlcz1bXSx0aGlzLnF1ZXJ5RXJyPSExLHRoaXMuc3VjY2Vzc0VuYWJsZT0hMSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5wa0ZpZWxkcz1bXSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy5iYWRFZGl0PSExLHRoaXMuc2F2ZUxv'@;
put 'YWRpbmc9ITEsdGhpcy5hcHByb3ZlcnM9W10sdGhpcy5lcnJWYWxpZGF0aW9uPSExLHRoaXMucGtOdWxsPSExLHRoaXMubm9Qa051bGw9ITEsdGhpcy50YWJsZURhdGE9W10sdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy5xdWVyeVRleHRTYXZlZD0iIix0aGlzLnNob3dBcHByb3ZlcnM9ITEsdGhp'@;
put 'cy5wa0R1cHM9ITEsdGhpcy52YWxpZGF0aW9uRG9uZT0wLHRoaXMuZHVwbGljYXRlUGtJbmRleGVzPVtdLHRoaXMuY29sdW1uSGVhZGVyPVtdLHRoaXMuc3BlY0luZm89W10sdGhpcy50b29Mb25nPSExLHRoaXMuZXhjZWVkQ2VsbHM9W10sdGhpcy51cGxvYWRlcj1uZXcgSWVlLHRoaXMudXBs'@;
put 'b2FkVXJsPSIiLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbCx0aGlzLmRhdGE9W10sdGhpcy5oZWFkZXJBcnJheT1bXSx0aGlzLmhvdERhdGFTY2hlbWE9e30sdGhp'@;
put 'cy5oZWFkZXJTaG93PVtdLHRoaXMuaGVhZGVyVmlzaWJsZT0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5oYXNBbm90aGVyRHJvcFpvbmVPdmVyPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ITEsdGhpcy5kYXRlVGltZUhlYWRl'@;
put 'cnM9W10sdGhpcy50aW1lSGVhZGVycz1bXSx0aGlzLmRhdGVIZWFkZXJzPVtdLHRoaXMueGxSdWxlcz1bXSx0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5oZWFkZXJDb2x1bW5zPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5maWxlUGFzc3dvcmRTdWJqZWN0PW5ldyBXbix0aGlz'@;
put 'LmZpbGVVbmxvY2tFcnJvcj0hMSx0aGlzLmZpbGVQYXNzd29yZE1vZGFsPSExLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuZGlzY2FyZFNvdXJjZUZpbGU9ITEsdGhpcy5tYW51YWxGaWxlRWRpdE1vZGFsPSExLHRoaXMucmVjb3JkQWN0aW9uPW51bGwsdGhpcy5jdXJyZW50RWRpdFJl'@;
put 'Y29yZExvYWRpbmdzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnM9W10sdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMuYWRkUmVjb3JkVXJsPW51'@;
put 'bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRoaXMuc2luZ2xlUm93U2VsZWN0ZWQ9ITEsdGhpcy5hZGRpbmdOZXdSb3c9ITEsdGhpcy5nZXRkYXRhRXJyb3I9ITEsdGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0aGlzLnRhYmxlRmlsZURy'@;
put 'YWdPdmVyPSExLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W10sdGhpcy52YWxpZGF0aW9uVGFibGVMaW1pdD0yMCx0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRpb25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxFWFRSQV9DT0xfTkFNRToxLERJU1BMQVlfVkFMVUU6MixESVNQTEFZX1RZUEU6'@;
put 'MyxSQVdfVkFMVUVfTlVNOjQsUkFXX1ZBTFVFX0NIQVI6NSxGT1JDRV9GTEFHOjZ9LHRoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxESVNQTEFZX1ZBTFVFOjEsUkFXX1ZBTFVFOjJ9LHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxsVmFsaWRhdGlvbk1hcD1b'@;
put 'XSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnRpbWVzQ2xpY2tlZD0wLEJlZVt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSYmR20ucmVnaXN0ZXJMYW5ndWFnZShCZWVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0pLHRoaXMuaG90'@;
put 'UmVnaXN0ZXJlcj1uZXcgV20sdGhpcy5wYXJzZVJlc3RyaWN0aW9ucygpLHRoaXMuc2V0UmVzdHJpY3Rpb25zKCl9cGFyc2VSZXN0cmljdGlvbnMoKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZCx0aGlz'@;
put 'LnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWR9c2V0UmVzdHJpY3Rpb25z'@;
put 'KGEpe2EmJih0aGlzLnJlc3RyaWN0aW9ucz17Li4udGhpcy5yZXN0cmljdGlvbnMsLi4uYX0pLHRoaXMucmVzdHJpY3Rpb25zLnJlbW92ZUVkaXRSZWNvcmRCdXR0b24mJmRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLmVkaXRfcm93LHRoaXMucmVz'@;
put 'dHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93JiYoZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2Fib3ZlLGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJvd19iZWxvdyxkZWxldGUodGhpcy5ob3RU'@;
put 'YWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yZW1vdmVfcm93KX1jaGVja1Jvd0xpbWl0KCl7dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZ3x8dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PTEvMCYmKHRoaXMucmVzdHJpY3Rpb25zLnJl'@;
put 'c3RyaWN0QWRkUm93PXRoaXMuZGF0YVNvdXJjZT8ubGVuZ3RoPj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0'@;
put 'RmlsdGVyKCl9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEZpbGVVcGxvYWQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJGaWxlIFVwbG9hZCIpOnRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc/dGhpcy5ldmVudFNlcnZpY2Uu'@;
put 'c2hvd0luZm9Nb2RhbCgiSW5mb3JtYXRpb24iLCJVcGxvYWQgZmVhdHVyZSBpcyBkaXNhYmxlZCB3aGlsZSBDb2x1bW4gTGV2ZWwgU2VjdXJpdHkgcnVsZXMgYXJlIGFjdGl2ZSIpOnRoaXMudXBsb2FkUHJldmlld3x8KHRoaXMuc2hvd1VwbG9hZE1vZGFsPSEwKX1maWxlT3ZlckJhc2UoYSl7'@;
put 'dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9YXR0YWNoRmlsZShhLGQ9ITEpe3ZhciBoPXRoaXM7Y29uc3QgZj1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07dGhpcy5leGNlbFVwbG9hZFN0YXRlPSJMb2FkaW5nIix0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITAsdGhpcy5leGNlbEZpbGVSZWFk'@;
put 'eT0hMSx0aGlzLmZpbGVuYW1lPWYubmFtZSx0aGlzLnNwcmVhZHNoZWV0U2VydmljZS5wYXJzZUV4Y2VsRmlsZSh7ZmlsZTpmLHVwbG9hZGVyOnRoaXMudXBsb2FkZXIsZGNWYWxpZGF0b3I6dGhpcy5kY1ZhbGlkYXRvcixoZWFkZXJQa3M6dGhpcy5oZWFkZXJQa3MsaGVhZGVyQXJyYXk6dGhp'@;
put 'cy5oZWFkZXJBcnJheSxoZWFkZXJTaG93OnRoaXMuaGVhZGVyU2hvdyx0aW1lSGVhZGVyczp0aGlzLnRpbWVIZWFkZXJzLGRhdGVIZWFkZXJzOnRoaXMuZGF0ZUhlYWRlcnMsZGF0ZVRpbWVIZWFkZXJzOnRoaXMuZGF0ZVRpbWVIZWFkZXJzLHhsUnVsZXM6dGhpcy54bFJ1bGVzLGVuY29kaW5n'@;
put 'OnRoaXMuZW5jb2Rpbmd9LHY9Pnt0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKHYpfSx2PT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVGFibGUgRm91bmQiLHYpfSkudGhlbihmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXtNJiYoaC5leGNlbEZpbGVSZWFkeT0hMCxo'@;
put 'LnVwbG9hZGVyPU0udXBsb2FkZXIsTS5kYXRhJiZNLmhlYWRlclNob3c/KGguZGF0YT1NLmRhdGEsaC5oZWFkZXJTaG93PU0uaGVhZGVyU2hvdyxoLmdldFBlbmRpbmdFeGNlbFByZXZpZXcoKSk6eWllbGQgaC51cGxvYWRQYXJzZWRGaWxlcygpKX0pO3JldHVybiBmdW5jdGlvbihNKXtyZXR1'@;
put 'cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaCh2PT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCx2LG51bGwpLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMudXBsb2FkUHJldmlldz0hMSxzZXRUaW1lb3V0KCgpPT57dGhpcy5maWxlbmFtZT0i'@;
put 'In0pfSkuZmluYWxseSgoKT0+e3RoaXMuZXhjZWxGaWxlUGFyc2luZz0hMX0pfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy51cGxvYWRQYXJzZWRGaWxlcygpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9dXBsb2Fk'@;
put 'UGFyc2VkRmlsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihhLmNoZWNrSW52YWxpZCgpKXJldHVybiB2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIkludmFsaWQgdmFsdWVzIGFyZSBwcmVzZW50LiIpO2lmKGEudmFsaWRhdGVQcmltYXJ5'@;
put 'S2V5cygpLDAhPT1hLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIGEucGtEdXBzPSEwLHZvaWQoYS5zdWJtaXQ9ITEpO2EucGtEdXBzPSExLGEudXBsb2FkTG9hZGluZz0hMDtjb25zdCBkPVtdO2Zvcihjb25zdCBoIG9mIGEudXBsb2FkZXIucXVldWUpZC5wdXNoKHtmaWxlOmgs'@;
put 'ZmlsZU5hbWU6aC5uYW1lfSk7eWllbGQgYS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoYS51cGxvYWRVcmwsZCx7dGFibGU6YS5saWJkc30pLnRoZW4oaD0+e2lmKHR5cGVvZiBoLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PiJ1Iil7aWYodHlwZW9mIGguYWRhcHRlclJlc3BvbnNlLnNhc3Bh'@;
put 'cmFtcz4idSIpcmV0dXJuO3thLnVwbG9hZExvYWRpbmc9ITE7Y29uc3QgZj1oLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF07YS5zdWNjZXNzRW5hYmxlPSEwLGEudGFibGVJZD1mLkRTSUQsYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYS50YWJsZUlkKX19ZWxzZXtjb25z'@;
put 'dCBmPWguYWRhcHRlclJlc3BvbnNlLHY9Zi5zYXNqc0Fib3J0WzBdLk1TRyxNPWYuc2FzanNBYm9ydFswXS5NQUM7YS51cGxvYWRMb2FkaW5nPSExLGEuZmlsZW5hbWU9IiIsYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKGEuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3Qu'@;
put 'bmF0aXZlRWxlbWVudC52YWx1ZT0iIiksYS51cGxvYWRlci5xdWV1ZT1bXSxhLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIix2LHtTWVNXQVJOSU5HVEVYVDpmLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpmLlNZU0VSUk9SVEVYVCxNQUM6TX0pfX0saD0+e2EudXBsb2FkTG9h'@;
put 'ZGluZz0hMSxhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYoYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSxhLnVwbG9hZGVyLnF1ZXVlPVtdLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQi'@;
put 'LGguYWRhcHRlclJlc3BvbnNlKX0pfSkoKX1nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0'@;
put 'TWVudSIsITEpO2NvbnN0IGE9W107dGhpcy5kYXRhLm1hcChoPT57Y29uc3QgZj17fTt0aGlzLmhlYWRlclNob3cubWFwKCh2LE0pPT57Zlt2XT1oW01dfSksZi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxh'@;
put 'LnB1c2goZil9KSx0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZGF0YVNvdXJjZT1hLHRoaXMuaG90VGFibGUuZGF0YT1hO2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmV4Y2VsVXBsb2FkU3Rh'@;
put 'dGU9IlZhbGlkYXRpbmctSE9UIixkLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxtYXhSb3dzOjEvMH0sITEpLGQucmVuZGVyKCksdGhpcy5hcHBlbmRVcGxvYWRTdGF0ZSgiVmFsaWRhdGluZyByb3dzIiksZC52YWxpZGF0ZUNlbGxzKCgpPT57dGhpcy5zaG93VXBsb2Fk'@;
put 'TW9kYWw9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbH0pfWRpc2NhcmRQZW5kaW5nRXhjZWwoYSl7dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7bWF4Um93czp0aGlzLmxpY2VuY2VTdGF0'@;
put 'ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfSksYSYmdGhpcy5jYW5jZWxFZGl0KCksdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy51cGxvYWRQcmV2aWV3'@;
put 'PSExLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSxpc05hTihwYXJzZUludCh0aGlzLnJvdXRlci51cmwuc3BsaXQoIi8iKS5wb3AoKXx8IiIpKXx8dGhpcy5xdWVyeVRleHRTYXZlZC5sZW5ndGg+MCYmKHRoaXMucXVlcnlUZXh0PXRoaXMucXVlcnlUZXh0'@;
put 'U2F2ZWQsdGhpcy5xdWVyeVRleHRTYXZlZD0iIil9cHJldmlld1RhYmxlRWRpdENvbmZpcm0oKXt0aGlzLmRpc2NhcmRQZW5kaW5nRXhjZWwoKSx0aGlzLmNvbnZlcnRUb0NvcnJlY3RUeXBlcyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZWRpdFRhYmxlKCEwKX1hcHBlbmRVcGxvYWRTdGF0ZShh'@;
put 'LGQ9ITEpe3RoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0JiYoZD90aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0LnJlcGxhY2VMYXN0U3RhdGUoYSk6dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJzdC5hcHBlbmRTdGF0ZShh'@;
put 'KSl9aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX1pc1JlYWRvbmx5Q29sKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpPy5yZWFkT25seX1pc0NvbEhlYWRlcihhKXtyZXR1cm4gdGhpcy5oZWFkZXJBcnJheS5pbmRleE9mKGEudG9V'@;
put 'cHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdO2NvbnN0IGg9W107aWYodHlwZW9mIGEuY2xh'@;
put 'dXNlcz4idSIpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2NvbnN0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0dXJuKCJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFy'@;
put 'YW0pJiYoS24uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEtuLmVkaXRvci5maWx0ZXIucXVlcnk9W10sS24uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2'@;
put 'ZSJ9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdLmVsZW1lbnRzO2Q9TS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIG51bGw9PT1ELnZhcmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChNKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2'@;
put 'b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PWEuY2xhdXNlcyYmYS5saWJkcyl7Y29uc3QgZj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKE09Pntjb25zdCBEPXtmaWx0ZXJD'@;
put 'bGF1c2VzOltdfTtNLmVsZW1lbnRzLmZvckVhY2goWj0+e0QuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWikpfSksRC5jbGF1c2VMb2dpYz1NLmNsYXVzZUxvZ2ljLGYuZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShEKSl9'@;
put 'KTtjb25zdCB2PWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsdikudGhlbihNPT57YS5xdWVyeUZpbHRlcj17aWQ6TS5yZXN1bHRbMF0uRklMVEVSX1JLLHRhYmxlOk0ucmVzdWx0WzBd'@;
put 'LkZJTFRFUl9UQUJMRX0sYS5yb3V0ZXIubmF2aWdhdGUoWyIvIl0se3NraXBMb2NhdGlvbkNoYW5nZTohMCxxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KS50aGVuKCgpPT5hLnJvdXRlci5uYXZpZ2F0ZShbIi9lZGl0b3IvIithLnF1ZXJ5RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5'@;
put 'RmlsdGVyLmlkXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkpLGEuZmlsdGVyPSExfSkuY2F0Y2goTT0+e2Euc3VibWl0TG9hZGluZz0hMX0pfX1jYXRjaChmKXthLnF1ZXJ5RXJyPSEwLGEuc3VibWl0TG9hZGluZz0hMSxhLnF1ZXJ5RXJyTWVzc2FnZT1mfX0pKCl9b3BlblFi'@;
put 'KCl7dGhpcy5saWJkcyYmKHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5saWJkcyx0aGlzLmNvbHMpKX1lZGl0VGFibGUoYSxkKXt0aGlzLnRvZ2ds'@;
put 'ZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCEwKTtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2UsZj1oLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksdj1mLmdldFNvcnRDb25maWcoKSxNPUFycmF5LmlzQXJyYXkodik/djpbdl07c2V0VGltZW91dCgoKT0+e2F8fCh0aGlzLmRhdGFT'@;
put 'b3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLGQmJnRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5wb3AoKSksdGhpcy5ob3RUYWJsZS5yZWFkT25seT0hMSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRhU291cmNlLGgudXBkYXRl'@;
put 'U2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHl9LCExKSxoLnJlbmRlcigpO2Zvcihjb25zdCBEIG9mIE0pZi5zb3J0KEQpO3RoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfSwwKX1jb252ZXJ0VG9Db3JyZWN0VHlwZXMoYSl7Zm9yKGNvbnN0IGQgb2YgYSlm'@;
put 'b3IoY29uc3QgaCBpbiBkKXtjb25zdCBmPXRoaXMuY29scy5maW5kKHY9PnYuTkFNRT09PWgpO2YmJiIiIT09ZFtoXSYmIm51bSI9PT1mLlRZUEUmJiFmLkREVFlQRS5pbmNsdWRlcygiVElNRSIpJiYhZi5ERFRZUEUuaW5jbHVkZXMoIkRBVEUiKSYmKGRbaF09cGFyc2VJbnQoZFtoXSkpfX1j'@;
put 'YW5jZWxFZGl0KCl7dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1bXTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UsZD1hLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksaD1kLmdldFNvcnRDb25maWcoKSxmPUFy'@;
put 'cmF5LmlzQXJyYXkoaCk/aDpbaF07dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSksdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNvdXJjZSx0aGlzLmhvdFRh'@;
put 'YmxlLnJlYWRPbmx5PSEwLGEudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHksZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyk7Zm9yKGNvbnN0IHYgb2YgZilkLnNvcnQodik7dGhpcy5j'@;
put 'aGVja1Jvd0xpbWl0KCl9aG90Q2xpY2tlZCgpezE9PT10aGlzLnRpbWVzQ2xpY2tlZCYmdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoKSwwPT09dGhpcy50aW1lc0NsaWNrZWQmJih0aGlzLnRpbWVzQ2xpY2tlZCsrLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnRpbWVzQ2xp'@;
put 'Y2tlZD0wfSwyMDApKX1jbGVhbkV4Y2VlZCgpe3RoaXMuZXhjZWVkQ2VsbHM9W119YXBwcm92ZXJzVG9nZ2xlKCl7dGhpcy5zaG93QXBwcm92ZXJzPSF0aGlzLnNob3dBcHByb3ZlcnN9YWRkUm93KCl7dGhpcy5hZGRpbmdOZXdSb3c9ITAsc2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5o'@;
put 'b3RJbnN0YW5jZSxkPXRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7YS5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsZCwxKSxhLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEuc2VsZWN0Q2VsbCh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsMCksYS5yZW5kZXIoKSx0'@;
put 'aGlzLmRhdGFTb3VyY2VbZF0mJih0aGlzLmRhdGFTb3VyY2VbZF0ubm9MaW5rT3B0aW9uPSEwKSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0pfWNhbmNlbFN1Ym1pdCgpe3RoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVl'@;
put 'cENsb25lKHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdCksdGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PVtdLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2U7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2EudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNl'@;
put 'LGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihkLGgpe3JldHVybiAwPT09aD82MDpkPjUwMD81MDA6ZH19LCExKSxhLnNlbGVjdENlbGwoMCwwKSxhLnJlbmRlcigpLGEudmFsaWRhdGVSb3dz'@;
put 'KHRoaXMubW9kaWZlZFJvd3NJbmRleGVzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX1nZXRSb3dzU3VibWl0dGluZ0NvdW50KCl7dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuZGVidWcmJih0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuZGF0YVNvdXJjZSks'@;
put 'dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpKTtsZXQgYT0wLGQ9MCxoPTA7dGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5kYXRhTW9kaWZpZWQ9W107Zm9yKGxldCBmPTA7Zjx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2YrKyl7Y29uc3Qgdj10'@;
put 'aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVtmXSk7aWYoIlllcyI9PT12Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyl0aGlzLmRhdGFNb2RpZmllZC5wdXNoKHYpLGQrKztlbHNle2NvbnN0IE09dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLmZpbmQo'@;
put 'RD0+e2Zvcihjb25zdCBaIG9mIHRoaXMuaGVhZGVyUGtzKWlmKERbWl0hPT12W1pdKXJldHVybiExO3JldHVybiEwfSk7TT9KU09OLnN0cmluZ2lmeSh2KSE9PUpTT04uc3RyaW5naWZ5KE0pJiYodGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcy5wdXNo'@;
put 'KGYpLGErKyk6KHRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChmKSxoKyspfX10aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDphLHJvd3NEZWxldGVkOmQscm93c0FkZGVkOmh9fXZhbGlkYXRlUHJpbWFyeUtleXMoKXtjb25zdCBhPXRo'@;
put 'aXMuaG90SW5zdGFuY2UsZD1hLmdldERhdGEoKTt0aGlzLnBrRmllbGRzPVtdO2ZvcihsZXQgTT0wO008ZC5sZW5ndGg7TSsrKXtsZXQgRD0iIjtmb3IobGV0IFo9MTtaPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtaKyspRD1EKyJ8IitkW01dW1pdO3RoaXMucGtGaWVsZHMucHVzaChEKX1jb25z'@;
put 'dCBoPVtdLGY9dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmb3IobGV0IE09MDtNPHRoaXMucGtGaWVsZHMubGVuZ3RoO00rKylmb3IobGV0IEQ9MDtEPHRoaXMucGtGaWVsZHMubGVuZ3RoO0QrKyl0aGlzLnBrRmllbGRzW01dPT09dGhpcy5wa0ZpZWxkc1tEXSYmRCE9PU0mJmgucHVzaChEKTtp'@;
put 'Zih0aGlzLnBrRmllbGRzLmxlbmd0aD5mKWZvcihsZXQgTT1mO008dGhpcy5wa0ZpZWxkcy5sZW5ndGg7TSsrKWZvcihsZXQgRD1mO0Q8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7RCsrKU08RCYmdGhpcy5wa0ZpZWxkc1tNXT09PXRoaXMucGtGaWVsZHNbRF0mJmgucHVzaChEKTtsZXQgdjtmb3Io'@;
put 'bGV0IE09MDtNPGgubGVuZ3RoO00rKylmb3IobGV0IEQ9MTtEPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtEKyspdj1hLmdldENlbGxNZXRhKGhbTV0sRCksdi52YWxpZD0hMSx2LmR1cEtleT0hMCxhLnJlbmRlcigpO3RoaXMuZHVwbGljYXRlUGtJbmRleGVzPVsuLi5uZXcgU2V0KGguc29ydCgp'@;
put 'KV19cmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyhhPSExLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtmb3IoY29uc3QgZiBvZiB0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCB2PWYudmFsdWVzLm1hcChNPT5NW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVF'@;
put 'XSk7aC5iYXRjaCgoKT0+e2NvbnN0IE09aC5nZXRDZWxsTWV0YShmLnJvdyxmLmNvbCksRD10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKE0uZGF0YXx8IiIpO2xldCBaO0QmJihaPXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UoRCkpLFp8fChaPVtdKTtjb25zdCBuZT1b'@;
put 'Li4ubmV3IFNldChbLi4uWiwuLi52XSldO3RoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZi5jb2wse3NvdXJjZTpuZX0pLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInNvdXJjZSIsbmUpLGYudmFsdWVzLmxlbmd0aD4wJiYoaC5zZXRDZWxsTWV0YShmLnJv'@;
put 'dyxmLmNvbCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwic3RyaWN0IixmLnN0cmljdCksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwi'@;
put 'ZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShmLmNvbCx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUuY3VzdG9tIixzdHJpY3Q6Zi5zdHJpY3QsZmlsdGVyOiExfSkpLHRoaXMucmVTZXRFeHRlbmRlZENl'@;
put 'bGxWYWxpZGF0aW9uVmFsdWVzKGYsdm9pZCAwLGEsZCksaC5yZW5kZXIoKX0pfX1yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoYSxkLGg9ITEsZil7aWYoYSl7ZHx8KGQ9YS5yb3cpO2NvbnN0IE09dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZhbHVlKGEpO3RoaXMuc2V0'@;
put 'RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxNLGgsZil9ZWxzZSBmb3IoY29uc3QgTSBvZiB0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCBEPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShNKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhNLE0ucm93LEQs'@;
put 'aCxmKX19c2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxoLGY9ITEsdil7Y29uc3QgTT10aGlzLmhvdEluc3RhbmNlLEQ9W107Zm9yKGNvbnN0IFogb2YgaClELmluZGV4T2YoWi5FWFRSQV9DT0xfTkFNRSk8MCYmRC5wdXNoKFouRVhUUkFfQ09MX05BTUUpO2Zvcihjb25zdCBaIG9mIEQp'@;
put 'e2NvbnN0IG5lPWguZmlsdGVyKGR0PT5kdC5FWFRSQV9DT0xfTkFNRT09PVopO2xldCBjZT1uZS5tYXAoZHQ9PiJDIj09PWR0LkRJU1BMQVlfVFlQRT9kdC5SQVdfVkFMVUVfQ0hBUjpkdC5SQVdfVkFMVUVfTlVNKTtjb25zdCBiZT1NLnByb3BUb0NvbChaKTt0aGlzLmRpc2FibGVkQmFzaWNE'@;
put 'eW5hbWljQ2VsbFZhbGlkYXRpb25NYXAuZmluZChkdD0+ZHQucm93PT09ZCYmZHQuY29sPT09YmUpfHx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAucHVzaCh7cm93OmQsY29sOmJlLGFjdGl2ZTohMX0pLE0uc2V0Q2VsbE1ldGEoZCxiZSwicmVuZGVyZXIiLCJh'@;
put 'dXRvY29tcGxldGUiKSxNLnNldENlbGxNZXRhKGQsYmUsImVkaXRvciIsImF1dG9jb21wbGV0ZS5jdXN0b20iKSxNLnNldENlbGxNZXRhKGQsYmUsInN0cmljdCIsYS5zdHJpY3QpLE0uc2V0Q2VsbE1ldGEoZCxiZSwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRv'@;
put 'cj8udXBkYXRlUnVsZShiZSx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUuY3VzdG9tIixzdHJpY3Q6YS5zdHJpY3QsZmlsdGVyOiExfSk7Y29uc3QgQmU9TS5nZXRDZWxsTWV0YShkLGJlKSxxZT10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEJlLmRhdGF8'@;
put 'fCIiKTtsZXQgcnQ7cWUmJihydD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKHFlKSkscnR8fChydD1bXSksIm51bWVyaWMiPT09cWU/LnR5cGU/KHJ0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMocnQsIm51bWJlciIpLGNlPXRoaXMuaGVscGVy'@;
put 'U2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoY2UsIm51bWJlciIpKToocnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhydCwic3RyaW5nIiksY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhjZSwic3RyaW5nIikpO2NvbnN0IHB0PVsuLi5u'@;
put 'ZXcgU2V0KFsuLi5ydCwuLi5jZV0pXTtpZihNLnNldENlbGxNZXRhKGQsYmUsInNvdXJjZSIscHQpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoYmUse3NvdXJjZTpwdH0pLGYpe2lmKHYmJnYhPT1kKXJldHVybjtjb25zdCBkdD1uZS5maW5kKEp0PT4xPT09'@;
put 'SnQuRk9SQ0VfRkxBRyk7ZHQmJnNldFRpbWVvdXQoKCk9PntNLnNldERhdGFBdENlbGwoZCxiZSwiQyI9PT1kdC5ESVNQTEFZX1RZUEU/ZHQuUkFXX1ZBTFVFX0NIQVI6ZHQuUkFXX1ZBTFVFX05VTSwiZm9yY2VfY2VsbF92YWxpZGF0aW9uX3ZhbHVlIiksdGhpcy5jdXJyZW50RWRpdFJlY29y'@;
put 'ZEluZGV4PT09ZCYmKHRoaXMuZGF0YVNvdXJjZVt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXhdW1pdPSJDIj09PWR0LkRJU1BMQVlfVFlQRT9kdC5SQVdfVkFMVUVfQ0hBUjpkdC5SQVdfVkFMVUVfTlVNKX0pfX19Z2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShhLGQpe2NvbnN0IGY9'@;
put 'dGhpcy5ob3RJbnN0YW5jZS5nZXREYXRhQXRDZWxsKGR8fGEucm93LGEuY29sKSx2PShhLnZhbHVlcy5maW5kKG5lPT5uZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV09PT1mKXx8W10pW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuRElTUExBWV9JTkRFWF0sTT1hLmV4'@;
put 'dGVuZGVkX3ZhbHVlcz8uZmlsdGVyKG5lPT5uZVswXT09PXYpLEQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRpb25GaWVsZHMpLFo9W107Zm9yKGNvbnN0IG5lIG9mIE18fFtdKXtjb25zdCBjZT17fTtmb3IoY29uc3QgYmUgb2YgT2JqZWN0'@;
put 'LmtleXMoRCkpY2VbYmVdPW5lW0RbYmVdXTtaLnB1c2goY2UpfXJldHVybiBafWNoZWNrU2F2ZSgpe2lmKHRoaXMuZ2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpLDA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c1VwZGF0ZWQmJjA9PT10aGlz'@;
put 'LnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkKXJldHVybiB0aGlzLmJhZEVkaXRUaXRsZT0iTm8gY2hhbmdlcyB0byBzdWJtaXQiLHRoaXMuYmFkRWRpdENhdXNlPSJQbGVhc2UgbW9kaWZ5IHNvbWUgdmFsdWVzIGFuZCB0cnkgYWdhaW4uIix2b2lkKHRoaXMuYmFkRWRpdD0hMCk7Y29uc3QgYT10'@;
put 'aGlzLmhvdEluc3RhbmNlO3RoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSk7Zm9yKGxldCBoPTA7aDx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2grKylkZWxldGUgdGhpcy5kYXRhU291cmNlW2hdLm5vTGlua09w'@;
put 'dGlvbjthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oaCxmKXtyZXR1cm4gaD41MDA/NTAwOmh9fSwhMSksdGhpcy5yZVNl'@;
put 'dENlbGxWYWxpZGF0aW9uVmFsdWVzKCksYy5jbnQ9MCxjLm5vblBrQ250PTA7Y29uc3QgZD1hLmdldERhdGEoKTtpZihkLmxlbmd0aD4xJiZhLmlzRW1wdHlSb3coZC5sZW5ndGgtMSkmJmEuYWx0ZXIoInJlbW92ZV9yb3ciLGQubGVuZ3RoLTEpLHRoaXMudmFsaWRhdGVQcmltYXJ5S2V5cygp'@;
put 'LDAhPT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIHRoaXMucGtEdXBzPSEwLHRoaXMuc3VibWl0PSExLHZvaWQgdGhpcy5jYW5jZWxTdWJtaXQoKTt0aGlzLnBrRHVwcz0hMSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcywoKT0+e3RoaXMuY2hl'@;
put 'Y2tJbnZhbGlkKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50Iik6KHRoaXMuc3VibWl0PSEwLHRoaXMudmFsaWRhdGlvbkRvbmU9MSxzZXRUaW1lb3V0KCgpPT57Y29uc3QgaD1kb2N1bWVudC5n'@;
put 'ZXRFbGVtZW50QnlJZCgiZm9ybUZpZWxkc184Iik7aCYmaC5mb2N1cygpfSwyMDApKX0pfXNhdmVUYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihkLmhvdEluc3RhbmNlLmdldERhdGEoKSxhPShhPWEuZmlsdGVyKHY9PiEhZC5kYXRhTW9kaWZpZWQuZmluZChE'@;
put 'PT57Zm9yKGNvbnN0IFogb2YgZC5oZWFkZXJQa3MpaWYoRFtaXSE9PXZbWl0pcmV0dXJuITE7cmV0dXJuITB9KSkpLm1hcCh2PT57Y29uc3QgTT12Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXztyZXR1cm4gZGVsZXRlIHYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fLHYu'@;
put 'X19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPU0sT2JqZWN0LmtleXModikubWFwKEQ9PnsibnVtZXJpYyI9PT1kLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEQpPy50eXBlJiYiLiI9PT12W0RdJiYodltEXT1udWxsKX0pLHZ9KSxkLmxvZ2dlclNlcnZpY2UubG9nKCJEYXRhIHN1Ym1pdHRl'@;
put 'ZCIsYSksZC5jaGVja0ludmFsaWQoKSlyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50IiksZC5jYW5jZWxTdWJtaXQoKSx2b2lkKGQuc3VibWl0PSExKTtpZihkLnZhbGlkYXRpb25Eb25lPTAs'@;
put 'ZC5zYXZlTG9hZGluZz0hMCxjLmNudDwxJiYwPT09ZC5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoJiZjLm5vblBrQ250PDEpe2Quc2F2ZUxvYWRpbmc9ITAsZC5kaXNhYmxlU3VibWl0PSExLGQuc3VibWl0PSEwO2NvbnN0IHY9e0FDVElPTjoiTE9BRCJ9O2lmKGQubWVzc2FnZT1kLm1lc3Nh'@;
put 'Z2UucmVwbGFjZSgvXG4vZywiLiAiKSx2Lk1FU1NBR0U9ZC5tZXNzYWdlLHYuTElCRFM9ZC5saWJkcyxkLmNvbHMpe2NvbnN0IE09YS5zbGljZSgwLGQubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtpZih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVUYWJsZSh2'@;
put 'LE0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixkLiRkYXRhRm9ybWF0cykudGhlbihaPT57aWYodHlwZW9mIFouYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtczwidSIpcmV0dXJuIGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK1ouYWRhcHRlclJlc3BvbnNl'@;
put 'LnNhc3BhcmFtc1swXS5EU0lEKSwhMDtsZXQgbmU9IlN1Ym1pdCByZXF1ZXN0IGZhaWxlZCI7WiYmKG5lKz1gXG4keyJzdHJpbmciPT10eXBlb2YgWj9aOkpTT04uc3RyaW5naWZ5KFopfWApLGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0YWdlZGF0YSIsbmUsbnVs'@;
put 'bCwiU3VibWl0IGVycm9yIil9KS5jYXRjaChaPT57Y29uc29sZS5sb2coImVyciIsWiksYy5jbnQ9MCxjLm5vblBrQ250PTAsZC5kaXNhYmxlU3VibWl0PSEwLGQuc3VibWl0PSExO2NvbnN0IG5lPSJzdHJpbmciPT10eXBlb2YgWi5hZGFwdGVyUmVzcG5zZT9aLmFkYXB0ZXJSZXNwbnNlOkpT'@;
put 'T04uc3RyaW5naWZ5KFouYWRhcHRlclJlc3Buc2UpO3JldHVybiBkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLGBTdWJtaXQgcmVxdWVzdCBmYWlsZWRcbiR7bmV9YCxudWxsLCJTdWJtaXQgZXJyb3IiKSwhMX0pKXJldHVybn19Yy5jbnQ+PTE/KGQu'@;
put 'cGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxjLm5vblBrQ250Pj0xPyhkLm5vUGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxkLmNhbmNlbFN1Ym1pdCgpLGMuY250PTAsYy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMH0pKCl9dmFsaWRhdG9yUnVsZVNv'@;
put 'dXJjZShhKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShhKX1jaGVja0ludmFsaWQoKXtyZXR1cm4gdGhpcy5ob3RJbnN0YW5jZUNvbXBMaXN0LmZpcnN0LmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5odEludmFsaWQiKS5sZW5ndGg+MH1nb1Rv'@;
put 'RWRpdG9yKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpfWNsb3NlUmVjb3JkRWRpdChhKXt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDAsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj12b2lkIDAsIkFERCI9'@;
put 'PT10aGlzLnJlY29yZEFjdGlvbiYmIWEmJih0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLnByZXZEYXRhU291cmNlKSx0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpKX1jb25maXJtUmVjb3Jk'@;
put 'RWRpdChhPSEwKXtjb25zdCBkPXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleDthJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xKSx0aGlzLmNvbHVtbkhlYWRlci5tYXAoZj0+e2NvbnN0IHY9dGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXSxNPSJudW0iPT09dGhpcy4kZGF0YUZv'@;
put 'cm1hdHM/LnZhcnNbZl0/LnR5cGUsRD0oMCxLZy5pc1NwZWNpYWxNaXNzaW5nKSh2KTtNJiYhaXNOYU4odikmJiFEJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXT0xKnYpfSksdGhpcy5kYXRhU291cmNlW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RUYWJsZS5kYXRhW2Rd'@;
put 'PXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDApfW9uTmV4dFJlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVkaXQoITEpLHRoaXMu'@;
put 'Y3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMT8wOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCsxLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCl9b25QcmV2'@;
put 'aW91c1JlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg8PTA/dGhpcy5kYXRhU291cmNlLmxlbmd0aC0xOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleC0xLHRoaXMuZWRpdFJl'@;
put 'Y29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCl9YWRkUmVjb3JkQnV0dG9uQ2xpY2soKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkFkZCBSZWNvcmQiKTp0aGlzLmFkZEVkaXROZXdS'@;
put 'ZWNvcmQoKX1hZGRFZGl0TmV3UmVjb3JkKCl7dGhpcy5hZGRSZWNvcmQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKX0sMWUzKX1hZGRSZWNvcmQoKXt0aGlzLmFkZFJvdygpfWVkaXRSZWNvcmQoYSxkLGgpe2lmKHRo'@;
put 'aXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCl0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkVkaXQgUmVjb3JkIik7ZWxzZSBpZighKHZvaWQgMD09PWR8fGQ8MHx8dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3JkKSl7aWYodGhpcy5yZWNv'@;
put 'cmRBY3Rpb249aD8iQUREIjoiRURJVCIsdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoITEsaCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGNWYWxpZGF0b3IpLGgpdGhpcy5wcmV2RGF0YVNv'@;
put 'dXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5wcmV2RGF0YVNvdXJjZS5wb3AoKTtlbHNle2NvbnN0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmhvdEluc3RhbmNlLmdldENlbGxNZXRhQXRSb3coZCkpO2Zvcihjb25z'@;
put 'dCB2IG9mIGYpaWYodil7Y29uc3QgTT12LnByb3A/LnRvU3RyaW5nKCk7ZGVsZXRlIHYucHJvcCxkZWxldGUgdi5kYXRhLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUodi5jb2wsey4uLnYsZGF0YTpNfSl9fXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD1k'@;
put 'LHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZF0pfX10b2dnbGVIb3RQbHVnaW4oYSxkKXtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aC5iYXRjaCgoKT0+e2NvbnN0IGY9aC5nZXRQbHVnaW4oYSk7Zj8oc2V0VGlt'@;
put 'ZW91dCgoKT0+e2Q/Zi5lbmFibGVQbHVnaW4oKTpmLmRpc2FibGVQbHVnaW4oKX0sMTAwKSxoLnJlbmRlcigpKTpjb25zb2xlLndhcm4oIlRvZ2dsZSBIb3QgUGx1Z2luIGZhaWxlZCAtIFBsdWdpbiBuYW1lZDogIithKyIgLSBjb3VsZCBub3QgYmUgZm91bmQuIil9KX1keW5hbWljQ2VsbFZh'@;
put 'bGlkYXRpb25EaXNhYmxlZChhLGQpe3JldHVybiEhdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoZj0+Zi5yb3c9PT1hJiZmLmNvbD09PWQmJiFmLmFjdGl2ZSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9uKGEsZCl7aWYodGhpcy5keW5hbWljQ2VsbFZhbGlk'@;
put 'YXRpb25EaXNhYmxlZChhLGQpKXJldHVybjtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aWYoaC5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KXJldHVybjtjb25zdCB2PWguZ2V0RGF0YUF0Q2VsbChhLGQpLE09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2Vb'@;
put 'YV0pLEQ9T2JqZWN0LmtleXMoTSlbZF0sWj10aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2goTSxbRCwibm9MaW5rT3B0aW9uIl0sITEpLG5lPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KGNlPT5jZS5oYXNoPT09Wik7aWYobmU+LTEpe2xldCBjZT10aGlz'@;
put 'LmNlbGxWYWxpZGF0aW9uU291cmNlW25lXS52YWx1ZXMubWFwKEJlPT5CZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2NvbnN0IGJlPShoLmdldENlbGxNZXRhKGEsZCkuc291cmNlfHxbXSkubGVuZ3RoPDEsRWU9IiAiIT09djtoLmJhdGNoKCgpPT57Y29uc3QgQmU9'@;
put 'aC5nZXRDZWxsTWV0YShhLGQpLHFlPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoQmUuZGF0YXx8IiIpO2xldCBydDtxZSYmKHJ0PXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UocWUpKSxydHx8KHJ0PVtdKSwibnVtZXJpYyI9PT1xZT8udHlwZT8ocnQ9dGhpcy5oZWxw'@;
put 'ZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhydCwibnVtYmVyIiksY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhjZSwibnVtYmVyIikpOihydD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHJ0LCJzdHJpbmciKSxjZT10aGlzLmhlbHBl'@;
put 'clNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKGNlLCJzdHJpbmciKSk7Y29uc3QgcHQ9Wy4uLm5ldyBTZXQoWy4uLnJ0LC4uLmNlXSldO2lmKGguc2V0Q2VsbE1ldGEoYSxkLCJzb3VyY2UiLHB0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3NvdXJj'@;
put 'ZTpwdH0pLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbbmVdLnZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgZHQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtuZV0uc3RyaWN0O2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoYSxkLCJl'@;
put 'ZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksaC5zZXRDZWxsTWV0YShhLGQsInN0cmljdCIsZHQpLGguc2V0Q2VsbE1ldGEoYSxkLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3JlbmRlcmVyOiJhdXRvY29tcGxldGUiLGVk'@;
put 'aXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0OmR0LGZpbHRlcjohMX0pfXRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbbmVdLGEsYmUmJkVlKSxoLnJlbmRlcigpfSl9aWYobmU8MCl7Y29uc3QgY2U9e1NBU0Nv'@;
put 'bnRyb2xUYWJsZTpbe2xpYmRzOnRoaXMubGliZHMsdmFyaWFibGVfbm06RH1dLHNvdXJjZV9yb3c6W01dfSxiZT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURldGFpbHMoRCkuZmluZChFZT0+IlNPRlRTRUxFQ1RfSE9PSyI9PT1FZS5SVUxFX1RZUEV8fCJIQVJEU0VMRUNUX0hPT0siPT09RWUu'@;
put 'UlVMRV9UWVBFKTtiZSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucHVzaCh7cm93OmEsY29sOmQsc3RyaWN0OiJIQVJEU0VMRUNUX0hPT0siPT09YmUuUlVMRV9UWVBFLHZhbHVlczpbXSxoYXNoOlosY291bnQ6dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5sZW5ndGgrMX0pLGguc2V0'@;
put 'Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsTTV0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MucHVzaChkKSxoLnJlbmRlcigpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldGR5bmFtaWNjb2x2YWxzIixjZSx2b2lkIDAse3N1cHByZXNzU3VjY2Vzc0Fib3J0TW9k'@;
put 'YWw6ITAsc3VwcHJlc3NFcnJvckFib3J0TW9kYWw6ITB9KS50aGVuKEVlPT57aWYoRWUuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfdmFsdWVzLm1hcChxZT0+cWVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKS5sZW5ndGg+MCl7Y29uc3QgcWU9dGhpcy5jZWxsVmFsaWRh'@;
put 'dGlvblNvdXJjZS5maW5kSW5kZXgocnQ9PnJ0Lmhhc2g9PT1aKTtxZT4tMSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcWVdPXsuLi50aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3FlXSxyb3c6YSxjb2w6ZCx2YWx1ZXM6RWUuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfdmFsdWVzLGV4'@;
put 'dGVuZGVkX3ZhbHVlczpFZS5hZGFwdGVyUmVzcG9uc2UuZHluYW1pY19leHRlbmRlZF92YWx1ZXN9KSxoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLHplZSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5k'@;
put 'ZXhPZihkKSwxKSxoLmRlc2VsZWN0Q2VsbCgpLGgucmVuZGVyKCksaC5iYXRjaCgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoITAsYSksaC5yZW5kZXIoKSxoLnZhbGlkYXRlUm93cyhbYV0pfSwxMDApfSl9aWYoaC5zZXRDZWxsTWV0YShhLGQs'@;
put 'InJlbmRlcmVyIix6ZWUpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksaC5kZXNlbGVjdENlbGwoKSxoLnJlbmRlcigpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UubGVuZ3RoPnRoaXMu'@;
put 'dmFsaWRhdGlvblRhYmxlTGltaXQpe2NvbnN0IHFlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucmVkdWNlKChwdCxkdCk9PnB0LmNvdW50PGR0LmNvdW50P3B0OmR0KSxydD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmluZGV4T2YocWUpO3RoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2Uu'@;
put 'c3BsaWNlKHJ0LDEpfX0pLmNhdGNoKEVlPT57Y29uc3QgQmU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgocWU9PnFlLmhhc2g9PT1aKTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZShCZSwxKSxoLmJhdGNoKCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRl'@;
put 'cmVyIixTNXQpLGgucmVuZGVyKCl9KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMucHVzaChkKSxzZXRUaW1lb3V0KCgpPT57aC5zZXRD'@;
put 'ZWxsTWV0YShhLGQsInJlbmRlcmVyIix6ZWUpLGgucmVuZGVyKCksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5pbmRleE9mKGQpLDEpfSwzZTMpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpLHRoaXMubG9n'@;
put 'Z2VyU2VydmljZS5sb2coImdldGR5bmFtaWNjb2x2YWxzIGVycm9yOiIsRWUpfSkpfX1jaGVja0VtcHR5Um93V2hlbkZpbHRlcigpe3RoaXMuemVyb0ZpbHRlclJvd3M9ITEsdHlwZW9mIHRoaXMuZmlsdGVyX3BrPCJ1IiYmMT09PXRoaXMuaG90VGFibGUuZGF0YS5sZW5ndGgmJltudWxsLCIi'@;
put 'XS5pbmNsdWRlcyh0aGlzLmhvdFRhYmxlLmRhdGFbMF1bdGhpcy5oZWFkZXJQa3NbMF1dKSYmKHRoaXMuemVyb0ZpbHRlclJvd3M9ITApfW9uUmVjb3JkSW5wdXRGb2N1cyhhKXt0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbih0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgsYS5jb2xOYW1l'@;
put 'KX1leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKGEsZCxoKXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWxldGVLZXlzQW5kSGFzaCh0aGlzLmRhdGFTb3VyY2VbaF0sW2EsIm5vTGlua09wdGlvbiJdKSx2PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmlu'@;
put 'ZChNPT5NLmhhc2g9PT1mJiZkPT09TS5jb2wpO2lmKHYmJnYuZXh0ZW5kZWRfdmFsdWVzJiZ2LmV4dGVuZGVkX3ZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgTT10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUodixoKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyh2LGgsTSwh'@;
put 'MCl9fWRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKGEpe3ZvaWQgMCE9PWEuTE9BRF9SRUYmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtgL3N0YWdlLyR7YS5MT0FEX1JFRn1gXSl9dmlld2JveE1hbmFnZXIoKXt0aGlzLnZpZXdib3hlcz0hMH1nZXQgdG90YWxSb3dzQ2hhbmdlZCgpe3JldHVy'@;
put 'biB0aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkK3RoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWR9c2V0Q2VsbEZpbHRlcihhKXtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKSxoPWQmJmRbMF07aWYoaCl7Y29uc3Qg'@;
put 'Zj1oWzBdLE09aFsxXTtpZihmPT09aFsyXSYmTT09PWhbM10pe2NvbnN0IFo9dGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YShmLE0pO1omJlouZmlsdGVyPT09IWEmJnRoaXMuaG90SW5zdGFuY2Uuc2V0Q2VsbE1ldGEoZixNLCJmaWx0ZXIiLGEpfX19bmdPbkluaXQoKXt2YXIgYT10aGlz'@;
put 'O3JldHVybiBlZShmdW5jdGlvbiooKXthLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoaD0+e2EuaG90VGFibGUubGljZW5zZUtleT1ofSksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGg9PntoLmxpYmRzPT09YS5saWJkcyYmKGEu'@;
put 'd2hlcmVTdHJpbmc9aC5zdHJpbmcsYS5jbGF1c2VzPWgub2JqKX0pO2NvbnN0IGQ9e307dHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSImJihhLmxpYmRzPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxhLmZpbHRlcl9waz1hLnJvdXRlLnNuYXBzaG90LnBh'@;
put 'cmFtcy5maWx0ZXJJZCwiZWRpdC1yZWNvcmQiPT09YS5yb3V0ZS5zbmFwc2hvdC51cmxbMF0ucGF0aCYmKGEucmVjb3JkQWN0aW9uPXR5cGVvZiBhLmZpbHRlcl9wazwidSI/IkVESVQiOiJBREQiKSxkLkxJQkRTPWEubGliZHMsdHlwZW9mIGEuZmlsdGVyX3BrPCJ1IiYmKGQuRklMVEVSX1JL'@;
put 'PXBhcnNlSW50KGEuZmlsdGVyX3BrKSksZC5PVVRERVNUPSJXRUIiLGEubGliZHMmJihLbi5lZGl0b3IubGlicmFyeT1hLmxpYmRzLnNwbGl0KCIuIilbMF0sS24uZWRpdG9yLnRhYmxlPWEubGliZHMuc3BsaXQoIi4iKVsxXSkpLGEubGliZHMmJihhLmdldGRhdGFFcnJvcj0hMSx5aWVsZCBh'@;
put 'LnNhc1N0b3JlU2VydmljZS5jYWxsU2VydmljZShkLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEiLGEubGliZHMpLnRoZW4oaD0+e2EuaW5pdFNldHVwKGgpfSkuY2F0Y2goaD0+e2EuZ2V0ZGF0YUVycm9yPSEwLGEudGFibGVUcnVlPSEwfSkpfSkoKX1uZ0FmdGVyVmlld0lu'@;
put 'aXQoKXt9aW5pdFNldHVwKGEpe2lmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuZ2V0ZGF0YUVycm9yfHwhYXx8IWEuZGF0YSlyZXR1cm47dGhpcy5jb2xzPWEuZGF0YS5jb2xzLHRoaXMuZHNtZXRhPWEuZGF0YS5k'@;
put 'c21ldGEsdGhpcy52ZXJzaW9ucz1hLmRhdGEudmVyc2lvbnN8fFtdO2NvbnN0IGQ9dGhpcy5kc21ldGEuZmluZChaPT4iTk9URVMiPT09Wi5OQU1FKSxoPXRoaXMuZHNtZXRhLmZpbmQoWj0+IkREX0xPTkdERVNDIj09PVouTkFNRSksZj10aGlzLmRzbWV0YS5maW5kKFo9PiJERF9TSE9SVERF'@;
put 'U0MiPT09Wi5OQU1FKTt0aGlzLmRzTm90ZT1kJiZkLlZBTFVFP2QuVkFMVUU6aCYmaC5WQUxVRT9oLlZBTFVFOmYmJmYuVkFMVUU/Zi5WQUxVRToiIjtjb25zdCB2PXRoaXMuaG90SW5zdGFuY2UsTT1hLmRhdGEuYXBwcm92ZXJzO3RoaXMuY29scyYmKHRoaXMuaGVhZGVyQXJyYXk9KGM9Pntj'@;
put 'b25zdCBsPVtdO2ZvcihsZXQgYSBvZiBjKSJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5OQU1FJiZsLnB1c2goYS5OQU1FKTtyZXR1cm4gbH0pKHRoaXMuY29scykpLE0uZm9yRWFjaChaPT57dGhpcy5hcHByb3ZlcnMucHVzaChaLlBFUlNPTk5BTUUpfSksdGhpcy50YWJs'@;
put 'ZVRydWU9ITAsdGhpcy5saWJkcz1hLmxpYmRzLHRoaXMuaG90VGFibGUuZGF0YT1hLmRhdGEuc2FzZGF0YSx0aGlzLmhlYWRlckNvbHVtbnM9YS5kYXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksdGhpcy5oZWFkZXJQa3M9YS5kYXRhLnNhc3BhcmFtc1swXS5QSy5zcGxp'@;
put 'dCgiICIpLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ISFhLmRhdGEuc2FzcGFyYW1zWzBdLkNMU19GTEFHLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWcmJnRoaXMuc2V0UmVzdHJpY3Rpb25zKHtyZXN0cmljdEFkZFJvdzohMCxyZW1vdmVFZGl0UmVjb3JkQnV0dG9uOiEwLHJl'@;
put 'bW92ZUFkZFJlY29yZEJ1dHRvbjohMH0pLHRoaXMuY2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKSwtMSE9PXRoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKHRoaXMuaGVhZGVyQ29sdW1uc1t0aGlzLmhlYWRlckNvbHVtbnMuaW5k'@;
put 'ZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksdGhpcy5oZWFkZXJBcnJheT10aGlzLmhlYWRlckNvbHVtbnMuc2xpY2UoMSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKHRoaXMuZGF0ZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1sw'@;
put 'XS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKHRoaXMudGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYodGhpcy5kYXRlVGltZUhlYWRl'@;
put 'cnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxhLmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJih0aGlzLnhsUnVsZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEueGxfcnVsZXMpKSx0aGlzLmRjVmFsaWRhdG9yPW5ldyBwNmUoYS5kYXRhLnNh'@;
put 'c3BhcmFtc1swXSxhLmRhdGEuJHNhc2RhdGEsdGhpcy5jb2xzLGEuZGF0YS5kcXJ1bGVzLGEuZGF0YS5kcWRhdGEpLHRoaXMuY2VsbFZhbGlkYXRpb249dGhpcy5kY1ZhbGlkYXRvci5nZXRSdWxlcygpLHRoaXMuZGF0YVNvdXJjZT1hLmRhdGEuc2FzZGF0YSx0aGlzLiRkYXRhRm9ybWF0cz1h'@;
put 'LmRhdGEuJHNhc2RhdGE7Zm9yKGxldCBaPTA7Wjx0aGlzLmhlYWRlckNvbHVtbnMubGVuZ3RoO1orKyl0aGlzLmhvdERhdGFTY2hlbWFbdGhpcy5jZWxsVmFsaWRhdGlvbltaXS5kYXRhXT13NXQodGhpcy5jZWxsVmFsaWRhdGlvbltaXS50eXBlLHRoaXMuY2VsbFZhbGlkYXRpb25bWl0pO3Ro'@;
put 'aXMuY2hlY2tSb3dMaW1pdCgpLHYudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsZm9ybXVsYXM6dGhpcy5ob3RUYWJs'@;
put 'ZS5mb3JtdWxhcyxzdHJldGNoSDoiYWxsIixyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGhpZGRlbkNvbHVtbnM6e2luZGljYXRvcnM6ITAsY29sdW1uczp0aGlzLmRjVmFsaWRhdG9yLmdldEhpZGRlbkNvbHVtbnMoKX0sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oWixuZSl7cmV0'@;
put 'dXJuIDA9PT1uZT82MDpaPjUwMD81MDA6Wn0sY29weVBhc3RlOnRoaXMuaG90VGFibGUuY29weVBhc3RlLG1hbnVhbENvbHVtbkZyZWV6ZTohMSxtdWx0aUNvbHVtblNvcnRpbmc6ITAsbWFudWFsQ29sdW1uUmVzaXplOiEwLGZpbHRlcnM6ITEsbWFudWFsUm93UmVzaXplOiEwLHZpZXdwb3J0'@;
put 'Um93UmVuZGVyaW5nT2Zmc2V0OjUwLHJvd0hlYWRlcnM6Wj0+IiAiLHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjQsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfHwxLzAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsZHJv'@;
put 'cGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9vbmx5In0sYWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KFosbmUsY2UsYmUsRWUsQmUpPT57Y29u'@;
put 'c3QgcWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBydCxwdD0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgZHQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxKdD1kdD9kdFswXVsxXTotMSx2bj10aGlzLmhvdEluc3RhbmNl'@;
put 'Py5jb2xUb1Byb3AoSnQpO3J0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW3ZuXSxydCYmKHB0PWBMQUJFTDogJHtydD8ubGFiZWx9PGJyPlRZUEU6ICR7cnQ/LnR5cGV9PGJyPkxFTkdUSDogJHtydD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7cnQ/LmZvcm1hdH1gKX1yZXR1cm4gcWUuaW5uZXJI'@;
put 'VE1MPXB0LHFlfX19fSxkYXRhU2NoZW1hOnRoaXMuaG90RGF0YVNjaGVtYSxjb250ZXh0TWVudTp0aGlzLmhvdFRhYmxlLnNldHRpbmdzLmNvbnRleHRNZW51LGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1c3RvbUgiLGFmdGVyR2V0Q29sSGVhZGVyOihaLG5lKT0+e2NvbnN0IGNlPXRoaXMu'@;
put 'Y29sdW1uSGVhZGVyW1pdLGJlPWNlJiZ0aGlzLmlzQ29sUGsoY2UpLEVlPWNlJiZ0aGlzLmlzUmVhZG9ubHlDb2woY2UpO2JlJiZuZS5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxFZSYmIWJlJiZuZS5jbGFzc0xpc3QuYWRkKCJyZWFkb25seUNlbGwiKSwwPT09WiYm'@;
put 'bmUuY2xhc3NMaXN0LmFkZCgiZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSIpLG5lLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sYWZ0ZXJHZXRDZWxsTWV0YTooWixuZSxjZSk9PntuZSYmdGhpcy5pc1JlYWRvbmx5Q29sKG5lKSYmKGNlLmNsYXNz'@;
put 'TmFtZT0icmVhZG9ubHlDZWxsIil9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEsdGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNvbHVtbkhlYWRlcj1hLmRhdGEuc2Fz'@;
put 'cGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclswXT0iRGVsZXRlPyIsdGhpcy5yZWFkT25seUZpZWxkcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05UO2NvbnN0IEQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvdEluc3RhbmNlIik7RCYmRC5hZGRF'@;
put 'dmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFo9Pnt0aGlzLnVwbG9hZFByZXZpZXd8fHRoaXMuaG90Q2xpY2tlZCgpLHNldFRpbWVvdXQoKCk9Pntjb25zdCBuZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO25lJiZuZS5jbGljaygpfSwxMDAp'@;
put 'fSksdi5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKFosbmUsY2UsYmUsRWUsQmUpPT57Wj09PWNlJiZuZT09PWJlJiYhMT09PXRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKFosbmUpfSksdi5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9'@;
put 'Pnt0aGlzLnNldENlbGxGaWx0ZXIoITEpfSksdi5hZGRIb29rKCJiZWZvcmVLZXlEb3duIiwoKT0+e3RoaXMuc2V0Q2VsbEZpbHRlcighMCl9KSx2LmFkZEhvb2soImFmdGVyQ2hhbmdlIiwoWixuZSk9PntpZigiZWRpdCI9PT1uZSl7Y29uc3QgY2U9dGhpcy5ob3RJbnN0YW5jZSxiZT1aWzBd'@;
put 'WzBdLEVlPVpbMF1bMV0sQmU9Y2UucHJvcFRvQ29sKEVlKSxxZT1jZS5nZXRDZWxsTWV0YShiZSxCZSk7cWUmJiExPT09cWUuZmlsdGVyJiZjZS5zZXRDZWxsTWV0YShiZSxCZSwiZmlsdGVyIiwhMCksdGhpcy5leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKEVlLEJl'@;
put 'LGJlKX19KSx2LmFkZEhvb2soImFmdGVyUmVuZGVyIixaPT57dGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSx2LmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoWixuZSk9PntpZihaPnRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpe2NvbnN0IGNlPWRvY3VtZW50LnF1'@;
put 'ZXJ5U2VsZWN0b3IoIi53dEhvbGRlciIpO3NldFRpbWVvdXQoKCk9PntjZSYmKGNlLnNjcm9sbFRvcD1jZS5zY3JvbGxIZWlnaHQpfSl9fSksdi5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsKFosbmUpPT57Y29uc3QgY2U9bmVbMF0uc3RhcnRDb2w7WlswXT1aWzBdLm1hcCgoYmUsRWUpPT57Y29u'@;
put 'c3QgQmU9dGhpcy5jb2x1bW5IZWFkZXJbY2UrRWVdLHFlPSJudW0iPT09dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbQmVdPy50eXBlLHJ0PSgwLEtnLmlzU3BlY2lhbE1pc3NpbmcpKGJlKTtyZXR1cm4gcWUmJiFpc05hTihiZSkmJiFydCYmKGJlKj0xKSxiZX0pfSksdi5hZGRIb29rKCJhZnRl'@;
put 'clJlbW92ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLHYuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSx0aGlzLnVwbG9hZFVybD0ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsbnVsbCE9PXRoaXMucmVjb3JkQWN0aW9uJiYo'@;
put 'IkFERCI9PT10aGlzLnJlY29yZEFjdGlvbj8odGhpcy5hZGRSZWNvcmQoKSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsITApKToxPT09dGhpcy5kYXRhU291cmNlLmxlbmd0aCYmdGhpcy5lZGl0UmVjb3JkKG51bGwsMCkpLGEuZGF0YS5xdWVyeS5sZW5n'@;
put 'dGg+MCYmKCJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0pJiYwPT09S24uZWRpdG9yLmZpbHRlci5jbGF1c2VzLmxlbmd0aCYmKEtuLmVkaXRvci5maWx0ZXIucXVlcnk9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEucXVlcnkpLEtuLmVk'@;
put 'aXRvci5maWx0ZXIubGliZHM9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoImVkaXRvciIsdGhpcy5jb2xzKSksdi5yZW5kZXIoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o'@;
put 'ZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh1MSksR2UodmMpLEdlKE1kKSxHZShaaCksR2UoWXUpLEdlKExzKSxHZShDdSksR2UodGwpLEdlKHhzKSxHZShXbSksR2UoUzZlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdG9yIl1dLHZpZXdR'@;
put 'dWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKG5hKFo4dCw3KSxuYShXOHQsNSksbmEoWTh0LDUpLG5hKEc4dCw1KSxuYSgkOHQsNSkpLDImZCl7bGV0IGY7eGkoZj1FaSgpKSYmKGguaHQ9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGgudXBsb2FkU3RhdGVyQ29tcExpc3Q9ZikseGkoZj1FaSgp'@;
put 'KSYmKGgucXVlcnlGaWx0ZXJDb21wTGlzdD1mKSx4aShmPUVpKCkpJiYoaC5ob3RJbnN0YW5jZUNvbXBMaXN0PWYpLHhpKGY9RWkoKSkmJihoLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PWYpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjE3Nyx2YXJzOjc0LGNv'@;
put 'bnN0czpbWyJodCIsIiJdLFsiaG90SW5zdGFuY2UiLCIiXSxbImZpbGVQYXNzd29yZElucHV0IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbInVwbG9hZFN0YXRlciIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbMSwiY29udGVudC1hcmVhIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1u'@;
put 'Il0sWyJhcHBGaWxlRHJvcCIsIiIsMSwicmVsYXRpdmUiLDMsImZpbGVPdmVyIiwiZmlsZURyb3AiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuIl0s'@;
put 'WzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiZHJvcC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiY2xyLXJvdyIsImNhcmQtYmxvY2siLCJtdC0xNSIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImNsci1jb2wtbWQtYXV0byJdLFsx'@;
put 'LCJlbmNvZGluZy1ibG9jayJdLFsiY2xySW5saW5lIiwiIiwxLCJtdC0wLWkiXSxbInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwidmFsdWUiLCJVVEYtOCIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsidHlwZSIsInJhZGlv'@;
put 'IiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIldMQVRJTjEiLCJuYW1lIiwiZW5jb2RpbmciLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0zIGZpbHRlckJ0biIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZWRpdEJ0'@;
put 'biIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtci0wIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xh'@;
put 'c3MiLCJleGNlbC1wYXJzaW5nIGNsci1jb2wtbWQtMTIiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWzMsImN1cnJlbnRSZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxp'@;
put 'ZGF0aW9uIiwiY3VycmVudFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVudFJlY29yZEVycm9ycyIsImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5l'@;
put 'eHRSZWNvcmQiLCJvblByZXZpb3VzUmVjb3JkIiw0LCJuZ0lmIl0sWzEsImNsci1mbGV4LTEiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJib3JkZXItMCIsImJveC1zaGFkb3ctbm9uZS1pIiwi'@;
put 'cG9zaXRpb24tcmVsYXRpdmUiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiLDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsxLCJjYXJkLWhlYWRlciIsImNsci1yb3ciLCJidXR0b25CYXIiLCJoZWFkZXJCYXIiLCJjbHItZmxleC1tZC1y'@;
put 'b3ciLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtbGctZW5kIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1tZC0zIGNsci1jb2wtbGctNCBiYWNrQnRuIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29sLW1kLTUiLCJjbHIt'@;
put 'Y29sLWxnLTQiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJlZGl0b3ItdGl0bGUgdGV4dC1jZW50ZXIgbXQtMC1pIiw0LCJuZ1ZhciJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wtbWQtNCBjbHItY29sLWxnLTQgYnRuQ3RybCIs'@;
put 'NCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsImNsci1mbGV4LTEiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsxLCJjYXJk'@;
put 'LXRleHQiLCJob3RFZGl0b3IiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiXSxbMSwiaG90LXdyYXBwZXIiLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0'@;
put 'RGFyayIsMSwiZWRpdC1ob3QiLDMsImxpY2Vuc2VLZXkiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtdC0yLWkgdy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm0t'@;
put 'MCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiZHVwbGljYXRlLWtleXMtbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNs'@;
put 'ck1vZGFsT3BlbiJdLFsiY2xhc3MiLCJkLWJsb2NrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vZGFsIHotaW5kZXgtaGlnaGVzdCIsNCwibmdJZiJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1v'@;
put 'ZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5'@;
put 'cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4t'@;
put 'b3V0bGluZSIsMywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siXSxbMSwi'@;
put 'bW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJkYXRhLWxwaWdub3JlIiwidHJ1ZSIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImlkIiwiZmlsZVBhc3N3b3JkSW5wdXQiLCJ0eXBlIiwidGV4dCIsMSwiY2xyLWlucHV0IiwiZGlzYWJsZS1wYXNzd29y'@;
put 'ZC1tYW5hZ2VyIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMywib3BlbkNoYW5nZSIsInJvd0NsaWNrZWQiLCJvcGVuIiwiZHNt'@;
put 'ZXRhIiwidmVyc2lvbnMiXSxbMywidmlld2JveE1vZGFsQ2hhbmdlIiwidmlld2JveE1vZGFsIl0sWzEsImNsci1jb2wtbWQtMyIsImZpbHRlckJ0biJdLFsxLCJmaWx0ZXJCdG4iLCJ3LTEwMCJdLFsiZm9yIiwiZmlsZS11cGxvYWQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwi'@;
put 'cHJvZmlsZS1idXR0b25zIiwidy0xMDAiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmlsZSIsImFwcEZpbGVTZWxlY3QiLCIiLDMsImNoYW5nZSIsInVwbG9hZGVyIl0sWzEsImNsci1jb2wtbWQtMyIsImVkaXRCdG4iXSxbMSwiYnRuVmlldyIsImJ0biIsImJ0'@;
put 'bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXItMCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRu'@;
put 'LXByaW1hcnkiLCJtci0wIiwzLCJjbGljayJdLFsxLCJleGNlbC1wYXJzaW5nIiwiY2xyLWNvbC1tZC0xMiJdLFszLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5leHRSZWNvcmQiLCJvblByZXZpb3VzUmVjb3JkIiwiY3Vy'@;
put 'cmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJjdXJyZW50UmVjb3JkRXJy'@;
put 'b3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29sLW1kLTMiLCJjbHItY29sLWxnLTQiLCJiYWNrQnRuIl0sWzEsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4t'@;
put 'aWNvbiIsImJ0bi1kaW1tZWQiLDMsInJvdXRlckxpbmsiXSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsInRleHQiXSxbMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWRpbW1lZCIsInZpZXdib3gtb3BlbiIsMywi'@;
put 'Y2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyIsInNpemUiLCIyMCJdLFsxLCJlZGl0b3ItdGl0bGUiLCJ0ZXh0LWNlbnRlciIsIm10LTAtaSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJzaGFwZSIsImluZm8tY2lyY2xlIiwiYXJpYS1sYWJlbCIsIlZpZXcgZGF0YXNldCBtZXRhIGlu'@;
put 'Zm8iLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3ciLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIl0sWzEsIm1yLTEwIiwidmlldy10YWJsZSIsMywicm91'@;
put 'dGVyTGluayJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsxLCJjbHItY29sLTEyIiwi'@;
put 'Y2xyLWNvbC1tZC00IiwiY2xyLWNvbC1sZy00IiwiYnRuQ3RybCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuVmlldyIsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1ibG9jayIsImJ0bi1kaW1tZWQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbHRlciJd'@;
put 'LFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsic2hhcGUiLCJub3RlIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gaWNvbi1jb2xsYXBzZSBidG4tc20gYnRuLXN1Y2Nl'@;
put 'c3MgYnRuLWJsb2NrIG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQiXSxbInR5cGUiLCJidXR0'@;
put 'b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siLCJj'@;
put 'bHJMb2FkaW5nIl0sWyJzaGFwZSIsInBsdXMiLCJzaXplIiwiMTYiXSxbInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGlj'@;
put 'ayJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInByZXZpZXctc3VibWl0IiwzLCJjbGlj'@;
put 'ayIsImNsckxvYWRpbmciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsxLCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJjYXJkLXRleHQiXSxbMSwiaC03MHZoIiwiZC1mbGV4Iiwi'@;
put 'anVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbMSwibXQtMTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsMSwiZXJyb3ItaWNvbiJdLFsiY2xyVG9vbHRpcFRy'@;
put 'aWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsIm10LTUtaSIsMywiY2xpY2siXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xy'@;
put 'U2l6ZSIsImxnIl0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwibW9kYWwiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyIsIm1vZGFsLWxnIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0s'@;
put 'WyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsiY2xhc3MiLCJkLWJsb2NrIHctMTAwIHRleHQtY2VudGVyIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItb2Zmc2V0'@;
put 'LW1kLTIgY2xyLWNvbC1tZC04Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsImp1c3RpZnktY29udGVudC1jZW50ZXItaSJdLFsiaWQiLCJzdWJtaXRCdG4iLCJ0eXBlIiwic3VibWl0IiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwi'@;
put 'bS0wIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJpZCIsImNhbmNlbFN1Ym1pdEJ0biIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJkLWJsb2NrIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciIsImNvbG9y'@;
put 'LXJlZCJdLFsxLCJjbHItb2Zmc2V0LW1kLTIiLCJjbHItY29sLW1kLTgiXSxbMSwidGV4dC1hcmVhLWZ1bGwtd2lkdGgiXSxbImZvciIsImZvcm1GaWVsZHNfOCIsMSwibWItNSIsImQtYmxvY2siXSxbImNsclRleHRhcmVhIiwiIiwidGFiaW5kZXgiLCIwIiwidHlwZSIsInRleHQiLCJpZCIs'@;
put 'ImZvcm1GaWVsZHNfOCIsMSwic3VibWl0LXJlYXNvbiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCIsInZhbHVlIl0sWzEsImQtYmxvY2siXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEs'@;
put 'Im1vZGFsLWRpYWxvZyJdLFsxLCJtLTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJkaXYiLDYpKDEsImNsci1tb2RhbCIsNyksRnQoImZpbGVPdmVyIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5maWxlT3Zl'@;
put 'ckJhc2UoTSkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5hdHRhY2hGaWxlKE0sITApKX0pLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxiaShoLnNob3dVcGxvYWRNb2RhbCxNKXx8KGguc2hvd1VwbG9hZE1vZGFs'@;
put 'PU0pLEN0KE0pfSksZGUoMiwiaDMiLDgpLExlKDMsIlVwbG9hZCBGaWxlIiksaGUoKSxkZSg0LCJkaXYiLDkpKDUsImRpdiIsMTApKDYsInNwYW4iKSxMZSg3LCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLGhlKCkoKSxkZSg4LCJkaXYiLDExKSg5LCJkaXYiLDEyKSgxMCwiZGl2'@;
put 'IiwxMykoMTEsImRpdiIsMTQpKDEyLCJjbHItcmFkaW8tY29udGFpbmVyIiwxNSkoMTMsImNsci1yYWRpby13cmFwcGVyIikoMTQsImlucHV0IiwxNiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxiaShoLmVuY29kaW5nLE0pfHwoaC5lbmNvZGluZz1NKSxD'@;
put 'dChNKX0pLGhlKCksZGUoMTUsImxhYmVsIiksTGUoMTYsIlVURi04IiksaGUoKSgpLGRlKDE3LCJjbHItcmFkaW8td3JhcHBlciIpKDE4LCJpbnB1dCIsMTcpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksYmkoaC5lbmNvZGluZyxNKXx8KGguZW5jb2Rpbmc9'@;
put 'TSksQ3QoTSl9KSxoZSgpLGRlKDE5LCJsYWJlbCIpLExlKDIwLCJXTEFUSU4xIiksaGUoKSgpKCkoKSgpLG10KDIxLEo4dCw2LDEsImRpdiIsMTgpKDIyLFE4dCwzLDEsImRpdiIsMTkpLGRlKDIzLCJkaXYiLDEzKSxtdCgyNCxlN3QsMiwxLCJidXR0b24iLDIwKSgyNSx0N3QsMiwwLCJidXR0'@;
put 'b24iLDIxKSxoZSgpLG10KDI2LG43dCwzLDAsImRpdiIsMjIpLGhlKCkoKSgpLEd0KDI3LCJkaXYiLDIzKSxoZSgpLG10KDI4LHI3dCwxLDEyLCJhcHAtZWRpdC1yZWNvcmQiLDI0KSxkZSgyOSwiZGl2IiwyNSwwKSxtdCgzMSxpN3QsMiwwLCJkaXYiLDI2KSxkZSgzMiwiZGl2IiwyNyksRnQo'@;
put 'ImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5vblNob3dVcGxvYWRNb2RhbCgpKX0pLGRlKDMzLCJkaXYiLDI4KSxtdCgzNCxvN3QsOSwyLCJkaXYiLDI5KSxkZSgzNSwiZGl2IiwzMCksbXQoMzYsaDd0LDEwLDYsImg0IiwzMSksaGUoKSxtdCgzNyxfN3Qs'@;
put 'NCwzLCJkaXYiLDMyKSgzOCx3N3QsNSwxLCJkaXYiLDMzKSxoZSgpLGRlKDM5LCJkaXYiLDM0KSxtdCg0MCxNN3QsNCwyLCJkaXYiLDM1KSxkZSg0MSwiZGl2IiwzNikoNDIsImRpdiIsMzcpLEd0KDQzLCJob3QtdGFibGUiLDM4LDEpLGhlKCksZGUoNDUsImRpdiIpLG10KDQ2LFQ3dCw1LDIs'@;
put 'ImNsci10b29sdGlwIiwzOSkoNDcsQTd0LDMsMSwicCIsNDApLGhlKCksbXQoNDgsSTd0LDE2LDYsImRpdiIsNDEpLGRlKDQ5LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksYmkoaC5zdWJtaXRMaW1pdE5vdGljZSxNKXx8'@;
put 'KGguc3VibWl0TGltaXROb3RpY2U9TSksQ3QoTSl9KSxkZSg1MCwiaDMiLDgpLExlKDUxLCJOb3RpY2UiKSxoZSgpLGRlKDUyLCJkaXYiLDkpKDUzLCJwIiw0MyksTGUoNTQpLGhlKCkoKSxkZSg1NSwiZGl2IiwyMykoNTYsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gd3QoZiksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxMZSg1NywiIENhbmNlbCAiKSxoZSgpLGRlKDU4LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgudXBsb2FkUGFyc2VkRmlsZXMoKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0p'@;
put 'LExlKDU5LCIgU3VibWl0ICIpLGhlKCkoKSgpLGRlKDYwLCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksYmkoaC5iYWRFZGl0LE0pfHwoaC5iYWRFZGl0PU0pLEN0KE0pfSksZGUoNjEsImgzIiw4KSxMZSg2MiksaGUoKSxk'@;
put 'ZSg2MywiZGl2Iiw5KSg2NCwicCIpLExlKDY1KSxoZSgpKCksZGUoNjYsImRpdiIsMjMpKDY3LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguYmFkRWRpdD0hMSl9KSxMZSg2OCwiIE9rICIpLGhlKCkoKSgpLGRlKDY5LCJjbHItbW9kYWwiLDQy'@;
put 'KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksYmkoaC5wa051bGwsTSl8fChoLnBrTnVsbD1NKSxDdChNKX0pLGRlKDcwLCJoMyIsOCksTGUoNzEsIkVycm9yIiksaGUoKSxkZSg3MiwiZGl2Iiw5KSg3MywicCIpLExlKDc0LCIgTnVsbCB2YWx1ZXMg'@;
put 'b3IgaW5jb3JyZWN0IGRhdGEgdHlwZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSxoZSgpKCksZGUoNzUsImRpdiIsMjMpKDc2LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgucGtOdWxsPSExLEN0KGguYmFk'@;
put 'RWRpdD0hMSl9KSxMZSg3NywiIE9rICIpLGhlKCkoKSgpLGRlKDc4LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksYmkoaC5ub1BrTnVsbCxNKXx8KGgubm9Qa051bGw9TSksQ3QoTSl9KSxkZSg3OSwiaDMiLDgpLExlKDgw'@;
put 'LCJFcnJvciIpLGhlKCksZGUoODEsImRpdiIsOSkoODIsInAiKSxMZSg4MywiSW5jb3JyZWN0IGRhdGEgdHlwZXMgaW4gbm9uLVByaW1hcnkgS2V5IGNvbHVtbnMiKSxoZSgpKCksZGUoODQsImRpdiIsMjMpKDg1LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0'@;
put 'KGYpLGgubm9Qa051bGw9ITEsQ3QoaC5iYWRFZGl0PSExKX0pLExlKDg2LCIgT2sgIiksaGUoKSgpKCksZGUoODcsImNsci1tb2RhbCIsNDYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxiaShoLnBrRHVwcyxNKXx8KGgucGtEdXBzPU0pLEN0KE0p'@;
put 'fSksZGUoODgsImgzIiw4KSxMZSg4OSwiRXJyb3IiKSxoZSgpLGRlKDkwLCJkaXYiLDkpKDkxLCJwIiksTGUoOTIsIiBEdXBsaWNhdGUgdmFsdWVzIGNhbm5vdCBiZSBzdWJtaXR0ZWQgZm9yIFByaW1hcnkgS2V5IGNvbHVtbnMgIiksaGUoKSxkZSg5MywicCIpLExlKDk0LCJEdXBsaWNhdGVz'@;
put 'IGZvdW5kOiIpLGhlKCksbXQoOTUsUjd0LDMsNCwic3BhbiIsNDcpLGhlKCksZGUoOTYsImRpdiIsMjMpKDk3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucGtEdXBzPSExKX0pLExlKDk4LCIgT2sgIiksaGUoKSgpKCksZGUoOTksImNsci1t'@;
put 'b2RhbCIsNDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxiaShoLnRvb0xvbmcsTSl8fChoLnRvb0xvbmc9TSksQ3QoTSl9KSxkZSgxMDAsImgzIiw4KSxMZSgxMDEsIkVycm9yIiksaGUoKSxkZSgxMDIsImRpdiIsOSkoMTAzLCJwIiksTGUoMTA0'@;
put 'LCIgVGhlIGZvbGxvd2luZyBjb2x1bW5zIGhhdmUgdmFsdWVzIHRoYXQgZXhjZWVkIGxlbmd0aCBsaW1pdHM6ICIpLGhlKCksbXQoMTA1LEw3dCwyLDMsInAiLDQ4KSxoZSgpLGRlKDEwNiwiZGl2IiwyMykoMTA3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0'@;
put 'KGYpLGgudG9vTG9uZz0hMSxDdChoLmNsZWFuRXhjZWVkKCkpfSksTGUoMTA4LCIgT2sgIiksaGUoKSgpKCkoKSgpKCkoKSgpLG10KDEwOSxPN3QsMTQsMCwiZGl2Iiw0OSksZGUoMTEwLCJjbHItbW9kYWwiLDUwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4g'@;
put 'd3QoZiksYmkoaC5maWx0ZXIsTSl8fChoLmZpbHRlcj1NKSxDdChNKX0pLGRlKDExMSwiaDMiLDUxKSxMZSgxMTIsIiBGaWx0ZXIgZm9yIHRhYmxlOiAiKSxkZSgxMTMsInNwYW4iKSxMZSgxMTQpLGhlKCkoKSxkZSgxMTUsImRpdiIsOSksbXQoMTE2LFA3dCwyLDAsImFwcC1xdWVyeSIsMzkp'@;
put 'LGhlKCksZGUoMTE3LCJkaXYiLDIzKSgxMTgsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNldEZpbHRlcigpKX0pLExlKDExOSwiIHJlc2V0IGZpbHRlciAiKSxoZSgpLGRlKDEyMCwiYnV0dG9uIiw1MyksRnQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiB3dChmKSxDdChoLmZpbHRlcj0hMSl9KSxMZSgxMjEsIiBDYW5jZWwgIiksaGUoKSxkZSgxMjIsImJ1dHRvbiIsNTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zZW5kQ2xhdXNlKCkpfSksTGUoMTIzLCIgT2sgIiksaGUoKSgpKCksZGUoMTI0'@;
put 'LCJjbHItbW9kYWwiLDQyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksYmkoaC5xdWVyeUVycixNKXx8KGgucXVlcnlFcnI9TSksQ3QoTSl9KSxkZSgxMjUsImgzIiw4KSxMZSgxMjYsIkVycm9yIiksaGUoKSxkZSgxMjcsImRpdiIsOSkoMTI4LCJw'@;
put 'IiksTGUoMTI5KSxoZSgpKCksZGUoMTMwLCJkaXYiLDIzKSgxMzEsImJ1dHRvbiIsNTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxMZSgxMzIsIiBDYW5jZWwgIiksaGUoKSxkZSgxMzMsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxMZSgxMzQsIiBPayAiKSxoZSgpKCkoKSxkZSgxMzUsImNsci1tb2RhbCIsNTYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxiaShoLmRpc2NhcmRTb3VyY2VGaWxlLE0pfHwo'@;
put 'aC5kaXNjYXJkU291cmNlRmlsZT1NKSxDdChNKX0pLGRlKDEzNiwiaDMiLDUxKSxMZSgxMzcsIldhcm5pbmciKSxoZSgpLGRlKDEzOCwiZGl2Iiw5KSxMZSgxMzksIiBUaGlzIGFjdGlvbiB3aWxsIGRpc2NhcmQgdGhlIHNvdXJjZSBmaWxlIGFuZCBpdCdzIGxvYWRlZCBkYXRhICIpLGRlKDE0'@;
put 'MCwiYiIpLExlKDE0MSksaGUoKSxMZSgxNDIsIiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSxoZSgpLGRlKDE0MywiZGl2IiwyMykoMTQ0LCJidXR0b24iLDUzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguZGlzY2FyZFNvdXJjZUZpbGU9ITEpfSksTGUoMTQ1'@;
put 'LCIgQ2FuY2VsICIpLGhlKCksZGUoMTQ2LCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguZGlzY2FyZFNvdXJjZUZpbGU9ITEsQ3QoaC5kaXNjYXJkUGVuZGluZ0V4Y2VsKCEwKSl9KSxMZSgxNDcsIiBPayAiKSxoZSgpKCkoKSxkZSgxNDgsImNsci1t'@;
put 'b2RhbCIsNTYpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxiaShoLmZpbGVQYXNzd29yZE1vZGFsLE0pfHwoaC5maWxlUGFzc3dvcmRNb2RhbD1NKSxDdChNKX0pLGRlKDE0OSwiaDMiLDUxKSxMZSgxNTAsIiBQYXNzd29yZCBQcm90ZWN0ZWQgRmls'@;
put 'ZSAiKSxoZSgpLGRlKDE1MSwiZGl2Iiw1OCkoMTUyLCJwIiw0MyksTGUoMTUzLCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksaGUoKSxHdCgxNTQsImlucHV0Iiw1OSwyKSxoZSgpLGRlKDE1NiwiZGl2IiwyMyksbXQoMTU3LEY3dCwyLDAsInAiLDYwKSxkZSgxNTgsImJ1dHRvbiIsNTMpLEZ0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5maWxlUGFzc3dvcmRNb2RhbD0hMSxDdChoLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dCh2b2lkIDApKX0pLExlKDE1OSwiIENhbmNlbCB1cGxvYWQgIiksaGUoKSxkZSgxNjAsImJ1dHRvbiIsNjEpLEZ0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXt3dChmKTtjb25zdCBNPXZvKDE1NSk7cmV0dXJuIGguZmlsZVBhc3N3b3JkTW9kYWw9ITEsQ3QoaC5maWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQoTS52YWx1ZSkpfSksTGUoMTYxLCIgVW5sb2NrICIpLGhlKCkoKSgpLGRlKDE2MiwiY2xyLW1vZGFsIiw1NiksZ2koImNsck1vZGFsT3Bl'@;
put 'bkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGJpKGgubWFudWFsRmlsZUVkaXRNb2RhbCxNKXx8KGgubWFudWFsRmlsZUVkaXRNb2RhbD1NKSxDdChNKX0pLGRlKDE2MywiaDMiLDUxKSxMZSgxNjQsIldhcm5pbmciKSxoZSgpLGRlKDE2NSwiZGl2Iiw5KSxMZSgxNjYsIiBNYW51'@;
put 'YWxseSBlZGl0aW5nIHRoaXMgZGF0YSB3aWxsIG1lYW4gdGhlIHNvdXJjZSBmaWxlICIpLGRlKDE2NywiYiIpLExlKDE2OCksaGUoKSxMZSgxNjksIiB3aWxsIGJlIGRpc2NhcmRlZC4gRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIiksaGUoKSxkZSgxNzAsImRpdiIsMjMpKDE3MSwiYnV0dG9u'@;
put 'Iiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEpfSksTGUoMTcyLCIgQ2FuY2VsICIpLGhlKCksZGUoMTczLCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgubWFudWFsRmlsZUVk'@;
put 'aXRNb2RhbD0hMSxDdChoLnByZXZpZXdUYWJsZUVkaXRDb25maXJtKCkpfSksTGUoMTc0LCIgT2sgIiksaGUoKSgpKCksZGUoMTc1LCJhcHAtZGF0YXNldC1pbmZvIiw2MiksZ2koIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxiaShoLmRhdGFzZXRJbmZvLE0pfHwoaC5k'@;
put 'YXRhc2V0SW5mbz1NKSxDdChNKX0pLEZ0KCJyb3dDbGlja2VkIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChNKSl9KSxoZSgpLGRlKDE3NiwiYXBwLXZpZXdib3hlcyIsNjMpLGdpKCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KE0pe3JldHVybiB3dChmKSxiaShoLnZpZXdib3hlcyxNKXx8KGgudmlld2JveGVzPU0pLEN0KE0pfSksaGUoKX1pZigyJmQpe2NvbnN0IGY9dm8oMTU1KTtmZSgpLHhlKCJ1cGxvYWRlciIsaC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsU3RhdGljQmFja2Ryb3Ai'@;
put 'LCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsIlZhbGlkYXRpbmctRFEiPT09aC5leGNlbFVwbG9hZFN0YXRlKSxwaSgiY2xyTW9kYWxPcGVuIixoLnNob3dVcGxvYWRNb2RhbCksZmUoMTMpLHBpKCJuZ01vZGVsIixoLmVuY29kaW5nKSx4ZSgiZGlzYWJsZWQiLCIiIT1oLmZpbGVuYW1lKSxmZSg0'@;
put 'KSxwaSgibmdNb2RlbCIsaC5lbmNvZGluZykseGUoImRpc2FibGVkIiwiIiE9aC5maWxlbmFtZSksZmUoMykseGUoIm5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFoLnVwbG9hZExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFoLnVwbG9hZExvYWRpbmcp'@;
put 'LGZlKDIpLHhlKCJuZ0lmIiwiVmFsaWRhdGluZyIhPT1oLmV4Y2VsVXBsb2FkU3RhdGUpLGZlKCkseGUoIm5nSWYiLCJWYWxpZGF0aW5nLURRIj09PWguZXhjZWxVcGxvYWRTdGF0ZSksZmUoKSx4ZSgibmdJZiIsaC5leGNlbEZpbGVQYXJzaW5nKSxmZSgyKSx4ZSgibmdJZiIsaC5jdXJyZW50'@;
put 'RWRpdFJlY29yZEluZGV4Pi0xKSxmZSgzKSx4ZSgibmdJZiIsIWgudmFsaWRhdGlvbkRvbmUmJmguc3VibWl0KSxmZSgzKSx4ZSgibmdJZiIsaC50YWJsZVRydWUpLGZlKCksVHIoImNsci1jb2wtbGctMTIiLCFoLnRhYmxlVHJ1ZSksZmUoKSx4ZSgibmdWYXIiLGxwKDY3LEs4dCxudWxsPT1o'@;
put 'LmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzBdLG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxmZSgpLHhlKCJuZ0lmIixoLnRhYmxlVHJ1ZSksZmUoKSx4ZSgibmdJZiIsIVlzKDcwLFI2ZSkuaW5jbHVkZXMoaC5xdWVyeVRleHQpKSxmZSgpLHhlKCJu'@;
put 'Z0NsYXNzIixzcCg3MixxOHQsIVlzKDcxLFI2ZSkuaW5jbHVkZXMoaC5xdWVyeVRleHQpKSksZmUoKSx4ZSgibmdJZiIsIWgudGFibGVUcnVlKSxmZSgzKSxUcigiaGlkZGVuIixoLmhvdFRhYmxlLmhpZGRlbikseGUoImxpY2Vuc2VLZXkiLGguaG90VGFibGUubGljZW5zZUtleSksZmUoMyks'@;
put 'eGUoIm5nSWYiLGgudGFibGVUcnVlJiYhaC5yZXN0cmljdGlvbnMucmVtb3ZlQWRkUmVjb3JkQnV0dG9uKSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSYmaC5kYXRhU291cmNlJiZoLmRhdGFTb3VyY2UubGVuZ3Ro'@;
put 'PmgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpLGZlKCkseGUoIm5nSWYiLGguc3VibWl0KSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguc3VibWl0TGltaXROb3RpY2UpLGZlKDUpLElyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGgubGljZW5jZVN0'@;
put 'YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxmZSg2KSxwaSgiY2xyTW9kYWxPcGVuIixoLmJhZEVkaXQpLGZl'@;
put 'KDIpLHdyKGguYmFkRWRpdFRpdGxlfHwiRXJyb3IiKSxmZSgzKSx3cihoLmJhZEVkaXRDYXVzZSksZmUoNCkscGkoImNsck1vZGFsT3BlbiIsaC5wa051bGwpLGZlKDkpLHBpKCJjbHJNb2RhbE9wZW4iLGgubm9Qa051bGwpLGZlKDkpLHBpKCJjbHJNb2RhbE9wZW4iLGgucGtEdXBzKSxmZSg4'@;
put 'KSx4ZSgibmdGb3JPZiIsaC5kdXBsaWNhdGVQa0luZGV4ZXMpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgudG9vTG9uZyksZmUoNikseGUoIm5nRm9yT2YiLGguZXhjZWVkQ2VsbHMpLGZlKDQpLHhlKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5m'@;
put 'aWx0ZXIpLHhlKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksSXIoIiAiLGgubGliZHMsIiAiKSxmZSgyKSx4ZSgibmdJZiIsaC5maWx0ZXIpLGZlKDYpLHhlKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLHBpKCJjbHJNb2RhbE9w'@;
put 'ZW4iLGgucXVlcnlFcnIpLGZlKDUpLHdyKGgucXVlcnlFcnJNZXNzYWdlKSxmZSg2KSxwaSgiY2xyTW9kYWxPcGVuIixoLmRpc2NhcmRTb3VyY2VGaWxlKSx4ZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLHdyKGguZmlsZW5hbWUpLGZlKDcpLHBp'@;
put 'KCJjbHJNb2RhbE9wZW4iLGguZmlsZVBhc3N3b3JkTW9kYWwpLHhlKCJjbHJNb2RhbFNpemUiLCJtZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoOSkseGUoIm5nSWYiLGguZmlsZVVubG9ja0Vycm9yKSxmZSgzKSx4ZSgiZGlzYWJsZWQiLGYudmFsdWUubGVuZ3RoPDEpLGZlKDIpLHBp'@;
put 'KCJjbHJNb2RhbE9wZW4iLGgubWFudWFsRmlsZUVkaXRNb2RhbCkseGUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSx3cihoLmZpbGVuYW1lKSxmZSg3KSxwaSgib3BlbiIsaC5kYXRhc2V0SW5mbykseGUoImRzbWV0YSIsaC5kc21ldGEpKCJ2ZXJz'@;
put 'aW9ucyIsaC52ZXJzaW9ucyksZmUoKSxwaSgidmlld2JveE1vZGFsIixoLnZpZXdib3hlcyl9fSxkZXBlbmRlbmNpZXM6W0U2ZSx3dSxscyx5byxlYyx2TCxubCxHcyxjMSxGbCxvdSwkdSxWMCxEMixSMixkcyxzRyxwWmUsYUcsSkwsZzcsdjcsbTcsRF8sU3csZUUsVDZlLEE2ZSxrNmUsZk8s'@;
put 'S2VlLEI4dCx6OHQsVTh0LEk2ZV0sc3R5bGVzOlsiLmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtib3JkZXI6MH0uYnV0dG9uQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udGVzdFJlZFtfbmdjb250ZW50LSVD'@;
put 'T01QJV17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmMDBjIWltcG9ydGFudH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlwZXtkaXNwbGF5Om5vbmV9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAg'@;
put 'LmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSwgaG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNv'@;
put 'bG9yOiMzMDZiMDBiMCFpbXBvcnRhbnR9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA2ZSFpbXBvcnRhbnR9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGgucmVhZG9ubHlDZWxs'@;
put 'IGRpdntvcGFjaXR5Oi40fWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fS5zdWJtaXQtcmVhc29uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjEyMHB4O21heC1oZWlnaHQ6MTIwcHg7aGVpZ2h0OjEyMHB4fS5pbmZvQmFy'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjE0cHg7YmFja2dyb3VuZDojNDk1OTY3O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozcHg7Zm9udC1zaXplOjE2cHg7aGVpZ2h0OjMwcHg7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVyZmxvdzpoaWRkZW47d2hp'@;
put 'dGUtc3BhY2U6bm93cmFwfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjgwJX0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7aGVpZ2h0OnVuc2V0O3doaXRlLXNwYWNlOm5vcm1hbH0uaW5mb0Jhcltfbmdjb250ZW50'@;
put 'LSVDT01QJV06aG92ZXIgICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDp1bnNldH0ucGtIZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzY4NzY4Mjtjb2xvcjojZmZmO21hcmdpbjotMXB4fS5oZWFkZXJCYXJbX25nY29udGVudC0lQ09NUCVde2FsaWduLWl0ZW1z'@;
put 'OmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYmctY29sb3IpfS5lcnJvci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMHB4O2hlaWdodDozMHB4O2NvbG9yOnJlZH0uYnRuQ3RybFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnkt'@;
put 'Y29udGVudDpmbGV4LWVuZH0uY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50fS5oaWRkZW5bX25nY29udGVudC0lQ09NUCVde3Zpc2liaWxpdHk6aGlkZGVufS5teS1kcm9wLXpvbmVbX25nY29udGVudC0lQ09NUCVde2Jv'@;
put 'cmRlcjpzb2xpZCAxcHggbGlnaHRncmF5O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym94LXNoYWRvdzppbnNldCAwIDAgNHB4IDJweCAjYTdhNWE1MmI7aGVpZ2h0OjUwdmh9Lm52LWZpbGUtb3Zlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOnNvbGlkIDJweCBn'@;
put 'cmVlbn0uZmlsZS1kcm9wLXRleHRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsucHJvZ3Jlc1N0YXRpY1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo5cHghaW1wb3J0YW50fS5wcm9ncmVzc1tf'@;
put 'bmdjb250ZW50LSVDT01QJV0sIC5wcm9ncmVzcy1zdGF0aWNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOmNhbGMoMTAwJSAtIDE0cHgpfX0uaG90RWRpdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZXhjZWwtcGFyc2luZ1tfbmdjb250ZW50LSVDT01QJV17ZGlz'@;
put 'cGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9LmV4Y2VsLXBhcnNpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmRldGFpbHNbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDot'@;
put 'NDVweH0uZWRpdC1yZWNvcmQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6I2ZmZjk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7d2lkdGg6MTAwJTt6LWlu'@;
put 'ZGV4OjUwMH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCl7LnByb2dyZXNTdGF0aWNbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MzJweCFpbXBvcnRhbnR9LmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVdLCAuY2FyZC1mb290ZXJbX25nY29udGVudC0lQ09N'@;
put 'UCVde3BhZGRpbmc6MTBweCAwIDB9fS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAuOHJlbSAuOHJlbSFpbXBvcnRhbnQ7cGFkZGluZy10b3A6MH0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO2Rpc3BsYXk6Zmxl'@;
put 'eDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweDtt'@;
put 'YXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMHB4O2JhY2tncm91bmQ6I2RiZGJkYjtib3JkZXItcmFkaXVzOjVweDtjb2xvcjojMDAwfSNzdWJtaXRCdG5bX25nY29udGVudC0lQ09NUCVdLCAjY2FuY2VsU3VibWl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNTBweH0udmlldy10YWJs'@;
put 'ZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50O2NvbG9yOiMxYTU3YmIhaW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCl7Lmljb24tY29sbGFwc2VbX25nY29udGVudC0lQ09NUCVdICAgLnRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3Bs'@;
put 'YXk6bm9uZX19Il19KX19cmV0dXJuIGN9KSgpO2NvbnN0IEg3dD1be3BhdGg6IjpsaWJNZW0iLGNvbXBvbmVudDpyTn0se3BhdGg6IjpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6ck59LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtIixjb21wb25lbnQ6ck59LHtwYXRoOiJlZGl0LXJl'@;
put 'Y29yZC86bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OnJOfV07bGV0IE43dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3'@;
put 'NWluaj1Bcih7aW1wb3J0czpbTG8samMuZm9yQ2hpbGQoSDd0KSxqY119KX19cmV0dXJuIGN9KSgpLE1BPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3Rh'@;
put 'dGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxCMCxMbyxJYyxRMl19KX19cmV0dXJuIGN9KSgpLFhlZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6'@;
put 'Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sQjAsTG8sSWMsVzksU0EsUTJdfSl9fXJldHVybiBjfSkoKSxMNmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1'@;
put 'bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLEIwLExvLEljLFhlZSxpOSxiMWUsaDZlLE1BLFEyXX0pfX1yZXR1cm4gY30pKCk7dE4oKTtsZXQgVjd0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3Jl'@;
put 'dHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMNmUsTG8sSWMsTjd0LEIwLGk5LmZvclJvb3QoKSxXOSxRMixDdyxTQSxNQSxiMWUsWGVlXX0pfX1yZXR1cm4gY30pKCksQjd0PSgoKT0+'@;
put 'e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtaG9tZS1yb3V0ZSJd'@;
put 'XSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyZ119KX19cmV0dXJuIGN9KSgpO2NvbnN0IGo3dD1bInNpZGViYXJOYXYiXSx6N3Q9'@;
put 'WyIqIl0sVTd0PSgpPT5bIi92aWV3L3VzZXJuYXYvdXNlcnMiXSxaN3Q9KCk9PlsiL3ZpZXcvdXNlcm5hdi9ncm91cHMiXSxXN3Q9KCk9PlsiL3ZpZXcvdXNlcm5hdi9yb2xlcyJdO2Z1bmN0aW9uIFk3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImEiLDE4KSxGdCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLm5hdmlnYXRlVG9WaWV3ZXIoKSl9KSxMZSgxLCJEYXRhIiksaGUoKX19ZnVuY3Rpb24gRzd0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMTkpLExlKDEsIkFQSSBFeHBsb3JlciIpLGhlKCkpfWZ1bmN0aW9uICQ3dChjLGwpezEmYyYmKGRl'@;
put 'KDAsImEiLDIwKSxMZSgxLCJMaW5lYWdlIiksaGUoKSl9ZnVuY3Rpb24gSzd0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjEpLExlKDEsIk1ldGFkYXRhIiksaGUoKSl9ZnVuY3Rpb24gcTd0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjIpLExlKDEsIiBVc2VycyIpLGhlKCkpfWZ1bmN0aW9uIFg3dChj'@;
put 'LGwpezEmYyYmKGRlKDAsImEiLDIzKSxMZSgxLCJTdWJtaXR0ZWQiKSxoZSgpKX1mdW5jdGlvbiBKN3QoYyxsKXsxJmMmJihkZSgwLCJhIiwyNCksTGUoMSwiVG8gQXBwcm92ZSIpLGhlKCkpfWZ1bmN0aW9uIFE3dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kcm9wZG93bi1tZW51IiksbXQo'@;
put 'MSxZN3QsMiwwLCJhIiwxMSkoMixHN3QsMiwwLCJhIiwxMikoMywkN3QsMiwwLCJhIiwxMykoNCxLN3QsMiwwLCJhIiwxNCkoNSxxN3QsMiwwLCJhIiwxNSkoNixYN3QsMiwwLCJhIiwxNikoNyxKN3QsMiwwLCJhIiwxNyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCkseGUoIm5nSWYi'@;
put 'LGEuaXNNYWluUm91dGUoInZpZXciKSksZmUoKSx4ZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTVklZQSI9PT1hLnNlcnZlclR5cGUpLGZlKCkseGUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgpLHhlKCJuZ0lmIixh'@;
put 'LmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksZmUoKSx4ZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxmZSgpLHhlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJhcHByb3ZlIikpLGZlKCkseGUoIm5nSWYiLGEuaXNNYWluUm91dGUoImFwcHJvdmUiKSl9'@;
put 'fWZ1bmN0aW9uIGU5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxMZSgzKSxHdCg0LCJjbHItaWNvbiIsOSksaGUoKSxtdCg1LFE3dCw4LDcsImNsci1kcm9wZG93bi1tZW51IiwxMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2Uo'@;
put 'KTtmZSgzKSxJcigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19ZnVuY3Rpb24gdDl0KGMsbCl7MSZjJiZHdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBuOXQoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIHI5dChjLGwpe2lmKDEmYyYmKGRlKDAsImNs'@;
put 'ci10YWIiKSgxLCJidXR0b24iLDI2KSgyLCJwIiwyNyksR3QoMywiY2xyLWljb24iLDMyKSxMZSg0LCIgUm9sZXMgIiksaGUoKSgpLG10KDUsbjl0LDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCkseGUoInJvdXRlckxpbmsiLFlzKDIsVzd0'@;
put 'KSksZmUoNCkseGUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L3JvbGVzIikpfX1mdW5jdGlvbiBpOXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFicyIsMjUpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDI2KSgzLCJwIiwyNyksR3QoNCwiY2xyLWljb24i'@;
put 'LDI4KSxMZSg1LCIgVXNlcnMiKSxoZSgpKCksR3QoNiwiY2xyLXRhYi1jb250ZW50IiksaGUoKSxkZSg3LCJjbHItdGFiIikoOCwiYnV0dG9uIiwyNikoOSwicCIsMjcpLEd0KDEwLCJjbHItaWNvbiIsMjkpLExlKDExLCIgR3JvdXBzIiksaGUoKSgpLG10KDEyLHQ5dCwxLDAsImNsci10YWIt'@;
put 'Y29udGVudCIsMzApLGhlKCksbXQoMTMscjl0LDYsMywiY2xyLXRhYiIsMzEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLHhlKCJyb3V0ZXJMaW5rIixZcyg0LFU3dCkpLGZlKDYpLHhlKCJyb3V0ZXJMaW5rIixZcyg1LFo3dCkpLGZlKDQpLHhlKCJjbHJJZkFjdGl2ZSIsYS5pc01h'@;
put 'aW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9ncm91cHMiKSksZmUoKSx4ZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKX19ZnVuY3Rpb24gbzl0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSgxLCJhIiwzMyksTGUoMiwiVGFibGVzIiksaGUoKSxkZSgzLCJhIiwzNCks'@;
put 'TGUoNCwiRXhjZWwgTWFwcyIpLGhlKCksZGUoNSwiYSIsMzUpLExlKDYsIk11bHRpIExvYWQiKSxoZSgpKCkpfWZ1bmN0aW9uIGE5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxMZSgzKSxHdCg0LCJjbHItaWNvbiIsOSksaGUo'@;
put 'KSxtdCg1LG85dCw3LDAsImNsci1kcm9wZG93bi1tZW51IiwxMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxJcigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19bGV0IGk0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3JvdXRlcj1hLHRoaXMuZXZlbnRT'@;
put 'ZXJ2aWNlPWQsdGhpcy5fc2FzU2VydmljZT1oLHRoaXMuc2Nyb2xsZWRUb0JvdHRvbT1uZXcgWHIsdGhpcy5zaWRlYmFyT3Blbj0hMCx0aGlzLnNpZGViYXJXaWR0aD1udWxsLHRoaXMuc2lkZWJhck1heFdpZHRoPW51bGwsdGhpcy5yZXNpemluZz0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyB2'@;
put 'aC5TQVNqc0NvbmZpZyx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5fc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCl9bmdPbkluaXQoKXt0aGlzLmV2ZW50U2VydmljZS5vblNpZGViYXJUb2dnbGUuc3Vic2Ny'@;
put 'aWJlKGE9Pnt0aGlzLnNpZGViYXJPcGVuPWE/YS5vcGVuOiF0aGlzLnNpZGViYXJPcGVuLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSl9b25UcmVlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0O2Quc2Nyb2xsVG9wPj1kLnNjcm9sbEhlaWdodC1kLm9mZnNldEhl'@;
put 'aWdodC0xMCYmdGhpcy5zY3JvbGxlZFRvQm90dG9tLmVtaXQoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcyhhKX1nZXRTdWJQYWdlKCl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuc3BsaXQoIi8iKVsyXX1uYXZpZ2F0ZVRvVmlld2VyKCl7S24udmll'@;
put 'd2VyLmN1cnJlbnRTZWxlY3Rpb249IiIsdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1yZXNpemVTdGFydCgpe3RoaXMucmVzaXppbmc9ITAsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0PSJ1c2VyLXNlbGVjdDog'@;
put 'bm9uZSJ9cmVzaXplRW5kKCl7dGhpcy5yZXNpemluZz0hMSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9IiJ9b25Nb3VzZU1vdmUoYSl7aWYodGhpcy5yZXNpemluZyl7dGhpcy5zaWRlYmFyV2lkdGg9YS5jbGllbnRYO2xldCBkPWRvY3Vt'@;
put 'ZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm5hdi10cmVlIilbMF07dGhpcy5zaWRlYmFyV2lkdGgmJnRoaXMuaXNPdmVyZmxvd24oZCkmJih0aGlzLnNpZGViYXJNYXhXaWR0aD10aGlzLnNpZGViYXJXaWR0aD49Mzc1P3RoaXMuc2lkZWJhcldpZHRoKzEwOnRoaXMuc2lkZWJhck1heFdp'@;
put 'ZHRoKX19b25Nb3VzZVVwKGEpe3RoaXMucmVzaXppbmcmJnRoaXMucmVzaXplRW5kKCl9aXNPdmVyZmxvd24oYSl7cmV0dXJuIGEuc2Nyb2xsV2lkdGg+YS5jbGllbnRXaWR0aH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShMcyksR2UodmMp'@;
put 'LEdlKHRsKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2lkZWJhciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJm5hKGo3dCw1KSwyJmQpe2xldCBmO3hpKGY9RWkoKSkmJihoLnNpZGViYXJOYXY9Zi5maXJzdCl9fSxob3N0'@;
put 'QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uTW91c2VNb3ZlKHYpfSwwLCQzKSgibW91c2V1cCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25Nb3VzZVVwKHYpfSwhMSwkMyl9LG91dHB1dHM6e3Njcm9sbGVkVG9Cb3R0b206'@;
put 'InNjcm9sbGVkVG9Cb3R0b20ifSxuZ0NvbnRlbnRTZWxlY3RvcnM6ejd0LGRlY2xzOjksdmFyczoxMyxjb25zdHM6W1sic2lkZWJhck5hdiIsIiJdLFsiaWQiLCJzaWRlYmFyTmF2Il0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHN1Yi1kcm9wZG93biIsNCwibmdJ'@;
put 'ZiJdLFsiY2xhc3MiLCJwLTEwIiw0LCJuZ0lmIl0sWzEsIm5hdi1kaXZpZGVyIl0sWzEsIm5hdi10cmVlIiwzLCJzY3JvbGwiXSxbMSwicmVzaXplLWhhbmRsZSIsMywibW91c2Vkb3duIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJzdWItZHJvcGRvd24iXSxbImNs'@;
put 'ckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiZHJvcGRvd24tdG9nZ2xlIiwiYnRuIiwiYnRuLXByaW1hcnkiXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFs0LCJjbHJJZk9wZW4iXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDMsImNsaWNrIiw0'@;
put 'LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIs'@;
put 'InJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxp'@;
put 'bmsiLCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJj'@;
put 'bHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDMsImNsaWNrIl0s'@;
put 'WyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUi'@;
put 'LCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2'@;
put 'ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3Rv'@;
put 'YXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbMSwicC0xMCJdLFsiY2xyVGFiTGluayIsIiIsMSwidXNlci1uYXYtYnRuIiwzLCJyb3V0ZXJMaW5rIl0sWzEsInplcm8tbWFyZ2luIl0sWyJzaGFwZSIsInVzZXIiXSxbInNoYXBlIiwidXNlcnMiXSxbNCwiY2xySWZBY3Rp'@;
put 'dmUiXSxbNCwibmdJZiJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS90YWJsZXMiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL2hv'@;
put 'bWUvZXhjZWwtbWFwcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9tdWx0aS1sb2FkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29u'@;
put 'c3QgZj1MbigpO2xvKCksZGUoMCwiY2xyLXZlcnRpY2FsLW5hdiIsMSwwKSxtdCgyLGU5dCw2LDEsImRpdiIsMikoMyxpOXQsMTQsNiwiY2xyLXRhYnMiLDMpKDQsYTl0LDYsMSwiZGl2IiwyKSxHdCg1LCJkaXYiLDQpLGRlKDYsImRpdiIsNSksRnQoInNjcm9sbCIsZnVuY3Rpb24oTSl7cmV0'@;
put 'dXJuIHd0KGYpLEN0KGgub25UcmVlU2Nyb2xsKE0pKX0pLFlyKDcpLGhlKCksZGUoOCwic3BhbiIsNiksRnQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNpemVTdGFydCgpKX0pLGhlKCkoKX0yJmQmJih3ZCgid2lkdGgiLGguc2lkZWJhcldpZHRoLCJweCIp'@;
put 'KCJtYXgtd2lkdGgiLGguc2lkZWJhck1heFdpZHRoLCJweCIpLFRyKCJjbG9zZWQiLCFoLnNpZGViYXJPcGVuKSgicmVzaXppbmciLGgucmVzaXppbmcpLGZlKDIpLHhlKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJ2aWV3IikpLGZlKCkseGUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXcvdXNl'@;
put 'cm5hdiIpKSxmZSgpLHhlKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJob21lIikpLGZlKDQpLFRyKCJyZXNpemluZyIsaC5yZXNpemluZykpfSxkZXBlbmRlbmNpZXM6W3lvLEZsLEZ5LEQyLHltLHdtLFM3LF9tLGJtLHc3LFhZLFFZLHNnLGY3LHA3LGMxLGZ5XSxzdHlsZXM6WyIuY2xyLXZlcnRp'@;
put 'Y2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmsuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjI3MnB4O21pbi13aWR0aDoyNzJweDtoZWlnaHQ6'@;
put 'MTAwJTttYXgtd2lkdGg6Mzc1cHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAxZn1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdW4tZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MzZweH1jbHItdmVydGlj'@;
put 'YWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtdHJlZVtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfWNsci12ZXJ0aWNhbC1uYXYuY2xvc2VkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDotMjcycHh9Y2xyLXZlcnRpY2FsLW5hdltf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAucmVzaXplLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6LTNweDtib3JkZXItcmlnaHQ6NHB4IHNvbGlkICM4MGI0NDE7Y3Vyc29yOmNvbC1yZXNpemU7b3BhY2l0eTowO3RyYW5zaXRp'@;
put 'b246YWxsIC4xcyBlYXNlLWluLW91dH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNpemUtaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntvcGFjaXR5Oi41fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLnJlc2l6ZS1oYW5kbGUu'@;
put 'cmVzaXppbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX1jbHItdmVydGljYWwtbmF2LnJlc2l6aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5uYXYtZGl2aWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Ym9yZGVyLXRvcDoxcHgg'@;
put 'c29saWQgI2QzZDNkMzttYXJnaW4tYm90dG9tOjB9LnBhZ2UtdGl0bGVbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3RleHQtYWxpZ246Y2VudGVyfS56ZXJvLW1hcmdpbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LnVzZXItbmF2LWJ0bltfbmdjb250'@;
put 'ZW50LSVDT01QJV17cGFkZGluZzowIDJweH0jc2lkZWJhck5hdltfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoyMDB9QG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KXsjc2lkZWJhck5hdltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7dG9wOjB9fSJdfSl9'@;
put 'fXJldHVybiBjfSkoKTtmdW5jdGlvbiBzOXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMyl9ZnVuY3Rpb24gbDl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4g'@;
put 'aC5saWJyYXJpZXNTZWFyY2g9IiIsQ3QoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBjOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw4KSgxLCJkaXYiLDkpKDIsImlucHV0IiwxMCwwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVu'@;
put 'Y3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBiaShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCksbXQoNCxz'@;
put 'OXQsMSwwLCJjbHItaWNvbiIsMTEpKDUsbDl0LDEsMCwiY2xyLWljb24iLDEyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPXZvKDMpLGQ9T2UoKTtmZSgyKSxwaSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJu'@;
put 'Z0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gdTl0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTMpfWZ1bmN0aW9uIGQ5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLE9lKCk7Y29uc3Qg'@;
put 'aD12bygzKSxmPU9lKDIpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwidGFibGVzIikpfSksaGUoKX19ZnVuY3Rpb24gaDl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9k'@;
put 'ZSIsOCkoMSwiZGl2Iiw5KSgyLCJpbnB1dCIsMTksMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3JldHVybiBiaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5j'@;
put 'dGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSxoZSgpLG10KDQsdTl0LDEsMCwiY2xyLWljb24iLDExKSg1LGQ5dCwxLDAsImNsci1pY29uIiwxMiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygz'@;
put 'KSxkPU9lKDIpLiRpbXBsaWNpdDtmZSgyKSxwaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gZjl0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjYp'@;
put 'fWZ1bmN0aW9uIHA5dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI3KX1mdW5jdGlvbiBnOXQoYyxsKXsxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOSkoMSwic3BhbiIpLExlKDIsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9s'@;
put 'bGVyLmlvICIpLGhlKCkoKSl9ZnVuY3Rpb24gbTl0KGMsbCl7MSZjJiYoY2koMCksbXQoMSxnOXQsMywwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksdWkoKSl9ZnVuY3Rpb24gdjl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDIx'@;
put 'KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5uZ1ZhcixmPU9lKCkuJGltcGxpY2l0LHY9T2UoMikuJGltcGxpY2l0LE09T2UoKTtyZXR1cm4gQ3QoaD8iIjpNLm9uVGFibGVDbGljayhmLHYpKX0pLGNpKDIsMjIpLG10KDMsZjl0LDEsMCwiY2xyLWljb24iLDIzKSg0LHA5'@;
put 'dCwxLDAsImNsci1pY29uIiwyNCksdWkoKSxMZSg1KSxoZSgpLG10KDYsbTl0LDIsMCwibmctY29udGFpbmVyIiwyNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPU9lKCkuJGltcGxpY2l0LGg9T2UoMikuJGltcGxpY2l0LGY9T2UoKTtmZSgpLFRyKCJkYy1sb2NrZWQtY29udHJv'@;
put 'bCIsYSkoImFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxmZSgpLHhlKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsITApLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsITEpLGZlKCksSXIoIiAiLGQucmVwbGFjZSgiLUZD'@;
put 'IiwiIiksIiAiKSxmZSgpLHhlKCJuZ0lmIixhKX19ZnVuY3Rpb24gYjl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIpLG10KDEsdjl0LDcsOSwiY2xyLXRvb2x0aXAiLDIwKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPU9lKDMpO2ZlKCkseGUoIm5nVmFyIixhKzE+'@;
put 'ZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiB5OXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0LHY9'@;
put 'T2UoKTtyZXR1cm4gdi50cmVlTm9kZUNsaWNrZWQoaCxmKSxDdCh2LmxpYj1mLkxJQlJBUllSRUYpfSksZ2koImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0O3JldHVybiBiaShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxD'@;
put 'dChoKX0pLGRlKDEsInAiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdCxmPU9lKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixDdChmLmxpYnJhcnlPbkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxHdCgyLCJjbHItaWNvbiIsMTgpLExl'@;
put 'KDMpLGhlKCksbXQoNCxoOXQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSg1LGI5dCwyLDEsImNsci10cmVlLW5vZGUiLDMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O1RyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLHBpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCks'@;
put 'eGUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxJcigiICIsYS5MSUJSQVJZUkVGLCIgIiksZmUoKSx4ZSgibmdJZiIsYS50YWJsZXMpLGZlKCkseGUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gXzl0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQo'@;
put 'MSx5OXQsNiw3LCJjbHItdHJlZS1ub2RlIiwxNSksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIHc5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMzApKDEsImRpdiIsMzEpKDIsInNwYW4iLDMyKSxMZSgzLCIgTG9hZGlu'@;
put 'Zy4uLiAiKSxoZSgpKCkoKSl9ZnVuY3Rpb24gQzl0KGMsbCl7MSZjJiYoZGUoMCwicCIsMzYpLExlKDEsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIiksaGUoKSl9ZnVuY3Rpb24gUzl0KGMsbCl7MSZjJiYoZGUoMCwicCIsMzYpLExlKDEsIiBObyBFZGl0YWJsZSBUYWJsZXMgQ29uZmlndXJl'@;
put 'ZCAiKSxoZSgpKX1mdW5jdGlvbiBNOXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMzKSxHdCgxLCJpbWciLDM0KSxtdCgyLEM5dCwyLDAsInAiLDM1KSgzLFM5dCwyLDAsInAiLDM1KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgyKSx4ZSgibmdJZiIsKG51bGw9PWEudHJlZU5vZGVM'@;
put 'aWJyYXJpZXM/bnVsbDphLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksZmUoKSx4ZSgibmdJZiIsKG51bGw9PWEudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDphLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk8MSl9fWxldCB4OXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm'@;
put 'LHYsTSl7dGhpcy5yb3V0ZT1hLHRoaXMucm91dGVyPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMuaGVscGVyU2VydmljZT1mLHRoaXMuZXZlbnRTZXJ2aWNlPXYsdGhpcy5zYXNTZXJ2aWNlPU0sdGhpcy50cmVlTm9kZUxpYnJhcmllcz1udWxsLHRoaXMubGlicmFyaWVzU2VhcmNoPSIi'@;
put 'LHRoaXMubGliPSIiLHRoaXMudGFibGU9IiIsdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMubG9hZGluZz0hMCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1jb2xsYXBzZUxpYnJhcnlJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57aC5MSUJSQVJZ'@;
put 'SUQhPT1kLkxJQlJBUllJRCYmKGguZXhwYW5kZWQ9ITEpfSl9dHJlZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCl7ZC5leHBhbmRlZD0hZC5l'@;
put 'eHBhbmRlZCxkLmV4cGFuZGVkJiYhdGhpcy50YWJsZSYmdGhpcy5zZWxlY3RMaWJyYXJ5KGEsITEsZCksdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1zZWxlY3RMaWJyYXJ5KGEsZCxoKXtoLmxvYWRpbmdUYWJsZXM9ITA7bGV0IGYsdj1bXTtpZih0aGlzLmxp'@;
put 'YnNBbmRUYWJsZXMmJihmPXRoaXMubGlic0FuZFRhYmxlc1thXSx0aGlzLnRhYmxlPXZvaWQgMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWEpKXtsZXQgTT1mLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1cm4tMT09PXYuaW5kZXhPZihEKSYmKHYucHVzaChEKSwhMCl9KTt0aGlzLnRhYmxl'@;
put 'cz1NLEtuLmVkaXRvci5saWJyYXJpZXM9dGhpcy5saWJyYXJpZXN9S24uZWRpdG9yLmxpYnJhcnk9YSxkfHx0aGlzLmNsZWFyR2xvYmFsc0ZpbHRlcigpLGgubG9hZGluZ1RhYmxlcz0hMSxoLmV4cGFuZGVkPSEwfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rp'@;
put 'b24qKCl7aC5saWJUYWI9aC5saWIrIi4iK2gudGFibGUsaC5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksS24uZWRpdG9yLnRhYmxlPWEsZHx8aC5jbGVhckdsb2JhbHNGaWx0ZXIoKX0pKCl9Y2xlYXJHbG9iYWxzRmlsdGVyKCl7S24uZWRpdG9yLmZpbHRlci5saWJkcz0iIixLbi5lZGl0'@;
put 'b3IuZmlsdGVyLndoZXJlQ2xhdXNlPSIiLEtuLmVkaXRvci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixLbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXM9W10sS24uZWRpdG9yLmZpbHRlci52YWxzPVtdLEtuLmVkaXRvci5maWx0ZXIuY29scz1bXX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlz'@;
put 'LmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMudHJl'@;
put 'ZU5vZGVMaWJyYXJpZXMsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllSRUYiKSxLbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1vblRhYmxlQ2xpY2soYSxkKXt0aGlzLnRhYmxlPWEsdGhpcy5saWI9ZC5MSUJSQVJZUkVGLHRoaXMuc2VsZWN0VGFi'@;
put 'bGUoYSksdGhpcy5lZGl0VGFibGUoKX1lZGl0VGFibGUoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYisiLiIrdGhpcy50YWJsZSl9Z2V0TGlicmFyeVRhYmxlU3RhdGUoKXtpZihudWxsIT09S24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzJiYodGhpcy50'@;
put 'cmVlTm9kZUxpYnJhcmllcz1Lbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMpLCIiIT09S24uZWRpdG9yLmxpYnJhcnkpe3RoaXMubGliPUtuLmVkaXRvci5saWJyYXJ5O2xldCBhPW51bGw7dGhpcy50cmVlTm9kZUxpYnJhcmllcyYmKGE9dGhpcy50cmVlTm9kZUxpYnJhcmllcy5maW5kKGQ9'@;
put 'PmQuTElCUkFSWVJFRj09PXRoaXMubGliKSksdGhpcy5zZWxlY3RMaWJyYXJ5KEtuLmVkaXRvci5saWJyYXJ5LCEwLGEpfX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcyx0aGlzLmxpYnJhcmllcz1Lbi5lZGl0b3IubGlicmFyaWVz'@;
put 'LHRoaXMuZ2V0TGlicmFyeVRhYmxlU3RhdGUoKSx0aGlzLmxvYWRpbmc9ITF9bmdBZnRlckNvbnRlbnRJbml0KCl7S24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5nZXRGcm9tR2xvYmFscygpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vic2NyaWJlKCgpPT57dGhp'@;
put 'cy5nZXRGcm9tR2xvYmFscygpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoTHMpLEdlKEN1KSxHZSh1MSksR2UoWXUpLEdlKHZjKSxHZSh0bCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaG9t'@;
put 'ZS1jb21wb25lbnQiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIs'@;
put 'Im5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQtYmxvY2siXSxbImNsYXNzIiwic3Bpbm5lci13cmFwcGVyLWZ1bGxwYWdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNo'@;
put 'LXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwiYXBwU3RlYWxGb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwi'@;
put 'bmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0'@;
put 'LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJw'@;
put 'bGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsz'@;
put 'LCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6'@;
put 'ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMi'@;
put 'LCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9pbWFnZXMvc2VsZWN0LXRhYmxlLnBuZyIsImFsdCIsInNlbGVjdCB0YWJsZSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5IG10LTEw'@;
put 'IiwiY2RzLXRleHQiLCJzZWN0aW9uIiw0LCJuZ0lmIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiKSgxLCJjbHItdHJlZSIpLG10KDIsYzl0'@;
put 'LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxfOXQsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpKDUsImRpdiIsNSksbXQoNix3OXQsNCwwLCJkaXYiLDYpKDcsTTl0LDQsMiwiZGl2Iiw3KSxoZSgpKCkpLDImZCYmKGZlKDIpLHhlKCJuZ0lmIiwobnVsbD09aC50'@;
put 'cmVlTm9kZUxpYnJhcmllcz9udWxsOmgudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKT4wKSxmZSgpLHhlKCJuZ0Zvck9mIixoLnRyZWVOb2RlTGlicmFyaWVzKSxmZSgzKSx4ZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbZWMs'@;
put 'bmwsR3MsVGgsUGQsZmcsRmwsVjAsRDIsUmQsZzcsdjcsbTcsaTQsbHMseW8sUzIsY3AsU3cscjRdLHN0eWxlczpbImNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LmNhcmQtYmxvY2tbX25nY29u'@;
put 'dGVudC0lQ09NUCVde2hlaWdodDoxMDAlO3BhZGRpbmc6MH0ubm8tdGFibGUtc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDoxMDAlfSAgY2xyLWljb24uaXMtYmx1ZSwgICBjbHItaWNvbi5pcy1pbmZve2ZpbGw6IzZhOTIzNX0uc3Bpbm5lci13'@;
put 'cmFwcGVyLWZ1bGxwYWdlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0iXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgRTl0PWM9Pntmb3IoY29uc3QgbCBpbiBjKWlm'@;
put 'KCJfX3Jvd051bV9fIiE9PWwpcmV0dXJuITE7cmV0dXJuITB9LEplZT1jPT57Y29uc3QgYT1jLm1hdGNoKC9SXFsoXGQrKVxdQ1xbKFxkKylcXS8pO3JldHVybiBhP3tyb3c6cGFyc2VJbnQoYVsxXSwxMCksY29sdW1uOnBhcnNlSW50KGFbMl0sMTApfTpudWxsfSxPNmU9KGMsbCk9PntpZihj'@;
put 'LnN0YXJ0c1dpdGgoIkFCU09MVVRFICIpJiYoYz1jLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxjLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBhPUplZShjKTtpZihhKXtjb25zdHtyb3c6ZCxjb2x1bW46aH09YTtjPWt1LnV0aWxzLmVuY29kZV9jZWxsKHtyOmQtMSxjOmgtMX0p'@;
put 'fX1pZihjLnN0YXJ0c1dpdGgoIk1BVENIICIpKXtsZXQgYT0iIjtjb25zdCBkPWMubWF0Y2goL0NcW1xkK1xdOiguKykvKTtkJiYoYT1kWzFdKTtjb25zdCBmPWMuc3BsaXQoIiAiKVsxXTtsZXQgdj0iIixNPS0xLEQ9IiI7aWYoaXNOYU4oTnVtYmVyKGYpKT92PWY6TT1wYXJzZUludChmKSwt'@;
put 'MSE9PU0pe2NvbnN0IGNlPWxbTS0xXTtmb3IoY29uc3QgYmUgaW4gY2UpaWYoIl9fcm93TnVtX18iIT09YmUmJmNlW2JlXT09PWEpe0Q9YmUrTTticmVha319ZWxzZSBmb3IobGV0IGNlPTA7Y2U8bC5sZW5ndGg7Y2UrKylpZihsW2NlXVt2XT09PWEpe0Q9disoY2UrMSk7YnJlYWt9Y29uc3Qg'@;
put 'Wj1rdS51dGlscy5kZWNvZGVfY2VsbChEKSxuZT1KZWUoYyk7aWYobmUpe2NvbnN0e3JvdzpjZSxjb2x1bW46YmV9PW5lO2M9a3UudXRpbHMuZW5jb2RlX2NlbGwoe3I6Wi5yK2NlLGM6Wi5jK2JlfSl9fXJldHVybiBjfSxBOXQ9WyJmaWxlVXBsb2FkSW5wdXQiXTtmdW5jdGlvbiBrOXQoYyxs'@;
put 'KXsxJmMmJihkZSgwLCJkaXYiLDI4KSxHdCgxLCJjbHItc3Bpbm5lciIsMjkpLGhlKCkpfWZ1bmN0aW9uIEQ5dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMwKX1mdW5jdGlvbiBJOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzEpLEZ0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIGguc2VhcmNoU3RyaW5nPSIiLEN0KGgueGxtYXBMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBSOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJjbHItdHJlZS1ub2RlIikoMiwiYnV0dG9u'@;
put 'IiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnhsbWFwT25DbGljayhoKSl9KSxHdCgzLCJjbHItaWNvbiIsMzMpLExlKDQpLGhlKCkoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKCk7ZmUoMiks'@;
put 'VHIoImFjdGl2ZSIsZC5pc0FjdGl2ZVhMTWFwKGEuaWQpKSxmZSgyKSxJcigiICIsYS5pZCwiICIpfX1mdW5jdGlvbiBMOXQoYyxsKXsxJmMmJihkZSgwLCJwIiwzNyksTGUoMSwiIFBsZWFzZSBzZWxlY3QgYSBtYXAgIiksaGUoKSl9ZnVuY3Rpb24gTzl0KGMsbCl7MSZjJiYoZGUoMCwicCIs'@;
put 'MzcpLExlKDEsIiBObyBleGNlbCBtYXAgaXMgZm91bmQgIiksaGUoKSl9ZnVuY3Rpb24gUDl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwzNCksR3QoMSwiaW1nIiwzNSksbXQoMixMOXQsMiwwLCJwIiwzNikoMyxPOXQsMiwwLCJwIiwzNiksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUo'@;
put 'MikseGUoIm5nSWYiLGEueGxtYXBzLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0lmIixhLnhsbWFwcy5sZW5ndGg8MSl9fWZ1bmN0aW9uIEY5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzgpKDEsInNwYW4iLDM5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsImRpdiIpKDQsImg0'@;
put 'IiksTGUoNSksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDUpLHdyKGEuaXNMb2FkaW5nRGVzYyl9fWZ1bmN0aW9uIEg5dChjLGwpezEmYyYmR3QoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gTjl0KGMsbCl7MSZjJiZHdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlv'@;
put 'biBWOXQoYyxsKXsxJmMmJkpsKDApfWZ1bmN0aW9uIEI5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNDApLEZ0KCJmaWxlRHJhZ2dlZE92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25TaG93VXBsb2FkTW9kYWwoKSl9KSxkZSgxLCJjbHItdGFi'@;
put 'cyIpKDIsImNsci10YWIiKSgzLCJidXR0b24iLDQxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBDdChoLnNlbGVjdGVkVGFiPWguVGFic0VudW0uUnVsZXMpfSksTGUoNCwiUnVsZXMiKSxoZSgpLG10KDUsSDl0LDEsMCwiY2xyLXRhYi1jb250ZW50'@;
put 'Iiw0MiksaGUoKSxkZSg2LCJjbHItdGFiIikoNywiYnV0dG9uIiw0MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVtLkRhdGEpfSksTGUoOCwiRGF0YSIpLGhlKCksbXQoOSxOOXQsMSwwLCJjbHItdGFi'@;
put 'LWNvbnRlbnQiLDQyKSxoZSgpKCksbXQoMTAsVjl0LDEsMCwibmctY29udGFpbmVyIiw0MyksZGUoMTEsImRpdiIsNDQpKDEyLCJoMyIsNDUpLExlKDEzKSxoZSgpLGRlKDE0LCJpIiw0NSksTGUoMTUpLGhlKCksZGUoMTYsInAiLDQ1KSxMZSgxNywiIFJ1bGVzIFNvdXJjZTogIiksZGUoMTgs'@;
put 'ImEiLDQ2KSxMZSgxOSksaGUoKSgpLGRlKDIwLCJwIiw0NSksTGUoMjEsIiBUYXJnZXQgZGF0YXNldDogIiksZGUoMjIsImEiLDQ2KSxMZSgyMyksaGUoKSgpKCksZGUoMjQsImRpdiIsNDcpLEd0KDI1LCJob3QtdGFibGUiLDQ4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCksZD12byg0'@;
put 'MSk7ZmUoNSkseGUoImNscklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcyksZmUoNCkseGUoImNscklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5EYXRhKSxmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKSxmZSgzKSxJcigiICIsYS5zZWxl'@;
put 'Y3RlZFhMTWFwLmlkLCIgIiksZmUoMiksd3IoYS5zZWxlY3RlZFhMTWFwLmRlc2NyaXB0aW9uKSxmZSgzKSx4ZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnJ1bGVzU291cmNlKSxmZSgpLElyKCIgIixhLnJ1bGVzU291cmNlLCIgIiksZmUoMykseGUoInJvdXRlckxpbmsiLCIvdmll'@;
put 'dy9kYXRhLyIrYS5zZWxlY3RlZFhMTWFwLnRhcmdldERTKSxmZSgpLElyKCIgIixhLnNlbGVjdGVkWExNYXAudGFyZ2V0RFMsIiAiKSxmZSgyKSx4ZSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGEuc2VsZWN0ZWRUYWI9'@;
put 'PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlczphLnhsRGF0YSkoImNvbEhlYWRlcnMiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlc0hlYWRlcnM6YS54bFVwbG9hZEhlYWRlcikoImNvbHVtbnMiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1'@;
put 'bGVzP2EueGxtYXBSdWxlc0NvbHVtbnM6YS54bFVwbG9hZENvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImhlaWdodCIsIjEwMCUiKSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJtb2RpZnlDb2xXaWR0aCIsYS5tYXhXaWR0aENoZWNrZXIpKCJjZWxscyIsYS5nZXRD'@;
put 'ZWxsQ29uZmlndXJhdGlvbikoIm1heFJvd3MiLGEuaG90VGFibGVNYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoInJvd0hlYWRlcnMiLGEucm93SGVhZGVycykoInJvd0hlYWRlcldpZHRoIiwxNSkoInJvd0hlaWdodHMiLDIwKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vu'@;
put 'c2VLZXkpfX1mdW5jdGlvbiBqOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksR3QoMiwiY2xyLWljb24iLDUzKSxk'@;
put 'ZSgzLCJzcGFuIiksTGUoNCwiVXBsb2FkIiksaGUoKSgpKCl9fWZ1bmN0aW9uIHo5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuc3VibWl0RXhjZWwoKSl9'@;
put 'KSxHdCgyLCJjbHItaWNvbiIsNTMpLGRlKDMsInNwYW4iKSxMZSg0LCJTdWJtaXQiKSxoZSgpKCkoKX19ZnVuY3Rpb24gVTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD'@;
put 'dChPZSgyKS5kaXNjYXJkRXh0cmFjdGVkRGF0YSgpKX0pLEd0KDIsImNsci1pY29uIiw1NSksZGUoMywic3BhbiIpLExlKDQsIkRpc2NhcmQiKSxoZSgpKCkoKX19ZnVuY3Rpb24gWjl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0OSksbXQoMSxqOXQsNSwwLCJkaXYiLDUwKSgyLHo5dCw1'@;
put 'LDAsImRpdiIsNTApKDMsVTl0LDUsMCwiZGl2Iiw1MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1VwbG9hZCksZmUoKSx4ZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCks'@;
put 'ZmUoKSx4ZSgibmdJZiIsYS5zdGF0dXM9PT1hLlN0YXR1c0VudW0uUmVhZHlUb1N1Ym1pdCl9fXZhciBlZj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vTWFwU2VsZWN0ZWQ9MF09Ik5vTWFwU2VsZWN0ZWQiLGNbYy5GZXRjaGluZ1J1bGVzPTFdPSJGZXRjaGluZ1J1bGVzIixjW2MuUmVhZHlU'@;
put 'b1VwbG9hZD0yXT0iUmVhZHlUb1VwbG9hZCIsY1tjLkV4dHJhY3RpbmdEYXRhPTNdPSJFeHRyYWN0aW5nRGF0YSIsY1tjLlJlYWR5VG9TdWJtaXQ9NF09IlJlYWR5VG9TdWJtaXQiLGNbYy5TdWJtaXR0aW5nRXh0cmFjdGVkRGF0YT01XT0iU3VibWl0dGluZ0V4dHJhY3RlZERhdGEiLGNbYy5T'@;
put 'dWJtaXR0aW5nPTZdPSJTdWJtaXR0aW5nIixjfShlZnx8e30pLE13PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUnVsZXM9MF09IlJ1bGVzIixjW2MuRGF0YT0xXT0iRGF0YSIsY30oTXd8fHt9KTtsZXQgUDZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5l'@;
put 'dmVudFNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yb3V0ZT1mLHRoaXMucm91dGVyPXYsdGhpcy5zYXNTdG9yZVNlcnZpY2U9TSx0aGlzLnNhc1NlcnZpY2U9RCx0aGlzLmNvbnRlbnRDb250YWluZXJDbGFzcz0hMCx0aGlzLmZpbGVV'@;
put 'cGxvYWRJbnB1dENvbXBMaXN0PW5ldyBwZCx0aGlzLlN0YXR1c0VudW09ZWYsdGhpcy5UYWJzRW51bT1Ndyx0aGlzLnNlbGVjdGVkVGFiPU13LlJ1bGVzLHRoaXMucnVsZXNTb3VyY2U9S24uZGNMaWIrIi5NUEVfWExNQVBfUlVMRVMiLHRoaXMueGxtYXBzPVtdLHRoaXMuc2VsZWN0ZWRYTE1h'@;
put 'cD12b2lkIDAsdGhpcy5zZWFyY2hTdHJpbmc9IiIsdGhpcy54bG1hcHNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIix0aGlzLnN0YXR1cz1lZi5Ob01hcFNlbGVjdGVkLHRoaXMueGxtYXBSdWxlc0hlYWRlcnM9WyJYTE1BUF9TSEVFVCIsIlhMTUFQ'@;
put 'X1JBTkdFX0lEIiwiWExNQVBfU1RBUlQiLCJYTE1BUF9GSU5JU0giXSx0aGlzLnhsbWFwUnVsZXNDb2x1bW5zPVt7ZGF0YToiWExNQVBfU0hFRVQifSx7ZGF0YToiWExNQVBfUkFOR0VfSUQifSx7ZGF0YToiWExNQVBfU1RBUlQifSx7ZGF0YToiWExNQVBfRklOSVNIIn1dLHRoaXMueGxtYXBS'@;
put 'dWxlcz1bXSx0aGlzLnhsVXBsb2FkSGVhZGVyPVsiWExNQVBfUkFOR0VfSUQiLCJST1dfTk8iLCJDT0xfTk8iLCJWQUxVRV9UWFQiXSx0aGlzLnhsVXBsb2FkQ29sdW1ucz1be2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlJPV19OTyJ9LHtkYXRhOiJDT0xfTk8ifSx7ZGF0YToiVkFM'@;
put 'VUVfVFhUIn1dLHRoaXMueGxEYXRhPVtdLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj0hMSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy51cGxvYWRlcj1uZXcgSWVlLHRoaXMubGljZW5jZVN0YXRlPXRoaXMu'@;
put 'bGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGVMaWNlbnNlS2V5PXZvaWQgMCx0aGlzLmhvdFRhYmxlTWF4Um93cz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkfHwxLzB9YWZ0ZXJHZXRDb2xIZWFkZXIoYSxkKXtkLmNsYXNzTGlzdC5h'@;
put 'ZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX14bG1hcE9uQ2xpY2soYSl7YS5pZCE9PXRoaXMuc2VsZWN0ZWRYTE1hcD8uaWQmJih0aGlzLnNlbGVjdGVkWExNYXA9YSx0aGlzLnhsRGF0YT1bXSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10s'@;
put 'dGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhpcy5zZWxlY3RlZFRhYj1Ndy5SdWxlcyx0aGlzLnZpZXdYTE1hcFJ1bGVzKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVC'@;
put 'eVVybCgiL2hvbWUvZXhjZWwtbWFwcy8iK2EuaWQpKX14bG1hcExpc3RPbkZpbHRlcigpe3RoaXMueGxtYXBzPXRoaXMuc2VhcmNoU3RyaW5nLmxlbmd0aD4wP0tuLnhsbWFwcy5maWx0ZXIoZD0+ZC5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoU3RyaW5nLnRvTG93ZXJD'@;
put 'YXNlKCkpKTpLbi54bG1hcHN9aXNBY3RpdmVYTE1hcChhKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFhMTWFwPy5pZD09PWF9bWF4V2lkdGhDaGVja2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfWdldENlbGxDb25maWd1cmF0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX1yb3dIZWFkZXJzKCl7'@;
put 'cmV0dXJuIiAifW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITB9ZmlsZU92ZXJCYXNlKGEpe3RoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj1hfWdldEZpbGVEZXNjKGEsZD0hMSl7dmFyIGg9dGhpcztjb25zdCBmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTtpZigh'@;
put 'ZilyZXR1cm47Y29uc3Qgdj1mLm5hbWU7aWYodGhpcy5maWxlbmFtZT12LCJ4bHMiPT09di5zbGljZSh2Lmxhc3RJbmRleE9mKCIuIikrMSx2Lmxhc3RJbmRleE9mKCIuIikrNCkudG9Mb3dlckNhc2UoKSl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5p'@;
put 'c0xvYWRpbmdEZXNjPSJFeHRyYWN0aW5nIERhdGEiLHRoaXMuc3RhdHVzPWVmLkV4dHJhY3RpbmdEYXRhO2NvbnN0IEQ9bmV3IEZpbGVSZWFkZXI7RC5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgWj1lZShmdW5jdGlvbioobmUpe2NvbnN0IGNlPShjPT57Y29uc3QgbD1uZXcgVWludDhBcnJheShj'@;
put 'KTtsZXQgYT0iIjtjb25zdCBkPWwuYnl0ZUxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKWErPVN0cmluZy5mcm9tQ2hhckNvZGUobFtoXSk7cmV0dXJuIGF9KShuZS50YXJnZXQucmVzdWx0KTtsZXQgYmU7Y29uc3QgRWU9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxh'@;
put 'OiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7YmU9a3UucmVhZChjZSx7Li4uRWV9KX1jYXRjaChCZSl7aC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxCZSx2b2lkIDAsIkVycm9yIHJlYWRpbmcgZmlsZSIpfWlmKCFiZSlyZXR1cm4gaC5pc0xv'@;
put 'YWRpbmc9ITEsaC5pc0xvYWRpbmdEZXNjPSIiLGguc3RhdHVzPWVmLlJlYWR5VG9VcGxvYWQsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpO2guZXh0cmFjdERhdGEoYmUpfSk7cmV0dXJuIGZ1bmN0aW9uKG5lKXtyZXR1cm4gWi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLEQucmVhZEFz'@;
put 'QXJyYXlCdWZmZXIoZil9ZWxzZSB0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9ZWYuUmVhZHlUb1VwbG9hZCx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMCx0aGlzLnVwbG9hZGVyLnF1ZXVlLnBvcCgpLHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9y'@;
put 'dE1vZGFsKG51bGwsJ0ludmFsaWQgZmlsZSB0eXBlICI8Yj4nK3RoaXMuZmlsZW5hbWUrJzwvYj4iLiBQbGVhc2UgdXBsb2FkIGV4Y2VsIGZpbGUuJyl9ZGlzY2FyZEV4dHJhY3RlZERhdGEoKXt0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9ZWYu'@;
put 'UmVhZHlUb1VwbG9hZCx0aGlzLnhsRGF0YT1bXSx0aGlzLnNlbGVjdGVkVGFiPU13LlJ1bGVzLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJz'@;
put 'dC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKX1zdWJtaXRFeGNlbCgpe3RoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PT09MS8wP3RoaXMuc3VibWl0KCk6dGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMH1zdWJtaXQoKXtpZighdGhpcy5zZWxlY3RlZFhMTWFwfHwhdGhp'@;
put 'cy54bERhdGEubGVuZ3RoKXJldHVybjt0aGlzLnN0YXR1cz1lZi5TdWJtaXR0aW5nLHRoaXMuaXNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nRGVzYz0iU3VibWl0dGluZyBleHRyYWN0ZWQgZGF0YSI7Y29uc3QgYT1bXTtmb3IoY29uc3QgTSBvZiB0aGlzLnVwbG9hZGVyLnF1ZXVlKWEucHVz'@;
put 'aCh7ZmlsZTpNLGZpbGVOYW1lOk0ubmFtZX0pO2NvbnN0IGQ9T2JqZWN0LmtleXModGhpcy54bERhdGFbMF0pLmpvaW4oIiwiKSsiXG4iK3RoaXMueGxEYXRhLnNsaWNlKDAsdGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpLm1hcChNPT5PYmplY3QudmFsdWVzKE0p'@;
put 'LmpvaW4oIiwiKSkuam9pbigiXG4iKSxoPW5ldyBCbG9iKFtkXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pLGY9JGVlKGgsdGhpcy5maWxlbmFtZSsiLmNzdiIpO2EucHVzaCh7ZmlsZTpmLGZpbGVOYW1lOmYubmFtZX0pLHRoaXMuc2FzU2VydmljZS51cGxvYWRGaWxlKCJzZXJ2aWNlcy9l'@;
put 'ZGl0b3JzL2xvYWRmaWxlIixhLHt0YWJsZTp0aGlzLnNlbGVjdGVkWExNYXAudGFyZ2V0RFN9KS50aGVuKE09PntpZihNLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0KXtjb25zdCBEPU0uYWRhcHRlclJlc3BvbnNlO3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLEQuc2Fz'@;
put 'anNBYm9ydFswXS5NU0cse1NZU1dBUk5JTkdURVhUOkQuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOkQuU1lTRVJST1JURVhULE1BQzpELnNhc2pzQWJvcnRbMF0uTUFDfSl9ZWxzZSBNLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXMmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9z'@;
put 'dGFnZS8iK00uYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtc1swXS5EU0lEKX0pLmNhdGNoKE09Pnt0aGlzLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImZpbGUgdXBsb2FkIixNLnJlc3BvbnNlKX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnN0YXR1cz1lZi5SZWFkeVRvU3VibWl0LHRo'@;
put 'aXMuaXNMb2FkaW5nPSExLHRoaXMuaXNMb2FkaW5nRGVzYz0iIn0pfWV4dHJhY3REYXRhKGEpe2NvbnN0IGQ9W107dGhpcy54bG1hcFJ1bGVzLmZvckVhY2goaD0+e2xldCBmPWguWExNQVBfU0hFRVQ7aWYoZi5zdGFydHNXaXRoKCIvIikpe2NvbnN0IEVlPWYuc3BsaXQoIi8iKVsxXSxCZT1w'@;
put 'YXJzZUludChFZSktMTtmPWEuU2hlZXROYW1lc1tCZV19Y29uc3Qgdj1hLlNoZWV0c1tmXSxNPWt1LnV0aWxzLnNoZWV0X3RvX2pzb24odix7cmF3OiEwLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSksRD1PNmUoaC5YTE1BUF9TVEFSVCxNKSxaPSgoYyxsLGEpPT57aWYoIiI9PT1sKXJldHVy'@;
put 'biBjO2lmKGwuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihsPWwucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLGwuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGQ9SmVlKGwpO2lmKGQpe2NvbnN0e3JvdzpoLGNvbHVtbjpmfT1kLHtyOnYsYzpNfT1rdS51dGlscy5kZWNvZGVfY2Vs'@;
put 'bChjKTtsPWt1LnV0aWxzLmVuY29kZV9jZWxsKHtyOnYraCxjOk0rZn0pfX1pZihsLnN0YXJ0c1dpdGgoIk1BVENIICIpJiYobD1PNmUobCxhKSksIkxBU1RET1dOIj09PWwpe2NvbnN0e3I6ZCxjOmh9PWt1LnV0aWxzLmRlY29kZV9jZWxsKGMpLGY9a3UudXRpbHMuZW5jb2RlX2NvbChoKTts'@;
put 'ZXQgdj1kO2ZvcihsZXQgTT1kKzE7TTxhLmxlbmd0aCYmYVtNXVtmXTtNKyspdj1NO2w9ZisodisxKX1pZigiQkxBTktST1ciPT09bCl7Y29uc3R7cjpkfT1rdS51dGlscy5kZWNvZGVfY2VsbChjKTtsZXQgaD1kO2ZvcihsZXQgRD1kKzE7RDxhLmxlbmd0aCYmIUU5dChhW0RdKTtEKyspaD1E'@;
put 'O2w9T2JqZWN0LmtleXMoYVtoXSkuZmlsdGVyKEQ9PiJfX3Jvd051bV9fIiE9PUQpLnJlZHVjZSgoRCxaKT0+Wj5EP1o6RCwiIikrKGgrMSl9cmV0dXJuIGx9KShELGguWExNQVBfRklOSVNILE0pLG5lPWAke0R9OiR7Wn1gLGNlPWt1LnV0aWxzLmRlY29kZV9yYW5nZShuZSksYmU9a3UudXRp'@;
put 'bHMuc2hlZXRfdG9fanNvbih2LHtyYXc6ITAscmFuZ2U6bmUsaGVhZGVyOiJBIixibGFua3Jvd3M6ITB9KTtmb3IobGV0IEVlPTA7RWU8YmUubGVuZ3RoO0VlKyspe2NvbnN0IEJlPWJlW0VlXTtmb3IobGV0IHFlPWNlLnMuYyxydD0wO3FlPD1jZS5lLmM7cWUrKyxydCsrKXtjb25zdCBwdD1r'@;
put 'dS51dGlscy5lbmNvZGVfY29sKHFlKTtwdCBpbiBCZSYmZC5wdXNoKHtMT0FEX1JFRjoiMCIsWExNQVBfSUQ6aC5YTE1BUF9JRCxYTE1BUF9SQU5HRV9JRDpoLlhMTUFQX1JBTkdFX0lELFJPV19OTzpFZSsxLENPTF9OTzpydCsxLFZBTFVFX1RYVDpCZVtwdF19KX19fSksdGhpcy5zdGF0dXM9'@;
put 'ZWYuUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy54bERhdGE9ZCx0aGlzLnNlbGVjdGVkVGFiPU13LkRhdGF9dmlld1hMTWFwUnVsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnNlbGVjdGVkWExNYXAmJihh'@;
put 'LmlzTG9hZGluZz0hMCxhLmlzTG9hZGluZ0Rlc2M9IkxvYWRpbmcgZXhjZWwgcnVsZXMiLGEuc3RhdHVzPWVmLkZldGNoaW5nUnVsZXMseWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0WExNYXBSdWxlcyhhLnNlbGVjdGVkWExNYXAuaWQpLnRoZW4oZD0+e2EueGxtYXBSdWxlcz1kLnhsbWFw'@;
put 'cnVsZXMsYS5zdGF0dXM9ZWYuUmVhZHlUb1VwbG9hZH0pLmNhdGNoKGQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KSxhLmlzTG9hZGluZz0hMSxhLmlzTG9hZGluZ0Rlc2M9IiIpfSkoKX1sb2FkKCl7dGhpcy54bG1hcHM9S24ueGxtYXBzLHRoaXMueGxtYXBzTG9hZGluZz0hMTtjb25z'@;
put 'dCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmlkO2lmKGEpe2NvbnN0IGQ9dGhpcy54bG1hcHMuZmluZChoPT5oLmlkPT09YSk7ZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1kLHRoaXMudmlld1hMTWFwUnVsZXMoKSl9fW5nT25Jbml0KCl7dGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGlj'@;
put 'ZW5zZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlTGljZW5zZUtleT1hfSl9bmdBZnRlclZpZXdJbml0KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe0tuLmVkaXRvci5zdGFydHVwU2V0P3RoaXMubG9hZCgpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vi'@;
put 'c2NyaWJlKCgpPT57dGhpcy5sb2FkKCl9KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh2YyksR2UodTEpLEdlKE1kKSxHZShDdSksR2UoTHMpLEdlKFpoKSxHZSh0bCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxl'@;
put 'Y3RvcnM6W1siYXBwLXhsbWFwIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmbmEoQTl0LDUpLDImZCl7bGV0IGY7eGkoZj1FaSgpKSYmKGguZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9Zil9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmVHIo'@;
put 'ImNvbnRlbnQtY29udGFpbmVyIixoLmNvbnRlbnRDb250YWluZXJDbGFzcyl9LGRlY2xzOjQyLHZhcnM6MTYsY29uc3RzOltbInNlYXJjaFhMTWFwVHJlZUlucHV0IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbImFjdGlvbkJ1dHRvbnMiLCIiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0'@;
put 'byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBJZCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9m'@;
put 'ZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibm8tdGFibGUt'@;
put 'c2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImFwcERyYWdOZHJvcCIsIiIsImNsYXNzIiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiLDQsIm5nSWYiXSxbImFwcEZpbGVEcm9wIiwi'@;
put 'IiwxLCJyZWxhdGl2ZSIsMywiZmlsZU92ZXIiLCJmaWxlRHJvcCIsImNsck1vZGFsT3BlbkNoYW5nZSIsInVwbG9hZGVyIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbE9wZW4iXSxbMSwibW9kYWwtdGl0bGUiXSxb'@;
put 'MSwibW9kYWwtYm9keSJdLFsxLCJkcm9wLWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiJdLFsxLCJjbHItcm93IiwiY2FyZC1ibG9jayIsIm10LTE1IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiY2xyLWNvbC1tZC0zIiwiZmlsdGVyQnRuIl0sWzEsImZpbHRlckJ0'@;
put 'biIsInctMTAwIl0sWyJmb3IiLCJmaWxlLXVwbG9hZCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJwcm9maWxlLWJ1dHRvbnMiLCJ3LTEwMCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwiYXBwRmlsZVNlbGVjdCIsIiIsMywiY2hhbmdl'@;
put 'IiwidXBsb2FkZXIiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm0tMCJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4'@;
put 'dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWxlIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTSm9i'@;
put 'RXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9pbWFnZXMvc2VsZWN0LXRhYmxlLnBuZyIsImFsdCIsInNlbGVjdCB0YWJsZSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5IG10LTEwIiwiY2RzLXRl'@;
put 'eHQiLCJzZWN0aW9uIiw0LCJuZ0lmIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwiY2FyZCIsImgtMTAwIiwiZC1mbGV4Iiwi'@;
put 'Y2xyLWZsZXgtY29sdW1uIiwzLCJmaWxlRHJhZ2dlZE92ZXIiXSxbImNsclRhYkxpbmsiLCIiLDMsImNsaWNrIl0sWzQsImNscklmQWN0aXZlIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbMSwiY2xyLXJvdyIsIm0tMCIsIm1iLTEwLWkiLCJ2aWV3ZXJUaXRsZSJdLFsxLCJkLWZsZXgiLCJj'@;
put 'bHItY29sLTEyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC01LWkiXSxbImNkcy10ZXh0IiwibGFiZWxMaW5rIiwxLCJtbC0xMCIsMywicm91dGVyTGluayJdLFsxLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3QtdGFibGUiLCJjbGFzc05h'@;
put 'bWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiaGVpZ2h0IiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJtb2RpZnlDb2xXaWR0'@;
put 'aCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsInJvd0hlYWRlcnMiLCJyb3dIZWFkZXJXaWR0aCIsInJvd0hlaWdodHMiLCJsaWNlbnNlS2V5Il0sWzEsImNsci1yb3ciLCJtLTAiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJkLWZsZXgg'@;
put 'Y2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWNvbC0xMiBjbHItY29sLWxnLTQiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20i'@;
put 'LCJidG4tc3VjY2VzcyIsImJ0bi1ibG9jayIsIm1yLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInVwbG9hZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMi'@;
put 'XV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJhcHAtc2lkZWJhciIpLG10KDEsazl0LDIsMCwiZGl2IiwzKSxkZSgyLCJjbHItdHJlZSIpKDMsImNsci10cmVlLW5vZGUiLDQpKDQsImRpdiIsNSkoNSwiaW5wdXQiLDYsMCksZ2koIm5nTW9kZWxD'@;
put 'aGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxiaShoLnNlYXJjaFN0cmluZyxNKXx8KGguc2VhcmNoU3RyaW5nPU0pLEN0KE0pfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxtdCg3LEQ5dCwxLDAsImNs'@;
put 'ci1pY29uIiw3KSg4LEk5dCwxLDAsImNsci1pY29uIiw4KSxoZSgpKCksbXQoOSxSOXQsNSwzLCJuZy1jb250YWluZXIiLDkpLGhlKCkoKSxkZSgxMCwiZGl2IiwxMCksbXQoMTEsUDl0LDQsMiwiZGl2IiwxMSkoMTIsRjl0LDYsMSwiZGl2IiwxMikoMTMsQjl0LDI2LDI1LCJkaXYiLDEzKSxk'@;
put 'ZSgxNCwiY2xyLW1vZGFsIiwxNCksRnQoImZpbGVPdmVyIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5maWxlT3ZlckJhc2UoTSkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5nZXRGaWxlRGVzYyhNLCEwKSl9KSxnaSgiY2xyTW9kYWxPcGVuQ2hh'@;
put 'bmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksYmkoaC5zaG93VXBsb2FkTW9kYWwsTSl8fChoLnNob3dVcGxvYWRNb2RhbD1NKSxDdChNKX0pLGRlKDE1LCJoMyIsMTUpLExlKDE2LCJVcGxvYWQgRmlsZSIpLGhlKCksZGUoMTcsImRpdiIsMTYpKDE4LCJkaXYiLDE3KSgxOSwic3BhbiIp'@;
put 'LExlKDIwLCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLGhlKCkoKSxkZSgyMSwiZGl2IiwxOCkoMjIsImRpdiIsMTkpKDIzLCJkaXYiLDIwKSgyNCwic3BhbiIsMjEpKDI1LCJsYWJlbCIsMjIpLExlKDI2LCIgQnJvd3NlICIpLGhlKCkoKSxkZSgyNywiaW5wdXQiLDIzLDEpLEZ0'@;
put 'KCJjaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmdldEZpbGVEZXNjKE0pKX0pLGhlKCkoKSgpKCkoKSgpLGRlKDI5LCJjbHItbW9kYWwiLDI0KSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksYmkoaC5zdWJtaXRMaW1pdE5vdGlj'@;
put 'ZSxNKXx8KGguc3VibWl0TGltaXROb3RpY2U9TSksQ3QoTSl9KSxkZSgzMCwiaDMiLDE1KSxMZSgzMSwiTm90aWNlIiksaGUoKSxkZSgzMiwiZGl2IiwxNikoMzMsInAiLDI1KSxMZSgzNCksaGUoKSgpLGRlKDM1LCJkaXYiLDI2KSgzNiwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiB3dChmKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLExlKDM3LCIgQ2FuY2VsICIpLGhlKCksZGUoMzgsImJ1dHRvbiIsMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5zdWJtaXQoKSxDdChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLExl'@;
put 'KDM5LCIgU3VibWl0ICIpLGhlKCkoKSgpKCksbXQoNDAsWjl0LDQsMywibmctdGVtcGxhdGUiLG51bGwsMixfdSl9aWYoMiZkKXtjb25zdCBmPXZvKDYpO2ZlKCkseGUoIm5nSWYiLGgueGxtYXBzTG9hZGluZyksZmUoNCkscGkoIm5nTW9kZWwiLGguc2VhcmNoU3RyaW5nKSxmZSgyKSx4ZSgi'@;
put 'bmdJZiIsZi52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsZi52YWx1ZS5sZW5ndGg+MCksZmUoKSx4ZSgibmdGb3JPZiIsaC54bG1hcHMpLGZlKDIpLHhlKCJuZ0lmIiwhaC5zZWxlY3RlZFhMTWFwKSxmZSgpLHhlKCJuZ0lmIixoLmlzTG9hZGluZyksZmUoKSx4ZSgibmdJZiIsIWgu'@;
put 'aXNMb2FkaW5nJiZoLnNlbGVjdGVkWExNYXApLGZlKCkseGUoInVwbG9hZGVyIixoLnVwbG9hZGVyKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxTdGF0aWNCYWNrZHJvcCIsITEpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkscGkoImNsck1vZGFsT3BlbiIsaC5zaG93VXBsb2FkTW9k'@;
put 'YWwpLGZlKDEzKSx4ZSgidXBsb2FkZXIiLGgudXBsb2FkZXIpLGZlKDIpLHBpKCJjbHJNb2RhbE9wZW4iLGguc3VibWl0TGltaXROb3RpY2UpLGZlKDUpLElyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25seSAiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIg'@;
put 'cm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKX19LGRlcGVuZGVuY2llczpbRF8sYzEsZWMsbmwsR3MsVGgsUGQsZmcsRmwsb3UsJHUsRnksZHMsUmQseW0sd20sUzcs'@;
put 'X20sYm0sdzcsTWgsaTQsbHMseW8sTjEsZUUsVDZlLEE2ZSxyNF0sc3R5bGVzOlsiLmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtmbGV4OjE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1jbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1'@;
put 'dHRvbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5uby10YWJsZS1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmV9LmhlYWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlz'@;
put 'cGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uaGVhZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAub3B0aW9ucy1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LnN3W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MXJl'@;
put 'bSAwcmVtIC41cmVtIDFyZW19LnZpZXdlclRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0uY2FyZEZsZXhbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOiMzMDZiMDA2ZX0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDow'@;
put 'O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjoxcHg7Ym9yZGVyOjJweCBkYXNoZWQgI2ZmZjt6LWluZGV4Oi0xfS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjIwcHg7bWFyZ2luLXRvcDoy'@;
put 'MHB4O2NvbG9yOiNmZmZ9Il19KX19cmV0dXJuIGN9KSgpO2NvbnN0IFc5dD1be3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco'@;
put 'ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAteGxtYXAtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0'@;
put 'bGV0Iil9LGRlcGVuZGVuY2llczpbcmddfSl9fXJldHVybiBjfSkoKSxjaGlsZHJlbjpbe3BhdGg6IiIsY29tcG9uZW50OlA2ZX0se3BhdGg6IjppZCIsY29tcG9uZW50OlA2ZX1dfV07bGV0IFk5dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1'@;
put 'cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbamMuZm9yQ2hpbGQoVzl0KSxqY119KX19cmV0dXJuIGN9KSgpO3ROKCk7bGV0IEc5dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbaTksWTl0LEljLEIwLFc5LExvLE1BLFEyXX0pfX1yZXR1cm4gY30pKCksJDl0PSgoKT0+e2NsYXNzIGN7'@;
put 'Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbXVsdGktZGF0YXNldC1yb3V0ZSJd'@;
put 'XSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltyZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtjb25zdCBLOXQ9KGMs'@;
put 'bCxhKT0+e2wuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfSxxOXQ9WyJjb250ZW50QXJlYSJdLFg5dD0oKT0+WyJodERhcmsiLCJodEN1c3RvbUhpZGRlbiJdO2Z1bmN0aW9uIEo5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMjQpLEd0KDEsImNs'@;
put 'ci1zcGlubmVyIiwyMiksaGUoKSl9ZnVuY3Rpb24gUTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2IiwyNSkoMSwiYnV0dG9uIiwyNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdCh2byg0KS5jbGljaygpKX0pLExlKDIsIiBCcm93c2UgZmlsZSAi'@;
put 'KSxoZSgpLGRlKDMsImlucHV0IiwyNywxKSxGdCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkZpbGVDaGFuZ2UoaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoImRpc2FibGVkIixudWxsIT09YS5zZWxlY3RlZEZpbGV8fGEuc3Vi'@;
put 'bWl0dGluZ0Nzdil9fWZ1bmN0aW9uIGV2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjUpKDEsImJ1dHRvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikub25EaXNjYXJkKCkpfSksTGUoMiwiIERpc2NhcmQgIiksaGUoKSxk'@;
put 'ZSgzLCJidXR0b24iLDMxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uU3VibWl0QWxsKCkpfSksTGUoNCwiIFN1Ym1pdCBBbGwgIiksaGUoKSgpfX1mdW5jdGlvbiB0dnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNil9ZnVuY3Rpb24gbnZ0KGMs'@;
put 'bCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzcpfWZ1bmN0aW9uIHJ2dChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsdHZ0LDEsMCwiY2RzLWljb24iLDM0KSgyLG52dCwxLDAsImNkcy1pY29uIiwzNSksdWkoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLGEu'@;
put 'c3VibWl0UmVzdWx0LmVycm9yKSxmZSgpLHhlKCJuZ0lmIixhLnN1Ym1pdFJlc3VsdC5zdWNjZXNzKX19ZnVuY3Rpb24gaXZ0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzYpfWZ1bmN0aW9uIG92dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM5KX1mdW5jdGlvbiBhdnQoYyxsKXtp'@;
put 'ZigxJmMmJihjaSgwKSxtdCgxLGl2dCwxLDAsImNkcy1pY29uIiwzNCkoMixvdnQsMSwwLCJjZHMtaWNvbiIsMzgpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIShhLmRhdGFzb3VyY2UubGVuZ3RoJiZhLnBhcnNlUmVzdWx0KSksZmUoKSx4ZSgi'@;
put 'bmdJZiIsYS5kYXRhc291cmNlLmxlbmd0aCYmYS5wYXJzZVJlc3VsdCl9fWZ1bmN0aW9uIHN2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM5KX1mdW5jdGlvbiBsdnQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiw0MSl9ZnVuY3Rpb24gY3Z0KGMsbCl7aWYoMSZjJiYoY2koMCks'@;
put 'bXQoMSxzdnQsMSwwLCJjZHMtaWNvbiIsMzgpKDIsbHZ0LDEsMCwiY2xyLXNwaW5uZXIiLDQwKSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoMikuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLnBhcnNpbmdUYWJsZSksZmUoKSx4ZSgibmdJZiIsYS5wYXJzaW5nVGFibGUpfX1mdW5jdGlvbiB1'@;
put 'dnQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLGF2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoMixjdnQsMywyLCJuZy1jb250YWluZXIiLDQpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIixhLmRhdGFzb3VyY2UpLGZlKCkseGUoIm5nSWYiLCFhLmRh'@;
put 'dGFzb3VyY2UpfX1mdW5jdGlvbiBkdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS5vblBhcnNlZERhdGFzZXRD'@;
put 'bGljayhoKSl9KSxtdCgyLHJ2dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoMyx1dnQsMywyLCJuZy1jb250YWluZXIiLDQpLGRlKDQsInNwYW4iLDMzKSxMZSg1KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxUcigiYWN0aXZlIixhLmFjdGl2ZSksZmUoKSx4ZSgi'@;
put 'bmdJZiIsYS5zdWJtaXRSZXN1bHQpLGZlKCkseGUoIm5nSWYiLCFhLnN1Ym1pdFJlc3VsdCksZmUoMiksSXIoIiAiLGEubGliZHMsIiAiKX19ZnVuY3Rpb24gaHZ0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxldnQsNSwwLCJkaXYiLDMpLGRlKDIsInAiLDI4KSxMZSgzLCJGb3VuZCB0YWJs'@;
put 'ZXM6IiksaGUoKSxkZSg0LCJjbHItdHJlZSIpLG10KDUsZHZ0LDYsNSwiY2xyLXRyZWUtbm9kZSIsMjkpLGhlKCksdWkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsIWEuZXhjZWxzU3VibWl0dGVkKSxmZSg0KSx4ZSgibmdGb3JPZiIsYS5wYXJzZWREYXRhc2V0cyl9fWZ1'@;
put 'bmN0aW9uIGZ2dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM2KX1mdW5jdGlvbiBwdnQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNyl9ZnVuY3Rpb24gZ3Z0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIpKDEsImJ1dHRvbiIsNDMpLEZ0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikub25TdWJtaXR0ZWRDc3ZEYXRhc2V0Q2xpY2soaCkpfSksbXQoMixmdnQsMSwwLCJjZHMtaWNvbiIsMzQpKDMscHZ0LDEsMCwiY2RzLWljb24iLDM1KSxHdCg0LCJjZHMtaWNvbiIsMzkpLExl'@;
put 'KDUpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxUcigiYWN0aXZlIixhLmFjdGl2ZSksZmUoKSx4ZSgibmdJZiIsYS5lcnJvciksZmUoKSx4ZSgibmdJZiIsYS5zdWNjZXNzKSxmZSgyKSxJcigiICIsYS5saWJkcywiICIpfX1mdW5jdGlvbiBtdnQoYyxsKXtpZigx'@;
put 'JmMmJihjaSgwKSxkZSgxLCJwIiw0MiksTGUoMiwiU3VibWl0dGVkIHRhYmxlczoiKSxoZSgpLGRlKDMsImNsci10cmVlIiksbXQoNCxndnQsNiw1LCJjbHItdHJlZS1ub2RlIiwyOSksaGUoKSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg0KSx4ZSgibmdGb3JPZiIsYS5zdWJtaXR0ZWRD'@;
put 'c3ZEYXRhc2V0cyl9fWZ1bmN0aW9uIHZ2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDQpLEd0KDEsImNsci1pY29uIiw0NSksZGUoMiwicCIsNDYpLExlKDMsIiBQbGVhc2UgdXBsb2FkIGEgZmlsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIGJ2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2Np'@;
put 'KDApLGRlKDEsImRpdiIsNDcpKDIsImRpdiIsNDgpKDMsInAiLDQ5KSxMZSg0LCIgU2VsZWN0ZWQgZmlsZTogIiksZGUoNSwic3Ryb25nIiksTGUoNiksaGUoKSxkZSg3LCJjbHItdG9vbHRpcCIpKDgsImNkcy1pY29uIiw1MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD'@;
put 'dChPZSgyKS5vbkRpc2NhcmRGaWxlKCkpfSksaGUoKSxkZSg5LCJjbHItdG9vbHRpcC1jb250ZW50IiksTGUoMTAsIiBEaXNjYXJkIHRoZSBmaWxlICIpLGhlKCkoKSgpLGRlKDExLCJwIiw1MSksTGUoMTIsIiBGaWxlIHNpemU6ICIpLGRlKDEzLCJzdHJvbmciKSxMZSgxNCksaGUoKSgpLGRl'@;
put 'KDE1LCJwIiw1MiksTGUoMTYsIiBQYXN0ZSBvciB0eXBlIHRoZSBsaXN0IG9mIGRhdGFzZXRzIHRvIHVwbG9hZDogIiksaGUoKSxkZSgxNywiY2xyLWNvbnRyb2wtaGVscGVyIiw1MyksTGUoMTgsIkVhY2ggcm93IGlzIG9uZSBkYXRhc2V0LiBXZSB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0'@;
put 'IHRhYmxlcyBieSB0aGUgc2hlZXRuYW1lIGFuZCBwb3B1bGF0ZSBpZiBhbnkuIiksaGUoKSxHdCgxOSwiaG90LXRhYmxlIiw1NCksZGUoMjAsImRpdiIsNTUpKDIxLCJidXR0b24iLDU2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uU3RhcnRQYXJzaW5n'@;
put 'RmlsZSgpKX0pLExlKDIyLCIgQ29udGludWUgIiksaGUoKSgpKCkoKSx1aSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg2KSx3cihhLnNlbGVjdGVkRmlsZS5uYW1lKSxmZSg4KSxJcigiIixhLnNlbGVjdGVkRmlsZS5zaXplTUIsIiBNQiIpLGZlKDUpLHhlKCJhZnRlckdldENvbEhlYWRl'@;
put 'ciIsYS5hZnRlckdldENvbEhlYWRlcikoInNldHRpbmdzIixhLmhvdFVzZXJEYXRhc2V0cykoImxpY2Vuc2VLZXkiLGEuaG90VGFibGVMaWNlbnNlS2V5KSxmZSgyKSx4ZSgiZGlzYWJsZWQiLCFhLm1hdGNoZWREYXRhc2V0cy5sZW5ndGgpKCJjbHJMb2FkaW5nIixhLnVwbG9hZExvYWRpbmcp'@;
put 'fX1mdW5jdGlvbiB5dnQoYyxsKXtpZigxJmMmJihjaSgwKSxHdCgxLCJjbHItaWNvbiIsNTcpLGRlKDIsInAiLDQ2KSxMZSgzKSxoZSgpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgzKSxJcigiICIsYS5maWxlTG9hZGluZ1N0YXRlLCIuLi4gIil9fWZ1bmN0aW9uIF92dChjLGwpezEm'@;
put 'YyYmKGNpKDApLEd0KDEsImNsci1pY29uIiw1OCksZGUoMiwicCIsNDYpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIGRhdGEgIiksaGUoKSx1aSgpKX1mdW5jdGlvbiB3dnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQ0KSxtdCgx'@;
put 'LHl2dCw0LDEsIm5nLWNvbnRhaW5lciIsNCkoMixfdnQsNCwwLCJuZy1jb250YWluZXIiLDQpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLHhlKCJuZ0lmIixhLmZpbGVMb2FkaW5nU3RhdGUhPT1hLkZpbGVMb2FkaW5nU3RhdGUucGFyc2VkKSxmZSgpLHhlKCJuZ0lmIixhLmZpbGVM'@;
put 'b2FkaW5nU3RhdGU9PT1hLkZpbGVMb2FkaW5nU3RhdGUucGFyc2VkKX19ZnVuY3Rpb24gQ3Z0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzUpKDEsInN0cm9uZyIpLExlKDIsIlNVQ0NFU1MiKSxoZSgpKCkpfWZ1bmN0aW9uIFN2dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSgxLCJzdHJv'@;
put 'bmciKSxMZSgyLCJFUlJPUiIpLGhlKCkoKSl9ZnVuY3Rpb24gTXZ0KGMsbCl7MSZjJiYoZGUoMCwicCIsNjMpLExlKDEsIiBFcnJvciBkZXRhaWxzOiAiKSxoZSgpKX1mdW5jdGlvbiB4dnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDc3KSxGdCgiY2xpY2siLGZ1'@;
put 'bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSg1KTtyZXR1cm4gQ3QoaC5yZVN1Ym1pdFRhYmxlKGguYWN0aXZlUGFyc2VkRGF0YXNldCkpfSksTGUoMSwiIFJlc3VibWl0ICIpLGhlKCl9MiZjJiZ4ZSgiY2xyTG9hZGluZyIsT2UoNSkuc3VibWl0TG9hZGluZyl9ZnVuY3Rpb24gRXZ0KGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2OSkoMSwiZGl2IikoMiwicCIsNjIpLExlKDMsIiBTdWJtaXQgU3RhdHVzOiAiKSxtdCg0LEN2dCwzLDAsInNwYW4iLDcwKSg1LFN2dCwzLDAsInNwYW4iLDcxKSxoZSgpLG10KDYsTXZ0LDIsMCwicCIsNzIpLGhlKCksZGUoNywiZGl2'@;
put 'IiksbXQoOCx4dnQsMiwxLCJidXR0b24iLDczKSxkZSg5LCJidXR0b24iLDc0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSg0KTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5sb2d8fGguYWN0aXZlUGFy'@;
put 'c2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuc3VjY2Vzc3x8aC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcikpfSksTGUoMTAsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDQpO2ZlKDQpLHhlKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBh'@;
put 'cnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzKSxmZSgpLHhlKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJl'@;
put 'c3VsdC5lcnJvciksZmUoKSx4ZSgibmdJZiIsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpLGZlKDIpLHhlKCJuZ0lmIiwhYS5zdWJtaXR0aW5nQ3N2JiYobnVsbD09YS5hY3RpdmVQ'@;
put 'YXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpKX19ZnVuY3Rpb24gVHZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwiZGl2Iiw3OSksTGUoMiksUXMoMywianNvbiIpLGhlKCkoKSksMiZjKXtjb25z'@;
put 'dCBhPU9lKDQpO2ZlKDIpLElyKCIgIixEYygzLDEsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpLCIgIil9fWZ1bmN0aW9uIEF2dChjLGwpe2lmKDEmYyYmKGNpKDApLGRlKDEsInN0'@;
put 'cm9uZyIpLExlKDIpLGhlKCksdWkoKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKDIpLGp1KCciJyxudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcz9udWxsOmEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzLnNo'@;
put 'ZWV0TmFtZSwnIiEnLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzP251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXMucmFuZ2VBZGRyZXNzLCIiKX19ZnVuY3Rpb24ga3Z0KGMsbCl7MSZjJiYoZGUo'@;
put 'MCwic3Ryb25nIiksTGUoMSwiTm8gZGF0YSBmb3VuZCIpLGhlKCkpfWZ1bmN0aW9uIER2dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDgxKSgxLCJzdHJvbmciKSxMZSgyLCJTZWFyY2hpbmcgZm9yIHRoZSBkYXRhLi4uIiksaGUoKSxHdCgzLCJjbHItc3Bpbm5lciIsODIpLGhlKCkpfWZ1bmN0'@;
put 'aW9uIEl2dChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsa3Z0LDIsMCwic3Ryb25nIiw0KSgyLER2dCw0LDAsInNwYW4iLDgwKSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoKSx4ZSgibmdJZiIsIWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzaW5nVGFibGUpLGZlKCkseGUoIm5nSWYi'@;
put 'LGEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzaW5nVGFibGUpfX1mdW5jdGlvbiBSdnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDgzKSxHdCgxLCJjbHItc3Bpbm5lciIsODQpLGhlKCkpfWZ1bmN0aW9uIEx2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2NpKDApLG10KDEsRXZ0LDExLDQs'@;
put 'ImRpdiIsNTkpKDIsVHZ0LDQsMywiZGl2Iiw2MCksZGUoMywiZGl2Iiw2MSkoNCwiZGl2IikoNSwicCIsNjIpLExlKDYsIiBGb3VuZCBpbiByYW5nZTogIiksbXQoNyxBdnQsMywyLCJuZy1jb250YWluZXIiLDQpKDgsSXZ0LDMsMiwibmctY29udGFpbmVyIiw0KSxoZSgpLGRlKDksInAiLDYz'@;
put 'KSxMZSgxMCwiIERhdGFzZXQ6ICIpLGRlKDExLCJzdHJvbmciKSgxMiwiY2xyLXRvb2x0aXAiKSgxMywiYSIsNjQpLExlKDE0KSxoZSgpLGRlKDE1LCJjbHItdG9vbHRpcC1jb250ZW50Iiw2NSksTGUoMTYsIiBDbGljayB0byBlZGl0IHRoZSB0YWJsZSAiKSxoZSgpKCkoKSgpKCksZGUoMTcs'@;
put 'ImRpdiIpKDE4LCJjbHItdG9nZ2xlLXdyYXBwZXIiKSgxOSwiaW5wdXQiLDY2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKTtyZXR1cm4gYmkoZi5hY3RpdmVQYXJzZWREYXRhc2V0LmluY2x1ZGVJblN1Ym1pc3Npb24saCl8fChmLmFjdGl2ZVBh'@;
put 'cnNlZERhdGFzZXQuaW5jbHVkZUluU3VibWlzc2lvbj1oKSxDdChoKX0pLGhlKCksZGUoMjAsImxhYmVsIiksTGUoMjEsIkluY2x1ZGUgaW4gc3VibWlzc2lvbiIpLGhlKCkoKSgpKCksbXQoMjIsUnZ0LDIsMCwiZGl2Iiw2NyksR3QoMjMsImhvdC10YWJsZSIsNjgpLHVpKCl9aWYoMiZjKXtj'@;
put 'b25zdCBhPU9lKDMpO2ZlKCkseGUoIm5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQpLGZlKCkseGUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9y'@;
put 'KSxmZSg1KSx4ZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSxmZSgpLHhlKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSxmZSg1KSx4ZSgicm91dGVyTGluayIsIi9lZGl0b3IvIithLmFjdGl2ZVBhcnNlZERhdGFzZXQubGliZHMp'@;
put 'LGZlKCksd3IoYS5hY3RpdmVQYXJzZWREYXRhc2V0LmxpYmRzKSxmZSgpLHhlKCJjbHJQb3NpdGlvbiIsInRvcC1yaWdodCIpKCJjbHJTaXplIiwic20iKSxmZSg0KSxwaSgibmdNb2RlbCIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LmluY2x1ZGVJblN1Ym1pc3Npb24pLHhlKCJkaXNhYmxlZCIs'@;
put 'IShhLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNvdXJjZSYmYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0KSksZmUoMykseGUoIm5nSWYiLGEuaXNIb3RIaWRkZW4pLGZlKCkseGUoImFmdGVyR2V0Q29sSGVhZGVyIixhLmFmdGVyR2V0Q29sSGVhZGVyKSgiY2xhc3NOYW1lIixZ'@;
put 'cygxOCxYOXQpKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vuc2VLZXkpKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoImZpbHRlcnMiLCEwKX19ZnVuY3Rpb24gT3Z0KGMsbCl7aWYo'@;
put 'MSZjJiYoY2koMCksbXQoMSx3dnQsMywyLCJkaXYiLDkpKDIsTHZ0LDI0LDE5LCJuZy1jb250YWluZXIiLDQpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0KSxmZSgpLHhlKCJuZ0lmIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQp'@;
put 'fX1mdW5jdGlvbiBQdnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ0KSxHdCgxLCJjbHItaWNvbiIsNTgpLGRlKDIsInAiLDQ2KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGRhdGFzZXQgb24gdGhlIGxlZnQgdG8gcmV2aWV3IHRoZSBzdWJtaXQgcmVzdWx0cyAiKSxoZSgpKCkpfWZ1bmN0aW9u'@;
put 'IEZ2dChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsUHZ0LDQsMCwiZGl2Iiw5KSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSx4ZSgibmdJZiIsIWEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9uIEh2dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc1KSgxLCJzdHJv'@;
put 'bmciKSxMZSgyLCJTVUNDRVNTIiksaGUoKSgpKX1mdW5jdGlvbiBOdnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NikoMSwic3Ryb25nIiksTGUoMiwiRVJST1IiKSxoZSgpKCkpfWZ1bmN0aW9uIFZ2dChjLGwpezEmYyYmKGRlKDAsInAiLDYzKSxMZSgxLCIgRXJyb3IgZGV0YWlsczogIiks'@;
put 'aGUoKSl9ZnVuY3Rpb24gQnZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwiZGl2Iiw3OSksTGUoMiksUXMoMywianNvbiIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDIpLElyKCIgIixEYygzLDEsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSwiICIp'@;
put 'fX1mdW5jdGlvbiBqdnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJkaXYiLDg1KSgyLCJkaXYiKSgzLCJwIiw2MiksTGUoNCwiIE1hdGNoZWQgd2l0aCBkYXRhc2V0OiAiKSxkZSg1LCJzdHJvbmciKSg2LCJjbHItdG9vbHRpcCIpKDcsImEiLDY0KSxMZSg4KSxoZSgp'@;
put 'LGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiLDY1KSxMZSgxMCwiIENsaWNrIHRvIGVkaXQgdGhlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoMTEsInAiLDYyKSxMZSgxMiwiIFN0YXR1czogIiksbXQoMTMsSHZ0LDMsMCwic3BhbiIsNzApKDE0LE52dCwzLDAsInNwYW4iLDcxKSxoZSgpLG10'@;
put 'KDE1LFZ2dCwyLDAsInAiLDcyKSxoZSgpLGRlKDE2LCJkaXYiKSgxNywiYnV0dG9uIiw3NCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGguYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5zdWNjZXNzfHxoLmFjdGl2'@;
put 'ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpKX0pLExlKDE4LCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSgpLG10KDE5LEJ2dCw0LDMsImRpdiIsNjApLHVpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDcpLHhlKCJyb3V0ZXJMaW5rIiwiL2VkaXRvci8iK2EuYWN0aXZlU3VibWl0dGVk'@;
put 'Q3N2RGF0YXNldC5saWJkcyksZmUoKSx3cihhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQubGliZHMpLGZlKCkseGUoImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IikoImNsclNpemUiLCJzbSIpLGZlKDQpLHhlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuc3VjY2Vzcyks'@;
put 'ZmUoKSx4ZSgibmdJZiIsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmVycm9yKSxmZSgpLHhlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpLGZlKDQpLHhlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpfX1mdW5jdGlvbiB6dnQo'@;
put 'YyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLGJ2dCwyMyw3LCJuZy1jb250YWluZXIiLDQpKDIsT3Z0LDMsMiwibmctY29udGFpbmVyIiw0KSgzLEZ2dCwyLDEsIm5nLWNvbnRhaW5lciIsNCkoNCxqdnQsMjAsOCwibmctY29udGFpbmVyIiw0KSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgp'@;
put 'LHhlKCJuZ0lmIiwhYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJm51bGwhPT1hLnNlbGVjdGVkRmlsZSksZmUoKSx4ZSgibmdJZiIsYS5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiFhLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSx4ZSgibmdJZiIsYS5zdWJtaXR0ZWRDc3ZEYXRh'@;
put 'c2V0cy5sZW5ndGgpLGZlKCkseGUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCl9fWZ1bmN0aW9uIFV2dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDg2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLElyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25s'@;
put 'eSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBlYWNoIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pby4gIil9fXZhciB4dz1mdW5jdGlvbihj'@;
put 'KXtyZXR1cm4gYy5yZWFkaW5nPSJSZWFkaW5nIHRoZSBmaWxlIixjLnBhcnNpbmc9IlNlYXJjaGluZyBmb3IgdGhlIGRhdGEgaW4gdGhlIGZpbGUiLGMucGFyc2VkPSJTZWFyY2hpbmcgZm9yIHRoZSBkYXRhIGZpbmlzaGVkIixjLm5vdFNlbGVjdGVkPSJGaWxlIG5vdCBzZWxlY3RlZCIsY30o'@;
put 'eHd8fHt9KTtjb25zdCBadnQ9W3twYXRoOiIiLGNvbXBvbmVudDokOXQsY2hpbGRyZW46W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMuaGVscGVy'@;
put 'U2VydmljZT1oLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWYsdGhpcy5zcHJlYWRzaGVldFNlcnZpY2U9dix0aGlzLnNhc1NlcnZpY2U9TSx0aGlzLmNkcj1ELHRoaXMuY29udGVudENvbnRhaW5lckNsYXNzPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0'@;
put 'YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuZmlsZUxvYWRpbmdTdGF0ZT14dy5ub3RTZWxlY3RlZCx0aGlzLkZpbGVMb2FkaW5nU3RhdGU9eHcsdGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9dm9pZCAwLHRoaXMuaG90VGFibGVNYXhSb3dzPXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdl'@;
put 'cl9yb3dzX2FsbG93ZWR8fDEvMCx0aGlzLmNzdkZpbGVzPVtdLHRoaXMuY3N2U3VibWl0dGluZz0hMSx0aGlzLmF1dG9EZXRlY3RpbmdDb2x1bW5zPSExLHRoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy5wYXJzZWREYXRhc2V0cz1bXSx0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzPVtdLHRo'@;
put 'aXMuZGF0YXNldHNMb2FkaW5nPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5tYXRjaGVkRGF0YXNldHM9W10sdGhpcy5zaGVldE5hbWVzPVtdLHRoaXMudXNlcklucHV0RGF0YXNldHM9IiIsdGhpcy5saWJzQW5kVGFibGVzPXt9LHRoaXMuc2hv'@;
put 'd1N1Ym1pdFJlYXNvbk1vZGFsPSExLHRoaXMuc3VibWl0UmVhc29uTWVzc2FnZT0iIix0aGlzLmhvdFVzZXJEYXRhc2V0cz17Y29sSGVhZGVyczpbIkxpYnJhcnkiLCJUYWJsZSJdLGRhdGE6W1siIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0s'@;
put 'WyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdXSxjb2x1bW5zOlt7dHlwZToiYXV0b2NvbXBsZXRlIixmaWx0ZXI6ITEsc291cmNlOltdfSx7dHlwZToiYXV0b2NvbXBsZXRlIixmaWx0ZXI6ITEsc291cmNlOltdfV0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMzA1cHgiLGNs'@;
put 'YXNzTmFtZTpbImh0RGFyayJdLGNvbnRleHRNZW51OntpdGVtczp7cm93X2Fib3ZlOntuYW1lOiJJbnNlcnQgUm93IGFib3ZlIn0scm93X2JlbG93OntuYW1lOiJJbnNlcnQgUm93IGJlbG93In19fSxtYW51YWxSb3dNb3ZlOiEwLGNvbHVtblNvcnRpbmc6ITB9LHRoaXMuYWZ0ZXJHZXRDb2xI'@;
put 'ZWFkZXI9Szl0LHRoaXMuaG90UmVnaXN0ZXJlcj1uZXcgV219bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PWF9KX1uZ0FmdGVyQ29udGVudEluaXQoKXtLbi5lZGl0b3Iuc3RhcnR1cFNl'@;
put 'dD90aGlzLmdldEZyb21HbG9iYWxzKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmdldEZyb21HbG9iYWxzKCl9KX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcztjb25z'@;
put 'dCBhPU9iamVjdC5rZXlzKHRoaXMubGlic0FuZFRhYmxlcyk7dGhpcy5ob3RVc2VyRGF0YXNldHM/LmNvbHVtbnMmJih0aGlzLmhvdFVzZXJEYXRhc2V0cy5jb2x1bW5zWzBdLnNvdXJjZT1hKX1vbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc3Qg'@;
put 'aD1hPy50YXJnZXQ/LmZpbGVzfHxbXTtpZihoLmxlbmd0aDwxKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIGZpbGUgZm91bmQuIixudWxsLCJGaWxlIFVwbG9hZCIpO2xldCBmPSIiO2ZvcihsZXQgdiBvZiBoKXtjb25zdCBNPXYubmFtZS5zcGxp'@;
put 'dCgiLiIpLnBvcCgpO2lmKGZ8fChmPU0pLGYhPT1NKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk1peGVkIGV4dGVuc2lvbnMgZXJyb3IiLCJQbGVhc2Ugc2VsZWN0IGZpbGVzIHdpdGggc2FtZSBleHRlbnNpb24uIik7Zj1NfWlmKFsieGxzeCIsInhsc20iLCJ4'@;
put 'bG0iXS5pbmNsdWRlcyhmKSlkLnNlbGVjdGVkRmlsZT1hLnRhcmdldC5maWxlc1swXSxkLnNlbGVjdGVkRmlsZSYmKGQuZmlsZUxvYWRpbmdTdGF0ZT14dy5yZWFkaW5nLGQuc2VsZWN0ZWRGaWxlLnNpemVNQj1kLnNwcmVhZHNoZWV0U2VydmljZS5ieXRlc1RvTUIoZC5zZWxlY3RlZEZpbGUu'@;
put 'c2l6ZSksZC5zcHJlYWRzaGVldFNlcnZpY2UueGxzeFJlYWRGaWxlKGQuc2VsZWN0ZWRGaWxlKS50aGVuKHY9PntkLmZpbGVMb2FkaW5nU3RhdGU9eHcucGFyc2luZyxkLnNlbGVjdGVkRmlsZS53b3JrYm9vaz12fSkpLGQuaW5pdFVzZXJJbnB1dEhvdCgpLGQub25BdXRvRGV0ZWN0Q29sdW1u'@;
put 'cygpO2Vsc2V7aWYoImNzdiIhPT1mKXJldHVybiB2b2lkIGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk9ubHkgZXhjZWwgZXh0ZW5zaW9ucyBhcmUgYWxsb3dlZC4gKHhsc3gpIixudWxsLCJFeHRlbnNpb24gRXJyb3IiKTtkLm9uTXVsdGlDc3ZGaWxlcyhhLnRhcmdldC5m'@;
put 'aWxlcyl9YS50YXJnZXQudmFsdWU9IiJ9KSgpfW9uTXVsdGlDc3ZGaWxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtmb3IobGV0IGggb2YgYSl7Y29uc3QgZj1kLnBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGgubmFtZSk7ZC5pc1ZhbGlkRGF0YXNldEZvcm1hdChmKSYm'@;
put 'ZC5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShmKSYmZC5jc3ZGaWxlcy5wdXNoKHtmaWxlOmgsZmlsZU5hbWU6aC5uYW1lfSl9ZC5jc3ZGaWxlcy5sZW5ndGg/KGQuY3N2U3VibWl0dGluZz0hMCx5aWVsZCBkLnN1Ym1pdENzdkZpbGVzKCksZC5jc3ZTdWJtaXR0aW5nPSExKTpkLmV2ZW50U2Vy'@;
put 'dmljZS5zaG93SW5mb01vZGFsKCJDU1YgVXBsb2FkIiwiTm9uZSBvZiB0aGUgYXR0YWNoZWQgQ1NWIGZpbGUgbmFtZXMgbWF0Y2hlZCBhbiBhY3R1YWwgZGF0YXNldC4iKX0pKCl9b25EaXNjYXJkRmlsZSgpe3RoaXMuc2VsZWN0ZWRGaWxlPW51bGwsdGhpcy51c2VySW5wdXREYXRhc2V0cz0i'@;
put 'In1vblN0YXJ0UGFyc2luZ0ZpbGUoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnVwbG9hZExvYWRpbmc9ITA7Y29uc3QgZD1bXTtsZXQgaD1bXTtmb3IobGV0IGYgb2YgYS5tYXRjaGVkRGF0YXNldHMpe2NvbnN0IHY9YS5mZXRjaERhdGFzZXQoZik7ZC5wdXNoKHYpfVBy'@;
put 'b21pc2UuYWxsU2V0dGxlZChkKS50aGVuKGY9PntmLmZvckVhY2goTT0+eyJmdWxmaWxsZWQiPT09TS5zdGF0dXMmJk0udmFsdWUmJmgucHVzaChNLnZhbHVlKX0pLGEudXBsb2FkTG9hZGluZz0hMSxhLmJ1aWxkRGF0YXNldHNPYmplY3RzKGgpLmZvckVhY2goTT0+e2EucGFyc2VkRGF0YXNl'@;
put 'dHMucHVzaCh7bGliZHM6TS5saWJkcyxpbmNsdWRlSW5TdWJtaXNzaW9uOiEwLGRhdGFzZXRJbmZvOk0scGFyc2luZ1RhYmxlOiEwfSl9KSxhLndvcmtib29rTG9hZGVkKCkudGhlbihNPT57Zm9yKGxldCBEIG9mIGEucGFyc2VkRGF0YXNldHMpYS5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VF'@;
put 'eGNlbEZpbGUoe2ZpbGU6YS5zZWxlY3RlZEZpbGUsd29ya2Jvb2s6TSxwYXNzd29yZDphLnNlbGVjdGVkRmlsZS5wYXNzd29yZHx8dm9pZCAwLGRjVmFsaWRhdG9yOkQuZGF0YXNldEluZm8uZGNWYWxpZGF0b3IsaGVhZGVyUGtzOkQuZGF0YXNldEluZm8uaGVhZGVyUGtzLGhlYWRlckFycmF5'@;
put 'OkQuZGF0YXNldEluZm8uaGVhZGVyQXJyYXksaGVhZGVyU2hvdzpbXSx0aW1lSGVhZGVyczpELmRhdGFzZXRJbmZvLnRpbWVIZWFkZXJzLGRhdGVIZWFkZXJzOkQuZGF0YXNldEluZm8uZGF0ZUhlYWRlcnMsZGF0ZVRpbWVIZWFkZXJzOkQuZGF0YXNldEluZm8uZGF0ZVRpbWVIZWFkZXJzLHhs'@;
put 'UnVsZXM6RC5kYXRhc2V0SW5mby54bFJ1bGVzfSkudGhlbihaPT57aWYoYS5maWxlTG9hZGluZ1N0YXRlPXh3LnBhcnNlZCxaJiZaLmRhdGEpe2xldCBuZT1bXTtaLmRhdGEubWFwKGNlPT57bGV0IGJlPXt9O1ouaGVhZGVyU2hvdy5tYXAoKEVlLEJlKT0+e2JlW0VlXT1jZVtCZV19KSxiZS5f'@;
put 'X19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChiZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX189Ik5vIiksbmUucHVzaChiZSl9KSxELmRhdGFzb3VyY2U9bmUsRC5wYXJzZVJlc3VsdD1aLEQucGFyc2luZ1RhYmxlPSExfX0pLmNhdGNoKFo9Pntjb25zb2xlLndhcm4oIlBh'@;
put 'cnNpbmcgZXhjZWwgZmlsZSBlcnJvci4iLFopLEQuZGF0YXNvdXJjZT1bXSxELmluY2x1ZGVJblN1Ym1pc3Npb249ITEsRC5wYXJzaW5nVGFibGU9ITF9KX0pfSl9KSgpfW9uU3VibWl0QWxsKCl7dGhpcy50YWJsZXNUb1N1Ym1pdC5sZW5ndGg/dGhpcy5zaG93U3VibWl0UmVhc29uTW9kYWw9'@;
put 'ITA6dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm8gdGFibGVzIHRvIHN1Ym1pdCIsIlBsZWFzZSBpbmNsdWRlIGF0IGxlYXN0IG9uZSB0YWJsZSB0byBwcm9jZWVkLiIpfW9uRGlzY2FyZCgpe3RoaXMucGFyc2VkRGF0YXNldHM9W10sdGhpcy5tYXRjaGVkRGF0YXNldHM9W10s'@;
put 'dGhpcy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnVzZXJJbnB1dERhdGFzZXRzPSIiLHRoaXMuc3VibWl0UmVhc29uTWVzc2FnZT0iIn1pbml0SG90KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIp'@;
put 'O2NvbnN0IGQ9dGhpcy5jb250ZW50QXJlYVJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodC0xNjArInB4Ijt0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQmJnRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzb3VyY2V8'@;
put 'fFtdLGNvbEhlYWRlcnM6dGhpcy5hY3RpdmVQYXJzZWREYXRhc2V0LmRhdGFzZXRJbmZvLmhlYWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNldEluZm8uZGNWYWxpZGF0b3I/LmdldFJ1bGVzKCkscmVhZE9ubHk6ITAsaGVpZ2h0OmR8fCIzMDBweCIs'@;
put 'Y2xhc3NOYW1lOiJodERhcmsifSl9KX1pbml0VXNlcklucHV0SG90KCl7dmFyIGE9dGhpcztzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0PXRoaXMuaG90UmVnaXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2VVc2VyRGF0YXNldCIpLHRoaXMuaG90SW5z'@;
put 'dGFuY2VVc2VyRGF0YXNldC5hZGRIb29rKCJiZWZvcmVDaGFuZ2UiLChkLGgpPT57aWYoZClmb3IobGV0IGYgb2YgZClmJiZmWzNdJiYoZlszXT1mWzNdLnRvVXBwZXJDYXNlKCkpfSksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImFmdGVyQ2hhbmdlIixmdW5jdGlvbigp'@;
put 'e3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYpe2lmKGgpeyJlZGl0Ij09PWYmJih5aWVsZCBhLm9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKSk7Zm9yKGxldCB2IG9mIGgpYS5tYXJrVW5tYXRjaGVkUm93cyh2WzBdKTthLmR5bmFtaWNDZWxsVmFsaWRhdGlvbnMoKSxhLmhvdEluc3RhbmNlVXNl'@;
put 'ckRhdGFzZXQucmVuZGVyKCl9fSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoLGYs'@;
put 'dixNKXt5aWVsZCBhLm9uVXNlcklucHV0RGF0YXNldHNDaGFuZ2UoKTtmb3IobGV0IEQgb2YgdilhLm1hcmtVbm1hdGNoZWRSb3dzKEQpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZix2LE0pe3JldHVybiBkLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9u'@;
put 'cygpe3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZm9yRWFjaCgoZCxoKT0+e2NvbnN0IGY9ZFswXTtmJiZmLmxlbmd0aCYmdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGgsMSwic291cmNlIix0aGlzLmxpYnNBbmRUYWJsZXNbZl0pfSl9bWFy'@;
put 'a1VubWF0Y2hlZFJvd3MoYSl7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0RGF0YUF0Um93KGEpLGg9YCR7ZFswXX0uJHtkWzFdfWAsZj10aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuZ2V0Q2VsbE1ldGFBdFJvdyhhKTtkJiZkWzBdJiZkWzFdP3RoaXMubWF0Y2hl'@;
put 'ZERhdGFzZXRzLmluY2x1ZGVzKGgpP2YuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSk6Zi5mb3JFYWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwi'@;
put 'Y2xhc3NOYW1lIiwibm90LW1hdGNoZWQiKX0pOmYuZm9yRWFjaCh2PT57dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LnNldENlbGxNZXRhKGEsdi5jb2wsImNsYXNzTmFtZSIsIiIpfSl9b25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpe3JldHVybiBuZXcgUHJvbWlzZSgoYSxkKT0+e3Ro'@;
put 'aXMuaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMTAwLCgpPT57Y29uc3QgaD10aGlzLmdldERhdGFzZXRzRnJvbUhvdCgpO3RoaXMubWF0Y2hlZERhdGFzZXRzPVtdLGguZm9yRWFjaChmPT57Y29uc3Qgdj1mLnRyaW0oKTt0aGlzLmlzVmFsaWREYXRhc2V0Rm9ybWF0KHYpJiZ0aGlzLmlz'@;
put 'VmFsaWREYXRhc2V0UmVmZXJlbmNlKHYpJiYhdGhpcy5tYXRjaGVkRGF0YXNldHMuaW5jbHVkZXModik/dGhpcy5tYXRjaGVkRGF0YXNldHMucHVzaCh2KTpjb25zb2xlLndhcm4oYFNoZWV0IG5hbWU6ICR7dn0gaXMgbm90IGFuIGFjdHVhbCBkYXRhc2V0IHJlZmVyZW5jZS5gKX0pLHRoaXMu'@;
put 'Y2RyLmRldGVjdENoYW5nZXMoKSxhKHZvaWQgMCl9KX0pfW9uQXV0b0RldGVjdENvbHVtbnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD0hMTtpZih5aWVsZCBhLnBhcnNlRXhjZWxTaGVldE5hbWVzKCkudGhlbih2PT57YS5zaGVldE5hbWVzPXZ9KS5jYXRjaCh2'@;
put 'PT57di5pbmNsdWRlcygicGFzc3dvcmQiKSYmKGQ9ITApfSksZClyZXR1cm4gYS5vbkRpc2NhcmRGaWxlKCksdm9pZCBhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJMb2NrZWQgZmlsZSIsIldlIGZhaWxlZCB0byB1bmxvY2sgdGhlIGZpbGUuIik7YS5zaGVldE5hbWVzJiYoYS5tYXRj'@;
put 'aGVkRGF0YXNldHM9W10sYS51c2VySW5wdXREYXRhc2V0cz0iIixhLnNoZWV0TmFtZXMuZm9yRWFjaCgodixNKT0+e2NvbnN0IEQ9di50cmltKCk7YS5pc1ZhbGlkRGF0YXNldEZvcm1hdChEKSYmYS5pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShEKT9hLm1hdGNoZWREYXRhc2V0cy5wdXNoKEQp'@;
put 'OmNvbnNvbGUud2FybihgU2hlZXQgbmFtZTogJHtEfSBpcyBub3QgYW4gYWN0dWFsIGRhdGFzZXQgcmVmZXJlbmNlLmApfSkpLGEudXNlcklucHV0RGF0YXNldHM9YS5tYXRjaGVkRGF0YXNldHMuam9pbigiXG4iKTtjb25zdCBoPWEubWF0Y2hlZERhdGFzZXRzLm1hcCh2PT5bdi5zcGxpdCgi'@;
put 'LiIpWzBdLHYuc3BsaXQoIi4iKVsxXV0pLGY9YS5ob3RVc2VyRGF0YXNldHMuZGF0YS5sZW5ndGg7aWYoaC5sZW5ndGg8Zil7Y29uc3Qgdj1mLWgubGVuZ3RoO2ZvcihsZXQgTT0wO008djtNKyspaC5wdXNoKFsiIiwiIl0pfWEuaG90SW5zdGFuY2VVc2VyRGF0YXNldC51cGRhdGVEYXRhKGgp'@;
put 'LGEuZHluYW1pY0NlbGxWYWxpZGF0aW9ucygpfSkoKX1vblBhcnNlZERhdGFzZXRDbGljayhhKXt0aGlzLmRlc2VsZWN0QWxsUGFyc2VkRGF0YXNldHMoKSxhLmFjdGl2ZT0hMCx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCksdGhpcy5pbml0SG90KCl9b25TdWJtaXR0ZWRDc3ZEYXRhc2V0Q2xp'@;
put 'Y2soYSl7dGhpcy5kZXNlbGVjdEFsbFN1Ym1pdHRlZENzdkRhdGFzZXRzKCksYS5hY3RpdmU9ITB9Z2V0IGFjdGl2ZVBhcnNlZERhdGFzZXQoKXtyZXR1cm4gdGhpcy5wYXJzZWREYXRhc2V0cy5maW5kKGE9PmEuYWN0aXZlKX1nZXQgYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldCgpe3JldHVy'@;
put 'biB0aGlzLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBub3RGb3VuZERhdGFzZXRzKCl7cmV0dXJuIHRoaXMuZ2V0RGF0YXNldHNGcm9tSG90KCkuZmlsdGVyKGQ9PiF0aGlzLm1hdGNoZWREYXRhc2V0cy5pbmNsdWRlcyhkLnRyaW0oKSkpLmZpbHRlcihkPT5k'@;
put 'Lmxlbmd0aCl9Z2V0IGlzSG90SGlkZGVuKCl7aWYoIXRoaXMuaG90SW5zdGFuY2UpcmV0dXJuITA7dHJ5e2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZXR0aW5ncygpLmNsYXNzTmFtZTtyZXR1cm4hIWEmJmEuaW5jbHVkZXMoImh0Q3VzdG9tSGlkZGVuIil9Y2F0Y2h7cmV0dXJuITB9'@;
put 'fWdldCB0YWJsZXNUb1N1Ym1pdCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbHRlcihhPT5hLmRhdGFzb3VyY2UmJmEucGFyc2VSZXN1bHQmJmEuaW5jbHVkZUluU3VibWlzc2lvbil9Z2V0IHN1Ym1pdHRpbmdDc3YoKXtyZXR1cm4gdGhpcy5jc3ZGaWxlcy5sZW5ndGg+MH1nZXQg'@;
put 'ZXhjZWxzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLnBhcnNlZERhdGFzZXRzLmZpbHRlcihhPT5hLnN1Ym1pdFJlc3VsdCkubGVuZ3RofWRvd25sb2FkRmlsZShhKXt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgc3RhZ2VkYXRhLSR7dGhpcy5hY3RpdmVTdWJtaXR0ZWRD'@;
put 'c3ZEYXRhc2V0Py5saWJkc30tbG9nYCxKU09OLnN0cmluZ2lmeShhKSl9c3VibWl0Q3N2RmlsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD1bXTtmb3IobGV0IGggb2YgYS5jc3ZGaWxlcyl7Y29uc3QgZj1hLnBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGguZmls'@;
put 'ZU5hbWUpO2xldCB2LE07eWllbGQgYS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoInNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLFtoXSx7dGFibGU6Zn0pLnRoZW4oRD0+e3R5cGVvZiBELmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PCJ1Ij92PUQuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJv'@;
put 'cnQ6TT1ELmFkYXB0ZXJSZXNwb25zZX0sRD0+e2NvbnNvbGUuZXJyb3IoImVyciIsRCksdj1ELmFkYXB0ZXJSZXNwb25zZX0pLGQucHVzaCh7c3VjY2VzczpNLGVycm9yOnYsbGliZHM6Zn0pfWEuc3VibWl0dGVkQ3N2RGF0YXNldHM9ZH0pKCl9ZmV0Y2hEYXRhc2V0KGEpe3ZhciBkPXRoaXM7'@;
put 'cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEpcmV0dXJuIGQuc2FzU3RvcmVTZXJ2aWNlLmNhbGxTZXJ2aWNlKHtMSUJEUzphLE9VVERFU1Q6IldFQiJ9LCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEiLGEpLnRoZW4oZj0+ZikuY2F0Y2goZj0+e2NvbnNvbGUud2FybihgRXJy'@;
put 'b3IgZmV0Y2hpbmcgJHthfWAsZil9KX0pKCl9c3VibWl0VGFibGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnNvbGUuaW5mbygiU3VibWl0dGluZyBtdWx0aXBsZSB0YWJsZXMiLGQucGFyc2VkRGF0YXNldHMpLGQuc3VibWl0TG9hZGluZz0hMDtmb3IobGV0IGgg'@;
put 'b2YgZC5wYXJzZWREYXRhc2V0cyl7aWYoIWgucGFyc2VSZXN1bHR8fCFoLmRhdGFzb3VyY2V8fCFoLmluY2x1ZGVJblN1Ym1pc3Npb258fGEmJiFhLmluY2x1ZGVzKGgubGliZHMpKWNvbnRpbnVlO2xldCBmPXt9O2Quc3VibWl0UmVhc29uTWVzc2FnZT1kLnN1Ym1pdFJlYXNvbk1lc3NhZ2Uu'@;
put 'cmVwbGFjZSgvXG4vZywiLiAiKSxmLkFDVElPTj0iTE9BRCIsZi5NRVNTQUdFPWQuc3VibWl0UmVhc29uTWVzc2FnZSxmLkxJQkRTPWgubGliZHM7bGV0IHY9aC5kYXRhc291cmNlO2lmKHYpe3Y9di5tYXAoYmU9PntsZXQgRWU9YmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fO3Jl'@;
put 'dHVybiBkZWxldGUgYmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fLGJlLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz1FZSxPYmplY3Qua2V5cyhiZSkubWFwKEJlPT57Im51bWVyaWMiPT09aC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShCZSk/LnR5cGUm'@;
put 'JiIuIj09PWJlW0JlXSYmKGJlW0JlXT1udWxsKX0pLGJlfSk7Y29uc3QgTT12LnNsaWNlKDAsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2xldCBELFosbmU7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2UudXBkYXRlVGFibGUoZixNLCJTQVNDb250cm9sVGFibGUiLCJl'@;
put 'ZGl0b3JzL3N0YWdlZGF0YSIsaC5kYXRhc2V0SW5mby5kYXRhLiRzYXNkYXRhLCEwLHtkZWJ1ZzohMH0pLnRoZW4oYmU9PntaPWJlLmFkYXB0ZXJSZXNwb25zZSxuZT1iZS5sb2d9KS5jYXRjaChiZT0+e2NvbnNvbGUuZXJyb3IoImVyciIsYmUpLEQ9YmUuYWRhcHRlclJlc3BvbnNlLG5lPWJl'@;
put 'LmxvZ30pLGguc3VibWl0UmVzdWx0PXtzdWNjZXNzOlosZXJyb3I6RCxsb2c6bmUscGFyc2VSZXN1bHQ6aC5wYXJzZVJlc3VsdCxsaWJkczpoLmxpYmRzfX19ZC5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEsZC5zdWJtaXRMb2FkaW5nPSExLGQuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygp'@;
put 'fSkoKX1yZVN1Ym1pdFRhYmxlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3lpZWxkIGQuc3VibWl0VGFibGVzKFthLmxpYmRzXSk7Y29uc3QgaD1kLnBhcnNlZERhdGFzZXRzLmZpbmQoZj0+Zi5saWJkcz09PWEubGliZHMpO2gmJihoLmFjdGl2ZT0hMCl9KSgpfXdvcmti'@;
put 'b29rTG9hZGVkKCl7cmV0dXJuIG5ldyBQcm9taXNlKChhLGQpPT57dGhpcy5zZWxlY3RlZEZpbGV8fGQoIk5vIGZpbGUgc2VsZWN0ZWQiKSx0aGlzLndvcmtib29rSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnNlbGVjdGVkRmlsZS53b3JrYm9vayYmKGNsZWFySW50ZXJ2YWwodGhp'@;
put 'cy53b3JrYm9va0ludGVydmFsKSxhKHRoaXMuc2VsZWN0ZWRGaWxlLndvcmtib29rKSl9LDUwMCl9KX1wYXJzZURhdGFzZXRGcm9tQ3N2TmFtZShhKXtjb25zdCBkPWEuc3BsaXQoIi4iKTtyZXR1cm4gZC5wb3AoKSxkLmpvaW4oIi4iKX1nZXREYXRhc2V0c0Zyb21Ib3QoKXtyZXR1cm4gdGhp'@;
put 'cy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0P3RoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhKCkuZmlsdGVyKGQ9PmRbMF0/Lmxlbmd0aCYmZFsxXT8ubGVuZ3RoKS5tYXAoZD0+ZD9gJHtkWzBdfS4ke2RbMV19YDoiIik6W119cGFyc2VFeGNlbFNoZWV0TmFtZXMoKXt2YXIgYT10'@;
put 'aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntpZighYS5zZWxlY3RlZEZpbGUpcmV0dXJuIGQoW10pO2Euc3ByZWFkc2hlZXRTZXJ2aWNlLnBhcnNlRXhjZWxTaGVldE5hbWVzKGEuc2VsZWN0ZWRGaWxlKS50aGVuKGY9PihmLnBhc3N3b3JkJiYo'@;
put 'YS5zZWxlY3RlZEZpbGUucGFzc3dvcmQ9Zi5wYXNzd29yZCksZChmLnNoZWV0TmFtZXMpKSkuY2F0Y2goZj0+aChmKSl9KX0pKCl9aXNWYWxpZERhdGFzZXRGb3JtYXQoYSl7cmV0dXJuL15cd3sxLDh9XC5cd3sxLDMyfSQvZ2ltLnRlc3QoYSl9aXNWYWxpZERhdGFzZXRSZWZlcmVuY2UoYSl7'@;
put 'Y29uc3QgZD1hLnNwbGl0KCIuIilbMF0saD1hLnNwbGl0KCIuIilbMV07cmV0dXJuISF0aGlzLmxpYnNBbmRUYWJsZXNbZF0/LmluY2x1ZGVzKGgpfWJ1aWxkRGF0YXNldHNPYmplY3RzKGEpe2lmKCFhKXJldHVybltdO2NvbnN0IGQ9W107Zm9yKGxldCBoIG9mIGEpaWYoaC5kYXRhKXtjb25z'@;
put 'dCBmPXsuLi5oLGhvdFRhYmxlOntkYXRhOmguZGF0YS5zYXNkYXRhLHNldHRpbmdzOnt9fSxjb2xzOltdLGhlYWRlckNvbHVtbnM6W10saGVhZGVyUGtzOltdLGhlYWRlckFycmF5OltdLGRhdGVIZWFkZXJzOltdLHRpbWVIZWFkZXJzOltdLGRhdGVUaW1lSGVhZGVyczpbXSx4bFJ1bGVzOltd'@;
put 'LGNvbHVtbkhlYWRlcjpbXX07Zi5jb2xzPWguZGF0YS5jb2xzLGYuaGVhZGVyQ29sdW1ucz1oLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSxmLmhlYWRlclBrcz1oLmRhdGEuc2FzcGFyYW1zWzBdLlBLLnNwbGl0KCIgIiksLTEhPT1mLmhlYWRlckNvbHVtbnMuaW5k'@;
put 'ZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJihmLmhlYWRlckNvbHVtbnNbZi5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIpXT0iRGVsZXRlPyIpLGYuaGVhZGVyQXJyYXk9Zi5oZWFkZXJDb2x1bW5zLnNsaWNlKDEp'@;
put 'LCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJihmLmRhdGVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTLnNwbGl0KCIgIikpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMmJihmLnRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNw'@;
put 'bGl0KCIgIikpLCIiIT09aC5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYmKGYuZGF0ZVRpbWVIZWFkZXJzPWguZGF0YS5zYXNwYXJhbXNbMF0uRFRUTVZBUlMuc3BsaXQoIiAiKSksaC5kYXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYoZi54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVw'@;
put 'Q2xvbmUoaC5kYXRhLnhsX3J1bGVzKSksZi5kY1ZhbGlkYXRvcj1uZXcgcDZlKGguZGF0YS5zYXNwYXJhbXNbMF0saC5kYXRhLiRzYXNkYXRhLGguZGF0YS5jb2xzLGguZGF0YS5kcXJ1bGVzLGguZGF0YS5kcWRhdGEpLGYuY29sdW1uSGVhZGVyPWguZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVB'@;
put 'REVSUy5zcGxpdCgiLCIpLGQucHVzaChmKX1yZXR1cm4gZH1kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRzKCl7Zm9yKGxldCBhIG9mIHRoaXMucGFyc2VkRGF0YXNldHMpYS5hY3RpdmU9ITF9ZGVzZWxlY3RBbGxTdWJtaXR0ZWRDc3ZEYXRhc2V0cygpe2ZvcihsZXQgYSBvZiB0aGlzLnN1Ym1p'@;
put 'dHRlZENzdkRhdGFzZXRzKWEuYWN0aXZlPSExfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHZjKSxHZSh1MSksR2UoWXUpLEdlKFpoKSxHZShTNmUpLEdlKHRsKSxHZSh4cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6Yyxz'@;
put 'ZWxlY3RvcnM6W1siYXBwLW11bHRpLWRhdGFzZXQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZuYShxOXQsNyksMiZkKXtsZXQgZjt4aShmPUVpKCkpJiYoaC5jb250ZW50QXJlYVJlZj1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7'@;
put 'MiZkJiZUcigiY29udGVudC1jb250YWluZXIiLGguY29udGVudENvbnRhaW5lckNsYXNzKX0sZGVjbHM6MzcsdmFyczoxOCxjb25zdHM6W1siY29udGVudEFyZWEiLCIiXSxbImZpbGVVcGxvYWRJbnB1dCIsIiJdLFsiY2xhc3MiLCJteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lm'@;
put 'Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIG1iLTEwIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJqdXN0aWZ5'@;
put 'LWNvbnRlbnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5n'@;
put 'ZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsiY2RzLXRleHQiLCJib2R5IiwiY2xhc3MiLCJsaWNlbmNlLWxpbWl0LW5vdGljZSBtdC0wIG1iLTE1Iiw0LCJuZ0lmIl0sWzEsInRleHQtYXJlYS1mdWxsLXdp'@;
put 'ZHRoIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiLDEsIm1iLTUiLCJkLWJsb2NrIl0sWyJjbHJUZXh0YXJlYSIsIiIsInRhYmluZGV4IiwiMCIsInR5cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmllbGRzXzgiLDEsInN1Ym1pdC1yZWFzb24iLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJj'@;
put 'ZHMtdGV4dCIsImNhcHRpb25fY2xlYW4iLDEsIm10LTEwIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLCJpZCIsInN1Ym1pdC10YWJsZXMiLDEsImJ0biIsImJ0'@;
put 'bi1wcmltYXJ5IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMSwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsiY2RzLXRleHQiLCJjYXB0aW9uX2NsZWFuIiwxLCJtdC0xMCIsInRleHQtY2VudGVyIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0'@;
put 'LWNlbnRlciIsIm1iLTEwIl0sWyJpZCIsImJyb3dzZS1maWxlIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaGlkZGVuIiwiIiwiaWQiLCJmaWxlLXVwbG9hZCIsInR5cGUiLCJmaWxlIiwibXVsdGlwbGUiLCIiLDMsImNoYW5nZSJdLFsi'@;
put 'Y2RzLXRleHQiLCJjYXB0aW9uIiwxLCJtbC0xMCIsIm1iLTEwIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJidG4iLCJidG4tZGFuZ2VyIiwiYnRuLXNtIiwibXItMTAiLDMsImNsaWNrIl0sWyJpZCIsInN1Ym1pdC1hbGwiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJj'@;
put 'bGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siXSxbMSwibWwtNSJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDQsIm5nSWYiXSxb'@;
put 'InN0YXR1cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsNCwibmdJZiJdLFsic3RhdHVzIiwiZGFuZ2VyIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiXSxbInN0YXR1cyIsInN1Y2Nlc3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwi'@;
put 'bmdJZiJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbImNsclNtYWxsIiwiIl0sWyJjZHMtdGV4dCIsImNhcHRpb24iLDEsIm1sLTEwIiwibWItMTAiLCJtdC0xMCJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsIndoaXRlc3BhY2Utbm93cmFwIiwzLCJjbGlj'@;
put 'ayJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNoYXBlIiwidXBsb2FkLWNsb3VkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIs'@;
put 'Im10LTEwIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMTUiXSxbMSwiZGF0YXNldC1pbnB1dC13cmFwcGVyIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInNoYXBlIiwidHJh'@;
put 'c2giLCJzdGF0dXMiLCJkYW5nZXIiLDEsIm1sLTUiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTIwIl0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xNSJdLFsxLCJtYi01Il0sWyJob3RJZCIs'@;
put 'ImhvdEluc3RhbmNlVXNlckRhdGFzZXQiLCJpZCIsImhvdFRhYmxlVXNlckRhdGFzZXQiLCJzdHJldGNoSCIsImFsbCIsMSwibXQtMTUiLDMsImFmdGVyR2V0Q29sSGVhZGVyIiwic2V0dGluZ3MiLCJsaWNlbnNlS2V5Il0sWzEsImRhdGFzZXQtc2VsZWN0aW9uLWFjdGlvbnMiLCJ0ZXh0LXJp'@;
put 'Z2h0IiwibXQtMTAiXSxbImlkIiwiY29udGludWUtYnRuIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsImJ0bi1zbSIsMywiY2xpY2siLCJkaXNhYmxlZCIsImNsckxvYWRpbmciXSxbInNoYXBlIiwicHJvY2Vzcy1vbi12bSIsInNpemUiLCI0MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJd'@;
put 'LFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4gcC0xMCBtdC0xNSBzdWJtaXNzaW9uLXJlc3VsdHMiLDQsIm5nSWYiXSxbImNsYXNzIiwi'@;
put 'ZXJyb3ItZmllbGQgbXQtMTUiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCIsIm10LTE1Il0sWyJjZHMtdGV4dCIsInNlY29uZGFyeSByZWd1bGFyIiwxLCJtYi0xMCJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciJdLFsi'@;
put 'Y2xyVG9vbHRpcFRyaWdnZXIiLCIiLDMsInJvdXRlckxpbmsiXSxbMywiY2xyUG9zaXRpb24iLCJjbHJTaXplIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLCJuYW1lIiwib3B0aW9ucyIsInJlcXVpcmVkIiwiIiwidmFsdWUiLCJvcHRpb24xIiwzLCJuZ01vZGVsQ2hhbmdl'@;
put 'IiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIHctMTAwIiw0LCJuZ0lmIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hIIiwiYWxsIiwxLCJtdC0xNSIsMywiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJjbGFzc05hbWUiLCJs'@;
put 'aWNlbnNlS2V5IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJmaWx0ZXJzIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiLCJtdC0xNSIsInN1Ym1pc3Npb24tcmVz'@;
put 'dWx0cyJdLFsiY2xhc3MiLCJjb2xvci1ncmVlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJjb2xvci1yZWQiLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG10LTEwIiwzLCJjbHJMb2FkaW5nIiwiY2xp'@;
put 'Y2siLDQsIm5nSWYiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnktb3V0bGluZSIsIm10LTEwIiwzLCJjbGljayJdLFsxLCJjb2xvci1ncmVlbiJdLFsxLCJjb2xvci1yZWQiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImVycm9yLWZp'@;
put 'ZWxkIiwibXQtMTUiXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyU21hbGwiLCIiLDEsIm1sLTUiXSxbMSwidGV4dC1jZW50ZXIiLCJ3'@;
put 'LTEwMCJdLFsxLCJzcGlubmVyLW1kIl0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInAtMTAiXSxbImNkcy10ZXh0IiwiYm9keSIsMSwibGljZW5jZS1saW1pdC1ub3RpY2UiLCJtdC0wIiwibWItMTUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQp'@;
put 'e2NvbnN0IGY9TG4oKTtkZSgwLCJhcHAtc2lkZWJhciIpLG10KDEsSjl0LDIsMCwiZGl2IiwyKSgyLFE5dCw1LDEsImRpdiIsMykoMyxodnQsNiwyLCJuZy1jb250YWluZXIiLDQpKDQsbXZ0LDUsMSwibmctY29udGFpbmVyIiw0KSxoZSgpLGRlKDUsImRpdiIsNSwwKSg3LCJkaXYiLDYpKDgs'@;
put 'ImRpdiIsNykoOSwicCIsOCksTGUoMTAsIk11bHRpIERhdGFzZXQgTG9hZCIpLGhlKCkoKSxtdCgxMSx2dnQsNCwwLCJkaXYiLDkpKDEyLHp2dCw1LDQsIm5nLWNvbnRhaW5lciIsNCksaGUoKSgpLGRlKDEzLCJjbHItbW9kYWwiLDEwKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlv'@;
put 'bihNKXtyZXR1cm4gd3QoZiksYmkoaC5zaG93U3VibWl0UmVhc29uTW9kYWwsTSl8fChoLnNob3dTdWJtaXRSZWFzb25Nb2RhbD1NKSxDdChNKX0pLGRlKDE0LCJoMyIsMTEpLExlKDE1KSxoZSgpLGRlKDE2LCJkaXYiLDEyKSxtdCgxNyxVdnQsMiwxLCJwIiwxMyksZGUoMTgsImRpdiIsMTQp'@;
put 'KDE5LCJsYWJlbCIsMTUpLExlKDIwLCJNZXNzYWdlIiksaGUoKSxkZSgyMSwidGV4dGFyZWEiLDE2KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGJpKGguc3VibWl0UmVhc29uTWVzc2FnZSxNKXx8KGguc3VibWl0UmVhc29uTWVzc2FnZT1NKSxDdChNKX0p'@;
put 'LGhlKCkoKSxkZSgyMiwicCIsMTcpLExlKDIzLCIgVGFibGVzIHdpbGwgYmUgc2VudCBzZXF1ZW50aWFsbHksIGxvZ3Mgd2lsbCBiZSBhdmFpbGFibGUgYWZ0ZXIgYWxsIHRhYmxlcyBhcmUgc3VibWl0dGVkLiAiKSxoZSgpKCksZGUoMjQsImRpdiIsMTgpKDI1LCJidXR0b24iLDE5KSxGdCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPSExKX0pLExlKDI2LCIgQ2FuY2VsICIpLGhlKCksZGUoMjcsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRUYWJsZXMoKSl9KSxM'@;
put 'ZSgyOCwiIFN1Ym1pdCAiKSxoZSgpKCkoKSxkZSgyOSwiY2xyLW1vZGFsIiwxMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGJpKGguY3N2U3VibWl0dGluZyxNKXx8KGguY3N2U3VibWl0dGluZz1NKSxDdChNKX0pLGRlKDMwLCJoMyIsMTEpLExl'@;
put 'KDMxKSxoZSgpLGRlKDMyLCJkaXYiLDEyKSgzMywiZGl2IiwyMSksR3QoMzQsImNsci1zcGlubmVyIiwyMiksaGUoKSxkZSgzNSwicCIsMjMpLExlKDM2LCIgVGhpcyB3aWxsIHRha2UgZmV3IG1vbWVudHMgIiksaGUoKSgpKCl9MiZkJiYoZmUoKSx4ZSgibmdJZiIsaC5kYXRhc2V0c0xvYWRp'@;
put 'bmcpLGZlKCkseGUoIm5nSWYiLCFoLnBhcnNlZERhdGFzZXRzLmxlbmd0aCksZmUoKSx4ZSgibmdJZiIsaC5wYXJzZWREYXRhc2V0cy5sZW5ndGgmJiFoLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSx4ZSgibmdJZiIsaC5zdWJtaXR0ZWRDc3ZEYXRhc2V0cy5sZW5ndGgpLGZl'@;
put 'KDcpLHhlKCJuZ0lmIixudWxsPT09aC5zZWxlY3RlZEZpbGUmJiFoLnN1Ym1pdHRpbmdDc3YpLGZlKCkseGUoIm5nSWYiLG51bGwhPT1oLnNlbGVjdGVkRmlsZXx8aC5zdWJtaXR0aW5nQ3N2KSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsKSx4ZSgiY2xy'@;
put 'TW9kYWxDbG9zYWJsZSIsITEpLGZlKDIpLGp1KCIgU3VibWl0ICIsaC50YWJsZXNUb1N1Ym1pdC5sZW5ndGgsIiAiLDE9PT1oLnRhYmxlc1RvU3VibWl0Lmxlbmd0aD8idGFibGUiOiJ0YWJsZXMiLCIgZm9yIGFwcHJvdmFsICIpLGZlKDIpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1'@;
put 'ZS5zdWJtaXRfcm93c19saW1pdCE9PWguSW5maW5pdHkpLGZlKDQpLHBpKCJuZ01vZGVsIixoLnN1Ym1pdFJlYXNvbk1lc3NhZ2UpLGZlKDQpLHhlKCJkaXNhYmxlZCIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSx4ZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxwaSgiY2xy'@;
put 'TW9kYWxPcGVuIixoLmNzdlN1Ym1pdHRpbmcpLHhlKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksanUoIiBTdWJtaXR0aW5nICIsaC5jc3ZGaWxlcy5sZW5ndGgsIiBDU1YgIiwxPT09aC5jc3ZGaWxlcy5sZW5ndGg/ImZpbGUiOiJmaWxlcyIsIiAiKSl9LGRlcGVuZGVuY2llczpbRF8s'@;
put 'YzEsZWMsQjEsbmwsaVksR3MsVGgsUGQsZmcsRmwsdXMsb3UsJHUsVjAsUjIsZHMsQkwsVzEsSWQsSkwsZzcsdjcsbTcsTWgsaTQsbHMseW8sUVVdLHN0eWxlczpbIi5uby10YWJsZS1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50'@;
put 'ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYmctY29sb3IpO3otaW5kZXg6MTA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MH0uaGVhZGVyLXJvd1tfbmdjb250'@;
put 'ZW50LSVDT01QJV17cGFkZGluZzoxNXB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2QzZDNkM30uZGF0YXNldC1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtd2lkdGg6NTAwcHg7d2lkdGg6MTAwJX0uZGF0YXNldC1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSAgIHRleHRhcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjIwMHB4O2hlaWdodDoyMDBweH0uc3VibWl0LXJlYXNvbltfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDo3MHB4O21heC1oZWlnaHQ6NzBweDtoZWlnaHQ6NzBweH0ubG9nLXdyYXBwZXJbX25nY29udGVu'@;
put 'dC0lQ09NUCVde21hcmdpbjowIDEwcHg7aGVpZ2h0OmF1dG99ICB0ZC5ub3QtbWF0Y2hlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmZjAwMDA1NH0uZGF0YXNldC1zZWxlY3Rpb24tYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2QzZDNkM30ubGljZW5jZS1s'@;
put 'aW1pdC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrKX0uc3VibWlzc2lvbi1yZXN1bHRzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZDNkM2QzfSJdfSl9fXJldHVybiBjfSkoKX1d'@;
put 'fV07bGV0IFd2dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbamMuZm9yQ2hpbGQoWnZ0KSxq'@;
put 'Y119KX19cmV0dXJuIGN9KSgpO3ROKCk7bGV0IFl2dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0'@;
put 'czpbaTksV3Z0LEljLEIwLFc5LExvLE1BLFEyXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgR3Z0PVt7cGF0aDoiIixjb21wb25lbnQ6Qjd0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRhYmxlcyJ9LHtwYXRoOiJ0YWJsZXMiLGNvbXBvbmVudDp4OXR9'@;
put 'LHtwYXRoOiJleGNlbC1tYXBzIixsb2FkQ2hpbGRyZW46KCk9Pkc5dH0se3BhdGg6Im11bHRpLWxvYWQiLGxvYWRDaGlsZHJlbjooKT0+WXZ0fV19XTtsZXQgJHZ0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRp'@;
put 'Y3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltqYy5mb3JDaGlsZChHdnQpLGpjXX0pfX1yZXR1cm4gY30pKCksS3Z0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco'@;
put 'ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlskdnQsSWMsQjAsVzksTG8sTUEsUTJdfSl9fXJldHVybiBjfSkoKSxRZWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMubGljZW5jZVNl'@;
put 'cnZpY2U9YSx0aGlzLnJvdXRlcj1kfWNhbkFjdGl2YXRlKGEsZCl7cmV0dXJuISEodm9pZCAwIT09ZD8ucm9vdC5xdWVyeVBhcmFtcy5mb3JjZXx8ZD8udXJsLmluY2x1ZGVzKCJsaWNlbnNpbmcvdXBkYXRlIikmJnRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWR8fG51bGwhPT10'@;
put 'aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlJiYhMT09PXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUiKSwhMSl9Y2FuRGVhY3RpdmF0ZShhLGQsaCxmKXtyZXR1cm4hKGg/LnVy'@;
put 'bC5pbmNsdWRlcygibGljZW5zaW5nL3JlZ2lzdGVyIil8fHRoaXMubGljZW5jZVNlcnZpY2UuYXBwTG9ja2VkLnZhbHVlKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKSh4cih1MSkseHIoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1vbih7'@;
put 'dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtsZXQgQzY9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFu'@;
put 'Z1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfTtmdW5jdGlvbiBGNmUoYyl7'@;
put 'QzY9Y31jb25zdCBINmU9L1smPD4iJ10vLHF2dD1uZXcgUmVnRXhwKEg2ZS5zb3VyY2UsImciKSxONmU9L1s8PiInXXwmKD8hKCNcZHsxLDd9fCNbWHhdW2EtZkEtRjAtOV17MSw2fXxcdyspOykvLFh2dD1uZXcgUmVnRXhwKE42ZS5zb3VyY2UsImciKSxKdnQ9eyImIjoiJmFtcDsiLCI8Ijoi'@;
put 'Jmx0OyIsIj4iOiImZ3Q7IiwnIic6IiZxdW90OyIsIiciOiImIzM5OyJ9LFY2ZT1jPT5KdnRbY107ZnVuY3Rpb24geDEoYyxsKXtpZihsKXtpZihINmUudGVzdChjKSlyZXR1cm4gYy5yZXBsYWNlKHF2dCxWNmUpfWVsc2UgaWYoTjZlLnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZShYdnQsVjZl'@;
put 'KTtyZXR1cm4gY31jb25zdCBRdnQ9LyYoIyg/OlxkKyl8KD86I3hbMC05QS1GYS1mXSspfCg/Olx3KykpOz8vZ2k7ZnVuY3Rpb24gQjZlKGMpe3JldHVybiBjLnJlcGxhY2UoUXZ0LChsLGEpPT4iY29sb24iPT09KGE9YS50b0xvd2VyQ2FzZSgpKT8iOiI6IiMiPT09YS5jaGFyQXQoMCk/Ingi'@;
put 'PT09YS5jaGFyQXQoMSk/U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhLnN1YnN0cmluZygyKSwxNikpOlN0cmluZy5mcm9tQ2hhckNvZGUoK2Euc3Vic3RyaW5nKDEpKToiIil9Y29uc3QgZWJ0PS8oXnxbXlxbXSlcXi9nO2Z1bmN0aW9uIElsKGMsbCl7Yz0ic3RyaW5nIj09dHlwZW9m'@;
put 'IGM/YzpjLnNvdXJjZSxsPWx8fCIiO2NvbnN0IGE9e3JlcGxhY2U6KGQsaCk9PihoPShoPWguc291cmNlfHxoKS5yZXBsYWNlKGVidCwiJDEiKSxjPWMucmVwbGFjZShkLGgpLGEpLGdldFJlZ2V4OigpPT5uZXcgUmVnRXhwKGMsbCl9O3JldHVybiBhfWNvbnN0IHRidD0vW15cdzpdL2csbmJ0'@;
put 'PS9eJHxeW2Etel1bYS16MC05Ky4tXSo6fF5bPyNdL2k7ZnVuY3Rpb24gajZlKGMsbCxhKXtpZihjKXtsZXQgZDt0cnl7ZD1kZWNvZGVVUklDb21wb25lbnQoQjZlKGEpKS5yZXBsYWNlKHRidCwiIikudG9Mb3dlckNhc2UoKX1jYXRjaHtyZXR1cm4gbnVsbH1pZigwPT09ZC5pbmRleE9mKCJq'@;
put 'YXZhc2NyaXB0OiIpfHwwPT09ZC5pbmRleE9mKCJ2YnNjcmlwdDoiKXx8MD09PWQuaW5kZXhPZigiZGF0YToiKSlyZXR1cm4gbnVsbH1sJiYhbmJ0LnRlc3QoYSkmJihhPWZ1bmN0aW9uIGFidChjLGwpe2lOWyIgIitjXXx8KGlOWyIgIitjXT1yYnQudGVzdChjKT9jKyIvIjphTihjLCIvIiwh'@;
put 'MCkpO2NvbnN0IGE9LTE9PT0oYz1pTlsiICIrY10pLmluZGV4T2YoIjoiKTtyZXR1cm4iLy8iPT09bC5zdWJzdHJpbmcoMCwyKT9hP2w6Yy5yZXBsYWNlKGlidCwiJDEiKStsOiIvIj09PWwuY2hhckF0KDApP2E/bDpjLnJlcGxhY2Uob2J0LCIkMSIpK2w6YytsfShsLGEpKTt0cnl7YT1lbmNv'@;
put 'ZGVVUkkoYSkucmVwbGFjZSgvJTI1L2csIiUiKX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gYX1jb25zdCBpTj17fSxyYnQ9L15bXjpdKzpcLypbXi9dKiQvLGlidD0vXihbXjpdKzopW1xzXFNdKiQvLG9idD0vXihbXjpdKzpcLypbXi9dKilbXHNcU10qJC8sb049e2V4ZWM6ZnVuY3Rpb24o'@;
put 'KXt9fTtmdW5jdGlvbiB6NmUoYyxsKXtjb25zdCBkPWMucmVwbGFjZSgvXHwvZywoZix2LE0pPT57bGV0IEQ9ITEsWj12O2Zvcig7LS1aPj0wJiYiXFwiPT09TVtaXTspRD0hRDtyZXR1cm4gRD8ifCI6IiB8In0pLnNwbGl0KC8gXHwvKTtsZXQgaD0wO2lmKGRbMF0udHJpbSgpfHxkLnNoaWZ0'@;
put 'KCksZC5sZW5ndGg+MCYmIWRbZC5sZW5ndGgtMV0udHJpbSgpJiZkLnBvcCgpLGQubGVuZ3RoPmwpZC5zcGxpY2UobCk7ZWxzZSBmb3IoO2QubGVuZ3RoPGw7KWQucHVzaCgiIik7Zm9yKDtoPGQubGVuZ3RoO2grKylkW2hdPWRbaF0udHJpbSgpLnJlcGxhY2UoL1xcXHwvZywifCIpO3JldHVy'@;
put 'biBkfWZ1bmN0aW9uIGFOKGMsbCxhKXtjb25zdCBkPWMubGVuZ3RoO2lmKDA9PT1kKXJldHVybiIiO2xldCBoPTA7Zm9yKDtoPGQ7KXtjb25zdCBmPWMuY2hhckF0KGQtaC0xKTtpZihmIT09bHx8YSl7aWYoZj09PWx8fCFhKWJyZWFrO2grK31lbHNlIGgrK31yZXR1cm4gYy5zbGljZSgwLGQt'@;
put 'aCl9ZnVuY3Rpb24gVTZlKGMsbCxhLGQpe2NvbnN0IGg9bC5ocmVmLGY9bC50aXRsZT94MShsLnRpdGxlKTpudWxsLHY9Y1sxXS5yZXBsYWNlKC9cXChbXFtcXV0pL2csIiQxIik7aWYoIiEiIT09Y1swXS5jaGFyQXQoMCkpe2Quc3RhdGUuaW5MaW5rPSEwO2NvbnN0IE09e3R5cGU6Imxpbmsi'@;
put 'LHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6dix0b2tlbnM6ZC5pbmxpbmVUb2tlbnModil9O3JldHVybiBkLnN0YXRlLmluTGluaz0hMSxNfXJldHVybnt0eXBlOiJpbWFnZSIscmF3OmEsaHJlZjpoLHRpdGxlOmYsdGV4dDp4MSh2KX19Y2xhc3Mgc057Y29uc3RydWN0b3IobCl7dGhpcy5v'@;
put 'cHRpb25zPWx8fEM2fXNwYWNlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5uZXdsaW5lLmV4ZWMobCk7aWYoYSYmYVswXS5sZW5ndGg+MClyZXR1cm57dHlwZToic3BhY2UiLHJhdzphWzBdfX1jb2RlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5jb2RlLmV4ZWMobCk7aWYoYSl7'@;
put 'Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14gezEsNH0vZ20sIiIpO3JldHVybnt0eXBlOiJjb2RlIixyYXc6YVswXSxjb2RlQmxvY2tTdHlsZToiaW5kZW50ZWQiLHRleHQ6dGhpcy5vcHRpb25zLnBlZGFudGljP2Q6YU4oZCwiXG4iKX19fWZlbmNlcyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxv'@;
put 'Y2suZmVuY2VzLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLGg9ZnVuY3Rpb24gY2J0KGMsbCl7Y29uc3QgYT1jLm1hdGNoKC9eKFxzKykoPzpgYGApLyk7aWYobnVsbD09PWEpcmV0dXJuIGw7Y29uc3QgZD1hWzFdO3JldHVybiBsLnNwbGl0KCJcbiIpLm1hcChoPT57Y29uc3QgZj1oLm1h'@;
put 'dGNoKC9eXHMrLyk7aWYobnVsbD09PWYpcmV0dXJuIGg7Y29uc3Rbdl09ZjtyZXR1cm4gdi5sZW5ndGg+PWQubGVuZ3RoP2guc2xpY2UoZC5sZW5ndGgpOmh9KS5qb2luKCJcbiIpfShkLGFbM118fCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OmQsbGFuZzphWzJdP2FbMl0udHJpbSgpLnJl'@;
put 'cGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVsyXSx0ZXh0Omh9fX1oZWFkaW5nKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oZWFkaW5nLmV4ZWMobCk7aWYoYSl7bGV0IGQ9YVsyXS50cmltKCk7aWYoLyMkLy50ZXN0KGQpKXtjb25zdCBoPWFOKGQsIiMiKTso'@;
put 'dGhpcy5vcHRpb25zLnBlZGFudGljfHwhaHx8LyAkLy50ZXN0KGgpKSYmKGQ9aC50cmltKCkpfXJldHVybnt0eXBlOiJoZWFkaW5nIixyYXc6YVswXSxkZXB0aDphWzFdLmxlbmd0aCx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGQpfX19aHIobCl7Y29uc3QgYT10aGlzLnJ1bGVz'@;
put 'LmJsb2NrLmhyLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiaHIiLHJhdzphWzBdfX1ibG9ja3F1b3RlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5ibG9ja3F1b3RlLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzBdLnJlcGxhY2UoL14gKj5bIFx0XT8vZ20sIiIpLGg9dGhpcy5sZXhl'@;
put 'ci5zdGF0ZS50b3A7dGhpcy5sZXhlci5zdGF0ZS50b3A9ITA7Y29uc3QgZj10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGQpO3JldHVybiB0aGlzLmxleGVyLnN0YXRlLnRvcD1oLHt0eXBlOiJibG9ja3F1b3RlIixyYXc6YVswXSx0b2tlbnM6Zix0ZXh0OmR9fX1saXN0KGwpe2xldCBhPXRoaXMu'@;
put 'cnVsZXMuYmxvY2subGlzdC5leGVjKGwpO2lmKGEpe2xldCBkLGgsZix2LE0sRCxaLG5lLGNlLGJlLEVlLEJlLHFlPWFbMV0udHJpbSgpO2NvbnN0IHJ0PXFlLmxlbmd0aD4xLHB0PXt0eXBlOiJsaXN0IixyYXc6IiIsb3JkZXJlZDpydCxzdGFydDpydD8rcWUuc2xpY2UoMCwtMSk6IiIsbG9v'@;
put 'c2U6ITEsaXRlbXM6W119O3FlPXJ0P2BcXGR7MSw5fVxcJHtxZS5zbGljZSgtMSl9YDpgXFwke3FlfWAsdGhpcy5vcHRpb25zLnBlZGFudGljJiYocWU9cnQ/cWU6IlsqKy1dIik7Y29uc3QgZHQ9bmV3IFJlZ0V4cChgXiggezAsM30ke3FlfSkoKD86W1x0IF1bXlxcbl0qKT8oPzpcXG58JCkp'@;
put 'YCk7Zm9yKDtsJiYoQmU9ITEsKGE9ZHQuZXhlYyhsKSkmJiF0aGlzLnJ1bGVzLmJsb2NrLmhyLnRlc3QobCkpOyl7aWYoZD1hWzBdLGw9bC5zdWJzdHJpbmcoZC5sZW5ndGgpLG5lPWFbMl0uc3BsaXQoIlxuIiwxKVswXS5yZXBsYWNlKC9eXHQrLyx2bj0+IiAiLnJlcGVhdCgzKnZuLmxlbmd0'@;
put 'aCkpLGNlPWwuc3BsaXQoIlxuIiwxKVswXSx0aGlzLm9wdGlvbnMucGVkYW50aWM/KHY9MixFZT1uZS50cmltTGVmdCgpKToodj1hWzJdLnNlYXJjaCgvW14gXS8pLHY9dj40PzE6dixFZT1uZS5zbGljZSh2KSx2Kz1hWzFdLmxlbmd0aCksRD0hMSwhbmUmJi9eICokLy50ZXN0KGNlKSYmKGQr'@;
put 'PWNlKyJcbiIsbD1sLnN1YnN0cmluZyhjZS5sZW5ndGgrMSksQmU9ITApLCFCZSl7Y29uc3Qgdm49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KD86WyorLV18XFxkezEsOX1bLildKSgoPzpbIFx0XVteXFxuXSopPyg/OlxcbnwkKSlgKSxDbj1uZXcgUmVnRXhwKGBeIHsw'@;
put 'LCR7TWF0aC5taW4oMyx2LTEpfX0oKD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpYCksdG49bmV3IFJlZ0V4cChgXiB7MCwke01hdGgubWluKDMsdi0xKX19KD86XGBcYFxgfH5+filgKSxNbj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx2LTEp'@;
put 'fX0jYCk7Zm9yKDtsJiYoYmU9bC5zcGxpdCgiXG4iLDEpWzBdLGNlPWJlLHRoaXMub3B0aW9ucy5wZWRhbnRpYyYmKGNlPWNlLnJlcGxhY2UoL14gezEsNH0oPz0oIHs0fSkqW14gXSkvZywiICAiKSksISh0bi50ZXN0KGNlKXx8TW4udGVzdChjZSl8fHZuLnRlc3QoY2UpfHxDbi50ZXN0KGwp'@;
put 'KSk7KXtpZihjZS5zZWFyY2goL1teIF0vKT49dnx8IWNlLnRyaW0oKSlFZSs9IlxuIitjZS5zbGljZSh2KTtlbHNle2lmKER8fG5lLnNlYXJjaCgvW14gXS8pPj00fHx0bi50ZXN0KG5lKXx8TW4udGVzdChuZSl8fENuLnRlc3QobmUpKWJyZWFrO0VlKz0iXG4iK2NlfSFEJiYhY2UudHJpbSgp'@;
put 'JiYoRD0hMCksZCs9YmUrIlxuIixsPWwuc3Vic3RyaW5nKGJlLmxlbmd0aCsxKSxuZT1jZS5zbGljZSh2KX19cHQubG9vc2V8fChaP3B0Lmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoZCkmJihaPSEwKSksdGhpcy5vcHRpb25zLmdmbSYmKGg9L15cW1sgeFhdXF0gLy5leGVjKEVlKSxoJiYo'@;
put 'Zj0iWyBdICIhPT1oWzBdLEVlPUVlLnJlcGxhY2UoL15cW1sgeFhdXF0gKy8sIiIpKSkscHQuaXRlbXMucHVzaCh7dHlwZToibGlzdF9pdGVtIixyYXc6ZCx0YXNrOiEhaCxjaGVja2VkOmYsbG9vc2U6ITEsdGV4dDpFZX0pLHB0LnJhdys9ZH1wdC5pdGVtc1twdC5pdGVtcy5sZW5ndGgtMV0u'@;
put 'cmF3PWQudHJpbVJpZ2h0KCkscHQuaXRlbXNbcHQuaXRlbXMubGVuZ3RoLTFdLnRleHQ9RWUudHJpbVJpZ2h0KCkscHQucmF3PXB0LnJhdy50cmltUmlnaHQoKTtjb25zdCBKdD1wdC5pdGVtcy5sZW5ndGg7Zm9yKE09MDtNPEp0O00rKylpZih0aGlzLmxleGVyLnN0YXRlLnRvcD0hMSxwdC5p'@;
put 'dGVtc1tNXS50b2tlbnM9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhwdC5pdGVtc1tNXS50ZXh0LFtdKSwhcHQubG9vc2Upe2NvbnN0IHZuPXB0Lml0ZW1zW01dLnRva2Vucy5maWx0ZXIodG49PiJzcGFjZSI9PT10bi50eXBlKSxDbj12bi5sZW5ndGg+MCYmdm4uc29tZSh0bj0+L1xuLipcbi8u'@;
put 'dGVzdCh0bi5yYXcpKTtwdC5sb29zZT1Dbn1pZihwdC5sb29zZSlmb3IoTT0wO008SnQ7TSsrKXB0Lml0ZW1zW01dLmxvb3NlPSEwO3JldHVybiBwdH19aHRtbChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaHRtbC5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9e3R5cGU6Imh0bWwiLGJsb2Nr'@;
put 'OiEwLHJhdzphWzBdLHByZTohdGhpcy5vcHRpb25zLnNhbml0aXplciYmKCJwcmUiPT09YVsxXXx8InNjcmlwdCI9PT1hWzFdfHwic3R5bGUiPT09YVsxXSksdGV4dDphWzBdfTtpZih0aGlzLm9wdGlvbnMuc2FuaXRpemUpe2NvbnN0IGg9dGhpcy5vcHRpb25zLnNhbml0aXplcj90aGlzLm9w'@;
put 'dGlvbnMuc2FuaXRpemVyKGFbMF0pOngxKGFbMF0pO2QudHlwZT0icGFyYWdyYXBoIixkLnRleHQ9aCxkLnRva2Vucz10aGlzLmxleGVyLmlubGluZShoKX1yZXR1cm4gZH19ZGVmKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5kZWYuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMV0udG9M'@;
put 'b3dlckNhc2UoKS5yZXBsYWNlKC9ccysvZywiICIpLGg9YVsyXT9hWzJdLnJlcGxhY2UoL148KC4qKT4kLywiJDEiKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpOiIiLGY9YVszXT9hWzNdLnN1YnN0cmluZygxLGFbM10ubGVuZ3RoLTEpLnJlcGxhY2UodGhpcy5y'@;
put 'dWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6YVszXTtyZXR1cm57dHlwZToiZGVmIix0YWc6ZCxyYXc6YVswXSxocmVmOmgsdGl0bGU6Zn19fXRhYmxlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay50YWJsZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9e3R5cGU6InRhYmxlIixoZWFkZXI6'@;
put 'ejZlKGFbMV0pLm1hcChoPT4oe3RleHQ6aH0pKSxhbGlnbjphWzJdLnJlcGxhY2UoL14gKnxcfCAqJC9nLCIiKS5zcGxpdCgvICpcfCAqLykscm93czphWzNdJiZhWzNdLnRyaW0oKT9hWzNdLnJlcGxhY2UoL1xuWyBcdF0qJC8sIiIpLnNwbGl0KCJcbiIpOltdfTtpZihkLmhlYWRlci5sZW5n'@;
put 'dGg9PT1kLmFsaWduLmxlbmd0aCl7ZC5yYXc9YVswXTtsZXQgZix2LE0sRCxoPWQuYWxpZ24ubGVuZ3RoO2ZvcihmPTA7ZjxoO2YrKylkLmFsaWduW2ZdPS9eICotKzogKiQvLnRlc3QoZC5hbGlnbltmXSk/InJpZ2h0IjovXiAqOi0rOiAqJC8udGVzdChkLmFsaWduW2ZdKT8iY2VudGVyIjov'@;
put 'XiAqOi0rICokLy50ZXN0KGQuYWxpZ25bZl0pPyJsZWZ0IjpudWxsO2ZvcihoPWQucm93cy5sZW5ndGgsZj0wO2Y8aDtmKyspZC5yb3dzW2ZdPXo2ZShkLnJvd3NbZl0sZC5oZWFkZXIubGVuZ3RoKS5tYXAoWj0+KHt0ZXh0Olp9KSk7Zm9yKGg9ZC5oZWFkZXIubGVuZ3RoLHY9MDt2PGg7disr'@;
put 'KWQuaGVhZGVyW3ZdLnRva2Vucz10aGlzLmxleGVyLmlubGluZShkLmhlYWRlclt2XS50ZXh0KTtmb3IoaD1kLnJvd3MubGVuZ3RoLHY9MDt2PGg7disrKWZvcihEPWQucm93c1t2XSxNPTA7TTxELmxlbmd0aDtNKyspRFtNXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoRFtNXS50ZXh0KTty'@;
put 'ZXR1cm4gZH19fWxoZWFkaW5nKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzphWzBdLGRlcHRoOiI9Ij09PWFbMl0uY2hhckF0KDApPzE6Mix0ZXh0OmFbMV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5l'@;
put 'KGFbMV0pfX1wYXJhZ3JhcGgobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9IlxuIj09PWFbMV0uY2hhckF0KGFbMV0ubGVuZ3RoLTEpP2FbMV0uc2xpY2UoMCwtMSk6YVsxXTtyZXR1cm57dHlwZToicGFyYWdyYXBoIixyYXc6YVsw'@;
put 'XSx0ZXh0OmQsdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGQpfX19dGV4dChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6InRleHQiLHJhdzphWzBdLHRleHQ6YVswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoYVswXSl9fWVzY2Fw'@;
put 'ZShsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OmFbMF0sdGV4dDp4MShhWzFdKX19dGFnKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMobCk7aWYoYSlyZXR1cm4hdGhpcy5sZXhlci5z'@;
put 'dGF0ZS5pbkxpbmsmJi9ePGEgL2kudGVzdChhWzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148XC9hPi9pLnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMSksIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYm'@;
put 'L148KHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4pL2kudGVzdChhWzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0'@;
put 'YXRlLmluUmF3QmxvY2s9ITEpLHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8idGV4dCI6Imh0bWwiLHJhdzphWzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxibG9jazohMSx0ZXh0OnRoaXMub3B0aW9u'@;
put 'cy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoYVswXSk6eDEoYVswXSk6YVswXX19bGluayhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlv'@;
put 'bnMucGVkYW50aWMmJi9ePC8udGVzdChkKSl7aWYoIS8+JC8udGVzdChkKSlyZXR1cm47Y29uc3Qgdj1hTihkLnNsaWNlKDAsLTEpLCJcXCIpO2lmKChkLmxlbmd0aC12Lmxlbmd0aCklMj09MClyZXR1cm59ZWxzZXtjb25zdCB2PWZ1bmN0aW9uIHNidChjLGwpe2lmKC0xPT09Yy5pbmRleE9m'@;
put 'KGxbMV0pKXJldHVybi0xO2NvbnN0IGE9Yy5sZW5ndGg7bGV0IGQ9MCxoPTA7Zm9yKDtoPGE7aCsrKWlmKCJcXCI9PT1jW2hdKWgrKztlbHNlIGlmKGNbaF09PT1sWzBdKWQrKztlbHNlIGlmKGNbaF09PT1sWzFdJiYoZC0tLGQ8MCkpcmV0dXJuIGg7cmV0dXJuLTF9KGFbMl0sIigpIik7aWYo'@;
put 'dj4tMSl7Y29uc3QgRD0oMD09PWFbMF0uaW5kZXhPZigiISIpPzU6NCkrYVsxXS5sZW5ndGgrdjthWzJdPWFbMl0uc3Vic3RyaW5nKDAsdiksYVswXT1hWzBdLnN1YnN0cmluZygwLEQpLnRyaW0oKSxhWzNdPSIifX1sZXQgaD1hWzJdLGY9IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtj'@;
put 'b25zdCB2PS9eKFteJyJdKlteXHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhoKTt2JiYoaD12WzFdLGY9dlszXSl9ZWxzZSBmPWFbM10/YVszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gaD1oLnRyaW0oKSwvXjwvLnRlc3QoaCkmJihoPXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmIS8+JC8udGVz'@;
put 'dChkKT9oLnNsaWNlKDEpOmguc2xpY2UoMSwtMSkpLFU2ZShhLHtocmVmOmgmJmgucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0aXRsZTpmJiZmLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIil9LGFbMF0sdGhpcy5sZXhlcil9fXJlZmxp'@;
put 'bmsobCxhKXtsZXQgZDtpZigoZD10aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5rLmV4ZWMobCkpfHwoZD10aGlzLnJ1bGVzLmlubGluZS5ub2xpbmsuZXhlYyhsKSkpe2xldCBoPShkWzJdfHxkWzFdKS5yZXBsYWNlKC9ccysvZywiICIpO2lmKGg9YVtoLnRvTG93ZXJDYXNlKCldLCFoKXtjb25z'@;
put 'dCBmPWRbMF0uY2hhckF0KDApO3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6Zix0ZXh0OmZ9fXJldHVybiBVNmUoZCxoLGRbMF0sdGhpcy5sZXhlcil9fWVtU3Ryb25nKGwsYSxkPSIiKXtsZXQgaD10aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5sRGVsaW0uZXhlYyhsKTtpZighKCFofHxoWzNd'@;
put 'JiZkLm1hdGNoKC9bXHB7TH1ccHtOfV0vdSkpJiYoIWhbMV0mJiFoWzJdfHwhZHx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhkKSkpe2NvbnN0IHY9aFswXS5sZW5ndGgtMTtsZXQgTSxELFo9dixuZT0wO2NvbnN0IGNlPSIqIj09PWhbMF1bMF0/dGhpcy5ydWxlcy5pbmxp'@;
put 'bmUuZW1TdHJvbmcuckRlbGltQXN0OnRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxpbVVuZDtmb3IoY2UubGFzdEluZGV4PTAsYT1hLnNsaWNlKC0xKmwubGVuZ3RoK3YpO251bGwhPShoPWNlLmV4ZWMoYSkpOyl7aWYoTT1oWzFdfHxoWzJdfHxoWzNdfHxoWzRdfHxoWzVdfHxoWzZd'@;
put 'LCFNKWNvbnRpbnVlO2lmKEQ9TS5sZW5ndGgsaFszXXx8aFs0XSl7Wis9RDtjb250aW51ZX1pZigoaFs1XXx8aFs2XSkmJnYlMyYmISgoditEKSUzKSl7bmUrPUQ7Y29udGludWV9aWYoWi09RCxaPjApY29udGludWU7RD1NYXRoLm1pbihELEQrWituZSk7Y29uc3QgYmU9bC5zbGljZSgwLHYr'@;
put 'aC5pbmRleCtEKzEpO2lmKE1hdGgubWluKHYsRCklMil7Y29uc3QgQmU9YmUuc2xpY2UoMSwtMSk7cmV0dXJue3R5cGU6ImVtIixyYXc6YmUsdGV4dDpCZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoQmUpfX1jb25zdCBFZT1iZS5zbGljZSgyLC0yKTtyZXR1cm57dHlwZToic3Ry'@;
put 'b25nIixyYXc6YmUsdGV4dDpFZSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmVUb2tlbnMoRWUpfX19fWNvZGVzcGFuKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuY29kZS5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0ucmVwbGFjZSgvXG4vZywiICIpO2NvbnN0IGg9L1teIF0vLnRlc3Qo'@;
put 'ZCksZj0vXiAvLnRlc3QoZCkmJi8gJC8udGVzdChkKTtyZXR1cm4gaCYmZiYmKGQ9ZC5zdWJzdHJpbmcoMSxkLmxlbmd0aC0xKSksZD14MShkLCEwKSx7dHlwZToiY29kZXNwYW4iLHJhdzphWzBdLHRleHQ6ZH19fWJyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuYnIuZXhlYyhsKTtp'@;
put 'ZihhKXJldHVybnt0eXBlOiJiciIscmF3OmFbMF19fWRlbChsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmRlbC5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImRlbCIscmF3OmFbMF0sdGV4dDphWzJdLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhhWzJdKX19YXV0b2xpbmso'@;
put 'bCxhKXtjb25zdCBkPXRoaXMucnVsZXMuaW5saW5lLmF1dG9saW5rLmV4ZWMobCk7aWYoZCl7bGV0IGgsZjtyZXR1cm4iQCI9PT1kWzJdPyhoPXgxKHRoaXMub3B0aW9ucy5tYW5nbGU/YShkWzFdKTpkWzFdKSxmPSJtYWlsdG86IitoKTooaD14MShkWzFdKSxmPWgpLHt0eXBlOiJsaW5rIixy'@;
put 'YXc6ZFswXSx0ZXh0OmgsaHJlZjpmLHRva2Vuczpbe3R5cGU6InRleHQiLHJhdzpoLHRleHQ6aH1dfX19dXJsKGwsYSl7bGV0IGQ7aWYoZD10aGlzLnJ1bGVzLmlubGluZS51cmwuZXhlYyhsKSl7bGV0IGgsZjtpZigiQCI9PT1kWzJdKWg9eDEodGhpcy5vcHRpb25zLm1hbmdsZT9hKGRbMF0p'@;
put 'OmRbMF0pLGY9Im1haWx0bzoiK2g7ZWxzZXtsZXQgdjtkb3t2PWRbMF0sZFswXT10aGlzLnJ1bGVzLmlubGluZS5fYmFja3BlZGFsLmV4ZWMoZFswXSlbMF19d2hpbGUodiE9PWRbMF0pO2g9eDEoZFswXSksZj0id3d3LiI9PT1kWzFdPyJodHRwOi8vIitkWzBdOmRbMF19cmV0dXJue3R5cGU6'@;
put 'ImxpbmsiLHJhdzpkWzBdLHRleHQ6aCxocmVmOmYsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmgsdGV4dDpofV19fX1pbmxpbmVUZXh0KGwsYSl7Y29uc3QgZD10aGlzLnJ1bGVzLmlubGluZS50ZXh0LmV4ZWMobCk7aWYoZCl7bGV0IGg7cmV0dXJuIGg9dGhpcy5sZXhlci5zdGF0ZS5pblJh'@;
put 'd0Jsb2NrP3RoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoZFswXSk6eDEoZFswXSk6ZFswXTp4MSh0aGlzLm9wdGlvbnMuc21hcnR5cGFudHM/YShkWzBdKTpkWzBdKSx7dHlwZToidGV4dCIscmF3OmRbMF0sdGV4dDpo'@;
put 'fX19fWNvbnN0IG1hPXtuZXdsaW5lOi9eKD86ICooPzpcbnwkKSkrLyxjb2RlOi9eKCB7NH1bXlxuXSsoPzpcbig/OiAqKD86XG58JCkpKik/KSsvLGZlbmNlczovXiB7MCwzfShgezMsfSg/PVteYFxuXSooPzpcbnwkKSl8fnszLH0pKFteXG5dKikoPzpcbnwkKSg/OnwoW1xzXFNdKj8pKD86'@;
put 'XG58JCkpKD86IHswLDN9XDFbfmBdKiAqKD89XG58JCl8JCkvLGhyOi9eIHswLDN9KCg/Oi1bXHQgXSopezMsfXwoPzpfWyBcdF0qKXszLH18KD86XCpbIFx0XSopezMsfSkoPzpcbit8JCkvLGhlYWRpbmc6L14gezAsM30oI3sxLDZ9KSg/PVxzfCQpKC4qKSg/OlxuK3wkKS8sYmxvY2txdW90'@;
put 'ZTovXiggezAsM30+ID8ocGFyYWdyYXBofFteXG5dKikoPzpcbnwkKSkrLyxsaXN0Oi9eKCB7MCwzfWJ1bGwpKFsgXHRdW15cbl0rPyk/KD86XG58JCkvLGh0bWw6Il4gezAsM30oPzo8KHNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpW1xccz5dW1xcc1xcU10qPyg/OjwvXFwxPlteXFxuXSpc'@;
put 'XG4rfCQpfGNvbW1lbnRbXlxcbl0qKFxcbit8JCl8PFxcP1tcXHNcXFNdKj8oPzpcXD8+XFxuKnwkKXw8IVtBLVpdW1xcc1xcU10qPyg/Oj5cXG4qfCQpfDwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/KD86XFxdXFxdPlxcbip8JCl8PC8/KHRhZykoPzogK3xcXG58Lz8+KVtcXHNcXFNdKj8oPzoo'@;
put 'PzpcXG4gKikrXFxufCQpfDwoPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKShbYS16XVtcXHctXSopKD86YXR0cmlidXRlKSo/ICovPz4oPz1bIFxcdF0qKD86XFxufCQpKVtcXHNcXFNdKj8oPzooPzpcXG4gKikrXFxufCQpfDwvKD8hc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbYS16'@;
put 'XVtcXHctXSpcXHMqPig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCkpIixkZWY6L14gezAsM31cWyhsYWJlbClcXTogKig/OlxuICopPyhbXjxcc11bXlxzXSp8PC4qPz4pKD86KD86ICsoPzpcbiAqKT98ICpcbiAqKSh0aXRsZSkpPyAqKD86XG4rfCQp'@;
put 'Lyx0YWJsZTpvTixsaGVhZGluZzovXigoPzooPyFeYnVsbCApLnxcbig/IVxufGJ1bGwgKSkrPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8sX3BhcmFncmFwaDovXihbXlxuXSsoPzpcbig/IWhyfGhlYWRpbmd8bGhlYWRpbmd8YmxvY2txdW90ZXxmZW5jZXN8bGlzdHxodG1sfHRhYmxl'@;
put 'fCArXG4pW15cbl0rKSopLyx0ZXh0Oi9eW15cbl0rLyxfbGFiZWw6Lyg/IVxzKlxdKSg/OlxcLnxbXlxbXF1cXF0pKy8sX3RpdGxlOi8oPzoiKD86XFwiP3xbXiJcXF0pKiJ8J1teJ1xuXSooPzpcblteJ1xuXSspKlxuPyd8XChbXigpXSpcKSkvfTttYS5kZWY9SWwobWEuZGVmKS5yZXBsYWNl'@;
put 'KCJsYWJlbCIsbWEuX2xhYmVsKS5yZXBsYWNlKCJ0aXRsZSIsbWEuX3RpdGxlKS5nZXRSZWdleCgpLG1hLmJ1bGxldD0vKD86WyorLV18XGR7MSw5fVsuKV0pLyxtYS5saXN0SXRlbVN0YXJ0PUlsKC9eKCAqKShidWxsKSAqLykucmVwbGFjZSgiYnVsbCIsbWEuYnVsbGV0KS5nZXRSZWdleCgp'@;
put 'LG1hLmxpc3Q9SWwobWEubGlzdCkucmVwbGFjZSgvYnVsbC9nLG1hLmJ1bGxldCkucmVwbGFjZSgiaHIiLCJcXG4rKD89XFwxPyg/Oig/Oi0gKil7Myx9fCg/Ol8gKil7Myx9fCg/OlxcKiAqKXszLH0pKD86XFxuK3wkKSkiKS5yZXBsYWNlKCJkZWYiLCJcXG4rKD89IittYS5kZWYuc291cmNl'@;
put 'KyIpIikuZ2V0UmVnZXgoKSxtYS5fdGFnPSJhZGRyZXNzfGFydGljbGV8YXNpZGV8YmFzZXxiYXNlZm9udHxibG9ja3F1b3RlfGJvZHl8Y2FwdGlvbnxjZW50ZXJ8Y29sfGNvbGdyb3VwfGRkfGRldGFpbHN8ZGlhbG9nfGRpcnxkaXZ8ZGx8ZHR8ZmllbGRzZXR8ZmlnY2FwdGlvbnxmaWd1cmV8'@;
put 'Zm9vdGVyfGZvcm18ZnJhbWV8ZnJhbWVzZXR8aFsxLTZdfGhlYWR8aGVhZGVyfGhyfGh0bWx8aWZyYW1lfGxlZ2VuZHxsaXxsaW5rfG1haW58bWVudXxtZW51aXRlbXxtZXRhfG5hdnxub2ZyYW1lc3xvbHxvcHRncm91cHxvcHRpb258cHxwYXJhbXxzZWN0aW9ufHNvdXJjZXxzdW1tYXJ5fHRh'@;
put 'YmxlfHRib2R5fHRkfHRmb290fHRofHRoZWFkfHRpdGxlfHRyfHRyYWNrfHVsIixtYS5fY29tbWVudD0vPCEtLSg/IS0/PilbXHNcU10qPyg/Oi0tPnwkKS8sbWEuaHRtbD1JbChtYS5odG1sLCJpIikucmVwbGFjZSgiY29tbWVudCIsbWEuX2NvbW1lbnQpLnJlcGxhY2UoInRhZyIsbWEuX3Rh'@;
put 'ZykucmVwbGFjZSgiYXR0cmlidXRlIiwvICtbYS16QS1aOl9dW1x3LjotXSooPzogKj0gKiJbXiJcbl0qInwgKj0gKidbXidcbl0qJ3wgKj0gKlteXHMiJz08PmBdKyk/LykuZ2V0UmVnZXgoKSxtYS5saGVhZGluZz1JbChtYS5saGVhZGluZykucmVwbGFjZSgvYnVsbC9nLG1hLmJ1bGxldCku'@;
put 'Z2V0UmVnZXgoKSxtYS5wYXJhZ3JhcGg9SWwobWEuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLG1hLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInx0YWJsZSIsIiIpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIg'@;
put 'ezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2Ny'@;
put 'aXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixtYS5fdGFnKS5nZXRSZWdleCgpLG1hLmJsb2NrcXVvdGU9SWwobWEuYmxvY2txdW90ZSkucmVwbGFjZSgicGFyYWdyYXBoIixtYS5wYXJhZ3JhcGgpLmdldFJlZ2V4KCksbWEubm9ybWFsPXsuLi5tYX0sbWEuZ2Zt'@;
put 'PXsuLi5tYS5ub3JtYWwsdGFibGU6Il4gKihbXlxcbiBdLipcXHwuKilcXG4gezAsM30oPzpcXHwgKik/KDo/LSs6PyAqKD86XFx8ICo6Py0rOj8gKikqKSg/OlxcfCAqKT8oPzpcXG4oKD86KD8hICpcXG58aHJ8aGVhZGluZ3xibG9ja3F1b3RlfGNvZGV8ZmVuY2VzfGxpc3R8aHRtbCkuKig/'@;
put 'OlxcbnwkKSkqKVxcbip8JCkifSxtYS5nZm0udGFibGU9SWwobWEuZ2ZtLnRhYmxlKS5yZXBsYWNlKCJociIsbWEuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJjb2RlIiwiIHs0fVteXFxuXSIp'@;
put 'LnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8'@;
put 'c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsbWEuX3RhZykuZ2V0UmVnZXgoKSxtYS5nZm0ucGFyYWdyYXBoPUlsKG1hLl9wYXJhZ3JhcGgpLnJlcGxhY2UoImhyIixtYS5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJ8bGhlYWRpbmci'@;
put 'LCIiKS5yZXBsYWNlKCJ0YWJsZSIsbWEuZ2ZtLnRhYmxlKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImZlbmNlcyIsIiB7MCwzfSg/OmB7Myx9KD89W15gXFxuXSpcXG4pfH57Myx9KVteXFxuXSpcXG4iKS5yZXBsYWNlKCJsaXN0IiwiIHswLDN9KD86WyorLV18'@;
put 'MVsuKV0pICIpLnJlcGxhY2UoImh0bWwiLCI8Lz8oPzp0YWcpKD86ICt8XFxufC8/Pil8PCg/OnNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWF8IS0tKSIpLnJlcGxhY2UoInRhZyIsbWEuX3RhZykuZ2V0UmVnZXgoKSxtYS5wZWRhbnRpYz17Li4ubWEubm9ybWFsLGh0bWw6SWwoIl4gKig/OmNv'@;
put 'bW1lbnQgKig/OlxcbnxcXHMqJCl8PCh0YWcpW1xcc1xcU10rPzwvXFwxPiAqKD86XFxuezIsfXxcXHMqJCl8PHRhZyg/OlwiW15cIl0qXCJ8J1teJ10qJ3xcXHNbXidcIi8+XFxzXSopKj8vPz4gKig/OlxcbnsyLH18XFxzKiQpKSIpLnJlcGxhY2UoImNvbW1lbnQiLG1hLl9jb21tZW50KS5y'@;
put 'ZXBsYWNlKC90YWcvZywiKD8hKD86YXxlbXxzdHJvbmd8c21hbGx8c3xjaXRlfHF8ZGZufGFiYnJ8ZGF0YXx0aW1lfGNvZGV8dmFyfHNhbXB8a2JkfHN1YnxzdXB8aXxifHV8bWFya3xydWJ5fHJ0fHJwfGJkaXxiZG98c3Bhbnxicnx3YnJ8aW5zfGRlbHxpbWcpXFxiKVxcdysoPyE6fFteXFx3'@;
put 'XFxzQF0qQClcXGIiKS5nZXRSZWdleCgpLGRlZjovXiAqXFsoW15cXV0rKVxdOiAqPD8oW15ccz5dKyk+Pyg/OiArKFsiKF1bXlxuXStbIildKSk/ICooPzpcbit8JCkvLGhlYWRpbmc6L14oI3sxLDZ9KSguKikoPzpcbit8JCkvLGZlbmNlczpvTixsaGVhZGluZzovXiguKz8pXG4gezAsM30o'@;
put 'PSt8LSspICooPzpcbit8JCkvLHBhcmFncmFwaDpJbChtYS5ub3JtYWwuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLG1hLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiICojezEsNn0gKlteXG5dIikucmVwbGFjZSgibGhlYWRpbmciLG1hLmxoZWFkaW5nKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwi'@;
put 'IHswLDN9PiIpLnJlcGxhY2UoInxmZW5jZXMiLCIiKS5yZXBsYWNlKCJ8bGlzdCIsIiIpLnJlcGxhY2UoInxodG1sIiwiIikuZ2V0UmVnZXgoKX07Y29uc3Qga289e2VzY2FwZTovXlxcKFshIiMkJSYnKCkqKyxcLS4vOjs8PT4/QFxbXF1cXF5fYHt8fX5dKS8sYXV0b2xpbms6L148KHNjaGVt'@;
put 'ZTpbXlxzXHgwMC1ceDFmPD5dKnxlbWFpbCk+Lyx1cmw6b04sdGFnOiJeY29tbWVudHxePC9bYS16QS1aXVtcXHc6LV0qXFxzKj58XjxbYS16QS1aXVtcXHctXSooPzphdHRyaWJ1dGUpKj9cXHMqLz8+fF48XFw/W1xcc1xcU10qP1xcPz58XjwhW2EtekEtWl0rXFxzW1xcc1xcU10qPz58Xjwh'@;
put 'XFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPiIsbGluazovXiE/XFsobGFiZWwpXF1cKFxzKihocmVmKSg/OlxzKyh0aXRsZSkpP1xzKlwpLyxyZWZsaW5rOi9eIT9cWyhsYWJlbClcXVxbKHJlZilcXS8sbm9saW5rOi9eIT9cWyhyZWYpXF0oPzpcW1xdKT8vLHJlZmxpbmtTZWFyY2g6InJl'@;
put 'Zmxpbmt8bm9saW5rKD8hXFwoKSIsZW1TdHJvbmc6e2xEZWxpbTovXig/OlwqKyg/OigoPyFcKilbcHVuY3RdKXxbXlxzKl0pKXxeXysoPzooKD8hXylbcHVuY3RdKXwoW15cc19dKSkvLHJEZWxpbUFzdDovXlteXypdKj9fX1teXypdKj9cKlteXypdKj8oPz1fXyl8W14qXSsoPz1bXipdKXwo'@;
put 'PyFcKilbcHVuY3RdKFwqKykoPz1bXHNdfCQpfFtecHVuY3Rcc10oXCorKSg/IVwqKSg/PVtwdW5jdFxzXXwkKXwoPyFcKilbcHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pfFtcc10oXCorKSg/IVwqKSg/PVtwdW5jdF0pfCg/IVwqKVtwdW5jdF0oXCorKSg/IVwqKSg/PVtwdW5jdF0pfFte'@;
put 'cHVuY3Rcc10oXCorKSg/PVtecHVuY3Rcc10pLyxyRGVsaW1VbmQ6L15bXl8qXSo/XCpcKlteXypdKj9fW15fKl0qPyg/PVwqXCopfFteX10rKD89W15fXSl8KD8hXylbcHVuY3RdKF8rKSg/PVtcc118JCl8W15wdW5jdFxzXShfKykoPyFfKSg/PVtwdW5jdFxzXXwkKXwoPyFfKVtwdW5jdFxz'@;
put 'XShfKykoPz1bXnB1bmN0XHNdKXxbXHNdKF8rKSg/IV8pKD89W3B1bmN0XSl8KD8hXylbcHVuY3RdKF8rKSg/IV8pKD89W3B1bmN0XSkvfSxjb2RlOi9eKGArKShbXmBdfFteYF1bXHNcU10qP1teYF0pXDEoPyFgKS8sYnI6L14oIHsyLH18XFwpXG4oPyFccyokKS8sZGVsOm9OLHRleHQ6L14o'@;
put 'YCt8W15gXSkoPzooPz0gezIsfVxuKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKl9dfFxiX3wkKXxbXiBdKD89IHsyLH1cbikpKS8scHVuY3R1YXRpb246L14oKD8hWypfXSlbXHNwdW5jdHVhdGlvbl0pL307ZnVuY3Rpb24gdWJ0KGMpe3JldHVybiBjLnJlcGxhY2UoLy0tLS9nLCJcdTIwMTQi'@;
put 'KS5yZXBsYWNlKC8tLS9nLCJcdTIwMTMiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7IlxzXSknL2csIiQxXHUyMDE4IikucmVwbGFjZSgvJy9nLCJcdTIwMTkiKS5yZXBsYWNlKC8oXnxbLVx1MjAxNC8oXFt7XHUyMDE4XHNdKSIvZywiJDFcdTIwMWMiKS5yZXBsYWNlKC8iL2csIlx1MjAx'@;
put 'ZCIpLnJlcGxhY2UoL1wuezN9L2csIlx1MjAyNiIpfWZ1bmN0aW9uIFo2ZShjKXtsZXQgYSxkLGw9IiI7Y29uc3QgaD1jLmxlbmd0aDtmb3IoYT0wO2E8aDthKyspZD1jLmNoYXJDb2RlQXQoYSksTWF0aC5yYW5kb20oKT4uNSYmKGQ9IngiK2QudG9TdHJpbmcoMTYpKSxsKz0iJiMiK2QrIjsi'@;
put 'O3JldHVybiBsfWtvLl9wdW5jdHVhdGlvbj0iXFxwe1B9JCs8PT5gXnx+Iixrby5wdW5jdHVhdGlvbj1JbChrby5wdW5jdHVhdGlvbiwidSIpLnJlcGxhY2UoL3B1bmN0dWF0aW9uL2csa28uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGtvLmJsb2NrU2tpcD0vXFtbXltcXV0qP1xdXChbXlwo'@;
put 'XCldKj9cKXxgW15gXSo/YHw8W148Pl0qPz4vZyxrby5hbnlQdW5jdHVhdGlvbj0vXFxbcHVuY3RdL2csa28uX2VzY2FwZXM9L1xcKFtwdW5jdF0pL2csa28uX2NvbW1lbnQ9SWwobWEuX2NvbW1lbnQpLnJlcGxhY2UoIig/Oi0tXHgzZXwkKSIsIi0tXHgzZSIpLmdldFJlZ2V4KCksa28uZW1T'@;
put 'dHJvbmcubERlbGltPUlsKGtvLmVtU3Ryb25nLmxEZWxpbSwidSIpLnJlcGxhY2UoL3B1bmN0L2csa28uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGtvLmVtU3Ryb25nLnJEZWxpbUFzdD1JbChrby5lbVN0cm9uZy5yRGVsaW1Bc3QsImd1IikucmVwbGFjZSgvcHVuY3QvZyxrby5fcHVuY3R1'@;
put 'YXRpb24pLmdldFJlZ2V4KCksa28uZW1TdHJvbmcuckRlbGltVW5kPUlsKGtvLmVtU3Ryb25nLnJEZWxpbVVuZCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLGtvLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxrby5hbnlQdW5jdHVhdGlvbj1JbChrby5hbnlQdW5jdHVhdGlvbiwiZ3UiKS5yZXBs'@;
put 'YWNlKC9wdW5jdC9nLGtvLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxrby5fZXNjYXBlcz1JbChrby5fZXNjYXBlcywiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLGtvLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxrby5fc2NoZW1lPS9bYS16QS1aXVthLXpBLVowLTkrLi1dezEsMzF9Lyxrby5f'@;
put 'ZW1haWw9L1thLXpBLVowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rKEApW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2MX1bYS16QS1aMC05XSk/KD86XC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKyg/IVstX10pLyxrby5hdXRvbGluaz1JbChr'@;
put 'by5hdXRvbGluaykucmVwbGFjZSgic2NoZW1lIixrby5fc2NoZW1lKS5yZXBsYWNlKCJlbWFpbCIsa28uX2VtYWlsKS5nZXRSZWdleCgpLGtvLl9hdHRyaWJ1dGU9L1xzK1thLXpBLVo6X11bXHcuOi1dKig/OlxzKj1ccyoiW14iXSoifFxzKj1ccyonW14nXSonfFxzKj1ccypbXlxzIic9PD5g'@;
put 'XSspPy8sa28udGFnPUlsKGtvLnRhZykucmVwbGFjZSgiY29tbWVudCIsa28uX2NvbW1lbnQpLnJlcGxhY2UoImF0dHJpYnV0ZSIsa28uX2F0dHJpYnV0ZSkuZ2V0UmVnZXgoKSxrby5fbGFiZWw9Lyg/OlxbKD86XFwufFteXFtcXVxcXSkqXF18XFwufGBbXmBdKmB8W15cW1xdXFxgXSkqPy8s'@;
put 'a28uX2hyZWY9LzwoPzpcXC58W15cbjw+XFxdKSs+fFteXHNceDAwLVx4MWZdKi8sa28uX3RpdGxlPS8iKD86XFwiP3xbXiJcXF0pKiJ8Jyg/OlxcJz98W14nXFxdKSonfFwoKD86XFxcKT98W14pXFxdKSpcKS8sa28ubGluaz1JbChrby5saW5rKS5yZXBsYWNlKCJsYWJlbCIsa28uX2xhYmVs'@;
put 'KS5yZXBsYWNlKCJocmVmIixrby5faHJlZikucmVwbGFjZSgidGl0bGUiLGtvLl90aXRsZSkuZ2V0UmVnZXgoKSxrby5yZWZsaW5rPUlsKGtvLnJlZmxpbmspLnJlcGxhY2UoImxhYmVsIixrby5fbGFiZWwpLnJlcGxhY2UoInJlZiIsbWEuX2xhYmVsKS5nZXRSZWdleCgpLGtvLm5vbGluaz1J'@;
put 'bChrby5ub2xpbmspLnJlcGxhY2UoInJlZiIsbWEuX2xhYmVsKS5nZXRSZWdleCgpLGtvLnJlZmxpbmtTZWFyY2g9SWwoa28ucmVmbGlua1NlYXJjaCwiZyIpLnJlcGxhY2UoInJlZmxpbmsiLGtvLnJlZmxpbmspLnJlcGxhY2UoIm5vbGluayIsa28ubm9saW5rKS5nZXRSZWdleCgpLGtvLm5v'@;
put 'cm1hbD17Li4ua299LGtvLnBlZGFudGljPXsuLi5rby5ub3JtYWwsc3Ryb25nOntzdGFydDovXl9ffFwqXCovLG1pZGRsZTovXl9fKD89XFMpKFtcc1xTXSo/XFMpX18oPyFfKXxeXCpcKig/PVxTKShbXHNcU10qP1xTKVwqXCooPyFcKikvLGVuZEFzdDovXCpcKig/IVwqKS9nLGVuZFVuZDov'@;
put 'X18oPyFfKS9nfSxlbTp7c3RhcnQ6L15ffFwqLyxtaWRkbGU6L14oKVwqKD89XFMpKFtcc1xTXSo/XFMpXCooPyFcKil8Xl8oPz1cUykoW1xzXFNdKj9cUylfKD8hXykvLGVuZEFzdDovXCooPyFcKikvZyxlbmRVbmQ6L18oPyFfKS9nfSxsaW5rOklsKC9eIT9cWyhsYWJlbClcXVwoKC4qPylc'@;
put 'KS8pLnJlcGxhY2UoImxhYmVsIixrby5fbGFiZWwpLmdldFJlZ2V4KCkscmVmbGluazpJbCgvXiE/XFsobGFiZWwpXF1ccypcWyhbXlxdXSopXF0vKS5yZXBsYWNlKCJsYWJlbCIsa28uX2xhYmVsKS5nZXRSZWdleCgpfSxrby5nZm09ey4uLmtvLm5vcm1hbCxlc2NhcGU6SWwoa28uZXNjYXBl'@;
put 'KS5yZXBsYWNlKCJdKSIsIn58XSkiKS5nZXRSZWdleCgpLF9leHRlbmRlZF9lbWFpbDovW0EtWmEtejAtOS5fKy1dKyhAKVthLXpBLVowLTktX10rKD86XC5bYS16QS1aMC05LV9dKlthLXpBLVowLTldKSsoPyFbLV9dKS8sdXJsOi9eKCg/OmZ0cHxodHRwcz8pOlwvXC98d3d3XC4pKD86W2Et'@;
put 'ekEtWjAtOVwtXStcLj8pK1teXHM8XSp8XmVtYWlsLyxfYmFja3BlZGFsOi8oPzpbXj8hLiw6OypfJyJ+KCkmXSt8XChbXildKlwpfCYoPyFbYS16QS1aMC05XSs7JCl8Wz8hLiw6OypfJyJ+KV0rKD8hJCkpKy8sZGVsOi9eKH5+PykoPz1bXlxzfl0pKFtcc1xTXSo/W15cc35dKVwxKD89W15+'@;
put 'XXwkKS8sdGV4dDovXihbYH5dK3xbXmB+XSkoPzooPz0gezIsfVxuKXwoPz1bYS16QS1aMC05LiEjJCUmJyorXC89P19ge1x8fX4tXStAKXxbXHNcU10qPyg/Oig/PVtcXDwhXFtgKn5fXXxcYl98aHR0cHM/OlwvXC98ZnRwOlwvXC98d3d3XC58JCl8W14gXSg/PSB7Mix9XG4pfFteYS16QS1a'@;
put 'MC05LiEjJCUmJyorXC89P19ge1x8fX4tXSg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApKSkvfSxrby5nZm0udXJsPUlsKGtvLmdmbS51cmwsImkiKS5yZXBsYWNlKCJlbWFpbCIsa28uZ2ZtLl9leHRlbmRlZF9lbWFpbCkuZ2V0UmVnZXgoKSxrby5icmVha3M9ey4uLmtv'@;
put 'LmdmbSxicjpJbChrby5icikucmVwbGFjZSgiezIsfSIsIioiKS5nZXRSZWdleCgpLHRleHQ6SWwoa28uZ2ZtLnRleHQpLnJlcGxhY2UoIlxcYl8iLCJcXGJffCB7Mix9XFxuIikucmVwbGFjZSgvXHsyLFx9L2csIioiKS5nZXRSZWdleCgpfTtjbGFzcyBvNHtjb25zdHJ1Y3RvcihsKXt0aGlz'@;
put 'LnRva2Vucz1bXSx0aGlzLnRva2Vucy5saW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMub3B0aW9ucz1sfHxDNix0aGlzLm9wdGlvbnMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXJ8fG5ldyBzTix0aGlzLnRva2VuaXplcj10aGlzLm9wdGlvbnMudG9rZW5pemVyLHRoaXMu'@;
put 'dG9rZW5pemVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudG9rZW5pemVyLmxleGVyPXRoaXMsdGhpcy5pbmxpbmVRdWV1ZT1bXSx0aGlzLnN0YXRlPXtpbkxpbms6ITEsaW5SYXdCbG9jazohMSx0b3A6ITB9O2NvbnN0IGE9e2Jsb2NrOm1hLm5vcm1hbCxpbmxpbmU6a28ubm9ybWFsfTt0'@;
put 'aGlzLm9wdGlvbnMucGVkYW50aWM/KGEuYmxvY2s9bWEucGVkYW50aWMsYS5pbmxpbmU9a28ucGVkYW50aWMpOnRoaXMub3B0aW9ucy5nZm0mJihhLmJsb2NrPW1hLmdmbSxhLmlubGluZT10aGlzLm9wdGlvbnMuYnJlYWtzP2tvLmJyZWFrczprby5nZm0pLHRoaXMudG9rZW5pemVyLnJ1bGVz'@;
put 'PWF9c3RhdGljIGdldCBydWxlcygpe3JldHVybntibG9jazptYSxpbmxpbmU6a299fXN0YXRpYyBsZXgobCxhKXtyZXR1cm4gbmV3IG80KGEpLmxleChsKX1zdGF0aWMgbGV4SW5saW5lKGwsYSl7cmV0dXJuIG5ldyBvNChhKS5pbmxpbmVUb2tlbnMobCl9bGV4KGwpe2xldCBhO2ZvcihsPWwu'@;
put 'cmVwbGFjZSgvXHJcbnxcci9nLCJcbiIpLHRoaXMuYmxvY2tUb2tlbnMobCx0aGlzLnRva2Vucyk7YT10aGlzLmlubGluZVF1ZXVlLnNoaWZ0KCk7KXRoaXMuaW5saW5lVG9rZW5zKGEuc3JjLGEudG9rZW5zKTtyZXR1cm4gdGhpcy50b2tlbnN9YmxvY2tUb2tlbnMobCxhPVtdKXtsZXQgZCxo'@;
put 'LGYsdjtmb3IobD10aGlzLm9wdGlvbnMucGVkYW50aWM/bC5yZXBsYWNlKC9cdC9nLCIgICAgIikucmVwbGFjZSgvXiArJC9nbSwiIik6bC5yZXBsYWNlKC9eKCAqKShcdCspL2dtLChNLEQsWik9PkQrIiAgICAiLnJlcGVhdChaLmxlbmd0aCkpO2w7KWlmKCEodGhpcy5vcHRpb25zLmV4dGVu'@;
put 'c2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jay5zb21lKE09PiEhKGQ9TS5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCksITApKSkpe2lmKGQ9dGhpcy50'@;
put 'b2tlbml6ZXIuc3BhY2UobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSwxPT09ZC5yYXcubGVuZ3RoJiZhLmxlbmd0aD4wP2FbYS5sZW5ndGgtMV0ucmF3Kz0iXG4iOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmNvZGUobCkpe2w9bC5zdWJzdHJpbmcoZC5y'@;
put 'YXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/YS5wdXNoKGQpOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3Jj'@;
put 'PWgudGV4dCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5mZW5jZXMobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5oZWFkaW5nKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQp'@;
put 'O2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaHIobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5ibG9ja3F1b3RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVl'@;
put 'fWlmKGQ9dGhpcy50b2tlbml6ZXIubGlzdChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmh0bWwobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRv'@;
put 'a2VuaXplci5kZWYobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0sIWh8fCJwYXJhZ3JhcGgiIT09aC50eXBlJiYidGV4dCIhPT1oLnR5cGU/dGhpcy50b2tlbnMubGlua3NbZC50YWddfHwodGhpcy50b2tlbnMubGlua3NbZC50YWddPXtocmVmOmQuaHJl'@;
put 'Zix0aXRsZTpkLnRpdGxlfSk6KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnJhdyx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGFibGUobCkpe2w9bC5zdWJzdHJpbmco'@;
put 'ZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNp'@;
put 'b25zLnN0YXJ0QmxvY2spe2xldCBNPTEvMDtjb25zdCBEPWwuc2xpY2UoMSk7bGV0IFo7dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jay5mb3JFYWNoKGZ1bmN0aW9uKG5lKXtaPW5lLmNhbGwoe2xleGVyOnRoaXN9LEQpLCJudW1iZXIiPT10eXBlb2YgWiYmWj49MCYmKE09TWF0'@;
put 'aC5taW4oTSxaKSl9KSxNPDEvMCYmTT49MCYmKGY9bC5zdWJzdHJpbmcoMCxNKzEpKX1pZih0aGlzLnN0YXRlLnRvcCYmKGQ9dGhpcy50b2tlbml6ZXIucGFyYWdyYXBoKGYpKSl7aD1hW2EubGVuZ3RoLTFdLHYmJiJwYXJhZ3JhcGgiPT09aC50eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRl'@;
put 'eHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTphLnB1c2goZCksdj1mLmxlbmd0aCE9PWwubGVuZ3RoLGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKTtjb250aW51ZX1p'@;
put 'ZihkPXRoaXMudG9rZW5pemVyLnRleHQobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09aC50eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVR'@;
put 'dWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYobCl7Y29uc3QgTT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2wuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKE0pO2JyZWFr'@;
put 'fXRocm93IG5ldyBFcnJvcihNKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLGF9aW5saW5lKGwsYT1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOmwsdG9rZW5zOmF9KSxhfWlubGluZVRva2VucyhsLGE9W10pe2xldCBkLGgsZixNLEQsWix2PWw7aWYodGhpcy50b2tl'@;
put 'bnMubGlua3Mpe2NvbnN0IG5lPU9iamVjdC5rZXlzKHRoaXMudG9rZW5zLmxpbmtzKTtpZihuZS5sZW5ndGg+MClmb3IoO251bGwhPShNPXRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmV4ZWModikpOyluZS5pbmNsdWRlcyhNWzBdLnNsaWNlKE1bMF0ubGFzdElu'@;
put 'ZGV4T2YoIlsiKSsxLC0xKSkmJih2PXYuc2xpY2UoMCxNLmluZGV4KSsiWyIrImEiLnJlcGVhdChNWzBdLmxlbmd0aC0yKSsiXSIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5sYXN0SW5kZXgpKX1mb3IoO251bGwhPShNPXRoaXMudG9rZW5pemVy'@;
put 'LnJ1bGVzLmlubGluZS5ibG9ja1NraXAuZXhlYyh2KSk7KXY9di5zbGljZSgwLE0uaW5kZXgpKyJbIisiYSIucmVwZWF0KE1bMF0ubGVuZ3RoLTIpKyJdIit2LnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5ibG9ja1NraXAubGFzdEluZGV4KTtmb3IoO251bGwhPShNPXRoaXMu'@;
put 'dG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5leGVjKHYpKTspdj12LnNsaWNlKDAsTS5pbmRleCkrIisrIit2LnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5hbnlQdW5jdHVhdGlvbi5sYXN0SW5kZXgpO2Zvcig7bDspaWYoRHx8KFo9IiIpLEQ9ITEsISh0'@;
put 'aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuaW5saW5lJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUuc29tZShuZT0+ISEoZD1uZS5jYWxsKHtsZXhlcjp0aGlzfSxsLGEpKSYmKGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2go'@;
put 'ZCksITApKSkpe2lmKGQ9dGhpcy50b2tlbml6ZXIuZXNjYXBlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGFnKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0'@;
put 'ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxpbmsobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlz'@;
put 'LnRva2VuaXplci5yZWZsaW5rKGwsdGhpcy50b2tlbnMubGlua3MpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWQudHlwZSYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRleHQpOmEucHVzaChkKTtjb250'@;
put 'aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmVtU3Ryb25nKGwsdixaKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmNvZGVzcGFuKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRp'@;
put 'bnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYnIobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5kZWwobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRv'@;
put 'a2VuaXplci5hdXRvbGluayhsLFo2ZSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoIXRoaXMuc3RhdGUuaW5MaW5rJiYoZD10aGlzLnRva2VuaXplci51cmwobCxaNmUpKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtj'@;
put 'b250aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lKXtsZXQgbmU9MS8wO2NvbnN0IGNlPWwuc2xpY2UoMSk7bGV0IGJlO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2goZnVuY3Rp'@;
put 'b24oRWUpe2JlPUVlLmNhbGwoe2xleGVyOnRoaXN9LGNlKSwibnVtYmVyIj09dHlwZW9mIGJlJiZiZT49MCYmKG5lPU1hdGgubWluKG5lLGJlKSl9KSxuZTwxLzAmJm5lPj0wJiYoZj1sLnN1YnN0cmluZygwLG5lKzEpKX1pZihkPXRoaXMudG9rZW5pemVyLmlubGluZVRleHQoZix1YnQpKXts'@;
put 'PWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksIl8iIT09ZC5yYXcuc2xpY2UoLTEpJiYoWj1kLnJhdy5zbGljZSgtMSkpLEQ9ITAsaD1hW2EubGVuZ3RoLTFdLGgmJiJ0ZXh0Ij09PWgudHlwZT8oaC5yYXcrPWQucmF3LGgudGV4dCs9ZC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYobCl7'@;
put 'Y29uc3QgbmU9IkluZmluaXRlIGxvb3Agb24gYnl0ZTogIitsLmNoYXJDb2RlQXQoMCk7aWYodGhpcy5vcHRpb25zLnNpbGVudCl7Y29uc29sZS5lcnJvcihuZSk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKG5lKX19cmV0dXJuIGF9fWNsYXNzIGxOe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9u'@;
put 'cz1sfHxDNn1jb2RlKGwsYSxkKXtjb25zdCBoPShhfHwiIikubWF0Y2goL1xTKi8pWzBdO2lmKHRoaXMub3B0aW9ucy5oaWdobGlnaHQpe2NvbnN0IGY9dGhpcy5vcHRpb25zLmhpZ2hsaWdodChsLGgpO251bGwhPWYmJmYhPT1sJiYoZD0hMCxsPWYpfXJldHVybiBsPWwucmVwbGFjZSgvXG4k'@;
put 'LywiIikrIlxuIixoPyc8cHJlPjxjb2RlIGNsYXNzPSInK3RoaXMub3B0aW9ucy5sYW5nUHJlZml4K3gxKGgpKyciPicrKGQ/bDp4MShsLCEwKSkrIjwvY29kZT48L3ByZT5cbiI6IjxwcmU+PGNvZGU+IisoZD9sOngxKGwsITApKSsiPC9jb2RlPjwvcHJlPlxuIn1ibG9ja3F1b3RlKGwpe3Jl'@;
put 'dHVybmA8YmxvY2txdW90ZT5cbiR7bH08L2Jsb2NrcXVvdGU+XG5gfWh0bWwobCxhKXtyZXR1cm4gbH1oZWFkaW5nKGwsYSxkLGgpe3JldHVybiB0aGlzLm9wdGlvbnMuaGVhZGVySWRzP2A8aCR7YX0gaWQ9IiR7dGhpcy5vcHRpb25zLmhlYWRlclByZWZpeCtoLnNsdWcoZCl9Ij4ke2x9PC9o'@;
put 'JHthfT5cbmA6YDxoJHthfT4ke2x9PC9oJHthfT5cbmB9aHIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8aHIvPlxuIjoiPGhyPlxuIn1saXN0KGwsYSxkKXtjb25zdCBoPWE/Im9sIjoidWwiO3JldHVybiI8IitoKyhhJiYxIT09ZD8nIHN0YXJ0PSInK2QrJyInOiIiKSsiPlxuIits'@;
put 'KyI8LyIraCsiPlxuIn1saXN0aXRlbShsKXtyZXR1cm5gPGxpPiR7bH08L2xpPlxuYH1jaGVja2JveChsKXtyZXR1cm4iPGlucHV0ICIrKGw/J2NoZWNrZWQ9IiIgJzoiIikrJ2Rpc2FibGVkPSIiIHR5cGU9ImNoZWNrYm94IicrKHRoaXMub3B0aW9ucy54aHRtbD8iIC8iOiIiKSsiPiAifXBh'@;
put 'cmFncmFwaChsKXtyZXR1cm5gPHA+JHtsfTwvcD5cbmB9dGFibGUobCxhKXtyZXR1cm4gYSYmKGE9YDx0Ym9keT4ke2F9PC90Ym9keT5gKSwiPHRhYmxlPlxuPHRoZWFkPlxuIitsKyI8L3RoZWFkPlxuIithKyI8L3RhYmxlPlxuIn10YWJsZXJvdyhsKXtyZXR1cm5gPHRyPlxuJHtsfTwvdHI+'@;
put 'XG5gfXRhYmxlY2VsbChsLGEpe2NvbnN0IGQ9YS5oZWFkZXI/InRoIjoidGQiO3JldHVybihhLmFsaWduP2A8JHtkfSBhbGlnbj0iJHthLmFsaWdufSI+YDpgPCR7ZH0+YCkrbCtgPC8ke2R9PlxuYH1zdHJvbmcobCl7cmV0dXJuYDxzdHJvbmc+JHtsfTwvc3Ryb25nPmB9ZW0obCl7cmV0dXJu'@;
put 'YDxlbT4ke2x9PC9lbT5gfWNvZGVzcGFuKGwpe3JldHVybmA8Y29kZT4ke2x9PC9jb2RlPmB9YnIoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnhodG1sPyI8YnIvPiI6Ijxicj4ifWRlbChsKXtyZXR1cm5gPGRlbD4ke2x9PC9kZWw+YH1saW5rKGwsYSxkKXtpZihudWxsPT09KGw9ajZlKHRoaXMu'@;
put 'b3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxsKSkpcmV0dXJuIGQ7bGV0IGg9JzxhIGhyZWY9IicrbCsnIic7cmV0dXJuIGEmJihoKz0nIHRpdGxlPSInK2ErJyInKSxoKz0iPiIrZCsiPC9hPiIsaH1pbWFnZShsLGEsZCl7aWYobnVsbD09PShsPWo2ZSh0aGlzLm9wdGlv'@;
put 'bnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBkO2xldCBoPWA8aW1nIHNyYz0iJHtsfSIgYWx0PSIke2R9ImA7cmV0dXJuIGEmJihoKz1gIHRpdGxlPSIke2F9ImApLGgrPXRoaXMub3B0aW9ucy54aHRtbD8iLz4iOiI+IixofXRleHQobCl7cmV0dXJuIGx9fWNs'@;
put 'YXNzIHR0ZXtzdHJvbmcobCl7cmV0dXJuIGx9ZW0obCl7cmV0dXJuIGx9Y29kZXNwYW4obCl7cmV0dXJuIGx9ZGVsKGwpe3JldHVybiBsfWh0bWwobCl7cmV0dXJuIGx9dGV4dChsKXtyZXR1cm4gbH1saW5rKGwsYSxkKXtyZXR1cm4iIitkfWltYWdlKGwsYSxkKXtyZXR1cm4iIitkfWJyKCl7'@;
put 'cmV0dXJuIiJ9fWNsYXNzIG50ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2Vlbj17fX1zZXJpYWxpemUobCl7cmV0dXJuIGwudG9Mb3dlckNhc2UoKS50cmltKCkucmVwbGFjZSgvPFshXC9hLXpdLio/Pi9naSwiIikucmVwbGFjZSgvW1x1MjAwMC1cdTIwNkZcdTJFMDAtXHUyRTdGXFwnISIjJCUm'@;
put 'KCkqKywuLzo7PD0+P0BbXF1eYHt8fX5dL2csIiIpLnJlcGxhY2UoL1xzL2csIi0iKX1nZXROZXh0U2FmZVNsdWcobCxhKXtsZXQgZD1sLGg9MDtpZih0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkoZCkpe2g9dGhpcy5zZWVuW2xdO2Rve2grKyxkPWwrIi0iK2h9d2hpbGUodGhpcy5zZWVuLmhh'@;
put 'c093blByb3BlcnR5KGQpKX1yZXR1cm4gYXx8KHRoaXMuc2VlbltsXT1oLHRoaXMuc2VlbltkXT0wKSxkfXNsdWcobCxhPXt9KXtjb25zdCBkPXRoaXMuc2VyaWFsaXplKGwpO3JldHVybiB0aGlzLmdldE5leHRTYWZlU2x1ZyhkLGEuZHJ5cnVuKX19Y2xhc3MgYTR7Y29uc3RydWN0b3IobCl7'@;
put 'dGhpcy5vcHRpb25zPWx8fEM2LHRoaXMub3B0aW9ucy5yZW5kZXJlcj10aGlzLm9wdGlvbnMucmVuZGVyZXJ8fG5ldyBsTix0aGlzLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcix0aGlzLnJlbmRlcmVyLm9wdGlvbnM9dGhpcy5vcHRpb25zLHRoaXMudGV4dFJlbmRlcmVyPW5ldyB0'@;
put 'dGUsdGhpcy5zbHVnZ2VyPW5ldyBudGV9c3RhdGljIHBhcnNlKGwsYSl7cmV0dXJuIG5ldyBhNChhKS5wYXJzZShsKX1zdGF0aWMgcGFyc2VJbmxpbmUobCxhKXtyZXR1cm4gbmV3IGE0KGEpLnBhcnNlSW5saW5lKGwpfXBhcnNlKGwsYT0hMCl7bGV0IGgsZix2LE0sRCxaLG5lLGNlLGJlLEVl'@;
put 'LEJlLHFlLHJ0LHB0LGR0LEp0LHZuLENuLHRuLGQ9IiI7Y29uc3QgTW49bC5sZW5ndGg7Zm9yKGg9MDtoPE1uO2grKylpZihFZT1sW2hdLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJl'@;
put 'bmRlcmVyc1tFZS50eXBlXSYmKHRuPXRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tFZS50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sRWUpLCExIT09dG58fCFbInNwYWNlIiwiaHIiLCJoZWFkaW5nIiwiY29kZSIsInRhYmxlIiwiYmxvY2txdW90ZSIsImxpc3QiLCJodG1sIiwi'@;
put 'cGFyYWdyYXBoIiwidGV4dCJdLmluY2x1ZGVzKEVlLnR5cGUpKSlkKz10bnx8IiI7ZWxzZSBzd2l0Y2goRWUudHlwZSl7Y2FzZSJzcGFjZSI6Y29udGludWU7Y2FzZSJociI6ZCs9dGhpcy5yZW5kZXJlci5ocigpO2NvbnRpbnVlO2Nhc2UiaGVhZGluZyI6ZCs9dGhpcy5yZW5kZXJlci5oZWFk'@;
put 'aW5nKHRoaXMucGFyc2VJbmxpbmUoRWUudG9rZW5zKSxFZS5kZXB0aCxCNmUodGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMsdGhpcy50ZXh0UmVuZGVyZXIpKSx0aGlzLnNsdWdnZXIpO2NvbnRpbnVlO2Nhc2UiY29kZSI6ZCs9dGhpcy5yZW5kZXJlci5jb2RlKEVlLnRleHQsRWUubGFuZyxF'@;
put 'ZS5lc2NhcGVkKTtjb250aW51ZTtjYXNlInRhYmxlIjpmb3IoY2U9IiIsbmU9IiIsTT1FZS5oZWFkZXIubGVuZ3RoLGY9MDtmPE07ZisrKW5lKz10aGlzLnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKEVlLmhlYWRlcltmXS50b2tlbnMpLHtoZWFkZXI6ITAsYWxpZ246RWUu'@;
put 'YWxpZ25bZl19KTtmb3IoY2UrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobmUpLGJlPSIiLE09RWUucm93cy5sZW5ndGgsZj0wO2Y8TTtmKyspe2ZvcihaPUVlLnJvd3NbZl0sbmU9IiIsRD1aLmxlbmd0aCx2PTA7djxEO3YrKyluZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJz'@;
put 'ZUlubGluZShaW3ZdLnRva2Vucykse2hlYWRlcjohMSxhbGlnbjpFZS5hbGlnblt2XX0pO2JlKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KG5lKX1kKz10aGlzLnJlbmRlcmVyLnRhYmxlKGNlLGJlKTtjb250aW51ZTtjYXNlImJsb2NrcXVvdGUiOmJlPXRoaXMucGFyc2UoRWUudG9rZW5zKSxk'@;
put 'Kz10aGlzLnJlbmRlcmVyLmJsb2NrcXVvdGUoYmUpO2NvbnRpbnVlO2Nhc2UibGlzdCI6Zm9yKEJlPUVlLm9yZGVyZWQscWU9RWUuc3RhcnQscnQ9RWUubG9vc2UsTT1FZS5pdGVtcy5sZW5ndGgsYmU9IiIsZj0wO2Y8TTtmKyspZHQ9RWUuaXRlbXNbZl0sSnQ9ZHQuY2hlY2tlZCx2bj1kdC50'@;
put 'YXNrLHB0PSIiLGR0LnRhc2smJihDbj10aGlzLnJlbmRlcmVyLmNoZWNrYm94KEp0KSxydD9kdC50b2tlbnMubGVuZ3RoPjAmJiJwYXJhZ3JhcGgiPT09ZHQudG9rZW5zWzBdLnR5cGU/KGR0LnRva2Vuc1swXS50ZXh0PUNuKyIgIitkdC50b2tlbnNbMF0udGV4dCxkdC50b2tlbnNbMF0udG9r'@;
put 'ZW5zJiZkdC50b2tlbnNbMF0udG9rZW5zLmxlbmd0aD4wJiYidGV4dCI9PT1kdC50b2tlbnNbMF0udG9rZW5zWzBdLnR5cGUmJihkdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQ9Q24rIiAiK2R0LnRva2Vuc1swXS50b2tlbnNbMF0udGV4dCkpOmR0LnRva2Vucy51bnNoaWZ0KHt0eXBlOiJ0'@;
put 'ZXh0Iix0ZXh0OkNufSk6cHQrPUNuKSxwdCs9dGhpcy5wYXJzZShkdC50b2tlbnMscnQpLGJlKz10aGlzLnJlbmRlcmVyLmxpc3RpdGVtKHB0LHZuLEp0KTtkKz10aGlzLnJlbmRlcmVyLmxpc3QoYmUsQmUscWUpO2NvbnRpbnVlO2Nhc2UiaHRtbCI6ZCs9dGhpcy5yZW5kZXJlci5odG1sKEVl'@;
put 'LnRleHQsRWUuYmxvY2spO2NvbnRpbnVlO2Nhc2UicGFyYWdyYXBoIjpkKz10aGlzLnJlbmRlcmVyLnBhcmFncmFwaCh0aGlzLnBhcnNlSW5saW5lKEVlLnRva2VucykpO2NvbnRpbnVlO2Nhc2UidGV4dCI6Zm9yKGJlPUVlLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKEVlLnRva2Vucyk6RWUu'@;
put 'dGV4dDtoKzE8TW4mJiJ0ZXh0Ij09PWxbaCsxXS50eXBlOylFZT1sWysraF0sYmUrPSJcbiIrKEVlLnRva2Vucz90aGlzLnBhcnNlSW5saW5lKEVlLnRva2Vucyk6RWUudGV4dCk7ZCs9YT90aGlzLnJlbmRlcmVyLnBhcmFncmFwaChiZSk6YmU7Y29udGludWU7ZGVmYXVsdDp7Y29uc3QgQ3I9'@;
put 'J1Rva2VuIHdpdGggIicrRWUudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoQ3IpO3Rocm93IG5ldyBFcnJvcihDcil9fXJldHVybiBkfXBhcnNlSW5saW5lKGwsYSl7YT1hfHx0aGlzLnJlbmRlcmVy'@;
put 'O2xldCBoLGYsdixkPSIiO2NvbnN0IE09bC5sZW5ndGg7Zm9yKGg9MDtoPE07aCsrKWlmKGY9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZi50eXBlXSYmKHY9'@;
put 'dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LGYpLCExIT09dnx8IVsiZXNjYXBlIiwiaHRtbCIsImxpbmsiLCJpbWFnZSIsInN0cm9uZyIsImVtIiwiY29kZXNwYW4iLCJiciIsImRlbCIsInRleHQiXS5pbmNsdWRlcyhmLnR5cGUp'@;
put 'KSlkKz12fHwiIjtlbHNlIHN3aXRjaChmLnR5cGUpe2Nhc2UiZXNjYXBlIjpjYXNlInRleHQiOmQrPWEudGV4dChmLnRleHQpO2JyZWFrO2Nhc2UiaHRtbCI6ZCs9YS5odG1sKGYudGV4dCk7YnJlYWs7Y2FzZSJsaW5rIjpkKz1hLmxpbmsoZi5ocmVmLGYudGl0bGUsdGhpcy5wYXJzZUlubGlu'@;
put 'ZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJpbWFnZSI6ZCs9YS5pbWFnZShmLmhyZWYsZi50aXRsZSxmLnRleHQpO2JyZWFrO2Nhc2Uic3Ryb25nIjpkKz1hLnN0cm9uZyh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImVtIjpkKz1hLmVtKHRoaXMucGFyc2VJbmxp'@;
put 'bmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiY29kZXNwYW4iOmQrPWEuY29kZXNwYW4oZi50ZXh0KTticmVhaztjYXNlImJyIjpkKz1hLmJyKCk7YnJlYWs7Y2FzZSJkZWwiOmQrPWEuZGVsKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IEQ9J1Rv'@;
put 'a2VuIHdpdGggIicrZi50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihEKTt0aHJvdyBuZXcgRXJyb3IoRCl9fXJldHVybiBkfX1jbGFzcyBjTntjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8'@;
put 'QzZ9c3RhdGljIHBhc3NUaHJvdWdoSG9va3M9bmV3IFNldChbInByZXByb2Nlc3MiLCJwb3N0cHJvY2VzcyJdKTtwcmVwcm9jZXNzKGwpe3JldHVybiBsfXBvc3Rwcm9jZXNzKGwpe3JldHVybiBsfX1jb25zdCBHOT1uZXcgY2xhc3MgZGJ0e2RlZmF1bHRzPXthc3luYzohMSxiYXNlVXJsOm51'@;
put 'bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2Fu'@;
put 'aXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX07b3B0aW9ucz10aGlzLnNldE9wdGlvbnM7cGFyc2U9dGhpcy4jZShvNC5sZXgsYTQucGFyc2UpO3BhcnNlSW5saW5lPXRoaXMuI2UobzQubGV4SW5saW5l'@;
put 'LGE0LnBhcnNlSW5saW5lKTtQYXJzZXI9YTQ7cGFyc2VyPWE0LnBhcnNlO1JlbmRlcmVyPWxOO1RleHRSZW5kZXJlcj10dGU7TGV4ZXI9bzQ7bGV4ZXI9bzQubGV4O1Rva2VuaXplcj1zTjtTbHVnZ2VyPW50ZTtIb29rcz1jTjtjb25zdHJ1Y3RvciguLi5sKXt0aGlzLnVzZSguLi5sKX13YWxr'@;
put 'VG9rZW5zKGwsYSl7bGV0IGQ9W107Zm9yKGNvbnN0IGggb2YgbClzd2l0Y2goZD1kLmNvbmNhdChhLmNhbGwodGhpcyxoKSksaC50eXBlKXtjYXNlInRhYmxlIjpmb3IoY29uc3QgZiBvZiBoLmhlYWRlcilkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhmLnRva2VucyxhKSk7Zm9yKGNvbnN0'@;
put 'IGYgb2YgaC5yb3dzKWZvcihjb25zdCB2IG9mIGYpZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnModi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UibGlzdCI6ZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaC5pdGVtcyxhKSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMm'@;
put 'JnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucy5jaGlsZFRva2VucyYmdGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2gudHlwZV0/dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zW2gudHlwZV0uZm9yRWFjaChmPT57ZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tl'@;
put 'bnMoaFtmXSxhKSl9KTpoLnRva2VucyYmKGQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGgudG9rZW5zLGEpKSl9cmV0dXJuIGR9dXNlKC4uLmwpe2NvbnN0IGE9dGhpcy5kZWZhdWx0cy5leHRlbnNpb25zfHx7cmVuZGVyZXJzOnt9LGNoaWxkVG9rZW5zOnt9fTtyZXR1cm4gbC5mb3JFYWNo'@;
put 'KGQ9Pntjb25zdCBoPXsuLi5kfTtpZihoLmFzeW5jPXRoaXMuZGVmYXVsdHMuYXN5bmN8fGguYXN5bmN8fCExLGQuZXh0ZW5zaW9ucyYmKGQuZXh0ZW5zaW9ucy5mb3JFYWNoKGY9PntpZighZi5uYW1lKXRocm93IG5ldyBFcnJvcigiZXh0ZW5zaW9uIG5hbWUgcmVxdWlyZWQiKTtpZihmLnJl'@;
put 'bmRlcmVyKXtjb25zdCB2PWEucmVuZGVyZXJzW2YubmFtZV07YS5yZW5kZXJlcnNbZi5uYW1lXT12P2Z1bmN0aW9uKC4uLk0pe2xldCBEPWYucmVuZGVyZXIuYXBwbHkodGhpcyxNKTtyZXR1cm4hMT09PUQmJihEPXYuYXBwbHkodGhpcyxNKSksRH06Zi5yZW5kZXJlcn1pZihmLnRva2VuaXpl'@;
put 'cil7aWYoIWYubGV2ZWx8fCJibG9jayIhPT1mLmxldmVsJiYiaW5saW5lIiE9PWYubGV2ZWwpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbGV2ZWwgbXVzdCBiZSAnYmxvY2snIG9yICdpbmxpbmUnIik7YVtmLmxldmVsXT9hW2YubGV2ZWxdLnVuc2hpZnQoZi50b2tlbml6ZXIpOmFbZi5s'@;
put 'ZXZlbF09W2YudG9rZW5pemVyXSxmLnN0YXJ0JiYoImJsb2NrIj09PWYubGV2ZWw/YS5zdGFydEJsb2NrP2Euc3RhcnRCbG9jay5wdXNoKGYuc3RhcnQpOmEuc3RhcnRCbG9jaz1bZi5zdGFydF06ImlubGluZSI9PT1mLmxldmVsJiYoYS5zdGFydElubGluZT9hLnN0YXJ0SW5saW5lLnB1c2go'@;
put 'Zi5zdGFydCk6YS5zdGFydElubGluZT1bZi5zdGFydF0pKX1mLmNoaWxkVG9rZW5zJiYoYS5jaGlsZFRva2Vuc1tmLm5hbWVdPWYuY2hpbGRUb2tlbnMpfSksaC5leHRlbnNpb25zPWEpLGQucmVuZGVyZXIpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy5yZW5kZXJlcnx8bmV3IGxOKHRoaXMuZGVm'@;
put 'YXVsdHMpO2Zvcihjb25zdCB2IGluIGQucmVuZGVyZXIpe2NvbnN0IE09Zlt2XTtmW3ZdPSguLi5EKT0+e2xldCBaPWQucmVuZGVyZXJbdl0uYXBwbHkoZixEKTtyZXR1cm4hMT09PVomJihaPU0uYXBwbHkoZixEKSksWn19aC5yZW5kZXJlcj1mfWlmKGQudG9rZW5pemVyKXtjb25zdCBmPXRo'@;
put 'aXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgc04odGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IHYgaW4gZC50b2tlbml6ZXIpe2NvbnN0IE09Zlt2XTtmW3ZdPSguLi5EKT0+e2xldCBaPWQudG9rZW5pemVyW3ZdLmFwcGx5KGYsRCk7cmV0dXJuITE9PT1aJiYoWj1NLmFwcGx5KGYsRCkpLFp9'@;
put 'fWgudG9rZW5pemVyPWZ9aWYoZC5ob29rcyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLmhvb2tzfHxuZXcgY047Zm9yKGNvbnN0IHYgaW4gZC5ob29rcyl7Y29uc3QgTT1mW3ZdO2Zbdl09Y04ucGFzc1Rocm91Z2hIb29rcy5oYXModik/RD0+e2lmKHRoaXMuZGVmYXVsdHMuYXN5bmMpcmV0dXJu'@;
put 'IFByb21pc2UucmVzb2x2ZShkLmhvb2tzW3ZdLmNhbGwoZixEKSkudGhlbihuZT0+TS5jYWxsKGYsbmUpKTtjb25zdCBaPWQuaG9va3Nbdl0uY2FsbChmLEQpO3JldHVybiBNLmNhbGwoZixaKX06KC4uLkQpPT57bGV0IFo9ZC5ob29rc1t2XS5hcHBseShmLEQpO3JldHVybiExPT09WiYmKFo9'@;
put 'TS5hcHBseShmLEQpKSxafX1oLmhvb2tzPWZ9aWYoZC53YWxrVG9rZW5zKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMud2Fsa1Rva2VucztoLndhbGtUb2tlbnM9ZnVuY3Rpb24odil7bGV0IE09W107cmV0dXJuIE0ucHVzaChkLndhbGtUb2tlbnMuY2FsbCh0aGlzLHYpKSxmJiYoTT1NLmNvbmNh'@;
put 'dChmLmNhbGwodGhpcyx2KSkpLE19fXRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4uaH19KSx0aGlzfXNldE9wdGlvbnMobCl7cmV0dXJuIHRoaXMuZGVmYXVsdHM9ey4uLnRoaXMuZGVmYXVsdHMsLi4ubH0sdGhpc30jZShsLGEpe3JldHVybihkLGgsZik9PnsiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgaCYmKGY9aCxoPW51bGwpO2NvbnN0IHY9ey4uLmh9O2g9ey4uLnRoaXMuZGVmYXVsdHMsLi4udn07Y29uc3QgTT10aGlzLiN0KGguc2lsZW50LGguYXN5bmMsZik7aWYodHlwZW9mIGQ+InUifHxudWxsPT09ZClyZXR1cm4gTShuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBw'@;
put 'YXJhbWV0ZXIgaXMgdW5kZWZpbmVkIG9yIG51bGwiKSk7aWYoInN0cmluZyIhPXR5cGVvZiBkKXJldHVybiBNKG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyBvZiB0eXBlICIrT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGQpKyIsIHN0cmluZyBleHBlY3Rl'@;
put 'ZCIpKTtpZihmdW5jdGlvbiBsYnQoYyxsKXshY3x8Yy5zaWxlbnR8fChsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBjYWxsYmFjayBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUu'@;
put 'IFJlYWQgbW9yZSBoZXJlOiBodHRwczovL21hcmtlZC5qcy5vcmcvdXNpbmdfcHJvI2FzeW5jIiksKGMuc2FuaXRpemV8fGMuc2FuaXRpemVyKSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc2FuaXRpemUgYW5kIHNhbml0aXplciBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZl'@;
put 'cnNpb24gMC43LjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFJlYWQgbW9yZSBoZXJlOiBodHRwczovL21hcmtlZC5qcy5vcmcvIy9VU0lOR19BRFZBTkNFRC5tZCNvcHRpb25zIiksKGMuaGlnaGxpZ2h0fHwibGFuZ3VhZ2UtIiE9PWMu'@;
put 'bGFuZ1ByZWZpeCkmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGhpZ2hsaWdodCBhbmQgbGFuZ1ByZWZpeCBwYXJhbWV0ZXJzIGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIElu'@;
put 'c3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1oaWdobGlnaHQuIiksYy5tYW5nbGUmJmNvbnNvbGUud2FybigibWFya2VkKCk6IG1hbmdsZSBwYXJhbWV0ZXIgaXMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9u'@;
put 'IDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2FybmluZywgaW5zdGFsbCBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtbWFuZ2xlLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHttYW5nbGU6IGZhbHNlfWAuIiksYy5i'@;
put 'YXNlVXJsJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBiYXNlVXJsIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5w'@;
put 'bWpzLmNvbS9wYWNrYWdlL21hcmtlZC1iYXNlLXVybC4iKSxjLnNtYXJ0eXBhbnRzJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzbWFydHlwYW50cyBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVt'@;
put 'b3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtc21hcnR5cGFudHMuIiksYy54aHRtbCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogeGh0bWwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAu'@;
put 'MCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXhodG1sLiIpLChjLmhlYWRlcklkc3x8Yy5oZWFkZXJQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtl'@;
put 'ZCgpOiBoZWFkZXJJZHMgYW5kIGhlYWRlclByZWZpeCBwYXJhbWV0ZXJzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGFyZSBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIgdGhpcyB3YXJuaW5nLCBpbnN0'@;
put 'YWxsICBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtZ2ZtLWhlYWRpbmctaWQsIG9yIGRpc2FibGUgYnkgc2V0dGluZyBge2hlYWRlcklkczogZmFsc2V9YC4iKSl9KGgsZiksaC5ob29rcyYmKGguaG9va3Mub3B0aW9ucz1oKSxmKXtjb25zdCBEPWguaGlnaGxpZ2h0O2xl'@;
put 'dCBaO3RyeXtoLmhvb2tzJiYoZD1oLmhvb2tzLnByZXByb2Nlc3MoZCkpLFo9bChkLGgpfWNhdGNoKGJlKXtyZXR1cm4gTShiZSl9Y29uc3QgbmU9YmU9PntsZXQgRWU7aWYoIWJlKXRyeXtoLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhaLGgud2Fsa1Rva2VucyksRWU9YShaLGgpLGgu'@;
put 'aG9va3MmJihFZT1oLmhvb2tzLnBvc3Rwcm9jZXNzKEVlKSl9Y2F0Y2goQmUpe2JlPUJlfXJldHVybiBoLmhpZ2hsaWdodD1ELGJlP00oYmUpOmYobnVsbCxFZSl9O2lmKCFEfHxELmxlbmd0aDwzfHwoZGVsZXRlIGguaGlnaGxpZ2h0LCFaLmxlbmd0aCkpcmV0dXJuIG5lKCk7bGV0IGNlPTA7'@;
put 'cmV0dXJuIHRoaXMud2Fsa1Rva2VucyhaLGJlPT57ImNvZGUiPT09YmUudHlwZSYmKGNlKyssc2V0VGltZW91dCgoKT0+e0QoYmUudGV4dCxiZS5sYW5nLChFZSxCZSk9PntpZihFZSlyZXR1cm4gbmUoRWUpO251bGwhPUJlJiZCZSE9PWJlLnRleHQmJihiZS50ZXh0PUJlLGJlLmVzY2FwZWQ9'@;
put 'ITApLGNlLS0sMD09PWNlJiZuZSgpfSl9LDApKX0pLHZvaWQoMD09PWNlJiZuZSgpKX1pZihoLmFzeW5jKXJldHVybiBQcm9taXNlLnJlc29sdmUoaC5ob29rcz9oLmhvb2tzLnByZXByb2Nlc3MoZCk6ZCkudGhlbihEPT5sKEQsaCkpLnRoZW4oRD0+aC53YWxrVG9rZW5zP1Byb21pc2UuYWxs'@;
put 'KHRoaXMud2Fsa1Rva2VucyhELGgud2Fsa1Rva2VucykpLnRoZW4oKCk9PkQpOkQpLnRoZW4oRD0+YShELGgpKS50aGVuKEQ9PmguaG9va3M/aC5ob29rcy5wb3N0cHJvY2VzcyhEKTpEKS5jYXRjaChNKTt0cnl7aC5ob29rcyYmKGQ9aC5ob29rcy5wcmVwcm9jZXNzKGQpKTtjb25zdCBEPWwo'@;
put 'ZCxoKTtoLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhELGgud2Fsa1Rva2Vucyk7bGV0IFo9YShELGgpO3JldHVybiBoLmhvb2tzJiYoWj1oLmhvb2tzLnBvc3Rwcm9jZXNzKFopKSxafWNhdGNoKEQpe3JldHVybiBNKEQpfX19I3QobCxhLGQpe3JldHVybiBoPT57aWYoaC5tZXNzYWdl'@;
put 'Kz0iXG5QbGVhc2UgcmVwb3J0IHRoaXMgdG8gaHR0cHM6Ly9naXRodWIuY29tL21hcmtlZGpzL21hcmtlZC4iLGwpe2NvbnN0IGY9IjxwPkFuIGVycm9yIG9jY3VycmVkOjwvcD48cHJlPiIreDEoaC5tZXNzYWdlKyIiLCEwKSsiPC9wcmU+IjtyZXR1cm4gYT9Qcm9taXNlLnJlc29sdmUoZik6'@;
put 'ZD92b2lkIGQobnVsbCxmKTpmfWlmKGEpcmV0dXJuIFByb21pc2UucmVqZWN0KGgpO2lmKCFkKXRocm93IGg7ZChoKX19fShDNik7ZnVuY3Rpb24gUmwoYyxsLGEpe3JldHVybiBHOS5wYXJzZShjLGwsYSl9Umwub3B0aW9ucz1SbC5zZXRPcHRpb25zPWZ1bmN0aW9uKGMpe3JldHVybiBHOS5z'@;
put 'ZXRPcHRpb25zKGMpLEY2ZShSbC5kZWZhdWx0cz1HOS5kZWZhdWx0cyksUmx9LFJsLmdldERlZmF1bHRzPWZ1bmN0aW9uIGV0ZSgpe3JldHVybnthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoi'@;
put 'IixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xlOiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6'@;
put 'bnVsbCx4aHRtbDohMX19LFJsLmRlZmF1bHRzPUM2LFJsLnVzZT1mdW5jdGlvbiguLi5jKXtyZXR1cm4gRzkudXNlKC4uLmMpLEY2ZShSbC5kZWZhdWx0cz1HOS5kZWZhdWx0cyksUmx9LFJsLndhbGtUb2tlbnM9ZnVuY3Rpb24oYyxsKXtyZXR1cm4gRzkud2Fsa1Rva2VucyhjLGwpfSxSbC5w'@;
put 'YXJzZUlubGluZT1HOS5wYXJzZUlubGluZSxSbC5QYXJzZXI9YTQsUmwucGFyc2VyPWE0LnBhcnNlLFJsLlJlbmRlcmVyPWxOLFJsLlRleHRSZW5kZXJlcj10dGUsUmwuTGV4ZXI9bzQsUmwubGV4ZXI9bzQubGV4LFJsLlRva2VuaXplcj1zTixSbC5TbHVnZ2VyPW50ZSxSbC5Ib29rcz1jTixS'@;
put 'bC5wYXJzZT1SbDtjb25zdCBmYnQ9WyJtYXJrZG93bkNhcmQiXTtmdW5jdGlvbiBwYnQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiw4KX1sZXQgZ2J0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5hZ3JlZUNoZWNrZWQ9ITEsdGhpcy5h'@;
put 'Z3JlZUJveExvY2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMSx0aGlzLmV1bGFfbWFya2Rvd249J1xuTGljZW5jZSBBZ3JlZW1lbnQgZm9yIERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhZVxuPT09PT09PT09PT09PT09PT09PT1cblxuQ29weXJpZ2h0IChjKSBCb3dlIElPIEx0ZFxuXG5E'@;
put 'YXRhIENvbnRyb2xsZXIgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgYnkgNEdMIEFwcHMsIGEgYnJhbmQgb3duZWQgYnkgQm93ZSBJTyBMdGQsIGEgVUsgTGltaXRlZCBDb21wYW55IGhlYWRxdWFydGVkIGluIDI5IE9sZGZpZWxkIFJkLCBDdW1icmlhLCByZWdpc3RlcmVkIGF0IENvbXBhbmll'@;
put 'cyBIb3VzZSB3aXRoIGNvbXBhbnkgbnVtYmVyIDA4Nzc3MTcxLCBWQVQgbnVtYmVyOiAyMDM5MTQyNDBcblxuVGhpcyBzb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3cywgaW5jbHVkaW5nIGludGVybmF0aW9uYWwgdHJlYXRpZXMsIGFuZCBkdWFsLWxp'@;
put 'Y2Vuc2VkIFx1MjAxMyBkZXBlbmRpbmcgb24gd2hldGhlciB5b3VyIHVzZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcywgbWVhbmluZyBpbnRlbmRlZCBmb3Igb3IgcmVzdWx0aW5nIGluIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgb3Igbm90LlxuXG5J'@;
put 'ZiB5b3VyIHVzZSBpcyBzdHJpY3RseSBwZXJzb25hbCBvciBzb2xlbHkgZm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIG1lYW5pbmcgZm9yIHRoZSBwdXJwb3NlcyBvZiB0ZXN0aW5nIHRoZSBzdWl0YWJpbGl0eSwgcGVyZm9ybWFuY2UsIGFuZCB1c2VmdWxuZXNzIG9mIHRoaXMgc29mdHdhcmUg'@;
put 'b3V0c2lkZSB0aGUgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBpbmNsdWRlZCBpbiB0aGUgImxpY2VuY2Utbm9uLWNvbW1lcmNpYWwtZGF0YWNvbnRyb2xsZXIubWQiIGZpbGUgYXZhaWxhYmxlIGhlcmU6ICBodHRwczovL2dpdC5k'@;
put 'YXRhY29udHJvbGxlci5pby9kYy9kYy9zcmMvYnJhbmNoL21haW4vbGljZW5jZS1ub24tY29tbWVyY2lhbC1kYXRhY29udHJvbGxlci5tZFxuXG5Zb3VyIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGluY2x1ZGVk'@;
put 'IGluIGFuIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnQuXG5cbkluIGFueSBjYXNlLCB5b3UgbXVzdCBub3QgbWFrZSBhbnkgc3VjaCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhcyB0byBkZXZlbG9wIHNvZnR3YXJlIHdoaWNoIG1heSBiZSBjb25zaWRlcmVkIGNvbXBldGl0aXZlIHdpdGgg'@;
put 'dGhpcyBzb2Z0d2FyZS5cblxuVU5MRVNTIEVYUFJFU1NMWSBBR1JFRUQgT1RIRVJXSVNFLCA0R0wgQVBQUyBQUk9WSURFUyBUSElTIFNPRlRXQVJFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBBTkQgSU4gTk8gRVZF'@;
put 'TlQgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgU0hBTEwgNEdMIEFQUFMgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJB'@;
put 'Q1RFUiBBUklTSU5HIEZST00gVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhJUyBTT0ZUV0FSRS5cblxuXG4nfW5nT25Jbml0KCl7Y29uc3QgYT1SbC5zZXRPcHRpb25zKHt9KTt0aGlzLmV1bGFfbWFya2Rvd249YS5wYXJzZSh0aGlzLmV1bGFfbWFya2Rvd24pfW5nQWZ0ZXJWaWV3SW5pdCgp'@;
put 'e3NldFRpbWVvdXQoKCk9Pnt0aGlzLm1hcmtkb3duQ2FyZCYmdGhpcy5tYXJrZG93bkNhcmQubmF0aXZlRWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2Nyb2xsIikpfSl9dGVybXNBZ3JlZUNoYW5nZSgpe3RoaXMuYWdyZWVDaGVja2VkJiYodGhpcy5hZ3JlZUJveExv'@;
put 'Y2tlZD0hMCx0aGlzLmFncmVlQ2xpY2tlZD0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3JlZ2lzdGVydXNlciIse1NBU0NvbnRyb2xUYWJsZTpbe0FDQ0VQVEVEOiJ5ZXMifV19KS50aGVuKGQ9PntkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm4mJmQuYWRhcHRlclJlc3BvbnNl'@;
put 'LnJldHVyblswXSYmIlNVQ0NFU1MiPT09ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuWzBdLk1TRyYmbG9jYXRpb24ucmVsb2FkKCl9KS5jYXRjaChkPT5kKS5maW5hbGx5KCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuYWdyZWVCb3hMb2NrZWQ9ITEsdGhpcy5hZ3JlZUNsaWNrZWQ9ITEsdGhp'@;
put 'cy5hZ3JlZUNoZWNrZWQ9ITF9LDFlMyl9KSl9b25DYXJkQmxvY2tTY3JvbGwoYSl7aWYoIXRoaXMuYWdyZWVDbGlja2VkKXtsZXQgZD1hLnRhcmdldDtkJiYodGhpcy5hZ3JlZUJveExvY2tlZD0hKGQuc2Nyb2xsVG9wK2Qub2Zmc2V0SGVpZ2h0Pj1kLnNjcm9sbEhlaWdodC0yMCkpfX1zdGF0'@;
put 'aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh0bCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXRlcm1zIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmbmEoZmJ0LDUpLDImZCl7bGV0'@;
put 'IGY7eGkoZj1FaSgpKSYmKGgubWFya2Rvd25DYXJkPWYuZmlyc3QpfX0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWyJtYXJrZG93bkNhcmQiLCIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJzY3JvbGwiLCJpbm5lckhUTUwiXSxbMSwiZC1mbGV4'@;
put 'IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJhY2NlcHQtY2hlY2tib3giXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCIsNCwibmdJZiJd'@;
put 'LFsiY2xySW5saW5lIiwic21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksTGUoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLGRlKDMsInAiKSxMZSg0LCIgV2VsY29tZSB0byBEYXRhIENv'@;
put 'bnRyb2xsZXIgZm9yIFNBUyEgUGxlYXNlIHJldmlldyBhbmQgYWNjZXB0IGFncmVlbWVudCBiZWxvdyBpbiBvcmRlciB0byBwcm9jZWVkLiAiKSxoZSgpKCksZGUoNSwiZGl2IiwzLDApLEZ0KCJzY3JvbGwiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uQ2FyZEJsb2NrU2Nyb2xs'@;
put 'KE0pKX0pLGhlKCksZGUoNywiZGl2Iiw0KSg4LCJjbHItY2hlY2tib3gtd3JhcHBlciIsNSkoOSwiaW5wdXQiLDYpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksYmkoaC5hZ3JlZUNoZWNrZWQsTSl8fChoLmFncmVlQ2hlY2tlZD1NKSxDdChNKX0pLEZ0KCJj'@;
put 'aGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgudGVybXNBZ3JlZUNoYW5nZSgpKX0pLGhlKCksZGUoMTAsImxhYmVsIiksTGUoMTEsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgYWJvdmUuIiksaGUoKSgpLG10KDEyLHBidCwxLDAsImNsci1zcGlubmVy'@;
put 'Iiw3KSxoZSgpKCl9MiZkJiYoZmUoNSkseGUoImlubmVySFRNTCIsaC5ldWxhX21hcmtkb3duLFY0KSxmZSgzKSxUcigiZGlzYWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLGZlKCkscGkoIm5nTW9kZWwiLGguYWdyZWVDaGVja2VkKSx4ZSgiZGlzYWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLGZl'@;
put 'KDMpLHhlKCJuZ0lmIixoLmFncmVlQm94TG9ja2VkJiZoLmFncmVlQ2xpY2tlZCkpfSxkZXBlbmRlbmNpZXM6W3lvLEIxLG5sLEdzLGRzLFcxLElkLE1oXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2Y1ZjZmZn0uY2xyLWNoZWNrYm94LXdyYXBw'@;
put 'ZXIuZGlzYWJsZWRbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6LjV9LmNhcmRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLXRvcDowfS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkLWJsb2Nr'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7b3ZlcmZsb3c6YXV0b30uYWNjZXB0LWNoZWNrYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjEwcHggMTVweH0iXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gbWJ0KGMsbCl7MSZjJiYoZGUoMCwicCIsMjkpLExlKDEsIiBMaWNlbmNl'@;
put 'IGtleSBpcyBpbnZhbGlkLiBXZSBjYW4ndCBwcm92aWRlIHlvdSBtb3JlIGRldGFpbHMgYXQgdGhlIG1vbWVudCAiKSxoZSgpKX1mdW5jdGlvbiB2YnQoYyxsKXtpZigxJmMmJkd0KDAsInAiLDMwKSwyJmMpe2NvbnN0IGE9T2UoMyk7eGUoImlubmVySFRNTCIsYS5saWNlbnNlRXJyb3JzW2Eu'@;
put 'a2V5RXJyb3JdLFY0KX19ZnVuY3Rpb24gYmJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIpKDEsInN0cm9uZyIpLExlKDIsIkRldGFpbHM6IiksaGUoKSxMZSgzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMyksSXIoIiAiLGEuZXJyb3JEZXRhaWxzLCIiKX19ZnVuY3Rpb24geWJ0KGMs'@;
put 'bCl7aWYoMSZjJiYoY2koMCksbXQoMSxtYnQsMiwwLCJwIiwyNykoMix2YnQsMSwxLCJwIiwyOCkoMyxiYnQsNCwxLCJwIiw0KSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSx4ZSgibmdJZiIsIWEua2V5RXJyb3IpLGZlKCkseGUoIm5nSWYiLGEua2V5RXJyb3IpLGZlKCkseGUoIm5n'@;
put 'SWYiLGEuZXJyb3JEZXRhaWxzKX19ZnVuY3Rpb24gX2J0KGMsbCl7MSZjJiYoY2koMCksZGUoMSwicCIsMjkpLExlKDIsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgcmVhY2hlZCB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxpY2VuY2UuIFBsZWFzZSBjb250YWN0ICIp'@;
put 'LEd0KDMsImNvbnRhY3QtbGluayIsMzEpLExlKDQsIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlcyBmb3IgdGhpcyBwcm9kdWN0LiAiKSxoZSgpLHVpKCkpfWZ1bmN0aW9uIHdidChjLGwpezEmYyYmKGNpKDApLGRlKDEsInAiLDI5KSxMZSgyLCIgVXBk'@;
put 'YXRlIHRoZSBsaWNlbnNlIGtleSBieSB1cGxvYWRpbmcgdGhlIGxpY2VuY2UgZmlsZSBvciBieSBwYXN0aW5nIGEgbGljZW5zZSBrZXkgYW5kIGFjdGl2YXRpb24ga2V5IGluIHRoZSBpbnB1dHMgYmVsb3cuICIpLGhlKCksdWkoKSl9ZnVuY3Rpb24gQ2J0KGMsbCl7aWYoMSZjJiYoZGUoMCwi'@;
put 'c3BhbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1PZSgyKTtUcigibWlzc2tleSIsaC5taXNzbWF0Y2hlZEtleSYmaC5taXNzbWF0Y2hlZEtleT09PWEpLGZlKCksanUoIiAiLGEsIiIsZD09PShudWxsPT1oLnN5c3NpdGUudmFsdWU/bnVsbDpo'@;
put 'LnN5c3NpdGUudmFsdWUubGVuZ3RoKS0xPyIiOiIsIiwiICIpfX1mdW5jdGlvbiBTYnQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwzMikoMSwic3Ryb25nIiksTGUoMiwiQWxsb3dlZCB1c2VyczoiKSxoZSgpLExlKDMpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgzKSxJcigiICIsYS5s'@;
put 'aWNlbnNlS2V5RGF0YS51c2Vyc19hbGxvd2VkLCIgIil9fWZ1bmN0aW9uIE1idChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDMzKX1mdW5jdGlvbiB4YnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSxMZSgxLCIgRHJvcCAvIEJyb3dzZSBsaWNlbmNlIGZpbGUgIiksaGUoKSl9ZnVuY3Rp'@;
put 'b24gRWJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksTGUoMSwiIFNlbGVjdGVkIGZpbGU6ICIpLGRlKDIsInN0cm9uZyIpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDMpLHdyKGEubGljZW5jZWZpbGUuZmlsZW5hbWUpfX1mdW5jdGlvbiBUYnQoYyxsKXtpZigxJmMm'@;
put 'JihkZSgwLCJkaXYiKSgxLCJzdHJvbmciKSxMZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgyKSx3cihhLmxpY2VuY2VGaWxlRXJyb3IpfX1mdW5jdGlvbiBBYnQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLHhidCwyLDAsImRpdiIsNCkoMixFYnQsNCwxLCJkaXYiLDQpKDMs'@;
put 'VGJ0LDMsMSwiZGl2Iiw0KSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSx4ZSgibmdJZiIsIiI9PT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSxmZSgpLHhlKCJuZ0lmIiwiIiE9PWEubGljZW5jZWZpbGUuZmlsZW5hbWUpLGZlKCkseGUoIm5nSWYiLGEubGljZW5jZUZpbGVFcnJvcil9'@;
put 'fWZ1bmN0aW9uIGtidChjLGwpezEmYyYmKGRlKDAsImJ1dHRvbiIsMzQpLExlKDEsIiBDb250aW51ZSB3aXRoIGZyZWUgdGllciAiKSxoZSgpKX1mdW5jdGlvbiBEYnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDUpKDEsImRpdiIsNiksTGUoMiwiTGljZW5jaW5nIiks'@;
put 'aGUoKSxkZSgzLCJkaXYiLDcpKDQsImRpdiIsOCksbXQoNSx5YnQsNCwzLCJuZy1jb250YWluZXIiLDkpKDYsX2J0LDUsMCwibmctY29udGFpbmVyIiw5KSg3LHdidCwzLDAsIm5nLWNvbnRhaW5lciIsOSksZGUoOCwicCIpKDksInN0cm9uZyIpLExlKDEwLCJTWVNTSVRFOiIpLGhlKCksbXQo'@;
put 'MTEsQ2J0LDIsNCwic3BhbiIsMTApLGRlKDEyLCJhIiwxMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9dm8oMTQpLGY9dm8oMTYpLHY9T2UoKTtyZXR1cm4gQ3Qodi5jb3B5U3lzc2l0ZShoLGYsdi5zeXNzaXRlLnZhbHVlfHxbXSkpfSksR3QoMTMsImNsci1pY29uIiwx'@;
put 'MiwwKSxkZSgxNSwic3BhbiIsMTMsMSksTGUoMTcsIkNvcHkgdG8gY2xpcGJvYXJkIiksaGUoKSgpKCksbXQoMTgsU2J0LDQsMSwicCIsMTQpLGRlKDE5LCJjbHItdGFicyIpKDIwLCJjbHItdGFiIikoMjEsImJ1dHRvbiIsMTUpLExlKDIyLCJVcGxvYWQgbGljZW5jZSIpLGhlKCksZGUoMjMs'@;
put 'ImNsci10YWItY29udGVudCIpKDI0LCJpbnB1dCIsMTYsMiksRnQoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25GaWxlQ2FwdHVyZShoKSl9KSxoZSgpLGRlKDI2LCJkaXYiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KHZvKDI1'@;
put 'KS5jbGljaygpKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25GaWxlQ2FwdHVyZShoLCEwKSl9KSxtdCgyNyxNYnQsMSwwLCJjbHItc3Bpbm5lciIsMTgpKDI4LEFidCw0LDMsIm5nLWNvbnRhaW5lciIsNCksaGUoKSgpKCksZGUoMjksImNsci10YWIi'@;
put 'KSgzMCwiYnV0dG9uIiwxNSksTGUoMzEsIlBhc3RlIGxpY2VuY2UiKSxoZSgpLGRlKDMyLCJjbHItdGFiLWNvbnRlbnQiKSgzMywiZm9ybSIsMTkpKDM0LCJwIiksTGUoMzUsIkxpY2VuY2Uga2V5OiIpLGhlKCksZGUoMzYsImRpdiIsMjApKDM3LCJ0ZXh0YXJlYSIsMjEpLGdpKCJuZ01vZGVs'@;
put 'Q2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGJpKGYubGljZW5jZUtleVZhbHVlLGgpfHwoZi5saWNlbmNlS2V5VmFsdWU9aCksQ3QoaCl9KSxGdCgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS50cmltS2V5cygpKX0pLGhl'@;
put 'KCkoKSgpLGRlKDM4LCJmb3JtIiwyMikoMzksInAiKSxMZSg0MCwiQWN0aXZhdGlvbiBrZXk6IiksaGUoKSxkZSg0MSwiZGl2IiwyMCkoNDIsInRleHRhcmVhIiwyMyksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gYmkoZi5hY3RpdmF0'@;
put 'aW9uS2V5VmFsdWUsaCl8fChmLmFjdGl2YXRpb25LZXlWYWx1ZT1oKSxDdChoKX0pLEZ0KCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnRyaW1LZXlzKCkpfSksaGUoKSgpKCkoKSgpKCkoKSxkZSg0MywiZGl2IiwyNCkoNDQsImJ1dHRvbiIsMjUpLEZ0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5hcHBseUtleXMoKSl9KSxMZSg0NSwiIEFwcGx5IGxpY2VuY2Uga2V5cyAiKSxoZSgpLG10KDQ2LGtidCwyLDAsImJ1dHRvbiIsMjYpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLHhlKCJuZ1N3aXRjaCIs'@;
put 'YS5hY3Rpb24pLGZlKDIpLHhlKCJuZ1N3aXRjaENhc2UiLCJrZXkiKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCJsaW1pdCIpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsInVwZGF0ZSIpLGZlKDQpLHhlKCJuZ0Zvck9mIixhLnN5c3NpdGUudmFsdWUpLGZlKDcpLHhlKCJuZ0lmIixhLmxpY2Vu'@;
put 'c2VLZXlEYXRhJiZhLnVzZXJDb3VudExpbWl0YXRpb24pLGZlKDkpLHhlKCJuZ0lmIixhLmxpY2VuY2VGaWxlTG9hZGluZyksZmUoKSx4ZSgibmdJZiIsIWEubGljZW5jZUZpbGVMb2FkaW5nKSxmZSg5KSxwaSgibmdNb2RlbCIsYS5saWNlbmNlS2V5VmFsdWUpLGZlKDUpLHBpKCJuZ01vZGVs'@;
put 'IixhLmFjdGl2YXRpb25LZXlWYWx1ZSksZmUoMikseGUoImNsckxvYWRpbmciLGEuYXBwbHlpbmdLZXlzKSgiZGlzYWJsZWQiLGEuZGlzYWJsZUFwcGx5QnV0dG9uKSxmZSgyKSx4ZSgibmdJZiIsYS5pc0FwcEZyZWVUaWVyLnZhbHVlKX19ZnVuY3Rpb24gSWJ0KGMsbCl7MSZjJiZHdCgwLCJh'@;
put 'cHAtdGVybXMiKX12YXIgVzZlPWZ1bmN0aW9uKGMpe3JldHVybiBjLmtleT0ia2V5IixjLnJlZ2lzdGVyPSJyZWdpc3RlciIsYy5saW1pdD0ibGltaXQiLGMudXBkYXRlPSJ1cGRhdGUiLGN9KFc2ZXx8e30pO2NvbnN0IFJidD1be3BhdGg6IjphY3Rpb24iLGNvbXBvbmVudDooKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMucm91dGU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5hcHBTZXJ2aWNlPWYsdGhpcy5hY3Rpb249bnVsbCx0aGlzLmxpY2Vuc2VFcnJvcnM9e21pc3Npbmc6J0xpY2VuY2Uga2V5IGlzIG1pc3Npbmcg'@;
put 'LSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxleHBpcmVkOidMaWNlbmNlIGtleSBpcyBl'@;
put 'eHBpcmVkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsaW52YWxpZDonTGljZW5jZSBr'@;
put 'ZXkgaXMgaW52YWxpZCAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLG1pc3NtYXRjaDon'@;
put 'WW91ciBTWVNTSVRFIChiZWxvdykgaXMgbm90IGZvdW5kIGluIHRoZSBsaWNlbmNlIGtleSAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBh'@;
put 'bmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nfSx0aGlzLmxpY2VuY2VLZXlWYWx1ZT0iIix0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT0iIix0aGlzLmFwcGx5aW5nS2V5cz0hMSx0aGlzLnN5c3NpdGU9dGhpcy5hcHBTZXJ2aWNlLnN5c3NpdGUsdGhpcy5jdXJyZW50TGljZW5jZUtleT10aGlz'@;
put 'LmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VLZXksdGhpcy5jdXJyZW50QWN0aXZhdGlvbktleT10aGlzLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb25LZXksdGhpcy5pc0FwcEZyZWVUaWVyPXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBGcmVlVGllcix0aGlzLnVzZXJDb3VudExpbWl0YXRpb249'@;
put 'dGhpcy5saWNlbmNlU2VydmljZS51c2VyQ291bnRMaW1pdGF0aW9uLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlzLmlucHV0VHlwZT0iZmlsZSIsdGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITEsdGhpcy5saWNlbmNlZmlsZT17ZmlsZW5hbWU6IiJ9fW5nT25Jbml0KCl7dGhpcy5saWNl'@;
put 'bmNlS2V5VmFsdWU9dGhpcy5jdXJyZW50TGljZW5jZUtleXx8IiIsdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9dGhpcy5jdXJyZW50QWN0aXZhdGlvbktleXx8IiIsdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoYT0+e3RoaXMua2V5RXJyb3I9YS5lcnJvcix0aGlzLm1pc3NtYXRj'@;
put 'aGVkS2V5PWEubWlzc21hdGNoSWQsYS5kZXRhaWxzJiYodGhpcy5lcnJvckRldGFpbHM9YXRvYihhLmRldGFpbHMpKX0pLHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShhPT57bGV0IGQ9YS5hY3Rpb247ZCYmT2JqZWN0LnZhbHVlcyhXNmUpLmluY2x1ZGVzKGQpJiYodGhpcy5hY3Rpb249'@;
put 'ZCl9KSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMubGljZW5jZVNlcnZpY2UuZ2V0TGljZW5zZUtleURhdGEoKX10cmltS2V5cygpe3RoaXMubGljZW5jZUtleVZhbHVlPXRoaXMubGljZW5jZUtleVZhbHVlLnRyaW0oKSx0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmFjdGl2YXRpb25L'@;
put 'ZXlWYWx1ZS50cmltKCl9Y29weVN5c3NpdGUoYSxkLGgpe2NvbnN0IGY9aC5qb2luKCJcbiIpO25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGYpLnRoZW4oKCk9PnthLnNldEF0dHJpYnV0ZSgic2hhcGUiLCJjaGVjayIpLGEuc2V0QXR0cmlidXRlKCJjbGFzcyIsImlzLXN1Y2Nlc3Mi'@;
put 'KSxkLmlubmVyVGV4dD0iQ29waWVkISIsc2V0VGltZW91dCgoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNvcHkiKSxhLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSxkLmlubmVyVGV4dD0iQ29weSB0byBjbGlwYm9hcmQifSwxZTMpfSl9YXBwbHlLZXlzKCl7dGhpcy5hcHBseWluZ0tl'@;
put 'eXM9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZ2lzdGVya2V5Iix7a2V5dXBsb2FkOlt7QUNUSVZBVElPTl9LRVk6dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUsTElDRU5DRV9LRVk6dGhpcy5saWNlbmNlS2V5VmFsdWV9XX0pLnRoZW4oZD0+e2QuYWRhcHRlclJlc3BvbnNl'@;
put 'LnJldHVybiYmZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuWzBdJiYiU1VDQ0VTUyI9PT1kLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0uTVNHJiZsb2NhdGlvbi5yZXBsYWNlKGxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSl9KS5maW5hbGx5KCgpPT57dGhpcy5hcHBseWluZ0tleXM9ITF9'@;
put 'KX1vbkZpbGVDYXB0dXJlKGEsZD0hMSl7bGV0IGg9ZD9hWzBdOmEudGFyZ2V0LmZpbGVzWzBdO2lmKHRoaXMubGljZW5jZWZpbGUuZmlsZW5hbWU9aC5uYW1lLCFoKXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMDtjb25zdCBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPXY9Pntp'@;
put 'Zih0aGlzLmxpY2VuY2VGaWxlRXJyb3I9IkVycm9yIHJlYWRpbmcgZmlsZS4iLCF2fHwhdi50YXJnZXR8fDIhPXYudGFyZ2V0LnJlYWR5U3RhdGV8fHYudGFyZ2V0LmVycm9yfHwhdi50YXJnZXQucmVzdWx0KXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VG'@;
put 'aWxlRXJyb3I9dm9pZCAwO2NvbnN0IE09di50YXJnZXQucmVzdWx0LnRvU3RyaW5nKCkuc3BsaXQoIlxuIik7dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9TVsxXSx0aGlzLmxpY2VuY2VLZXlWYWx1ZT1NWzBdfSxmLnJlYWRBc1RleHQoaCl9c3dpdGNoVHlwZShhKXt0aGlzLmlucHV0VHlwZT1h'@;
put 'fWdldCBkaXNhYmxlQXBwbHlCdXR0b24oKXtyZXR1cm4gdGhpcy5saWNlbmNlS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMuYWN0aXZhdGlvbktleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmxpY2VuY2VLZXlWYWx1ZT09PXRoaXMuY3VycmVudExpY2VuY2VLZXkmJnRoaXMuYWN0aXZhdGlvbktleVZh'@;
put 'bHVlPT09dGhpcy5jdXJyZW50QWN0aXZhdGlvbktleX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShDdSksR2UodTEpLEdlKHRsKSxHZShvTCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxp'@;
put 'Y2Vuc2luZyJdXSxkZWNsczoyLHZhcnM6Mixjb25zdHM6W1siY29weUljb24iLCIiXSxbImNvcHlUb29sdGlwIiwiIl0sWyJsaWNlbmNlRmlsZSIsIiJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJs'@;
put 'b2NrIiwzLCJuZ1N3aXRjaCJdLFsxLCJjYXJkLXRleHQiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWzMsIm1pc3NrZXkiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtdG9wLXJpZ2h0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Iiwic2l6'@;
put 'ZSIsIjE1IiwxLCJjdXJzb3ItcG9pbnRlciJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWyJjbHJUYWJMaW5rIiwiIl0sWyJ0eXBlIiwiZmlsZSIsImhpZGRlbiIsIiIsMywiY2hhbmdlIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwiZHJvcC1hcmVhIiwz'@;
put 'LCJjbGljayIsImZpbGVEcm9wIl0sWyJjbGFzcyIsInNwaW5uZXItc20iLDQsIm5nSWYiXSxbMSwiY2xyLWZvcm0iLCJsaWNlbnNlLWtleS1mb3JtIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciJdLFsibmFtZSIsImxpY2Vuc2Uta2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGxp'@;
put 'Y2VuY2Uga2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiLCJuZ01vZGVsIl0sWzEsImNsci1mb3JtIiwiYWN0aXZhdGlvbi1rZXktZm9ybSJdLFsibmFtZSIsImFjdGl2YXRpb24ta2V5LWFyZWEiLCJwbGFjZWhvbGRlciIsIlBhc3RlIGFj'@;
put 'dGl2YXRpb24ga2V5IGhlcmUiLDEsImNsci10ZXh0YXJlYSIsMywibmdNb2RlbENoYW5nZSIsIm1vdXNlbGVhdmUiLCJuZ01vZGVsIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsImFwcGx5LWtleXMi'@;
put 'LDMsImNsaWNrIiwiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWyJyb3V0ZXJMaW5rIiwiLyIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tbGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJrZXktZXJyb3IiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiwzLCJpbm5lckhUTUwiLDQsIm5n'@;
put 'SWYiXSxbMSwia2V5LWVycm9yIl0sWzEsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIl0sWyJjbGFzc2VzIiwiY29sb3ItZ3JlZW4iXSxbMSwibS0wIl0sWzEsInNwaW5uZXItc20iXSxbInJvdXRlckxpbmsiLCIvIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayJdXSx0ZW1wbGF0ZTpmdW5j'@;
put 'dGlvbihkLGgpezEmZCYmbXQoMCxEYnQsNDcsMTMsImRpdiIsMykoMSxJYnQsMSwwLCJhcHAtdGVybXMiLDQpLDImZCYmKHhlKCJuZ0lmIiwicmVnaXN0ZXIiIT09aC5hY3Rpb24pLGZlKCkseGUoIm5nSWYiLCJyZWdpc3RlciI9PT1oLmFjdGlvbikpfSxkZXBlbmRlbmNpZXM6W2xzLHlvLFMy'@;
put 'LGNwLGE3LGVjLG5sLGk3LEdzLHlwLEZsLFYwLFIyLHltLHdtLFM3LF9tLGJtLHc3LE1oLGMxLGdidCxmT10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDAlIC0gOTZweCk7cGFkZGluZzoyMHB4fS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjB9'@;
put 'LmtleS1lcnJvcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjE2cHh9Lm1pc3NrZXlbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlNzRjM2N9LmxpY2Vuc2Uta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV17'@;
put 'cGFkZGluZzowfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVdLCAuYWN0aXZhdGlvbi1rZXktZm9ybVtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRhcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdodDoxNzBweDttYXgtaGVpZ2h0OjE3MHB4O21pbi1oZWlnaHQ6MTcwcHg7cmVzaXplOm5vbmV9LmFwcGx5LWtleXNb'@;
put 'X25nY29udGVudC0lQ09NUCVde2hlaWdodDo0MHB4fS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjE1cHg7Ym9yZGVyOjJweCBkYXNoZWQgI2IyYjJiMjtib3JkZXItcmFk'@;
put 'aXVzOjRweDtjdXJzb3I6cG9pbnRlcjttYXJnaW46MTBweCAwfWNsci10YWJzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17Ym94LXNoYWRvdzpub25lIWltcG9ydGFudH0iXX0pfX1yZXR1cm4gY30pKCksY2FuQWN0aXZhdGU6W1FlZV0sY2FuRGVhY3Rp'@;
put 'dmF0ZTpbUWVlXX1dO2xldCBMYnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W2pjLmZvckNo'@;
put 'aWxkKFJidCksamNdfSl9fXJldHVybiBjfSkoKSxPYnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9y'@;
put 'dHM6W0xvLEljLEIwLExidCxDd119KX19cmV0dXJuIGN9KSgpO2NvbnN0IFBidD0oKT0+KHtzdGFuZGFsb25lOiEwfSksWTZlPShjLGwsYSk9Pih7YWRkZWRSb3c6YyxkZWxldGVkUm93OmwsdXBkYXRlZFJvdzphfSksRzZlPWM9Pih7ImNoIHRvb2x0aXAgdG9vbHRpcC1tZCB0b29sdGlwLXRv'@;
put 'cC1yaWdodCI6Y30pO2Z1bmN0aW9uIEZidChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiwxOSksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0LGQ9T2UoKTt4ZSgicm91dGVyTGluayIsIi9zdGFnZS8iK2QuanNQYXJhbXNbYV0pLGZlKCksSXIoIiAiLGQuanNQYXJhbXNb'@;
put 'YV0sIiAiKX19ZnVuY3Rpb24gSGJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdCxkPU9lKCk7ZmUoKSxJcigiICIsZC5qc1BhcmFtc1thXSwiICIpfX1mdW5jdGlvbiBOYnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIp'@;
put 'KDEsInRkIiw0KSxMZSgyKSxoZSgpLG10KDMsRmJ0LDIsMiwidGQiLDE3KSg0LEhidCwyLDEsInRkIiwxOCksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEpLGZlKCkseGUoIm5nSWYiLGEuaW5jbHVkZXMoIlRBQkxFX0lEIikpLGZlKCkseGUoIm5nSWYiLCFhLmlu'@;
put 'Y2x1ZGVzKCJUQUJMRV9JRCIpKX19ZnVuY3Rpb24gVmJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsNCksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsNCksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgzKTtmZSgyKSx3cihhKSxmZSgyKSx3cihkLnN1'@;
put 'Ym1pdERldGFpbHNbYV0pfX1mdW5jdGlvbiBCYnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMykoMywidGhlYWQiKSg0LCJ0ciIpKDUsInRoIiw0KSxMZSg2LCJOYW1lIiksaGUoKSxkZSg3LCJ0aCIsNCksTGUoOCwiVmFsdWUi'@;
put 'KSxoZSgpKCkoKSxkZSg5LCJ0Ym9keSIpLG10KDEwLFZidCw1LDIsInRyIiw1KSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMTApLHhlKCJuZ0Zvck9mIixhLnN1Ym1pdEFycil9fWZ1bmN0aW9uIGpidChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDQpLExlKDIp'@;
put 'LGhlKCksZGUoMywidGQiLDQpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoMik7ZmUoMiksd3IoYSksZmUoMiksd3IoZC5qc1BhcmFtc1thXSl9fWZ1bmN0aW9uIHpidChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWJzIikoMSwiY2xyLXRhYiIpKDIsImJ1'@;
put 'dHRvbiIsMjApLExlKDMsIlN1Ym1pdHRlZCBUYWJsZSBEZXRhaWxzIiksaGUoKSxtdCg0LEJidCwxMSwxLCJjbHItdGFiLWNvbnRlbnQiLDIxKSxoZSgpLGRlKDUsImNsci10YWIiKSg2LCJidXR0b24iLDIwKSxMZSg3LCJCYXNlIFRhYmxlIERldGFpbHMiKSxoZSgpLGRlKDgsImNsci10YWIt'@;
put 'Y29udGVudCIpKDksImRpdiIsMjIpKDEwLCJ0YWJsZSIsMykoMTEsInRoZWFkIikoMTIsInRyIikoMTMsInRoIiw0KSxMZSgxNCwiTmFtZSIpLGhlKCksZGUoMTUsInRoIiw0KSxMZSgxNiwiVmFsdWUiKSxoZSgpKCkoKSxkZSgxNywidGJvZHkiKSxtdCgxOCxqYnQsNSwyLCJ0ciIsNSksaGUo'@;
put 'KSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDQpLHhlKCJjbHJJZkFjdGl2ZSIsITApLGZlKDE0KSx4ZSgibmdGb3JPZiIsYS5rZXlzQXJyYXkpfX1mdW5jdGlvbiBVYnQoYyxsKXsxJmMmJihkZSgwLCJwIiw3MiksTGUoMSwiIFRoZXJlIGFyZSBubyBkZXRhaWxzIHRvIHNob3cg'@;
put 'IiksaGUoKSl9ZnVuY3Rpb24gWmJ0KGMsbCl7aWYoMSZjJiYoY2koMCksZGUoMSwiZGl2Iiw3MykoMiwic3BhbiIpLExlKDMsIlRhYmxlIElkOiIpLGhlKCksZGUoNCwic3Ryb25nIiw3NCksTGUoNSksaGUoKSgpLGRlKDYsImRpdiIpKDcsInNwYW4iKSxMZSg4LCJTdWJtaXR0ZXI6IiksaGUo'@;
put 'KSxkZSg5LCJzcGFuIiw3NSksTGUoMTApLGhlKCkoKSxkZSgxMSwiZGl2IikoMTIsInNwYW4iKSxMZSgxMywiU3VibWl0dGVkIG9uOiIpLGhlKCksZGUoMTQsInNwYW4iLDc1KSxMZSgxNSksaGUoKSgpLGRlKDE2LCJkaXYiKSgxNywic3BhbiIpLExlKDE4LCJTdWJtaXR0ZWQgUmVhc29uOiIp'@;
put 'LGhlKCksZGUoMTksInNwYW4iLDc1KSxMZSgyMCksaGUoKSgpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSg1KTtmZSg0KSx4ZSgicm91dGVyTGluayIsIi9zdGFnZS8iKyhudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lEKSksZmUoKSxJcigiICIsbnVsbD09'@;
put 'YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCwiICIpLGZlKDUpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9CWV9OTSwiICIpLGZlKDUpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEu'@;
put 'dGFibGVEZXRhaWxzLlNVQk1JVFRFRF9PTl9EVFRNLCIgIiksZmUoNSksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX1JFQVNPTl9UWFQsIiAiKX19ZnVuY3Rpb24gV2J0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzYpLEd0KDEsImNs'@;
put 'ci1pY29uIiw3NyksTGUoMiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSxoZSgpKX1mdW5jdGlvbiBZYnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiLDUx'@;
put 'KSxtdCgzLFVidCwyLDAsInAiLDQ1KSg0LFpidCwyMSw1LCJuZy1jb250YWluZXIiLDgpLGhlKCksZGUoNSwiZGl2Iiw1MikoNiwiZGl2Iiw1MykoNywiZGl2Iiw1NCkoOCwiZGl2Iiw1NSkoOSwiYnV0dG9uIiw1NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoNCk7'@;
put 'cmV0dXJuIEN0KGguZ29Ub0Jhc2UobnVsbD09aC5qc1BhcmFtcz9udWxsOmguanNQYXJhbXMuVEFCTEVfTk0pKX0pLExlKDEwLCIgVmlldyBiYXNlIHRhYmxlICIpLGhlKCksZGUoMTEsImJ1dHRvbiIsNTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDQpO3JldHVy'@;
put 'biBDdChoLmdldFRhYmxlKGgudGFibGVJZCkpfSksTGUoMTIsIiBWaWV3IHN0YWdlZCBkYXRhICIpLGhlKCksZGUoMTMsImJ1dHRvbiIsNTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDQpO3JldHVybiBDdChoLmdvQmFjayhudWxsPT1oLmpzUGFyYW1zP251bGw6'@;
put 'aC5qc1BhcmFtcy5UQUJMRV9OTSkpfSksTGUoMTQsIiBFZGl0IGJhc2UgdGFibGUgIiksaGUoKSgpKCkoKSxkZSgxNSwiZGl2Iiw1OSkoMTYsImJ1dHRvbiIsNjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoNCkuYXBwcm92ZVRhYmxlKCkpfSksTGUoMTcsIiBB'@;
put 'Q0NFUFQgIiksaGUoKSxkZSgxOCwiYnV0dG9uIiw2MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5yZWplY3RPcGVuPSEwKX0pLExlKDE5LCIgUkVKRUNUICIpLGhlKCksZGUoMjAsImNsci10b2dnbGUtY29udGFpbmVyIiw2MikoMjEsImNsci10b2dnbGUt'@;
put 'd3JhcHBlciIpKDIyLCJpbnB1dCIsNjMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDQpO3JldHVybiBiaShmLmZvcm1hdHRlZFZhbHVlcyxoKXx8KGYuZm9ybWF0dGVkVmFsdWVzPWgpLEN0KGgpfSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gd3QoYSksQ3QoT2UoNCkuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSxoZSgpLGRlKDIzLCJsYWJlbCIsNjQpLExlKDI0KSxoZSgpKCkoKSgpLGRlKDI1LCJkaXYiLDY1KSxtdCgyNixXYnQsMywwLCJzcGFuIiw2NiksZGUoMjcsImRpdiIsMzEpKDI4LCJkaXYiLDY3KSgyOSwic3BhbiIsNjgp'@;
put 'LExlKDMwLCIgQ2hhbmdlZCBSb3dzICIpLGRlKDMxLCJzcGFuIiw2OSksTGUoMzIpLGhlKCkoKSxkZSgzMywic3BhbiIsNzApLExlKDM0LCIgQWRkZWQgUm93cyAiKSxkZSgzNSwic3BhbiIsNjkpLExlKDM2KSxoZSgpKCksZGUoMzcsInNwYW4iLDcxKSxMZSgzOCwiIERlbGV0ZWQgUm93cyAi'@;
put 'KSxkZSgzOSwic3BhbiIsNjkpLExlKDQwKSxoZSgpKCkoKSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDQpO2ZlKDMpLHhlKCJuZ0lmIiwhYS50YWJsZURldGFpbHMpLGZlKCkseGUoIm5nSWYiLGEudGFibGVEZXRhaWxzKSxmZSgxMikseGUoImNsckxvYWRpbmciLGEuYWNjZXB0TG9h'@;
put 'ZGluZykoImRpc2FibGVkIiwhYS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVSKXx8YS5ub0NoYW5nZXMpLGZlKDIpLHhlKCJkaXNhYmxlZCIsIWEubG9hZGluZ1RhYmxlfHwiTk8iPT09KG51bGw9PWEucGFyYW1zP251bGw6YS5w'@;
put 'YXJhbXMuSVNBUFBST1ZFUil8fGEubm9DaGFuZ2VzKSxmZSg0KSxwaSgibmdNb2RlbCIsYS5mb3JtYXR0ZWRWYWx1ZXMpLGZlKDIpLHdyKGEuZm9ybWF0dGVkVmFsdWVzPyJGb3JtYXR0ZWQiOiJVbmZvcm1hdHRlZCIpLGZlKDIpLHhlKCJuZ0lmIixhLmRpZmZzTGltaXQpLGZlKDYpLHdyKGEu'@;
put 'bGVucy51cGRhdGVkKSxmZSg0KSx3cihhLmxlbnMubmV3KSxmZSg0KSx3cihhLmxlbnMuZGVsZXRlZCl9fWZ1bmN0aW9uIEdidChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzUpKDEsInAiLDgxKSxMZSgyLCJMb2FkaW5nIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiAkYnQoYyxsKXtpZigxJmMm'@;
put 'JihkZSgwLCJkaXYiLDc4KSgxLCJzcGFuIiw3OSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxtdCgzLEdidCwzLDAsImRpdiIsODApLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgzKSx4ZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKX19ZnVuY3Rpb24gS2J0KGMsbCl7MSZjJiYoZGUo'@;
put 'MCwicCIsNzIpLExlKDEsIiBUaGVyZSBhcmUgbm8gY2hhbmdlcyB0byBzaG93ICIpLGhlKCkpfWZ1bmN0aW9uIHFidChjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx3cihhKX19ZnVuY3Rpb24gWGJ0KGMsbCl7aWYo'@;
put 'MSZjJiYoZGUoMCwic3BhbiIsODYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLmluZGV4LGQ9T2UoMikuaW5kZXgsaD1PZSg0KTtmZSgpLElyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixoLmFyck9mQ2hhbmdlc1tkXVthXSwiIil9fWZ1bmN0aW9uIEpidChjLGwpe2lmKDEmYyYmKGRl'@;
put 'KDAsInRkIiw4NCksTGUoMSksbXQoMixYYnQsMiwxLCJzcGFuIiw4NSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPU9lKDIpLmluZGV4LGY9T2UoNCk7eGUoIm5nQ2xhc3MiLHNwKDMsRzZlLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNo'@;
put 'QXJyW2hdKSksZmUoKSxJcigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLGZlKCkseGUoIm5nSWYiLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKX19ZnVuY3Rpb24gUWJ0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxKYnQsMyw1LCJ0ZCIsODMp'@;
put 'LHVpKCkpLDImYyl7Y29uc3QgYT1PZSgpLmluZGV4LGQ9T2UoNCk7ZmUoKSx4ZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gZXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDIpLmluZGV4LGg9'@;
put 'T2UoNCk7ZmUoKSxJcigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5jdGlvbiB0eXQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLGV5dCwyLDEsInRkIiw0NyksdWkoKSksMiZjKXtjb25zdCBhPU9lKCkuaW5kZXgsZD1PZSg0KTtmZSgpLHhlKCJuZ0Zvck9mIixkLnJvd0tl'@;
put 'eXNbYV0pfX1mdW5jdGlvbiBueXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsODIpLG10KDEsUWJ0LDIsMSwibmctY29udGFpbmVyIiw4KSgyLHR5dCwyLDEsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1PZSg0KTt4ZSgibmdDbGFzcyIscE0oMyxZNmUs'@;
put 'ImFkZGVkIj09ZC5jaEFyclthXSwiZGVsZXRlZCI9PWQuY2hBcnJbYV0sInVwZGF0ZWQiPT1kLmNoQXJyW2FdKSksZmUoKSx4ZSgibmdJZiIsInVwZGF0ZWQiPT09ZC5jaEFyclthXSksZmUoKSx4ZSgibmdJZiIsInVwZGF0ZWQiIT09ZC5jaEFyclthXSl9fWZ1bmN0aW9uIHJ5dChjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMjkpKDEsImRpdiIsMzApKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDMzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmdvVG9BcHByb3ZhbHNMaXN0KCkpfSksR3QoNSwiY2xyLWljb24i'@;
put 'LDM0KSxMZSg2LCJCYWNrIHRvIGFwcHJvdmFscyBsaXN0ICIpLGhlKCkoKSxkZSg3LCJkaXYiLDM1KSg4LCJoMyIsMzYpLExlKDkpLGhlKCkoKSxkZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmdldERldGFpbHMo'@;
put 'KSl9KSxHdCgxMiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKSxkZSgxMywicCIsNDApLExlKDE0KSxoZSgpKCksZGUoMTUsImRpdiIsNDEpLG10KDE2LFlidCw0MSwxMSwiZGl2Iiw0MiksaGUoKSxtdCgxNywkYnQsNCwxLCJkaXYiLDQzKSxkZSgxOCwiZGl2Iiw0NCksbXQoMTksS2J0LDIsMCwi'@;
put 'cCIsNDUpLGRlKDIwLCJ0YWJsZSIsMykoMjEsInRoZWFkIikoMjIsInRyIiw0NiksbXQoMjMscWJ0LDIsMSwidGgiLDQ3KSxoZSgpKCksZGUoMjQsInRib2R5IiksbXQoMjUsbnl0LDMsNywidHIiLDQ4KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSg5KSxJcigiICIsbnVs'@;
put 'bD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfTk0sIiAiKSxmZSg1KSxJcigiICIsbnVsbD09YS5qc1BhcmFtcz9udWxsOmEuanNQYXJhbXMuVEFCTEVfREVTQywiICIpLGZlKDIpLHhlKCJuZ0lmIixhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGluZ1RhYmxlKSxm'@;
put 'ZSgyKSx4ZSgibmdJZiIsYS5sb2FkaW5nVGFibGUmJmEubm9DaGFuZ2VzKSxmZSg0KSx4ZSgibmdGb3JPZiIsYS5yb3dIZWFkZXIpLGZlKDIpLHhlKCJuZ0Zvck9mIixhLnJvd0tleXMpfX1mdW5jdGlvbiBpeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI3KSxtdCgxLHJ5dCwyNiw3LCJk'@;
put 'aXYiLDI4KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSx4ZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiBveXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3OSksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gYXl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwi'@;
put 'aDMiKSxMZSgyLCJMb2FkaW5nIHByZXZpZXciKSxoZSgpKCkpfWZ1bmN0aW9uIHN5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsODcpLG10KDEsb3l0LDIsMCwic3BhbiIsODgpKDIsYXl0LDMsMCwiZGl2Iiw4KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSx4ZSgibmdJZiIsIWEu'@;
put 'bG9hZGVkKSxmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBseXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIzKSxtdCgxLGl5dCwyLDEsImRpdiIsMjQpLGRlKDIsImRpdiIsMjUpLG10KDMsc3l0LDMsMiwiZGl2IiwyNiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtm'@;
put 'ZSgpLHhlKCJuZ0lmIixhLmxvYWRlZCksZmUoMikseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIGN5dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSxHdCgxLCJjbHItaWNvbiIsNzcpLExlKDIsIiBPbmx5IHRoZSBmaXJzdCAxMDAgaW5zZXJ0cywgdXBkYXRlcyBvciBkZWxldGVz'@;
put 'IGFyZSBkaXNwbGF5ZWQgIiksaGUoKSl9ZnVuY3Rpb24gdXl0KGMsbCl7MSZjJiZHdCgwLCJkaXYiLDQ5KX1mdW5jdGlvbiBkeXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDc1KSgxLCJwIiw4MSksTGUoMiwiTG9hZGluZyB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24gaHl0KGMsbCl7aWYoMSZj'@;
put 'JiYoZGUoMCwiZGl2IiwxMDQpKDEsInNwYW4iLDc5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLG10KDMsZHl0LDMsMCwiZGl2Iiw4MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKDMpLHhlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpfX1mdW5jdGlvbiBmeXQoYyxsKXtpZigxJmMm'@;
put 'JihkZSgwLCJ0aCIsNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksd3IoYSl9fWZ1bmN0aW9uIHB5dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDg2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5pbmRleCxkPU9lKDIpLmluZGV4LGg9T2UoNCk7'@;
put 'ZmUoKSxJcigiT3JpZ2luYWwgdmFsdWUgaXM6ICIsaC5hcnJPZkNoYW5nZXNbZF1bYV0sIiIpfX1mdW5jdGlvbiBneXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsODQpLExlKDEpLG10KDIscHl0LDIsMSwic3BhbiIsODUpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5k'@;
put 'ZXgsaD1PZSgyKS5pbmRleCxmPU9lKDQpO3hlKCJuZ0NsYXNzIixzcCgzLEc2ZSwxPT1mLmFyckNoYW5nZWRbaF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSkpLGZlKCksSXIoIiAiLGYuZGlmZlRhYmxlLmRhdGFbaF1bYV0sIiAiKSxmZSgpLHhlKCJuZ0lmIiwxPT1mLmFyckNoYW5nZWRb'@;
put 'aF1bZF0mJiJ1cGRhdGVkIj09Zi5jaEFycltoXSl9fWZ1bmN0aW9uIG15dChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsZ3l0LDMsNSwidGQiLDgzKSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5pbmRleCxkPU9lKDQpO2ZlKCkseGUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9u'@;
put 'IHZ5dChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgyKS5pbmRleCxoPU9lKDQpO2ZlKCksSXIoIiAiLGguZGlmZlRhYmxlLmRhdGFbZF1bYV0sIiAiKX19ZnVuY3Rpb24gYnl0KGMsbCl7aWYoMSZjJiYoY2koMCks'@;
put 'bXQoMSx2eXQsMiwxLCJ0ZCIsNDcpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSgpLmluZGV4LGQ9T2UoNCk7ZmUoKSx4ZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24geXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDgyKSxtdCgxLG15dCwyLDEsIm5nLWNvbnRhaW5lciIsOCko'@;
put 'MixieXQsMiwxLCJuZy1jb250YWluZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9T2UoNCk7eGUoIm5nQ2xhc3MiLHBNKDMsWTZlLCJhZGRlZCI9PWQuY2hBcnJbYV0sImRlbGV0ZWQiPT1kLmNoQXJyW2FdLCJ1cGRhdGVkIj09ZC5jaEFyclthXSkpLGZlKCkseGUoIm5nSWYi'@;
put 'LCJ1cGRhdGVkIj09PWQuY2hBcnJbYV0pLGZlKCkseGUoIm5nSWYiLCJ1cGRhdGVkIiE9PWQuY2hBcnJbYV0pfX1mdW5jdGlvbiBfeXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDkzKSgxLCJkaXYiLDk0KSgyLCJkaXYiLDMxKSgzLCJkaXYiLDMyKSg0LCJzcGFuIiw5'@;
put 'NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgzKS5nb1RvU3VibWl0TGlzdCgpKX0pLEd0KDUsImNkcy1pY29uIiw5NiksTGUoNiwiQmFjayB0byBzdWJtaXR0ZWQgbGlzdCAiKSxoZSgpKCksZGUoNywiZGl2Iiw5NykoOCwiaDMiLDk4KSxMZSg5KSxoZSgpKCks'@;
put 'ZGUoMTAsImRpdiIsMzcpKDExLCJhIiwzOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgzKS50YWJsZUZsYWc9ITApfSksR3QoMTIsImNsci1pY29uIiwzOSksaGUoKSgpKCksZGUoMTMsInAiLDk5KSxMZSgxNCksaGUoKSgpLGRlKDE1LCJkaXYiLDUwKSgxNiwi'@;
put 'ZGl2Iiw1MSkoMTcsImRpdiIsNzMpKDE4LCJzcGFuIiksTGUoMTksIlRhYmxlIElkOiIpLGhlKCksZGUoMjAsInN0cm9uZyIsNzQpKDIxLCJzcGFuIiksTGUoMjIpLGhlKCkoKSgpLGRlKDIzLCJkaXYiKSgyNCwic3BhbiIpLExlKDI1LCJTdWJtaXR0ZWQgb246IiksaGUoKSxkZSgyNiwic3Bh'@;
put 'biIsNzUpLExlKDI3KSxoZSgpKCksZGUoMjgsImRpdiIpKDI5LCJzcGFuIiksTGUoMzAsIlN1Ym1pdCBNZXNzYWdlOiIpLGhlKCksZGUoMzEsInNwYW4iKSxMZSgzMiksaGUoKSgpKCksZGUoMzMsImRpdiIsNTIpKDM0LCJkaXYiLDUzKSgzNSwiZGl2Iiw1NCkoMzYsImRpdiIsNTUpKDM3LCJi'@;
put 'dXR0b24iLDU2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgzKTtyZXR1cm4gQ3QoaC5nb1RvQmFzZShoLnN1Yk9iai5iYXNlKSl9KSxMZSgzOCwiIFZpZXcgYmFzZSB0YWJsZSAiKSxoZSgpLGRlKDM5LCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'd3QoYSk7Y29uc3QgaD1PZSgzKTtyZXR1cm4gQ3QoaC5nZXRUYWJsZShoLnN1Yk9iai50YWJsZUlkKSl9KSxMZSg0MCwiIFZpZXcgc3RhZ2VkIGRhdGEgIiksaGUoKSxkZSg0MSwiYnV0dG9uIiw1OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMyk7cmV0dXJuIEN0'@;
put 'KGguZ29CYWNrKGguc3ViT2JqLmJhc2UpKX0pLExlKDQyLCIgRWRpdCBiYXNlIHRhYmxlICIpLGhlKCkoKSgpKCksZGUoNDMsImRpdiIsNjUpLG10KDQ0LGN5dCwzLDAsInNwYW4iLDY2KSxkZSg0NSwiZGl2IiwzMSkoNDYsImRpdiIsNjcpKDQ3LCJzcGFuIiw2OCksTGUoNDgsIiBDaGFuZ2Vk'@;
put 'IFJvd3MgIiksZGUoNDksInNwYW4iLDY5KSxMZSg1MCksaGUoKSgpLGRlKDUxLCJzcGFuIiw3MCksTGUoNTIsIiBBZGRlZCBSb3dzICIpLGRlKDUzLCJzcGFuIiw2OSksTGUoNTQpLGhlKCkoKSxkZSg1NSwic3BhbiIsNzEpLExlKDU2LCIgRGVsZXRlZCBSb3dzICIpLGRlKDU3LCJzcGFuIiw2'@;
put 'OSksTGUoNTgpLGhlKCkoKSgpKCkoKSxkZSg1OSwiZGl2Iiw1MykoNjAsImNsci10b2dnbGUtY29udGFpbmVyIiwxMDApKDYxLCJjbHItdG9nZ2xlLXdyYXBwZXIiKSg2MiwiaW5wdXQiLDYzKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKTtyZXR1'@;
put 'cm4gYmkoZi5mb3JtYXR0ZWRWYWx1ZXMsaCl8fChmLmZvcm1hdHRlZFZhbHVlcz1oKSxDdChoKX0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmZvcm1hdHRpbmdDaGFuZ2VkKCkpfSksaGUoKSxkZSg2MywibGFiZWwiKSxMZSg2NCksaGUoKSgpKCkoKSgp'@;
put 'KCksZGUoNjUsImRpdiIsMTAxKSxtdCg2Nix1eXQsMSwwLCJkaXYiLDQyKSxoZSgpLG10KDY3LGh5dCw0LDEsImRpdiIsMTAyKSxkZSg2OCwiZGl2IiwxMDMpKDY5LCJ0YWJsZSIsMykoNzAsInRoZWFkIikoNzEsInRyIiw0NiksbXQoNzIsZnl0LDIsMSwidGgiLDQ3KSxoZSgpKCksZGUoNzMs'@;
put 'InRib2R5IiksbXQoNzQseXl0LDMsNywidHIiLDQ4KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSg5KSxJcigiICIsYS5zdWJPYmouYmFzZSwiICIpLGZlKDUpLElyKCIgIixhLnRhYmxlRGVzY3JpcHRpb24sIiAiKSxmZSg2KSx4ZSgicm91dGVyTGluayIsIi9zdGFnZS8i'@;
put 'K2Euc3ViT2JqLnRhYmxlSWQpLGZlKDIpLElyKCIgIixhLnN1Yk9iai50YWJsZUlkLCIiKSxmZSg1KSxJcigiICIsYS5zdWJPYmouc3VibWl0dGVkLCIgIiksZmUoNSksSXIoIiAiLGEuc3ViT2JqLnN1Ym1pdFJlYXNvbiwiICIpLGZlKDEyKSx4ZSgibmdJZiIsYS5kaWZmc0xpbWl0KSxmZSg2'@;
put 'KSx3cihhLmxlbnMudXBkYXRlZCksZmUoNCksd3IoYS5sZW5zLm5ldyksZmUoNCksd3IoYS5sZW5zLmRlbGV0ZWQpLGZlKDQpLHBpKCJuZ01vZGVsIixhLmZvcm1hdHRlZFZhbHVlcyksZmUoMiksd3IoYS5mb3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksZmUoMiks'@;
put 'eGUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLGZlKDUpLHhlKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksZmUoMikseGUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIHd5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTEpLG10KDEsX3l0'@;
put 'LDc1LDE2LCJkaXYiLDkyKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSx4ZSgibmdJZiIsYS5sb2FkZWQpfX1mdW5jdGlvbiBDeXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxvYWRpbmcgc3VibWl0dGVkIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiBTeXQo'@;
put 'YyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNSkoMSwiZGl2IiwxMDYpKDIsInNwYW4iLDc5KSxMZSgzLCIgTG9hZGluZy4uLiAiKSxoZSgpLG10KDQsQ3l0LDMsMCwiZGl2Iiw4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSg0KSx4ZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rp'@;
put 'b24gTXl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksbXQoMSx3eXQsMiwxLCJkaXYiLDg5KSgyLFN5dCw1LDEsImRpdiIsOTApLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpfX1sZXQgJDZlPSgoKT0+'@;
put 'e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMuZGV0YWlsc09wZW49ITEsdGhpcy5yZWplY3RPcGVuPSExLHRoaXMubGVucz17bmV3OjAsdXBkYXRlZDow'@;
put 'LGRlbGV0ZWQ6MH0sdGhpcy5sb2FkZWQ9ITEsdGhpcy5sb2FkaW5nVGFibGU9ITEsdGhpcy5zdWJtaXRSZWFzb249IiIsdGhpcy5pbnN0YW5jZT0iaG90SW5zdGFuY2UiLHRoaXMuYWNjZXB0TG9hZGluZz0hMSx0aGlzLnJlamVjdExvYWRpbmc9ITEsdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy50'@;
put 'YWJsZUZsYWc9ITEsdGhpcy5yb3dLZXlzPVtdLHRoaXMuY2hBcnI9W10sdGhpcy5zZWNvbmRPcGVuPSExLHRoaXMuZm9ybWF0dGVkVmFsdWVzPSEwLHRoaXMuY2hhbmdlc0Fycj1bXSx0aGlzLmRpZmZUYWJsZT17ZGF0YTpbXX0sdGhpcy5kaWZmc0xpbWl0PSExLHRoaXMucmVjb3Jkc0xpbWl0'@;
put 'PTEwMH1nZXQgbm9DaGFuZ2VzKCl7cmV0dXJuIDA9PT10aGlzLmxlbnMubmV3JiYwPT09dGhpcy5sZW5zLnVwZGF0ZWQmJjA9PT10aGlzLmxlbnMuZGVsZXRlZH1nb1RvQmFzZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nb1RvQXBwcm92YWxzTGlzdCgp'@;
put 'e3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9hcHByb3ZlIil9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb0JhY2soYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrYSl9Z29Ub1ZpZXdlcigpe3RoaXMucm91'@;
put 'dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dEZXRhaWxzU2VsZWN0KGEpe2EucHJldmVudERlZmF1bHQoKSx0aGlzLnRhYmxlRmxhZz0hdGhpcy50YWJsZUZsYWd9Z2V0RGV0YWlscygpe3RoaXMuZGV0YWlsc09wZW49ITB9b25Ib3RTZWxlY3Rpb24oYSl7dGhpcy5ob3RTZWxl'@;
put 'Y3Rpb249YS5zbGljZSgwLDQpfW9uSG90RGVzZWxlY3QoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RTZWxlY3Rpb249bnVsbH0sMTAwKX1yZWplY3RpbmcoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnJlamVjdExvYWRpbmc9ITAsYS5zdWJtaXRSZWFzb249YS5zdWJt'@;
put 'aXRSZWFzb24ucmVwbGFjZSgvXG4vZywiLiAiKTtsZXQgZD17U1RQX0FDVElPTjoiUkVKRUNUX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsU1RQX1JFQVNPTjphLnN1Ym1pdFJlYXNvbn07eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3Zl'@;
put 'cnMvcmVqZWN0aW9uIikudGhlbihoPT57YS5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITEsYS5yZWplY3RMb2FkaW5nPSExfSl9KSgpfWFwcHJvdmVUYWJsZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9u'@;
put 'Kigpe2EuYWNjZXB0TG9hZGluZz0hMDtsZXQgZD17QUNUSU9OOiJBUFBST1ZFX1RBQkxFIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6YS5wYXJhbXM/LkRJRkZUSU1FLExJQkRTOmEucGFyYW1zPy5MSUJEU307eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuYXBwcm92ZVRhYmxlKGQsIlNBU0Nv'@;
put 'bnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihoPT57YS5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITF9KX0pKCl9Z29Ub1N1Ym1pdExpc3QoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9y'@;
put 'ZXZpZXcvc3VibWl0dGVkIil9Y2FsbENoYW5nZXNJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYSkudGhlbihoPT57ZC50YWJsZURldGFpbHM9aC5qc3BhcmFtc1swXSxkLmpzUGFyYW1zPWguanNw'@;
put 'YXJhbXNbMF07bGV0IGY9W107Zm9yKGNvbnN0IHYgaW4gZC5qc1BhcmFtcylkLmpzUGFyYW1zLmhhc093blByb3BlcnR5KHYpJiZmLnB1c2godik7ZC5rZXlzQXJyYXk9Zn0pLmNhdGNoKGg9PntkLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57ZC5sb2FkZWQ9ITB9KX0pKCl9Zm9y'@;
put 'bWF0dGluZ0NoYW5nZWQoKXt0aGlzLmNhbGNEaWZmKCl9Y2FsY0RpZmYoKXtpZighdGhpcy5yZXNwb25zZSlyZXR1cm47bGV0IGE9dGhpcy5yZXNwb25zZS5uZXcsZD10aGlzLnJlc3BvbnNlLnVwZGF0ZXMsaD10aGlzLnJlc3BvbnNlLmRlbGV0ZWQsZj10aGlzLnJlc3BvbnNlLm9yaWdpbmFs'@;
put 'czt0aGlzLmZvcm1hdHRlZFZhbHVlcyYmKGE9dGhpcy5yZXNwb25zZS5mbXRfbmV3LGQ9dGhpcy5yZXNwb25zZS5mbXRfdXBkYXRlcyxoPXRoaXMucmVzcG9uc2UuZm10X2RlbGV0ZWQsZj10aGlzLnJlc3BvbnNlLmZtdF9vcmlnaW5hbHMpLHRoaXMub3JpZ2luYWxzPWYsdGhpcy5yb3dLZXlz'@;
put 'PVtdO2ZvcihsZXQgZHQ9MDtkdDxkLmxlbmd0aDtkdCsrKXtsZXQgSnQ9T2JqZWN0LmtleXMoZFtkdF0pO2ZvcihsZXQgdm49MDt2bjxKdC5sZW5ndGg7dm4rKylkW2R0XVtKdFt2bl1dIT09ZltkdF1bSnRbdm5dXSYmdGhpcy5jaGFuZ2VzQXJyLnB1c2goe2luZDpkdCxmaWVsZDpKdFt2bl0s'@;
put 'cHJvcDpkW2R0XVtKdFt2bl1dLG9yaWdpbmFsOmZbZHRdW0p0W3ZuXV19KX10aGlzLmxlbnM9e25ldzp0aGlzLnBhcmFtcz8uTlVNX0FEREVEfHwwLHVwZGF0ZWQ6dGhpcy5wYXJhbXM/Lk5VTV9VUERBVEVEfHwwLGRlbGV0ZWQ6dGhpcy5wYXJhbXM/Lk5VTV9ERUxFVEVEfHwwfTtsZXQgWj1b'@;
put 'XSxuZT1kLmNvbmNhdChhLGgpO2ZvcihsZXQgZHQ9MDtkdDx0aGlzLnJlc3BvbnNlLmNvbHMubGVuZ3RoO2R0KyspWi5wdXNoKHRoaXMucmVzcG9uc2UuY29sc1tkdF0uTkFNRSk7bGV0IGNlPXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5yZWNvcmRzTGltaXQ6dGhpcy5s'@;
put 'ZW5zLm5ldyxiZT10aGlzLmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMudXBkYXRlZDt0aGlzLmRpZmZzTGltaXQ9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGlt'@;
put 'aXR8fHRoaXMubGVucy5kZWxldGVkPnRoaXMucmVjb3Jkc0xpbWl0LHRoaXMuYWRkQ291bnQ9Y2U7bGV0IEJlPVtdLHFlPVtdO2ZvcihsZXQgZHQ9MDtkdDxaLmxlbmd0aDtkdCsrKXFlLnB1c2goe2RhdGE6WltkdF0scmVhZE9ubHk6ITB9KTt0aGlzLmRpZmZUYWJsZS5kYXRhPW5lO2Zvcihs'@;
put 'ZXQgZHQ9MDtkdDxuZS5sZW5ndGg7ZHQrKyl7bGV0IHZuPU9iamVjdC5rZXlzKG5lW2R0XSk7dGhpcy5yb3dLZXlzLnB1c2godm4pfWxldCBydD1bXSxwdD1bXTtmb3IobGV0IGR0PTA7ZHQ8dGhpcy5kaWZmVGFibGUuZGF0YS5sZW5ndGg7ZHQrKyl7aWYoZHQ8YmUmJjAhPT1iZSl7cnQucHVz'@;
put 'aChbXSkscHQucHVzaChbXSksQmUucHVzaCgidXBkYXRlZCIpO2xldCBKdD1PYmplY3Qua2V5cyh0aGlzLmRpZmZUYWJsZS5kYXRhW2R0XSk7Zm9yKGxldCB2bj0wO3ZuPEp0Lmxlbmd0aDt2bisrKXtsZXQgQ249SnRbdm5dO2ZbZHRdW0NuXSE9PWRbZHRdW0NuXT8ocnRbZHRdLnB1c2goITAp'@;
put 'LHB0W2R0XS5wdXNoKGZbZHRdW0NuXSkpOihydFtkdF0ucHVzaCghMSkscHRbZHRdLnB1c2gobnVsbCkpfXRoaXMuYXJyQ2hhbmdlZD1ydCx0aGlzLmFyck9mQ2hhbmdlcz1wdH1kdD49YmUmJmR0PGJlK2NlJiZCZS5wdXNoKCJhZGRlZCIpLGR0PmNlK2JlLTEmJkJlLnB1c2goImRlbGV0ZWQi'@;
put 'KX10aGlzLmNoQXJyPUJlLHRoaXMucm93SGVhZGVyPXRoaXMucm93S2V5c1swXSx0aGlzLmRpZmZUYWJsZS5kYXRhPW5lfW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGEuX2RldGFpbHNTdWI9YS5zYXNTdG9yZVNlcnZpY2Uuc3VibWl0dERl'@;
put 'dGFpbC5zdWJzY3JpYmUoZnVuY3Rpb24oKXt2YXIgaD1lZShmdW5jdGlvbiooZil7YS5zdWJPYmo9Zi52aWV3RGF0YSxhLnRhYmxlSWQ9Zi52aWV3RGF0YS50YWJsZUlkLGEuc3VibWl0dGVkPWYudmlld0RhdGEuc3ViLGEuc3VibWl0RGV0YWlscz1mLmRhdGEsYS5zdWJtaXRBcnI9W107Zm9y'@;
put 'KGxldCBNIGluIGEuc3VibWl0RGV0YWlscykic3ViIiE9PU0mJmEuc3VibWl0QXJyLnB1c2goTSk7bGV0IHY9e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKHYs'@;
put 'IlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihNPT57YS5wYXJhbXM9TS5wYXJhbXNbMF0sYS5yZXNwb25zZT1NLGEuY2FsY0RpZmYoKX0pLmNhdGNoKE09Pk0pLmZpbmFsbHkoKCk9PnthLmxvYWRpbmdUYWJsZT0hMH0pLGEuY2FsbENoYW5nZXNJbmZvKGEudGFi'@;
put 'bGVJZCl9KTtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSksdHlwZW9mIGEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkPiJ1IilyZXR1cm47YS50YWJsZUlkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO2xldCBkPXtB'@;
put 'Q1RJT046IlNIT1dfRElGRlMiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNlLnNob3dEaWZmcyhkLCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oaD0+e2EucGFyYW1zPWgucGFyYW1z'@;
put 'WzBdLGEucmVzcG9uc2U9aCxhLmNhbGNEaWZmKCl9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExfSkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxlPSEwLGEuc2V0Rm9jdXMoKX0pLGEuY2FsbENoYW5nZXNJbmZvKGEudGFibGVJZCl9KSgpfW5nT25EZXN0cm95KCl7dGhpcy5fZGV0'@;
put 'YWlsc1N1YiYmdGhpcy5fZGV0YWlsc1N1Yi51bnN1YnNjcmliZSgpfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYWNjZXB0QnRuIik7YSYmYS5mb2N1cygpfSwyMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFpoKSxHZSh2YyksR2UoQ3UpLEdlKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZS1kZXRhaWxzIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo0Mix2'@;
put 'YXJzOjEyLGNvbnN0czpbWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxlZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1'@;
put 'dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzQsIm5nSWYiXSxbMSwiZm9ybS1ibG9jayJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgiXSxbImlkIiwiZm9ybUZpZWxkc184Iiwicm93cyIsIjUiLDEsInctMTAwIiwzLCJuZ01v'@;
put 'ZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIiwiaW5uZXJIVE1MIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9h'@;
put 'ZGluZyJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0IGxpbmstaXQiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwibGVmdCIsNCwibmdJZiJdLFsxLCJsZWZ0IiwibGluay1pdCIsMywicm91dGVyTGluayJdLFsi'@;
put 'Y2xyVGFiTGluayIsIiJdLFs0LCJjbHJJZkFjdGl2ZSJdLFsxLCJvdmVyZmxvdy1hdXRvIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiY2FyZC1oZWFkZXIgZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwib3ZlcmZsb3ctYXV0byIsIm1yLTEy'@;
put 'Il0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNz'@;
put 'IiwibXQtMCIsNCwibmdJZiJdLFsxLCJtdC0wIl0sWzEsImNhcmQtaGVhZGVyIiwicC0wIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxCYWNrIl0sWzEsImJ0biIsImJ0bi1vdXRsaW5lIiwibS0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJjYXJldCIsImRpciIs'@;
put 'ImxlZnQiLCJzaXplIiwiMjAiXSxbMSwiY2xyLWNvbC1tZC00IiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIl0sWzEsImNsci1jb2wtbWQtNCIsImFwcHJvdmFsSW5mbyJdLFsxLCJ0b29sdGlwIiwidG9vbHRpcC1zbSIsInRv'@;
put 'b2x0aXAtdG9wLWxlZnQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImluZm8tc3RhbmRhcmQiLCJzaXplIiwiMjgiXSxbMSwidGV4dC1jZW50ZXIiLCJtdC0xMCJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJoLTI0dmggZC1m'@;
put 'bGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInRhYmxlQ29udCIsIm10LTAiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC1zaXplLTE4Iiw0LCJuZ0lmIl0sWzEsImQtZmxleCJdLFsiY2xhc3MiLCJsZWZ0'@;
put 'Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiZC1mbGV4IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImNsci1yb3ciLCJmb250LXNpemUtMTUiXSxbMSwiY2xyLWNvbC1tZC01Il0sWzEsImNsci1jb2wtbWQtNyJdLFsxLCJjYXJk'@;
put 'LWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtMCJdLFsxLCJjbHItcm93IiwiY2xyLWdhcC01IiwiY2xyLWdhcC1zbS0wIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4'@;
put 'dC1jZW50ZXIiLCJtdC01IiwibXItNWkiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsInRleHQtY2VudGVy'@;
put 'IiwibXQtNSIsMywiY2xpY2siXSxbMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJpZCIs'@;
put 'ImFjY2VwdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwibXItNWkiLDMsImNsaWNrIiwiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWyJpZCIsInJlamVjdEJ0biIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuIiwiYnRuLWRhbmdlciIsIm1yLTVpIiwz'@;
put 'LCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsIm1sLTIwaSJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwiY2hlY2tlZCIsIiIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMSwiZm9ybWF0dGVkLXZhbHVlcy10b2dnbGUiXSxbMSwiY2FyZC1i'@;
put 'bG9jayIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwicm93cy1ub3RpY2UiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWdhcC01IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWdhcC1zbS0w'@;
put 'Il0sWzEsImxhYmVsIiwibGFiZWwtd2FybmluZyJdLFsxLCJiYWRnZSJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwibGFiZWwiLCJsYWJlbC1kYW5nZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXNpemUtMTgiXSxbMSwibXQtMTUiXSxbMSwibGluay1pdCIsMywicm91dGVy'@;
put 'TGluayJdLFsxLCJtdC0xMCJdLFsxLCJyb3dzLW5vdGljZSJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi10cmlhbmdsZSIsMSwibWItNSIsImNvbG9yLW9yYW5nZSJdLFsxLCJoLTI0dmgiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJhbGlnbi1pdGVt'@;
put 'cy1jZW50ZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWzEsImQtZmxleCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJsZWZ0IiwzLCJuZ0NsYXNzIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibGVmdCIsMywibmdD'@;
put 'bGFzcyJdLFsiY2xhc3MiLCJ0b29sdGlwLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVy'@;
put 'Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQtYmxvY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFz'@;
put 'cyIsImNhcmQgbS0wIiw0LCJuZ0lmIl0sWzEsImNhcmQiLCJtLTAiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJjbHItY29sLW1kLTQiXSxbMSwi'@;
put 'bXQtMCIsImZvbnQtd2VpZ2h0LTMwMCIsInRleHQtY2VudGVyIl0sWzEsIm0tMCIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibS0wIiwibWwtMjAtaSJdLFsxLCJjYXJkLWJsb2NrIiwicC0wIiwib3ZlcmZsb3ctYXV0byIsIm1yLTEyIl0sWyJjbGFzcyIsImgtMjV2'@;
put 'aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250Il0sWzEsImgtMjV2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNl'@;
put 'bnRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImxvYWRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGJpKGguZGV0YWlsc09wZW4sdil8fChoLmRldGFpbHNPcGVu'@;
put 'PXYpLHZ9KSxkZSgxLCJoMyIsMSksTGUoMiwiQXBwcm92YWwgRGV0YWlscyIpLGhlKCksZGUoMywiZGl2IiwyKSg0LCJ0YWJsZSIsMykoNSwidGhlYWQiKSg2LCJ0ciIpKDcsInRoIiw0KSxMZSg4LCJOYW1lIiksaGUoKSxkZSg5LCJ0aCIsNCksTGUoMTAsIlZhbHVlIiksaGUoKSgpKCksZGUo'@;
put 'MTEsInRib2R5IiksbXQoMTIsTmJ0LDUsMywidHIiLDUpLGhlKCkoKSgpLGRlKDEzLCJkaXYiLDYpKDE0LCJidXR0b24iLDcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5kZXRhaWxzT3Blbj0hMX0pLExlKDE1LCIgT2sgIiksaGUoKSgpKCksZGUoMTYsImNsci1tb2RhbCIsMCks'@;
put 'Z2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGJpKGgudGFibGVGbGFnLHYpfHwoaC50YWJsZUZsYWc9diksdn0pLGRlKDE3LCJoMyIsMSksTGUoMTgsIkFsbCBEZXRhaWxzIiksaGUoKSxkZSgxOSwiZGl2IiwyKSxtdCgyMCx6YnQsMTksMiwiY2xyLXRhYnMiLDgp'@;
put 'LGhlKCksZGUoMjEsImRpdiIsNikoMjIsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnRhYmxlRmxhZz0hMX0pLExlKDIzLCIgT2sgIiksaGUoKSgpKCksZGUoMjQsImNsci1tb2RhbCIsMCksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0'@;
put 'dXJuIGJpKGgucmVqZWN0T3Blbix2KXx8KGgucmVqZWN0T3Blbj12KSx2fSksZGUoMjUsImgzIiwxKSxMZSgyNiwiUmVhc29uIE1lc3NhZ2UiKSxoZSgpLGRlKDI3LCJkaXYiLDIpKDI4LCJmb3JtIikoMjksInNlY3Rpb24iLDkpKDMwLCJkaXYiLDEwKSgzMSwibGFiZWwiLDExKSxMZSgzMiwi'@;
put 'UmVhc29uIGZvciByZWplY3Rpbmc/IiksaGUoKSxkZSgzMywidGV4dGFyZWEiLDEyKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGJpKGguc3VibWl0UmVhc29uLHYpfHwoaC5zdWJtaXRSZWFzb249diksdn0pLGhlKCkoKSgpKCkoKSxkZSgzNCwiZGl2Iiw2KSgzNSwi'@;
put 'YnV0dG9uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlamVjdE9wZW49ITF9KSxMZSgzNiwiIENhbmNlbCAiKSxoZSgpLGRlKDM3LCJidXR0b24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVqZWN0aW5nKCl9KSxMZSgzOCwiIE9LICIpLGhlKCko'@;
put 'KSgpLGRlKDM5LCJkaXYiLDE1KSxtdCg0MCxseXQsNCwyLCJkaXYiLDE2KSg0MSxNeXQsMywyLCJkaXYiLDgpLGhlKCkpLDImZCYmKHBpKCJjbHJNb2RhbE9wZW4iLGguZGV0YWlsc09wZW4pLGZlKDEyKSx4ZSgibmdGb3JPZiIsaC5rZXlzQXJyYXkpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4i'@;
put 'LGgudGFibGVGbGFnKSxmZSg0KSx4ZSgibmdJZiIsaC50YWJsZUZsYWcpLGZlKDQpLHBpKCJjbHJNb2RhbE9wZW4iLGgucmVqZWN0T3BlbiksZmUoOSkscGkoIm5nTW9kZWwiLGguc3VibWl0UmVhc29uKSx4ZSgibmdNb2RlbE9wdGlvbnMiLFlzKDExLFBidCkpKCJpbm5lckhUTUwiLGguc3Vi'@;
put 'bWl0UmVhc29uLFY0KSxmZSg0KSx4ZSgiY2xyTG9hZGluZyIsaC5yZWplY3RMb2FkaW5nKSxmZSgzKSx4ZSgibmdJZiIsIWguc3VibWl0dGVkKSxmZSgpLHhlKCJuZ0lmIixoLnN1Ym1pdHRlZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGxzLHlvLGE3LGVjLEIxLG5sLGk3LEdzLHlwLGMxLEZsLHVz'@;
put 'LG91LCR1LFYwLEZ5LFIyLGRzLFcxLFZ5LElkLHltLHdtLFM3LF9tLGJtLHc3XSxzdHlsZXM6WycubG9hZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6NzV2aDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246'@;
put 'Y29sdW1ufS5tb2RhbExhcmdlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MHJlbSFpbXBvcnRhbnR9LmFkZGVkUm93W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSw3NywxMTcsLjIpO2JvcmRlci1yYWRpdXM6NXB4fS5kZWxldGVkUm93W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkIHJnYmEoNzAsNzEsNzAsLjIpO2JvcmRlci1yYWRpdXM6NXB4fSAgYm9keVtjZHMtdGhlbWU9ZGFya10gdGFibGUgLnVwZGF0ZWRSb3d7YmFja2dyb3VuZDojOTM5NzFlfSAgYm9keVtjZHMtdGhlbWU9ZGFya10gdGFibGUgLmFkZGVkUm93e2JhY2tn'@;
put 'cm91bmQ6IzU2OTk1Zn0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIHRhYmxlIC5kZWxldGVkUm93e2JhY2tncm91bmQ6IzhhNWE1YX0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSB0YWJsZSAudXBkYXRlZFJvd3tiYWNrZ3JvdW5kOiNmYWZkYTh9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gdGFibGUg'@;
put 'LmFkZGVkUm93e2JhY2tncm91bmQ6IzkyZDA5YX0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSB0YWJsZSAuZGVsZXRlZFJvd3tiYWNrZ3JvdW5kOiNlNmIzYjN9LnVwZGF0ZWRSb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgcmdiYSg5LDExNyw5LC4yKTtib3JkZXItcmFk'@;
put 'aXVzOjVweH0uY2hbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzAwMDAwMDFhO2JvcmRlcjoxcHggc29saWQgcmdiYSgxMDQsMTAwLDAsLjQpO2JvcmRlci1yYWRpdXM6NXB4fS5jaFtfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZDojZmM4Nzc4NjZ9LnRvb2x0aXBb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdLCAudG9v'@;
put 'bHRpcFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjU0MTY3cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsZXR0ZXItc3BhY2luZzpub3JtYWw7YmFja2dyb3VuZDojMzE0MzUxO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtjb2xv'@;
put 'cjojZjBmMWVjO2xpbmUtaGVpZ2h0Oi43NXJlbTttYXJnaW46MDtwYWRkaW5nOi4zNzVyZW0gLjVyZW07d2lkdGg6MjM1cHg7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEwMCUgMTJweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7bWFyZ2luLWJvdHRvbTouNjY2Njdy'@;
put 'ZW19LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LS4zNzVyZW07bGVmdDowO3RvcDphdXRvO3JpZ2h0OmF1dG87Y29udGVudDoi'@;
put 'Ijtib3JkZXItbGVmdDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItdG9wOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgdHJhbnNwYXJlbnR9LnRhYmxlW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXtib3JkZXI6MHB4IHNvbGlkfS50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9Y2hlY2tib3hdW19uZ2NvbnRlbnQtJUNPTVAlXTpjaGVja2VkICsgbGFiZWxbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItY29sb3I6IzMxNDM1'@;
put 'MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBlYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LnRhYmxlQ29udFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0bzttYXJnaW46MTVw'@;
put 'eCAxMHB4IDEwcHh9LnRhYmxlQ29udFtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkfS5hcHByb3ZhbEluZm9bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmFwcHJv'@;
put 'dmFsQmFja1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsuYXBwcm92YWxJbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50'@;
put 'OmNlbnRlcjttYXJnaW4tdG9wOjE1cHh9LmFwcHJvdmFsQmFja1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNXB4fS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjByZW0haW1wb3J0YW50O21p'@;
put 'bi1oZWlnaHQ6Y2FsYygxMDB2aCArIC0wcHgpIWltcG9ydGFudH0udGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGQubGVmdFtfbmdjb250ZW50LSVDT01QJV0sIC50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnQ7'@;
put 'd2lkdGg6MTUwcHghaW1wb3J0YW50O2ZsZXg6MH19LnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkLmxlZnRbX25nY29udGVudC0lQ09NUCVdLCAudGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGgubGVmdFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MTt3'@;
put 'aWR0aDozMDBweCFpbXBvcnRhbnR9LnRvb2xsW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNlNmIzYjM7Y29sb3I6IzMxNDM1MTt0b3A6MDtoZWlnaHQ6MzZweDt3aWR0aDoxMDAlO2xlZnQ6MDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0'@;
put 'ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9I2FjY2VwdEJ0bltfbmdjb250ZW50LSVDT01QJV0sICNyZWplY3RCdG5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE3NXB4fS5mb3JtYXR0ZWQtdmFsdWVzLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjc1cHh9Y2xyLW1vZGFs'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWJvZHktd3JhcHBlcntvdmVyZmxvdzphdXRvfS5yb3dzLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MTBweDtjb2xvcjojNmE2YTZhO2ZvbnQtc2l6ZTox'@;
put 'NXB4fS5yb3dzLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9J119KX19cmV0dXJuIGN9KSgpO2NvbnN0IHh5dD1jPT4oe25vQm9yZGVyOmN9KSxFeXQ9KCk9PlszLDUsMTAsMTVdO2Z1bmN0aW9uIFR5dChjLGwpezEmYyYm'@;
put 'KGRlKDAsImRpdiIsMTApKDEsImRpdiIsMTEpLEd0KDIsImNsci1pY29uIiwxMiksZGUoMywiaDMiLDEzKSxMZSg0LCJUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFpbmluZyIpLGhlKCkoKSgpKX1mdW5jdGlvbiBBeXQoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTQpLExlKDEsIiBSRVZJRVcg'@;
put 'IiksaGUoKSl9ZnVuY3Rpb24ga3l0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTUpLExlKDEsIiBZb3UgaGF2ZSAiKSxkZSgyLCJzcGFuIiksTGUoMyksaGUoKSxMZSg0LCJhcHByb3ZhbHMgcmVtYWluaW5nICIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLElyKCIiLGEucmVtYWlu'@;
put 'ZWQsIiAiKX19ZnVuY3Rpb24gRHl0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMTgpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIEl5dChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiwiTG9hZGluZyBhcHByb3ZhbHMgbGlzdCIpLGhlKCkoKSl9ZnVuY3Rp'@;
put 'b24gUnl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksbXQoMSxEeXQsMiwwLCJzcGFuIiwxNykoMixJeXQsMywwLCJkaXYiLDkpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24g'@;
put 'THl0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzYpfWZ1bmN0aW9uIE95dChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDM3KSwyJmMmJnhlKCJjbHJTbWFsbCIsITApfWZ1bmN0aW9uIFB5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1yb3ciKSgxLCJj'@;
put 'bHItZGctY2VsbCIpLExlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxMZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksTGUoNiksaGUoKSxkZSg3LCJjbHItZGctY2VsbCIpLExlKDgpLGhlKCksZGUoOSwiY2xyLWRnLWNlbGwiKSgxMCwiZGl2IiwyNCkoMTEsImEiLDI1KSxGdCgi'@;
put 'Y2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoT2UoMikuZ2V0Q2xpY2tlZChoKSl9KSxHdCgxMiwiY2xyLWljb24iLDI2KSxkZSgxMywic3BhbiIsMjcpLExlKDE0LCJHbyB0byByZXZpZXcgcGFnZSBzY3JlZW4iKSxoZSgpKCksZGUoMTUsImEiLDI4KSxG'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPU9lKDIpO3JldHVybiBDdChmLnJlamVjdExvYWRpbmc/IiI6TS5yZWplY3RpbmcodikpfSksbXQoMTYsTHl0LDEsMCwiY2xyLWljb24iLDI5KSgxNyxPeXQsMSwxLCJjbHItc3Bpbm5l'@;
put 'ciIsMzApLGRlKDE4LCJzcGFuIiwyNyksTGUoMTksIlJlamVjdCIpLGhlKCkoKSxkZSgyMCwiYSIsMzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikuZ2V0VGFibGUoaC50YWJsZUlkKSl9KSxHdCgyMSwiY2xyLWljb24iLDMy'@;
put 'KSxkZSgyMiwic3BhbiIsMjcpLExlKDIzLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxoZSgpKCkoKSgpLGRlKDI0LCJjbHItZGctY2VsbCIsMzMpKDI1LCJidXR0b24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBPZSgyKS5k'@;
put 'b3dubG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksR3QoMjYsImNsci1pY29uIiwzNSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEuc3VibWl0dGVyKSxmZSgyKSx3cihhLmJhc2VUYWJsZSksZmUoMiksd3IoYS5zdWJtaXR0'@;
put 'ZWQpLGZlKDIpLHdyKGEuc3VibWl0UmVhc29uKSxmZSg4KSx4ZSgibmdJZiIsIWEucmVqZWN0TG9hZGluZyksZmUoKSx4ZSgibmdJZiIsYS5yZWplY3RMb2FkaW5nKSxmZSg4KSx4ZSgiaWQiLGEudGFibGVJZCl9fWZ1bmN0aW9uIEZ5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImNs'@;
put 'ci1kYXRhZ3JpZCIsMTkpKDIsImNsci1kZy1jb2x1bW4iLDIwKSxMZSgzLCJTVUJNSVRURVIiKSxoZSgpLGRlKDQsImNsci1kZy1jb2x1bW4iLDIwKSxMZSg1LCJCQVNFIFRBQkxFIiksaGUoKSxkZSg2LCJjbHItZGctY29sdW1uIiwyMCksTGUoNywiU1VCTUlUVEVEIiksaGUoKSxkZSg4LCJj'@;
put 'bHItZGctY29sdW1uIiwyMCksTGUoOSwiU1VCTUlUIFJFQVNPTiIpLGhlKCksZGUoMTAsImNsci1kZy1jb2x1bW4iKSxMZSgxMSwiQUNUSU9OIiksaGUoKSxkZSgxMiwiY2xyLWRnLWNvbHVtbiIpLExlKDEzLCJET1dOTE9BRCIpLGhlKCksbXQoMTQsUHl0LDI3LDcsImNsci1kZy1yb3ciLDIx'@;
put 'KSxkZSgxNSwiY2xyLWRnLWZvb3RlciIpKDE2LCJjbHItZGctcGFnaW5hdGlvbiIsMjIsMCkoMTgsImNsci1kZy1wYWdlLXNpemUiLDIzKSxMZSgxOSwiSXRlbXMgcGVyIHBhZ2UiKSxoZSgpLExlKDIwKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9dm8oMTcpLGQ9T2UoKTtmZSgyKSx4ZSgi'@;
put 'Y2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwiYmFzZVRhYmxlIiksZmUoMikseGUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSx4ZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNvbiIpLGZlKDYpLHhlKCJjbHJEZ0l0ZW1zT2YiLGQuYXBwcm92'@;
put 'ZUxpc3QpLGZlKDIpLHhlKCJjbHJEZ1BhZ2VTaXplIiwxMCksZmUoMikseGUoImNsclBhZ2VTaXplT3B0aW9ucyIsWXMoMTAsRXl0KSksZmUoMiksRmYoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBhcHByb3ZhbHMgIil9fWxldCBI'@;
put 'eXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5jZHI9dix0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwfWdldFRhYmxl'@;
put 'KGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0Q2xpY2tlZChhKXt2b2lkIDAhPT10aGlzLmFwcHJvdmVMaXN0JiYodGhpcy50YWJsZUlkPXRoaXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCx0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoInJldmlldy9hcHByb3Zl'@;
put 'RGV0LyIrdGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkKSl9cmVqZWN0aW5nKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3ZvaWQgMCE9PWQuYXBwcm92ZUxpc3QmJihkLnRhYmxlSWQ9ZC5hcHByb3ZlTGlzdFthXS50YWJsZUlkKTtsZXQgaD17U1RQX0FDVElPTjoiUkVK'@;
put 'RUNUX1RBQkxFIixUQUJMRTpkLnRhYmxlSWQsU1RQX1JFQVNPTjoicXVpY2sgcmVqZWN0aW9uIn07dHJ5eyhkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMCwoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGgsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMv'@;
put 'cmVqZWN0aW9uIikpLmZyb21zYXNbMF0uUkVTUE9OU0UuaW5jbHVkZXMoIlNVQ0NFU1MiKSYmKChkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMSxkLmFwcHJvdmVMaXN0Py5zcGxpY2UoYSwxKSxkLnJlbWFpbmVkLS0sZC5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1jYXRjaChm'@;
put 'KXtkLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9yZWplY3Rpb24iLGYpfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmZldGNoQXBwcm92YWxzKCl9KSgpfWZldGNoQXBwcm92YWxzKCl7dmFyIGE9dGhpcztyZXR1'@;
put 'cm4gZWUoZnVuY3Rpb24qKCl7YS5pdGVtc051bT0xMDtsZXQgZD17U1RQX0FDVElPTjoiT1BFTl9BUFBST1ZBTFMifTt0cnl7bGV0IGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0QXBwcm92YWxzKGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIik7YS5yZW1h'@;
put 'aW5lZD1oLmZyb21zYXMubGVuZ3RoO2xldCBmPWguZnJvbXNhcy5tYXAoZnVuY3Rpb24odil7cmV0dXJue3RhYmxlSWQ6di5UQUJMRV9JRCxzdWJtaXR0ZXI6di5TVUJNSVRURURfQllfTk0sc3VibWl0dGVkOnYuU1VCTUlUVEVEX09OX0RUVE0sYmFzZVRhYmxlOnYuQkFTRV9UQUJMRSxzdWJt'@;
put 'aXRSZWFzb246di5TVUJNSVRURURfUkVBU09OX1RYVH19KTthLmFwcHJvdmVMaXN0PWYsYS5sb2FkZWQ9ITB9Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvZ2V0YXBwcm92YWxzIixoKX19KSgpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2Fz'@;
put 'U2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfXN0'@;
put 'YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFpoKSxHZSh2YyksR2UoTHMpLEdlKHRsKSxHZSh4cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFwcHJvdmUiXV0saG9zdEF0dHJzOlsxLCJjb250'@;
put 'ZW50LWNvbnRhaW5lciJdLGRlY2xzOjksdmFyczo4LGNvbnN0czpbWyJwYWdpbmF0aW9uIiwiIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIl0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwzLCJuZ0NsYXNz'@;
put 'Il0sWyJjbGFzcyIsImNlbnRlciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiYXBwcm92YWxzLWxpc3Qtd3JhcHBlciIsNCwibmdJZiJd'@;
put 'LFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1jb2wtbWQtMTIiXSxbNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImNhcmQtYmxvY2siLCJub2FwcHJvdmFscy1pbmZvLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUi'@;
put 'LCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEs'@;
put 'ImFwcHJvdmFscy1saXN0LXdyYXBwZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImRhdGFncmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJd'@;
put 'LFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0aW9ucyJdLFsicm9sZSIsInRvb2x0aXAiLDEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1hcm91bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRv'@;
put 'bS1sZWZ0IiwiY29sb3ItZ3JlZW4iLDMsImNsaWNrIl0sWyJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjI0Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1y'@;
put 'ZWQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiIsNCwibmdJZiJdLFszLCJjbHJTbWFsbCIsNCwibmdJZiJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ibHVlIiwzLCJj'@;
put 'bGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siLCJpZCJdLFsic2hhcGUiLCJk'@;
put 'b3dubG9hZCJdLFsic2hhcGUiLCJiYW4iLCJzaXplIiwiMjIiXSxbMywiY2xyU21hbGwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksbXQoMixUeXQsNSwwLCJkaXYiLDMpLGRlKDMsImRpdiIsNCksbXQoNCxBeXQsMiwwLCJoMyIsNSko'@;
put 'NSxreXQsNSwxLCJwIiw2KSxoZSgpLG10KDYsUnl0LDMsMiwiZGl2Iiw3KSxkZSg3LCJkaXYiLDgpLG10KDgsRnl0LDIxLDExLCJkaXYiLDkpLGhlKCkoKSgpKSwyJmQmJihmZSgyKSx4ZSgibmdJZiIsMD09PWgucmVtYWluZWQpLGZlKCkseGUoIm5nQ2xhc3MiLHNwKDYseHl0LCFoLmxvYWRl'@;
put 'ZCkpLGZlKCkseGUoIm5nSWYiLGgubG9hZGVkJiYwIT09aC5yZW1haW5lZCksZmUoKSx4ZSgibmdJZiIsaC5sb2FkZWQmJjAhPT1oLnJlbWFpbmVkKSxmZSgpLHhlKCJuZ0lmIiwhaC5sb2FkZWQpLGZlKDIpLHhlKCJuZ0lmIixoLmFwcHJvdmVMaXN0JiYwIT09aC5yZW1haW5lZCkpfSxkZXBl'@;
put 'bmRlbmNpZXM6W3d1LHlvLFRtLFFmLGs3LGxPLEp5LHF4LGNPLHhtLFNwLEQ3LHRfLEVtLEU3LE1tLFQ3LEZsLE1oXSxzdHlsZXM6WyIuY29sdW1uLWNlbnRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2Vu'@;
put 'dGVyO2FsaWduLWl0ZW1zOmNlbnRlcn0uZGF0YWdyaWRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFncmlkLWNvbHVtbltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWdyaWQtY29sdW1uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdXRsaW5lOm5vbmUhaW1wb3J0YW50fS5saW5rc1tf'@;
put 'bmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwO2N1cnNvcjpwb2ludGVyfS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0l'@;
put 'Q09NUCVdOmJlZm9yZSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVt'@;
put 'IHNvbGlkICMzMTQzNTF9Lm5vQm9yZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9LmFwcHJvdmFscy1saXN0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2hlaWdodDo3MHZoO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5'@;
put 'LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXJ9Lm5vYXBwcm92YWxzLWluZm8td3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWdu'@;
put 'LWl0ZW1zOmNlbnRlcjtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX0iXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgTnl0PWM9Pih7bm9Cb3JkZXI6Y30pLFZ5dD0oKT0+WzMsNSwxMCwxNV07ZnVuY3Rpb24gQnl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMykoMSwiZGl2IiwxNCksR3QoMiwi'@;
put 'Y2xyLWljb24iLDE1KSxkZSgzLCJoMyIsMTYpLExlKDQsIiBZb3UgaGF2ZSBub3Qgc3VibWl0dGVkIGFueSB0YWJsZXMgIiksaGUoKSgpKCkpfWZ1bmN0aW9uIGp5dChjLGwpezEmYyYmKGRlKDAsImgzIiwxNyksTGUoMSwiIFNVQk1JVCBRVUVVRSAiKSxoZSgpKX1mdW5jdGlvbiB6eXQoYyxs'@;
put 'KXtpZigxJmMmJihkZSgwLCJwIiwxOCksTGUoMSwiIFlvdSBoYXZlICIpLGRlKDIsInNwYW4iKSxMZSgzKSxoZSgpLExlKDQsInN1Ym1pc3Npb25zIHdhaXRpbmcgdG8gYmUgYXBwcm92ZWQgIiksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDMpLElyKCIiLGEucmVtYWluZWQsIiAiKX19'@;
put 'ZnVuY3Rpb24gVXl0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMjEpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIFp5dChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgbGlzdCIpLGhlKCkoKSl9ZnVuY3Rpb24gV3l0KGMs'@;
put 'bCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOSksbXQoMSxVeXQsMiwwLCJzcGFuIiwyMCkoMixaeXQsMywwLCJkaXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIFl5dChjLGwp'@;
put 'e2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1yb3ciLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDUpLmdvVG9EZXRhaWxzKGgudGFibGVJZCkpfSksZGUoMSwiY2xyLWRnLWNlbGwiKSxMZSgyKSxoZSgpLGRl'@;
put 'KDMsImNsci1kZy1jZWxsIiksTGUoNCksaGUoKSxkZSg1LCJjbHItZGctY2VsbCIpLExlKDYpLGhlKCksZGUoNywiY2xyLWRnLWNlbGwiKSg4LCJkaXYiLDI5KSg5LCJhIiwzMCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSg1KS5n'@;
put 'b1RvU3RhZ2UoaC50YWJsZUlkKSl9KSxHdCgxMCwiY2xyLWljb24iLDMxKSxkZSgxMSwic3BhbiIsMzIpLExlKDEyLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxoZSgpKCkoKSgpLGRlKDEzLCJjbHItZGctY2VsbCIsMzMpKDE0LCJidXR0b24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBPZSg1KS5kb3dubG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksR3QoMTUsImNsci1pY29uIiwzNSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEuYmFzZSksZmUo'@;
put 'Miksd3IoYS5zdWJtaXR0ZWQpLGZlKDIpLHdyKGEuc3VibWl0UmVhc29uKX19ZnVuY3Rpb24gR3l0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiY2xyLWRhdGFncmlkIiwyMykoMiwiY2xyLWRnLWNvbHVtbiIpLExlKDMsIkJBU0UgVEFCTEUiKSxoZSgpLGRlKDQsImNsci1kZy1jb2x1'@;
put 'bW4iLDI0KSxMZSg1LCJTVUJNSVRURUQiKSxoZSgpLGRlKDYsImNsci1kZy1jb2x1bW4iLDI0KSxMZSg3LCJTVUJNSVQgUkVBU09OIiksaGUoKSxkZSg4LCJjbHItZGctY29sdW1uIiwxMyksTGUoOSwiQUNUSU9OIiksaGUoKSxkZSgxMCwiY2xyLWRnLWNvbHVtbiIsMTMpLExlKDExLCJET1dO'@;
put 'TE9BRCIpLGhlKCksbXQoMTIsWXl0LDE2LDMsImNsci1kZy1yb3ciLDI1KSxkZSgxMywiY2xyLWRnLWZvb3RlciIpKDE0LCJjbHItZGctcGFnaW5hdGlvbiIsMjYsMCkoMTYsImNsci1kZy1wYWdlLXNpemUiLDI3KSxMZSgxNywiSXRlbXMgcGVyIHBhZ2UiKSxoZSgpLExlKDE4KSxoZSgpKCko'@;
put 'KSgpKSwyJmMpe2NvbnN0IGE9dm8oMTUpLGQ9T2UoNCk7ZmUoNCkseGUoImNsckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSx4ZSgiY2xyRGdGaWVsZCIsInN1Ym1pdFJlYXNvbiIpLGZlKDYpLHhlKCJjbHJEZ0l0ZW1zT2YiLGQuc3VibWl0dGVyTGlzdCksZmUoMikseGUoImNsckRnUGFn'@;
put 'ZVNpemUiLDEwKSxmZSgyKSx4ZSgiY2xyUGFnZVNpemVPcHRpb25zIixZcyg4LFZ5dCkpLGZlKDIpLEZmKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgc3VibWlzc2lvbnMgIil9fWZ1bmN0aW9uICR5dChjLGwpe2lmKDEmYyYmKGRl'@;
put 'KDAsImRpdiIsMjIpLG10KDEsR3l0LDE5LDksImRpdiIsMyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUoIm5nSWYiLGEuc3VibWl0dGVyTGlzdCYmMCE9PWEucmVtYWluZWQpfX1mdW5jdGlvbiBLeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDYpLG10KDEsQnl0LDUsMCwi'@;
put 'ZGl2Iiw3KSxkZSgyLCJkaXYiLDgpLG10KDMsanl0LDIsMCwiaDMiLDkpKDQsenl0LDUsMSwicCIsMTApLGhlKCksbXQoNSxXeXQsMywyLCJkaXYiLDExKSg2LCR5dCwyLDEsImRpdiIsMTIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIiwwPT09YS5yZW1haW5lZCYm'@;
put 'YS5sb2FkZWQpLGZlKCkseGUoIm5nQ2xhc3MiLHNwKDYsTnl0LCFhLmxvYWRlZCkpLGZlKCkseGUoIm5nSWYiLDAhPT1hLnJlbWFpbmVkKSxmZSgpLHhlKCJuZ0lmIixhLmxvYWRlZCYmMCE9PWEucmVtYWluZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsYS5s'@;
put 'b2FkZWQpfX1mdW5jdGlvbiBxeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQpLG10KDEsS3l0LDcsOCwiZGl2Iiw1KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIiwhYS5zdWJSZWFkeSl9fWZ1bmN0aW9uIFh5dChjLGwpezEmYyYmKGRlKDAsImRpdiIpLEd0KDEs'@;
put 'ImFwcC1hcHByb3ZlLWRldGFpbHMiKSxoZSgpKX1sZXQgSzZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRlPWYsdGhpcy5zYXNTZXJ2aWNlPXYsdGhp'@;
put 'cy5yZW1haW5lZD0wLHRoaXMubG9hZGVkPSExLHRoaXMuc3ViUmVhZHk9ITEsdGhpcy5kZXRhaWxzT3Blbj0hMX1nb1RvU3RhZ2UoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z29Ub0RldGFpbHMoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3Jldmll'@;
put 'dy9zdWJtaXR0ZWQvIithKX1nZXREZXRhaWxzKGEsZCl7dGhpcy5zdWJSZWFkeT0hMCxzZXRUaW1lb3V0KCgpPT57dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2VuZERldGFpbHMoYSxkLHRoaXMuc3VibWl0RGF0YSl9LDApfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24q'@;
put 'KCl7Y29uc3QgZD1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy50YWJsZUlkO2EuaXRlbXNOdW09MTA7dHJ5e2xldCBoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldFN1Ym1pdHRzKCk7aWYoYS5yZW1haW5lZD1oLmZyb21zYXMubGVuZ3RoLGEucmVtYWluZWQ+MCl7YS5zdWJtaXR0ZXI9aC5m'@;
put 'cm9tc2FzWzBdLlNVQk1JVFRFRF9CWV9OTTtsZXQgZj1oLmZyb21zYXMubWFwKGZ1bmN0aW9uKHYpe3JldHVybnt0YWJsZUlkOnYuVEFCTEVfSUQsYmFzZTp2LkJBU0VfVEFCTEUsc3VibWl0dGVkOnYuU1VCTUlUVEVEX09OX0RUVE0sc3VibWl0dGVyOnYuU1VCTUlUVEVEX0JZX05NLHN1Ym1p'@;
put 'dFJlYXNvbjp2LlNVQk1JVFRFRF9SRUFTT05fVFhUfX0pO2lmKGEuc3VibWl0dGVyTGlzdD1mLGEuc3VibWl0RGF0YT1oLmZyb21zYXMsdHlwZW9mIGQ8InUiKXtjb25zdCB2PWEuc3VibWl0dGVyTGlzdC5maW5kSW5kZXgoTT0+TS50YWJsZUlkPT09ZCk7dj4tMSYmYS5nZXREZXRhaWxzKGEu'@;
put 'c3VibWl0dGVyTGlzdFt2XSx2KX19YS5sb2FkZWQ9ITB9Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJlZGl0b3JzL2dldHN1Ym1pdHMiLGgpfX0pKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fcmVhZHlTdWI9dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0U3Vi'@;
put 'bWl0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT1hfSksdGhpcy5fYmFja1RvU3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdExpc3Quc3Vic2NyaWJlKGE9Pnt0aGlzLnN1YlJlYWR5PSF0aGlzLnN1YlJlYWR5LHRoaXMuZGV0YWlsc09wZW49ITF9KX1kb3dubG9hZChhKXts'@;
put 'ZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUm'@;
put 'dGFibGU9IithKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShaaCksR2UodmMpLEdlKExzKSxHZShDdSksR2UodGwpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zdWJtaXR0ZXIiXV0saG9z'@;
put 'dEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJwYWdpbmF0aW9uIiwiIl0sWzEsInctMTAwIl0sWyJjbGFzcyIsImNvbnRlbnQtYXJlYSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJjYXJkIiw0'@;
put 'LCJuZ0lmIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwi'@;
put 'dGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQt'@;
put 'MTIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJuby1zdWJtaXR0ZWQtdGFibGVzIiwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2hh'@;
put 'cGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1k'@;
put 'YXJrLWdyYXkiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImRhdGFn'@;
put 'cmlkLWNvbXBhY3QiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNpemVPcHRpb25z'@;
put 'Il0sWzEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWxhYmVsIiwiR28gdG8gc3RhZ2VkIGRhdGEgc2NyZWVuIiwxLCJyb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0'@;
put 'b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLWJsdWUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvZGUiLCJzaXplIiwiMjgiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwi'@;
put 'LCJEb3dubG9hZCBhdWRpdCBmaWxlIGZvciB0YWJsZSByZWNvcmQiLDEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMSksbXQoMSxxeXQsMiwxLCJkaXYiLDIpKDIsWHl0'@;
put 'LDIsMCwiZGl2IiwzKSxoZSgpKSwyJmQmJihmZSgpLHhlKCJuZ0lmIiwhaC5zdWJSZWFkeSksZmUoKSx4ZSgibmdJZiIsaC5zdWJSZWFkeSkpfSxkZXBlbmRlbmNpZXM6W3d1LHlvLFRtLFFmLGs3LGxPLEp5LHF4LGNPLHhtLFNwLEQ3LHRfLEVtLEU3LE1tLFQ3LEZsLCQ2ZV0sc3R5bGVzOlsi'@;
put 'Lm5vQm9yZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudCFpbXBvcnRhbnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRv'@;
put 'b2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4gLnRv'@;
put 'b2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlkICMzMTQz'@;
put 'NTE7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgIzMxNDM1MX0ubm8tc3VibWl0dGVkLXRhYmxlc1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9Il19KX19cmV0dXJuIGN9KSgpO2NvbnN0IEp5dD0oYyxsKT0+KHtyZWplY3RlZDpjLGFjY2VwdGVk'@;
put 'Omx9KTtmdW5jdGlvbiBReXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEyKSxHdCgxLCJjbHItaWNvbiIsMTMpLGRlKDIsImgzIiwxNCksTGUoMywiVGhlcmUgaXMgbm8gaGlzdG9yeSB0byBzaG93IiksaGUoKSgpKX1mdW5jdGlvbiBlX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgw'@;
put 'LCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQsZj1PZSgpO3JldHVybiBDdChmLmdldFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0LGQ9T2UoKTtmZSgpLHdy'@;
put 'KGQuYXBwcm92ZURhdGFbYV0pfX1mdW5jdGlvbiB0X3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiKSgxLCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQsZj1PZSgpO3JldHVybiBDdChmLmdldEJhc2VUYWJsZShm'@;
put 'LmFwcHJvdmVEYXRhW2hdKSl9KSxMZSgyLCJWSUVXIiksaGUoKSxkZSgzLCJzcGFuIiksTGUoNCwiIC8gIiksaGUoKSxkZSg1LCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQsZj1PZSgpO3JldHVybiBDdChmLmdldEVkaXRUYWJsZShm'@;
put 'LmFwcHJvdmVEYXRhW2hdKSl9KSxMZSg2LCJFRElUIiksaGUoKSgpfX1mdW5jdGlvbiBuX3QoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0LGQ9T2UoKTtmZSgpLHdyKGQuYXBwcm92ZURhdGFbYV0pfX1mdW5jdGlvbiBy'@;
put 'X3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiw2KSxMZSgyKSxoZSgpLGRlKDMsInRkIiw2KSxtdCg0LGVfdCwyLDEsImEiLDE1KSg1LHRfdCw3LDAsImRpdiIsMTYpKDYsbl90LDIsMSwic3BhbiIsMTYpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRl'@;
put 'eDtmZSgyKSx3cihhKSxmZSgyKSx4ZSgibmdJZiIsZDwxKSxmZSgpLHhlKCJuZ0lmIixkPDImJmQ+PTEpLGZlKCkseGUoIm5nSWYiLGQ+PTIpfX1mdW5jdGlvbiBpX3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwyMCksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gb190KGMs'@;
put 'bCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyLCJMb2FkaW5nIGhpc3RvcnkiKSxoZSgpKCkpfWZ1bmN0aW9uIGFfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTgpLG10KDEsaV90LDIsMCwic3BhbiIsMTkpKDIsb190LDMsMCwiZGl2IiwxNiksaGUoKSksMiZjKXtjb25zdCBh'@;
put 'PU9lKCk7ZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBzX3QoYyxsKXsxJmMmJihkZSgwLCJoMyIsMjgpLExlKDEsIkhJU1RPUlkiKSxoZSgpKX1mdW5jdGlvbiBsX3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwyOSksTGUoMSks'@;
put 'aGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksSXIoIiBUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQsIiByZWNvcmRzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIil9fWZ1bmN0aW9uIGNfdChjLGwp'@;
put 'e2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1kZy1yb3ciLDMzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDMpLmdldEFwcHJJbmRleChoKSl9KSxkZSgxLCJjbHItZGctY2VsbCIsMzQpKDIsImEiLDM1KSxGdCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDMpLmdldEJhc2VUYWJsZShoLmJhc2V0YWJsZSkpfSksTGUoMyksaGUoKSgpLGRlKDQsImNsci1kZy1jZWxsIiwzNiksTGUoNSksaGUoKSxkZSg2LCJjbHItZGctY2VsbCIsMzQpLExlKDcpLGhlKCks'@;
put 'ZGUoOCwiY2xyLWRnLWNlbGwiLDM0KSxMZSg5KSxoZSgpLGRlKDEwLCJjbHItZGctY2VsbCIsMzQpLExlKDExKSxoZSgpLGRlKDEyLCJjbHItZGctY2VsbCIsMzQpLExlKDEzKSxoZSgpLGRlKDE0LCJjbHItZGctY2VsbCIsMzcpKDE1LCJidXR0b24iLDM4KSxGdCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBPZSgzKS5kb3dubG9hZChmLnRhYmxlSWQpLEN0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksR3QoMTYsImNsci1pY29uIiwzOSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDMpLHdyKGEuYmFzZXRhYmxl'@;
put 'KSxmZSgpLHhlKCJuZ0NsYXNzIixscCg3LEp5dCwiUkVKRUNURUQiPT09YS5zdGF0dXMsIkFQUFJPVkVEIj09PWEuc3RhdHVzKSksZmUoKSx3cihhLnN0YXR1cyksZmUoMiksd3IoYS5zdWJtaXR0ZXIpLGZlKDIpLHdyKGEuc3VibWl0dGVkUmVhc29uKSxmZSgyKSx3cihhLnN1Ym1pdHRlZCks'@;
put 'ZmUoMiksd3IoYS5yZXZpZXdlZCl9fWZ1bmN0aW9uIHVfdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kYXRhZ3JpZCIsMzApKDEsImNsci1kZy1jb2x1bW4iLDMxKSxMZSgyLCJCQVNFX1RBQkxFIiksaGUoKSxkZSgzLCJjbHItZGctY29sdW1uIiwzMSksTGUoNCwiU1RBVFVTIiksaGUoKSxk'@;
put 'ZSg1LCJjbHItZGctY29sdW1uIiwzMSksTGUoNiwiU1VCTUlUVEVSIiksaGUoKSxkZSg3LCJjbHItZGctY29sdW1uIiwzMSksTGUoOCwiU1VCTUlUIFJFQVNPTiIpLGhlKCksZGUoOSwiY2xyLWRnLWNvbHVtbiIsMzEpLExlKDEwLCJTVUJNSVRURUQiKSxoZSgpLGRlKDExLCJjbHItZGctY29s'@;
put 'dW1uIiwzMSksTGUoMTIsIkFQUFJPVkVEIC8gUkVKRUNURUQiKSxoZSgpLGRlKDEzLCJjbHItZGctY29sdW1uIiksTGUoMTQsIkRPV05MT0FEIiksaGUoKSxtdCgxNSxjX3QsMTcsMTAsImNsci1kZy1yb3ciLDMyKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSx4ZSgiY2xyRGdGaWVs'@;
put 'ZCIsImJhc2V0YWJsZSIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3RhdHVzIiksZmUoMikseGUoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSxmZSgyKSx4ZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZFJlYXNvbiIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksZmUoMiks'@;
put 'eGUoImNsckRnRmllbGQiLCJyZXZpZXdlZCIpLGZlKDQpLHhlKCJjbHJEZ0l0ZW1zT2YiLGEuaGlzdG9yeSl9fWZ1bmN0aW9uIGRfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsNDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMiku'@;
put 'bG9hZERhdGEoKSl9KSxMZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTt4ZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nTW9yZSksZmUoKSxJcigiIExvYWQgIixhLnJvd3NMZWZ0VG9Mb2FkLCIgbW9yZSAiKX19ZnVuY3Rpb24gaF90KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMSko'@;
put 'MSwiZGl2IiwyMiksbXQoMixzX3QsMiwwLCJoMyIsMjMpKDMsbF90LDIsMSwicCIsMjQpLGhlKCksbXQoNCx1X3QsMTYsNywiY2xyLWRhdGFncmlkIiwyNSksZGUoNSwiZGl2IiwyNiksbXQoNixkX3QsMiwyLCJidXR0b24iLDI3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLHhl'@;
put 'KCJuZ0lmIixhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixhLmxvYWRlZCksZmUoMikseGUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19h'@;
put 'bGxvd2VkPT09YS5JbmZpbml0eSYmYS5yb3dzTGVmdFRvTG9hZD4wKX19Y29uc3QgZl90PVt7cGF0aDoiYXBwcm92ZSIsY29tcG9uZW50Okh5dH0se3BhdGg6ImFwcHJvdmVEZXQvOnRhYmxlSWQiLGNvbXBvbmVudDokNmV9LHtwYXRoOiJzdWJtaXR0ZWQiLGNvbXBvbmVudDpLNmV9LHtwYXRo'@;
put 'OiJzdWJtaXR0ZWQvOnRhYmxlSWQiLGNvbXBvbmVudDpLNmV9LHtwYXRoOiJoaXN0b3J5Iixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgs'@;
put 'dGhpcy5yb3V0ZXI9Zix0aGlzLnNhc1NlcnZpY2U9dix0aGlzLmhpc3Rvcnk9W10sdGhpcy50YWJsZVRpdGxlcz1bXSx0aGlzLmhpc3RvcnlBcnI9W10sdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMCx0aGlzLm9wZW5Nb2RhbD0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLmFwcHJvdmVE'@;
put 'YXRhPXt9LHRoaXMuc2FzanNDb25maWc9bmV3IHZoLlNBU2pzQ29uZmlnLHRoaXMuaGlzdFBhcmFtcz17SElTVDowLFNUQVJUUk9XOjEsTk9CUzotMX0sdGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLklu'@;
put 'ZmluaXR5PTEvMCx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpfWdldFRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdldEJhc2VUYWJsZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRh'@;
put 'LyIrYSl9Z2V0RWRpdFRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIithKX1nZXRBcHBySW5kZXgoYSl7Y29uc3QgZD10aGlzLmhpc3RvcnlBcnIuZmluZEluZGV4KGg9PmguVEFCTEVfSUQ9PT1hLnRhYmxlSWQpO2Q+LTEmJih0aGlzLmFwcHJvdmVEYXRhPXRo'@;
put 'aXMuaGlzdG9yeUFycltkXSx0aGlzLm9wZW5Nb2RhbD0hMCl9Z2V0IHJvd3NMZWZ0VG9Mb2FkKCl7Y29uc3QgYT10aGlzLmhpc3RQYXJhbXMuTk9CUy10aGlzLmhpc3RvcnkubGVuZ3RoLGQ9dGhpcy5oaXN0UGFyYW1zLkhJU1Q7cmV0dXJuIGE8PTA/MDphPmQ/ZDphfWRvd25sb2FkKGEpe2xl'@;
put 'dCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0'@;
put 'YWJsZT0iK2ErIiZfY29udGV4dG5hbWU9Iit0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKX1sb2FkRGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBkPXtTVEFSVFJPVzphLmhpc3RQYXJhbXMuSElTVCthLmhpc3RQYXJhbXMuU1RBUlRST1d9O2EubG9hZGlu'@;
put 'Z01vcmU9ITA7dHJ5e2xldCBmLGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0SGlzdG9yeShkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL2dldGhpc3RvcnkiKTthLmxvYWRpbmdNb3JlPSExLGEuaGlzdFBhcmFtcz1oLmhpc3RwYXJhbXNbMF07Y29uc3Qgdj1oLmZyb21zYXMuc2xp'@;
put 'Y2UoMCxhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCk7aWYodi5sZW5ndGg+MCl7Y29uc3QgTT12O2EuaGlzdG9yeUFycj12LGY9T2JqZWN0LmtleXMoTVswXSksYS50YWJsZVRpdGxlcz1mO2xldCBEPXYubWFwKGZ1bmN0aW9uKFope3JldHVybnt0YWJsZUlkOlou'@;
put 'VEFCTEVfSUQsc3VibWl0dGVyOlouU1VCTUlUVEVSLHN1Ym1pdHRlZFJlYXNvbjpaLlNVQk1JVFRFRF9SRUFTT05fVFhULHN1Ym1pdHRlZDpaLlNVQk1JVFRFRCxzdGF0dXM6Wi5TVEFUVVMscmV2aWV3UmVhc29uOlouUkVWSUVXX1JFQVNPTl9UWFQscmV2aWV3ZXI6Wi5SRVZJRVdFUixyZXZp'@;
put 'ZXdlZDpaLlJFVklFV0VELG51bU9mQXBwcm92YWxzOlouTlVNX09GX0FQUFJPVkFMU19SRVFVSVJFRCxiYXNldGFibGU6Wi5CQVNFX1RBQkxFfX0pO2EuaGlzdG9yeS5wdXNoKC4uLkQpLGEubG9hZGVkPSEwfWVsc2UgYS5sb2FkZWQ9ITAsMD09PWEuaGlzdG9yeS5sZW5ndGgmJihhLm5vRGF0'@;
put 'YT0hMCl9Y2F0Y2goaCl7YS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIsaCksYS5sb2FkaW5nTW9yZT0hMX19KSgpfW5nT25Jbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5sb2FkRGF0YSgpfSkoKX1zdGF0aWN7'@;
put 'dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh1MSksR2UoWmgpLEdlKHZjKSxHZShMcyksR2UodGwpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1oaXN0b3J5Il1dLGhvc3RBdHRyczpbMSwiY29udGVudC1j'@;
put 'b250YWluZXIiXSxkZWNsczoyMCx2YXJzOjYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsImNsYXNzIiwiY2FyZC1ibG9jayBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5n'@;
put 'SWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVmdCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBl'@;
put 'IiwiYnV0dG9uIiwiYXJpYS1sYWJlbCIsIkNsb3NlIG1vZGFsIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsiY2xh'@;
put 'c3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm5vRGF0YUNvbnRhaW5lciIsMSwiY2FyZC1ibG9jayIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIs'@;
put 'IjYwIiwxLCJpcy1pbmZvIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciB0YWJsZS1saW5rIiwzLCJjbGljayIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImN1cnNvci1wb2ludGVyIiwidGFibGUtbGluayIsMywiY2xpY2siXSxbMSwi'@;
put 'aC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWyJjbGFzcyIsImNlbnRl'@;
put 'ciBjbHItY29sLW1kLTEyIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGZvbnQtd2VpZ2h0LTcwMCBjb2xvci1kYXJrLWdyYXkiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtaGlzdG9yeSBkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0s'@;
put 'WzEsImxvYWQtbW9yZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJidG4gYnRuLXN1Y2Nlc3MiLDMsImNsckxvYWRpbmciLCJjbGljayIsNCwibmdJZiJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEy'@;
put 'IiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiZGF0YWdyaWQtaGlzdG9yeSIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFszLCJjbGljayIsNCwiY2xyRGdJdGVtcyIsImNs'@;
put 'ckRnSXRlbXNPZiJdLFszLCJjbGljayJdLFsxLCJ2ZXJDZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJtLTAiLDMsImNsaWNrIl0sWzEsInZlckNlbnRlciIsMywibmdDbGFzcyJdLFsxLCJ2ZXJDZW50ZXIiLCJwLTAiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2Vu'@;
put 'dGVyIl0sWyJhcmlhLWxhYmVsIiwiRG93bmxvYWQgYXVkaXQgZmlsZSIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwzLCJjbGljayIsImNsckxvYWRpbmciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxo'@;
put 'KXsxJmQmJihkZSgwLCJkaXYiLDApLG10KDEsUXl0LDQsMCwiZGl2IiwxKSxkZSgyLCJjbHItbW9kYWwiLDIpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBiaShoLm9wZW5Nb2RhbCx2KXx8KGgub3Blbk1vZGFsPXYpLHZ9KSxkZSgzLCJoNCIsMyksTGUoNCwi'@;
put 'QXBwcm92YWwgZGV0YWlscyIpLGhlKCksZGUoNSwiZGl2Iiw0KSg2LCJ0YWJsZSIsNSkoNywidGhlYWQiKSg4LCJ0ciIpKDksInRoIiw2KSxMZSgxMCwiTmFtZSIpLGhlKCksZGUoMTEsInRoIiw2KSxMZSgxMiwiVmFsdWUiKSxoZSgpKCkoKSxkZSgxMywidGJvZHkiKSxtdCgxNCxyX3QsNyw0'@;
put 'LCJ0ciIsNyksaGUoKSgpKCksZGUoMTUsImRpdiIsOCkoMTYsImJ1dHRvbiIsOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm9wZW5Nb2RhbD0hMX0pLExlKDE3LCIgT0sgIiksaGUoKSgpKCksbXQoMTgsYV90LDMsMiwiZGl2IiwxMCkoMTksaF90LDcsNCwiZGl2IiwxMSksaGUo'@;
put 'KSksMiZkJiYoZmUoKSx4ZSgibmdJZiIsaC5ub0RhdGEpLGZlKCkscGkoImNsck1vZGFsT3BlbiIsaC5vcGVuTW9kYWwpLHhlKCJjbHJNb2RhbFNpemUiLCJ4bCIpLGZlKDEyKSx4ZSgibmdGb3JPZiIsaC50YWJsZVRpdGxlcyksZmUoNCkseGUoIm5nSWYiLCFoLmxvYWRlZCksZmUoKSx4ZSgi'@;
put 'bmdJZiIsIWgubm9EYXRhJiZoLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3d1LGxzLHlvLFRtLFFmLGs3LEp5LHhtLFNwLEQ3LHRfLEVtLEU3LE1tLFQ3LEZsLG91LCR1LFYwLFIyXSxzdHlsZXM6WyIucmVqZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNmODMxMjY7Zm9udC13ZWln'@;
put 'aHQ6NzAwfS5hY2NlcHRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9LmhzQ2VsbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4IWltcG9ydGFudDtmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50O2p1c3RpZnktY29udGVudDpj'@;
put 'ZW50ZXIhaW1wb3J0YW50O2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnQ7cGFkZGluZzo3cHh9LmJ0Q2VsbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4IWltcG9ydGFudDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0udmVyQ2VudGVyW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3dvcmQtYnJlYWs6YnJlYWstYWxsfS5sb2FkLW1vcmVbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjkwcHh9I25vRGF0YUNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVp'@;
put 'Z2h0OmNhbGMoMTAwdmggLSAyMDBweCl9LnRhYmxlLWxpbmtbX25nY29udGVudC0lQ09NUCVde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Zm9udC13ZWlnaHQ6NzAwfSJdfSl9fXJldHVybiBjfSkoKX1dO2xldCBwX3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLGpjLmZvckNoaWxkKGZfdCksamNdfSl9fXJldHVybiBjfSkoKSxnX3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhp'@;
put 'cy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLEljLHBfdCxCMCxpOS5mb3JSb290KCksUTIsQ3ddfSl9fXJldHVybiBjfSkoKSxtX3Q9'@;
put 'KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yZXZpZXctcm91dGUiXV0saG9zdEF0'@;
put 'dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddfSl9fXJldHVybiBjfSkoKTtjb25zdCB2X3Q9KGMsbCk9Pih7cmVqZWN0ZWQ6YyxhY2NlcHRl'@;
put 'ZDpsfSk7ZnVuY3Rpb24gYl90KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNiksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24geV90KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCB0YWJsZSIpLGhlKCkoKSl9ZnVuY3Rpb24g'@;
put 'X190KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0KSxtdCgxLGJfdCwyLDAsInNwYW4iLDUpKDIseV90LDMsMCwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIHdfdChj'@;
put 'LGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuYXBwcm92ZVRhYmxlU2NyZWVuKCkpfSksTGUoMSwiIEFwcHJvdmUgIiksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7eGUoImRpc2Fi'@;
put 'bGVkIiwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCl8fCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSkoImRpc2FibGVkIixh'@;
put 'LnJldmVydGluZ0NoYW5nZXMpfX1mdW5jdGlvbiBDX3QoYyxsKXsxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMSkoMSwic3BhbiIpLExlKDIsIiBSZXZlcnQgdGhpcyBhbmQgYWxsIHN1YnNlcXVlbnQgY2hhbmdlcyAiKSxoZSgpKCkpfWZ1bmN0aW9uIFNfdChjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1MbigpO2RlKDAsImJ1dHRvbiIsMjkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikucmV2ZXJ0Q2hhbmdlcygpKX0pLExlKDEsIiBSRVZFUlQgIiksbXQoMixDX3QsMywwLCJjbHItdG9vbHRpcC1jb250ZW50IiwzMCksaGUoKX0yJmMmJnhl'@;
put 'KCJjbHJMb2FkaW5nIixPZSgyKS5yZXZlcnRpbmdDaGFuZ2VzKX1mdW5jdGlvbiBNX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiKSgxLCJkaXYiLDcpKDIsImRpdiIsOCkoMywiaDQiLDkpLExlKDQsIlN0YWdlZCBEYXRhIiksaGUoKSgpKCksZGUoNSwiZGl2IiwxMCko'@;
put 'NiwiZGl2IiwxMSkoNywiZGl2IiwxMikoOCwiZGl2Iiw4KSxMZSg5LCJCYXNpYyBTdWJtaXR0ZWQgRGV0YWlscyIpLGhlKCkoKSxkZSgxMCwiZGl2IikoMTEsInNwYW4iKSxMZSgxMiwiVGFibGUgSWQ6IiksaGUoKSxkZSgxMywic3Ryb25nIikoMTQsInNwYW4iKSxMZSgxNSksaGUoKSgpKCks'@;
put 'ZGUoMTYsImRpdiIpKDE3LCJzcGFuIiksTGUoMTgsIkJhc2UgVGFibGU6IiksaGUoKSxkZSgxOSwiYSIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS52aWV3ZXJUYWJsZVNjcmVlbigpKX0pLExlKDIwKSxoZSgpKCksZGUoMjEsImRpdiIpKDIyLCJzcGFu'@;
put 'IiksTGUoMjMsIlN1Ym1pdCBEYXRlOiIpLGhlKCksZGUoMjQsInNwYW4iLDE0KSxMZSgyNSksaGUoKSgpLGRlKDI2LCJkaXYiKSgyNywic3BhbiIpLExlKDI4LCJSZXZpZXcgU3RhdHVzOiIpLGhlKCksZGUoMjksInNwYW4iLDE1KSxMZSgzMCksaGUoKSgpKCksZGUoMzEsImRpdiIsMTYpKDMy'@;
put 'LCJkaXYiLDEyKSgzMywiZGl2Iiw4KSxMZSgzNCwiQWN0aW9ucyIpLGhlKCkoKSxkZSgzNSwiZGl2IiwxNykoMzYsImRpdiIsMTgpKDM3LCJidXR0b24iLDE5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSxMZSgzOCwi'@;
put 'IFZpZXcgYmFzZSB0YWJsZSAiKSxoZSgpLG10KDM5LHdfdCwyLDIsImJ1dHRvbiIsMjApLGRlKDQwLCJidXR0b24iLDIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZ29CYWNrKCkpfSksTGUoNDEsIiBFZGl0IGJhc2UgdGFibGUgIiksaGUoKSxkZSg0Miwi'@;
put 'YnV0dG9uIiwyMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5kb3dubG9hZChudWxsPT1oLnRhYmxlRGV0YWlscz9udWxsOmgudGFibGVEZXRhaWxzLlRBQkxFX0lEKSl9KSxHdCg0MywiY2xyLWljb24iLDIzKSxoZSgpLGRlKDQ0LCJjbHIt'@;
put 'dG9vbHRpcCIpLG10KDQ1LFNfdCwzLDEsImJ1dHRvbiIsMjQpLGhlKCkoKSgpKCkoKSxkZSg0NiwiZGl2IiwyNSksR3QoNDcsImhvdC10YWJsZSIsMjYpLGhlKCksR3QoNDgsImRpdiIsMjcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoMTUpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0'@;
put 'YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIiKSxmZSg1KSxJcigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFLCIgIiksZmUoNSksSXIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VC'@;
put 'TUlUVEVEX09OX0RUVE0sIiAiKSxmZSg0KSx4ZSgibmdDbGFzcyIsbHAoMTcsdl90LCJSRUpFQ1RFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSwiQVBQUk9WRUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50'@;
put 'YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpKSxmZSgpLElyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQsIiAiKSxmZSg3KSx4ZSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5nQ2hhbmdlcyksZmUoMikseGUoIm5nSWYiLCJZ'@;
put 'RVMiIT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQUxMT1dfUkVTVE9SRSkpLGZlKCkseGUoImRpc2FibGVkIixhLnJldmVydGluZ0NoYW5nZXMpLGZlKDUpLHhlKCJuZ0lmIiwiWUVTIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRh'@;
put 'aWxzLkFMTE9XX1JFU1RPUkUpKSxmZSgyKSx4ZSgiZGF0YSIsYS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsYS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsYS5ob3RUYWJsZS5jb2x1bW5zKSgibWF4Um93cyIsYS5ob3RUYWJsZS5tYXhSb3dzKSgiaGVpZ2h0IixhLmhvdFRh'@;
put 'YmxlLmhlaWdodCkoImxpY2Vuc2VLZXkiLGEuaG90VGFibGUubGljZW5zZUtleSkoImFmdGVyR2V0Q29sSGVhZGVyIixhLmhvdFRhYmxlLmFmdGVyR2V0Q29sSGVhZGVyKSgiY2VsbHMiLGEuaG90VGFibGUuY2VsbHMpfX1jb25zdCB4X3Q9W3twYXRoOiI6dGFibGVJZCIsY29tcG9uZW50Oigo'@;
put 'KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZT1mLHRoaXMucm91dGVyPXYsdGhpcy5zYXNTZXJ2aWNlPU0sdGhpcy5sb2FkZWQ9ITEsdGhp'@;
put 'cy5yZXZlcnRpbmdDaGFuZ2VzPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuaG90VGFibGU9e2RhdGE6W10sY29sSGVhZGVyczpbXSxjb2x1bW5zOltdLGhlaWdodDo1MDAsc2V0dGluZ3M6e30sbGljZW5zZUtleTp2b2lkIDAsbWF4'@;
put 'Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWR8fDEvMCxhZnRlckdldENvbEhlYWRlcjooRCxaLG5lKT0+e1ouY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfX19c3VibWl0dGVkVGFibGVTY3JlZW4oKXt0aGlz'@;
put 'LnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK3RoaXMudGFibGVfaWQpfWFwcHJvdmVUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9hcHByb3ZlRGV0LyIrdGhpcy50YWJsZV9pZCl9dmlld2VyVGFibGVTY3JlZW4oKXt0aGlzLnJvdXRlLm5hdmln'@;
put 'YXRlQnlVcmwoIi92aWV3L2RhdGEvIit0aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKX1nb0JhY2soKXtLbi54bG1hcHMuZmluZChkPT5kLnRhcmdldERTPT09dGhpcy50YWJsZURldGFpbHMuQkFTRV9UQUJMRSk/dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZS9leGNlbC1tYXBz'@;
put 'LyIrdGhpcy5ob3RUYWJsZS5kYXRhWzBdLlhMTUFQX0lEKTp0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJs'@;
put 'LGY9ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9u'@;
put 'Kigpe2lmKGEubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShkPT57YS5ob3RUYWJsZS5saWNlbnNlS2V5PWR9KSx0eXBlb2YgYS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ8InUiKXthLnRhYmxlX2lkPWEucm91dGVyLnNuYXBzaG90LnBhcmFtcy50YWJs'@;
put 'ZUlkO3RyeXtsZXQgZD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRDaGFuZ2VJbmZvKGEudGFibGVfaWQpO2lmKCFkfHwhZC5qc3BhcmFtcyl0aHJvdyBuZXcgRXJyb3IoImpzcGFyYW1zIHByb3BlcnR5IGlzIG1pc3NpbmcgZnJvbSByZXNwb25zZS4iKTthLnRhYmxlRGV0YWlscz1kLmpz'@;
put 'cGFyYW1zWzBdfWNhdGNoKGQpe2xldCBoPXt9O2QuTUVTU0FHRT9oPWQ6aC5NRVNTQUdFPWQsYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsaCl9dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLm9wZW5UYWJsZShhLnRhYmxl'@;
put 'X2lkKTtpZighZHx8IWQuc3RhZ2V0YWJsZSl0aHJvdyBuZXcgRXJyb3IoIlN0YWdldGFibGUgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2xldCBoPWQuc3RhZ2V0YWJsZVswXSxmPVtdLHY9W107Zm9yKGxldCBEIGluIGgpaCYmZi5wdXNoKEQpO2ZvcihsZXQgRD0wO0Q8'@;
put 'Zi5sZW5ndGg7RCsrKXYucHVzaCh7ZGF0YTpmW0RdfSk7bGV0IE09ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fTthLmhvdFRhYmxlLmRhdGE9ZC5zdGFnZXRhYmxlLGEuaG90VGFibGUuY29sSGVhZGVycz1mLGEuaG90VGFibGUuY29sdW1ucz12LGEuaG90VGFibGUuY2VsbHM9TSxh'@;
put 'LmxvYWRlZD0hMCxhLnNldEZvY3VzKCl9Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFfHwoaC5NRVNTQUdFPWQpLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXVkaXRvcnMvZ2V0c3RhZ2V0YWJsZSIsaCksYS5sb2FkZWQ9ITF9fX0pKCl9cmV2ZXJ0Q2hhbmdlcygpe3Ro'@;
put 'aXMucmV2ZXJ0aW5nQ2hhbmdlcz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9yZXN0b3JlIix7cmVzdG9yZV9pbjpbe2xvYWRfcmVmOnRoaXMudGFibGVfaWR9XX0pLnRoZW4oZD0+e2QuYWRhcHRlclJlc3BvbnNlLnJlc3RvcmVfb3V0JiZ0aGlzLnJvdXRlLm5hdmlnYXRl'@;
put 'KFsiL3N0YWdlIl0pLnRoZW4oKCk9Pnt0aGlzLnJvdXRlLm5hdmlnYXRlKFtgL3N0YWdlLyR7ZC5hZGFwdGVyUmVzcG9uc2UucmVzdG9yZV9vdXRbMF0uTE9BRFJFRn1gXSl9KX0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJldmVydGluZ0NoYW5nZXM9ITF9KX1zZXRGb2N1cygpe3NldFRpbWVvdXQo'@;
put 'KCk9PntsZXQgYT13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFsLWJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh1MSksR2UoWmgpLEdlKHZjKSxHZShMcyksR2UoQ3UpLEdl'@;
put 'KHRsKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc3RhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIiwiY2Fy'@;
put 'ZCJdLFsiY2xhc3MiLCJoLTgwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiaC04MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwi'@;
put 'YWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtdGl0bGUiLCJ0ZXh0LWNlbnRlciJdLFsxLCJtdC0wIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2xy'@;
put 'LXJvdyJdLFsxLCJjYXJkLWJsb2NrIiwiY2xyLWNvbC1tZC02Iiwibm8tYm9yZGVycyJdLFsxLCJjYXJkLWhlYWRlciIsInB5LTUiXSxbMSwiYmFzZVRhYmxlTGluayIsMywiY2xpY2siXSxbMSwibXQtMTAiXSxbMSwibXQtMTAiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNvbC1tZC02IiwiY2Fy'@;
put 'ZC1ibG9jayIsIm5vLWJvcmRlcnMiXSxbMSwibXQtMjAiXSxbMSwicm93Il0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiaWQiLCJhcHByb3ZhbC1idG4iLCJjbGFzcyIsImJ0biBidG4tc20gYnRu'@;
put 'LXN1Y2Nlc3Mtb3V0bGluZSB0ZXh0LWNlbnRlciBtci01aSIsMywiZGlzYWJsZWQiLCJjbGljayIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJidG4iLCJidG4tc20i'@;
put 'LCJidG4tc3VjY2VzcyIsInRleHQtY2VudGVyIiwibXItNWkiLCJtaW4tdy0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLWRhbmdlciB0ZXh0LWNlbnRlciBtdC0yMCIsMywiY2xyTG9hZGlu'@;
put 'ZyIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsIm1heFJvd3MiLCJoZWlnaHQi'@;
put 'LCJsaWNlbnNlS2V5IiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJjZWxscyJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImlkIiwiYXBwcm92YWwtYnRuIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwidGV4dC1jZW50'@;
put 'ZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1kYW5nZXIiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJj'@;
put 'bHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxtdCgyLF9fdCwzLDIsImRpdiIsMikoMyxNX3QsNDksMjAsImRp'@;
put 'diIsMyksaGUoKSgpKSwyJmQmJihmZSgyKSx4ZSgibmdJZiIsIWgubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIixoLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W3d1LHlvLEZsLFYwLEQyLFIyLGc3LHY3LG03LERfXSxzdHlsZXM6WyIucmVqZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNm'@;
put 'ODMxMjY7Zm9udC13ZWlnaHQ6NzAwfS5hY2NlcHRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9LmJhc2VUYWJsZUxpbmtbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO21hcmdpbi10b3A6MTBweDtjb2xvcjojMDA3Y2JifSAgYm9k'@;
put 'eVtjZHMtdGhlbWU9ZGFya10gLmJhc2VUYWJsZUxpbmt7Y29sb3I6IzRlYzBmZn0iXX0pfX1yZXR1cm4gY30pKCl9XTtsZXQgRV90PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1r'@;
put 'aSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxCMCxqYy5mb3JDaGlsZCh4X3QpLGk5LmZvclJvb3QoKV19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFRfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgVmlld2VyIHJvd3MgbGltaXQ6'@;
put 'ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEFfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgRWRpdG9yIHJvd3MgbGlt'@;
put 'aXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIGtfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgU3RhZ2Ugcm93cyBs'@;
put 'aW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBEX3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksTGUoMSwiIEhpc3Rvcnkgcm93'@;
put 'cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIElfdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgU3VibWl0'@;
put 'IHJvd3MgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpfX1mdW5jdGlvbiBSX3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksTGUoMSwiIFRhYmxl'@;
put 'cyBpbiBsaWJyYXJ5IGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxMZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLHdyKGEubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gTF90KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMTcp'@;
put 'LExlKDEsIiBWaWV3Ym94ZXMgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMyksd3IoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCl9fWZ1bmN0aW9uIE9fdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE3KSxMZSgx'@;
put 'LCIgTGluZWFnZSBkYWlseSBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSx3cihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0KX19ZnVuY3Rpb24gUF90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7'@;
put 'ZGUoMCwiZGl2IiwxOSksTGUoMSwiIFJlZnJlc2ggRGF0YSBMaW5lYWdlICIpLGRlKDIsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikucmVmcmVzaERhdGFMaW5lYWdlKCkpfSksTGUoMywiIFJFRlJFU0ggIiksaGUoKSgpfWlmKDImYyl7'@;
put 'Y29uc3QgYT1PZSgyKTtmZSgyKSx4ZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUxpbmVhZ2UpfX1mdW5jdGlvbiBGX3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxtdCgxLFBfdCw0LDEsImRpdiIsMTgpLGRlKDIsImRpdiIsMTkpLExlKDMsIiBSZWZyZXNoIERhdGEg'@;
put 'Q2F0YWxvZyAiKSxkZSg0LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkucmVmcmVzaERhdGFDYXRhbG9nKCkpfSksTGUoNSwiIFJFRlJFU0ggIiksaGUoKSgpLGRlKDYsImRpdiIsMTkpLExlKDcsIiBEb3dubG9hZCBDb25maWd1cmF0aW9u'@;
put 'ICIpLGRlKDgsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5kb3dubG9hZENvbmZpZ3VyYXRpb24oKSl9KSxMZSg5LCIgRE9XTkxPQUQgIiksaGUoKSgpLGRlKDEwLCJkaXYiLDE5KSxMZSgxMSwiIFVwZGF0ZSBMaWNlbmNlIEtleSAiKSxk'@;
put 'ZSgxMiwiYnV0dG9uIiwyMiksTGUoMTMsIiBVUERBVEUgIiksaGUoKSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxmZSgzKSx4ZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUNhdGFsb2cpfX1jb25zdCBIX3Q9'@;
put 'W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMubGljZW5jZVNlcnZpY2U9aCx0aGlzLmFwcFNldHRpbmdzU2VydmljZT1mLHRoaXMuYXBwSW5mbz17YWRhcHRlclZlcnNp'@;
put 'b246IjQuMTEuMyIsYXBwVmVyc2lvbjoidjYuMTQuNyIucmVwbGFjZSgidiIsIiIpLGJ1aWxkVGltZXN0YW1wOmthZSgpKHBhcnNlSW50KCIxNzQ2NzA1MjYzMDc4IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKX0sdGhpcy5odHRwPSJodHRwOiI9PT1sb2NhdGlvbi5wcm90b2NvbCx0'@;
put 'aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMSx0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMSx0aGlzLnJlc3BvbnNlPSJObyByZXNwb25zZSIsdGhpcy5yZXNwb25zZU1vZGFsPSExLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2Uu'@;
put 'bGljZW5jZVN0YXRlLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMubGljZW5jZUluZm89dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpLHRoaXMuZW52aXJvbm1lbnRJbmZvPXRoaXMuYXBwU2VydmljZS5nZXRFbnZpcm9u'@;
put 'bWVudEluZm8oKSx0aGlzLnNldHRpbmdzPXRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnZhbHVlLHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDJiYodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUM9ZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuZW52aXJvbm1lbnRJbmZv'@;
put 'LkFVVE9FWEVDKSksdGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc3Vic2NyaWJlKHY9Pnt0aGlzLnNldHRpbmdzPXZ9KX1uZ09uSW5pdCgpe31zZXR0aW5nQ2hhbmdlKGEpe3RoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlLnNldEFwcFNldHRpbmdzKHRoaXMuc2V0dGluZ3MpfWRvd25s'@;
put 'b2FkQ29uZmlndXJhdGlvbigpe2xldCBhPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGQ9YS5zZXJ2ZXJVcmwsaD1hLmFwcExvYyxmPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZCtmKyIvP19wcm9ncmFtPSIraCsiL3NlcnZpY2VzL2Fk'@;
put 'bWluL2V4cG9ydGNvbmZpZyIpfXJlZnJlc2hEYXRhQ2F0YWxvZygpe3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNoY2F0YWxvZyIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2Uo'@;
put 'YS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFDYXRh'@;
put 'bG9nPSExfSl9cmVmcmVzaERhdGFMaW5lYWdlKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUxpbmVhZ2U9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2h0YWJsZWxpbmVhZ2UiLG51bGwpLnRoZW4oYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRh'@;
put 'cHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmZpbmFsbHkoKCk9Pnt0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0h'@;
put 'MX0pfXBhcnNlUmVzcG9uc2UoYSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBhP0pTT04uc3RyaW5naWZ5KGEpOmF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2Uob0wpLEdlKHRsKSxHZSh1MSksR2UoR1IpKX19c3RhdGlje3RoaXMuXHUwMjc1'@;
put 'Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zeXN0ZW0iXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEzOCx2YXJzOjM2LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwicC0xMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIs'@;
put 'ImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0tMCJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzEsImNvbnRlbnQtYm94IiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInN5cy1pbmZvIiwiZC1mbGV4'@;
put 'IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1sZy1yb3ciXSxbImNkcy10ZXh0Iiwic3Vic2VjdGlvbiIsMSwibWItMTAiXSxbMSwiZGFyayJdLFsiY2RzLXRleHQiLCJsYWJlbCIsMSwibS0wIl0sWzEsImQtZmxleCIsImNsci1qdXN0'@;
put 'aWZ5LWNvbnRlbnQtbGctY2VudGVyIl0sWyJjbGFzcyIsIm0tMCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1'@;
put 'dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWzEsIm0tMCJdLFsiY2xhc3MiLCJhZG1pbi1hY3Rpb24iLDQsIm5nSWYiXSxbMSwiYWRtaW4tYWN0aW9uIl0sWzEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxb'@;
put 'MSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIl0sWyJyb3V0ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLDEsImJ0biIsImJ0bi1pbmZvIiwiYnRuLXNtIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImg0Iiwy'@;
put 'KSxMZSgzLCJTeXN0ZW0gaW5mb3JtYXRpb24iKSxoZSgpLEd0KDQsImhyIiwzKSxkZSg1LCJkaXYiLDQpKDYsImRpdiIsNSkoNywiZGl2IikoOCwiaDYiLDYpLExlKDksIiBFbnZpcm9ubWVudCBEZXRhaWxzICIpLEd0KDEwLCJzcGFuIiw3KSxoZSgpLGRlKDExLCJwIiw4KSxMZSgxMiwiIFNZ'@;
put 'U1NJVEU6ICIpLGRlKDEzLCJzcGFuIiw3KSxMZSgxNCksaGUoKSgpLGRlKDE1LCJwIiw4KSxMZSgxNiwiIFNZU1NDUEw6ICIpLGRlKDE3LCJzcGFuIiw3KSxMZSgxOCksaGUoKSgpLGRlKDE5LCJwIiw4KSxMZSgyMCwiIFNZU1RDUElQSE9TVE5BTUU6ICIpLGRlKDIxLCJzcGFuIiw3KSxMZSgy'@;
put 'MiksaGUoKSgpLGRlKDIzLCJwIiw4KSxMZSgyNCwiIFNZU1ZMT05HOiAiKSxkZSgyNSwic3BhbiIsNyksTGUoMjYpLGhlKCkoKSxkZSgyNywicCIsOCksTGUoMjgsIiBNRU1TSVpFOiAiKSxkZSgyOSwic3BhbiIsNyksTGUoMzApLGhlKCkoKSxkZSgzMSwicCIsOCksTGUoMzIsIiBTWVNQUk9D'@;
put 'RVNTTU9ERTogIiksZGUoMzMsInNwYW4iLDcpLExlKDM0KSxoZSgpKCksZGUoMzUsInAiLDgpLExlKDM2LCIgU1lTSE9TVE5BTUU6ICIpLGRlKDM3LCJzcGFuIiw3KSxMZSgzOCksaGUoKSgpLGRlKDM5LCJwIiw4KSxMZSg0MCwiIFNZU1VTRVJJRDogIiksZGUoNDEsInNwYW4iLDcpLExlKDQy'@;
put 'KSxoZSgpKCksZGUoNDMsInAiLDgpLExlKDQ0LCIgU1lTSE9TVElORk9MT05HOiAiKSxkZSg0NSwic3BhbiIsNyksTGUoNDYpLGhlKCkoKSxkZSg0NywicCIsOCksTGUoNDgsIiBTWVNFTkNPRElORzogIiksZGUoNDksInNwYW4iLDcpLExlKDUwKSxoZSgpKCksZGUoNTEsInAiLDgpLExlKDUy'@;
put 'LCIgQVVUT0VYRUM6ICIpLGRlKDUzLCJzcGFuIiw3KSxMZSg1NCksaGUoKSgpKCksZGUoNTUsImRpdiIsOSkoNTYsImRpdiIpKDU3LCJoNiIsNiksTGUoNTgsIiBEYXRhIENvbnRyb2xsZXIgRGV0YWlscyAiKSxHdCg1OSwic3BhbiIsNyksaGUoKSxkZSg2MCwicCIsOCksTGUoNjEsIiBBcHBs'@;
put 'aWNhdGlvbiB2ZXJzaW9uOiAiKSxkZSg2Miwic3BhbiIsNyksTGUoNjMpLGhlKCkoKSxkZSg2NCwicCIsOCksTGUoNjUsIiBCdWlsZCB0aW1lc3RhbXA6ICIpLGRlKDY2LCJzcGFuIiw3KSxMZSg2NyksaGUoKSgpLGRlKDY4LCJwIiw4KSxMZSg2OSwiIEFkYXB0ZXIgdmVyc2lvbjogIiksZGUo'@;
put 'NzAsInNwYW4iLDcpLExlKDcxKSxoZSgpKCksZGUoNzIsInAiLDgpLExlKDczLCIgSFRUUDogIiksZGUoNzQsInNwYW4iLDcpLExlKDc1KSxoZSgpKCksZGUoNzYsInAiLDgpLExlKDc3LCIgREMgQWRtaW4gR3JvdXA6ICIpLGRlKDc4LCJzcGFuIiw3KSxMZSg3OSksaGUoKSgpLGRlKDgwLCJw'@;
put 'Iiw4KSxMZSg4MSwiIEFwcCBMb2NhdGlvbjogIiksZGUoODIsInNwYW4iLDcpLExlKDgzKSxoZSgpKCkoKSgpLGRlKDg0LCJkaXYiKSg4NSwiaDYiLDYpLExlKDg2LCIgTGljZW5jZSBkZXRhaWxzICIpLEd0KDg3LCJzcGFuIiw3KSxoZSgpLGRlKDg4LCJwIiw4KSxMZSg4OSwiIFZhbGlkIHVu'@;
put 'dGlsOiAiKSxkZSg5MCwic3BhbiIsNyksTGUoOTEpLGhlKCkoKSxkZSg5MiwicCIsOCksTGUoOTMsIiBVc2VycyBhbGxvd2VkOiAiKSxkZSg5NCwic3BhbiIsNyksTGUoOTUpLGhlKCkoKSxkZSg5NiwicCIsOCksTGUoOTcsIiBTaXRlIElEczogIiksZGUoOTgsInNwYW4iLDcpLExlKDk5KSxo'@;
put 'ZSgpKCksZGUoMTAwLCJwIiw4KSxMZSgxMDEsIiBGcmVlIFRpZXI6ICIpLGRlKDEwMiwic3BhbiIsNyksTGUoMTAzKSxoZSgpKCksbXQoMTA0LFRfdCw0LDEsInAiLDEwKSgxMDUsQV90LDQsMSwicCIsMTApKDEwNixrX3QsNCwxLCJwIiwxMCkoMTA3LERfdCw0LDEsInAiLDEwKSgxMDgsSV90'@;
put 'LDQsMSwicCIsMTApKDEwOSxSX3QsNCwxLCJwIiwxMCkoMTEwLExfdCw0LDEsInAiLDEwKSgxMTEsT190LDQsMSwicCIsMTApLGRlKDExMiwicCIsOCksTGUoMTEzLCIgVmlld2JveGVzOiAiKSxkZSgxMTQsInNwYW4iLDcpLExlKDExNSksaGUoKSgpLGRlKDExNiwicCIsOCksTGUoMTE3LCIg'@;
put 'RmlsZSBVcGxvYWQ6ICIpLGRlKDExOCwic3BhbiIsNyksTGUoMTE5KSxoZSgpKCksZGUoMTIwLCJwIiw4KSxMZSgxMjEsIiBFZGl0IHJlY29yZDogIiksZGUoMTIyLCJzcGFuIiw3KSxMZSgxMjMpLGhlKCkoKSxkZSgxMjQsInAiLDgpLExlKDEyNSwiIEFkZCByZWNvcmQ6ICIpLGRlKDEyNiwi'@;
put 'c3BhbiIsNyksTGUoMTI3KSxoZSgpKCkoKSgpLEd0KDEyOCwiaHIiLDMpLG10KDEyOSxGX3QsMTQsMiwibmctY29udGFpbmVyIiwxMSksaGUoKSgpKCksZGUoMTMwLCJjbHItbW9kYWwiLDEyKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gYmkoaC5yZXNwb25z'@;
put 'ZU1vZGFsLHYpfHwoaC5yZXNwb25zZU1vZGFsPXYpLHZ9KSxkZSgxMzEsImgzIiwxMyksTGUoMTMyLCJSZXNwb25zZSIpLGhlKCksZGUoMTMzLCJkaXYiLDE0KSxMZSgxMzQpLGhlKCksZGUoMTM1LCJkaXYiLDE1KSgxMzYsImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gaC5yZXNwb25zZU1vZGFsPSExfSksTGUoMTM3LCIgT2sgIiksaGUoKSgpKCkpLDImZCYmKGZlKDE0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1NJVEUpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZp'@;
put 'cm9ubWVudEluZm8uU1lTU0NQTCksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNUQ1BJUEhPU1ROQU1FKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1ZMT05HKSxmZSg0'@;
put 'KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLk1FTVNJWkUpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTUFJPQ0VTU01PREUpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZv'@;
put 'P251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVE5BTUUpLGZlKDQpLHdyKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTVVNFUklEKSxmZSg0KSx3cihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU0hP'@;
put 'U1RJTkZPTE9ORyksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNFTkNPRElORyksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5BVVRPRVhFQyksZmUoOSksd3IoaC5hcHBJbmZv'@;
put 'LmFwcFZlcnNpb24pLGZlKDQpLHdyKGguYXBwSW5mby5idWlsZFRpbWVzdGFtcCksZmUoNCksd3IoaC5hcHBJbmZvLmFkYXB0ZXJWZXJzaW9uKSxmZSg0KSx3cihoLmh0dHA/IllFUyI6Ik5PIiksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5m'@;
put 'by5EQ19BRE1JTl9HUk9VUCksZmUoNCksd3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5BUFBfTE9DKSxmZSg4KSx3cihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby52YWxpZF91bnRpbCksZmUoNCksd3IobnVsbD09aC5saWNl'@;
put 'bmNlSW5mbz9udWxsOmgubGljZW5jZUluZm8udXNlcnNfYWxsb3dlZCksZmUoNCksd3IobnVsbD09aC5saWNlbmNlSW5mbz9udWxsOmgubGljZW5jZUluZm8uc2l0ZV9pZF9tdWx0aXBsZSksZmUoNCksd3IobnVsbCE9aC5saWNlbmNlSW5mbyYmaC5saWNlbmNlSW5mby5kZW1vPyJZRVMiOiJO'@;
put 'TyIpLGZlKCkseGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSksZmUoKSx4ZSgibmdJZiIsaC5saWNl'@;
put 'bmNlU3RhdGUudmFsdWUuc3RhZ2Vfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSksZmUoKSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93'@;
put 'c19saW1pdCE9PWguSW5maW5pdHkpLGZlKCkseGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PWguSW5maW5pdHkpLGZlKCks'@;
put 'eGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQhPT1oLkluZmluaXR5KSxmZSg0KSx3cihoLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94PyJZRVMiOiJOTyIpLGZlKDQpLHdyKGgubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWQ/IllFUyI6Ik5P'@;
put 'IiksZmUoNCksd3IoaC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdFJlY29yZD8iWUVTIjoiTk8iKSxmZSg0KSx3cihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5hZGRSZWNvcmQ/IllFUyI6Ik5PIiksZmUoMikseGUoIm5nSWYiLDE9PT0obnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmly'@;
put 'b25tZW50SW5mby5JU0FETUlOKSksZmUoKSxwaSgiY2xyTW9kYWxPcGVuIixoLnJlc3BvbnNlTW9kYWwpLGZlKDQpLElyKCIgIixoLnJlc3BvbnNlLCIgIikpfSxkZXBlbmRlbmNpZXM6W3lvLGMxLG91LCR1LFYwLFIyXSxzdHlsZXM6WyIuY29udGVudC1ib3hbX25nY29udGVudC0lQ09NUCVd'@;
put 'e21heC13aWR0aDoxMjg5cHh9LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGRpdltfbmdjb250ZW50LSVDT01QJV17ZmxleDoxfS5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICBkaXZbX25nY29udGVudC0lQ09NUCVdOm50aC1jaGlsZCgyKXttYXJnaW46MCAzMHB4fS5hZG1p'@;
put 'bi1hY3Rpb25bX25nY29udGVudC0lQ09NUCVdLCAudXNlci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzo1cHggMTBweDtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6'@;
put 'MXB4IHNvbGlkICNkZWRlZGU7bWFyZ2luLWJvdHRvbTo1cHh9LmFkbWluLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVdLCAudXNlci1hY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lk'@;
put 'dGg6MTAycHh9LmRhcmtbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjcwMDttYXJnaW4tbGVmdDo1cHh9QG1lZGlhIChtYXgtd2lkdGg6IDk5M3B4KXsuc3lzLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgZGl2W19uZ2NvbnRlbnQtJUNPTVAlXTpudGgtY2hpbGQoMil7bWFyZ2lu'@;
put 'OjB9LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGRpdltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjIwcHggMH19Il19KX19cmV0dXJuIGN9KSgpfV07bGV0IE5fdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMp'@;
put 'fX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbamMuZm9yQ2hpbGQoSF90KSxqY119KX19cmV0dXJuIGN9KSgpLFZfdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1'@;
put 'cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sTl90LEIwLEljXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQl90KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9u'@;
put 'IGpfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGguZ3JvdXBTZWFyY2g9IiIsQ3QoaC5ncm91cExpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIHpfdChj'@;
put 'LGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDcpKDEsImRpdiIsOCkoMiwiaW5wdXQiLDksMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gYmkoZi5ncm91cFNlYXJjaCxoKXx8KGYuZ3JvdXBTZWFy'@;
put 'Y2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZ3JvdXBMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLG10KDQsQl90LDEsMCwiY2xyLWljb24iLDEwKSg1LGpfdCwxLDAsImNsci1pY29uIiwxMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygz'@;
put 'KSxkPU9lKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQuZ3JvdXBTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gVV90KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUt'@;
put 'bm9kZSIsMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmdyb3VwT25DbGljayhoKSl9KSxkZSgxLCJwIiwxNiksR3QoMiwiY2xyLWljb24iLDE3KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGlt'@;
put 'cGxpY2l0LGQ9T2UoKTtUcigiYWN0aXZlIixhLkdST1VQVVJJPT09ZC5ncm91cFVyaSksZmUoMyksSXIoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIFpfdChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsVV90LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLHVpKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBXX3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBZX3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgx'@;
put 'LCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjQpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjUpKDYsInAiLDI2KSg3LCJiIiksTGUoOCksaGUoKSgpKCkoKSxkZSg5LCJ0ciIpKDEwLCJ0ZCIsMjUpKDExLCJpIiksTGUoMTIpLGhlKCkoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtm'@;
put 'ZSg4KSx3cihhLmdyb3VwTmFtZSksZmUoNCksd3IoYS5ncm91cERlc2N8fCJubyBkZXNjcmlwdGlvbiIpfX1mdW5jdGlvbiBHX3QoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uICRfdChjLGwpezEmYyYmKGNpKDApLGRlKDEs'@;
put 'InRkIiwzMSkoMiwiYiIpLExlKDMsIk5BTUUiKSxoZSgpKCksZGUoNCwidGQiLDMxKSg1LCJiIiksTGUoNiwiRU1BSUwiKSxoZSgpKCksZGUoNywidGQiLDMxKSg4LCJiIiksTGUoOSwiQ1JFQVRFRCIpLGhlKCkoKSxkZSgxMCwidGQiLDMyKSgxMSwiYiIpLExlKDEyLCJVUERBVEVEIiksaGUo'@;
put 'KSgpLHVpKCkpfWZ1bmN0aW9uIEtfdChjLGwpezEmYyYmKGNpKDApLGRlKDEsInRkIiwzMSkoMiwiYiIpLExlKDMsIklEIiksaGUoKSgpLGRlKDQsInRkIiwzMSkoNSwiYiIpLExlKDYsIkRJU1BMQVkgTkFNRSIpLGhlKCkoKSxkZSg3LCJ0ZCIsMzEpKDgsImIiKSxMZSg5LCJVU0VSIE5BTUUi'@;
put 'KSxoZSgpKCksdWkoKSl9ZnVuY3Rpb24gcV90KGMsbCl7aWYoMSZjJiYoY2koMCksZGUoMSwidGQiLDMyKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMiksTGUoNCksaGUoKSxkZSg1LCJ0ZCIsMzIpLExlKDYpLGhlKCksZGUoNywidGQiLDMyKSxMZSg4KSxoZSgpLHVpKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1PZSgpLiRpbXBsaWNpdDtmZSgyKSx3cihhLk1FTUJFUk5BTUUpLGZlKDIpLHdyKGEuRU1BSUwpLGZlKDIpLHdyKGEuTUVNQkVSQ1JFQVRFRCksZmUoMiksd3IoYS5NRU1CRVJVUERBVEVEKX19ZnVuY3Rpb24gWF90KGMsbCl7aWYoMSZjJiYoY2koMCksZGUoMSwidGQiLDMyKSxMZSgyKSxo'@;
put 'ZSgpLGRlKDMsInRkIiwzMiksTGUoNCksaGUoKSxkZSg1LCJ0ZCIsMzIpLExlKDYpLGhlKCksdWkoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDIpLHdyKGEuSUQpLGZlKDIpLHdyKGEuRElTUExBWU5BTUUpLGZlKDIpLHdyKGEuVVNFUk5BTUUpfX1mdW5jdGlvbiBKX3QoYyxs'@;
put 'KXtpZigxJmMmJihkZSgwLCJ0ciIsMzMpLG10KDEscV90LDksNCwibmctY29udGFpbmVyIiw2KSgyLFhfdCw3LDMsIm5nLWNvbnRhaW5lciIsNiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoNCk7eGUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3VzZXJzLyIrKGEu'@;
put 'VVJJTUVNfHxhLklEKSksZmUoKSx4ZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBlLlNhczkpLGZlKCkseGUoIm5nSWYiLGQuc2VydmVyVHlwZT09PWQuU2VydmVyVHlwZS5TYXNqcyl9fWZ1bmN0aW9uIFFfdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGhl'@;
put 'YWQiKSgyLCJ0ciIpLG10KDMsJF90LDEzLDAsIm5nLWNvbnRhaW5lciIsNikoNCxLX3QsMTAsMCwibmctY29udGFpbmVyIiw2KSxoZSgpKCksZGUoNSwidGJvZHkiKSxtdCg2LEpfdCwzLDMsInRyIiwzMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMykseGUoIm5nSWYiLGEuc2Vy'@;
put 'dmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzanMpLGZlKDIpLHhlKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIGV3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUo'@;
put 'MiksaGUoKSxtdCgzLEdfdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI3KSxtdCg1LFFfdCw3LDMsInRhYmxlIiwyOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksSXIoIk1FTUJFUlMgKCIsYS5ncm91cE1lbWJlckNvdW50LCIpIiksZmUoKSx4ZSgibmdJZiIsMD09YS5ncm91'@;
put 'cE1lbWJlckNvdW50KSxmZSgyKSx4ZSgibmdJZiIsMCE9YS5ncm91cE1lbWJlckNvdW50KX19ZnVuY3Rpb24gdHd0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBud3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsMzMpKDEs'@;
put 'InRkIiwzMiksTGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3VzZXJzLyIrYS5NRU1CRVJJRCksZmUoMiksd3IoYS5NRU1CRVJOQU1FKX19ZnVuY3Rpb24gcnd0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5'@;
put 'KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiKSg0LCJiIiksTGUoNSksaGUoKSgpKCkoKSxkZSg2LCJ0Ym9keSIpLG10KDcsbnd0LDMsMiwidHIiLDMwKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSg1KSxJcigiTUVNQkVSUyAoIixhLmdyb3VwTWVtYmVyQ291bnQsIikiKSxmZSgy'@;
put 'KSx4ZSgibmdGb3JPZiIsYS5ncm91cE1lbWJlcnMpfX1mdW5jdGlvbiBpd3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIpLGhlKCksbXQoMyx0d3QsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNyksbXQoNSxyd3QsOCwyLCJ0YWJsZSIsMjgpLGhlKCkoKSksMiZjKXtj'@;
put 'b25zdCBhPU9lKDIpO2ZlKDIpLHdyKGEuZ3JvdXBOYW1lKSxmZSgpLHhlKCJuZ0lmIiwwPT1hLmdyb3VwTWVtYmVyQ291bnQpLGZlKDIpLHhlKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlvbiBvd3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxtdCgxLFlfdCwxMywy'@;
put 'LCJkaXYiLDIwKSxkZSgyLCJkaXYiLDIxKSgzLCJkaXYiLDIyKSg0LCJkaXYiLDIzKSxtdCg1LGV3dCw2LDMsImRpdiIsNikoNixpd3QsNiwzLCJkaXYiLDYpLEd0KDcsImJyIiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5T'@;
put 'ZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKDQpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfX1sZXQgcTZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgs'@;
put 'Zix2KXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlPXYsdGhpcy5ncm91cFNlYXJjaD0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtVVJJPSIiLHRoaXMuZ3JvdXBVcmk9IiIsdGhp'@;
put 'cy5ncm91cE5hbWU9IiIsdGhpcy5ncm91cERlc2M9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgdmguU0FTanNDb25maWcsdGhpcy5pc1ZpeWE9ITEsdGhpcy5sb2FkaW5nPSExLHRoaXMuU2VydmVyVHlwZT1TMC5ZLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29u'@;
put 'ZmlnKCksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApfW5nT25Jbml0KCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi9n'@;
put 'cm91cHMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1VUkk9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxLbi51c2VybmF2Lmdyb3VwTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50Pyh0aGlzLmdy'@;
put 'b3Vwcz1Lbi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPUtuLnVzZXJuYXYuZ3JvdXBTZWFyY2gpOih2b2lkIDA9PT1Lbi51c2VybmF2Lmdyb3VwTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRl'@;
put 'bnRpdGllcy9ncm91cHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGg9SlNPTi5wYXJzZShhKS5pdGVtcy5tYXAoZj0+KHtHUk9VUFVSSTpmLmlkLEdST1VQTkFNRTpmLm5hbWUsR1JPVVBE'@;
put 'RVNDOmYuZGVzY3JpcHRpb259KSk7dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBzPWgsS24udXNlcm5hdi5ncm91cExpc3Q9aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Z3JvdXBzIixudWxsKS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cHM9YS5h'@;
put 'ZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLEtuLnVzZXJuYXYuZ3JvdXBMaXN0PWEuYWRhcHRlclJlc3BvbnNlLmdyb3Vwc30pKToodGhpcy5ncm91cHM9S24udXNlcm5hdi5ncm91cExpc3QsdGhpcy5ncm91cFNlYXJjaD1Lbi51c2VybmF2Lmdyb3VwU2VhcmNoKSx0aGlzLnBhcmFtUHJlc2VudCYm'@;
put 'KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrdGhpcy5wYXJhbVVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihh'@;
put 'PT5hLnRleHQoKSkudGhlbihhPT57bGV0IGQ9SlNPTi5wYXJzZShhKTt0aGlzLmxvYWRpbmc9ITE7bGV0IGg9ZC5pdGVtcy5tYXAoZj0+KHtNRU1CRVJOQU1FOmYubmFtZSxNRU1CRVJJRDpmLmlkfSkpO3RoaXMuZ3JvdXBNZW1iZXJzPWgsdGhpcy5ncm91cE1lbWJlckNvdW50PWgubGVuZ3Ro'@;
put 'LHRoaXMuZ3JvdXBVcmk9dGhpcy5wYXJhbVVSSSx0aGlzLmdyb3VwTmFtZT10aGlzLnBhcmFtVVJJfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieWdyb3VwIix7aXdhbnQ6W3tncm91cGlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oZD0+e3RoaXMuZ3Jv'@;
put 'dXBNZW1iZXJzPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5ncm91cE1lbWJlckNvdW50PWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHZvaWQgMCE9PWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0mJih0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91'@;
put 'cFVyaT1kLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzWzBdLlVSSU1FTXx8dGhpcy5wYXJhbVVSSSx0aGlzLmdyb3VwTmFtZT1kLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzWzBdLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1kLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzWzBdLkdS'@;
put 'T1VQREVTQyx0aGlzLmdyb3VwTmFtZXx8KHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkkpKX0pKSl9Z3JvdXBMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZ3JvdXBzLHRoaXMuZ3JvdXBTZWFyY2gsIkdST1VQTkFNRSIpLEtuLnVzZXJu'@;
put 'YXYuZ3JvdXBTZWFyY2g9dGhpcy5ncm91cFNlYXJjaH1ncm91cE9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIr'@;
put 'ZW5jb2RlVVJJKGEuR1JPVVBVUkkpOmQrIi8iK2VuY29kZVVSSShhLkdST1VQVVJJKSksdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcy8iK2EuR1JPVVBVUkkrIi9tZW1iZXJzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2Nl'@;
put 'cHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oaD0+aC50ZXh0KCkpLnRoZW4oaD0+e2xldCBmPUpTT04ucGFyc2UoaCk7dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9YS5HUk9VUFVSSSx0aGlzLmdyb3VwTmFtZT1hLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1hLkdST1VQREVT'@;
put 'QztsZXQgdj1mLml0ZW1zLm1hcChNPT4oe01FTUJFUk5BTUU6TS5uYW1lLE1FTUJFUklEOk0uaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9dix0aGlzLmdyb3VwTWVtYmVyQ291bnQ9di5sZW5ndGh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAi'@;
put 'LHtpd2FudDpbe2dyb3VwaWQ6YS5HUk9VUFVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBVcmk9YS5HUk9VUFVSSSx0aGlzLmdyb3VwTmFtZT1hLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1hLkdST1VQREVTQyx0aGlzLmdyb3VwTWVtYmVycz1mLmFkYXB0ZXJS'@;
put 'ZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aH0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHRsKSxHZShZdSksR2UoTHMpLEdlKHBoKSxHZShDdSkp'@;
put 'fX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWdyb3VwIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWzEsInNpZGViYXItaGVpZ2h0Il0s'@;
put 'WyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0s'@;
put 'WyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBHcm91cHMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lm'@;
put 'Il0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRk'@;
put 'aW5nIl0sWyJzaGFwZSIsInVzZXJzIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNsYXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwiZ3JvdXAtZGF0YSJdLFsxLCJ0YWJsZSIsImdyb3VwLWluZm8i'@;
put 'XSxbMSwibGVmdCJdLFsxLCJncm91cC1pbmZvLXRleHQiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFszLCJyb3V0ZXJMaW5rIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwi'@;
put 'd2lkdGgtMjUiXSxbMSwiIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSxtdCgyLHpfdCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsWl90LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgp'@;
put 'KCksZGUoNCwiZGl2Iiw0KSxtdCg1LFdfdCwzLDAsImRpdiIsNSkoNixvd3QsOCwzLCJkaXYiLDYpLGhlKCkpLDImZCYmKGZlKDIpLHhlKCJuZ0lmIixoLmdyb3VwcyksZmUoKSx4ZSgibmdGb3JPZiIsaC5ncm91cHMpLGZlKDIpLHhlKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCkseGUoIm5nSWYi'@;
put 'LGguZ3JvdXBNZW1iZXJzJiYhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbbHMseW8sYzEsZWMsbmwsR3MsVGgsUGQsRmwsUmQsaTQscjRdLHN0eWxlczpbImJvZHlbY2RzLXRoZW1lPWRhcmtdIC5ncm91cC1pbmZve2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMx'@;
put 'NDM1MX0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5ncm91cC1kYXRhe2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjk0MDRifSAg'@;
put 'Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5ncm91cC1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5ncm91cC1kYXRhe2JhY2tncm91bmQtY29sb3I6I2Y5'@;
put 'ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fS5zaWRlYmFyLWhlaWdodFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17aGVpZ2h0OjEwMCV9Lmdyb3VwLWluZm8tdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9Lmdyb3VwLWluZm9bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9Lmdyb3VwLWluZm9bX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OmF1'@;
put 'dG99Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAuZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'Lm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zl'@;
put 'cntjdXJzb3I6cG9pbnRlcn0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsuZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fSJd'@;
put 'fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBhd3QoKXt9ZnVuY3Rpb24gcnRlKGMpe3JldHVybiBudWxsPT1jP2F3dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3IoYyl9fWZ1bmN0aW9uIFg2ZShjKXtyZXR1cm4gbnVsbD09Yz9bXTpBcnJheS5pc0FycmF5KGMpP2M6QXJy'@;
put 'YXkuZnJvbShjKX1mdW5jdGlvbiBsd3QoKXtyZXR1cm5bXX1mdW5jdGlvbiBKNmUoYyl7cmV0dXJuIG51bGw9PWM/bHd0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChjKX19ZnVuY3Rpb24gUTZlKGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hdGNo'@;
put 'ZXMoYyl9fWZ1bmN0aW9uIGU4ZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwubWF0Y2hlcyhjKX19dmFyIGR3dD1BcnJheS5wcm90b3R5cGUuZmluZDtmdW5jdGlvbiBmd3QoKXtyZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZH12YXIgZ3d0PUFycmF5LnByb3RvdHlwZS5maWx0'@;
put 'ZXI7ZnVuY3Rpb24gbXd0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbil9ZnVuY3Rpb24gdDhlKGMpe3JldHVybiBuZXcgQXJyYXkoYy5sZW5ndGgpfWZ1bmN0aW9uIHVOKGMsbCl7dGhpcy5vd25lckRvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLm5hbWVzcGFjZVVSST1j'@;
put 'Lm5hbWVzcGFjZVVSSSx0aGlzLl9uZXh0PW51bGwsdGhpcy5fcGFyZW50PWMsdGhpcy5fX2RhdGFfXz1sfWZ1bmN0aW9uIEN3dChjLGwsYSxkLGgsZil7Zm9yKHZhciBNLHY9MCxEPWwubGVuZ3RoLFo9Zi5sZW5ndGg7djxaOysrdikoTT1sW3ZdKT8oTS5fX2RhdGFfXz1mW3ZdLGRbdl09TSk6'@;
put 'YVt2XT1uZXcgdU4oYyxmW3ZdKTtmb3IoO3Y8RDsrK3YpKE09bFt2XSkmJihoW3ZdPU0pfWZ1bmN0aW9uIFN3dChjLGwsYSxkLGgsZix2KXt2YXIgTSxELEVlLFo9bmV3IE1hcCxuZT1sLmxlbmd0aCxjZT1mLmxlbmd0aCxiZT1uZXcgQXJyYXkobmUpO2ZvcihNPTA7TTxuZTsrK00pKEQ9bFtN'@;
put 'XSkmJihiZVtNXT1FZT12LmNhbGwoRCxELl9fZGF0YV9fLE0sbCkrIiIsWi5oYXMoRWUpP2hbTV09RDpaLnNldChFZSxEKSk7Zm9yKE09MDtNPGNlOysrTSlFZT12LmNhbGwoYyxmW01dLE0sZikrIiIsKEQ9Wi5nZXQoRWUpKT8oZFtNXT1ELEQuX19kYXRhX189ZltNXSxaLmRlbGV0ZShFZSkp'@;
put 'OmFbTV09bmV3IHVOKGMsZltNXSk7Zm9yKE09MDtNPG5lOysrTSkoRD1sW01dKSYmWi5nZXQoYmVbTV0pPT09RCYmKGhbTV09RCl9ZnVuY3Rpb24gTXd0KGMpe3JldHVybiBjLl9fZGF0YV9ffWZ1bmN0aW9uIEV3dChjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJiJsZW5ndGgiaW4gYz9j'@;
put 'OkFycmF5LmZyb20oYyl9ZnVuY3Rpb24gUnd0KGMsbCl7cmV0dXJuIGM8bD8tMTpjPmw/MTpjPj1sPzA6TmFOfXVOLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dU4sYXBwZW5kQ2hpbGQ6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoYyx0aGlzLl9uZXh0KX0s'@;
put 'aW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoYyxsKX0scXVlcnlTZWxlY3RvcjpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3IoYyl9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oYyl7cmV0dXJu'@;
put 'IHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKGMpfX07dmFyIGl0ZT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3QgbjhlPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDppdGUseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsi'@;
put 'LHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtmdW5jdGlvbiBkTihjKXt2YXIgbD1jKz0iIixhPWwuaW5kZXhPZigiOiIpO3JldHVybiBhPj0wJiYieG1sbnMiIT09KGw9Yy5zbGljZSgwLGEp'@;
put 'KSYmKGM9Yy5zbGljZShhKzEpKSxuOGUuaGFzT3duUHJvcGVydHkobCk/e3NwYWNlOm44ZVtsXSxsb2NhbDpjfTpjfWZ1bmN0aW9uIFZ3dChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZShjKX19ZnVuY3Rpb24gQnd0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMu'@;
put 'cmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKX19ZnVuY3Rpb24gand0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxsKX19ZnVuY3Rpb24gend0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9j'@;
put 'YWwsbCl9fWZ1bmN0aW9uIFV3dChjLGwpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWE/dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6dGhpcy5zZXRBdHRyaWJ1dGUoYyxhKX19ZnVuY3Rpb24gWnd0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7'@;
put 'dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsYSl9fWZ1bmN0aW9uIHI4ZShjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50JiZjLm93bmVy'@;
put 'RG9jdW1lbnQuZGVmYXVsdFZpZXd8fGMuZG9jdW1lbnQmJmN8fGMuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gWXd0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fWZ1bmN0aW9uIEd3dChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5z'@;
put 'ZXRQcm9wZXJ0eShjLGwsYSl9fWZ1bmN0aW9uICR3dChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGQ9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZD90aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpOnRoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxkLGEpfX1mdW5jdGlvbiBF'@;
put 'dyhjLGwpe3JldHVybiBjLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobCl8fHI4ZShjKS5nZXRDb21wdXRlZFN0eWxlKGMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShsKX1mdW5jdGlvbiBxd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbY119fWZ1bmN0aW9uIFh3dChjLGwpe3Jl'@;
put 'dHVybiBmdW5jdGlvbigpe3RoaXNbY109bH19ZnVuY3Rpb24gSnd0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT9kZWxldGUgdGhpc1tjXTp0aGlzW2NdPWF9fWZ1bmN0aW9uIGk4ZShjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQo'@;
put 'L158XHMrLyl9ZnVuY3Rpb24gb3RlKGMpe3JldHVybiBjLmNsYXNzTGlzdHx8bmV3IG84ZShjKX1mdW5jdGlvbiBvOGUoYyl7dGhpcy5fbm9kZT1jLHRoaXMuX25hbWVzPWk4ZShjLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfWZ1bmN0aW9uIGE4ZShjLGwpe2Zvcih2YXIgYT1vdGUoYyks'@;
put 'ZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLmFkZChsW2RdKX1mdW5jdGlvbiBzOGUoYyxsKXtmb3IodmFyIGE9b3RlKGMpLGQ9LTEsaD1sLmxlbmd0aDsrK2Q8aDspYS5yZW1vdmUobFtkXSl9ZnVuY3Rpb24gZUN0KGMpe3JldHVybiBmdW5jdGlvbigpe2E4ZSh0aGlzLGMpfX1mdW5jdGlvbiB0'@;
put 'Q3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7czhlKHRoaXMsYyl9fWZ1bmN0aW9uIG5DdChjLGwpe3JldHVybiBmdW5jdGlvbigpeyhsLmFwcGx5KHRoaXMsYXJndW1lbnRzKT9hOGU6czhlKSh0aGlzLGMpfX1mdW5jdGlvbiBpQ3QoKXt0aGlzLnRleHRDb250ZW50PSIifWZ1bmN0aW9uIG9DdChj'@;
put 'KXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PWN9fWZ1bmN0aW9uIGFDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnRleHRDb250ZW50PWw/PyIifX1mdW5jdGlvbiBsQ3QoKXt0aGlzLmlubmVySFRNTD0iIn1mdW5j'@;
put 'dGlvbiBjQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5pbm5lckhUTUw9Y319ZnVuY3Rpb24gdUN0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaW5uZXJIVE1MPWw/PyIifX1mdW5jdGlvbiBoQ3QoKXt0aGlzLm5leHRTaWJsaW5n'@;
put 'JiZ0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyl9ZnVuY3Rpb24gcEN0KCl7dGhpcy5wcmV2aW91c1NpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcyx0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gbUN0KGMpe3JldHVybiBmdW5jdGlv'@;
put 'bigpe3ZhciBsPXRoaXMub3duZXJEb2N1bWVudCxhPXRoaXMubmFtZXNwYWNlVVJJO3JldHVybiBhPT09aXRlJiZsLmRvY3VtZW50RWxlbWVudC5uYW1lc3BhY2VVUkk9PT1pdGU/bC5jcmVhdGVFbGVtZW50KGMpOmwuY3JlYXRlRWxlbWVudE5TKGEsYyl9fWZ1bmN0aW9uIHZDdChjKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBsOGUoYyl7dmFyIGw9ZE4oYyk7cmV0dXJuKGwubG9jYWw/dkN0Om1DdCkobCl9ZnVuY3Rpb24geUN0KCl7cmV0dXJuIG51bGx9ZnVuY3Rpb24g'@;
put 'd0N0KCl7dmFyIGM9dGhpcy5wYXJlbnROb2RlO2MmJmMucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gU0N0KCl7dmFyIGM9dGhpcy5jbG9uZU5vZGUoITEpLGw9dGhpcy5wYXJlbnROb2RlO3JldHVybiBsP2wuaW5zZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2libGluZyk6Y31mdW5jdGlvbiBN'@;
put 'Q3QoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMCksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uIGtDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLl9fb247aWYobCl7Zm9yKHZhciBmLGE9MCxk'@;
put 'PS0xLGg9bC5sZW5ndGg7YTxoOysrYSlmPWxbYV0sYy50eXBlJiZmLnR5cGUhPT1jLnR5cGV8fGYubmFtZSE9PWMubmFtZT9sWysrZF09Zjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZi50eXBlLGYubGlzdGVuZXIsZi5vcHRpb25zKTsrK2Q/bC5sZW5ndGg9ZDpkZWxldGUgdGhpcy5fX29u'@;
put 'fX19ZnVuY3Rpb24gREN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaCxkPXRoaXMuX19vbixmPWZ1bmN0aW9uIFRDdChjKXtyZXR1cm4gZnVuY3Rpb24obCl7Yy5jYWxsKHRoaXMsbCx0aGlzLl9fZGF0YV9fKX19KGwpO2lmKGQpZm9yKHZhciB2PTAsTT1kLmxlbmd0aDt2PE07Kyt2'@;
put 'KWlmKChoPWRbdl0pLnR5cGU9PT1jLnR5cGUmJmgubmFtZT09PWMubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyLGgub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyPWYsaC5vcHRpb25zPWEpLHZvaWQo'@;
put 'aC52YWx1ZT1sKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYy50eXBlLGYsYSksaD17dHlwZTpjLnR5cGUsbmFtZTpjLm5hbWUsdmFsdWU6bCxsaXN0ZW5lcjpmLG9wdGlvbnM6YX0sZD9kLnB1c2goaCk6dGhpcy5fX29uPVtoXX19ZnVuY3Rpb24gYzhlKGMsbCxhKXt2YXIgZD1yOGUoYyksaD1k'@;
put 'LkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBoP2g9bmV3IGgobCxhKTooaD1kLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGE/KGguaW5pdEV2ZW50KGwsYS5idWJibGVzLGEuY2FuY2VsYWJsZSksaC5kZXRhaWw9YS5kZXRhaWwpOmguaW5pdEV2ZW50KGwsITEsITEpKSxj'@;
put 'LmRpc3BhdGNoRXZlbnQoaCl9ZnVuY3Rpb24gUkN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGM4ZSh0aGlzLGMsbCl9fWZ1bmN0aW9uIExDdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjOGUodGhpcyxjLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19bzhlLnByb3Rv'@;
put 'dHlwZT17YWRkOmZ1bmN0aW9uKGMpe3RoaXMuX25hbWVzLmluZGV4T2YoYyk8MCYmKHRoaXMuX25hbWVzLnB1c2goYyksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGMpe3ZhciBsPXRoaXMuX25hbWVzLmlu'@;
put 'ZGV4T2YoYyk7bD49MCYmKHRoaXMuX25hbWVzLnNwbGljZShsLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGMpPj0wfX07dmFyIGF0ZT1bbnVs'@;
put 'bF07ZnVuY3Rpb24gb2QoYyxsKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWx9ZnVuY3Rpb24gdThlKCl7cmV0dXJuIG5ldyBvZChbW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF1dLGF0ZSl9b2QucHJvdG90eXBlPXU4ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm9kLHNlbGVjdDpm'@;
put 'dW5jdGlvbiBzd3QoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPXJ0ZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgRCxaLGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1uZXcgQXJyYXkodiksbmU9MDtu'@;
put 'ZTx2OysrbmUpKEQ9ZltuZV0pJiYoWj1jLmNhbGwoRCxELl9fZGF0YV9fLG5lLGYpKSYmKCJfX2RhdGFfXyJpbiBEJiYoWi5fX2RhdGFfXz1ELl9fZGF0YV9fKSxNW25lXT1aKTtyZXR1cm4gbmV3IG9kKGQsdGhpcy5fcGFyZW50cyl9LHNlbGVjdEFsbDpmdW5jdGlvbiB1d3QoYyl7Yz0iZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgYz9mdW5jdGlvbiBjd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFg2ZShjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fShjKTpKNmUoYyk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9W10saD1bXSxmPTA7ZjxhOysrZilmb3IodmFyIEQs'@;
put 'dj1sW2ZdLE09di5sZW5ndGgsWj0wO1o8TTsrK1opKEQ9dltaXSkmJihkLnB1c2goYy5jYWxsKEQsRC5fX2RhdGFfXyxaLHYpKSxoLnB1c2goRCkpO3JldHVybiBuZXcgb2QoZCxoKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24gcHd0KGMpe3JldHVybiB0aGlzLnNlbGVjdChudWxsPT1jP2Z3dDpm'@;
put 'dW5jdGlvbiBod3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGR3dC5jYWxsKHRoaXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rpb24iPT10eXBlb2YgYz9jOmU4ZShjKSkpfSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlvbiBid3QoYyl7cmV0dXJuIHRoaXMuc2VsZWN0QWxsKG51bGw9PWM/bXd0'@;
put 'OmZ1bmN0aW9uIHZ3dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZ3d0LmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6ZThlKGMpKSl9LGZpbHRlcjpmdW5jdGlvbiB5d3QoYyl7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPVE2ZShjKSk7Zm9yKHZh'@;
put 'ciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgRCxmPWxbaF0sdj1mLmxlbmd0aCxNPWRbaF09W10sWj0wO1o8djsrK1opKEQ9ZltaXSkmJmMuY2FsbChELEQuX19kYXRhX18sWixmKSYmTS5wdXNoKEQpO3JldHVybiBuZXcgb2Qo'@;
put 'ZCx0aGlzLl9wYXJlbnRzKX0sZGF0YTpmdW5jdGlvbiB4d3QoYyxsKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLE13dCk7dmFyIGE9bD9Td3Q6Q3d0LGQ9dGhpcy5fcGFyZW50cyxoPXRoaXMuX2dyb3VwczsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9ZnVu'@;
put 'Y3Rpb24gd3d0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0oYykpO2Zvcih2YXIgZj1oLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPW5ldyBBcnJheShmKSxEPW5ldyBBcnJheShmKSxaPTA7WjxmOysrWil7dmFyIG5lPWRbWl0sY2U9aFtaXSxiZT1jZS5sZW5ndGgsRWU9RXd0KGMu'@;
put 'Y2FsbChuZSxuZSYmbmUuX19kYXRhX18sWixkKSksQmU9RWUubGVuZ3RoLHFlPU1bWl09bmV3IEFycmF5KEJlKSxydD12W1pdPW5ldyBBcnJheShCZSk7YShuZSxjZSxxZSxydCxEW1pdPW5ldyBBcnJheShiZSksRWUsbCk7Zm9yKHZhciB2bixDbixkdD0wLEp0PTA7ZHQ8QmU7KytkdClpZih2'@;
put 'bj1xZVtkdF0pe2ZvcihkdD49SnQmJihKdD1kdCsxKTshKENuPXJ0W0p0XSkmJisrSnQ8QmU7KTt2bi5fbmV4dD1Dbnx8bnVsbH19cmV0dXJuKHY9bmV3IG9kKHYsZCkpLl9lbnRlcj1NLHYuX2V4aXQ9RCx2fSxlbnRlcjpmdW5jdGlvbiBfd3QoKXtyZXR1cm4gbmV3IG9kKHRoaXMuX2VudGVy'@;
put 'fHx0aGlzLl9ncm91cHMubWFwKHQ4ZSksdGhpcy5fcGFyZW50cyl9LGV4aXQ6ZnVuY3Rpb24gVHd0KCl7cmV0dXJuIG5ldyBvZCh0aGlzLl9leGl0fHx0aGlzLl9ncm91cHMubWFwKHQ4ZSksdGhpcy5fcGFyZW50cyl9LGpvaW46ZnVuY3Rpb24gQXd0KGMsbCxhKXt2YXIgZD10aGlzLmVudGVy'@;
put 'KCksaD10aGlzLGY9dGhpcy5leGl0KCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGM/KGQ9YyhkKSkmJihkPWQuc2VsZWN0aW9uKCkpOmQ9ZC5hcHBlbmQoYysiIiksbnVsbCE9bCYmKGg9bChoKSkmJihoPWguc2VsZWN0aW9uKCkpLG51bGw9PWE/Zi5yZW1vdmUoKTphKGYpLGQmJmg/ZC5t'@;
put 'ZXJnZShoKS5vcmRlcigpOmh9LG1lcmdlOmZ1bmN0aW9uIGt3dChjKXtmb3IodmFyIGw9Yy5zZWxlY3Rpb24/Yy5zZWxlY3Rpb24oKTpjLGE9dGhpcy5fZ3JvdXBzLGQ9bC5fZ3JvdXBzLGg9YS5sZW5ndGgsdj1NYXRoLm1pbihoLGQubGVuZ3RoKSxNPW5ldyBBcnJheShoKSxEPTA7RDx2Oysr'@;
put 'RClmb3IodmFyIEVlLFo9YVtEXSxuZT1kW0RdLGNlPVoubGVuZ3RoLGJlPU1bRF09bmV3IEFycmF5KGNlKSxCZT0wO0JlPGNlOysrQmUpKEVlPVpbQmVdfHxuZVtCZV0pJiYoYmVbQmVdPUVlKTtmb3IoO0Q8aDsrK0QpTVtEXT1hW0RdO3JldHVybiBuZXcgb2QoTSx0aGlzLl9wYXJlbnRzKX0s'@;
put 'c2VsZWN0aW9uOmZ1bmN0aW9uIEZDdCgpe3JldHVybiB0aGlzfSxvcmRlcjpmdW5jdGlvbiBEd3QoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9LTEsYT1jLmxlbmd0aDsrK2w8YTspZm9yKHZhciB2LGQ9Y1tsXSxoPWQubGVuZ3RoLTEsZj1kW2hdOy0taD49MDspKHY9ZFtoXSkmJihmJiY0'@;
put 'XnYuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZikmJmYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodixmKSxmPXYpO3JldHVybiB0aGlzfSxzb3J0OmZ1bmN0aW9uIEl3dChjKXtmdW5jdGlvbiBsKGNlLGJlKXtyZXR1cm4gY2UmJmJlP2MoY2UuX19kYXRhX18sYmUuX19kYXRhX18pOiFjZS0h'@;
put 'YmV9Y3x8KGM9Und0KTtmb3IodmFyIGE9dGhpcy5fZ3JvdXBzLGQ9YS5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDsrK2Ype2Zvcih2YXIgWix2PWFbZl0sTT12Lmxlbmd0aCxEPWhbZl09bmV3IEFycmF5KE0pLG5lPTA7bmU8TTsrK25lKShaPXZbbmVdKSYmKERbbmVdPVopO0Quc29y'@;
put 'dChsKX1yZXR1cm4gbmV3IG9kKGgsdGhpcy5fcGFyZW50cykub3JkZXIoKX0sY2FsbDpmdW5jdGlvbiBMd3QoKXt2YXIgYz1hcmd1bWVudHNbMF07cmV0dXJuIGFyZ3VtZW50c1swXT10aGlzLGMuYXBwbHkobnVsbCxhcmd1bWVudHMpLHRoaXN9LG5vZGVzOmZ1bmN0aW9uIE93dCgpe3JldHVy'@;
put 'biBBcnJheS5mcm9tKHRoaXMpfSxub2RlOmZ1bmN0aW9uIFB3dCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKXt2YXIgdj1kW2hdO2lmKHYpcmV0dXJuIHZ9cmV0dXJuIG51bGx9LHNp'@;
put 'emU6ZnVuY3Rpb24gRnd0KCl7bGV0IGM9MDtmb3IoY29uc3QgbCBvZiB0aGlzKSsrYztyZXR1cm4gY30sZW1wdHk6ZnVuY3Rpb24gSHd0KCl7cmV0dXJuIXRoaXMubm9kZSgpfSxlYWNoOmZ1bmN0aW9uIE53dChjKXtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9MCxkPWwubGVuZ3RoO2E8ZDsr'@;
put 'K2EpZm9yKHZhciBNLGg9bFthXSxmPTAsdj1oLmxlbmd0aDtmPHY7KytmKShNPWhbZl0pJiZjLmNhbGwoTSxNLl9fZGF0YV9fLGYsaCk7cmV0dXJuIHRoaXN9LGF0dHI6ZnVuY3Rpb24gV3d0KGMsbCl7dmFyIGE9ZE4oYyk7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXt2YXIgZD10aGlzLm5vZGUo'@;
put 'KTtyZXR1cm4gYS5sb2NhbD9kLmdldEF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCk6ZC5nZXRBdHRyaWJ1dGUoYSl9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bD9hLmxvY2FsP0J3dDpWd3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/YS5sb2NhbD9ad3Q6VXd0OmEubG9jYWw/end0Omp3dCko'@;
put 'YSxsKSl9LHN0eWxlOmZ1bmN0aW9uIEt3dChjLGwsYSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90aGlzLmVhY2goKG51bGw9PWw/WXd0OiJmdW5jdGlvbiI9PXR5cGVvZiBsPyR3dDpHd3QpKGMsbCxhPz8iIikpOkV3KHRoaXMubm9kZSgpLGMpfSxwcm9wZXJ0eTpmdW5jdGlvbiBRd3Qo'@;
put 'YyxsKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9xd3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/Snd0Olh3dCkoYyxsKSk6dGhpcy5ub2RlKClbY119LGNsYXNzZWQ6ZnVuY3Rpb24gckN0KGMsbCl7dmFyIGE9aThlKGMrIiIpO2lmKGFyZ3VtZW50cy5sZW5n'@;
put 'dGg8Mil7Zm9yKHZhciBkPW90ZSh0aGlzLm5vZGUoKSksaD0tMSxmPWEubGVuZ3RoOysraDxmOylpZighZC5jb250YWlucyhhW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gdGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgbD9uQ3Q6bD9lQ3Q6dEN0KShhLGwpKX0sdGV4dDpmdW5j'@;
put 'dGlvbiBzQ3QoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/aUN0OigiZnVuY3Rpb24iPT10eXBlb2YgYz9hQ3Q6b0N0KShjKSk6dGhpcy5ub2RlKCkudGV4dENvbnRlbnR9LGh0bWw6ZnVuY3Rpb24gZEN0KGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Ro'@;
put 'aXMuZWFjaChudWxsPT1jP2xDdDooImZ1bmN0aW9uIj09dHlwZW9mIGM/dUN0OmNDdCkoYykpOnRoaXMubm9kZSgpLmlubmVySFRNTH0scmFpc2U6ZnVuY3Rpb24gZkN0KCl7cmV0dXJuIHRoaXMuZWFjaChoQ3QpfSxsb3dlcjpmdW5jdGlvbiBnQ3QoKXtyZXR1cm4gdGhpcy5lYWNoKHBDdCl9'@;
put 'LGFwcGVuZDpmdW5jdGlvbiBiQ3QoYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpsOGUoYyk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQobC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSl9LGluc2VydDpmdW5jdGlvbiBfQ3QoYyxs'@;
put 'KXt2YXIgYT0iZnVuY3Rpb24iPT10eXBlb2YgYz9jOmw4ZShjKSxkPW51bGw9PWw/eUN0OiJmdW5jdGlvbiI9PXR5cGVvZiBsP2w6cnRlKGwpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFw'@;
put 'cGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uIENDdCgpe3JldHVybiB0aGlzLmVhY2god0N0KX0sY2xvbmU6ZnVuY3Rpb24geEN0KGMpe3JldHVybiB0aGlzLnNlbGVjdChjP01DdDpTQ3QpfSxkYXR1bTpmdW5jdGlvbiBFQ3QoYyl7cmV0dXJuIGFyZ3VtZW50'@;
put 'cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGMpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBJQ3QoYyxsLGEpe3ZhciBoLHYsZD1mdW5jdGlvbiBBQ3QoYyl7cmV0dXJuIGMudHJpbSgpLnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihsKXt2YXIgYT0iIixk'@;
put 'PWwuaW5kZXhPZigiLiIpO3JldHVybiBkPj0wJiYoYT1sLnNsaWNlKGQrMSksbD1sLnNsaWNlKDAsZCkpLHt0eXBlOmwsbmFtZTphfX0pfShjKyIiKSxmPWQubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7Zm9yKE09bD9EQ3Q6a0N0LGg9MDtoPGY7KytoKXRoaXMuZWFjaChNKGRb'@;
put 'aF0sbCxhKSk7cmV0dXJuIHRoaXN9dmFyIE09dGhpcy5ub2RlKCkuX19vbjtpZihNKWZvcih2YXIgbmUsRD0wLFo9TS5sZW5ndGg7RDxaOysrRClmb3IoaD0wLG5lPU1bRF07aDxmOysraClpZigodj1kW2hdKS50eXBlPT09bmUudHlwZSYmdi5uYW1lPT09bmUubmFtZSlyZXR1cm4gbmUudmFs'@;
put 'dWV9LGRpc3BhdGNoOmZ1bmN0aW9uIE9DdChjLGwpe3JldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP0xDdDpSQ3QpKGMsbCkpfSxbU3ltYm9sLml0ZXJhdG9yXTpmdW5jdGlvbipQQ3QoKXtmb3IodmFyIGM9dGhpcy5fZ3JvdXBzLGw9MCxhPWMubGVuZ3RoO2w8YTsrK2wp'@;
put 'Zm9yKHZhciB2LGQ9Y1tsXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKSh2PWRbaF0pJiYoeWllbGQgdil9fTtjb25zdCAkOT11OGU7ZnVuY3Rpb24gc3RlKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9uZXcgb2QoW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyldLFtkb2N1bWVudC5k'@;
put 'b2N1bWVudEVsZW1lbnRdKTpuZXcgb2QoW1g2ZShjKV0sYXRlKX1mdW5jdGlvbiB3cyhjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IG9kKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjKV1dLFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgb2QoW1tjXV0sYXRlKX12YXIg'@;
put 'SEN0PXt2YWx1ZTooKT0+e319O2Z1bmN0aW9uIGQ4ZSgpe2Zvcih2YXIgZCxjPTAsbD1hcmd1bWVudHMubGVuZ3RoLGE9e307YzxsOysrYyl7aWYoIShkPWFyZ3VtZW50c1tjXSsiIil8fGQgaW4gYXx8L1tccy5dLy50ZXN0KGQpKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCB0eXBlOiAiK2Qp'@;
put 'O2FbZF09W119cmV0dXJuIG5ldyBoTihhKX1mdW5jdGlvbiBoTihjKXt0aGlzLl89Y31mdW5jdGlvbiBWQ3QoYyxsKXtmb3IodmFyIGgsYT0wLGQ9Yy5sZW5ndGg7YTxkOysrYSlpZigoaD1jW2FdKS5uYW1lPT09bClyZXR1cm4gaC52YWx1ZX1mdW5jdGlvbiBoOGUoYyxsLGEpe2Zvcih2YXIg'@;
put 'ZD0wLGg9Yy5sZW5ndGg7ZDxoOysrZClpZihjW2RdLm5hbWU9PT1sKXtjW2RdPUhDdCxjPWMuc2xpY2UoMCxkKS5jb25jYXQoYy5zbGljZShkKzEpKTticmVha31yZXR1cm4gbnVsbCE9YSYmYy5wdXNoKHtuYW1lOmwsdmFsdWU6YX0pLGN9aE4ucHJvdG90eXBlPWQ4ZS5wcm90b3R5cGU9e2Nv'@;
put 'bnN0cnVjdG9yOmhOLG9uOmZ1bmN0aW9uKGMsbCl7dmFyIGgsYT10aGlzLl8sZD1mdW5jdGlvbiBOQ3QoYyxsKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMrLykubWFwKGZ1bmN0aW9uKGEpe3ZhciBkPSIiLGg9YS5pbmRleE9mKCIuIik7aWYoaD49MCYmKGQ9YS5zbGljZShoKzEpLGE9'@;
put 'YS5zbGljZSgwLGgpKSxhJiYhbC5oYXNPd25Qcm9wZXJ0eShhKSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gdHlwZTogIithKTtyZXR1cm57dHlwZTphLG5hbWU6ZH19KX0oYysiIixhKSxmPS0xLHY9ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtpZihudWxsIT1sJiYiZnVu'@;
put 'Y3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY2FsbGJhY2s6ICIrbCk7Zm9yKDsrK2Y8djspaWYoaD0oYz1kW2ZdKS50eXBlKWFbaF09aDhlKGFbaF0sYy5uYW1lLGwpO2Vsc2UgaWYobnVsbD09bClmb3IoaCBpbiBhKWFbaF09aDhlKGFbaF0sYy5uYW1lLG51bGwp'@;
put 'O3JldHVybiB0aGlzfWZvcig7KytmPHY7KWlmKChoPShjPWRbZl0pLnR5cGUpJiYoaD1WQ3QoYVtoXSxjLm5hbWUpKSlyZXR1cm4gaH0sY29weTpmdW5jdGlvbigpe3ZhciBjPXt9LGw9dGhpcy5fO2Zvcih2YXIgYSBpbiBsKWNbYV09bFthXS5zbGljZSgpO3JldHVybiBuZXcgaE4oYyl9LGNh'@;
put 'bGw6ZnVuY3Rpb24oYyxsKXtpZigoaD1hcmd1bWVudHMubGVuZ3RoLTIpPjApZm9yKHZhciBoLGYsYT1uZXcgQXJyYXkoaCksZD0wO2Q8aDsrK2QpYVtkXT1hcmd1bWVudHNbZCsyXTtpZighdGhpcy5fLmhhc093blByb3BlcnR5KGMpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAi'@;
put 'K2MpO2ZvcihkPTAsaD0oZj10aGlzLl9bY10pLmxlbmd0aDtkPGg7KytkKWZbZF0udmFsdWUuYXBwbHkobCxhKX0sYXBwbHk6ZnVuY3Rpb24oYyxsLGEpe2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKHZhciBkPXRo'@;
put 'aXMuX1tjXSxoPTAsZj1kLmxlbmd0aDtoPGY7KytoKWRbaF0udmFsdWUuYXBwbHkobCxhKX19O2NvbnN0IGx0ZT1kOGU7dmFyIGZOLFRBLFR3PTAseEE9MCxFQT0wLGY4ZT0xZTMscE49MCxLOT0wLGdOPTAsQUE9Im9iamVjdCI9PXR5cGVvZiBwZXJmb3JtYW5jZSYmcGVyZm9ybWFuY2Uubm93'@;
put 'P3BlcmZvcm1hbmNlOkRhdGUscDhlPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUuYmluZCh3aW5kb3cpOmZ1bmN0aW9uKGMpe3NldFRpbWVvdXQoYywxNyl9O2Z1bmN0aW9uIGN0ZSgpe3Jl'@;
put 'dHVybiBLOXx8KHA4ZShCQ3QpLEs5PUFBLm5vdygpK2dOKX1mdW5jdGlvbiBCQ3QoKXtLOT0wfWZ1bmN0aW9uIG1OKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBnOGUoYyxsLGEpe3ZhciBkPW5ldyBtTjtyZXR1cm4gZC5yZXN0YXJ0KGMsbCxhKSxk'@;
put 'fWZ1bmN0aW9uIG04ZSgpe0s5PShwTj1BQS5ub3coKSkrZ04sVHc9eEE9MDt0cnl7IWZ1bmN0aW9uIGpDdCgpe2N0ZSgpLCsrVHc7Zm9yKHZhciBsLGM9Zk47YzspKGw9SzktYy5fdGltZSk+PTAmJmMuX2NhbGwuY2FsbCh2b2lkIDAsbCksYz1jLl9uZXh0Oy0tVHd9KCl9ZmluYWxseXtUdz0w'@;
put 'LGZ1bmN0aW9uIFVDdCgpe2Zvcih2YXIgYyxhLGw9Zk4sZD0xLzA7bDspbC5fY2FsbD8oZD5sLl90aW1lJiYoZD1sLl90aW1lKSxjPWwsbD1sLl9uZXh0KTooYT1sLl9uZXh0LGwuX25leHQ9bnVsbCxsPWM/Yy5fbmV4dD1hOmZOPWEpO1RBPWMsdXRlKGQpfSgpLEs5PTB9fWZ1bmN0aW9uIHpD'@;
put 'dCgpe3ZhciBjPUFBLm5vdygpLGw9Yy1wTjtsPmY4ZSYmKGdOLT1sLHBOPWMpfWZ1bmN0aW9uIHV0ZShjKXtUd3x8KHhBJiYoeEE9Y2xlYXJUaW1lb3V0KHhBKSksYy1LOT4yND8oYzwxLzAmJih4QT1zZXRUaW1lb3V0KG04ZSxjLUFBLm5vdygpLWdOKSksRUEmJihFQT1jbGVhckludGVydmFs'@;
put 'KEVBKSkpOihFQXx8KHBOPUFBLm5vdygpLEVBPXNldEludGVydmFsKHpDdCxmOGUpKSxUdz0xLHA4ZShtOGUpKSl9ZnVuY3Rpb24gdk4oYyxsLGEpe3ZhciBkPW5ldyBtTjtyZXR1cm4gZC5yZXN0YXJ0KGg9PntkLnN0b3AoKSxjKGgrbCl9LGw9bnVsbD09bD8wOitsLGEpLGR9bU4ucHJvdG90'@;
put 'eXBlPWc4ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOm1OLHJlc3RhcnQ6ZnVuY3Rpb24oYyxsLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uIik7YT0obnVsbD09YT9jdGUoKTorYSkrKG51bGw9PWw/MDor'@;
put 'bCksIXRoaXMuX25leHQmJlRBIT09dGhpcyYmKFRBP1RBLl9uZXh0PXRoaXM6Zk49dGhpcyxUQT10aGlzKSx0aGlzLl9jYWxsPWMsdGhpcy5fdGltZT1hLHV0ZSgpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5fY2FsbCYmKHRoaXMuX2NhbGw9bnVsbCx0aGlzLl90aW1lPTEvMCx1dGUoKSl9fTt2'@;
put 'YXIgWkN0PWx0ZSgic3RhcnQiLCJlbmQiLCJjYW5jZWwiLCJpbnRlcnJ1cHQiKSxXQ3Q9W10sdjhlPTAsaHRlPTIsYk49MyxmdGU9NSx5Tj02O2Z1bmN0aW9uIF9OKGMsbCxhLGQsaCxmKXt2YXIgdj1jLl9fdHJhbnNpdGlvbjtpZih2KXtpZihhIGluIHYpcmV0dXJufWVsc2UgYy5fX3RyYW5z'@;
put 'aXRpb249e307IWZ1bmN0aW9uIFlDdChjLGwsYSl7dmFyIGgsZD1jLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiB2KFope3ZhciBuZSxjZSxiZSxFZTtpZigxIT09YS5zdGF0ZSlyZXR1cm4gRCgpO2ZvcihuZSBpbiBkKWlmKChFZT1kW25lXSkubmFtZT09PWEubmFtZSl7aWYoRWUuc3RhdGU9PT1i'@;
put 'TilyZXR1cm4gdk4odik7ND09PUVlLnN0YXRlPyhFZS5zdGF0ZT15TixFZS50aW1lci5zdG9wKCksRWUub24uY2FsbCgiaW50ZXJydXB0IixjLGMuX19kYXRhX18sRWUuaW5kZXgsRWUuZ3JvdXApLGRlbGV0ZSBkW25lXSk6K25lPGwmJihFZS5zdGF0ZT15TixFZS50aW1lci5zdG9wKCksRWUu'@;
put 'b24uY2FsbCgiY2FuY2VsIixjLGMuX19kYXRhX18sRWUuaW5kZXgsRWUuZ3JvdXApLGRlbGV0ZSBkW25lXSl9aWYodk4oZnVuY3Rpb24oKXthLnN0YXRlPT09Yk4mJihhLnN0YXRlPTQsYS50aW1lci5yZXN0YXJ0KE0sYS5kZWxheSxhLnRpbWUpLE0oWikpfSksYS5zdGF0ZT1odGUsYS5vbi5j'@;
put 'YWxsKCJzdGFydCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksYS5zdGF0ZT09PWh0ZSl7Zm9yKGEuc3RhdGU9Yk4saD1uZXcgQXJyYXkoYmU9YS50d2Vlbi5sZW5ndGgpLG5lPTAsY2U9LTE7bmU8YmU7KytuZSkoRWU9YS50d2VlbltuZV0udmFsdWUuY2FsbChjLGMuX19kYXRhX18s'@;
put 'YS5pbmRleCxhLmdyb3VwKSkmJihoWysrY2VdPUVlKTtoLmxlbmd0aD1jZSsxfX1mdW5jdGlvbiBNKFope2Zvcih2YXIgbmU9WjxhLmR1cmF0aW9uP2EuZWFzZS5jYWxsKG51bGwsWi9hLmR1cmF0aW9uKTooYS50aW1lci5yZXN0YXJ0KEQpLGEuc3RhdGU9ZnRlLDEpLGNlPS0xLGJlPWgubGVu'@;
put 'Z3RoOysrY2U8YmU7KWhbY2VdLmNhbGwoYyxuZSk7YS5zdGF0ZT09PWZ0ZSYmKGEub24uY2FsbCgiZW5kIixjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSxEKCkpfWZ1bmN0aW9uIEQoKXtmb3IodmFyIFogaW4gYS5zdGF0ZT15TixhLnRpbWVyLnN0b3AoKSxkZWxldGUgZFtsXSxkKXJl'@;
put 'dHVybjtkZWxldGUgYy5fX3RyYW5zaXRpb259ZFtsXT1hLGEudGltZXI9ZzhlKGZ1bmN0aW9uIGYoWil7YS5zdGF0ZT0xLGEudGltZXIucmVzdGFydCh2LGEuZGVsYXksYS50aW1lKSxhLmRlbGF5PD1aJiZ2KFotYS5kZWxheSl9LDAsYS50aW1lKX0oYyxhLHtuYW1lOmwsaW5kZXg6ZCxncm91'@;
put 'cDpoLG9uOlpDdCx0d2VlbjpXQ3QsdGltZTpmLnRpbWUsZGVsYXk6Zi5kZWxheSxkdXJhdGlvbjpmLmR1cmF0aW9uLGVhc2U6Zi5lYXNlLHRpbWVyOm51bGwsc3RhdGU6djhlfSl9ZnVuY3Rpb24gcHRlKGMsbCl7dmFyIGE9QzMoYyxsKTtpZihhLnN0YXRlPnY4ZSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'InRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZCIpO3JldHVybiBhfWZ1bmN0aW9uIHM0KGMsbCl7dmFyIGE9QzMoYyxsKTtpZihhLnN0YXRlPmJOKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgcnVubmluZyIpO3JldHVybiBhfWZ1bmN0aW9uIEMzKGMsbCl7dmFyIGE9Yy5f'@;
put 'X3RyYW5zaXRpb247aWYoIWF8fCEoYT1hW2xdKSl0aHJvdyBuZXcgRXJyb3IoInRyYW5zaXRpb24gbm90IGZvdW5kIik7cmV0dXJuIGF9ZnVuY3Rpb24gd04oYyxsKXt2YXIgZCxoLHYsYT1jLl9fdHJhbnNpdGlvbixmPSEwO2lmKGEpe2Zvcih2IGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSko'@;
put 'ZD1hW3ZdKS5uYW1lPT09bD8oaD1kLnN0YXRlPmh0ZSYmZC5zdGF0ZTxmdGUsZC5zdGF0ZT15TixkLnRpbWVyLnN0b3AoKSxkLm9uLmNhbGwoaD8iaW50ZXJydXB0IjoiY2FuY2VsIixjLGMuX19kYXRhX18sZC5pbmRleCxkLmdyb3VwKSxkZWxldGUgYVt2XSk6Zj0hMTtmJiZkZWxldGUgYy5f'@;
put 'X3RyYW5zaXRpb259fWZ1bmN0aW9uIGw0KGMsbCl7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihhKXtyZXR1cm4gYyooMS1hKStsKmF9fXZhciBDTix5OGU9MTgwL01hdGguUEksZ3RlPXt0cmFuc2xhdGVYOjAsdHJhbnNsYXRlWTowLHJvdGF0ZTowLHNrZXdYOjAsc2NhbGVYOjEsc2NhbGVZ'@;
put 'OjF9O2Z1bmN0aW9uIF84ZShjLGwsYSxkLGgsZil7dmFyIHYsTSxEO3JldHVybih2PU1hdGguc3FydChjKmMrbCpsKSkmJihjLz12LGwvPXYpLChEPWMqYStsKmQpJiYoYS09YypELGQtPWwqRCksKE09TWF0aC5zcXJ0KGEqYStkKmQpKSYmKGEvPU0sZC89TSxELz1NKSxjKmQ8bCphJiYoYz0t'@;
put 'YyxsPS1sLEQ9LUQsdj0tdikse3RyYW5zbGF0ZVg6aCx0cmFuc2xhdGVZOmYscm90YXRlOk1hdGguYXRhbjIobCxjKSp5OGUsc2tld1g6TWF0aC5hdGFuKEQpKnk4ZSxzY2FsZVg6dixzY2FsZVk6TX19ZnVuY3Rpb24gdzhlKGMsbCxhLGQpe2Z1bmN0aW9uIGgoWil7cmV0dXJuIFoubGVuZ3Ro'@;
put 'P1oucG9wKCkrIiAiOiIifXJldHVybiBmdW5jdGlvbihaLG5lKXt2YXIgY2U9W10sYmU9W107cmV0dXJuIFo9YyhaKSxuZT1jKG5lKSxmdW5jdGlvbiBmKFosbmUsY2UsYmUsRWUsQmUpe2lmKFohPT1jZXx8bmUhPT1iZSl7dmFyIHFlPUVlLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsbCxudWxs'@;
put 'LGEpO0JlLnB1c2goe2k6cWUtNCx4Omw0KFosY2UpfSx7aTpxZS0yLHg6bDQobmUsYmUpfSl9ZWxzZShjZXx8YmUpJiZFZS5wdXNoKCJ0cmFuc2xhdGUoIitjZStsK2JlK2EpfShaLnRyYW5zbGF0ZVgsWi50cmFuc2xhdGVZLG5lLnRyYW5zbGF0ZVgsbmUudHJhbnNsYXRlWSxjZSxiZSksZnVu'@;
put 'Y3Rpb24gdihaLG5lLGNlLGJlKXtaIT09bmU/KFotbmU+MTgwP25lKz0zNjA6bmUtWj4xODAmJihaKz0zNjApLGJlLnB1c2goe2k6Y2UucHVzaChoKGNlKSsicm90YXRlKCIsbnVsbCxkKS0yLHg6bDQoWixuZSl9KSk6bmUmJmNlLnB1c2goaChjZSkrInJvdGF0ZSgiK25lK2QpfShaLnJvdGF0'@;
put 'ZSxuZS5yb3RhdGUsY2UsYmUpLGZ1bmN0aW9uIE0oWixuZSxjZSxiZSl7WiE9PW5lP2JlLnB1c2goe2k6Y2UucHVzaChoKGNlKSsic2tld1goIixudWxsLGQpLTIseDpsNChaLG5lKX0pOm5lJiZjZS5wdXNoKGgoY2UpKyJza2V3WCgiK25lK2QpfShaLnNrZXdYLG5lLnNrZXdYLGNlLGJlKSxm'@;
put 'dW5jdGlvbiBEKFosbmUsY2UsYmUsRWUsQmUpe2lmKFohPT1jZXx8bmUhPT1iZSl7dmFyIHFlPUVlLnB1c2goaChFZSkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpO0JlLnB1c2goe2k6cWUtNCx4Omw0KFosY2UpfSx7aTpxZS0yLHg6bDQobmUsYmUpfSl9ZWxzZSgxIT09Y2V8fDEhPT1i'@;
put 'ZSkmJkVlLnB1c2goaChFZSkrInNjYWxlKCIrY2UrIiwiK2JlKyIpIil9KFouc2NhbGVYLFouc2NhbGVZLG5lLnNjYWxlWCxuZS5zY2FsZVksY2UsYmUpLFo9bmU9bnVsbCxmdW5jdGlvbihFZSl7Zm9yKHZhciBydCxCZT0tMSxxZT1iZS5sZW5ndGg7KytCZTxxZTspY2VbKHJ0PWJlW0JlXSku'@;
put 'aV09cnQueChFZSk7cmV0dXJuIGNlLmpvaW4oIiIpfX19dmFyIHFDdD13OGUoZnVuY3Rpb24gJEN0KGMpe2NvbnN0IGw9bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiBET01NYXRyaXg/RE9NTWF0cml4OldlYktpdENTU01hdHJpeCkoYysiIik7cmV0dXJuIGwuaXNJZGVudGl0eT9ndGU6XzhlKGwu'@;
put 'YSxsLmIsbC5jLGwuZCxsLmUsbC5mKX0sInB4LCAiLCJweCkiLCJkZWcpIiksQzhlPXc4ZShmdW5jdGlvbiBLQ3QoYyl7cmV0dXJuIG51bGwhPWMmJihDTnx8KENOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJnIikpLENOLnNldEF0dHJp'@;
put 'YnV0ZSgidHJhbnNmb3JtIixjKSxjPUNOLnRyYW5zZm9ybS5iYXNlVmFsLmNvbnNvbGlkYXRlKCkpP184ZSgoYz1jLm1hdHJpeCkuYSxjLmIsYy5jLGMuZCxjLmUsYy5mKTpndGV9LCIsICIsIikiLCIpIik7ZnVuY3Rpb24gWEN0KGMsbCl7dmFyIGEsZDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIg'@;
put 'aD1zNCh0aGlzLGMpLGY9aC50d2VlbjtpZihmIT09YSlmb3IodmFyIHY9MCxNPShkPWE9ZikubGVuZ3RoO3Y8TTsrK3YpaWYoZFt2XS5uYW1lPT09bCl7KGQ9ZC5zbGljZSgpKS5zcGxpY2UodiwxKTticmVha31oLnR3ZWVuPWR9fWZ1bmN0aW9uIEpDdChjLGwsYSl7dmFyIGQsaDtpZigiZnVu'@;
put 'Y3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9czQodGhpcyxjKSx2PWYudHdlZW47aWYodiE9PWQpe2g9KGQ9dikuc2xpY2UoKTtmb3IodmFyIE09e25hbWU6bCx2YWx1ZTphfSxEPTAsWj1oLmxlbmd0aDtEPFo7KytEKWlmKGhbRF0ubmFt'@;
put 'ZT09PWwpe2hbRF09TTticmVha31EPT09WiYmaC5wdXNoKE0pfWYudHdlZW49aH19ZnVuY3Rpb24gbXRlKGMsbCxhKXt2YXIgZD1jLl9pZDtyZXR1cm4gYy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGg9czQodGhpcyxkKTsoaC52YWx1ZXx8KGgudmFsdWU9e30pKVtsXT1hLmFwcGx5KHRoaXMsYXJn'@;
put 'dW1lbnRzKX0pLGZ1bmN0aW9uKGgpe3JldHVybiBDMyhoLGQpLnZhbHVlW2xdfX1mdW5jdGlvbiB2dGUoYyxsLGEpe2MucHJvdG90eXBlPWwucHJvdG90eXBlPWEsYS5jb25zdHJ1Y3Rvcj1jfWZ1bmN0aW9uIFM4ZShjLGwpe3ZhciBhPU9iamVjdC5jcmVhdGUoYy5wcm90b3R5cGUpO2Zvcih2'@;
put 'YXIgZCBpbiBsKWFbZF09bFtkXTtyZXR1cm4gYX1mdW5jdGlvbiBrQSgpe312YXIgU049MS8uNyxBdz0iXFxzKihbKy1dP1xcZCspXFxzKiIsSUE9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KVxccyoiLGM0PSJcXHMqKFsrLV0/KD86XFxkKlxcLik/XFxk'@;
put 'Kyg/OltlRV1bKy1dP1xcZCspPyklXFxzKiIsZVN0PS9eIyhbMC05YS1mXXszLDh9KSQvLHRTdD1uZXcgUmVnRXhwKGBecmdiXFwoJHtBd30sJHtBd30sJHtBd31cXCkkYCksblN0PW5ldyBSZWdFeHAoYF5yZ2JcXCgke2M0fSwke2M0fSwke2M0fVxcKSRgKSxyU3Q9bmV3IFJlZ0V4cChgXnJn'@;
put 'YmFcXCgke0F3fSwke0F3fSwke0F3fSwke0lBfVxcKSRgKSxpU3Q9bmV3IFJlZ0V4cChgXnJnYmFcXCgke2M0fSwke2M0fSwke2M0fSwke0lBfVxcKSRgKSxvU3Q9bmV3IFJlZ0V4cChgXmhzbFxcKCR7SUF9LCR7YzR9LCR7YzR9XFwpJGApLGFTdD1uZXcgUmVnRXhwKGBeaHNsYVxcKCR7SUF9'@;
put 'LCR7YzR9LCR7YzR9LCR7SUF9XFwpJGApLE04ZT17YWxpY2VibHVlOjE1NzkyMzgzLGFudGlxdWV3aGl0ZToxNjQ0NDM3NSxhcXVhOjY1NTM1LGFxdWFtYXJpbmU6ODM4ODU2NCxhenVyZToxNTc5NDE3NSxiZWlnZToxNjExOTI2MCxiaXNxdWU6MTY3NzAyNDQsYmxhY2s6MCxibGFuY2hlZGFs'@;
put 'bW9uZDoxNjc3MjA0NSxibHVlOjI1NSxibHVldmlvbGV0OjkwNTUyMDIsYnJvd246MTA4MjQyMzQsYnVybHl3b29kOjE0NTk2MjMxLGNhZGV0Ymx1ZTo2MjY2NTI4LGNoYXJ0cmV1c2U6ODM4ODM1MixjaG9jb2xhdGU6MTM3ODk0NzAsY29yYWw6MTY3NDQyNzIsY29ybmZsb3dlcmJsdWU6NjU5'@;
put 'MTk4MSxjb3Juc2lsazoxNjc3NTM4OCxjcmltc29uOjE0NDIzMTAwLGN5YW46NjU1MzUsZGFya2JsdWU6MTM5LGRhcmtjeWFuOjM1NzIzLGRhcmtnb2xkZW5yb2Q6MTIwOTI5MzksZGFya2dyYXk6MTExMTkwMTcsZGFya2dyZWVuOjI1NjAwLGRhcmtncmV5OjExMTE5MDE3LGRhcmtraGFraTox'@;
put 'MjQzMzI1OSxkYXJrbWFnZW50YTo5MTA5NjQzLGRhcmtvbGl2ZWdyZWVuOjU1OTc5OTksZGFya29yYW5nZToxNjc0NzUyMCxkYXJrb3JjaGlkOjEwMDQwMDEyLGRhcmtyZWQ6OTEwOTUwNCxkYXJrc2FsbW9uOjE1MzA4NDEwLGRhcmtzZWFncmVlbjo5NDE5OTE5LGRhcmtzbGF0ZWJsdWU6NDcz'@;
put 'NDM0NyxkYXJrc2xhdGVncmF5OjMxMDA0OTUsZGFya3NsYXRlZ3JleTozMTAwNDk1LGRhcmt0dXJxdW9pc2U6NTI5NDUsZGFya3Zpb2xldDo5Njk5NTM5LGRlZXBwaW5rOjE2NzE2OTQ3LGRlZXBza3libHVlOjQ5MTUxLGRpbWdyYXk6NjkwODI2NSxkaW1ncmV5OjY5MDgyNjUsZG9kZ2VyYmx1'@;
put 'ZToyMDAzMTk5LGZpcmVicmljazoxMTY3NDE0NixmbG9yYWx3aGl0ZToxNjc3NTkyMCxmb3Jlc3RncmVlbjoyMjYzODQyLGZ1Y2hzaWE6MTY3MTE5MzUsZ2FpbnNib3JvOjE0NDc0NDYwLGdob3N0d2hpdGU6MTYzMTY2NzEsZ29sZDoxNjc2NjcyMCxnb2xkZW5yb2Q6MTQzMjkxMjAsZ3JheTo4'@;
put 'NDIxNTA0LGdyZWVuOjMyNzY4LGdyZWVueWVsbG93OjExNDAzMDU1LGdyZXk6ODQyMTUwNCxob25leWRldzoxNTc5NDE2MCxob3RwaW5rOjE2NzM4NzQwLGluZGlhbnJlZDoxMzQ1ODUyNCxpbmRpZ286NDkxNTMzMCxpdm9yeToxNjc3NzIwMCxraGFraToxNTc4NzY2MCxsYXZlbmRlcjoxNTEz'@;
put 'MjQxMCxsYXZlbmRlcmJsdXNoOjE2NzczMzY1LGxhd25ncmVlbjo4MTkwOTc2LGxlbW9uY2hpZmZvbjoxNjc3NTg4NSxsaWdodGJsdWU6MTEzOTMyNTQsbGlnaHRjb3JhbDoxNTc2MTUzNixsaWdodGN5YW46MTQ3NDU1OTksbGlnaHRnb2xkZW5yb2R5ZWxsb3c6MTY0NDgyMTAsbGlnaHRncmF5'@;
put 'OjEzODgyMzIzLGxpZ2h0Z3JlZW46OTQ5ODI1NixsaWdodGdyZXk6MTM4ODIzMjMsbGlnaHRwaW5rOjE2NzU4NDY1LGxpZ2h0c2FsbW9uOjE2NzUyNzYyLGxpZ2h0c2VhZ3JlZW46MjE0Mjg5MCxsaWdodHNreWJsdWU6ODkwMDM0NixsaWdodHNsYXRlZ3JheTo3ODMzNzUzLGxpZ2h0c2xhdGVn'@;
put 'cmV5Ojc4MzM3NTMsbGlnaHRzdGVlbGJsdWU6MTE1ODQ3MzQsbGlnaHR5ZWxsb3c6MTY3NzcxODQsbGltZTo2NTI4MCxsaW1lZ3JlZW46MzMyOTMzMCxsaW5lbjoxNjQ0NTY3MCxtYWdlbnRhOjE2NzExOTM1LG1hcm9vbjo4Mzg4NjA4LG1lZGl1bWFxdWFtYXJpbmU6NjczNzMyMixtZWRpdW1i'@;
put 'bHVlOjIwNSxtZWRpdW1vcmNoaWQ6MTIyMTE2NjcsbWVkaXVtcHVycGxlOjk2NjI2ODMsbWVkaXVtc2VhZ3JlZW46Mzk3ODA5NyxtZWRpdW1zbGF0ZWJsdWU6ODA4Nzc5MCxtZWRpdW1zcHJpbmdncmVlbjo2NDE1NCxtZWRpdW10dXJxdW9pc2U6NDc3MjMwMCxtZWRpdW12aW9sZXRyZWQ6MTMw'@;
put 'NDcxNzMsbWlkbmlnaHRibHVlOjE2NDQ5MTIsbWludGNyZWFtOjE2MTIxODUwLG1pc3R5cm9zZToxNjc3MDI3Myxtb2NjYXNpbjoxNjc3MDIyOSxuYXZham93aGl0ZToxNjc2ODY4NSxuYXZ5OjEyOCxvbGRsYWNlOjE2NjQzNTU4LG9saXZlOjg0MjEzNzYsb2xpdmVkcmFiOjcwNDg3Mzksb3Jh'@;
put 'bmdlOjE2NzUzOTIwLG9yYW5nZXJlZDoxNjcyOTM0NCxvcmNoaWQ6MTQzMTU3MzQscGFsZWdvbGRlbnJvZDoxNTY1NzEzMCxwYWxlZ3JlZW46MTAwMjU4ODAscGFsZXR1cnF1b2lzZToxMTUyOTk2NixwYWxldmlvbGV0cmVkOjE0MzgxMjAzLHBhcGF5YXdoaXA6MTY3NzMwNzcscGVhY2hwdWZm'@;
put 'OjE2NzY3NjczLHBlcnU6MTM0Njg5OTEscGluazoxNjc2MTAzNSxwbHVtOjE0NTI0NjM3LHBvd2RlcmJsdWU6MTE1OTE5MTAscHVycGxlOjgzODg3MzYscmViZWNjYXB1cnBsZTo2Njk3ODgxLHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxl'@;
put 'YnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3Mzcy'@;
put 'OTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdo'@;
put 'ZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fTtmdW5jdGlvbiB4OGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRIZXgoKX1mdW5jdGlvbiBFOGUoKXtyZXR1cm4gdGhpcy5yZ2IoKS5m'@;
put 'b3JtYXRSZ2IoKX1mdW5jdGlvbiBxOShjKXt2YXIgbCxhO3JldHVybiBjPShjKyIiKS50cmltKCkudG9Mb3dlckNhc2UoKSwobD1lU3QuZXhlYyhjKSk/KGE9bFsxXS5sZW5ndGgsbD1wYXJzZUludChsWzFdLDE2KSw2PT09YT9UOGUobCk6Mz09PWE/bmV3IFFkKGw+PjgmMTV8bD4+NCYyNDAs'@;
put 'bD4+NCYxNXwyNDAmbCwoMTUmbCk8PDR8MTUmbCwxKTo4PT09YT9NTihsPj4yNCYyNTUsbD4+MTYmMjU1LGw+PjgmMjU1LCgyNTUmbCkvMjU1KTo0PT09YT9NTihsPj4xMiYxNXxsPj44JjI0MCxsPj44JjE1fGw+PjQmMjQwLGw+PjQmMTV8MjQwJmwsKCgxNSZsKTw8NHwxNSZsKS8yNTUpOm51'@;
put 'bGwpOihsPXRTdC5leGVjKGMpKT9uZXcgUWQobFsxXSxsWzJdLGxbM10sMSk6KGw9blN0LmV4ZWMoYykpP25ldyBRZCgyNTUqbFsxXS8xMDAsMjU1KmxbMl0vMTAwLDI1NSpsWzNdLzEwMCwxKToobD1yU3QuZXhlYyhjKSk/TU4obFsxXSxsWzJdLGxbM10sbFs0XSk6KGw9aVN0LmV4ZWMoYykp'@;
put 'P01OKDI1NSpsWzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAwLGxbNF0pOihsPW9TdC5leGVjKGMpKT9EOGUobFsxXSxsWzJdLzEwMCxsWzNdLzEwMCwxKToobD1hU3QuZXhlYyhjKSk/RDhlKGxbMV0sbFsyXS8xMDAsbFszXS8xMDAsbFs0XSk6TThlLmhhc093blByb3BlcnR5KGMp'@;
put 'P1Q4ZShNOGVbY10pOiJ0cmFuc3BhcmVudCI9PT1jP25ldyBRZChOYU4sTmFOLE5hTiwwKTpudWxsfWZ1bmN0aW9uIFQ4ZShjKXtyZXR1cm4gbmV3IFFkKGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmYywxKX1mdW5jdGlvbiBNTihjLGwsYSxkKXtyZXR1cm4gZDw9MCYmKGM9bD1hPU5hTiksbmV3'@;
put 'IFFkKGMsbCxhLGQpfWZ1bmN0aW9uIHhOKGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9mdW5jdGlvbiBjU3QoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBrQXx8KGM9cTkoYykpLGM/bmV3IFFkKChjPWMucmdiKCkpLnIsYy5nLGMuYixjLm9wYWNpdHkpOm5ldyBRZH0oYyk6'@;
put 'bmV3IFFkKGMsbCxhLGQ/PzEpfWZ1bmN0aW9uIFFkKGMsbCxhLGQpe3RoaXMucj0rYyx0aGlzLmc9K2wsdGhpcy5iPSthLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiBBOGUoKXtyZXR1cm5gIyR7SjkodGhpcy5yKX0ke0o5KHRoaXMuZyl9JHtKOSh0aGlzLmIpfWB9ZnVuY3Rpb24gazhlKCl7'@;
put 'Y29uc3QgYz1FTih0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJyZ2IoIjoicmdiYSgifSR7WDkodGhpcy5yKX0sICR7WDkodGhpcy5nKX0sICR7WDkodGhpcy5iKX0kezE9PT1jPyIpIjpgLCAke2N9KWB9YH1mdW5jdGlvbiBFTihjKXtyZXR1cm4gaXNOYU4oYyk/MTpNYXRoLm1heCgw'@;
put 'LE1hdGgubWluKDEsYykpfWZ1bmN0aW9uIFg5KGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDI1NSxNYXRoLnJvdW5kKGMpfHwwKSl9ZnVuY3Rpb24gSjkoYyl7cmV0dXJuKChjPVg5KGMpKTwxNj8iMCI6IiIpK2MudG9TdHJpbmcoMTYpfWZ1bmN0aW9uIEQ4ZShjLGwsYSxkKXtyZXR1'@;
put 'cm4gZDw9MD9jPWw9YT1OYU46YTw9MHx8YT49MT9jPWw9TmFOOmw8PTAmJihjPU5hTiksbmV3IFMzKGMsbCxhLGQpfWZ1bmN0aW9uIEk4ZShjKXtpZihjIGluc3RhbmNlb2YgUzMpcmV0dXJuIG5ldyBTMyhjLmgsYy5zLGMubCxjLm9wYWNpdHkpO2lmKGMgaW5zdGFuY2VvZiBrQXx8KGM9cTko'@;
put 'YykpLCFjKXJldHVybiBuZXcgUzM7aWYoYyBpbnN0YW5jZW9mIFMzKXJldHVybiBjO3ZhciBsPShjPWMucmdiKCkpLnIvMjU1LGE9Yy5nLzI1NSxkPWMuYi8yNTUsaD1NYXRoLm1pbihsLGEsZCksZj1NYXRoLm1heChsLGEsZCksdj1OYU4sTT1mLWgsRD0oZitoKS8yO3JldHVybiBNPyh2PWw9'@;
put 'PT1mPyhhLWQpL00rNiooYTxkKTphPT09Zj8oZC1sKS9NKzI6KGwtYSkvTSs0LE0vPUQ8LjU/ZitoOjItZi1oLHYqPTYwKTpNPUQ+MCYmRDwxPzA6dixuZXcgUzModixNLEQsYy5vcGFjaXR5KX1mdW5jdGlvbiBTMyhjLGwsYSxkKXt0aGlzLmg9K2MsdGhpcy5zPStsLHRoaXMubD0rYSx0aGlz'@;
put 'Lm9wYWNpdHk9K2R9ZnVuY3Rpb24gUjhlKGMpe3JldHVybihjPShjfHwwKSUzNjApPDA/YyszNjA6Y31mdW5jdGlvbiBUTihjKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLGN8fDApKX1mdW5jdGlvbiBidGUoYyxsLGEpe3JldHVybiAyNTUqKGM8NjA/bCsoYS1sKSpjLzYwOmM8MTgw'@;
put 'P2E6YzwyNDA/bCsoYS1sKSooMjQwLWMpLzYwOmwpfWZ1bmN0aW9uIEw4ZShjLGwsYSxkLGgpe3ZhciBmPWMqYyx2PWYqYztyZXR1cm4oKDEtMypjKzMqZi12KSpsKyg0LTYqZiszKnYpKmErKDErMypjKzMqZi0zKnYpKmQrdipoKS82fXZ0ZShrQSxxOSx7Y29weShjKXtyZXR1cm4gT2JqZWN0'@;
put 'LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3Rvcix0aGlzLGMpfSxkaXNwbGF5YWJsZSgpe3JldHVybiB0aGlzLnJnYigpLmRpc3BsYXlhYmxlKCl9LGhleDp4OGUsZm9ybWF0SGV4Ong4ZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIHNTdCgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKX0s'@;
put 'Zm9ybWF0SHNsOmZ1bmN0aW9uIGxTdCgpe3JldHVybiBJOGUodGhpcykuZm9ybWF0SHNsKCl9LGZvcm1hdFJnYjpFOGUsdG9TdHJpbmc6RThlfSksdnRlKFFkLHhOLFM4ZShrQSx7YnJpZ2h0ZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz9TTjpNYXRoLnBvdyhTTixjKSxuZXcgUWQodGhpcy5yKmMs'@;
put 'dGhpcy5nKmMsdGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IFFkKHRoaXMucipjLHRoaXMuZypjLHRoaXMuYipjLHRoaXMub3BhY2l0eSl9LHJnYigpe3JldHVybiB0aGlzfSxjbGFtcCgpe3JldHVybiBuZXcg'@;
put 'UWQoWDkodGhpcy5yKSxYOSh0aGlzLmcpLFg5KHRoaXMuYiksRU4odGhpcy5vcGFjaXR5KSl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuLS41PD10aGlzLnImJnRoaXMucjwyNTUuNSYmLS41PD10aGlzLmcmJnRoaXMuZzwyNTUuNSYmLS41PD10aGlzLmImJnRoaXMuYjwyNTUuNSYmMDw9dGhpcy5v'@;
put 'cGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGhleDpBOGUsZm9ybWF0SGV4OkE4ZSxmb3JtYXRIZXg4OmZ1bmN0aW9uIHVTdCgpe3JldHVybmAjJHtKOSh0aGlzLnIpfSR7SjkodGhpcy5nKX0ke0o5KHRoaXMuYil9JHtKOSgyNTUqKGlzTmFOKHRoaXMub3BhY2l0eSk/MTp0aGlzLm9wYWNpdHkp'@;
put 'KX1gfSxmb3JtYXRSZ2I6azhlLHRvU3RyaW5nOms4ZX0pKSx2dGUoUzMsZnVuY3Rpb24gZFN0KGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9JOGUoYyk6bmV3IFMzKGMsbCxhLGQ/PzEpfSxTOGUoa0Ese2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/U046TWF0aC5w'@;
put 'b3coU04sYyksbmV3IFMzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IFMzKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGM9dGhpcy5oJTM2'@;
put 'MCszNjAqKHRoaXMuaDwwKSxsPWlzTmFOKGMpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGE9dGhpcy5sLGQ9YSsoYTwuNT9hOjEtYSkqbCxoPTIqYS1kO3JldHVybiBuZXcgUWQoYnRlKGM+PTI0MD9jLTI0MDpjKzEyMCxoLGQpLGJ0ZShjLGgsZCksYnRlKGM8MTIwP2MrMjQwOmMtMTIwLGgs'@;
put 'ZCksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IFMzKFI4ZSh0aGlzLmgpLFROKHRoaXMucyksVE4odGhpcy5sKSxFTih0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4oMDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRo'@;
put 'aXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IGM9RU4odGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8iaHNsKCI6ImhzbGEoIn0ke1I4ZSh0aGlzLmgpfSwgJHsxMDAqVE4odGhpcy5zKX0lLCAkezEwMCpUTih0aGlzLmwpfSUk'@;
put 'ezE9PT1jPyIpIjpgLCAke2N9KWB9YH19KSk7Y29uc3QgeXRlPWM9PigpPT5jO2Z1bmN0aW9uIFA4ZShjLGwpe3ZhciBhPWwtYztyZXR1cm4gYT9mdW5jdGlvbiBPOGUoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGMrYSpsfX0oYyxhKTp5dGUoaXNOYU4oYyk/bDpjKX1jb25zdCBB'@;
put 'Tj1mdW5jdGlvbiBjKGwpe3ZhciBhPWZ1bmN0aW9uIGdTdChjKXtyZXR1cm4gMT09KGM9K2MpP1A4ZTpmdW5jdGlvbihsLGEpe3JldHVybiBhLWw/ZnVuY3Rpb24gcFN0KGMsbCxhKXtyZXR1cm4gYz1NYXRoLnBvdyhjLGEpLGw9TWF0aC5wb3cobCxhKS1jLGE9MS9hLGZ1bmN0aW9uKGQpe3Jl'@;
put 'dHVybiBNYXRoLnBvdyhjK2QqbCxhKX19KGwsYSxjKTp5dGUoaXNOYU4obCk/YTpsKX19KGwpO2Z1bmN0aW9uIGQoaCxmKXt2YXIgdj1hKChoPXhOKGgpKS5yLChmPXhOKGYpKS5yKSxNPWEoaC5nLGYuZyksRD1hKGguYixmLmIpLFo9UDhlKGgub3BhY2l0eSxmLm9wYWNpdHkpO3JldHVybiBm'@;
put 'dW5jdGlvbihuZSl7cmV0dXJuIGgucj12KG5lKSxoLmc9TShuZSksaC5iPUQobmUpLGgub3BhY2l0eT1aKG5lKSxoKyIifX1yZXR1cm4gZC5nYW1tYT1jLGR9KDEpO2Z1bmN0aW9uIEY4ZShjKXtyZXR1cm4gZnVuY3Rpb24obCl7dmFyIHYsTSxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9'@;
put 'bmV3IEFycmF5KGEpLGY9bmV3IEFycmF5KGEpO2Zvcih2PTA7djxhOysrdilNPXhOKGxbdl0pLGRbdl09TS5yfHwwLGhbdl09TS5nfHwwLGZbdl09TS5ifHwwO3JldHVybiBkPWMoZCksaD1jKGgpLGY9YyhmKSxNLm9wYWNpdHk9MSxmdW5jdGlvbihEKXtyZXR1cm4gTS5yPWQoRCksTS5nPWgo'@;
put 'RCksTS5iPWYoRCksTSsiIn19fUY4ZShmdW5jdGlvbiBoU3QoYyl7dmFyIGw9Yy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9YTw9MD9hPTA6YT49MT8oYT0xLGwtMSk6TWF0aC5mbG9vcihhKmwpLGg9Y1tkXSxmPWNbZCsxXTtyZXR1cm4gTDhlKChhLWQvbCkqbCxkPjA/Y1tk'@;
put 'LTFdOjIqaC1mLGgsZixkPGwtMT9jW2QrMl06MipmLWgpfX0pLEY4ZShmdW5jdGlvbiBmU3QoYyl7dmFyIGw9Yy5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uKGEpe3ZhciBkPU1hdGguZmxvb3IoKChhJT0xKTwwPysrYTphKSpsKTtyZXR1cm4gTDhlKChhLWQvbCkqbCxjWyhkK2wtMSklbF0sY1tk'@;
put 'JWxdLGNbKGQrMSklbF0sY1soZCsyKSVsXSl9fSk7dmFyIF90ZT0vWy0rXT8oPzpcZCtcLj9cZCp8XC4/XGQrKSg/OltlRV1bLStdP1xkKyk/L2csd3RlPW5ldyBSZWdFeHAoX3RlLnNvdXJjZSwiZyIpO2Z1bmN0aW9uIEg4ZShjLGwpe3ZhciBkLGgsZixhPV90ZS5sYXN0SW5kZXg9d3RlLmxh'@;
put 'c3RJbmRleD0wLHY9LTEsTT1bXSxEPVtdO2ZvcihjKz0iIixsKz0iIjsoZD1fdGUuZXhlYyhjKSkmJihoPXd0ZS5leGVjKGwpKTspKGY9aC5pbmRleCk+YSYmKGY9bC5zbGljZShhLGYpLE1bdl0/TVt2XSs9ZjpNWysrdl09ZiksKGQ9ZFswXSk9PT0oaD1oWzBdKT9NW3ZdP01bdl0rPWg6TVsr'@;
put 'K3ZdPWg6KE1bKyt2XT1udWxsLEQucHVzaCh7aTp2LHg6bDQoZCxoKX0pKSxhPXd0ZS5sYXN0SW5kZXg7cmV0dXJuIGE8bC5sZW5ndGgmJihmPWwuc2xpY2UoYSksTVt2XT9NW3ZdKz1mOk1bKyt2XT1mKSxNLmxlbmd0aDwyP0RbMF0/ZnVuY3Rpb24gdlN0KGMpe3JldHVybiBmdW5jdGlvbihs'@;
put 'KXtyZXR1cm4gYyhsKSsiIn19KERbMF0ueCk6ZnVuY3Rpb24gbVN0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0obCk6KGw9RC5sZW5ndGgsZnVuY3Rpb24oWil7Zm9yKHZhciBjZSxuZT0wO25lPGw7KytuZSlNWyhjZT1EW25lXSkuaV09Y2UueChaKTtyZXR1cm4gTS5qb2luKCIi'@;
put 'KX0pfWZ1bmN0aW9uIE44ZShjLGwpe3ZhciBhO3JldHVybigibnVtYmVyIj09dHlwZW9mIGw/bDQ6bCBpbnN0YW5jZW9mIHE5P0FOOihhPXE5KGwpKT8obD1hLEFOKTpIOGUpKGMsbCl9ZnVuY3Rpb24gYlN0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1m'@;
put 'dW5jdGlvbiB5U3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBfU3QoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlKGMpO3JldHVybiB2PT09'@;
put 'aD9udWxsOnY9PT1kP2Y6Zj1sKGQ9dixhKX19ZnVuY3Rpb24gd1N0KGMsbCxhKXt2YXIgZCxmLGg9YSsiIjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX1mdW5j'@;
put 'dGlvbiBDU3QoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdixELE09YSh0aGlzKTtyZXR1cm4gbnVsbD09TT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlKGMpOih2PXRoaXMuZ2V0QXR0cmlidXRlKGMpKT09PShEPU0rIiIpP251bGw6dj09PWQmJkQ9PT1oP2Y6KGg9'@;
put 'RCxmPWwoZD12LE0pKX19ZnVuY3Rpb24gU1N0KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHYsRCxNPWEodGhpcyk7cmV0dXJuIG51bGw9PU0/dm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCk6KHY9dGhpcy5nZXRBdHRyaWJ1dGVOUyhj'@;
put 'LnNwYWNlLGMubG9jYWwpKT09PShEPU0rIiIpP251bGw6dj09PWQmJkQ9PT1oP2Y6KGg9RCxmPWwoZD12LE0pKX19ZnVuY3Rpb24gVFN0KGMsbCl7dmFyIGEsZDtmdW5jdGlvbiBoKCl7dmFyIGY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGYhPT1kJiYoYT0oZD1mKSYmZnVuY3Rp'@;
put 'b24gRVN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3RoaXMuc2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsLGwuY2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBBU3QoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5'@;
put 'KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiB4U3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGUoYyxsLmNhbGwodGhpcyxhKSl9fShjLGYpKSxhfXJldHVybiBoLl92YWx1ZT1sLGh9ZnVuY3Rpb24gRFN0KGMsbCl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uKCl7cHRlKHRoaXMsYykuZGVsYXk9K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBJU3QoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe3B0ZSh0aGlzLGMpLmRlbGF5PWx9fWZ1bmN0aW9uIExTdChjLGwpe3JldHVybiBmdW5jdGlvbigpe3M0KHRoaXMs'@;
put 'YykuZHVyYXRpb249K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBPU3QoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe3M0KHRoaXMsYykuZHVyYXRpb249bH19dmFyIEtTdD0kOS5wcm90b3R5cGUuY29uc3RydWN0b3I7ZnVuY3Rpb24gVjhlKGMpe3JldHVybiBmdW5jdGlv'@;
put 'bigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fXZhciBmTXQ9MDtmdW5jdGlvbiB1NChjLGwsYSxkKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWwsdGhpcy5fbmFtZT1hLHRoaXMuX2lkPWR9ZnVuY3Rpb24gQ3RlKGMpe3JldHVybiAkOSgpLnRyYW5zaXRpb24oYyl9ZnVu'@;
put 'Y3Rpb24gQjhlKCl7cmV0dXJuKytmTXR9dmFyIHFnPSQ5LnByb3RvdHlwZTt1NC5wcm90b3R5cGU9Q3RlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6dTQsc2VsZWN0OmZ1bmN0aW9uIEdTdChjKXt2YXIgbD10aGlzLl9uYW1lLGE9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPXJ0'@;
put 'ZShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7Kyt2KWZvcih2YXIgbmUsY2UsTT1kW3ZdLEQ9TS5sZW5ndGgsWj1mW3ZdPW5ldyBBcnJheShEKSxiZT0wO2JlPEQ7KytiZSkobmU9TVtiZV0pJiYoY2U9Yy5jYWxsKG5lLG5lLl9f'@;
put 'ZGF0YV9fLGJlLE0pKSYmKCJfX2RhdGFfXyJpbiBuZSYmKGNlLl9fZGF0YV9fPW5lLl9fZGF0YV9fKSxaW2JlXT1jZSxfTihaW2JlXSxsLGEsYmUsWixDMyhuZSxhKSkpO3JldHVybiBuZXcgdTQoZix0aGlzLl9wYXJlbnRzLGwsYSl9LHNlbGVjdEFsbDpmdW5jdGlvbiAkU3QoYyl7dmFyIGw9'@;
put 'dGhpcy5fbmFtZSxhPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1KNmUoYykpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPVtdLHY9W10sTT0wO008aDsrK00pZm9yKHZhciBuZSxEPWRbTV0sWj1ELmxlbmd0aCxjZT0wO2NlPFo7KytjZSlpZihuZT1EW2Nl'@;
put 'XSl7Zm9yKHZhciBFZSxiZT1jLmNhbGwobmUsbmUuX19kYXRhX18sY2UsRCksQmU9QzMobmUsYSkscWU9MCxydD1iZS5sZW5ndGg7cWU8cnQ7KytxZSkoRWU9YmVbcWVdKSYmX04oRWUsbCxhLHFlLGJlLEJlKTtmLnB1c2goYmUpLHYucHVzaChuZSl9cmV0dXJuIG5ldyB1NChmLHYsbCxhKX0s'@;
put 'c2VsZWN0Q2hpbGQ6cWcuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46cWcuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uIEJTdChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9UTZlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSks'@;
put 'aD0wO2g8YTsrK2gpZm9yKHZhciBELGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1bXSxaPTA7Wjx2OysrWikoRD1mW1pdKSYmYy5jYWxsKEQsRC5fX2RhdGFfXyxaLGYpJiZNLnB1c2goRCk7cmV0dXJuIG5ldyB1NChkLHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LG1lcmdl'@;
put 'OmZ1bmN0aW9uIGpTdChjKXtpZihjLl9pZCE9PXRoaXMuX2lkKXRocm93IG5ldyBFcnJvcjtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9Yy5fZ3JvdXBzLGQ9bC5sZW5ndGgsZj1NYXRoLm1pbihkLGEubGVuZ3RoKSx2PW5ldyBBcnJheShkKSxNPTA7TTxmOysrTSlmb3IodmFyIGJlLEQ9bFtN'@;
put 'XSxaPWFbTV0sbmU9RC5sZW5ndGgsY2U9dltNXT1uZXcgQXJyYXkobmUpLEVlPTA7RWU8bmU7KytFZSkoYmU9RFtFZV18fFpbRWVdKSYmKGNlW0VlXT1iZSk7Zm9yKDtNPGQ7KytNKXZbTV09bFtNXTtyZXR1cm4gbmV3IHU0KHYsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0s'@;
put 'c2VsZWN0aW9uOmZ1bmN0aW9uIHFTdCgpe3JldHVybiBuZXcgS1N0KHRoaXMuX2dyb3Vwcyx0aGlzLl9wYXJlbnRzKX0sdHJhbnNpdGlvbjpmdW5jdGlvbiBkTXQoKXtmb3IodmFyIGM9dGhpcy5fbmFtZSxsPXRoaXMuX2lkLGE9QjhlKCksZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPTA7'@;
put 'ZjxoOysrZilmb3IodmFyIEQsdj1kW2ZdLE09di5sZW5ndGgsWj0wO1o8TTsrK1opaWYoRD12W1pdKXt2YXIgbmU9QzMoRCxsKTtfTihELGMsYSxaLHYse3RpbWU6bmUudGltZStuZS5kZWxheStuZS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOm5lLmR1cmF0aW9uLGVhc2U6bmUuZWFzZX0p'@;
put 'fXJldHVybiBuZXcgdTQoZCx0aGlzLl9wYXJlbnRzLGMsYSl9LGNhbGw6cWcuY2FsbCxub2RlczpxZy5ub2Rlcyxub2RlOnFnLm5vZGUsc2l6ZTpxZy5zaXplLGVtcHR5OnFnLmVtcHR5LGVhY2g6cWcuZWFjaCxvbjpmdW5jdGlvbiBaU3QoYyxsKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJn'@;
put 'dW1lbnRzLmxlbmd0aDwyP0MzKHRoaXMubm9kZSgpLGEpLm9uLm9uKGMpOnRoaXMuZWFjaChmdW5jdGlvbiBVU3QoYyxsLGEpe3ZhciBkLGgsZj1mdW5jdGlvbiB6U3QoYyl7cmV0dXJuKGMrIiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihsKXt2YXIgYT1sLmluZGV4'@;
put 'T2YoIi4iKTtyZXR1cm4gYT49MCYmKGw9bC5zbGljZSgwLGEpKSwhbHx8InN0YXJ0Ij09PWx9KX0obCk/cHRlOnM0O3JldHVybiBmdW5jdGlvbigpe3ZhciB2PWYodGhpcyxjKSxNPXYub247TSE9PWQmJihoPShkPU0pLmNvcHkoKSkub24obCxhKSx2Lm9uPWh9fShhLGMsbCkpfSxhdHRyOmZ1'@;
put 'bmN0aW9uIE1TdChjLGwpe3ZhciBhPWROKGMpLGQ9InRyYW5zZm9ybSI9PT1hP0M4ZTpOOGU7cmV0dXJuIHRoaXMuYXR0clR3ZWVuKGMsImZ1bmN0aW9uIj09dHlwZW9mIGw/KGEubG9jYWw/U1N0OkNTdCkoYSxkLG10ZSh0aGlzLCJhdHRyLiIrYyxsKSk6bnVsbD09bD8oYS5sb2NhbD95U3Q6'@;
put 'YlN0KShhKTooYS5sb2NhbD93U3Q6X1N0KShhLGQsbCkpfSxhdHRyVHdlZW46ZnVuY3Rpb24ga1N0KGMsbCl7dmFyIGE9ImF0dHIuIitjO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oYT10aGlzLnR3ZWVuKGEpKSYmYS5fdmFsdWU7aWYobnVsbD09bClyZXR1cm4gdGhpcy50d2Vlbihh'@;
put 'LG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjt2YXIgZD1kTihjKTtyZXR1cm4gdGhpcy50d2VlbihhLChkLmxvY2FsP1RTdDpBU3QpKGQsbCkpfSxzdHlsZTpmdW5jdGlvbiB0TXQoYyxsLGEpe3ZhciBkPSJ0cmFuc2Zvcm0iPT0oYys9IiIpP3FDdDpOOGU7'@;
put 'cmV0dXJuIG51bGw9PWw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gWFN0KGMsbCl7dmFyIGEsZCxoO3JldHVybiBmdW5jdGlvbigpe3ZhciBmPUV3KHRoaXMsYyksdj0odGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKSxFdyh0aGlzLGMpKTtyZXR1cm4gZj09PXY/bnVsbDpmPT09YSYm'@;
put 'dj09PWQ/aDpoPWwoYT1mLGQ9dil9fShjLGQpKS5vbigiZW5kLnN0eWxlLiIrYyxWOGUoYykpOiJmdW5jdGlvbiI9PXR5cGVvZiBsP3RoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIFFTdChjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PUV3KHRoaXMsYyksTT1hKHRo'@;
put 'aXMpLEQ9TSsiIjtyZXR1cm4gbnVsbD09TSYmKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyksRD1NPUV3KHRoaXMsYykpLHY9PT1EP251bGw6dj09PWQmJkQ9PT1oP2Y6KGg9RCxmPWwoZD12LE0pKX19KGMsZCxtdGUodGhpcywic3R5bGUuIitjLGwpKSkuZWFjaChmdW5jdGlvbiBlTXQo'@;
put 'YyxsKXt2YXIgYSxkLGgsTSxmPSJzdHlsZS4iK2wsdj0iZW5kLiIrZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgRD1zNCh0aGlzLGMpLFo9RC5vbixuZT1udWxsPT1ELnZhbHVlW2ZdP018fChNPVY4ZShsKSk6dm9pZCAwOyhaIT09YXx8aCE9PW5lKSYmKGQ9KGE9WikuY29weSgpKS5vbih2LGg9'@;
put 'bmUpLEQub249ZH19KHRoaXMuX2lkLGMpKTp0aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBKU3QoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PUV3KHRoaXMsYyk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX0oYyxkLGwpLGEpLm9u'@;
put 'KCJlbmQuc3R5bGUuIitjLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIGlNdChjLGwsYSl7dmFyIGQ9InN0eWxlLiIrKGMrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGQ9dGhpcy50d2VlbihkKSkmJmQuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oZCxu'@;
put 'dWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZCxmdW5jdGlvbiByTXQoYyxsLGEpe3ZhciBkLGg7ZnVuY3Rpb24gZigpe3ZhciB2PWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2IT09aCYmKGQ9KGg9dikmJmZ1bmN0'@;
put 'aW9uIG5NdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxsLmNhbGwodGhpcyxkKSxhKX19KGMsdixhKSksZH1yZXR1cm4gZi5fdmFsdWU9bCxmfShjLGwsYT8/IiIpKX0sdGV4dDpmdW5jdGlvbiBzTXQoYyl7cmV0dXJuIHRoaXMudHdlZW4oInRl'@;
put 'eHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIGFNdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fShtdGUodGhpcywidGV4dCIsYykpOmZ1bmN0aW9uIG9NdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnRleHRDb250'@;
put 'ZW50PWN9fShudWxsPT1jPyIiOmMrIiIpKX0sdGV4dFR3ZWVuOmZ1bmN0aW9uIHVNdChjKXt2YXIgbD0idGV4dCI7aWYoYXJndW1lbnRzLmxlbmd0aDwxKXJldHVybihsPXRoaXMudHdlZW4obCkpJiZsLl92YWx1ZTtpZihudWxsPT1jKXJldHVybiB0aGlzLnR3ZWVuKGwsbnVsbCk7aWYoImZ1'@;
put 'bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLnR3ZWVuKGwsZnVuY3Rpb24gY010KGMpe3ZhciBsLGE7ZnVuY3Rpb24gZCgpe3ZhciBoPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBoIT09YSYmKGw9KGE9aCkmJmZ1bmN0aW9uIGxNdChjKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24obCl7dGhpcy50ZXh0Q29udGVudD1jLmNhbGwodGhpcyxsKX19KGgpKSxsfXJldHVybiBkLl92YWx1ZT1jLGR9KGMpKX0scmVtb3ZlOmZ1bmN0aW9uIFlTdCgpe3JldHVybiB0aGlzLm9uKCJlbmQucmVtb3ZlIixmdW5jdGlvbiBXU3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7'@;
put 'dmFyIGw9dGhpcy5wYXJlbnROb2RlO2Zvcih2YXIgYSBpbiB0aGlzLl9fdHJhbnNpdGlvbilpZigrYSE9PWMpcmV0dXJuO2wmJmwucmVtb3ZlQ2hpbGQodGhpcyl9fSh0aGlzLl9pZCkpfSx0d2VlbjpmdW5jdGlvbiBRQ3QoYyxsKXt2YXIgYT10aGlzLl9pZDtpZihjKz0iIixhcmd1bWVudHMu'@;
put 'bGVuZ3RoPDIpe2Zvcih2YXIgdixkPUMzKHRoaXMubm9kZSgpLGEpLnR3ZWVuLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpaWYoKHY9ZFtoXSkubmFtZT09PWMpcmV0dXJuIHYudmFsdWU7cmV0dXJuIG51bGx9cmV0dXJuIHRoaXMuZWFjaCgobnVsbD09bD9YQ3Q6SkN0KShhLGMsbCkpfSxkZWxh'@;
put 'eTpmdW5jdGlvbiBSU3QoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz9EU3Q6SVN0KShsLGMpKTpDMyh0aGlzLm5vZGUoKSxsKS5kZWxheX0sZHVyYXRpb246ZnVuY3Rpb24gUFN0KGMpe3ZhciBsPXRoaXMu'@;
put 'X2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGM/TFN0Ok9TdCkobCxjKSk6QzModGhpcy5ub2RlKCksbCkuZHVyYXRpb259LGVhc2U6ZnVuY3Rpb24gSFN0KGMpe3ZhciBsPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3Ro'@;
put 'aXMuZWFjaChmdW5jdGlvbiBGU3QoYyxsKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7czQodGhpcyxjKS5lYXNlPWx9fShsLGMpKTpDMyh0aGlzLm5vZGUoKSxsKS5lYXNlfSxlYXNlVmFyeWluZzpmdW5jdGlvbiBWU3QoYyl7aWYo'@;
put 'ImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IEVycm9yO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gTlN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yO3M0KHRo'@;
put 'aXMsYykuZWFzZT1hfX0odGhpcy5faWQsYykpfSxlbmQ6ZnVuY3Rpb24gaE10KCl7dmFyIGMsbCxhPXRoaXMsZD1hLl9pZCxoPWEuc2l6ZSgpO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihmLHYpe3ZhciBNPXt2YWx1ZTp2fSxEPXt2YWx1ZTpmdW5jdGlvbigpezA9PS0taCYmZigpfX07'@;
put 'YS5lYWNoKGZ1bmN0aW9uKCl7dmFyIFo9czQodGhpcyxkKSxuZT1aLm9uO25lIT09YyYmKChsPShjPW5lKS5jb3B5KCkpLl8uY2FuY2VsLnB1c2goTSksbC5fLmludGVycnVwdC5wdXNoKE0pLGwuXy5lbmQucHVzaChEKSksWi5vbj1sfSksMD09PWgmJmYoKX0pfSxbU3ltYm9sLml0ZXJhdG9y'@;
put 'XTpxZ1tTeW1ib2wuaXRlcmF0b3JdfTt2YXIgZ010PXt0aW1lOm51bGwsZGVsYXk6MCxkdXJhdGlvbjoyNTAsZWFzZTpmdW5jdGlvbiBwTXQoYyl7cmV0dXJuKChjKj0yKTw9MT9jKmMqYzooYy09MikqYypjKzIpLzJ9fTtmdW5jdGlvbiBtTXQoYyxsKXtmb3IodmFyIGE7IShhPWMuX190cmFu'@;
put 'c2l0aW9uKXx8IShhPWFbbF0pOylpZighKGM9Yy5wYXJlbnROb2RlKSl0aHJvdyBuZXcgRXJyb3IoYHRyYW5zaXRpb24gJHtsfSBub3QgZm91bmRgKTtyZXR1cm4gYX0kOS5wcm90b3R5cGUuaW50ZXJydXB0PWZ1bmN0aW9uIEdDdChjKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7d04o'@;
put 'dGhpcyxjKX0pfSwkOS5wcm90b3R5cGUudHJhbnNpdGlvbj1mdW5jdGlvbiB2TXQoYyl7dmFyIGwsYTtjIGluc3RhbmNlb2YgdTQ/KGw9Yy5faWQsYz1jLl9uYW1lKToobD1COGUoKSwoYT1nTXQpLnRpbWU9Y3RlKCksYz1udWxsPT1jP251bGw6YysiIik7Zm9yKHZhciBkPXRoaXMuX2dyb3Vw'@;
put 'cyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgRCx2PWRbZl0sTT12Lmxlbmd0aCxaPTA7WjxNOysrWikoRD12W1pdKSYmX04oRCxjLGwsWix2LGF8fG1NdChELGwpKTtyZXR1cm4gbmV3IHU0KGQsdGhpcy5fcGFyZW50cyxjLGwpfTt2YXIgYk10PVtudWxsXTtjb25zdCBTdGU9e2Nh'@;
put 'cHR1cmU6ITAscGFzc2l2ZTohMX07ZnVuY3Rpb24gTXRlKGMpe2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGo4ZShjKXtyZXR1cm4oKGM9TWF0aC5leHAoYykpKzEvYykvMn1jb25zdCB4TXQ9ZnVuY3Rpb24gYyhsLGEsZCl7ZnVuY3Rp'@;
put 'b24gaChmLHYpe3ZhciBydCxwdCxNPWZbMF0sRD1mWzFdLFo9ZlsyXSxiZT12WzJdLEVlPXZbMF0tTSxCZT12WzFdLUQscWU9RWUqRWUrQmUqQmU7aWYocWU8MWUtMTIpcHQ9TWF0aC5sb2coYmUvWikvbCxydD1mdW5jdGlvbihNbil7cmV0dXJuW00rTW4qRWUsRCtNbipCZSxaKk1hdGguZXhw'@;
put 'KGwqTW4qcHQpXX07ZWxzZXt2YXIgZHQ9TWF0aC5zcXJ0KHFlKSxKdD0oYmUqYmUtWipaK2QqcWUpLygyKloqYSpkdCksdm49KGJlKmJlLVoqWi1kKnFlKS8oMipiZSphKmR0KSxDbj1NYXRoLmxvZyhNYXRoLnNxcnQoSnQqSnQrMSktSnQpLHRuPU1hdGgubG9nKE1hdGguc3FydCh2bip2bisx'@;
put 'KS12bik7cHQ9KHRuLUNuKS9sLHJ0PWZ1bmN0aW9uKE1uKXt2YXIgQ3I9TW4qcHQsR3I9ajhlKENuKSxncj1aLyhhKmR0KSooR3IqZnVuY3Rpb24gTU10KGMpe3JldHVybigoYz1NYXRoLmV4cCgyKmMpKS0xKS8oYysxKX0obCpDcitDbiktZnVuY3Rpb24gU010KGMpe3JldHVybigoYz1NYXRo'@;
put 'LmV4cChjKSktMS9jKS8yfShDbikpO3JldHVybltNK2dyKkVlLEQrZ3IqQmUsWipHci9qOGUobCpDcitDbildfX1yZXR1cm4gcnQuZHVyYXRpb249MWUzKnB0KmwvTWF0aC5TUVJUMixydH1yZXR1cm4gaC5yaG89ZnVuY3Rpb24oZil7dmFyIHY9TWF0aC5tYXgoLjAwMSwrZiksTT12KnY7cmV0'@;
put 'dXJuIGModixNLE0qTSl9LGh9KE1hdGguU1FSVDIsMiw0KTtmdW5jdGlvbiBROShjLGwpe2lmKGM9ZnVuY3Rpb24gRU10KGMpe2xldCBsO2Zvcig7bD1jLnNvdXJjZUV2ZW50OyljPWw7cmV0dXJuIGN9KGMpLHZvaWQgMD09PWwmJihsPWMuY3VycmVudFRhcmdldCksbCl7dmFyIGE9bC5vd25l'@;
put 'clNWR0VsZW1lbnR8fGw7aWYoYS5jcmVhdGVTVkdQb2ludCl7dmFyIGQ9YS5jcmVhdGVTVkdQb2ludCgpO3JldHVybiBkLng9Yy5jbGllbnRYLGQueT1jLmNsaWVudFksWyhkPWQubWF0cml4VHJhbnNmb3JtKGwuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSkueCxkLnldfWlmKGwuZ2V0Qm91'@;
put 'bmRpbmdDbGllbnRSZWN0KXt2YXIgaD1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybltjLmNsaWVudFgtaC5sZWZ0LWwuY2xpZW50TGVmdCxjLmNsaWVudFktaC50b3AtbC5jbGllbnRUb3BdfX1yZXR1cm5bYy5wYWdlWCxjLnBhZ2VZXX1jb25zdCBrTj1jPT4oKT0+YztmdW5jdGlv'@;
put 'biBUTXQoYyx7c291cmNlRXZlbnQ6bCx0YXJnZXQ6YSx0cmFuc2Zvcm06ZCxkaXNwYXRjaDpofSl7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModGhpcyx7dHlwZTp7dmFsdWU6YyxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sc291cmNlRXZlbnQ6e3ZhbHVlOmwsZW51bWVyYWJsZToh'@;
put 'MCxjb25maWd1cmFibGU6ITB9LHRhcmdldDp7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdHJhbnNmb3JtOnt2YWx1ZTpkLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxfOnt2YWx1ZTpofX0pfWZ1bmN0aW9uIFhnKGMsbCxhKXt0aGlzLms9Yyx0aGlzLng9'@;
put 'bCx0aGlzLnk9YX1YZy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlhnLHNjYWxlOmZ1bmN0aW9uKGMpe3JldHVybiAxPT09Yz90aGlzOm5ldyBYZyh0aGlzLmsqYyx0aGlzLngsdGhpcy55KX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGMsbCl7cmV0dXJuIDA9PT1jJjA9PT1sP3RoaXM6bmV3IFhnKHRo'@;
put 'aXMuayx0aGlzLngrdGhpcy5rKmMsdGhpcy55K3RoaXMuaypsKX0sYXBwbHk6ZnVuY3Rpb24oYyl7cmV0dXJuW2NbMF0qdGhpcy5rK3RoaXMueCxjWzFdKnRoaXMuayt0aGlzLnldfSxhcHBseVg6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueH0sYXBwbHlZOmZ1bmN0aW9uKGMp'@;
put 'e3JldHVybiBjKnRoaXMuayt0aGlzLnl9LGludmVydDpmdW5jdGlvbihjKXtyZXR1cm5bKGNbMF0tdGhpcy54KS90aGlzLmssKGNbMV0tdGhpcy55KS90aGlzLmtdfSxpbnZlcnRYOmZ1bmN0aW9uKGMpe3JldHVybihjLXRoaXMueCkvdGhpcy5rfSxpbnZlcnRZOmZ1bmN0aW9uKGMpe3JldHVy'@;
put 'bihjLXRoaXMueSkvdGhpcy5rfSxyZXNjYWxlWDpmdW5jdGlvbihjKXtyZXR1cm4gYy5jb3B5KCkuZG9tYWluKGMucmFuZ2UoKS5tYXAodGhpcy5pbnZlcnRYLHRoaXMpLm1hcChjLmludmVydCxjKSl9LHJlc2NhbGVZOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5n'@;
put 'ZSgpLm1hcCh0aGlzLmludmVydFksdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4idHJhbnNsYXRlKCIrdGhpcy54KyIsIit0aGlzLnkrIikgc2NhbGUoIit0aGlzLmsrIikifX07dmFyIEROPW5ldyBYZygxLDAsMCk7ZnVuY3Rpb24gSU4oYyl7Zm9y'@;
put 'KDshYy5fX3pvb207KWlmKCEoYz1jLnBhcmVudE5vZGUpKXJldHVybiBETjtyZXR1cm4gYy5fX3pvb219ZnVuY3Rpb24geHRlKGMpe2Muc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gUkEoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9u'@;
put 'KCl9ZnVuY3Rpb24gQU10KGMpe3JldHVybiEoYy5jdHJsS2V5JiYid2hlZWwiIT09Yy50eXBlfHxjLmJ1dHRvbil9ZnVuY3Rpb24ga010KCl7dmFyIGM9dGhpcztyZXR1cm4gYyBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/KGM9Yy5vd25lclNWR0VsZW1lbnR8fGMpLmhhc0F0dHJpYnV0ZSgidmll'@;
put 'd0JveCIpP1tbKGM9Yy52aWV3Qm94LmJhc2VWYWwpLngsYy55XSxbYy54K2Mud2lkdGgsYy55K2MuaGVpZ2h0XV06W1swLDBdLFtjLndpZHRoLmJhc2VWYWwudmFsdWUsYy5oZWlnaHQuYmFzZVZhbC52YWx1ZV1dOltbMCwwXSxbYy5jbGllbnRXaWR0aCxjLmNsaWVudEhlaWdodF1dfWZ1bmN0'@;
put 'aW9uIHo4ZSgpe3JldHVybiB0aGlzLl9fem9vbXx8RE59ZnVuY3Rpb24gRE10KGMpe3JldHVybi1jLmRlbHRhWSooMT09PWMuZGVsdGFNb2RlPy4wNTpjLmRlbHRhTW9kZT8xOi4wMDIpKihjLmN0cmxLZXk/MTA6MSl9ZnVuY3Rpb24gSU10KCl7cmV0dXJuIG5hdmlnYXRvci5tYXhUb3VjaFBv'@;
put 'aW50c3x8Im9udG91Y2hzdGFydCJpbiB0aGlzfWZ1bmN0aW9uIFJNdChjLGwsYSl7dmFyIGQ9Yy5pbnZlcnRYKGxbMF1bMF0pLWFbMF1bMF0saD1jLmludmVydFgobFsxXVswXSktYVsxXVswXSxmPWMuaW52ZXJ0WShsWzBdWzFdKS1hWzBdWzFdLHY9Yy5pbnZlcnRZKGxbMV1bMV0pLWFbMV1b'@;
put 'MV07cmV0dXJuIGMudHJhbnNsYXRlKGg+ZD8oZCtoKS8yOk1hdGgubWluKDAsZCl8fE1hdGgubWF4KDAsaCksdj5mPyhmK3YpLzI6TWF0aC5taW4oMCxmKXx8TWF0aC5tYXgoMCx2KSl9ZnVuY3Rpb24gVThlKGMpe3ZhciBsPXt9LGE9Yy5ub2RlKCkubm9kZU5hbWU7bC50YWc9YSwiI3RleHQi'@;
put 'PT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsLmF0dHJpYnV0ZXM9e307dmFyIGQ9Yy5ub2RlKCkuYXR0cmlidXRlcztpZihkKWZvcih2YXIgaD0wO2g8ZC5sZW5ndGg7aCsrKXt2YXIgZj1kW2hdO2wuYXR0cmlidXRlc1tmLm5hbWVdPWYu'@;
put 'dmFsdWV9dmFyIG5lLEQ9Yy5ub2RlKCkudHJhbnNmb3JtO2lmKEQmJjAhPUQuYmFzZVZhbC5udW1iZXJPZkl0ZW1zKXt2YXIgWj1ELmJhc2VWYWwuY29uc29saWRhdGUoKS5tYXRyaXg7bC50cmFuc2xhdGlvbj17eDpaLmUseTpaLmZ9LGwuc2NhbGU9Wi5hfWlmKCJlbGxpcHNlIj09YSYmKGwu'@;
put 'Y2VudGVyPXt4OmwuYXR0cmlidXRlcy5jeCx5OmwuYXR0cmlidXRlcy5jeX0pLCJwb2x5Z29uIj09YSl7dmFyIGNlPShuZT1jLmF0dHIoInBvaW50cyIpLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbihKdCl7cmV0dXJuIEp0LnNwbGl0KCIsIilbMF19KSxiZT1uZS5tYXAoZnVuY3Rpb24oSnQp'@;
put 'e3JldHVybiBKdC5zcGxpdCgiLCIpWzFdfSksRWU9TWF0aC5taW4uYXBwbHkobnVsbCxjZSksQmU9TWF0aC5tYXguYXBwbHkobnVsbCxjZSkscWU9TWF0aC5taW4uYXBwbHkobnVsbCxiZSkscnQ9TWF0aC5tYXguYXBwbHkobnVsbCxiZSk7bC5iYm94PXt4OkVlLHk6cWUsd2lkdGg6QmUtRWUs'@;
put 'aGVpZ2h0OnJ0LXFlfSxsLmNlbnRlcj17eDooRWUrQmUpLzIseToocWUrcnQpLzJ9fSJwYXRoIj09YSYmKChuZT1jLmF0dHIoImQiKS5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCksY2U9bmUubWFwKGZ1bmN0aW9uKEduKXtyZXR1cm4rR24uc3BsaXQoIiwiKVswXX0pLGJlPW5lLm1hcChmdW5j'@;
put 'dGlvbihHbil7cmV0dXJuK0duLnNwbGl0KCIsIilbMV19KSxFZT1NYXRoLm1pbi5hcHBseShudWxsLGNlKSxCZT1NYXRoLm1heC5hcHBseShudWxsLGNlKSxxZT1NYXRoLm1pbi5hcHBseShudWxsLGJlKSxydD1NYXRoLm1heC5hcHBseShudWxsLGJlKSxsLmJib3g9e3g6RWUseTpxZSx3aWR0'@;
put 'aDpCZS1FZSxoZWlnaHQ6cnQtcWV9LGwuY2VudGVyPXt4OihFZStCZSkvMix5OihxZStydCkvMn0sbC50b3RhbExlbmd0aD1jLm5vZGUoKS5nZXRUb3RhbExlbmd0aCgpKTtyZXR1cm4idGV4dCI9PWEmJihsLmNlbnRlcj17eDpjLmF0dHIoIngiKSx5OmMuYXR0cigieSIpfSksIiN0ZXh0Ij09'@;
put 'YT9sLnRleHQ9Yy50ZXh0KCk6IiNjb21tZW50Ij09YSYmKGwuY29tbWVudD1jLnRleHQoKSksbH1mdW5jdGlvbiBldihjKXt2YXIgbD1VOGUoYyk7cmV0dXJuIGwuY2hpbGRyZW49W10sc3RlKGMubm9kZSgpLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24oKXt2YXIgZD1ldih3cyh0aGlzKSk7'@;
put 'ZC5wYXJlbnQ9bCxsLmNoaWxkcmVuLnB1c2goZCl9KSxsfWZ1bmN0aW9uIEV0ZShjKXtyZXR1cm4iI3RleHQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik6IiNjb21tZW50Ij09Yy50YWc/ZG9jdW1lbnQuY3JlYXRlQ29tbWVudChjLmNvbW1lbnQpOmRvY3VtZW50LmNyZWF0'@;
put 'ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGMudGFnKX1mdW5jdGlvbiBUdGUoYyl7dmFyIGw9RXRlKGMpLGE9d3MobCksZD1jLmF0dHJpYnV0ZXM7Zm9yKHZhciBoIG9mIE9iamVjdC5rZXlzKGQpKWEuYXR0cihoLGRbaF0pO3JldHVybiBsfWZ1bmN0aW9uIFo4ZShj'@;
put 'LGwpe3ZhciBhPXdzKGMubm9kZSgpLnBhcmVudE5vZGUpLGQ9VHRlKGwpLGg9YS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gZH0sZnVuY3Rpb24oKXtyZXR1cm4gYy5ub2RlKCl9KTtyZXR1cm4gYy5yZW1vdmUoKSxofWZ1bmN0aW9uIEF0ZShjLGwpeyFmdW5jdGlvbiBPTXQoYyxsKXtjLmRh'@;
put 'dHVtKGwpLGMuZGF0YShbbF0sZnVuY3Rpb24oYSl7cmV0dXJuIGEua2V5fSl9KGMsbCksc3RlKGMubm9kZSgpLmNoaWxkTm9kZXMpLmVhY2goZnVuY3Rpb24oZCxoKXtBdGUod3ModGhpcyksbC5jaGlsZHJlbltoXSl9KX1mdW5jdGlvbiBMQShjLGw9MCl7dmFyIGE9d3ModGhpcyksaD1jLmF0'@;
put 'dHJpYnV0ZXMsZj1hLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGYpZm9yKHZhciB2PTA7djxmLmxlbmd0aDt2Kyspe3ZhciBNPWZbdl0sRD1NLm5hbWU7aWYoInhtbG5zIiE9RC5zcGxpdCgiOiIpWzBdJiZNLm5hbWVzcGFjZVVSSSl7dmFyIFo9TS5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtEPVpb'@;
put 'Wi5sZW5ndGgtMV0rIjoiK0R9RCBpbiBofHwoaFtEXT1udWxsKX1mb3IodmFyIGNlIG9mIE9iamVjdC5rZXlzKGgpKWEuYXR0cihjZSxoW2NlXSk7Yy50ZXh0JiZhLnRleHQoYy50ZXh0KSxmdW5jdGlvbiBQTXQoYyxsKXt2YXIgYT1jLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBjLm5v'@;
put 'ZGUoKS5jaGlsZE5vZGVzfSksZD0oYT1hLmRhdGEoZnVuY3Rpb24odil7cmV0dXJuIHYuY2hpbGRyZW59LGZ1bmN0aW9uKHYpe3JldHVybiB2LnRhZysiLSIrbH0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbih2KXtyZXR1cm4gRXRlKHYpfSksaD1hLmV4aXQoKTtoPWgucmVtb3ZlKCksYT1k'@;
put 'Lm1lcmdlKGEpO3ZhciBmPXt9O2EuZWFjaChmdW5jdGlvbih2KXt2YXIgTT12LnRhZztudWxsPT1mW01dJiYoZltNXT0wKTt2YXIgRD1mW01dKys7TEEuY2FsbCh0aGlzLHYsRCl9KX0oYSxsKX1mdW5jdGlvbiBXOGUoYyxsKXt2YXIgdixhPWw/bC5sZW5ndGg6MCxkPWM/TWF0aC5taW4oYSxj'@;
put 'Lmxlbmd0aCk6MCxoPW5ldyBBcnJheShkKSxmPW5ldyBBcnJheShhKTtmb3Iodj0wO3Y8ZDsrK3YpaFt2XT1STihjW3ZdLGxbdl0pO2Zvcig7djxhOysrdilmW3ZdPWxbdl07cmV0dXJuIGZ1bmN0aW9uKE0pe2Zvcih2PTA7djxkOysrdilmW3ZdPWhbdl0oTSk7cmV0dXJuIGZ9fWZ1bmN0aW9u'@;
put 'IEZNdChjLGwpe3ZhciBhPW5ldyBEYXRlO3JldHVybiBjPStjLGw9K2wsZnVuY3Rpb24oZCl7cmV0dXJuIGEuc2V0VGltZShjKigxLWQpK2wqZCksYX19ZnVuY3Rpb24gSE10KGMsbCl7dmFyIGgsYT17fSxkPXt9O2ZvcihoIGluKG51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMpJiYoYz17'@;
put 'fSksKG51bGw9PT1sfHwib2JqZWN0IiE9dHlwZW9mIGwpJiYobD17fSksbCloIGluIGM/YVtoXT1STihjW2hdLGxbaF0pOmRbaF09bFtoXTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGggaW4gYSlkW2hdPWFbaF0oZik7cmV0dXJuIGR9fWZ1bmN0aW9uIE5NdChjLGwpe2x8fChsPVtdKTt2YXIg'@;
put 'aCxhPWM/TWF0aC5taW4obC5sZW5ndGgsYy5sZW5ndGgpOjAsZD1sLnNsaWNlKCk7cmV0dXJuIGZ1bmN0aW9uKGYpe2ZvcihoPTA7aDxhOysraClkW2hdPWNbaF0qKDEtZikrbFtoXSpmO3JldHVybiBkfX1mdW5jdGlvbiBSTihjLGwpe3ZhciBkLGE9dHlwZW9mIGw7cmV0dXJuIG51bGw9PWx8'@;
put 'fCJib29sZWFuIj09PWE/eXRlKGwpOigibnVtYmVyIj09PWE/bDQ6InN0cmluZyI9PT1hPyhkPXE5KGwpKT8obD1kLEFOKTpIOGU6bCBpbnN0YW5jZW9mIHE5P0FOOmwgaW5zdGFuY2VvZiBEYXRlP0ZNdDpmdW5jdGlvbiBWTXQoYyl7cmV0dXJuIEFycmF5QnVmZmVyLmlzVmlldyhjKSYmIShj'@;
put 'IGluc3RhbmNlb2YgRGF0YVZpZXcpfShsKT9OTXQ6QXJyYXkuaXNBcnJheShsKT9XOGU6ImZ1bmN0aW9uIiE9dHlwZW9mIGwudmFsdWVPZiYmImZ1bmN0aW9uIiE9dHlwZW9mIGwudG9TdHJpbmd8fGlzTmFOKGwpP0hNdDpsNCkoYyxsKX1mdW5jdGlvbiBZOGUoKXt2YXIgYz10aGlzLGQ9d3Mo'@;
put 'dGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJzdmciKSk7aWYoMD09ZC5zaXplKCkpcmV0dXJuIHRoaXM7dGhpcy5fem9vbVNlbGVjdGlvbj1kO3ZhciBoPWZ1bmN0aW9uIExNdCgpe3ZhciBuZSxjZSxiZSxjPUFNdCxsPWtNdCxhPVJNdCxkPURNdCxoPUlNdCxmPVswLDEv'@;
put 'MF0sdj1bWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSxNPTI1MCxEPXhNdCxaPWx0ZSgic3RhcnQiLCJ6b29tIiwiZW5kIiksRWU9NTAwLEJlPTE1MCxxZT0wLHJ0PTEwO2Z1bmN0aW9uIHB0KE9uKXtPbi5wcm9wZXJ0eSgiX196b29tIix6OGUpLm9uKCJ3aGVlbC56b29tIixDcix7cGFzc2l2ZToh'@;
put 'MX0pLm9uKCJtb3VzZWRvd24uem9vbSIsR3IpLm9uKCJkYmxjbGljay56b29tIixncikuZmlsdGVyKGgpLm9uKCJ0b3VjaHN0YXJ0Lnpvb20iLEduKS5vbigidG91Y2htb3ZlLnpvb20iLG9pKS5vbigidG91Y2hlbmQuem9vbSB0b3VjaGNhbmNlbC56b29tIixfaSkuc3R5bGUoIi13ZWJraXQt'@;
put 'dGFwLWhpZ2hsaWdodC1jb2xvciIsInJnYmEoMCwwLDAsMCkiKX1mdW5jdGlvbiBkdChPbix6cil7cmV0dXJuKHpyPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSx6cikpKT09PU9uLms/T246bmV3IFhnKHpyLE9uLngsT24ueSl9ZnVuY3Rpb24gSnQoT24senIsSm4pe3ZhciBEcj16clsw'@;
put 'XS1KblswXSpPbi5rLCRyPXpyWzFdLUpuWzFdKk9uLms7cmV0dXJuIERyPT09T24ueCYmJHI9PT1Pbi55P09uOm5ldyBYZyhPbi5rLERyLCRyKX1mdW5jdGlvbiB2bihPbil7cmV0dXJuWygrT25bMF1bMF0rICtPblsxXVswXSkvMiwoK09uWzBdWzFdKyArT25bMV1bMV0pLzJdfWZ1bmN0aW9u'@;
put 'IENuKE9uLHpyLEpuLERyKXtPbi5vbigic3RhcnQuem9vbSIsZnVuY3Rpb24oKXt0bih0aGlzLGFyZ3VtZW50cykuZXZlbnQoRHIpLnN0YXJ0KCl9KS5vbigiaW50ZXJydXB0Lnpvb20gZW5kLnpvb20iLGZ1bmN0aW9uKCl7dG4odGhpcyxhcmd1bWVudHMpLmV2ZW50KERyKS5lbmQoKX0pLnR3'@;
put 'ZWVuKCJ6b29tIixmdW5jdGlvbigpe3ZhciAkcj10aGlzLHdpPWFyZ3VtZW50cyx0bz10bigkcix3aSkuZXZlbnQoRHIpLHBvPWwuYXBwbHkoJHIsd2kpLHZ0PW51bGw9PUpuP3ZuKHBvKToiZnVuY3Rpb24iPT10eXBlb2YgSm4/Sm4uYXBwbHkoJHIsd2kpOkpuLE50PU1hdGgubWF4KHBvWzFd'@;
put 'WzBdLXBvWzBdWzBdLHBvWzFdWzFdLXBvWzBdWzFdKSxIdD0kci5fX3pvb20sSG49ImZ1bmN0aW9uIj09dHlwZW9mIHpyP3pyLmFwcGx5KCRyLHdpKTp6cix0cj1EKEh0LmludmVydCh2dCkuY29uY2F0KE50L0h0LmspLEhuLmludmVydCh2dCkuY29uY2F0KE50L0huLmspKTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24ob3Ipe2lmKDE9PT1vcilvcj1IbjtlbHNle3ZhciBIcj10cihvciksS3I9TnQvSHJbMl07b3I9bmV3IFhnKEtyLHZ0WzBdLUhyWzBdKktyLHZ0WzFdLUhyWzFdKktyKX10by56b29tKG51bGwsb3IpfX0pfWZ1bmN0aW9uIHRuKE9uLHpyLEpuKXtyZXR1cm4hSm4mJk9uLl9fem9vbWlu'@;
put 'Z3x8bmV3IE1uKE9uLHpyKX1mdW5jdGlvbiBNbihPbix6cil7dGhpcy50aGF0PU9uLHRoaXMuYXJncz16cix0aGlzLmFjdGl2ZT0wLHRoaXMuc291cmNlRXZlbnQ9bnVsbCx0aGlzLmV4dGVudD1sLmFwcGx5KE9uLHpyKSx0aGlzLnRhcHM9MH1mdW5jdGlvbiBDcihPbiwuLi56cil7aWYoYy5h'@;
put 'cHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBKbj10bih0aGlzLHpyKS5ldmVudChPbiksRHI9dGhpcy5fX3pvb20sJHI9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLERyLmsqTWF0aC5wb3coMixkLmFwcGx5KHRoaXMsYXJndW1lbnRzKSkpKSx3aT1ROShPbik7aWYoSm4ud2hlZWwpKEpu'@;
put 'Lm1vdXNlWzBdWzBdIT09d2lbMF18fEpuLm1vdXNlWzBdWzFdIT09d2lbMV0pJiYoSm4ubW91c2VbMV09RHIuaW52ZXJ0KEpuLm1vdXNlWzBdPXdpKSksY2xlYXJUaW1lb3V0KEpuLndoZWVsKTtlbHNle2lmKERyLms9PT0kcilyZXR1cm47Sm4ubW91c2U9W3dpLERyLmludmVydCh3aSldLHdO'@;
put 'KHRoaXMpLEpuLnN0YXJ0KCl9UkEoT24pLEpuLndoZWVsPXNldFRpbWVvdXQoZnVuY3Rpb24gdG8oKXtKbi53aGVlbD1udWxsLEpuLmVuZCgpfSxCZSksSm4uem9vbSgibW91c2UiLGEoSnQoZHQoRHIsJHIpLEpuLm1vdXNlWzBdLEpuLm1vdXNlWzFdKSxKbi5leHRlbnQsdikpfX1mdW5jdGlv'@;
put 'biBHcihPbiwuLi56cil7aWYoIWJlJiZjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIEpuPU9uLmN1cnJlbnRUYXJnZXQsRHI9dG4odGhpcyx6ciwhMCkuZXZlbnQoT24pLCRyPXdzKE9uLnZpZXcpLm9uKCJtb3VzZW1vdmUuem9vbSIsZnVuY3Rpb24gdnQoSHQpe2lmKFJBKEh0KSwhRHIu'@;
put 'bW92ZWQpe3ZhciBIbj1IdC5jbGllbnRYLXRvLHRyPUh0LmNsaWVudFktcG87RHIubW92ZWQ9SG4qSG4rdHIqdHI+cWV9RHIuZXZlbnQoSHQpLnpvb20oIm1vdXNlIixhKEp0KERyLnRoYXQuX196b29tLERyLm1vdXNlWzBdPVE5KEh0LEpuKSxEci5tb3VzZVsxXSksRHIuZXh0ZW50LHYpKX0s'@;
put 'ITApLm9uKCJtb3VzZXVwLnpvb20iLGZ1bmN0aW9uIE50KEh0KXskci5vbigibW91c2Vtb3ZlLnpvb20gbW91c2V1cC56b29tIixudWxsKSxmdW5jdGlvbiB3TXQoYyxsKXt2YXIgYT1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxkPXdzKGMpLm9uKCJkcmFnc3RhcnQuZHJhZyIsbnVsbCk7'@;
put 'bCYmKGQub24oImNsaWNrLmRyYWciLE10ZSxTdGUpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtkLm9uKCJjbGljay5kcmFnIixudWxsKX0sMCkpLCJvbnNlbGVjdHN0YXJ0ImluIGE/ZC5vbigic2VsZWN0c3RhcnQuZHJhZyIsbnVsbCk6KGEuc3R5bGUuTW96VXNlclNlbGVjdD1hLl9fbm9zZWxl'@;
put 'Y3QsZGVsZXRlIGEuX19ub3NlbGVjdCl9KEh0LnZpZXcsRHIubW92ZWQpLFJBKEh0KSxEci5ldmVudChIdCkuZW5kKCl9LCEwKSx3aT1ROShPbixKbiksdG89T24uY2xpZW50WCxwbz1Pbi5jbGllbnRZOyhmdW5jdGlvbiBfTXQoYyl7dmFyIGw9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQs'@;
put 'YT13cyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLE10ZSxTdGUpOyJvbnNlbGVjdHN0YXJ0ImluIGw/YS5vbigic2VsZWN0c3RhcnQuZHJhZyIsTXRlLFN0ZSk6KGwuX19ub3NlbGVjdD1sLnN0eWxlLk1velVzZXJTZWxlY3QsbC5zdHlsZS5Nb3pVc2VyU2VsZWN0PSJub25lIil9KShPbi52aWV3'@;
put 'KSx4dGUoT24pLERyLm1vdXNlPVt3aSx0aGlzLl9fem9vbS5pbnZlcnQod2kpXSx3Tih0aGlzKSxEci5zdGFydCgpfX1mdW5jdGlvbiBncihPbiwuLi56cil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBKbj10aGlzLl9fem9vbSxEcj1ROShPbi5jaGFuZ2VkVG91Y2hlcz9Pbi5j'@;
put 'aGFuZ2VkVG91Y2hlc1swXTpPbix0aGlzKSwkcj1Kbi5pbnZlcnQoRHIpLHRvPWEoSnQoZHQoSm4sSm4uayooT24uc2hpZnRLZXk/LjU6MikpLERyLCRyKSxsLmFwcGx5KHRoaXMsenIpLHYpO1JBKE9uKSxNPjA/d3ModGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKE0pLmNhbGwoQ24sdG8s'@;
put 'RHIsT24pOndzKHRoaXMpLmNhbGwocHQudHJhbnNmb3JtLHRvLERyLE9uKX19ZnVuY3Rpb24gR24oT24sLi4uenIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgd2ksdG8scG8sdnQsSm49T24udG91Y2hlcyxEcj1Kbi5sZW5ndGgsJHI9dG4odGhpcyx6cixPbi5jaGFuZ2VkVG91'@;
put 'Y2hlcy5sZW5ndGg9PT1EcikuZXZlbnQoT24pO2Zvcih4dGUoT24pLHRvPTA7dG88RHI7Kyt0byl2dD1bdnQ9UTkocG89Sm5bdG9dLHRoaXMpLHRoaXMuX196b29tLmludmVydCh2dCkscG8uaWRlbnRpZmllcl0sJHIudG91Y2gwPyEkci50b3VjaDEmJiRyLnRvdWNoMFsyXSE9PXZ0WzJdJiYo'@;
put 'JHIudG91Y2gxPXZ0LCRyLnRhcHM9MCk6KCRyLnRvdWNoMD12dCx3aT0hMCwkci50YXBzPTErISFuZSk7bmUmJihuZT1jbGVhclRpbWVvdXQobmUpKSx3aSYmKCRyLnRhcHM8MiYmKGNlPXZ0WzBdLG5lPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtuZT1udWxsfSxFZSkpLHdOKHRoaXMpLCRyLnN0'@;
put 'YXJ0KCkpfX1mdW5jdGlvbiBvaShPbiwuLi56cil7aWYodGhpcy5fX3pvb21pbmcpe3ZhciB3aSx0byxwbyx2dCxKbj10bih0aGlzLHpyKS5ldmVudChPbiksRHI9T24uY2hhbmdlZFRvdWNoZXMsJHI9RHIubGVuZ3RoO2ZvcihSQShPbiksd2k9MDt3aTwkcjsrK3dpKXBvPVE5KHRvPURyW3dp'@;
put 'XSx0aGlzKSxKbi50b3VjaDAmJkpuLnRvdWNoMFsyXT09PXRvLmlkZW50aWZpZXI/Sm4udG91Y2gwWzBdPXBvOkpuLnRvdWNoMSYmSm4udG91Y2gxWzJdPT09dG8uaWRlbnRpZmllciYmKEpuLnRvdWNoMVswXT1wbyk7aWYodG89Sm4udGhhdC5fX3pvb20sSm4udG91Y2gxKXt2YXIgTnQ9Sm4u'@;
put 'dG91Y2gwWzBdLEh0PUpuLnRvdWNoMFsxXSxIbj1Kbi50b3VjaDFbMF0sdHI9Sm4udG91Y2gxWzFdLG9yPShvcj1IblswXS1OdFswXSkqb3IrKG9yPUhuWzFdLU50WzFdKSpvcixIcj0oSHI9dHJbMF0tSHRbMF0pKkhyKyhIcj10clsxXS1IdFsxXSkqSHI7dG89ZHQodG8sTWF0aC5zcXJ0KG9y'@;
put 'L0hyKSkscG89WyhOdFswXStIblswXSkvMiwoTnRbMV0rSG5bMV0pLzJdLHZ0PVsoSHRbMF0rdHJbMF0pLzIsKEh0WzFdK3RyWzFdKS8yXX1lbHNle2lmKCFKbi50b3VjaDApcmV0dXJuO3BvPUpuLnRvdWNoMFswXSx2dD1Kbi50b3VjaDBbMV19Sm4uem9vbSgidG91Y2giLGEoSnQodG8scG8s'@;
put 'dnQpLEpuLmV4dGVudCx2KSl9fWZ1bmN0aW9uIF9pKE9uLC4uLnpyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHdpLHRvLEpuPXRuKHRoaXMsenIpLmV2ZW50KE9uKSxEcj1Pbi5jaGFuZ2VkVG91Y2hlcywkcj1Eci5sZW5ndGg7Zm9yKHh0ZShPbiksYmUmJmNsZWFyVGltZW91dChiZSksYmU9'@;
put 'c2V0VGltZW91dChmdW5jdGlvbigpe2JlPW51bGx9LEVlKSx3aT0wO3dpPCRyOysrd2kpdG89RHJbd2ldLEpuLnRvdWNoMCYmSm4udG91Y2gwWzJdPT09dG8uaWRlbnRpZmllcj9kZWxldGUgSm4udG91Y2gwOkpuLnRvdWNoMSYmSm4udG91Y2gxWzJdPT09dG8uaWRlbnRpZmllciYmZGVsZXRl'@;
put 'IEpuLnRvdWNoMTtpZihKbi50b3VjaDEmJiFKbi50b3VjaDAmJihKbi50b3VjaDA9Sm4udG91Y2gxLGRlbGV0ZSBKbi50b3VjaDEpLEpuLnRvdWNoMClKbi50b3VjaDBbMV09dGhpcy5fX3pvb20uaW52ZXJ0KEpuLnRvdWNoMFswXSk7ZWxzZSBpZihKbi5lbmQoKSwyPT09Sm4udGFwcyYmKHRv'@;
put 'PVE5KHRvLHRoaXMpLE1hdGguaHlwb3QoY2VbMF0tdG9bMF0sY2VbMV0tdG9bMV0pPHJ0KSl7dmFyIHBvPXdzKHRoaXMpLm9uKCJkYmxjbGljay56b29tIik7cG8mJnBvLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fXJldHVybiBwdC50cmFuc2Zvcm09ZnVuY3Rpb24oT24senIsSm4sRHIpe3Zh'@;
put 'ciAkcj1Pbi5zZWxlY3Rpb24/T24uc2VsZWN0aW9uKCk6T247JHIucHJvcGVydHkoIl9fem9vbSIsejhlKSxPbiE9PSRyP0NuKE9uLHpyLEpuLERyKTokci5pbnRlcnJ1cHQoKS5lYWNoKGZ1bmN0aW9uKCl7dG4odGhpcyxhcmd1bWVudHMpLmV2ZW50KERyKS5zdGFydCgpLnpvb20obnVsbCwi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgenI/enIuYXBwbHkodGhpcyxhcmd1bWVudHMpOnpyKS5lbmQoKX0pfSxwdC5zY2FsZUJ5PWZ1bmN0aW9uKE9uLHpyLEpuLERyKXtwdC5zY2FsZVRvKE9uLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX196b29tLmsqKCJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5h'@;
put 'cHBseSh0aGlzLGFyZ3VtZW50cyk6enIpfSxKbixEcil9LHB0LnNjYWxlVG89ZnVuY3Rpb24oT24senIsSm4sRHIpe3B0LnRyYW5zZm9ybShPbixmdW5jdGlvbigpe3ZhciAkcj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3aT10aGlzLl9fem9vbSx0bz1udWxsPT1Kbj92bigkcik6ImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIEpuP0puLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpKbixwbz13aS5pbnZlcnQodG8pLHZ0PSJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6enI7cmV0dXJuIGEoSnQoZHQod2ksdnQpLHRvLHBvKSwkcix2KX0sSm4sRHIpfSxwdC50cmFu'@;
put 'c2xhdGVCeT1mdW5jdGlvbihPbix6cixKbixEcil7cHQudHJhbnNmb3JtKE9uLGZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcy5fX3pvb20udHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiB6cj96ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6enIsImZ1bmN0aW9uIj09dHlwZW9mIEpuP0puLmFw'@;
put 'cGx5KHRoaXMsYXJndW1lbnRzKTpKbiksbC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdil9LG51bGwsRHIpfSxwdC50cmFuc2xhdGVUbz1mdW5jdGlvbihPbix6cixKbixEciwkcil7cHQudHJhbnNmb3JtKE9uLGZ1bmN0aW9uKCl7dmFyIHdpPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRvPXRo'@;
put 'aXMuX196b29tLHBvPW51bGw9PURyP3ZuKHdpKToiZnVuY3Rpb24iPT10eXBlb2YgRHI/RHIuYXBwbHkodGhpcyxhcmd1bWVudHMpOkRyO3JldHVybiBhKEROLnRyYW5zbGF0ZShwb1swXSxwb1sxXSkuc2NhbGUodG8uaykudHJhbnNsYXRlKCJmdW5jdGlvbiI9PXR5cGVvZiB6cj8tenIuYXBw'@;
put 'bHkodGhpcyxhcmd1bWVudHMpOi16ciwiZnVuY3Rpb24iPT10eXBlb2YgSm4/LUpuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotSm4pLHdpLHYpfSxEciwkcil9LE1uLnByb3RvdHlwZT17ZXZlbnQ6ZnVuY3Rpb24oT24pe3JldHVybiBPbiYmKHRoaXMuc291cmNlRXZlbnQ9T24pLHRoaXN9LHN0'@;
put 'YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIDE9PSsrdGhpcy5hY3RpdmUmJih0aGlzLnRoYXQuX196b29taW5nPXRoaXMsdGhpcy5lbWl0KCJzdGFydCIpKSx0aGlzfSx6b29tOmZ1bmN0aW9uKE9uLHpyKXtyZXR1cm4gdGhpcy5tb3VzZSYmIm1vdXNlIiE9PU9uJiYodGhpcy5tb3VzZVsxXT16ci5p'@;
put 'bnZlcnQodGhpcy5tb3VzZVswXSkpLHRoaXMudG91Y2gwJiYidG91Y2giIT09T24mJih0aGlzLnRvdWNoMFsxXT16ci5pbnZlcnQodGhpcy50b3VjaDBbMF0pKSx0aGlzLnRvdWNoMSYmInRvdWNoIiE9PU9uJiYodGhpcy50b3VjaDFbMV09enIuaW52ZXJ0KHRoaXMudG91Y2gxWzBdKSksdGhp'@;
put 'cy50aGF0Ll9fem9vbT16cix0aGlzLmVtaXQoInpvb20iKSx0aGlzfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09LS10aGlzLmFjdGl2ZSYmKGRlbGV0ZSB0aGlzLnRoYXQuX196b29taW5nLHRoaXMuZW1pdCgiZW5kIikpLHRoaXN9LGVtaXQ6ZnVuY3Rpb24oT24pe3ZhciB6cj13cyh0aGlz'@;
put 'LnRoYXQpLmRhdHVtKCk7Wi5jYWxsKE9uLHRoaXMudGhhdCxuZXcgVE10KE9uLHtzb3VyY2VFdmVudDp0aGlzLnNvdXJjZUV2ZW50LHRhcmdldDpwdCx0eXBlOk9uLHRyYW5zZm9ybTp0aGlzLnRoYXQuX196b29tLGRpc3BhdGNoOlp9KSx6cil9fSxwdC53aGVlbERlbHRhPWZ1bmN0aW9uKE9u'@;
put 'KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246a04oK09uKSxwdCk6ZH0scHQuZmlsdGVyPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2YgT24/T246a04oISFPbikscHQpOmN9LHB0LnRv'@;
put 'dWNoYWJsZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIE9uP09uOmtOKCEhT24pLHB0KTpofSxwdC5leHRlbnQ9ZnVuY3Rpb24oT24pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBPbj9Pbjpr'@;
put 'TihbWytPblswXVswXSwrT25bMF1bMV1dLFsrT25bMV1bMF0sK09uWzFdWzFdXV0pLHB0KTpsfSxwdC5zY2FsZUV4dGVudD1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGZbMF09K09uWzBdLGZbMV09K09uWzFdLHB0KTpbZlswXSxmWzFdXX0scHQudHJhbnNsYXRlRXh0'@;
put 'ZW50PWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odlswXVswXT0rT25bMF1bMF0sdlsxXVswXT0rT25bMV1bMF0sdlswXVsxXT0rT25bMF1bMV0sdlsxXVsxXT0rT25bMV1bMV0scHQpOltbdlswXVswXSx2WzBdWzFdXSxbdlsxXVswXSx2WzFdWzFdXV19LHB0LmNvbnN0'@;
put 'cmFpbj1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9T24scHQpOmF9LHB0LmR1cmF0aW9uPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oTT0rT24scHQpOk19LHB0LmludGVycG9sYXRlPWZ1bmN0aW9uKE9uKXtyZXR1cm4gYXJndW1lbnRzLmxl'@;
put 'bmd0aD8oRD1PbixwdCk6RH0scHQub249ZnVuY3Rpb24oKXt2YXIgT249Wi5vbi5hcHBseShaLGFyZ3VtZW50cyk7cmV0dXJuIE9uPT09Wj9wdDpPbn0scHQuY2xpY2tEaXN0YW5jZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHFlPShPbj0rT24pKk9uLHB0KTpNYXRo'@;
put 'LnNxcnQocWUpfSxwdC50YXBEaXN0YW5jZT1mdW5jdGlvbihPbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHJ0PStPbixwdCk6cnR9LHB0fSgpLnNjYWxlRXh0ZW50KHRoaXMuX29wdGlvbnMuem9vbVNjYWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJh'@;
put 'bnNsYXRlRXh0ZW50KS5pbnRlcnBvbGF0ZShSTikub24oInpvb20iLGZ1bmN0aW9uIGwodil7d3MoZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zvcm0iLHYudHJhbnNmb3JtKSxjLl9kaXNwYXRjaC5jYWxsKCJ6b29tIixjKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1o'@;
put 'O3ZhciBmPXdzKGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSk7cmV0dXJuIGQuY2FsbChoKSx0aGlzLl9hY3RpdmV8fER0ZS5jYWxsKHRoaXMsZiksdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09SU4oZC5ub2RlKCkpLHRoaXN9ZnVuY3Rpb24ga3RlKGMpe3ZhciBsPXRoaXMuX3RyYW5zbGF0'@;
put 'aW9uLGE9dGhpcy5fc2NhbGUsZD1jLmRhdHVtKCkudHJhbnNsYXRpb24saD1jLmRhdHVtKCkuc2NhbGUsZj1JTih0aGlzLl96b29tU2VsZWN0aW9uLm5vZGUoKSk7cmV0dXJuIGwmJihmPShmPWYuc2NhbGUoMS9hKSkudHJhbnNsYXRlKC1sLngsLWwueSkpLChmPWYudHJhbnNsYXRlKGQueCxk'@;
put 'LnkpKS5zY2FsZShoKX1mdW5jdGlvbiBEdGUoYyl7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9uLGt0ZS5jYWxsKHRoaXMsYykpLHRoaXMuX3RyYW5zbGF0aW9uPWMuZGF0dW0oKS50cmFuc2xhdGlvbix0aGlzLl9zY2FsZT1jLmRhdHVtKCkuc2NhbGUs'@;
put 'dGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm09RE4udHJhbnNsYXRlKGMuZGF0dW0oKS50cmFuc2xhdGlvbi54LGMuZGF0dW0oKS50cmFuc2xhdGlvbi55KS5zY2FsZShjLmRhdHVtKCkuc2NhbGUpfWZ1bmN0aW9uIFlNdChjLGwpe3JldHVybiBmdW5jdGlvbigpe2NvbnN0IGE9Yy5tYXAoZnVuY3Rp'@;
put 'b24oZCl7cmV0dXJuIFJOKFtkWzBdWzBdLGRbMF1bMV1dLFtkWzFdWzBdLGRbMV1bMV1dKX0pO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4gZDwxPyJNIithLm1hcChmdW5jdGlvbihoKXtyZXR1cm4gaChkKX0pLmpvaW4oIkwiKTpsfX19ZnVuY3Rpb24gRzhlKGMpe3JldHVybiJlZGdlIj09'@;
put 'Yy5hdHRyaWJ1dGVzLmNsYXNzfHwiYSI9PWMudGFnJiYiZyI9PWMucGFyZW50LnRhZyYmImVkZ2UiPT1jLnBhcmVudC5wYXJlbnQuYXR0cmlidXRlcy5jbGFzc31mdW5jdGlvbiAkOGUoYyl7cmV0dXJuIGMucGFyZW50JiZHOGUoYy5wYXJlbnQpfWZ1bmN0aW9uIEs4ZShjKXt2YXIgbD10aGlz'@;
put 'Ll90cmFuc2l0aW9uLGE9dGhpcy5fb3B0aW9ucy5mYWRlJiZudWxsIT1sLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcyxmPXRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucyx2PXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVy'@;
put 'aW5nRWRnZXMmJm51bGwhPWwsTT10aGlzLl9hdHRyaWJ1dGVyLEQ9dGhpczt2YXIgY2U9dGhpcy5fc2VsZWN0aW9uO2lmKG51bGwhPWwpe3ZhciBiZT10aGlzLl9qb2JzO2lmKEQuX2FjdGl2ZSlyZXR1cm4gYmUucHVzaChudWxsKSx0aGlzO2NlLnRyYW5zaXRpb24obCkudHJhbnNpdGlvbigp'@;
put 'LmR1cmF0aW9uKDApLm9uKCJlbmQiLGZ1bmN0aW9uKCl7RC5fYWN0aXZlPSExLDAhPWJlLmxlbmd0aCYmKGJlLnNoaWZ0KCksRC5yZW5kZXIoKSl9KSx0aGlzLl9hY3RpdmU9ITB9bnVsbCE9bCYmY2UudHJhbnNpdGlvbihsKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2Fs'@;
put 'bCgidHJhbnNpdGlvblN0YXJ0IixEKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7RC5fZGlzcGF0Y2guY2FsbCgidHJhbnNpdGlvbkVuZCIsRCl9KS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oInN0YXJ0IixmdW5jdGlvbigpe0QuX2Rpc3BhdGNoLmNhbGwoInJlc3RvcmVFbmQiLEQpLEQu'@;
put 'X2Rpc3BhdGNoLmNhbGwoImVuZCIsRCksYyYmYy5jYWxsKEQpfSk7dmFyIEVlPXRoaXMuX2RhdGEsQmU9Y2Uuc2VsZWN0QWxsKCJzdmciKS5kYXRhKFtFZV0sZnVuY3Rpb24ocWUpe3JldHVybiBxZS5rZXl9KTtyZXR1cm4gQmU9QmUuZW50ZXIoKS5hcHBlbmQoInN2ZyIpLm1lcmdlKEJlKSxm'@;
put 'dW5jdGlvbiBuZShxZSl7dmFyIHJ0PXdzKHRoaXMpO2lmKCJzdmciPT1xZS50YWcpe3ZhciBwdD1ELl9vcHRpb25zO2lmKG51bGwhPXB0LndpZHRofHxudWxsIT1wdC5oZWlnaHQpe3ZhciBkdD1wdC53aWR0aCxKdD1wdC5oZWlnaHQ7bnVsbD09ZHQ/ZHQ9NCpxZS5hdHRyaWJ1dGVzLndpZHRo'@;
put 'LnJlcGxhY2UoInB0IiwiIikvMzoocnQuYXR0cigid2lkdGgiLGR0KSxxZS5hdHRyaWJ1dGVzLndpZHRoPWR0KSxudWxsPT1KdD9KdD00KnFlLmF0dHJpYnV0ZXMuaGVpZ2h0LnJlcGxhY2UoInB0IiwiIikvMzoocnQuYXR0cigiaGVpZ2h0IixKdCkscWUuYXR0cmlidXRlcy5oZWlnaHQ9SnQp'@;
put 'LHB0LmZpdHx8KHJ0LmF0dHIoInZpZXdCb3giLGAwIDAgJHszKmR0LzQvcHQuc2NhbGV9ICR7MypKdC80L3B0LnNjYWxlfWApLHFlLmF0dHJpYnV0ZXMudmlld0JveD1gMCAwICR7MypkdC80L3B0LnNjYWxlfSAkezMqSnQvNC9wdC5zY2FsZX1gKX0xIT1wdC5zY2FsZSYmKHB0LmZpdHx8bnVs'@;
put 'bD09cHQud2lkdGgmJm51bGw9PXB0LmhlaWdodCkmJihkdD1xZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVsyXSxKdD1xZS5hdHRyaWJ1dGVzLnZpZXdCb3guc3BsaXQoIiAiKVszXSxydC5hdHRyKCJ2aWV3Qm94IixgMCAwICR7ZHQvcHQuc2NhbGV9ICR7SnQvcHQuc2NhbGV9YCks'@;
put 'cWUuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHtkdC9wdC5zY2FsZX0gJHtKdC9wdC5zY2FsZX1gKX1NJiZydC5lYWNoKE0pO3ZhciB2bj1xZS50YWcsQ249cWUuYXR0cmlidXRlcyx0bj1ydC5ub2RlKCkuYXR0cmlidXRlcztpZih0bilmb3IodmFyIE1uPTA7TW48dG4ubGVuZ3RoO01uKysp'@;
put 'e3ZhciBDcj10bltNbl0sR3I9Q3IubmFtZTtpZigieG1sbnMiIT1Hci5zcGxpdCgiOiIpWzBdJiZDci5uYW1lc3BhY2VVUkkpe3ZhciBncj1Dci5uYW1lc3BhY2VVUkkuc3BsaXQoIi8iKTtHcj1ncltnci5sZW5ndGgtMV0rIjoiK0dyfUdyIGluIENufHwoQ25bR3JdPW51bGwpfXZhciBvaT0h'@;
put 'MSxfaT0hMTtpZihoJiZsKXtpZigoInBvbHlnb24iPT10aGlzLm5vZGVOYW1lfHwiZWxsaXBzZSI9PXRoaXMubm9kZU5hbWUpJiZxZS5hbHRlcm5hdGl2ZU9sZCYmKF9pPSEwKSwoInBvbHlnb24iPT12bnx8ImVsbGlwc2UiPT12bikmJnFlLmFsdGVybmF0aXZlTmV3JiYob2k9ITApLCJwb2x5'@;
put 'Z29uIj09dGhpcy5ub2RlTmFtZSYmInBvbHlnb24iPT12biYmcWUuYWx0ZXJuYXRpdmVPbGQpe3ZhciBPbj1VOGUocnQpO2lmKCFmKXt2YXIgSm49T24uYXR0cmlidXRlcy5wb2ludHMuc3BsaXQoIiAiKS5sZW5ndGg7KERyPXFlLmF0dHJpYnV0ZXMucG9pbnRzKS5zcGxpdCgiICIpLmxlbmd0'@;
put 'aD09Sm4mJihvaT0hMSxfaT0hMSl9fWlmKF9pKXt2YXIgdG89WjhlKHJ0LHFlLmFsdGVybmF0aXZlT2xkKTt0by5kYXRhKFtxZV0sZnVuY3Rpb24oKXtyZXR1cm4gcWUua2V5fSkscnQ9dG99b2kmJih2bj0icGF0aCIsQ249cWUuYWx0ZXJuYXRpdmVOZXcuYXR0cmlidXRlcyl9dmFyIHZ0PXJ0'@;
put 'O2lmKGwmJih2dD12dC50cmFuc2l0aW9uKGwpLGEmJnZ0LmZpbHRlcihmdW5jdGlvbihabil7cmV0dXJuIiMiPT1abi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDEpLHZ0LmZpbHRlcihmdW5jdGlvbihabil7cmV0dXJuIiMiPT1abi50YWdbMF0/bnVsbDp0aGlzfSkub24o'@;
put 'ImVuZCIsZnVuY3Rpb24oWm4pe3dzKHRoaXMpLmF0dHIoInN0eWxlIixabiYmWm4uYXR0cmlidXRlcyYmWm4uYXR0cmlidXRlcy5zdHlsZXx8bnVsbCl9KSksdiYmInBhdGgiPT12biYmcWUub2Zmc2V0KXt2YXIgSHQ9cWUudG90YWxMZW5ndGg7cnQuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIs'@;
put 'SHQrIiAiK0h0KS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsSHQpLmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK3FlLm9mZnNldC54KyIsIitxZS5vZmZzZXQueSsiKSIpLENuWyJzdHJva2UtZGFzaG9mZnNldCJdPTAsQ24udHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwwKSIsdnQuYXR0'@;
put 'cigic3Ryb2tlLWRhc2hvZmZzZXQiLENuWyJzdHJva2UtZGFzaG9mZnNldCJdKS5hdHRyKCJ0cmFuc2Zvcm0iLENuLnRyYW5zZm9ybSkub24oInN0YXJ0IixmdW5jdGlvbigpe3dzKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7d3ModGhpcykuYXR0'@;
put 'cigic3Ryb2tlLWRhc2hvZmZzZXQiLG51bGwpLmF0dHIoInN0cm9rZS1kYXNoYXJyYXkiLG51bGwpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX1pZih2JiYicG9seWdvbiI9PXZuJiYkOGUocWUpJiZxZS5vZmZzZXQmJiJwYXRoIj09cWUucGFyZW50LmNoaWxkcmVuWzNdLnRhZyl7dmFyIHRy'@;
put 'PXdzKHJ0Lm5vZGUoKS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3IoInBhdGgiKSksb3I9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgoMCksSHI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgpLEtyPXRyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHFlLnRvdGFs'@;
put 'TGVuZ3RoLTEpLGFuPTE4MCpNYXRoLmF0YW4yKEhyLnktS3IueSxIci54LUtyLngpL01hdGguUEkseW49b3IueC1Ici54K3FlLm9mZnNldC54LHBuPW9yLnktSHIueStxZS5vZmZzZXQueTtydC5hdHRyKCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUoIit5bisiLCIrcG4rIikiKSx2dC5hdHRyVHdl'@;
put 'ZW4oInRyYW5zZm9ybSIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oWm4pe3ZhciBzcj10ci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChxZS50b3RhbExlbmd0aCpabiksTnI9dHIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgqWm4rMSksTXI9MTgwKk1hdGguYXRh'@;
put 'bjIoTnIueS1zci55LE5yLngtc3IueCkvTWF0aC5QSS1hbjtyZXR1cm4idHJhbnNsYXRlKCIrKHluPXNyLngtSHIueCtxZS5vZmZzZXQueCooMS1abikpKyIsIisocG49c3IueS1Ici55K3FlLm9mZnNldC55KigxLVpuKSkrIikgcm90YXRlKCIrTXIrIiAiK0hyLngrIiAiK0hyLnkrIikifX0p'@;
put 'Lm9uKCJzdGFydCIsZnVuY3Rpb24oKXt3cyh0aGlzKS5zdHlsZSgib3BhY2l0eSIsbnVsbCl9KS5vbigiZW5kIixmdW5jdGlvbigpe3dzKHRoaXMpLmF0dHIoInRyYW5zZm9ybSIsbnVsbCl9KX12YXIgcHI9ZCYmbCYmInBhdGgiPT12biYmbnVsbCE9cnQuYXR0cigiZCIpO2Zvcih2YXIgJG4g'@;
put 'b2YgT2JqZWN0LmtleXMoQ24pKXt2YXIgZHI9Q25bJG5dO2lmKHByJiYiZCI9PSRuKXt2YXIgRHI7KERyPShxZS5hbHRlcm5hdGl2ZU9sZHx8cWUpLnBvaW50cykmJnZ0LmF0dHJUd2VlbigiZCIsWU10KERyLGRyKSl9ZWxzZXtpZigidHJhbnNmb3JtIj09JG4mJnFlLnRyYW5zbGF0aW9uKWlm'@;
put 'KGwpe3ZhciBVcj12dC5vbigiZW5kIik7dnQub24oInN0YXJ0IixmdW5jdGlvbigpe0QuX3pvb21CZWhhdmlvciYmdnQudHdlZW4oImF0dHIudHJhbnNmb3JtIixmdW5jdGlvbigpe3ZhciBabj10aGlzO3JldHVybiBmdW5jdGlvbihzcil7Wm4uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLEM4'@;
put 'ZShJTihELl96b29tU2VsZWN0aW9uLm5vZGUoKSkudG9TdHJpbmcoKSxrdGUuY2FsbChELHJ0KS50b1N0cmluZygpKShzcikpfX0pfSkub24oImVuZCIsZnVuY3Rpb24oKXtVci5jYWxsKHRoaXMpLEQuX3pvb21CZWhhdmlvciYmRHRlLmNhbGwoRCxydCl9KX1lbHNlIEQuX3pvb21CZWhhdmlv'@;
put 'ciYmKER0ZS5jYWxsKEQscnQpLGRyPWt0ZS5jYWxsKEQscnQpLnRvU3RyaW5nKCkpO3Z0LmF0dHIoJG4sZHIpfX1vaSYmdnQub24oImVuZCIsZnVuY3Rpb24oWm4sc3IsTnIpe1o4ZSh0bz13cyh0aGlzKSxabikuZGF0YShbWm5dLGZ1bmN0aW9uKCl7cmV0dXJuIFpuLmtleX0pfSkscWUudGV4'@;
put 'dCYmdnQudGV4dChxZS50ZXh0KSxmdW5jdGlvbiBaKHFlKXt2YXIgcnQ9cWUuc2VsZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIHFlLm5vZGUoKS5jaGlsZE5vZGVzfSkscHQ9KHJ0PXJ0LmRhdGEoZnVuY3Rpb24odm4pe3JldHVybiB2bi5jaGlsZHJlbn0sZnVuY3Rpb24odm4pe3JldHVybiB2'@;
put 'bi5rZXl9KSkuZW50ZXIoKS5hcHBlbmQoZnVuY3Rpb24odm4pe3ZhciBDbj1FdGUodm4pO3JldHVybiIjdGV4dCI9PXZuLnRhZyYmYSYmKENuLm5vZGVWYWx1ZT12bi50ZXh0KSxDbn0pOyhhfHx2JiZHOGUocWUuZGF0dW0oKSkpJiZwdC5maWx0ZXIoZnVuY3Rpb24odm4pe3JldHVybiIjIj09'@;
put 'dm4udGFnWzBdP251bGw6dGhpc30pLmVhY2goZnVuY3Rpb24odm4pe3ZhciBDbj13cyh0aGlzKTtmb3IodmFyIHRuIG9mIE9iamVjdC5rZXlzKHZuLmF0dHJpYnV0ZXMpKUNuLmF0dHIodG4sdm4uYXR0cmlidXRlc1t0bl0pfSkuZmlsdGVyKGZ1bmN0aW9uKHZuKXtyZXR1cm4ic3ZnIj09dm4u'@;
put 'dGFnfHwiZyI9PXZuLnRhZz9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCk7dmFyIEp0PXJ0LmV4aXQoKTtNJiZKdC5lYWNoKE0pLGwmJihKdD1KdC50cmFuc2l0aW9uKGwpLGEmJkp0LmZpbHRlcihmdW5jdGlvbih2bil7cmV0dXJuIiMiPT12bi50YWdbMF0/bnVsbDp0aGlzfSkuc3R5'@;
put 'bGUoIm9wYWNpdHkiLDApKSxKdD1KdC5yZW1vdmUoKSwocnQ9cHQubWVyZ2UocnQpLm9yZGVyKCkpLmVhY2gobmUpfShydCl9LmNhbGwoQmUubm9kZSgpLEVlKSx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96b29tQmVoYXZpb3ImJlk4ZS5jYWxsKHRoaXMpLEQuX2Rpc3BhdGNoLmNhbGwo'@;
put 'InJlbmRlckVuZCIsRCksbnVsbD09bCYmKHRoaXMuX2Rpc3BhdGNoLmNhbGwoImVuZCIsdGhpcyksYyYmYy5jYWxsKHRoaXMpKSx0aGlzfUlOLnByb3RvdHlwZT1YZy5wcm90b3R5cGU7dmFyIEhBLE90ZSxRTXQ9QXJyYXlCdWZmZXIsRHU9VWludDhBcnJheSxMTj1VaW50MTZBcnJheSxleHQ9'@;
put 'SW50MTZBcnJheSxPTj1JbnQzMkFycmF5LEl0ZT1mdW5jdGlvbihjLGwsYSl7aWYoRHUucHJvdG90eXBlLnNsaWNlKXJldHVybiBEdS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLGwsYSk7KG51bGw9PWx8fGw8MCkmJihsPTApLChudWxsPT1hfHxhPmMubGVuZ3RoKSYmKGE9Yy5sZW5ndGgpO3Zh'@;
put 'ciBkPW5ldyBEdShhLWwpO3JldHVybiBkLnNldChjLnN1YmFycmF5KGwsYSkpLGR9LE9BPWZ1bmN0aW9uKGMsbCxhLGQpe2lmKER1LnByb3RvdHlwZS5maWxsKXJldHVybiBEdS5wcm90b3R5cGUuZmlsbC5jYWxsKGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8'@;
put 'fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOysrYSljW2FdPWw7cmV0dXJuIGN9LHR4dD1mdW5jdGlvbihjLGwsYSxkKXtpZihEdS5wcm90b3R5cGUuY29weVdpdGhpbilyZXR1cm4gRHUucHJvdG90eXBlLmNvcHlXaXRoaW4uY2FsbChjLGwsYSxkKTtmb3IoKG51bGw9PWF8fGE8MCkm'@;
put 'JihhPTApLChudWxsPT1kfHxkPmMubGVuZ3RoKSYmKGQ9Yy5sZW5ndGgpO2E8ZDspY1tsKytdPWNbYSsrXX0sbnh0PVsiaW52YWxpZCB6c3RkIGRhdGEiLCJ3aW5kb3cgc2l6ZSB0b28gbGFyZ2UgKD4yMDQ2TUIpIiwiaW52YWxpZCBibG9jayB0eXBlIiwiRlNFIGFjY3VyYWN5IHRvbyBoaWdo'@;
put 'IiwibWF0Y2ggZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwidW5leHBlY3RlZCBFT0YiXSxRdT1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9bmV3IEVycm9yKGx8fG54dFtjXSk7aWYoZC5jb2RlPWMsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGQsUXUpLCFh'@;
put 'KXRocm93IGQ7cmV0dXJuIGR9LHE4ZT1mdW5jdGlvbihjLGwsYSl7Zm9yKHZhciBkPTAsaD0wO2Q8YTsrK2QpaHw9Y1tsKytdPDwoZDw8Myk7cmV0dXJuIGh9LGl4dD1mdW5jdGlvbihjLGwpe3ZhciBhPWNbMF18Y1sxXTw8OHxjWzJdPDwxNjtpZigzMTI2NTY4PT1hJiYyNTM9PWNbM10pe3Zh'@;
put 'ciBkPWNbNF0saD1kPj41JjEsZj1kPj4yJjEsdj0zJmQsTT1kPj42OzgmZCYmUXUoMCk7dmFyIEQ9Ni1oLFo9Mz09dj80OnYsbmU9cThlKGMsRCxaKSxjZT1NPzE8PE06aCxiZT1xOGUoYyxEKz1aLGNlKSsoMT09TSYmMjU2KSxFZT1iZTtpZighaCl7dmFyIEJlPTE8PDEwKyhjWzVdPj4zKTtF'@;
put 'ZT1CZSsoQmU+PjMpKig3JmNbNV0pfUVlPjIxNDUzODY0OTYmJlF1KDEpO3ZhciBxZT1uZXcgRHUoKDE9PWw/YmV8fEVlOmw/MDpFZSkrMTIpO3JldHVybiBxZVswXT0xLHFlWzRdPTQscWVbOF09OCx7YjpEK2NlLHk6MCxsOjAsZDpuZSx3OmwmJjEhPWw/bDpxZS5zdWJhcnJheSgxMiksZTpF'@;
put 'ZSxvOm5ldyBPTihxZS5idWZmZXIsMCwzKSx1OmJlLGM6ZixtOk1hdGgubWluKDEzMTA3MixFZSl9fWlmKDI1NDgxODkzPT0oYT4+NHxjWzNdPDwyMCkpcmV0dXJuIGZ1bmN0aW9uKGMsbCl7cmV0dXJuKGNbNF18Y1s1XTw8OHxjWzZdPDwxNnxjWzddPDwyNCk+Pj4wfShjKSs4O1F1KDApfSx0'@;
put 'dj1mdW5jdGlvbihjKXtmb3IodmFyIGw9MDsxPDxsPD1jOysrbCk7cmV0dXJuIGwtMX0sUEE9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPTQrKGw8PDMpLGg9NSsoMTUmY1tsXSk7aD5hJiZRdSgzKTtmb3IodmFyIGY9MTw8aCx2PWYsTT0tMSxEPS0xLFo9LTEsbmU9ZixjZT1uZXcgUU10KDUxMiso'@;
put 'Zjw8MikpLGJlPW5ldyBleHQoY2UsMCwyNTYpLEVlPW5ldyBMTihjZSwwLDI1NiksQmU9bmV3IExOKGNlLDUxMixmKSxxZT01MTIrKGY8PDEpLHJ0PW5ldyBEdShjZSxxZSxmKSxwdD1uZXcgRHUoY2UscWUrZik7TTwyNTUmJnY+MDspe3ZhciBkdD10dih2KzEpLEp0PWQ+PjMsdm49KDE8PGR0'@;
put 'KzEpLTEsQ249KGNbSnRdfGNbSnQrMV08PDh8Y1tKdCsyXTw8MTYpPj4oNyZkKSZ2bix0bj0oMTw8ZHQpLTEsTW49dm4tdi0xLENyPUNuJnRuO2lmKENyPE1uPyhkKz1kdCxDbj1Dcik6KGQrPWR0KzEsQ24+dG4mJihDbi09TW4pKSxiZVsrK01dPS0tQ24sLTE9PUNuPyh2Kz1DbixydFstLW5l'@;
put 'XT1NKTp2LT1DbiwhQ24pZG97dmFyIEdyPWQ+PjM7RD0oY1tHcl18Y1tHcisxXTw8OCk+Pig3JmQpJjMsZCs9MixNKz1EfXdoaWxlKDM9PUQpfShNPjI1NXx8dikmJlF1KDApO2Zvcih2YXIgZ3I9MCxHbj0oZj4+MSkrKGY+PjMpKzMsb2k9Zi0xLF9pPTA7X2k8PU07KytfaSl7dmFyIE9uPWJl'@;
put 'W19pXTtpZihPbjwxKUVlW19pXT0tT247ZWxzZSBmb3IoWj0wO1o8T247KytaKXtydFtncl09X2k7ZG97Z3I9Z3IrR24mb2l9d2hpbGUoZ3I+PW5lKX19Zm9yKGdyJiZRdSgwKSxaPTA7WjxmOysrWil7dmFyIHpyPUVlW3J0W1pdXSsrLEpuPXB0W1pdPWgtdHYoenIpO0JlW1pdPSh6cjw8Sm4p'@;
put 'LWZ9cmV0dXJuW2QrNz4+Myx7YjpoLHM6cnQsbjpwdCx0OkJlfV19LGF4dD1QQShuZXcgRHUoWzgxLDE2LDk5LDE0MCw0OSwxOTgsMjQsOTksMTIsMzMsMTk2LDI0LDk5LDEwMiwxMDIsMTM0LDcwLDE0Niw0XSksMCw2KVsxXSxzeHQ9UEEobmV3IER1KFszMywyMCwxOTYsMjQsOTksMTQwLDMz'@;
put 'LDEzMiwxNiw2Niw4LDMzLDEzMiwxNiw2Niw4LDMzLDY4LDY4LDY4LDY4LDY4LDY4LDY4LDY4LDM2LDldKSwwLDYpWzFdLGx4dD1QQShuZXcgRHUoWzMyLDEzMiwxNiw2NiwxMDIsNzAsNjgsNjgsNjgsNjgsMzYsNzMsMl0pLDAsNSlbMV0sWDhlPWZ1bmN0aW9uKGMsbCl7Zm9yKHZhciBhPWMu'@;
put 'bGVuZ3RoLGQ9bmV3IE9OKGEpLGg9MDtoPGE7KytoKWRbaF09bCxsKz0xPDxjW2hdO3JldHVybiBkfSxSdGU9bmV3IER1KG5ldyBPTihbMCwwLDAsMCwxNjg0MzAwOSw1MDUyODc3MCwxMzQ2NzgwMjAsMjAyMDUwMDU3LDI2OTQyMjA5M10pLmJ1ZmZlciwwLDM2KSxjeHQ9WDhlKFJ0ZSwwKSxM'@;
put 'dGU9bmV3IER1KG5ldyBPTihbMCwwLDAsMCwwLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDExNzc2OTIyMCwxODUyMDcwNDgsMjUyNTc5MDg0LDE2XSkuYnVmZmVyLDAsNTMpLHV4dD1YOGUoTHRlLDMpLEZBPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD1jLmxlbmd0aCxoPWwubGVuZ3RoLGY9Y1tk'@;
put 'LTFdLHY9KDE8PGEuYiktMSxNPS1hLmI7Znx8UXUoMCk7Zm9yKHZhciBEPTAsWj1hLmIsbmU9KGQ8PDMpLTgrdHYoZiktWixjZT0tMTtuZT5NJiZjZTxoOyl7dmFyIGJlPW5lPj4zO2xbKytjZV09YS5zW0Q9KEQ8PFp8KGNbYmVdfGNbYmUrMV08PDh8Y1tiZSsyXTw8MTYpPj4oNyZuZSkpJnZd'@;
put 'LG5lLT1aPWEubltEXX0obmUhPU18fGNlKzEhPWgpJiZRdSgwKX0sZHh0PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD02LGY9bC5sZW5ndGgrMz4+Mix2PWY8PDEsTT1mK3Y7RkEoYy5zdWJhcnJheShkLGQrPWNbMF18Y1sxXTw8OCksbC5zdWJhcnJheSgwLGYpLGEpLEZBKGMuc3ViYXJyYXkoZCxk'@;
put 'Kz1jWzJdfGNbM108PDgpLGwuc3ViYXJyYXkoZix2KSxhKSxGQShjLnN1YmFycmF5KGQsZCs9Y1s0XXxjWzVdPDw4KSxsLnN1YmFycmF5KHYsTSksYSksRkEoYy5zdWJhcnJheShkKSxsLnN1YmFycmF5KE0pLGEpfSxoeHQ9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkLGg9bC5iLGY9Y1toXSx2PWY+'@;
put 'PjEmMztsLmw9MSZmO3ZhciBNPWY+PjN8Y1toKzFdPDw1fGNbaCsyXTw8MTMsRD0oaCs9MykrTTtpZigxPT12KXJldHVybiBoPj1jLmxlbmd0aD92b2lkIDA6KGwuYj1oKzEsYT8oT0EoYSxjW2hdLGwueSxsLnkrPU0pLGEpOk9BKG5ldyBEdShNKSxjW2hdKSk7aWYoIShEPmMubGVuZ3RoKSl7'@;
put 'aWYoMD09dilyZXR1cm4gbC5iPUQsYT8oYS5zZXQoYy5zdWJhcnJheShoLEQpLGwueSksbC55Kz1NLGEpOkl0ZShjLGgsRCk7aWYoMj09dil7dmFyIFo9Y1toXSxuZT0zJlosY2U9Wj4+MiYzLGJlPVo+PjQsRWU9MCxCZT0wO25lPDI/MSZjZT9iZXw9Y1srK2hdPDw0fCgyJmNlJiZjWysraF08'@;
put 'PDEyKTpiZT1aPj4zOihCZT1jZSxjZTwyPyhiZXw9KDYzJmNbKytoXSk8PDQsRWU9Y1toXT4+NnxjWysraF08PDIpOjI9PWNlPyhiZXw9Y1srK2hdPDw0fCgzJmNbKytoXSk8PDEyLEVlPWNbaF0+PjJ8Y1srK2hdPDw2KTooYmV8PWNbKytoXTw8NHwoNjMmY1srK2hdKTw8MTIsRWU9Y1toXT4+'@;
put 'NnxjWysraF08PDJ8Y1srK2hdPDwxMCkpLCsraDt2YXIgcWU9YT9hLnN1YmFycmF5KGwueSxsLnkrbC5tKTpuZXcgRHUobC5tKSxydD1xZS5sZW5ndGgtYmU7aWYoMD09bmUpcWUuc2V0KGMuc3ViYXJyYXkoaCxoKz1iZSkscnQpO2Vsc2UgaWYoMT09bmUpT0EocWUsY1toKytdLHJ0KTtlbHNl'@;
put 'e3ZhciBwdD1sLmg7aWYoMj09bmUpe3ZhciBkdD1mdW5jdGlvbihjLGwpe3ZhciBhPTAsZD0tMSxoPW5ldyBEdSgyOTIpLGY9Y1tsXSx2PWguc3ViYXJyYXkoMCwyNTYpLE09aC5zdWJhcnJheSgyNTYsMjY4KSxEPW5ldyBMTihoLmJ1ZmZlciwyNjgpO2lmKGY8MTI4KXt2YXIgWj1QQShjLGwr'@;
put 'MSw2KSxjZT1aWzFdLGJlPVpbMF08PDMsRWU9Y1tsKz1mXTtFZXx8UXUoMCk7Zm9yKHZhciBCZT0wLHFlPTAscnQ9Y2UuYixwdD1ydCxkdD0oKytsPDwzKS04K3R2KEVlKTshKChkdC09cnQpPGJlKTspe3ZhciBKdD1kdD4+MztpZih2WysrZF09Y2Uuc1tCZSs9KGNbSnRdfGNbSnQrMV08PDgp'@;
put 'Pj4oNyZkdCkmKDE8PHJ0KS0xXSwoZHQtPXB0KTxiZSlicmVhazt2WysrZF09Y2Uuc1txZSs9KGNbSnQ9ZHQ+PjNdfGNbSnQrMV08PDgpPj4oNyZkdCkmKDE8PHB0KS0xXSxydD1jZS5uW0JlXSxCZT1jZS50W0JlXSxwdD1jZS5uW3FlXSxxZT1jZS50W3FlXX0rK2Q+MjU1JiZRdSgwKX1lbHNl'@;
put 'e2ZvcihkPWYtMTI3O2E8ZDthKz0yKXt2YXIgdm49Y1srK2xdO3ZbYV09dm4+PjQsdlthKzFdPTE1JnZufSsrbH12YXIgQ249MDtmb3IoYT0wO2E8ZDsrK2EpKHRuPXZbYV0pPjExJiZRdSgwKSxDbis9dG4mJjE8PHRuLTE7dmFyIE1uPXR2KENuKSsxLENyPTE8PE1uLEdyPUNyLUNuO2ZvcihH'@;
put 'ciZHci0xJiZRdSgwKSx2W2QrK109dHYoR3IpKzEsYT0wO2E8ZDsrK2Epe3ZhciB0bjsrK01bdlthXT0odG49dlthXSkmJk1uKzEtdG5dfXZhciBncj1uZXcgRHUoQ3I8PDEpLEduPWdyLnN1YmFycmF5KDAsQ3IpLG9pPWdyLnN1YmFycmF5KENyKTtmb3IoRFtNbl09MCxhPU1uO2E+MDstLWEp'@;
put 'e3ZhciBfaT1EW2FdO09BKG9pLGEsX2ksRFthLTFdPV9pK01bYV0qKDE8PE1uLWEpKX1mb3IoRFswXSE9Q3ImJlF1KDApLGE9MDthPGQ7KythKXt2YXIgT249dlthXTtpZihPbil7dmFyIHpyPURbT25dO09BKEduLGEsenIsRFtPbl09enIrKDE8PE1uLU9uKSl9fXJldHVybltsLHtuOm9pLGI6'@;
put 'TW4sczpHbn1dfShjLGgpO0VlKz1oLShoPWR0WzBdKSxsLmg9cHQ9ZHRbMV19ZWxzZSBwdHx8UXUoMCk7KEJlP2R4dDpGQSkoYy5zdWJhcnJheShoLGgrPUVlKSxxZS5zdWJhcnJheShydCkscHQpfXZhciBKdD1jW2grK107aWYoSnQpezI1NT09SnQ/SnQ9MzI1MTIrKGNbaCsrXXxjW2grK108'@;
put 'PDgpOkp0PjEyNyYmKEp0PUp0LTEyODw8OHxjW2grK10pO3ZhciB2bj1jW2grK107MyZ2biYmUXUoMCk7Zm9yKHZhciBDbj1bc3h0LGx4dCxheHRdLHRuPTI7dG4+LTE7LS10bil7dmFyIE1uPXZuPj4yKyh0bjw8MSkmMztpZigxPT1Nbil7dmFyIENyPW5ldyBEdShbMCwwLGNbaCsrXV0pO0Nu'@;
put 'W3RuXT17czpDci5zdWJhcnJheSgyLDMpLG46Q3Iuc3ViYXJyYXkoMCwxKSx0Om5ldyBMTihDci5idWZmZXIsMCwxKSxiOjB9fWVsc2UgMj09TW4/KGg9KGQ9UEEoYyxoLDktKDEmdG4pKSlbMF0sQ25bdG5dPWRbMV0pOjM9PU1uJiYobC50fHxRdSgwKSxDblt0bl09bC50W3RuXSl9dmFyIEdy'@;
put 'PWwudD1Dbixncj1HclswXSxHbj1HclsxXSxvaT1HclsyXSxfaT1jW0QtMV07X2l8fFF1KDApO3ZhciBPbj0oRDw8MyktOCt0dihfaSktb2kuYix6cj1Pbj4+MyxKbj0wLERyPShjW3pyXXxjW3pyKzFdPDw4KT4+KDcmT24pJigxPDxvaS5iKS0xLCRyPShjW3pyPShPbi09R24uYik+PjNdfGNb'@;
put 'enIrMV08PDgpPj4oNyZPbikmKDE8PEduLmIpLTEsd2k9KGNbenI9KE9uLT1nci5iKT4+M118Y1t6cisxXTw8OCk+Pig3Jk9uKSYoMTw8Z3IuYiktMTtmb3IoKytKdDstLUp0Oyl7dmFyIHRvPW9pLnNbRHJdLHBvPW9pLm5bRHJdLHZ0PWdyLnNbd2ldLE50PWdyLm5bd2ldLEh0PUduLnNbJHJd'@;
put 'LEhuPUduLm5bJHJdLHRyPTE8PEh0LG9yPXRyKygoY1t6cj0oT24tPUh0KT4+M118Y1t6cisxXTw8OHxjW3pyKzJdPDwxNnxjW3pyKzNdPDwyNCk+Pj4oNyZPbikmdHItMSk7enI9KE9uLT1MdGVbdnRdKT4+Mzt2YXIgSHI9dXh0W3Z0XSsoKGNbenJdfGNbenIrMV08PDh8Y1t6cisyXTw8MTYp'@;
put 'Pj4oNyZPbikmKDE8PEx0ZVt2dF0pLTEpO3pyPShPbi09UnRlW3RvXSk+PjM7dmFyIEtyPWN4dFt0b10rKChjW3pyXXxjW3pyKzFdPDw4fGNbenIrMl08PDE2KT4+KDcmT24pJigxPDxSdGVbdG9dKS0xKTtpZih6cj0oT24tPXBvKT4+MyxEcj1vaS50W0RyXSsoKGNbenJdfGNbenIrMV08PDgp'@;
put 'Pj4oNyZPbikmKDE8PHBvKS0xKSx6cj0oT24tPU50KT4+Myx3aT1nci50W3dpXSsoKGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PE50KS0xKSx6cj0oT24tPUhuKT4+Mywkcj1Hbi50WyRyXSsoKGNbenJdfGNbenIrMV08PDgpPj4oNyZPbikmKDE8PEhuKS0xKSxvcj4zKWwub1syXT1s'@;
put 'Lm9bMV0sbC5vWzFdPWwub1swXSxsLm9bMF09b3ItPTM7ZWxzZXt2YXIgYW49b3ItKDAhPUtyKTthbj8ob3I9Mz09YW4/bC5vWzBdLTE6bC5vW2FuXSxhbj4xJiYobC5vWzJdPWwub1sxXSksbC5vWzFdPWwub1swXSxsLm9bMF09b3IpOm9yPWwub1swXX1mb3IodG49MDt0bjxLcjsrK3RuKXFl'@;
put 'W0puK3RuXT1xZVtydCt0bl07cnQrPUtyO3ZhciB5bj0oSm4rPUtyKS1vcjtpZih5bjwwKXt2YXIgcG49LXluLHByPWwuZSt5bjtmb3IocG4+SHImJihwbj1IciksdG49MDt0bjxwbjsrK3RuKXFlW0puK3RuXT1sLndbcHIrdG5dO0puKz1wbixIci09cG4seW49MH1mb3IodG49MDt0bjxIcjsr'@;
put 'K3RuKXFlW0puK3RuXT1xZVt5bit0bl07Sm4rPUhyfWlmKEpuIT1ydClmb3IoO3J0PHFlLmxlbmd0aDspcWVbSm4rK109cWVbcnQrK107ZWxzZSBKbj1xZS5sZW5ndGg7YT9sLnkrPUpuOnFlPUl0ZShxZSwwLEpuKX1lbHNlIGlmKGEpe2lmKGwueSs9YmUscnQpZm9yKHRuPTA7dG48YmU7Kyt0'@;
put 'bilxZVt0bl09cWVbcnQrdG5dfWVsc2UgcnQmJihxZT1JdGUocWUscnQpKTtyZXR1cm4gbC5iPUQscWV9UXUoMil9fSxteHQ9KHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LGZ1bmN0aW9uKGw9e30pe3ZhciBoLGYsQmUsZD1sLHY9bmV3IFByb21pc2UoKFplLGx0KT0+e2g9WmUsZj1s'@;
put 'dH0pLEQ9T2JqZWN0LmFzc2lnbih7fSxkKSxxZT1jb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLHJ0PWNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtPYmplY3QuYXNzaWduKGQsRCksRD1udWxsO3ZhciBkdCx0bixNbixDcixncixHbixfaSxwdD1kLndhc21CaW5hcnksSnQ9ITE7ZnVuY3Rp'@;
put 'b24gQ24oWmUsbHQpe1plfHxLcihsdCl9ZnVuY3Rpb24gT24oKXt2YXIgWmU9ZHQuYnVmZmVyO2QuSEVBUDg9dG49bmV3IEludDhBcnJheShaZSksZC5IRUFQMTY9Q3I9bmV3IEludDE2QXJyYXkoWmUpLGQuSEVBUFU4PU1uPW5ldyBVaW50OEFycmF5KFplKSxkLkhFQVBVMTY9bmV3IFVpbnQx'@;
put 'NkFycmF5KFplKSxkLkhFQVAzMj1ncj1uZXcgSW50MzJBcnJheShaZSksZC5IRUFQVTMyPUduPW5ldyBVaW50MzJBcnJheShaZSksZC5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoWmUpLGQuSEVBUEY2ND1faT1uZXcgRmxvYXQ2NEFycmF5KFplKX12YXIgenI9W10sSm49W10sRHI9W10sTnQ9'@;
put 'MCxIdD1udWxsLEhuPW51bGw7ZnVuY3Rpb24gb3IoWmUpe050Kyt9ZnVuY3Rpb24gSHIoWmUpe2lmKDA9PS0tTnQmJihudWxsIT09SHQmJihjbGVhckludGVydmFsKEh0KSxIdD1udWxsKSxIbikpe3ZhciBsdD1IbjtIbj1udWxsLGx0KCl9fWZ1bmN0aW9uIEtyKFplKXtydChaZT0iQWJvcnRl'@;
put 'ZCgiK1plKyIpIiksSnQ9ITAsWmUrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIjt2YXIgbHQ9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihaZSk7dGhyb3cgZihsdCksbHR9dmFyICRuLHluPVplPT5aZS5zdGFydHNXaXRoKCJkYXRhOmFwcGxpY2F0aW9u'@;
put 'L29jdGV0LXN0cmVhbTtiYXNlNjQsIik7ZnVuY3Rpb24gZHIoWmUpe2lmKFplPT0kbiYmcHQpcmV0dXJuIG5ldyBVaW50OEFycmF5KHB0KTtpZihCZSlyZXR1cm4gQmUoWmUpO3Rocm93ImJvdGggYXN5bmMgYW5kIHN5bmMgZmV0Y2hpbmcgb2YgdGhlIHdhc20gZmFpbGVkIn1mdW5jdGlvbiBa'@;
put 'bihaZSxsdCxMdCl7cmV0dXJuIGZ1bmN0aW9uIFVyKFplKXtyZXR1cm4gcHQ/UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+ZHIoWmUpKToodm9pZCAwKShaZSkudGhlbihsdD0+bmV3IFVpbnQ4QXJyYXkobHQpLCgpPT5kcihaZSkpfShaZSkudGhlbigkdD0+V2ViQXNzZW1ibHkuaW5zdGFu'@;
put 'dGlhdGUoJHQsbHQpKS50aGVuKEx0LCR0PT57cnQoYGZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICR7JHR9YCksS3IoJHQpfSl9dmFyIFpyLGFvLGpvPXsxNzMwNjQ6KFplLGx0KT0+e3ZhciBMdD1aMChaZSksJHQ9WjAobHQpO1l0LmNyZWF0ZVBhdGgoIi8iLFFhLmRp'@;
put 'cm5hbWUoTHQpKSxZdC53cml0ZUZpbGUoUWEuam9pbigiLyIsTHQpLCR0KX19O2NsYXNzIElhe25hbWU9IkV4aXRTdGF0dXMiO2NvbnN0cnVjdG9yKGx0KXt0aGlzLm1lc3NhZ2U9YFByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJHtsdH0pYCx0aGlzLnN0YXR1cz1sdH19dmFyIFphPVpl'@;
put 'PT57Zm9yKDtaZS5sZW5ndGg+MDspWmUuc2hpZnQoKShkKX07Y2xhc3MgcHN7Y29uc3RydWN0b3IobHQpe3RoaXMuZXhjUHRyPWx0LHRoaXMucHRyPWx0LTI0fXNldF90eXBlKGx0KXtHblt0aGlzLnB0cis0Pj4yXT1sdH1nZXRfdHlwZSgpe3JldHVybiBHblt0aGlzLnB0cis0Pj4yXX1zZXRf'@;
put 'ZGVzdHJ1Y3RvcihsdCl7R25bdGhpcy5wdHIrOD4+Ml09bHR9Z2V0X2Rlc3RydWN0b3IoKXtyZXR1cm4gR25bdGhpcy5wdHIrOD4+Ml19c2V0X2NhdWdodChsdCl7dG5bdGhpcy5wdHIrMTJdPWx0PWx0PzE6MH1nZXRfY2F1Z2h0KCl7cmV0dXJuIDAhPXRuW3RoaXMucHRyKzEyXX1zZXRfcmV0'@;
put 'aHJvd24obHQpe3RuW3RoaXMucHRyKzEzXT1sdD1sdD8xOjB9Z2V0X3JldGhyb3duKCl7cmV0dXJuIDAhPXRuW3RoaXMucHRyKzEzXX1pbml0KGx0LEx0KXt0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCksdGhpcy5zZXRfdHlwZShsdCksdGhpcy5zZXRfZGVzdHJ1Y3RvcihMdCl9c2V0X2FkanVz'@;
put 'dGVkX3B0cihsdCl7R25bdGhpcy5wdHIrMTY+PjJdPWx0fWdldF9hZGp1c3RlZF9wdHIoKXtyZXR1cm4gR25bdGhpcy5wdHIrMTY+PjJdfX12YXIgUWE9e2lzQWJzOlplPT4iLyI9PT1aZS5jaGFyQXQoMCksc3BsaXRQYXRoOlplPT4vXihcLz98KShbXHNcU10qPykoKD86XC57MSwyfXxbXlwv'@;
put 'XSs/fCkoXC5bXi5cL10qfCkpKD86W1wvXSopJC8uZXhlYyhaZSkuc2xpY2UoMSksbm9ybWFsaXplQXJyYXk6KFplLGx0KT0+e2Zvcih2YXIgTHQ9MCwkdD1aZS5sZW5ndGgtMTskdD49MDskdC0tKXt2YXIgRG49WmVbJHRdOyIuIj09PURuP1plLnNwbGljZSgkdCwxKToiLi4iPT09RG4/KFpl'@;
put 'LnNwbGljZSgkdCwxKSxMdCsrKTpMdCYmKFplLnNwbGljZSgkdCwxKSxMdC0tKX1pZihsdClmb3IoO0x0O0x0LS0pWmUudW5zaGlmdCgiLi4iKTtyZXR1cm4gWmV9LG5vcm1hbGl6ZTpaZT0+e3ZhciBsdD1RYS5pc0FicyhaZSksTHQ9Ii8iPT09WmUuc3Vic3RyKC0xKTtyZXR1cm4hKFplPVFh'@;
put 'Lm5vcm1hbGl6ZUFycmF5KFplLnNwbGl0KCIvIikuZmlsdGVyKCR0PT4hISR0KSwhbHQpLmpvaW4oIi8iKSkmJiFsdCYmKFplPSIuIiksWmUmJkx0JiYoWmUrPSIvIiksKGx0PyIvIjoiIikrWmV9LGRpcm5hbWU6WmU9Pnt2YXIgbHQ9UWEuc3BsaXRQYXRoKFplKSxMdD1sdFswXSwkdD1sdFsx'@;
put 'XTtyZXR1cm4gTHR8fCR0PygkdCYmKCR0PSR0LnN1YnN0cigwLCR0Lmxlbmd0aC0xKSksTHQrJHQpOiIuIn0sYmFzZW5hbWU6WmU9PntpZigiLyI9PT1aZSlyZXR1cm4iLyI7dmFyIGx0PShaZT0oWmU9UWEubm9ybWFsaXplKFplKSkucmVwbGFjZSgvXC8kLywiIikpLmxhc3RJbmRleE9mKCIv'@;
put 'Iik7cmV0dXJuLTE9PT1sdD9aZTpaZS5zdWJzdHIobHQrMSl9LGpvaW46KC4uLlplKT0+UWEubm9ybWFsaXplKFplLmpvaW4oIi8iKSksam9pbjI6KFplLGx0KT0+UWEubm9ybWFsaXplKFplKyIvIitsdCl9LGFkPVplPT4oYWQ9KCgpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBjcnlwdG8mJiJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXJldHVybiBaZT0+Y3J5cHRvLmdldFJhbmRvbVZhbHVlcyhaZSk7S3IoImluaXRSYW5kb21EZXZpY2UiKX0pKCkpKFplKSx6cz17cmVzb2x2ZTooLi4uWmUpPT57Zm9yKHZhciBsdD0iIixMdD0hMSwkdD1aZS5sZW5ndGgt'@;
put 'MTskdD49LTEmJiFMdDskdC0tKXt2YXIgRG49JHQ+PTA/WmVbJHRdOll0LmN3ZCgpO2lmKCJzdHJpbmciIT10eXBlb2YgRG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZighRG4pcmV0dXJuIiI7bHQ9RG4rIi8iK2x0'@;
put 'LEx0PVFhLmlzQWJzKERuKX1yZXR1cm4oTHQ/Ii8iOiIiKSsobHQ9UWEubm9ybWFsaXplQXJyYXkobHQuc3BsaXQoIi8iKS5maWx0ZXIoY3I9PiEhY3IpLCFMdCkuam9pbigiLyIpKXx8Ii4ifSxyZWxhdGl2ZTooWmUsbHQpPT57ZnVuY3Rpb24gTHQoR2Epe2Zvcih2YXIgSHM9MDtIczxHYS5s'@;
put 'ZW5ndGgmJiIiPT09R2FbSHNdO0hzKyspO2Zvcih2YXIgb2w9R2EubGVuZ3RoLTE7b2w+PTAmJiIiPT09R2Fbb2xdO29sLS0pO3JldHVybiBIcz5vbD9bXTpHYS5zbGljZShIcyxvbC1IcysxKX1aZT16cy5yZXNvbHZlKFplKS5zdWJzdHIoMSksbHQ9enMucmVzb2x2ZShsdCkuc3Vic3RyKDEp'@;
put 'O2Zvcih2YXIgJHQ9THQoWmUuc3BsaXQoIi8iKSksRG49THQobHQuc3BsaXQoIi8iKSksY3I9TWF0aC5taW4oJHQubGVuZ3RoLERuLmxlbmd0aCksUnI9Y3IscXI9MDtxcjxjcjtxcisrKWlmKCR0W3FyXSE9PURuW3FyXSl7UnI9cXI7YnJlYWt9dmFyIERvPVtdO2Zvcihxcj1ScjtxcjwkdC5s'@;
put 'ZW5ndGg7cXIrKylEby5wdXNoKCIuLiIpO3JldHVybihEbz1Eby5jb25jYXQoRG4uc2xpY2UoUnIpKSkuam9pbigiLyIpfX0sWGM9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXI6dm9pZCAwLEtzPShaZSxsdD0wLEx0PU5hTik9Pntmb3IodmFyICR0PWx0K0x0LERuPWx0'@;
put 'O1plW0RuXSYmIShEbj49JHQpOykrK0RuO2lmKERuLWx0PjE2JiZaZS5idWZmZXImJlhjKXJldHVybiBYYy5kZWNvZGUoWmUuc3ViYXJyYXkobHQsRG4pKTtmb3IodmFyIGNyPSIiO2x0PERuOyl7dmFyIFJyPVplW2x0KytdO2lmKDEyOCZScil7dmFyIHFyPTYzJlplW2x0KytdO2lmKDE5MiE9'@;
put 'KDIyNCZScikpe3ZhciBEbz02MyZaZVtsdCsrXTtpZigoUnI9MjI0PT0oMjQwJlJyKT8oMTUmUnIpPDwxMnxxcjw8NnxEbzooNyZScik8PDE4fHFyPDwxMnxEbzw8Nnw2MyZaZVtsdCsrXSk8NjU1MzYpY3IrPVN0cmluZy5mcm9tQ2hhckNvZGUoUnIpO2Vsc2V7dmFyIEdhPVJyLTY1NTM2O2Ny'@;
put 'Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fEdhPj4xMCw1NjMyMHwxMDIzJkdhKX19ZWxzZSBjcis9U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmUnIpPDw2fHFyKX1lbHNlIGNyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFJyKX1yZXR1cm4gY3J9LFZsPVtdLGVzPVplPT57Zm9yKHZhciBsdD0w'@;
put 'LEx0PTA7THQ8WmUubGVuZ3RoOysrTHQpe3ZhciAkdD1aZS5jaGFyQ29kZUF0KEx0KTskdDw9MTI3P2x0Kys6JHQ8PTIwNDc/bHQrPTI6JHQ+PTU1Mjk2JiYkdDw9NTczNDM/KGx0Kz00LCsrTHQpOmx0Kz0zfXJldHVybiBsdH0sRTE9KFplLGx0LEx0LCR0KT0+e2lmKCEoJHQ+MCkpcmV0dXJu'@;
put 'IDA7Zm9yKHZhciBEbj1MdCxjcj1MdCskdC0xLFJyPTA7UnI8WmUubGVuZ3RoOysrUnIpe3ZhciBxcj1aZS5jaGFyQ29kZUF0KFJyKTtpZihxcj49NTUyOTYmJnFyPD01NzM0MyYmKHFyPTY1NTM2KygoMTAyMyZxcik8PDEwKXwxMDIzJlplLmNoYXJDb2RlQXQoKytScikpLHFyPD0xMjcpe2lm'@;
put 'KEx0Pj1jcilicmVhaztsdFtMdCsrXT1xcn1lbHNlIGlmKHFyPD0yMDQ3KXtpZihMdCsxPj1jcilicmVhaztsdFtMdCsrXT0xOTJ8cXI+PjYsbHRbTHQrK109MTI4fDYzJnFyfWVsc2UgaWYocXI8PTY1NTM1KXtpZihMdCsyPj1jcilicmVhaztsdFtMdCsrXT0yMjR8cXI+PjEyLGx0W0x0Kytd'@;
put 'PTEyOHxxcj4+NiY2MyxsdFtMdCsrXT0xMjh8NjMmcXJ9ZWxzZXtpZihMdCszPj1jcilicmVhaztsdFtMdCsrXT0yNDB8cXI+PjE4LGx0W0x0KytdPTEyOHxxcj4+MTImNjMsbHRbTHQrK109MTI4fHFyPj42JjYzLGx0W0x0KytdPTEyOHw2MyZxcn19cmV0dXJuIGx0W0x0XT0wLEx0LURufSxk'@;
put 'ND17dHR5czpbXSxpbml0KCl7fSxzaHV0ZG93bigpe30scmVnaXN0ZXIoWmUsbHQpe2Q0LnR0eXNbWmVdPXtpbnB1dDpbXSxvdXRwdXQ6W10sb3BzOmx0fSxZdC5yZWdpc3RlckRldmljZShaZSxkNC5zdHJlYW1fb3BzKX0sc3RyZWFtX29wczp7b3BlbihaZSl7dmFyIGx0PWQ0LnR0eXNbWmUu'@;
put 'bm9kZS5yZGV2XTtpZighbHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO1plLnR0eT1sdCxaZS5zZWVrYWJsZT0hMX0sY2xvc2UoWmUpe1plLnR0eS5vcHMuZnN5bmMoWmUudHR5KX0sZnN5bmMoWmUpe1plLnR0eS5vcHMuZnN5bmMoWmUudHR5KX0scmVhZChaZSxsdCxMdCwkdCxEbil7'@;
put 'aWYoIVplLnR0eXx8IVplLnR0eS5vcHMuZ2V0X2NoYXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjApO2Zvcih2YXIgY3I9MCxScj0wO1JyPCR0O1JyKyspe3ZhciBxcjt0cnl7cXI9WmUudHR5Lm9wcy5nZXRfY2hhcihaZS50dHkpfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5'@;
put 'KX1pZih2b2lkIDA9PT1xciYmMD09PWNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYpO2lmKG51bGw9PXFyKWJyZWFrO2NyKyssbHRbTHQrUnJdPXFyfXJldHVybiBjciYmKFplLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGNyfSx3cml0ZShaZSxsdCxMdCwkdCxEbil7aWYoIVplLnR0'@;
put 'eXx8IVplLnR0eS5vcHMucHV0X2NoYXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjApO3RyeXtmb3IodmFyIGNyPTA7Y3I8JHQ7Y3IrKylaZS50dHkub3BzLnB1dF9jaGFyKFplLnR0eSxsdFtMdCtjcl0pfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gJHQmJiha'@;
put 'ZS5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxjcn19LGRlZmF1bHRfdHR5X29wczp7Z2V0X2NoYXI6WmU9PlZsLmxlbmd0aD9WbC5zaGlmdCgpOm51bGwscHV0X2NoYXIoWmUsbHQpe251bGw9PT1sdHx8MTA9PT1sdD8ocWUoS3MoWmUub3V0cHV0KSksWmUub3V0cHV0PVtdKTowIT1sdCYm'@;
put 'WmUub3V0cHV0LnB1c2gobHQpfSxmc3luYyhaZSl7WmUub3V0cHV0JiZaZS5vdXRwdXQubGVuZ3RoPjAmJihxZShLcyhaZS5vdXRwdXQpKSxaZS5vdXRwdXQ9W10pfSxpb2N0bF90Y2dldHM6WmU9Pih7Y19pZmxhZzoyNTg1NixjX29mbGFnOjUsY19jZmxhZzoxOTEsY19sZmxhZzozNTM4Nyxj'@;
put 'X2NjOlszLDI4LDEyNywyMSw0LDAsMSwwLDE3LDE5LDI2LDAsMTgsMTUsMjMsMjIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF19KSxpb2N0bF90Y3NldHM6KFplLGx0LEx0KT0+MCxpb2N0bF90aW9jZ3dpbnN6OlplPT5bMjQsODBdfSxkZWZhdWx0X3R0eTFfb3BzOntwdXRfY2hh'@;
put 'cihaZSxsdCl7bnVsbD09PWx0fHwxMD09PWx0PyhydChLcyhaZS5vdXRwdXQpKSxaZS5vdXRwdXQ9W10pOjAhPWx0JiZaZS5vdXRwdXQucHVzaChsdCl9LGZzeW5jKFplKXtaZS5vdXRwdXQmJlplLm91dHB1dC5sZW5ndGg+MCYmKHJ0KEtzKFplLm91dHB1dCkpLFplLm91dHB1dD1bXSl9fX0s'@;
put 'TkE9KFplLGx0KT0+TWF0aC5jZWlsKFplL2x0KSpsdCx6Tj1aZT0+e1plPU5BKFplLDY1NTM2KTt2YXIgbHQ9QjdlKDY1NTM2LFplKTtyZXR1cm4gbHQmJigoWmUsbHQpPT57TW4uZmlsbCgwLFplLFplK2x0KX0pKGx0LFplKSxsdH0sS289e29wc190YWJsZTpudWxsLG1vdW50OlplPT5Lby5j'@;
put 'cmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApLGNyZWF0ZU5vZGUoWmUsbHQsTHQsJHQpe2lmKFl0LmlzQmxrZGV2KEx0KXx8WXQuaXNGSUZPKEx0KSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7S28ub3BzX3RhYmxlfHw9e2Rpcjp7bm9kZTp7Z2V0YXR0cjpLby5ub2RlX29wcy5nZXRh'@;
put 'dHRyLHNldGF0dHI6S28ubm9kZV9vcHMuc2V0YXR0cixsb29rdXA6S28ubm9kZV9vcHMubG9va3VwLG1rbm9kOktvLm5vZGVfb3BzLm1rbm9kLHJlbmFtZTpLby5ub2RlX29wcy5yZW5hbWUsdW5saW5rOktvLm5vZGVfb3BzLnVubGluayxybWRpcjpLby5ub2RlX29wcy5ybWRpcixyZWFkZGly'@;
put 'OktvLm5vZGVfb3BzLnJlYWRkaXIsc3ltbGluazpLby5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2VlazpLby5zdHJlYW1fb3BzLmxsc2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6S28ubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOktvLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTp7'@;
put 'bGxzZWVrOktvLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6S28uc3RyZWFtX29wcy5yZWFkLHdyaXRlOktvLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6S28uc3RyZWFtX29wcy5hbGxvY2F0ZSxtbWFwOktvLnN0cmVhbV9vcHMubW1hcCxtc3luYzpLby5zdHJlYW1fb3BzLm1zeW5jfX0sbGlu'@;
put 'azp7bm9kZTp7Z2V0YXR0cjpLby5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6S28ubm9kZV9vcHMuc2V0YXR0cixyZWFkbGluazpLby5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6S28ubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOktvLm5vZGVf'@;
put 'b3BzLnNldGF0dHJ9LHN0cmVhbTpZdC5jaHJkZXZfc3RyZWFtX29wc319O3ZhciBEbj1ZdC5jcmVhdGVOb2RlKFplLGx0LEx0LCR0KTtyZXR1cm4gWXQuaXNEaXIoRG4ubW9kZSk/KERuLm5vZGVfb3BzPUtvLm9wc190YWJsZS5kaXIubm9kZSxEbi5zdHJlYW1fb3BzPUtvLm9wc190YWJsZS5k'@;
put 'aXIuc3RyZWFtLERuLmNvbnRlbnRzPXt9KTpZdC5pc0ZpbGUoRG4ubW9kZSk/KERuLm5vZGVfb3BzPUtvLm9wc190YWJsZS5maWxlLm5vZGUsRG4uc3RyZWFtX29wcz1Lby5vcHNfdGFibGUuZmlsZS5zdHJlYW0sRG4udXNlZEJ5dGVzPTAsRG4uY29udGVudHM9bnVsbCk6WXQuaXNMaW5rKERu'@;
put 'Lm1vZGUpPyhEbi5ub2RlX29wcz1Lby5vcHNfdGFibGUubGluay5ub2RlLERuLnN0cmVhbV9vcHM9S28ub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpZdC5pc0NocmRldihEbi5tb2RlKSYmKERuLm5vZGVfb3BzPUtvLm9wc190YWJsZS5jaHJkZXYubm9kZSxEbi5zdHJlYW1fb3BzPUtvLm9wc190'@;
put 'YWJsZS5jaHJkZXYuc3RyZWFtKSxEbi50aW1lc3RhbXA9RGF0ZS5ub3coKSxaZSYmKFplLmNvbnRlbnRzW2x0XT1EbixaZS50aW1lc3RhbXA9RG4udGltZXN0YW1wKSxEbn0sZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXk6WmU9PlplLmNvbnRlbnRzP1plLmNvbnRlbnRzLnN1YmFycmF5P1plLmNv'@;
put 'bnRlbnRzLnN1YmFycmF5KDAsWmUudXNlZEJ5dGVzKTpuZXcgVWludDhBcnJheShaZS5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCksZXhwYW5kRmlsZVN0b3JhZ2UoWmUsbHQpe3ZhciBMdD1aZS5jb250ZW50cz9aZS5jb250ZW50cy5sZW5ndGg6MDtpZighKEx0Pj1sdCkpe2x0PU1hdGgu'@;
put 'bWF4KGx0LEx0KihMdDwxMDQ4NTc2PzI6MS4xMjUpPj4+MCksMCE9THQmJihsdD1NYXRoLm1heChsdCwyNTYpKTt2YXIgRG49WmUuY29udGVudHM7WmUuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkobHQpLFplLnVzZWRCeXRlcz4wJiZaZS5jb250ZW50cy5zZXQoRG4uc3ViYXJyYXkoMCxaZS51'@;
put 'c2VkQnl0ZXMpLDApfX0scmVzaXplRmlsZVN0b3JhZ2UoWmUsbHQpe2lmKFplLnVzZWRCeXRlcyE9bHQpaWYoMD09bHQpWmUuY29udGVudHM9bnVsbCxaZS51c2VkQnl0ZXM9MDtlbHNle3ZhciBMdD1aZS5jb250ZW50cztaZS5jb250ZW50cz1uZXcgVWludDhBcnJheShsdCksTHQmJlplLmNv'@;
put 'bnRlbnRzLnNldChMdC5zdWJhcnJheSgwLE1hdGgubWluKGx0LFplLnVzZWRCeXRlcykpKSxaZS51c2VkQnl0ZXM9bHR9fSxub2RlX29wczp7Z2V0YXR0cihaZSl7dmFyIGx0PXt9O3JldHVybiBsdC5kZXY9WXQuaXNDaHJkZXYoWmUubW9kZSk/WmUuaWQ6MSxsdC5pbm89WmUuaWQsbHQubW9k'@;
put 'ZT1aZS5tb2RlLGx0Lm5saW5rPTEsbHQudWlkPTAsbHQuZ2lkPTAsbHQucmRldj1aZS5yZGV2LGx0LnNpemU9WXQuaXNEaXIoWmUubW9kZSk/NDA5NjpZdC5pc0ZpbGUoWmUubW9kZSk/WmUudXNlZEJ5dGVzOll0LmlzTGluayhaZS5tb2RlKT9aZS5saW5rLmxlbmd0aDowLGx0LmF0aW1lPW5l'@;
put 'dyBEYXRlKFplLnRpbWVzdGFtcCksbHQubXRpbWU9bmV3IERhdGUoWmUudGltZXN0YW1wKSxsdC5jdGltZT1uZXcgRGF0ZShaZS50aW1lc3RhbXApLGx0LmJsa3NpemU9NDA5NixsdC5ibG9ja3M9TWF0aC5jZWlsKGx0LnNpemUvbHQuYmxrc2l6ZSksbHR9LHNldGF0dHIoWmUsbHQpe3ZvaWQg'@;
put 'MCE9PWx0Lm1vZGUmJihaZS5tb2RlPWx0Lm1vZGUpLHZvaWQgMCE9PWx0LnRpbWVzdGFtcCYmKFplLnRpbWVzdGFtcD1sdC50aW1lc3RhbXApLHZvaWQgMCE9PWx0LnNpemUmJktvLnJlc2l6ZUZpbGVTdG9yYWdlKFplLGx0LnNpemUpfSxsb29rdXAoWmUsbHQpe3Rocm93IEtvLmRvZXNOb3RF'@;
put 'eGlzdEVycm9yfSxta25vZDooWmUsbHQsTHQsJHQpPT5Lby5jcmVhdGVOb2RlKFplLGx0LEx0LCR0KSxyZW5hbWUoWmUsbHQsTHQpe2lmKFl0LmlzRGlyKFplLm1vZGUpKXt2YXIgJHQ7dHJ5eyR0PVl0Lmxvb2t1cE5vZGUobHQsTHQpfWNhdGNoe31pZigkdClmb3IodmFyIERuIGluICR0LmNv'@;
put 'bnRlbnRzKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU1KX1kZWxldGUgWmUucGFyZW50LmNvbnRlbnRzW1plLm5hbWVdLFplLnBhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKSxaZS5uYW1lPUx0LGx0LmNvbnRlbnRzW0x0XT1aZSxsdC50aW1lc3RhbXA9WmUucGFyZW50LnRpbWVzdGFtcH0s'@;
put 'dW5saW5rKFplLGx0KXtkZWxldGUgWmUuY29udGVudHNbbHRdLFplLnRpbWVzdGFtcD1EYXRlLm5vdygpfSxybWRpcihaZSxsdCl7dmFyIEx0PVl0Lmxvb2t1cE5vZGUoWmUsbHQpO2Zvcih2YXIgJHQgaW4gTHQuY29udGVudHMpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTUpO2RlbGV0ZSBa'@;
put 'ZS5jb250ZW50c1tsdF0sWmUudGltZXN0YW1wPURhdGUubm93KCl9LHJlYWRkaXIoWmUpe3ZhciBsdD1bIi4iLCIuLiJdO2Zvcih2YXIgTHQgb2YgT2JqZWN0LmtleXMoWmUuY29udGVudHMpKWx0LnB1c2goTHQpO3JldHVybiBsdH0sc3ltbGluayhaZSxsdCxMdCl7dmFyICR0PUtvLmNyZWF0'@;
put 'ZU5vZGUoWmUsbHQsNDE0NzEsMCk7cmV0dXJuICR0Lmxpbms9THQsJHR9LHJlYWRsaW5rKFplKXtpZighWXQuaXNMaW5rKFplLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gWmUubGlua319LHN0cmVhbV9vcHM6e3JlYWQoWmUsbHQsTHQsJHQsRG4pe3ZhciBjcj1a'@;
put 'ZS5ub2RlLmNvbnRlbnRzO2lmKERuPj1aZS5ub2RlLnVzZWRCeXRlcylyZXR1cm4gMDt2YXIgUnI9TWF0aC5taW4oWmUubm9kZS51c2VkQnl0ZXMtRG4sJHQpO2lmKFJyPjgmJmNyLnN1YmFycmF5KWx0LnNldChjci5zdWJhcnJheShEbixEbitSciksTHQpO2Vsc2UgZm9yKHZhciBxcj0wO3Fy'@;
put 'PFJyO3FyKyspbHRbTHQrcXJdPWNyW0RuK3FyXTtyZXR1cm4gUnJ9LHdyaXRlKFplLGx0LEx0LCR0LERuLGNyKXtpZihsdC5idWZmZXI9PT10bi5idWZmZXImJihjcj0hMSksISR0KXJldHVybiAwO3ZhciBScj1aZS5ub2RlO2lmKFJyLnRpbWVzdGFtcD1EYXRlLm5vdygpLGx0LnN1YmFycmF5'@;
put 'JiYoIVJyLmNvbnRlbnRzfHxSci5jb250ZW50cy5zdWJhcnJheSkpe2lmKGNyKXJldHVybiBSci5jb250ZW50cz1sdC5zdWJhcnJheShMdCxMdCskdCksUnIudXNlZEJ5dGVzPSR0LCR0O2lmKDA9PT1Sci51c2VkQnl0ZXMmJjA9PT1EbilyZXR1cm4gUnIuY29udGVudHM9bHQuc2xpY2UoTHQs'@;
put 'THQrJHQpLFJyLnVzZWRCeXRlcz0kdCwkdDtpZihEbiskdDw9UnIudXNlZEJ5dGVzKXJldHVybiBSci5jb250ZW50cy5zZXQobHQuc3ViYXJyYXkoTHQsTHQrJHQpLERuKSwkdH1pZihLby5leHBhbmRGaWxlU3RvcmFnZShScixEbiskdCksUnIuY29udGVudHMuc3ViYXJyYXkmJmx0LnN1YmFy'@;
put 'cmF5KVJyLmNvbnRlbnRzLnNldChsdC5zdWJhcnJheShMdCxMdCskdCksRG4pO2Vsc2UgZm9yKHZhciBxcj0wO3FyPCR0O3FyKyspUnIuY29udGVudHNbRG4rcXJdPWx0W0x0K3FyXTtyZXR1cm4gUnIudXNlZEJ5dGVzPU1hdGgubWF4KFJyLnVzZWRCeXRlcyxEbiskdCksJHR9LGxsc2Vlayha'@;
put 'ZSxsdCxMdCl7dmFyICR0PWx0O2lmKDE9PT1MdD8kdCs9WmUucG9zaXRpb246Mj09PUx0JiZZdC5pc0ZpbGUoWmUubm9kZS5tb2RlKSYmKCR0Kz1aZS5ub2RlLnVzZWRCeXRlcyksJHQ8MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuICR0fSxhbGxvY2F0ZShaZSxsdCxMdCl7'@;
put 'S28uZXhwYW5kRmlsZVN0b3JhZ2UoWmUubm9kZSxsdCtMdCksWmUubm9kZS51c2VkQnl0ZXM9TWF0aC5tYXgoWmUubm9kZS51c2VkQnl0ZXMsbHQrTHQpfSxtbWFwKFplLGx0LEx0LCR0LERuKXtpZighWXQuaXNGaWxlKFplLm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMp'@;
put 'O3ZhciBjcixScixxcj1aZS5ub2RlLmNvbnRlbnRzO2lmKDImRG58fCFxcnx8cXIuYnVmZmVyIT09dG4uYnVmZmVyKXtpZihScj0hMCwhKGNyPXpOKGx0KSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDgpO3FyJiYoKEx0PjB8fEx0K2x0PHFyLmxlbmd0aCkmJihxcj1xci5zdWJhcnJheT9x'@;
put 'ci5zdWJhcnJheShMdCxMdCtsdCk6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocXIsTHQsTHQrbHQpKSx0bi5zZXQocXIsY3IpKX1lbHNlIFJyPSExLGNyPXFyLmJ5dGVPZmZzZXQ7cmV0dXJue3B0cjpjcixhbGxvY2F0ZWQ6UnJ9fSxtc3luYzooWmUsbHQsTHQsJHQsRG4pPT4oS28uc3Ry'@;
put 'ZWFtX29wcy53cml0ZShaZSxsdCwwLCR0LEx0LCExKSwwKX19LFVOPVtdLEJBPShaZSxsdCk9Pnt2YXIgTHQ9MDtyZXR1cm4gWmUmJihMdHw9MzY1KSxsdCYmKEx0fD0xNDYpLEx0fSxZdD17cm9vdDpudWxsLG1vdW50czpbXSxkZXZpY2VzOnt9LHN0cmVhbXM6W10sbmV4dElub2RlOjEsbmFt'@;
put 'ZVRhYmxlOm51bGwsY3VycmVudFBhdGg6Ii8iLGluaXRpYWxpemVkOiExLGlnbm9yZVBlcm1pc3Npb25zOiEwLEVycm5vRXJyb3I6Y2xhc3N7bmFtZT0iRXJybm9FcnJvciI7Y29uc3RydWN0b3IoWmUpe3RoaXMuZXJybm89WmV9fSxmaWxlc3lzdGVtczpudWxsLHN5bmNGU1JlcXVlc3RzOjAs'@;
put 'RlNTdHJlYW06Y2xhc3N7c2hhcmVkPXt9O2dldCBvYmplY3QoKXtyZXR1cm4gdGhpcy5ub2RlfXNldCBvYmplY3QoWmUpe3RoaXMubm9kZT1aZX1nZXQgaXNSZWFkKCl7cmV0dXJuIDEhPSgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc1dyaXRlKCl7cmV0dXJuISEoMjA5NzE1NSZ0aGlzLmZs'@;
put 'YWdzKX1nZXQgaXNBcHBlbmQoKXtyZXR1cm4gMTAyNCZ0aGlzLmZsYWdzfWdldCBmbGFncygpe3JldHVybiB0aGlzLnNoYXJlZC5mbGFnc31zZXQgZmxhZ3MoWmUpe3RoaXMuc2hhcmVkLmZsYWdzPVplfWdldCBwb3NpdGlvbigpe3JldHVybiB0aGlzLnNoYXJlZC5wb3NpdGlvbn1zZXQgcG9z'@;
put 'aXRpb24oWmUpe3RoaXMuc2hhcmVkLnBvc2l0aW9uPVplfX0sRlNOb2RlOmNsYXNze25vZGVfb3BzPXt9O3N0cmVhbV9vcHM9e307cmVhZE1vZGU9MzY1O3dyaXRlTW9kZT0xNDY7bW91bnRlZD1udWxsO2NvbnN0cnVjdG9yKFplLGx0LEx0LCR0KXtaZXx8KFplPXRoaXMpLHRoaXMucGFyZW50'@;
put 'PVplLHRoaXMubW91bnQ9WmUubW91bnQsdGhpcy5pZD1ZdC5uZXh0SW5vZGUrKyx0aGlzLm5hbWU9bHQsdGhpcy5tb2RlPUx0LHRoaXMucmRldj0kdH1nZXQgcmVhZCgpe3JldHVybih0aGlzLm1vZGUmdGhpcy5yZWFkTW9kZSk9PT10aGlzLnJlYWRNb2RlfXNldCByZWFkKFplKXtaZT90aGlz'@;
put 'Lm1vZGV8PXRoaXMucmVhZE1vZGU6dGhpcy5tb2RlJj1+dGhpcy5yZWFkTW9kZX1nZXQgd3JpdGUoKXtyZXR1cm4odGhpcy5tb2RlJnRoaXMud3JpdGVNb2RlKT09PXRoaXMud3JpdGVNb2RlfXNldCB3cml0ZShaZSl7WmU/dGhpcy5tb2RlfD10aGlzLndyaXRlTW9kZTp0aGlzLm1vZGUmPX50'@;
put 'aGlzLndyaXRlTW9kZX1nZXQgaXNGb2xkZXIoKXtyZXR1cm4gWXQuaXNEaXIodGhpcy5tb2RlKX1nZXQgaXNEZXZpY2UoKXtyZXR1cm4gWXQuaXNDaHJkZXYodGhpcy5tb2RlKX19LGxvb2t1cFBhdGgoWmUsbHQ9e30pe2lmKCEoWmU9enMucmVzb2x2ZShaZSkpKXJldHVybntwYXRoOiIiLG5v'@;
put 'ZGU6bnVsbH07aWYoKGx0PU9iamVjdC5hc3NpZ24oe2ZvbGxvd19tb3VudDohMCxyZWN1cnNlX2NvdW50OjB9LGx0KSkucmVjdXJzZV9jb3VudD44KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMyKTtmb3IodmFyICR0PVplLnNwbGl0KCIvIikuZmlsdGVyKG9sPT4hIW9sKSxEbj1ZdC5yb290'@;
put 'LGNyPSIvIixScj0wO1JyPCR0Lmxlbmd0aDtScisrKXt2YXIgcXI9UnI9PT0kdC5sZW5ndGgtMTtpZihxciYmbHQucGFyZW50KWJyZWFrO2lmKERuPVl0Lmxvb2t1cE5vZGUoRG4sJHRbUnJdKSxjcj1RYS5qb2luMihjciwkdFtScl0pLFl0LmlzTW91bnRwb2ludChEbikmJighcXJ8fHFyJiZs'@;
put 'dC5mb2xsb3dfbW91bnQpJiYoRG49RG4ubW91bnRlZC5yb290KSwhcXJ8fGx0LmZvbGxvdylmb3IodmFyIERvPTA7WXQuaXNMaW5rKERuLm1vZGUpOyl7dmFyIEdhPVl0LnJlYWRsaW5rKGNyKTtpZihjcj16cy5yZXNvbHZlKFFhLmRpcm5hbWUoY3IpLEdhKSxEbj1ZdC5sb29rdXBQYXRoKGNy'@;
put 'LHtyZWN1cnNlX2NvdW50Omx0LnJlY3Vyc2VfY291bnQrMX0pLm5vZGUsRG8rKz40MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigzMil9fXJldHVybntwYXRoOmNyLG5vZGU6RG59fSxnZXRQYXRoKFplKXtmb3IodmFyIGx0Ozspe2lmKFl0LmlzUm9vdChaZSkpe3ZhciBMdD1aZS5tb3VudC5t'@;
put 'b3VudHBvaW50O3JldHVybiBsdD8iLyIhPT1MdFtMdC5sZW5ndGgtMV0/YCR7THR9LyR7bHR9YDpMdCtsdDpMdH1sdD1sdD9gJHtaZS5uYW1lfS8ke2x0fWA6WmUubmFtZSxaZT1aZS5wYXJlbnR9fSxoYXNoTmFtZShaZSxsdCl7Zm9yKHZhciBMdD0wLCR0PTA7JHQ8bHQubGVuZ3RoOyR0Kysp'@;
put 'THQ9KEx0PDw1KS1MdCtsdC5jaGFyQ29kZUF0KCR0KXwwO3JldHVybihaZStMdD4+PjApJVl0Lm5hbWVUYWJsZS5sZW5ndGh9LGhhc2hBZGROb2RlKFplKXt2YXIgbHQ9WXQuaGFzaE5hbWUoWmUucGFyZW50LmlkLFplLm5hbWUpO1plLm5hbWVfbmV4dD1ZdC5uYW1lVGFibGVbbHRdLFl0Lm5h'@;
put 'bWVUYWJsZVtsdF09WmV9LGhhc2hSZW1vdmVOb2RlKFplKXt2YXIgbHQ9WXQuaGFzaE5hbWUoWmUucGFyZW50LmlkLFplLm5hbWUpO2lmKFl0Lm5hbWVUYWJsZVtsdF09PT1aZSlZdC5uYW1lVGFibGVbbHRdPVplLm5hbWVfbmV4dDtlbHNlIGZvcih2YXIgTHQ9WXQubmFtZVRhYmxlW2x0XTtM'@;
put 'dDspe2lmKEx0Lm5hbWVfbmV4dD09PVplKXtMdC5uYW1lX25leHQ9WmUubmFtZV9uZXh0O2JyZWFrfUx0PUx0Lm5hbWVfbmV4dH19LGxvb2t1cE5vZGUoWmUsbHQpe3ZhciBMdD1ZdC5tYXlMb29rdXAoWmUpO2lmKEx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKEx0KTtmb3IodmFyICR0PVl0'@;
put 'Lmhhc2hOYW1lKFplLmlkLGx0KSxEbj1ZdC5uYW1lVGFibGVbJHRdO0RuO0RuPURuLm5hbWVfbmV4dClpZihEbi5wYXJlbnQuaWQ9PT1aZS5pZCYmRG4ubmFtZT09PWx0KXJldHVybiBEbjtyZXR1cm4gWXQubG9va3VwKFplLGx0KX0sY3JlYXRlTm9kZShaZSxsdCxMdCwkdCl7dmFyIERuPW5l'@;
put 'dyBZdC5GU05vZGUoWmUsbHQsTHQsJHQpO3JldHVybiBZdC5oYXNoQWRkTm9kZShEbiksRG59LGRlc3Ryb3lOb2RlKFplKXtZdC5oYXNoUmVtb3ZlTm9kZShaZSl9LGlzUm9vdDpaZT0+WmU9PT1aZS5wYXJlbnQsaXNNb3VudHBvaW50OlplPT4hIVplLm1vdW50ZWQsaXNGaWxlOlplPT4zMjc2'@;
put 'OD09KDYxNDQwJlplKSxpc0RpcjpaZT0+MTYzODQ9PSg2MTQ0MCZaZSksaXNMaW5rOlplPT40MDk2MD09KDYxNDQwJlplKSxpc0NocmRldjpaZT0+ODE5Mj09KDYxNDQwJlplKSxpc0Jsa2RldjpaZT0+MjQ1NzY9PSg2MTQ0MCZaZSksaXNGSUZPOlplPT40MDk2PT0oNjE0NDAmWmUpLGlzU29j'@;
put 'a2V0OlplPT4hKDQ5MTUyJn5aZSksZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoWmUpe3ZhciBsdD1bInIiLCJ3IiwicnciXVszJlplXTtyZXR1cm4gNTEyJlplJiYobHQrPSJ3IiksbHR9LG5vZGVQZXJtaXNzaW9uczooWmUsbHQpPT5ZdC5pZ25vcmVQZXJtaXNzaW9ucz8wOmx0LmluY2x1ZGVz'@;
put 'KCJyIikmJiEoMjkyJlplLm1vZGUpfHxsdC5pbmNsdWRlcygidyIpJiYhKDE0NiZaZS5tb2RlKXx8bHQuaW5jbHVkZXMoIngiKSYmISg3MyZaZS5tb2RlKT8yOjAsbWF5TG9va3VwOlplPT5ZdC5pc0RpcihaZS5tb2RlKT9ZdC5ub2RlUGVybWlzc2lvbnMoWmUsIngiKXx8KFplLm5vZGVfb3Bz'@;
put 'Lmxvb2t1cD8wOjIpOjU0LG1heUNyZWF0ZShaZSxsdCl7dHJ5e3JldHVybiBZdC5sb29rdXBOb2RlKFplLGx0KSwyMH1jYXRjaHt9cmV0dXJuIFl0Lm5vZGVQZXJtaXNzaW9ucyhaZSwid3giKX0sbWF5RGVsZXRlKFplLGx0LEx0KXt2YXIgJHQ7dHJ5eyR0PVl0Lmxvb2t1cE5vZGUoWmUsbHQp'@;
put 'fWNhdGNoKGNyKXtyZXR1cm4gY3IuZXJybm99dmFyIERuPVl0Lm5vZGVQZXJtaXNzaW9ucyhaZSwid3giKTtpZihEbilyZXR1cm4gRG47aWYoTHQpe2lmKCFZdC5pc0RpcigkdC5tb2RlKSlyZXR1cm4gNTQ7aWYoWXQuaXNSb290KCR0KXx8WXQuZ2V0UGF0aCgkdCk9PT1ZdC5jd2QoKSlyZXR1'@;
put 'cm4gMTB9ZWxzZSBpZihZdC5pc0RpcigkdC5tb2RlKSlyZXR1cm4gMzE7cmV0dXJuIDB9LG1heU9wZW46KFplLGx0KT0+WmU/WXQuaXNMaW5rKFplLm1vZGUpPzMyOll0LmlzRGlyKFplLm1vZGUpJiYoInIiIT09WXQuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcobHQpfHw1MTImbHQpPzMxOll0'@;
put 'Lm5vZGVQZXJtaXNzaW9ucyhaZSxZdC5mbGFnc1RvUGVybWlzc2lvblN0cmluZyhsdCkpOjQ0LE1BWF9PUEVOX0ZEUzo0MDk2LG5leHRmZCgpe2Zvcih2YXIgWmU9MDtaZTw9WXQuTUFYX09QRU5fRkRTO1plKyspaWYoIVl0LnN0cmVhbXNbWmVdKXJldHVybiBaZTt0aHJvdyBuZXcgWXQuRXJy'@;
put 'bm9FcnJvcigzMyl9LGdldFN0cmVhbUNoZWNrZWQoWmUpe3ZhciBsdD1ZdC5nZXRTdHJlYW0oWmUpO2lmKCFsdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtyZXR1cm4gbHR9LGdldFN0cmVhbTpaZT0+WXQuc3RyZWFtc1taZV0sY3JlYXRlU3RyZWFtOihaZSxsdD0tMSk9PihaZT1PYmpl'@;
put 'Y3QuYXNzaWduKG5ldyBZdC5GU1N0cmVhbSxaZSksLTE9PWx0JiYobHQ9WXQubmV4dGZkKCkpLFplLmZkPWx0LFl0LnN0cmVhbXNbbHRdPVplLFplKSxjbG9zZVN0cmVhbShaZSl7WXQuc3RyZWFtc1taZV09bnVsbH0sZHVwU3RyZWFtKFplLGx0PS0xKXt2YXIgTHQ9WXQuY3JlYXRlU3RyZWFt'@;
put 'KFplLGx0KTtyZXR1cm4gTHQuc3RyZWFtX29wcz8uZHVwPy4oTHQpLEx0fSxjaHJkZXZfc3RyZWFtX29wczp7b3BlbihaZSl7dmFyIGx0PVl0LmdldERldmljZShaZS5ub2RlLnJkZXYpO1plLnN0cmVhbV9vcHM9bHQuc3RyZWFtX29wcyxaZS5zdHJlYW1fb3BzLm9wZW4/LihaZSl9LGxsc2Vl'@;
put 'aygpe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDcwKX19LG1ham9yOlplPT5aZT4+OCxtaW5vcjpaZT0+MjU1JlplLG1ha2VkZXY6KFplLGx0KT0+WmU8PDh8bHQscmVnaXN0ZXJEZXZpY2UoWmUsbHQpe1l0LmRldmljZXNbWmVdPXtzdHJlYW1fb3BzOmx0fX0sZ2V0RGV2aWNlOlplPT5ZdC5k'@;
put 'ZXZpY2VzW1plXSxnZXRNb3VudHMoWmUpe2Zvcih2YXIgbHQ9W10sTHQ9W1plXTtMdC5sZW5ndGg7KXt2YXIgJHQ9THQucG9wKCk7bHQucHVzaCgkdCksTHQucHVzaCguLi4kdC5tb3VudHMpfXJldHVybiBsdH0sc3luY2ZzKFplLGx0KXsiZnVuY3Rpb24iPT10eXBlb2YgWmUmJihsdD1aZSxa'@;
put 'ZT0hMSksWXQuc3luY0ZTUmVxdWVzdHMrKyxZdC5zeW5jRlNSZXF1ZXN0cz4xJiZydChgd2FybmluZzogJHtZdC5zeW5jRlNSZXF1ZXN0c30gRlMuc3luY2ZzIG9wZXJhdGlvbnMgaW4gZmxpZ2h0IGF0IG9uY2UsIHByb2JhYmx5IGp1c3QgZG9pbmcgZXh0cmEgd29ya2ApO3ZhciBMdD1ZdC5n'@;
put 'ZXRNb3VudHMoWXQucm9vdC5tb3VudCksJHQ9MDtmdW5jdGlvbiBEbihScil7cmV0dXJuIFl0LnN5bmNGU1JlcXVlc3RzLS0sbHQoUnIpfWZ1bmN0aW9uIGNyKFJyKXtpZihScilyZXR1cm4gY3IuZXJyb3JlZD92b2lkIDA6KGNyLmVycm9yZWQ9ITAsRG4oUnIpKTsrKyR0Pj1MdC5sZW5ndGgm'@;
put 'JkRuKG51bGwpfUx0LmZvckVhY2goUnI9PntpZighUnIudHlwZS5zeW5jZnMpcmV0dXJuIGNyKG51bGwpO1JyLnR5cGUuc3luY2ZzKFJyLFplLGNyKX0pfSxtb3VudChaZSxsdCxMdCl7dmFyIGNyLCR0PSIvIj09PUx0LERuPSFMdDtpZigkdCYmWXQucm9vdCl0aHJvdyBuZXcgWXQuRXJybm9F'@;
put 'cnJvcigxMCk7aWYoISR0JiYhRG4pe3ZhciBScj1ZdC5sb29rdXBQYXRoKEx0LHtmb2xsb3dfbW91bnQ6ITF9KTtpZihMdD1Sci5wYXRoLFl0LmlzTW91bnRwb2ludChjcj1Sci5ub2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMCk7aWYoIVl0LmlzRGlyKGNyLm1vZGUpKXRocm93IG5l'@;
put 'dyBZdC5FcnJub0Vycm9yKDU0KX12YXIgcXI9e3R5cGU6WmUsb3B0czpsdCxtb3VudHBvaW50Okx0LG1vdW50czpbXX0sRG89WmUubW91bnQocXIpO3JldHVybiBEby5tb3VudD1xcixxci5yb290PURvLCR0P1l0LnJvb3Q9RG86Y3ImJihjci5tb3VudGVkPXFyLGNyLm1vdW50JiZjci5tb3Vu'@;
put 'dC5tb3VudHMucHVzaChxcikpLERvfSx1bm1vdW50KFplKXt2YXIgbHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93X21vdW50OiExfSk7aWYoIVl0LmlzTW91bnRwb2ludChsdC5ub2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIEx0PWx0Lm5vZGUsJHQ9THQubW91bnRlZCxE'@;
put 'bj1ZdC5nZXRNb3VudHMoJHQpO09iamVjdC5rZXlzKFl0Lm5hbWVUYWJsZSkuZm9yRWFjaChScj0+e2Zvcih2YXIgcXI9WXQubmFtZVRhYmxlW1JyXTtxcjspe3ZhciBEbz1xci5uYW1lX25leHQ7RG4uaW5jbHVkZXMocXIubW91bnQpJiZZdC5kZXN0cm95Tm9kZShxcikscXI9RG99fSksTHQu'@;
put 'bW91bnRlZD1udWxsO3ZhciBjcj1MdC5tb3VudC5tb3VudHMuaW5kZXhPZigkdCk7THQubW91bnQubW91bnRzLnNwbGljZShjciwxKX0sbG9va3VwOihaZSxsdCk9PlplLm5vZGVfb3BzLmxvb2t1cChaZSxsdCksbWtub2QoWmUsbHQsTHQpe3ZhciBEbj1ZdC5sb29rdXBQYXRoKFplLHtwYXJl'@;
put 'bnQ6ITB9KS5ub2RlLGNyPVFhLmJhc2VuYW1lKFplKTtpZighY3J8fCIuIj09PWNyfHwiLi4iPT09Y3IpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBScj1ZdC5tYXlDcmVhdGUoRG4sY3IpO2lmKFJyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKFJyKTtpZighRG4ubm9kZV9vcHMu'@;
put 'bWtub2QpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO3JldHVybiBEbi5ub2RlX29wcy5ta25vZChEbixjcixsdCxMdCl9LHN0YXRmcyhaZSl7dmFyIGx0PXtic2l6ZTo0MDk2LGZyc2l6ZTo0MDk2LGJsb2NrczoxZTYsYmZyZWU6NWU1LGJhdmFpbDo1ZTUsZmlsZXM6WXQubmV4dElub2Rl'@;
put 'LGZmcmVlOll0Lm5leHRJbm9kZS0xLGZzaWQ6NDIsZmxhZ3M6MixuYW1lbGVuOjI1NX0sTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSkubm9kZTtyZXR1cm4gTHQ/Lm5vZGVfb3BzLnN0YXRmcyYmT2JqZWN0LmFzc2lnbihsdCxMdC5ub2RlX29wcy5zdGF0ZnMoTHQubW91bnQub3B0'@;
put 'cy5yb290KSksbHR9LGNyZWF0ZTooWmUsbHQ9NDM4KT0+KGx0Jj00MDk1LFl0Lm1rbm9kKFplLGx0fD0zMjc2OCwwKSksbWtkaXI6KFplLGx0PTUxMSk9PihsdCY9MTAyMyxZdC5ta25vZChaZSxsdHw9MTYzODQsMCkpLG1rZGlyVHJlZShaZSxsdCl7Zm9yKHZhciBMdD1aZS5zcGxpdCgiLyIp'@;
put 'LCR0PSIiLERuPTA7RG48THQubGVuZ3RoOysrRG4paWYoTHRbRG5dKXskdCs9Ii8iK0x0W0RuXTt0cnl7WXQubWtkaXIoJHQsbHQpfWNhdGNoKGNyKXtpZigyMCE9Y3IuZXJybm8pdGhyb3cgY3J9fX0sbWtkZXY6KFplLGx0LEx0KT0+KHR5cGVvZiBMdD4idSImJihMdD1sdCxsdD00MzgpLFl0'@;
put 'Lm1rbm9kKFplLGx0fD04MTkyLEx0KSksc3ltbGluayhaZSxsdCl7aWYoIXpzLnJlc29sdmUoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTt2YXIgJHQ9WXQubG9va3VwUGF0aChsdCx7cGFyZW50OiEwfSkubm9kZTtpZighJHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3Zh'@;
put 'ciBEbj1RYS5iYXNlbmFtZShsdCksY3I9WXQubWF5Q3JlYXRlKCR0LERuKTtpZihjcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihjcik7aWYoISR0Lm5vZGVfb3BzLnN5bWxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO3JldHVybiAkdC5ub2RlX29wcy5zeW1saW5rKCR0LERuLFpl'@;
put 'KX0scmVuYW1lKFplLGx0KXt2YXIgcXIsRG8sTHQ9UWEuZGlybmFtZShaZSksJHQ9UWEuZGlybmFtZShsdCksRG49UWEuYmFzZW5hbWUoWmUpLGNyPVFhLmJhc2VuYW1lKGx0KTtpZihxcj1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlLERvPVl0Lmxvb2t1cFBhdGgobHQse3Bh'@;
put 'cmVudDohMH0pLm5vZGUsIXFyfHwhRG8pdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKHFyLm1vdW50IT09RG8ubW91bnQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzUpO3ZhciBvbCxHYT1ZdC5sb29rdXBOb2RlKHFyLERuKSxIcz16cy5yZWxhdGl2ZShaZSwkdCk7aWYoIi4iIT09'@;
put 'SHMuY2hhckF0KDApKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZigiLiIhPT0oSHM9enMucmVsYXRpdmUobHQsTHQpKS5jaGFyQXQoMCkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTUpO3RyeXtvbD1ZdC5sb29rdXBOb2RlKERvLGNyKX1jYXRjaHt9aWYoR2EhPT1vbCl7dmFyIGdz'@;
put 'PVl0LmlzRGlyKEdhLm1vZGUpLHhhPVl0Lm1heURlbGV0ZShxcixEbixncyk7aWYoeGEpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoeGEpO2lmKHhhPW9sP1l0Lm1heURlbGV0ZShEbyxjcixncyk6WXQubWF5Q3JlYXRlKERvLGNyKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcih4YSk7aWYoIXFy'@;
put 'Lm5vZGVfb3BzLnJlbmFtZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7aWYoWXQuaXNNb3VudHBvaW50KEdhKXx8b2wmJll0LmlzTW91bnRwb2ludChvbCkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO2lmKERvIT09cXImJih4YT1ZdC5ub2RlUGVybWlzc2lvbnMocXIsInciKSkp'@;
put 'dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoeGEpO1l0Lmhhc2hSZW1vdmVOb2RlKEdhKTt0cnl7cXIubm9kZV9vcHMucmVuYW1lKEdhLERvLGNyKSxHYS5wYXJlbnQ9RG99Y2F0Y2gocXMpe3Rocm93IHFzfWZpbmFsbHl7WXQuaGFzaEFkZE5vZGUoR2EpfX19LHJtZGlyKFplKXt2YXIgTHQ9WXQu'@;
put 'bG9va3VwUGF0aChaZSx7cGFyZW50OiEwfSkubm9kZSwkdD1RYS5iYXNlbmFtZShaZSksRG49WXQubG9va3VwTm9kZShMdCwkdCksY3I9WXQubWF5RGVsZXRlKEx0LCR0LCEwKTtpZihjcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihjcik7aWYoIUx0Lm5vZGVfb3BzLnJtZGlyKXRocm93IG5l'@;
put 'dyBZdC5FcnJub0Vycm9yKDYzKTtpZihZdC5pc01vdW50cG9pbnQoRG4pKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtMdC5ub2RlX29wcy5ybWRpcihMdCwkdCksWXQuZGVzdHJveU5vZGUoRG4pfSxyZWFkZGlyKFplKXt2YXIgTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSku'@;
put 'bm9kZTtpZighTHQubm9kZV9vcHMucmVhZGRpcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NCk7cmV0dXJuIEx0Lm5vZGVfb3BzLnJlYWRkaXIoTHQpfSx1bmxpbmsoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCFMdCl0aHJvdyBuZXcgWXQuRXJy'@;
put 'bm9FcnJvcig0NCk7dmFyICR0PVFhLmJhc2VuYW1lKFplKSxEbj1ZdC5sb29rdXBOb2RlKEx0LCR0KSxjcj1ZdC5tYXlEZWxldGUoTHQsJHQsITEpO2lmKGNyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKGNyKTtpZighTHQubm9kZV9vcHMudW5saW5rKXRocm93IG5ldyBZdC5FcnJub0Vycm9y'@;
put 'KDYzKTtpZihZdC5pc01vdW50cG9pbnQoRG4pKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtMdC5ub2RlX29wcy51bmxpbmsoTHQsJHQpLFl0LmRlc3Ryb3lOb2RlKERuKX0scmVhZGxpbmsoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplKS5ub2RlO2lmKCFMdCl0aHJvdyBuZXcgWXQu'@;
put 'RXJybm9FcnJvcig0NCk7aWYoIUx0Lm5vZGVfb3BzLnJlYWRsaW5rKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gTHQubm9kZV9vcHMucmVhZGxpbmsoTHQpfSxzdGF0KFplLGx0KXt2YXIgJHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFsdH0pLm5vZGU7aWYoISR0KXRo'@;
put 'cm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtpZighJHQubm9kZV9vcHMuZ2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7cmV0dXJuICR0Lm5vZGVfb3BzLmdldGF0dHIoJHQpfSxsc3RhdDpaZT0+WXQuc3RhdChaZSwhMCksY2htb2QoWmUsbHQsTHQpe3ZhciAkdDtpZighKCR0'@;
put 'PSJzdHJpbmciPT10eXBlb2YgWmU/WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFMdH0pLm5vZGU6WmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpOyR0Lm5vZGVfb3BzLnNldGF0dHIoJHQse21vZGU6NDA5NSZsdHwtNDA5NiYkdC5tb2RlLHRpbWVzdGFt'@;
put 'cDpEYXRlLm5vdygpfSl9LGxjaG1vZChaZSxsdCl7WXQuY2htb2QoWmUsbHQsITApfSxmY2htb2QoWmUsbHQpe3ZhciBMdD1ZdC5nZXRTdHJlYW1DaGVja2VkKFplKTtZdC5jaG1vZChMdC5ub2RlLGx0KX0sY2hvd24oWmUsbHQsTHQsJHQpe3ZhciBEbjtpZighKERuPSJzdHJpbmciPT10eXBl'@;
put 'b2YgWmU/WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEkdH0pLm5vZGU6WmUpLm5vZGVfb3BzLnNldGF0dHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO0RuLm5vZGVfb3BzLnNldGF0dHIoRG4se3RpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGxjaG93bihaZSxsdCxMdCl7WXQuY2hvd24o'@;
put 'WmUsbHQsTHQsITApfSxmY2hvd24oWmUsbHQsTHQpe3ZhciAkdD1ZdC5nZXRTdHJlYW1DaGVja2VkKFplKTtZdC5jaG93bigkdC5ub2RlLGx0LEx0KX0sdHJ1bmNhdGUoWmUsbHQpe2lmKGx0PDApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBMdDtpZighKEx0PSJzdHJpbmciPT10'@;
put 'eXBlb2YgWmU/WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEwfSkubm9kZTpaZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7aWYoWXQuaXNEaXIoTHQubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzEpO2lmKCFZdC5pc0ZpbGUoTHQubW9kZSkp'@;
put 'dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBEbj1ZdC5ub2RlUGVybWlzc2lvbnMoTHQsInciKTtpZihEbil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcihEbik7THQubm9kZV9vcHMuc2V0YXR0cihMdCx7c2l6ZTpsdCx0aW1lc3RhbXA6RGF0ZS5ub3coKX0pfSxmdHJ1bmNhdGUoWmUs'@;
put 'bHQpe3ZhciBMdD1ZdC5nZXRTdHJlYW1DaGVja2VkKFplKTtpZighKDIwOTcxNTUmTHQuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtZdC50cnVuY2F0ZShMdC5ub2RlLGx0KX0sdXRpbWUoWmUsbHQsTHQpe3ZhciBEbj1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5u'@;
put 'b2RlO0RuLm5vZGVfb3BzLnNldGF0dHIoRG4se3RpbWVzdGFtcDpNYXRoLm1heChsdCxMdCl9KX0sb3BlbihaZSxsdCxMdD00Mzgpe2lmKCIiPT09WmUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciAkdDtpZihsdD0ic3RyaW5nIj09dHlwZW9mIGx0PyhaZT0+e3ZhciBMdD17cjow'@;
put 'LCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfVtaZV07aWYodHlwZW9mIEx0PiJ1Iil0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZmlsZSBvcGVuIG1vZGU6ICR7WmV9YCk7cmV0dXJuIEx0fSkobHQpOmx0LEx0PTY0Jmx0PzQwOTUmTHR8MzI3Njg6MCwib2JqZWN0Ij09'@;
put 'dHlwZW9mIFplKSR0PVplO2Vsc2V7WmU9UWEubm9ybWFsaXplKFplKTt0cnl7JHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiEoMTMxMDcyJmx0KX0pLm5vZGV9Y2F0Y2h7fX12YXIgY3I9ITE7aWYoNjQmbHQpaWYoJHQpe2lmKDEyOCZsdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyMCl9'@;
put 'ZWxzZSAkdD1ZdC5ta25vZChaZSxMdCwwKSxjcj0hMDtpZighJHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKFl0LmlzQ2hyZGV2KCR0Lm1vZGUpJiYobHQmPS01MTMpLDY1NTM2Jmx0JiYhWXQuaXNEaXIoJHQubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpO2lmKCFj'@;
put 'cil7dmFyIFJyPVl0Lm1heU9wZW4oJHQsbHQpO2lmKFJyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKFJyKX01MTImbHQmJiFjciYmWXQudHJ1bmNhdGUoJHQsMCksbHQmPS0xMzE3MTM7dmFyIHFyPVl0LmNyZWF0ZVN0cmVhbSh7bm9kZTokdCxwYXRoOll0LmdldFBhdGgoJHQpLGZsYWdzOmx0'@;
put 'LHNlZWthYmxlOiEwLHBvc2l0aW9uOjAsc3RyZWFtX29wczokdC5zdHJlYW1fb3BzLHVuZ290dGVuOltdLGVycm9yOiExfSk7cmV0dXJuIHFyLnN0cmVhbV9vcHMub3BlbiYmcXIuc3RyZWFtX29wcy5vcGVuKHFyKSxxcn0sY2xvc2UoWmUpe2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcg'@;
put 'WXQuRXJybm9FcnJvcig4KTtaZS5nZXRkZW50cyYmKFplLmdldGRlbnRzPW51bGwpO3RyeXtaZS5zdHJlYW1fb3BzLmNsb3NlJiZaZS5zdHJlYW1fb3BzLmNsb3NlKFplKX1jYXRjaChsdCl7dGhyb3cgbHR9ZmluYWxseXtZdC5jbG9zZVN0cmVhbShaZS5mZCl9WmUuZmQ9bnVsbH0saXNDbG9z'@;
put 'ZWQ6WmU9Pm51bGw9PT1aZS5mZCxsbHNlZWsoWmUsbHQsTHQpe2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZighWmUuc2Vla2FibGV8fCFaZS5zdHJlYW1fb3BzLmxsc2Vlayl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3MCk7aWYoMCE9THQmJjEhPUx0'@;
put 'JiYyIT1MdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFplLnBvc2l0aW9uPVplLnN0cmVhbV9vcHMubGxzZWVrKFplLGx0LEx0KSxaZS51bmdvdHRlbj1bXSxaZS5wb3NpdGlvbn0scmVhZChaZSxsdCxMdCwkdCxEbil7aWYoJHQ8MHx8RG48MCl0aHJvdyBuZXcgWXQuRXJy'@;
put 'bm9FcnJvcigyOCk7aWYoWXQuaXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKDE9PSgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZihZdC5pc0RpcihaZS5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMxKTtp'@;
put 'ZighWmUuc3RyZWFtX29wcy5yZWFkKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTt2YXIgY3I9dHlwZW9mIERuPCJ1IjtpZihjcil7aWYoIVplLnNlZWthYmxlKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDcwKX1lbHNlIERuPVplLnBvc2l0aW9uO3ZhciBScj1aZS5zdHJlYW1fb3BzLnJl'@;
put 'YWQoWmUsbHQsTHQsJHQsRG4pO3JldHVybiBjcnx8KFplLnBvc2l0aW9uKz1SciksUnJ9LHdyaXRlKFplLGx0LEx0LCR0LERuLGNyKXtpZigkdDwwfHxEbjwwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZihZdC5pc0Nsb3NlZChaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7'@;
put 'aWYoISgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZihZdC5pc0RpcihaZS5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMxKTtpZighWmUuc3RyZWFtX29wcy53cml0ZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7WmUuc2Vla2Fi'@;
put 'bGUmJjEwMjQmWmUuZmxhZ3MmJll0Lmxsc2VlayhaZSwwLDIpO3ZhciBScj10eXBlb2YgRG48InUiO2lmKFJyKXtpZighWmUuc2Vla2FibGUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzApfWVsc2UgRG49WmUucG9zaXRpb247dmFyIHFyPVplLnN0cmVhbV9vcHMud3JpdGUoWmUsbHQsTHQs'@;
put 'JHQsRG4sY3IpO3JldHVybiBScnx8KFplLnBvc2l0aW9uKz1xcikscXJ9LGFsbG9jYXRlKFplLGx0LEx0KXtpZihZdC5pc0Nsb3NlZChaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYobHQ8MHx8THQ8PTApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO2lmKCEoMjA5NzE1NSZa'@;
put 'ZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoIVl0LmlzRmlsZShaZS5ub2RlLm1vZGUpJiYhWXQuaXNEaXIoWmUubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7aWYoIVplLnN0cmVhbV9vcHMuYWxsb2NhdGUpdGhyb3cgbmV3IFl0LkVycm5vRXJy'@;
put 'b3IoMTM4KTtaZS5zdHJlYW1fb3BzLmFsbG9jYXRlKFplLGx0LEx0KX0sbW1hcChaZSxsdCxMdCwkdCxEbil7aWYoMiYkdCYmISgyJkRuKSYmMiE9KDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIpO2lmKDE9PSgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcg'@;
put 'WXQuRXJybm9FcnJvcigyKTtpZighWmUuc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTtpZighbHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiBaZS5zdHJlYW1fb3BzLm1tYXAoWmUsbHQsTHQsJHQsRG4pfSxtc3luYzooWmUsbHQsTHQsJHQs'@;
put 'RG4pPT5aZS5zdHJlYW1fb3BzLm1zeW5jP1plLnN0cmVhbV9vcHMubXN5bmMoWmUsbHQsTHQsJHQsRG4pOjAsaW9jdGwoWmUsbHQsTHQpe2lmKCFaZS5zdHJlYW1fb3BzLmlvY3RsKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU5KTtyZXR1cm4gWmUuc3RyZWFtX29wcy5pb2N0bChaZSxsdCxM'@;
put 'dCl9LHJlYWRGaWxlKFplLGx0PXt9KXtpZihsdC5mbGFncz1sdC5mbGFnc3x8MCxsdC5lbmNvZGluZz1sdC5lbmNvZGluZ3x8ImJpbmFyeSIsInV0ZjgiIT09bHQuZW5jb2RpbmcmJiJiaW5hcnkiIT09bHQuZW5jb2RpbmcpdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGVuY29kaW5nIHR5cGUg'@;
put 'IiR7bHQuZW5jb2Rpbmd9ImApO3ZhciBMdCwkdD1ZdC5vcGVuKFplLGx0LmZsYWdzKSxjcj1ZdC5zdGF0KFplKS5zaXplLFJyPW5ldyBVaW50OEFycmF5KGNyKTtyZXR1cm4gWXQucmVhZCgkdCxSciwwLGNyLDApLCJ1dGY4Ij09PWx0LmVuY29kaW5nP0x0PUtzKFJyKToiYmluYXJ5Ij09PWx0'@;
put 'LmVuY29kaW5nJiYoTHQ9UnIpLFl0LmNsb3NlKCR0KSxMdH0sd3JpdGVGaWxlKFplLGx0LEx0PXt9KXtMdC5mbGFncz1MdC5mbGFnc3x8NTc3O3ZhciAkdD1ZdC5vcGVuKFplLEx0LmZsYWdzLEx0Lm1vZGUpO2lmKCJzdHJpbmciPT10eXBlb2YgbHQpe3ZhciBEbj1uZXcgVWludDhBcnJheShl'@;
put 'cyhsdCkrMSksY3I9RTEobHQsRG4sMCxEbi5sZW5ndGgpO1l0LndyaXRlKCR0LERuLDAsY3Isdm9pZCAwLEx0LmNhbk93bil9ZWxzZXtpZighQXJyYXlCdWZmZXIuaXNWaWV3KGx0KSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO1l0LndyaXRlKCR0LGx0LDAsbHQu'@;
put 'Ynl0ZUxlbmd0aCx2b2lkIDAsTHQuY2FuT3duKX1ZdC5jbG9zZSgkdCl9LGN3ZDooKT0+WXQuY3VycmVudFBhdGgsY2hkaXIoWmUpe3ZhciBsdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KTtpZihudWxsPT09bHQubm9kZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoIVl0'@;
put 'LmlzRGlyKGx0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpO3ZhciBMdD1ZdC5ub2RlUGVybWlzc2lvbnMobHQubm9kZSwieCIpO2lmKEx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKEx0KTtZdC5jdXJyZW50UGF0aD1sdC5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0'@;
put 'b3JpZXMoKXtZdC5ta2RpcigiL3RtcCIpLFl0Lm1rZGlyKCIvaG9tZSIpLFl0Lm1rZGlyKCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlcygpe1l0Lm1rZGlyKCIvZGV2IiksWXQucmVnaXN0ZXJEZXZpY2UoWXQubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOigk'@;
put 'dCxEbixjcixScixxcik9PlJyLGxsc2VlazooKT0+MH0pLFl0Lm1rZGV2KCIvZGV2L251bGwiLFl0Lm1ha2VkZXYoMSwzKSksZDQucmVnaXN0ZXIoWXQubWFrZWRldig1LDApLGQ0LmRlZmF1bHRfdHR5X29wcyksZDQucmVnaXN0ZXIoWXQubWFrZWRldig2LDApLGQ0LmRlZmF1bHRfdHR5MV9v'@;
put 'cHMpLFl0Lm1rZGV2KCIvZGV2L3R0eSIsWXQubWFrZWRldig1LDApKSxZdC5ta2RldigiL2Rldi90dHkxIixZdC5tYWtlZGV2KDYsMCkpO3ZhciBaZT1uZXcgVWludDhBcnJheSgxMDI0KSxsdD0wLEx0PSgpPT4oMD09PWx0JiYobHQ9YWQoWmUpLmJ5dGVMZW5ndGgpLFplWy0tbHRdKTtZdC5j'@;
put 'cmVhdGVEZXZpY2UoIi9kZXYiLCJyYW5kb20iLEx0KSxZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJ1cmFuZG9tIixMdCksWXQubWtkaXIoIi9kZXYvc2htIiksWXQubWtkaXIoIi9kZXYvc2htL3RtcCIpfSxjcmVhdGVTcGVjaWFsRGlyZWN0b3JpZXMoKXtZdC5ta2RpcigiL3Byb2MiKTt2YXIg'@;
put 'WmU9WXQubWtkaXIoIi9wcm9jL3NlbGYiKTtZdC5ta2RpcigiL3Byb2Mvc2VsZi9mZCIpLFl0Lm1vdW50KHttb3VudCgpe3ZhciBsdD1ZdC5jcmVhdGVOb2RlKFplLCJmZCIsMTY4OTUsNzMpO3JldHVybiBsdC5ub2RlX29wcz17bG9va3VwKEx0LCR0KXt2YXIgY3I9WXQuZ2V0U3RyZWFtQ2hl'@;
put 'Y2tlZCgrJHQpLFJyPXtwYXJlbnQ6bnVsbCxtb3VudDp7bW91bnRwb2ludDoiZmFrZSJ9LG5vZGVfb3BzOntyZWFkbGluazooKT0+Y3IucGF0aH19O3JldHVybiBSci5wYXJlbnQ9UnIsUnJ9fSxsdH19LHt9LCIvcHJvYy9zZWxmL2ZkIil9LGNyZWF0ZVN0YW5kYXJkU3RyZWFtcyhaZSxsdCxM'@;
put 'dCl7WmU/WXQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkaW4iLFplKTpZdC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3RkaW4iKSxsdD9ZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRvdXQiLG51bGwsbHQpOll0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRvdXQiKSxMdD9ZdC5j'@;
put 'cmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRlcnIiLG51bGwsTHQpOll0LnN5bWxpbmsoIi9kZXYvdHR5MSIsIi9kZXYvc3RkZXJyIiksWXQub3BlbigiL2Rldi9zdGRpbiIsMCksWXQub3BlbigiL2Rldi9zdGRvdXQiLDEpLFl0Lm9wZW4oIi9kZXYvc3RkZXJyIiwxKX0sc3RhdGljSW5pdCgpe1l0'@;
put 'Lm5hbWVUYWJsZT1uZXcgQXJyYXkoNDA5NiksWXQubW91bnQoS28se30sIi8iKSxZdC5jcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKSxZdC5jcmVhdGVEZWZhdWx0RGV2aWNlcygpLFl0LmNyZWF0ZVNwZWNpYWxEaXJlY3RvcmllcygpLFl0LmZpbGVzeXN0ZW1zPXtNRU1GUzpLb319LGluaXQo'@;
put 'WmUsbHQsTHQpe1l0LmluaXRpYWxpemVkPSEwLFl0LmNyZWF0ZVN0YW5kYXJkU3RyZWFtcyhaZSxsdCxMdCl9LHF1aXQoKXtZdC5pbml0aWFsaXplZD0hMTtmb3IodmFyIFplPTA7WmU8WXQuc3RyZWFtcy5sZW5ndGg7WmUrKyl7dmFyIGx0PVl0LnN0cmVhbXNbWmVdO2x0JiZZdC5jbG9zZShs'@;
put 'dCl9fSxmaW5kT2JqZWN0KFplLGx0KXt2YXIgTHQ9WXQuYW5hbHl6ZVBhdGgoWmUsbHQpO3JldHVybiBMdC5leGlzdHM/THQub2JqZWN0Om51bGx9LGFuYWx5emVQYXRoKFplLGx0KXt0cnl7WmU9KEx0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohbHR9KSkucGF0aH1jYXRjaHt9dmFyICR0'@;
put 'PXtpc1Jvb3Q6ITEsZXhpc3RzOiExLGVycm9yOjAsbmFtZTpudWxsLHBhdGg6bnVsbCxvYmplY3Q6bnVsbCxwYXJlbnRFeGlzdHM6ITEscGFyZW50UGF0aDpudWxsLHBhcmVudE9iamVjdDpudWxsfTt0cnl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pOyR0LnBhcmVudEV4'@;
put 'aXN0cz0hMCwkdC5wYXJlbnRQYXRoPUx0LnBhdGgsJHQucGFyZW50T2JqZWN0PUx0Lm5vZGUsJHQubmFtZT1RYS5iYXNlbmFtZShaZSksTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9sbG93OiFsdH0pLCR0LmV4aXN0cz0hMCwkdC5wYXRoPUx0LnBhdGgsJHQub2JqZWN0PUx0Lm5vZGUsJHQubmFt'@;
put 'ZT1MdC5ub2RlLm5hbWUsJHQuaXNSb290PSIvIj09PUx0LnBhdGh9Y2F0Y2goRG4peyR0LmVycm9yPURuLmVycm5vfXJldHVybiAkdH0sY3JlYXRlUGF0aChaZSxsdCxMdCwkdCl7WmU9InN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKTtmb3IodmFyIERuPWx0LnNwbGl0KCIv'@;
put 'IikucmV2ZXJzZSgpO0RuLmxlbmd0aDspe3ZhciBjcj1Ebi5wb3AoKTtpZihjcil7dmFyIFJyPVFhLmpvaW4yKFplLGNyKTt0cnl7WXQubWtkaXIoUnIpfWNhdGNoe31aZT1Scn19cmV0dXJuIFJyfSxjcmVhdGVGaWxlKFplLGx0LEx0LCR0LERuKXt2YXIgY3I9UWEuam9pbjIoInN0cmluZyI9'@;
put 'PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKSxsdCksUnI9QkEoJHQsRG4pO3JldHVybiBZdC5jcmVhdGUoY3IsUnIpfSxjcmVhdGVEYXRhRmlsZShaZSxsdCxMdCwkdCxEbixjcil7dmFyIFJyPWx0O1plJiYoWmU9InN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKSxScj1s'@;
put 'dD9RYS5qb2luMihaZSxsdCk6WmUpO3ZhciBxcj1CQSgkdCxEbiksRG89WXQuY3JlYXRlKFJyLHFyKTtpZihMdCl7aWYoInN0cmluZyI9PXR5cGVvZiBMdCl7Zm9yKHZhciBHYT1uZXcgQXJyYXkoTHQubGVuZ3RoKSxIcz0wLG9sPUx0Lmxlbmd0aDtIczxvbDsrK0hzKUdhW0hzXT1MdC5jaGFy'@;
put 'Q29kZUF0KEhzKTtMdD1HYX1ZdC5jaG1vZChEbywxNDZ8cXIpO3ZhciBncz1ZdC5vcGVuKERvLDU3Nyk7WXQud3JpdGUoZ3MsTHQsMCxMdC5sZW5ndGgsMCxjciksWXQuY2xvc2UoZ3MpLFl0LmNobW9kKERvLHFyKX19LGNyZWF0ZURldmljZShaZSxsdCxMdCwkdCl7dmFyIERuPVFhLmpvaW4y'@;
put 'KCJzdHJpbmciPT10eXBlb2YgWmU/WmU6WXQuZ2V0UGF0aChaZSksbHQpLGNyPUJBKCEhTHQsISEkdCk7WXQuY3JlYXRlRGV2aWNlLm1ham9yPz89NjQ7dmFyIFJyPVl0Lm1ha2VkZXYoWXQuY3JlYXRlRGV2aWNlLm1ham9yKyssMCk7cmV0dXJuIFl0LnJlZ2lzdGVyRGV2aWNlKFJyLHtvcGVu'@;
put 'KHFyKXtxci5zZWVrYWJsZT0hMX0sY2xvc2UocXIpeyR0Py5idWZmZXI/Lmxlbmd0aCYmJHQoMTApfSxyZWFkKHFyLERvLEdhLEhzLG9sKXtmb3IodmFyIGdzPTAseGE9MDt4YTxIczt4YSsrKXt2YXIgcXM7dHJ5e3FzPUx0KCl9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfWlm'@;
put 'KHZvaWQgMD09PXFzJiYwPT09Z3MpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNik7aWYobnVsbD09cXMpYnJlYWs7Z3MrKyxEb1tHYSt4YV09cXN9cmV0dXJuIGdzJiYocXIubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksZ3N9LHdyaXRlKHFyLERvLEdhLEhzLG9sKXtmb3IodmFyIGdzPTA7'@;
put 'Z3M8SHM7Z3MrKyl0cnl7JHQoRG9bR2ErZ3NdKX1jYXRjaHt0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOSl9cmV0dXJuIEhzJiYocXIubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksZ3N9fSksWXQubWtkZXYoRG4sY3IsUnIpfSxmb3JjZUxvYWRGaWxlKFplKXtpZihaZS5pc0RldmljZXx8'@;
put 'WmUuaXNGb2xkZXJ8fFplLmxpbmt8fFplLmNvbnRlbnRzKXJldHVybiEwO2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhyb3cgbmV3IEVycm9yKCJMYXp5IGxvYWRpbmcgc2hvdWxkIGhhdmUgYmVlbiBwZXJmb3JtZWQgKGNvbnRlbnRzIHNldCkgaW4gY3JlYXRlTGF6eUZpbGUsIGJ1'@;
put 'dCBpdCB3YXMgbm90LiBMYXp5IGxvYWRpbmcgb25seSB3b3JrcyBpbiB3ZWIgd29ya2Vycy4gVXNlIC0tZW1iZWQtZmlsZSBvciAtLXByZWxvYWQtZmlsZSBpbiBlbWNjIG9uIHRoZSBtYWluIHRocmVhZC4iKTt0cnl7WmUuY29udGVudHM9QmUoWmUudXJsKSxaZS51c2VkQnl0ZXM9WmUuY29u'@;
put 'dGVudHMubGVuZ3RofWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX19LGNyZWF0ZUxhenlGaWxlKFplLGx0LEx0LCR0LERuKXtpZih0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiKXRocm93IkNhbm5vdCBkbyBzeW5jaHJvbm91cyBiaW5hcnkgWEhScyBvdXRzaWRlIHdlYndvcmtl'@;
put 'cnMgaW4gbW9kZXJuIGJyb3dzZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2MiO3ZhciBxcixEbz1ZdC5jcmVhdGVGaWxlKFplLGx0LHFyPXtpc0RldmljZTohMSx1cmw6THR9LCR0LERuKTtxci5jb250ZW50cz9Eby5jb250ZW50cz1xci5jb250ZW50czpx'@;
put 'ci51cmwmJihEby5jb250ZW50cz1udWxsLERvLnVybD1xci51cmwpLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKERvLHt1c2VkQnl0ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRlbnRzLmxlbmd0aH19fSk7dmFyIEdhPXt9O2Z1bmN0aW9uIG9sKGdzLHhhLHFzLEExLFQzKXt2'@;
put 'YXIgV2g9Z3Mubm9kZS5jb250ZW50cztpZihUMz49V2gubGVuZ3RoKXJldHVybiAwO3ZhciBBMz1NYXRoLm1pbihXaC5sZW5ndGgtVDMsQTEpO2lmKFdoLnNsaWNlKWZvcih2YXIgazM9MDtrMzxBMztrMysrKXhhW3FzK2szXT1XaFtUMytrM107ZWxzZSBmb3IoazM9MDtrMzxBMztrMysrKXhh'@;
put 'W3FzK2szXT1XaC5nZXQoVDMrazMpO3JldHVybiBBM31yZXR1cm4gT2JqZWN0LmtleXMoRG8uc3RyZWFtX29wcykuZm9yRWFjaChncz0+e3ZhciB4YT1Eby5zdHJlYW1fb3BzW2dzXTtHYVtnc109KC4uLnFzKT0+KFl0LmZvcmNlTG9hZEZpbGUoRG8pLHhhKC4uLnFzKSl9KSxHYS5yZWFkPShn'@;
put 'cyx4YSxxcyxBMSxUMyk9PihZdC5mb3JjZUxvYWRGaWxlKERvKSxvbChncyx4YSxxcyxBMSxUMykpLEdhLm1tYXA9KGdzLHhhLHFzLEExLFQzKT0+e1l0LmZvcmNlTG9hZEZpbGUoRG8pO3ZhciBXaD16Tih4YSk7aWYoIVdoKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ4KTtyZXR1cm4gb2wo'@;
put 'Z3MsdG4sV2gseGEscXMpLHtwdHI6V2gsYWxsb2NhdGVkOiEwfX0sRG8uc3RyZWFtX29wcz1HYSxEb319LFowPShaZSxsdCk9PlplP0tzKE1uLFplLGx0KToiIixVcz17REVGQVVMVF9QT0xMTUFTSzo1LGNhbGN1bGF0ZUF0KFplLGx0LEx0KXtpZihRYS5pc0FicyhsdCkpcmV0dXJuIGx0O3Zh'@;
put 'ciAkdDtpZigkdD0tMTAwPT09WmU/WXQuY3dkKCk6VXMuZ2V0U3RyZWFtRnJvbUZEKFplKS5wYXRoLDA9PWx0Lmxlbmd0aCl7aWYoIUx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtyZXR1cm4gJHR9cmV0dXJuIFFhLmpvaW4yKCR0LGx0KX0sZG9TdGF0KFplLGx0LEx0KXt2YXIgJHQ9'@;
put 'WmUobHQpO2dyW0x0Pj4yXT0kdC5kZXYsZ3JbTHQrND4+Ml09JHQubW9kZSxHbltMdCs4Pj4yXT0kdC5ubGluayxncltMdCsxMj4+Ml09JHQudWlkLGdyW0x0KzE2Pj4yXT0kdC5naWQsZ3JbTHQrMjA+PjJdPSR0LnJkZXYsYW89WyR0LnNpemU+Pj4wLChacj0kdC5zaXplLCtNYXRoLmFicyha'@;
put 'cik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxncltMdCsyND4+Ml09YW9bMF0sZ3JbTHQrMjg+PjJdPWFvWzFdLGdyW0x0KzMyPj4yXT00MDk2LGdyW0x0KzM2Pj4yXT0kdC5i'@;
put 'bG9ja3M7dmFyIERuPSR0LmF0aW1lLmdldFRpbWUoKSxjcj0kdC5tdGltZS5nZXRUaW1lKCksUnI9JHQuY3RpbWUuZ2V0VGltZSgpO3JldHVybiBhbz1bTWF0aC5mbG9vcihEbi8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcihEbi8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9v'@;
put 'cihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxncltMdCs0MD4+Ml09YW9bMF0sZ3JbTHQrNDQ+PjJdPWFvWzFdLEduW0x0KzQ4Pj4yXT1EbiUxZTMqMWUzKjFlMyxhbz1bTWF0aC5mbG9vcihjci8xZTMpPj4+MCwo'@;
put 'WnI9TWF0aC5mbG9vcihjci8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxncltMdCs1Nj4+Ml09YW9bMF0sZ3JbTHQrNjA+PjJdPWFvWzFdLEdu'@;
put 'W0x0KzY0Pj4yXT1jciUxZTMqMWUzKjFlMyxhbz1bTWF0aC5mbG9vcihSci8xZTMpPj4+MCwoWnI9TWF0aC5mbG9vcihSci8xZTMpLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2'@;
put 'NzI5Nik+Pj4wOjApXSxncltMdCs3Mj4+Ml09YW9bMF0sZ3JbTHQrNzY+PjJdPWFvWzFdLEduW0x0KzgwPj4yXT1SciUxZTMqMWUzKjFlMyxhbz1bJHQuaW5vPj4+MCwoWnI9JHQuaW5vLCtNYXRoLmFicyhacik+PTE/WnI+MD8rTWF0aC5mbG9vcihaci80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0'@;
put 'aC5jZWlsKChaci0rKH5+WnI+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxncltMdCs4OD4+Ml09YW9bMF0sZ3JbTHQrOTI+PjJdPWFvWzFdLDB9LGRvTXN5bmMoWmUsbHQsTHQsJHQsRG4pe2lmKCFZdC5pc0ZpbGUobHQubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7'@;
put 'aWYoMiYkdClyZXR1cm4gMDt2YXIgY3I9TW4uc2xpY2UoWmUsWmUrTHQpO1l0Lm1zeW5jKGx0LGNyLERuLEx0LCR0KX0sZ2V0U3RyZWFtRnJvbUZEOlplPT5ZdC5nZXRTdHJlYW1DaGVja2VkKFplKSx2YXJhcmdzOnZvaWQgMCxnZXRTdHI6WmU9PlowKFplKX0seDY9KCk9Pnt2YXIgWmU9Z3Jb'@;
put 'K1VzLnZhcmFyZ3M+PjJdO3JldHVybiBVcy52YXJhcmdzKz00LFplfSxRZz14Nixpdj0oWmUsbHQsTHQpPT5FMShaZSxNbixsdCxMdCksZWg9KFplLGx0KT0+bHQrMjA5NzE1Mj4+PjA8NDE5NDMwNS0hIVplPyhaZT4+PjApKzQyOTQ5NjcyOTYqbHQ6TmFOLGt3PVtdLE1EdD1aZT0+e3ZhciBM'@;
put 'dD0oWmUtZHQuYnVmZmVyLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2fDA7dHJ5e3JldHVybiBkdC5ncm93KEx0KSxPbigpLDF9Y2F0Y2h7fX0sWnRlPXt9LGpBPSgpPT57aWYoIWpBLnN0cmluZ3Mpe3ZhciBsdD17VVNFUjoid2ViX3VzZXIiLExPR05BTUU6IndlYl91c2VyIixQQVRIOiIvIixQ'@;
put 'V0Q6Ii8iLEhPTUU6Ii9ob21lL3dlYl91c2VyIixMQU5HOigib2JqZWN0Ij09dHlwZW9mIG5hdmlnYXRvciYmbmF2aWdhdG9yLmxhbmd1YWdlcyYmbmF2aWdhdG9yLmxhbmd1YWdlc1swXXx8IkMiKS5yZXBsYWNlKCItIiwiXyIpKyIuVVRGLTgiLF86Ii4vdGhpcy5wcm9ncmFtIn07Zm9yKHZh'@;
put 'ciBMdCBpbiBadGUpdm9pZCAwPT09WnRlW0x0XT9kZWxldGUgbHRbTHRdOmx0W0x0XT1adGVbTHRdO3ZhciAkdD1bXTtmb3IodmFyIEx0IGluIGx0KSR0LnB1c2goYCR7THR9PSR7bHRbTHRdfWApO2pBLnN0cmluZ3M9JHR9cmV0dXJuIGpBLnN0cmluZ3N9O1l0LmNyZWF0ZVByZWxvYWRlZEZp'@;
put 'bGU9KFplLGx0LEx0LCR0LERuLGNyLFJyLHFyLERvLEdhKT0+e3ZhciBIcz1sdD96cy5yZXNvbHZlKFFhLmpvaW4yKFplLGx0KSk6WmU7ZnVuY3Rpb24gZ3MoeGEpe2Z1bmN0aW9uIHFzKEExKXtHYT8uKCkscXJ8fCgoWmUsbHQsTHQsJHQsRG4sY3IpPT57WXQuY3JlYXRlRGF0YUZpbGUoWmUs'@;
put 'bHQsTHQsJHQsRG4sY3IpfSkoWmUsbHQsQTEsJHQsRG4sRG8pLGNyPy4oKSxIcigpfSgoWmUsbHQsTHQsJHQpPT57dHlwZW9mIEJyb3dzZXI8InUiJiZCcm93c2VyLmluaXQoKTt2YXIgRG49ITE7cmV0dXJuIFVOLmZvckVhY2goY3I9PntEbnx8Y3IuY2FuSGFuZGxlKGx0KSYmKGNyLmhhbmRs'@;
put 'ZShaZSxsdCxMdCwkdCksRG49ITApfSksRG59KSh4YSxIcyxxcywoKT0+e1JyPy4oKSxIcigpfSl8fHFzKHhhKX1vcigpLCJzdHJpbmciPT10eXBlb2YgTHQ/KChaZSxsdCxMdCwkdCk9Pnt2YXIgRG49YGFsICR7WmV9YDsodm9pZCAwKShaZSkudGhlbihjcj0+e2x0KG5ldyBVaW50OEFycmF5'@;
put 'KGNyKSksRG4mJkhyKCl9LGNyPT57aWYoIUx0KXRocm93YExvYWRpbmcgZGF0YSBmaWxlICIke1plfSIgZmFpbGVkLmA7THQoKX0pLERuJiZvcigpfSkoTHQsZ3MsUnIpOmdzKEx0KX0sWXQuc3RhdGljSW5pdCgpLEtvLmRvZXNOb3RFeGlzdEVycm9yPW5ldyBZdC5FcnJub0Vycm9yKDQ0KSxL'@;
put 'by5kb2VzTm90RXhpc3RFcnJvci5zdGFjaz0iPGdlbmVyaWMgZXJyb3IsIG5vIHN0YWNrPiI7dmFyIEpOLEJEdD17YTooWmUsbHQsTHQpPT57dGhyb3cgbmV3IHBzKFplKS5pbml0KGx0LEx0KSxaZX0saTpmdW5jdGlvbiBZTihaZSxsdCxMdCwkdCl7dHJ5e2lmKGx0PVVzLmdldFN0cihsdCks'@;
put 'bHQ9VXMuY2FsY3VsYXRlQXQoWmUsbHQpLC04Jkx0KXJldHVybi0yODt2YXIgY3I9WXQubG9va3VwUGF0aChsdCx7Zm9sbG93OiEwfSkubm9kZTtpZighY3IpcmV0dXJuLTQ0O3ZhciBScj0iIjtyZXR1cm4gNCZMdCYmKFJyKz0iciIpLDImTHQmJihScis9InciKSwxJkx0JiYoUnIrPSJ4Iiks'@;
put 'UnImJll0Lm5vZGVQZXJtaXNzaW9ucyhjcixScik/LTI6MH1jYXRjaChxcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09cXIubmFtZSl0aHJvdyBxcjtyZXR1cm4tcXIuZXJybm99fSxmOmZ1bmN0aW9uIEUzKFplLGx0LEx0KXtVcy52YXJhcmdzPUx0O3RyeXt2YXIgJHQ9VXMu'@;
put 'Z2V0U3RyZWFtRnJvbUZEKFplKTtzd2l0Y2gobHQpe2Nhc2UgMDppZigoRG49eDYoKSk8MClyZXR1cm4tMjg7Zm9yKDtZdC5zdHJlYW1zW0RuXTspRG4rKztyZXR1cm4gWXQuZHVwU3RyZWFtKCR0LERuKS5mZDtjYXNlIDE6Y2FzZSAyOmNhc2UgMTM6Y2FzZSAxNDpyZXR1cm4gMDtjYXNlIDM6'@;
put 'cmV0dXJuICR0LmZsYWdzO2Nhc2UgNDp2YXIgRG49eDYoKTtyZXR1cm4gJHQuZmxhZ3N8PURuLDA7Y2FzZSAxMjpyZXR1cm4gRG49UWcoKSxDcltEbiswPj4xXT0yLDB9cmV0dXJuLTI4fWNhdGNoKHFyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1xci5uYW1lKXRocm93IHFy'@;
put 'O3JldHVybi1xci5lcnJub319LHg6ZnVuY3Rpb24gR04oWmUsbHQpe3RyeXt2YXIgTHQ9VXMuZ2V0U3RyZWFtRnJvbUZEKFplKTtyZXR1cm4gVXMuZG9TdGF0KFl0LnN0YXQsTHQucGF0aCxsdCl9Y2F0Y2goJHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PSR0Lm5hbWUpdGhy'@;
put 'b3cgJHQ7cmV0dXJuLSR0LmVycm5vfX0sazpmdW5jdGlvbiAkTihaZSxsdCxMdCl7VXMudmFyYXJncz1MdDt0cnl7dmFyICR0PVVzLmdldFN0cmVhbUZyb21GRChaZSk7c3dpdGNoKGx0KXtjYXNlIDIxNTA5OmNhc2UgMjE1MTA6Y2FzZSAyMTUxMTpjYXNlIDIxNTEyOmNhc2UgMjE1MjQ6Y2Fz'@;
put 'ZSAyMTUxNTpyZXR1cm4gJHQudHR5PzA6LTU5O2Nhc2UgMjE1MDU6aWYoISR0LnR0eSlyZXR1cm4tNTk7aWYoJHQudHR5Lm9wcy5pb2N0bF90Y2dldHMpe3ZhciBEbj0kdC50dHkub3BzLmlvY3RsX3RjZ2V0cygkdCksY3I9UWcoKTtncltjcj4+Ml09RG4uY19pZmxhZ3x8MCxncltjcis0Pj4y'@;
put 'XT1Ebi5jX29mbGFnfHwwLGdyW2NyKzg+PjJdPURuLmNfY2ZsYWd8fDAsZ3JbY3IrMTI+PjJdPURuLmNfbGZsYWd8fDA7Zm9yKHZhciBScj0wO1JyPDMyO1JyKyspdG5bY3IrUnIrMTddPURuLmNfY2NbUnJdfHwwO3JldHVybiAwfXJldHVybiAwO2Nhc2UgMjE1MDY6Y2FzZSAyMTUwNzpjYXNl'@;
put 'IDIxNTA4OmlmKCEkdC50dHkpcmV0dXJuLTU5O2lmKCR0LnR0eS5vcHMuaW9jdGxfdGNzZXRzKXtjcj1RZygpO3ZhciBxcj1ncltjcj4+Ml0sRG89Z3JbY3IrND4+Ml0sR2E9Z3JbY3IrOD4+Ml0sSHM9Z3JbY3IrMTI+PjJdLG9sPVtdO2ZvcihScj0wO1JyPDMyO1JyKyspb2wucHVzaCh0bltj'@;
put 'citScisxN10pO3JldHVybiAkdC50dHkub3BzLmlvY3RsX3Rjc2V0cygkdC50dHksbHQse2NfaWZsYWc6cXIsY19vZmxhZzpEbyxjX2NmbGFnOkdhLGNfbGZsYWc6SHMsY19jYzpvbH0pfXJldHVybiAwO2Nhc2UgMjE1MTk6cmV0dXJuICR0LnR0eT8oY3I9UWcoKSxncltjcj4+Ml09MCwwKTot'@;
put 'NTk7Y2FzZSAyMTUyMDpyZXR1cm4gJHQudHR5Py0yODotNTk7Y2FzZSAyMTUzMTpyZXR1cm4gY3I9UWcoKSxZdC5pb2N0bCgkdCxsdCxjcik7Y2FzZSAyMTUyMzppZighJHQudHR5KXJldHVybi01OTtpZigkdC50dHkub3BzLmlvY3RsX3Rpb2Nnd2luc3ope3ZhciBncz0kdC50dHkub3BzLmlv'@;
put 'Y3RsX3Rpb2Nnd2luc3ooJHQudHR5KTtjcj1RZygpLENyW2NyPj4xXT1nc1swXSxDcltjcisyPj4xXT1nc1sxXX1yZXR1cm4gMDtkZWZhdWx0OnJldHVybi0yOH19Y2F0Y2goeGEpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PXhhLm5hbWUpdGhyb3cgeGE7cmV0dXJuLXhhLmVy'@;
put 'cm5vfX0sdjpmdW5jdGlvbiBLTihaZSxsdCxMdCwkdCl7dHJ5e2x0PVVzLmdldFN0cihsdCk7dmFyIERuPTI1NiYkdCxjcj00MDk2JiR0O3JldHVybiAkdCY9LTY0MDEsbHQ9VXMuY2FsY3VsYXRlQXQoWmUsbHQsY3IpLFVzLmRvU3RhdChEbj9ZdC5sc3RhdDpZdC5zdGF0LGx0LEx0KX1jYXRj'@;
put 'aChScil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09UnIubmFtZSl0aHJvdyBScjtyZXR1cm4tUnIuZXJybm99fSxoOmZ1bmN0aW9uIHFOKFplLGx0LEx0LCR0KXtVcy52YXJhcmdzPSR0O3RyeXtsdD1Vcy5nZXRTdHIobHQpLGx0PVVzLmNhbGN1bGF0ZUF0KFplLGx0KTt2YXIg'@;
put 'RG49JHQ/eDYoKTowO3JldHVybiBZdC5vcGVuKGx0LEx0LERuKS5mZH1jYXRjaChjcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09Y3IubmFtZSl0aHJvdyBjcjtyZXR1cm4tY3IuZXJybm99fSxxOmZ1bmN0aW9uIHVhKFplLGx0LEx0LCR0KXt0cnl7aWYobHQ9VXMuZ2V0U3Ry'@;
put 'KGx0KSxsdD1Vcy5jYWxjdWxhdGVBdChaZSxsdCksJHQ8PTApcmV0dXJuLTI4O3ZhciBEbj1ZdC5yZWFkbGluayhsdCksY3I9TWF0aC5taW4oJHQsZXMoRG4pKSxScj10bltMdCtjcl07cmV0dXJuIGl2KERuLEx0LCR0KzEpLHRuW0x0K2NyXT1Scixjcn1jYXRjaChxcil7aWYodHlwZW9mIFl0'@;
put 'PiJ1Inx8IkVycm5vRXJyb3IiIT09cXIubmFtZSl0aHJvdyBxcjtyZXR1cm4tcXIuZXJybm99fSxyOmZ1bmN0aW9uIG1yKFplKXt0cnl7cmV0dXJuIFplPVVzLmdldFN0cihaZSksWXQucm1kaXIoWmUpLDB9Y2F0Y2gobHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PWx0Lm5h'@;
put 'bWUpdGhyb3cgbHQ7cmV0dXJuLWx0LmVycm5vfX0sdzpmdW5jdGlvbiBlbyhaZSxsdCl7dHJ5e3JldHVybiBaZT1Vcy5nZXRTdHIoWmUpLFVzLmRvU3RhdChZdC5zdGF0LFplLGx0KX1jYXRjaChMdCl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09THQubmFtZSl0aHJvdyBMdDty'@;
put 'ZXR1cm4tTHQuZXJybm99fSxzOmZ1bmN0aW9uIFhvKFplLGx0LEx0KXt0cnl7cmV0dXJuIGx0PVVzLmdldFN0cihsdCksbHQ9VXMuY2FsY3VsYXRlQXQoWmUsbHQpLDA9PT1MdD9ZdC51bmxpbmsobHQpOjUxMj09PUx0P1l0LnJtZGlyKGx0KTpLcigiSW52YWxpZCBmbGFncyBwYXNzZWQgdG8g'@;
put 'dW5saW5rYXQiKSwwfWNhdGNoKCR0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT0kdC5uYW1lKXRocm93ICR0O3JldHVybi0kdC5lcnJub319LGo6KCk9PktyKCIiKSx5OigpPT4xLHo6KFplLGx0LEx0KT0+TW4uY29weVdpdGhpbihaZSxsdCxsdCtMdCksbDpmdW5jdGlvbiBv'@;
put 'dihaZSxsdCxMdCwkdCxEbixjcixScixxcil7dmFyIERvPWVoKERuLGNyKTt0cnl7aWYoaXNOYU4oRG8pKXJldHVybiA2MTt2YXIgR2E9VXMuZ2V0U3RyZWFtRnJvbUZEKCR0KSxIcz1ZdC5tbWFwKEdhLFplLERvLGx0LEx0KSxvbD1Icy5wdHI7cmV0dXJuIGdyW1JyPj4yXT1Icy5hbGxvY2F0'@;
put 'ZWQsR25bcXI+PjJdPW9sLDB9Y2F0Y2goZ3Mpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PWdzLm5hbWUpdGhyb3cgZ3M7cmV0dXJuLWdzLmVycm5vfX0sbTpmdW5jdGlvbiBXMChaZSxsdCxMdCwkdCxEbixjcixScil7dmFyIHFyPWVoKGNyLFJyKTt0cnl7dmFyIERvPVVzLmdl'@;
put 'dFN0cmVhbUZyb21GRChEbik7MiZMdCYmVXMuZG9Nc3luYyhaZSxEbyxsdCwkdCxxcil9Y2F0Y2goR2Epe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PUdhLm5hbWUpdGhyb3cgR2E7cmV0dXJuLUdhLmVycm5vfX0sbzooWmUsbHQsTHQsJHQpPT57dmFyIERuPShuZXcgRGF0ZSku'@;
put 'Z2V0RnVsbFllYXIoKSxjcj1uZXcgRGF0ZShEbiwwLDEpLFJyPW5ldyBEYXRlKERuLDYsMSkscXI9Y3IuZ2V0VGltZXpvbmVPZmZzZXQoKSxEbz1Sci5nZXRUaW1lem9uZU9mZnNldCgpLEdhPU1hdGgubWF4KHFyLERvKTtHbltaZT4+Ml09NjAqR2EsZ3JbbHQ+PjJdPSsocXIhPURvKTt2YXIg'@;
put 'SHM9eGE9Pnt2YXIgcXM9eGE+PTA/Ii0iOiIrIixBMT1NYXRoLmFicyh4YSk7cmV0dXJuYFVUQyR7cXN9JHtTdHJpbmcoTWF0aC5mbG9vcihBMS82MCkpLnBhZFN0YXJ0KDIsIjAiKX0ke1N0cmluZyhBMSU2MCkucGFkU3RhcnQoMiwiMCIpfWB9LG9sPUhzKHFyKSxncz1IcyhEbyk7RG88cXI/'@;
put 'KGl2KG9sLEx0LDE3KSxpdihncywkdCwxNykpOihpdihvbCwkdCwxNyksaXYoZ3MsTHQsMTcpKX0sQTooWmUsbHQsTHQpPT4oKFplLGx0LEx0KT0+e3ZhciAkdD0oKFplLGx0KT0+e2t3Lmxlbmd0aD0wO2Zvcih2YXIgTHQ7THQ9TW5bWmUrK107KXt2YXIgJHQ9MTA1IT1MdDtsdCs9KCR0Jj0x'@;
put 'MTIhPUx0KSYmbHQlOD80OjAsa3cucHVzaCgxMTI9PUx0P0duW2x0Pj4yXToxMDU9PUx0P2dyW2x0Pj4yXTpfaVtsdD4+M10pLGx0Kz0kdD84OjR9cmV0dXJuIGt3fSkobHQsTHQpO3JldHVybiBqb1taZV0oLi4uJHQpfSkoWmUsbHQsTHQpLGM6KCk9PkRhdGUubm93KCkscDpaZT0+e3ZhciBs'@;
put 'dD1Nbi5sZW5ndGgsTHQ9MjE0NzQ4MzY0ODtpZigoWmU+Pj49MCk+THQpcmV0dXJuITE7Zm9yKHZhciAkdD0xOyR0PD00OyR0Kj0yKXt2YXIgRG49bHQqKDErLjIvJHQpO0RuPU1hdGgubWluKERuLFplKzEwMDY2MzI5Nik7dmFyIGNyPU1hdGgubWluKEx0LE5BKE1hdGgubWF4KFplLERuKSw2'@;
put 'NTUzNikpO2lmKE1EdChjcikpcmV0dXJuITB9cmV0dXJuITF9LHQ6KFplLGx0KT0+e3ZhciBMdD0wO3JldHVybiBqQSgpLmZvckVhY2goKCR0LERuKT0+e3ZhciBjcj1sdCtMdDtHbltaZSs0KkRuPj4yXT1jciwoKFplLGx0KT0+e2Zvcih2YXIgTHQ9MDtMdDxaZS5sZW5ndGg7KytMdCl0blts'@;
put 'dCsrXT1aZS5jaGFyQ29kZUF0KEx0KTt0bltsdF09MH0pKCR0LGNyKSxMdCs9JHQubGVuZ3RoKzF9KSwwfSx1OihaZSxsdCk9Pnt2YXIgTHQ9akEoKTtHbltaZT4+Ml09THQubGVuZ3RoO3ZhciAkdD0wO3JldHVybiBMdC5mb3JFYWNoKERuPT4kdCs9RG4ubGVuZ3RoKzEpLEduW2x0Pj4yXT0k'@;
put 'dCwwfSxnOihaZSxsdCk9PnsoWmU9PnsoKFplLGx0KT0+e3Rocm93IGx0fSkoMCxuZXcgSWEoWmUpKX0pKFplKX0sYjpmdW5jdGlvbiBPRHQoWmUpe3RyeXt2YXIgbHQ9VXMuZ2V0U3RyZWFtRnJvbUZEKFplKTtyZXR1cm4gWXQuY2xvc2UobHQpLDB9Y2F0Y2goTHQpe2lmKHR5cGVvZiBZdD4i'@;
put 'dSJ8fCJFcnJub0Vycm9yIiE9PUx0Lm5hbWUpdGhyb3cgTHQ7cmV0dXJuIEx0LmVycm5vfX0sZTpmdW5jdGlvbiBGRHQoWmUsbHQsTHQsJHQpe3RyeXt2YXIgY3I9KChaZSxsdCxMdCwkdCk9Pntmb3IodmFyIERuPTAsY3I9MDtjcjxMdDtjcisrKXt2YXIgUnI9R25bbHQ+PjJdLHFyPUduW2x0'@;
put 'KzQ+PjJdO2x0Kz04O3ZhciBEbz1ZdC5yZWFkKFplLHRuLFJyLHFyLCR0KTtpZihEbzwwKXJldHVybi0xO2lmKERuKz1EbyxEbzxxcilicmVhazt0eXBlb2YgJHQ8InUiJiYoJHQrPURvKX1yZXR1cm4gRG59KShVcy5nZXRTdHJlYW1Gcm9tRkQoWmUpLGx0LEx0KTtyZXR1cm4gR25bJHQ+PjJd'@;
put 'PWNyLDB9Y2F0Y2goUnIpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PVJyLm5hbWUpdGhyb3cgUnI7cmV0dXJuIFJyLmVycm5vfX0sbjpmdW5jdGlvbiBIRHQoWmUsbHQsTHQsJHQsRG4pe3ZhciBjcj1laChsdCxMdCk7dHJ5e2lmKGlzTmFOKGNyKSlyZXR1cm4gNjE7dmFyIFJy'@;
put 'PVVzLmdldFN0cmVhbUZyb21GRChaZSk7cmV0dXJuIFl0Lmxsc2VlayhScixjciwkdCksYW89W1JyLnBvc2l0aW9uPj4+MCwoWnI9UnIucG9zaXRpb24sK01hdGguYWJzKFpyKT49MT9acj4wPytNYXRoLmZsb29yKFpyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKFpyLSsofn5acj4+'@;
put 'PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLGdyW0RuPj4yXT1hb1swXSxncltEbis0Pj4yXT1hb1sxXSxSci5nZXRkZW50cyYmMD09PWNyJiYwPT09JHQmJihSci5nZXRkZW50cz1udWxsKSwwfWNhdGNoKHFyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1xci5uYW1lKXRocm93'@;
put 'IHFyO3JldHVybiBxci5lcnJub319LGQ6ZnVuY3Rpb24gVkR0KFplLGx0LEx0LCR0KXt0cnl7dmFyIGNyPSgoWmUsbHQsTHQsJHQpPT57Zm9yKHZhciBEbj0wLGNyPTA7Y3I8THQ7Y3IrKyl7dmFyIFJyPUduW2x0Pj4yXSxxcj1HbltsdCs0Pj4yXTtsdCs9ODt2YXIgRG89WXQud3JpdGUoWmUs'@;
put 'dG4sUnIscXIsJHQpO2lmKERvPDApcmV0dXJuLTE7aWYoRG4rPURvLERvPHFyKWJyZWFrO3R5cGVvZiAkdDwidSImJigkdCs9RG8pfXJldHVybiBEbn0pKFVzLmdldFN0cmVhbUZyb21GRChaZSksbHQsTHQpO3JldHVybiBHblskdD4+Ml09Y3IsMH1jYXRjaChScil7aWYodHlwZW9mIFl0PiJ1'@;
put 'Inx8IkVycm5vRXJyb3IiIT09UnIubmFtZSl0aHJvdyBScjtyZXR1cm4gUnIuZXJybm99fX0sTGw9ZnVuY3Rpb24gTXIoKXtvcigpO3ZhciBMdD1mdW5jdGlvbiBOcigpe3JldHVybnthOkJEdH19KCk7cmV0dXJuICRuPz89ZnVuY3Rpb24gcHIoKXt2YXIgWmU9ImdyYXBodml6bGliLndhc20i'@;
put 'O3JldHVybiB5bihaZSk/WmU6ZnVuY3Rpb24gYmUoWmUpe3JldHVybiIiK1plfShaZSl9KCksZnVuY3Rpb24gc3IoWmUsbHQsTHQsJHQpe3JldHVybiBaZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nfHx5bihsdCl8fChaZT0+WmUuc3RhcnRz'@;
put 'V2l0aCgiZmlsZTovLyIpKShsdCl8fCJmdW5jdGlvbiIhPXR5cGVvZiBmZXRjaD9abihsdCxMdCwkdCk6ZmV0Y2gobHQse2NyZWRlbnRpYWxzOiJzYW1lLW9yaWdpbiJ9KS50aGVuKERuPT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhEbixMdCkudGhlbigkdCxmdW5jdGlvbihS'@;
put 'cil7cmV0dXJuIHJ0KGB3YXNtIHN0cmVhbWluZyBjb21waWxlIGZhaWxlZDogJHtScn1gKSxydCgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSxabihsdCxMdCwkdCl9KSl9KHB0LCRuLEx0LGZ1bmN0aW9uIGx0KCR0KXshZnVuY3Rpb24gWmUoJHQsRG4pe3Jl'@;
put 'dHVybiBkdD0oTGw9JHQuZXhwb3J0cykuQixPbigpLGZ1bmN0aW9uIHZ0KFplKXtKbi51bnNoaWZ0KFplKX0oTGwuQyksSHIoKSxMbH0oJHQuaW5zdGFuY2UpfSkuY2F0Y2goZikse319KCksXzdlPShkLl93ZWJpZGxfZnJlZT1aZT0+KGQuX3dlYmlkbF9mcmVlPUxsLkQpKFplKSxkLl9mcmVl'@;
put 'PVplPT4oZC5fZnJlZT1MbC5FKShaZSksZC5fd2ViaWRsX21hbGxvYz1aZT0+KGQuX3dlYmlkbF9tYWxsb2M9TGwuRikoWmUpLGQuX21hbGxvYz1aZT0+KGQuX21hbGxvYz1MbC5HKShaZSksZC5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1aZT0+KF83ZT1kLl9lbXNj'@;
put 'cmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPUxsLkgpKFplKSksdzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9HcmFwaHZpel8yPShaZSxsdCk9Pih3N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9TGwuSSkoWmUsbHQpLEM3ZT1kLl9lbXNj'@;
put 'cmlwdGVuX2JpbmRfR3JhcGh2aXpfdmVyc2lvbl8wPSgpPT4oQzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9TGwuSikoKSxTN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPSgpPT4oUzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZp'@;
put 'el9sYXN0RXJyb3JfMD1MbC5LKSgpLE03ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPShaZSxsdCxMdCk9PihNN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2NyZWF0ZUZpbGVfMj1MbC5MKShaZSxsdCxMdCkseDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9H'@;
put 'cmFwaHZpel9sYXlvdXRfMz0oWmUsbHQsTHQsJHQpPT4oeDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz1MbC5NKShaZSxsdCxMdCwkdCksRTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9hY3ljbGljXzM9KFplLGx0LEx0LCR0KT0+KEU3ZT1kLl9lbXNjcmlw'@;
put 'dGVuX2JpbmRfR3JhcGh2aXpfYWN5Y2xpY18zPUxsLk4pKFplLGx0LEx0LCR0KSxUN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3RyZWRfMz0oWmUsbHQsTHQsJHQpPT4oVDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel90cmVkXzM9TGwuTykoWmUsbHQsTHQsJHQpLEE3ZT1k'@;
put 'Ll9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVuXzQ9KFplLGx0LEx0LCR0LERuKT0+KEE3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVuXzQ9TGwuUCkoWmUsbHQsTHQsJHQsRG4pLGs3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2xheW91'@;
put 'dF9yZXN1bHRfMD1aZT0+KGs3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2xheW91dF9yZXN1bHRfMD1MbC5RKShaZSksRDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfbGF5b3V0X3Jlc3VsdF8xPShaZSxsdCk9PihEN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dy'@;
put 'YXBodml6X3NldF9sYXlvdXRfcmVzdWx0XzE9TGwuUikoWmUsbHQpLEk3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2FjeWNsaWNfb3V0RmlsZV8wPVplPT4oSTdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19vdXRGaWxlXzA9TGwuUykoWmUpLFI3'@;
put 'ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfb3V0RmlsZV8xPShaZSxsdCk9PihSN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9hY3ljbGljX291dEZpbGVfMT1MbC5UKShaZSxsdCksTDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRf'@;
put 'YWN5Y2xpY19udW1fcmV2XzA9WmU9PihMN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX251bV9yZXZfMD1MbC5VKShaZSksTzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfYWN5Y2xpY19udW1fcmV2XzE9KFplLGx0KT0+KE83ZT1kLl9lbXNjcmlw'@;
put 'dGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfbnVtX3Jldl8xPUxsLlYpKFplLGx0KSxQN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF90cmVkX291dF8wPVplPT4oUDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9vdXRfMD1MbC5XKShaZSksRjdl'@;
put 'PWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9vdXRfMT0oWmUsbHQpPT4oRjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9vdXRfMT1MbC5YKShaZSxsdCksSDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9lcnJfMD1aZT0+'@;
put 'KEg3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfZXJyXzA9TGwuWSkoWmUpLE43ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9KFplLGx0KT0+KE43ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9TGwu'@;
put 'WikoWmUsbHQpLFY3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1aZT0+KFY3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1MbC5fKShaZSksQjdlPShaZSxsdCk9PihCN2U9TGwuYWEpKFplLGx0KTtmdW5jdGlvbiBqN2UoKXtO'@;
put 'dD4wfHwoZnVuY3Rpb24gd2koKXtaYSh6cil9KCksTnQ+MCl8fGZ1bmN0aW9uIFplKCl7Sk58fChKTj0hMCxkLmNhbGxlZFJ1bj0hMCwhSnQmJihmdW5jdGlvbiB0bygpeyFkLm5vRlNJbml0JiYhWXQuaW5pdGlhbGl6ZWQmJll0LmluaXQoKSxZdC5pZ25vcmVQZXJtaXNzaW9ucz0hMSxkNC5p'@;
put 'bml0KCksWmEoSm4pfSgpLGgoZCksZnVuY3Rpb24gcG8oKXtaYShEcil9KCkpKX0oKX1mdW5jdGlvbiBuZigpe31mdW5jdGlvbiBRTihaZSl7cmV0dXJuKFplfHxuZikuX19jYWNoZV9ffWZ1bmN0aW9uIFd0ZShaZSxsdCl7dmFyIEx0PVFOKGx0KSwkdD1MdFtaZV07cmV0dXJuICR0fHwoKCR0'@;
put 'PU9iamVjdC5jcmVhdGUoKGx0fHxuZikucHJvdG90eXBlKSkucHRyPVplLEx0W1plXT0kdCl9ZC5VVEY4VG9TdHJpbmc9WjAsSG49ZnVuY3Rpb24gWmUoKXtKTnx8ajdlKCksSk58fChIbj1aZSl9LGo3ZSgpLChuZi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuZi5wcm90b3R5cGUpKS5jb25z'@;
put 'dHJ1Y3Rvcj1uZixuZi5wcm90b3R5cGUuX19jbGFzc19fPW5mLG5mLl9fY2FjaGVfXz17fSxkLldyYXBwZXJPYmplY3Q9bmYsZC5nZXRDYWNoZT1RTixkLndyYXBQb2ludGVyPVd0ZSxkLmNhc3RPYmplY3Q9ZnVuY3Rpb24gWUR0KFplLGx0KXtyZXR1cm4gV3RlKFplLnB0cixsdCl9LGQuTlVM'@;
put 'TD1XdGUoMCksZC5kZXN0cm95PWZ1bmN0aW9uIEdEdChaZSl7aWYoIVplLl9fZGVzdHJveV9fKXRocm93IkVycm9yOiBDYW5ub3QgZGVzdHJveSBvYmplY3QuIChEaWQgeW91IGNyZWF0ZSBpdCB5b3Vyc2VsZj8pIjtaZS5fX2Rlc3Ryb3lfXygpLGRlbGV0ZSBRTihaZS5fX2NsYXNzX18pW1pl'@;
put 'LnB0cl19LGQuY29tcGFyZT1mdW5jdGlvbiAkRHQoWmUsbHQpe3JldHVybiBaZS5wdHI9PT1sdC5wdHJ9LGQuZ2V0UG9pbnRlcj1mdW5jdGlvbiBLRHQoWmUpe3JldHVybiBaZS5wdHJ9LGQuZ2V0Q2xhc3M9ZnVuY3Rpb24gcUR0KFplKXtyZXR1cm4gWmUuX19jbGFzc19ffTt2YXIgWnM9e2J1'@;
put 'ZmZlcjowLHNpemU6MCxwb3M6MCx0ZW1wczpbXSxuZWVkZWQ6MCxwcmVwYXJlKCl7aWYoWnMubmVlZGVkKXtmb3IodmFyIFplPTA7WmU8WnMudGVtcHMubGVuZ3RoO1plKyspZC5fd2ViaWRsX2ZyZWUoWnMudGVtcHNbWmVdKTtacy50ZW1wcy5sZW5ndGg9MCxkLl93ZWJpZGxfZnJlZShacy5i'@;
put 'dWZmZXIpLFpzLmJ1ZmZlcj0wLFpzLnNpemUrPVpzLm5lZWRlZCxacy5uZWVkZWQ9MH1acy5idWZmZXJ8fChacy5zaXplKz0xMjgsWnMuYnVmZmVyPWQuX3dlYmlkbF9tYWxsb2MoWnMuc2l6ZSksQ24oWnMuYnVmZmVyKSksWnMucG9zPTB9LGFsbG9jKFplLGx0KXtDbihacy5idWZmZXIpO3Zh'@;
put 'ciBEbiwkdD1aZS5sZW5ndGgqbHQuQllURVNfUEVSX0VMRU1FTlQ7cmV0dXJuICR0PU5BKCR0LDgpLFpzLnBvcyskdD49WnMuc2l6ZT8oQ24oJHQ+MCksWnMubmVlZGVkKz0kdCxEbj1kLl93ZWJpZGxfbWFsbG9jKCR0KSxacy50ZW1wcy5wdXNoKERuKSk6KERuPVpzLmJ1ZmZlcitacy5wb3Ms'@;
put 'WnMucG9zKz0kdCksRG59LGNvcHkoWmUsbHQsTHQpe0x0Lz1sdC5CWVRFU19QRVJfRUxFTUVOVDtmb3IodmFyICR0PTA7JHQ8WmUubGVuZ3RoOyR0KyspbHRbTHQrJHRdPVplWyR0XX19O2Z1bmN0aW9uIHJmKFplKXtpZigic3RyaW5nIj09dHlwZW9mIFplKXt2YXIgbHQ9ZnVuY3Rpb24geDMo'@;
put 'WmUsbHQsTHQpe3ZhciAkdD1MdD4wP0x0OmVzKFplKSsxLERuPW5ldyBBcnJheSgkdCksY3I9RTEoWmUsRG4sMCxEbi5sZW5ndGgpO3JldHVybiBsdCYmKERuLmxlbmd0aD1jciksRG59KFplKSxMdD1acy5hbGxvYyhsdCx0bik7cmV0dXJuIFpzLmNvcHkobHQsdG4sTHQpLEx0fXJldHVybiBa'@;
put 'ZX1mdW5jdGlvbiBlNSgpe3Rocm93ImNhbm5vdCBjb25zdHJ1Y3QgYSBWb2lkUHRyLCBubyBjb25zdHJ1Y3RvciBpbiBJREwifWZ1bmN0aW9uIGlhKFplLGx0KXtaZSYmIm9iamVjdCI9PXR5cGVvZiBaZSYmKFplPVplLnB0ciksbHQmJiJvYmplY3QiPT10eXBlb2YgbHQmJihsdD1sdC5wdHIp'@;
put 'LHRoaXMucHRyPXc3ZShaZSxsdCksUU4oaWEpW3RoaXMucHRyXT10aGlzfXJldHVybihlNS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuZi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lNSxlNS5wcm90b3R5cGUuX19jbGFzc19fPWU1LGU1Ll9fY2FjaGVfXz17fSxkLlZvaWRQdHI9ZTUsZTUu'@;
put 'cHJvdG90eXBlLl9fZGVzdHJveV9fPWU1LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe183ZSh0aGlzLnB0cil9LChpYS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuZi5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1pYSxpYS5wcm90b3R5cGUuX19jbGFzc19fPWlhLGlhLl9fY2Fj'@;
put 'aGVfXz17fSxkLkdyYXBodml6PWlhLGlhLnByb3RvdHlwZS52ZXJzaW9uPWlhLnByb3RvdHlwZS52ZXJzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIFowKEM3ZSgpKX0saWEucHJvdG90eXBlLmxhc3RFcnJvcj1pYS5wcm90b3R5cGUubGFzdEVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIFowKFM3ZSgp'@;
put 'KX0saWEucHJvdG90eXBlLmNyZWF0ZUZpbGU9aWEucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oWmUsbHQpe3ZhciBMdD10aGlzLnB0cjtacy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOnJmKFplKSxsdD1sdCYmIm9iamVjdCI9PXR5cGVvZiBsdD9s'@;
put 'dC5wdHI6cmYobHQpLE03ZShMdCxaZSxsdCl9LGlhLnByb3RvdHlwZS5sYXlvdXQ9aWEucHJvdG90eXBlLmxheW91dD1mdW5jdGlvbihaZSxsdCxMdCl7dmFyICR0PXRoaXMucHRyO3JldHVybiBacy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOnJmKFplKSxs'@;
put 'dD1sdCYmIm9iamVjdCI9PXR5cGVvZiBsdD9sdC5wdHI6cmYobHQpLEx0PUx0JiYib2JqZWN0Ij09dHlwZW9mIEx0P0x0LnB0cjpyZihMdCksWjAoeDdlKCR0LFplLGx0LEx0KSl9LGlhLnByb3RvdHlwZS5hY3ljbGljPWlhLnByb3RvdHlwZS5hY3ljbGljPWZ1bmN0aW9uKFplLGx0LEx0KXt2'@;
put 'YXIgJHQ9dGhpcy5wdHI7cmV0dXJuIFpzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6cmYoWmUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxMdCYmIm9iamVjdCI9PXR5cGVvZiBMdCYmKEx0PUx0LnB0ciksISFFN2UoJHQsWmUsbHQs'@;
put 'THQpfSxpYS5wcm90b3R5cGUudHJlZD1pYS5wcm90b3R5cGUudHJlZD1mdW5jdGlvbihaZSxsdCxMdCl7dmFyICR0PXRoaXMucHRyO1pzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6cmYoWmUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRy'@;
put 'KSxMdCYmIm9iamVjdCI9PXR5cGVvZiBMdCYmKEx0PUx0LnB0ciksVDdlKCR0LFplLGx0LEx0KX0saWEucHJvdG90eXBlLnVuZmxhdHRlbj1pYS5wcm90b3R5cGUudW5mbGF0dGVuPWZ1bmN0aW9uKFplLGx0LEx0LCR0KXt2YXIgRG49dGhpcy5wdHI7cmV0dXJuIFpzLnByZXBhcmUoKSxaZT1a'@;
put 'ZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6cmYoWmUpLGx0JiYib2JqZWN0Ij09dHlwZW9mIGx0JiYobHQ9bHQucHRyKSxMdCYmIm9iamVjdCI9PXR5cGVvZiBMdCYmKEx0PUx0LnB0ciksJHQmJiJvYmplY3QiPT10eXBlb2YgJHQmJigkdD0kdC5wdHIpLFowKEE3ZShEbixaZSxsdCxM'@;
put 'dCwkdCkpfSxpYS5wcm90b3R5cGUuZ2V0X2xheW91dF9yZXN1bHQ9aWEucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0PWZ1bmN0aW9uKCl7cmV0dXJuIFowKGs3ZSh0aGlzLnB0cikpfSxpYS5wcm90b3R5cGUuc2V0X2xheW91dF9yZXN1bHQ9aWEucHJvdG90eXBlLnNldF9sYXlvdXRfcmVz'@;
put 'dWx0PWZ1bmN0aW9uKFplKXt2YXIgbHQ9dGhpcy5wdHI7WnMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjpyZihaZSksRDdlKGx0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGlhLnByb3RvdHlwZSwibGF5b3V0X3Jlc3VsdCIse2dldDppYS5wcm90b3R5'@;
put 'cGUuZ2V0X2xheW91dF9yZXN1bHQsc2V0OmlhLnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3VsdH0pLGlhLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19vdXRGaWxlPWlhLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19vdXRGaWxlPWZ1bmN0aW9uKCl7cmV0dXJuIFowKEk3ZSh0aGlzLnB0cikpfSxpYS5w'@;
put 'cm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZT1pYS5wcm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZT1mdW5jdGlvbihaZSl7dmFyIGx0PXRoaXMucHRyO1pzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6cmYoWmUpLFI3ZShsdCxaZSl9LE9iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShpYS5wcm90b3R5cGUsImFjeWNsaWNfb3V0RmlsZSIse2dldDppYS5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0RmlsZSxzZXQ6aWEucHJvdG90eXBlLnNldF9hY3ljbGljX291dEZpbGV9KSxpYS5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3Jldj1pYS5wcm90b3R5'@;
put 'cGUuZ2V0X2FjeWNsaWNfbnVtX3Jldj1mdW5jdGlvbigpe3JldHVybiBMN2UodGhpcy5wdHIpfSxpYS5wcm90b3R5cGUuc2V0X2FjeWNsaWNfbnVtX3Jldj1pYS5wcm90b3R5cGUuc2V0X2FjeWNsaWNfbnVtX3Jldj1mdW5jdGlvbihaZSl7WmUmJiJvYmplY3QiPT10eXBlb2YgWmUmJihaZT1a'@;
put 'ZS5wdHIpLE83ZSh0aGlzLnB0cixaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpYS5wcm90b3R5cGUsImFjeWNsaWNfbnVtX3JldiIse2dldDppYS5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfbnVtX3JldixzZXQ6aWEucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXZ9KSxpYS5wcm90b3R5'@;
put 'cGUuZ2V0X3RyZWRfb3V0PWlhLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQ9ZnVuY3Rpb24oKXtyZXR1cm4gWjAoUDdlKHRoaXMucHRyKSl9LGlhLnByb3RvdHlwZS5zZXRfdHJlZF9vdXQ9aWEucHJvdG90eXBlLnNldF90cmVkX291dD1mdW5jdGlvbihaZSl7dmFyIGx0PXRoaXMucHRyO1pzLnBy'@;
put 'ZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6cmYoWmUpLEY3ZShsdCxaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpYS5wcm90b3R5cGUsInRyZWRfb3V0Iix7Z2V0OmlhLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQsc2V0OmlhLnByb3RvdHlwZS5zZXRfdHJlZF9v'@;
put 'dXR9KSxpYS5wcm90b3R5cGUuZ2V0X3RyZWRfZXJyPWlhLnByb3RvdHlwZS5nZXRfdHJlZF9lcnI9ZnVuY3Rpb24oKXtyZXR1cm4gWjAoSDdlKHRoaXMucHRyKSl9LGlhLnByb3RvdHlwZS5zZXRfdHJlZF9lcnI9aWEucHJvdG90eXBlLnNldF90cmVkX2Vycj1mdW5jdGlvbihaZSl7dmFyIGx0'@;
put 'PXRoaXMucHRyO1pzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6cmYoWmUpLE43ZShsdCxaZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpYS5wcm90b3R5cGUsInRyZWRfZXJyIix7Z2V0OmlhLnByb3RvdHlwZS5nZXRfdHJlZF9lcnIsc2V0OmlhLnByb3Rv'@;
put 'dHlwZS5zZXRfdHJlZF9lcnJ9KSxpYS5wcm90b3R5cGUuX19kZXN0cm95X189aWEucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7VjdlKHRoaXMucHRyKX0sdn0pO2Z1bmN0aW9uIF94dCgpe3JldHVybiBPdGV8fChPdGU9ZnVuY3Rpb24gcHh0KGMsbCl7Zm9yKHZhciBhPVtdLGQ9'@;
put 'KyFsLGg9MCxmPTA7Yy5sZW5ndGg7KXt2YXIgdj1peHQoYyxkfHxsKTtpZigib2JqZWN0Ij09dHlwZW9mIHYpe2ZvcihkPyhsPW51bGwsdi53Lmxlbmd0aD09di51JiYoYS5wdXNoKGw9di53KSxmKz12LnUpKTooYS5wdXNoKGwpLHYuZT0wKTshdi5sOyl7dmFyIE09aHh0KGMsdixsKTtNfHxR'@;
put 'dSg1KSxsP3YuZT12Lnk6KGEucHVzaChNKSxmKz1NLmxlbmd0aCx0eHQodi53LDAsTS5sZW5ndGgpLHYudy5zZXQoTSx2LncubGVuZ3RoLU0ubGVuZ3RoKSl9aD12LmIrNCp2LmN9ZWxzZSBoPXY7Yz1jLnN1YmFycmF5KGgpfXJldHVybiBmdW5jdGlvbihjLGwpe2lmKDE9PWMubGVuZ3RoKXJl'@;
put 'dHVybiBjWzBdO2Zvcih2YXIgYT1uZXcgRHUobCksZD0wLGg9MDtkPGMubGVuZ3RoOysrZCl7dmFyIGY9Y1tkXTthLnNldChmLGgpLGgrPWYubGVuZ3RofXJldHVybiBhfShhLGYpfShmdW5jdGlvbiBieHQoYyl7bGV0IGw9Yy5sZW5ndGgsYT1bXSxkPTAsaD0wLGY9LTE7Zm9yKGxldCB2PTA7'@;
put 'djxsO3YrKyl7bGV0IE09J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5ISMkJSYoKSorLC4vOjs8PT4/QFtdXl9ge3x9fiInLmluZGV4T2YoY1t2XSk7aWYoLTEhPT1NKWlmKGY8MClmPU07ZWxzZXtmKz05MSpNLGR8PWY8PGgs'@;
put 'aCs9KDgxOTEmZik+ODg/MTM6MTQ7ZG97YS5wdXNoKDI1NSZkKSxkPj49OCxoLT04fXdoaWxlKGg+Nyk7Zj0tMX19cmV0dXJuIGY+LTEmJmEucHVzaCgyNTUmKGR8Zjw8aCkpLG5ldyBVaW50OEFycmF5KGEpfSgndjcjYVNYVW5gREBRPCx6M15YJmtVMmh0ejh7L3BZRG1uP3skSmp6MnJfP0ps'@;
put 'Xis2bkZvPXhJPCZCOUZCVit3YjtYYXxxb1J6Z2JlS3NCU15+XXh6dj49fC5xPyhNPDhHRDVHTCNLe3NbUzQhXkM0THlyTmFMS29Sa0VKa0xMbHtmMFY5MDw7XlFwdWd5NUElKSYpWjpzZzpoLn1gOHV1VFtXQkEoeSl1eXxCVUglOCFFKmBmMXdCX3hbJkA1cUc1JWImfmplJjdEYkokTGx6VUM+'@;
put 'V14vO2Zoezx8R0J5Iil+bCVzXzFhOG0+ZDBYUEFzVDlMYlcoaWpCZU5XV1tAXm0kKDp2fW97UWsudGh+PTsoMWE4XjFtfU1+ezw1P1NQKF4pWzJMc2BNYHU5KXlafWIvSkR+NkZMdFpzbV5GbHxrSFgsNEZVenEqT2F6PUJfNnM3KVNkNExdTGN8bHh6dmhoPzZ0RDglTl1AJj84aU88VVBzWzVK'@;
put 'cSNaUmdafWszRHFIPSUyUUR7RHRmfW93RUo2SWRyWUc+VnVFJE1Wd10sJn5PLHFMaUImNW0/IVlHZ2kqaVcrIlFQeSQ/VVprY2E+MGdEbyE3R3x+ZzVkS3xbMy97NX5vJDB2JUpsMTgyQXF+PXplOH5FekhlX1tRRGNZMX0oZSxLSHUxVTspWFhXQH0xJmd0LH5gMnAvOn1YZFluIU5IZl1pNzZe'@;
put 'WCNRcXlvZ3A/JTckWHN5LFomel8jMmc7JSwlbjleeXJOX3Z5KCsxU3FgZGh9XSZsYWtoTH1yJngzNSpic3pbW3ddd343fFE1bHIrcnZreWk1VHw9WiFLOX1IPD1yNlNfRjhqTlMpfT1SX1NfL09nfjovajxmOEQ/Ql9tfSI0M3RoKmchVSZKVzMkUWRAPXVbKm1YTmNwezt1YyZKXU9QUSEwJGZX'@;
put 'OCljSlE2ZTprNUAiIyQ0czY8UDZOYjAwQXEkb2NbTSZDakhDX2I3c2FgW2hGLyR3NVd2RzN0SCguYihLZUhSd1h3Lyp1Pj1dciNwTFc8N19sUVRuKDE+aG9BZXpieXU+fHo/djJKcj1FJWMiZkA4Ll1NKllVIk9HfjFjYjBAODMqWzAxOXclO11tb3RpPnVEcz9wPUUmY0hRd08yP3kmcVkjZCNj'@;
put 'fnFuRFJ3T0BhO155U3VCL19qNUlIWnhhJGlFcygwam08WXNFSG0wXWlXe2MyckEuKHkpc0BOX2M6Z05qXUprMyZaKSNfWyNOXkVaYk8jImBCfDd4S2Y+XjZUeEx3N0QvXnlqcllVN2JpZzJzVEBMQEFbbWFFcztNLGI/bTZ2VTFSd3hvei5afEFhK2B+cVRdQC87bl55KmQyI3BDSzkxZ1hOR1Bt'@;
put 'Im5ZQVYhantKeTVhfHxwdm9fRGo3UXA0MHwrTmZRVlo3RHh+P3dsUXAhQ1VOa2xwRTthWjpvY0BNISQ7Lz9hUyhoMm9uQEU0Y0hRSkQ4c1FRK0NxNSxOODpJZnJ7T24+Nl4lSm47VTM8Ly48bTQmWE9XPTdPU1ssSlU1N1IoLyZiMDddWzJBRlp4YUhwMzVheDtJZXNUQEYyc1NpW2hHJjp+e0lw'@;
put 'c0xZRS56NlR8RTV4YT9Ge09XUSo4XkQlJTJkXWhYQjZFJm1VNX1pa01fK3ZmanoudjB3Vzd+YHBXX20kSVMifD1UIz4vWlZ+QjhGTDw2QE5QfS5nVzErTDw2KmNYZ1Nic2NFSlY3eG9sU0U2JGMjeChwPyRITE4pQnxuNmFoOVBfaisqJSokb10zWCF2RUxdXSRYX3c2ZDZJbCFkQFM2M0gmey9k'@;
put 'RjMzZT85KmR4SVc3aGRVRDheXnpddCYzSj9jMDYiYj9tQyhDKDVzWVVuInZ9UTo6bnxhIXRsVjwzQE5Te10jQjR5Pnk1Xlt+Ll55SGo5KmB7QzhKTCsjcm4rdkt9L2Y/Uz5AJjw0QDFPQldIV25nLnR9Tzd3cDBUOUw1PFAxOHdbMm06PThdXyE7LytsL3RFWmloOCFWVDMqQEMzSFBQfkhpWi9x'@;
put 'XXtwNGU7S28/QHVaPTN5I2V6cz1wWk1TQzVbQn4oYDdeJGpAblRnZWozOTNoPkN5YyVWL1F5JW5ESlFhQjN7KTB2QzM7I0traS5BNm44Rz9XIyhsJHwiPGF+WH5KWG1PNjl5TDt0X1l0P1d3WVp4YTk9S3c4OSJgNHlBezs9YyZnLm1AVGVzR1NubSJnZDpZNXg5fEI1Qk1hWVg1NUxgSEFELmZT'@;
put 'MmBrY3YlbHMjX2tddE1Re3NzWSUifndTOnR8WzhTTn5ITjhYNTc5fHF+OGVsbCJWPVd7OytoLEQuNGJWZ0B7aVVyLlg5Q2g7SW57Ons7SV4uYVpHTFNaOXBUZ1N8KlVTfkVLUTkpX19MXnkrW0EvaDpSVVE1TkxFeXFeMWNtZFJTOn1WL0M4RmoxIXQ+Vkt7eXxeTl5dX05HKXdJdklDT287O2w5'@;
put 'WClbJmR+bnBERmY9T3kuQ2Y5YikiPTxnO21uOV9rQ25PfVo5YVlJcjY5dWg0dV9TVDpoN2Q3bj5ObTU2QGYuQmQhPllaPH1rS0AxPF9hPDVIOGJrN2Qjb0ozYnAqOUxlL1NdI24kKFZuZzMmTFtNcWNYVlRzN0RRR3BTUDhJJCUyUkw9UFNaUiRIemUldz8sYEV8e3xsIzpPJX17Q3NNekFwX3oj'@;
put 'bmp7KnNia0hNZEt+a204QUw4N0s5I2hNXnBaIitgeVVhSXs7L2hHRShVO2VbdWFEVm46fnF7K2Q4RVckZVhVUTVvMjVYcEchfEgyUHAzOCMsTGQudGpwWE08OnxjKTAsL3BHX2Q2TUNTOn0oSzh7ZFlje3spOVRIVDtkVis4X2pMNn5hSUQoZDtXZWhyZDtXZXEkKkFdOiRIIm88Ymw7c31qZ0gv'@;
put 'ZDhdZXhpU1VjZHoje0BWZWlfYmRvRGY+eVpsWjFsY34zVj44YX5oKXsmJlZmUW5dW3YpS0d8NEkkRylgendBJEhnIW8vTyNWS1g2cmZ0TEUwOF1Fd21UNlZyXTIjNXQ7R1lNPWFYPS8kSGA3JTJSIXM5WX5mMilNVmdeXz8mJUNnKjxuUlplSjIhL11IVVp2SVt5b25Rci5VQz58TEBDVFVAfGBM'@;
put 'KjdAYnU/XipjfmczUlVXalRRcldGNygzJXNePnglY0ZnPiZDZzc5aDZlbCVjaVRCZWFGcSpbMEJ+VitEWzNyaCxfdnllNX58P25aW0dfeCQ+TSVuR1dUQjB7OEMvLDpzSVJLNilSWXwhSUFdVEZnPy9tWlg0SW1aOnVTVi5vVzMwPEZMPSRkQkxfTGVwV21COjp4ZXg1VE5lRjk5NnVEIys4VTQ1'@;
put 'fEx3W0lySVo+VHklVTtdYHUlKEorZTxkWyNreTVgRD5USFN7cHZMcnhySHB8SVY3O1RBbltMS2ZyRWE5XmV5UGRdTTk+ajpxMyxIbDRtNzI5SXFhQjBXLmQ4X216IVtLMT5kISg9c2V2OmAqdnlHfSttNz16bGE4eDclMDVUPWtdJkpLNjIzIkpzL1JnMi9bdndxWW4yamZ+PnllbHlKZi8pRDhb'@;
put 'M1tlXWViPlNtK0ZxVUk8ZCJiO0c4RDh4fll3VHZRWkRZbzUrSVZxS3NRVn5IUn06amxTaF9MW2JMNkhNOXdseU5GJVJzLHMmLDQrRihBRkcldH1qWk9wI3ZRWl9YazZkUGIlcm0iemgzM2pBeCNZSn1wLGw4Kkt5ZnFrVj1yOTlMVzchI2ElfVBQPSVjbm0zN1RUL2R+OGwpd28yXWVdUntsNV9K'@;
put 'bTwqUD5XbSlhKiY3VH1ZdyVsfm9uUXk7amhfMjJET2I+RyU1Ikk4NVMweT1la3BVLz02V10mRkZ5aT45eHIqeTZ2L1NbXU1dY3BLel9dSEx0WSZoZiQrR3gpZ34qZzkmNHJTbXVaSFB8PDQ1ZndRQHEpfWB1TTlxWWR8Qz54VXsiZzM9bDBbUCN+Mk1KdU9mSnUySCpURmd5cj5dS18rdlp1MDor'@;
put 'bEJXSzV1WGJYM1N8YX17bF1DUSZvIU13flIzWmE6KlsqemZfYTg1QTlacyFDVUAyTn54eS41YGR6aTdVWzpPPWk7Q3ByRlNaREJSeiNdODYsRkxdJEUrRFcxKz50ejtGWTc5LmwkRXBkKzUlPChwa0RNZExzRFFkJFJmbl9dbVR+eSZKb3d6UmZwVDJXSzEvIyx9KG5Taj5YJDJVRH1OUDE2VmAp'@;
put 'NCtnNiU8eS40dXNkN29XIWEpJUo4JThSTlklXjRqTUtgYmRAQC9Rb0hdUURLcSFhQHRIWjxaa11ZdmM0czZxaV0/OmMlOm14fEN7cClKZEZXPVVLSW98PHJPaWF0fT9iSiQ6Y1NiZjdYS3NnN3sofnM/SkRzY2YwOztAcWxyJXMuWn0kLyhoV0NALlRaWWlrO1V+KCsqOHNEUV1seXpsNyYoSltT'@;
put 'ZW0oZ3RvXjErRDF3dHFGeGxEOHMoezhWYXhyNU9iN3hqUmNhbEFLO3t3b0hQaH0uI0s4dEttOWY5dDM/WVAqVVRwZ11ben5JJmEpZSh0S0deRl9gKmo3Mj4/T102Kl4veWdbZTxRIXxwV2oheEYlVnVwJTFzIyw/NW03ZSt5cXtpYFNEOXV8YGY+M1tQVTpLfk1qRHRSX295M29WdkBwfVB2NVZY'@;
put 'RT4xfWBrKEt7Klc9eXJCfV5ZQmQ2NU5sbH1gay5mTT1LeFlaSnl5d1ckcm1RZCU6LFA0OVglPCk/R0t7TSMoInY9UFgmK2F+fSReeSYmeTNBJXsuJEpnYEdKYzJFcWRyYCtJSmJaODJ7WltUQT45X1orYjoqLkMyPHZ9WjxdJndaKyJhMn5FK19eWnZSWmpNMVNyQig1N1RTXy5kfiFDMTdePjZw'@;
put 'RDN9O0J9eEYsRD9reE1qaWNaTmZkKG5wdVFHY31nX3ZtP1Rwej09c2Nxb0oqMm1rWGsxVDFMKj5sWmh9aSM6Q3h5JjNvSDR2eHw8SmUpYi9kITptVjNdckB9Tl43QngoYkZvOFZtPGdPS1E0OXgzXTNqKVN+OU9HdCZ7SUpjJj8qVj1nPilgY1gvQTkjUTklWlM5MX0xJWVqQ2VfYmhWZltub3Rp'@;
put 'TjVCOjllW1BTWk9kbi49akxrIj9WTDVjRF82VjlPazBgTmYsSUZaYWZHJHA8Y0E4UEUyJV9bUUR6VlhdOj19Tlg3cDRgUGpgWHl0WTA+d2x5PSM+VWY/UzZNPj9QZypOMT4pTnBhWFk6JChWRldMZG9bNSxdaFIuY0giJTBCUkU0TDxvJmk9JjRMN3JzVn5bci5sfURiVSw4PXRlNlFoaVprKnQr'@;
put 'WT1AeTg3YjR6Ki92YWdda1QkWWQkLF46IigwLC9FRksjbSImLDYpKSxGZ1B2fnd3JjkrOG4weWZ3PmF1WUpjX1tSdypsXV46Y0gkZjc0PTRJSTNrKHNWMnFWPTZSL3hBT2csaVcuMlZrSmo9bU1eS3wlRiVoYkBrZ0pxfWxab0M2ckY5bSN7ND0wMFQxVndULmQ4RX1uSjU1RCQ2L0hkVDA9I24u'@;
put 'R3tbOF1+bSQvOjJAaDJHTCgmfiRmZUImO1RdT3AybT9mMX17KUtDKG1pQGZnc2FmOTpaOkh+LEddOCZWc2lESSw2IXlUOXJGI1MhOi9tWngmLmlAbmVWLmF+KEt9Pj9kMXI3bDxedCYsbk1KeTVsN2hdIT0hPk8jaDwocD1FI2NqTy5eals7VFRdbn5wLDNlYlo8VEhRMS5iN3glJng6ZUpxWzVY'@;
put 'cG4uTCNtN0k1VTx1Xz9HTCptTFg5MEpwUm1TV2UuaCJBREk2NnUyW1FkIlt3amUiaEJCP0ViP3tlOShGQmpJcXFzODIoS0N9S0ZCXVF5dGl4XVBPR3xlU3RJRCQuTHZ8OTF0Y0Q6OmdZL2h9QVdIaUNCUDApJndhcSJBe0h1bXBJWXRKRWkmIl02KEtDV2lldV05MnR3RGY3Vng3KG9DO1JHdSI7'@;
put 'RGlFRDo6XTZgUTQiQ0YvSDNQOyNxMWN0W0V6I1ZsVkU5KHVDMG91Ml85ISJtRitwNTdjPCl5KndpZT5pMyErK0ZOIkQ4JmM8eitHdWhScE5Tanl6WEM9a2tFYWp0KWpGJkBiZjErV3V3VSUqb3giUSIockIiV2hOVGpiTWNGaUt8ZS4oV0MmTWlhXVFuImtEJTF+bE50I3QkUHM8WTs6eSNDLig7'@;
put 'SDdSMkwwRjAiXWFiamZNPEZ0ZklUVGpYWFNNflI0ITZMXklCLlZCM1JeKDtDNHpxQ1RqO3Q4RmwzckNUamVYd1NdZyYqVGpnWCxOVmRmPD15d0R3O3BOVWpfdHNMP2ovST95K3hDZXxqVWpxWHhQbiwzUilMRElgbmNmW3lORWA8MntVajBYYlJzb2Y8XXlsRT8hYnJlZl55dEVFP1R2Vmo4WGBU'@;
put 'NTdkPF95KkVwQGY7VmolWDFUS3U1IT9MRkthLlBtRSFzdVpwSSQ+MXx5V0Y5XzdQUXR2WHZWSW9kPGcidlgvMzhwOmM6ViIoNGREUDtWJD9PUG9pOlZiYH1ER286VkQpOWVoQjZySEIoSnl8XjM4fFNDSC5dS0Y/dVBCLF9LRz8+UCo3OlZ2KXV4MCV0W1p8cUN2QF1LST9sS0Apc0Y8cjZAelFb'@;
put 'fF9LSj8qS2hCXzJgVHxfeUZjR3szYz8qKmBXVlpifGIsNlhvWThydXUjd3F5MV9YRylPK0g1X35JMkxfM1A/RU4pbz9WXj9VTkEwP1ZoKWdsdGQ4cl11JjNwRjRfTUhqJXJGM19tSjhaXzNVPy9PQCk/VnIpQ2ZTKUo3Qj8hUDU1OHJCdn4mcEY4XzVJWV0zUk16Q3hjVVM6djhpIXB2OlI9UnVQ'@;
put 'aWl4RWovTFBEIXR2I1MmaXVQamkvRTM9Nl1EIXQqP0psKiowR2lHRl5vR2VDZippU0ZgXj9ERiE4Q0NyOyNDZmkleyJBSnRlRnhxZ1pve0JfNTFsUlFDP1RRdTpXUUNpb2dSKUtSaTxSZHluLEMvITo6KmFLKUVRKHh3XjdGe2c8aWp9MztIIUlQTEl+JHN1VzF+JHd1aGV7Z2MpQk07RFQ5T2lv'@;
put 'cH1xfGBZPElXeyEzO2YvUylvSnhqPVpHPDE7P1QpekshXS9XIUM8WSFqI0IkSVFIJUFJVnVgSjxFIiguRH1QYGZtIXlTcG4oKF4iLkJpUH1nQmdORkVHLy5gdksydXVTUCtpTEkyZ2kpP1NbbjQ7Nm5oRSZkTzh7cWt8dmkuRjYqUVBPOlQ5Uz9kSCRxM2U3bm5hMEkiViR9fjRJd2ZNQEMhP3Y7'@;
put 'Ulg0MD9MaUdYIV52Z01KRE9aaVNEZ2lHJXppcUNNS3dlWFpKLGV3MkFRI3h+TlhYV1JgdmBpI0pMJXRjYHZuWHhKSGVBSWB1elBNZjY6dD9MUkdGSVt1K31YK0w7eE5SQngxWCVKQWp2O1JYPEl9IT4mQzlpQk8/eDEoKkpSdEUvSDNQaGhmRHkxNHUwYmM5Til+d3tIZklmWCVHVzxjeyheOzdS'@;
put 'ZEt3UU1JYXZIbmU2IXNjMGkpRkR1TmcqQ2Q+LGptZzdYfTAsVHxmbDZOP11JQyljUD0kQSsjUytpa05gbi9FND01KjU7IW5zLF9UN3pVOXVSJnheb09lbmc6KXVTPz1KSSVuZUZGey9sNDE4dWpQTWk9WnRnaCkjU0JYSzEzbiRERDg6XToke3VMZ1A7bGd9P3FJVCVHeDExUTZFWkp5UUtoVUsu'@;
put 'K2V+WDtMNkV0bGtrflhYR292M1Q7N0F6fXYjKUBKWm97MkgwcHFPQk1MYjt6Oi5GWU5URkRxOmk2KkFHInY8WCtLMTtAJFFWNCI+QnVlVng/aF10KUQvSF5PWHJbUVoiNER+SFhyXjlxIjhEKTgiXTUofEJxbSFHXlE0dF9EQVN6WF85MiJ+RSpsKEg8aH4iTEMmaSZhMSh8Qm1RS118O1B0N0Nt'@;
put 'SENlJnFzUFtoI0E7SXA5b29dUTgiT0ZZJColXlFRKXRIMVZnN31AUmpJWHpKPz9lPCx5M0NGOF5EM1JSejJ4NGNUdj1JXXl4RTAjaDU8VmFgSkkqdXFGMF8vSURVXkthP0lSTUB5OEopTUt0Xkk4TDFgJEV1Y2RicDAscmdTKThMTmRUOXxuZyxmU2pSM2Uzbl9EIy5FRT4kWE5JQ25AZHhzP3Zu'@;
put 'UENtanosXnZBQDZJfSE2OlkhRSp6TDRDYVZ0QiI0L0YoWXlHOzEqW30pJEwvRHNmSF50P0BGTXZicW9ncmksVyJCbGtkeFohbDRzWV5ifkpyL2osQiFlQ1JQLiszOzRuTUJpRWVqRTgzUnd0e0JKLl52aWxNb11SJFNzKVIjSzVdYFl1JFFJaXpBUjprYWxfbks9TjomU3UoRyFhQ2ZLdEA9dEpr'@;
put 'bldLP0ZsaCtpOEJjNU9zVHxDSU1OZ0ltOyw+R2ZgMSU5aSE6dExzdm1UfHtFelolOW08XShmbzpTNXJmQ1ZDJFFtIWYpO2tHZTEzNk5taEgpUkRpI2o/TmdzSXtFRkN3JCgpVCl2InZCWSxfT1EqMzYrLnlVejF9KEBiR3tubn5oNzlUZDptRXlRMyVlIitqS005fXBKK35Ld3xDOn4uclVBLjl3'@;
put 'PXs8TGF1LnlBZUI4Imc9Y0FuIUV2MiRlQW4pRmU4WC96XSllako+Y0FQeUNOOEEhPTp1JF5sM0Q0aT1icT8jQWNSJnxgSUUyTGlZJW03cDYzTEI8bGxaZyhxZVJ0TiJhKDdlSDlpOlU8YWExY0gxd2NIflNCJmJnZjJ3JiVrMWM0TCFtfmE7ZUg3YV9FTH5TLkhsJUl7czosM3xkJjdmaDE2JDt3'@;
put 'TTE2YjoyU34pXmFqUSg7UF1ucGssMWo2TjpoYzZnZzlpPjpXbDFjbXFDVj08Ui5RaGM6YzImSVBsLjIkNmQoITtnZHR7XWIxNjUjVCRBZT5OPzA5SWcqS3xyZDRoaDJtPnlyLDQ5TmNbSTg1UThUYjI8OntLaXV6XyksSkZBMjpuJTJ5RmZ+KVVSd0FEOyp4dzlBTlh4cnJAcl8uJSV0TSUuY0E4'@;
put 'KV9nZ2VsOTA7QTNXLGNRPSZFWH1FXiU9Knx6OGBddSRodTcvYFVKMShdTXdJQHVAUGpVYyQ/JDVHR04vSjtfN1AhP0VOVSM7dCQ7LlFySjhJUGNbQT4mW004eWhjN2Btc2EuO3BqV0JIOEdqMHBbTjJELyxpWypKOl1EbTRDUzoxYVE1TUUpQjhvczRLOz1OS2liPnYwPGwzd3xwaEtBX3dWMXRg'@;
put 'KHc9eyVBW11VfCRpSkMkclksJi5eUUdBR3l7OyZGKzhOQ1c1akZCMntwXiIsZ0VWWjUrND5JfEQleXxMU0t8MDQuQkUlIih1XyZWPWJQfGk+TEA2OXomKHlsPDElazxCQkc4PUB3bVdeZ3gkaTNIWjxvRFh1fC5fdkRnJDlobGMkaGx1fSUlUktRXTEpUWk2Nj47eW5uPkJtc1tqaCIjLD54RjZB'@;
put 'JHcpJT1XSVAjVV0jK082eVp1Onl8VzBzMi4zbXtqeXxVWFdPUy53Z3BZRT9KRSt3ZEV6VzNDWClxQU91TkFicltLfiUqU0Y0Xm1YJENlJigyNmI9SXlORTI7WGk1bSppKCVZSmBAVy8uTGlER0B5KGM7TW0lNX5YVXFYdkJLbF9ILCZAaU9ZXkdgKj9lWWQ4ZEVLVkVKNzV5Jkt8S0dfZjYhXztH'@;
put 'M2hzWlp6PlZTejNUQCJRIUBOZkRGelJlUHteOW8rS3FdRiM2dXY9VEhNQSY6cHVlYU1IKkIsYlUwQ14zYFhFcEtTT0BpPERhb1JIWSwyWzxhLm8wUm5HJDlrbltuU2gpTU1VK156TXpMeHtYa3h4XiFbbnwucnt5ckJ0aHt8ZmtLbEYvemsqUXxlXyVqPWcwbDBwTnBub2c5enVoc0szSEVkKjte'@;
put 'REY6ND06c1MvLzVQWj4zNH5kX3RaKipoRFhWfjRhbGBGMSQ9en1FfCssfS4mVmtwKmwudCFPQkBJOVUhQm5SIl5NPH18KGx6LkNxVXEsVXlAKmkqdDl4fCl8RndGQVMzWntEJSZvVF8jNlJLKztLYE5yeSwjOW5wMSlIMVYjdlJzeyFDWHw0NyxHInYiUXcmSVMvcF47ekw1al4kRzQhKHdYYHtS'@;
put 'M3JvaCtdRXU1MUx9PSNVekM/UjBSLlYleTtvWSZ7Iy5nbHc6SFkrWUJHYEpyWVZ9OGdCX0tGJWU9S3xlJCxwPUNHK2FEZ3RQKHd5ZzFHQG55bmAsMSE9NDVuXihvbkxpVm9UXlMxIWx5X3p6SGl1bl0vYyFLdUd6Ukg0LiU1S1NfYTF4cVt0OmppcVNMUz9fTjNeLzNoPVh8IWwpYXZHM0RUdCRC'@;
put 'R3wlWSVOcHdqPSkkOndoPVdxbHZoPShUQnVoPXNJdVhmR21ENmtUc3lLZlQkXjNDZmJDcTZ0T3QkQj88eyg+dFFqJkJtRGVnT3QkQiVtfj5gKFghPFswN1dLaDBDXTo2R3FsQHtNTE9xbEo7OzpROFZLaDAyNGA3ei80YjFDY3FUbz8iTnZEZGArO0JNYiRPemF8VzlFUmNzMlpwXnQzJWBjTHZJ'@;
put 'T2czVWFNYl0id0czbiM4e29ZMiNCOiRPQ0daQ2YlV0x5UWFoMlslTGFONVRRRGFLTlU8b1VOZHRVIlsvQmZIL0IhTjVHJldEXV1aZEVSOEpPa14yTmspXlc3XV1TWnd5NUVkNjk8SGk0dkRQZks1YTs0Yl9aVCYoISwvLCtsdz4kV0tdW3tTel1kcGZiWD1FZ015VjdzT3phe2QoIS5uTDZRYiw5'@;
put 'eUc7emR3Mj9pPFVhIU41RyoyTipwMFNvPUFqNnp0QiYqRnhCM2l1P2RERXZfbmVuLF40KjZGeWd+cS90LlUlfnFeMkxtKlZ0OWJ0Z3VoZUpuNVI2dzk+UyYvPjNmUC54Ji9zcUQhejZMVDZxbyMkfShNQTZDTEIwdF4peHQ7eCU/XXlqKC9aVDw6OSRvTCtGWUZ5fDV8dV95cnM7Y188am93V3B7'@;
put 'THNMKWJxO2gxfEwkNTxdNVhbanZgTGNVPSU6Vit3MUZEOyVLMHMkRiZZYH4oKEgvJlYsS1IuU2Y3aHxtZyxxUTgzd2I5eWpNcn1oMz81I3ViKHcuUmVMJjA9eWhdOjgqJnlZYDw7VH4wSVBsMj5PKHVxS1RsfFZnQElsezxTdDxyX0pXWSI3KyNSUTF+UlJXTShXQTIrKTM7alBMcjRJVT9Jb3Ve'@;
put 'U1clXjBLWCwuMENGUFlgaTpvayNCUFR2MUA0NGxaRmlWN0RJWz5OZj44Plp1LDFSVlJdbWIie3cxUVJaM3V2PihUa2IxdTU2dl9LQFp4ZEhUaVlYXVVpbiJWQVZwRUQ8eHUqRi9YV2QxI1Jge15aZip0SUVXPV13ZzRWWjxhMDclOi9SbHk6Um1mVV5fSFhOImFSMUR2S0JuTXV8LFc8QWdAUH1K'@;
put 'fEN4Sl9TUm1uSl1jREI2ez5PKGJMWENRUzRDOlJsRS9hfVhOciFTTzVpT05IMXd8V05IMSRoSn1LJHtRNyRxQitmU1ImWCl2LjdJQkxJUkpJTmVadjU9dyltY2lWTUVgP3JAMSs3IiFkSzo0NSIvZz5aIX1WeX07Zjw4Oi8vRzZ5X24pK2BeWUN1eTxXTVlvMkVBPWYiRFJ3aHtLfE5ieXQheHwu'@;
put 'Nz1DUyRmRzNCdDJTSTk2bFZvRSJYJEwlakJbcjciJiNwajtXVzc2TnhDQlhJMyMzNjRzMmVLUUUsOnE+I1RiM0tVPGhRcHwpNkJrYVoiVHtwdz9NJk40O3lSPm5ARzhldlo9d0ojVU9KRE1VSlhoUEdieVZlNXpNbHBRZDhsX2J5X3tbWnxUcFQ5JnBPb0VqVEBGOU1tZ0BMOUdzWVpATEZzd2hw'@;
put 'TDAzdEchTkQ0NEovJW0uSm8jOC5uM1M5MF8xUD11YUdzb2xoKElyR2I5PiFdJWV5b2h9M05HfkpzRUhnLGd2VnU9Ll92NyRxTCU+NF1bXk10SSQ/L2Z4KHt0Jk5qY1EvdSttPSMzdVg5Rll+diU7eld5NXFqK2xKb293MXFAR1t4VERIaFt0WyhYcVQ2U2M4TSMuNSVuaVY3b0xVXTNOU1ooSlQ9'@;
put 'Tl5sSk9wbig8RWFOQWpTUzJ1d2BFVVEuVDFQPSREOW1PNWNWTHlNS0ZmNl4iMnJEazJQY1R7cTdkVT48SUo1cTU3d0M1ZF0uWXpBPl97KE1QfWh8ckUrXnNLc2Jqa2VLY3hsNnZ8NzlPaTA3az8wN3B5TmtjKUtkLClMZERfX2lFMjF3N3IjU2AyVHtDaGxdOnpxVF16O2g4OTBVRSEpNDpJVzgh'@;
put 'fDZ9amg6dnNaXjxuXjROWzQ8PDtVOXFUWDolIys5dGRjMXl8SXBMNlNvPTgxfC9oRDtlKyk0KTtUalIqX2BrI3VuPEBlVnd9OjR2dWFfeip7dk41ZFJddkUmRjBVOzJ2XWpzLl08VlRESn0vPVAuQTNqZVA8MC5EN1ApOlZjK3FUWSVXfms9Z2tvYiwoUFFJe253YVkqYz89ZjladysmY1t2O31C'@;
put 'VGlnJHAlJCpWLz8qXmtYPkJle3R0NFp1NC5ucEY4OHNzWXZ6QzhtPiU+eXJxI3dHTEY7VnRbLDFTQC5HRio+ajV0fCwwSUw9JTpXNGNZSUQxdmZZTzVQOWFPPSxhTykyT0s5SSlOei90fCt4SFN+WylsSHlzV3pWX3BjW0woOS5tJUt8PzNDekxbNHM/IzpOcDsrUUA2ZztrZj9NIjhBNG8pflFH'@;
put 'X2Q/TjUrUER0JVllWiFMKktuLmhqfTJCYkhaPFpfUzFpVmUoYjxiczZBRSl1cWxTcEtQKmB2MHc3OGJZWFUwMF1sTWQ0VGRLK1cwMF1WYnFkMSg/RFlAOTshYjAyYFFJNlQ1WWB5bzs1V0VbSWhUO2t0bk1vOlNgImNGaDd8QnhObkIiQl4oWF1gOCJNPkswN2s/RkYreyp0My9Kbzs7YzRna083'@;
put 'LG5xI3Flbj9hRlc3a2tVcEtQdWRwfVVlVCN8OS94MUxdNzd2Om5xZWAwWH5YdGszYzZVOH0uWFllQlY4TyshOmxmP0kwVjgwKFZwZTFzY1prKno2LE8sQlZmOTM8NE1iIWIvSEYhI1NkIzFDNitSZl9bZ0RTMGkhQEpiS2l1KTQuSFNKW2VLO3pMJnZpUWVwTiUzUXVpbHskSHxtTVhScng1Umo/'@;
put 'd0srXVZ4PTU+XSRlciIyTHY/LE9nP01VO0FlLGZTK1dAQm5yK0VYbHJRZjUyQ3N8KUI4IzlCJSl5aD4pUT8/RHMhWmU9JmdZKmgrc1U3Qyk6fnEhUnByNi9fVGtCXThFdmZHfTozeTYkdEgubTUyK1NsfigheTRrK3U7dlZaM282WFdseFBtTmdAIyJIMkYve0J+anZgZE44Z0NoWm1XVytIOzla'@;
put 'Pj16Oy5HLCpkfTFSblJ9TlhAeThhc1p7a2dJMTR3VGk5Un5NJk19RjxtWWhPX252SmslU1VsUW9yTCFMZkdmUDY5YSU8TFI0KlowPjBKS0p+WTtxZ0BPekE0OUMrcFNAeThXc1plYF9gTlJgS1gjakk4QGh4MyExLztqdDc9KWBKfCJXVio3PlNffTZ4ejdIaEooSSVsZVNjWHFiQTJ7Y0ZXNG11'@;
put 'JSxWeWZnbk9vb2wzNFV6VDw0enk2XTRBaDwvfCY8SVBwUlNOS1Z3R0pVT317eT1bMmpJRlVSRSwkMSUoVSNfeCYsJShMJENLZD1lMDBYfiZ6bHA5SDB2I01pZSNNI0V4bHNIQXhvdUNOUnZUKEZ3c05EYnIjMXZWdjZlMEcoN2N9ek5tJChuU2pQa3omYn5SO3EySEpsYUIvNFVgdGg6PH5EVls3'@;
put 'XVNQU3YxMzdofER+KH0+aCgpK3o5aCNjM1Yyd3Q0aC4lMV9POk1zIXhiPj4obyh1ejNrNXdvKSJDM3ZHXXApIixJMGk9R2RZJnV6M3RiTmh5RFcwPnEleS5bMV5jM3FzN1Q8Ol9iZFlYMkgqOWJMMGVAV2h5KFhddXhOUDNUYStVUDNUVW5QOX1ZVjBJJXY+dV9UPjFAK21fS1Y8dXklbiF1Sl5o'@;
put 'Y3l4QURRczA0a3gvX1l1Qm5kM2UhUigvfX5LbGFTK118SXcub2xgZU5rPnMofT1YczJEQjxLcCFZb198JUxqYkREJV5vKkJ6fUhKQkcxNTd0Ul5NamJEQH0qVVNPPnkjVik3OTZgNipycV0ud3xZTzdtNEM+XiFtNXp6ND5HK0MsQEtnYzkvNnEzPGguTF97WF5HW2M7Sj5taHNvUjh1UFhURU9G'@;
put 'NF9hNTNEa25AcDE0e0E+RUEmcV1ELCt9bVYkNG4sN35UZlNRPDU3dEFXdlFxZTdUc2M7V1NkcUFnKDBkbXNscTREZnlOLCgpZ2RxQXBrRiFhNHd4JnV5SzxkWmIxekdzbThwVFVYYk99aDBwXy9zMHwyIVdSP3BCdzp9ay9qSl9melFjVllNdiwqfHpXcGhiZC9ILGZmI2BIUUxSWyRoJW53a3FT'@;
put 'MF9iZzk7XmU5NF5AYnJ4LDEwd0oyR2FBP1l+KDJhOWZPdCtVfE88TXtlYXpqZU12aj1PRTAvOGswKF5AYnRZZlVhMmwmWlMxQGArZ31MayExIz9PPnlmcFQyV0k3QTxKOjphRDlVSWxsMWtgSjgwRzxaQTxde1EwWEx2fCwrUE9GcENLJHp1cVYpd3RBLCQ1Vmh4LDg9eThkd0lkST5GPE9KUm9a'@;
put 'cFpkKG1YcTRFYkEvfG46TDFrWjpge2RfSGVUdDhxRXgoeSNpPCtHOTZrMiVdLDt1L3Q3ZituaVslJV0/KG9DeCh5Zl8iSj9GaWo/VSR5cDJFZysvcTFoLF5DZT9qW3EpcTMsSnh9cmFEU2plaFhDWURaM3VVWy9zaUBmYXNFbGdfXV5KPU1VWlExb0RVPmpAMiUvOndFOSpmalFvN006UVByJlE8'@;
put 'P0EuXjtKPCRxJmx2Uz9IeisxfThFa3Y4QFRqfElpQDNBUTsiYV1wNmpDbmRQdjwkeVdQcFohJGBddWs+LihKPUBFbyZMQTFSM0NLfjxpei5sK0MkO1BuYzAlRkl6VyQ4YlJgaF1LSyFaPEZOJHFSVm85L0FZQXdvT3A7R3slRiJGbi9wWiIyQ0twOzJZTG1tc1FqPEw1cGQvJWp8Q2VMOjlBWT4/'@;
put 'OE0zWUF3di8ue2spe2RALDtUP3skJHdIMXw6VGRCWyZfOFV6KUwydH1EJDt0bHtbMlpUZm57RyQuZ0w5b3tHJDl4WTVWclplfHB6dTg5dCF7QCxyNyJVcCFeLEpBQjwlWSV8Kmg3ZyVmbyQjZT8zN2MpQ1cuTCE6JGAiR0s3SHp+KzoqYlUzWDxzNyJyMGpZUzdfbHVnXzMwb3V5YThtTUo9cVFN'@;
put 'KTNVYj1GLilUMllHbEB7X0Z6eVlzOVJ2Rml6dVY7aGghPyp+bFc9enN3Ul95e28mJVhnI3hxOWV8bVBWZ3h5NSsrcD8hfl96NzdCPUV9KSNuWUhjcE9nPCpeOWNNMztTdDFIL3JnZSxePFJyJVNpMUg3NkxCNVduemR4W216fEpzQVZPRCNKWiw9e3NJcUxIIj8zbUVqNzt5XkEsXlNbe0hde2hV'@;
put 'TkVdVihGP0tAbCheLl84aFtMZUFXJjNXK3laZF1hIXJXfFVjV3A6JD9bY0VsfG1GekRsMkBtd3k/fCg1fTtIWmo+RiVTQXNdY0VnMnMrM240IUlWMzEvL1Q/VGo7Y0ZhbkArOH4pW1ZVd3RhPnF+MEtLcj1jPGhWdH1tVDlSZDdwSjRVLlFfSHxpNGMpSjVDVmBfa0BUOTozeX13Wzd2VTNxa11G'@;
put 'KDp5OX4+L2p8V2ZPNzE+eTM9KUVJVHZman1GeSgyWCYpPDZVKFtDMkxpdWxxYHY5YjovPUg6fT1lLlNQezRUUT9+WkFeUmR9WCglaHxPSTlAVUBnSClUUmt9SHklJGhYYk1GU2J+MVAzZjhMP2Mqdmk+YUVGUH5DeXdqaissPVVtRChKb1lkJlpBSyFEazUzaF85MWdFU2RDJmRqTDk+S2l9Rj1p'@;
put 'QF1WfC5kKyMjVkRqeip3d1ptKjw7bUFaeykhJWkkR3dLeSQ+eTs8UGJkQFNGN2I6SHxMUjxeRnYjaGg4TVVjW3hGfHguMkQrbC4zVzdKenxWWG5bPzN3cEIvMzVZWjxHQ3BKeXpoYip5bm9nVG9fM3t5PE5CfjJUUW8idnt7PzprfnxVOXtwV3hySyNmaG9ediRaVW1zXjIjOX1uXkVPQDdwaFFY'@;
put 'ZmBbRFYpYGdEX2FHPSJjayRnYWdwYTYzYD1GTFVKbzF5MVBlc3B1U0dJRSxmLnBiRzZBLkMyXzJDSGllXmM8W2cqRkYlOyE8Jk52LmF2QHt0Ty95OWh3Yjl+MzlXNFU6MnFEeyVzVndXalRbT2dgP3lhKztJd2V+WzU+WWtJbDk4YVhhcV1DUSg+RjwmcSxkI20+UXghL3xCX0Z+PzArP11ELnwy'@;
put 'cnYhREBCY3wjYWh4X0gxd1NZOXdbUzd1biNUYjQ2ciwyTWJmNEVQV3F5PTZMfDd+MjVvVmk7NnssVDJeRj87e3YxKFZbaXEkaz4vMm5sWXtCNG8kUl1bV1dwNiR5VSxVODdVQGJZSzV3Jkt8KCUoVTV7SU49R104KUwkSlE4YWJFP1I6SmJ2WU81R3NAdVU7QmVTdlRlWW5EZVM1WjA9NU5iMzZO'@;
put 'SExHV01JbGs7eHVlMCtWcSlWW3EpUV84bispT0ZsTUJbQnRXaXpIQEJffCtBUVlPJHlXVTBjZWt+I2gySWwycnMxWT96OioiUUoyY15kLEtbL08odWR+KTpXTWEoKy4iaTFVPVdXc1p3V1NQVUclTCVTZWp7Oyw/PXBaQnRBPn1UMW01JSVBKmdKO2A0filKKEtqRCEzOnY2WHx9OlElU1lrSGte'@;
put 'M3ZJbUdyXUElNmheTCRFK3FUMSZCPW1UImZvWmtXPilEJmIoR0p5MSgxNkw0Vm1oJnt8ZzkmWShJU0RicDUkOmc6OipsSmlhbT1IOyxfQnY9Wz1CTkUwdTIlVj1DenByNXBPZD45P3o4PUJrLjA9bEZxRH5FM0VOO11RXTY2YGMsLj9tY2YhO2JwPTJONSpIUVhkYzFtO3NybEtRUT5+JFtvUlNI'@;
put 'JjJ+aTsuWylsPzM0Wlspem8uZiEpZVtEJXopJTp9b0I2UGsxPHk3bCFyPS9EN2g5LFhlWUZjWiUmTnwxbVJfbmVUX1FwRj4/NjsvTD1QUjUxVWVeOyIpUHk9eHJNXXspbEs3c3V5VzxyUlhDb0pLUUVdXTBNc1UrSXtbK3FVOyIycTp7eUBMaUdDYnRWMFEyNFZlT158Rk5iUV1+MW5odmliRXpa'@;
put 'JTZpRiwzbGBAYi9Mc15SQGR2fX1HfE1YRU1OMlUxX3p1W0FQQDE5VztzQFZPX2MwKFJQRk1Lbz9Ad0ViOCoxdCsiKiIrV3ZMbEU0cj1MdSNLa2V+VUxjVUA4OlZZeG94dTF+K3MpOVRMaX5xMHwvQElwRXp0dyRqME5QRTpOL0F2OjV1WDgpTmtabGBHWmo5bFFsb2BzcU9iJUJ3Uk92KyU6fHJT'@;
put 'K35seGtJJGl0SjhWaU57MWBqMkg0QCh6dml1K1JBZ35rOT1LZXVIYXdXOnBaRyNNWWtXNG41M104dClkXlV9cTBRb0g2aX5jXlVqRmpke0grQiMzbUU7VVtDTXM7V1tVMjp3dlpHI0QjJUlCOXJjfjgvd0I4PypeXyopdlUjX2o/PD9SQitYNV4+aFFIMj43VjFMNC51cU5qTSIiRy53OkoqfmQ9'@;
put 'JigzWmQpKlpQK2dxdH5Acn1lUldhZ0NRQVdteWQwWyJbTTN2MjtfYkxQI0ZuXWhGZUwlTHwzV2U7WHZuRjthS0tKdE1YXUBiJjV3aiE7Uz9ZbUc0bmUmeHxAK31BIytefiF2X2lpOyU3LFd5WitsRndxZCJYY35venRURSVVLFc+RU5IL2drTyVOWUl0dltuc3VCTkM1OFtzaklzTzdISGBTNzli'@;
put 'fXkmbk1AIkRfMz99W3B8ODhmfWE8YGxdJXY8NCFSMSsyX0t6eFdFKF9EZVB5XmNVPzc5QC8qK11kN2NrSj1XaVBicnd8K21oS0BNJDczLDYqUk9TQFtKISFSPHElP3o6STlnPl4mMlthUF5HTGIuM0IuM248JGJ+VVVeJlB4PWhFSGdLST9vaU55Q19eOFI9WFQ5c2huRDtYeTVbNHM6KzM/ZCxM'@;
put 'VShPSmBdelR0JS8pO20yazNMNGtwdSRjOHJaeFQuKmVLYmY4MUV0Zzl3TzpmQ3RiPj56PDJYKToxJl1vYz0sR0VqZ1ZvJDkvZjpMcW5XVnt4Z3pyWlpGQDIqVTUkJU99OD1ve2IyQV1JUV9vUnskO1t3ODIvP0l4eFtadUBxOG5NVXUwcz1GRldjKWI1ZWtOWiVQUj9HfCVnTzlVNEwhZCpnOXd1'@;
put 'S1g5UGAuUzkvMWxiSmtKbFkxbF4/VUBpNTtxX14iVm87PmdeWU9yXUkmZ09MK0pVPV9yeS5fIz1dYGIzJStaSmNXbF5GNmdkRVFAW1cjVXBPNiEiZ3NMMjNUO3E4fHAkaVBoLE1YOGt5IVolYGt3Mm9PfExQQDEufjQ8RnM4L1JfaXVOXj9UTl4qMTJvfTxFVz9tJVVBbi5dfXtSM3NVPGRSSWJ6'@;
put 'MFswcyUwYWI1X2YzVDc4ZGtlKFIvW1RadkA1VUZTVGM/JTdoQUZ5NkRJQDFyV1duQyM5M2RWLDh4VHNiZHJuI3MqVEMleT12JDhQcV1NK1d6andYUSpjW1k1XVoxLzc9QllYSzN6Z3Z5R2okWk18PG9hRGRbKSFNSC5pdz9XJH1zXklgS0ZbXjE+dy9NSy9bNGh8UkwqNU0qQ3Y1YDJEdU86PFRD'@;
put 'eWkuRHA3UiRNbHAuVkExQmJ2PzsvVkVuUiRILF5ZTih+I3IxRkcld2ZnN3dFfDJyfWFLUi5KcF1eeXJfY2hfSzw4PTIrNHpNfSJyOG4yYy5UVDoxI1ckIj41NWsxYzwmeFtGaUBucls/ZnZRWTlUSSQ9bVVeSlZiPzVAVzpoeV56KnNzamJuKGxZUWxsSWBmU2ZmIyswaXhmOUZbL0tdRTVFelF6'@;
put 'N2paLCNrVCNQaENTMzUpMFovc11VXVsqfHp9OXxlITQzQk43WEU+SFlISCVoWToqPDI/Kz55VDREQXFbSkhZSEglUlliQ2V2W1skV25fXj98eUdFVkxOSVRPelVPZG9wL0Z4JmNiK1JrOkx7ajNSU2N9NlZJdFRHI1grbTsyOTw5eDRQKGZGOWZBbk1DKD17JE85W3w8YD1UUWhATTpoR2FafjhF'@;
put 'clpDJmxzbGZRVHRUMVEiRi5SLzQrWnxgcFYvWUM8MnlyRUsuTH44UEE6WVNwVlosVE8/SnwjYTFhT2kmTTtEIVRuez96W3BCTGVOfllAN0FxaGxrMlVuLFYpeSRCXm1jTFlGOTUyJVZnZ2xATGZwJi4hOTE2dDJULlNrMk0waENINWEkWSMqV01xaFdNU1BQJU1LanksZEhSPjlULm9DS29NXlNY'@;
put 'WDVqSkNlbDloOysjKnFONXt0NURUZ0klUVNtO0RbWzxpVjRnamQqJF5VeVRWb1Q+JnY/P3p8UTZPOF40Mzo3cSkwcmx8dkd2ZD1qOCtOK210USlnMHIiRChYUmswPEYuVW0xVVlXOldtTVhCYUtbOSE0d25jXVVlPEM9RTUhLmdbU0xGUm9SZnZnMEpETFo8N1giTDVjV0Q5LmpDdEZZS3owTWJY'@;
put 'KlF0YX4qN2FpZj4oM2khcCosdmMkcyltYXF7SkRSdF14R0JgfV5pTlI6bS9NPENIVzksckNAXTpPd0h2cTo9fG9KQHdQVVclWmA6JXd9d3tnVnBObUk8MmEuKWIvO3Ipb01YUDxOKnh8TmJlXllkb2VsMCY0MXx3L0FtWWFuZDAsdkh4NyNaTDZMXk9+S0xgMHl4OWk7VTM8IXhMXjIoOy9bR3dm'@;
put 'V2cpJDRZdT9geHFhcXhwYDJVblJHU3BXdjxQMkhXYj10cDA1e29HIXh9Q3NLc0QoV2tWSz0hXzIoITJ0dC59Sz9uTGxyLnVJK0ZATFBaVzY8VH4kRWBofEEhM25UXlk4TTk8TTlvZ0NQO0R6eGVdNzckcFovT1ZnemdiWXRxdFA5aSZbZWEhUzBmM0w3VFtIeS59ZVNSVmMpNVM4Ll4heGh4I0I9'@;
put 'WVp2bD0jTVtkeV0vW2lrYFtYOXckaU1+NmQ/fXd+bnUqTDo3PTYvZltoaTo1LEpFc2dwaTtNUG1zd3AqXkhNbXBYa1dwSl1Wdzc/LjdBVW8yPlhVSC8kJVM7L0hKcCNfe2cydUUjKyY6b2N+XVQuOUA+blpVQHsoS1Y3LiF9RWwyXXhIISxaNzcsMzNYTjV0S09zQClyYEAvV0Y3KFQ5WTs8PFQ1'@;
put 'NyorTWc3YW1WUmllSnpaSWxuYE8zblhdNUAkLzdOK118P318STNEISxRYm04JjNJMTJ2cUlgWytTelE8NFR9eG18bWVnNzx2X0FtViUrZ1YwMllEQ1VfeSklbFZfT1Mzak0hVzl7V213QzBFNC5HSGNqcjB8JDQ8fDR4WHViT2BxOTwqeSYxcDE0L1JNbyo1QmhiL1BzZT9zd0RMSHEsZiZsey5N'@;
put 'dVNDVjA0KV9qPlNkdXkmMVppK3xSc2szXkIvNlJUdk9SWGtzWSkhRDA4JTtybHpmYldwNixYY3NbVGk1L3VjQVZFeGQ3cHpDUEJaPWx3K0AsdF0xNzU6YVpoUlg1TG1QaXNZOltuTm9oc1kvW0ZUTVZMRyo9c2s/Zn53JVZSYE58O1suMlg2VXVdUzEpMjdHSkFGckZsXUhzTkVpd0tZVktNTmJR'@;
put 'OVtXUm5GYHF1e0R+SCZLOjczZjw9L2gxOXYmMzw0PGI1WkxScDA/cSVCL1BhUzBnOTlOeVtkQklJOzo3b3B9eWdZMWRWMlBjYE9deX5MUWxrUytRLzRkcFN5M1kjM3lMNzBSdXFBaSRtVEJ2OkAraCJ6fmVDNC9sbFpWJS5nUXdweW1UMH1MVzdyaGlCMjg9cVdoXWQkOGcvKS96VjkvWylkbjpz'@;
put 'SXU0fSVaa2RVSFFATXZTK2RnJX5GSGA1Yy5ONFt3O0E+M2x7b3EkXzBWfkRXanlDNkhaWThjKm5KcGVkWGNXOSw0O0Z6VyR1NlN0Y2dFVl5hdm9ScyU6YyV6JGcyLG5WWUI2WHB9aEA8S0cmYTFgZ1JOLjhAcXUhXiV5bEY2Ny5wQG9xTWtwVT1ZcFtuPVNSUzMjPD1lMDplJGhQPzlYdi5VbDk4'@;
put 'ZnNLJCI6NmB2I2AvVyVkJGcyaz9fXWt5LGQ0WCp2fWAmYSEoWUVPRFplaHJaYDEqWWNORXdIOHE7cXR4aUlAbiNTInd5N3Qma1MkTWttfGYjOlRsXltaVj98bSMrR0VtU1ljLFFmfklxWCVFTkhsRCppLDw2fnl+eX55fnl+eX55fmI+RGIldzY1Xk1PSUBCKzZJXXw/OHJfcyM3QFYuMSVxW2FD'@;
put 'VV1hZyI8QEZgUCtSUjRGY1ZxPyQ/OVlucVJSd0ZjVi40ZG9OVig3Lk9Ib0QlWiZSNzZDd0gvZWwweHwsfT1vInp+S1I7cDZteXkxMGo+OEp9ISM3ZlFwKF9FdDteSFZkXXNWYl4vOWZAU1VlJWQ4fTBqPyNOUmpDREBtfTJiam0+KnQ5RldMQHB+WDBySkt2RSVVQSZ1OlNPQzc7QElTQi9CXzl2'@;
put 'NVhiN0NEPVEpWyw0OWBvaT5vMVVeS24xK3ZLdk17R3x+SSZZKHUsfV57ZygoMyxgMVJ7fDBVWUwmLFJALDRKNmRQTTFCOlZQTEk+RUpeMHcxVWtDMEtGOXVWPFVofG9JcFRhUjdiJXIrQ2hrYHNmXjh2NHFfKWZ1YjlFfWVgaChCZCM+ZSNkLHN9TltwJV9nfVtlcn4yXT5gKVY9QHo0cnBdKTh5'@;
put 'WS5FQStobTtQPDtQc2htN1BlVkBpbUw1X0hqQktbdmxGci9PeHB9LDF9TG9gInlIYHh8Q3IuXVBbWkkuMTxObEtIJShSYV5GYDFKL3hUbHdDa11HZHZnbTcsKTw7IWA5ai54Wzh2e05GeiE5PCZTTG9gaWBFYWZWPy5wckh7dUN2KTN8PmYlLG5zKGEpJFB4PUw7OVRdMDU4b0hSM1c5cV9BVXpG'@;
put 'OjhXOXBIRXgkeHFlXjhnJWwmWVUmez1bQzhhfTg9QjtnbDVydF44fVV6YXBOW2BeMC5iN2l9MD0pIWZiSCs8UE5USWxxYlE+dVgmYDl2bDdaKVpGQE9GYDQuZHl1KWtdMjwmQ3AwND1RViJ3eTdma3JJOTNrL0VdaWRxRnh5WishI31JciFvTnpFfCV9QXNWZ3kmQ0N1dW5SUXdZZE9ZIXdeLnds'@;
put 'PE1IOzMyVUBQRkhFTHh2UmBfQEhvJm4sMSJMZUJpKGxWRkxHWDJxS0BIb3hxQ1MpTSxZKFJ3flBKeHI/SHs1QHpIey4xIjFOM3U2fktvYXA/ajVeQF1qXVZRMm8/c2YsSkNZWWt2Om53cCloejAsNGtkdCtuYHhfeXxIVzV+KWRKYlY+OHptQVE8TEkoUyFnOUU0LEZ+XU5eM3dRe15rWyRedEd4'@;
put 'PXE8UTN9XTh4ek5UYWgxPGYzYTJVdXcyU3A2JEQoTFQlUC46Pj1WZlVpQXgyQV03TzNNdX1tci5MaC81JDw/eilIMTJdMHhFQz4yUyQjcFlGci5FWTYpJlVOekslIkxBXjozQ2o1T3lLKWljSFFIeDJBa2w+aVJ6Q3FIKWk3REkrVmhSe0xKc3gsJHVob01Ma0ZmZXNaczJrZUMkR3RNXk84KUwy'@;
put 'Xmg3OWJoN3wyU2guXTxXLmt9N1NyUngsTjldeFImYGgoQzp7K0RQbDNlcHdxaVZNU0BHOX12YjRfYlkveEYlMUcvbko1Zl0pXWopfXRGNkcjeDxXZkUzUEt+ISl9W19POSg7aEt1aSFJWlVIe3Nqdlt1MG5FXyVDeWRwZD85VCJ8YSFqIytHOnAwO2dsaTkkJSl1WlcmV1NXTTs5Rjh8cFk7bWBv'@;
put 'fDp+Jk5UeSlneDVCXjw6SGNma0VjdHRZKzt0JGkpUmpAd0BXXm87eWorKUVRaSZSb1k7eXs5TUdxWW5FYTlKISgjLFZTWnVfSzVdXVI7KE0qI2Veb3klSkAqbDI/a1c4cyUkRSZ5UURwO0dzTTBaZHkkd10mPzU1JDk/MXMyYGZUWXo8cjd7UCYpXiVEJUJLQiMmWSVxQWtxeDhHQS8vOGJIbFNO'@;
put 'NGRlJmlbWFFlMlJ2RDtkLn4vLyR6TkdDOE1lQ2VWKXxXSHI1MUkzJWQzc3FlSmx3SC5eNy4veUd3ezZ0WTk2cHs2YTIxLzp7XUZlMUQsUkgqTWhJK2U2P2R2aClRJXE9OFJ6NklqKytmdV1yKFZgNGd2fTo6cmppPnNgKFJSbnJFcUhdNTMxeElAMSVLKnFAMWc5aGtAcUtEKTpMKXdzTkRqeiha'@;
put 'SUFaPzhbLzdjTHNTfUhkWVA0fkYmTms0PUUsWCxMbzdFWjg/NltpelNiVDldcyttJDNjcXlQfXVFfkZBd2dGW1Zec0RCPjZPPWh2ZzssXztaJTkuQHZiUWtpbkZTUTphNjZJVEdkL0VLLCZpQU9FXVVZU2dkYTl9WEVrdTYwREpOVHkhaG9UKiprLEdGYH1AOTwlKVRDZHpgXz9yRCY8VGwmcC9v'@;
put 'RDAoNFg5KjRMRnY0YykkTUV8aUB6bkdLOVI2ZXNZdiIob2U+UHg7cTUwSy96ZlVPQ05rJU0qWjdVZnR8L3N2MWQ0SWdHLHQ4S1IjbTNVUz87Nn1ZTFErMlg3VmE8PGBlRjN7aXkqbWVJNG05US9GWWViT0FlKURXKXRIcXVUX1R7cUglS2wrcDJ2Z2RWZShZXURJWCtAWHUrb2RDV2N6d3tuVz4h'@;
put 'MmJAWGwpUGR8d1YwcjAwRGw2Q1M2JFQvaF1FSn1Hd34zRkZqPDNIK08qRCs/TjcoIWFLL2tsQDBJLHJJbCNUZCZXOFtUe0AuPGhNRjR5ezhLVXJdK0slSURKQEc8cyt4WXJtXzZkZlk2alNsLCVfW2x3d3lKUyVCJS5OOWZpUmtHMlU4U2FJRFp3ITNxeDRJbU9gT2hNRk54IXpRNkwwV0J5Wjxi'@;
put 'dTd5OHAubm5XYEdQaV9DUWRKKz1ja0sxe0gjWXtLfXMxbCNCVFkzKHJ7eWgzKHJlNnZGOXxiMTtLWnkzbVdWZ0tKZXs/eyV7Jj8qTTFPZns/cnlWckJkZXVleVppQWU0PFFsLnVJKElkUitMX20lOmwhKD5tO0RXbnUxeGI+SW07fkB9MzlUVGFAMWdWIl5EeFZ4YGF3eVszfW9AK20uPE0pPSt1'@;
put 'XTxCK3wqcGBXX3FodT5GUHVMOEE7NlooM3YpYVR7VWMoNzN3cGg3KGtnVXBaKGFibmRNWyNYNTwkVVMqM2U9KmE5S1toZi9vTVUhYn06UDJFKE5URmQyfGA8U2FmMUhPT1d2PCV4Ikc4VVU7Vi5zekE+UG9oP3VbVDMhMDA8W05RcEZbfStRfUAwTnN4ZnYxT3czJkNdJDAlI24wVn5mR25GTjgu'@;
put 'SVZqS0BSPj12bzgocz5PSjowRXB9U2o/LHQrWCZsSyIwPF8/UDtsQSttYXNZejBOb2RXI2U8dVEsNilYe0YpMU5UP30mU0wjeVtJXXk0PkQsN25EanBGV3xGfDl8cGZrcXQmfnNdNi8vaiwrdHNnW0hRR0w7KDVDNXxWVD5FbDw0MCZBZTlpe2t6NjRoP1B5fXt3W1Z3ejRdLil0WWokak5KYHUl'@;
put 'MyViWUcsZF0+WGVYaDA6PlhaOnRKJj8wOk9vR2ZQKHl3K3BtR019dz5TOG1MKDosRVJeOUVqMSUuSntfJmQ/eUAiOlJDTEF4TjtlMyxJQDJuT3ZlOXBwPUlOYjxNPzp7Oz1YeVZVflFldjVCTCpATVA5SWh3OSNrezwhYGpJVnc1XSplekI8eTpzMiwlfC47aF12Tms6XVt5OE19aXkoLHtDT2gw'@;
put 'L089M1opOEViUnBMdTRzbjhrUXE4WFJSfipiaCxPTWpZPVVmVTRpOyM9OzlYZzZaVWNSTCxMWzEvSW91VGpUY0g4WTspZzxNS3E4NzF7WHQ5QiFXJHcvWkVIOE5vL0wqbkZ0Km8yQlc5Miw6VGtHeD0xT3EzSWxLfmBrMlZkRlFEaENvO3s8R0UqRjpTVDlBSDYxW0l5Oj49UGQwRmwsZDcsODs2'@;
put 'VnVyYjs0Wjk3dnI4Rl9BY0s+V3ZpK3xvN3txX2VufW8+aUtKfW1mOHg9bXN2fWhQaFMoXnZQZ01nfWJIMiE4fmgzOHd+TT0vUTdWZjlhV3t7NkhnNDJgdlQoQytQTUlhMEo+cnBNLyZha0EvX35ycmo6alE7NFM/fFs0KUpSKFJ7XWEmLE5sNnE0L1ROaz8jeTUlUns8cHIoTEhvZWpSQXovRmdy'@;
put 'ViVWWHopTSRzSGB1V3BWfi4+Q0BzQHFINCJrPF4zZ2xgfHlZRj1ie21tVmtwVShVNDQqPS5kXlhfbVc8NCM0JH5VNDNnPlF6eldAVUA4VihnP0lUMTdrP2B4cDA0NUNheG5FYnVVODBDdjJ8ZGJjMH02Y2hsZSt7fWJ6OFZ+Ln40NDx+SUBHJHFBJkpKcDBnVjtAcSt0Xy5AU2RpLCxZRSpVdkZA'@;
put 'cTk7LnY3MkN4MCUrQ1FgTklKLkRXLF12ZUA0KTkoWnZGQCJJfUdTVXlDL0B2UkxvK1VnS1lGQE9JKDY7MCxtL34+MCw5Qz0uWjJ7K30uXTJmfHQvXUlZRD9JW3lWIkwvfDQiK1U4TERdVDlfZHVaLEthY29gbnB4JGZVZEt5LmpaLChLcjQmekttbzVbQFUpdi9QMD4vQ1U0QDgzfUd5T25HPEhp'@;
put 'O0VzTTt0KmdaVitiOVBWI0ptXTF5PiEhOEBUImRIWWxTeVJde11iI2J5NUpTWHxrbFp4UmlxSFRobU1oeCNOaEx8JTxPSWRkOFJqdT4vd1RpXSVbTXsmTTlmPi40bWUsLlZYNE9oLzl8Mi5uQ0lJb01VN3glMz52cnpfeVJpTzJfaFJYNWZkKXU1dCM2Yl1Ue09TLEZ0dVJ4XVFhPjc2UnF9UHhy'@;
put 'JmdVdk17cFszcHdCSnAsVFVYIiQzYFZSdmw2MTY9JDkxJm0oNzV8VTxgWDVbOG5KJStOOnohVEdfdUgkLHRCflRHQFVXfEhQQFVRWjEmJTp2OzZLZT1zaVQrLkdeQFA5eGFwOmIyRGhNS0hGZn1XSDx8VDtQc1k1YVdPSU9ISStYZyRZcWl0T1lfIzc8VllaJDp6O2YiME98M00xRWhZVXl+TiUs'@;
put 'eTl7WD5OeUUzYSVsUT9NeT5PVTA/c3F5Ni9bRzhlMENXQU5GYkFOPzlNU2NSd1dgP3lCWDdWMH4/d087I1g5LjZhUC9OTzVrPzgrJmY2Yl1TWFFhSCxuZT05X0ZAc1ZiXmo/Ui4xbzY7MnZkJjs0d0tkJlklMzFWa2skWSV2N0hXXnI5Kys5fVIoTSImTjQ6ajZ3a1NoeUwqc0wwXUs0LG1TampV'@;
put 'IyNTZGk4Oms8cDl8LmxXOmdhOiU+TTs8fkx1VExKcitYQTVMVlswNDtvSVNxNlNHMHZufkJuPEUzKSpGYEhZQmtjIWhOWFE3ZClEVnJRd1dXP1JXPTJqOnBwYENOeGwvdXhkcDBiOWlJMncrI1VUK09TS3tWfUdWXlNrcGE5O059XnJiampoISUrZUV0elU5bCI9Ni5gVXowb2dSSTxJJVt6eXY7'@;
put 'bTtETlg/KGgyWGBTLkVndmBFcSIsImo9PmhHLFNRO2gpVmExSEBKXitQeXh2WDgvK2d9e3JkenZrLiE0Y3c5SllNJXFNRDtWK2FOeF1FTno2d0s7MEJjVGdpP0xyMW5dWEJic3J6O1JdNztsOn5sMHJ0ejorcV1SM0V6bTBnTVpfZil5ZFJUVDd8K2FdJT4kMFJuQnEqJjpwL1Z4L0E+bGM1U257'@;
put 'd3ZlMyYrZUVQeUd9OEVgazBiLl5NWzpycS5GcHZ+c1NEU1JzZCVMRzdmVVA2LEVVfTByPztnRFQ8Y1FoZEordnxNW1Z+W1kiQCNCR1JTMjhibiFZdzZscFtCO21RQ0ZzWXlhY2sqPnc8RnlQVFQzQyQ+d3hQRzZPSkFRe1NjYzZYMW8+dUxBaDV1ekpnYGB6XSZQbEs8a11bR1F6ZXJ3cTAzQHxG'@;
put 'ZGR9JXNLUH5QeD0zeXxEaHEkbz03XiMmYWR1Wzh1TWhvI2ZlQVJWOiFyMD1udXR3MERHMHRQIWxLdDQ1XnFWWF1XcEV1NFdJYlhyd349JUFvaHpySTN5OXpCVl52UnpBcSwiTTdESWlbSW1uL1Q4WmwpRXpFcX09d2tuYXlULmgsYkZ4ejtDczNdai89Yktpe0BAdDRFPD1QZThtVk9DYSswWEN3'@;
put 'NDZ4P1E2K0hVaTZueD80QEMkMSVYbil5LlBwaEx7blQxPFQraG85bGdDK11RcFZ1UV9dTyxSZltNfG1JVEF7S3IrJnleWylsZmEzNTIycVpZPjlzRFcoZiJWVmI/SmlQd3p0O08iIXxLPGt3QHB3NilnMjVoQ3RGfV5AdkNOZWg2RkglITtGdl1GVWlwYV4rKz4jOntkRXQoY0QiNztnMj5SWUA5'@;
put 'QklvbHo5SG1+SVliP2FDRjhIWjZfeUxpM2ZtPSpVemFta3hgWk8kcjBSSypidT1aQUAkP0gsXjhJXiRvPTokZDhsTHVbY2hVWDpMPjchXSxCe3BVZW8ocSQleS9XU34qfT9paEAvQzp9djAlS0lEIXNEb1dqXTNgVTh9WGgyXy9ZMkNJXksjT2lNKUVkQjYmTGB5b3ZZLmA9eEUzUTdUN3VEak9A'@;
put 'RVouNT5PKUYrYy4zRGc8PG5aYHVpV0tsQUtOLldLKyJRd3M0I3g7bUY0YUpAZn0hOUY6P2IxSitaZ1poN0UpcmxgcDJCLEhzcm1BRjVUd3F9bExXbFZOXjNOLmYmcl5acTs0JiJ3eDVrfiJkQCMxVldNZ1ZuOHpaSFZLOE5vNSQ1cXM7X3xBeDUvdTs7L1h1d0twQF98PiRbdEk2T2clWmtwQXYx'@;
put 'OihQV3VjSz1bQXB5WyN0bHIpcmVqYkU7e19dc2YjSD9nbTdNalErOU57P3MqP18hMEtoLjtucUtoJj9aOmFaa05nMjt+VltWYzA1JmRsaFdGaV86UlU7bjo9en1keWM9blUwcj1GNjRlQ2RvciZsIS90dz93S0dJU1YsJThOIX5vUiZOIUUzYytOY3QwMHZ5SG0oPTZRYj9kdTVuWEFIb0hsI3RI'@;
put 'S2EzOiFiOTtsT2hjPl0mR3NwbyFlS0tqeTxOPCJ3SyR6WktYTk08cmIoQihsVDBjIyNreEp2RHgidCVTYERAOnlnT1NQU1dHbFd0eFRsImdzTENUbF0uRU5mWDhgXX5oaCE0ZUVOZykwd2VlXTBiOyl2W2NDcmMpY3hTYiIlM1plOVAxSTtbd2NvXU00VTN7ZDd4MzdqIS9ZISwoOGY5Km0lY01o'@;
put 'PVhxQnR4QikpWkY2eXwvRlswdzZ3JDo3aXp1IXw8QWp6Klk3ZTEjWjksVlFWJm15QlU7aGsjISxQWTlxdyhGS1hrez4kfW9WR1pSW3l3M3lJNU90aWJOdzN9eypieTVKJVB3bjxGc1RfVEhRJTEjbnFoeWd6T3xATzFlLy9jP01XfjY5SUU9IjpwY0EuLG56aVtIc1JnZ1VOfV59b185KTdTTFli'@;
put 'Rm46WCViNnk2VFRHcX1udzchVlk+aCJ4WExPTFRhW1J3TFMjOHkuM05vWmVRKFRlQ0N5e1txXy5FOGdlbkZjbCwlKmR2W2FGVzdKYFQsPmM0U3IrSV5Pd141LE8rPFR5e05lZXh9UkBmW3B3dy8iWTNjUEtgMHdPWjhfLk5sL0JETWk1b05SNSYuaEY7XzM2NjhBLmBvIVlXZyhVZDwpK1FUZyFA'@;
put 'TmhxVCNqQCkwZnh3Qz9QY08/Wz86SnpHVWVZTW0yJXlIOEsmXywjZGA2altPRWRRKDdxeVNAYSNYLjpASFleciskazptVEcreEowbVtqI2JEWE5PaUYrRlVURkJZUCxRLn5PXzQoTkEvOjk/cHJ0JD8uWSgwYi5tLn5Pbj9gMEZQTWRvZGpZa11VZVNTcDBKPFBwaypuZVMqMUtEbDkzRT5qPig3'@;
put 'MTMmZmcjOEsiSnR9JGA3dnxKZnlPfFMwZGVfaUc/MjVlYF9PQzdyXVEsdFM2QGFgPSpjcE02eGQ4dz5kPy59K1k4aUMjY31bJihOM19idEksUiRKODlmcDU3aHZ6NyQ6SmJ7eEJGUSlRdH0zQC9IWDlZVV14bDtCWFY4dCZYLGx6WmpBfDZbRCwiZjxpUXNrJGNVWE9jcmR8S1QuMWBbb1FNNDtt'@;
put 'eVhVT3s8WV5QWjk4TChmZFd+YCJ9dy9oRFBuP25XTmhaUF9NeGJab0Z1ZTJ4aWFqcilAfTtXZkYufTtda01IcWVUbkdzQllHeC9EXnhIcXdDNitFe2FHaiFrWVN9cCxuRzdpTTdsdHJkR25jNHs2e2N+Nzk0b3Vab3t5MWwzeE85alN5eUZLWEA7SnwzVmNKcEwlT25jVWB7Kyp+V2h4MjVXfEpF'@;
put 'XiQuUzdpaHM8VlB8MWdgbzBAaGljSzZaY25+NTdUVEhHPCVVYmBBJTFDcj0rdjhDLixdV1hIdGwpLi4wenFJUXNyMHBUOllvSXVBT04mS3x4WDsiUnE3ZFJ8IlAjNVs2STwrQ3l2cjNQQiRMcGR0ZXo7U3g0cHp5VyRVMXt7QF9melFONWNBZDxTRUtnS0NZbSNnZEtLX0hqIWNvXVtzdmlWaFV9'@;
put 'JFQqTEQ3YT9hV3BfaWtdO3kxXUZacm1aXVIpVCk6MWRUcmdaR1ghOHlBcUMiXXZPcGgrbEluZFkqbVtSN2xbWWNpRnF1bF9bRHtPYX0yJXg5Qk92Umd6ZHFbQHVhZV9rOUczLl85XkRvdTxCPTwwQU95MGpGa1crVVlzZDQ5OFNWY3dYUnMxQUd2cVQ0MG4lQlljODUlQnBaWXpuYy5rYVdHW2c4'@;
put 'bnx7eCh5c2REWH5NMkQoNTdUYU9GPy50PCkqR2VYR3QzQ0ReN2J1JF0pZDZHJV4hKWoqR2wyKEdaK3FTWikwLkwqKzlRXW5xRzVEeCQ+UWswP0xWO29QYixUXXtgXm9dbC4xLHlmK3I3dU0jPHYmI0c8blU+JHV2SzNwNEorJDhBUGtKKTgkeC94Szwzdi9NXjdQI0hPP2BKaHdLcUhvKGxWPnNT'@;
put 'ZGImOUtYPEVGcUB+b21VR0BUbEdKa0NkRi9qQFRqJkt2MEM2eHssQWhBNHNVfnB5PHVKRCU+bC5TZVdCcCpFSFQuTHsoQHA7cUVARW8zLzZgcGBHK0hAK3gvQEhiMy9WX1ZaMmJLK1RXXmxMVlgxPTZ5OX1SLkVHK20lQUsjZkNadUNGaUJtKUUmY0lIaks3dk83JFthYzNaUjs+Wk9WSGAxKztv'@;
put 'KzEjPyNzV1oyYjxAJGcuPXJvTk9ZVnMhLDFfNDBxd3EuKUpqJnd3PXI+PysxcXh8TV90X31nOy8vR1RVUjE6TDFyJFVGTDpMMkB0cGxWV196YUhaVkA+fE5YMioiOmIvZXQzUThbUk08WmkqYVtFfEZwbykpenVvfHdhUysjfj5teUd8PGYsZz5VTDp0XT8jZzsrWV1QMnMkPnxbPyMoS01AUXB9'@;
put 'cXdbRXFpUytta1ZJNHVuS2lLRz9JPmUoUl02QHpudWo/emJvQXN0Y115Szc0T3R4dyxiK050XWBBMExATzxOKHdAbXI1ak0wY0MmXlMrbTFZZThtXTt3QWUlMG5FKndCLHJAdz4mZ0dXbmcjTWBtaTNhS0BteEhdZ0s6PipFdGQ4TUhoWENzPHExRDBKcnRAeiRyQFQ5Xy49bW4+NCtxLmVBckV4'@;
put 'R3NUbENZeTFnd1I/LzB7OGlzfDw2KTUkUzdBNWlzPSoiNCI4ayE9KlpTMWM4NHkmKnYvPSs0NEtadmxoYH1GU2haWkF5LHgjQF1KL287bjdPS3NeIXM6ZWhrQ1VPSEoyeXkxTGdIfVAxOzFkU2psRGNsKGxEZXhmPzosI3ZTNCwmN3lMRGpDcGlwfkJWX3slWHNgJm1fbVk/IzBqLCZfcH1nTWVv'@;
put 'RG5HfmtsfWZqJk1dUk1JSEZfXl5JXTZBYSZqaWJPIWBRPTFlTFAyNURtfn5xRS5JNzBjQyhVOyI5cV5qNSw3SyN+W0NQMVgwPjF7KHoodjRlWk1OODRPalM9fVdGSFc0bV89KE07OiNudT1VLmZaLD18eXhnRHlQZW02WE85IWJlQz5iKCVCNHdrLkgxV2ZiXUBHbU9uLnRESmQ7V04wPzplIVIo'@;
put 'RkVUMVIia1RrWV4hK2g+eDNjUyVrM1FPQDA5Zjw2PU8zVEQ3b1JrImA6JUl4P3ApblorWHt0dHNfJDQlXyRsJm5reFp7JXY+K01mVEkzXWF7YnxUOjFmTjAzMW1gTyY+YFdyMy8yRVpIYTM8dnszVDt1NGAySXhjOnVoOjZIUG9GcX4odCFtLiF1N2QuL1NWT2piRE9uZDNyJDlUSVhPMHc4Yn4s'@;
put 'JmJHdDV9KDFaVXxWX2NIJmlZT1JNe309bjA7VVt8KiMibC4ySHRUL0trNTdeKiowYyhOVzpQbzNSM1NoWFozfHduRFMqOHRVdzxxcjBOV201VV0hWTBVUnAzVDRIdFQ1dnVzI2NGTiUkbXBXP31pbVZ6QDF3QE1mVHUkJV5Gei5UOjF0VCN1e00yJU82Lz0+Q081Zykoc1tMcmNsN19ONG47NDF2'@;
put 'P003LF5sbXc9eXAkdlYlTjlGI05dQyxSJGpfOzFtLjpIK25sXi98N3BpPDQlO1Q3MkU3InIkTkQlJSpRV1tNcWBhYipzS25xbylgfXc2eXt5Yz09LGlZT1JNJjJFSiM1cUd7ZCl3Pl83Ql1UKT53K0tvQ2EzPHVCKzxUeU88IlRMJWZOKzwkYkEhWF04SG5aI3VXO0U6TGdwWEVjc1l1fE01P1Mm'@;
put 'bFsoNCs/VlQrRUEiTkJeVDcwL2dPe2g2WDE0akY+U09fO0JRQEYoXUJ0PCVsK0tsVzJ7N3AhNlAsY0ZuNFFmR3A3ZVNpKjA+MEVGMypZTFBzS0BQXUVla0UyNztZTyFsPFJKNUpFZyxIU1BybVhKSjJ7cE0pKyg+Sjw1OHdXSGlQSTZjYmNed2tUZ1NGRSpBaCZOLm4zcGh6TlE8WCVQTDxMMTRe'@;
put 'PlNHbGhrPyM2ZCQueCU2UkkkQ2k/OHhVPW08IS4wSW9dYk1uKTNIW3pddGM8Nm0oXWkmbC8hIksrZ0EzKjF3el1TcFdJUml6LnNsRVNwUyt+bEwiMkpsM0BQVzp4JkZyLE1tNjBVUVgpaXEhc1lgKiVeTigrckJgTFBNO0ZGfjZYRktkWFlpXVNSe2RMSiJbPS46Y2FyeXpBNndoTC9aISNPV016'@;
put 'NkFCZU5CYlg1aThUW0AuLFQqY1s8TnZwczFCYTlOIWQheD9rZylCUXY2bHA7QmI/I09RbjsjaD44ODdSY01MUFl1IzxfLEtSWV5vVTtBcHs7MlZhc0UlNmNRaVFyOCROTDg1Uyhnc1VRbztIfnBqPjhdLyE0KVdKeDdwfTpAWF5KamMieTI3fGY3ezYrPitURyI4Zno3L2pLRCkmb3NZfi9QUj0z'@;
put 'IWYvPSlpcEIjQ21+TFZ+VWQ/JUp4IWZAWFJLKy89OmtmOmdCXkBeUTBTfUY7SSN1TmpjRVlMJHRYTEJ0b3d1K0A4UWIiQ2VNK0FAUSxRMlk9RjU9O2t6Nl9iUWU8bzQ8bGBwZGlRe2NvMUFbdSM7Lj9dWUlKRUJHbUFuZlksckM6WzprU3AuMlU2PlNjUjU7b2dIVT4zVlBXUCY/fD9IRlYxdVV9'@;
put 'VGNQKFJnTW1FPm44NylZNCNLaGMzbyRdUzw2Y0JVRW5GYlZsN3BvMzwyeElxUl1NTyw1Mnd3Pm0+TjpiKjAlUDAkLnRpTSJSW2R5SU5XNVJwWXNmWE5Nez1uM0EqT2EwY28wIV1FKCw6MER6dTJ1YVlXODMkeXVfRG9PYUNjNVQ1P1dJUW1WPyM3OjBEVz0mbHpnPGtmOjA/aS5tW1s+PDgvPFcu'@;
put 'YSUsdGFXOWI3LnBRREYhTUcmOj0/RldFJXVjekZgVkpRXyZ5RmBASXxGfTh7ZG9FT2JfWEM4O0RWV0MzXUZ2V2ojdVdJQW5MJnRIRl55PnZVUjNYQVNhTGRHZngzSXFJLjFCLn5gYXlXXkpGMFp+VlAhNyxpWWIydEU6MnV4MGB8YG83N0BRei5pbmd0MCE7ZkAyZyF4dE9TRVR7WSVVOz5eXWps'@;
put 'Wih2aShSWG4jUV1YWXVVYixIPyhTPVAxOiw9X2tBX09tem5eSHcvZDU0PlRHPT92ZXVwOHFaP29gMitFWG1ZanskVz5AN2M+WUNCZyhUO0VGbE5zI0xmfUZzeXZfRChERHByUEZQdkFPL01GdGdPbkhsKCZ5KHZqR0Q8NyY6QGVmbCwzYV52YkcyUV06SSFhcklsWmNIRklieHUwOys1RlM/UGI7'@;
put 'QilqMXQ7cXkyKHYvLlNmRkBZV2Q+ZTp0VVZwTiElZ3p0Wjd4bCE9VHtbUFNNYE5pJWBkNDkzMV9TNnA2OVIkWmxRZmw+aWBkRzV5OmgmPlN3O3UiZHBEPllhc1o2S0UqUWlvMkRtemRgKSwqW0x0O2N9IUtYRGRJQUZWbk43QVBnRktSYD51cHI0aGojaW03fik/XU1xRlk2Oik7bE0zdXZnTVc+'@;
put 'Z2tlJUVuM257PWY/dFc4R3cxRGdqK0FsLjxNNWRXQC9adEJBOzIjTTl1V3ZuQXFtZz1nT29pcilbOFMvajlSME4/XU4xc3ZObX4/bkduKUkyLiVzWkI1Py9zelpyVzlOW1lwNjd3Myo4VTBSU0RXYmRIWD95VXovI1QjWFo8WkFZLFMoe3BxLjdHITA5WVoxcGQ7cGF5NTgrcjJxakZJOVlLcDg5'@;
put 'SlhROjoiTDFKU3FPP0NsUTMsdGkxOmwzQU9wSjJCNjpGL35bXm1mbWI+cFpJQ2VHM0VtQmNwZjhHYDZFOE1GTitWNlQrRDpobUZtY185cSlkVjQ7eHwvREVkR0pfOXx0WWNMQHQmXVc1OzJWUnx5PlV6c2tCZFRrciVjLHJGU1tRNkZyW2FySmVWbSQiMFVdN2kqWmJAanY8Zis2M2RbU2RgIXpB'@;
put 'd1VKclExT3A7a3tVRCg3MWxsRTp9KypXTSVmS09yT1t2Qz1iSzZoPGtoQGBzVjV8cTQiO1UmN3B5emM8bWNqbSN0LHE5TGA7PUFlciIkI012SV8qaE95ZG5eY2YqN20oNmF4KCxyQ1pxcmdIMztTb089KUIlLFJwKkFRKUV+X3ElOVlveDQjI3JvaTc1PDdXV2VTWy8rX2lpWE82LzpbSEdPVnhO'@;
put 'PXROMEpaalJlaitteypMWCVzc2BkYHtmNyM5KkVBZCUqVXl7L0hxSl0qITVzWSxjY241IzU5Xj1NIXw5JXhHMk1QZm9eSmovYEglKXhgR2l5VzNwJWpjamZgfjwyMkJRUlVYNXx5V1IyWUxrVSN7OUVfPWwzVFkjMGd0TVg1JTtaalFNZVl+aEpiOEczWGtNfCE4ISs5Ni4zX3AxPWwxVFdTKV1Q'@;
put 'YiNmRjklYlFueGw7QFdkbkpdXkhFcDMzcEY6OFN5eFFfY282NWRgP2lESjY4XW0wN1lGNkwlbllFT3BtK31wPyFXLHdNJC4rOisiOipLIng+e0xyMl14RElrZTw2MCU3SUxHIUR+JGpJTXp8RTZZRSpuOjw9PjxmNXolMkhCU1khXW1TIjhHQj9FKUplUUJtVmQ0M1VSK2t2SmpxMD8jPjc2Kipm'@;
put 'OVZdRCFlN2w8SWMyWWEwR25NO0RlVXFiYkpHcV8yWzh6PW03X1t+OVN6VWJBRjxDMmEwSmR1MzF+JChXX3suL2dddWdwNihbS3l1MChbK3UmbERgJnh2UkAjWUtOWHdKTnlLTkY7YEtZS0plXzJLflclUnk2SmteSjE7PyYiKUZZVC59QFR6VltOWVlmTH01fl9ZMDkkd0QyQFU/cT0saSZ4K05T'@;
put 'X3EjQXlAXmUlRVpaOHc+XzN3eCJPfThJcjJifDU1RG15YVkzdUsuYSopN3BGeVVDbCVTRVpZITArcmlMR31sVzprcDM0fXtlMiNaKktZKzQrQzg6NElwIWNZSHRdKFRGc2drME0rc3V4MGs5VywlNTpjWF1tUV0xNmBRNWwpcnRjMC8+OnRnJXdFOE8lRDhlP3V7TmwlclU8UTtoOE4wI3BSI0BN'@;
put 'K1NKTHY8JUFdKiQuZFUpcHRtVTtZflk8SjRJQk9aUT94fl5eKDVqQUdvRXlbdT13SWx6eUUlXUU7bGBiVywyOlQhKXlHJmQyeWMlUFkvQDJubFpEcHcsQn0oLG03JVshRV5ZWGtGXllAUTpLPGUyaEQyfio0I1hKIUowUWMyTk50JWMlK3kmKFNrKHUydSQ/eCouV1Q3O1M8MG1NVTY7Lzp5KCNM'@;
put 'fSl1W3Uye3FeKXdPcG9CQENjTnE+PzA2JH5FZTVHfUQvX1RsW3xKOFlYJnR2N2NVZGUrKTtRTHwveHpbfG5bQXB5WyM8QWMhMFJ+WV8oJT51fW9MMjdYU1tHfm9zfE9mbHBlQS9uIyt3TTJvO2s+MytHLkMmYHwrWVJ1eUh2Q0pvbklFXjptJVo7SVFqKys2S0wjUkl+fWtiYW15WXB+dk5hbTIp'@;
put 'cy4hNGhPM2UiOmFtJEckPlVsYW0iNHwuc2c+W2F4P3JCNzkiRWtkRmZYYF0sWG9ScCFFeW4sLjFbMGs5KWB8WDdAa3NAMXw6QUxlSExLOCUyNiUycTZaUVVbcS4qMUFiSzVFc1l3a3NEaGohc2lkSjQzc1lCdHhbaShfTlhMXXw6MiMraEp5cCped3ghOiUqcl49TlRWMk9fdDQzWkZ+JkRIWiko'@;
put 'OCxEOG46OWcsYzc6bE9zR3trQitIbzxyMWhvfCEsZWxqPkpOVChpZF5JYGR5YCp6ZjlQW0ZZJV8xL35zZjhqWmI4W0klW0lYX2haQWk0QHV2eDRjRVgvbylpWHtCYjQkWylse3I4RTlaJlo6SG4rM2RjKzVwSUxDM15mXmYkbyErV0UhVnpZQClRMklgXTBXSzE6Y1dvaSIxSWBFazAuISVQNysx'@;
put 'Vk1eSSJzR3k7UnF3PHw+XXNvI3Q0Z0AxRWtBa01fWFIxdXMpeUFWN1RfQmxrfGpsQWtId3BJY0tnNypJNFVRT0Fpbl5LSGlEPiMhWzdUTSNIMjA8KXdmfEliKThmfCZPb0oxd0IuZmtnLzJgNzRWPGcjaSE/PHpTWz16UEFDaGY+Nj5nL01TPGZKKEkvNW94VUlOMyIyRnJPeTNoV1pRQ3JJMS5Q'@;
put 'Vj9SKExnbD5pZ3d4fU4zZnEiNGRvZmZPQHE/fn0lfUM2NklbNyRELn1OVDhBRCZeKTwuaVMxUlRTdDN1NmouI24pO19FJC53VV4sI3k+JUY6ZUZ9ajF6NDo1SCMvaF5menZxTUw7c3N0IiRvZWc1L3ZrMjYuOUx4STEyRDN4RilbJHRbakA/fEZwMChfL0MiJWFrZy9UQVdCNnRdOjtSNENGLEtM'@;
put 'djc/XlZMKWQhS3gyV097NzVaKihxVzk7WjQveUViO0BJM19URWx+b2dfZGpkJT5uVTUjcytyJGkzcGdfNFBXTXdIIWt+VXpWNXYhIXQzOSgzZDc5X2VkKXBKLmZPeV5DWUMlLjB3ajcjWjpZTTtgIUFJLDpeY1drS0w0XWcpUzJkQk41MXdUVS4uJE58fjosLzg/L1Arb0FqXXxmNiU0IzFVOGE9'@;
put 'UFl7dkl3RVlIUUhNelkmUzRzWUVgQzQ9UFV5YWI1OV0wV2s4MTdVI3diLlomPHE6VDxkNXk1JFg5cEJtVD83THAiPTZ7ckVLSENjYC4sT3IhUXtySTtla3khWjNiZUZZRzBWaytKREcoWlUxMihfaiQiS2MxVURHKHMhKnEuVythdElZQWJ2QHpYdXNIOV0qS1AuY1IvdXUmfVV3Z2BHOm5sfF1g'@;
put 'cGcyYTpDPS4uMSoiNXRPYVB0THQqQjlmTXZLQWlpcmp1MmI0WkxsTGpFIjIzaV4/Zks7LGg7fkJgNSVjQiJ9Uk9dSWBVUlIyVkxyLyRrUHA2NHxAcVZQMU5UM0BhVkxqYlQ7ZDNKYXk5dDZ5SWhSdnUkZys5RldvL1lvOy89QEdRdHhEck5VTER0cCt1YEByI1Rrbi8+MFJgcTxYOksvcjxfJWd0'@;
put 'Kz1YalFWOUNCKHY/WDJTdkEoaz9gYHxYWD1bQ0QjWlhZQXdBY1JoQWNFSUFIcj8ocSRrK0deR3E/SmAuYHM/S2BXTy84dU1xWCYzJks2QSk4dU1pYFlbPCwlR09Db0EmdFk0Ly5jQXU/QUoxM3hiKW1udXhCK098TFJKO0UoXTRDNzZ6RnJZcmp4VnAxSFVsY0BGVmFyakVzZT95NiVjJFhYNTRD'@;
put 'QUhgWVZhU1JOVD98LE99cnNqVkZ3Tko1U1ZXT2B8Z0QpTlt7ImEkT3NqaT42Z04yPVQvSTRsJVhQfj9yJiMsSVJvK3JSLjhuQ2VdXnU5My9VOEk9ZiVvZk90UVAlZjprdWxjemc2MnR4fClIS0wmUWsxOFJlSXdxU1pLS0FxJFZ9XTovPFZDYVVSTmVLUlBmaXJWcyoqZ3kkOTpLUiY/VXtSMyNl'@;
put 'VnBQZG8iKWUrViteeUwqdEtvWkJ9TGtjRXF5KSVFUi9WQElFRUczQTlafXdmP1NteU9mIykpK2h2P203P29IVFIwMUs5cF5FfHdANW9eSjI0NENLOVIhajFTcjhsUiQ+QHlMT3o1X29OO0h1OTFpMHhQU3gvZXAzZVgrd2xpOW5zQT47LHtoekJQeUx5RVVrdDtlZ0YyNCxuZnl0MihSbV9rOC4l'@;
put 'Y1YzZW1Tbmc7dUs7W0NWRjpvKCswO35xOnE3YWFqSUhzJlRxe0chdlZMSmx9NyhfNFs4KDIzJm5FVWp8OHZQZH0vODUuTltiV0JxQU9KSX46Ok9CPFAqQFIycGk3KnI2LjFRTDVjR3I1LD5qWHomV3BoL1E7WXFdQGI5e0M6Tnkodj9Od095XzYhN1JYajlFTXlvQnchOmtBRi9qT0hxKix2dUhL'@;
put 'dSZXaExiMSpkI0ZHLyxkZ0s2aFg1ZXVeeHwuanYhY2s2WDYjKj4/O1QpZUhabUxoTGdXUCVNMkp9YDtkO1ZKUEZ5Z3B1ejt2T0guaVAoUnB5QHIjKX5Acld+MzhuKXE0RnNGfjJDIV4jJk4xOVdRfjJhJiIkQW9WQGJoUntqYTByKEVefWBKLlN0bV93VC4sMDN0VzlLXys8fXc2JHlGM31vSk5U'@;
put 'biFfdkpqJGZhaGNwVn1jZ0Q3ZnNdU1llQjhCO0I4eVlCWSZZLGxTJTkjQXZTIzRkcTNpMDU0aGJteFJbcGREX05CLjREYGwlcDxTPUt9UnwrdXthIVo/Kl9iVkpVYUpiS3BTXXYmK2wvQmMzezx+R0oibH4hJGxnR0ZsJWhYSUA5WGYjQEdpdyltNTJROFZUYDBlXyRLXVN3PkprSC43SCFMU248'@;
put 'VHpxS2YmdSRFIXE2KUtbYXhpUC5TbGVXaUtgTnxnaGY3VF87VDRuQWVNOTBHJHleWjUyNFEyYC95VXo5bzN0YHNhK2Apcy9tTF0sbnU4Q2BKfUBeKXRPc357fmk6MDwyUzEjOkVhJmV6Yi5Bcy4sTDd+TypOUUBIb3p8WVZCSkBHcj9US1JWUytfQDNAN3l9Vih+e1JgTkEiSTQ4QyR9NEYjQFJC'@;
put 'S08rZFl6eU9RV2NjXjFAM0tlXWNCVF44Uno3MSI4PFdpTWovS317OG4lNDxeKSZHUTJfVGNXPT9rS2F6XiJobDVVKy40dXcoQjxWSlhwO3ZxZUVqd1tHKDtvWitXRWpkS1tna0xQOzFMJVp+Wi8oRypGJVl8WFNZRUcsR2A+ayN6fl1NMGwvVUpSOTUvZissQTdkcllrcDV5WXVdUTJtM0I0O3VJ'@;
put 'dCUjSEI5MFJAd0NwKzIlbk09ay9mTSo5ZiJxVzU4MXxoW1IlTiZtOnlPbzkpS1t5fSYvUXBRNmxUJGs5U04jcEE0ZGRVK3VUKExbMUI5Y2lUTiY4PUdlOylsPE4zYi5kTCV1PWJxX0FuWyRwTGskSiNtQyx1amo9Nk01IllvSG16dDVsRiZKSzIzKCRMJlFbb3FlNnZmbSZ7aE1DJXNNLDNOcj90'@;
put 'OV1qOilufWczRDN1IlhVSzRIKi52V052fGU7PUtlV0AzakhdYl1rKyk9N1JCRz85WHM9T3V9UzU0WVJ4SlljfSpJJSpIJkNlMjZ4MTQ2T0MlZEhoKFB0aFhYJGVTIWddaEY8JVo/IT8mSSFMMyY2b1h7QWVJOkBXbHQwNVtjLmJxSkEzRCFLckBUVSpMfV5QZkI/OlMqT1tCMlo8PH1CUzI0SV5C'@;
put 'MiZWdzJyJjlLTEAlWzFVUV5+LldZIlV6cXk+emJkNShkfStaSjYqJip2OkZWIktAX3NWLF8xOyU9cFl+VnZNQDFOX0laXmtBSzBJeEJ8P0RGTVYkJEFGRWRoXUFlPlNNKF0wYVtaNVdPOS5kVSFjaF1BVmgmQEclVGxvfDFDdVVRSFlfd3cwZkRaTyJZSGtSRGdrXUtATjFkblMhTGI3QC9xU31H'@;
put 'U0B6fXlNYlNRQFlfUTNJeCQrbSgrVzQxI34lfENVb2Rpa0k4YndjU0REQ3VsNFpZUUkibkpLOVVXVXFZSCY+YzA9MnRmXTVmT1VuZmR4ZXxOYjpqVihqc10sQWhGanVRODdGbmo4OjNgO3MmTigiLHEoMzJPbkU8LG9XVTF8QFNfbXwmQHk/OURdM1gwYk8jWFo8alNSM25XL1hhIjQhUHQ4ZmZz'@;
put 'ckR6KlYsd2ljTmVtZCNiY2pkZCNiZjpiVU4xZEEjclA/cDZKQDdyfkhbVDU/dzZjKVRMK21BI0B5YStJQUR5NzF0XTdJVjZ2WCpLWFhAYWRNP05KWC4mV344X2hMUFc2cHlMNFRnRzViUXVOVkBORGN2JDMhPXxzTlEyZUduUTklVEkycVlkM3xUPixHblAsXn1DfEVmPntbNikjK11MO1RbcCk1'@;
put 'X3ZMU2hUfjlRbDtsUjlRalJvTElmRVZDOn07WiIua1FPbygvcEc1SDc7bThzOXpVfkhpUjhCImRsazYyMyFfU0JlRDgwNnh2KWApdXM2SFNdJks5eEVRN21yVkFVJHdMSTlfN1c4KClWUFM/U0RCY0t4JE0yO0pCZ3p3TlteekwwenRaOm9+a3tmVVJgPX4kKjM0NS4lQl8oVmArUFhTe2ZOV01C'@;
put 'TCFaZ0V+Q1teRFcrKn44Kno/YkxHNi9ReXs8cEduTTtzeDUpe3M6SzFRb1JNcTA/I1JdMzZBTDNhSGtPPGomWyZJbyl3NWVqaE09MEM3WzBYK21oOFQ5SzZrJFJuXih7Ty9ya1pvZFtDOWApWCgrIjNYRlR2RioiM1ldQH5oKWh1c1kjP05XeTJ2QzA/bypXcmNZQlV5czJ8UEI/NHNTR3M3RXMj'@;
put 'RTxraHxYJjY5eURXdktXYkF6L1toRipNb3ZBSEVtNll3JU8yQ05pOSxjTT1OKkprL3V8angkUDlMU2B2KGpXNVNwTFRwR3E3dTMhNVR9L2s9RmBjfFk1eH0wI2pmSj44UWJ7PTZqO21LW0FoQVRITilnQWZHaD4vYkcsckpTLm4vY0woZy4xNmI6bGo2aHtGZk1oaXBLdVouOTlTOE1rSVYsRyVi'@;
put 'UlI4bmhTX0VDenFCWU48MXxCM3RRREdqRVpMTldEMnh9YExkc0Z0QE01Rl9eU199dn1aQF04Vz5DdnVNI2FGKzk9ZCVvZkhheG94UCNme3AwL25gbk57RE8mSTYhKVNQVXVae2RoNy85dDdmRD9JVVdKenB5MXFsekYoOG5lWTFZKGlna3o7a3YzeCJMeiZPbyU3bXA1N2xFdHc2S0VQbXpQJls4'@;
put 'NDM2SUoyPTY0cURWKFJuUXNqPz19amQxbmVjentefSZfODcrfU8mTyR4NDZaPmQyaCUkK10ydD02LyozVGh4IVdSPWomLD5jKWxvO1ZTQSZ3c3JDc3ZbM1B7PzQkUyVjej9rT1IoKlVCY0ohSG1nNk9sZmQ1dTlmNTIsbFJyMSRWYSRILGFSdTBbUzBvbCJBa2JFL3NPXkJZdlM0XnlVbGF3RCg+'@;
put 'am83QCNbbyMlfnBxJFZoVWlWP3clYkh1NEliaDY4Pm9Qez1nYHdIczNfSH5nYS59d2EwIWo8VCYwO1t4RV8xQ3lHdyI5PGs0ZXZNTjpJZG1wWE0xbTxJOSpnQEZLayRBdk1pYlRHMDw2NylPcHQld0REY0Y5QU1AOSVzdlRNSURlK3lVOHNdZHImbHlMcm0jcz8jJmhvMjNfOG5DS1ZxbU0pUnpM'@;
put 'STljLDxTY0s1PkR8ZSFjUyJucUgiaUlZSCY3ZWRgbExWR2swMkVjRFNGVUU1cTNDS0NQfENzQV04Un42bVR8dHA9WV9UcFdnIW9bezlPSl9EfikzVSImb2tOUzBMdCZvcE9Nb1ZxQ10wciVEKXkyRTZxTVR1P2hGOm5WaVJeeVpaIWp0VChuWXw3V3NMNyEwWH45RCs5L0VBRE1PLkxOZSFWJTBT'@;
put 'YmAkSzhYcGhlRmpPbGRzT2Z+TyJBND1Qcns6JGokSFB5JGYkZkoxVSpTckVqZDdLTXdIQVgpMkhqbHtuIzdkNFVCKVZ1cl1RJEpWZmRuZV9ITz41JTw3IWYpXiU1VXh5byI0dF1lWSZ1W35MKHRTfjguVnVOe01OKHVTcm1VTj5wYlo+ekw6MzYxUGlPdGl0SjN0UlJZeGZtZy5JfCplfk8hbyJD'@;
put 'eilYIixPP0RfdCNuPV0qWElEfClZSWdZS1IuLGdUUlUsKnVMcyVFVV5EQmApbUI3fndfazNZMWxfbUR9am5kdT84TVg6ZDw6WWl1dT9JUFBFVWVmZVpnMTVqLnJ1RlhreU59WTgxJVReQnB3RXFTWTtGTHFEOXdFRkdxZz19X1p4ckhmJHlGU3ZiSGdKbz1QLl49ZTs9NGxMVC9HPUU8ZGxdMDJB'@;
put 'RCg1QXdvLCVqL3cjK3Y+YVE1Tn5EJk50fmw4dCU1PDQvd25YWio7d1t0UWFPXUN6QFtxMyxbQjxaKyEvfnkyfUciVSE6M2tSXyk/cz8pbUBGdGlnNE1xSC8kbG9fYVBJIltCQEFGeEpnPUp8SD4kakgiRF4oYEhudnI5JlJHeTJzZCpWJDpvYj5sOTUvaEIranc7OGs7MiE1JkRfS2JmISpMJTtC'@;
put 'QDooSzJfXl5Ud3xiIiEoZnk7WF5ASl17VlU+OHh3PVttQ2VbW3ZkczlFLixNXW16MUI/YCZmSDBXc1NPW1ciLnhYUTc3diZGLjkzRUp3YDR4fiJ5dzdYbzwwbyteQDFMZkI1Y21DMHt1VkAxXylRd0MqbjdBTDxsIUtrJHUqImFmdWVhZE1uYnVrVT8raCFeXUlMcSxRZHg0bWk5fXt1bllJdF0/'@;
put 'YkFbJHd6MS5PZ2tYNk83aWtqP1A3altuKjN2aT9lRiVYIiVIWnhhS0dhU1JzPjd3Yj40dERXUiRNJGhaUGBtSFk3WkZzajlsIm9kOT5JP21mQU8mJStTWDU5b1VfSTtDU2MzQm99LFN1JTRpXllBM1t5TE5LYE9NQGBMK3A8bVBVTHEoQjM6c0BzNihYMkYqM09+bVlSMnA3TCYoZCNpQWVCOEFl'@;
put 'QjgpaWJgaiNKbGFbOU47PC56ekB+UDVfND9iZGVCNmM3RE5ITl0sVkdWPkkyKEIkXkhqIU9WV01FNSMxP2NfRy9yKWkmZiM6dWNgPyF3PDxeMVRhVipyNmFWdTQwRG5ScnUkUzJFQ0EwV0JBM25FTUxDXUReSjprcGAuQk5KZTh6N0NXZDJ1QzRPPmljRVZFQUFBQUFBQUFDImVHPCF5Ry4qXj9G'@;
put 'Z1FlWlU2aXI3I25BVTxvbkdZdU0jISUsXmI5Nk96YF5rRClIOFh1djYzSGA5SG55KnFPUj9pIWZJe2xDdzY5d2pVSm52d1dsV3VPTk40cmJwM35mNGx2Wk5GVmI8SC58QE1bT34scW9zWFYkXWx0bTZ8Rll8K0F1Tm82cVJJQEZ+ZUh5UmJ8SjdvOmxDM1pYZzcrc2BxbjQ8Vj1KYUZ1VCkyc1hK'@;
put 'bWo2W1tKIjE0UyQrRD9lVlAqWnIsam9NTzVrU19rWld5MiM4VUc7N3M5cGRiX2diQlpnSFl4T1lhRTpFaVlCMlg4eXNAaTsqZlYsI1lWO1pKVnJMVU05bnNIcGhoM2BvWTxPbWd7Q1lOVyMmLmBFTjBPamBBQygjeWd1I3kvSiIjIX5dWCRmd1U7W0BMN0RdUXc5Sy9JTixPQjwsaEpRUz5Yb0Vb'@;
put 'Q1BKaT0mRkkqSWB+LytFM0dJW1VCLGNtSFhGPyFRekNHLGxJYz4qOnhGUyh+Q0s0eXtSTltEIW14OSxfTndbSVtRSD4zKW9sLHhTc19hbWh1ZjRzYEZiWjNlM2ElJlpTPlA7eX4kNFpXT09JTnpEdUI/UGw4RmZGIWB4fGlHdXcjISR5bW9PNTBYPDEseGtOJTxSOVZtUWYwPSM0UFVVaWVGM1NR'@;
put 'NFsrNnFnLi9iWXAlX09Td2pFW0liKTgwSSY0WSVOR24+TkZ5aGVWUnwwPCIqKkk8azskbjVtJGx+b2pPWm9bTzF6VVZFQDVYb3pacVAua1VbRmp4djFBSGltK059WzVEd1UiRUo0VnU9KHBCb0xTQX50Z0Z1UTVOPy8zeGYle3gpanV6SjA9bFJrK2FGYUVwJFg9OzN+fD5gWmlSdlZza1EwVWA4'@;
put 'OnhZcCVfUDpJbiJRZmNyRTAvS3gsWXImSi83TTRVXnkmP3hdZGkudG5aaHsqe09zal1KSXwlWHMwXyFNeXhyVkdXYTs4Rlp9I19GTTZoZXg1OEdLWElITTpiJFl3aTZrWWQqKDVaTlMvRltNeSwlOX1JeCJNQFtQRzk1em4/Kjx7Ojlke3lKWyRQKFtCRjFGRVRFeEdMMWomOUgib1AhcnchRUpd'@;
put 'W2N3VTVdKyU3YEdENlhITDB6VCNddW00JWFdKUVIdkIrPldUYHhJIyROPSlAOnM1cUxrUmhUUnY2U0k1UFgoPCxNM0A1MF1zUyV+XnhaaFhCTHlfImtYRWFVMGNGVnlhcUAjPyVEV1RbT1RqTFJCRWhHZEpPTW1OUG5dR3tzP2NMfXJ9Pj5gODF8XW8qZW9ue0NycXk8cnp6bS5rXz0jUHZiVH5m'@;
put 'IVZkOnhrQy47d2JpMTZRanNVJTlrZ0BWdU95OElbKyp+Kz5LLjtmdW4qTCVASndgMHFfanl0SDRYYTlNWktXcFRdeGBoY1V0elF7L0VnOF4ldzJFN3NAYnwvN1c6MiNuZmEqYUw4YkJ+PnddJk9URUx5X19WXl0qSl5leFpFeVZYZ1UiSDlXVGpIS0lNSF5dOS99aSNbYWxDJjAoJU48TTxJezNM'@;
put 'M092fFFNJkgrXTMjO21JW3t2SVZ2Y29uSWpmP2BNQnNidTByZ0VnYCo3aks1YiR3Uy5PejpgNGckNDApfGJzYjB0VihPWGt6MTgsJU5vfixCMGk7IToqcTI7OXlFITp9bS52eXU0OjJNS25RQzBTRUF0K2hKdnU+OT1DJlRibnUjfVckPnh+akF3NS50bH5wb1B0QHZnSm5fRXBgR0JANiROTT9E'@;
put 'LykpcnQ1eHNLWyklOk0qbntoTm5SdndlUEJscmZ3M1pySiFgeW5xIj5ybHsyNDUvcHdvIkdBPCJzUzF8K3lmYDUpdSNHbmljM009amZxOS8sdTt3RyxQNy9lPlt9R1s9V3tdKVBvfDE+WkEvVVVAdyVPfS5GJWJ6WGEzTCVtd3BvPEVSI2pFMUR8IUVeRW9rJndIalVgX1J0S29JeXBTMUt8PSpF'@;
put 'eFRVWUpzUmg/ZmlndFlOOVI9a00iVn1fck1LVntte0NuLmZGSGx2ez1vdnRDIXtxIXl1TXAzTlA/ZXZvK1NXQjNUcnx5L3FTeEZgbWNUW1tNeHo2UTk6ckN5VCg9XjhNa21AflR9SS9QYzp3fmFyaV1vVl45YSJjIkxSTi9UZH1BIlVZNXA9Pzt4VFNKXX5QbDYiWCIoIj5ZZzxfKUhKOHQqLE9s'@;
put 'PndIRCY6QHF7RnY+S2RfaiQmVFlBO0RXVz9jP0RhUGI7M0VWb3hGXk9WT0NKM0woP0RmY2VEfG1TZkJxKSV0TjBDcFgoXkBFUUdQPVloPXBIMUFYeVEsM3pLPThdP3ZRPnksZSxkby8jMlpHZGNWTkIsTWB5aWIjKT9NTExXciNVdSxKOngoXUBKSlB0Y0Qpaj4jK25WVXg8Pkk3ITNpYXtdMHsr'@;
put 'ZGwzL2F3a1glaiVUIjsvKzd8bGIvSmB4bmtmYC98ezRXNnM/QWAlezlSNSpdUiZ+TzE0Oiw7YndHSkdzSlpnWTxhIzxNTj0oN10iNWltcU5JXmxrfiVPT2t2TV8ueUxPLlZ5KEV3QEE4Z0dhIz1LaHM0NSx3I0FwRnROZyhPdWU3KGZ2eVJjbUN5eS9iempYMkZQOVBqKFhQaFQ/NyVYTjFVanZg'@;
put 'bk49aDA0WT9PKypMbGMiUm5GckhHakIoREVYRDI9MWRvOnRfTypQQGYpWjdZYW49RHtWIWFPL2F3ZDUkZTwwV0godF4+dHVWYThvTTZHYjIxImBzaiI0ZX5yMCYyIUtQdnBhVDpqYC8ucUUvR1FHPkxdSWRqKjgoVC89UkdmSE00QjhwKlRPM1EsfWl5OlorVGcvOkAieHBzelNge31PSVtZfVcp'@;
put 'TEJOe1B+TiMyNDc7cVNJPGhRY3p6VihBajVlLE9lUSNTdX45U2NybD9WU3dMdiNbJWFDY1J4aWBVLFNLbyQmJSRrOmA7YC9kPTw1PDEuQFhjLGo3KzNCSyFsOjs/Wkd5KypIJkpNXy9mcnJ7QHJfOypLJWo5Ti9yYHhtNHw2T3FQISVNKHNfejJHMiNHZXtDNzhDbHImZ1ElZ11qVUZVWGdCO2Ii'@;
put 'VyUlZzg8LEAkKnh3d1NyOGguLCY0Oyk6VS5dOlBqKU5jM28iZ2ZfRiN3JTQrJX5BMG41ajFrUGxHYlcqa1FneEoyPnZFZjJDSk41WTN5M3hVa0kzOCNHUFE8b2VLc2lEYTZbIWFfZTo5cz0zSHJESDNjTmpwSDZ3cipsdG9fZ0RmVHlsdSxWJiJBQCptYjVbaDhILGs5dmliJWd5Q1ZpT3E4NipY'@;
put 'eitBT1s/S2tiMGJLJFV4WmNsbENlIXl8eTJRfVY0NmtwUHJXNDh4RTtKY2J2Yk8+bzFVVCNZd0c5QkwrLnBfbD1+U3E+Wjk1UF9AW3UrOTQjNzZCPGJSQVlYKHU0ZUt5QF10Q0tGJVduRktgR0Z6ajMuWEdlNX56KTBCR3xVJVdWQSw5REBIdClQQz55Xi9DSGM+Yy5lSHwwT3R5MVR8WDhRVGNI'@;
put 'WVhRLHd3VDN3MVNaVWI3R0NlYm5XXmxwak1kIT0jU0xNe3Yuckhid2xDREwpfFUjT09UOjovWkJVRncpVGA4USQ0Pmxqdik7TmddT1VjfXJmLzVtY1tMQXJ8b2E9XjZuemZEJm85ZXgxa0lecFY5N0ddRHYjQSo1Vyg0O2JOV1ptR3dCIXdxT2dMfSpkdjJRYH1DZHEpWio6bVpJTnxBQ3c8dUMz'@;
put 'KGFmQi5GRHVmaG1YQGE3RitzTi9MVGNTcGQrNmFwQVJDcGlXQT85cU5aVTpjRzJ7e3hKNE06YyhALilefGtoQit4eDN9OmB4OF0qT1JDO0tOKFtXMXs0UUVJMEdDLzguQE4iRStHQTU4dyhra1dFWVI2ZGRPVjoxSSJbZmN6ZDdaNEpsRXROUy8kUyRhem1PeXx9R3UrSlBzfnllPlc7fTtza28l'@;
put 'bChgcG4uMUwsN09lP2FyZVlVNCxxTDUlIXIsSGtiZ2s8VyNOcHtgPmdgPHZfRCFKeGckbFhGM3MmW2gjQFFDYmhXPjZANUtWcXlVW2twN2lyO35HI1htJjJkb1ViU1tMM11PV0kuVjB1XTldZEEmeSsqUCNYRyEoaDhiLGdsSD4yY0RCfTlKXVlENyNsYERRMld3WTxWNWdxS0RbayU1SmNwR01h'@;
put 'em42TiRJaiF7QGdTYikzMGwhIyNGXzZHN251KFdQN2RHbFg/XSlvMTZsY2RCOT14OnZHVyx9aVImcS51c1U8TDBed1chLD02dSR3fSojYy4rallBNks0djRZOCUqWjE4UmBvIyxIajRuJip0QVJVc1l5OkY3U1s3bWx7b1l4SC93N2w3bl1vans2cXl+bkhdaytGbFczRypbTHdDZXJTVEhjT3B2'@;
put 'Z344U2xoZ0lLI21tVFh3Y2olRlttYW9xOmZfSTNSRUlGfVRQanEqTiN3IXdbVG1LfjgpXkh2aDtSYTlsZEFDRD8vSW96TlckSFI/blFRZDpeeVl9UHFJTyhiNV1mN21wdyEzJj1DPVsvJXxmeTVqYVhNJXxifUVMaHBbNyJNNTlRI0FgYjdtPkdfRGZ1N2hhJlhMVGM2UTxXPFIvIWc6X1s4bVVq'@;
put 'OixVSG5ZQFcqYnlubWJbTVE5ZFBHMU46fT5GbWdBQ2ZPeS9SM0l6OXBEZGlMaWBRQGZwWDM4TVYhWjRUSXJzYD9jRHEsUFJwVD4pOyFFeTExMz8vXjRdJkh7cFNhbncxQj9GRiteP0dXSFtqTHkyVjxYY0FkcUhzSyEwRDtJdTN8cW1ddzFDVC5TXTplWHVpdjQvdHNyb2leM3ZAcWtROSFlYjkm'@;
put 'cTV2SVtHNE5iejFDT1RfKVdYZH1NIkBDYFNUKU1SV1NkJV85NndeRyRVRWh5P1VLZD1mKXRBS21JXkZddV5yJEk+Nk4rQEQ8ZXMvIyh2bCpTZX5KP1ZEaHJ1KUtncT8sZHIlbWs7WHd9ZzczMFJNeEozNG4mR0xRfUVxJm1OKGtFSVciVStQdCp8VmFlQys5biVhZzp2bT17WSh8OjNRZGQhdEdF'@;
put 'Lnk+T041VzhTSy5tMkt1cFBAZEkwTm4jViFsVmRpcV45MlopYTg6O3BeRih9UmB+RyYhbVdXWHo6SFQyfDVCYGd2SlFmfChIM0VTM2ozeylRdShkfUE8cWdXQHFBTCpsTGxpRWslbGU/Nk5IRGsmcXhOUD15MUJvfXFmVV91QmNlRzRCT0l1dnxYKDt9bEJ1ZWlPWD9FNWohUDtlSlElajJQQClj'@;
put 'fj9oQlBffTtxRjV9WHZvVT0udyFrXz05OzBLek8ybChIRDJORn1LaGp9aEFnMml2OzgjPjNUe0VgQ0ltYTBsQDddO2VxZVd4a30qczxBKj5XYSNRbzAvLmtAIWZldyYvYDg5WWpyYn44e2o8O05gdn11NX15YVs/MSZ4VDN7Q1FPclJuPFY6fX1CaWk7W0tFJjFbb0ZSOFFrcUh3N34rYTksd2ds'@;
put 'OFVHOy5CZ0dWL1puezhGTEdecjI3MWVDXzhDdGMqfWNtMVZld0UhI2RqeWA8STduZS5TTSsxUT4wN0BrO2VfeF17akxFOWtmdiRBXnwwLk5HM1RjKjNoKWd+IkB4LiQmcmpueypdJDl5bjo4Ll5DS2NIdFZpMVtURUBneW9ZWEcoWiNuKFRKVn4kQ3ZOXkl5VntfUSQlM3Q9TjlIfGppKyxHXXc+'@;
put 'K0RMfD9mRXxVJiouSHxoL003NUBocDZuLF1KaDQqdiw9XSwvR2lEen5nIXtJUCkyUnsyY0lxZ0t0fVlOMSpsPDBiNkxHViFQYCQ0Z3JqTDNmdlc1TmxeQENnWzZ5ZnN7TDF7WkRoT1svZmhCbnEvUCJSWHBLOD9Hb3svRnQ7OWokSkl0YkYoPz8kcGZNYlRheGF4bWQrY0RhZjVNYi9PPEROcixj'@;
put 'QWlhRllRX2NqbjhYJF4+Rl41QlV1QD8/Nytke09IT3I6dCgpOXA+Ij90YWZeZE1jNEIycE1fTSp4e35Icyo+JGQwcXNVU35sZTsyMyhGJWxUd2xMaHRGe1ReJHh9NCU+Jjt9P01TO00kS1pScyREbTh1WHRtM0Y/aX5EV0UjNFleeGQ6aSZ3V25sdV4jWG5UOGwhPzczNlpiIUpGd2cra0B0c2xE'@;
put 'STs0d2c6bCE0RDxPZ3gsMkdoSjdJTXJmPjxZZ2I4OH0sQTFSZGtofGgxIkkwYFphdVgmLHB7eyZsPW5ZUm5Ja2hAZy5eeG5UPyNmbmJjdWQkfDJYKHBjPCN7YS5tKHFkKF0hLkIocDpXXVQxXUltfH1ubiFbdCkrQUtgcEJfNEF8Yn0rXk0iKGFIJFQ4fDcmMmg2bCtjNDEkLDFtWCwkbmNPc1d5'@;
put 'KkoyY20+bjYuYXVlJis7XkxQPlh4VH01MVpWY0VnSXRqfXUvYWwwOEIzQzxlaDNnKX4sMHJgSVhTKCZ2SyRLW2wwR0ZlfmBeWlgyPCxzajBzQyZUTSxRcW9eXk98a3UkS2VAfX4kdytWeyQ4Nl9oa3EmNDhwUDtPe2BQX3ZwallIdV1heyQjZFFnQSwkWSxLaU16dyNxXUZEc3UkYXl5SVpaPH0v'@;
put 'TFUxaSwwQC4jWlY6QE4/RGBFdWQ0dU1mUU82diQ/UnMje0xfay9ARzZ9YyEmTCt5eyg8UUsjajcxRyIicyMwaUNZVG48aEtOZ01xSU1FJEZOIyYycHFvUXU6YGBTcXUvcDxqR3ZTQyZ9ViIvXnhWcm9qJCplS207diliN3UpemY/YzR2fj9FIjcvdGxHbTR0W2s/On5XZVhtWW81KUsxYGdkKjNF'@;
put 'WjF+TkR3Wzx5alUzWltYWDlaNCpSIzNafSxWKmtIaiIjNC9iRVA+PTA3IXFgZmA6TStJfSVuTVRiPlpbNX5aT29QNnk5VVZoIWIwVk5PbH1GdTN9MWFJKiVbLGpRMkZVbXhuM2xvNEZVcWBCVH5XPDt8IyhILlMzWkYxN1MrJmhzVHVmUCt7WkU0RyVNN3VmJjR8QGh2ejI1TVR8TEx3RkJPL24u'@;
put 'RjFkQ3NdKSVMWVc6c2Fdb3ZnOS40eExgYV9+JVNJNG4sJSEkZCtuR3BYODtUS2Y5Yk1qe0BbOUI7Ny88ZGFSVm0hVTw6VUMyJFs0QDJMUSJ8MjMqV0N4am8qYHhkOURHUi9VSzc1Z143VEA4XnN9VEdYMjZDYUR+QS5JdHhCNVVjUmh9TzdCNHBAOzRhKHokSFskRzBdIz5IfT9iUSVCMCg5K1pZ'@;
put 'T0RCUWVMZ1VnSkgye2lsMys1dktPTl8oTi42R3Jidjh2MXB2Ky9mcSkxfWhXUF1MdFs3JmNtMT9fUy9SOCN+Uj9FU0Z9Ky4kOngyMHBrKHVfLHVBa1BlYXxrNlF3ZHgpaSZCVV1AY0NQVXhxPkxAJlFWa0M5RUw1KD9IWVdAUEB4QDghcXA8TWVTb3tZQnhFNldaQ2BrR0t7IztbXVkvYn4oL2Vv'@;
put 'aT0wKipja3tqVnQyZmtPTlJeKGtuSVlVZ1k0Ymh6YXY7ZlIvVFFzNyVQN3ldNVhtelhYRy55aSpfTzhIe2ZpMSlZS2Y6ZjtiJlYmMC9ZS0VZZnokY2YhVWREX2RwV3F4dCV1fjN2SmdeNUd1dVBoNmlzSih3Lj9ha0cyaG0rLn5RZC81dzJHQG8ocl52PjAjVHg4NnRFbjNqaFdVcnNeTiU7Wl1g'@;
put 'enFSWj1ucHhjIT0hVEppZTJNcGl2ISZrKTcyXiZCUiU+fktMQDtRZVkxekB4W3JKOmxfOG1lb3ZmRkRaLlI6PVV9LDR+ISZSQyg3c0FOUVB+KCY2QFRpflJhK0s9Xmo9WmU+RT44cDt6ITRtInxHZkVLdWJHXk99UWcuQkZbJkJBZGF4TE10JlA7eT5ieDZVaCpYTUIxQXNkO3ZSfHRwO1k0P0x2'@;
put 'XUswOlN9YihjNXQzJmx+JHZuOTo+OTAkSlhCJGA3aUwzLCp1Q0kwJUY3NlVaWlNYfnhhKSp8Z3MhLFtlYH1wPE0ramU5WzcmVn56Z0xhIV8pO0ZHW11FSUV8T3EwT2oze0dXdkNpd3tUPl17MTN1NUt2SDUmczp+QkBIT0pGIT9fMUQxUHM6Zno2ZVkqNVloY34qVClbWkpkI0hoZDo0IUE6bTY4'@;
put 'VU09U15KclEuPDJ5ay50WSs9bEtFZXhhbnV2aj1nfEB1JjViKTkvK2RjalFWcENORTBNWCkxVzs0fC83dFI2dSJmKiEwO2RlTElgcjt7L2hBaUM3ZU5WeWdDKVM3eUxOPS9PJH5TU3dvQ0taUXw0OHQkVm1PXzVmVzUxXzVLTFZbXkB3SzZoJE1YXyZ+XWdTT0BDIW99WjxHeVchMXZdZFhEbWZG'@;
put 'byhVKUsjOTQsJW55MCJ1TjpWJmIrKUYxJTtqRlZPW2JhcT85YjpKVkw4fi9dXVQ2MCIjNGU+Mi4wa05aY3FYPEtpQmdlKUJZL2IhOD4rWHNxOyhTez4lM25CLmtnOTQiTGNycTFjJk0qLlFuYUh0UWVmZ1F6OFYzbHNVVCkldiUzKzBHZCVJYm1sPGlxMiE4KHZXdXZXbUJSRzd2L3RxRVpyLjph'@;
put 'a1RwL2U3eWJ+P19zTWdFVC9OVUZQWWEzM0wyVlZLMlVSelswYktIPD4qTz1vcChHbiVZX056Py95OTVUbypIdGFeMVZYRjR4cD4yaUswWFJxOSNNfHl7JntIYGlxdDxGZGg+Mm4yVHoifWBqTDBVOVo2UGZjZmhxIjl0ZCR0MTFFdlg3WFskWEw0Nj55KFdDUyxpZVVlMDlMUEZZR25fd1EmWT84'@;
put 'VTZYJkgwUXZ8fGo/JCtINGdNSF1CSV8uPXtUX2NOVyV2JX1jVElzcip8KXx8Rn1Xa10idFZycDtGZDl0TTU1VngiPGg8VzRAbW9hMSl3PklpNCZBKnBQUXV6Q3dBe3Mycy5qRDRrKX46c3Y/RTdNODVCV01KfkV6QGhERnpQL204YmJ4OzhEWUp0fD5lJTJCPHBwJE9rbigqejtKUUVDUik7RXFp'@;
put 'QVRsTlRgbG91I0N6RDYkKFFjbWNidlUlTEtWTnJCT1okcC40THUxTGsmWGM9UmYzVnVUQ3RoM0skfVssNUlDQmlnTEc3ZWp2L15SaDM2UGVlZ2BaLGhBKDVReTEzNj84Y3xJLz5ALlciaHBWUT97VGR7ME99WCMvVTY8Y0ohcHk6Ml9JSldWczpecmU+UHRgNnRRKlMuaC5ZXk9MIXFsZENnQSF9'@;
put 'QitUNlRibltUIVpWbi5JWFg7bn5rOyROLl0ueCNEZVchK15GJkJGOCxARFROcnEyV185LypaPypdY2leTGRwXihVWXpnJHo0UjAhLnEzOns6cW9+OWRqenZzTSFuLlFpNmtReiM6RTc+cHBHcyl6ZXgmfS4xZ3ZTaSR2SFIjZCtUM0IwVixbQCg2SVs0I2ZDNFlLSVUqY19CITdxI2FlQFAjeWdH'@;
put 'TFU/T1IpYV0kLH12XitnJHo+djF4flE5KjQ6dFh0eDJNIX1HQFtbRktodUY4Imw8RylBWlUuTmN7SjFmU3F8I3lbQmVaW1VOX25dVSJwd0RDfk9gRy8iJiZbIn5uJS40JChiTSMwSShpPDEsNTYhPSJrUkpDN29raHcyT35WKC5XSncyNmR4LldEbWZXQk52R35gKSM0YmhlaXpJM0tNJUYoKnRv'@;
put 'Nlc9SmY3ViIoVjM1ZEs3KkkzViJOPlB7PDFAbC9qI0ZQUyt+TyojPTo6NV8oM1smJFlyYiZwXnB8Z1RvOlM8PUxhW2NARFQybkFpPGF1NEFSNjpJIStUbylgVXMxZmkwfjV9TXxgNCxWakVZezd3NFhDUV9sIVZgTz1FMDcwXjllIWwiWD1AYD5bLmxYTHU1VG5ZakJPdSJ2eTpWWlU4dSoiSiRr'@;
put 'bX43fT9BOGNSRWdReXZld0gqYnIoR197IjtxQjBJUSo8aXleN1QoekxrX1M8fGMxN3FUcV8/aCpDcGFpVFhlPX5HWXpPRldZbyUxRUpZbV5eL1JMYDUvP2oudnpBUnByIVRWNHQkcGJFPDkkeH4pPm8majxUVlIwck1JVFUiOyRsQUpySUFWWys+SGB4cC9TcS96O1oqUjImJVNrKWIkV14ofURv'@;
put 'JW8kNVYsSSJEY1YzbVAhNy57R1shVyFHeEB0XTh4cURARHJjcGYwTjh4eXYmQGY4XTJ1SUNqOXh2MiJ1QEdHVHw4MkFLQmlRcFY5KGltWCU+TC9Gbz1jbnc3fiV3RXR1NlZMSFB+eFZ+T31KaSJJOz5rPSlOQ0MxYGZlL3cvV1VJKCluTHhwK0dOK1MkdnVZYEFoWSNQcisjIkBrQWJ8S1k8WixO'@;
put 'aFlpalRPSVgoTmY/ZSx+KzBYTntpSHgiMFVISTA8RztaeXQoflIvOl5QdTJYWX1mXT9VWFpiSG5bS3xkYnlDUmEjeTc+ciVjfkhpbTJdMU9fTEo9JUEjazprYmZVe3A3NGZ0WUFhNyM7XUBsZ2dvbURZOSheWj9rRUI9UU03NGRrYXQyUzY5T0UuKk0jQlhTMGxpZlgmfixocFtfWUhBUDhHR29x'@;
put 'PyFWaXVYPUwiJlk+RGw0NnQ6QkF3V1JgLld0TWxwXXNFL1gjdjp2Inxyblo2Rk9ESTV6M2J2XVlSKVFaPExtcFl2UjRzXy8sTFlEQHluND9WZ28xeGRfK3EodmZjNHpGUFZJdzFIaWpxWHtaMFtCS1AqZjoqJXZKbj03ekJ1MFRheDJOSVlHezhvWWA5YFE8U3BOSmF4KEkwen5aNF5wYm9QYkRS'@;
put 'YEdtPCJ2NX0ubnRbTzxnV0whWipaRSxyWDVjfERtOmB4UDNCR0dSZDgjcCpLUzlmakArWl4hWSs0PXs9VXIlZyRqQTdxfWo6fDdVL1BOaH07RS5TVUlhdT96ZDJJRmNYOCM0UVhaUnV9e2l0UmdJQF9YVGc1MXJAeF0hXXRvIz5EclBbK11KW1V6cjNUKn0pWjguWTZNRS5+bFBDcFZMO0o0QSJu'@;
put 'bGN9SE9jOFJwPDxsY1RJeEpIYDgmJmY9RzRqOyY3L0k0UiN8NHRUPWt6dFk2OHMkMXJ0a2xXTDgsck5bXX50Y2goSkgvVypKOWMxO209cV50N1FnQVJGfmkxVHVDQ2ZfdVpjYlJKdHZIVEA0N09mYSEia1FRM2dZJnxxUjFyKFtfIjE4azpbVlJRW3xGdFp9el1edEM8Y0s9WiM+JkZMM0Qxe2Ix'@;
put 'Ym5PTDBWZCNVbExtRCJ6Om4+WTpWSVo1OUo+fVVVPj1oQ2hzcDp7RDxUQyY+Ryw9byV7bD5NO3E3WGJMWnw6IXx8QztDUDVkLzh8VlBxKHlyfXVuJEsvKVluJChGRH5yWVIzOCM3cyp1LExrUmIyOl9dVSk4WU52MGE7fS5lajdtViQlSXpKWHF1cm4mLm5wKldQISs8Lkxqe3xvUWMsYit8SV9s'@;
put 'KkByTjx8I35eVWtVb1F4MDdIPV40bH59fEdiY1FAZ29Gb0xELEhoSzx+cmxmN0VaNFJ1ZU8rfFcmPmdWZCRmMmF3b1RmQlhxeClrUkFqanhBKyZbJH5eam48e2dNJGFheD4/e3Ypak5QIj5QJUdUfS9gQDBEVjhKbk9CW0JxSDAmezc4cnsjLFV+V1NCSXk9TmE0bU4vJG94JjZdbjAlM3V1NzNH'@;
put 'RnFwWClIZDNFcnN9RSt0QV8xT1AwSy5fXVlXZ0xoekRAeVN8Ri9fI35ENCVSeyxvb20uTiJ0JmdXcEEiaE17WlFeOllOe3wjbSw8eSVWUyFIQDQqUz5NS3R7e11yX1p8Ilgmcjt5bExNfjJjKXw1WW5jaXdDYFImOSlCKnV5N2ReRWBpK0dUTyg7Z3ZAUD1NYU1AeD9iUUVONnohXiQmb3hnYUJo'@;
put 'Qk9XTm9nJXZwMy5JbXM2OWIqLzc6L2FkPVVmdSMsJWxaYiZ8L3xpZHw3bE44KXRMUXJzW0dQOEB0emAwSU9XPldjPUpgMW0+ZmI2b0V4IzhHNC5aLjgufmg2cDx1RlghakE6Tmc9amdhO2c2IzV4YCR0XlZYTjZ1Z3d5bldzZk97Nm4pajV7eGY6NyQ6bkgkYysvKUlZZlpQejgyXSZSKm0xVkcp'@;
put 'KWk5VjVGMW5+djRDcSpGMTpuZmU/Qktqc3kyK1U2Rzo2Qz5APkNRZilEVnZdWDFdKyt2fVFXQV9CYVBkOmdUNj8waS8lKzwiajhGKDAyJUQuezxQbVIhR04wIUlGQDtxOzlBSSRkbW5TSyZvNEpBfVA8XnNzRGtvRlU8UiFsR2lwSWRgNF5wb3g5UD0yVTM3fkZKayh5VXd0JVNkTTUjN3RCcCZt'@;
put 'K280JXRbZzNbMCt4WDQ+aDQ3OXxCUTU2fWVhajxoOGw6NnxSVFlWZURvUGQuVmIlXih1bUQlJClgVHxWY3RgKDREfCFhTXVbMkZnNEhyLGMjX2RdeElzOnVDTm9sVUlhUChYKyZVRXs/VzxmYH4jdmtmJkRwJXQyLjMhLm9+PHNLNV1IKG03dyhBTWdjbEA9T3NvJjpSPztmRWZ6VEhdb3JXV1V4'@;
put 'eFJ1OWx1TG12L0pHekhSYil4K0Z7KXJ3c0pLfHFldzhKeWVeT2J2PF51VyNrRmt0OXlIKipGL35AZHk8c29VRWQ5a28vKVgrZEx2R0giNEdfaG0wNjwkaW8we09MSEo0WXciJDFYfTw9dWNiOiRnP3ZhSU9+LElVfT1tPTdNbChLTXVPU1lbQiYuamN4JUx8b210ImdHIV9bPVEqMyRwWENXKX1w'@;
put 'OChaYTREXXx5dEYrTjNMOlF2QjArZW0/a3tJd0gpeTFGSklUPlEyKyxARDFoZiQpUXp6RXI1RzpmRHR8UkZgenJJKEgkR19Tam9AT2BlPSU7WVN3QEgzOHVfK2FzPyUjOkNkQ2kvOzZvcXpkWEAofDM9K0UqYCZOPzQzWDc/P1lSPWpEbnAzdyJxRF11UD5WR2VYPGwxcjZBZE9CQ2tmV0E0NGFw'@;
put 'dXkkSyNlJCN1ZEV7TXhrTmxlc2k8fmRySD00YEE+dV8qMXN1XUBCfnxabCgveHEsRGZ2UztfOFdxZUBoP1cjI2QjREMwPENCc09kZGc/Syo5X2FhXm02dHk+RG5jT09WfHxOIVpaI2YkdURCcURBSl9LeigifkVRQE91VE9HRUQvdkdFPGVecGt6O2hOZSN7eHxDbSJ4XywzaW0/dj9ERThlX0x1'@;
put 'QXRxVWBqXkJXXXhzSXsjemNsLDpOV3ZpciZhWnIib2xzeD10NUU3KDFZKFo8cn46I3BWYUtldnxNMXh7NkVyZSJgUHQjUT83QE9AYDowQy5+KyNsOEFgR0s+WHN4LHo1RjVSSCFfKkhPZTshSiM+R040QEpIcGEyIUteKDAlTylYWjouLzJsQHVsQlRJMXI1IzV0Oz1qTDNEcTBFRUUhaD1jaWs+'@;
put 'Rl54QSxkLGheVzYhe1pUOE41d3J4RnVfN0A7UjJhKkpzI0lJRVp0VXZYdyRDcSJgbmB7WnY/ZWQvTFldMzZYPXpEMzF4Xy81dWIib0YlZT5pUlBVfT5CXi8/UDMsInoqP3ZBWHhKPH0qOzQ+bCxsXjptNipmcFpuYEBxLGRxTHJHNVRXKSFCZWRlUzRCdD5mX1Z7LFdXUiRCYixjeCl3IStMKXBD'@;
put 'dGp7RmN2PTpkb2VdT1IyUU81NSVITDhHb2ZSWnUsWWR7TDAxeiV9KjtkMiU3PmY4fn5QcntFQ09OQ3JXMXE6SFZMaSlIcmtoeS8hJG9MbS51aVBTNV8mI312Zl95TWxNe2kqX115bTxaUDYhOl1oK1gwWkNNPGxUbVU6S2Q/ZV5INCokbjR0d3d1PEQ0JW9xKSJbOXxZXW5PdX0xaysvZWgkaCww'@;
put 'MGw4Pix0SSt+ekl+fCJwPDk7ekhVZGt9T24wOlNLIUNeV1ZjRGFgOmApU0UsXVtbNGRMSllFTzZvdlRnS09NJFNoeCVCVTlweE5HNHteJSw1Tzs8SzRwUTkzWk10dEs5TSMjKmgpLHBuL30mQkJjL0hmamA2QzpbVjEhVXc4ZixPblNKO1FnYDtLIWdLVU9TX3w2aDdnVGlUTUA+eHpDQSM5Yllp'@;
put 'XlpGP1k0MXBPJSY1YF5mXWVhZSxTZnl2Zihid1RgQCNqZkUmeyJTV1c5ey5fO0NnY1U3U2lUdG8kcjZsMyF0aUwsY2BCXURUQzxKKXc6XWd1PzZ8PTNWfXh2TW9bSzlgYUYwTGBKOk14R3MkKF5bVzRqKFs2ViFrISZIOS4sayk5NEMsM1ZGWCFHKDJuPjY/YiplOTpZSHBpQDhXOEE7VWJeJipD'@;
put 'Ol1nVjE9Z2w1WUd2U0h4amNWfCk7cyNgXV5vPU9OL0wue0QoS3lJSTNXOXVUNEBrYTZAeThnWEoxKjQ6Q0AxPT1NOG9tPU1UIkM3bypueUBJWVZFZj1uUzFNNSUxX3ZaLjZNSzBsYE5oYXhBUTltYnFucV4mOlZRcGBDXjRuPyo6WW81WF8/TV18a00wPCxdPVNoTlR7U3ZSdVViMWNyTG5OJEdw'@;
put 'QW91Vm9NdUUwWU9EM0s8OUJweF1MT1hHb1hrMmhjRThNVW44Sng0cTtbcFhBKCZJI092Ny5XRHwzUz53ODluVExxSjYlQUA6YGhORjVMdnlTZ3M9cnJOSCZwLFEoSFFGKHhEUmBue1cvY3UiLE8hQ0c3KTNCdzI8PSYub054cT08ZWc5W2cwMi96Sm0wWk4oW09AP0QwLytkTVo5eDQ4K0VuMG84'@;
put 'PFZbXlQ2OTpEbHU7dVg1Iz9odnZfMF9iUlUuKkE4KVtKNFNpfGhVOGZUIk5DSnBGSWcrKXk5NzZ1L28ybmUiKVUoZktSbjoxODk/VnN1ODVaU3NpQW4hS24rUERbKTJkYSspJn40TH0pXlt0Qyh0ZUl3O3FJalE3QCtjWThQN19DUDdRLDlYK29NOU1FZD9oUl52SjdqTGIjJmQ9TDp1UDp9JnRv'@;
put 'RzRNWFpSIS9EMEUoPlpARzlGQmtEUiwjL2lqO1txTCpEVnxIVyE+SStVc1tyZ1svSVljO251PSU1cU87ZWw3dX1wJHYyNHEkZ1gxb1hSbn4pWk47Y0dRbEU+bUh1YUBnQ3hUL1NvU3ZALipuI31qQTJMPTBKVXFhMEJwJVByNHBwQkp7bHE2R2BoN2VoSXVvMzYxO3d7QFZCcilVIT1fV2VEK204'@;
put 'Li8wTlU3QnsldTN0NHVMYEVxPlI9JHh8NG1xZXZJIkc+TUlhLnE0KFtnN0pIU31FMGoxJCQkJVs0Xl10SmlefDVlI1IlW0FQa1RgdHJvLGpAel9XKEB8Il1QXSltJncoVllVPU5ZQEQ+VF18Ql5Kdz8zdEhJISU4S1ltdFkjR1lYUypAOnM4SF5fa11eRE09OTdVSFZmNmcpWTpaV1EwYkhQbnI7'@;
put 'e0lWIVhxXlNlYHxzUHdRIiZ1ZnkrK0VwcjtFNXEzajA/WSV1TzxEa11dZnRVOHZYRER+TDMhRClsL2c0aSpsdHIqZzRqaDx8dTlwXUhQfmQ3TnNYL2NQWC4kXmdmQnY6KzhdakdLKj8qcllWTF1fU05eSDZxQWkxe3t4Vm9CYUBITHUrY092aSpkOlBYRz51SmQ1THlyNSkuNzlubzt3Mk1MUWhO'@;
put 'UnNFYEwsbkdYV09INWRiMjsmd29dfEI8QiErV317N09TNTYoUGs1JC8qPD05U3lBYExHV2s9d0owfC5NdlBPblosIVA6cUFgInphLjZzUHBFVjczXnYxJDhoMjJOSjZmVWZpK21bR3RzfFA9JT54R2hsb2VdWVM8OmpnbHl7S1kzWGRoLmlvTGtfMEssWEpLRXF3PmthezdIbHJ8fkd7dVhVfk5H'@;
put 'aEs3YEpWcyJsbCM5JmhqQEwkdXVpcTYpQjVNaSssYSQ0OC56STRCRDBNUHRrbT90fXIwOWZPKmUqWyY9a0oqcy8uRjh6S1BfWShwOTgsR01CQStQWFYvKUhed0Jhd30uL2IxZX5aPn19OiwjW2JEOWxSY2I7XnMuY1RAWzNnK3csJDd5VDh7WWhSSio6QDNuMlprSyF7Klp8ZXhPaTN4bWUrW2p6'@;
put 'ZW9bRTo6VWdBOWpULn1dJGxKVi5DVXZ7TkBkXmkhUVlbclojJCp0U01eRSJIO1FSNFtQVih0OWcub1VkI0d0TS9vOTpBQHxDVGBXfTM+UTxtSGdYe0BFKExkeWFZa10+K09jNEh8O0I3TVZWKUo2XWwrXileUyFzMkRzR2RHTSt6P0RXJltgRkZOMlpxc0F3SmJUd2pOcyl1eXFkeURMKWRrbCNu'@;
put 'Yn41OXZpZjNldixORnM3U3A3fElwN0ZVPklvS2dnQWY9X1F1KEErX0FTfjlDb1NBYlB7LFJYQytiW01CR09XWGkxb2FHMHFqeEpwWWxaVG5DZT44O3g7WiosQCY6JTVJYjokPzwmbXRJMnwjRns7eCMuPD5xLyJYNjZnUGo2c0QhPVY+VTxKUEB2Kl5sUVVDO2suPHBfbSQka0guVl9bZEY4MHNh'@;
put 'fnAmT147Ii44V1A0ciFTLyZYXzdfcGlmJC4ofStnPk1Pc0hbJFkjLno1LkUwPVlhViRWTEJzREJbXUc5PD0/MGYrWFltVjNMbSt0X2cwP19uJC9rNnlON2UoRGdeeVhPV0NaN05hOykjMVhrKS4yRUhQX1IhcmhkQX1HWSNYMUFWI3MqSjImPTQ3PkNOPVhmU2lraisoTXtHYj1eVDZTMVk6e1Us'@;
put 'VlA3ZG42MkZscTAiREt6KEFuOHpsMjNAQEZYe11UajBGejZ4U1QmW2tMRThNd3Yia0xVNGZVYTg/XzZiU100L3VuL05DRWxqVHhJcTo6YVNEZjZBfHxKLkwlKnR6L0YiYnk+MVh7LiRORnEyZFA9IWEsdHRzKjVEaDp1IjhPaSFUd3M8cWVNPzF3fUo/LzF2ekROdWpVcCNsPDQjY3JwWiYheT58'@;
put 'Yi5kNzElOD1iRHkwS0J1cEwqTmdmaX4vMGsiKihXT3trb3FSQiw/dlUsWDVSZTw8fGw0JjZLb148dHtNYCg6U1s8TE9BLzsyQippeGd6IWMwKHR5UDsyTDJpUmJhQit4RWs8MXRJQmdyeXAybnFfcSlkRUYsU1NdcTMmMjBUYnhKT0A9Pks0bT8xP29IUStTfFt4ZC4uNVdBR2Yobz00Okx0YHJj'@;
put 'UGx4VVFhO24+UV0obCJQZXsmKSJhfUZeZHVUNSNCYHwoT1RbeUNnfVFLV249NERBZSxUIjdbaCRYdyY2IT0rcGRFRlNifHRoSmtian02T3wwXkJSJHtzKmBON31TY196d0lxSFk8PHYmIm1bSl1OWHRAa19QMWEqWCElM0FZZTpxK2s9YSF4SkAkTEE/THIpOjhSOihCLl19a2c+WFRxTFc2Kipw'@;
put 'T2hPO089Zj9BPXo8YlJkPSojdj9QLkBDcEk6XWQqJUp4V0kyTG47TTYwLjw9P11IcXYyLGAuVytYWFZqUFo5fFl3WkBPZVZ4eXksTjooOzY0Qm5KPVhTeTwwanhHOS41R3d1ckdtSW0vSE4pJilFSHdQOTJNTldNZi56MU5jNERzQy5XbDNoI2ArViMhNHUxOVYscC4yfU52fW5lP0EvN2YxRzhx'@;
put 'KXNsfS94TWV4TGEwMXRhJHokX3soJTx8fj1FWz1XRCpyNXRQSWJfQHglRCNQIlZFWWorQT5odE1sXXQ+dz1tQnlkdDh4MkkySzFoPFNeOCZALkpid1BLOTQhTit8fS5+Wn5USX5ZTCk0e1E9ayo3ZVlYVDAofmp8XTRRc3lgJk14QSt2KXRFMCxUYT5sZ341R00jeyRhVzsjR0hhI3siOVJyczpj'@;
put 'dlE8REBkcmFpNmJkL3NNfSt+ZkYjfXFfcT5mM0YwQHhGKmUqdS4+Pl1xdDYvPTVubCtnLGJmYzFDM0hZSkBEIXA+Lk9lXWsvVWFSVUBGVD5+a3NyZG1vZkJ0eVNgZyV8Ki9VT1h4VjRQPkhjSE5XSWk5TURjYzA/PD11IWkqaTU8OiRvUXJKNn5RV2Q0SStefkxrTVEmdmtlPEJFOHFJdVNwXXgl'@;
put 'XmUkISUiM1VLMjs+eF4kNTxQNVBgYkRUVHJ1Kl4qIS50IVU5NVVOQWhUYHJ8JHJ5TCJxM18yX0cuS0Z6VFUyRz9EYiUhS2xNamdYJFRzXVg/Ln0zTFNEX0wkSVdORUxRYzZhJSFfSTEiZ2A4SUpGQH44QmBGOk1MKl03QiRDal84ZGMiUTY1Qk4yZWBJakNbLit9Y30jPj90eytLIi86blo4cCY7'@;
put 'STRFNURJKGZBTkYiVlp5ZntILHprKlUlUjJZMjFJTn5QPzVFPkg9NiI7XiplI1FXOzNPMVklXkwyMWJKRUYwenVwbFUiRGJFUy9nK0xfejN2TGdnUWIwQk1oOXFOYmgsRyJUclVkKl8rU1BUTypBNTdnYHlRWH5dZDpaJihqPSV+U01zNSFHImpfSHxfcUczSSZJPCZySHN8O0tnKi91LHNiQ0Fe'@;
put 'WlNrZFlbeW8mJXRIRFpGe0QkKWlGZn1fNm9oMDNQLF1+ayQyME96dEF4alNra3gzMmdeNFhUXX1AY3deK2k4RT1DeiF5KzhtREMudGR8VnReV1M2eHR7P3guQ2hEV1VCTjguO3JfV2teeyhWWW0yVksoTm9URjNeX2dbMmVmTl9qSzJUOkAyODhHXj92alE1MXsjLDMscChsUV43aTlOZkRAeTM7'@;
put 'OHljNlMjZkEmISMxJnd6Q088SGBabX1tYmA/NEl8WEFpYl5gWk1uSio4TS85fDVYck1rNjMzZz09OGdANEBtZUJ1RiVpUnlVT1V0L1tAJElmYkxQWmwyTD1SMXpZXSR+W2NIRkFhU2hBfjdPd2hNS1teZHdvLiNtXUI9Wko2c11FTVorJSl5aTN+UyR1NkFQKzpVUXBZJitWOHpdQ2JZdmV3SG4u'@;
put 'Z0R0bkkwXlc5U3B8PkZreC9zZWUoLGJUPCNVSW0mYTdIb0A2X3cpRSVOZypAYj44cjN1LFJtRUQ8a0YmZTU1fnUmdiorYVc3XkYudHdUR0AwJGBHSCJaYUUmeilZbSwjRTl1aTxpPys6SEpLMklsfWZnVyU3QDxZQCZpcDFoYEgwTUdDXXtCPl00Sls7UXd6NC9OKWAzdUs+ck8lVTBjRyM6Y2Q3'@;
put 'Yz1xMDxKKTU2PWxbM3BqXWU7QlReZXMuOjdVP3gzWSVwWChRWmJpNk4+M3t0IkpUMj9EflVOSGZ8dnw9I1ZgI2peLlUoZDM2UkFuMkdpMTdgdGRnKDZWZU0rQHFzN3h4JXFLfTlHaFYzLHIwUWpkeF5jWig0flV7Y2k5PkxTcS8ua3ElX3htNXNqTk9ESVUzb2BsanddUVRAO299OCpWbFleKEpf'@;
put 'Zjw+LiR9STA8YGRxbi94QHhKQ0lXP1pKYi5XdCEjdWBuQkV0P35xZC9hdEZ5Nn5+Ql5XME5SY31GX3BBU0ZnPzFiVHp7QDQkdiRNNTs5LCNEN1FkYy8ke2MkYX1DU29KNE4/QDhAfmQ2Sz8kSDl1ZT0iLzxQc3VBL0xfTj4lYCxyMWx1U2oiaWtMQCpCaz5RPGhiKyVAa0VoOTBtRGJiMj0+WCxf'@;
put 'M0ZwcmNVUERjdiFWYFR6cnV4VHV1TCFfaUxBYXR9Jm5UbEkpMjRvTXprN210OCVXWkglMGJFS2xIc3toJmEvLksib1Y4MEdsbDtaY3lAbU19dih1MiwmKD1OS3YmWFtTdWEjRC56Ll5na11jSVNLfjZLK31Lb2g1RWVBYVg8NEx9aEYoSz4+L1prQHFzRDtlTWZSeVNiZmVUSW4hVmwscE9ITTdo'@;
put 'KzNoIlcwQmtsMyVqUlJYW2VHT29FcGYoQl5HeShoeng9MVtPMmxEfWE9bE42ZkM1cyRYb0hKMDxzOER5K3RYTHNFKktlYDZMKEd0Y2NWeVtTQnA+bElJemBwOVpbUnp0ZX5Jc1dHRHIob0ZrRGovQkM2eih4UWp2Y3EvJDhpISxGVWc/QmosLEZ1K2loP1NIQUJZbkMibXVhUUJTX31ZIXk5YSVN'@;
put 'YVsyWkdFUzlAYT1WQ3hYV0loMT9lLn56JVFMJnAuLCQxPUtZOj9UQGs0W25oaTBXVztgSV9WJGwhbHVbeFQ6LHYwcGcpTls0VFUkVy86NShCT0N0X0UuemouLit4SDoyXXdxamd7VVk0fFs1cH0hYEYofD1OOF9GYENVbkZtR2h4c3k0Rm1kdjw/dlBWc0pJSzFlPWtaJHZfeX5kcF12TkNmem5K'@;
put 'cDUhKlhvTVd9MnFBKDlbfTgqUHZGPG9nIzE8OzV0JXFCMFM6N01RX3t9RlB6c0NMIW8lKGN0TGlxKHZkIytMSitIelZBXyRVbDcpPzo0RVE5eEsxdXtVUkdbVWo5fUlkYlEqWjxTYnoxYl4qJClsJXx3Wn17X0VsYncidUVoekI7JFFWbiJDdyJISjBpZkxCUnJYYnpkLyxNS2AwPVF0YE5QM3hR'@;
put 'S3VpOkhlZjZMeDxpKXI5UiFLWj00biMsb3RjR0t5O3x0MF15aEt3d3VJT1FENmopMj1jYWs4Y0NCOy9CNTl4Zykxc31rdnV3SSxbfFp9X0RPK1ouZlEvITI7WDs2TlUodVhpRzJBZG5tSmd6Xi5CN1V5UWdBJE43aXM9Ok55RUVXSnZZcSRFSUVFKFJGWF1gIVYkPyJ9OS4hQ29lQURPN1A7Iz9J'@;
put 'Q3xOd25GJkp1KVA0dzN4PTh6IWNJZEYwZyNwam0/WnB+bUtIJkc+Lms6VzVFZVE/MUgoaHREeDgiN25YRCgrL0R3ZG57blVxUlIuJlhlNFh5V2Bkc2dfX1pfLmtxSylsTVs+bGo0SHs4XXx9Pjc/cyVPbjRDN3c7MUg6YVFVVWlaUzxjJkw2T2VdY1hRfWVzW3lXL0pMSk9nO1lgWk5majZjPT80'@;
put 'Iyw5dmpuSkhNbVhUXW8/VmsuS1k4cTA3Rjk1MiZ7YFtxUVZ0KXJGOXE+TXpKUURxLHFlW2V6UUR7T1t4cntFZnpMOmRaJjteY2lJQz1DT0RMUW9YVDJ8dnchWG04THkkXyt1NGRCKCRMKiFOZXRLS040dkNJQD9KdjlxUkBlWl8jMkw3a31tLHtHfTM7PDZzNnR8OWpZQDcrcEJ5QSxKeDBQYFF7'@;
put 'eW44NT97aTgkWjhjVkcmTUZoNVprUDlsTG4wPyhFREYzdzYmMHxkO2tORi9jTSomUzdUcFFQYDBGeH4+WUZ3ezJLWS8kTzxmMyE0alJHbitkOCY9JU50WWg2bCl8KnFoXi5CWEc+ckBlVzIjKD9nTmhMKTw/KkIpXmUybj82dEZyR01SdGg8aDB8RjVgTHcpM2VZSl5YJTREbT5XKihVemojPTB6'@;
put 'djBBM1Q5TSRwYTRsV1BdSGUsU2pqOEpzQkI6WjolM0Q9QFVNYHU4czIxciwiPEs+QHdMIT1bNEVNRnNNUUlULzsxQXIxRGc2Vm9YZ2R0NUZObmNqLno4KkNAbD9PQW0vYThCIS48W252RCgrN3F+YGR0Rl9WNk5dT2s+c29hOl5mPkshU0sjX2RbMnx4e1lZb0puMSp0cWUwdWhkTjp1UzNJPnFD'@;
put 'NkpPUH1WXkdnaFBsTkllOzNPW0lRPFpXcjAvIW41NWlAPmAwPklncSYlJSxMez4xMnUyeDImU2YrIWkmO05nenJrcyEhLjZ1ey5ENzE5VVUvWCRXJC5FL3F2UTojQVk/cTN2MixlTnFZdUJsMURdajV4WWFbIjpSJENRJTw1fVgqQlkwaTFpMFVBSlBYYkBBSShIW2w4Z3ZYQkxsSntqWGxIOmMj'@;
put 'ZmR8eV9KSV85V2RrM1EjNCxAY0wzIyk0M2c8OVVFKEw1TyQ6KUEvaylqLyRMcThJfXh0I2VkbX01cSZqQCNLT1kuSGhNRFAvYD59XytaO3RdeiYkTzw+V0NRInh9YUhPSyUsZThCcXVlLlVYND4pUD5me2smT1NXUVQyR3E5Vnx4Ylk7IVBqRDoyZlErZnU7WlF1KDoqJW5ndVNjdFp6dE4pRkhf'@;
put 'Klg2UEpNZmVGOi4uL25qNy9BUWcmaTUzME9CfXh8bVBtfXFHfTNySjp8OGgkW0dGI3VNLCEiSzpRZmFkaSslVlk/e1FxNlB2Snp+Qm0/bkVhNFk1RGJPKV1yPXZ4ZSNiKT5aQmRSQmlVQntALGlwd2UsMmRITGY7RTdZeDw/Q3d5dXR4NF4vU2I3OjM2RH5gZj9RNHNYUyJaQ014JnEhO1IjbH04'@;
put 'KF0wO3htZ2Q2cWhwTCNpOiZGJiRzeTM3VEp+bCguZTdlO09DNy88OiM8em98JG1pdiVnNm5RYEpdIUBKWF9+fHFZbSM/Q3E7djx2bGdePldiPVAsVW11dC9kMHxpZnRrW29jKlJFQzJ7NklyVUt3JGcoKEhhX1lJcV4xO3IpdFRUPSlEYCtvcVlheFY3Lmtfe15rWyozYXdyPGlOWXBiVm5DQ21r'@;
put 'QF9LeFY1STc+Y1JBbS5fQ3oibDolTkUiPzk6UkI8e3oxdHgqTmN3RVQ+XWZzMk0vXlEzPm5ZWTkvX0NbPFJPN1Q+fnQpLGJvQCMqeDcoYkkwNzElWCRnekN0QCFpVkk0MiRHWTJiVXNPUTU6KFl4MU9jZGY+a1ZedyhSOm50KlpRLFM3XmtTRlEpYyN+fWEqYnx5XSxkcEZWdEp5OTNCNSVQPSNi'@;
put 'cUVyQkgwcnAhUDRkRVVLPSM3dGd2OCUhcUAob2k/ZTpOcE0we3tiQi8ob09YWiFSPzgjbkZkMlVQK3pPe1I7bEZdd25+fWJsLkVXSDBsemc4LHY5WV9bS1c8Q3RoSTxMSHUzRDROR2FBbyZrQC9XcTpbfnNgYzkpPXFFZTpOXV08ImhYR21FKyRFNE9jZXAzPnVnaFQ8RXIiey5iRFZRKDlqZ2A7'@;
put 'PUNGIXAxV1ZDJWtKR1hFQSIxYiJocGhuIWppcmRZYE03OXoqO1FHQT5tSmZQWSNZPihAcG40KFg1UyFMIndeMTpeQWpXLzt6L1lJSUpkPztSIzV+V3ltfV5uOGlYKFpdLGxFbTF5fTlWVlJ9R21uek9IJTxmK3pqQy9EYU9IWThYRCZjMzU5JC5gOGFMaE9sNF9CYis1M1JxdkNCVXZEU0diaWo+'@;
put 'PU1rQXJGOmQ/WENOOWVoVjxGez4lTDIlZ3BmV3d9fUpvNCkzcDI8VkxsP3lQZmtqJlE7QHw+aWlpJGJhdGxpQjM1c1ErY0FKRj1vLlNlbzowfWU8ISM7PGcwbFMpeCViZ3Y4dEUiWUlwS0EpNSplVWxiNWdvWX1qUDRRWzlHe1VmMHlSPmpFVWMkPkIoI249blRwWUwlUlIiOytUe1JJVEtqfWpJ'@;
put 'YFNEMT8/YnguLzpDfkE3WVhYc1J3dFAxVlF0KT81KyMzInYpJEcqcTYldyttKjdKX01feFV0IzoyRDtBNmguWlNbWWlQL0sqcCQpaihSKGxWXy8yZUx4Pys8UzU7PixXY3pTfFJxQk4qdj9JWnJQJn0pRGRFIzldbT98eSV2VU4kbU9UezlCdihtTktPbDpKaEMxfVFOdWlgR1J6XWh3S0ZdUy9b'@;
put 'dmVPQTVELztKaXw6TT12U0NSbV8rUEBbJD4pMGxjbX48O1laJiR0Jn1bVDYiPVpIMjpkOF87I2o2TElrRWdHaWxrNmNbN11VWX5jfiQjUk5wLGEufHRGdFpWSytsfCkwI1Naa1U0Y1RTPHlSJkVBcnRGdHJXIzY4QVp3PDZDS0V4RigqJSRGQE41KzxMZ2NDamYkYDJrIy9ja0FwRFNleU9zXip1'@;
put 'I2V1ZF9ydF1vWiVrPyRpXmpNNF1wVHNjKCMzLnJUSjpsRyNdKCxHYnR4JEk9VywifUxVe3swP2tlPl5WcU0iQHE9JXcpQCMlV1dtWjMubExWPW41WHw4XzFHZWdCRWBqPkNjUE5YcTFHbnBFIixyO2FjUkFoOShidGtnbW9MP1QmcCttSUo3MEhRXi9gWVYlZmVVIXlMPiZwKVIvdGUraz9PdSEj'@;
put 'XT1+KGZ5SGVxc0YxWTI3Q1ApYVsxOVEod0RgM2BEIklyWU0sYTBXay84TXtPRiVQKFE9Syl9QnZ1VyRMUikjZ2Q1eHhSWDNUKixlXmRRVTt4S0x4a0IuWHU+VEUvUX58Klc3VSVfJT5CYkx8fCRCRWo4IWA7cV8rWSh6Pmt6TV0jIypiZ11JVDR3Yi8qSSw9Tkk8QGdJZVUzTjsvYFJiVC8ranpB'@;
put 'KiQvdl9hNWpPclFWVDhDO31nfXtvXzJNVTtgfThdTmxYYyIrfTw9aTtjV0V2cixFQ2c4OCplcHZMbkMwa3tWOiVqLzV8SWkuRHlWRyRgZ2krQUhfclcrRXM3YD9dNzVXR35rIWswK15DNU10eDZ4NzVRcHUmQyEoWzUqdC93PWo1XyYvMkRjZUBoXSZWL1VHLiJ6Yj81aTBRRCJgKGF2YGI5W3J1'@;
put 'Z3dvSn5jSXI9T2Y/ZWBsVTV7dzhtLHpbPDswTnB+fTlQO29DfVUidnxqaFVpe2A3a3RwcWd0djJndl8hdmpiPjdxZXpGfk11anwuRyU3e2JCRT1uKmx8dSUlZ3dycW9LLlojantgVW52UTE4IjhbLGl1UE9vOVt8PlhHRiEuLlV0IzE8YnA5ZEQqYkRYamZte1dSdHdpYm4iKkBTNlQkQyRfc2or'@;
put 'QitfZEMmMG9nPG97TTBxTkJ9MzlwODE0Z3Q6aWM7fTheZHVtQUcwWk1SVTckezxVOHJfTz5bcUx3endgNi41JjYzWCU3LytLMm9Zbz5+MjFRXXAwS0I9K3pNbkU6dU42eS9sIWx5KH1dTnVjRyZ+cldgJVBnRF5GJDVZTkY/MlVFZFI/XTRIUT1WJldAYDdfTEglRjM3dSNkWWs7QEBVKDElN0RZ'@;
put 'KXc1Kmk9SkA0MTFCdE17biJIOT0hIyZRNDU0PHErZi9iIXRubVpvKUAsUU5xMCZLUX1AMktxJnZpSlducHoleEoyKzpRfWQ/XWR9fSFlMywwJipQOH57LDk/alFRdz1YVkd0LFhwIi5yWkBBR3JmNl9qUUYxVkllfEIhL2FmZV42RTg/am5oXV96fikvMUFmJiQuI2AmfWEpQE5yYVFOI0U7U15j'@;
put 'cHVSaERXekQyR18lX0w1UGxVd2RXczZadFVXeHR4UWtqcV9GI3BTR1dJRV48Z2BGektzWGt8LCt1N3ssQyptWTp9UTorbHx8TWFwOlgpdmBZbzJtW04sKF5CaCZxK3Z7d1p7SiVJckRbR25ydVkuSGY5Z2RDJXVnSVR3Wl5xXV1wakRxLz59IS5TJVgpXy5wZigjLjJxXUdpNS8jaDJ8MiQ4YXVU'@;
put 'NlV8NXdKQ1NlX3dNcDNqT3d2Wi80WEVOP2leZDxENT8rbDl0UjBaVUxgfXVqWSlgRm0kUWMxQWl+JlE+W0tSamgxUDguNDh9a08uZ2QpdGx9ckV6amhpMU1hQWZfS1FJMCs4MCpuNl0rbGZLN1huPDBoZl9WOkNeaXR1ME5xKX5bUCh1eTxqPyVPaXBmQEVpPHVRYW9+K0BiM25bODlFbSI9a25t'@;
put 'LjV8NEt+Kmc9ZD5aMGFYMSlrc2EoOSROQFozJW06SUZwRkJbI25PelpFLlUoLi5eKSJyY3ZLcEIlYU1ufFt7JDV8VyQue0Y6dl4/c0t+PjAzIVR6Y1Z8bEx5IU57RSReNFshbHo0bF5bUW5bLDFBSHt1eiZLXUM7bThdYj1QPGExU3Z6Qno6JVNvNy43U08qQXJQdTpxYWwwSTJbJldWaTFXPDRo'@;
put 'TV1oSH1NUmh1ZSN9WUJzbzN+TmdecmwhVXk+cTtnZVomdDZ5U0Y4UlZLISQpYXxUUl4vRT0zI0ArM1BXXlllK35CRHhWNTZnZlRDbHU6IUlBTEB9em5pbno9N1g1ZlIiS08sZU04czc/YiUiSyZPUmhQaFltTEEuSjokfUEiZyhSI2BWTykwW2FqUyQkVSI8NFRhaHdoUmVWSnlpTFRhcGhxREIk'@;
put 'dG5IS2VmeSpUNl9DcGwxY217e2t8THQkKXtIX2Q7TiNIQk42WzIuemJEeWRIVU9ESXNQeShFMXUqYHwoeW94eCoudnBZS11UZEJdImtgUjNBIXJ7TXZ8ezJfQXdfVUUoaVldJXpnJGNqZ3FqPyJ4bVpENjw+RjBASCg/WjR3NHZOXilWRHUzRWVWZzFDP2pkMTBKTDdLdjhySDx+aGxad3U0M1Ah'@;
put 'Y2FJd0FtYUwiTTxvR09DNU1ib298aHIxY28rTHEsRENnRXlHREdBMVgpdmN0JVtiVllYWkVDPWMuVDB7MCYsRyM2VDtVXSFdJWIoOmRQVUZTcDBSNzBLJGdjZ3Fyai5rInlCKixTRyMsKklsQE1WTklJSX11SmdTRFd6e3wrUWlgNElBZnFYTFc3TSlsVW51fWt+MHxPXlFwN0ltbzJUNGdha1E4'@;
put 'aT13ZCM8TUlmM3RWM25sMzJuSi9UeGpmVFYsaXpzdUJXYClfZTQhLip6WGFkc2hrbXk5V1hBXXN0cjhVaWJab2s7eDdlaF5uYytCPjs/PzFMI0tnQlAmbm5hYHk6Tm80LiYhQHQkJmdeZlRjPiouRU5qRGReOV9JamFGRFhzV2F6fStoIzMqODVAL3cvZ3V4QihrfEl2aVlhOFlCKEx5RUlMYiku'@;
put 'MCxZR0kycz4yU3V7cHIweWZ9cD1oekgsVFthUyF1bkZIeD1+bFpJNCR3Z2ciazVbKTleaipKI09HRyQ/VW83enFseyNhbyRRN2I9KW9KaT5yKGdUQVFNNF91LmQ6W3U7fCtbKVR7RFsqbzxWUjFhfSlZQkxmc2RtQi59cWlkb183Yz5XRyRtdiJCIk4wLFU9fFJqV2V9SGRTdVZRUDRhL3lkb21P'@;
put 'YlNXc309L3E7fl9IfE4wQmBPMmRKIWVhZjdIbGhCdVlVS3kjRC98c1tlT2VMcG5gXXg2OUB0NjB4OUxgWX5Ea0EqOl9rWVJ9bj5je2RgUktzelZSfilFZ1k8PkpoY253bHc8UURXTC55Tip2RzVoVkIsUD9YXkZXcCpPMVBkcWtYNChzZS4kdDl3OzlFYU5RUzh2TkhxW2g1VGFZdlJPal8/TTRh'@;
put 'UiRjTFtHR2NuZUFVVFlhIn1+N3l9ODUsZlNxeDNQWnMoJHZbRXU2T0cxMSpzeGxwQUtVY102cnldaShRMkZrXy9VISN+fm0vUnZzZls8SDdwLHxGYWZzTzBKWCxWe1BnL0ROSy8lfGtpIiYsSSIiLyxDQyJiNHpLQXR8fkxeNjoieDJoZn1iTiVANnpzYE5FbUlvM3t3I18lSSFRKDd2NlttSns0'@;
put 'K3UrRHhiVyxCW31xVGF1Pyg3WXpCWXNhKi50NkNAP0tHO0BSVE1tO3xFJlpOOT9kIzpgQnJHUH02XS52RSZuTnN+M1IwdzR5eERPd3RlSXM3cWxRei8+VXhqWFEwQUJVTDxEPi9zSi5QWmRVSFAqND8mMzZSeXBWelk6RUVfLHIjJj9Da0cxLGgpV1NlKXJ6NUY5X0tUOW9yWGtwPS5uMyZoSnQ6'@;
put 'RiQvI0U+aHFbUGZCckheM09GWFN1eDVCbXhAZ0UifE1bZzooYEMvVjpQanRURDYoJFEpMH5QNGtAIlNMfTEsK1FUdnNSTlYuJH1lI2RPcHs2NStCT08rPU50OzN9KXQqOVB+WUx8QUV6M1thXWVkKkFVYS4yIS9gTXFCNEw3N0Ile2tdMSk3L29AIzpRKD5XZEwlVi5IIzYjP1FAK1NTVj1mWmZC'@;
put 'fX59JFU2UikiPHhrQH1xejkvditzQC5LKlJVPUw5SkcxUz9RSnpSSkQ3NW5rekZtdU4kJCVlXWVdcXkpQStXb24ue11UfGheZD5MR2tPSyRLMC9EUUE/RmZ9T0FkcjEwQD88eG1rcUk/TE8xa31RZUMqI2BOcWR4cj0pfF5YRmtFcTpXVmJXPSohLC48UjA8amJ1SXhacVJ+RitXZVEqU28zZz9C'@;
put 'fjp6SXNTVGlQSmNGdFNAeU81LjQhQFlOPjVhO0VLbG5Gd1Z8cFB2ejE9Sj5bK0pzZHxqVXh1fEpwQCt1Z09VWnZfWjRBSjE8PCxgWnJoUlNoJnElYSJlWmAycCY4NTAxLGxmXmlDeXVqPnpidSNIfGxZNTMkMjdMPmlyT0tOW1RoTl9JckpEY19jVUhFUSZbSXw1PiNUP09gXSxmUXQoYXJTUEZC'@;
put 'aGZNODJ5NVJnLy9SPSw6TmVTc0NVRSJFWT1aUnglSF9JTExvIyFqV2N0O0pgIlk7c0wrTSNXL0lSQUsrSTpralN6Y0RMdnFNa0YsJitpIXgkZT5EbENtZHsxYlRae11dQCtCNkklcXJOelcpOih1XVV2OGE4THEzaHduLiFBbDhYZTpZLG48YFBUdit3XnohK1c8XUNdSDc2Szd6KjhYbmAiNXJs'@;
put 'JXdsVX1na0ZDbF0ueGYjSCZGelpLdCZzLGl1ej1tITs3cyZgKGIjUShrKFFiZkM7OSMmKUJdIWVvNGZ6THI9PGNwYVoiUCQvR0V6eGl1dy5hX1Ivc1hxUXNZJFhDOmAzXlpbPjlvLGcqM3o8VDRNe1ZpNl9PJjF2IVNFOjR2enRqaWBLQFpZREU5TClGTzohKnx9QmZSKUVwe1BhKXtodFBVc2d8'@;
put 'NmU/NT8/UFkvZUYuLlJdJDp1V0E/VE1zM2M6MFYuV3tHT2lQKnkydm4xdFlmUFdoT05LTSUxXWBvOzpWVENKbndSVnc8S1JYK3VwL0ZnRH4zP09oNnhSM291MHksekhVck18Mmciay9HJktEY0xGaXVsQSRCM3thbWBVYktdRyE0ZUpqRCpPN0MzJDEmdyYyL3FrKWdJKG5HT1QrdU1sd05Ra1RC'@;
put 'bix8aDZ6Y2doQCpoKmVzKDZBe1RfXzF5Zmk1T15uOzI3Z3xqKks2WVcsPDwxVjMzelRUaGZNRUwrMUN9fnAhYHd7emNWbF1USCE9X09bJTZMUVRoaEw0UXJEbylSckhHM3U8IylXKl58alZjR0VwfDxRInZOQ0oydkkhNGtOM3xlRTciZGd6eEdpJnlGMzhVM0gmLyMkXVdZSU0ib1ZZQmgkflFq'@;
put 'RmlPXyE/M1RTRFt6SmlYNSVPTzBsbHFtOFMqSzFYd2olLEVgOCJAaW5NP2wwVF0sKTFRRnRPbDlVPUAhYz9ybmx3WCI+bk86bnQqIyxZYC9FbHY5fHhVcXUoZks3Uj1gcDtWeXZNTjh7NHFeOUQzcl5NK2coYmpKZ3giNWxnPUBdWEdQbW01IllCI3hQZWg5c3VJSUpfMFt5TWAja04oQDd5Onl6'@;
put 'IUdsdl59QjRHcEQpOEQoX1AiTGRUTzgzcyY2VEIyJUFlRjdbZFlSQztqbmxyUEExeVAuK2Jab0UiQGNuNklLamshRndBWHhaZ3ZlWSpFKCgmdF5zVS82T18kIXFMM0xvJGZPLmhpcipxJDxVZkQoYzVES0BvZTJRWTQ9YFdaSShsYltSaWsrKXFGUzp0VixYTUArYXJ2TmB8ZkZZZF84Y3BUdkRT'@;
put 'Mmp6YWJvL0NRQkdbcWVLPGdmaWojP1t4KTNOejZJKlBoaHdHUXV2NFJGKD12fV17bzclZVdjQz9CJWtdTXkzcE5ibXVQNWJtM3dbPjluVktpKn04IXlCNDM8PkhRQCh+bX5helNsXkJ9dmN5JTJLVSR7QlQ6YHkudzZqbUBzPEg9ck5pcHVGYCFJczBbakQmLjZIZlE+c35MP2woPWZBUGNPMX03'@;
put 'UktBSTk+RVQ3ZnZsU2FVZ3BWaWRJa0xMZFdoKyVaT0t8UmdhO2s9Pnl7bVFHJjRKeUdIW2xTeDhkUyFLKWYqN15+dnhmc2FGMkhjYHZ5OjEwR0pgUnhydlc3NnwwfUZEYm13Yz1KbzM5XjFlODh7XzpXW3MrNjEkN2BrJTgwY2hWZTtSPHQqNmdCTVA9Sn4wOkUhMW5IZ2k6ZTk9U3xLd30sNnwx'@;
put 'Xzc0OlQyLkFYYXIlUXFwOGVXW3g9bE19MkhzP3J1SiRhLDA2YyNCYWZ0Olg3QzZ4RShNKTRHU3xRWHtHUjFqfXt6NGFyfXc2SENocVBDQjxYNmNPTV8hWE03SVFlLkkjRyFDWGtwcUYuNjtgJnw1WU5PX1ZFPmNuaDkoOmlAay98UFJLLGJ6VnssSSZNYWcsWTRoW2BNRS48TmVNJUxGSCVrZnsr'@;
put 'ZVB6bGc4JnJrMX5JYVhicjFGS3BNNm83OjhXZilnMjArRHZgVjE5WGtOXjRtfHQ7Q2EjQXUycG1CV058NCQ0YyJyZXVmViVKe0lGeSx7WVZeQjxNdmNmbGVaSlR2R00ud0RQNzo+QjE3eTUmS05STj5eNz93JH1KWDlCOGdHNTk8WVVsTVBmUVB0byJJJT08PTs0U2pMb3d+Y1tpPGg2Z2ElUUZf'@;
put 'OkF3XW5HQl57ZyZiQFswV3t3MkkoaVYrOG9GX1BbaD1vI1VuKFRKRyxsZSJObD5qTHFHYFcsa3UwZW9HLGlWY1slSm08MUhkWGdGeGlBdFsjVDNdK3lJZGFeYm9LQ0piTGIqVUpeOXsvYVF9OFVfLzdQbWNVYytTNG9PIVJ0U25XVXxXNk9ZayxLY2lmNHNfa1pSXXpJZyxiOTlaczJuVFMoenpw'@;
put 'e2ZOTSFCQzsifGAxOXdFUHBZS01GfUVjbj86YGZCWkBqbT1GYipnKXkzfSl7PXdXNU1yZlBETGQrY2BHeGl5O29PImtqYHM2ZWg+Tlkxb0lCU3Q2KVcrUiFfU31udHRoVDRGfXxzaC8uZHZ6NmNzMldtNVRudTwzOU11Xnp1YHw3fFBOWz9+fFRYTWMxKSljJTRGaklzKz9bMzJqcEZFRTFxPENz'@;
put 'NkZ0RGU5a0NgTXxCfnAlbmlmODB2Xkk8M25zZzZfUkBjTlcvWSRTN3JLVntzKC8yQj1PfkAkQkszL01uZ3x6Umk2PV5pVn08b2E/bD0jJXhSaUxfL3F5aDBqVnRNM2BEIyQmUiZjJFoydFFoYU9FV19qWXV0WHxLak4meWdNbSF3PiFIQz4pRSxGSWU8Nihie19YaXZ3Wj0/a3lXO3o4TjRPOm00'@;
put 'e2FwW0k3aF9YdTcuT1M0QDhpZThTLl4sPzYrMkhdRDlHInVnUEgzU2pUNylxbTxoPmdTPjB0KElKWDQ0SUU2Ylk0JUdeYDF+RDA4Oz8uLFFBJnlxZkUxM1tobiZoYnBpfEdwOksrRkgrJW5WZGJsWE9qaWE8ckc2JnI4JU55QVoxajhSPilJfSRgfjlubzQhM01gb1s1Q31XNGwkbF16NjVrP2o/'@;
put 'ezkkbCN3e2R1TChNQjhwIlYycGVabSl0RSNGQjJrN2VKdzF7P3t0T3hvWHJLWD5bcSlxNio9alZiIlhAeiYvY0l3Kzp3PStnXyVHKl1kcywwSmMveUYlKTozZjVxP31MVm9uN1BXdGtoQ1NpSGBVT3pUP3JQdkFpeEdJc2I8WGpkcThqJVN4OnwxdytQdz18d0xPJCxyRyEhJGRrRGZtKyFUZXlb'@;
put 'LiReSD10dmEhV3RlOTR2JF0+Vmc5byhGXyoiP0dORntgSC4zX1RyUnFycU5rcWVUWVtoPTFzS1lwdzA/OU19VGRFUE9ifTtrJiFYTnpJKVt2KT18KV5uMGByZSYxJkI8NkNSNDJCWmlBdjdgZHtyTSZ9cHZyJC5XaGZLVmlkTDl8cVBZalh2UlNsVG4rVk89bGlKKilsNURmdSxSPWxYfHI5LF9e'@;
put 'TkBGd01DY1Y8Xi9jcl9XUisiSHhvSGMmTW8qVTkqdzlQXVEoWGhFI3s9PH5taHorTmQkc1F9QCpCWlU9VnROW3F5ZzBmSCF2RT1TKVlDKnladVhqUkVedUdRLmhuMW5lUG4yOyZDMlA9WFNgaXl7Oj9EfCorfkEoTjBFNXFnY1tfZjtEM3tPL2g9eTdadkVEIjV2PT80O0hoZWwqV1FpTnQpYW1W'@;
put 'WElGVmdPcy5ITmchOFpXM010THM3fCExKkFTOjxJLHxMKjF+U0tnSGZNWXN1JnF0UCl2RV55ZGg+PCQoTWprbUN2ZSY0bWB9LHQxN1J4fHZfNXdJPlVtX0tpRyY9djAzWSxtVjtnYjhQcVNbYUkmSn5wL186YG5PbUkqbjdBKDpPYCpuMG8sWlVgKVQrWSVCZiNeYmNVe0E2RCwvU1hOI2c8M1Es'@;
put 'Vnp7QSUhSURuNmgyezJpQj5kRjRYPFlHfERVd0xPYU9YQVQsYkhDdHFWYGlKbXR7PUFpaSRPcU8zWnhdZlpwRW87WSRIMU5DISwkeVUwb1FLXiRfRUNeNSZHajkrc1U1I2ExXT9FRFZDbkp6aS9KK0k9QDdEVEw1YEswNmV2STZuSz1iSWJScUtfZG93fWFkJV9pNjxNQ2xXanVvdXdVJFdxXVos'@;
put 'ST08Sn44YntrX3A9aGtaNU54NTlGVXlqInM9bl9TQXhAVCVhd1Uva0N1Y010c21USFsxRlF6TX0qe0BZXVY9Si9QMU0mJj16ZCFURnBVZ2shVHVpKzspbDNCQVNkcDMleWswM1JjTDlaXTUraE5EPGx8U0l6Wj09RCI4NSsoVVBjWEl1d3duQzFvWShhQlp8N2BeWFgwbjJyMGFDSnRac1M4cC5e'@;
put 'fk9ReCh9OnM8VyIxd2RaPXxoa0x0cS55JW5PXUZCQE5iX2tUViYkejVgQnYlZ25lRDQyR2Fsb0k/JiFkc11+Mlhzbm5MVnJZI3E/ai5UQ05nITw6dDhfPyNwXkNsNmxNQmd9M0RzZ1J3KEAjfDRnQ3wxa2A9djgyLktfV2liXztWeV9ZUypqZWY6M1AyTCtVck9sWW1+TTl4dFkwXkJDZWJUYXJU'@;
put 'MzBRYTovbjA/cGZDc1l2b3ZUQ1JbZC82OVVuKVUrLl5bLGFfP08yOjEzUkFKW0A5Mk1zMCx7JF9fLktIcCFHNEtffWhHe1NnbCNGbUNqOkRaZj44TU5mXzlwUm5BUT9pTn1edFowNkt6OTV+TGVDKGpFOC4qYnVubilOKjhxSTp8eU5YU3VAZkpmbHMzPmNqSjQ+Vm9CWlF7e29lMGZBUDZzODIu'@;
put 'TzFEdlM3TCNMT1Y7LncwQEo4THI8LC5eKzxlMV4hUE9xYTxBNWBqSnBxM2diW1pSR3hKSC83Q3tuOk12dzVObilzKGxFWENZfDZnelM/TixNWmV5bmFmcmhUayw/VjpgWkAuMEBbb3U8dC5NMSthS3V+Nz42aGFONjYlWmU6TmZONnxnPn05dUBOZDFFNUlbUVdHd1R4YmtqOmBIbXdNOzg/enJH'@;
put 'LH4sdihmbFo7KD1dbEpkLFA/YUxCezRVLzt3LzsvXXJwInJWYEBCeDQ2M2M3UCo7WylRUE9PIVtRRk9jSzxXSXsrNyV3UFA3dm8vT2p3KFosdlZsUUVdKDxSJCZycig7PGBGKl9maXZDOEtJPlQhczF2SHZfciRsb0VSQV1Vcm9HKToxKHFIMnoyTnE9XmFbLHA0VmhyXTEjJUQ2Qj82RiJxX3lN'@;
put 'NzB7PFBALnhwLzleT19DP1tib0hsS3Rme2ZMSmQpZnZ+bkBHKHtzaUNHTEVWREEicDZuN0QrMjdpO0R8Yyg/bTE5PX5AJG8mZX42YDk1XUVOI080Yj5yWXYiYFFWWnQhUWB2emVlTU1PTSFwZkBxNigoSnFLRkU0Kyxhdm54dGFdJkxAdkEqTHMmOTNXKEQueW16d2EzO3t4b0ZIQldIYmAqNWlf'@;
put 'TVtGeF5VfGtMREg8KyopQn1+dkcyVnY4SiM7RCZKaUgjTjxULmYvNmZoP2A6VGQqOi40MyY1ZXkzNDhFeHVFcWhdZjFSUUhNNDdFem4xOlFyVWwzMmB6JEFHJlhqTGMlI3psZm1AKEw8TWA0cE1gM2BEMWU8YG9fZlsjPWE9QkhEJElWYFMvL2RlLkJeOy8qQDY3cm5AL0FXSEtfUThUQ2JFa3Zt'@;
put 'bWwzRjJRJlRxb1YpUypRdiQpZTA4MFMjPjtkRXkiZ3hEbWdiYXx4bTc3Py9aUytGXXwhN0Qkc2BbfVB3c29hYU90IUFFRUpHXTdzOFJsWHA4OzVebXlPMy5UPnc8JH02IUZZMUMkTCQzL3c9UHZrMDhiayxvd1osR2xacHR8N3cyTzwqdVksPn1GX3ImJGZLVDApakxbYW8wVkVbVjFHNEx9YE1N'@;
put 'dmxXfDN0RGROSEE1fGtxSyhNM1NpQn5GLkw8ejQ7TzpiUTl2eU8vYm0pJWxEIS96MW5wSHMjYGRMP3YpWXFbfkVWWDpSKzI1di5gTV0weTJ5OElrPDVuUyx8bmRoeEo9Vmwsd0Y5c2o6Xz1sKz1DeE9SX2xQRlFTcWhtO3lYMXhgWVh6XWpHI3kxVyxJNXViKCNjQlAoUGpMWTxFJmVffi5YV2Q2'@;
put 'TiRmQ3ghY2Yre18rUVAqT2JsVmchdGM9I2EvWCE5eE9hYU5lYUhOVlYleTd0Q0w4ZEJwcStsRnElPDMyOXhgPjdFOjVGOW1PcDZiZkp9Y2RiIXBseCpNYXg2WklxfTpddkZ4VUYkdzdAfU1WU0ZjSCEwZDZzQCpjNnkpMVtwMS5BPktweCIoSTJFPX05Xyp8bnM1UWpMKX4xPn4qdVpKQCRee0Fu'@;
put 'KUwpWV9kPityVTNyU3l7djUvJFdQKWB+SDhlbE91R2JlPmslOSZbUyVXWlplKFkqIVU+eDhzYFd4SWcpTHJmZXg0WihfNkFVa0QzQndwa1BPVVsuMXNMa3IrX1h6cDpqWHI4T19TNk1Zam5pUElUJFhkWURKNDRbSFlEMXFMeUlpfTxdL1M3Y1FQRTQ4ajtgMTM6ISgiYXpTKncmSlVDLjV4Yig8'@;
put 'ZX43fG1mUVs9Wy8+Y3k9P2Z1V1pFRD1jdlMrLkhXYHddYyUhN1ZXeXlHLk5KIkdGOmM+OFFpIkk2TG5bLHY+Y21xeCpFTXpsNFNCcERqRUhSO2JxUTA+MHVGZUUzMkZAIUtXeDNbSnZQZ3NXeiYkNnM3VlNYLDooWVVhPXdOI0QifSxAYTJaOzxQNU96Xl8/bEcoJHhiQi8lQ11pTnAmRXcvfkVf'@;
put 'bCJRU35QR18oK3Y2QT84dmFBeFI/bkw6ditVTWhVZzRnUyh+fFFldzVkIlVnQmVhN3tCd3tBcXFpRzhIbF5DInA8RTZhTW1rJUR0STdYKXRKdCNCOkt+eF5GZWtvZFYyJjpGS1p7KDd8MjMlcnNmZVpEImVSIlVKfjg6RkBWL29MPHE0MnQkKzNJUz1oPTZeJEVAOlVdQ2xEdXYmPENCUzA3clBy'@;
put 'Nl5gcUpgOCxmR1Q/JSlfV3hmeyJJPVdMXmp+OG9pQGJxfXpeRnNIN24/Wk15Jjh1UyQkVTZ0Y2BIXzBxTEd6Y0xodzE8PFMzcl5ieHh4YVlnUm96U21mfWc3NTtpc0UucGt4ODBOdF9HeiFoZylNXyNCbnNucllkSG0udWRqNHBOaDR2SEY5UzdmLEo+RDJaP19KTDpEND8zXj9FXlBDTWs5e0JY'@;
put 'IihtI185MipdXkUkV3A1N09SM2VAMzMhJCMwK35aVT9XJk8xTGs3PVUyKztXSSxNY29HPV1JRlBxJFlCU2xdNT1pfFRCMyVNVzciRkpofjpaMSxvImtjazBMMVtpbHo4dm4xZnMxcXpIWFo1VlkwW0s1JlppMj88e3tTaTZybSJPZHFFdUM5IUcud0plcTEwQUI8NSpIOWQjQi88I1EhWDZXbiF2'@;
put 'KTs8KF94OXgjX1dbSzt1SWI7MlhsT0NIOTVNZ3NTNGN2JVBZKWN0Vmo5Ny95ViZ0Siw6b24iTG08JXVCNDZTMEVQZEcsazRQMmswWjU0KyoxYlZrNVZDRXovJTU9X3pxOjR1TDw0NEdxM3RmU2xbSU1mVGkuPmosPnNUWmE3SDdqcnBUUHR9Olo6b2h4QEQ7TTYyTjs0PyhfKklpJFB5alRCdz45'@;
put 'P1glbVJUMWAwbiJMTHdyZik/Z3dITU0zMmxrTWwyKjcjfl15ZzlRXkpgYH5wMTNyZW9wNlJGemBXeyNeWG9+Xk13Z1lDdiZeaVl4PkgoeHZTW2lvfiVFI3w/P2xxaTpbaz1oJFNmKlh6NlY/bT1Wen4yY0lLKXUlJXZMNTk+OnVTRSMuQV04QTAhPCtxLjdFdjMkUDY4QDlEWDVwem9eI3V+ST54'@;
put 'YS9yNktPN1EiYn1ycDMvdV9wVWQwU1c7WHdXQVdYXklSdVduMFs2eTYxcGRMd11+QnJ9dzpfSU9AIk8sQ1BVS10jIXBVYXRCSTlEcT1lOHY0RkJ6ZzFAdVE5YC9XakUyK1VAd0k1V1FFdERuNj9OPWhoeW5PQkwqW2o6MSVKUUJsbHc2SGhhJSRTZkBELiYxSDZGfEFkMTs9JDVOUFA1RTBmbk5i'@;
put 'X35JajV1XitUWjRuR19XPElkUHdTWjY0ayJ2RWxFe3k2Z28haz1Zck50MEwkdHJFa34/QndTP2xQTlRKZHFOdmJpQjleR3l4I0Zed31+bnwsYVREa3woJDN0eit3MjJ7JX5CSHZGem8wP11NeSZEQFNja1NJd0tfe2VpIzhUZWJ5VjF4JlpQVCo1cCpCanBHUCF8NyREentdazZEU2ldQGQ9cjhg'@;
put 'NT5wRHluWFk+WFg5UmlKP2BUJE1sV34xd0htQSskOHxGYSppdE5Cez5hMWRGRWFYazowQyZfV3d1JE04QkgjZGBUVzBCTVdRZnZPP1B1X2VIZTk7cXZeUCN8fTM6YjtYOEk6TnNEcnB4dDZlTjtvc3R4Wl9oTigsME17OD5qY3ZmQ2M1QGZ7JFFBMEZpZ1VlM1pkYE5VPV5Be0NWNV0yYHg3enda'@;
put 'PVswTTJdZzFWTVZseGA3fE45YXZwRmJ+aVMvQkJoPDk9UWhgPTd+Xm5+JTZXekw5ckMiXzk8fV52YVtvTVpRXkNfZldpUV98XSQoZl1DaFZfKEs4R3hnYlh8fCM4S0UlL2Z9K1RTZDsoP0RBRVQ5eXEmVCMjRi8yXzdVK2F9M24uaDA9PSIhUSJFKkIpMk5xbWwlUWlDSXVIRFBWMkltal54eTh9'@;
put 'PWUqV2dxMTlXLj4/KksjT0AwLzApQ14zS24/YHJ3aX5qSFFQQEVJaXtzezMlPm42fHlCKEpPUmF+alBLaTN2YV9BUiRMaVUsW117el5baytIYHhLV1VMPzFwWzxJS3Q3fkIxWzU3MCZWelREKX53KHU3UCZPe2hQUUxvNn1JJWElQGZseCRtM3pRQyFMT3hEQnR3Z0R+MztsL09ALjQyPWtLZ1ZZ'@;
put 'OXZLfEJUXzQ7TmRvcmY6cSk6Kz02eix7P2NHTVoqekt1MS4uMkQjc3Y5dlMqWilxamtbcCZHdn5AcyFGdn5lTUZIP3E3Zjx8UFlzWio0Rjp+fWQhJnJfRDl+aFJ8NGhuVUAsVDYibz4kM0pyfkZ3VS9PIWkpMDArMnNTZ1hwYXk/a1ZdKjVdc00/RChEeDVnXl5NKmdwYDh3TCpGN3pRVSZYNHx8'@;
put 'QDBga3Q4bypKRUBjKS81NFd6MUFRcCgrWWJFRWNlT2NrJnZKPHF8TjUrKG1QK3Y4KlUqaCY+XUglU2xKSld5Wjgjdi9aX0ZZbHhuOWgmciV8fXUmPHJGc0JzKj1LUi5yeFVVNHdWMF10UHJhQFUjeTJ0bEdLQjJ4ciowYG9pLzFsbkBUQ1N7e2gldyVaRnsvSElEbGFaMzd6NEl3JEguc3RgYGw8'@;
put 'OTBFYkliMnIkM0RnSXRYZEFGQnVkbz0jNXtFP0ZJP3BncDYpb1NCajV7U2NOJW4vYDIocjRCNFtZYUZwK0d+ZTpBMl1sOD4vSmBiZkd6akZ4OGkpJXlmVVRoJTtzfDJ5ZSVxcD0oZGswfSNKMXh2PDN4N0cla0pZJSVXc3BJNU5CVHFETUFgOzI/M3NXaSNzVGsvbix2O1k+Zyx6aUNaOilUQ0VE'@;
put 'OmRIPU5XZUswcHdePXV9cjE3c1cxKDFCeFhFaS48dyJiNjZLQ35MRSosYTJEc2NlMUwzQSR5LyJvVy5lJFtWYUVnbmE0IztLZCJjd21XcEpFaVUySzJGcEwmeHBTTkEzVjVlZUJ+PkZLXlMiLjJmNSlWbmlbK30qKU4vaW9tQGl4TX54Tjg6QklmQEV+OTl3MlQzOW1oX0VJUkt6LzM9dHh2eXBS'@;
put 'QCxmNHlKUC8mIW9LQXh0W2x9fXF1YmZEQ0hRQEMhb2l7YHpKPHpdZjRUXSo1a2BCQ0B0U347fH0sdjZSLiVodFUvNVBOTFU5Y1Z9LmluLmt+NypCXnc+ZUs6dkZdd2prbkYsP0s+ODpdTlVlbXwyQUs9PmYzY04vMiJvZGxBaHxRW211ZzpZdmtrMGRoLkl7W0liQDBrQFFWemd1dVd8Im1fKS9b'@;
put 'cCZDMEZ5PlEvUz43S2NoXnxMaCoyOUYjZExfRG13P1pCVy5AVSpVfjFmXVduVXlDWWp6TVh2WjpTWVtmRSwwclNRd2x2akNAeVUocCNycDEwSD9wdEprWm96aGpEKCo3b3szWGk5ZVNJRyltdSMzNEd9aHd+UTNsMD11MWdeS2hBVzIqMC9Gd1RwTTxAbTRkfF1kViI+STxxelU8azV8dm1UVnsu'@;
put 'JWB7eHNXWz18SEghPyk+UGk+JV9tYD56M31Me2JJM2crUSFgbXVpKzBzLDdYQ2B6V15hI0FZQ0YodywsJmBiQFQrbC4vbSZUOl1kXiJ7Tnl2RSFkczJIU286JncmZyUzLmpmfEorWVtyQixVbTBDd3RNcSgvT25RPldJaz5HX2MsNmRqNDBDODZsJjpnYyZVSHVAQWUwai9BYnlYRWFgUkouZTx8'@;
put 'WSF4dkJ0e0ddYTdhLyIzakMvenxIbSYqSXg9cSVnc0dMOj9Xa3ZSWnJmL1ZDRToyaCgsb2tmZXBDe19UX2ZKP05nIXZHTGclKitSYThDJWVHRzpAeUNGLGtEMGhWXWpoajl4SUV+UVJwVnphK2ZMcUoyP0NSNStXRlROQiwrZXAwTXYscS9ZVm0oVFtUcXlOeyUweF4wezRXKGBVOVQ3bSplaUE2'@;
put 'cjNULns/TixzQ0Z1aTJlLHZdKEZaLlhCRitWenZhMmtwYTh8amA7U0ROL21RfiQmYGwrd3MuUH57X3EybiMzOnI7MDZDTE9VUjAyKGM3fX1aXmNQSSYjJDBzJn47JHkyKVd1cUk8RSxJdE1wT2p9P2tOMFc5V2xKK1JuWXV7W2VnKUVhbHoyWFZQU0dUQD8ub0xELDckQmRuPyxOKiJlNWBFdyNA'@;
put 'NnheT0Q+aUN0YmlUKUlKN0BgMmYuXm47c1lPX282LEE8PW86WTc/ZHEuNnRDUXMiKmpmYzplYC84OTlJZH4yVU5DbHJiLkxQKHVxLmsxUkFCcHRGNyE0QklYQUhVT20kOisxYnE0R2Ioc0JjWk0ofG8yPCZxNSEiPywwYWw9VUdrR0hwPiVqd01fWXAoO3FFaU9zcCUiTWNKYzF6PjtFMUt9JSZ9'@;
put 'SHMkd2J5RUJJIls6MUUuPU4ra1Z3L0c6P3xpbWcmWmFaUUUiNUxBPU4+WUR9fFkoVFNFNWtNeEk5RytlbmFqMSV9ckhzQkJdR0I7KE5JM0YkaD5JKGsmfDs5Y2FLVCN8QWs3bFYydXNVayRsSktCUDFkfkpkdCxsZXUpMngoOHxJYVtKZ1UyYyE4cnFzWyNKMUxXUip7RU1oR3l6SF52X3ZyOD4u'@;
put 'RS5BcyJFLiZaIWVKTXhxYHlRRSlWJjE5alFSbl9uIyVLKHV9STBYMmxFPl9gKnZVV1l7YUJxMCM7XW5IKysuMWtdX3pCWSwqO2FyK0A/b2RYNnJOTWd+VW52aytgM0hnOzM5XSNEYmtVTURFMkNiem94YDh3IlIpVlFxUHlsLnBPZHU1aUBpKEFqUygmR2trPXJTZiFVfSVJNyZHXV8iZ2dHfS9+'@;
put 'U0F7dkt5U19CaDYuWXIqcUA1IzQyeU1kfGFEMHl6ZCpodHIrMGdoNjwqKy5qRUF8WCRAX2tGdFBzWzc5SUkiMWtsaSs7UCUqRnFEImxuKS5KKEJEe0NuQyxeL2AjdjYmI1dPVCV+OCl1WWFGJHJnRFFRUXR3YCk/XldVOE9KNGhSOSoiKkEjbFdCfUNwUGpuRDZkX1U4QWZHZFArKzhHSSVaWUdG'@;
put 'O15vIkd2TjZZWEVMdUg2U3ZsdXVPYFZvXiFzbnVHKnUmOVA1ZmskdWJjaCpdMFl+Y3g8flZrM2NnOlIpWzo3MSU+bDpbbjc7b0kuWVleenB2ekxISmp8ejlbLE9lLnxBe3BjbiZjcXFEWTAlam94Vkt+ZltrTC9xNEB9NTksLEI0SEp+ZEY4V0xkaGRJWl9SaVIuYUt+Tj4sOSsxIXpOSDN1IWte'@;
put 'ekQiNDA2VSluR25yS2R0ZWdrNlNtLiUvRWM/KW0xPFQxcSpze0RAQGJKR11DMUEjK2lNKyY9dlcmOnM4cUtMOGJoOzdWWlhhY0VxbE9AeXgjdHp3Vm94d2A5YDBLVTY6QjFuL2dNe28qfXE+IUQ/QlV5W3l5S1BIbCFvPHo5MHNaW15UIn55c0dkVUdwfj02cixAJTdmRi85JHlVeXFhNlYhfEMs'@;
put 'WHxobD15bntvVFghN2A+PktzRVZ1b3orKlAyL0AhdyFPUmg6XUtlfG5ETDdqNyFiU3YuYkwuXnp4Ujs2ZnVMMzNtK0pbIVN1QFBvJUF5cj54dm9zTC89Y246IyY9RVlvOHMkYCxGKHNMMiRHNCEiL0w8TVFNLmJlMi9YSjdNfGRjQFd0eH1mUUE8fSMuVnsoPFJYdzhTIjN8YUtxMVJ1UnFofSEp'@;
put 'c0lMbkpMaFRtZlEveTlkaUBHUy5ycnIiXmZ5PHBmaUh5cik7IX11Jiw5UHkvS30vUFV7UG4lQyIuSihXOHAlJmt9NFg6W1E+ZX5femAuImVVMmErNUBzLEVGMGRaLCo+eG91XykvK2tweyZwPDgwQjc/dHFLR01TUnhqeC5scTF9eVA+dTkvJD46IXYoU15uLjR5ei5CPkZBUURyJG4kXkAqcmda'@;
put 'flM4JTBLbjt7JnJpWm8uQVI1eWpWP3xMSTZIKWFfW2BsJClzU1hpL0YyNCkwWlJLTEsxRSh3Vj14JTRaVDhmKV8sfG9Jd0xVV1c0L3NAYmYpMFkuKkZLe31rcVMiMGkweX1PZSZyZCl1QzJWT0NoX2huaSZ0PkpdJiE5ZncsMF1XPitrPXk+RVglYjR6U0pTNjJfb31+Mks+KGk9a0tGYkM3NzRU'@;
put 'VEgjYjl4N0Q4fXJ4eWYvJUUhbT98LDp1MSs4fXpCcC5Md1VOMWJxYW1dPjxTVWk0W1RiKWtzdTA2OD8oSlkzKj53fm9aNDomVzk7QjYud2Q4dm95bS47UVYxJWVUaXRDOnZwLzRBJFlxVkZUdiV5SDEmIkNObykiLiYubVl5V11FJVZZcnpfZTdqbjpIRyldZzF7aWVvSXlZfG1nTEdoZ29fam52'@;
put 'Nlt+Tk5UVUtdXzgje2Z2NT88LlkhNGx+KmVtU3dtNVRfe2ZGQjYrYTFiTS4jWjh0emB8andycFd8MTE8ZD9WUEs3UUpzSyRQNVZWQ3M0Zn12T2h8bGR+Vnk9TjNtQnx9KXRYSEtyYHthTnIwXSoqakldekpIKWt1YDZMNUhxN3JMUG1wdzc8SG5WSXlha1oza35rJiJUYnRyPDBMdUVYYHh4a0J0'@;
put 'b2ssMihxUCN9SD9Wa1RCJC54O0J4MysrMUhvUysrfHA+JlpKOURISUpyQXRFNUskcUtBPF5lYy4yL0QyIng2Ozl9LGNNalFsRjNzMW14VUg8eWs5bWxCVXA/VjRsJngmQjVBJi5tfE16SDZXaj8ufCo5aVsqUSM3N1BYaUIzMmouXXFxNnM4W3VhdCg3W0VmYS8lPiU7Mkw9QVVCbix8Kjd+SDk0'@;
put 'eVdMblc4QzxQIkwkXW8zSUhfWS9nMUJXT1E4QEZhU351NmZFZWx3IzBONztgZVAjZUtYfWw8cE9YZyx1bWkmKHRCbDByIVRed0xFQ1E7MTx8SGkrQiV2b31fUX5lOUNqN0ddQU5QdkJnJVs7Qj5Xc09VTS9KR3Z6ZX1Deypxdm5ifjhDbz9RdnE3QnhvPVtZbDtvSGZebHNoLDQ/fnpjYV81JiFQ'@;
put 'MXkoaGEpKFcqRTBOPH5fKX0xTVJlSiwxIitreF9mdX5nLC5GQ2FIV0toIntDUSx0MUwwbF5PX1dGRkJ5O2t0eWhVa2M9WD0vPkZFcnVoLjw7RSE6aiVBeih+K1QwZnx+JX5RY1RYLz5pVDwyeyw8KFdILjRpVyFHcD5xVCN9QWJEJXszWl1pSF87K3JOMzY+YEB0VnZzMHY5T3AvY0VoeWBZOUNN'@;
put 'cHUvfEVoRXNhLHhyeGpxbWRXUEpMI1kiT288O09KPGF7fnEkcTUyQl9baTt1cHExZCpMYGNtIXAyR25DdncvbSZOUjZMKDFJcXxvbn5pZkp8cW5NIUZvOzMiTy4iUj1EZnUiW0oifTdVPWAjZjpoQClTRXNdTnE7by9wXjY4YiU6Q0UqXUVCeWpuIz58KnpEWSU+Zi5nWUFUWGoyK30wY2ooMVZ9'@;
put 'ejQ3dUJePiFnT11MaX1OK20sPDMyL3o1KkJmI30yVz9fM1phOSU7LjsmY3hAYiFKd1g2WikyMzNpdHoqeDwkTCMiTj1lL0MuLHcwaU82dG1Fa1lAOWhuUylDWTxXeCFROUpQRXBMM09pcUc9V0txZlR0UXg9JSl6SG9jKy41S04hcHNOWktBeHlydjFVR0pVWTRBcHUoNEM+WWg2WlB2LFNgd0Uo'@;
put 'c00yMTxNKyFUJnNCUVdmTUxmST9BbCZXfCVsWyM4dTpHVlgye0gxRVZNWk9XQl5rfFE+P1t0Jl1vZFlnZVAjZWFMQy53SmxMYjJPJElUI19vLyEjfGFRLmgidGYyYG5NP1EzKFB5YCZoQXMkcUhjXVY+Z2NVWklfSmw3fU8/KWZ2NSlMSnV3STw3KT8zVUslPHQmWEg3aDRaRH44WzZSbTFEM0FM'@;
put 'dj5wVkZBTFJDckJnTz5UdmkzSiVENUxrQzUrUDZ3JEU9TkI0PHUoa09rQ1pNbzRLJUYieTdDUzh7Y2w2Oio/TUc9YWlualowblFqOzZRaHkwOzRWcCE7WTNOKVYzK3Z4LExDTVRsfnJ5Z3o9YmBGdmhNIntzaHsmTCw5OSY7cyVMaiZmJnBwR2crJiVVRC5yIzF7emYyO2MmfEFSbGU0K1M3PXZj'@;
put 'PENjZmlKWUNmM1ZdQjk1UTxFVVBaLCpVYW9MQygvJVQhcE9xLEpabDIvWnIuWi4pIX02JE1eQEY4RzFAaTEydVMoTChnQWMoTHJWdFM3U3NCZDNxJXBRZXpfQD18P3hgTW4yYDFIMz0uY3dWQCguSjhMLDlVWDB7YHo+ZHphcWM5e2oxcUchPUhEMC5eQ19HZGI1fS9tVCwlKFUuJXRPLy9XMjp1'@;
put 'QTQ3Nk4qPCwrOUE2bDw4NWslczxKLDsjUnpmaSowLkQ7W1ElQTZ0X1hAWUsxdm5mRWEpZHpqVSNqLENhKWR4ZnBQR140dXdJWTI2ZTYmcUB6SFNSZUk4ejlsKykmQG0hUSV6dnEsNEguPyttW0xiQHdwRk08RkVsPjBhZTZjZywsSCYlfU1tSj5yNllJZjs/WSFZTUBtIWxBfTZtWzRUYl9WRlN3'@;
put 'ISs4dlheZldaUS53Y0pqXUN3OGkhUlJrb3hnTUdzZ04xKEBpIVlNfSQ/YllESzNkWSRPaXRHIXhHKD0pVE5DfnRTemxmOXFvWnx3Rk5ZaVtofEsrTlpFKUBzVkdOQX15LnxbI3E3KFNVYSJOVk1DfHRCdSo0eFVXcjpwYCIsMUo3KlVUWSVsIVo+UnJsb1VRJmJGJExYMl8iJDptXXleW01tSnVa'@;
put 'ezVoNDAxcG9dY1R0R3htTSN4SUh7MG8qJEt6WXRlJHVrN11GPGpSbVBtayohfTF9VylkKXxLUEtAeV1NcElWWDFmS2NoU1dyPGVeMX5lZEIpMDhHTXQyUlREP01iMmJFRGIwU0J1PWc0QC4jd3B+TGpOe0J3cDNSQyQiKEBnYi48TSFWQ14zQjlXKUhxaz1ZISY+JDthanQiMWhgI3J4emdSIyg8'@;
put 'Y2NpWSpOb1pFd1ltZzRYZ093bWY0M0ZMWDsrWnI5QCxqIkppMUIqSFFeVVYxaS48UTxRdX1wM0JZZ2x9ImsiRlJlWl9YTyFCQCJyRC92ST02OkxpZWBnME5VUUwsUWo5QFZOcmAudks8eFh8VDtAJlZWXWU/XmpKZnNyfVIzSzIwU09yWUhmK2p9RiVmJUYkYF5pSVg3dUJpc31WM3FaITh9RGZD'@;
put 'QU0mKiI7JUtsPz1pJCpAYEF5OiJwSXkiQURXM3A4bmVKR0cwVGJSTzQrMSMrR3kyaWZLO1IxPkRVL2RZZ1ZFU31wQCxlYU0oOCZMbihpSmRSJjdWTG4pPzpmcVZ+blVZenB6MXQ8dnw+a3MvXmsoME9MPj9mJHlWeiFCZVM+STpzeUhKQVk3XyU9azJAUGlQPm4zPSU4QC5uJCx8RGt5W0JQMls/'@;
put 'TVUpQTY9X1syK0hAc2Z6T2RMYExDM0xNYWlVNTlGS1IxfnE1QjdMfX0/TTE1SmFxTW5dV0ReW2I2eEltdWVPM1pUaXZzKXdbWVpoTFs/czxAW2xnQmV8Wz49dkQ1RD5eemBUOkNSL35XLFdYLlNVIzkmZFVhcDk+SDRqaXheJGdwM0goWT98ZVt0ZmpeWDFnOywjWl45VnhiJWIjTiVtKzJwOW5g'@;
put 'PUZUaCwlKTIlYjsseGksUUZLalpyT2ptSkRQc11nV2ZLJXEuMVs+TSRJXXEyQ00lIj9xSyMqKmhuVXJUNnhNcFNXNyswc3V9dGs8UyFVNkRSIzExYn5qV09kQ0tFNChWdjI2c0ViWGtEPE1XNF42KVMxXkZ2cm55Vl1SOkNVM1NEL1VwSm5jeEo2R1JXLDNtdCZWUGV9UnZqfHJALGpOaz9sVXNI'@;
put 'U056W3tWc2dyW1suLEQ5RDpQX1NzeDM7eC9IOjFLWCR9Vn0sZytbLmBNcEJNJUg5XTlgOikpJW5LKDt5cCYlJGIxXj43P3JfOzwyQExmM0l5RCVCJiMjK15xUmkkP0RKeUB4Q3UuLDBzTjQkSnNFLkZ3XSZ8YWxtU00hNHx1T0FaZHE4MCYufEBqMktLSVlNLCF8fVJhbj52SGVNI2lIZGo/YHEx'@;
put 'Omo+dS80V2NwWkwpW2p2TFpGZGxoZTVCWUc3cnBGdjB2fG1MdUxfNXJQKTN5L294OEQpdHsyU0M6TlMye0cqY1MvfXlbT11RI3Z2fDwpJktkPytsPU9DZUZYMHp6TV9EJSpySXs1P04hRFpgdVcwRVVFT2MxQkBYSWtkRSxydUttT3coVlJnKz1DVnQ1O2lGfXwsO2ZDZlB6IihBa0NLQ1V8PU5E'@;
put 'VmpLTEM8MU4rOEJ9THJKXz9hZU18cHdjTi8wSkdtdylXZEB+NF1oeWpKMUdjYTNxak5+JWpGSnU0TU5TclEjQHJQM2IxNSw9RSoqfn0pb3xYY1hzcz9kQipFcG5VNVFCckNkYXdoSzM2Ml4wZCZeImtGIWkqV296REZsRV5+WEoiQExUMFgzRldzKVlpbStqKFE2TiFXX101TiFdJDJ6eSlPQG8h'@;
put 'ZzFBVWUsXT9LaThjcDR+RDNLS3dYMTxiSXtdJUcmYSwuSkBXaks2KTdqPSRYJHk+KiNqOGZRYmVwJjZePEQ4b10vTT9hMDAlMFoiQmheJVVxI111UnlHV34oT3pLQjJYZyhmcThrQ0A8YnxraGIuVCE9cUFuTkYmcyp2S1M4Qkc2aClqVlFnWHZwVTo0d3tQOnlhKjVGWyhdRCxJREdyaF8oM0lA'@;
put 'JUFXIXBhVj41cStiYjczdHo0OWpRXjI1PS9oQlt9MXV7S2JgckcsOnlmcl82VDY/O0tqR144V3dBVEA6MCpXVmgoLlhRImBXLyVrTGAuY2czei9Xem0jRE11ZHJESCpGfVtacCVWZjEwOltrLGJAX3NVQjErTWZdUEEvbVl9QCQuIlhFUD1SSkJXeGI6VzJ2WzZjTk1hQVYqV3lYUmUre3w5MUEq'@;
put 'TkdCc2Z4JHsvJVhSKTl8Til6VjkwTSpHcjpVQGEyInk4TEMjKnRbVjQrLFowdXdFeD0zM09vZ1N9TmpNYn0vTkJ7I04zQSk7TUNxO0I2KV8+RklJOV9FTVZDQnVUaj5lQUFjQiNsSXVSMGVxXVtnSktfPXhbeGZMeFRXazB1W3h2THhUT1lAeT05dXh8QnpNPWJPOlYqL1A1e2tFTjJNI3x8WVUv'@;
put 'KWBhUXhGOjkkcysvKnZ7YzEjc1lEZzduKmk9RTNdP3BaWzoyXkJpbHlZSl9DTGl2Qz1wTz5BJnI8fWYhWCNbZ1NJYiFjIko7KDIrMWlKbTtRajMlVnZUIjJsO1d4aSJAKDc1RHk2b0VTbnhuNWI/fDIuSHE9bzt8Tlh6P3wlUjxTcUp0JDojN3dfMm9QU0pMeFglVHopK2FDM0IsbkxodSszK2N3'@;
put 'b2dpSTtNcnNje3pDYkZqSlFgVzJVVyEwdUdRUEgydU9XaGt3RGJeYl1HSDI+T31iWWtqVk1mdy4veCUqKlIhSElNIXw7RDxHWy9Uak4kP1kmNyZTa3szI1JlSE16TGBnUiZXOEhCYDhlTyo4L0R5OUAhazhgVGROQW9WWipsRTtsdnJNYjI+cjAxUy9uU3trcUApMzAxT3xQWmhxM3hKQmRmcTt7'@;
put 'PGNbZSZXZ0M3UDU+REZZTkZuW1lIYjFoUH10UUVReDJpfFR0ZiE7fHFUOmR6c0teMSV3X0M0THF1KklHcj1LSmgoPT0kJDxVMVVARnZjLCZrJn1mITdrVSZRJjR7cUd8LzN8OWh4U3pOcjolSWIhciMjSTQ3KngqUkZnaDV5WXReNnt8SD5GcmhBMExeVX16Xj15TUBYVyNrU3pHNk9LfWVQKj10'@;
put 'O3JhWjRLJl9BMC5qLy9bKllkK0JMT0YlWEdtUiMqYEpGenFoTDBlP0gxZT9BQDVJRTNpKj5aY3l3LkRUYiZzUHF3W3hpWEhXOzNMXk08e1h2TlBOVUJDYnohZURIMnBOMSRZamFwdmdYMkg7M0hSWSR1dktaUHRTOiVDdTwxOzBXQl8md3FNb3tRKWZ5Lkt1PFN1dFVlZmVOWjYsVzB6SFJLdzhQ'@;
put 'UE93aWQuKFEmbSJHezl4LENLOyVjMzdjUG1KaExAdXxpI3s3I18lfTwlezxJOll1WjAvSjI+PGdjKVopUHp7PjYiLDleRjlVXjQsLiUmMEZqLzohYyNoXyRINjMwU3ohYmJpQmxpLl5CSXo/VUJfKzRLMDx2JXYrVnhCRH1zfFRJI0Y8NCo3VWNMWXJOKjxhKHdCdHE4fClHUTtDe0A3QixrV35B'@;
put 'RmldRTJ4aU8qUy9WZmxieUBwfng2eVldOEZnQTEzYl9CJSVae0VyblF6RF5nUE1QNTRsPXVPPypMP2h2Mj53QChjSnclPC54QjpjbXAjW0NIZVVfKDVFfGhHYylnNFV1aHJ+LkRLOVFrdWdyUCtPdyo2fmA9W1IpKUtlM15hdmM2XXQpSClhanBnSmV9TGRoekF4PDhfdn1EYW1+M1hCVyx1TCpp'@;
put 'OmlZPilJPGYhVElXTlt3PCZxNlkwJF0rZmdZfnJCNyEuRDs6KTJNQU87fntTcHVQTD47QiZiREgqUTYqIX5nSnF1XkFLOkUpbGVQejxyIjI4QjJeLkM9e3U1PW9wTTlBOXRRLj1DWlo5X1ZZajcxRV5EUS5OZExnPENsZFgzTEg8M1FjTmxVPXVWWnJHcVFVTlJ3a2ovUD42KXAjYiI5SGwkbnNB'@;
put 'MX0pV2ROSzAoWn4+IW9kWCFSajtaRU1icXlnKldpRzJqRCRpeC9NV2RHUl9zMUpmQT1+NFgjRX1XYyVtOWhTPndxTTlzYiUuPCwhPl4saTt+MktLdG9DRyshW085ZSJjfmI/JiMwb29DIU5vVjFqTkpTJExyOz1bJihqfltEL0x8VnVSYGZzKVVKZEUyITwoKTpQZi45T0hNKmFpaktlZlVmVEZu'@;
put 'MF06UGpaYXBscWloeHBRI2VzKUh3WEgsT3dFYF0+MD9nN0IvIkI0QiNYKT51ayZFJX4mbjV7TXcmYCFEcjQrQyZUYkImUHdaXXxqSC85LFM3MnxlZlkmTHhYRStZIUU9MmA8Sl9PMSIvfVZOeUd5cENQV2Q2MWpPLFkuN3Y+JmQ2ciovfk41fVdtUV1aITg2bGA7WT9hPzVuPC56T3YqLltXOW8z'@;
put 'YVZfYkJlZkojTyhddjF7cl9gXyQvI0olZHhdOnw5Ujh6N1MvclZET0s4RV5OUnw4YShSbEwwaGZhZGZhI1JGI2wkMUlWJHNZR2cmRTVfeHRhejwxR0JJQnlYLitQZFohOHZhT3t1X0J3Yl5xXVFqSHdwOW1gMnVlTHBrXldOUm9BKz4oMT9QJDxGMXN8eWFqayEkIWtyUGFwbXd5elJEWE9YfmtY'@;
put 'VCxwITBkUF9mJklofC5wNywqbktKdkZZUUNRVkZMfEBYMHUiMTx4VXYxdT8rd2J6YEUyWFQpQyNgTzdQc3JsYWtqMypbLG1ROjBwJCpNK1sqdDMrLl9bRGJTRXEmQXdxYylaQkBqL3gwLmUyPV0wfFN9Yz8pMj5kVDwsdWk4ez4kNFtmblM4KSZMPEJ3UFsxP2M4QXdyL25NIUxQfnw5a2JjRXYi'@;
put 'aEZHVkZ9ODklZ0cvITs0eTs3cSUlOHlaek5pa2xZc1M2TmE7SEJfRyM1JENlc0xANkBVN31PL2NXS0FPQ3dlfCxjQDNuLjwsISUuJX5hXmo1VXw8Z3F5XiNYYjMlL3pLK3t1aDppPisqQyY+VSE6VFFWQSlOTHR1Y3F6Zmp9IS9ZdV9yej45VVhUaFAjYjFGe3dYZkQ8T0BVKDIwJENqXj8mdEs/'@;
put 'aSNIZWBlYGUrQUpqMzhjaChleHw6WHJQamNfQThdSz9HQjIiSyQmY0VuOkkqJm45eiN1O143KXlPZkNWeWxST1orKkVNJnskeDZlSX0yPk1DJStQS3MpMVpURFl4KCNuRUJPQT9SU0RZWlZsRWl8U3dwYzVCYUc3cmhOP1hgcmdMcUxpdXA/dl1aZW9ETiNSTyZYYTw8amtqRFAiK293R2QmJD5D'@;
put 'aCJrTkZCKkdhRCEvN2Q5TEV+W1s0WWZWYzJheXVDYlIqSmxFMEJpIjApaykyKE9CR3VESEdvbWBaYG5OKF58KHxObWdyVigoNjwmTyhvSzFkUmZqejheTmNpNV9oNXh2WUA7S1U2emIhdlFWPUV0QklPSDUsLn4+UD58R0xNYW5NSH5DRVBHZHFoRFVeKEZZNEsmXz5DZXFHImxCMEN4P3BMI3Z2'@;
put 'SHcwR3piIS55YnlXIVs3PkNDeiZGdE1heXg3azo+fXx4XTYxel9xZSU1UVJGN11tbmdsRnNjVTQpTnpEKzl1eCsyMyFxPk9PUlNvNyhOVHxidU0vSkVxIV85bzpZdUA9MEA9U2RQVlYxRktYPG4sY2ApIzxicnhQWEx7Ql5hMywqQEQ6NzBfOWA1QkBXUFZqVF1CMXlXdjJMa0BXbUY6bkVTZDRY'@;
put 'NyFsbGxPbH5lVjRpZDs5PnZ5WDwyQG91Zy5lRmc3bixyLiwrWmAmNDhtRjohUGVwSEopNjR3dHhdI09vQFsmSy4kM0VafXdUKEo5MiozTUE+NmBwVSt4Rnk8SS9gTCJPXSVEL3kjQz1eakU4PWo7Kz5JdS5xV30kS0Z5eiJ6bk0sJEtGMHowdnVAc1VgTjZ2U29zNT0mSFRMOlAkRG59QC5yVilX'@;
put 'bSxYbEBORWg+cVVPYV54bFJ7X1E/UTBQUy4xfCFdUV9OWixveCxSNypbLDtfYjFTOClAcD1XX2o8LEI0SixBPltzTC5ZeUhdYDxOblhmeTE3YFglWUJjSEwrVkI3OlltYkBkLDBbL35xZE42KkBvWWcsMFsvNTI5Q2FXcEBoUTRCbitNXXNsYixWWmZ0UXwvL0V6PkNkX3NsSCg1NXIpcTl2ZiNG'@;
put 'STxkeURhdTR6YUB1O1R7M1h1JSwrODBRZSpwWlZFKnUhbGpTb0x6Tj1OM2hqdExPRDBteERiXixBLjx5NHR2Nj5oKnQ3Sy8yODhLKltfVEg9TmRmQUpJUX15e2t3PlcyJkksTnt3JChUeGdVPGUzJTFOTyRLWHN1S2xTTFt0cFpocktTKTx3cEp3NltPWj0/aDxZZyRoKnhTNXs5eGdzLjt4UnVs'@;
put 'WilCeVQkJF5RJUc1TDlRQCZbdXNRI3tZLlhjbUlSKDQuPy8oJTpMMEEmcXBGaChXKyQuVHssVVIjS0dPd2lFMUI/VldDISRsLlBDPCRgaEt1eD5MZ3s4OWNldkxDVXp+RDNGUVVtYWAuKzEwXzZ5NVdmKy4+aUtkRmN6bD1NRSVHdjE0S0hDZUgiU3xge2JMSVRrIkpbKWtvTj9+eVs0a2hqP3k/'@;
put 'K09rQVVJOTs3SFNAbm93JSVnbTk6Xmo4NipnLF1bQStZamtQfCpPMU1UfGBaYTh5NX4yKUF5IlQjUjxOSTtxcnFwcjJsb0FTb1B8PyZDe0UyOEBKN3EmRmZMTHFEODU9Nn5mfm9VTTBqaFoiRFRWTG9LaWxxVzApQXlNVCJZIihobSFuJVs+MzVzVCF2c24mP0t0X18/WGJMSSJTdWdten5UXWhb'@;
put 'Kk8vaEsvaUtwUnY4MVs8flBpel5GO2k/TE9eQSYjUXF1ZkRfOGlLWFFpO3RSKWpMU0lbKiRGbTsoZD9QRXkoP0RLYD1lbywhYlRfSkV4WDp3TzFNVGIvRkMqeDxgdllqLFV5T2R6ckNCWypBXm0oTG59RSNGOyR9Vk9eclhkNmlpUCF1Zlc0fUN2XjBZOyooRn5lMk1+SExGdXovLlYkfHkqLC86'@;
put 'SWxDdDdfLDwyIyszcUI/Y2tFaG07ZjtpWD0odnxQS29sUnNkRzV+JW4seDV3WHYlYCYjNjR2a04jPXJ1WndBWVtrfWBjZmZVJDBuZkdzd2UuTjF6SXdlL2BpTFBAcm5NV2hCOipfUH0mbFlTKW00RTxndXc7aV9YdExtQnlMT3Q3ZktAdjFtOyJ3ZDEpZWdwK0BRVWc0RCZ6bDlqbCRhUDRLcklM'@;
put 'aEdCLk5RaHx1Ly90eXQlQzp5MnsuQjNJcDhwVSpPdjlWOmpFPG1vMiRCb1N9dEZGNzwxKTV1dlJVUzEhLChkXzIiWWxAY0NENnRfTiFmL1lOPyQ5c0FRNWIrY3tIekhpJXJTI2opM35xPSNpb3VbNFZ6UlE6NyF8OU16VG49L1coWkRGQzJ6KWV6am4yfiU6dyheV255LF1wW0B+ZjVvJkBGIWRq'@;
put 'W0gwNiE9ZT0ofV9wNjJvSnBULFNCVDFJWUxubSUxTCFyZipqVyw8Rz4kOyV9VGIsXklXMXQsZ3A0V2Q5UnltTUJ2ZGoiJHQkaz1qYHpvODt5Ly5rN2Vldmc6UUZhMmwvJSQ1azBtTVI9ZUIwWXZtOyUpV20pVSxVfCxHbTAjNkpmL0RqaVQyQih9R1oocCV7fD0pUi5HUnZUO3VnXjxDWmVWSHky'@;
put 'JFhTYTtDRkY4L3I8aldDZlpaLEo1K3pkSTNXdk9fMS5obGxPKkZ8NjtlJCFPbFJ8YkE2TDY7PEpYYDF6Mm1gUGJxanRSXyUoT2I8TTQhJj8kInAyRT0vNFM0JkM0JXR4cWk5WFlNYWxjOil9NnBPaXokVj0zUj4rKTBPTHI5VjQkT2JTd10oUndKWn4lZnQ/K1B6SipGb1NAUV49OzgiYzYoMTss'@;
put 'cn57IWY7S2M4UkRwZGZ6Vy9MZ3phMW9+VEBgM1cmVkp5ZHp9P3pKTVMqP09pUDxaKiQmRD9PPTFhZXttOCpSKmF9ZFtaejhtOHBMc2oqS1BbaHErOF1eajshaUFjVChxUmU1KUUpRTVXbF9CTndYbHsjVkllNDw5NzU7UTkhaCUxeWM5JWA8M000NSorIWA6RjpgV0dXMHI3cDF+VDoyal4wcTMj'@;
put 'K0huV3pDfTI2S31BNzZEc25JZUFjNWJnbzJkNiFbT1Q0emU0ZzQ1L1lQdzB1M0l9eEIrKzBAVXc1dTtPanpPPF9VOT90Xj1GO2k4SWU5VjtRTCRLOnRVIzdSLzE3Pz1wbyN9I11lMkJNOmI1My48bkNecF5+YWE1fHo7Jl84JSNQLGQhPE1WcCRXO2RZU1FeQyJha2lBXTglfjVbfF1oLkNDIzBb'@;
put 'bDwpZUJjfWQ0YUJdM1U8UW9+KVUycDV8JF9xOW5Ifi8oJVY+XVpOe196UzV1MyE5ZDZqQD5nOlg/T1M0Rl09VmtLUnZsZztCIyY8JSRQTiFSKVQjQiZxdD1EW3s2YmB7ZnJzVjhGUW4uKUR2TEtFRnNgeyVVXkdlJCJLZD9oRkY+cGUiYl5JZWYsJUx8OzdOSWVyYiN7YSkmcUV+bFk8SzVwKTgm'@;
put 'OzpBUnYoWSNLIVklSH54cUU+WTlWbDQxN0pEJU1OVTopbFJJZUZ0Z0RrN3N8L2hmWD4veFgpW3NsVyNGe3dKcCxbcTNDNzQucClncHpxTWdFWHcifFdnVDBbW2Zoajdnb2kmNiooR0YuVCE2RG9FdXZKPjNGRW1CbWs7eFh7Z3RIVHdgeWdYMl4lRCR7Lzcpbn5tVUFZNkImX1s0TWZoaXl6YTsh'@;
put 'NkRBJDhJLC99ZCpSZSwwLCIhMy9QXyNSTkVUMSojOGNKanJvNihDS2hXNFE5bC9DRU56byJseU1DTVlkWlI7LEZCX0deaixiQ3pXencsdyRRaHwyVklORHFLT1JZRVhTaF4oXV95cD10ckJZI2M2Nzg5K24iXmQ5OXEkKypIUD1XMW1wIl93QGg4U1c8bz0vJWRSeSQ8JXtHZi4pJkxpIllNan1x'@;
put 'VztXfnIsWzwya1A7L15RQ3M7V2hePi9nQHNgWktgPFM/TW1gPC88MixMZzJtRDVWakFCOllyJClSSTxoOCtOY0B+fHdzP0UvQGQuc2pvMzB7XUt0XmVvKFovOWhfP00hblRqOn5edUpvJVc5QiJDXS9wTFs/VXpYRXRCJm42NCNyc2smQyIrMXEsXz9XLiozUzBxLF86YVhHRyxiIWU+IklIbjQ9'@;
put 'WlByI21eLztqI21edltiISprOmZpfndvYUV8dUg9KWw9Lylab01wJWBuQmEpKzxzV35ROFR2Sl1rdXZ6YHF0PS95YkBXPnwlejtKU0JDajhmclhiNlJjZ2QoKnpmfEhHNV44L0o/eUJYSDAvVWw5ODJKPDZJaXFoe1J1Rkc0NXpxcD5PajJ8ckQkNzIhK0g8KishP2YzQmshXkFUeEloO15MOVNO'@;
put 'QHY4PnBGbVI2cnBickNWQlcsalZdRTZscThgV05QRUNjZGhAPXJeR2hPIXYwRTpGe1Iybj1gKV1PN1E+SyJ9MlgseypFYE91W1ZGJiw5bmpQW2Z0UVBXalB2WjA2azFCen4rTGQ2WyZEN0BjS09dcUxFR3Y6WGA9Rnw5eXFqK3dIW3B5K15lYFtUJEtXcyRjLDhSTkVPc3F5I1BAekNaTnttTjZG'@;
put 'QUgqKkczeCtjbDZmWWdHSkp6PDFdTnhpfkQmaiZNQm07P0QzKEBsYkNgIS9yIXs/VGZIU25LJmNTY0xgT3ZHPGkvcFg/cjFpc2Z1WytxfHpmWVdJZl4mVFRPQUBTMko3JjlLTDlmLGRyK2ZWO1NYYjhbOVNeQXY+YExpcXkoNyteYVBGKSJQPGBYc2BBRW1fcXlEUE5pWTNIXktwRmJXVWskS2c9'@;
put 'cmpMIlNKYWhROWxQIV5vM3BGKj8oP1ZHRWBDfVI8NWklUTg9Py5ILkpbaENaNDxyMDNWOURNeio2YUtxfUVRUDhYZXJ3K3g0OlBiJCFaOWZeU0NeRGI8cEFaPHErfmUwK1ZdaUNYLDhxLjUheSZGI3Q+X2FWSlgyby9WQlp3RTJLfE5OQ15LPiYxIk9hIWNvTWxsemVUWW4xI2l3aXJvWWpfRSlJ'@;
put 'ZD8zZUtZa145aU5+RCw0flF2b1psUiYuJnQ9cEBFKEpRIW5+Y2tHZUNzaFtedlo9MyxnYiRSWnNbKmhYflZGLCRkaG89RlB6PG58UUxDMXlSPl9nbT8pYk8mMltfM3tFYF01Xz8qQyt8VlVAMjZ2MzJKJkNnclRGPnwiS1tqciRbUSxMNytyeW50c2JnanNIPWgqc0pFWkhIdzhUPmpKIW0rVFQ4'@;
put 'QFZpaHUqQSswU1dVTkY7PCxfTVosd2htUlI3TGZSSHZ7Wm1VbTwvfDl7dDg7XyFqMzA8SnV6SWIoNT1JdTp+aTtqZDAwR2R7ZDF2NHNiY2BpW1A3Nip3S01qa0d3JTN9dHRKeTM9W19xczdXQ3hZe10sIXEwM0siWlZrZHoiajtpISYicUxAeV4xRkU5dkhiWGp+c3V7YXNJSEYxMXxOKVtnLGQh'@;
put 'XTN1VjJafShpc24xQEFpd2pGOzE6OypMeiNxejppVCM/bGlwWHo3Xj1oS0hfWGVEIl9AUkx6bWUpJlRhKTp+WWU4LnFKW3thYlY0VmBDPGhGVX4jQDVpWD1mTU5WRD9nc1Y0MF9geitfXUYjNTVfYFlQZD5xLFBxMS45MEpZclZWPWpWQUciR3VAQmIhOHlsdGwhbCpEe2tkSCwmJiVOKkkyaEU/'@;
put 'MEQrYWtFeENfN31kfSpRdXY6JXhwZjp5YXtMTyM7VVd3WzxSPkg0Uj5JJjcvNHRlV0YuIiZIJn1dZCRyczgqIjhdN2dwWVgiOzV2Sk5DI357Z1ssTSt2ZXdwaUw1bCFPLFswQFsuU2FndCVLaHtgPXJVKC4hInJVKGEiXVsjfHdQV1tqb08qfkBaby99THg4MS5ORTJ4KUAwUk8uZjReZHoqN1Yy'@;
put 'ciZJL2xbfSU8NSN3SHtpYCFyUThQdGxAbWZIfFRQKldMYnZNNE1MYlhfOV1zXUtXQVdAak5IUHI7UlF1dXFMSyE5O0AlTnAsPXUvZSwyPV0kIlUjQ2hvQ1NgbHpaRnsoY2EzVU51eVQhO3lKSG15P3UvWTJlVVZ6Wk1WPl4vcStdVFl4MngkeyQ0WkZZYHxocD5Ual5PZVNWWCx1UWcmUylVWk1W'@;
put 'WE1BTWUxP3syRTRBSEphMzIpS3A7KTE9VmRoRmlmMHVAPGthIWVObVIqXn1jQEwjUjs9QGMrSDUofHkmWHExInJ7TWJTQiQjV34+VUJtbCxXTH01TXhOTltiU3pLNWtfaXVIWyokKjVLSTc2WE03UHN7bVE+WG5qM0JESCI7V1khX0Z4d2pBVkZleEpZaHVdTGheVjhXXzMrUXxeMkRQOmRUeDtX'@;
put 'JXk7LHN3WlY9OWRlczNeYWM0PyxTej4laCJkP1F+ayYsbjhYa31ZbmE2PT1hWmFFfFghNnFwRyIuTCtVU00xaXgxc2BEP2JEN0JOOCZHIlZzP0lBR2pVOjFHIzI9O1JBTSswfjVxSERpdSZpZCNKIkYxL248OjghK1Ewc3dnRj1Udi8oflZtUy9FRVg9N3s3dUo3c3x5NyFvMGBiIX1YTy9fIVJv'@;
put 'TUV8SyNPRlc1OSgwcWRLb1lYVithQXhoYyYiXXFlTnxrcWdjUyVFZURNIVMjeVg1KW5WLnpIUFZdZiF0Nm9CPDBXR0FgT3UsdVVyNGF8MD0wWyVAWlttMHVMMHFrTiEoKStzXzs1RSwwOlZuJjZjYSZUSCtKc1FZYyhmNTtjP29xflohenx4eHsiZUokQl1BMFhjSGwsVzxbMXdGNlcyaGI2aTlM'@;
put 'cHcrKHVjcDckVXhnUWBSLiM4a2luOSZ6YEhZVj5wMExNRXAlIzVodGtVU3RpS1IvJGtPdVg6d2ExTyIkIThbRW1xIldGMDFDM1NzNDUycUVveEAjdDt9bTdoKTNLOGVhKXtOWEopQCxibHoycUVBeDYzb29lYXNlXi9ickEjc3hxRTAqIU09KTRRPV17bWI4NSlTaWVyWlZ2eGBOaCFXVGBJTj1u'@;
put 'WTpmPV1KfDNYSztXPUAla01zenNlPDpNfmJQWVR1WktyZjVMYnxdPnRpJDtYbXN2TWIsMUxZKV5tPTM9dGFpfiR2fWV9KDtOKFl5KywsI259LkhuPWJGb0EzezwkM0tbdC5YWiUjKzVHTiEsZl5MNUU8Ym8hPlMyJTUpKy5iP3ZTRUk5V2tIY1BZVCR4NCM5O3xrL0htTlgyempbWzghUzhvcTNE'@;
put 'OjVIR3laPlo1N1VITWlrclhdNSZqeXFsRWwoUE0rUWdeTFFQaVtRZyEiMSxXMk5sazgxMU1yV0lEeCk1TzZkZ3FFSztiRnwoTVdYZ3YkcV5ebFAremd3VjlyPTxUd25HL01fNjBQfUw+L1hVc0NbLk13LF83ZzJELCxbRFZTWkpQSHMqIn13UHlEfXt4d0tNNlg7SVd3e1B5Tm91WGpiMlpGSypJ'@;
put 'VWthMks3eUVVZTwmWyUmY0pRbiNoKntxOEhmeFNJVDNsXWpafTo1U2BOUjo1UklnYV1qKEt3UFcse0VMQnZpJlddK1VZe019MUZ6KStkYWlqSygqRyFCWUAzPyZZcTo2cU1TUl1+P1hmRElLTWpmYHFIIVI3a301K0VpUnp6L2g+IzhhKlZpKDg2bD9dOjNBY2JpPmsyVG9mSE8oUHJkeEleRWc0'@;
put 'W3VLLnRjYyhiamplPVtOLltFeThMN1NPXnlQbntScUdFSkYlMltuNzBVNCFSUDprTGJ9fV4vUi8xUDJaJVdKYSNCdnhAdmttbyVgNGpmfWlUbVkmYnw+Izl7VjBEZXhmQlNffkJJIzJ3SlQ5KkxMQ2gwTURtYHxPeHZxTUlDKlo9Y11hR3ZaL35xZzt6UkQhdHlablAzS0tMOTRIOXNzZiN2ZChQ'@;
put 'VVJKNj03Zk9NRjdlUF9gKEtvJVdsbUs7bC5rZEMwMXEqO0w8MDZdSyJqRG1KX21BWWdDVDIieVV6WEc8UyFxMDZmTDxTX3gkRSxNI0hXbDRQZzQyK1dSUlE9S2x3YEs6dWo8WlRLJGhXb2pKRkduSkJUbEhuRGEiXWQ9UTpaZldtN3N0Kl5uRzl0InBMOExofjlMZSpfW0AkJCk5PzZhKkQkcDIu'@;
put 'fFZsUHY7Y2UlJEd9WGwwSkVrRyEhdjUpeitkbTh1LkxhRHtSTnVWZl0/SDMmZE4sdjcqUCRHWXAwO1lEVnZWdFdWSkouTVFbN0hZYjs1Mio8MTh4YC8mVW9DbEc0QkRNLnJARTppJCFkOHQvIyl4Kzo/aEA2TS9GXzVAdCJufEsjV2g9O0N9KX4wfipSTVMiTF06dlIwcEdwQElSPENPWih6dy47'@;
put 'UDszZ3RZQGVufSFbUDFMKE5VXzdMZ2lOYTdQO0N6V0FPSFQyQ1d+NkwhWE9UL1o7Rm9YYFkzTl92YFcqNCMhKihTaj5lWlFEZm9RUXU8UXkwNXVMfD4+TlY1WCIpRyFEbzleZHN0SVMyWjU5I3s8YHVpRWc3XSpFbFo5Uik2Ykxxc1siIzoyaWY6LmpmS2hROj0vTGZxaWFWQGNiRmApK19zYnJ2'@;
put 'alIyZDxYOjp+V3Mrcyl6K3lnPTBMQEcjSyksQkVOeytyWSorW35MLGBOMCN2SVZFTyY6c0EwQD1Veyk5KD1OWTxbR15hIjxoSW5XZWJLaVlvQ0UuYDxMUGYlYCZNMlFJdEljSyFVSXZfNFE4KlFxSSR6Z3hKaVBTWSU8eDlWeGJmbGZlZyUyUFQ9QX18fGlrbTMvWiI7KVI6ZD8lY0BJTWgvflZ1'@;
put 'd0BFS3c6aDJnL3c5UGQ2YyFJZmVlMCtQYnpXRFo4MzdqbEV0KUdVeXcleDBjaVlaYWVvNS5lOFBQM1RiLD8hTSYid1prWmcmZ1MrR3pDSkBEWj1QbzRaciV8L3N5JjBNTkIpS1h4dX5CRztjYUpWczpNRiVfWGtmZnxGQHM3ejQpanJmXSI0OC91QG8lRFV0ak94Y1dMWlU2X2NnPjllMFE9Mz05'@;
put 'JEtOfjZlaWA0T0lJaG9EVzpaQGR8eEM/S28zRTlYJjhNUE8oXigiYWo5Yl9QMEF7ITEiR0hjcU8kJX41OVYufExaek05aSxTXk59MnB7cTE5ZSFAMk9aQWAqdzVXSEk9NGF3QkM1Kyt5JFM9ZkAwcWdJejxibHFldjp1PlcpQ3Bfe3hCfS4pJT1uJmB4KEVebmNvLG18QFtVXT5LM1J+ITVWZHZ0'@;
put 'I3tUWCU+NWZZWSpWbjE+dHpBZU4iRldHM1pBKiNVQWRCUjlAI084MWBtXmYlY2gzTTZYWllwdjV4MHFNYE97Tz4scnJrcSY0eDYuYXMpIzlLbjVbXlllJTx+MiJhOWFCN2p9MV57PXFaJCtPaz1rODxDJkFoaz90bSMhUnAuOURxdFc0NUlVSz9hPFNwXz9YYG11dnVeKnNKX3ArJSJPYDtuezF9'@;
put 'NXNFJVh9Ryt5WDtzVF5TMndQJlNkY3E0RCxyT150e05RaGdDfS9CV1ZBRTF6aj9lV1Y0PGVAaV1WUFZicGp0cl5OPVdFSD01NHdjXlleSkliRkhZUG9oNXJlKDRzenoye3VneFNmOHxfeXZfJDFQOik/ITg3bVcjVDM2XnJKTm8+SUowWjd3LlE4P3EvQGhvNCpAMGZvKVU2PXBpaywiM2NoKm5B'@;
put 'R146ZVkqe3pVKnEiPHElSTJVI0MjR3NJMkBSZ2lQU1RnX2soVW9HLnwvUVcqSi9sNXJ9fjp4OCNbI3w4Ynl2SzxwQT59bSx0aXYhJmpYLFQ5Yz9OZmdvL35PIkljaTRbNmZtZTZMQEVweWU0ezh4Xypub1JnTnRHYGBQfXk1TDBfNV1EeVJ9O3NwSntEdFciSj9RLyZjUCNqXSpEQFg/XkA/U3Bm'@;
put 'Q2A+SHZuImtJTzEsMCwjeCFqaiQqKV0hPzlxeUE9a292WCxHenZoLkxiKXhjNUtVQSUzVHRTLyl9fV57cHtbXnh5RWE+fUowWWtXciouXihXfTAvZ2pHSkwwKnEqXiN0Ymc2YzFuaCZGWlA7SyhQQip8OlF2SFlRMl45aVR+LGc9SFd2ck8pKnd6dVNZaTRjYlBASXksRE9GUFI+bz1NNSkrSzRw'@;
put 'fWpTVDE6Z0pJbT9uUE9kMmghJn1QVDFtRUtHSXp2JWlSaSpSb0Q3YXUqM2FJI3ZpO3d+YW0qSkMrVXh6UGZoKX00ZVV4YitIXlJCeFlqOzlEMDVrPTxTT0Uqe0JpdD5HRjUqNzdUSDZ1N0oseyozREh+VE8kYSpdeXA+Ly9odnZ8XzRTLF4zT0N8eTsuTlkpYTgveSk2KEZVRGgvKm9RQjcuZkFF'@;
put 'Q2BsWEZDLkxAVkN9bDk5P05vPTlKIW4hWnxHVVEycG9uXmA4cUkyfFlRQU9SaVkqcThBLFQ9aXJ7KVphZ2Yrb2BDRjB8R2JUUWNxWUVJQUguSEFIUXY+M0tDd156aV1HbjJCIkZyLGNAPH01YDpXTHJdVmZFXjBpMHdOQllrbWs2VF4uP1Z+STIiLzEyIzZtYiRPPTBtYiRPPTBtYiRPPTBtYiRU'@;
put 'T0hbZWFqTENGalcrNXJ7O2kiY15hQXYka017SVlnPm1pflZncn10QixlTGQ/KSNoPWNQNTlWeFJYdWo4aWNQQU9CYkpdOltSQl86bG4mZnJnRX4+N1c5Ri5FJUNfUiFqKHlYa0ltWU1wJTwicnZ+STIidzFyQWVdfW46Pm5IdTRPOmsqIX1bdDRAdDY5ZnI9ZiNeWipWIXNsVW5ybHBJfk8+UlM8'@;
put 'PC90T0JULiVZcjQ7UzZpWHBZVTtwOEJdJEVaLEoye1p2NmRSI0hsMlA8RFRZYjVBPUl5KXAmM2Z2OEJqTGtBbUAlTlMsKn1UKk9yekJAeSs/T3UuYGtSYWlDfnBCbFllY1NWOyJ+WTA2XVtTY2FyWElbdm0sdk8uWi8sfHk0QHpIYkFKdGdBJX1uVl9VODlwNVgjKiZhVj97PzxbQyguUUlDSGxM'@;
put 'MXJoVCp+TCMqJElPPyJ4UikzaF5iRkx9Nkh9WSFhM2VsI1k5UCY1PUZqd35wP0NrenR1XkhEUElCP0ZDJDFtLDU0KUBOR3dyVGkvZHVbeX5XJHZJXnZwYUV2ellSIUtCRzJJdU1sUkp3aGxjUntAT3trVnF1L0Z9JjhZWGljRn07OV1mcm5MImE/Z2xkRzA6JV9jLk9vUCUwKlViPFpReWdebCVp'@;
put 'QChlSVhVTnhQYDU5dFFTdytycVlQPEdRbXZ6MmFEKzkoLGhwQnBpKkdHJV1WKjE4X3FqdTdeN1BGY3Y4PVVZJFR1MzdRWjh1JkAqLkJjcSY1bUI2ZWtLcCliQzRvR2F+UmN5PXopL3lvcCVhKUJIX1J8IXhqWi5eMzFCLEpfIzkpUnJDIj1DQjVlcnI7aW9LWlVpKih6dERMTDlDLmJoZlROUW5E'@;
put 'VyRqMXdUOlNoMm1RTSo4OyM2Rlc1bXJCeVs/X2srR11vIUFkZlJaPShaPFd9fllJbEY7TjsxNzBNbktZOWtsdCVsTEZMMFV5fEhudG1RNyV1Lmg2OisqWGUoPExJQStxSVtDZmdUQytgfGt9cDA+YSYvJStde0Evb1B4e1JaYHh4JSFqXl1gZnFOaF1nViUkQzNbJkBjSXFfPkxGXWQoa2pJS1pV'@;
put 'aWB3ckVwZiF3WUFjXkwvK0Zxb1RiTFBSLCxiZjtiWTxqXnZ1ZF1yJVIuSUY3YXB2Knd2IT0sSkd2bmR3fi9EcyVhPkw1dHRAPFRAK3pjT3Mue2lRL0VFW3VwQFtUa21JbWpOaG5bRnVWVSlINSNIWkxAR3UlL30sOWd6KSw6b0hiWTtaKyRFcGNQVkpmeGhUcVldLGhVMnpSU2c1YjNSUXhIbk1H'@;
put 'LlNqbyl0NV81MElTUj8sPTtGP0xuWXZoUXREayFdNypnZDNqXnVkdHNkMWt1Y3kzMW1gcnFheE8zdHhgS3ZOKXcrLz1obV0zSTxwUmFfJW8jYyojfCJVVXhuMEVGNjcpW2EpU11HZXQ8KVQydy4oZGMuRSZjaTZrbD9wJiU/W1JkamdRTk1JTnpxbk5PUkhqNlAzKVsrQDB8QX5oeDNSU287KU5U'@;
put 'KXFOaEJqNG5UTiYlYDpqb1twcUtDNW5yLmRQSE9kY1AlMTYrbTMhcmpPeUBrWl1fQG1MSlVlKyQvTiZVNCNgbT1oW0lPZHN4QVduQyorfXxsTn0hTUkhY3dZNVNlcHBwNHQmYD9zb1RvVXRuI3s0UU4xLmJXM1J5PGlgdHp7bFNYPWJKWkp+Ri56UTtofEpfOWpDOjZ6U2h5JG1qVFFtcnl2eSR8'@;
put 'ZkBKd1VZaWpnYG80I0Ake3tCWi86UDNpeixzSUl1ZHJrZCQxLmRVI3diZ3tvbm1oVVtpdW9tNmFUYzYrYz0/bjZdN1p5QVdxWywsNXhidHlGT2RoR05ve1EzKE9ybVJUQiZePzdpOE8+ZDA2bjVLLm9ubThOfWFOL0dOVTlpQnhub1BBTzxrNGUhZmheOyZQWXlyZ3J9MTdveD9geEg/STpXfTcq'@;
put 'Nj5yKWtROUl3NjE3KU07L2B3WkQiJmZaYCo3Snk4YlBCcWRHY2FxNjBPd1o1VV91OFchT3JmR2Uub1IuN2lYQkg3IS9vTE8pbjY3d1VlRHNxd0xBT2QjdmNEQk18eyEmd3IjeTlWM1QiVjpONy4va0xzJTwvR1NmTSEvOE4zZU91V18yY2pYPlhTakQkQWosUz9FIWcwNzVCLm1TUjJeWzF4cGBf'@;
put 'MnxwaEouMGBbPXlgcCQ1VGUyTSJWU3hQU1BVaF5FKFk+XnlkMz50PWBhNGMqRnF2XiQwalk9e11RZkZsQm5iLD06NkJwPzhhKmt0PEhTUjMkUUltRk1hTCRQYilKYT1jQiJ3WTwoQyNIOCY4d1lyNig2WjpgLyRiNCszOT8mWCxqNVB8fWpsYzY6RW5PbXJ5JSJGZnV1dEQ8M1JCITRpPHtIcHNp'@;
put 'VUZ8YCltQmRta28ma3JSfTdiZmtUUSszSl9JOlRbJFM1KkZoLm1NeGVJbFI3dkYiT24iMTE3WDlKLmBWIj9CM3pSR08mOHZKUm5sa1g+eVgpeSRoLGJdMFRqdldYTCQkWjRbT1EiMTc2SyhMOURET1BaYkgzUnorcGxSRjo0WXRaRyRsQk40XkM1XTl9fGtRSmxvTGhwV25EXTBORy5CbXgoL1ll'@;
put 'cXpGJGJaIXZ9fE9HL2JVIW5LXXJsTn0mXy9Lb3YjRHghXlQ0MmZ8cTcrVE9FcURGWiMyMVB6YmxzcElXfDEmQzRiZG1SOUlVZD9HOENEPEoueFd6P1V0T1g2eixVRkouR05NVnh5VkVTekJsUmJ3SkpHaEo6VXA7PHVQNE96VHREJTEvVDUqX3d7aC55PHw8Ok8vaEFKIyUzbGo/cyVPWixIJGVh'@;
put 'MCVlPSpVeXxDajEyPzYlYFRHNll4fWdeZTp8Oi8uXyUqOitUfl5rdTk/XURIK3k1Rm9LYDo+SCpVfUJMW1tBM1h6Ijk+Kz1TTFBTdltKPXA+QzhaQSROYURdbk50WHR5PUVnZkB3dC9qZ1AvfCZyWVs6TU1wJVUkdCFBNDBtVz11Rm1mcSVbNTA9RngmQnRKNEZYakJ8aFFsQXR0QTRicDlWQlhm'@;
put 'aHFnI0hVS3QudkJmMEo8KTBOWHAxWEJ4aVJkKEFFQXRFYVMmKUd8d3B7dVFQLytFUz5rKl5TanhObWcqWnsxN2EjZWopUlZIdTAoKkFzLzRnUyUhUEJ5dS5fMyssQm9iRTd4Q0RZWEIrMXQwNzZHcV5xUlRqW2tCS1RiO1s8L0Y4KFBOdnFYdl5Ee0txO3M5YT43QCUhfChlInwycSM5KW46ZU11'@;
put 'fSs9KCF1YzZ9Imh3R3EqeiI8NG9PeUcxTzRuND5xSW52NFljSjptaTB7THE4VTxLMyR+NVteV1RtRSgwbmNNajRzZGM3OykqS15dUER6OF1zM31rQTxlMnJJImg8S2UhemQuK3BIZGxmPDc2eEo9KSUmUmwibF1IPnxseFVVOy9HV2BSPiZeYFYlPnxeP0MrPGhIKnRHazAhb3VGeDJzM1djSVQ5'@;
put 'dnI2Ym18bjdVLjFXXlN1IzJfcmtzYX1te1IzelI9VTdnaCZnaz1ddWQ3Z2JtUzoxTC48R3ZmZyhId0BCWF9NbU9XJjppPUZfYlZ3ZG41JiovTlRjMTFJdS88ezxdZ3ZpPi8/TGkqeiF7YXs+Mzx5KTtnIXxhdkplLnpKJUc3cTddPS43UHwlczl+NTNnM050RGt7dVpkP1ZJaGNrYXVxUllHeWN4'@;
put 'ak93NyxIRm59bUp3QkBGI3QmK3U3SDxCRD0xVH5dOFNTUDg7azd9eXtwSHtLTkteN31gQEhZfnJ1N1VpIlVqaUt2e25QNF1lWFg4OCJ9UWY+RWN4PDFqMm18K2NMWXkyQVdrajgxN1N2azhoVSsxY2hiOjZ+Q3VIPXUpaV1fNEh3Oi5zRzEyb2E1U1lIUiN3IntjW0pFaSxpRUpVVllKUFd2QSQ3'@;
put 'THxSPTlyTHlYS2AjMyQ5TV1eMl89cEs6UGc+MGd1WjpoWkokcE5eaXUpaiNNdkY/Rk8wXXs0TEhLLl5xd0w+c2o6W25LaVlEVXp7XU1LT30jTjpvIzFLQStDbF5fUFs+bGViX1lrIUElUiElIm19dU58PStqI2JQZCM1MWErTzc7cjVxVixebExBSDU5akV6KHRyRkZdcCFfTW9oW185YWo7YXQx'@;
put 'MStxJjtAIkNVSXdMPWRaLz4oXmAyL0E2cnplUnxxZmU5Jn5ScjZiSCRIaDNrOElxfnd9L21eRj0yJFZRQjRaP1pOOVE7UUwzLy5wK2xJREJBNDU8cXtIYXg9Ym0hJnJAdU5SNTs8ODNKYSZVJEg5SDlIX0NxcjFsVXwvcFgwfFh1I19aVCl8fSQhL304czxLd2xIWSg/PXoxVFoiLiRoWWBdS1U9'@;
put 'QEVlOW5JODU8fW0ke31nLHEpOEJAOyNbKHFzKE89MzdFWns5d3ROQXlpZVV2Wmo1JSkhdHBPd1RtNkluRC9rUU4xUFY5flNON3pkNzt3NFNgVz0iLyglKk0jPTBtL2Vtb2YrYWkxI2RkUUNvejZqQkNKPS5dbjo0dT57UDsvcD1UX3UmI25NZzdRTFtUIVJSYnBvIUw4dT0wOHczNlR2azg8ZXhe'@;
put 'fWtdSH45RVhVKmBqS0tCNmA0VVc9K2xqOSZeRF5sRTcmamQud0deYCo8XnEmcCEjLG9ZUi93VUxXOSs9MmlYMCtVQTYmdCJwYT05MF9DMz1uT0AxIyZkX3Jib1RCPHo+XSU4STckPWEhZ1FhRTJ9WUpuS1czT2tUVnMpT1cual5+QDxUWTpAKFtqQH1FdmA8MV5WRms/fmM/JWMkTz10XiQyfWFu'@;
put 'M2dFY2x6PHElUy5uUHBXc1I0cHZOXXxlZnQ6WGJaSntGPTNOJGdGeWIxTjJqc08oSV8yWk8manxyJGlGUDhAMmoqelRaQWglOyh6OigzK3FSUHpVfUpRaG9SNlZ7Il0jSUBDRlVeWix3bUpRUyZ9eGRjaTEyJStTS3hzKHVJTyg/PGxVOlkufSU4TzNAd2tCfHhIJG4rRC97aTI/S0o2TTVvITdV'@;
put 'dnw9MUJEQ2MoQ0QkSTloO3gofFZ9eipmV3J5cHQ4ajVONXJwTCRTe1ROWHpqOGs4WDlhJG53UEs4aDRzMSkoeiUpZW85TkZeI2JZKHY8UzU3bSw/fWhPZFMhSTw/ci8pSV5mPy9OWntBe1JJWF06dVFuUGRJY2EzY2J0PGRZO11Ydj9nYEZdZGcwPm5iOT5PPEs4aCp0Tz1jKjs7dCp0OX5yVDFT'@;
put 'JEolLCpSZCRzTFhRRFFDQ11BcDQpPypSZDlsT2RQPGBTKlRFSyI1UUNueiZqV0dFKmAoMV5tbEJgKjx3WyZ5JVooeH40WjlndGBZV2RtYWE5OEJUQG1PdWQ3RUxNRyh6WWowcns5UUI3OC9YXSE/bzVMWTRjSSV+TjM3RFA4M3lXKHkwdCo/OldoPHpJJjhDQCVqU1RCe2krNj5yeEc9ekRQOiJ2'@;
put 'aFZ+cXhren1hKSJhX0BubSxgeH0uM2t1NSEhX2F8Z3I1bTdueCF4N31PSDo7JihZZz9WSSh0RWVCMjUxZmMyM2ArdGh8a1Rack5xbzxlRC5JaDE2V1tSNUNzMmlUaWooSiNSU0NlUHY7Ry5OQnl0Q19TSjxwOjhfRjJpMzlqdEl+bj42Xld7VDRpaV5bbn0hUFY4NShRSTxaS0dpMGZsejZwOzNi'@;
put 'S1o/OWQsJX1PI313ano0VSJ8fnVbK1htfixQPStwckokYz5te2gscH13Pm16XnBbe0pQV357QHo0bStQYls+RDV1SW5WT0U8bCZ4QHtRLmwmfjVJZCgxNlp0SkBWZCgyfTtURkQxPzhUYTx+QWpoRD45MGImTzNQZVR0bD1JdkJoRTxgSVNucT8lfCltNEs9KTJ5cyIwPk9PX2I4T3Y9aF5PaCE+'@;
put 'X0lwXjUhTmUifCx8TUVqbnhpSCp8WSU2bF45eXB4cHhwfDc7LEsmNCojODV7KjdxJktkWUVBUVVFUzNXa00iOi84Mz1ZMn50Tz1mazBoO1RPUXRlI0JDJCZkaUs9SXZNR3dJc0pXIkgjW31LZm49bGg+IlE0XjQ+NE9jPFQ0RVlNaWY6Iy5JKDNWYjVhSndSS29tRn1DfG0lUiI8RTclMExwRjVF'@;
put 'd0J0a3JLWThzZWlIKiZkYWlYdUhCMil2MzE7OU1WeGRwOWo/bVIoZnJkSX5ZbCFCXjZSK2F6UDNdZlpdKHxaTiooVWxEUkI5OEFecHcrP1V8OFFhbj1LSEdIbXYsWS53MmYsVWleS05DKnhXfjN8dG9JJCMic0lFdEthIkNCNEBLWmJwam1RVEN9fD5dJCpSOH4kYDEmazt7LFBNYVlDQldeJncp'@;
put 'Yj91OHIoRy9sdS56S1dNJFM2U3xmOkNDMCspcntlcEAicDslK2kxKmk4aEZ4enJnY2hqVHtdfV1ZaDxLN2IvMlBiWFI1b3JgfilJfHA6a2gwQExzP0kyck1JOVFtP2U5dVtCRnVeRDokVSJwXU88JFRFfl1HUykxcVVyaH0pLmFocjFoZ3J9PEd2cVgqdWxJeFladis5OlswVDEkbiwmJXllZihq'@;
put 'JjNoO0VlcGYlZ2B8e3Jddj0ieDtefXhdLn18SUVmQU46OnlWXUhaZ2ZwQCw7U2trcE5seDUhdDs/Zj94NUh9fTxiOjpuKXA/KFVLcj9zRmtaMWZzKXJGdFU2IkNdVkYrL0tDTmJnQi9vRyEiVWg+dkkxbTojcF0hVjs1SC90YWJoKUJvVyNnVmJLam11ajJ4NEVOKCJAZ2FXYyhNbHloekZKS2F1'@;
put 'V0kzOHZwS0RbREZeMGIyUHE7Q30iMyVgRFp0OngzQUxQPzsoIjxAcCFRZCRddSgoe2tJZmEzIiMkVXNmY0xIQnt2eklWL1JpV3Jac0VoM1RaX3JwT2RZci5WZig7fnAzN1I7WFJQNykwZDtYOn08P15LKEhBYUlhclI5UEJ5PlhvY255VzRAJUYwMHZ1fTJhfT9tS05DTlA5PlE+PStVdUFjXmYv'@;
put 'STQqRjZ2WSlVdV5NKFU7PSw3LEVWZ254L21wRGMscHttRCYyUU4uLzk1XUliKW1jWCRRQitzeFpDIyF1ST9NPyJrIXZTOmBJRiFsaEJoRlVMT3xic1FfK15ObCNROkxFTmoiYDxdO2E4OWVrcDA1LCNIc1pLbnlaZm1NX0l7Z0g1cTlAb05hdSZzTnJHZntxfUR8XlYlTl05QkBLRD02RnUrP25P'@;
put 'e25CbEJEeDpkMERxIzt3eHxNQE07TVEpfVtTRCNyO2pjJDE1MmFCdUFQXkNiM2kmayw5VkpqTGlJKmB8STYzWGdPUW15UDhUOXNCMFAhTGVXPjRKIUlFdF87WjwkP0dlJS5Mez4hVUlCeU92JiUjandsIldPNH5WVDN7NCQlZCw6RGE1LG8laVpne3JWPSFIKFkkPU9RMXliPzJsKiQ1MEVEMTRC'@;
put 'Q3lZclZAc3ReIWwuMC4kVkoyLjdePTsrb35dWDJ5PEFjQUxmOHkmJEVeNVs5Y2hoYTxuclpDSS88RWpkT0JFZzNHbGguSG56cl4maGxYSSs2WjwmalBmL0VbdWNyYkUyM10hfGMkcDR3Zz9gVnt1fmdiRDppIksxWUpLN2doJnVPZSo3IjM3UExtPG9TIXh9dixSQjBWMW54TVpmT1hrJHd1UGtO'@;
put 'VWEvLGlxJXFnclVdS1d2PmFXT292ey8/Yzd6c3sqKUlZTk0/SE93UU9CYV5VaTl1Mlp+KzF0UXxiXndleFR5QWtrPEFRUWdYJWdnZitbXzhsKkh4QzhXMy4rXlZJRz9IQVJXUFUzLitLYWEpTClRSTFZPHV5dSVpcC5IYkcoV0VJYnY0KGt8Ok9QI2kvSXJ1YGlfZi4jKGxee0VuL0BgbkFpKHZ9'@;
put 'JFEwUWdedXIvSVp0ZWU6RkI6UCYsM11wUGt4SztjeVk/MlteS1kiKGJ5MEdpTnt9al8uKDh9RDB2MnRLMVgpODk4OCsrWjBvcEdqd3AyVzNQKDkmSW5LMllkNl9xeDFYOmBxSTVeb29RdF9FOENKekVpZWlGNjVdIy87WWdUVVM+fFt8XyRpK0lAMHNnTyZ6bH1IUWheUTMxUVpEa2ckNEcwSyZY'@;
put 'Oltga0o5OVgxdVssI0ZhOG9AUzxBRH0kSDZJMEBvWWE0bEluYXBHbmxZR25bWS9dMklhMDcxTSM/P2ghTjk0bk45JktqTnQ8QWsyMTUwNTkmOXhsKkB9ckxlXj5pY0RpXzRseyRNS0YrLHQsaDxHTWllMlApW1BVTjZZTmNGTVB1eF9gRCFGQ0M2JTQpUi56IkJtVXVTKT9ebDV+T2BvfXFHcTEl'@;
put 'JjM8QltfZkA9aDlbdSgqU3FgTkdOWV1LYSFwbztQazk7ITliMGkrcTgqOW52YS9UIyptYjBgOWJNNj8xUDl7cE48U0JgbXlLTXs/NTxocURKKFAzK1hlRjwrYXx4QSUqNEQ5NTVGJn04SzpKTEd1VlE8eGk7VlApW0t6R0ldSXU9cmUqND0jKXVJRURdUzVrOV9xMDgoNEVOYWp3Il0we2pIYWo4'@;
put 'VmZiaEE6InR4JG84VmY+WSYsaG9qaW5QbSt8JV5MQz8oQCk9X15mb3J8a2AzZ2EwazAhKlspdFUjUldRPUhsPnhlYHBgczVHXVJGTE9nIn0yOSg9RyEpOj4hfHRkKUM6LEhSPk0mJDJ3WGRFTFBzLHlsOUBzJiYvdFUzdnZXSk4kfGBQJExYWmFQUCNYRCwoR1hBUnw4M2JiTntwTGVONkZ7QWlS'@;
put 'UkE6byUrI01RfDgpaTdhYjh3dkd4JjA5dW1GVnF8S3U5dmxiQyNsfUh0PVImJi9INFAycDMqJHpHI2xzOy4kTTtMbmwwUSh0SUo5UWZHSV1Je3daazBmW1hhOn5IcnpObDdyNTRHfnlyXXJMV3ZYLHpsZmZOYHEpfV9DTzssWyVnfiVeO2FRUyglLDEjfHQwbHJ1dVhfRFpNaWV4MX5xWWkmPTt6'@;
put 'Mld+JG9RMl19eikrZ09GMFFpcXZfI1BoL3Y4MVppbjIxXylTJjhqWHBhdXl0Xig9ZCxHMGo7MCtJSnlRNkRCUUJOQFZteD5kK0pwSVZeTlJ3XyYrLFcsVDRmdCM8OT1TbTcqe20uPCx7VFNfbEJqNW14STM0OztdS1NXSSpqVGVCa0FVVHEyZmJafSpYUDcpTHssbkVKOGQvTGNkZ1dkazh7cDlB'@;
put 'WS4rUGI6aC9iXUYpUG1bUyNPbCsjOjw1Ki5UTT99KXtwQmAiVjZtVls1QlVYfF4rOEJvdyR8SVdCSSs2KkIvLy50OlAzXXp0Q3pNU29JZCU5WEA9cFd1LzQxPV5iKjxBSHQuQiNIV1RgODo7QjVmSF0kT0hsdjgzejVWNGEsPDVQSG18I0M9WjVuUTxhVks6V2lQTWRiPCw8aUVGe3YhenNyLj0z'@;
put 'SyFlMXppP0coUVAzZCg5VEldQm15Xnd8WnB3WzVNfiN7I2RrM0o9VFImfE4qaUZnImBxa3t6T2xlY2VyQnIuUip4UiMyamRjTHN4U2lxMzZIaWZ5JGVLWypzc3NYcDk8Mz9yVHVkRFsqd3xHJTZBLHtbQFZbdmZyJFc5eFJUKiN9YHZdNmE4VzIpUG99NzVyT2FYcT9ld0k2IUkkTSYvaS4seCRB'@;
put 'ZURfLjtxXzplKUNsTD8sXjhuIXwwc3Vxe2BKKmEpb1BMcCZlKnk/W0hYXypuSVBCVn0xMUtAO2slQW51bDw5dXN3czsoSmYhSWREO0pkRGJGJVFvYS9EdiR5P1c8MHAweigpMEZdTFg5XXc5X1cpY1dnSzU7fGw4fWk4UlR1aTA+UT1pP0loan4kcGVfXmp8bUIqc2oqSl5pcihWVkdKeTBkXyNw'@;
put 'YEcmajhwSVU/MElVXUwlUkNlTWUoNWNQW0dpMyFxeHYoeWQ/UllxRXk5P2MiKUZSd2ArL3FOLDZkVmlle045YkozK3xMfFgmW3hsUm92aHc2YCsvIVpHVGIpLCg2P2J4UG1bKll6Qnk+S3x6X3peey5uWnhgKVZVfSsvTD5hKFVOa1p4V3hJXklgVl1pJCo0dGo6YmFyezJUMDw1LH06YmFbdnU7'@;
put 'MUszLnY7UFlaMS58a2hLSGVMbCVJMTpJczR1REswcz4hT0N6TUYsLyhZcX07JltGaG9BIXxCSCJfT1NlR01dQyFFeSF0ZVZMZjcsZk90cGNHSDxXK30oeD9USl8pMSw3T3RQaEw7ND9oVDghODE1VDhHekVgSWhbdHNFKEt+OFt0QW8uYVFEKkJWNSZmbWZiU3BKeHooRm10XWtQK3s+UWMlRkMi'@;
put 'aUw7YFpGU2l1bn1MSVRSQj9XcSMlPzNPakQhKCNZS0AyW287Z2Vjdz4+QUQ8dGBRXXE/I2N5eHEkNVpCa1hQel1rT1pmQTo0KkswQzJWXmRULEc4M0tuaz8mNCxBP3tmLkRUP35xPlNQZ2U4bnFzd2pYY2YuK15xPyMxSFdHZm8sR3R0KjQmZkp0ckxdanRCb3VfTDVbMEhJUj8yMWt2RGEyQW1p'@;
put 'eVBGS1NNRXdSMWtCUXhadCtPO0lHJUlOdVI7MjhzZX44OUIrKE1IMDMyL1R8cFZgZmoicVRpQ2VYRURUOWl5IjBoTmR1LyhzSUouO1t6cXE9WigyO1RWV3U9PlRxeUs2Q0F3XWs4amNMeE5wWloyS0NkQjovJkE6WGYse2RqLCJgQTQzS28/KEslSUR1NXpsZzpaNklFSCQzOXRzNnBbZHFoUUZO'@;
put 'OiRmckZYYGg2LENaNmo7SzZpdiVTJmIxZnIuWWgqbFMlUGpefEM8QHxoNHZ1ZW5UakQqSWNwaUBZUXE6cE9tRihvR0Yke0hKWjphan1URXJtODNYUjYpMEMqIjJJeSQuYDkiMjczTXcsY09DfDt7WyZQeXpCal5aQlEvcmZQfkY5K09gJFE8S1RaOjIxVDtVU1ZeKFRsaFJaPls8K0hzZDlWaFIy'@;
put 'KU49Q0RNYW1RVzE5U2xvRElmVmZOVVY1UiNxPTBDXmFGclNqcThZPk0hKGFpdnFROCN8QGEiSVJZLkM+NGZzaXcmW3FWdDFzJSY9dXM5YG8kJS9rYCNPWTNwJihwJiVMcTJsa0toO3d3Q18oNE40LG9NYXNmWDVfO3loWiU3L3JwZW42R1p4XkNifSQ0S141dCM6PzJzbyNudipoLENnNFZ8R1Zg'@;
put 'YzZ7RnBAMCs/MH1ZaW9dMUd5QHBCWj81cik5QlptXk5pYCFOQTpETzRQY0NTNz1DcnYpcnYyUGYyRjk5Onp5MSZpcUhHVl1UdGZ8UUQ1PXI4fWBAdHM6blpXMn17NVZ+MTA9Knczan5RSj0yOFVBNSY5MGRbey92Q3Y8Sm1yREVuPSJCRG5gdyFbQWBqfnQzJHg3MFgyXj9BWGFkcD4iNiUzOUBN'@;
put 'P0A9PG5QVSt9QT9eNSgsbiEoZHU6dXFeaGBeez9CKVJSKTg1U2FNQFo7P1c8OyghcTA8SHVSfVdSMkQhcyFVaT9AMXgmJm5DV24yen5zZHF0T2pLJVhleSEpXW1JMkhLJk0+O1ZgamBAfG5+aGpuZ3A4VSt8LGNdZ0ZfKFJSeU48bnUqd0A7bTUpbTZmYUhbeXBwO3pKXyRPYC5ifkFUfEZwQCkz'@;
put 'Ij8qalJjPDxBaDFQX2dLJGZ5JHxsUX1ITHojOyQmKVJmSXJLMUV0ZWwwJn5wLkc+RkJFMyIqdk1RIV03Zn1Tem9wNSU+YkU9NT05Rkt0QCxnY3VZM3s3fXlzP3I5fUhkSnxVVS5HfFFWaXtDNT5eb1t9U2tyRTVWZDlAKmBfak9oUHFxUyxqaCNIT0BEZVBTV2xCJjIqaD1hOWpPaTgoX3lzMGgu'@;
put 'djcwVTZvcjxbPmpyUCJKQHhyS3lwfjA5Pl5ASX5oPUZ8YzVWQ3tAbDphNnJTK2AlNkBfcG98SUB3Vl9YMkBxLE57XywmXzooMTB+LDsiej00LjtWQ0xadHtUejJ0Xl0sc0R2Uzk8PV5AfG5TfHJ1RCZbT0phQEBHNXFmVWJDTnE/US5pT0YwcXpabG5aUk9AfVpONVdEeS8hfCRRUDNCWVd7U2JK'@;
put 'RWg4dkhpQGBFXjBaYDpTRzo7KF9tbjtEP25afntqIX5sNzNGQEY+WSJKbmQ4U0FAP2hfP3h0XWx9QS8oWD9gOlclSTpMcjRnZlZEYjtkZyhEa1dKOkU+OTk+Sm03SUU5JEUqfShRZ1c+anF+Pl5nOzV+MiwjXigsUzM4IUUrP19pS1t8SXZkRD1vQSV6YjA5Im5xWHsqKlVtdDVlWX0iZnAxLixG'@;
put 'fGBWXj9bZlFFIWoiODZPcSUyMHI5Jjs/XVVdVX0zZik7P11ucCYlPmdvOV9sbzlnflQsTlcjLjI9XUgjTT8wJVl7WVZeUGA4IV8uS1l7WXRMcEBAMDAwOkxoekRiRHdGYFlrM3hwTk9YdUAlUjMrVWY0K155XXFwPncuQlZkZn0qXXZ3RTZHTVNKd3cuWFR+LjteVXZQYD9WOXtlWzkzRThuXihO'@;
put 'RFp8XnMlJj8pUnU7aWFNIilyL0gjM2ROJDh5RjosS24hbEt1cikiLCpNK289LjN9ZiwiKFJiRDteVngmZiUuZUs8cEEvfmVvbXk6bDlvZyxuandteV1mLD5+KHZjRSpLPipbUyVQbC9ZZ1l6R25tTkpuaj50MWh7bl97OHVsTjlDImBfYFB1cWtfZyZJcHVxWDg1bmk+VH15JW9UfCFWQmFEdVV8'@;
put 'fiF+P3s6LHJ7fWlUQiEyTTFoSnhTM1ZhZCNzIkw1PnR8ZjY6MUduZDlPSkVKYH0iMW0/LmAmIU0+fVJKdn09NFdXTjVRJkBeeXYmVHZfcnt1QSxKbyNnYFphQX5lVnNqU0MrKjVDUV17PS4sckolcWsyLj0pST9TaSYyMFFde11pc2NvdUYpWz14WCUxdUh6Tl5zJVVjYnlwLHNgWVEpLzNKXm4z'@;
put 'ZjdMPislVzNDUkhQRzA2L01gYj8zUjAvdkwmSSQ8IjQ2LzN4JHpsI1c5MGM8S1EzVjViaS49bXtTNTYvbG0jeyp0JHtSSi8+KnI+IV1pMnUpWkxuYn5BSERhPXJsUztoUjRVYzlqWGF2Om0jJTwsaypGKENwWG8mNFBHQ3YhNkRDI0F2cjRNN14sRDxaO2x4VCplW2xEPHU+cW5jZVlmbDcqJXRb'@;
put 'UTczRk9TSVU1Xl87Q1o+Pjo5dG1zT1M/JkxkJkBzcDlyTmFQRVRtb3l3RWRkK1tzU3lTPGchdl0oLCUiSlR8KishUExjN1pmVmt4Mzs1IzVxTW9TYyhaUjFaJSY8TShfLjdpODArPCFQLHshO1A2QzpBNnlnK0srSk5NbEhVP1pJXi92TSpkSWE5UCpPUXs2OlA8P0tQMWhbWVh0UFp6M2Mwc1F7'@;
put 'bixbNiNRLn5YeWdFRWYuPEs8ZEE9TVJ0Qlh9WE9HZGk0KHFWTXV5enk+dkBRIk1EeDdxWGNKJHpgNVVkaUdlR0FBeDJBQU1Pe3kmaWJDWXg1SylXUTREdF9DSDlZaEdiUjBCKy9GblJBTWdBQUFBQUFBbkIkQUNmYVJ+XUdoV2subDghM0dASX5vPEJqZU9PSFQ6VUs7eHhrPnBrKkBRa2A/enw7'@;
put 'ZVZ8c1s+LnREP2Exdit9KWxHNW8heGQmeUpbc1IlKnh3Ojt8ZllUUVM1JTpFeG1+P2YpP2w4PWIzfkNMNFZJUn45M3ZJNncuVzgxVXZZYHY1V2Z0djJacyUhKD0/OkgoPmlNJWozdG8mL0FCU3RzdS9UWSFDVSV9N3tQaDg9eiV+RlJtVS42JjA3U2x6NXNERD5kKU1nLDQ0aChzaSJOcmRSfGxu'@;
put 'cyFec3wyfGZwNDxAWyxRXixRV3YyNCRlR3VpJVpbaltPeUZWWClSLnZQY2ApPWkhbDA+NiNzKV86WzYiSlJ0YzVQdFNdLjtCTy9kV29KKj1VRiZjTDFzPFU4W3JMW3NPPk5nR1ZrVzpOODZlWkc6UU1md0xdY0tKNWsiKF0hWnJ7XyJDamRBQl9sOiEsbCswQUdUI1IxcE4hXzJOaDVwe3FiWl5+'@;
put 'KmolNF96REJJaHg5PUVFT1JkNnVtLjZ+TCp8bHxwRCNdalRXS05xSkIqW2p+QW47RklNSWQ6Lmc2UUlOY2VTbX1oej1acWAsTXR5enZDUk0uNEMyeiVKQVZBKSFdK18vZmpQaXk1cEQsJiNraTooXlFZVF9FRkNUV1dhZVBnOHA5L01DZ1N2Ujd9PHRBSXs4Jjg0MWs+dSxbTDh+PlQlLmZZLH5x'@;
put 'ZFI2O192cj9OeyVgQ0Q4QEM2S31yVGZiSWt1SyU0SjxbeCo9MXo1UG5neWJIZGY3YGpuc25DTTpmYjNmSWoodipOaUZAMTtsLGtGWig5SEQ+M1Z6PyEkTlMuaDRQR18xQUVUOFFTeXNWVV93X0lBOjEzVzZ6eXZIZXpURm9LJGltY1BVOkBMMVF1Lz9EMFRuU1svR1ZwIz9IWmlgdVRFdTcoaVY9'@;
put 'ej1+QFljQllOPVZvdENaKTNhM28mLkA4WUpZIT0mPklJWVUyPDlLZUpOZThbXmcxIzx9K2wkW2Y7PlBpYURAfkdae1phTnl3dF9UQ0VhYFVWUHMlO3dkWFZwPHFnbSlVfWloMmMqOmhpMVg0UStPRDtsJjxhJTokVyU0WXc7dUA9OX55YTBZJjtOLGIpfHhxK3pALGpIIX19I1U5NyE4XXdydzUj'@;
put 'U2d8WitQVnJ1REVYV15yUXMheiY3JGhOdWIjTS81MnEoZis4fjRmZWlta2FsMGxbYDEpVzFmSEM+UnxHbEdgU3l4MnwjPXdKWlladHRCS3ZYR1BKISNnT2k6LDIjKm5YR3IyPkptLG0kIkhsK3Fsby80Z0Jmdn5iO3pYMj5PPGJLRSFae2NpUzk9Znp+PEdieXQ1VTFpP1tiYVRJIik6SEJYYk13'@;
put 'aDN0VSxZJnA1ZSNiLixYN2dyJmszQnVycTUoY1tzKylbTUw/cUdOImZoSjUxMG5Bd0MuWFtveDVCVW1uN0piQmg0X3oyWmk/Q1MlRVk1NU1LW3Y5WS46dXUheTJNV3MxQl4vdHpKd1IyeGw2fUd1X0VGRlFRPz58RDR2VGt6elh+RzlaSl1OaXErK1QzNnFab0ZkdTx5LHxzeWhfQyR4JV1xKiNf'@;
put 'JHp3M1ohezhvZXNwJUBxZXZmcSIwU1lbXldTTTtLXU9zemVaNCNUW3pYOklgcDJQQmJkY1d6KDNuRF1xTFdLNmEwa2AwNSN9SnNAT35bWmJwL25FJVhleWBAbkk7aHBlLldaaSpuR1dKInYiKWI6aWl9RTAwZnx6OngqJFhtdS5bd3JpUFckO0o+QkRPTTs7NixIXmJoezlYQj1MOyFNcWZJYUgj'@;
put 'YVNhW0BLYkwwTCxtfDYsOmdvS0w1PVV1VylCW1l3RHd1K0R3YGRgU0luN0tNZFc5Q24lIWxoRn03SzRWQFMlSkJoUS9MfV4sOGZAMVYma3k7dj5EYUdXYm89VFl8ejtRdmNQO3QwRn4/V2M0XTYkM1JRJmh1QWEkQkg+fGFCR0ZANExjJXB9SWs2dmU/W0duNHdgLiwmaVBhVFFpVFs2I3UjfS4r'@;
put 'T21XOUgmPG12S1RkPz1CPjcrYWYse1MuKmZ7eHZiW288elAmdU9kWzBZMEFlI097M1NhYXFuQUNfLDRXKFs2dX1WQURISiMyZkdNYVM7TUZWKWkocDYmQzx3THdNQnIvVHdFSCUuOkNCbml3QDxkNEdRKSQ4UigpTWtSMlpIbGIldHZ6c3QxdWtyPzcxTGBHIjtxXnxUbzZKazM+UF0qdS9tcEMs'@;
put 'WlpyWiU9RChkck5mVzFFOUkvSTA9VHtpWE1JOW1fVHZsU3dtNmUuYCxpMyJAUT9ddjdQUC9VUFlrPUNQIU9AUnsiRnRmKXxeKiZkIXpqX3BbZCNgPSN3fmRvJlI6bDF+PTVWXmw/ZylyfmU6OmJaLzlqXUhvVyFRKV5ENn1EVCRxMz8yfmsicE11cGVHajs4ZHx8bWNhYF5vI0Qsemh4PXpzfDhC'@;
put 'fWpqTXc7IigxfjZ5UEJbcCEreXk8OjJxcjh+QyJlTFRLZDxBIVNWQDhVMmw7PV08KjUvJUZCWihLbEVfTyNnZGJgQ1Q0cj9eOEtAVUYhTG8ueSUvYz94U0o+Vmp7aVl4P1clKykuMEM8WD5BYGtPa3Y2RDN8Pmo0WTJEJWc3ejN0WzppPTd7TmtwM2kmK2wpW3JkV2JEbDRzdnJgYmdRXkpmVkRU'@;
put 'Z0dydyprc1JEWjguOyNnTHo+ayFFcV4vPHFFU3BXKEpVSFQicWRSZm90P35HRzR7aGtuO0kjdUVdZF9kfWd5LjRAdnh2cWNhOV90UCkkLHE9I3Z5X3QwUmRzODRsNV1QUFtNJGFxIl47Xjc5Kk1Ze1FoP09DNllDX0VvI0cheTUqJnF2PFRBMz9nLkM9eGFZcVZTelB+YzdGa0pSLmQpPSMrRz0r'@;
put 'MFozN2M7cmZFYlsoKzZ+Ml1jWjs4eSQ4a0YySzxsdzY6b0VUS0Y3fShJdVB1WGo0IlBifiFNYjdDTnR+KkgkWlV2cHQzdF5KLl1IQipETj1sIWIhMVRXNnl+ZGV5eHRNYTFebz5qRz4kKkJee3l0Z0FDIXdVdkJJek1vdGIpfSMyNjh7blRaVkZqL0hHJDZ6SCF+KTs/SzcwKzVPdFFBWFZUVSw1'@;
put 'aVVULy8vJnR0IkR7ej4uU3pES0w/Ol9tfnp8SV94LjJ3RkNsYTx9d1FFTylGI20kcypqZnB7KkIqNyVvTy8mWzVQeEFteGJCa2gjcTJzSD5+RUd7WVdhRkk1OyloezRdQHxKclAoXlJxSyFqQHxjdW96bGQ5Kjw7N1VkUUUheE1wbFVrc0NdeXh7Y29nSTx5c0haMCw9PHQ3WXE1TT8iMW9ZLnhh'@;
put 'dUtfdXB5UDxlMiJ6Pk90bXw4anZ9dW1KUTN0bl05eyo0d0JYNShqcm5CeEM+aDNNJGsweUM/OWkiL2NlM2hVWFtaQ04qcG4jK2I/U3teUEYreiJKZEVCRG50I2lCZCg7dkMmXlQ2TTFOYyVbaSRBbTRqfixaUkM4bzpURi8xS1VNJTQzVipraFJ4PUBjfEY7L3BTdEY0PXhpVVRwfTpxZV0iakBq'@;
put 'fkdPaUVeW1Y4Xl45YW8oPXIqaEV8cy85fHpXdy9gaGYqSjdPb1hXNTVgdi93UThwXy5zczxdMmEuQHdRMDpMJXllTTRNaSVvbHhONWpGR35uNFNuZUpHfFQxc2RITz9dR1pkU2tWOWdxLDJPdiI3RU8zPk9CKyoyelkzXUNXZlFZS0BCN2EufVNuW2wyZCM/O1A3N0BweFZnOSQlLFZhdT1uaHxs'@;
put 'OXhlRm88RmRgQmZuOENoTmBxUVo6ezk7UWV8a0V9dD8iQXohUEBDUz0qciFiNDhibkhGajVvdV10emRVZUxFez12ZVsoelZtVnN7bTBQbDRJeVB7IlR7JU52OV8rOypZYGRqOGEyNyswSFh4b0xDO3FIfisyOTM2QWcsQmRGckwuU3E1YHdaS2FDISpdS2syOzRMPytYdHokRktJaW1vQCpZJEZT'@;
put 'cjJZa1hrYi9oLm9WN21vSWI2WWZeMlZeeFR+d1UyOjh7Y0siMDQkZ203ZH4hRiwlPTdCRyFNSX1WZ200LFZ4eCssOXJ8Mk8pWjtgazsmJkMqalFLPyssK2dGcXAuXzQwVFdgYlhAKypzUkkrMixVPzR8Sj0rQFZrcF0wJFNbYS8+dGB6I145dCFvbl1wUkVQekRPZzowejxlIS5nLDhMbHNgZm87'@;
put 'T2p+Jm1iUEFic0xzb0ZhTGdFRHU7JDdRbX5LUFV1QUxWT0RbR1E3VE5CSUhpaThMImdCL0tWIlpJbz13O3I/Ujhhaj5fRzxeQGErTHs2Mlo0KCoueFNeJkdWT3kmREM6eCh5KVQmQlJHcD1uRHBEPUR+PkZpekNSKiU4WEMmZ1NQKm85R1N1endjJj1HaTJiI2YySFNxKmgwdT9WdzF1SitBKGA/'@;
put 'biRdY28wK2RtNHo9fDgrU1kwUiQ4Lm19cSw8cDN0WWZreUxAbktva0pEaVlaSyIyR10oNSVOY0JjeyhmVSphQ107d3AyRiN+dX48LlpedjspTFA/V1UqPHR8TFI5JFVYalpWbyl3bWZIL1JzeiRfPnk8WEZTUzE9b1peN0JBJHlfKDRqdkdeWltqTGR+Ty81OD42KFFHQyExKkx+WFZHN217MjE8'@;
put 'YlFQczRtM2hWP095TVNgfDhSOjEvKj81QGtiVlAhWyJBZyI/Wj9hZWNxW0QqL28/O0t8VD5hN0UxaTdMNGVbJlU1LEZUJnAiNj5oTCJdblJ6OiF1P2ltUns2cihAIl5WRUtEJG8scEdsSFtTWFVSckd+M0lGQmhIfUkpZ0Q8TXBGVmcpYzYkcS4vOWQ4JT9wKjZKXihgdj9VaFRmJFdaRn5sbVRi'@;
put 'P1dlSXhzJGpZQWZKOj5QdWNSIllFWkR+KVheelt4ZiV6QUlpaVp9I1tTdSNSXntSNVZpYj8xd3Axe3ZbbXZmIz1AYl1dcztzYntaJTNGQ1tGIShGL2J4bVtRUDxJR0opTFtRbHA5bWdnIXVkfF1tQG1oeyxNY2kiVHdpYUR7K0xoUEgoaHFdYUpycXclYT94Rm1XSkdSdXRPYlsoRmkmOzRDZiwq'@;
put 'MmEjMlFTPDFXYl5EbiNXZmRtJnk4Nk1FL1lgNSxqXlh9eDlCRDFPTTJbQGQ4KlZNVk1rK3dsXigjQ0l1cSxINTFRQGRtL1FpNH01I1Y6PDdRMXQvS0s/JDJFJlBWS0VGPFlAMWEvSGMySll9S3V1NmBkLElaY2F4QV1IVWYqPEZiJHZ4SDxaRlJ2XnB7emxqPXZkUSNvbEk9Unk9MmsmOnI4XkJz'@;
put 'UyZkQmlSZ0JpZH1hJVhaO1NnS1Moa3dYUS9eak1rPjB0Qi5jX2lZWGl1Zm0wOWkrfks6JnV8UWMkbVMoOUclPyh7MzpIWT15I0N9eXwxJCE+X0NJKiE1IVd6WHQ/ZUhseihqL0lMZzt4P2BRT3BUW3lWVzwlZ2E4RCNsX2lmOGhgdGEreDouV0VhX1ZBS303RU4kV3hbbmFsX1tBQDwmVlpXUzgk'@;
put 'X2x0enw1cUduflNqfThaR2QmQlpdX2ZlaDJOMChVcEplKU1zI0VAZGlzcm1dPEB5cGBOaUVYZ3VAXnN8L284QWllL2NsVj4zdU98b1Q5NSRib2Ipenp9R0M2e2R0bzx8cDteMURjJHMya3Ykd2ltfjVgVUApN01nMl5lVURSLk5JOnxXL1M8c2YqSmhLdjAwaE5oa0NYU0BdSnwjZjFSUHROZkc8'@;
put 'OGZ6azAiKj0sWE9xeHEqTko1NEkvYj0xOClwa1BZLGh9cmVdKURwYk94KGxkI1BtSUR+PE1lQnZIQjNCfTQrbToueGRIQlNRQkpjXnsvdEZObGA/eCY0clQxV2MrZGIid2xlQFZKTz1nKV8kZnN1N1JSZ2xfY35+KWomIWUoUXhnPWFdbElQUTt5JH1uKTYhVyI4KFViWHZsSU0+RmpoKnNkQzFl'@;
put 'cCV2dkpoUDBDe0V6JDtyRytzcXE9L2R4XWxlRVYzJkM4YjtFbiIrd2o2TDBCTnc+RSJKNTpRRUFMMCVAbHtMLn43SztXTmopPzFdd11rWWNvKysjNWRjVzYrYncvdXtAQDBXZnchL2VwOU1rKDBudXxiI09uemM5ITFTQDg/NSxhSj1aZVclcU19KXJRMntmOjxsa3RwbGZvQyk+YnJyMG9kNVdE'@;
put 'VG1ldGhWYnlPZHU7OHhzdixYZ2NSeTBuZmlHQnhpbUJDJiJCcF9sWmVSXk8xV3xtV0JiRVVadlN6U0lLXWhTS2IxQDpJdExmJH1lSTM0JVRTP1Y2elNRLF9gVC8jT30/MldbLFE3OCIxOF4wJmMlJWpTLC49bFgxPDlnNjExa3hKb1RiQ2lEZWZDUCVTTj89SCFbMHxUYnkpbWBDPktVPWJLcndO'@;
put 'Q245PVpYeT9mJiRfeUAlJDthUz48VG5XNXVjRVZNe2c7SGNhLDVMNVVqZHtoYSJFLnlHci9GR2NHZlZIXW0ydCZBO1lnQHp6JmVNKlZsIi8hNTpbQkQkUUtwN0hxNjExNkUjaDFKJXMzQEFnb25GIVFtV3BwT0o8aXg9d3RAPERdR29OJSxnOjNxcThnZDw5bVs6LkReRi5tdElqLi5SJVs2fFpM'@;
put 'KX50IihIelh+WnlAMSQ8XVh8WGBVVEVWMSwhPF9Kaz1JY3c2ZG1nc0csa280RipUImcmKT5lNiVNaHBuISZ3TFNBfWspTWpXYGo1X25fUVlsRyEqdVRDRjVtPjhFaShaO3ssNnI5ajlqd2paTUkpcS9+IypSL2ZmZE8+UFdsQFhKfG45JH1sRjA6NmE3SHlJcztqZncsdGRweXRMRE17Mz1KPysm'@;
put 'bFg3W1d6Y3B1c05JeShrez19On5kMylqcmJPe0huaD8kZFQkakwjcHFYZCEhTmwvKm5BY1t9XyphV15qfGUvQmBPbD1JY1c/Mmp+bEQ1X3Zncyg/TGJvMTBZV2t4Y0p0XzxbQHpJWUhlIUsqZ09JLlIhYV5uWV5JQlVwMTxCSCRJPE1rbGBIRzdjYjNAPjlPN3VQKEg2a2Y3MXZJfHJnVEVlQjJ7'@;
put 'amxkM3ErP28oLG0yVEsuXX5dQ21PT2M8OT4mLzA/aF47JDhndCI5azBRMF5OP3lhP0JDTU4oL01dOm19KD59ZmVlUVV0YDJYQCNzaz9KOk1iZHU7IXBmKyY6KSVTel01MjdxZE9vc1gycC4yO1dJOVBkfDhrWixORCtIVlYsc2U+OFo1akYueyZbcis/KkB8PVQ5dHpkNSpaVGNOWWxvVjZtb05h'@;
put 'NGZkO0JHPiMscSJzVj1QIkhTOXBUP0ExJGZ8RCRsfH1+VS40KGdbP1VjZUFYW1JkYnZXKy9gX05uQ0BUVS97ZTJ3XV5LdXtAcy5BV191ZnpdcEQuX1JBOm4mSnEiOFEpbDdgZVRmMUMsUyJFby9hMHNMUi8xNiwyRU53cl0pMGpNNE50IkBHKyR8IThqW2BPZ2k/d1tCO202JkFpXToyfXAlbmpO'@;
put 'WV52ejp0T29LKFdzN1JOTFpwWmg5PHYvb059Ry4+WFFLbWlxbj1Uens1TVQpZH5rSWVtZG1LcGA8d3E3IzlRJkVEbiRgPVoqWV8kKktFPFN2YlZoIyh1RjZpdipnSVFQN35YN0EvUmA1Y3wuMWtMJF8qL3dkOTBEeiJ6WDB9S1VrOSFfbjwqTWg1PHdSZFUje1MlSGxBPiF+d0RDTXI3a09yeWYy'@;
put 'V3RybjQ3XWJ0PVJpWklpW1h5KmpTP3ptI1dGSyx6I0o7MH5+Wm1JUWhiSjFPYGJVOig2RyVtdCQqNiwrVnd5YEEjW3doVVJLMl9gOV4rSHQ+aVV5Nk8qeGNqTGc6KSpeZFR1MURyKHl7clh8OH01JFVtQS5ifmtmdjZgYjtXcTZDaHY+Z1hzLixUWSFzPUBKcXBZWiVfJDN2UH5ORj5SS3l4UFtY'@;
put 'QXlnZEdpQmZFPTp+ekBMfHNfODIkJmNOYDlKOmh8bkNnR0Z+PD8rSSxWZVJTfGApMmJERm8qWXc2SCIiZXlyTmxWUUlZTyhFenAvYjFdSU1NVE1NQyR6c1B1bHN9YDpvPj4/JGoiOWAleGQjdSVRNSpQTCN8aW5NYktraWk5S2EyW14qSV8xKF1Zejg4Vm1zIUM+RUY8Yk4pWl5bb2tRcSx9dTJq'@;
put 'TXJjVCVtc0YiZ3Q3NFB9fTJpR21hL21CKWNFM1BAKWYhOF8hZlZvTnV1cHI6WW02WFlMPjh4Wnp2PFQyUDQ/ZHV8fmM2QkZwKmYpUl9YUmBiRkcic0R1aDxmczIzfEQsbzoqT2xORnMwV2YuUl1mQDxpUiQ4ejVlWGVrYylAa1g6bUBXalF5T1kkSyNBMip0MjJMdVBaUXg9ejxjMXclKjJsJHou'@;
put 'diUsUylrKHxmRUshTGIrS2U2TGZ7VXErVDw1PSNKezBvOz1APCphQHAuNE1PSUlJOFIzOUxkNUhsOlo9TUMlRj0yMyFROys2IkVPUD9wdVVsRUhhSVZQT25LZXdvMGdvRCo8VVppKHNuV1cxMHNTfSxMLitTVGlQSnVCLHkrVmZAYXJLJk1HT0JrIS5JO0JCMnt3ZmRjbHhWPDBMT1tgKnE1Q0N1'@;
put 'Lyo5cCRJMlt1UiFGWS47PTY1YkRBMi47NzYqWFUuYVQiVF9fc1REfitneTZzY0RkSEEqe1FmdEFIRClsMmFOO3M4cmZSJUlhV3V4YF4yPUxFP2oueFdpQCJ5XkVddk04RyosTiRuNGVLckU/T0ZLRmtTR0FVSXZ+K1VGeCsyVDM8QmpIJWIyVT9BVGxaYVJEZnxaIXYxdmhvTmJHYlVUKU5LV1lN'@;
put 'RGswazU/amttLE8oa2F0QXh2MkJYa2chSD1IeHlOI20vPXBFQn0/SWM0e0ZATVhDcVkwYHtvQy8zRXxwJW4lYUBjUyxJJHMyTXpxU0d9WThFKkhjVnk6NUsvVHhGL3Q2KXpeJF03YEdifXNKWjAoaCtbVUpSQ0klVl4qI19BRCgiXUJ9WjZ0QDoyTW0iUlZMRUwuXXNlbDBBZDJQfF9uXUFMVyp6'@;
put 'QDRFQih+fHpgKjsyRHQuRHl2KnNPWmE5VGhFNVF9R1dwVD43fVtIa0M/amQ0en5nP2p2TSo/Z3ZHWjxSfHkuMy5CLE5hMXI/NTtWL1FyUXQjKUFfRGR8PnxuYFl3VVYmX1NMJGR4TTkzdUQ7OSNCb19RW3MjPyU3VSNFU30wbk5dQlhFVDJrPHY4Y3RGNkIwKX03RGpMXzN+MitDc2B1ISkjUyx4'@;
put 'fVtxPy5oYGlCR3U3c2JJdGM9U2pFYHo/VjghI1lUe1QsPEMuTCMyNTc4YF1WK1tvKy9AfGNtekllKl5MOUtiSy9UMHIzfDpLcXUrSVhZP0cwTGZKYGB7K2tUWW47QVQwb3hHMihDKjokNylJeXp5RDc1UTdDUitAOlEmaTtpRSRgNkIyelgsW1J1QSlsWi9QcGtVVSYjKk0zfiR8enxvZSpdQkRK'@;
put 'WDxmUyIhP2Asa0NGI3orOGd2WUx8SjgqYVVVdmt6eiNvPEtSQ1ZBSFk6XT87MyJLW1ZyQzdFNmJhfnYqZC8mIVN8OmdGW1FlZDYvS35jRVBCU2MqeHsoeGxnaiZSN0BXNzhpIUZ4S2YvNjFxTnlYS05CKj9WNGFVZjF6WXYoM041UGB3ZCEsWnNhYyNRVCh+QzopJiIrOVNnNkBZJHhqR3RWbllT'@;
put 'RVB7e3BLL0tjMUg9Ljcmb1IvbDhqNVdlSzROMXwvfnY0STN9bUc0Tjp8P1NuVE9PaTBUZ1duL30qKktzdTo9M0QjPlJdbkYmTkwxM2JwTU8hWkU3aXBDZGFmInowb1s1X2F6PUZ5ZFI2Uzl+LGgkbEJWISx4JXczRDt1JDY4dnsjdWIiIWI4Znw3cCNldjNmVTQlbEdmWHZXU2d3diFZeGA8UEll'@;
put 'cCQiclBfL1g6Yjl+LHw4RSYoJmhbW2VHUj4hfDt+aT9AMipMXmE2SyRpfCNyTXhHVHxbPm5IXSltb0pWQiFZTkl5Zn1fRkxNP1VPdSR0K2smc0JuQWZ7ZnttYmU4Ul1uKj4pKWFHKF59c1VYdlR6IWsra1Vkej5kW3R+b1Z3V1ZdTFFxOGUpdnVXPno1Znt9WXhlRDk/IzwwMnduQzplTTBIPXoi'@;
put 'X0cza0dORTpXWGYpNVRGOXh1OnRZN2YlN3lhKyxWb0t9R2hfdGZPcGBEXXRHIVhuSmhqeTQyY3I9OHAlMUlYdX5yTFBWOz9zbTBeZnh6SXlvRXRiR2d6a2kvfHxRWDg2Wmg1YTVDa0xUUVBXVD56O2laKi5UQlgpUkl2I29lW2p8fltSKEdgT0pSYWdfOkskN0xjQWQwXjozMypjPkJTeTM6bzA3'@;
put 'c0A4RC8qLlcvLi4kL006VSM5JnhLRUA4VCFFMzVYVkklPGFEO0pAJixVbnBtTDtGIlNlYS5xYFIwLkFJWSZgSkJPKSZ1Y0N9ITV4JXBDO0t4aiglXXYzVnAlPCo7ZHFHc2w8dXJ2Ikh0UUZUcSlgZDZLSitfKW89PXs0OjZLSlIvXnU5a3ExU31nJEE7bmV4IkE4dSRvXlo1RiZOfnYqblU8aCpY'@;
put 'aVQ1YUowaEFWUjFXSHZWdzlHfkUjfTpfdWVbSCoiYyNSUlFEViFAS3pHTTBgaV0qcXJDXi9lXUFaTGAuRCttQVI7PEhddFhHcE5eTjlocE1acWIkTHNoNT9UO3I6SEVWWEU7eGxnOm4+RzdzIT0vS2IpZWk1cm48YmxvKS4wXytyPmlrK29Mci9yL2swUiwpVmZaX2BGeFAhJlNmVWh+I0NeZks3'@;
put 'Sj1faX5FSiI9YTRpcHY9R09nN1FKQyUoRj1xbkVTelJtLFc1O0trYS5oQEkuezQmI3REPjAjN11QYil9XWleP1VeQT1JVHM1Y0Ukd0kpdmJrWE9scmdyPFhwLn5NWF4rYHxbUEt0Q0krS0Q7Pns7Kis/PUI3VHtHPkk0ZlpFJlNfaHltfiIybXZ1MiYiYFRkP08uR2c6O0NtQGo2cmh0JEZ+QWx8'@;
put 'VF9ZeWsuZ1lgI35KXlR7RCp7emYwZiw1M1U8YHd7YG5mXk5YPGdIMX5AX21BTFR2fSFSKGA9OF91QkNBeU9fQylsUF9jZUojWDNqX0UlTERJb190ayRyb09NTk41UTtJQDpYMHRnRjd1VHZ4fktPJG84WVpWZFByYCheZlhtc3k9PFpjTWNVWUNDWz5bOEY+dixlSDNeTTtaQSp1NClNRjdOcS4p'@;
put 'V30yWWZKIUpUbywoM3orUHZpVCs3aH5DVFVXeyEqRGleMTZYPT5AdCg+YGwyJFpsc3BfI1s5RUg8PUpWaztwVD9NJHNkfEB4dVVTT2BPLm5+Oix3TXN8N1F3LyQvMW9fOCpWSCFFMFFhOyhSayxfSDl9PWtKSV4jZFNiZ2FIZk5HOWcvYkUwPzNMYFdJL2tCX3VZJG9gdjl3PHtpS3VTdSQkOFM6'@;
put 'bSlFM084fn12JmRAcGl+SjNPKX40WyJJTTlpdEVgdDh8IVsyNUsrITU8IU1aXXp9PyY+OyJ0MDRdI3dLIWouSTIwfH1gWGt2Rz84MTlqcGNnU184OkQmPktKU3AhYDo6XTkvKkt9TntDdjd3dFZdLkIybzM4bHJ2WkEjM00hTGNaMFpRUXJUP3R9YTpHeHR4SX1HKHtkfkxMOSkhOTt2UygsU1da'@;
put 'cz56M2wpYkg1MiJBcGU6NjQkI1ZNPV9KSG1fNz9saHgkKDk+dWBtT3VAKDQ7ITBzaUB1d29FZ1YxWkxeQU0kSV98QlRkcWxnY0FPOH5eUTloLjEyfkUiNV9LQ3R3YFJpT1I+YjhedkUqUXZleWoraVdDSm9oUWJrPFlDWXF+VmNqdj1NJCImWVFgTHl1PiNZKVBPLD9udGNObVpmW0RYYlBocD5x'@;
put 'UlE/ODlOd0prS2lBZjB+QThJd2NFPV5gfS5rN29Ae2Y7Qj9zIyZ7VCZfX1tZZEVmTVozVD05dkgobDZMV3tUYGo4L1o7fFc5RD9hWStaLzIrI05HeWd0ekxUImZXbGVfY11dUFRYdlVZb1g4KUxMem1jZmA1QmU9ayU0RjxuQnNbKl5TOFlUXyl8YU8hdXcmU2gjMGl+VDtKJCZDeVtlMCIueTI0'@;
put 'Im5JPVZ5NGJLbXdJQEc8eXxeYyxHRXVKUUxzaTUxT2QlWGRkaG81cG8oW2cwRzF9KkZCcT9MKzA1emNjcXtSenRbeDVQK2puNmp1KWtzRm89a1B8Iy9sfnQ4O09nRGxAPHg7S11tPWVYZzcxW09QSiNQOyR+ckIwaTNgbyV+Rm1Cfi9HQ0M8a1pRWzt9W2oxejR7VSZbWHF5MVVeS1VDXkxaMDNT'@;
put 'N09AR2BUKFchOkVNZ3MmWWx+OSxCMl4sN3ZKbyN1aTUkQj9WckxBSlhMMHR1KCZXYSEkeyI3KWB0TTE4djcxcUlPPUtNWnVnXXM8OCF1eCNBVyFSdm5fSShBb299UVZAR0VMXlRRXSV3UXBgWjpXJDpQSnJBRk1hdVhGdCQsR2YmIjN6OXg1RSJRMipyRkFpMnRJVzpdNnhaKkZ+OCJlRGcxZ1Ve'@;
put 'WS9bN0EjZChEeCxENWhjSjZmOXQ0MnVtMSVad3UoLzhoSUI5Q2hubHN2PWIkTCpFQTBXTXt6dTpJQ2VWMmAsNkgvOyZLMn1DalU0X0hKZEZ0TXV1NiU0YGk3Q29fRUo/X1IjRFlsSmt3WWl1ZV5aJHNOXTA8bUFCLkpvQmhRW2pER0JaZ3lkeE19SkN8U2lHMlFTMSFhW2lgbGYjNmBdfV4hPC4r'@;
put 'RWQxdkRqNk5gK2MyUTtHIl0vdl9gejhHYylgInw5UWpOSXEmK25TcjBJIXEjTnJkNnB4b31dY1U1NXFEMTtrWE9daXVEKUJifFpiOE5ZI0ouOTdpPzwsbVkuZTcqKS9MYkxZXWJYczAqM2tBWjRPay54ZSJXeytuQiwodjZhPXRJY1NTMjRyfShZN1Rjd0grQFFlcnluXiwmcWlEJHRrdyRGNz5Z'@;
put 'STorV0lmeyEjODcyTDVoMFA9eX16SHtaemUsTnhLc09AY0N2OkJRK0VmeXVDfStkKTBTY01fNGphZjlQcl9fXylqbHlEWVteMTtha0F8LF4maThuc2s9bzI/TSxbK1svSmFQbUVQYEVXZCZ1PENycjd9VGdiMzpjcXF1OUdEVVt4YDx0Yzd0XlUpQypWcE5wIjNVfCo2XkVjWWApMUQ1Yi8+cV9L'@;
put 'TU5CUjZnWlV5WkZ5XXE7ZCQ6KX1QYjFDM25gaiRfT093bD9SO3VeQk5iJXkrITtGQENjeXx2d3l1emBTWTVpL3EmIUFYSyhhJk9yJjVWZzsrVUYxcUUwN3tiNHc8diVnRG9nV3NESkFFa3V4Q19XQn1FI1dHIS50Qy9IR3pBUUgvST9VN0gyJXd2Nl9wQ1NpSl01bktYcH1gXXteYHVrIUdtKEpO'@;
put 'S2BaYVdKMSMuXV9yNGY0UGsjUmM3cD5aVVRDKGY/JSVMT0ljSmFCU3xHLD5GLnkuNWJDcU46OCM7KGlPbztrdENeSGR2SV84dUx4Tkt6YXlsemtHbnVTO0txXShoRVc8KUo3cmZJWmYybTcuIzFmcGJAXW1ZbyN7RX15Yy8jP14kMSlVNCteQmJEeExASygyb3BiNi9wQWRdXUF+XnIjcitANmNs'@;
put 'fG8pbGtlITJgVl8/Zi9EdGdePjwuemEsTURhLCVzWDplKEldVWdQZjMyPVYwNVt2OT5ae2p9WGpfb0omRWIwWDVEJlBOLE88bUtEayQvUEBbMl8mblZvRjlKPEdkWVBXIWwjVyFwViVPaUlCeDRaVE9OTlJ5XVFiU1RTJm9WcU4uLjFzXm5GX09KK2EmMjE7aCRpcj4mIXNxaD5CLFVtM2MpdkJH'@;
put 'bjpfVzF8UyZiVHNPc2JaaF9hQ3JUMmgpM0g7eUN4MCojWSk0RmQ3WnZfW01QRHNjV1Ffck98JClETihtRkIiLnFjZjE9O3soY0M0d3ZfVF1+MHsjVmE2RiMjUkZ+JlhBQEhuczwyJXBMO0dGKyRfc0xqTmc5d1B1aV9YUiZIZn1bNXBUJj1LRTljKG5AVXFyNlJlbFg9KWtLYV0jLlBELGooQjNp'@;
put 'TWtbJmxEXS5qfW1OW1sjPUA8MWtdOjNhYkBwW1lQMm5ReFVpS0ZyOjRQan5WZ1JVPXUzcSsrKjshRUgsbXdHZSNkdzJgeyN3Qm93M3JHVlIjcklbUjxoX0wyKXZUUSpSW1F9RmFsRXMwZVo6MEpPYSt0fWQ5U2hUK0Z0P1dfbCQwb1g+TGV9ZTBNJTxPMEdhaTFKRSo+OlA3SltMcXVfTSU0Mios'@;
put 'VVlJdm5yPnVWZklSa19JOVIwUDAjX1p3WEBhRExNflI1ckNvRmU+Jjk+bTtKNSVoXUZnT0R0PnMjM3RjbmQ2cChZYnV2S1sqO0JdPzBtRDUrUkUpd2N8UWxSQl44Rig/Im9dPVQlV3l4fSk7fHksVlZ7I0Z8PER7IWM1MmZGV1BndXlRRmRHPl4vXj9ecHlENVs5dTFbRSN3bDw7c3kvMDUyMHx0'@;
put 'eGg9dDdTdGxWfSkvKHdNX18/YiUmVlU9JCY3Z3V7fWJnZ0gyXTpeKDtLQCI3VGt5YGs9P35URyQ5TjI/K0J+KWQ+RjR2V1toVD1CTEM4RDhEZFklKy44S3xXMnRKPEM2bzxIW1t1bWtnNT4/bm9DaipwRF5xbXx9YVcmaXprYltjfkg2RlZ3WVcpOjJUYzQmZkA8I1g6Ymp3akUpfEo4Y2xrbiFQ'@;
put 'ezhAdVNKej1Je2VRVmJaWUsyUn4lLElbLG9sRDpoaCh3UjY7UGI/PWdFPE17VHU9Jl1fXnxeb2hIckQ+bDM1IWByRE9kd2RrInBRKnlMaU9kNWkvLCs4Ujdjdks1ZCFFSH12QiVjUDh9SXdVSXlAQDxbLn1LWlsjTnJ7IU8hT1F0dztFMS99Om5wVEgrbWJ5alREK0dtWyg0K2dFKjF4d0M6U0Na'@;
put 'ZiI3dF4rVj5jQj1HeE1ydXNKXXd5d1shajU+Pz1XdVkyIkRMdG07KFtMQFozYzVYWixKVUVzMzorcERCUHRjam1OPEcka1RAaFdyTzNXK1h0JkVVTlUwMn1hYHIwMGRgW3hSKz0iTFB8Ind7aztKRXJdImlGNCg/TEBab05RSnpPSkNhT2kvXms+MTAmOSkwcVdULlYqNGhlOiU0S2dJdyhQOHld'@;
put 'Q3BKJEdVVyR5dzA+eVBoQiF1eVR2YUVlRFZZK3U/WFc1NXFvLj10L1MzZVE3ZDY2MnprdWlWaV02anhxbm1gK2ZYSVMkQGNWYHQsNzV1aFlmfT1kbi4haSpuKlFMaSo/N0J7NEYlPERNOXNtZlBLckVAUk0wVXEwaTYhLkJCPkExOzsienJUNShpZ2lxOl9XKDAjL3kqfixyU2UqdmJMUnZIU34p'@;
put 'UT9kcHk4RjRydmBzX0VDPXM+NzNnTUsocS40IUhKW1huNWJzTjxvTzJJN0MkOUU3PWIhc1A1Y0RMQjxrRV9aUWA/eHRZcHY7KG4mJVpnZ3IwNj97PnhKRmIwdnhsKXBVVCZrKj1WVUAqWXo+c3dnPj9gflN0RVkrSCxlSytfTXJHLzByNGYiTF1ZWm84UTRdP1ZCX3FKIVYwT0FeP1VnZSZlOnZ0'@;
put 'OVhEZWBdZCNCdjBCLHx+OlYiT11sV2hVNHhTZkoiVWxzUGA7O1ZPfHZ4W014JklScH5kMmQrRy4hbyZ3ZnJJQn0xKlFQN01iMnk0OE8jVlJnRF5laSR5VFE4P1NEbjhOK3xycDx3XkZEcUlNRUxfZ0RbKU9UY3BZd2ZoVHVgLi9RXn5vb1pzODs7aVAkL19kRUlnQUtYOz13LltYMyhTNFVbZlpi'@;
put 'KGskaEZQaGpLNiVOW2c/QmtbXi8yRkt+bU12QyxqYT9NXTVAMV9jdDssR08oZDxXej9XdXk6LnhyQVg9VzY0aSo4aX5jelBoWG82ZjJCaUVWczJNSFozJUk8YnJfKTpXXWRwJFo4fE52Q0YrdW98dTBhbFEmfmFnSWlvdVhbVy5LQEdZajRlbzQsOkk6fSk9VDZje0VsaD8rZ1ZEWns1IXNgKzpK'@;
put 'e3BdUWUsOUtPfHxleUImaG5oT0IrUik1cSVZcW9UemNZIW41ZUdoNHs6TlVVbW5veFhDa2UsQz4qazlNc0p4fH4ifkoxRUEqbGg2XiVAUV01N1A7KTR6anFwfF9qLE0qYCl7R205LDFUeTwiSmJxOz19fCVPSGRmIThXLmE4K3x7U1d+PlJxZlg6d15gM2Q6TG9OeT9gLjksdW5WSWoyPEhgVHtr'@;
put 'N0ZQU0cpMGI6PzwoR3JUZFJRYjFXVnsrPGJlfCRebH5IdyQ1QjBKUUoiSzA+NldAYV9VZkdHU31tIkgxWntQP3hRJUlkXS9MSVdjRnd6bWBIR1Y7TmRKZkZ0dWleLE9xRkBjYGxNLCgmez8lWSkyRz00RiYjdEpIX1BULnUhTEs6M2IyNlJzOTY9Kns5L2pxTk92SWxVamNyOC9YQ08kOUNFSEsr'@;
put 'JkwiTF5RK0VAXXlpOXowLG9dTjpUQ24jdnVDUWpsRTRPR0BVVj98JXQuO3Z4LHMvSkxfIi9AQ2k3cSQyMSp2dXtiL3BuMFpzJHIqSilDMVJUP2Z6JDVzOT4lOCtnTyN2eG1DZDFDeS5tYXspRnJHRCxtO0pBdkh7Xm5RL0o+ZGdDanZ0Mz5XV2NhSCplVEBpVHQ2PFBzWi9OIU87ZURRdTB7ZXss'@;
put 'P1taKX16JVcrKXk5P2RSflVCI1VAIkQjfmt0b1E8SUZDdGpmR2gxaUUoSmRPTzI3RkMxPzNiUFNEXjppRDB+RmssVCYrdVc/Um0mR1FqXVYydXdOZnMqKX5QUSJkQiR7KG1tR01AaWxeLjBNaWNKKXxBZXsrLzh8ZUhqe3ooI0B0XUlBa0BIWStSZ1hdYiZ1NWo1IyNfYzBHJHlGWDZnWCxeMGNd'@;
put 'P2F+K3RGM0BkJC47TEpuZTRTWXRDe3RFVjlpZUlCZ1kuZ3ExaDpEei9jNVd1e2FhQ24iXn5YWVUoPy5jMzpANE4zVkAvJXpVPSxdfUJYRjgxdXoucWRvLl5+d0NmfkVEO0MxO0JWJWZ4aDNFLktDWiNdUUY8NnErKUxQISFmdX47fU58UXN1PGJDWDQjemBmfUhffGcjK09ARH16QCs1amlncXAj'@;
put 'PCtUXzpCIWspOHk3W3o0JSlYY3dvemYlUWVTfVtXKTJsYUc6LmBCdHs+NGBHbl4zYDMoIXgvPHIwSik6KE5TJGUlazthITJOWiQ2a1k7fSRqK291JFBsWD8iOnJ9V2o2YHhjfXpBQyh0ZlIhZyx4MWdyMyhiPGQ8ZFckbSJfcU5jT3MkVi42NHFubyEhTD5ESn5fcjUwZ1ZpSkd4NFhNO19TI2ZK'@;
put 'L0gqYXVUM0RsMz5DPTVkS0hhcGtfNHB9K2JeLGJWV2JxZT5WJlBbSy58QlRoPURSO2JUdjFJeSlVY30hKHg2O0hHL0lETiFKbjopbno1W3JtZEZAMVs3WnQ/bFBHKmM+bWEqSkBmQ3l+dXdvPTE0P25fSGd+Nyh5VW9wa1M2O2xDVn1LOHdkcX4yMnFdSDBLYU1hQmRfcUJPbl4va0krdk5MOWZF'@;
put 'MUR7UmZTKzsrIjEhMTkyQSFOKnguVl1ZNyRxPyF1fStSJnp7MyxienBUQnJpV09ga1ReQ1tLJGBzWTRaWGchZDNVckJlPG9rTDQlXk0kLmJ4d2lgOEUyV2BwSlBzaENScWA9PUdaeFt0eX1hSlAvRkNARVB5Z1hxSUNEQ3MyWlpDM1cvS2FZaSQ4b1QzNT9gNyt4a1VIUC5NXWVwVXZlQ0tqKjs+'@;
put 'SlltSEg1anBeKWpKYi88aGM0UlZQe0lqbGlpclFOWj5rTjRvKigwW1NYVlJSNSUrUXg0OW42MyxdXlFKPX12YCgvKCFDTlJLJWV6Qzs0Q3xAKDciV0U0JHQiQUthUmZVN19KT3hXZTtVbmtIPWtiOl9sRzQmZkJ5PUpmc3s5QDlocDp+PjNVfndpYVhsWXFHcG07RHlnQH1haXRAKy9uVmYuRG9W'@;
put 'fktWcVB7RTd7JDU+V0AyYGsuRyxoVVlpfWV7UWcxPE4zPXddblZNTm9IfGg4ayFxd1o7NlA6PTI3KDVtWGV3XklvV2o0USZtUn1UaGdGVz44SkR1PW5FdSljbDFNQ2wlMGhNQVg5SEdGR0NeRiloVHp7aV9rIUJ9PzBJUH5raX5EZS8oM0J4bCx4QkoiS2N4P0ZkZi90d2E1ekMoRGVJa2ZzMz8x'@;
put 'NjdSZWVxYV0jfSEidk9VIWt7fEgvcXcoR2JGJVlrRDdtMHpgODJ4fDx8MTR+TS5YYD1XX1JbSGQ8dDNSNE9ZOyV3Ol9RZ3coUDVZL3tXajl4YF5BO2ZNPEZFVyYjOktMcl5SPE0/IzJ9SURHKFpMRkdsQUkuNDQwXSQsTWprPD9FUHZoXVg6d1FgY2hvLEJ4OD8lRyYvKGokITF9YzBOOTI4PT9X'@;
put 'cGo6UnNEYSJ2RTtvY1JPPkRqUHFsIWw0TnswKWIoPFhuc1o1Lm0hP2RiRW9tUmI5LnAjIlV3S3NHM3pDXS8yd2wsPX0xNCxsPk5feWIhUHBdSzgzL3c5RkMjZzl3eD1Yc2IzJEpec0c9TDJUSVVVRmJXWVNjZW1RQ35MOERnRVFIM35bOz1GYVdMRCh8SXZlfS5yOj0vTGY4e01SI2FVWlpfOHNQ'@;
put 'L0Y7Ono9emZbSW9KY0l+eGcwSz1vW0JBPSthayxWcVVtIylCP3d6T2oxaE5BMnhlZXBNb0YhY21IPFM1QXpUY3p8cl1LVXJ5NUNTL2pQQ1oyVjRPfl9NZD4/bSQoRHdJXyVtLjEwOGA4WXRySDxYZTcpa3h7LFU6S15ZVEomZ1hTcT1aKyU4NV5LV3RvPjRWaV9UZDc6bEd4ZHltaEVsU1ZsSSo+'@;
put 'YGNFejUxUitaR18oNCVXYSMsZXRmfj89UFZKWzl+dnc6XTgxaVFhdSQwKzBYPFY1QzgxSD5PfTZYUEQzPD9VQUYwQlZbJFB0ZEMpbm9ENlh3XUBzOVohRyVgVVN4bD5eMDw3ZXkoPzRVcmFxV2xhS244SUdHYEU6a0lXXzR2MlZIIzdmdElEdFZpQTxgelFBIXMyPE5xMXRMemk1SV0+VyFDI24j'@;
put 'QkBVM1RvaXR0bj51SWdhQkNnfHpJTWZ2dCg/NmskQyklPXJGYlB8QnU3LEo+RiJhVltVK3pUbTNkOXQ4bHtDd2JSaWlDOiYxZTRkTT1KeCJ1YG9fXVFofiRjNUJaIVVEP1o+WSwpLEVVWkx8azo6JktJTFModmovN1FZJnM6Q29WTWQrRnBlIioxbSNCdHBmZVYzTyVVWU04MkVlRitAMzNyKTUw'@;
put 'WGslRygxfD82VzFMS11kPHdzUXFYKy4iPURMRiltZnxCSjhFWkxpc0FQOkJfPXpFQSpFYiNNPTc+SWU9VFF5Xi5OL2tKRFJEdFRqeGY7Nns6OEJPKilnTDFwNEZSSURyKnshdWZ7KCxkNEl2V0FpLGFbOkteeW1BVlRtRWlHNSxSRXVhXn1GWTYoZW0oO0t6KUBsektdY25TVldXKTs/KnlDUiNd'@;
put 'e09TI3hpc0BaJDpbYCFhT2krMzs9Q0xwdDduRWpdVmlecF4+dVF2W29UfkRFan5qd3lOO3pLUmlURCY7W0w5MjFGdDcxV2VbPnElJkt5YTc8VHpwQFBdUHE3JmYvfXBxPkMwW10lYGNvekJ6PnZdLEVtVl9TKTQrO0BWYXdpR04/RDw2eV83WnFqKnE2dT8yL3tuRj9QLmx9NkY9cityamB6QXZ7'@;
put 'PGhPZEVMPyZaMDRoVFhnOChfcF1wImtVKUdqdC8rOU43P1VjOGRIYVMpbmVpQD1lRjZvMldaJGN7ZCoiJWtoIStmIVtqVU1eVyNPaGdLKkQqK1RkVDNVaGJfO2h3UkNuODtsMyJnYG5rNTI8VkNTTUB7LDdrZC9fIzd1Ujc7WWUjSGZeJk9ufnh6WEdgbVFSZT5RMnZORzU/IlBWUXNrZ3liKX5B'@;
put 'dkJKYzsvfCptK1l9emZhXVRPdzg1VWxdKzwucygyYGlmcEQqU0l7P0VMPEBVY0RuZFdhaFpUYiU6a1hiITVQQSFZKVs7ezA1Nl0jQiFIcURDO18mMTdXW3RQRiw/ekN+Wl9ZZT1fPlBVND5APmBoaXgzXXlPOm5DT3QyYSNsfVV8WD4zKX1UWSRbYENYIylBRXMpT1gqTV9iV3Q5SjVOblI0W0le'@;
put 'Ylt1MEljPyNMYkpkTiRPbUl3YTUyeD0yUzk3SXFTUnRjK2Y2V2ApZ2ZyN05FcSJeNDJbN3c4RmFCfkRLcTk5OGxCMzhGWSIiVXhXeH1pRmh0XzhGMHooZlBnKGVZV0kkIzkvWyEwTWZQLF02ZlJrcWxRUS8mYkZASFlmbHQ+Uz9MOyhRZE5DamdybUImKT1vVWlfaihLMjs2IndLZF82djYwTGp1'@;
put 'OCEkfnxmL2A3QCUxcyNNRmEsPSJwMEM4cilWWEZLelBeOVpyNUR9RTc9O3Esa0MjSkJvVkliI0pbWSJSU1p6NyJUQn0oYXlUKVA0JDddZy43QzwzQkJBZ2R2JTR+ajA2cHchT0Z8LE96N2pIZEsoTlRhaGk4OGpEZjYlNnJaUlBYI2UwK2t9YHBXT05OcGclUTkmakhDcnxzNWEhdCo3bnxlPXh0'@;
put 'L1E+NCF0YyU7X3xgdVVoYnBDKSxJPH0pM1VSfXtIYHpNPkl8TTgkUVE5bm57enM9Iz1adkNWIztIN3VqKCg0aVF0dVZreT9YVkw2by9sZDxzXlF0QX5SUl5ZeSRHYkx0PlVFfSh2QE0vemU6fmhdbl4+fkF2I2c1M1UrQHpfMl9zTTwweDw0Lk81WEAxRloiNFdCI25rUjR7PWUhOjo1TSZHQylI'@;
put 'UWZMTSk0clRdQz5Ed3B0WCFPXyR5QGQ6bGxTdnFWU25qfExZfTslWERlU1g5YDVAdyhWX2pafCtOZmhFLiZUcS89QH04WDAvRFRgdXQ9KWdCaFV3ej9rJmM5Nnp+P0wqaiIvTW1iPzEkNGB0YDVPImluUFhQeDxlbClTaFE9N1Jkej9vd3MjMkcmS3RTdiVlWEdlRD08NmhhI3xtbHIpRz9AR0lv'@;
put 'XjlScXpZWHluUXRGVm46aUArbSFrdnZuYGMuIjZeZXozbmt6Y2oyK2UpIU9xXkpPNmFQVW44aFBgIjA/RztRUCQ0VVhuV2Noaz1aPmoodEssUUluR3prdGhCIWRxUnl+Pj1HNX4uWnRwbFplWFJYeC82UE9wYl1aXlg/ajdQX3I4fTcsbGI2PkdhNnJreGpkMD90bmshZlo+Sms3LFY9Pks6XkMv'@;
put 'T298Y3VdcyFULmQ4bHI+WUZDXj8wN3ZWOXJbfk8/aVJSTUVydSNKQWhWWEc0UGsxT3AvOCM6Tj4sNFR9fEcieypfVUtNZzdsSEJ3NCgkem1PM0hJbj11LHo0flRATU1sdXVZIT1xbDYlempxey8mRShpTHtubE5bPz9GdXZlQk59Zmx+ViNwdlsle1JgTVp+e3YiZkU9dGo0Slp0dz1Yd3k7V0gq'@;
put 'IWFJJlpyUiZyUF1RLzxjeCo0LFpTYzAuQzRZMCVZMnVsU2tZRXtkKEkuM0Y+L3YuJCMzQSsiKjRTckh6TitfX2MlWjVyal1YI3F3Z01RYEJjU1drNjYkSXB6TXt5LG48PH0rbGFBcVNveS5BIUF3PXN+SXc+VyhCdzdnT3s9QCglJFozKjlmcik8JUVHSmh6Z05PcHczfDFfI2lLUHh9NEg5Rn45'@;
put 'b25xTVhINGNdNTlJajY5Q110ezF8VUZqXTFRTSg0cFJ4UDg8S2ExUyF0MDosYDhnb3h8T0RDd1J+SyZySCNFbmlhYHh6SHNFTkFhdCZSQXhPJkh0IWhvU0soRzIjSip7bG1Cc0gwZ3dfQjY3IkFlPngyOk8rfmYjcTd0bUhMcD1mcjFpODZ2P3w2M3VuX0E3dDQ2fFB2UylKMUMqVipUKnFfJFs1'@;
put 'fn1bcmVxRUdwQXZ3TVtTQWJdRmc6e3lTayI4OkpiblJ+b20yUDI2KCh8PlNMaCQzfDA+JkZEO0JJelsxU2NvL2taa0A+VnVILEpmSTNgcmhSKCtOU3BSUntLS2dDOCtIJFEmdGlhWnZJbm18NXEzbT5GSTB6fEdFW0J7IU1YcFFKSHs2SyF6RFFVXWBDW21tdmJ2bzV0PTdUfGprTVs9e1BjK0py'@;
put 'YllpPEA8OD1xcGhlZl0mX359OnZvZi5OSik5SDM2eURAK1l+cz94KXswMj5ndmQyPjF8RmtaW0lJNTpbJXRSKlo9IkAqNShHPjZZJFQ/WWIxKXRmOVopJDQ5cEw6WVdoQnRnLitLdWVMYTtuM19FVFROXyZUIXRnTVg7VnpFLnYqe05ERHpLdXlaeVJyTEB5PHN8QlZgcUdwXytUWixdU21GU05D'@;
put 'dylqbDRoS19TVik7InwhOHBEfl1WSTRnWyopVlppWUoxZTFtTSl7RnZvSn0sPzNaI2AmM1RBSyJBel5pVnQycFN9eyQ5NDE1O0hVZmhSZiNaKHhaTyxGIzlmUyN7IUgmekQvLnsmcHI9bXp5aGp8RmwsK3NwNXk/c1kvOyt5VzE5bCU+amd2ayVDPzVnXiVTbygvV1U4dF9ffmUzUkVAfHcuKTlw'@;
put 'PGtURHNUdlJCPUAmZXl8Pm50OXF0ZENwcEhuSEpiZy8/NzFUYiFMPCRdTzJDd3pvTDdkQW8kYUdBTTMjWUpyfnhFWkthSDs/bEhlLzhCayFAZkhjbmBdPFspYUFWbnRWIUcvTyJWMGYsank+SlZGZUhkezw1X2p4XUlfXjF9KjgydD9re0hGbkR6KHQvMClIYGpFImtML1VJMF9LKUxMRmIuTGZ+'@;
put 'MX1Gay4xclVbRG9RVT53cHFlPShkMXQuMFlhUmEsQHEyalJ9cFJIL0koZ0xZPC5Cck8qfCM0XnlyLkJDTDEsSS46UW5nKWZPTGBOPi9ZSilCJCFwMz1HTlR2a3YsYk42bkRqLiQ4MTZWbzJyNFViRTlJN3cjeDR3O1o9b0JRfnZFQ0ldfWxwJGZlU0hhK09LajpLeTg9OT8uRCpVKTEpWmYoXzhr'@;
put 'a2VucEtKOVUmdmkwY3RuaTw2fHlkNzpjdkNhJEVXdjsyNSxmP05RNGZUNEpqVC9gTnsuc0crKVNCYzJXbnxebl5YaVpCZ3gsL29HVUpZYWdHVUA3PE59dihrZGV6ZmBbQWgqXm4zeDF0aXVCaShOckd4TSpvXiF1Qz86QjlBJSpDYyo1L3ZrKVhnXlpaNSgyMEJuKjYpSU02KjpeQ1NjJlglL3go'@;
put 'TmlvK0BkJkh0KH0mRXQ9V2pPeyxbUT89fl9rNkArWklUVi8mXWxjbWhuMiY4WXcueyp9O2pVTmBdPXFlZWguI101dlB1JWIlOF11PG9AXi5bbzQ5NkwrfF4pXlh+ZVQkK1kkZU5tT3x8Yyx2MSovTyYoaCwvTUk0KXFZVywmak49Z1tnRVFTQmV1L2s+fHFdNjI8O3tPUlRbejxzfDYwTWFJPmVs'@;
put 'aXB+QW83WnR4dz9JfEx5JVh0cEMkZ2hIK2RLKFdGWktQZTRWSXc9VldjR2Q3cHdrUzhMNWtPa3w9UytlI3hXcVhuKjpxLmIlfiwhYlAwPERPQ0RaZUJQOEskIldVeHciTDNUPTw/Vj55LCl4PUkxJj5eUztSIndnViJDJlFhXUpNPnZEN2hHfnZIczQ7eGQiUCt6WSlbbSM9dUM1UH0lU3JIOGZo'@;
put 'KltfPEMoYmkrX1h7SV8lfkU7d31fUihDWyldV0NeWlEyLz5hRWAoI2shKUI+ZWE8bTNTSX07O14sVGgsVyRzJVR0Un03WUBDdUl3L0tkPzBDKVQvN1tpb2h5bVY3OS56Tm9Bc3tMI3c6P2w+cGU9QkRMQDo7MiVMdjc1VDdnNS5fJXAlKUteZytQQFR0PDZXaGFMeFhNOFsvKnJKNWR4Lll+L3ZC'@;
put 'ST4yWzFiJFRqUVNaKkcsbFgoJmt2QF1kdzIsVDsxXWE6cEdDUVlPe2B2ITlwLFNQMXl8V1BoLy9oSyojRHBNUilqdjxXL0d4VTIqaHRFSFRJOHNqNE8+OmRYJVJxJnNjbCE5WypAXT07TTN5KkJrIT07bCZNbWZ8PDRtZFNiSUxPRGY5ImhYX0hSMkF3fHhyNCxtPl8uUi8wY1hfaXAjZylAVE1V'@;
put 'X0didmdfSkN0ZDErL3BmZFQ+fWpCdVNkX0EoJD8vPSZrKEdXNDpLdSpzKCtNS04pYFt3ISYoZyl5U3shd1lQSCR4QklvcixPKzU3WjciN01qQVMwb0ZEaD9ZVjU+djlyNnw3cmwsKVs6VXg8ZiMrKVRaXSU2dWo4QkUuKlQ5bTApcXZDR29pY19IayspSnRMPk1tV0w8OFMvLnYzYmImcHRGSVRv'@;
put 'OGR6aS5eOUQibCUuYFNUVlZORVRZclVYcSh5YFRDVnFUJkRqRlp3PF9CN01VR1AvOF9AQkVkK1J8KEJNTGp8YntrQF8zKno8anB3Sj9ML1hpZyk0U0YxMDB0QGNOPVlncD53a3RvNGZ6LDhEcyVmfDxsYEQ7Ki5iQ2pWUDUhKGlYODh5XkdzNCZETDxxcSJfcTZoPTx3WClmMyosUnwiR09sXkFh'@;
put 'b0VjVSRqLHJdRyhdW2NbcSxgSzI6czt4Tl0/ezJfWnRYLDNrXk1tYWpxYWZEeWc2YjlncGpXU2duaSIiQSsvNm9nXTE5YWpwKkMjcyUsVjU/SyRqTng8XyhidGVgfGZSS1JdSyI+cFZOUU5QM3MxeVo6ZXpoc3cuZnAkMDBbYllhcjt3eGQyYjFPLmhPalltayx2aGJeYDgyUl90ZDRSOVhCaW1N'@;
put 'RnwocGhhUCNxMzheKltJeFk2fmE/KmQhYFB7JCQzKywkZDN5Xl8sKyV1WlVZUjA7Z0VEWWskaStIeHx6b3MzYz0mP21haXdJViFSS1UlUWgic0ZoVEk9LzMySiY0fFtFK1BqXmA4OCxsdjR+Y2dGLEBgJXt7JV9sZDpiPUlAKjsiIW9xWmpePTshWF18PUNHI0ZXX007bG55YyxgJH49Z01pJCY1'@;
put 'OHVxckwrX3FUXSNnKXRtYkZJZ2JGITF+Tz9eKkkoODBMJFQyOVlMJT15Ln55dXsoWXBbPkNPSXY3ZD0vN2lyTERWaSJnKCpVWjsjSUZIVi88QXJ2QXohfEh5KllJR09wZHwqeWVuOihpakdObF1+aWN8cl95KFRENDErXTZEdzs2QlJvTUhlVnI/eUtVVUh3JXo3OzRMRF9eRkhETVYuRUhzKmRq'@;
put 'KVRbekRCVmlUYmo4JkpUP0Y/YUMsRTQxZHZQdG0uVSxHKGlmSjZPVGx4PDZNMWFqTj92SGhwKXlrKyFXNG5IVlh4W04xMntibjYxZ1hSYzY1RVRKK2NoK19KaFQ8Z3I9QDEwYkx5SD50UDp0fDlHRUQ5KlE4K3svQV1lW2olWzk6XVYxU2pKQlBAJHJIRGkmZ1QuVG5yJitaOXJnen1UQEY4Ykh5'@;
put 'NmVMSGJkXixrZyUrekBjLzZCa1RuZVJLTXFSS15AS180bHY3cDgmd1dXT1NnOzErKXJrVFgmX2A5Nn5kUiNbRkJebyJ4R0dgWTZwayYuM1ZFfkU0LE5RRVtZeGV7NHBfbSpneDJ7UVU0d1BIYzt+bl9haGxDPXBJeHE7KyxqfWMubGl7PSJOJDpxeDU9RklAclk3UmlkdVdxTSwrLjtWXXxNMnUy'@;
put 'I0hIMWdnTXdeVVY5IURHdmJxQldXKntEUntuJnxTOmllaSNdRVRoRl03R0JEdEdZUWllK156eT49fV4uIkMzdj52bmphXSRUTX5MWnpRQGQkSnBUaTVeRHNDRUV9WkdwaFEhU2VRP1d+cDJ9NXpha0JbTHVqLkExK1g/X10iczJzL2FgT2AlT0hALHpbODY2WFNbVWtkR3hfMD9aeDxCI3pxMFYo'@;
put 'NiJbUFc+dzU4IVFbOHZ0XkQrUy4hWCRhKkVIe3pUMHQhJjU+ZUtKSmZlVXA6QlAyZj1YeVo4O0lGWylTKnkqOkNOV3xzJDZ8SUpGeSh+YFBjZyFmNXpwMUd2ZTgjK0hORUhlJXp2MXFNJEA9QDwzNFAoR2k7RVd2NUwiPGMvTFFkNF40PjpYL3A5WX5IZnNyQ1tWbDlyc0RJMnx9MWJjYz03WTRZ'@;
put 'bjpsPTxlcE8+Zmo0RSpHbDJYNXBHbWRKOENaQntTd2w+eXl7bisxYS5wcy8iZTZnVmpqditzNCVjcXdHazEqYm43PCRSdHdxWzVpXX5sMUxCaDB0NnB1XX5tY0cwUnhpd1llKE9PWndSUUVWYkBsJHJ9NCQoKD5oW0VLM3lLe3tCaXdHJDRWfDooRz0/XS48NHFWLGJ2NX5pPCZpY04yVURQUW5P'@;
put 'JntDenFbYiU7PWlTRTB3ST9hPy8hU0NPX1RYNEF3U01NOWEleiIqR11CbFpgRT4wNT41cCRYa25laXh4TF58UUQ/MVU6blU7fltPentBbV5qR2BIbHYyLzt0JTpteVJpUHM5ZnN4X2FxTCFsJEh7ZHpdUzQwZHEkLkNiSllMVVRbKkI8WSgqfDEoRkhGTWhsVmN+REA4ens1bHRbRHwoXShWOmU8'@;
put 'UUZ0bUZwe1BgcV8kSV9lKy9gSEh1X2pBQ3FmTi5rIVh3R1ZpNipURipUdWtKR2YvSDMsYW9CT0JeUEE6N3ArPnFFZG9WTSY/YiJYN0IhQCs8eShIZG5HPTVrUSE6b0c2JC92W0AxOkd5cT5QOUxuI08yUlU5MSZ7fStFcX18Z3pSP2t2MUc3LFZQZC9CP3R0Izgiczd2MTgjMmFbX01kTGh4PHs6'@;
put 'X2hXXUlLM1oweSsmYT8yPG5ELFc5QGhJWz1QRm9ZNFltIi9VOFdhS1RuYm9+K2t2cVk2ODJPLlcpdk1zTFdCVE5DSWkvPVg8LnVLbGZ5PyU3Jm86cj1kc35ZYXIkOStMYXp6VE5fcnAjTW9pY2lEVXlWI0A7JHdUdTBYdFl7WVU0YVpVeWxbfS5IWDxOc2kuVmdHTHpuR0RALmNTekVYRkdOXiFU'@;
put 'dlM/NVBuaXQ7TDpnInJJMFBpfkJqLGI9OW5dSkw2bz0jL215YTFpZlY6ZloweTY/ZU83fFpDcmoqOE8jTk1eeTxrS14zVWJkRGk6V0JJdy5AeXNsJEJFXllvYVtFOjwyQj9QemB3NixRTkkxYmlzND5kc3l9SW47WC8sa3tQO3cpfSQ1an4yY2VhWH5obFdnfCFTRCxRQGl5VTd0PHZ+Pl9gOC9x'@;
put 'Nl1aODwhRGM8ZT51dk8kOTtPRk9MSjVzYypsZUUlb2F6PDFpKnBde09GNk1AJTZQZjhXc0w+RUlONXhnd3IzP1tZcVpxVDdKLnU1fChbcTtRLGhbTDJpZmlycEBldm1dVHJZcnl3eVpOMjc6S0JFUWU0PnBmOFFCUUtTSGhCXl1PQzNSOjpvWj5ZQTolb0NRPjBhenluL10ibTV8d1pOUD5iaUhl'@;
put 'SGBWSmJvPyw0fVpUdHp6dT9RMnBYeVFTKHF8d35gfjFMP0RicUUiJXcoIT96cnl8ST53USZVOTY5Lj98QlF4L1hwK0NZWSEzMCs0WlI4fjdFMCxEP2lbKVtlZkFbbnFmNV1RJCllKFNNT1V+Jkw+MyI5S2RULyFrUVlPcFdSeDZkNF5UWCxfWmVIWHBPXSl+Pk1vO1BLJDBRS3gvZDRobFBxdEdx'@;
put 'WktqYjwvNjhELCtNJDtHUD90RlVzY1d1dlIyMGpSZXZYJkpSWDhTaS53UzFob2lnW1ovXUFyby88c0ZfWk44Tis9O0VGaHNUL0NPOH5BdyUoYSEoOWpXOSpZcj9tdU5TKmBhJitHeGZaa2BEclosWlEhNXcoe0N7NEdOSTVfSDt8UUlaIXZVWnFfWmdET1UlOU50IUo+e2VmVCV9YTFwZjBffDVE'@;
put 'WWlLV347KE5gPVNlYm0pfWNQOipScmlFVmJMVkZERjduWHgyJmJAKVp8VS9hb2Esfn44aDdbImJXd0tOY0BCbz5GPCp3QFAuPlM1WzhFMTsuPD5OKDB6YUkoXTR4PU16THh2MWM1TSJjVH08d09NZnhFR3EuYXl5W24qbHU4KVNfd0drQyhxYVZBRTJ8SigqRnI6Ozh4XTF6QEQ6YTxsWUpicmpf'@;
put 'S2I4PnxIQm9tZGlhc2c2ZFdvOiQyZmE0ckhNKStOfEJ0clo2RyNzOTcmcChPX191IjIvZj52Q3xnUypZdmx1cXF0RVhdIXRxdClsWlc9MUtLYlg2M1FhKC9nLz8oJXMwcVR9QVY7TG93fD5HRStzLlkmSElpZ2Q/bVpMX111VTpaaT5mRjUoOXp2TTk7W1o3NTlKfS9EK3d+ZUohQWc3IT8uNElR'@;
put 'UGdWa3REemVVVWBiTTdnV3IiNj9xWjF4PkVlRT09YWZlZCJzPmFhbFg1dzB8TmxzIis4YVZhN3A3Yy5+KiRwW3VORV5fXTUuNS9tOl1pNn5PcnFTdSs+TX0lIkMzKEteVDx+fCtoSixkS0RuKCtjcUFab3B7JkU1NDtlSD9+SnRFMHtHJCRjUTNePj5Cdy4uK0ZjfVZhZjJ3MElUL2ZOdFNYczRd'@;
put 'UTlNQm04IkhGJnNqdXszXVchYS5xIlJVZEtWc11UZy40U3A1TS9KakVTXTZ6NmZDYyUqJjMvZTVvWjlCfjwpLzhHZCJvYj9AOXBzUjIwNTo/d1FASUF8IyNzLj1+Ijd4YiFeVUMjfV9Odz1JPDd+IlV3QGZMb3xHeVtyZTNUbWZmfDpEMUVZfTppSztfW04iUTM+MTFqaVY9dHZjKlQhdGltL0V3'@;
put 'N2YhRCUjTiVKZ0ZIZHQ0bGNgWWo6ST8kUlh+MXpyezcoSzkpQHRiS0MsJWM7XWdqMCEmWz8jaDJ4ZX5jVlBNZDZvM3tSYldgTndqfD5HQHhEZ3tVWVFVWzFPXzp8LGhFZW5GNHg1RSRpW0V3UUUjNDRHUldQcEEsZVcwPTZRVmg5aG1oSX1fMTJAJXxlK2w3X0B3Kl1Ley4hUX0yT3lQI3JLYyNk'@;
put 'ZFAyMlhTcFpuMXVxY0VTLmNRSFB0Q1lPRiNENmRhMnJ4KDA2UGFJUVRfZ35Oe1g7dU12ZVUmKVRwPjwvdnlGX0xLRWZ6KjRGJUJHQWs6JUVHNUx0X3ssM3crMiZuTF9mKi4ufX1PSUBzIWh2NUFqUX16aWBgMVhyTS5VP3wyNWBjfkh5TkpqU2xIOnFlZUxpPEldTWl1SGh2cG8xKkdiN1BSTDN2'@;
put 'd0U4N1lhdXRhaHxYSFhBWTo7aGhTeDxObHh8Q0s6RDRJNEYsQEN5Zj4xTjNkVzZbSEgudUJGR20yKDReeyM7XiQ5W2hTX3xxXTEjR241NEZCRi5aN1c7QmtNUTo7X0ZBPCslITozcWxPaUhiPEdQLmcjKW5WWyVZSmFJfCY7QVExJSNAKG5mZTtDSnhyUCZ1PDpCfkZRbDc+WHxqO2lEKEF3RlZJ'@;
put 'VHQrc1dpQzBQYnA3U0BIXno1PDsvdjtaNH5Ia199TSIrKEk0bWBeJD0hQm81My59SyVKalhOPEx7ciQ9a1U8VXAjKjBJYGZjKGs3OSF2d3VbOjdlMVZUaHNKJEYpOzVWfFE9JnlqM1pWO3NoXzs/N318d2NpV3s4bCNILkUuek5zSSo6b05Mbi9hIjElYUJrbmFBJS9Sej0sWT0/OHQ1PXRXUj09'@;
put 'KERbcldtXToqWDN3NSo/blhVfTMpfGBhIUY9Mik3VzY/SnREUGZzMTdheERoUCUoKDhkWD1TUFhPS3hTTUppWi96Y3JHXigzNz4yelJvIjxANy5fY0VveSJab0AmXUpvJWJXTzVgWE5NSEZgW153TGRRaDRIcGNtMzwodVY5PGp7LHtpdjRUWFY/YUJgez1GS1BmWVAvLFcxfGtmNms+cCFyJntp'@;
put 'UXA/RHVwPWg9RSFVMiJpPD43NXc0OjskWEosdF1pbSxwZVg2RXhNfitRPllqX0RlalFrWkxUTixNS197clAwemo9P3pte3hndjVfX0M6OnRYbHtrR0FPNUgrNUlqeFBkbnJeSjowez5nLjovVl1kRUBQKTNSc2VOWFdWNXU4JDJPVW19dTRMSEkhLkZNLzRoRyEsd1dGVi9sVzx9eExjRkRbIXVg'@;
put 'OChRMn1KUkImb3lMajYkOj4iV2hTbypRQnBmMHFHUT9OQDxPdVBZWTU6Nz0lQGxoOT0laDNuWH47XmszOVoqRzNzXTlPMltjJnJbb0gxLGFVUFpsZS9JIkR5VlclQGNMMj9MOS9AdDo+U3x2M0N+YCFpLzgzI0hJPEFbWV83KkJmLmp7bmpKcGBtPkNxVE0hPzVmZCJjXjNuTltXY2pWVn1GcCE4'@;
put 'PS5HSCp4Mj5TbjlgPWU3elovak1aVXl+QGJKXXA1JmJ2Y3BIJHU1W1E+XVdPPmJtU3koMD4zalowOEJFOl41YjMsZG8pTD8he3xMUTJyNCUkSDsrdUdgSCFNJVs2fWJ3UDlCd2hySDxOIyNURkZBbUByTDMrLisrRHJlUTc/anRJb2Q4Pkc1ZGVPKHcyV3RJfFA8MDNfP1Y+U1JefjdPZVFnfj1X'@;
put 'WDdLZStfQH5JcjhpYislSTA9V1kkJFouSypAKjslQDBtW1E1eXNASmdlOzlpVHVJdGliXSEsaDpULm8yO1BwcT8oM3lIZCgkfnV5N2M0bio4X1tveEVuciFzfCVoXUZHTXd1dndEa1E8PS9hIjVqJGo7MmNqZng8OGZIYlY0OihRfVR2WWRKQztUSz5DIW9bIUZ8PHBSTDVNZWpOKEBkMmVaZj15'@;
put 'O15aYS49JTs3KDUpQm5zfmpFeGUpS35HUWYudnc0Skw/W2Y1b1JObUwvTmBGQkNpb3ZyVXZwVFNwei9nMXh1XWNdSTQxenQwQE0mfS8weEZLJFJmNH5Re25MQEpuKW9SSnAuJkF0fCo4SUVacGZLSUhne14sSUQrM1k4eHkhXmB2Wn1qPl9RISFZSVkqTy92VWtOPGcxXWkhTkZucy41MTNta01F'@;
put 'Uy9rPC9DR2Q3I1N4azZlNTtFazs+PzJ+I0xEPnE3JF0xTGNRM097YEFaenhGKWMjaTdTdiVXSihHQzghQHNGU0MwIlgpWSVVJkh2YWlqUFo4JWM8LGlreyQofV4sPFA0OUBiKiVicnxfPld0TU55USp2YyNJUFJiOUlMJSIqW2ZPbUJucHxINk9JejFHWXk5RmFkV0NKWk9iRmZTbnRYLyZNI294'@;
put 'OTxIVjAyTD5nODtlQHlCaTtDZFNEY2hBN14oNyYoZVkwTzZDMT0iSmpfRyZyKlhZKl5uNCooSnZrJERGMGk7Uj58IVpEJmJlNXVAUVIwMHVYV1pZOFVaTzEyXUhJJnpzcWp8b0orK0NsOT5tODdFSz56ZnNoeUJsUlgjYXhQdzJ9OURgSEd6YjVDYmNWPSoyZTopR1d+fjdJU0lNVmJwRXghVFhN'@;
put 'STYzNFp+K1clQGpVa0JtMjskVkZXOm9qJGB9IUhMOzB4T11fWC4we1EwRDd9RVE5YWlhfGRTQWZ7Z3RneHt+dV9IcFNVM0lIL3hjViVmZUFXQ2BgcH04IktJU3NWanptMFlnTntVQ2QkPGcuZlc3fjRlVUpbZDZkfFAibHFwaGc3cD85IWZfWEF2cGNweVNRVmUral1vKDt0WXohUTBje0ZLOmBS'@;
put 'dSRCc3l0RG1ueVlEOy4uRnhMbjhkV2NfTWBvdnQ0WSxqX1luSVAyPExSPmhpQzdaOT1JUWFEJDpkWyxXYG1POF1iPUg8aEk0TCpjYkZ3LCgqaiE4T200QG1+KUhoTj8yXlhvVmNDOm82Xyg3Vy5ScnpTOWQuP217YHtGTFIvQy8kPUx4TWhodipEaUBYX2JfJGFVMyZVeygvWFNYdTwocDBlZXtQ'@;
put 'dDZUOUNTIlo2bWN0ZV47L3dRS01OaHUmIyl8RWFKWk96aWZENGpYVGc/KX59SkhodSVeYnZGQVI/XXhNLHxfN0Y9ZH5COV99ZFVBQzZrTUdmTUZnLkN2YF5vLlRzNzQ3WDVzUFMlMEp2clhvRUEoNCw2MV5zblVGd2wjM1hFWGdWcEspUkhmQDs2UWRVI2UzZ2xjJissSiFbNmdVSiRFQGRVNCRD'@;
put 'aTc8UDgvPUlpeD17MVdtL2hQe1FYL01JWCteSHFraFYzd3w1XnFgMjBRbSFvS1RCOVV3VSt4I3lqbnV4MEc7QXNiVXRvQEd4UXBhRz16dGR6a1sofFFqOyMwXS92JmhmQz9NWDdlXXEzb08ifS9CVDhie1JlTmQpfWJoakF0QSIjVXBzflJIXWBrRipIYlJ7OVolOkRlJihrQH0/YjEvWUR8TFd9'@;
put 'JU4jTF1HQHJmbmhJcnpASXlmOXB6T0VpW088cXJ5dmpjZ3k6TkpOPHFwSEh9NTMwUTIha3FnNEdjfWJxcTB5cHNbfl5HZz0qK3ZObVgmWVJ+I0BRc3Z0cyg4O2suSVY1NFBZSzI5OCw9a2AhP1Z8VnpXP1hhOzM0fUAsWzNDZlN6TDFxYWsvNng9JUB8UCN6TjcuclVGVFE+O01rK3tLY2A/LCxP'@;
put 'M3Z+ZmNoPW10b0ZDPnI1XztWOUpWaH1TWXYkTDlfdVQmX1tKPip7WnpPbXpJdCslPFQ2aF4kS05mImskIk1kdFZzZEMuIjY0anU+KCN5XTlxRlZIOyJ2I3hhPGRbM2QpQDRMWmU7S0NDOn1hNGc+cywveT5pWEtaSy9DbHgsQ0BvJT86WTBwXnJuSyprImdDNTFVKzhzIVRAJHFPcFd3UTEoaFEu'@;
put 'NDc4Uno8YGM8cUVpMnsoVHFOTHk5O3x+JlZLeXFXMkQlMkVadz5aMyFgLFo4Yk9OIXY0QXYrdUY6UkAxQTZMVDowdjEub2MkZCNXQGskWGZGUH1LOXVgZkZeN2NoblVAKzdaZTZndUVvKS9OYjk3ZDFCOCEwMGYoW0kzQlYxRWRsKDtGPGk7VztDVzZePGNuc0lHaSRfS2AmXktIWWpNNmBzbWVT'@;
put 'aF1tJDBLYTRIPWh5flBxRHp5NGBnYmRTIlhJWGZKIjI9Plt0YWAsPUlIeklvUk4+RjRvPzNEQjxdaElMUXcubUk/Sk5ZQjV2PXhaZ1c7Ijs0OUZfPl9XWmh5a1Z4fVY6bz5pQ3lqQ3dPczVLK2AwPkNaJC5EWmRARDt4eWI9QmIxWXBqK1VZP0ZgUjB9TSUhM1NbUSx2VktSYW9ien0xKCU0JD1W'@;
put 'ZzBORC9LJmUocy54PEokXUFgW2FBP0giIUchbXsqdXE1RlNARmRKSzZMLFBkOklMNEdXai91UCVEKDlGTjRXWE4sUmY2NFE2MHo9Q1pGNnRnflREdGRqckB3PEh4OjRyfTZiWlhzY1NHbDVeJFVUL1FRfGprY1NHQEdHXmo7WGEoSTBnUXt+UCsyNERCNUFaUCp+fkMuZnpHUm0jUylmNT4+Vz4u'@;
put 'fHtaR3I3KUpMYXYjZkl9UzcxQD9DSkJTWkxKajkxNCR+I0R2KDZPOms7RjM4dUdvUnRnSVkrSGVfS091RiguJlZza3l+MElfemRFMD5kVUA7PVlsLk5aKXpSYzpMVXJdV19XU1RWQ2NUITROVT8wOHBHM2FERFR6aihhYWw4ZDpVWjZEa2NAKDIoNFRUPzc8OCw9aTNmP3Q9R2xMcmkzY0lXTW5H'@;
put 'QmNBdWl+R0AhKCk/XWJsTVBlbn1GXXsuQV9NMSoxIjwwTFpiUj9eOl81PFZBdHpXOUsue0xkPSYzdGwkUHFkby5CWlV2Q1kxUFpfe3B6LkVTemNZOG1yVEQ2JnJZPXp0fmpRZT9FJmR9b0B0cWM3Zi9hZDNvL1dlWDlWQSx9a1opaVlZbEdvUF8hOjhbcXV3TT9obyZ7YChGIWlwV31dSkg7ajE9'@;
put 'WmguMWAiIUgmRlleWikkPl8pVXlkVlA/VGZtVE1tajFzNyJkd3kkMlBNPiJ9VFNOJWMlPlJEUHdQWV1PeF9mMEU+NEJTVVQ8SmolIn5kTnVqN2Q1YkFJSW4zQCF5O2JsZCl9QykxfmNVX1h5REBUTXdfX3J4YDxzKHhQS3AzYDlAOHVXP0dyQTh2P0phPUIkN3NCbWdyZSlbKXUqNDE+PXAzMEsm'@;
put 'MTUlNHlLQHQpSC40Yjx5azlMdn0mVSliZFhHU19uSHlTfkJFPWlMSCI+cDd8NyJ5LFhtWmk+ITx6LC5ycStlRTp5VFZsRjtvdW19PiRddUR7cSZAXWhFcFFrWDV3NVJKREZ8ZUY9RzVDeE5tISVSYSIsYkNoYUZnKmImeV9WTnhESG9gbiJqdy41Onk7TjlqQnp2QnFfdmE0bF1HKChRfVZ9NHdL'@;
put 'KjY6RXtIME94YkNPPkhEO2cxO3p8eWE9MCohWGZQSSlLPjtnRWYwRVFzaEd2UVJuIyZtI1pde19GVj9eTF9VYiNHIVlDSjRoaU1uUjRaR3VjclUwI1Y7QGhIQ0BMVDt7MSQvPHNFdW9pcl52ZzkrJGskQ1oqVUxgdk97c2FNZld2UHpjOH1lc0ZKd3xEPVEjNUV+Sl55bFRUdkJESEBBb09bdVp4'@;
put 'd1lYdkpqX3xackdOTyRPOXh3fUpTYkZdMmBXJFhuTGwjXmZ6Znp3R3RCV0QhOT9UU1RWR1V+NGldRCVvRSl7LlNuel0seyREKEZ+JWc5OXFjYWMpe1soMDU+MTdGSUJme2hANCpxbU9WI3FtTnJ6K0N8RHcieCh6JDV6bDVhSyY1ZmZ2UiQ8Okg9TX5vZTIxdHBgYTB6JnFYYz5QdzZjM2xxPCJ2'@;
put 'dVpqdSh9bzFCej1mcTUqbERfV05WMGMuTXZIXz9hSVVkfmU5JXsxRUIjRDdYYkExY2psbjBeRCZLYjM5WHgvYTRHfS5PSD58MlpZXU5YO153JiE9RV8hKmIqQiMiKDIxXUJLKltBdW9xZTEyJiVhUEJAV05WTjIoaixAemFZQFZWbklnWlRydF0mS1tZZ0JkPFlfWjk4Q3YrIVgsKFE8UmBNPz4y'@;
put 'bHs+a0NAbWwpTFBHbEtkMkspPmB2eXk1TztgfDdCOUJ5T2RSanMsb2BKRXdwZTRwaygrRTl5RlhiXm4rLD8lK29uK1txa1ZSbVN6JS5vO3ltcE0qWSRvNl5wTGRFYjdBNWNwVElVXnl3YTVJRExqMXdEdi47ejpMVj92bHhFWkg4UStPRFFYYiReUmI+TVBJTmxXJjp+I0ZXQW1eP2U/cy9IR3p2'@;
put 'SnhAKigqTnR5bk15M0xEZGxyWE8+UT4hZ1F3K1ZAZiF4S0h1a1lgUW1Uem9aJWVqKmh+YmtWcXJ9MHA4aXB9ZDg7NSR0JUhkbW1EPCVGTHl6dE8rYXl+Ri95eWBPekhKL1BtZjs3UE1iajIjWCloRDxjTCEybHMpTEZdXVk/SD5Fd1BOVX5Pbn05c0BpWDZjN318SWV7Omw2XWs+RlMiWDBzRTdJ'@;
put 'PEBMVE86W1hYRUJUUG9ZdkVzeEl0VncjcDI2KU0lW11vfmEzWV1oMGd4O010LiVmP0Becyh4STwsb14zPVVfamkscmZ6OGJ7SjFMckI+QmlIdSl5IjVjdjVKZlVkI1ZdKW1LUUFvZHxRS2s7N1pqSENiMCwsVHB6fngqS2AqIW8kd2hZUlsvcTxPTDdBISElbFppdjE+b3d8L3crd0FlW2FSZCVy'@;
put 'IVg0SkkzVk5zTXAybSZNKFI+KEU2eSZsNk86Uj1BaXdWcmZQdChkWUpgL31HPiN+cUcybDVhW3swKXFwckVaRC5sSWxbKzcvTVZ9NypjeDkpNEc7TzxhOTswOHQ7MU1STWBWMDs9aW06bDVLaERBJUJwdURGSFUyJUpwZ0hVRSVWcndYK30yYUNkfGo3cnU6dXE/MllIREUwZU4+SUVTZDdAPGNr'@;
put 'Rytjb1cxOURMIysrQ3tFS01acSU4IW4hREtddjppNVVUNXpreWtDV3JQeWhoRn49JV1yK3dgJXhKZGtpI2NSe3Bgfn1nKVJfdU1ecDA5WyhJRC5MSDV4JDJ4RkNkZEIuVVouXzNNcVUofCp9Lk4mTWR8enJCcHxhZEVMYl1kQjl1QkwuKDltfH09W3J2bWBrV3d4XmBWUmwjOmNWLnBgNFNFOnJs'@;
put 'dTRTei9RKmk/ImxDOF5KQVUjV1EzIWtbWWgvPmFJQGAmQyRUQ0VZNkRvV0VdKm8xcC4/SmY5QnA5Q204JmhVcUhFUjZfXkhvenRpR0FKQFdgIUlbYjo5Jk5XbjwoVD1ab144YEFkaDR2Vm8/RXxKTltuaHJMW2ghbCFmNWVscjN6a2dAcnRjIiIzQU1gUnMiNzckankhZUN3TkQlOn1IW3R0cnRR'@;
put 'YFB7bnpwMndgOGF3OV1pMWNqRDJUVGw0MUMlOyk+UGtyRkspZVpbM3NxNS8yJERAL2Z9Jn5+Qk9AbDVSbGJbZEIvUy9iTDJIJkhidkJLUEhaIUsua3BkJHo7MGtAQmM7ImVfL15ke25RNGVFJn5Ybk1QKyRvNkk0JW4wMS9xdz9edk11aHZ3QGddQHBtPVh8QEJtJiJVfDs0Vz9lRj5sNXVCK2x4'@;
put 'TF5pdUo6VnRYbU4oXUtuOSYpeE5zc1BVYTx2fUVWO2xeYzE1dDROWTlFPkhlVW1vXVZTfWByJS9nTV8sPT17bndwYzZYQUc+fXtUQ2dpJF9ddWUjTUkrfHlIUXlMSGhbc11SPkphTFg7Wn0sTE5YTGQuW2VVJUhmM0I5KUd7YFZ5R1BxfVBRcGV5SiZVaFpjPEtoPW0qPEwsdGhQU2dgNzkiN3dW'@;
put 'VXV8dm9mWCtWcG5aXXdQSVUkWXs5R11paitMcHpRTHpPUEshe3dLXW0yLCksXz5EL0RvVis8WzcoY0VIT2xAcDl4YF9JcHJsRlYxfHVMdShBLk18NEVidUNMW3BTWHg9UEtjJWZ4diNTblQ2K2EkSFkvIkF1YnFQa11GUlpVVWxIREVxJkZIOFVPcmN9WX5XP0pqOSR2Qi9ZZDooWDM+PiZ1ZTdH'@;
put 'JD9aNSlNdW59VkVNYjYiKz9jV3IxMlFxbD44WiM5WWJFK1BvSmMzTTwvRSh+bXB6JURHRjY0On40PyE2R206M0wxZTp5WH0sQEBOcX5tb1BXIzQoQ3JIa3E8SVFTUGNpWV9USEtjK0Y2VT1NLlY8eSVUe1t6LyNed1IlOURqUm5xQlJlM3BMRWsxcVNuWWhAXUlia1tTa188RWlUTndFWlImTT5C'@;
put 'Iyk1cFJqZTA2PFFFc18ubUhYJF9gYDFlUlh0JD90ekBPSiZSOjRqb1J0RVcpP3NQOmNweiVIdn5YYWdUT0laTWo/MGZyfGZKe3lqQDtsfF43JEpPNkt2cVZLOmwlN10rVSFbZX0zNGdiMkc5Tzl+JSRhdmF3TjcoZ3cjSXdMLyhkKTAxaHgmTH5AUU82JSI0Z1A/bklJez4/aUxVW1g2eU97Q2ZQ'@;
put 'Lko6d2YuayRYKzd9XjpbKT1lKFhkNUksU2QvPHRZLlJXXSovRVguZypuR2A3Q3dgV3ZDOnhwRnNVMkJMTCtKUC95N1hZYyxneFBtUSsvdFVPSWRrbiUwPih2Lzs2QjtbUkc2NE0oMiV4V1siZzZtLHpeZyptXmhHRj8hdnx2cGQ9ZE5WOEEzW0NhTk9UdjtgQ2dFXXFbbC5bNUw7dkJaVCRLTDQ7'@;
put 'aUhqe1c6KGsxbHlmKmNZQ14mNU8iWkdpSDg2WkA5a0VtZWd6X3dLLkAjanQwbHxudio3WkdKe3tLN1MsbWEsSSV8R3U3WDw+YSphTzgkOGwkOCU8NjkmaUNHa1khVDlfKUJmPWJtL1t8VH1Tcylkci5LI3huW3taRWdNfk5+YmRgJi4pQWVaViE7UEA8U2l0fCh3ZTVoI2RkPUQ9c1FsRVt9WDtY'@;
put 'ZSxxdHdsZF4mbzo3TC8hKCYzRVhqemw6SGM2Ri9IfkZZaUNtOXFQKkAvbltfTygkS1ImVGUzMkJJXT5SeFs4TV0lXm9LV2csWDQzYCt7UVolOCpnSkFLaClPVTY6YSUhW3pfdClne0paSjBKMCR2Sylqem9FcVZUUn4jcm5CYXliQixESD91SC9afFt0O2NVdzY3JEJsSjF5IiRMXz5NVmc+VHRH'@;
put 'azckclJEekIxTiI+d2NsVmpCIUQ+WVhSMCFVYUszcyteNEp8RDVMdEV5fiZqSCVUQ0hkal0yXUQiTH1SVUkpKEl2fGQiKDIpaW4qb2EwSW54JUFvJXo/PnJ5UiFfWjdPd3tfPVE/OTdFL01hSkRrKnpmUVtXOTgsInF2JlQ7TzAoTnA8Rj8xa3V+Wn1hYXxKLzVJWlI3LmxIOGA5fEZPT3JSI0xM'@;
put 'fCYyRFVLNzRJZmw5ZVB6NkJlTjkqRXo6dUd3XTZxZ0BYYiYqL3xDTC4rN0VqIy9RYEgsMl5ucENxQyFWRFIyXl9WJGA1eE0+dFYve1J3Ukc/fjw6aThgX0ZafTkwK29nISZdaDdsfCJsXyhEentwLjFZc1tpMU9qQHFsUXdwfDh8Im44eXxLYW5fMz95dnk0JTtgXy43TGNMW1IoRH5VVmJlV0J+'@;
put 'JV4kflVCWU4xO2RZdiQ5XmpyZFY0dEQ2VEpBdDlZMnxwS1BdQyYmSy5xQm1GbUcpcEhjTjAjRV4kTFV8Zzg0LCxldUxjJlU0JXBIYWZ2U0N8JHsoOmRRcDdKTmA8RmMyfHdyUUg/T1BUKzI0aVZnK3EwKyZxOXRGdnkrfStCRzY8V25rJGY0eWYhSHtiX3A7VUVTKUtIWURmbUt1dngyVUhhNHNZ'@;
put 'NzY8S1Q8RVFlOWhBOnNlNTUyPHxASX5xRkxXUjYpPk5iXSxpNUs8cHEyPzdRZlJtKSF+SEgzai5gNkM/Jk40KD91LFZmTys5S3toNUU3RUxBZnhTPFYjbT8+M1lGYVJeK1lGRDFlV3FTSyZafGJKaHA0PSwuUFNkOGhFLmU7R29aU2ose3E+RjlfbE97XXxLOUlrIUszLmZXbmFAamU9I3BudVAv'@;
put 'Q2szKi9PZnI5X0IucldxWC8uOzw4em9tKkxqIyxOQW5yUjdbNGhFfEtXZlNmZTdXQmRFR1E+S2VPUlo7TytLdzV8bzpBJTwzOnpXeEVgY04xYHk5aGpncDRYOXpeVCtEQFZHUl0mRjhdRkVsLlROUmFxd3AkSl1jJnRRMUB+Pmg/IVZSPH5JbXdAR3dSMzEoJFkoYCtGJjNgXyUkInUhL28uRFlr'@;
put 'Q2FNSmFCZz4iQD5yPHR7VDZ6IW5aZjQkc3xZSF5CSGJQJE5nQEMrd2RkbTgjZGteJTFaLFd5XW5+a2ZnJEB9P3pma3pAYSRbal5zYWROXXU4SGxyfHtGOndldDY4YzhSVjs2W0d8bEl1T10vNzYiSmVMS0RaJT0+TTNEeX1LMm5rdDBsTzNAYDxAK1VYTjM8eSN7W3I9U3kyZTE7TnJne1E4bCt0'@;
put 'QH1WaEk/TSpucVEoRCgieT1bPUQhXUVoPUFTQitKUCFqVSx1bjQ8RXYoIikzSkRKTEhzZG87QyIrR2ZQY0N7U1kuZU09QDRPfW0mclV3XlN6VUtSKjpPKihyJl99TDpGbH5odzZvfGZ0VFtOXndgWGc1dDVdNzx1e0N0eW5OJGksT30pa3gsPXRzaGBMMHR4TUBHRl9zNHc6PSlwN1hyTC54YCtE'@;
put 'NVJiczF2e0AlWz18akUrRlVjK3RfeU54TTBgSHIqbig5YHcyMko2UHd4dik4QiR0TyZtaTxRIlR9Sy9+fWchP0dRUEtdLkIrdVhjUHM/aDV1OXRCXTFQbygkWldAQ31DaD8pXTtKbDBhKVU/flUyeSZxWC85cyZkNjkrN059JG9PXk0jLDYjUTU+fCJsNisqaF5UeT8rPjsmfiRkIU5ZS1N5WEtv'@;
put 'cV99aXBvMEdXIlJEaihLdGFpJEFHYlEkZCNwU19pNFBuTWEhb0tickhIa0ojRVVnP2guZmd6d1l+b0wzO1FjTzpLPClbWl5xPkZESnV+ZH1nTjBMNHZpdklaKkpuRX5lMjcxaUVPLDduXXBJLCosLz5jSlpibzhBdUdAPTkpWkt4I1t7RDojY3hUb28lfFRLMG50Lz0ra3xacFpSSFVjbDlHSHZV'@;
put 'ZUtHPzpuJDAwSE9BPEFeS2MuPnh1RG1ndFcpNSk0KV00bCQkKiM/Xjl3Q2t4cGY8P0xTQW1mKGlIOD1UYnNOQGJLITpXKlQ8UStuWWpobkU9OXZKIz9xaEs4RU9QcnRyaTNTMVcqSjZHSHNjMmAwbXFiLHpUWC89blAvZkJtNjZjUkZtTmV0dSlzJmNdWz9NWHlUWlA5VDUhKWpXZ21EVzEkdGQv'@;
put 'KTx+LEBLNHhoWT9TLDU4XV1UViU2PTBhOz0oK0EiKFslP3UuW3VlNn1qakVJOytVYXFEVitHajhBWmxIOCsjIl5DXnc9Z2Z3WEhpTGRgWE5YUkxuJkNaXn54Im13dl1mS1s5OmpjMX1AViNUfDE6bFJFb0c5JTUzVGF6MEhUeEEkZHkkOyhUODFHeiVGfEV1NVszKktpNUZDVHtrOzlbU3cmTUUq'@;
put 'dT5yZ1c/dWIsRmZGbDF3dE5GaVghfXp2ZmhDOWQ+azZlLy85eFFrK0ZeNTZRbVk8KUczeS5fNEl5RlJSLnUwRzF8NUM2bTE9Vjh0MloobHE2YWUqJmorKmBbXmElbDx5bWtUK0pSd1Z5VT1ZX0t6WFlgPXkmP09rPHF0cSgrIVEmUSY3eXBaMGh5M1lwYEohK2tbJHteXWpJWntqNHlINDh9bTFD'@;
put 'YS9tI2wydXskXzQ+eCp7ITNiYWw9ezd1dzd3OG91czZZVXthb2Z1bkMjWlg9d35VIyJHcWZYZSo+WClke3FQejIvQ3ZiJnZgfUgoQmYyTD1wLj0xfVlDNE9JfmloYHoyMmZiZltnLFF2K09bXyUxTEQqJUlOTCpsRytiUHZNPFp+P2lEMUBOMTo9UTlhNXlvIz9gKWFeQyFJVVA9V2xuQjclK1km'@;
put 'a0F3Wk5DL0ZySThJJEVmN0I0d2JUayZROHM5JTMheUU7Y1hhYHguUDQ7MVJ5Knx0VF9xcHh0MHQuJkllcWUhM15YfEg/OkUjLjBoeSRMKVApRm9tLFR+LlFybmN8TVpRRzVvPy4wO3BQaSZYJn0oRH5TN1E4dVc5X25DQWMkc1l7TXd+T21uMjgkeDlKYCVoXzQrLll5OWsoY0ZtO3dmK1ReWUxW'@;
put 'Zz9AYG0rJSU9MnIxNW9Tdzp0JVUxeFhqQWt6QnwuSitKOjg3bSRKOzJERzhtLE1JcipbUVpgI2x2UyY0VD94PmtyX1JOd0o6REtIezNUVC9jSD5OYnkudl90VFd9fHhoSVgjOE9jcnIuWmM0KCF2RWxFI2oxMXA5QTY/X2JnPz0hQkViTD8jTTc+R09ZfDF4ajtIN2VHbyklbz5wNmZTXkpRPSpL'@;
put 'cT9GU1NZREs7ey40dFh5UVNLTSR5c3wiWyR7SG5yJG5tXkBkLmAsZndId3J6MG45TyJyTzpeejY/NXlJci5DJXVkbyF4UGxOfCFHbzFseUkxLz1EVUxlQEQ1Zm5VXjozOUE4YnFERzFnS1FeQGtTdS55YUBBZjFkT0J7cVshKGdJMU9RT0JYRFRKJkRvLGR4eSpSPXZ+T2w2I0dmMXBbc3gyQFBN'@;
put 'V2I9d2ZnYkdIbEYvc111ZHlHWUlZMS55ZDRzTFgjNlk8aD1oai5QV0l+WztqKVhQc2pzJCFdVk94IyFmSXZiWWJFMVkhK0ZsSFo9e0Y3bzwiLzFTVnEhOXw1Mlc7PjUuJWFESClNMU1MPSgiXn00fXV6dEldNGdLZz82U2ZWVzE/YGU4VkJIPChZflMrTCZfWn5gNUZMLFJNNCVefWA9T3FVUWol'@;
put 'dnA0JCpDVl5gUjx8anBuIUxQeyJZbWRjdT42LjA2bH4zLz14dkAvMHE3RGYubHxlPTpIPU82bVl1RGVJeTVefWZpW1VRW2Q6SWFwIjFAPFJCWC9nQnkhd3tRKyVNcis7KGFoNiVYZXNvbyhvYXh7dk59Vn1QN0s9eT96LzM8Wix7ITs3fiFvaEpYeSJRckpqLF9OOTwiYUl2MWhCNDxyIkdFNXUi'@;
put 'RCp4Q3smK2gre114Zl9MT2dNKGpJQDRLJX1qdH0rODhAVU9aeEN9YyElaTVmXi9rXTVNfD0mYVhLK1smNlg8JjxaWE9HTXt9Xj1rYVBsb11wSmNqcFd5UntaeCNvO1B6dEl6MElkM0Q0QTw7bTV7ZjpqOiE9R3xvYHZGaVorLCFqKSJDLjhWfU5CKWVvLHdzXl1gRFFPXVkpPCU8Sj47Ul1SVXRv'@;
put 'JDNXN3Y1IihqWTJIIXg3TjhrUEVtT0twYFY+XmY6QXIqPUt4fi5NVjpLZ2JAZy53V1FodEleIVVlaUF4Ok9MLnQkUXhGUlckL3dsJEBCaFtMUnlyPnlgQSYjSChRW3UmMSRYW01qOVZvVlQ1MVpXY2BOYltXWWQ2czdiWUBFTFVzSVNhQz57L34pKyt5bUY8cGlbT15CZyVtISE9KkRwIk45RFAx'@;
put 'JCM4T0MsKjV0bHcvMCNYKWtjciguZiVsaV9fS2Z+Jl1WL09KdGJSVUY4fF0xSyZbYjNLPXd4Y01NMi96JDcsSE9ESTdrPF92dFJpRHxkKHhrRi5RRExOdztiW1opfCI/fntGI09uVHFzfF82ZiNZfUxEKiNSdDBOTG1rZztmc0NXO14la11qV1gleiRVUElEU2gkKjFkP2dWPTdwL24idk1UaXZM'@;
put 'ezx9YHdmUVBfVi5bS0hda19tbkAlMDkyMDRlezklcldhMHhQZjxTKk42NTtVNDZEbEdlaix6fjlfbjA6dVM/ZSx4ai89SWReP3BYYT4sL3Q+NStnT31OO1JDT3loJlM2dFBJRCMvR08sfnU7WUA/JSxTYWRtITlpM2IlJEVAMWBKMktfLGlFYzlFVG1uPDE7U3VjNkVlS2RMOkImLGVYM0IuSUFF'@;
put 'S2VrUktqbis1OUx6UiQvbkxRPSMjaV8hYm5SZz12UWcrfGpROCM5TFo1b01GMTouXjdyS0J3Lik1U3tLSW0yRkd3JE1yKmhUNkp3PTFkWUVbRSUzfT4mT2ZKKG5od11vUGkyUDpEK2VsKFN0IX4uPkJFZjN7QU5sVyYpVnhyTThSYGYrPyk0b2B8O2J9VjBDa31RXytTWzZ1X1ZjKitVIVd6cjE+'@;
put 'bUk2dF80WU5WWiVvODRwXzdhMCp9P3deSV8ubER4NSpiTklvcShyJj8oMilLMCV7QUx1bV9MdkpaKyZrUFFkKU10Tl8+VltKVlBdcixNaiFYeTtDUkNIfTc/IWt1I1l2TW86KTNTaVFlX0hDaT5dK2pnUmZFMlJacFRdUCVDdG5EX0BeRy9HLihyMkkjbmw1MyRkIjouODg6Q3p6VG1WRkJgTVNo'@;
put 'Pj5QPURdInRgOi5TPCVePE0vbyZiOXlqeysvRVJIJTJxWGJ9U3YwXWp0YCw/PV44QkJzZTBaTyVXfVtnMFNCLk8jJmt7UW1UR01uOXBNOFRjcjB+IiI1PDUwYUYoI0MkTCgrdzs6V2NMWH0xYVNpOlpVKFA3bUowQHhJQ3l0NWpDbixAYnckRFNMeiEocGVUVnJHTSwhWjdbSGJffn1zYWY4V1M3'@;
put 'YSIwLCZPMHp5Mi8kUmh7aVgjaitmN3Y8UH5aLnQqeX5daCxBenlVN3g5TGwkKzQ4akZOc2EhQ05MIV9XbCk8cyojXk5hXStBN1JXI25sPDJ8ZmYiTys4MElKZHR4ZmRlVkVGQzBZa3k+Jj1KREVyRmt3NCFwTSRBMl1kMH1KSUh1PFVSV2lMVSZkVk43PEVNZUBneyszVExdZilmNiJYKiQyV3g2'@;
put 'ViNxZyRIQ0glJjBkZm9MZXFjQUBSeUAmbXVGRSF8QXcuWEd7JHxwT0F7RzxZNHJZKUhkIjxALjI0Qk4xK0V6NyVBQ1tWXl9WIWZ3dnk6cihkaW82Tzw4ZCojTz9mXVM8K3g/PFZESDdlXU9CKkBvXXh6Vys0ZmNQR1Y4RCVMS1FaUjl+QkpeY3tiZTxpKVskb1AwJHpYSHd6cChGS1lmWmM1VHQ3'@;
put 'Q2M+OEM9WjxNUlRhS0F5X2Bab0FbUXxSY15CaFpuejJBckpnSV57QWtGW1JPdCtIOmc4UUJAOiNrMkcweGFkfU9+WlJfRUNNQjlVVjcpUk5eLyJgaiFJQTtrckc1a1pqelcvdnJPKDIyMHkwWldSP2lWajBYfGdZdyE5O3U0YShHUm5yWkc6Qm05c1ckUnJlN3t4XXFVL2BpP11nK2IhdjJzIkNy'@;
put 'enhjdEJKdkYuTF5+K3QqYEJKNUlzaTY7KFEsNHNSQk86R2V+KVVXI2hnbVVxLCtncGd4U3J4djZablV3elEyXzZmb2t1aXhdcXBifklzSEg5SV9QSmZSJFs7cnFOYlVgWHVCeXhXRXlEI1h0byx3ZGg/I09JSSgpMWFicGdwL3czWShGfU12OmAxQVQwPUF2aHQzPXVJLEQiRH50ZiFzWjJNbShy'@;
put 'cHoifiVVRndhPUxVNyRSMUlVLkBEQlJMeV82VGwoRCQyUnR8ZyErYSRBKSRbYF00YH5Wc1d3NVowVDMoemhuN3g+YiIuODhuTl9OYTh3UlduJVdJb0xqK3JYNjgmSll4RSx1aVQ/Zzh0eSFUVnh+WWovU3ltKEMmJGckNihCbzQ3dStWOT9IXzlNWCRxcytFd343fkZ7b3F1aTpYck93L0Z8Y0pa'@;
put 'K3JsNUQzXlR+TGh3TmU8ZSlpK2FhTXN8QlBxYU1EJWlRZWp3ckhJIkFqMiV4N0dbfSRMdTFmNEgxIm56dlcmdlVsSTNTP2RPdFNbOXRmXSsmQUpiTTYzYzBXWEhgPCVJT0pfY3w6IVpmcC9nfk1xaHJiVWE8MHJ5WmgvJCxkPz5QNWE7KT5lN1hINU0+LGFQblRqSUI9Y1hFSywhWkhUNywraFBG'@;
put 'QVA4X0h7dzpdfn1ZPldlSH5bXVl8QT1KZjlVRlgram5MYn1ea04oP1cvSVZNdXZSXktMaCF5fWlIaGp3alB1TnRhemp1Tz0uWGE4fnRidHZNWEVRIVlfUFUleEhNPSsheSxQeEVOdTxmbjtBNDc5LlVBck4vQnc4Q1tfWjJWLnNLeFMpQ31ndkVURDZ0WmclTiFZQ2djMX5hdVo4NVZCQ3hdI3M0'@;
put 'dUN6ailVezFqbjE3W15XXkZ5TEEpLlhtKXxrenkjYCl9ZjdrdlF7X1EyWWQudXNffnI6aXNYUHtefjVoP0hReER5QVl6SHBRX0o6VDM9RkljNm9aIURzaH4mVy47YkghSSMqcy5bXUp4ST4pPzRbPU1DLFc9TEdXZm8/S3peRVhfOVc9U2dlMTNhL1YsMkx8RC4hPTpgPGc9VFZCND1oQkM9NnRH'@;
put 'fXRAP0hsdWpBbmFvJEslZCZ7XkUrKnhlQVE1PFp1SDtCJVtPZmVJXnRPVUY1WklAdHhodWNmPyNzQzE+NzF3OS9tNktKbWVINHZLMzVNUWQrUVshXipYYFpAek1Db3I/JCwwcD0mJVEoVnlGdSs3Kzk4eTt8b1EzKF52ejk7VXUzVSRtUyMzNlhwSnAvSzJ9QEBsRXFCaVhGSjh8UUB3RE4qR0kx'@;
put 'UzpoMUs9WHk5YDEzLnp3MyM9eEUqbGxrUFhnPzwvdllKbHZaQDZIUHspUCh1fVkmOCJ9VEFnY2w8RmI1blgsYUJdMkdZWm82UEtkcFV6ZzUoJE9rWWRDNHc3cElUXXUjfGVkPj96UWB4WHV5fm9mandla3VuXz5CbjNrcUdhQT8sSTVafncxcnNkelM6aHBfKzd2cT5HST5eKT40eVBGWj89dXNJ'@;
put 'eCkzOXBVcHFEdTdJT35oMEA5eUJ2WV83QnJ0T0VJU2k9bkBzUUNxKkE1JlNfK3lMbTZdYzpoejc+cjVlWV0lTCFyPV1TSShURlAoTiUiVmVWUSxQQFE3WTxfV1VxJnhmKS89eGc0Tk5HTiwlRyFFPy5lPC94PXpmZyZaemNUU3pnIjkxdzhhTmcqMUdtRnNMdW88OkllZnIhP1lUMjlAe10yX2Fj'@;
put 'N1EueSptYV8uPD12Zi9ZeTtZZ1lsa2VMSWQ1bWcoSkw3PmJAfEU+akIqZjtRTWVmU2ZMLEJ3fjx9VUQ2aHFILj1pT1VfNz1+RWJ1IWVJc199KWxmKElodlklMD4yfkIqW2xFQS89Q1hCSXhTKEpHWyMsX2Y6aiI4Jk8/U3olNUkmRjVUO312JWxXJENJYF0jeUBGNih4ZDJfeVJ9IkpOTmdaIkhb'@;
put 'aSQ0dEV3K3VSKSk2Sk9iKEUvWGU3KW9nb314VVFRcitdeCpfUHlpSXFIZGk9cE1+NFl2SiF3K0ZiRVJ7eEo7O21wTFBSYHcyeFVpcWByXjgsZE0rPVN4UlQrNFk6YDY0JiEkXiNrT0x7U3dQYWooemIxUDAzN1RpXUh+aW5+QisqYUAvKSNzOWt+Y3JnNVJmclpZaFg7cnkmKCFEYkcoKW05IUA3'@;
put 'Z3FifHNdajI6XSMrNmdRZGJSeX1qUVtlYGl5UXdnZWFhfV5aSURFXTMvPUoibU0iSnpVSkxRb0NdSVR1LihRJkthWGY3enZhRi5Afnskc3dqO3QwanxTRT1DIWExZn1xQWFKX3pxP3VOeWgrODpkV2lKJDA9P2VDXkZ6WUddKmVAdFhtdCNxQ0lELiUkZXkyO248cnpTXnNZMlssRTwsU2xBJW0y'@;
put 'O3Q1IS5QfUh6aHNpVS5kMSY5WDhMNmsxUHI2MjF3bUYxUTB0SDUzQU9gRiNSfEBkJk5pMj87cnxIVj5IfC50WDprYSU2eUpdcylAVyN3ZlZLaGxneiJgOipITWdubCNYNUFHWDY6Uj4iMTw+STlsZUFAa2xwTThod2AlZlprJSlha15kfFBbWjhbblFTdkd+ZHNzKXxvMjVEdj1RKlFMcVEwS1sy'@;
put 'Zi4pJFY5cWw3fmVRdFNRO3JCY2ZePjpNbFBWN1FCaW09PGE1cCw3NF4rNFlZRHsrczMjPjBWLHhYOUkre0QzXWVOQUc+ck5qLnpPX2ZodHl1Jkc+fVo6JWUzODpbSnBNSGUsfF9Obnx8NFEoSnI2IVoka2RaQGRJPnRrWltDNTddMG9oT0I0OU0pbVVgeDdXJDNAQEwoQWorJHsmaFppJSZLbldV'@;
put 'RkUqcm8wMlVRcE1ycnRkUTo4N05Sdjx5eEI9eEVkTUZobE46cE4rSVVmI2lpS1RzOXJHZlBlP0ltTWNUT20wMz97fVZESCRnJEY/NjZzYF84Wy4yZyJrW1slJlFMZTs8PFZNcDMmQUlLNzI2UFE7Vi9pciUmMl9ldTRTNXwieUIsWXU3LmROIlJpWkwubnZmdHUhemF+VjBXZWk1YmtDa2dTaTk0'@;
put 'dF5bO2NnKzxpZll6ZHR+MylbJjwuVDJLdTNOUnZ0Nm5RVXBZMzQkSyJZMT1oPG5fa2U8SzVwbD5fb1hGY1h1JGpMNkI3Kl0mYUxyMFErZjQ/THZgMnUvUXxjTG4rSXlGT11vQm1scVhIT2AuO1BbInB+O25FQH5ac35fV1goRnIqXzw7RnUpfktdcTIrNyVLUkhpIiIsTn59X0lqRFlgMCYmdSx8'@;
put 'dl8mSzh6OHVjOFs2UVNARnVAKipJWlMue2I2VDVYdFkvPVhZWG5zXzA5X2FNaUBVMW0wNFgrNnRiVzRBelcsblk7RmtgMmJUWyl1eDZYRU1APTJZMVo/cXsoZixYLD1mQ0A6Rk0wY05RfD5rcERHN1ZGcVd1WWgybkkmclFlSkZ5ZkdIRTczN30jVEZJbkcyfnxrPzw1K1dCWThBR0REfChDe0w7'@;
put 'KHdFbj1DdEpeWkMxeGlEbzxEQnMualllO3pKc3pOYC4/SDo/by5tWTo+aGlbeSs2MF4hNF8mXU5XQ1pJTktGSVpnXzwqRl1gZzEldGdDaSh2Z25LSXt1JXdddj9WeHkoYEJjKnBrI2FpRDw4ZUtAMXJoWyp2VzNsUno5KWJGWTNjO0JDKStXNj9ITldDSlJ4NHwmRU9ZdXVqfnIzIlloQD1sdWtU'@;
put 'SHJyYT5ReEQ3L0xxNjdeT11wbi5JYm4yJnJwLmIlemM2Xy8wfm83QHtGN2g/KFtYW2pnK219bCZ7JkxFZkAxaVljUG0hQ3VDMzRhTD9zOyNuZDFRV3ZiJWI5VnA6IytzVlM7e1RgSktHKkdWUWZoTT9CKzxNRnU4ZEA0L1lJZHElY2A2eT1RNUtsfTJCfDVkfkJVUHVBWUk6NDhJNlcxT25Ha2hb'@;
put 'b0BNKUN0d11FMig1YX5GdyJLM2o3JX1NTTxxZDw1LCFWMWI2VyxgYEsoPDk0WyhONGh6dXEodEt1SGVge0YpeS8oUUI7Qi9bfCVnUz41aXlBMUlpcyxWJiglSXQsOD9dKU1lRW48bG53RjsvLl8jOXorSyJ2KUojKCN2aHQvbkIvJDg5TUdVSHMscDVFXzU0fCg5a05dPk11KnF2Nm9DKFBbZX0j'@;
put 'UUp6WzldVCZXMHE1UzAocz5dZ3RYX15TQDchR3NjW3lgLC9KaFtsRGZnT3gpTHpiaXFKQSEvRkgyJWQweUdHZ1AiNi8ydF9ERG07U1RZNSoxN01aMT5GRF9kZ0JuLGNCQ1NlRUI/eDpJR0w4PUQye3d6NiM9e01yc3BkbGAzY1YqOVk+bWBAajYqTjFAX0N6N1Y9VmR4RmJLSD98PGxXUkV9dkhH'@;
put 'M2RJTlNNJjw7TV59RVE6MmNUa3hfYlk9Jnc0PyZdRD5ZMjJVNWkmc3tRKHJ4SEk7LyxLNCV4OENeRzlxfTdpTSJHInIvUHciPXxbaERlRzVAQEY0MUVselI0LE54InI8Im1zWlgwIyJtJmF6elJ6IXJfU3YzZFV7M1shMTVVTTIwWUJHbzNZY35VY3hQcF5GPUIzeFlsQEJNbXFifF5VTVV7eExW'@;
put 'SWQ3YU9Dc3t9dT0oa1JRInRtcktsZW5bd05VIldbZEJURzBdMEB9PHY+d1ciQ043V0tuWl96OTgkRXU7MCFZMHBQQ2FrKn5jLENHSmNNeHplay5UWTl5YiV1NlleU09TakkoNmsje0FqVTdWL25WcilGODlbSVtFNGhUW2R3NkJ1MGNHQlBQL0QicXEvVCY5ej5TLEomJUZCcHR4JSNsd0I2NyRn'@;
put 'JnF7RG0oPTVWUSpxXX03YW10UTohb00wSXd9Kz50Uz1HKFZ5OWhKclNIUF4ha21aR2Q/IyF7K01FanhYa3BFbTFVbHU+LFlbZilfYWs3JWU1eGIlZU8oaUNkPEd0TCY4S1BNZEJlNGlkfGp1LkpLe2ZeRCNXYkthUUEoSV0+KF46SXlpaEx0OSpaMkQoUyVEey9PJkQjJVozX2dtYjA8LyM2JERM'@;
put 'b1h3Mm5qTXt5WF9OIWJIaDM9NHAjKk14QiwjckltNkZXbWs8ZDF8ZVRsaEp9eHI3fSJ8Mn4ifF5rW1NWWEpENExici9tNj0sX01EalpqckFEN2ZuencibGdaWUlJZUcydio1QFheTiprZEtiVjglYi41fWp8NF19RExRbVhkSzRlNzJXfHxPT1R9OUVNOHAzJWdqITs9eUREI2BkQGYlLCpgUEUr'@;
put 'ISFyZEtbRUQ3JVZVWmYjeEk4SmUqWnkhU01PZypxeH1oc0IoOS9XN0BiQ31wfl8yZngsclZVbCwwTTdCY2B8PGw2TSElfDxhb19vbHNoVyV4MWcoUHgkdT9BSUhnNWxeclFLdDNtMn5Adz5leXs3ZlVQJXZQWXppPyRFZmUhfTlwPSombDFZKD1UYiFNaGZbKE4ldlh7dColfXUqU1YvOjxdP2pe'@;
put 'RCFZN2gwUzcyNXxKIS8qcjdZMGEucykme0RFfnw6QDlvX00rdyxtdURlfD1jWnI0NFFROEg2VlhiIk14dns5Pz5oakY1ZGdhQm0kKyV1VTV1eUZ6aWRySz0wbWIkWVBqMkBeSER7dDkuOW9HVHlHWk42VlYlYyRTQnBic1RrY1VNMENERHREb104Nj1VRVsxXn5rKmc/WWtCb3h5RmQ3P2dlJHJa'@;
put 'RlpbNXRkWFVqKjF1QFUhWTUuaThpXiIuO1pPUDJeaGtbdC81eU9QRFdNLixzaXdNZlNQMkt5M2FacGB0dGFUcitEOCNLS3l4UXtpfUJjWTZVdHZKP2ldaUM5YGMpNENZbHRVYjdSKEVqWDtVKERFOCJKblNnTyMqK25gKT18YH1UVjIwQV0+W19qWHdvU2Z4dDxvcDljSixlOzMrU0okemRtXXd6'@;
put 'TjExXVBHWVdCdSNxcTlpKTIjaiZLNUhPYVheNzF8LHIqfWN3aUdkTG48JSohImowN1JGK0JJWklgX2FSTFJMVi5WZSk/Ql06eGx0PnR8KStrcE8oLilMcXV5ZXAhX2YwVGIyNDk0MiQpL3B6PjpLLy98PUIqeUVDcEpyPzdBcyt2eXtvczF5SF4qOCJMekZtPDhHVndeTixObUkzQkNWMCElRHxt'@;
put 'I3x6bnI9PlRpTjdUU00uclgjUkxCfFZLKi5yc0lzYStlazckNCxQfjB5IStYUmVVMjRuP1UkSFlsXSlfbGYzeWMoWkkkPkZySS81aj17UiFuNThKVWR3byRCQWtTZF0iWi8ucCZLQF5DaVEyWXgvRmFJVHcuLHNGVkYjd2pSMlFBQGgzejhaVH1yNXdWdCRqVykkSWNOU2FFP1VpcmU/PlkhRGk3'@;
put 'dU9FREFMc1BEInszdkNMKjEoSD1Lakd4LzJpaUJoNFgjUzBnaCNlamBbe0hTKWJVV1l5cGMwXVFfU2lTNHJbLGIzWi5vQXZtZTtVXTwzP3QsbjhmekdeWCZXVUBzfEI9OCJ0ZzVKZSE0WDZuPyp2eSEweTckNnZkaH1eKUNVYE9+eWA8TSlNcywrdjlteEl2KGFFcj9ZbGhhYnBROTtyV1NvaWs1'@;
put 'Q1hMaTxKKnZNbCJ7aU5tQkZdKjFHUzRHYXFZPjdrP3Y4RDZuODB4OVdSXUB6PG85Knlxb2o2K0Bfd0NDeVchT21POF02O0UqZlteRkw/bDlHREZjZDYhbzNzWjBVZHEoSjxnVFBie29pW1NXY3wobj1bdzYvWEk8JWNXJGI4P248cHBNN0pbZjBdL1ZTJmAwX10jIkleM2JzRSwvM0MuIXZsfG58'@;
put 'cWVTbVlyfU44dUZDZUosJnteQClDPEk5KWdFfDJfYSh9SmhMSys4d1c9KCNnPChuRUM4SVpnU0dsZWVDU1FDKyNGRzkzYGg8azwvV1dYW3hCN3hWek9GPU56XTJLcHJabiRQeT5paUU4VDspejBTbm1oQSYjP0ErbisoOHYvQF5UQUs1aSohUEA4OkZyRmoqIXYkMn13cl44JnA5L3NlIjNYQm9s'@;
put 'UkhDTGExXkdZajVLLyRvaC90e05icn58JFthL3omVX1QNiFTamF4Tkh8NCNvSXZ2YGhSUmhpNkMsU3h4WlJPdis0aUJrI0wvMENbWFJ2ay9TZlZESD9EQ21oOkYiMDBFS04idjdrVkpPUm4rMkVhRi8uYFZBSl9DUlhAVmp+UWVheiI8K1heQzFDQW1KaT1CL0l0O0BoXXhUITdVZEtXSjh3YS9l'@;
put 'YU5SalB2biUpPzNpVkdxUFdQSnZHcU8uX3wvZDlnODIxMCE+aXFmXStUUWhpZXNlUzJZMXVENSRfX2BUYFtvNXhNeUNLJGZDTHJIVHFwX1hKOExCVXUxVzlYXnJHOWQ6ZWxGMHdLWntFcD19TF5NRU1sL2RwQFJeLnEsVTcwKHAxWTBEZDxpNklZcUZbRSk8YEpqJUk9aVEwJCk0dXpLLHxySHlG'@;
put 'LCtON0xQMTQiLyIkVi4iMkMlZHpBSklCMjRsZXBrSypMUCUwfFh5alolSjhLaSVwbioyeEg1fE98Q3N0a2NAQnFvPFJORCFkSz1WYCNSe1BfZHM6WGRvJmRFZl0zaTBjZkVzImEuNHM9Y313LE86ZW5SeDFSLnlKLnVbM3lEJWs8TG4vNzlHVF52Ny9tZWcqK2FoKkJyU3NiWWlaNGRQbTFlU3Qv'@;
put 'JFM+PEwqfXMwN2dXPF5XPnt1cCtdRWY/JkAyOyomUU47W2VCSGA3KDlGQlJsKi5YLilDKS9uV2s7SCQ6OV93VzYpOCkhI3h+MHVHSHNQOVsxRzlAZmJmVVVJMVtNYFEyTHVARjVKUHdRR0NQIWtPSExVQl1gbCt3UXB0ViRZYVE1WG5lWyFJI2AkOzkhL092R1chNXRbVDFreldeRFoqWSZMREhI'@;
put 'Wzh4Y2dHWERSdH15Nks7QlpNPyNKflBtayFMJHdHcHpqUENFZ0hPaUxYXnc5aUJ2S1lhZ2RbciZqIlRYXy85aUUhJWVAM1RATXNeXn05eHFBNXVhNmRlSDljVGZuek97Q2FEbU0ubTtiakheSDVmT0l4Yjo8QmJRXl9FSU5Dd1g3bE92OWlVaE5ebz03YH0kbmp+Z31dLlouRj1pTlJjRU92dmlB'@;
put 'SUtET3ZnO1F3MF4hPFlaI2Y8XjtOME9II1c+TSQqYGs3Onl4WFUsUGRnSFkzNFVpWkI2M2pCXXYmSUglOFReezpCRzdvKTZEOXlgKj1wMFdXSzYxUVI8dSVuTn53JW8rQU9sQ019NjFRNyM1UWlrXnVYRnF+UV4/ISVzIzsjJjFRU31PNSFkKGdhSn42em0lKT14SHo7LFYwQFtVT2NOJi95c2E6'@;
put 'Tmx2KF45MCFHRkU6XVh3cFg6NGE0WEUyMlF7TzJFfDBLPXFJXiMlWHNWVEkmanJ6N3gqPF0/SWdobUAwbyphQSZhR2xGKlN0S0o/KSVVOFBraHNWYEB7dSJSJXZuZG15WCtDVSNTQjpSU2o8OmF8Rm1icnRtLDReSXcjaTY/S005bGEhdTJYQF8kWXgmNVBATHlkK055P302MyxOe3BafllJcn1M'@;
put 'Kzw8eExhLi9dU3YhUyg9enY9eDkvZyYxLzRpbDtyZ3VxNEdoTVZ5ZGdyZUQoenZBQzEoIi9bZ1sjNTx3dDszVDUhcXpCfT4vTmJHVlVBMFNpRj8lWkVaeDdHOiEvZm1kOUFwTj43aDxwIUtnQzN2dWwsT0thWUZ9I2E0WU42VWxGb31sRUtiP2lPelFHUikmdzE8KklJYmJJIzxxSXRKNUlURXl7'@;
put 'ZnJsMUhefndeWWBHXXoqVCleb21hWkAlRE1FK2hla2BhWXJqKzU2Llc2TDNdbGQpXVs/VEdMMHpxYXJ3V2xiK2tlRDgjMW18eEZJXmFGWCpkXkdla0tqb0hKbDo+PHM4dzY3VTRqPl81Zks/dTJkIW89Sip1cXN4XjlEYDhtRSF4ZXFCRXxCe103OU9INFZVWWhtVmBAIzNSSiVaQjsjNzlVJDc2'@;
put 'Lnx1Z01aclpaJEAuX1taPnw+U29abjpwbT1FQiF4LyVgPT4+OEwsZWUzKmVlOCF9T2IsPFtuQ2dEM01LenhDJWZNYWRhaS82ZmNxXm17bXxraXk4QD1hUUQwfDY8ZGlvMFM1Ji9Wcz0sKDsxTD4zLzgqKTs6IjhNTz12LDIjNDkhJlFzOmFlfXpmWV9LVFJ9bkp6L2F3Yj4vVTFWPSxlZWF2WzRw'@;
put 'SlB5akk8M24wMC8uOVd0QGU7T1dMbk8xLzQ2cyllbEdaLHFQfiwpWlo8Qm1YPmtCSiEhMVd8IihmIWY3dTl6fWpsN05NN3lUYVlkV0gyPXRLL0NzZT0+YGVGO155M2BmL2tBKHwxRGtxfktvYnZdInssNDlHWXkoRltKOVdeUWcwfGV0PXhBR2w8WS4kMzdlQDZEOyojJjtfaitnNFFibGlKdUgo'@;
put 'Y0lhOVQvXktrIy5ab2tUYVFiKWJ8dmpzPENSbFdTPTIqKiZBLkFrfiNLXmtHK0VBVSo4X3chNCxGckpjQ0FLTUY0OzBFTDxBail3blMhdT0kZkN2TTk0X2A9WDVMOTVSfUouUTFvb2E+S18wQ2ZPX3FsTyFZXXZNPy5XSHUlV0NmN1g0cUdrN2EkUDtZNWghbGhaK2FCbj8zIU85eDphbmBKSUtv'@;
put 'ZVZpZHpITGBROGpiIXdaWVNbVmR6L0EvIjlaNX1oVHk6YVN5VkdDd0leW3J3ISxrfVM+byRHPHV7TVRkUlRvb3AyQWl+MF9xIjRPeHVGLmZ0bHRHXVdnKS42fURaYyFPNWNiSWRLQ1JrMV9qNSJAXn1dc1FdQ28qJTFDaFosQHtlSyZQYGpnKHBJTylpWS85fE5DOiYuZ1Jtd1c9ZCpqOzx6cW9D'@;
put 'YmNTXjhiJFc9Z11+bmNUcjlyd2VgNT9fJDhucWdfdHhYSERGdUY8dUtIZGNZSyFAOG9QRk0rKTVbaS87LGNJdTh+a1VGYSV8d3VMNiMhTCRHQ3dQPjFKViV7MUZvbSRhKSN6eHVVR2lXRS5MeVsrTjR8TiJiezxoJUVwLjRCUVRpZVA7ISolLHw2LmRnYyo+STM/PkcrY3h4LywmPyZSNGdrP2pT'@;
put 'ajwiL0Q+RltXOktwTjN4JUdsIVp0IzorLFI8TXc9L15OLDYjK3BubzdKUjo+c04oYHtAeUVvQj5mYUV2YCxCSl01KXBCJkExeV5KLCJ7XW15MWExVj1CW3MhLiwlMUIuOUlzT1l4UXpFbykzRiErK2NpOmhgP05IRXdGPFVuNDs5eD99fVtGfC5RKUx9ekRkKylebmh4Qi4qUik9ekoxUmJUXmw1'@;
put 'UCgkPjJMWDMrIntYKTxuJSlYY2QxdF1wNykrLCtzNHBLNjFqSStCI3F0ejshM09qWV9WPUxMKX1ZTG5lVmlkcEpgckA0Zy5WPW8kKy9WPWM6QndjfCRORmZjdmMpNDBgO3k1MGNHancjNnxUQnZeNy5DTEpXfjwjOG1MeHdBOWdsIkZGIy5LfHlzbTFmTzUwR1dtP3xucmYuPSwpeiMxaERHd1k+'@;
put 'aDs8N05FX0szJFdRYnhfR2h6ez8rXnpfSExdPE5AYng6M1RKQy98R0NHPWI+Ol9pRU1sbE5NblNyVXQpKkhNYUdOK2Z2WEs1JlFndyQ3VmplMjFFcDB3bCNYZVI4YVBoUnp2T1V9UXcobT1yM2MoQDVWa2FRSCxTUk9GU2BZSlJiN2oiV3hROFdZMXU5a3Z1PWAlNVZOYkxZWVM8KiI9NUc6Q1gx'@;
put 'JnZXL11OPmxqWDJ7dH4zN2dVR1olU2lzdUMuUyE0SXdNUHE0eGtuPFp+MnlLKGdgeFlZWXVqLyRVc2t0dV1pWj8+R1olRCsiMWZNS25ybjVzLjU1WkMlYXhQR1BgSnpleUkkZE1zUWJqTmZbV0Y8JmAvZyoxeF1BRmVHfHslQGBtRSZnNVhmQ2ZndlE8KHo3L1cqYFAlQzlGeV1WWF1DN0BIZkI8'@;
put 'NEl1Rmwxb3AkMT98IntQRW0sfCt6VF9PbVNpWXA1OGtiWUZ+JUBnNXVSUkk3ODE0Py59OUErYCpOSD1hRFQ/Xzk2RjNzU3VaYSxaXj44SDBjSS5ma3tsRVR9dHBKczd6Q0xuUipeR2Y8U3M9fFBdYGlmKEB6N1YhVUJzP2xwcl4+ZkBielBjcjMhNClBLzlvWlZMRGVud1hnIlRIYmgvRjw5LiRE'@;
put 'UG5MKF8zOGYkVUJhbFkxdGlhKHpJWkt2SEdTUkklME5GOUQ8OiZgfStPIkY8IywueXkkdmYkdSFIVjZ3UEY/X218PjRSWDpnMkl4WlFgcmhQJlZfJFlVaGZJT2sxPGpYQlcpanU7MzJkbWllUyZgdmVEYk0yX1I/Sm0qZ3dIKzpuQyJqWHYxYFEobFY9dnl4TFNwP09+Kj8rQz9gNWB2ZEtGeiZR'@;
put 'TUspZEouPys8W0ViTltvQF5vZ0AjKDRZJno7Knt7TTl7dHdVQGE4dS5uNWFOU1czKEgkTyI3V09jXmhpJnBMblReVWpAYCltdWFrWiNPNFFDO3tlR1tvQGsjb1pSZGtaJERTUThmUC5UYGFJMS9HaTppY1MkMVR0JjcoVDJCSHlrI3dvJi89Y1ZEbFBfUDZnIzp7RzBiN1JVMFZZfSUhSiovc3ZE'@;
put 'TVl6cTdeJUQ6ZixrMEp2TjgyTGF4dD9NNkhbblooWWdkfXlsWjJgNTJHTDE7ZFdoZCJ0K090YyRPJW5tPHhHMUhXWE85fChKJnhyZ3kxOEI3cXdOfVtYQyNpNjk5eExlUyY/fVkyKHNARlpaS093OjZCK21hXWMiNFJaZFh1U0VKQlAkWT17VjUyeikvPi9Pe1gmLGhCNjReSkY9ZndeIm1CWmVA'@;
put 'Q3lYPEs2ZWIla011bUVyWjh2ImBednFIUylnRD1hKXUuNWcpNmUxdDJlJFtWQDBYWWBscTdlalZLZWZ2dVhlO0VpKzUyR3FLOG0kP3kxLncqejQvLytWQG4+PklPYWVQUFRDaUJyN1U9S1koWV5YWjhkOmV5PUtzYDFMO0g6Zlh8cXtCQXBHW3xbM05QPEpRdFMuemAwSHl5MWQxbislbGA2ekZ6'@;
put 'UEB8Xm4+Ij5TSVI5KT1JPCNXSj9aQ2pETnwvOyh3b31je2RNSyFQeG8mIT9QNjU6b099bSowRGU/aVpULzA3UztVbiJERTZKXz9DIjBtVHx7dmNsalV4SkBITVNRIjNXSCp8bC9NdzAsW1NvTj9nN2hOIXJnW3xYaHg3XSlLNlJzUkpXLC9ETWFYWTJCa1dfYlNZSXhbak00VHY9TT8+MVRAZExZ'@;
put 'Rys6I0hrbEYrcno1dngxdFcvZlclcldHJUI8VHU4cSZaJXdRYEE6Wy85eyFSM3FvWlIjQjBFWWZ5QiYjakVoaj9GYmZxRW5sW3lrLGpIK3c6MWYyJWQhT1lRWzJYeG4pL1VJZCFvR1tFaj1bYkwjdWFCeU1yJTpHRFIlRiNWd0lsSU14PS9HbVB3KStCUDJkcDAhQ2l9QWRXSnBXJTRHJEUwPldx'@;
put 'aSl3Omhgd1ZHfktLZ0NIQTxLfG1wS056Tz0qY2l4PE1QXkxmL09TY3F1QlhiT0M5WWBEMm12NlUuOzVEXiwlR3YkZmd0QSxfUEU/RmRaVmsrLkl4Umdvdm5aanJmYWk3RHFIQmZLUlY/SyEmfTUhM1Z0W31SLnhpN3d4SjxjVWdLbVBZIS9HaV5sJlsoXy9EPixxTTJnO2NdP0pzIUdhPHhgcXpP'@;
put 'WWY+LiZmLjl5UWlYNSojLDMvbGwrMUs6fT89b0M3InB2Iz02LnpDUUBGT2F9PW4lLFVkM1MrPyl8KUg/amRvJjxXfDxWMykrIXgxOztbRlUjOVRjezg4W1h0SUYuR11gajxYPV1yW09xSik5TUwoO3BDUTNCLmEvXV0pPV1TMz0uUX4sMUJGXXJbdT1yX1ltPEAhNkVAd08/QlkuPStYMjB5MVN+'@;
put 'Lz1CWS55JTttWFpDen43ckg4PFUlNTVYODIvPm1FRk5TR15CfSI7QW99YEZHJmZqZip4b2hIWVVrQkgxViJqPG0kU2A/QGspJiJFIVN+XzJHSUV9bk5UST97Py9xa0p9bnAjeyxBa1dWeXdzN3phWWE/bDhnS1V6LCwve1M4N2I3SVo9VW41YlltOHtwM20wY3hdciNVOHU/XmV7RlRPcmwraDRo'@;
put 'Zi5JbDJIaDQoTUYxOkAwZ3JgUk13bjk9UXlwMDJqXTwzVEhZKiUyZlNpVT13IT5tbXY3SjJNNCFQV3t8UDxCYGFPI2RFd3RwbV1qZEEye0VGamppU1U+MUc4dyg9U3FmdUo/d1lkVClHLnNYVClvYTBKTzN3UEAwV3Z3cnZQKnwyYzxOPGw/QENOXV5NKDpKP2ZVWlc3KldoRiVjTi42dSplJEQ1'@;
put 'O0EqfGBlMXdLZ3xRIU9KOH1EU0wucjI5X1ooMDYwKzZMaGd3XTh+JD8xRjdHTWMidDh6KS94TXYmKXdJRy4vN3ZaeU0/USZyc2N9TXEzakh0b15AZ2htZFNHOEZjZjBfe2RSL0J+OFFhbXkjOHRCd2hJfjtHfUdmSCNvW0NWKGdYPF4/NFROXWFtWD54PE88Xl5hN0gkY0leaUZge2NebXs4PEtJ'@;
put 'fFciPndyQEs9aiZfWyUuSy9qcGNIfigwRHo6WWdPSHxyWTB5IUs5VFh5Ojo1PkxZbi40QjxKWkRgQENyU3ZFIWpPNGRVM1klazdZeEx5Qm43OTNOWnhLXj9gIUVSP3Nbb10qSUJYIW8lOHZhKUFdTX50YXU3cmE0X0U4N3NgJH5vcHMzPigxSzM+ajhqbElwR3VwNjU8YyxNaUoqOEtbQnNFcUhg'@;
put 'OXwxKz0/YT46VXVfYUFvZHFuRylZVDd5VzwrV0Joa1khSTsuP0poLlRsd3gpUipJMENQenosNl4/MlRgTUE1TVAxTzFAO1RnZmAjLClxby5oXUBCR1cqKEVCTFBMWCk3Oj5odzoyWHZHXVFoY01zX3peOSphSkZQRGlBUXJMSlJeNHgmaVUmQkhaOEh0RmNRMVlYKG5Bd0dSQEMka0FSU0ZENlI+'@;
put 'ZlowWDBsaU5AcGIqeFIlcWVJJG96SUE+TyRudzpgUm1aV0VHInRxSlBjRExMJkRNaGB8T1V9ZUdteVQpVDFDKixETTQkRUNiQ08jKSplfktEdz1COTxlP2tAb2RpUH4wKy5AUHFeKnVrfWlmP1VEdy88ZmhiX1BiYE5SLF4yaEVjJHlmQC9pWGpQNEx4cCVZOEo3VTZJYUV4ZTRdbH55TCYvMUhg'@;
put 'cm83RkV4ZmxbWEohVmBrRSNvXT5ueE1ic3t5S2Y3MD55TH1xbiZrKWU0MFVlNWVTUD0wTUxtUEpieDUhTEYxRkd4XSptTV97c1k6SU0qakYkdkwuYTIpMXxpR0dmdCtmW2pnPChnW2ZwVz5SdCpYWClxaG85eFpBKSEvbWpfRHt9KUYlRykhRzpZK3F8OWhfX2xrdU9gay5UM18raVFIV0ldfTM2'@;
put 'ekhLQnB4Zi81a0srNWtQRE1kOykpZXg4SXdzMVk1JVBwe0lqZDhBKThgM0xBeSY7JVlgVjJTb20lRyRKOU5xVGRETCssajdqJTheLntnRDg3aixmSGFUUnpwcGpAeW42aTlnPzM8eFFZNzh5Rmx+T21aTC5gWUxEbSJtdksmVmRWZFNvfC9UOHBqPzJaJXlEK1psRkh5JG5icVhuPUw6e28uUFck'@;
put 'VkVRKSExSz9ve1Q8MyZgejp3b0RmRTVVM0dVUkhnSEFvRSEhSF9qfHszRiEhRG9YLzEyV0MwakBDNExxdVJZZ3csQ2d8Wk84OSRZfjshdm01W1MlLEdeVixyNnxqIW9TLmJjJEZ5b2FLe0h3NV1WeG9iRW1uREZTdlt4fkZoT0NXKmRHeU82SWJ4RXJqSm5dZCtCfjlzYCtCYmlvb2ZkQzt3QDNx'@;
put 'bywpUzYlTDl5MVNGN29RLkozU2prOTpNM1VFK1VqajloJkoqTEQ+QiVEdzArTjdMczdlTVs7TjhZd2UwQHdvTV4qeG8xSmdpQ1RTdU1lbDptdipqQH5iJWYyaTdwYiVVbC5DbHVIMGlfPCJbTEV+Ym1qaV9VKHR6emJaaX1WLG5jJClEKyMqb3EzVk4xaXBPMUAxb28vLDEvfGdyLjxZWVIyZVRF'@;
put 'UWI9ZW1PW1NabClaUEtOflhISWtTLFhYbktbWW5HW3NSZzI8Sz1TZWJmJiN3RltFc1c5NFRGPFhIMGk6YzN2cE0pamd4RGQ6TWtSW30ibF1ecnsvcV1zaU9pT3dHM01ZYTtyVVphd1hdaHd3IWRlSV5qeUxhQU5VYSlVXmBEMD5Pe3h5VCw2enBRYVtkVH1PNUBbKlNLdkU2bkcucW1sX1YwP3Ri'@;
put 'KTkiM09pOjtuUF1FPEs4Vmtte2k6OyF7YDVnXmh3Z21TcDksfWokOkxZYXdqPmgjajIwW2pgYVkqcVpXRCp1cChSbDpuUEtOV2c0ZD1dRE1iWyNoJCV9ejhjLFhBOywxcDwvOXE7aWM5Vld3NlVYTDJuVDFaY1l3WzR+S0NFUldOOEU2fkteXW97P0o4fGw6ZXp9XSlUP0BXWjtnREVvd092PV1w'@;
put 'RCNbR1B9cWolZlt1WS9QWyEkSl00LDFDYHVVK0tgNktLL3dIXzBjMnkkYTAqOnJvRH5rdk8kI2tjblNMLlZ2WV5CYGR0dXB1ZW15cjolV0FUOlFaekVGTEkiLGpYRXwwNG9jSC5YdVUreC9iY0ouNXVOKU9nUD5qaSx9NypGW3c2WWVDVmd5QVNsNnRiPyZZX35nbzlUbzhvSTFSODoifF1qbSFV'@;
put 'RzQlYypzaWFCJXZHMGxdeFcqbm1DMiYxPn4kcyk2YDM9WVY/SyFgQ1ZeaWRFOE96WEp4ITw6Sng8W3JkRS47TjslZSZkXl14XzpnRVEyRjl5e05bOktJSD5YT15UYVpyTmp2Z088WDAmWz8sOThaT3hib043OTdFUHlYMkQuTTN9U3pUPVNmLk4pY3s8NHprQ10hWDJgUD8rPHNgOVZzT255Mko8'@;
put 'SzY3TDMuc3piTzRxb09ze0AhIWtJa0kvITw6WitCekZIUDwuaCFtMHsoN2dYQDRFWT06enh4amc8ZVJqTSl3WHIwLkcrVHheZHI3aUV1KnJ4TXtZcFR4XVZ5bzw5QmlXZ1ZZJTFWanlnNXAlJEZrfnx1YHReLnBna0NYdCUoL1A3eD5CfGBgXURoOGshfnE9Yzs5WTFjckN4TWdnfS5Icl9sQCpE'@;
put 'QTxxbXBDTWU5KF5KQ1s5RT1LWiw0e31PZHVzSzF3SFRRLl4iKVUpPW5Dc2ZJKFFqSEtYYlh9WSwjcH43R0Q3bD1GVyRCZCwlRXUubXIlQEFBRl4rUmE5U1NweVQ+IlpGT1hsWGU6dlRnJXNuaSopVE9iJi5GNkQ0dGBdcCl6cD5QbTF7ezVvaSE3PXZ2b3svVW92emlUb3BBPCNTUUR0dyw8UVAu'@;
put 'VXE5OTAiZ1FrQDFBYnNnRjJoQE5zOnIqKENTZnkoMk44JWpVWDpqY3poUVguImIrd1VkcVQjOE5ENSx3YFZCSlUpa2RmWHJAeWhhUzhYVWohP01ZOXlUNiFoTD59L2c1LHEscnQhXXM3RjxZOVRzJlojZkwrUWclKEFqMVY2WklHP2FiblI+YXpNfTpnXmR+WFhLLytuVDJwQEloITpLTFtuLE95'@;
put 'cSxJaz86ZCF+fGB3PTM3KyF4Y15FRCl3SkYxWCRGNHhrNyJ5JEh+OWpLW2VGWGwqSkY5KmIvQ1BwbkYjSjt1bH5deUxHZURlciU/Mk9LMWoxTmdWOEFkZjhsP1s5Wk9PXUpIdk91VUhRS2RsL3o5S0lpYiJUWHNxMU41NTkxZTJ0YmE1WklHRSUjbD9DfSMhISh4WVozJSU+Q0lWcSF0RjZObCRl'@;
put 'RXk7TSw4MkUkP11fK343UlMqfWchQkd7bTBRbUQhLGgpNT1zQHR4MVkkbUIlRCFHTl4kaTgvPzpNNHBldUQ8Z3E1THl1Vz4+WmB0dXtERjJLUGg3WmVWRW9POGdvNVFqIyRkfXAhJkBbWDBqYVsjP1VLMjBpcnlHZWl9WzxEcT1aTXlIaUF7a2pEM0x9OilUUS5jOyhEUyMvW2llQFZwP2h3RyMw'@;
put 'ZyxHZ0soPipmaTRLMik5amVWZVYzTHYzUWcsaGUza2t+Pmx0NVZXdSUwQiVMO0BEL0pNdTA6ZWEjRTs7KEFpTClBQWlSbzYzcTEzcjl0OUJoJUh4KHRoPml1ZWxpW0Y9JFEzOWp9VFpaXlR5WFh0Sit3eDRwUTsufjFKa2UpaWVhW2xKQndZRy45KkpVY15VdUQ7fWRJOW0uMVhlW2NFUENlT31Y'@;
put 'UiYoIyFuWjlCdl80YG1CT0QoXjcyVlJgRjdKM01CISl1NC9NZHU9ZVAobUpgYkQlcXo/U0RWQ2xyXUU3aEx0aD5LYSIoWlEwSChpd2tgZlpMM10udyIoKSMhTzBQIU9OVW5ORURuaHspMVBPc2hVPjJLInxMKUMjIXRDKi55NVc+eChiR2hNUWVwInxMZj1JKF1LMF4hLDpaKGZDYW5MPldYcG1f'@;
put 'THQ7SHteVVRAXntlVyFoVDVnPyhSRXAlan0yTUYsakZ0Y0F+VnF0SWlyWkVlSnJpWnhzKnMwenc7Yyk5VCsqfnRwMUU3VU4jZ2pAQ3NMVGx5PmFjRnU6RylZYU5gKXIvaWJoV3AhdkhxMll3JHhsN3kxSWVQOGIhPC4uQVo7bGt3RFtzeDl6SGhANHA4V1lLbTtna3xhRFQvSFJKYmxXIU08OU1F'@;
put 'QDkwQkgyKncjdXk4cGBOc3c4ZTx5aWg+WU4wLEcmSz5faG1YZXg1JCg4M1h6PENoREhwNDwpRmB+ZEIzPlM4VEp5Ln1JQ0A8KXEjbGdpOXFpVUs4bj9nbzkyUD1pbix4cWtfTTlLPz8qcTojKn0kKUloJm1SVyl8SVpiR2JZZjdlOFBOMjdOfkB0USptJWcwJHIqL0NFW1U9JSROTlFZVnxROzZV'@;
put 'Znw7PFhXIyhAak0pc3d5ej1kSUsjMyM3V3RBL2pkV2hAfTF0cWBiZHV4TSk2byJRKWxHa1FKJXplIXc6alZnJFpKQXZJQUJgJDFaMXZIW2h7PnspamRuZXldb0FwR11CI0xMdH1lPDB4LEN8YGhUaFQlYHd7I0hZSG9fWztuaS8/PnJYR01QS1BIIVA/fS8wa1pSdkxdJG5KUVZHaWgvYUIxWjwp'@;
put 'RjV+ciU1LEEkb28vYyFRSlllNV9NWjxHNVAyclFiSWw9aSZRd2MpLlpaUnRjVEY0WmcpZG47WXZ9SUddVVtDYEBabjVVJEpoI1Uyc29JfjslJjt1OTdpKClWVkJhMVRCVXVPbW4wOzxoUGZndC5NNFlwSTpoYjdeZHAqKihuK2wvc05JNEcrUEUrVlEyWEVgcTd1RStwYz05bC9jTjw0IUxrS3FC'@;
put 'amk2Q1pzVUssc0VjLHwkdSpQPkM9dWg+fUA6LCohQ2A0TEFGeU15NXxiXnBhQilGQSlQRlU9e0ElI3RBPzxTOys7Uiw2e2R4OyVDPCthaHgrYVA7QzlaP3ssTHtqZiw5PkxnN099flJsIzw1X14mPzlJJH17aG1VU2RyTlosMil4cEZMbClIaUBHU2pNSXFPIW1SNmZJVm1vM2tURjFXNUIwJTBD'@;
put 'dThzRWlEUjkwMVRLWGtaKyxLfiFTfVFLVTAxOVM2eys7Rm03JEt3JG5zNlpacSxeP2NpVD19XWBLaHI9NVJ0cGFGU0p9NERXJSMkSmtmbzdlLllTbnxuNSg+WntWalNKRjFqfSk7RFclYUh+IWFme1p3ZXs+PzRdKU1eV3lTfChHMzk7c01VPDh7WD95aCMiJl5CIy94bD4rR0I3a2FFJSM4ZXFR'@;
put 'P0k6cVM9PitmNUVzfHltKkxUV1oqSGVjWDdMbm15I0w6Q2BMO09mO1kvLlk8VjdaOnV3IVllVER9eHN5XyN1TUVINzlyaWI3XTE5WTxme1lhb0dSUVlWfUlnM3p+I19kQ1hUdFIzaUs6T2JOU1NkOCNzZVM6fXFXU3BPcUBja00lbG8xdCRqSFJaQnVYLz5rciVSSl5GU1lCUFUpZyVddk1QdUxR'@;
put 'RF5DdHImQXJqfUhDZVUjflFoJWYyVlJiPXF1THl7Nk9SeHJnWkhRSXo+XUsjU2xrMCh+PTEzZHlgPHooNSY9L2gxbi5ZYTErKEB6ZXhAajlTRj15ZU83RnBqTnd2PUMwRW1lLmpoKWpUJHokQl12S0JNdi5eITlWImtFPkJ1YkVtbU5hfDJQV0g4KUQxNF44S2BGYEJ+O2J2TkxPMD1ye1BzdHcy'@;
put 'RWxBWUIpbEdqe3RpZEIiNHlzUERzPzJROFVjUFRYcjtObV5Le1dnTG1rdVc2OnpGPih4R1ViUkFHQV52U31ES3BCdD8uYVNTRXQqWzswXkRoIjdTQGh0Y1FoakRsWG5aeU42KVhBdGNRaEp4OlBwbylFQH06QzxmREJhcTxTIUNPMnFJNUY5IzBZQj86b09BdUwvYVlMTmBgWCJBQG9GVjBLUUAw'@;
put 'MEo9bF1icjdjRSROUDlmUzllYW9+MS9mMXxaWDh3LE9IYyhHKTFnVCZeTmYseVoyW0Z3XVNsWmJYJHxPe1NvQipATD0kZFA7Kzd1IkE8ZVV1PGozYyRNPSpPVXppeXVfOVtUaFsvfDFacGgycVBVP1tvT2V4I0I3Omg0PFVTMTY8cyhhITg5Zj0jTkJiSFFJJT5uYkAwTEVCMS9saWkvYFIjdTRB'@;
put 'O3RdIXJgPzdlOnRIclBoZTNLelsqdkUzImc3R09ab107fmVAYT4jVk17dmIiTF5SOWB2YmplSVZqZDVLJDdRfjZJN3RsL2xValkzS1FDTThaVCgvRTVRW11pQEJRMzxIYHFITDw0Om9bb31dWCtpXXRaZnc0fEtGPSlUaXh5TzwqQUtMZDI2KiZ7dVc3QEZpdD9NY2pgeS9tYEp6JDx4JHNPOWdj'@;
put 'SVY2R0wyKjlsTTtaciVgbDFbN2xZbE0wQHclJXl2L2JjO3FQZiQlODBXVzRAQiolbllQMEcsQzVfMj9iSmY4WTBmcHU3QjZfPyQqLipYKm1ZZmBlcGs6SUs/WTBAaVA7NWcqUDNTOzhDSiQ2OlI4OnZXK2JkTzMqbmBIcyM/VVIkN2tDWDF6NkVUOStDVjk6K1I6MEA/XVBFVyltPU5IYUUwaXZ6'@;
put 'KTIxX2s6IlFqcn48Mj14aFhvUT9zKjkuNypQeWUmNlUqUmJwd0BXSWRYPmF0WzopOCRQTWRTbm5pR0FROWs+UWNNelQiKVJ5Pzx3SHI0JWlWJDY0KENCXklNOktMTWExTCFpNHN8a09ocEdlejQ+dXk1MWdsZX1uRzxRKCY2IV0zSHddQU9nKm9ePisrclU5Lnd3JmdEaDZzUmtKa0k+OmI7OTg0'@;
put 'UEErR3hgbmQhOy9+QCp2I1hLLjNDfCFOPFU/IWlQcU5FPF13UkNZOilpenBJZmxxaHQxI2JfMCNxfShxWVF0aDJPISg7RkIkL2tGKkRyMExPKywsQkFLe3ZNcl1RIkAyJFdlRlk/VDxXZTNgW3x0W2ldd3VGJilvUislL0ZxSF81PTAoXmt3I1B1Sm5PNmglIXUxS1J+akFSUnNiR2RzcGJOb3hB'@;
put 'RSosYk1LInp2P1gybWYyTGBUWGtLdTZzdEIjYFpAPXxtZWhkYDpsc3BiWjhHM2dlLHd6I3RoZ2NsUHhJaE1bVlY6T3ldPT5Wbnw4Y15GQnJqZGgqJGc8NCZXRSlnUmtJbjo7YSsycHRCKyIjKlghT0g/N2hHPClpPyRCPzttWjNJNHlaUV13OFY6Y3xnKmZIVUQyM3FvMFFROTNSVShHdXhbKUN+'@;
put 'cGEhfCo9WiIqaD52LzhJaj45MGp1d2J7UUwuXnE6dDxtOThxTzxjO3lTVSx7IkY+JVphVF4zXVhIMV1Bd1A7RTtKO3JdUUMvfT1JTFlZL1F2TnVAcCUySz86eTJ4JSVtS3l9UEczdld6MnYsO0VYejoodldoeGc4Y3dRUmJxY1VTMlVZeDpVQDAqSS54fGozWX5NW1hqJixJbXhHa2RXbHoyWjRx'@;
put 'd181KF8mVHQ5ZTY5YnxkcEslIlo1PXBVQU0rX1JXcm9+W1d3Z1tBTyQsU3o0Lys3WjpCT25lTyppa0I3NHlETiYqXjxgeHZ1UD5paEQlKjtzZV4ob141aVUuR0swNypEdkByX3wvdGhiKSs5Z0lHUmU3fFs9XjNdVkZ+VTRkO3lTX2BkY3AqNUVWfn55MFdXPnVHLGhsTD1vT2poRlZUZjJCVXBZ'@;
put 'LE13aDRLLjlnRklnbl04fXxAdSVpLEV4Lj5ASUJsbEZRKTthd3JqXjRETGRtK0JKMlsjTEcsQyU4XzRUTXEmP1dqNmk+RCgiIXdffGMsSm1TZmdyajpAI3FGalQldXp5Jl03IzFKZUJUeSxCMGRsVkwyTCJGKS53RlZIZDVmfSlrIjNkQyYweUdoQ2A9MXBLKlR2aVNOMUFbKXRJakw1dHFSYyJY'@;
put 'PDQ+cns/QW8yRWY2clpecGdiLFhSSnQseVg8NDM9PS59OzhidmAyLyJ3N1hGR3xDVVddUnpjKn0mWlcrfWowZURZendiXVJKTV16Y2BSRzlbZkgsMVU5MU1wLzpTWyFLWGFbSi5YfWQ3MkAvVWR6bUpmfDFBPmcwTDVoNzRSU1J4YUNCbkdgWXtGXjdlLnpTdWxPM3QjLmBQZCoyaXokeSZoNkh8'@;
put 'VT1IIUYrejskLHp6LiZpeFA/MEUobVNHXjcqRzh3bCsuYXIjJSVocXNOYmouI094NG4jI3ZqTlBjR1pXN30zVXZreEt7JGlgTGkmTT5NXVUlUj4pOjAhcTAmbUtnVSUjOn1hdGVMZ3xkezw4YVYkNnRHOT5rM21LZyV8V3BiVTtTRzk6OmguVCZsXVckTGR9cFlCQU5mRFN3PUBCPTBtOD0kOnhw'@;
put 'SzxIOUl+fnRSVWJRRktJNC82blNmJT49azw9YVYlNWFWUi9hKEdQentAWTNacz12RnMqMC8pXy9uV2JlXl0kVCNpY1ttOV5zVk1seDhrdHsyVzpVQXk3WjorOHs4bm41OnJFXzZ+PzooZ3BqaSg6PFh3VXJ4UnQjOGR0NlspPV49SG5nOTBGXS48YWQhSF1uN2UuWTA0eEBvI2BJInQmUlhvOU5s'@;
put 'blZoTDMmVyh+ejxuKEtLQHh8bmAsS0xmcj8xTS41cioqS0xkPXIqYDZSaEZPans2aFQ9Pkk/aUBURz9HMipSd2pMTUdnUW0qTTxPZjdMUExJU01rWXA5bjltUSIoUy5ecHtJZUxRYnFFWWE9emt6U0pLcGQoQW9+NWwyMiwuaipTZWE7fFRbYiRNLlpvUS42KyY5c29qNytKSltaZmJqRGZEbE11'@;
put 'ejhpTy5qZ0VQSyZuaWtQaTRuPV5kTjFsSjFLK3s0YnRWeSJmbmxgMkUkKGo4W2NnK2k5VVk4KSVtO1trOmsySUZfMCM+TWZwQERxfWhCbC44NWpmNzpVL1tmcD9iVUNNQ1UhcEZWZDNlQy5jeFl5YE9iISZ8b2cmO0BaYS95OylQWTNZcHxTXk5LbFBYO3UxKVtWX1VzWVlPTUZvO186VlVZLlVX'@;
put 'b1AqfGBqODVvS1tBRks3NC5lJVI8bEs5R2tKc2guOzxGYVYyQyRuL35pSyNCLjttYVFGbi5TQmJ1bWxtOk1zPl0kUW5rV0s9eiJ8N3VxYiVHJl8pL3taUVg0XlNLR0VXVmZRfG4yeCoyOD16dixkLmxbJk0xT1gxXW4+NW8hdFpQTlFDKXRWTVlOc0dLR2w0cjRyfGZ5W3ByREwpUU1FTUBWYFRR'@;
put 'RTBZV2svQnBWRFFRJCRxV1FZczFFcCxbbEc1YUdvQV07cUR0JGQ+WEY6Rk1LLjhbQiFDdDglM1NgIWxMRXY1Yis+TksjWXY4NENmeUN2ODJPdjh2NUNPNkkhN1E3dW97NGBpbzdJZHxdVkMwXnA6TUgvXno9Xk5PIURreGBKImMudS91W3U/dUo2Vk5yRyopQzlGeEdvTzVLWVpZWXd0R25AbCM1'@;
put 'ellPWWA5WXhvLm5qM1VvajsqSyZma3UjKmF3aj9DVXw5IU83bik2I2YwUCw1MTNVeGVsQGEmOF85WUo7e2MvIUZ3Y0AuKl56NjxtI1pubkNHczRRJWl3dUpEQyJyck9XeERsWk9mQykscTNiWyFTVm9ZVUpZNGEyajdhfC5JO1FOJUwofGFFSX51b3kjW1JQI2Y9NWhCfXk2MXIwakNbNj58M2B5'@;
put 'V1owVHciKX42JkpbZ1JPMCwqZD1EYFJNKFs3aE91b31PYjVoRkxPdUw1OitHQWVWSWdBZUMpU1drdXRXM3JUT30+YlRfaXB0VCh3O0JAKCxaY20vNVNpOTNtUXVFT1dKblY/Xk8yLCkxN0lqTEg6dTZvJTQhM2c5bzJQOENGbFcwc146eFFbWz0uclVUUEpAVFU5aHhueG4qcm5xTllDSFtlQjNJ'@;
put 'W3RrYy5KR182Wj4mYENGKVIsJFUxRVJ7JFN+PCpSX0V3JC9qTTxtPWpUUno2R3ckL1ZHak0rOzM+aT5HfSRfd0dLQl9zRyZFNnMzMEZQeGI5YXdkJVJ2P2xsI0cqbmVFaGJvYyxTNThkeEhaVVJMUGZPSCFIQFRLV15keHpTYUJzK25bN0diSl1VUjdTM0d9YypucUtQMGBKO347I2ZmJXkzRjZ6'@;
put 'UUN5SmdCInpgSkA2az9KUlBAeSh0WXAvL0opWEx9K2Q5TTQ1RVtVUj4xO2MreCV3UGF9RXdGOX49c1Y1WiVtM2NRMUNBV2RkR0FDQnQ8PiZTRkwxbGN3fFAkQT1JdE0/I2wwRkVDUC99WCVgS0YxNEMyaShze2Z0KlNWK3JJbFt7TF9nRSJvUF5DfnA4QnkmUGVjMU09Lml4bGFrT2JYMGVLX19u'@;
put 'ZjxoejxVZWgyTT8lLG5sZFIjXi86a3RBRkRtWGBsTzdWYGFVTnNsdUwsJUdhLyUzeVJgWCN4Jm06P2RIWVszelUwK2xyQjFNblVBZWZMZ2tgMnBua2AoaC88M3J2aDwubFpdWVVPbFtQKlZCXUV8eDlVNjwjOi4iY1lse0BgYCNpWywrW144fnFuNGJ7bnJrT1paQDw7RTc6YUlFYGk5X14rdXso'@;
put 'SFAzcDFTaVIlXXRWNTVnPTNkWTc/WDFfS3FGVjJjXi89Jkhfbj58T1hxV2FeS002KTg5PzkxRTl9TCFvY2c1UWcsfSxsVWQkWnVPZzhbWm5vJEVwIlRWeV19ZjJvY2NWN3ZRTj0pZjJSeTZnQlV5b19KODc7b0pGZ2xzQzg3WjAhZmdPS0guWlpldyFwOmFpMy59LzZvLjxfNXFbRktKUlBLbHdm'@;
put 'JWovRiFrYHtOeHBLUW4kSDBZOV9IXSp4eGdDQmxBbFArZSo5cGxWS2clSH51dG8ienE2aG5TRHtqRS9mSys9Iz19X29vZDZFcEQoPjohYEJkaXw1OlBfXl1PcE8kemwkdiJWUlQ0NXA6aFlqZCRkaWJuWmtgN1MzMVlwTTN3eF1vUlZGO3QhQFZVJEApNmRZW3JdTlZlUW9AK1RlOXRQMnZ1VFdJ'@;
put 'fVtfSCJMX0BgUlBEdiJOWiVFPilueyw3eWAheCtGUCs9KUtfcGA1UDtjbjQqJmtIdFFKRU4uZUxZVEJVb1IlVW5QdkZKaXJ0RD0+XW84K0dWe0t9VyopNGdoLGVCUVY9OXRzYVsyQHsxNGg3NT1wLjo5fn0ibGE9PDhwUmlXSDZ0NTQzYmNdXzU1QjJoJjxAMVElcXBvRWAsPG0jaEwlLFFobmBR'@;
put 'Mmgmc3M8NEppZENBU1klPyxBaz1eQzJCLmJ2JnN+fUVNfjxjenJ0fWdNOmJ2TjdCLkwsamNCYkgycSE5az15aHw5THBjI2dSMmZXdzFdcGpSWjNQO1pGOG5RLnQ1TmNIeUEkWlRHaVQuIT1yb2pbJlNNVDFIUVBPOERIPnpUYTxPYyw9eHZPbSUyT1h6SGFjT0koQkZgazxuIm5qW21dMG12IyN9'@;
put 'P1tGTWF+P2tTZ19MIlhIXT83d3c4RDNyOzc9cyolJjIpc0h0SV0yU1tyV2xZYHJhTC5UIXclU00hd2NsUm5eZjZoVEp0WWIkbjozWClaPHB5YlY9bCIsJU1JXk1RXmxgRmt3Oio8QmErcWJ7cnJYVWI2bU5+Pm9jZiU0YjY+QUxfLls1elElcWRVbiY8QC9wNyxsKDdUQ2UmZUMsQnxtLy5bPy5G'@;
put 'cSkmTFlkM3dUXVRGOk9kJHsqfCpYIlBfNlkyNF5LYUpdKmdmMkJPJnB9cSh8PVVMLl87Tk58UTw8cG95VWBSRlleOVZxVng7KTdUOHRnanxhMjFZQipoSCpYbjtVMyNscnR5SjYxKVM9RjlNVHYkK3BDWFlzfVtoISkrUi51JG9UezghL2YyJi4qNGxdKm1KS318dHNOKH5NXmxrPjpkc3BXPSZS'@;
put 'eHN4aTF2fFsmJSFYY1Q2I3RrRGxOYnZpUEM+VzRXMUVJI0wyeVMkTTg0VD4me3ZjJE0qTmR2MnVmIyZgJT8xVS4rJTQsMUAqfjl4VTs9WDZ3OktRM3d3Omg3NVNSc3xHfUhRdHElO0cmKzIocC8ve3pLfjlzJTQ6ZjJjN3tKZ2x8Kms/NCQmUDR6NHF8e0BteDFSOyJUfjxkLkBRZCtYNTEpW19G'@;
put 'dzV0amk0OjEsL0p2TSwpOT1POGlvTDMzMTUmTj95JCpgaWl7OD93UDpsUSZkQTN7LFssL1M5XiRQeDAhMUJ7WmhwPiM7X0ZCfj4sM1UoU0pyQTNTO3JhUzVzVTt6bW9yRkJxcltrOSY7P11ucFRwayleMVVpflAkQ317eWQ+LGJdOTp5WE01RjN5d09TM24iUTN3PSMmNnBgUk0wUE5rJlZHY2VZ'@;
put 'JFYhRU5mcHBoZVQ2JmIzVUUhMiwlaWJWb0cqTT1mNG1EfkxoU19BYEF8Lzp1fEp6bTpMMldXVi5Ha3phYHc7RzlGckpsJDZWKWMqbjApd0dXQlduJmJhJHU1fW9MM0g2TnY1W2BBJl8vWXxbKC42Z3lIYXlOK3ImZTx9N2BATnBsNylpbDtKR2IlWm5KOG5OQj1iW1NdYjc8VS9aVy93UFoucG9Y'@;
put 'VnJEdmxnaT1eZWtRSmZ2R0o6JDpIMyg6IX4qTkErTzohVWRJNjIoNkMhS2EqJShsNnBvT2dPYn1wRGVqZGd0cDNMZEhvK2p2LkhfbnAuZ1BWd0t8fTl6ZWA1Zkp9cCNrd1ldWlZuVC42VUN5NTFgS1RNWz9DSyFKVDosfmdHZTk3ZUsudXI9bGZONSJeLGIzaVQyQ0RiUno0eUovUDZIZTkpZmU5'@;
put 'MTh2RC8wYntpZmNsOF4/UlYxYmpsdGpZfGhAZCJ0fWZEU2dmQUA8PlNkKT9EXTp4bS9kMiExe0k6QHdzbFlEO3lFR2xHZTc3YiROeiUmUkQqbDwvXSVCSDZ6I3BwamNrfCZeTzVtRHpUSk9gRC8qZUFMfT9mVl1gZCFgKyRQdVtdQFdacGJreUJ2YVhoRkt8JEw7L2ZyU0tLSTl0cTFsWyg3VClz'@;
put 'cjU0N0deM2JfakZ+JSNQQzE+OnNMfj02b3Q5WnErdExROis/KikjVlszZ2dLb3VFVlFrcCN4I2ZWSC5iMzJ2WTJhZDlTdG9sOXt8ZVsyc1pvczlJcl9wWk9abyM8dFN9TncwLlRETlNvNWBXczM3STZMRSxDMGxoJnlqfDp8eTJ7bmR6Pkwvcj5FQDR+TmdCUGI+Qm5NanVzYFNaLHI+TzpsKUFk'@;
put 'U3lgcll3QyssOXhuV316OSh9YEA4O3NMdzI/XU5sOCxXO1gjaX1MaitzYX1sQzA6MzBtfWJRblljc1R3TTRIKGlNLEA0bEgxTDM7L1c7L0omJW56P2V9ODk7OHt0ZCUraipwLyJiVyZoNjV2OTIuaXEqO3xTTzNTJV9YSk4+ezpGIXRVSUUmcCRkLmhnWGlYPnF0e25xfntBKCIqLHcmJSllT0Y+'@;
put 'cjIob11oe0NeIVs7bEE7TnA5b18jLEArfHx7eFhrOXMrTz4lTXFTNjdjKVRVUk1IbSE5ZUpTNGFvdjN7RU1LMTZAKis6RnhjOVRRbT94Pyg1IWRaKn1bVGQ5TTNpRShpN3hpVV13TXpBJiU+eChbJC5ncTZDaHFqQlp7NytQQUdCJlF+WGB2VnhiTH5KbVJnQSxXemQvNXNnW2RIKjNQTk1UM2FG'@;
put 'YWFRbV5GTzgkIjdWXU5NWTZkakg6K0hSJHoia1dfZkw/eSF4WDgwLG5QXTFuL09DS2l8SkxhXmNRMztXOzZzSD1EdjZkbEVTRT1dKmYyQjJhbGJOPm9dO103UWJPYj5vbX1GanpgP01PZEpnXk9rJFMoOXpqem06YDhaPGBYZD5FNzU2K2dTMSN7IiFdcDdhQ3xNMyhsV1dwOVIuUWRUKSUsX1ZV'@;
put 'eUMoIT1hY3svc298QE9YSllbI3lyTGc2K2pkR2IpcDE+akt+JSZ8Ji9kOSFOT0UzQjc8ejZrdWIyU3ZrdSsxTDNlUT9gU148a3FtKVFxSEEvR09GakE6amQrfHJIZSFkOiZiaGFHdzJtKlB9ZGdKKFZsKTw6RiEwYGwva1Iqey5bRDxwIiwlRC59Pz80K3hIcEEyZDBKWDZZN0p+biQ6ciVtdlck'@;
put 'NW9VVDA8KnhhWFNOZ2lZW2hwMjd1aj9AMC8qIUdyJGtsbSI8NXciOVM0K1MidzYmK3kyP2ZlQUBBPXsqaWglNkNOcX5QPTdQYD1RUUJiSSRqYm01M2dFRTc9UGB4eCg4Z3pwY0MwfmEqciQwIjNgQDIrRzJIKEdfZzpZSSFfUDUiTnheWUgvMTxwRkIvSGhPZkVEdEBubGY1KmtCfkw8UTxENUg+'@;
put 'WEpqMCVMcG1kKmo1YWB0UWciXmpoYk5ieE5DTSphOFJ2ZVg/a2NMZzB7U0dNLFhqaDB5OkkuOzA5d2FPU0RaUmVMQFIudSNiV1UrNDJaVl9QS0d5bFEwZztYSkw4K184Nlo9Vl4oYlAuQF45dzclfG9bcnMlaUBhd1NNfVhKJVhYLGc/XXROI0pmVDgxdE52SGxmM3k5TDdTNSxtJGFldjJ1aS9a'@;
put 'KixHbF5HTHVEQzt9fkpPQzRMUHZ6S3ZsOUp5XX4xMGpqajx9RExzVDw6Ozc0a2ZOVFd6QENSM0J1OztfQCk5cj5eKCZNSmk1TVhYRGtUYT9sU0IyQ1ovdFh0THVdQjYzeSprQCRHKT5SLCFgXSQydUAmQncpN3R8bT8vT0leTXZDQlV5YTYjaVc9Izx1JGY9Tl9IVWJ8JW9xRkVLekd7YHFsRFlu'@;
put 'MCx+d2o5ZT5mSV4/ck9lKm45ZSJYRF4jPHNHIXBTIzE8Vk8qJnM6VFpsZDBvPTs4cWFVQ3UxfGxIQmB1UlRtVjUpR2R3c2k1dTY2R2tVS3FyRjYhQiskdHVvPSU0fUh0RjpyblcqQFhgL3JiREZ2cGR2K1syWjspYTNUTjBSXn5BPnxpZHFZWCMuQClxQ0U5S01KQmZLeDpoR2VkaE02R2V5bEE7'@;
put 'XUpiIXVieWlad0ZvPmNXZDwseFFJXio4UyUhNktMfE0ldiQjfjBeQFpaOCNDfTQ8SjAmMmpmQWF5WCJncWFiRW5hK2ZQJU1hR0svbUlHNy5+Yj9yXlIyKDF2SCxaa2Y9JjRrU3xoImgkMSFXcUNTb3NjQksrK21CXmVGWDN0YEpzc1F2RHVodURkNUQ8bkhyXlAlVndPdTQhV0FAeTAsKnkwZXdS'@;
put 'aT1ZaE9nZk1hLlRwN185RSN6Wk1fMENVSWFgdGAuI01RMmhHZW5Yc2I2VXxMOTExO29+fjs7T0NCR3hUPUE2RjJhaWdibWVwRkxDQTFELn4iaGQwSWNLOGBVVVM3QGE3LnVNInJXOncqY2trPyJoPVlaM242RiFjakFZNT5lPDBYcDd9K21pMXZYNTcxQ15fNGJobjFaZW1bbDZYZV1QcSEhMWd+'@;
put 'I2sjSGgqO0BSVVJPZyFlOGhkJk9RVV5AVjF+azJ4ZFh2Y1JtSjAsTXRgN31xLnRoS0h9R0g1XjlCTGRhUWhPQDkjZFZnRUh2cnBqUF11dCNtQEVmdnlkQ2hSc1hYb3FvWDx0dXl6RDpuWyk0dFVAPnF8LnVqYDZJRzx8a0BpcXA6OiFhby9xeTI/KyldIXAwXlBiRWsqaCkvZ1ExRHJjUUtkVk1R'@;
put 'PHMxY0s2YmlvW15VUSYsQnMqYCI7d2leR25vYUhyYVI+T00xN0pOSzE7QCZ8b1ouWHFvbmgkZSo0IkxmNjJEent4RnN0Zk0ldjRVWy94byRhLF1meWMjYjFGZjkxPSZzSGNhMC4hYHNYN2FxbzNWSzA4WHNYZGNwKn1oazNMcmRCQFRrWGNjNjQ9VklebzcuPkpbRnd6IWtEZHglRXVbXy9eQ1E3'@;
put 'V0o8X0FRZGx3IUxoTjxQYzBpaCE8aCpkSTsuans5S2FzVSlkdSplIkB3ZkZnKnEpaGQqbmgzaSpmWzs9YDBUWEsxYFVEPFhmVC8/RXVISnlSJT1eSGVNRW9pZHo5VGspcXsye05QO0VqUVlYKEU/cyJZdGhWWHxVWXBYdUMlJmlpSmJ4YzopQCJTXW9MeVtCX2BGOHxZaiMpJUZGVigzUyNvQT9G'@;
put 'XkdlOj80dClfby5xZUlqRlcvWGNsJjlMM0ZGXjNrRTJNIihzJk84cjMhT0Y3Y2o8Ym9ZWnVJVzFINy8xfmNqQWZEajNIKTRWfXRTSnpeb2A4ZlMjP1A6PW8rU2lkLzZlPms7N3cvX0lNLkp7STJGaDBZVU9PXihwcE9oMCFwQG9iYmkjOGxMdVNZXnBrK3xZT0c4ZztXOEAoWyh9SXBNRFBKP044'@;
put 'LHhKLiE7Xy52YGZTRytwNn11NS5WNSVJeWdub1lXR2VyXmlZd211TSx4cFQraHVsQDFSTW9iPiVqTFJSZi4vTzdaVU9PUjkxY10kdjUzTV9VJl5AR0BWImBxIls7SUJmJWN2X00uSkt2OFJEdXc6TkJQKjYjXWBgfFFyKVI/fTBhKiRNdEgyOj9xOlI5MX1iUlpeP2pTMl5ZekpLbSVidnxxWWUk'@;
put 'ensreipVaThyNT1WMENRRjhwPCtqfUZ3MCp1d0pxYHchQS82PGkkYiw2PzsuOWVtbDkjZlNde0QrJmk2ajddOTxAI3NsNmhvcWdLZ10vWTxnan4xbV8qYH1fLk1tRTEqSVh9RmplUGBoZjhOUnI1SyRbQEM4NU9dcnxxIi5DOU04dU08NERaTjh3Yy5KUmg3OEVJJiNEOCtXci4+bT8rb0l3TXAv'@;
put 'MWhBJTBFIlB+QiooNGUlOV5IRDs/YVNpUzVPQ1cjSyFMPW1FRClgYEllclJ8Z1V2ZFRaWiFYdlNST1UrTGFacm0mYSFeY0BUSTpBZm98S0tmWEohUjcpNE4hLDVHQkpsZXt9OyEzTDNyM0wzMVpQY21SIyp7YWQweSJLTT5oZyEwISNpaUJNYW15PHlmTnpHYXByUDt5LlE7WnJFd104ZHswSzN0'@;
put 'UEFnQ2VgJERYZipfX35fPDdHeFNHaEg8YHNvVj5iPGdKPjtgSCwoRyZqaSZsfVB0ZVNkdlt3YEorT3liSzE2SVsvPUk2eDtSaEEveDt0MkVbaEt8WyN8QjRmbSZkc1h8WjBUeVR5VDE2Q0k2UTNTRzl9TzxmdU9vcil8UW0xdnQlUWhBWlIkPzd8fCxPZV1NMy5YVCVlLjJwNWJwN352JXNkRSJb'@;
put 'TS5dSFRddiZRTX1uW21ebGE6Tmw4NHZCfjMvYV9WSTF+Jkc6S2Q0bGFZSUQwLispUzZeZG02LEBpUj1AKjpGZGN4PVVgNzJmLmdJZyJLbDpTUjc3TDN0emNgcVVPfUVUVStONStNfjN7cmNRendKeilkK1I7MTtAMHd4N0Y3cnN9U0pkIjdOJUlrLzRVJSRrIWR7YHUxRDhnem4xbXojfjMlcj1J'@;
put 'Xm83LCpWKlFkUSxwNjNPTDFmRDxCKixdbilmfXlQdURWOm1OYTNPS0ooLHxEMUlkYUwxTnAyQmtFVCNxSmw9XWtXPVlhTEwjWFBBaVZERzlEW2gmcGswM3Z3VilXVX1sO3k/WmlOWWBMcDkweURzTlZ4RTBWMTNzeyY7em5wVGgpQGg7b1lhYSE/PngqdnMmdFdnUGVvRXBbbHFsUUEvT3NMbHUk'@;
put 'NT0hJGc1W3t9QDAoPV9+a3goeiFRLl0oUyIhPzJNZ0FnKjlHPjo7RVsyNVkxdE1GSj9aZlchQjJrZDk6NnUwX2JgOl9AWlJVbzNITEcmd2IjRyR1VkcoVWYySGxQUUp1PlMmW0B2ZzJFWzFLdjhYRGV+R0MqMH1MTkMiM3VGOS9CTzs7IVsudkdlcEpydW1+TWVCT35CdzRyIVRgIjJeaUVSdkgs'@;
put 'PiRJPWlqalplW0w/ITokaXR0WG5gdzFsUmQhdV9ecVBOMzp5XUAsdUh4RElOTEM6SFZQb29ddzsxVFhnRzFIXUJ9Y0VpT3R1OHpIU01rTT40KWZxMXJSU3ZrL0w2KFtPdkhLdGBsend5W3Q4SHF3Zj5SNmZWTmEyST1MPjp8MnF3eXorcDRJfUA3PiNEWzBHOjc0LE9SVUFAPT9XOC54bj9LIW88'@;
put 'TFtoN1p7ZWtgIWxQLFRZSyR7YXBNOy8ueyxZKiEjMF1teSR7ZzI8WVY4JCNNW21xIzd8RSk3ZWhQd2toOl93MT4zeCZILCx1SnpKK2p4RGpKXTBPOWY6VSF6fFREYWZhYU8kYSJmfEdpSTF3S3p5KzQsK3Z+XWZwSV9OW0U1fHwsTyJtRUVTeFk2TzleLktNOCxdNFFuYFVGKGpCKWBzPzZVQE5s'@;
put 'SStOdEcxd3FmPEJ4eTw2YSYzd2AzRl0yMFdXRVliR1ZVUVVgR28sY0hfXTR1QSN9eWhaRSNTJDBtbytrNUgoMzIpNmBvOUQ4LHM1fSVUNj1tSmY7Wjs8UyE3Yn1HfWRmJStrfTJvdT9aQmAlTVI9M1AwNGxlPT5sVz8jWVpmVTV2P206MGBxRjVTaDheWDUhVzgvVDtUJlJvRjhjcno/JFpdQFgr'@;
put 'VDhySXNETjBVOUpoTEtXPDkwMDopM3UrMixafns2bnVUITozQCQoMSFMW2dJSTMhU01hTzosMnhmOlVpMXtNQEtMZlhbVzNrLik/RjhWNWpqNj04ZkM1SWJnQmMscmlLKTVATVRlZ1FDXSkkdnlGITkhKE5aWFplRSZTKUYrKTNEM3JTRFYxSDAvNzRNUGJHflQ5eSlHSnxsP0AkZ3EqMVB6eng4'@;
put 'ezlJUDVuQlYhLEJRZGhhNHh1OHlsbHhsKmpTZ1NPNkZnbmI1dl5dXk5kSjVUOUxdeCwrIkxILlJfbDdWWTEoeWVCdUEpb2N3eSYwO0YkZWsjaGJART5tQU5qNVhEWllbLjAyW1l5al4waVtkYVZDQCNyUno4aEpsYm11SGc5fTEzJkoocG1jNXY1ZTwvVnBmYF9AP2piJDtkRkZqO0FHfCNbN2BA'@;
put 'SW9IUms5MihfUEk7M3UxZU1uPWtCM0hbcSYzXTppdzAkYHFvOCI0fjYyNUxpUnJfJFFiVE9pLEp4XldWcW90e3J0MU1kcld1WEBQalE2aGZ2P0IuPHdlZiopVzBQQ24vMVJ9PyZbLEcxYUhhOjkzelpXaUNaTD46WyZVb1J4UXpzWGNyOXRoZD9UY2AiVCpaRnlQan4qSkN0YF5JUTVIZmNDXXdC'@;
put 'ZzdYdS5UKDY7bXYiVFVAdXZIUGJ1OnVhZVJ9VnFaRVdCMHx9UlgpaDE9WCFPMTVOUFMiaGRgJTAhbTNqZik/Njg2IyQqN2RKKlVJWHhGQ1A4ejU6LlZlbUJRZndCXiwhak9hfG9nSWZ7Ynk5a3d9anJVSWN4R3RjdkdNeXN3L3hkLlddPXApJGl3NmV1aj1UW0ptKzlfSSYxRz95K1BKJG04eSxh'@;
put 'QERidnN7dVAmIyhdT0pCRHgsfVEud1lhW0d3dTNka05nL2tYSlhjbHsoJkZRaldORClzUy8uImNWVX5iPEF6X1FjWnJFTWxFM3M+K2dGUWFIVlBNZ1M+cTBpWiY5MXwvOCk2N3l7QlYqWVZpVlBKenU3K2x4SDE0SWJxU195cnUoRmZLSkNgcTV1ayFbdkopWStFc0g2YSVxZ2J2bik0RT5UMmQ4'@;
put 'WTFLJnc9a2B0dHA9PT00Qml0aGVjT2F4e11ddEVfOTVxSU92R1tjbzBCRmZxfDEydTVCZEQ2RzVOQVFgdDFwUHwkW2pHbnBdVW1FUzJlTUgqRTNmW3hmazRrSDlENDRieVVRTTxIRWUzbXZRNSNrNmFhTkNvdiUrWWJpN2tfY1koOEcoK29wS05QNS5PcTg9YGFFUVJvTXA8M2E3UlgpKWI4aSli'@;
put 'fCFJYl06SjNDSVRDRGw4MFM1XW9EWzNhQV1fcTB4e3YuaUN7KVl5TEksYkhqWD0sZm1pRDxCWS9IZXsjJTdJT2Y/YSpmRERrdXBIdiJdfHp4UUdtfEdHQzZKQTM7TkEjaGI4W1Alc0tsa0lDKGNud3EwRWQ3IWhNZU9bV05gck99dDkqSXc2UmAqSipSO2NQP2BYalpXPSksRnBmOyNYME5ZcyF4'@;
put 'cSY4bXlJJGA8ekYqajhWfnl8T2pLI1lfSX1MQnJ0REAvdVhMUjZCYiYxOTQvaUdUSVlhbiw1Q2QpLlpnJCE3OkpIfG9wel0zdjQlV0o3bSN5UjJ6UUNtcGIsbSIoby9LV1VVQ2J0byM3UyhvbFFWOVNQRWg1PSFJOVVrSHx9OGFZZSg1ck8mU0E2VWdXZGZvc3hPd3wudnl7YXlAVFkhU3ZRdzpL'@;
put 'eD84eWpYeFhvRnFCNkIsWkZnO2lNXzhCTU56JDtQcD1UekR6dm5wen51MzR4eT5NLzkvZG52bWcwcWxnNGM7W2hVOWM+YDlqIT1haSFbeVtvbDlrcHVyJi5OImJEYlFJY0VZZjtvUTM4WDtzPzglc3g5QzJXbVI0VWg3bU03dzI+eHRJOGYhLl5VQkJIYEkiPFA3Y0FjP2tgSjlCQ2g0RFQjPjJd'@;
put 'UXp5ZnB4cURhJUlnNVRefGNoO3RTVmYlQyZUMytWMWNyWGRCeCEqQ1h9cUImcXFTXX5GOiRCYlVyTk55b3Z9PyY6Nit8RThhcm5oVStYKFl5MDxecG88N3A0ZkAsaU5yOFhrYXBuIUwsR00+OntgRztoPUlhPDV8WHhvdyVeYkY1fD0wOzRITncqYXovcyZEO0hETC4wREVsNCVQOH58NGVSWjo/'@;
put 'bVNJYzs0RzI/KVYwW04zNVppdiY0dEhQTChMfUorZVI0RXl1KU5Ge2VkREAuJDtmaGU0N2lkY2MuPkRwTHU/UmdRdHgpNThTIztObGUyOyxAfCNIOm1TQm0kSW47XiZDYyRCIzZrUE4zdmB0NVU8XUZBKCR2KkF7ek19ZlZTOFU8WiF4fUM/NEchLC97RjM4eVV+TjlMRmt4UiYpSCk1amdWKE1a'@;
put 'cmpgOk1UO3V0a24hZlhHVlVaN1VgRU0kQz9ddVE+XnlAcVUwJHQ4ZjlQdzszdiJ8dDEpbkZHZS90NCVla09Wcm90R1NaLjF2OD1IdEpOSUQod0FtKFYxL3lpRz46Sko9ZDFuUFQlUCYkU1J+ZztCY1hyfWYhUWBobWB7Vypda0YrTDI8WTtMISRddmgkZTwxN2h9bk5RXlkkLiVHUWQzU08mX1JK'@;
put 'Nn0iS2JWU1ghSzFZPTcuOyR6LD9vUTNEZiE9Ilp4eGxIVmpWRUVNd0VkSkozeHU3bHEjYHkqc1VjeChkejJSaHE/dSVmRnl7Y01wa3BtYFVBTE88eV5CflY5LFtPN341ZllMTG5YfFp2UTlNciVlL0E6JiNINTM0W3o9N0FzZCFDZlomeipGWnV5MGY4TGhxT3pWOVplXl94V34uNk12UEssISFO'@;
put 'Pk5ocChPRDAsTDpHYFNwODdKMyZ+dGR7cyU1KXdbcmlGPyVSNUxkenVMQEtkL00hZyhPYWszNGx6eWx7On1RTHRocSQ0WGN1IXJCMn1DQVElTCtLIXE1aG96SEdGaXc8KyFOTkdkfWg5VTE3aClwd1IvWkB7YCMsayFlMWdxY0Q1YGsxe3dqSC5paWcodyZ7a0lER2xLdkp6P21lX1tNNlVHO0xp'@;
put 'KDJPRlY4VXldNnhZLFlDKSQrKiNgUGRFPGMlW3chSXh6eH13az9xbChZUHosI2g4Tzg/W2IyYndyZ3ZiZCleKDRBa3tLNjxEdWwyYSV6aUVGa2dNQUEqaHtHQnRWRShNZWMieXMpPHYsLEd8KkJJSVRQW096dEtVKEZQdnB4bVJ+WEFBQUFBQUJ0JkYqaERscWkyK3ojbHZUSEpGQT0hOENLVzsz'@;
put 'Z1MqcHJ4QzhJSShkNThXdlB7eW40VHhiOVJGN3NqNUUrYE0pJCI/YnorXzhPYTVbJE0pR10yQnJvM3x8MXxmIl96YlVWWkNKIVg3PD9MPzd9OyVQTERybUpPNmsoaUVsNXA7IzAvNiNAVXM/eHh9QzVjQGs3Yj5FeWJmamVobXhOVlRsSTljbldxWkw5eFFVMGxOSSMmKCRodjgvbSZhLHMxKWUo'@;
put 'SE90UnJtNFNheGJxPiZgP3YhNkh4dyZqc3ZUTmxnbylQcFQxWnVPO2hfNC8zfmg1fWxbcWIhUUApY09ncGxlNHgxKipYV3BiPGRZezBbQGpRQDw7QGMhMXh7TFl9YV5YQ0NrI3A0ViRwPEpSWHtVWXVWND5zeWUySWF8eGV5SD1KMF5YaHc8LjJRKiFpdlVMZzImfSZLcTY5KFkoamAzJWx5XSYy'@;
put 'O3Izcm4lS0omdUJKKU4mMF5+P1BYazAlP0E7WyNFL3xiMmJ9MixXN10hImpSIk1Hd0xiLHdfRTgkPCN5Z3M5cDY0fn1sSUVqL0d2ZnZhRUhjMiN3P0VSSU4kSUdRdz9DTyZnfmteTjQoPkNwJDpgZXtoWWUsKGchYmo+NHwhc1ltTzp+KTp+Q2s9I0BzJHVIYmpOZmFJWXdLN1FVeDp9U0kzKGh9'@;
put 'XS5YMy9oKyQpRVtiQDZPZlIzP0F0TWc3NkAjOmZ6Kk9MQXNKSjAiUV5iJXBgd2lRQHNuVCt1a2FrLGdyLFFdcVp5dmwmRTRROkI7cl8wey5KcGRnT3ooN1QzIWRKbDdXYmpjcnw+dCgxWTpHIVc2Un59blJNQWAlMkdCcnpkM1p8W3tBVD87VXI5LzVLbUYsSk9tdVIzIiYoTWs9MHhBbjc4YHYy'@;
put 'TiV6PUhAKlspMGlQW189Q192dTNJWVJpPXw9OXk5WGJSPjR6MSl5IlY2R2xCemVlWzVHflpAVXgmRSojNlpGWU06I1hxKlg7OVk9X3xle0xiLEN5OH1VcUw3Zzsla2hEYXcqQEk3cSR6TnNub2E3ey8oQj5GNl1IO3A9eGxOdjhfJlZTMnk5e3M8JUpedF93alNUVX1QWjwsLGx+JFJtLm5Mbkkw'@;
put 'KXNOdX4mZm5hYy85ZElCODFbPXxNK0VRMHVzVlU/PmtCYW87NypIbX1lYS51a1l5Mk5HSyM8W09HWiEzUDRQNUtuTVIxY2kxWko9dSJqWDpKS2ZQaHsoJDddZzRlMmJvJTpxSFNiPF1aPGdjbDIzKGk4Pk9mNEI3Y2ptODpqSCYySyQ0dFQoanNjSnBRUDs/QSpaU25pUUxndysvenUkYjg2YThC'@;
put 'aU5hSHRlLks+KlhIIy9bbnE/W0RrX0xyPSI+WVJWVikhOzpsRypTM189fHxDRENPSCRNInBfRXlfbkBqPj99dSRyMT1wRWNdYSYyOn57SmJkd3QlMDUjU20oVGlRayQ1K2JLTDQ8XSxnOFtFM0dBTlFxbj1dWG9dVS4qVHZgJW1KcXt3QFRzKnRMZW4mRDtWTmlmKDteL3Z9Wyp8X29maEskOUd4'@;
put 'ajg4dm1ybCguL1NZO1tPLyFwTl9aP2w+L29UPjU6JjYsSztzYltJfTgraG0kUEh7RXouc0t3TlssMG8yMFZpdmJ2c1cuTGk0KVY8NztiU2NYN2l3fnFULlZIdWlMXTV+O3g0IkYpdTxMVXBSNEM+W0BKIXRWITFMKDdzcWtMfng1dnA4N1pKeHlSantkMCpeWDpTTil+UTd7LkcrOXRpYz4lWyg7'@;
put 'Vno/ezFNfU08clA8TVpSWkI+K01bJSZmSV8+QHNEVilFIWYrOVV1QGkyYUQydkBXPiR4NkBgaGQsdHFCLFZAYDNRalcwL3lVPy99Q0ApMkN7aHFeSmRRQmUiR1RNNUMyUi44Ujs1RUo5fTZta0p3X1dYXSVgfXQrMyttOUNUYCF4MihgMyF2WX17XnZrcHAsLDFpQlVAPS8vQihjanl1UlFeJCNI'@;
put 'O2VTKSJjTm81QklAekQsclNwWVYzWGkjaFpSY2hjQCVQMCppNyhKNGZMT1o/Pm4hWWc5Mix8eHVaIX15WmI6aTtOSXh0UnlHUmUyKlt3fnV+QVZZcmZ5N3hMZEwlVHZSaTx2ZFhpJTFJdi5DNUBaYywsMUoxQD9XOHREYjI1S3dseFg2fk5sbCU7O2FDWkFFSyEodmp6VnFgb00kWXo9LFhAKytU'@;
put 'Kl8qcFRZLjBTNnoxbDJneGMzOzx4QDdxTHtqQTYwO31Xe3lvLFQ9MWMsVTJJalFQLmYlbTJjOXEhI1taY1ljQ2Y5fSx+S2lHdHJ4OnBsIyN6KkFiN2k4cih5KXt7fl8hXjBleGdKb1hfWHdiNSldW1FAYXNkYFBpPj5nOVAxZlRle0w4XSRDOnRWb2B0IzhWfkpFOkBsck8/X2pNZjFnIyYrTEY8'@;
put 'LlUiOntlSlgrP2IvLEguXmFWXVFaOywhNGB4KiJQcjZWfT8+ciVGIztUd1JtR21yeUFZIjdofW98UlAkRSIuejF2RS9DLj1yXyxXbj1ETlssPlBoO0owQW5xS1I1I01uTzpjLDR6MTFYXjcsTHl3QlRhUWwzMTUwKG13ajpifCw/SjxMfW1xVkRZXW9FaU05a2pSeiZXVX1pVXlBOFUzMT4rTlM6'@;
put 'NUJaYzJ2L0Z4RCNhLDY8eT8/TCRnXTx6PC4hUEgzJGJ9IXk3OkYme1ZddlNNWng1Kyo9cyZHOFJQXT1td0p1NyIxVWx8LClFey4leFspJUBFRnJlclg4YzQ7WGpSdk5EJE5SYzp2c2MxdUdnanVUTnReL31HTSVsQH5QQjpdR155YHhranFiKEFnPGdFenw+e1NCQ0FDQCZXa2pRWVIlU1IhQ0ty'@;
put 'PFI9PC5kcyRyaWxGYm5HMHYrWVEmMSh8XlNRcjhJfURQfV5wTipjY1tHTz9dSXZPWy8+UChYaEEkbmhkbXNTaVRHRl43KlpWPyxQaT98Ty5eW0d4NzYuXj9YRDpMdHJrUWQiL0VbKnxzSzErTWM4TjZ1LCtARWAiekI/Y0JsUmZAYkcqUmNxX2xjR0ghNS5idDBVcSVvRjI6MmgySDZRRFZ7U2B3'@;
put 'ZkhbLExbJHdKdmdaInAxMStIP0BPS3k3fXhtcU57c2RXIntqQH43Sk9kYS87SiVnZ3FbKDhYZXIyOTx2cTg5Rz0rU29ObXBBOXEuLFo+PEBbUXh1OWoqOGpRQ3F6cHpXMkJ3MD1oUSFbfXtRSEdDJi8ycylhI2xVZFlRVU9DUSM6ejxMPzc7LEQwImJBRF01dzQ7X2BqPHp9blMwTHJMcXhpMnNd'@;
put 'VUEibz54aFhbWTIhKFNLdjFXRyhGempjOyI7UDleQ2Rua110bCM1Q29PNTt+U2NwaylFc0piMWApSFkzT2VJSyI+WSh8bmBSSiJpfVhfYjRnanFITTA8az0vZSlUT3E9dH0iZ298K1d2XUBmWDRNQi51eVJDTTcjVypDL05kYVZXQTRoVUpvMGFvVDZkQ0d3OUFoRlJzJTRnVVIzMWg4XXksdkhR'@;
put 'Z0RdQitIcHRmT0lZP0VDO3xVZFYiVElwez0lK1d0SWJGWz5DZ0suZS97dUBjK0smKTVvYV8xcyNIUiY9JF9gbWtyKmBeQElIIyNLS0ciYX1tbSRLMHYwQUI+QHxVdGxeJnlpcVQsJG5iPWRuQSFifFVscDM/OXQkIVFEQnh1XiMzRHVKbzYhKlMsPik5M211dCwyRjlVUVRLKG1jWFoqUnRVLzZk'@;
put 'cEkoMy9LQllJTkZXJT9NZjpoI0hdMnhGVEQqVH1KWmJ8NiZ1d0M5WHNAXytDelZVdTZoUkJpUi9mQWAqPDRhXTlZb1hvK0RRTV99bX02dVIkKDtGT1BxMFNSLylraztMeW1bVHtlZncqUjQxQGdtVUsmelI7XW01XS9yVVtLMyp1JSlraHN0NmVPVFFsQVcwKXJ9aUIoL3NYTFdEQ20zS0dlXWhm'@;
put 'L1RgVG1AQiV4RXdUfF5eZTNSciI4Yjh7SE01UGtnQCQ2S0BENkVGKXNsZS9qfU5zJXFRUEZVfktnR1UyWzRuIVFKWnVPJXhfNXk2bFc0aiVKfC9oLHQjRS5uOUNiQW02ZDUkQHMrL30rUCpzK2svWlp2NllzX19YKSR4KVd6Zy5QTFtPYWlXQX0wNWU6XVRuQCVJNlE8ZjtTdEUyUFgrfX13LG9R'@;
put 'byR6WkcrKEk9RzBjZG0/R1ozKEkyIX01fXQ0ajg8PnN5W2ZWcDQoVyFZTHlZP01uKV4/TX5hOz9VMDpXUC44VDpKWWZjJUVQQU1tIT12IzpaP1IlPiF9MnxRKnhOd2NLalRdUl0sb15ZcDc6Y2pOSUZlcyN4emNQKiJsSFZqV1I6Uz5jTU9EYCFPPHIoe2NHWTU3TCFMKyZ0PmJ2KTE9NXQoUXw7'@;
put 'aV41TGk3aW5MV1BpPlN4MT9gb0s6XTpRXytLUGZoLFJVTEkhSWYlXUM4VEtycD9qMm5eRmlkZ2BvNXk8Q09acUNCYl9zfXUxZTM0KVlfdz1vR2hpaT1NYSJJVG1oK040YWxfJl1rKCFQQlZlJXcwU2RQZiteQTwwKT4qI0x6am9nPjAxe0R5fEovN0ghKUp2WTh9QTxzLlVSaUR3Rjs/YXAmaTJS'@;
put 'VWZYTEdzPUsjP3htK0YxKy59JCFWOTdOOkJoeTNPLiN9W1VkXX13e198RnhXYkdaQnVjTVN6aX5bakVKJSlAS3V5TkxhenxITzJmaVZRVjV7IXBaNFk7VWBCaWpzMDg4fTV7fHhoZixBWExaeCpqdDtwZjM0bitCXls/Vj5tcU5DdTFfVCxTY1lHbGxLcEU7RUd3JjpdWFQhM01OVjJ2L3tLZyV9'@;
put 'e3dlN1E1b0Y1eTFwT19yZHU5Mks4LyxuODg0RHckSjQrVShFYm0wTFo2MVtAPWB5VCU2UVUuNyNEZSxDa0pDezNyYCFOfjdpNm8zYFBwa0ZXKm5ZM3FreDlPQVhMMEcqZik+bVlAcH5fSWFSUVpyPSI8Jn0/R0NYKXQ+TSFKcj1gJnU/IzxTakl0KHFsIy53R0Q6QUIucXJUdXVBRHtoM3tzX2de'@;
put 'fV5JUyE4fFhnOGkxIz5JdSxvaj8mZDY1XyoxIjcsfXE5X0BJZTA5azxlKEhmV0ZSVW9DOWBqXXtoQzJPWk04PzV9O0BRNVc9K1VPYyRyZldlelczTWUkOzxmS01yWjlBaDxwYTJVRDt9eE8yZyZyI0skUnpvMGE0Sy5kZmxwMkNPdilzODdXRVtaQjc4KS4pZXhFPGI7bU5CLG1Zdj01WTxgYkB4'@;
put 'Ij9CMG88ZW9yal8+UV51az0icjt4dVdkTihiJXNyWCp9Wk5JLn5DanY8US59VlldfUkrXWhLLGlhVCV7WjBFcUglRmsvcCZZSklyIj9WPzxHd3x4em9+Ijs2SitdNHJQYjp2T3JsUDlZe2wvbTJTL1BeVlJRPHh9Vm5rcXw5RmZ9PXdVYmMzXU9aU3NbNkFdb2xMY3FkZ20/UUlEV2Q3fEZya2pd'@;
put 'MncuRSUpdHdJISRDUWBtLDVjN3heIXhqUmBuVEgyZX5mKE9AYjxYaTQvKE5yVlUue0ZUP0IrQD96eyxOblBQYShUYF9ETUcibHJrXz5QVVJKYHcva1EiUiNONmwmLEtERjZ4bmshX1RMNm9dZUd5Zj9GVWddbiEyLHdPVlkkfls7R20jM3d1YSpUJilTZWN3bm1GSW5QOWdDcV9zTz5JJlNrNXQh'@;
put 'QCJTO3R4d15WLyNfOmwrdHEyVFZNJCF1NGNWcG8mSGtbPm9IPU58altGQjh1MCJpaXdWV2BmR2laUyp3LjtkXmFCbStIdSgyWFc9bWAyZD1fazpQV1NudktBJFcpL3BpZDRWd1EwV2ZsJCZGITBldjhHfjx6PGJzU0VdSDhjMWtfT1lRPXtMWUB6IlY+cTZIcHEyOmMzRkE/YUNpOjV0MXRybG54'@;
put 'QTgmTm8qNiYvbXM4WipSQ2Qqb2NdPVA6TDlib2ZSNjhafTRANC5mfH1ScjplVT8qaU8uYXt3c3FsUHxiP2xVVVh4UllkKF40fnMmVENFUGUvSFk7dX57cVhnYVVNTkVkImFRbTxeaklBPHBMOS4scmgzaFBuZnh3JltEfitrQmNvI1E5Mkc7ZCMpMHV2fnhqYyxXX0U8aFI+SFVzQTZAZmd0Q1kr'@;
put 'JW47K2h0LjUpW0FvYUUkcXY5a24vNUdYfF9xLmJFdyFfZXtXQD06Y15dVyM3cDBoJih0WHo7MSIsb3tlaElmaHReZmc5Kj9RIyI2LGY3SmQiMlk3eEssaixHRkZFLHRHNDduIyIiJkJKLnRENXNidG5XPT9bPWtnT10+OyxQSE46dz9ybmA7OTBxTlFyNTR4Wig1d2lTKVY6JmFtQE5ZZlljIjdW'@;
put 'LHZ+UzZwOUtyLjM/Y3p7bkdEV1pjfDhEMmZnWmg1WlE5WyR4QTlPJkJEc2ohYGpJd11OeSR5MHFLLmNXWVlVMXYvVGE+OSM1KGhOYDc/NFhiS3YuVj58R09DLjxJTDpeWktWQyJYeyVaP2Q+UUZdZSpLSCRuQ1JmKFo0TXI/VHheN190eDo/O3I/djJ4S0YmcD9pMiRnJVQ4eGc9alVhP3tePC4p'@;
put 'YSRJJjBee1JVUkl+fXVVX2VEPkNfPHgyVngpIkF7KXQ8KXxpJCI5RHA+eWA+bXt6WCw9YXx4WyUsK0pDUCFqUkZGNGxfY0JkQjMiXUVXPXs8LihYTTJROm9yfil6a0ksIkZ1e0spJHI2TEt8cyI2R0xDKDlTOUlvOFV2LHk5XlZ1KX5jb1UzMTlJcCMiQVNrfnV8PypjOFZVWWleOzc1cTVETHxQ'@;
put 'dnlYbyNlTmx+Nntsdi9gLiVEfXwjTUY+bClrXjczTkJkO1Fje25bXUhERlVgVEldWXJpVWlSamxxTnZJOCRUVEhjM35gLGcyIjR0LzxTTDc/Unk0TyNCZWsiYHVkc1gsdmdBUTVCN1Q5Ri9yWjxdN0g8ZmtELFN0Q2U3TUk5ZHBYfUZPRHVpYylVX2dgT2BebUVfa3MwIl53MUc9IWEpd0dQPXl7'@;
put 'XUxlXzordFREWmBXJSxAWER7QW8oW0gze10pK3QmO0d1fmIsPHhQVmN8OT43XiY9Qz9RPmpVI2k3NFtEV20reXIlOnY1TkRZfThnZFQrWl8vV3ZjLlhCJEpGPERpZiRoXVBRYzRCXio1eERzeS8mRDBlT1FdZWhrTUFCLF5tYSo4XUd8Z2B5YFhJYGZaekwieS9ESipXNn4kZkx2QEJafE9bXnRR'@;
put 'WCxibVRbK29ePSx3RHV8e2Z+XUAjTTA2I2BeWyM/Pn0iM0soNVc5T2RkV2d9M1ZIRX18RXV1UTM+QltXIj89NTVpQ3hnU3RbV2c5TmxCalA1PWw3UnZURDpBNip8dFomajE7bFNdY0pJblEsQ0ZnQ0M+KUw9Qz8zdHZIYmxCIkAxb058eFtdd0NIUV0jdXBFanh6Z3ZkMERwODEqJnEhRTdGSH4m'@;
put 'bGU4Q05zPjRPTm9nP2xuU3JPUl5LYyFRfislYE9YWGVJXUU9e1tjWSp9Pj1HOW1fKXV2dEx0IWFsVTIoYkw0X0ljPlo5PGsvL1Q1em90ZjhbRkM5STdUYUZNbT9uRkx7eCFWJjxnJngjZSVNYX1vRl0oU2dHNmI+NlpNUjxJOllwUSpdaWdzRyg6Q2cxRGVKJVtLbCZKPEFPe2w0T2w1R19DQ1F9'@;
put 'WWVvR1tQeDBDR0hfI0cqJTZZMSoxflNrL1BacWVNZy8/Sl01ekdgNW9sKHpUSkkiMyZTfEheQkg4TzRlezVlKjdZeFUiI2tHNk5veURAd0UzMTZaRCwwRUZVVD5sYnpOJFYhWDdgS0B0cm04IjdaUTN5cHUxRj5LMC82PmQ0LmEmMkM3Yy5ifGIzZm4wVTgpVCxvXl57L0U5ND9rI1JWQksyOW1T'@;
put 'flt4QGFWMFREKH5LZlNfdlhfMXRpI1Z7NzZ7aDBVdVo+QEwlWzUhfSR7QiIrRmQmcTd6Ri9Xe1FoTXVHPVhuInBbe2FZeCRSQE83Oltue1FLUGt0S15kc1N+RV81O182Y35HTEAjTGkidmRPWl53e3Y9M0gjUHUsOSluLHIjMnNyV0R0RSY6bnA6JClSZ0hbYCJyejJNVDRIem8mJnNDYX11Z2FO'@;
put 'YylGVF4lKythRVFhd0khXjo8elpXU3VCYUZOTG1+aHptT2hyTDtZMitOe1RtLyViKngqSFlXQT4jPShsQzUlRk1oZ3hMTTxmalR8a1J5IiRfSS91WmA0XnNTaFVDPjpwVElUYHpzZytAPS4oXUYjcTlGRSEyaEsrSkZPMjFkN1NGTVd8TS9WUzEvfFZNe35YU0RYKWkxaClUbTAkUXB1PnVSKWJO'@;
put 'dkZ8PGl2VElZYWBANExhc3IsME5hXkBXPD1MNHRaMUJoVzBmOmxURUVNY2pGbV8wdHJVLz9BcG8heT46NjxNTlJqMU0mT1t5ZWcrR09AP2c1UmpgPTBvekJFbWNueHlNIW0ucFVbLkhUTD9DaSFNKkc0Z0QmPjB8cWNwI3ZPLHV8MTUsZzVUPWdwdTpAeVFlYiF1QTldM2dVRmEhRDBaVU5mXXZu'@;
put 'JlgmWCJFU2NNRklwdFo/TUh9YHJJQn1Id1c8ZjtzL1c7NHdUTjVAY317eUhPWERncl83eUciYDooSG9SeSgrQT1PP1B0OywrXlF3dlAjfGN0UUxaIilDa0o5SlgjbHJ7QFEpWnt6Xio2RzkvSTMqe212OXxzRyxpQ1MxYE9GWyQjaWJ3c2U7V2pCL0J5VXx1Kz55W1pTS3F4YFt6PTdUYjIuSEA8'@;
put 'bVpQQF07UEIhdVAwSmhSS0hzKEFwRGw5TF0yMzZHXlRhOG9HPjlucHEmJTMwYHhkPW1Wfkh2S0B7V0grRjYzYU1oLi5YfTJhViFGQVZldWhkYSZdK3tFQE5GXUU8PmBSdjtCJVNnS1o5MnlBT0g6NUw8Tjc8aS5MUUYoVkVvSUI6UVFFNWNTbTZpJDJVZUpnZy5TYEtubSNZPW9vVD8+biM4blou'@;
put 'Z2Q4VTNPQ0ZScmlYWWNVUzojXn5sdTluSjo+Qy9RPWAkY19Md2ZuOS51Xk9kPkRZVmY3L18vbEtsQUhqSytzaG81ezVHTSphImpdbVpYP18vUjtdezJoX2ghbzk+VlApRml3JGZVUiw9JHdNImJUNUtfI3g1PytyNXl1a0NsckssWWUoKXQyLzc6MH0mTURqeH41OllkTyVRQkNbdDl0THdNVEwr'@;
put 'Ym0uWGApRCYlLmN3ek4lQF1IOC90U1B7RyRDYXhuJChJSkxHWCpDc0trOWIrU0s9TkhDJGxBRmM3Nl93UlFVNkBZQD1mIWI8PiY5NGNzS2w8K0EocTg8cSlVZCRoc2JWVXVsdTF0V2x0elNgalZ5SF9TRik+STw0NGgxbzpLLlBQaE1veXNtTVpDVm5bX3x8QyhKSGBHeX5QcTBfXW9YQWdPUFNl'@;
put 'PkdBemZsOVg6WEovWSZEYXpJNz5mcnpYZTVVQWhffF54ZTluYHxIW0JVSGcyWHF9WTRrIXRYT3YmNy9RQUJOUTUuJiZMWjVJQCZwYCFKXSh0c2VjIk8iTXArd0N9bCU4RHdqO1hKW3VOSEd1Z2N2OSVAdCk9P0ZwK15wUC9iI00mflF7bVB0ZypDPDZrMGB5XXF+cWBBck8jI3w0LHtoLE4yVCVL'@;
put 'VTFePi9ad2FRbHVlaUhHUEJ4ekVEZDVib19qdnssVz8wbS45fmIzbUU+UHR2K0l4JEpKalRxUV9JXltCUikvPU1yK0socHs4YnshMTpoI3dpS0ZyWHFuNFllQzlLSmE6QCxpOCZMQCtBOWs1R1hOYy9jdXptOE1VdUouRSZzYCtXQF5yd3FsPGV0fSl3cnQ7I0tJIVl9TFk4b01NXlo6JWxPXTRu'@;
put 'KGhhWFlleTByel4uRlYha11+fFNKPm1yMWIkdV5qNjFNVjxBV0ZbPG9wUj4wVWhLM1dXVTlzSDg1WnJTeWYoe2d+MDV5MElmdVt7e28kKHx1PzVgTWo/XUNnY0hZP0h0JCMvVkt0NUNSfFVpbjI8YEpnai5CZGRaQi9ib2loXUE5TDVvaGt7aTFDfHdUMWB7c1REKyZGPm9XYkQsdTd7fntCblM6'@;
put 'eHI4KT1ERSlFUSMlaGk5eEJMK1NbNnlLdkl4bykuTER1MT9tZ0F5M29BO2g6MzQ1IT1GaUZLR31rTkxYMk0hV3YhY1hKdiE+emw3dmRTeCMuYD9VI0JealBxeVQ4RmVvLiM7V01SNVhZdnpQLHRqVmd7WmYuaXh3IXVFLjEra21veW8zLCkpelZxITUuZEo0cXJLaD93d1dqNTRhMzB7VW9FSDVP'@;
put 'OSl8aEtTZkM9UkVGfHlHO2lPMUhfUE5Len1ZKSl6SUteJj9McGxBJixCNHt3a3RffDVyeU49VkhAeURZcTVbSH5zWlM1OSw+YCovQ3slfnZ9WiI5cnhTLjhEcUwsPVorQDFSVEheaG5wNkRvIUUsXlBtV3A5XkpfUCpPQENiaComVDVuV040LHd4d1pzI3p0UHowWERnZmF1bCw1eCs3X0M1TU1U'@;
put 'cl4jI2pdS01ofElwW0JycFgjSyFMfjg2b3tCPEowYjh3SE9lXkt4JkMlZUdVSnJNWyQrSWBifkAwJWFYQk9bSE0/YG5pL35CYXgpREdgNlUrbWdWOTpqOTsjSls2eDRMSGVtJTo9PVp5ayEoJHRbOlNHeFtIOmA+IUN3aU45d1pZRk07UX5wezJ8IlFVTmxRLkoqJkdkRXBvZEUibHltRFhURWFs'@;
put 'Im94a1sqSGAxayxWa284KlMveWtzNztaezZMRmlHOUZFIUUqXzRhPHNSUUdHaEFBdzh9bWRteXxDdm4oL302T1pIal5kUDw0a1dBcnRSPVRNY2E2YEV6dTxjPjk8Ly5fa18zZEF4c05wI0Boc1hZNjsjZH0uUUV5Wzl4X1g5QkciZzlKd1ZaUkJKekpZVE1uNldwOCpMaDklXjYyLEYvZD9ZVmR+'@;
put 'bEF6NU8jIV9vOjlkOE1wblt7NEJAcFRxKmlAcnB9PGZlZWRFQl5zWm9eQXpBNE5oISVMYWMxUUA3ejR9M0ZCX2JxQ1glY3ZyNW4+S0R9IXcmKkp9NWlbTXB8JkM/NEQhIUE1VXd1d3AzRXxzVkdCYEtBU1d2NldbVzBKOUc2d1ZOLzAhPiYzRnBtMmBCTHlUU0JiJWxLeihlUGszJEBvelIxckxn'@;
put 'fiM1Z3lXKT9PUHxddyNiS18hKlRHUD54OWAkYTJ+c1B2Yjo2UkhdRzA3Okt0dXh3KDFAWkdSRC5yaSpMSk9vJHpULCxAX3ohJDpXNGZicGMqVCpGLEslaEQ0T3k9SnM0WER5VEI2UCVbQzx1azRbSF88RzNOYUdodEosXSMvMjlVKGJTcElwOVN5NUJAZUlySkY5U1R9azFSMy46PW5XOmB7cH1g'@;
put 'YylvOWJYX00kO2FAPkZOOCVSSDFmWnUid1tXUT53bHNJWUc3Rj4jJHpocTZpfSpOMj8uMF5WJGtTXlVpeV84JDdWV0cxZzdZQTl7SXNRbjphOiRMWCVKb2xJNip6XVNyaXd+RyREfmtMYnMjNXBMYGNVRi9AUzMrdk86MHBqMk5RKDNNeF9wTiVlUGZlWVtKQTo3QysjTV82XV8+O3ZHOCk/XU9W'@;
put 'MG9bZnFJVmxgMyV0XW4qMGNMMSRxJVR4bm1uNEdPLHB4O2hgMkosaH5jdjJDNzM8bTl7KS46JmBpdkQxV1o5Y2VVVXtPNGNSSmAvaWghS3I3PnVYTHkpRGsocHxXfkV9T2FJcm9YTDI1NSE1NHpOKH1ALzcqPHwkNStiMnVEWX1RZmFQYSR0JTZxXWwxbURrTzlSY2tfMExySTtgWFVDa2dgUm91'@;
put 'U3YzLnBKQjElZn0kZyEvKmQyQF8pZjRdV2YwZEpgZkNIe18+TGFDfFNWdkhWSEZxOilvJX05fUtbfT5wdTkpYFdecllrd3dfWmpoI3A5RjV5VmM6c2BLME84YX01MTlPK34odGI6IVdAWU8lPD5tQ18wfW86NmZTQXp4M2hAQm4oc3AiaTBqOyQvWlp4bSNESlRDISpqZD56WzAla3UuXkVgeSQw'@;
put 'akxWLGcza25palBbUilmYVlrY19AIS4hI2V4KyYzKmNES0VVXm8vezFMJHBLM1Y2QTZwOjp8amQxNCg2JjFaJl5qSEBEdlJzX2lDRDhiVnd3VVN6emxER3J4MThjNUw1biF7WmdQKSY2O0E6N1UpNDQxY0VebExgfDJLVDk/cW1OQ1E6aGIzK3Q4UWw/Yj9Nb2BvT3F8N3g0Z3ImIlAiOk0+anYs'@;
put 'L344dVRPTiwsZl4jKixpTnpsNHJWL2M4KCYyR2RCbn5TOEsiNGtnfno3THE8a3leLDhKOCMoK0ZXZUhSMDA4O0ZRYXsrKFg2Wk1wcnBDPDl2QzdqWDw3eihYRypAMjVIbGZmO1BZVGJleChecjZFY1FzP0gwKiJ8TyJLQW1gSzNqXVh9MklpOl5vX1FWMjg+cz5sc2xKRGk4bW1rSyFAOXA7U15E'@;
put 'cnp6TyxdbCRdVytHYzo/KFtxSTszXVZHXjhKNEd1fFhLUXc+L2w3LF00fHUrIyROSCFRaTJCMF1wN2J7X20mJkNZOntyajElaEplQ0h6In1eZ0NSe0opYy4pLFoxUClVYSZiMmxERkBeXXxxNnx7bm0jZU43SSJeUyh2ZGhQYm5gSi8udlVkTlcrezpINT4vSjVJRWR6XjZEP2MjNF1UU20zaHNy'@;
put 'I35RLD9FImQxaWRxWisxZVNwWXx8V2htcThYUkd0SHQ3dmVEdUYzZHF1M3JXLmdwTCVgSGs4b3l1ZyMlQFI1TDNFdzBvUy9AWG5fOjgyNGxxfH1DfDVQdHU7RzdnMmJCNWw/QjVKfl9LM1JVOlF0UG9oJSM0O2ZveG5PW2g9dnNrY19ldHhiTUNqZTJ4enRAfkxnOm47Yyg/SlcsZ1J4KVJbQT9C'@;
put 'XW4oS2pPbn5BeD9eUzM3bFV2WTgvbmVpYU50TSEoVHxxRVc7Pjs8Yz5dW1AsPGUsRnp5L2U1dUdaYDNvY2t+e0dveSNXcCVZW3tmM1QsVnZPPFZjYVl8VGthPzArVXBALFtoK2ksNEpWNn1lMmxiXmZTfV9RTXBsfjw9VnhRaHN6K05uX3pdb2tEUkVhIUJjbFF+YDVYKVVtejJFJmM2JjE2TCN3'@;
put 'cG0wfW5wRjVqdVEjLyReOVRvUGlWdHk6MUM7TkR0fjY2fUVyU0NTPyElSiZGIWhJbnh8Ml99bTw4elY3c2dFR1haOVdjWUdhRzJIYG9CeyY4Plt6VX5gXTx9Ll5FWn5vMlBLZkwxIVY3U2hGRDM+fTRLNjhvMlZOIX4uJTguWSN+Ky4jSzglPl1HL11ZdnpBZ1FAIS5NSj5+XW0mVy8lVUBFPlc3'@;
put 'NEBOP0l4OlVQK1ZIKVhDSHpdWSFQNEZJITVIWX5dRVgqfUhXNUNMYD1KOiR7Z3xKX0d4QU9PUXFNc25gO3ZoTUtJOzU5fV87NVApXSVTZj1CZjIpanUhLHZRJW1eZ2Uxcy9mOmZ9Mzw/QCQsYCl1T0c4dSZqNiZVNndfWHIkQnlhI3Q5XnwvMk56Ik9HX3lHajkhejg4ZWEuLG4rVT4vKWFOU2FS'@;
put 'LExwd1hnXSgsSlZgeHN1PCsrcjtGJTQ+LG9JKVdhXz0mc0I0eUNvPytzZE9iVzlpaChrdUtxTSYiK3ZhOnlIbzs1QXNrby9jfV58RTIuZU8oRV9QY3VnaURCUEtbaUdoIjgxRyE9RVIzXSVrMWNyTnN0TldfclpBLEMqMX1JeSU/Tj9ETTlEcilXUCojPCZVVmpPWU9LbHV0LGYpWmRAL0NFYCFX'@;
put 'ZyF+VShqS008YyFSVUROdDlONzpIeWQjJDBXTCpoUiQyYHgsc2Q4akwqLlpdNk05dV8ley9IfSlFMyxqcTErRShgX3BwJE9gQGEwTGlSTUllLDQvQDVyP2cwMUxgYiwmYVJqUkR9fVc8K3tTOz50Zj14WnA/Vnl7PVZbRmxMaWFMYndlTWRDPyM5QSl3MX1zJHcodFRYak05JkM2Vlh+NF4zOXFq'@;
put 'WEh9PiU/Rm43WStpQ15zdFRZclsmeUdzYnU0TkpndG9LOklzW3c9ZXB+dj1scTFvUC9FNjQ4ZEwxcG00YHhydCI4WV5oT0dDMnpnMy8jRzdwOER0SUZ1MFpDaWwwWUNbOCkjI0I7JSRJO09PaUEzdSJaamEyNG0sWDVtKT1eWWwobyw/QXVCS1FvRG9WM1UsczdEXSRuS3pCNUtvOGd2eHFQfHcr'@;
put 'K1ZCIUtnNDlfY2NIVVI2WHQsPF1EKXheN1tLZCU1OGJ7JCk3R3dKakpXKzA2X0ZzNzo8RU1dUS49S0MqTVMlXkw+alRPJFFCZmV4L0cqaUlfZlNOOWpCL1k0MGBzKXIzdVozZHxtbVApYzpuNSp1dnhdSnRgRHM+WlFpInBlOnc4ZDl8NWd0eWkhazhkYTZVZnY3STAhZSNqbXt+S1JpPUleImV0'@;
put 'TkFfNEpJLyZKVy8qa0Q6fVtUaF9Zamd2T190fnRhcXBebX00XTh+RXpBJjU8XVQjb2w0LHc7K05Fa3RqZik0TGZ5VzQudV1yIyRwJnwmaj5bNTtAKCNGS0NWbVlXbj89N15UI0Y4ezRNITVeMT1hPT8pPDpgQ1MmKmw5Q0tCQnA2TF4iZT1EK1s2W3ZCO01YOFBNMjVGYnNIKlAuOzl3OXYqbiNp'@;
put 'KzV1bXx7dzIvWy5gRmswX3p7N0tuaDRjKkB+WmtkVnU9OTtve3RCKDh1Xyl6VTpaMVY2V2xHZ1JPPjY4TiVNI0BsVlFhZE9uQEMlKDVdIVpGKD9JQExSTGxBXTg1LkpxVE9DZ241PGFKOV1PQEAsMis3e3I/UkAkY30vezRPJHx7PFI/XnNnUyNjTWgkT28rQlBRITJfUm9VeFlLVSF5ZHJ2Y05F'@;
put 'WUgjXkNBUUt+L1lvQWt5dy40KCNiY2M9cVQoPkZ4YExPZU5TfltdMFRAZiJrMDhpTU97aXpIUTx3I11KLlN+Lmt9TFssOFliblM4bSRFbnk+K1FXaF5dan5eYEZMZTR1M0AjVWMifUpZJmJKPnEuPzpXcDpveEtrWWNZeXNtamtzQy42MVFCRUlhazxbdWsiRSYqKUpDc0Y7TnFvQH53OXksPHVG'@;
put 'ZHVbPDxPcXo0PWJoQHJEMEIuWUc7RklRS0dTYFBqVlAhJE1ITFgsQUQpUUJCZW9VTTpnSW1VK1N8QDlpQnImWSN5IkZzNzAwQ2FeYFZhPVY7K1AhViVzPlM7RFFAfilyJSFhKCxbJj0reWRFMSoiUlE5SXJGSVAoNVskOVdLbV9xLjxIVSJGMCk1ZzBiUDl1emhqWkU0Ny4zVG1md2hpVktDX2Yl'@;
put 'ITAyPj53Mk5yMGYsZEw/ezIvc0NOWip3fVdHbWZ7QFloaDxNSD80JWYhcWNNMFRHdDZtfWApfil5VjdqVnxQb2tZbmImUmljL307O2gjfHMuOUMwdGkwWzNGOmUzOTVnQEJWOFc+LEgpOjsmRX5RIWB4U0U4cmZnOnIiaFNPVVE9QWBReFs1UzdZU3Q6b2xHU0ZEVmUpdilhK1lBQ1F6bityTjAs'@;
put 'RE8zKFE2KV0yJGsrLyIqb1lOfiheZz06WmB+WngpcWg4dCU6IkZ+eWJbJVtyWkA/ZlQsQyZDSGcpcjdySTpAej54dk1Sdl0sW1tPKkRVaSVAWSVgbEk8bkcvKFE9ODJBVDMsRzZydG1Say85JU9TZV9EQGg7K11TRkt7RHhUSlRqfnQ/SGZ2JEFNNnUmPktrVShpRUImP3ZidERDXThJWWUma3s2'@;
put 'IT1QdnZSfU5nKXtRW0tbaCZ+JG5pIWVbLFAxJXEiVy9HZy5UOmhaQVAiXkVaTWtkaTRkJXNQTTxYOUs3Rko4MVpyVGpHZCVrSC5keWE2enZ1b0l6OiFbbltjNjRgJm9Ba29tPzhsUUFhdD8sRF5QUklLekBYfSpacSJXbnI0WU99TFtLe0RyRERzQ3l9Mm4qSzhGQHpQKH1nKiwvXXpuPGEyTDRD'@;
put 'Tj1jLmZtdERWJCtldW5MYUd6eGZMK1tnTGA/Ny8rPSloTFRUTyhmclY/YCtaWH4ubXp5OTpBYGs7V25eayQ4aC4pVUN+R1FJI1JFYCZvQipxM2E/ZV9feT1keylHTFdtQ2tGQGxvIV4hbTlwUHhrOSVnPDdwZzR3PngyWUh2T3V7U3RqPm0lfWNpKGwwVncwIkU1QWhSR1cpXz83V1JmUzkrV3NH'@;
put 'MnNlOCVeOjY+Wks6MVtDW3x6al5qKEw0RUdWbHMycU9USk8zPSglYkZ0ZF5EbEtMKzBxXyxxaGdkXzdkKCQ9YCE8NnJKKm1BLDFYSWROaHdnI0hVUDRjZ2E3QiIzcS5PcUxUZDNBXjhCQC5EN1IvL1JISXY7NitTcGB1MTtzYndMJFRvZyRTRVpOWjUoKG5aIXIjS3NVcFhRZWY6cSNsL1pGa35a'@;
put 'UzFfcyNqM29IcVEhYTxaSWN3Y2k7bChfOEM3VGBiWTVDVilJRiZJQkt8QUpwb01qaFRUZH1ORi9wN35tUnxvTVNEcS9WSD40aEE0ZzpxZUVpMSJQa2lrX1QpI2lGWiI/SX5pSj1+IzZjIysoeF9dJElkKTJJeldZMkJyODM3Jl1BRSFkV1ZtMlRpT30lVURkYDBWXUU0LChRNSZSLlhkMCJPP0I0'@;
put 'I2tlditueSQxayVmalMudFJrITpGfWN0cUVAVj52UnBYbFFUPjBDJWxvP11kKCtsJiRTZUFUbUUicWNEfVkkY0ZfPj1WbzlgRV1mPnA/I3lZV104MGwmYjw4PkNOTno0NSY2OkozTzRdOz5KUGdedWNJeT04VjAwZkw3TiFuR2EyLG1bciR1TVssLlIiP1hRKHNZI14qeURmXjJQRFtGJDxhZGtX'@;
put 'enFQSGdIWyQzellJe1gibyp+ai81KVZvZitKXXQ6LH1HfigmaSs8eUZAdE5oa1chbEksV1JicSpDQTF4cSg2dklrelYrQXdAY3Y/cm8rdjlkfnBUL1csVDpJeiwpREZYbHliMDp5PURybnE7O2QxXT5gZFohd21WWXF2XyRueEtaRklTMkUpKCR3VX57WXw5VmVPQmBRdV1rZWxAXU94ezRUb0lz'@;
put 'SWk/I1Q5T247W0h5fGY4KVUpIzUzSmVbdyZleEBZJlU3WStaUn4qY0ZuIUBmQ296Oy5wQ11HVTpDNUcuU1pGImR2PSZ4Xml0RUw+WytBWHleSiNpN2hoNTpKXVJNLjR4V1hUMl02NihTQFk4WihXO3ZrZndqZz9AS35hQTAqd2lUbjhmbzdESilOUCxONVIoO1Q0QWkuaVAhKDtNTz1zaixMd3Bq'@;
put 'amReK3gsPV5PYSN5WzJbZ1hmaTA7TnF9ZSk5bkg0XTIjfXdtQXVeNlQmVldVaFB3dmEzc2w4TnQpXktTeVFSb3U1b1t4TUI5L2MzNCs8eTZ3T0ssPmxeWlg0ZGU4KX5lZE1yR3lXcilgLkl8fT09ZVgwcC4jY3FPSncsdUBQMSRRdjZONlBSQWNgMTAyZSN7b1ZYZSo1RSFqZ1FiJHR2N2dWdC87'@;
put 'aHhuT0E2eHI7e1cqJEBidGRqPyZbSFU6Qmc9dE1Xd0dbJEBrZFZVXiZocTcyLjQhbVllRUtBNHBgXWZ4MUg1TnQ1PC41SXxGbEhZN2BJcDJgeUsoWXFrM0NiQDM6RyY2UWFmL0ghWH4/b35uUjtRaCgoY2IqaCxPfjlOLl1gMElhJkU4cD9oYVJdMWJATSVhc2xjWHpRfipTeFl4T1o4LDZBPkZ8'@;
put 'Y2EoPmQ7PTB5bF8kOHpMI2ZKOGVfczk/aE1wIUo0L0taYGI2SV5ASzV7ImNtXXAha0owcFErTFIrWlo4di4uNEdPM3plISQ3aGliR1N9Nns3ak5zZyhZbWc2Pzt6eC55KUFAMlZnXU5ddENvL0xwMzFmMEZMZDEjWDkpandxdE8vZCk7O0trJV5pNSRBR0VDVCR5IzEjV1M/diNGMHFqOlN3THxO'@;
put 'InIoayN6OT0qOUMqeX5XazwrW1tHOlFiXXkhWkBsX3c2ckw0aH5paFlBITJyVXA0Rj83Tlp3RmBDPUJdW01bMz0sRio2e2VGNj8lRVVLSTJvJVtUPW1ZQ2liYTl8R2huMEY/eCxgXkhMQjovQ0ZzSVY3bnVSWk5aXSxvPUFteSRyU2EhNmN5empMOVdAd0JTLn0ydHgkQmIyK0wrUyNGMFcmdFJ3'@;
put 'IiJTNnh3MGt6RXd6bSo/LCU7dFYiPyg6OWBeTTU7RHl6I3c0Pi5+eWxJWWVZUmBrL1QxTS5lfGYweTBVT3VaZ35RLjAkTUJpSHJsYkVYQUh5LHBMWCpMfGAlekZKUz5oRk5WVWdIKm5GbkJ5Sl54Ul9IXlhQPHgvaC9SUGBwYWB1dzwyKlhlTWNFVWtwOWZtSlBmcUJGQiRJYmRXfkYxL2V8W35q'@;
put 'dFlncnZ8YipUXkVdVlk+LHRUWHxGLGU1YXVYZnhWfjl2dDN3XkFScDBpYyokXShkM09tN3c8OkBNVkBpcmk9bXs5fTN9P0U0dDM9K3FDL3VfU2AkcEgwPy8rITk4YyoiJiZ9RV4iKG12LHsyfDg5PntmVWwweiVYfCp5U2FPS2lTPitwN2gvPCg1P1l+OiFqTF5ZdCh5VUt4W0A1XiQwU2ZUVTwk'@;
put 'UEp5OEVOazw0QS9bZXU1aEZVe2pYMmNdUTRELF9eTGFpN3s6XUowRDB0UyxSPWJba1cleTpjWFg8YCV2aClLNF1AbDY+elUkTV05O0FaOHxPZDA0V3k8byRiMDVMLltVeEI7fExTKF09bTV9dEI4VWsjWU1LVndLaCRjcnN6N1Q7b05NNVpfZWwvJXR1WD5LN0RsXXFqdnAuYDx+bXVWRE8kdzRE'@;
put 'cW1qcClAVT9MQW8/TndrJUllYHNlMykmYnw+eT1oTm95VDtfQiY5IW0paz9HRHooMT5dM000VDFDcXJZMjwhOiNwXWY0NnxXUXltTj1zWClwNFBiPngpPVlGNjNvd25sbCtVRnckRlAzNzUzT2lJfnwzTCVeTTdsOiwqZj8uVVVVUV9KYUhxPS9ecFRkZEpEeTpgRExHMCJobl5GPTdXY1NbN2Ix'@;
put 'ZmE2fDIvYjApNXROJDhkc1ZLITlnJD9pUnRCPD9GKyUrITY4aUh0QyFtJiYkJWc3PGouUW5qVnJzOUQzVklYcDREejVuWCt0NmdqJH4/UF9DWGlMNzpwT0tXNn5efit6bnZiMFZ+bU49RzMuPlJ3QlMoU1FnaF9GYGxWeXI9Jj9ZKztrbzQlQis1L3JoPWFxODxhUCl1fVVJa2hsbFRyIXJrVy90'@;
put 'OFFoJFJEYmQ5TiMjdWxLQm5SIntCNDVzdz1ZQEdAIng9XXRHdDIicVM3U3E0VTdyaUxLREdiTEMvTEtMdXZhOEhxYXNobkhlazwsZlBOdXguJjhdQzg1Z2ZTM0pwQEZ5ek9OcjR2S0s4X29pMiRNKld8K3dmMHszKmYoOnRaOjxmKFMrJD8sMjAxeyxiXmsvKyhJWVJuMSZIMl1BKzdlTkQ8PX1N'@;
put 'WzwxTnJraSw7QCVyJV90fiNHOFtyWGY/TmBEV3VkMlZ6VzE7X1FeOTB6ZGlHJV5yeFJEcVY+LCxZSXJJNjVqMllXOlJnaixxIk4rd2BeL2UzWltuVGR3WTtMUllLUGhbbltNJWA3Mm86VUAmMWk8aFJ4IS5vJFMmRkNlUFM4ejs4XyFETH57PXosNHVSNlJGU0h3aXpsRnpUcENrajJtMnU+InBD'@;
put 'ZCt0OWRuP3cuIWV1YHgrK0R0K2VDQlR3NzQpK0B0XlNJKktAYU0hKjQkKHlqUkpmZVJyKCslZWhCUl0zaDZvVEBkLHdqV01pQyo/QXV6X0MkbWR7TilwU1Z0Sl80L21WQH1eMXlgWHp+QjJJRXkpUzVzeD0yMm1KPG48S0p0SVRscmAqQXVydV4oK0A+OEt7LyYhNUVpaV1gWHhTQFladms5VGJR'@;
put 'PWEocXsydz8rSWRqZkNvYj9PRHNDKWg6KmByKXc0S01ma3c7SSl6KGQ7fEZHcmN5QGsydWJbaStqRnlnIlo3KWJ0P1YwYzkkPy4peW0ydColdSs0WFhWJnJbJUZBIWpNRS5mOnJfPCE9ViRBenE9aERHOH52V35NS0JnV0pDJGRPTVEpcnZ9MHlXIjVLUD1nbXIrQyw5dDZNWk1SJjIpNVJBO18l'@;
put 'KixbbH5QVTpRJThHfjd1L25aLyw5dHtERypLI3xdTFl2ayZSL3VePjpCblIwNUZfYHhvQiNkfkNdVVlmcDRea2RgYyVyLzlycnNtZ1F4eUJEJilQMHpqaFRTYnN8Zz58bHoyV3FwRig4SiIpfURYPCVEYCt0byYvSVUodS5kOTZbaDBXYFArQz5uTX1MTENJdDs8L3NWfjlQZD48Y1ZNUl9zZkBX'@;
put 'VjJ3QFg+L0lVYTJKensxRk9TZXxTXmAvRDV7N1skQiQpSTRxMVF1XmVmRXNTZzVtUXU/I2k5OUtkfjl1bFReWDdmWFp4bF5JYVgmWS5UQC99NzluWkpwa0tRN3w3Xyg8T015ezRwKUhNSV09XkZKdUldNzRZcERAOVhMPj9xIighT0t4ViVRaU86a2AxREwuLEsxOENPQ0c2N0pwPW4mdlkpJl9l'@;
put 'cSV4Pk94RGQxdDh1YSV1bX5oNjpRaSYwXT5uPCFJQSg7UV5tYGNIQXp6fWU8IWNBLHwvbygrcyYhWjQqZmF3M0paVmpDdFA/SzxFenAzVm5wUTVGSDc2UCpnaEpLenE9MV1vXWx9NmgpdyN9WWMyR1syZ0ZhdkE2dyljWk0wW1QjTSM/fE5VdFZaOFJQJEAodE4pVzlRbHdXU1F4cCFzdjlCKDI0'@;
put 'OGZbYnUlMlE9SmI5R1JsIy9ObmZiSyljLjtoWF9BM2QldUM3XyQzdChLYU9FJUMsWkAyMmYoUWBVLmJhSCk5P0k4a3ciXTtqKGdWMyZjVkRld2gzcVNKb31KLnh9TzpNdy5nXXcyIUUifnNTUlFwTCIjSntjZFVOSmlhS0VmR01MQnpydTIxTnA3e3gmJHhlVCpCeUpAWiU1JDUoTGYvYy86KSY6'@;
put 'aFUpWlJhRixfZmV6clJfeUdpMUpZNU5SbTcuMT9LOTVMVUckP2Vic3x6SWs7bC9xW0xSS3RIR0tsJjpefSsqPmV9UyJJVmJxZXxERzI5Tl93NT1oNHxtNWBUNXd2LlJoKEs4RDRVLzxAQ2EpWSsre0xrejsmRHheS1BVOkk2QCxTNy8wZXs0cEJPP2Z8VVFlLzNedDgufnJuXlppRWBTYH14VlRm'@;
put 'eVlpLDRqe0VLJTpnY1llVzVmW14iQzVfcisrNV0+bypualNFPU9OKmBrPXltaTNPKlJqUmN0WipnbXJNciFDflhBZls6bTpmPGlGdW5hOnRANG8oa0ViNksiPXRecWBATV17dmxMJSQ+V0VJZGJxNCYmTFIxRWpwfUAjNSN3YjUyJk0pOXxQYEd0KGRPdz1XP3QjP2AyWTVDPGJaNzdoPXgwL2t9'@;
put 'alp8cTZrMTJyMURNfSF9XW9DMmlSYSh6d1k2K2skbSwhQ2RvUz9bKFhuKnZCQj1ZUUhdJl05UyUoSTpuLnEqbyRjO0hKeml6PFBYZUlEZ0ZeIjg+ZnRkPnEjNVpkd05ZfWcmWDMwX0JwYVlGRFZYcVddRT1FPS4kaitpRmhDKmFlQzRZPTd0MHhUQUdobVNuVT0obTQyPm19O1A2RnI+TSpYfWhN'@;
put 'dGFRe0A0S3klelFaaUosXyo5RTpuYXR2JDNKTHArK3F+InptekE6TX5oPFFwWSg2ZVJIZDt+Ri4wSWlKQj5MNikrP3JCU15rM257Sn5HTWkmY1Z5YURHI2JMeWR6RmklSE5yTXF2SSE7RTpmIWgjPX1JYUJYeH5mPUQuUnxOayxhQDVEYU9SZ2dRMCM0SlpjcVgrLDtZeDwjUFVxI2lhZjBtSE4i'@;
put 'S0g7JD9hOXZIeEZ1c1A/eHl9NFFZKDVYMmM2Wk5RZHtjZGlXQmIiMUUiMytgNWU2WlFoYH0iYjxFLF0vNCRYX3VKXXpzQ3VTOE5aXVt+VjU/WmsxJjUmVXR4NlI4bDxEW3ZoMzpuPyJBM1s8NFZGaU4qOTk3JiUsJW4/V0szVyZnQSNuUn59PGgqRzVvTS4sL1dXbm5NVEhATi9OJm10dFVwMzg2'@;
put 'TF1aKWQvLjVwZzhIZlNKa111QndIYjoyPUMhLmF+QkxGWSNSMTxDe2MzQ0l8dj9oImQiTEo4PEd9SFlyMml3dTVfJVg9YTx0VSNQWUBvUnZHK1toMj46dFlNRHI1QmMrOj47IndKazh3NWkvI1F5OVY4UV5CZC53VT9+X3l7e207VW1NfiE7XjN9XTReXkFjdkJYNiJ2JCZfYi5SQ3hLPXBNVSs9'@;
put 'NXwyS1ZQQ2k6Ql1PYkJbQmNxNCl5MClvU1hIJWs+VGAhI0ArJE5eUS5NMyxGKk9wNk5zUWkhfSszN0I0XnMlWEBrNkp8PmFwXiRIKCIqUDVRbUdLekpEajRhKDZreThhRiMxTlc4eVpqVXxdd3pxZyx3N2kzekNbIWRMYl13PE5OIW4sTmA7RWtUIkQqSlU3P1t1bG1tRzxkPSlaZDdQbkNMMzA/'@;
put 'YmJ8Lz5JZWJiP0o5X2ZUPzBdcyt9KGdET0lPeyRLS1l9KWsuRzNeXWZ9JkYzYVAybzBpYH58SGcsJSxFZlkkLlMuKzJqIjxhNXEkcU0sYzw7KEV8PVVpRU1jUEVzKzE5cDE4MWQzQWFCWTpidWB4UCYpP1d9ZnhKUXozN1NaZXozb0M/JF9Pc3NUUjhxQFpgUTg9UEdCXV9ySjIoLyhQeUZyS3Be'@;
put 'O3R0WExKI0w3SSZSLyxxKFFITXlfall0eENHKENeWE9fcWtXP0NLKUNmdD0+cEpBPXtTN1AvQlR6V2UwcnhrIiE7V2JxKGF8Nz1fIV1sXnx0dHFrWEpveUcxVyxiIVo1O3JxTjZAfjB8QEJtO25Mey4hPn1waFkpLEl9PTExU0lwIThJNllhN1dNZW8/K0o9TzRQUHE5UWZGaHdDcll6fXJnez56'@;
put 'REEhVnFBa0M9KkRQXXJUTnpkdyhpaVAlQVoxe1l6ZHBbb2cvRFZzcXYuVH1VeEkyfTF7Wm9QcCZURmtkfn42UjxUeTIraUVEI1RtO1h7X1VYM1owMWBWajNWXS88ZTEvPG1ZTyE7JENiYWl+YnU9KlFUa3R+VEtAU3YkKyg2MSgkYkUiW1ZIYjgzWTk5e3huLCYkeFU7NlBZQyR4Q3FtT2osKjJZ'@;
put 'UmBpN2o2XThPREgqPEc7TTQrLH5afHImai9XPUFbSCZBQWUmOChJQ3ZebCRDIzc0U3tvPVAzLk16RlE0QUlfOXlnRE56SEYrcGUrVH1EeEouJjlZbX19V3RXO3dncix8XndRN2dNfGF3QHc7WTxyWiV8Z3cld3hvP1I3cS5aa3orfGM0ZmFTPGJzOVVCRXQ/M1ptZDRjP3RDb2lkWUxJdSVCSloi'@;
put 'TFZrO2M7RzZWUG4qMUhdUTpWUk9ALzAscXFtdCt8TlQkdUlaLHBEamgrbS9wIkd3cjA+dkQ4WXdMVD5jSVQ/dSJVaC8lfiY8ZnFVeTpVIiQ7VldzeWt4Lm1MPCQ8SVRuY1R2RlgpL1QjaCU1QnZ9Nz9tRDlBOldlKmYmb0JNdDE4Ky8wbmlkblB8WWlpJHRfbWg5ITdXUGlMZ1pOImw5L0gpdHxn'@;
put 'PU8qXSVhN1JFOWA8blhPT0VeITo5a3toZHQsW0VvbCNEPjw5JDVLVypVPnNfd1F5diJLOFo9Kkp8Kkome04sSTAmYiRzNyxfaHBsdjErc0BgeHY+cGVGP04iY3spLjRIPz1fMVEoKXJHeDduW1pfdGtvXn19QD1JaHp5RCtDeEs2JTl+WHBSdEg5dS5aVyhIUlM3Z3wkeHgzQlV3RXV7eWtfeElV'@;
put 'RWglI2YwPnJDaTooN2UzcjJzN2BpenheUWwqPnJWMSIiM29SPjNfIU0yQSNlXSFNV2Y/V2Y5UExeYFtCckksTSokbCpdN25LZ3p9bUc4diM8KGMjZjA2JC91VGk8YntkTGgxYkVAfk0hXyw3YTshY2wlYFd4JmVMI15wUndsdFZ2P0ZFLlBHWXRQaCZkWkhBMnBUN0pweUZ5QShvLEVqR2cpSUFN'@;
put 'TFRFdUx+bTNWOGZUVmtvZVsldSMqTDtqK3EwbnkjPEhJUm1fZDM2ND4kWkduREAiZ0g/a28iZS59anIsW0ljI3peOEd1Y0xNVkczUSRDKzFZK3gpMUhiYkBNSzAhVkJiTjUlLGAuWj5NSytrZ29CJlhxLDM/ekYpa3JvL1IvLnFmeXshN3o2SiE6PGFseE9sJS5meD41X2MwaEovbjJ1TyguSXg4'@;
put 'PGQmeG16JVhDIUpKL1g4S2diKmxoWUVpNWoibEY2fSplTHlqWVY9eihxRUw2RCEqUCVQc2VwcCk5RGtXI1B1XV9UWWYpaXFlRHpUSl1xYkZ5O3w7enw4cSlxfS88eEZ3KUw4YyxDQSFHZDhrWCp0Qk9DeUMhd1NKUWFJVWVXK09uaSNQVGwzaSZDe2FCN19we3xHSFJeaXk7fFIwT2d0eGhHQGp5'@;
put 'd3x+IXVCWEtqQTptZ3l7TzRaYG4jcVMiRDlIJXg5KjJuc0dVfURRVThvMiZLKEopaCUzJGNfOS5SQXBpSXYqQFdQNyZaTGtSTGNvOkMqdUJCVyZ2P2l6dj8/Jlp6UCQ9cjk8bkJUfUMpQ2pWTyY/Vz8mRkolNklWJDhsbCwzOnpEV2lZKF9aLiE0YSkmXzd1dzdtJV83enczSVtMJjtJd1Y4RXQm'@;
put 'QUc2eUhhMUFGfjM3JEhEZ1Q1LklLPHI8XmhxdlckQU0uLC9GcH0yVjpmVSEiP2F1MDRdL281eX5VMjoyVyNPTjh4V0ZYUXsyPzI5fUc4UWN6KjMpdjxWaDh1I0xRLCFrOWo/OHlgRkNXdWskUXloSSF5VC8ueV9DZURgYSk2IihTPyVPUU5XbDs6VmBATi5IL0VLbGwhcXRiMTNfXjkhe3FxLE5F'@;
put 'VVQ7ZnNjOl5eTDFNbHZPVExiQD1ObVN2VFtwdjwuVWI2Qm5Je1tNcSkxdCV2ZGMqezhedmtJX0A0IyVddXJGR3ghWmRVcF8kTHoqT1Aqa2FYOT5bciQ9Ni56TFVva04hb1kmUzdsUig5PGl2KG1eKzNAV0VwWzN1Tzd4ZWAjO2s6M01GJCVwQSQ3QywqMk88cUk2WnRRYHtCO3Zsd1trJEB2NVNI'@;
put 'cW5pd195ZlpxYE12O0FTdUM5Rm1veihxVlZoYWJxeiZCYXdJIXVAaFhEb2duVXlNTWh9O0N0YVlrS0k4Zkk/PVdAbk9zXT50ciQoZCV3VURHbyhjP087ZT4kQXg+YCNjfjBJMzdeVnZqKGVoX0BTUmNJYE5COT5fbSR4YVF7QGQyQlEmayp0TSxiOkkqMzpfK1hvXjJ1RDR2akJIYCh5RDJZYjN4'@;
put 'ajw4NX49d19+cjhlVlVPJEklN3k1QTczOEprOHhPJlBIelBUYFNXRDhIMjhAWE5jVj1bMW4lPTczYGB+NGp9RCs1fj5ffVtjPj0+Rix1ZGpkSDNVUnA0IUc5Z1Jtcn1WOjxieUVQSkx2SDJBfUJkP154aT9OeCM+VXpFQDs5ejEkLigqa2guMj94JXAhd2BgdElKMF18ZHY+XyZmUkZGNWtjVXdp'@;
put 'TnlmdFV3Tkk/WGApPjVbR3soN3JnRjsqTXhRVmZ4eiJKKE58bUJ6YixsVCFYWVhWZnR8bmlScjU/Xi5seXlgRCs5Rz1rUFdzLHo9V35dMzxIKWY9MkZCUG5UamtKak9TTjswbWopdz4mclU6TD9RbzJ0Q0I/cmRkeC49KnB5MG5+KiteO3tMelhIcmdqQDMiKV1FLCRldD9NMlpAMXB0UitsNE8q'@;
put 'ZENoPXc6SSZLOWdJfFQ7d3lrMmllIyZ9fGdlZF9+KGIlN25+aDtHVG5rcVI7VWs9UmEwKWNLNDUwVV1QWCIpUllYO1tkV09BQE8vc1JMeWc/eWovYnRJRClHOS5TRmNqc3heIi5LU1ZgWCUlQm8mRE1yQ187O1EmR0ElNX0/bzhKK1V7YllucixvTSk2SEpbdkt9byY+YiFyJSwmamNZQjUuZFZM'@;
put 'X2o/XnVhIWpVQ2c8c1dZPGJxcWl1ekJiZz9eYSFbMWRjeWxPWVE/ZTB7ci53aixTOmohZi9iemApMTJpYC8lblAhQH00WFNEaGxCY1pGZ0wkTEB4UXpMIk9iYTpzXXViR3l3SDZYK3BLa3cpTHVhPGkzPkJWenp+e01kQTU9JU4iMFIlMVo2ZiQuNiQjIWVNJiJxS0hKcUIvYiooVT89TE4+fH07'@;
put 'Kjd+V2V0Kip9T0xibFAlY0xSPD9AN3tVY1giJEZ9QGB9OXdXKUFtdnBLXzdiKjs9K3gjLmw9dW1McGxjP0tGN1FtRURLMlciWmk7K1NPMlt+Xl0vJktrJDQ4PFZieSN1SDhsPnUyKF9sWCFldCxlP0wqMTFHaTZDTnJgJmtSPGhTQU49Xnohfj4rbUI8fTJIdFJVQXcmM21DQlQhYzRNcTNTSW1j'@;
put 'a2hvUFJCaDhSbTR7Iy5+Un5IOWFSMlgwcSE4UyJZMGpLbi9SelQ0PUg/SS4qcUxDOTVxVzYieXxrMTZBdl1SSV0/JDo8cU1kOVk+K056cGJ6NTF9WH17KnJoc09OTyp8US8pNjJVZ3VuYCtjWXZzRnNKK2JpdkZMd1pKYSsyXihEQUYpRFBlW1sqXl1kJURtaVJdX0RrVGp+JWhBKzU8REhbUHdb'@;
put 'NEE1fmJ0XmlAanV8QCFxOmF7SEQmMlgyRGY2LCsjQGVxSGU1IXFwWGQyPkwkdDpVMnR8VzozSE5AcEBXTlAxTV58UioqbUxkZzJgXXNQZTJUdHhGZWFpayRYaWY1cU9dMjtjWSt0dEE8T0dBQmxDImclQHJmRmU2ZSF4Nyp0fkdEez5HTSVnOXJsWHArWGVGbHROY29ZSjNOT1VRVilTZE1lRWBY'@;
put 'MkdwWWB5N2JHPU1aQmM+KFk/amxNQjY8NGk0XV0vNT1GT3x0dEI6TlpGLyFPN246ekhNJllNNTdMSmY1a2t+cUowKUhJME1+I0BSZD5YVGZ0WCUhUT5kdis7Sk17WURhMkd6SE1taXQzMy59ek1JajUpdkUybzcwdEskOEY4ZnBPcTBwQFJlUUx0NmwwdE9vJDdUZSJ8WjdGOSZYU3wvdXc1LEJo'@;
put 'WzxjVDxNcE1iaVUoWylLNE84eT9pLDQ4T3hrQ3ldNzcpIXJxVnRRPCoudkEiM3cpSCwse2doITNpQDZCX25aKTNGNlMoMiE8TDlCYkw6YjRWcHdAKj1yOEtVYipvTFUoa1VLdWZ4O10mTmR3eU5ib21DLndNcFpbYD5aU2ROWCprY1VnNHsoVSwraH1GMDg+dTklJiV5e0h0IWYpfVBbJWAmdkd4'@;
put 'bXEhdCEhblZXQGA1dnM9WCQ2OThNazo7Jjc3JHBwciF6bX5ReCx1MlZ9R35sSGc8ViRTRl9uMSZkI2U8NHpVSF15UFIyKkJgflEjXyxfKyliTTs0NWw4WG1wYjRXQ01KVmdmYSRsPVEmIkN5UDRdOGM2eSE+eHw0N1tvbiZVflc4Yyp4ME41Pn5HfDNYdlsoNjRORGN+bGNuRUwoL3pFLEBtW3VL'@;
put 'Q1psQV5CXSR4SExHOkwiOEl0cUAlbmJKLCUpPEppRkFDRXFdKnpYdC8/Kj9VdkpNNWtxbkFFUGZUMUJJKmhreFk0UUxERFpEclU/IlJZMXU7eyR2TCI+OGUpekBoZkU9eHZUaGIsckhPckBBXi8pOlhkLltXfTtNfU59TywrYllbVU8lI28sRSU4eWhdIiNkV0FjKT4uYyRefUlGaTFBbywuMCtJ'@;
put 'bFBeK1FdbXNffCRxIzxUKiFUNVpDP0QpXWE4Zk50NykrZi8wSH5NLGBqOClZbXoyP1R4Z2cxTCYia2VQWC86Q1ded1A9flVCWnlMTT9lJkZ1M01Kd2xNPGY1NGdLOFF6OyhtdW5dVk1eND5KI1huSWlSQTFRPHIkWmo2dzMvO3NmKCg0ZWRLQVcramglVn4seVtbcUVrOC8iQF8vNWpSVThFQEJP'@;
put 'aEs5RytNNCV1Y0QhUVRSb1tnZ0s/NUJ9LlZTW1Q6MXclJGxobihYTDRBLCxnWTw+MXdtYFhia1dMIXtAV2dnM1paekB+KCtXKTVqS3B8cHxUamdnYH49Inw7PC5+SSVzRShgIkxvSjJmYWlaJDtlSndCZ044WnMqflVVZFVoWHtGaWdEKyo/YE0/TXhJe3JsQWppfF1uJTwkblVedlB+cjcpZm0q'@;
put 'IWZffDhOMT1fYyVWW1tAaTVQcSVGfFEzYlhgVjlLRGdaRHh6Tlg3fWkpPWAsfFZyUkg0WUYpSng/TSEkPjhuODIxWS95Yzl9Pls3L2xgc21QI11sKjgkdyNWaSk2bXxoaCQjfX0kSFJDKVB8ZUdsQ1ZfM2dXdiY8aFBAPGJwSlRmRC4+I2x+UUcyS2I7fHRRbjh6S0crOzl1JnYrMSVvSktgTyRK'@;
put 'bHxfVV4hNDN0XnlAQjFxen1SO1s3fTJ7PnpfakxOaE8qOz04YlY0X0xdeCFQVWMifS9hXUpWRVcqXX1rfEphMXV4fnRLUFNYTFM+NysyZGpCTz5jfHxeaitmais3eFlDVCJNYXdmaVpdNUd9R3pWK3l0bzUlLG5dO09eL3hGfUtTO2ladVl1NU08XyNVbkY1Y2htaj44Sno7cnFoc3hnTEo1aUdz'@;
put 'YExhbWo0ZkI4ZFpOSlVoTiJraT9RSF1DPGFUVF1LfWA9LnJ4JT50Jm4uOEdIRktlZE1fL0o6fm4rSiU4c3heL3UmIjYxQ0QwOVZAMiN6IVRIbCttTXJyKmg6LDM2Llgqdiw4K044YmdoanhXKGErcylBfig4TTNgZyUvdV4+VCMmenJYfilNYUtMYUJ2dGNyPXdNX0owOF5YOUl6KVohbX5jbjFL'@;
put 'VDhwTk4zYn51MFk3Zig+Oj5uYlNFNSNCO25zbWlqb18vSDZ3ayZwUT9mUiRjaXYvZjtLVmxMfHY6dmZTOUhdeyR4VjppW2U+MEo9S0NjQFJSIm9YPkNQUzpdflE3UlNBPkcrQ2hndm4hezo/a1h+LCVILGdTM24sMTdiZjw+N2I1M0dfJXRXVFdHbTQ6YUgpLnlDMnFGbFE7WFs/MlttUWBVZ2JH'@;
put 'NDhHWjVlLFNzRGdTUWNiQ3YjYn1mTXBJbyY/UkZ8I1NKXkFVLE9xIWtwfEI1VDFkMFloP0RWXU9VdlNiSlosUl84YVFVTSo/e29ILkl4KHNpcSMvNSt+e2V0dXQuUUx8Q3s7eVB4dmlIMDFuK3FtNjY5fSx9YWY/PHBSM1NmRzokXS9mS2RDN2E7aGZdO1ZDYSQyeWEudzQvLzhsTlRLMXFHJjdW'@;
put 'PGMjK1FsZ0dXQG5UWmttXmJTIXN6ZFsiZih+eU9fPVk2MSZpJjxWWzl1R0ZrXT9ZWjpMVGRbVm9SS1p2V0twVX4yLiF1QD11UGR8O2NbcDNpckYkYGt3VDVZMFdSa3lLZ05LZ0w3dX1GO1t8QF1QU0ckfkcuUl5LUj9IWG1sTjY+cDp2PCZKeDdQXVcjPFpeZUx0OitFKE9zOXtHJjJ9WmBVNDFw'@;
put 'WVkkbGQxaCRLdCV4WTMlL1o2KU9tJFBbVk1DL0VqXVFqaSxsIyxrNSYyRzYsZGVMZ016UmQhPC5EbncmWj0zXUM2di9hdXo3RTFbX3E1R3smRi5VST0pSHlkPStdYXdtczglNjtCSUpTIyo5ZHI7LCMlL0dCeEM5ayhAYiFnL0NWfWVwNElCckUyOlo0OVMqb3IyVjFvRHd9QHd4XixuKj9udiYo'@;
put 'fDFiY0JxMj5bQzlJaU5kK0dZW21qIjBoYl5FUVtSJU1FQSNub0YkdXVPXTxHR1BUTSpyRSxvZDZQNGMze0Z2aFo/LkBUPE9yITc6YXZdI14hMVU+JW5rUVR8OkBrdX4uMD9oRHh+X2p+VSN4eUhAVFpzJSN1U1g7azZ6VFZJPnJ9Y2dXOlZ4fFozKlRHcDJVV0g1Mz9+NEsqMFBnakJWYjBCLndO'@;
put 'MChsW3drS2c7blJfWD89NTAkIms+cTVNUSNDVztCN21iN2AyOzp5QSolV2dmXno3Ylo3enw1S21qQFd8eTUjZFRPdUlJcDVHbGVOQ0QxMCZwL2p9P0VCYSpWSSw2RF0rPlA4X1BJKGNnOU99T0drbSgjfShVXigzSUhaJHNwJVQmSlpAPmBYXyZrYl8iJE0rZ3hmVCZ7JC4rL1tbUThKbG9FQFVI'@;
put 'I3NzaT93RSUreXNNS2tCUX5pV0o+aVh4KWgxSStqITBhSDpJKnFZbytQMi5FZDo2aG8wN2s/IylsTmxaVyw1M35pJS52c1tlMnJGJV1mbEVbWTgoXj49VDdpTkBxNDVnRUo9TVswdy5DeVtxeEFpJTxtYF56RnxXNFVYQygkbVQjXkpiUFowMiVqRTB2cl9ubWc9VXsqKTxDSFQ0aFNeUlBeRnZr'@;
put 'eSp6KVg0VjJ2Z20wcElDOUMjZ1ooUiN7dlg8RFFqT3BFSWRmM2wwLGJxdU4oOkc4bSNiU3xhSDQsdm1KL2dgczxsTEBkeipQbHcqXnVAJThscXJdJC4vZGlAfHUhXj1KQCZ2UWciQjtJXmlwfXk/ezdObEU7dF5SNXdFanFobDZJPjROJERBdCNCPjZgfClBbSpsL0AxdytoYGgkK1J9NV5gbEky'@;
put 'MDpaYU1lczlvJW1ibiJbeXouRlkxRS9Ya2kkPH0yK3lNezArQTNHenlzOnlzUGk6bkRVVnJQZDRjPX1hcWJILlc1TH1gYGlAUiM6O2d2PDJ4dGRPZi5bYCxaaiJSRUVnWm0yNU1wYzs0Myh+MDZ6YEx5XU44ZzcoST50ISx2c1N7JlsmZztfTTRBYUZVVCxxQnxLUCpLe25UUW5MdUZMSyM8fDJF'@;
put 'VXk3O3FJQ30zUVcrYUwqazVjaUJwdjtpPHtEaThLPUhvNHNJRjBkJXwzSHdobHc3TCZqVlsofG49ZDJAdy92W04weHJdR0FhPHFlTW8oc003Qnh5OypvR3EuPzA6UjlJVU0uTGQ3Zzl5ZlRQWylXJSVmYmsxTlsyYkNWME0mMHpgQlImLjwvND05d3ZeUHxaMz87SmJjWEZxIi4zRT14KHQ+UmEp'@;
put 'QG82aHcwPm1vPmtWZW5aXmBPJSp+PTA3Qk1SbUQ6UTt2d31dOGtVTSU0ZXohUHh9LClQX10vIlV0QypwSDhQaVQiXzUsfSIuNCNrOnlJOWtEej9wZnZUU0dmZUBnMmhXdD5gOWtdIkkhImtMXTo1V0V3ODl6QSRxaHNSRjJZKDhEM3hPS2hCWWhMZ1VBRldpNXBxN2ZJNH16XihUdHhYS3BqejRB'@;
put 'RnYzWCpyYmhdfHl0Tm5ZMl9+OTVzV0JRRVdmLG4jQVo1TDxjWSROQjY8X3hIMjcoPWdlYDFQdGc6WDV5RExrblN+QGJtcHtObmw1d117cW1ILyM9UihqNVBueSRLY01LIiFMWlddJipgI0dRM09WYkZWMjp+bikycCZVRSwoT3dpdm9OWWpIKGZdfF4wa15PJnRNbU9pMns9S2wlPjpdMWFyRSVA'@;
put 'U15qVkNTOiokL0ZNQDgqV0Rmdms5bSF1aGdSbm1WNlg/O3J7OmFEb1pSR0hjK2wxRVd4MW5EXTVIKm1CQ1UjdFJmNHZ7TEdWWiMydGhfbTNVZFdVMmlHKitYcz8objFmIyFxI0k5WnBVdVBsWlVDOkoqSy98NWElVnU2QXxMOSFMJnV5VkQxNz07Zl56cFY/WngldzJ7ZDNIPXNbJj0oNlU4dEtM'@;
put 'W2NXVmdBZVtYUyp4Kn46S11zZW4yPGJbaSY4PWckUnNufSkyTmojRl1WY3lzZmxUbmsjZ0NAU09mRVgmQVo2R3oqOT88YnU1XTxIelteJCNHJFRmMWduZztHUjlEeX0paCt0fkwsJiQsZX49P04wU1ZGUk1uRTZJei9jN25HYCQweGM5YWA9OXA0QlYiI2ooUk5pRjVjV0hMRz5ncUxBUDI4WXAy'@;
put 'bGRKRTdBZypXRXNYIyx+VFlTOGg1VnEiejkyKkwhMTNzTXlIKnxdVXV5RTcuWzVzQVtBPmQ/aVB3aFI8OUUrKStLcn52RHNackQjUWIsXSM5ZyZ9NWx8YkxtMixsYDZXd0xNK3YrWSheOXA+eX5XUnY2QWt0Q2JETmw5als/fGlpajRAWj4/MVc/MndIWl4pPDlJa1YjIW5QM2FYNDNFdkpGSFVz'@;
put 'KGI/a2dbdUpSMEhoNkMrUk5hT2VKSilWK2hiVDd0ZmkhLn1LTStrJT93dUQ8d2FdLFNRcXBeKnpsZSQyX1YyJUI1bFZdU3MhWHF9NDdXUHVzcTtsOUtLMUViZ1hdOVF2JVVCQUpET3FBIzQwTH0hbzxIOFplW2IiQyR6NX56fDt9MUxAb21aVkdAej9Ofj11OjlOLFczKng/XXhGVl07fl53KVNw'@;
put 'VCxUNyt3LzMhViZMY3s+ZkxDb3I3OTl5PlJGbD9re0coczE5S3AqKj1LanYyajRZOW4uPWg9OGteZTg+NjglcWBqd1ZrZUlCeGFLfU0kXV1hdVpRRHtOJTV6bm5SWEkhdVZNJnBJUThRcE4oXygzZkkmbjZMS21NY3oyY1BMKnxtR2oqen4oSk9eN1o2UiFdUEIlLCpJV2hZNjclL2I3eTk2S0di'@;
put 'RENueSJrUy41alRyU2J1ZDNsNkkmXUxdZikqUGs+R1daak1fTjJEVlpDb29NMWo8UEVHeSRTXig2Tl1DMDNfTkJfYjIqLihQPiM4InpTUSw+Xyk1bEJidG5gfFsydyROVUR6V113fDxkYzI9ZVAsfjorTXBDN1piKVphMHkyT3A5JmB5XTxaRWloVE8wUzw3e2x3RnV8THg/T0pfcHo8eTlCVzkr'@;
put 'cUEpUShoJnRpVFpXKURXYCEhaU1JYntiMWBxSEQ+cVo2OTgueGVgPWsmYjU5LzA6Lz9pcEcvXjp0YjF7RFNTYmsvPENsSEBYMiE7SWo6U3M2U2hhOWYqR153QCg5KDtRTS8/SDlLJiosNExMUmNtISxKNVtyezp2MDtqcU1ROm1aVyRVaHcmTCMhT0JuNj1yKEpEYng7eFJNPSs2bDJFPyooP0Iu'@;
put 'dUZhVnVQJU55RCI3UH1odS90Wk1WXWNvVSklczRMLFVra0NDW01uT3R3b3UoNXlEQ0wieys1QDlvaXtDMEpLcFtoaX5eREFVUUAqZihkXmQlLiU0Q0t7YTl3K25KMEo3V1k0L0BIWHAqWCkoOk5wQ0NbMFkqYGFKfTJoeH1lY0p8KyYjfWBBJjV0OVR1Umd6QFlVZiszXysjX1ErKkAlcTtrRyFe'@;
put 'Plp0I3x8YD1IRV4zSWpYMTY9alprQzZ1RX0ocmAuL3lPXiw+JTsqV0d0cXJXczBvZ3p7dihHLkxYTWhgKldFXlFtP3pRcVdjLHAuJDhqWTEjIX5FUmIocjd9WH1fNkJyMyooREV0WHZaW2VsVj8oWW0veWhKTyYiaWBaNXoveTolNH5QUG01I1B+TkRhdToxW1FxXXsjPitRaWZyL0dpLFUmRDgp'@;
put 'Ojt8aV1STiIuZWp+e2V4Ijk5eyZePDY1OVhrL3hIP1tjL2dPTCxVL1guIXBsKn18L2xaY1l1RFp+b3EzK1s+WUApU2lJNHA3eit5fCl7T1BHRSVFTlFfWDI7YlFde0dIWy5DcC4yJSpVSXlyOjFreX5IezQ9XUlqQnRWc1FMOiF0amQoMV57WU9deSZWS204ZV51Vj0vczF6WlhzIzZCazU7K0M/'@;
put 'd1AhUSFGa1VdM29rPno0LG1obE9NWDIrRiJDWEspIS96SU1hUW1jSU50M1A7XlF2UF8zPVhlPCkrd2NYbyQkWC92VTBjO3Nod1oxKHplbGJ5fntUWjhvQCtZOyNNPTFXe3ApPlsuQFgrci9AOyJGKGJAKzVeOnFnOWk8fmxSTyxfRndgc25lQU5GYEg5RmxwdT1TQi5MNCZHTEU6TkIwJHE2YCto'@;
put 'JjRAVnA9Wz1kWygudVQ4eEkuej09bHJYSipkbjVlPWlSOntDVzUwVj1COF8qfT0xZj9CdlJSWWdSeiZ7cVkzcjVndyNQWTg1OEAqZiFtL3dUaXFnMEZyXj0xRkpPdDk8S0Q/PCVbK1A2RlBSWyE8P3tCaCRwQ2RgPnciSTJPdT09al4iXSEiKyovVDdwLD9wOE5GS3B2cHh2XXlnPGx3QGhSUzYy'@;
put 'RCkwQVA/Ql5YTCRKWk41SmVSPUs7amU/LDkpSnNiUVh6MzJKNV1wIXtSXz5vQnZGOC9AT18+OX5Uam9oUi54aDgkMDlhL0tNNT9kLjs3WWtMP1BGVURtUn16Ykp3VjN+UTl0dj84ckFuTUMpOnd0SSJpWnBxOixlM3oqOVBZbixTWExaSkc4SncldjJoSVdTTkFvMzllL1cufVV4Py5CKF1hJV8w'@;
put 'aGVJQD1nW2QkNFg1Jl1RTVpRJmRqZExLVXJPcHxeVz9BJWtZeSpWeWdTZlEoMEJoMXlsIWxbMkVmVlQveSxuJngyQ2MxZmJ5ITxsL0IhREg9Ly4vOiRRKWdwLlltUGhmWnZSS199PF5KUkAjQUV5O0clNW4wYClML0ljV0w2LjJoTSl1alQuSk05RjRtVCQvZWdDdSV2VHNrIUFXVn5hNj1RXUt+'@;
put 'bjFvMWIwWmNuLzt5dHsud2k6ZUNhJjtLK1V8PzJAVWttfjNnLzRAKE0hTTl3elhKfCxAdjo7SytNZHJUeGtlLk1LdWEkY3sqYW9bW0dVZGxTbjZGTn5GL2FRI04lak4xT0FATS4/XmhvUEVmYGl5IXQuJXt1W3JoOil1a3hvPE0pUC4vYkZYOmFFPDZKe3dbUSZAYiVLWFtHQFJKajE3NEJjUikq'@;
put 'WyQ3RC5SR1hYYiNRL1R8cDosMls3KEhhKDUqeEs5JEZUSF81UEc5QEguaktAPk54Ok1tI3AyZ0MhdyZtZ0NwImpZMjo+SE8jPG9oM0s2bVliWS4xSUtaaEBiSzRkcndPRzFrTkA6WmY+XXwsTjY7Kl8iZiFfMjp9Ti5FbyUuaFBLQyk3ZnUkVzhMK3RUUFQjbzNoXVtmI3VOZCQ4VkJAJXVQP2gj'@;
put 'RzdZNHdpSDZqMWUsc19ZSy4xeV9BaHVzZjpELixodnB9PWIuZUFGOUdfbWp6cSpDST5tXTA4XnR1Pm9+ZTVTQVI0ZzsjaExDdklAUWksaVJGQik5VVhsTzM6RTg2dUk/RC42QCR+Sz5DeERdUylGfUpaMU9RRFpjJmdURjx0X3B4P0JzRTYuM2pbOzJVVUppLkx6PVE/RFdQU2Y2XSReSiVTQEQ/'@;
put 'a0g+I25gandGN1ZVR1p2IVZjNSh0XWlqcTViWDVSb01JN0BfMDxLKkBseDlZWSxfSD9YLDg0UjFEb3p8UzNHeGxLLlJGUHRFfTR4fjkvKlRJLlBWeF0pOithZDllTl5iJVRgbVRmUmkrRylCTVVTMmVUV3w1NTtOcDdaWFpCTyU4PHtEaTtWX1NiYS8xPSZKTEBbREEhPFZQaTpbfEVGS09iN05e'@;
put 'JklhODcjanIsKiQrOWhnP1IjQmB7SWY1WSx1L0Y4SkxDbEgqemErYDtPaWtAXlF6XUhGY35NMTdtTTo/SFIvNngrKXNMbzR3TSp5NmlATHxJSE1oUlg1QX5BMTUsKCE1cSVgTGVvIV9Faipve2BuZSxze35+dFRxM2xkNjNeIU1lajRITyR9eyJhP197QlJ8KDpSJFpzV3BoO1IkeVFeQWZgVVNf'@;
put 'QSl+dFokbEtOLH1EOH0obnopU2I+eVdIQzN2QTFVVzkiMjRlIUdRKzk+Q2V3cEpQMDMkVyU7ND9Tb25KPH5Mc1ZVajVBJkFeeUhFUkI1NShmLjF6Rl1rR2YmLHRzOi5OZyQ0UEYlPEQrdkJFS1pTUytPdVtVYXBWQTwvblUhQUh6YTpEUjp8b3RKe2ovd0FnLHZxSXNEKE5tL21JYypmTz10eUxe'@;
put 'Jms2cCJRX0EiVnJCM3ZzYkghLjQqMSJWaj5dKFg9WmY3RztKWEVKOUI2dXVMa0ptQyFydHVTbTNjZ3luXm1SRiosSCxYSG5lNF1BL3A4TDBXXy8uXWI3PHBDa1F3QUpLdWRJU2o1K2k3NiVhaUpAcjFtUCVocj9RTCF2eVlSODpIIW4haSxAI2A+X0xWfk5bdjtVak90dkIxXWRnLlQ8SDR3ckdo'@;
put 'QkldOSFxY2kjOWQkYjhkOF9gJVFDbz46UUhqaWJ2bSpWZ31rbVk7NDNOUTA9TCh4bVZASCxVNVRjcE44bmgidkNXOU53YStgPlhBR0FnREJ2cGU4ImRSVkFtZ2o/UlFrcGFGPXRabnZsRFVZTyZfTW1uPVVlWSo2Sn5QNiIuVFJEIVNJY1U9dXp2SVZnKWVkbkp+OX5aVk4rZU1uNV4jQ3dge043'@;
put 'Qnt4TXtFUiswNWQ5aylrQylDclsyOH5RNmZDKXk7V01DYEQ8QDE3JmBSayh5cDVfbXVkbGBbNk8qTjx1dDxvMDh4S2RtJD8zanw3ayEhJVg/M3RIeGJxeXk6Iy5wODE8I1VWe0xTciZPZ05SSGdsaW8/KVFjWypmbS9WaUwhZ3tUdm1gWmZAQTNdaVBqJWY3ODJjXWFPPXEuWXIrYSx4S340PEM1'@;
put 'KShMI0k3aGYuRDJHQyEkP2NfKShDVklXKUE8Y05TLDtAOmVKTmdweVckbWdbR1ldaiVrdTciRyEzI05IaVNSImdAbGhfUGMjRndRNHkzPWp5UWIjZHhzM1UjLmdNJlp0bT0idVEuTUF1Xn4/fWMmVWg5OEhCNnlmZ1l5T0ovLHhLYnhtUj5FT049QGcyUiw2aThRMmN0YnM9M2JDfD9jfjF2LE5R'@;
put 'QkohXUsvW0ZSS1NgVmZUUzJ+XXRpJkR6bF9uZD02PHVhQzc4Zy85IzguW1FUPjFRJik6V2xzbzpnUi96ZUoqbHBLOzA0SmZhWTh0eDNRVXQmMytpb1dFTlp1MnwhUWowV3R3LzRNbi4wMEsjJElmQzJecmFaVngrIUZXXVJSJV13QFU/akUoNCQyVnYmY3dzJEViPDFMN2E1Imc+Kz10N1VDLy8+'@;
put 'JlJkNUhhYElEIi4yTFNVVGh9NGRnZEs3Z0ppVTRYUkBQeXU9IVdYeVQ1M1NGYi86K1lqUGMseD9YRFU0JGM1O1dmY3Z+eFQsL3xTIU0kIUAhaHl5aD0/cFNzTipjJU5Re150RE8sT29wVEVSL1Y6Snp3Kl1lUkQsO34/ND9vNkR2Uit1WCgmKGdefk9oS3IsTiNvMXZsM0lJaGlQdCZIRkxXWltg'@;
put 'eDhITW1ffE5RIThEQ2xORjNAK2d0UjBVJl0rWzU+WlEsUTRzVn1CNnFaZTguN2RDO1ZMYn08eFRjSnE3QlJ1NnEiOUhsbWZ+U18oI3UuRiVlPSEqNUNQWVheOnR+TCYxaSFnZCVAO1ZJejRbZm9eVDlJXjtYeXU+cyJeIV5iW0JUfFlQMlkmSlAweFg/VU5kaGo0UVNBPXd8MiFJSFM1VXdsO013'@;
put 'VClJJEBpK2BKXTo8YENGSVg9MUN5c2haJnQ+eXBAMmQwXXxjOnhlZ1Rke0MvPj58fjFXTi93K29eVG5ML3wxIT9AeWJ6P2UxJHxuL3M5fEtSSiJCdVshI1BfTHA0SWg7QEw1MCRfZTZIQkllNFFWdVhTKmZFbixFWjZVIVkmWzU0Y1huSVJvTVhNMzhSUitKTnVvXStxQnkxXVhyNmZZKHsrNzEi'@;
put 'RU5mSDw0eyFybDAiYEAzVHk0TFVDe0MufCRUQGhYMG9BcSVQKnVYYF1VckJJbi46I0V0clIkNVM8WGp+VmYpODMjbGdFSWtMczcle3k/bnRQdGN5Ln47fktDNz5SKCQxRHJYU2NNQDk1RCMvJC5leWMlL0tYbWwjcCJvPWtlPFIpdzVqUUUhL0xfS145KnQpbnt4JUxLVXFYLDRwQlsjfGdYZzhF'@;
put 'bCMkLyJVYn5afmNOaW49djM3e2hWTzxZfDA7RF9zOEw5dzApNGU4Sl9pQjN9QjopJmJhYj41bEJlaXxFJFMrRDwpOSNoMnRbeWdRR1hwdzY3JHosOEdqKCohT11lY0lFeWFiUllaSkB3WEA0Pk14X0pdbkpqVTEsRUByPkVKVCojUj1iblJtI05UUmdLUWpRKD8pa1VJd2V8RGE2LyZtPVRPWmA7'@;
put 'UlRYWDNnNGtxMWlxfElUYz1PKnpKPSs/IkRUb11gfCR0cHgre3p2M0l0ekI+ITIiYkNBaXFmfXRDMjhpKCFGJSZVdXNvbXs5JVl5ZTdTTmhbWTJMZERYeGhXJkckRGFuS2ZnaCxESGRwSTZjTF14REJTOjIwOHtsYmJUKG1GcyU5OFNWJUA7eXdJUXdHdSsrZURaaUBLailWaGhwfXxvOX4jWSxu'@;
put 'THZzOFBSZTRGTklEPFBhJDZpe3dAd0FwNEw+RlFUVl19cCoxTGJqTjVGIm13NipLeXkkcjtENU8jZm5DLj1FfHU9LmZ3YUNYIVI6e1ZyQW1ZPmBlPnZ2RjNENjZFRUJsNm8rNFFaYFNFSyNyWnd0XW49XW1ffVRCTEVwemo3JD1Man5GaUFPZyhdWHtNTF9DSF9CSWhmaWl5M3QjKkUmKCF0NF4+'@;
put 'PlI+TlJvYnhUTzFXRytbOHgqM1R8YntWS3lZNmQlZkQ5XmdUdmRbYkFyYDtdYU1aKkEyInF3PEtAdzBbK3lsfS90e29XT3QsOUp9NFRkajwvKUxlaE5re1VrWSMpfTshaV9EUEFqPG1KTF9nOFlOVHBrdWU6WkREOTs4V0lQL2p5X2NiVW1wYD5tKVdOJG1gX2ZGQCw8U0JDZl44a354WSFtRyg7'@;
put 'ZGkrdlJjYGZrLkt8Om0lYm9lYVIpY3BLKzx1TCxBczI7YmNqd1FGPTUwUytmLiY0aXI+eko+cFIlbzYoNVNkfEB1TDRBSW5DUShIPDBmJUouPyVKL0lORWJkO3pGSWVOZDlvKW85UXxHZkwlbCssd3tJMj5WK2hhUmwycjFgTTRxJGJxc2M+X2hDMDBFeyQyTnckVWt2V11uNElxWiRVQ1Bte2xG'@;
put 'aTptNikqPyheZWdkSkJ2d3VzZG43Y0NKIilwY2huOHVMI3VSLns+MV9VTW9TX0d0K315TXxffHczUkhUdCg7QUQ+eWU/SWBpUFR0UGFlNXdRcGJLWGBYdFZobGA2PHdXWDVYPU0mJUQ9LFpwKV90bzRLcCJ9KCFke2ljWV5seyhGQyE4MkVZYTddRCQ5Z0kvQExkNH00JmdnYSw1VmRMMFB4Rngk'@;
put 'LzdvfFdnZTBqVUpzWiR6Lmk5SGsvdT1SdHU+bltrZ2QkKFYwU3FVd28pMHUqO31zaXlKeShXJGM9LEslUDZNLDdtSiV8X1tYd1pbZ3tzPTBXRTNRWUVUNCR4eTFfRXB1NDVYXnwqK2JQPSFNcTshazF8I0NsRDo0T050NnNZLl0mWUJ3WzYxI3U+U29LQTtSJXRDRVZ2UyNGPS46VDh1bGMlfXN9'@;
put 'fFN3RU9EX1oqLGh1V34/TTs4NzUsWkQrPFgzQDF9Vll8YkxrTiUsRzExfWx+TV41d204WyJySCVgcn5KbU5rQXUsKihUTV5JKXFlQ253K0NbSChjRSZWcnJYKnlYXVY2SVF6PkwkK2BGKjN5TDssPiYhPng+R0plNHxLczg/WSkxc1RqKjVXPFljdnQoenw1IlhYRTZVdVZsNUZQb11zKC5IWX5M'@;
put 'bWk8X0plPylrKDhGU2pRaGc6Um1re2J9YT5GbzlwOTRsZiQxbDx2STlHayJnVjw6blE9dXgsRDgsIXFBVmo2I28vNixLVTYyKm9BQ1RBNSxGYXxDJGZIcmNlbHJnMGZZR3olOkZnb2NhK30mXWs0WyM5R1dkbGVfI1gzYG83X3JQdGlbSzhlYFo8SStfPEhxWjs7MT5VfF8+Z0QzST9SS0FPQWV+'@;
put 'Lzx7bUs1RVFyWHkwODZQWzd3WT8udWs1JTEyO0Q0UmUoej01OHI/enV4XWB1dXIobGZiWU40fFFFIVNGfDZeTmtHO1VoVk9rMi48L09bfj1UVXV9bCpdLD0pNGNHejh5Ok1bNDEiMTJzTH5BbDp8OUVmNFc9eG1VWGhkd1t8aWhjRkp8SHBYMzd8MDxRWG48RHVxR35NSTI/S2dCWjY2WD0wIVJW'@;
put 'LzI7Smo8QSlfanYzWlMlLGowaUdnMTV6RyprNk08YSowLCMhSE5eKVBPfjk8VmM2PVgjdUpVVV18Wld7ciJ1PVUsYTRDeEZ9WmNLeS9kQDspR256Q1pwa0dNfW5MKiY1RyYsals3SnNQYkBGbFhvbGhtW3Q7YXZJWyxOJlpmI0NIUml0RUhIRDk9TEVZK0dAUSUjQ2k6NTkkTHh0NCM2cTF4QkU7'@;
put 'YS5daG8kXj8ldURhYHFpekQod3ohMENXPkpEXT5YVDpXXSptWG1WUi9xQ05QWEw6XVpWRilIKihLcDkrUkIxWjpbeDw8e2lfeE5bMl1bR1MkYFVuY2pUOk11YXJLJWE0ZCYwe25hWVRdVXQ4R3F9LCJfa3JJZGhdZj1TfVoiWCI4dlh8MnJDX1EiMjZTRCldKHVDIllZKlZ3OS9gJCo7JXo2fXRs'@;
put 'fTNFbEkhQE1CJHpzfiQwfHJyTSxXSnhibWpZVm1qQldqYWpmJml3dz5JTGlQSz86REshZkJqSEFRN1ojZyFqZ1pGLDh4YTM9ZCZ2STY7UE9MVVBheE1afmc2PXVSZHJtOEhzS2BwZC5raWNYLmZWMnMvOSFReW5Cb19PcjFgJmdUdDt5PT95JVV4ZT1EPFZZem1UWnB8TXJZeVg6UmhBc1MzJn1w'@;
put 'N1oyNSo6eUNjWDhNVyRXRHUjY2JDIilhVVtuZjYzLFgpXyNeUn1aLDgmWmdHcCxJZGc7KyQkQCJSKGpZOlA6d2RxOFpuUnBpdjljKmIyN0FVSS5nWm46RTBLTjg9PzRWRkAoNHIyO0ZCeXBJT3FoP3tXMGtMVzl4e3R8Tz1NYCxMVTJsaUBUTm5bTmp5QGU0NStgRiRodyNNPkQyKE9QRTMiOlc6'@;
put 'eTdfXlY9aSI2Vis9SkV5dy9DIiRFMyUpa2AhVE0mQ2w8fGRoOnMkaz8+dH5ScXEjXUo/SnAhRjJ7SEYjUFg2Nk9bYmhtNytlSSRnPyZxP3BJNGZDcDNYL3FDVmlKSVl7b2kkR0BgNCZ9bjhEVGw1fi5uMnl7JXg4LntnPlt1ImozcWt+UTxGV3tudD1nMShtW3RFN0pIOTxkND5RKUk1eDJlTW5Q'@;
put 'fkZ3KkoiLF1HW3ZpUi83WlBdKkRjdU88Rj5IK0I0V3khe0wiMkMmNmEsJHpQY2J3e3Z8QEciNy5aJXcmcWI1Q1klJi89Tn12LktvIW17Xzh3YlRRU3dIfHQwOGM2NmcrZGtvXWZgIzE4aFpGXU0kPWV3akp5Mis/Z3YsXzVFRS9vVk1bbnlRUn15OmgxSGw6YD58MT5NWzcscVJ8Yl1FaDBydCND'@;
put 'W1Fucyg/UH1ONUV8bWNPKnhKY1lUdihwXXl+LmdBLy4yaWYpYitBZ0heY0wkVGpzIiR0dVBGcW59e31Jc1dTSjxWM3MkIyhDTHtlVl1lc1cmRXV+YFA7I1NfI0x0TSJsOVF5SWZLfEpdelBIVzR3YENdMUBKY1p5VGBmYXlJeVhFNk5EZytkXipPe25CbEBqcX1aYU5yekFqZlN1UC9dZzZXdW8o'@;
put 'YlF3bjlATzYka1dzTEl1R3JMRTIlRUw+aEV4NTxeZHcmbFg0NyhMXlk1SlZaPiFJVlRZSShGUSRAJkllUTRCamNTUCMmUko6bGsyYHwqJVpJaT0/RkpRPmdsKGhFTDJhNXRBdVNvcmZ2LG42KXBfK1RqNEYzNiwuTjxsXVB6V2UoOys2VlclWCpFKClHNERhTVo3WDZ0RGR9QD9eYUR1QD13I2k8'@;
put 'LyxtY0A3MUNDSHVLaFkqdzs1aSgrKzlST2xNPUZzSSNbYjtkZUczKExdZz5kRyIrb0BIKU1KfDxCbjA3PFtWcz9PU2ZZakNXdGBpdD5lYTEvSk9zaXUxLz4qST42RjU0JGNdLGIzeCImLnpSaFlXMU4+ZkNhZGtQRWgwZj5ucytNOzElJHxJT0M6VEg4Y1RRO09yTDUxOjBqKDs8JWlNKEBfZEAw'@;
put 'Uno6dkBHUnxgLDw/cmdiem9CQiVMWWciT3NgRHJ1ZD4yZmo+R0dCQ1VuVmciayFgdz9BUU8yK0x5OzFyL19uOUJYNCpJKkJiZiFfIkVVPF8xbHZ1KzwmRmhJNUVbSkY2NmdieEZYbF8mTTgqOEwhfjsmLylsQTF1Kz5NODZARiMjfkZ7eEd3PigsaUhsL2llMkIqOj1jbE4vST5aak9vUDY4KiQ2'@;
put 'dH48biIzLElHUiRQZlVZalF3XytBeTF+NiJSQDduXk53QyUjTTlRL3x3JFttTU8vT2I2MHNHai9TKGFUXzozdEZxKVZnR301dnJUXUtMazx8Sy55PT5oSX1wTWNCMiM1JWAqO1dNfHJSPnd7YGJMTzpUcURmcC9hQzZYaVJpTDw7O1dkeV8+UEYzfkdXUjhXKX0vRn5tWShPUCkwTTM+ezA3fnhI'@;
put 'XWNaTSpaeFVudVFkZWBHOnZSfHs2I1FOYV5CKlpyMW9yOjtGKDI4KlR6LiZoOXMiOnRxb0daYzdkanJ0bFt0R205K1RyNXVKQyREUzlNPiYxMER5c0FnM3lpfmdUU0sxXXlwZS5oOyRVZ3QmaWBMOk1NbXNAJX1FP21pU1kxOFoqPTA0b2poYVNSaWQ8PnpZQzdlRFhKNik4XWtsMEFpYUQ8UnJo'@;
put 'e099P3IlbUJYKUtTQz1iQ31+JTRnUXVZX18+NGBoOkNDaTs/dX1pIiZMNyoycGNNbVk3JnpgXWVXbylLR1NsbWUrOTIoXUx5R1VOeTQqNWNFN0x+fUpZYSY5eDFrTFBEQCNRPWs4XS9DfkB5SSQrQFZ8Xm0scTt0XypyNi5jez1pIW1lWSwyYFN2KVAoZSxwPFR5KkUlKENnLkZaMWV7cHVAdUZJ'@;
put 'OFttZG5hek1PZis/PWJKKXJkRzF2N09jVWYmSWYjPkJXVy8rVXxnISUyZEU/REB2SGFpNiV3MmN4RGpOMnNralMqJSkoeShFRldPYGg/P20jT3YpW3RSQ0N+Ll9SN1cmfFZ0VFdOeGROUDI5KjVmYzluQztSbCs9SlpnRjRIUEx7KDdGOi5RNkYvfSRHcVJRKTJHRUVxR0Bxdm4+MUJzUCkyJiZE'@;
put 'XmNMKkZURjtUQnFfekRFOjt9V11XIjYifjAhNEtpNGp5QDd9fHpbeClZXSF7OkxpV0VyX0E8JlNVYllAPkphRXtBKU43UER2RTpLV0x5Myo+UHZ8JmF2LG9NWlg/RiszJDA/Rld6STxSUFAvWnBQQ2A8LGJfW2UvUjhPdWdKXVdrfU1PdnAuK0RvQlk5NkhuOkN8LCRJQXxPYG0pR3s4UjcvIUBB'@;
put 'R2FJdThWSk1CQE1DaGc5PGhXOiVNRC5+OHxZW2VCIWQ5TntwVXQpfU5UZDcyPVFzQEpaUldySyZadHopRWpRYl9RSHt3ZiE2MDY7d0UvPnAhUipjejleaEU+bGh8d2g+Pl55MGR6NGBrMHpqKkFOb2Y6Ojk/SnhKWExNLiRINXFTSCJiJGBsa1EsJnImZTlAcnBgTEQ8NjIoa3x0LGI3fl04U3hn'@;
put 'YGtmWTMzcj5sNlBhJUhaVUFZX151K2NJe3w5eVB4InwvZzNfQUQ5XnVqMiprOTVlWzhebX5pO0FNN0hYT2FLbFIxfGFWcy86Kzh4bWEjISpES0ZVR0B6NnI0WjhhfTFGRWtuSTFrQVMyYjddbSlEJUpNX2lePVVGcTh1VjsvbWR8eXBwXlV3RihtJDUhMWEpLE5ebnJ1T0dnOCtYQ0YseGxmRUtJ'@;
put 'cmU0S0dZaUM+eEIsNDd2N2JScmMrU01GdV44ZU9UXWZyYCpZYE4lQWZLdnNmKVdvRFEobi41eTlIWmtOMG1JZ0NAPXBeU2N4eEEkfVI8alomQnd3O15yXVZxKmx7UmE5KG9+PklVJXdtaDUsYHFzS0w1bDw7NWB2W1R4djhYTH1Db3cuc1pQOk5vUDU9T0YvWTNWSXUlem53XV4xJkhbbVpRR3du'@;
put 'ODdyNjkrMk5UO3pqdmxFOiY7P3o8WVtDN3lYNXlwMlhFeCQ6dFJ5aVtNTHRQRF81PzU4N19RNXc9M0RYeXtVMSgwJHtYWDJoLlBVfip+PyMsR0ZqPTVLIWpMcjouPi59UCt+VjpoOHpqPF56QDJDaSNtfURROkJ0Oi5FTWAmKyVgOGUyRHdqfT5FRWFsR14jcVJpVzFZZjBlVTleWEh5dXtSXio0'@;
put 'TXdVNWojLHtfJnxUQE1iZjJ+blF7LkBvQTdeRUwmSjlzNjZ0LFpPMCFRTzAmOGg5RHUvPjtAR19MLn52OTc7YkswdVd2O0tmIyI9elkhL2M2e3BfLGZdTX1+Vz4zQmJAOj9qe3M8eVlQe34wSXEmWkF8T11hXXtVcUJjKTJIV1RnP1ZMKXlJWD5DTSRzSlppLmBsUzhvY1c0OF5tK2VUI0JWSC9+'@;
put 'N05FVSZNSFp0MXUmNEZ7aWNgZTJyO2IlKEtNMy9wSFtHKVhwZXlmOzgpZltCOWVJbkhiTiNeeHxsZSpgOzRDVGZtU2A5LD1LWGxaZzZReV09NllAMVpuRkR2MlVZTm0mOXA+NCosPXFaOipgeihoLDIhIk08Uzo7KU0kczszUyNfZChiSGFkc0I/Ky8xVkRYOkNfWW4sMXlBdVV3aig9P01Kc0Jx'@;
put 'PVp6akQ5aXFoRiNdVkhCQ1pyViZUXzNzdDlNdCExWTFbbSNHWEF4dlRIXSlaQHIiSSNtO0RVUU5xQ28rMF8hMz1jY287Vi5bVTlTVmdZdm1NaGxGZE1keXYpRElWSG5iITg8fnJvYyZ1NFFuPEMkMDVsQDxaNy4iVlM2Qy43MixZXit5RHV0dWE9dE9heD59VERgR1pCMFROI1A1fGU/cCoxJHI0'@;
put 'UXJlWH4pI0pvNlAxOiU2KUUmaVFAPkVUO0tmJCJJeXQ+Ymh0WFJgMjBeKFhxY1spRHddJjV1OHovJG0+NDtSKWAlXmx2WFRQJT5fXj4rdlo9Jl9gTyhPQXBZXnM/PnAjTytKZEpGOSE7NlkyW3hNPCF+b1MuOWl5YUV+fT5baFNKbkVDNWFlaU9JRG9SSD1reTZGRkp8fGhAVXpAP2NMV1V6UzUm'@;
put 'ZlU1UGVuWDFbKFZJJTRtcGImWjAhT1kzW04oRUg+fUBvYiJwUHt4fDZCU1ZGPVI/NzJlcjFXXzghOi89dDRvVXlZaWV3PjIlV2FbbGZpRU5hPzNRITdWfUo3eyw7SSE2Wm1jd0BiaH1HcD44OSYvK2UwWE8mJD83TT9HPG5fZTlFWTdZKysjPU8ubEt+UyZjYEZLbVYycFM5JVkhZzN7Q3FlQnE2'@;
put 'LkA6IyhvPk5DTypzcGI7Oy5jYSYicEspU3t0Pyp+aktwI1treG58fD0oXjgoV2duKV9pcFY/Q1FbczZreGFFOUxAVHh0XyNsSjo9K0JUWX5yIWxgZyp9eHFKWT10W3MyTEJ+IVE3e0N0JVpvTG05IUgwbEshS3FMYitvYzJTP0hQeVBEelI3T0lSUUE1Tj5qdkhwUmkuN24yaEUuUERzYk5AXX1M'@;
put 'WVNNc3xCMjE9OH1hRnx4R3x5N212eldtTndtYywoXXU+QUkzUH5gcUpUfGxjbW5fTFFQJWl3dzl2KWsiZWpLYUtNNipJW2NIRnU0eEQ7aCZwIW1eZGNEZmhGbC9DNTdYfEN0UHZWTC8zPEJxI09HNz9McHk2dnEkVSF4IV0+e2Y2bDRMXyRIIUhINUAhTkFTZ0VebDtYWShhbSVQYVpyNWBXTX1v'@;
put 'bSlHM25qfHd+eVs8X1EwW207W01raykpWWRmcCRaK1VveDxIbyx5bXUjfClfQihMeFVDNSJkentAUnl2SlBjcW4kfVVhKTVxLldqfVJob2RGUEE5M11DPy80OzR2K1ZIQ0BzX2A9ZnxXWUBHPGx1dDk6XmM/c3NUcTJATCpTRT9dZ2EwR2g+d30lYzZOP3JCRnIhVkg3by5zJjI7RigjOW8kJm5r'@;
put 'LEZkckhnM3kuPVVkczFocEBYYyU0NC53Q2Y6ZF9NY3JWW2k3ey8lO0duTX5YXSFKVFpeOS5EeyNyK0VCeT1mYUVVWVBAezRzdGxQRUlncCg0TG8qfUx1KSIzbXVjezR8UFJTdmtSX1RwO19vU3Zbckk4ZGc6Y0tpZE9MfHA6UXhZNWRYRTA7N09pKCYsW09rOG10dSFKSGopaUhCXnJmPE8+RVd4'@;
put 'LCM0QztnQHkoZVFiLyVKQmU/SFpOQSRObDpaZDopTWtRMC94UXNmKGM4UEclZX4sZWRGRkk5MU0vbVFBTV9FOEF3a18zR3BwMmJWTSF6dExeOl5KQW59fXZpUUVocEc3KnB5SzttVGxdJVQ8KTI3dHUsZloxP30scSNzIV1NWG5eUEJtKGNdWmQheCNmMyFrODtkOzRqKXFYN01RWVBlPzt0b14l'@;
put 'ancpNnVnU2NEbH00X1tIRnciMUJocXlMeVV3Uil0ITRecVYmSU8lKi9LQkt9Zl5fL1NWPjhMYGpmb01bcXtUKjRlWmdCRngmeXxPOlFtXV4hTUBxNj4hPX0jZSFzIighdk8rdkBPZXMpLGpHTHl9RnhBIiFve0JId2VaQzdHfFJSLiVddG0yV25beXlIYX1Rd2shSlJwP0xfOk9QRClvPD5qeG90'@;
put 'YXomW0JFeTlnSW90SXF2TlFlSVlyN1hhZStRQzAxOVJUaz4+Ljc0XXF7WTYpdCpuVSQjPCJvPklld3ZiaCxbIXJORT09KjloOXJ2NTVZOj5mKiRDYzFRd3hiOUs3aXFUcDlyVF1NOXA3R2ZlNSJza2JaQThwOCt5cy9yRSQpIVdbN3teOkplKSNpWEdhNl04dU4oN2EyYyJvanJWL0lkJDFNYXte'@;
put 'Sj1mek56V1tEREJXOiFMK2wmaU0kTk4xR0xBeUR4cC51dmNdRHxEZ1E8dnV7cWI3cHhHY0lkLzg0MmpIajw/eTVxRXpvPSFwSzticH1SMS9AXjAiU1dCYS9lYnEobFt3cVY9Ok1mPkZCMGVjYFIkVFQhMXphPm86fWR+M2ojUFkrQFs/UiFqaTZIME90ZTZvZVZ4eU9ob3BsP1hLdFUyIk4pVyks'@;
put 'NDhaSWsoUWdaQy9jMHE3WlZQcEovfCZKV05OO2FXfGs1KH57VE9oN1NmRkZSTjlbMUFsdGM8QmhbMkR8IjQsJmpCVmJyPT1oNmRsQH40X1pOOSg4JioqVDZkQ3NWRWM0bDcoXkZVbSYlOTp4QElGW1Rybz9zSGU+VFUkZGtWXkNaI1loTG1+ZDdAJGMmSSE+TSUvVFFLd252SXF0cTM5X28yTjBg'@;
put 'RG5dPXlTajV9dlRBemB3NXZhO0FfL0NvfSVLcERrbEgheXI1NipMMjd5LkluYjxIXlN6X2MkLlIucH5IaF12VnZUNlhgT2x2RldzO0MsTz92KSVjNXdlR3cyaWRTJEZ+TzRWImtJRUU/VllkWTJbVllbOzJsQDdLUHZJKjxCam9qfl16WThJImpVWnBPRnZxJTYyKj1qVDByKE9rQiRdPSRLRjc9'@;
put 'ekBCMHtPO3NWbDx9XT18PGFGO1drV0haSX1bR3daeU44RWooYmRDbmBMPHd9Pk5yQHEhXTw4Kzk8bmlveWV9P3QhZ2QubDlUXWdXRiF4IWNEYTBMa2I0PykpSH53bCssRjpFJkx0d0I5N3BsWzZmMHUsZClLWXNHezVeRzxQbz5NK3NnbXouYGdnUk9QUmZHPUxWIyl4UHxYTV8+Ij82ekQrWF0z'@;
put 'dGp8czp3dkxCKys8JS4kTmtZIz9dSCVdOWt1VSoiVitoTVglfnNUQzxJdUFpaDw7WDFuMWNfYENHQ0UoeTldKW1xMipxSVpbVVpuV1JoXVcwM35wSVM1OkguSn4jT00pNH4hJEt8ZmxEeXY9I0MyOTtQVGJTP05EZW9OYVhDNiJ2Rms0bGxMOn5feFQ1OjJTfTReTypAOS9PeWY+Z1BESHxGYWMq'@;
put 'JX5DW1NWSDMqXil1fjNveChYRE19YSp2YDlTMDc2T3kwc0R9MURWcG99TCkqQXl7WzpZMUlsRUFAbC9WSlRWWVtlSitpaFptKHNdOzR+LEdidnx1Il5qL21GV2wjQzlGdDdweGs3UT5oa05QWUhRQys5V1JyLlVFNTx8OGxzQUNNNkAkXmY2K3Zwe2J5dX4sR0JbX1lpKi9HRTIhd289eXpYNkhi'@;
put 'UV9zY0VjR2BvKHV9QTMxXnFzIm54fSUmdEBkaThXOVRgVlJjV2NxQVJ2RFV6PH5VMU1qc1tjWmlFfnZQbGsrcGBVMzVqSkZARjcxWit1ajVMdixqNSkqOFF6R1k1JCYhTkVAQH1xPT5zQGVZbyFlLmRfU0BtV1tse3IscXNseyUlRi5dYFomQV1edXxdWk98K2tnUXBDYFNdKkhLMmYuZEouSCtk'@;
put 'UVFFYmw7NStyOzljJTtGRyFjRWcyWVVuJTJvcmozPS58OzsxSDJ3REpoJFQmZGNjQ0dtdj5YWXZwOzMmfkdrOy46Zi58aFUsfSxqK19FNmM/PS9dLzU6SEZgdDRFJlE5Pz5dPzpXcUJpJEF5WiZKOSVZXWd3bVtbRnNsfl89JSE8czQuV1NTM3hDcV9oUyo2OXVxV01oUiwiI0pFb0kpdT1VR2Ew'@;
put 'VEM4Z0g2dXI2Il1gJFRhKVtRcj1FXl59UTs1InRaMGBuYnImfT83RTlQSF5DZ1cpWi86eClPUT8pa0coNSZGPGR2Pn5Fby5CcjhXOXskMkxzWXo7WXBuKCl3InUwKmZ2XXA9cXI0TlVxfHBjaDo5PjM2JENJczh9LHdWW2RGI3UsTUo6YFJjPFpCPFsxKF0qKVAoOE5HUVpmO09ZM0VPb19fKDko'@;
put 'Om1ja1diYWhKNHxDbExtTEJEKmMkOHw9L2NnTGgiTmNmJDYsKGtrPzAmYztEZzhhKzh1OnN6d2shZ3JAZEYmaCV9ck0/dDlRcXc3ZXF7L2JAYkZsXjcvdFFofkE9YitVS0A5eTsreyYqYkF1KCQ/WTc0TnM2PX1PVVVMZ3t3JSh4WF8qaClhPzluNSxZX25JTWFVSjNeWC5hKkRCZ05ZTG40cV9k'@;
put 'VXNqaEImQUdwcj9eVEJHOyhdQHBLPjR+aSVMbmdKbXNnczZ2Q2NuI3dGeVlEM3YmQWxvLi4mOj8ofndFJD14NlRIND9scTk5UVp9XXs4P2w3Ti5tWF0wO0lJVzBxLnU0XTIjNlQlMkY3XzNMOXR2XkR8KHh+bGo8UWw7fGlTUFdOVjx+RkpiOlApKW9rIllHUi88aEMzW1hfOm1zd08kLDJAMW1N'@;
put 'YTldSlI7cXtRajVxZFEvKywvX1kzM3xWLCZlSXFVNTB5T1ZpKDZpVnZEMS8jZGBSRzdnemdyODBiandiMCozVClja1QoSkJwfHYrVmx5JD1oPmVUTWtwIWs6ajVFYnQwJjA7dCR8UFtMUiVnUGQsTVJZOj5KTnQ9YCphOHQxM3ptSHl9Y3Z4V2xHLj5edSRUSCFtLixiay8jQyspfm9iVElBNktI'@;
put 'ZTF+TFJVISxDN1RTTUxQRlZ6eTV+Y34yaGErTTZ8Zzt3dyU2aX5uOE57UFV3JS4+aHkoJEB0L2RCRVJuSCl9WVZgLnJES2t5QC9RZXUzKFh9VCpxflhlST9pZithREopcm1pSHw+Q3BhOWR3b3dlTHRSeHsrWUZbbj5RQSlqbjNjSkpeTFFuQSt1Y35pImhORUFdKV90OGh+Y0tLNjVnUnQrcz9f'@;
put 'OGVnIV48K2BGVSVqIixybzJQQSNHSmB3PVt0KSYjRHYxJkRXVipsOzEuS1E/cVU5W1owZlckWD1Ca2E0PjYpdkEpRCEvPV1QZGMoYjV4UzVDKUJIQGdifntffjwjPHReVSVeYi83eiV4ZWcwbyIiKnZjLnlCKHpUR1N1ISY2VHlSbzt+eFVhZj0kL2Y5aHx1Qn4rTmgzN35zXTk2VW8va3RHUkNV'@;
put 'VlR5RyQ2RTImIz9neyg0MSFvMnZGdDIpW3FSPUc/RmpPPW5lRkw2PGs7OzZZLCY1ckohaixZPjRWcW90a3IoKV00Mk1uVS8kPzArY2Y9OUVAfEBfRjhCWXthZ1B3Mih4b2g/KjpMUzZ2bDw0Z1NtN31YLEcob3RaUX1jV25PYExWbShCIz1iNDJqIm9fVjd7IiNtaHh4ZnJKc2U0MHU3bFV6WHVn'@;
put 'aCFnYWo4Ok17Yj8vQlZDKXg/JjVIRllEdGY7TCJKUUN3QyRJSmJTQVtzNzdeLyk3dVhHYmpGUU5faiJWVzx3MnVBXVthWzxCXyl+IzMyOTF7eTFrLnQ/VDEpPmtDYUYmIkQiU1dqTHxXSClkPSJ5UTtTVCE4ayxyMVp+VXhxWWtAeT9KKU5vX0loUHVjam50XmhtTklvZTp3X0hOZXkyNz0xW0hB'@;
put 'dWRofmYscGQ2QFZFZn1DI2ApcjpZX2tMUUcpR3JGKjUpa3MsL2ohR2hkaWxLbUFbU2lEKV5+Nzw+d0EjNio3KiRVMl9TYkx4Q0UxOz1jNEB0KywoUEs5Q2wmRSY6eztYJXxwaHRHK2B+QGw0fXg+NmU6emQkMUAmWCk5JC46bCVmZHI6Jkgid0JUT11+SSNYZkBmM2VBSkdNOWE6R3BVOntvUDV9'@;
put 'ZDxVfD5PW3pPO3BfTlZFfFNSIUZLWk5sPmd3dUV+fk9KJSpJWkxUZ2ZlJVNyP0dQTE86aWRKSGNGLn1ZOG1WYl1Ga0cxRn17cCskJCRRMngiT1JuT2E+Y0FyMC9VZHNXfiFQIWNxS2gqa15+In5gWWhiUGIkTS5VZyRXN1dCZEtEOWw4YzFnP24mdWFTOHteLjt5cDciTlVwdTBfLEZDa1Fway9k'@;
put 'VVImYzFJO3JvJVAvbTU/WmdjW1dZP05KK0NFPW02RXZHX1d1SzYsKiZBPm04RWFEXWg1VyZRMFQwRGRkWHxEblV7VGFyPVN6bmpQLyEidTFSWVs5RkFxYElJWlYpOFVDaE5YbkQrSm8sNngmQFFxX0o4NyV+K01qeGJeO1RSej9pUTwoaFo2TyNDMT12TGhaMFVSdk8idjxSNmhQI25mJGcqSjJP'@;
put 'NykuWnFXP2RhS35XfjhsUVcpa1pNP2xpMHJHTEAhLmc0MGgmd3EiKlJGbTBAXUxtaSJHVEg0MGNbKjVLUE9kdWhWOSVCJnAvM0gze3liaWJKWnxUVyNbaTgqR0pgUyF2Tjxud104ODhAU0RvOWYsdVVrQ209PWl6bTFqSjNUbng3Ly9NeHBoRWNkRyEheFBwVl1nSkpUdSZbfGhCPCZRMER8Zm1q'@;
put 'Oil3TyFga0JhTjl3OUs+K3ghfXlFRyheTkQoWUM8fERtfUZIXihNbTJkPzcwQmpLK0xCZ09KRzJrIWk3Xj40WllgLnxzYDUrXj9xSiZWPlNSP01JYnVNRDd3Vmd6Mig6TChEd0VSNSR9b2tjQEk3IzRPY25gK19xTC9YOldWRSt4dTRISHdUXi9NTS9CbSJeSlJRRXcpQnZHSnZBSjgpSjx5d3d9'@;
put 'cnNSKllxLEl7KFVqRDw0QVhIN3ZqPyF+Z0FZUlZxYEppWUkmZkd4Y1Q9bVsoK1pXXTRRZVB9UipXK3EjTF5YV10yZGdzMnVjOFlBNHNJXzA8LCl5WFchWDFUSHgxRDI0WDxjTFp4JCk9amNuKT1IYHRtTCxxdH4sUy82OS4wdFptOm9CezFtWDY+fXJBezlfPTElMz5RbCMyaVlZRH4kRUR1aDF6'@;
put 'dlBZT3t3KUtMUDoxRHMqaFFRSFhkaTg0L011fSN7UiUoJHZrbV04bC5iMWAwL293bSxxPX15MjE4fCVlOkdyPXcpPChlaEoqb1l5Mzc6XT9nUF4xLnM2O0BJNThOPHE/QmJrVTpNcExXTCk6b0ZSX0loaikwL1lkVW01SThiRG54SiwiNTdRfm9Ca3xicG55UkRBOnlvYHFrVWp3ZztnNF0/Si5C'@;
put 'OUY7ZT8mQHEiM10+fFhLaHBzVSomM2xkdF0lLlQrMjYxIz1QRFFIYSFWQn0pUD9SfS5xZ29qa0tmPT5IelNjTntlcHdeZ3BZWz1fIWgqNzdAYXRdJmApNz91QSNyMVUyNGczQE1nRjpsLmIsYjR3JmVARlUsNlNVXXghPyFPRm9udmJRJE0+eDAqa1R1UTFDRz5hXWVZPjNXdFIldzxQMzlsfj0o'@;
put 'NS8lKz1EISMhfVopSl9JcTlQLldIVFAyZEZ6MXEvNl1lQDV6KjZ1SkBac2Uxc0pUfFVxSTM6Yl9PNHspOi4kLCZmZi9Ea0NjR3EzbHliPjJsdlgxYmQxeUg6bFFkIjlCLEE8PFgiR3ohZHtUTnV3YDN6OWI/W00pMjRWbW1Me3RRZlNsc3NOU0VNTXVySCg3O3l2YFl8TWl2QnRPcVMoR09tazJP'@;
put 'c3VlQUcxa0VRQHpweCQyelU1S0FDYE5dPkwhQ1pnZ0VaZ2tJIk1id288fndATF40dUo+fVNFWWN6PUpMfThRRVljbnhxeCorcFZiNEY8Intya1pDb314IU1CcjM8UCp4THpnUi4mcXwlQj4yKmJ1JihTW2J6VCRldXJ6cGxWbkNwdWs7d1IjJWwhMko+MSFwK3pwWStTXjpMOWsxRl8lPnlyVmh0'@;
put 'cGRNMF1wSD59VHJyLH0oSEp3I2Z8Rl1ILz8hZG5NVHdkZU1JJGdxa3ZaTX46RkcsWiFEW0tNZDNaakQ8Nn1oTF91JE5nfXZwTEF3W1NRdiQsVG5DIWhYYSFMNipfczokM3NxUjQ2b3RqQTE0YkUhKVZ3M00lMjU/aT9xYUV0cX0keTg9cShqJHEkY3R6VjowYyZlTTFhamFFai5vRDMrJDd7SVIw'@;
put 'c1klMENORChoW3xYJCw9I0pISHVHYWtAUzVZT2xzZ3xKMFQoZENtd2lAfjVATS8mKiZAeENOZFUuYzp9cU1aNWE2TnA2VzQ7MFRJN2liWFsmLnFSbXE2NEh6Q3Z9NH1iV08yOiI5XjU+KlAuQnYsd2cqT2JvTUNxUnVpKyxsKlpGektIZEZ1Und1fWdHR0VuUWNNNG9fT1hDPihPeVFSZGhsJE4r'@;
put 'flNWe1tVbC90LFpiVkl0bD9GR05IcEs4QGh2JFdYT3N1QCQpQmtYXTRJWFNAI3J4VzAvMX0qdHNVP215Uzs9RllwSmlNajhwdVYpPyolY2gqSFBPcG1pfWtKWzI5Mj0iSSJ3KillNmY7KGpMYXRrMVVmdz0xVDs4UCZIYiZBXz5jPkNOaDNrUjUrayM/UDpZLi9FQ2B7bFchTllBWzxqUndpdCVp'@;
put 'b2pxbWpiPUw8Z09QZjNvZVRlbm9iI0owN1EkOTp7L2Jwe2x2OF0pcSp4Wi8pfnReYmg/aXhNdCt7bXMvOSYjRkIqPVt3VGx8a1hlSWh6R1dfd24wJiJ9fVYvJj1lT084ME5APzkxMys+b0AoTkg1XnN6SVl2RkRPfndIQ2FxSXwpdixuUEhdRkEzR2cyR1dKb3xfXWVZTks0K09aKGRYVlF5NV94'@;
put 'eiVJWSRAeDQrQmZyazh0biskPUFeTkx9XmR3OClEeFtZTz5wSkxlMz1AJjtIXzpET11MLmlEXlAxInslO21tJXEmU0RGX2hMYGVJRVR6dUx0ZSExJlZGbmJ4Z1h4VnM5K2NKJj50QV1GSyMpLDFpSm5CVWpUfFF6JGomNEcqcTMwWCFaUXpXZkZ6cjF0PEZoWDRFdSlvWj8wcDBPS0d6QFBbSUM8'@;
put 'KjRiXlVGKmdGXkV0fXtlTThALFVwKyxRbll4K0x3SCZLPiVqZDQiZ25WaDx0MzdvfXQiJSVtSil1VX1qbTVWOEVuSillVVpmPUAqK2lrLlVPSyQoQ2BDeUFFanc3cGs4WFpEKXgseyFwe3NbVX15fVsjenFYTW5ZeEsjYEN8S05JP0VpQl5hOWAjPlNpSmp3aUMqVmc/IS5LYzZhWCxHKE49Mkgi'@;
put 'PTBXRDFJVF5VUWQoWVE+KmovTlNrMDZBSlMxPnFgIU5mPmZ1SXRZNSFCYy9SJWtdITZRaWBSO0peMF1AaThfOWsyT3FNbnM5O1AzdTtxZnAmYEw/WWNbPGleenVXSVdeVWNbSGFdOCNxPTBVeDEzXm1adl8zbXtfVXJbOjd7ZEIzbHk1Y1VWPTBOYDlQTjJtJipaW0BPYjd4W1s+KSxKXk41SlQ9'@;
put 'citnOXo4VXpVLDJnamRvO0hxJEQ4YnMkP31nQzN0c1V9OVRzLiVlO0EsdXspNzc1c1BAKXQ4diMrd3R1XjV+NWFvSXx1W1pSPnFbNlQ3bUFdNWhMNm9ReHFFVl5UW2s2bUlPUmZxYyghbyNLezEpZEw8XXt0O3ttbCN7NXYrX0dlQEM3cHpwVy93LEAmVD1xdnkucTkqJHZQMEImQTBNQFpvdWgs'@;
put 'JXUyQj1pS3BRfmp9ZiJeSCYuWSNISDZpV3ttNGhdViwlUmhSKEA/XSF1RkhlPWdMTm57RSMrd1FsSXBaQVg9XWU6O0ojb3tGL0ZVN2lILnptfnZ8UUVOck5ZXTNkU2BDTz5ne1ZPUS94XmRRbUVuVC5aMkBnZ094U3tjdjkvYlZ9O0taSj9ScjwyRXQvbDU5ejdnKGpKI0NeJUZtOkFial9ARzs9'@;
put 'UEN9cCk9WX1zJF9JczYpJmQsdVBqR3clMDpCPl11TnVmeX5gXTNnI3k9dzx0KTEzSnMycFc3YWI2T2d2QnIsR205PTxIO11JIUxqaCs0VyxaayZudD9OSW5iUlY0YztnXWdnT19wZWsmXT9WKjBXL3N3MyY6QCJLQk8wZC99cko4MSZuTjZEOWhDKDJqYERCP0VGWSxtKCtPM2pAS2kiQkBEKEY9'@;
put 'TFBEWjs9WGRPZDoqa2BVWWBQNkFjfSUvbSVvbns6WnkraF9FJkRPIVcpKi5UUkMoal4zJSIpcjNITlhjdXNIN1gwbUh7MEU6LkUpTDlRXlUhfER4XipSOzddTkB0c3wxM21PayR+VD84USZVOGhRSjVLbyNFWWkqVCxtJi9pVGtFSzl5OFU4U050KXE9cVNCTjdXfklvNW5uX0s1dlFHMihRanNF'@;
put 'Q0IzX2VTMEhmdm9MVkBqSm4pWVgrbX5fJGZxWm5ldmNMO0RILFNbNV5ZKXhqSnhYQDZRVDRFb2siK3Zfezl4eCg7YG5lc2BSP0IqK211dUBWSigqe3k4eXtSNEVudGR8UDIoRFFNK3lBMFI6T0dKdjhXL31kdnF8UC9RSWs1IyFaOTpmPUJpKk0zbVIsRD4xZTwpajp1UlJvbnxPYipMPDF8NUU8'@;
put 'Xy87MUp5T01gb0o1PzM6VkpNQiQhK1dXamhTa0sqRmBickg9dDZBezlvSV91LFd9UU4pIVJzSWFfMk5mTC94PkVIdlJ6Sml6bn5MTDBXWyZ1dUdjT2dbNms/V10mL09RPF5YfUBEdFBeWDFOOjJkMHxTUmA2PyttaDc7Tz98WHpHaWN+dGQ/VHIoRFFNN0BGdkQ3JiRdZGtzYyleQ1BpWHlQflRx'@;
put 'a3NFeHhKX21EUk1gQHhuRD5wOmFoPEBncDBhdkd6a2hNKkAzRGlXRmJnXkhRbUVFP1RdWStrUllpT0p4PU4mNWJmbyMuPHZ6djNadjBYNCtTXzExd2hCM1FebHZhdHZZNSwmfH5FaFhKcGJJeGN5JFBeVD1uXnM3QlQ6RF9nKDNkdiZEXk58bjUpIm9aViZGKCJPOFYpfmglazBTXihUJCM6RkNT'@;
put 'dWN3PXlaST1kUU4iIX0lJiNseT42OipxeHhbSmozUXg2VXJPMi99YGZvNXslTGBCbV1DWllPeyRJRmN7I1BFTWtjZiIrdGMrNldrbGhXTzppeXZ2QDVDPz97WlY+a2NwVV1EbylCUjw3ZEp2RHs+UmpJPW9YeSs+JHVAckJ6TH5DNXQ3b0dRT007QD5McUNfIy8zWD9xR1g/O3Vdbk9vfVV3Oz59'@;
put 'KVVGT1QhRiFRKzp1T3ohTipiN1VIUyI5LFcxTltnbnNbPU93NzNwU0NLPikuXWpiSEI3XV5bIkkuV3MranFTSkJGXUY6NyowWUBVSkJGVHkqVExvSUd8djsxbF5sakokLiFwdXV0OkZNYV1DNEx5dXxiWXhpOXRueGdkNCs2X0s4b3RURENEZmgxMWxpWXFDZllFd0J6e0VrZTVAdS53T1VNUXUm'@;
put 'VEJdLHlFWF1DV1tZYlNlQ2NvPH41S1g+YUpQbWRpKVlJLlViP3IrdzZMP3F1bytMb2Q+bFYsNH47Nl83O2V8R3hYUWdPU214b1o5Z2QoaiJtNDM7a1VmNy9AK04odHBCdGlwdU9XdSg7IjspPndKYF5WbEJdaFFPeUhPIXcrVURQeXcmKHR1MkNJTEk3YlZ6S3hjPk1tMFhEeFc+dDJdLkU3U2Fs'@;
put 'V1cyLlFEIUwzSXQ/cDRxa1A3VmMrQnNEY3UkP2QieXJAKWBXOUxHVmk5VTMwdUNqU3FNWSNrNXJvdVIqV0ZGTyJCWERnWHd6VzN+bFpOP3kpIltCNlB7dVNMOl5EbkNrK31kZmhIRT4xfSFdQ1hSKiluQm8qZkhJckMoKzh0Nl8sR1l+NUE7QW1nISNKT1VCQjwoQ0YwPHEzJkQpXj9jRTE5Sm4z'@;
put 'cD00aSopTGpibGlDPjMjUyo5XTNzKEZXKShdJVhLXSlVVEx0ImNKQSEzPXZ5YF1rL0ArWFdXI1l3WU9zVlB5WU93ejNTKjNla2sqSWR4Y0ROaG9JYU1ZfkA8LFE6c2xpMDFoSUJLYGZmVzkyaT1JU0VRSDxGR2BVO05eKTFGPDk+OF82KHJAcDpgTVlNfFY7P0Y3IyFFY3FTOFhZO0E+cjoyT0Be'@;
put 'QmE+Y150LG9yUDAzZSR2czlQTGlNc34la2FvJkNoe1ZoZn4lW3I2eWUzREokPzU0OD5EJU59bjJVIUhgNFNVUUp1c3RSUVJ4X0k3ZXRGJV9nOk1tZXZGRVlNb2xFVTdyXkZtRDpMPndRQ2diWTAyVlR4PjZaIWxubEwpLnNCQHtQX357ZCZ6KDRvfSh3Uit1cEczKm4sMDkma1EmY0w1ZlZzTmRn'@;
put 'OmtCQU17R1Y1bz0oWkdHOHF9MipzdlZRZnpBZzpjYCxJJmFWNUNBJCROVk1NY29KIUJLM0YwbnBMeyJpY21PeUBQeT57KW1ETkdeMzAzQCQ5Sm8uOSw/enhITzJjWEdKIWxlPHN1dTkzaj1LTEE/L1BQV1J0PVclRzssSSJnK3tHWilWWVRkYVM3QlZ6UWMrdURHaTQkQFhGRk18NnNINkI0UD5w'@;
put 'SSQsdHM0YUFIQ0tYUWZZT0YqJU0uYixmfk9hdzRfZSNCUVZGWlg1SGtaV1JsM3x6KVozXTVxek5wcXRCQUR9T0dYQjZaWj96NDQya3tCR1lHT3tFcmtJPD97clpvTzllUkolTnZQIihjL0xoOHVdTC5ORjVHYVBWKix0SjVBWkckZ1ZdUGtMSGQ/MlgmNXZDe3V6QExKcHY9ZGlHVEs9bF9aLnV8'@;
put 'RCZORUhoXkdse0Y/cFR0c2kzdWhGYG9sWENNZXNPY256ckRxKmt0Y3VANnRBaVFINl02YDB5TW1veGBmfD5bSk5BTVIvMS99eTFodWE0dEp8K3lrQWouUkVlMlN0UzY3bzhjNy4uTSh4eyNCTyU1eUxZb1ooVUIzYl4iSCY0eHd7dTkrNS5JMlhifGNIRHU+RnR2ZiQhV31feEdIVHZ2PWRhR2FH'@;
put 'UC9lM2F1MVtZX0IxQl9EQj0vME1yNzBNZWlxTCJDb0RGcyxXajxsTV42ZylkRDJtYTN1cD5qYENVQGFSKkZQUjIoPkMkTSl7PmskZlF5MD8+azFAUDZnZnVeKSs8Rj0kRWYuPGtEPXZJTkVxXWBJOXg5aWIuNC9HOUY6QURPPzBkNlVYSTxPbFVYd0lEMEpoVFhbQ3JrY01nODZPZHB4P2h0YHA5'@;
put 'Pmw6RWc7b2BfcVEuZzpacEdCdjlCe1h6bmdYcF94Ry9OX2d4e2heUyF+RyFMcWQuYkVYLiNYUiMqd09ia3gwb2pycz9uXn5mckU8JipVZmV1ayFidjF1YXheNWxxSzJAZzNkPTYhZDMkaFYxMnt1ImFzKTRwSDE5WS8oJWlOZW1SKCtAL3ZQVUw4cnZmPzEjXXJrZHo1eExWSlpmTyp1U3pCPmR3'@;
put 'RzlAOk9DdDtyPndqc3hXViJHc1l5RSNDbjw2L255aUY7ezQ8bUYoRkR+NllNZSJmRixtIz40W0dOaUdPeXElSUgobnZVWHFlQ0dPUUZlYHYrJSMjVWZvZXIpQU8hQ1RTZTBDPT1LKExdMjN0RGNzZHxbamhKVjQpZnd9YUYhb3lSVXJQJWg5RCtRcmI7bylMSjUrTndxQylhajguY0VsOkJ8QiZz'@;
put 'Nms/MmBWXXQ5WEh2WjQ5TVdDXiEqXnpCa241LCVgU2hleGUuOT9TUXJ4KX1dPEZ6OWlLOGlvQGcwN181bHQpJGRIKHBKO1lgQHp8dUZPRChOVGpVb3B4IlY6cyRjYDBOKnM/Mk1UUiJ2dkpGSyYzOT0/PXw1QjhMOkhYKCE0THxYKWpJc0RLaHV1cSpLS0xNZDp4SENTNTxSeElWSHMxXSNbaUNh'@;
put 'XXlhaXlpX0VzW3RPUD9GbnJzSDFLdSQpWE56Z31tKVJFZDJRfF15cClsTzEqMmFRe3xkclc+O2RSJSVbU01oQCFOejAkJXhlLl0lPThiaXxXUTtvVm1XYn4wMGwsc0N2JEFoR29rUl98ZXROdU07byZLZCxBLGFnLE4uYTFRfiVjMT49ZFVZcWxQfntyUHROdU15M1hxQTpkVXRPeXBiaT1bbUZy'@;
put 'dTdhe1pXakQkdnc6bEpzLD0leFFPb2tkT3gxKDMjSm1yc1FMJWlVTlg8W21kPzN+W1p3clUjO3thNV4rXXI1VksyYUBaQ2JATCwvZ1BheDZEZTUoK2drQ1hlKlBhakl3YUA7MC5iYXFoO19Tb157LigoPFpXV3wvYFBuQiFMUmVxO2hmL2h1TFdwVj1xamBUQktNWkNxR3tFLF9SKSkpfGJJR2pe'@;
put 'OyU8Oz5DQjIiWjRxKVUseGBmOlpdQzxQQEljZmhmIiIhLntrdntKTldKWXxHS1Q5Ly9SWl5DNTQ/Q18/cGh1MmU4XjtgaXtpTHpUZmtZUCpma2QwOjslcHtmfnVjXU0sPWdsJHZUd2c7Wl4vRThPQkY1UkpucXNIaTRsKUsibiZ8Tm01ZjVTMWJuayN+R09dP1puWjhAP1puWkpOMzpzaVpYPUAq'@;
put 'eSVjY082S28pRTE/V3lhXnlVQD9ZcjZnTE1gJT46LEFCbCtweXMsNSV5Yi5yajBHYXgsK2gmbll2UXVkQFI1dyw4bzhVTlg3KE9MUnYoO2lzOSUvaDBYcSZuXzgyXXpbMHVaIXw/UC5VK0ZldTBxTltJQ3kjSU05YkM+ZlU5O0RbWCU1Mn5nNE45MH1TcXgrOkNkTWFCKSRXUFUvTGAmIXEjZ1lW'@;
put 'flQuTC9tblIraihwOCFWQEFeIU81JVNmWWBnZnV4XylXSU5YdUsicWB7eXVKPiksMT8kPnQ+MGQlXm1xLDB2UWhbSmhfODBfbTg+RihmeiEoTEk8cns6WSE1VSwqKFdnNyMwMGBVfjc2KzYudmlEcGpCdk1PZkdeVWlkLmNNXmIhVzhYWGl4Y1ZHbXNpcilhfi5TdmN9WG97OVNVSiwqbkRkPVJC'@;
put 'SU9HU053WWpxaktgbzFAcyVsIWwhYExmNjw1VkhxLzh3QGJrNmNjKDUsSlZ9MSokSTBERW5QS0w5d0piPkpEPmZUZiM7Q1o/bVU+MSYjQXchU0xOTil7UF89a0pDKSZqYS82REowX0lmSEo6WjJxWmx6b2R4blc8LlplUCM+SzZ+Mnx9M15helJxLCVqPyE5OUZVP2ZLX2dZaFJGVHZQfjxzJTw7'@;
put 'bXJtWitvVWEhcj5gMFBwKDpTYXFeOEZhN3Nlfml+bz9LcF41aVFvW2AwOldVeDtEWFA8e0Q5O2soSjssVlR5Njh4Ny9DWChMYCNNZF9kSDYpRVpNPnEuWD1fa1NGPihGeVtQeTdwbmBHeXo7LGUrcXFuYTNWV3ZNbChAX200LGFgWCFqVGhhMHYmej9TeSVoVHhgdzYuJUcrVk1KND88KCtdPFNF'@;
put 'Q2E7cSU6aXo/WCkvL04lfixSSlg/PHB7IVU0V2x3ei9qK0ZaY0xfNVYvdWVHPzgrIWk7cDNJd0U7bEZOMSohalIxbyZnZnUzSDAsPWZbJEFxdixIZ3VmfkllKl5IRl5Ye3wpXzwzJjM+MDs7bHcqM3ZtYGxqbjVKbn1mKnhJVnBwa2w1JUJRXU1ZVlNzW0UvRUdjdTRGM2QvTHlCc2l5XVRZX3Y7'@;
put 'LGZ2a285My4pJT1OcnBtcFd7aWxTR20xdTpNdUc5N2dfNU45alhtUWFbfCN2KXVNREx7YCgxJTA5WC83S1ssW2FgYCQmXzE/OTlXJXVKVyltenNxa2ErXTJzLmJIU1N5YkNmaHwkT1NDVlNbeHhjYEdxTzM8NlZmfkp7YF1QK1U8WW0lIztpbWU0R1kwZjZfcmc/JC9ZLDR3dF56InF8Q31aWG5u'@;
put 'Qns4YyNOPzk9MiY7VTF5WT5hcHpCVV0rakBSckRfXS8sJU5HQ0NYNjZdKF5DMHQ0XXQ5QnVyMk42X1ZtOSxxcjU1Ryg2bGAvV1JGJCVDQ3Y4NWJNYXVPRk1KY1NeenBpOV9QcWYqeFF9fW1ib15PcjIwUXd0YkBVJjksL3gmbyM6YFNKWi9iQGJTRG4lamFUZytpLGlQOC5XTVk+TV9CemtRcmlx'@;
put 'eXI4SVZePFN9akxSUk1mXl5xRyoqIy8mPGhBZ2JFYDxDS1EmVmc3UChlcCxleEBjZFp2KiJRVVV2MzhHLFJAIXckZXJyJDV2Sy9+ZiJuUWZWUEwxKjYiMlVuPFQwN3VOYn5QeGhROyU+MWg3YnchLjdCQ2w0ekN8M2FSOyYmLDQqJDd7WCF8Y3BZIik4Znhrbil5YUJjKUNfXnM7cGI8KTNmRSNx'@;
put 'QjsqTUo6YkgxX3BDZjkrXndPQEhpJT4rX1RfOE5yR01Kc05YXTNZPks4LC4qP1peYCJCUmZqKHs5ZHg7KTZfVCZtPUw0fH16ajsucU88S3x9eWlBXXd+PiZWVzFjQV1PWGhWX0M9ViJ+a3dgaT4oRXhrR2B7bUs1b29pdyt0VnJ5dHVVKW9fVjVTfG4veVVoaUUkRlJGUkZSVTVZYkZSRk14IVQ3'@;
put 'KjkwJFpAdy52RyFMKHlNcD5paWl8fU0pdEQ6dEQ3O0ljRndbQUZ2ayMlY05EL2U2JSh9XTdvL2YlUHpJdEQ6dEQ3O0ltSHNbQ2ZjfStyd0A5cy5fRzRZelBMJHIkN3xEKVEiRzNCRmM4UmdTRTR1akdXSCYqQ2F9L1Y+ajZLanZSNTpAIzgkMDJPblUrM3lwcVYoRChOQSRWfWV+dFFnUVd+Q2ND'@;
put 'W0llJUNYRV5LIVF3aVRMUjB6X2w1MVZ8UVo2KFJlVWVwcW9XJllKbmFxVClHYH0vdmZvTHNhcTVPQGBqMUVtQ2xLOkosM1tgK01JWXQ+dzovXVVjWzk9InguIUg2WTBFOjYqY3V+PEg6JkplVWZ8PF02eEVDNTR2LFgqbmNoSXAzQ3U7e19hQyxCPHY2RX11QHlyKDl2QGdwP15zXXNbZjMhWUtL'@;
put 'OldsWl5xRiF1NXlyV2J4MEo9bXA5PjIueSpQWVtrTDhbQ3FsW0NEXyYpZkYpUEdnRDY2bz4kUlpfN3ttNUpOfFEzYkAzPih6cmc9P2ZdVCwrOkVhdk85cShOdEQuTj06ZVVbZ2FvZFhOfGs+MSZmJkx+eEppcnk5NnNzO042ZllqKkV7W2JMSXk5e3VnVnpfRXNtNWdLdDNYOXtbWHkvQixWZDJY'@;
put 'VGgvZ2JYd2FnV1F5LFM+I2h7cVI+NFAsW1F8K3R6U1VZSF40TzJoZVd1ZHJkdXUrYDdkUTZOZCx3YyV5U3JkezE7OjU3MXQvRlZYXUNNZC4mTXxqaC8mOzVJZFIoTHFeJnc5UF9uaSp2MHpaTk18aFtVMXdRbVJrNE00T1NYRSlAQ3NEWmhgPH13TX5QUl1mOXlQRFAqcEc9S1QlY2dmUF86UVJV'@;
put 'TFhXMEVwaF9OIT06NTdOZWhiZiVbOUFkeTBFWzVkaTBFWyxoP2V3QWAmSkxMXVkzbU44d0ZlckpiKWV4P3gsdEk2eFpjYERkQE9afTU5aHckajovNTY1c3haYmBEZDpRTllBaml5IWRJZzJKTiRRcXRqMUkqNzUsZHFaKmY8TDl6OHxbLHVzR208fFp+QyNdJWdeayQ4QXBzJUpmZFhPKWRIXSxz'@;
put 'SzhgUG1lJWZVY1s4Z3twUE5XY3c5XVJdWWR9fUt3O1spRFZXI3A1I1cpcHlmWnlqO2FpTlIxYGFJOUZmTCVkRGRVNmh9QllsJTZFMHdLSiwwQmpPVUZeLForWnghLCEvWjRxYmxGdClmPFNUMWNnMTVJciowRyFAZGc1aDdoMWVpUDpoKmhqb3tvPzliZmwxLjNvaDp7Wk1pR3JHOXo2VX05OWZQ'@;
put 'P01bJHNbaT4yckV+dTNrIWBJNkQ8Q092RE9jdFUpcmZQUnQsbGo+I3ZILHdxOTBbXXEpPEdsPmIyNkRPJXU/L0hYVGN0N1BXZGlDSDtiTGpCOnZ1WFNsTUZ5SDFnT01OayZvOVNfbntbKXMhQ19uUV9mKWUvWUxxMTZIIUdZTlZEMEUkZntHWVY9RE1BRCguX3gmSVNzRXA3NyV3IzFFPGFvZiYr'@;
put 'eHx4aygsWTNGVl1IRG9aUzJZekk9a3AwM05tIiwuWyUzZnxOTkM/ZFEwaW9gQ0Z2MHJ7cV48QFtoXlEyOUM0LEMxcCwyWHtgSUBoQytkPlVJPVk2Ujoxd2w/MyE1dVBydXY+I2huVldLZUssLGYxdnxJJUEjT1o7fnJVK1FEKW0rZT1fYW1pUW5yKlpITVo6YzQ8QWZFRy9lZ2hDQHopJl55L0Qr'@;
put 'PTY3NzQ+T3M4UkBSdz9FKFYjfjVZMFpyVl4/VlV2UllNJFd1XVNAajNSL1MkVjN3d3F1fGhRcnUzdSZxT3Fzbyg+djwyJks0SHpwME1rUiY+czNvQiFKY3MkPmdNWz9dX1NiazFsVGVdfGlMKGUjTHVxQ0JWOCp0NyYkaWpQMm42JjdVK118VysjMUBrU31aJUlEXkNQNHo1byFZJUkvOEQmXWZm'@;
put 'TGRmNGd+LDBiW10rY0NiJDA3cUN3Qk8xckU7QUBBUzFRSDYwZ2QwZ1RCaHppKFAlIVtmTXljQFhnWWdpZT8rZShkcEpSMkIxPGBEYURib2xxP2Uham1zZC9kVT8wWkVZQjFqPDB8djJ6Xm12OU8pXUMjNl9EInIoOkJ1cCEiUi5OMVZSfXwjMmZnb25WcFk3REEkU3ErdV5wMzE5a3JKfjo4NUky'@;
put 'WUVuIiFyIVc0XlIuODU8JjtWLEZGVCpHT0dRY24lZTlwdWV4dSR9LkJsdD1KLjhxVDdZInxQeyxAdkx+Xyw9LGFvZzFHPDRpcUpdcEJpcUg4LHI8dCl6WHVye0NzZFM2Jk9VOEEzOT97PD1fdCllKVh5PENgXiRxSnomYyRxaypRO2xgJXhSITtMcnhzbSRxPyokLDdPKGk9Pz1SMF0iWm86ZjJn'@;
put 'W2tvI1J9OmU2c3A7LlloXWxrMnNSaiFtJCxwOzs0TUIleylrRCtgYSVoVU53JGU/eyI2JVNSYWImUDFgbSM1USgoL1l3YD8zeyZ4SWFIM1BXJi9Zd0A6bEpXNW1ycE05OmdPTiFveStndUBYaG4kQDo/KzYpXTRWczBWdyVWZ00xNzQpRTlAM2d4JSIrOXE7PSE3YEp7N3klZGN8Xl1dVSgzaCRx'@;
put 'djpeUmNxS2w3dHJQW0ZFcz49dDw/U1kxfjp8V0IlcHdaJFpvczMrOV1OQT5EWXlVXnBaaC85JSVhaSRjWDMuPU96UEU4VU5PVzp6entbRWt+RmYzaihlPzBheUI/RWJ4fi8yeF1hYCNJPFQyWlZAKiJ6ckw2P2g/NUV7MTsoaFM/UjY3Ql17YjI0PWRlXjIvVHhjOnRKWmVne2FvPk1ifUh+QnJp'@;
put 'ODgxY2A4cVlKMkJgNjZFZTtPYTNUcDVGVk92Lik+V08wLnV9Y11oUixsb0EhLmhsb2FIVWo/fUh6KiVjMWFwVl5LUnk8TjhXR11nW3U2ai5ZMyswVDUwd3c8T1cjLzpXVUw2fHF8JUk8R1U1bT1oVF8+SCFkIlVHWFQ3ZF5LZDt7RCxuU3U/VH1UJVBTeDVoQDwsJX1lJnw6bnksfmBzQUNxfjBO'@;
put 'Syl3Lzp7LypSc0lpY3xTaH0lL15SMTFmMCZna3s5NFNbN04zdWFsOmhTZi58dXB1Yyxsb0VpLG9IPmRgOCVNJl1gIj5oeDxbb2l+TnlgOjYqc1o9LkV5cEpZNjY8KlU6IWUoJiJVczxIPlIoW25nP0x6RG1gOkh+OytHck9AbUhlOS57Myo2RENlTnV0alM1VTptZnReNEhTOGR3YnUvMGZ3TGk3'@;
put 'OyIsc2pwaDFYMytOTX46fFY2JlB2UHpqMF9FJDdDRXkrQmNUKyM6dVsjNE1FITsoXzZRQ2ckMD05aSNNWEtpXzowTE0kX0pBPmhjRW44dGkxfiVUMSsyPiwyaGhTO0AxVGtvL090TixGW1A6SHskXXA6RGFWNm08N3FePSNDYlQ1ZD43ZT13dlRZbTFPX11qR0VuTjsiZ3wkRG4kcWRnRjtidUps'@;
put 'SD5DdS5uXmgkJlhze192Jks4ckp7YixSOkBMcGRuRDczPUdgOz02YiI2QWk4NFBlN0UlSDtlL0BFK1lqbjhrIW0mUjYwJH06SEtVcEdSISxOUl1edTYqZmt1JnBnJkswbU5QMVNWRmNydztPM1RGbHVATkVSazdxKHJBa2hTYCkvMTk5Y15VcjNVaGZacGsqPEZ8OE5+QXFEPntgbWBGY3F+YEtP'@;
put 'MzR3VkYzc2c2RyhFSm1gWzo4QExvaCZdfVNQO1ghdyUmQExsV11JaGdyZEU7Ti5fdFolT05GUmElVmBtSEdJclJAeyJYZGBbKFVUYW4/KXFET1t9NkdUNXk8Ni99V2E1P344SVVkNkpNXTd6UEYvcj08XmEsO3tndVFuUUk/bGxhUWFUcmdMe3tJVSU+MStLZDd0elNwTk8seUJnK2ljOzZtbmtN'@;
put 'enN9OkNZOThzXWR2OGU6Lzk1TDo6e3s2d1Z8blE8PkNYRUV4MiJZQFRXckxzOyJZezdVM0BbMkBQMXorSCU6d0x6P2dDO3ApU01aamcxJVJXZ19aQV0zYnVHU0M5RnZadVRzLHozT1NgQlJIbDVuaGJrLktrJlBAa05IfmhTN0UxO09nVnBQRW97M3hucFU3NFNZeXEkfCF+X15oYjlXcHQ6YDpd'@;
put 'WGw6cVdiJUxtJEExRXd5cHVlWldOUjBYczx0Y0Jib116ckkzcXk6NVhKND95b1JrNTcwTih3IiI9cFFMOFh+cWRCXlY/OClJNGhjXVJ6eXxFSnJ5Kl83P2t3STA0Pm09OGc4enpjZ3oqbmRiI3QjdkZuODRWP3ApJXdoblE8QStTblM7I1J8RFZ1Q25XXkh7NV5AZ2drJHUjRHIlbGRoSjhIYWxN'@;
put 'TTBITnVWOmd3UFklUSQ8KCFXSHBNdUJnez1+NylaRGI3aHdHT3Z5NTVecl1oWW4vUThCaioucEFxOUx0X0FMdFAvNDFFZld0PnVwQDBEeDFuITA/RUdhP3ovMi55Kn16WDZqPF4qRmk5XTtqXm5JI15daC52aHclWz17R1dyTl96LkVdKFNBLERkPyhIeGlRVEc8Z2lraCY9NCh6QylLfH1NUGJD'@;
put 'UW1dXndDRnN6ODlNTnAvQ3lRSGVAdltqaC50OCssal10MXx+TSNIO3pgTWRWdiE1Q2lpY1JqVXpTbFZqNjloaGgkJikrZXs3PnkrXWN8VX42aDdHKH5eX3VSInFpaXwmbiViclIyYUxpQ2UwMUhxaGUjdmZATT9FJUl5OmI2OFI+NVV8Y3dJTj1MNXUxYCFhLnJ3VT0mbUlteTkyPGhfK1ZtJmJm'@;
put 'VnF7PyE9NV4kKHUpZTxtKUw/eUBnU1A2LltxVmgvWClaS3c3X3c9KWdDRH5NMXlQNlFtYDpTaU5lcF9fJWdtRmR7PkspalF+XSpydzAjVCY4MT93YHE2SDttTjM0Pzk5VlRJaD1AeU9aYTA5UFJBZkI8JWpxNUJJaCxyfi5EZ0k1MzpbeH0wOl5gNFk2JEUyLk0qL01+NEdkMXo5PF9tPCpzPk5h'@;
put 'a31fMzV6WS9zLHZJMFc/Zy9dL3J0RyF3cFN6YmBGUjdgNW5reXNoQTZ8Nm5pLF1xdVlIWnp4Z3dqWD8wOXVHOE0sWGk3YEFge1JyYlVgbllHK3ZxY1N+SUw6ZVZaXnpbMytXR3s9aTx2aUtHQEVIPFdeOnBKP0NAcHdJNyhXKUY5S14rPXQrK25tNlQ+LkA5PkYyb09fP3hwVnVoL1s1Y1k9dnkv'@;
put 'UW50ayN2WlA4SWZMZjxTckg1NkQjR1Q5dUReTm8wOy9tRiU0X2xXO0FuRGRFTW98RnZrRnx6RzRXdHh0Sl1CdjZdTThmKWBKLllicGdNKiZjITE1QiRxQyxLSS4reVJsR1hrcVcrU0x8fTklTjRNez5DenJNc3pMOm1Sd2J6Nkt5KT1LYH4pUTYjRGlPVytXQCw9NVZXOFQ7fnEhcnNtPnk/W1t1'@;
put 'RnJ1OEhMc1tQbkxbdDBMJVsod1FvU2R3SV5sTSohKWkwQE8rZF5sdy43JSFvUHFpay9xMTgrWEtXYDxvYFhsSypqcT1mQ2JZVEhidl9eKCJubX1+QlY9Qyh7JDE8VD0rM017KUA3PHAlZWxFOV9gPVcwOFVkWE4jWjw5Z1twSkksZ1czPW8+ciNhXlsjbVhXYkZdIkI8ITEsU159TVZDaE1yKVJ2'@;
put 'MSkzbDUpMjxVMl5nLHx1anksO199YWN9fDB7UFNmInVwZ24lbyRDUClLfl1IcEQmLGliRUFla1BfTzpZTklBNFpbWyR5aUlVTlFaXVMlajRLPmJTS2hsck0lXV5DRlR3N29ofDllTFhRWSkvJW84N2VrXThaM3J7ezZJY3ZFej14M0gxOnEkZm1JbVBsYFQ8c3QjczcmaFR3OippSHgieH1vTG4l'@;
put 'NUh7azl7I15hMVR8UTQ5VUN0eih3TyVpakExRnNwRSZZX08iMFFeP1JPP25GN2oxUjxdPTBiamcxb2V8NTU0bD87IzppPT16ODNiQFMuKkZadFE6LHoyMHBBKDFgQnBweyJwJi89aXhiL2pNYV1OJiVfcXc8OnU4YF1WKEMmfCp6NCk8JWU+NSYpSj4/aFk3fjcjWWhTP3F1Ql9IVk9oXVd2OjYk'@;
put 'Wz9DSWl4dmc9cS8wI2ZoIyRLZXg8S0dsQjJSPE1QTG4+eWd9SkVEazs8WF0vdHd3Iyk8QW5fYmNTYlcoMHhfSXR4JChNOkdVVig+OyhdQGZ8MHl1JjhMejZqYFJlOHZuUGBxcmdPTiFOK0ZsSClXfShLfmpfUi43Qy9wMnEzS1h3QF85N3Y7InIrflA5Q2J9VWpvO3UiJHBvXzpKXUkzKn5OdWoh'@;
put 'VyZGeCgzKiJTXmJ6eyVSX2ZZMlkjMywqaVcwRntZUi89RWdsYSRWXTB4c2w8ZC4vRTdueCZIMn1eaHtRZSxaO3BEfjtIMyZrRFE4dTlOTTN1UWxCVntsRDVOPkR+VWM9bHMxfXQ2dENganFTL0cxbCRIMzFPZHAhV1BkKVVNNTgsQ2B4Rm9uIyJkX1AjTTdAI3pSQDh0aisjVTE2IzdVOkB7PipL'@;
put 'aFE8JnRLTkR7a20+WCRBSm1KZGhZYSkzd2NCUy5LYTNhO0QmYkdZamVGUlVyUCUhREkxdnoxVVg4YVVWMlg1ZkIzVHYmPW0mO1QzJkdHKUdjP0RWIyp1Jj8oPD0iO0BsemxiVil1YFtuYyRuTWtsam5UUytkTzRMTlFBc2FLS1EoW15eMVljM31URyhaXyhUfmRJRWE3YTxER1h7RkV6NV9gSDxi'@;
put 'OSRHNUgiaE4hJWVTMSEuSXpvLFROe01DPVAjJHkmSj8iSCY0NWIwVDVFKj9aRlgoMGQhdlljcHZ4SDdrQkRmWn0oLyouNXUsUUdgPGRDcStjYTB3dTtxWl9HPCU/Sjg+IyxLZzR1P2ohaCxvekBuTC5VNjRxazNFR2RiIkRHYCtWfjg+YCl7JWoubFlfKWZiJE5nM1lseSFANzouVUZ9OF0qOSwh'@;
put 'SzAraT9SYjFUY2NPc1p2I2omYWZTZkRkUGhCJklTYmdjJktsIj55ey9ZcC4lSX1mQVNLVHZ1eiFXZjg1Jnx2cndsIjU/ISEkLiVuKiluczVBKUFxUyMqOFZRLjo4UjlRRENSYzxZVkNbR2NSZjxxfEBXOXApYVNOdC91Z1BwZTE9U2NLYn1NMjddK2lDbjp3PEAwU1p2TDJ5IV9JVl5PITt3PipF'@;
put 'PkdfJXxeUXw5Rm5mV28ucEZNQ2dpQW1HaD9EJTVTSFNtfW8hY0lmY1JtKEhhM2d7IzltVSo2YF5TS2dwNVBscGVYbl5ZZiRoc2Ike1ZJdWNHRFs7RkFDdTlyYElIbHhqQk0sLHdzOjhGNVtMNCRnRm4mPWdyazdYMlB2YHw9SCk1RW5uQENMQ3x1QDA/P2k+Jj5nWyQyKiJwbzs9MStdTnpZKCMm'@;
put 'cTY2LD5nTmhwOShjLzNQIUJ+dyE9bUtmMiZfUEFaRF5lWy5qP1pubG1HUWNjRUd6aktrd2ssVHlJdEh5dnw7NzczNXkrV3ZPSDYoajVPc2JIdjJ6e3pyeWwxJGh5OjV0PTd8RTAxb0cwX2VXJlFbMUl2YDBRejFERGQoO0VeMytwe3tNJFUrZk9bRihfLGkmSndJTS5HS0Q9QFhTOllbQEBAbSJO'@;
put 'SlhxeiIxRDx7PyE3dmw1dkg8UCMjODhzUzp3M059YXNlfkQ3KS94LDVEc1A1LCE6P1pBVEloezk9alc9X2ZCYndpaCoyTyVhdH4sS1Q8QyhqLmlbKTZ1YGZYM0VeXi5kWU1mT1MvZlR6RGRNRWxpbi89RkR+KUYiPDxPSHhlZyJZTyhNRUUwbnYoPmg4aVMlO1AzaWZTNCwjNE4kZnJ5X3dHcSlL'@;
put 'Tl9xcEU7PytEWmJuS2libXNmXmh2I1NON2N7OlRfK1ZpSUFJL1lVcm1sJVpKLC5KZmpvWHZaeGFKfjBEKCgkdmB5YCFobVE/REImYV5oS29wNURse2heIVI+JEdLTCt0U1shdXtdNH4sRmBtPVZoNy5kWj1gdE4ufEl7IztVUUlNSCFNYGNEXUNUeUF4MWNuOHRaMXpwdjlIZi9yUGB4WylMO3Al'@;
put 'RHt3TG5HWlR3dlQ0djpTZ1MkfnYvOjQlbypmTFMrSHt8akpEOV16cVV5UEltRlBbSHg8a2xTelMkfFJbRD1TaV46eUtZKFNfUFYmNSJpRyh5fHxhWVZDNnIvWCprfVRkIXN6cGNEX2FNYVs+bDV6R1I0SzAsNGI6QHMlcCF5dHh0Kis8WXM/XUNMaXclR2YmQzI8Km81WEltVTZ+XmVpYEM2WFAl'@;
put 'LnBiYFtCdU9AIlYpXkNjTz1ENl4md1svfm5+TH5LPkclLlQreFsvMjJmNy88PWB9IiVaYlRoPEdnUihPQm8/fTZ0OWdCS3hhfkk8blZIKit8XiEyKCxBcUg+LkQyLiMsfShSNVRPfj9IL281PzBkOmFwIy5eQzlnRHM7NWw1aylQOWJZMHtudHt6K3xqZCxMN3VFWVlGb1ZQOn44I3ddVHMsJk9b'@;
put 'P2pPa1lgMFVIezFjeHJldmVabH4wPHlKfGs+SHNDezFZO0NEUU00QTgycn0jaDo7IzI4b0RpZHxWZl5LTWNoO1U5bkNrVzlkVkBUYlV5WTI9TDlvdSpAKF1NVHYueytgNik9LzJiI2gua1JNPmRVK3B7b21VY1tpPiJyczU1bzgwb3siakEjSn5nTV58YntTcTxdIT0qPGEseGZ2d3E4ZnVYMVBf'@;
put 'KWY5cmIqUkdlQ21WUHE7OEdPWUAwSnN3PWRddWVwVmgvWnNtenNuTFA3OXlRXkV1eTliYGc8SCtKJE00XmJtUVtuMCxHR2EpIW88bSRjOz1TcCQlaWEqZ008TSg9SXtgfGVyRXtCQj8yTUshWjErPSJnckpYMlh3OmV7LzZ6YU4vWEA3MnpyLEsyOmVfSTB2bnRPIWVmdFVyRDx1ZWpgZHZaYE0s'@;
put 'TXZaVzMhcXF7eTJSVyEldWouUlp6OXRdcSprbkxVYypYO2tUV3c7OncxKXg5NFQhST9LUkNuPjsjeS4zajI5cWVlPj5lYTp9YnxeSUBKIXA/OlJ1NEE1YlM7ZjZ8Xn13JERuVSUsNlBlfSMrPXhQVlA7PHRndyZCVCpeUkY/fTopJmMibn16fjx7dTosNTlkcCM6L15nT0BeNnJwZDxEQ3ZdeElC'@;
put 'MlIzWF15K3Z3TF55WCREKHlPXURIQzlMfEBzQi9MOFsoIyxmYi9UU2skNlhuQlY3SzdRUT1CR3RIR01gbU1LPiIuOVo+XzhrRjtHKmosUyVMXiMxWWMhSz1DOzc7b144WHBqdSJyVzBTP0E0IiFuZnZQbEhebW9sRjspbHVBaXlUZmRmWSV1Y11ofj9nfEJgZmghTShCa0FZPDdBQStKKlJJPj5W'@;
put 'JiIqXT0rbUc3JW45OVhnTzlpO1ohKFRkR1gmIio2VHByOGEhKnlzaipvclNCYCVPUXI0JTszOXYoOz1+fSZ8OzZbIWA7RygwSV5KTFh8WHAqPEVlZzxpbVY1X2Bfb0t7Slc3elVHeUBwISxpaXEuOCxMUn1UTHRRVnZHc2JXe1JXQms8InVMdWJde0k0aVVLJnddaDU4UFtdMzRLSS5sP0hWUmQh'@;
put 'Y2dIQlUzUEh8S3dGQEV4ODgxR0w3YzJEXyV4KGVEeE5VRSw7TXEzLmRVY1tpcWYmZEJRQVdUJnE+Pjhib0Y5T0JTLiVrbllCUmpLK2JVfUk4dFlBWkthPDNdaihHIlFNc0FBRlM0PmcsRmhEZ0hdXWsrK0AiQT9PbiVhMlU8OntAdyMyXkByNW8oQCQxJlRMZUFBcTpRbz9icHwpcXhPQTg4Snov'@;
put 'I2MuZVMkWDg+L1l7KmlCXjV0OGAmeyUzZlJWOTAubjtgcSF4bDw9R2VMckYvSUd3a05lLCNDWWkzYyVqVyJDZzhYMkZCektTMl5xXUJLQmhZW0djUmI0NXFlY1NjMzRKQ1o0XWYhV3lIdWwpOXUxRTJobjxzanxSNTFKY2teV2hxQj9nM2hvSXgpOkRLcmllOUBWeitEOVJaTUZYfUxHI0A/PDlk'@;
put 'OUhhREhLNWo7TzAoKn13MEkxZzt+aHAyX21JSEskKWo1P3FLLCxYV0VuRHMpVF5uQVV3JD88SG13PHs2e2tnbywydSQ8KDREVT94XWI+ZC5+XV9MZ19JZjkzeWY2I1VmLHVFYVlYVHdTRysxbnE5XWxUe1R9X0AhMm8lMjRVNEgyJG5qSmorJj9PaHYmVXk/VH0uS3RNJVhVQi5mdiFnOTsjclNS'@;
put 'Pjt8JF1kJTF3SH1tYFZeeVRRZkE8X1I6KTUrWkVXdW5AVVd1OXdvOl51X0FWRlJfPVAodDh4OW5gVGhze3MkOVRjR2xkIko+Ok5eZXR3QSRGbG1iYU0hVlsjN3A7d21ZL3JjTFAuVTcmdVhXO21AcHBGUSt6eG9fJmNbSXx4eGJdaGY/ZTBgTFtMW3tsYjImaSEwQjJoS01hVGx+ITdwTlNQV3Qp'@;
put 'W15PZ3x3dF85SG97PShtUWRKTHJhaDw7WXxmc2tiTSFmSCw+MitrfHBzNnJ2QjFCJSgvIlVyY3gqJVhGR2lkPnYrPF1ta0BJcDBLO0tOTWpqSWt7SzA+NiI7dT0zNEBta2Z+XXUjV3Q+Qm9BOz5jJnVRckwuTTNgWk4wTkFFe1c0NE1IIVc0VTB2XkFudSxOVGVQU0tpc1VkUUA1SiolV115VGw6'@;
put 'XT4vbTV5fUVXPDE6ZUt8RUsrQmpAKntGVXREM0w/NCk6ZS40QH5OQFkrenxSW2IsXipMRmFBW1lEXyprPDUrS2BidDxjKk5xL2wjZXF+NV1qYDAhW0FzXnphbzViXTQ7azs6QXAuUUd1XzBEeTlfOiZOOFdbc2psS3FPS1BUWTY4e109QSk5SUJWWTB4MGVubVg5MGUoMiVLPmR9eDp6dX41JUI+'@;
put 'Qm93Kk9LYUg+bShGcng1SENhUX4vVS9LajxSW2pKUUhNbkJseFo9R1VVRnlIc14hemU0VHNzKzExUERmQiZkez5sVyNaLj0oX15pa25RVyxZPCE8TGxbKzxQfEAmcCoycDdGWXtrWTAiViQvP11XVjhZWT0pcyF0VTtUT2BJfXpoYkBANVRNbiYvMCJdZ2twJDhxd0R3aUd9I05vb09MYTxRakdV'@;
put 'OyxbV1FQeGJIXWBsUE5dcyZ0aiohantFZ2EuP2J4JnRqYm9QflBXQklPVyk/XV1nUEF1KTtCJmwqNnZJeXErX0JCe2dVTmBaYj9nL31QaEJqcVVtRG8sRG5xZixOcWlyeDsqNEFRQEpuVyFMKksjSy5FcTQ3eTI6Kll5LkMzTHAoL0BmYVtgSmtxWm8/YUQhMkNEe0NaPF1RRnQ2eXE9QCE8eU45'@;
put 'UEddNnBESjlyPD1oMSkyUyU4SEA2YExHMmpuIltPVWk3QnllMUxsfG0ueWYwTXEvdDg7LiI4Qnk9Mi9ddDhWcWhPMTtMSTpHMj5BVVVzRDwsSl5oSUhaTE9yc3w3RTkwX2RNd3RDOEp9TEJLPmI/XTxeZFF4bil3TFVDY3hsYGI4X1VIXWxzMkdEey5kUUh0Nl1kR09QNElVKS9UMlQiNjg9Tmhg'@;
put 'ITdnX30zMjJCY0AvcT1uRUdQellbOjxJTSEyRFVHQDM7PzNKfl5EJFpyc3ZkdVBjZXtPRVlPIn5WR3IraVYlOShLVykuejs1ODg9SnolVSUzRU1VbmV0QVR9JT1Ad3EseXFIWWRubm1GdDtBKm02VUpRMTdkIzJZW0x+Z1owKXhkKEQsbk9LPmh2cXRGUnllRFtUfSY4WTwyREV6OS9xazdCeVly'@;
put 'T1JFKSw4Uj4mTzA4I1lBfnljI1k+ciZNJndBMzFdYD1zKWcoYSksWHxRMDF3UHFJInR+VW1vXlB4KkhNN3JbOSpdcDhwPm86MjBZeXBgVjFFfkAuMklBcnFkMHlYMWRpSmlwOjFNL1QzQng1XntnVFtETEBjPyZfIztqZmpkbmhUUlRINCZuMHI9fTx7VmBYazd9cVpTIz5AKVdkXTRnNWNob3BF'@;
put 'a0h8a19GInI+R0UsYn1MJCRrRzl7I0Q4Pj1kITZCPCZ4bGc1b2xWSmxkYDskNCs1bzRNNUl+V2AkOlZxWk45QiUmSiQ3UHpQd3RDb2gkYFEpNjtxaFtjVW5eQ0dJO11qb3lCVXNvRDNENilaNmddYE5wfXkoN0BgRCMyQjJhRmRGfCUsQ0pQd0NKNHsiRjd6UTxzOCw4L3VxWD0mXjc3JklpVzNs'@;
put 'XitjMmokKnZyRVNxVCtSbVNbX0BwRnkjMVVRWFFrIzpZKFgkMVVUITg7PDJjbiR8bTp3dSV2cUhffGRRdDR5P1JFN3M0VEFgeEhUZz5NK0Y4ZlFJVCJAPldlI0xSOXpNaHJjKFpraF46UkZKJDcrMm5GYE9vdXxZS3AsPnksODcxVSR2VTFnXU00YU1ZQmAqMncrPXk4MmYqO0Z+PGIkdkk4S3M9'@;
put 'JVdnY1J0O0hIX0NrfmE8KlY6ZzUwbzJlWF9NbVJ4XTFBcnI5KlJeUGI3cns3QiNuKTdnZyFURHx6JH19Pn5afipYRm55SkFldmJpakFCPVs8d1Q5R0hVJShZeiJTO2xfMzFQI0pyaiYmcE9RLDU7XzhJODUyXTc8aWVBd11SLDYvIm0rU0Rkcys+WDo7e0MhSW53d1Q2X3lncGQzTnViTz5ve34u'@;
put 'ekk6YigocHN2Qip2NDdJQ0VuPT05JT1FMyZLQTU1XkBhYXNPZ3Jte2Z0fGc4VTZuejthP0BIWyx6anJ4OypTJkUsJWVAXSZZPyk9UTE7bW50OTg1Sl5oRm9GKkp+RShXKzxvTyxpLiskXUUlaC53PWBGKCleS2ZyWTl1fm9jXyMpLCQia0pkQTA0NWcrcllCU0B1a148MGJgLEdDRGs9LnslZUIi'@;
put 'Kz84ciVOQH0jcj9UJWpuVnM1YyhBcy91bmA2b08vRlN0fF4/UyNePnNwZHk2VTFDKnZdcj5PZWdWYiU9P1VXP3BPT3F9fj14YD5UQCRBQX5VdWlUQlM6K30lP2VlS3Jodyt+Uk4lV2VxVXYkI2JqSD1NOjVYMlghcl0rPGJJLCpdTGhMcDM6KnojSlomIUp7NyEjY0hUfEVtfUVTT1lyNGlQKjJm'@;
put 'c2VncVlCRTllVk1XPXJlWS5bXml4QWMlU1g9O2RoZmlXV1Mha14leDc5aiZVMlVaPDthQ2d4ZT4hLzBMNldbQ1VCKkkhSTQmZzUxXyR5K05EOShfbSZfKlQ7ajJLOGtCbjpmdFVmcVJJcTVoNlRwOTA1SW5PPnNrSWFHbl02PiZ1L21xYjljOT5SSllHO0dheFlOa2cjUG5WZVNUZVA8YlhlTlBo'@;
put 'YTs9QlF8a3FiQmVmLDMvKHpYNnI7fEJHI2tdeGlbJW0kZGVWOW1wPEc7VDgwXngiamZPaXh2SzFoJDJwezkoXnh1fCModWkrQyRiJEpgbSsvOns+K3ZZMGIvZW9naF5NezxZZ35MQ2RZSWhzM1QuOTN0LGJfVmcibiw2OXFSYnFyTjZsViJ1dlliPnJlWjAscTZRZlBZYDJ0dTlWczcmLzc0Kj1E'@;
put 'XX16e0c8PFE8ZUpbYiVaJTFUbDttQ0VIOlRNMmVWQj5rVWFEWGcoOzhTO1smPStHOSVjTmtnKSNkcDVhRGZVK0E+Rmc5JWNOcWtHQG8zR3BeIS9tImA3JjJdSmV1azR4QzBnM2kjYClIMll6Kl9lbFc0anBfZzhHJW80ITB9ZHxmRFNoTy97aVRdR2RWfUZbMCZoU1oia3NwWXYzPEc+eH1uVSUx'@;
put 'T19oYCErdkFfI3xaWiFWUmlfRU52RSsvN1t1ISp2WklMIyM+YHwqRnx4b142cURBaDZFR0lZVUdyTiZ5ISxNfFZ8NE4pbHhvaiMxQmt4YTdqPGYxUEhTPG5jJWoud0g7fDxeb1dXdUh1XyhCbzxzVUUxNjVRRUl+cShGZSkjOEs+NGUuWT03KHg8T3VYfUh9UFolO2NhWllAJj8yKWZWKjNIMUoh'@;
put 'QGFYRzo3YkpkbzRAVlhWSk1RTHIpRFk4bUNaeF1OQX1DXnlidiNRTip3czcjSko2aTJ9c0ZsXk4kZTYlcnoiSyV8MUtEZzwkWXl1cXYsMkYrUW9WQ01GV01gPF1mc1QsVTd5VTg3WCxCQCo0LDVeMTpnYHtuJHFORH01RHYkNHljZFtsOSkvN2Y3MSN+ZG43Sy8pcm9DUXlbSUdfby5+QmxDYltN'@;
put 'KXlDcC9OaHxtOHRCb0lkT3AkOUYsdytxIiVQNXtXY2V9OFE9UDgxbyw5PXxheW81JkZYbFFrNVVhcDA5ZFFYOG8zWFFFNV9pYzFZYThEIUV5dFgrVzpHWUUhOkMyfFB7ZGgwZClgJU8wQHU5WSM4W2JhbDN0RVBXVGE3ZGd8WWM4Zy5oWVFmZU1WR1RMVlssfWBEdT8vYDJvR0I/KFtYSS45Zy9D'@;
put 'dm5zRi43KCk3WjYhRypDKj4+LEkhSlZFbWduMClONn0iTEZHQlJ2SkhLOXxkUUZSb2ZBUWFSRXNkdVFVWVo1MkJ1eXNFfTwjQExqcDM1b0hFXTxrU2BZb1BGKmtBQUFBd0FGQT5XTEM5RipNUmZeTFdwOiVuNHYoZ1pQYUYkfU9TSFV3dk8+aWdFQ3RsQkFBQUFBQUFBdihaSnYuYzBzfEBwRUZi'@;
put 'Ojs5REpSQ0J5TWMyU11DIWt8JFtydk1OMXE8eXl1fj4mJGx3ejtWPiJmMnVCamAzdV5VKyEyaHFCUy9jPiU5IVJCdGlwa3VGJUAoYlZOLys3UiQ0QUJUbWdyTUwlOHlMUFsoV1o0ZlhQbD9kbDUmXVlbQzthIlt7XUkoWXdbM2o2KHBISjU8MVovbkhHei4xNFB6eiF9PXczVSZpYV41RTA2T11J'@;
put 'K3M4L2l1Ok5oISo7eGpDfF84KlEuJFdUaSVLYFBMazRvSlMjX0guJiZsPzIlbk5YUj1iTyRnSSQqSkglVlJeMSNlJC9ZTX5SNnVzTlIwYDBGQkw5QldPT0dPTkoyZltiPlUzKUxrQCNMMGwudytXOXs+MnM8TjR8ekchdG52Plg0VSRsSFQ5SCFrelpESnIsOWx0aioscX4vaW0oLyVaNXxFZkJp'@;
put 'cFZveSYrIS5+ai9wM1dUY1BfMFpybj9HJG5WRTxIQ3RCWTRWTUFJRTx6dWgsZHxHei9jM1pkOn4rXWQoPnBOXSo7Vip9fXpmSjRmNFZvK3VxPmx9cXY8fDZuUFJ2S2kzMSVLOVl6L353Q3leeyEzP1FjW1pvek8iLDAwPVRFYiVAKjhfeyp6dmtpQUVUYV8oQkNnN3N0ckBIOVNNdVN1TnFzb1F0'@;
put 'UTdxLihxQjBkW2VrazR7O1klS2dfXj05bU0hWTJTX2F3MncueTpFdVszVF9HcWpAOmd3ZUs4QUM6Qm9uaCJUfEtudyhedC8pe1ZnNDcqe3UwV01DNzN+JmAlUXo0NGlQLiFPM08+LEtkZn4+UFZlTUpXdnlqSDlAKDMlamk3Z3R+bGhwMV5RUU86Oy5XYG5ecDB1aDg8OFEqdmNzKEdwTi42L1hx'@;
put 'bS5mKldRVUl+ZSp+aElad2Y/Nmw0NDdwMk0rITc0YEJ5V09UP1RtJC46e1Urc3N4WGBMPlFHd1tiLEJeX15RPV17L0ZLK1ZLdilQNCZsYyk+KjpiUyR3bV9jRlVsK3VMdTFDe2wsLkVIVUV2W1tsKlBQXnxbfkRYfWAhZDUpMmtbRWdvNmUwWVVDcixSWXgjVl5wbCtjYkdrVWhxJV5UamBZSERe'@;
put 'LiguejpILD82R1pSeFRqQ1lGLFREK0p2QzV2VWYuU1RkbDomOnZCTjk3UF9MdlJDU15oVWtfOiRqaHNdJXRCTFdveFFiUDROWjAwdHg8ODg/LEBTR01zaT51JWlQdmwhRHRVIVRgdjR1Yj5DMmskVHg6bWVwXjZVM2BeWDhhTlJGY35ac1ZfVyV+P2hCQTFNSzBMKm9vajQxVG1ORW5xNTZTYXhO'@;
put 'UWxPM3srUTxZXShNfFI8PlkwcmJYSVdHU0E+NEZXWEorc2xdVlcpRHJme0csOixsWXdVMXFAW0RHSmVnQ0creXVfSnFkZXQsP08mQHN0UkNGUyx2KHduenpEYzRhQ3dkR0pMQiIrVjhdPVd2R2JZeWkrMHpBZ1FpWV9ITnpBNytJR3FbNk9UUHxIK05oPig4OTo0fkF2N0xNdSRuV31GSUx8Llgh'@;
put 'fnpxYltqa0t5RUFXN1thU2omQUlFK1FSNDEsSF80Oyk8ZTMsQEBiOWhfey8uTlh0ZTxkSWV1Qz4qPCNsfkN7aDNtKG9FckBnalkqWlRkUjV3VzcuWUdNPiNEUXhhXj45aGY0QnF9XXYvYW5CcVAuNVlxcEdHTS5Oey5lM19dcElJWz94bTsuJmo0UT8/KXtpWyJkIVJNXXJ4cmdZeGo7K2xzZi82'@;
put 'djtQNUxtZWs5PTl9Ul1qYmhQSVczY1Z6U18peCZiUlAxOUUwUVV7N21vRH59NU8sJipQfWpoOC9xIlA0I2ljRUdpOCwjTFtHOVl4b35AaCNdUjY0YmxKRGY2USElcCgsfCUjOVR9QmdCby57XjtTYUZ1amcka2liaDJrWm5JMX0selZpOllpImZyPlBqTjleLGoqLzhJZ0N2PyFgbG0qb0I8bVlP'@;
put 'eCJFWTU/TnZpRW9US2pSfi5JTyt4JjtKLHo7enFgK007Jnh2a1V5RHRvdTE4bXg9ZDtpc3Q4YSNYXTlwL3o6PkJaaHYwLzJHZztWV0t5bWt2ZnksRSw5OmdNfTV7cVpGXX4oMUYuMkBqVEtiWGBCN30oP3U+UCFGYmBwO34/fmlEeCVjJjlmdFh+MG5ENXorXmhBS3ZRQnZ6KVBgOEp4I04yc2Ze'@;
put 'MVhLYC5PKS9mXUB1MGQ3dT4mWzFDUWcyYDFeb2xpWTJWS0R2N0dGKk9LL0lfIlo/OkVIRD8/ajBSU05ufSUveUtNcWUjWzZ8KyRjIXI4PmxrfXFxa0JqJldZdkVnPDt8dn1XLjg1VkRYQzpaRVhUZ2NYdiFNKTtbMl5ZPX1fWzk3LkBXT1tBQDBwK1F6MC9WbCRyOUFkRiY+NGdlOG9mUWIpakgi'@;
put 'UT8kM0hoSzhCK1hsfSgvOyFBOm5kVVViZylaTSxkW2s3RzgjaEQqVltaUn4yOyojP2wjdCVfUnNzI3JLRk5bIW5HMCsycj9dInJTNGdmVl8pJjhHNz0yZnMueHlFY24waTIrVElFaSRCdTN9dHV9WSZUNm1IdVE0fW05TiUqb2Mib2tQdyhRV2U1TnNNK210I3BIN2E5M2RyVDpNTXVqckI5Xkpo'@;
put 'ZHc5SlhALF4oOUJwMSwpXWp+eFRiKihlYms+LkR6Sml2Y19uQkxTTyl5Pig2eHhvc1FZWG9RfUtPK0MkfSpIKWdGbCpuOlR+WDxmcmQ+PSpaSzcwYGxUKmJfNl5kOVhTUGJgKT9yLDs2ODgsMH0zeGlfTGpHP2JZcVhUNERHL2h5aHl8LCMzdToqaS88KHtFYyVzdWxrIWJmRDYvLGlafjQwWmtB'@;
put 'N3E7WC5zLC9yWmlUS3N2elRjKHJedjxGWyE2JUgocnduPGZBfX1yKlJCdTgmZEJYcF9DSEJRU31Bfm9GVF9ebXVAVWl+QVdIenNTZXxROVtoWGdSQSxCbyw7bWxiZj1LdCguYDokbE4hVEErXTRqNCRqXTZNVVAhczZNXVZSLlNOPDxffihNRitnY28xLkF6eXI5PWVoYmh8YTNfPUZwP0pLfnci'@;
put 'ZCUpPCpraX1nUGxgXkVGUkVMJnkwXjw4dl5AZmlvRVNjUm1yM1MhN0MvQFB1anprTms7fV44M2N3PS93d3RQQ2FxclYsSTVfRUIlKTRbcGw7ak9PV24obHhaOVtsR1IyPHNGZipVXlpKbio7RUheWnAzTyJnNDxWeXwmLi93LE5dbiV5QEp8cCM7KzE3WmxGb2A5ZTlgajk4PDxkZCQvLDFCbkVs'@;
put 'XVdgVEp4UkYmSCY3bz83Xk1sPUpSO2AlK1Q1fTEoKCRBO2t+bj8oVm5TMDB0Jl8oOChMZEJBIUFUQ10lZ0J8KExKfW9jL2YhNnEocVpwRS5NYS5sSE4kfGcqb1JvK2t0QElxPEhPfSVER2c7NUFAQmBkP1pCIyJhaXsieTc8SzdiV3QxYk8iVUBublJQQjc0aGpMZldSIk9xZmhFcSkrd0khd0Q5'@;
put 'KV1EIX42K05yeChjLk8hWUQ2MV1RS2wjLzE/ZjQ8Sm5GUWdCUFFiJUljN0QjJC42RHJVLyREKHgqRC4oV2AmMHhoTGZkVj1XR30oXnM3KVlZVGsuNnU2LH5vIWFAYzMlaClfNUBIJUowb2REelIuW2pHVEsmZCtwfjNEXkxsaiQvXTwxRixhOTFNWjBSbHoofVkrZzN9MWhhY1ZoLFVhKjsven4w'@;
put 'R29BaC5+aHIqcnt7VS5yVVJSZ2dBTWpVYF0kWFVka2M1PSs5UEVmaW5CZXtJXkpVX2lmZiZhT2NIPDUvJCpOcWtGOEcjSndjRkxpIytVfl4oMWRdTlsyI0VtNFNrUT0wS115KDs2Iz1Ian0lV2sxUWZdfSJYcltJViMueG5gZXNiZ2svQipLVkx3Mzd5Q1gvOmRhTDg/QGltTyVTVUpfcjxWYjJN'@;
put 'YHQzVVFTQlEzcFR1SytGLiFqX0slNGM0ckg4fl5fUCYmRTNJdSFGM3MqfT1LaEBlLFFnTjhTTjpXLD5dVixNSGpgI3toc0BtWTlrTjF0Q3RgWFlhcit1Und2X2g2MGFuREZddWhNKGYxcmNLUjB2On4jd2ZIZmRie2gyTT9TOilsfXh2UEZtZEsmRyQ6K0hsWW1RZUJQNk9LYks6Pm5gRz1bKGZe'@;
put 'X0hLP2YpbHlxUW5bTjBsZkwsI2I0dTo9d0MoN0xLYlhSNTVUZ2FDdWtTdH16X155MEpWPEUibExKfHpyJkMpWFh+aHg1RV5tWEM8W2tBZyx3ZTxbS1R0N24jaFU2YjQuMDhPaCJNXVFdYHcwYjBSbT9aK1d8YkZ7Ul49aGUhTj9fbUk5QE0vQ3ZQTlYlRElMSiomXl99SEZecjQxVX0wVj1obnVw'@;
put 'VDRoWiF4ck9IK3FOLiYpNGxZK2dpanUzV0JsKXFRTD4/UFFuflZ7QjQ6SS4qempOSGArZHhsLHgxKFRHdlk+PyUmaCxpWUZLPlAjZy9TS24oJGQkKzcpcjIyOHwrS2UvRWZTMlkjflIvJWt7W25xZmMkTl1nT2NsPVdOLixePTY+SlU7Y11+RGUkN2UxQXdnIjNnRXAvKSoxZlFyQGFlTlJffioo'@;
put 'eCR5bDd4c2B4KV13N0QmZS5MZXphLkw8WFtHNX5CJWNWQDB3XT4hfUcwbS8+XXNSaHw+NG1zKSZjJX5OYTtpUiY2WCZXdFNnMG03fiYyMEl3YC9wSkQoUUxCOjJORmtueCtUV05Fd2JMXUNNbFM7SVYvOjt6TG4oSyQ6fSlFbD1XUU1ybjVqVFVbWFl5MHZdZilpSCY8PyY7WUE2RXQsWyQ5XVgq'@;
put 'QnUqemR2R09pdSZAfWFATkgqdk59emVDNG5yOyhwdFk6eUFBMV1mNFFGbkVibGRGfnA7QUlEeng9aXBuWUU4e3N4bXxpUkRpTWZwTmpZU2QsVik8T3xoViVHK2JAO1EhME8rUU5RYjxLYk55Oip8RTpZQGo5L0pAd1RFVWh9ZXtxZWRBdSUjfEVCPWBJKDRuPEJyPk9OQ2FiWEdsXSpAWzJtLEVk'@;
put 'P3QxQ3xVcmJQb3F0MWR7RntBLHNDZkAzaT4pLzMhUGdqd2ZwZXssIX4yVF89QX5CQVclblU+fTVoaHUjPVY+KTp5LjFjdnFGVDxKRlR7MnJ9UGcucUFiQzVLZUxGNGc8biU0Q31scWEzd0MjPHttejlEeyRRR1tvV0RaR1BGa2dbfHJCXXF7PUBfak1ldU00XyU8KkZVIn1tS08kdE9nJjQ7cWJh'@;
put 'TXdvRFFyYl89bXBkRzAuWUA3b2wyNnthUlZgfn5UODhWcmgpM044X0pqMnJtQmIwbV4xYC5ESH5KS3ZEcGhJQEtoV316IiVUbSJJaUMrNUwrbHlzdEpoJEpMUDYpcHw7UiF0KG96ODk7Mk80QGR9W3wxSmtpeWNaM1U6JElIYkRtMTcrVGFjJVVLJnxRdkRzaTtkbFM5SWg8IXhIeTxVeDFuWXVY'@;
put 'a0JEITNOWl4sWyxAVFd5I3hTPCs2fWhwQWJhI3VUZUM4TC40ITYmckY7KXlPcT1CXkIpV1cjb0BoU3RKaSk8VksyZkV2dEp8eV8sMGJRYXBrZUA9PGI/ODQqeVhhZWtJWkRFJV16SzVAbGZoVldKPjU9e197KXAoXlV4d2ZEeyxCV0A2KlN9Kl40Sj5CKisvPjZPRSkhcCVuanJSaEJsRD9wV0RE'@;
put 'X28+eDJTLHc8Y3IveDN4Uz4uJF1GRSY4XyQ2ZStDfkBLLG1WNTB6Ij1ENlszWz96I3FGc2xXfTVzdFcoPDFvKjh0JXVXb1lVfD4uejVYXiJkPit6bUhWZ15FMHtsL10ibUMzWnJhKD1JKChKSylaajttXX5sQUdkVW82bCNhKXc1PmtVJEJyb0hFIzgjU2AidCxWPiI+RCFqJVJ5b2c0OiI+KWtA'@;
put 'a2Y7R3NkZE05O35jQTt2Wi82TEVQMk5YOUVKWE5rN1dYLEo8azoxVEY9XVg2JDdscEJXS0BbPm9FI1VafHFOdCk9N3YqcHd2aUFPIiw8QlFQajJwTTA7PHhran5JTzB4VWQmQ3ZGfS5BUE1nQXgxPFVse00xWFBRVSlMUk8/RTZjeHNuel5yRTklP09KPFJiInBDZjxKWSQjUlNhTVhgLmNUMCYh'@;
put 'RTt2WGF0MSU0fClMP35eM3ZvVm1EdUJsZ1V4dkQyQSs4TTlee0RlS3c6cXI3ekM7JGxoOWN+cjNhPXFLKCIyamNqMHlyfTNHZm5TfmR9aWRabXskKk1qMHRKIzlaLHdyTFImT18ieCtYN2o4d01LeHM1R0ldclt8TzZhfiovSHxNVXZYa0BrM2tJJTpjMiE+Qz9AcjRBJS41UF8/N3VxMURBdHZx'@;
put 'enhVZXhuaDVPO0ovKyRPKTd+Si9xJl08JjUwXkFnMC9xZi43T19oNE5vI34jPEhLLmt2YmFMJkgpIXRrPSRhTjFPKXdFQFgpT09qcGIyU0BUP2hUK25dbVZnPTB6c35+Ynt3aCp1Q0o5PWpQQ189NH1dTmdmem5RVjJRaWJ2RSQyS045TEUka1lJdXciNkV3enF5NWZIfV9JKmJbdio9KSVWNkha'@;
put 'a2t+QiZXbjkqS3ZtSHgjIX1NZm8pbUV1UWlLTmNeK3NeaSx5TE06ckNBVnFTaGljUTshcUk4WHErXnhFRHdYMUllbTp9UHVOLG8lX3c5TCZhVFNmfWBOOGdVKUApazxLJDtHOEBGWzEuXUgwUUNJKjB0ckBXJTNqK0p8ZDY7WkcoSTZdcHpbaH1xNFQxYS5UWSlSaDoqN1JoRkNkWS8paEVjK30m'@;
put 'b2Z4MUkjfVAiQX0rKjR9YlorOWglSH0pLEdBc0dLZHFpYGVZb0tBVTIhYSoqJFQiSXNAUUhxQ0NxJWpeMyU4PEFxWStRVD42fnM0d006YVVkUnV+M2U0d1VFR2tCLHo/OmQ+WlYwLy4lUkRIJiV0b1UvOmx5d1ZAM29DZ2g4bjBTdWBtcmFCeE1VQnJKaEFnIj1zNmR3anVaI2tXW3NrRTxuankh'@;
put 'WntlRWByRyJRNH4xWypGZzRLNnJkVWN1MTR2eDJmSDdyNnUkU2xWe0QreSNvfmsxRn5RJmJyTSVnMk8hZEk5L30+L1RtbmA/TXRVNC5LXz9FOlEkMFtoIjpKZ1N6PU9TKSNFPndXL29OIU1+flE/USNXNGZgND1XXytnWjA9SSptR1AxK3Y7b0U6c1UxN1tDXUc4Zz43am5jcDg+Im4+ZFJPZSp3'@;
put 'fkUqWmRTdGJLZX1dITFYNF85UHteXypRaWdUY19rInt+fWMrfENeZjF2TDx8SXdZI0xsTC8/VipLaWx1I0tZSnY6dnAqQz02OVFiWiZNJFVYWD4sU101KXFafkc1els0blg7ZGd9Lzs2JWx5ME0sb0owZ1lOe1VtVz9RezU0fTQsW1s+ZnckR01AMWtXTFhYYSs5ZityIWczTE88VDNFbWxjR09R'@;
put 'bEZMI2JDL2FORTMhS3hsaT5iO1ZZNGJNLmkoPUklOUlBUS52RnIwVX5IN1U8TyJufSUlP35NSFd9YWspUCk3ZCJLX0FMS1RwKzF8YiU8MHZlbDxNL2Z5MCxlZjNAaE14TTUjIktEazNoPE5yPVNgcks/T1JSXXNfalFVUEJNLC4xOCRxTH5gOFUqXj5lSGRRZWRFZC9HS0Y5JD0waHh0NCZvc2xG'@;
put 'Xyk+TzZaRTlybkhbV09yRn45cClRcWlRIX11O09MQ3VmKGN6bEhWeF9ZSjxGX25aLEZ0X2ZPWSIlSVFjM3A8T2goI25eUEhFSGF9Xk46QHJEQjBETn1bKip+Xi92UVI3SXosWj8xKS40e2clZ3VOdk9JcWtPWGMyREJiQi9COXE4eT8qMSVbdC5+Z30iJHohSmglek5bfTQ6P3JbeXg3d1Y9O3xy'@;
put 'bGM/RFJWbUcpI3QjMX03RCZsZjxOTHUxNkZMUXB2OERkfC5lInZLQnBTQ1cwKkg8WTNLZnk9bF8/ZjYiJDQoWklyaiNZWzM5Nm18Wno+NS9fV0g9SzkyfixNc1R0PVZufSQ3K3N0Mn5pX3c+RFteOT5nZGxsWyVSPnk0SypzbUEwZ2JlOC90Om9aJXR1RlhbT1BCVG81MXtQUC5NSW0wWWE9KXVw'@;
put 'dXFyPCUweklOKnRoVGsiZX4vfXplcil+UD1Qcj1JNjw8Wzp8ekNGIyF8SjEyMUdmTjs3XjEoKnZrSUAsc0J9dUY8e2x7bjJ1aUdoJXhzYHtYNEFJPXhpU1ssckxmaF4wR004SjQvJi9MXi9jRiROI3ghcW5NITshRS9HRXZYOGA2L2pWJVFnMX46Vm1NQ2lLSko1eVMmWV1DWylLSXM0RiNpciV9'@;
put 'W2EyR2s2ak1rW2xmYjBoQHJiWDh3P30/Uz9OL2c0XjdUeGR2UitAKHB2ZyJrVzdbPCxOd0AmZklfMW9+ezs5MTN1d0ElLjVZPGpWQEgsOGtXJFZOI3hXayt0a111QjlTRFY5UyNBTF16KH5WVWtiPnI7bE9JRCFRYEF6PTY2MDg+eUZXRTsiYkM+aVF0TT9MNGptYyhyKTZdQk5AUnh7IztPIi47'@;
put 'b1daKSVUPDJNMDtGRkRWMzVoMTZSZTtCUl8zOzcjWHVpPl9EUkN1IS9GTEh7a1gsYEVEdyVjJWMzUzM8ZVlVa0wqblZPK3JrVFAvU0hIfSZyd3RtQzcwTE9bcmVpVHlxSTBaWzlHXnk7RGZlJFMiZnBDUntNV0dCfDo9M3p4N1ZrQ2NeayJCSV1aUiNSYEpCZGdZKlgqT0wickUlbDpoVztKKi53'@;
put 'eHtDbyMmZjZXb2xVe10lZmpFfDc6RU4zbyNWNm5vY3RkKiNzUG5kVHo0KnsrKGxnTVJxfFp5WElvNT8jaVRMIUtCc0NfZWRiLj9OYVtFYnoyckdFNnA0aWdmUmZkMXlpTygpMTNMP0Q3QXNHI0d1bkJpQk1VYSRpMjI/eVtmQmFbRlcuK2A+O086VClRbUtWWnJJRlZjZD8mWnNoPT4jI0tGISRQ'@;
put 'ZXt4dmc9fjklN199XTEwdTBieWtbKH5oN3EudlhCPGhMSzZwWVR6TW1CfVliXVZJWm18ZFdAPyZxTkQ5NT5hMHg3Lmp3ZF1gNjlraENpOXVER1t2NGh0RUZHUFdqKnshWllRZCZpQUxdL190QkI7MDdsXXcoNyhrVWYocihsNmZoc2Y1OnlrRmVjSEZnO0dWMX5fNUxlUUA8fThzQVovNGBSNjB5'@;
put 'bF1nRXJAbWNudEcqIWd4fFhVXy5TMVtMZFJIRzAvQHliKkk8XUpfK0l8JmpoV2pgeDs+OkxsZy5VZEV9VTZtXWhoTGA/d25kdEw8T2RXM1pVYW4xZH00TXtPVlNlOz1raTgibSNeYyVYXjIzNiR0Z0tDeixwdyxhVTAmW0V3NHl2I0MkMCNlJV1wPVAjOkBkeSFvbnp9Pz8lNDxmS2ozNFR2al1l'@;
put 'L0BoUmczXUY2PXIjX11MNjxAWGJbRyw/VzMlc0tnZVF3cCVbOkhyKChteDBlJVVgNHoyZVtYWWI7L1lPY3tsZ0lxQ18ubGxTPkpgIk5eUkEvXWJ6ZzthMHEzb3AxSTIjfGs8TUc+PSlpJCR5PS9RcW5JJm9fISUmTEh4T0NPUFsrWT1sKG1FRnpeeGclM28iJXA9eHl2JHlJJElNX2ZJTW15V083'@;
put 'enxRP1RkJVNqQFNqe2U9fEhnc0dZXm55UDd7eHo6SGkvLH1mU0I+XlFvam8sNlgoYFROcVlBRW86VXhhSzpxUS82WCpfUVA/T0k/OU5KJWRzcW11TiVxVkRfMk1AKUtsI2xaeFFnfU45X3s8RkYpYToiYTlYTzE2SWlZWkZnJXBHMyszO1AvIVcufFZhdXxfMkg6PEhRUFlndDVaQ3hTZFgoRGJ8'@;
put 'XXZYWlErXXlBfUVpIzJITT5AMkhjSVswSV9AL3xFVWRAJXpDfHpKfncuUCkmXXFxd1QzZHNPYXNwM0JAYiZ2ZCpfWH1HTCVmIjA6eSk3bStFbm9eNHFxbzlqSER7b147enssTV5lMShBKSNbdkAuI08rWEhtMmVOR2tMUSxlISZfblE6MGFPdD11dUV+TTVHS3dnN15KNF84U0pSTWlTb1JXPT8u'@;
put 'eFkmYnxrU28lSVFiMUpYXipvOUc+QkFUajBHJmEpTFdxcUkwSDM6Iz1zVDFqRG89QGd2JWNwQWtSXV1fXzZXdWRZJXJtalg7cEZ6eyFqLio4bGx1ez1eQGtvUkc/I1pBOj8mR1dVfEVnWVtRdzV6YFFtfGlXbmtAWjxCcCM8c1ghODZ0LyNlKU0hSVVpVDBIc3dyVWVzU3BTP307Uy5scF1pdUFo'@;
put 'cnpCVmlCdlhmcDFSZFs4JVZwSzthXXI3QC4xQCtkK3hSPUwpNjtqbXtwUiZpKWAhYTB9I2teQVdhYlYrSTJTUkN2OWIwVnlPTzI1bHQ1KGA7ZW9ITE1fMyQlaVtBY10xRjJCeks7PkQ/UFt4c283c25qXnlRbz9JL1duRSolc11lbGRQbThEWlEhRUtfY3RQNFB0dGsjaDEqWlBvMmBDeGtCfjA9'@;
put 'Wl5DSGVCeG1kPEAjNW9INF9KXmxCQUR9XmFHZl13L3lVJmg4biJNfF1eMiRGYE4pa28hTExHcylOY1EpPn16QSh3V0lhOld3MyU0WlQ2RShvMltBYlJ0UXlBdzp1UmRTUC8vRkxmQntMPmpDdkxydDdNWVpjbkNBSXN8bilwZ18jKWc3O1lSalR7T29QY25DLHNSdi9Gc35oKXxaVilkZyQufSoz'@;
put 'UGk6NEFtOUVSUVUmNFAyYyVhYD8/V0hkNVlaMXNabm9gZXgkWGNDWU9NXzwkc3NSdTduMiEyc3N8SX40fmJDRCZ4UF8wP2lkW0oidE06a090cExhNDYsdlU/bTA/TSNJWnxoUzVgMlppUyxTSHVERlBhMDZDTjA+KyZzUSxbaiYrKW9pTSNMTGE2XlFBZTpLRng1IkVkMVQ1XVNtJExiP09sQXQ0'@;
put 'azxRJitSckd7R1Vva0ZaOnlnMTYoMFpybCNKZ0xzei9KcWpAW0dONkxHdDQ3IktpVk44dSNSezBqIyo+NTt3L1lueUQqQDtZOiMvQ0xAe1gyIkR+WGFIXVB6KUxXay9XJXZJN0BOPk9JM1ErX29yZ1ViZV1IQyt6JjIwcHdocXtBNEVxJDRzZzFaUzMrR2Zod05NWk9IMl5+ZjExcXxLbzxFZSJH'@;
put 'fSFIRCxOWXRrUEF5YnlnX3x+QCxiazJYMnlxR01YYDZuUW5Veko5MEBvaTUiIUpJcGFwPkR2MlovaT5IRVJ3UntCczhOfDhlKm5hM10udj5GTC81PEg6KXN8KzlkRTNUPHJRLG5faTBFRjVjaERVP0BwT2lBUDVTMjA4SF4iUyZ3T31bI0pLNktPJFF5UVpVSkJyNTx5NHJlR1ZvOEIhXSwvJn5R'@;
put 'ZCQzNk9rUU4vYGJlRU52NXA6TEF8eyZOUiRAWWw7N10+fHkjWGFrS3xhP1ZNeGVkMm42QnQjYG1YYlA9S2V4cF9vWjkyXks2Uj5GUWxiSV9pW28zcClDKWswQT1CL1R5Y2RdOENRPH01Pl98MSo2NUYhOnhTWkJYSytEWyIoc1s6SGFHSFEkTkEmTn5iUjIkWUJtQkE9YDVxRTsmJVVBXmFRS3ln'@;
put 'aUJAYWJxUTEvVXZRWiFCUUc3ZjBjT1QrP3FQfkpmWUNUaUV+VUljPnw7UTA+fjgqb0V9SElsKTdeXT5kNENPYiMhfG5rSGwjRWcoMlokJjxKU100ej01YllSNXUwfGNTeTBkRkQvdH45YjpvRittJioiJHMvfXQ9Xyk4OEo7dlU1XStQekchXitfXXJbVmVFc3omVEImNk58Jml6bk9vZjJZcS4m'@;
put 'L1ZzRE9JLiZYVTQ0RXlDVltPQjoueiVjdy5iXiZ2eUVeRWZBWCNxKnI3c0NeYDVEUE1jUCUrMDtEWWx6VHFVaU5rPTx9bzdyS0EhY0h7TTFgRl9KW3lOaTRyNVhALGkqYTguZzo4KDQjbWRdbjVMWkBiQEp0eVtxS2pkY0xOTFJvYzpRYTBgWT9zdnoyO05ySEJNVX1qd2l7Yj89aFtFWkBPRStC'@;
put 'YVtMWkNubUIlLnlESD8oU3c6RWg0Kk07QUdKVTdTeCN4YVl4dmJKSEVkWUVeRyJ3Rk0+dGo3M3RZI2V2MlEqfEkzZiUrVWgvXXVqYk8uSyklV2RucWV5cE4pQldBODkhckwzU1M9Milsdj4+L1dNSjlISSg8cEEjTkgsbzQkbU5AKXVZTFYuMEZzQyw5eFB9ZnFeSTB7NHNGOHBFMFFpMFA7Pjtx'@;
put 'WnxaQG83WSMkeWJrSj4vYW0sblczeyYwRU55cEY0TF56Xy5CbD5sMDVbXlVgbDciQmZ7ISt6XixQL2cle0Z6SzJVWm9qP3R7Rnx1QChrUyZxMGtSSUIpOnRlVUp7bEZ4P1gyVXlqQF1LOUhqJUpLQmZtMy8wKTI6SFlIJmtkMD9nfUkvaFBgWEpnKGQyMWpsXnRyVUxyalJ3O2h9QSUwRSNIXk8i'@;
put 'dHA3fGkzfERjQ3BDaUwoQTdnOy5IPkpHJlAoRUFPRVB5M2YpNnxkWnxdXi4+R1BRJS4rdys7QHpoQ2NEU1lpbjsmZS8yJE1Zb2JRJXUrNDoxV1cvRl1Rfko5KWNvS2YmIWBAdyJVZSslaE8wViQsemYmIWEpXSgmNi8hZmZ3WXxeTWo6KEIvUD5UNUQ9TDspTnY4aEFuL0JqJHJrOWwvTm5NZ0lw'@;
put 'dTlNZktOKEM1KiE7YjJPe2JheVpbVjJrM1hWRzA/M11zZE17XTBAZU1kTSRtOm4ueVk6Tn1IIW94YjUyJjpVVyI0WSkvd3VzMl9gTThASkBCXllrdVdMSl5oK20+b2h5cjxje2NVc09EQyooYUYvKzhHUWp2MitieSlRMXhfTjA+JW5vcFovKEBtIU93bzFjQyFydFIuM2ZsP3UvU3lYZGxuP0M4'@;
put 'NGlgIkUkLHVCV1RlZUUhNSs9TEkwJUc6ezI7dClLQDpFdzxOaEFmQ156Ki5sfnpELm1dTC5IeVRiWCUqPj0qX0lpJDAjPXh7ZStsJDNpP18+WGF3c2UmWFdIeyp+PlFUT1MsTEdtOGxhYDVROytpbT8mYnRafGc2NFUvNEhgQGpzRjFtWUtXImhENXA5UzxFWHpKOEk1N2ZSUnNMZj1OPnBaOW4p'@;
put 'Y29HWWU5WVU2YngwWihHdHcpWSRVdF5pLFZ1X0E1LytmWGh3KU1hYjhuXWM7JEp4a1gufVhFc0J7dEEsKz1SJkIhRT5YcFtIcllMVFkjN3Bbdl95KU9QdmZHIV9hUkssW2NjP2ZSYE99aD1TNzo2PTVXWE57REJyZUI2S2B5eEtHbD5AQHVvaFc/Q3xGNTokcXNiS1ddODhwbVUjX25lO2ZXSEAj'@;
put 'TjRPQl4oPU1yTipfc1UkSlEwOG1JMzwlRUByYG5te21QZGkiJkZFcyNobS5eMiZga2F5Wk9QTW5Ten47ViFyYnQzay9mMTY6SHIiQWFPcztFLk1aWi9SYCImRj1CP2sjS05TVlhNU0pme19yWmNqZHYmSU53Ri5FL2BRUkdlUTVNczw1TmltMSl5aDlLN0tgY0wsWE5GZUtgMExLP00mZ3N8NE5j'@;
put 'QmpfRD1tJV0hNT9dVG0rXV0qQnxTNURLcyR7XVlXaUZFQGxAalJ1LkxESk9HQnxGQSYiXX4lIyVgYEhGZnJEOiZPMj91RU51c3tMRHt0OWkoeFplZShXJnhfPSw3IzZeNEx6Nk04V0BWSCQ3JCFAPntlNkArPkRSTj97clUqNUNKKjxiOHtDamxsKn1AM0B3InokeGtmR3phLyZ7OHN9N1ZjZlsh'@;
put 'MmNSOzs3bEJ9O1NUfklDN1dKUm5ucTA0SHc7LCQkUjp2aH16PFdYQHVGRiIkOEUvTnJSc015WH4/PjRIam0mdEJ5MnE7Rmdsdm83Q08pYnRBVUx+ZTA8IzlXPCp+TXVNclFpJGthZmRRaCZkKGpUVihTfFc2Zn1CPjQqQnAoM0RPSzdWR11RUGpYKXVVfEQwVVZ2dHVXN0dfKDRiQHs1WThnM111'@;
put 'Qzs9Q1pkSFRtVDxRLyJZbXpkV1l+bDZbKFR9TjtIfFUzKU9DTyhNMVdEeCxASEV5YHM0QjFFamIwJldGcHkzLmw6XiFdQE9OO1tZbGZGZH5ZYlIlMl9LYiFAXXIsYlNXZlkoRWNPSCNpWXhsfWNIUjYwQG9ZOnoyezE4LlZJMilTdW9wI2hrMk5+Q1NkOXBFVzZaIzJkMWQ5eUIxRHtCN0lTZGdX'@;
put 'O3JyWlc0bW50d3hZa3F9U0FwPGdARmxQVGl9d0gwWk9gfl0+NDFuQHMuLz1FYFt+PkU3TzQva2h9P11uLmBYRndPYmVuOjRSO0ZfeUVXcDo5ZSt7TCtLT0I5MmgqUnIrS0MqIkxZXks8JEojSCk9PD0pcXh1UXZ1WypBYTVZYlhPXX5FMzpAfnBLZzU/Vjk0XjtBcSg8On1HeSxSaSRwYksyPDJm'@;
put 'IX4wKV8oKENaI0tmWk00fERbVzVyMDh4ZFJZMDtERHV5I3BMcE13KTpTTSJVZiJwI204LkJXQkMrcldnQCwidVlYeyh+TCVEPHouJnlqXXt+aUI3fkZCZUhTRlslWV90R1ZqK0pqRzZ1InFPI1VLQTQjdy89SmNTcm8+SjMoXSkkWj15cm9ZR0hyTEFhbSI9Mm9aQEI4Wiw6R2dxS04yeiVPbnNB'@;
put 'LiQyfTJoJShzZiw1Q2prdSp4QjtjTFc4W1FRViwkaXwoMmQkVEdUNzhZeiplKlJKNjBuQChzVkMxUDlFfU5AIkgxNUZ8PHZSQU1ISGkyLzFuS3ZEUCldb1ZnOE5TOSVhQkp2VDtbdnFJUEJic308aHh4TmBeNmRObzg6PVBiPWhDNEchbXlwPHFNW1FlIys3IyVRI2FHKV5gfDtHNHgwOTU0S3t6'@;
put 'PDFbOnFZQD49XkM2VEN7RS5NV21pUGM4KURrNCl5PmQ3ZGRsSFNHfnx5bE9yXW0qaGN3VFkhbkdFazR8NGR7OHs6dTNPa0w5Uz0jTjxpNFgwUFExUzJIQjoweT1me3BMXWZ1fCRmLFMoaU5vZEhgeypeV2piTSlZOD1sMkJrLHkrW2NZRHJ2JixYRDcqTkRyS0NKP007MX54WCp7YyZFaiVXNUNV'@;
put 'RG1FejojeShKSCsoaHNKW3tzTzlARDpwZ3wzWVZzZWVXdUNqUWE7SD8sWkM7SEoqNkN4fXw5PjpzajdTIjBaUV1ScWVINitdaHVRI2FQIlEuPXFDcmgyQ1d7dzp9IldzWTckbTd5aXVHIURkTlM8e14oN280Yk1PMkdeTFRSdF1FUC4zSVUyajRPRzw4SWtgJiNEenRvKXozO0EzWn5ofTY+NTlY'@;
put 'bzRSZztaY1BrfCFyR0ReJV1PTTR0ZFZWUSpLeHlHeEQpe3ssMEBbODF6PWJ1UU5LM31MbFglXl1GUCZRdT5fOFpRPlY6ZV9wPi5oa2dwTEMuYVdsVUtNKlE/ZUVCKGhMZHNJcTpRVEVxakQsTlg4PTh+RzpnJnp1SkA3N21HTDd4cWRvKUBpQ3xHcTIsO1ZWQX5kX0VVWERNeSxjNXxYcmheK0Z9'@;
put 'JWxwSmB+PmYic2BfZGVDOiVfQGcoflZbS0guOVB1ZjdyN0JEIlFpajdMOzRbWDBFSWNzWEg6aFtQUG5MJEA/QjpQL3Zjdjt3aUc2XkkqJixXKlNoWkxVMSwzKm1CV2BiWX1icD1xPUdYQEMpdDd5WnM/WEJ6KkRuaHxJbkE+JGtBX1E4fGh4KkQxO0tJfjIuMWNMajA/ODR+dEloWzhDW0cjJX4s'@;
put 'YT0hRHdRKn1oUWM8SnxdMHo1PDtLZmFCJGpVUTFbUTE/VGBsSXh6IUZuQlBkMGAvekV0TFVZITlhN2lJMnlOQzRmXkghU1RNVkM7QjJxPyppeShlQjptLERxdkRTWXMuWWZXVjtWfj5Da2dNeDVIK0JKeDlpQ1Y3WiRWdEVgLiQmJHZxWytHIjd9SFZxZDpoVmIpfVRiSX0oLjVnS2pLOmJEZCZh'@;
put 'Kz19dGRuaWFkJVhaYXxqeixMZ3B4UHxsPSp5Qix5WnplaU8rV3RIdDNpfjpQOlhzd0BOJDlxZkNAQWguMEg4RiQpb0labV8rI0hjUzArNlJGfC5FKEVzIyJpMyZbI0dOVWo9SGBdR2pMTzksXmFHPG00SD9oSnFkIkZ0ZzkkeH1UYWomam5SezdhekpeX25baG5DbCVMZFVgVkpabTdpUzouTFVf'@;
put 'ZTI2NnRhREswYmYjdlozPUlybndgI0VGaSNgWm9neV9uVXlZPyU1L25IdV5RO2IjUC4kJTNrK30/fC5kc1t7YX4xZy4+ZFtWSE5wdihiL0NLSSpGdnFqNlV3UEokSzlveD0xQzE0SHtPTmEpLHY4YyliaU97b1JXaiRHald2bkZbJnV2VDpxUTI8N3hLP2J6IURrcEcqOjI2WHlIRlhFaV9EZV45'@;
put 'W0tpYkRfblNCYCREMlksKXtPTiouKjooJl5BJC8rQyZVfVpMd2wpdUJMflpKIWFASi9KZCpIYk97Qmo2PUJkRkksY21UeHRkZT42Y2NtO3p5PXp1YEddU3phNHllIT5iYntsQTpoY3VsRjtfXy9GUHZxeH46aFNKTXRbWyUyZVhrJWIpb1ljW3dZfFN8JlY2bTJ1X0UjRiVgXip+OG5CLlQiOFBh'@;
put 'VTQvdk09RU93RCY2fj1fIU1PRi5rS0BQWmA9dGlUZT4rLEB0QnxYYXx2byQ7X0AqUWxRUHg2e1hIe1BeY1NyPV5YaWpTKkZ+UUkkaVguaTFnM2ttZm5CUCthREleeGkoQkFoKENTWzFPclRLUilVMWhKUUU8JishMzUlczJxfFE2ciVxI2k0KlJrRlt7TzE0YldwMWNAP2FQJXZPWnRmeUY2eGQk'@;
put 'MTg8YT1KUExeSkNUQywlJT5jS3Q0XyxrKV02SmQkcTppZUkoTFYuPlAmMmc3RnFRXyl0U25iS2pWbSQmfF5jS3c+UGtsQmQ0Jk8rYW8kJVUqbGkmQzwuYUdxMjEvMHZCezxrTEkzeyYyK1FVNEZoaE9DUE40OFElKHp+JGB0JER6fmtsTEBxaCEiN2cjcWBXQ1hxcEdePjt+SFZQX1AkOEsxcU5M'@;
put 'ajMvPilkN0dfYENsbCMvO31QaTkrMCpRQnpibVBNP3VRPDQ6SE4hPkp8cG4yZWN4TEIkel85QDxsI2l2Tkk5TCFCKSNTbkV4NkVgXUQ/az5YMzgydkVeRTAkYnc/YVRrWHklezB5YXBhKmNALCEvbzFjM0dGczp1dFZXNjZ4KXNSIyRpTmw5JFlTSCg7bihDMWk+WiRMNHgvemdDY25RVz5gW2dM'@;
put 'aiQuK3lTLDlRUW1VQmdhdz1uRSliOH0rQHdVfjFiUz9xWkZyKShlO2J1a0xVYT8/cXk/JiQrVHF8cFt5LF1+Zz57PWQ2YUhVdSolVkQ6WVdhZ25DZ11SY0NYSG5nS2xZZ2JWaHZlPnptWj1aOkVTNXo+eWx7azxjfSUiLnw1eURqeDZtPWVoJjNBd3xwZDVMdFtqOkAxKHdOYEZZXXNjTztvOiou'@;
put 'QWpbVDE/S01vNkt3WVp6WiUrTD9KJG9PNjdOVS9nI01GQVUpWEhkKHx5MXFDQjAqOiMyODNAU2ZVX3NFYTJnK2UpJFErcSthKVM1My53Nn5ofF46MVRMTFB5QGBFLH5EKSE7TGhLW0x8ZWsuN1h1d185Y0NLdyNkTilQOSU2R0toUjdFVCU7R351Ql9RWHdhJGh4XldETklJJlhDODx7eFFdcF40'@;
put 'PlMjeiQ6NDNDSykiSSRfcyVXTDd7V2RGZGhQXnRuUF1NWH5re25RQXZjPEJ3Sm8ucFokNW0yTVkwQCIjVCQ5QkQxdThmKjJSSXEjM3orJSMrMmpFfVN3ZFYpR11+e0ZeRWliOzYrSD5mLlhNPDhaO3BZYW9uWn1QcSE0YSNJbG1edjtKND9eY08kdHYlKlpAbWRkYE0yPjdfaURfRF4jRTkpe3l0'@;
put 'NHlxPio5ejxjcFosRWVkUklAbihydFAlZ09XfHNJPkFPMG98dX10Ml09S306al1jYih9X0x5PzxVJGF3SWE/NVszeyNJal5FRm58P0p4UWMhJS8jP3ZAelF3JXguIShWJj1zenxkTkU/PGBqPSF1MW1WfkFbdTF+V11vaV07VXxzNGVZX25iaHB3Un58NUU9JExXaDZgQjB+PkspZlE/alhzTktu'@;
put 'b3hafip5QTldPD8jKzNpLkU1UkdfKGZ4Znt8YCE5Z3htVmcsKyVnYmFlXjBoblk3djBPL2Z7b2dRVCZXKU1JdDtuYypOOClUaU40UlVRLDF4bE8qLk4ybmRZTmBBKnt6RlNCNEYjUyZWKHNzQ1o4dEVLe3c5NVB4S3V5O1pfbVtJdVZkPS9RT0JdKzF4WGc6cHUsZG9LWiEoKWxXQ2Z9VSJKQ31R'@;
put 'IWIpWmc4Ozdtd2ZAaS97JntXOSRxcHYiT0c+QUBNYnwoTXJAXXNKL2k2Uk0uVXA7S2s7YENBPzY/QlIlWkdSY1krdXBWUl96X0U0dloyQEVUKkdbZl88WGwhdH5ISTspNTB0dTRaS0p2LDR4NFY+YmU/UlA1STRobUEybTpnNDg/RllNN1dfNGZOcypRVE9TNyw1aFUjRjhaYzBlYipNMDArVnRb'@;
put 'VmN8QCpZbHt1Z0FmQm4odEdYODMlMms7MCRObX5WV2F2JFB7am1LSFI6cTwhOHs4VDtWImsrKmgoYCw0XVBOcipLKTdJMnR9UzskYSNgO0hTMF05MyRwTWBDQj13NC5NQE1AJC5TMixHNk8iWT4/JkV2MixgWSMwMWFxVlBORzR0MDxlanY0Z0FvbkchPXNrT3hHOTJvXkt6fTIkQzEmOSU0b1t2'@;
put 'eThjMF9vXTdFRChzbj9vSTJHeHNzO3c1IT1WdSRBa0hMT1c/dUhOcUUvODRuKlk3W2dOKUhBSGJzSDZJaEw1Lj46c1E9QjdyfEhneWthYTAqN18+NEVuX05UKHNhVjJhNEkuV0w2TyQ6PlA1OT9PdGF2eF5PYzwsXUtPXmkzbVU0dmY+VHIlbjVSMFVFZVZbfU1kdm1rOnErTCR5JWEjeEVpKStH'@;
put 'QkN2dXBANyxuTzY4OmVKN2Z6M1l6RDQ3amN0a3dfaUtTd2BjO2guRnJVdSFoTWdOOFtbT3Z8ZCRkYz9SXTE7Yzd9XXJuW108Onljb2dFKE5DTzVSQFNqdjxhK35sWjswbE0pKWVLYmxOKy9wWChAJnQkIUZOJltTfjRka2VtPFBtfUshVSQqcGZwcjROdClgQ3o+RTJHOTtNQEd2ZUVbbTJVflJM'@;
put 'KWA/ekd2P1Y9QDx+Mig7WTcjMzM6YV5aJEgqOWppNGdwYFtpNWZtfmhrY25iQE0jQjszdGo8K2s9ZGMrREwkU0Z7T2s9c3JtaVU9YWRqNFpGVH07SkF9MkIiNGpXbGI7QnhCZVsyRW1BI0VKRWElYSQ+RVpgQ1pTUmQ/X1gsbTNOISoyOHBTP1Y3KkgjKmwrY1cqeEBfVW4yN3xDX1dVOUAyaGM0'@;
put 'd3xOdEJuYElxOWo+T2FBdjJze2AmSUxma3x6O1VYIjVeSXsxQipjTGl6NSU3KldKTlVDJD8zfilTYCNsbTw1W2VZKF5NXj4yVWMvMC9jYDVHWExmcl1ER0hgeyxaLnxmdyVBZlllMit+R2cpNHtzfUw/MjB9WndRRWhBREsiV2tbLG9lVn00MDtgXU84SkBOSm07RzBKU0ZbPGJsO3JfcjVeI1c+'@;
put 'PlAzSmp7OXBGbV0qO3NKKGl3XVdIL3I5eE1VKFNPaSo0TkguWDxjNDhiK0spPU9zTHp0ej9pJDVMcTluM3ZrazZXNC42cGx+KnJaPnlSWTBmaERANVV5Iy9QLjUzVUdoWHpxezVhYyo9OkA9d2k6Ul0+fFIjW28pPEBhYSVIPiMvJG5CMTR6Xmo3dixfQ1t1Z2sual1uRE4zZDx2OX54O3NwXSFe'@;
put 'dDJCNSwjcDZxeT18YG1qbXV1KGlKPko9UVR6dHBeOH1Ven1aKzNqUCtWOSZQXU1yUTlqUzNQX2l1Yy5AcCMsZlpNLjptNHpBdy9Fa00oITdgYTI7ZV5gNU1gbFdETzB7Kmt1UD9ySFc0TEtZW1cvZkQ8YWBPfFdDSGZnNFRBSzBtaHZSczlCZDpOc1lScEVLL3EveXIvVzxoZWsqUHliVGU7anpA'@;
put 'T1t6MzReWD8rbChadWh+XlspQVhWNnpWQzsmb01gMWIwZGd8TVBNO3V8MCNsMW9nSUBOMEwhe1NjeEVmMVJbOF92d1VmLHksZi5IalAhb2JlV1Uicj5rPndhPlI7Z2EzJUxWKFpoYz9XMElUc0QzJWReeUkyX0FMc0x2fHY6c3AsMXQ/VGJifUY6XkdkOGMqU1VdIWUvRVpLaVtVRDohaCUvYXwq'@;
put 'Nm1EJnEsLjVzTUBwWSV3dUA7UF9zdi9YcEkzNUNQSUhQVixaIypxJl40WXtJIzN9KWxJVkE5a2RUVVNUSH47WXZYViwvVWFJcSVOX1lsfUBoNGdUVVJqNW41YG5iJkV+MGdqVT0zekpGXXI8MFsidDhRQHxAXjFIVFlFbFY8Om1pN2ttfSk4bE5+VGBgV3h1bT4lIiQ3PFh8Jm4+aTxESTt9UGw9'@;
put 'XytEMmhVcVUlOzw7TDsoS2MpPG1fbmRUOUkyZVpbL2M4JV1UQEVCS3lALDR2K1E9dEcrOVg+Vm06dl0rQyttbSRebXNtV0RFXTFzYGhQeTJSVCFVKVFrLjd2Tl9rdDZbKX0iZXdiaVFLWlNaOX5XcH16XnV5dDBsezEiezxSdig3ZCo3cVovL3BMYl1LRHQ/UnN1TXJZbCgsfDxpeEdGNFRLalhZ'@;
put 'MyV0YkhXIS5KW0xjR29IfXF9Vkt8dTtJaUxkdCheQiRfcS5lRmladV44QShSWVpQMzsjPWIvcWRSSlJrSHpqfjtvdWhQUTslJXcuOG4vZi4+SF1CRlFBQXMpa1MyP24/X1hfPVddMjhqU1EvNU4pZjw5Q2xVeWNFY2kifTJmWFJ5KSRaNng7RCRzS0M2OmA1UnZtSzd9VktucEc9V0tSPGM8XWtn'@;
put 'XTAsMnxDUy5DbyNnW353MlNWeHdOK2BCYXRKVThqJiQ6fHFvWVNjKTVSMmFvT1E6K1kyV2JkJVNkV0I2WXY/PjN+cUxCXnhLdyVKP0BUbkFpIT1SOWBhcEkkejVMUFslWDJQbH0oVFsmR3pqKlUwRl1wRVAmXkhVJFo4ZTBrNThdbX1ndmh3aVh5fD9dUU57NEAuXmlWVyYiZTpuMDJzPk03aV1Q'@;
put 'NyVaKjwoREJGViVSK2dtd1U0RXFVWEJ2KSFSaVJEdkpAalNrOUZtWSpCN3ByNSVhKkEpUCpQQHprQTQjOGJ+Y1RJLnN7XT4zaXZ1MUljfmMleS9aQnl3fEglLFVXPilYRX1ydDsxWCYwNmxjL3tZPGJZRnFrRHVaVjR4NU4qMldocjZ2KFIpPiZocnFkfHkkZH14V0w8UGEwYGJVL09RUT5IQFE/'@;
put 'NEFUI3x2Rz94VCxrMWNUVi8hQmt6VSZoYztFd3AwUCVRYzMwQlh8SnhPfklBTlhhLzk0MXpFVEpMPTJwI1VUZVsxUkNJd1Mwc1JIbE15Kko5IyEqSkJ5InF8R3xaI3k4V291SXA4NTYxQWhqUURWVHplc2t5dUlGJilRTndjLzpEKCN+XWV8KFczUV4hKEZve3JyOmBNMHh6WFdha1hHdV00Qy9o'@;
put 'eVolRVtCcCYoJEZRM1Evc1k5LChWZkBSO3IuSWNTfVpKd1ZURGtnbEU3Z3FmNWwmVWA2cz9HSD9AVyliZzQ5WSJOKkZiXihSTnhLekVmdUpNe0JhY3tRcjt4LEs9YUdZOEluQ2BxeT5YNyJGWj43YlBCIXVHVERDZDEyQlN2OTV4azxtYFRUflc6WDFMVzhSPmU4Lk95fEV2aCJsNj9aWVdDfDA9'@;
put 'VlV0OXs5OXU6cGl1SEtyUWYucElmRW9iTkkmNnthN3RYUXxEZ2VIWmtjXnw2Ymd4ejRJUl8xLEpmdDw4UGVYKzE8Ul5oWDVNKENUZW0wbTd1cnZqSiF6OCwiaXYmclkmL31eQyhudU4xYz8zPU8rY0xieV5XeVgpWShvR0dUVnZEPE1leFYmbix8Q31JWXpJWER+WyouQm5dSSkvO3E9dURhVDBC'@;
put 'QWs8LlFGeXQ8YiJdfXhiMSxreFEpQzQzOE8sflp9MDpLaTNUM3g2U2NCXmYzYm5QQFlfWilWIzo7KGdnekxKYDhgN3E6RS5fXjg2OyRSQjpSVjI7ZDVaWVJ7UmRvc1huYGRLMiRHZFcjdTEzfVMheG9PVDI4I1V7fDhpOHFaWnVXW2FoMT9gXVB3MkJnVklAaEBiTj1say9ubmAjRmNFeGwxVntR'@;
put 'czM2bHI6dHppJUwjb0QvTyg0UElkbl1Obm81aH1oPzp+KGReLiM+Ynd+IWx+bT1CQ3Nsak57M19kMWExSVs3TldAOGl6RWFCSGVlQT54Ymkuc3JjfmVWbz4jcFg1PDRFRXZqfkBNXVpkODBPen1gbTJsMXoheixGOi5SKVQ/aGt1YkY5OSN6M2YjRF5yPXo/Iz0rS2BiYyo8M0VFPEZaKWNrXUsx'@;
put 'fEZkeWdxJGBBLmJfNy48NF5gJkokIW5ETG5deEFpOjcuT2ImTWo/cyQ9YHxFeT4obChZbkc1Xlk9Nj86T117bGNRMFdOYihBWGNVdngifXxKLlZxKFMuZURwS2tBfTpMK31pUiNXbDxrYV4oZW4mPGo8am8vdDgkKSFtS2dETjk7flJUKlNhQmswOjc7PzlFe3FCPyYxSnVmbzorQ2tyPldPQCF2'@;
put 'QFooVFQwaXFhWCorRz4mZlpzQntRY0xZUXFndURVcTVRZU9eKCo2MWcvRE15VyMufV4vVkBlOE57cHFeIn1Fbm82QGV6K2ZvSFpsViNBb2VdL3RFQ3dHWyg8N0NFfCZEM2lsdyhiVWRsYDhufGRQN1RBQSpbc3ZLWnlEYUhmJHN8M0k3LF1FWGU0emdyK1p7KHh8clkpWEIwSkN1XUYiP2FOZksv'@;
put 'V0Q/R0xCN2MuRTx2cj9NUFplJSRwSVhqdERtTCM1cTFzdzlARmRVR3xSW09sWmovWl1dOy5zP0hpaUQiPGJLSTUufik6c31QeF1jRmg9Zmg9cls9ZHE3OlJNQTUoUDlhYiZ0algjMjtQMGFNRT0pSiosQmB8LltSM1pLdWlJWDFUXVRsbWxgaCssbCp+ODp6aClYcVFTVkMjV15iLChRJD8od0V+'@;
put 'MHZuYl5wZntLPzM3eDxvJCFaP19vTDhBU1Y6YmNXNk5ZaTdmMGxxJEJ0MWFsNWpgM15UMH1pZ0M/cmpbaUM3L1JrclhYdmF2bSR0U0NCLyQ8NkdyXyNiJkp+fTZoYmY/JEtnNzk9TF0oVGFhb2ZldWo8UkY5bWJAdDlaJVVzMGJPYEFnTzxPZV1lSUU7aDhOJnxRbUN1OywwWHw+N2MzKzdGInA/'@;
put 'SShFfF5TVmoiMjVuP2IsPU83I3YuK0IsWmp6SVk+dlFkXz02S1NYZktrTHdsZztKSE9ZOixHOENkPTVpUjpSLEkoTE0zXVpdaEVFPDQoQzBqaypIal05ZG1na0ErTkE1ODF5aEM/R3M9SXt2SjJxMWV8Jng8NlIvK0UiTXpVd3ZsRjdhNnZ+clgzNWQ5WXdaQWtrcGBbenlLIVdfcHZRTW9MNG9W'@;
put 'aSNDekQ1XVZbcXBUPlZxN1d7OFp0K04kNWgjT1RScktOKmozeUZ6OmlVXltkOyYzX1R8alo+TWx5WVVYVCYqN281YndRc3JYZEtLOmt6IV9JNl5DdzlxVlNycHRNN0JKamRvQENLSCJzXnN5fHRDOVJ6U1V6VWlHLG9wPyU9aS5xRkJKI1VrfGhyeFQyPzFYMWMyOnVVaXRuOHl3VVRMKixeOnJj'@;
put 'R05IPSwpXlkiUXN4MHQoTjNrIX17KT0wYzIzKHphRGM0X29YaU9SKSt7OiRGeHwmKX03N3VLcFU2Z1pvKjo4Q1JTfSY4JjUoeDxGSX09VCNWYyhrb29XSXNBN2F1aHtvZE1OVkNOa0N4aTVwPixlYHooNCxdUTdrZkghYkZ7On0uO1FKPFFQblR1SCFnKkV0ZFVpPlVJTmZDOkd6ITMhTXhEW1Qq'@;
put 'QT88eGlFYnFaOmRBU0hYQGRCJD4qem8reX5fWGZjOCs2WklWKCwvL1BQaShHYEZ6KUgpZUdeUVFrTCQydEYhTGVNdl5tOEFmQDVNeyM7PCJ2MTJXIkRgTHJeXWY2LjRIeyVFJX4vdW9FRiZPYnEvRE8+NU1BOiliMztMLyJ7T01efnQ2NmguZ2dJJXhTLEw6eWgiZXZIenRZJT1YK2FRXlFNUVNO'@;
put 'eWQzVGtKJWhTRDNSKU41K2NJXiRdXztsZ2JHdC5gIUs8SjZOaiQvYUJiKyU9S2ZTe24xQElhX2d3fF5RWkdrdyhXemlTQkpLNmpWJnJKbiI2PHhUUXAwKmJncXVyMXw9NzlAIj9LUz15RW91TTcrLkA2SXthQGl5eUMrdF9KbmE6YH4qTTUkdWVxYENlO1pFUnBFVXEmMjVLcC5NMm5UNiZxUGxv'@;
put 'Nn1IMHlrc2Z6cVlgPmNnVTZlNVA7Y2lEaiVSNnQlTXIrPE9TJWM0T3lJRGlvVUV1X1Q/TCV+PjJFVCpLemtJXnQhR2Vpe0U7aX1DV0dLITV+LmdEKUBzQG9lb1gqI2gidndeYSYrNlNtIUpKPEZXRWhsQjxfW0wufTBgM30oa1lAL2VAJktgMnFwU2YkP19jdG8kNUcmK1d3cG56M04vQHlwUUda'@;
put 'OExWbzFFK0M3eilpPDBIMTQ/VT0hWlFESHE+T11kNVFxLykkUnt4LCEzSU43bUNiLzZSIUZFRHYwPVksX2lQTmRzZFhJSUFpdTszXzUmdU0iQV5BUkczdCYpJEkkeWhCekciLmBNLC4xPkdadlJJNnpVbWRdJmtXLnxVdHl4OGRrNE58U0BmWlt0ajgsIVd7KVVZekNXNEIjZHZZcV94V2x5OTtf'@;
put 'MlIjZ2Y4akMpaFlafipHVklpO21lfX1sPV40PitGfSMzZlI2MGd5Mmc8Yi9FPjVEYilpQVEhUXk4PjpIWXYiO3w5Sk1QN2JYTVVYOXxqelchW0dbaSwhaG9KZyEuTyxpY31qNnlHPGNiI0ZvREo6UDZQNyFGPCosVHgzYmhGLHVHYXZ1eFpjTj81JXFKWzpwWShNYTYmOHxAe2xaW2B3VG1ZRFov'@;
put 'bCleISsxbncuWksyMzk0WkZtQXMzOzpwNG4yUSUrMT0oNWY9QyQ3KlBRXSExR1FMc29FKW5+REA2WSVAb2tyLDxRJCVTYXRxJktiOkxlYEZ+OV0yR2YlbmZLR1V6YjddMnFwLlteP01ON0pmXitLJSs0MCZKaWFbMUsiamgoPWluXX4uMHN1cG9PZy9lMiooNCwxX0Q9I1JRWEN+YFNaNztJb3hQ'@;
put 'U0I7MGtJOHBFXyx8RUBhO3h0Kyk7Yjtsay5EcEFtViNFREoxPmwsPDIkKXVgTm8oMzE6fX1zeUJ9Ny5qITJ5W3kpNE5IREJeM0pkKkxwejpvUyVAO1Q6UnFqeDB1VT4lbyskbEBPYXh5biQ6dHcobi4qR140Old7UjArRTxBUntVYEdoZDxwKl9HWiFsWFN2XykpKDgpKVBJeWVQJGM/ZnIjWDxh'@;
put 'dk5hSTpbNXE9Sk9de3cra2BgIUc2aTwxOjYxKVZDNT1+R3xEPjQ/P2ZSSypXVjdnXT9heTRNYFJyczZGdUZ2MktNRktXaGJARDRGRVtDVCEuKV5ePyRCMVgzQE9uRSNPPUhBNkFsJUpMRVV+V3I9UjF1YiRPZGhqQ2dsKyhzaFo7OlBPfjNXVXUkQ1Q2Zy9gUFsoWFNoTlImcXViKXJiLEB1Z0xr'@;
put 'ZCxDOiNBYEtjZiw/I19jOTcyKmdYKHR8PiReRkosOCJVVHsuLFBnLGE0Y3RGLzQ0WCQ5VVEoMEV7L0t4L0xnWWpxOnFdcS5gW0wjNVIyPUhafC92eFQ/UDBvZShtL0wlIkspUVhASGhYW3h9blZtZ2x9N0RhSWtCQCYrQl1JQkgwWjdNfFdQbUptNF9ART99NiojaG4+LDo5SyppMywoZlhuZD9i'@;
put 'ZCIqYzJXZlRqRHREPE59RVo3JkpsOUBGcmhdfCg4ZDwudjNodGk7WE0xSWk/MG04NmVtZVJ4KF1TaCI2WH5xMTN+TFQlcTo3STF8UWx1RlkmWi9CPUpkJXt1eTVKLyQhVltUPTdXYUBYOWxCRCUpXXIrV01EfiM2PFk6Tmp1dkkrfFJfUjJ7W25+ZENuRyUud3wocyM3L1ZIZyFFfXYzal1rUkA8'@;
put 'fGtDcWpfS1Yyd1U2JEcuK0p3UX5DMmwrS2R6RWteemp1Y3F3MUpKPz83WXhueGtQM0pGX2FRe3liM2khJUd2QFcwVyYvLHU9SDB+PEZXPD5XVVl+S3R6bywweUtTJDUhdD85WUlfMiM1MiIvVi9nUiRrZFddY3o5Q3IkKkskfik5NzhFdFVuOnBzKEFvL0QlNnJQJXN8KVRCVzthc3VIKTwja0t1'@;
put 'TSlLXzYqOGlPekBsYnl5WzUxOWpea35JT3RPIVFFUTdZPmE/JDxJZiw9Jk0lJX1OTzUjMjhCcWRCdjxQRXRBRntdY3VdTUNYb3A2OjplKy43VH56QjtAVVVqSl5fVE84bHhuOk8iRj55NUJXPndqQHoyVz1NLl5MajhnK0QlZHRiOzZqISp1TG5ZcW07XjlZZGhwfVJsYlZDLkRldT4ken07Q3VZ'@;
put 'WmtbbipjSzx9fkdNOms+L2x2ZEBgOVdqQDB8IjJaODZkZTFqWmpFJkFZWU5dME1HUXEhPC5qdFNiNjZ6QkNTMzFfKHE+VChXXjhtckU2JU41U1FQaWcpd3dTSCo0VFFhcjY3WlFYbU11aSEmLm8kPGJ1IU4xWlVxYmQuMV5LWDJlYF1Te1RiUV1eVygsfFNvSH1Vcjg9LEFNczpaTlZwVjpUJXRZ'@;
put 'cndiW2dzZDw6bV9hezx5WFdUJVJvYE5MJSFmSnQ1a20xekVjT3grdTRdK3V6Q3NXflNLYVQsSl5lNDVhZWM0TCVwPGJxPmROcHE6e1B1Y2Qic2N7fn5ONWJmQzZDa0JWfG8pJDI2Mmk3eE0qKXRBfW82KkdMeFhITSpTfS9CfVN0KS8uZHJxe3EoJUlsVFJ5VTZDX1FCTl48ej5FXWdlOXxjT0Up'@;
put 'IWAoLnlESV5rJV9IN19jVVdufHFpaWdwViJSLDZ5KkIoI2lWenxUcj16VjhMWmcwfU9yb2hxImVPL3Q7NnMidWBncGR9IU1JLlFPcGJLTHBXKWFRQ1p5flAhMUFRW2xsaUJkX1ZwOGM5X3YkJUhHYFh3Rzt5d3EuZUtBRUlMYW1aUXdkX1tSNGd1cSE1NkAzdSU+RmdyLnBIRVV6eEBGQ2g0IXhu'@;
put 'SVBpaFlkP08iXzVCP01ZJCRmbjtpbkUwQWpvKCtxOlpiQUVhTmxtTV5ScH1NYFciPE9UQ15Dai9iemVddEJvKTBUWH16c1FtVXh9ISIuMz5lNnZtWkE/bmVpNUkhRFAsezUuLiIrNTdlUCFDPmU8YW5PIUp7OjBRPSYvMFFyOGlWeD98eE9dcmg5Xn0zYG54Pl4rMHg0SjwzIU5JTHZVXjd1XjhE'@;
put 'P1BoPjR6UVF5QzMlOXhbQmhoUzhRQjpTRzVDIjJ4QlZEcDlpQy43Sl1vLHMhXXU+OyM6XzRNUztsN18sS0J2VTY3aWclLno5aExAPU56UHdENmh2OU9HM0lMcWNKZF1KYDN7M1ZKa2FRfGRFVVFnPk4wTnpvelJOUiFdQjA+dSx7XmJza258dzFIIyp3c1FBQTxtbyJ9YyFnIjNHKHw/IVVlW3p6'@;
put 'Y099anBuY2FgZHk9MlBCVGxiITxCUWJwUGEvV1BzRVFCMl97WmUvZDpNIilee1dVczZaQEoxQFU/LkUwZjBBRFVUUlovJFpmbE8jSmdBWHVWK3YjU0tXcmddY0AsS2Q4OHEuKnlgVSxzaUt3b2kzNCJoOz5XQDM8b35ldl41V14qdEFPYnhvPEQ3S2RNcV46RnM6T0pIZldvdCJScnMiOTc6XXE4'@;
put 'QH4xWjorR2w3LFtIT31sSlVzLyQ4RkBPYkE/Nkp5fWVGdmxVcWxCRX1tfDw9Tzc5YUZ9RXhyS2FpTnVnXUo6MXczcDx7bTQ5dFB2JFJJOEJ9bWBUbCgoZGw6V1l0PFJQIzw8SzthcS8kdjckaTwhcDRJdlBuRVVpb1ZeKGJUJFliNj13USJDRUtOZGMxRDR8P1tBZTMjKkthY1NVJVhoX2JObXhn'@;
put 'd052X2FYRXthNjFIITZPeF5HdW1PJnVqS3VNKmV3SWFhOE43RD4+QD9uKVBGXmkhP2wmdE0yQ1QmSHV1Mjk/dXJJLF8rTC8xeE5hJk1GJHt7M3k2My9zYUxBT2I0c0taajFkRlU8RG1DUVRwUHc8ZVBSa0NON2ZMdCtsU1tKSnMsfFB4RE1kNHMmKG4xYntWPHhnJks4OHtAZHR0WXNbeXxEMVlF'@;
put 'UnlKNkJ4b0RDc09IXVl9M1V4dEdSITkkPzZGUm8jXkNfVClbT2t8X1dtYWQhOE19eXsyb2pYT041MUI1Rl0kaDE5eUM5UHZvc3RqKzVnLHN6SXRLSUQhXjd6bjdnQTlzMTUvNEc6IylFTU9ROXs3aUdnVDQ6KERCQntdeiZyIztYL1d9cldHYzAwVjp4b3J6NT1VQEZ7WDo3USV8dkAvInRadUNa'@;
put 'O2VXJFBtXjpBcURFQDgpZ0pJSlAqKC9lQm5lWSNSK0B7JV5qI25ZMEtCM2ArO3RxOUM1T0JiXmxtNykmYHFrVCo6Ti9UdEs5RkVRcWdHUCl2Rm9CJW1vX0FdcyFXQHF0NC95SyZCRm0pOTZNdlNsZXpNSGxRSHxnMiYjR255MDBUVT9OWHUlU20sPnlbQ2RKNntvWVpfMm0reC9PWV0xdl1mQ29L'@;
put 'M2Y1eFRlPX5XMXU3eF4jUEBua1c6fjAsfH43OzpGQkFiUDx4WD1LamhgJWkzUU5JeH00OyZjMFJqKWNlbUp1d34zTGJUKFAsL0MyIVFheXtHPlFed0JKYiFePj1MIUprcio5L1dWeCJAIjptXVdQcnhQSnBCYlQsLDNSbU1FenpwfFg7a29eQEk2PylweVkvVUxkIz5+Z3ZRfUJwQDsuTGY7JXJz'@;
put 'dS5PL3FofUx6WyoreHRkXkxOQTYrXiJRZldCbSQzJVFDPU4wW1VpVU01JnFGazgoZ1koVDpKfUI2VEh2KmZTUGRoSTFLfEZSWW1KWStxZSJPO3B1SlokeVVmVS93TU5LOCs3eiJjSXYxVlpwSUcmeTBSP3QyTmZaYyQ0Vk5bL0MhbHVCdz48IU0/InJwRGkvX0xvT3tOaTpENE92R2p6biMxODdD'@;
put 'O0lXM2BpQ2lZKWYibF9TNHImRnBZVW0meS57VUw5LDFDdH5DPih9Z2ckKX1HfHFjens8ITpAVDg7eSQrWmpFaCNBYF5iPl1BXTUibFBlP1txeCEwKG1+Y0U2Lm85MDFLZGtiI04zTTE1VzByZkRwayRQJEg7V3lvelNBPiQpXl9GUlJlPjxRM1hAfU10bTZDbVNiVnQuSCRqIzskbCpvPV85aj1X'@;
put 'WGtTM0xocDssP1N9ZCVRZXRsb2lfX2xRN0VNW0FlMz07eT9mNCxBOl1RdUcsZC5bYGcmdX5rYz1EKmFRZzUzY00yIWN3bFghXlI4Z256YFFDUXZJY31qWSFGSCx2V1Q4JldgNTBFUUp3QztIcjUyRyohc2MyXn5uNHs4OnpTZGZ5UTZtS0cxJU96YGYsc2xdW0wmI0BXMm1aeV4kbWh4S2twOEt+'@;
put 'VSRmfEk5aS5oWXFxLlVpPGdbLD5LfnA3VDBUSUcrRnZiYGhAMUY8KT5nXlFpOGY8bkd7Yi47T2I7YnEyfVUsRUpDbkxpPjJhSntDMi4zbVkmZF1pZEdoTn56NkwxZXZ2VktHSiF6Uk83UiMiNG9ecXpDQ0N6JjZISVddSTk4cDVTLzdEZyFdUF5uOyg+UHoqNGh0eTovXWAwYywrbnkmMWsxcH4x'@;
put 'Z0w7a3wvKmQjNVc1e3M1ekxDbGp2KjV2WlZfU0VbYkRDcyxAPkk+elE+O21RMUp+W1k1PnxJUjlKR3JyWHxOVWNUVmViXz5qcE1qaT8lcl9GRDNCU1UkOUdERjErVUxeKC5BT3NCQGdMZSMmLiU3WjY1ZTVqMy9UcF03Y0NENCM+M3YsbmsvWFRkRUVhdDwwR2RAOHtUanw4LHp5TU9PL3A7X0s5'@;
put 'QjkzaHMrKGFjaUR2UTJoNksydj9+IVo5Zk8pdF5KeGpaL0luRyFTWmM1WT0qfG1aK3N1JHB7MmRoZlg0dTJ8NTVITiF1OShnOyYxRTpXVk84TUZXSkk1Nk4zL2R5NjVeTSh4NjpLQmdMampSWS9wPFU1cjc2VylJYEU/RGVRSnxOSXRPMXFEbUc9aDx3NjUzTlE9aSsvaEJCcGkrflRVaUFWbD03'@;
put 'TH40NXQ5VDxCJWRASF9+TiFHUG9Lcz4waFllNFdsRGVYUzslPDxgQzBhOTpLLlFia0szOVl4V2hMLk1me2QzT0YrP3VTZHZqWTcrYjxdYVs/JnQqQVB7Kzx5XTRGcF9jSjNvRW40PSMoSXt2Z35JNERESmApJjN5cW1HJEdSe2tKRm0lMHhneXJCQDNjSjYiWmxSTTEraSNhSmZiVD5BQm4od0o6'@;
put 'KCh8dG91aXl7P24wYVJfPlZLRStNQi9kPWFBdDZyMFFKRHk1TnxOVC5yfUM+SkNNVm0qLEN9aCxsXyNzPz57X3hZVXFAWzpKPV5aIWhoPEJTYyxud0ovVnluSE8jY2tmQkFrW1ErM30lZio+T09lK3c2VVZGTzAhOz8jMlNDbn4lPT1ja0x+SV1ZOld7fD4mMSZaS0JNd2l7V2B2Ij1AYGthZ04i'@;
put 'Ji9PRF5HOUk5cHVneiNlSyg7WWxpbklTRnRPMns5XmczazZpIiN0ZWhFVDBTODQ0LnskRyR1eF1BVEl+cXwlaDB8TjhJY0ZlUnZ5MGsjUzB3NS44LGluIzZALFF8fWtdJEEjNjZuKldaYyVCWjxlZnEiNHRMTEk7elMpQTdhfTNtdkooMClSLDJ+MEU/RE9zOiU9aCk7eUlUZTo6fWM2UVtZJUUp'@;
put 'PEB8R3VuM1RvbChDZ1laS3EmaUwhMls2Ykw5ai5oPmM4KW5LQiN6YCE+Tyw5TiVqQk9+LDYqP1E5P3dmLFchckNze1tMKlgqamNRamBifi40ZFBpJjVRcFJLOGUuYCJCeEYhMCs0aiVOcWt9cmdaIjAvUnYhMlN7bUAvdjUzOl1GI0I9X101eHI6UEorUXJwb2liVlJEJjJxPT9RVnMmR3BdKHRY'@;
put 'XXFTUnhmXj5UcGZtMl59NX5iPzZ5SmcuZEBGZE0la2t0QUhARz84all1fFtRNyt3JkJMcWE7Sj5FP2l5fDcsPT9wKCM/a28oY04/JkVEMTRIaFRrXztyNmdgZGVFOHJ7PHRwJnglaHdbUy86ZnF1PztYcjdBZENdNTYlT1BPfnxBOWx0bGZxW1owLiR9L0o8VkovXmg2cz1WPTJCdyZIP2NCPmhr'@;
put 'biZ1LE13TipwP3p3VXRpYSlQVFpZaSxfZC4sMndfMXFhQ00ocjBUNzdjKztIPmo5aS5jPElGQXQ0KHg8LDxUZSYlMTJGN2I9RDd+RGBZTiYwVEZLNiRkcTd5NHNXI2BdLyZIelMwJjM3Y35hcUtnZXg6UmtTUSU+NnFQbWttQFJfQS83VjNkQklRWXhxbjksN1ZeKzdfKiRlODthWSU2N0p8ZyhI'@;
put 'Wk06dj55bTVRIlVTMWwhWyMoM35OdUN0cClXfTd+aCFsflFaY0MvWW9FS0xFIUNCN3ozVW85U3o2K0IyQUV8NyIsUUBrTCsleVdWL1svRGtQLERZJGp2OiQiZnV1QSYzZmZUISYhdTJFTUt6YCo5bnt7dkB4QCM3bl9CfGFQe29kSmglQT9IKVAqV3hhdiNbQl9zV2wkOnYlSE1jVntuMXxpLk1E'@;
put 'fTVgPTh5REw7RG9pM3ozRDErMEZtT1tXVTlAW1hwNypOKHlmSV98TnNkPy90Vk1OVGpyPGRvLktUeSQ2TWJfWEc8dSloIXYsQzApYlh5PWd7MUlHYzF5fnVyM1NHYHB6L2VGM3d1bGc0TzN+b2xKL21TMFF5d15RdVs+Wl45fU4rM3lOKmw0XVBEPWwsc3dBWFguQ0dFK3NmVFpfYTpDIy91YUQ2'@;
put 'QVtvIk9EY31mczpET240OVokYHhlcjZreWdfRiF8NFBgL3hjdDQvb3pfPlJ7LlVCIWM4T2h2ZzdRLz5MSnpnLmhEdSZie3h6WnBpLjNkcFNJN1l6LHBBKjV4P3JESkx1UWNQR1tMPjxyOmljKT5oQj1UN0ZJLztKQWl1aTV0Wz16KDkkZTJKel1GL3UqSXp0LDt4ZGJ3SWBFelB7WUl7LFdpQDhx'@;
put 'YnY6dCg5akdmUFZTazhOYk5POFYrPHhUUV1UOHc9bGU3MltTVGpvKkFOVn1CWU0kX2R4MXlKVX1mPDtVTV44cl1HPWl8IVJCYm4qJDVLTGtLeDA0KGh8emM6Y1dpcWVZb2R7fGVacDpWJUVfVCJkMDpKLjE3e2sobEBmMzVqSDlbeDgmJTFoVE94LE8wUVgrIXV5TktLPyRdR202Oj1YMCVqWCt5'@;
put 'YEBRbl5gdUQ4ITkuNEhVbnt4QiNbazhpMntIS1hoNXtKZVtbYyk0cTtOfVtFTnlCdHFaT1hZdX41QkFAYE8reyx2TjpGVGtkQEUsUChxJilgNTJVYjlXVXh9Q14iQ2RQRnlJZkpCKmlnQkNXJSlSWlVgME9RNllleFRocTcjNjE7QmlrcGlqfkVkTjU9WU5dampvM1FNZUBscFtfbU1COm4sV2FC'@;
put 'fnR2blNSKGY6NmtXQ1E9SGREeXwjPzp3KUEiSmwsNSVpSTU3cD82X3RGdWxFNGgyZlR+M1M2L2t0My9uZCskUEBBN2o4Y1RiVXomZDd5RXY4eGNqR0xuO20lRVNDcjxOWDVgKWVUM353UUo5c1FneyNRd3VpW29WdCUhbjpaL0pGUDZybFlqRyhVXTpES3dfQX1sQDQkan5SUnZIQXE3Kz8+S19M'@;
put 'bUdYeChUYztQdGFlMEQ6Ti5bKFp7VTJKYnd2djo2WSklO1kwMTFpZ2ZEen1LamN+OSxTMVA+Z3xHUyZ8WkJEcy80WjxkR2xsbk42cn5MK0lNemhzLmsqZkd0dCY0S2sjfEtnKHxdLFcocG8oSlFdbSZbVEUyZG4kOz5yeTdwY0J4Mnlmd1V2Ynd1bVtjW2BrTEYhWlN5akQlJm5sSF5uPDJMcklg'@;
put 'PHZ0ZVhTIX5DQ0tocS5XeFVgcCR1S01gL0pjdFIpW29rVjpuJVssIndZQyNyRiNmaChpPCQ9IkxNP3N3NDBEW1QhKCMoPDRJTV4pYkM/b0tedE02ezQ4Xko1UXtEKVMpd28qOSpxUjRqbml4bk5Bb1YzaHBua0hpfXFdRUpyVjI0WHYmOzB8azVbUjlAfCUpbFN1OTR2LnptO2k8LGIuMmt8Mn52'@;
put 'OHJQNjBQJFMzXWBaLHd4VDxWYmJmMjhJdWAoOyJBY0kyT1MsS1c0a1JFby9NPGJnImx7eFFRcyZrR1BHRjcvL0hxJSEjOW5QdWckXT0jTCNWezIxeGt2bVdzYEZNSXFnL3lYS2xucjkxPjQ1YzpKXlcuczMkJW1AUCNrX0hzfHt9W3NtNEBlTkVfRjJ9clJgVV4pKC4hMjpQJnpmRnZBY0J8NDM8'@;
put 'W19YTzgwWG5aMl9meV9MVXRyQV0pUVYmaylWQjozSX1mZC93JEkvITdlSE1Jd1YjSVtzdiV1QFYqMnJLZCNJZCt2MkdZcmNfbk02K0k9PDcvVlVgRlA4ZWlfQCFSIj5gZEM2PGZ3Y356a2FeW3lnLC8qUW9VNUxnTXojZnQkN3JYQnhhaV9GNyhMb3drR3E0eCNqcFZgWGwhSH4jaWwuVE5oY0Bs'@;
put 'W2NrNWhxXXJ2fiE3P2doJmIldGVeKitldz0rXSQ5cCJ4Tm82WDxFNmRTRHwlVl4kWVptKix9Rl9SOyp6RmJlMXVGc3pycWlLW2R+SHFZY2VLPSh9OVpNfHNRYFRDVD0vWDdSP2Z+P1tNfElNLk1DNDFEXk5WXz0xJG9xejVDdHtfdSZCOG9mdU9ffj9uezd6L2pja0lKOkhwd3JQb01CY14jN2E9'@;
put 'Skx2JHJiNn43N3E8JEJuX18ocnc1Jnw0WFdDNjEmLFJ3QSxBO0tkTiNrMEt5alZKLE4pLnEiYHhZWGowLCIiPn1nRV1FcV9eQ1AvUFVNb1EuWVM8NXNiZS9eJih5ISowUURYfUo7dVEvcCRnQlllOGZoNE9+M3R7YVckakh+VkxUbWlfUFttRygxXURoTHs+QGxqOiEuW15NZ3RbcltUNWFZZThL'@;
put 'RV5kJmBbKDoyRkA7W356JXZ4UDZqWDtdY3kwKyg/PHZnY3AxZDtxZ19xOXNgZG99SjF6ZTcpUDpxblFoP0B8TixxeWEuTT1MUntdLmsiPzdWe1QlOnlkOzFnQFVWaW0rcTo/e3ghWW4vYmJdaUsmOV1iNFhbUSxhRzBEZDBZPypuMlNAcj5IayJBdnhVSyppaHh6RFAsKDZeYTRmekppTUgpIW9w'@;
put 'fiZ1Z0lmdVpvSk5YYXBqPi55WDA1WjRvQ2J6b2g0RXVCRH5zZHlsbDB3RHhxQnM4JkR6NTd9bGRjTUh4W1NCRWkrJnlpPVVudGM4TF81MUVWJm92RnR1OVEvITNENS5wJk5DK3xMNTEpUiosfi56VWp8P1I0X2BWcFpre2wyVmVdT0JIMHw/R0s+Ym92PEtZKmcqLE07aCtNV24vMU5tYHx+LHtl'@;
put 'Ti4iKldpYiV2JGtPJFtlWHldQFo+QzYsWH5nfm9sRyFbTFAoOCZ4NTIzNDdrZVAxfXhiIWF4Z3R7LztuMiVUfl1ARjwmcW1wW150cCJeVXBXRnV2SlV6U1I8VnBWeSomXiZWUiwqOWN+aHkxImk7d3QqMztMfTF7YF5LOThDSFRKZU5CQEQ6Ql99WENaKXV2R1tWMCxVKnt4aV9gSypqKFhKeVNp'@;
put 'Yl4qeDpzaUpuSjlxYGBwOlttZUhLdWk9M0NnVzpkYlhRSzBNL15GbHlkIUpKRFkmLkg3WCkiVTtQIWJBMTpoWWBRNTcxZk1zW2RINSxPR2VZODhjI08wZEtbT104IiJscHkmYWUib1peUismMkNPb3tSdk17Zll1ITgkKTVjRShCRCY8blY3JCp6WWVvUihZMDFLblMubzJoVGAjXW4mLkQuQ3B+'@;
put 'b0pmS1FCT1gjYzJ+dnR3SmlyZTJYVEw7eVRpemx9bVZNVS91cGhhPDxYPEdiKlZUITNJYDJZYG00cShkUixFWUM8dEhYITtlYEN2bDBsdEVBI2wsbmxUOy9MIk4jckI7JXNIezUqMX5FUmo/UXsmRmtbZGFOK3VHaC84YilNZztuMWk4dGlzc0YmKyVYLzlbeD9UTDEsKltJYzpOYlJsbjpMI1pM'@;
put 'YV0/PCFsO1pEVUhIZ3tRaE0+MDdKImVweypSOWQ9OXQySWddaWY+flkhMTVzXltJJjY9cDRlTF4qbz18Mn5AKmFQWC5KMClGbG4qKFgxa05sN2U/V09qK3AsKTFpNmZsfUVDP3RLUm1bTSZNcSpRdTtrWiRFIm56e2xFZmBxYGl9NSxBVUp1UUlUL0NPfTprT0pQPFUjSGYlKmY7Nltva3EmfGVO'@;
put 'L1JyLD8qZ0xdbXtwWTkoMHB9eFNOYFhVRUlwaXw4K1VEfGE6RT85NmhAaVhnX147Qj51OSpaJihkNnJEcU0mIlBfUUpGe2FSP2VGP1NRZyZwZCRmZSoyKXFdbk9SYUoyMHtHNklpJWBKJj91PSppY1RpYyswWGhYVEVEUDp1d1sjUVE1aCg/TlV4bUUjTGwxUGByZUk7X2lTPkkzZC93LiUodE1V'@;
put 'amBuW1IkM2ZVRzMwJmlxWlhvKEYqI0dxYnYvQTw6c2VhNGIwPWNle0kiVFp8eD4vcT9+aS9oKHd0bHgicEcuX20pb3ZKIVMxMDZqQl85KHN+bz4xT2tJbWxEdjVOb31RL3ZiYzcuKlVsbml1RilvYj8hRSM5aXVYTiM5JlJzVG1ObSxNKE4rKnkxOHRdTXFDZ2IlKUNxQ3crJWh4KiVpRTtHeiRC'@;
put 'c0w5ckA7c0AvS25KYEpyQWZ+QF5oajUjdSlmSGl0eURxMF4xb3NaZH1gcmE4JUluLj0xZTo2RzVJPH5KNiEofk5nKkg9M3ReXnl0VD8jMmgyUnR4bX5TYUlRKl9WUWpfMCNIIXtuLEBgVTZ0MEFOdGREI0xbX0I5JUVMTn1Ycy8wcmJbbkpIY35WcEpFWEg9b3slZ2ZMYys/VXhjQmdUa08+JHhj'@;
put 'ZlRjdmUmVGIqUSR4SGdAXzlST3F9KGguOD5WQFdAL0JzPGA4JEVQSzIqUi5IcCRvdl0sOzF8dDM9flV2fWJPQV0+UVs/YGNCNyF1NXQqZGZrJnImc1pWKU1fb0NAM3hDcE9jVkcuSndPN3lvcyxORnVfbGUvJEk9ZCluZCF5OTQqbWFpNX1DKUxFMWtpc05hfmppM30lbz9mN1lsJTMqRnRkKjNQ'@;
put 'WHFyYCYwN2Y/KWtEOX5fb0hgOVFjOWU1ImJ0YTQ+eXtUdG5PRUVCZEc9cllwTiF+P0dJZilEPzcsXVdlcG89JkZCYkkiPVs9NTsrT2BSRVJBWWMsV3FDJDtpRkl5KmdgajtwKih2QSlrUElsSWM4YXM8ezEuSSJISEU3dnNZaztlajF0Kj0rMmFnSDslU08yOzsmOysjJGE5LFo5LFMsOEFNRmUu'@;
put 'ZD5eOX5lLnMrKTlVUlA+Vm9HfmRFelFsNkBNc31qR3FpRzFpNHxPKWBefX05Nj8mb1FvOy9fd2QyL09JInNkNnFdLEtiJDk4dEMhcW0uYXBaY35LJUImM15uUyFZYXEoRStnVWMrRkEuPFVnQT5JIk4iZVZ0Im5dOlNFd24mbmsqO0dNSGJwPWg4OFosJjZlRyEle0p8RTBqe0xlQnZpaHA9WWol'@;
put 'bj8hcyZHOl59ITJFQSNpMHQ5LjErMUwkbUBgI285OXNSSFluZVMhIkNjWkx3dWohIjooVVRYRHpBanw4OW5JNX06KE8zdGBGN1g3fEpCXUwsWndkNVtTUHVWOjVCRX5hUzFvQmhwbGM5Ml5+bypRWWx7Yk0ubXV5cmF2SD1USX0wJUhHP2BsNE17RWFBbkROS0hQbjEyK24ubTtbMnlTPm9qYTY2'@;
put 'UlNmZ0w6PSVzaT9YXWo2eFBXT1U1T1QxeiUvZ0UjTilOInt1e1NNYFRFSEZeOElLPDlkKz4yXisrd2pjKCg3Sy97KyEhU1YhOnlqNDE4elgzZUtFRkN3P1VzW2pNb1U2NFVgQkNFbSR+Q2EueDFvWWl7XlklcVFuXWVFSTx8c2VyTEkhS1tVWUF1QCNEU2R7OV5lYUpXfWAmWmR2MUxEMSp7d1Z9'@;
put 'UWg3Q28hKCxwV29gcUwseD88aVlZVnpuWmF2WWhOaiteVW46RjtpVUdOQyZOKFJmSF5vWTFPSUd8RmEibmlRVndWRWNdSDZuYWprXmBVd1NabzhtJn5aJjNAZ2B1dys6VlRWVzxRNUNKTlB8SFdhM1dELmFqYD1FWDBKIShsMzpWdykvbFVeIylbJkklKCklZERXcylgS3c3IW1aeVdZKk5OTVJA'@;
put 'dzNvTGoqPi44VSl0fkBqXzNYNWpFX3FzJHNvQk8+eHZydGVpZXRUJFI8L3JRVjFyNFZnOjx+dShXZlVhJUwuJnxaKk5wPklnIV8lTGdKVWpkZTNGOGFidXdWT08lclFzM3pOe1Q9aHpfdCswaCQ3cERoVCFISHpQPCRBMyxBO15QbXxiJC9EckUrRz9ELEY7aX1tYnhgS3F5XWpwMi5qe2xDWlM1'@;
put 'eUF+P15kcVsrel1VMGtXL1hISHFnaSk2KlFRdyg6YX1aN0VgcjREalUlMjVeLnVRfE4+aS5JbXtCMktTYFhhQGJeemVYS049I11bVV8jTi8uUFdeSGhvZn0lTTtENXxman13NFtzJjlWVHdfezJ1XUlFYGcvKlBqLChzc3ZjTUlwbEo+QGFGRmEsVEt9Uk9+Z2dtdHpHRFNEOyNja2x4MWx6KSMw'@;
put 'XnUwcEwvW2VhZ2JiSCohYC52UCFoeF1UTER8bSRwPlRlIjgwQ1pjZXZiPXssNS87XW1aej5HZF0pfFhaRlJ3N3N7T2sjOGlyd3dQZWN2YkloMFR+Onx1KWJAbGV6bTQhSUgvKDdkKCl8Ok8mVzZQJWRuP09NVDdbL3RjcnIlM0tbPSE+I0cyK0ZLYypwQnNnV0lEaDdoTipWS0RydGxDQ3g2Oyg7'@;
put 'ay97RihhSDNBQlE2NDFrR1Z4IWhXRF1QS2I7LnhYMyNmLExrL1NATCt7LEhxWTw4Kzw7cWRaR0Eoc3RSbz9IJlQyfHlEU2cvWV1zZkhqNjFPZF5nMn5nWUt0e2FzVS82fnkuQTxVQmM6TDEzYT54JDprcDNhNlFFUlJBNDE5Uy9uTl1hTCpKNThMJFI5Tnl5N3xxWU5kIWFbdDQjbFAlVE9rIjQ5'@;
put 'ZDU7cFkxRXIlXSp8N3BIMSxrfnhZQksuS3hQdG52KnNwYkVFSVQ1O1RIMl83SCF2d2g1YjBdZUdpakgxLCMjPzE3VUEoI0x9U101NnUwe2EkQGlxOSJ2NEckLHRgMj1LMSFNZUxKcFNOTj17YDpaW3hoZXB7cytPRE10PyghaUk7YSxZYzFBdFZtWXlIZGtzQnlYNlhPRkdKVmsqdztKRFQzSCVN'@;
put 'Y05mX1VYcGZyYF55JXA4LiRmPEBrcmpiU19YJHhHSio0dVFgdGQzalY9THFAbU9SZEd0aD9fZ0gqWUo6UjRyIjJmJW4xMVdaZ3h8XzRUKmdRWjBAX0J7U3VObzVqSl5LUmIoMXFjI3E3dEZ3Om5YcVBXT35NbUUmb2FqejFYNmtLLjBxLDElJTMze2p5djh5M1FaKXQuR3RqMytuOjQiZ3RBaG5E'@;
put 'KDAsaVFjTmwxQWwsWTExPkArZGUhcE9CbnwxWjh0NipvWCJ6ISNiVEk+MSlgQCU9Wn4pSSVWYmlXe2MuakooV2I0MEVhOF9hLE4oMCp7Rllzal8yUzhDPlEmSX1jX15AXk5iRl1uQ08uJUxYPzVTSVEpe3hMNjswLGhZfGxwbENvUzZxPiVzTi45cyk9ey5iPCV2SFJqSmxmQmdTeSt8TnBmaTJp'@;
put 'OkdHfGQmRzEoLilJKGs2XiNgLkRJQD5uN1BLazxgZSNAQyg8SUpYVCJnYTNfSClAcDl6a1pRTD9wfD13d2hlNWsjVEI6UUxTaHBZJGNyXyw4LnxaJHc2bmNbbCFLNnI6cGdqTzQ/dEc2UmkhYittaSxQdEliU3lLI1hfRXk3ekEwWHM7cFZXbUFXY3t+VT5oYzN+Vi5mUyhEOEQmb04oJjNsZSNo'@;
put 'SFd1VGhoZyozV0k1KjgwP3tgVmtwOUgqWHQobVQkQj0xMDY9YVpLfHhIYkNZbnRWbHxKdDZCfHM8OGRCc2JtSnBXRS5XdGd8NDJ+czomeDlnXlFWZ1R0QE1SSF9dIWtOI0xjKE0sPDlnd1MkZDsrUnFjKGddQzlGWCxXbW4/bjg2Z34hXlB7P0NoK2tJVVdKJClRPkZKcXRidEhMaElELksqQGE/'@;
put 'Y2k4TlheRzVTQ1hvYElQITVCPGJvJm9iejBqMUM6W2JRaGV8TXQsRW5dS0R2cSxyMU5mU3gwZWlSeW5abFJiczRSPW4uM25YYEpNNyI0bHtqaUs+Yn1Md0ApW2kqW15ZSCZRKntJOWQ7VlFZfmFLeUg6dWp2Yz9KLil2RU9+Mjx3TGVGTjFxYl1AYj9xckReSzNLJm1yYUU/ZH1ZNyxULDswfiRK'@;
put 'Ol89QV9OKlt7KzBEPnxDNUxTOUc0Q2UlVFIocERdakYhQmtiPTFmVSYhTWtxMjErZit7eW9mMWh8fV5zaD4mUGd1KUg3eFRgV3RzMUxtN19FY1cvciNJX2FGYHciPmhBfXQ4aSx3M1s6cm16fDdkXixxJGkpYn10SUJtOSg6NXt2MnxOREJDXz1TRGwrd3x2Y0hNbWIpXiNscD1BLkRgPFdQaiNS'@;
put 'U1VGPTBiYWFbdEomMilfNGA7MnNDak4sdGRxOkt0RXROJDNVb21KRnV5djxGR3JQSVd+NGwmbUc+fTNuVUc/ezd4Kj8mRyIke01+cDFkc3RocGZsJUVzZkx4L2tQeXIoX3UuPjBKIzBReV0mdntkVzhyZkFhbEo9O3lwfj1rUi4+OyUlNnp4bVh7aVMmQmliO0lPYz9mOXJWLFdUVTBvdEV6Mzdl'@;
put 'KF9uK3J6TGFMVDtbXWxXJDQzMC8rIykkczEzenVGMVdGekNHZSFaKjgjbikiMGpfWlIhTWMwRz03R2IuKFYsJC9pZ2NzPlFARjQ9W0JGXnskK0plOmdJKEo3ZVpvZE9PfSolLG9bdHxjUUZUblAvSUBvaE1ONlpWbFcwTiUlMnVgJSQ2MmRlWEZEL1IuQVVaNGlTZmNffmJFJTFBPWwpJTRQa2x3'@;
put 'V0oiOU1CcC9LJmJeQipuOWtmbUBwc3crRFNTWTVecU8rcVE2PHZQRStYTipFNURmblU8KDhdLF5GWEc3d3kjdFJHNCEjQkUuczxOTiEmKk5na00mJmFOKHBPNSZIKm8jL1RjbEJGTkJWWDl3e1NqREF1RExsO1hdfDBicm9KL3JyK1Q/Ujd6b1hSJDIsNEkoXWV5O0p7dmp3N1pIKyZeQSshMFR3'@;
put 'NUFtYHVXdzdQdl1bTHB9UExMPWJyOjMpbSIlY3NneUNIKyttQy47dVBnJER9eVowdWhLYjgmIWJfY1FkI1RWdFFyJlZ5QThzKl5kdzsqNioqbWY0LjF2L2dgKXRgQ1E0LFhYRV9hUU9oU2wvMWZ5VDtdI2UvbEVrRyRDLHkpSSp7NDZ7cUZvKFBBbmsiNns+PCtOa25SXigxPjMva1YxU2VpOlhr'@;
put 'RXExZSpDNkxQWXcobERMOD15Yn00STspZnQ6aCJCbUcyT3ZBbVJORCZwOkYpbUlEWTNoZypoJj9kP240aC5odElmfURyQ0k3NllCZCJxYFFHRyJLV3JrZl4kfiFnR0ImU1J4ZlFhXW53L0E8VndhUWkhV2l0WTBmT0szSngjOGZDTXZFQjp4N01bSzhZZjNhJHh1Snt7W35FdlZmN3RxQT9AJDBO'@;
put 'VmJpdk1UfnJGXXp4Nj4wVns4KEQufXVAcmpucm1ibE90dnM+YWw0NXYyU05DalFtUmRmYXdkZG5ifjwqcSR+IS5tbnMrWWN6XlEvXj9VRnhXLz1WdnVPP3RtaU9CaGNILHdoPThJXmJCdi94P3xxPX49T3R1YD5mTmdZPj5hX3czYWB3dGEueDhAZCk/V09yKExSKiNfJUV8ZkF6bT0sV0ReTG5C'@;
put 'OCk/fTNMeF9MdllVazIib34rV1FCXi9wRjouJDo5TEMxfEVOOUx7UUIjXm5HcHhMc2MhKU1pZzVCYlBnRzU0diwseEVodlRfXmhINmZIUXY2ezRFN3FFcEx1cVo3cFk2WjJIXypVZkE1bU1zPTBvfStMU3QzWzpAKVMuKXVFZzwkd2M7KFBfVWxGWnh2Jl9fX0h0O1NIM18zXTZDUSheUnAkKSZ9'@;
put 'OjB6dEF8PzpyJCpdfUQhIkg6Qik1UzZeLCJxUFV+eyExSXRJb0c0UyNaUXsoOTBpRX0zb0FGRSg1MDpCe2YlUFYrVnheLiEoLElWIVdkcD9+eWNLKmNnPi5Iam1+dUghLzJEX3IlKCRwIzBPJX5bVi54SXJdZ1g3ZS9mOl5aQ35pdmc9WS9QJkZFaHdDQypQOGtVYTtoPTE1e3lNRXAxVkVORFBU'@;
put 'VEg/Pz1DflRXY3paUDV8KFhwKEtePzZ4c1Z8UkomVWlQdFtERFcuTVc7XWl9eH1ieiUudFFxV1Z3I2lWSz9HK0s3ZT92S2I3NzhmPVc4SzRgfEA7MWlNKiRNKGtVaWB6fl9FWDUuaGFXLns/ISxiRzooTVh4ZVsoTyJdRENCM2ZjIWgvQEBXWk5KN1lVMjxbWjIuQV1DLzZ0QDNkYTt1K3RKaTZ8'@;
put 'UGcmdkh0WisoazBKTShQYUMuMXddOW80aEEkd34lMFkjZH1QJVFlcEo1X3FSRk9QcyFwVSt4Wjk2Pk41OyJqemhuM0RmQn19X0heMlVkPF9EcEoiQG93K2t1XUl5M3cjRyMlRHo8IWMhLHV6X2Q0ayYvJDFbN0RVfl5san59fCVZSHpXb29bZUNYeWVMdVJ6XWlbfTNrUyFpOmUzMnguRjlwMDtN'@;
put 'QjxXLn5BRntOcXhCZUVKcVNmIXc1V1dpeW9HcTImKk9CUFAoJjdwI31OMzQvT0tIRE18OVVdfGohanAmeyE1cHVCXSNue3t1TUF2RVsuaSNFLnBCQzA/UmgrcVtVa209a005OGNZMyFWbGdgW2pkWi5QIXxFfXlfVWhIKihYT1Yidj90X0Vnb19CIm9sWTkrTHtDa15vfX17MElnXWEiMjZCNlUr'@;
put 'LCQpPyFHPmN5MGVxRGlXTUdZRzQ3OFF7bFVIOykpXTcraV18PCJsPyhHXVQvNDdIV0B1S01lYCt5OHtwckYzJHwqOm86WzQ0WjA4bE1FcGxDLm8+eDZkRDI5VW8vbilgfUc5UyMjZmtvc2ZESiJnPkw0JU5CPj1WYlE9ejYxbFM1Ik1iekR1cVRTK3V7VFs5Jl46R2AxQj5odXxKdz5JS0p2ITdX'@;
put 'cG1LVmhCWFQmRmAiVHVjSVV0QHZTbWhQPVIrZV5bfHBye08wRzlld0puYjh6UEBwIjE1MnE+bjNHLFZ+MlluaDZROTJhV29aSHQieXdtPDQ9MjUhOjN4MXJEfERNbGhKQnklUVBeNlokOV9aIz9LLkt5fURWPlF0TWZsMihbSHZOcWgjejJxWDw9dTJ5VH5ra315dn08dF1Jek1tOXNmRTJ6XmJg'@;
put 'TUsoTHchZCU9LDUxTkZaTlZIUC5BIVcseE4ifllnSiZgZ34zLnVvSnNIfSppPD9oQk8/aylTKEVYRispNjNXRlImfUFTKihsQUB3fiJ3fjJiUTtSR2glInAlYUNudD5PalUjRz98Z1NrV2h8PFFvQ3hLMTJHaDckRlNaQl8odSwoZztObT4iYnp5X1pVKj98JjhqdC80YVBkQCteRnV3IkM4VDEp'@;
put 'ZCZzaSlbKndTJXdQUy40QCsrTFhKJUYoXmcme1NVO1BqYzxrXlV6JFZUYVBtTzRBIXl8NzN2Nkt4Y3F7PkhAPklNRUZGRzdJbjZGTzlCbCk5IVdYL3E7WFsqUVA1cSlGX1M3UFclKDY5eGs4bn1CLGIkM3ZZb1JaKExlWXRBNm89P3VDKEVIWDZFTjpxJWE6d0trIjQ4ZjkhTEReTVEpPXNPRWlI'@;
put 'biVvfDk8dDtrTllkVXZNXn1zRi5hfkcpNG9FPypPS10ldTs0STc4R3JzOTxGJjNOdz42SEdZa2RgSENiSjZ7b012TCFJQnFvZ3pWUFlFWlEiIX5QZDgvQFlWUCY5Wm1nMkp9XXpEe2o2clZ7VCxjRnU9SEdNe2VeWU05W3IoKVRaPTE0ciRUcnolbCFYS2lHJEc3IyMueXghPnR0WW01MkYmVzhV'@;
put 'XXZ7fillfHt6XkNoPzw8VHExMHIlR0pYXzBuSjNEK1A5e2prPSF4aHVbIklzWnR1Rkpne0V2fX0xcC9XT3pUUndUKClUJV1DTjNgSlRFWjRDQ0YsaXV4RHIyP0hzdzEmWyZZe2lEfiNdXzZsQWtIY14lflo9LH1IXkxCcV9mO3B6UyxNRUxzJSYjK0tfO310LzYjLmVyX2ZeRz5lXTZVR0ImZGZP'@;
put 'e314SnI1PCR8QSk2TDtdXSNhRVVxL1hNTy9WRSp5cH5tIV5zXyxIXz1iVEVyUWd0dkttMjU3TXBqY1o3VGgmaklGcHBucFpyYig/USFwP2FyW24oV0JyT0suQGV3eFQ3YjZrc1B3bkZaIVE7IyxqJX0iZlNFYkxzLn5PdSNxOSNpUTJBXUAsMyI3PlMvMnVVSmdjTTp9fk9HYVh7LkB4PCZLd1BP'@;
put 'SmBgWn0kYCUmcGZ5RTR3SjQuITd2Yi9LeDwqVVZyJkVkZS9IbylHJDsmREZfMiNoVHIvaCNTXVIkOEleOkpvPD5nKXBqJjZRNTxNQGFAZWUydUh7UlRpMyNlJmY7KmRoeGdFJTMuXVV3PnEzPiNka19daVQ0YitZRFIyaV8seztZOUxsZGEhYTFNN0hfOyEjP1Y0NTxtXzdZWEt5Tn5MRkxUWz9l'@;
put 'V1FEWil4ekglQEdDZSVGMzhGYChMZ306W3BrN0gwKntPVyFlUWlZQkpNU3M0V1p5Sk5xbnp0MUB+fXY+d25AU0ovPWYyfSVgOnx2JV01dytwU0BmTEVLdzI6ZHpWRj99JEcjNmZiPENhe2FCfjh6fF09QFthNV5NOWp2dj1LMWFjSmtEREdqZD49Kik8flNRfjdCfWpyVk5FW0JFRVNxKXM7PFpg'@;
put 'VC5ZRihALjZyP1hPY0k8KGhoKG52UkouQGVPTz1QSUh8KGh5a1ZyKlM6JmlBR1phO2pzZCNwUTwuaSksU24zZlgsUXc3TSswT0RnUCMzPkd8IzcoflRmTGBZZlppb0ZkSGFCTnIjKnQ8I3RWXSU+NGl8aUBiTHkvUnE+MEhZbDlRW0E9ajlpLiRAYmRBfkc1cl50cFIoQmNtNzh2STwwWnlePVgj'@;
put 'ZlVQUj1pPWYkeml1ZTxabXhTLihaRzA+O2dNRU5ybkowQXlIW14sekhQNyY+cklbJT0ia0Z3WmtSYmVyOlltfSVESn5BcCMvejsjImtPNVNPWnE7OCFHMFQyZDVSeWFGbj1+OFJ7LjJbYDV2NC5NQ0R9b1B0MlgzSFtIcW50XTpWO2AwK3h5QWZ2JUdhaEVUY2xAIXBGfFRtZjxMR2wkbiF9Xipp'@;
put 'OWp5TkdiPVRadG9dRnpgcGwuJDZZdWl7cGkkVn1SL1pbcHFiQ2crVlZidDtvKEF6NjciNFFUKT5MJGYoUncyMCQzVHRyKWtpRkBse2NZRFdFOEY2aEBCXlI1fVpOdDxGIjg7OFJES1tmO2BqTEx6NUMud0daYGI+XlRHbW03a3FXfnV4d2FEeFcreUN8RyVNJmU8XXBVJkJEQml8fGY/Rnx2KkA2'@;
put 'ZENAfkwuJXpuUGwuVDVVWzFsJTNTKmR3ZndROVVwSE43Xi9eQEUqMVJpSj1wIWg+PURJKEx1cjUicyFpbGEiV2RaNmZlK1NJZHUjdmpwRkMxY3prZWl1a150SjdhVSlBbl1OZFMzYlAkP2JkfU5RXXljVWM2c05ENFFYRDw+cjEhe1k6OXckcHglS2FmSj89X25oLitWWyp0VXIoZispTzR7RTxB'@;
put 'bjFOW1c5enFSc2BqU041aTROJWNkMSskOn5scDQrIkRSeVk0VihnPnZ9NU02XjcrODowYzkrY0hwK3xydHt7JiZdVTIsYCxBNGglamwiaihdaF9AYkxtdWM6TDxzLyZzdkhgUThuJUVENWtjZ30uWGp4S2JKZiY9SUVCZWpERT99NHs/UkJKZXVrNV5NMDplfWpJMlV4Mlk3LFYxbyFtViN+YH4o'@;
put 'KWFDXn5Ze1dCK0B8anRFcmYvVjpiODFVflhTc3NrNig9cVE6aW5za1FMd2Q3VkwpKjdmPSN6RyM+dE9nOnJ+c3I2OChuYC46VSJTWSM9STNSaXpnMDROezBqdio+NUZdSzBPPkZNeW5tLiFfIXMoekQpd0lUYH4/QnBTT0x8MzJxdF8+MU1jNm43QEE3UHpoKExLVUxKKV43TFZXY3RDcltTWCFI'@;
put 'RTBuKW1JQ1t1MVRDRm1dcDd9YyNxeihsYHcsUlljbltTTSJtPVhnU0B6Wk5zVVkwUXJBSSo+SVhRaC58SkNmcE4jTGwiS0JSX25ocEo8OzlqQFEqPV06fEVNX3VhUTwsbUJZTixQLkJ9bWI+OHpJb0h1WDNsITV1KEZTP1J7PEV8Y04uU2BKKVZYZDlgQSQ8TitKU0ElQXhvZHE1L1VvJmdQSzZ9'@;
put 'KSZOTUV8ZkJhNmhOMHZnVWtLYiNeTFc5WzBNd1U5UT97YylRPlBTRy89PmpaQEpMcD02InFvLDxhV2ZxYCYwVDUxdiM9JGpFRWJdb0R8bzBTZjRXS293Q1MsTkJrK1MwZDVrR1t1dFtLNjl5JiljWX4/cEE4RWJsNTRQVVE8XiwsW2hlR0pLXUpsTHBIeF0+UGd9eWtXalN0aCNbeF1TO0h7UVJS'@;
put 'P1BpRzdtLigub0U/P0k8MmcvS15UODxsPD8mT3h0LkNoUC9jbjdJIzd9YU57fiMvMj9MMExeWVFVMHgvQm9QbHhCSjV3YSJZcUlIdjRaaCEuYHJTXU0uXy97cGAsK3h8LnwrI3VRek8kN1lyX21+dD9JdHRJVD0/TS5bQDosbG9AXnFgQ3l4Q34qdzhmOGt+Vjt0JmdFOWwpaiQpY3p6REdhYGd6'@;
put 'XSI8KkMhdSkzdkchUSZrbEA4WTxXRXdEe08kXT5STV8kbXUhbThpPn1Sc1Aob212XW5XcFZweGNIU3EjQWxFYXJgfDxNRjhQe217ZFR8NUB1Q0hvY2xNaHE6KlJGcjgpcEVVLiRBXzxwZ10xKT9HLGM6VEltQGFbbGthRndEUGpYbXshKTomYCMoVEhpN31IVjA/IXBORSh6S2YiZ1tYL3JobmVC'@;
put 'PCFKazF0VUliKHViPWhLNVFQQGA6Z0xGeWZHbmdIVG5WSV5aRmdBXyN2I3ZFIy8wYW8oYiVgd1tEMCtlaXNXM3NxUCEmXWNuIUs4VHk+Lko4JnxfV00wV2M7QnBBL2FWTiplS3IwKmt7Uk5oRVZRTiFNVDVreWl6VVAzNjhXYy9CNmtvSSMiI25uczRBKmNhbnVOMip0flRsPkYuRmkmbXlaeTM3'@;
put 'b2t1XkBlMTJ+ZXZVQHQ2LHI3fHw0cURZS1Rhb2JiZnlGU3I5JjZWMCZ4fS9tQVg1eGp6fCFxUTpYQ19YdnFrWmVfWEJlKiQiKX55UGpjJlNfLzY3fn0zdjhbTlRNaSUlIUckOS98dyRLMnE1YWNmKGNTKXNGSnwob3tgSVMyVnNedkFpPW5wTj1AL1FfPm5lfWhlZHI3TGpQZm9STGFFYjZ0R3lE'@;
put 'TE4pbVlwNGddZHhva0U2ajlCZkNoQy9QXyhqVUZpLjZfNnUpXTUoN1R7WH5TUzpUbiFoOXdNT2N4UDNSJk01LnZLUEtANSFNZTM5cXVpSEM3OFd1T3sjL09UZSwzQ1h5M1IwMn1Ce30/RSxiUFVpIWpbNWghM19tNC4rJUBuOCp0VklNMEVsTV84XXYzNGFTN25dclRmMDpLKGshN3QzfUo8S2dq'@;
put 'amlTJmdlWTJkIXlZaX48QyVqVkNkRDF9M1hpc0lBJDR1fnk5O1lmS1Z6cGldN0l3JS96b3U6Tz9FdElYJT4sKz93Kit2QndHYEt8d3tnfjxhQmlzV0dAJUI/cHBQRyhtdChHQlM0WE54dkhrVGg6KGtxNnRselosM094TlpXb1RGWz1gUi86QXY1azB0JmY0fjYxKnlNaXBNXkZNbjJ2eG46O0tA'@;
put 'aS5ZYF1UNTxgalpyIztpLFdgNH1PZncvbCNub1lQdTNvM0N7dlNGPiFeVnRkeVI4fSpza3xINTZbRTM8VFBIemYzPltOMSNseXFIc2tOQSwmQSsienRGKjRgQVpyQGhdeXpibyNtS2klcVRmRipXMk9kRHJEWUBudVBMLEVmYypKWyg7WGM7SW4sNV0qeXYxQXxnbVA8fW90QVdNSW0jOSs2IT1t'@;
put 'SmNWP0JJdzl2LmBuUnFqITw9YWlBRCw8JDJbb1RtenBHTUt9fUVKLj16NyU6Lzp+ekRrUm5lJC9PPixxaD1WM3Q/cztGI1s8YEJ6OkU1KzcsPWFdV0tiPHIySX5iL3MyTHYpND9HYjBfZCw3MzRvZjAzRDBeSGd7XV5qMkFjIml6U0U6NFlRNyJHcXFYOEpVRUNrJVBwVl9vKT9Zfj57UiMzbDpK'@;
put 'aTdCMDFGNkthLH0ldzxnK29ba0Q7PTBUXT8xOCRtO000Tk5RRXNAVT1tJUhjNitvOCJdRkdxTUFqUEJBSTJReiEmP0pBaDphYHglRFs7KixxcCk4R2dTVVJnUSpGdHh0NG9EaT5EKztyZFU+SExWSF0jXTF3MmRve2NESHdyYSx+NDBgTHpjcSpqdEIuMHsiIio2NyhjJSkiMVlaVE9OQHZ8UUo2'@;
put 'ZigsTit1NXVhSHZKJkR7YSpBajdwW1tlRkQuRStTTmI0NFtXb1Y0P1JKZkBjLGdCZV5hdS4mM0RMXixIOHYqUGNxTGIqNjRkNl5xalV9SUtkPzRiMnloczduPU9ELlsvVWNUNlM1Z2F1MU4iajxNKWgvOGNdSHg2RzApeSpfTjRzUGMrQDIxSlVdJm1VT3MyMVV+NE9MMVJMQjkhe3Q9VWpgcTko'@;
put 'Rks0T2E4QE8qfElpISluT2pTN2xkOn11MjckKU1DJWhiTDRIWWg5Mz0sInBscD5qdGU8ank+TnxRREIxSi55XTFCLz19UDd5On1xbHAkSU9ReHEvIWd0aEVCIjZDWGlsRjJ0PjtRIltTX0hkOXtoRSxvYDYvYDBXM2JAU2YsYzRJJi9ibXN+PkBjIU5ZeTdGJFNfNkgiJFJ+eXVWYCZiNjdgU1lS'@;
put 'Qm5eIkdtSktnISl5SE51WUlLYT1MRDNHczpaY1Y9SG4ofEBmdWZ+UHcmJTFoSkhvYTJRRnYyN2MvJUgkLEw7ZmhKTUw3eU4oOGNXTyxsR1FFZkRFcklDQVtWI3pXMWQhRy9qKD55b3tBQTI2LigjZig3L19UVl8xeVgjQTZtLm5xZEwqPSZROlBGYl1ZXUA7cnZFPSklLEpHbCorfWF2NSNobHIi'@;
put 'P0BgS1NkTHlrJmVSbSlVTVt1dHhfczpPMWdAenNIXn5qWSE0aUYwP2FBXWI8PHdCe2Ftd1k+TE5UMU8rWWpadTsuU2FdOmdQTXpqRSN8fHxvTHl7RCJvZiJaU2ohX046bEU0aXN2IXdKVUcwZmJDZj0xWSpwW2cuZjEiZUo6c3o0UlQ4JWVvJU9PL1I6WSZubC9PaHd7YzssNnYwLF9LOlZKUz9i'@;
put 'TjMiQUZ5S28pdCFgVkIqYzNgV0d0MXpzdXspPHJQSFlkS3A8TVsmPHlUKlZtV0Ekb0wydl9nfU57e3s4LkhYY31PV3l2OntMfC8oWT9HXU5kIzRjRjBkWF5qLjBsSHQmYSMuZEZ3WlRKeT5oQEk8fkM9RX1AKnZXfC9feGh+PXkvWHxDajhUVyVyOH5fTWRfUVssWD5ZMm1QYnBtQVJPVHRnYTZP'@;
put 'TWVxeEpDNjxqeTFkcChOeFd1PW82cl5FUUZ4aj87K0xWMSVpJmAscFJUIjZZUl06T1JhT3ZKT2pWdEQ9ZV0xUFNZOE5hU0BKdCI8Smxea2NISGt7OnVBQ2JFNTx7ViZzdE1VY2okU0k5JjpjV3lPQD52ViNRQTd8IlBVQ01XY1skNktNWnB+WGQ1N0dENmswLiRJV0BQSU0ubmtiKW43O19tcEhJ'@;
put 'SXI2YllYeDNtRixfUkBzVjRpdC99UU4/RG5MQGtEK1AhJmE+c343MWlwPGlqYS9EUihIUlI6T0VkY0Q5MyhjNlgmTE5nKGZiWD12JDRaOyhpYC8hWltuYHFTMiplK3UiO3lfI1pUV1tSY2BTbXVXdTo5Q3ozVjkhW1RMPWhXW09WMlUqRXJgS0MibVV0T3AzWnFRYzhmP1l8fV83PUFGOlhUbjFC'@;
put 'QFFXYmAvcFBNPWpgP3RZOENbc3dHYnVzWmlkQk1lM1pCOWdKSCR2Nn48NTFobz8hMGFvVGQ1OEhjaWU2UCEmZTVfbnEsQkRNVUQ0elBzY0IkNH4pR2RvUmtnRT1tMU8/a1g7bFd7KnZhKVlVSTdMJjlOaj5LOW9MWm1BJncjd3dbcmM5cGB9dEhibUVqXUpRLysqKGdHUlFyLndPKnh0ZjIpcDsz'@;
put 'RkxyZnd2ZUoqUyE6eG0wTG53eUlfQUZgeXV4YERNfnByI0I/fHlGKVs1SV8vbkpdQl9UKHR0fkslMHV6ImJoXix5I3ZpPzRsfjIkfGUkI2o+eV5pXmEvTW00QWtyKXI2dUhjcXUxZW1IMSZNIXVWV1VNTz02cT5aKV1od3BBMztYZDBMZzBXZSttSk8vRUcwcV4hanxuZD5bVDdVKC9ZRDpaa0xE'@;
put 'QnI3ZWtKVChwKD9lJSg1YXl2ZHdfITxCOiQ1fnMkOHYzYUNta1tuKjFSKnw2XTl2OnAwQ2VDQiRCYSwzXnFedjpWMzZydiMuMn5vR302OSJHXkZ8bn0yN35IMGc+JDkxbzU6QyNJJmJucU9RTENTZ3JNJi46WXJwMVlyLyxHVFE/dnQ7aTdgcllYMU10Sj0wcnxZOVUkaCx8ciZMQ2wkSiQsVyZX'@;
put 'KGpCfChLfjJ0fURWKiliQWBxNHUhOzF4OywsQktbIlVGOjBCNnBfVU1LbGc1UGZgK3Y6dGYsX1dsMT5hUSZlN2pmPSRwbEtFTE5JJmZybG9oZXp+WSQ5VUh+LndyXTt8P2hSWl9QfCYrMmkuUkJQOTJwPTYoQT5LNDpxbjxrUnM4d3ZTUkxuZl9jPEg9OzJPb2YmP0hHcSp6bik2a3dsPG9MNnMp'@;
put 'MUQsIVMpYE9aRXx0YnNYJWc+dVcuI0Fgd1RUJDIqTSMwUlFhYDxvfmQ+WWpqZm5mdWVoSVc1UUNkWFgjTSp1cC52WWJXOjE1XTkkPE1EK1JbfW0yfntaaXNlTXQva0tBYzx0K2cyJGcjcTVEa3tVM0ZHemtfeDkiVVkoZXhEJjdKRCxPfSlUaV90XSsmdDkjOiRLNXo6ZTxhOUliRE1ScndEekZk'@;
put 'OjhHeCJwR2hwaUFfaVhmSSNOUGB0OE5fXkdebyxMfmFnOy9qMV4zL3BJe2VeWXwqUm1qOUNmZn5CMDNFUDZDWWQ4X154WzFLaT1eKHtjezVhfWojZ2gka0IvT1o8JDhFUiFYRG5dJGlfM30+TjtPRm90N3JDb14jVmcsaF93bk5wQXR2USU4UW08cVhHbXw0bXVEUGA1Nzw9ZzY3IS8iVm1keVRq'@;
put 'dGw0ako9PnpfNUhWP2p2QCRYUSRqRSRPNzQlZ2BuNk5PelY5dSt5VVprL1dwbClNVVhELntfJTVIZzZnP0dlMXl0bEJLKGJNa2tlfC5vdShdX0hyP1kpMWw6JXZ0YXVsYnVLZVBpVGlKbmpGLmhWOjE6YE59YX1XMGJEelBAUXRhU2c9QGx1ITN8OlJiW2Jmd0pHWVAkJUwiUVNlI2MyR2BLRlhO'@;
put 'WDZGJDBKSDR4XixSbnZiTnFmdjhve2EyQEl5fmBGRHJQVkNzM1VIRj4rQWtLJW0xPnRaV0pseSNnT3xuYWE9XTg2clI6Q01Lam9hJFdWSy9belZ2NXx+W05wJmddczNVZCFZcn5jcTc3L09POmBeYElbdXQiTU59X3Z2d3VSTFFReH13Q2MpW2xVM3g1YFFGRSxUeHx5a206SC9STHkjWH48PHRd'@;
put 'Zz5SOn19O30/ZDlaM01FXlkwZzBlLyVkR30mUSZKJTI+MkJmNzgvWzwsVXtYLjQyVWgrTlUyLjUmTEVBT0JbamRAWyFnUnZbL2QzMGtjI3g7cFNjJlNFeUNkUEtYYkZAYlokX15hMUtTTVI+WFpYdns0bis5fmdMKF9NMlYyYjU4KCpdemtnTzA2KT5KcHMuKUttQTs0S2NtRFNrRjQkMkpvPCUv'@;
put 'TEpbNTo6cU1RJSpSZiJ4Y0c2bXc5KWZzbGpAXllLKX0/X2ROTkJWZ2RAUm1WaTdvRy5MS0dXLEAvSGxTUWEqc3JXL34rc0xkbnx2MF8hNW5ySyZPVko9RzIvUiU+enQ1RWwpXzojK2pdcUA6VEdmSlpkJWFgdExvalZ+TCh1MDYjODckc2RQTEB1KHJMJTA9X3FhZSFNY3tAdUJeXyIrTV5hampH'@;
put 'WGt4TyYvIl43V005ZWZsRCJIQHF+e25OZEJYfWd9eTZpKz9uWDgyLiohZyRYVFcqanpsM1cxKHNJZE53S0ZsSm5NKFp8aDIqRnMpc3EoXWoiPGB2QF1hOk1uO2ZhRmlRQFhXa0V4Q2w8Ok5odnBxanVVPWpDOEBPYD8kN1Jvd3pld3crZ1oiZG9RZVJzOm5tXU52dSUuNS9YX09RKkRtJm91Mltk'@;
put 'JF1oKUxEbEtlRENqNzxZZzNgaSg1eFZZOHdffURAeE9WamxCSE5nMl9rPUZGI3QhZ2xjTXxLO001bWdgSU1rMXs1T189PEFOSGQhKywyKCQ2ZGpNJnB7MnZnWC9XaENoT21pKChYKE1yWFFCOVdrNCQkVVAmMldGRWt4SCJoREh2VT0sWE93OEJaKXZvRGs2b0hIYyQjWENARHpSIjUyezFkIzw1'@;
put 'NTl0VkxpRzNUR0BhYW03WDhIU0RSME45SS5YVGE3IlJZJFVDfVRQZ09xYmZKRUlGNn1XPXl9bFkiN2BKNDRQQUxSTnAydUNIRTUxRj5oX2RESyZiW2x1aX02dXg/KiRCTV93YSppOU5vczAmKVVhc3FWMzd1WHZ3L2VURitvT01BYGkpfUshcTtvdmh1T0A0az9uekczNHFNeHokMClmY21JMH59'@;
put 'W1VbMy5Jbi8zVko8KWpLJGIlKzhRbih+QSp8a3Y1MF0vVG0xYHZte2YvMEFuRFQ/Oz08NVNoWG88PDZxUk1xQlQqNzlYanAjSV11RyV4fDQ/ZkVwa0RJPChgKVNtKERHVzsvckVPOyZNRjFyNEVOPSVIIUM2OGNYek8rPUczKjhZM31sNTx7JSEiOkkoPGBXfEkmYjAqaGdCNTRqXmc9NVdwL2pm'@;
put 'dTg4c2J3fTQ/Izh1LCRnNX53KUZZenBpaStUTWhmaS5tampzVEU4PikuTHApNnA+UUVEYlQ1MFh6RDJrRDh0VSxoOlBYemUiZ3VLYGVvMnVjVWpQO2gsaHg9Ji4ibj1DYm1hJkFCOnErM3tpc0ZATH0xeiE0MTN4UCVMe2gpdUo4KGMsNFpmSSpLKWwrfl0jQCNmI1swOnksJjFAOk1+TC9GfXQ5'@;
put 'aHU2PEB6NCVoXVZXVC9AMEVXeCNrUGN0a2ExVGZVVWJyb285UnEzS3wvNVU2aEZ+V2NtUF95Uip3OVM+NiUuKnRZckxjaHxIeWlPMnVqcGVQOjUrWGNtNmVLY3I/MUp1TSl1MypveF1OMylkKXp2VHFZKkdSVFcyZjppfix2Wit1SlNPMl9qNUVtTyxkJDJ4MXl6KHpfRnB1cnkiPX12VilmOyRP'@;
put 'UkZHNEcmemVUUXZFN18xIjV2Ij1CazNgZUAjVyxXcEZGaWVDSVhiMnlzTFNePyRnVjBgQ0s/NnI+bVFJMW0rKlI4WUpOM0plZERIJl0sWlJlUlU2bGR4N0ZkTDZnb3g3LjBSVDlUPWZzVTRCVWRPI0AmTiNwbkQ2L2huekVFMWYqfFZ3Wl1OZnhJNDo3eFc6e1JIZnkxJHNvTF8rOCw5NEdgPmd5'@;
put 'a3xaRkdBJGUxcXYqfTFgPERId2Q4KSxAIVRedSteME1zUHFsYE9pWH1BTEAhfFp0VkJuNkdkNy4qX3l9bDk9RCFUb19MMVVKSHhQSFZAVGtjNGdRY0U1TSlFWWZyJEU9JS84ZEQqbWw5bGBCJkZIYl9fdUthe3JwSz92Tl0lengvd351fiZOKWIrKWBwRXFhWylzeG8yZlVLS09HLFQhbipkWjwj'@;
put 'OXY9UG40Mz1le3ZqU3IvQDJqfjhAWl41RV5FcX0jTmA9In1sIjk8WnVDSVdtZVN9WyptdDJFdEc2aSIoWCZ9Ljh1NFt5O2MmWDFVWHNsKXp3LyxIIXBUQEJrSW55WlN6NkMwMDZxS1V3dSpje2RYTyoyRG1HcFIhaDo2WH0uRkoldEdFb0JGYSZyV1FzZytzWGpgSkAzeDNGL1BHbj1vfDJjXlNJ'@;
put 'Mz9sUWk8NnxacF5fM2ZHNmlPb0hfcHV1WUBnPk02RH4sUHBIZjUsK3oxUzZTTmE/WSQ2aGUhUFJjISNbVVlQdCl8VWVbKlpyaSUzP2JkMjZfUVtuP0pCfUssU3l0LFY2JV5Gd1R8NndxJiNjaTZraUx6LkpeKDpdZTA3MyYiazMhQDBmOm8kLmxrI2trMGY9UVp0OVB6RVd2YUkyYGd4Lm11eSos'@;
put 'SClEV1gjfmhRXll8SDxbKC5TNk1bTTBqPSErOiExZl56cWp3UiQ0KDhzQF5ZZ2suOz9yTlQ/WmdrLkFRNkRCUFA2YHBiKzcpOjQ0dzdadWMzYFJjMFBzdjxyR29TcmheZWFaOHFoVnMoUDMiKSwlJiQjfjBnOT4kNiQoQDFCaix5O0BQVCNfJEh2S3YxdjBtS2QiZzFQbT1AdGhWOk5wTHVROk4p'@;
put 'SzteTDR9TV48P3BGVWh9Rn18UTVjMTY1MFNbRH5aIWx1WmVCdUZQJVB0SVhNfF4iSkJPKWZ9YWd4S29+ajRPaTA7OmEzKU9MYilWY29aZGhNYUY+MjBpe3ohJVBwZWM1N1Q4WzU7QCVxZVhhZykwbjE7QFJdRzQ/OkclOCtLfVVAO1h8Lk13MkNIVjl2YUlXdlteLiFgPWI2TT5VR0pHcyRnXSom'@;
put 'PTxiRno2fURUPmpMQSYrMUtCUihtKmddRGtLUjVlTE95NFlQMGR2NTF6c1ZxYy9MWVZ0dHRwTzVKQDsmPiFESWM1SXMweWRlIWh+JTYuNmlCbWJGMEBOSF1yS1h4dSNSLGxOa2skTnlARzIuOFN7PiEvZmldN1hTRihhREhzaEZIc0dzciokSXlqKGthM1IsKSFSLkQ7VCowX0BDLkVDLHluTWZ1'@;
put 'YWxZIj42dXk7Q2ZUfTZ1OWcuNXhheDBObHo0Xi9EZ2lPVCVLYSk0X3JmZ1Z1TzliWV1vTk9lIXNjSVhCaEFxL3FfbyQzRyFAVz5yXjhWL1N4MkIvNztFTVRNZ0ZNWmBea2BReDI/I0NjTyw3LEJYUjRwInBmK1JnNGFae3BPaTxLdTsoPWdqKWo3IT55dTFhNWIpdExxWldNJEo7ViR8dCpZNWou'@;
put 'JW1aJjxyIjk+Q0YpJFhmXm4ubW01V0UxWiRvZkZqWUY7JSIlaWVQY3wyRENqUVJ5XUNIOVMwW2pFRlRvTEsxKzgrYCRZIVpAK09rIUVFI0p2XzxiRTxaJlU6OiRNaXBpaTlCZyhoRCVWPzokYV0yQTRMeXVUYWd9L0ZXKUlRdUBdK2JwVD5HJV5bK35SKSpDVlgkSXA+KEBTWUh9I1F2WywmS3wv'@;
put 'Pz4sa3ssY3t2PnByUjFWQX04QGFWcXU/IW96bUYsMlYkUnNOTkFgQUplQ15TKTMzJF9iVj48RFhzJmViejE+RX5NeDpwdUY/d2ZOYFNfUWU0bEBBajg8NjB9VWk0NzMqajsmaztzeX4lTFFtQn5edFR4TmFILixwfGZMM2kmZT5bTm5DTnU5dllkdSJILylna3k5SUJCWFIhc1hvTTt9O2JBPk5I'@;
put 'S2N9VTFKPWkiR3RRN1I1SUYqUS5PYktpQXB8UTloNSpMW2xxKz9kZU57aXhqSmpFSkgyMk9MIVVhKW5bTW1PZT5UdiVHSHIsYWBDLlJSOmFXdkpvYXpQenVSJkdieTkhakllTyNMPHhKYHskYD1kIz5URCh0Rnw1MGBmYiJnWD1IKXZFaXIya2IudUdeX2s+c05iaUVLSCQhfnlxRUd3cUVvKUdD'@;
put 'RFNPWHlOVyk9MERKYXt6MD1SQ2JpIi4qQmtDNGtfW3U+YSJxfXh8S3BnfEJ9bjpnWCk2WHdbLnZkN0dPaUlqd0BGPnkjIyhdezU8Q3tWKitJPixjaVJbKit+fCg9P207JlU6djV3QEgpKEhGVXd5WGpgMkw6NXZ0PGh4QF5RWUZ1RC9Sam9Pdj5LNGdFVk0iJkM3b0RZTT0oc05JPkk8dmJ3QFI/'@;
put 'YiZJTXR4MEklUE92Ym1eXkFxdn0xMkFUfHB8SWh4cithLkd4LHIlSFU1XUxmR0lVIkQrQWohQj9dWz4jRV84c15vSk15KEJ1Q3YlW0d2JnRzbk5ZMjB+JSpqJW4vQ19aZHVAZ258fT5uTURZNj91Y25PI3t2VUIyQHJMTjU3bVloYkJxdXJrektCQm43N3crMC9OO3d7M3pDWiY9OSN9cD9fPHRY'@;
put 'QGQrfF1BPmFlWyk3aSo9UVRGYUBsSlc8XiMwTDgjcXE6OktudzYqZjxzfEJ2V2pdXy9yWVlkekZnUW1sU3RlT09+UnxVQSFMUGRrdiJEaEdIYTojO1ZCMlN6fFpVJipKJUUrMlJEXkJnQUUqQ0IuVTR3bkBpUippYSouYSEuIVVhbEo9aVh5e3I5KUUwK0xyNExeOFExTEAqYmhhN2shPXhENjBg'@;
put 'MEBpYEJbckIvWEAwRkNNeDlqemRSWElFRUdyaDo9MVp6I3ZaVHR2LF1qZylde3xdalZlSTx9d1MzZVNxRmBaP0JlflVvQXdxdW0mckZBNDg6QWsuRz5OT2YkYHR7cDp5OStYUCpoR1dkaThqblspXzpZQVJiaW5baCtOT1FTN3hAY3NPSztdXiRCdT5IJkghfDpgNHtvSjxsRCVufUJ4SlQ/TEA2'@;
put 'eEI/WTZMSUhgOmNve0ouZVZIfW5ST3QsJTpmLkliXndDYEZINDhfbT1RNFs+SyRqRCVJbkUrZ2svWTYxSnw1T2ovak8/ZGt9dlYpKFBmMERkTixbMWxrTXh8bkhBWjhjQkE/NjA9bHlZfj5kOmlWc3Y/cnU0KVtoMyRlIVssc3glIV44QmZNdXleVzlVd0BrJUVfMDFUPXVxbTomJV1CYXh9JGBs'@;
put 'NmM3cF0wSUx7L3AqaFJKKENYW0tJYFBFei5iI1pDbDZkc0ZhNTZaUTB9YGA8PyNISlNvZC89QiRlY0ojYVNaZjcoRnUiSWs0JCxURVBFP2YuWXhlbURnMUNFbEIrYkliSTw+Oik8SzFUMF40UGdiJCZkRSYoOXV+by4uWzllaVd2dEYySXB1Yjd1WzddbVRmNTBhaWdPInAsUUZqWHkzajtkMGVP'@;
put 'X103azBTLitVMnlnQmkye1UyQ3NUcyh4MGNuJDM2ampZeDsrej1seyxpT2ZRZVpNW0NCWnRlK3xvR15VcV80ZTV4QGo0I0xATzhiUERbXkpsKyh2RThPU21fUTgwSDkuTmlLcCV3cCU9ZGp1by9xN2t7TUZxLypCW0lpLkZvaTNDJjdwOzQ2eE49XUNWViNKYnwxQ3pgKEoyVDUuXjc7eHNualV9'@;
put 'SHZnXjNbKSFaRTVeOTwyRVs2O3VJZ3BNOm4kXlIiSkZRb0A/XzlKMVhxL3c4dEU+Lk4oPDBYP31zUjF2U0V5Zzk7UUlYb2YjNVclaStAO05pLFp4VD9Pd20ifWxGSGxgKlVUPzQ+OSlzZ09ANThuUERISzFMQDhEKSl8JFh6bFhraDNKZUBTWWZtR3VgdDN0T28xSiNMS0swXz1oOFdlRUdIeylW'@;
put 'RWtlI31OVj12JEppIyopOnpOdjIpKHs5O3swXypCQC80QnkxQ3MoNiRANlFYKG51KUFvZWd3TyNkPXJeUGVeITlRVSNkXWZbSGJ4QG5dRj5SU316ez9MdlNvTVh5VWx5XSQ7eFs4RGs7TjU1bTkmQzJ7Ril1WGlkRXVNUVlYJlc2MjlVLGBIMCtzcTx8VH1nUyF8R2Zrb05yWTYhQCVjTFlgJjIw'@;
put 'MkhNKjI4bTxVbXRhdl16NyV8XTdRaFIyWXtpTjNkWEtFUVFGQjslaUlqLmc7Sjx4Y0sjUFFGVDFfKmtCIlkvVWQxaEN1ZzN2NSV6LmRHP1RqITQmRTghKV9pLk9USTZENSlxLF9JO211PlU5KGNxNTFIOWUoV2xSMmt5VDVrbEJkL2c0W2gpNG1lVlR0JUhrUi88T0tLVExjI3pDfCljXWp4PyIm'@;
put 'Q1lfWF9MOmkofHI6UGN5R1R3dEVDU21CdW0lN2MhRyM5JEUwSzYuKVg3cyhSbV50TX0lbD47cjAsM3dRK28sP3RCTUlKZFFgKjVwQy9ZaS9ZI21fKy5kRE54KSokPDMwd3dZPFFvIUohMm5adG91SiMjVjh5Rl0zY34vRyQ7ZVpSInhXLEp9KHdJLHYqQklleGdkMWprXUhMXnhpUTBKe3BoZCY7'@;
put 'ISEoajZ3NENQZXVFfV8hJXZVWE9AenhMdzZvNGEyRCxSaEBeaWEuUjhQMkdwZjphcSVEfmlUREFfZ0BsOiU9cUpTcGVWeGhlKkZMVD9KbX1vTURKU09QKXBmOy4hMS9FIkB+WFt4Z0ZZRkwmQzltc3pPSDZrfSFHfmlnJlFzSlNqUV4xU0BuPWFjSlJAKz48PyJBMlU1U3BRT1EwaCQxXUwlN3ZV'@;
put 'YiVnPClMW2hjQXZVamVtYUpFdi5sNndlfE1nUyNsO2A8WTQxIzleaGVWRkFGc1l3PCR+ZUAjRnlQSDRSTUxkXlk1VklnKGVgaHBtSHwrYS9ALCtPQnc8VkExKUZBO3JIV01NX0JKU3ZhPDVVbEE1PWs+RlV5ZzYxa1VzLipJKV8kaVhiX3N7RCRvJSJSQFUsXmlLSC9aNCtgellBdVA9QUMpbi5p'@;
put 'Snd6PWQ1e1BoNG5ZUFhubVh6aGU5VntVfCIqdEd0cSU5fGJeSSFpdkgxdERbTytkQjd6N3B4cFlNbmF3YCxPTlloQU9KOm46LHFLbHEqbyQqOSJLO0ZrVjhZN0g7ey5MeS4oTmJEXzk+LkhmSzFVbChuXnA9TDBYdGQlbD0oWkNTL2VSS2g5Q3J8JFghaU5zQUpEVGA+InZCMjlZQXc1IkgkQX1y'@;
put 'd0s2d1dLTWBMeDc1RkdQaCpoL0dTcHR+dkNEO0oqJXxCQip2dW9Idz9wMkBgRyFQTVRKdUprViNmbFl8SHhRbyZmNFIxa2VVWiJbaDQ6ImVFZDxrQmojSWYlQkRaKk1qOUZAKT9SLzM5WUJdWWdbaiNUJC8wTSVDfmc8NVNqcUd6WkQxdlNEWC9NeltteW0rX3VEKSxuTEZ4JT0kK3I1O0dGcXJg'@;
put 'JTM3ZUl6VSZ7Rz5fKD0iYFBhNTteM31jcHgyZkBaUlFqJCV9cEJXYHlJJSpDLz8kLlQ7JjVSL3NYKm1RSV1vXlZWdDNCUGZdOk0sZGBQe1lITURxfnI+UCJgJkJvYGVbZnhxSHhJI358TzF3PE1mKTdvRmxqOVNWS1FhWltfVyp0Z3VvWXE6bkxJT1FKdmBSe0VNdWM/bXdDViFKJGBpUntESz8x'@;
put 'SDY1JXFYcVsrTkR1ZmBha0oiUWNMRjZYVWAuMzN9K05DKlZWR1pqZVM0Xmcoa298K3xdWlFzfjEsUUlhUVY+I3MjQy5oLj9VSHNAYXNfYyx6TnE5TE5jW05mdDkiYCswcjZQR1o/enZrLE0kIjNZPl13cCMhLEQ+KWhxclAoeWlUNiJvR2wlRkhzNEd0aGZ3QGtQRm5yTmAqb1sxLDg7UnQ6cTFM'@;
put 'YDtmRSh2S0B4UiM1aSt1dUgqP10jcy9AMGFyZ0slXkxvez4vZGNWPSpLazFMPFFGdzh+V0goYSIwbn1VK0tqOEdeJjttTn5xcG9CTV5jdk51Q3hHczRjPGx0KHNbPC9XSWozdTJjJE1mR0IqJmBMaUBCLmtSVTZTbWBzd2w6LGxyL0p6RHd9QltpInY9MzRbWiZ4Q1dNWzNLN2pxSUYyPVMvRFVM'@;
put 'RXNZOT1SYytuV0kxSiolLHFeM3A9NWR5U2A+SHdjSyNLYH5yXVIyfTklTVBwI3Jlb2t9dXs+dk9GLkxxJGZGSldjZFtMd0xheDNEU3ROO14ve25NbEBtV09ZMlN3aDxxZ1F1bUxMfFtARkdwSVhNU3hAR2JeYDR6W0Q9VV1JTWdrZih5aiMpdjUkIn5uVTZre1J8UDlnZDNLUj5gfCo3bl9YP0sm'@;
put 'KDJ9LyZCZTZeRS94LmgjJk13QWxFPD42TyN4Jj5PalRhZXMrMCM6OEdlKXBTfTZTPUtzS2pTKCI7VnM7TmI1bWdScm9mW2c5e1NuNC5aNCNqOUF3U20jLCEmSkojXjsuPDJnalhWPmpiWyssMjBMQGV4Yld2P0ZvXTBzfXREPEJHTjVecCEiRHoqTTYrT3N9OilQbi99Vks8P3tgfGt5VTtXaUJa'@;
put 'X352a31Ea3I+S2RyPjZiXjghQE13KnUrQnJOY21LT218fk9PRHJOWTZie1Z2eGdKSCgvJEhqKXVaZWp9XntkSHgiLyozTHlDNlkwWGhNcTtMWikxKVJuUjBDZEhdM2N6W0E7aCM3az5JTElVIm0rL3RxL2JdR3l0QDVFRUwhTW0rM3JAQSQ0MTo1bXpXQ1dGNm9HcEdVLlhpVz9nTUlVYHpGMjZh'@;
put 'Vz9Ca0ZtUCZTKj4/PilTa29qJVBYaz8hbmZdK3wzPFJQPWU4dlRscVpIWzFxSylNcFVyMnskRzxqQk1xV2BQaGI0SkduT3BZLCNqR0MrYXJBckckK2d9WmtELGozVlR0bXRFJFB8XTNYN18zTVI3emY9biRqMXl7V0VCPE89T31eJVtQSkhTd3dZayl0Z2VJTkdHT1BRRUdxM3xATUAzLGIwYVA+'@;
put 'V3tLezBhamVoQVF5RFB8MG12P2dta1JHbD89cj9jd0dyJHJ8VCUhQ21UOjxgUEtheHosZ3dIfG9iRSxOWDBnaXRQTm8kM2FjI31qOntVOnMmXlU7XmxnTU9uLlVYaWI+dlVOIyVjPWV4MyNXKiJXcikwLHdAZHF6WT99Q3BEPHh5ajlMPFpRZ2piIy5wQXJ+UX4vQ3dBME1eJHpUXz4lQU0vUUZ8'@;
put 'RCNLfFUhNkpxMzYseUM+L1FMYnRxfTNeOS8iOiJnREU5KV4yMXQ/TGAzTV9bL0FrJSx2OmozKGZhO0BjOzdLXkBjPWA4SyM4VVhsPmIiLFZDOzByMSxnUFVYeilMdUU+W21dVEpJeSlYb19MP0FZL2xuaCRhVGE9Xi9dOHthd2lEM2lGdm5UUVNlcjIhRTVLdCs7VTBJdyhkXkFgME1WeWY9QEM1'@;
put 'TTwmL01JRUt1fCRLXXBmeXV7WzcqYmIlJDVKPWBKKSRnUGVRUVNiSjswKW5kQUpSSHJ1RWkxKFh4ZSQ7UCVCTkhYZV15Mm5AO1h2JCt5O3spQk4sO1dDblFmYyssTWMsaitQZW9Cay9GU0QyblY+UV5DLm80azEvcXtmQUltfXk0W1s+QGNQRTZDPyJlVylXR3l1WCFPV2wqUXVmNWo0MWdUUHU+'@;
put 'Zm81JE5nbi5YRkhbZ24pNWx0LiIuTlV9QmQ3KmU9QS53M01lOHoiJkR2L0ZoRDs/PGQkZUhNRVpTUGMpVXNmRzRfLFJXUWghJCpVc15XeEtNYU8hTy90Kyt1Ui9CZlFAX0V9fWYhW2lkdU4jPj8lT0VPM05eKV14XjZCTUByIjFSVGdacGZaenx9WUwyYkJuOjJlRyo9WilMSyFxOVVEQFglLDFa'@;
put 'YDskW19APzZuRUh5V3Z0NUtgSDZLITUwKjVXdERpL0ohbzRDIXp3MHtnTHIyT31mWnZ9QSgrKENiKUFuWVcpWjgxU1FzZUZ4cUwmUypNcFRATDBkNlhdblVxNUNzcTZzL2Y5bygvWCQ/VV15SC43azo1Xml7SEt7KFRLQHtWYXAwU29wfU5MU0kyRmB9eTZxL2V9alYrXikraVdBeFtkYHN6dikh'@;
put 'dV58Nz9YNj5HfVR+UCs6YnQ9OWhheXtqSDYxZX01UWVxNHx9X2dVRGJwW00wVSNvaThEemYlVT1Tc15nUndDKGU9KiFtOzUlZ0cvPSs6Z1hGOHZqSSlTNHxoJDYvXlFnLzh3PXY+eVVBLCZrZj1fNzE3eTxPRG0wUmJobk9AKTNwPEpCLihHbipUMFRKU1tGdlRDXmZwfXAibU4+LjtmYVh1aFEk'@;
put 'eFlYZkcrIVtQfiFzPW0oKDV1fHlVeGByL1N+WTpRKnc+d3gma0cmOWRnVG9DPz1NRVRrNl0vMjhYXnZ6aV82NUtxcVlraFJZPiI7R3I5dGJhT010KkxsUCFBa2FDaj8uTjBuaiwvaUl9Y0ZqW3svKld2UTFAZUghdWhIdWM6a2BfZEwme1h4JVoke1BabkZwbF8mPiYqQmZoVlYuW0lTUTpkNDMv'@;
put 'QiY/eWFXUSR3b1FKVHhtUjowM15Ad2UqelBHJFhaUiRFTnVNKTZ2RXNGL24lNWpiPkxiaXdHN1k6QENuLE0/V2JWRC97ZztDMWdKUGhQdlolWmZYVG5oL1YwTEpmd2U4Vi9TUXsyY0JyPWY5V18pW3l0IlFZNypme3pIOSE4ZC9xMkNVZnkkRn5WLHBMSStVbG52KUgxKjN+O2FgaUE0QGZNfkss'@;
put 'Z1lEXT1eQmhaLlp8VmltN3dLWkFMTCtWZDt6cV50eWx5S0RyTkghenchfXIoRV0uPT1XKz9ZUnphSSFFWUwqZm9uIyM8LztGfjg5KUlFRENJJWVSPk84QGU/JUFGW2BzO14hQmUqTT82aFBnYH07ciJFPmo0OXhSYHs6RHBRa0RpfiQ+P1dvbTd6WVpJelRMdiR4cnVCcDlPUyNGNlJ1W1UsaUhL'@;
put 'MmJsV29pNS96NWZqUWM9clgwcnRIQ3VEYm8iQnM/bUMmWSZfeTdhe1ZKZ0dZRypScUZzQ2trTmFKYUFWUmslY2I5Xn48TV9JdDwzd0JUQUduI2dXXltpMEYyQ10sRlIsZHkhT2J7aFFeYlFeQmxEXUUhcUJhUkcwcj9HQ3FCWEZjcWtCWjguNWskRFd0LDNlaHxgejNuNEVePGtdVlBzLzFQJnJG'@;
put 'aGZlbkhxYjIpclJadltlPTRHT01jSWNJRUN1RkwoRnc+dn1nbT9ZZk8/Yz5pbm1WSjJUTHZkIksxZHlkKiNTRWZhKW9Ie2FGVihnfFBrMCRQb185KEtpVFhPSltkR3tKb2o0VF8mZF9RNzEoK0JnTCh9Xn5XTiZPbTlKb3lqQnx0WHYuSUwmam1BdnB2T3xpY09ENSskWVlvcU8zKUdWbndSbXRl'@;
put 'bz5aP3V3YWxVcylwbGk7SEZOOmspNDdtKk4wKTkjd0lzdSFJeUBzezprK0xafD57PVEhLHhvdnp0ektKNSpNej1qayI+cndkaWddJF5vI0sybkopdVdVc3hDV2BFM3gpWFspU1sxKmJjSXNAKVQ1ZUtqQCpfe3EvTTJYT2JfLnQzV0BrMjclZktBWXVPfDoxe09Vc1Q4JEZKNmp9JGRRT2xhOjEz'@;
put 'O1spaiZJcTF0Ki9BPitDND8kKio6N2NfWkgpcnptKGcwSUU9dWNpdltoQEBrcTguXzd+LDFjc3dbRC88enFCQSMzITFrISt7Pl53MmU/bGNYJWhTJFVjREx3dU88Q3htaEwoc0IsWFpeP1U4SV1YVHk0ZnkhTj4hSTx1TnFSTzUpQi84aHBgLl4wfTJSbGVQbjBYLihENUU3eXpfa1tNO3RpI01O'@;
put 'Z14mTD4vakteZ1J3QG11ajxEWWpiWDVtUzh8cCJ7KlI8Ul40RGZLSD13L1g3djQ2KT1HSltbTEp3RCZ4MnhycShoR31HRWd2TT8sVjJZblddUSg8LmFWaGRJWjgxQzFvKktLSzF9ZHBDMTQhfllVc15mLmwuQEY+LmhwPyFCa3hebWZFfCgxLlBtdGgjfEdHZGBeNFJURWZITTRRIjBefGosejhR'@;
put 'M340KS53TGI5Yi9QXUxvSG9MNHAwTXNWTEIyRyVJRjRtJHhwYm5PamhFQTByMl55VyY1UClbUz11eT1uKEVvR2xQfi42ZC98LCRMKV53Qk5KalVheGF7NiY3Jmt4KC4sRVdlPFl6aEgmIXxAZ0Q+dzY1d3ZrMCUhdVB+OnkkTCleZkhJKXM0JF51di84RzRSUDN+eVdPaj40I0QsUU5Hb3xucW1T'@;
put 'KG1NY249QWwlSlR1eTBXU1E8VnR3OEwsT1Y0cGE0TGB2Yz5LczMhP0heejFlRllzP3dQLj1lKS48bkw+bmUzN2RrUVBzPHpYJCtnOHp6QW45WyI7eDI1Rkw7SmwsdHlNIyxee1ZMXnxyL2o+azsqUkRZNVlRTWt5Oy5CNDttKmdKT0dOJCltTUpOQ21CMWJga0chMTUpd2NSVU5LY2NNSEtOKmZZ'@;
put 'aik1WzYmMktnViUuOCIrQF04MmVWMSRsUiJQQG8yVDVbPnRyI3Vob0NxUUgrfVYpX0AyYzg0STtFbCQ3PEQ9Ild3IXFILkUzV0F9X1lmbXQleVdwb3YzNGtSMmwmOltPJkgzMmtjZytxd3dXX0lbP1Y9PUUreDRXZnclZGhMM3c9PXhOR1ZNeCQ8fEdHVjhzRGJfMVlKaXxWVTdLcTQ4ViVHcT1M'@;
put 'SG8kMF8iKV17SVIqTEo2a1UrM0s7ZzRmblQyQyZQRW45SltSXVZEUGg5QXlJPUUqRCU5WWhUbGB9MzEpRzZ8I2N4R04xXk9wIVZTTEExRUpXMXtNVS41SHYlPENWTzgqdEZTek1FTUQ5VThFOWo8cis6IkdWdXpMOCFgUi5ATmFYVmwla3hMVlNEI25pMXpIUU84TyoqVGVvRj9WUDczIVEhREYu'@;
put 'NyVfbElwbFVHfHJBYDBVa0Uub0plPXJIKWt1d0xCbkQwQ0xPTHR7S2orLnV6ODxHfDw4YF5AS0hvVzZ4Jj49KG1JITNHZ0J1Plc3Mk5DTjZ1b2UiSTo0NClaS2EwL3JlQT4rc1grLEV8ZyNVc3RROGsuaUllTUZ8clJVLj5FSEJnMHU9MGw/Wm5keyRlI3t3VmdtRyZnKmJeMVtgXkF1P3cxV1NP'@;
put 'azVpfndXRVhkcC93dW1NZH1VUHBCXT1gIzFrUlF+dUxEYTxpQW5KUE5DPlJUPVd4Ym9MZUFSWjYySD0pQjVqPCEyaU8jX0ohfGh7LEszN3hMZ1NUelZYTURxcz02c2ska0N+Z091JmNBLC8qcSxOXl5eU1dCc0M2NW4jSzpGak16TEtLJngzSEVrVSRPbDM6fks0O3pMU18ueFkkeTxTd0ZXMH0j'@;
put 'NGt2Vi4xeEV4N3VlXnVlX2Vbe3Jdan5wWSIldCo1OjpAa3ZwWkEmaGBKISVXR3BddUVYZy90eEdKTyNCUiskUlEzY2UjMHZTNDtqRXM5JUMiJEtsaUZBVj1lckxoRXlGMEhJLytodUZ+Q3FkNDV+cmxHaHVSayl3KjwiMGxuUHNoQWhrbzkuKXgsZHQ0aWUraTshTTVzK2w0JDNSbDJ1WXVSeil4'@;
put 'LEBkM2FbUU9PU0tXXVU7dGJlTzFNWlQmLFA5R31uRShFTiEpUXVkPz1ySmEidVcsP2xIZUVQSkk8OUpkQEkhayU0NTFdIVN3X1MlY2pOb3U5TiM6RmN+N0VXSDg0MGdedGlAanBSTUE5cHlQSXBKTEN8RkVZb1tnSkg9RCNYYD1AS2ZSUjFqJmxnTzYiIyNiXiVvJDxONTUhVyF+Slh6cC91OkNX'@;
put 'Sn14YykkMU9AX0d6OD97fk1XdGxEWV9ANXRjLnNVSUlZTTdUV2V9ViYvTT5WNilgYiZAbCFgM2l3bTxAaEA4NGcxUEsqallhMHoheW9JOTE9RCZVaDRJeHlsWCEveTQiJm50V19ySVlfZmZffEE6Nlc0WENuakRgdGQ6KmNAd1M3a1MjNlYkMDAoeHtTeEVULz5NRCwqV0Bsa0UwPml4W0klZEtp'@;
put 'JllOK0NiTWB8azowa2ElWm0keCs4VmJrbF5RInxWOlV5TWJSKXxYVko/d3xwI2Y9bVJ7VWlLIk1hdGt7VnkqSHFlNjVUVSMqb1Eydm49M1E9WyZRKEpyen1BaGshJXQycjxSQn4xfmc6LEFyLEdYUyszN11dP3tnVDRfKV0qfXRmYW1gQTV+PHk1LnpENnpDLiUkN1dvOzg2T1NecGdrektaajJP'@;
put 'ZWhyRkg0ZiomdF0jS11iQ3MxbSFyW0MvKVp1Y1ltdnFffFAobj90YFpdWnJzcj9uajlDTE8wYytDeEZgKWEqTF1raypfL2tvLypCP0NZfGxfaGlyeXFLQWF5bT90aCIveTVLejAhZ24mKFNvLEU3TkhsWVU6fTchIUdwUnImQD9kOnB1XVU0TU8yIjsjfEhsWDJvT2xXen5JJTBvVm1+UDd9ZyRE'@;
put 'XVIzTyY1TDAsPSR2JlFHJnJXNnFnaGxnUyNxZ1M9ZjxmKXNVSD1NeUxaJnolcyxWVC5OXngmMGZqZUxPWXgrZzdiOylFTWpldE1ePGQmYS84PUFWQEJgJDkma3J7dHFndD09VFcxTXc5cCU/dUhuJWFibTNGPEM2SFdvelBSb2ZRU2k5RCZhSURkd2BdUXEjQmVVPFE/UDgjfGFXezVdZUtSLl90'@;
put 'Nz1FRVFsUUs9bXlTX3t6a3h0NFR9biE2LyF8RUpzfHJoQVhOaHBlNHthVzVpLyk6V1NoKXpDOzY0ZTN0SVkqN3tPZVpFdzFlOy9RRTNmPDY0MFZOdmwhSihKd1E0PiEwSVtpRFheMkBBZHo1PUt1LGVKOCZFZGdUVWo4YD90OSU7NEAzIy4hZ1tWKCQ7OEBDfitnfDBmfXkleFAiOk5wajFjMj42'@;
put 'JDtScF1POzBJUDIyTjp2PlUiPjhtOkRkNWExXnE5LHBhV0Q+TWc9ZDJzXk81YSRdKXF8YGshM08ua3xpOmBMNnQsXyNOOWhbWDVTUnFKKDtNZ2whPy9eISRAOGp6Ny9KeDw7UiZMLGkwMGJkWmV0JSMwZiYwXnVlJCFsa2N4IWRxWjNYU1E5NDhMdTl7U1dgOEsrZ3Y8QDMpIWI/bXRGI0A8SFAv'@;
put 'JCQ0W2hWO2ptbChFb20hfVdTKiFqejo9M0h7VjtNZ0tdOzV+IT8vKWJRaEo3KFMuJld3ZD1sd1FEa1N3Z243RVJiOmx3dzRPdGpCbyNyL1V6QkUmMks+by9FUVM9RF07cyVrPnwvTzQjel4ubi90Nzw4XiUyVVQ3MjVHYCxBJk1VTWwzUyJeJiVxVUArM3ZLcEZaaENuVDJmezRsaSwvVCFoWHMy'@;
put 'RFQpR3smPVYyZjVXOyhXNjheZ35IPklMOkt7MiRQV2hMI29HIl9ebSwwb0FDcVl9cWdxaE9lZjpJYj9OOntoXiZ8WXtlTn1MOjlrZUhAPChDQU1aKTtRamAqay5eI1VdKyN5PkMhRyhEaUpvezd7ak9jJkNkY29kQDNFXVYkQGU5b2sjZndzdyN2Qnw8JkYia3t7bzhWJURMJUAvLnxwU2AmKzBI'@;
put 'WWVFPUtWWkojTCVIUEpIaylifUhjKzlRSUhzYUdYfTYpQktHXyY8Ll9hdWxlanNJVywxcVF6PmZ8d3dfSHxpQlZpS2BdNVA8enkueF5yIj1sQTRfan4uRm44P1g5a3skOlB4MSxKYHRpQlpwPkRLQXdrV2hkSTY1SENyZGtYITZpOk4qQFMlRmAlNFtIK0VfJm5ZcmkzL2x3d0Q1Xi8mVmJMNlU8'@;
put 'Ql9BOFtPdTAzWyt9Ljo9V3tYe1RxZmVOSFgzLHFnO2BxcDEwW24vdygrS057eihjSyVsKj5NOzg/UFtVdWBuQ1owKy9HfDopZHlWTFB2ZWw4Tn1oclZYXSkmOV8yezNUYTc9VTVpZ1FdZVddJGdnfXVQe3s5RS45PSRqa1d7UzBsN3xjW2VqeDxVVzlLWFU8WC5ALHtLezQyaSojSDBrI2p5bEZ9'@;
put 'VyhuIilMeypYUGJ0THFzcj9mSGszYVNjTltPN2F2TCouIV1rXVdfVjAuRmBKPlVZMEV6OzI1fTNiXTY/fWdxYnp7Rl1aMWNtOU55ZFB5NWd1VV0zYiw5KUk1b0twdzYjMGhiM3prYz4wTE9XfDoxPV5jP2V0e0w3bW1qdEhIWWR1RVImaiV6ZWU/fEg+VXw1TEIoWF5tPCpNRkRDPiFwNSM3VlRG'@;
put 'eUZYRlhGW2woV0JWXjNEV0smbl9BKSJ2QitQdldXKzpJcmVLb0ddMHgxfHlCfHk6dHk8RiJhbFE8W1pNSC9Bd1ImW091RHA2QCVrU0UxfW9KcSI3OTo8K01wQz5aMHhjOzJDVk1qXitXOlZoRH55MmxOSE1NJHQlZ0JbYmN7bz92anl2cUs+bD9UL2d8KVZrLj9AOkdTcU5ea2xXOmc3M306JnY6'@;
put 'TFNeUFVhMz1nWjN6eE0xeGJPKFQpWzNyNiJ2UnYsVlI8PFdqJlZPUjhGOH50KXE4eEZfT2UiJXFIdSs2VyNTbGY0ZzVAOl9HZFdweyVwenRbbWVXSWo4YnpnJWJkLEh0VWRLcTM6ZyJXSU8uazxEayMoaiY7OjZPWDclPGAmPUIkMX5FMEFeayxqbVVgI3s9VWRyR3xyLCt1d0ZxSlI8XnZGaGd2'@;
put 'OSk9bDhjR3BxNCpSSXcrQ3tXeFNbcUY6YyYoSkclRmtFcllWc1VxP2ZeWFFeUUxhImNDQGBaXTFaPD9lIjd8KT8rITxnOkxyWzEyQCxgMkBZezYpO0NeeDx4V3lITmswbko5X0BLezksQnhET0M2Rmk0KiYxaX40LnJtNz49NlMhejA7KzEmTF8qYFtWYi9vWCQ/IWJ3UVhBPnJAZU9DX2huUWxe'@;
put 'JWVGO2lUKCY3JlN9amolbTRxIylWejRObGtNeyZ6NG1SIVlHJVBlbnU2Y09UZFdrTXFaUFF2fitJdWV1Wi88azEyN0d3InUje2cmWW04d08+YThaVClHP0Vgbz42UW5RbCU3PlN+cEImOUAralAhc1I9MWkiaD9dO3g1REAkdkl5d0ZhU2dDPmchMCo7cj9EL1J4WkFSfjBNT00pXktqTDNiSSZI'@;
put 'LF1tOkNiU3x2ezl4dXp8NmRxazI9K1hQXTYvPysyTCYiay8ucFh0PVYrUGkrNTtyJGpGdFdzWzFhY3w5TzdBPyRtPD1+KUZFdCsqLzIxLixlaHFJX25GNixqfWFXWHZZWEYzYlFISFRON0V3ZXpvX3RrSnc5SFAkYHVYfD8raEAhWFN3Y1MjYG9APFVkKXhEdFQjMUsvbFQ0KiRJLiV6Um5FfF9q'@;
put 'O3BmIUZkI18zNH0iV0E8bXcuT19zSUluW1AvWnJNQW9qWSMjbUJpMEs8XS9IaEpIJlpJJi5QPmRYcWI/MTsuQ2I5a1lFdE8xRWBuZVhxYkhsQEl6dUZFOiolV0hYKl5gJF00Mz5FbklRMUVCXShMYVFSeFNScHBASFR2aD85RG0lXlVBNFEha2c9alpSMkx2Tn5aXjtSPFJEYC5GemVHZFU0ezo6'@;
put 'Oj88ISVeaTNfS1VyYjZoKCNWVFJ8Rj5AT0UkNkt2S0BmbShTRVowZ0dWXk8xVGtmO2RuQCwhI2JzQlErIXJeMDJnNTBSPjdgS2RmbzBmZW9TTjBLJGd7JCtpLGlHUCpIYihTZl88fmVySHxCci86ND5XbmcsMG9IbyRvSCFlTn1mdEZYJmQwcHBJKEBneG1SO3QwLFslSmdoc01hdk9dcDxTM20v'@;
put 'OUlZSXl3PDw+I2t7bmc0dTZrS1l2QDs3Ty9FbSU/Z2c1NUdgeSpeJjs3djZ6Ij5DNXFTd2FtWF8kbClhN1pgU08oLlFnZm0+JTpmMClhaWwzYy44fjdWeW9hWzphLldHUlc0L09oVWIpRF12Jnd6UVo2JVZ+bjpdUEw9cGF1ai56fE5gRUEsfnY9U1NGK2w1Yi5gMkBxd3QkZV5LZTdrSSEuRU85'@;
put 'XlgjYGxPZTNaYzksSlhtNWx5SHxlRypNPjZBV2tsM1ZeWyNeazpBPkxqKjI1XTdoTV1ybDtQK2BRYGF9QytkfVQmNzwlfVFPSz0mO1M2TWBsRTVGMD1yLHpVX0slZTNzV3NTUyR4OXtte01FL21sKlYkNT5WLE1ue3FTKzI3O3tCPyhJfTpnbkljWCRRWXQlRD9DL05Lfj9pMW57S3EzP2N5Pipt'@;
put 'Zmg6ZmE3ODtsK3VKJmJLJGhMazUjJTAvKn4keV1ZVkZ4T2RLcW5XWFZXREYwRl5dZzFxQHUsWXI3S158VCxfQVN0R09MMTFPQ1dgcUZyP0NGc1I2OyNNfFZbOzNRJWs1WmpPMzNxcVlCYi9kZTwyWllYa2k+dnI2NztmVEE7e0dkIjc+dCZ8IjpSIXdxMWgrTXVjViY8I0JNZT56UXU9YFZQfHh2'@;
put 'd3h3O3wzc1JKIyQqcjNgMSJrLiovOE01OEllYzdeRmYhcGIjP29+NlQvby99VVZScypwR3lGfUhOSzplbGRbX3gza3NOfFZZWUArVFBIc31jd0poLHBrUjJXO0xyRDJARURPdnlsQksvUmR+eD83Zm9IaUdQZ01hKTg+Qk8qQHtLaHtSMDZwe3g0NS9eeHNtMSM7MHNtWkhmbSwvYXBKKGFjYyFW'@;
put 'T1EhRT5+JVlTSHBHKEpKQE0/YT0mODFealsrMmkpdzpUIlgwLEBOYnlMN3BeQWVgNHB7N10yT08xWS9zUmpbS05TR157NER0bklOR0VNcVRrVDVDdUUrdG83VFdRTldbOy49Rz0xKzVrWyR1MzAwTygxOSxMeT52TzlfO1Mian16Mn5PNmBTL31aWzQ+d1VyOWJYfUowJHZdflBKaCRuNlYhazlD'@;
put 'bzU4MH1yN19tTnBLKV5NMVdROjJ0eTlPQGtudW1SSi4kMStuKktrJnRUOHhjS3VnQFQxN2w3akYuezQ8dyNse2VAKEZPUkhPbHE4ezJXUypuR2FEWk9WL21nJm1RK1Npa3gwPHdxPFRiUkhPWzJzVEJVME9ScT9UO2c0Uz9UNmMyRj9kSHFaJXZlVXJzdm9+W0RbRSY7UDAlc2kqM2RtSXc+OV50'@;
put 'SSY7V1B5fnQsRn1DYz5mYDtfJipvcFBxUFluUjIsOSlJYVtEI2JbV3s4UlpwS1kqaUslJVFWJFszSDd0OkFvMnhxL193e0YuOVJGXzdSRmBVbksxI3k0WkpOT11MXTBGLCUqP1liRypSWCNHTylsKUFMaEIjOVhIRV1kVEhOTHEzWGRSX1h7az50YWxaJkxaJW1lOGswPnhtMmw5V15fUENQRihR'@;
put 'XThyVTVbZX09bDxfVkYjc3lEQSMvOEw4LyM4Sjg6Zzo4bFlRMkRwazJoJDsqMz9XVElNQEI6QDoyOHhPU2Y8ZyFxL3AlP11sJG11Wl5rcDltOTYwQm4iVX5HWlBZLElKNzBgP2gwZGE1X2FfTSRYOiVqTmZ1LklpKm1jIUE4SmRFLGd9OVc9azFlOEJoOyZKQEljUUN9PSZeeTs2KlIrWFFKMSxQ'@;
put 'IzklbylwMn1JUWNJNlVhYVRJIUQsU1RVcUk3WCNhXkR6cEpMVioycUtYcC88OyFEfkhLKT00bClwSlo3N1tPUVZ1bmhgJmVLeFJyakJBK1tNRmxRNmh8ZVYxeV8pYyw4VmZMPVReNCZdVSZuc1VdMXMuVyNuOXsvVzMjcnZncG9qXVIlX04lRChVc21aUywhMCtjaSx5JVs3Yi9TZlZmJmU8Z1lL'@;
put 'KDJaZmw+OzZ1VkdZeUFKY0xjLH1aclomUT99IVA1UjFqI0Rna2o2QkpjT2ZXSnVJL1t6WiwuPix6dFQlJkloOzY3TkRASShlUWJTNURsM2FMTyssKXpdOF56MFFLTktEb30hcCMheih2RV9HQzZKRDt2WSZEaXgjVWx8b1YvZTR9OFA1MWB9P2g7fWcrLCJ8dWtsVG5WZWpgKkNEY2M1Oz5idD0j'@;
put 'Z2ZUPFdoQkZXRW9gSzJ8Unp3UFFPe1d4d3VZLnU9eD9rQFgvajYpe15ueis4ZDc2Kkt8eDt8SCF6KEwzVy5AS1k6WU84YXpCSEdINk9EeDxVRUJLMVQuKnZ+JS9ifnBHcC5VZ1FKJDBeWTpNZ3lUVyNoUj8hLjRsaSs7QXc8SXs8ayFVUiY8Rj9ZdkUlQFFyeltCM35wdXBGSCJTPWpjbUh4eWZF'@;
put 'YmoqRjZ4aGV9KUd1KGdZP1cpR0cvajxMVl52MVtOXiQ6NShkPWZlTjN2ZFVBJUo0a29CJWFkMmZJfUZmamA3OkVvNSU3VChsYlRBZS9hentCODVIRSZWciFoWGQ3b0tUWl1POGgoQTpLTX5vLjpCKGpke2RDaEEhKUN4WDV6W0V8LD9FfCxMLloyJWtBPktXPEUyMSFuKH5bWCoxUnwsRm89VTVn'@;
put 'R1Fhc2hEbyE2OUhMOGNwYnBpfjB2NSQ5SH5TN0o7OD9fb2B0cVdwRiRxP2Q2aHJbT3FrbTlFd1hyYzl0UXVqUi5fZUsrfTc4VHZoN0o/UzMxczpEOHpWNDZ1MGFdNCY/YjR2dVVJOnQyKVFuOWU3YH1zPXE9UWR2IU57U150WkxrVXJuezxdVV5CfmNiI0UmOyw8bChEcjRqVXI6JSpzOUBTeT45'@;
put 'KUlhW3MwMCR9MF0wTjMicnAwU2NLX3g3OnxZYTYlVzdkNjU8QWkiZEgwLnJXO21qfFhaNC53cD5qfCwlLHddbmQ8TjdLSTR5JkYuTWYpb1ByNkNHOzZ7Snl1WjImRXZIJD88XUxAW2tUQ1d3OG5FUDREYCR3PS8yK1pSN0R2ayg6d21XJk9COXhzaDF7WSY9dlNESXoqPG92VUV3Mj5obGB8c0tA'@;
put 'QjZgYSRac2BvTjY9bi5Gen15TyRlUFRPRU1xU3I7P09vL1d0Jj14Ij1oJEhIL1tfJnFPbiVPTWJlRmR7e1M9bk85P2BEPy9+QD4sSG5xOUc9eW1hJFZifH1RY3E0a1VleTpjNV47Mm45SypjTU1uTllwN2lHTDY1YlJiOj1zP0k0cVokOzQwWmJENDpxa2hsPGUueDFINCJHRmB6LGp1RXU0ISo6'@;
put 'YXksJGg0TmI7WVshNHcofGpkbmJ+NHwkSFlLcXQlZSF1JWVZK007Pn5oNkssfTpdX1VIblBgbyEvPV1CP09nbWI6MHUxdj1GcHJRMGNndFFVK3YvODwhMmY7X2J+WnYhJTJyPyVbSEtxN25QMXtMciRpMXVKXkchU3VhQyZZTGRvIkcpa2V3cF5KeHpDMn5ZfUVwL0FLMSNQb0ZWUjpnMEZ4T156'@;
put 'clE/XkZkay5KME0vdCksIlFmPi9YNmpMKCk2MWRSYSI5SFA2LEpRRDhqKnoqYSwsaTNdb0t2aFEjZUNqeWVrcWQ5R2khXV9IYyElLnssOn1mY0QpKzY5MX5WcG0qJjBmTWsxWDhfKHFPb0tzXT0zQlsucFlRMnJBMlNQVVcvYiFDP15HXVY2Yk5LOk4jQmhYa353K2slZU88KHZkYFZeWXdnJnk4'@;
put 'OzVfaSVsSFBZKTU7Kn15SnkseS40c1AqQTNyPiJGZTw8LF0wNywjPjNHaiFoaU9kIWhnaWlqRn5DV28wQCo1OiZQKlE1VVpkZFhhW3ZHYzNRTkBlXWxqKDBONnV5LjFHLzhHdyE1MGV6JkYwWkAjYDBkVDBTMEsvK2swZlBOKWkqJk1OYHRpdzJmOWZOT14kRU4uITttSjZZJWxPMTBWe18oUyxx'@;
put 'Y0lhcCpUcEV6OCYkRExlZ21PQktCKEdmbThVYy5kLzg8fiowOTB5THBQVFsiUntULyY8anFLMllAckJqflQmWTlAJnE8U2QpVm9qTDhLY2k8Qjh6Vm9qNWFCc0ArdmQ7ey9qITdocl1SRTFkL05beThndFFdJkZteX1gQ2Y5Rz0zcFpvRm9FL1hEaXhdVXY9bFpsYi9sND50WHJycyx6LEFMU3RG'@;
put 'YClkODR2SnJjJmdvImg9OVk8eS5eWmRgT0tUNlJYQi5UNT9eUkdvUyFNPTlORigrM2N6dlZIcURmNHI0YmRTaSUvUCZlIi45SDZgcCFZWTV9W2w1X1ZhSWBLVW1udF0pTkgyWVJRO3pVWW1IcVdGeElVcTl2OSZRVSNacGF8L1cuKEs3KGVfU011ezRTa19rKG4zYHlFWW9jY25OVj1vVmZuMlV0'@;
put 'ZHE/fFdBKFYrR0xXN258KSNaNDVjPG53WyU9TyU3NkwoQk1+TCU5VD47VCNCUX5xOXIiRT4+PWtEJGcqfVFjMFA0dyJqKm5BZmRtdVRpS31yZz1zPiEvRTBgQ1dzT2pAcjY2fHJnTS8kUjZNJXlnWUlDdXlnelI8W2JnYTFDdntuWVQ1RF9nTTdLRV9AZyJeS1FqbEhPeCFIdEk/InAiLDklO3wj'@;
put 'InYsdFkwMl9BZDEqeXhQR15AdmlWVkArOihjRXNtdlRDKClbR0lQaSVaOGlZMDZJeTE3eEA4LyVhWn1VKjg8JEpdM2VKKEt6cS9kNDRSd31TVTZrNXlERmdyMlNlTTB4eE9IRCJ5MSJDT3hSN1Y9eiZFbi5iKWxlfl9gUntRPHh4bSx8PTJwfk4xRjB1XlFoUGRnPWV7bWhgeWFGVnolQClIcW5x'@;
put 'Q3tvJixlazk8eTYzUVV4ZjE2dmRDUFtSayN9WmtgQEMmYnB1NFNoT15WN3dIVCZoaVspajhKV2hdaXxje0Y7QGAlYnwqfm5vaC4jPkUiVD5uaHkmYmVOeDRdPH0/c1JQUGRLQl8qZ3VyM21bKn4lP311ViYrMXhuOSY/MDFuJlkvb3tbajpYYk1JKDxNQ0ksTz1nbltkXkZxaX5FXis9WXwwWmZ3'@;
put 'QHZGTnxNRmxqUkNGK2lgMG1JLDx+WipRN0xJdn48Jj9QZHtgMltQVWx6S3VVMm1JJDsmayVVPVFfLlN9JCxYXVUlVFVoIWkxP2Z4cDRAX1ZFJSlCUG0vXkskYnxje1o8cXkkP08qLjVvdDpAMSxPMVc7YjFtSXliOSxPMVtPcVBlMW1JO04+OUlqIlUpUSxkMCY1JWRdVEZTeFNKPWclOSopfUJ1'@;
put 'dlEhIyFROHFyTiFfJk9yVndQVV0ofVZvST9mYkN5Q3Y5NVpDTmBKUHZfekVYM1FTZn1XP2M5SjpPV2tkW0kzfnBFSCl1cG4rS0lrVTMzI0ZCZnpxY25iZlRFd25CTkIhVzpYZi8jR3RBbXVUS2tFOUs2UjNyI2ojNThjPW9db2tfQkY1QjAvKWcvWkNHPGg6aFU5U0t9YX50NDF9TEhQPVBXdUBR'@;
put 'M2RKdHE9a1VCb2VNZUFHaHwiY3EyM25Cbk8/Ym40Rkt4dDlyZ154LnpITkJobH5vPkVVM3t5M2VHK08wVU8qMEhMfERAcSE/Nls9WlMhR3R6WCh0Lkw8aFpJeGQjTTBFaXk7V0xVW1c9RnM/LEw7V1dBKEFmRFQvVEBhXUMrRWZOTVNDZFJwQmh4Iih9WGRbQ0QvTj5iUHY1UEZSIilNN29JTlop'@;
put 'M3dBcXUzMTRFMmo+WmxjMUhzInFiLz9OL1YpM2JMNWJIajRzdS9CUGl3MXkpKmQmTm9DdEAwd2lPOUVgeV9IN0lRamEifFE/djY0RzMvbjhIbGdJSXIpYD41IXhGeihLTzpvUip3XzVGU2VHdCNHSk4xV2ppMXd1R3svVzNTIXRKYkhxWHlYNnp1NHtYdkxBXlQzLFBVWHc/XjlbPnxlXUwoRih0'@;
put 'aUNdWy4pVEZIQmUiRUt7ND1DaEUlX1hbJVQuKXBoakQ8Yyxoe0FXSDBuRGdMSGc1eElrVWppRSxZZ1VIanRvbkk3cUNgYGgrdV12dmU0WWVSRn0+dG5OenBWYnQjVzskL046SCFHWGRnSk13PEJFIWM0a0hJRV1XL2FWKkg3cWlWQjcrbFU9Wj51fXliSWpjP2pUM0xEfEM4QTZJP0Q1NFd8IzF9'@;
put 'QSQoWTQ9dl56Zk1DQj8sLmJ+RnEiVGh2R0w3V1IyKGU0a044dHtRUFB6RGtSNC5YOCtvSXV9X3w5c2NyREVwX014MV9xLGIwXzppSkZyelM/RkFSUS5BOTE0YnxWOE1idEpCUnRtL0wmWDhNMlNDWlhseCZhU2FPLyNHP2h8alFDaCJldVRoIjhILylIaylvc2lDXUxNRkczMGs9QlRKaUMqQm4m'@;
put 'dmwsTUNAQlpVQWpxRixCTm10MzFeIzpoelhkYy5JWkIoaz9NYHldZXppJU1VTXRRYmhxJSNaJk1ea3szJDx3Qjt7OSVvJS84UHJjLHkiKFo1LFh3PTt9R1toYU1UPyNdVU8laFJoSXNSM2wqfSVmXmwoWkZyO29vP3JXPXhsNz48PD14XypKVFY7SjxgQkc+S0F3YHRLIUt5OkZwdzFGImNLV0Y+'@;
put 'LjF2dnY5VjVte14jek1vLk14UTQxQEJ1NV9mNGdsWFMqcylRe1RpSXM3WCx1Wz52JWM8MSxfWygqT0NSUUFZIzAlOEg3WX5zcUImIkZocTcvYTUpVlBpUXtafjVXREltRDtrRElURWwhZ21QbXxHfHB9T09VUmheRnB1QlEiKSt1RitgZjB8SVIwKEtdUUAhSX1VPXQ6VXE+OWRzJXB7ZFpgcT5Y'@;
put 'd2w8ZmpKKWwsYTFrNXlPcGE6RiVQQzp+eTUiSTtbNCs+TV5aSSpSIj1sUGJgNnIvPTRaYUM2eHQmRmhoNjw7Ik5MUkBybDgwJXxNQExqMUQ/ZytkUmIjR2lrdCFuZlkyYVVlZGA0T1gxSTZXIlgpNTd0fUd8ZFVqZVIsZlNEPyF6N20sVTY0dV0vQkRBRyx6bzhdai8pSmRASVU8cDJpIzhiW11U'@;
put 'Rn1pUkhaV1ksI0kuYWw2IloiPj5aSlVSRFR1MkNxY35AcVRfZT55SjwmY24mcl0seCFqVFFBVXZuWypYSkU7RVNdVWt2UCNaI2w7Nl9nSmJXT3ZfU3VTU090eHltaWJBbEwkcyMxKTBlaCRuRTZEV3ZVWGxaTDEvbzQzYkhmUiMqX3VOIm4qQyhRcl1VM0pRT3hlMFlbRXVYNFVaJCtNPlUiNXkz'@;
put 'TWciNHxbQW5fPzFiL1tQbEgwKGx2T3oyQG9VXkd+QURXa1U4XkBlOF5AV1E0MVFlYDRYdiQpcHZ9SDtifDlkQH5ARWIiK2R+fHo0ciRbfkAqSXEzLm4zM09hTGJTVCVSfTV2TE83Li96T0dZNl15a10uKF4rOmtOP2khUy9VcV5ZZW15LDJIVyJWKnl1TXIxVkliYjZbay45P1UxWSskbXlQSlh0'@;
put 'M2JoR09sPnEheGgwa3p6YUR1QiZCdERweH1FeUdASTpOe2JKP1kyPyokZ3pHKi9VKFc/O1tXSVJjaU5FSS9SRz5Ib1pvSngkREooQTh1QUxpV1NQN3ZpWGMjayNtWXx2fVFKczQkZ1k4big8NEt0TFh2XSVeXz5vcFl8ZHZSPzdobi9rZyRpTDZVYXY6S2UyY1JieXJpbkt7QjhyMG1pVjBAQDJ1'@;
put 'ZV19W1N5RlJOQzZCODZ7WDRrU1RPTTIyai9GeW50UV0xcUNgJXxUPFkqK2ZndTpvanlqYm1OOFlTNX1XRT8iSz43dT1VRSVbVyZnOCRQSjBnYnpyelZtdENgMTtoXiosM08/d3tLPVV0L2NSQHU5V2V+eypKdTZVU0cpOG5CaE08YkRGZSNlRXspbGMlKHxMKGFuTE1tZ19qfk99KmE0LHk4S1RC'@;
put 'dE9GdF0/eHImQmojUCx+XkAmY0BgXypzNX1DanNvaDYlN0ovYUpFR15QVWx6cTQucD48NWlhKX1JZ10rOGEiN0loRWxSY2V0d1hiXjNOSjpWdztoMHI/bHBvaEsveUo6LGRtUkZUNjUqKTJvUTxIbT91VDN2VloqUjtzOGp6WSpSTisrJWZmMX52Oj8qY0FAPFlgb0tfaU9nY0JNY2tGYVI9WVZM'@;
put 'Y3UlczUuRHEwbCV+XjpvIWRbYTZQb3sjInIkKWkvRDJqWEJfZmEkNE5xdG8mcTVlK28pRlExc04+T3hKWE5FLjt8bkRdRXwhaUpPdy4sSD5dPmJ5fVU/TyRvREZaRnowNzAhSnhEekskO3VDWVZwZGdZWGNwPUUhSTxGKVdeYm1jTGtLVlNaYzEvPT5ZI01DPkJ6SiNxeiUqUGFHZiZWaXlfaU0r'@;
put 'NyFTdUcxfkpiQT5vcElnYTV1NGg5RyYuZ1o+dFAweVJndWshNkt9cjU+RmJ6fU98S11GfFBzS2xFNipyVnFmMitdWEBIMSQpI01RZVU1Iz1EX2wpSUY5PTxuaHB9Njx6T1MzeysiYGRgYCQzUkY5QUtqdmFUeHJaPEFufG17bV84JToudEUsRVNRX3tqciEyal51Onl8IW5ma2YwRyY4RmRrI3lH'@;
put 'NnAsbT9JP3x4d1F6XWNfLiVqMGpfZjIoalJIZmFFVkNiaT1SSGZhRWU0bEU2VDpGYSRKI2dEU3ksfn5VVkQ8fSp9QXFCJkI+Ql9BcUImdUpfUywsQW44ZWtgKlUiKE97b0x0elsqdUIpbmhqXkdSKV1uW3dHNCRYMi85fVZYP1Q6IiM+YnkobltmVVhgKSpFfE1fSSFKNSJgWiswU3Q8IlliKzBT'@;
put 'dCp0KXFRVjR1cUlwbGRsc2NCI2hlT09MdUlTKG1eSDhZXUNSIVZPUUBvSTZXIlI5cUZ6OSpQbXR4JCxAfls/Xj4hMENkJlksZiRVOTw/dFppPkxDbT42dCI7QU92fXZudjEpZ2lvUWYxNGcxUGZQbmNCX1A9PFZ8TTFGfXYxb3pCaWxnWGNQaUI8WjF1LzgjIUA9VjAwRG51b0B0Pnk3a0N9SGtb'@;
put 'X0BYRSU0OVo+Pn5rc25Ua2w+TT1pMVZnJCxoZz80ZDgob0oxZmVMTzFxW21AezcwYGhtLnRCW3YqOmBLeHFUKn4mem97Wm9IKT4iP2xQZC56Tiw6d2psNyNrS15IMGUlJTsyUG45dGVVdSZ3P10yZCteKC46XzdvV3EvdXRoWSpVRkc+MUp0S2VMVi5mQz8hbmZRKmIwU31Ybj5iZk5dJEV9eU1H'@;
put 'eHloYnAze05JZVt9JmskWzBteyFDajpuOVYzPGd2aS56bVF3U0lqO0ZkWDExRmpaXnEjWj1OTXtXKS9zeUNxI3p2QEJdMklLR2poZ1F4bUBCPH1yYDhBXy9zQEMyISZuJFt5T2VHY19aUHN5Kkx7ZmhXLlloSDA2STplPnk6cC4jUCNoVFUxXWM0ZjNaVSkrY3cxMXQucVYyaXZ5NGQvWFtNNn1W'@;
put 'ak9hfmshNFp8fGZ2IlRiOiM2K2k5SXFrOUlXd2FsPDwuMS9VVW1iOWRyMEU7aiJ2NHRCSnF8OmtdVUkvW0dEeCMzd3R0cF44Vj5+JGZmOTtHbnNnaVFMNkNJYCFAJjVxLm0hKE1pUWNQODdUS2JjQ18hJXYqOzMuY0ZgLytYQ14uPUZpZlZQcml5I0YwaCZdbEV0L3pIQVBdTkJSL2k6d1dve1s9'@;
put 'OkUofnJ1Jk03IUVBI0N2L2cxbUlXPT01VFRRd0dFTHQsWndQNVc3fms9WUY0XkwuZF0wMCpHMGhAdntJdGNCdl15d1FgQXNPTzlxc1M1JEQjMiEqLCFBZWhHT1FkQTFrc3Y3ZDZ8JUt7V09nYyk0S2UvMF1QK0pIPmt8e1tLPHQjdz5DITU0VjFEI3c/XnwrPFpddXt4fmtfSCpLOzE3Y3tELHpE'@;
put 'bmV+b2N4Ol9dYy96aFBdMW05Q1d7VnRaaGF8TSpOYUdEI3tMYlNQcyIvS0xKb2M0bDRUYWIpOno1QnhiUkBfVUEjSk9CI1cle2MiVzlAMi9AQnlQbjkiaFIme2NBUFhQTUV0UGQ0MlZOJV1hcSt+PlchOF1DYlhIT2FXIXcqXUEjTXElRUdaRENHfEg7ZmwlMXhLdS4iV007b0xDfUQxWm9PKFlT'@;
put 'd1p4RF5pbTFaVnlrLEQjYDE/NnNQZyV+SlA0bDNNZyNSflBOSStJQyFfY2VDYXYydWVtdTJAQG11QCJbIjxPJVFUejBuQ3U/dExJIkc1Tj9UQyludHp0QGZXcGhySkB5OlhiVDMvVmJTZCNpRkd5Szo5ZUpSNShOcHF8Wj1meEU1Y0xLTU81XSQobi51dmp6Qjg2QU5aRGJiaE9fQzg2fk1aN0Ih'@;
put 'WyRyZ3UwPSYzOi8iYFoyWk5ua3R6dGZZKE8iNkw9WGpddlFIVFQya2V2SU9sem5STT4xbF9uTUwzKkc2WngoPSJabkpxQktCJC89TlopdmpUbkxDSTsyc2FhR2pqOzUlPnZSL05ycmdhcV1VfEddKCNuMmtldnVNSlMrcm5jd0A4M3ZqZ01ePENGT2RDVmUxYnZbTzU3JUgmPzFIPytHVzl2QXld'@;
put 'IVhSVjwkV0w7MGZMQEFuPHImYmVteGA4WTYyV1kwL18pWW44RWhCUnc3JWtvVDFBT29vS0MpdnI/K3UrfFYseVg+OWtNMG03N3NdeERwZ2IzOURTSm46RXlNNlBvdDFJQERxV1FJYyV2Y2lIU0VaTU12NTs9fGoiLmE6RDIjQTZbdlp0V3ZEaS4mZVp7Q3IvJj59UzIqO2IxUn5BKVVmKTV8NW05'@;
put 'JDEjaltgO317PHZFWGQ5WE9VYzlYcHEqLnxzYypgfG9ZOWhyKnFWfTBdUGh6c2xdW0s/XVUkSDBCSUY5dWZARHxyMlRPXUwmQE9LfX5jO1l+VDtiSFQ7eFNKeG00Y21tXncwS2lOLEpPSG5gQnhrKzArMCM7U2xhWyFtekMrbEpwakBHKmdea20lVm5HW1drZDs8M1UhbnArO2E7el1jI303SS9X'@;
put 'SEkmTVpHayk1OFQqUlJOXUw5UXEvRnZpekt4V3FYYV01TixkU2FZZSxEdWJ+NEVsP35iLExKW0o4cjVlRkpTIUtfLGd6ckd7LHBLNGNaYHB1Lj1QQGN1P35QakNmKkVKW2MhOENBI2lRP04weloraVtdYFpwei9AT0c7NGxRZklwfUkzQlg+eilZVjZSVXMvcG04cmVKbF19PytbM0JwUVhsYzA2'@;
put 'MUYqVjh6KC42OThiL2F7bDolY1ksPUJNUG4oNSwxPVg6WSJZU3dqenRiZ0IjUiM1fUIvPFY7Im5CYkRiMFNjMl04Tk9eT0FVQUtATzEjeCMxVz1TIzVuVkJOW1ckKzxDWk8qMHAqJGlUN3RhfFhYc1pOVWFNXis9T3pVNjQkfFo0MVZQMjFNZXJHQnp7ND99emFTUVU8REdnV0hpdTRTPml1dTwp'@;
put 'PDk3LmclcWRPdlohN3h6bXVIQDJ+RV9OeEN+WSxNK10iQ3F6RDsmVClaR151PWxYKHt8P2JGczR5InxXVW5UeUpKPmV+KnlUMyNnaTlaZH55VmJlWzBaaXY5YEpIb1poOFZhaDhSNncrKmZhMVlTU1YxTEIoMD92NkxlUCJgW1peX2hdN0AlW0JETiFPY2BAUWE0QmokRitBdnhTQ15BbGM7e1c2'@;
put 'MjAqe1JtTWh6fkVfcXlXJGlIdHZGfltsO21bZTNheVU3P3hJXXpnPmRddFFVZl00L3Jue0FjRncvSUMuQnRCQUFBOF9FQURYckN9RSpNZWN5IjJpI10pQ0BBRHZiLEVhPU5SYlNAMk9xdWh4NkZBQUFBQUFBQUVBOTwhM0ZwSXJuRSYuWS9uO2RkeVgyTXczYj5JOyg1P21tYlhBUl9BYkglX2xG'@;
put 'X1pGLG1FY1pfO0lgSENHSUJIVyl8L1M8bFRueVBDbyM2cVc8K1c2Kl9dVkslMXZ+WjFSQkoiZ09Ce29yOEl5VDBpI05iKWZHRy4xMnZDIjpLN30sIUohcnBlLiw4JE8/fXo7RlJ7amghYlJTT09wfDklViV9SVh8dz8lWC50cGVoOEtFcGMkSC9gcUA3Jl0uc0ZHdyM/eSlWSFtNUSRbZWRpb21I'@;
put 'bisqZ1hZPkozV3sxOWVQYVI9NzM/az9FSEpEPmd3eztXSFpFUiw7R1pwe3VhVCplVnBrfEppQl1PIkVHV3ppayl3NWohZ31LZCxteDhRNl9kWWY3UzN0VGR5ZnJ6O0okejA4NkZ3cCsyPGtYO3w3KmhmZ211eiFaNE9PRVdieTZ+cmYlfklMbjNXVjMuMzczNm55fkI5W1kzQDhENX5zckA9MnNG'@;
put 'KWBMT0A+NS5CLHFaOFNERkcwXmYjOkJMYzphJEY2XUxaQHl1TlBDb3Q7ZE8sWiVZLFFhPiJoTlMpPEptLjMpeCVxaGNmckImZjo+Q110MEJEJV5eTjYycnNgXm8pZDZJWHFqWCoqQUVVRWFTOjFdV1ovTH51dXFvMissOX1efjApMG85TntvRGJiazRXY2xYZ0xXX2p6QGJkPHM6K0tnKDxsbzdy'@;
put 'LllpPTN7SHRjKSU4Z19DTn5UWFtNMFlLeDM5fCZRdV0wWFtmc2ZIKkRqRUdDcSljRDskfkdKcEUkUSlnOUZrIV9eWndQLGJoRjx7PUZ2aUsiT3I3VHNSVHwqTkVrKnkzUjBqSjtCZyIucXo3dmlIXjpKemA6UFBlNy81ZHomNlN5U102M05tY3xRc28sKmxhPzFre2F8Kl1wOTdQPiE8LD4qJlki'@;
put 'SzZDaEA7RF5CSlZ2PG5BPm9MU1s7TF5NTWZZc1QuanVsKk9tZUJqOnlxRWNfbigrNGJAJnE5bW9GRCx5L3tLdCtdPUBPekpjRWFsYnVjN1dFMExqXikyUHhzQi54W3pjanwuMTs5el5EWF55LyhZMjdFQyt7P1t8OnlidyI4UWQ+amg9cmJdJEhbRV9sVVBjPCJqVFVlMVJ6YGNuajt7W3x7P2t+'@;
put 'SEBhcm0zeD0jK0d7eENZMyI8XiUkVUVMLklCaF9TaD03TDcpKXhSa2RDaTk6akZ8c35EM0BMP2hhdzAvdkJ6MEd1MVVAJHArLndQLjVPLmozbk8we0k7eEEkVWJNcz0ueXBTeC8mOmEyMH5kN3dAKmhYTyVbfi4yYzdWZ2wkdV1YX0BaYyk9W29XNyQ2VERdXXw9NzohWUJ8OjJ6c3VqL2hsbT0m'@;
put 'N0VhdGluQ3UsOntTSldkN2guSi5dIS5dIX1BckBaSjxGRGJdRzd3P19oL34zPHk0JEA8YUl0PntCUUJCWzE1MnVveW97X1MrQnRfJkxCVDYoM3treUYzdWI2c1svaUFqaldCWmg+ITchNTo4V2xHYkd5YmQ1aW8xRShYeHo8aEl9N1ddL2Z5RVFodFYyKSF6O3NXOTx6YFYqKC84ZjhfQ2ZmeFMz'@;
put 'YDs7cihrQzl0QEspSF8rbWk2ZGhTKHlhMFddYmk9MlIxOStCcDYhSXg3N18rcFFifkwmT2MzYlN0bnFWRD5Fd3JdcDd4fVUyUWRDQmN1MEByJHlYPF9vYmkhfk5lNHQ5bDQuKmFFWzlmSUJLSFVTWkwrIShUYGM7NVVyWCk6dlB0OUtLZTt0TyFNSyE0bHU1XUJ6NmdyKF97N2NnIjp7cShVRFo3'@;
put 'dXQqKTt6MC43WU00OGojcVdmeEJ1KFc7ellxSXVWSzMqSFkkXWtiV2YxQH03InUpcHgpS3RickZpc1dXU1JFalM3dlBZcGAkdCI/K0JgcHBAJlIyb0N6YUBsMUt0R3wqUys4WHkvLGVRfiJYJkwoZmUyOipyS0VzKixoYmwmc0ZxezlNPE9mWHVTfF5uXkNSSUEhbX54YiU3RWQ1VE03VihWZkh0'@;
put 'O2VkPi4xOlNqak15KHQqaztBUUBSQk1VY2E7Yi9VIyhUJVBhZXRkKWFQJWpdTjpDUXk6NCM6KzlHciNNWmJ8P0pQaUsjOmJHWnE4Jig9dmV8OGtYXnVSfXh1U1plV2M7YTkqIyk2YFsvY18lVUU+W0hBPlNHM1g5Jjp1RzRsW3YsTHtsMDwoMk9pQ05pOUtdRU9xckk6VG1rZjdkSWwxWm1NZjA5'@;
put 'b3JvQXlPKExPVnBIYkdhZW4maXl3LDp9JClKU0czPltzOXJwYDR9cncxfn5HUj0pSFg6Yl9TP3VgbnsvYXA6UUA2dHBLR0FVKTtheEdiMzdEOEtRdSE8a0p7NTIrJkE8ZD1sM1l6PT90QmcibEs/SnU1W2h9JnxpYjtpTUMvVH5+aGN6LmdNZmZdVUZqKkdub2N4b3tjfTptTVdMV0g/QnhMU3Ri'@;
put 'TVN4M1l0cDVlfnQwPDBWUWR0PVFsLjRFOERqSXB1VzJ4NDw+Q2pOaGZ5P2RmM1p8e0MlO0xpMmxFczs7YSNaLlF3JU5wLiEqKEMhczY+eSUwdCh0V1h5UzJIUWNpU2BAP0RQcTRPK3VLIXZNW0QhSkpBPEM9bkUoSUV7TSEob3hxR2RDfkhZYilYYCJMayF3OGIwO2c+eV0heWp8RkdLRG5HSiR3'@;
put 'S1lsOnUsdSwzIWB8JUEwTmpePW0wTmlNZW0kOVBeWnkuZWl1VHRuYWxZPyRCQ2cwWDdoVCs/a2hiPyVYLjVaMF9VVjtAbzA5LlUySCtnOkttJVA4NjtnPmdvYlY0aGdoL1lWaihOR209JTg+K1U+eDFRWklreTk+RmVMMU59UWx2InJkeiMzOi48ZFZMTCtYR31LIUl5WnJ1NlBoZ2wyKkZ+ZnU8'@;
put 'fWgsIytnd0U+JEA6RWQ1cnI+RChQanJBOUc/KkV6MC8yNCNmVlhyT0xDLmNuIWZeTHg+JXMoTzU1ZmlaNXdufXIhK3JbSUshQyQ0T2hLXURkOjx0N3R6ISJfaio5MFk+Ljk9Yl1VWDFjfDwrUj00dlNFPnlKY01+dXYvTyJsZil1SmdLSjs1JF9ITXFHcGxVJUtQKkBNWE9gS20xVD1taUZ4OzVY'@;
put 'VmN2XV0pTX5xSj8zdm1AYCQ8NExDd0h9MCwlK0ciPH1lQGM/XlhIKXpRKWl9MFBVMSEqejgyZENJNls5fi4jakpkMD5WP2Q1PEQjX0diQzQsOzBtfXxFREZaPilQPzJKVDw3WDE1Pz5oI19FbTgyfWlsfVBGVVBgWihgQkJQYnRXM3ltV1VWdzp8UUJOL1UqNmV7Jkd9Myk2U1BBTG1VZ1N2MlVl'@;
put 'eixuX3hEaF98eCFgcH4mI15BW3RSZkIqOz4qTXE2UVhXSE91LGtbIkVjW2N0N2BOeUNSZ3c5NjA4Yk17LjlhXiEkQVVuQzFPLiskU0o1amMlOTwjMn4oR1gsMHkvK11nRUBvOGFfUDN2NH4hMkM+IjZfOUM7KUpWclNJPnR5S3tbO1tHXUtZfiNZJnF2S15dYlp1Z1g2KEYlUDZrZGUxXU0kVVpd'@;
put 'YFlvIXFmNGYoUjEmLkozRGZHNmIhdW1dVihmdigue3pNMmo8Q1I5fH4hRV9jazU2V1FMSltNRTkqRWdfYVhYPHJZS1IkVStHM1dCQihwSWVaKiVyb0NvJEV8QHZ+PDVtZT1OLHp3aE93QzR8al4yNUJfKiMwelF0MzNVMnosVFtJKildRCFQSUlsTil7diVJLDNKK2Eldj54SjlUeUthfDsxLkNd'@;
put 'YVM0d3xVaXUmYTB6eURicm5ualJ3akFaKUlRMG1gJkpielRFJX1ucEJJL0NDezxwL3NRKlVEfCNhN31tSGtTTEB5aWB7XXcvUGpyWE1iUDNHblhZeD4qQnQvfF9FTEJpUn5uMXQpKiY5Z0F8Ojk9MnpoT08hXkp7aVtmRz8/elh0SnZ1OkllaVJqPHsiQDpyO1IvVUtxZDptKzFnKSg+fH1SYmk8'@;
put 'bHluNmFTaVN9U2ZqfHpZK0dwW05KYSk9WiFofjp7YVU7VztAUC5DT3N5ZjpuIV49OGs1bXpGI0hGPksyKWtPVHRkcnR9ZSRvMmZaeFFVSTx6UEFFQjM5X3tWTD5icEd2KVBYQl4rVWUuanhhOk5KSjBzNG5xTFE2PDlXcC9NVk5Nemg6MVZJREtsdHpSfj9eSUhQPHxsR2doPltnTVJYKX0xWnxI'@;
put 'cnt+RH1yYUtvOzJAO0okRldEe2wiIz9kYCU9eTFaPmdZdzFiPWZffXBubSRXSWlmeFZlbVJgbHs7IkJIeG88NTJ7WzEsRHouXXpXISVnb3IzKEdMTE5qVHx6KERWcCxHM3NkS0V3bi9lTyQ0eHwrXjA6IjVZRzF0Qys5XTdHMWdNbStmTTVzeUx5YVNoaSE6WW9qZmhXMmFAbE83NVtIcGg1ei5F'@;
put 'Xzowb1BhKElwe35qSHElZ2ZPUHQuR1o2YHFsdnBxaTNKb3RKdSNBKChyfHFQJDNFN3F6fS4yRjdwVGolTmU5W0k4I0hrYSMhbUcvfk9mfXc6NilVPz0vUG8rMUNnLnhiPGhoNSJfTm46UnZZWD97Szk6Q2JbWGFOMk4rOWhmZiNoYihBfCVYP0NMPlcmKFs8MyhRQn5kOFNONTY8UXRWTzNfZjg8'@;
put 'PnleNktVZGF6JGF1MzpjZUphKHMhTmpjKDNuY1N+d1FBWUpsX0pyU3tLLFs6M3BLRUUuZ05QUT8odkBlQV1sP2VnWDg2MmJOUl5SdHRjcGN0OShRbWBpU1J5WDBPSmRGZlsyd084eCJEdVsyNFBPW1QzfHI7bShtKzN9RGNTW3pebVRqT1NXdVdGXS5QNkwsL3ddQzYhOXlbSHJLY29QTUFNQyRf'@;
put 'OmtJJSV8TF9ReTBac0EzbzJ2S095aXMhP29mOGlqJV5yIXBdY1NNZEx7S0A0TiIzNE82VnhPVlV7OSQwRVpqUnlydzdNKG1ydGkyTDJkdEJdKUVianF1LjV6Tz9Ofkw1XXg/Nlk+Vk5qciZVY3t6WFhzR29vYV4ibDA3OlFLPjw3dDRpcz1nV1MxLyV5LHk+dSw8Uyh+PVR8PVgjWWs2SjJ5Xm84'@;
put 'Jkxmb3BsI0pxSSJhT3V4Xl9bblp8fDViNV5XZF1AM0doPSZyMVRsNXZCekxMVzdLdjZxLyl4Sj9AcFBvbSg6I2BiImJjZHBzMm0ve113V3t4cWRQV1JyQnFFJWRlJGByI350SVlWNEVDZDg0SSh1RH1xbUVnbFVWKHZkNi5GWUt5bSkpeyo/c0klQWFeRnlKfW1sMWxSOlYvP28jRSZGKDVEd3lm'@;
put 'Nlo3fnIrNG9gclMsXXhgZ3gqKUtvR19aZmlUcXAjUnFELGpOdWt2Vy46YFoqXk9KL0FeUFlxJXBCMCFWWTkkQU9xKl9pe19jN1kmRzJuLy46YTNTdlJKPXNiczhUN0JeQGt5KDdPPFpjVFs2QjAjRyk0WjFRTnhNUUclIV8rSD1mSVtdLFtqLGBPTTpbLHdIQD11UHshNytEYXQ5X1gsOTkyOUA4'@;
put 'XlpwVF5fX24/NmFDdmJDIWllX1I4RCYhPXxkaUo5Mm1pcypDWVVkXzVbVTVaZVc6QGcrUmc7IlBgOmZoblVLZmdkSkVMWlthKiooRyJ6Lj9DL3pLQUpHUzxhaDFuVF10PnU6RT48S2FWOjFfIi9iTV55ekY2V3o0P1Y4LHJ+VUxkMGBJUDQzL2ojdktjTlJUTkx6ZH11OXExQlpZbWNpfUc+WnBp'@;
put 'MDlhYVVoSHBuejAoKjp3PDBLWHQ/Uy5KOWAsQUNvTkpmfDd+RUsyOGklLzgyMTRYcjdqdHMsJWxdd1FnI1RzNkFNaWE8RHhHWWtWSylKeDkhe2dtdVMoQmBedyx1dWwpXW1BclhbbCNdJnYwdWkzc2QyJk9fNW9aaENzMiN1dSJiKVJCYkZac0MyUDp4UzhMclQ7dnElaVshPCF1b1cudGUrYEBQ'@;
put 'PnVbP3xHNXY1JT8mOE5sI3Y1Y3owKUtEPmJ2fUA4fDRYVGxRdSN4UEA8byJxPEUlYz4rLnVTcXxpYitLVyhkREYqbnFbXkRPLCxxSz9fW2N4WnNERVQufSFBNEk4fFBFVThoYnpoXlUvdXRuVnUlYVQ/cDNtWlkmMyN6RUxBVCYzZTx5Kz9LXl0rQ0t4ezpOeixhfl8kbDJ4NHszSWJTcn4zTTFX'@;
put 'RnB1RGZyMipzTkpVeGNTRDFwPytmJGI7L1kvPzZvei9pa19DQjpmKl9WOEdgejRbISpdP25eQEFRLzleLzJyX3RCekskMGo/ckNLaX4uaHV6MCw6TXo9WG9NbyQ4PkMiTH46UltfN0VJMDtqQjN4fllZL1cuRGguXWE0fF40RmVlSUdNZmMqI1ZbYXpEaWV5UmRKcXxjdz9jKnt6TjExTjlwc0Jg'@;
put 'XSFAQExaei4qe25CfnR8I2p6Tzo1XkUhajc3Rlh5MltOP20qYUFofEI8QSJ3fVpWbU1BVWt9P0lgSGRjcjcvSClSWlQ2S1thX1A7VGFNc14ufC44IlJ0R09qcmopXTh0ejA5RENVW3hbdyNtWnEkXiZ2V11wOHp0c1t2Vi40MmkzWixQUjVsSkNjKDJsXWlXc2lTeShDL3xLTCowO3RuRzFKSklR'@;
put 'Ny9GQzhnfFIxXi5mW3B+Wnp2U1olKnFAY0FFcltYTHlSMy5RSClhelgyanAlWE1TRkFxTHAjaVZ9MygvIU5OTn0iKnI6Q1NTR3lILjB3PEVpNk9heVtBMCRsWiQuYDxQZ0FmZ3RaTClqaSJoSWBEPXVKcjYlfVIiK1o0XnM4UnJ+JHlGNHtMU3tBZSk0ek9SPnBqJFNHYCs1WyU6Z3w5X2g+QUNK'@;
put 'dnE6YDAuLGo+SV1WTXU0al1kfCk+OVJSSVBpeCo8Kn5dPUl4Qz88VTBHNHwxSU9CYS4rJH1abGVVSGBbcG5yI3lAJFh9LmxPSHklZV9YbCp8NjZnaipSaVEqQz0jaFowRGJGRWlxcitzdTNAZl8xaFY2YFU9SGw3V3lJIWZFZEkhTVY8My94RixiOFBET1JoblJufVs6bCw5PV0uW3xSdTpSPj1F'@;
put 'bjFBeT5GOjVtOGo1MkgoQ2gyZSpGanBuZFpAe2JgRU1xPU9rX0dFUGN4THRAaXA0RCFfYCpDLF1vdys2fCozKUdlKjZTbXRNOUE0WVdNUSpWOjxCSTZ3Mj4veFd0NCN3eG1eeWR1WjA4fmFSTUlHKXcqdWx3czE2aCl4OnMyeH4jMDRVYlJNN3dgaV0jc3oxNDRsLlhSXnVlITFXeVcxcFNTaS9d'@;
put 'e3E+dG4oIklhcjxLcztPNSYvVix7NlhkRi5JSlN5ODxDZm5uJWJ7a31oJi5SYXlsSntXOUU4c0JqMUhEUzopZX1EM2Q1R2grOkJrL0JSNVtaaEtTdnJARE48KD9fOkRrfFY6djdfUXQ+W1NlOGpEQWJgOFhBXUd+OERde2okL2M/YjB1fkB4VW4hTWAyPiZpWiRrR3FrVGo2Un0rLltdWV9XWmRP'@;
put 'ayVWfSVDITR6UmdYcldCUyo2QGl9LilKfV5aInYoM0tWbSE4VFs2REZBd01+SGtiUVl0az50MDtNbD8xTCw/fV4ufkVkS3N3NWFlS3w5OlF2OH0ya351Ijt6T0YxXyJBMU5ySj4uJiJqeC4kNz5uQW52SHFwQHdVbEVuM3BUJD57TktSInR+aHRvJFFQQSxnNTlxcn11Tl4/QUtzSSF7UWJ6cl5R'@;
put 'RiI+fC9yWXMiUS81N1FMeDY/KVElaUxwYVN3QiMqUDs6NTFyWikqIWhRc2dhaFozLyxkYE9bQENBJmVOTywjTng0fEssOiZ9S25CY3NWSUl7fmghdV9BcChXfDUqS3osNSZ7JjkoSlF4VUFgUW55Tk4qbGl3bnswXlMyQG8oNjc9ZkhjWyQpZH49MmhJZmg5b2c3ZHJ3RWVaTGhuaDV6I2dpYUg+'@;
put 'WjFZWjt2THhRV3QwL3FadyZMVllEaWglMVIsNmVia15pbGI+VWRYLzVxeVVYb1krXzQ+OGExTz1ndkVPUnQ7Mm0mTUYqUERMUDtld3E3cm1MPyhaREV3WzxkZT9RV0VKYDxeSXIzYyxhQEtIZmtxYW83TXkqJVpaREdMdDBCfmxXRE1AbD9jIWkiTXdieT5RX3lObnR4QGFFYSp5UXguRD90byhM'@;
put 'JCl8NjpVWW1MSj1MI01MZyQ8SyJCQkJ5WjtiIWw4YVRCVSpDJCUje2hPaFlPPyE6SDlLXl95WERJSkdldiNpWXhnaS8mdC4jc35gIn0kWUk7Pm5vRS5LSiRDdlEqXmclYzQoNkpGb05VKSthKlJaNyF0TXhPczErdX1dU1V7LG5OZytMRllLM3EjeTVBMnlqPVNxJHptM04lbTQ6N3puWDkjVzlM'@;
put 'JFBRTU0vbDAmWVMoL1d+fW9qYDd4Q20ubk9rT3wiQzcwfUJaOnxXWHlPazZ0VHhXS0wrenlDNHsrPW5dZDBRTz1wMTpFaiVPWTE2P11XelBfVTlxTktUMiRpaU48OCJROyEmK0ZweGB6ekRlMWh5Z1RtWylWIyp4b3JOVj5yVmBdZFZjYGtCW2wvNjBIfFtiUkwmeSx8K3UhcmVbJkFvaHUzNF9O'@;
put 'YTY/RE46OVAhXmptSkpHZXJHO2tqLkNYNmk6PkVJKEhRSVoxSChaMSRvfn56R3VhPkF0KkZFZjVScDhDJWBKbSIoK1RZMlo2PkV0JCxyVHxYVHlZYVpjZUYqWXQkdjZPYlM2TyRkenB6YnJ7ZUU+R0dKV3lDeXU4WUd+MVNyOVIqVTZXWlhfZ3FdbzJLLHo+b3d9NW0oIkxeU2VpUEd3ekBTa0Nn'@;
put 'JUtpfS5sTyt3MXp6Sy9BJFl4K0hDKGlzZXhbXktEMzt8fDI4SyhiK2xaUXA5YGFGKHgiOnY5LCZEU1huPyZOXnspXyx7Q11wKDN3OEo8XWBVXVZtK0ZiVlJqOXo6clFEXmc7R1N1V2RxP2g8L0NBWm5hW2FdaVZOSio9PWJ0OEgiNH0pQSNYekdaNEp0bipuWCZLJXFDKmg5UF5XbXU1XXM5aHBK'@;
put 'ZX1UVTdtOzhnMk48L254dk91RiZRcWFTemhlI0dDWU5YQSphU0BELkdFd3lpdFIhP0o2JV8rbEFESzZjXWJBVD8lT1gpQXY8WTdLQV9OXitwdUY8XlF5YkZ7e2pIXjRLIWdLdSYpMi9nYlFJc3lOeixJRWRRUzxze3N1dUhGMkhLbFBJIkJlV1U/S0tncyN2W2klWlsuZGBuVWhUeXd+MU91dDVU'@;
put 'dlpgZixIX1QuRm11bkV3OzM+d352QDpGfWIjVHw4WjNsXXJ6REV5Wzt9UGFYLko4LmIsNEw0UWxlb35rWitbdDs+VDVmJXsqOVplIkUzREVJSVkvTWVlW2gleSNzbEJ8IS98YDswfFBeJGhrOUZCUmNIb2JlTFJaN3FlMWNoPUVOZ18sdVgwSioxeVs5bUUrOEJZOltFMT4vSEBSJntvSDhLQClw'@;
put 'OlJNMlQsPk1saT1memdyOWp0LjFoLzwiOFJTOz98fWY/Q3FhIVY3SWdqY0Fka1g4NSlGXjtIYDMoUU0qPyR4a1lXT3QqPUlvUUolMUhpLGxtKGssNnJAOTc/M3hoTnltYS51eC89Kl4hb0dXey8+d0pmTkYqPkV4QD5EPz1NT3pfJCxNTip6NUVLQHZMeFRjIVAwNjw/bjhRWEVUTShdaTY/eUJh'@;
put 'MGBzKzA2eChGQTw1ZSN5NT4jTX5lOyVsaTVqUVlIfkc8UUxBdFBhNDZCVTxfXV1JdjBIOHkwKSh+dWkxSTR3QDZbPlRvRj1tfENDWDRaZ3puZkp+RzttViFWV2pIKjx8RFpPdzFBfEtwajd6NE1wRnRoT3ddOH19JSVXImAjclY8THw7dC9nQjM1TmA0d2xhSkJib25OfiRAcVo7MXs1WXIub3om'@;
put 'W19GbG1Zcnk2bDhDQ1pCKWJPe1ozTXp8Sz5kaHI+blB1VXEhbHB0Qj4qLE5dNnw5bWdhd3tJIiguRS5McH1vKC9UZktLZlB6RmgmQUBeNSU2P3s6QVorJlpZOHBBIy5rfHg+T3E2VmZNS2RWSGlZN0gwTmxFZzo5fWV1emVeP28vL0ZEcTRXPjElNXV2Xk1SXW1pVVFJc3pJWV9TVXI8JV5oRUEo'@;
put 'YFAoUSZhYUFNVyIoMUl1M2MsL0NTd3N1dWZFU1JEbiN9eENDVXNLfjxMSHVROkEodjtTMFJjKll3blspYmRrNEVgR0QmNHxaMGl5XTAjPF5BTmRFaWUuWW5kVHtATHtvfF9MKkNWMngrMEw4WT1iOUJTL1RlY3pxUHl0Rz9bcVs4QkgyOTwhcmpxKS5iQEM7InQ6Pml9WUkjaF98bENDUGprVWYl'@;
put 'ODZyKDFGc0xGWW5eeG9+VXYhOS86eTkyXTVJaCRdQWJ1S3hOVF5SdH1dWVM+JlJUKVV1emcpbmpjIkxadncyKnZta3VdOC50filQdFBgL01UPUt9S3ZDQnUvaTs6Q31mWTpMVERKe30iSVViXn17MD1FPH53ZjhfXXFxdEgsRHpbaCkyNXExYXh9IXpvVHIlTDlvLEhXalQlNzZQN3Njcm4hWExg'@;
put 'RDY0I09jaVd4RjF6bS9fIkx7fkM0blNransyNX15TCFLIzkvaj5hSWBock04cXJoRCMjX3pxN21MXyhoTWgxPjdwc0phPGtQS2xRUEI6XW4vYWJYaiwxWCowSUg1WV8vak9QOV90VW46Oy54ODF+cSY9KWlpNGBbb283fnBFTTQpKSRnKTE9OUs+c2B6XWd1Xk1iaCYrVEZSTj8iWTs8In5eLlhm'@;
put 'bFAiZiUlYFs4SHxPXzxBK1FNZ0VUXi42ciZ2Vj5YKFhkZGxXayRuW3hXPCk1cy8kKipaPG4jSUtsQCN2cjR7aEwzLzFORH5CSHsicUpqNz5ZN0skXUIyW2YyMSl8eHcrW0JHfWVaIlBXUUZmSj9malRtYEhrRFR+KUdzeGhiOl59VlJuc0gwPCEjTlBbOSVeYnV5LjtHPSEsL3QyKnBgRzE7MnVn'@;
put 'VXcuImRKdmFvZDAoS0l4NHFINCJ2RUB2dHRpN2RYWSpkImBQOnBwIVBJSTB3cSRDSUNIIkc2eWxuWjEma2Z4e0VscltgcmozMGV8LkdjdldTZVhKVywsRTd2KihtUDJyMV9faTRVMExXQFQpTHl5Mnk3bmtVPmFyZU5oVU5maDRRezhUMzNDU2Y4KDVFTy5EdUAxfmQmR3JRJkZScGcjPCg+UH5b'@;
put 'PEx0NjpnUCpAfixBUDMleDF4eXApa3xtN242RiFveSssbUlGWUVWVkJNMH1ZRWhIX2hpIVN6XUljP0o0S0pCellDSkRgeDJ4eDIxOWFmMWFQLypCS0YzTiZXWno3VDZyJX4+ekthN0RNVEZYTUtza2V3Z3tUUCk+ej1zV3JJfnhMN1RYakBGOzdAaS9TJUclcEA6SFVYUClSVkdCJnBlZDgiVH51'@;
put 'bXg6RnxCNk1xYj9uNWo2fHUlTGt8QzB6QWF4enUhbEAva1pPanZ7cHJianN3Z1BmYmVaSiYkXyJVQDA+aFF1OWtZeSs5V31MR1hYQFl6MTBUPHhTQzhdOT89fH5rRHw4VztwZV5nJEpLVWo4dmZ5akhfd0lFPW9EajkwJE1oXmpkYE40dHlVIVM1WGpzcCg7MS9yNmltTHZXM1B7IzFoTjdafVBN'@;
put 'JFRCImdFTG4rciwqdlJ8WFZOJjk9I0pWWGA8LmB2eT82ZHQyPU9iKGgwd0VtUG9seGVIOyg7OGhtMmYvaUI4dUZ2PnV5UUluJiltP3Fba2h4YUsuS0gzcnxlLmJLSmpiZH11MDhpd2R8NWg0TjxgKE1pXkhje1E5X0Aralt7SGVXIUVAbz0yKT15fCRSI0RtMDRmfmxjNUg/WFF4VlJfenUsJnAi'@;
put 'c0g7U2pud1tkJFdefCMlVUpkIUpMMDBuT3teQEBGXnVsSiZTYlBdcHpAQ3VNOFFtaEZoUz5RP19sd1o3dG9WX2wsQy88YUcwVlh1LlRna3UqNTllZV9weWQ2Vm0/Z3tdbzAhOTBmVztvKDdFSWt4VzlhZnFlQFU4YUROWFo5cjN+USZNZzxHNnlLbU8qKEZwSUVmLl9WdD9mJSFPe1V9Mk9Ie2I+'@;
put 'fFdzLzlKe2VQeiNARGQpZjMpOVBXfHVjIWx3USFlNlJCPVoqZn0lWGJGRCx1PUBacXpZSShSPkZSfWppTn5oYCxQPT5pSjImfjd0b1lqL3A2JUFkfS5WdClJX0kmSlk3L2d9MnUoVH5uI2Fnc3x8PU5VIWlvSEd3YHssX3pOTEF2VnJPLE93ay9OLi5xNCRrSV5udHQxb0wjWzpUIVJweWh3VFhy'@;
put 'M34icyxoY0tLZzBFYD0sTFFKV0xyQ2dBUT94T0ZDNFR6fXJoZjtpUzRwVHorWXVgRGpaPTdAVzJFfGVvbkBCXU1UI0hPJVVNQ1h7VE53dXc8K19oUmtgXVNjRi4/aHVMTjJOeF9pXlAwKG9oaUZaN3hyLjkqdUc7eUJnaCE1L05tamNRVWVsVXlvWk5ONXY9WilBPm5tNW9YSFgoTlYiX2VMaEc2'@;
put 'UyhVSGZyV1hIPjdMVH1dVFk5RnBPQ1s+NF5sS21EakguP3lqIW5NSi5EWXQ2ImBsKHJmUCw9SDt3S1k9YWBhV0gwSEVEbVZgSk1JK2UzWS94ZEMmMCRuRHBGJEB0MHw+citLfWMsaUlKVWxSfmw+PER0M1t7Nm9KcDMyXmwkfDp+VUBtNXVJIyNHTFljaEQiZDwhazRBI1lOIzdnXTQpM3cpIVJx'@;
put 'dE85c2A+Z3dhcDBtVDU8RmZOY1Zab0RLUCVTJDZrRzQ6NUJ6QSZZdmQ0SGlyKVpFWnlWRz5vOStQXTNnPzteRlV7QHpDZTRhdTtTKFBVbyY2bik/U102RSlCJEVFakNQJF96RmZna19nZjo6TU53Rk9IKyR0amN8K18kbi49LC9qN0BMYVp4Pz57KHhjbWI0fjguWy94cEFZZnFKPS99T1dwfjdt'@;
put 'LCZZWFN0QktgWmpuNTlgbVNnck5EZlRdYG1ZVn1peXowej0uIiZmOyxnPkglKjdoVzdsYE43aWtxXThKVyshR0oiX2Y4JDFQeTxdIz57VSRfUENDKF4oU1RZPHxYYlIyJDVXUiI5QmVZaDE8KXY2JiQkNHQiZEJbejZrL3pDPUVaL1tmXVIkOCIpL2lCZnBmMzZqaEN2Qn47MS5YYnptKz94NjV4'@;
put 'L1k0dm1MMkI/eiEzR3xfZjtmVmo9SGJIYnApQDM4Vj4hWnMwRWxxUTBrbU9JKjk2THA2W2IjU1lDbTg2ViVEd3BmQGVmLD91eyFDXyUuT0MpMjBfOSxaWio/LlI5WlgsJSQ1akMrM0s8TCJ1X1E8R2tWYzFAJk8qfkxEcTM3dTl0a21sQSZhYkw9TVY6SzZ9cEUqK2YzUDh8MWc2WFZLXi9sWHMo'@;
put 'YHNSaiJtUTArfUczW049ZG1TY0h7fFlZaTd9OmQ2Ti9KXz18QG9EekFEa1dpMzx1ZWwqPVhmb0gsWzQ8dVMuOmZ+PzR9Km9XU3FKJS9oaXVRQWFvdVBNaFdAPlcsOXc0c3VTVXU4Uz9PPT9AP2xFSmVtVntpJXNJRCN9fnhjSiVYZmxNey9sVCIiKXVhSndrX2hOWUNwPFRAWTx3ZDZ4MksubXBj'@;
put 'Z0xXZXg4aU1QVGQuQ3YjK1c+Y0ZxTXA6KVFWTWhVJDFzL0dIP1dKIytdfiozXkpXKmBYUkY8S0NSKnZSTE5tOns2PSkxOCJTej9aOU1iMUFXK01zTWAxTmtDfmpHNG4jOCl4e3szXSFRMXJHY2pEVjFZU29DfWxlS0RzN0J1SHdgLyg3PyM9ZkgmWWBucSxiW0Z5Tk0sdkplSyo5I3BHTjYlSkpK'@;
put 'MkJ1fFNHYTZddFEkTVpRR1tnZFRNaXx7am4yVzxNUlUhaDNWa3F0dFpVVXw6eHYsP3dlR0BhcjVrXT8oYTpZVz1nMSF0Kn5HTG4sTF1TOltNLEMjdlBSXnlNY08ldSNua35gJHpRKGh+Q3UoJC91bD9uRGN5L3U3Vnt1cGBRVGh1WXpWfX1VNTVIYmR+Kl5SfCp9PVRkMXtRUUNOQT9CfXFRKzpe'@;
put 'ZWBsSzNSYWZ6JCEhSFhQS3d+T3EmfVpSdiFrXUdBSCVNUzNYS2x5RjBtcTQ7MmR6L0QoPldPVUB2d3NhQyVSbS80cXVAaW1pXXJVeCRjO2N8Imc8bkNqW18+UW9JSEs5Y3duQlskdCs4ZS5sR35xfDRpJFNEJmp8KEB0PiY2dmheLl5aRUU9RDA8Rih0fT1zNVV5XjAvfipMMENFIzx+ZGJ2PHFw'@;
put 'Vnx6QUl3RmhzdSo0ZVQzajlNcTswS3FnWkFIcWR4WXo/RHJfKmJiLE1COkV4Y3JUXnA/V0F3JTQ/RWM1Zlprd0QoLGJvJXB2KF5SfHo4STlOXTgrQUg2UEYuXUQrLl0ob2J7aHFadGZ4M3kuLzghdUBGS2gibG9wfmZkU1M0JDddcTthPVpJfCF1ayw2LH0wNkQrezxvRF89NUwrakt3QVQlcyVh'@;
put 'Om1SWEk1YCs/N0RKRlJgdXhveTwqaEhsbXx2QDEpPWJWVj1pXmQmJUlQNF4sNnx4R1FtanBANiUkaWsrRyEsYzx0fSZ4cU99fUZqbzAjRWs1OzQ4ZiE5SVpoQWFiN1VWR0whOk5XSWwrRG0uOSY3fTNfUmVeTl56amRBN0RrWkNXUytSZUk2TlBLOTxfcDJPP2klc0pmfUc1b2l4KTpydjtMcVRt'@;
put 'OjtJI1kpdFtCdTgjQEJ6UGUwLDh2XSY6Ll97Qjl+THJOQihJWik8PUd8RCtEeGAqRjtlKVRTMGV+PGQscWpFendPJWxUVWA/R1dTOEx1fXxELzU3U3g0dUNYSDtESlA9fFR7bFprNS5LN3pKVkByM0JhKGBJV3sjbU8hWld1Zj51bEV7PzdCQ2lYIiYpZihAazdIUHdqJiE/Vlo1XXhfXTgyZGUy'@;
put 'QCh0ZytGdT5TKH0hXzhvRixtWjRDbWF8ZCZYMEs3cD9DUHhjUShjXkdiVU5ZRVoyRl96NUV3Ul1GTnk/TFltJjYyPj5GVDMrXygrJTVHSGg+ZnBtZFZQZk5dcmh0ezxmSmg+amdzPDIhUjFGO0U0eCNeclJ3bkZNYHFHfl5IbXpjdVR7Z2IqSDNSSGQ5SVc6TisoQSwxQ1Q4XVBwIUhaez09OzUv'@;
put 'ZT13ZldOQ2xabzh2N01ZSFcxQFZ1KWYsTjRzLGc3SnosU1M5QFF8OF0oYndWPzJDZkdhfSQiWnhafWAvK2QvNV5ILj88Vm1vRTckQF4zMjZlTFdQMChaUFowZm57UFA7W3k7cmdIJD0oLE1Ja2RVNSkpUlRlL3ttaGA0c355e1sqJWpeIWhFaTR8WCk9My55fSNney5+W29KP0g0IVlCdG5KeD8q'@;
put 'aGkmMWwuNixiI1ZGJXg5bEwhY34+TzN2TTFLSEx7QjszUSR1UUZUPmJbQkcsLFUuRjQvbT1zNk8pU18/diVZJGZpO0R7UG0vc3BAZXZDcEtbd0g8PGUxcldjOi8+OHo6Jn5CLiF9aURaLFJfPDNXMjs/PGwweFIuOntYPT54aTF+QHckSSluYSxGWVdtbF0sNSU7TGA/KGwrImYwbF0uOncyamtj'@;
put 'd349fnZFSFphTmJ8ej9HWzokOD93OjUqMGVFQSF8JDJORGJrMV5XN3x8LCI1e2VxeC9VaXJXQE0ofDVwSCM5Xz5wYV1weDk4cylDND1mRC5lcEhEWjpwbXkzXj1JR1NUUkJsMip8dFYrOERHVG4mIWIpY2I2ZXZtemV6d2J0aVVwTVdSajZHVT0rT0FDez11ZkJrfDJlTyh8WFo4XzY/ZXhFLEZ6'@;
put 'eUEzTlJNTkw7YmBuLnMuakohXlRHdlcjbS5VKW9tR2hVQENsbzQ9UUcmJT8jIW4saz98KjU+OWZaQjhQQWNCQkIvK2RTPDFINVJdSno0ZkRVTHhpUTg6eT0kNktgW0A4ZFYhcVpYQmZZeDVxSzI+RHxBc3JIIUZPMG9YRT8zPWFdXXZNL2lRRGB+KCZFZ3YjKGtxVURDcnJiO0hxQ1BXIjZlJlk1'@;
put 'dHVVXnBRNU9BIVE/PXR6RWVZJjwuM2JGNz4hdGMmfkkmUSY5TTJwTEhCa3MiNUd5W0N0UmBhJXNUSmRCZ1NQYihUNChaazM3Y1NYcmVhUlBBVF91fEk0NUhLYTJERDBOWzdsO0RSNnNvNj1ZbWlrZX1PZSQ1dlIuP2pCWVtZRWohfVVEN30jZlZkQG18TVZMNCksQGEvNEhuL2FnJlJaWnNKYD5s'@;
put 'MHJdTnJmS0BtPjQ0N3tLZzZQSjp6NitTWENDNGw8KiJyUVpdNGZkR2pPLkJneyM7dG8xXSNHbFM9VDViUyRFJW13YEhPNC9NIURDfmQ6dTp6VTNNNXp8ZVhWWll3bXVRIn44UUxMZCg7aV1xSDMiK3lnazBSK01sT0B0ZVtqNUdZaGBzZFJXSkBHQyZYQmFSK2VhPWg4SVFPSzVPbU1iYEVlaShU'@;
put 'PnNZNEA1T2xIZlNKYDVGNHRkJUteZnN9VCN2cnswSXJFOj06dDReRmlRKks/eCEkQWd6JjEkeHBySTgpMURkMVZQUWRTJSk1QmIqTSNFayVlZ0N8ZGdGeVU/IjxhVHc8Ll9zW2IpIUpRTCI2ZDV0XWteOE1KRFVqIztNRD1TWzVCXWohc2kuaTlyMygrKF5zVGlYd1hjWSkofiVoXygmO2ciKkV9'@;
put 'OllLeHs+dkAqOkV1bzhranhzaUA/VGIxSVk4Llh+bWV2KlRXamdITXp2aU0iWjpJWko+aHFEOlklcTVlU25Cc0NMNWF8WD9jL3gwdGFYZHBSZU9vQyU8cDA1cSNjZz88a19jOVRHXmVqSUwldkdRdjFfbzZfNlhlOnZpdHZEXzlbJGNaQnVSbD8lMUlLUjJARFtIUzJadE1lSk17XkklLER5XlIj'@;
put 'bH4+dFN8ODI7MSg4X2s6XT10UCIhMWlfUHQwfTMsVSp3MDMhVyx5Z2FjcU0xeGduWU9GaCVCXzQuW3pnK0haMXJ3Y30xZFhMXVQzUkpYKilBRkI6N19XTnB2V2BQTTNFIUlwRndyR1RvRDpKdSlUK3tXUHBUcWlxfkImL0crIVJJPnI5ZEdbcTtvbU56NVlfIldsRlpoUlc6WUpCZiEmMFteQjVm'@;
put 'ZkE6OipSKDBYWkhiOlV8VCJVJWNwa2JwLmtbMHdLSTU/YW5mWiU1eDBmVGlublFfbGZ6Q1V2TiI+aVIuUH42dkY7KzhPKDxISnpaVTdjKUhvRTMiPzRXKl8yQyI4KUZFQjM/VH11dU1EfGAzZ2AvM2c2L25eJns9Kik8LiN3cUtseD09W1I9UFFzIjVfX2h8cjpJNU0hJCJ7WE9Ca0YscDtFMFdo'@;
put 'di5OOTFrezs3JW8mKlcqJWQyZGg8bGMyZG08bCQ9SSR4Y1AmTG1CUm0zVV9FUloveSx9LmY2M0ZRRGcuPjxmM0dZRUpPYC5Oeit2YktjKT91ejxzW2NsP1M7Y3c0a2dCTzdDUl5sKEZvXXFxQFQ1OzdpQCN2X1QjczJlZFRPelBxPGUoK2diNXZ8dGhNX04qW3wzfipkIjZ1bjY4b2xAXU08czJV'@;
put 'YHpNIUY4RDpzbVEhUzpvKH17c0NHTndUZHFkMSk0IVlZOF5ucChAXjdkbTskVzw0PV81YDJnVWQ6TUtYSyNzcFpLL3g5TWklOFldVTJIZFJpMlZBME06OSg8cmlQNyFtU21QcWkhZSlGPVdWRz1oZyFsKT1ONkMwYUN4YkN8TCU6WkdWe1tRUU5uRDpyZHtNWlVzfUp2JnE8cGBtOnAuRX1zVnM5'@;
put 'Zkp2PWo+VjJlJX1AbXZBb019X09pOTI9QCt9SnkwM2hJLjJOWD1JO1N3VWZ+NWtFY25eMyYkKStdMTxYKjtOdGJeIVM9QWouU3V0SmgoWEh3RFkhRTdffil6aDtzYSJEfXJVSCo8LCZbeVZdXnslIzd3N2NdR2NxKUk+MHwjU0psb017S0I2UCVYZyVPUSg7L193dFt1SXw5VUA9SlRPK3J5dTFU'@;
put 'dT1QaEN0Kl19X3JfNUNGPDpKVjhqX19Dai83RzZWXkx9PV5ra2MrVGk+Ilg1ZHMxI1ljTntDMT5Ze2NSPz5aazdYWWJVKVZkYWRmYH41UVUkc1JSY0MsSiEmV35MIWV5SFpTeXoiZH5VWn1MQEtLRGgwLCYvZ1RyUzQ1b0s6I3NZUU1OSlZAfGMmUFFhdmJeQ1okWC4yaiV2eEdzamMvKnJnMWFG'@;
put 'RDdwN2FdSnBbW0VVVG5ESTY/RTlvRVpMQU9RTDM0SCR0b2p6MXRAajtjeS92cWd3N3ByTmhxQUJjblJdYkd8a31qTWlDKXYsbztaLlYwPyYmdTBmT255eSl1VDZWLkcpSyk1WlpyanhzNmIxJE9pa0Jvam8sdVdAblYpTCk/XlhHel4wN1Y8RiExSDVfX1lJe2NUejlEUlNXUUNfK3JAfmghNmNg'@;
put 'OXchL18qTFo+ImRzXShCYUxmOC59TUZPO3ZWenJaeSJIKUNiOWA7KDdmPzZ9WGpbU20rKXxFSDd+dCtzfFhWQDxVUW5mdEhoYSprckNZa3Y8Z2FpLDt0JFI0dGZxOTtGdnxrXTE6RVkzRzxDWExmTHVCMVQofEl3VE8rRGozfDhWODR2bVNIWGIsPCMqeih3X1JKcmtNbkZMKlBUYjdVPCtNeklS'@;
put 'cys/UTVkYjxyRSUlZXFweE5LQDM5UGRXRkVOX2VNWFNvPElZRUQvaTs4bEJmdWdBQ3teZHh8eDUqPjNGJW5LIXhoZER8SyFbNXV5ODh3Py54S0tfQzdnRip6OTJadEc6YT5xSThrUj8pUTlMZTp0SzpROiFdJnFATmtGRj1mL1V9U00/IjViWTNwNz9JNztFZntncHhKc35zIzYrSz9MQXx7dWgl'@;
put 'NGBYUyp5eyg0eGpGISZ3VyVpO35nUTJ+blNbbDIlYz9eZ0MwZ35ob1lbKUN9OEUlOSZnKj9yYzpbfEhyKjJ6QFdJeSFkUF1KcXBWaDB6L0Vsb1ZLS0gocXY4YzA7L09OaXFORy5DRn4oQiUuIng1JF97RXB4YmUlNEpRTnUzZDZlYCh3JCRNPHFUTC4wQ2wmd2shUyNgMkgjMEpwZHpMQCE5Mytr'@;
put 'L0AwdShTej8+VStMYk8qUnRIKjFFO2xCN0RZYldSPEc2U0FyQks/RSFlV2BtZ3g5IlIyUDFTcm1Ebm9DK0dtY1NNcHB0Q0NKUGFja3A5aGlNQTlVISFaQnEvcSFiR1dLNHo8QXFVR341KGpyRlI8dU8sYzdEQHk0PG1nRUMrQitwKjt3VEw0T2A7KUxOR3U8SFBWZnspNzUsI3FvQUs6fStoTD1M'@;
put 'QncubnNMfWhTVEliWFVWUStkL0ozfjcpSy5nPT8mcURQPV9WN1BYailURHM+XmI5WCYmM3J2PEBMOGx4cT8hUHIvJik6cT1wZjBMOCx4REhEbmN4M3BjW1BtOyZNdGFYQnV0MFhlaGQ5IT9EZlVLNk1CRXVneG5pT0A+TGE8NX1NREgxPVlTMygoI2R2VVVodFNzPHV5UHphT1ZWNiJxM3EsO2Jz'@;
put 'JiFzeWYuUCp0elFDfHZRd11BV1hMUjJbb3l5R3c1MlsweD4lKUxxOV9ocmB8Py8hKkNxd0pObHpSMWUjaHxLdWFYRj0sZSRaZWQ0S0s5Vnh2eHlKUUNuUStZSTB3cT4pZk5HLFEoP3ZeSj02MXR7UzBoOmgpRmBdU182JFZPI0BmKzkrWiNAOGh8NTpsTSw5RVBHcEZvY0lwWyMpWF8xOX1OPSpL'@;
put 'PXx7Z0NRYTg+QSZ1dFokUUhMTiwhZ1g2dSVMQE4pL0xhQyskcTxuPjIlW0lGVldERnJlZ0s7MjhDKlloSVZvQEExVGJmQEl8XTskOlNmQj93Z0dHdWM5U2RJNzJUVVZWeFUwSkA9K0gzI0J6Y35dKFUoNk9ocy9va0VsQWhwXkhgdjt6MlNebVV9IXNgLmkyI1RRIkhyIURCbVcxInVtUihCeEYi'@;
put 'YX10WjAzUDBEcCRHRXFzdyRhW2NeRWM/d153TnZxWCViSU58XnAvI0NNJipoIiZFWjdJWn5FflgoeCU2Wkc7cXN3QlQie1RfaTVyYDFeL1shPyFTRz5abG48eGpVPzRrImA/b3l0JCptXjxuNkVaOWUvaDk/Y2VeKExfKzo/eDduJXdeZEQ1fTh4NFZENyldVylsXTBhIm1hTzdYQHBkdzx9ZDxs'@;
put 'X3p2TXpyVmhbNlZLOCtFUjxbViVXTChYRz08b0VZQ2gvKWE4MTVsUEMofTd8fnJsNTs+fCtKNFpARXQibngpIlBQbjwrYzh+O2FJZXwwdDNlXyhwOSNrVjI4Q3RzeTErOkRkY2hiWG1wOChoSig7RmljcVo9RUgyZXNgK005P3xeM3o+RVI2QF5YZCF2bmZZWlVvMXdXJXI6UTtJcmRoQTJGPklj'@;
put 'LlA5eSE7dyMxMCYoKklHKSo6Yj1MfUBdV2hdMVN8N2NeP3VyOz5WZVBYI291KFg3eD5DKGlhRkB3STsvdT9TLiYxfVJKRFI1NyomZV45Xz9ZXT8ke3VaWUcjZyxYMmcxN3hreTI7QWJLOzExcFNJdk5MKFdIWH5lOzZ9fHp7WC4udzU+ez47TS5PPkI8V34zQ0xmLHBrKj1TLyUqUUMzc2k3fD5x'@;
put 'JmFnS3UiMkB9bzNBP2dNbnt5L0hfYnlaPEl1R0BDM0hDXmZtRjs+cXJaRm9fR01ze18sN1FXVHxMdiRzO2NNMmhOYnV1Y1c3RSxkbmI3Py9pNUxxJD9TMSJIb2xqYiF8JGNGPztrOixWc3hAe2FIZSx4dWg5SnBbOGcxbl9LWDQlVXpWOCxpSmw/L3htPjtIKTVgX3V6Mm41MkAxSjE9TF8zVCw6'@;
put 'Lks5bGJGRSRueT08bWxAMnooLCtVKW9qOVI7bSRHK1o1LmMsPllEJT1EW2J8RTd9RS85eFVxd0pNazdWZiQ+UG9iZCFEeT9Ee2lUMTN9ei94Y0lAMVIjJWJ9ckhvU2AwdTNxPlZIK35nfCNydDtSOShUeEkzcF8lPjNIXkFZM1dBT3tbRXg3S2twTjBwWGdXVE9yZi9bfXJAYU44c21tKipqbWw3'@;
put 'NztjUkBVOWBBW3lGU0k4Q2BGS3hydnNvfWNXanN5NlNySktockNlVD9BdGY+JDxZSV5XUU9MISlyWn5mOVg1YG9KOCRMYWJ6MlJIYXYvW1h9TyVCfHxEcjBUV1hZTGEvc2E9TSRQZjRaV2kvMmRVYSl5WS9RNDlaYn05Z2QjPmBseCNpYkYxcEBlQkQ5OlM8b015VUhuaW4jMnl9Z151TVlhU1Zt'@;
put 'eS5KXUc/YStPdVd1WXdpaW17MFhuVSwrSj5WXm1iVClLVm5xVzVQWzoiN0tjJSZgSDoieFBgVSpaOVpdKmRvdylLMDJUI3JrPkBgMXV2ZDlkJGo6ZlVPVm0uQXcrfmopNiZIKThqX2x6W2RMNUFYd2VySzQpbFh8dSZ6bGcpbk9TPkp7b0Bze0dFeUxyJHwjQVIidnhweyo3TT1GYmNvY3hyKz04'@;
put 'Vz1JMGpTMExRem42ckQlbFdvPklQJFBYIzgxTns7YThMJG1GW1c8TG87OVI9OFUqWUojMEw/KkFwKSpJWGZhU2guPH4zO3xqTng1eE1UaDgmXT0hREw1KDwydyIxe0p+MURwVDVsY0gseiFNUzF3SVBHMERGWzBDY3t6Y3ROdERJbTIxfTBrJVpQfk94RFYuQlQ5OiwoLilKSEBJKWUlbnclZjde'@;
put 'dXtVbjokT1lzLlR5MkJBRmdBMyR0cHd8VzZHa1VebUFBd1JXT1NuZ0w0eGlbWEo0R1NLVV9VZlhGYFFGJWk+VUJMIWBnLFZ6LHAzTEVxJk9IcjZqIl5VKVJUYyRgMz5TZHN3a1Y/OUtqWz54c20ueVoqfnFuMFczMEBLW3wxanphZjZGJEQ/PEhEYF5OYEs5eUdiISI9SUN1Y05PamwlOjFneD9h'@;
put 'bn05VSFhMnhwUyRaUmFuTUshZW1BSih8e1pnYjEyWzJ0YztHIj80fXhpT0Nnc3p1LHdZR1g+aVErTT9fKGBKRF44d3A9e2d1PiQlQCVHOVhRIWA6WDVzIXxyRmhFUVlde1tjJGdXT1NtaT43ZyZkUmNQODQ+ZWdFMjVsbV4mSi4hZTZdOTA/c1ZQM1NNPV5RNUI2KSRlbF5uOWQzYntjKW9yQ3kh'@;
put 'NFUpfUFUKHdINDlyN0M1eW5oZ3loSltNam9tfEcwNHBkMVFoRjJgWS52MS5GazBhKnZFV34/XWBiV2J1V3BULjRRWHFEcXE9OFNaRmh8emMpPHdtfGBnY3tXOVh4RnI3S2haTTNwYkhGUnRSZVVlJHt4SkV7W2VrWlVQKzNiInd7SnhzbUhiUCJBOFg1NWs4T0ooUUpacE9gX0ZwJkY0bUtaXSQ1'@;
put 'N1lsPyx4eGcjc01XX3NwMSEqdHREcFRWN09ASj0ocz12XlYqemNaV2JhXjRre3IvWlRtfDFMV1ZuJCR5blpqQDU3Sk94P1MlO3tLbXNrWW1gM2IleU9baFUmZ2xCOEsyLmAyKzs8L141c3JyMkdNaGU5WG49UF9qVStRYEdgSVg2dytaNkt3PWNNbjRqbS8wRV9SXSl6OXJvcT1YMThMOkt6NGs0'@;
put 'eDJYJDZgPHh9OEB2OGJ2VSJsN1guSkBkKTBGekdtJnJSRypKZnUmPmIleDdXdUxfcEM6aGdJUlM9KGErNj8vYXcldCxJSDRzXiJ7fncxYGxOPVQlTWRROV4kfUUhZlAwTisybGRhaSEuXz5DNEBYLGE8VzxLdStJWzAxKj8ocj8uOyZsLGorZUsqMyZeZ29EQj5gOyhxZEsrdW9fQ0I/Xy9QL0Zn'@;
put 'b2RTOXp1eFRMfHY2b2wuM1pbJUUsMUo8JCRFJVphIUJlVWJlLlpgJD93eT8uaEsjVypERDlLaUd3XTw9KjxTdi5jY0dsUE8pInlreVBvVSt8Qjlxdj5PfGF1VUZZQnkpMFVRaTh6KCRLMC9wKig/I0pDfiNxRjhjbFJTVGZwc3E0XkowLlRMIiZ7Pk9DRjs8WH5PbGdzSDE6c3xtNnt3alFHeCs/'@;
put 'TGYqRXM6e3hxPUZJLylJcj1weyVaaENjKWYyalF5ZGg2QW9iM05EVUwhZDU4U0cjVGVbLDRDZU5IRiRIZUM9WGBVd0E4JXU4YT0mMnM7fkRwbHFRViJIRGh4eE4yK09gaiVzOFpnLEV0ay41V2FRN0woSGVRU31rNX5eWiRCMTZSd1tmUypeMSo3SEJyfCFwcENoLyNkWlIoMVMxYmJGO1ZtazB3'@;
put 'e01iL3V6LE5pflo1Nno5QC5fdm5Hc0hTaXpdJXdVMHNgfDAjXWB5Ilk4eXhEZjFUen5qRXgrMyxrOiMqMiw7bD1HS314ZWh4UT9hTCN+PjtXISQ9VGYien50ekVNY0RNL3pIK1I+diNIeFRXYTwhV012Nmo2ZFclRTN3JGJvX0NQMHZEaGxCVXE4OENiXlgrSiV8KF5YeXRuclM4bXJdaj8iQElN'@;
put 'Z3lqeGBhU09DIXx3XmxBN2U3ajMsRlB8T2dXWHs2O3heVzN+IWsvVGFQMF5WJjhCeGVvbGFhejE/Tll4RCY3Lm1wPkguWD14T1V2b3w+VkFQRm06ImI2UnZaQX1vPnQwYklBWjpRYW4/SWlPeGZ9REE6MS43cz9NYH5ZZC5YcW1fXUE4PENkJjAmcklQaSpAVUNYIzdsZn48LGR6XnVIezQkczU/'@;
put 'e19+Qm9RI3RFMWAmdy9VeVRtZU4we1AmVmI+OH53PyNnUT5ASGkzRV1NK31iLER6TTpaVWx9Pm1TWUc5RUZmanp5dEFmISx+byRKJlZDMzJsZ0dhUVVbRll3U01MajxSKTRiXWtjJF1VKkdWRFgqVCpsJkY6NVs2XzgwfWEyVzFecS5RNSIpWiFzVWgjbHhFKEwyIU5tTCJnWzd0Xl8/KjBTK3Fq'@;
put 'bEw5cVNILCZ7SFtXYnhJX3p4VWF2XnptPjB+YUBacWpEajl4IT5vSUBVK25JbV5OODJIdlhoeltePi5wUC8iL2spME4vRVp7ZVRXYERkXXJbfVZHQnNNPVIhO09CeS5AOVFVPkZtVGprbyE0XVVucz1fZ3gmUWd1L0BDeVQ3THZKJEh6QnxERV91VVZHNzxVUVt+anIpS0t8UHF1O0w4Z35kfG8j'@;
put 'eyVSdGZaUVI+InBFdzRGdSxBd2t1X3NZU3B1QihnQDAmOzElUih9PSsufVNSaz9zUiFlQUdhKFdQbTF2UWVaakIqW0FzaHBYWTBqYi4kNURyaFQ/LjU6JGE0PkFsfXd9VCxlKyFkeztNZy9oVl8+PWFPYEVLfF91LilzczEjNVJAYWAxYzZfZk06Zkk0NkRQNiNrU3pbRnVPZVBuYEhLMDJsVTd6'@;
put 'RmM6RzYhdF0/SU8sNWRSSk84N3YkNnlJQSJ2LHY3SzhIa2s/JkNfUHZUVCZqZmlyOE9OLEJkcHYpIkxyflRZaix1YTlOeEFySW1iJSlgc2tZcGd0IWRaO3UiIllmKm1jTFQvWFZoPVBrLzZMdDYiMjI4bl9aJSRjR3NDO3lxQHlRQjpJb2YmKlZzKipKcUwlZWFGbCt6W3Fib29jNl4/eH5NNSk6'@;
put 'ZFJfSXQuXUYrSWNTbjNHYVcqd3hGLGxaWjEsVyh2SUQuOklBRypJV0dhaz9FQGVfPzZ4NDlxbn1GP0tBT0NYITZYNzkvJTYkJXEmJmI3Lmpie3hOZCRpbHp8Kks7MzJXZiRlKVNvPzkhez8pfXdjSCUzXmBYMGdaLDc3Y0Rmb0NIM21lTzw4Km07P00+eC9zJX02Ll4xUFs8RzdWUFRycWA9Qk8i'@;
put 'ZV9LTVc8Wz97K3U9cVpgYzNANFk7fnxwKEhKOW17djQiZTRKQXVnPzdyPitAdU99KUUxZy5wIzN3SDM+RkgrZz17Syg/ZEp3THcjQ21+NlB+O11RcCtZYjM2PjhmPjZCRTNxSHNyIWZmKGJRV0x2eTB9KkNTLzo5bGRzfj55JFImZDo3byIuLyFqNEJ2dj09TXdtQCteaEc3WDYxfVJpRSR8IjZt'@;
put 'Z3pqMFBJTXN3PD1Sd0BAIyRVUVREZCpYcklfMGI/RFswOiNteXUiKFo2cUdIaWFoaFVVMXQwbGM3TVMqQG93I2dOOUZJPTB4Xj8mIlpiN3k0STFEeiVaUGwmdWc1alI2dFM0fVZWYy5mQTk2R2ckb1skZUlzZDlCKCh2bGo+ZWllVFB+SiluS2dJSzIrX0ZfQXZKTD1tMFJrfmRuUHQqPXc1SDBd'@;
put 'dCk0YWlDN30pPzFHOnhEJHRERld9ZnF8Sy46WlVRd0xtL1hRdmt+Qjh4eHJQZFRVRUpmXW1iP0R4fig4KCQ+KWYlNX58bnFoOFUpMFkkNkl4N25EXnRQV11ZaVBVLGowUShvPGAxSVlTUFUhN1VQeFRVKFhXV1skYF1GbTAjUTwhRXxldjtSM1N8eWluQ21IeTsrdENIQCkhU35CRzNKOEhsKjhP'@;
put 'eyVSb1pSWUEiISg6OkUlZ1hVJnAmNSZubGV6KF1+K29CbT0leSIyMnove29yWGNqUnx4LyQ5IVVZIyswTDImaWdUaDZuWmk6OihpXXhSL1RfM3B5cGY9OjlYa0lGcklgdDFGfit3X2paJFtsdmdLUUlLJE0pXVZ4T1RdfCR4MjZrUWpzLipZLCVRX1hiWShCdjhCbCVKWSFOOTNrZlNUU1lGTCxU'@;
put 'LFtTUDNlSzBeRU4xWS4sIWwoM2EwS218d3o5TjxmL1Q9a0o1RCZJIjRGOFQqfFV+JU5aTEQ3W0Z4VD5LbD1OaStASEI/TCNvaEUqUjJ3LGVyXz5rRn5uVm4qZ0lSbC9pKlJEPntLREdYbiokQEdoNXtlIm5WbWJwZEh5c2NiZ1hVZElKdEtzYDI9Wyp6KEYhfnU0L05qO1lYR0MoVVUsTmFNZkcu'@;
put 'a3c0MytEQmVDVDNmOSlPSFNDUylkPm1eLGRQV1B4NGBfMCwxeFA4JTNBYFlNZV9ZMj08JThmOWIzeDlkMyt+eFokSH1YTGJJRzkjP3Jifl1RRz43Pz40bjUmQVk2QF16JlczI0h+Xmk3S1J3TjFEQlBLVCRFYkVGXSQxVCRzZjE9ImY3eltka25Kb0xEW2U7P1ltSCkqczpEVnxYcl5MKyZtSC9z'@;
put 'RGlpRzUyXlguOi8pVCUvJXpoYSY6aVsyUUhQOF4kWFN8ZW5IVV5+N05ZZWl4eilgNGsxZHFDZ1JRSTFIUm84N10oQmlubS41QVJZOSJzNiUvQF4+OihYalNzSiJoOWN6fE1ZaztFcyxGMVRIMkh4djc1N3JjPHlpNiIuPF8uLEU9NXtJSVRHRTU/U2VNanpUNVQ8bV8wa1E2WUdSWiQ7U25RS0lL'@;
put 'YmgzIWh3PlVFWUV2dj5sWmw6aSF5S3NhWGhZK1g3NSJqb00xbzZlNT5tX1FXMFNXQm04R3o5cHJWWWM7S11EfklkY31SSz83X0MvVWhZaVNiM1JXWz9raDFIZXVEXnpGYiIyeyw1e2FvSUEpXyNsbWFnP1AqeW9iUzsrZXl0KCw8X2pIaF9eVVFhMChKW0l+aXZARj1oOTg5ZXxta0d9PztvTiVD'@;
put 'cGBzSlRTaFNJKF91R3YvMk8hUHR0WW9rXTJCTF9KL0RuWChjZF06NnFIciRnLlFmZmZfdSUhfjoqSiw1eDRJUlF6ZGpQdTkwNGNpUGRPQWVYJER3YE1IZWFdcVh1PT5pTF84dEx3MW9vdTRlamBWJipkRnYqSCUxRkV3Z2wlJUNMcGN1MFsuKUJRIUJ2PGg3TW9ROX5JTlhpVGpURlhfc0BAaTI5'@;
put 'KSFvRkxDXUhkX3xvOD5KR1hvVzBkfXdWcWlsQ1RjJkNVd0Q3fDZNbXxbdktaPHtxT2FFQkdCcz1qR0prUlFycVZ0ZzYqUkN3RlZfYShaeFE1bkdWe1o/YldoWW1bZ1BFPUlsQFEsdEswLFheP0JlQ1gmczxvKWUyQnUpcyhgMGdZQll3NVdZQmMmSmpuL2EqZ1dFKkA0XWZXaSRKTjZEL3RSQktY'@;
put 'eF5aOWhgMnl+VmE6TzAkRH1YOXpATk5Ye1VpRjRBeDNPbHhkYykscVlhcTolUiVbSUY7Nn1FV3thWDxGTj5IeX1pOXk9VUYya0xCfFt4KU1XTDFUcVldOjxxL0wqU0d0S2IuaEtUPkJNe1VmIyZrZiYvQDxjYTpvMzc7Iyp5Q0RzZVpod0ZSOCo0fVQlL3RIU0piLy5SYnBrNTlOTltndmhpOkRk'@;
put 'XXUyPXE9ZW1oWkQzeV11R0hDXUs4LFtYKD91LjA6KzpdYXMpKDdIUkA3SHxRb35xTnEoIkojZHR2NUQyO3YwMDJZUmgmL2h4SHkyT21+S1o9bjpfQFlGSyN+PTQjTDtjSCx9LCYmYm1kUyE+SC4lTTk1fDZpQFlicFN2STBRajUxNjFDMFZQVXdUPFowRkZFZyJYOmo6L01BeUMqLCJDZko1XTNM'@;
put 'Lj8iIVs1RCF1cV9JQip4cm09I0ZiL0BXXU5PMGo4IzowQzNCXko5PT4/P2pjN1IoXXRKUHdGdn1CI2hfU2VqIz8mbk1HbXp+VmBZX3lZeTl2V05RVW5PbD1rPmRfX0M3ITdjWSo0dG9BKnhYS2k4OmZzNnl1ZVtsM0hfP0NwezUmaWo/JCpTUi43WFlVW1hyPXBPRFFtNHh8Uzc3RilBJj5oTDR2'@;
put 'UGIrKjh+dEdBfilYODNgbWV4TjlRPSs1TjApU24wcVZ2IXIwJH5gSDdGTG5nKnFvJDJtdmA5SjAlYiZAS0JaZkg2UjdoY008ZjxHWUtwSlcsKWQ5PlhMZ18mNG5mS1hCYls6SV5pKE9oI0JXNWskc2RrWmFhcjcyTlFMaWxMMURDVHowYzZ5Pi5RTEJ7USh1YjVmLil4dElJUFNzcHh7Om84WVJ6'@;
put 'I05geE9+YEIxSyJyMylEWjpSamdqNj10Klh9Li99U3FkLCVKInk9SXd1TSozLnZgZj58PEtZdXJnKGR0MEd5T2pGckNDeG9FXWFyNXtSIkxOTnl0dHBFc2A6Oiw3K3w0QjhsVjRKPSFZZDtiVUhTMXU1ViU7RUs4RWhjQEw9YVlRMDp7cS80TFlvMXNnZHpibG9qOmREI1lrTWkuezJKJHpsOWU8'@;
put 'WXE8IypML3Y+JENXLyM0RHh+ODk/Q05NXmlmSTMqYyksIkdwPCZgQn1CS210fjNrOERaIWhSVz1FIU57e2AvNnJZeVtKYVJROStqdTpabE5BYUB+Il11T0BMTz5KXXFfcUFYJnFtcGllL3xgTD1fLEo2TUhNb1FpYiVrZnU1bVszcUhReGI/MTtzO2pSfmZdRWRUbiU5fVdUcjNUKHY6cGxTey9e'@;
put 'bEhYUHcqdCsyM190WjJPcntxWHZ+SyFnUE93VzhofkVXYm1tamltTShsWWs5RCV4eExmYXk1YyJNY0xFWllaNWh0RDApZWUiSERWMlQydUssT25ye34yWyNwOCxCJSRnPTY2KmQhNH04PE1AOHtHLkIqPDhfRTZPImYqZFJKTzN5Oj5nXjlTdVpgTTBIXkJVU1BEJjE8eEZ7Vmt0UT9CT1lbWFVW'@;
put 'MG5jP1h4NnF6KGxmaX5hP1t1RmZQSCZbdV14KFRsU2NSSz8oeihbPGM/b3h6d0VHaylqV2FgNXV2S2ZrMDt3Q3QpdThVVWlTaXBMXnozUH1dWmAuL0JOMXF+Jiw+WkcxT0twUUU8SUtWUyFGVGF3ak1OYlg8WGp0WFNVMkkkL0V0Pnx9WWYrI09CP11Qa2E9N2FDRS5jKj9yUUhXeTZ3QHJIS3p2'@;
put 'QlE/IUFEMUBtSGdmMDRmOiZ9KkFUPzgqWHduY0BAKFEqVlgoJjJEcXUwOmNneGFsI286aVk4dTpKP081PT8wOzJKMCx8SV55N2h0MTw4JmdZM1RVSlVNYkxnVk9JVDYvMEljXl19O1IkPVRmYDoxXnxmQUROfGJ3cD5zOlRFKWYvJmBNbSFuREVMMio7az9ZJDwhfTVvLlVGW04vRFU+I3g1MUU5'@;
put 'a3AmcHp7MDRkflAqYXV3NiZdNWVFME91TDZ1M2woTDdEcERDJkJKV3R5TGY5d2hTXVtMV1JhMG96VT1QODVgUC5aLzo1ck1ueWIiUW4rPlM/ZSRMQnVeeXwhe3VTRFhJLjkmPXFGb3BDJVliVHFwJlslVCs1Kl0iclJqK0s/YnRbJEhPNFdFOkowUSlKWlI4Vl1gVTolRWFnN3ErcV0+KlhLR1lS'@;
put 'Sy8xQ2J8Ni9WZEApaCtHVS5wU1N3PH5wSlZoNGpYfj9xOFFReFdvWUh0OkQqUXBOVyNQdGxgYk1dTTQ9UmdqIn5yLy5YbCZxW2wofihbSmMyMjlHLEI3UjNacnhmKWVuLigyKHNJfjlma0w6c1B9X3tfW3FdZ3BZQ20uTyFnYVlRO0drN01IKENROyhmMlF5bEhlI29zXT9AOWNLdlNoMT8uO2Ix'@;
put 'UmguVyJnWk5BJXRSSUJGOntYa1lWbXpAR0Fpcz9fYXJxVGJIclJgOkBBMSgvZGFBWmwlWElGV3FjaSspcGJLK094PS9tOCZaKzNNQXJGUSM2ezt9e2pAIlZ8XXJZMzpZL3d6ZjBgQiFxZWssXihqTFglNnJ0UFVke3xlJH1bVCx3d0RjRVtvQnlDZX1TaHRDNSVBT35+SjtiSGo/Vj44PnxJZGk5'@;
put 'Q3ZXNC4ud3Riai51dGJvTEx9ZSQrYG9zLj5PM2d4b0heeHhnU1NJVkxFfHZ0Ym4qcWp9ezg/fTVwVldSNThhNHw+TmJvW3ZuMF5qLChvdixHZ3xNZXUvPlVKJVBJM00+Jm12c212Oj0/MiFyLjZKWnQlckRRdGVMSls2Q2RpLDIqQ2QsIVpTblNqI0RhRDQ/dzFiLk5OTDUufFdETWZQTWduYm9p'@;
put 'RV46ZElXQW4+X2YsQkBFKjI5PzcoKXJ6aFZRY09DQTY9ZUxGJm15Tk5GPUp8cXIlNyF7Y0h9Sm9qT2MsKlI6PmwhajdCZGxxczBtTylwVG9RNSR5RkJeSG9KQnhVWyhGa3Q5U0hUKDkjVkB6OEkhSXlsOTJJbzZGR2BVNVBpVi9QK3EkfUheaDk1QmpHNDZyPjNZLldvTi9gOms4Tnx2U0tWSz4m'@;
put 'PnRNNDljJCRJJDNMNWNLPz43els8PCJYRkBvLyE9eE1vfW9Ld2E8RTVUUkFfI3ZGXjB5YTVXZHdBQH5yRn1va0x4dklQRn5MRGdUSj8za1Zmc1NWR0ZaJGMvSSYmSiVFbD9wbStVXkppclhSUGR4WV17ektgej1kaWxlc0JjV0ViMXR4Jjs1aCNhMX4yTWtOOTIhKmU2bC4mRmouQSssU2pAP2As'@;
put 'WG16IWROTCYqfFt2NGRJQHt3Y2c+KEF4Mm1QaFI4ZyIjRGVaOFBWQGxSKilGIi4wNmFVdzF+Q0UqU0IwclFKZV13NDlOb3Z4cmxXS2BMaiJHNUE9NX5NQFo+dkckSkhAczViPnBSO3o8JSleRFZvQnNqa3g9SVVHKHhFUVR3e3d0QT1TX11xbSV3U1V1YlVLMHhAdXNaNF8zfHRGXXNSdiR1Z107'@;
put 'N3sjWEBtd35jYTJKbiQiJiFFck4pYXJqI0debExlVER5eEMsMXNyPzEmdGlmeHxrKEZTY3NpeEJJVXVlWG45XWpBKXtqR1h2O2dgbCl7VX5hfV9yOUYsQjEuJkJyWlZQLlN+Pztfc0crMTN6W1ZFJG5nSGV3YTN+MV5kLm9fZWVQIyUlZldLdnglRiZvek40bVlvPDZwVUd1S3ZjMVs4VEBfL3cv'@;
put 'VWlvdEVIQ3UucElqKWp+KGV8aClPfCEoQzlOOiNnR0VFMTRKJEo1I3ojVXVuOTBkTFJWekZoJHhRdC9pKHlZb1FKITtuMnNBLHV5PyIzP24yKlowJGMuWX46cSM0Uy5gQj4qMCFoYFI5WXdrXm0hbUcpYl8xezVNdTxTM3xFJWoxOWRTb1c1TSRab1BrRWdoW3E0XnVkc0chP3FhPWdTXWJePXFl'@;
put 'M043TSFIcWo4NCFJTFMmaGFsOGQjQHskKCg/NFVLKSVfQmM0bEQ4YTZVaVZAbHtZJEdsJUpXI2VsS3FjKk89MXxHWT18MiNjXktxc2NPRVdnPCRpQGY9Q1FeW0Q5cUl3ITMwbEZmJjRxU1MkPCw8PXFOR0pIT2IpfHxBZVZTKE1YNn4+NzE9M29WTD1rRSFfKTJidXxIYiwrS1pMY3Y+dll0a0Bt'@;
put 'PjVqZl1jfS9lTXV9X3ZzJGtyN3BhISRyO0wyTT85bFR8amh+OU42S1MhK2h+TCRxTTd4X0h8QUFDOXFbWlEvYmlhUi5SI1AmP09VKygyeFVFQ3BvfGA6bkNHU1hKSkkqTXI7e1BhazZxPU1PZXdAWmZMNnB6UlheXSxAI014OmYoQSsyLzApWi8jWVUuYz9McGNqaEdrb2RfQUtyL2c1VUNTKCFn'@;
put 'JUxuNX1VOjwmVEJyPT0lKFEpezcsRUd1ayxZTWowNCghRmF1VWVbIj9oMTowLHUuT3x7YiFjcXlXTlF7OT9sfTk3JSgxZ3pfYzNebUpYKktba1csMyJXMCl0Sj1oYmR0TjoqIT1OaylmfW56VjgzVE5eMnZDdCFiSjdCezBYe2VbKX5nbC5DbGFHVXFlRE9XKVJnam9wcG46R0VXI2cvUUl6YF49'@;
put 'JHYzQ0V1LlkqdF4mXWZyUmNQOzBdJFgzOzg1T2AoNmdTT1ZaKXd9PXh7WUE9WUJvOTYkRSgzc2Z8Vjg9bFYqSEElPTAwMmgxcF4/Ll9mYFFlIl9GUFUvaEo3IVUhT3BJWHIhXip7dXgucCtfLz0xeSo6RiE2MyQ9RiYjZ0BXQkZmXyJNeDloL3o8ZyErQD1dPVY2OnxjcyppeGVkN11NMkZiJWF7'@;
put 'ak4zYSZZQyQ7S1R9VntSbF9ENF9hPl47S0NiUmFOR2UiPUN3eGZxP0l0IW1hfipXVXFYXz1veGoxM3x1X2JNO0U0YjVPLEZHYV4mRW52KmJOXixFVEYzNDMjZWxvWW9TIkYqOEtsOU14KEcsK2ojb1VyRTM3TCVuTzZJKV9hfnV6IlVkZ00qVkQ3eVBtYkhiX0RxQmEqbnI6VUd0ejclQ0BWYks/'@;
put 'I0BnezEqSEJpMUZUPyF3dH5aJkZIbkVGQjIzKEBQTHxOL29INDxDez8kREAocSxMPkQ2Sk0reUdhdEMvI3MyMFdAczkkeC8wVyk/bmhRJD4vIiZPTlcsT09HJHNWUSs1TC5CMEpJTTQzTHBjLzlQS3UiNnR4KT5pP0doIj9AUnd2d0kiUC5pQ1J8LzFrOllRKXglcFdGQ31JO21zRl45YlpqNTFC'@;
put 'LE53YiQxXiFiPUolfkFzKF12SWpXdiE+SGNMUHgra0cqaT04KG1POkQ4UVFrREwsTkhwfEpLIlI0bVJWY2JeQSx5dCFfS1dkbjs1ZCQ7IyR5WTNITUlZdSNabH49Y2E4YyMjeHRMRmI3bipnKTlDSkZxOlF0e1NpYzU9b198O0o5YUZ4QDtHU3dtaW0oUixFRyw0JTkze2c5e2JxWGV8WTI5aVUj'@;
put 'SCxVSzsmbHJfIShaVXk1M0NFdXJOelUuc2p4LzR4XlpQJFJ+UX02LGdzfk5uTDJSREpWIiJxUnBoQEImLmklSH1YO0xVPEk9Pj85KGE4eVMreUZseEUibmhFbVpSbCI1WncpUFN6aGlTej9+bTx0MldCL352KHl7cm8uK2NgW0FfKzNTKk0mVytQWFo3Y2VCSHIvRWw5Iz1QQX5lI0o9KCM6Iitr'@;
put 'KCIhJVU1VjBZZGBvMmxAelYpYCVGKzg2QmQxTiFrW3MzKVVLL3FkUWVzW0twYVtkIUk6ZFd6VnB6VGI0bU5HST09OVA2b1IrVHlOfmJeaFZCSCpDQXpeVVBBfSw4eWlMeUZ+dU1vNzFxfXdQMHdRI3ZiajsreTcrT2BqbS95OzBFWS5JbVp6cmI9X1VlXnwuSjZsQDhrI2JZe3I7bEBqdiNGZy9s'@;
put 'UkAhP2RUO2lQb018ISg7clZ5aDtadW0hci8vND1qTEJNdHVAI2NTaXVZaytxSipOV300S3pnXVBfSDRYN2ReU2NFeFF6ImFgMXtfaSs6UUZkdnF8RG4rfVguOD5mW3dJaz1QRVNAWWRMTyFZZlZCVX1ZfDBfU29yYHB3UllmYlgoa1RDUnBoIWpnNXV9RSVJW3dMcE83aFlXbjIlTmcsYyxnMTNv'@;
put 'KjU0NVtDYDpWVERDKWpjdTckLnFGc2BeUSxuVDxdckB2cCVqJEdCX3xJeFZiTDtMNChQTTshU0BpOyJMXzlCVVp6bUJoZTY7VDlEdCZNWXNpTUhnKk1CWW8/aV15dGs5dFtxXmF3Xj91RHBUcm03WW1zQyJ4MHBhbXM/RS9majoxZ3IuMF4kLyQuaktpKFU2e3EoU1RPIyNaLHo5PTJ7WWQ4N2Y/'@;
put 'eTJTNnp6c3A7NlVSZVBwMmVZZjgrPUpNXVkuMW46TGl4YDt6YzlBP0NlXl1aTyk7T05heEx+enZGVjFXVFU5XWtGfXwjK35TfnxwYnRDdFlHVFh6MElwey5nL1A5VkdmMltzVUROJW8sKFZOVHheNWNnfTxzPSwkcT8vcHkmb2IyY2phVSUvX2w3JC90P2x7SmtHTmN7RUV5M2lza0x3fSlvelBH'@;
put 'RFt4OjwyRVhJZDVNaVY8Xk9FTj1YQjkoMCR6X1daKU9QRGVZXilKMGVlOU0ud3JbS2pTeGBaNitsUThZK1FqajIycmVPPS98LEpSLzwsYzd6NCpCeCV+VCg0YV9UJCE0K0ByVEYmJEVsVVl4eHBsOmAoYSNdMSpmfi85PTM1d04qInRbVmtkSXYoeEc+QClwfm95Z3ZWU3FVcSM6ckozSj9vIj0u'@;
put 'aE1aIUo5fi9KVUdBZVAqOkMqWmdMVH44ey9KNU5GbTRrbWlRaSlFblQqWz5mOmMlOFB5TUMleWImLkosZiUvYH1VSkV6K0csekouXXpFKHcybHF9bmJoKlR0NEUuYktVV3NgfT0ldnUuOi4zS01JI29kNSxSRzxWfDxWTi4mJT4hcnslYkElNz5JS3VtPlorP1lSOFJZT2l7VTVnY0xUSWgrZkNr'@;
put 'JnV5cVk4VGRwTGF9bGdiYTJKYDApfCVSS282V3YmQT1EKzhTNkRse2IuJGciQERiSlJwezgpNGNLeWg/WHI0X2gvYDpeWjskXjNBa3RLQDI4c0Yldl0jYWNUWShYXllxdTVMIytnS3pDeV9LIVtNUiMzbiRCcntTYy40M1smezA/PzhUTWRZNTM1e3hlSEJkbHBbVXM6ZndvNElhcGpbdHQ+Yzcw'@;
put 'ajVgLH5qK1VzejFjOT1KKiI3IkA+MEw3WSYvRUFvbk9jemZpekpFZFIhJDVFSHVibzVEPTAuMWt7PzVIXmpTMTU1RkdFSUwyQFI9elpzTUFieSM0XmI2SFpbLGBBWUs5alVnY0RfJnJDO2JkWGZTNmU2PUdlMD0jVVlEZ0l2d2ptOm1LaS5YVGZQOzFVM2AjODdlUWZDWSFwcExKa1VRY1hDNmt7'@;
put 'akd9IUhrXjs4dEpPYnl2dXBHby5Sd3lXTm94SHo7bDU9eHUhQWpUTjgvPiM9amQsa01BcllVUWg5Z2kmcVlQJiNlY19VPXUkIlR5MHRoQikzKk5MOi9xOC52RXRVbk5eOGxidEEiLHJxc01xYmU+S1pwOEQ8cyQ3WW07TDgufU13OSMhbVY1VllDSVNBYkNjR2dmW0RUWVchUC5wT2ZTY0kwfkdD'@;
put 'bSJ4fTVeJEdmUUlVMGslZnhRND9jUiQ4OXY3cSIxMH49ISx1YSUjaGlzQyE+RCNfK2NaR3ZubzN1RTJARSg5Rmh1TyxlZ3N9U1kmXWMrISh7YTtaTEAlXVZLT096TFNrSllTXSVwIUFddzMmakJAV284WShkNTsiNU90VGslNENkbVRHMzNXQXQiK3hnWz82KThXME5fcXxwVzBmNlB2c1lpbyM8'@;
put 'UTYwemQ2L3c9Qi9pW3A9STtsUV9TajZUUTJXQiptRCVdU25oOmx8bUlxSiNJLlJ8L1AmXUovMyFbZyh9W0MlV3UoMHhkNDIlKE1ANWk4XWFBbX5PPVYoeiV6JChMJllqbEkzWEo4bitnPExFRkVXaFdjVXZRQSZNKXVSM20wOTpTUTwkfWtrNC9rIlg5W1F3W1dkLkleJFVuPXQsMUdTSEdxfm4o'@;
put 'X3hTclVAfmVjdUliJSFQNjRkZWBdcUx3JkYsVEpqTltjL2pSaVc9ajxmKXBocyFoMkFKMEVvYmRKKF5EVH5LVVFWKW5wIn5JcFNWM3xmVE9SfDxCNyxwe1hUZ15PRHd+cilUXStNPFo5T3M9aElQe0VTZ0c8ITJfWEpEe3pTOClaOnpiJm18KjF0cVdyWkp6Tz87Wk13TGE0bi81aks0Ujd0Q3Zz'@;
put 'ITVkRyhWW2ZYUkNXIzUiTz8sdm9waURrdHk5OCIpWHhvcCxfPkhTS3U8cXp+WVYxVCY6LmNVe1swRlU6JH5YdyxaYTEuXnNBajxpKkpIcT83Y31FVnpiQ143eVEzakYlYyE7OXhvbGAsciY1ZW45NE1EM3ViRGc1WDNbRl9yPmtDfFo9Vlh9cz1dSHJ2KE9RQT40Yl5hKHwqWzxhfkFPW0FdISYx'@;
put 'TDd1UEMsZkkzLE8pUyxnczUudWU3JjY9X1JWYGYrSiJbTmMxZDB7SDhUSGVTR3BIVVVjKFAiOllZRWRDXmlGcCQ1KnlWMFpSXlE6Y3x2eENTWTZJRUhLeSZRUzdPfl1ST1hWaVhVPWYxTDF3T3JZTjlPJTB1L01+PyJ5NWJsKVtdTTxqUmlhall0KipZJFg2W3BtTEhDdy9TU29oNmdFbiJBY1V3'@;
put 'cWdYdjdiQG5jVnJlRGApZUhWYGp0THJPbyptbGpXQFFXYXg0bGolVWlTeXdoQjl4NEhMS1J5cyloMFtYMlpIZG5bdW0/WkdAbXBuOzJbXixdXyYqJDE9a35BIyoyQFRlRWZuY0Zrdj9FUyt3Y0Yxb0JOL0BLJWQocWN3TkE/ZWRKQ3xFam1WdCRaPDc7XlEoaDZTOjdmUWJJXm5AeDBNazRjfT1b'@;
put 'T2V8RSpKW1EhYytxI2tNY3RPSn1uT04je2d6S1U3ZFZZc282JCQoLjUsPEgkQWA4Q1NzL2RxTjE3Q1NoLllpb0RMZypnZTVFMGtzSGRqN3d3WGJFOikvOHcpQV41PEpmQ2BkMUNffnZ8Szx8YSlRZDFKZzk2dFo8PyN2cTRCRFZSfSlZMkJdIyNvXWJ3XnE5LG9jWHBgN15xPnduczlsYVNSbjhX'@;
put 'Yjw0O3dzbVBmYUE1O3tJciQxQS9HWit0O2BzVWg/WmlmKzlATlRJaClIY3Q9emIxPTgsV3RCS2cyeSgqcik/WGB6RFhnQV1YNkpKZlU9P1tlcW06R1lHV2JkRT1ROHlLMG14YkE3NCV8UE5VXXx8W2Qubn0xQj1LNXlFRyExfl1xKmc8RFRIaWNxPmppM1J2fSsuK0JTWjZyUUVePDw6MlI4b0Rw'@;
put 'PjZDQFptZ0V9fl55bmxZdigqZ0I/bj8hKit4QGxAVE5jeiswKjFKKStNNGRMPV03LHpFa2wsZFssVDBWV0NWNl9CKSNsdEJaJCFWcVdHUEtfYVhaR0hHTHhMfXFsXiQkKzAwOylkdChKV3dzRGY1b18kPFJWeXBIRWN1N0I0b3FCa2RDLERid1pLdjZEUmRLYChoKj5bNDBFYWF4MCZpVUMxN21D'@;
put 'N3hUOUJpYkpYPksmdUAxayt4OjYpUUc7WGMqdzUoPXVQO1g6KCY9biJgI3BXYkZJJFI/OjxsXVFBSkw4aHw0I2RMSDpYa1RQcysxZk09LGkvJGA9dFM0TiFwaFJoRjBJPStUKzBHKHhBeCJabCMzZV96M2VGSSs+Q2FnMXgmLy55ODh8cUZ5U2pgRC4jL0wxaCpmKEFpO3NONEEuIVslaUMhe3cq'@;
put 'KVM+Wj9+Q0R1NCljMWAjZUFATVJPZklXJmhSWChsa1M+OUcwVD1LTytxJnxSMHZnTW1RczI4d3ZsOHl8M3V3JWh3YixzXXQhQGJ6T2hsZ1p+N1RfJUpEMm85I3xkeFhlcW5lJVpZRHlOOltTPCtIVlFSK1RVTix+S2YhSHxKQnlsYGl2PV4xamk1R1RRR2Q9eCJ4VkhAYVBbV28pSVR1RWZVd2U1'@;
put 'UmpLRnRlY0hwWDdzKkN3P1JYQW9TZEorYXhkNHtbUmAkb0N0KDVOPmwpSDRSR0UwcldaTyouWCFdKnJWNTpqdiZgPWhrNjgqOm9xLzBfQmwyX04lVEZyVWhIMCp2eilbWVQ9W0JwWCZOblN+UVNadj52Vz15bkJZMVVMX0chc1dyP3pmfkksam5KUmMoaz87IWQheUEuNyVVa0xxcFVZM2IjeS5e'@;
put 'MU5EanI2ZWFxV016cT8+UWl4ZGlMLmJJdkJaKWk4ckJrRX0uY0dnT2kmaEFtaERYa0hhLyVNXytwSVFMVFhyRUwudV1genIlI0VDenVjXSYrM2RCTnZUT0UiPH5NczxbdVIjQzE+Pn1JWFhre0NaLnRBczBJaERGZU4qfEZAWEhJeSxldlBPWWtKYnJ+KyZsLmRBPXlbO00kRi4waSJhXjpQe1ht'@;
put 'REtDKVJCZFNmUEJRI3F9VEF1bnglbSEwdm5oTzs7KzAhc2RKcD9ZRXNvU2FkKllzLkZQXzBPLy97WUpNJWdEfiooV05lXiFiMHFvOjtRciNuRiIjXUt3NDYsQ3d2QlcrY1ojI11JbVc1RmM4V2pBRnpzeiYod2psQ2NtK0ZHSEtfI2VjeHkxbVguMXY7W0MyQURdaClxTyVQaXIqa3x8L2B+MGhi'@;
put 'UzByQSI9T0pLeE88MXp2JFl0VEZhKTJ4ZkxxbE43SmNGWm9yYys1Rkp6QERDRkh+YVQoV1lee3NIc1UiTkljWn4vSVNHfnhFMG8kVCpZTDAwOmtMW3FkbjwsVl53LypCRm9ZdUQ0JTRYY1Y1IWFjQC53UXBkPn5yXmcwRWd8RlNVdWA6LHVNZCRURmBJdjN4PFRsUylNRStNMStIS28oaTNLUn47'@;
put 'Zl8rKjhUXX1wbGtuaDluS20jeGxSWkU3KGk3eyQpOihaWilER2NIaW0lZmhfNnVJViw0OG1DJWw9RHZ6QmJrLnNFVGN0TzcvImVxbCVlLjAyO0BMRmx0W1lqJFU9aVZYUHY4eUJMWXVSOldsL0Q0MClxbEhdO31SMSRiWFJiKSlCQXJELzJDSnB5RixlJCE/e2dBdChmRX50SCFXJkd0RzhINX1N'@;
put 'OlVMTHohNSR3KXluWTYvUlZ3ezEoSmV2M0JzMF1ZMTEpa2pLcmVvfWx5Tn1IaDRgUCt7TkVsOUNWOmJDTkh4YjFbdkwrT1JUL1V4fmtgbCVRQmNOYGtyWzV6fm4heyFsSkpMTUwldmRUUSx2a05xWSMmZChrNzt4PGNlMjBgYzRtST1uRSFqfWkjSXw4RWFsMiZ2en5fSjtKKGQ1VlhKUUZGInll'@;
put 'U3JAVUIwZG04fkl7OnRJdS9BWTFvR0BWR3JESHJIIlFtZixCPDNySnciciQ1X1NFS0xlWFpSKiRLb2ptN3dEO0ZMe2hPN1pjfURnSmRYYXhgPHZkYlJSVjhEKlglclFweykhNjd9Rm5mQl5QO3MpXyprNFUwanxuYzZ+VkhTOEU9JDIoWjYuQDckKWJkbXErRTd2JVIyeWpyfjRQS0BDKUNpUkky'@;
put 'Mz87OW84fDhIOFk5WTQxa0FzVTY2WGd4LkghTk1kNj1gJDEiYUJ5IXl8d35WVzo8Jj16TnhvTnpJbHNZOyh2NXR8WFMpcmQ9L2tjP0JCIXBjcVIuK0FSYFskW2ZQWXZseT8jUGQjdTJrIk5DWzJWOV5RXn4xRSksLmN9IU4qeEFbKXZPPyw6P1hrfiREZEErYmZ2elR3KitGTihKcS8hdm8/aVg9'@;
put 'NzFETU4lWV5efDFoJmNkeTNZXjIjeWgzRSxIPUlyQTplVkMlfT14I0ArbVZLdEpefjxBWUhPTyYldztuLjZsSHA3SW1Nbzp2Il9NcHhINGosOkRGSGcyNmRbWS9UdWRaXzRBeGhCOTQhMCJsYD81REhUcCwyVW1SVy5qLyVUTUpGRFo1Rm91ZWIlfXoiTU84STN9dG0yYTMuS2lySFluKk9idT9Y'@;
put 'WyssZzw9ISxXaW5KcVUudEJpLiNbNkcoZWFaan0yZ1V1NDU1PUl2ISppcj1IM09OYEUwKnNCLC9uNEx7VjZLfXtfJCNvVEQ3b18xPz5Wb0tmRmEuRy9eOy9zdzo2YCMpcmxIUTo1P01yWk9DTjA5RjhSYkdEeCVuPTZ9Iy46RGF8emt6UkA/Y2RESWh+dWd3Mm82VDdScUIpWlUvS1Iva20lTyFP'@;
put 'OHJUdEtaPVoqYitUbWRAZ1d5d2IvPFlIbWw1TjdnYjUsU0osSXNscSpoRGNEQDo1MXVVbi5kUGF5OXJ9azQqV2xQeW02JTxKPnlDUCtOXnRhcSRFT3E9RCIzPXtZSlFFOHNxJWExUzRiWllSSUpqaDRIMiZNVk94T0Q2KEgpIiU4MkdZRm09YE8sc1N6O1V7KEJ3VlNzaEkoP0F8c0FGQz4xYiZF'@;
put 'P29KMChFRXpdVF1oaDsuKFdjTkY2MVU1eVkhNj8pZnhCPTtJVEh8VlAhOVdeeW9jInkzTHViZ20pTl8kRFVPRz5vbjkmSi9oYWhrI21YNGldIUQrMzR9dE0oWFpJL0RpLltYOEc8LnJGUnNrUCROWG4+Tk1uL091ZGJLXytaYlZjUjQiITU/Tmk5bjpzb1ZKLjIjJVJIM0pMUU98JCUqYEV2bDxS'@;
put 'UypiKl4iRTJ7VUNwZDsiQVBhbEFPblBXIVRpL3NLXWdhKXM+O1FgSyRNS2RVSGJyX2Y0dSlPcCVZb1Y6czckRG1NZVQrcDM1RGkuO2EpU3N9VElDM1syNW9Jei9KS1c5fig9XXx9VShmOVN9NDQwP1s1LzZKM0BRW3xDN18iNzhlOnRIQ20ybytnTz0qYitCZDkhIWI/blF1MF5Da3J4aGxDVjRT'@;
put 'NmJpKmxnPnZbcmokViFQZXdTQCpiM2ZDPCJTWDtOT0IhcUxoYlZ8YVs5UWlYNCVla3h6TTteam13Wm1RUVpUTFhvNWR5cj8sMFJ0azxRKSMzZV1TMmVbO2AsSzFgQjx6bihee0szQ2Y5aFoyMEY/YT5lUkV0aWsrQnhHcHB8JHNUa151RG9vRkRBbyFlRGFufmxbb2NMNDhAQnFCRVlRIWxtfkw9'@;
put 'd0hhVDR8bGlBPClmM1IjdzRlL0AhbCxmSXwmMG58OV4iL3Z8PSxDO0IuanZdKEZSWDpueiUhOCJoIz1NdlA8Wk5lcHAoNVo3N0JkZDtAYzR8VFMoWm1LPGkxKXQ8VThzMF4wdTdOZl9+eDEpP0J9PDVGfElKfSVfXnlRfkk4eD1ySjssJi8rRC4rVDtsai8kRmpScmJYdn5pWy5gdmZmS2hNd29g'@;
put 'UnhfWyNDVTltLHlpZmwkI0QxOlM3SHpeaT5uW2pFVC5xTVc7LCxMVUVwWGVEWThefWlwO2VqUUhXTCtyQEJGNX43fVkwLH1vV2d4VV5Na3tXWipNajlveiVwUzw8O0V7YDRFfE1VbiNeKW9WZFZHdko+flJOYlE2bFFCT3x5T0BARTw5OCtaXiVaJHpwQnM/Q2oyY1JBUmUjZlVYa2k3YCFLMXlP'@;
put 'elJdL2deeVF7VUlPMWtRc1JbfU90LiJbaTcoNTdaLzhBRT13KGpJRDxhWGxGUSxJWkd4TyxTXSMuP0R3WWdjMVppZkwvZjslODowKzZWUjdjJWJufjwrV28mRT52PyxVfUZvUzkzeDglRnJJfD5aRTNje25IQkVvMHIyIz9uNDBgNlhHMjVyMWpWbHVfWCVsUm4qdClvM3ZFO3dtcj0mI0tPUmBL'@;
put 'Mj1GNUxjKmtSNHhnMUJON2MpeVU8eF9rPUZXKDxDaE46RyRXeytDZmlMd29jU0tzMUZxUU9jVSoxN1g5U31ob1RebTo3dCNgcS9ZOGcrN1VAUzEqVWI5WWwuTSY0YEBeRm0qUFFnZXpabFMkTVo+fG9GXyV5fmZkZVUxYU4/aHJlNytsb15XU3dVT0Y9b0VzUlNAOUtAK3UpPz50IVRHJmZkYXAq'@;
put 'b2E3eDZJVCZkdlAiaD1aNXh5ei5aSzgsfVAwfl9hfGAhNy5yOypRPSppLDF0XW9JNmVSIjxraHpmaU59TVtaKlNgRntuKHVDeUtEYn1sKXJDdi5nREo7TkN2RmtpMiEodiEoWUU2ZFhIa3loR2UkPipwU1hqeElKQSlMYHglRkViSjFDX3Q0a2YrS2k8b1J0RiI9dzldTFImX2p0azJGfFd3dEdg'@;
put 'e2ZzNkNxJF55JkNtYl8sPFVzWVNAQmddYkBXUV12ajNrbWwrQDE9RT1VSSE2WVZwQE9wd1ksciNqREZRe00rNyhNKzBnc2oiTUgpMkhbI2pfdkl2O1Bial9KS3EkeyU+OnlpZko2IVgvSEVyLz94K2F+fUVHJnxOfTk0IjoiJmspUXVfTV9GWilzSCFZOS5MVV4wcTpUWFNCeEw+Vld0bUI4Z0Iq'@;
put 'QiF4PCEkOGFoYW1rellgSjskaEVqYVEoSi80dnd3ZyNqKUo6Pl1YY10yPV9VcVB+eVYxbFQxbHA/UUJRbUZ4WTx3aStVVUxXeS9kWlk6YlFDeTRLNnhEPGw9On02bkR9fVFTPkhzNF8qd08pNH5uI25VWk5uTHtyfkI/JDBzIWhWIXNSTVEuZi5Se0tiI01ab2BVPjg2OSoyVTMoQnQxLzliSTdE'@;
put 'dXhAWjhSXU5QOn19YC9XZ1UuTGQjT3szQHBNKkU9L0RXTUBEUyI2IVNUM1o8VHVBWEtVVHlkPCtYW2JxUHwmOm01OU4zLFVnQFIpdisweSReVzk3cHVYVi5bQHgxe3g0OjtIYXdWc2xOcltOR0M2KHIwd3I9Izc1YENPK09ZYVEwUm1iNTFod2V5Wn06Nl40XzUhe2AzOnpMcjFjVjZzeX53dXhC'@;
put 'KF52LCY3MD9gLmN6SDBXNn5FIWhnTHAvRSxZP3FXI0M7R1pDZlNpdGRsMl5sUSZNOmZFNnZIJFVEei9FWFgiUk8hWkdPd0R8PW9BQXs5fVZHMyx9OW0vaCwlMl0pSjNVRiRmc1hVRC9ZNTAxRl9DenhwWWI9dDNTfE06bWhHRFtBYiRuMjNec1FEM2IhfEA0Mmx3dHNDUStTSlZCNyksdWZyUjNj'@;
put 'eSJae3pgMEspQTxEVDs1XVZRK3YkRU9yUHBGIk91dDE3Ym1KWD9DbFJTR1YpMSgkNSFdKk5QOSV5PkovMUAoO1JsRytdP30vbndTVyw3NEFRMFJpO3c1VFhLJkFRU1ZQW31KSz9lYXdya2JvTixWLHlvanwjSHE3WmhQMlhOaGF3ME9QMkdCMVh9ZlEqS2R0WHhjPEUvJEMuNCksc1YpQm14b2Bz'@;
put 'VlNSN1srellqZkxHJm8jeWF1N3haMWlBO1lyM2E0W0Z3XktkRm5Eam4wQngmb1ZvYHxtT1BWSSk5bjM5cXV2dUk6Jltqe2hsQ0h+JnJhTExyQDkrPV9AO1JAIjNFSHBMdnhWcXoldm91Mm0paztaVjExM1BHLkUpQ1pKKSZ5SU0qJiNvNElucDI5JXN2XVcoSUVmaFlmMD5xI3l2VWwmbHleaSZQ'@;
put 'Q0tAfTIqNUkscU0icTJvXWZ5IS8ka3VFRFN0PT0hMVRVTGRCZXc6MHhYTmwlJVB8Rjd+eVZOWjBHfU5UMGYxfGNXMj9IfE18IyU7QT1oT2BERV1Dam9iWUVWRUxpMVFBd0BxUCh5eFtHOlJEOU06cklQJSQoYj4rLFBxcGNBfWNgNy9KUHlUK2d1I19SYHJHKj9WIk45RmBgbXglL1c/RkgoQWlk'@;
put 'PDV+MTcjMUBGdnc2OXBbInIzKl1BP3AiNmU5UmE+cGk4WiRvWFYvNzhMM0t9ZUAzUEoqKlM8L1t3X1h7XlF1ZTowWHk+X3V9P1BaJSpdVlJxSlZ4OHhEYV1+PSxBTVAzaCw8cG11TyleIyp+SWBCPk4oZndZfWhxMTopcHQrLldQNzttbk5jJClGPXpINztEOF1re34ubGxuSkQ9fHhHa11TNjpk'@;
put 'UHliY2I6VUtIYH5lcTg+cDJvKno1PmoicFlKNFpUfHU8YDE8bTQvN1g4ND8uSEghOTRqIj92UEclUStAampGSjVpPF8xbkI4Mn1VdzlScUxlU15MT282X2RgXllXZDskenJ+Vzp0Z0I6b01PTnVNPVdNQmZabGhQIU8xYzsoVmp2TGpnIVZKY0J0fj14ND9Yd04lc0dAR2JVWDQjbSNxaUlmeTo/'@;
put 'RFU7VyolVFpZfFMmMUpMQyxIT3xISEB+MyIqVCJ4QFQoJjJjNVRVWD96IylPKSVeMGxxQzNVQzAjQzEsVSNZM2hIby96MDIkWVQ5KCtmZ2Ykfk5hW0ViSiljNUQyfDk/NjhwTWlzMzk5b0l1aTFHcGRWKml7UFdtMXNSO2JFe1Y1Qzthb3NHRkcoXyM8fCFCdDg4RGhsTDpCemFmS2s5PSVgXTxz'@;
put 'V31WTz8mQHU/LEBzNT9TMWFoXmhfeDcvKzNXPlNnNl0mSE9KbjJGM1UzNHVKLG9HWmBsdl4oRCxMRldGVHpPQTY1a3FqeU5yYV9qflsuXzkiM2Z7IzcsWlIlXmNPeHk7QEc9JFooIVhaREVgUCooLzZuQz85TVNWdGQ3eyw9ejdTVm1+Rm5ieUR+VzlESz52Q2lxSHIzIk0oODFnXV4pSndDK2Vn'@;
put 'UWhKUWJodlhaTmpLZEIqR0MyXSl0Y0UyWzNlej9IY1FqPitPO2JVfT9USm52XyxtPTVJTUVqRl5uJVpbSUlYMGVsUFYhcGo5OlBIMDBKWS4se0A8eVBObjE3cD44QFE/OFRAfHJ8aXswbGJ1czw4MUQzXVtbRFImbV1JMUA9bT1DU3NFcCl4eE8jNGIhYVdyVD03O3cmaiVXbz5FTUpdd1NoPFBa'@;
put 'RStGWih9WnJwcXIzcmA2NWxufnIxSTQzbTRKPkNlOm5RWXViOnxiK1R2V098Ni4/dWNhInN7blRhd3RSfjxGRis2XnFZJmEwQnVBQUN9YzR2dip1XyFdNyluTWtHO3hnLkdMM0ZDPT4/VFVWM2sjcF42ZXhlRT9+OVltIT1SXlJxL1klc2wlS2ZXUG9ATkY6I1VKTkBCd2U8JCY9WyJqLmY6QEtT'@;
put 'KnVoOVlZT0YyJG4kbyRuODMlfkUkPSNeMEBDemxZTTB1RDQ+IyJJMS9lQ29qbmxBJjxPbi5JZHNbbEZ6PmNIbiEqcEdZOX5hb3VQOHArZTJ4UXhWM2N1WmZIMXUxJS9GakM4SERTXWp2RTh8WXdTPSlFZT97S1N9ZXJtUzNESlE5QGg6JXpbQDFsfmBTLHtIRH5ea3wmOyxZaUdLTk99VmlyYVos'@;
put 'OCMxLmErX0MrJE42SjckO1JzNy5ZZk9AIzZ8fEU1aDJiYk03ZjwkUzh1NXBxQTxdJUgpK0lXS1FUZlBkcENOUjk3ZGRHbyxmMSFCK2whclclXjkpcWE2YC84OGBFSFhNTS4yQm0zczdxLkB4JnNpfSVyeTwufSo/alZNYlVAcilzIn5NJipSdTxGcjpCYyNra3ZqVUtVUCpIKjU9MV9sInxwfnhD'@;
put 'Z0BNLH1uVWlrIW5lWHAkcH41PGx8SyJqNnBeNXQ6PXc1TENXVjY1T2dXYVBCJHRDI1B9S3o9SVBeKTRxLGYiZSohZ0o7YWdablFVRVVLZDRXNjEwTEhLIUg3LnI6U1hmfXxHNTFtJCF0NnVNVXRQOCk4WmpSc0t0O0E9XWchYF93N0E8JCFZTyRPQGZJOnZ5azslWWFHLyleRnQ9cDxzZzN3M1Fo'@;
put 'N2B0YlhkY2F9JSpfNFB+dCtVeT1nIkJRI1pTUzNMOUt3c005QzlndFA0bltfakk4NjQrY2ROe2ApdFlhdjRDY3pKbyZzJXVSWThGa1BlP1ZLUEUwcVZacV5zMiwlTnVIJUNlXVBJUHl4flgzSU5HdGpuSmooRlIvRm97OXB6cVBqOFlyMig7fjJ6VTJzbHo5e25eVGByPHVhQUNpLiFGcStGRGNK'@;
put 'UFI9aH5OZ0slVnYvUSNmRCFiYn1UZyRgTmE7WCF0UU00KSNNVzhWbGRtUjI1TWRrMFNOYSs8MlQ8eiRqSmZPWjovezh2PGE8JVUuWXlOM2Q7YFcrIWN9dyJLV3xFUyl0JGFGODVna1VsKltEdmtAYDQpOVZIT1EmI0c9M1JNVk9Fc3tKPVU4SCU3U1NaKlZEVyElKSJGdVR5dD4vV0I/STFJJmZ7'@;
put 'NU92WTpTbmV8cndJNk1gaSp2ZEZKZiU6ST1RRzdTY0Z+KWJ0T3EuZy5BL2NKKEFnTSx9P1t5US5BcnJtMitsU28zJF1jczlsaixtRGlVZGImJXZ8MDlYJWVzcCteMTg4Q3dSbDdwPms/KGswMWtBbFpuPGBNMTVdVGMjblpvJlh2Kz48fGZ1eVVBTEokKVh6K2olVlM+ZCUleGBVRUVaPWk3YHVa'@;
put 'biVaWDt1fiVqVCtKIld9YSVoLE1+Wi5XdzxKailbX3ldWFpTOmNhbyslNUF0LntFVlUyYFd2ej8wYXB4MiF8JnJQJX40SEBzS3MsaVljfTd9XV5FKjJyQ3xLV2x7SD4zTGoiV1A1RDlgXmg+TT5tVEtOdUZrUHdHI01YOGBLPEIxJExYUVhQRTI2dVV1VmVMTVdQNzxDeS5abFshcGpyUXpjZlEi'@;
put 'T1ZDVjwzZWFWM1hKaV8jQHg2SVtGbyQ8VDZib0JkaCVGISN6bG40NHI/SV5dUldkUU9LJSZ8W3hnakJYdUtCOHl8WVk0cT5ERUd3Z0ZYKXw5XTlNPVNrISZ4U0R3Ky9mcW54VCZMbUVWNiQsL3gsV0VUfTluYV1lKkJbNEYsMzwoSUQsM21BSFQpVj9TcUAkRTYjfVUoenRRYW08dnVLUmZGQWFE'@;
put 'WUcwNXpgOEhvbX1NRXx1NltQZGo9JG8kMUY1KUc3SWhUU3l2SlZiKH1PYkxlLzJ3O092Um9DJDFdSyRVNT9Yaz0kMT5odHl2NmFPJj1APCQxKFJeQ3JnfCVgeWpQQUtoXzNuSkhbUWFRcnF3YjFtJWI7QWh7dWc1SldwUHp5UyY9Qj9Ce3JJXkhHc3x5bXViOWphRHxfYkQqTnNxcyo3WFF9MUxq'@;
put 'N01pQ1J4azpue0hGdWZaS0UiMGs1Oy4+R30oaHF5cVskKUgyJUdVSHp5cUxhVyx4WzowczdnYmBxKiN2enleTV4yeTBDSXU9PSs0cTNANnAlY2d5fnM7b2FAUm8oTmd4dDNZPSNhYGlwPU1YUSRGVVIwXW5ZNnAmQjU7OD5ffkxHTzYpZFBKN2lnYmQvMjckVV5JRDROSGB2b244Pz5Gbl1XPXFR'@;
put 'K3YhTjN7N207emFYOGBZez5xQHBkNWJlcSk6YXo5akdsIytNalliK2lwMmB3Zy5re2t8Wk9xQlRGN10+WStnd0tQIyp+OHMvaEZxPG9ObXkpOUQ4OCtjc0x9W3RxMnRzLitSL2h7d006Si97b1JlLEtacVd0YGNdckJkTVVoO2wrO1lXNj9rd250byYsanY0ZzdBc115cjdCL2xPPFkkOld2KXVM'@;
put 'UD5MRWNeOk1DQEw9W2pNaSN9Qy9pTW9gajxCLDZ8bmB0QmtUdXVwWTx3YXpAMkYzelsycSRWSEpgImJJeXZiWjRHPWQ5SGcmR0ZOc21LZCYmPix9LllifDxvMTo9STAmL3FgLGMhSy5wcDEzVGtxYTQyNDJCO2d5WjtgVWcrOzsrMGpjT3FDKGdgeClbPiE9S1cidE1BMF5lPDhMNiRQamEzdkVf'@;
put 'OC99N1VuPEgsQ21WTkBqM3V8WDAzUGFwNGBEYytaXWwsRDBqWERzMm4lb2d0VkZYSl9zSGZ8aEc4aXhSL3wvempZR1BRdm1aQlomKjJPJWplPUtzI3xMZUV1TncrTmYpRiYibGhfKnwmSVZ6TTIwMWskV080XkhecXNfYHttaC9zZjolVls/WGRuT2hGMlhfbEZWNmBrWVc6akJbaUZgNUd7NTZP'@;
put 'U256Pis8eXRxYDd5ezJgck55eF89PyMmfnViN2BBbCQ9NF04bGp+ZyZPIlIyTnB9W3xWbX47YzUpTztlcE1vJVVfeC4vayFJfmBrRG5HcUFiODl+cFdyR3h8Zi5xVzFkdXhqbzV2VUpsb0UwWyl3WWg1JDYpM1E1VnRKJnRwZ1BvWzFFN2VNaGhkVCNVL153aWl0RmI1NUw4IytnSCxrP3NhT24k'@;
put 'MHVRYWV1IVU9UD4+SkdjYT5tIUVTc1BQKEA8PmVLW30zZjk4dGYmM1svMWtDPEohTEQ3Y1N9ak14QTJTcjoxP11Zelc9N100Kkwjb2hPXzwvNFFHNC9GXVhPdVswQFFpRytdcm1oa1ZtJXc9VU9kYWsvWmtQS2ZhOSVedHNjTmQmWD0xdFJ8alpmXTJAWzdXeFFWfkcvOXdFeGRXY0tfWzw6MF5Z'@;
put 'TmpeKTZWSz8mIzkpVCJsUGZyYjdnWTcrN1lFQX5MV0VvfDsxYXlGR0kvRF8ve3Z5bVM6dF1ENiQpX0M2d3RBNzIsIUFrOEA/T0NyelJ+R0o1NjJubW9ke1IhKXZlK14+R0x0UiZIZCJTNHdYWiI/OyoqeWl6YVFiVGNUUFJTemQpc3RsKGgqZFkjaW96Tnd5NUFxX14yQ2FTMWY8d289KSpUd29N'@;
put 'Y0QvKFc2P1M8PUw9NiFCYCQiZGM8Kk9HTHkkcExmJmhBajB6O1ZxVl92PiRZWyo0MnRRSSpfQ2sxd0ZpV1BAYilFdikuOSIjViV8MT5nITJmTkspXWZVZFQiLzdhbzFSKXNvL21Pakg4PnxiKSs+e3F6SEV5M1BEV3pYckRkcklePSxEKj1heno7MVRAPnFjO24mQWgmNVRbI1cycyMkUi9dMXZG'@;
put 'RCtLfj8xQDlsU302RD14O31vdS4uT0NRZSsjNTJ7R3wyRT49YD1HaVBeNmJ+PyN8YzZ3TWlSRmN0TiYrfjpgPTg7YSl3VWI6U0E7bjApc3MmNGlUQ0A3U3BKdVU/PXNpPS9JUCt3dj08dlNoP1c0aC5TJlNmVmBKfil4fiJeNCozTFB8cktPVTlhMksoQiJqfSt+YCt5RkR+TltiLCFGa2hhPkUq'@;
put 'azpVO1BTOU8zPkR1N0tNTGErSjQ4X1IrTE1iblpgU1BtRVN2ZitOKF9sTmwoVGVCdl5qfDNTLzUkWSMyfm9yNUxqOkdYU1JHNXFLPztJMng0PixPSn1hUllWI24vX0MxRnp8WF1rMThoa245Z1VKPlk3KlJ2bHk/fWwrbGUwS0ErIl5HTiNpLkwpLjoiJj9PV1B5e2JuL3gkOS8sYk9NZHlSfV9I'@;
put 'WHNZKmxwZDl9NTBaTV9ZSDZIJXJDLkJFa3g0KyNpMD5iTXw7fS5+UVFeIzZ+JjV+UGMpMXk9eD5GL0x+XVdOYUhIRGgwYTtzeHkoQDpJb0hZSj53OnByWG9AOGZhQTI3KWV9TU56UTd9PEJYNkdhWlImTUJyVDJPJU48Y1lmN1hKZjpfOCZKUFdfUStzUG5nV2Y5S3p6R3s3Q3VWXWUhUmVoTiha'@;
put 'RERaNiozbkJEUSFONj9UUH4+XV04WU8qYyprYzo7VSFgS3skRkpgOCh+Q14lIVU9JmRVUmVfS00lTVY9c15RJlojYk1tOjVuW3huc1tgdTJFLHRAdX1kQkcsPyhrST1ran5tOittYFpjS3JPcy8pM1JCPn5UJio+N24vRjBOc1Mlemo7LGF5fTI9dT9zKkNER01IP0hkaCYqXiwhPDM0MH08Mm4s'@;
put 'fXNbeG8kR0NGQXV8Ljx9enpYU1dnRjdfUV4mZjcicHNleEZ+JExvLHBKekMyKWowbyFRWGloaEZIZ007NkFBLkM/JnA6Z2N6YkNlbzNNQXY+SihYT3BJcmtbTlcuPC8va1BVRFtJVGd3YUovbWYmLyVue3A2cWlLRn5uPDA3TyVSIlVSem5ZT01RISl6Jk54UGl0cXQ/RCpncTYvQ0JJRDVUTFNd'@;
put 'aEBUR2EwTVgiOT83RXticUZKVmVBZTM/a3xdczlRWV9KUz1PU2gzR2xiNTF6TnsqLEN7dHZbZSEkL2QvT2A9VilYX2lmbUdteVBdQiMkJVNASnprMHF7c1YuRCFVSn1nWDsrJSs5ai5kK2QzKXxVPEhXVXEwVzRvPXU7Rj85WSEjRHFRbStmPzkwUWpeZDwkUntdL1ErWlVtL04iXVFLZlQkIkQz'@;
put 'eWo9W1k+PndSbGhmNSVMR3AsKkVHXWxGSylwYDxySkdLXiZZTnIxTD8vey5tNyhZVmRHZSNdNGwvUStDSUI3QktCblp7bz5XR0VvW3YkWEs1YnRLRWB5UTk+QChvRWo5QTRoRzJ5SVRXPnU2Zio6bSVWeG5we1cxN1RtcGMpbVg4aH1eeW1NdStsYTJ8MSZaVU1YUVV4Uzd9anZ2ITxmaiFdeT1W'@;
put 'RndMV3ZQSytaYTo2YEZWRyREcj1nc1pia1JrbHh2SzVDdjtgR2FjcG5eNGt5REc1djtKMCN+WXkha0F7LHVAcFZ4YSEkNCtCIn56akEhZ2lxXjc0PHs4RG4ra2w4YyI+RVIlfTNLPWg3PHhzOXgsdjtVVXwqU3NuSXFuSnI5bFV3L092eWRtRSJ8NWszLih1VV95Izd8KjVKbXNGdX5AZyM1Vl9k'@;
put 'Xj51WHVxbCgrMXpEM152WHUsL3NbbU45Nyp2Y0RvdUAhenRyPjB+aXd+JmY1d3sjQltCO3pRXW1PZTVZPFhUQjsuKlkyOjBlcnB8bTFnRSpXTngoJmpBXURQLkEqNnkpPXE4RCR5Yz8lNE1YTy5CfHM1aUlVfldZWXpkRVpgcSpmP3BLU3MvPmdFRHA2cHxVQ14oRVFUeyRxdlFBMjxvT05Ra3tQ'@;
put 'PThgV3YsSGoydyZuJH5PWE9nZjRkLEQjY0ZZOmR2OH5mZjcseG07OVJFQSQuNVkkJCFUVUE2W1F+U3VPRDxiMFIuQWFYaVpmeS4xVlNfQ0Zseyw/NitsVzV6XnMrejouVEYsN2lqXyRSKF9FfXFXQzgmVDI6U2Z0YllPS1EkVUo3WVUvK1t7VVZIWz95QWZxIXtBfDlmWHhoXj5ScmNbNUNFdTUq'@;
put 'S0dUIz9hJHRwVzs6ZyFNTzNdXkBhMlROX000azN6aUkqNVY6e3AlczBqOjJNSipfRjdnNmYrTDczVCRGam5aX2hMaV4oLEtNI348K1kvNzRVflNAI3B8UUd3YCw0KUB1UF1LPF94ZnVQJD1MWGc3XiJ6d24rY15DQkYkdWx8S0Q+V1J8KWk+TjdUbG4mKm5EbylDaUdxUUt2NT1oMlZ8Tj48O2RF'@;
put 'JmsyX1QoemZVRytWZElpZ21MRlNNMCRNMTEuP1FMVWZnRU9OcjllSi5GUixkJVNgd1QibEdKJi52XjFoeEJlOCtXajdPZz9CUndFRyp9Q2pkeXBNTDchYnQ2fEVkMzU+Uk0iRSJufCk/QisheU42c2pQJmBNdnc3PVRbRGw+QkkmYSZqQV4mQ2Y4JUFKfT5SN2cxUSxWQjAiR0Eycm8hUS5PUEcp'@;
put 'd0BwVXQ1OmoieVNnO2loa0c0LGBdSD4idCJiNXg7fSFhQnAvTDgxSissYHY3NTpYOm04QiJeUjB2bXtUN2FVLyhEXjYwN1Q/OFY6KHhvT3NeUiU/YzQ2Kjc1dzFAMHFBIXhoW1tyZyI0XkkqczdvNUJVMUttVCRTJFpvU2J3My5DbSZIIlpBRWVtbDtZR3lJX3MsZztVI2QsZj5ucWk7RT5obnxi'@;
put 'N3JaKX0vOj03TH11dERlNGNeRjlQSlBwRy9iM2lAPG0jeW02YWQxZShLdHphc0lhK08zcl1qR0wxTi49aFpqYzBMKVNze3oxIVlxPHMsPll9O2o/SlZjWmpGWDdnVn1EUGpvOlEhMTAkUjxbNSgwI1dGKltGcGhXfDQzYj5bKGhLdyxBem9SYC5AJkBxQz9INTQ6UWF2VyphdnEmVlZ4eHM+WTlC'@;
put 'clBRfGhsMTxbVXNfY3g3WU1JNnIpV2BdUGA/PkkvQjF1IUE3NDg/LzAqfHhHPn51SHp9KHR3XzNDRlhXLnB1c1VgUVJYPFJ+MShVPj0pZTM/KUMkOnojQ01vdXAkZF12M3ZyPnElezl3QzRfcjpPbjRtd30/ND1MQVpBbnNfTS43YDVqPUcsOUhTZllUfChqezQ1PGsheTQsUSRYY0JyNmBBQ0kj'@;
put 'NCs5RHhEUSQ4OCZgRW1KTXk6fVd8U09lJW5qJHFkO2B5TmhESnRpXUtUaD0vJnk5PjRZSktUaHkvc1F3T1ApS2BbfSl6JD1MRysvRkZ9Iml1L1tAfE1DMl9LTUEmNVNNelUlW3o1RHMhcShXU0k6MT1HbHczb2BnKWlVO2o0TmNCeHxARF4uMjtSMjVTcHVwPm4+W1FpYVRTWDNLWTArYTVtc1F3'@;
put 'I3lDXXhlMXF5YkRePUszWk4wUUluJGdtIVV4NUR3Y3xZUyFfIzJpVD5CdkxnNWBLQk92am5vWiRESGI4eX1ySkcmZTIuaFJOOT80P0BOOj5BeitDRzphREthImpGc3Z7clpyMUhZQy4mRVhrTj9CcS59Mng1TlU1PSopKjAidDFfaiw1YEBfXkpgbE95UlZGaT44X0lVb2JRKXNVWFYuYCphQSVk'@;
put 'MXVAKS9iW2Q6QlleNmgmUDszLkksPkdVZV98cUVeWXI+U2t7eGY0IV5DZDx5cjpeZEEkTm9TKVhwZ3ZHInhyKV1jNkc6RXpZUjhIblcpeWc6SGpiPjdlTG13MjlfTmkiTTNpZEZKW3l0P1c+Zkk6bUpmIXwkO2pTY3hadXpvSUt5KWc/P3BoMm5sSGNHY1N3Ozt5bW1vQG1aIU0+LDUhVFFhVEEz'@;
put 'REtCfWBUPXAwdFUlO1tvS0UxN08xeS9vYFZhM2lSLHIyRlFNeG1YSSRdT052fXpxREMxV2YuKTlLKjEzWFpGSntqb2ZILlhwdCRZZipHS1pWRVtEUCVuX0Bzd3I6SGVuP1goPCw+Mzx7QVBSVFt3YitiamBKayo0eFhTbzxheF1EW0Q7Nkw7dU9aVDNITDBCRHRUQDxzI25dTU5iRWtsQiRnPiZ2'@;
put 'VzNHJW15P2A8OzNhTE4+d1UqV0RzOGI5M0IwYXwlSkFCUHNwMTA0XXAwL058VFYqeyhSTkhpNDkzaHJLIiM8YFBnOHtGaXBTVj0zRSk6cU1aTjcyPCh8JTQlO0JzOS9DYik5UjVSXm88azBoO1tMeH0vS2g3XVJUNjRCV1RbQ1k1YlNKSz0uWXxrN2dHV149Q2Z0KUJGM3lCR15UM1pALjU1KCR8'@;
put 'RkkmMnc7Nl1LSyppUy9zUFJhR15iY0hHdmJheW1wM0pQNGJrck5ALHpXaDJrWm08W1hoaDQ/PGBSeFAvb0w9SDBiYFF5fXxJWiNDM0s7e2p7MENiW2AlfWhdJWpsWy5Gcm9wb1FkaUZKKFs6ZUh8a01RZTJvbEpLL1tvXTBuRT9AeyRJRWhDSkckYSYjZ1R2TFArQFBSV0Jje288Ni5pOGFbPTJV'@;
put 'Knc3QmV8e3prbj9gbGQxN11xUU5nbS9lQ21qXzQhdXteeUhtY1pIKGRHfUxhSWtVMjBJKkR1JHdaPFowYVZUKGRiPTs7WThOVTlSLnReT1JgbzFQeS9KPCQsb1F4MEFKN0JgPUhwa1NSLEVEKThoVUw7TlsxeHt5bnYxNSksW0htTllPV3YwLHdvcGhCbzVzektxfWsmQHFlPT5sWTFDVDRdWD19'@;
put 'al1VdjU7RyY5JjFvVS58KVVveHl6ITQoUi4le2xRa2FybVZWRjBaflM6UT19bnBxeHNVRyFAL0RNUUhqS1JveFU/XThfYFNaOy9nSSpKbD5dczl7NU9uVTFTVz42UiRNdnc5ZWxCKWlKcylPTEhVNUQ6SEcoRzx3L01FWV03InJkUVtNNEdzMDBTZm9tazlmOkk7fT0iaX1ZJVBCNyJnZShXfjVs'@;
put 'bUlSdj5wNm5rWm4+UERfTmFXSXJvP211S1h5NEVtNDsoR097Y10vZCQ4PEl7ImcsKHAkJXhPdW1WM0VuVzh3Qll9RmRaeXptQEtzSHAwUkxoYHpHZHBFKENPI0VZfUpQZnh5W1A5KDkxN09yKVUkZEgheTxOLlQrM2YrZTg7M1hTVVFVbztpRnRFJXEhelc/VEp2RSYzVmJFKy9oZV1Qb350Ij08'@;
put 'NzJXTnhJRyxSTU48WkM9UG95KEhQaS49NkYqXk5MOCpId0NnNjlEOF1SW1VnVlk3STNCN3xoVV1MSXYoKzE+XktYcGd1ZltkX3o3e0Qrd0dneHpHJVB3VnMrVCxtY1dEdEwoYHF1TU9MS1Mjdk1qRFo5TjFgLkpDSixET1I5WzMhb0cjNGVxMWR1azhwQWl0Xk9zYTN2cF46PGBTRldMU0ZlUkIh'@;
put 'Pkk5W2JrL0wvS3BTam87XnIzYSV9Uns1Qjp0YFJgdy55KzBqXVhTWiQ0dj1pM1teMU4+dj9VYmQidENWVl1KUnIzOUQiN19wWlRvIV4kcyE2Uzc7ekpVIWxKU3BoS3J2fWQvVSNVaHg1YmBhT3Y4dzg/bHJYYDxibzgwXlc9e2wyKk06Sm99IzxEdDhvOEUhW2ZkYT5MJWBPOGcySDxiXWJST2F8'@;
put 'bDdnMHx6bVB2Tno1IV4qKDNxbSRrIWxIQmpqM2lJSW4yTlJKVSleaXhuTFtxLnI3NmhHMXQ2KzoiOExDWDVMVWhWZCRFR0MjIUZeZm1HfE1xWlR7T2FLMXZ4W2VsN2xCcCk7SVFrVVF1fGFKXXZaMHZETmFHRlomeXZDUGV4ZWwhNW53ZyU8MlFjUTA7TFlkYWViZCpBZzRtIy9JOjx6TVJhbG1J'@;
put 'Sz1LRUBCWW9CRV1od2VXc1hUU3diOiR9N3ArTWRlIXwhd0dDZmVDcy9hcmgzeC85RnA7U0cqWj5UT2d0bW1oMDBMSyVVZ2BHNkI1TDdrLiNQTVZhYGZnRDBgJVV6cTFYWixWQDBnPC9EWWdNNlhYOH0+KlkhYk9dM1FqVGNQdEhaKztJbyY3MyU4KnpwTjhuYkBwdzxmRz5zNiVLOkRrOXxwJGls'@;
put 'JGVNS3l8YVFZK00kK1ZQaFZ1WkJQZU5JTVVobCoqPTZSNkNzWFElPXlLTjlATkV2K3cubWUzVkAscVthZE16aCFiT0lQYE1heWtZdSYsWjs7W15RYSt6VmIpWVdZUCshM1kqYkRDMWYhfDlJbjIhSW5dLys9I0kvWW48e2dASWZEXyMuRXxLQ0oqXWsrXmZTTU8sMVJPPks9IW0qZzc6YER4bXwq'@;
put 'TzopemlRXlYqamoxS014ZVBpc09Bbnk3SG5TaTYwayE1bjpxNlhDc0hdcUQlRV8xYytTWjNFJmBUPz9qZVJbKkBOIVM3ajhhJW8hTG0haER4U0U9S0UvTWsrSHFGXUojLFFxK2VWWFBtYD5xSTtoWDppR2Q7WXtdaFlvJj8ke1dgcnI9JTpzd1tfUEYpbGkrYzE/e1JXJCk8d0kubXxTMl55eWQj'@;
put 'a31jZzdVL0FZZy9USjtkMFNVMjREL2BsaXkpazpNYWZmbi9idl5KJWtsNTUpNy8mQ0lEOEovRjBWVmRqTEpqfVBKJFtTYT01MDF8OVlsJjw7NmhoeU5GVT48eWp5eVQzOkk/NnN2UUJLQyEhOHwhaTBdYVElMW0mJkJvcUtDaz9adTljaHEzOSlkWmBhYz9LYiZudVF6PUNbZ0JjSlhOVzh5QzBU'@;
put 'OldqekZGPnEvfWAlIyhrc2VPRSVGSFpSfUFITUElRipifjJkK3ZNTWBUK20mKWF1YUZKLmlXeDVUMj8uQW1YOjRsU1FLTUIoS2t5TEh3fkF1RUV5KFBMS2ptMXIxdFVdIjFrdDtuc0BbWGRaS29QdEpuQHFMUkJHVVhaVl96ODFlRnpAc14rVWAmIjw1eHtPLlY+Vz5iUEBoO0daJE43ej8uYS5R'@;
put 'PEMqWkpgK2U+c3dQcmZtdlRsKHslfTc6P0xAPSljWTBEVjJJUjdSbj99eiopbjBGVjxAbnV2Vz0uNUQufTA8b109SVVlJjJJJVpqSSU3ZEkla1NtczA9T3RdS2o1WlFLbXNjcHM2SjMrP1ldUHRFb29nMFhfWl4uVEA9PDxNN0lSfjlJND5zNGBeJnh7MzF+ZW5Xdk9KXSJoK3YzYilTWS4za007'@;
put 'SEIwZTAkV0V3WUpDZEJjLn5ZUWE/T3x3XTZyZSVkbUVZZ3guIU8yN3dOKHVUTzI6dzRaKio0KVQkeXdFX0c3W1V2Kyk4RkFRdFImNmB4VUgqcFlvPUptbipmM082XUJnO11+WiI0UFUubWNWcVgwRGhTTW9nbilEQWBDZU1OX0p0VV9aPVQ6ZjN2cHA5NExQKS88LjIrdWMuT3YmMyhna3BXK1FJ'@;
put 'PCZQIUxkNzhgTzRzLkJoczg8dGIseDR3MjY+XjY2Ul99dlVEbS5pK1JvUXRtb0V9YWwsKGprUmwhV0BPbGgmMSkhb2cxVDFXIXM5fnB5bixDIzEybldAR201ZDcveiZSU29FeT5pYXxJMzxENzw2JGdDPFBfK0B1O2N5R1Q/cGRRbVk5Nm0jKiJuVzF+P0R9filIamRHX3IyYkA0PUdXREw2OC9o'@;
put 'YUZqS0I9OlZsc1lWImx1OzpJIndMSCpwY2M0UXhKfD83Z3ltdVlGYVlFQGc8WzkmRCp3e10pd0QrL2Q6JW4yIWM8KlNiMjliQW0/SUt1IldsKF9KN1BCOXguYmZQXmFqW3l8MkQoV3JMWEtCeVM4RTZfQkVXXlJbWmJDMiJWJWV1SmxQQF1+cnUrOElKR30wRCQ7RzU8cTMyM08hYF0mZy9OanYq'@;
put 'YnRQPjkiTiI6YyUrIkhdRWZAbXFTVE0+ZzxbS3guITxfSGF2T0VJPUxiVHVQe2xybko3bn5UVjhyTlc2YSJOUT9GQzQ6cXM9ZmRKQlh0IlVgNXRvZiI7VE4qa3hMcGljPlohKHw/PV9kfENiam1xTVEvSWw3d3FhTXNCN1JGVnA0NCljfjovNEU7UmR7LyM5OXBMSW1qY0NzWFFbbT5UPVh2Vmsv'@;
put 'fXhyOls+PVFHOFJPdzRPdU1iLywrJXRRamlvJVRvZ281YUpmWDhDaD8yRnI2IkFRYVF7Ij15KyJWMi9EJnU5RjE1P3UwZ0x2RGV4OV90VkFKK3RKOkVmRV91NkpCaWgkQ2lJfmsrIytFRk85Qyl9InBOXzxlTEVDJU9zKUJQPkdvX3NNVXEqL0YkWjEua1M2S0lCNUR0ZF0/KVo0S1ROeDh2QWJR'@;
put 'SVpgT0NOcWRScyk3WUM9VXVQJmp6VX08RWA5KD1KVUpadVhiXng+IU4iO3JdRF9Hdm4ySnxJaj93IXtKaVFSNUM3Xi86Z2lbQGtxeT5YOEkwdFAiTz8qeC9BO29bSTZFZVYzcF5NWSkvfkJMJj4vQTtkT2FNY2hnOCxuNUIueTlEOWtuLkYhJSs9S0JtNXEzfHNVQHZFSFJvKGF1cHFpMTgyYEs4'@;
put 'QTxKZjQmOmBaLiRicCx7OURsKyg/JTZtKyg2QD8lSWUjamh9PzAsOVphR3dKaSE5Z1Q1LlpwQERvYDtPK3NAQD4+ejYwVi4waCFkYjEuWSY3RC8vK0taS1UlK1YwNDpSQ1dsK1h1ZTdXPilbQnEoYUFeTDw0LmJ9Qm1Xe292Kyl8Mj90MDtBOz4zW0RIZCRATnNYLmo1aXU7NEYrP01lXlR7ciRH'@;
put 'SUVNXWAhWHwuQSR0K3lSKXl6M2RAeTd0SixjNUpwZUFUMV5hQlIlMUMqcF9ufmxsMlV9KTtdOWxvNzt8b2YiUCYra0lwdVo9I0ZXKTxUSll5filqPjArQCN9U20rOyFYMEglUGR5bWxoJXFOMW1HaUk3OSwoUlhGSnZTQyFPW2M7bWQhaEZ1UDZGQjFZdE02XzpoTyE0K1dPPlR6Kk0hdDFEcj5O'@;
put 'fjRNcFo3RzhFOFNlO08qPVhnL1lnIVczXS9FTHppX1hEel1rYSlTd2tHc3YiPFtAL1k0eG1ZV1IxeFlWUyEmZztIL2ROSEl1KDR6ekw2KVBScEI8KFdqXTBUXWgsKTwmKnU4cjs4d3s3RzpjRmZGSlNhdGNNc1Z6aDBlfXdRb0hrfUtlTXMhL3UyO2Z3alF+Ok5lYVdzOVdbTk1ONmBHMFtLKXJT'@;
put 'eUE6MkZreyg9ajhbcH1vIlR8W0YoZUxAKT5AR2N0ajdafk5bUjkmMmN9VTpvMEtofW9HLyQ8L25hcmhCQzxdaCghWyg9W3l+aGd0TV0zUWBValFwS3V3O3toLF8zKiV9I0s/fWh+ZzxbTE0vTkQvWG5UeVRuP2BdayEwLDFBT2czQlpBT0goYSFzUUBCMDE1bUVQZFclQHkwTU5rQih+aixJUHwy'@;
put 'ODBOS3ZlKnI+Uis3eyFGbFVjLkJYaSFqImhUWUMjaDVZfW0ubmR5JXkoejReTkJhXkNjUld5TWZuQllIfTliYHFlOSVnUVoud3tnRCJfLitoU3MpWT03ekJHQSEyIUBYdFIpNFljUzFmKHxPckcpNFZkXyhWUGUjZjtVQ056L2khMEJnLyV9NFhlXklzWWQ7KC8xKmlAbyhxcT1NbjI8ay83NElE'@;
put 'QiMhYlIhdXhMUEVYTS9HUGNwKj1GUGNFMGx3fUxARVZzUkxVRntIdXpsd11OWCk5SVh4XXtyTE5vXnddTkAiVylpQCxGSE5aNiRRI0pqd3tUIThleC5XZ3hlSk54PCFiUkB1MW4yZDNPbjIlMSNaI3okTGdmN0lfInNJNUk5P2FqM2lIRDp5Y0VUdyE4TSwyK15kaHhOel1aK0owdTNxYjQ5bF1B'@;
put 'N1liSEtkVHYoK3w1OkNsWD9gOWxiYDNrOFBLaG56VGJiOSZLNHcwZ2VaPFNVP1RkWCU/YjNOc2JXczxnJUdfOFtmUCl4YjNCdVE4V3h5KUh4OUteRiVAelBEQns5WlBVfHpZUn14YV0mYVU2PlNnZnpJX3QzazNPeHpBdltReyk2MFJ4YCo7P2FqWGlOeC5uUl5JLGdRPSNiP0FmPU1laEBJLEJR'@;
put 'Q3d6ZW5jUTpNIkQhZklFTXo5InZDK1M6NCU4WkVKPyFSSiFyZnpJVU0uUkIkWEl0Umt9dVpOWCYrLDsyMj9EMD13PUMkT143KiRPPChqTlMjdl5NTmdCPzFpdytsSV1bNkhteVApSld2b3pXUkohbCYzek45U0J6JGtzIjFLQmpqSWlkSmdjSmk4blVqOGo3SD9YOX0jOCVxZkVfTTp2KDFbS0RT'@;
put 'cUVkJCQxa3ZIdXloUjUqcEBSRlZfSWciTTNzMSVNO2ZHIUtVRE13VVhHL1U1Ln0uUWJSM2NeNGtkXnMvLkxqYHMuRENvRXtMP1Ipb15COHZBa1M9a3xAOFAzIU84ajwkLHV0aENANUlydXZqeytPWmRGRzBWazl7ZW5tRXdmKXApcSMpd1c7XylmOVVlJUUwbktZU3xaUSVQRU9jUXlXb3VNJV0u'@;
put 'TjpVOjFRenF9WEd1bDtYd294NXZNNUsiMSxxPVgyMWU0ZUVuPk08fUZCYlhrKSRldCZWazFJZi9gb3QoMUV+ZF4jYFYqI20+TjU+TyZXLm9EM1E5LGdbPT5geU5XLk5dMmJpZWlhIi9BMDU+QSxsOihubGJAO1g9YigxTnV7KWs2PUNDV0tVdnc3JjBoRDM0MCwpI2Y5X1JFQ0dNVzNHJntSVmI7'@;
put 'Ui5WPl4xWVJuOUp5ZUBfSTY4P0djKllpak9Xfl15PnF5NTpMWVVjUipmPFhlLjJiUlsoWEZVSj9AYjB7ZUVaV2kibkAxNVlbOGJHWUQsKy9teDh6T3ZwU3BRdXkmVzc4bls3O3h5OEZebFRmcUh0KzwqI1YmNEo7M31Ic2RYW3RmcHg1Okxqb0E2TDs4Sz5jYHJDa0dPRVo4UnFwTV9NVnQpc185'@;
put 'WnJCZzI8MlghQzY7YlYxe1lgfV15ZXF9eTtTN2AwM0x6RlVdKCszcStzdndWZFVHTTdZODMhWG8mcEZTJnpNJXl2MlVGdWVIRlFjV0B3RFMrXUl1UUMzQUQ3RmVHU3wqbm1gOnBUPz9qeT1wU3hZd0lGY3xRUVpJYFcpakomKzh6RCRFOUN0KyFEZDYmSCoiQGBrV0dFOCV+LmlgU3xobHVqdVtn'@;
put 'KnAmaU4hd20rLDY6SXdXPXs5OlM+bEc8SmZkYmljRSg6RW1GNUp3Q2RyT1chRzQ1VE5yfUldV2lxUF9YO0dGLl9dYT5NITtzd09QMnxkSzg6K0Q3STsjZjl2WztsRGF9bjE9WUgpXzY1MFs7Il9sX2NUeShHQCNKKSoxMzdFbzV4M1UrMEtfViowe2Q6OGZoKElCPFBTdTdBZihLKnUsKiZlK1Rb'@;
put 'IWZuLG5hRXs/L2s9OkYvfk4ibTQmX0phMThCbHRfT1s5YFRrfH45Z29BMEAvVzRiciNIRUp1TnsldnFSPT9VTnJ5aS9zWzRCe3hiODsyP2c6NW15b0ViUTpFcCwpYHZbR1BLW0c3KmMpLmxTNkJgIjlqUEFAOlt+aEhvIVp0OXxnN3o7KFtuWXhzOSNZIX1dPmZmWUN0ekZfPXFqVjJffXZGOl4y'@;
put 'PC4xaUdQQE04ZnJQQUUmYFkzUTpWelAhU2IpdWpPdjtmKjdKRmYsU3lUdVM/RCZAP3lkS3hGWVR+YnEscjpTP3NMTFBhYVdheWRBKU5nV0t7JVNZKjBtMCVzXmpiKEMqdj9EKzYzTSVDdncjc2pkO1FdcT48diIrcSR8ZUFJVm4pNmJIbUR+NDN3JW5YbnhkO05NZURoU0R2RkBseDQrSE8pNjNA'@;
put 'dmx1L2hsPmF7dXxDZnF0Wn1XJFlELCNQX1RsKztfNX55XTBGNHZBPm9mImNSe1dnek1gZkVCUEJMKC9haiQsKC9WekhsfWVVbXRQQ2hGJUQuIT9udCZOZkpgQH1dYmh6K2QkUltHZTgmJnx2UElOU090LldFOjU7JWkqJXE/OGIkVC4jQ3BnO2JbN2dHKyh0OD5jXWtQP0VEZVtiPkxuLFUlSzV2'@;
put 'Ly8kTkM0e187cSxXPUB5Jk5wZnlILEVNQWJLczA0YGw2dTwkcFUufCh4KzxOUCZQb1gkYjlIe2V1fixqVDNoO1pzRTNnVGY3azZtdishW1R4RDpnX1NCOWk8NzA6UGU2Wi96Z2gkbSZ+SkF6ZHV9ZFQocypmflRDQSxYSWI2UUJrRlE4MnFnOGBfVE4lMkJKJDJiMUJmMnN9Zjo1XSw3LyxmL3hI'@;
put 'NlkwRTozREBSVWEiRlUmci9QX0wqKSgrVS5hQ21aQn1MLi9xJUlKKyUvMDEpWFIrZmJ4dVBMJG8hY0VAVnIuRWVJc1lzOTAqXmBTXVk8MWxySj1sXlZNU0o6KXZQbihhMGJNKnE3TFtYenVxLiRSQltaZytWYW4jV0xwUUIqUXtZR3IqYE17fX4kcnl7Xz94fD4mUHdEMClgKCVwOnZUNEgrb1I3'@;
put 'PldoRktHamhuRzVMX1d9b28pZ1hANmBbQ3EpeVJyfkM5QntYUWUzSFJoVStiSS4jZCxsKkUlMXZLaTh2MiVTVnYrQyUhWXw4ZW85KjdGYDolVnAqeSEufURULD5iIXRfd0tFTSQzMHVlWEcqbG9HdVl1aCpiMD9EJVFfKHxCJmp2aF1PVWBvRi5CKj0ubVZnYGNJciYsWkFmTlcrTDleemEmXXsr'@;
put 'biFMPSsrZWBaOTZwdWkpRHpNJWIldWVRJiVLcjE6MXpEK3hfe1lSaSlXY1NqO0tsL0J9dUZBYWxDclpFWmE/dFU+KmNEQ2JfOCVFY3FFcSp8MCxXT1labyppakZiOGswZE19dT13KTBLNCEme0hjQWc5ej1SblNGQiMwSVhhIyomRGclU21zQ2Beby9Udmc2O2hIJFtWQEIxLix0R2xCSF8/Wy5i'@;
put 'fVFdVTdhZW1Udy9VRmc+KT9tTnAkZXltdT5VNUtydlpQQig7YVQxNVR1PUh7TFpUNVhrQDBNPU1aVCtxS297XWM7fSgmO3g4UG8iczYienlzViJaOTZCNktyZFZoKjdsKzYwbEw+fEpSLltickR2cSpjMjl9OzBjSmVBcGJgbTQ6SVJNKU1YfGBYKHRPeiomVDNPVyw1MFRoKmlUSmQoQzpmP1dZ'@;
put 'JihPVUM3W3MrcSJhdTN2QGtYQE9PMGpkN2tSLmVPWnB4cTQ9XWo+ampHY3BaNClrRzs+bTwrW2FhV3dXPH1BR29nSDJIOz5UYH1tVXp3LzEwNTVnZ2R9aDI3MTlSSU0iL2UrNjNpXSMmQX1VXU9sNSZQYDk1OVNAS2NQcWJlPHA+UVh2R2dkZj9qTH5qRkQ9L2h8Y3xNaTBLTTBqJnFfRzZXL2Q/'@;
put 'O18jNV8zOl1HUmhecnlzM0NCfmdEbz4lVmxBbXh4YnpfNzI6XWEhfG44QGJJLH0pYkxPaDxYb2xmeGosb1B8d25QKW9QIyI7IXh7e2p2RkZIQDZzMHZ9Tk19IXFBRT4qeD9PWiFRPSgkIiJNVkRLWTJaSjNPMTY/TE9UUENNITt6XU86dWwzPTszWk4rUiRxOUtZKkc1Y0BvVG9QLD1nNElRREhG'@;
put 'Q01ZPlslRmpqT1JNXVNiPSFwYVgqQXJKdmlqbDxiVjsxaUdZajdRQE5ub3J1ckdRb3ArKkxaWTNbb1orK1FtNUYpdWVvSWAlSj4/b1RDaFEwX1tFMFJfRTZuLExvTik1fUd5bWIsRSV0PEYxPXsxaG9INmZIN3FSPiVZPTApNUJeYnFkRGReVjA5UFRFSDwxTWohQz5fLjdJOGo1JChiOm5zM1hv'@;
put 'QTw8clZEW1Q9MDFYUEZdMW56cWhBciY8VEdwKylva3kmJTRvPkdUVWwwMylqKHR2NEAiKzo7UTd7eTZeY29tWX5acjZmNzExR15iaSYsTlJdYmJqaWtzM11xfDgpLkxHIlJvdHM+UTBASTo5KS5dbi4wTkQrbFIsWTBmTzNHIUZKN0BJRHI5T1hLdmFuWjQkcyYxJmQ5WTlzUmlAI2ROSXxLXStU'@;
put 'Rk5TY09pQExIJDh3L3x5XzNnPzZwWDE9STY9Q0xacT08R3hJSG9dWVpNRCszcntTRlJkNEhRJVMxNHdbQl0jTV05TCtbTTdTZHBCXzFDcS51NDhzMkJ0fj1BdzA6Ll98bWFPQElZQGR0U2NHJTReOmF+SCM4Wk10JD8wVk09d2BMdz04V0xpbVpDY1ZJbnFoa28sU31ud2RXRTV3QERSSj5AQFtn'@;
put 'TWkhRTJpdn52NXY0LmFuZV91eUxIfnBmMm9iZil7KG5nMUgsflp9WkV4U2MmdjIxej1BOmQ0UnhCbD5XTUhIMyJLUihJTSN6QSUvT2BHfkxgPCo0SnhASSFoOHQ5fXVjZVlAPn1vb2FQMEtXQG1felR6S2FPO3o/KmhfMUoxL1ZAenRBakZrelIsS3RUdFhQXiQjKXEpPl15Im5lLD1Yal5TPkg9'@;
put 'UHhHc1BpRG1MIkAoZitSbkdoTSJ2YDlzN2N5WzFDR2hNN014ajwufU9bT1hPfUJHey9uUC9nOH07UjVjQDhKK1Jta3VQbj9gaCUmU2JPWW9EWE0jeiE5TkNFZzlANSgubU8wVjAmYj41eXosPTZIUkVbeHtweVBud1VhdFQyfn50TkcuNzhHNm9wdHtdbndSXV5kKDB9NSpLRWlAPlVqMyNpOkZ2'@;
put 'e0ZpZlBWcy5aSWtXRjguXnxYXUx0YldgVmcwSDVMJklWPGZvY0JdZmdiMyYjUnJVUUZfbmBYcnArTTcyNjN0YldgU0pATmlhW3EwO3syTnQ0NjMsOCZifDlZfSEsMThNenlBKmJudjplfDFnc2R7YXZiISkjdjdKUnVlRiM2OkRZKkc1TSQ2eSYodyJaTDd8dWN4QldQRX1tc0RWN0g7VHRJNURp'@;
put 'L2xZQi5zR2ZmKjNjPk5ubjptYGYmQjYiNT41QkM/XnhURmlhQjVvazo7LjI+YTFpYk1zMSZyQHRwbDREMVQ9UnlYciVeXV9DNUgsUz5sJEQ2Q05xM2osTFZqemVLUSVgKlQ1QlswJU9aeGpmKlR2ZjdkNEleZm80NU1AP2loIU0mME4leHlrWWhDR0c1UzE+PnM2LiU3dDtYYXlWNWRuMU0jeGlg'@;
put 'KU1wcU04W1dOWiFxcVk7Zl0wbE1XS1M6I3UpVFdATHlBJHhqM0IpZkNYRSxMViIoVndBMkdeZ3pnRStHSVIucm8zZVZeYFI3LjJDMDIoJTU8LjI9TmUhOWpyaCFMKFJNPEJbQmJNQW1eTGFPfDtWUEJWYzhIS3RLOzEiMXlBYzk8eVpyPUNkPHgyaWJpW1VlNi8uNTVxeCU4dF8xaCxlOE8wWG0v'@;
put 'QD1NekJdNzcjJilUPVVxRSRaa0s5O2h9dGE1fGVUIUV0W2Z+Zz1UQTxzR3FmYE1ldFdQZmNHb0klIV4xVlk/PWxmJW9XKjtkKjdfMiR6QmVaSUU9XS4sdT1MVzdHaGc+ZHAiZ0h4KSFLcks9U1A9b0xwcmdsU2dQeXR6eHFscDJsRilLODgwVlAiYSkpXmFeJUBzVktMe3lhKDByNXZUcDAsYz9g'@;
put 'X3UxL1s0Rz42MGQ6LkgoR2FnSV4iPihdX0wvVjJ7Nz9bdVFpRUd0b2wuZVtFR0NmQXlIRm9VU2hZVThnaFhIRlMvYEd7dTJEaFMiK11GOWZ3QDJJWU0iblJWMkMwKzQzN2lAUTI6P2VqcXpsbC49cTsxZmdFKEZBTllxWlEyO1B3d35oQ2YzaXA3eWwrSVcpRCZQTXdlV25aN2dEfWAicE14fTRB'@;
put 'I3pgbXs+R09SOSFzTVBRRV92dEpwNzVZajssfHgpST4/Xj4pWDA9Ij9wREdXK1owOk58KVBFWSk1XTZUR3wjSWZ7Xi59JTczaCVTImVgfmkiP2hQbyJYRSxBM3ZjKyFfVFBKallvTXYzJVN2UGBTSW91PW4lJnxxWzNsSzRZOHBFfmUvMlFxYyhJVURVbEkydyJYJFYwWSN7NEl8SyRQey4oPzFL'@;
put 'ZGosUV5TeGUyTEQ4QkU8dj1yVGVgJl5CdntQeCJtInEqXmJsclErWTxAZXxYIkdbTHN7I0RpJiw3P3UvTX55WUded155SztmXUZ8OWF2Omp5diZ8KTBgU3EyOURwe2AuJkUmSzJzayxKaSYlcWtId2R5SzNtaCN0N3tmfDA7JjskcTtsI2oyQ3IsTnNseTt7UHwqU2dIVW1vcEhZdW5LNUVZMl1k'@;
put 'Ykd2fG0rXmp8OHkwRCxUUEhGViNrS2BWZ1U5XndZWmRHWj9MWnI5SyYxZzleXmQ2JEkqd3ZNaCl7WGgiPSFJejU7QCw9TzB0LkZFUFpvelc/KC8qeTFvTWdPUjROaHZBUlskZm5FXi4rOz5edWJGcTVpckl4d2w2b0MpLGMxMl4leGdQXihUUEtLMSQ9RG0mVkgldCxkIlU4NW4pSkJORVpTbSRm'@;
put 'Z3EjZkBnL2wybzlUM3FTOyowfGd6WUVEbmZ7I20sMzZUbXRtLDBSXyIqSz11UDdmJCZsSjM/MDo9O2xEfFMsNChRclghfFlRMXBLOU4wNUA1YF11e11DL3s8LDpSPFUxZixAPmwjJThzLmgsZ2VwWCVpfVBOJCwlMHFlNWVvMWdIM2NMQEJnWjdlXU50SyM2YXoqeTVjO3FabCQ/ZHRnZyUzX24v'@;
put 'cT5qSmg6RXRQISojNjVYfSE2NVN+KW1UY0A7dl1IP2ZCeklWTWBHP0pAO1ElPSh9alU7LE84X31eVWAvXmg4a2E2SHM+VGI/MC9ANSlyVDsvP2osQ2JMNTVUeTQ0bWBwaGJVJE8oO0JgNyxOP2VYdl51TTVdISJkLHJRQ3dVZ2AhRjVwWll6eipiXnlAQlJWYVhbV2pYQFFAczlPJGs1ZlprRTh2'@;
put 'eUthaz47USMhZzM+OEZmb3ltUG5AXUx4OV9zPDhGZ1ZAOylebFBZRTk5Miw7fG5EfiFWfmpGbnt0P295JSM7Vjw6MnYvcCN2ZXFKRV87N2dYKCl3P1lxLGlbNFJyWzo2cDdYMj48WiYzXzx2bihjfm5UfHVyLHgwS0ckLCEzQ2VGKj1HWEIrOUt0N3hAWyNqezJjRltwZm9rX0VTXylzcUBBdEI4'@;
put 'L3RFMTZYOj5pXWp6I0k8cE9hZXhQTE5GaW5vU3gmL0lWVUVaMVZLOiVeS1U3Zmt0QmZ2bUlnL2Z5dUl5WT1vdUBWaGBnY0U2XjcsdEY1PDtJS1UhPS9OSE9JUDF7NzRNJjwxSCgqUVU6ail+Y0FXOGFvbXJVbyhWYC9qKD47Zzc9bl0hM2VOPzo+cS8lOXpzJCFBWHJka2hdRlNoSCxtWGZDPDQm'@;
put 'V0s4cWw3X0pTeGZfIlssbXNVKFVNRFpFLFlfdW9KSTwqfkIxeTApJSswdXk6PEoibTpCYVA+O0p1a101SE1PVWdjQGo8XW5IRVBXRC4uLDV8WXxROj96XVdzKj9wfT1NY29MRjhIUVRZT3VVTW5dV1FlcXk2dSRCPXFOcmR0XSZue1BjfDhEcCZfYGhge31pYl88dihSLEZIVTllX0d1ZkRmekJj'@;
put 'T0JHKnN8OEREaHwqPTk7SlZwSUtlMm5lRDEreGIuRzxYbVlgJXw/S3wjWCt5SWIrbShiKjVnVXcwRkZBUmtsL0FYcUhkNipCTS9teC9TUWMpJU9JUGEsPHokYXZZRjkicXJ9UV5fK31wJUNNSTYpUiJSUSNmMXJ+IS96IVZjV3Z6QTFlRjE8N1RkeG9jRiVGVG5zTWg+fUticXMjUSNPWFJpYDki'@;
put 'S2QsLE9zQmV4fT0jM1BOV3Vxbyo/Z3JrJX1da0VlYnNjZjY+dXV4UUZZIm0/JVhSYkZYUXVLX2glKiRzQl9kQm1uTihdYTt9dnplN0pxfUlvaWxWLjR8c2IjJkZWPFBGMlJYb3Nbb1QhXS8lY2ska2c4RjFJU3RUdEZ6YTt2WnBFRCtRSSpleF5Mc1o8ODpSa2VdQzolWjtgZkAlSTpfRjg5YkBe'@;
put 'TzdnZilVb3g4QUxMey9wYnowfCpFYT1USXhUITo7QCFgN2lJeXUrbHxhfSY7fVE2Y2tbWlFtRU8oVHYrO0cxczw7ckRke3c/IWAxWTBvald3NkwuS2VjMF5ZZ0xvbmx8JTsodmpORWAwSS8velE/c157IXUmcUZSezl5PjE/RTZWcEs/K1VMPlJeamZDaCxsOiFbVXRXVll5ZnRLTEpMOXJPXTB8'@;
put 'R1Z3UkVifUEpLGQzczh6ckkiSXVkZz8mR29iR3JYWEdHV0ddR1VDZkBGNGJwVXVoeFh1TElgQlp8djN8OHY7MWFHZmkrdS9EdEtManJvV3pBZFMpYGpdZHxYKVBRVXo4bSg4dzR6e0RyaE0hIm06XkBLR3hKVlBfNkBsV0FpTUdWVEM7e2wqcVFpNEVLaWEwODxJYXltbHRJTmkwOjZlX3VNMDVR'@;
put 'Yz4/PmxQbEImTk98VTYkNVlZY2VuRFdCQip2fEFbKW8mI0g0fUpoPTVXJiIrXS85dHxDel44IVNSd2k4UU83eVcmX090PVZbRVJWa3F3RFFtemR3V2w/YkEwdkJWPnR+eDMzZ2cqUV07Wz8sNVsmRTlZKW1gWjFXMlBEPiRafFVHaTVxYE0wQHImel1rZiVHanRQX2BwYUJNfHpSaik7RjVRLlJi'@;
put 'Kn48byRfNCsrW0U4OmNSOV9nIlt3Slc5aWhbdEVVSmZZajZTVloqJWRPaj5ER24odyNITUs1SyZzTEZ6Q0dzOFpGTSpBe2E6VEddTV1ORHEjQm4rQWA3cCNCXWBgRz8mT3NtYjJ1TG52MzBXen1RYHZTdjNvT3orJDQyPypJTUg0bDtVIi95OmAmKHlTXWd7UWAlODxldjNwN3B5bX0yblYwVCUw'@;
put 'Tk90YXFmWXIlWmV0OUh4Ny8jJmRHTnpqMUJyaEZrI2ZNUWBOWVNITDgoeT1bTj9nSEg+SEchLFs2V0ovRipiJmROaTpWVUtpWG8wX1dmNXR1b2QsSDkrSWRpTiYkJi43cEdZZGUoPUN5RytAT1NIYlBtTH5qbGJjIkBYPno8Pl0mdHYuQjtENk1ZTWx8XSYvRFJIYlBKIWFWcSZyeW84SFJhVl5u'@;
put 'eThAXy9mTWlbRlJIYlAiaEVHIlIsY0J6bmdidXNeW1pGIi8rWzYoeT1wVCZoKzEpV1lCLlRRT3giNEtSJChJM35aeEtfLjVuSU9DQnNfNVdGMCVUYFFFeU45cT5EYWJhdkpYR1lmVXpSOXxaeGpzPlZnZmd1Wj0rOmdUd2Rneml8W1QpfUwoSE11ZCZpSjUrMkJNOFZadS8rTW9NOVcrO1dsdCQ1'@;
put 'UUtUKSUzRk5wXktJYjY7QyJhZ0QoRixeKEtOMXVLKihjYilFTW0oViRuTWdoaiRBfExPMGN6bE1Ea3R5UXtXcj8wbUFVJEVHSFNtInhJazR8QXw3OkJPLFghWCtbUDdOekp1SUg4dkxgcyEmTVZEJjBUTEpIKyEidnA6Y2NHXztMWEYvWz0mK0JaLytNPmViYjh+Sz5DKk41dD41c1gzK3grQn5+'@;
put 'RHQ6WFk4QCU7Vm0qPSY8YVc4ZyI/WV1LZWx7QXdRU3E1JklpSyxBcn4pKixsJTtKRG0sIzBOTVJ5N29dbVZvWUlnTkRISygoWmZybzo8Pm40MGQqSjJrY3Y/fHlsaCJWIk1KbEZ3K0I+aCx3b1Z0X2xRdUtkRWlaIW0zcVUmIXY7XzVQKCgxaGgyfjp5PEQqN0BHNGFFZzwrI3MkXTclcXt3OXAl'@;
put 'Q3QhI2JebHg4YkY8aHcxKlVWXVc/SzZvXVQ6b314X0IkTTRKJTdnRWNwI35VeEVId1IqZktgW1I5NyN8bzdmNjU+cikySjhjRSI8ZGJIR2RUP05fPXMiWyE3dyhTbzx3N3ZSS1RWdilWdy59IXshSCY1JX1UezlPbU0zRiooNCtWR2lbQFVPSz9Taz9dZV0/dHUxaG8lQCtebzZ2c0twaDpsLkRt'@;
put 'KSZhKlNseG9jVU08Jn0lfHRuZkhqX21Oa3t1NXBLZTk7UDAzST4lfGM2QmBMRnlPdiZme2N9KiFNMCY7UWAlYkxzL2I3Y0YhWH0ueDR0TVBTVk99THlqPisrUWA6L1ZMTnc8XXZbclV5QGE0fH1MeVhERm90X3FOOnAmcjxfLisiRT52dFJZYXo5Ll9vOUdhbmh5dCRAV30wOEY9Yz8lbnN4JUAk'@;
put 'UXV+aSFoRmNUJVArZEVvanp1Pj99bFBPKHd5c1JZYXtLUU5rfDtfTFM9NH42PkN7NWJ3ZS5FRmNUciZjdnVqNi52P2Nqc0ZUIW5xIzwoQU44UStpTEddNDlpaCJoUCFyc0FQSE1KUHxPVnd+P2AuSiQzUXtAaFtvYSx2L2IieXB3JlY6eHhFWFVyQkZpJn53IVMkZDc9WUNGayN5ZXFoQVFOIyIj'@;
put 'TV4uSzhAImRyRl9DNCEhRWFSXn0rdTNMMyl8Ymx+eyVfLE5NL1h+OD5UU3ZeI0M8bysiO0YvJGAye2FUJVEiXVI+SzRPIXhXPShfJksqXlZMaFFgUl1uLjphTzNbNk9SKDRxbGc+JjdLckJkcDkoSF97dEpbS3k+cSpPT3VDRjhZJj5jaEhaT35rJlcvTDZKbmZWdmA7MlI1Z1teWk5+L3R3TD44'@;
put 'RXQ6WyklRHxnJlp9MiRiT0wqZSUscHJIfkx5U2lWc3x0WykoOUYqTGxNcShgUiw0c29UOzAmMm9bNEs/bW1mfCs4aU0hZ1U+WGY5OntOTl8vS3Fqd2w6bWYvZzReayxnYFUjVjlfWSJtUGRudGcpZmZTUUs9elhLVTd6bXR9Y0MqXyI3UC9AISIzaF1rOTVOb0RHQ3I3IW9zKntrdTJdYUxAbm5w'@;
put 'Z3JxIXJjeThpKGR4QHhhVS82bzo5JjgwWitAUH42Z0lYazcvXkBIdiYwQk84VWkvVl1hVGhpWU1Id1JlaCZbKjAvU2ouX0FUMntLVjwwYDJdUVlqeXA0dFJyYmlPZUNmUGVXVSwoen13KyxSYWUiaU5KIis9cSxKdHB1NCJ2NG9wYHZVfjBjVkVdLCF0SnV8NU4kRTlfTlt9cyZzajNzVzF+Q146'@;
put 'M3I2YmY0KXVqJjMjZEpySC4mRFkrUGteQzwxaCwwTXB2YkJyWHh4RXlnWHx5MHo8L2c3anQxKXtjb3JMfldzV1dLbDBFc1tqPGtCX3cieiY1ISJffmspRTRHLnNgRy8oNyE7K2AzWCRHdEtidT1OJlBbd10qZHJGRjV6Z0gpSX1NcT84UUx7UyRvXk1mQWpCTlhfYiYsWWNVU2Npd0I2W0slfT1W'@;
put 'fE5tVmtybWhDUD8lNSMsPDE2MSlXVSlISHNzUSNeI18/KTBtPzQ1V2BMW2g5emIkXSVXeU9Daz5OOSpVcy8lRSY3O2J6RkdWVD1gLnV9QnBhPXleRFEoSXZyclF5M3d5Tl8rW1dfV1ssRXVEdX1AYT8pX2dkPl0zRFVbbUlmazEsbFN5Ny8lRXF6IlEkO2ZoKGU7LntpcHRbMChHOVBIc0BdR2Yw'@;
put 'TEo+M2FvZjNxL2VXUD9Gb2ZDOz16cWh9MHk1MFVCdTIqSX5PTDwpbzxWJjBtQiV7MSFWL1VMKzddaiw+UlF4TihTRWFeTF1hPjJkUD5jd3MvO1AjfV9QcEtAe2JaOFU+ISNMdSR9MCZJLGs8PCIuNSNqIyUrRXEhbmBtNF5AYjM4ZGdDZjFeLzwkLHcmb1NVXU9pdCR7LEhwKSE+ZEJ2dVVFZmcq'@;
put 'ZT0zJmN8bWRBKVttZVEzPTsoVX0rZD4kN2JTPWA7bz9Sd21KVit4NihIPDl2cyM9TUYsK2ReVWxPd2AjSCRPXV9LM3ZbL3F8PCpjdEMsUzdjaCwhUzwpaiFjd2NbNTtMRCFAWzdMZmEmUHN2ZEJoVFVeOzBkVUJEViYoSzZ3RDpwOiMmLmAkc1tYeyVBelZOeDd1YyQ0M0d2X1J4UCVVJSVxYnlr'@;
put 'OD1kN35YUCVAOHg9Wjx4MnooTVJ4UiVUIU42RSVgcjgsdlVoOD5dIUVCMGlmTStnfV5PYXchSkl+bXlNd14/ZnxRJTE4VHhRODJxUmhfcGRkVj19alhoYjhrLDFnW20rNXQ6SmZOPWYhTHZBQ0NsS3JlJTQ+bT18IWYyd3NyKm0+bT8sPHZgSWxUWWV4MERdOzNpcWBZYEIkeyxQRzpeW21IR05h'@;
put 'ejRkclRMS20vNW88I3dSfDtmZGYkQDZ8LHZCPD1PcSx1ZFYsZ2A7WTF7ZyYpUVQ6RH1lY1UsQXI4OEhQbjBjbyZQYDBNcGhiLj0hQ3MsSH18aHguSSFXZWFpYHRHKzxmZGYrdSlgYzFaK000bFJ+eVgxaVFAXW5Ye1EuTUohaCZsKmlHXkoid1tofnklSCpLe3B2e0xdNi9QTyM0KDB3Ol4pcX0p'@;
put 'QFpEUVguKUI8VlcpT2IrSU4kMFlaQjxqKEBCd1tAVlBVOk5FND59eVBHV1ElOmZYYiUxeGgsWjNuVH46SlM4Q25HSWRDUilXayx+QC9kKUBxTFNQU1BSMFk4Xz4wJkpqOTVfYHpUIUFyW0dqaStfNE9kTEcxZC82YjNUKF9BM1ZfPlVHOVRFYXJtaltAT2csLEs4d2pHO3F2cTtiJXpqYiw8dzUp'@;
put 'Lm02SiJKcUU1MlU/ck91an46T1JNXlVgTlRhPEg5Y11jMy4rbCw4UDRwU21mNmpsdFZ8XWBnU3ZNQ0B4fDw8cm0hJHFFSEdCdWxqI0QhRjEqZCRoRX1LYFdrZ28zPXd+WlRdc3dUR314Yi9kcFtQIzJ5QEI/eE56KnNENX10SjI3dk5gcGg0dD9CMUJKM0EhUChGSksrYCUxX0oqY3dBR2whOCEz'@;
put 'blA/RFJCe25NVkY5S1tZfmNDLGF9MzhESyx0Rkh9VUw7KGxaRUtINk82PVJfbktxNHJeMT09JENGPWhoYXorS1kiNnUvOSMvXjI9M0Nvbzk6cDhqSSJ2JGFLJFNtWiEmJTM9U0dwbSE0NCojdWAlQXojfE1ufmdRWXdFZGczVj9Ue3xrOUN3OzRxLFhDV2tMbko0bXlfJW85ZV1YQE5LemhRK0R3'@;
put 'SmFiOyVWYlAmNy8zI3hSMCM5RSlVNnkucGZkeXhpXWhQJXIpWHI2IVh3PGZ2UHc+OSZUNVIlITNuSjRMPCVvI1Q+by9ISEV5ZUd6aUR4RE4hTVZTUF5SPEp8cmZVVXdzdnlrQF5wO0k9WD5yaipNeGpPKTF5UFFlPVhkNn04WmE+WT0wMmdkdzNJNH4ifUskI0B4aVk3KntZKy52VFo/SDtycHk8'@;
put 'TFtzOVdCTDwjTCFgQlordEkvMi5EfV0rS2UkfjxScz8pczkhOSsrYXJ2I0pTfmBJYGJdbC42aUUlR1dEPV53UFl3Py9fU2t+dGwuVHJKU04hdmckQGcmM2gxezYpNn1STj1EQHlSVW1JP04xYVombzNHJUk/KSl6Z204aUxgMms4UlJ5I0E1N0B3PXhJUVZWTU45fk9KOD1ibTV6TWhfMy9LOD8v'@;
put 'P2JDZmx6Yl5vdns2JmF9ZSU8MlE8JTFeem1ETGNPIj05Knp9L2JTPCwwNkp8VmNNUH0zRDVpQ0dtayVaK301WU9AakJvYWZlS3hGPXNabENIeGJePFdRW1JFQixwQDQuNVgwenZUeEIwZntdPjt9NTE9alRAT2ArUjAubXtfVSgiVmtpMm86cVRfRCk/P1NuOl9JYGxFUHxpTSU6K2BYeGwuXSZS'@;
put 'WTdUVGtFX2RQO2NwWmQqfjVXSGZjOWQ8WGEzPmdhMyh+diViOU5uW2E8XyYpYF8rP2BxIVthM24lbzlsWFphUmlAXlluYWFwJjdfJj4+JmxSV2gqSDlATXpQJWkzI1pfY1luUGVnV3UpMjBPM0tUMVA5Ym9yVkNbIl4vUGwkTCpHb2JEM30/Nk1FKz56USs5WCpqMFFTTiRdNU03JWdbOE1xb1U1'@;
put 'SChgNyxjeCFbVXt6MFUsfjAsRHV3e2lGTEVEL0NoYytlWzFRTiV2fFV6b3gpKi5gcjFWQ0NjPyQpfUJTbUlFNHEoMnk2YiFLaSgpSXdbb0ZEOF0/dlt6UjosQmNpfHNKaz8kfmBVMHs4LHNgdWJ2STBSIzcxe0lwQzY3QGVgM1t5RkZGQH4qKl0/QHxhRmdGTS9CIjZDRExycT5Ud19Ea11Ld1tV'@;
put 'KHVeSFNLc21vSks5OzhSJDo1MjZieVZ8NExWd0AzaFhxU1ZJQXV7eUYhKCN0ZF9YU00xPn4mQyZzenlYU0hffTt3PUtMSkokSXdfUmV4MDdiS2hHX2orX2hGTGE+bl88bkFTQzxOT2ZIO3hHMnFkcElETGgmMzspVUpxLDlLRm9ddzlbMlZoQzNLeWU1L1g6Y1JQektETUNrSzhDR0JTekVTNkRG'@;
put 'd0RrcTw4RzJUU3RNbkdZZEI2fkJWTkE6X05MU0IybWViLCl1JUJQN0Zhaz8rcmspOGNXa0FTR0xCaS5RV2tKbkRtX2orX3o0djNlI1llfFJqcXRMSnElZ0VHWUZbTihVam1BYkdOYERCW01DeF40MW41b3ZeaiE0THtDc1NMY2VMJkZKVl4sZlsrJjJnOnp9cnliUVt7T3huc0g0P310Lnt1Wmto'@;
put 'NG1JL0pZZklJRj5sbmRzLlF4WGE1RmpdajA7VEk0fGM1O25vNHw3IV5gZFJIR1pgb01ZOktFYSlUVWNQP3lxSURddnx2V3VpPl1wOjlbaDhVJFFMaTNTOWJvc2ZAJS4vSDRxfXoxcWtvMU04OzBiVyZPalpUWmlZa3s3MmAoTDBKM1tDNUY9L0xmfW5tQUo4IiwwTVAsTT5ISlV4IWUuaXZEYmli'@;
put 'USFYdiJ0bmkkOz5DZVY+Unx6VHdLYGFScGhlO2IlSVg+QHpRM2hQay54I0dEV3kpMStNO3pjXWdHIj95Y29JcWh6TkgoZHEwZypoen5qN0txfXhBRkJZaVdAZHhiVmNJTV1PKmFNNV06NE17PX1vMH0kISpQYiR4Kkl0S1A4dkt5UmZsemw0RX1PP2kkKnhjIlBJYSVJPWkwcEsrTl48a10le28i'@;
put 'e3tgU0lZYWxPTE42NXV5dz5Me1JyUHV7fUFFJEhqZGNuVyE4MUUzNkxlWUl6ZFJNYUpZUCUzS2Y2RSt6UWBDfVdFQF5QOFBjIXJzXj1AYFl3TXNDMFp9YFZYcyJLKEUrdnMyNTFofGFROVt9W10kR31eVzhCRC9UazwsOCxbQ0NjLltxbUJYOVZpfWteRyhmIzQqSys8MkV6WmtZajF7fkRHdUFf'@;
put 'PV1bcnwzRW5MZkRid0VXNjVMWjw9JkpLIXx7fF12JmtHV0lgYzMuUSwqbmAwIXxOZVtvYV93XXZofENPRF4xcV8uTXNnS34yTF18NEdXW1QsKiwsW3pdRXdbZnhRP0FPQ0I9ITIwRldVPHF4JjBAKnBNdzB1P0BtTVpBOSRKayQrSHA6XzN5fGh+bC5AQFMpJXx5fHY/MlRBSnNwSmlVPEQuXT4l'@;
put 'WGEhUTF7elM9SXB+JEEpVUlAMGFaUl0oSjsxX2IyTV9KMXkxaFZ7ZThOP3ZfOWIiWlBZR1k7ajRfRGZJbl1VM3QlTDIzfXF8b0pEW112SG88ZiFjJEYxcSkuJVU5KGk6LD0oYyYsXi86LyIzMyZyTXN2elApJStQcVZYZnd6aVlBYWEoTHV5Okg4dj9qYEpPT257MzVrPDI1aFJlb3F8fnZydW9p'@;
put 'U2k1NCU/XSZKejRxZVRqIWxKOGN4aiFffjI3bENhTjAkOz4yWU92czZIWDomLy50KWdHOlpjeGxXNUYxRGQmKWUuKlNeWUl6cGxzM2hfJG5tfjhvbHEvUk9fQ1E0MU5gWl8pJWUuUmk0VlFLeVA0cEowQXp5bWQ1bGQuUE14d2h2XiolLF57el56XXtieXltdW85KzpFN1psJHRZXllpPnc/aUd1'@;
put 'Qno8IltleFJvPVRdJGpZPXUuXy9IWX1gJXhIYituU2dPekJFNXY1WnAkY3BTSkQ/a3ltVHoxVF9TRE1sd2dAJXVfZWlAYHpkUXd0TWlwVnhQLDBML2Fqd30wWVlhVFolWXtHekw5aSl3ZXVtRUg2MTEpVnp5V2ovNEtHZH1AI0pdeXc5TUE9QExxNSRTNkopOWpdQl9MWiJxNSlsLFdwUy5FJHss'@;
put 'U1RvdUQ0PnNweVRbQlU+VHxROkc+fC5geEoiP1B4Y193VGdLcD9bW0xyXTk4SUtFaktFdig/VTMkZWY3azwuZCIpOjQ8XnRoUUovU3xMQzt8V1ReKltyTGwueGdsJEs8X15bSU0/TUlPOCpxMzU8WFo9bVo4JHo4WlFVb2YpN1MsVj9PJjlJaE0hfHZPWzVmYiUxPSpPNSFld1AifilLb1Z2WEkx'@;
put 'RSZ1USNfOG5RYWdSQkIxKDlBeG0lKjBQaHdPSW5tPipfQ1QuTmQ3cUw8O2FNOCY9MnhjbiFHMnNFKSVYYT9CTjg6TyZfTWZQaHtVI0tJczF3NG1lM0dkLm1IOC44LFJzTmsxMV1zNzQwPDUkY18md2kkMSt5X3JkTmVsTUB+RU9WXXh+PV0xVlRfSlFVTiw3LDMmQW57MSxzL0tzZjNAS3FWR11Q'@;
put 'MUBQVndkW3hVMU8hSFdEPVkqYTVbS31OSikjPT1eVXVyPDd1TC5XSmNDUiwyJiQxbWZScCxbdGliQV5JbE83IjAuJUlgVTkseE97ZT4pXmtWM2YhMkM3U11FeTxseTEpYmQ3MjxVLjFhIk04ZC4xNTM1NCh8Xmw4RE0jRnlWTXc/ISRJfVs8OWFKdm1QK30haFJ0YiNPVHN8KiNvWX1xT0g2WTBE'@;
put 'ZCs8NnQsOmBMWXUoNWZuMmhqPzNvSG11P0BoX1J8I2dIIzFURXhLRD96eiE/RX1ia3EqUlk4JHNgLD9XeT0kNXtUZGtwTU9WJEtyXzx7UUdmOCx3YThXN0w2MEd7ZTc/RHtMWXVxVSR2elEkKlJCSChNenRvaWNiaXkoXiVbQikxVjIwUHBNUFY7eXU3X0pWJW1MSGxDZmJ0dkpLbC5ZV2B4PlhL'@;
put 'Q2ZKW2szP2hHV1N5ZjJdWDQ/SWlbc2csOURUaDdxailpSVo7QkZFMnFVWXxIcChGKFV2Xi96fClDZkRiJUp5PnVsP2tabTtMXTNjQWdtezNRekhzIVkqYjwuUHlUdVgmQ04xc0ppZj5iaSJUV3xaUnBHKjI2YFtqaHNvaVE9OXBxRF5kSF5Mb0JpdEB8czl2e0RgOz4xZUZqdVl2KTU3b2B6IS95'@;
put 'dCRCdTYpOHFkQkYqNVlRRHRSOEh9QXl2KD4pVS5wPS52KF5YUmpxXkEkLiszcVl7JU18P0VeaWZiOWBeamV+UUdWblYzISVTNjQ4ZSNgT1Ikdkc2Smg0MmBMKlc9N25qVDZ7VkIocD0hVExyeiN8d0N0TXRpNVRea2pgejY2O3g9RWBITjY/SU5aVDdfZGpOWls9TVNzUT4qSmx6I253RmlrTS5P'@;
put 'T19WX0F2NnxvRHZ6MU1KQENaSzxaaFV4ekNENmwjP2FgZlROIy5OZ31jXjE3QDRhP3ZAd31YSUxpT3M7TV15WG83LG45Qn15cF5YW3o6YntMeW9NVV5Sd1cpfj0kVSpTPTR1SkNgVDV8QytfIk5SJEpBTE1WPmc6TiVfXS8/KkhecE5SREdYWFFZPD5WRSRiKFk7NWVkfFUvVk9aU14pWHpwcjJD'@;
put 'QERpbk18OThCMV1KW3p2UW8jYVpUIjo8WEtVXno0Xj1TUUJ2fVNfM0UoWihFYlE5RVpUXyRGNlsieyUkYn46JSFTPUJRcVhdVWBmKiUwJmp7VkJ2QnBTPDNDPW9LLEspUUVwZyY9MzgmYmVJeFRaRWYxe3N7fCQuWjg7QnIjYXIzQSF1SV1sWktzVzc7VTlBe1J3b2BGbj5DTk5QWSJIKGd9ITks'@;
put 'MEkuNjVDKEtfX3NnO2hwZlo/LExuZEozN2VdWk8hO2FAcGZjOzJ6T3xmP2U3WnslKG55WSYjTmQ8RlAhQCRRTVNxQCRUYEtMKW5AKElEPzZqN2tfflBEZCQkUU0kJHB6aFNfSWdnNHw6RnJYNWxXUTJMczI0Km5jcExzMl5vQE98KSZwczFuZkAkWF0mRmEzR31PREZFQV42cmV4YnV9M1NpbzQj'@;
put 'djl2MT4lQ01CUCRSUmF3bWomaVZNKFdYMSg3cE1CRFd2cEVHYClubUR4Ll0xTWx+K112aHRDSDJLbm4xdSkwcHg+M1BJYUVSTyJYXk5gakJ1fEk/NDQvKTdJNnRkVntsTHdhPzp3azpzVXM7NktfJl52VV0veG9SOl0xcVVqbmp1P3lEP2YmfTFIb1d6QEQ/Ri85YWUqVW1SXkNDMnJ4ZDdNO006'@;
put 'L141MFZdIk96VjR7TE8iRD0pbUYwLkpPTG1uZiIwRTU5OWxQc19wbzMlYVJGTyV8L10+bG9wbmkiNkZKcj1dJXNtTyEpTGhWbD1HPSZjcyJdbH1xaFZEJFUrMzEoKUxSekVOPXkveS9ER3Rfc1VOfUM7eT9DXiQ7TUdCNElMQH0lXmtNKjJoM2Z3akJDan1nQF0mZ1RgLipGVXVzYy50eDIxSmND'@;
put 'UzA+b3hJZFRPKGVMZT41MDFsb3FgY3AzRCoyPyhtV1YlbWlrQDRTKCxuT1toVFIiVHhtInJ8SXB2Oko1dlQ6fCt+WD1YcUtjfFB4OkxlPWQpY1RvOERqRGlgWlBHKnBCZDQpfGtVTzQrQ05HMG0wVzh4PW8jI3huNTlQQ3szcCYlQ2VxOHUsfVhtP2ZfcTw1YiI9Qk80c0tRcH0ubWxMK14sPTso'@;
put 'aDdeZHlqJGomaX0xInJ3VDVCOTspLEpmPGFiKT87OD8kOjR2VShHQ1d2entvIU46TUg6MypQXkFTRCNMWUkiUi5OVkYyXUksOHcyfCJGNVYpTyJGV1dbcSh3andkY1A3a3RlVnJgM046QiEifHRTWVMqOGhyc3FZVF5dJnRdanZ4WEJzLDJYX14mcHFgdlQyW0t5JVZaX05sT0g2LmUobTBIanE1'@;
put 'N1s1RmQ7KkNFOVd1T3spPmVyXUNER108I1slYm9WKlkuXkMzUVR5c01zVVE1T2ZJLD9CdGBKYEFAWiRtbDkvOjY+Z0hmWkh3M1l2Tjt4MHkpKSVhSSxpZWhqZUcsNVh0NSY7TTVARigpa2NTPEohViUlREFdWGUiPDE+QDUoZ1VfQGdMSjp1dCZkTV0yWXUkLFVwb0dWWHBkZypeJmxkI25vZCt9'@;
put 'KWtsJiR5fFRBTV03OEs+ZFdde0Y+ZG4/aXQvLzJLU3oxWnFjNERZYkhXQylyK1VHVnVTK2l2alo1TyMwJkwlSyomM1IjM3BIMHw0SFQkM3VlY3haNShgVzIoYFdKIlBiQXgxbW1QakZkSVVkNUk1SFUqendZOXszJE88YUhnLnVWM000bWJxdUVvRW4/cz82e3VBJFNITWp9JmdpLmM8Nml1PDl6'@;
put 'KVVwfEpZXV1gL3g+OkpQWk0ub3Q5RD56bj5SIXEmJTpTMW90LG9hPzpsVmskNmIoaSlRUHc/LEVme0dPPXxjVlBKVHYxPWhzNSx1Z2d0OGlxQmBXXy4xb2Rvd01IcjFQbVo9dF1aP3ZKc2lmPHFoYyxwbUs+aXlgUFVHczU7Y3VsJENbMUdZOyY/JFgmJEQzclUrdS4mU00qJncqXmlGNXlOXno/'@;
put 'P2pWbTh0KEYrPlVVam5EP2ciOnFpXTI3T0hkalN7LihMMkV8QltzP0BaUV91YCZuJERhNCE/azRtTD9oZTUiQCZEL2VIRCopPWRLQyp7eUNGP3szTXtLV197Ry9oXzBbeEZTPjgxfEBZXVd+QCxhQnhfaUZpYyNtQUFIdD5NL2xbYF9AJHRJajVQWHZmQSRKOyJVTDFhQEpIdG1wS2FfaFc0bUdz'@;
put 'KXt5bHlgN1tmQk1YRndEODY9VlVVRkYiPXp2Vmc0TEBLRmlxb1QjIlkmMCMoK0FafEphMn1YREd5fmlxYDQjX2gsTD9oZ0JSKyRVMXJaZSh+eWRPQ3dbYDNXa09pYyshTnxRQzsuNCQ5UWdQSDQhaVkqNklPQjVSSV86NWhAfXsqVVJUZnh4bF4jfXU1aW5yc2omfFE0Rng2eXI9M2hSbz1+NkBW'@;
put 'KHxzZ1Z3fTsqfm99JEo2PUFOdHB1LkloXT99NkJTUC5rNX0zcH1GeDRHfC4hcntRPUh2ciQvRnxCW3tuTXI4ZWJxUkY+TXJ7ND0obk81ZX5MeXB0WGUwSzMxaUxgYkxTZjFkOC9vUDlLL0o5OmMpSyVuJl9nPjM1WFhQYjJqNDFUc3BgKF89SlA4OzdCP3YuOzMhcnFfRnJQLiZeTm14eHVkTFNU'@;
put 'NWV0MjVwPihML19gakdhX098Kil9L2NMdVZzR3VqdXQuQFVTPkw0KU5wSSFLTFM0fkcyej5nbzUrfmJ0Ljkqcyl+KnldRi9faFszc3wpfXwuX2h2Xk5tWGsqbnl4Q0w/blBge240NX5Eei52c3h4dGQ0fmdvNVUuKk9GSXpIUj9+I3M5TFZTNWo0XmBSL21UOlZxdSEsVWQ5UXxdS29WKlZaNSM1'@;
put 'X0ouVilJXyozKyVuOHZLXk9oVkxdREpxMjdDVjUwQCVMXXFlPV49dm5sd3Y0XkJBR0x0fU1OKVJqPVRuQHkjL3VsJm5+dTBnIlRiLlZRWnkzLHRdcWVRcVdWbTkmZCJqd3ZhSHF0OWNOKjYxUy5CN05vTiQyKkZCTFJiPzxIRjpXOHUxVH1rPlRZckNZOiNzZ1NUTEtLXkBtQUxAb1Z4fUdgVGVe'@;
put 'Tio5eD1uU2IyWDlhPGl4eDdBUDRIVG9FM2FAZWBhdyNpOUx3OUpQLlFlb3N5WnwuKyYzIiZCUyQ2YTNxMU5DbUh+UjMxLipIdTZQek1lUm45QF5gMDVveiFDI0I2cmwibzBOJG1DJGI1QGAzL0RKSDAyPXp6QU1fIXVQLzVyUyltfW5WVDErIU5gXUZeIyF0IVMmTVpiYTksRSFyPH1VcjY5MSxh'@;
put 'LiZ3cHAoVUlbJHFAQCRQd3dEXkZxSzAjajw/QWU8cylmUFFlW1RXd3txRURxRFR9aDk/W1dZQi5nMVRyd3QmWyYlTSVMaGVERS91OzYkd3ZVcTozL1VyeHVIZGdxeDU2Q3dRUGUqYWl1Uy88bTVEZl9ZTClCVnY7NjNjbHxRNVVYaDIvJCxAIUk5QXdbdyFPMEVLXn59WyEzXjIpIUErXW8lYy5z'@;
put 'eSUjKjcjSC5dIypFKHBlQm9aVC88VFpjdyQ/dGc5WSZwcWded2UzQHtoLGYjOyk0UCU3cWRMKDU7NChMXjduJEhCOiZpMilwKnEzeW11PkF+JT5mMHZHPFZTWz86Y04rXkg6X2ZuRX5nWUEmaXFqZEpRQWFeKFE9OkglOEhuTzE+VWwhb2k+P2dBYDI9NFYyKVFxWXI6SDUmS3xOZFZ7aylWcmYm'@;
put 'S0hGXlJ7fihqPmhZSTxSRH1bKD1jKWdLZHlvZCZRbXc3OFpdaDByYjVNZXdjRkpqdjtKRSZySiFlPl5HUzxkKV9nWiRMeVswTChkOCs7Im9pUXMlUmpCfVlaVHNjKkBuSisvWUR6TFo1VmlYNyhpMGUpfmxGPDs4I2ErUUkoKHpLPU5iYiREU09oJS5EKmAxRCVXRmRrYGErcil9aygsUEZDMmpB'@;
put 'IXJ7fDF8NzIjITlIfFtuVH5PaF0kOC5yUXZnZzJtZyF6bExDM3REUmN8ejdRNi9sX3kyX2c3VTU9ezBsJmcxNF03eTBAbXpQdyYyRkxUTW9VQXc4R2p5Q21HN1EobGpSaXloK2MlYjB6P0VGZnk4YFYodSg2bGRkYkJwYWcidGlgRnZgcS5LMHJad1RuZE9yOj5OQmM+UTRONH5qYXxmazM7I11T'@;
put 'XzZ2VXV9RWVBMDR6elBHRiVqQ3NmMSxzLCYqR0wxNE49K1RJS0lUeFs8bjhKJiwhbHJ7Ym9nPTNSdClMcXVGbDEmMG1Ec3MkaDBkekFhYU9YNnAwYkp4cn5Mc043Y25TRjZJYmNIY3wzfHFobWFqTE4hSF12Y05hWytgMTBZYCElQzt3UzZGQzZ3V2hJLERwIio3M19KNzR+Jm8qUjxuZW81SzMz'@;
put 'S1kmNDxeZ34rNG41Ym8zTTQ4dyZAR1Zpa09aQUpoenFMQGxBbGk3SFArO1lnUGFdRj5GYmA5Z25IQDIvRnlRSUU/R0lmeFMoRj4pRXQ9fT1JOHkxKkc4PCwmWUVvSV44WWl4MyEkLDwvKVVARGhLXU9ObHlIMSRyLkxHXkU8SEZPcSo2YTl6b05oS3dwc2JIZigqYFpdM2pufCE0UTdjQmI+QGlS'@;
put 'PkhEUzpOanIiNVdpTlJ+Smp4PDx4bXNeTDQvOURofDZfNX09d3gjQC5dW3giLDwsLGVPaG9OLiV7W3pbfHlSdlclfTx7W31OXmdaWE1HN1kqKUx7bWQ4Kl4hSEp3WzlhOSk+W2Bdezd9KVpNTGY1MSleejliaSRMYTBGIVY3KDkjUTpjLGBLOEo+TCVtZEVMNU5VXj9kYyh3QyF8QjFHP25zK3gy'@;
put 'TD05OCpRIWYxS204RU4ldmFUfSElZV4sfj1SYDF7bG0vOGxtL2N8PVgxSkRJLltMO2I1QClQaEp4YkZRVDBJZD1nYUBeOWJ6Mj5jZCNNajxzXW5IYDVJPTZkUjJzQnBqMys7MWNPe20zd0MxOCE2cCI3Lig5ITZDKDtsViN9Ly4sNnR7ZUJIRUd0XSJ8Y2dGd05GJChNVytZbyo7IWFzVHMpJHJ7'@;
put 'WU9iPExQVFYwbSk9NkpjZUlMNjksPXtrKkgiRW89P19BeT1oNT07d2BDOykpcTApJlFoe0tRXmY8M2t9XmxFIVRVR0BxKkp2QUQ3KyFfXn1eLz5iWktnZUQxcXJ3LHp7YWsjZmFpTlIwST07UCN7P3NVQDg2NX0lWWZ3USJtQihHKmROMiQwJj5nMT4sWnY+KDBFbnVTRC5tIW9ddltXKjhVfmts'@;
put 'Z2RwbyM6aX49TG5zJHVebWRkSEoxWjZZMUUxLE1tb2NvNHVSPlh4UEJtbzdiTDc/QE5gdjVndyRNeGNLX3RZfDVxTjZRcDciTDJRQzNQbkhQJjc3cE9oYXZNYEwxQEVIYU5obGQsNFFwMWVVJU5geGpoYE4wangye0pAbnJTeGpEcz14Pnc4WV5ZYUFxdHlWVndVKjJpaU94ckYjOXl2byVUOTBg'@;
put 'eDR9KTtPO3lVPDl9Q1UiaGFQeFV7NGBLOVdpYHs0InJKQFFEfEdbXTI/alhYNWY6SmRHQzgvUCZXT3kpdl91Y0h2PF9OUFpNZ2UwR2BIPzpxO2A1c0JVJHMsLjVFZlMrI05UYkRiYEZHRDxELiIqQFA5OVhYTVVRKHRmL3NMNlh2WFp2X3VUTz0odT4/TENdblhZTWZQbGROUmovRkREYV1oX1tV'@;
put 'RHZPb2R4fSl4QDcpcEFMQHsyZ2hKU0RhPnkkaU9JTT1xK1JDXSJDRTRCeTB9XS9MYl5mUD5tPFp3S19FejQxJHFIbSswZE9VUlpzM19RJm1kVUt6WVdaVl5FJiRqc3A0U249eHdaKHI2eDNCMHtySiFZK1krdyQxZ1UhMz03MGchVj1xQjx9Oy9WSUNJZF9RJXdYWk15M2wkJFtiQGo4PEA3Snsk'@;
put 'MG08SU1PcDoiTUt2MEBFKnNxdnpbS0NJO1NZWXdEV2NtZXdYd3pbS1NJO1MyZW9GSE86QHpsNi9FaW1fTjNiO15Qek5oKWpWcCNmfWUsZnlCR3VIbE04ZmkvczpfK1FxLFNRJGltYEskYiN3IlsvNElAQldnIWUmWFR8RkRkdSQuS3Zha1liUUE5eixMZWk5X0heO3U8ISl0SXUsanJeOGsrO3NQ'@;
put 'cV95U1c6WjQ+bksrfkhPSCRsTD8qdFEwUEc2RHJ6KkNRb2FVKzxZakN4R3FCIXwsbmU4KSJ5Ol4vLnElKyVNcWRWPSt7VVJ0OjJMYihXSlp9X29gKkNjWWomYSs6Ql9WYi88K2doYilwQ1UoPUJfTj51ISxZYE9admQxN35tNUR9UlYjSCVTNUhUNjkzYVBVIV0vfmlATVhfPUt4aH5KVn1vaywz'@;
put 'KTNyYlVdcWtaeEwqelV4alBoZG9YU10uYnxyVWIqcjB9VThhczVNRTBeIld9WHlZajI2Y0lXaGIpeDBLSCxIdykvIi5aPjBhMWVlOmkrYmY4ISlvVShqOkVaQjZtUmUpKkohcX5KV1oucEw9N0dBKT9xYSxvJTFpKiRvQ29EVit1LjMzQTZAJTJSPSxEenZ6Lm1BXVJEMFhbdG5CSTBXVjVibztK'@;
put 'W0U2blFbOy4mTHYyVnBxJDV3fkIqejR0T3h1VHJjdz09dSsyUCRANjgiN1glZnssPDlWZzp5bSlpNzxmeT4laDM/RUBdWEp6OXVpWCZqTGdDbk5NX2tuXjhfSC8zSzEvKDsmfnYhMSE5ZkYzdmUyMiMpTGE+Im18bjgoKFM0S0Z3IThQR3lycVU/T1AlLnQmMnY/Y0BCZ2xZbVMueDVJdXVeJS5T'@;
put 'PiM7U2tPaV5KZGNKQTBiXlo9QUB+b0VTRCR+cjhHMkZEZlRQPzQ2K3BwQF8pPGhmMXZbaillPEh6T11rVig0UkgkJTdxZGwxYVQocWxiRDx+UDZSRGNiRWMreCl3WChQR1IjSFV6Q140LFEmdWN0bjB8RFYiQEt4clUlTXNxMHd6dDFkI1BBMD5ue3VTKUNEZ3RPWVNGaTl4JGxQLjc+Z1kwRGR1'@;
put 'RU4mPkopNnl4S0YpSHB+VCs0Xn0yRDgmRHNaYmtbO3Q2MjxBOHRdXkxld2l5LCpncWBRIUswNGBGV3VuJlEwcCF8MFQ6e1s+Tz5aSls7aUUhWCx4RV5pUGkvSGNvMVdkXkNTdEZWWk55RFE+WEx4XS8kUSMqXV04YTU5NzR+cCoyQDFsRzg+W053e3BxQTVHUDVETX0rW04/ci99NFYrR0leWT11'@;
put 'Qz1WOFpUVHlXbGZoaVROejtBdy84fC5tYkBmZHpAQGt+IylzSDpTYSlpIk9EfDZzV2F5ZHF0SlQrKTRpdC9SLm9+eVlWfTdea1RzKSFMbEgucE9fPWY6NU81UylzKSwoWUQoVV5VPmtCbXtvRzwsIU9+W1o3KytUeE87akx0VkAzdmh5KkpBYUNnSFltV1lHPUlTJklMNS4lX2cpM2s2WkBFMV88'@;
put 'SFhzeUZjTk1tIzV3LkFAL01UJmUvYUZ+R1Z1bGlxZ0lIdU9iTT5ZOFpOKj9bQWlIdzMiYCI2PEpsKDNtNy5zU3N4eyx7Vz55Xn1ybT8oNkthQEVvL15PRFtaRVVGfFo5cjQ4Wn1hIXRibz1ZIV1jUlJkMlVhVjwzbiUzelBXRiVqdFQ1eGB3cEtkQDxFQDVFM1RmUmc9diZtcjdbRTdkVGlQLyJd'@;
put 'S0AiSkBURnF9Mm5HSDVEPFZpPDlOdDBydlF7TyVgeVF2YlRXQDA5fHJVV0NbaGBKQFQmXjovKyZKcUl6dl1CRyI/NUA3KUszVnZYJDNVJko9M1BOd09ydiFiOFY3N09Id1tyVWhGeDp8b0gsLEVYSjIpQWFRXnFOYTFQZnE6OXhkMzN4dTBXPmBxKFssdVd9MFFMeF1VTltUUkk1KDB7cTY5fG1m'@;
put 'QFBzR31qLCk2ST0yfGJmNTVKclRTVEcwK3RVZVk7SUpBQFFpRHYoK3U4RlFPZ2NtITE1R0V0NlF0RHRkfEZRaWohWlIwKjY+eW1SQU1DQUFBQUFBQUFBJEFOSiJ7SnRmckdsNUh9TmBqQmk4e0phfjQ6YEwoJSRfSWRDSU5WRGRmX2VpVC5hR1oyMnB+d09zWDg3ZkNDbVdjTmtHYThSLzluRVhy'@;
put 'ZTQ+enQmJWwkNmZbYi5YSzlpLmA3Z3h2YkhLVF8maVR5V1dgaVNbNG1TaVlDbWFtN2FOeX15P0hOMCY/eDQ7Z1dRZX5vXXN8a0pWbG03UWgqWmlaUz5TOStWcE18UFBaS1dsJFcxY2oiLGFSJiZPTSoyez9kNGJATHhgOltmSThCbXtEM3xVKzIhXU5KV2pWYWhCNjZgOXFsYyFNVVtrSE9YOSYz'@;
put 'WWtAJHoiW2lHOHFRPmU7azlyU1lyK0RZWT8vKTFEWmRVMj49UillIzN4VEM6PCgqZEVCaGlASj5bZj9feWtaMyY4Z1cqZV1yMV8kT2JmSy9AQjJGbUhia3doTWJ4NV9AMiNzTStocm1HcGBiI2ZjfjFWMm9hcSt2WHFXRVFmRF51SlNxcXdlUixzV3IyTDZmKEVxdEt7YSo6Knd4IyJ6OWRBWCJ2'@;
put 'e3xATW9+ZWoiX30+R1dvUStPd3U0azYlZDBjbCYzQEoob31PVXhve1s4ekd7Pk5mY2wrdltrWTJvVXtAUFdKeFU/cC9HMllCXzRYbU5mXVMicT04UUpHbTAxWUFtaGtpIz8hTCkhIk1wTDxAW206OEcze2I0Un1WY1k0OCtzKSNhJFN0QTpnLGleI19bT1FLNVRGezRzfE5baml6b3RBL00hTUJE'@;
put 'Z10qZmU6Q283fDxCcFE+PF59dHJGcWA2KkArcFE4fWtDO1E6PEt5LnBvXilLeSVzSmosImFYMTlYMSleQHdqMEt0U10lVylYZiFmUUBheXY5fS87dT5sXyEqR1skUEg1QlZ9IU5mckRILDBiLyRGU3hJXyxgNkVLclNhTitmRkp8Rjg1UG5yL2RCWylZLmM0VXdWckRUa3UiQiNuQl9ieGVHRDBQ'@;
put 'SGVvJnBdc1V+U14re2RGRk0hRzIyangqKWJveEJqWlBEXnxsSyJdTGZBWFhYJF9rS018amxAI2kqK0E1QnB9PjNOPW0lejV1dnJkKTF3VCpuWWhPWSElMmluKVY3XWt8V3JXRSwhVkpIbjNJRD86aVh6eiRfMGtIM1Vtd3IqNktEZH4lWy4pcEY1XVkoR1UkdV19LjpPY1lhbDJ8TVYrTlcwPF4y'@;
put 'Mzh6cFBEWGo6RSRLdSZMMEIlL281NkJhQix9MkEwZ2JxRT1je0BNMktaNEpHbHo8SyN2RD9RQ1BFK1ZrO1hzIT9wfSJ8JSRIaHgjeVliLF5xPi5gSUIiVDYjMGYuanVraU83RHZZMEVjbEBobU5yOFtUfndWeCNXc3dDPHsvXl9+eGs1e1BkeUo6M0VvNUtUZUlrbUF7TTRfPH1jTH08bnQpdlhr'@;
put 'Nlgyd1lbJWhuNGRGWlJ9QyZfVkA0V0AqUlNJZFE+elsyWzBDM3xsSG5KW3Y9RW4/cixsSzFBa29XPEN9czgle3g+ZyR9KTtDaDJfeDFYbkNSaGVzdnNMR2JYdCZLIi9iaS5LIXlaL250ZyJrZTZDITFCYWh7RCI9cSMxVHtqe1lWSGI4K2k5UUB2ezs2YGFJXWJQQ250L3ZWRDV8ZythOUV7ODA+'@;
put 'bEEqKlZWdkl4XyxZWzt1K0xRW3dWdS8qd01SMEBfYFtCdjBAJkhvfVE/XUNuYHFsa2I3eE44PVcoNGNRXyIvdiNTcWkoU1M6JDkmSj8yUEM1P0BYPT5dSkNjemJ8bzsxS3NjWC9YeX4hJSNodHk0Jj9iK0E/V0dJfSFIOG5GXiwjKGNOZjB1N1JtSlYpQkdOajk7cEkmIyNUMVJ3K2dHa31Zc3VL'@;
put 'fURLSFQ1QChZbk4lcSlzcmpnP3BpfU8pW1Eia15LQ3VPa0lmQTdFR15SYT94QVp+cTF5SD4qNFc7dmhtQGN9P2FTQW1OJSZQbUJmNFZwJk0sfm09KFs1bDFpTSpaa3ZSJkgqOEQ4NzJzaTFwbTlGSDwvLHVZZk5nI248VjlYcjtZI0p8UGdxRWsyfShzXUNNOUxWSyJsUE9JRm5ZUiUkSDYzLFVJ'@;
put 'bH1KLmUqJSxdcyJ7ez5kZ1ovaEUsYWB4YUYpLHtCayFdTUVVZmptPHsxeGpdX3RCTFdGRDxQOnBYI3Q1MUtkN1sxX301Y3cwcmVIa2Y0NVleXUNiXnhMXzV9aDVGUzN9ZjNwU1ckelR8ciVNPi84STxJdFdmMXxmLlguaGYzeS51aV9SdHp7Lm9sRU8vOF9CQGImSWF4US4vWF4uQUpod0Q3Til0'@;
put 'SWVTQ2JdMVp7Uk1AKkpZT1kmO31wP3EkPFs/NH1nbSlsMl9zVElBPE5YcWo0TEN5aSJgIXlhKy9mU25MKFApaHJFfHIuKWdKUyh4SXdOIz1xeDtSYW1ZUC5jLlBfbDk2dzl8emhOaG9YPjVGNT94RCMjdFN2ZmF8OGVtWkczN2M4JjJfMz99Wn4/QDUzdHNNc2h9PkZxNTpwLHdYTSoiO1NeZ0d7'@;
put 'NkZyMWxBP05gNmppPkF1WlRmNG4/aDosRz9ULzRHaHFxTSNFPkNbWUdkXmEyYTtJc0UlNm8wKGA9d28pOEBOKGM4dnZ1PTFEPD0vWjY/U3R3NCZRQ1hwI0oiUXdXeXRUMmJhJTtKenIjQGp3W0tkOV5aI0AlWkJxXnxzcjh8dEVwJVg6QmI2cE9pKj9oRjtBOFp3fmxVT2s8fGVjRDM+PklOdyI6'@;
put 'JVFnQG1oUCkrVmN8ZFArYWAkcn1wNnp0Tmlnamx0dih8L0Q0b2EodFNERk0sUnlNQTVtREF9WF5IRjh2bmR4ZkRgK0BPLzhkPDtVQFh8MHRgSWVdOTlbflNgL3tbUG4iQTRlVFkyXUclL3NqM2k0Ul9WTGhXcUVHXXcjUFshZlRZR1MjciNiXXpuQUc2IURiekYqOnNWL1ZKckJKSH4sSCJGNzt+'@;
put 'L3prOXNUbz8sUT5+QSN2R21DUGZedUVWLi58PHJWazZnV00mRlU/ZiZ3fDspeXhKRGBvd30zRGRQQCNSWEokYSR+LG1aJEI5TitOaX5qSHM/cCIsPVNLTmk0MUx3W2EhMnYqUWFPTDhFXlZsaVg7UiZ8N3omMlltREUhMHJ+Y3wwdihObmlvKHA3VnlnOjJkcklucHRaRVFNPj5yRHcqKUZdMG03'@;
put 'YmduP0wlNCZVVnIrQVdDVSxLd2xjR3ErYW9BLy8jNHAjQ0xIcH4vRnBvZFRDe1pOPGpyOEZlbVNtKWRsOE1aWTAoUiFPMDVPIkF+OmpDSCtJVDVmP046O1Y1O2xPX35aQFYren5RKU93MVBWdllBVmAjbV8mUW9xckQuXTJxL1smQGB1PTJrdG5GWiYlNlFCRVJ+ZD0obVY3fk1sbD9Ncks6bXlW'@;
put 'XU9QP0JuWzBtUj1hTkhtQHo+ITp6M0Mvfl8wJmZ8MnRBX0ByWy8+emN6I3FfPmN+e0pwY1g+SiJNYGg8U05hSEJ2UiQhMlQqMkhkSzxkdDFgTixgWU9DXyxmSklsXlA/ODBII1h5NkZ7ZCVqRV1MUWdQUUxTSGFFYlMqQFlRJEc+VkhTS2YuU1p3TExNKHQrMEIzb0h7azFtc34rOFRUPHYjQSwx'@;
put 'RGxjRzgxWy9TUDMqSjBXJjUvYkZTJkh+S2poJV9AWyJ6Ulk5YzU3UkREK0krU1UjUG8vfnwwUUxxc3UiTU5IR1VTJlp4R11qZl8jdTtre2FKbEhVIkRfM3VdVkArLyJHP3NSUi42M258dWI1NmdQWiN0NjJUdG8jZDArb3EvZihaa1hENG84Ry9ZdnNkL2BoUnVZbGIkQ1c9ZHVmKnQ+bE8rJUgm'@;
put 'aGh4R15KWnBMeExrc3wmMUEhcD14W2l8YSFkQWpSOT9leEpbX0VkNzR0Zm5uP3lEKXJLajVaLkJRdzpuOEd6bHVxR3Qpbz57Znc+KH0hNGgsfTFCIS58UHZkN0ROPG0uKWpHQmV2WHJyTl06aUFxYH52L1UvZ2Y5IXMzXlRYQnRXNkhIdGlQT2BzJiUkLnxhWiN9YE9NKnVoLF9qXWsxYS5fck1s'@;
put 'eTJ7WFo0O1MuI0YyKEAzK1JHNm5CVyZpPj4zNjksdytDTltMLktLPEcxZFdeX1Q7PXJWO2V5M2FobC8iUj8mRT48Q1BPISp8JE4icUJdVlAleDdFfGNJWEs9Onp5VncubDlJcyVrJUlvWEdocEhMMHl4cnl2O1NGQCpLNEo7czYjQE5OcF97czExIiVlUGtbek5oOkQvZC9lSzE3UFY/QlUmWlA/'@;
put 'UHdLaGVTJFt8KyxWYzRDfF9kYFZ2UTgpJWFTZSt+Syl8WD1wQnojd2dEJEB5KnJoQ21aSjhKSiF2XVF9aX5ydX5rZWpjIV0kZzZXY0VBNi99ND19Y0QqfSQrS28+L1YrQmt8UH0oTGRCbWk8PihYKjAkT1lzNWZCXlF9I1hoMjwufnJwQGdwYWhdQSRLa0psfUYke199IUdFJV1hKk4qcVVTZV01'@;
put 'NHB3QFN7VixeJDI2RHcvZ2lEYE48bWRqKzdSfm1ERnVuYnNJZDFnSmlSIkdtMns+Ym9lP0s3KWlwOmpBeiY2PlRiYEFsaDhVWXI/KDpxZX10KStyWndXJUhHLl5GZUEoP0Ejak9PdSpebWdCR1FSbSshZTgzeVdVeVZPTmorJjNGNSNHVkpqZGFzZjBJVFRXWGpfYUJpM2tCImdwbHh3IW1bYzgk'@;
put 'RTdKInpQL0ZSKWc+R1ROLF48WEV2ODZGeUlPWWg6TngoVH1DSWpOOCRKZHt5NW5WXWNaQl1aT0E1Lj5LWVMuOmArZVh6KnlRS3RVW1p4Rlc+UTY0Z09GNV4pUDZjTWwzclF0fTJNJXR6V2c2KHosQ2ltIk1UUSI8dW9ILkJrRnl1Wm0yQz9dTUp1bTN4PkNNdzMiSC9pTSQ1Li94ZVUpXjMzaXl4'@;
put 'ZiZCR0AwKFUieGUrVzshZnlnc1JaJHYmVTFaSCRgVGE4JXNLaWN4ZHd5O2ZOd2FUcGAvTWxrNWQ9e0hoWCFsd0tiUnFeJCt2K197QDVifVdCSFdDRWFySVFDPX1eX3QjYmhRN0k3OlR0QVR1SloxKkciS3YpJHJtInd1KEBXJFZNaWVUOCk6PChpfDpwaDgrZG5RcU5VWmYmdi9vRW5oe1ZXKSxK'@;
put 'TG8oTWIjKkckZ0RASSlsP3VyLjosMDQmeHtBZH57KFRzNlU+KFUpVW5EcG1rSCQrI3w/TypjfEhJJW9HYj1lODlhU30sUnpYPmZ2bVN+RHEuUEJbJk9pQ2FXRSs2Tmk+R1Z6Xkg5eiY6YjF7PX5MTlo+NlZWe0oqdEFDb2AsdXEqJVg3aT1uOVBKWFIzV0QpcmA6KVFfPVkoI0ZqRWxRXl9BcDxP'@;
put 'Il9mRzslbkJ5aElFb1d4TVRqbWQzRGUoJSl7ZiVIOjU3OlVVSmFdbUdNSzVPZXB9MFI5KmhLSGVjQ0Bqaj9yS2FMX0thdVBzMG88cT5aTzMuY3xZfkdMKjdKcj1mMURVMXB2fV81a0ROLDhZYHJvYntBdkdfSnBrWm5CaVhvQ0Q/YWxNIzkqT0B6VG5BVDYyLmhLIVtlU058Z04ySnZoUi9MJjI4'@;
put 'Vz0wZWVpemg3SiMwSjwxfmpiKmhtOTliSkI2OCpYXUk2NTo3fElPUXFrbGVAUm9RcHE8eHo1SlAoc0ImfWNpTX1rNShYYzxXZkgrR3xTMDc5NGFgczg7XjlgdUZITDdGIVBWYmY7dS9sV1cxREdDbUUiVVB8TT1kIXVLbVhvLlg/TlJFXlBwSzhAZDklU2ZEdmExOnYpYX5ydnZ1cHgyfE1gWkFA'@;
put 'aG1nOiNSZzsmYkNVdXtqPiwjeTZlY3wsK1EqbV9PKHREa2QpUUpeVyl1KSljL3hOYFkwekFzc0ZzUzJySzRWOH1UNyJeVDdOd2l5JFU/cl5fV0FGd0YuQClybzs+RkpdInJ4RmRbanBrazEuLFM8PkUkfSUzWnpLITQkVzxufm90ZTZAanNFQjFjfShBUGtiNkh1PmBkIixyc188a3JCP1Y1aC5o'@;
put 'Q3cvP0VjUlokaHhkM0BBNSoiV1ZSOFNlWj1NUF1iW05TRUVOU1NbWjFNXXRscFdZbTQsfTBJPGQ3KlpfQEtEI0RxYE9gU0tqUCF6WVQhL0A2KWBlOXBoejBCZjNpQDY5MVV5LkQiYTxmOVhUSGhUQUl+IiI3VCRzVksyeyJAWF1bNTxgRFFPR2EuWVc7fEkyTnszSSFdKnledUd4KSVMbF5jcntN'@;
put 'M3YjfnoyLlAwRjhPfkhQaiZvJFVwMmNUJkBNVFVfcFQ5XyJPLmdGUUw6JGI0UTlwTm9UTmlSc3JfPklzel1yXVd9KXFvdz0+IUNAYXZNaDZXJSVaJFg1MGNHW35nR2tVWEVUOXc1TWVXLklEJDp1KilxdnM7TW0xT09PSy89UXpvQ285SVJxeUMuKyt7ak9lTGFbK0EvdE5USSspV21AeSNuJVtT'@;
put 'OE9vJlNiNGdtUjckIkh9bzclMGBlajtwbm41Qlg5SW82Ki84elNDenpoT2hTSTNwU1I2ZnddfngyLkowX0F+I00oYStNPV1hOWBLUjE0JjZ9KTZwTXVlflMyTkhkIUA1azI3Qjs8Xl9RVzxGI0YvW3d9UWZxX35gbTM4MkQiQHwkSTZsdGRFY1pUUSJxND1nRU9tNlgxV1VGa0lYMHQqS3o4RkVM'@;
put 'R0pIayl6ck4+I2VoOjlQbG5nI0wjJlM7UyJvdFJCVzJPeUlYOFl2Yih5RF85JG01VDFNa0svaCsrPEk9WEh8T2J0SUdpTzs+JllwJFk7Sm03L0p5QUZyYFtRPnlTdiJHWV5EWEYwR2N0eFMqWXI/dCpScmF5aUomSE96P2dYYX42VzwxRV1vMUglYWYmUSlvTy97UDQjT2BLPjA6OD9EdVhsX2c0'@;
put 'OG9wODpTQT03YlloczZieFMlJHw6PCtBPnpTWzA4LDp7dzd9PHpYNFJASjREbT9yKU0qfGQoJGgrcVs7fnBDMVlVbyY6azI6YSQhfkE9JDRjRygxeWU3an1lJUhGQSxhKV1ncCsrInVvXUFKaVhaQFNnenY0QjY4dn11IWNIU0F4blVBW3lOI1svZS4qPj5gb2hwIkVGL3lLcmhAJn0/NG9kS1oj'@;
put 'IShQOnViVCR0NElYMEYqJSI7WmNYPjRsaUBzZyxtPCFuWWB1djZ4XSMrUkglWEIkL3FNY2NTWGdTS293bHRSYCsvTFd5TmJENnUheHdoRTd3Tm4+PVtlPHwuKyUiaWFaKCk+T1lHRVhQWStIOUdgdWtTKlVFe3Ihc2ErQ2R5Z0I3PFUjOFN+JnglSkRnOlRrSWp3Vi9sUyx+V3IzNypaNixmUjZB'@;
put 'S2A0Nz57d011TWVebnd4b2JOVko+U2pqT2JNOjp+cnJdRktefSsxYz1SOSx4Q3xBbSREQDx6Qz1SOk1AM04lbGBSLmRbSj4oNWpKZns1O3lxPzB6aG5gREY/X3shfSFxbFN7REdlRj5vbU9zeip2V0pIekAsaW4pOH1oP1QsSURDUklxc2wyLk9tXzswI3ZmMjt4KEA/cXFoXzBLRmtLLjYvYlBG'@;
put 'Zjd9PlI3d293fGVzVVJrTH5xWnVKNVtHfjJ9RGsoWDY4MlRsT35fQHl1fFVSR3Ixczc9MHcwI3xldFdkUChIeUM2ZnFQLDBvK2RSY0FXYitdVipxaEA6JHZaeXRdQmlgPUZAUz1+M0p3c0ZhPChtZ30mVH5FbD9FS2xeL2MscnY4dDZTb1Z0M1BYIil7M0k4ezZ0WHY5QG9rbGlqMDNWXyVbSUdF'@;
put 'PXd0eD9uU3x5R2YuSnUkP1pbOV9fPG9GdFVPK2t3enlSVDRoUU1xY0syZEVVQW50XW81QGM+eU98ZUxJSy4la1tSLDBwM3kuViw1QGBMVz1TbiFZT256JGYwbiZecmhzWTl6dWZ+Kn0/V293P2JvZDVBc3cwO3J2OWhubVBXIWgiRTlydkpbO302eGJ9P2dxKj1tX2Z8JXlYMjE9YjQ6M0AyYlRj'@;
put 'a099MW8pJVdMdWE9MW5+IX0+ezlnWSsyaXElJUQve1A4OWZHM0B0cGtbUSwrREsqQFhBTSFFTkRJdUh7dk1wU31NNVo3cH0vTWA/Z1dLX2NPUEF6al8/NDBuYElebDVuKlU3T3Y5ZytPdlhlOng2e3FWPVVSaS9edkh0Yk1sei9YKjNqJCVgMDBHVilST2h+djlTKzYqNiVZTnVIeX5CJFNXaCo9'@;
put 'OX18Vl1nbmU+NHVJeDRPIko1KElKWC87R2l0Mzd4fHtLNU5wPSgqX1kiV2ZgYn1DKjIrPCUvSClofi5KaTZvdTNpYSF7TGApdF1yM2dILCxlRnpqUXByTE1IW2w6OGFPfTQ4QWQ9dEhUSl1vQ351WXpVVD02JWA+L09XIyoyUlNGJWE5YSJvKzYsQC54ezB3LE1WKFNIcHdnPDQuIyRfNUpaWVJB'@;
put 'S2BAakdRZ2V+NkhxaX5ufWdZfjl5Jj1HL19tSEd3RVt+WyVvY0hzSmpLeUV8QyMjT1IjMHVXNCQ1eGZzO1ouMT4qMmV8I147TkljUypSdjNMQjB9JT5hPiRIKXI9MXVdJnciLngoM3pOZE48dFB1czAiX1ZpTSsqaHMhfHdFIWVqNHFud1Z0WlpwJldfUSVwJUh1OXI3c2gsLi5KPCRhXmU8clJa'@;
put 'PnBWOmUjMz1jPT88SyhvKi96NXtAVyNkOlsuMTpwT0w6a0hRTTI6eiN0JExeI0pOJGgzX1YmTm5bPnFCJGBHfko9MEw5XW5QdD5QbFBAZF5Wc2tqdjpeIlo5c1FdLHR5YCFCOkgpPHZ9TGEqUj8uRnAqLkxyQXQ5fTY2fk1Acz5KYVYsRD5AV212YGFZRi5jV3tDfTxvR0oiPURqbHlmJklaPmF6'@;
put 'c30kIl5LVTE8MHooSyp+bCNJbl5UeUo8RUAiSGNCc3cueEh4ZWZdXmduW2xEY0Q3Q1tXKkVWVy9QcGN8e3RBJk1AOj80aldlUWR4cWF5c0czQ25EYDw6XTpDcU5dfnI5OTZ0R0Y+X2YwT01vTyFebU1BKTV2bTw7RjwzWHY5RSQrRjwiTCI/eUZyQF0hJS5wZ3IpNmp2b2taUSw1P3xkdWFaWD4k'@;
put 'V09DZHVNaUpyKl9LeFI/WnNlVTc2JSkuK3MqPml9WjM9XXM/QTFTQi47XyV9KyYwcDkwZWl2QFJ3UTorVldCOyNfQzpFL31rNk8sK0N2byg8XSw/NUcrfTs3aHRPX0RGdCREOXkxMTxAajhhODNGQThQaCU4Z0BeJSowVFh8M2VSTmJFSCpJOD8+W159RzVwYlUkelQ3fHttQn5WcktjakBgO04/'@;
put 'U3xaT3tEO1ldMyliZyJSTj4qMkhOdk10QklxKWRXWTF0NGJqVTQ9TUNGbyNXRkVxIV1tNDErdT9WaktISFhyVjBUe2AvYEt5eGVGdmV0R3Y7WzdjclVFPU5sJTY8Zy9jKmlCY2trdHByI0Z0VXp1a311a0dNSCElcndAcEBDIXklLlVGMH5qZTY9NEcsN2RtdmAuKyMsO3lMMDQiVk4vLF9pQW9D'@;
put 'IltodSF+KGVVKzo+bj5gbWxxeF9bM2JMPzlAamVObVV1O1VhKUBed309LF9xUSRka3A0SSJ0KW40endxcS8yRj5LRmVBe2R6NmBQcjFRLk8qdEU1cmZaRFQvJipBP1NkQXFRXUA2UjQ1OFBDcS8sWVhKW2VhUl0zR2Y1e15hWmx8aH0od3t1OW0/ZGh+QlRHVVgxSS9UIXkyRUp9ZkZWWX4qNSU9'@;
put 'elVmRys5SVcsQHx5eDRNUCRNcD86JV9eOD9DRlI5KmdIUWg3IyxlQDBqNW57KUJhI3l7NE1wdGIqIlhGOyh7SV9gQFheLi5wb1cmUHpwezxRWH43KDAoRV5ldzQlIlRsd152UEF3KnUiVDFVNS5QZTU5UVhYQjJAN0N5cFlfeUJYPFNLXjJvNGNlTXRnVncsW2JIdlFheTckMiloImk0RXRQS0lD'@;
put 'KnAqaEl5dkUoXjFQUm9nXVdMRz89LnZ0SSVKTEwrLnpFZHhaK1t2cTJjSVsvWGNZTWBFWi4jZzlDcDszbVcxd3JWKCheTCV+TktDUiE8LyYyS0l4cmU1SEY1OjBISDN5eiJBWlg6dkhhYHo2NDFLJTksUkJ2X3RWLD8jWyRdPUwyem5kUk94OHhqUnwsTTMpQlhiM2A1TDllNC5gOlU4QGY/Rm9P'@;
put 'djh2KWkxLlErPzpEN15rUFtpRl9dQlk1UmNGaD17bW5DWDBtW2xWUFs0KmlvRFlLVXZ2T0loWUJ1YnBvWmNobGJ3LGV0eUYoUG1KenxKMyxMVUEzTVR1PW97NnEoL3M9SHtPJkh7VmAhN29GME83O2pkQyxlckJPJmtoIyNUdUR2X3lVQDoyVnhVOCFjS1JFNDNOJUtIRmBFemZSaGdTdkk6Iz82'@;
put 'dXdUWGt3ZjdBby9BbCpYdi4hbGpncV5EMkQlPng6NEpQXTMkXXdlIVg/LlJzM10xaEo4d1gkY1BLYFJ8dlBJOmlPL2s5OjB0K3ZZI0xadF5VIzxqanVYdDU0JS8qI08+bjAmRzROL08pKT5mbSZ3ZkpqVyRSbktlZ0FtOkNPb3ImUExCcygoQVQ+eFt1YCU1ISViJGdKeHdKe01TfH0mY0hAL2F+'@;
put 'ISs6P094bmNnZXQhdFQ9NE1IOyx4Vy5HdHVMW3FlVk84MUp+VGZnY2ZBfDQqbjdmNFhrYl5UTVd0OiY/Y0xsMkJNOz90JiNPRW5VLFJaej16YGAqRT5IKHdFNGN6fEAkUFBKbzNec198Q3skWTQ/SFNpR0VdI2VSWzdULFReciZ0TXV1VFo0S28qYERKMEslOCRYWCpgdlt6Sl94RyFGWWQ5Vjtv'@;
put 'RnZbWlphcCNUS2NZSHo8UzgxUyF0Kl09TXwjL3JgNDhDITxMREcyQkRwMSt4UnRfNjwuN0VYJmo2W21LLHJgVmFCaTo/MzdXW3JRbChzSktyLDg6LGBNRzoxJGhLYV8hSTg4RlE1YVlDfl5MK0QreyVjQ2FiR1E4RzBpX1lvXjlHPH0iVH5QbzllcCl0dW18dS4wW1QobSVKLGZMdW90SFd0T2hS'@;
put 'bjx6b0MyIWFIR3N8InFSY3dEcC80WkJbN24xZjlNYXZUekxZeEoiKHU/ZjZgWlMjRWw+OTJoeVZoTyNYImI2UWFJWnlfM1JNNEI8Tk54NF9AKHxwPDxZPndrNCkrRjtxOGp7Pm9ZWCw7VFhhRyFDcCFVMko0JkExTFtpRCtGeX5vUXlwWT9deUVyUyw1flFgSllJLyRBVCpsOzdhcyFKO04sUF5u'@;
put 'Mi5bZHs3b2hsKElWUE96Rlcsfk8jfGdmMT9bbnRuWGldZVhYTGFZamBCUWxYcEZQSXRlXVReYH5MJl48aHheVHw7S302cFc8KWtSSTxFZ2RFN1leWmhPXz4zY0pwODA7ai8jQEQ1YHB6VD89Vk0xYWFHT1spUzhKK196O257Jj1FPVBMJlIoKzdiKnF2a1VmKUJ+JHdCMEt5I0NaU0BbK0tHVV1g'@;
put 'dFsvLHZrP0AuXypjOHdadSYvdTFnPlJab0BNISxrXkMoOk5RIWIsZE9NYWZebDVRdHY0Kj8/LkoyKSh5cWIiYjEidlAkUSpkcU9xempUOEs1LGRrOy58bnQhZVNKVFVaTjA+Yll0b0NAT1pFVyVPOnAjJFo+RGpKSmcufjg3aVJqNVR+R0VGUFdrO01FayV1eV8vU0phPFFdRzx6STBxYCZSX0Yh'@;
put 'QElTWSEvUzU1XyJUa0AvVlAhRlRpKUR6LmVDaipJZSN6WTUvNXs9S2VTLkZxPjFbUDAidjdAOE0vIkdwfFJ8Q2R3QFRCYXxLL2lLR0svVEZ4Z11FfTZ8bVUvdDFQXkpXfCN5Ll1zJEREciMqWTwrd2xUSF5IOWBNLCVndjRAYytBRmdDfX5uMWIjcCJNaCtNc2tZaDgrfC9PS25BOkt8XSlWfHlV'@;
put 'fjomN0VyaylENkhNPnF5WEdSZC9NU3VyOU06dVZkOGVxZm47IWhxSjAzfmdfbVBYcnpjfGV9JjhtTj9kXjRkWmkqcXoqL0QoLzEvOTQsP352P2VvJnltPW9aVmRRaXorZ198RDZuSFo9fjtLPEkrLix3aSVHTVhzQD95MCtqYEssblg8L0BIYi9kI3gpJXFnNzZKJm9Md3E4dSxgOnRfMykwejJQ'@;
put 'WiMrOWVYMipkezJFb05GMzBQaHQocm9RfSp8PzArWSxjP1Y9aTFfRmdxWkU9X1NIYHtYUi5GO2hxPEY6JE87XkU/eVsvZFB0S2chWlk5SE9GUzhzVTw5Uzg4WjUsMipgN1ZxajdmTlchc3lKekVnb19PTktDZzYuYkVIWjI+T3t1WHt3eG5JIT5eX3k7bklzMmFLSGtdWCZ2PTgxV3F8WlJANzpg'@;
put 'JFZuOXJPQWM7I0FYaHAkIVteO3lBQC8uKGVxbkw1Kk5gcS9ZLygydFsxb30mNkwiPV9TWXRqQTk+LGFNQ0RsSWx3JEoiWXdYVk4vQVFKP2tgVCxPZmo+bTFOZVNZNTo4RzdNZiN+MEJqfVFHVT4jOSksdXgiTX5ZUFpTTm4heWw6ezosQEdsRSVfSUBIbDlIZD48RCEka3EpIz5xXVh7LlYlIzJG'@;
put 'SyE0UGE3b3U7an1SZWovdEwhdkdPYmBpXy5MaVNhQjpvMj1VWDd0b3I7W1hkUSYyZD5qMCRFInYkZTx1LkFafWxxYjE1V0xxQTpDP2B3UztDWG9INz8jW3lDWW1NWWtdeXY6ZXIpXjYkTDh0LF8sJTk5fSlnKkZLOnpFcyhiTFN7L11Sa2dSLytFQVd+X2x0eHdwfVVjTyl9cm5uLFZYLDYjZXZW'@;
put 'MUduP31xbnFoZUdQJT9ASn4rPCM3YmhqRntBQ3Q/X0V6M0s8Jmw/TXA2b0RfZEFPaHBUOClPPlVTXzl8KClsUmRJO0JSPX5KckYqOExyMHUzbEJUOUhtOldNZGxGRl18PH4ySiU9Znhpel58W31iQ3BlNV8rUUMvS1pMe1tLSXUxLHB0b1heLzZxQXohTjBsO0NyTjtAezg6cVBCSi5AJE0rOTJM'@;
put 'M3A7Qjxka2BSbXhNYzl+cmc7PUdFWD9oYnJrOlRTVWFvZklaUSZLU112Wk1TNjFwW1lnNnZGIW1wRldMaWVVeDBIZTB2a2NQJTpjQUhPK05kUTpGSEJ+cV8+VSZbNFpvXj0kTkNYTlEheEYuUEU5LGtDJk9WWCMib0EiJW9wfCYjLG5rJCt8WkErYSV+NXFxJFM3bFpNIjFiaz16NDpsQTFAOWtQ'@;
put 'fmxDI1U7I2xqJHNSdzVkaDM0Klk5T1ZTOXQ7Vi9VXTN2cD1DdCh6QmtWJUpWYTx7Kl5gdFsvLkNdbGtGRXBiNWV9SiwwMjJrLnV6flYpUDspa0pqSCVyXzNxTl81PltWZ1pmT2p6aT9kd2NeI0BnO1J0PHNNV09nfChKalFjcjwmRjB8Ny5eIi5HQkRvZ2NxZW1HLFdUdmBrNzE1KmZYPVRKPCNE'@;
put 'MmFaTSx0QjNWc1N+TmN5LmFVUVM3Tkt5aiM+OjFXJi8jO21lTGc1S3dMLz5dWiVbbT1MZGk/RzFGa2g5dGRvKnl5P3JaO2poQzIsR2RqMSRCKk5iNnF1OW52aWIxbVNpL0JNJUYuUWg6WDxkW1c0MDcwKmxTOTNHNDxINDFObX5OO31HeDszNzVaeFhkWzUyKWorKF17Tks/N0QoQSp3Ny5CO2VP'@;
put 'WDdeeGtZeWF2eGxSKyhWPls9LmlYK2BKQDwkL1cuLmBya0xuPzU6WHE+fT4vdUcxcXEiVkAhZCpbMGw3dVIxSzNbSTQ9KCZWOiQ+RSRAclI6cipAaldCfmJxSjcpUnxaOmh1OF8qUyNVQWBEdDxUUXVrPCJ8MFpjc2FYTUgyZHVkTChHcnFJJkYqLENNKTddTGZQRWlYKTxpeVMkQT1JYls1Y1E1'@;
put 'SUNCWnBAO2MkSEQjLz5VS0BnYG9gNlJMY1V7U1N0NTd5Xi55U1s2ZjZJZ2F4Wit1XkdQSG42O3lrLENKLnR+TkplcE5WXyo/OGloO1taeCtjfkZvUFl1QWRqKDs0K0tGeGR5PWgxISN0SVg5S2lsN2k2PDdxTEw2blFBWU99PUY4YmJ1MEdJcEBfUFA7P2Jhc1R2IkdWXXo1Z289akcsaiVqVTQ6'@;
put 'VEQlYjNCTUhSKlBgYExAak8oPi5WXS9dP3w9Nz18VEhAOUhoa305RXZfQkYmZUh5cSZIYDM2K3xUOypsNE5YIzxDTD0jcSlzPTQuRUw4S14kaXgwWSZjYUV0dCR9JUEsUm9Ja0EkUl5beURdKXVFKTJtXnFoNyxsYVpfJU53TzpVUnhEV1NhPF1TIlolX0F0WEg2bl5hcDttamVyNmFWai9sfDxz'@;
put 'b1hdQix5SiRQLFJde1IjRms2W1EoRlRZV2dGVEJ0dGJGa0whbDtpV0JaS35+bi9gODhmM1NhTX1iajlYITc8eDJSeStjQzolantkRGFYPmQqd3RQRyI8K31hYTpxWyRmOXNZN0FsITclKigxJD14PXpBdSZeIiRCLjNWW2B2SiwjKV9GI0IvXyMiZFt5aWJsN0g2YDRXOVQhbj5ga1Y0PF0yRCR0'@;
put 'KDZkLGdCUD5BOUg8TWRTaDpnbFtrLEJbcCZEd18mOHd0VTghOloiZTIle1d6MUNNWmxgVHxQblBNYDhHJF0mUzp0LE8qOjB6VE83KE5QcXFXS1FqZE5qQDZtY1UoZElAd0xNUT5ELi98Nl5Ocnh5Nnkoc14+PX5vS2V6Y0YxXXpaQ2hRSyVBIn1xPH5sYF1RZyJoUzdSb05ZSHlUWGl3IXx9cHl4'@;
put 'cSUoZnZsJTI7JTc+WjhneHV1b0JiImNRN2N4bCFQImYrPyF+dmo8d15zTldrZTZ1V1ZHQFNILENud2oqXVtIeHZ3dT5edF9SOEFOUXdROiIzNXlkX0Q4QGRgKTsxV2FMZitKNCwhb0g2NCVwWFFKMylGbzZTPWssY3ZOLCNafm1VYypFM19LVFBQZGttRmYlPysrNnZidFRRLzwkc05BYXIhbS4m'@;
put 'ZnhMN1tzbzBnakYwQlNseEFyO2pKZnN7ZX0oYXpCKT9McDJGUl9nXj9TJjchNSEsTSMxYGt5OEVQJUtJez00TEpNWSE1O2B5PDEldCgvcC9mO0RKL0Y2fkwoSS8zKDN3e1thY3c3ezdoSFsyKm0+enhsbyRtNEghPEokJXpxZjIjKlhUR0R3XSt6dyEjNz94eyRZXjAqOjh2WnNBZXtZYU92ZSY1'@;
put 'dj86fVNKVXdFVlo7d0lDeWgjNnxISCYsWyl0eiwkQzhZJC83ZkhbfnhkemJXR2ZlUjNfJHp6aHNJNykuKGVLR3EvXkRmc2xlWVtmTy9YR3FVSiVpTVEpPnJaKW18TUZlOStIb316PjJFInksRDw5WmR8PV0zbDNdfF90PjtJUGNUVUdWYiUrTHtuYkVuZE1DJWt0JmFeUmVvd0djdnpUM18yQk1X'@;
put 'Ml57R0ptRFBsJkVPKksiRS9USVZyKHdCYEx7bWUwLm5fSEtiUW44YHhDMXUvezVpS0UmbilVTWAmJlB0P0IpRlB1JmYhLFl2NDVAfWpPfFk3Qi9FPVd4YS5hNmtWbXY3Rn5dSnZaZUxMVksuZG5VZ316YmdqOl5HQmE0ekpqc2NbeyVgSUBTeTM0c2hfS1o7VXp3UHp7XS9VW2FIT312VElUP2Q8'@;
put 'XUFYaVVlLEN7QUI7NGZ4VjllRjJ3S2ZlOEtrP3U4IWo1diNJcHp8LCJlSHtIb2p3YCQ8OmQ/WjlPQFsyYmNLZHdYRWp4Yno/XldWelpPLFg7MHBaLlhwTiJ9TClXKm0wXWVwdVJaKHNAND0xZkN0fSxkN2JHSn5vX1IkTmVGYVsoPW5nU0Ikd2VMdnkzS2ZyaGJ6aEw4IXpIJXtGSz9ocHRMJkhS'@;
put 'Pi88UFdadUl6JjNHKDVwPWxAPkNsVSxOWTBCR1M5ZlV6V0JMQmokI3che2ZbcCZrISQrW1UmOnVIWDZsWFBqUktKW3Z8d0o0PERtS01Nck1jaDE6STcpPyRuVjA4VDFadE9WSlVfZ3RpPFpXbzQ3TzBEaGluSTBbOVovaS5JKy90ZzcveTQsXTJfbV8yX3tXI3NtNzdMXzQzU306LGxZdWckZG9y'@;
put 'OVYpaUJwYG01OG9OXXBqIjcrV3FALlFYKkxpXyZvYjsmTl1uL0JHPHt3bSt7cyVTZ0tBVE1LXTxWfUd9bEtQWVZ8KHVtX0ZHOWxiRGZqVz9BN3UqPWdWRks+IjszdEkyb29nRj87LiVDYVpSYjBuOGREfTQuRUMyTiNvUG17cyZZQTw4JTImOE02IyIyVWVpUXwyOkt5MC9WM11pWHc2NmN3Rzxu'@;
put 'cSx7Zm51KGtmO2dtRHRBdF9HUD1hV35GVDFual47WFFmQy9ZdVAsXTswaC9YUHBzInJnSThHIk92VHY3KiZHWXBnKTZ8fSkuXTMzYkZ4fTwuaWQjXn1aMFd0Sm4oW0lpbmwhPnRpZlhacXQvUCl1a1gsZ2UjRWY2NzFoemNSQ1BJI1Q1VztmfGNoVG9ubmFPVFlddCU2cUg0fVNvKURrL0BCTUto'@;
put 'R3pdMWhaYShvcUE4bUFxVjhVUShvPixuPHV2LzEuPDpmVGspPzVxKEJ3d05OOzE3ay95enZEIWZNdTA6fDpoQUdGfSR1N3UmaEJ6ZVVuaHU7WiQ8aUJEeUo+TVd2I1A2ciY5M3dMWVNbTURfM1ZbVUIqM3pTUltkJlU6XVh7cHl7Smt7Ml48VmhsJHJCdjozQUc/L2BQfXB8IXA9Tz49ZHN8aC4+'@;
put 'dE1sNTxEdiMyTzFdJEx5e3x4Pl40UE1DQG1eNiI9VWMuNntebzJSR1J8Vypid1E9VVhQR15SMEFIMV05Vm11UDFKc3VoWnw1O0BVSSFpJlAwNlY+VEJORWZrSU0lejZ2fW0lPUZYMigyOzNSLyxLV11deyYjLCtLeDVUKz5hTXMlYXF6THpoXnR4QW04QTI1VSRWbGtafGx5YntxSFErOzc2RG9u'@;
put 'dWczNC9bYz1fXSFDMklaZ3NQPyM4OnUkdVZiIVtpYVFwbCYua2FJfnRneTQlRGsmMnpWV3wmWFtPYjRzM0gqMzhaMHs+TCgsRllgSnJ9JXpiZCVSImFyVk1TYVJ+QC42YCV3e1o2KE5oSEY8JDkuNH1PJEFFJG1GZDcpPStbUXFMeCRmejE7MH5gJTlEZEtIJVJSa1ZDXiFnYElUX1RzcFRgMyhA'@;
put 'VC9UdEg/ZSN3OUAoVUkjMVpzeE1oR11nNlEqdWFHRW1wfl18JHFoeClVfTNQbjtqSXl6SCJYY2p5b3ptNk9AfURGX2tzQlZCMVFNNzZBeSU8aFBVdFN7LzB5QzRASX5YWDFkRjcpdmxpNGwjU1FWbGMsV31eX1pZRV97RGxtdjc+Q0Y3SHFZMC9mMndoXmBjRE1sRHRZNEh8TTNRMitDQnxFMDVt'@;
put 'Rld9fiZ0UURLXXFgV21fa2A6ND1yL2RgWitdODd1LilAR1kvZD4mUVBIS2VYTyxqMUZMbk12eG1TSG1ZfnEpUGdJSl50dFgzPVJofU4qQj1Kak5pJCt2KGdbPjAvOkldJSZSZDR1UEspZWNyfnY0WSpLZkNPUCNeZn5HZS9OUWRQN09tI3RNRSFEaEU1T29wQUYqeUk+QGo9JEpAUyRmRkYyMHAx'@;
put 'dz5rSTpxZ0pHPkJvN2oqeWteJF1tTUJQeGczV3RfPXR+WXF7Qnc6dUh+QW5FKiRKfWxYS21EcnYzUTxGK3IiN2FCOkwoMGJGQmA2ciJJfH5IYT0rOH1jSEpQdmBhVUIyNEZlI0xJYThHOEIsbFkzeFpabzplQjhQSXYmSzklaSwkV2NiOipLPEdaLGlgNlFjLytdaHZIWWc7Ly84WHpRMHFPR3p5'@;
put 'b05fWyZlPEBeb05rRlAjbVoqTGt7Rnp4OGRlNF87QS89YzwyekpSZCY5SXBFbk8uRFpgcENod3tdbXQlUX5fcyR1NjtIZUAwb3omNUBRTTRZYXF8QmAmO182PksqVXBvQ3BaKi9kbDNhMjpfd1FmT1M+aDdjT2Iic2JgLyg6XXdeTUMmZTA6bEhgSE9RUSlfdiZiPWNJOyx0cFtCVDA5VHZqeng5'@;
put 'cjFlc096KWRmTWNhNkYrbkZQYFArZTd1cXs3NG1RLzxCXiJMW05xT3B4KGtMYk8jQ0lZWU1oQyZELE05W3YoIWVGanRHZzgwKXZQZVslVXY8Rys1cSlhLlkkIVtQX0NyUVZPaV9LeCZKTWQqUi9oMlApO2NQclBxbF1OczxbRm9iSEUxVXo/YFklT2gqOzV8WlRifXBtfklvR1Y+Y1FsYX50KD4o'@;
put 'KTcuJkI6UnFZYDxBQ05TJi9NfGZ8Ll5qJTwzWk5YN2dxQyNiQiM2WmkzazEpY24zLCM7I1BRJlgkRilVNzNDLm8hP1JjRSkvdGc6N1dwVE4oUCx2R1soTy5SLnU0TUVVcU1WJGQsdzpkKDpHMWcjOkMybGJtMmBiYiN2aSpXU3BxM3sxaXdmMWoqbVF8P11IXyIpQXFyXmhMRmlYSWM8V2U6S3dA'@;
put 'OT8qYXEqeDNjeU5XbVNsdFBDZHR4O15lX1dZVCYoJWVbMl8mb1tzIWB5SFhxOClGN0NoZ0g2QlMmQ05YZltwYjpDP253XU8sQ2Y8ZlJfeVBvMSZsNVFiU1tFRG8hSEBoVyo2dlU3KjZdVDhZXjpEaihsUDBGRSFbbGQrTlZgP05HN0A/d1pmOmlWUlpsd2JjTXY1NGgjaVswKmgrJT1DVnBOUmhn'@;
put 'bENNQ1I2OHd2YTEySUw3M1AoSC80WHEybGEhK3ZtOCl2dGokSSNfdDtncmBbeCtfeXs9eyV8fFl5KDlgRkhUdFZEUWwvSDtBS1I3dWJvfnowM1M0I18+ZHRiJTFFOnssfj9dZk9KSSwxMkdQJDAlSnlrJTQ8Sj5bTnwjbWAraHx0TVp6TGEqKCNwUTU/Yys7YDUxO2cjTTBHWGs+NCM7W1R6fCh4'@;
put 'KFtRVSF2aGBBbV46aWpkdmhOez10I0BuPExxWn18YUQ9LDJGalZdLzwxeUcrU3xQemFqN0UxV2FHa3hoVkFgMjttTUgxcDp7X1QlfktKX2QrVElhcDJbQ09WfkRkPnhgRSl2Q3pNKSxsUk5XUjUhJGVBM3UjezhAVGJ1IkI8XUQqZlRIMXBdKmk9TG42Z1RyYjY1YUJUN1ZoQkZ0QGJlTzZyMHND'@;
put 'TDlBJkdWbi9OYj4jUl8/MiUuN2t8ViQjcHx5M1d4aTtKZFtPc0FacVIoaXBnMDNgcllyQ3QhK3I/dUxDQzlpMU1CPmVCSHE7cGZZaTo4NEg3ZiNmNFt9PixGZE0qZnNgWlA0PG98RzlfOj9vbnhqYD86OWJfcz1baHN2JTI1eldvZFl6P0ole1c2Ym4panREXyozdzM8b2xIOWI2O3Umd0BYWXQv'@;
put 'N2ZHdyIhdVB2cX1uSTJydj1eenprTCYue2BafTxNVUlXV3t5IzQwSSsmdWVYWWlhK2B5Z2c6Ql1GWzAvO1JYe1QrW2xobnlDbTZ+fEZmLi5LbjBlemorKyUsW1N6eEJyQjg/fEdGajR2KSFGTCgkbWpnLi9xTDl4Wn1UKzNUWzBBa1g7djhofTVTRi9LYjBPdz5jfjl0OCtJQ1R5S0xdMGZRfnx2'@;
put 'W1dfZF11TH5VWipCemg+SW1FMEFQfn5YPFZiRjBHc0dsSEVuOytpKlVHRGM5cClgVllkd01GVU16IWt2fGlPW0l7aGF7djEwZH1dZFZoKVF2a04odC8vVEZfb0BYfTA3W0V9diQiNHFYXllKdyxjX0ElWHYyKlR2L01JQ3tIYFlFQVk9Lmg8cWVqS05MQnojZEJCQElhV08odkxeLy83UlEmK0hK'@;
put 'IkVVMCxQNyl1OWh1Snl+NjJzaG0yMUNBN2dCK3hAeyhbPjBTLHRGbFJJRGI2SWVPPH44LDV1aWNnd3siPl4xVltjdHd0eU9fMG9kbT9JZ3FEYkh1Z1NgMzJUd09AYnBoSnBBN2JVaVU8djMvMEdneDJkKGlVZFpBX3VlbWBjaUNfa2A3dUhsKzdbRC5McGtCYFtmNlBQViFCLlhAKlNURnhpfHE5'@;
put 'K19QQzZBMztXPyxMQ2JrVmdyWTt1TjB+NlQpQiQ2akRQPXpuS0t6WyxUJiFRK1drKiU5YlRJMT1ZTVcpbSJASmVkZzZ8MUw/VHtvTVY2KlZpYUszdl1yUGNUTExrUmBaeyo7Vlg4VUs1fkVIZzp1TWIkW3A0SkQyUEsqLD59QXBAMk04PnRULnlGUW9tYjE2WEhANyF1KTQjOFhKMFsjOEVaQlE/'@;
put 'cjRAQEhkLGIxS3tqS1Jtam1KeSxqNkdDey4vKVFVYD5kfiopLndobTRtKUM5fDFMNH5mOXJoMzFXanZXUSs1Y1c3TmlpcyVTZUV0SjxwJHdBcFg0Z1RHX3VwVlVwUmxIPFZVLEhzbCpgcHo7T3tuWk5JUXQlP2BRTEt1SjBlZnx2WFA4ODQiNFVTSDBDdWd1RnIqMGY+Z3s1bTk7cU9iLjxRem9V'@;
put 'd2pYK0BANCU/KHRLL3M2YSwkeSRke3tYTDZtIkNnIVVOWzkvRDg+W2dYSEh4UThUNDM3Oz5+VXReeUBsXlo2ZiIxLmp0R0ZXJDd9YChTIVJHJCVweHFPcSl4V0xiL1hoSi41YSNleVRfdzUmZDpbcCNhUHhZeEk5dmNHKG5lLHwsdT9CUX5yfSp2dH1MOis1ZGJDbEVPZiY4eyZXNHh6V31IRWA5'@;
put 'LH45OHQ/VHpCSXlrfHYlVUMlWSx4eTQ0PChePSJMfENsfFZxPiQqRkl1WHpoNXxJQ0czKWp3YFY/O1Q1VClbRk0yWUslR3tKSFE4WTF3OkZ0LG11WW0xPCVyV05RbTtLYG8+XzR5KkxMMVQhPVVxP3s4K3RPLmNQaGVPX1ckcDNFTnFMYypxTXAwWEd5LDtkUXl1SDlmQ0hIai4hOz92bmYhaV5f'@;
put 'WWUjI3koYzZUIjpkRG56ZXdLaEE4X1RISj1VTSt+PH5HPk9kbVFfekZ7Oz5+RVhydylpUyQlaHBRPmNhUUxtTGRxNUZ2PzIpTTEwe2B0JTRGQG4ifF5sQ2VvU1B2Jk0mc3IrcCVCTnV2WVUkQmRHb2FEcmxCO24ucG5fXkQzZ0lCcSg3RXw5WDpdK1QrKS90MDV8VWAoW1hoXjFUSHtUPFdKYEkk'@;
put 'b0MrYD5QZXFwWz4paX1rSDo1VFNrU1FCajYiTmpTQlg2RF1kPF95UCt8b2tjYXgpbCw2LzlnU0lmWEklUyZwWjEmajI8RkFkdXR7OTJjOFFrXzMoTXRCKl5TSldscDF9bVl7Rz05Jj5JKnYzeVRiNV42KUkpQFpSMkVhV0tLan1UK1o6PT9gaVp9W2dGSylKdUJsdnN5WzlsPV94fHw4Njp3SC9G'@;
put 'Y3dIT2JqUV52XTlONk0mdGxKRn47bEVZJSFwX2ozWiplJSVeeE1SKFVpcU0qVjElWkF4WTZnV3VsVE5sfFtDJlVWVE9dMURqYW5zYHohe0dhR005aVlWV201LkNHLHVKfCVhdHRSfl84IXhVRDohfSxLNXJiUXY8bzh6Nj8iPEU+PTZDQDNvc2s0XTUwaXg+a0l9Wz1GX3ZESTNrVT9tK0k6YVZo'@;
put 'WHpLaUFMfUd9dUBRT3VkbGEsQStOfTlffClBVWd4TzpLKTA2UGdMVitdJEdCRHF2Zi80bHNaZDE+aCJLfnx8aV9JJnE0IVVCLF87dDY1KDMpY3ZgYzw/PDJ8YkdYNH04eiF4JWUidD8rbXhUPnZ9MCxjWG9SWXI7cSh0MUBmN31RSE9IOXcuWSpQbm4yZ3J0PVZPRlJIR1peaCpOej1LJTs0NE4h'@;
put 'PHc0a3cxa2Z1cUkmfFNGL2c2VkshXz0lbTQ7dTQuJnI9dXc6bGJeK0MkRF86Ul5lRT4zLlJvOXptdFYxcG9ON3opRkBsbTlZfnZrOmskJFs8LkAweSJEaiVRRSVHOmg8OnlhUkUmNSZTOEU0JGhsJVpoV2U9QGxuU0o5PGlDa1s6QlFOd2dSIWByK21gTisofDtKaFU5LzldPz9XZWBYYXRFcDlG'@;
put 'OFU8U0tWaHZQMUtpMSNmNGRqN0pFQ2tgSUJjYy9Lez9zVmlSflBXIj5QSS87W3dTTSlzWnhPIkx2e0c4a3oqPFZFTSJkMDhsQ05tWHYuZDdlaUE3Mnl+WltRZEVHXmFLQEc8WyFHM302aXQ2Qm1qS2FPRzVLXnxjM3x9P09eaHtEWWBMM0JrdFo2Kz86RmBnSls2U1lFckk+fWlnM1l5Rjw3Rjxq'@;
put 'K2BLb3dOTEA0JCl2TSY2Qlhge3FzOFBsVFgmKDl+NU4jVCo1WWt0XmZmOjtIOitfQVAoMXhKXUJVO0BNekJ+aXhpTVkmZ1l3a19QbzFaQmxGPSFqSUZ1T0o3PUVHOGtJYGZML21dSklFJDxSL2c/WDksSWVlO3tjPEtaKDc3JTlUYVFUNj5JInBOITVgJlQkRk5tLiVCImAzSTNndGs9Oik+djRe'@;
put 'SnAvUGNZaSF1KCoxWWx2T0w4IldSK28uOTFDWlVoTEwpQntwZUpnODYyT146amZoaFBzN0YjQldIRlZxfGk5fFp1QnAuSkFpVXNVaHw5bjZgV35AVFk2NjF2JiZDWl0qRiN6ck1FLiMmcF1wMFAzczN4eillRVhYSnVqS1lkYW5kYmEyL2x4JkF0TElRKVFCWS9CbzRHeWQ/K0pMY3R4TyQ7c1JF'@;
put 'ODYsVjlwRUZxbjx9OnRHTEllWFM8NnhZbV5nUk1ASiZsWltbaiMxYixJRy47QmBrWkpYamM/Q1RBV3lnUmx0XiY7LmlSQkIiSHBeSjdoWkFmNlJpeUBpPGU4RyIjM15MI3w8K300ZG8lLkM8Ok0hMyVydjdmfFMrV09fS2VjNSE2PU5JIXZDMEdZQk45KVNYME9fUSo0KVleb2ZyOktGSlFeLjhJ'@;
put 'd198PmcuQ0laTVEuMiMmYk0oT1sycz1tWi9YbjtNLFZvV2x5JTFQJS9bP21nVElDM11wIW14WFNyUlc1WDAsNitNO0RsViVAfWAxQkshKk1TfnY8UEduT0tfYVVQclRibj9WKiNAMXczZSNXQ0BPbXQjdWdJNkdgeVM2Q1M1SCx0Xjx4b3g2d0szSGZXfTolfT56ay9HRHJVamVfUUtZdFJHVUZF'@;
put 'X2R0Vjk5dFF9OTkkP2ZuY3heaEBKRDU/RFVoLn1KVjNpI0UreE5kIWlNZTI+fEZtRCl8dXNfUXA8TjUuQmhZSiRQMHAvTG4sNjh0SlBeL21AV0NEQFE3N0Z2Pz16d3F5djV3UioxZ3o3S0tbdVt+dCkrTnIrMHZVfVBdMVouWnYlS08iXUNEbXVeRnk1JGtWbnJQR3g7KUAxMyZGZkY0QjApMmo0'@;
put 'RmZvd2VkJTo3MTx3ZE9yfCosXiRwYj1QOFJGW1UwT3suL11mJilHT1AjSnVxRCQhLDZAeihFKk8vLnVaWjI8Y0JAMU4sYGg7NHxEeyVxMnRtMGk/d05yY0BuP0FsdlE0QnEofjYvUy5VPjpNXSZ+ZlRwbypjVWsmJCpQNnBoO0k3fVF3LmtVV0VwQzR+JGlPMyVYRmxHOGsrdyROKT1TaWlPQzA6'@;
put 'dEN5O0tadUBSX3BGcVVWP3M1UV02RFlQTzwsS1pBcFlMUXolRV9hUUBGVn1PTDdSLFR4YFNZKTsodllVbS49LGpMMjAlMExoQ3ZoW3VKVFF1ZWFgbiFTdTo/NDhsbSYyIXJ4dmZtL05yIVhieSUzdEooWEohZnd+cSF6Lk5lLH11QlNAfSlRVStTQn5oUi5KSXtTeCFzZEF2cnN0fmspS2E1dCQ6'@;
put 'VXFALy5SdDMpO1coN0cyeTtvYSZ9OSxuIlV6RHs/LDdWOGs+bHB2Wl05PW1Kei5ZSFBAdmt0fDZbOG1HRkJHejlvdUNvODNSXjZNIUgwJXZrd1FbMWNRXjs0cUpTWlNGKGF0I3hrdDtxZWFybXtrT15mNERIaWlzaHRtZzNjMlA9Ozg0OFojRWEhOGtZMFJCcldjOXd6Oll0W1dkZn5fR31ab2de'@;
put 'RiJDZl0vbFJiU1hJMn1rIXhrM3NhTWRleCgudWx8ISklKndFJCkwe1A6bFpiRUc/MSVZL2JYOiNiNSJYK2wrLklDIWF2P0J2Q1hEIjY+e0l3a30qXzE9X0NZelJjcj5yMXVwMSkjcklmakhUZFJAaE03dlMycEJje2w6KUpNT3pwZzhGVy9dSVFYdSZ7bTUlPG0vM01dR3EvR3dWfUU4ZzssYE9a'@;
put 'dkU0Vj5VYHRnLGM4TDR0OlJgIUBbKDEyUUtkbmA2fWQ/bztqPyFiYEJIV0B0b1ROMUZjLjk7KitQWDwkPDBfVCl5P2lkPENbL0xuPTBMJH14cE1bR2Q9KEBOXUZgI1JufWswO2VZclUkUUBWMSEsaSImVU1VX2tDYUVkS2wvdV13ZiUvM3hMbm8lcmo4RVswLjZaUz8sWS59O1kiO2tsfFFVZVd6'@;
put 'fEZvemwzN007bitOYV9XZkVUOFFkWiVuJixqYiRHTVgwTE8sOjpjN3UobiRYc2dmQzI6Y0xVZCw0Lnk4IjV2TVhCaFBGcitDPnpfMmtzSVY1aFlYYFlwPEBzYzE1MGVNdFM+akk4KU9qfjBQSmtzaTVVcVFHWG54UFtnNCRrO2N3YWIhdCR4Xl9sZ0ZtfGRJV1h8YkhQZD4kMV9ddWYqVkBQYndq'@;
put 'cjZ0RnEjRFg+bElLLCMxQ2RBOVs0YyVtYEVhSFc+OyNCTnQ8RFhHZz5oODh5dDd+UTd6TmB8RXBNJG9JRGFiXVtgVjE5LGE5TyVVSkNVInpkPTFLPntTd3dNU0tGNTBWKUsjV3RPVTlPanNpZk04eTVFNHBVP3hbPHx7YDp3QDFIamdJezhvTDFCRUV0NjJYe15KSjBvY1o6Qm40MEpJREsrNiUz'@;
put 'IX5BYV5nVT5xe2ZEYXdyTzlob3khU0c5diZTUF0rPXx1bm1TPU1MPkJDbXdUMUlqQlIwfFIjcmZqT0xtUjxkciZhQkJiKWQsSEAyKUkzMXZYe05OdmxVK0BFMG8yYTx3TH5XfE9oWnh6aE1QaSJGOntCMkoqOGVaek5iVlQqe21Gd21XaURNWTZmOl94MFEhKXhvVyNgTll7UnkuNTJfMjkjMXpe'@;
put 'SCR8U2R8amsmbyxjdWJ5Q3EpcTU9STVEKix6aGhOa3QrPkslJT1gRmAzKD17SD5DeWxqWGVwYmZsN2cjVXkhYjN+cjBbR0lkVFQ1WEIkPjpKLmFkdF08dTFxdkNwdStOfVlgXURzTDhIdCIhSkcwXnxBOnVqT3gzdXdPY2hhT19DO3AjVTxnV0JgIVpTS2RaJVNUdz9oS3tfQnFYSD0jPkI2JSow'@;
put 'MGIxU2VhM1hDQzokNisyN1NLT35EK0ddUGImRUFtc2lILnNRIXBFSy5iWkRmXyxsUioyUHk+OUcwTik5dUUjOCZ0UiJDQm1fa3JsdyptKXZ5WThYIXBoYGZrO3RBcD1vWV5SN11VRE44dyk1dXl0a2IoMlM/biNUKDAqOnxBOz5MalZAcjJ3V1RtQGQpayRWIWM3IyZMMSUiWj1aUVVVJXc1Ni5a'@;
put 'WzZgMV9jPCZhfmg0TT5DW2dsOE1hUVVAXWhAQEJyOl59WmhoTzh+VmJgc0hiLFY7dF9yVFc8W0hDWDZtV0l6PVV1emBsMVdATFpCUiFKcUhrdl1raTJCUDxSNTtSPUFLSVpqYE0mXUxNdmpCKmJJU0NReWlDRHwwTVdJaHhUdkZIOV9PejNaWGA8W2h6eiwmQV1BZCRjd2lHQVtqUC9RYD9eZmV3'@;
put 'Qz04bGVgYDRjaG56YHVhX2c8dE9YTnZAN085IygrSW1lXzIwSVZ+QGJpV158ME5YTktqMnRGdDEoYXV9S1ksTVZ6dTQ6aFY5I3txcjAsTlp9ZihAP0BGLH5WT01vL0hrbmFxX2hDT15EQn57cCguPGBHXXYjeC9EKS82ViwiZiJAOiZYKUo8JF5IJUciLD1aQHxuS0UsdXlFSnp1PjM8a0N3T2Uk'@;
put 'eF0rVUl7QDdhc01uU1ZwT0FWY3dKODd7diRIWWBPRC8oKyxYI0wjb19uQTMuU2dpJXRPVHpDVzBlLzBpNEFdVjlnbEc8cz5TZjYzPTAqU1FuVUcrez40an58cEZ8OkBoYD05NDJZczR1L1gvLDloWUVIayElcmV7XVlkaiU6QXJ6U1NRVz5WP0poazJEMEZsOHxtUVZRdEJmXmAzQFFBPVR9K292'@;
put 'PEFZIXxUajBjYk96eVNzbVcyP2l9Z0tGSVlARTkxRSlgaHdbYiFmOSpZWkxUNzQocTF8fTpwWH1yNkpyXzV3Knc2VGdCMDQ+fWJIPUk1Qkxidl4jKEUxV1YiXldFaUFiN0JTbDVGMisvdEljfGwvd1hHW1gzdltSLkAybi81WCtZK08jYTRuQH42b1pNWlZEc3trYDFBS1lfNFZELz8qby9EM0V9'@;
put 'V3ZlfDlvTTRKeiJuLEJuXWApU0h4WyxYM0ljRXhBKmEjWWhlbW1jQiNnSiY9WDNaZUA7OSRnLFksMiFAfD19bW4zcD9aPl4kKHE+cHF0RGNdOmVLNkx3aVtkWVRVSClUenBDbj96XUc3fUc1LC9WNEFeOXJfbkF4PmNlSzFHOVsuLilqMDIwbTpjWTEhYSpyQ1NtNjt2KTNVeHs7ekFOeSYvZnN2'@;
put 'dixIMVRHcy9TQj0+fn15Um9AWzdBSXB0YXZ7UT1AJXRVMik+Ly9sLG1pQz9mTzZbViFUUStfSyIpcyR+QiNUanVZX1tHdyxTSj9jfGMlTkBbfi5ELkx2fm5UNjwoaTNiVztYVHVoKDtGb0UsISFuPz1waHZzblZZO2RmPS4iN3B4bXRWOzZqVmR9QG81I0VPO2pYYihubjlGS0RkMyZ1SVkoIWp2'@;
put 'fDVUb3FWWlVbUERbMis9L2lrZChHeEx9V2ddO2tGYFNtTVAwQGAqW2ApOUsxWjN1QFF1LlhbfmBUS31MdWdOV3E+KnV2WiwzNDs6Wis+d05aKHtkdHEjbXk6RExrYDxdTjh+UHFUW10xY09eOjs7cExyNygvNSVyLGlxUl9wTHJPfm1OPGJIclR3Nl4ofEQ3NXFpU3YlfDlYIUArOyt9VCwrQzhR'@;
put 'SjMjfTE7UCZHLHR7NT1FUj4qdVhla291YWF+LyY/NnUhN1shW0JQd2xpcmVtUi57Jk1GO2kwT0NJR1J4Iit1VyZ+YnlCYk9IUXVeYiFDWi5sYkMialZeLF1CaT47XXFhI3MjYCZzW0dkRkpWLGk7cE5CRzV9ZEg4Mzs4cWMpblQhQXVub0hJan5YaGlyNmxeTFRCLFo5c3Ivd1huekFTZDU+N1sy'@;
put 'N203Nng4WEJYKVRKJjpfUiUoLkUqWmZDWmw2MzF7JmwvW1VXaSM/ZzlyQEx1UzcvVzhRWj5jNltvTihCUHhaaiR9WzNlcUJaRC41ek40eEspQmdjUWxbdGxVTl1JR3Y+M3J2PmVZWWApX0h9TG8qalB0RGR7ST90O1VJJHRrRHJ0JmdfOX1IVFJhRWFCVyhERFd7LnFCQjd7ITJFQz1BMH4+Ojo6'@;
put 'O2o1NzpKRkJ7dlMlZlYoQV9nfHdzUy9yZUB8WlAxU2IwN2IlMEpTR2lVLDJjIXViM3NOfUBlbjEqU1ZMZUxEcEZHd019VS5gVWxmZn5lZ18zPU9DZC44XU01WnYwMCx8Mj04KmdncH1OdmJZfiw0M0tXOkFlbVBqZE41TiYmcXlEKylwYjs5M2BMdktrNj88LFgkN2IsfSN5azxfJX1nImhNYiIk'@;
put 'Lz1sWDJvTWM6RzFUcDVJQHg5blVmTVpbMS5+SSV0Tj5mMkczVyU6ZH1DSypwcnJyTylxUjEsKT5yM3suV3NOMntPTiwqVjJYUERnYEMrU3kwQG5yYHs+KSN4I1ZjWjJxPEIlNnR2Vk84RTNFR2ltPTswYi9OJE5nZTl1JUheLlIlMVtPP0A4dy51LDBubHN7c3kjb0h5O0JfQnJaYnduOXkre2J9'@;
put 'b3JFSFBbPjN5U2llN2IsKS4udWV3TmVwOV40LHs1OUdIQHd8PiR4YiRyUGdKQiopNnRdaT54ck9GdnhOPzU9Y1pneEhWbXpgMUVIYDxwWlddQEd9biFgViw5NFRLZ3h7ZWA6b191P3VmbjpyQjw1bH15VlhFIXozRHs2YyVfckZKO209bXpFWTNbZUQ6Sythei4se1IjUDJ3fXNAJCQ0byU1fjkh'@;
put 'djclTjxiNDtUR3p9RTY6YCxER2E+djR8LiolXy9mOyp6cHZ2SGN2YXBhIUdWeE1eSEx7OF5ZRXVqJmlMOnd5fk5ebFpXZ2BAd2NISCl4dW5rIzxjbDNjMiFtcDVDXnkrSGNZIzdoPD9TRnMwQSZvQDhRbi4xXjBtOjVUTzQuK2VaQFtfUDVLTnVhUVk6eEp7ZX1eMVB+S2NvOXUlTUZpMUdXWUZ5'@;
put 'Q2M4TWY+KF0sVD5wblZlc0Y4MGcqWVFtLlFsS0BkWXdiK09tTF4xZEx0Tz9hcSFeb0BvKndlNX00VXpSckZ5TlU7d2N5ZVVFPFE0K28/TVldcnguQXhnVGo9O0x6IVg2UkImaih7VCw+UT1XRDB0UUMkUHJGMH15TEQxZ0EwPGdiQS8lYkAyWzEoKFFLI146OzZbOSQ+a0ZfdC5AaGgoRUpual1L'@;
put 'TjcvKiNUY1peUm5oL3Qsc30lajdMO1FOSUhtX3gzJE1fQ0A+VSxddkhwLCt5d25GRnEsfEx3UDhwI3ozS0RPRVs7NHI5cGFhLk12Y0QreHxXNlI5WEooO2dEYHkzZmxHZT5LImxoLnJdeFpWflg8XyIwKGFTUn5LOVE1Om1NTDBlczVtXiZEcihJRVo+NDYrOSRbWCJHPUVgKVcrWEddUz9SYmt7'@;
put 'a0NMdyR3X29yak4objB1VUVDN29be3FQblZNdGk7cF5qIVlpXSN8MVRxeTV8JGkya0R8dVdoNzZMK0I9aV8ocVo8PDQ6cF5hND9bVCNWdn5LOVJiOiNsa0VvTzBtP3daJUYzY1UlIXMjd3pvY319Qi9yWkBvIjJMWCJxQURQQHdNZlhRI3NKZ0NwfWZDTWR5Mz1DS1liQmdrU2h+a1NAaWwud1Bx'@;
put 'eTh2dCF0a3NKVmByUlYrOHZxeU5NYzZRLyJuLGBLW3JnU3wqQjE5IlclYk0xQypxOiE3XlhwN00vdyQhSS9qPEs+Lk13UlQ+YmpNIk1Halsjcm5uP3UjKlYjWj1oR2hbTkw0cDpWLEglVTgmJn09JXtYNTM6RXQ9PVgxRndwVjpMTVRxdS9oKkdec1lLNXxSTG54V0l3NVdiaGd3ZTtiLkdyTzBi'@;
put 'Oz1YXi9Edmd6W01JbW9+JmQzSTJyTkRjWitOZWtrbmNmNVZ8I1l+cjxhZV8pMzdvRzo/Uj5RNkc7RVMldlA3KmI3L2ZJKjdVeyNlSFJTdygxTys2Wk43JG0zfH0hOjsqV3YpNWJRJl9gVGRxIlkxblg1LkZhUlEzcT1LNWUzdVozZVBVc19PcjdrOXxRQEckT1pNeChZeTxlXzE9I1h6fiw8ZiFU'@;
put 'ImV9QzJKJjJfKSkjfjQ5dmpWV0VvNEJ7Yi84e2tKRDdEfHo6Sn5HYDg2ImFPJVl0bmh5RWlLPUMsVFdre2FFNzBOJEtGUkIqWj1wUl8xWjlyLmY/dm9IP21fVCJsVnBvTTxaPlk3a2JbYUgySUBbQDxRZ3QpSEBLXTJ1W14yY2kjcX4hUyoremVOW10mTG4zc1IjViJ8RWkoe2pFa2EsOS42PTNY'@;
put 'KjdtM0J0O2M2a2NATyp8Kj5lfkYoTUtafDc7Ykx2UmRwaStHMU9QQjckW3BtbW1qY2BWflBPTWtEMEFucz91VUV2KmYxUmRMdTcoJk9kclFSKlJbZnczM2hveUU+fnJNTSo7WlNeR3A1ZmosVVEyXTo5N311WlEuPnhddS5QQys/cC8yamh+LjVzV2JKYyZoa2Z4JGZ1N1pLSkdCO3B3SkExdTJF'@;
put 'RixRPEt2diZ4YmYwP2JwflpVfEY0NnNZM1M+Pz8hQTRlRW9UZHVJfWMpZkw1On41dHVTZWpKeWRMZzNbWUxuSlZgSTFtM2YjQG8zTDxbP1RQU0ojZEhtM0EsIWUyOlZTNjdGelhWZ1dHZjthT1VfL1AiSzksbVROVkZbJDk/aHxXZGtFb3B0WihVNEw4eCx+ZjpZaW1SK3A+XXRCNTlVU29fRkk0'@;
put 'SHhQM1ZdLyg1S35JNnxGeGIiaiRUeCNYdX1MQCgqSiY0MF13dWRHdnZrcEJOckgoR2RnNVYpe3MiUDUxQkRHaHRsLzhjR3xlZ1AkPVo4NiRxVT0mdjdCKCxETjE3PyFhaWt8SU1XM2BfSDk4ZD1tNTZCWXJbd31VLmRWO2E4OT1nOlhuSE5iNzZ7TSt2T155SEtXUl4lcjpJOypteHdSK10/NUNb'@;
put 'fmw+JGdhTSU8R3EufkBgWVZOU2w+NU4+NWk0dyliOk80UGsmO1N9fX1KQzpxbFVtQGhzOz9JZTwqY0pKR1Zhb2FzSHQmYlA6ZVh4S3d2PENSSVhoTWdLMnhfPFZwN1BrVm45XyZLT1gsbE4xPF9YTV5hK30scDhNcGR6TSRWcjRPU1dEWU9VWUZFK1hTU2VbNUpERmsxYnpUTnB1VCMsfG8sZFQ1'@;
put 'P3lMbzFgMTc5SHZiWC8hdldrZTN2aENjVSRocXpKXiEkdjU+WyQhYHIrVClFQzBSVkhXIVowYVJ6S1coKHRpNnliTztnY25NaDlkMnpZTUVrK0JoYkZ+PG9DYUVRV2BabktrRl8yPD4rTT8oNnR3OFpRME1NP09QLG5xOXBVNSNzWFhkQnpHJjxWP2RHWFMwQytTTGBUV2BDVHtmY0hiImF2KyN+'@;
put 'YCQ9K3t4SDxRLzJaPH16QncxJVtRWj5WcTFrLmMvIVBOPExSdWNlUyhebkxpYj9WPWY0RjIzJVJgPnU6WUpaZUBaUVFAXXBHXl9INXhrfihudns3NFhfPGsyPT5Aa2k4K006aWouK2xVWV0zPHhaVzNCSk8uS0ZqOjh3IT0xIXBUa0Zmb3BrTSFCdkRuaFcpbCpJYSghNy9KUjJ4JD02Um5UUWJ4'@;
put 'UiRpLilYJmtIQHReIWt0LjE/UyNyJXFJNHJabGMiaEQxL2lMeHtrRyohUSJkTT5ubFtoXSRuOltTfW9QNT4sIlpXcjkjM1VxSnVVOTdkVSZNNEhDLjhqTjxFKzI3RTNmZT1gbChiUEJVLHsyOWFJS3coOEdaL2RnK1FBJispdSUjZD4yKmZNI3kiNy88byVqKzVmL3pkanwhMSxUaStDdFg0VytC'@;
put 'ZXN1MFJEeEVFPklvU1tEZDxKWSgmbWRMPzdVdVVOJiQ8ZWpYOVlDOnx5RyhmYDtJXiw/aCVaKnM1ZC9AaW48UHQpamFSdD5HUHFRRm5VIWtKdTNHU111KnhsXl9nWVJwJHtCYnQoMkEpIzJnZ1kobUlEYVohTHFbJHYhIT0zdzJeMSNrYW43RXVXJE8+Y0k5WCM0fWUiOW4qS0p9MVRGPEs3bWF7'@;
put 'cXB5LzNdVChIYH4xRHF7PmBCLiUuPEBUO34zL2xpJEdMKG0vPHBPbFZlNEVGZDApQH40Oko2IUVoZDVbfDslK1o8RDJAIyMwN0F1YW9HSG17RDM9QVVVRUR+dFRGLmtSODM8RjdvYSowYjtnOz5xODRTMGtmLDBQKiQpeS8+aV5OI148JD5VK3UhSDNfekwqUzVsciRoPClrWU45ImRXcm1uTFZO'@;
put 'KntvTVYjbVd0MUBIclo5X1ZHMGcxWzJieVlLSWJsI1RwdkNHOT9tN1VlUSQ2SToselhKfkUjW2Q8dEUka1EqeyVRWml3Mi4/ZHd1Oi9MWEIwYHhnJFEpL0pVbURZV1d4WWNsazRxXWR5M2kxJjFbI0RKSml8VkdkO3wmak47dXdLfWU3YG1FO1U8PyMjXzwkOShsIyolXkl0XnlsJC53eTxQal48'@;
put 'ZG5efko7WGE4Ni8oSypTdEdYVF9FUHpBT2ZVOytBanEqNE0pdHwzTU1MOnw5fjk+KGMzdjEhdkNfO3R9NUpmODVGUDg/JmpuXmJKVTcjayV8dEUrdnI0SGkzc1ZCWCMxeCI5TDN5UT93Nz9IfFoocFpMMm02RjE5LF9ZYz9uY1hfUHYoVEpOdnFTWmBORyNsInxTTSRqcDdXa3NfZlJ7SFU8QiIz'@;
put 'OixyVTM6YioocnlMRi59ZlheTEBxNXNYOnA+VD1zZ1pHYldmanZkb3Z2WFgxZ1ZpRFF+WSp5Xmp5NTc6bUxJb35VJEN5R3Z0MkAzWkNJcFdoWUU6MzRAdF14YChwMjtXNH5UNFUpWC8qMytiPW44WVNHJX0qeSV0NWkvVDFYYV87Zy8zUFQmZmdKNXdEOWhqMUV9MU1wQiUvbXkyWHA/Q2cvI1Z4'@;
put 'bXBkSGIiNFI1amQsMDV3Vm9tI19fdz8pQVs4QVtQTWEjPX1JLk87fURwL3IpYCMsIn5aUngjMCUrbV1leUhDdCEvMz9qfGVhJTdzKUgxWERVcCtWX1ZXPndQRVRRSiQ3eVdOUUF1d1lTKEc9TTVmUU82XmdqSTlzU1t5OG14aUlhX0U9VVhBKktuUTk9WChjKV4zQXhHQERqdU9xPnxbfWdzKkAi'@;
put 'UW1wNWEoPklxQ3AobTYvfm1sYVdLPC5Yaj1mJiIjUmxMYXV3ZHZTRH0+b3RgeVZSZkM4SWtyQ1V5WlkkcGh4ezM/LmlHTWF6RX1fcHlaODpuS3IobkZvYltrSCR+O2whfG9oWVJ1dzR3WiwyTng+NX4wcH0reWdvMzA0aDZYVk5gdndiN2Yxbl9tZ1pxN1B3MmhOa0BVZ2pHJVY/JUxtRHpRW1FS'@;
put 'SFQ1cFNyUjMqey52a3U8Jiw8OzZdNT57Z31UK10/TVk5fkNZYk9FbFdANyNXd1dRSjMmaSU5WkkxITV+UkV5dEM0ek41TnY7bHJBNGFKb2U7RUhCSUM8ajMhfmJxaFlyOD98aWFSL3AyZXBHQUxmbEkja2IyUUddfVV5RHRYNnI1TDpPckEiTFA+KDpeSWREKVtxNmhvdSE3JGhefEs6cWFobTVx'@;
put 'c1FlLyYoZyU+NkgxXzprRTk7a31VNV87Q3l0fF0wM0YjMWxoWUtXTHd3QXhuWn5sU0s0OCN6ZmgsWnROK3RRSDtWKGE8SiM6T0gzeEpUYExuRlUyS1ZBLkFIS3I6NnFZdiZDVno8W1FEKUR3dEd8ajRTfD1oYFMjPVIiJWtTPU5hMWNQaXR1OjhUaDt1Y2csJSExOT4haS5TPEZdR3VtVz9DO348'@;
put 'PVNPWV1DaXNpJHtdRTVXLnkqekRYYkkvOiMhcCRVPUptL3N9Rms2JVlRcn1GdGQmNyt5ZmkyZChpZnl5ZV5baV1sISM8X3w/OmFUfmJIenxANk5EM1heWVQ0bn56OGsrMXQzI1JSfHo3eGh5TDltUE4qTCM1WVM0bFZXVVIiQzZTMCtHcG9TSENUdmY1Yy87a2xaa2plaSphP3hkKTlPb3UrNnVn'@;
put 'XlgwU3xyP0o+RyUmTkMwaEZTQGw4fWp3YHF8PzhyMlhbUWZnW2xgejVhMiIySD9zYjxVdmwjMWBzM3I8PkpaTTNRIiYrIj9VQWpsQGc7cC9JPU80O2tSMzp4TU9LLkwsdClxdVJPN30jbCo2ZW8xcFY0VFcyMUR3c1pBRHIlbW4pQGw4UHwrTEVFTlEvUGRwPiw5SDlCT2ddJlV2VTAwQks8T24r'@;
put 'dXNmKXN7anRvbz5VciN7dnhXNl5YZE46RXhnbHs/I3NKI20vRE5ESE9gR2EkMilafSVkJnluKTxhO01IVXxSfkQlVz09TzNpVm4lXlhrUXQ0SD16K2J3NTt8YEhNNFZPfSIwSVNBWV9fSndUc3U1aS81ZCVHfXt+aiIzZE8yQz53VW5yfCVrREBbcj9KMTojOUtdUUkxRnY7PnQ6WDI4N0ZSX3J9'@;
put 'PW9nRCROKkhmMlouM2JjPDRMS0RXSDBAJH5eTWliVVFMM1M0KmJtTUVPSGZmODcjNzwkTS8uLC5pdDBwSmA/PW1eaz9IdFNVU1k2KiZmUHwlX1hoOTtKXkRDQE1vUnlnZEZ4a2NGV3FvUlR8XkNudWR+YUcpMjYzSn1NbHpnWkVIUCIvYmdbRERwfFkpe054bXovLD1DQEIrTFpxfTpWSyZ2Vj5S'@;
put 'ZWtMVnUyd0VEOVZYcnkmYDFxSD4jQl5dPSNvTERiMnRuK0I8KGFWQEhUJG1WYzRKKnFhV0hlNlJjS2MzamlMTClgVlUyZmpePCQ9e1AwM2xNVzMvIS5Bc0w6S3lEaE8zLl5aaDI5Q1A3elBSR319T1pxdXhwTlBhUCo2ZXRpVyFoMkFkU3B3RTpzfktdTj1QL29JLlE1WXQ4fkF9PzlXRU9xQGNI'@;
put 'SSlHTmNrNTIlUyhIZT51aCg5Mn1MTl9uKlo7KGhudmFFM0Yqd08hXms1T1BKdi90fEdKekttSXo0MU1YaiR4b3dbQHBlJS9jdGlRLG9dLEJgTz1SSGM1I0l4eUVnd3JZQUxsc3VxI3Eqail0UFBWSjRoZ0poUEkwcjBMT31xIjBIJW0jIXJSfU9EWnlWdlBVdXY3PmoxbT13S1BRJWY9VzNbNmhk'@;
put 'KkVmWyhHYWpWRElaWGdJYT9JPHVVWjByZnZDI0d7KFcvZE9MWGRmIzAwRjRpJGNeZDU5diUvV2VZWHBxRGFdUkoqbWZOW3tXdSJmZVhXPyJaSWprfWtQNWVaZHEjRz9ZYTJmYnhPZylhV3hKcTZNcFtaP1srRTJySTBuVGx9YjoqLjpZWDh2M2hib1BYMVpdTm8pdC41cDRSd192KWAkaDx8R0o5'@;
put 'WlZwUUtjTVgpVHMuZzwmJVVeYGc9d0MzPnh5KmJVPltyY0NWaUBhKit4IUg6MXJtd0clOX0xJlEpKzglTkgpV3AkREhRcGRMYCo2PzE5cCJuSnBQbXQifFRUJVElKFE6dS5TLnVBW0NSM35MU0t9NVprQSRlM2E7YFgxZXtAOSUxPjNEakQyS0hYOT0idzhEWTJtdDo1Y0gsaEBOZTQmVnRlMylh'@;
put 'dWR7VXxHIyJqbUJ+b3RHfC51LyxhTGxnXXJyalQjJEIhaGRVTFpfS0dZdDJFU1hvJnZ7SC8lK1pydU5eWkQmVjkzOz5qQWlfSX1bWiJAISMlYCF7Pj5NOH5QLDtORDZtdG04OU1UU3oxbzMoOUlkZ0x7XzxUaDJgUjcwdGJyQ1N9cDB3cE9aYk1XelIuWkxtOS5oYWk5Mn5xJFs2cTpvUFdTInkq'@;
put 'IUByWkJ0cGpYajc7JFlMVG9OKW1LZSl8bXs6Wi9fW0doL0MuV20sU1Zua1AsRS51KkMpYkFIKTouPDB5WDRNUjZYcFlOYz1VKzVhJloudnAjLjImd05WWz09Pz5DYS5BUFQkZjJwK31LZmw5OnA/KVNWfD1QVEh8KWolNVU3Mj9EWGZ+KFsiNGRqZl1hP10uRjN3WnErZ0JuOGFhakg4d0s7SVtv'@;
put 'LltyRisiUEk7ZlNfMmohRjtaRWZSaU5yR0E3S3UwK05iWkxrNilNOG0mMipqWD4hSz1IcSNlL05kbkhmS34rWGJEITckLCF1K2c8JVtmYUkqdX1rSUZtJSNyQWdCLkk1WEBvaDhTbSRqIWN8NWR7YTR8Uj9uP1lnRVQuOngrYmo5eSpWOGczOD4/LjZsQmd+MV1mUzk3aEEkWVE1VElkKWIvTWd0'@;
put 'fFcpNy5EWV8mODYrcypaSDcoYXlkWUNFbjdFOXlIQi9HcUpVZm9yPlBZTnBubCkhRyYuVy5zbHBiS1YvR2gueTlsMyk+Mm1JY1EpKkkwUlgxe31VQW04IzVxelpIaH4+e2JEd0YwUE0zLHVGQTFYJE91NkZbMX44eVRWbitKbXUudGlwXk57UnV6NDg2WDosO14hayxzaHZoYCNyWjR5ZEFtVkFK'@;
put 'dWFIen43bCt4QFFPdD13en4hO3VwSjxZXnFqdFQjIlpwZkwjIW5sUD1JV3RBR0Eqd3x3ZjpwbFNvcX55PlVQRiYoWS9UZz52NSZSJVJkM21eVzIlaVlVKFFKMFdQdW1DYzt2XmpDTX4vazgjTSJZKSk7ZH1tJlkmPyRISUlwPkZ2TnQwL30vL1dRU0IlTEpjbGR7QEFneHBfeXRCPWVXMEYueXJ5'@;
put 'NDRjcEx4X0k1PjdsOCpzc3EyWjB5N140Kyk8ZEZlWi9fPUdiaWhNPERoX2pBbndZM3Fpb10oYSVvY0lKOn1UNiV0OXhaWU99fE1uKFEqd3lfbWc2a2tQZFBpTi5eTyhqN2ZQMkJQQ01Jb0BLUzBAU3c+ak1Vc3xZPjdbVUk7PXJyLk9mWzIrWF93M1FOP2FEL0VmZzZHMjJ5Iyo5SWhHOFEmX1g7'@;
put 'Ymd2K0ZNNTgzVEltRF9Uai85JE1UKHhXQGJhUG4kS0BvbF8hQWM1eypyWGhLZGVjWjZ0YlFDKldNK1tocXV0QDAvNH1OMG93aj5NIzpqekNHOjBnM3p4PHo6ME5+WHFtMDRUITBVZjU1cixVPms6ciJudzsoZjI6eVh2emQ6Y2QuXUBuaGJjVjMhIiUzYlZDRER7XSpYZGtgbFdWTjBtWUNYb2tB'@;
put 'PUFISk4+RHJOQEA+TmFjKnFPbCVsZXh4UXhbTCUjdVZlTVdqemFhWU40dTY0KFVudGdWd3x2RSsoZzRCZ0paeGs0TEpdTVZbNiwoeWk5VnldPEQ9fktacDxxQmk1JDtEQXFDWSNIVD8wYz1CTFRYNVJySTlWWFdFeHJqdmVhSHJNRDIwZzxsayhLMjdxLyMzWFl4PiJaSExaQ3QvOyF6QSJ7P1di'@;
put 'cXZ4TzpQKERNYWFSQmYmfjQ6TFRVYTcvOCEkR0hoP1hQO1J7P1AhQVRfJi5MPnpfcCpZTml5KzRWJT9gUTlhPnU4b0k+OCQibH5YMk8hbXgrSH40I0JIZjZTRVY3XTh4ZzNNJVM6eVNCKV1eLihuQnF1ZWVNSz1MPz43X2cmJTs2JEBSPWJGKTY6WnNwaUtyKzJOR3pOUGZzM342Zm9QckIxWFRk'@;
put 'S08qYVg1MXdQUEQpb3xZb0NaZit9PzxzSmZOeXdzTnJxeTVhMWQpOmJ+b15scF1FS1I1Om9CR2RFeihvYHNwUnZUKWB8PGBPVVQyNTguazhgOmtCal1QYXFrWmRQdmFsKC9UUk4rUlQ5MzJ2eXl8YnZ5KFVxWFIjVFRGTkYidG1+RXRpaCQvNFMqUTJKZFY3fi9geWYqaTZhP3JJYURCTTIrMz5+'@;
put 'eUkhUEs8R2hYQis9SVAzRVMpW1teK3lTMCIwQklgOzcpUV0lIjJVInw0M0UqWjp0VTtnV2Z3VlhZZ1VKZHtdXUJvX0xVQGZsdmIlZUp4PVRFVTR0TVc5cmIkLnVUJnxjJGFZJFpHbTlnc1U7Wm5dTkcsJHNVJjY7S3VxOzdZZngudno4STZfSjNMe2ErKSFVXzw8ZVhEYUo2fEgxWE9uKlhSPi9o'@;
put 'K0hIXkEwTFIiJXs+Z2phSXYkPnRaZDJNRSFPcEtNe0J4OFc5OEZgVylZNy81ZUl9LiYqVW9OdER3UXV2XkNDXVcqPC4qc2dkI2FSKWNsNn04VVJqXjdUVjN7U3dNTyNlMD1jOHlATVh6RDxoX29pZWghSz4uLzc+YWtPQGFnMExPZ0BvaXVKNGx9Sy44dGVpKGJ4ejRjJX1GNTtZVCh0REM6Zz44'@;
put 'ZlohWGFhcjpPcUckT3pxb3B5W3dNMT8qPT9beVpSQnc1XyErPSZ2bXd8QGEkJkA3W2h8Z1JRTS9KZ0R9RjRCSEEvLCx4L1JLbSVUfj8xdGtJXWtrLDMuI306LCtiUFRzYHhqZD50X1gjfl99ZlokJTxXJlcrNV47VDFUeSs9XmAqJDwqISFQVlZ8amU0dWhtMHwvTnxIaVFEeGRJfWdSTWtYJmxL'@;
put 'Z3lMcCUod1JWQnFmQHhGTzVFfHcyMUwuWSFPVEEhL2VFcyZRRjJCW2ZvOG53Wy5YYTVyTmVjU0VFUTtPWXVRbERQP1IkMDFrKVciXl9LOXVybmhiSzImKipRUkkkK3smaGp1bmRYIm5dTGFvN289K3hJTXhvRWpmW1kjS0FAb0p9ajNSeHlYZjwydEJObzEwOEs+YllUMGhQKjdeP08sRXtjO1NO'@;
put 'UklPJlRlRWpmRSI+Sk1SViwmXkpmbHhJYmd8P0NeaWBXRG1kd2FrLDxlRyJVazxkRzw1SjAmSW1lIU1naj8/K3dpPT9XV1gzMCJXcHpZb25Lc0VPazgvbkJxOiRXV2pXPTF9VkRkIXF6OE46PyY4bSxLKS4jVldGLzxVP2QiaUUxfjN4RnU6K1ZfcyZwYjJde0MyeF96fmtJe3hsVC96MHk3U2Av'@;
put 'UXFCfTs2czxnQTtuIT5FUllFUTw1U1BtUihCbGpyPEJDaz55JDM6YmJudnI3e2FaIlI6ZzZOJTkoV2VvOWt1MT1pa1EyPkpOdl90fStOXyY3UHRFYWgrcGxFaXliZWF6QzRfZyxGLix4fGJaeHpxOm5XM2IhS0xmd0ZhbHIyRnFKRCUud3VLKUZhMV5PP0lNfCl1PD5OaVs6UDoubnEqJGVqbW8w'@;
put 'Iyx9JHR1N19QISM7L3xHOWErcXpgVl8mLHFQO0piXjA3dnEzUihbeSJgQilRKWg/Z3Jkc342aClmdVdeLl5PbXdsdE16Pm1dYXJBMkddPD8sLmJnbFFOdEImSFBwc29tVGMhYn13OURIWV0rdjBRVTMvWTJIdy9NOX5uRmglb1sqPnNPX3B3cmE/P1U3M3VkUy4pVHk8R2Y7MTowPCVQOUY0aCxA'@;
put 'KEQkWT5HMiloWkppaC5+XmQrUmJbKi5mNCU4fUUzRnliSiRCfWF2WEE/OWQ8T254T2B7fH43cU5BeS96QjssS1o2UDBvWlZFT0JEbyloa19ZVXskUl4wZyVxTG5NJFZ4M2FJWC5HcSUsRlB6fVlrbG88bjBeZkw1bEU2aGxFWEBAK0kwN3VfYTw7MS9qKVh0fn5JbFROPlAuQldqYjFdOFhNeFZd'@;
put 'MERlMCVxOlZjdkZQSGQ2WCRxNHtPeiNQQFs5dnA3Kzs7IzI+ZkQ1bnIwRWpmMmQ8WCl2NWRNTVl5cG5tUi9QZGNMJn0wb2YkRWN1XmMqb0pAcVh6MHJKVilpMyFPY0Nvd3AjV2dSLiRTNmh9VmY7IVVkTE9fVEFwQlE7WlNuXWApO3N0Nz0jUmc4cSJ9Il8yfXg8UkdMVmI1MEghSkkpQ3JDK3RG'@;
put 'QVY5YlReJFkmTjJ9fW1Qb1d5VlBiIW4lZUYjcy9gP1EuMVpmWUswdV5rfVdfRSV1VX0/LkBUQnorOisvRUwibSRrelApZFJlfTlUREsyMUlEcERVYyZEfCIvQk5NOUVUQnlwNX1dYGAlNT0ieX18RGxUPH0rfi5XP0NfZmR1OypuMTBYIns4N3hMN2BSZmUyaGNfSnkmYmdWKlY+dUNDYig5bDQ1'@;
put 'QX1hXmtdVCtXaTUoKi8yeTgjIStfQDB3QnRaMmdaR0B5L0UiU1E1UGpSVHU+big5JWs5YkdJR3RbezUybGB5M11AJF5sanY2SWsrKW9AWGByaW03TmRqMGQzM3R0dlRYQllKXVZWdmYob3huOjAuJFQpcURSfGlReW1HIzZhcGRZL3g9U15YLl9lInFyWms0XzZ+JXQpUD9Xa19TNk09e1lkUTpk'@;
put 'R0lYJUlDUkwzdmpPZkRiYlklajNvWTpwdGtIcz8+aC8/MHJTOnRpTjRCYG1LfDdmRlVLST5NTUUkYkJJYyR8KEZfY14vMVgkTjsxUFg/Z0M+byF0dlVZK3xRYip7cEJeUXxpSHJ5SlkkQUU5Y1ljNiYzWXVaRDhgWFZhRztZcyhLMHR8UlNiYCpQImomb3s/N2V5ejA9UHFdeDViLDIuSmV7aThz'@;
put 'VVoqWXZydGlzeH1aZ3l8UkVqQClQL2ojSX5tQz9YU0ovIWszdTA0RVE6dkJDLDwiRFd9NHkvN3FeYVEieUJ1cFRxaG0yfVJwVElLLm19RVkrcXkuZlUyR0JAKlFHfHFjMjQjMD1CVTJVKFJ2OTtZd1VVdz1VcGtoWzZOMTQ+cEl2IWguRU4uWyhKR30jIlFLQm5VJXNNamw+YDB6XWVWeHpBYjUq'@;
put 'K3RPNGdAMzZ2W25fLEhJKjc5ZlsjelBCIzJPdj92WS4rMCJHMGduRGchXiErentPJUtaU29FI2ZdX1FCImNQcSxKdz1ZRGsyNGFveCoxL3FIXUA4QE5HR3gzUTxqK1RuMkxYWmtJNGNZclRZS0V3SSpfVDMpRUN4NDtpe3hvazVURll4QHBCOUVgbllJNDVvK2NIJSpHRFZ2WHMjZGhqQzkvRnV6'@;
put 'SUtZcGJ+VyxMc19AbWFIbEdqenFRa3FHel86RTB0Y2olU01XfHUhJiYzWGtSVyldNFdrLEo+NiJ6RmQpOmBoYVM/W2ZjZlBdMkxqZDZ0SitEcT07ek9wfHtIKnRDLmIwRFU6cygmUltOaHh2MmZnUiVUMXk1XmU7b1k4X3t9YCt1TnlafWVZe2lAZzdYfWklOXQ9NkB8W09LNj50JFlCcyVsOV8z'@;
put 'cyVsZEB4LF1nLDo8VFdqXm1XR1grTG15e0FHVThgWHwxUVQ+SEhPMmc8bj1tMHRsaFpudT9wTktJa0hFLzwpc0MpLj9GYEsve1dqdmw1dz05dUZPU3guVGlaXm5WRzpHJiRJRTVAQl9aNnQjUC94JkQpUlpnRGk9UW8xdS43dX03UGopOSsjdnRsajUhMHo2N0hNTjUpdjQpOix5RmdYMWpSbENo'@;
put 'TGBVdjBoSTBtTTxrWllLOW4za1o0IiVBWnEqYDAqNSxDMm19fSp+U28uPCR8Z3RVWVZ9WXx8ZVo0Ozcua25JRUguIzY2e3F6eGsldEpyI21WS1osKmolQndLa2tVWXw0cFF8NWZjR3BrNnZlMlpKK1FRbmJHVEhpZGMoIlBCN1JKJWJvVTFhdEtFNCt4PXZ2VXpJPzdBIkRCOyI5ZSkjSGRra2NS'@;
put 'KmJERUEuXmQzRTB5RWg3ayo7V0JuUl48QFQzNlU1Zj9vUTZJcDAkdF4zLDRbXWdPMDI0YCo9QV1vR2FqVClMJStPQUJsKCUmOG1+XlJXZVc3cCN2ZFRWXXxhYj9QeFhzPmVvMTNlIm4xcCVsaHpkakxefWJPI25VSiUuR3o1bDo3cCkmN1FGdHtEcF9zKi4mN3NgX0dOc2hgWWt0M353fmttVCpK'@;
put 'SmtOdW98LkBRQXIwQDlna2Ukaz09T0haI01NPncoUDFQTCRmZnhHKkR1LGw/VEs9fDl5LzhzMT57aHF2amJNW1pdNnwvMHtPdGpbMStjQHNga1p3ITs/NjhRWCMmY2RwNSl+Sz9lUVNQSGllKEd6aCVAN28ldF9AO0JvNnEyS2l5IlRaTC9uWUkiJWEvWUAwVj0qX3dAT3tLTGVkcCYhIWZ5cmg2'@;
put 'WW1HQ0JNIVFXJWhab2BIN0J8Kn1SST1qPyZlUTlkeDRGNW9ndn5UR2dwP1tHMiZfdFc5Jig5WWgyXzt7VXx0P0hLbzdBZylYL3JPeWNbYllMYXJ4dD8qfnN1JTx4P2BMWEBmMn4/WzIwQlV2Ol5rWCRoRilMPj8pemYqQkF1LkwvKG8vIW5gekViKFUiOjRlYnFQXlNsZiQiKWkubDwxcVtOPGha'@;
put 'MHxUTVNsQzNiRXBUT0R7V01eWjB5NFhILm5Ia0ghU0VtQ1l0UVdvN3tgT1g5Kk8/Kjdfa0M7aVdxIl5jfER7dFpXKCU8Ij1xOkkmTEBgdlEpSSRlKj0+ZzpKRiVmIzM1VH5oLDM5PCZHU3kpczRZVUVxKTMhZWUmUGpuSzZRM1BkV2dLPENqZTRvUUE/LENmT3B0TS9XWmZPIkgoW2NCWFJDXk06'@;
put 'JVM9Jlh2Xj9mPGpOKmRuRihjdko0OjM/UDtpd2tTIS9kOiVIOHIzd2x7TGtlYnhIPWZjQmw8c1JbT0pWMWYsWD16MmBtUns2dWd7PHxfNHcsdCptK2ZMLHgybyNUfTg8XUohWT5DISQ1Zk5HUTNXcW97IXQmczAoOEppTWdgcFNhQUJ3Yzw2TXV6NEp7WG4uOFkzWEBnTUhXWXEiYlZIYHlpNGMx'@;
put 'KSFPdWhFd3ZXNTJLY3V1UGEjVC4xMW9RJl0lY3VxeXUpbjdjdWpzXjojP01mVH1fMF17WnspKUYoc0g+U2YpVUB5PU1NU04+V0dzSVg7Q01Tc3pxSSZ4LixaT0xOeVVdU1dFNyN6RTxhdDxEZXdyLCw8cnZacyxufXl9SDRVVyNtVVJTdXJuTHlxbVFmZSkoOHFQSzlSLkQiTHYqa3ZiQmolK30u'@;
put 'ZV0mQF1rZVc/PXh2bG5rQTNFflB+Pm9TNWx2V0h8VTBwPCZRTSFlMkYmQ0JSZCJOK1NXdzAmK2dBZEQuSyJ+T1JyRG9Vem9OfFo2OCZOVjY9YCFxJStfJXBOe2MmTzBHXTJSOWNkZkxBQj80MDY3RCZOLG1HZiNicitHanB9bmZLekE4bEp4TTdRdS5Xaix7bUouMEp+dnFQZ3tVWyspJCY/JD5s'@;
put 'fmhwPjxwaGU8e2difSosfjdgV3hJYHFCaU1rQlkqSXRRI1VdajpJQlNUbn1sSUJqMzBfOiouWnhpZyg8clIyTVBfd3pLOjkrWj5XaTZKTC5tSXVCS3l0IUBDWTNlVEtaTS5yfHFDLyh5KWdFISttclJ8QUQ6NXhEUypnbUh8NFg8YjFrPFZ6ampBOkhkYVQmTCVEeSEyKDoweFBkTj48ZDxlYWBx'@;
put 'R1IkSU84Qjk+cHJFZz9tLzNJaldIdGU8SXdsQ309Y2F4Qih3fltyM2o6NnlCPkwqdHxeaSU1bFkzP3I+ajAiNHJdbUcifUJFNXpxT20zeG16TXtRaio7ZUd2bVNIQiIkcXI2fVhvQnxZO1k5eSJdUTVGRWw1PzF1d149IUFkU15aN1BDYFhsUG5nfDY3T31WYnxjLigwNSplKzxFTk9zQDdwKSg8'@;
put 'UTM7Pip1SX46RD1vRFltWGdZbTxEMVUwYiFhJC4/WHFvfUAmc0ZRXXJCb1p5I3M+e1RrNHlyLjA/bUBMdzg7MlJqKXhkQWojXzYuI2M2Ql83JDhENSJ9YGVmZ0svZCV1P21jbkZydlV3VEUxcGx+WEYhX3E2OXI0dT4xakVwKVJVOi5YUm47NFI/OUAzcjcyXnQwQmtfPiltNlIsSCMsOUQ7RjMv'@;
put 'YCZlViY+dkQsaW1qWlNUMillXTI7V0dQQk9MdXJSIzIiLiNbfFU2N2A2fVdKVSpKdn1ZKipraExZcUZCITd6LEpPMlhlRUliJU4sfGV0aUQ8dyJMMCFbdXIiMDA1dmVybEcoQiFGTTF2XjF5MW80fCxoMlg8YCM3cnJvcnVgPTlNd0JHK2IxbTBSJCg1Knh0XzlQP1hlUCR0OV5rYGRFO0VyXj5J'@;
put 'aEg7Z1BPblJEVTdyV2JkIWZnLEMpRkU0WT5pMmhfWk9CMll7TTdVLiVAKncyNSs7ViMuPmw2RTRTNWRvZGosTl8zfXdzJChme0k5PUUpXnZJUEIqRVt6NmssQGF7RWV0aiY2aWhTYFhyR1UuOUVbZjRwVEBgXkZscUw4KGZIMDxkIkN5Z2k9VUZtYEM0Ukk4NztzPnduaHVBMnZxVypEZ0lJendB'@;
put 'd2c/eiV+dHMpN0w3MjZTSFFFKHxPSXxGb0QrO15QX2pNKHNoJG5WQCgoLFhLUjcxTEJXdUBHam1wbkV9bjlmfD5pfXw2N0xuYjRENiNjO25PR1U7OlR5XzpqQ2I8NjYqKzV9YklgeDFVaypfSSZMcnl2N15HRXMpOlQ6bDEzajUpKXRUMylRM21nIVc2L2VTUXc1LH1KPCo5ciMjP29IbytYcitA'@;
put 'SltLZmwyOT9FWFlfMERdMSxyfmg5c29OOHRGeTVVb11oRzpTem4weHZ4VltzKk4kIWYxQ1RgMmMqUSguNFJ7dUd3akQ1cXUjODx1ak9aQHpzJFgsVSkwWzFBLlpmfGJsKnBDWV0ubC48Zmc9fExSJnRROShgY1FkJV9OJX04OURYWk13QDMmfihTI3EseWxPc3RoNmc1SzY5QmN5VGQ5KjR9L0BS'@;
put 'XzlnIUs4cDh5I2dwM0VkbjdqaSsqfnVoXyQ4YHFPWjg/ajZ3Zy5QIW83ckJoVF4se3hSfiVKbil3QUsvK0pYeytleWVvK0FOYm5UT1hWPVVQV3JDaDV3NDskXSxlcHFNakIiUk9IbUcqQjxNPF4uXW47e2s4cH5mNFgzNUQiW25EX0whRzZDS1txdmUyQWs2Mks0YkAuPl1xcFtuKHQkX1UrcTU0'@;
put 'bGVXXn5VRVppP3dmPVZZMCRzX3tzODBLZEg5LHUhNTw4I118PV0rNUlGJjomWTh7UXxCbEMrbTdtOkMvIl9EWFVJSldLZTM9X05GNUY5Ylg2OmZfbllaTl86Jihmd2dkVzJPci8ldDo+flFKL0pfJFRBKVdhLDRqZF40Jj82eW1NZlpKZyNsZGtrajp8Yz1uVVd9QUB6SV84e0lwTHoxVENlNT8h'@;
put 'TGN2Mnt9RXddMnJkej9+ekAhUC5paXY8SntsQiRgQDV6ZG5zO0R9eyN7XUMza1lHZkMxcmpTOWoxJVdKLjFjRSJYOTdveEprU1BMT2BAej8lakByI2VGJGhVUT0iLkxUK3RZZXI/SkgpQzJBMz1wVyF3TDZ4NnR2fnEwTDdfeSF0flVbYzc+QklmTT5wSVtRTCFNfVYraTYqTXBiKy97aVtAO3wu'@;
put 'fFA+KmdMTlBpRSJLZ0ElKkd0NUJ9cjFFMG1xMWxZMkMxPG11ZzVlKihXRWAwdjhSbXopZk5jQ2BoTUJAXiVjcCUoMD02b1JWYFJPb0lNdVsoLzJxMndVXlAyfDZ4Yyl2SD9oOnowLGFZM2p9XyxCcmJwSk8iYS9XeH41ekhUfWRNaVt7eW9xQHhwZ106YXxlVncrRUp+MVZYS0siYTU+dHM1Y1VZ'@;
put 'VHNRM3YvJTIqZCl7T3YsSCxJZm52LG97WG8kT1VFdV9eejxNSVZAOCJOWFdDcz0vMFUxYkw0Oz8jbyRuaTtBOXl5PDZmeFE8Ok5qSWRoPTxQa0osTyRYU2tYSlsiViZ7YSM7UzlMSVRqMjlgfCk1PkdQfj1gR2NBaE1MOjtwOz55cjs3JFUoNSkzO0lJWjdDQmk2Z3J6UmE+PSM7QXlFVkI1T1Y+'@;
put 'S0x1emlCcVUrVipXQn4xR1BObzl6PDQybVR9UztDQ2BAMEw+OkB6JXlHNlc7Ll0uPExkTiEpfWl1QlZXNGkkcnBsZ11zOTIxcWA5PzgpY0VmWl5aMiZOKVZBInV7cnUzYzdFNnIhLzokWU5UOE48PkVNRSl2RkdJIT1mLjQhNSVMfHhBMkl3NWxwTj9QeTleVms9azlvbm09bExQQGNAR0VGciRX'@;
put 'TmNPMHcvSnk6aUNLRlJrXSFhaCopOSEqU1ZbUDp4TFIiMWUjQkpBTHR0NjtuW1NNOylndkozblM1P1koSmJIUC5CLE5XbXtPI1s4ODErWilFNnRMWWRHaEdQLyx6VTE9Rz5Hdkl1eWA0XW9PKHs4Sks4dEs8NGFLYCEsJD1EQEZSbUJ8NCtYUUF8LDMqPmxgOWF0bjlDPWk4fDNsKFUhTCtqQ29L'@;
put 'OFFxXXRUS05jaUBhQD8rLyRoLj54cHhhc3JGcXxjSVIxIVJTPiJQI1s8L21tcEJoTWoqaFd+OTJhakNEY1JPSjE8dFdLIXVgb3g2czIoME1pRzIyZEpIR2NALDklek9MVFYqZjxuKFJzbnNFXUZSNFBkbzE5aXolPXhOPylmcywvZDZbJkg2ZXtfU1QoZ0RBcntodSs6Y0hwd2dPZStfKyt2dWJz'@;
put 'VkVjUEx5WX4mR1crRkV9T3dNLjB8aD5nfWBob1l6bXN1KHJaK28hMHVRNE4hTklQWDpbMFtKPUMuRUl7WSltN2hRdFpbQl5ieDFYXk5IVj0/b3Z0dUMlIX4wTSxUKzJ+fmsuWX1ZeV84MVVOfENANEdmUXh8TTNiQFk/N35gMjlpdiUqND8/a2hAaixORyZlcVlnYWYlWyk/PDxRYWVFKT9bdnZn'@;
put 'S1pyS1FVLGBRMVBwJGtQVD5gSmp0Uj5eZnlaaUdZRUF0LE42eE1bLjhQdVVmZ09UN1VOaUF5aTw+LyZsanVoQHdbYU5MY358JkVjblZ7TF5RcUxARn1FJHgwN3YhQSRRSCZAZl1RJHExen5RMHFZaEteRlMqakVyMjtDMmUvVTIpPGpFIS9kclN6Xk5iSjQsSHBVZHhoLz4rdlRdam5femJBOU13'@;
put 'P1dEUGV0blYqdShYVURfeXgrM11yW2RUVzhnZSlpOWdRLjVQOWFNPiNKSTdhcmM0TEBBeyJ0Li96fW45Qko7amxmQmwsNlFIWCVddl5ZS0pUPDtQe2R9Iy82TSNkNl9hXUprWW9PdVJ4aUk3c2YodnM9IkZreTgzXTNMaTxCcH1aSTNjSnh8VlZJNipVL1s1Nkk5eHdOe2VfYy5BWSJWSClXUXxC'@;
put 'XSx9PElCeH4wMXB5Il19dyZCc2hYTnk0ZTM3ZVFockNnNkdLJkYuS2U/fDclWisqcG9FPFB0b1lJTjJYPD08QnpKV2AxbC9iTFc0K3VBWD5NZElmOz9uMFpXR1l2Z151I3ZgP3dMNGhecyxheChWWjpYXVN3bCZdeT9EfUNxaCxkbHUuYS8vRmJadClpS3cuJEhEXntJXy5QPTM1WG5vZFRoRihL'@;
put 'MTNKKWtUP1dISEsya2Fofm1GdGR2Vkk3PSR+SSg1UVt+dF1bR0AlMkNKLio2YFo+ZG9lOSxdYz5deHp9bSxvPj9wMz8rZyZMdFQuL349PVYhdzJ7b3JEalRiSzB5fmJMVSpHfWRiakRadjQ1S0xVXmJha0FlMGcickBWOWRQRyMrUEpENWRvYChbbz5EK3FLNHdLbFQpYU1KL2dmNUVzXVdIISNk'@;
put 'WXkmJGJ7KUE6OHNZRTo6dE9+K1hZZSg/T0dUKFVQfGplfGNRUXcpNW5deXVPdyFUYX14I0xnQ1FTNSFtbUAkTTIiRnJNcW8sVG0ka3RRO3dkc1NSdTBfamxdIWx1UlJlR3BIUmM5cjVhXzMpXjZkPW5vaT1WeFIkdlY4PUZga2Q+PWZyW11iNDtARGUrPD4vK3BkQC55VzNZX29lPDgwfExDfTlk'@;
put 'dytbQlR8bUR7QmM/e3tzUkhNUi5CTEhwJm1mSm4mRS4mR3okaXVyUHN0flsmeFp0eXY9WXMuWnhtalhvK3FiTE93c0NmdUlhPCh6antiWmNhTnAuSmc4JlZsIkNBNDs5NkdZNWYkLHh0ZiVaY0AlOiRYOCYkOWN8JTJaT01pUyVpK29ZeDMiNF5WYi8rcjRIenxzZmVRdWVtWFVFa31nM2V3ZGlD'@;
put 'K0tCaStXeG1IZlJoZSImVDdTXW98NHBUIUI3V3U7Q3Y+V3ZmdHZAOlB9ZlRjeWgiVFdHRmpgXil5OFV5cW5aSlBfZW8oUXluNyQ2OyQrIT9lcm5OeU1VYCVeOTskYC9TKDdrZTpMfD9DIlJ0KSIzOmBodzxFWDh6Y3NfZT9FaShjcDljJVNbempFWXh5fDBMdSE4cDU+dHAzImNaVVllZjJwYjEq'@;
put 'XTQqQilFNXNPUilDX0xJTUhyP3dIZm16eXxTXj5zXkBQX0lhbXpaOzVtI250XzEkdWxYdVp6KHRmK3tJSThxX28zLkpYWyZFV3VlTXpfZ29HPEBFUTVqZUYsX2kjZ1h5KDY1MXQjaytCUzVrZCNqO1t2biEwVUMmUzBSVTQ1PDlgZ01sR3VaRHFjMik0OShbUT0zV0ZoK3RpdGZ+d35bcD93UGtT'@;
put 'PTdIXV9PQlJXRHchRlhEYX1tWnNUXX1PMTZ2Y2YhVCwsIWV8JTBoYFhJKil4YjdNbGhTRTh1Riw0IzhBOmlNO2JbV2xLPUBwNllyfV1KTVtNYjk4TjJlW3VCREFIVDxWYWhKfTcrenRXUHApaGRoLixUbWtETktyVSI6eCRKcWBNXWl1QGBbTzJ1TCx4REQxayZLTGMoPS5CRGRXVUxTLiVuVGZ4'@;
put 'O1p7cDt9SnghWW0iNU5wRChZPj9oeE9YbzhMUjE3Tmc1ayNpInEheH5qWW9mJTdfdSJjcHlLPml0PVEqNXU9aXNkb19yO3lIQVI9SXNfdktHLnptIW5zbnlRWzdwNiN2R2BEdTNBQUZuZzNSaFBtbVNhR3csRFBsais7bCNjTklRL3QpZ3dBPVBALjB9cWpgJGpvIjNXLmJkejFQIyhCOT1Rem9C'@;
put 'KGc5JC5ecDUuW1V1KHx6ZW9AYksufSpPJGZxOSlRYSZkfXhEKyEuIzNPZ1p6VDhpIVZKX0k1KnUldzsyelRyLGxsRiMqb2daYmEuYjRpNUtDKCxfelF+Iy9eTUVfXVZXaDpsI3I/KzUuQT5fNSIqfFgwME11YDUlfDk+U1lqeE8kV3YxZkp9QywzdFB3bD0vfGM8Q0h8QDwjMHptVit5QVZPPlBz'@;
put 'T0g2LEFPajNIUVVCP2siVzNbUWBfL1A9P3kyQEF+YThBcFg4WT1ROkhVTkA8ImIzajR1cW83TC4uUTRES3x+bEVNWTZ3YjRtMTo7NyJFTXtddVZrbUhjTX1ZSTpGJkx+Q15eLGErMElteG04Vm1XVng9M3FGM20uKiVBRXBJWzMpYExNSFhIaDFpRT9jR311XV8hVyR9Y29gLnYsMWxFaW9uT09D'@;
put 'cTVuMX4+PmAld1A9Z3Q/ZGxebmV+cXBLQkwoQj8lZn4+dlBxPzhZeWlHSHlkR2hCTCkwVCk8RUFFZXh1NHQuNFNjUmNxJCRrIy92NUZCYUpUNlcuRztpaVU5ezQqLyxkISshJDl6KGJDdDh4e2A5UmlGdzNpODQybylaSENRd0k2PToxeGhPb2RndEReYDJCJTAoVHkjaUJQKmxPUix0QiZbRHRZ'@;
put 'UHJgKVR0LzA+KVk3NDpMaixuM1h7Kk4uSS45Sz5GaDR8ZV1rbWVsRzRjcEw8c086SUdFSC56ZVh1ZFNqMTU+NkksNEl3ODpCVFs7T0lFMUJ5OTVAbmlDQ00mfDZSM3dITW81MEtYPmUxQkRZOD4iJkNZcUNCIyNDfUZUNG9AOEwzdCVBSjxUQVV2IW87SC40cVYlamUhbW5Kd2B9RjE4OTkyVClQ'@;
put 'T1E8YVJlITchP05wWlghNFs+dTBMMnUlQ0kleiVmUkA5KkFOc1dWQXojMGpKMSVDQGYhOjUmKF1ZbWlKMWlOe3tHVlBUTyV9KUQ9XkxAfHB6JWQzKDp2eX1SU1RBJiFac0h+JGVnYiF6T3NQIWV0QDlPRmxMQlk+aCx4UVorPE09WnxYMUs0aGZabjt0eTkzSX5PTWA/RD5ZfEpjWUUpWGJSe2Jq'@;
put 'aURJaG1qKG1vRXtPXVlrZG5CWjFLOnhDTExyUEBFdDc+WHQ2eWpNQWVDdHhdWnciUFBDQltffTh3eWpTd1V+YUJRYzVHI11oU3RtR2JUNkp+UlA1N1FPRl1yJjtpWWBncm8yMFppVCN8Y3QiMWZXKUEuSz1wdFo0SHZLTSI8R057KlRzRWpxJShuaWxTTnckMG1kPlhrMz0xTWNeRVhtOFQkXTM+'@;
put 'WEAmVU1udTF1NFIpOlQhRyZFd0thRSkiT2ZCNzB2QUBMTEhWU2xsUyRwXkYuaSw8cjA9bmkyXTM+YWx4Kmk1czxaPzIpXShub01dSFlrS2I0OnMjaSpXZFF4MGlram0hLmU/RHI+fUVVeC58fnsye01iJWRzUj5HXipnaCU2OTc2L21VJiE1cjhQIVpOWlhvLixuXklVPU9EYzxoT09CVjFeTW0w'@;
put 'QHlDLFh7MFkkTSVbMUJTbF1VLnA0TnJ6NSFyRmZufl5QS25KSmA4ODFYNSx7bFA5ITJrM1NeajxGT2RMZGBiZytCYyssdTp4PX1yeilISExJLjcsR194aEo4ZlU0JEppWE5FXzZzTmdqSjxyRiRjYiV5MFFkfShWLjFlY1k+NGxqM0VSPjZ8RFsuNFkxYTlLXU1TVERtL1lDUCJ4aXVOck82PiUl'@;
put 'fl9OSlZTSUdlVXttKEphXSp6YCE7aT5ZK1RhMTI/P1FeZWVpSDRNIXYuZFU3aXQ7eVEyS3ZeN3VETWxHLlMmVHxMemhYTmUxeDMrayFeUHswMDF3OHs9YW1sJVJxaUxnKkM8eVJjPjhUdEYuNWhmQUNqdzEyQzN3ejVjYXA7eT5haHNpTHxwZVIuLzVuVllAQkQ3WzNXbkFFV3AmRUV9NTUrZCxT'@;
put 'QEIxLkkmWDQ+UXdbaXpHblJDfkc2NTZJcn1BciUpW05jLn4udmo4MDhiM0M/R2hWMn4hT3ReW0Z2cmBnVmBlNXEzI1lGPTR9KUNkfDoscG5CaTV2bn4oS1A3YGxPeUlgIkt7TXhtNHcsPmVJVVdGTE8pOD5gVl1weyZuISVRNCZ5JGB1QEs+TTdHYXxrbiN1Vl9ZLzlWcFtvS1FVTzBGWyE7PTo0'@;
put 'WzxESCVNM1svdDQkN1ZUIWNPNV0sfDR8Y1pAfSp2TlhFQVUsRnYvbFZSa2d3WHFMSElTW3RzTWhgMUwxLzRUOStwa1gyNjA6KWVnISVBWUUlJnRzfkkyJmsrKi5QSEJOO0t+SjxffD5TNyRPVz9tVzx9UzUlPEp3TC5KbSRyVGdXbSRMO1coOF9xW25uZkRsLF12cmZKaXc1Wisua24pTDpWWUh4'@;
put 'RDNba3YrLl8xWEdkRixMaGg1K2V1Q2JZKFljZHhKbUddO29wQHo4MiZNeHo0ND4mez8sJj4mWH41QmBLP097RGZsQHY5P28vVWNPR2tWRCpwSXZwVEBKK10hYUV6aEk0TTRgam1UNEwwNlhdRzYibmJlaE5xUFAlajtbdUI0alUoRGFLW25Gd3N0cXBALGtqayZlISFZN0VJR0VxU0Y4W11UbUZ0'@;
put 'VzlbWyEqbkA4c2poOjVzVVcydllacEtMcTsiQFp8UkhPVHpHI3RYbV1RPT99QGRWPltxeFhFd3BtLih8cWs7IVdXNTQoUml9K0U9I1l8NmJtSzpKVSRlYk9HVmxHTlhnQnBXJnk5SElLVTF9fGNHTz9yL19vMkI4UiUrMyo/bn1ePmV2R35zcl5xMkksamYxTkdJYU8vL040RXA4WD9tSXcmfDVG'@;
put 'aSQxXytsUD4rZElYTGhqeUZJKUJAWXgrfGtYd1hiLiM2RzsjR2J9PVkqNnljTyV5eGh0ajQ2d0hoQy9EeUgyVjJzW3tTd2BrL0UpIXtZW0JJL09dW2RjNVosUzxZSEJNPiFASjJ5JSVSTHo+KjomQFAydkYraFZYaEZ0XSR+RytZTDN3WUNqNWFCLHYkZC9kcnZpMGs7VktSU1UvJipNcDhPKjVW'@;
put 'N1MuVitmckZ8fSE2Ond2MytlQiRHSlQ6NyJJIlNPMlk5SDczZGhjOVcwZGV3PWgvcnRfSCs3bjFIYVk6YD9tP0J6RW4oI2xdS3Y2PExlZiQmRTxtXlcwQSR6aXBYd3NYREN1bmNZfk1Rc2VPLzpYW1tbckRkfH4jfEx2SjNAfD9QUjthXkJ4OzZxaV8pV1FGZnN9c1ZKRmxWdnJZVnJfKnVKUlk8'@;
put 'IzdkbS5eMjUmMkBRcFtEYElnMGVIVlgoUDA5TVUjbkVtMj16LE4+O1t2UDN1OHRHUTRpbTpRPntrWF1Ma2ZIJnBDKGhpKWd7Sy8uZiVyLHJIe2o/QXU9OSkrIjNxZXsre2R4K2RfOVp1T1UyKUJAeFB2P2AoeFddPDMpfil7ZGZWckpoeF5TLHMzM2owN0B2dHdaU25yS1Rba2Q8fkZgR11zR1Z6'@;
put 'Zz1pLGp8bmZpODp6MmNRenc+RGlXLHA2K2ZPZDpyZyl+MUpiVlRoTzwqWk1Aa2lbRyR9NHR2eH4qbmB1Mm4+Tj1PYzU+VWt+RFBzLjFaXTNFQCN8K0BLKDxVUiVHbFpdbHN4PUppRmM7JiJuTjhZIl5IeG9jflBocDVXYjg9cDhCLDo+PkI3bTxodnp9PUQ9VCx3fmhDaU1ubXhvc0luYj9zfm85'@;
put 'OXk7bUVyQW11SEdxOnhAOSJOWUYiWlMxKVk+JTghU1pBSzgwUmkqYW5zZS5JKkFyMEJqMT9MSiwsQzR+aTJ2Sy4xRm0qcHJZcj9mUjpeTDE2d3IrcUhnfW8+LEglQT5rMCpWKlAkZkx9fm9ET1t6MyVgM2YkKTlMNFdRYzFoY016TmpZfS5NZkdKUzIySCZUPUs+fWN1L2tdNFM2YUV3di9VK0Vm'@;
put 'XXErXjR+ciNzSGZIRUE9SlVnUUNWKEEidFVtaD9pcks/NV0vK11ddyNndy5GSTdBR0wsJWk0PkdvaSUzRk5bczFCPj8kXSZrW18oJCxvW1ooUHg7dDJudkQxOXVeUnkkKH1iZltKZnt1Ok16NkdIMDE4Nk5TO1U8LnVDb1FsKUU0JWA3UzhfPzNtNV8uKz9DJlE7KTg2OiJyLGRlbzdwMH4sWS5n'@;
put 'S2koM1duKy57aVh4bkhpQlhYTnV7ZTQrOmQ9SXtXT3FfWHV7PE5kW3NUaX1rZ0NdXSNCMjhET3VMaSJCKmgkYX1NX1QyRmJIeDgyO3JtQGFUIyxtJUAwLjIkOWRVQUc2aTJPQCR9Lm9RSH5BJlFjTUJKZUlbLz5kUF14bVJlO10+OShGeiNvLnQmb29KQi9nRj4jcV5XZWlEX1V7VyUhWD9LbS9P'@;
put 'cC9OKT5UR30wNVRhMGBRK0BTJChAUXg7KndCVihzQGYvJHYyTk5sa1FUekYjd3xFRkNvcTs0VFY3Tk18ZXxtR0xVJXtwZnViLykqWnQ5dWNqNWBVbWVxM205b0o/Uk55Nz42bzQqWlQzOkoxWjV7clJ7cH54ZGZeUXVyd2EsN2BDNk87Pj18LD5gJUdFPmpkLHNMflpOJDFZVlQ5bEd5aSghOUw9'@;
put 'NlJKMXwwRmJ4YD5kNDUxdD4yU1deMWpDeDRld1l2MTg5Wj4vfnQlfVA7YzAuPjJzQVRLa2RfPENPfFk+I2BJSC4xKSk5eXRSaTA7UFhwL0lbNTB0Ik03ZnZtQTd6KjIrYXwsalM3T2I3KF8mXWQ2Wm09K1ZyR3BYSHd7ZEo8XXVNaXFqT2ZDWFlAfjlTY1tqfksoNTQ5JUhfLFFseSVifDpDZDVP'@;
put 'XyYpbzVBQGwxVF12UWZ2P1tuMDtyNzNsWUFzaWMvTUQqKW1Vd3hKbkIpbDsuTD99fjc6bSF5Nzt8Jk89bD9gbHhSJmdHMHArP2JWKSJdcCNDYmY6bjdfXSZsPX54PjR3PUNPY2tvaHBCWlFKfjVyPjhGZ31tPzFQakNEQHlGSF9GVCk5aSZ5YmdpWy8yO3soQ2UpWVorMTJWQiZYZyl6OTNfVVR2'@;
put 'eDJGYSMpKDJub1Y8JnhCWkp6RHZDZnUoTCk/bGlCVmI3JjFeMDBKe3k9W012OiQibH4qYWl7NH1Dd1ZlSylGbEJ7JHx4UzQjKXxzYi40a1krIzkleShaR3hXcnUwNHRFVGVwTmd0Q1d2KFN7aXooK083MEcsU189OyFjUDFaRSVrN25mSmdeMHpocGR0aSNEUXxAZ1dCVUh5a0Z6STgjSnRPYmF3'@;
put 'RE9NamFGLFh9JDlKM3pONC8qL1BjO1RCVWJiJEs7RU49TlciOiRqR3RzdHsoXTY3ZzNZVUg8PXVBaENJd3ZtYz0+ITU2bzxieF0zVUplL1tLaHtJZldnSndWXnNOYSEjVlpyOmY0TVduLGVKdkZFWH52d3d9VzJndntdejE3JSlZdilmcVdaKlIseXRMJTwsODgsVV1yNF8wX1gqXiQ6e3wwXlpv'@;
put 'fjEzbWtXU1FCW2o1dyg/dzJOayRneWJnRSx2bilOQEU0KXRZSkVCQT9UPT4kRnMvPzFOW0soO28/KXpfTUYvJFVoUDhtOVgrX2MvZUAxNiRDc1kwb18mSUNqLGg/UnZEZ1E/JXtDJTdOdWF6WGdYelM1b2MzNUQhWGY7OH5GMTBNYE8qOjohViU5bS57RiRnViZMR3JbLlJOOzd0VEJgczZVV25G'@;
put 'XStWTSx7cF9hSj5TMG88N3thdWVnbDI3Q2VvQj5EWm5ATE1CfT93UGs+RDh2JlYhfSloSkg/dVBBZnZRVGhZXzF2Kzl8bUlzfUdrVy56MzdPbCUvITxkXjo8WDUqcyNANGxkJSFzRC5aSW1ZM3tSJFpXU3I2T1JnLGpdIiFWJTVQVylndDVfNUFPOkZbKyFxUFIhPXJTNjoubWg2TiRJfSspODFq'@;
put 'R3JXd1hIflsjL0o5QCtBYS9TRn5XV0RNM11URk4oUSEoYkB2SXxWUzsvdm9WX35YeitkRDw1WXZ2TWU+XilGLCVMVz81OTR9Ky4jYEs3WWB5UFt8XjZmMDBoMjVMZk0yW3d1ZjFIUWhdZmlkJDtRODU9YDVmZko0WzRIMXFjNHRuPjQxNVVuYGpufSFgeElOSXVLNyRBKyN0VTl2YTQxZUx0dyx7'@;
put 'aU5wK2RwSC8zQE8udGJDKjN0YVJsZl1Ee30lKi9BLjojJV0iOVN0YygqKDw4cDt5fEkxQGU4SXNCVU5Ed1FuSGBxN0B4SF4uXWBZbSs5TCV1UV9TJTpYckM6VDklWjQ3MilTcFZbZUcvOFU8ODxNd3tOI0lJLGVlUEQwZXlCaXFUfCtiJXtiZ3UvISxfZTVCejI9RlZlSHZPS35uYTpUNUQhfFNW'@;
put 'SSpScjFjRzwhODpbQS84OVcifDM6dnlFcX4jens1YC5Bd2Z2MkYqVHpjSWpxfEpbWXV9Qlo8VGlrKywlbmd7bE1qIzpQZkAhO2VRZjQvOCE/YjJWZ0NyWGt1PlJdaj82eCZ9MGZVXnBTeFp6LHBWUEM7PnFMPTlDfkN6YiZgamU4S0RiPWg7RS5dZD9SZmoxe1B3SEhrVlNVekZnJmo/IW9XTXN3'@;
put 'O3tCY2R9NX0jNmRrKkJtczYhcUB9TGxQbyR2Q3UuLDN+QGwpcDlpXj40OmNmPDA8ejp4QipkVnJPcGR5Yyk1Mkd0N3x9OXdyPz1iPEVzWUhSWGU3RCF0WTRoJlpVO1hQaGA2ejtNOHpgOTREJko6MWw+azwhM21vWVMhVjIuPFtLeWAzOUh1dmQleDxCLHJ6OCIuWHtbOlVCKm8pJiQ5ejgjfEpw'@;
put 'enJ8QzxQKFIkY2ZNcEw7YUdVO1ViOStmL1kzeEN1SU9MMjNaM2tNWVsuaSsiej8sZHhva1szM1g9ZkI+TFghMUM5WlFBKUEsbHFWQnw4LjBycVJgR2c1aHpRXUNBXndXX1lfYDM8Qjt6K2MyfVYwKlliSz18YlVIK0g+JVolVz9WMm5ZaXpyaG5DWmoha0FxXXVmbit1M3ApeyFZR1FVeEtsb2JP'@;
put 'TmUsdG40e3lZcmRjMjZ9UGUmRSI3YEJmRSUwVD0wXnNGfGNbSGZIRGNPfTE9eDZ9a2BqWGZuSGZFTDlkMFpPbDgoXTJtNnFOWmY6fEhDOnE5YTpObCNnLGNmaCMmLDZfI1IuKWxfaWgyVzwyNipUdmQsd21ZJUN8UUxAXjZAU1lWYE8sTWkuM3swTUdjT1hAfGUzWFh3WDE1aChUTz19N2IzbUVl'@;
put 'RG9sJlNvLnxeMlQqYyRSMDE7Zz5nLkNbT0tmPih6M2BWJCluem5HPHxDITI4PWs7VEJTPS42ez0mOThvOFQ2bm9LNUNxPjRyOFRqOCNJUS9Uc2BKbFREbSJ3OE9YbmBHKzxoL109elNiYj9XKW4jaWl3TSUyMm4laXFVZSZ+M0pkZDpZfkJbNUJndnZAOk1JQExJM1BSbG1WcEgxU1s+bn5uOig8'@;
put 'bjA8N1d8bjtUc2JmNCppd0xJUkJbK3JUQDolKXB0YlFUfkw/QDM9L1txW1AlalFgWyplOCwmZ35XR2NBVmJVdWd7WzUvcm1fOF9AdT9aOykwdihdNDFFJWtmYFloYT9IMykhJXc8VCFuaD8kKWkqW1AsWjZWdFlxRDNIWTh+b3NUaH0/WFl7TzpvbHdEQWZmVmV2Ry4kdmA/Jko0V0REL1FaQ0NE'@;
put 'NStHfEwocnpgRkNXPmZDYUVbNUVUZ29rJkB+VkV2aVNud2YyfHMxNyhmMFBeXz16L0gyLyJNQGBHX0AxLzh5W0EveVAwW0VzNy9jUnkwWWh6VUtwVV1icEdjWU9fLk10OnxzQDBQU1duYDg9IlhfZncmeXhXT0AlTiVmbHwrelQ7cmlAdGNMWzc6IUp3MHwvK21wdjhiZWgsMUNmTEY9dmI1IzdU'@;
put 'by4pJGdMeztURG1CK3slZ2IpMkFLKjIhbl9aR0IyRndbVGVIRSgyZWtaUF4wQHxrUm82JXVXLFVzbT17VjtPR1VYeFE9Mm9HZG92Tl07MXFNVnZYNG97SSgkMn5qYT9mVnhjIU1tRyVHbnA+NlAxRE0vTUkrbmx+MWxOI3ZbfH47ZTNEPDpUfmtJVUlFUz0zenkwZUhpZWsjNm40SVhHMnF5VylN'@;
put 'V11+O15sR3sxY0liRT5oLnhvblBYM2VgQDVXKmd6PF1OW253UTI0Slg8X1k7OyolTyM4ZVdOMEwvPTBtMHAuYyhJOy44JWNuZHB4YCNXT1hoR0U8UTt+YCF4RURyfVFralpufkgxc35LZl8hIzs5Zi99NTk7bUVlXnRJQiU6YyE9YDtVSnhrSSZYcnl5UE9DOjlGfWtZYndFVE8xZWY+M00sLlos'@;
put 'K2kwLiFJTjI5Ym1rXzh7YiQ6NV5VTD02aj5oYShndnQrYlRoZHM8dGJUZ0w0SG5Wcn0lSzs0P1hMTEhyMXFWbXUpbmkoN1c3JT5KeGAqUGYySVtoY2ouM11tZ1JbKVpCcEQ3Vy51bE1oL2VQeFRkPXxOS3FibTU0MEVNYnhNKy9pQyFLciteTzxIUEZSLixGVCU6TSt6TT1JclI/ZEoqVCN1dmpK'@;
put 'ey5oZHMvL0l0KTk9SHV4Ry9VRURyMENkdXFtVltAeWUufDw2NCpZQVZCI1R0SS5TNWFvbSlPSUcxMX1RWkNnZ0VBN3ZFa0NpWyhnS3IuUV5SJk0iIT97fjlKZXloe3w3NTUuYiJoK1A9OnlFSjZIe0FkQW80Qyk3bmQpOX0pL2lgVkc3bSRaLmVOZ2BYKzhlcDBvI3VsckplS0pNNDx3MnlPMzF5'@;
put 'aS55cnxfVnY9NEoyS3hvR3RddkhNVyVKR3M8cXIzMWc1O08+ZT4+RmZfdUc+WjwkVV91OWBRPm5jQEZOIXw5VWY7VTwycHQydCouW29qc2xIfHBoaCREM3Z3bmtiVF49Wi9tY2xmODRHNz1DTTEvfktuLy5jKEkmXmUzQkg5YntWRCo7a3lvL2lSaEMhVmhYVGtSMG9TSVBtQiRwaTo7ajFlZGlH'@;
put 'bkNjZD06eChjNy88UUswNVBsJl4+KFtqPzVJJExCaD1rYXVWTFhefE9YJitpT1VhbGk4Vk9qV0AyPXNxKC9aeTUyQ3IzbzQxUTxVc0E3aUtBTmwyOTdtTGV3IStnO01NVCh8QEN3JDFySzsxeXo2QHk2QkZYU2A/alpeSj1bfj9fQ013NEtzejdIYWA6QUoqcElGSn5YO1VkMn5tVWM7Yyk5cjVg'@;
put 'UT5wd3NlQ2lEcHNxJUkuPWcjNkQhb08qezBndHsqZCpXO1Q+MT5aZiY/N0BWZyolNTlSdHJ9XSs/Oi9tSzVoOks+Xnt7VzkubSpmelt2JjU6NVtdbyg8MHU2ZSIhaytlbmNBYzAmQD9DMkdKRTFWdHs8cT9nUXUwN0c6b2w5LDxsTDp0KVdWOT9QK0tyeHtsJHBjUmouUC8uPTddMHg9dmVEXTQ+'@;
put 'REB1TzdXUC4penNhRGVGbCoqZzNwbkVTN3YqKms1MyF7cTVaWSImM0JVPjszKm9gS35yfWddemg2R2sjPW4oJnFYSGxvUGdjPDBmWDUmci8jR2Z+TTgvM182bkJmcztHc24hJWlHfilOT2AyZWt4T1JVUEUzNnA7cShoRFFEcW0qR2RQYlVdMFN9fnVQTWIxRmVFSXhPRz0jaCUsN3EsM1oyX1Jy'@;
put 'V2tWbFE4cV42cVVdWyokS3ZBITYyY29jNzU1QDJwb3JASkh1PUl9T101e2xCNlkhNz1CQygoJSo5fG1jSzZhb0Nbem57QFliaWxNLl1QLz45Oj92ZCxvN21hVEgvZnkjKGxGMl9fNHU7NEljY0ZJQUdlaj1ZKmNuT1YsZCRhYUAuSVpFe3lIOGBTUz80fj1VYU8lZ3FqKylWa2NyaGtbekkxa0x9'@;
put 'UFN7OXBsajNzdDBiTyhaaWFARWtrQGZJW2M4YFFKcUVMNU9NMEhzWF1DVk1VM3ZyM18sXWAwcGV9XWpLJmBdKnUjSzhVcnR6RyVQO0N7W0BKcD86Izk3K15UOS5KZChxZ2FjfEc2VF42MGxSP1Y7VFJnfDAvMlZRZD8uSllWKitpcVE+Jkx3fjB3OV1beTJWXzR6OC44S2twTDMkNkxvW3lwPD95'@;
put 'aX1EVlhNRVRobzkwYFFtODk4SWFFfnVJLzdbT242UWV8MXhwQExCZylkVWVycWtZMFdVOzpWN2MidCU0SzdSQlBtbjZoc1pNOzI4aiVWO0d8dzE0R0pFSlpfc2IwVSVXU2Q5X19KaSp8QSVuJDNJO0VeUTJJamsrdEJAb0pvMXw8PyEhOi93bFJqfm5HSWB+ZnVQWGxMXnhobmBiMSJmQm0laG4x'@;
put 'azEvNjtVTjozPGcmW2wsLigoe1VSaDRJNzFxYFN1ZyVaPkE2cFJIPTFtKjNpSHs/aERHfWw6QGUmc14hYGB3UTNmdCZdUkV2ajpZKjlxOy5JM30hMSpqeGpLbj5iOW1tYlZKY3csXmx7RDldPFNqbV13PDU2OkZ6PGc3Lzx+VVNUJVZXQn1xNmU8N3g7LyE6Wz9MY0FXVmZkYiN8eHhMMDFISko2'@;
put 'NmlIN0dhO1RfUjFqbXMmblomZ3gjZmUubTFAYmhaLGQrLGooclY7YSRyMS97Q306UjMxZ2hpLHpZdylhUGhgelI4eFZJdHVLbmJOUV0ibSNSKFkpfUdeNFJwfjtFdTFJcFNKUXZWald5ODZXK0hebDB9eTtHNDN0dEcqUkskaDN6Ykd+Rzd3RjU/XXUjfDRpKG1JZz0wQER9PH1YckJnUHNrSzV7'@;
put 'bjxhamBMPiMzWXI7NEE5RGYmIlY5K24pTSsvWXA8SGxqJEh0WypRQiNAblErWTApRnwlUU84PjpeKjhedkIxZCgmREJPU2p8cHcuP31AUl9+aCxOfmc0NkYqKiI2PSJublJXayQqTSN5dXw2PXxSKyNVNlZEPCZPfUtHVzl0R05NL20qZSkkckMoIlBlVjh4TlFKXV1JckNlZHUqaGRiYjlJJncx'@;
put 'Z3gjODNsWHBWaC9vSldjIikhVyp8KjBqLzM8LnleYHBaeUh9I1pIe2U1Ln43dC5dX1FHeEVEVj9wKkFHWDhbKzcoNmV1aWMmKyo2IyN6eDxZYWRhMVJEWEdBMl56YThobyxpcWQzL2B0bCwweiVEVH5yYlMjJU5KLH1gaWtiJlN5VHVXNSJmR1dFZ00hZixUTzFVX3khPXVHOmA3WypXX1k5cSIx'@;
put 'O2pRLD9MIT1KNkpjKiokWCw6MkVaUD9teSFeOiRtWkc9ZVRUJmBaeTdOSUZYdXp4bVQpZXo8NCFXYEl3fVdobX5lKCNsdXAuVVA/Z3dyayFAI3Q7MHl5JnR9UWYwJCM7ZWB5UE1xX0cmfFZZdE57bT4lPW5oJmg4NXprOGVFclNXOCl3RDY/M0JkNVZDfH19Sj5laXVFan1IR3dac1N2W31UelUm'@;
put 'X0s+WFYxN21ZWzU+OmhXITEvQllbUFcjfD9hPnFINlp3KjklSyIyejg1PCFWNFtQJSkydnVvJSwrIkQrdiQwQU59dCppVndhXSssKjM+cF07T0BUUmM3KCE8cGdsU15+Z3gjPEhKYUJnNiE4ViJsYlYwOWJte2N4eiIuJCxPJWJmJU9HbGZofElQRyN4IjwpbnJQO0IhITtsTUJMbExlQzsqNU1s'@;
put 'Zn15US8/VzkkWEhDa00jV3d4SUF7NVs2PEkrUTBbRklyLD94dHFUVCFZKTY7P19tfUAqI1N7P1Z0b2NIXyx8MXtaelUkRH5ALFYqKHJOe0AjNnkrOzpTLExvOVRld2gyTlN8cSEqKnNzMXo/MC8zLHlMUEZRbi4/PSFbJXJRbmx5N3daTkYsSHdreE1vK1tSQUBSelM9Jj9+PTR6IlRrX19ddihT'@;
put 'eExdfV1FXVphPD0+ZX4rPXQ6SjAhfUpzZG4jSEFCYSJNNkJCdC9pd1VnMDZ4QitHOVkkXjxFOzRhbXtgLHZdV1FGcTA/QCYkSn1fNyw7LDE+eWIxYnJ4WyQxaE0xPztwXXk0cCYsUjIpaFl0RUNUMWRDR1IsfSE8dyN9aHlMUiZxcVdUIW1tM1tiIVd5Z2k9eElFZGk2RzoxZm9GVmNZO2pIS1g6'@;
put 'bm9BLF4jOEBwZjxYcVhhKTAoaGVeXXM9QTcpLlohImJrUFN4MT1uZm1mLEpZKlRpKHA5QlFgI3wiSlhFVW1xVl0yJSk0UkBPTXM6TWI7TzpxfXVRVW9qX1IlPiJ+bCMzcjYpaXB8cDVBXytSO2h9W2h2KURTfHUmJXM4ZGNfOmlBUD1Afm1NeHRtPmFkVn5aJil+NzViYWdFZWo+TiNJODBpIWhF'@;
put 'ZSVfUWg9IzxqajlpeDRyR2Z6aFZibVJ0bX11cylROjJxfCNWY3wqWWkuUkhDR1tnbT1Ib3I5ay5SKjh9I3NJQzwqKHJScDohRFc1YmxSJWZVNzpjVFd9X3k3TD0hal5HZUp6dFg8K3VzS1k/OjxEYGdTJSojZE4vKGNtIWt5ZzZSUWt3ODwwcTt3aEFffmA2JTwqa2VdbnNxSWM/W2l+fjsjKkws'@;
put 'dzleP31fPUVvSEVQXjh+XitSTDl1XS9QM2hYRk42K0g/VilOPVFbYSJaTmV6OFI+JEgqXjM6V0lDZSN9NTtDPVNSLGxkOmphRSY/QDF2cXh8QFM9ZWM1WSIyOEk2LCx1KX1KJTFkMHRScS5RK0l+NmlfP2dWYm1Sen5LSUQqW1IiOEdjT2FlRjpwfVtMVyhlUD9uJnwjYENlRDFnckp5OTRPYGpB'@;
put 'aDxpbzgvV094QDk4dis0SkYockxoUyhPekFdN0k0K0lIJXxzPSQqanJ0PS4qYXhVMX0vZCk4VXh0TUJBcER1YCtgSjEhVkJ5TV9ycWQvZjtTQXFwYDVfXl82UW5OZUgiTUc7eSRZPHE0TCYkSjVdTT5FN2dxLk48ZjdKaFI1PDRfM3xURDtiZGVUKGFLIXE4YnorN2MmZmNtbytlPGgvRzZ8b29g'@;
put 'dGcoWi9RIyw3O3BvYE1BWUFGP0hdQj80YmJ8bUBweTFbYDE9PXo4TzJmI1IhKn0kTz1bUFpwbF06O0A+N2Vzcm09O2YvNyxASnpVT1I7NXVsXVU3OTQmdyo5VEI7TzJfcFRDOj1RI3dZTVEzSV1TJEtXbzZFPklIPHE3bkw+MG08ZFBlPjdXSHw3RU5QZUphRXE9SnB6Yk1HITZAR0RubmF5V2sv'@;
put 'YGQzSXpeWVM2blEhS0ddMXdGbn4qIzZvb2l1dHRsJG9yNE1WK2laRyUkbXwuKyRBTjReWS5aJWRDJSskPVVaMkJEfWA4XjheODh4ZTNWdCsyPT9KWU5GKUsyWDBLISpNbylaWEpzKTdAbzNsJHkkIkBbZ3FUJWNbIyYlJlVqRlRQc01RYVBoJjl9Qyt3UV1gUGBZRDo8YW5oeX08dTdteGQ3P14y'@;
put 'bV9XUXZIaXhKSVA4LiQuJSQ5JFpHRDY6a0g4eU0xKWdMaCYpSno4R3Ake3U3MzN8KkpoMEtWSGR+bFNLdGkvYVdpfHlAS0w0MUd0VnBIaDVGbFY5MExTSFVkMVVzVVMxd3RVRD02V0tAeSM5PH00MCUrQC9UOXhsWF1Zfj09K1VUKlheU3RqIWhQc3RZNXklKlIrSXhbeiRTWik7Jn0iTj4xPVZa'@;
put 'Kys2RV5HUk5tfXptZXpGdUh3I3w2Jk9zJi9XajMxeyMqTHkucm5mJVBBS0J5dXZ0KSldRHNjW2slXVQ3ZX4lMjAlOEFAQW90VkV7WVElZl9uT297SFhnKGJQZTszWHlLKWpAcXpGSHVoTi5fVHppUWFWQy9jXi5zKSorcWtpS156RkwqTXlPbmROdm1FQDVSWUZiOGJpQDROL1E0WlosXTtQMzJI'@;
put 'WDJaOSFKY0tLekMrKC5ETWImIzJdJjYyPz9EXm84MzFrc3ZSeWc2VEdRSTxmaWU+Ml5JcnoxR1UjKnIsQ3k2ZTBMRHlaTTBOMTAuVml4UXp6OWw/c0swTU0oLDBSNiwwdXJwJCJna01tUjgxXXB1JSxVYUVgU3Y1QXM5bD1pLFhqR0s4fVpwJmNERztPSjReZyQyMlt8O04/ckpuQj50M1NfJUh6'@;
put 'LkU6Zil7OHNVRWZlOythUStKbzFsQiZOVUt3MnhNUUV8Q3FgNSZIfj5qcmg2M2R9MzlIcWtHaiZmOWN+N21ZWTB2JWJQUk5VVHk+ND05YzpZTTooJkRwcClKXXE4VSpmRz4rZ3EsaFBEfHZ6KCJVfHtmXXhsekdwLENyUiZsLGxnc1A7RFhQcWVmJDAxQXJwJDxoR0lidThvTlJJVDkoQSZreS9V'@;
put 'U1IjOH50b2o5YW89PDx1d1YuM0deYDRVeHRBQlNKOCVmRypyKmlgQUlQXTkofCw1RntHbThOaVE0e2hIPDkiW0FnKDQ4T0p2UDMvLDMmamZCKDRCM3piP0Boam84JUVIT3FCXSVqSjYoQCo9aDBHZVgzTyYlNWgren1wVGpYImduQ3VfeVVAMGlrdiFyWk14Oz1ob3laNiwsPENfUyVBc1F4ZzhL'@;
put 'Z1QoYUtRP15tWVkmSjV8U2ViT2diQHhZUjliR2Z+RU13aHBjTnplTiFKMTk1XnoiY2VMJHF7cDdheiMxeUVwMz04V2hgNi5iMSw1dyVrUiZNWU9iSkJyKlRFVy8yXSxDO09gOzA3ZFFFMVUicUlxPXkiOCQudklkZUk6Xz0wS0NAd0hue2ZdUERrW3gvTE45TjdhUVlkYiFjIlpfdTNaXnN8e3I3'@;
put 'VjlNMCorJiNIdmVaXntXbCp7YCxjUHpXPF1iPWBmXi5OaSZ7VGFhQCYuN1plSEduLi8vZipSLCkveXMsQnx4YypSQlp9U3A8JmI+bnlEUDBgLnU1eT9ZaXdTImx1X1JgVCtBcUImSGNtS105Zz0/eFQ2UWBaan47Xz41PCtHXy8rZ0U1MSlDemJgUUcjWnlneWFQTjMybUA/Q2tQKCVVaXo9XV1V'@;
put 'dlVgfD9pQTgjOjE1ZE9NKSVULzB0dE1LSihQOHR2ckFzKU1BX2k7eCo8eThWaWZDTUIycDBKVDEya1Y6I0tlSS9JOSxJRjo+LykvJTF+JiRIM1plSHl9PmByOipbM2QoZlcyS0VbdU5iT3Z5fjpiKm9TKT1TQjl7YzchJEZSb0x4V3VvOHIrWGFpWX5YcjF2dnwvZitzJCs4Yns3ZlUuM3AhWi9Y'@;
put 'NS9TemIxSDMiSmZoISNSX0Y0SldfeHNVV1A5RCpKR2ViYkhkLllITlR6JTFPUTBNfkglaT99SCE1MUN0VDprWX01ND9fRSoxe09NRVllPyUxZDAzJWs1NlkjIi9RQUN3N3RbSlg3fEVkeEZrMzVYViFZd2hWJlFgfW1YYHIrOm5Sak9PSmxVRTskJTxGPStnWnR6S0xsfWgsa34+WHRUNW1sPzZD'@;
put 'fjMsMSM+Z2k+JDJCVzhZcys4YzZdKDMjdVlyPkJDWEVAIzJmX0lATCUjMlVWNStxbyJbNXYvVSFxMyRBXyRAI3F7cHlQRmw0Xld3PysiY0lxVX5aUmk8dyU9UTkqIV1RXnFTO0htazs9SVVXI2kyXm8uW0xLRFMpM0pJQ1g8QFBubVhYJHN6diRPPTBtVVZWOSY7SDpFTC90WTV2b1BLOjhzUEk8'@;
put 'fntiekleeDhyYVEjdy4iTWZ9S286KTooPz5ePmZmV0MoaWsrJnxEbS9KdEpDbiVLIj9CPlh5IzpfYGckeSsyfkZ2fHlNZEt1biV3LixsRyN2LkhicUNLSk8hNV9IV3pwJmI7KD5KbWU7ak5tTWlySDlVN2ROI0JEZUI3NDEzWUMsOT50WikuLFR+WD50T2puOElXfGtQYmlaTzcxUDxaVl84TCE8'@;
put 'JXxrT3k4e1RZM3tBWDk2YU5pWU9oKTNIVlZpU3YvaV43S2c3Oz42dTw1QGJpdDRLKk0rZ0khI2p4PEtifWBmZmtRZnFQZXFwYWlLUXtSe08hbU1zOnxbP01kWGVVdjlaRms1cVJKWzc7WDkuM3BmN0JKTWF4JkdDVkxUZ2czaDZHIk4zR3pifkBfT20kaHhCJTskb2gwK3Z1SVBHdU0wdlEmWUUs'@;
put 'dTJtaFhdezVgWDx9e0lsPiJQVDVIZi4se1crVUsmPCZ3czFdVD4zRSEuPlVHQGElcHBDOFNsVjtIKmkmMTJuLjU0XWwmMG1sT3Uxb1NWdG02Y3dTWC49QXdTazhKR0gwSTdHaUlKMXR0Y1ZLNzh3UCkjRGxpWy5reSpyPVNYUy59dURlZzA7MCtUX0RvbHEmR15ZUlk6cmhTWyVjYXB3SipsbDpv'@;
put 'OF19UlBdfUZURDJ4ITs3VFlUeXRLdWxzMjJELlBUYXw6VzhSbXwmSy55YFRtVWV6Z2hTZi51ejBpZ2xFZT00a1IvSCE/JnBheXVtaHhDW2w6PyEvWSIwZ11KRjBiMGB3W3cuTVtANlYoU2xBcVF1bSpQcXZYcGBvUEMrTCtBUC9haV5ibkVlKnxwc2FAPz1xWEF8VXBLRVBDOkw0KkF6b2tbWG85'@;
put 'RVY0LyV7I3pgWF9hQT1CSVBHVWAjWUZTWzc6Qi5BKjNyJjpFYnlPTWYxTjZibFg3RzcoeGZ1QmtiOnN1U2tRWjE2Yjpnb0NsMWEoJSYpJFNoZC9lO3hRSVIoTk1rL2ZMZy90aGUmWWkrYTVaQ3NBIVlqSC96bCk5d01VUSx4S1UwNmxZRjlbakB4dTA3cEdAfDhTTSFtVT1uUCFPTkVNTHU/RWB2'@;
put 'VXU/OHRBKlN4aHc7XSxwLFNQOXFfZC8jSCFhaXMid34/X195SWkscSUlY3RHP0tdciExUkMzQDgsVno+PEZRUDFvIzI/Ljo8RUEwKCUpYUxiKFY+O0l7SzNnMn5wRUMiXz8hJmhwSGI0OCFHQFpOQlQ9I1YiUzticUdUUC55JXNRRSF9b1lhTTxoLytpKT0zOXwwbXkxb3gsbFtTKzpidX1UTmBH'@;
put 'anFnaStbeDJweGZSREp8KWlfP206UzYqcXh9JEZsQTc7O1FiM0UuI2c0I1d6L0IycjBWeWkmZ3pbWTQ2dlNjWTxASkswelNjK2EmS213Ry50NkgoNjtfe2tUJnZJYlFeN1hJflFFUjRHLCp3N2QyPG55dyE+RTRfRyU1M3IrUDBJbiZ+VWoiYVZTanxdJWohTTR9VnAmU313KUwvc0JFN006V2lD'@;
put 'Ul0wdGVLWVMzJmdZVHtgI0kiN1lSOG1CTXN8S0IiI2VSa2srZjlePDtgS04/QklBQjBNUStiSUVqOzszWWs3Nn4pS0EvPG04O3N5fTJbRCRDM3MsJX5FTGgrcyYlU3lBSGdad2MuI2wlZUxGbEdgUCMmIkZgJWBgZkBuLEB5Tns9dGFBc3ZibVtuOVQvem9rTDBVLyNEKkZAPyVgMWdwI0tAeGNJ'@;
put 'di8qK0shYmJ+KFdtTU96blc4a151bWxzM1h+eT9VbCYvMztsUTMpN2g4MWJOMyk2fHw9XyQ+ZCojPSJFYDZBQHJmQWJiJlQrSDt+U1p8R1dIZ0A6fnhKNHssUzVTbDFoPmFCdEtCT3Zyb3N8Iip7TDdSYj8/VSVALzlyR1s5bCpEdG48fTpbbF56OjFqWS5vaXVsJUFqMHMrJVtofnIoaDo5ciwp'@;
put 'bCllbnc0N3xlIjtjdGJTYG5yZXN8PStbUnRgQVJKUHMxNjk+eHt4KjBpOSNKbko0dF90NiojNzVQIzdkRUhVZEJ2PXw5YU8pbWM5UjFRUHpNJC5gZilsbH1vYGUuNTtKeWhVLF0/a0VlZGtIVzhwIlYqcXBmSllJcTRTbn0uMklHbXxrLC8jYFhybS84dzVeVSpvM1Z0UUB8NSxpYlR7OztifTc9'@;
put 'OGw7aUF7V1VffGN1fnR0dXt3dlRrNGRVPzUlQ2BLcVVYaEc6bFghQD1tcytHezhQW0VtTGlkcXR7cmJgJGp1KndDO0dDfnJ9fXE+K297LF4wTVYoYyslalBQfkR8P3ZRZDhbOHlzbDdkU1kqd286VG5hcWJlNTFFJWtld0Y6LlM8Xit9cnIkcXs9TlsrcXB6WXFiTzBvPzZDO3VoY0QkM3hLRDh3'@;
put 'fClTc35lOTl8YyVlOWRYYlRSNiI9bmAmQT5BRU1lTjA5fSkwYF8kYEN1S2xKdjsqMVBoem9lI3BUbCk3XUI5bHBoK0wmZjF+fHp6RHk5OGg+KHpwI0soQWUhXixkdiRWciE5QT0kd2lgXn5ZdT1WOExKYFZyPEAyfW5RVlNJZFhzQnBWSjNofSx4VCR2d2NoXSYjfiY/JTw9d3cjRkVqfXhsSE1a'@;
put 'MF5+ZT13dlM0STJ8XWwwWkJCbVJ7X0s3fm18aSo9akJYbl9wWX41Vlk9REBgYmVMcCZWTE1nLkZJJmxeb3FsPTx2ITtveUhhUmp1azV3aWQ4I2hiKnlMWj4hOWxiYjprengwSngjaDdMNmdHbVJGfEcreThNeTY1MVsiVEpmTXJJZm9Id0k8dlF6dypwUl97TCgyVmBSKUpdSjRJMnxebE1abVI+'@;
put 'PDNkUz4xJW0kfXk2QDtMNUt+P1J3YSFOOGVtez5JfStpMGpMdDNYb2t+WkJeSEVII3xXVSZrVWIqTHp5OWlqN2F0TEp0WXJVZEArazo9MWZMSVl3RShuMWtreFBHcGdFXz52OHA5ITAhcXBrKkhHaVYhKkl3WCErM305cDImM3VmcCw8cSUlT1ZqejhbOy41ZXJUNUVCWXZPdiYyKH5lMHBfclUp'@;
put 'VF8qYS9pNlExYDozPV9jYGNIbj4xS1pGJlEyPT5tW3AjS1pGOEEveXs9SGlhW3x0QXpzLkFJfnVsMDlEKEMmRzdaTThRfGFUKSUqblIsfS5ES1J6PytAc1R6WnxNOkdjWVB9Rz84K0BnckZgYjtqMEhVWmpbeywkXXpeOUJffjV8O0RWSUdNM0tHMEZndXxhbVJsW1FqUTBsIiF3Ym8xSmNqYXAh'@;
put 'VS40aCY/JX1JVWUkbVRYcE9qcFZZOTh7Y295M1E1M1FoaUljRiF3QngzYS5EcykvWHJCQy92bTpod2Isc2tSJmdRYEcoTXltPVJ5PHdETWZIdVoyPTsuWytmOCkuVTdGIVdTZnUiVlIoOHlZVnNhUHIySyEqKSk3Qj5WO3hjPzJROWNLP2IhPVEkPUJYdkAuUy9zdm07QztvOEVTdntxVi94L2xa'@;
put 'NWRUamIyR1YjMDdwOmoyI2hvXjxtJWg+cX1TZy5dSTc/IlIzPmd5KiksP19YLEcueFBmaTxhOE5CMzUsOkpVbSVXaFAqUDprb1pvWzlWJl4xIyhGK15LZzcmcmVOLnQ4TF9hMiI7SUZuayVCdExIWj9YeHlhSy52ZyR3YzZCaFBBXmFJPk0yJkFOdnZtK1dPUV5vUF98MTUmTU5JPk00JitMZFgr'@;
put 'STlEMEdCL0dfJEYlR3l9UEJtUnUvOiQ3UzNRYzdTZTRYQzpYMX46aH05S2NyYTxvUl1zKyJKaE5zNUAkI0x0MCR+eTZaU0A4aWdaeWVyPUl9eGckI2NXbW8jISJyNEBkR3BXcHRQVGQvMzR1PSVRUTpdN1NnOSJsfi59UURAYz12TUxuOVR9QER6UE9uMmBWbmwxcTtgNyI7fl55P2tga0xVbjI1'@;
put 'akJUQkpMYz4yRHo/O1ExJFB3UGciP2JIYE1gZEwvPWliYGUwMT05UWdyMC47NmI1dnZAOjFLKlhzW3AmZz9zYy99cXt0W1twSG90L0Y4ZXAyJigwNVB4W3dNUXkpb3F9IjwjNmxIekxqVkE2PXAjQTIwZjl2KUkydjtdenBdUy53UFkkV2A/M0AlMiNRaHBeW1h4ckkkKk02MlEvT1o7S2g5bG9n'@;
put 'PW11OypAfSRXLnNgXVM5RkpVKCghZjpuSWE2LzZqbzc5TCg6bWA5c2U+Ul9gSSFKKlk8aT53eTl6VEg8SFpALjdsPVtERmc5XmIkL3NPeVUxaiRfNiY2ZVVVKCxsSzppdjp+dlslRUteZmlOaUddO2lRUlM8O2kjc3Y9XzcpMytKXSpxcXIzLntNJH0lLFQ8e3hrN2VsWm5iPWhGTCs2Oko6Sl9P'@;
put 'OmF4NEpDJGM3WjAkNTliaE9nVGI6MWQ/blQyVG9MKk5CRDlGZkxmSEFEaC51bjM4R1pJQVQ/Q204a1FNUn0kQ1JNLDwvVyZvMXkkclVUUDN4JmM+P2dWXUF8JnE6QzByKk4pcEpgVH54RlBVYU48RTA4c357dXZPITY1W1ViJn08aSpiWk08RGkzcEdSRiMiXWdCPjc5aWh6PEo6bns5MHAjV3JK'@;
put 'YX1DNFdQfjB5WldUTmxFfiYpbSl0N0ZNK1JIem4kPUl9YEV9QGs/e146WlhybVIyYmEsJFhJfUFeUVpiK0MvPUNDY0YlTTJfUWtJc2AzIyIlS3IvOFdXVztWZ1FmQGBuOWp3USNrJng4SzttZCE2aGEoPFcoVkshOVU9PWc7IVI2eV5HKFczRjQhYldnMnNRIz9YSj99eXNeWGgmSWNGVmIvTUp9'@;
put 'PnteLFkoJCtXPFpjW2lrMXZ0Zy9lPSJzemVJKFRVbks2YTdbY151VT1GMzNQITwlcEU+SEw5KDNtWiNXL14uUG01UyN9JFsjZyh6Yi8zZ0FhYyUrczplaD5nQFNJSyMvMF5iMXl7OlRjYjJZPkA2bnwvJi46XmFJQF9ucHgpVGlEYFM6N0NOeXcxWFZGcFEpflQ8YlMrSmFhLD06STo5OmwkNFJE'@;
put 'OW1RUyx1LlsqamRWJjNqbSo0Ul8mJCY2XlQmVzh4W11mLl1DUUBkUColZV1PQVlYVFZ0Q0N5WTV1fHVRVzNQXyRjeElIKHZ8dVNRWyY4SS9FSDhnR0t5T0guQUlZLkwwYXtUP1tTTV8hZTFDO0FSTmcocng1JTFWbVRVRzlIal9bUnNkVXhvZUNqVWNgVDF+bT49cTwpTTc1N3IoamZ0Z2I/Z2tP'@;
put 'fDpCWmVmTmF8OEIzTV58JWJJIjIkST1paHhPNUF4ZzIhZUZeKiRaWUYsMkBaTyg7eU06UXFnL2JrWzl3OVI7cXRveCZUVTRwXTFpQjVnW2lnb2pEanRmc21MIVdodCYiJiJsJWJURF09Nl5aPFA6ZHg3L1srdGIxQmN2JVQ7N2UqZitaWjA8TVkqQVFpZUQvJkxzPEw5JUNhJUR2WDVBb0IuQGdB'@;
put 'cTlCdVFrUUQ4e3lKUShPdSkpZ0VlWzZ7VFYweFhHJS9MV0M4XWx4RT0+NCw8XTghbUU1bF1tYzJbOUB1aDFRISgoTGd0NUlRenBMJCovNmU1VnBKT0dNVnlwIy45MzBsKEBmVHZbZFo0N0JkWE9ZKXI8Il9QQnpjWFYodkUvVmdQfFZnMFRMNXBxSncyQD1EKiU3YShCOUhzQUk4bmZrN3t8SDVp'@;
put 'YkBoMnJbZmMjZzdqVzomOGUzTCosKyFxd0goWUF9OiE/QHJ2dDJdYyR1YCo4aHhQRilwNm9PUzwmUXNVUjxVX3tFVXF8RHtAJl1KUT4mPmN+SXovU3pYT0BJQDg/Oj0/LnxONWd7SjtOUDhqJl0iTUMqR3ZkSmRePyhtfSMoM1laPGM4cFQsISthVihPUDlIKilrLi83QiR4R1VAMG98ejtEVyNF'@;
put 'YHVwcUdTeSRpNnUpWlAzPkEhSisoUy93V2dJdnYiPmVMMiFOKWFAU0Nva3NvaUcqLmlpMjBLayJtJFg3aUhzIiU6JWoybjxPbjBNcDs0OlNgXiZvcC83QiRiTUM6UmouMT0mT212aTM/Yi5YZVN7RE4xezJ0RmJYLz9oW1FrcyVSZG1FITpJQzBNN0xvL2tpamZebmMmTDpbLFleO2xSNGQ4dzh7'@;
put 'QTskU25ae1VTN3djYFBCd1tMLmIxX1FTIzp6cU5FfiJlPVtkbWVETmx6PWlub01JXnQ4JF92Nklsc3lMcFNCJGRpek9WMm9vWVFyMVttaFZDV1NmV1BRezQuSzpZOVJRd31mbXJWQFg/ekReMTxBVVYxbHUpeDlGRHlkW215UlNgO3MkPmwvTyN+eGQyRUBCSFkzbDthOToxRS9PZXhBTDFLeWQ7'@;
put 'T3diRy44YXIsIjwkYH1tbkNVfmp2cWZvR1VkSmg9VnxSMC49PUNvNUIhUm45YUNiIztHOil2YTomT0FFOWBNUCFQT2d6SThoWjo0RUtSRDBHKCtPTjFVR2N+Yix4bDAyIWpUL1c3IT5NYTkpRXJZMGI2QEppLiFEQkUkSjg2dSlXcV85PVIpMT17bCIkRng4MCE3X2tYR0p4QEA8WWVPIWBoOD0p'@;
put 'TVUvNFkjdWF7OFMsSHdwWzgxOWssNmd7VSZve0dmIzR0dXFoWjpwU2pGZTcmLih6VCRdViMvR15qM1U5eWlOOlF7eSomWU9COiY4Mmd9LntITmozMikvUnU/T0FfTml4TSw7VilqPHJkPlFZPmleZlFZdmBGYFgzVF9YZisxMTpQfShqKGMoKnx6eXV1UiJVIyp+XmAxI110LHs8XX48d349fW1F'@;
put 'PFBhVGlTTWIyL1VydV1WfikpLC4iczFfUm8/ZiEkbVBiPCg6VV5MInghNzE8M25keFpWRW9vPnkkWS8kZ3Y/P2ovTXE2QFR9Z2xfK2VJTURxRE5nW3ArVF04e0ZremsvW1M9UXRefEgsYExnNEpGSGhxQjNbc0YqfiRVSi4sTXZaJUpXczohezlPNExzYXZuYCRjXyRlWip+aXUwRlp9aFhGV0xG'@;
put 'ZEtlViN2R2EoJiVnL2szflBsdVNoL0JEMEwoTHk+KENJWnV5PGl7V35hTn5mOHcvPC9vWSZncyR7OWA2UEcwKiksRyEoSVIjKEhFTzZkc0plfTJKRWpTUFphNTAhZT9lcFZxaCFOLFgvOXlldX4oJk4wUjc6YD9eSzVBX2xCUWN1dXk1V0V6VzhVdk9wO2tHWWo2bF4kez9EVS9YKCtfazNfOWJv'@;
put 'TGdzcj1Mc0BxTW5AQl58Ris1fTBIeDE/PntvW3wwKz18YUN2ejN3IjFPTXBMSj4rMD1HZTsjNEdhWCV9QDBxMmY9SkhZTDJLKGJ0KztvdFdqPjN8dTh2TXdkLmtOalVpVVFHdTswL09gXjdQczQiLG94Slo+VjojSSgkWUR0fjtDPDUoQyQwcmlWdj5CM08xaSE5OXp2dEIwTytQbXlRIVI4WT5N'@;
put 'e2I5WlNzcz8mfk4/P0ZYUGEvTm9PVihyIllwclRJO000Wn1dLFdJTXJmRVd5Tnl1N1spYW1hKyguJnV3Tno/Z35kTW00JXghQkNTVkgsTiV1d1tMKXA/RlcpQU9bNXREZG94Z3YhKkl3WGFaTCJ1WUNFUzJ9ciYkUEdNInJNPVghYj1gQ3kkcGQhKDlpOlEpV0BpMzRSW2xuL2oxbywlakJAbmYs'@;
put 'S0B9UzR3MT9pNltdVGJPPCNSY3t6VFgmSFBgKXVzRV9xPEYqVXUvP008YjxYPFJuemUmO2A6Tl1xW1RlL1gpa3R5e35WbSVpKUt0RmBGMWZjUGU1Vk5PXntPbG5IQzUmPUt8KXVseHZHUis6TClxTTlzTi56S3xwQmVAVSk+QTJFPWRJS2kqb2RjaDhnZ3tfUzc7U2VUdzc3R0s7MTd1NTZpZHhw'@;
put 'PD9jcyI8dDFRXTxMWDBMRDhAcTprT3Qwb3RfcixLfEckLi8ma1pINl80bmE/L2k/V3ZreGkqIix9dT1nNDZXaTpXbjxgKGN3JSlTVlVCK3Y1WTVBQjR7dXVeIlc7UFNvPGUoK21Van01KChgPlVQI2NtfE9iPXFWYVQuJHI6byZFOUsvW0hpVUhSQCZ+dUs1YEtNQnxGVlg7TUkwMUk1NCk1KEBP'@;
put 'aW4mMWlhTjddZE5pPUFHVlgkLm5+WHA2LDx+KykwQnslPiVuTWpKd1JCO0VxKGI6XjFiNFdmI11GQTZFWjwmc31BcFVsWCRmInVVUyVvfm9KfTEmIldUejJkXS59SiwqPXlfWDNsJHwpPGNIaG5DXW8sWDFmbEw6fW5bS35hZz5jVn1YYjo0eis9O3JZeDZ0VXRpWXJ9ZSExa3M4WGlqM3ZZe0V9'@;
put 'SFhpakFYe1F7dWIkQU5fPXVHK0xRQip0JV9OdkVMSGgsQU8oP3NSVEMxam4ja1JtPmg/cTZmTkoyW3JiJWo3bls+bl5iMU92KmlsU2d5SXk/O3NNIzhlbDBTSXczayQ5X1RsQjA/cFYyfH1lTyEmaGZZXUNvNyJob2BwVyx1K2UlZ2gvek1DdyFNOTQ/Q3xCPEM6T3ZPdiY6dUx6QFpqYSxecVgo'@;
put 'V2JAekliZyF1PCQvaDg1KjBrRTBCR2tHbVBWeFRWQEdqWSpDdGlsOHImJDAodSQ3T2VwclRFSTdOfk41XzgzUSkqNCpPelFoJFBUTUw9IiJwdDJDe3xwMHBCJjw5WGxtdFowTV5KXk9UPlNiaUghYDlCX3h5MSk6U3B8YCV0dSJoNmw9RHRAKENhXzBfaSldQkdkKkQiX1Rffjw6STVEb200aWky'@;
put 'TWIqOls/QGh4aW1FdkE4QEs/QGhCNjFScUNtdDd1dDglaExmUm07VVQoaF04IyYwJUQ1SHZeOyhefiJBIl5mZCkzI2V7ZTl1blg/ZGJiYilFYT1kZE5IKi8vaEk4eW5vL0NfKkw0diF0SlU3UnN0Vld8RDx7SF01YmJ4IW59WU1BJlFSe3c4T3pSSDxKS2c1WmMoNHwsQiMpUHNOSDZZMDJuRFlM'@;
put 'P3xlTz9Adj0pO0xAKkdESFUyU2tAejEoNWBrXylnKV5WRWEsWSZfXSJVX1JvU11WbGhabVddQ08/Ni9DISZqMG4lbkZhfTZCPWBuYjUmZEdrcGVVbSMqW0llcmx5cXE9LlgkbHF+NFJvQXxhfUtDTnp4UWA2OkpkP0hfY005X0RPfis3dll1bmN5SUJObFdddCZ0On5oLChXczBQSjtCeFlmMGo9'@;
put 'fWVLN1RfVF8pM0x8OWxRWmdrUVRIYSlGPWFkUlsqdWx3UHQ/P0NkIVF2IXZQZnMpL21lezx6dHEkVWYjdT52O35ASUhCbTZ1KkFAT11kSm4hPzQwLmZOayVQYV55MT1Pa0JDbWBXcWtwbEtKP2ZxMG1qOnNRLiQsKy9mKlMsQyt7KEk+b3VuUVRQZD8uS1A8Ql4xSkNUKW48aCl+aFthJjhPZEt3'@;
put 'dWZ8M1FfRVNNdHtuI1o5encscmlqdU1EZCF+b3wmOz9dOHpJPm82YFheRD9FQnpASWRlKkZabyY+b0p0QlQ/SVU/cGtkN2xYSGM6TWlUTDF9fFRMUlU+S35rYk49QlFnNWU2ZjpSeDp+Kk1XYjc0Y11HQ307ImV5e0JPW0hAIiM/W1k1NXFfJClVeT16TUFJQXFTSlNZVlJ0ZkxlS1lJdzhffnVX'@;
put 'NnkyUSxRK2hfKl5hXjUpcG51T0Zecy5daX1ESzQzY3BjQ2B8YUV3OE8kYG0wW1lTbkN1fFNtZSxOZThXRVtdJWtAcTwjNyxRbWFXTVEzcngrPH5nUy9bPCkhVkhnOHIzZ1o3KmoqYDlzPW9bUGVqdTN1bW4wNUAzO29SX0pRcVsqI0wuSzh6NTddSDs0eT4kRDQ8fDRwa1RSSH0vcmpFYjk6dzF1'@;
put 'RWNQYDMrPnpvM0ZDUjp9VVcqNDtyfmJYbCFOOGBHPEx8OkcoSUVqWUZzJTxuKDVVb086PjdZc2VdQ0NISFlaaHg8UU9LX0xaQ1BYaGZxMDxgYHcjYnpwUXg7MkFpUnQyOnI6WGU1MmBkNz4zTGl1dkxgRE92eXAlXV5ZdztTI2lyMyl6KGBeNCk+IntyWXpmNDF8JFg3bS8vfEc5eyJTQFA3WTNC'@;
put 'VVUkaSNIc0s2bC9DZXxhfDhHW0JCPS9GNypVeUxrSytJJmtINHdYUHZoTyFfSH1wSytOXkFhb3hZVEhaZUxZRjdFaUhmTVdbbVRmdCZWOEBzLzxNLzs4citMSj50MXZMIUlaeE9HWlg7Szp8UlZgeT1aMmVMUHJvZyNOP2xGZUhsNCY1XyFITFVTMi9bWzMrdDYwQkxefWtxTDArVXBYLDdSNHox'@;
put 'MU9CTHp4UWBGX2s9fHV1a3dPVDxobXh0SzhQK0RgSnhrSFc/QkxiXkxRUV9FIT1YbWtzZmpQRG9vciomM2J2RzAuYjBGPTM5bEpdejg0OTw8cF0lXSYleHw1L1VTUUU4T3lSSGYzKSZTWko3eDIpPVosRixVcnU5X0tAXT1RfT9fTDleVVgme0tVfkw6cW1nWXhPd197Rj11Z3JMZkQ9ejlhJnJF'@;
put 'N1FKPDt5OV84Iz9HNklsUGQkWlkhLzhPVWd0PG4kW181QyR9fXhafUJuaFB1YEg3QTxlVjE7TmUxMGUwamp6U0ZQTzYzZmFJNFtXeTRwJn5yNj5qInQ+NSJtNGYjUkImeSgvJWdLT0k7VEV5NXtYaDciN2Vob190KVB9fTlvJXAvL2EuXjkqfDF3LnlmIWZleThPR0hYYHVPIV1rblgwVDNxOn1H'@;
put 'Ons3TVFsezVaMjQ4cVJnX3BMSyxBL0hORHE4Ml8wU2Nva01tUn4oMG0qLH0oOExSdUE6QFpfI3xWL1BVUzxEazBZaDtPLEExTnBAVm07OlRwOTF4aUR+Wz4qZCZxT1NCRTRDUiUuVk5JQiNxNm1vP31OWCE3aHVROmdydUlpUH1meDZ3WyZ8QmJnMShmN2FUXzo7KzZ2cm5vQHhuMUEjL21FL0pI'@;
put 'XWZsR30jR2RTSlBHXVdhfWAhZTJsXlFmYzdyMVVHaEYkcCRYK2BUSSVYOiVqITgmVn0kMFRGIVsvL1c1PzwiPkJZZlBhZSpyeHs3LFlNP29MQHI+JWU9QF42ckovVXlkQDs/XUI7Q0BpUXVGTCFhcXM/WiRzSDdZNkJCIWB2SmBVPkMufGVrZ1QiR0A2MUkvSEdFdSgseE0oLGdeZkZ2VjF+XjMx'@;
put 'PTQ0bmRhcCk9MG1aYHApdE97UkVmRzs1Sj42MSVAcWpsfTtCYnJ1MEltUUk6S1lWKU8la1hGY3BHXlZ0MEVad1kicXAlLzBrK0laZUpocTxmYm9GYXhiMUlDPHBGVyQpIWNoKDxjKmV9TVdAWCUrVk9UfXNUXTl2eU1SYW4vTXQ4V3x9ZVtrLlFCbXNFc2lxWlhpLCEiWHBnPmglUHdfdkxDPGNj'@;
put 'SHN8b2pTJDd+ZUpiUUAoRE04fDVEQWc7QnVzKTwlIyI4cFoiUGFvSjs1WVFTQStYWVJ1N14jeTtfeltXMjR0Rk1uOz5RUlo+WWYwfDhPKXxoSko2NiEuJXE0bypVTCl8Yjc3Xlk+SE5haU06OTYkTV0pLCtpMHl5SV5ReH1AMl0uS0haNWxUQ20vK2hbLj9qYkhzI2BsfCx1ekppTDlzbDJGc08l'@;
put 'TGJBOGVIcmtGKyFUKzUvcj9UIlYrNHFkUDZQWSFHbThDLm0vbkFsWk9kN3phTDNLdWhGNUAyQEdrIUpGdj4oOWkmTmY6TjlgQ1E7MHxVTDNULkg3YlVTXjAzWm9dQEQ4OFZaIjYpQH5IfE1qfSJTJjQxI2FkVHZPK2BjZzBobXZ4UlRwcyRzcS56NnJWOkw0bzkzQktyVjo7PGBnSmVkRnVNcypR'@;
put 'T09rZD06e0xBYXdOfFoiR00lPmksOjxnVzVFcktmPC4jWU0lfU1eWjJ9YGgzMlBCXTVFci5YRVtjO2lOSUl5UllGdVEvUSJONmRgQCxhSGZ+dEwvUl8je01LVy9fN1BgcVchNzYreiQhN3w1dGBNYE1AKDQua1o+Wi4zLkFXc2hkLG5UeXdgYHF4fSI2VUpeKSpKNVczNiZEek5oPnl6dnM4V1NP'@;
put 'R2Vva3R1eXwxTGI2O3V6UnR6ekZKIWJTUTFIRmwsblg5MXVmeXMubXtmTFpqKjl2M3RkUFooOUlOZEEpeShBYSlvKTp3X0A7XUZ2PWdsLGl2b3NDeUl7IUtCME41bmdBLmlVYi5UU1s5eDE5b3crJU1uejFkaypRaWdjJCVXKiVZVVdTU344WSNYTlhMNGMhVTtyJT1sdmQjdnQyUXVFXXdgKGBC'@;
put 'OmtCXjFIZmlzWCMqbV5BTTxtKlopSXJSXm9odlUzKipFWjBpPk81TDkqaG1FN2NtISVxcCNoaXshJWVoMWkzMj44X1Z7I2h8S2dLOyI7cXglU1R6eyhyfmxFLlhNR05SaGU/bEdyOSZsRGYmNDhOWXxqZXhINjImfEI4aCRKdEhTdlRlYjhyaGRPTD4zMXxxSkh3UjhLU3k0a292dls/dHYySWtu'@;
put 'Y0NQZDd9bU1ARkQvTU0+VToxWiRNXmhFRz1CSCglXVJ3Tl88aDhZLzVRYyJdNlRZUV5OTUlhYF5LIldbMDF3JTx0MUcwdHtnJnE8PnRYIXRbYTN6WEFsfWhbSHk/YnlXIkowQyR4VXd7VSg0Y1RZOmhxcGJ5ZF5TKTY/TH1sXVBiMCg8Jjg5WGJ4OVBrMHAvTjIxW2csRHt1RHNXTVR9SUpPdWJE'@;
put 'UHJaYDpvdixAS2t9RnYkZiN9dSthcyNVRFMlcHtMeHEieW9Zbi98OXUiVVg2NnI7a0RyYng5UHV9Q0AwZXRNWXMsJWo7WFZbWTA/LyNHYmw1STE0VCljWUd2Z0ZXUCwwelkyckVtJFk5N3pPdTBhciZnUCEibT97IXttL0lxcyZ4eyQ6fFtYPTxzQE1mfktGZ34qMEFwMW4zdzg1QFBBKVNSOUR9'@;
put 'OWh7TXx1JS5QVEwvO3wpJWI7Vjw3Yzh7VFBLVVNpWFFObHw2Y2k7NUdZPmxdZ3s0Y05SanE/Syx7enJYSSJvL00peW5mTyFseWFzbmBtaW85VUlyX0hTNjRAJVN+NTUiYHE0X2tvMm18L2pvLDxnQ355Yyg1TyYlNUx3WD44WztgVTEkUGdwcztVMVswJiU3am5RbjxtJndlMGwlZW9FdUhdXX17'@;
put 'YyQ7bVFbMG0qek44amRlMmlHKzV8PHtbbnd4XmtaNmFYfm1tNVFieTxpXlBbLjN5RmxGaiE3Zk9jKTJRfkoqTXs8fEhGektLNXc/KFkmaUclTXpafUN8b3wpPmAzMHYjc2dRWVN+Rnk3T1MzclldV2BPWG5BVStkPV8hR1lESmJCfEA/JmVPJEJZMjxqYl4hIjB4Y2t7ZiVtNVkqVGkpUnZGQFhN'@;
put 'OyM6bnFYPi5XeVdjUExITyhfYk0pa2QoWVAxalZ3cT5xU1pZM1U3PkBBPz4wIl4kZXVIXzJ3ZU5lZyZ7biVQTSF7dVUoaGQkUEdkbGErPGhtWmdPXXhsdyFIcCtTWWZ4VVtmXT9uZiYlaDM9d3VGdCpLaV5zWV1oSENjQkx0M2lraz9dTSlVfDwiJTZjSGYoK0U6bTgsJTU5IVElXSFjcjlWUUpd'@;
put 'bUl5I18wW24sdDUvP1pNIS8vU19zKTchLyplJitAPEx3PEllIWpdPXx3UW8lZ1hwc2VpcTA4XTtUcFp1MF9IfFI4JTUlb2w+KFYjVUptZ0UkI2hgVisoQEA2dTEwP20/ZzA7K0d7OTg6ZyFvbzltPTpwczsyVlEjfjJeSUJQSmluY3Uva0AwWVk3fkFgQDp6WDJ0Mn4vZFU5d100fSNBZSZIW10l'@;
put 'YCNLJDB0cnxQQzhwUGh8KVg4PG19QzRnQkB7dyNGVytvZW4kPWxxZEszQ0lQITkoX3EmbCVreyQ2JTF6ODVAIXBpckNwQzh0ZVh9NnVrTz8vci84OTsuXjxEeFMjNEcvOFNzc2QrZUlQRHwwZSVjKD9VVCQwbF5QdytlYCQyNFk1cyQob1YiOnBZWGRPXi5RbixoUiltP1Y7KzUvV0IkR19MZSFI'@;
put 'cjE5US8qc2U+Jmw7SyNxI1MocnsjXXpkJCFuditjYi8hL2pMQUF2KEtPQyJ3RF9KdFpIekd1ZitQUDg9PEI9SiIrQE88THFgPVo3MWxYJSpdeTx2SUFBQUFBbEJAUVowdip9OGJwP11eaSFdNX4pMExXT0BUTT18YjkpbXFQe2RBWUF4UmZNQUVnXzdEUk44Z3h7Rm9VYjJ9NX0lR28jOHlJXjd+'@;
put 'SzVIJmhzRjNxLkNpWVFbOG9JY2IlZixPQl8wOypVbEB7Tmc1Y2VWSExXMGssekZIV0x2bUk9dHNuZ09FUjZpP1BQMUplbnBPLjchLiIoWlNLUm8yIWZuLlhRZXpQJGF8OTpxUGdSQ0EwKzV7IUxBRDRoK3diaEhDUz9FKG12dCt2MVZXdFQyOih4akwjRH1pUXQ9SVtMeWRnQnMqSSRhbmIyXj9Y'@;
put 'Vj1EbnUmTDZ1UTxObTlJUF41JHpifUUiM2NbSH12N1pbZnh4Z0hySTVVYzJyakNuKX59fTJMSyZKTDBtMTRwUEteeU94PHtSVko4WVpSYmRdfSNUVSYmNXlST0k/P1guNmw7RHdvQVVUUmNwezFQPV9XWHZHSmE9T0dXLnVwfl5ALn0hJHF3ZGttIip7MVEpIVs/YEA0ZGNkW0h3I0p2TWkuVmVm'@;
put 'SnpKWjFHSD1XU1RXcjlrPCtLSHxfPyFYJWJpJDB3Sz9iKXhjRXgsb0dfbGwoa3cxKEtwQFRkMCx9dSNJS050KzBaRktJT0FnTDdULmtPZzl6UGozUjlLYX1YYTRVNlp4ND1FZX5EPiMsSFZRX1ROemZSL3I+KThKbE81e0JfXVpiSk1bSFMra2QzO1ZnJTJJb3FMRmY8a2osMjs1M19+XV0oQ1NX'@;
put 'b0BpMGIkc3AqYGJxP0JDQ1FHcF9aJXAlSE85dHgpIWR9Y1QyT3tafUohPVAqKjBfNGtjeV1TVEokLmhaPW5JKyZBY1AobzZUTEtvSEZIVC5qNDNYWSMoTzQ9JXRrZk9DKS5IdTZDeUllI314eUlLNkg3LGNRRnlHRlI9VTdQPHlqR2hnIkdXcVM5QSptXiV4ejpHYmhRVy9MO1FvZ3xvfSU0MWJ+'@;
put 'c11gN1ZrQmlwdEJrUWRJeH1IQjY0LmNeKVhaN3krL2ppNmA8P3pHdFspNWRYNiF4OWI+T0dfM0I1P1BtNWd7TlA+elZjY343TlBkKWskXWw6ZEU3bV1pKDhtK3pOOT9de3F3PTJGemUlbyRaSDRZczxwfUoqJVJVL10kMXZvQDhaQ35oezczbUZvZF13S0ZrPEZebzBvNz5AdDRdREVDazZzcnVH'@;
put 'JS9JYiNIMjQqMHlkcl5JNDU+NllEMzlaW3Y6Zk5qKUYkVXFfTXVdbEt1Tz8hXlFtdztdQzg5Lmh4cykhZHppY15ONE4mbStKYXtWTDY2V0xgSGVUVVdoIVB0cUR0WVszfiVsbV9wb3U9TGBiYl5ZTj4qaGRJPztSfW8wWiR5aTFJQzVZRXYjI1hud2FAdyU1XnFdP2VLK1p7SDwvR0lwJC54eTRb'@;
put 'PH46ckxuMFpKZWZpP14jVXUkS0BWanlAWF9xbVY6Pjx+c0IzKHc6eFgvKlgkJTpoYjlSc1tFKSFoTmVSZDJHWmlnZypQPlclWEpQJlBdWXxEckZ7dXxKeDNnRFJ1KndjVF5zS0pAK0AzKmB3TTR2I0ZSeE9Udm1uKUQyS299R1paU2ElJjw3W0B5PVVFYSVdPTM0LF5UaHk/a3JoSGcvZ34uUHgv'@;
put 'eC9lWX5NUyMrSH5beVojRWJfXW5JMn5XLjY2bzVDXUNXVVRJbXNIeTBAOlhBLFZ6Kn5UbFtiTGlORCxsP09ld09II0AvV25rIy9iKWl8Zno2Zy8xUzlkMl9EfT5nOjQib0pqPFRCV292OjFgJD5uaFFOViJZfWF8cEZFTT1XLyl2fCtDT2N6WDAjMm5nInh4eEVlTE9Pfi5dKl87P2d3TndbemlN'@;
put 'VVpXXmtscihrcXpeekFaTXQrT0x4I0lLaCRTRHdEWUAkMEZyRTh1InBLMyl+b1l4eW56P35NZ2JISTJZJTRzZ3t5RkdadClCKSo4SFYzUF1HZ25bb0x5NW9iemUpVWtMRVtTcWxYe0dPWEhmeUM3OVVnYFIvP0p3QSl5ZzdZTnV2bzsoO0JLTFo0Y21UVmsvN0F+T3dnZWo2Q094QjZWW3YpbHQ8'@;
put 'cl1ecE5ra11acSlYUjhCWyVaM2hbST1CeVlrcCxsWkQyfn15e3pJS3hZOXo1U3RxIXlJZUwrXWpwTHlRdStKM3FhVHc5TywjLEY6aTRwQ3ZJdSJPVkxIYi9DIkg+VnMudnxQPi9ZXkBAT3QuX0YvVSgoTVFlcls+WSZHPWg5dU0/T1dHWDkjbUFEa05HX0tYTHlZa3R6UVJBeGxGYmo4ZF1+LG4s'@;
put 'cVZbcSFEO1RVVF5+U3ZJMnMhZG5ERERhN0BsNj4pbTglQi5lOCN4ZkZXIU9wUytQaTVmMToyMUk8MmR3Nkg1dDRXRVh4L0MuRVdHalYpbCN6Ik5aWDYzVGksLERRR0VNMVNIJDNDbDBCVWBMaFFqenBdcmpYZFs1amkxJjQzU34oPU8xeCo4YH5Gd0c7XTxlXUhLVVFLemk5ODJKVSlxaSl8Rltf'@;
put 'VGwxeSk/YjNHeCtqMixhYC5NYitvMm41TGpERjJ6USR1Kl9hLD0vfjdYeWlMUCVHKm9YVXFXfD5CamhCOW55aWdAKD1OVng/ZD5ZKSVxezNgKigwYVNMSSZJKVlPVnZWeylMdltCIkllbncmTy4rKTUqKyV8NmYzfi5ZOCJqY1gyR3cuNytTUUR2TVo4d05jUGF9XSIoRUcoUU5RNEosMS5ycEJl'@;
put 'JildaSs6Tzt9RjZiUyhkVXBxQ3B8XlYhNlFNKV9SSzBJc0BSWiJANHNAeD9AUzduRkREcyhrYSl5ZTY2QCx3ZmNqZ0E4XTpDNjZsdTwqOWgyK2NrbzAoR2J4OXxCfjlzNCU1RSxpbDJPZVJFd31DMylVZE5BZEYvUUpeLiRCTmQ8a0Uoa3k7SWEmJFBRaj0iLzF+NVZBcmBJK1h3XSk/QDQ0SCQ5'@;
put 'SzB6NXRyKC4sdWx7ZDtvTiQpJDVBdltrRldAaXY2RUlPSVRZSyV9cltHKzxtO3E2PUMpPldPP1olRlNqV0YzQmltYUJRZ3YzaHFgWGZaRXciLEhXR19+VGZ2K3V2MWQoUkRvbERfX3hRMnZzdj9xeix3ezlySUJgbm9FNEEpayVXNDY3Xjp9MjJrVmBaKiV7d3hBNzQySGdmODxYb09KaExtczs5'@;
put 'OCNLbnpbcXBLYkBaLCshWDRvUV9kNSphNGoyfiR2amxiaEdESFZ7Jn4pYDl4QVZFPjZGXk5IKVM1UXc7YFRqOXZgYD52TCo7UWBlK2p0Vj91UlVzOjppRTI+MSwoaTFXTEdbO2BWZ1U8OUlWSkU3JWJhaTEjeiE4flBbX0AoLE9GRm1GUyZzTG0pUl5jaWk/OlZuXiNnZSsmZFBZUXV7TnVDNm1z'@;
put 'VjJeM2B2PCshVXlxJGE1dzN0P15iKE9ocGteMTF6UE0lZllRP2VvNDspJX4iKkJEfjR3QCFuWyMuQGZpJVUoLGpSQy95TGtTU3ZHKy5YKlZRRz0rcE0pcFlNYmJkPkd2ayF8WjpkN24vQFR5R3JTdXg8N1BKT0xKMnVKKSg9d3dPPjBmIT9FeDN5OTNTeHl2VXlkLyMoSVF8VSZlakAqLmx6QVNQ'@;
put 'XVJoK0lzelVZem8qKl1hYGhfQ1s3biU6SyJBOmp3MGBkPVlIITg/OENvOm9deUNhUmd7SnwrX1ZLeEpFRmc0aW0kXk1UWlFbTSNJPXh+akNjOTI/SHNnXktSYTxTdjpCI35AYDEoS2xZfSI7QUl4WEFoSlhNdD9HM3N4TyQrTFpMQEJfVExUZ1ZSYlF5ZHN9MiI8M10+TE92OEJ9fGtLczBwdSkh'@;
put 'LFNpIjkpSFVjR3leVF9APVpta1RSdCJtJlJvRER3dmo9VT52On1xZHRJe3J6eT0uXzhXRDdacHRJbk4/Z2p4TGsiUDJLNj5dXjwzJWo2P2UsYmk/ZEwoc1FbNURgPm5mOUV0d1d5M0UlWnxzPXBpXT5MS21TY2JncSZJZXR6ekB2eWVqRCFlNX5WWHZ4YXc9Xzhlbjtsclg5a0BufHIlSkVXKHpt'@;
put 'SH1hOFt6RWJqV1Y9WltgKClAWV9PUT0oW1IpSTteNGhGU0RhNlAyRllmTHsyN25+endYa2U7cmJoNzdAbnxFemk1d2U1WUR1MEcmIlM6PDc4YTMvY1t4L1h1P1dXT3k7LyNyWWR3IU1NMi88fl56LktCMjR2fXZLNW8+JC5sfTFzJUZpJnpiaFNMd1Q0IVp6ekl4VDFdV1AvM2F0NmwhYHRDR1N0'@;
put 'dmREPCspT3lEI1dYJCNbWEJCImJ9WylFXVIlb3xaeiprKUJhOl8iJn5CWXJKYWM8dikxQmc/WW9IMDtReGd7ODRgQW8lSD5lSGg0ayJJdEJlW2Y3aG1XeT9xJkMjWF4rZVNWWXlZTkUmO0siZTs+bHhWJFV5biw/YikjMzN2Ty9fPl4kbllURCIiWnBjU15sVV98Vj0xeENsYjVANEtkTztaKHJf'@;
put 'KTFGLHpFKVk+diNERlVQMjFoLztuaGEvS0tjIzkqQzFtekEjNGRoLHNWSnlZdHdITTRGYEo4Ty56X3dZbHtkU3lYIXxMKllBSm8oTzl+MmhaLDR6UEY/JipjPzovPFIuRVJmWjFwdUMyJCkpMWNYWDgjeyU6QlRZM2UhYDk7SyFAP2AlWS9KQ31Ca1pwPEYuPTghOWs9W099OlY1SnJZPklIMVdX'@;
put 'bnBmQHI0IjwwKEJhfEp9U11SU3dmVyZHSiQ1VnNpcWkxZExjPHJfRFJ3XV9Zak1NdzJ+eC54alVsRks3KSlyOy59VHxXcmxxdj0lUlpweUBUd1Z1IX5GTE9gSyRAeEdkKGtmPlQmQWFJOFJYbWFMPGRzOXNpWkdHK2ghQkpiNE5lUThHY3hGWHBEMTNzUSs6fEIzXyFjNzZUfixhXlR3bntAT110'@;
put 'cnlMeWI3VkVCc2ZaVl8pNH5obVYkZTtCZzFSP2VAOl8sZzRGaVtYUWpvb3h1dHsuXmshMiNSamdZSWhqK3NKTmp0dDFUNVQiYXJtIWw1KnsqV2ZtYCw+dG1iKEtALDR6ZDJUJDVFOzBDIkdddGIyRUw8cHJnO28lanFqaVRtVUYub3J8Rz9aMCVIcnx8fXRuI31MblVRcnpfR3k5bTpjWnpsbFEz'@;
put 'V2h8cltCM29fe2VIKVpPUFphZzNVZmlXd1hJN1g3QDYiQzJmLjRAVXVISzEhNVVWJlFDVGpOOF8rfVRhanlhbCFbNDZMN1cvR1dSL1N6RyNOYTh7c04zSj8vfFg8W3xCJUVWcW1PaS4/QypHTHBsWD9odiUyUTBlb1JlaEJCPkRzZHU4cFk8ayw7Qnw0X1Y0VCo+d1ZPdngpUjEoUz02Nkw7UV1+'@;
put 'N0xSZ2VjWGB0Xyw2VHYyZHhQME4vMWV9VSN9QTtVRDViQStySXFaTmMlSlpFcXE9UiEmPFk4fkRMLG95Xmhodkl4a3wmc2MsdUBWPV07Wy5ZVHdgcV5xMml6ditaYnY8VHsvY1VTQUJ0azBMKmBmT2t6ZG1KeHE0Rm9pKkhvQF8kPy4pZExGRFEzSypaeXtXRkFWczF7YnE2PTVzLnxyV3B0XW1u'@;
put 'OGxqbHh1dz9wI3N7RkRQfiJ3KV0zVig4NT5NZWI2KTVDel5rPzxjTWBRJFlTQ0deREM0eWJScH1OaT4rKlh2YGFyTmxTNyksMk95UENkRjQ3K2RtRVA/b3ZiQzNDJltQeHtzP2IuPStfSS83b3F6OUx0Rj5nTUU4ZD86SkpPKF1uaWU0fk1fYn1FdDQwdSQlWC9+d2YucVY6ZnZKXXFAJDdJcl54'@;
put 'SHs4OUgjI2pwVDskUiI4W3MmOiIyWisjPGVwPiovZUgvUjpmalp0IykoRm41Y1JEKWJATGh8OipSRHJkKEZ6Vl9pXUdGKE4xXTt0Mm1gQm42MmxLXUZLcXkpX1tkfFFeakVKMms9MS5RPjM2bmF6QWsqKUZAL3Z7Mm1pdnFgMy95Q1pWKH13VVJzUlYvImU3eCxXJUs9KkRpOXE9QENYZzl3cCgm'@;
put 'MzpOP1tSa104dWtaVGosPk4sRFkrSVdRW2tXYU1qZDJRSCt8R2UqdzdVPmRNYVB8SWVFNncvIlArVyZmQGU5P1hkQVRiY3lKOXpIJF1MaE4xRnY9Tio3fS5IVlFZNkVKJlM5L01genc2eSo2Kl1iO2krM19SWyVbdjZDNjxneCNMVWtzW3pLNGFobEV+XmUlcztranRQRz4mSXUoPEJHL2Fpfnlf'@;
put 'TzNiWEU4L1lFUUxEQ3ZsQzhNcDZyY3l3PypNZCxFKXN6YkxPdS9FbDs7T0pbPGN0dzQ1LmR1OWR6Uy5aOVU3bTBzMHsrQ2xnWkFsJihPLksiPGBOT1kyYXhFZTIzV25VXXIqcU8iTTE9RzNEfj50RnxVP0BjKCEjOFBocFp4fnl3QndMcWRuby94aVBbKy9oOGJgJHFQUU84XTx8L0JsYiMqdlB3'@;
put 'OildN3IsUSp+N0c6WkNtLzxDe3RHUVhuTVFvLmxybCVzWG8mT0lXcUZNZ0tINypWTCxYSHBZMWlIXXl1VWhIUWxxQ0JAZCEqImBadk1qVWk1Il5rJWV4b3ZCWldnInhUcylAaWh5RW99TSlVcV0iczI4bEdJMj87Ml12RHFPUWNMKntzIiohbDU/SE40fWtsfiQ0eUtDYy5CQldaXnFTPEgkZSU/'@;
put 'VmVDQmZnIn1rMk9mOGw+KHcmUVNFdmI8OzVtQShTakYpSHMzMmYvXmV1REJXJTd0VSpZKHMjeUVKWG48TExtSUtiOkFxK15wMG5sOnV2TF9rMWtBcXUpaCx3WnwjK1A7ZUx6TkdHNEVjNUJVVz1abTx6dzZaT3U2ViNUTEprVGQxPDs0V2QpMG94S0FBU2pUV1NiTlswbHxxUTU2ZjQ7Vmk7YCJD'@;
put 'b0BNdnQiUmphajh+QWFHI1dgM04qMG5iTU90S3FeKytpJkI9O1Z3OzU3YTxfWjZKLHp2PTo8ZzlefFtvbUdjaWM8bCw6KSs5Zl1MZiZPMUszZ15vSDovdHovOTo4VUljJH0lIVkwS08uczRnaFU1LylAViU9I3A0Xj9pfCtnSHg+NldpVkQsRypyZl9aVThnWil0XXtUdD9Qe2pwYWp5Vz5ZUjty'@;
put 'ZV9mWW5CNmBLL2pQd2E/SHN2cnNKNzx6b0dYaXRpKjFfSDZSUk13ZF1iJH42Y1NsaHR2PV9DV3lUTkBGZHtIUitBQ2BMRWUxR3kra34uPUtuJjQ0MyVsVjA3anJPQUspUDRdPCk9I0E3ZisiYzNRSyomczosXk9MIn4wX2N2ZSZmUF1dQylmVkxlUXdQaU9xTEkpbT9Me2pHU2pdKTY3a10kUVlf'@;
put 'NUlxamEpMiE8TXsramh6Q0EwQUhRfEY8OGBZY2ArJiEmVEJqVWIhTWJ7I0RbSDE6ZU8iW2IqKmk2flR0eip7JkxhdnV5ODYuWFZGYldsREYhIV0kVU41NWx0Tyk/cDdTSFc4WW0vRnw8PipMQXJnflZHX3N4YSlpZio2Zz1oYDM1Tz1MZlMvY3pLJjhDKjhlU1o1eSpkXXA3WmRHOTp1PTVrI1Re'@;
put 'byw9bStoKHIxJXdTSVMhLHxzMEguQjJ1JmlELCZ9XXMibXE2X0hDakZ6OnR5Um5iX2swQCFCRGZeMi5xXT9fSS49Y0IiTz4+VUBLKUY9Z2UvcmcuejJtZ0dPXkkqM1swV3JQTCQxTyMkcG1Mb3FDaEMkOVdofUNmTkUlZDs+U3slcih4RiU6XmQ1NTRKYH5PUi47LkF9filXI0heNzJUcmR5RGsv'@;
put 'PTZZQDZYfT0qdU1naj09R0ssZ1U+cUk8W2ByV2h2XktUMns8WU0sdEx2WVYsdzVuUDh7LDo2cmFRJHtlNC4zJDArdXdKRkZ+Y0hUb1ZEPGJaNl9dZSspT20xXXl1fEFLMTFzUH5Dcng6X0JsRzU3KztGP0lYKkRoMFdxTkBQTCR7NzNrJWgpT0crO090UVVKW218VHQ2XU1HcSZTbz4lYVdZLDdh'@;
put 'UFJqejAiKXxCXkQ4dzUjLDhrXyVqUEU0JjJ3Xy9fcz9GIndjSEJGWWM4fUw0N0xXaHdoc1B2L0V2bmtPdSNZNmpuOXBIdXlxMVI3RTlRd0FtTHt3Q2F7ZSpQSV1jdUQqd0h7azh9PlRFXUFKMCw6KiRhc2YySDA7SVJ6ZTxaYzg1VytVczZ7I3Z8RiVjVH4vPG8+ISpjV08mQEYkdUx3Xi9VT2Io'@;
put 'JXZPUDNuK3cxfks1KnJhMnFVYlswNUNTR3V8NDoxYXUiWVZ8dFdgZmtSVE08MFclPHdfUlRjPn1lRSVXKFlzQ09GaEFbT15NNitQSHEqR3FISCpGWklrTUhqK3J+ZGJqNl1HMlN7alI9bj9pbHVHJUxQLGgyeUp4aEIiMml6KnYiPyZMOWhQJTUxTkB7bUk8ajdBemVBZHdyaEcoSjZvTT8qbWgy'@;
put 'QyFHZEJDXztiK0wiRUR2Y0xpVC9hYEVPTFhMUT1SIXt9YVArXkhqLzRgQ1sxRk9RWmV5VTpUUjp4Y2MpfU97K0Z4d3ZQdG9XZWtFV28mcHlnRnIvOn1QLzJoSFJqdC5GTS56WTYwK3UyUm1aYFEuZzdhQG07LkRBM19FPTh5dTZFQWdQe2pMOCRgV05IfDJ8XlY/SkVbblplRFMwR2N3WVpTUUoh'@;
put 'MkVVblA4TztlaDE1fWAwPzJUWDV6ZFsmJkxyJD5TKlFESSgwNjlRV2A3OGgzVnA/a11qRCJ3MHAxXTtyczM7PVs9T0kzaSgybFh5alEpRDZ0SWJCLy5hXXxXNjk4XzQjP15LKTdxRHFfOV0mYWI8Uk07bWM7SSZpPVddOF5fajlnMzI5QnxoaGo7bCxPRy5Ze2I4ezNYVUtKT3Y3en04azIvcG5h'@;
put 'OHFzY0ddMWAqJmZLVGp2LDslQmhwX3EqW1FubjFbTyI8U3p8WDgub1l4XmFFV0MybWJ3TlYjSSIsendtbmlLe1pMKCt2PFJKZGJUbUAlemVqX2s6PFJaYVZBVWw1VHtAVyUpJT1OIUNfX2x6dn1SQ3VVTSRyTl11PT0qZ3BEWXdEUE9dPyVpUmlAQkZ5Z0NUNSFkUnc5YzksYHJ4XyEsLzx8aS4/'@;
put 'YWFqQ3JQIlM0Vm90LDoufFlAR1ZeX3V9fUJnQ05+czk9fXI2Ukp3X3ZuSD1oMTBLSzBAMDMyX31bdzVgQGI+NHFhcztUYCRQaV06RUQxOXRUPypBVDNEQDNIKmd5Snp+STldem8yKiJHezVtOklBM15zJDxHa1YuaSplb084c2o1YzNPRm4uLik/e1tUWT56by5DcT9jaWgxIXJNQCl3ODdgTV1K'@;
put 'QVluUko6LEtCd3lZOlNWck1qSjkkW3dEI3MufHgmWjxDYWQ+aHwpKi8vIjRCW3NaX0pGQjU5TzwmT2Q/ajdXMCo2dHBgeDlHanYkbzhsQHh1bU5HLCg2OE9taDxvNzhZQlo6fSZIO1tATzFaeSNIfEssKC9qamVGNFJiekY7dkpWVSYoQDtBQUZZbVgiYVBidW95YGcuJlthMSp3WCRaQTg4eWlo'@;
put 'PHF7dyJgQWs4PDxDTTB4OyhtMT58WiZHRmM4dz89JEdERjFdXnNuT3p2bEwmUExqTGpsSzhwY1FxLkZffklrJHxgbH03VnIxZHRJI1FzIko4QnN9ZDl7PCVwQF51NVcrSzRlInNUaih9cyhKVEQjaUFKaUwsMS5QfmElfl1DOz9ATG8reVtmKntMYGFJO0s+WjNJUHFdOW97NFljMHpTP2hMUnBO'@;
put 'QjtYLCMiU2BiMVRAVFJJS2tqc2g1KGZ6KW8heGszam1ifWNwKE0rZC4qa0wwO08zZzNqNzhSUTROUWpLRkBMOFQ5U0JUeFM3MCEmUH1tUWl1OSp3N3R1cVFOUzRXIlYlNH4wYyokfXFXLG0yRE8pOFM0R0JUN3BDRWQ8cj5oYm5aISZWIylESSNTUjw7cTZyMSJBdVluPFRofXxVenc9XWNjVWgm'@;
put 'PTZ0cyQyckNqIkU8Rz82TyEpeHxqS1Jsdi4xRU08dlNLSz1MZGY+bipuJCwlfHd2a0clXjomK2FiIm1oRGpOPHRGZ1NaWUB8ZzxHW3txUEFePVs0JS5xdmksUz51NU1vVlhtJUJhKU02MnFFYHh2czlCR1Y/eWw2LDsiZXg1PlU4dkVbfXpwdG5OdiM0OVQzcHNmdEdCL3A2W1Qie2ZNXiUwdEY0'@;
put 'bS4hKE1JcWRZe2dGUSEzezdRLyUwX0U0TXVmJTBJWEVhUHpXd1s+aUhbRFM4V0V3cnR1XkVxSiYvNz8lIWZNSTchP00uRTkuZzVKUXFVNW0qVnFNeGZxeylaKG1eP2M2TlQ8JkdyVVJtJU18QDk6c3BzLnZIS01qUHZsIUQ+ai9hWmovcENhfE50RT0pU3NlSkhuJUQ9XWhtKnJwbnF2T0o3Xlde'@;
put 'a20+PncxeU5QMV1iYiNaeyRCVzlpNy9BKVtjdCl+RSRbcCprXTcqdD0ubWJOMiouTVtJdUJnY1l8fWtjVlVuNzZbWn57R3dxYWFAb0l4NTdXeHJeeHolVUZ4OEQ1OCo9VFBQdGJpVzp7SUBBK1lvZEojSkF4Ul5fL2MkVFFybUgsOGMpP005M30oXXx2VClBMzY+cWNdYGF9dGBqKiJ2d245KmtL'@;
put 'dj9MQjY0OEc8VDc5IVJrUXg5cHFUVHxGJTUlYyE5PTYzJXVyKkgjX3xySD05TE04NnJ+bW5ZPzU1anwqR157ZV8kTWwkbyt3ZVoyPWlgRElOQXgsKmdoJndiVWw6djd8VWIxdFhzZy9FM11rPiY0ail1ZkRMKS8yUU9mPzBIJHpOLFEvekRzV3E2Ojsmam1tVEcuU2lMQztzJVRjPSFjL3h6bzNI'@;
put 'PTJKelJeREwmOWVOektse28hUW99JCR8bXkpWlgleHBSelA+dDR3dSpPQ3p6WW9eaXAoM0lOVlAxTF9qfDdjeGhWb2hWdllhfiQ1PCRdV1p3K1E+aE5UIlhNdUVkSkdZR2p4LlcvVkg/YU1dZ30ifDU3QUNXMlhRXypab2Vocy8hWkRqVlBQI24ia1RhekkrbVoiXmBmKl9WelpsO2h4Vnl3UlpI'@;
put 'ITc9WmltQFJiJEgiQUE1ez5aci5GW2RqVEA/VXd1RTE8Q0pZXWBdJVczKGtRXj9LQDw6ayJKWTE4PlNbfStkZ3M0SD5dKldeUko4YEghN0ZAYlFtVTo2a3ZvOyhiJDR5NkFPc10yc3Z2aXZpeUF6Yjk+XWRdLDckezl1JjQ7Vl9QW0g7fFdsPj1hLClnXThne0pIJmRgY151bGVwMCQ0X3E6e3hv'@;
put 'LllEbToxR0AhdTlfbWU+cnEzNkZieE99TyUhU21dY1hFfEROVFpjXU5FcHoxLHI3eTVFVVBQQDd8QX1jYmZDaHc0U2o/OFRSfSFsR3NMfVpFYkl5TGszdzYqdD9lKUtLWnJuUWoiTUg6XWNSJm1QMitqTWEhV1JGVEYxaiIvTzB7TCVoOlpTWzUwemU+Ynt3WjNNTmBeeUcmeCE0Q3RIX1liLH1m'@;
put 'USgreDtILzZbZC5NYHtkcCJjPEUxPGo8RnUzMXY0XVBQfjdLU1JjW2F5dDV2THA8NDNLNjJub31HLjJMN2pEQmZuXTleW1ttQi9DZ2FXOkd0NzNASHZdbFBAZ310fSFMQ34lQFU2JCpkQ2crWWl6ayZ9U0BCKyRFNWJzJmVpY1o2ZkoyUyNSJDN8aTFIQmZhSDBfWmhtSiF4QilMVGImSEd7U1ZR'@;
put 'JXRDakZ0VlpPJGpIJnlba1AhYUxedilNbFIsSWRJeDRydFtIYCw1KkM/NkdvKGt5QGFUZz9xPnFqJHB2WmYjM0h8TGJiOkh2YSpvK0JuP3MuMDdEPiFgWG8vbXdJbENTdz9oRlRufkJ0LFAldSosQihGbTJmbmhMOiN+Q2h6NSg4WHwyITVHYyRbYlp0fGJHZkFAZFhhXnQ7P0Y3cTg0ezhGIVs/'@;
put 'cU9XQ147KmRCaUJYS2FMQGBAPUQ2fFhDIiMzcXdZY2h+YiE7KHpiOnExVDksO19jTElFLjhRZ3M7JEdWfnhHTDooa3goTDgqXT9JZiVeS0MsbiJrcXhJInpXQ3lJUEJxeUNqPn4yQzRVREdJZmpfKjpLJD49KSw/fG92dykhOCNSRz9uLEdqfGhBQz40T0pJVk97R0F5VX1Md1t9e1BJfmB8X0Va'@;
put 'VUdsSEleN3JQK3ZmLHx1UntvRn1uZVtzXSkqTDA3ZXpaOGBzIkpPWD1SXkoyOHBZJTV9OUVsfFF2PTowfCReaExoSkVyS2goc2VlMHIlfEt0aCRZUzZYRmgra2UsbyUlSjF7L3ZdX1R5ZE0xQWVpYjkhRyxwbSg4YG1NZk4sMDRUL2R9X15idU5oUXFXdGJPNmB1czdxfnliNH1FPjVTR2w5VEhW'@;
put 'TWN4MDFWTjlsMDspbihrSGxVPn0vaml0UCpXVzUmVkFDZnc8YUdEMXl8MVcvVyR0NFEvJm9AZ1E/RzBlXnJPa3Y4eWk7SEl0KWdbT187ODZve1BtSm9MKkApOlU2eUw3fShbJVFSeT06NnIxK31NRlh1MS9IR31hZD5hKy8qS2Bne0pYJiRNMmx8X2R5TTdSTjV5d3pDayo6alhYeEJkIlkwdlpW'@;
put 'KDdEYXA2KCNXaFE/ejNqaVBBNSVVJnQiIVZMa09XLCkpeGl0cl9hNHFqPyxkfjV6Xy9qUDdGQyopbl8jfkRwOGc+UiZiK2FDe0NwWmxHaipPQyMpdHY/OGIzITBgKjFuKGR0eHgiPF1wcXRmZXxhWFMmOEZVe2pZdVhPXmZdLjZjO0s6e1dRTGc3LjcjTVpOV3R9SStPdGtHam5ENHNOZTU+N2JQ'@;
put 'KkdKNj0zSjBNZ30reHNlOGpVP0wufXdlVzYsNDw/KlpgQEBHXlg7R2pzXWBacCw6Z340Ok9lRChuSVNBWT9pMXxvb05JLG9COFdQSEg6dnRSbEl7LC9Ue1V+Vn51STc9WVZrYDQ/MkhRMy9tL0xnXWliTmNtcVdQUXd6aV8zVVA1LnIxaXJEJTBqOn5oK1pnXnY3NnUpKXdMIUJZV0NRTFleTGlt'@;
put 'RWckbGRPTHFgXX4vMVZSZnt1MmhJX30mRjFoIW5HNS96JWdSQjFxQEFLeW5QeXlGVFJHdH0hLCV4K0xgLG9OZVBjM1RMTmMsKDFyNUc5KSooQXAlJVMqTjFLLDx9Jms5IiZSPENUdng5bSR6YyozN0JjVTxJZkM4PythZXR3KnhzeTAwUWVKOG0ofGRIIzY4KTo/bSh9Y0pIPC5lKmFqR1N8IT4z'@;
put 'KDV4TFZLYT5QZSw6VjxXbk9ZLlZmUzB5cldxeHRkN0dRa2t+TDA/ZkdvRzJ7ZlhnOHdDVF1iT3MvaUoxcWZaUW4yMmU6Y3dGV1I9WllubDtuQ1FmZVBsZCRrUzhYcnlyfUgzaClfQFVbYz1aXndhbkB6XV8wOGZxWFtHeW5AMy9+RHxYNl8hdmYzfkw5YiJlKixjeXtQKEJgSURZWSplZzNtP2dm'@;
put 'VkI6Om8uLnI9VnkqYy5vWWxrKz4hRSJ2bENxTighdlV1eFtdfDBgamNOTy9IXipXdWtLWkhdKmAxYHsuUFtCdGBwZEV6MClpUXxqTzl9QkFDTClUZGIvem5oOilrSmRdNlZaNi5aSmVTZUNUVEtJVGh2UGFRVHRbbGEwN0whO0IrVTpEOzoheWFVeCZMISpUSCo4eCY7dWxzP2s0O1lJVkExOEMh'@;
put 'ak51XzU8NGRZb3dkdHNlNzlGbEl+bm87bHRwXUsvTjw8K25dPG9KODhgO0hEZ1tscnFOfl0jcTBMfjN2dTVCbH1qTFQuKHZWeSghWnN9QExzJkdLdnxNMjxZLCZSSFAiS0Z8by48OzFGSkZZdXxJeTc2VFoqZV88MjRhV1d6SXlrdTQwQldkTWVXSDxsaCFDZC5jO0ZvQ24yPF0wLkJKfFpvMTpH'@;
put 'RD9qSjxKfV1pbHkjSTE6UXhkMCZdfjt3ZWk4JjlqX0NDTXlFblB3NyVxQSk8VTd4YE5QZG5wV35GRl9CazR8Sn1GL0psenoxTyZBdUdHP0pQVjZ5YkBSSFQ/K2p9O0tPVk5SP2VDRjtFSWomK29VOzx3VjNIQyNyUT8zUEpgPTolV2M0PGwiY2U1cmYuTVpMdzNXd35CbnN5Z29SOzFQKWJbQiZt'@;
put 'LHEuajI5MnJndTcvQFVMNlJNPTM+dlN5fCElT0MhdF1KZGswM3QxTyt6UldFUD51PCJ2VDBjbD9hXm5GO0xhUSV4OV90P2w0MWVFRU58eUk0KjE2aiJAWkhmNWdaWlR4JmFmYkgkVVNZKklNIW8ifTF+QX11cUBZOmJBP35FdkkzbXZQTy4wYjpNJG5HN0ZmIWRjYTo2NGR0bkZ1cFR0MWA8UiNq'@;
put 'fk4uKT9rPFY1cil0XjxXNT8+MnZRSUVYW0ZbNGZtKT9ycDYkNUQ5OUNBX1ZGTmxScjM6cjNgZnNXR3A4TFt6bXlMdj1Ne0t5eCYjbVVUd1plSnU0UXM3T3srW040fFpAWDJ4bkJxPClGRWxjJTJTKFJVfjhxWV55eXVWK1k6NW80JHxyeyIuTGo2Inp3RjhmK2FnUkt3bCg1cD90dGNuYElPcyRH'@;
put 'U2ZHXjQ7JSFgTWBHUjV8dUBQW0ppSVFwLFozbUAwK31oZlJIMyE0SmptRDdqTlhda0I9Mj09RndXInF6KHNaYWtzey9FYjRedGdqcj15dnUzVyR6NDhdJl1mQ0A4ZTRDRWVWUClhSU4kTCNpVDRXMlVzdXsmW2ROK1RqXyVtY3FGM0l3MikkMnZuPUc8PjJAMD1eelQ8LGpKN0hebW1MIkZuPDlD'@;
put 'OHAjLyUwMXV0JE5qNGUqM1ZPIW0jNDs/b3B5P1c9OlElLGBfJFo6bX4kfmghXUxpI2ZjIW9xe2d7PyN5eH5Gb1M2dEMqRnxQdG4oRilrSiEpI1s+JiQ2YDohZThXQm9oUj9eKmE6SHplTFBKK01JIjM6NjZ8Q11ERUx8al1SPGQ2RT9iOCMyYkZFPG5SQEgsb3gzIjtCLDgpZHhnUn17KnFFKDFA'@;
put 'ZDYkUno1Rk06dEV2a3RLdUhdbyMzQUFEaDlDSCtjb00vUX51OThONntPNWt0YTZaTURqJC54MCskITJGL1FUdVtvNk5LVTIyb008UDokUz5KKy9KMDAuSE4hK30oT1dJTUl1QGUoT1ojVXlnbWhBUSY3aSZeQm5VX0RIKjJ+JiZUKnc4ZHdiUyxgPGZCOWI3I0dVaD5AaWxLIS5rJlMlZGRdLl1V'@;
put 'R2E0ej1aPUxISk9jb1lmbG1nbFdCQHtac2FTUComS1V1QyMxaUJNKHJvZyg1RWpfdj5gJSZDQyJfOTc/VDcwcTpgQnZGcnRkQXxlR0tAeStXQE5nMDVeOnxuKlJ7K001Rkh9W2dMUkl2fHhtJUJvUixmJG5vNUphfmQweyhAbUxuWW5hOXkxPWxPUXkvQi5Cd1YxRVRlXTEjNlk9bTdOMG9ZImdo'@;
put 'InhtUlJQWmAjTXRlLFNITDpjaHMhMVgwUVtTMWNOa2YwN0VaVjg8b1J0I0ZiUT1BKnxDX2Q3ajkmWzZ4P15PIipsPGY3X106K1RtUWc4eXQ6aS5zaTtBMHhvSFJALERCK0dMQ2Rsfmw8YXZUeVtlMnN1U2daazZvUCw1NDR4aDtiInFZakA1Wi4rV14ucC8kUXEjKyk+eyV2S1lfYSNBRyttJlZZ'@;
put 'fG5FQzsqelBMI0pkdiF8QTF5blFCSn0qdC5RTmQ9KVNSPC5jRkpURGc/byF7bTlYJCVySWQ5ajlvZHlyTDM7fVUoOVV4R3AzWmpwUCpyZVY/QiJQWWUveSE0JFo9ak9qTCNgNTxpNzFHUiJyWFhBc310bytLblApTyFeKzQ4Kylbdk5LeiswfTxjOSE6JFJGNVhgL1pbKkZkME1OUFAyfFRyVU5S'@;
put 'bTVVM0JKc3AxVGBYJWRmZVJBYTdIUFhrT05eeHteM01rImxOOGM1SGxGW2Nbb0A4KjQ/cCZLeiZjPSg7eVJ3TGRec2hlYyRTQ3U0S1I1azFIdGl4N3s0LnwuJVJWT2YpVCFDOU0hQi8oWmY7fVgzWHEiKSlzUSI0azRHSDIqaD57eSZmenNmVSMoYXwkfiQpPnFaU1M5NXNsdlo5eXtbNyhTLmAk'@;
put 'SVVLOjFEP2AxV2tdSGB+JjV2dUl+cFNve0lrMG5XPUtgTyZiJiUyNDcqOkp9YEBLXVhvODdxcWE4NDF9RF49JHkrTDRzKk9YQDpodm42a3UhZ3svdzIqOlp3LmMwNUtHZE1nPXJiV0M6LkZxZW52ZjMhIzxHL0FgMEJ3S3w/VCF7IWhJKzZJNEZAd1QlSVZSUDo+L0hHdWhiNTR0PDM2QiY6PzRG'@;
put 'cGNwOywyIWRzOlJLfTwwTF17TDVvWlUpJWdPKVpGZ0R0L0VsMCUxSGF6cWJoTmxpd0hJP0w8PzwvakJCMGFNNlk5OmtNPkp9L1kpPHYuIz0meCZFNEUpTX1bZC9zPWRJRF96TSM3ZVJSX1JKZk1pUjUzZXF9M2o9aC8lQmM/fWJmNUQpczRJdjkuQS5lbytCVjVGdFAxcTxLQiJiL2Qoe1dRMEpA'@;
put 'XTUmNTYzalpkT2d7O3NBIjpFKHw7amk9MER4Ljw/SXg0OllgREpgaEN2MmE3WGJxJUQjfVlVOT91Ll5tW307LERnaj9hYzBveEVYM3Z4Kl4xancuMDgoO05SSHVZbTZFJSJhKmM0RkxkQkYjcDxXQVEjXyUkbGo5cTN0NjtmdXE2bCsrclN3SXt5ZS9ocXRkaEo6WkRnKWQ1W04yV1J4Ok4sWzI+'@;
put 'TER3UW1aPU8qWDFhXXdGMG9PW2NFYUVqN1FrRFY5LGcqPkYkWmU7RllBfCllN19pTyhUXyVCfCtFI0khUCJZQkVKKzlNbyJhbTYrL01RVTp1U04sS3c0c1AkbEduIXVJfTg3SktyeytAcjJpK2t4K1UvYSZxOGR1QH1RLitVZztsa2MsK3htOEl+Nz5XUz18ZSRTY0RJcHskXURMVExdaDxxbk5R'@;
put 'X0BlfH1jIWJecD96eVZILDQpZUY8I1dIQlYvN01pPnBId2poZW0sWTEoMjZ3YHpRfEpoI3tHJX1ySnRYV2JWS357MF1jXiFocHtfd3dKRGI9RVEmbUxENyF8XiZBTSFwaV5VW1ombXhiZ1hXb0hKSn5SYUVORk4vNXIpLEZeOGNzZDAmPX1MWGJJYiw6cV4xUVU2RT48VHNDYXZlNWZSOGFmWzx2'@;
put 'aSYvYFM0cjB+YXxzLmFJMVFIS11VLkw1cDFCVWtYXlZebzBII0lwUH5fNytpPDNpRD50cllSO15qU2M2PXBjTHc1I28wfCxdMjE/UC86ZVVIfCNJN0spRFh0YSZyO2M3ekYzOSY+byQwK3UybisuT1VGQUpIPzEucE95P3hqK1VaWU0qaChFMCpSOU0sN3w5KSheXktde0UxPC8qL2tabmRhTUl2'@;
put 'I3U6W1sxTEVVUkdoImwrT1s2R3pmJU9jLF48fEVpXWVmUCtrUnVgKi5QaU51N3Ilcj1OeGRATkNuTGt6OWdidF0oXShpKCpCLmsvcjxPczpPZnV5d3AvOnNebnlDdDJRdndvWzxJNndVP0tDZHwlQzRXTG95Ok8xIzY5VD8oJlRwUzljN0xdLH55QVdhX0taeltLZ0xZSSEuR3dnW0ZyTG5hQiJ1'@;
put 'fTlOJTV9LHZ0Vio1e2NkRyo7Z00uNG1CbTR5VFN3Pl5LI2d8T3BCeXBLY2cvblVDQ1p1W3UvaytQVyZqUjJmTTVDJFpKRk1HQiIsRT08P3p8Py54Q0c6dzxaJUV7cVZpbWIhMSg2aHt9LDY2eGhVPCV6IXUpZW9WWSF6JlNueCVKa1Y+ciojITEsKHdTKz94JjZzT2pHLGFndXdUNDZ0bkkxcl1q'@;
put 'MjQ5QStAd0VRREVxRS9bI3BOUk82RFRXb1RRaERoS3hvay50Wiw7MGBtMWR3P2BxUz13fSpKTTFKS3d9LGcieFAkNk5VQDxNTzlOP2lodWhQLktWfnVSLzBfOW9SL3Ilcn47K1IhR2JfPDpVfENtNTUvVGttdS5sQGIvOltmUGI8M2hlaHFudiguV2ZOW1tGYWhsYlJwPkRaS0Q4WW4rSSI/aUtR'@;
put 'eUg2WWI9N35zVj8jYHRaQG1+OysxRiloWXpjb29jYWJHbGglKV4ibHEyITJzKytpQ3NWV1s6TTNzYUsrMTwrMVNkI28qRVgpeHRia0AyPnhdMm5ZUF1hNjRBRTVzbUk4XVRkQUdJfH4+UW9RTyJYPzlMMGdDXjQuY0sqTkZSZXpLcmVIYj1zKUkwNTM4bkAwWiNyISslPUgqazo+RSlPbzUydnJv'@;
put 'dVQjSVJzVVM3Om12dlhuO0pyb2txfCVAdkdNYSNvI3pKakhUdDA0IWh3Wz8iSGNvSnwwLkRRJXk4RzIqNjpkSDsvdXFjLElUXmF6eHs5MjJfTGg5YHdoOkNmVj1oeU94KXowW1JSdmJrLl03SFVAU3RbaTliZ2x+Wn58Py9pT1ouLyxOdWdxSTopWz8rLkx5ViwhWTB9NmUjM1QsVVpwQ216NjFm'@;
put 'ZjlSKXZRYVtGPlI0SnJ9VU5PY314UWk3TTFFTj8/Qkd1aipLWCYrVVB5SXI8emdGW3g4TGtsaTBVY2hqLnR7dUJrX19PIjk9a2lgRS8oQml9QHcpKTo/dHl0fExRYXBvcFM4OWoubGJWTzA1MkhoSiU2REFQS3skZzlWKTwuLylyd088aisjKj14fjF2SGluRlhOYXFtd2t7Mj5DaEE+LHdpaV1z'@;
put 'dSgxRWVJVkh1NjMmMT9iM1B+T3tCe204WjxkbkZHTU8kOzVSbjg7e0V0JVh3TXQ+RjBOMX5EcU5JIiYkcyxsJDhVYENab3UyNX5XUVgrNzhUb3Znd3szQD5hPkxwKHtWOUw6a3dmWVhJMig0fn4uJW1MMiMxZ2Zffi81OzxFc0giQ0RkRHk+XUleWjd1UHAsZXc5aHx9W2wsMCFmfVF0XXsoZ1ND'@;
put 'dVYxajBZTkYqdndEOnhrQjswblsxQXMsW2BBUyksSm4pQHYpKFVAIlUmMXtZNUhPWWkzc2EzO2xpQjI1XyIjL0hKcyNKbj9bRVBUT05qWEt5e15LWzdjSTkkWEteJkR2PkVOTUN5JTN7ailqPzdxSzd9SX5sbF5dXXh+Qlh4JXpEbHVCWUczaUdINmUveithfXc2c0RKY1FvcilVXylVUm1BNngv'@;
put 'YXNLY3BSW1k8Ymc8fF5mYEBlVzc7ZF15IWRTbHU4LjcwRihka0FvSSh5fFtVX0lYViQ8MXp7emQuUXZvdHl3MWVbMmxRO3JJNCZEOlFhUW5UVDc2InR6c0oxOXwmajRnZn1bYEZtTXl5OmhRakc+bTI6N2lFXTtePEcpdHBCZGYvbSJ1fnxMZDBobkZhRyRtPlpQeiwjSDk8MzQ3L3ovX2tYelM9'@;
put 'ckwsbHZkRmFIfkFzcyMkR20xeml1SjFwZmdMc1VJUS4oMGsjLGsydXhSfFhGLj1SOSt3PE5ZSSt3NEVCbyQ8JDR6TElOOFBeNTBtNzZVJng7UTJYXl1eY0BvKlQjZ15CLilifGhrQS89b3dQJX1gPSgpWUNHU3FqPn5rSlNIK0d+fS48UiM/WnZlIUtPRUZReHpxcDokOVJhPj8oL3k6OyUjezMl'@;
put 'WXozLl91LzM1Z01xVTE3QDUkZXh+Y2oyTmB7NV1JNj50RjNXLyY7czduYTw5QmslT1AlNX4ucVVgZl1aUEE6a0NhZXZkJCRrPl5SPVlkJExIYCFhTUgvL3RBVm4qKXU7KmssQ2lbWVpwOVJ0SCl4S1drJEoiQ3RVfSwyS2tlbW04PUVudyR2eH5zfmRuI20zMGVJWTo3UExgIU89aFt2dzEzPkJx'@;
put 'WG9AbTt9Kyg5Zmo2dyYob1tDV29TdEFTSXUuOGFiN2kyfUdUJUZibXYrMVswezc7Tj9IMT56YFZhXjNXQ1ZvN2xrNDlyJkgrVmEqaDFrbHhhNlt6eChuaCJDfV98VCtZNktAM0BYbUZfS2I4PkJCQFJYbll4cnAjOnBGU2c1X2JKLkVYSFdsbUE3cDRNd1hSTGg7PFJbKEZNVGs0dTpvXioxY0x2'@;
put 'MF9kKXZPPCFsdW9iK1JJRUFjZW00I1ZCKyRXIT53TCxgaC8laEJIRkRWS0g2aU1FYWx4TUNqc191T10lMSVtJWY0Iiw/RzFDe0lyXjllNVFvWH5VdSwuQnNhWzwmJDdzLCRBRklVRFlxYEkrXzxAX0ZOeixefWZlZShiL2JAen5nWlU/e1t4UlJaPz5mYV5oaHtdPmpWWWszOEtHNztYaUN5ZH5k'@;
put 'YVVYNDhUWncwTW94N3ZpbipDeV0hMVtWQjMoWUIrT2khd0E2VTsqaj57fVdfNUh8bFt7OGhMK2pPOzx5XSxVKHh3aE1yVVNnKFBEM05UNTp+UntOSDw3UVNJc0BNZWlwdEhuazE/Vj19VypJQn1CelYuL118aVRJaVpfIiouK0BUOk5Ub1ZxRnEiW24oTHprVjRqWUhnTVEvQ2w1WVp1RFRKXmV1'@;
put 'VDwxVlNZRGZMYmhMQWNhd1hWUVo9O1FRKjZaOTpUZTJ5RTJHVXIocUcpJjF6I1hqVC8leC4xWThvNjM+X1lXelZPVVZnZHZzTGdfazZYJVBrKG13fnkvPzF7ciUueXJnc09eWG9RPVMvZnk/IWtbW1NXIlBoMz1ldzR4VHQ1KGdQPko6PDF3L0hHVV1pYGNRVHgkRXpVdjRkISlBI1VeN1BdREpW'@;
put 'eS9FOikse15HKTJxIUtMLDpKa3FMQEZfTDZqSiQsNC9lX19GUDtXQG9pa2JGI0ozM2QrdDJbRWYqLGQjSmZCWHRVJWBeMUgmfHg1cUJIWzxYM0VoQTRxe0Q8Yyo+TitsTm5wZjFRbVkreygxPSpjKjJMO11uZlhHcWxddlEjQ149NzlxLiswdz4wa3Y/MktTaDsqPVlUKjsmfSl7IVl4R3lEa2tw'@;
put 'eT0sUmxsV0A6eGlIenVMSFs/L2JOQU1EcFcleGlWbnk5KUU6UlRMWk8wZ3NgfF9jSzpIYjF4T1AlfVVmfDkpTD43PVhyNzVnaVtLN21NOHl4T3RULEQ5VnVQWk0kfF5uQjYjKFVubmU2NS80UWtkSzkka08mSDhWWFBmMEIlYy5kKk0hOmw3SUAvOTpzbnJPJU41X01aNnUxZG4zM1dOb3tMW3ld'@;
put 'dUhdIjpxLHteejMkTUg1LltUOCgveVUme2o7OUtBUXQ+I2ZRdmFManBzKzdEJiV+RVh1VEtNNWY1eXh1aDxJaS5VSVV5KDc8Ln04dGYsNFhVJTRsK0dKdGA0cWFLQV5gW1RBaEA1bE9UdE5xOnk5LC5sOUdYNCFEOzhHJmxoZUYjJWxLMDk5a1B+Uk96Mmh3QlV3KGNmPzxhfk9dNz9fNF8/ViIl'@;
put 'T1IufG49RXF6NFBkbVVSezd6cVh8NWUsRzBqMC9NMy5jOFUjWUArTFluQnpkVDslPGJDZSlGI2s1Ok5OWjxRd3c9VEloR3B8SUk/eC5QfVl0NU1bR0MxNWFYVCQjR3VZJFRgXzJJaG9ed30sbkwvbiYzVDFtP15gKkplXj9AXSZoRXNSZWslMiRiYWo7dFt1IzVganQwRExiMDBReSkiTTk2LC5j'@;
put 'SjBQT0tYXiMqSixmWEo/eCVTeyhoR3JhJDszZURvaElvQUcwXVpNPE1uP2Q4REwlITUjaERxKzpHOjd4XiZvI3NmO1NOIX1gRGVLRXMrO0M4Lkx0KlNAK1tpLFFpI2Z2NkhNfjAyJkBBY1tBaUMrTWJyUzI7K3B8dmQhJSptTG9xUkMsLkZuQzl0XlowPnRLUTYoZzs6fmVHbiZWZmg9d2BOMSVv'@;
put 'UGdtbDJQKDM+JWVDL3pnQGBjdCI8IUx5RWVaPitCRzRpYmpXOWJjU1FbPSpQNFchZmFBVFBGJkI/cyUsJismfE9tSTZSLmVveFh0bXQ9RX1CXXlpOyVLYWw2MT83ci5ZeFhHKztdQ3BQT15FYzJzbmNMMzczRUUyITVCYVFzTFRQaHVIMjs6Wz56VTB+RU9sJHBOLiJpYTZ8bHA8c0NAfGMhZXZB'@;
put 'KTRxLFVQRCR6elhiL1NabnYrQkBRPHZgLmMqXVs1OkNENHMkSXx7R2A1KjZQZVNjdUZdYi9iPTVEPD0zTXFCWThINmZMLlJBPCtBRjdocjB2Rmh0OUc+SyN+TWczXTdPOCgvLEJObGB0eTs4R1NXY1l6ZTYqd08wWFZAIVtsUWhRQUcrT3AkOlQ8ZDJ7OXM7akB0ODZmIyFsP2lOSURtemBMNSoi'@;
put 'dXhILkREb3I4RW1jJkB6KiplaXxVcj1oR18uQ3JVPmFiIzNVRntZTERCZ3l4a1ZTIktuQz0ucDJ0MiZaYUptZW57MSN6ZlByV3g2ZWosbW9LPmYyWHQ7I3d2NzcsdTU6WEVmUl43dkdzM1tHTDR8R0BsP05CKUtDXzRmTS9gXWh7TjFjenhBc1l8JG5WNUcken4rOkxrbypdPSJ9VFFhbzZtTCVY'@;
put 'VXRGOVR8UU8hZm0qIUNgdlt0c0JYYjxFeFtxfDBUP2FNdCMvbjNrbXlAeWt2ZldzPWNsNU9GOkpII11RUF1PVm08OCZlV15FOk1jfkA4d3dQYjElS1E1THU5RWhYM15SYnw5XjIid3pqUFd8cFZKYlgxbmA/TUAsWWsqKFt7dWZqTENfYndtY2UuejNtJiFKdGMhMnlVRV9+dEdxJFBObz9LLzF4'@;
put 'K0s1N3wjIk4jZUpVXV1tIXhgKmhMWmZ8PEs8JCNyIU81YUk/dVghY2VFLlBvWk4/fF97dnJzRXtDfnZNTWtdb0E8N2x+Iy40M3cuVEFRK0JzdSxfSmszayUjMioyIWRdNz1RZUY5Y3FDa2grNGo0alMvWVpoREJ9PX4qQnVja3xGeHNqbjA9M1khP0ZLRHpgbWhVUURJYUhCSTx9bEB2TDJzS1hm'@;
put 'Ylt+ay9OemBCOl1ARDpPSElbPGElbUJPUklUM1NKZztuMGheeWZFSTpDbUBFfU9CbChYNzk/KEtpNCZCdGZidD5NZ346L3Z7RDE/RV1ESyEqSXZwX2krVnh4L1g6QWcufXN3Uj1AQ34yWmNtQlcwMEAyRnU5OF1hWlNhXzV5fFBmcDw5TXZ2OWduZXVLT01lb1F4LlJ8K2xOfThJdD1rLFhEVm5d'@;
put 'c2p8QDxoSyxmfUx2VXNzPXE3RkV0JjhtLG1jJSZ2JiJLJU9keWlAamdpT0laSnRFQ185Xl9tfnsxQFtbPDNtaF1edCtjdE49UHo3Ji9FRjVkLiZNbTNuU2g/fSFhdDImeiRpJSZGNlhWWHhuNS5WZDtTXkBOYTx6Nkg6bE1EN2tabnY4RWZ4JHtFfDBAfWx3UF1kI1padlF4Q3c2dE05djdMdzdF'@;
put 'VE0+Z312PEkjSXBGRHY3aiNOSy5vYlVCe1d8ZDUwemZqRDIsKXtbPGlEUSlEZGU7d0c9anl4Tn5ne2FQPkZtaCVsZX5TUW1Objltbk1md2l8PEFQN008eT1EcUlmT2dQQz94O01hIm1bLDQvNWU9XX14RyEpYkJEIS8iN1s3aWxAVlVKc1lSJEJQMFVjfFVvKVl+bjdINGVCfHxoeX00dzIpPTE6'@;
put 'emtXWXhSKW5JfT1LJWdsSUghRlBNViNkVS9UTGBDIzZaUSluLHdrdSYuOD54a0BXMUVKaHpZQF1IbV1kVSs2Qkh1WkdkN3pbVmJ+dnssRkEpdns5YUgkXVN9TS4iZCssYWFackRQcmhpUz8lJUx8ZDpDaTppXWIuJUBLLzl4RF50ez5xKUUmbFJVRkEval5AMywzIzN7OyRlbDYqYytyWGs9YkQx'@;
put 'bkxpW2NLamY+LFkweHI0MGNZfjFtXl9BTVFFUjs4UiY3fHFPISk5fEMvOjBvIVJnUzVfRm9kX3NmT19wbCYxO2ErbiY8TThdMzB9TmpRQXJhSmlfV2NjRWxHblVrL1Z8LCtEbkZ8KW9eZW9sRUMmbVhgVlJaTCFBJWk2RV97Q1g8Qn0zSztRUDlVUVB6KkdmeHh5LnJfdEBPUVtyPTtKR1tBfWFh'@;
put 'KH4wKnhzV2ghK31GZSkhNDBIPjRxa3whQF1+Y0cpWWZCOF5LWkd6VXF5Il8wVGU/I3pYdS90dTFtXUJEJmE8PEw9TkAxcENkUlE7UUA8eHRPeyFAZVssNyhgUX1PImdqNlcrVl11aDJkPj1LVm5BUjRpfFJ6c2hEaDM+X1JBOT5ZfC9LTTc4ITdlI3soSD46WG8venUuY0QyWlM1ZDBia31LNkdy'@;
put 'P2VIRClnN01tZEZqSGFpcnNPTyNXZkZYZW9AeG4qWCtDaHRUVjMpemppPDZMQUFSdkx2UChHcyFiOD56Y24rJH1nKTwjJEBKT3FAPlNwOXxmc0s0cUdRfiw2UTNhLCkhNE5TLn4pOXVraSlpcHZWW1glZCQ8YEs4UG55VypRb3Y+YGEiVXs8fUxSNGgsXzg/WWpnazpEU3t7PUx0NikxXXcoOVBB'@;
put 'Z1Z2LjplaTEoSFZ2VSo4PmxYTXQsMmN9V0UsUVJuWE9hXjVsSmZGJl99LmdRSktfVDB8bX4wcmo8N1grOjMubHRMVjxESjwvI18pN3xLS2tRbk9NdnUvPypHNGp7TnFhIUovZTFEZFAkO3VYXlIwblU2LjIjZV9EJDA4ISMwQiUhN04saXRAPFJ7OmxUcissRj5BKyIodCp8em94ZUUlaj1hfTli'@;
put 'SSZdVUo/VDZaMkU3bGo7RihAb2xORF4ofislbDpeTGdiLl9WY2NVPy5jcGIheE4oPWEjVkNafDNiMz1jOFJaeW4sR1tqc1Z3ZmU8VWRZeW1iQkdUWEhTKmk0WyNpfWJxciYoeT1RamklfCUuRSpnSHE6d1pMQlMzcUxJdzd9YywoTlBXVEJkMzt7bDlyZGcveWQsRlJ+bkltV298fWZ5RDh5MHhK'@;
put 'cCwscUd1ITNKJU8+W3hVQl9GZXdRI0xwM09zdFdffXEwNSRhTks5WGQwQTxxbHxuN2NSVSpmaDlKfCwuTmZIQig2WnRZOVJ7Vk9ZfVMySGV2NXYjfTBgJTsld3RlZEQ8W2pdMnxkU0d2OzJQX352aC80WEV5dDxtQ3RqInc8d1ZLeVNiY081eVorYWVTc0ckZHpSM2g4Ok41UHZPM0BLREBPR0Yx'@;
put 'cXQhL3pXLiE6bGRhIXdnPjd0SWtWbTFbbnkqXkcsOEw3NShfW1RMT21YTFJiTGQ/QlgrWFsvfE9oQkpsOkE8Q0tPcz8kbV15cn1PUSpIWUVfcWYoNXJTVENEPWcrZFZ6VFdacXYmJntlWVQ2YHF2fG5GWTF9TiEscCshen5MQzV2R0hZRkZdR2xUaXVlRk4hM0xGOCpyITgpU05rPC9uaXozMztu'@;
put 'UnpobndvYEpeKDZFZHIxXmcxTDc6d34wVmN2VC92ZD5NeFQ1Yy4oIy9JcjlyfWpzO3NPPWtfPjpOPk5+eiJiYmNmVW5FY0E9Z2NkQklQWmJNL2AsLjgzYCZKIW9raXB7fDVRT0crJUZrYSI7ZiYrSkg8UClfalBOWVVIOmJsNCRvWTtkKDZFMktkY15XS3RjKTxHbDlzN3ZFNEZ6RkpiaixyPXZ8'@;
put 'UVs0NVM6bSE+O2A6I2d8OHRFVyRDOFVPNHNTIyspOSZbOT1BIW81SGNFMWMlWi5tTmldVG8oIW87fGQvZTVhTDAsPGo/YTQ0VmxTZyMkUi9zSjMpNiwqZlRIOldmcCZNZD4xXkhpZS9vb141JVRZRmR+aXFOMyQrfiIlTmtJaVo8VypxTlZlPl1XYVM6bDU7aTNJYkV1RVhWX25FNjtiblUvW15n'@;
put 'P21jOFNEflJ4Vl4xU2tndmZvTSYmLFVxUi9VYHo/IVJpeE5MUmAjRV4/UVI5MjsscWw5YDYjM1tkPEtRO3h9U208QXsrRHRCW1ReST4/NWtuJCNOR1UsOz9QSix0I3hfRlRzfD58TzphbjF7dXtqUWpRY0MhV0QsXiV9aGIqaTZYOHs4QkVKdyhUJWxAITRtL192NCMoQWRsM01pJmhmZTtPJlFW'@;
put 'KFM/ZU5pUVsxVXpGUjNbJDM4cnxvRXJDI081OXZQWXRwNVJTaDZ9TUIqJlBadTQ1aX1xcSxFdWMwVntwNjJwP3xRIU0vejRkZVtJbCwkQkBmJXNFInFTd0heajN2dio4UCt5XilWcVlDWn1TNU1ydWlIRTBfcnI5S2lGW3N0S2BxUT56MSM/YCwxK0RwSU1sfHF3PGheMjZnNk5SbTU7cTIod2Av'@;
put 'ei5gZi8yMitoOyR5ZVksM3RiNUguakkrNmx6cFZdKFRHcWRgYmhBYzdTaXVNNkFjM1hmWHIpPkd+SDVoeDVgOmFbTVVrOiM3XXUqOFU3Pl15RylMV2s7c1hvRngwTkRRYS4raTVLbVY5JGVNS0h9UiRIZkxjanxITkM3dXQpYi8lajg3JD8vMEE5NS9BOSo7eVJCbWkpLl1bRUUjOCxwa2d1PkpX'@;
put 'fSE3W1o8KFZ4Qzxzb35GRzR8dXVGYT9Id05vOEZCVEB3TzQ5TXFDXmA1KGJrKT9UekczdiV7XU5nNGhvekZuTEMzZERJVEJ7cl5iXmBnWDIla31pUzV2OlE0Pk8uRGNQOVdbTjEhKyN+SFcpSH4jS2hJPVNxbjNPbSxGMl92a2RyZ3g/JjJ8N2hhNVU1cH0uMypqOHBjKUFwV3kxNk56Rns1Y3Yx'@;
put 'c290R0RkdEVDLDNZTk9EVXZfb3FrV286d1J6QUdhUyVtaG83bTlnVDI/MWRieTc2PjdmWnVeY0RoZEdXOWpAc1F1Il5QWWFSa2pIemcqdl91dThNc0MhJn49Pnl9byhZe1gma3pObS86bTRhOXJQK2AhOSRNIUZPd0JncSssKSlHYjJKKiVfeUteWmRCRThxbjZRIXRCO2w+S0tpbCV6RGpMS0s0'@;
put 'Ui4uSXNTenF6fWNbcC43emFKIVFPK15WKTNGJU8uXW1dImg8Wy84blhkYz5kLjApSlszMlcmRjdqUkslOEN9ZXlqdHtrK0lSal5yRzIrTVJIMkVlJX03fHF3WiYwWFJfWUdNWzJIZ18/RUd+cFZCZjFWdDNuVjFCQDZ8WyxgQjUmP3RXbU81SnJFRCptX15TQEJQOmE3PyZfdzZOSk1zX0ciIUpT'@;
put 'IipgX18vY1tmNGduYncuLj1CNX42dUdFVG1KYjF6RDFsTVJkcTkuK0khQT1yeTE7RE1WY0RkSmJNOF9kWFg9L1Jge0lKd3FtQzU3T0o8ZSslJUt8O2cue3NIcH5kTn5kcE5qSlZ+ZzJNXUl7cHl+UllAcD43I1V4eG5qSSpEZWQ4SlZfWTh4U11mKXF2ZisrPFs+KzdjWzRrN1d1Yn5xQj1JWW0m'@;
put 'Vm5LOys2Qlc1b318M3VkWUExOlAkcmZgN1UraUhSYzVeVSJdMXNqbjx7UXIsS2lIYlEqWmlja11wMzw4Iz85STUiI1BXVkQqVDI/NltwOH4rV2R0XjVyaztyMjYxQmFGRTttSzQ3XW4ocEM0KDcqIiNQO2YpP0R3bWMzTkNPKlJOIjwiTk01PSNFYHtoKnlkIXNTYTlyJmMzQ0Rhe3QzQnV7Rypf'@;
put 'VlYwSmpqN3tZJi5vV0gyRz5qLj1dcFhNVn5aTj1YSz9sbygoQk1JOStuNHVXfkZJMWx5NVNwbW1ELmJTUlE+flIsWSR5fkpfciYjZiFYZm59bkxQUF4jNSUzRWNBdTB0THFNOyxJQXA9KWNGJjFoQ19SbyEqME9YRDE0M2NlOk1iQ30laFUleXNReDBud2laUk1mK0pBRzw0flE/JmFHLCwpKSwh'@;
put 'KDx4KU9NQGo9cmlkcm97bmc5e2JgOWZLI0JddEFlRH1IYmgldV48X0tfPW9vNylEYmZCJHBYNGxrTHQySnBAR3FqL1ovMzhxNjl5bj0hM1pFL001QiFaaS9gRkhiRElebjlyVHUjLD4pIS5EclF1dUVONz0xa0wvSll5YGVNbH1kMFY/Z3tZMyM+TWxxRFBeNV1BIyVMaCFpUEReblooV0o0O2dn'@;
put 'eHA7Z293dzAxJUZ8NSk/P1NMU35SKmRfW342fGw4VEIyaWIxTDMrcmM8JH5ESWZUaEIuLE51REkkTCV7OnhObVM6OH5nUGFQaFJvZ1NiPlNkKT5PRUBbTywuLDM8alR5QD5BV11MKUtZW0ZNRmUjemRuRjp6JmVkSkJRU1o4IT5HPW5SRE8scmlKQ3tGT31XTCFsRzNCYjc3ZWx3cTwlKCY8Rld+'@;
put 'NVgvTCpaISRhZUNBS3khe0lYeHlATEpZaT1FM1cqQUtKM2o7dkpRPE1uVUEpM0AkQCllaS5UPkVZd1tmLjBvKEIzTXosPCU6ekElcEdYcGc+Y3hoQk42czMsek9XMjQhUGNtTlpVbyVacGNKRHliKXtKanVebHksdSNaXnNeUGEmR2FKQClSfGJEX2pRO3hnTUIkNV83T0BTZTFWeHpMdjRhR3R3'@;
put 'NihNTFltUUJQPDZ5K25rdGx9XjUlJiouejAoL2Y8SGR6Zi51dGozWEkqaDY3TnoxXTNmK0RKRmVpN1V8U2svNEltJWxnLk54SGxDSGIoKXJBfm8lR0d2MF1sPj9bTkNbLmR5KXdoWkNRWj8kT25kfFhQKHxXcDlvRHhObG40d1JDJWl6fXYpfllCe2tffnRKPXJHRX5iWnd8Img/YStfSihCQUIw'@;
put 'aCMuWi8pciVQT3wyaFFaJUE+c29FW0I+WCZSKjJidF57bFRpUHVZPU9II2FJOWBaRmkhaUVkOlJ3YX1PVFJZKWV1ImQxTnpzamlmVUhZPmd0e3FQcWVpXVEySDVST2tWcDk9O2xPZzg3R1MoNTxaOyQ3NmM3UX4mcmo2dSZHYmVYeUh2RW0uIkFgSmRsVGBtZkAwZl1QdUBhSXQidnR7M2RIRVtD'@;
put 'ZSojQUMoKmxgNGtnRSR0ci97MV9FSkJvOmYlckVYb0kmQWk3T08oOCNbIWk9Ny85RTRBSD00ZWRjVV5yenhZZXdZfWsvJGd6U1cwbn1xKyJFTVsmJGhBRkl9VmlYRXNNIkF4akY4SFBQUkBxN0lWJjdrR0svbVk4MzR8O1JoKH4xfGpwUjNIM0BzMTJgI2pla3kkbTJCPnlTNXx5an5denRJdTpm'@;
put 'UCEqdG4zcXZDTzt9V3d4fWhCPThfUzBnZmtDLFUoMkIuamNaOCJ7SFE9P0wrX3hodU9XczcxXSI8OG1FcG5ibDN7bUtrMURscGk4I21QdUNCO2kvNVh+eld2c0ZbbS5xKXk3VTZ8UipeOF5TSjBRSComJl9vRm0oLn19andQeT9+YnZGRHByNjpHaltHSmpyOjtHcippTWNzZTA2TUhPKDFSNU5e'@;
put 'ez4lYiFfKl5nN1RrOXZ9UCU2dF5SbDc7MVk/MnM/O2l7KSEwdCRwZ3pfR0IzU0ZSWzR0PWBQUn4mNFpIaSI3MVM9QzVVYlQseVRiOk8pV1E0V1EyPSJuejFhc20+T1owJFJBR0NvITJpNFdMdU9GP1pzcj4uXmRPJD1+NTIoT1RTVURqJDlEY0huXWZZLzx0aFh8YktSR0QxdGljX0o7Zk8sNlZK'@;
put 'MGdwa1REVChZRCZaQ31iUUNDNik6L2EufWB5OEV9bTx9Xl05LzlVSSR7WGM5RXNoN213aWciMXNjbSpAck5PPmhvZGhfP2d9UikqN1U1XnpKMHlpPTJNam15MHBDKUpwZXFIdn5UPVZ9JiV4V1EqLzVDZCl2QkBnIndAUE5TS2VSbnUqQjUyJkdzdUleLjR+ZiVvUSU/LGBLWTBtbjhnXlQyfUoy'@;
put 'M0BrNHAwIz14OHVIeCJNUHZvOlJrNkBxQmEuQERZdmZdV1h0dFJBNiY1YlFPZGheQmtYbEM2enw0VkZhMFpJc15aRHB3PDgqaENBVTk/UmdOI0k9OGxQI0AsZClPOTJHWkBySD05MDpvajFuRm5yLkVXNV0mQFB0Pk0pKT0iQWFESF1TJWozYlsyMG9WKTtROTBsN2FsPzV4MTEzJTNKIihjOH1u'@;
put 'd1lwMmMmMiZPI0hoekZgSFV7XTNCOmIzXiU6MUt2NTw1SmBkb2FAU3chTSlxSzA0Lj04I089Yls9U1dyaDBIY2ViTCokVTt6Z1p0XnJCd2NocGwvPCREVnkkSSM+JVNWRkB5MVNuVzM1dFQvWz1KMjd+e1VWKGJmdVRWc0xOLl5dbG87PFJRKGNNL2QsYCxtY0ZtMDsoNVU0Ym82MVg8IXx7VFd4'@;
put 'RjBJbWJyJlltVFdOdTBUZm9DY3lyYWchXjB+bnVwYiUvMXZWIXpJL19HeGcvOSlITlJ9bHh5VDx7UkdhJEE8cylbdC8mIiIxbmxZdWQjTElOMGg2K3NPb1JHc19EVW53biJGfiV1VFRYO2xSUnZeNHc/PmZVbWNuPC9Qc0spJWZWSlcxJVppP3NzVyVASHxdUUsoXU4mY2RtTEprVkFTTXtPLyVv'@;
put 'K3tgTUM7Kis2NWpTRyosSCFgMm9xQURiYV9OcGs5U05Dakp2ODo9R3lvWSp6e3p+Ljp5YVlUbEhUdEJjSXBZSHtqYFlWL1d6dHVnNmhdRWdLdWJeLDxZTjRwaWAhdS9zUHs9ZGNmWWZyW0N+VDR3Zz9fdEpfWnE1IzQzQkd9fC9+b0wvbUI5JSh5ITR5V25SYnxdVipdXTJqK0UsOUNnZVEqJW1F'@;
put 'KlNPKEVhL2xwOCYyb3FwT1M+bj1HN3ssa2NxTD8rQDR2Zy99fUN4ek9+I0UhL3EmNzJkQSwuUyQjMmd3bStIMkltK3VNXX07Uk5mOkF7OyFIZlNALj9QRFlQZiFHKmlKZjdLWUBdJVRqRUpHeSZ6MmFHaFVAdz9AdE5pU35uaS9GLj5AZzlfU2d2IyVybER3ci4hMmg4X092RjwhPTh7Uy44aHFh'@;
put 'ZHtpP1VzU2p0RjxaKklNJjY1OVB+UVgpfno4PyVXOWNhU3NaUE44cGZXVXNFb1Y8QGA2UUJsNTVAZmNnVipfZ1NiJVZUQmkuYjU/bHdbcnQqY3ttOzFnNnBMNj47Y2FjYHwyLHRNOHVWTjtWIShSSCN5Y01yZT14WWt9KGdvIXxXZztAbjIvUT95enFaayM8XSluPV46NzdJRml4UXtiVUJDLykm'@;
put 'KWs5fjZ5S2I8PSx2LkxnWlhqS2UwW3xXIjleNmM6NnlHJn1KdSYqejJ8KHxkK2NhRT9yY2l0XVEhbEhIciVDVWtCX3tGfTNyJkgxVFJpfCRBYCI7bXFhJUZ2NVlmWHxIP08+LDYoRClUdU5JPSlrNFBMTi41R1JqdWVsJiFLa1pAfkN2THh0TnteRzJrQyFFLGBSKURaLHI0SDFhaVpXMm9VQ2Qy'@;
put 'REIxOS41OHtDbkpoRmpPSDtTT0BOPXk8UGFgTG86b0dBcWk1WkNfPjBaKD9SMTlXOU5kOFpJYiE0RzAkQyRQIVRLeGVafChHYUouVTN7W0Q6Z300ek0ke096NXx3Ll1hTDwpUV9pLCoqMkk4N3JaZXdnb1B3JFBlSmwsRDpoaisySmN0VXApR3dNZUpmbEAzcF4xOjZ0THBYYE4qWzZUNCF5NT1T'@;
put 'QDMseVAsaTkhUkkwQFVPPyQ6ODU4SiNXblN2SCpNVFVKcGBgU0ddcHEqL2c/SVhHfD5tWFA/M3AvYiFNSXopVXt5bzs+cmk7SVQjan5YY3Z8QXArY1FmQ0NzZV9jVFopMDojRSs2L3x1e303el9TMH45KEl4S0M5U0QzLytSJCl4TmxDOi9kPD9kLGUzc3N8cUhhPjI9byk4PjReTS9HQlolK0Yl'@;
put 'JVhNZFsjUH1JMSxuIT5qInxiXS5geEgsVjV5Y3M7KmdNKVgvazg2WzA2M3NvdE5rMFU3b1ImOFBpbm90aXouPnhhOUldXXFyV2kxcmk+JX54MGxYNTk5WStlTFFFaS82bUBNRVB1TXhvOV1vXjZtMXxdRE42SS5zPHYkJHciLmQmc2NNdE1Zfjw6c01DN1IlKUFMYWVdQUNmVWdJdHUqPSRCRVpW'@;
put 'SEBQOCVNPExXdU4+dWRzUTMqWDJ8THU9UDdFIz1CbEUhRnFhal82QG8qflNIayJ2WWcjPT4xKFl0bi8yPnUwSDhOcmluLCNqKTdrYTRVOCg7QWp0e24sKVNmQFo3TXtXZnVXSnFYdG5jNlpLKiRjKVU7T1BYN25LPlFabm0mekc0WG9kL3hxXmRdTiNQLCI8Qy4sUj5lYih3ekF0PGpfbn1EWShK'@;
put 'SGJjb0JrXjVkTF5IRVV3PF08eTBNe3A7TGpaZClHaTRAWkUyPXY1OGlBYTpJbFVTOlgpZWlJSm4uZzBhdCptMC5EYmxYfXU4MWhQI3A/SXkiTz5yNSJALyk9bGtsMDRhL2o7cGJkYm9FSEN0YVZEKjwkI0MqLDMqUjk1JDcqL0RAUy5CNV5dZnp3eD1YNnlQISRnYkJONlN6IkQjRWdkQCs4bV80'@;
put 'SUtJZFtzbyomUHA+WFoyXmc8THBUP2dzUS4/WyRsWEM7Zn1YdmdMfGojbXY6Pk40RWAlbX01Y2orY2AjMHR+IWFrcWwkL3F4eDg3TW5wV0xuO0tGPGhaXX1+QUBRLkZMdCVjfD1vUmB6Xlk4MGRHfW52TTlNOD9JLk01cFg2czF7ZjIzZnpMKihSWk1GITRrWHZ0eDg+Yk1GWHIiOmpwPFN9ISla'@;
put 'TTRRQk5jOGMxTHV1VVtKTTUqei58I3pmMndsPGwzUVFvSyErOCpDNXxaV2xFLjApOG56UE5LP3c6W195LClIPlAoTF5Kam9wO0BqLyV0UHhmJTt2WnBgPStaSEI+YCpkI0M+Iz4rVWd+U2hMfUx5P1IuUVhefSYuVGZdSkNRYEBaOmBELFNtXT9tSkAzMHMpRUA6JEI8SGZrSk4/KjFNYV81IjIy'@;
put 'eTUoYjhjZm5vfDxIQl18IyxtcTZsJUx7Ryoxcjd+KkFSIyFmPlAxZ1NrU0YqL2ZDdH1lNDc2aTo2bTw8VW5rMzFhfmNwZyJWIXdDTWImNm1Od3pEQiQ9U0pVblJsPHVqIUdqMWQ9Kz1lN0BuKStZeVk+MXxiQ3s/JG88bDN6UnV1R2pqaj92SXgxfHd3LGcrUTlZVkd8SllaclolcnlTYWN6ZSxx'@;
put 'WT1EfSw8Ty83LmB0TWIpbmM7KSZTImgic0NndjspKVFiU2BDY1JZQWB1LHd5dHBbKDw3dWA4XTpwRUJMNU0mMCkqRXwrSWBaRlJJP3lXbyp6NDNHamBhfiQ7aHJlKFYhSmZVdysxUkMwJEVbZzNuejdmdTYuQ0BaTXw9W2ZKX1NnUzklUEVbREQoWFMrYHh6eGFabk5raUJEc3p5enRoYzJaPDos'@;
put 'RFpMc3BzLksrelEmb3dNJUV0Oio9eks7R3ApR0N0e1o5VU4qYjNieH48UWlHUnJdUksmWndSTz5BdG47YTRBTCtLUHg9KUVXXiNsZkh6KUYid35DKzIoSWpDN3Z+fVppWT5LaWRRMlJ8KVMuSEM5fiJATWJlZ2p7RHF+dnp8ZiVpS15ZZ0ZgaylNTE17NmV7JG9JN0pld05FPnJrYEQ6eipXInNL'@;
put 'W3NXRTYuZkUvSk1IS1VibjQqRil1YypeKl8xcnc9TildZFNuWEhtS3djSDBfdHs0KTVWIj45NCl8TjNNTmIzQTJVSzs9eUo4VDIhIlZlTC4rTUpic21MSWo8SUUxM3E/c35URGJDWTNfPTBDbzJGPW5WYX5GKHc6SyheLzE8bDVHVmxMSXY0WHg1I0NUUz1KaG51PURYOX4xPEJxTmh5aENNeHZm'@;
put 'Y3QvNTRxQCZ2SSJwNmJdTVF7VTAvRiVyTC54bk13PlR8TlYmPHI6R1drZkZ0ZnsrbVVIbX5pMSk7bFtCdSZgYXtoJERnJFl0OjMmTFFyZmEkZ0FbQm9LfmVUO1RqWS9Udi5YZSFaJUZ2ZCwqSklWSkNQJlVtIjlbZnA6N3soIVE/L1QyODBgLmpUOWxvZDF6I214JXU7Nn1ZamxpKTF8ejl5a0Yp'@;
put 'ajZhMWw1OUlJNG0peCs2YmYialB8MllKJURCM2I/aCNKKi8xRGYrQ3dCITgqXX5AWlp8cWpuUH1TMz1CIiU2UUMrTi5AU01JR1k3N2tScUIyP3BfdzhzMkhsQ2Z8czIpcC4/fDJnRk53WGBVb0M+ezA1KDJ5fT1CcTY7LDQ2MVsuZ3NdYW5PQkwoKkFlS3l3dTZxPiw+SF9xczd7JS5ZIlkzY1Up'@;
put 'Pjwue0s5R3ZnNktpb15pTl54PUZ8dCY5eXdHY1hmJWpTN1FnS2lUUywyTFYrcG9fL19uMHhAdD1jKTc9P1VKVG8qVng5S1ZNMV9LWl1zeXtpNHcmfmRnUmtQUWVqWXk8Mi44cFZRL2JXKy4pN1BWUnNtKiIhKWs1e0pKPStVVUw6Tn1STks5NzdwJC4/cU5pIjg/UjckUzcyeFhkUjIiTS9jI3hi'@;
put 'SjM/Qy5iITk3UXJaTzhUK0J9XTZRYj5iZS9DY3ZwSzh3QDQ+XlZeIWkzbFFpRz04PzM2RHxrNzdqeHQqd1BSbVFUKkleTEVtSWVvcjZxKndodysvNWQ4MkFKSiIhaW42WVs+c3ZTP29RSEQqZyw2cyZAO0QjQipGPChzQUZ1Kl8wVChkWztNX2F3eytZc3dPNlozeWVSQ3gwe0REdDZ1WU1UeTkw'@;
put 'TUtWTUQ3XiNQOzpScytvI0w0Y2xpRVg5M2lfa1kjNSMmRylCKEVOMk98ZTc2fkdSV2tvRSJ+KTc+W1sham5sQjw4OUtNMV55NT1ebiNARlhoWGdebSxPZHVDWlBoTlZOdzYqe15hW21xZ3RhZVZaNjxUa1lRUU0uUmBBXV9RWCFYR3c9W2Y6WFllZDxBNGxbIzJzPztJeihzOF1XRyVnLmUiNlFH'@;
put 'dS45cH4+JFp+bFdFRWd4W007PVB1OlVMeSFARjUzNE1Xcjh9YlBmV3E9UGJZbn1ZKCJfRyRteDFROVpOdWZ3VktKTFE8fCo/Wl4/WEVDamk5ZDkzels+UllyMnAjK1J8P0YwMih2QT9vWyFZen12NCwrSCFJW10/ezRDQFleVkJFQjR8KXpYLDNgUyFOI111dn1ARjkhOzNKYTJkO0Zna3ZnUHRT'@;
put 'OHhPMkxYI1MyblAvamUxV1omKVlzZVpjZlFdUG1kfGgrZ1NpTThJJShkaFokWVt5fkFwTmFnLEtMbFFhKWdFQURlP00sUzBlNTkjeV9bWnB8M3FJPDEkOFZmcDw8WW5iPzcjOGVeOHk8Li5sYXFjL2glMihXPyt1RmE3Ty99amxqVW84IWFTcUZseDwwREVydlBnNml1Rk9QUWpPOiIhTk1ibTQv'@;
put 'RDB3Q0FkKnIrS0EufFA3eyQ0PEYhND9pRj1mKFIySih5ZSMlc1V8VyxqYSJCSFE5TU1teTpCZVV6PEl9QW1jLFUuVVdULEkxRG1TcnohP1JpaEVfKms4MlR0QXl4d3t4aU98MkJDWjhuS0MsPXA5YHl2VDp5KHNmSCx1Z1ciZEJnLip1cWVZTGVPak8/VjNCQzNgPCV7IU9HRi4yfExtQUkhLmhh'@;
put 'V29YWmdRJklifWRscXk9RHomKyR9KEF5cl5zOjNfNDNNRj07I0dITi90U25eZj97PXx3KC57YGoxSkxLYFF+ZygkIUdydjkydDFqN0dtUmBDUiFIb3M6byV0LnpzZCwobmo7JUBdPz8wSl4pNUM1Zlt7QntddTAqdio3Ry4mUlZsTz4pWUNsOHR5LmBZLHpkY2JJX2J5JUl0YXQ8Vm5OUzN7XlFE'@;
put 'V35oL05zJEcrIW07VT44UkdRSGJkUltsfTUuYS5SSksuWmNsJEI+RX5XWVllSlV1JER9WnN3ekV2cmFbY1s9c3Y4KWBhZTxvUlRLIyRMVH0xbFhzZlNQMjhsMmJqYlQ7QHN6dV8iIUtQYF5Nb341UCtNaHBONkUiQUw6aWd5bSMpZDR1OCVpOlc7SFZtTnouWi8vT0FHWytkSTB2JCghJU1xVjFu'@;
put 'VU4jbyglKTpFMEVKMWtgRiNLa0BUY3UrNFU7b0lLMUUlXiIrXlV1fVNpVWpQejxNTDpKVHZoNnVfOD4kdFVqaV4mZCVRZEZHQHxpMX50IjRyLkkzU1YpLlIpWVR6IXRvPnVAS1tffDk9K10yVykxaXJrZDYwO3woX1lAJGlTIVRxWyZMTGp9Kykrc0NlUzExSk5IYSlfNV9zIzY1RkJRTj4uXnVx'@;
put 'dEI+Iip0PSlOMTNbR1FKXnRhYDtHTW50YX1kYTkmQF1aY1s4bSVWWSwxPFJkeGBTblhCVDt8Nl1CMD5TPz4oVm5bYkl0NX1jWj05Ikx5cXBgUXtgPChwfUxOLnNWYk14Kmh0PjlNNTI5PDN8amw9ejNCQnlqRGAjfGVGdjd1ezpWS2RhTF9waUViUEp0IWwzU3UjeCtaQlAvalVGJlZlWCpKY087'@;
put 'diVLY0NoXjZkJV1VMGxaXUZNUSRSbFMweSpVW2UzTWFQKzBMLzlVVFd+TFtYOEYiQWk8SWlIbXZUIzI8XkByciNZXWwsNH04eDJ0OzQ+YGQpSFc5Yld3QmVPSCoqenRHJTpQOHhWdXI+YUskelVvMkskaiZ7Jj0pNUgmS0llZSM5cjRUPytJZEJIYm01OGBHTWF7KCMuXypiRyh2dVMiNkApX1t9'@;
put 'ejFsc1R1O1o6bXRoPUpDdSwpUFoqZioxfXQ/ZSYoenF4KlpgTDptW3N1bFU1QFEsYTNReGFpWixSUkJ1YyVabn5wTyExdEVgRylRNUJAWmp4aFA4TzUkJUBALHBPTiZ5UVkweXtOSHxQdGshJnpVRGRHZ2ZMdFg/SEZYM09aPmF6Xk4kcFlPP1Y2R2U3T2xuZXQydnp+L2pMLlEveFJCLkxmKX1H'@;
put 'QGM7IyxiSjNBZTtufFczXV5EIn40YmhUWltFem8hczpFSzgpfXh1LileT0BiKXlLQnF9UHhCJSQ+NH5Dd3dXMFhEWDBtaEJdNGZxXzoxcVpyMGJkfEJUTCllV2ZFelJOTix5am1UXl8rUnhyUTRpLjpZJmAmS019V2pGPC5qSTxQLFFXeFMsNENvK0VPNFE+OywwLGdiKW5jdUBCIk1DcyJbLn02'@;
put 'fDxkK1F5ZGdVfU8wRjw6MWxLTkhGeV56KSZpQy4zYVg8UyV9Z2hLZFVmeFhpSDAsQFguMipzJHdzLk0pTTohaFddWXVrLG4xNk45L3pqTSRdRnFBcGNNa3dnQGYqfFA1JVVNfFBDXk00W3klQHV4Y2B9M1hNKj1gZCJyTyZFaWdvdVBpe1BZMUxoako1bD1qPzlGcEpDR1c6NF5vfXtASVhhPXQv'@;
put 'IV4zdXFlMF5sVnZweFMwUGkxflV0QGtZUnB8fWR0eH5SL1hvSTs1bTEkQ01CLylZM3d2UkRqSnorcV93VVIvQHgzNFU2VzhtbjYyS2hzIlYzYzRgZzkiXWtdcnp0eSVkcj1qNTozVFB8fkdOSy5SeT0oYlooQGNGbW4wJnlYWEBtMyFYcDYycz1SZSx1R0d5XWV0aFNiVntIamdGUEFzYXZeNiwz'@;
put 'S1BEVDlXaURuZSZKYmM5NFBUbShYdCtBc3tZKUdKQWoudCt4Jj0jdkhmL1BMRWxqJj0jcilQKDo+UU8kR3hhc0NYMyZ4JStlJSU4OyFhLDZWc1AqaUdOeXhuUWlxfGJdMS5OWDp+OzdbdSJhYG0uOm1nLGdHWk5GcU05O3NGe3JJVilxKyJGOWUzTVJKamV8LGo1TVUyO2AuU1c6ODhAN2ZsWmwu'@;
put 'NzNiR0I0JGVkUUJmXjRUND4+JEp+dkhVKFFxIVQvNylZbVFAU3pdMixGY2cpTlQ2VXZGXlQrT1tzRnZMNHVwOmNOfnxQI0w5VWFdZTJhOFA6MmguIiY8YWtLdEg3dC5YLFNBOmxYbitkNmRQajcvITx2SDNVfEp7MCVCZlVbfXRoTmckQHVCeVEvKDR2IyFWVDt9Xns9eDsqTFleJTgwX1NaRGR+'@;
put 'bUUyanpVbl1SXlcxJUEjbFFMbkJiZEtrIyQoazJTUGBEPkQ4MG9vYT9HSTBIdz5FJDxIXztDWDRoSWcsTEtNPkptX1A6TiFYcmZBaDMxKGlTaTBQaT4mUlM/e3RPPE5laT5LXm0xTDhrRXR4d1RmIy9iJGBFMUpBcVhxZjdlJXhdekkhYlorT1Y7V0wmVTFSVkxMXStDSzUveiswNzZFend4Pms7'@;
put 'P1JVQm5pIX5Vbm1xajt1cWQjKHEpQD1kd11MJmpsW1kxZCshTnFHdF5zUHJ8dklKbyJyWWpjbnkoNG1ZKDRVLGZ9VXksOUUpSH5JOkhAM203K3tRfWt9JVU8OWRHMzpVaitDfXAqZjNaO3xhZ1twdkZTOzQyOltXVk0/aHwpdmZ4N3o9MGkxKzArcS9mRFRkflRQYnMqfU0rYl9oKF98W25Ld2w4'@;
put 'e15tVmZXQGRzYldhK2oxUltSakhsV0MyIUUmV2pQOXBJeWx6ayhGNWpDRDYxM3FSclJYR3hsXiZvLkldbE0zSk06RCZtekZOeERlZ2hDcnx5XmwqKFNyaC95dXRFajEvNmFLIXtDcSg2eXZdcTBDQzhRSExMNnMlU1dXVmU2Z3N1LFFoPkJ9RDowKTlIJTtYQi9HS0lTd04pYEhiVSY6dSNTMn5i'@;
put 'N2JQfW9uRytSRXFsPDpNOnEhIVgrLzppM00uPDZ0enFoI2ZSSEJmTV95dGxvfWM0UFZAI1ZLT15vbkNmcXE3amxUaExVKndYMGxdfT58eE0pYFgwTWJTMj59dmd8TWFRInh7KVNyRz9CSlB4YnZjSSUoXk50YSxlR2UuYW5XSXRUQXZwODlnSmpoVjhgK2ojdzVPb0F1T2F8UTpjRVtpayojXyNe'@;
put 'UGZVbnRFNk0pRCRpW3V4I0VILi9AMmBsOkBlXVNxXl55QG4lKDIsIkd8b2c+M3EhYUx4Ojwoezd1SSNtYWhmXVgxMEYuKXNTXnxURD9YW1s9JnF3Xj5gNmgoOD5KRXUsLDFvTWNxan1aVVU9Kyk5dzlrZ1N4MEwqNTs/Y1FhPWB4RkhiUCJuRiNnaEJAYTdyOG5Ma2RWcjFSZUI2X3xZKEdXTVd9'@;
put 'cThEdG5JPF9iW0VbZSUlLCopJDBuXk0rfTRAOj1CJWNTZDh9ZC56UV4kdTZ9RzRFeGlFOmJNXiRTPiM5KEkqezszZW02Ik8uNk5HZWhZbW9DPFpSX29xNitlJWsmdDliJGU5cywvZWBSe2h5RTdabXtUMWAoSEYpOHZWXWQ3eGk6VXxCSltOTm4mLjp7SSZieU4oQm5odFJRTVlKOEN5RyYhUWJG'@;
put 'L2tZdT14fkdfcHZafj9CVzx1O1ZPdTVUeEdLZDcxQmlVQlRTPVcle25WfERXNEs1JEA9N3xVaz9pQUU+TGs+b3FLaXhwQFJZQ1RAPCY8TldbdGNPPEpQbkJvSVtwTXZWaiNwWyZiXTBEbGxSN0l3QmhtOExQTTl+WERvRmpWTjQrL3tfNnw6eXJhbHohPGZCUiFNa2BUdzZXMG5COn11Xl9yTVQo'@;
put 'ej9Ce3FpfCJBdEQ8YkI5RGNeel1LblFNXktzST9XQTN7bHhneU9qNjt5O25ZfHRTIT5+aGA+VW8iYXNSdENHTWE7PzU0VTRxWkRNalR8RF06NXR2RDJAZktqVXFtUXo3PEIpTTt1cTN8OyYzMW5Te3doPVZ7K2UrUEI2VzRfMVJsUjRrdzdaVzZ5Onsufk0+LFFqTXgpUFN1WEopJG5uNiJeXkgx'@;
put 'YFYlY2VmQCF9ezVCOV1pZClrImZWPUpRPiVUSzckL2N9RGQ9fSZ5ek9pPFZFOiFMLytkbFU9RyZlW0MldG0jUyxbSl1hdD5bdENRTXlLX1YjdzJjczlDY18hNFEqPCwoRjRgWnFRZHVDMnE8NlE/XX5KIWdgUiJsQkQlIlVxck8pbGVKRDI7UXEhXVdmRDBlWjNkWFRjW2kvY2olZyZHdVYjZSFd'@;
put 'UzRMbXBVTlRlclBOWXFMTE16VX0kLzZGUl17VX1ZNDBLSGA9YkEkSEFRYyEzbU9NPCtoXSM3NVgvVHY+L0g8QD9iaU9iUGVuPXlHR3VBWjhKeShhcmhFXnErUXtQMmpqRixLbExubHM7LHddOXBid3hkeHl7KmtyYzgsejIiYmdkcmUsWmxIcy8xKVVYM35+Y301TUZCWz4xTl8jbGVtM2AwMz8x'@;
put 'VWRuVG9NTnc1W1lsXUFhMnlXR3oiQV9CcWA6OndzJEN5Nm1VakNCQ11DfGdtPHRRYDlJXzAsPz88R2BeYD0hfm9fKSlENkwzSXlfM3xJeyM2JTRBeUpTel9oYzBtZ1UzODpXInVIRT9uKn4uIVQzVTEiRj9vIWJzSHE6alEydkF3MTVwJVtbbEw2R3tdZ2ojam1zOXkpSmBzblAoXXAvZU1TZFJ0'@;
put 'fmlEQERxMko5VEB8cXx1YlUjWUpzWVcxeikyO0xKaTZjSnVldys2NTZwOWc8VW54RzUxR0NDNEk9WkBkXV81RiVLVWNxU0IkJl4pI3J6SCtuUz11OmJGJlc2MT5IbU50V1dQRThQXklXSWR2RThyWV5TI3slZ0hNW01dUSMpTUJlOVhoVS4xKElndEpNM2t0Xm82eVs5bFFgbXxrbys1KEo/PC9Y'@;
put 'Y05PaFU3R1ROYFl2aW4/eSxyfk1YSG1OXXNCcVsrW2Q4aVN9ZXJeZChAKyw0dUBAN3BLS2E9fDI5ZXR0KklMPSpVWzdtNTw2K1lTZ2woJWRMeH5qck9DLmQ4Vjx5THkxNUZAIn5WRlYuWDBMVipQKnQvLjpVfGRfQDhCZCtMSzgjamlDIStXcHAvTFIpRHlFIlF4Iz1ENjs8fjp6Z2NUeVduQ3RP'@;
put 'YmREUypaOCgkKTRndV4vOGN2a1BOUWw1LD46JVRNNktNVjVnYHNKLj9kPHxIQFYuW3gqNFZpXnwoTXNZbmo1eHlLcV5+RXp8NixFQ3FGZCpPLyV3Y0FtWkJTfkQzeHxxKkRWb0NTMyh2OEVlMUpvWk5zL2tSMUs3OXBqbiI5PlVPVSVtYUFdKU5nRFRpallJJUd9Rk08XVlENXQ7d3Ymd2JVRmph'@;
put 'e3JhYmJkPCJkI0smJDVRQFB0fmxOZDg2Mk5pczo1SzQkPWo5dn1eQ3cvJFR2IldNIjpHZSE6JD14VnFhSTEkVz4iY0pwLzpIP20jNkFITzsxUmI5dEJgWlhseCpBbjg/Z294WCN7T3AhNWg/YVQvQz1dbV5jfkx9JSlxcyFidH5hJDpgUlZGWl1seXRwQz1BL2IhNEIqUFZRNCF7QiYia35xQWBl'@;
put 'aX4uODBGcnZmJShtZzVDe3YsX1Y6RiteOX5jI2F5M1Z3N2x6N3w0c30rOisuWHFJU1EzXiRTSjY0bXxKeklyMDY6dFMvMUEiVXs3KVk7LFV4Kn5QMG5kS1BnXUQlT0tOU2hsOmo2ezMhOnxlKU1LXzFvUDUoP115LyxRcUc3QmlGcU0+N1U7cCxHWkh+PjtLODo8aXUoPUg7QDN4NCVxVzxxPmYx'@;
put 'bS5ZRVhUa0xlQWBOYGFQIXM8eEJTV2F0Y25UZ2FUOHNkZkArRSIoMHhOfmZtQExvSDgmOVhKbEcye0dJQSJ4JV9vVkxUKyxaNzReQGp5STEoSXg8ekFnOFNwLFl9cmkyPCtoUlsqPnYoYkZAZE04LiZeJGNuZlJJJlBlREldUzJGczQkdDpiIk5kcFoqRFFKVn4hfFQ9cXwsLFZEUGE9TlZ6I3Ff'@;
put 'cDM0QjVyU3dUJDFRYHUhZmcoZGksSV9TQVNwQFpXYil0dWwlbiRDRXxLeihlP3s8ZCpja2VFPXd8RHlRW2hVVX5pVzJ7eGxYZ3Bva2M8Sjx1JCJLQFFBKyRwPT1yejhDdWo/L0svbCxXdjU5PntuR2FmbH5wdi9SRFFHWzU5YEkwPDhaKmAvamh2RTcrKjlEb0xnJjhASTBfL21gc29WQUBWZWFj'@;
put 'LztqTS5AXm1PXWwkUD5hYWdFenBIMmkiI1szaWAvU0M/MXE1dCpoZEFqQXdlIWRkKH1MMnosZiVLVFkjJkNRIzBXMnpdK2YjTWwzb01dckRncSY4VH10QEovWihBQnt2Ry90JjU9V25eejUqaV5XXVVhM3RQZHYkTDUwQDhDajZ9ZSl9bmM8Xl90LjNRbntiQSImbzBQTmlWKXlrUkx8Yl1KLjJ9'@;
put 'LFRPMGVDdyVkUDwsMFU9eGF9MWBgKWoqYnZzQlFDNz1QQVRIMXRXQHhda1VoO3lqeCRaVjlJKTpofWVbYV1AVGtNO2hIUn1jMHo+b21xS2cuV2VZLm0uPX1WWmMuTUw4WSE5W35ROUVNY0lPN0whQmxZQ0g1Yk9PJXRRK3BhPEVHJTBOa1R1Z0xhaHpoa2YmUmN6IzE2N35zVyJDOlNLSWJvOlFu'@;
put 'THBuTTNSaH0jT199KD1SfWMzWHElfiJROlk0ZysmU1RENmY6WlYxOWtvcnU6YDZePTl0VkYqRVohOH4semN8d35XbXREa1Y3XSN6OEJUR1NMNylRKy91bzVgOSQ0JThnOFI/QWdTPjNTdG5bUl5KTUJRKS4pXVZjK0svbHdUZkNaYjdOSk9mJHBoWzlBSG1DdnZEKz5banIkWmxmZ0NbbWptZjhh'@;
put 'c0MqdlZ+SExbVUdmckJmfktdTSJNbCteeWM/JXhZOFpvb11wXkJdbl4uVEF8eD9ROF1LeCNkU0ZveTU7SiZOJXR1V2FzcTwjVTs4VnB6R0ElK21sV01AVzNEbGF9QntrNiY8ZFRmdy9uPnlqeWQyZUBGPVs3KmkzcHZXPGApTkhjTV8uNURxRyhZPjlMT3ozVighKD5pZl1gakdNZns4MDwxTVYz'@;
put 'eUlgaDhKSjYvVls/MzFkUjlBLyE5QlFpOkJbd3BbWmkuNCE7W3tEfC5OMzd3QS4sbjc0ODZHdDpUfTg0eCkyc01hUl5MTTVnY2JwWy5sd14qZFFlPl9eY1FxMDBVWj09LFY0ZltdPSp4Lyo3MUkmalBJfEghQTlwKVI2OVlIJiQ3Q3taKFhMT0tNXkopbnZ9SixMTmRKLlk3QVJUbiN2MDBuTGhW'@;
put 'dm9bWWpSS2ZbVGdMamBtNl45Z30lIzFyOC5JKCs7PXM6T3Y8ez8zLltmcUJVTX00L0RgcDw1Z3x+b2ozcm1bazBtWkk3WkFpPk1yQlAqQ0leL0E/PVFsVkNETEMqd2BrO0ApMU9CdChwOkRSaz48QSR7ZExEXmAzan5qQ28sbz01OlNPREYqMz9xeVF7fH5XXUJZJDJ4dF4pNT9QWlFIcj9YLzAm'@;
put 'cmJSd2JSJVMhZz5MRihGfkNvVlc2YUcuRGt6SWZMZzdnQUZMcTRUYl5Hd19xY3VwTUgoUFN3ZmE0ZyViNVBzYSNrbmlyMVk3YVtlYmwhWUQjOks/O0I0NzU/VHdKfGhJdi5WLEovMEpAV1VWL248IXxFI2ZYR2htNiolez9IV3EvUmN6S1hmb0BbYFhgNj9AO19KeG1bMUU3SytAIUN2SmNgcE07'@;
put 'ZntARy4kVjszfnE/Jm50c1l8OkZrT25EWWxBWVAsTjdmQXMoQjkiNFp0bjcqd0A3MUMxQiVFZHZGT3BYIjU0elkrS1FiZHZMbnVmI0ZdJjxLOUkzJUVVbSZ7V0VRcHVCKTw+cDt0O25kcW1UeipbSjZEei40NWR3JDdAUz5GJUhmfHdkdG99RGZNSVBtWU57VXVaJTx5ZkJUI1ZCRWRMbDFSYEJd'@;
put 'NEsuQTdyTnBpO3xLZFJ9USQ2WmtEMHQ5WE1qOmpuYn1adU8oJU10QmlmNnRbQDVzYiQqQzxFayJ8OTMzSjkibWkqaCNRQDkkdD50dm98YDsjUUxNeTEzWGNlPztKWi8qZGR5RGl8Py59WUsmZX5MLHZ9S3xBTH0kYG0yIyVGIyhETCVsJHNod2heNEtsWzgyYzdsVSQ4JV10Zk0+SiFjLHVOZSNp'@;
put 'fVFgb3tzZUtmSyJVWzksR0tCYWxDJCZwZG5RXWhMMUN0KT8vXnEpK3Nlfj1aKmxkV2VTeEQsIWZpNlFfbl9ASiJ0XjIxZiRKYjE+P01nZURaX3EkSyl3T19YIUEuSyVvOnhTWnc9PXQoSyxiM1YkIU9dfGhLNkVzSzR0KiRTRUVPaVdOc3xyKThsKV5+NmR3R3Bve31vMDV2M0FZd347VUNLPzcr'@;
put 'TCYiVzhzWnx1TWl+UiNEeCFWZCRmQ0h8RU9LWUVaOGtIOW8wVGRmX0pFMHw1ZXgvMCFnOkZdP2tZJEc/UlpdO1N0Vl0sYnRMZkNpN1cqODRYQ20/bHJES0c4NyskfSQyJEMlOk9uXWs/cltDPXNxdzQhflhqcnFZOFBua0VPIWdLPT9fTTh+KW5kNW1uKWtuRiR3TiVzVH1gZ255UnlSUHJpUCp5'@;
put 'WjVXaEBjSVc8T2teQ3RfJiVOYVk2WncyKT5MfFZUeSs6VDU8MHJgXi53SiFORD9TVCtvc2tiQ25LZCxZR11OeDtwSHUvLmJSa3hEVW0ycylEb0NwfnlrSSt6L1JOQ2QoISFMLlUmWlMkamx1Y1BIWlt4R0dHUD5rciw5WGUmWDZMW3xTc0dVOC8xKS5hISo9KDNVYE00Y31pKF40ZnZMN1dJISU9'@;
put 'dDRMLmEyOlU8c2hrdThuViorLm1CNWc3IVlqaXh3I0klYClFVUdCY30/WjsmV2ZIKTFBc2spKWojKz1AZyM5czUzWlNqMl53V11ZeFAoQy8hOmgwTFFGZ01iSjEjZyk5JnhwIUhrNm9ETURzKkZ5ZWspZikrW0ZEdVE8WTJsKyZbOFoibD0sYUxNTDEkYC9VdTFOanVGL2ZaYFkpfER8LEg/dSo5'@;
put 'W0ghOGZqKnIpPzo3ZVUzUkM2TEYsQFR4KDMja006WixWNVVXMUo2RzFMdSE7UXExdzkyVU9QbkhsYC4uZ1M+QyRJXUoxSnFxdE4sV3l+Ql8kaUB2Slk6REtjT0M1NFFAOlAuNl8pbXdVOXoiPClVeD85MTBVRDFoVj1wUnEqPVl5MyR5LEJjRiVxd1pidXBIfGVvZCJpOiRLRUM2TkJAU3A2MV97'@;
put 'QkM2eT0qYFBRalZpdCokMUxbQHdzcnJmVmtZc140SGY2bWZRdFdtcGphQDsocmIuZ0clPER4MXVQfHY+YEByYVNSUC8vRSlbXSoxI24/QDQ2a017YVBEZ1kyXUA4JDwmaixbT01IKEZvQXdtYFlVUCN+aF9XNn1+KEhSaDNHV04odnVTR2hffFpVNVN+I2dtZk9RdUlKfSRKcUNCNyNUelBeSWlj'@;
put 'PnlyIl5xfHd9dzJLKXQvUVB4REclTHQqP2pVSnopVThZb11CN29tT1IhLz0jV35vNW0pL3p4KypbXytITyZTUE5JU25VZGQpTElSMCxzQjcuNWxDWmBVcT9FTTF9UDczV3p2UGd2P2NnfmZ+aVRIPmkvNk1hRyNeaj5ZRUhwOm5CMyVNUSVGNl0wSTErbkIhRm8pM1l2Y3ZiLm16KEBsNVJFRWtE'@;
put 'UGFjRj9UU2BXK01uK3Moc2NJJEVXVykwUXcvRSsmfH00dT9OcWNrZFQxPWI0OypJVSgzdC5gfWNwL1ZaUypiczpESFJAbkhvMjtpR0Y8Ym5xKEVLXkplLislL0VfZTgkQ2JhdzY+K0dwJStLRGd5OyQ/Rl00S2lLdXMpeVc5QlBhcyFidXYjTm1dTHR4JXA7Lm5Ic3oiPjYybCQseG1VNzVGTWhv'@;
put 'ITJvIVRXISFYQioufi4sJXoseEVfclhvcjs6IXpITkdNRFZIVWJbVSgsKGVkOjNTQjBVNUFAIVtgI3RsTj1QME0hN2d+SHlQX0NUM0NjWSFmP1ZIJFc3YkVLSG91dXNLS2EuYzpNR2JAKnJRNnhLcjRvUDxzVmQuLEZBUFhSPiwua0lYSkF9VntyWHhmM3VQI3dydH49NkRVbnNpei5LdG1sTVIw'@;
put 'eyosQkZ+PyNqWEJ4UktDLFIpOnkwOns8bzRdcihzb3lsSyFpLjl4fCQ5anA5dV4+L0ZaKTNgMm4+b0NiYTxKIVQiV01JYkYhazAmW3MsaEpgOjdfYWYoWD5te1AkPmBSV2dNM1duSEE+bmApbG94aXQlQ3hGb0Z4UUIjVzJ8aSRGSVAiLn48T2RrRldqMCk3SSVYdVl+M3JiKy9FX0FpLFQ4bj8o'@;
put 'VVFiR1VMWzF1UzYrRWpQbiZzSXRWWH5ZKn1USyFXQzRKSXs0PDJhSmtmYk0vYHUiSmgobzxEaEw2RCNiIXZPa2tNaUsqcWp0RHVDKTN3WDF9aFZJIjJaX1U3N1IoVzwiSHQvXWN9el9TdDpuaiQuRn07SWxYT1U6az1+PGE5XVZTWmkiV1lBbjV3dHl+JEF1UzQzcFZWLHgkRSE6O1JzKm5CLz9H'@;
put 'SmBEY2hCZHA8eih8d35HKWlQJiorcElmYDlPSHk0aD9xIUZXaCo6Xk8vRDJ6eUVbeWllcHRkVz1Ib0kvd3B9a2UpMCEqYiU3ZUApXjdvYk9pQjhlSV9xLE11RXttKn1YVjhuaHVJZz8zO3AmUHk0L11qOENGYEFBUjNiUiI0dzBrZ31+ME5wXUohPVlHbHZUZF5PPT4oWztlM11UPiUjVS8iQFtN'@;
put 'bTlwQXt1SWNEKWpyNWdEcEV8JHp4UWBBLFJ+VkNdIV8kZD5pZjJfdWJZZ2dWdFtYUyI5T31fS15zMVZVMWU6MD5gd3sibF9aIkxzSXhOUW97NTdqWDBZWTxWNHUpam0oPGglMTh7XVt7WGg+ZEN1M2NPQz1gQWhxRXJWc2IvM3o9fiZ0PFZnVEFhYShbfD9TWSM8IU02LCpjYEFGd0tlakwyfEh7'@;
put 'UkRlJnFSKSNGY29kPDszV1Z+ZXh4e1hpfjw8VTV9ZGVObnErViVfflVySWZTd2Z2aCpJJSpTQCswKCgzNCUua1VdTDx8PFdlWipRMTluQHgmVz19L1h9SnEhbUE6UlNMO3I+eDt5eHMkJEQ1MC9kYVNeUkUoKitnYCNUZENqazgib25YP3VZW2hlMGpwR21JUjppYkIvazkwTk51OWtrRztGZnNp'@;
put 'aiM8OHJqWz9ffi9xa0RfLFdATyhKc2dOckR+PygqWG56VmVLczB8c1prVStAMDQ0Kk15WXpIUEdaU21tJDFHSCxRLHJ3MW9MOn09bTYqNip4TFUsejRdVlFJXlZtL3UiTWMhT1FsXSUrRl56TEhOdDtOVSFTNzF2Qz5Bej1haH0pPHA3QTk1W01ZaUprQlUsPFFheXI4Wy5VcCovRikiU2Qpd3Fv'@;
put 'ZWk9aVZiJnNQc1g8emdRIWYwOmlzayJ1Tm88WndkWywpWTYvXy5jK0ZgW1VwLDkxQl9LJW1reyJHOy44aVlnci9SWC51NzlXQktCJW8oT1NvImp2VTNaeWhrWnB6X0lseGA1NGl5ZSFxLGNYMzVHSnY0dzptTD4xVWghZU1iRz9TeThkKVRRbk8lWURmJmFBMSU6fkVuQn5xLEZmZTUoYjBudDxh'@;
put 'UTxaXWFyQ2kjTUk3K3dKfmVLcVRUeWpJamBFI2xmYSkiIT1ESiYoIlMyWnE+cj9GUnp6QSFpTTFhSXl9eGJLPnN3PV9abFVeQTBbW00sZXFLU0pMNDhVcnExNXArc1siY18+Ml8mPDw/NTw7O2N6PUA7QnQxLndycnx2KmVpQUpuUz1dclR4dSRpRmlQbns4dzoqLCJbVHVsbkdSS0NNOys/QlVD'@;
put 'cmRPUSEmeVVIcDQlXW5nT099NHs9cGpzczFDYy9kNjlyKj1pNVBCXkhpa1cleDdBMW1pfUpsWzg+KmhlWDprUFY0VHtTVHpuTS4sIypePyQ2QWxWKU4ocilsWjBPT2tHb05uWmxNMHM4XSVvSioqU2lPNFVifGleNzVWSnN4XmJ3cmF8SmNgSXRmNXN8UEdySDQ0d0IheXhpfXd9Qn1yLD5kZVM3'@;
put 'bF13RlJ5d0RvbDkmWiVhV0U/UDIlYzJ4QzMvUWcuIiZ3cCxVZUFlcUFIaWQkcUEpVShrPjI4WS59KUE1OC4wYHFVLGxeODx1dnc/MEIrWD5UWF9kS2M0XipWdDJ5K2IjOzZRNkk5eX41PGJ2QkRzZWk0ODhoelcmOkFkKTI9e31bZVFmIVlqfE1yNmElcHluQVo1akc6U2NuV3gmTFhIU0RSdFUk'@;
put 'Rj92anpgTik4ZWxmIWo2JmBmdm9zSUZYPTk7aExwIW9jVlBFMDhJZ1tvYjpfIUB0WE1WJHc4Y2sua21nWm9PMF4kQ2NVdVJzaE9fV1laW2dEO3c/RkMkdUpiZmNBKHI+MENRTGIoNiVgLjdWXSVRd1RecmUlcmxLI0tmNDpBOiZSfF9dXkNSbWo9KjdPPCFJa0U3bldfQXtRdDd5SjtwfUk6fEd0'@;
put 'YHtiS045W3JYQylCUSExL2IkUz53Mmw8MDZSOSk8TEVpZ0w5VTpEdCJMNzRQSXU+TTkpXmAybD9BLDxGMy9xLkVMcjVJYUxVYTtxZHZsNSxMYiszb1dKbGxkLFc3bT0/bVg6O31vfGRGbGE7RGdVT08sb2VGTU5fU2R+JXREdD1fbjNrKjRZS1s0Uy48LmovOnxeVlJzLE15Q30kN2t4K1p7QWQu'@;
put 'RjNnUlR+OV5TNChjNzA5P2kmYz1VSzBKTzI5clhMMWA2Nm59WzxmcCUjUCJUSmBXeighVCZGV2EvbCFbXTA5LFYiZStzW05deTlCPzBqUGcvT29vS25nNyhLTFdbK0VHKVtQTWd6Uip9fUQqdXUvY0lVUiU2RElVISVwUzgjfVZtXz5dMnwuSE9EQUlBcTJLMyEvTTIyR2lPX1NJcGZySnBkdXJT'@;
put 'cypYdDI8RDBFV04wUzFxWE94dyJoeUpRakR1UWd4VTZLblVzYWN8cjshPnpsTVdaInRTIXFNcGpJQUFvUkBAND9HIUssWj1+QnVNYmRSOj43QjBIS0cjPzA6b084d3A8amI6ek5JVVZPbFQ4Ln0kVTBoPnBZSFMpKSVFc0Y3LCtLXSpOQD0lWyg1eXFXPHUjYShIWjNmbndtQH1iNzROY0lPLEpI'@;
put 'Q2haMy9TbV1qS3Z0aUQmYH47RW1PRz1MaVdrMGlhOjl7fVk0YF5tazR7KDZ5MkZuJT81dS5vVFYyZl5QT3NSOFY6XVVPe24oel5IaXJfQGZFd0JoSFE6N0dYSCxZaVQ9SERCd342WEAqSio5PSpzbE08TTpCdjAkSXx4QT97fWxBPHYsKUEzIi9RbTAjI35yYEcvTDNaY31jZTduckFUKWNhZjA3'@;
put 'TCJXbmpzT2hGJCpHPltdJC40P1lZIzNZJjE3V3xFLjNNPzhXOSZdTmY8ND9wXVJ5eTYsSkx7cSRgaGxPRU5RNmM8K1JnZXY2SUVKJSU6JTxxTngkW1VJcUNRMkBsJU8+TVYie3FQSnB0SVtiYCFoLkV+YjRFRjcyKGppLFRSMyZOSjliZ2ozQjkuQUVIQC5OPWp1SGNsXkQsU25KUkZGTnQ2cnY7'@;
put 'bXdUIyxKc0BHPVQ7QzNlek9pfH1+QGYvWGAkWj9yfEc8fWJpb1VWeVBNSHR2anI1XXJJS3okKF1WOj9fPllOMVVIST5CIUVsZCMsU0xCaE1dcl9jdmAsQU0iQ0ErcixkJTxOU1hDOko0S3RPN0dMXXokYEkhZVh5VUUmPyRmVihTIngjc2A2VnRtNiRubVVXImd9fWs1UlIrencsVG9QXlg6Qjp+'@;
put 'OnZsKjdGbVcvIUlDbko5fktyPW8sfHMmSnVGYkJ8OCFdP2NnS3RYQGFxcElIKEVMZXJHfi99XT5qcyJbe0tOIkY1ak1Gd3ElcGErPFV0bz8yXTxfOypnSFpVWDdPSWoqYU1vSEEzMXAmZD55ODo0fnJxWn5MckE+a0pVQmEhflpeSVI6VDZtMSV5OEhNOHk7UlZSdHxqKEtYaS56YSRmOHl2Rjol'@;
put 'PTc/e3Fvbm84RUQqbWxgRjUsfE5QTylic2ZTODpBKlZEcCxMWURibyNNbipUXl9TfDlpcz4xImErW0pydj9vb09tNSpGWS5MLH1xRjx6SSRUeEV5Y2NIVnNqbV9ze1pqZykyKjNsbzQ1bCpFc2IjZ2I3JVl+cV4oJiQ4akRHSGR2K1FQfGR6MFAhcilCeEIqQEJsSmpkencxKHh2WHY1Y1V3LmVF'@;
put 'PnRtQ25QNmchL142fjpzW1ZtKmVJJFZxYzY4eCxHITd3ZishPGZjeWBpdE1kOi9hfURxaz4mXls2K2RBYV8vI3xEXSFaRkh9UTIqJDZzYldkRDJAbHo6cShsfEk5a2Q2NTgxekdgUHo6MDV4cDBYZVNdYkZ4NEJGSShaYXF+YS8kWllUWktFb1ooN35rTkhQaCl6fi96WHNwcmxbR3VTMD9DbF4k'@;
put 'ViErZnI3ay8maWhsbEVAQSpFNUFgMlM5TCkzbml4QVtJTGUqUnolQCZKajw2Zm98KV5wVXVwP1NNcTRXKE49PXssXzo3U1BLUUU4e240cE99PjRFL3lrdzdtbVpkT1AieFhEeFhYTCprWWNnIyhHTzIpTXljLzQkVkEvbiR4M0hhMj05dGBhPTwmSTgyaFUhPmwrfStEIU8yOWMvNjE4XkNOUWlw'@;
put 'eU5kWyhPJnBfOHxrP3s/U0BkYCRNR15xfThVIVAhN0RLcV91STpuPD4vUylNWVJBQUVWPWZPfnJxaGE+LE9YQkFjV11iUmpFP2ljQHRCd0JPcSsucilhdjFfUEgqZ1FzJSkqeTdyQ3B6eXMxQ0s5YlIqXU48NnpaeGUsdlozY2QoQmVmSD0hbFQ8NEBsVFZhV1FtbiQ4S3cmNGRDfnpFY3NncyRB'@;
put 'MHYrTWwvcHtldlRielM9OSooRVdXYks8fkklanxTYjtuZ1ooUTFoVF92c2NFXmtqSjpjIks+QGhOUXplI1BJNm9VblhiP2d7aG12PnlycntyO05QaCNCTyI0ciIvLm9FS1ldO0cjOiQsc096cjFLejM0V2VwMUkuWiY2PVZBIVBMU3c0TUAue0tXO24re0xOUDB9PWt9OTBDP2VAYUNXWVd7QCl1'@;
put 'IUAham5AaE5QXU5IOkRwPEBWJWc9TjNefVleYWxWMnsrVzdIMWt2dWdwfXZee3Q/Vm80Il55U0I6W241ai5tI0gxYzZ4Xn5YUHNNfUdkX1QqVUJIOz9DX25wdV1HNFMpPGtGZG9uWm9eeHIhL0wxQ1d0M2IoOlZ3XV9zOVddYSZVVVs0dkh0WFQybTxvdDgidilXfnQ2R34xa3VlclFHOllrIVdv'@;
put 'Wk1CP3R5cTxbKGNUMHdfMjptKStVPVdQLnB3WGIpUHJ5T2luMC9xSG8uMmlxdigjUz88ZmUhQlpQQDQ/S1ZdNCQyPlJ6W2csbzdQckBzJmIjJCZmWDZkPkBbVFpOR1FeWmtUXW04MC8+R0tiaEEuT0pJNEI2PypSaWtUaU9JNUtITzB5SS8hOEoybGQjKk8qSSpRTWVmcEd0bTtCXnBUWyxrfC8k'@;
put 'U3RqbCRsIkE7SUA8aU9eYTR4JXpVVCgocVNCdHJ4LmU+U2U0TWYkPGwkb0YvWzc9ZG5kOFFmcnRnXW1ldGlSSSwuSEJAelE8JmlXfV9pZSooJTlCQTYqKDZ2X0AlWCZXJDBIOlJAVjZCRHolKHovaUY0ej9XN2lVOVFJS2VbU0RCfCxlU1QkK1N5Uz9EVGt8QFlNMlZqXjUvXjBGSzJ5KSgkcGNB'@;
put 'PmY1JS4rei9UaSE1O1hZLloye2s+am9OYWQwaGoiJkBDSyk+RVFzc0RLenNLXUQ8b3xAV2lmV34ydEkuYU4sTWtETnpePDMsSCF7QntwQGRPKE5GJjZ1fGUiOjxsZl5FW1IoTEkwfjR7NzY/clpIc0EyJjR8O1Iiakh4UypqKWcobmFPMztqWzxNZ1tFWFZBYkZLLnxdcjBVPjBFeS9ySEsufH1X'@;
put 'bTd1NVQoQXlDLm5HKVJWbjZOXU4rfFBnN3BvOlFrV29yXkZ9ZUJRPFshKnh8U0ImTDRaJXNjKjhdVUpWKV8uIS9fPEY+VnFwPlI0YjBfSz9+KzgxRSlqZUZ3RyE5QH57Qm4jMGA7YF5BTTZtUSpnOWsuRlhENEp2LGVCPmNwLnA7Szl6O01SKGxDe3ImNWxXaXt7WyZaQ2MrMGtjKSZkUkFuQS9H'@;
put 'Oi80STRQIysyYzJ1TClzNkVZXyhVS3hJMHpCVTR6PVhIQzpiME1TWWJ1PjpKaF5BbGNXZFVmPmxZQlJNOmMpUHoiZzYxNFIpM31XK25zOyozXkVNVmR0OVBxckRNZSE1Zk5DKjhvMixOLzYiJn5tOGVYfndqXnw2Z1ZkOSksYnovSC9CWitGcmYzMlNUeG19bD5YPXtbSFVtRVdqdzEzMCJ0LGYy'@;
put 'Uixne3BZUVFJSkZiM0ArL2hZPVduTVJFREBUe2dLd0NQL3NAYTJ1I1c2fl5nc3ovQ1phTkprPU5UPCQzTChfe0s4enhwMz9dNlA7WWF3JWZgZkxOekclVWdRXXNtdmRwTWwpOFZ5SlNDTH09S2xxZl9HIn1OKm88ZTw9YXJ4JW9rND5+fSEoMDpsJTdGMkklel15OX5PI0ovSCNpbjghYXhbOjQj'@;
put 'KDosJXhOaEAwbzFDcDFMP35TMmZXVWFjT19vQjIlNylKNylefEhINCg9dUdsMyZ1bCkvOTs6SVY8ZVFKNCpfK317MHdCIXJRTFkzJll+SEomQkVYKXE2ZFFKLDpTYSVnSTNrVE0vM3BAVF52YHEqRS4laj8hSmJoUmw9aj5CfGByZF5BcTMue2JBVmsxRi9ye0dRYjJ1TCJXXl1jQ3ZRd2tuUGlj'@;
put 'TixTYjhWfnppZDt9MEphSEkwKSxMKVAzVE0we0NbX0ZTT1hJfSk0TUpzXUtwdU0hYn10QE5ELiM9a1tVTHNZQXszZnwyYD9JMXJhK1hQeVk7bWlFUn5kaV15fk5gPV5HajlZIW9mZ3Jad1tDfFN6UjAuRHkmOWRHfVM3LzhJZ31JUF5XOXM3M2NAZDYxQE4le0VnKkpHeyw2S1Y9a2phM3BEcl9z'@;
put 'K25FTUZhYHx3Q2whUWFqM08yPj9eU19AXzgmPkxCfD5fImFDNEJzKnp0ak56OUlCQzBJZExyTDJXZ0hodWBYc2ZRITE4P2JGLzc6R2kkWmwrLFtILENIQmN1dCtAJlJrdj5vfVEhZ1lgeSxkNntkQnklakZJRCVKZGFSbmlYI0xbPjxddzE6cj5MMVlGPjddUDNJMT5RQCk3aU9+a0QmIk8wLCxA'@;
put 'ZVkxNUFaPCIzPn5ZTjRyVTs1bTY2LCVtSmA6ZDdKVDxuT3MsdCtTY2IxfUZ7JiZ+a0s4Mm5PMCx0K1NjNkl7TFU8S3JEal1vOHdfVng/Q01+NEFaMT9zeU1QOEksNE8hQ3VHK1YwKUAvaT5gYUlQeGIrcD0lYCtVQVpiNjVqMTxndT41L25oKCt+OXZJclQ9U2ZHJW5qfVhMWTxsfitPZiImdVRm'@;
put 'V3dgN1FkbU4uaWxUbT1JTWAzWFBHXT1EaWAxWTIwVjNDLlZlZ1R5eT4rTEZMMGcyYlIrK3laJTo1SiY6TEpiY3kyMmlgZ0UvQCs/LmVgSHY0YlM1M1lfYmdyJTtfU2UoKSMxTDFeVVlMQ29tS1JIZmdDZVJIWHdFKyFvR0VZXzwlXnx2ZCNbfX4+aVZpc2tRJVJgVGFuS3dpKSQhMkczayQxUzMy'@;
put 'JF1CMm5zRzRKfilAWjBaX3dxV25jcS9Ue3ZlOGRCfnJgOCImU0YiQHUkN2RvVVdkfnREQ2VJVUpgSGNRKnBNc3VJKElTYTg9O3osc015bXRqXmRfdjN3Q2cqSyEmI3A5I0Iic204UWkuenJnb256P089bn1wdj84cFtZPlZRaThFR1Q5dFBHUWk4JW5XYX02P1UkOmRyL2pjQnRmfjB+bVRmWVV4'@;
put 'SU9HZE17VzdKMVpxSXg9MTA8Qi5NSjcoalheWlVCSWhIQU1UPVZOSl5WUD5yS1QqM05pdj59eHJWOyZ8TklPUi4pTn5HKmBgK1QvcVhPZSwzO1BlL2dtTzd5Kk1COmQldXc7SW58fk5sPV14I3A5OURGfDh1XTExMz1QMUFrVSVRbGBrfGI5YCZ8OnlwZTFMOEpfKUtHMTxLI2RRPXZ1MiV0LDgq'@;
put 'JGxXfi5HQ21iNmI6aW9VWHdJZ1BFRG1lUkE4Z0RrKH5yRylSQmA0KU89O1JOIzZ5Xyp5cDEyZlNNKFRUTjBTUD86ZDZGR21oemI7YmgjdjVHPmdSdG02V05PRVBaT3ZifXg6WSk2I0cxc2Q8dkVfXTtsSzMiJj99PU50MyxOdypASDxvM0I1dzpwcUVgRFNpYGkyW3VmO2hVdzJkKyQ+UHxqVmpw'@;
put 'TGh4WzB2WnRWKWRebE9LdUMmfnNBI1B3QE87JSVUQmdNXWNCaT04OHRFWVtJUUdSVTNXdlF6a21aXTpHSTNXQDthM0IuKlA6flltbjRDOmd1dD9fVUdOLiprakpxRWdFeml7KEpxXl9JckQ0eG47LFBhKD1VcjtlK2ZUWDJfbzArfElfSWMkN202M2lwPDZldG59ZDVGcG03Mk92WHZPVSh3Vjxe'@;
put 'PHZqT0tGISJEbjFVaiR8USR0aCgvMlglIU53aX5tTWlEXnxwTjN6Xno6N3RlTHFLQ10pUG4uQWtjNF5TQDA+NSZCM1hjJSlLez5EZmkubEphRy5LVykod3xyIjZ8Tkwkc0Z7bHksLCpWKjROO0Uqa01qI2FbeUlCXzhtTEY5R09YI3grJW1kRy5JZ0hFUStwLy9SLj9SJkN5SCJ1RS5LNCx1YnxT'@;
put 'MGk6R0NxMTJeRH4/IXdvQzAyUFR3RU5QUSNgUlNwPHhicyxKM1QyZSNJT15ZI1pTR1VNKVJoKElbSiVRLmV+b2ssV05XVWQxYlZLXTR6e2NeYT5ZQCsqeXxVPX1IcS4ybX1kQj58U0lHRUhbPDNtfGlHPno1T00pUlVsWyxFOnpMVGI8bFBVRSRUUHAySjZ7WltIdmlwJEUuMU1WPiMjJk07JUI+'@;
put 'L2VRNnhZcTkockFiU209PlBrU09gLklea3slOnNXUj1aOnw9IW1JWXN9P2V+NShfTypmd1kyb3BSWXx6bntabVI+OTlnbnZGIiZyJHp3b30yJkZZJFFHJkFwTTZSYkJrNzFdWnFTQl1YMyFQI1ApNC46dSV3QDokZ0BKXW1LczklZT1tPlkwUUljZiYmVnw4QiMidzd8PV45fmNyTS4lQGk8dnlG'@;
put 'b0d4XitRTUZvVDZFe1pZN3JNfilSbjhBK294cCtVKElzZ281PEZmPGd6cjY7LGJ4UDpQTVYvTClSWWkzMmB5P0lsalt9YFAxbylKOTwqOSJgU09fL2MkTz0hem0xP3l8SVpVaGVYa1NFWV94MmhOeW9UMltxM2VPOGllL1Aoe207Lj1yc2BrIV4yWEowfFM6ekY2OSRKKDdePGpuLk0+RFRtcXp0'@;
put 'IiJEaHR4OSZ9YTBUbH02JVE0Q019MUkxeUpEMmFAQUtYR3FBM20xWCxXYmJSflUqdns/P0BMKzFFSzExPGJ4byhYISJeNUkwYE1NRTE9YWl1Y1QvKXIkZ2hIZTl6OnZ8VypFSWFLJHlSXihdcjlfSmhzIk4zcWhHaF82QENEOHszPDVCY3pXOCE5JWw2IXtKdGFkUkZDdTAybm1fcDozPURecX45'@;
put 'TXJ3c0AsaFpFcURufkA2UihyVStOPnI2VFk4cDMzVDNiWyU7LllvYzsvaltZfTZdYk4uL1VeIVkpVi89NkwrKlM1fSRwQmg/O1NOUCx5Oz9GcG5sOzhjJSpBUDN3cjgjPnlsQnksfnpgPyliQFNPND9xZi9XMS5qU0xrW1dZQWFwTkNBYjdKVEt1NT05YX5dNzszWX58PTg8S3JFTXxbTztnLll7'@;
put 'ckdlMkB+XTxyYjohSXJfbFguLyNBWjYqKnspZ14vRldlOS9iYyFQWjJIakZ2fkkjSGlhIzFlI3VzTiJDNnsuZiJXIz5YbCRCMUZXJH50LGY0fVBuS2RmUm4yJjNoOFZmaDhda01HKF10PDlJO0glQzFdcE57RFNtYVorVzo4NmRCS3QoZWpQTGt2dVhyeGRyNDJsLy5+eEI5TXB4PzpJMVQoRFE0'@;
put 'WnBOaF04JXhYczl8QFldXypQZCQhQmNAUkBzZSxnPXV1MH1DO2dHJCtsRCs3Uns5cFVeejx7W2MwPUc5Zk9OfWs6ZEBZJUt0SyNkYGxZYSljfWJofll7WyRkUSR5LCEmSSEwa1cuT2RRTGRTKko3SiY/PjF5KWM9cyNdQl14JWhoQnB+UzB8UDhXYlFebWRjL107IWZrTXkkI3ZxRUYkT0hBRyZs'@;
put 'XWtPd1lPQ00lcVllQkhAaFUwTGBCPl1hTWlqezxLKTVkV3MmZCVWOFNPYHkxaG5Lbn11aiMsbisjfmpaUmg6YENWL2RraWF2RkhLWk92UD9TJCsmRFoxPExhflZhREkyfGt8YG9oYVtQYWM4fHo+fmZRTXhPIW59dkxeezMpbWQ/c04uYnVLNFgrWExMKEJIaWhLIU81VkR0WWIyIUkwOVlVWitf'@;
put 'MF1CeV52PVUoMmBpTT5lX3U5QEJZQVN7fFdYPj1fNXBLaD9Tanxqb2FdQzRMbzBYZCEvJiE+WVdqSlNeP3ZFKGwwVzY+eUheYnpzSC8vPWgjNTo2JGteR1tCVS5tRVZTMC9bKDZvPzhPcH09KX0/d3sxdXw6R3FRPEA2KmN8a01tQlE+RGRhVXBDOUVrQE5tXzA7RHNQOlspI3QjdHYkcEZOLjxm'@;
put 'Q3pnMUk5WGw9PjxsMV5Wb35oTyMyJlJwSlskQnoyZnIrKn5ZSXhETGd9ZFFpc0ckfCJhfWNufkdOPFV8TDRpRT1lKEMlJEFFa1RCSEM7dm84fiReWiVeeSZJaWopP0dEVHQ4fnZ8eyNabW5kK0Fjfit0OH1OVzBKOkYhfn1ObV98PGZTUC81I2E7WSNGRzddbj5BbWpQSHN1dUV4Y3cjZylPakkj'@;
put 'ezI/X3BQOTsxNl9RfjBWQSN5aTJ9eDxAV2Z+Y1ZvPD1lMlI0X3ZTS3xJeFNSQ1MoJk0yLFd7OS99NmtjYyxzVjNTfGZ0LldBbigpTjtqT3thOVlHRk92TypBayZjdzVIZSImJWV4aWhFSEVLbVkzfmJlMjJIOVtTUVJkbV4scmY9K1lRVUdtb2tGXVs1Rmd4b1IkUlk9PV8uWzV1c0J7PXgjQDAy'@;
put 'Y2FgZ3ZVXV51OmFXNTw1PktmYHJLfmhwT1pdJFolZSZHNlFQQCFrYypCWVp+Ry9NQDIqSW9WQ2BCLmB6eCFVRnhHclppL2Q0LjRsZ2x5OjFwV3xyfldtZTBVN09TL2VnJVBpO0ZTKnE5REVXc2B+MClGdiVFRVl0TVhEQUwrMmlZfExzJTI4PTg2MmVTOWlnd1A+Ti4waFEsdzlqSHR2NTo/cXpA'@;
put 'Umc2djhxS1U6KVpdelh8eEJYNCU+M2hYPVRCalFRZEQ7U1d1OWRVPnM0cyhuMGV6b09SKV1hJTg5VFtwKFptLHBwekdxcXFJJnZydHdYamlffUdJPCRueFE8JitsRF5dNShoIyVjI001KEgjLn5tSCNMRWYkXVsycmB5V1dvYEx3dn12c259NUgiWn5tVT5wYVpYZSh9W3F1WHMkTmthbn5PUz5m'@;
put 'KWdpb0Q0I11NbkhmP2FhandrNEtVfDk7N2I1QW4oOXJ5OlZCNWxwOzNvLi8uOEt2QXJTeH53KWtrZUExcnMqIS9VWkVJfl5wNXJ7UGRRKCU8LHssZ3g/U1drZ2JDIVg7dj0pai4vX3trPnlyKD97d2thTH4uQkZ3emRjJEVEXWklbnNoVzZ1VjQueCNVNDUyNE9DYkJ0cHBUVTRSdm9wc0NoZHt8'@;
put 'OFdPUX4rQFI6OnNxfFcsc1QwPkBLWz5pW1JvIyZSPmZvPTpkcGVzUl8yPzk3OWI9OT5SVHF0Ml4uLn5gOzJLXj93WltpYElialZoRDpyVV9TRks+IWtwdWZbYU5oampNUjRjISZGL1V4d05ILmgmRHVQQV9EKV9FTjVDSjAscy96QSg6XUdsKSF2MiZEQVdlcTRAVDh3VHNKdTpjLntqYCZNVSQk'@;
put 'aTBRdCpyKGNPQW0xKDprfj42Tih+Z0E5S3JzOU4uLmZifEE4aDd6XTYzOzlKem4mblk9QSxdWzdtNzBlQ1NSSHI4aGMiSnQuRGg7NC9GQCg3bEFzVSUqSnY+bUYjITYhfHxTfWgza2ZOMFc1cSVkeF9gTmZ6TGtQaWRsaG58eCVOXUd3R2YucHhbIkk8Y0RHciQ5fU5Ua3IqXypdaDppPnhYSV97'@;
put 'bzI4cWw+eT5jOzUsbSwyNS5LbFtuTVdoMkteaFZVZjZjc2BlOU1yUzJkaXZlTE12LzwySDB9T3dPWWR8MC5uaTdpT1crUGRpWW5dfmgjMyVTJDpGZkQkMF54UE1TSGtmeCN8JEkzR0xXQH5lOl5eNjY/eyYpSy5TPnhfTCN6RU5qc0siXmh3VSwsIXN7cypZVUFSQSlQKlVCWVo+MGw8WnsubXdK'@;
put 'T145YWJUe24kOGE8Qjk+fkZwY0tNblYpc1RdV2xTQXh4dlBHaTRnR0VhS0goQiQpLmYqMnIldWI1e11QL1cvTTE0c0cyRHliYGNEVixwTi5qVi5ObE1pYmw8TyNJZCklcFBtQzlPYGZHblBRZlA1VmNFfD9KV1FZIjNhUUEqaj15Ny51NDtLUDx4RyomQ2I+NTp+VGg7cDYsKiwhZFRPVUphW3xI'@;
put 'eFRJUEpmZGAiIWV+ZFE3JXpaKHFEWW9yV0JaYiN9T1tQaEooMGZSO3hrZ3RHYXVMZyRiaU94aG4wUSpsKShoQWJpT3hoOXEhMS46TlBSaVROfig0Y3N3V2Z+S09RWGdDTFhnTntbMG8sJWo+UkQ0IV5+MzBCX0IlRnA/L308PmYmTSxPbygxU2U7L34vUFRgLEdeLk1lJHVGPiMud15gdFNEbU9P'@;
put 'W3dgWzhsen4pc343YTcuJkVtWy9seypLUyhTeltsUXJsTSxlXyYpKig7YGN6WiY6PzsleTx4fn1Uc1IhTFg6WkA5PGYyWGpPfjdqLDY3d28wX1J1RDY5cyY2JisyODh1eTEsN3JsWnEhQ1VPKEc3fEV7LGMxWGVAUkp1QkhvdF9OJU5+ISUsI3I5fjVdWDQ/bUh0fnN9ZWBefmh4SjpueD5teHUw'@;
put 'eEcrUzw0ZWEiNCxUKWNqM1s4RmFyLlEqPF1fS1F4QiN4ZTswPyhjWUVLaiMkRnM2e05zIzpYUCxCPGZJZEB2P2dzSHAlSCRzQTpDQVh1V1YjR0FPQTxpPW5yO2wvKF9Zbj5uPDxaPXs7bC91fDJyODdtcElmMHwlOUlMJmVTKVJ2MXZpfChfZmlaZXA9XypKPF9UKEljSzkhJVFUOTl2ekA4SjM2'@;
put 'cmM/KWFgd0Z+VXFSalc9OVZnRDdfbUJRQCEyJGtMfFc0TzJSeip4M0lVKi96ezVyM106YEksMHIsZTsmI3p+cDEvL1V4PVtvemByNkY1e0d5Zip7OF5TSXlmMCRpdShMdVt4RUo6dytTZXh9WSo7ZVMwUHVDP2FzUDFEMSNhKSZWYzZoWH5Xa0JeQlNecnB1ZDxKK0VuLGpWS3o2antvI3ZhREBi'@;
put 'UVV5c2g5eXxmfW5rQHI7PWRSVH5YVn5NU09saDI8VSQ7WUJbTGw0UlFQSCJdaThmRCkvYm17dXI6OmtoZF5WNVl7Xkc0dEw+bSE3SStVeEled2oqZTFEKV0wRDVUL3twKH1OKyxvNn5nZmBkb1cuVW4mPk1vejAsJitqVWBodD4kdT8xc1p1Zm8rb30zXTNBOSY7JXNsN0JfOHtiXVZwSCpsTlco'@;
put 'LnZNbjBGVElFRnpyJGZ2JGNpRUs3fFBzJTJGOVNrNWZBc1lrVjV+QHk2SSxJW0YrRi4rKjEjQGszMXllUyxpOj9UO0pxOy8/Lj97dDp8TW5INDp+emhCWk9qcDhHJkprTlFOKEJDQXwwJWJnOjxEWzZoQzt+JkQrLzhQM3Z9Zj07XjJ5KXYmaEViSXh4Lkp7MTpabz4sSDlIZmgyQ15vfixSLEpl'@;
put 'O2t+YW1MU0VfJSFZYTxNZzIqfjlwaFlUdkZvbF5OQEFaNnxYLnlCWl9IeDJOOV9VdGVxU256LyFyaWJIW2BHVTpNRCRxUUNddlVffiZUS3FXUkNhVVNzL1NgbkE1OXVSciVSPHt5NGlnZU95OihgUCY2TVY/QTpjI1ZTPGojWGIvUmNVOUg6NCUmW3E7OVVZKmU9KSk7PFJSSXQpOm1Ac3NCS1Jt'@;
put 'dmA2NTVeWUY3WiJ9cyFrPV5zQl9dSGV6WVRLVU0wbk01TXRkPUJzIkZ9OU9bPWFYSE4jImREeDZAVWZ6IUI9TUthZk96QG94fGJiUjMqMG82WThrfm0/ITZQZ1toV2lWdk9WIUJ5PEZaWD8wMHJvITNGcGIjT0JTWV48an0xaldTKnI4LksySG4+UDAsWF1zfExtNFFxPXNNSm5nX2IlckF9Ums2'@;
put 'KWppaClHYks8Szw7PFFuWit9bXBucHsrL0d+fGZOMks8ejJSV3o8T3Rhe0pMZi8zOEYzcGBrezxASWRWfFUoOSxFaHRdLGM3VjljXzdEMD5GW2g5KDYrYnlDZFFTfmRVcC57JCw3X1N0b11jLldrWis9e1dpcSp+SVAuQHRmVElbQSk8QEZ9UUQ9QD4/cUJsYWpPM15QVlNuZngkSTx5aUZiSWZ4'@;
put 'OHh3VDttaT9PcCI+ailENzg3fDkxUXIvZCM1Ql9dQiI1Oz5gcUlhMUwuJUBsaVpdUXtbSkFXRGhaaDpTZC8sYyV7L2dGQnoqOiltSTYsSzRuO2BDOkgqUzxeKEZmY0coVX47amliWT5lbE5fbnBrYmBuOSlUJTlobDomQHIxZDdlbFBSQDAuYU5dK3pWOlh8a3hgTGBELElIPWB3PGY6fCVUfj9p'@;
put 'djc1N09kcig7LjJoNUY6SDE+TltKY2ddLG1VVE9NT2w9PVledXhSJihRY11YRFJEWlp1Ki8zIzBJbF5Qc0ovWVUqMUR5e3JJWzQlU2hyLzUsLDE4ckB9Xnx5QDUsXXUwWThIYUlPMSN2TSFSIzg8LElXP3ZuIlpdflc6bVp4VUIlQ344QFZdVHphMUJLTl0zbllVSDJCcjIqfEowYnFrbWtHTiVo'@;
put 'aG5eLjVEPis+PDA1bWFwXShjI2hwMyNlaiVdJH5UQmtnNj5yPmslISh1SltdSmBqPDA8amQyKltNfW86UTpGN1kwWXomVENVTjNvLHlrJE80cE8ubjYvIVR+YyUkUk4zcnsmUCQpbFQ4YHc8Y1tIUVUvRFosKXdyTls8UU9YSXtITSk3YVouanNdNUQudzlsViQ0dmVOQlBNb2dpeF94Nn57WT5V'@;
put 'Tjc0TXgkUXgrZ3ApJW1oP0NAO3xTZWV8UjUyYGZyM1IoJTw4fDd2KUAjJmt+TEAvcFF1KE9WNHB8Ij0/Z0Nfc1ttSUU7NFRIcnt3aztpY2pRIT9kfkBLcSw0InsmOiVNeVlSdGRKYXxFZHw6Zjg4OHU5MER5JHtHb2JYbWVwPyU7c1pSMVNwOiE9Mi8rKHZWZVpbM2orN3RgeUJRU1Vxejw+RXle'@;
put 'a0kqeUZVUFdMaihBQ0hUWWpyTCpkbUpPY084dylGNDJWemBKYExxe2VwXyFzRm5Na2guczFreXtPXkYpKWs0USxJOGNeZENyUTRbWDdjcUlNSjkyTDw0LnpIOSxSPlBQOEkvWHZSSGF6WD5oJWheUmY3fTpVWnVrbTFvTzFPSUd4KyV3M0lpTyNkcihNQE51fT0uL0JFVD9oNmZefj07c346dU46'@;
put 'VWJKZ2EuVCVrYFo8KTkpfW5uL1crUTRjSlNaN1Qhc3RiOkxFSn5MWnc4UmVTeU9JbzluQFQha1FZJSFFeVhvMTlQUV5tUGRbTTlyLDErbTMwaUZLO3Y+WmVoZlZ3SUxNXTw/NSlTOCM4TCo7IzdTUn0xKl9DMlEjc2xQJmEqQmtpQk08RXV0TGZMe28/c0JjRkQkW28qXkNwNis1JVBwOiFpLEBz'@;
put 'Ui5KfnM2RGtVbCVxSTNGQFZKTyhuXlNwc1VmKkIuZzlXMT99eT5XX2hgW1RdX3tMayEwIWFfRF9SaEk6cTs0TD8hTERiV2ElclNHW31nSlpwcFo5Nit8Lm1+Y2QoKlZKVyQuTVdKfTV1Oj01amFGalRAcWprV3V6XStWOG9wJkBDS3E9WEI1Jm1ieSs5KWx6QHpKOEF5e01meDh2cnlKeU88Q15y'@;
put 'Tkg8O3I3XUIyS15uIVlnUkJxY2FOJjw4fEhMby9YUCxzd3lvOUguPmc0NmcwJHtuLC9qRTdlWD1yYng2bzVmNG43NVcjMXNlXnguPnJpMWEpPFIyWVVtP191azUueWZ6XihQejdDfjE6QTZyODtmWnVYVX1dLjJXRXFudXJbcTBpaHhFJSg2IWpTfiJFRCo4RlZYOXI/K1A1VV9YNXFOaCtTVm84'@;
put 'Slg8cClZb1Y5MHVbKF1yUjUzN3xvVU0uWl9KbTNbQVpNQj4kfC5zd3w5ZSwlN0BfO0lnZXhOKS5fWnFVTUw+LFJWaWVdWSNrUzJINV5IIy48ZUx+Ull2ITVeQ2RNSzUrYWcySWg1I1cmTmBDU2MsKUlzNSUhL3Y6eSxSWWgwdnYwWEgqRTFLTiFrMCwydzRlOWpIJk1sd0AqUyImL3spR3hAbHF3'@;
put 'PDdTdS9TVmNsdjVxXkZAMGNbWzhtUl1iQ0FmOlc9bF57MXcpPW5mczQkMmwuK3VpTzRAKW0lVX5WInlheG95ODhYUGtZZyp8dGxZN29GSEgmUE5tKSsqQnU8U103dCowUmEpZF83S2JKQyUuT28/JS90TTYwQlVgb2o3PFAkQkVCN24zJk14SFVaWDIrKypBLmFVV1cuaTlxaUt8QU1fNDM5WFJ4'@;
put 'cyNaQnJMYlhkJXx9RSxPfGpbYW1XelhvOWZeKHd5QC5wYm5EO1FGajc8JHhCNXR3cm5tWEFTWyFLNmRVVyQzdkp+TlJjRXwpM0xXeVhZSk8wUjxrUWNSfDF9RFMiJllWM1t0OkhpSnpNW1B8MmI7OENPRFBeaitbfSgvRjguJlpyaGt+WXJCWDxdTFJaKDZZcWh0XUdac30+KUhqOzh7dy4hY0le'@;
put 'X3lRJWpeX3lRLz89SFoyN29Je3Y1JjE2KnBxRDROIWR6ZV40eHlLUV46anFQbkp3YitRdSp2YnNGR1cqR286VUJRdWE9Imk0VHYqa3Nnfjo0R3EhLmMkSERDJHAwaXxmMnJ+KF1gQ2Z3eEJGe3t0MTBjcDF2RGp9MlVRdTUuaXR1Y1pyd1F1dHNlaV9LajNvOVUxTzRUVWs6YkhufDE2TnBdZldi'@;
put 'WVo0UERpRChQMSg2SWxDVXc6SzN9fWE3P1BOWTw/IzBySlovWU9INjp5QihHZG5HdGIvUjBGXUVkUDMvP2FjSEMie1VRIjhNcjQqQjxjTWE3YXFVVHlkai5kVlB3UWh7d14/dHVZVG5wc05qJVpoPl5NbnVjY1BoQnNXXnI+SU5ENHg+UH1jcGpNb3pLUWR7eisiIWlzRUlmNVJsWiNSL2RVIjNf'@;
put 'Mk1FUHlDLytiVnkuSlQmLDQ2b1IsZk83Rm4hJmA6V3A+S084UWBXejBLUVcjSnNoYEJfMTxGbCFJQz1WYjpaaTs4aDlhdl9pbytbKzAjXWVsVl4icmpCWkB7cXUqUS4kN2BGWUplQ3FmaGBtIUpEO2pvKEtaVSlsey5GdVlaV19gdl1KSzk8TiElYkA8WFk4REZIcTV9VDIxOWhzSjpfYzJNeDAr'@;
put 'QXcxbUxBPHBpUlt6IUlARFlfP2whL2soKmg+XWM0RWJtJWlfZU1hOWc9NEtTbCxYRFkzR3V1K0JSRW5HOH0sXzZDfHw+P11vWVc0NEtmZF55XUdXMkRTfWZuLnBxPz4/a1MvNi93KCx4ZVVRQWsuTXV4PU12UWNldlE6MFV9TXhpTjU+L18yUyZafjpxW1A0Mn0mUi9WPlE8a1hESWBeSzJZZzZP'@;
put 'dEBMZStXaWRgantOX3srIj83ezFBKDdSezdsTDg4T3RVS0I6cV1FeTNBTFNqZEhfVzUuej9vI2R6RVdVbkhaQldvMit1aUZNLyh6VlRqKyh6cjY+V0RLJWxkSDQ2eC9kX2xbZ0J0Vig3JjclOV1EPTZYV0pqX1B1IzsrNDI6S2ddPW1afFttYEsoL3p5aSNDJStyOW5WM3pGdHE8UHU9d316SHMm'@;
put 'dV1+V0kudkJrNGk2d3gmZ2EjemdqXzguSHp6QGkzSEpOb2smNisoKTh+ZFAwflUpKTJuT087UVMyW29XSm5KMmdAJD5HJHZFKGcuYDpXT34jMEBnWi9dfk5xVFVve0dMM09NVUBVLlJvI0hodUhqJTs6Mm1NQEpXSWxpcEtkRF9ZN2JULi9dbCVLbz8iX0lMSGAyczZLU2hkL0dvSUI7e3tvRmo3'@;
put 'VT8mUTxkX3pyblYyTHchZTNoXnJ+TWhzVW1Me0xnXml1SHY5YEhgLig3dzcoOWZgciVLK21EVlVdWXleaFV6LE5TWChsOTVMTj9nKTd9OjA1IW9yPVIuWTNpM0U1ZDo5Vj8mSi80RmFnVT1HTGdQXV4yL0ErcCh4dkRPOUcpLFlPWSM5R2slZ2ZRdHk4WiV9RDltPDVue1pWSHs5K11wT354ZXw7'@;
put 'cjkzSHN6IXc2a2BqQmh7Tjg8NENnKXYxKnhyaUAmUFA5V0JoeDpwVj8oUFkoQjtYRTQoQ0s/NnJwRns0QGAmSz1YISgsZjAjb3tvTmVGOmFAOzJlfVJJWHs/MmpeUlN8aTNaO3hZWTJGcU56bHxZTXRJYUVyVWtDYS8wRXk0d1Q5QCtxaiVBPGxDYV9Vb0JeSXReKShCR2Vhcj1RRDQ/MCR9d2lg'@;
put 'L1dwYj9VUWddMjYicDMrbE5oMEc9dyNzNnMjRncxXnNfRzFdfm5heSlYMyM1dEVuOjhBKkJjczJVNnBvQGY/cnklOnw0S2l1OkVvVSlDXTBbb09iSlFpfH08PjJiTF1NX2RQMH4+VD85SXg/bU9xY2d0WXRqPjhneDApYTlGPjBpRCNCX0FxZVhrPFs9YStVPEojU0pxWnA2fjVFPXchdmF9WEl4'@;
put 'WERWUXU1c1FfUyEsdEw8MmM+WUFaeCFJPVYmN0F7MV1qV1ZZZXlSMWhZcz5OI0lbUH5jMkZddyVdTzZnP091bC96anp8eiN7TlE3fXU+VCM4bDU3InF6NWxhcmNnPn09K0MlP3x6I3tGUCYvOEZoXWpqRTNBU2tYKzZDVmo6UipdVzA/dzwxMGV2OzBSbD4pczU4fkB5RVFfekE6ajUwYmRyaDEv'@;
put 'dyIrNUIiW05fdzJEa0BUK3B3TiZfWEA7Q2J+Y3NgMkRaJl89KU9CTFZUTDtDT1VeRW5XS315ZDt9V0Bqd0hKXkUvJGZzaXojfVZqYmNofTp8fHM+ZGBHK300QzM/QjZrbzFtfitKJW4xMD9laUdfVSUrYUQoSTMqenwyKD96aGV3PCokYm19d2ZhTjEuY35+YTQzd1VTVkh7Yn1gSilSNU0+ITtF'@;
put 'eipNe11fOHFYNzV0c1IhJGB6cCV0KG9eS3VMfkt0Ji5hTzB+Qjt3NkolaV84I2J3YTk+aj8lJWVMfkBYM0NnWkx+eTUhb3pdI2g2On5QcyVjKz08TENoOVlsPlVhSFZ9X2RQKU0wLHNZNGN1dTUufjo6SVMyQHx+ZmxFSnMlbjE9PGJDaDlrJVV5JHlVfXQicVFENVV9OnZxUTJ3STJvQHtzSDdF'@;
put 'YmVdXU9ve0diaGtlMC5+YzRRU11bUkxJNyxpSDcuWmI5fWwlcHVlMH41VzR2NltSTHQ3fEorSnA+PjxkMENeUnZMO0tGeXVEZFpYd0l4QFcyJnJlXXBOaktYWX46ciUrOzZSfT4lO1B9Kl90QmlyfHIoZ2lJMWttS1lpMiQzQ15AWFdmMHh2UVA8XXtuNChxWHx+R04kXk1yVXkvcyJ+WGgiaE5U'@;
put 'TCRIeEBNdGpgM2hAbDNEdkVuQW9GZSxKIyFWMDhJPWl7aCMkc1Q3L0FkaXpAVSNWPEwpW0JqOUoqY0xKKSNpdDA+aVsiWT5tIm5KSSNBJiVFRUB5SjFFUS9kY3NVK09eM3x0cHokMiMpQGBHO2lAaDlgXjY6OEdAQ106MlZ4OS8heDA/NnF4PVJQYiolWiNKaSZkM1BDUTdfSjR8dyFFWFMweEtr'@;
put 'bSVnMVtCO2NQZWJSbWtfZXc5NnkxS09XdzltbURsNkwoNWNMLEBIJjVCW1JRXmI0PF5dT3FEaj5gSF8kfjxWXXVPQE5Ae355M24mJTMpYD98Jl9SK2N7PFZDZWkzbko9T1FxYSRfN2NIdXM0OWA2UkhwZzdvVXwmNyU3VWxbLF8vSD9GQ1RifmlBU05hQVNCMn1UeVRfMiVGMD4oSjVMZ0R2Wj10'@;
put 'flFGayFNbVZXeW5sPUNfNn4ldEtZUmN3fW9fNXRdPzEkVVNETEFQWyQ2TChyUXxaPXRUKm5zdyJIKXQ1Tj08ZXxpUlB2LzcwRVMuOi41d0lEfGlTZ1pReytkNU8rX25XOH1GYzdyTkBzO0gvfU4uTENvfDpPYS46SSN2L1p7QXNtamJLRSgqVXFHdmlhc2oxZG1saWtbc3VHIXA8S0tHRiNSQjJQ'@;
put 'c1tdOCNYZ315VjQ2PmZWZXVjOyN2WVdvM1c3PCtCKCZ2TD0uUzozdGs+Z285eWtMSjhwJiU5am9QRjJfL252Sjk/XT9lRVlsKEIjPHgkeDpTPDVTbHZ4LGpNLy57djx7ZDk4KVZiVGdHTjN0O04rcE0zfHFeOVtYajFALnJxTHg2ekBITkdbQjFWMlJXbix6bzszV09gbUNiP1pGPyM0fXNEZG1n'@;
put 'V0oqNDdDNGtXPjZFYj1FSTgxNTNFfWouXnx8d2lfNFEvQ2Z+UkdNKVJqQ2tRU31+PyYjXSt8ZldMaUZPTXQjPHFeTV9hVmlbS0M6cFg3WCM+YUBCVml4U0tfYXlhPHZHTG8mbWRDaHpVd1p7bXJhNFF9KF1oKTBlUTlse31uRC41XXdHS1s6JVtyUXE+RjY5cTlYKEIvJGVaJFRZLm5fS1A5QC8z'@;
put 'T2ZWajdxfClTWWEpbFBhI0hpPzp5aSVkUTFgOH4rcGtHdk0xQ3p7KmNNMmElLjspUiZGKzQuOG9SR0Y0X0UlOE47WEdfZ0c7JkhbXWloeHdpcW59IWEjVE0wak4qUEduUDBifl4/amVefEVvYCkoOXxFeSJTcGc0M1M+fltAbiJtZHUmLCg5Q09CK3BMLHNuOXAiNG8sM1BdIn4xWTsoYm9zUUgy'@;
put 'VGJSSGJzSkdWKl5zfD4zXk5Vb3Zwdzl7R0tzV1tXLF81aXJ3OUojRD9hLlM4X1EkInVubEtsM2BxJVdGMUtUMStEKTZ4PiRsTENIIkJCR3pebDp+PT9hMz5vVjtZbXlKLjEyclNuTn1oR0B1b0ZhKExoQjxSSiYwWVM+ZCt+IS89fDxydzZMcWFBfS5AOk9CfDtuZiVQQVtAUz8wZH1gKGZHWlEi'@;
put 'cTZuIzssUHFmaklUKi98VldnLCN9eW52fX0lbUQ9VClAbkBMJHAmeEFCI0gocmNiS0l8ezRBVzx9WjhyNkwwcFdFbUYyL2RpN3RGNHwlYzRsUF1DTmA4NlBkMV50QlRoaCVLfl9KKGkjWnl8ZG1TdHEoX2h3byg8Ok1MdU03SjckK3gqe3Y4Sjx7citnay9gJERpUWg2VEJwRVNkN2IzViNjLlZO'@;
put 'fmRwRkcwSV8sJjFyVF8sJkt8I0JOPnlyVH4mNHIwYjRqYWJULDlYU0g4O0ZxdT50OVNWQyYyRjgybCM/fX0peEE5TFhjKGFzOXh+fXdGLjEmSWl9PlohcHROXjwobytPaGhEazdsJC9oOS5zYlgocDxPe1spYyVFLjlJfnNaTG5ralhLZ2w8Q0lFOW0rbCxrbnlvWE0kUXgzfUtzNDcrPyYjRU9U'@;
put 'cDAxTVddbWVKTWRaaEpSaGgrOXtsfCN9bF4wRnwzfilsbjV3NnpgVzFKfHIibT1WJjdGUnR8dDQ0bWA7bkQ2I0R+PyhKanRhQnA4KmFiQjt7R2xQPS5xIlgvR200USJBQ3lyWGRXdnBaK3ZtO1UvOTt4Tl55KGtdM3Q9RXt2JmllKTsxLD5CUiFrNSs5TXFOOi9nOW1vPSJCRi4/YXBzU3NQfGo/'@;
put 'WSUvSk1pRUd3fXRqXiN4YHZgZmNzfWs+SVosTzE3cWE1cSg+fS9mejtWRz5rej86PnE5T2giW11fbUcoaEtOV0NMZi5HQFExdzk1NmhCQ0NOIlI0XzslViN2YXZMT2Izb3tKKFpZfWRGSz5kKHNjR3suQDgmOihIbzdvVUhLPmQvYUFmI2Y2QGZvbGRBY2EjQjdQMWFzai4/OHkqaEJZI285SSN7'@;
put 'WmU3Umt+cyFkfHMhYFE7OWEqVjF9W2FVcCN+eVZWVVQrIXJGLl1wJGhuMCQ9Ri59PzkqRjckSCZ5bmBSJjtyQldBU25AP1k6eHpsb2ghI1VlWlYoLzRsUktPRjUzUktIOjdZTVQxYTVqU18qdnZbaCo9Kih6dnlSMXk3aDtvc0dKJXB8eDgkOjNqZCN4VX5KdkNQKzI6OkFWa2RyfkAzcGRCIiUs'@;
put 'c1J3ZiJKTD5UTF53W209UCxAJSoiK3smXyoiK3hbXUdbaGA3eyh9c1o9M1RsRW0vZSRQM0s4cnhCKFhuUEo3PDIvMDBlRDpiYXdrKl98djhKPGhWelNwOkJ7MzcocU1dcXVLO1NpNm10Un5ZZj12Kj8qcigqdil4TnxpLjgsNTpTKldTWkp4dUpbVTpoYGRoU2JNRElTXlBXLFUsOFNyY29YSWo5'@;
put 'fHxTPWJLX1Y6R1ExNmFrNSlNc240fl90RURlY1pDQDgoLyJkck9EY0Zybm5sfThsVW1gJkcmbipQVXMkdG19QkxCMmA8XmsqJCpsfVo6JlRFO08xd1JPbWdvUSReJT5hMkArN2ZLV24/LiR5dEVXNF86aCVtMEc9MlEmUFNTaXN9KkJiN0B7bWQ3P2E5Zyp6dEhfZiJZPSFEOkJxImkkNlJvRXlH'@;
put 'XSElW2Q5Uy5WTzpvbTNNVW9BWmBtdjhfVXVrY1BQVXJER0dJKz92YGpWcnZWPS4qektpcU41Ym86XkxYcUVmXVNPXXosfHFCQXw4OmorS1ZTU2YpSTw9Tys0THR5OlMvb10hbCJoMH07cGtkdCpXeGRQNGtiX1Eyc28/RmdfLDQqJCg+bDg0ZX1INn09Tml1YiReL0hHbWAidns+Yjg9YyxqPld+'@;
put 'NEFbRVolSFNqNyVjcHp9JWpba3M9PG5mX1ZudUlhcyJwaEhyeCRxcD9VWzREeDMmL0RzQjczLm4oUz11RUpIZ3lrRCJBZz58fF11TClUMTxCeld2UW0oKnVefnpdQXFOZUIyWmdvO2dDdyl5IXFmUHNTYEJwbn5zSF9EYUg1LyUsdkdON119Pl4+US8sOF58dEEmQj5eZUs+eXVAX2g0MT4ibUhn'@;
put 'WThDWDk8KklJfVMjTiVwYkpbWn5WTXp9d187MndvUlplWTZ3eUA6LGlHbGEyPm1RYXR9K1AzVH4hajVGRWVoa2hlbGRCP2xsXWtjdXZWN1RGVmBJIis9fjlZO1Yze0tHM0w3PSRoeiI/fitWQ0Z7REd6K1RhVl9AX0JhYG0sZkQ1QHcjcWh+PWNZQzxqb3FRfj1sKjt7eDQmc2UkSSN0MktIYV9C'@;
put 'Oy9PYWJhI2NbIl9beSR2dmFkUmJsRy5naDt1bFc5YTtgPj94RSldVDFJUGxnO1lnOGBnPUo1SElkW350SHxCVzllYSF+RVA8SUd0N2BJQ3xGayFRVnU4ISlyOTRxbCQyKlQ7eEY6R0RRfnV1TEtvPHpjKixZXjRPNXJkZmVkdV51dl9KOzJtOkc0RkpuQ3o5XmhhL3YsWEhkIj4yYDQvOVhlWD5U'@;
put 'cj1HKW5FWWh1VGB5ald6fXtQdmo9alRCdGpteyV5SFcye3Jgaz4/KTE7WyE7Zy9dTnNmfVI0aTh9Xno2Pzp5XjtVWDFicy5EcVpwNi40a3p6ZU9idlNIcG8xQi5dZV1+N3tyNDR5WnlvcGM6ZGV3fXZCX0ZuK25SK1c4fmZCSk9PNm46KEBiI1BlOitGJms+VjYvRj53SU1fczZpP2VCOSZpTHNL'@;
put 'ZlhTZEZYak0vfThbViUhKWooNEFzK35Zb3BXRDRwLEl4cHE5PDhneyFmOSN0KUomejJdU1R2SmhmbGMhIWVocntqNWl8cn5hKyYuZ01RczhXLzJZfnQ8ZzVoeD5abFtbU1BfT2h9YjJZXmsmUClqRWw4R09BfDZFLmAmd1RtIyIwYSNiL294TWZaTnZMaWo3KXZgdHkkT0o9ej9MWlUsQiZabFVz'@;
put 'W2FOVlJZQiNrK09SZWQxNl5xOG9kaT1gfV1kV0NEQmt+RGwrfl5lJG5mUl9ha29NJmNxckFTaTdtMTRXdXhpWlpSZjJXSD4wRnwlaUw2ajklZXB8UUtULF1IMU9TdHROL11pVFMha2poVU0lMjtTcjRnIW5LR2gkSDNQOmAzUUI6WD9venY4MnhwUkIlKiN7V1VNIWZtK09NL2RYJn4/IXZTMz9J'@;
put 'S0wkcDxBcVtTSUYzamxedDxJU0lkPCs5UFFqSkw4Q1VAUTNZXUJXdjpaSzZZNUhMJEVLZj1YQi97MldyaEdbdTw9TlhOMEtDMVNyNC9bWTttQkdic3FGMHxTJnFbN3pQaW50PCN2Q00yQX5xLzxUVmg7PDh2LF04SEErb3heK3E7KGpNKjNIREA7Un4yOG1YZiw4e3dTKF14cEBtenZAfnpvXT1Y'@;
put 'c055Lmd2e1Z5b2tyZ25EMXxvTSwyVWUpOGlMNno9SVBNR2Z0RytWbTB3N3ZAL151PyxxWURbRjVTJSlCWyRvPFllOUhvcE5PSVBrajhmKFA5cXpzRWYrPnY9MipvKSFpb2ZgNV1LPGNgQlR8WjFQTTBLRyFxTXd5VG0+YFFEQ0hOPUpPRyY/bWRpOyFBOS9gTDJbYFImL0kkZGxlVkR2PGd2N2p0'@;
put 'ZlV0fU05YGdeLDh4fnhxa3lBS3RrQX1MaWc+aW49NGJXPWxyOUpIT344OEx8MnIlWCw7KGtzXzovLlN3c2kjI0U2aC92NTduQmdDSlIwXSoveXJCOG1hTzg9bU5iSiosazphaDk0KjNlPzNDUzw0dTFOTTUvbFZjNHo8QipydzdSeG96W256bjRATV1WS05NS3ZIWV9hd3dXeHNBa0FTUG9FZywo'@;
put 'fVcmVlM/X1k9aiV3Vip0MW93bTpWXVhTWT4sM2JKQT98KTZ1aCR0KmN1O1NWfGdXYlk9dFppaXN6MVcoX1BzflZXRUo3IUAzI2cucCw4XiwvcDI/UEk+czJ3fn46aWouYzBESX5tYnhtV0Y0Rz1YQ1V0K3Q8WjVuXiVAakxBWF0rYl9JPWloeG87K3ZYYTpIWTBEenlpSCUqIkx+R1hUUFBHR0di'@;
put 'M0cwO08qSDQ2T2ElUyN1dFVWJFYzTSZBWTdiNmxpIiU3L05MbGxVZitvNFIsWSxObE45ezJBNl1IUyhsc0FsbjpjITZ2K3AlOWUjKVhMTElFaHhVcGRWTzNSaStRVjIqZURId01dODFCalosVFpGWkI1Qy9MQHwmTkBjJVo5dFltVnE/ZF9yJmRwN0hgO2MkYCk3MT8pNWpbITV1fW00bls2dHhM'@;
put 'K0wmSiQuUUI1VSNWSDRoTHpFeH5nSTlFXk5LfXh7LHwuKDUrc1ohRnQ6aXsvUVZfK09VL2JJc11LYi94Ik9xbF9lSmBKYEk1YXcuR2tzfkVnVStlYEVaLlY0eSpWNE12cDN0angjckclfXZ4Sy4xL1BIbWQqIUVhWndEYVYhPVNhIVBMfTQqS2NeUlopfnNWNGZiKyJ2NDlwT0g2InAsbVQzVDBG'@;
put 'L2EmVyF4eWJRNihvfiEoLih1YVY1ZSVoOExoKWk5aShzMkJZX0EmX28yRmV6YzRkPXcjbnBsMyIkTGJeZmxaeGBzfWI0WDg9aS9qbCV3bXszclU8OzI+W2ZdejY+YjpFQCxVSWA8Vno1d35qS3p8azMuXXpyXXUlYD18Ml4+NzJ1KHZGcl0pcipLTGhLKDQqX3Bwc1c5VFddeH1za0g1dHlNVH0u'@;
put 'WyV4Ly44aHkhd3JVVl0zajAhZSloXXc1N1ZQXjIyI2RhX3Z7a0d4YXNpS0gxOTldLl9HYyZMNmcmZmdkXmw9Y05ZKX47LiI3b1U5Yj9YYVgidVA7Y14wRGcvKUpYV294fWIhIzo2STJeJV5QSGpJSG10IUBodV58ayFUXz0qWXdhb2Z5K3A5YyFAY1o4NztsfFZGI3ljfHh3e2RoTV9TaVAhK0Q0'@;
put 'Q1ZhUzhsd1lDc31uNSl3djheb0VLWj08SiQrTCYhcFVxaXcjQXRqUVc9OnkwYiNXYjMxQmtXVEt7aXh8UFRNM3JBMUZdYUtiPHp5Plt4eylmfH00MWVgalM2MyVfaFtbKVBOJX5uVTdBYUZhJlU+fnFVXVtWOU12WihgdyFtVU9afUhZZnhjcEBiSVVDJlUyTG1MaFAvXz18I19QIyZBe353fUYv'@;
put 'KyNEb3RKeUNHSSJvb205InZDaFtmcTQiJCNKeShOSll0RHl8VnleLnEvMkxrcjJxVnQrejFaNklwR3ZjPmlVd3pfcFspVlZsOV8zPmw4PEtSLyRbVWRpT3g6TWM3YkJjODc5diY6THt0NVpUSzc9Y11COCNfZXM0en5+RV9fRThAdzM4Z2VTZihXTF1IZXUvMSE9bkt9RThzd01qcClrQXkheDcs'@;
put 'QkhqI2lOb3khbGZIQnkhXjE4Uzc4cHpOW0hlRUhyP0hlJkYkS3YwR3pSK0B1Sl5IamBBXkY2UGxMYVl4UjlxQHttZHg/c2Z1L3xdT3llR10saTR5IntqeGNJQHNmOEguOXNsPUpPKzhAVHFpZXVAcnAsWiYiZGVERzFCLDFfVHB9JTd3cUNlbUFSY2hnYXkuRGAkaTN8Qi98Y19Zc0s6IUx5fEx7'@;
put 'fXN6cl0pUjcpfkhfPFZIVktgSmAlQSwlW2IyeXR8Y19wcDFgRCRUcX00WFpVYlp8Zk45cCNjSnhLVlAiZCo7NX0qUjBrXSEkQkpZQmNBIl4jVHM4JChKbTJ3Tn5PQ082U3kqb21xLDEoZTgmfjVxeT8uZ34rdmRneV8kYEhgPHFwZHRGeE8jYFBUJkVLIX5nSzVtcFdUbztzSGxIaXdVcCRmbl1P'@;
put 'RWQ0KztHY290aW9rS3hseF5fWzU0biZfT3k1fChabEU3WTdONH10U31GUzcjblZUL3FxSX5dV1MiWyN3UWJUNGJvLCxgdl1RaVB1Z31DPXd7O3xka35hN2Y3Vk1MMzh+YV1xPDNEMWJ8M1pic0ZkQ315QyU9K2c7bFkjKEhFbGU1YCYmOGQhUUIqOj5He3QxMXY4M3pJelFjP3Y3QFZjayx8SiFA'@;
put 'JkY0RCgoRW5NMCZMe1hJTTBqZnpYd145MDB5IiR5XWR0KkBKW0J7e1ksRTM4MEJjdEkuaHJIaGUrQ1Y/Y2FnUWAkKlciQlZQTFAwTzBVTmM0XnxPcyVUdF4kU3RYIipMe08qP1d3Yj8kIk0lT0EsbXkoTjFZOSxqfTRZTUhPVVpMLFRHcCVaKTkzWk40ZTV2YEp0KldGJT09ZGxWRkU7N21sc3pw'@;
put 'SlJkUlszekFCLndiQWoqKWpTZ3ZAeDNxMkBvRUJee2JlTVJnISxqQTs6ZzhDbkBKSWxUYil5aCtmQXhiMWROM1FCNDhedlZQaVF1KGxqUkdAIjJab0lheTF4LD4jOjZeZjx3fm8mWVAqOEYyP3FOMXIlYnkxQGxOUS9tM1soSXF1IkRsZHc0MVtxb1Q5VX0+enpjVTF6dXhSVyY1em5xfDJaQj18'@;
put 'aU5lXVpsWUt1Mz5iMmxwMFsuQH5yXXpRYGRAbykwclU+X1JCb0YrRWUrZjphfk9CcT1QVlRfNnVzfj43TW1xXyI0MltGWk9ib2tLLyIkRXJQZCgkQGpub0pbVEw0Qjw6dXIqY1hIVn1IQE8lT2AyZ3JhY0gmY0VKZWxfSCU3TVo/NisvJnlfKkxfY0owPyZjR19jSlElKXImZT18L1AjRzluaSRi'@;
put 'Qzd+SFhrJFRDXXVEaik1VWRrTXI9X1dNVzdZODJ4cU0vN0hmLkw8RncyImkvWiZxX1c0M083SnhxTS9YelBrTF97TCJwTUt1NiJOWVMpRShEZVspYDNddVUjViYzITA7aElkbl1gNXdKMFFVKCltKks5KCNbanNnRnhwWTN4eXkjYXovTGlULGB3aSQiaXg9MW5PZ3tnbD5UPlUkOjoyZW9hXlhE'@;
put 'OWtKMjdCNmJVYl0kKXI1Tkheb216TVAvQlZ3KTZecDw9V2xvSSVPOUZZTiMmJTpAQz4zUzYsWTpRc3k6QnVQJVhQdH40TXo0OzMsZkRoVHVtVUZVX1k5TV48Jk1FSjd4eWZvOlcpdzY1VW8sU1kvVlV8WUEzbSU/TXxafklCcT0/VlVFYFJjSj56eT1TODxQP1c8Vzd+TmJTPUpCMGgyMHF2OW1q'@;
put 'YjI/eGZYK2QrJT40MFpTbkxaX2gqY181QEd+cWx2NSN8I2I3T2Zsb1l0N29mMkxmbm9LTXh9XlolKTh8USR6fVRZRytGK1s4ZDRVV2RTdXpkWVJnKXRgVjRqQ0J3OCY8VVdoMWpMTGxhTyEsUk49bjlQIWEsejxHTToyVGVfXzFtMz5lKmNfaVJtfVk9SSMuIkdSU2dlfXdAOG18KzBtdW1NfG8+'@;
put 'TXxgW3J7YDUlSixwezE8XTQxZWIpPksvT18kaHk1Z0pRZChvUFYjfkVMRUpjVX4pSit4eFMlKTYjR05tSU9lZVc3b2tEUXE1TmQyL0lBQUE4TUBAbkFVRVFPN24mImJYL1lNSWEyPHJESCpodU9mM2AqMyxFTkpvNUQlSWZNaUFBQUFBQUEkQSQkKW9OdHFQRGRzYTF+VEtpV1kpcnIzeEBxQkEy'@;
put 'dFReUiRjLFJocWNXR05Lbmd6bEFIN2FKYUVRX1dCcyVJSU9QeFpWfDMlYzlvWntPLkt6OzsrJUlHO2F4aDpTPTtuJkcyNlpoO0U1fjw1M1R6e1EwcS5VPEJrJkVOcTNYPDNQYVs6JWBtLmRgR1ApJmIqQj9rZCU1XzIld308W1JeVjNzWT9PPFQ5cTEvanp+SEQzOnk6IT80OU53c0U2ZEk7Kj86'@;
put 'YjYpN3t0N1slOnF5UV1FVG8qXjdLcl0rdWxncl09d0Nqak9acmMpQ1NwcjAudFc8PTZ+ZFp6M0A8fSlgVUtsYSJ9dikmTWR0WEpESiIxQnksZmVFTVh4UTFTUjsvan4zKXVuI11yMnhwaH1zRS5Jai5IQ18ybk88dk1teCZUMmJ3RGhvKT1wTCZeJmQpb1diezg2UUtFOysxOUBxdyNCRDtbVj1O'@;
put 'XWM2b1RKd0hKRmROOkN4LmV1b2woI1NlbCROeV1FTFpKPiNMeUI9NG0hUnBdY3coOzRCR2Z8Lnp3NSt6fWYkXj9lMCV+X3RZRXRdMUNKSyw7QmI9aThLTU5aSj1gRldZYnojfDQkYDtPKjA9LEd+e15TRjkhdCEiXiUyUX40NkR9JSRQYio6REo+Tzo1SVoiOzchO3hzdVo0Qmk+QCFYeEI/IWh2'@;
put 'bCUreSM5SkVbeF8zTDA3aE98V140Lk0vbkQhekN8TikvTH1Ib2FXOS5hKGw7e0xSOCRALkZ9fCEvcUZkeiUlPHlAOFpwUi98dSFAYkU9UG1LPV9DcSNoZnNZPk1iV3tWM21CcEc9SE5LO2dLQTFFM2lLXUo7NE55dXcyb244YzZVO3ZbM3ckUUBMelUkVEtqX0kxYE0mLjUiPmsiZX5sMCVvY1sw'@;
put 'KG8jZmZ+Nk9iYXFvQS8rJkxTOUJyZTM6LihDYmIsMkRCKypLVn09dEdldHFXRzBETG5bR0NBKCo2SyJnKVNbVU9GY1kwMXc4ekVvTjVDbGMpMWZnW2spL2hgMCQ/RHB0I2lMZyEiWjRXY044Sl9gWz1DXSFlO3dybXQrWncvQnFFQDRVM1szJWo9bnRRcWR4ejtpX3w6cCNiJn51R25XKlo5MDB5'@;
put 'WF81LFcsRmNHZ2BuQzMhITkoe0RsYjVqe2Ricj5heFksdWYoIn1UTXNLO0dCNlkqazRpYyJmVTFtWV5bXyR9USkzKik6XlMkXygzIyxgYDRAe04lWU9KbyIkKCt0L1I9cyM/SU02WT5vUEt7WFEpTUtgMTw5U240MT8oRTN1ZyI4eTwxa1BvRitBWjNLe1YhTTNdNiJocz07WVtiI3EqbGdVckJ2'@;
put 'REREb085NDRRS0ZFTUguJWozX3pFMTNAcGdHQThGSGVKRytuIU84KGxnR2FZI04uMHx+ZmV0OldVayV6T0soQS4pQkp3MF1BVz5sK3tfNjRaZSF6R3UxJDVYenM1VEMxLlEoVDFGPDJkLnoudDddYi5QV2dPWEAiOVp0I0Jebis4aT84aCklQEN+QTprZzBGb085JSZlKExjayxtWUVfXXBIYm0w'@;
put 'dzpFUEYsZFhQNTB4RzJ3ek9senlWb3c0RmRATy5ZKjZ7QW5zYm1pWEA2Yl9dZExVdFYxXn5WOHh2JWxqNmc5aUh+S0NvSSV4LyZSS2ZNc0NuRT9iO3JvYSImanltVDs6MER5VTcibTRCSUxHPyg2b2VZMzshSmA4cVFZIlNDOnBJcTtOX19MVEFJQWord11OTkp4ZmVhVm9NWyFwU0shTz5zYUYw'@;
put 'L1NPbCVTMj0+JCFjI2V9Vi5bNWNASkNxL2Q0UkNqMkBfQURMQzR8QT1ZS1NESl9YUWFJcGU9cW5hcWBVZyQpN357WWpndjIpLnsrQl9EQGwsRl5LfilaQ3ojLiF0b20wYkgydEsxY0d6SzlifnFYXV88ZDh2OTtXZDk4W3w+Y046RkI1cG14eGRTemdUPFVLYmF2KkNEKVZyREJNMUt3NExDY0dn'@;
put 'JC9jVGw/MVk2RiVxQ0Z8UTNYMW5pXyVnPlp+d3FwRno4d1A5UUdBRzdNUUVabT8sL149SHU8dlJJPjZuKTJ9S35XYFs+MEMqYU5wbz5BazFvVDZEVyU/cyI1cF9mfXs/YVE0Y3VKejNXYEhAWGtsVkpQOzMlY0omX1E6NFpCKmNeZ0ZrInZod1B+LyU5NXVxVmp9WHI0S0JrfHVoaiVJNjRtQmhj'@;
put 'KkZnUzBKKmI2TjFAVUAvZmN2IkUiR1M7bTcmaFdlNV5HPk9nSSkzLFdhUmB7MW5wOChYQGBKUSh9dlZGTlpLeF9Ya2gubGw0KXYoS3F1K19uZi5TU3cjZCs6QCsqUHtlXUZSeTBaQCJQU3ArfmtnZ0RyZS90TmFDSXltfj9FIi9KPlVocWV1STBFZFZKVVUpMFtWcnRgcWp2TkExdFtIaV0qJDI2'@;
put 'PztFVUVFT3xLS0dzYGxWe0l7bUxSSV48TUl5WyNAWlJvPEE0VEQ7OmN6STNKcnQpYVBVN00oKFsiYktbW0hSXmojU2RjbFVKfjlmcExzI25LfkFxd2hDY016SH1rLDExNSNbSV5IO2V0IVN4W19zTzhLSW1tciE2ZGM+czVZO3JNMENyQU1lKF5NQnFbYCY1RF0/JC4lelh+UGZoXTxZcUJhQj0x'@;
put 'RE0mQ2x+V303MnI7SEVpTzAvKWUqJj9DJjFdS0l1bW4lUXFte1QueGk9UjdAd040ImcpYUdEUEJie2JXM2FKYTwjKGJ+Ukkwdkt6MDs6T2peSnRFRlVvWTZafWAoSHdYK05zZFoyMmhoQ31zYzYuYHlLVnZaaXlDSiFFMCQldll2cmg/WSUvJlkuc1NPeGR9fEJeX2ApYGVPVjteZXpxRGEmUmoi'@;
put 'Wk1nNGVCe35HZztCXmddWnJ8TSs7diZMZSZYOzQofVQsQlduTiV3VDYrP09fL1QjV3siRVtVX3NyU2oqKE5wdz5jbFs+ZVtKKjFiO25jRj1EaGMwPExPb2VxY3ZtMFdbVlshO3Q/fUdFQDc1TnRxMEFyVU5bJGcwPTJmNjR5Iyhsa1ZjK1NvTi9COVdwYSRtaDZXUmR1QCFpc1pPNjNfYiVwTnkq'@;
put 'O3M5eylhQGR+Z1JpZXs4YmtANiwhJEhKSilhazNHWFpNNztra245UUFbZ2F4aGUxUyRzMGJTbSVVODZyPT07M0RZcz5BWmQiOkU1MmQoMk9NO2hsbyUuVUByMUhMe0haT2hRQUJPdFoyfm84TDB9YDl3MTE4VU1kT2tTXUxIb1J3Oz5ORi9TJHcyMXc9VlEoPjMuI0B9L3IpRCV5QE1XYE9oejQq'@;
put 'bG54TDZXKD1RJm5xOThrZzh+JndSaWpmRmopRiZDSmg+VjJLbmlOMSN2UnI5aXMqWGQ/JmBTbGwxaSN2OnFUUH4wfExJSzg+NytgM3Rxe31hZE1mSzUyeUYrLHwuRmdGYm9IZWhEVl9pW3tnREU0L3c8bTdUJlo/Ykl9UmNFR2dwTF05I2QsNnJ+XlNoI10jWEg6VzpOVkZQLF1CMTtlZ3R9fW5O'@;
put 'b1RgbWI8I2xeeUJ0OSwpMzw2YXZzWGowPEt4NWxGSCZQVj8hMm8ubDwkfTg7LjFHTFQ9SyI3b1Z9UWJxJktvRF93OGwwbFtxdWZDQlEkaW1gNDYoK1YpV2xFRlFAOW1AIV8hMHJJaVRkc2M2flJ9RDczTSpBY3czS1dUREFeWmNKdixYblVDWEdAZ0x1MyUsPHNDem14a0l5Y2I5fm9MeG4ySEBS'@;
put 'Qk08ZVtYRmA7Mls1UCsrW2VBc2Y8W31CZiVvdWkzOjchd21lNVVVJFVvcjJMKDEjXjNbRm1xL1suRSVjdUF0fCVtXnAsR319InhRKlNjZlo1d0c6SnNkYF03d3Muc0crPnw2a1AlJnNOPCRWeSx6SS9hayEjaGJLcVQ5NTM4ST9LSjlmIk8+ISp6U2o/OSo1eGUuQzZebW5JO01EQExmS3NZVH09'@;
put 'Uih+ZCVUNkBRVE0uSkY8Jiw3a3ZZeGRSRGwpKGkxb0JFWF4jSnh0aFVPSyROMjJCa2hXZ3g1NGROKVQ6e2M7IitFYW9ZZHBqeVdfMD02RjQ9JT5uSGslZU9lK2RlZHs6Qzg0d0IlfWM5X11ofmZQfUgkNTthRTsxXlsyeDEkMSw7eFd5YmZzXTBCV29zXUkvdVlKU0M/VHtpKTB3Y218JjdETCtn'@;
put 'blNaJmMhUWo4PXxFYkRRbHVzY34iKkl6dW0+ck5zQiJwVTBfRUdsOWAzZmJPRSt+UFlOSlJXVFs4eGBOa2Y+TDtbMG9JTnd0ZnwqPnY3VDdXOXY+WmphPVQ3Z3ZzN3BVUl5rXnZhKXAjSm9aW0prdjRfMFpafGBuPz81WiIxSC58eW1hTCE0SFM4JEZqQUsma05mfXVuQ3FaOzV7LFtyK09AJmM6'@;
put 'OyJ8djlpPC95WV47dy9qNDFQdV9LaWVHXnsrNFcuKytgQnYzUGB1RCVAcntJIzBQUCxFYFdrdDZhOixdX1NGK0V2ITxXLlFSIklDWHIscjZHQX1lWncmWlROQD1ha040UThJSlhWcFomfSkrWT1DVltqSUwmT2w3RD1OfXZpTUN3UHRIemRGSWdBUFZuc2FgeCVTa0RUfU5PO3d0JSxnNyU7JWlI'@;
put 'VEk/KD1WdDlAO3VHayQ/NEk0WS8lQjBnO0hjJT9pKFp1ZzZ0IXd8TFNrV3coNVhCQSJdLlN4R095dytuNlgwdzo6UE88cDtFX342KT4qMTM1SDNNd34kNFp9XWZAZ2BeV3ZPJkF2OHRub2YhbkU4Z11XP0JbbzxObWciRSF0aDdJdmQ5KnNOQH4yaFdDNkVnPz1SWG1FUUBnWTImZ0g9RSw1byZ0'@;
put 'Nl1IUjpxNGxZMmd4bS5MbkAmPilaW2pzXVlbRiFST1U1bW1WMzNpY2Y+aXpMS0YzPGVmdiY8WE09bTZyJiJCWlpCXjZabUdHeUA2OXN9c0srNG1iaGprU0tsPzE9alg6eWZuQlMpXi9KKiRlST9FKmk+I2o4c3hqZlAwZm5PUWFqNERNMDMkPE8xM0J8RTpMbCQ7Nj1TQCVwU1hwQXM8PHdOJGd1'@;
put 'ZVcmam5ZQiM6ZSYmV210fCFCJXxgfF5OMk4uS3lrW1NCTTkvX3xMSXsxPk5xZUR6XTd6RzE2cyMvU2IoK3hKYiN9W1BwKU52cVY3Qig5N1tqMWJbQjNmLks8N3l0PzVsTChPPUEzYEhyT08yI1VtV34sfERxT1MqNmZeX1lWbVc1Nz5uTlR3JClrP2F3cUVoY3JdUHU4RUNddEtsWGI8OEFXVCxQ'@;
put 'YDFQcEJLPENZPzsiLCJqPyUyRV5EOi9OI1RSbFd3Zy44P0hEXz5NIj00MVVqLGFFa2IuPmprU2hZV2x9NEFLI2RVO25DX2VsbjJIU3pTQ1szPWdaTzU5TUh5MCs+UWk3WkZSP191TXYuMmhASXghQlt3Z0d0PzB9Ym0kUEx+a3Jnd2clanp2VHo9Ym5iNFhZbVVbXTAjT1I4alYjeHRab1opJF1Y'@;
put 'bFcwZSZHfH08KERBO1FLKGlpNmMxS11XJEQpITFJWjtELj9kZjRVS1FjYnloPXhtND1+cF1HaXIqckJOc0M8eDh6NHtEIVpTOUQ9VVVuQGNsRnNSK1NLYnZOeHwmZkc0RHYwcDBiVys/b3ApWCsuUncmbDxYYEZIJC5bU0JLfiksW3opeHMqKVVWMGJ+Ll8kPURMbiUzJCh3Om5uNEZTcFpYay4q'@;
put 'LHVYU09uXzk3IVN9PV8sUk8/VEUwbGxwUH1keCZlSUV0fkN9bF1RJFZ4NlkxW3d2fkM1U3JTRX46KmUyI2AlJGlxUHk8Pi5nKkFFeXVhNXR8bz1pfkhhJU5uczY0OlU5dkY5bHltTEFvWlcicHdidGpmKXA6ZFU8RFNWbn4+Uix1JmwzQk5OTj5QRnRrMV08VShdW1JNOmsrO15PS2B9bTwmfDZI'@;
put 'enZNQ112QFFbcEc4TEY2NGQ9bWxFaX48eSRdW2JoXTEjMXYqX1Y3SUMuK3J1LyhYYUlrO30wakd6PGo2ezFbLCE8YHZZSGRJNWo7VSFhNCtrbSNscFRCMlJXRmlSQHhqQDRAKGVvKU5RVUQkeEgzT1p0bT1pcXBTPlgjdCZAWTx8PlUqdjpNNU5sOWg9WkEydG5ybyJjYEtDSiowcz93JHFjcSws'@;
put 'VGJ8fXkoeVdUMDN7fng1fm5XWnYpeG4rXVFPWW82NyVnKEp8MywiRWp5U18kQGZXSmYvVzpufDpgeFBCWmc/NH0hKldlT1c2el9MZUBiQm8xczJmTnQpNV1xeCVWP2kuUjV4Rz9tUnlNNz8jR1Q3SyFLd20mNShiVE1Jd3kvSSRCUSJPdWlwJndtOywoJS5PZm13RiIlW1tJdTJ5UDNgW0toUmto'@;
put 'Ikl4eCYycTUlVGNvbHEqdVQjLF1oKE9HbmhAPCRybmV+fkNhQV1lSD5xeWArQyVrUyghYT9bUFRgX0gqYVZyeC9GfVgqXy93THpzbTpGOUlBQXNpVzRiJmJaYzciZ3tUUkBwaXdDJkc4RmQ6eiE0Xl5lR1B1MD13dmkwQ3JpfjZHMDpNenJyRDxbeEwzPWF6QzkhRC5iKUxpNm49NGhER25fRWt3'@;
put 'MVo2QDN6QyJlby9yUDxrLGJadHJhZmt9cmcxcG9GayJ4ekhYdlN3aGkqbj5hKkZ8M0BfVzppKTojZXE3ZWtTb0dra2I8Z1tUc3lRK2FCdn07MywoPmFXVm1VdjMzaWwoV2hKYis3bDhjVmV8cGQvbTQ3ZkpQMkxFTkJLOCU5cGN5PiRtcCl7SFg8KHtINElpbFVoXllMWEFkdkdkTmRYRE9ecHM2'@;
put 'R0hdRmJBd1NmdmovSEYifHM4Om1BOExneShfd2FBITdeWEkjfEVmT1ojMHwmKkNOKXNCbCpeQEtXO0IrLnheWkJmXS9Dd0lzPCY9OSJHRE9leWhvIWprZl5YTU97akNjOjQhKVkjWURGcXZfcF9kbG0jLlZHWWxjZnVCPmFzKzY9MmJiIVZBOTBVXm1+UDJaayEmPHlNSFAkSlc/OXxBSVA7Q1FF'@;
put 'QHIpWk4jPnUmOSYzYDFwdDdtOmgrP29xa3ImT1VYUGcwa2tRfkZ1VHt9NiUodlQ+YVpnPSpqdGV9WDJsPG5fOUNNcWN4JDJuTDt4OVRWaWVbdiIpMzJwPVNzLHYjNGJfOl9SUEQwbjRrQUtZNEpfaGYjaiMjMEd6VmZKVGpDYXomaFJKMH50UkBbUFk5e1l7SkJSSl5BWWtGQ00uSWZ3U2Y8MmUq'@;
put 'JihSNmIvNSMlPyEsdyVZc3N7XnomTHtwJTwjTkNIM1VsZ3NgYkRifnd+RykvJWp5RHAuU0Rreit4X0YyYiw/TjVbO1BaOj5ULlYkdndPbVU1I1tFO0pEWHRfKjVBPllhIVshQE9hdVApWS8yUTI5aDVOYjEpPyRNUGooQ1tucktwdWI2TiQ6TDJjVi92ZDRmJGY0ZW5ZbzNzaCoiPnEkZ1hvOHtO'@;
put 'eFRVXWhkSTZlQk54NVA6eipwc1hbUCgycSJGb3UzbCosKWh1SHV3dyhhKEBBbT9yRzBLKG9jW1Y4JSMmPWN2RkBtInEySEFFU2s/WVAxKEtWXUNtQHVQelpIQjMobWlCQzV6bUU1d343Nz9FQnBFVzR9Q09+bUV0dERPO3t2RXVhPkM2OS9BeV1EdGFOKFJ3KDlecWskJEpqdEl4JmYrRXdJcipD'@;
put 'VXliPSsjVmVFVENTQVtIOVIiOjA4VWIjXUIxJlQldksoaVAmfUBCciV4Nk8xb11KTlloWGNVPTQ/M1NiLjVLOGE1M35dcSIkZ3RUZ35OIWtRdVBOSkYlS040JlJNLyZ6P3Z3NXBzL1QkSVJvOWxdVEE8PlAjRUFHX0osYnouZnoxX31bR3VLJit5U2FuMU86U0RyJipzJGwyX010aUd1QD5eS00z'@;
put 'KDU2QXtNOkVaVC98WW00czlpNUg+djVINFZQLiQ3eGtWV0szbkZhZTlZWjthRSpbSVBDQSFEKzs8RF0lI1o9Z0tBTkd5YlVBLHVWfHFuJTJLckd5e2o/T05EQlM9LEx+ent6cX1tYTx4eTEsOG9bOHNnSkJAXXg2eHYwIXpnejVLMjNWQ2c7TlgvaU1gZjQiPD46TipDInc/VWljWUdmUz1dajE0'@;
put 'eSFMZWd+N1BDLmdma04vTFtJUTksVUQ/O3tIIiNeY3NjMEFuUXkxfVlOKj9lISJNJWl5PGw3NlRbezg+Nl93UiEqLGZ1SCZSSV5GMjIqQD1jWT44W0ArUGtVcXVJdnRgKytWKU9GKjJZXUpfZT8+KG9Rd108NnRtS0lASkg7Xn49WTVTakdZJEFibk1eVW9TclFpSDs+M1Y1MStbS2g+eEFlTS4y'@;
put 'Y0JCdnZpJUEifFM/cyNpPkpjSjZsb1hpNWA4NypITnZtYCQqaHVWV3RITSY7N05BOWM4LFN5RWhVQlo8O3RLSWgqcTVhWCN0K209eypPY15fTy5kVFBQL2AzMDYsOWw9QmFbWlVIUmdRYktxb2s3MylhKTx0enR9WlUmdHxNJFBsb0VoYEBbfWJEUno8aEQ2OFp6MEp6JHdPb19HRDQiMGNJUTYu'@;
put 'NDFfe01rPztFY3x+TXhZcGluPWJeZXBYNWIpbGhncHl7K25hdkk/NjBBaGpRczprRFZMQ0QuTGR2JjkvIV47SiJIMCY2L0xGWUZOZEI6WD1JUU9NT28+ZmZLaC48YThZUVlnMldYPyxsNDEhK2koQDFoPF4wN3xFbStVIW4oY281a0NpYH4uPCklWSoyI20pbUZoY19wM1tSPUIjcCJ6Ql0jL2tC'@;
put 'NiZsMT51NjhbLnp6Lj8rJFhkbiVXWTVWX080USghUER3aSpQREZLfFJpPCFzRTs8dkgsVSwlXkxSfkxOK2RfR24rVEokRCw0Zm9JclMiU0ZfSGhMZFJYdlA6Uz1KbHheMiNKTUMwZjJfIlBWYzZOMHY5dG0ldHtXNWE2dzZtPG8uMWZyPm5sbER0dmY4W3ReRHVZJUVdS0pqcWNyW1NqLks/P2lQ'@;
put 'Ryt6ViUzdiZAYj5XTXEiY25kJkpvRC9lfFVYal9xamtubD5NKjJeQlFKNShXMWk0SldrMjRHaygoVSV7bU1TeSRuekpsPURxXlY9NltGZWNZejxFW343ZGUqKTczcGh5MWo8PCs4YE0wOndVLzQoM2FxXVJjeWtobGQhKC5VIVAwRkFdIUBlcVFZTVpzaVFsX0lzJUUsbT17ZVBSNFtIRUQoSnhk'@;
put 'UnYqPHVoYl1uITlsXXs7cHs6M3BKZWtLQFZnMTRFWzNxXX5OPChdTT5GUGtNTHJkPT8wUCNRPkpjak12JCxmdVdoJE1IUHVzUClUO301WmR4Q3pOSHJrLlEjYXp8RiQ0TlBELHRqSnwqaGpEZHo+NExnRXZdaz9je15DfUgiWVgycmN8SHF2L3ooY3Z7bm5UVnhPT3AoenJDVDpyVyRSLl4oX3V+'@;
put 'ezAmUjIjbF9RYE1PU09AbSZGbDg0TCk0LFhsMVhIL3RudVhQL35le0xHLCp6Y2l7a2B1Tn0qIVVwJm0mZnlfI3sxWS9tMnp7WlNadksjRmB5a1B3dCFgdEpWaWU0UTRPSz5+fmIkK0hVSnx1emZpNlpRZElycCguMGkyWj8oYDwmSDtAflBYSkJlJVlEWCUqaElIMFNKez88WEtsd3V2NzY9Vkp8'@;
put 'dy5uMncobH5ZX29zOUFSUlYuTToyV2tpVkVIPSg6c0wlS0F2SWBmV2UoOTkzKy42fWswRF9YIyp1c1NOWk1QSDd3JC93VTRYT3U0ey9GXyZhQnZERFVLS1d6Y3NFeCE4O3dydV1Vcl8vdDR9SWlfYkRJPmhuNkovdV8jWSEoNS9tcnpHTlooKEEuWkhDW1NJQEtPUFpQXjt3c20kSWE0S19lOztM'@;
put 'YF9HJXp1PXo1V1tab0RbUyU/PXdPeDVdRkVyWFFBY3BkZ2o8UVRHVVk/PUQ0JToxSX5AYnVDSnE4KzhIW1ghNXFjYnNoYDIjKztAJmBVQ2MlUj54P2lqK2pEQGIrPUlKL1BBWUUxP2E8Pz5uIi5LPUhNe0JWKVFxJXAhKnRmLzxfaS8/LCE9fT9Pa2peQ2VOWVFnayZYOiU2aiNSZSFWej1eZDZS'@;
put 'Zz5zfVJVajRLNFFZRSxvaW16W1JkUWopO2REclBydWR6bSVUSkNiUHtFNVhWRmRHS3h6V3ojbXxPSzhgJHE1KS9+UC98Wz9bJF5aISg3bWpaKWRJbGBYIzk5I0N9MCxTRDZyZC4uaTFjamtVT2wqI2Y1fT5yQ3ZMRSR3K3k6Lkt0NTd4Ky9KajcuLG5YXiYse31QQ1EsakRwezB8NnIhSjU2QEBO'@;
put 'Tl5DKEhgMyZiWj5Pe2w/K0g8K3dBbVRSZiN2Qyx2YnJ8ajpdVStSPU1oQnJCdil+ZVRkaDZzJVpFeHg7UmAkITx3QEQoZHAzcHtpR29ZMFMxbS5adTtdPHt1NH5mWml9YF5HX1ttM35OcyxEcVYpI3l+dmsmZVZKQm1sKCUzQ1ZYfTNZWmNeNE40TmcvNTBARElWa25uSHxoMlokc0hEUj00LGtB'@;
put 'YixYeUNoKl9dTEJmV3pUWDdaalEpVGt5Xlt1LzJoYGNMOThYYyt8VnZ2WXs9ZFB5OH5HcSxLQl1NOTQhQ350bGRUZGZVIn0kenswKT9TeVIrQjx6LkhAI3RKSmlmdD1bSCpFbCJBekxwYn1ZQz0ienR5YkYzTC9KZjhJQk4xLkc5MzwiSFl2cE1LMS9PbUlWSF8pXyg9dHM1QV1OVlRFZnFIfHkv'@;
put 'PVUlJFJQZ2BAc2NZIlQ/W2p2Qn19akBbNmkobGppNmJLbW8sS0J8OSIoRl02R1MueGo7Q19uMEdBYCZ+RENPcXdJSzgrQilMc1UuN2c+JEhFT1UuZUBxKmV7cy4iQTxlIzprfiVoTXMwSlUkLz1IfER+Y2l0bkslWGIjRDFydXVlbCF5NzdGY3ldcH53L0E4Xzg9ZE54czJEKnwwfGV8ZUdCaD4i'@;
put 'Z3EzV1c+R2I8Xm56b3YxU3U1KmRfPXx7eW1mQ2d5OEpIZURpOTw+UypAUFZlM1NdbllzcyR5MkVBcHljWUYvYE9gdnFZOnt3Wnp+N0lnKHokKjdfM2c8U0puVWJ7bTBYUnM3JD8vTzJfdW08cVtzLEFDImpVUWZLVUJRb2QsS2A1LjpKZUY8VFd4N3x9KkxuS3NdOTl1Nk1adjlsakokRGh+eUdo'@;
put 'N113RSl+JnJiVEN8SVJGWGplOV90aUBtaCV7cVN4WGF1SyI+ZkhUfUEsUHx0bl1ndEZJWEI0L2xEV0V0Q21MKX5EQGsvOTtWeVh6a3sueDxUSnh4bT1CVGhVMmo4Qk40SmlESE80NjkmQ1Q+NnQqcV1IOjNVLik/XVFHYFlHbWB3aiFjIyFxWEFhdW9nQUMqdGtTPVNkIXlsSjlyZnFDenNTM15l'@;
put 'STByZ2h1MGR2V3gmVkBAMjJBYGMzW0c/YmpsfTMmfXQ/Yl9oNCYwWkkzPDhzWF87ZDBQSCZjQiFEQ0Z2OWwmPktTXWM/eTdjTWk3VXQ4NDhZKE4sWltOQ1o1O0h8TVQiSkRCWGA1fmBTLHguUUAvR31LS0koUSRfU2sramE0ODphdztpNTRzVCpOKnN3ZS8+eGUhO0hIIWBFfWhOYUU2UnMkJTt0'@;
put 'R0U3YjNWL015cU9RYD1OI2Z7ZW88ZTdCfHNNOmd8T0g5MnR5N3R0Tj53QlhBOnBDVTdWaW0lZCxtUFFxUm9EUH0+TmloYEA/WWVqSygmcDhZKSxyQXlEM2JgJktIVkp+JnF8RCRAYkgrKm9pMSlFM35CZ0lVKG85QlVKOmBhYVJMfEJsKE5oQFl2KS4rI0hUaUJvYzVHXTZXJDYxNXpxNkEiTSpJ'@;
put 'fVdFYEklN1VKQWR2SiZzfHtSLmRNSissWjRLay95eTo3aSVJdSFALmRSL0lVMzJCUkppYnZsYDEpKzc/T2FAQ0RDVFY/ZEBEZk46O2ooWT4wXWokV3BdPzdmdlpTUEI2fkViKCQiKz1UV1hKXVgpRCl9REFDJmNkJEVTYV1kPytoZ0NiTHRoZFI/WGt3OnNoMzdJfSZ4MCZTZkpYUzYrZjlbZDxS'@;
put 'Sipkd0JuSDdzZj1KZEZTXi51Q0BGYF9vajdWQDFIWHZ1MEV9KCYmQ0E3VDFFZjUhS2k0eEVQK19dSCJMa01qYTpKJnV3YUdmMSkkbTRCVms7SjV3fFk6OGxfWElrWnd0bkFtfEtxTU0sSklHMWJkNmxgPVNYOFp8cnpwRlZGJTovNmczJlJ7RDtsUkx6X0M+RUt4fS9WOk5hTj9MM25tKiJSflB6'@;
put 'T1VRR2FQKTUrZm0jNXYlUzJgT0VxdGF1Ilk+cyEuZk95a2VZNWt9fGo6MDVPLiMwbXpaIjRRRSk3LEVtR2chTkJYUEtMZEpJR0htMlt+WWVnPTVwaFMyeDQ0MWRiazdXP1lxUnRKZCk3U3VWeztpcF9GT05+MTVFOUopNDdxWDQxYltfRU55fGouezB2WXFYQHpIPUJVPiVSXyg0fjFQNzVPQXN+'@;
put 'SldMdCpbe01BLkZnQ0h1NVlFIU4lUmJebGx8RUhmd1dSQzs+W3d3THo9KElFK0M2QD5IQkhubSptUiJQTik/c2lwSFl1dW8xIl5TbEF3cWlwUTFDM1YyMkB0MTB4Q3hfXUxYTTZaZFtqRm9PeXQ/TiM3biErNHdPJXhkT09DeT9OZVN5JjgoOEZfPTQ2dnRZWE42a3Y4P1Ndb3IkOjNzc0I8SDE3'@;
put 'Qi4hUndNZXtOKTpuUjVER3UiQ0V6PEhAdVBsaD9tX2xdTWIhcz4rV1JwekA8SmR3T1U5OTdpdzc0fDh1aGswOjl3QU9ESSl+PjEkQX1aNXxGQWxBeHJESEwiL0UvJiYuLlBDSFQmfDR+c3VGQmJRQCl4PUJDSjlsSDxAODczSEtVS2REUDpfQEVhJi9FczdaLyVPWDZVZjpKWz9nYT1DR0NyZjl1'@;
put 'KHNGPVN3PyhrfGlmQ3JQYklMYVcsRltvXlloe0ZUYnNTX0VneUojKX0zMSUxVnpETElJZHwhMlIoIUlvMmVxbnFiJjh5Ky9UNF5XWG1COUosMUVnfkR2VlVtZl1vaXlQcnx6JnwpaCR8SU5JWEVdSV5rR2FvaHN6Nk8lLkN9R0hRV218WHMvam0zWDhzP0NUa0h8I21IdXU6K2sjUD9LJDh9QklH'@;
put 'WFZiaCtgPFJGMV9vPnErZEdtLF48RGklalp0fnw0U0lROTcxUyEqfk5IT0tZZmpRamFAVH5kIThYaHZ9NWMvY2JaZjdhaDJjS2hGM2xvZllOcSJXc2ovMFpZN2laSkhZYGpCR2EzT31OOSVWLFdYTGQ2ODt7LDpfSnZLN1F2aXJZRms6S0lTNCo8O0A2Mj1BITR9Q3toI348MjBPbVplazxiSC5I'@;
put 'aEkzPTBqcmVOcztqVnxBMSh+OmdFIyZObzN2W0VdIzBjIyxmXiVILFBgbXBzUDhuc1ZQL1cmZX01KU03YzByeClnTUk1WUNTO0tHPj1FWFQiQFk1YmJCTnNibjhOVFVefCN9b14kcyM1Zz13ZVBUe3F3V0kpe3B2Xls2IzJqb2o0YCZXcWxgSWRTeyp2O30/Llg3LHBjL20yPGR2V3FNRHRMJmR5'@;
put 'PH17KT19OU54N1toNm1kQV5jYWRBezk9aCN+Vk55SDMoRCFlJXpyPSZxND1PVFAyeDx5cz4vOTpAX2ZJUl5TUmM2UGdtX0NeMiMhUjJiY3FgYFhUOnU2JV5GZ3VKI2UhT0g8OUBqK1o2ZWV2WjIjfDB+bmg3NUZ6Nk4uRXFyWmtKI1E3LF0zalQ9VSQrYlE8VltCVCNVVX4kVCx2ci9MLjhAL3VS'@;
put 'ZypnQlAveUc8LnJMXn1SaC55X150bEtuPjFjZiI2RUhWRyV0T0dFTCMwPV9UP0UoPSo7Nno3LHNzVmBgTlpha3cze3h+ST1yNlsqNDxkdHtAdGt9OkJadyttJDwveEYwXSlrUHRGInVJJGN0X0UxV3Q+R3ZgKWwzT0ZFcmMmZmsxOncuKyFrQV0hVkxwTWs0MlN8fngren1meDw3JlQjUDtOUjt9'@;
put 'KDpsa09NLnYwNzRdeGl3ejAhaztrcE1mI0FuL093a0w8SVsvXitTJFY3Z3E/PEZwO1BzdyJUTDxKNGUqKXk0YmYjPH1teHF7PlssP2RxbFd6RypJSyJzIi59QmlPMi8icSojRkV6VSNaMmo/Sm99JitoP0VyJjJPM2xyOiN8VzBdQCJ6aE5rT3prbV8+cEprKjUyeyh3OXgrN1pqdnZ4SU1eWlpV'@;
put 'Pk0lVzBzREpTRn40d0k3S0Q6Mng5Y0hCK35kT2hTMXxfbXdFX2A/Tz5xL0tvP0dYeDtabFhNe2MwSlNwaWZ5PzRneTtRaWlEZXNpc3A9QlojND1jOkloSVAqQCkvXUsjS1liaG80JTdJaSxoTStFIVAhYF9MbVFRZFo+JHQyJkU7MmYyWyFBeSEzOEZ9Rlp5JFV8b188PUteP3Y8PCtUWCF4On5d'@;
put 'TCVVKzB3YlZdVEkwJVY5bGliYkpUemFrZj5qcFEsZDxbXjgoWlNYPFJTJE9QcTVoKXhGSnwqUUtYVnV3bk5STWNzOiNoe3U+bUdhIiZgczJJUCxjTyJzdmdwUT4uWX4hSD99fkk7WVgiISUjN0w2eSR3RmloYjcwVEV9WjBOJCM1aChwMEVuS1c8Niw7Kk5JYDx4OHxbPTJPV3leOVkvQjxdXyZl'@;
put 'c3VoRnMmJH53NVlke1g8PU17ej1dcDAxS3ZJcFc0WVhBSHpgZkp8QDRsejJWTFg6XmZrcDsvOkUkI1BJWEIjbnhAcDhyOSRNNWlAOH11SkB4b3l3cmpsaUYrRTl5ekp9NFc4Z0dZVntqXiZkZjdrX2dWVExwWnVkaTJuS2hMKTJBPmQ8OXkzeGxwK0wpcC5NPXBWTmw8VCZuJj9kVD1UK109Rlt1'@;
put 'SyQ0bGlgM1tvMnBUNTh5THZnT1k+aHphd2A3NjhaTSkrS0RSNCRIUmk7ZG4peyRTVVR4fX5pQFlrPW1JNDZ2RkN3bXQoXkRuYUY9X3l9I0V6MWt0M341PTtuQCZtKylxSm5MYngjeS9HQDFSVDRmZ2ZAPGB7Y1oxcSwpOnhpZWxMTVd4MnlmMTpSWmEvU2ZKQ3VxIS9XSn4selJYdn1aW3UicVE/'@;
put 'Q21lUnNQVzYke1cyZmxvTUI4JUlzIXJpcHBtejA0MmwhbHs6anFmUEUjJFJ5TSg/bltzXUpbUVRrJH4oUHpvKjdrbT46R3k3Wm8rfj83XT5jPz53LF5kISJwUVl7cm8zd1M+QksmcDovIXckb1BFX0NfakBzYFJXQHY7e20zezkzfmUxdEhfXkcwIT0ifCppXjV1JHY9eyw3M21YIWdjamlJI11n'@;
put 'Vj1nem0saW0xfVhwWXpaIjtpSGxrRCVzNSMjOGhFd3VLWHVwMnh0JUZIZFg2NEpXak55ejQlcTIkXzh+NilwKXpVOmJyTSwwWyklSEZyekRTVzRFPDNLMVlCRStkV0ZVNnBMcWZlaDZiXTAjfk47Und8WCUmN015UjxAaylPVGFsOSIxfCE0K146bkRJU2kkMGVwUkU5aiFNXmFEeWdZOnBFelp+'@;
put 'XlVvTFJVNCFoXTc7MyxWREF4emQ4MiROWTlNJnYzeCxHWk1iaGQxUlZkYiJJKHt5cShSZHhxbyNRZlJ6a2BvXVoySEp3MEdXPDt+e3MiV0VwXnQ2JVNMaEZII2NSe3g9dVhKMU9GLm0hTXI7KSMuWWYyR3wzVDdfT1kmVlBaSV9Fbl9bdlAhd2tJI31eZVJmcFsmbEt+fU9sUShtejhIXmNXO34/'@;
put 'Oigpa0x5IVJ0RVFAbWpdS3l+Q0kyTmoudDx1RENFJVY6W18hcTptZmlEN3w6OFs2OHBFej5nRUpNNyhKbUx6U304a00/eiV0VWY5N18hWUlvfkA/SXM9Vm9CP10hPXpISiRwTjllYjxgR2cpcyMzTzBCNVlVMnRMQDx1LmVnT3BmNFd8Tn5dZnh4MG1aXUZnZ20qUUVZUThJPzNCfFZrdDVuJi9o'@;
put 'YUZ9eldQYi49LmhGaWRyPi84MSQycTkiRnkhdzhnJUZnODNnMjd6Ty5BTC9tYFZZJTM7dEJBTWJgSGc3cjYmbmsuYF1UbkYldWo0bil9PVJZXmY3LCYiJHA/bnEjfkQ0alYxeltbS1UyOj5qIlRGSjVGQThhS3suUVtALGBlOXUmbiJTM2ZtTihDNXE3JHBPW1t8QzgsMSJsU2Eyd3xpc0hqI2l5'@;
put 'MkJ2NDQmUDtXPHh1cih3dUpwIVskUCMySnssfC86fnZUbnNbbmZ6XzhuP35Xc2ExXmciP3pqZ3YzMlFGOSIvOUxddkYuZTo2YmIyWz94RzNwVSYxKzk5elk1aG0xQHNEQHQmLGxbNlNmdndJXWFSZmolNXE3JDMrSH5zQm4yYEd3UFJDR1dBJHdVd3BaZVAqSGUhIk05a1VReT9tIl50emAsIVJE'@;
put 'OW1LdUVSSDwqMiVbPGE6ST5sXW1GelQ2cWBdMWwsJDA9PnFFNEpDNDlvQTlPeyxpQntEXypzIypaM1AvVE8pfSxzODdrJTYkOFAlUzojLyxSVk8hPnQyRFB1LHgiKnBGa1gxXTk6KlpxWEVJOlNQK151OzB6SyZhPWUxfkEuaXl0YTVUaCxNN01vMy5FdzRuUWQxdHplZVBeTWxBbzA7MF9gYEdM'@;
put 'YkJ5KFMwMGI1fUd3QCt3Xi9OQV00SmVDbGFqPWZ6RGl9V0JLUUx8I1pZeWYibDZyMGVzRSRIZEA3WUU+e0FrN1F8KDZQUHo2KWIpbW5HU09NbVFkZmN7Oz8+aEl9OyNKfkNiTnAsVUdYbjJJOXN2RkxzdlBganZPZEpwdHtyenFfa1dvUGBIN2lYNDF8OXdrb2RBZWRbTk8kXmlbTFRvTXRSQjBF'@;
put 'NmlxX3UxOiFYcmdsWVF9YCEpQyVrUVJqO2luXjc9MCN6RH5qTyYmdncxbF1oWENVfEgzVzs3TS9wRj5yUmJoTyl6Ki4yY3RyW2RKPE5IIUsvUlhFQ20pS0dIZ0tASSpQaUJLZUNhZH1zZUpLXnxqZk49WDg3YyU6NVZUWl5HZSxWZzNkSGYpWndCWSslKk1NaFA0OGBoKjdsRWxGOCQiW2QhXUZp'@;
put 'Y11UWGQrL190IWddbjx5R01bWlAzPTkzPz0uelp2YlRzU3NvJXNYa1t6JWxea2lZdldVWHJkSlJXLyttUFlLVlt0ZWB0UyRTNGgzaXovUFA9XlVbdXtDTCohPiFEQUVuUyM1PFFGPVo3P3AuPzB7RzcxZzBgSG42YUpFdmxqV2NTSi5LMHNAdl1Keik+QVQmMUshWTtndFJrXkl6OihAczNHcT9k'@;
put 'ZDdtW3ZdLmJdX1VQOSw3KzlZRWE6UCIkYEQmKltvVChWMiZPQVR4dWdPWTYhUVtvZD9hPHw1dlc2c0JnTVRYUDRWRFo6eFRnSjpgcjlRP0ppTEQ8eiN3cyhRRiQvWGB2U1I1eUZObWo/dzFkbE59NVheTEAlbE8hI3pMJW4jJDZbXSFJVCwkTXtqZkwvQmJRNT9vNTIuT0xJNyJYTDovPUw9T2hT'@;
put 'Vkp1QHJyeEp5QD0kbSIhLjdfdkopUmVzS1dqLF50PlRTMCJhJjFaMStPRV5bO2g3JFMsOHZ4aXRdfj5xdSU0fHxdIUB9fmFtQi4sLHM7Lip1eC5CQyFlbTRMdFQoIkBoXypbZDJwfWZLPyp4NDxAJng2W115eWxkdilycTBEOUk1Ok9UXlVbd3smaT44czE2MnxdeFJBR0FgSiVNOy9dTjFASjB8'@;
put 'IT1RalMhe2EuK1ErfklLfVQpPERtN18lNW8sWXV+eERkcndRezZ8Pn1dVm9ufD81Y0ZmZVoyezZjXl5tTzNrOC5IbjNSO2R3OlZzNiFCOHhfLHRYQUdUWnltKUdCdEt4dGtRNVZ6XT92U0U2NlIkfilWfmBGbCojcyxsezNUOFtHKUdgWGU6ME86Wi80NHxKUmNmRVNYJn4+bj5tKmc1R2N0RTE2'@;
put 'WyIuNHM3RmU8WjU+V0ZhK2NzVSNAS2hoNyp0I2tabmUxfk5ye3xraCZoYUE4fC9eSnd7S2pePFB+aip2UTA4eEgwXiQ+ZCwwdTdwRDk1NSslM2FpL1c9djZvZkU3Rjo/cG9LcUlOOl8hQkhiU2kmUn5oaGpLPkdUcl8mMCFrKkVjY2kyUnFfVVFvd0t0aThUVDNqfDBWYlFbeVpUTHN3e1AmWWd3'@;
put 'KVIsP0o4dzBTLHVQQUMkLjIwZ3xWWmNbSk8xQE4oJUZqLEB+UGNPOUp2IWpTfmU2ZyY2dElsfHxufFdhOS52YnJBOmNyXXJJaXlbeklCdWUqdHE7QWhkc2lpaCxwZHI5d1JCSSwlaDQvIyJMZDE0VD4zZzczY1EzQGpRPTMwO2l5T2Y5YVlva2xyTU8zJX5eN141ZzBvcDtPajdYd1ZOdHlscGtA'@;
put 'SyRoZFIlYnlIMyhbN0I5LFgxL2F2ZkVNajpUVnVlNzdZZTFmaDdfZ21GdUskZzEkTFI4dmE1ZiJpdTY6JHJRaEw0a3lgRnB6dj9tdSpiW280Py4pMkohMV5KSDIrPyVSZT9eNTBwO0ppMiM7fX1UQmolZTQqfnpUWGdZfkVoIWQwLFspTGRvKX5sXV5VP2Y4P0A3OiRIRH0pLkc/UUNwX08ibV1q'@;
put 'QTV4PHBheyh7W01zMnBfakJmcTElOmVwdDRtdk03aDRUJXJ1OHUxbG58d3FzYiZnQmhITjVUOjlGfCZlUypjNVZHKk9Id2BDZUh6W1ZrZjFbMWxLZ3IlLyllMyheQjs8PzR8OkZfIyZDMlRDTjx8ODtHdVZrbjNxbDRoVSpVO3tpcz48aSQseThqYyR5cSQhazJgSklPTjF5fCIxY05TeFA/aU1G'@;
put 'X2xQKSxubGBhRFdVbEVlPmY1UysrQHZsKz0kZ3Q/cjBZbDpDYzEqOVI6Z09aYF1+MVBlVHo/Vn1MMT95Yzg5TjIlXkMidj1taDYuaThqWDBFeGtxOl1aVm5dcSlmYDBOL2wuQV4rQFkha3JfTCJCL1M9Ri44VilUXlJyVXZde0pmI315OXk+QEA0JmVSSGJEdyh6PXJxWCkxdi52Yl92dXdyNzVJ'@;
put 'Y3QvNk43IX1HNmJhZkQpLHRBKHpzQSFxQFRMUn1YcU03Yi9PcGMhQiUrT1J3Yl1Zc3RDfjZ2aS5YPEQ0RGZNU3tUKV1PM2FWV01kWkslQFQrdElda2p2eUlBQnZBdCVsWXxZMFdKams5TiZxR3NyMCszU3hBdSVfWHo9dDdnQzNBZGZjYFZqTkA/eys7MmlOJiErUntPQ1o8X31JWkIiU3Z5em5T'@;
put 'Q1B0e0J9PUdLSVRMLChGJGwzUDgpMDJyfj96RXExZlY3d29wOjxGO3xBQCR9Y1R3ej5ZSjd4V2dEQnN4NippfDFobX5Nfil2LDBgQEoqSVlddHU6RVIpOzB2YG9uQVJWTEE0eUVVbUlFLzhkTyVwPXt0dnMqTSE8cURzYXdyI3BGUHtDIzhfTX5wfXB2RGUxZCpiTmgqS1pbejomajt1MDtnem9m'@;
put 'Z25kL108SmRxb0UhTF9sKkRGYmVlTXlrR1o4MSkjJER8ViRiM3ErP3R5Sko9eFpwX0YlYkwmPkZ3KVlJdWMqKmRvMUViKlJ9P09WNiNrVD9YZz4lYj9IdC9AfkYxKjwrNjJpU1h8IyV7L35gKjo7Z31fM0ApZmspYCJVYSIzZW9hU2NaJVJ0JGlMdWVGPGRXY3NsNW86cXBLZlUrVjkhTV17ZE9b'@;
put 'VWNeQFY2MHJTOVZNbT1mYGpMdTJgbWdeaksoemwiajt3Mz8jb0QkaTtYNDNTbUZJI3ZTL0RmOzR3eDlsTlRuTFNIQHclfEZQKHdPT3AuQz5sbnZrbWFpMSgpXi5xOX0zPzRrczh4Z3I2RWc4NiRvK2gsfHkhLjBnW1VCNzYrPVdXa1ZBcXMwYnVkeER2PF4ucihWIkpoTXBwIjR5fGB6akcqR052'@;
put 'M0BRIlR3Ml5mZHJ9Xnc7ZElNSyU4Lk9yRn0hXS8mPCtLPDJ5fXpiemt3YldTQEMoP3owMVNlKktdN0RyOTdBaE9EM3ZqfE9CUHNEP2EwQH1jdylKcX4yR0ZuNSl9bFMzd2YoQ3dfblo/c0NNKCp8fXNhL2ZiLl5qXlN3cjhSQSp9Piw9MVJRQSxsdWBQV0FwWFs7KWF1TUd2UXxPfTJxNyRUIUx7'@;
put 'ZyV2UCluSU5lNiNPZl0vfGNpSV8rVVE4KXRnKW4/MSJRI05sdiUsaUp2RDQrSzpLNjs7PihoUyx0djBndDV0cTlOc3N1MzckOkIxIzVhdDVdY0dvWFAvV3B2TTtWS3xjTitSJSRTMmphLz1iMmJQdDBjZ2FLQ2lFQzRmXWIjRTZMZTZYPUh6PjYhbTs9Z3dtLEU1Uy5pYzhGMmFPVlhNYE8wWjlr'@;
put 'aGR6YVp4TXJvZHxKZXlqNVNlXX07fUE0PElOPkdycTBSKWZlXTFPaGNSVjFCUyM8Ik08dkBiMERwNyxsR00xdT94fkxHZ1cpa3AsanRaeD5obnEqYlliXlJAVHI1fGBDQjdGeHReMk1ualZtIUNDeUhbNlc8bTt5eWg1Rj5JTnFZOWc2c1NEVXMiTC4mWXddIkdhcG9NT2s1Nl19ciMiVi48YCJ3'@;
put 'I0RbOFhwWnU1SmQ6dHRwV0dCaCMhJUwySjgobGZwMWwrdCZzbiJIclJIVXJJZ04uXnAhYzd8YmNHL1Y4NT1XMyo2bTZ2YXlCSV5sPjVLPi40ZnpvX0t6alR+LyZXeCJLQD9GTy9BVyssSS8rOjpJOWtGPjEoZERZWz56Qzd6UD1FIntzJnIvMC9XOVVTdjFVcXZOMylKZ3h4TW0zOmdmOk4iNkdR'@;
put 'NGtKaEQ7SXt6MXw6e3p5bWdaTkNfY2xCe0NuRVBhejFZSGQrUCskK1AsYTVjMnZZbSEkSStTbFt4ZXJCQDs+dCRyaCVKSUloS25VbHtfPkEkWE9XelZ+VnoibEciWCJzT3dXVDpeTFFSR3ZOd0NSeX12RyUrVHwwKSxtS2Z2TXg3e34mSXRmakp1flFOVEFjTERDYUdldz5SVChYLmpJXkkoaDN4'@;
put 'aH0+V25pYXlpS2YvMURtfSIpbnFYbEo5YGZzPX1vbX4rJEI5OlsmOSlhVClyJT4kJV17QSJga0QyNTNjRU5CaTFmYTlXO0A4KFQ5fD9qenJhSzZrelAwJTNeaFYlVUspSCREOkVoJkp+R3QvVmhxL0BvLnt7O2lAS3l6dls3JVprUjRQVixIJitBOV1xOzZfQ057JTMsJXdqZmljaUtuYEZaTVdS'@;
put 'R3VJbF1DWSk8KyQlfUJ3WkJ7R3pOUH0uaUlYdz13V0FKUzwlYXBoZFAxMXEwQmV8eTcoVWFeflhuVzY5WlI8VzxUd0h3dnYkd29iZCh+fS80fnN2cFYlOSp7Rml2d1RhJEplNntvQ1tYRSZXOG8yY1ExK1hMNT0meGBJLk1VYlt2TCN0Lnh+ey5rQSgvWXpnW2ZhRmF3U2xIZUVKPSspYktRIj87'@;
put 'LnpSbyNSKnxndSVYVSw8UXx8a1Q2OUJGcU88fkphQmBRKk53ND5naWFlUngwI3p8ampTXShOSVJvQncqcDxtZ1FNfF5rOUooV1U6NTB7KytqfnN8V3IxSSMzcnRCNEIicDguYStRQShoa2RhRDo+RyRbNW5mXihManRGZl4rZ0hZNTRWdndfYFE2PkBVe31dIXBBPz0/Zkl2L1RAKGZjNEA5KTdN'@;
put 'WTQ+RGZvS04zRDRMS0ReLlcrTUVUVGNpOzo1TUptUT4qPzU/ZlpPM3d3TzFIdjxzOUp8XT1kTFg6Zypkfmd9fE8xVk4ua19uME1oSkxzRyVjUWs+Zi9ZUEZ6QV5wfVR+clAmaCJ8REkvWDV7KyJ6V0VxQSxYNjFYSEpuMyt+TjZwcVp7RlJ2bDA4dlJGI2hfaWUvKUdNaG9XdXpMaHw6dS5MJj4+'@;
put 'UXtjTDJgUiYlfV85VCR2VjJILyh+OldwZ3JQQF49SWRrI15MVHt0SDM7b3lWfVdbV15RJSZvK2Q4RlpySWxmbUp1I1leJC5OcilTemJmQ2YxJFczOXN5VDlkWE8/KFhjb1hHQUFjdUo7MENgcFJGYldYezRpQ0E5cEFGelV1dWF0X2J1RDNIUzNrRWcyT1ZWOzhLNX1YKVkoZiZxQ11zJHVJXkEy'@;
put 'WEhiaDBYUX1lJDRNayRUcnRnMmNjfm9mWmFAQjh3UCo1bURxOT5+NHg3ZHFLKyRTLnoseWFYTmtjTWtQcHpyOXJhJSYkYlkwVkV4aCYjRV5QY319NX0hUm9HZmtTeFRhSHssW2IpYV9peXx2ZURKKGErMWk5RFtpYlNrd0VQRWhWMHNDakFVK0AifF92eCNQZStRRWdUNGIhVCRlWDJ8RFVld0pq'@;
put 'L3JHTntwOk04PF1wdGckLGRbKF5AOFFMciNQZTxUcD8+K3w1fk1IN1RlWFldT3A2YG87P3sqLDw6eTZwL0M2MUptOzp4JVImVSlUSENLJm4kWWdzOXwlZmJtcTxvQWs7L3hQVC9bYzprbyhGemtrQigjWkg/ZSFEVXkofElzd2QvQk4uPEReWDJPJVQ4QlsifTl3JkkwME5qWj46anNoZSVkTm9N'@;
put 'Y2lWMDg9ZCV+ZkxUekBdPGtLa3ZrTXhaRUsrYEMxWmJUciY5fTxEN3N4YFdQSHw3TmVvfF5pWWcmVS5KdU8wLCsvRyw+Klg3el87OmFVRCFbWyxyXXBXYTtFSXo+SEQkSispUEg1RltxMT9tOCpnSjgqczNidkRxa1NdRVJLIiUsYis4TyF4Pn0ualpiWVd1SFtJOShgZXpAOTJXSVsmPnxXZiFt'@;
put 'VUtjZ3JJU0A8dnZdfTlAc3k1SHJmfnQjKltLaTVkX1subSpdc1FIZSZnekd6ZUVnSkxtcjsrRzwsfXFPW01rdU1VVHZbR0ZiNCwpSHFTR0FzWndaKzl3cz40JW1Hc0RgV31xMUp8ZGM2Q2E4dF1LbUc9YztXUEBkYH59SVcvZExWNEh5U3lDUCRBPG5FPihUeV9gWV04W3FJfUU7OVhVI1l3XXhx'@;
put 'dH0sfUF+PXN+fjFhcT5gMyZJZHY9VH0mJXo5I2hSYXhQT0c4WGIiTy5wWld7YS9mVnVUVF0rJlRrI05wbzVqKFk9PXxQdXN7VkxMZyVfKCJAa2xRJDl4UD9mUEMuNC4xakJoWCNlNjFJWF1hTHgwJVl0TlNfZDNgTWRsMlNFbS5jMz8qXV4iMixyTzVGayRaSUxCVzJ0ZFYiU0J4M1gvel01ejo9'@;
put 'aC87YGJsIz1IVnxkeUB0bVtvdjgxMnE0YUQoVXRQXnF5TkteZDtIXSRAaT1oU2xtW181Y2Vwd2YuRHhQSHFuK3FpeywxN1U1bEJOVFZaP0dVUD8wZWZSX0w+eVJVNVV8YlB7YHJvOXo5Mzx3VVAvOE1lcXFfKjh8Lnc8aWt4QGs/KFlHUzluVmtdZjRvKkYkYnQrNyNqQ1V8IiZPRSMkQmh+UC46'@;
put 'aExlSSU6a3l9KV1bYWQiKjojcTw8b1p4QU5zYT9RPXVRO0ZvNFA1QkYwPT5sOVJeOnxYQGVMbXc+UiNXfXRHe2M4QSpnKCwrWkltVlAsLDQvSSxdPVNXQCRII2Jqe2RUY3NgIlZ1PHRaPTFhJHMyNi9aZDZHdyIpT1k0SDsjJEo0R2JTN01CcDQ7SHpTY11YbGdNPFhOVnJseSJxZT9BNkhhPkxd'@;
put 'ZGM0ZmVtfSVvVUhVVnM7K2l3TDlPeG9kc2ZUNSo+Kk1Qa2V8fn1JdyhsaWA1W1dfQHZzRENqIzlUeCJ0TjBDPnVwSCt1LykwbSIsT2t0WVVCeEw4VGRkPGJPMSM2cld3dmBDNzxCZyhVc1JrVmB0fEJrRkVqS0cxZWkrQlJZLFljV3hFP1FXe21dPiM9QXFeLGV2SmlLTUclR2lSJSolZEBuM1Re'@;
put 'QzJQaWEwcDU3LmxNMXR0K1R9KkdUT208M2k0YXo4ZkojKSUsK29XUDpuan56eytGTyFaRVNMW1NbSmRfPD9WT10rTl1aWShiLnchfSpoIWJnakE7fWosUUl7bEs9KnxwLzYyQHkzPVM4fnAsYkhxdHs3SilvQTt6ajFKJitrQSomdFdXUHM6Nk9mRGozYGl+JCQ7VF0rbncrJHQvYlVQe1kkc1s8'@;
put 'RWJ7N2MzR0h4YF5aImZpOEVJK0J5PipVb1soPD59W2RNeUMrZ1hgSzx9dWBoeXIiL3o5SnxYNnM3TzhBZUtobTlAPlApaSpbKixiKThXRyMqNUlWSTtvZHVYOjluTWEjdlJObjZaMCpHPllQXVdtWDoqJWQwJiRdO0w5TmJjUywoLGRTVkE3PlNAQyh3W19xSjR8YCRwTkB3IUZPTGg6Pjsqc2pC'@;
put 'MHEvXXxfPFAzL0QmeGtQR0BhWmVnOS5aO1RITzNbY29mZjJfMUE7LFVaO2k1Ym9CZ3soemFsbVYzayw6S0JTKzgqTFEyWj1bezBaeWNMdXIhczc1ZCZoZ3YjIWNPYHpGOEciNkZ3JGF+KmB6UExXUVhxSTJ2UnM7Kz1NRUNkUXkwTVZefG1IKCV1bUBgPCU/K3t+UjI+Y0Rrbl8pX2U/SzdUYSE7'@;
put 'QVU4c3lVfTY4PkhIITx+ZGplQ3BIMC9uJSYzYX4mP2FYNXpXPEM0SyhxMTRyQCN4aVspODM2NUN7MiE/PDhNRmwyS25oO0pAJDVPYjhLe0EyLzRtST9xVSpQKUpeeWRmRCJdb2pWRHN9dXEvXiF7WCksb35bUDdZODp6Nn5QUDJYMlZsMUJscTVLYEllJXdATSFPN2h+PjlZb31nM2U4fW4mYT9s'@;
put 'RDVYJSZHe30kcFdMdGBhNWdEbH4rUlRMWDUhZ0toN3EiN1Yrdl1oO3VScTpaUCYvdn1wLzJ4bVNobGhuZCxBJXd+OWdnLEt0RiVXLyZwKS9BPFFPekAqRkZdej5KJGUka1Z5TVUkO0UlfHJHIX5LdFZRUDpTYXlZTyFmZ3dxInYrVnlzLm9MITwjNzJtQHkxfkk6Um16TjAvRGxFS1h4XVdRIm11'@;
put 'R1FFMkNTdWpfSmt3bnArUHY7ODd8Mkg6bUYwbkNwbiNjTis9IWA/WF4uRWhpXixnUCs2PW1ASkh2P1BkVCRvUkxnckgzNVJlPX1tcjE0Jn5NczBENW1afUBIcW1FaXwkMFdrb0k8TTlKNyMmMlR9NE99YH4zXnwyUS98ZH1HblB9XjtSV3s7PXNxMiNOQ2RXaHFySj5WZnNSZjtLVStXRWgvNGNY'@;
put 'eFo1I2AkWkpbc3tCR25NZXliXyFMNjd0LmErQDlYRl5xQ0pdb2c0TCoyMlhWO3QpIkN8InIuJDc7XkNPO2t2WEVKWDE2amt1K21Bem49b01jbSpqPGsrRixzPFEuLmJ8QWtGVjA2PGU5WVRXKm5FNVNwenEhe1UwYGMqMlBLZVJ7VT5rJD98VCFdOTpiXmgkJDNydyRqOFY5bEZjKjFoRyEvdzwy'@;
put 'InhhQTN4MiFVOSx+QiE4byVgakUrPlRvNz1pZm5+fUI+Zk9XPm9kdy84eV8iWW51IXRTXTBhYXFuSy40eEw6XSorQDhbUzxXXn14NCh7JEkxcyo4bVg3IT9gTDIzbzBQVkJ2NDl1cSpeZmteMChhWDgiQURuRjlpeHt4LEptITtqIldDJEp8JTB8MClnc0hyPCxzXmVMbUtRRCtdJntucDZPZS5Q'@;
put 'dVtUNChzWnY+LDVwNXJxLzVRTGF7R3YlREYiR35aZUhhLGc+fStWNTo/VSZBZDpMX2kmKGRuPVcrZmlqZ0QsXkxdM05JJil5MWgsbmFxVDpiSys2QmVXfD1ZUGNqZ0dUYWlJO3NOQnY9biJkP008Ok1RQTRJcXpqVy5pNzpKJX1OWnZCKGVUWT5dZSReX1hwdkFBTzI7YGZCUGY+OmRPT3QrTmdZ'@;
put 'c09rMVl+JnFeIToqVDEwaj4mLi8pcX4xN0ZvamNQWjNNS2pQcjxkU0BuS0lnZFB1ZzhIazBhRnw6WXB9OSpOYyojWnhjPDFiVk84fmNRciRUPWI+UiF+Vj0kfE9COkxSQzZOZDRwSEVVZXlqRUhQVm43KGR0eUFzSzR4ZlJvakIxJX04PVcmUi9KPyozIiF2emV9Mzt1SHwqOjA4STRgcllVdjhG'@;
put 'b0ZjIms/OjtVSH42QF9LZVdpKj0xYllKQn1FKjlCUSQsNlF7QFtvSCkkeXpxWk9FKGhgdnBye343YyJYRmYuQ0lnVXFmRnhAUHNbJXRpSUwmUkQ1PXolWnpnbjlkSXFoaEx5eCJhJkdWRUZLfENLTFo9TGZ6I0h+bUJkcmUsTEI2KWlfO3JHd3llNkBpaE9vTGVzcSNBSXc4bnNYO1YvMkk4akQi'@;
put 'Jm90d0I3e1o3XmJHKlREPm5DKjZDWGVZVV01QFF4ZWZAdm0sKSR1MFY4S0ckI2oxKWQoLDxJRXg0Rl1iV1B6cTJKdWAhLD1XaCVLb1ViIUJKXn55UVgyU3NvQntAVHxvU3oyfUwvXjZ1bERmYFEsMXBGNitpckttfEtNY20jNVZ1SXh3fDY3OFlPeXFJJUI6ci5KWz0oNDwrIntIbyxEb0V8YUx6'@;
put 'dC9faj93LDRNaWx9IXJxWDssWjRsLEwkVz58Ql1hRWlrRHNXWD81cypFYlRLMTtyOTM7bz9tejxWbnR2SSFOazQ1LkVAPnclNmM9eTBQWEdlOENhSH4vc3d5fSVAITFTWDtZPlB7IiM6Z348VXFrTzlhdlRzdT1WbldDVV0yWnpTfTcwJmhtXltTfTc4Ql1lR2cleyNXPE46S05RLDU5d2BvU2c5'@;
put 'YlVYc3NoaVF8VmB+PzBuQyJeM3d3IXVqOlI8OzQ4JUMyP2lMdCI/cCRuQiheJD1CM2Erd0lIPEl6NDlOR0tld3YmMXJQU1BoYW48NUBAT1cpYHwqTl9RZC8lOVdsYmU6PUMzSUVlTT1BXSk1Tm90SD5QUCw2RWRiQHFrMXxDSnkpfipoJngqe0M7bGg0UXVrTnNTOHR6ZD86T1plXWwkRENEc04o'@;
put 'emE7QEEvWWFNOyJITTxVRFIvV3RiW10vSW0lZCwqMlAwKntHU0l+Y0ooMm0yXWZTP2k7eXd5UHNMTXghaUBtVDBpWjZQeXcpN2tlTl5wQnRJTD9DV0AlOEYuOEJPOUZubW1qLEpCTmJvVCtmQEFSNkxpYCoxaUZsLzpWQDxIbGFmYTMjaEJ6Kmxgd2dFLmFBT2VBP0Jsc1dDPlRecEFFP0ZEOiJl'@;
put 'YnwkVkRfWkR1YDZSSGlWOnkvNCN9QC9ta3N+MTxaL20uMzpUfURxejJva3lTRE1rOkRlIzRtNWw5ZEApYyZ2RHMjOG9GPTY5R0RXJjZDd1VqInZQeUJ1LDYuUCMyNndjcUAkOih6NVN7V2tPLCkjTCNwQCV7eWNMc2ZzKngyTktkPEpRRV1GO2YmKHxNLEhXVTUjYzQ7JFM4XUd+cGhKYzN9Q30+'@;
put 'R2B3fFRyNyx4dzx6W2labVN2dmcjQ1A6fj8lTj5HMFh+WEZuY1FoQTp0aEZncD94JCVMOTJDOyQiaChaX0BjSl9FTz0wUEJlTT9vU0R1dyZoYDFoMFlaPEgvfWgreUphTT5RXjBdImxaQzwoVEhARj9OVlRsMC5bSDVnNHw6b1orW1k+OWJ5SChzLH1uVjV7VHlne01BYzpzRTBjS1thdFtofjsm'@;
put 'YCV3XnkoWElJKmhKRXJUZipuLiYuO3BoWmdlUTMyRnl4eWVqT10vSGF5K2VTczN8cms1UCF9ZHMvPlkkfUQ2Mz1XSzdLZEAvNXgrallebVlYNVR1Mix7aFRCQHQ2dz0mJVp0d1RsI3x0VUkzK2d4UixKJEB6cm5ifGFKPzhmM3xePT0lUFRMX0l4bWFGTVRrQUVIV31iYkZfWTFIcTFFbEomIXxv'@;
put 'RWdWeSI8ViolIUxpY2VyOUJxOCZ2KCRZI1AhOH5qVyZSOGdgV0MyQl8sa0I9IVZUUlFtNkdUYk0rN0htU3g1WSFxL3s7WnUuaEVUcmFkR2giSllBX0FAd3hKTnMrJiF8RiklSyxCLkIzOFA5Vk1+e3plUzZsYXl+JHZPMCRTLitSNTB0ZE8scn4yfC9YZTpAXiw5In1LOD1nIVYiVlJPaXhPYUpx'@;
put 'dDh2P1ArTlMjYjtDYGdZbTwlYmFhRkIyLmR6XTEoTm5dUGlfTyxbRVE2PTJJMyssdEhOcTwrM2Mvd2V3ZU90R1RTUksvT19XNWF+LHshaXkjTlBrcTdWakg7VVBCMztkdVs2ckYhLkNQQGw1IWB8eFdSJW5NVzxtRjdiW0ByRCtGNS9qTDhqdXImSnBtZHVBeitdeyhpKF8lP1ZIYCliQkQvTFJj'@;
put 'X3lAP1tEYlEsWGJwQG1meDYiIkwhV3dKck8jRmFVL0NpSDhrNzlhKzhKLmcrSH5wMkxTeV0zMEJkX09JLiYieWNzMkR2UVhmb2JhXTBCdFhtITpZRjBdUT9vdyZ1V3ozTG4jWH5mJE5TXV1NQ0tCKFZaK01OW0RqMzBtQilnYG5gWkgsVjNReyUudDZwQ2Z4XjdbdVM/ZWM2MzFtJF1uRSQsQ3da'@;
put 'V2EpWH06dHRXO0ojOyFnMTFCdyI3ZjxUOl8yQU8uXUBFT0Q2QTNwPCh9P2VCbWlGbzYuR08oMH5XanZ2YVt9L1ZNbE4vaFpQfDl0KzxnLl1yM2pOV1A+WEw1b2EjW0UqKGpIJDAlalNNViRhfUs0cTUmUjsqS2k7YUVPQUc9dFQ/ZU9CYmBVIUZQbFhrPl03LHg8Pmp2cUQsamhmbmZ0SWQoa2lV'@;
put 'ZGc4SXhscE1HI2wvVWduSCtPQlMsOnNCa3l3Ql1NPUo3VSIpWjJKeTt0S1hDfF5bREIrV1BxSGR1aUk2dkwxd21iOW5FN2Qufl9OWnlobEBOZFs2UEwsckRrIzJadUN9ey9FKz1lVUNQc0Vqak5mQyk5YGUvdTd9NmRdfWgwUDFHd29NdVkoSVtVVEBfWSsiWG0mQHFMZ3FCWHgjVWA8VGApaTZZ'@;
put 'IkU1LjJqWjMyOnV3S1V2Yl5QckRZbmdQRlc4RC4jbH1APDVsNVNMQnk8JjJVcTFRcHI+KE5jRzpGT1M0dkIuXiVUV3RhUCE/b3tyc0A6djREI35sVkEhWWlBIXZFWnQ1VGNxfiRaJk9ueWcjKH56UyV3NEtWUyMvKjlVUWlQPnBgQS9+d0Z8Sj9BODQhN1pqaWAzPDcqNVJGdXhOTFdMZUouZTdh'@;
put 'MWY2TUI2aCEyJj94dXR4JUg5SllTdFNaQWBzIUNmXls+WmolW1g6O0ZmVXs7VUJnPVByYix2SEp+W2JAT3QvQFJgWH5FQkZ6RUkpKjpkWVFwZjQkPV9DZmspPUldM3VFM1hHPSRJcDl8cTxjQ2JvbyVMK0FeLDw/MEg8MyM0QSgiImNtcy8zWWtSVlYvKHheMTJjOCpMRChAVlRKdjNuY25eU2RO'@;
put 'OFkiWEVFcD8rPGN+WUAuS35GekVveUAjZUw8Z3ZrUyk9ZHFRLHFiJmgvb3gmYkQzd3xQOkdPaGopa2ZxIzUqTHNhcT5FaWN1OX4rKm1NZiIvY2V5JiRCYU5Sel1UTCkzSmpmRmM6Skp1IWViVl5PaTBNKUo0PkZVdUNwLyFhdThmVEkmdTlFb09LbD5sQmRzO18rSXt3a2BAP3F5aEtXT11Me1J8'@;
put 'I1Z0PCUwdCQ/fW8haSVffU5OeW4wJXZDb0xXRCokY1MoSVltKHc0fV11LDohZD8mJD9EbygzL0RCNHZTdTh1SVkjIyUrfDEudFA1IXJvV1dXR29GP01rbSxsRnJiPEVNJUI4eHx8S19rezVObDRqO1Q4QHYkeF1hT1g/Lyt7PWskOVZqMVlhciolZEVFbHN2L1tXJHBbUDEqKEZQPVA/RWB5LF9k'@;
put 'Z2JddURMSXM4fmhmWDxBRlVOdEZeOFRJSHtqPk5QOys4dzxiPlhVRj1YQW9IY1BlLio/JSl6S3NDYkw+RVJGZiY2OjgrSUpqcjEhfUlNPD52MHosRitTfH19UjU/O1FoSmNfeV1TfVo8NT4pfXd5RmNrKHV1PE9aKyFvQE51SzVkWFRsNExnTDZrJjVyUk57N356VHcxJT5lKGhhfnhzUSVdeGxC'@;
put 'KHsvfU9tOiFxPmVgInNaUWJyWCZKZWI0dnVqKkBhPCw9MTpHeVRxOEM1SG8yPkt5KTE6Yy44I2pUTC9YeSpBZ2g/fFtNWUlGLyFJS0BCM01CaEhdVT0vPnNoMFQmPWcicEYmZVV4X2xjMWBCM3kqVF1gJilKWW9fWG5MQlZ0ei9JOG0oNkZAc059Ok5LOCIxUUlFLGxAJUMwKX5HMDJ4XXMyK2JX'@;
put 'eG1pYFRsRiZQd1RvYl88MnRwW25NIkwhdz8rWSwoNmQ7Vkh9QUU1V0w+LkwiaFN5bmg2QVJGZjoxbmc+QDY7KmlaWy9db1NOfDdYfHxsZH5eWlE+JSU5WD12TT44eHl3a287IyNNdWIjK1dLPSg2VD1WIyRIZ3Z5TF5ecHExVjdZcCl9aVlbcnZrbH0vPH5jWHN9KSlVcnElSDJNR2QyRzUxdUlz'@;
put 'KTkmTTExbWddXVJAUjtkKGhYZE9rNF13ZXdrdzQ7bGV8bitiX28sL3EpfH5fUD09ZVNqOWtZQV1uQnV+MC9wM0t4Ok4yNChNKy41PT0wL15pZHl4eFVhRX56UD92X0NkYUVmOzVddnVqMjk8NU8+ITkySnBlP05Dc3NPSSZkcD5bL3tMW0ZQZGRaP0ZNOEYrfnw/fTMvPTVQKitSandzXUI4XzMm'@;
put 'UWtUN15ueDohe1A3bWdCZ0QjRCw4amNxOHVmKDA/bTRHQl4zWCxFaTxscEk5WUhuPylVKFV3YSpEUzw6YS9ESCplXzxDQjBHPHRYLEZ4LkxOISlhI18+Y3BfT0llWjolWX43X11rKn5xYkVVWVp9fnQiMFJHQHo0WGtTVUxTQEIxPGZKaXlFa0k+OnU+dHZIbllxT0hMKy9xbix+KGBbKTVzbno6'@;
put 'MGI3JU14L0ZYeE1bMmEuTF8sd24qcV0uTmtTVkVmcFdPZFtPRT00TnpwSjNAMDdpUXdUQHJ0Lm96fiU0ZyxMMW8qdlhUa3ZWTFVBaiF0b2NsSCFCfkZUM3JeMUckZFc0Inc8JDlrcSRkTXV0VyVhX2pZZzFuPjFSZHtOWVQ7NVJmS19aIz5wSzhAQ3c0JmM4JjVMbHtGZ3E4bzx6MF97eFdZZHJt'@;
put 'KDhecDpuJiRtW3RqKCEhODRkSVdxPU1BIVtHR31PO1s5VVR3OjFlJE1ObVoqfiQ9S1VqdyxObml4L2x2L3JPOWZMfGVWZitRUHYiJkpGdCloQnghSk9ZfW9lV0x+bkhgTiQzPGM7aEBKa1dNUmFAKGhvZ3I7Tm5Va3J1S19VRTVydTg8VDhHYkRqfkhaWFhSWGhuMGtxZj8ueCNkQDxTXz5zVzR5'@;
put 'QX0lcHE1R35YJH1GVHh1PktqRl4mZX5KN3V9eUxoa282Z29yZ1ZkJiY3bGxSJVJDPWRxailxbDtqNSNmfHdsYV5FXVI2I0xkJnpeZ1AlJHQvY3Y9YlNdal4haVdCKSEpSXkhXlljQntMb29FYV1SKGUzPWE+a25COXlHOjQuYXNLSXpdTDRAPlc6MTV6O3g7azMhNVcuZlImPVlQP00xP0hhKFB1'@;
put 'THgxN3g5OVJkNXNRPDE2c3l4OWN5VUhvUjlGUnx4OmBGZSYyMT9WamI/ODZPNHFLVWk2UWU0YWAxXSN8SiV3NH15XTx5TU1Hbk9iYTZuU2tDXiR5YzVeXjA/b1N2dz9Za3Bren0mYD82NGdEZm5jRTEyNURzNTgyUVR3eVlEbDZ3eU06aUg5SFtWWGZZLzYkZWl0T1sseHpoK08odSYjSzBSIWY+'@;
put 'clI9OHxZbF5JaWxfUGslaTdJU3ZSUGx+UnQ1TG9LJVlHOEhkQCtHZyYyVXhJd3dnTy8qZnEzYm5FKmQhWyluYD17R31sVE98eFRgbGlvM1A8Z2dtZVozKyFLOz8/YD5IMV59WSxhMFF4dSNSM1I3KWEpTHoqJEo/bn4zaSpjWWIhOiYmX2g8TDgzNTgvXk5zelJoYE40b0hdd25PVnVWbiltbXxx'@;
put 'PSJHW2ZMJThTa2FJdVhzfUk6RyhXZkY7dm17elkmVHYuUUpDM1Q2cCJGamMwYztwY3dYViR0YDtmZG5yIXRsIilwOGlCUm4qYnI7d2E5dyIiNGQhdnluPDpUS28sUjV5STtMMlBlVVlKRkdCc2gwblRvT10obUcwQCpXbSE6MCpkaTMjPEFgVkJtO11OLi51N1hlbHVoJTQxWytNWVN1eiE+dlhP'@;
put 'fiU9QURxZE9DPG5rUHVDRn5ibytVPnhhTWUleT1kZHpfK0JhUTwkKGtFaStBXnpXTkpSZ3R0IyNpNClqKVVfeUpEVHdxbGBpcCF6U1ptaVMmeVRRQzk0Qlcwe1s6TjsyZ2ZINTgpaHpuaXZGTTNbWzQhTG1UXjwqQkZ3V21fZXwkJCFWcW4zWTtuWGJCXkVOSEQobkAwWnslfVhGJWF0VWlLYixU'@;
put 'ZTF7eH5kOjNnY3xFKUciNVksPWhJMkJVQ0YlXnxbYSshZGM0MigjVjghay5wYVcjZX5aYV4oejJERU1hKnB0ZV1aQilzNWZuZj96JFpkZTpQUGNneTcoc3NxeURCR0QodHhWWEF8OiZ0YnY6WUBdZXk/QEpEZXczdH53RzwqLH4+P0RIQz1gclUmNXIjVE4zeiQjPlojOi9FYk1YPG02SzF0VEJU'@;
put 'fUtbZDYqVFJ2dzxOVSReJW52aCYkSlM6UGdqNHJ0Z3o3anNpP2BoZEdMQmZobCg3TTNdP00sfl18L2h7diNuL0x+Nz43enhiaVk1JjBBfEU3Slo6VT1ALitwQ2hgOkowTjZmX0RldVUvRylUUnB1VlNRUypla3c4MTZhNkJCJnlYYG15MHpeRno5YlcrUF9GVT8xaWE3L1QkOGo3fmUqRlJjTnI2'@;
put 'KDF3VSQyTUhuIkY9dDw/Zmh2VTI9YDVCPFs5alQlbz43SV9jSzw2NSFGd10sMmMreU1AYnp1bGBPcCYmSVE8Ll1+XVY+M15KP0pBLzlWbnY5fmdRdmFeIXo8WXdmTXZ0VGhMfjsxUCE6cUV5Y3ZWY00xdTZUODV7ZDVSKl1eR3V3Q05XXjxYKn4uZWx8dj4/QEoxfkZIfnc9KT9GR3UrRHMmNXdE'@;
put 'fUkuIj5VSTY8bSE0TjQ/YS5DYnU1b2hZQHRXXkE1JF5xfTBaYDphMTdqfSxtXnNkYThTY1QlUHcxP2ExbTJGZkRNJWE4QnVWYXg4OnRuRTglNFAwdjh1RGVtOm1xIWx6TXNJRTNfSkd+ciJBKyg4Wz9teyg5RHIlQGNUOEZDeDJ3RkQ6UmdwTHhFI0E8RHhoSV1GeXxeVC5ZN1tyUDddOVFEfShY'@;
put 'aX5vVGRReldGcUlaeDJIQiI4IyQ/UlFUen5lN3poT09hUF4iY2ptWV5wVDpvUUY2cE5iTWY5bnkhYVN1KUoscENRYGpyOi51Uzt2PUVJem9rQi48YndESXZbMDNIPSM0Xjs/aH1tZFpaTSN4MFFddFEuUWl5IlorI21SXXJCfVAzeWd7SG8qTXo2OUhuakZgVjd0LG5pd3pkRGs0YW4oU3p3S29Z'@;
put 'QEAwT3NhPHR1UjRjXUdgKD10JH57Q2JLfClJeFEzMG1PeUFIUkolSyI6XjlyQU19NFtucXRKeHZKTnBXZnV6Ql8wcEJSPDk0bjU8cT5EKDlDZTd4Inx5N1Q+QjsyM2F2KVJ5NDh+PF9+cHxEVnhieCVxenY7LyFrNSQzaHpZX3pkUDJVMUpVQyh4Y0d2YihbL0xTUXBbbzNDJDJva3YhTmpMXzlY'@;
put 'Y1k9SFRQM00+S3RhT0xIaTFsbXE/Ml40akV+KyQ+L099SD9uXkFiTiQ9NTNNfllaa2gxJS9WeDQ4fVkhRmswWDhhZXJ2QkIsa2VIV3U/WEtSM3NjXTtCQXp7eGNaTU1hJElfLmZyZGxNXVNsI2k1YUBWYSR4O1cwK0YkY0B4ZnZrXVVZamR4QyJFYUFDQFVGOjFKK21veDF3WUx5TGteR1BffWNW'@;
put 'bmxnN3R9bFpGbT95Zj9LO1UoWEBXIXNXM3hCZmFNc0l4U2J8e3B7KipePTEvLlpQUTk5bll0aVZyUDAwdzNvIWosY3QyY181T301aToyeW9HRzhbKXoieGsjTHQ7fCJzPD1MKWFJQD5MZzE/LnYxVHxuQldpVjYkJj8qOGlRWHZbVVp8al40NGBxLk96X1dnWXZ4RUBMNXxKXzk5PUF+ez5sQzRC'@;
put 'MT50WXZRMjxeeHdyXixFai5rWjFDcXJdcVdDMElfZmo2cH5PfjdMYC4hQzgyUmR7Rz4kOWQ8X1JLPzhmcykxK1VIPVlBcH1+aCYkeiFhVDlMQkJMQXMxays2Z2IwQCY0M0t5Nn5YZ0okWGNDZzpuTi4oTTslI098RChDY1JeTko6XWBNWEZuVjwjfihCTlNJLmhQR2JLXVZvPVcwMmp4cEN3RTZf'@;
put 'NDZXbjprPkpbOzNBPGZfaXlgKEJDZmlfbEVWQEsuejYvLjBuaHhkPmpLflpYR3xKRGIoR19BOE5PT0JwbTNHQiNYVF0oQjp8ZF5wNTZHJDRxW1ldLjtvJXZbT1BkfDhKYCJBU2BLZFNeUWM6I2ZaVjNOY0hoT1tNNVAiKWIkR0dyQi9oNW58Lks8K3ptVk5mX0Z0aXd8VyUkblQjOj94MHgyZiZi'@;
put 'ayF3eTRwWGAxLHAuOH5XS20zMWI5PmBBSVdRKHRmUWM/NCNdNCN7IipJVzREe2xQcGBeU3lRSm0pYHRhMERTaipQYz5IWXBQL3J3RUBLQittUkRjMih1M0N6IzNAbHpQbCklbFhVcjlRenBGOjxFX19qXmJ1Unl3VWtIXW1NbyIme0ZTUk4jamtYNy5QUkJTQmYuND5IQkhKLlo8SHdKI0o4flV3'@;
put 'IiYvc3ElLnlLNyMsTWFeWkZbfClRZS4+d0hCWSlPJnFCaiNtKkNFaGR7IzB0QG43PGRDKldQTi9PbipafFssXT9QeChrUlF+Z2c4K04hcFhnZj1oeEU9VE97ISttIzt6fVF8LCguMUtRL3Y3MiQmUW41ZihXW3JgN1ksNl5eR1tUO2IoMTJQPnxkY2tDODZ3eTcpPSMoRCZkY0BFTGtAPzFRaVtt'@;
put 'JFc+R3NaeDNWfkZmYmZKKiZXVFJ3Jk1heFAlZ01oRmVEc2J+LFFnY0Y+NU5DcnxvZWx5YTtZVndCX1hTXXJeY0RIUFNuTlklJmg/MkxgbDdxdXB5ciNOa3gwODQmWjh3PSE7ISVCRiErSiRiMWglfDpMNEJOMCo/dS9YeVlPbyJiL18rIV1XcVpTQS5kK2Iyfi87KmEmOjs/S2lgTGB0MDM1OHxi'@;
put 'ayxOZ2hDKnNOOUZVaz9ZKV4jby55c1ZQKnVvPWJVTVd4RT90Sm5Ca3Qyc0Y1d1lPdGgjTjh3MklMYzY0Rm1wd116TmhQZ3tlfSQ2WXJ7dTpBfiEvUH50e159cTNKcUB9dmwxci9GV1Y8XiFBT01SRmJBTTA1Pko9VntIZnVfUUNaPTIlVEtXeGpfdn5VOkE7ekxQbyYiMVshP31mLik8RnxBT0Zx'@;
put 'dnd+WG42WWNzTV4sR35KXm4oVjpbbEtCMXBRPXBSQjRlZENgNmBRb2hJPUJOW1FbUDAyLiVRSTZKTTxXb3ZDbz0jL31tYXNhTUA6akw0Si51L2orXT4qOXBNTVhiZy4jfnR4dWAkUkFYZHxWL0VXQlZHLFZMRDkleldFfUhMYz1UcS5udyg5WHVfNGEiQzEiIXQyflAvQEAzWyxtL0ljI3dNb3Mo'@;
put 'IzspLChUZXMzUC9DOXQhLGo+OysqLHYib3ZyR0pwaFhVLkx3WUxfZnxCNDd1ZixYUipsSDxwVGd4WXt9UT1MeGYpfFUjTyglbC9tTUxkW2ckTSEpZ3ZnPGsjLn55X0d+Mi50WnVoNWJhTVBxVk8jOnZmRHp9NyZHQzhFJTx1dHgwdUAkNkI+WFovNlB3Vz5vSzRkYH4+aTtKO3tiQUJHdHd0c1Ve'@;
put 'RllVZ1VhK3tReX1XM3xEdyFgV1J2OX4jTntPSylVLmVTJU45KW4/QHNVRH1lIkdYQkA3Xk5bYkNgRXtvek1NZks5Oio9dW4je2tIRE5QJTF8a20mNEd1KExId30yRnNBYV1URG1YVn5XcWhfQyJRZjp9Iz5iM2JNQ19oNUtXfm1TZXlia10qQ2RafDt8KW8yXUNFLixQPnNTMCl9fSZ+Ql5HYSpf'@;
put 'Mm1BODZTZVd2KlsrQnFhN2AzVXozaCUrWzFhRCxQSitQdSpHajB8fktMTUpsaVE+Qm15NEs6UjlKckRLdkMvc2pFQzE+M2pNajk+STFrdXA5aWBCfXFPWCJieX01TSxZcGxKOntZOHY3ZCx0M0dKUW0uTDQvOU5CaTklZGRqUCNYYXQzJXBacWN9NG1+fl1bRilMZCh9VC9EJnVGcCIzSkpAU2lv'@;
put 'YSxfIjF6fTpDJW9xe0Z5fE84QyhTb0N9N2B7bjtPI0xjYkkpd1BoU1tgZFBVaG90ZEghdTpRZzZ2Ny9HTlt6LiUlJkFIPVElZEN3TS55OWx5XjIhR30sc1lKO1BgTyQrIzhDdSgkMnY4Rko/eSIrWVAoLi8jJkp4K1pSRXxgbFhLL2ZPdD56Uk93MkZFc3NYODcsXSROLiRsZ11IeDB9ZVt1aGdC'@;
put 'IzpYQHouUyx1T0xJdiJpQ3lTPlRVY2hDXTpfKUFGUz8+NyhzfnlOb2cvTGw7fFFXelpadigxZ2p9JDYkYWIzaV96aUZ9SmZrajNdNSImKTROKFRyLkokNGlEKjMkYHRqd1A4U34iXTdyOm9aUTdZPHBFPiZJPVNKO2UqaDVwfXJkcDZKYyZLdjsxPjN2SlsmMGQuKEguV3lzbFhNIVFAampHM1p4'@;
put 'XkklWkhZentlODxeViZZMDhDU1JQKihfNi45V3tFaixOfTpXXktOVCR6T2dDZXhjbmZvRzZbNkwpeXxjUnVxdEdaWGlSODlyZ2I+T09LMHBKM0BHUkt6Y2UpSWlFUl09WS97RVJGeUFHNGBiWTpkKztDamgkenpDUDQ7QWEjSz4qSUVsJixhTDlTQkpkKXNXcFAxSVJscklSRn0vPXcjPW1HLlky'@;
put 'bHg3QH4hNTVTO1M4QVFmZTI/YDZGdG5lZyFTVVtncz88M1E0ZCFwT0Z7O1N9clJ3WG9bRUExS2ljITdicTZra1drQClfRFsheTBhJShtSXNbNWx9MDtGcH1LVW5VXkB3aGptQFlYRTJ2KCRuQHhjNj8oMWwqMHNTIjBdciQmUV5ISkleQFFTXTlbUnZOR1V5PzU9TD4zZyRnJDVedEU9V0NzSC92'@;
put 'X0UyL1IqJCYwLG4zeDh+QlswQS8vaCpXSX1XKUp2W1trKmNIVH4vMSMsV0poY3Y/bldwWilPRTFAdzZyQig7VV1EZX55SGJAdEFWJUMwL2JIQGFsY1JmIzY6QCNsXmI4MjosWzs3Rnl3VFFafnhFLHtdQjg1SHgiKWUkY3QkNiEmMCNKXVckNXVxSDcwJnZ3Qj4+Tm9yRD1EXyZjVXIjJiFqUkFG'@;
put 'Uj18NmhPfXF1VGZpRzIzdS5HTz1HZ3ZwKUBkS0xAVkNraUtrRTdrbFVVb0klfnRbNU8jQXcsZzJ0QzFjZ2BQY1N2KXd8Oj44Ik1oc1ZiWWJWaTw+JnZXbVFmRjlJRWlvXnBzdEFOWHoyblNpLFdkek03Ynd+Kz08UFZZQjtQXnBXRXxlRDh6NG17NTRVaiM3TGJEflZDJFk1Xz5VJFtONjprQlt+'@;
put 'YFFFM0ImU2lyJllwS208cWJnNjlnPWZyJkB1QXMqJH5xUjIjbXJ2X1RLZn5HN3o2PXRie1gzeztLZWZtdEA1NVlZPnpDQFksSikrPFNMQjd1Wyg9d11wYEZPI3gpVzoyaThzPHVfOCg4NStLX2lsUEhnWEljdyFAJnhxbW12NTJgPj1TMkJAPUwmVyZdKTRENDx5YyRad21UeEwmKWVedCR8Xnt+'@;
put 'aGJtM1QwYGFbaiptMUxSO0VmdllkKGNscz9CaWpBSWYlQF5nWnRoaDFPLExtVTAlOFswfXFIdmc8SHxEYTgwdCsrIW5eNTNZPyRxN3BtYnguanwjJihkKk5eJlVYYkdsNTR6SHpKZUpqZHNRWEU5W1pFLjtbWjpzRUUoflQwckVjS2Y2QGE5dXJaQGo9KTdtPzFRb3IjRlZ+TDdvcC4hQmFdbmJ7'@;
put 'cjkje000OjUyO1VfX31rLHw8WSV8ck5qR2UiWVM8Y0c0KCkvdFlpQT1CJHYwQEZBUzY4RTQwM0xha1ApUGg/ZFNTSTNYem5AWW5MJD5TZVVlY1dLJGw3bDdaUXoyJTNnYykyTCN0blgpdihHaC5EPlc/S2FUPTZ1Zip6Vl1MZl1MKGF2LE5UbFtZeHVmdyNXWHZRQVpzaCpXYU97LiNzeU9tIWVS'@;
put 'dFN3TFRvX3l9akxwJklFKE0yaUorZ1dRSiVgWl04Vj0sOGlQVy9XQXVeVExEXXROJS8mNm9FNDYiMUZpZ3xFJVBvNEpUM3cvK34hP3Z8MFVBVzkrc2cjfU9CNzJnPSh2L0FAV1RpQk5zN1o9O2d4TWluIzdmKlIvdSMrentfRX1WMmVTWUtAZl1GeiZ+eFJKcm9IUzZDMD4yTUgrND02WCJHYF8h'@;
put 'QihPOHRiO1oqPCZFISkweTZgcEFdakpNVDwkP1BoTyhyJXc0LlkkVkNqdj9+fn5gUzxKJUJUa0g5ejExNmV4ZjZXWzlTOj46Kzl8I0E4emImO1E8eUNDa0dRKGJtVFNKUHo5YUtEV2UmUH5wOUhodFZsO0N3ay55SkwkTypeVEJ0QyQrMU5Ld0hARTYqO1BeTF9eIVhfcyVlZFAoc0pURlFmbms6'@;
put 'TTs4ajFwfCE4MW83amA/ITpAflt4KyUyTnJNOFQ+NDU9JUY7VD9WQGVGPkw6VXBxYHc8fGI+alF+L0hLZnpQayFWaEg0Z1dmQWEyVT4oZiRSZnNyLlNtRCllQFBqTXdWaDx0SF0qbSh0Z1MvYnovfT1rfEJ1ZWomTn0idVNLUkxJR3FaJU5CZWI8VS5sYT08IWx9NF9vdD9McFMjJiNnIytmYTVj'@;
put 'LEgqcU92NSJLPHUmQj5JfihdImlqV1RqTVB0RUgucl59fEQyK2AvLnpfVjdLWllhQF0+SlY4OnlMOEIxX14sU28vKE5LP0dzTjovMCF1Q0UyaFZvZExrOip2L35HLmQqbE80YmE0NjksMzNaP3EzTENCQjA/Vlo1aSorTFJkMEYrezNFW2Vtfj1iNlMoS2loIiYwbCFvLylEW1IsMEsyfTBHUmJ2'@;
put 'R3NNUyJJe2F1dWtUQVleVTBEKmllOSomTi48ZU1SezcpU1suIXI9TV9eXl0qeURLc2NDZSIuW3Ale1M3RWskWFJiOS5CIiokQDpLMFpWMER+c1ZvXSMiVi4jViR7SFtFRURVZXRaYUtlImRXTHUjQ0Ahe09BdHNOY2gwejAjfERhLyoocEppIWRdUHBmaGRJKEU6KVlbS0VXaUNLaEtTMkZTfGxV'@;
put 'K1RIY3o0WE1DUkkqdEBvUEopfV11O3FFTzdITS4lMFhFXWZrNCxjXWQhTEx9Q2t5LF1OPz5fdGpDOmpRcDkxdi9yXVRVN05+I0FQfD9FQnIrKyopbW8/Tl57bG0vOnVnKHFSaT9PSiYxPlApSDdWSjpGeTwqWD1OcXloc0BURUBqMlI3VikzcH10ckZ+VD1vM3FJVyVTeEUjRyRPNFlUODtxUV9t'@;
put 'Ozc5eyt5cTMkZUAzbjAldEUkaiVXXz1aU3xLLGZtNSNofnQlVndIY2AuN0s6YXdRSD98Z25ePCNbJTlVYXY5PHQ1dUs6IURaZWR+NFh6RiN5UT47ZERyZysuK3B8dmNtPVJ1aU1YJmh4aGxwZ3gmYVZ4W18ja0hIRCkzZVlNNUJLcldGeXJOclEoISl3ZlpJZzRJYz5JKWYjfUpOSTFOITI+Ryoz'@;
put 'cn5VdH5haFZhMldoJkFRMiRpdV5oan01LiwmKzAzcUlOSyoyaWwuWWJGYiZNe1UsYF5CbWhweEV4WE85WmU+Q3I3e3NfVkFUdDhwckBOPShuPjlSX1okLEtaMU8rIkJDOmA7S1tZNUteQkt2MEpOVHhNY3YyYDRyP2N2a0xhUEVYPDc8S2RzR1YjKj5YJT9OOj0xNlc0U3IkTUh9fEJzUERSNEF7'@;
put 'XmhTMHpCR01eP1hHc2hONkpzL0llKl5CZDAyd3FTYmdtVmsmYFdNYX03VFhofj55LHk1eldPPXtWQz01ZnJZZ3pRZnxfQkwpOzNoazx2Sm1sXVVbYjovXnxYfS9iWUkkeW06W0VbOlpLLHUzfURNeDpMMGRRbGAxJihKN2lJJCtBN31KTTlbPFVtISo3KCFDbD81LF12XntuTUAoJDRES3FPb2dP'@;
put 'WGApY3BNcDxnYjZkenp1O188eiEpdXwrVE5kJEVuOC41MTNUZ3dlKE9vaSkzanxec293Mks0L1hRQHdwQDVEI0A1KG9PMCVVNkZKRUhFRWB+Nn42L31RdnhZNlVERDxdNG49NU86QERmRkk7N2VaTnNDRD5xVXI2Wi45VDhYfURRcysmS3p5Ok0+KnlpQC5ncGg4SjQvNEBEMVZtPEJ6NTNIWnJ1'@;
put 'fks8alJKJC5nUzhhUn5DMGg4aUo6YSJYUl59QXcwJG1XUTw6QE8zL0xoVkplZV9oQX0qSCU/NyV1SFhYUD8wbyN8WGNEYnU0VFZMdUI0NGVaNDEjZTQySTNJUEUpUCtGOHhqTzdAO1J1M09vMll2JTJ1ZmVhb2QsI3t1Z1hMbTQ7VmBOUXhOLEdASmApWmRuWzVCUDdYR2ZFOyROZF8oOjluVz5r'@;
put 'SEhmSCRxYk97fnkvcltQPiRYSD5OVk11e2xodF1yb1BXImVmY3NtfCVRNUk0T3pqOWg4aTNUUnBiaDE2TyRPLEUvMD9gOERNXnkyeHYobzMqUns1SkY+N2UoOWgqU3giO3h+THBgWS8vUFIiTFooJVZRMVtbSy8jPXRJXkVpMzBqPztNXlFgRUhvM0lYcjxabWVzR05XU30vJHUiY0xgRis3PWUm'@;
put 'Qzp9Ym9gayR0SUR6NTV2eWlZX1k4Y0J7a349SSh2PCZRUzNSZS9kNHBwKDVMVV9POkM4NHlPW3wmfT1FJmc5VDJNTDdjTXU9djMvJEFDR0pTdi5AUEI1XXYyai46JFpxQThTSFlQRVgmOlswYXJoMmg+MUhsUHVuSDhAYFpQdmUxRyxQez5YSVZDcjtUIzpCbGp+ZlJZLyNTNzJCdFR5W208O2w1'@;
put 'P0s8Ryk+T0FTbHwjezJjcSMlMX1ndUZ+Sn5RfDglUWNUSnNeM3UrLDU7eGhASFNud0YhX1FTUUk6WkBNWT95VD5COjRmPz4zbkArSHRyVXNOZSkjSzl6MDJnLzojQDBnX2Z0XXBdTHg/Y3hbWUdve2lYPkdfIjJ1K0BsSG1YNi80bSlpVnd8PmklVFsib1kjJCFTcEhuU0Y5byQ5TCgsfCQyUX1D'@;
put 'YCNHWVlBWWZYTklgV2l5KCV0QDlzZ2UhT1o5Myomc3Y6ZE5PeXRPWS46RnpEKThgMzR3KmFJc2pTZ2ZMJEJpUXFnVFN1clZfdG9dNj1dbkxWclpnVn5ZbilbI05tIytQazdKbSEjQGp+KGpydz8/e0NIYEV2NmtHQmpMcyNATVsibXF5UkM+fVElfHVPOjUrQVthLyNYYjJyXy4hTWVsJVtpI0Jl'@;
put 'RlB5cVJgSH4vKkBuPiF3JmJ1L1spYV5KLDNva0tJR0NrNyFiQ1ojQCoyZCtzXWN6Oyw4aWVWWF07RTgqK1p7UylfdXgyW3Y1QyozXzk9aW4wfUgyfWh5N2JmQCRlSmx3XTg8Pz4yQEBBZExuaXl8XlckQ0p1XzFNYFJ8bzdQSj0oQFt4NXpwWDJVX2tFLHg4WUhgc3w5R2kmaVt4SXh5UGJKUm9I'@;
put 'dlZqUUlOK2hCMXU1Q3VkXlJVZkJdOygqR0NDOSx5QEdZfD1nP3M5KVl9THFdXzd7PV0sbi9EMlBoVCFIOV5xMnd5PTZQJGJ+Wix5QE4pUHFxMk1JLGY/LmxTWn5HXWwmbXZed25WKlQ0JSZ6b00vPzNJWWIwdVo1UzlqNSFXX29wWnR3OXtsJHZtKT0+cVpHM1N3PUZxeXtAYiFXJHhQfCJjO2hj'@;
put 'PFI3Z2dKVlk4amQhSHBoNV57N3NZSXd0dWN9dkY3Z2tYbEl4MGxRI2ZkSDVHLn1yeHBPbVlvc1VAOVBLOmJySE4kZ2gpcmshKjoyO2FLW3pnd2tMVShXS30qQWttPk1TPjg2IStoYnZAIzUpSjN8N01Ien4sNlNDWmg9JDpaN3pGViVEa2E9ZGRGJWJ8RzRLdy5kVUxveUxebVh5TH5HcHNURF9z'@;
put 'KS9HdXtUNV1PU2JVc2NXNSQzVShzdipiUW9VNDBqJDZFeigkUm0uWE1bYF4pQ1YpaHJ4Q05hTlQodEVlcHVNNyJee0Vhcnh7RWYmYiM5OEspZjU/YHUxTWNBL0NINz4jNVV3VEcjL3t5WUZYT1BZd1B2diFlW312KnNjal9pfX16Xz4rWlZEOiM1UkBoNyVDNyMlKTBwOyk8PkgzYiZQRTklRSVU'@;
put 'TD1iWUN2alphNjFpX3BpMnR7Ulo2bDV3TUpRSU52JHtHQ3ZbQF58L1glcihTb0M7cklIWE4mW3pPLl89eTlRSFIoJl5QNkE/UDE8Ni5SMktuUXx1LkYjJDBtY0BzaUZLbjs3Xy46dXMvd1FqN29xZCRjWSJMSWouIUkrI2ZDVX4wPWlQUm1wYSZya2xPQUNUTnJ8IU5xez9tS2olbkdueUx2b2Qp'@;
put 'UTFpKk9IMGt5cyZwZlUkZXMjOjVHKX5xalBsOEU1Q3h7eG9uRmM5UHhSUXEiTUg1RjJ9cl8jY2w4UmsyKi5iWSsjU31TMy4pezVwbC49PHdZfD42dEVhW09aXTIwXixzMmYzMnxmL3d3djRvaT46dn1GIylqKTYjZV0oOl9IN1hRSH4sOjZXV3FWRGFPX3EjfWZ0KmsuQz1SOVVLfj5FWTpxOkxJ'@;
put 'dUFPemJddTYsX3NGW3J7WGVhYSl1anw1JSwleHxla11qSz1FNTl2e09QViFLfHQ+KVtNSyteTnVFVWY/SUkyJE4rQTxCb09HU3AxZyFuN0xFWF1xRWNjaFhLRlt4WzdCaUgsLixjWCNUT2plJk5rW1NsTTwrLzlQbjNKe2lJOjxYcHdjVGhpTU0iRDJKLFFsNW0vQj09dClldj0/QC9dNVpuJDwh'@;
put 'Ml89XUgpO2ZgNWM9OGd0aDQpcEcwWyw3Y0t1KXQpL01ARjpJJDF9eHIqd0AvRiJVNFdmLy87IjRWZVBDJSFPZUgyRH14NmplRGRwTn4qZkp6cE81eGVTYWxrUSk6bE5SR1lQRixCbXFpVyohLk46en5JbCpabl1bZXFQKExVLGU0Vkc6N3c8REdUNER3MEZUR1M0aV41cFUrUG5PNGlVIWNoKT8w'@;
put 'bFpec1pYcV07WSxXL3RKdF09UWtCVz4saGRtSVFaLiIyYEdAZVNNe1ZCKltmLzBYSGpgKH4va1A9O2BvOG9BYW1pRXswak53cW9RTE4lci96NHhyWXE3L059OG82W0tzcSVzYClTMXN5SzhgI35KUmFqKVtZWkZaOUJDKHJWZHJDI2AmZyo1SygpUGg7UldPVVZhJHhDVUtQJHc9RiFkJUkuYSEm'@;
put 'YEkiOmE+IXA6Xkw/bFo+bVc2KVY7c1I3diYseUNkfV80S2FZTGBFRX5SfTVXe0NgXUNuQnF1Rkc0TW08OFF1eyt4U2d0SkZDQmc6QmBNRG9KP0F2fmw6IVs+LHhlbnxmbWZtWWVwdEdGL3VCYkteJk8yIiJqWz5aXnQ3Iit9JkJ3MXtGWzw/I1ElO19hQzUxY1tqW0siangvYWFvSDBZYlN3fGFp'@;
put 'Q3V5VHVKM0N1eyg/fD9ZMi4/Zl9ufThDW19QcD9jbF9QQk42cUJ3dTIwJF04eyQoMG1Rcz54TWQxJk1kI0hRW1IvKkkhUSgzZkZJaHpJWkU8aCFFPSFSIkdXS2R9P0BibilPeVczUlhUdzY0LyhgUiZqVjA5JFMmZzswNkZdM1MpOEheZEAocXAkdyhWM3dPYXteNWYvMj1pMGl9Zks3ZT1gKDYp'@;
put 'dm1KWFBvOlY8bWJ5JUwmUSVJI1VbVnpPNjM8MDJrdEU1OG5IPWw/eixfMylQS2hxREBHanRIWnp4WF5ueXUlJEpmfFspO1g+OiMvanMmZC55dzFGRmxdRjRzNUNrUCtfIipnRSRJZmE8QGcyOFZsTDdWZ0pfXjo0bVBQSGlreFRdUHUmUSNNZll5Ky4pcDR2X343SjAvalZGK3pYMk5tUmsyOHd2'@;
put 'KERQI1s7KlJoKCNWUlIkR1tqX1s8PGw+QlpbLjIxVVo9bEomUnJyUWdaPntIPV9OYHYqSFJ0NVA3PjJCLjpfcXVuZH5nTFE9VGRnXkIxLFUxeGBxY2lZJGZJdXVVPG0mW3JAZSg5LEpSeXdVeT53QF5XYjkzPzh8SWZMV3hGQXh7ZjV9IntWZ2NrbnJ2Kyo3a3IrOWFHZnx+en4meyMoaThEOGox'@;
put 'bFFjYVh1QnRmUkZSaGpaWFMsc2RZOFtJKV44Tlp7V183TlAzbHleSjFOY05zelNbTzY7JHhRIWxCRXNScmBWb2VIUUNtJE1bXlA0RWU8ZVc3d08uOVtzMnJxfUgpQFlDYUM+KUFyaUx4bCNvSCJUQmZSZ1lIOH1OVTVyfWJZKlBscDNVcWtjTHkxSX1DPGlSIzhwSE5tSE5PS2ZSWHMmZmohK2kw'@;
put 'Im43JH48eSFucGFneEZ0TE5YOD1yQWRdaXMrcVl3bE1CYjE5SjY9Zm1gJjMsIUQwe0UzX2ckYU9dfEVqckNQVFBVbDtBNipjZH5kcWY0QEB7OVRiN2VbIzdYVEcpY0A8NmxIa002Lmk1WVBMV2JhO10oVWJ0XjZwZV4qJFB9dnUjOT4sRmw0XylMSmdtWTxFQG54PV5rd3krdlpIOjZGWHp7fl1T'@;
put 'dG9iM0c2Oj9eKHVjaExDfClvJjw9OFpJV2x2LlZSZ2U9YWEkV2ozWTRNW3h2Tlkib1VZc3MkcVRxN01hR0dEaCxuZDpCRT1Be3Q9PThudns5RCpiZmZAWG1SPSQjXUBpR18rSm5SKndwKUJMe1lHSl9ZSVgoS09aSzVqdkhoPERBSm4yVyY9WltIKS5sLjZHWTVtYW0pOns0MXRRLyZEbmVoe0tm'@;
put 'TnZKSzhHYjBvYkJgSFY3YD9UOGh+IiIiZXJ4JjNubCQsL0ptc21gaz58PmkpIVNde0Q2aVI+X3pvMF0oV0RNeClYP2ckRkgkb2RVe31gXjZXWypkREo9WS5XOlNgW0cydShDKVJIWGNFUTUxRTV7ZmVZLz4wJn5GSntfIXdxZSJbP2hPIUgmT2ZWXSxDKzo7JUEhTTZEaihpQUdZJn1SKHkzJTw4'@;
put 'RmhCK3V1R3BhOXNqLHZvTzF8YXQ6WUo6NlZxWiozZUY2X3lIL3MqLzVye3ZGZzx0WEc2XXs1bFRDPk9SWFpUcTEsbWlCezEuZSxpS2F7KS9qMnZbXmFocWddPmpTOW8lWzA0Uj0hUyE4RG15PTZIdDhYZDZea340Z1B0fDBPKChGeDgiTD9paUR6VkM6MSg2eURvLnprM0Upc3wicVhmQkhpUTo4'@;
put 'JnVOeUh0LzU1MUJfPil1YDBLNnxMSF02Zy4jMiNHN1dSTjwyUUNoYyt2Klp7WktILzEkNF5jTStjbyN4JGZWJUlSamo6OSQyL3NDRFo0WkxgdHZAb01gLFldMCRvKU5weyt0O18ufnc8PmVQX3tpJD5tTzpEanB1VXIjcy5sbUlIT3I/RiJII1VOcXgrMy9OIitZPWUvKGJvQFQ8Q0RbamNfInZd'@;
put 'QUdMRTV4QFNza15GfkNab2tVLHV9cXRLUHdeUEsmdGMqMHQpciZRL1p2alJERkczb3tOOX0kSTFbbCxKNmhbPTwzM3duSkJIMCRxWyR5RSVZN1dAYTQwS11VKkQyRTU3PmdZYz1AQXNSa0VMTDlyZXFyP21+PCFXOlJYZTolNVVAWj0uIV5AITYoISsscSxMNCxmXXdLUmtYSlZQI1cpdSFSfX0x'@;
put 'Y2R5ITBjJl9FNDphWF8wVVpAaFo0PUNvczlgXnVQSndlO0AvZmxBWCVlJnJ4emFvYWdNWStXYEl0ayhAQ0l4dCxlb0hoZkx8R2kmX1g+KnZWPFVCRlpdWkNsemA6eUduRCZmRGYhRjZuazY1ZHJtXUhRaUQrOVtndS5IJSx9ZkZMUzM6YDwsbCZvY3FVO0smLFpMUGJvOkYxW21QX2BAOER+TXd5'@;
put 'WGVjfSRROjJFIThTOjoyTCZ0QD9bLENhYEs6Xzhwcnl3ZltLUGJzZ0R2VjV3bW1vXTcyNy9meUJbfkU6RndrU2ZEUEdDL1Btc3NObENnTmRmYyRdYDNpTGtzK2s/YztxT2ZCNShjejAuJD1+Ol1XU2A+MUouOiJoK0hqeH1yYkU3UUliJjI4clEoTCE3R0VdWnQpbSllWnYqVzVbRCsmbClzNj1v'@;
put 'L3VsWjUiJFZoLCtabURQaSpBQGpYL1F3I2tlQ1smZiJZbzc1c1BCUlBsZCpHU2NJMj1+XlFgSDZqRjRVTndrfGpfM2ViT0M5bEYoYD5mdE0xeCI1R2tjOiZZT3R7JH4pfig/K004bU5vczRmLDpfRUFkTEZ7anxSIzZuXkg0LiMjOiEpWGgwZEp5REwsPE1POiQ5WSo/TVNxfnBqYEhbY3o7eSZo'@;
put 'Vm9bIl5EMzRaZj1YbG8waSNMcV59UV5yTlg0OyQ9cVRZWV0sSFJqTl5EbTV+aElHbT9dbXokfi82a1JSQ3JKWk5HPXAqMFooX0B6VVI9TTdraXE6WkdNczNZPzoweGk/YVpwdD1PTjk0JG1HVmkiP0p6Km0rXzVQNGR7JiZFfDVgXmFaL0UyUHxwbU9wS1Z0ekUrYEokdXhqVEI8VDY4eWB7JCpT'@;
put 'Kkl3RiV7amR0VVBdKyt2UzE5b3JDeX06WTN2dTBlKmJsUXt4NFVlSEJJUnE/YWE7b2gjUk9zLHRpR0NOPFkyJkN4OTQhaCxhTlBWSWI1RzEvbyk2PlZQeiVOYz9MOEJFYl50Okc7KCZELHpOZmk5LlQzanhsTD5mWU88LGZsJWZTMH41WVF6PWBLUWc3TjlKYHpfTG4hcD9DSk1iSXZtLlVIeXh3'@;
put 'e351Wjt0O0BnajA8InxNX3syei9CVlRhbFsxRGZpe21NfSxPLn5LL3IiUkRQPjFxRHZ8QmNRSm1hNz0waH5KRFBmblYzVXNnRi5RTX1SKTxMLjpKUlt0JUFAfiZ5JCt7JHI9TUcuIS5FUElUT1ZTS15ffHkwVSU2a0hSSls6YThKY3I+T1VoYmckVEhxeHFAaC4vKjs6RyVFO1taeT9bOSw7V1dQ'@;
put 'aEtHcXp1PmdKcGtddHhaTlRyV1t+S1lOW3w/Yj1INWBZOl9xQVNDMUdNMEtUNVN4UiY6ZDliOTlnX3VlJV47RC5ILi5BYzp0VyFFYVUqOFRvYyk7NWdRR1JoTjkjaTQuTFssX15tLjNfQ2taLipXMl9hdTRYcjdjTyZmNUp6XjE6Sl0qP2B8bWwrLC5YMXppJFI7MVckRjddNkpge3ttZDduenJQ'@;
put 'czRlSzVke2VDTHl8SCN9SmteQmtbT3NnM1JebmEyIipjajFKaENxPT48bVRfT2BUdntESV1PdnRodE1dbDx9Vz9QSyUsQj1bV3hoKkBlW3dMRGhMVVdecE1qJnpePm9lMXkpNVpNO158bTlYQ2FAeDhuN1NoKkZuJmlmZnhmTmo+JjBGNy9waEcwa144ekg7XUAzS25zNz9CRFZbWVZfZDlldyJI'@;
put 'RV0vc34kVE4pZShWOnE4bE14I3EmPFB+Ll9pMUY/aSo0JUhIbS5UfTJMI2pNRHpQYEtRP0lnZ1FLMFgzZXJ0R25UdktLcjJMaj5UU2t+QnIwTiR9VEhqQlEhXlIvOS4pRGFQbCNJem9bVW8zPkEyNUZ4azUmK0YjSXsoaGc/ST5MVmM1KCo3PkglS1ElX35aeypVU0lCMGRzQFZFMltlLFhPM1Vn'@;
put 'UVBCVDhNQXhwOzteKilELyRvW1FsbUhwen56YTVHLCtWTyFdRW0zK1UjTkZuXzxNYVhFb31vQH5mfGNWJnd7O3pCKUkrWTNiRixINk9qMGJeNUBnYlo2K0hBUShTJDBJIU85Tl0rRkVEYjw+cEdbX0h0N3p3QnJ+NmNyV3luL2NIakFFI0UzRlZqe11mUys5K21wdD1gezdkKUYxI1l5W01QN3JF'@;
put 'VDleay5HJU93aXprYD9jdzBoV0pQQ3J1TTl6Yk58WmVQKDwpY10kMmZZbUtoPTZKSFhtYUUyRm1ORzU5emR6YnFJbiZGfXAub0I/Ln5yVWkpWmQ/MTZ0Z2dOSW5yKmM/clk0NntVJVJnYyYlcCMsNlBAfkJHJFNnX3JCIVFOJndVb21wPTU0TTNtQUZRPXtKNUNGe3BVMi8qRXx8d2xmcWhdPUdI'@;
put 'ZFtxWVZ+dFBfWXdNLGI2MF1EOU9JKnV6Oyp8VSQ0bVMpRCslWGouZyxZfTRvO3Q1PHFOMy9jS3lUYndTMFY0SUVNN1IodSt4cjFyXypWPXBQTz5WWXRNLz01KSxeOTJgM2ppOj55by4kSWNtb0E0IzcyKDlpPiE9Xih2PHFFLzdiVXtdVFhfeF1XOFYvYnxqJl44elUsfF4xaSE9PlhqSEYjJG98'@;
put 'P2FtSTtoIyhnQGVJb1d7K3JqQFN4WCxAWTxBWzxDdCZuckt+ZyN1TCRle1c7QCVrJjwlfWpyaXcudSkqaEMqeHc/TH08RHFrTT1eQkAxPVFFdCN0NFVaZnR6PntBbHw4NVcqSE8lIWNgLFtzaz1WQVRvWz5qKV8pLz9rYT8/MGMrVFMsW2JvbW0jLmtfPT00JH1mKnpLKnRmRHEvJVZTdjFeS31D'@;
put 'NSoqTX1RWndELFhhNClQWlc4U0NoQF58fV9DVVZCUWtiJXZxanpKcDhxdFVfaFBbZmwvR1BjSUxuZHVaeHBzVlVOMWN0NjwwZnYwVXFBUWFORWZ2dVEoMyR0aXdIaHBNSjtjPyJ3UkdiRHo/bkQ/e3BFVHd2QzsqYCROc3J8TGR5RzpsMFZ2W0kuc3AhalNEMWhKdzVwWHBneChsc3NicEk0bFRM'@;
put 'dFpASXJ2SjEuVEpHUSZDZm13bEZxKHRJSlpRV20uSyIpOT05UFc/ZEZbKmpRaT93NUklJD9IZHN0KyNzfUspVUY7aX09Y00rQmNOblQlNz9RdWxgNX5tIWAxUCReTEBONzchTiJhRWw+Z0ZEXz5QMmpMfSQ9cENiZjoyJGlSZ11GRyhFXWlhPl0wdGw0dk15T2ErYGhqY1RCa2FDPXxJfHRjYVhp'@;
put 'WXlbUzBzIzI/OkUjW2hmJjwsQmY+cG5kJV4+a1gheTxAOyo4KWdiX2RRSk4vQX1sW3xXbSJUPnBoJkJfPHNhLFJLTnU/YDduVis7Nys6NFg9MVgpTk0iZX5OQ003MmJ3X2wlLjdiQyJxVipsdyhjdF9HeVFsZkg1MEhVPH1XZjN3RitQWFciIms3QylCKV81NyYhLmorfkhTIUgwV1M5ZEJKJTco'@;
put 'MWh8fVt2Sj9reUwoeUhFJlJpPj4+PmVlbDglK0QoX2RUWFZNYmZERHFZOHZOKlM7UHAuc3RINXsyQDJwVlBbYj4sJShPfmpXSXZFQi80M2kjaSQiOGAwZ0dPXlhEeVhwKnJtakBtV3hqZj5nSWtzYEFrVEN9KnY2V1ViTGlGYnJ7KllTdk8mdDxgZj5rdl4hTiM3eDgmYXdBKmxeZHFDTFZXT3Bl'@;
put 'N2FDOTB1ZiouaHAzLFt5eHVxcXcvRCpRamEqUm55a2RwIVhjcVRGZlVpZ3p3TWh8U1R7PGYyOz5IWFRIIkEqQGpZR0M4ODp0ODZRVyU3Wmc5WVlbRHlKN2IhWjFgPmdabUExYk1EYTQqJHtbTXdxbEA1Om96VDldMCgkYDFqV21NSypCOHwwQE9PUHZffX5xR3IuUS5MIyRWTUhPTGR2PHBCMVJ2'@;
put 'NyFAWHoiMH1sNXRrSztxUnZ6bVNkVFE1JSVRaz4zK1d6MFJ4dF1qPzYqe1VIcz0sKlhQR21JU05SSSswdjl5LDs/dVBee2NbenRkWUJ3Qj8wbGU9UU41fG53UWl5SS9NO1EjaFo9a2s2O3tQdFhCS2tQKHRLKUhJfDUjRTtvR04jMWNDfFRmdjtDd3Npd2xeJmw5Omc1ZyZXPSpzRDZHWztWTzs8'@;
put 'YTEiRWF8ZFhiLGdyNjdGISpzO1A+d0tVbERzYVQ8UGxnX0xaZmVWXWElUE9tdmNbWHQrS35JdiJEPVBOa2w1dltaa1koSCgle1A+azM+O0hkOCwmSWJRZF9hWk5QK2VnPU8kKEcrJCtDRCVLb1hmWilvUlErLHkqWkcsRjMvSjV6KEdrQX5gaEc+XlVONWhCLlYmXXZEQXRFamFuWGJ5Q0E9OEtU'@;
put 'WWtgZH5gNVVrN0tobTFRdzVvX1VvOmkiOFZqS2hCKl58VmE5XWM+IUJPaUlmM3h8WVoiRmkkT3l2OHZUTyRqMXx3fDohVihWW3IlX2E/NHgrOGJ+aT1xbStWJWReJCRbMCVQU3ZONmsjL000Uyg4TnZvKlY0fShhaWVONXhtRFBSRV8jKyFTUlF2VUNjO3oxQjV5S2owcS9yMGFhSV1LeWdJdDBb'@;
put 'MXArVmpXK1hMXnYsMlRDTjgxfnA6Q09wOislKl9JdTphSjk0YSZ7amFRK3woRnojR2g4WEhvbSV4RHxTZnJzQy56a1E7dFQyVkB+XjVdJVFxNDhRcF0iditmM3VMaFp9NktqRTNTeFgxZHlgRGlpL1lOaWwkcGE+dHJZJj5ZNDN0Kk0qalpvNTxacklrezIpUUd9bHB8cEJwdk1RNyR+KHtgI1lS'@;
put 'YlNiRTpAflF2cGBWVkpXe1tSRXQ1SWtPYiwsO2JrPkclYkM2cGF+YDkobkFtU1lTYEZ2bTI+TzB6Z1ouPEpbcmJoTHhCbzpZNEEsPF1JYzM7PjBWOU5YVDcqVlBrfl1jKT8hdFlZZ2JvLDdSXWxvbThEcllwRjBuUk8vOVNJX1JkcytVM3ZdYzR2KSh6bik1a2ldXz5xNVJaJn53PzY+VUp9aGsq'@;
put 'RjA4e3lkJU5IZDd0MF9ta1pQXyg8W28me3dWcmZ5KmcpN0BWfDxbcHUvKS5gJixxYUk8VHgwXSkrVGNVPi4wTXgrW31VWFFscXkvRGQseT1CYV16Rjlqe0tiMllCXUl2XTN6TFg7TnpURmNrfF9lUXM5ZEpEMy9qV1FfJXVPOiZaV21JeHAvMFJfV2FRbyFCW2RUai5FVmY2fV4/ITBbTzwqQjdR'@;
put 'Ojd2aTh7Smd2fDAhdkFhRyFzTT98bnBOSHI1KyhiS0x0fGNbU2JLP3BBWCUkVDxyOEFILnM3P04hQChsJElWRVZhKyNaVEV9JiQmUCtibVQ9Izw8IzRLYiROL1Y+Mj1lJF5mJFBkemcuZGZPbig3a0cmYiU+fG1nT3hfNFFbdVEybF5KTiIpblNiZHg/ZyZ+OWFGS296Sk9mXVcsPyVKKSE6cS84'@;
put 'ZD9rSnZ7S1kzbHVjISJrM3tKQ3xXKXJ3eUtwLFp2aHptPUA9RH1GRnJAbWVEbkJWQyI4aHhEMF58U30+fXVHRWljcW9hOj5vSVIqRipvPEdORHBTZnxIdjF3Q2MuPF01QitDakRbMT08LGwyX0F+TUBKa2EvZHN5RztoUDEzZFs/JVMjY2BieG1SM3Z3bmVtTXNbYzV7V0dSIW5mUSRsOz5HZVk7'@;
put 'cyF7K09mNTpwLEEjOCZMI3UxLylzJnI8NFVTd3VUekVUfF8oYENSWiR+U1VYci89UkRRYWFGNEFVO0dofC4wL0JbXXU4K2YmZi44Sko2fVNeZGpTKkhTNj44aUZXaVZpWUpFQWVZIlJ+Qyo5bSpAOmJlSXpKY0RLRV5rV2tBYXJZYnlFc3BRQ3lIN3AyP3R4ajYvPyYiWkZdeGFxb0FpLFo1YWMy'@;
put 'VEhZcU4xW0hjbCpwLCZ7RGkkSCNIMDFjJFJdOyhlZixyLGpzYj81amxqTSZAXz1fKFhMKFh1aHBLdUREWnFHaHFJbW5qPj57OzwxTnxgNHFyP1A+SEV0MyYkIXhVY2NbOi9HOSgkIVUpb3xZVE0pfGUlTEF7WWxXODYqblR6MmV2TChPTVAqPlN8S09tR1duaGcrMWF7R3FlT1ImZFpTKShga3t6'@;
put 'IV0jYSMpQltnMTM6YHZMQzw9LzFlW1BoZnVxamJ1JC4hKGZAaE5DKFFGTVZ8SWo/Nl4jQyVOfUU6MC93M2BvfC8+XmFmdGN+dUF8YiZjR1MkL1pne3E7bHVYKUJZaHsqVCphW2xxPm9lIUIwI2V5MUJjbjkwUjxlJnJHZjZmRDUkU2pheGdtJl19TUlXaHFoPURjLH1YezwqPi84SzA6aTguZVB0'@;
put 'dDt4X0M0QiMieSFUY3F5aX1rQDIqcXA2L2hVZmk9SWM7Ny9hbUJZSlhLNiYsPWVYXnI0RS9rXWR5TkEjPGV6UnRQWCVVcmlDJSs5bUAiX3d4WkFSTXdJVjZHTVcmeUEiXShKRlFTQip5bn0wUixKWH5tZjAlXXh7MHkicz9NYnI6Xk5RSDZ7YXZPZD0+cEw8bHV1RCsqNEtFN3NxaXU3QyIxVyt1'@;
put 'SCZAQnR1SDpATCV1ZztKPCUwbX52dDMiamB5dD02JXptbys6OWdYLytJLktIVHxuYWpafnk7UUxrPyErdSpOMmB4MHFCNzlCV1RAYlh5RCw3eStnJChqcThVTzR3KTxyWEkuL1ovbXRvJEx6PS9RNTJ0RmR7U1hrS0BLdXFufV1GSiU3b1ooOkVRO1B7I0RYQyNvYSwpIjZ3XXAuXXtVMUVNLERq'@;
put 'LGwiW2l6NE9+WyF1XnJ3MnFtWGppdiErOWcpZnZWRHRNWkMvfGx1fkhnI3Z1PGQqMGF6RXJRVmVzWEM2R2RDZTM0W14uRWYyPzh9diouWnZdJXU6eG1LS3w2JSRaY1NvNTI+LntndSRsQFNnSmYsS3htYC9TJU4kQ3AodiM1JlM9Y3QxJFhLJTVVZSopdiFNQ2Zbdz9kRF8pXSJGSm9gPUdBeGUr'@;
put 'YyQySDk9ejxWRjJBQGpYcD5Sa1NBYzJbTC5ESlVgUDJudmowMi9BdTZWNzUlM1Zlb2B5UGZ6W2p7a35XPiJMRDs1NE91b0VBKXRQfnRLaDZDXShdcTBpZFBrRGY4NTRLU15AQ31NKyl2Nmk3XlNOJGBwZFMrcWNUSCEqKT1bdGI3ZXk4MkBIKV0iVl5ER25FJUB1YHJSOGJwYT1xYCRlUzw0OVlQ'@;
put 'ej1hJG54KGtqfk02N154ZCQ+W3Qua19jKnxbdHkrckZ3dmRHRjBKUnhkWEJwJV0hbytBTUtFVDIwYEZ3SU0sJWpYKjY0aml0RFpiZXIpc1F6JGwrM3VnU35PJU1iMEh7N1VyTFpUP0Zja1lIfjdiYyRMYlcqIkpRfUZGOFcvLHd9YnZRNUgyUXhrRGZoYzhnKnZPZUQ2fWY4N1dROTF3TzYhZHI+'@;
put 'IzpkTH03NH43czRXaS5YVjUkWXh0YWFhS0tHXnBUL25kS3xoaDZeZThNTFJobzluOzxfUVhLKFplbih+V0QmQWgwSktZbHFUXywmc1tLWWE3Mi88flR6T0FCcyljSS5PS1MvWy53Pi95eFFlfXAuZSVUL0ZKWCxvQmsyTVF2akZsLixxVmV0MSM3cCQ0a2R1a3hvcWFQSzBTeHBrcHdQOk1pezd1'@;
put 'JGVKbzc7SF9TQjMhPlVRRjcmaCF2ekVVUC9Lc0heO3diZW5MSU1rN3VMIkFjOT9QOU9mRzI8IkZJMmRNazFAWHg+W0whb2NER3c6czdCe0JYfip+Ty9bWSZXeGloRXZETlBJIWFNWGIqZlh7YW0wdyl5NzkseHB0akRKfkRdITNGWUZZSzdPKiZWS2lpbzAhY209RDxgbWs6OVssWl81JixzOWgq'@;
put 'NWVUSlMibj51T15BcTA1UTA1c0FLVj8sJmZGLlZmUkpXQi5bTGVuUyVBcS4pcmt0OHAjIyhnSFIvUVpVeEZSVT5ZQW5KMjIufFMiJDk3cG8mVGx7VnooXz1lVTZNNUByXm19UXNCMG07W3JnOXByODw5Xj5vcixnV3tQcEJmKF5mMF05aDhXXWZaKjkyK0c0P0lydWkyWzNRO2lKYio3QnxDejll'@;
put 'cFVTK0lTbk5xQElyOigwK3VdTUM5SjUsbW4/UF4xUl85KFN9TGxxSHB7QUdXZFgrfHQhajpzZzc6MyFuNmtZMF41aT5XI25mV2gvPmEyOXh8UHojUFErfFVxc0dRJm59MytjK0xKRFcjMltZW0Z1PEFoY2ovKTcvInI6d11xVz5+ZjBddUM5SzdvPz1pW0ooUUo3bUp3QjhTWSxxfVNaeH1IK3VB'@;
put 'SzorSiRaPiFvUjJyVVZqJG5RZ1tUSytPb3lpXWk+Oi49WCtialdTe0l9RlcmV1E0ZFQ9c1VNJFBlaHxXJkVRZ1M6N2JLIUVOKjZheGVtdnZqU0pjeDU2VjdMaGs6JFg5N0E1OXp6MFRRRktPM0VwKEtNKk1nejZJQ257cykpY1VOKXgkKj9pQHVTb3J8JmFKOHZ2ZGM8LEFfQ19hTWxVOmd6UTx8'@;
put 'ImE5ZzIlKHJoI1VPWGozI1BOZV18bn4kdkg3PF1fcTJgOTA4P29HWjdtYVM9emw0Zz8oclVnZCs7YiQrbEpxUzx3RSlpeDAveCEuLEMpanFgX3tLYVQ2PGt2eFZRVlN2U29Ke2xCaC92ZVJCcEV1KUZhLCtUL2BJLmlhYlI3ZXZxTWs2SGs9eShyQCZZW31SL0wzUlguOUxxcShydUBoQj9WPT9B'@;
put 'V3whfWpqd20rIzdbbWBSb118LDQxMkoxeG5AXStLMW1bPkdwSS9kRHdWeHhTYi5BTV4/e247ZGZbfF9XbWttVlJvXT5TfTouRTkqN3dIV0lxJHRfLH4zQkA1bGxvIXtgS080TENjZVl1TDw7OGMhUmUsezhVXU8kKGM3WV1yRkwrVCtyPkFSdH5+WkFPP19pSSlAaWZvcGF4MUc2V2pKX1dvQHxA'@;
put 'VWptaWtXK1dhIm1yL0lNSiJVNnxCVEZ0dzZVIzc4YWo1JHY0Pl5tMnFednQ6NCN6MnIwXl5KKHtneV9GIz1IMEJfIjllc2UzIVdpYmBSREV8X11ZMFAhXjQ+Ql9yfnBFPWpeSHRfezBEZD9tMWJ8L01iWE53OHZIXWpZKDBQIVEoQHE7IzBnLkRmKU94QD9dYk5UVSJOSDY4b2EuXklfY3JpNXZY'@;
put 'PEdeSDgwJmRIV1NhekM5eCliUC4yTEN0IUVnailTRzZmTXlUMCJzdlFobUFNPl43K2k6SjdCdz8pc1cyVmRNX0NvJXhDTT8wYHB2bkhoaEouNFtbZ0Q/TnIwSkxEPHB2WnBHV0h8WXF1ekE2WFt2THUxImZ4KiY9O35mOk4mOClyfC5HYDIqalcuYGl4JVEqXmBddUxZdU08aXlYTVghQj57KkEz'@;
put 'e2JbYD4lRms7Zlt0MlMjK04/Tix1PWE1aGJHJmwpd0xmb0ImVCVEJTtsbTBhTVtyfjxOLEU7TGpHNkZHcXwkSU09ZHJOUjROQTooXntKITFGX341JmBKL2JvPyJScigvXTNDfD17K1Y0TnY6WXBAImUyP1RuVEU6XXx8VWchN3R3SzNqSnZ5akUsJWp2ZSpTLEcwSS8sbVJeaEFmK2RbQCt2W1V2'@;
put 'VVoyPCUoSWc1K141RnZmc2Nua3Z9bnRHe2JVKm96ZXR+c1RMdC5DM3lePGw7W1oqcz1xPXE9cSxjXj1kVDR4MV9KS1BreDssa0gqZyhqN2NbPVJGM0c1LHNgMWloaXdSel8sTVNbXyYzfnd0T05yOGl7TmJlVmBwKWE3MTNySFgqYlZ1IWh+e3gvXyNFNVBSUTMzIkdVYzsvaTlBJj5nfV1CfTty'@;
put 'P10vIn58PkhaZGE1OFNWPlF4alJJQ05Afj9KLDtoXkczY35WL2NARi8pIXtTPDhzUi9oeSxQTDd8R3F0V0YlZTBkPDNiXjdVTWMqc0U6QD9vS34lNHAhMztsNTtROF85KTVedFBCW3hlNHl5OTxOb2JHYi58IThqaiRwM1RyU2VmNEZGcl8jenlIRlUyQyNbWFM9YCVLd1hJO0BMVigkX1hhW3k8'@;
put 'Z3RVcWhoTylvPyhJU0pSe1RtUSg0dH5POiZAfmJINWA6fU8zRCFFT21ARmk4KyxRSDY1fiFHNlkwTW84eixsRl0wamN6OS40Q1s6e3d7L1clRlJAYGVPJWVWI25TaUk7XypINjQ2OlRUez1yRjleJjxwOTZkOzliRENnSjYiU0BdeSlfPU9YIyM2TDQ8R2okZm5lNDBBIyVqVDVRTyFpRipmNVFQ'@;
put 'QCFZITx7JnVXdEdvbyg/QGFJaHhxZm5HeW9gSUZENExARSImTn5OMVVSPyxJZj0jPXJCJmMyX2h7bSVDKyxEbihDX1U1OU16b3FLRU12RyFiW11WOXVSTng6Mk00TGYjWyMoKEAmMDZUWmtBVlheQ2ZNaHh1R0NqIjg1NDQxNnYjKlQjblVbYmxqISV6alNgTGFQXyJadk9WcyVRYmNoOSY7P10/'@;
put 'QlYsUjJ+eEZ6ZWM2WVBPb2Z7MGdmRFZ8bk5WZkVmW3olRk9iZWc+MUVKP2Y+fUMxRzsuVGhZLEh9UHR8T2ZhOWkifWlXeC9MVi54QF9MUX4/Lk5UODcucXo1M1EzTi5pRG4+NnJFUmEpSERsPixFQnZePTMrSl4lPVZNfXM7SjJqc3huIW4sOUhxKiRJJDFEbUVYTUVFdXVMWnh6NCR2aEBOR3ly'@;
put 'bVJ9Ij83VWcyOFUjKU9JT1goR0h2TUk7bnUwXzFIRzppakhDXmh4UUtYUE9QaVkwPl8vRjlmRXxlPEJOZlhJbDNbWH09YnNGM3N0ci9ZQjomaDAmMTE2YyVZVTR9VltdYzYjTVJ5Oz0uaWlrMXhVSXNFX3AuRCxwYHA8MyRDMHJDZ25WYn0majRmLzNPNndbYHJbI3IsTDhUO0wmUng0S3Fbcllf'@;
put 'OXE8InIzN0FHLDkxK0tBaFM/YEQ0Q3BOaSs9eGEibGwxOFRSLEBka199ViF9OGBqL35VUjYsdDNoMmpnPzFkLHA9TzBAd0ZbZHl3V3F6OFdibDpyTEF1LDlpKH07cS91OF9CdUs5SHRfK09XZ1YpRnExfmplSkd+V1QjX35TOEJ3bDE0OXtoKG4+ditKOHhCcVJjUz5SbGw0IU4rQDRaRmRaVH1d'@;
put 'JDNYPWk4XkBLfHguZylNJElgfXh7M0dkfWszWTM6YHNaPU8vIjM2Sn5WdEdYbnZNWFZ0YyEzSURPRF5LaXVGISV1Y2U3NHRkQHhnUStgK0kuNzw/bDRGZVs7bFdKKjM0RVJiZ3xSTm52UnY8Yz1PKX13S2RAIThfLCZzW1pCfEAsXnxqRU1+VixIZF5rRWs5Mj9oRng6ZCsue25LdkNrUWZYImZr'@;
put 'W2dQeUlpX0lkSixUZiF4WjM4V2BtemBFX0kzcyxpUmlvaTtFKDorSXMoYFk8OSsoNjJ+SS5mW348b0E2fkRtRW1aOD1yK1ZTZXc0dVN6STZwSytYVigudTU3b2hbPT9ScnssQWtNens5LyEmVT9eRVtLbGU1KSU3eyV5OmlQbnpiZkx0aHZ9JlZzW2hoPGE1W00qaSV4Q1JLXTJAL2o8QWNRXT88'@;
put 'fWxoK0JYTDNaSmg5dDJGLDleJVVKbklvdTZpTkJxbD5jPTlvOkowQmNrYXU0TGF1U19pJWJrR1p5dS5sV3xrPik+JnIvRlMpMTJwL144ck1JMGxSYSlifE5uIzdHcmY5YVJ8WSJTNThAOmlmMzZ4SFdrc0khIW5ZO0M1NEM3cFZ2Qz5dUm1LO35vTX1pe0UuOnNnOENlXk0iSkszOW9CMyo3IUgr'@;
put 'bWhgRm8oLHdkUHA2IkFQRl9hXTIzOEBoZ2pERDNHQSoueiRHeVR5b2lZNU1fYl5aPSkmS3xlX2csRT1eZDFUIXVDeDVxTWdpK089eWAmMk8oIm1eV1NWQjJTZkJIWGM1Ij5FM0EuVTIhbTN0RDxDLjJ2RnY6alV5dkIsYXxLKyplR1Q5Ll5TWTkmfXBHXnBgKToyV347Mn4ySns1PmBTWH1Xfjg2'@;
put 'Lkcvb3Q6dWxyS0hnR31McnpgeHQ2XW0hNnBoa3lsV1RXPT5sWVdZTXNNIWokMjReflA0ekIuUnhYLyJ+JUIsdG1CdEs5IXZ0QSFIdk8/RkNbVSRIVCowdHxGUyldUG4jdlhwcStRJkttK3k6R2RCPTZYWXFRU2JWY1srJl1xNGR0Ml9ZUGNPcThbRD01fFkzckVLP2lUdnNlXyhqZTRQR2BgUVt9'@;
put 'YiM0Sl95PFpwfWFZeF5LUWxvP31yUC9oc31pK0AobDk1Z2txPChvfmlMdFNPbyk5JjUiPFcoajg8WUgkZ2JrejQzVzlbUz1hYyJLOVt9cTkuRn1dYFZ6cnxHSX1falgqQCEqTH04SVdmYF55LyhXSj9aa2t4bUk9aSNIL3FQQ0k9UiYzTztEPW80XV0mJDRWMVRfdSVyOSRXXjBSe0Y7RTBOT0df'@;
put 'SDZQXXRmRElOSUowYFl4dGRwWE5IPTZeJjw1PVZ9XXpHMEJfZEhhPmMlLnVSWG50ZVVwXiU9WCs0Zj58cFFIbiV9cV5YTGpkQjYzIjopUVUzLDEmPEthXXxwMWxbRnBORltBYzA8KU9uOmRlX2tEWE53PnFqcWJzVCJOT2JGO0hqVWdEbFdPQFczIT1Kc0coODdwVnBec0UhdiVzUi8xJC8zVn0k'@;
put 'KWkxcHduUlZZdHNZNGNXL1tKOFhXLERFJlREXUk3czkoIkl9OSRtcGFUL110SD1kfUZ9SU5OL3tmbWI7Y14lI105aWJjT14jVj8/RGM1ZnZAUC8hbFJgRFF8fjxzJX5JTk4vZjg6eGspVF5Se29RVDM2PCNvOEdTaW9xVFNTV1c+Tm0xO2VrfUY5ZGxrIURyTzFqX1khdmN0blZpP1N0VGs4dlR9'@;
put 'UFk/JFQrY2xNWG5xPmJDTmpjVlhzTiFfUmdaVi9wOE1wb0FxV2ssZzlMSmYvISE2fXZYREN7aCQkODJTdmdON3xxYzJaOlpbVF8qYjBGUFFveV8qdShOODdZU3ExeHNVfCx8XkNgMEZiW0V1KkVxcjdgSy9CNDNedG8uNj0pUX5CJHAuOk5fcFdzPCIwIXssUiFJYGZzOCxQOG8sSTtSIS52OFpB'@;
put 'c1NNZlRkcDF+aXxFfnNlI31RXUlSIWd1WlM4L0UiOSxKQ0NUZSgpSWZUIWwiM3l8Q3ldajM1PTR6U0hLQztIeEtwSyNfUkJEIkZ0SzwvMnJ+LHFPZW98QiU9aUkwUV1jUnQ+JFdDQiNbT30pUTJ1fSoycH40Mj5kJUA/bXN7M3E2QitZWnZNLjZdYExobDc+TDwiZ1laXSp0O2A0aWxzMnBNeEJF'@;
put 'eGljL2xLJEpXYG9wQmBKK19ZdX56SnQuMT5jOjM5dXYsb1NZdTtMVGdKPCgxRW1eZSIxLk5BQjRKWGFVRUlPYTVDN3xRUDNtLE9kZ0tycT9ISUNdfCxacFIzWT08VCRqcmZVbSEsLE0wLHhYRmNHL0J8blYxe0ZtaV8kRF1DZm1WLEdDIz1sQmUiZVRAdFpbdDJ0T2tzNCZGUjo0NGc5PW52Z0tu'@;
put 'eDpfcDlnd25sciplIixrTltacEMrakRIXnVURDx0TEVtfllObTpUOzl2NjhYLHxUW1A+Uko3cltGRlpTQnwsLlUvRkQ5JUNxdj59TVRrVWd0LExEP19RLnM/TigxJS5tWDkwNkJKRDU0KlMxVWB7QXNqPUI0cDl7Qjx9d0FCNHZCUFtfP1pGIkloKVhvKDM9UWF8IXk+LmFbcTA+N1UjN0x+b3Iv'@;
put 'bmZoQEB2ZjRUU248QFghdmkyXiZRdlBHSmp4NDR2UD1UPnU0RVJCLHJ6PlYsKzwuOl8sJiVdKmNCTiQzeVAmX1VEKVtkTiQzKE1fND1Pd1Q1TzB9cVZlO1pIMi9GTWNyL3JSI0YzeCw+aVk2UEw8MWZGVm9hNmprblZJVSh8JXNENGomfVFWZTlBbHd9USgwVSMpQz1sLDh5ZCtjcFNCY05JOFJB'@;
put 'UH5EdDF3cm5SaXtCY0JzXUtBNHxyeVV5P2dAJUI5Z20sPS5ab0IxWjFBKmZ+My8oS0NvQkJSRyN2PkJIN1kvQH5WKDV0Qi5kOjQpfjFVOk8uPGwpcTFtI1pIOk1sbihdJT8mcEtQKHU/VGFuYktabyxdakA2TTdLX0g3cHh7d35qeVJ1JDVrcz5fLylXSFMyZHx4Vz9iVUljaW97VVlbYXteSlh2'@;
put 'QlMzMExKQWx3TVRSRjdmTUN5UGErKX10fiRESSpaflY4XktAS0BKfCVaZD1wOksyNHxiLzE0NnxjJGRTRSsxdjdVZ3BVQj9LSyYicDg5b0dBY2RXMz84YmNwa2NQKmA6USljdTVedmpRRkMlWkxPcS5Zfl1IRztzfmcwO2VCWmBsNGx5ckcqWk57TCp7Wj57dGVkMXIwPEtWNFg0YDYrcXUiV2ti'@;
put 'JXV0IjwmYy9yWzpCJjxOLCEwZFM0WyxacEhiSVVZbEZBWzU+N19gckF4NVUjXytwL0MjMSFxP3AvYSVMSTc3JF9CPnxhbl02Pkt8LmliZERgeD5zQSFwMlExNmQ8O1VvVGkrYWt2On1ENHtQdDp3IS9xZGw1akBPZ2ZiJWdCWDs4QVJ8LkR1WHVWRSIyKEA4ZUczOFZQfENWKmhUdXdERzFpWDZ5'@;
put 'MCFfLjg3aVYuNl0oRnM9LEBLaXV6XyNTI1N+Y1IsT2swOkpRNCpjIVdiJFU5RiU9ZipuQDghRSZLe2VSfTNjW35uLnQwPmxAUSZJJEpBKlB7P2VuVnNEVVNMJEs+QjRYZCU2dCUzeERtZmg0QWRhe3s6XW1za2hVLCxCSEgqczUoWzVUTyRPVChrJGEvKVJ7cXU2ayVBOCloSyVrYm5+OUwySVJM'@;
put 'PCtxIysrLkI4QnJdX05RanM8WFhOZHM9KSZlIlZSc2pwQltmLiZ6VGhrKzgkcjpeUS9tOHhgZH5RVmVtWkc8L0tCWmRpVU80d3FRIlIrWC9uPlcrTWl7RVV1MG8+KzF5RD8vNX5RKj5+RkVNJlF9TWkrVixMPVtuJiRNZCpbLlpaTUJDfnkjTERbbkVjeiptfEY/Iy5aJnwiMzN9ZmBgXW5qT11F'@;
put 'bW1pYS5nLzBfYyVuXUt6YDxzNmhoXTkwezU/QSRELzAmUStQQ3x5I24sMUM0TCJHJkM4dUpeczwwVzlmRFBpU1VoS3ltV1JTKGA2I1QpfS8hP1J5TixEVl5uKyQvVEZfWXMjJXo0PmcxO0lbWml+WWF2Y3RML0MqLkM4W28oRE04RDxGYWNabilGW2Mkd2R3T2N+WnY0PzJzd087ZllwSUEpLDQ4'@;
put 'JFlxSHMjSktNejF9SSRrIWs+Y2hadjE8aWt3fmhqTlBCamY+Y19NW3ZUTkQpX1tTRnY4RDNra0xFZFRaYEREMjMqYyRAJSFqVnVOP1FnKTMjalZ+TSUsW1tecmxXKD18K2VkWlBEe0dZVEw6Zi5QOSZldXU8aHw/TWdbTkd5c1laNVJsV3A+ZnZKRE5IVXo5Rk9+UlFdIWlPbGB1UHFsPFtqPUNC'@;
put 'Wz5HT0xuPiZiKFd1PnU+eWBAOG0paUNDR0I2X2xmNEFba3p4bVJdWV1pcVJrdVE1a3dLL1A1dHtmcEBvaXkxXXdtPk9GPGgoU3c4N3dTd3tbQG4xOmN4Y0o7ISVnYzVoKF9YKHV2JSk4YXR+K15gJiFDKm9pUHs/QHgyS1lfcVpPdV54YWVAJGw+ZU0mQncoKyN0KXgrQU0ibk5ZPV59Z2ZYLC5r'@;
put 'Ozg3IlUjNHpPJEUhWjcmU2NhPD1XRnxRWCE9aXg+X3ddP0o/eXRxOHU9KiRWZnhITFAxcUFDYHFkUXdoeTJGfltoeTkuX0NmfENjJkM0PTxNQT90ezdXTWRsSjl7K0lyfTtSRil2OGp2V044cHdPd3UraE5IP0NjMV1uUDVeTmFIfDRwe106Q2NHNHI5ImM8ZHd5IkxKOEY0aGhKZ1VzQShYakol'@;
put 'Sl0wL0h3OEVMYEk9Z3RwaT5qT1J0UXY6Sn1gPUh5aXBOcC9Kc3BHeUsiWCFlNDouXTA2KikwN3N0Q0ZtYTsrQjp0K0daQjtXN2t7ZStUIXp1SlVzaTE1QzV3bk9wb2luPV4zVVYhWFtseSFmN34mWiZPaSg7dmIvIj91R2pKPCZKY1FvaFZIYlprMVdMfGVtYEdOaWwxfXZoUVpgcHBTKGtPOnR0'@;
put 'MVorcWRSI2MxTnhqQHVtJHsxcyMiQ2EjdGY0b2x2L1VwKltnSmFxcEZVKXt8Q1c+TmAybzomI18+KVkifEpbeGNrYWFhQWMyMX1USF17SHEwQn4sLzpuVkkwNStuR1JBWUJzIyVXP0k2flk2I0JYXTwyOEFjV1BBVXxRTl1HM3hTOXt8WTYjcyt6cyh8dFJHR19Heyk3bV1QayFiNF4scSNvbEsz'@;
put 'SXMpemA8K3x6YGc7NC5CfTZXfH1XfE8yfkt+RkI1PFh5VzVGXnZZXWZ9N31RLGMrUz55MHdEKVBXYDV9fSpwZkFuMn17UkFKKHBRKCJtYFdVVkFoW2l8MW8vXlM6PnssSzkkJUVqIW9NVWEhVClSPm97Tj4+Z2heZWtYfS4waTBPI3hlMF1zPEM0JC5zO158RyZVOzxHal43OHEzYHUze3QuW09I'@;
put 'TlFkIypdQ24+KG9mOXUzQHt7dXp2PCVZQndmbHk9XTZdYT1ZMFBHPCZge2pibzNPektjXTBwei5kMCRweFBHIVlMfDZVR1lHb0N6SnF8LmFwUUskPCtKWW8xaEZZI34jfSpnbjhBWiV+VUdGY3N4b2p9c01rRyYuZXYuKnVLIjllNCtUNT9eOEh+JWBKOiRmeFI9N09GW31ZMGZGNCNIPlVQPVFP'@;
put 'KClJM2R7UyFeQlQhfUNmQ019U2EsOXQ5cHskQFkpeHopcFMpe3lIaVR4QyE+VCxAVyQ+W1E9Q1kuQEd3eiw9PFl1VDFBPTF2XXVQOlFqYmxuOmxLfktxXkk0ZD53JDNtS28sOClqWUR+cCNfUih2Umx7NklUXl5VRCJrS31RZlRzbDI3Un5BXih1W1pqXnEjKiZ6N1IhfUtfLmUzT0ZNOVR3bDkj'@;
put 'QXdEcntpT3x0IiYsclpIXSJ4REdiQjwkb0o6fkhyfTJdSzJ4NmhWYjRub3VVfiohLFt1QzQ7OUxCX2kjZD1TZmZIXyY+VzxSaWlzTFtLRWdwJFB0ZTVSeiNIMkY3bitFfU9dcXNPZkY6SjQ8eyYxdzomI3YzW3FrJXghLCwjMHtfY3tWb00sQU85czFEeChsZXJdKzN9LF55d29WY29zO3FWYyFa'@;
put 'OkZ2bGIuMFcuaUVeKEtEZ09oP3dkLkZmT2cyJTI0djo1RytaOUYie3wsc2I+VUVtYUQ/cXNnZ3h3X3ouZSswMHRnS2ZbcntXODo2fFFbdG1RXUtySkt9WD88a1kjczM9e1pJXThkem5nUH5LWHhuQCs6IWwkZWx3K3hFMnFARlt3PCpYdHVUTjQlM3guKmNkSjpXU3k8YjNzSXFjVEhyK3JTcU9Y'@;
put 'RF92c0lydVJwe1Z8ZTY9PjQ3dSU1JDdgQy9LNmBUTj5Qdl8oJkhzLj9AbHF2PTUkKzRCJCtsJEx+KHxFOGIkOzpOYyore0ImS3pKVU80MllQV2VRMXw8L2AoKGZbazpDK0swbHlfVk0xQklrZ0hZQWxJWzplcmV9cCt5e2x+QChObktGe0ZVTDBuWyNFYmVHJUZVLEA+LGs3N1BOTkgqPWljeXRr'@;
put 'NTY1fl8jOSghaG9IIigwTVVidVpdVmlyTyxsWWJlM1ZFcyZdZkJZOkZNfmdFeFVzXTF4dkJCS3BFcEYrRnJqeEIuLlpzXX5zInEpRzpFPDNzNSQhdTAvZT82TTtGV1M1U3M+MF8jVTdUOFMsYXszVyxjZTwoWEwzM3YwVnMvVzhFVWYvSTJZZmo3WSMoeixYYmFfY05yOHtYITRoREdXYV1AWVA4'@;
put 'JWF9bWUhZmorbExnTWJIN3JHaUxDO1AwRXtofDIxQkB1YndiWUFYTl5PImE/N1J9fXFpTzZKQkxEMVdNVnBaNkZWcTFCOnRbY0ZSKkQ5UEZCckl+VF1BM0lGUDhrfEx8KktZeXRWcWwvfVcodG80THgzKFcqT3YqRHxCNkNkP249cUNoViRrc0xvUilhcSl7UjxFPCl2elFROUJoWHNMW0p1Rzd2'@;
put 'KHMjPFNxYzhgcS5YQWhuK2ZmcXRXRiFXMHVONVBybzQ3Qz92IlRsYSQ6eCgrTWVLbW0iZSo8KmNrM0NQeWciTTA/PE1bO0sqdi5lO2clZ0JwayVdLE90US4kZlpPQFF+TF9GY0UjWjZxMipbYDx+LH5GUXF+MjAwWT1tPnFJOV5ZYjZATFVKbTRPVC5xLHUuLHouMz5TOzg3X1U7dUo4cGhbRU0p'@;
put 'I14/I3F0UyZgL0c0cSFmSDFqKVZEViNmRlQscXZOYy59XTE2UnhRUTp2MSovNW0wPmUzTEpVaFcqU2UrUE45JnZNSGBgUD05Q14/WzZ4Tj17cE5eYFpsSFFEaEViMFhuW096WWojPjsjWD8jQDEyIksjdT19VWdge09LYFMqTSh7VyZ2XWckcE42QDBIRV9OY09uSkVeSWh1bXBwP1VLYGpCUyhb'@;
put 'QEwiRUFuZUhJezptV35YfCl1PVpMaWh6UUs3cFssQHRkL0UvUyVSO34lOyE5JUhwflRNOSMzL09xZXc8eHZgPyUzNkoseGxpOTZONS9tZjhgViVKP0BrOlppVy5kTVRVc2dmNG9ANXwrPEBQQ3llU3ZmZFkvakt5IlRtXVt0eSsveHFCLjJ3T0o7TzcreStQUDV4U0E1QCpsJGEqIUt5UjpRWiZA'@;
put 'dXlRb04xQDpAMmdRWjs4eURPTXo9XkZ1Vno0ZUFiUEs9O3oqLCR8L3s6TCtxb2ssODtkfShHcztmXlsrUnwvdzwpMmtEMzosPFVVSz1VZ3FqXjtRXVpUUmg6QHNtTWwvLEl9Sk94QS9WM1VROHl3PmF1V0pjbV0pazU4RUdFSDlJeUQ5UHtjPCp3QGN8Xl94PnlgNjIxaH55cFRRY3ouZGV2c3gw'@;
put 'SlFmQTRnKUNneShLXTJfaGg4LzZmcGFbMF04Onk1UTZjbkh0UDohJUhbTmJaY1FLLDVgJkJMbDluWkI3c2B1WzQxNW1JZUpOOHgpZDFHQ0E3SlthMG04TGQmIkVNMVBrPTBzRiMreGBKQWR5Kkw9PztTMzEvNnJ5Mj1kL3JiPlRQVHg+Onx3WXoxeWY8QU03RnFHO3N3XWwzZSNPe3tMQC9qLylh'@;
put 'YGxqZCwiIXV3QkR8UTpgVU4rXzJvQiokOitQaSpraHhEYE5nLy5Oc3Nve0YrJW1HNG1uRWN0RX4/KnVtO2FoRy5LNylQT2BWY3hITVl4aHQ0JkgmPS84V29CNzJTQWRTemlYMHohY3k2VVVTSGdeMiRMUXo6QyNaa0NzT19acF9tT1BEQH0xKGs7ZngzfmI7bjlwNSx7V0VqVVc+dDx1ZSNwezth'@;
put 'TS8xMl1mKlthZiFXMCQ5IldGSjhOVi9PbGZBSCxjfTd1dU5bbiZ9OWMrKH5iI11qYzJHVGt6dEMoXmB6LEd2OjBLLjR2OmpvZz9sXll1UD5pJTIrYVBpekVTdjE6Zn1vY1MwXilkb2p6YDheXmVYajdpSS5YVGJzb3YxdFB2ajZdYF9EfG4kbSx8ZjtmQixhND9Hb2h7UX4sPSVtZD9pVD9PcSYp'@;
put 'UDovSWpBbiNkcn5KSj01VHFEQCV7MXM1Vn1FMThkcH4pTF9xMXtTMS54Ljt0eE02YE1pRnFqVzg8aExWUi5CPmlJd2g7V1cqYmo0MXI3fUNCWjN2Pis/WEkiU2IzJUcoeFhfKTtYbzJmdEExcm1CQndyQ303N2Y9ayhaI1A7Ukg1Xl8xZE4wO1RNNls3LndeXykkakhjZjZ1dysiNEZsfFJaZFlN'@;
put 'JUgqKnh2YEpGTkFZRk5CKjF3WmRuUHR4OitwTF5KaCldSiQ8O1QvQnZTLzo+RD8rQDZifVdYKD00REgzTXloSD5dYlg2W0NFVFF1SSZJWjxaMVppVHw7cDs5YGh7RkhDKkw+RUddZjU8K0I3WT80V15JdU5UNmVlMndVanB4Skc6JTx3VmlrUStSfHFAdiRZZk8rMGpSWnp8YU0pXnRqJXxgPV9b'@;
put 'YEdKaTtxVXIocDI4YnJxTHUseFA1Ojl9ZDRoNXRBZkdDWFY3e2RlY3w8O3UhM2ZiU0VUVDFBfnJ4V3J9eGYxVyF+R1tgZ1tvUGVfL2l6NEhNfXcwVUBGdTBqfSldR1ghPyFxdC9WYis5ekgkM0A8N0NFamdGZWtVKFQ1PSkhVj9eZyVpck9EeUlheDd2N2lxW2V0V2dhNCFORDErcD9rbyYyW2NU'@;
put 'IV89SzQ0M1tnQ1BgLCV1Xi9YaSYpYytCfXF2dldyeG5paTBwaGBeVHFJK1BvNVh9fTlVSjBDJUVSSDM5KWMpYyljKWNqUCVIPncvdTgleF5zPitQUl1obm5FbD4kc3V0TnBuOzppcG9MUkxSTFI1bkxSQmlhP1dpWD9jdzh7TEYmLiYjeCxENmpIaGNZNUJpPTsvMnhuVFo3W2JObXF1VW1jWmQu'@;
put 'S2YlPWZRaj43a0JGSW97PldYV0UyNCpyKD82U24wc3Z1QzFHSCQ0d347b2BzX2U+Zi5MOURkKVNEcT9NKyhbYFtXdTJrdzg4fCw0PUldLzJgSkYoVVgvRldoRSIobmA9VEsrLnlKN09jN0tBTz1bS2wuWStEJHZAOkh4YDJwUDQ2XlhLOGRYOV1oLFA4aFlYfXQ0R3IzSzp3NTdGemVjP18mSzo+'@;
put 'NVBrUGpWQlAyYVA/NzgpIyhLYj1CRkdeUkZzczZlXStXNUBCZDFAQnxIVy9nKj1XdVY2RV1JKTc6Sl9bPWE0NntnOy9kIVZnWUcoZG03ZDY6Zj0rI2x8L3xnQjdYKDtOTEVRLEZPWEk7ZDYsInwucUpONTFRKFdUOTQ8bkJkfVBfWzA0Z3lyQCQ0TyVAMU8vc1YsVGBGZlNvM0MzOXNMcWpWN24l'@;
put 'YHJINFdEPnRCInBBTDY1T0h1Pi5rMEtjfCFsL15dVjV2OkRuekkxY1F9JmUyYHRlYGA4KVprJTtCYVprKT1XVTNjQiNbJnRFMmc0QlBMRSV8QTQ4LD14Vi9XaUxWOVgwNCEvOHlEeWRTKkF4KjNkVH5fbCZVYm8uJkdbWU5BSU9VMGREI3UvW0o7TDU3UV5ialhtZTx8QmBqJFF5WT55YjR5Tksp'@;
put 'LnlAcXV0R3U0UEpdRVJaaiN1Tk1WJjJhZU85amJqQTU4M0QsT0o7MTQrPFkkUzU3XmElZkxCb3RddktvM0w6Q0spRSFMdi4oIVs9UFhCbHRBIXVwZEo/IWZGQUY7ZEdRfiRoNV9hdjF9SiNgK1deUyMqOjZpNjErN0R1bXxGZ2daZS9fQkZ3QDJFUDVFVHRYXywoUCpSMUc1Z0UuS3tdQyxwKUdU'@;
put 'XlFsdXQzW2duazJvNGcsfl96Okp5ZWtpWEdAWGtQRj1RYER1ZkJSQjJSVFBtNytrbG80YnRhOSFGR1NzWExoJE9JMEsuXnJTK2FhM2skS0YsNlFYUz8wNHs/fCJ7M3t7OFMjOWV0T35WdGM3Q15PY0ZMOSpDUDgqIXFtQCFRUnI0aUxucEMwTHBSMW8kc101OXJDOGxVZSlJMFY8WVNjbkIsYUM2'@;
put 'aDQiKyhyX2BAbT5bWTNeWys9e1FhQEhUMGZfLD1+d3JiSlJ+dFNob2pWeFJeSHdqTlduaj1TVzUpVzx6ZWw4I2dVSl1sPFZsKUdzMTw6ajtVOGZlKnEzNmNlPSQkU2Y5WmdoMnt5UWJtbHFhezoyNiRTeGxiZDtJUUIwYCEpQ0xyN3hmNTUvQ3dPXXA9I3A0XlVaSH4lQm8uUCNdPzxBYG1GW0Ri'@;
put 'QlQyaUNoVkIzNylZclAyPFMuUkNdfH4hbDRTbjRLPDBVc3RAcTJqWSMrXVBnKUlaZHpeWjVVLmNsVDJQMkJjMz1IeCIiP2xoO1kxZTZEfSJZdW97UDY4dTA7d3YxflZqYXRFR092OVR8MFRDVkpTaEMhTlBfKnowR0ttX3ojJSldKmVBJEV1SVJJO0AyM0Q8Ok9FRVhbdEV1Rlh0XS5uak5jYWZE'@;
put 'RGxKO3UjK2tBXSkrQCtINUFiTipNfjBXSzYlR15QeF1hQDtke0Q6JTxiYSV2QWBvSm5QWCs9d2UxZEYoR1goZ2lVcz5KYDREJVBGNyh6azBOKFZ4ajNyNDJmSjdVd1J+dnske0ssSGJhMV47UlVQMU5OaColej1iLzJlInNiT19uekAuWChdMSRnUmNiLyMsX0EhYD9HZksvSFE9fTo9R000SGls'@;
put 'W0I7WkRee3A0PG5seHtPSFAmT0YpaTN2dT0uYGImTzQ/YypIYiRIZSpWNTlLcmd0cVpxQGNGLCo5ITNYPkRLS1J7VG5YUz5yZkQsWmZQY2VbOmcuUElndjdXTSJPYSxkUzs5KUNZcSshL21ZWHVSazREeDo7InRITmNeeiZpdFR+N21SR1ljUiNJTklQQUxeSDJ4YmkwVWtCZFM8cWNGP1tQYDde'@;
put 'MCZqOHY8JjQ9cV9WKSU3I2J6YUJeLiZPe3tXM3NCO2Rxa3tXVktFKGFGJklQQ1EsWSw/Z3xkI2gyaGZ3WkQlOFIuXjtjYE0/e15tWVIrWTJEczI6NSpaTH0wcENzVWBKUCZfUXYyfXh8eHx4fHhIaDQ3QjlaMT9qVnx5SVlKLjVdaWtIOjA6MDowWD9YUnN8OW9lSnZVe3Y5elVVfmlCY3lMT2Uv'@;
put 'ZDtKOFQ9L15xSjcyX0QhMGZdP3UyRU5INUdhfXUlI1d1fCk7dCp1VUIiRXBkL2QlQlB5RnJqSHBIeTBtSVd0aUBzIkl1MTpIcFd0dW84Z0I0LjpYeXtZTXAxQHR7M25NMmlNVlNySmMva1BeNTlDS3BFO2ZhcDM5Zzo5bGVLdEc4VSJybCsvI18zaDpQO0dVS0VdJXtVY3AkTE41XzhXI3FvNDxt'@;
put 'MzZIPy85VWh5O0Z3MVh6ZGlAMjBHdkJycHptc0cxfEUhSnA0eFZlZiNxOTR9dCJxV2BzTnR7NE4jS2FuemRhajFoI3FTMVFNayoiRSJYbyRxKU0sOlswfjRbT3RFa3RzXWpJN2c4eTo3YGpjb3RoYjAsSFJBT3p0T1pkYylzbnNIT3E0XTR7L1V4MnspfTVVc2wyNDp9TyVVP09KSDpsMTlDQ3A3'@;
put 'MmVIMjRoZEI3IWArdWxMOTQoPldyLEhlMGYwKSVvMFdyNDBXckJQTy9HSzErSFJ9XU5Ve19ENCUyem5oY21WYlt3RG9CYEkqZXNJbnZTbjJzWXQiTjB7WFt4ZGlTaHNifGNfXnFnZSNXZXRgfDxxVElLIVU1JFtST1Q/YjFVVSlaRWgkJEgoXypoW3h4MC4uWGVeOnZEPnRLU15HJkVMOyxbL2lV'@;
put 'U0ZSdX5yZF83ODxWJjNqe2JEUWw6WiRBXXwodGBGUlklNURNMDQ/Zy9oU1kmemwlLiZIKjtGV2AxMTJ2TktxRXFAOmBfKXlASGpOMiUzVyNnKzRxXik7TCIlamlga15FPV1lUyFsUXQoNFVnRzdCL0BiXi45ZkU+Z3QlLD47SStab2VKTWZsWC9gNyVPb3pwQ0VBak09RzZRNFoucSZUZCQ/W2FZ'@;
put 'MnZvXzdvLyw3QndFK1VVVz5kNHRlMjs2U3YrW08/KV58MXJUZD50UnxpZVdzNjIoRktZJCt7VGltRCQ0W3J7TDZ0SFAmQiR7SyhzZyVQejhSPURlWFVLWixNX2dha0pfQkI4Rkk9aUdYe1RrZldgPDNqQFkkeWI4Nl1AbzBLZW98TTtKUm07bj9NXmRlKi5SKnlpMlZCV24kbnM3Mk1tW09BeXta'@;
put 'Q2JDKEc7ezZLYSZaemtkTlgkKFNzbH5iXmA+P1tyL2pYVHEmR1E/VitqdWRneUJJUkMzcER3cixlNlcxUntndThZLHx8UCJ9MnEwbnZfSVV4YipTXnE4Wz50Unxrb0A8NVttZTt9S0FyXkozWGhvXX1KT0VUL34pd3JbODEuSXJ5aDsoSmg7Ok18TkxeRXFvViFHKDd0SW95ZmxZQDwqNyxWfn1x'@;
put 'aUNpX0NQUX15N2FhZ2VRWT1WMHcyd0RjJUdYM2k7MDAobGtEOFh5UDBfZnFaa3UlcypMd3dSaHxSTkR8SH1FbTtLQDs+STpPVDhKJG1zRl9AIyh6MV1pIVc9Z3U8cypIYnRzcVV+XWkocGlzPUh6L0cvamVmay4rdSQ/V1ZXUXY/IjRIJFdkNEAxdUkrcXEpWUA/MXVhODtQLDEsITJ5NC5XQ10s'@;
put 'b2cyeVlvQGgzS1N6YzcoS3hSdmN8R1B2e2o0MDVfdHhzQDF1TCpPVmlNNXw3NGUqYXlGRXZ8NzREelArLkApc0kwZVMrSTtrUUxDTkBEa3hwK1BMPFAiQmt4QiEyeXZ6fio+P35MO0kzK1pkNEBoJiokdSskWXFVIy8oS0UxZyFKYnMwOzBLMCtHTnJGbEw3OWtRKy8qP2sodCtJUFJTSX5xJGtw'@;
put 'eDZjUysuWURwOFBqRXduaFE0QC80TVBhNTdLUUpjbypnK0lWZjxEcHEka3srK2RQK2FDemckentqKFQhdSRxKVlKYTpiOyopZDBIPmpoUitjc3EzaCsxflY+WC8pZCs+I05Ee1JZRUJ0by9iU2EyaFQidFNPQ1RuKVM7LmNnZDUqPXFaKyohRiZvb2RCYSUjdTBQNTg7Kmt5Q3gxZ2ZXRixxR01W'@;
put 'bVElPzF1KCpVVm1RY2BhWGFKMUtVMU4lZFBaZnhTaElaZiZQUUwlZ2M/ZXk5RUQpdFB4UiYvZWwvWzF1USI2cWxsWnhkRzhLNj80N2NQN01vRWt6SGpgPyZ9ZS8xSXxxbGxYLE9EJUU+PzQ3fE9iWiVsSUlbYVdWUUw9OGJTSGo5WCV9ZS9GPzNLZ0pffDc0WzQyS1lKIj8xdTVYY3k1RUF+ZS9j'@;
put 'eiZLWUpAPzF1LjoyS1lKaWBhWEdqIkM2UHduZlduJX4iOEtZSmZgYVgyak8rY0M9fWUvV0p5IXEhU0lQcEF6MWczPnFjVmZKRTIlbWFtaklqdVhVUUp2ZVZGVClAPWFJalN1KHJdTmt4XWhoSVZgVTwieTdfUStqdjVfNllreD9hWkk/P24hWE9wNWE5eFJzIWFlYTwhXzRPTm1gb1pJWWB2OzEv'@;
put 'dHEqbFp4IXEqbGVhZVZAU15CTFJJam81diV5ISVjaitIans/LyRIaiFYRWZQKz5ZTjV5ISRxezNOYy9OOis5XWY1ITRpeTNhPWs9dlpmbWp1SnhpQVp2P1IoSVA4ekRtW1s3VWMhVUdzNEgkN2UjamFxcW1Zd2RHPjBDZ3khVUdgTlhvQWY7YDpEO2J8bFQqXipvbWF7WSRuLGN4X19fPGswWkNU'@;
put 'P3wkUSteKm9tYWFSIUs0am0qdXZhZlY2USl9IUFxbWF7ZSx1InUweiFnaVUodlJ5SGB3ckw5fXwqV0suJkgiPkQ4UDNYUDBIanVYaCNseC9pL2VVLEZKam9pczNvYzdLbSEvZyZ8T05tZ3grQCp9TSshSUN4JlAwWDVJYTxvcTR6W19qTjRpcHVQK0R2fDJPcUl0bj8xXl9mQzMlTi8kWHRAMzFe'@;
put 'aiR2cTJtOSEjei9pN0lnVnNIKzs8bzAqNV99JH5aVkFhKi5AbHNXYnNnPHUsSVNmVW5HWEVuMk9reHQ2LmN2Z2wqQnFTPnJmd3cwLDx9cW9TeDVCN1Q7LDNtWyY7RVAoNVcqT20+Xn1QWV5wbG9SPS9gNChYb2xLMV5kJDp+L3xibmBRWjpMVS86RVZRRlssUjJ5VDxsNVlBRih8UUt4RCFgbzom'@;
put 'ZUJiKWEpc1cpNjdraTVZInwrOj9FfElPRlNMNjxabVlVUHw+ZiYwI29CMnh4RjJGKjU8ZF9IImR+M1NMPFQvQ0p9P08zRGdZVVsmM1RGKzRfRylhSlZ8KUk5cDhAMm9CJjphY19INC5xcUE2fnlNekIqazZMO0g3aE1FaXViNDAqTFZ7OT92KU9rWk9jOFtHYnRDR3R7V3dEZUVjdThgYl4/JCRg'@;
put 'UyFUKTZ2UGMmIT8/Y24/IT44ciwlajtDZUtTeT1FQylBJUc8M2RfLmhbd1kyPGFDNmJNYS80S09dXit1YzJfXy9HWzA+MEFzLjI0aW56WV0mZCE/KislamlgdDg7RC5CLyl2Km4hdzhGZEhtKF0hKHFZKE5CNHRqV0RsdjJJOmgrQyNMZ2tSb0FeT15qVXgvalQqVi4kezVnYlc+L1B2IyZBMnNf'@;
put 'cUk0U2t8Lkh8dUlxJU1kMHtDM153UGlUPlk2MTdhMylsO217LjhvJShgVz88QWB+JnB0bHkoc1lfXSVSTitvRk8lPTYsIU0sVjxVK3kxRXpOKX04Z1VtYE90MzRscnErZHNDO3E+RGZbWTxIdUhGbiVyeHAwSUk7QE9LMSpgbENKQmlXb0YybCZNOm9YIWI4bmU0MT8zQzF7QUhkIWhlbiNsKmZS'@;
put 'VERWZmt0L2A1dno6fFI/eUtPZ2BxU3F1VV5yYnspdyJmKlhgVyloPlckLD9xcls9Z3xVIWo+PzA/KHZedXU1W3pnQjJ6eXc7eHBRcjUmMzNzTGhieChSaT5WRWZMOEdTQjJ1eC9VPlZoRXBOOlo/XyhdLnJyZl97Wl5XOnNDIlpCRnU4SmB9JnQ1ZHFfa2NtKnVHeDNxeXZScjpRNnJEaSVQem9X'@;
put 'JF8hX0k9d3w9QXFfQlBbXjF3NkouTmtWO0NbJjtoOEI+U1syb0FWXnwqMS4xdEU/Z3suSDJ7fXlsVkpLK1NHQnExPEkvJT82c1VSbDsyLntaQl1PSy8mfG8pITdVaWRfYDR6XjlsP0taLiFONjExfjMoaHxuQ0pJajFvPWpoW2NLUCNpe2lLaFAyb19CR1MkWCQ+bzBAT1tNcXpNZEtOSWRMNlVh'@;
put 'RD5VYWJvVHlrJDpaIVN7P0cxSz13bVJFZ21wXSsvUG5idyMuM2FwME56U0s0IUAjUlJxT0VLWl03LldMQUs2Zm9mbHZyciVddlJ1O09yfHJ3MjdvMilhaTUxPUxQcUFQMS4uTkUyY3J3eEVje1ZfO108MWJ7MFB2Y1l2Wl1Xbnp4TzJYXUMlXXJSVUJZI2ZGQCo0SjthU3dAYyo6PE12WnpaRHpF'@;
put 'TWNYYC9EQCZ8dCN7a01haH1SVGFlVk5BMVI4b2YqXTsmL14qdU5SIVg5SDB7WWxDTU0qUypvWE1lRi86IVN2XiFddWExbVJVVnpyY1FhZzt2NGNdRSxNSmtzVzxRc35pYSIwfHJsMl51JV8xPGYsNiQzPTZoMSZBcmVSezVpTTtzQTclUloyMCUmJV5fbHZgZCE6KU1VZStxJl1YcGUzZy5hcH0h'@;
put 'bmZaLCNkUjo/WFZJMCwmWk0zaU1NfkBLQWg0bi8pYzhtLCVqQCNVUDA9IXM1eiVQaTsjXSVqPyFILyJ0UVRyN01pVmdjXikoRj0uWEZZbmgvREN8az1rbD8vJVBWJnNtPyFUYmx8ITlseVprdUkkWC5pLkVAenlOUm1rVkZSMEhXKT1CNmZSXl0xaFI6UkU/UDEoXV1gM21uL2J2N1JSemxFbyNg'@;
put 'ayQ7MFloVWJXfiVESStENnBOUzoxcEhafWlrKThRXyFgbk96T3kweUZBNCJXRj9qNC8/RzZrJEIyai4vcDNjN0tPYXd0aDNZMHApKS5ELEx+Ky4sOmRYT3d2JUUsMzAyOCM1PWhaUSNELm8hVFhgWX5RSFUpP3NedUVeL2olWTExQShgfSF5RmNaXl1nJT09e0VkZF9XaGxba2hOejlAYnE6OUpR'@;
put 'SyU5Z2VIKyQrSSQkWTJAVndbRV0kcHpiR3pLfDg9fiZyXml7LHYqTkFhUjNAOX45cjg+NmRVenNHS21yJUtCZV5fdD5fRmpNd0B5VGYuKyV4Q1ooOnJWdCFyeiZFWlswZUlabTpWPHhgMF1aX3lqc1RfV2w/cVhiRX0uc3s8ZkFJO3ZlLHd+eTYzN093US9EXl9aODd2UT1NOTs1SnxZQCsqTj5R'@;
put 'SWZfWk0vNFUrSHYvRkEmQk8/NVZldnNgfmZNKS4vZCNDLDklQ1k0bHZ+Z1tGOSRkMnQ/Oi49ekJZUDskUC9LXWVHa0NVMyQ5Y0YsTSVDZHByJk1AZiJ3fVQoc11NcUJIY3hITVksc2hZU25LPHo6cyQ1cixAOTJ2LkViezQ6OVNEcCZ1THVrPihpIWlodykyK05YVixhfmFyenpoXTJaTXhAO1U+'@;
put 'P1hadDA3K3dsOFBzWzpDY3omfVckckF7IVgqMyhfSHdDY2VET0V7WTQpTmVQXllVY1tlX0xabmpER0FjI3BML2FvRyY9dlNGdnJBW0Q7MihqZSxRfm19Vjx0VjdtWiloTF5aMFtya0F4RnhSbj87TlN9UzFXbHQ/YGU3U2BWPHhFKDRsSGBYZ0x7RWdZZmRvTDkyTmkqZG1Pak5XWmx4U15rTlJd'@;
put 'JVk/IVlyezFbU15Cc05XKnZLflNnVFpAfHEhZFVkITwsMS4uVC5OYT8vMnA7eDxGemNvKzhOP2M/emVjUiMqVThEQmlAT08wLl4+cktqcXcjXTBPQFF+blYobiF2LEd6ZUQ2MnB3L3U5bUFvZ2xCL2QuLzVZZWcjLD99OWImcF0+K2VpW0QmNXR7OlU+U2wiNExvOTdza3opV1QmekRDTUt2dHh2'@;
put 'OWVJclFdRWRkV2k1YV1JOERjT30sSCk6NjthdFAyeX0vNk96dWYwPGI8OFosM2ImJGBJMjdrMmheaD5QZX04XnUkcTU7LltFdCx7VCQ5Sz9ocUJuT2oiV29mYEMlZ3sjUmVtc21eXSwjZVpzZ2U1XWh9PWlrMHNYPnR1PnFdPmZaOWM5KCZTLEFlRn4zYW9nS3AxPX4rViQqV2IyOXpGYVY4P11U'@;
put 'OjAkRSNHd0RAcEk3OHREO0BpP3AuTXI1QzZPenx6NSE2OHBhXS4hV1k3aiM4eX12Zkw4RGMwSDcze1B1VDJRWUhDUDcmeW1nVmBJSjBbN2w5LCRhQn5eQXFCJmF6fSNRMzdvMi5kVTwoKEohPWZeNHt7WzshQntkQjRXZEI0V0QvRGQ2VXF6a1FaRTdvVEdvTGwpN05PZG5gJWd9NWwlcyRIOSg9'@;
put 'WXVqWX55dEZmZT5nWzokODJ6ZUwqcF50cG4rJSY7Qy9gbi8pZFRFQ0BlM0NlVz4pW1NZeVlONXVbJVIlOCQuZUdeW2V5S10mRzlxO1cuP1dAbFYlInQ3X3w8NWlvKj58fGxhVUozNGZ8WWREQ31ZQ0VicjBONHxyPEp1STFOYV9gJnBnRWpGQGNnYiokW040VHU1cUJTQElLbW4+PDJ8V2JxQlNr'@;
put 'PFt2eVE+Qkx1RSwlNmh6M1R3NC98T0k7X0IvQjN1SXgqNFZgRGo/U1c1eCM8fiFIYkgrTntIY28ofHdEJHtXOGZ7QiJfVWZuV3RSPS4pKVRWNTZSQnAhfjNzW2FtKGA2a10uM0ovbyo7cl54fFIzcXtBPjE3T2hvOUI7NGhANlRlLjhSe1lAUy5wd0IuQWtBU3F1L0ZWWERmQDNoOWIuam9OT3t7'@;
put 'e14yIjBzeU53Omo0alhwckYwQU14Nyk8JE06ZVpzbTgzXVRiR050e3d6LHdCVTooaUQzNTFHQ2QiZGJYbjx9Z35rOEYubV1iXyIkcVs4Mj9Aak1tdjZ4bkNCbl1QcThUXjhQcyxWNXVvb098MX4lPTBkZX5qJU1lPytjX3JvVyw0c3dic0Zxc11gVH1GS1AuITtNOSkhUGd6RClDRUg9dGV8bDJB'@;
put 'c1hfQjssNjtlNDklO0QoWF5KXWJrV3p4NTg5TDV6ayIzNiFBfmo8Z0swVDE5Qio0Ri5bNH5hTG03SW1seixuYk1SKFA6NGAhXThwfD1ea3RFe045bDJCVTFlIS5lST1qV3g/WzxpNE9AJEc0NjB5Y1lRfS5YbmMhYmp+R148N3xGIWVZOyxJKUhaXig0N0RBczpvSjkqb0VkWilOM31GZmtEckd9'@;
put 'InMyLyRgZWJncWRgMn48PS5iVDptS2BUMi9KczJkQX5gRVIqY0JEb0tDa0tPSVlkPDtBbD8vSl1mOUlGOk8vbTpASDQ/cTpSbWAmaHRZclh6OTBVMnM1LEt+QEVEW0BMc3AlMVRfQSxXRCtgMVlOYTorfiU3Rj1EVzY6NUBIQntXL3ptWiR3MW8kXjVAdGEwdnJ8LiNxNkdQaTM2eHxJZyMzfkAy'@;
put 'SFpoNC4pckVRIng0PmI+LkdeTUNhaSZudEAhaCpBX01zaDJdbkpyZWBCV1JVP097cEB9KVNlJSYyIilQZXdIVGJ6NmVfKXc3T0Jla3o4KlclPGwwUzJPWjZrV0lBVmVnVz1yZzQvWHxYYmtJTEI8ejpHZXs8T0B4e24mVld6fnI2QnIvTkI4Z2lgeTVoOkA5TC9XYmFIVFVPcyR1NSl1bGBRO0gj'@;
put 'fENuS0ssTmtjbD1PPy5xOHorRyYjZz1HRyJ1emtWQi9sYDdoOjtVcHE1MXg8LHFIUitGVkpDN2wmbX1RRmVSd35KQVphbHVgcE09LyZqODJCWVglPS51bVg+VFElKzUlLDF3NTZTPHZseXVSdHt5Wi5NVGdGTCZjWngvci8jPVciWS43XW96ZlNXcCVHSSQ0OEpdOUk4aFlFTWs/Jk1GV318Qyhv'@;
put 'W3dsODo5Zzl3YlIzMXdxbiYmfW1SQjhpdFEoZyEyJHZEWVt5ZFRoJiQuR0VBJTE9WFZPMWtsMWk7Uks8WEY3WCN9OHcxWzdFTUIrTmQlLD5yJUksMU09L2A2NzBWb29fcDM2VSE6Z0BkfCwyX2pVOXZ1JFlQWGVrRj8+fVdyUD5ZVSIjYU93XmVdYl0xL1N8R11lYGE5byxfXXFkOUY3Tzc4c3dy'@;
put 'LkBJOywsenk2dGZOTi9YfWZ7dmchcyRATmtRa0J6YHApZTQ6PkdvYC9mKmt+MGkzcmgkWE1zeUpmfXgjd0Q1bUpYWi4ock07L2RGTiNvNXVQO01pKEZaaT0oX3lJd20kS1c2LkRJeTppfTt5YHAoT0I4JiJTKyl3PS8qcU8uRSY5fEVlIUZUcj8ueW0/dTM7VDhvXjZCdzMyal95eGsmRSl3QEZV'@;
put 'YG9eU2U6M3s6K3J3eUV2UiUpb09lNXwvfnpsQ01+VyJdKz0sU1soWEYkaC9XeixbelZqbl1XUillc3pSZ101dVN8b1J0an55ekFoYU1aJSsjZE5OL1h3d0NzOlhQUTIjMDdTVVlQa1J6XTdgJn5dWm91PFRqLEArWCkkKU85X0tLZElCZVU+Wk96ZXJBRT9xXnExVC5MSC5Jfj8hNzt0K2E4bWJM'@;
put 'YWcuSUVvZHUySmA+TzpnTUFBU3FHS3diUSsiL3RtQHJNX1AmcUNsKmUleFRlV09jcXpiZG8iMHNzPiQ5KjdgfURqQ2I1IVg0Nm10aDQzSVtmZWBBXUsqbylsNCFzKUVaakcsdyVTUjloIWY4S0daZHtaZjI9WClvMlRPQmdrYCtIMlUmMz5XaWNxemczeVVBUSgxKXUxJjkvZWlXfig+cm8oVnt1'@;
put 'fWhLVCsiXXBxVy9UeCVbUHtYbXoveUlxVjptN3ZWMEV+MUVyTkNUbHRWaU5yP3g0WGpHSzhdZUBRcGJ4SWRSTlRCOjM6ZThoZ2x1NXIkIS5hVy53cnk2MHFfZSp3YDt7KEU4ITh5SCZ5cWRlfTFrP2QodzpxUF1zM1t1MzozNnpGLn1IT0Y6YFY9Mix2fFZzaCF2VC9lfUZWT2xfTnAwbDp2SGJF'@;
put 'djhPN0J+WTBTTVVpVGk7ISk2YXNfeCo3MipmfX40d1sjbmUmbFZpdVJxciU+Z3Z+cjVHSCNoKWR6S3liV1thMj5iMjhOKDRrRyJUVj1sLDgyXip3UW5RPmt5Q305MSk3QTYxJEpzIyYyPHhYbyg+XkdFYmd5MTtkJEtjNj0ubDgheDw/IXhoU3B0YkI3RCUjU1haW1lzVVVwMEtKejY/ZG47aV46'@;
put 'cjNyY1hlNDtFQS81cU8sfDp+Wmt2fnVMSjVAazA3Zi8pWjNfeks2eVhfN35PJXpRYUJrUERBQSxoSEhCdDtDXkpjYzg0R3VyQyFdfXVSIkNBUSY3ZFhqKmdUUm56bDZrRW5SUHZ1VylBdihKdHlOdih+OXNjemR9WE1sMWRNVDE0Mmh2KWhNaGwlY0RjekgpUkRFcnU+a0xSLiFpPktpSEwkS31x'@;
put 'U1VuL2wufVRJaT5PJXlFRGl0JHw3W0hdUzN3UHl1MFJERHYqU29jd0Z3PEMzKHx5Yl5XY3VXZiMvdFtXeClRPmRoYDMqSiwuVGVBeUpXIn4vUjlEVFZuX0J9VDdWNn1ybDU/ez92O3Y9TEAzXkQjRlRjU3RKOnUycX50WlFYKilXI0VpRTZxYTx7c2VXdGNvVW5QSHlMfW5deG5PUUl4Wk1wOVVt'@;
put 'ciwybCVSYmgkK0FlXlZMajFTKCs3Yiw/MUlPcDY2SFUzYCZyS2N3OHE1S14zVnJ4KFpZOClHOkk2OyY+XkRUeT92XUB6XTlFS0xvJUxxX3xSWENGcGF9dzJ9RHhPNDxJLjJgZHhlUmBIc3IvYHRXZyQrPUA3ayNkSSYkUUdLWFdXOm8jNGtRaSZyXnRiSFV+KUhWfHVnVCwzQHEzXTRZeDh6LkBd'@;
put 'MVBCJkNKQz5+QTZQb1RXcXhvTjdQI0ZNPT5aS0BjdEdbZD1Db04sV1hqJSs0RmRQeCNyPUlLLH4xTzoqTFR+KV0xRmp7aV1xX2NSQHUvPX5+SklVN2JqdHI/KV1+cXYsO2lqeldveiM2Rm1lQyVyP3xocWN8W1FgdH18KjFGbFJkU2NwM31CKHVsYnN7ejtydElGJEdjbzV7JTtoMmIlOmNnfjF+'@;
put 'QFY6UWw0Z1gzbkMkTEpoMUokKzoreC91WSpLOmZ3fmNFZm05VVg7fXQ9SHM0MXxXZCRgSk0idFhqUnkqNDxCU1JqYjgsQiM1RDxOMExuUks3aHphdm5kPz9FTWFKWk5gOzlGUzkoTy5gWVBeZls9TV5OR2JFTD1bKGtFaC5hJHswNGhNfC9gOF9GNVhuUTRZOFdDYHp7Tj9eIkYsMk1NXmVqTX1U'@;
put 'Ui9gWTx3VUV7Iz5+eHV4c2RFNl17X3dwOU5vb3t4XUosMSxyc2ZnaE4yQ1ZyLiI1UT5UX341fWN3NVM5dz1QMWZaeDUvWzxUKClrYkxGZ20sKE09QWNzOGJrSVc8UHNbQWdSVTZEPldWYVlLQnVzWDR3I1ZhdXlZXjFuJGtBJDplUm9bPDI3azM2UTo9ViRxL25FdDY8UjMlellOJCR6TkA+cHdk'@;
put 'Vzs/PG5KYTJhMFNpa0EiLi4weWY/JmQ7WjlUQ1pmQjQxO19sLDcjckNhLGRsRloyLks+TXo8KjBLT09Tfmd6QzpGL2hUI3l2dC8+U0dvJHxfeHlZQHVDdU5PfEAmdytGWjYvTWlWbjRFIShnWlY2W2xkWzYyKjwlXl4rRmwya0ckdHh0cFR9TC9lKUZ0RkVpb1d1dzBML0lKUkw1VGtBSEwyI2t4'@;
put 'MEElbi9rXVU9bGozZ19jY3JjLkZjREJRMTI2cGBjZnFmVklQT1UmJDpgbVJHQCFRb2dGa3VLVFM/ZV86OEwkJF47fmksXVBLVl56L3lOQ0o8WWh0a09ASVtgUTdTLEFYPjI8ZU9VWHVbfFNlIjZmcnBVIndfQDgmYTExdyteRyIqRWxoPmI4Nk1rJTxIYWBUTzp3Z051JkR+MT4pVFksdlpPOCh+'@;
put 'QnEmdC83WTx3LHx2M28mSn1ZTDpTZTo5OnczfFk3bk9LeTV2UzI5OCZuOkhLeylpViNrWW12bSQ9LEVTRlRCXWdMKX0rRFkobDBTeWlYUnZMYiloQCs3Y0hqNjlyNl5OUDEoPkx4Y0UuWHZ3YmV3LERlKnltb2R+SCo0XmVrJmZpSmZNUEVQT1I3Rm8zUisxcXpQP29QL19UVWJyajBISi4rU2Np'@;
put 'Z1hQMjVzYXBUKVY0YnBMZU1lbjJMV3ZuJkBpTG9DRlFWXT14b1o8NGxpT3lQNShNXiljKSRXYShsUmQmL0duPU1gOF1bUVFyNyY3Rj1VTiRVZHksdVR3K25CUy8hTCl5eDQ1P3RXcmJddkk0fmxHQDowXU1oUkRkTGJlWXcxVnpDVkdoSkxOXj57RHs7PTp7VXJFUSUpMnA2VUtWTVhuckIzYmlv'@;
put 'anFeV0ZyLHc1OlI/V0VFXXgmVVYmKF97Xkl6OVBrSi54OSFzM2BkO2JeWGV1W1N3YjhEK29WfChnPHNwe10pWHh4LD1HRyJ3O1VOZHwoLGIjRWx5I0g0dXo2dGpSXUBOeywocDwkVWxuaCQ4aXhZdmRkKSpseio7NE58Sy42TnkxKUx3MDg4MyZWVFYiZnY2KUxFTiZMeVVUXnN8W1NFYVs1XzhM'@;
put 'aVs4TT9iYGw8dyxIcyl8cz8seipmJENBKSNsKkxLWk1wJmNjMXlAcnpFVT5BKm0oV2omNC5ZWGs6bSsrZkRKR2hrMnNnTCkhRkZ5STx6eVgqeX1YU3puX0VycltacHx5fUZJPzRSTyhjJjRCeUAlaEFmMFVQe3tiTER9Lj9udjwjJEEkRFNCUCxmQjl4bSIpJHEhNSssUWl9VEBqak4zYGxwTEc2'@;
put 'U3JxQ3VUWCZxMWFFPHFdVFNYM0BBbmJILztXVSN0NWt2WjszNG5SO0IleGF4RTMwfVtWT0J6IXAodXF2bjRLWGZfVUZ2NixeaSF7YjEuXk5rbEVzOGo2QkJ4dDs0fDJLQSE3Tzo5ZGkpRzI8M0dYWVFoZS9HejhxUjQ1fHA5UChafWYkVShJcml5OV01Q31IIWRCKC9vcXZ+SmltW2R1Iio9Zl1A'@;
put 'ODIlPXBhcS5RZ2Bnaj1hJS9WKHY9Qz91KCFnWl5+fEYlX21KXyt7eW8pR2U5ZHpscEx2diRiRmxkdD1db25wfX4zT01fNHJWcHZieiNnTWcvZ21SLD8rNnosUC9EcldQPE1rQyxPN0ErK3Z7Yz82MyM1bHxpIkQ5R3tqNHtIei5UPVVtenF2IWhKTCwiXSp1LFVSZXgzbkI6RWVdOHhiaUolcHJj'@;
put 'RkhYazpKPDd2Szc6OWt4ajBvMXw0SHMoZ11ZdmhbXkNmN08vMkpsbWFDbWkmZH53Q25MYU9de2pkRnNPKj9ybE98VX1ONmhFb1ZHR2N6Y15rb0ZWaC81YnE4a2h9JU1tYip0ZTpAVjA1KWwsaDdnbS4weGs0JEwmaHhPW0xGPHNmclZKTlMqbClPWks3PCpwW3BhX1RMS1BpYTxONihXeiFKKTNW'@;
put 'PWNzPHB3KXRKZmEyNkRzQ0dwRFZlQjNQciMjJVUzWHtecXNuenBZd2kma0c8OCJseSJxKmV2Pz1JQnMud3h+SHBDKTFdZHFneFlGVj1JNUtySGwqTCpLPkFdSVJdOVRtUFlid2Y3RyR7QHVMOzZWb2dxUzdNMyhTQHNEVXlLRFpbRmdVPTVvOVlte15zSXxXekBzO3ZiXm1TIipGNEJRZzxMOFAy'@;
put 'XSN+aylyUSV5Ozl+VGZJbEYmMU9uTnwoNiJ4PTs1cHVLUnRRN192e0crX3R1RXRtaGtNSkxgb19FbW9nfHEuKnUlJWk6ZTZdOmYqJF9JRkQkaW8hI35UaUxPImdMQHs7P0RMKiFmKytTMEZ3aUFEInQwT2Y9RlQlcXZiWjxeWndHcS9maj9IQU1LaE59dltbVWBldncpOEg6eFREPXIlOWM9PnN6'@;
put 'XnUlPTBfIzpZantIdndxSjRgZUxFdlMuOWJWJG05RTRgNjwuTGYmRF5HMzQyeml5VnNQQ2s2KFlDWnpIbUFNVztIbmVYc1NkUi4xX3JAZEBsSVMoN0Y9dHYxRX1zI3t5MCk6YXhVNXx1Tno1UUdpN1J5JHtdP2FvZ0lnMSxfK1JFQzJSOU1aPEZUMytYYzgjMD90fDoucX1PIzpYVk5tVz0pRSw+'@;
put 'fGN7azVxcnc5OFRJcTBBaDFRPlc9IzBrZU0jUHx5Mzs7fEM3MHlfPyI2M2x8MWRYRTI5eWtRYzlQSmlLVG9ub2c8ImBxdiFCW0dqbnZnLlF5OFRgPDh3ZmswOFc7KV9FdDEyMmxxalN8JS5gPlI9NG42SV9jeHFuL0l5RiJtZ3dUdGU6QzpUbGtDPjFybWted3RHXk09KFhsWVN0WDlYR21Db11D'@;
put 'cjhgQiFhNTVvTGUvfjxaOGBgO29UU3ZycF1yX3ohdlRFYEtfKyVQYiZ7OFQxNGZCaS9RaERxcz1HYHs0IThmaHJhZzpbejZ0Okg+R0pMdG1ge0RLR2JZJlBEb0dGKXFRQGgjbXArdjlrWzhTRFhtU206aFdidz0uMlJhJiEme1N2VSlmfEBMSkMuT2kyOC5kd3FgV0R1KkZ1ejEzSlRVPkNVKkw/'@;
put 'U3VjaUhVbGJwLFZ5Z3NxWzFIVlhbeF8oV3M1PmYwLk0pQXpXb2lZO204SypTfFcvKWlwMk8iY1E2RmlQMGJ5MHBDYjhWRStHcHdyWSh3NldIcHBSPjd5VGkuXVlXIkdjYzk+X3JRMTlpPWo5S2QjSFshczxpI2VAKGphWENZYUEyalImZ01WRlRwOFUvZz44U3l3MURiYG9yUE54UU42fXBMUTxW'@;
put 'O10+Xkd2MCVScjxWfWBeMkBUZSgmLGJtMUl6ZSRoUy8oczZOZG4kOU9QX307ZyJ9a1g4WCZNbDkxRWxLQ2kyVVtdNFIhQzNOMF1UbCFVaHJ4UjhrbF99LEhyLkNlPU5ZSGskdSFyRnNuVzJZN3dVMC9OeTNVdCVqYyMiYFNOL2FidUlkZyl9KEt3QyJobWciK05mZFF4JkVoZURpSW1lOHlINEVI'@;
put 'I0Y2PTw5MHNYbXsrbUsxP1FuVzJvL0BrKjA3Unw7I0dmSyh4aGZpSGtKN08+PWVdW0Q7L0psMTJXWyZGXTIhLn07JE9YN1U3dCNPMlo9T0xqc1dyS2V7PEM4aUQhITJLMiREcDtCdGt+ZW19TWVUPltgU0N8cUMmQCg1TDYvUXghJDohKzF1cU5+bDxDcGMkdStPVjpjWjlrXTZuWTduUlRONFtW'@;
put 'XUYoWyw3dylVXVBuKlVnNmpzVmIsS0A0Ym5BRklmL00jTVEpc3hWJTFnIUY2ZyR6aFA3OCJ7dWhoSlRXIllURH5JanQvYVdQRm1HZCYicXReQlUjJl9OfGNTS0coXitmcyVzRGoze1Fjaj02W2c8fVQoSTxjcSlEZml0Q142SlZaVShjK1FYMF1UdTcjRyw+d3NXY2MvUXlVTD5xP0JoJnYrIzlg'@;
put 'Rk9lSUU8SWVwTlRmS2JIOiouU21mRSR+ITU4I15qOzUpcGJsRitiZ2hDMEVqcyttZkh4WHdffTIidWVMJDsicixfbXc7IlZXTn1yUkJtdCMpPUBUdygmfkRsP3R4e1V6O0VPa3ZPUGdpemlWIlZ1XUR3eipRTnM1ejg1Y1Voek9xVjZTTDVDPztKYTVqa2tvTigsM3B5eCUmTUR5PlleemAzRHxh'@;
put 'LGxtV3VzKXw6cn1sZDplaX02WUowWnQ5YTsze0kvKiRWS0dvZDMyZjZOYiZNeTFJVzc4JEA+KE9+QltwKHEldlY/fm8xLlBSalhZOWZQa2tDaHthPT5jSTQmYzomWUAyMFVqQkxbK202OjNLWE87OHFqQUYrRCU7PG1pSzs2b3dkckJONyFDK0xVYTk3NE5WbktOUlYhRSNHTzh0WGZhS2dnTTlu'@;
put 'aiZAZ243dW8yOklGdD1NdFBsYmJVSChKJXQ4LHZPaysrWnU2VFFNUUIudUptOEV6Iy5wPygmbFRgTGVZUlRQS1NsREZNWz9LJmc3JWNnbG5ObEM7W2UxST1uS0gmbn4qQ3EifiRrUzNMXUM2InpqTk1DeyR6SS48WnZqZlUyPX1oeVRqRDZzPUoifjN6aEVqZ2ZBKXFNTDNbQEkoWTFeWjRHXWE7'@;
put 'NmE9U1JOMENVek84MSJgTFk1aXBlKTl4PCg+ZWNySi5hM15LOjdSYngpWn06a0VRZzBsVSJMdio/JUA+P2R5T0lwaltkLnA5ZnlSOUheQXV5UDhoen1YJXdLW2AjI1MpeEwpaj9pbXo1KDxEKDJORSM0JkMyJCtJejxqUGMiS0goez1ZdHQxL31JdnJfOTpTZjBUSCgvTHR7eCg8KkppK2FDVjk7'@;
put 'I3t9VUNIIXAhbFZgWXZBMW8hRTBedkRfRl4/Y318QXRVamR2VE9jYnIzSSNxTG4qIj9VR0thLjlmUlAieWk4O0J1bGVYQmY5VWchfENYTFIrXWx5NGtEWChhTUhqKj14ZDIxdXJRR2AmMi9abHAvWkZeY0tlNl5mRz9aOUZGeGtYU04/PXdKVFFfcF5IYXV6IixNT19WSTZnal9YMVQ/anApNjpv'@;
put 'WC54bzx+RDh2d25pLCEkOixEKWxvZzp1V2dGWC5fYmI/bmZfW1oyN0Q9enNMaGJXXTIhW0x3UjpyPiN+PDokfGNUZis6SFBNPE49R0J1VnRicmhbVE1OT31bImskbm0pcyFvSFlRcj4xWFNxMTVpe0VKSikqWmhTdnZKLHQ1dEdOSXckRWJIejI5WlpIWU1DaDJuRF5aU2kjfU15QS5dREkkT1Ri'@;
put 'QkwjKXtRfW8vVkdoL09tXjVWakZVK0V+T2J+T0JjdTp7fDQiIWJ0RVZUIS9KfTYiLm9edCIlSkhHJn1vPkssanluXmVJUmt0JXs2I11WWGFmNGFTOjpeQlFdKSJRQ1ErWF5IRWslKTFnc0cwOSspNXJJQCkpJCIvT2JFOjdhOHBpa2FpMkIpZnhhRWJudF1ocHFPRXE6YEVkXktfUFFqVSsifmVA'@;
put 'ZV0/eyFSQ3pRO2czZDUsTHxjP3RqJklUQyxMTiZDYENtODEpInBSOl5KOjh2czhYQihHIzRYLj1PYDw6XitFUkgvXXQvUH5OY3VjVjcpJiw+ZVdSR21+PlFKSGdneE9mMzJ0e2VBZGZibF80dXQmW0ZMW2pLYF1LfDJlN302QWpDcWIvQ1hAcGJtVmZoP2lRYGxadmYsT1UwKU9Kbi5rRWZXZmtY'@;
put 'amdLMV9WTHlqQUlzS3tWTm9JZisqKm9EfmluW0NPM3tyY05xX11ELklnN2h4KGduW1d8NVAyUmpKIjoqOGpxbkJFUSxpKSVLU0EiNiR2Rm1AUWVidGlHM0AuTldyUVBtXmNwY31GNGU0PFYseDJiMEBPayJwZ1MoJS5FKSZTa31oSTRebTxZMEJ5dlJCZnsyVTVbZFRXd0E/JSFqZUJ3dl9HPjVQ'@;
put 'K3pOW0VHWEVzVCFEfHRTMGVVZVZJNlRPRWVta1U8PTtdaCIkTkk5cCk8Ui5PQFlMYjc6KVskUXFQVy99ZWlWbE1XNVUwXUAqQEd1IWBYK3tMZjh6JWZQQ3NKenouZjcocStdSGcldUJaM25FR1NJKkNRIjJ6WUhWREhgPy92I11HOzVQNDBdentfY3BucWtUUStrZS9JRzcvODIpc3AjdF52Xjls'@;
put 'KGRUS0hVLnB0YkVeVERLZmo5bCNYTVVfKXJqKCRdYWRoZWZbTldieE0ifnpyUnh8WDN4USE4Omp4VXE4JmM6NW1oRT1DLGw9SyRIUER0P3pBZDREcSFSPk9afipYd285X0NhamNeaWBOa3hQen0mOX4lSl86STExNStNVTVPSFBaSnFbZV59akteaCJRWWB7UXBKdWx3Z0k6bWJrPEdWW0VEdEk9'@;
put 'dkpwJnAsdDglV306NyExajppbF1NMH5sa1kwIU5IaWh3XjU/VT5gSDZYWHU/V3xfK19wODVJJCVWeD0yMmFhcEpkbDB6YjIudltqJSQ0OG1walkrSnlzUnkoQlp0XSFQWEl9ME18Vmo+Tl0zLGNncm0yVk14WzIxVzNpeVFkJS4vajVjNU1VKGRHa24vXUBrdTsjcig/Mi9ULGs4YCFKWmxdIWdB'@;
put 'bD5mM01ZfFFQQyhzTSs+I1hhUntZOjorKENmMS5CZkRrdUcieHhKODxHZj5XKGQwU2VOO3tHUl4wd2FWd1F1RWk4dWA9YGh2NWFTKldKe1NxbSEydEw1aCx+PVt8aVhBL29MSXg4KXZtczpnVkdpLnc+dm1GcnB3XkxgfSNUKCF4e2RyJndYbFdpRXowMGFHR2RwQSJDMGZSXSxaRzV+e0V0ayVO'@;
put 'M3VYU2h+eEwuUF0hWH4xR2BhMVosQkRwRVhXYHYkfm17czQpM35aYmhFQG95d0x+VHdmdTlmJHNNODlCY3J6SHBtfXFvPCxDIkhVPjx0dU9lTDFTalpefjZGcF1qX0tOeUgoNkVAfX1MPn1URGt0JjBCJHxeR2NleUhXel5qT24xd2FPOCsuPW08Wjx0QX5ZUk01YXpIZVM4UUN4JEcoW09jOFBF'@;
put 'THFqb21ObXNQZDtVe35UcSFJI2JQVVg9I3hRIW17Ilc7eGw8U0FeMTtqSUpNVTtUOV1beHAiUUJ1MCZOQ2hENTM3ITt+QX58Rm1BQVRxeH1qJmF7XnE/PGllOUsjVGRAWyR7fnoiU3Mmc04oJkE4RzVoZmppaSxOKmMhdDo9RHV5KG0vfE5ManpibnksJC9kUyVMXmc6YzZMTj5tbCssfFtycE81'@;
put 'JU46KTdbYS4zNCY2fXYsfERwVHpoOnhwMV5lTyl9cUQsWmUxdWZjfVd1fTo4bW5CdXQsbjM1IWgsOUZiYXhValFVfEVBcWNHMz1TOW9SbzpvZn13Q3g1Ty88XiRhQ1VyZiVmUiFBXzdfME1wO30kfnosbH1KSnxjUm1CcjBjTDgmOUpObldqSSR2Yy5kbD0iMXs4M0tWJU1sZlJWI2VRJURuMWVW'@;
put 'fX5gTk0zVWBfKyF2Qlo/dWt1IWQ3enBWRiFXSy40U0JxNUgqQiFKZDU5ME1DPjZHNU9lMSNCfXd5IVJ4UDM/fFh2ayZUN3JaTzw7RyR5UDIucDttWC5rbklOP2ByQ0ReOXJgTy83NEFeQzhoO2RmaUB8cUFeOmlvdCpRZXo4PGdaIlBTIUIxREA7dCVkZF0mdSZ3UV1XSF5ORDB2N3tGPjA2WFVi'@;
put 'cS4vK3lxbCtid0I3ZT1VVDZeSE8pfnpqcDJoUGdeZjg5TmY0OzNCfVBzZi5ZUipMbWhASXhpb1pHdzBOVXAxRkVhNFd5a2VCMj5jNHooPT5QREVqdVs+QXREKlNDZlpeYUZwRTRkNDViN3BteTdYY24lcU9aaGkjO3Q2KCRCb1ExLCMpJCtnPExFZjxtNUpdQ11CNkljdVQiXWQ2bjIrPkl6eVY5'@;
put 'YyNlOHkvP3Q+bXUwLHpuYmhTfTUsLkBBU3p5WT4hUDFdaGNxZEgwQ2ZbPiN6LlFmIiVeRn0+WTtlUiwmWGF7dH5wVSVKNS55K3RmNXA/X10iQDozL0kvMzk4Olpeb2dnMkJ5TFN0ZmJETHtiX2lZOkFxUS8rPzVEdiQmOkVIUUwpPkdneilwamdNMHJ8bmBRV3FVcjRUdEF1S3RWc0BYOiNpc3pu'@;
put 'PTkubUF7TDs5Nj00WVFBIiZ7S1RZQjBaVGw7SUF4UV4sKUJmfC95dDt5O0M8fUAheUJSTDRsdHgoSWh5XTA7L24lWjNlN2dNLFMjRTtXSlUyWzR+S0tqWUYrUjJYZlY5WT83Xjw8b1FqKS5dZnAjXXtoJiRiJTZRRElZMWZZaUhhNXdYJS46fFBUOEhZYltHekp8ZWR4SSk9YSlbUF8oLkp5Q2d2'@;
put 'P3gqTDghOmdpPDYiImtGZmx8MlErYG5gVlgpfnZnSXdSKnF2Mz9hXlFXY0BFR0J7MGhTVFBjR205KVo6a34pcz5CUjUoc0Budl8uIUtna0hua3lYfTZZaW9JL3NNXyxneyxgekM3fSVZYV48S0shOVMzW0gxd1AoUVtsSG44bGN9ZlhCcih0eCpnZ3ZdNTxxXjp5RyE0dmhiejNwdUNfQDpzYUZI'@;
put 'SUI9dD9NY3pzMkE8eyUyZn41MV4oM1VESlRVRCNscD9TP1s2Nm96WmxDJHhrXyRLWSxOTnVqazNiKnNvOVVAIXhWd29IeCt3Q0dpcV1OfHdMfFh2YWhCKntvc31CZT1OOyVSTFEse30henVTezopOnZdOyJZMSFTU2cpa3tLUl5sWXtMdH5YY3JaKEUmTXlDY3hdYzpdTnRbV2NjUXghTExAMEgq'@;
put 'NFZJKUowdVcsWDlTX0NEREtXeCpVOiNCMEtEaHQmckd4UmhrO14uVjJUZn43RDEkbGBYPkZfL1FsW3t3biIpUDcmXkVdbTwuMFMvM35WaDVWNDhCPk0yal40enI/SGt5TixYNCEuSiIjTE9MUixbPm03RWBKKCQ1KSYjIWhla1tFOT9QIz9qUFNsXlU6T25UOGxSYjh+QDNFQ11eanxGaS42XW5K'@;
put 'YUlJOTNiTk50PDNeVUZVZF9ifnVSMXhSPiV4RW1oYV9KVVVxM3NWRV1hcmB7eUw5TmAuJU5pJW1iMWU5WElFKWk+MW9bUHBqKm9+dXF+JEBNdyFJLFVMUHR5LlE+MktSaHRkZ09zfjFEX1R0M1MvdjAjJTkvLyxoWWFNaVhjdVl5IiQ4I2lqbmdtWDcyb0xpbGtRWTIyJk1aXzBJSWlheSxlaCJ6'@;
put 'Lm5GXVJGKnROP194bk0uWVgiOVp9OWtPLGhSbC5DME9OT3ViJShDanhzZHVzNl99UW9uezdPPGlwQ3BoM1grd290QjVgPmE3TWxDIUUmV3w3fnpncC8vXld8PCUmWChKQD5bV2pDJDp4eTUzeCY1PXEwXltQSlFuO0M+UisySClJM0AkOkFdQlFTM3Y8XjJUR1IxST1QSUhAWkAmVGIpcG1hdlgl'@;
put 'UWU1NUdiY0svIW1GKEVjZFZTR3lfeHdSUEQ3bypzSDxGaDQmaXxeWEUrUDZ3SlA9I3BaazAveVE6djp0bFBeSXNuYz4zUkVucDk3MXw/Tm99NEhnNVlJd3ZWOjUrSmhJOCthfmN1XTRBWltxYk1NVSl0PXNfaX1yMnxLfGpVP2MudUJFJD0qUUYkUkxsWTM4KExtW11yOC5pP3lxQjduZCkoeGxT'@;
put 'dVkmN01OZ2ghTXJ0fGlrQjUkV1VpMWN6ZntdbjhMbTBjXXlOUyx0ZWo+cDhQS1pfemE+I21JYTw9JTZEcHNOSD1vKCtWWnx1TVFJd1IpYUlvLmBQaWRFQ0Y2I3JYIS9eKF8qa35eflZGeGJ+Y1o5c0dsdyI+YGFeQmNpYiwqLDx1OX0vPC9CXmIsNkhUNCNGaFBeemVwW2xgSzF+KTJFfklCaVVh'@;
put 'ezI4ciVyQF44PVs7OGN2NTBUJSR6TiFRVCRsZHZXZXtQJWEuS3dJKyslUmxeRlpedmcwK3g9SXlsd0FuYyV+W2dQeXtDJTE6flc1e2t6X2krNi5GUGo8blVfLk9TZVF0cn0leWVmfnI9MXB7NW51ND0/eSIvaVldbDB5cyRMbV9aWG0hSHt3cDUjVEwxbkRzeDw/Lmk9P3pgcH1vKmF0RUw/KnEx'@;
put 'dkRgWFgvK0UpVzc5e0dVWFdTX15yay81Wj9fNSZJfCYvUmVBKHdscnhxMy9VQ1UmOlpbMVJ1NzFOImJoJGR4fFJzTSw+eCVyeWx4eHE7Jmd6SiJVdmFRM1l8O28/I2dlPE94Ni9AM3RPWntTNyo8XTEvMVZPNGhkLmE9eDFzc1QkPXlfL0UzVSlXbEc9TlNMbEpXN3dgTyt9ZyQyeV1qfXhqZ0Vr'@;
put 'dThvOmAwNFRnP24pVSohYjBoPiQzKTxYKHZgdHxuVHs8RXJFeUZjQjlwM2w0ejNSaldkN1tsa1deTCNCa1UzamVAR1FUO1ZxRmJ3O3g5K0JxcVhoW3ZmYi9uWzw0JlJBVF92KCsrL2M4MVkqUExuRkRCbElIa2ZeSSh1SW9tPyR7ISVtJj5mMGhhTUgrNVFNTVB2aGx3QWI6RjpwcyE1dChFIldg'@;
put 'Q0c1YmhfUFt+fTU/QiNFPTx0L3czNEc2REA/az1HZm1jS01gNDlYJk5rbT5GcWxCO1QsPXJHYSRYciNQV0lCXSEuZkhtWX4he31QUlNeR1RPUmg3X3leLnIlP2AjdlR7MFhvM09nejMxcz5FMF9VOXh4d3IvYSpPUVJMNnpNekskTX5SKVJlen1AOHBVMD9Tc25WYjM2LF1+UTFwfjdFVnFQOFIi'@;
put 'Rzt2ZzdlfSk7cVA7USomOkxJJlIpYzBPbntYeTtsUlclRmFRdzV2WGhpVUBoLklqZm8/UEs6ZlJkcUA0RW1wcFprVEhPV2E9YklnPE08fTo5e0pzLlhuKSYjYFZRYldPOCp0X0UubE9MLEt5ayNyV21dbGIrXk90YzM2TStsbWNiUTA9eCZqQH1bYiFNIWBATyYpaCEkajlrWD9dKHheOnlCRWdq'@;
put 'bEYrVV9DfVMoJFA2SVIwT0hqYnBJS3NJRWksYFNtLmhgXlE2NmRMUFZSW0ZXW1k0WTp2a0JNNX5YJCl7O3xkfGZtNXc7dmw4QXU0fERwOTR2OjxQRjM6VSlAZ0xGKS5xXzkmKldwKH5xUXc1aCpKQEoyblAhIys6Qm1PKWc3V2Z0ZnMsZWY0P3NhaG91ViQ2a3xNeFErWVZpSkJLJltpVn1beHhu'@;
put 'eTRbOU81flhBJVcxNSZULE1RYi9VNmNfJlB+I3dgQlhbcD5gXjBfVDZEMSx0S1l3YkVba3RDc29gVVR4Q01BSjtGdVVaSTA1ZWQ9bGQ1fWQkW0Y/OF82JTV+RUB3S0klRkE4Rj1Hc2h0Zi5meWdIfig0cTNRXT4kMmxNNU4xRFl6eEllMSw4ODwjbyVRLk5qYzJhb2pWcGVQY0guejRJRWxCV2VY'@;
put 'QG5MNVtNWmJxJUkuYHoxPHgjQEUwI3JhZXlfNm1kfjJId1NycH1KJkZAa1YraGtxTD9aZlNMPSV7NVQxR21nb0poYURHPWg/O1IjeipWWjQ3WnRhT2I8Q0sjVkksUXk3MV1EJkcxPVJKU0BuUj19bGhoTTIwIV8jJHdURmdGWmMlJi4kfUdKezhlUkRPJXpYQC5AXnZLMDY2ZG8/ZCxGTn01YEYk'@;
put 'Zk8zaTV3LmEkPXRgY0okYHxtXjxZSSJYNEA5P3l1WSVqeXx0RnhReHQreXtNO2w3PyhZWVFoaW1eNm86R1hodytOaypPY1NJPyhralgydVJQIlVXOmNwPzdQMDl2OkI2UGMuS0lHSFpfPVNSeXpTRywmM3RAOWJlImN1b1QqXSlTZDVQMlc4YF1zSippLF00bE5FOVUlWyVxZWNKLmoiPF1pXVJi'@;
put 'IVtCcSxOZDxFIkh6PCwmPTBXaztOKipIMTo6fEUoWFRvNCp8W2tiNGlvUTpaS0tKZEl1KHdyOihhdUI8RkxWVUc+e3U6VEt7cjEqWF45RikrIXhGR09ve1E7TV1DYl0uK1U/SVFNRFJpeiNqbj9oZSsxUyU2LyxVbDZYZDc9fCJbTzpyOSZHIUU0Qj1zIjRBMHdQRWY6JHdGZjxLJlF4SGNRTms6'@;
put 'SSpPV2xhcUhyZ1RPRix7KXY/VlZGOkRwOys3NjJZKzdBT2wqSkcyfGdfcTsuYWQhdFlbX2FEd1dCMnReSzhoQHhVb1t3RHQ+OFpzUihtXkohOnJzPnB3dXZ9ZSFKP2R+JF9KRiVvRnR8JE1RYDQyVjBFaFRIPSZWVSZVK1pWR3hQWVNxcDRLVkBLcnNtcUNkLz1fJCNoKWxZWVlWdUxHcztacEBA'@;
put 'ZnspSkgqSEJqRWpIRkwmOjV4P31lSTZlezhOakVjdGJ1XUJvNUN1ITJRSSYxNShXXX4/Jm02SiFCIj5TSjVZeV1+VUUqRlt4N31tIy8sdU11ZGZkSWhTRkMjbGpDQUJxS2c+M34+MXBTXnRHQ1lDa3JNRFR5cV50ImpnaE5HQzJFZVEwIyZ6RGdFPHd1dDpCTFZeUF0lTjkqU1huKHBVdTVGP0w2'@;
put 'M202e3BSTS9ybmZtcE92RE9FLmtIO355MD1dPVZaMS9tVEBTQHR4SGFfXyRPPStwNCFONWl0STYxd3hpJXZbciJBPEs5c3V6InM+RVJpUSJnWylAck9EPnpiI0A3fS8ybWVqb3g2eDZ2KyYsOHNXTmVuaTRALDteJCM/IUl7VjxEYSpjTmhwN300TEl0UHs/JWdsYEU2Ml18aWlmS3NCaiQiSSFs'@;
put 'R1pde25VfCI+dj0sZGApYlV2dG0rQz55Tk9AVWFIOl0lbDkkbyxDNj9nLG5LP0RAP2MuXjx7TCJROU47NCt6XkdMUHJhWElVdSJnUylvYyp8ZjpWXVtfTy9BVCUzLy5DYXs3OSwpbVNYVU9uJkl7MXpoV3F1aGI6OFVsfFZTTTRpMHpjMTtVbyE4KElUTi5wSVQ5eU10eVdVMClGdzMrO1tXPEVu'@;
put 'dWRJVld1Vi9yNUdgVXI6PjRLT0U3ZEY0fUUjUHB4JUxdUDoqQElTdSJMZmA4PGVSJlZ4VWpwOVAqSEg1XjgyK0JrZiN5QiQwbjtZQTU+czc5I09edzkzNGBSOXB2YigzP0ZdOVg9OGsyKHxKVTAianNYeHFuZElNQXBDNk1jSWpLJjVmLEhIO0ZxN3dPaFdaNzwlPTZfVnVkKzs7aWdbfnYjeV5K'@;
put 'RjpzI0g5OmAkQ3VybkZsQ3ExUCtWTVsjTVVDP1UkNVMyWmtNNCF1RSlKNC8sTEdMUi9SUEJNWjl2dUkhREg1c1gyNVcvOyRFbCNHRTtfczFDfW1VTXhMfHlmaWBKNz5IbVdmLFZWayZ7O2pATWNWPUJvPWBSKWY7K3hZKGtiOWtsNTNdWGQrOjk9TlAjSz95fVhAT1tLYmxHXyx7TF1waFt9Kl1N'@;
put 'XVpyS3A+JWlsNFM1LE15cjBgI0NePnI6O1dfYyZWMnc4fm4zdykuP2tAMlgwT1VdLjNqPUMoPk1uTzA5VDFBY3MrQzshQk5HYVBkbHgqeTZtdUhXQSN9dH58aFQ/I0wlRlYhQHUwKXdgV1Vuck98VDMvOGNtUjF3SUBSbG1NIWs6YiIyX1RzWnd2QDlKUVhhUkJoWDIwKG1BaVUwVlBJd2o6JV9p'@;
put 'cFpSKCRzN2BSMlhdKiNjTSR2RjsufWgpMk5zR3p0Qm1lWzRLaWBbdVkzW156aU03MUM5W2NTLFF7UUd0cSElNDl8WDJWInN2Zl0zWyQ4ZU9+JTxAQVJZeFFzaWpAZjVkMCxRfkdXXUloKEA7VlpRIzEhZlcvIkNaUSxGa1QzLF9JRWZGVCQ/S2RiMWohb3xVa29ucX58UEh1NkNeK3l0NmpDP1lM'@;
put 'R3Y/SUd0KyopUS9IcS9gND5eeWpfOjhgSiJjZnVQOkM9V0ZMX0plZ35KU3NYQmshbElpaEBuNVZ2LDtTcldCcTYsdXBdYDxrZ2ooL2hHd3lGc3N3aVdlQHtNMC5jYSRLJCY9L2E7YV4rdnh0bXB0ai93YiRCaX55LDFROzJgRHEpTDpHVy97VHdpRlUweGsmZEEzem5mX0A5PmcsQCFFWU4rdiZR'@;
put 'TVovS2ZAYjUicWZFZm5JL14rQ2ViaXhOOHBUQHNDWi5rbStNUDR3T0N7P0V0SFhNOmMhaSxnJFpRSThrZEhzTisxMD1ofGs6MXlpL09bNmUhRUh0L1lkTlRTVnMwZDd9UUJJUjlrYUclYFhuYmdEeWdEJVJieHdAbig3PldOUDkxfVR5c1Qwfip+TmxaUTM2citKYHA5dWpkLmllWlNlMkgzaiVK'@;
put 'P1J+UFd0Q3ltI2M3JEUldXkvI0BZK3NvR15UVShVW044bmkhIVtlZTNJVSQiMzlNeEJPZVZTNEk7ZXg7IzQifXw1PGxLOkxFZlE4K3JWNT5DOEBDVmYzLFM+Y2F8IXY3JTV2T3EzIXdjInVZc01YPkkzbHVNYSExP0hpUFk/KH1IbyVfKGE9TE1IZGQvK2ljeyldTiY/RzohQjpWKHgySj81TXNB'@;
put 'ZiUoS11+MnVHOkc+fCZyKmtQY0toRSs+eCxDPHRnN2xmc1F3OUVldm1YS0JGVjxaXjxnRUYrKnZ7Y1NkIVg4MT9xYUFXKVpbKGlzW2VnJjQ3YGpuInc1ajhmaGVpciY2M1FKQmpYKDhVJkArW2UmemRlL3I+VnZPX3pqK3xERl9vOy5hcyMqYkdGI3xzS1o1PFttQHtJckFSQz1OQ1dKNnRjKTJy'@;
put 'QW1OZHloWiROTUY0KnBOYkBQcURTd09fYjI3IzQsO15wUWZ2eWEuSVNEOm5PbisoW30jekl9Oi5IaC4pcihLLCoqJGN3UXpqTipSImE5SEA2RSNTSGs3ZyJSVUZDTXdxSWA8MkRgOXkkSGd7fS5eS3pBQio+emNTK30iNmUhd3g8PWBsX3A3clkpUjZXXSMwSi5Fd3NxfGpSX3YuYEh3Pip0NCou'@;
put 'WnVTLFE0LntdIiNjL3A/dUdVNXRndkZfYiNMX0RdYTMjY0RCRnJAPDo4IWZQRURENn1wNyJKIWY8OUI5PVl4fVt+YiUkZSw2IVZbSyo+TWZUQHR0NER5KnkwaUBdMXdXbDQjai9bLl1mdH4+WU9paCxBfWolKDgpPjZGfXdTNFovI0xTOk9tKC9mI08mXzB4YUF9XXI/JFBJdlY3JUdLdzA9O196'@;
put 'YXc7TFh+KDEvODdoUSNuci9CQ155MH1xc3lzKCImbCpYQSssailwTEBOenx2P0I3Uls2QSksOyIrKm9ye1ZATj57I0lkNGdxY2YiKFRsbi9PJWVdcEh5fUtYeEhqYz4kWTIlNEhqc3Fdckw+V2kwXlllVmA8anh9fS46WHA0NSl4c2JTN2U7QGFqY3pYczFoRUcie2B5fX0hKj9lSUp0bmJqTi8o'@;
put 'XW1NJkF9PVhRQDJRUjlDfnxXWGNJTTxPOyNLdEJDbTdmWWl+SFdPTFBMWncyeEQ1V1NYYyEsdnYseExDNW9pZE45ZFdPblQ5USQ1WzFdRWo0bzhQekB3XUxTYHdMZytrMDdoVV0mI145UXp+NS9nQDNqWlBDfilRSG4qPi9sMHpCTU1oSTQ4OnE6M19RUy4uPmVMO1ZWOExLbFtXfCxdfnJ7emlM'@;
put 'QSFMMDdCVk1kTGheblUxQVhxVEw6NmlESlciLlhhaERFeU5xWk58UXM1Ij5vVSZESzV4cjRAWVdTWFV3OTsmPH5NYzhofXBaO3l0M1N7XWY/IyErfFlMfCkwZ2wiKSRkTmsmNTE2LCNNRCs5cUR9WFJpM2t4fk82azY7ZzVicHFZQz1AKnQoPlV6PV5XeCVzYTRkSkszPFFmQC8pM09XSTN3Y1Em'@;
put 'NkwrQjx5L3Z6U2c6cWBjPDlwXz1DYFFgN1dUVE95eHlyIW1aaHlmPGBZT3x1bW0lXSVmMUVxUGhuTXRITGtZZnclKyFNNCRlfDpaM3pzPzB3SiplXkIqWm10dTltcjt0dyRFMCRFTmxQYjNFOFc3b2Nfe3pjYzdvRX5VLHE3UzlERmFic19FKWY7KHklYUZ1UGQpZT4lWClnUktlU1RjVTg5ZCp9'@;
put 'M2UvO05nVytzKEc6Ji5EXzBxPnsqVWJ6MDglJUNyIyRmKzA+InozP01bIm9OY3ZWL0ZCMTdQcXZTPm1sfHxKWHFWK1BzT1lfKSUwVjNNVSlLVFt5WUdyQ1FpbWxjKDA3UDFkbyMsIjhLYG9vRkxMRDxMWn13V3xsOTQ1eDxjXWovTSRJe2BIfVR2NmMkbHdgYWtlW2xHaExuX1UoZ1dnJDJLSjtS'@;
put 'NX5XNn5jYyIhT1NaaFV0T1F2Z2g2bH1RKzI4JD9BKllPZT0oSVVaUWAqWzF+OEU2UnN3b1gvZDdMfDcjOmZHcHM/U1RkZnZQNlNAdDRgXzExW3RETUlHVGVSdGclYFEwVlUxfHtGdlRVcnx2eTxOTkFePiNIPXIjVTguXylLbnspbT9AdzYjM2VuSl5nSmB1UFtzYFd5SzFAUklBWT5TXiMmViZ6'@;
put 'fWlJPmdgP1pgZVh6SV80czEpZ3RNSjwrZGBiazRZUms+LGF9bW5VfF16W09mYSNRUXxvfi46WXV0aD55cHsiW2YkPkp0UHlsd2NGK1p8eDEmKX16YWRXKVFjXSlJIm0zKytFS3drYkZmPGNvUSZ4XXNHfWtWT2R2JFRLODZUVSZxam1TSVNOZ0IiJFIyNCtjN1tfWSo5X0YoXV80XXo/SSN4WTcs'@;
put 'cDBjP0U+eFYyWVNLU3t4TWBCaXJAYil7K287Qn5hejI/a0hkSCJdVikrXz00NXdWclQmU2A+eFdTXzY4cUpgNHI+dkc0MnBCN2F3bEw2K1BpUXF7eCkqeXFkNixjUm13bVNQbTokPG0vfT53LztOZzhpaVo+bi9ZTyQqekRMVHR5YU1JdlosZW10X2pCUS9uV2dEbTEraGdQN3I2azBYX3FbNTFf'@;
put 'MC9jSDEhNl4mUDxuIWhrRC5tQmJ3dC9pfTlNfiFLbVNpLzd8MytEI3E2Qj4qe2Uic3VwQ2EoTV10K3kzbyZCUkw8eUozdmtSe2J1YmE3YmFIbFtqW3glMW15Wn5xdkBDNHp1I0ZeUWtwcUFxMCVWMHU0QzpCLGd3dFJadDB6fF9hck1paUMzWEBbfTs1azFCVDdHfHpALys9M2tYcnlxZDghMyRR'@;
put 'SSk8eT8uaDcsIWN5TFZmNjUuQDdwNXNfZS8jczheMVRWZHojcDIibTVMX1FIdypeYFAwJlRdUjoxZikvYCNwcS9beVMhNT8ud2h0Y1VBPHNsVFJiVG1pSkhtIzBzcGcuLzdFbE4pLyExfWdwJGUuTUI+bTRXNlozOHw+XylwK0ZfMSFociE3cj81P1V6JCp2cThPJjg+Tmk8Xn5mbXFtTE9vbXsj'@;
put 'aylJZl99P3JzRzNpcVtmJlo+ZkR6KnBqYnZVSFtEe0JdPVdXIU9aLllYcCg3QlZ4cU5HQ0A+fmsoXVZ9JGd8KW13aD9fc155Iz87MXptSH1FVWRgbmhaL3JdTkhYKCw/RDVCVS8lSjdPRlpZNFJobyw+JjRPcj9+WkxnQmgzJlMzTFRMLlJlSUQ/ZSMyJih6IV0+ZEE6dzNmfE1oPHUvfnl3TkZV'@;
put 'Z31PO0dJMlFKYC5IcSQzbU9Qdm91XyNKRFEke0x+JiVZfTFZY3t6KW5NYzdqamRqK3gyYT9QU3dRdHVfOipqaCUwenw9dVYlfHxgSlJBey4pNGFEYFIhdyFSIXgybEtdUHw+JXs3N1JfUCtWQ0FuZGAjSy5LMlohUUBKfF9EPFh9PjZCMy55e0Y4NjxbNnVaQn5ub0BAUz5MNnkjMm5MKUU0SXld'@;
put 'VDtUJSRXR2JlSiZkY1g3X29Bfn5Xbjpac1U2dTQ5cXRgUyJJXiEoYTlXYzgrVSwwZGZEXSs+OlhERG5Oaj88V0wwTUlsWi9Vd2NJV3QzQ1tffFk6e2t6K2YwSChnUndxRTZ+ay5JckhzZ3NDSndJfExhPmd1e2gyfERbKzpHfnwqZD5BVSNXbz4lPl5TQGNDUzY4cncoOmJ7K1N8flVGSE9JI0ci'@;
put 'XzY+RkB2SywjMj1hRG5Ua1UvSGZwTFhzblNnUlJVPkZJT2lbfmhaPy4uM0w8TGsjaV49LnxSdl0paWFXd0IiUUd8SGVdfDhbNV5IXnpdeU5SMWdKeCQkUDo+bmwmYHcrY0Q+JlArMUBCM3ZmWk4pXlFseGwqUnc1Z11fJHNlMW9kTyNPQ1hqX3ooS1Z2MkBsPHxBY31yV1NmaiMmSltUNWE5VFs8'@;
put 'Qng+Tm8rb21UU2ArWkJZMkEja2MzLktPY14kYmU6VXw7fS5MR3d4W0owJTleXSIqekNKbE5mOGhXZCh8NywkZm5ubkJuWT9tdDE2X1Q6K3VgLy9XckVLeVNBWXQmdClrbHEyJWBENnVlZWZxVGNYVndCUF4rSyx1YVNJfClXU24mIkRQUEF5PWxOL2gzPmRTSTc1V05wQmZOPUIuZm9Kb0ZrN1oy'@;
put 'WS9yISROTF4pP1hvU2QpUF1eZDEwdyNjJGx0OkJiakB5biUoc1k4SSN0RzRoSW0lQHljOy9kc2I1JCoqKUxdWiZMRyNUbyIvLDZrQD4hMXlGelF6Jnl2IWJtQCY6U1hfMCE+K0lKazo8bWplNitKKCoueUAuRlQ3NWEzTix8aH1GRjRzTmQuc013VkJFXzdbMHNHMnAwT151MEdAUjJQUDxuczss'@;
put 'IXl2MCNNQXFNPDRxLnlyVTdYQEZhVGV1Ri9sIWtyQnlZK2N0VWIjQ1ImPltrImduOVs/KmkkPkFXdEJedTY4SD91W2woPGZxRDI9XU5TamJzLF1XZUYuY3xFMG9wYXNZOXpXZT9NYFUiVGRManU5Y0dCRWFObG5qdHVzMFVNPFBLVzdIXjM3Lmg3UV17MGRwIThWeSpmbiVJPWFqcXJPNnohfVMo'@;
put 'NkBVU1d7c2xtfjFtNEZ4IzQkVmtmIVBvYVI3d2ckUWw7NHA8JFkldC5tVU5ANCFQemBoMl94RmZTYSU2MjMhbm1zKX4wIl1bSTpPZFRUL3JDbyErLHgsNUx0Nz8jRzNBeHd3ZFRrP1hIfkleamR9VD98RXhbMEkyOjN1WFVsQzBmJVFyNDklfHo8NSNxRHt6ajFoRyJlRWxxOmRddD9pRmA2O1ZE'@;
put 'InFmU0BmSzN2UXR0NzdtYFtDbmooLlc3KGc6JkdHbTZuIkQ5JFYsRU5QWjIoWVhhOSRXTz1bRDt2IiFzbGl6YVkjSTRPKXtpKlQ7IlQ0QDYwfTxBTXFgIyxhZV85dWxnKylMPFtoaTB4cTxDKDNWYTF6X35EeHdHLE9ifVc/dFRYJCFIUyFddUVtIiNNRSluWSo7KVMvNDg/X0IyVl1dLHtydGxv'@;
put 'LmpgOzM/WU5aT1VGbVMjdGVpIUNVS3lbWWcsPU9ucmhyRiV4VTxiZFFSaDtdd3IldkhfaVdRJTtUKW9ic3RLX2JTd0NPYTpvc3FwMDxWMW5ucShlVGA4MFpGRF9+LDRDWGovNHwzOyJzOytBXlY7JFs/Xmt0OEE2bUZyISRwfXo9Kz8pOTZiX2B+WyZXYXFKaH5heVc7fkIoYG5rIXwiL1c7P1tI'@;
put 'TSxqSX07aTpHSFJvMzpZdDJNRGR1WklMISUxdFYyQ0pNSVJRNXshfXtrNHFqJV5bVz1FIjtvJn18Lmo8bHBsbm8yUmVKYHxxbF81R1VOcTs2bDhEe1Q5USFrW2ViV2srZ0ByU0gqVSU1MDxwPn01bjltZGhuaX5JLDxZXytWYzY4VlNxRmlHPW9MbC4hOHdPOTt4UEB0JnBTUUVgV0tOYShIRjll'@;
put 'VGYrUzJfY0wvTVU7ImB5Z1lFOklHUGNMeUVxNkNwdExmVjYiaSR9dCZLT2t9ZXA1V1JOeSh8bTh+eG1wIT1CfUV7ZDhiR3o7IjdtfHpzTjlNNkFQX0g1UUhFKF5ifS9mZCovOS9bVilnRk13RGQxK3pdVExrI3g0eHkzJiNvbyYiZntGUVhCRnNpc249R05nKF05VjlnZlZaQnxkekFzdEJDTHcv'@;
put 'N3R+ZEBGXXBFP0ldPD9scjhiZ3d5aitvVy9dNTNEKSxsblJKfDQlfkpCIXIqejxvNixbOGlFSChONiorbGdqQmhIdDlnOWdlKlRGfD1qUjt1WW4vfHw6anpAdH1ZMWJANDImY1dpWTAvK290MFhmbENsQG0vczlNbi9bd3RweyowdSQ3Qn1BX3hbNG9rUyQmMTIwMiN4bDtVKjIoeUwzLnVTYDZm'@;
put 'dUJCLHpPNy96MG88aFE6PnRlSzUxNywqSDJbJWRdIjs4ZDw8cGUhfGgpSTBHcVpjM2NYb2xqJHBsTzM7cTNUKnFjOXZQS04yfHp8K1k6UnE7OCFRRFNJdHowfCh+a25KfEBJOm5xMjpFNkFwI1lEJlJmRm5IR11WTSpMUCl5dz9YYW46QEdbdGgiZkUoX2MsJXJMVl1Oc2FEK312c1VQOCN0X3xo'@;
put 'MyZDJmZLXWM9X3dsRCE2VSwvQldvMCxqfnFCbXciazY0ZEYsfHd7QXJ5flE3K1kscVtWMW5STkErZjxjXXpubFRmUVZFMGQ6YW97ank+LHFsJSphQ3JDbjQkcVYjYW4pZ3IjO2xNUCx9JW8kaW5BV29Vcn1iQHFeeXN2STJZdV9bRUFbL1QuVkpLWT1aR1lLOFt6elR9IVRWIk5COG9Ab29ZW2Ru'@;
put 'XnBgfDVtRipbdW5vbyRLI111dU9GN3QoU0ZoO2JqJkVjW1tNQ1t+JmdEJXxFay5XXnlfbTBAOmB6PSM8Zkh8Jiw3O29RYiNuPlghU01bIlV9Um4oNkJVa1JxL1t3VWBbT0NTZXQ5Ki91YSRGZm0sanxGYmlOXipfUnB2Sj16YmdhSmxDZ1F1TD9VZ2l8UWc3fUZ9TjZwISJFQW00LjFkaz9zajxG'@;
put 'PD9jWUc2ZlVoVUREZSpWVkRVJnJ5fT5XK2t8PnAvIXwsdSx0cTFQOGFMOl04e01qe29SX3RePlBzPGBZdF5mdSxpc3tzQF5bbVVrTXN8SkpWcSZaPXV9QEc3NEIvTjAjXUZhJj4+cF07bmdTST1uZyE/UUtRLHpQYCZZWyNYZkNyaTkuczNAOE5yfjdpIS92eXQhLGIxT3JiKj1RW00lWCQ1QlFH'@;
put 'P3VhRylpQH1eazwzISkrODFweFtDU0xlfmB3Q1F1RX5EXVRbeylWKH0jVGVCTVVvajpSW0MxRCZaRCJPRixFaF86bUVJYVJvWV9edjl4WFpVcSlyanw6TWcsI3kkOUciPnpbdi48MUFPRVRmdDxgb1ZvZWVkKzBmQjZXN2d8T1dzMTE/M3NPTkBCemlVNDZXOWlxQnB0IjpOaGVaPVIoWEMwZXJ8'@;
put 'YVU8LGg5fTx+VW5YYz5sfFcoIVheQEVNVFo4R2dlPWxOQjsiUHR0SGVmNDVlYG9geDs2IlszUj5kYU1HckhMTn1hNlM8cl9lRmxqWyZvYVE8d2VOJi9zTD9scWFpTzRrJFhWUX4sfWwpYyo4R0MjV1BrVkpwdCFCdE5ANHx8VHpVPyFqdUl0OHFDfFovJC5ZWmNndDo/aGkoal1BZD9XL1NbaUUw'@;
put 'UyQzT0UxcjdpN0BwOl9HcTp1K1YjWlRONDYoI1JTfjNlL2F4a2pye2JIVFh4TjE4fWFZam5sc2c1UXwmMUV8JSFQNVg6fEg/cypFWHpXRyhLekR2Y21MaT92ViUwQGAwRGgxOlIuS2w0MWRQNSEodTthMldKQSladFc4I3ZUazlGU2dKTWtRQjdMZyFbVHQ2SSNOPEo1JnFzLH1zO19LSEJIcCtr'@;
put 'eURHV0J2fCphdUQmel8zL2laUyU9dEtaRkM4a0g9eEJKKXl1VW5JLigkX0tzVzAiQGltTkp8OGFULjN9PWRIJkcxZEN2JWx8d00+I2gzTWxwcHNgSz9BUEs3ZHZjaDd5TiVjSzFlfnU1MShuPE9BV3Nsa241ZHhWVEUuMDNJWltIIl8wOjJiLzIySlQpQVRQSFBpdCFoNFg+PCElTUhFKD9rQGtx'@;
put 'aFdGKSRMWDVYLighQn47Zkx+ZUtteUYsJkV6bzEkZ0BgQjMudCRPNyJpTk5odlQ7MWZZbTIsIkBZUi5aTD1paG5KcUBKNllAWXZEPyI9fixHZWM8Tkt6RT5xN3YsW2gjUktffkxjRnZ4Wj1ZR11vYChYQmAqZm0zKzNaKVlYeU0kOD8/WGBGWHR5OnlAViZob1JvTnokekh4OCM9UVhIIiZbK14x'@;
put 'PlBsOSV9Y0ZweFdCWzUlXXJbJlJ2SExdekI9IzkiOGdSbCtiOk91KWx4S1RddW88MFhdS3FkIl1hIzFXUGJWKz4/QGF9JlEzIVMxUjVFOGh+Y09VSUppUmwqXiZWOVt3Nl13cUIrK3VuRlV4RFtLcGtLNEg+JTR9REE6K08lKDNENVByamhzVGVET3FAViN8bWdjWWtjVXxCaXhmYmFLKy9pYlo4'@;
put 'WXFHaFpRXT9ENnwuM21CW0xgRTphaV1iOkU6di9APWBsSTAhPVQmOX5COE9aVkw+Nlcjdy92PlFJTjNfZTtPJTg6UmJuJDlXJXk6YHg1KEMyYGBPI1NbQkVgeHkmIU1vP0tWNXlbV11vPWswJCs/OXQkeHBKNDRlZmpFRjo9STIkUDBsP3Fxd2ZlRDkqMnlYaz0vKFFkPVE/cnxfRiwkZ3w9fTNQ'@;
put 'Y31yLlRFPW55NiUoVXNeUTcsMGFSTm53RCZKSThafGtXWzl+XlJ3M34/Yj9lJFFDSl9Lci4rZF1kdXV8OUgjdDorSXVId141Ll11RGZBWT88K3IlQlpQe15APWUzUF9tZ19kbG1eKWtla1lSUmZJQV9uRzdNSjV6K089NjpyW0hMakVzXj59OmRbViMvV2J9NHo0SyY0QWlYMT1Ia1Q9al5DVCwy'@;
put 'PGokaz5DMk0wWVc9I1UrY1MmW3w3WWh7QVdYVXlCQlVbZSoxeWtFMmhMT0UzTnY1O0JdIkFmbjQpOnw9KkBYTlQuTUByWzpYIkJDc0o6YU54cEp6c35lNikuWzY1JiQ5biklUHVZOWozSjJGbVhDY050TUVBe1F8RDhaKnhSPHlickVyITdWR0c5JGJWUzAwKmhhcEgyYjR8SEltc35qcEgiK3BP'@;
put 'NXoxSXJMX09zclhdMCVMbTVHO2cvUnZ7VTNueTpjbzN9QH5AWyVnOlU8Jm9mcVEyV2hhR1orZX03U1lzYH59RiZhIz1CSSNMVCFjVFhfPmovPnJxTClKRFBTfUlLV1k6fX1hRS5Odmo3KGYlOVpZYVpsRXE9biNrISkjWnFMNE1lQ057a0NjVSYsRHJqbkp6dUI7Y2YkLGhxZjxXP0MwS3pfRGts'@;
put 'fm8/bjpDPCFfI1BqQ0dlKlNMcU59cyFEKEU8OlliNWFvYTojeTYmbXs5U3c7MUVoVCk9dU1Ed2dufDQlSjQvOylBdXUhSkB7QzN5OFleZ0QxfHRUeEdUZVB0ZHg/NUNVOUh6YikjW1JoPXBGflsxZV4yTjZ6OnM8N0NjYjtiKGhGZnxedkB8bWs/RlpKVjZFe0BvX3RuNiZ3W3g8ZysrWWg9aE1T'@;
put 'OEtvR243ciUzXnslPEd4bD0hYn1UbDJJdUBRX11lMkguTWtwanMoT3oiTlJOLkljSzBZPkV1QipDMD14d3BvP1Y7ZCtoIz80WXVeOz41LHBJN0hAeU4qN3c6YEZEe29aMWcoZD1xKXp8ZkJnM0JBUG15TnYicjgsPn5mbD5EcThOai97LF9HPz8uMFtGWmlaTnl3azI2P05qWVQ3fip3dDxDcHBv'@;
put 'bjV4X0A4Zk5jPXY3KjVZRU5DU3EvJEo1KU5ZLChoRzkxVyJ4OnFWIV8hYzZYOE9HMGdkJEdWNENZVWhZd2ppYikwW1dkaClZRUgkQyglWF5nW1koMUJIZ0ZmS1dsSWwqYXxOIXV3YCRIM3pufVMuY3VnIjlvTVFwOnFtbVRyRml1ayZ2UyUmY15CTTgjbSZxb1ZHUFFzdCRScihrR3c/NWojIzJs'@;
put 'Y3F5SHRSN316fV85NlJNfjhCaSs2WTshflFnMFV7LnpGQDlQdl9IRTsmTGhFMTN2XVN4NHllbiMmeWFeM0BUP3BUXUhrNlJgW2sjOHxwSmVYY1IqeTZxN0dKQnVaQiR+R21bbFl8YHdEMmY+MGQ4PXJQcEJjcFk2V3IxWHV7WChvNlQ9YkRWbVNFVGVlYTt6InhmZFdNfm46JnUjNDpgeW5jdzxN'@;
put 'Y3ElRkNTKkQzeyQkb2NqIyMkRkBPQyE1ODdGQmNwNilmLF4oQDR7b182MiVTKGJRe3pNPU8zbzU8X2QuRTs2Xys7aUxkR2dQVypGe11QbEFlbElMKHg2M08lNVIsQHJ9YnR5UE88UGc6IkkjcyZEYTxXVjg+bFMxK2s8WTc/Lz1zJThyIntvVHFgeEB9c3tpdDlKY2l6TzNTKWNJYGtaXj5BWjRL'@;
put 'JGlnbCpnLGooJF8kNFo8U1s/X1I2ZG5ESFQ7QypaaEpsKHNTLiNXWTM5cUN2Pz1XKCxhKjs0LnJodk8lVXg1UFFEQHd1NW09UD9gQVoqK0MzUWljRj5UdFlIdHhFRTpYV05+I19dXntoUVNAVSUsXj8veGVkbkUvfFJLe21eeHJmaSIrWTUvV157UikhOGMsJFtaOXI3LmlkQTFxXXxublt2NilH'@;
put 'c3IrNjFKSjlyLiFzfSpiR2dwTnhCd3tRMTtgPSUmIzE3IkU1Mm53TTNMXixZSX1bayY7Tml9b1F3JiFwRUk/fFhIKmdfdzh0TzoyczQjJDw6VHswUlZ6MDFdKUlvSHFfNl9+bmBjS29vLztFUFZMKmBdbXNQLHdWMk9pND1tYX5aRSNAezN3ZFgxOT4sL1hUZHlmZzhbTHFWYGs3JUtMeCpONG5e'@;
put 'amgjLFFoOmFOZEshQFErQ047Li5CInhpOiJ6QztpMXF8YUpqdDE6UGJqaiNYIVhjJUdrUzY+QDo0ZklObiloV3UlXW8mbVtqZy8oPyJsX3cwcmw+Y2pXdDkseGExQD9ENl9ZV3ZRX19iOnMyRittS3h2ZDpiez5CJm42X2N0cXpYKDZlWjFWMSt+N2BmeG96fnBYeEJ7TEplejpJN3deWU11YiNM'@;
put 'aD1SZDViK1AqZ1UqMDM9NDg7O04mNnp1LjkuL2BGLndJeU84WmlPcFckLCwqe25aYyRDMkVdTyxFVUApTWxaNClwPk8/cG5gVjlUZER8OG9CUWlRW3BwbjQyMlFlWlM7PnFeeG9hMmQ7cGhiL2EoT055ck91W0olZiUzLHYyRSRkQkVZcSk4dUkvYT9daW1hb0pmInhacGBIWHxtcDx3Wlp6XkpU'@;
put 'Tl5HfjY2Z2dRZFJ1LDNuSjM0Mno1bzZiSCpLRHldYk9Zaz5FIjJYMmIxXkBvPW9ASy5eenxfR0FGVzN4ZWFWR0RnXVtkQDZ7RXhiWWp+VixGSUZKfENrNWB5TUl5fm86TmM5cSxBZSUpdElWMlliXUs7c2RSQyQhNCQzKlI0Mk58YUVYWSlaN3lXTTVIRiJWP2NMMl1yTS48IU03SXk5UVRFY0Bp'@;
put 'fGdbamM8bndAO0lPJD09VV1deUpIKnJ1bVJ4PHsvRGFbJE12YUp5VV5NUXF4Xmd1Jj8lQSl6NWdTXngiSFdjRHpmXSgrdG0+cFBSeSNpSzcyUzRmOlI0a3V8WXNmWnNLYEQhaXptX0VtYXdLJEdoUiM3RDspMCJZZGdwXnAqQlY9Ojh+cGo9ZzFiUEEwUl44TUNhYC4qSiQkN3dkUjdYOnA6T2A0'@;
put 'QFNbOVdqKH1yUG9hI0BQKkprZyYpW1hOaX08SXF1UkVgM3NxU0BZPEtyQlohPDkhXzdPQVlHcV1Oak8lP1hwKkVnX3koeW55b3t3QVg6RVt9YjdyPWVlOjQ4bi8hPiRgJm9GRkQoXTc0N0B6OSN4KVdNIzt3KT42d2p7RTRaN2VPbGh1Iiguc2VWQiJDY3pOZWIqZDFJfGdUR0BELnxeeXxnLkpW'@;
put 'S1k5MyR9bEZ5T2BOcmNgZk5kLGhROmRhUVM4Q29mQV8wXTNfWjZ7eW5GKixAWmJrPV1pVzZtdkl5RDtZXXBpYUFvUl82WXMoVSRqSWJFQFYhJGBoTnM9PmJVNXEsI1BJflJfYmNrfk5oU29fSChCd2lCWDYxelNjdVRkZDMzPGF8YjdrN3l3XUk2V3Vvdls0OkI1bjsxZCIvX3lkJlk2TiU+Rk1L'@;
put 'NDJgaytFVlFnJn5AT3pMUnYxbSQ8Oy4hKzFiVG1YdyhTKW5PR3dOPFNMPmwlIyEjZzg/SCZnX25VVTlSXy9PRUQ5Y0t7biUxSDNrRChZO0xxJWkhQ3pLITB9S35XXVhUTk0xRkBdflk8RTU7V0osSioqUm5ZNUE2eltefmdWOkYuTnt8dn01UHl6WF8jTEVWZytScT5FfnpBcWkoeXl2NTF5RDx1'@;
put 'c1lmQH5pdWEoIWFJeD5FRXFseGtjfGIyL084O21nb3A+PmwwbjV6N1paeUEqbjE1ViFPezpoJjh1cnxQKUdRQjw8WVJdUmJaVFskKW5jNFk1TlNyT3dTaWpJMlAyfUBEeUEkayhJPWBQR2ZebGBldTkoP2hEQFI4ODM4QWVIc0s3dmd5UXBjM0B9fDNpLzE9KW1UZU9ZY0B9e0J8Lz9rKjFLKlUv'@;
put 'XzBlfiRaQW10d2VhbW1nYTFjUSVRTWg/NG1UIX0xaSElRX40PndkeSI2bWMmRkdaZ1pRRyZhUHBBLGwjLHJOKUpVby4uWDtwbDRdZyJaOiRNV0VPaFZrZnBmKkR9bSYlczAjSHsuYH0xZl9zWGNBXlMhYl9ZKyROS1N+UUtzaSFbcEY3K1dFcUM/KyMzK0doT2BEI3RvM1BESkBNQlB0cFpiYlpo'@;
put 'KWE8ZVc9cD4zODxLKCs2NFB+WlA9MnRNVjBwYyw6N3MkUTdEZHosQWJbITpvVTQxe3khTmF2VVVRcjQ+VERwQmc3bEQ/fXxdaGEwUWluWG1tfltkP19FMmJXV2FfcSE6bCI2PiJPWWs1Vz8ie1Q9MHBdb21OSlp4X0MoYkdJOFEiWmZqTVR3UGRbfkFVUFdWVTovc2BTSXtAUk8sODU4W3pXfiM7'@;
put 'Uzw2MSNsK1Q4KXdaRT48V0ltOShEJVA2N2w1eDZQfVhJaDZDQWZiQDNoQDlrTCFqdCV3JDVUIm5ySm9uM2ReMGE7RkNrZj0obFZWL0pESTpnPC5mO3ozTnB+UEwiLiZrNF4wTHNSdSo3d0AqQi56fn51S04jKGMmOmRZbGBifFdSKlEqR1Nhcz95SCpDPitWXkAkY2l6YkI+WGNKRm9NQCgzbGBd'@;
put 'XUpIIlQ9diF8cSlxUWl4ZEIzVDI7eCpbNjdmPURDZ0d8T19IZlNbKz50XjZ1dVAmbHBZN05QSzpkaX5PdHQiVVFDW3dyeElSM3hnI0BgQyE4Z3Q4ZSQufH0yPjNaOXMkJEBrYyMzODxrRXBadmhmSjpnSCM2PH5pWXVUbzM8bz5ybGF5bytAeC9gKyxSZ1hHaWNINWs0U1IxVnZudkdCbGNXYjl5'@;
put 'JWJ4Pzo0TXY9N247XlEyJXx+ZXlIXVFRNGF7Il4jZkNkdDk7ey9vKUBbOUZEPSF3Ozg8K2s5e2hCYXtFS0Rne08kQ0YvU3FKY2tDOUFlYXA3MSZreVg2PV9eOiJGTX1hJDU6L0Zrd0RNLHNUflQzUl9FPiZ4OG9MXlh3ZU1rZUcmLm9ZS290Q3suOCwzJUt5UnluL0d8NWssN0FXezNsSTg0bkBG'@;
put 'cj9IeTdvaDxJezRGe2d2R1s4LlZSWHxsNyRxWT5PLjJVP29tNC56QTpgNiFGRTs/XnsmZGlFd1R+WlI+ayE+VXdEZ1NNZjBgYzBWMVdycT1QJCMiJVQ5e0NOOTJfUWsuRzVKR2dPS2F3fDBOOD1KQWRna1l3NzpxfkR4c1FMUlJMRTdlODlqcSYyXXUhIUtLJixpZThhO3goWGclOGQmTDhiV28r'@;
put 'KXhURjJaUEI0Tkk6ezomTWIkW1Z8InNvOU9pKCprYkpGfi55SURtOXVpcT52azwiKkcmMVE/flslX3B4VEc0QW9bbWE1TG5NRyFMdXk/enlEK2QyPG9jXyh7MEEidFJzMFpzUixmQWpsVU8oa0JhaXttLk1CV2lTL09GWmtuXUphcTd+JWx4JE06KnxMVjZPOUA6e04rQlJCMjdoTTcxajFHNk9f'@;
put 'YzdMKkx+RTB1RUlNPFhPTmg+enleeSFxJGEwK2tOQ3t0ZWxSZ3dCV2xjfiJKck5Zd28sbnErKlVCKnYvcnlXVlRHYXl1Yz5KIUMiRio2QDxmVjtzM0c3b3Y4fElYfnUoVlprY1MqclNuMikyQyQkeVNrOzEoZ0E7RmduNjhmWl90UmdAcFdheCh6RjV6LzRUV3Q7Ry98Nz9qL2lqPyRpOyNDeCF9'@;
put 'd0kkb1lufW5AbD91MiR6KiozeV5HW1oxfS42WjNmR19iTz0kWlopRWd2W25GaGZPXTZHMGdKdFYlX3VARF5icX5GP0pAQEB+c3xCdkheKCtmeitkU3d2bXhlMHdJMilRdmNJPC8zd34rNlBTUyU5Ync2PTJXdENtZ1JTNiwiJV9ibFVqZWZCOyg7K09zQEBJR1Zkc1IzLkoqc0oxQClPfSFwJTlH'@;
put 'QFE9Wywxci8mOmdjeWZkX0taSmkvVllkeGJ+fEB2NngkL117YSxrMVdEWkBrOHQvI2hNRTU9SzxqeFYoZjAzYUIrdFFJZ1taQHx6LDxDPyo3cl9FTjRLRTdOJUp8Qkt0eHA6Wnt8NS9nTTN2IzN7M3lOL0Q4RFBsOlc7V14mOkRAUEw1UkBRIkY3TVhxVVIiNjtkdTclQzp+UFZkWDVHTzU3UmhP'@;
put 'O1J4eWBRfGZCL1dmc3hILHljUj4yLkshIlR5YTVOQ3ZbPitve3kxPjBpdHA5bl5yMntoTjhQOSZqMzRvMzNWXTBfQF86Z2MzQ21kKWFNOz1HKn5QKF13UjR+ZWNMMSEmN1dbZDdtJWplVTIjRzZiYTZCS3skbnAkP11xIVh8fnchUzYpbyZQfnsvTDo1XyoxNlpiajE+dElVVGBaRk84bmJfIj1b'@;
put 'alpIX2J4YiU9OC5aQHZiRl9lTGJRXmsibj5bIStbM3wpQzl7bmQkODxLW2wqIU1FO2RlKj5McUEzdikzaEJkKFRzWG56PEM9I3IiI08pMVI2KG5LIWZRViZMQiNHRjJIX3kqK0A5a2Z6I3h+OVFXUXhkY1JCaUJeQjImWChFfjtocVFaTElgPk0lYyNxO1opV2BDKnNYTGluL3RdNCQrNjRua04k'@;
put 'RDtnfGVoTl8+VU9CblpFZmRsOVtjTV8pfXVoSFhGR2JbSGw2I0FMYCJCfTsmJTI1Nzg4ZDVHNWU1Lllqe3g+SmMqYkQ5JXhHb0YqMD1eV3hkP3d6emAvVWcpTzIuaHpFOD8+ck5tKnZKemplaiVlRX0+KlRlfDBDXSl3O0FCTyM2KkdNZCI4LmNwSCMpfmV2VCgjTHQ7VHFvdCJzYjEoVys9N0Rl'@;
put 'Y01UP207MmR1RWFQTnpkPlhQe19QPTdOUnZhKCtVLG5xcXo8WDVdbEI4I3g4SE5UQ20zQCJBWkFTbm11eD19e0cufl5Waj1AbTUzfUZOVXxOYFNya1clRVBuRFduRl8sYC5RbCY1TShEQzlObXAlLCx0MWlJTmFiaTMuOX1aIndHXV9nP1tJIjg8a2goSlFyL0x5Lm5ASn1uMWkrakUjOHYxRHkj'@;
put 'X2xUN2ZsI2kkUywvaXZ4YnIvSVY/M1R4ZF0xeElYKzVTeGpLVk5GVGlmZTRvLFtfeCpBKERLWVpHQzxxNmw7NF4kMVNZNFdjX1hkZCgsM2NbfHMwe1hKJCU8KGMpT3J1WG9iYlZ6YUhPbnhgZXs1ZXxlTVpBU0goXUBIZD81VFUkZ3p8WCx7Kn0ueFQ0OEh4cCtRXllGX3UhcDV6VHM3MjthWX1o'@;
put 'PkxVJDRad25pKDphXTZhLFg9V1lHOFVjLlBHa1FsVVJ1YH1XOm9efmRoPTZ3RTwzKnNubU0qZzVYPiY5Jkh2JUkpVSVeKD4xXlZ5YyYuSnJ1ImV1XkMxUyZrIltWTGUkQS9ZUlV6WWVaUFc5bThWWzgiTGdDN1oxPD91WEd1fWMySzhjMF4uO15Lbml+M281cWFtYFNJYUw8YlNmaC47KCJ1N2Nm'@;
put 'bDtiKllZdGp0UGFEJFhJP1taKFojPFYlIz8wSFYqWHwsLFU6c11ZInRzZnVfYXR5LCxVN3BHcjBucyUwU3JWZGd6WFpwN04ycG9AamQlamkqfWVSbnxkfTgmOExINCU1ZG9OfTNGSilJNWVTUE92bVpIR2tCVnZtdDlHaUl4QEJ3UCh9KXNWIVhtM2kxfCh7PGEqbCs/dWhlfjlxKkVpVShKZXxZ'@;
put 'L01XP10/Qy88RWNJcEtuZDBTd3VTcVRmUDEkSkRHZSg8QFIrUUByb0AmU3ImTG5QXXxVcTkpVTk2SmcrMzpodHw6Nk5YeiU9bUtqXnpVSl42cyUkdnNsX1gyfkVOTU99UE12WVhlKnR7czAoNnhhMD9VZUtyZll5JS4/QyUrck16KDlwRkp1RStzZU9scUZ5TyMzOUk4THtGRUwhQ3glenAzdnJd'@;
put 'X3hwLD8xcUcyeCRFZUk4TlV6WENEPnZDZlcvcCkwXjFjSktQa1llPW8lOGIuSktqSVN1IykqPWMoZTdnUGJxMCs6ajREMHlwRDh8ZkNkPUxXbyE/KGY/fS5eKkJ6QG0+PE1AejpWeiNYTHxieGFGaEV1PUsqYysheXl0cEQ9JGU3cnZmO0Nde2g1QDJ2M1htIkRDU3krPkB8NjQ5fnE2M0FgQ1tb'@;
put 'eGxiMlFsKEY+I1ExNU00QjZ2fWJAJT5NLzQ3fGV0YFppIig2c1pFfGp0ViE1QntxTzM+KUcsZlIqSz5XKl1SRkF9dH59WGF3W2E9Lk1YRUwre14xakU5Om10RyRvNkhmNSNdYVFZcShrYilCPSFCQnUsWk1dSnc3OCJpVm5gdjJ2PF1dd2xTbTs/Qj9BaG1dTSllTmt8UVlebj5VbWI4UEFBVVI8'@;
put 'dGl+Oy8sWyxQVD97SCY8a2RAL1srSFYsYTdGYnxdJldqJnNjeTw7KUMxX0cjQFg8VHdSI2ZGdiFCNzU7YnJ7QkpRXkZLRk5AfTJNa1NMaHU7Yk90SD9uRGleaWk8W112d2tHXzsmRmFyWikvXm1VcGEwYmtAc113P2liZU91RV1geT1vcDdZWDdFek17XzlKKCl7NF1wbyZgISljOGdkejglNSw9'@;
put 'Mzo0byVrRkVndndhOzdTUjt5UkAhNXJjTmNlfT8mNklXRXI0Uld5TFFeS0w0SnN3ZTp1R1VqaS4xfCpiYUM7SShgUGF3KGpfcm8+a0ZNNFVCQT9eTigzNFFJXThdKGYyOChNSnJNS2dWWl4oNmdOO14zMkVuNmBSRTMpMHUuL1pbaUU1QjR8fTQ1NXxlV3lvJHJDcTA5IyZoZj06TVFTRGlXcy8x'@;
put 'WylmSil0XiZ+WGxLe0phPXQyRXxdb1pkdVkpKkU8NX00RTY2K0ZlNGgrUG9Ob0pHcTUqJnU0Nzs/LCl9b3k+fGQwaWllPXEvdjN9LFYlKGZjU1lROmozdyRedEklfnpUWFhONHsufWpoKzVYY2VoPWR1JDZMOH1UPXRTIVVQaWNfaC5hfXNFNDQ2JVtvaWtUYlB7YjUqJFBHWzRRaXdqSC9BeUV4'@;
put 'SyNrT1clNVNAZEVRUVkoRHcmWk1XRiQ6NiQ0NTw8SnRQdW0mNzN8QzdoOmk1WmlVOytNO1AzQjcoOHpAK1NebC5EfSVXPltKM3lPTkUpcV4uZWZqSCFFMTp2SUBReldjKmAqYlhISXRpem16YWl7Tl40IjxSdCkqWX0ucGdSSis/ciVLKV4zSjpXKFBGUVlJaT5bcC87YDdMNHtqYXBfdE5tTktC'@;
put 'dk1Ia3hybiJ8eSoseHBBfjppa2BYOHJdfD56UDAhVERqUSV+QllLMyJpX2dre2ZufjokMUEyfCZlfn5XZEhhP2c1NU9HRSxNdW13eygwTnVZO1VUMDpsJkI7N1AmTW1Wb3V4TFFzQXUrNntkTz9gemBEP2s6a2VhfCtufSxhTHFtYyZfLHFKdmV4b2NLbHciQ10mS2Bsdj8yZDEyUmBUbTZvTnYv'@;
put 'UHxvUHA7N081X2pIOzk+YXA6NHxie2F9c3pYUShZVUJ+Mn1sYkBdYCx1PExtJFI/KlJlRj94blFhME43LmlAelgrMCwrRWpbUzRRO1V4VHVVPU1QLmJHSCRbb3tuMlhCOUBUQX1salkuI2oxfXJWe1h3L2l0Xk55Il9ScVI4K0Yqfl1bU3dCZG0qTDpqJGl9M0owXmNnIWhOU25aUDhPPWVCPCM4'@;
put 'dzRZKXovK2NkNXk6Tzc9KGNVWWFGYFNnSSVpdSwqM1VlPTgvPE9pKnVIMlN5OUxVLikudVhLeztwbXZHPnV7UVp0KDFZPV1aVmg6dyxIK15WWV9aV2N7RWlvNERLTzkpYmNEZF9aNlFVLlNIbTlXSyhFVz9VQyJELls6Uz5CS0AuYzB2UzpDSm57NXFCMWVScz86QyU5RlRpIjtLfCQufVgvSml0'@;
put 'dXNfKlU+SjpOJUA4Nkl3JnYuNllLVXZbfXVPQUdVOE4xM2xtWncudFNRWXBbYjFQdDM5YlZtKlpxOzpoaGElOX1PMkAsaHYqQjw7JHY7T1BEOil6UEl+UihEY31qUkI9PSQyWE0xaVckU0Mlfi53YnB5aHBHJl5jcnZ+emQ5N3drOiFRRjhERHFFPT5DTDMwbzZDSFQxXnleQUxfPEd5VkZwbG53'@;
put 'S2QySn1MOnl2RHhjL2d+Y3pTKy9PMz51VTpqQS48SikobHw3dFI9ZiYucCN3OFQkSmJgb0BFPTxaQTN7dHdbQ198LGBlNShDK15lY3FpQXxZQm8vfTpjTzclNUVtYTtGRUs0QyQ+V31ZJFAsXy9JVlZPZCxUXzBPaUIwZlhCd2pVdllNODs5NmElJE5MVXg8WXJeLno5Uyxpc00hMzx9ej9hVTwq'@;
put 'cGpPLmgkVUBaYUdSS2JPfjNVKFspJVRWTEMqSHV1LGFSe3EsNEVALDF7aH57Ll9sJUVZZ01kej1sYF9oZ2AuTHg/KU9dX3dCV3R8ZChvMVZFYXZNcHwwRGNacHFZfjNiRnxzWkJeaWpiMVt1Il1wTytmYihlK3tpaTpDL2dQK3YsN35DRnNjV3BJN2wrWlZwWFV2YTNgPk5gIWwhOCFOPjd9akJx'@;
put 'KH5+bSNRZStWPjEzKjNpd3U2TTtxU3hacEldRHw+Vzc3S0h4NWAjK04zZ15FQmZWOzZVXVIlMitvTExdW1ZILzJrbEdCSSMkIyRYdUdPWzQiNTp4aTA/bz5PMTosK2JYSD4ybSE5PHhpYSZ8QVFUTlBgMmYlYnV7X3lfb3EjZjRPa2pXbWFULHFZOGdCSWkiPHA/eTpoIWxxQ3xxO1dOL1I+cjZV'@;
put 'Rj1Ae0o/diwwIVp9eGBFbldaa18iOVQkKGFoXnBkWmRTPUB0Q2pufWxfJXphR2s1VGIxTWFnNylZQ0R0c2NGTk11cDZxN2JpbUJtdTled31BKGpWR2A2RCU+UTZMLnQ8REkpMCxvIUVTU2JeXzF2fXl0cUs+XUxxeW9yPHRCbyk4JnA7KlQ1eXtqbklLdV1mRzAmNHd9bnEsU05xJCVGY0NTd1k/'@;
put 'I35DVWh3Qm5ENiU/TDtqSjF9bCgiZ10uPzViS1BndjRnYkBwb0NvQiR1PGdmO3U1PV5UNVByWSEiaVUkJWE7cytyczRbQjFCRnJLWipHUiNRVyt5YjsoKU8rd11eRE14TGYjXm5lVThTcnJhOFMmVEt1Um9FSFgxeChBLCk1fVhGZSNUI2x0NGd9XW5qJkBgeStrdmJGfSZyRzhZLExMRyZ9IlRk'@;
put 'WDArQ2tgOTc6bz5VRylrbGFyJmJqXnphbEVFdT51Myo6P1pWPFdFK2EvL1l6Kk9efTFtWzJSXzh5elh0TFJ4ZXVdOkhTazk8bDc9TWJKMitfVCUucHcwbEc9RWk0cEE0Kz9KMU9ebjxuZjBONHMqUSp1NFNGZTAxbjViQSlneTA6UFNbSUp5e1kmbXssNlA7ekpXPyxxbndtVCsmfWBIQVVHTFVW'@;
put 'VW9KQ1smXWh5KSJ2dzcrOHsxVUplMkpXOTV5UiI5e11XMSM7Wn06KmlVUXIiTiJyai5SR2Q2ZnhEIS9gTFNpdExKekUqd3BqXStRMGR8WzZDS3RHSnUsckN1VjtsJlc/aDU+OlY5c3dUWDIqTHI3XiE1WGNBMUt0Kl8yQ2YxTXskSWI2MT5IPUAmbCkuJVVtaDY+PnR8KkZwdkc+cS98I3JFXilO'@;
put 'cWdLSDhzREQmP1Q2Mz05UVo6TV17ImU5UjVdbnxDXV9zbk9jPiVsLnUpSEpiQzQkaU1IVEJjWlB8VVgmWThSUHI0YV5HND5vSnl5L3A3XmVQY2l7KmlvQUp9ZUtXUzNwX3ZyQ1pTOUJdMHFmXSQucTtkeWY7XSIuTS5YYzhlLEtzbEcwKjVsaC9IfmBiI1FGUj0rYF4+Sk97QDkjYi50SzBvOFk5'@;
put 'U0xCTC4qVHVwQSgoPmJmcTx6dSNGMHVpfi9HND55U2dLVihIKn5BKjssWCh0U3sre15WMjxfUSYyS3tTXkxgWHx0VUpZbn08a3hLOkQ7VCtacj56REBeWy5ZO1k2JnZyRUQvQnA9eH1NPF5eQT59QX13RUkmKnslR2U3c3BqNis8bz5OPGo9UXNqazwjNXthPjlwOXJJZSpBVGprUjQ2UEhKKVkw'@;
put 'USIsPUxpQ0lgYmQ0LF8zbCo8cUZJcDBhdXU/TGYoSzE9bmEiRUlZa09nZWFpQWFUbUN1Q0dMQypDd00lMipbWDhbIWd8S0ZRdWF1Ul1aSEZpazVCR0Y6IUBAVWlQalpEb3QqMXh0NEBWVHsrZ34zMSswMzVAY2pXa3hjQWJGVF80cCpVbUhfWFMyPzV1OWdZdTp7Nyg3TyptRUhlWHprcT9lZk4s'@;
put 'aDt0PUhhZDtHa1JtbzI+aDBpZzkzSGM6eyRgbiModzNDLntUaDshaUdwQFcjbnwyP08hVk0pbHo0KVl0U0Yva1F7Y2whTyZZOGBCdnxtOSRoM1JFNTkwTWFsOXx+V2pzXVB5MzwuYzRnRmltSXNDfl5DPzJhPVYsbjBTZiUmWmw4aEA/VUxZUF12SWpgKUo7ajA0VXxbQmVZXkshI008bzpIPWg4'@;
put 'JEk5LiwjXiMvPGIqVDM5TF42c2tMPmBIbyJRMFU5PlkzQUM9e1g1YEchVV02fjh2RklgWVM7Yk8pazN9cE9TckV9JlFeamdFR05ZcjhaUjRWekYzUE1sKDoscTthcllyWDl3Ois3W1M0MHM0UHNAPilodkN1TXghQlY7ang0e3VydyVrKlZ6RVNDWURGbFFVJlBiRis6KiFxMiQxfDldc1clLD9T'@;
put 'di5+XytfOyxHWn4wZ2JJME1ZRnUxQTpWL1pxK3MsIztXX0RFaz5xeH1HIjJUKTtjMGR7fTlUfDNpaUJ5e2tLVHp0WCQmez9fInoldFRZK0R7byYjYmU4VVhSMGh+WlVaNlYpdXx5c2MzS2wwcXQ/K0lSZzhoYG5bKi8/O1UwfFhqOH10Rm17OSIkfDZNXiRZWDUkKyg1NythZlY5QWNaYy9xIWFJ'@;
put 'OVlASjUvJV1WVmx7PCFlVXdVZjwvOGxgRi8wJi96JEk4PiN3bnd+K1sjVHA2IldfST5mT2dFR3RSMTokNFtCSWJhOm17W3Z3KVMofWguNUM9dGU0WGRiWl0+TE5bWC5ebFtZJVZLKjM6dkMhNXtZNilJNyZ2RTVzbSpAKH5IODRCWEkhKlF+X21ZRH47SSpYZGc0ZGJGIis8YFovSTQlLyxnbnJ9'@;
put 'SGgqb31TPGM9Rn0+OUFiTnhudWtPSHd1Ly9WTkVMXiJuaT10MENheU5kWSV5KHcjKG41b19jdENhYjkyQnwwMi9qUDJ9XlRuQGprdWFVJG1eUGlbPTVlOCF7ME9tUSElK1Z5NG8heEFxP3ZDaUxzISFRcDhSZktZR1Rhem5gO2NCbV5sU25aeHhpcktrLiQ8TGlSZ0xRbTp0RGo0aiVkdW0+Qjg2'@;
put 'KjQvKD1xeE9MM2AoKUp1W114aG5PdDFNcXpgQ2JkRmo+QG47e0w4PUByIlJSVCJHVDdGPzJZMlBEJUwmeWxKQixZc2skZlhPUXleSX1xOmZDSF0rM0ohM2pEPXU+ZnNeWWgmW2xAVVtEOjQmNUc2aGpJLEZVUm84Vms9bztCVXZ9MnpeNFFmbnt1byI5UXU+Izh9Z2NWPmJ2KSwpSTFwcSlBOmFT'@;
put 'Jk19TX52Y2t4L3oqe2tyZlUwe1o+VEpAflpZKXJTOkdoVHN8VyNqKixqc0ArSjRablR5YGV7OjNBZ010filQaVBIRUYpWCJlPHo6S3ZafVE5WSIhTEVmUVpVaC4pUD8/eztwY20+Zj9tbixBXVQoVllIeDI5YFhHbVlhRmRbITRSNS5UZzdodXNqVE5TbGE+Sy5qZi5vIWJ9KWUxXXEvSERZXzVm'@;
put 'IX45T3tdVHl1PipnO1RHYkBOUltZRiZPJkcxIXtPQWdTRyMqWWRrLH1iNWpEdW4xcXY4TUhYaCxHNlUjfSRxRzV9bDdlJERqUDMmWjYmT0pBKi9aTihKUi5gJj4kM3d2UWltZ3olfSlLPTZFfTgxIm1SYH4ibU9eZz4kNzkjWCZ3fSozWXcwU1VqUXt0Zjo8RU9PO2JYUEVdM2g6a1BQeU00KkIh'@;
put 'IyFiI1VENEJ0JTJ+PW8pZ1NhVl9uUDV2WUVPOmRFOHxwKUIoQ14hbWojUElvP2xlOFArZGw+dlh9eTpUbD5ZN0xobDJwNF9se09xQ1VQR11BMX1JY1Y+P01GJD1ULER0MmElbChvZTZsRilnPlUpVSpkey9WREYmI1hvK3szVkxQbzoranUzXXRAXnpIXmBVNj5eOyF8bWprKTxOcm1LInFCUFpe'@;
put 'IWZMRSxGVDlDYzVZZXx7QnpbSldpKlYoUixrdjNNUU1tXyRxYmF2RnJ4azMxQGtELEkqR341RWBpTStkcEZUUzxbZjxaSDVPUE5qZ3BsaGpBMi9iNGJjKjc8JXh0ZUxXLGJtKFA/OlA0c0dFO1dESDo1RSZxSEpzI1lFdDxfcCZHRzVkViwjLDNdTF1MZVlaKH48dHV3VzJfYX53UXBFYlZiO0NO'@;
put 'MmFrNUpYTVRYWyQ9I1BFd3gwTyxaQkVwMSx2JVBoODBxQEtbMER3W2pvfVZ+USgzd2kqND9OLzJIU3E9YzZhNEk9ZVghbk0sMHk4cSM8Vjo8I31eLms2U1k3c1RybmJvXTMzKG9ASk1HbyVzelFVVDpZKClCY0EzKE1PWy9gcVNvZU84bD9UcXRUPF4ia3NGaGp3O3gpQDc1fVQ4M3taL2tZbUwp'@;
put 'clIoWylqUEFBYllTR046XTgkeU9rKW9hLGMwKVcpS146aDdwdEs7ViNmblNuIUJEOjlAZ1NMbjdGKGomKFFNPFkwSzQkd0o0MCkyLF5TcDFGSkQjRX5LZ11GR2NrWlBRWix3KEM5V1NjYC40RWc2OXU2QSFLaEZiaTF0eG4rY1krQEY2UThIZHwhazNDeUcoME8/dntVKjg9bHomfFN3U29+JS5g'@;
put 'MV46IiRmOEdpdGRmNEVpN1doLjRUPFY1cCskWzhPd0g/YH5JOjdqXVo4JlY9VF97dE9wYnpLSVhPOU90dVk2YTIlSUN+WHRxTDFAXVkqXjBYel5hQStXUzNHI012I0hfP1d5dVEvc3ltRWIha0M4OUtLW35hYHN1PW85c0JwODxqL0JzdTRwLjp3NE9fa1lUXzApaSlEQDEwSk0uZ21HSUttOlRJ'@;
put 'XilbJnpSLERFQH05bjB8SD1vKU5JOGM9NmVaPlJVKkI+fTs6UltART1jRzRFJl9gdz53Pi5RSExANmVGMz5MMWtobEpYS3AjU3k2bngvJCo1L1hGI0BYO3tyfHRfKGN6ZVMuc35uQGxuO3ZhSzghLG0lRT1eOlYhNFlDTmlMRF9pLC5BXXQ6YlBBPE54enhKTmN+K1Bde2NGTzBZeyFtPSVyUDVj'@;
put 'dTp1fnkjWkcuTy5gYDx2QiVuKztmXVs2Vl1jW2JsSGk1PDBVTTVTa1c1bDwlbnNYXSNUTlg5QS5BUm1YPW0sMDBTR3cobix0SWBaN2RyaT57Xj5kL3olT2U+VSxPWjIqPnVXfWF6Kn5QcGRqMlNncHBDfSNXKmtXdj1nem9XVmBxcTlJMlhabFsqVl8/ZSVgZi9Wfip+PWNjWGtneSpLNHtlUkpv'@;
put 'XmUscnQ5c3tJczBrZXxQNSpDZS83ZVRxXndHeCE2K1RJTXc7YVEoOSNXVDNjKnhFIXI0YkVMK0NSdGdQPjducjl5MFkuaFlec09gby5uOlJZIjxveVlgKk9BMSMwOXFMaDVJWi4rQVY3I0lpPVp8YkxZU3IwQl0vdFphImJbIUZrSGY8NW8/bDJ9YXxaZnhvMXt7UGVROjo3VyhdTT5za1JuN29k'@;
put 'RDpzUENDeylVMzBzZXJJKWx4Vm4jWmhPUCF7fEpWPSNde0NLOG1bY3pnbzFqfitvIkkwRDpuW150OG93NFdpfV54JHRWSHVMb3BeSCUoUHBPYCx1dVVQZWBaSk9NMUM5QFAofH5GTCxpUTs0VTY8LFZwZ3xlI0soVUVmQF5hNz51c3VnIU1LTy5lVHRyTltHS2Mjd1AyWnUoLyUzUCZ2Z1FaOHN3'@;
put 'TW0ub30qIy5leGsiLG9YcCprJUt2bihIbSRLcTcuNyR+VUUxW3gpT0I+ZX4kKndeQGV3Yy9vJmNsZ2RuYjhQZC9RIi9aey9DRjJabCE5Rz8yYjpkVXQlbyt2RVVrVD1Te1FpVEcyL2FrfE97QDw6aCx6USp3eGE4Q1ZhbUcrWjNSTHFKYH5zQGwrY25fLnVnJCR1SlRUdGhXeS5BO05+RjFOdiM2'@;
put 'ZVpMPn1xbiJIP0doIXZ7bUVhfk4uaywkV3BtPGxsM3FVL0MjK1hYZGkkbGNXJlNvVkZ5e19kMXtNSCFAbXJaYCh5RURkQl9PSE9XZS5uaUw6ZCNzRGBQeG06LmFpUlRac19jVWdhaV93Xz1gUCFyP2M+anVuZGp0LzM1RGheSHAra1RSYTpUI04scC5yTStVSkp5SztaVXhYMnBMdXVUZ0pzTHhY'@;
put 'eG8jSGxKRW9tST4wQ2hvXkljbWhpRmg4VCYwInB7aSRMfHc4QH5XKlBvL3tmPyQwVFA0fStCXTxRN3g6X191Ok9qYUk1bkMsLm0oOjR7QWclcUcoeCtiREQscHVybHhFIT9mSjN9Y1FwOzVoV2VVWCl6dW91cWZWbDBYKF9CdHBGdiUjZkpycnFKUUZrKjxmZlFMRWE0a3cwYGI0fT1xWWloXVQr'@;
put 'bEt8N28xL2teOE5jfTZNQisyVSJ5QXZlZD0vMHEucFNXPCMvOSo/InlEY1giQXFXL1l9RyYwS0dpJXM0NXFMTHIqbnQlTFpNPDFESGcqXnJYWUZ8TWk1S2tlY089bl0kNnJMOl02Xk4oWkJId2IkL1RZVzs5QmshI1dJbyEycXJEWiYhYH1JIWZQSkZXKDc4d0c2eFkrMWJFXXBpL2tDJmN3LDco'@;
put 'cy8kc3MlZHV5PHM3RT5tU0Rkc0tKeW1BdDBBcS4yJTE5InZtWERRZ09pPWdYJjRKPlNxcmxyMy4oeDpCWHsuaH4jLDxUKDhKIUo3elJ4KjBmY2VlaTJ0by5oRU1XJlAlSSk8WTcyVm52QHIoKGRRQ11PKXVUNEtqZGNGO0x3NWVjU1NoUk1PUVQiV2xEN2NnZU15TFI4ZWZQWjo6KWR+b1Vtfk07'@;
put 'dDYuP2RHMll7V1s8PkMoNWFOSyEhZVN7bzd5Nm84Z3NhaiFlLFhJXjNjTGQiemBJa3BnNCpOdnUscD5dWnFKRipjeDBRKFs3OldYaiVyPEB8NkojUl9jaSFTLHdUZ105OiU3XihJaGxdWFM4VHVSISl+cCY3IUVHZ2RiTCJxNVMiMyIjNmBRTVBVYi4+TnhAJTw0a0VxSl90PllMTWxxdiZEdmRh'@;
put 'TyR0QCxRUzokaXpGRnhVcyxWLDRxX1V4eiF8K0cjK3RFbExNPEhgUVVwfkVWMTRlTjZoZjVbaFhfeChdKkU0K1lFWjgqbGw3JmlNWV01YE1pQmFsb1F3blM1Qyx4X0Z2b1sxOG1sSnB7LChgcXU5fDVVS2RvPjZIeUVFekpAdXxLIWk/ZmJgR1lPPjZMV3o5cWhXPTQiLmZxZkhFT2R+enQvL1hn'@;
put 'O1BAKmd8U0ZGL2tKIkh2KV5JfWc2NDZyfmdLTCtYWEYpV0l3TlFpfUhVTzpDT01lZWxBa15KV3V7aWdDe3pdX3teeiNtYjlwQEYuQEljKChPWjQ6WztvQEk8al05eS4pQ10pIWRIX2JoLE97ZGQ+XllXd3JdVF8vRW5RfEdPWzk6UjMyL3huU3VjTnp7dCsqZUJkK14qaXlaeDJON0syKl40Mzt9'@;
put 'L29xJSJbQ0J9SF57e3BQTlhHJkZEe2M/aERuWFhzXyZVeHglI2FudXlCYVluNSFNQVN+Z1ZqISZENkNqWCp+aj1iOHVGUEVQSnooZGldfVI4cXYqbD9RVCIlR2pYP1JuUTxHQyRQaVdIbDJoRix+UmI6TGhtN0cyZUZoUy9aRD51d2Y8dGtNOjQuJnBGbkRvJWojJEx5K1VGP31ZQ3xTNTgoOXZW'@;
put 'MU18RV94cEsmeU5XbnZdfVdLZFhgTX1nckRufFlSTWIiVTNDaWd9TEYoQXNuRWg4Kno3YDMmc2VKdyttcFt2Uk4kM0R1RlheWyNzaW42Tnk9MSM3MTVzaTwhakpCQ1tWenFXUDhgbGkqRWkyQFY5KiNKe103SyVldUs1OWI5KSRkdCx3Jnd9fnwpZz92ZWV3RVIlLztHblE9NyIrbT1+e1RIVW0q'@;
put 'WV1zIythNGJlJXlJUFAscSFyfHUmP2woYTpWMWo4ISZXO0MrX19tbF1pQF9jdWFXJU07M1lLOz4xaHxQVWRoMVp8T0VXaFlWMyFXM2VrTlpefW9kW0Z2VjJ0OWVbOX5TUEZVSjMxUn1rQTw0PXZtRyx6OSMvVlImVSJhIiZxaT5LVCJ1MSZ0RVV4JnluMFIwaVt3czg8SDZCMD90VH1yZWZ+d1Vm'@;
put 'YS8/Q28jaHhMdlVpQHFOYld8aD09RjxdK0MzLlFnQnU9UH1TM1JIPFgsSHQlRTQjbSsieUhpezFXP31DTEoqP2ovbHYoTit0UlJ6TkpWSyVBTmVSKnhXcGl3bmRROT1pTUVsYzF2dkhiMmtOY3V4S0F8LFpSPV4/TSJeaz1CUltyXypJUkQpV0c7bnJZR1U3dUBpNWtfS3U/V0IxKEdHZjpRXXhv'@;
put 'NHJ8SjdwRW1nfD4iNGxMfFQ0L1kpYHVFZis3cXQ+a304fmtgKHt3ajs0fll6PyQiJFI1PFpqe2lFNVpdRzJgdnQ6Ml5uUkx8PFlZc2IqQlpKcWwrMGgqc3dYOnxoSjY7OiUqPXNoSSN9WHpKMWppTlk8VndFP2RpVDJPJGB9X0VdXT9ifURHVGhlPUhfKEt9a3VyPXA8QVQrQnk7RigzX1c9IiRS'@;
put 'fSQhV3Q5VHx6M2ZAc3lhcz9xflhaRVlMJXQkTy5Fe0wwLn1ZWTAkJXN9JHUkSWp0KFNjWj1WK1o7NUg7Lkt9O2xnY2soK1J8RzQhMjVCWj9UWjhpXlI1MUt6NjYqKClSW30xYX1Pc25ZS1ZqeUN8b3o4SD8lYHV5Rz5PJjRtSFVHPH01Mj18Y0x0RF9XWlFLPDNjekhgUE1mNkVacjQhXUpEVmop'@;
put 'VVNtZ1MmW1I+RSgxazFKRGddXyNudWFHMjw+UTpeKEV5eWg0OE1xI2kjN1NgJjFXYCNPMSkzWllxOmRURUBdQzhKWD1iRS9QIktDJCZVbms0SzZ3OGhxe31uIUNlOmJiTVl6bUpSe109ZF1iYy5tPm17MytfO0FOKHxfPjJPdEFZOFJjfDJaXzBXZmw9SUc5XVkmOkteSWZHdEV0SlFuQUV3UXs1'@;
put 'Pk1pRGtQYHJQYGhMTHdQOFBCM3JucXxmbkRlWSk0eGdEZWsxKERHOyoraD10NEdNKm8uUnc/fChTOzdaNnVGd3kuLGxDfDdnV15rKkFHO0piPXElR10oe25oIUdFMzYlV2xjRTRLc2JEQEw4QWZxRSQ1M2IuV3ZoT0lvWz1EQz5KOlZLK1h1S1B3altkV15kPDRRK3xwK0d3aF4wWGdwZy5oYWZD'@;
put 'UVVdMkNkeV0xMVsyak4kZzw/VUY1STM8W1NWUkMpNmxkImo+L2ZdUyFSRj8sem5CV006Nj5AaERoMkkvcDdyZndvXXx6MUJsbz99Qy5+eSI0c00jKitWcys8X34iK1I9fiRBMSt0P3NgcDZUUT45QFFIRm82Y0VtZXxEazc+MyxzJnF+QVRGckZKdVsqLm9QezpTTmY6U35KYU9MNXp5cEE4a18j'@;
put 'fn1aZmghdkhHXWd8Q30wfTZoU1pmNGMrbV9oaj0kWF1fdXtYVFQ5c1Y+d1JPQG1UXkQmUnlwJGlVLyV1cWYpfSQuN2MvVHQpeElxWjtlUWNRJHtRKVU0KFI7ejZvVDRoSiVGVFloJG1XZlIoZU4pRi5mdHIuQ0dAQm47LlBLPDNkTUA9P1t3Y31LXmlwdyZkKTdHOF1nXjZgVGJYTDE5IXFXX0Ym'@;
put 'WV14VngkfH1PTWY2cSkrKHd9OkVxUDMvYi9sK0BPJXZJL3V2MUJ2VkA0LG9IN3h9VjhCODtMPnF9NiY+Om8yYE82ITx5I29qX2RQaCxEaF1gVFdkRCxyemE1fnpUOWI6fD9uPGFDd2FbJGlBNVt8O09XMCg4aENaWXwzXVlBYzorTnN7QF1HKTA9REQienRYNTAufDg1KXZYKGhqNTIoYXIiQTpw'@;
put 'bWB8Xm4hZCpZOlR2P3g7a3tDbmlKLiRzOj1SWlp6KTRCKipTLFMrL1Bicl4wWSlFMTYzb0o+bjBQInI4VHZTOzVSUXkhTDk3WTQqZ3dDWDRJaUJmc19EbFYwR3FdPjFNUSUzX18oemkiUT4hWTtYRXAsQE4xKX5sPywuJVE4fj9WSlcrbm53KmEsLmJeQH5QQmImITxOZHc3IiJPb14qSnx4aEhU'@;
put 'Y0ZMW0dhYUM6NCZ5MVZ0dn5WSCVCV0J+JSxiVFpYfkw0QEBeeXx2Jnl6eSIsQVsjQTE2QjRUVDlncjUhczV8cVJERjFRNStpYWg0U19kYzJfMWohK0BWaVRXLDJ8Ukt1R25KW3teTzg7KyZpV2MrN01OJSJiM3xmLC4jQi5VQkRUZWM1TmVYQFRDQltOc3BfOVs8TWFmeDZjKCo+eng6UHdBZEQq'@;
put 'QDlJYyJuWWgjIzI5LzxeWys4UH4wdy8yOXB5eD1hOl5VfHI+VElQK19SPHUoNkBXZHgmdWxAVT9kWG5uIit4W0oyeUk1JGwlOUxnbTJHV0IrSG03dUhjQ0RwNkxUMmhZbiksMzw6IVYvfUFyKEo8MCEpPEJZWE1bTU1HMWV+Q1U3Tj5oRWR4LFksOnZfUU0wazdkPF1BcGRxank3dE40VVEpSmdH'@;
put 'cGhWdzhJJU9YeV8mOFRlJT06PCxmVXtPPX55dVJ+WDBvSiR1fDxea3s2IXEqLmtmTWFyOXlYdFZOIkV7dmxKI1speXt0ZVV9IVZ7S2RiaGsrdTZVeG91YUFJOF9FPTl8KkpvMzZHIzBQWVAxMTNIXmVZWDBFRTdTSyRtWzVoaU9mS1FXND8kaU4iOTpacDo0R1YyLFVDWD5kMXUhMmxOPDBhWUA9'@;
put 'cEc+cFQsdUNqLHtOT012RjcrUjU0UG4qVlMwRnB9YylIW1dJdzZ2PG8uVSVEM0BqRzhLOHFTIiw+PDUwSDY8Vj1PJUlyPWRHVWVMfStFJCttSElMbj5pOSNSait4aDR6ZH1Fd3twQG97fkBVYjVaV2FGdH1CQlpuYkUmKSZPUGJOTy5lS3tTSiM3OSF9OjREakBuNHt0RFJUeGE/ejZPeHpEWlV0'@;
put 'eXpdPVBYfGlCTW4qZ24kbiZvPm52L11BTChbOWNLYjBXU21yQXY+VCRhXnlUISRBPltpN3prLEwrQEhybT9GbiRdNilVe1JKLjZHMEdASF9kSyM7eF88MER0WSg+PDt5NCh9L3pWNixqPEg7SF9UfmV9fUhZeDkhdm0jNUY6RWNwPCRNYVg1JCFkfThSIUo5U1ZufVNET3dJWG1tU3BmWGclRyl9'@;
put 'P0xXWVNwTmh6PEUzfndIc3d7eS8pJUYhQypSYyhpTj1gTjY3W3JVdVFtN2o9bn1QM11AM3FGSWYjSFB1QUwhbTQoRFsjbzheSCNmMTBQPURyfDc/JThFdTkhdmlzbU0kciUielAyRVtiOWY7Oyl6bi4+VEkpZEViSUE4QGUkbUg8a0ZHXlRsbFRHMT1hTV11ZTgubEBkWD9RNzI3b2FsI0IyPCJQ'@;
put 'XV4yRiIsSmclaT1ne20vaW8rUFk0bENVSWNEKT8pPVlNTlQjaG9kWX5eRGYpVkhbO1NkZ317SU0+NlZFWkJ2UV19V157ZkIsTjN0LyN3eC83ZVUsZF0oYE9kdTskYTZ9LytCODF5LDcpb11xWW15XTwoTUtIPylIXmtMQn0yd0M4QWpUOzVvVVsjXmBiImtkKyplOEZWUHtZQj93K1Z6b2BuPFBf'@;
put 'cH42O3VYVmdOXkp7Z3RSSSxELlhTOmthQ1ZfMSJ1TWc2MylzZE5sczs5VTU9fVRVKVN0OEhNKlssPD56UUlqbz52TnREJERZI1hJZ3Y7Ly4kWjV5OSpRe2JjektaWGhBciswcEMuMUtuQGN5OzRxZGFFJVs0SXV6Onxre0RaM11+UWJ7NktoUnJXSS8qUnJLV1ZYWnFDIywsdERueFMhX2c3fkcj'@;
put 'Sms0Yip8OWZscW9Ud09Acy9EYF5mPEY7O0sxUXsheUFPPCMxWGVYKztpZmAxS2dLOTIvcmUrLypYQUp4In1xbC4keis1dFVIdXNiPmt7dVVtOyJjW1p7MXJsVChQTV90Yl4mXXUkTm1AT3hLOlR2aHtwNGk9Rm9FMHA0OWZ0aUhnfnAqenpNfm1SZWJIQXVPblgzaCN2cnFjN313YmFDKFFLeWs4'@;
put 'O24wMnsqeD1rNkcmR0dML0k9bTYoKDFNY31jRloqQ2hDNyIlS3NrUURGYX5LbSx4Sl1IUGg2N1pNYz1lT3NhUHFoJkJIQng7OXg6an4idCU/L3Q3QT13QnM+QV0yI0w2XT1vakxEc1tiMFZRd013ailMdTxJeXE7MEUqYVt8MyRrKVIhXjM9d0NPRCV4OzJDbXosYUZ9RX1ddDpsMHlDNnY2IkF3'@;
put 'RVk/KjglOWAkNldUPyYkUTdITEghbkJsL2M6QVQ1cTUmMCx1cnp7ZUg1QSFvR0I6ViV+c254Vko5VCVONV03LFIubnMmaFJ2WkVNRUhLRzldWSpia1h0NyJqVHlLVW5IeCtjXys6aGkhNkdGR1phTmdKbT56LCZLfGEwP1o7QjN0ZmJJMCpfNGNdNH5WdFlBSmU7P1hOV0M1N0RscyIwfV1EPCQz'@;
put 'LlY5WUg6fnIsUihtfmE5bn5McDg8VTdASTJJUEBhQy9eOzM0MzBlWWAhLlY3cXNPOGRzSGgyKl02enR2RTRtWUpzQGZwOFdNZiZDUDB7Y3psaGRbbVkpNkBtIjZtcnY+XzJldy43dT92aHt0XiM6Y28wY30sTSE1SXghYWwzQCs1Wih3eHViOVVlKmtlRjJ+JlMxK2JaL1RLWigzNGZgU2ZMcn4/'@;
put 'YkwxfV10Z1N8YU9lcypga0lmK2Z8c3c7OjVSWjVKQkZEXkJzRC9oY3smMFZkRzchcnFyKUpZbV9Yd0csNz9DI15dZU9HNyFDM0RQKS5YWTNlbGNvW341QjNlIXJZXT1CJmJnUk97cXp9U0hzJX1tLntmaGBPfjQ7fF9HUyZrfmohIlJKeWJpcWg3dWFdQldfUWh2Jn04P1ZaQWpxaGppe2s6Jn1v'@;
put 'N3NvRjFzSm1IUiNiakwoazRPO2t9Ky5YfXklTztrKU95cl15TWApa3lOUzwzMWRMU0VRfHo4OHZeeCtPMH1TX0pCcmJUUjxuT101UEF6XkIwflUiSSZOdUBJP05rR0tNOih0RlJxa0dpX04qTHh7a1lzZXI/TkJUOzo7TXtSIzM+eVs1cEpMfCEkbkAwcXxHSTciVmBjIjhSVndMUDkhM2JLJDV3'@;
put 'NjB1I3syOzolKkkyOktNclBde0h3NXF+bihWQy9OYlQ6ZHttP0NpOH50PyhSRmRVN1QvbFd5VyVRWEZYbCJMdj1vRGs9JSx7MkQpYC5ebiU+WCo7OXhhVUM1eX4xSSZodUkmQWpiaWJifHcoQitRdnNZWyFlSllXWFVdV3A/TUJEZld8SjJIKERQPWBwLiZbKWRlYHJ1RUYlVyV2KEJ7dSZHWEN1'@;
put 'YVk2Z0l7O3cpLnsxMHE7e1ghblRnOXJlXl4lZjQvcyRnTW1bKT5XPFZTenJnRlA9bDI3SmYqJktoRiFDKGB+M3U2TXN1dzJ2QkhjKEJPPVgqb2NdT3xBLFZ5ezRoKVtlJXVyKUd1K3BfOzdyOE8iJWp7dHByJk0zdSpGe1UvVD9je2xFP2lHbEBJfiR0PVh+LCRCPlY0eF9EV1JPYnBFK2cuLG9l'@;
put 'd0xfPzhlcFthNUpvVWlZTXdsMXNwUEtbZEA4byYpZmA2TF4pKjIpPCZnST1jPXwrJUZSVCNicysmd255eGNKZkpoU3ZZbzhCN0EyczRiamdNQUooXkBsdCs8WV9jbS4vb3loRER7QWxmaFtvRWRZdUIsY1VdNHIvfT9+KzgldERFUDkpVC4mInYqdlRfak94VGpFey5KQWk/IXlWXyhtfHc4fmVA'@;
put 'aFtOJX5CcF9pNSg5cV1aI3RvKCp6NWcoXjA7WXNnRU06MV5JMys9bGw4aH51YT8kbGUyRiZXJE93KWNzVyo0aXpjO2FDTnRmTEpqcSlDMkxwdkxyai44JT9lPzdlJXVmW3hiekZlXUx9bix+Ui5Ediw2WV0mMWV3SXZvK246e1pCfFNAOlFlTX5ybz5vITlPblVdXnRwKVVqMz8ub1shcDAiUnpt'@;
put 'eFNPSDZuViVLflUjPSNec31BY35JMC4vMX0zN295fWkkMjthQGVfWGlTQG1jLzZ1R3MzdTM4NGtWfjIxLyRVLHx+dWkkNFhmfTs8SyU4SShwMF0+NGk2LzVRXz8xcUZ2PmlHZ3xYTGJMRGF7fWJLW3AqNkoiKXNAXk5vVEc9dGVaNz8xTlJpZUdqanZSZEx0d1BPQEFHSEVWdWJ+RlQvYSspSSZg'@;
put 'IzQ7Yn0+RiRtK2RkUlBUNG1rQitmVTFCPjEhb0lNMGJCRzMya3NRKEd4PzFuW3tocSpNVjlYJWs+OnB5eDdCI25zRXVTbklbQ3lBeV5leSQ6PTBkJFUlUnVqV3dMLkxiPjFlWDIjKilJTi8mYFo9WC5lIVtdJENrLlt2PTAvNytrSDAvd3wuWjpvWnF7K2cvTURqTnNLdj9EOmgxVVdLMi92PWpe'@;
put 'KUZ4Q1NUdFZFYThgcF11QmcvVXJUfiZ6a0Ria0t4TUpsOVgpTnxAOFlnMmtgaXghUyx9NEtZT2woQ0Y3Pi98VmFGeylHWXFISWJGQkNBYEl9K2xvTUxSY30qbiprT3dkc3dKelUwdk00d1kkfDg6bngxM2IpRDhvOXMxaURlZCNrOVJEVH5gLipyY2RPWWFqRyVZYmp5Yyt5MFBWO0ovcFskcDJZ'@;
put 'VjMmY0JxT1RRM2A9WF0vZmczU0V2UlhQbTF8cXQzW0REcDhwa3BCW2B7SE47Knw2YjZzM3Jjazh3TDdpZGdjIkhKWHs1Oko2Y2QsJGh7fF1TPHZheWBASkJoTXRPUD8iXz53Rlh8InQ1bE4kQDY8OHBlZl9vW31uSj1xciIvb1ssQ0g0e15qeTM1ITkpVmMoXipNM2pNWjZdPEp8c3I2fTdmbWU1'@;
put 'W0w6e31xWVB9TjtqeFAkZmssK2RfPUNvZTQ+e14+IzNsKjZAXUBVPjtbPD5nbzlXI0U5dDsjYE57UUx6THAkNWh7XktOYEJ3JTwldzUjcFssTD1AM007fm47JWo6QDN4fmBxanhtUnJMN29mfCU7NDo0KilbMS9WNTFEaFVvQikuPTliQGRfPnJ+PS5DWE8qOEJMfDVgYj0zYFk7bEVPUW8xTmds'@;
put 'fHxVRkY4cytfJl19KjsqLmZfMS5BcS8lLHM/Lk98Xjo6L2t0MH1UPH48QmBzS0kmOmxYa0Q9QXloQ2RzPChfPj9MTkxCb2FPcThSKDZ2OXYqdkN3eERKME0wNHd4RGB3eEQzOnxROzd1OFZSUXZeK0lTS0glXj45alheZSpjRktDSnFJU2hAfTNGcVJDWXlFfns6NzNJYVZDVEdLRyh1RSIueVhS'@;
put 'JnAoJHdxWHhUZXJ7e3h5fVFNWTxbVj57JXMjO3ZoVTwlKVZjW01nO2RPe3Y+SjdHVypoL1Z0TXc4L0ZHOmw4OWI9cXM7Z3JbZm1ePDNvXWhVYGU4eD0peF1BcU1adzZOZTJtNXxiRFsvd2t8cWBxd34vJlpET35JR0M8WzdrPUtuVyFNbEhsUD11NzxuTDkmNyRwdiNiaG07X05MeHxNVHBtZSFh'@;
put 'aE9BVi4jSzh+cVBAOnc+U2E2Y1Y+ZTZ+SWFaVio3ZFE8ekg8cUdgbyteW11+Iz1we3coX0hzL1ZnZk9+YldhMkVHU1crJkVifSEzOkY/V3NOfVFVbUdjKTY5dDtIL3Q9PV5yPGYkQWI4dDhMZkpGdkl8RTk1XWU9OkZTYXJUaHZTcnBtd0hiKkBeR2hBXnd7Ij1iL0U+QUs4P3t7IT1tWm1ePWhy'@;
put 'X3lYWlM6PWBPRHE1b0NdYllKdjY9YUlsdS95REBZR3lgTmlrV19QQCs5TGBlWmRGYjZQMHk8NTIrUmBgYnlwb3FzRiZPcllIQHN5U2tZPiFPYSxRZntMUn1DZXpGPCwsZk5hRD4iPz8uWXkpe3VeS3hZIS85aWlqK0Nle3IyP1F7Wk9nVz1qXSNWVFtbPmZhO0Bna1dFSyhTOnBRWTNaMFhVMlA+'@;
put 'OnA+SzJKK3pqKG58bGIpST8lW1hYPj83OEMqP2ZqdWdDVyteeEZiTUhHKzlyS2FmZElkUGJWU0A6Y2ZmelRBLyJ9PjZuen5IRmtEfSFaTHMuMi93WEAhSFlOUjsrYi5XQ0g3IXg+RFVuVn4pZyVtaCZtLEp8YnE/P3ZafTVmWCFFdTpDfTQrb2F3bjEkYTUvX19kITp9eGksUGdlOGtKfGQ3MWdu'@;
put 'JHRFNEV5KEJRYz8jcmZAOWNVTSpEcjhmPl4pUjxDWXN6WGF6VlY+QEZsd1UqRDBoVFB7dXFVWSpJYlVRdlBLN09KcHAzJTcjKDBxWlhAd1NfW2x2YUIhKiMqP2dqdj1DVyptX1YrXnlbbHB6eVNITEssUVJLTVJSS3NSUkt4U2w3SU56b0x9Nz09cjxeXzslJWdfYCZPSXJoJEopOWI2MEhwWk5E'@;
put 'VD0zUmZZW0xKeSRaNz1PKDc4dEAwTUpLPDZOU3QqYDYwK2Nmd3JZRXt9RDIic1Y6M082LFk/dHJoTDh1L3BLcGwhdEtRKjJFOlp4UXBZbl9OZmY/WT4wLmV4XkYhYmcsRkBXVjIwQWAlKkt8fCo8MURnPTJgcUx9fSpPP15xPmYhNWZGMyskbTZEQiFbRDMkaiteJF18UGhnSXZpclhPS3M7bSxB'@;
put 'KkZAOXMlSGR4QWVHRWNkeT02dG1lYTlpLE5vRiR4eXhEbUR2aGpzbSpDYCM3WFtJQD9mMGBiOUtMNTtSLiY/bjwhSn5sd29iRWlOdFJYRyhlaXx9KS9zRD8yISttJDt8dnF4fjdFTn4ydFY4WC8lbGVDOEohMnF8YD1zZlQ7XnsiNmZBYW0wOSYsKjFAXn44RlV+N2g8PWVbYCZDO3owMUt9VX5f'@;
put 'QS8oPSt4fH00NHJ3Ry9DaStpNFNNdVlIYzEjbXIxc3hdaCtpVFJdfDN3cC5QK3VoKCQ5a1ZbVjVieSg5LjZDITNfOHh8fS9ReFQqSGtMb3QmSWUqbWlQQkYrKU4qZ115Uy5fZitgQHZ6SV1JSXwhY15nMzp9Kmc8NSQhUn45TXVRVWhMP01+d2t9QEtzfXhwfShOe2tffGhRQFlDfUxickZlQltv'@;
put 'QmcoP3FvJk1uLEpOQEQ1UXgkIyw0YT5MKWB9S059VXh0R354SXFxSkVvRFJYI1FuJmgmO2phd0orVlFDLD4mQT5WXz9qfFE6cT19bEBKL3JjKWJBMG13fntbfVRySVY9b299bCUqNkI+LG9sOzdpVWJHTkk6ZVUufnI+a3RWWztqQjN7M30zRy8seWc0QWolPmcxQE99JjQuaTFkVkI8MX1PSEY+'@;
put 'TGZ9Lz0xLEtOTURtYltrK3VSR09QcWlSNTtmWFhmYm56S2VjcD1LZFVuRWhfSnlNd2hfVXgzM0JoWF54b1QpfkhOeEZZVF81O21yaylEOnBDLEh+cmJDfTtMVGJFVGxwYihvZ21UKntQdT1KM3o2cTdjSCxmb2Ezfn14Mz1NS0lmVHg8YlNKZkA6XmYpZEh1Xi46PUxXLk4rRnF3dmldXkMraUlL'@;
put 'JXMkYEp8MS5nSlUzTnFZUyFDK25idWVwZ1skRHp1NWFJOmxTUVlqR1JuLFUxNE9zM0xRRD86W0JrXV5LQ2BDeldrQFE2MUh0K0EzYTdjMHc/WCoiWFAzcGxuaE10Wkc0XjgiQXVrZn1FVm1FKl9iaElfTGpZP2xJfTopanpSTzY4TTwmVmN9LlB6OUt5OX0oLE5DPD5GSkYjZ0ZQbzV1UHt1Qkc/'@;
put 'UDN+PihUXVk5WH1he3JvaS9hJGFBeWt9TEd9bkgscV5NYVtVZEg/NkJseDdhT01iIk4kW3l7SnhyZytpfjgzQyFQVXkpT317c3RqQFpeIkhSd2wuaSQzdiJtb0V6dGZGVHlzJl8lNGl8JSQ6dERoa10lTzNPIzIjVyRONihMPTQzYFc1KSVMb288Syx3d3FgZWFtWz8jMUxuVlY+dE5lWUh4QG4y'@;
put 'eFosR0FXNnEwSnJGOitKOUUpLC83fklzUWZRY3NHImtLVzdwTVk0O1crZnp0UEx3XS5dQTN4alchJUwsb1hDLE5efkFjdE9uSGVlTHwwRFgwWzUxRmB1PHdlM31VbWRKJTBCPF0+VyxSJjZjZylEOEg7a3p4PlV7dyR8PEFsZiRFW2cjOl1DIyU9KlFoREJiSS9kIj9wNURsdT1eNVY7VkJuN3px'@;
put 'JGFMWjV2NS9KfWEpXkgzfHI7L0QrSCo1UWxNcWU3eV9UQ0FZaSVmYjFZVl9FZUxlRjhjbz4qQ28wQSY/ZURgYUFsI20+YjV8I3QjZy4menI/ckhdWWlGQmJCd0IoaDomNihvU3xKKz9aO2opTVB2Yj5wOk9tS3VxVmhrUmNKUClIV246UXdmWSNuWSgldk96SXAlU3RgQHNNckU/blJzSlZaelRq'@;
put 'Pyl7OUolfl1vY1I6Zi5afmVmRjxJQ09NTDd9JSRGJT81KHlYKiQsW01dYUlpPm91MixqWStfYWYyYmE9WF9PRV5ZLEpzTX5KKm0qYGFQMXsyVClNPVtmKH06LkFDLG8pS1s0XX1DaEJGJCw4fkVLLk9eKTFhLy81d2o9TUtrfTdaUEA7fllyOWxwRUppXiR2fDZRMH08TVFVd0wxRD9ObjE0eClU'@;
put 'IWJIcTc7cSpuVjh0fDJKKyFINV08VjxdeCpgPjRpc0htTnRjVVEjXiovZlM4TFtgPTNhYXB6XXxuckQuMHclWXxPODNmdDtuNTtYOU5dJVFhQ1pZJll1TXVbd1dYVUJfNWZdejFLTl43O0NILyQoIUJqVDQ3SihWc08vXmskZW5yQHZwfWB3cHgzcVlGenNjVzkuQTlHRj1eKUZoejZjZ2plQm8l'@;
put 'X0B3cHYsVmNDNC57Rk5hJE9OM1VYYEc9YFozK3RPbSx1dGM4cm9zNUlmR2QzR2YrN2srQ2MpPTAzRFg4cnB+K1t5X1REV3ciWS9GIXRuTFl8L2RRREBXdipnOzwsOm1POltXbDw0XT1aYmpUNGhYY0J6W31WJj0wM14xL3lFLkAsfjp3V1VneE1QU2owOFgrbUJPWkJ+Z01sIl1jd1NKK3N0NzJX'@;
put 'S1kvNWlkXVIzXnFOelRCY1EqRDhvMSg3fnhSQEBvWnFyQitfT2lFRUppYkw7Vnc+KXRaMlgrTW9ySWFhUlAyYktpTERVWG9kWzNuT2d0KklqOHJRVyksXk9ifnBLeHdHV353PHQ2KUIuWVhRV1ZkfVcjR0RxeiZodUNYVUVfZW0wPHptK2xnM0pNZ0spWCRVMnhzOC9maVQsXlIqJnh5TEhrbkpM'@;
put 'KV5jeGAmbEFANT11SkFVfjNzQ2UvdnE9biJVc2loQ3JeN2tgRF9eTy9xPUxLcUVsYH1vYW89UikpR1VfSWIpbStrLG1HKjhCTF0hO31uUEcpNyEhV1RAQkhRQ2M3dFAuITtMOXQ3TF5zKWZ5MjNPWjVoK2hfQnp0OEE0aE5icixPbXUyL2gwaHh5PUc0OmlgXil8e2FwZUpObFdYOVFKYFtZaXpv'@;
put 'WFZGcm1fUSpOfCluSjU6YHZ1dChSP3Z9R10qWDhnZ0lPamJKa1pZVH1Ldj1ze2h6UjNZQyZgRVRPUkglIVQmc2NGQ0RVcW59dHczcm59ayw/ekRMUE5CVzoxWVMmOnpqUkNKaTc4N2NeO1RWTkYvaGI5TDxOIUJSODs2UCx2RFFoTlBCUCxvfF5afEp3SjczdHpuLnsvYzl0Jnt7a0ssRGlOOC4s'@;
put 'bkRhVlFLT18zUj9YajBIaE07di81dDk9OGV0eV81UkJrTUJSWE1sUyNAcCteNTpIKkRzbCJ4S1phXktQJkxJRXdkdWAyfGw5VDUlP01pfFl7aXpxJmFOX15BWDt3VHRDUD8lZls3K2EqdD9XJVN1R0QmW3BPcDYzJlk8THMrXUZMSF5zcWpXPSlVQTYuYi5UczZnOS90UnlRK218aGllajpzSX1o'@;
put 'V2EmQjR4fk9rZUdaQCFAX3NJXmZgWmc6T2FfOVF7TjQkJGkpKEU1OzFFIWVwK0M3PWNLXzN1NCxXfWpTMCMpQHFoY1pIUWR3KGF4enRgI0orNDJ4KTFGZH0kLihbKjlQMEhoITRPLlJiZTdqczZiLEpSMEhoITRPLlJiZTdqczZiLHkrcjszREYrKU5AMUtNYzFdMUwxSnlkZWh0QDE0T2NgQ2As'@;
put 'RCF5ZTAyNkBAREAwSElBYEt2cHRgNHRvYDhBP0BQdW1gfG4qR3FyPWleUUpsQDsiLHJndW9temV9UyJ4VUpfLypDdn5YXn1teENGU3pIUHtVQlh1TWJab096VTxEZUBKVUJ1aC9fUiQ8TzAlYGchcU84aF01Rk5PQlJYbGkqX15MO1JlPWRKJk0vNm4jLzErbzlgYjldXkhANT9SKmZvRnw/XlUm'@;
put 'djBnOmBmZG1OYX44OjpmM2w3XkBAL1dIXTduemFFUXpBdkQhYXhJJFd+KGI/JklHQk1rQld+eH5QNTdwOXdKRGZXLF42SGBHZXwveiVyWlU2WHQvL0Q0RllwNnlKT0l1NX5FR2VNX35uTkw3XXxrPz18V3U/cFMwakRgIj5ITHZ3Q1pWZTtkNHw4e2cmZjEmKVhzOnhqOzYlXV5nL2MiRFV7cld9'@;
put 'Wjp0el02cng9cXR6X05lPVg7filEfnQ1fmcxaU5de3l2ZXhGJS91R3pJLy96MitET0wxKHQsXlZHI0lRTVA0XU1EeiZaeWk9MGJEWU1xRGx0XVRTZH41YXczKFpSTVljV1JIbCk7YTxFcX01IiZ5cFdqMDVSMGE0R25pc24mYEpjIUcxYit1Uj8rYSw/PGguR1VteU5daC9UfCZ5RGBXKjNyUClm'@;
put 'YUk/dm10a2FxfS56JT0jbShCVE1DTFFhaSk7OHI8K0gsJml5fUVfSlNVMChafEtWY1khUDNPUilQe01XPEIuQTpMbWc3KmBvfnpsUCRyOTR6LCIqT1BfV1hvQmA+Qz5jS0xYYlBEYE5fSitySExeQjNPSHooM3VxYXVfXzlQV0EmW1suX34rKV92IWMien14NGRFd1RjZE1XRy5bRHk7VStHWGJo'@;
put 'XVd4QC5fflZMZVEsdmQlR0w4RzY4dGJfUGpfZnNBUipMSXkjWWJINnRAJilWdU92dV5Oci9MJjZQcElLSnN6YjR0Sn13ZC9ySVhSNlkoVlRpcCJRTHppNE8vLCpUQUlWTWVjRnxHeFhZaUV+Rlh3bDYkWUB7cFVuWi5ARjgxdHlFSE4oK25nMDBZc0woY1ZVQ09zcEJ1a2x4U2Y8Zn17WERRczV+'@;
put 'bV12O2Fvaz4+WHFkOj55eHtuV1FCSFRSYUs6Z1JrPioiWCYqTVJtTTR1NHM7TmdjMlljVyhHV0Y6YXszY0o9b2pNN3gkfnRoUV5JZCtiIT5JaF13QzxgR2lXZDAzb2U1VVgqeTMyfjMvRCFiTyxxbk5vS3wwdl5lYzBob2RhIjV4V1JwIz9Gd2gpMytnbk4qYChIJTxwRVl5PUomYjtsRSlyZV88'@;
put 'bm09IjFvWTFUfFAiUltgeWQjamNAPzlgcEROd354TyNDSVRdeCJLSk5XN1JYcy8xPXY4X3dMWWR4Z1U0aTRWcjNDM1V9WGlXYztGYFp1SWNTY3JTWEdnMTF+JmMvNnheLDZ2KiJ6K1RSdj1CTGUwLzZvZ2FjQT5dbDIrJUl9TF9+SX4yOE19W2tlYXE2cjhJX0Y0VWVGT05TXXRBZFAjNVVFfV1H'@;
put 'LCUvSHZzUW96clZkK3IlTyVLVys4O0dgdGlrb2BZKm9NKDlPRHxZeHBLP2ZBdW9yQnd1LEYrMUtmdmZnMEhfMTRPOWliZTFqMjhQLGdlbCpzNlAsUGYxMF0xTlB5ekczNSVKeXViaj5WUX49OylgN082bmJvVEpVWmZtQmYqTHdwVCs9O3JYVn0iam5DYDh3Ri9QK2hMeTZ1TFZ7I0krJkQ/TkMu'@;
put 'YEV1ZUo3TTFEYHV3P0NAYUZmdE93RFBUUkRhWEQ5NEkwP0R9R3h2fCplfSFXWFgyeSQ2JFMlTX42S1lzQjFjc0JCenxzcldbKUlBS29zQnxXXXNCRS5pbCtZaDB3P3xpaTNEM21HIjczYSlXL01NPFJkRVt6I2FaZE9BJS5YfC5vZXFSZDhbMXBfV1lAR3prYn5GPD9gdj8yRj5RKnIxTC4kXk5m'@;
put 'eWkkP2tvRW98cEJXWD5iYjhNcX1ZQjtgUDMlVVVoPy4rI1NrLmAyU3Q3MHw/PkFNZ1lSXjgvK1RAP1R9UGZJdyE2YUc3byE1aUNwKV81VzZ4NGR4PGMrdU9wKTN8Ry5FZ3lRWXk1ViRabWkzJGBfLkhtUUZqOyJkdHg1fj1ERTZ8bkZ+SjZmWGo2dk9FZD8xITRTOlkwcjYhVUg2UzV+Kz97Uikj'@;
put 'blIoK3ZHTF89bkhqVFY8S2BEVDU7Nj0wM18xOHdEPTN6ZFdLSG9OZipkUF1aLkBZWUNGUlQ/RyI9WEY3OjMmNT1VfD58b2lZIixefWRfYXdkfkBQM0FpbWU7XU9TdzR7dCliJjBYRX46eUg1XSVycFVkIVl4QXl3PTx8I2NgcHI/I25eI1EpaDpJYzAvW2tjISQkPHxvVV0zNmVuJUZLZDI7VjF9'@;
put 'QkZNdXN3cG8zQHRALndCd0ZFNW9YSjo/UnslblFhT1d9c3B5WFslaUpjTV1UNDRAa1hIQGtiUU0oZDY1RjJeI3s6NXdNeldwO3Z1XSQ2KjU9ImkrMWFUTVA0eU0mYm0reSU4TWVgUipBRH5FPGE8bHl8TGFgcFFzbkQkTjQ7XlVtTz59eD01P2h+MksqZ0tuYjkjTnFIe3ppLDQ5aFdFKGpFUUY6'@;
put 'R1RvR1ZqL0MlMGZZRHN6V0RpdFhbIyMlP3tmUF9vcFdAXyN0O2Bmbkh5eitSQzY0NSUyNnlkVV09bHNANHIzUTQvW0FkNnp+TXVkSl5NTSkrSS9xTzNHYyFgVDNJRStVRDVxMW5pdzFjU1k+VllpWVVUSFRNfV19VjNpTjxxT2ovdXxLNk5Se3pVfT9OJEt1S0swPF1UNDElaUBNcTk0UCliWXQ1'@;
put 'T1grYXc+OXVzZTJNJUI9ZVUoWUV5PUFkej1LUGQwVHg4TGhpUCh4RH5YWkZxejRvbU9xfW01XjQhflUqWD4kTTp6TG5TNjdAJCR6diNHVmRqMCJeSVNmVFNQfEp+VWhIaF1WNztuIz9yUSVPX2BdZDU3V0c4SEE7XTFAIjtoPEZOQntSWCZMSF5hfHUlRjQhVHYrNT1BYUBLY3hRcX1dL016QV5O'@;
put 'cGIqejZuWClYPElhWG4ra2Q7LCpXOXU4V0w2KVZha21JfGFVdjx5WTU/JEEyJFg5M1c1KVtlPFdGR1BJW0crezIhaCIxRiwwK0hTKHQ0c2hkaltec1toOXMjSUlNVHNJXShNOmIpUChFRTRpajs4PF1DVjFxVToobmF+XzVLMitYcHUwK2Q+enJVIXVEY0IsemdVdzNddiRMITd2bjEyI15dem1D'@;
put 'K09QIT8+SWVddFJqS1F5QTtHIng3eHl3bjBLT3Y4cnxRT0MuNWEjMURTPXNTU3RhP1hmKiFNQVlsQHVUblBNWSZuNHwxcW9QfW1vKytCRXRwOVskYzRhXUt9QVE9MDB9bTZzd195QkhqanpGdXNUZG5kcEFuaElmZiEvOX5WWD47RClHUVg6c1skWnZCKkJmd095aVIme3JHJUdZITZPekhjQHgo'@;
put 'QkZYZzppQ3orRE9BenNoYjtkZiYyMz9dNDI8NlldezBucS8kNG8pd2w5IzwmKD0jR2JLS35VfEFXTklfV3I1aXlrMD8zQFdFY015XmQrRT0/KDQoeH5GaD9eNnZ0TWZHMDV+Jkg9SVVAKnptJnxMMHJgVF57Kit2OnV8QyFrPSlgNHdDYHsrNzJSPSY1N1BXfj0yR2ZQdDsjak0zc0FYSTIzey9H'@;
put 'Ii5efnszbSpxamdnIiE2KW8rQW9qQF8rV3wsJXZZeF5FOFt8RDY5ZlF2dH5FZXAzOnxhdz4jQU88RHlZZzpxTllYajBgdnlNUnl6ZnZLcmE5dilSJj1EOnIwYCxQP31XKG54YCtNeT08K0tld3dRcUZlKWh3dk5PUVB0JUJZLDVwM0VZaiNFTkI4NyN2OXdvKyk5U152U2V8Z3BhNnojZXJQSWNi'@;
put 'aUMyO0JNWCM5QTh7YyhdKHowXXxdLjlAdHhKPWAwe2V6THptaVY4cEwrdz5fOC9MUi9CVU1ffi4zcSlMb0VsUD4leW84Ynp8Z3dsQHRnUkxgKHoveSU+SXxZe1ZlV29ldXNMWFhgR0VXXm9wZ0NVVn1SYm1CdysvPFk3U35LTjJhZk4zZV17T1B6Tzk+Nn1Ubi5gQlkrTzRUOXs3Vnt5KkYuMj5n'@;
put 'IUx5QUMzbD99K2VdfWFWbGF8XkJVY1RlK3VST1hhQ3NiZGZkYWkza1Q2ITZpRkNWNE88azdgdH4zIV53MUwyZjReOiJmNDJpey85NFJdUU50MFc+TTQ/NUc1Ul0uR3VPX359fjhJXXsuTmYrTDRHT31iOEh1ci5GWShbRkcia0B2TipdKHhjVWVUSE1DVGppU0NXXXh8P3xSb2YhVz5KeDJPTWBu'@;
put 'PHVjflZYPk9daS9Ke0dEeSkzPGNSM1BoQ0ciTFJpJHVaZiRLQmZkYjQ7P2orbT9EWz8kdkxmUXNEV35FUVZ+bzglLk9mTmwyKzBLQmQrZEs2XWc1V1Zrc1B8ZnRBJVQrWFBEV35eZCx7NW8yaTAyW0IoJmt6S1N0czlNQzpUdHVzZkdde05kel91QlMsfShmTFBqXUhMQmVsYGUiKzh5WShTb1dM'@;
put 'N3hifXBQd1k6cyNhdXYzLH0/bGhwOVoiWyhsQH53NlpjRSQyJDY6WXFrOU1bcGNqOkhCWFdJUDIlfX5ScX1HKi5YXV5BeGB4TFtfX1JANmNlOSt8azF+cEtJfmdLJW5OVyNMSFd+K3QzeyhMVEBkX1N6aCFkfFo7I3dtVSlyWWZwQiUhfDN7aFVAS2NoaCQhQnBgPkV9K18meDx5cFciNXVzYjJ4'@;
put 'PU4odnBmPDJ8XlM9NHB3azFjekYyWzw6PncrPk4xaltUWTlkMl5rIUwlaWxHJFlxa3hnN2g4UHJLSk8kMj18U1A6T2hZSlN9QmxjZUVUPT9PK21+Oi9gJmhIRFkyM3lEXml7Y2EvInN9fi5UISJuN3ReME55ezR1dnFle2YpNUFLP0VvXihsYXB5eD9jOH5sfVIoKXk+b0xnfDhIek5IMXdRTXtO'@;
put 'Tkh4d2FZOkQyfXx8Qnhba2ZKVjMle3JZPT8iNmA9V2w3dyxbaGJ9ZGI8R2BHbEw2MSE0NWR1OVU5O295eEhue3s5ZSghTW84dnc4cjhiNGtKcDdNJUJaJHAkdXQmOlpWUH16X1tTQldEQ1d+Um9yQEZ5RX1SbyslR2RwOiUoNHMmSSxYWUA1fV5lcUBLcXBQJnk2Uksve0plIUUkIlYwQGRVd1Ix'@;
put 'VTh5In5Odlt6cEBdSC5IYkx4ISJuWjMkRmBTS3EpTzdfSW8xYGJ8SH5XVDdpPGxyfT9lcFBrdTRzNXEzMmhsfWI0UE5YTXtmSnxwRTM8Kiopa3cxRnEzYGJhZGEoR3o+WGF7PkNRaDdlXXtEdzJ2Ujd0WXNbcGJHR2UlLlteT3c0WTBEZHVVZmtINlkwRTpgZnZPSDZ2I0YoRzQ8VXRIWmlsfTYw'@;
put 'V3MjfUg6KFJfODZoKWwuI2JtXWYpbH44JiVILnF2PDM9YHg9fjw8aDgzIWg4PS5pbCtsSWlCbGpbZ1RRWntzZCFYOkZfUFhoc3JeWzVVP0lGc3pxKHtrI29XI3h3e344KGVnJWZUbjgvQntaP056aHhjK20xZlt1cDk/eyFYeXw2ejV+dDZnVXRQODNFOGF0M3BRMCNAQ1hHd1luQDFuKCg3YXgs'@;
put 'XmxHdjo0L1ZOMXo+ejlFcXkleVJbSlE4WUFxRnJkfSUmUH5bfWUxVGU4QH5VLEh+V0VzJkYxfFc9TE13Pzp0dStBb2EoeWs0MSRSe1hsanddJkddUEtsfXRiJFghUnUzQkVzS31CLyl1dD9rKShFTXlDbTFiVH1pXzN1YyhVTipdTF9iW1REbF1YNEZlLHx3aTB8NUhQfnhPa148d11uNmNIV3t1'@;
put 'Pi9YXUcwRzt7MHgjV11ASStzTXk8N18jWHUoOTBTUjJjSE8lMFh8OF48TUw6Z303OGBjbHRGJCN9Kl5kPFdmc0JFKi9mWVQyMn45XVY1YV5HTF9gQGZTfVBhZXp0SlFFeDU5VyRVOT9oZldMVUR9XX05bkIlMFRkSnpSSHVoMk9FZjZRdnAiI3xbRUtkfC5QSk9TfkB5e0h9SmR8TlNVXihfNVp4'@;
put 'SzxudlZVQ0hmdmhpMlReNmZYLFFqYGUiT0Y8V14xfT4mUHE4PilyZl9nQFRkWH1WMFUzUENRRGxdVyhAZUUpfHFrTDchM3d2Y0AjQG53fkBrWDAvN1hfc2hJKHdJMHJMSDZFKXNNLEJKemJfTzE9WV5zKH0uamQqMW5ZLlY4RDdZM01kLzloMTFzaGdjQTsoLGl2IlEzbmtTW2NWakZrIXAiXWko'@;
put 'azdoZFRlNzhbSiQzJnNpVF5uSSlDYGIsNnk5Q1MiRHBALitbI2Q+ZSIyL1Q2M1ElPi9tK1dmKjZifixtX35ifipuYTZzaW8rQT06WkBhY3IuN3w/Tn1VJUByeUgvUXFfKD56OShjJVFEZCp3eD17MyFRRGhiNW9aYFs/SGxyO3R0Sk4xQmpiQzBhIj1JQDgpTTw+PT5vci9VSEMjbHxiNzRPdn13'@;
put 'NkMpSXxrN0EhVlRaNCslQ3VeLjQ1YXVsRixZcWA0ZiYzPy5ua101fXg7Q250eFppTmZEPiJsdipdSk1HVU5jLE85cCYlPmdyVTEhUVJfcSR+NUw2LmZAWXB3OVhDZyhAeTZ0YWA2JSI/OHBWX2pJJC9kZXN8YEM1aWAmY1pFeywuQ34sfj9XdlE0RmYyPSYzWzUkaVY5MnxHUH0/aDMkLmcuMnpb'@;
put 'XjVLJH57Nlp6VTElekVRVEIqP0ZGT08kX2xzclg/QldoVkpjQDZbbEw4QHlGeztofnY7IVU/Q3JifXszaUpEZEk8XmVyXWRCSDYrOnhPeXBVcC57TE5gQXQxW2R1XTxjOnU3d3lfZHdUaSswYzAhSypLTEhiPkFNV1UvKmEqek1Ea14kNk91a3xiRE02cmd7S0lJSzVBfkBWWmhZRXhlL0NgdkRF'@;
put 'dEcrSHF0ZG4lJUdVVlFicDoqPVh3Ok4iYmBwV1M1KF5VPEcwLzlnRXxBbj8lV1hRfG1pQSk3cmB4Q3ouT1hdYkJYW2RCJGZURDNTMlI9WkxeQ3Y8X05mQkFfWjJ2PnpkRCN7cmclcCpOZWUmdCZ5TFExcy9PY019Km5Qdm5mVVY6dH46R0Z6QUxNZUFDdHUufjJJXTU1fnhhcX0jaXo9al8lJEVJ'@;
put 'TEguSE8qQzFEVy5uN2gjaGc7JHJJaUNuQlBxdk9pZjc6X3l8Qm9adl01QD4lQ2xzM15id100bDoxTE5IMjsqaTwvak9Rcl41ZHxZXXpNdT8pJnVkb0ZZXW89YW5IcmdAej44fWZAR3MxOjNNYXpZe1pjdVZhPjJzY3hLI11JM0tGb31rREBbdSkvekM9NmIpViJ0NiQ1XyMuP05qUjl9bHI1bzYs'@;
put 'SDQ7flN4eyU0YHBmSjpQIzdXam9jWTEwWihOaV9mWTpNP0c6Pz0kNVAiOGtheit5aHd2YGthQFokSl9NKzsjY2BfYnArI0kxR29oUSNoJE92T1pCfDZsI3JeNGF1IUtFOH1nfjhAI25kUyRUPG1nTDhsaSZJdldERF0hb3cpPXMscCImbH44Rzl6TmdLU3JgVSFUPnFrPkE+XnEmXys5RlAuMkg0'@;
put 'MXxPTDFEIXpBSnV5K3RjVT0wWlhoOiROWVhoOkdMdC9tKFF0VCo1bylyaWAjIXE9MV5ePCI4Ql9BcX49NCVId1tMJGdNdXRben1eJFFgcCljJFZaZiVCY3p1QXphOyZIPFZSYCk5QlhwcXZ3JjVnUXdLVEQlOWc+UUoreldjb0YoZ3A2VkZSVndSTSRJZD89NyIwMHF9T0B4TzdfbClYSmZXTk5I'@;
put 'IUI3OW80fFVlfiZ7e05tL3ZCI0AsRjdLfHEqRShWLH5TIXJAZjljVWVUYTpbJls3fX0+ODU/NEZ7NDoyanhGSVRNfGNHQX1hQDZOTlc8STp9cnBxc0RAZ0VeTjY4bllNR3wmP2VPTGJhNkAhTkdtc0tffTt1YWkwZDNPJll8Q0tvKDd+Zy9ibC9wbzdbMFB1W1ssP00rTXtRRUg9PiJBJDddcUZW'@;
put 'TVguXlNjI1pRU0tPOkMwS3RzWFY6P2Z4e096KGBYIUdfTCozMD5pbj9gdkhOVlZYUEEsVURqOWtdcSY+eFpTK194YypNWE4wNCtVIn14OFBoZ3J2JVdkeDBIUytqVTd8PCZGSzE9JksrYlhWdVhLQSZTI0IjWEJLZnd7akAwKWFvbEZKKTdXfmwxYigoUHUxblYlPUIrXTcybUFsW0ZtUCUlVlAl'@;
put 'JWxpOjFoQld+RXBKYSghY3l0XV1eXXU8WDdea09YeFRbWjtiSmU8b2dNaDI9QjdiNmMldGlbd2o7KkZse3ZvLjldMyJWIz5wfmFpKnFkfG44aSQ6Y2FhKlg0Y2AsO291YlQ3SS9Ffmc5R254dk0rZEV8Ji5bKGJRNDleUngodSN6YG1VSGIhUGxqPT1FJkNZVDwzPSpmV1c5dX4lOmpMY1ZhQ3JL'@;
put 'ZTkiO0NHMn52TlNGXn1kPFYhYU4yfjJJejtvMTE9NiV+Nkc3ZFVgOGZDdUBGYUx1UztDeElMcEImaC5GeG9rWCs1NF5VfDtMeXNzc29HWTJrP2ZyLEo+MSUiQ2YmdHNGcy48UWopJWJnYihtMylbM20oT1U2Rm0wWmRCL2ooVzY1NEFjM3tYczxHLlpQPjdNQyo5W21sREQkRFFmcz9RTXkiSjJH'@;
put 'I3MlK252fHFjKm4kfmE3S3dIODhDS04kUWJaL0xLTlNhd3l2W1ZuP1RaNj5ydz44Q0NuNW9DcjREYCszJGZiQkxKS18kQ3FLczB3VVE2M3B0RnluZ1ciYHJEbzYqO3UkdEJ6dyZhd1ZKUH0qKXZDZFlMfGlUNW91R2BRanFtO1h5TX5Ka2I4cC9aPE58LmNJIWFeNHJWX0R1VF96PmV8Wl8oaXYm'@;
put 'LHc9JjkkXTprV1F7b29dN0h6SlEkPyE9fH4hMjB9cj1Te20qPls9cFJ3dXxDYGJEXk1fPkYrVU4pTVp1S30jKyNuWVIhd31FaH5lVyxKVV1laXZyPCM1U3dOeEF1RXliSnxyNF8kWz1mQGtKTVo1ZE06ZHZCZD1lW3JJL2soenVtKzNMcUI2d2VfIyRWM00yPXZ3PVcrUn0wPWU8VTBvcE9fSCZU'@;
put 'aTJdKyNHSHQ3Q0duJDI6KH1SYVohU3hmYjomKG0yX3E/TVo/eDw1Il5gayhWdDE7fG9OTjRlKWlbdUVReFhYSEApP0gvaSpmRz0/bj8wQF1VQ2AhT2F4Rnl1YiJkZ19vP3VxZzBvez46eDZKcnx0P14pdyQhSWBjejhaaDxTfH4qK15QOCtAYnVLamAjTjFRfVBgcnZJfjA0UUVPe3Zycmc4RC8r'@;
put 'TEAuJlh5ZHhFZFJiWXM+ZXIqMTxGZFRpSkc0PUIoVHMxaFUqNlROc29GZDdfXjcleyVCdV9gQExXSlNmZ1ZGc20pbnBFKEZMK1tNQ3N9Km9DdylzNGJfU0Y3RTk6Zklae2o0O1s6Wyk9djNdaj09XzE9ViUkYGJrN3BFZT5TUjpHSlg5NE5oXW1xQmJWOndMenNLfmNhNkxBSi5tJD0qMCJhQ0RD'@;
put 'RyxPXjk8OmxOcjBZTF9wKD1SWUpWa2Z9VUBeRls/b3diW35XSm1YTCYqTih+cU58Rj9LMzBzbil6dGJmZ05QK1sxTCReSi90VXFwa2UwY2EqJm18VjE4Nj88b1YydHZWYVo+RHJbNj9ad3VsUUVIMzRXZTZCX3AoPTB2bkBgN2ZYPW8rVGBHKWJYVkh1XyQwZzdHPF9oJDBnekdVe2FvWGFvQFlw'@;
put 'Z0siVTQ7RjZ1cVVZLHVHO3c5fi86L1olWzpfTjRuY15fVU5dRWRTfUY0b3xfKy9vJTpYI0BvYVYpaV1fVUBmOVRTd0g6JFVPOWpNNlQ5Ny5GbiJuI3piNHNycWVJeEIjVzp+VDc/LiRfW1dWTCF6aTx6V00oVmFNJn1gcCYyYHB2I2N9aV9lN1ZOW1Q/UTFzLk4uMkZ6X096VGFYTEdBM10pZDNb'@;
put 'cEtoOmdeTm1XJV9+NyhkIzRSXWx7S05yO0k/KmJAXz98eGYwT30mN1YmJGhJVDhPOlNmP3EzbHAwQF0qNU81Ll5sPTNgQj5YMz4jVT5wd0l6Vn5JYnkyaE5wZDt+K09UKWFAQF1xdUVhcVlWIis9YUJ0P21deG4iMyIpcU59KjY/a05AYXZKUH5kXjx8XlFibWZkaGFpWl9qRUQxRS9jZDNOajI4'@;
put 'JlM4OmxtIVNGPVlUZmFvSFJNZVNPcnthRX5WWmJzQ3tPfENkOzl6KXpUM2lmMlRpNE90NH1PN2lpWmc5VzMvWGBUJXc8SENsLGtQNl86XVlDOWo+d3g7MGJlZyF4NTc4RlojYGJeQSZCOjQ8W0cuRXJoQFVKck0mTCYzKkRgcDY/LjIzdXYlSkNUYFdEaVJyJkJ3am91aERaIVhFZlheSHtRW24w'@;
put 'LHJnUGRdeHh0ZGteJlQoN3ZkX3tbdDB9Sl5BWCpNbzNZZEdeWEhRZTAiemFHQHVaOUMrKjY+JGVfSDFGRkEhUl55cmJeeXJBWFNAMXJwJmM0UClPPHVxI3cyZl5MbCp7byh3LllaR1h5d3lba15re01QcDRpcEk+dGBoPCYrbT1HbEJQKi9gUTdwYj5HW1hEeDpGXXtUdzssTm8zWVtXMFdPcFMq'@;
put 'MStoXyxPOUBJUHxnc2d+VHU/JTdVWHt9PGFhTHQleT9IWzkhcDk7XTBzdjp8ZktmdCpkJTdAU1V+MjRAdnZPNV0xNVVvJW16XXY9Nl5AbWg5d1o1fHlrKl4kKFFxa2hsOnk/XyY6Ik1xbCluaXMoXnhbNH4xJWJYUD5zJWxHVCFOSCJ8bCk/NH5oOVBMNTlYez8rI0c7OWppIXMqQy5XK15rP2Yi'@;
put 'USVZRXF+YD5lZkFISUclRWgkOSx+N0ArNjo7QU0qQS9icX1HKiU8d3poam5AJnprZWN1QV9WO1ZEciklR19ERSQwfl1LcX1OcVl7MDtXIXlkZm50MUN9Sj83c1I2YD5rSmVsUUh2IyhwJDlzZUFfNlVocWxZVjMxPT00RHVMeGpWQiJqKX4+Im5WOiorc3c4ZGg8OSY0WzIhelVwa3wuRy5bM0B8'@;
put 'YX00dn1JWClqTH1IJCxlbHAvU3x0RjJsaUFkbm5AUm93Q2JNSnl+TD1iVVNlMFt3Liw5fj5IQk1waTdQQWtvbWJ4NUphb1NYekY2NzpCelc8YnZ+TFZjZkt7fTZWanlecjAqKz5SSVlpa0B6OSFmU29dSVoqNk9RPTBER1lpWnpDTH5IPF1NVlQ5Ul1XPWRfaEg3dHU7VXtYQmNDdHZzOCNtdn1C'@;
put 'dDAwQV9xJSpPd2JNLFolUSwpYTk/UWMiaWthRipMWTc9TTZOS3pPfCgpKE1EKjEhR3whTXdDeiokcmZRWUI/UVlCP1J6ZWtXR1lUPCxxM2BhT3toPUxxdEgzQEJ8T3U6Rl03KXdIa3pQMCldMTViYj9weGhKQ153fmtqfS8yOCZSU0A3cGJ0eGdnZmNZeU5TPX18X1NscEpxUTN5KXo3OVAwejdl'@;
put 'VTZhakM4KiFXYV1zRVhyeHpLW3QzYzlQJCIvdyg5KFZobzJxW2VRNEZlX3RQaUAycjRDNltvMy5fZUp1cmNbdjtIOitrLHZ6IzR7ZTh1b3orbXNLUSlmL1JWLnovaz1IVk0/SFZpVDJbajxIUSxKYmRgdCkiUXdEKFpWMHJmKkJ+aHoxW2NfTSxhQ2RwT01NbSNyKVgyPkdwdEhSWjIrR3NHYERe'@;
put 'VEVINXEjSkM6LjAsdmFSNlksLEpMXSk0dShpLjBJd1BpNkksXzUhN3YvWj1IcEw/SH15Jlp8ITFCNHojUE0sRE41alFENE9mRik/bW52aSVJaGBPUytZelA9aVZWfilNU2kwN292b3pQUyw/N0gpeml9anM7TDg+MVhhKHc3TS4wU3pIK0kkU1dydzRHJm9BJS5WOjNgOW0+Y1pxRCM+cE8zc2k5'@;
put 'VlouRFc/MiovUzNNaEBIell7dyl3WTErTExwLGJvcl01T1VbLjRLJU98I0w7KyVfXmNOTnB7dFp3bmV0LHtFKiskang3SHNlNlRnZ01oU3M3Wl58b1s/XSxlLnosZl9KcEs3L2Y2Ul1ecV1hSjssJmtbcmU0SV57SSRbcExtJlBdb144LGZSWSZwIShKSiIwUCwySzQpWChBaDMpIUtPc2hMR2xv'@;
put 'Y0olUm08SDdtNDU0flZ9T3A1bWZfUl97WTZHZngpMkorX0Y8PUs7cUxXWDMzIWJ6V3M3U1Y4N3NdYiM/b2JAMHlgOGF7aStpcSkldEc8XUxrSEtoM11rb2NiVn5UREReP35WRiRaKV1+cyspUVUreFk4MVEpYUI5O0BkbV8sc054cCtPXy9NXWZeLiMlfEw+ZX1lM1lAM0R9ZVFMTiVpSnpyXUR5'@;
put 'LD44ImY+Pkw3JXhTdWd+VEEzJW5JTEY9XVckITQ9NiV8bn5UOUk3eCZEWit2UCREUD1wdUhpL2kiSE1hMXJxUy44d3RwKCtIdTkzYnIwN1skaTopSzxmaU8heklhRWZzP1NtSyk1JTxbI0dAfW88ZXdgKFRPNFBWS0k0OkREVFk1LlE2JDRdIlp3XjBgMihVWFcoS1Jib0tjQmYye1lrVltLNl9e'@;
put 'QiwjZGBFXltCQUljelklWFN0NyVYe1k8flBdIUhyY2tudkh8L314dXc8eXo9JWdvOWleaVlbJGB5bF5fUypVVyNQUEx7Qmk9NmB9Xzh0WzY1KzosOENuJlN0IWBwKWRpWW58Szl5Q150czQuSjF2djJraCZlIylrWHBeIktVaTZqPUZ9bUFjcHgwUlhlJjMjLnw4YHI/bGV7OW9ldCFvdHomcF9H'@;
put 'UTJLWjVxI3Nvc05XZG0ycyJ2PyV5VSI/IUtGVTZlOTBuNzxYNT53MilaR1JnOTxpUzp+MX5JLytdfSMvT2JUTSNjaGxQTkRTKVlyY3xPcVJfQ0AsL049WSFfLy9LNnVTWCNRQl9QdXZ+Smp1ISosZVtSblplOS9SN0BpNWQvcngwIT1QYzJGe1k+RUl2VD51T1tdKTpAY2FdeHY8U117V2F0OlFC'@;
put 'TG4ybilwN3N0Zk9uSHZ5TS5gSUBYQFBQOF5qPUY4Ol8vWF8iSz5uOSlgUXZ0PTh3IkkxX2gmXUw7UDwpX1djTSZVZk4/IW9JWyZ3ODZCcGl3cG5qPkg0TDYkXn42dU50Nz1zPihBVmRSNUY7VE05anpKd2lVUktuTFlnMkolRkhmI1pMJGh0MCkkX0JDQ2hvSUo3MyxEL0ZFQT1OJEJpNkFhQiRr'@;
put 'Pyk/OTtFS0s9ajtmT11sWnd4JjwmIVohIVtJOkQvRDZGU0dwN3JLKERKVz4+NE5rX3EldTUwPyMyb31qdmYmUmMqWnIyWzk7OlRZMCRITTl6Xkt0SUYqZUgjMXFPaylATyt7UntbTUUwOzJFTDAmQHF5ens4eWVALDtGRX09e3dKd1goRWRJJDJnRGA0ISpATDl6XjhgWCJWfCRfNCZ3Mjc2Tz9l'@;
put 'ejxAT0V5WzRAR3ZQLllRfm1KOWJiUG9BdSNrYVpVZlpXT0FZaiI0TmlnNGo5aHlCeTB1PHxffTFlLnt1Zm8jcHlnV0NKQmsuWlgpJTkxcVtoKTJoIUBydVMzL2ghPDEkVG4qdmBKNCVpPj1VQCFsKmtUSnQ1cklhcVJtZTQ1YWZgaGZfZipZI0FDcC5IWDhESiZLSk9DeDZCX114QUhTSVc8aFpG'@;
put 'RzpDL21oNHtiR0pMRGA9Tzh6cntaP1p1Pm1nenF4V2xPb2FOUEVpU0klb2lofEU/OkNLOSQ4dDtNVE1EdlF9cypUVFg0U0F+UDZuX2xESj5FWSEsNURgMFhYRGBJdDZGS3d3eUF2IyN4VGVoNzBffC8+WEwvVlZXQEozTDEpX31nW1hMeUttX0x5KFhAI0xIeHZMRTgmLGx8QypZNzBRXXdJNHtX'@;
put 'YzFNaXR2JSEkcCZVfXNAUyIhXjQ5Iz0kXUx5RFhzKlM4Qnc5OWswb2l4MjZjTGtvJXNlJVtgZi50IyN9W2BmP2laXShLam1mSz1FZS40XWBmfklNN304KWxGa2VQMEcuZ2F6dF5dUCJ9VF4+eEk6SE9naj5JYCNQWlhqZzw5K3MkSC5NPDZXNTBgLz0saDxoIUlVTmY4QDAlSTpbPHJUdy9JUys4'@;
put 'LGdeSXM0Mmd9ZmkxNElLeU1USGN0ZTpZYV42WGJwOUBiV0U7NEdIL2U7bThmYD07PGZlXWQscWolczhdZCxQa1MyPVl8OFdQV1A9TWYxLiMzZ0x1WDU+bFUlJk1YOG45WTdESnxQclYzMX1Id01xKkRCIThAOD56WENQZjFNbSpgI05reiJ6YEs5Wi9xWkRkREpKfV84cWp6aSY7QiNKa000dHg7'@;
put 'elU7ZC4sbDN7dWM5QD1nYV5PNHZaX1Npb3RlNHA+bClqT3AuI1hmdGVjOT5sKWpRcC4jMmd9Zn1QT3AuI3ZsWl16bGBJPmxFSj5sVTIsQ2okTVRbSz9pJSYhKTFtL3xPay5xWm1DVVhCSXQ7enhXeGZFO3k8QTBEVEtiSSQyZyFPaFNxXkg9aiRNVCxEbnpkaGRsO0NtVE5rXnxlLktVWlRHP01r'@;
put 'VCRbWUZtKC9SJDc2bmdiJWdUeW1RXXYyfCZJIzZGTy9VcU5bM1FxJmY1WTdPMTk5SUZjKmwsRkUvfDNzaDs0XU18X0VZbSpEUl4oMilZUX5DTzJyejtoXjNqUGt4MkxteFdCIUs9SHRBaVIraz9fSDt6L2AmeTk5MGw+PT8lNyJ1bWpBMkFfalQkNEhELmk8YVdPPTVJentUJG57VCR4WVUkUGVa'@;
put 'bU80SDlKL3IkY2F9a2RhXWYhJitdZCwhbiM8ZmBAZiRMZmg1MGhwUjQ6ayplKk01MDYwUnMlND1LRCMxT2FePCUkLDJ8SDl3YyUhcWoxIjlYeGUsW1c9cW0uWj9mK0pOJEg5VF5RZkwqajV6bWZ5OlU/SilHRDlZUEA1O0dMOSU8VGs5cXBtOUx7Zn5JRE9+SFEvJCY/JUl2NiFePHQ7YzkxXiYj'@;
put 'YXRhJG5qPyNNTUh3UnIvQGUrfC81WD8hZTRQWj53Tmt3TXtxZztfK0AhSUQpZjAwLyMmUjpJRVRIYzhOYV5XPUwkPWthZjg5Z2g4JlJYOCZeJUNwODxFMjk5fDxESjhqO2Z7cXptSzs1RCU4JlpLeVE+WlRScn4qYiZDZ3ptaXtnQSgvWlRSclNtP2s/K2w1N3tOMi5IWDhVLkdnaCE2I04kdmxf'@;
put 'L3k8aDtII2plMXk4UTkjOk0hIU9yXlgpbDJrfm0qTylsfm0yMHpERGxrMTgmYX1JVStjTCo1ekBIXTI1ZzxPcTVCMGo3XSVmZXZadTRWbVsjMCF2WigqYSRGWHkwIyYxbGUsPGtkbHc7fD0obFlITD1QSGhtVyQyWmVJPTxeSlM4WW5LKUQyN2p3Z0x1cX0oSkxCUl4yPV0jZHRQOUdkLFRudihp'@;
put 'WmwhcHwzV15rKFVUNHhpTUsoJVNwW2FFZEVPYDYwIyY5ZDohK1FGU0w5ekdNX2xmdDtVflh2OV5dUDJzRzg6cDhZOShrTHFJYSRkLH1rYztVfls1dzt3PnZkc2V5XjxMLzROaD07Wld+a1NzZmpVJWV9OTh5PnZkeDtVflNleE9FZ1Vmej0wb0xlUjcreTZqeDRgZjcwYHwhL1YwTTtDOmUhPDFJ'@;
put 'dmskbyFgZmpVZU1UfUk6aTxIc0VsfDg5NE57N1d3dm1DanR9clkvez5mO3YvRWsrfDBFNHQ9aGNjSXNmY1ZoLm57eyE5dmxPO2lNSkxRezlRcyZ9IWc7JSZgYD88WldkZ0lzdmN9OHdsYnsoIWdXP2kmfkJTRyhmYGU0eXM5Ul0oWGpzNGBmKztoIUB5Mnt3PlBQejIvWXc8SH1oZl9mbFNxakU7'@;
put 'Ll1xajojPyU2TmFeTF85fDh5ITl7Zl8rZnRsYj07biM4bXlNLkEkSEZkLkthLjlsYislZkgyciRuMGQlQ1tqRlREdz51b257dWNlVDIsK0FOdEI/JG1ZJSNkY0NRL35Xfms+K2w1KUgkTXk8VFA3JDVnaF1TPWQ5UntIU1J9eTwrU1N7SFNtSFluQCMlbF1mO3VoO1JYcVVWbkNoMjBTc0pnNmpu'@;
put 'I3YuaCZpcHleV1BaOHRZRiZRPnZkI3BGZGo1ZGg+PTYkT2tgPSpsSTdLI0F2XWpme04kOll8cT9DKWY/NDBHOiwsejFZRCgsezxdIzE8ZitPM11abWhLQ3B1Tng+WThIQ0Vnd0xhLG0uajUuSV57TVRdKDVUd3hhfXtwPHBkYGBeIW5ZLjwhKTJjRHU+I2QjTm44OUlybXhKI25OayZKSCM9RU87'@;
put 'ajVvdiZjJGslK1BUVzhoIzxmXSMzdTlYaE8jMXBzZTpDTTNKZzs9N101eypRSVkuRCFPW1ZXL01hbENOPGZhLjlsMnFvO1JgIWNVLGtHZWgvTVsrLlkiSTJWZmolZiUrLiNYbSJKfiMjdTZNIkR0PkA0ZlBMYU5rLk9Xans/QmRbZj9lKllRfiVbXjhdKDt5KlltS3F4STcqKWhSXTpHTVleV1Bt'@;
put 'Qmg1Mnx3eCx6cns1MEArU313XjZgZC5XOD19XmZdI1FAKzhoZiNlSCMhKz4wIkJiZShaTSRfRmc8YlFhLDZMOHF0aUt+U2U2XjJqOEB8Q1JeaUpOJCJFWyskKXwhMnNKQi9mW3F6ZSNaN2pKKn5UaWV8OEBmbE8oc0gzTkt2Q2ZZN2BreiUyJCtvYmxPZlk3YHUob2I5K0I8QyJjRytoREFYWnlX'@;
put 'TW1CdDpjRFk8K21TWkd1eFhaeCJoO2ZydXhKI0p3RXNDMnEjbW9xeGxVWForfF9FcWhgL1YyNlpfW0ZaNjVKJX5Zb3pEVGw/LHgsRjc2QDUzOldNdWMrI2BbeXlBS2tQWUs9IygqdzpXRUk0ajBQKS5CRUVDKXYoRkV1dDBrbUJFRURgaDJ4VS4pPCFyXjhlOFFWS0x5MEUjeyNNNiFBdm1uU3VX'@;
put 'W1ZXakRIK3BsZT9TSzUwQCs5ZE55S1lpREdaKVpnUlNlMXkoaS9Ocyw+MXFsciUqQGUrSFBrdDpZPTRANU8xLFNTRGd2dHpbZi4jemxNO1c4QGZ+OHR6OStRPmpyNk5hXjkhenNXV3MqOVROazMiZmpDTUM/fHg7NX1FOjcqQDhxV1BIPXBsTEc9QGxmWS9nWF5xX2pSR0dTOVVLdCglZzdlYHNV'@;
put 'dnUrXTxJRDkxekFZOCFfenhwfFhqbVsjfFpddylqUjVsM1pSdCYzYmRmSVo3bF96UFRIY2A8YVdfPUZQUjg3K2ghbmMhU3ErPSQ9a11NbSomKUhTYG1QXnNMYyo3WHBMX2YsNEA1IjBxbF5jYlopWkhTbTA1Uis4QDVESmMmKmwhTiJEYjNrJG1qeCJiclBlNHtPY1MxKVlPMmduQCNKI2duS35I'@;
put 'U2VoeTxyJF9tPU9ufU9re0wvNHlpOytWUF5Vd08uWmIuSSQ5bT8xfThFJWg7OndFNz5dV1BhUDc6ezglPDV7czptUz9mRFlvYDtSVEpGa2V6PGokLyYheWxgfDhQSG1hcHo9KCVmZUMwcjtSXnhNNzx5aGJaPCEwRzNqZzNqVEt3R01RXjhiIU07K3dNbFplOjRidjVvIXlzK11JVUJibyRPa2l7'@;
put 'cF9nR3UvRzhNN3d0KGlSRXlldSxnWVBLOVROa1UpNSR+dmVWb2U3andnU3BdaURuYi55dmYuN3hEIms6QW1eeE8ve2kueEtUaz9CRSldXzJ+aSJTckBXPiY9PUNJYlBYekVPVTlTc18pX3xjKjtnQVhDbkxOVENrKXpjYEQzXXZdK3ohWHU6c3dLQitdflY5b1JoM3pbeDdzUU5NKkZxSSU1c2Uy'@;
put 'aE90PUQ6V3skX0hIWzBSXUhYRmA2eH1wK05zQCE7VjExKnYqXyN9Lj1McXErNz0sKDg4RXZsRW4yXkl6KzZnLEtVSmNKO1gwKSpWPzZZK1RIXTMxfVJWP2NCPDlaJlRjdEcvbzE6YlRBVytDT0JlQipZKlhiPHhUSWk3YWw8VndKRXNrTj1iLCYzZjdKfWtgbGEmWkkyWE9JV24jXiFLVmpqUjZh'@;
put 'KHFgXkMhfGhZUyxJK0VEdlhlVHF6QlphfV8ocSs9PClFb1JHXk5wYG93KGE6bkU2Zys7OklAenI0RWopQCY6aENXVGtdM2F2T0tTOVFtVmwkMGA/Ij89K3YvfFtaVjh2I2wyIj9zOFM0UyJ1Q0gzdGBpTz5nK2BXJlR8MzxFaVZwWmRvfV95VDdUMFNMbHdnM3hyRVcuNUVaSjxKTjF0YHxUfmJV'@;
put 'ZWM1VzV8eThqRSJ7Ji9HXXJvOVF4fnJWajxeb3N0QixiIThhTl1YTltJcG5BdFsiQHFgamlbMkVGWXFuJDRLfUtrPWdnRGlSW3JuSHUwLD4qQit5dmJBJD12aDA5XVFfTylvKHEsPlFCNWV7M1FCc21HQ2YoZyhxZCNnOigwPD87ayQ4fUUiUkJ9aWlVTz5DS2UrOWduVn12NV91P2BBcmgzRUR2'@;
put 'SkAvMWR5dnNOb11Wc1JjVUNVXmVaPVF3Rnl1YkopQ2BvdyhTNmE1aTo/ekRWamArPXpzb0VvfUcuMnZoRDo9cSVHMWUmTW9TNFNKUFtUaiZSaHElPDFCNko0RylQOzcsYUNJeXViNzwzdTgsbHhVI2VranxsaGdFeEldJHR8c3F9NzRKPVNTOC5WL1M0PHtPS19QQ0Irb3tHdUFqVXJyWTh0QXte'@;
put 'THV8LlNkVDRvRW99ezMvPzp7ey5MYTNTeVldVihhXjgyKGlNQTk1cjRkRU5TKHdbNFApYEBHeFhlYCxaezt0WCtMajR3YSUrLypKRDYxQExyRFdWMlAub1taUWsmXS5IaFVZS1s7KnA2JCpoM1R4QGp5OUBKKDVAbUxqYU0seXg3NFN+IyY1RzJdL2JmfFVWWWxnZVAvZVQmfURvWUZ6bWMxb3BX'@;
put 'elZDO1ZXMy9uY3NxPn1zTyk1XU5tTHEoQyxEMylSIjVAJmREQzxfcEBiRExyaC8mZ0ooP11HMyspbzZiTG53PnpQQ2xANzosVkNGK0pPcnZFIjJ1eGQoSzo6YSxpbDQsL0omPUxdLlV+Mzc/US5yeTczYH40RUVMNWlQJnJzMTVqZ2ErdVpVWkl4NE1pLCE1eFlDc3xbMjQ3eW5AIz47MVdvc2Nd'@;
put 'ezE2dUk0PHV3N3Y7X0ZPcSl0IUY9NmdTP11IfiNecEM8X3ZOUyNlPC5KJWdxImFjVyJRWC4+fG0kW3ZFejMyMWk0bTouYlImeENhRFs0eF5geFBUSHNgclI0MTdFNj0iOXQxUC5SXXtWP3c0eW5QNVUmTTY4cC9KKmZ7MklbVGpWe3ZSdz4sTkN0QyF2VkVAaFdFVy4icHthJFdZaTFhajV5Kyg1'@;
put 'VjF2ZzZ+S0tdQk5iO1A2cWBNOmAseTtAKEc+TXNEKndzLnslP1twVCx5Vj8xbGZkJT8jI3xeU0lmNHpIQlRYQzVRMEErQzVpUm9Pdm45JWBSWjVVM214LlArVmM0QHxWeVsiR3pvYX5+cT5mVT15cHp7MSszIWlwbXJjPUZJOUNYeWN4KUhdOUUuaUFKbzlSeVlDRVIpYkAmO31yQVJZPGZZeDwp'@;
put 'bHdfP3x2cyVZMStYYHk8ISFaUDhyJH5PfHMoMT4paDBiZTZINHpRSDkqT3csQnVINGpJLlouOz82d0huKSZxYDclfTxWNzhlcyhbK31DVFMqdSE4MjZpWGY/NFU1ZEF7KCE2SjI4MVJyZi5hR3dwR3h4WG4kR3VkMk5SSXIqK3BZWmV5U2JwTVtfNntlXnE7Zi5EcmddciFfW0pGK1cqMVFycylz'@;
put 'OCwxS3ciV0FGRSV6YHElQnIiZGZwOFRVTXBWcClSP1QsX3FeS05STWRnaSJ6KTh8fns7KysuIUlEL1ZBKjk3O3lQTSVjRjB+UEtlU3xuO3pnc3VmMElQcFU5K3x2TVJ0dzxtKGFud14jdD94WjBHdlhlV0VIRng4SUVZZWhTWSs8ZS9eYytJRmd5RSZMUDg7R2BwbVRFczF2JEIhW151cj8scmdJ'@;
put 'dVowZF1vYGUlU3tEKVhKYmk2b1hleERoaWhhSUxkQ0heSGshVGpgcT9yOjsqeSxlREJjN211blNVelRzKGRHPVN5ayo1NG8mcU4qR0pncE1wUjYxJmwxbmBOYGtnJGF5W3RzT31QTTBEKn1YZmVpKGhgL31nSSQhRzYqSURsLmtJciZhKlMoJU0sfmh6WTolTVlXMypZekZkRSpAeSx8c3x9MVBN'@;
put 'byNTOkNPcz5zeTUkLmN9ayxgUFomaGtPYT5mUzcveXksaU9AUkMsfXhaIiRuYEd+dW5kfHQmKjhdfmJZVWRsZT95QWlDN3RFdFJFaGRgUj5jWiI/OGgifDZ1ZDxyN0FOJEJWaltiPSsrS1dAa2IjT3YmcVY9SX5KQnkocUozOTtUMmZfK3Q0QXNVUyNgdEpPZWZGTnxxblYmM0ZHSmFtSU1YUzxF'@;
put 'M2gqd3UpJjo0SFVwQFhDRjIweDBKOEp6MFU3ZFR4YHZTfSRycVh9SnpaWCI/Xl1bckd1TnUuMUZlRjhhJVlzKFZyI1FoYU8yKSVsQF5PSE92UShpfkEre3VTaXMpRHBmTm0jNFJza28oNzN0OyZEXkBsflRmOjNvYDkkakQlOVp0Il51cGdncHlvR2Q7JFdTNTlvaVNpQUNBQUFmREtBbEJ8RWVM'@;
put 'ZWNlIX1BNmQrJU9LKkJJSUYsck5hVV1Sd2YzMVZYJSphIklBQUFBQUNBJUFDIlg2KEEkJW0lLyozYVJySm8ydUhNeVgmJFZYVy5ma3xQdHREd0lKRUJBRHJGU2pIZ05hRTNCeXZZJG5iPHN2fk5qPFN9bXpxKEx1LFtWWClzJjpWTlQ9P0dzfk5JbWA+M151K3x5MFJpKjc+PSEveDM5U3xOT05M'@;
put 'NDN7MiNbMkU5YlBWJmYzZUBSV0UscmdnNCZnKXZmLCxFIV5lTWNoPz9KcV9jTWV3KkFyMHpuV0R1YlAuOm0yMCMsRX1BaGhRRldyYjdhNEszLylWQTViQjdrYXRpS2ZWMkJQVTpgPkgjKzdCM3lCIjZSXUBXJHhTbHhMNE9RaX1bOiN6ems6bWQ7X29kdWhOfXx9bHtSfn0odVtrOTo5a00iSDpV'@;
put 'Ql5MPiFKfFFaVnd0Kz42Z1B3YjVBI3FOe3N+L1F+YSNsQSpgP206fjYsUyhsRUkxTl9zVUUhdCFEZVQsZ25KVm4mWWVLIW9CcnIrSTg/RUZ8X18wSEluOTlTLilfP0grcTJIN1A3VCkvc2JMditiRH1TR0lrRE1VJHhsNDhhRDVuY1VhTUEhIi9QJiFzeE81InM6fnIsMGo9TnlMMldYY10zM2Jn'@;
put 'PGtzS1Z5TkN6YjxrTXpXPlNxNG90Ozs2WjV6TVolPlNETiY8S1lZdXkqdyJAOV81OjUxd2hbazlwMjtqY2BrNkwhZEBQYVA1UWd1djxfKVM9bSEiI0woPHVEYlJGWEAyS0ZBcEo9JUwiX3c5TGUlYUh3WnZgNU0paGwyNUZyUT1QdV8zVFNfcWhWd2c5fCJpMnEwSVVzUEZYM0VqOzRGIi4hU0w2'@;
put 'Ykk6e2JoJUcqOG9IZjJ+c3dbQyxnRipOMkxfViYpW2RaKGome0wuRztTUkEsWzchemNmK21MV1R+PDhgN3NGTnEqVVZ1fTUhdW44ZGlHcnk4bHVzSWcoai8xMGxgbVBROmRaRjpUVVVFRHJ1ODpPSnBzJnswJG0yP3tPbjFPOXdYRUcvXigmRFtpYUwmWjBTO3pGdkwrOnE8dTBRcDddLnlHaUY2'@;
put 'LnRxN0o2aTIjLH5nQHFzIiQxLykifTx4b0I8Im9AdCFBRVA+Nis1YSQxJHQ4fWk5aEs3RDBUPmchREJbR31mKV85UTA3MVsvQ1BIQ2JfOXo0JDssQHN+LkZqQkNpUj4lbDYrdEwkTz56OVZ6IVNbTnZnNzpGPzV2bThuIl17c1N8b2B9THYkdms3XTEpSW9FRWFuWn5WJGd8SVJ3Ojx0fTlKREp3'@;
put 'Q2pAQmpOPGwobj1EPCJTPGVHXiwwWjRgcitTYmRlUDUjR1JEOGldT0o4LnsvSU5ZLDsybWwpN1QmJiwwYitfUW58cUp3THF+XzlUX114WUFmV0l2Vk8xUjEhdj5ZYkBTdTxhL1ApSDV0MGNIP3w7VWVSclt1elU4PjZoVXg6KjtGTlE7USldUX58VVpXbk5HM3FnXSFNcEk1XyQlYiNaPjJSfkYv'@;
put 'SEpuKGZrX2VNPEV6JTIhO1BETz9ZVEhrOUkwdV1+akxsJlV5Mzs8YGIuITQ2QC4iPkNlUSV4KSUqV0wjVGkpb2UkWFcuSCVBV05RMG08cikwTzw6NzVfZnhSeiUuN1QqTjhkWz5gNDtyTWtHO313fDJiel9bNENtWXdaWH5DP2A3Uld8YSJSIn0zTyRGMFMsb0dgU1E/KnQ3VG9JQzhlSy5WRmR1'@;
put 'OipvZF52ajUzaHFVOHZXenpHZjc3T3tOMiMuZnArRkdMVi9sZzAjZVJXSWFnbmJxYE9SaS5pczYpSEBPbndqcDJiUk4vOUI6QSVdLEBEMk5xaEVVYkQ/SStCJmVyTmUoXTxqPHRQQlU/Tz1GaEZidEIyKEJia1Y8JjBFanluIjk1SExxWzBlX305L3ZtK055ISZDO3k0MU8pPT5zenY9TUc7OUwh'@;
put 'JHRxe2F5cUh0QUAkdDdNYGFaaXsqdiNhPW9BdilYTkVMIy5qJndDM2lkckFMXiZuPWlORUV3Mk0xKm5AeTdbbl08M0ttMnpUNHlMVnN1Smd2YEY2dyRUeE16U2J7QEVLRHVJb312YGZQPnJpKThJWWxfSUVgcng3YExWVzArJV5AQWh3Tnc1Y1Q+P3poPCw/bjB0NFFmOixCbjVUNCR8ekcwLls2'@;
put 'U3QuV19yKi5qQlhqVkk0O04jWiR9WEMoYF40eEcjM09xWW9VQ2B7SXYuU1t4JDhdfXguPVRZfUZ9JHVKMVNLW0J3X2FdKm1tLF5SSi5BIlBXbUtsekRYQ1sxIlY0U09wa2lxYXNNWiEmZlAuUkhdWC50dWcsNzshVXQvdXB8dlUlIU5iZFlPK3VOemcmcHtmPmt4bzZyalsjIndAcXNReDxzOVAl'@;
put 'e15xJE4kYm0/ektqOiZ6cWZpVUxgTGN0TipkQ3ByXj54MHIqWHQ5WzdAbmRXVm9JWlFVJCUzLl5Ua3l7YEAxMUssX1JwTHYsSz91IVROYFh2MjdIO0xqJS87NlBXQ1pNInZFZW51ITo/TyxYcTpiL3NpNyk4X2IrM2hdekQwelskbyZYanMuMD40YGV4SHN8XSkjYn5NcykxX3dyXUtDKHArb2Nf'@;
put 'OyFsLDp6Y3B8a3l7dzdJVDcsP35xZCwqOGxtSi46c1NBSz88QF9oWXNTaS92TUUvaDN5UyRxR1RDbWVANCVQUWIifD8kXW1qVlFOez17QjxBNWg5ZHRVR3FbbXssIzMpN11XRGp8WEg2WC9wRHd6W3VlV3dydjY9TV5eeHBmWWNLSmA+SiRrPV9CTCN5KnpNL1NxRntzSSNIWkU0I3s+a3RKci9G'@;
put 'Pz1qSkBCdFhkIW9+RSJtWkkwRH5pUSZAMiFHcV8/JGsoTkRGKXIocFB6eGU+aipyUUQ2eGIwJFIxJUl8UVBSRU19RyRJR0E4Ll5CIjpzKj1oMXUwQ05oUVshIWgzOjlSUygzISUibDksTmlTdShALmVFeyNMLCFsbn1+QzgrZzpINWppTUYhIUhiaz1gKzBIXnc/Xm4lT1FrflM1VEByI181Xztt'@;
put 'dGErRzVqVHxPfDVxTWxsTzB9NilYVmxHbFtrOSpDLkxfYiN+YDIkZ1BAJUt6SWhQRjV+OEFWTjYjODRRe0koTTg8USg/Xz9yckk2K3U/fkQzbVhQLnkoe2E1IiFbNEYzY31XeC9UbkZuO0g1ZDFXIUNIWEghOng6ZzVGKUlIMSEwayE+fUwmc3kuTDZOLGZ6JVNDZ05CQj09QjFSKUp4JVI1YDNq'@;
put 'LlpTaCNubFduTEQ4TkFEJjlFeDJYYzNvXWlea2xmV2dmSDk0aXp2byRHZjtyblpdOlRbW09WZCZzVVY/R2h5c1hKbyN3cGxUOkAmV2N8ZkdXLHxOOVVQTVUuUWlpZHpAMlA3R0RQdUQzPyp7YWkvMywlT0JHbTN0STJiTCE6V0l6I1p+WVM+TXg9JDdUVFF6Qk5MWk1oUWZtO0VgSiRrMEl0cCFz'@;
put 'ME5RZ0FYaTE9eVdTcVIufXRJS28+TG99PGM7dGN5eko9KD1EcDdPSz07UUFANUJrMG1DbWEoRnI1d2opQjs5NGZ+XXUmK3EwbyFGYiVpcF1fJEhfWWNyKkI+V15OPVVfQmkrX0A8K1p+dWdrMWVsLmZUUkZKYkF5MSkzNjtNSkBMTXYoTVN2ZFRHRlUxOWs8Y0VLPSJtVjUjKnVxb0dENiEweXJP'@;
put 'Nixvd2pRZzZIbFBPfHpZKypXezpYX3U9dHxUOiYzUyxyJmEvODhjYVdrdjE1fG5Rb34qaTp+I10jIXs7dGJCeStYRHdbajkoZEc2MmQ4KFEwSHc0N0czfXJxPHY1KzN8fjw3RiNZa1spTjRDZSthWHtPM2gjIVBtdk4mTW4+Oi5aPmZMS3g5SEQwfDB4fDZST2RVYWwyX3RII3h2Q2R0Pmwkfnpw'@;
put 'fXNBYFFVSS4wSUtIOTt1OG0vOVF0VjRZPUEwP3lmUzc7UmwjNHBMeCJNQzJtLCMzT1lsfEk0T2EqWXpgQjM6Oy8wWEtFezNjXjFxemhFV0J6M2RWQWBTOWlYbjR3MTdFZ203a1NEN2xTKnBDU0BFI0IqamxhTSsvKT0iSXN0Yn1lVDIvfHdQMiEjTyhIRVE9UnAmeXJ+Pn0+fGxnXlYwYzJzTHJh'@;
put 'c0NoPTJxRkI8Vk0iWltiRnxLMjFgS3wjU0t1TlkxP21JSXk+ODhWOjhtWExNeWQyZUUqcSleRytIdyF6SnhtVSlLY0IsaFooaCZxQEslcXhLSHUuJVVCKlgrJltmOT1NM04iRVJbTndpMD1GR2BoV2dMOzE+azc+T25LMVpGVnkhfCtMLGtObjxxZXZqals3dC48diV4XiZLIUFtfFIldHlAaXFi'@;
put 'KDlaKT4xRnZiZXAoWWRgRl1udVk6MX1MeFohdH0+O0BvbHErKUdQS0tYK0V4Vz94bSgkY30oQHBlcSxyTFhmNTcpM1c5JlYiND4oNUw/N20wUSx7ZDQuYnFQNklNIWpZeEI7VUppNk5ZenRGfFI/aFF9LHteRDZtTVR1cGhlfCpAb09ual5JQG9vUVEqKEtkJGxea2tfPGN2akVpVGtoJT5peipH'@;
put 'Un1ObktVRF1ba3YzJENfZj1udi9OamAmXU0qYX4ibV5wTU5tIV10PWhWMVZzQno4VWcsRTN5UiokRXk+VnlEbllyKXI5b1tJUSNXIiZ0NShHc0guS3thdzskLFBZY1g7KHckayVBMENQK2RIPU5mI0YpaFRgQjgiVDMrZzpQVm45MntXInNId1hqPFEjJjhCdGJiOm9Iays2NlAuemwlemA+OzNa'@;
put 'ZUBDNjl8WS52O20xPVFoQkFHaU1DSmxdSnhOMzVWQk9iYTpOITxGaSVEcWB5ODliOGBpdFF2d2NXK3lKV0xicWohSFpWZzV7OkwqVWlTJn02ZXJkSWRCRHMwJlpJT2FCSil5QCshanhNQFJsPFJwaVpbZWAhcVMxLkd9MEdfQ2pwPXM6YEo9PzhMZFpwaiprLyNNe0khdj58PnNCbTFWbWo/VEhM'@;
put 'Qlp6YFRDZ1puaX5EYTlWeTkjMjFaVihJNzN5VDAwQzlCfm1gMTg4QFVuNT9aVC9PUT9VYU12VlpyOig5JXtvKThqcD1KZSkxJkFDcEk1JFo0a0xTRyhuSldyOHZieC9sZk5QQEJtdk9EUW8mTXgoP1dJdVNHe3A0WmNNSTtJdzRwUCkuenpOK25lcnByaFRUSmF+K2UpaztDWjo8YkoqVTteaDBT'@;
put 'S05BbmZCRFJ2ci8sQ11BOFBsdVksOSxqNEVGZCNtMVhxRD5kLz5dQEdWPE86X0dCPTguXk8oOTJPLmI2bSkpLztoX1NNb0lPcjNdQVE9S2pZKEAzKDUzdVlhKlJ7aGI5K25tN3pKUWFRYCM5PjdCImNheUl1WSErWCUyIlhWUS8iUGhUPTtBVjAxUTlBYSNla35NTk9WUDBnK2VFOVQjOW9ZcHlV'@;
put 'OGwyMnMzNSZxTDBsZGE1V050NUw1O1V6JWlxTzk6ZiZAeSltJTNYZ0omST8qYC8uaix0ZGM5UC5pQH5xPXRyWVJTLFFWVUtaTnx0ezdmLkNldygrJi9OZkUsQztpYzwuMWYsSkRFMldQMHp4a2Mhblh1di41R2RSRHxxXXhKb302LFA9MCwzclFRengpRHpUOlZPSEZYP1ZvbHJ4O31AeEtbbUBj'@;
put 'cH0vUm1qeEpGLmokcXhQX1EiZDNWVCVmayh1VCpKMXhKc0xPRE1xL3JldnYxIU9AN1ViME8oYUdwYFBJTTkkK20qWzJOJmgzZmZCTDcvaixOWzE2ZW9mP3JaJTVte1o2Ji81UU4jNGowXTkxUW9pSHRXUlMzQE5wSmVqbE5qNzd9RVgkK1J4KiEoMzt1dWVULzxeeFEpNXlpdTVRKERnc0hDfFRn'@;
put 'UShRfCtQcmxjbER2cEcyLiI+KHRxNjVLd2JdRllKLyZ2dmxdfmR8RVJmdVN6bTAsKnQqXiRMbUwvRDN2NVE1aDIpbyFrdFk7dilyeFBebnQzYV92bk16b2QlPmRdT1czOVFqcmdgckVWI353eHBSMyE2PCgpbXpZQ2ZeXW9nOkM2dzoxRVhLXlFrXjUhM2hbWyUkWlJGbj9yNkRufDZlUENiX3FH'@;
put 'fWV3aWcwUlBQLz5YKiIrYVQlam8iUz5FfFdvV0l4N2BAOyk1KyFVciQ9RiZdYlh2Zmk3U3huVjJiKlkzbTJFdz9oTSFJfSFFK3gjOnlhWiUscn5aUmJZb0lOMz9sNFhlfSw5NzhHZl58UGYmazY5TG9PKi58Vj5ZTGUwSWFKeHolNVEyWUJZSU8lKn1meHMpR087UnkyfXBVKTYkIUxHU31OeWRn'@;
put 'ZF9SOT9ebWM/b3BoPmJfS2FmP25CPj5lSUEzOmNJeChJazxAYmR7VllAMnZFeyExKGlSbzJrWWt1QExCMF47dGteT21vJlZLM2t2bS9nfXBiKCloJiZfNnFCbjwieUNUMWRYP2osbG88Q2pAeXk0Y0kzJntmVFldbFNoSjNyS1Y/WWJ9bEg3YmhfMHRDWnZAPiliaDpeMThZam5NbyE5UzZFSzlO'@;
put 'PkIpRFAoW15WPTBLcDk6fnEyWEhmYmlMUVZCaEg3NiUhbmNIY2NdVGN0U2Bqejg5dSxqakdOKWZGS0EwXyIpR0Q/YlJhbnc2X0s4OkA0Z19leXsyLGcrODheUG93bCNYfEFOS0szPj4xYCFaSlNfMDB1IkhAQkI4amxAR08lW1kvVyRPfGhzQ3FOLD87IjcucFo2ZGxPQUVPIlJmaCpONW9FJU90'@;
put 'cyo6W1k+OFhfUExITVZwZXxMSzdLPFdmYT83T0RSeEhLaVJrR09DPGYyRWdla318Syo3TWYyWUF0W0c7LjomRSZHPSVGQCV7WWkrWj8ic1tJczFQJnwiUjAhfl9yMDlvQF88WG9uWUtLOyZ+dFcuTDU1JDdobiw2XUk3RF8wcSJfUjc6fUReQlVgQ2V4ayhVVllbJFElNE4+Uk9kek57NG9vKCIo'@;
put 'IWk/RWRKSkxRVH5OJGxfZ2Q3OEt2dE8yUCQ2Z0oidmQ9NUxybGZ0cHFuMkw0R09ERlJNcUBOdyw5cigsel07NmJ4d3g1O3FhMmVKYil+VkJkYit1RmNhVT8zMz9rQHFvRHlXNHIjdCElakUxTTJzamB8RiR5JHEoanNPOW8qXVJWaGMvQW1SdzUsU1MjPU8lNSR2MzUqWiledWc9KCFYfC88SXJK'@;
put 'KlhCeltvWioyQXI2RVIoZnd6RmZRblt1LFNaKD4lYHV6LjhHa1csMEVlUEpYbVd4Tz5tOEJ5OH59O04jUGYjVSViTVhfNCFsVjFbek1ATHlMJEp4eE45bXwxIS87SHZMYHtVUy5Gc2lPXyVrcm8/SXlqVzF2RCsyZUB0VktfcDs4WSxdYGwsPj57QC4/XXV+dz8pM3osa0xHR2R9aiRJXUdBYkl6'@;
put 'SEE4VzB1TUs3ajl7LlJlX2hWblViaWczI0ozUExmXWZnVyRYVDtZcCt5YElWZURWTHA7V0B2N3xlfn1AYT1BMXNueUpJO1piZVlmZERfWEA7Rl0pelFpazJqOFFLY253KE9jNnBSJXBBKzZ9R2h4aEtOYl9VKU9GR0o9UEIxUz08Uk9KTmQvY0hWYikkWkU+USFGak42KDFwRSEyOjMiKD5VSEQ9'@;
put 'W2Y3QCpjK11EbV9sUmdzKWFCbFEuVyZhTCNZeFpXb3k5WWEleyh3U3hTPzU9STNwWTN2MksiU2RjLytAOEN4KXBLRWRNWTdGKGJ3R3VsOSZRQiRFcyJDfnlAJHZCfmh2QypTSkRPI2NdOXF5PyYkIy8+fU5Ic2hpVWVaS1MmeEsjMHd1KnRZXUB0VmZlOl9MOXddW0NQS3QyJGlsK3xeVXc3Qi5u'@;
put 'LlsueU5yenpmYWpHY0o0fCQ7dz92a0g/OyprZykvNE9aYTBgQH0hQl1zY0NycGRUJWQsW3hbalFoeUFjO1F8N3BXZyxQT2RIV1R+NUIlWH4xRiJWLFk9L2o0ImMwRk1GSH5mIWkwWTowQSpIPCp2PD9+aVhWQ0RTUmRaPTY6XylDZzl+aFh9ZktwT0okKEREaXM7K0lPI1BLfmVdSGNMWGJeMC4s'@;
put 'JD0xfGBNNkVCLkpDKWE7JDIxaD5EKnJxKTdtUXgqJT1sfGZ9THVTXSJGVUJ1bHM1YDI5bVV1P0JuMkU8bjAjZ314KHNyTSlZRHc4PEJdMGV1NGJhXlRJP2o+JHNkWzo4ITs3KkwkM2tFK21MPyE6Xzk4KDI7dGp7eVNKWHIwc0R4bTJRWVZSUTNLTT1GVEllMzkmSilDYVFnfGwyTytZVGMqQ2B5'@;
put 'M2NeP2dxM25BNWhqclpMUDU9VSZDfj16WT09dVkufGlRJVIsODAjY3MhNyNuRWphW34vMm98aHgoXiMlJnRaUzpIcm0wUFkvemowdTFbTUciNm5SSHpzP2FQL35EMF5xIWRTfGxJYy40X18qO0Q7I0hdW0VQbTE2V20zMjlVcWkxbEBxdllUI1pkKyEsQ1o8WUlOZXVqXS5TdGdbQGtsQGoqR1pG'@;
put 'TDl5QjR4KkIiM0tNTU9RLmlgbUxsL3F0PkFKTW0pdikyQzZvV0ooMD1vIVAlPFc+dFJGTy5rbT5DOXh1QCIkP0EkczpvVTtAVVBMaFFKYks1Zl5tNkhMTkNKUV0vbG5tVVVKVUlZRHBDMT5Kfn5rO3F2PF10Iz8iLHpfVUomXjY7byRMZWEmRzhNbWQ5ZHYoYjZGOFtsTWxuQ0MyYSo0ZTBvZWx9'@;
put 'YnxPV15gdFRUPEJFOldCVV1uejRWVnxUXjRpfWxwTC88fmQ9NypUZThkZ2c9TVZ3JGBrQ2lSUEo9fW96UlpEfnFjPF1iS217P2FMSFRkSWMsfHhieUdyMENmU3goSCRhOFNjQmxIZmwsSV92U0I5MF0zKEY5XVIqP1RIMTlUMSVmckF7X0g1a1Y7fio8SEQoKCtWQTRRWnJfTTddWjREZXdqaWd9'@;
put 'LzI/My5BQnNTR0ZLVSs1bUBKPzBQJFVPN0hdckhYQztjQXNFSE9tfFpXWG00WDxGdjpLTXtoI3dSbm8pR3NYNixFYEV4Ky9NNCFKcm4yKmgjR24rTnkyXltJOGchWUdPP0xmdi5qPGM9Qz5hUDElbF54RnwqTj87aisxVUMxezFpdHJRVn1bKVlvWmpAVzoufU40cnxmM3Eve2IheGBEcTkwWV4o'@;
put 'WkRzSTQ6YG04bVlMJVdHcHs2aXFOO2xpUT9kaEVFSztSQCUoMzUsRmFpJDJ0dEJTPDozVyZFV1pyVXZAdyM9Qy5vWWJ+PDhtRn40TUpUYGAwSTYwKzV1MWwzfGd+UG84aDlwSypuKFBucWhFbmhbZ2h2U2V4Nj1ZbjRCXVFHMiF6MVJteVlCckFVYGsybkguJEdVZzpwQ1B8Szx2fmRbT0wpX1Rw'@;
put 'eXkubjowQihALlVfUm19elchT24xJiMuPXQjMiZ1eTRpfXVffT5GfiYmaiVhQ2oseFVNYDdgI3dOZV1QOmNRTDRaUj1vV21CaVpWNmJ3PDd1XnY7JjIhQkN2IVttLEA0d3VUbV08dFk4MmFmVlgwRm4vZCJ3Tj1ZNm9tOGoqOmBIR0x4M1UvKS4sRjJSMFc6VnNbO3NnfkVDITRHTldneExGK19s'@;
put 'LFFFL1d9WmlVN0leZy9WfGBkcUk+bTFPTUE2JVRmTSZqOVFpKV1ZTy4sdF0obFpGNmVxNHRAVD5AOCpvTFA0JCo+YWwmUnUlNC9Ua09pOyNxJW5Qdi5WNkYvMVhuSmNBUiJZIj9ONVQ6NiQzaVVjOFNZUl15JXV+aH5zQEU6TDwoeWgsR1B9ZnI1LEt8JWQ/VndCSkV7OFdPTy5FVDFQdFRuIUlD'@;
put 'MUdJWDNQNGlidDtgLztBP05FcyF6Tj94N0E4NzA+cjZkbE5lMnIxN0RKUWtVfCNZOSFeVUREWTxMX15eTV9fcEVOb3k6M1UuY1phWVdaaXR3MnB6dHsmdi4/NllVWlFkTyhPMndZSWQsX2dOfGU0LlFNZVUwLmk/X303QFQlaHhHbUc1al5mNjFAWFUjfTpzW1AkMChBKnVtRDZVckshPkNOfUJD'@;
put 'T0ghdGpjfnlWLCN+ZTFQaFowJD9sPWdwYH4rfU1rWCVDTGJjLk4+dD56PFt8WFQ0ej5aK29WaEN0S3JDXyooJDpLW2pwJiQ4JHRrdTF3QC9rMDtLRlJKfFc6O0spN3s6RCNWKG5DOlR+PDRxWTB+dklTMH4oWX1KSU0mI11QVix0L1ZDISY1QmgrSEoiZEQ+SmUhW19JZUw1OSlUciMxUUZwJl5a'@;
put 'V1g1amNeQXpvVlslQ3libkBZPSguKkxlfF5MXXIsT2JyVzhLeSNuImBVI0tAMSRwJDE0ay5McmJKa3tQNzcpTkUiPFRyZmExX2w8dThLKEJ1fitzXWVeX0AsbXEvYzBeLE9QZT1qJn5iZzpjcCtRcWs4KyI4YXYmU2kuQV10Qyw4RCVLaXdAUSRiam4jYkw4RFtWNFU/aH18fl9zLFAlMnQoYlFb'@;
put 'RCVPS3dZQD1daHF2O1QzM1BFVV9oP19rVlszX2JJR1l0Qj1nVWBSdVhtcSx+cFsvYH1URjxEI0Z4SzZkfUNqailrandkamdSaiNkK1lHPSppNWp9OjxocyFxSSFSSXU4Z3V7YFlmaD9MfTpsZTZTcn1IdjJ1LkU0W21CenpudURdZG5dcWo+dG96fDNRSEo4e0BJZzZ0QCZhOzwwV14rUENhYEcy'@;
put 'IiZJUjhtNixkMXxyJWVwMkZAMVcqTHdyRDwwXjM8el1LTyg3YlFyNj81ZGIyV21gRyFNNWI/ck8lNWU8P09bUHFLTTpMKk5zczNWIys8fDFFLGFXUy9iKkN5Y3BaSGdyY3tpWHFkMCQhanYjT05BUjErRSE9YCV6KnJLViZMKjwjTFVedF09JnU3P2pufncjXVJNeGJoOnN8MnxnPzxxZXpVKlNf'@;
put 'MGxtQlBQPnY0RSR1YWRMPmsyN2tGa1lVXXdaWHFnPnRkUzJRPDRYWE8uLlZ+KnJsKn1pKjUydzpzVUY3OmI/bzR2Yy9qPno6UVMhU2NvWSZpQiVuQWx0QiYhfWtqfCpoLzBBRSUwXylXRiNFdFNNMDAob31DTjk8cjckO2tgSD5oT3ZRY2pbWmtFYGJUREpKR2RYN0xFWHQ+QnJeWypyIy8kUmp3'@;
put 'eWE1dTgkX3cpNzA3WDxMZDFCL2JIN2RiZF0kbGpySGJpViw0Yj1hb2VIPkVqUk4jLzUqfHA3PVBLdXV2Yj1rUWp0TixjZFhjWTdLW3VTdll6IlpuY0E/S1FfeFVbOzA4ZF9UZSpjaGU7JVQ4RUdPInBzOlZWL0dmTCFySDx9ZE9tQjV3KjdPeSVHRz42dDZLeFQ1TzBJe0M2QCxeXyYjK2NXQC4j'@;
put 'SWNRcV4kL1tVXkwhWlgweX5NakpHeCp8Qmd4fHgvR3d+Sl1ycHU9Qit8e3YpeExVLihiNVs8d3YoUWFjTWMydzZNX29MRnxJJTRibFI9I2tMcjhwUWhhKTtuOVo8VyVSNTE3LkZQX3pwbG4/VmhzQiFNUGxWZz01Wzt6eU1WY3lZT09JPF0/THozIj5CQlp1eDpOfj52Oz12R3lIc3EjaWVFak9u'@;
put 'TU8wXWc5eDFjUFhEKjt+TGN3QnZNLm1sQ1I2W1ZPTC8mWlY9VHQqVmNwY2RGJG5RJDk2Ljg/eGQkUmVyS0JlbnZjQGUpOF44ZHljImYlKmYkTjRSZX1Kck9wRFJqOSY9JUJ4W1B+TClJOjspVFAsNm99anl1YH0xKkN3bGlkZU82ZSNQVFBSXVdYczp0dFZqdnNQe3Qsckkxe3g8OipoT21dOjhU'@;
put 'NE50IX5BfWZ8KiFzZyE0N0NdNXBTQH0mN15qO192N25AYXkxYFBbenFGeHIicnJ8fT98cW46dUp6OilmNU9mWmwxKGVMe2lwPWE8ZG0hYltCYWYzeE9ZMWxSVzxdZnZXeEMlRnJAJm0jK3VwOWY0dzYvamhSViVdOzc1MTN1b0BbKDlkLFBSekRKbWgoWjosNTtfND8uTEVKW2Y4UW8rNEMuKEVG'@;
put 'fmZLME1COiFrKzpIeChDYH5vJVdlajh1e250JGdaVHw3Jlc7P15mQHtGfkJZYW0kTlFYb1M6Z155TnluNT1nMm16bW0oIyUzQmllXlhub3V5Zk1YRURdP2NUWnpdYlRUWT5IN0dRVFFKPzNneTQ1bDpxTTBBRVEsXldeKjAhRFJNVjdsI3VuMHwwXTxZe25DLlh+M2BBTShpcXRQR2xBKkBmMERl'@;
put 'Rl4iajFrJi8zLjFabmh8cFNnPmZ6QUNNNnZlPCYxbDRzbWs8YSkqP0NZPnw/WHpTczYjOkE/S3M1MXgiZGN9KXQ8eDBGOXBbd0MxPz46KVtqUWtWdXNYUio2Y0REQk4keEBkPDQ1TlZfZ3QhKG5dfVR6T3pFZ3wqZysmOVhAamN+QkBKcCRaV09PUXdjRlIhNSM4Qk9lYCRhaFJ9TH1jPlR6clt0'@;
put 'ejUwWUhHWUV7Rl5kKy54VEkmYjx3LE1OcTJoMVUsR1lbRGFTUmdOSGQmPmtQTlhyI1A/eiw5SSE1NFUzfFlyLkl0aDBnXXUjcSlPQysvUFRra1Q2RCx2N1laISFPe1tiYXRvUGlUMmxCcE5YUS9uOj4/W2FgIVFBfGNuXkFJYX5qNSIpPH1qSmkvOWxiW2wrQ2F4JUthe2xvc144emFyTS5pOlR0'@;
put 'NTxvfCM1Qkk1NjFPU35XXkw1Nll4dXR3ayh2bmI9XjxEOD9XVmZQXmdDeltDPChHfDVFSHhYemsmVG49Xi80I0N7Pjk8JENYaWtgey5DTlFsblVNb2oxdzw9fn1tKFNocCZdSC4yRDRyOy4seTMvIWZgSClJOW15czB1NEhXQylrYWVhdW8yMno+O0Y0TVNpW3tHMHB8VmEsM2dlOEwhKSlEYCpE'@;
put 'bXE3eHFWVzAxRFRSezdOR3ooUUpxWVkzZ0VLJWJde0xBOnhySWArKmw+YUdUUzRgZ0JZXyVVTU04RHV1MGRVWFlrI1pjWzp5dHhvV3UzVVZEK3AxVjZkXjJmJUgjc3VZRClCeiZWOzBZQjo9bTBkZklPZkBBMDpfYTUwfWk+JG07c3VlRHtoVV46cllTKHl+cj10VUVqIXpPOi5YNjdYRUpWUTt0'@;
put 'WmxTLEI3Lno3RmF1UFk1QFN0Pj9fbD9pVCg0MGYwZmpMeVdHeD5EK11ieDgySSNmMS5WelooV1E/UCx6Ty4vVVM9cz8xMTpDRlFtUUAvOXVAdXFVSH5mUGpzKzpyRT90PFspTXNHWCYjT3pmKkpdfSN6KUMkPk5gWjBESklDWCZvNzNMe0hCUFIrVylqTFVoIV8+OUI+LG0/KzIyWltfImd3JXE5'@;
put 'Njk7WDg0RClxOFN9ZiZ9Kko+cCh0YF44QDAjfHU8N3dUSys8VUM6TzY3TGAwcT0lL0Z9Uy98WXg6cTRDNFM6UWZUM2xzQVhuUk9qQmBKR0dpM3xhVlk3Km47aj51NHh+e0hSZylaKzo+JCohYzw2IW4zPypUfFIhNjdoIitRYy99V0o6YTw0UGtDR2BlWmFdKXo0P003LG9XYDkwTzJ2dFN2bTFS'@;
put 'cjkkaVorO10kNSM5KnZzeWxRVkNgLzE+JixiNHFjS0ZTRHJGaSpQfi9TKiNfUnVgNkdzcUNDXyJqaS4pPDsjOmxDfGQrKF41ZTdjRXA8QmFFfUBARnFBaTdDblR8X2RCanIqczdCcmJ7ZGtdVzcjcm13aHM8R15pcVMrSm0hQVd8S2tZQ0AkTmklPS9CfCg4Qi8jYUFPeWYxcVhDMnY0ZXFbIlRu'@;
put 'SVpFY21TQi91Mkw9XytuQVlhRmRLfkFPWWxaIVd6NV9dVG8/QSRAZkZkZ1l0Z24rK3U4WG9PQkY8cFZvP1QhWnxqVGk7LFU7a2R3ekJFMW09KUBZbX08eHxldSI5M2EsUDkvXWNvd2p+MlRVcUN2KyxLTF8xUHpYV31eYjxJXkNXWklvTWZmJTUxeEtoYCIjUnJNXns9Pz0zeFddSmt+PDs7aih1'@;
put 'aSQmb1d8S1AucEptSHM6YEdufFVEZTZkV2BmNlticmd6R1A+d1VNcnV2TERSPG8kbWFoQGkobGJ7fWFgaHJEay48cTF1QjhSLlErMlI8WD53dn1wS3krTlZZOkh4RFlaImQ4PXlFXVNmL1pNX0Z6Pmt1Pnp8b2dyO3hydV5xOXdbLEIkdDA3KGFkOkNRXkRCTWtRNCF2SC94O0E8N3hgY2VvLyF9'@;
put 'OHhVQHpQN2s6PHZmJnFqbCkqSE1NKU9Jfjd+bmFUcVZCLGNqbSJ0PXg6WC4xPjB2N3cjR1FyaHJmU1NAJkNIdm1xZmBZWCplXjl0ZClYPmQ0QH5gNTt9RCFzdzFZbVNhIi8jeFo7YXlKajN2Kjord192WFleUnM9cnpmWzAzW0QqM0pePyJRQW0oNE9aVGtwRT5VPmcjKUxfbC5XKFc1eWBHcyVH'@;
put 'dGgxVnVHZyJFJlY2cHxZR3RkUyNoVikrTUBRPGhhLyl7aTxPYElLUiRrW3M4XkZicF10MjxrT3JROXBPR3ZhLz5vNj5Sa3BiNls5YjB2S1R3M2pCWn4hYWxPVTQyUEtKKFpieGtGSHRvJl1ncjoyS1dFPS9GcGtQPGk4TDRpUEdHekczRVIufDg3WDUhe3VKVFciaTdbYHUuIm0+OCJeO19ZWStp'@;
put 'MShYSzswZywjLDBlJWNGRHhCNERZIUAwblJ8cGkhYDFuPWI8bnEwN3B7US54UmVxLyteQHdGOClnWSlFOXBpZE9GJlVFLyZseUYqTzltaHdDJER8JG88N2JCMXBrQUJde3N8dy9wVlJAaj9mPXwhUnwwblVQL05daGReSHJzIXtePGU8WGdlJDtvWSkqSFZ9Sz5lR2tkM29wVGRBbDp0RF8mfmQs'@;
put 'WDMkKStoVTVmYEhpXl10dGE3IS9xbDYySHB0eH1yZVpEKW9WcjQzKmwxO11aRzs6Z0U/PWoufkB7dzA+QnRuYj9fd0hjOD9UUGxQTkhDMVAiTl5tX14mWjc3bVs+bXpiZVp7d2szZCQ8STMiITtyYyFCejZFInpgM05WY013OHxHRHAla1E1cCV8VEJTIU5oKy80bEZXQG1JfER4e1U8NmJZZno/'@;
put 'RDJLJFZpIW8rL3VKXlI2dlBCMllFQ0k5WlVlelNNbEZnfmpyeC90RXdtUUZfeGlJSyZzVnpXInhXIV8mZT0wSmUydjZQVj83OFoiVE9TdDpaNWpONzRONHd1SSV2YzRATiVPT11tWV1jPVI3T1J9bV93Ik8sX31LZmJGY0l5T0JVc2UqJllKXTp5W1g1dFZwREtPNT1ybWVed1FwansyKG1+am5Z'@;
put 'e2oxTD9zVXIqSnkuYDB6JXpBQDF3Rlo/ZktKNk9xbzp8MyZgZkBkXUMrJj5OSVZkOF91WyEyZ2Q6PjtfMD85fnZJfHR5InlYeDk8M2RJWl9tX0N0MyEqalAsIUJVfHhyN2NdW2pqQHpQWH5gVXAuSFMucFpxZkolLntgdnNHdSljQ2VWbTl2NF5wVy9gIXdRIkEvOFpwaD58Z1teYGVeM2dsU0om'@;
put 'XndXUGxiSkMuOnM1RUx8P3tRSF1CMyRgYTJge2g2Rl1zV2dYbHczOE1uInUxbDYvb3ZCKnVaeERNZDoifUFrOjBFNC4pcXA1N3pXczZmeF1Jb1Y6KiFSIm5mM3w7bUA8MUhUWHl6LnF0QGEpWXpKSkp3UyJPOV97P3cyZGh9OiRtOjpqKiRGRzVAKDYyK2c9bWB5TktWS3BTXnNdLE9UKFl1R2xu'@;
put 'cytJQ30hKiRFQWZtQ084cl80ezQoMFhSb1F1ODd4fnUzfVYqdS5SflhDK201JWN9czsyKUR1QmU/PT90UkheMSklO2NiamB1LFIuK31fYTVLRDpwc3UwSXEqW1RfZFZvaWFhRWhwPFQub3hGU09kOkYsKEYmZGkldDJuWiowTyVWOVtvOyNPSnd6IVAzRFNnJW5YT2FaRWlbR0B3L1UiT2pXQU89'@;
put 'WS9WVEJae0pFUDxTb35gVHFhaTl8WjVEaHYqezA9amIlLDJbMyJVWFFZU1R9YDU6PzJDdVFEOFNWP3hdNiZYM3w4Lzk0eWMyUFkyQUAxRTAuTCQkTlB5YTlkUWRCL089SiZHbTY3WTE7bGtsPDJDNWRwSDNedyVQa3M0P2FPUCFYK3AxK0hRdixYKUIxMT8qeXhQOVhhYUQvZ1RlNmU5aFVLRkVB'@;
put 'USghcHVOdTVURTNmOzxJI2NyTSw+KCErd0RIWGBhYjp2clF6KWgoekJWXyUzPDh0VUdWYHtuUVE7dHhbL0xEI15kfTsjNiNnUVlIQnxbV0IxQF5xVnZ8e0h0X1RnTmxQRENefSpyKWheQioja09TKm1COF55O3RJa3E4RHxLSHcwdlVCZT9qTEVIamVeM0k/Ljw9cSYqd1ckYzJgM1IrY0YseHZM'@;
put 'Wm1aLGAhRTRjJUQqbCJVMWxBTTRIJmAvZyJCXjMpLGNhZDczampKMU5OYTxgYXciRnxuXW1oTU1FMChee3RSL1A0bV42MjkkQGFqUDRBald2JUwiO2plOyNjSVBwfD9RaXduU1YvKlo+PHZsJDh3MHVMXkNTQ0VfXUVyZnd0UkxtJmFZcT1ETTI3TDYlUXRXSCQ7KmErTzhdbUgofmBtI3lDb1My'@;
put 'UH5AcT1XeyplZCpDTV48V2g2UVdaN3xLUm41cXZKIj84OFhaaGhLe1o2Yik0TldTVVZITkg4bkQlMldwXikrYGk6NjQ8RmclSldtd2BMaElKKkpENXtIQGFDbF9VPDJXXi85NV48WSRxZ0skd0dGJjReLk9nMkU7TjYjTDY4JmYkailuVmQxSE08KmVwUWVUL0hAIkBoLEJrblJHXjpbI0pNT01z'@;
put 'dFsqOlYuRmc3UVBpQ1QyX19Iek9fbVo4eSE4fSlERlVxNUpbWnBCfkArQmQ8byQyTX47dVduSCM4MWFWTWAsYzZDfWckXy9VOkxBSkopbHNkO3J7MzReQj5yTCFtQ1lWcGU2Pz46M0suIj99VVEyS1toQiEjYCoxOCMreEt5MUUqSzB9RzdSOD90SEQhMlFXRjJPbH1nODB7X2NqUTxhX0BLfSIh'@;
put 'YzF6OlFVOGg5dSU/cW4uYSJOYGg6OyFoLEtHbXczKClxOElhfWlSZkwlRyk+OVchbEdVXmQ6Jld7U0xUOzlsTSxjImV5IiwmcXxsOnw0RXszdn1WNElAdn1jYzkjTkMwO2woL3c/aGQhPDB7Q1ttOXJ9JXtHRD0vQU8/aHp5TklxPkswNG08RiRFNTtNWD47e1A6X204RmAsQGQjaE8kd0dVZUQl'@;
put 'cjBsSnNkfUx+XmZtZjRHb2xGbSV4dHI0P2MhS34kL2phJHZPaiw8KDdfWylubCRGT3JmbW9UYipSQmg1U3Y9fFFHKV18JDQ4MXkiVylXemUxc1VuZSNTaUwpRVZ2LEw2UV82TFNxZCwjNzx5JVpWJHFWfGpuWF9xc1skKEk5UWNhNChJelF9OD5vbkNAfk5BM0JkWHI4NHU8YERtSClVTV5BcGI2'@;
put 'LixMZEJvdDQoNkIub2R9TildYi9JS1Rhdno3XyttOFg9SGBtNEcpWiQrPmJUZmdYVTVTNTQ6PkZQUlRSViVRLzRbYlI+YS9udVp9amF4TU9DUDVUXnhsKik8UDBdUmIqZCl1bHptMEdmNEdnXmVWLEheWDViLmZMWlkiQmFnc0c0bUkjLCxDWWU4MXAvVzBVW3pKXV8hc3JNVkBoMjQuVWU+ZSwz'@;
put 'MEBhSjsjJjQpJT1qaDZfelRIW15aMyNjW3RvV2QrSkxAXn17a1VbRnhTcG02ZH02bSVNWjB8PUwsIXBkSjpHX0QoVU1RRyNoKm1MRUkqWCwvJSxGeVNia3FZLl4jfkVeajMrdnA7VWFHO15+O3BRZmZzR0JjfUMreEZkSGk0bGU4YE5iZiJbbFtlISJaWUxLJTxoLjYwXihZX3FlbVM2fCVJJE5Q'@;
put 'enE/UywuOVR2fkIrX0B4NWgyNV1iYnc5LltadHZqOChmdkFaZl89e1dGbGMpVm5+MiEwYyZnQ1JOYDAqTXh8dE4oIytEWDJxZUpzblpjZSVBRm1AfGYqeT9wUEdAellSRkZpaE0peTV3UyZqSjlkemQ3XiF5eCU4d3plRDVxVCQ/IWFfS3loaWFhfE4zNmgwQWVaNmleZEh9eCN8NDAqXld9OUxw'@;
put 'a2Y7OjI6X0lXeFRhI2kqKT9OOTVHfi5CZDlvJCkpSklNVGpgdjcvSXcwX3VxKTNYY2h6TyhjWjt6PUJ5fXhDNThBVCFUMjxXVnM9PSMqfSsobXJ0cDM/SkpdRU5+eW53bVt3b0Q9clA2W2hVKUBiJi58IzswM1NkP05SfDpEdSZ3QCxpYVA/Kn1YVFdfbjxkYzhdXSJfcGVaT01yV2VPYVJHWFly'@;
put 'eyheVl85OzYmM0ZoaUVsd20jYFMsWng1XjUqPzlnPkdeZS9zXksjOGVYZ0M2azNndnxPMWx4fWxHWVQuXjlUam1ee0pecHtjeV13ayhBS0FqUFhnWz9hRXZ3bER0RkJJPFpoTlRRYWBWUkgzOlZMW1FfdC5keSlfZE1pPXNpU0R8b2ckKFp5PlMvUnUsNn5iTFpsen04UW1RY2YqXVFTJix6W3Jw'@;
put 'UD9pXU00T3BOKFdxOz59dDxleHZ7KnZjVnhwZlA1YCJfTmg0YDw8T3p7MTZvKVF0NCM4TVtMZCoicDZ6W09bXzFLYXw/NXQ9SjNAJjNxPnRmfTJUeitodSlUKTUuLm5yeDNpaT5rQmolSFIhSGVYQz9TI2RSSEJLOURsW3w7PXwxRlh+JVtTL0lqfHFmfS4wLzRgfWxyaWE6blF6fCY1U0NGYXtf'@;
put 'ejcpZSQ4dTs0VS9qVVFUPmdCWktxZixhQ2RdZGBbdSxAWFdnKm5dSFZ5W0dlKiFTe3ddM2k5ZG9Vb2gxWnhHezhyTW9zPmladjQ3azk1em0mdit7eHpXYnduM3AwaV4jQTV3MFVZMyh5Oz1JTWZeZixQMDhPS2FaRWBXa2RHaSloWF9gNSs+I2s4UzNNI3VkXXlqM1J1dipgTiJ6WGliXm45XVJE'@;
put 'R195NDAzYm5rQy9ZL3ExdUlpRWMvI0d6aTgoQnx+ejZTb29DZS9rfGhBdm9FRn1afHYyMDhhLz90V2E2cD4sJTs8WWhRNFZ1Q2MkOEd7IzB5ejQhNWx4djVCVyNnVnxFPX08ZHhpLyJFMFAxZE5sMWpuaExNMmo3Knp+QHciYn5Vd3cpNFFHdV1wcEFUTDlxdW1lKHt8WUddOysvRSR6JDFPZHBU'@;
put 'R1RRb3M8LDdUYUc6UnNQRW9zfXVVeWFrRVcmTDheMUJxKXtJKCxwUXA5eSNvP1hQYkNxLys0ciw+cEhpY3lbYjNwKShaYCNDPUt2NTBsKFkucXt6WmlIVEBRYVkkUldtRTk+WmZ1Oi51Rks6cyQpMD18SnQrcC85fTlER2Zmey9TWXxgMGg7RUB4QGY1JEopRk9MWmx8aCN6JVU4Il04QSpkIkUh'@;
put 'T3J8Oy9pPXFmKCNNN1IoTUZfZnJTJC5PTDR5XXN6KTIxRW1FRyhzRXNXW2Y8RTFBTDNbe3ZTNmAsWT1XVWFzbnl0Xj9tSmV+XWlIISRUTXxNWU95NlJNaXFlTjFzNDU3M0l8RV8iJDtDaDRdfnUsYTxJX2YhTGtELD1hLzsoLmNzc2UrWixofXh2ZztiPiUqaCFPWGE1K0lGbypRUV5KNUc9M1A0'@;
put 'VUUhbi44IyRmXnF3KU1OXSQ0Ul87MGp8cC50PEpWWzZ8LDwvPG0saDx3c2MmITorJng2e3lldj9HTm0xUkZlJXBvMS90V05qTmhEcDBDX0UkdHNtJmRsbWhNX1dVZn1rXnI4R0IiZUY7RzdbIkJ3R35sN2xpczN1Q0lZflZiIm9Id153TlZ2ZiQuQTh+MF9kLj45PklQdXg1KTUsMlpLYDMiOFBJ'@;
put 'bUhqemdGaWVqWHU7OXklSW9WfjRFV1FzTW4rPEs8cFpbaChYbHlSJGAhTW5qRXZtTWAoKCRQOz1+aDdiQXtBQGlgaTJnR3RoOkJqKiYuTE53b0x9eFdKMERwNTJ0NSFBSykpfG9JeXYxRHRXVm5yNlpXUDdvcVBrRmcrSkZydkNrR2VMRDlMY3ksajJraDkzbjRCUiVrSGlVb1F+XVUjWXdQaFll'@;
put 'ezQzNmx6dW8hWypkUUgyYXxnZ3pPYGNbaFpSPEt1citPOW9BOl87Wj0uI0pidnlHIVoyPWVPMEFJS0t+Y24jQFtPMEw7OUNSNzAlWixQO3kvcEx4I0wrdUhSa3B5KldJVWU0UkRAY3EqYyx6NlpDeylrNH4melp6KzIpL3ZnU0FnN148QWFTdDFRVH5sKDU/TEgpeVBvfmBAOiFBYSR8O2JTX1F6'@;
put 'Iyo1TmNoemxxO1QoajgmRWpyZ35XeWwycm9hIjt+UTtiKj5QbF8uaWAkZHlnUn1BdkAqNCosXmBeMHBiYFkueGtwaTtmRC4kSlJ9VyxeVS5gTGVLXSh9OzEsNmY3Vz1kRTJtcVE6ZCJJIzJgWmlBTjpqakRHN1U0d3NZPVtaUnlSWypSJT1jW1VHcTRoKkpsai9ldE9bTE1TblFBdDcpZVtSTkZH'@;
put 'JE0kMVlCWFEwVFtJWzZiXiF7TFgpWUNBelJlWGddNHB7SyxBe0dsMjdFdShNSU03Mn1UYDtxWnh+UDAzUSlSJjIocT4ydW0+NVc6SStMTnh8fWk/a0ZuJEA4a05hY3JhaSxMUGkpYDR4aDV+Pjg3IUlbY0NtIXgmTyE4XyVWSjgvTHBTUWMmcEJfWDVBZihXVDIvXUVSR0JFNGBAL3J1IXk3TX15'@;
put 'JnNxWmkuVlhlMmM2RlM5dmhbSSw/VCZrayE1Z1tkP3QkP3dDUTIhcyxVSG9mTll5R2pUZy8xP3AzeW1KK1RMO2pOK0N9YmAzaEIzYU1XdlNpcklmfVpNNGRXQmhYIURNaD94UGAsRzBpMSxHMDJaX2M5RmhBbiZVQyZ0OkY5ckg0UUtET3ZTcmRuOzE6WmY6e31panEhXy5qOGEzeDBZcUhMO153'@;
put 'Xjk8PyheRCxoSkM0Tj57dTNvXSM8W3x6Om0mfi92TEN7VGQ0Yyp9KWNpV0I5Ok1PTXglVnl8YEtEWiJwVGRpMjlZMDFGIz5FfE05SzJbezNQOC5FdkhYNjU/UDpTPHduT1E/YywkVXk9eXhWd0lXb3BpOTJjQUpGNlApZ1ouSykuSHhHM0JRVjEzTjYmZHR8UFJpZG10bFBuVEIoYUQ2dlZ6SjE5'@;
put 'e3lYXT9mMyFfTC51PmU+JndteGVMWWR8ZyVhMS5fM3NETylJWk1+a08mSEM0fWFwZjJIQjpfanNrTlpSNjdeZ1l1IV9DZT89Jj9lcCU+VX04bF1fUFU8dThTeiIxJTEjYmgyQVMjK1tvMlhecCZ0ZVZkODNYZmBINm5fKHxEMX43XU9MO1B5NmooSTdlKV1XVUJibn4iNyJTYXlsLyRTMzVhQSRq'@;
put 'KkIkX1MpQy5tKlhyYkxveT0rTkp7aTI2UGIiSEgzQlVPRWJlJXJjS1VCTE5aOjI8O01TNi5nQjdzNWNZOl1iWHowXzZXPW1YZmVyLHMiWXs2JDNobjpVRmRKTEBPV3RGIWd8cEIxbmZDNGJ6ME1IdmosLlAiQF1jL1hyaUxSP01uTl5UQ0R0PH4xMkkyeTw+QCpxXyg1KTh5dXF7aTd2QGwyd3Ba'@;
put 'YSkoSnNQR19DOl5QKEEocT5KejUxW1BIXiQ7RT4jKUlLWmlBRT8rcWFPNWVNQT5kRiRRfitFMnE7YkkoPVZhdjQudnl9WHRdLEczRlpZMC4wVXRZSThKNWRAUkc1R0h0O2MpImBVdG1pZ2t2KVRCOjpTfkBgYD5NZyk1TFAkcXJMentFbmB2M1FDe1pBVz0/KUpGWStga1R1XmVAKDFMXWhicndr'@;
put 'bnEzeFYiYGhqPT1UQGFDM3VHXnY9RXU4dzxsRlswTFUmQWVJU2FaSGVHP3I8Zno6cF5aJVp+aVFRUDZSInx8NHFhZSo5ciEydmRzcytDODhFblBULmBkNmxiNURncWwlYmckV0cqfn5IZXA4Y2J7X24mSy4mRTE/ckxveC9TOmNKYG8yfkVYQmpGQm5GdFtELClrLyw+JCl0UlQ+PWhPV2g8OFtD'@;
put 'aylKVVRYKk1pWX16aFQwc3JzbCQ1UzpxST5kSThkQil3XmZxZHRjeiQ7V3o2c205VntEUlBZRipUMEl6LkNCPmlgMHtCcUB8KXJPTmYuaSYxeEB5LmZITyNRZmRlInpUKXlgLEhXMzxFXV9ba0ZCY1N6QC9ISzlgbC5tKyY/SGl4dSo3UkdzOURTTl9UI29GaiFVTXtxY2t4Xm99RUAkdHpsbUdt'@;
put 'QiVsSWplY2RKUCp4Y3BVfH1hQiZxfWRKYG87eE5EcTs+WWlxPyVAT1AwPGRpIXFtPXU6aC58QCEwKGxzbSY9b0dbJE9OZzQiTnIiX3whUlNQckVkb0VNdWJMQ09Hdm1FMHEmUjBAN2NaN2tyeGU3cU5wQHVIN3BqfmBNZUw3SWI9WmMpcGwpdGUwSDRgKHUkPFQ4OlVGXXFjIS5jX1BPSnIwYiVD'@;
put 'Pyt1X3pfRDBXX3hDMFszWWNsfDIyTVBEfnZTMXhmTTF3b29BN09NfHNWXktOO1d8TFo6IlVvUHRlRHBQN0dOcTZMd0B9O1lZRzdXemBNRz84Sld5IUhtRHpZX0dQfWVxYj43SWElZWBEZl0jWzpEL3w8WiRlPChkPFtHbGp5eGs0RUsxVU5tTUJ7PUE9bHw2SllmMiRwRjhDLm4rdzd8YCVYcHhp'@;
put 'TTI+QG5uTDE7W15sRV00OFB8b2p+WX1TOzRBX1VPfip8IXshO3g8KVJKQ15dOVdjT0dIJWRtazZdaDIkbns9dl1WW3wlcig/UWYqcWE7JHFLKjJidC9yWixdZ3RtQnVLfGQ7TyEyTkdTJjFAPmpfanU7Q3t1dkpCMzJtKltmaXxsSF15akwqP0VmfSlRR113Sz81QCtXQFEqJkg2aEVsJT4qTmBl'@;
put 'YSJiWHhmcy9WbCs6NUVeQEB8Ykh8eEdTVCZHLHV3ZmJ8QXJYNlZ1QCldWCZPTTlSJmIjUD40YjlFMWVHK1lpXiRMRndrd2RvajBhaSw+UzdMclFsW1t9Rl1CZmk7d1hkckNdOyleVX5bSllKSlFhd35hVV1GeGNIT1U+VVYhOCspKH5pZyFGdyx7azlIVzZhY3dJZ2l4N0xubytBdWNbbl0sUSE+'@;
put 'ZE81TGdkPzB8ZC5sZD0lWjZ8TjY7XSQkIy5LajJoaD9kaD4/KXwiPjlXTiRHay9PUSQ6ak5XYiEkWlJbZTxPPXkhRWJ3ekY3M3hVdkskNXtgQDZDI2Ftal0ubTc2NGxLdFMuJk0qJE93Z1lhL0Y6LnhteztDO2lrdExuRnpxTCxlW2s0OzV6UFhOUnlyM3YiJXM6O0dlSzpNKl5OJlt6ZVVKZk5Y'@;
put 'QmVKNTQzOHw7N3ZyWyxuUHs6W05genpESUY+Yl86c3leTSF+PDVnSnN+Ii9UVlZ8MG5UUTdCdzk1fWZRPlREIkF3PUFoflQzTjQlTTZDI2BxYHFOPiZdVHRwcThVKTQoI3ckYyk6bnFDbytjUjFwSkE+aCVxKTM1bFdSa146dCFFX1RXOlVPZz9eaGRhUmoid2EqJm5NNytULG5GI0NybClAKSE3'@;
put 'WSg1RGdjZmJJYEZSXkAjPV9SS1E3P0pYbF1RWDx3UiYrZ2V2cGMqbDN+aXs/KDgpV1pxR1N7fHQ/P2w+JTxkXSMzNV0kbVQmMHQwP2lvfnohdENdX0Z5OX48bFh2YHdgdVsjSyJWRFNXRGoqW11iWi9lTEtkIys9WllLKV5LfHhYfGhuVzhCP2U9cE5nSEMyTTpJSTsrfGh1UEZLRGtzOW1oVH5Z'@;
put 'OXxldTM0cjo1UC5FW1lhLz52N11XfFtOeDlLaWd0PiMyZz5KIXVabVZMalV8eDA2K056Yk51UlRxXyMhbmVacD0jbCJ7K2loNlgxdkptTWlLd1pGKT4ySSxfWTNwe1c/SEIjOzcuO09jKmAoKTEyeWFDaSh5c1FrUTFVUUg2YGhUK2NTWyx5L2pGMiZ9PWk0UU88QEVBe0Bvfm1MekQ9THpxfmFR'@;
put 'JX1jNU5yWmVjRl0hJXNbNGc+UXZUVUFXUzJeRiNvJUtnY1ExUVVjen1XXTtDeyxRfUM8VHZgNEx0eTtrPEUxJCw2ZGhscTdtUXgmOFUvTCw5IztKXixERGhOb2M6XWBEXk9AM1gwSG1yWmtFME00R3c1RHxoNWF3I0FrW1lGSFtbJXJxb0h8RVFAMFp3flAmViwyKlFVTEpBajd4anZuPl91W2xw'@;
put 'V2xsU2lmYi9vVkhMZSU+NiFEOXNLLEVTKCFIJHxHNGowMUY9dFVONF9ka0d+UCViNm9ENVpjR3hbI1RqYGNCP2o2SWNYKFt8SGFRe3BGTShLM2JFUm8lc2w6ZU0sWm5zLD97R19acCVhMSpTfkxvSjwyIVlreSt4NkVhaHBYaSkvW3tnZWxgSzZAV2cjSko3ZU92ckgyYWI1KyMuLGBhWUlXSi5T'@;
put 'Y1JWbVpybl9wTD5FZWAqKmxIVCo1SSFCZWJGLEYuW2BjPF9FSC9uKWhETzxncSRnWiN2MS5QcnRUPUxRKDhESn1nL1J9YXZmOSMiL2ladmdWVi5bbEBZIl5MKTJ2XkwlLmFwNE5zb08xLyJlRFFKYUQ0aFh0ajMiSU1STXRDc2MjSkYrTWhYViswdmR2UlVYQFgvaHhzSGVwfiw3MyJOOCFrUkhj'@;
put 'ZD8kYCF7M2w1dVdhW3YhS3d+ZyUjaC9ISiovJVdmcnxrRElEY3wuJmoqLk08UHpUNnRJTkx2WjtDQkVVd3dGOHwxdypie0VneVBbSEJqI0M2Iy5bOTN1ZnNzTVI+UWxrQ3RBNkx6V10qRGpqeXlaUlZwVlJBKEBXOz0vJURMbCJTYX58TXx1IWlYOGZXS1MhM1szVjxpMH5oYlopelUsaVJSOChz'@;
put 'WStFRVJ+I3IzRllBRVFfaFdzXm1lREFnalJAcmxWUUswbnxLRVU6PixzTjdCYFRjM3ZoZ2FWMFQ1JVY8ailSMlcsRV9VbSoiZzJVc0d4X1BaSWd1cnEmJXkxKkNicHxyNTxSMyR2UnZCP2IoIUpCP3YkNU9aWXZDam1vLnh6cDNwZlZ8eloyLk13PnxVbipPKHAxYFdGbD56MGZqKSxuZGhzZ0g8'@;
put 'OTs3MkZ7K1klUzpiSjIzaTt6eHJHWiRlUjE2MSk9QTF5IypzO1MzOEk4bHh0WT92KGBnLFE+dF4yanFtWyRxdTV5YDZ+ZktzKj8rdXBKYmk5WHNxQHp8Ml4ibEoxe19gUTBhejRtbjN8QmVad10lUiRlcSNfQlErb1BmeDFNJS5ZezBlLERjPnBdR19lfVBuelJ2bWNBOTwheys7MUhyVlRRbD9Q'@;
put 'YiROTGcuV0EuPElZVUVveU5IR3dfWkElbyosZmZeOUZMbXRgNEp2NyFsIyhOb1tQV01jZG9dX2lfYmw8TmNvODV0NiNZVzY9Vjs6O0FiQDszbi4vTHkzS08ySkJTSyoqWEpxMzs8QyMrdi9uNVlxNlEyKj5HI0RGS2Y7JTpkKFtLJVUiYXthRTY/Zn1JYkZaVnYjfX4sMjgkWkRmUCZCbTNkRURN'@;
put 'PUJJdTJnd3pvWkRaWUxpRG9YelQ7IWRXcUp9X2MrJU9AXXpRXyFRKTVCRHFoTWorZyIxTWBIVTQzKWw8aTRIaFtfb0NpbHJ7e1grWFlQZ19qI1sueU9xO15leEx3cS5fYzIsNX12VytvVVlEYXlLfDgqYC9HMyhnQG9FezJOZWZlWWN5Tn14YnQ3Qls0Smx8WWNYSClCLzAoayR9aEQ2bGxRYExZ'@;
put 'bCE6RUBRKWQ1dzAqVU52WCVZQ1Y+Nks3NXV8Q0lZL2t+RSEvPH1ASUM9LHBkQ1QoMXpRQjJTTkJjKXkhYmgmUzd2LzozOyNDQWhIU0xnWTllMHA1T0N+NS8ib2FDMykqY20pLyIlfEZQUDtjS3IjL0Z4bFVsLnYqMDB5aCojRSJ1fmVaXTRnIzdlTng1PHpFW3NKPEBaKHloNzAiZUtCRjc9Uj89'@;
put 'fTVyWDouSlp1NyFrbHVodXpNY1csQEJiMl1XaFFwVVU6ejN0UikwQUIsS1FdTDZDfjlNZDZ2IWpbISF3TDZvMiM5ayp6KSU8TiZAdEoxdDpjKEg/NnpsUl9WYU5QYk0iQmZvdFk5fW1EcUUuM1BIT258WHZwYihELlZObil4bWBNbHdpZyRSZWFVY1B3U0JaKTdZNS9rQ3x6Lzt9eUdCIkVDYndW'@;
put 'dTlRWn07MndebyNlPVQ7YmhrdFM5XzRLfGBSNV0pMEdjLCF8NjBITWxjV24uYT5edVlAWlQ8ZVNzKk1zdmRlKloxKFtkQD1RUFh2YX50I0VMQEZeMWlsQ1h5USpqWiY6M2VgWFFjX1tDciYxIjpCd2kjSEc3YTtUN25VQEgiUDBofXg2OiZXcE83LklaalI0NTJxRHBeYCQ4I0peY3ombCZJcnRP'@;
put 'dFI1VD0hdDlJcjozKDpuSn1EVGsrU3Y4M0lsWEB1aCJtLDIhbUJnY0BoWUYoUXxQXyZEQHsjOlplbzFTIURZcWIkOCF9LzFHYi5IPlZLJF45MnAiaDlhLiZsaG9fQy4xN097eHhxLyVaUHc4emd5Y2owRXpBQmQ1WHNwKjQqfXEkV0BuSWdIRH43dkd+RD1mWTh8MWo/dm5BeHxZSVJzWyptSkFk'@;
put 'RFh4WjIjczdwNFgib3U8dCVvZEpQSlAuX11beEtHaENFazNbbiYvNGt2VkUjYnBgJm9nL0hrQHBaTnwrRWchaUkjbTVseTx5U1VfZmduaFdgV0VHbmc3e1JGOiI1Nil3Z1IpJkVFVTpDb2gsTX0oQyYjbXl+JkIoaHZwRnBNST5eTnBxTE5qMlMhNE1KbUooajU6YH5lWzpdLExfanJoJU9SSTFJ'@;
put 'RzIxZGs1eUhYeCYyVURtM2JiOzZ7WUB6WVp8L0J9PTRVZiZFSypFI3loYiF5ejpgJm1wLC5aTHEwJjVzQFZePj44ISpGczU9fV91Y3I6NyNXM1pKcHNed1k/eF8+LmA+Z3hyM2NOVV5XNUVRZj52VFJVNk5gJSYmMW9qPmc2X1prUGl4U2dJIWZoOSM1SV9DMytgb19lbGdpIzQwJjkhJmQ5Nng2'@;
put 'VXV4VWxlJXtDTVdUMkR+Q0JPdTlqKSkyQ0s/ME45ViV1bmh0Vi4vJTE5L2JlJGI4dTBMRl4wPnpsKlVVRWRHPTN8WWtAUiswRWAodD9WZ1c+JDMwdF4mQHs6WF5oVlAmKElTJk5NRzZ5QzR9L09vWzFFJHM0T09SIzRnekFrSCpmUT1dMH1eVVNhSFNpLjFWbnJ1P1N6OUx7S3cxalthbkBqYFsx'@;
put 'aT4xNnY5eCs/YTw0dkssKDFDVS8lIjRnTCJkPlRCcD5jSEdMPGY9Zj4scmRmQ3FDIUpsUUxEYlplQT5PalJ1Zj1WSUh2VDZqdmUpdnQ7Rn0sIWtxLHJ0VDljRy9hUmNZTz1GYVlOdkxvJW90akEvSCFHdkVoNTJiP1BBRy9YP1QxayNifjxTZ3NeNXZoKi9HX3YyUDd8P0xUQEVfMVA2X003P1tU'@;
put 'ZUJ8cmZdY2NNOT1Dcz9hZl19SkJsZm1tL21rNGBIZ3M9U3U0IWd5QCRVSDEmY08mW31tNmd5WEgpP0RPWXE8KDM8WyRtRFFgUkp+UF5zbSRdS0FCa1MqLmQ7YjN6SDk2d2YySXJGRmpHNj5fNVJUJCpae2I5LiZzMGpTUypqJT5UJEJ4YVpaKk00a29HI3IoaClQYEdjfFE9QDZHXnZmY2U7a2l7'@;
put 'I3xwV3V+MGpdcnI7KWhiZiUoaWRlekZ7dVQmS097X0NWKFRjKWZ4TGNYVXFSY2ssUiImTjF7dWtTVDlzMkpNK2hbPko1Ki84P3hYTFhxeilrbkJeaT54VE4sV1VQbVpeMGB5XSlMUGsoJEFifHRzVF5KNk5INFt0NCF7fjV1dzc1In5sZzlgamZ0bUlGQi47KCFBRCohVSJscVc3cWckRWRdVE9w'@;
put 'QTxOfUo2T0s4fFBhVzlfcjM+JCNtUCVbeUgmUkI+QGM/d2A5a3BIKjtRdjskQUdDcU5MNGFBd1gkfl1DL1U4VltqdGlAS15jc3l8fCFTS3Q9Xzk2MXNhKls/PCxuVys2aTddKl1fUzJWe2xzZj02Mk0ieDNaTDFWSHFXbU1QKVV6aXhGaklYd0x1e1txY29uWEwkVUR0ZTlua1FSSiNwQz46OGhs'@;
put 'SjRXfkF1XyhDKWtHVn4rTFE8PHAuaUM+ZzptYEpydkw6YDxaIiFtbTtnIlZxeVEwUixCRz4lTyhkPnY6bGR1TEMsKyhBNG1EOGNUPi9nNGpubU9BcXJLLDo1UG1+QGtTZXtOc3VkLlhwd0JVMFh5Y3dyPVgmL0xWUXt2IThVOnIxXURYbH1fTys6KTxySzdReWUxcF9RPiVWPXgofUgpVjhvRnYo'@;
put 'dlA8MmFZIywmQ198Z3Q2UThQPiRrZmxJO1RTTDlifXg0LDRBLiNbWX5mLHZPJCZ0RDpVbkcoYVc/X2U0SFkuRTx0X1UwfmR2XU4rN01PNXl4fFEhOHdzfnUlPjpMblNFZzBCWlkwOSozIzA9bW0uM3ZAaVg5KWd2UlJ+am9OU2UkSyVCSEJUY1ZYVm4uYnN8UzNpR1k2LDI/L2RhL1IrZFRVelY1'@;
put 'ZHhhKDZVJFNkSGZEVGZZeCUzQCJoY08oeUxgO3lQPWVDVmFjaCQjaj1kYzpNNmVjPXJpZVM5MThOWTxRdix2Z11ddkM6KkhCTU1oX2lIWG9bKld9R352fmh4dko2XTdXREV9SV8hUGg6eStsZixOfXdoVU5fK0NTYklvXWAjITljX1doKztxdSN1eG9lQys4bWhNfVAiKUheW14/Yl5sSDVqNz1k'@;
put 'cXF6QHVXOjp6alhwWzBORXYiSyhyJCNUMVk0cyt7IUR+ekpfJUZbN3wzTHJAZGg+RCpLOEchUVFOVm8vLkxrNDIjRUtgKHQqWG8jKiVMKyZZZjNGPCs3JkpfT05MfDwwNEd5UTxbcUgqSWBWOF9sP1d6XjBTME11cGU5fnkiOWVBJX5WbHhGRXYyOT9UMng0PD9kP0dvJTBaQD1MS0dqPEYsTlox'@;
put 'bXxUUCksOWY2dE1AJCRgeCpyOC4ofUNfQ0M0a1U/JnZlOjs1KUk0PXE0cEJGIXI7T3Q1WEVyRSl6MUp7R0h6Jjc/U0FsTWZZYTVQNSlWb1dXTSQmViF3IlgxXnE5WVVySjo1JD86RVhJKEJYLnFmeWZzMztOMj40fF5ENUNsYWFSPFpQVlIyY28wYjJOUyh8ZEF3QnU7W2c0W0xhMlZgKChsSUFN'@;
put 'NHdQMU1JfnVIaEpFeTh4QjNpe1pCYFp5THxPKzlhR1loK21Aakg9MFcqI3BKR0ErQUMkUnQ4bTpHdWclQ2omTGc2RmJiSHN2MkUjSEZMM0VUTzdoXnNgIioubm59WUM7Vzkrbmg7JkR9diluc1lQK111KGZgLzldUWhbOypLOlBqMWdwJDNqQnkoMkxxTFNTSjNyK116UWZ0dHZDaTJpSkwjfnRu'@;
put 'aSxEJFZmfEdhfF9nKV9PLFVUfFldNkl7d3R9LitpIzZCRVRCVE46KCxhZkpjSXIseC5yeWtfeX5feTg7Yy86O1BMWil3QUZmW0VfNys3YUVyWVlCSCNpcl4+O3wzRTY6Nk5FKyxqUXdhTyROWmEsKysyYEZiKi88TSJuUkA/Z1Z1P2tbOGtAPn5RJkAkNj1YZHYlPDg3dCErOzA/Yz56Tm4xeVI6'@;
put 'YltEJTlORis/eUAwO09yemYhK2Fid0owNHJnZ2lnJW9wVWl1UmZIaEc9Zl43SyM/Snx0XlNpfTx4N3FkMCR9Ny9TO1Y7LkpkWG5uOD1Dfl57MHZAd1h9KUtiRlR6ayQkfVgoIztncThtIVk7YU1KKzt1fjxUaDFQIiM+eih2ezo/fD9ISFNtTH0qLm4iemhrP1hKVThXbHw/QysxXzFaVUQxamx7'@;
put 'IWlgNkVBejVZXmJpV2NsQkM6bmclKnR2JSZlRiM9KlFNezBPXXt7JjJDOExjRzkhbzNnYnJiSEN7W0IxQFBZWy5JYz1zS2dMOkI8dVohRl5+V0A5c3JgXWczYj52dSk0VTpeKypoW0ddKSg1ZV1pIjUmKFdZaiNiYClxOH5wWWM2eXhmZlk6YkdfL15kKlt4Yjs3MnAyTDxyfGFuJUAjdX1kWVIm'@;
put 'bmchN1I5SFs4RGpVL0grcll4cFpjamQ1UFdFZVY3Xz1qZ29YV1tHRGd3T1NXYkVPZ25hfjN0d2s3KU1AbTdMMjdhfklNMzZ9b0pbRl4iSFp7KXNMXjE7cT9NLnpkeClfKFtJWVczRE1aMV4jIz9aPVVSSlVbIX5BUDE0eCMzamI8fWIjZzc3U31WP1B5MV5JPSksZG5qe3VXbSkoRyk8LjA2JCRN'@;
put 'PjAuTnkoMyJtPVdpUCxITTR3diYwe2RPblI4JkFaMW1HdTlZOWtxOiFAXko5TlZPYDhyPDo5I24wcjFdRTM2ZG88bzRwcmAqcmJDZHtHYUpPLjtMe0ZxZWQyLmNFZCZ+O1tjekx2RUEyW2hnKnkwOix8SG0+XXxheyU2MXZbaCpFNkp9P2lIaXFHT3ZBWD5jdmM3Z3ZbPkcmaC5vS0tdMmZdJTVF'@;
put 'dXkkWj14VVZFcE9lZUU6IjdiOTBKZGpfcz9oSXgqVn1eKG52VyllYER3IkN5QlFZIzV3WSUxJjwxOjR9QTVOT3F8VENyWEpUYlBxIk95NVAqIztEOyRFbiIzc35gZHpEbyUpJT45YlAsM21kRGx0VmRgUXFPcjNOMzAuaSVeWCs2NWUjWHEzdS9eY1B6YTxmVChhUzwxdjFDcSx1PGphKzlkWkQ9'@;
put 'ZF9tRVpIfGBIRmBvbzlCc2Z0bDsjYkMiOkIzcUlrdyR6TF1POEslWmZ6WndeI1dKT35ZTTUxJm9MdHNXI3c6UV9aKl8qK0MlTVtwOFNERnBfQU9FcEk5QipBQnw+YTNWJlsvJHRYO3xMKkxCeDZhUyUsdF52R10/eDJDdypPVyt9RTU+RmA5InZDK18qKn0ydzteWl91WzpmY3tiUSVSaH5QRmQx'@;
put 'YE1HO0M3OjQrM3NVNmVtWyg+THxSdlJYfU81SmZbSCRTbWpfX25ve2spN3x3Z1BsWjhTXm1DUy9JUHxhd2xiKyhzTGdiUT5JLDZ+MjJtKTZQOS95U1FZayNYfHJATU5PYCw/RWRFK0hPPHJHaVEmO2x2cGY4K30rQyp5MCF0aEZFKTQlUU1mREcrQD4sLGppZngrV2pMZ29sTFJ0ZEFAWGg0MUNj'@;
put 'R0xYQGF9eEtQOTljYDptPTVuWyZrTzJXNS4wXXkkVVpqeFRkayNdKF1wUz9LMXxxUktIKD1LI2dPN0VUOXMrWFdubkdkMTlsdzw8aSZUcGImJHJSSyowalNxdTpFRFt9PCtvX002MTRJSyFPS0VNaUs+LyZaWGJ3bGN3LixtZmJHe2sxb0x4ImF7KFg2XzNZTTViPj0vQStPeTkwcFZSbXcvKEhj'@;
put 'X1sqWjkoYXx2RHc8eT91T2B2IitvKiRPJUYoVkpbZyhvLmBqeHc1OHl3alE0Om1CdyJuJHBJZVomVn5Be0daSHxqWWxBKmFpTU92NWFIP3Vfb1ZrMT5MXT83QFp4LkdFP3Jlb25FZCFWfG1nZGpzeVQwNX1dZ3xjNHd2MSRvLFs3ZUljRyJeVkhZWlNlSHo2TjM6dndzTnw0RTN0WiNgbl1DNTBX'@;
put 'dUdxUHRuKGVlUVlpNWBGNExbNC50YH59enlANEl6LzU0P1dxeW87PW5lWG5oWyFTJCo6bGpmbUAwbHNPMldXcGFMTl4vUE0rZU0sUyl6TFRPMEpkSytGMVlgLEdmMyJSTlc3WGt8JTNjLlMkRDNtTSk2X1RDZWNKTEBWVEN0eCRsSEBXdTJYQCV4SCxbc19dPm9sIlVgKHdZZjRiLigkKSIqejB1'@;
put 'QEt1YHJ0RE1qb20oRE1EfSp0TU0xZnVaNDE8YiEoWzg8VzwoaSlsa2BXL21vdHJAZyJUPj1DUylTXktlIXJPZTwufmYpdnUleWROMUk4bWZWNW5FP0dZTDtSanYmeDgzJEdUbjBCTn5IUj9pfjVXb1NrOj90TFNne1RKPTZxZCU2Iy8qbzpNVGF3ZlQrNig9dUhsN3hudy4+MlRWaXJpfWx5aFQ3'@;
put 'RzNYZlhaVG5wVntVSCxYamAqKXQ+OiV4XXY6elVKRzphbnZqIngsW1VTVyUqJXtGWExmelcvJDtzQncuU2ZPd3k4T3l4L1JONGFOWTRBPClzYnl4TVR2emojL3tERVpnMXR6RD1qWF4pUUl8JllrXlpUYSV9NiJXdlRyWUt4IzZjNDk2Tjd0bllGZUpNZnBUJUEpNTQ/d0Ivdlg/dGpeM3wsdXwq'@;
put 'eWNYc0hJUkBsOFlFaC5iY1JiM1R8e0ZjalI9dDlUOyZQNDkwej1PTipTfl9FdjQwOy9Ob2syaClTPUBMUj58fD4pR1IoVlhdczhzX0IuZE5gdWVSd2hmQGR4cX5XfDolJWhOYzxhdXImUXl+Mi96XT8+fVtrfm1eaE5kfmwuSW15VWwxenc0SjQ/cCZRNyopR18lelB2P0VXJEFpS0Q9ZCFVflVQ'@;
put 'TjdsJndxVF0rLHJbPiljXlBYWm8zYFkmWiQ9Vnh9WF8kSDVRQlE2WC5mNCQuaGZiayY3bE9LMHBMJihXZC9aITYmKG9bIzNuRWBqYVlPbnY6QnJmanV1YW1mRHtCW150c2shNCZjYUxWaVAlKj8zIy5hNTliYUdsJVMsd1ckQj5gSWRlb31aPjtfPnZZQHg0X28hN1AlNnxmczBmNCFValZDU1Vo'@;
put 'fj9UKXwqYXQiIWg5SF8qU1FdbSxOVXtQcD9KI30xZHJPLiFmR0FUcip9fk4uL3NrYjErb31QSmZDODZDRC8oREgpT1Y0Wls4ZiUkR15eaTZLek8rJmtQO0NWMGF8eWhjW0Q2PU1veHJdWl5+PzIraHEqbmV1N1E5cnBkdVhkOWN0Q1FtOT97KmFxajViJFlXWl5oWj10ZitRSShhZztOaXlsYlta'@;
put 'L1d9bncqeUJ3eD95N25MT0BlZGtuRW97YyZAVkVFbjhMK0cjWj15VWxhRFV1KUJ8NlVmY10sXUNZb1Z0WitQKF82JGhidTMsTW9ULz9KTixEXz1CdF1oKG0qSiFfcGlpY0Vra3lSeVVjKkpUSylwcXQ4UzBaMWtaKXVKRi98QFR0bExSbSFEZztxZUg6Mi9CW1V5aFU8JlUkMmY/PV1xWk0qYFJg'@;
put 'e25Ma3Q6b3w/elRfSSRALDdFQDU1OWh4a2NeUn5qOyxJO1pfXiV0KEVXL3RtWG9INFJRSGY+Y35IdDtwPXp9JkJQfSYpWXlEXkcpJWhgUHdsbVo0b2tfMXMrTjdLJEZhaURnK3FyXSY2JilbKlVndUxYL1F3di8vZWhGRGVkSXJUTFhLcSopJDVuZCJvZFQrV3xsejkiOUN5ZmJ6dHBPMHQzV1c2'@;
put 'P1BiK3xNVVk7Wls+by4xQ3NjRipvNzxESzYsYCZ3aCVvMSpyKGRpVV1HKT4xeVVtS01aZT52XjVgUEZSaUY1KT5MekVbTF5uJjpaZHhbWHtde0pbeVBRX1Q+eFhKP15KLn1TI1ZLSUhnIUtrTihObD14ajliSVhxVy5EbnJoWiQkQGtJZHFOQFVmVm5pcXBORUMwL1cqdVhQU15Ldl5VLDBtMlt5'@;
put 'VWArdUcrRyg8PEBPaTROL1g9MU9vYSJMO2V1dWV+fn1rSkUybjNuNzRYYT9wMntbWj5Ja2pLImNtUlNtMGAuWFNzbVElVSNqNTMmIXRAdCs/Kn0rdm1CU2BBRi8iQVkxcmRfbWZ5fWg3cD95Xn5TLDJaJU1lLykraGNJUWw1b21AYlt1NXJKNWl4Y2ZBejFZV2pHYiNnOz5jUT1RPC8mRnUvVW1E'@;
put 'SkEwNWsqa0AjZ20waH5IT0pjajJPZUlrYXAsKkpTPyk/eSlSYy4qOyRsSXhkUXp9LlsscSNHISxHfEV9TjZsNiszQlNpXzBaSGNDU2k/WGNsJSE6dzZhbGNpIiR4WlhCLiYpL2FAWS5WPV9GOD00RWlTRnZUNEREPSQ0YFouKExXQTxKR2xEQC4vd2xCPnguWVI0Uj1QI2NVYixwJlQoS0c0ck9d'@;
put 'eTRVQVghIj88JWR+Ljl5RmUpbXE9RUN4aHo7eSV8bz9hMnhDMihnXlc8eG86cXcwUH1tPnBOIkBFbzRtImtzfl9lJiNLcjFJWU0pNEc0aGMzNCVvZ3QvaH1XdmdfNSpzOkAld3kmMlc5O2dBYSxHeEIqU2lrWGo8a0RgSWV4Lk9KMSM5IVNsIW9kanJDXWYoSWh6fnM0b3ZaR3gxKndYbnM9KCtn'@;
put 'UmR6X1c9dmUoKG9kRTUuJjA6JnRLTS5la1FNJm1qNFd9M2s5OEtjdXp+PU07QmFEJTBXPjN1Wzp9ZFJXZXRkJXZ3R09Me01VV3FjKVh+e3ZjdlQhJkp2QjhnWnEvQGtDZUx4OjFRPjlvdHFzOiJmU0wjeVZhMzl2dyZ0Oyt7fGBxITtUaUJpcCV5cGFSMX5lTVpHWF50TF9nQ201NEcqXldGbT9e'@;
put 'PkksVH4vSngybHBqU3kwQnM0UCwzRl1KMDB7R2dtYUMlWFVDSmpCITl5USFIdE5EWjkoY0oyOktxdUJhbk4haiFNK2Qva25YQnlSb2BKfD59VHJaeTVpYGJJU2gxPzlFI1U6bVdXXUppdTl6WUllUzMkdzRNNip5RihdVDB5QyMiJFU/c1g8S2xMeHxeO3FdczRWIWN9T2R0X0glKks/Lj11Jk9Y'@;
put 'UVowdU4sUHdFVnQsaXorLm42YEt6TDtrWklYe2pkYWg3NiFpSGAjX1o5XSF4Z3ZWOkRlaTFhKWR3Sz5FPSZFYUtENTNgb2pNI31BQF1UL2ZJTllOYG5dRU0ubT5VanRXUThOR35KMkYjNGsmZkdFfT5weX1obV12S0ZWWyRiM3lvZHd5NDMkPGhpY24wIzRQd0VEe0FjKVcuMERjMXVdSkZrVDpu'@;
put 'WT8ua0hIRkFrei53S2wxLnlLWFBvenUzK3Ywd0NiUyFfQVJKTGtEeiN4Q2lXNXZQPUciOGtCQF1jYn1SOkJ0P3lmUmdaSXRMMnxTWCxYWkQuLD5eJT9wbXF9ZUhwIVpSLzI5Y15qX2U0fGR0M1Noc3drQkUrPGove1tZKEZwVEJqa3RHZGkoJjRBPyZpfj5vNk1MNU1mOC5sN1I9O2Q5JE4lJFc1'@;
put 'WjJTPWdLMW8vbC9NPHN9ZUdFbG9oJCpgUC4kSjFqUnszOkx2PmBmdFcjKGJRbT0+Jmo4dDYjbD4ydz5dKihhRHBbSzRvU2tjYkEsdkAyKyYyVypKViM6JTYwNyMuT2Y6Qk9vdiJLMn5YTDAuSiVlW0U+ZTZKLkk+bCtgMGt2LmpjU0IwbDY3UmFgQU1jKkJSXzVJdiFbMEtraXRGRG0veC9pd0Fq'@;
put 'KEZzNERXUlUlJG4+b2N8RixlU0Y7dyoxQ0pBIiZrNjlddWBlOmEmMEVCXyo9YFFQU24kZnlmfEp6XVhSVHZtVV1KaCUhLm9UP0x4LmQ1IWRrRF5aX2FFQWQxMVdJQj40JVt0azFjKHtfcSJKJVN1clUmW01jSlksPkxsTWBfazldKVtLfD4lOXp+Pj9KVyxucmtXbmY3fT9EeCUkOk8jUUxRVHZS'@;
put 'SSE1ViF9cUpMZjpbNF1gdnA/bi4kWiJKI2dROiM7OSU+YH0xL05zVSVQY15Ab0I0fFBHKkZLeyg6VFFTb3ZdWEAudHFMY1FWa0s1bnlXcUhYVjpxUEpyWXl9YTF+I2ldSF4paEw2SVh4K0c3bipCSy4lay9eY09Qa0orM0BwWX5NfiJ3JWZpZzErMyw+bytITCNvIz5KblhaXXhzd1J9PDNNTWQs'@;
put 'NzdmQiVAaEoibUReNTEibDROSE8sKllRVmpiXlpNTT4mNEIrOTM1PShXXV48PXo6eW8+IztPQXNfOkQpcDFUX0hRTVJXIjR8LmJQLGZmYy5SfVkydnRlKGtOPG1VM2syRV8yYjNoQmVodmtTbjdNKlVZcj46UlVmJHM9bUJKM252KEUpeHshMGBAS21iUiFLVixEZ3tTL29IbzJqVEdvZCNbWGsw'@;
put 'ck9mZzgkKCtzRzR0WVR1K3B2MjdWPjNNRHJyQlk5dE1GOVEmJGBJfTE7OjdYNmQ0OG90PFJ9MmV7LCJuJUA4Sl9YeSVqOHM6TGwrVUR7IyxVWlsreEl6Slo6Wnc0cDwpeU56eyNMU1BaSCZjfEVdQip6ZW1jVTsoOj5hKVQkV3xsLnF7ISI3dU0qKHdweztNOyFweCtMZjheXnE7RWdRTClkJGgp'@;
put 'cyZHKWAyVU9+I1dLYG1qR28mclRONkN5cHAmOyhieUNyXT43czc6dj1Ab2xSMC4sZn51ITh+Rm4uPF9bZXhUc3siWjQrL2BYJXo0UE8mVnVTZU1nJXNjL3wiIUdmZVhJU0d5e1ZEdFVUUkEhU3Z+YTNkMWtfL1Q9cjF5ZlU8KVRCdF1WfCh6On5wbFNgI3A0d0pWeC5wSzJKNFZNZj44ajkjZEh8'@;
put 'OSk7Xlg+WFE2clJ8Q3p9Q0o4dHksdCw9MExyNGYrYTdCUEVSRTwiU3BKb0pJeFo6WzZMMkBuRDViaExZU3VdO2M8R11wW2I2PHR0ZX19dWhWYiZuYCkwO2pYZm4+QDpAUWVoTSxxZUJxKlV1JGNgNEgxRDh8ITpXLjNmRjl1K1Msdz0wPihuT0c1Ulp9dWleNHhnVk9hSk1DJSx3RFNIVEIqMG4j'@;
put 'YDxBMSMpeGE8cVtedzxIKGI0Um1JelZvbzN9SGAjPHJZdkFHI1V7Um9sZFU5Xil8aXgqRSNUL0xgSTZ6MmdWd2ZgN18yZWJ7YCsiU2FGTz1oTT1YbWQoS1NzVSpaNTBENmhYfj9hbnVOS3c8dFhveWlEJiVdUSNeQmZwd0YwYFQ0aGpgSWtSJj8kVTgreU9ue3cyO3A6MykuUV9WP0lfczJBTGM3'@;
put 'VX4pSyg8RyVAWFAuRD80e0tVWSZpdTdkYjYyTW1abHRpVFZpdj0pWHFqX2xSR0ppNihFOVo6cjosdyk8NjNwbD1ucUQ/NzRFRDJbdWR1ajtgb2VQR2QxTyo+bCp1KD1iT3FeeTt+LEU2eEUuPyRPWW9TWFtadEZkJWElRG1UTT9uX3hgOWIjLm9VIWx2TXQrUSVKVGJXNjp2P3x8VyNNTC9xP3V0'@;
put 'eWd8YlFLYEpdNSFCKjVqKXpjWnxTMVVbKF9bS0R3cyhQd1lHRH0/dWQpYDR0Xkt2dTwzRFAkZk9hRWJ7N3JjSE0oJWE5azpjLGhsWXsrYmR5bl5KfUdlKzQlXVdVSFdAMyxRRUhYI0YzPyRNbGRPfSNXM3FhNlckd0ZOTUZXMDRTMlZCIlM4QGgxO01MMSg/ISwqKFJBLDtHOnlNfiZeYWh2PCZo'@;
put 'LnU8T0tGYVpZQUVpOV9pUUkyUnxGYjw2PkpuPE92Z1VVYUhddlI2YHlgdWpPdlslQFA0YEthe1J6eXQ/LzooaDI6emU3UVp2KWd3N0dXc25lKDd1Ki9jajZvUWguQnFVSTU0KSgmRSliRmpXOHkwKF0+SC48UE40QWYoMyp7dktkOGN7e1UzfDJwWnBXS1kvYHxQdVg1aCJmfCkqQ2BJdSVMSSZb'@;
put 'YyhYLEg7QjsyeGw5c3ojbklEaik4N35GbCEmTUpDNUxNY0dBSGo2dEglOEokeVZ6a35mNExHPko2JHAsL05DaGhufUs+RTJNZ1k4bjFSXz1ILmBOaVlmKUtHbXhITi9dTV5ObXxUcXR0Uk5wamJ1PzxWdDczTWB2RXl2ekB0T206SDcrQUUjS3ljWG5iIzNUKCZDQj5bP2cwQWJkXz1dfl0lRU9b'@;
put 'cTdBTzd+d3FweGxacmZEbXRXW110TCs+RWIjbypoZlVkWnI9TClYb3JLRXlURW1TKktRdlg5fXZBJjpJfWdCM0ApcEZaZzJdcVFxW1AjbmIhfE4/WXtVe2poMypLPTM1YEgzMHVUUWpiPiQ+fXRAMmhQPTl8c0UxeilkQF5bY0ZuIyhJUmN2Zk1ge3trPCEoay5ESHZyeTwjX1RXNjs3VEMkcDRD'@;
put 'T198TSM8NGtCSD5DODFvaG1kIzQmWkVPZyNLaj9hUnwxb3QlamRvSXhpXnlkUiV0JGdsSzAkVDZTUV5YMjJxOSk5Lj1MU3ppRkFrKVpuNVckVHxDXk5OJXV+IVljNkV2QEI2SitIbXcpUkwmLlA0V1V0Jj4uJDI7Wmdkb2o1dEJKRjZFXTM0TW5JVX0pOzNOTH0qLjpXRXF7dH43RmJ7MSp6cSkh'@;
put 'WkkxL2RZc3BSfm85Znl9LFAiJiJtNn02UzFfQmJfIVRHUEBlQW4jKHkmSUNNJWRJZiRNa1A3e3xXMlMuTSwkQnJOOnQ+JGdyJVl+VUBQNCJRMyxvLldbKzZqZlEobk9tWEFUIlAzY0taOClVbn1KeEJrZVkpTEUhdzZMYncyMVklWXRzTiRbQWY4WzZhcFNELjFpaSo6SFdwdXIjKWt4WF5mISlu'@;
put 'Y1p7O1VQJGFGPTI/PX1wQGk2VUs2fTkvITMlcGAlInc3UTtXLjx6MV9paUZBPmlCbmlheHhYPzhBWUJpWzlVSltzOSxTcVA/fEJVcSFUdWd0KSswV3Z1aWY2c3c4aXxieCVDfWFCOT9hOyEzJVF6OXlXcXZufV06a2MwMUE5Rj1LSkV9LHRueTdhLDpPbDAhfSNiX2dFTzxUZU9UKWVRPUEjSlNR'@;
put 'VEEuPTBzfCZ0VTBLWUlZfFJJLGtjSmpAbDNwTToodVpSR0NUc0FEOnVmV3R9bjM+YWxWYFB5Qyh7TUdYK2VDfl1xSUYrc1J0RWFJRCNFYzxwQjxDPFtQKE55VlI2Q2s0PTwzNm9JZX1yLjosKzxmZSV2ZFlVZ3NgcCZkP2hzP25Rcip+NV4sVUdeKTZlRUIuc3VRYmZXdEtSZSQ2LHwvJjVyZSlQ'@;
put 'K2guPXk3OUNpL2klPjt8WERlOzpiWWRFRFhrI04+MTpzZ05hd3M/ZGppJUVwRlJ4bEohc3JoP3tAU0thJSxANTRxeT98JldfRXp1a0gkT3t8fWxJeGsieDlhfDcyKSYxY1lNMDdrbGQ7ITskZmFCZ1tMIV5+ZGRfWlpWcjYrPy8kPSMqPkhfa1VRIzVQYzshSzo/Rl9kJiopMlJZKCQhZTAsY21b'@;
put 'cj81JTR2T0JIaltyQFpYNm9oZFViRH4+cGJMJHR3SzRPUUw4Ty5lYz9UaThSUitPYW5OInltN31Xbi5sJWl+PGcycXJmMlkrOCI5c1FuRjlxfTdUZEljNER2N2dlY3d2OjFmYXFZMWg9eyxJQVhNWyJzdipCVVhSL19jNG5DLlk9WElLW0cyOE4vS14qTiNqbDxha0Bvc3FGIk9WcHl2R1Q/Kztd'@;
put 'WXU1alsuUD93cjkzNmBMMGNdXzUjLHE/QUlnPCI5WWVqRTUoRUVCWCJXY1pYLkdWelJMWFBEQDslLDAhM0RbUmZDdWhmPl1gYSFkY2ZBPl9CdWhTVDc5QGBZNXtvdU02QiYoLnhMdz1nc3omfikweHhgOWtPYTU4cFhTO01qM25mKmt5ITxQZzBZKSVdRW44Lz1iKV5FNCI0YVQ/JigzYTZLJCpo'@;
put 'PHFWNGQ8XlJBcV9eYDF7JWp5RjI+eHJnIiZyVHIiL0Q0STcvPU5bTndhdjQzbEt2QEZkTjxuLGozeCg1Q2V3OzhnTUhWemtHW0MzPHQrM3h7emZLcCk0QWlpcWAoOHNGdEorIWNoZz5KJS5VXml4U2ZVej5tdC9gVVgwdC9ETFg0QCZqfDpgYjlZRm9xWSJnMHdfbSUxLnN+fkkqM1ZfTDJSW0V6'@;
put 'Q30jekVnKzZsb29vdFt2ZSxPJDdkMyhHI2M4K2c+W1JmSSViVEU9JGhgUixGRDh+KnZTX2pJUSVHKFVsWGUkN2V1Ql4yXXhEQzsueXdePG94RlhROiolLyt9QCZBOldPdU8jdEJiUFZgZj53ZXExLzpVWTUpYnc8L1JXN1pdMzJIaWVgNDV9XmBpbEtyTHNWXyFEeTEpcGJsKFZZYSVSe3J3ciFG'@;
put 'N3dTZV50fl53aCROcVomSmYiZS9HWXh1XzNJaS5pXnJYVDFOelUhWX5td096LkQ/NjB2NXUyVCV9KW1LYUw0aCt5dDJNemdqInVrb045YHYifHJSN1RKdUBUXkx6QCxvViFReCU7PFRlOG9MO0RDWFRrIUpUIjlVK0MhRzUpP1MlKHVnQCZ9V2RKKk8uSndfdUxZZEB3aFY3eGJOKWUiaiwsXjlE'@;
put 'PywyKjwqTDhaKSZwJDdHY2pGK1B5ezhITHJLPytIR1VuVVZ4XXA7Syk+X3w6JiV2R0BVVGdxJkVZXXFZcjkiSkV8M1szMXBGeFBCW1ZLI31WJil8VHw8dV9MWUtNJSNeUnQ6TTB9NSl6KX0/eiNsJVdxc1RrIXF6L3xuKFpGMkhde1d+eVV+eCZofGJ2K0YiP0kmRyRGKkZqQkBRZjV8KTpBRTB3'@;
put 'RjlRQTk/altyK2N+RzksIih6NUtKRUoySFJIa0V5LGM3RSR6N2xbVng6Z0Jdcmg2Vk9ae0AxR00mZVt+dHRwP3hWTGc9Tnk1X09YKFFoV3RKR3J2MHx2RSgsJiU6czZ1fmA3Z3hgSTg7Z2N3Un5PVnYoSltIdChfNGlSc0heZlhPVmEqTDZJM3E8OzxyUmUvSFg+eComTUNXJnpWRHg4dm0zeT1M'@;
put 'OiZxPjxdYHI8e0UoSl93eXEvPDVfUjAhYj98aWpbcGByczMxPlo9STlwKGU5fT1eTmo3PkAxanF6SX0/Y0FqXjMlbm9QdS4lWT88Ujx0NHUyJWVyc3hiPyRLVGVIUVZoZTlqZlRAPWRGWXlxInZ7bUh1JmVzPnkrK2sxbUliI007MFIsQUoocmZ0Q01LWi82TV1tNTJbb1MpMmx4YlA0fmo8Xyt4'@;
put 'N20lMkJhQ3s4bjU9QENhYndjUj1ncURHLyhUblQhODZYJG5de0EvPHs1O3JDUFA5OHgzYFI9bVRNfW58KHomODA6WWdGTSpjb3Y2SCpXfVcobz8xcFR0RE5IMjRAWjQyMD5iR0hDL3U3XkZ7ImRUdk5MbFJLMGpEMGhjUlJESFZyKlJtWDpsTltZenV2SDZLZjt2XTNiMSg4Jihte25lVTA5MVBI'@;
put 'VXldfjpoKkRTRWR6Ijp4RTlnSF9nTlQ3ZlRTTywhY080Wn5pKCxyUndTKTlFJT94UncoX21+eWhacTtISDUoMSFUT3NZQ1h7WD58aVk6Pnh0QVdkT3dnezlkUHtjVyMmbENGVlREI0tXWDhaZXklT1p7akdyYiFsL0htUnc8QVV6WXNObkxpbUB3OXNPby9YQXFPQngrKjU0aTYwR3UhRi9OeD9k'@;
put 'Q2g0bCNmMFpwezRkc1A0ZlVxOSZyITMsezQ8bU9+VnhzOUE2X3MqaH1CZGJzc09IejR1XlRERkwvaWwkfWNvaEsyOSxiWVNjKjpGRnVTTzUsPFB7Qz44d1M9RWNFUFo6aGVScHUyMyRLY0ZSQUM+KSQvV2wkTW9eIWd+PkZ7WU5melpfYURILjsqK0BubzxLOXlXJDZFMHhxRC5yKjI4TCxsZDxy'@;
put 'NUlKKElTYDJ8Y295Nz4hR01sKU1rJUFCJE4wcF1UZlBCTlY+THhLMGltSCVCbFVOcUFbM2xDKHchKVsuQkxlKSIjNDI7NDMhYUcjU194WCF9WklbZi59Tm4oXztqUWRiKkw8dEI5XnZ1Ll5kT0xpMk5VTFBudmhXYFhLNVd2VCR5Oy9vIlVtQztaK1JRWGtYdntQSl1bd3BjRmhhaCNmRUxOc3xj'@;
put 'W1F3b3hBdUlNI2lqSDxJPyU9WUUlc2oleFRocDZ9RzIkWll0P3cvXVNROmV1aTc8RjRQLHdkNX59YSRYVj8lQHclS2pJOip0Q1lHYHt4dltpPFhxIXUpInpwOSxsdyRqakVkMmddUFByL1YrfVlafTJQLGVkTXFoL0VlWSYxYzRzb3pwRX5xQURlcE9DOG06cipLTVkuLEArWVlSeV5ueU9pc15S'@;
put 'JlN7bzljQ2w6cmpYRD94e3RsV2B9MFhHOkNgaktHWUYhOG1ONHF9QkovQFg3X01WaUBjcE9ONE89KSo2aTcqIy5NdzxEW1khckMvMC5fU3poWStKVG4xcloiPk9ZbmZ+ZnFtWUhBNF9KU1Avfmk2PDkjJHI5clg/UmJ9ellnUklGO3RkJU17cWRLXXU7Q2diQ04sOld0eDtuZHd9REtReTh5dWt8'@;
put 'bHZCYig4fVJMTmMpXi99V2tGPHpXOEJ6c1ZbNjpCdH1DIUYzM1ZjY1lFU2gjRTx1IzI6I04rIVZEIn42fXkoZTtaaVBWSmYuWnxGR2xDeldxfThWWkcwW1ozWmBTdCgjWCRqVE9rM3UhNnMhQFB+cit+JDl0U1svY3tveUlpS3JCRVkzIjtVU01uTV8mI1ExLlZ+Q25FJndJXTt6OiRLYFYwRkAy'@;
put 'WUcmOHRGRGV8TE5NZmVHR1okPjtQNEJQYio5KCMqYTc+YiJYKCRiKUdSeUJQYXpTX0ksdENwezFMQj09NndVMmFAbzs6Nj9mKT1PYHNoZCNlKWV9XSN1VWVhaEZkTSlPeUdLOkw4ay9mOTBlPnVdMT1NI0BEazJZcCFBZjpGO1hzQkJkQFBbQn5QZiN9USZEK0B0QkYlV3F3bGRLX3N9YmZVNi5b'@;
put 'PH54TXl1KXlubkFNSHc5I3dQaTlvYGV6WFIzaUBKZ2I6Q0RfIldnOk5AeGNKQzpgJSxSL1hYbmxoOUwkeG9LaU5dZzQsbmtJOkBEN0NIbUlVO09nUGIoX3pSRzJUeFBSQFRtJkQyWGRqKiR+Sj82Pkt6XnNhbjJBSkU3YzwrYkI7dyRObUFBaXosOXQ/Yy5uOjU7cSV9Xn0ucVIsfk1+Zlt3SitA'@;
put 'cEpaaGQ7bGJNU0wvKCZHaW08NFB4L0twbndDbUB3UUd0MlQlLDVyMlJ4KTNObWVwZzh5JWFtQGdZamZuRTU4JDM6Il5LPzcxYVRLSX5JRTVVZDJ4YDMhUHJ3ens2N0JHen0uTD45Olg/WmA1amRsLEcmUTk1blZeWWQvWkdbNndMKFV4NGlvIWpqbz82T1JqVjBbZVRBXXpPWTdtaFFqZW4xI09i'@;
put 'ZWpeZDQpOlNtTjhbOXY4IzRWJkRfSE1MYUMjRWVZKzo2XVV0PEtFeDUxKlQhUUR4MFZ5Kyw1RSpeVVJaRkxyfTBOemdAWW8rWXFJSHh3ej1pRHUkTFU6LkVCdSw1MlhUcGFee3pMdUBseWIzUGV0KUtnc2x4fGNSdDNGQF4kMTp7emV4PyosaSQ1K2RmTEc5RHo+Mnl1eSslSSUmfTw3KS80Kkpf'@;
put 'JWh5X3xPWyglaE1pN3BdWWw6Z3d2X1ExKFhfJGd5fiJpVVdRKWRCaHkkfVEyYSp6K0UsXlNtXWF0cT09I3U6OiRQXkR+Vn1ETG9mO15FOUhjZit2SWdzTUo0cVR9SVJoPkQzU0hVInxzQmVfKW5bP3RKZUIqPk4oXmROW3lISFdqSllsejd4VlRMZHg+fHFPSEklXkRnKzZTZkt7KWUya2lrVzBS'@;
put 'R08jflZrN2l5XTF9YD9JdndyUj8wdUIoYnZXY29zQ0VHLyR8dSxAW1c2O0IpRFF+d3YxYzUsUX4oU0VPdH5EfiR6MDF7Rm4zbTJkIWh+V1d6RT8laTBTanFHRGxwWF8lKDxAZytWSkt0a2tUY0UqN058fURGX1NzMTIoO1hjXSgjXWhEJTBKXW5MJWw7Lml0X10xWFordVJPTiZWJTJUZ25yNDV9'@;
put 'SnxObyxOX0ZQVjk8e01jWCMvVENPJklSYnoyLnlEMFk9QEwhKmdDS2kxW1hTJFJRP3hLRUgwbFVDXipjIXosPTdCQCZ2ZGxyLztTelREKDN6REZZUUF6OTNydVRbRX4sY0syRVhmNzJ+Uy5OUzBrSDcwU3ZwKi5bQHZXOW0+WT9pZXpGZDlHdGEkQ1FDRyZhOUhWfCN0NXMhUDFZKV9FNV5KX3Qv'@;
put 'Jl5QTChLYTtoYSF0RGEmfWBUbkV4YzxdenR3b2RsdjMqcVl7TURtQW5jOT18cTVqNXRJNVMuNFdBNXVWYzlKZFFwaGBicnc5T25aITQvVjxaanpkPDYwemNTK2RsZEM7Km81RUksRy4+YyQ9YjZidTlqSTEkJGZpal9tTCpBUVYjJGd1bUBRcipoXXVNI0xfVzNhYXtdPi5fYyUqP0dNYzBAYU1y'@;
put 'On4wSE0hM3l0cl9KLHVIP2dNczU2V15XblBXV1hrb1l0a051L0xxNX0iVWRfMzJWK3JdJSN5bipfVy9wRjVAQklMXkxIfFYzNnIje1k6fWdDM2FASlIlbitrSmB6KHRFW35zZGsrdE9UcjtIPHB0YCopRlVXVSU9X3ZGXlN1UT1AS1guaX1qbUY7QXUsMmExc19bd2ZVd1FuTHNbRHwmLnFDXVcv'@;
put 'Um5nfTo/ZiVoTkhFNm9UO0hsPyo3WW8lMitaeTZxQElSLFolNSxBIUdvaDF+PSpwZl4ufDBDckA3PisiI3deX3EvVXpJfEV2NzgwQDRTX112d2siKSxJKEw9diI7bFhRPD8rdXxMcCk/TXNiITJeJWIjJmMxNm9MNCw6cVdhIVgiRiVDfnN2KyVJVVdWIn4hamd+JD8xN2dpRkdHQmF5aTc/JFA1'@;
put 'cURfNWNienJ7VztkZDEqekA+JVlfZn4haiQmXX5Mfk9KPjZzZ186dHopZ1cqdU9WND12dGtZI18+UCo3b1l3QCV2YjRkRzVzMzFQbUMsTEw/Y2gwYHxfMSREMjdlTFRdTmhpeXpTVzBCRTs2PjlDdXNHYH1QeH4lI0kmIzdWYypwKSZ4eDNZMnliRTw/OXZZMTE2Zl5nR1hCNjdjJURiWFlLRVk5'@;
put 'VixoU3FvUi5lXnw2V3x0am9jaXs0ZD9YfVNmQnhwT2M+L3Vnclgod3xAVVRZXTwiX2MyWSV+KG9FIVRSUSprNi9yaCE9Mj9vODB9ZzYpRWEzcmg2VG9YMWpebyFPTT9+NSgzb2hQMiFdeEFhTlNQaz91elRMZ252NHdNSWpyKWJ1dVtIT3o5e3Y9cEYxdnkmQkkxRTZQIlliKClGcF4jQU5NQmtb'@;
put 'aklyUzRRW2EqYXExXnZ1VT9JaTRub1N9bmVRfD8oVEBDbH1UVlFtREpadU1nOTlremM5PFI3WXg9Q0l7IVZrXXZrNnJoJEUoaGIxOCI1fEtaLzBUWltyVGRJYi5tM0FFRmU6T0pyVH5JNHNFalFLKSlrKFJPP0sxaDIlUnxxLlJVSHZ7RHxPXiowLkVvRV49bWhffkhUV1FRaltkZ2EmcUBNaWNW'@;
put 'NTdRWWJKeihZIXhXZFdFe2R7JD9jaHJ8OiVhbkV0ez1iUHtnZ089THI0VHlnNTU5fTtvNHsxcm1CfHNFej4uKmtOWHI3W2V9S3EmJEljXlc8TV04Kjx4WSFrbmhCRHZNKk4vNHlHcTJXJnJgRmFQMTZQN3Q9S28ofEFjZHpYUUsoKzU3IkhPZFBwPDo6MlIpI11ZS0k0N148UUAxOnJhXyg4IT00'@;
put 'P25AUH5sXVJBU31+fCY/KlNyYTNPJDI/Yj9GSXRrIUxEX314LFZFPDpOaFlqT3NIQjw0T05OLmBPcjFALFlFWmJQY2pjPGpUbj1oTUp4OnVvOEB6QHElIWNyKSpLVzF4OSxrKWRvVyEpfV8wOH05VylKbXpmUWJGOVgrVCt1OVAlQkNYe095dXZPPCJ8XlQ1Xz9Ca0w/aT1yPFtnbHRCYGgmPihF'@;
put 'Ykhda1crLz5tb11WVTgkNUBxJlBBKW07QyElXXpGMnpjSDNFTk1FZXYxVD0qRHFofWBgOzNoUmB3NCtfdzAsMTpLTnlNKnU8djJWM0EufnJAImtTc2FWNSM7RU9EaCRFQG1wZSkvWS93KGd8Mk0hcHxmS1prcSEpNn5UZHsjMkN2fk5FaFZpZjNCeF4pZ0A7cWM1cFYlNVYzSklvQ3pxbk4xNEwh'@;
put 'PC5WJCpCRkNufXh6O1Q8SDh8bjFTRix3VyR6JEgsLDhabD5OemBZWGk/c3BSbGEoKFs8VEssbypsLDhyVUYwO3chUGxRY1JtTGRDZmRxWkxBZXJgOzFARSxsV21lQnZzMCg+Olh0UkU9UjF9IjxWPjZZezpxaDtMcmNvNypnLlkmczlsKHpJYkMsbiN3ITcsfnJIKGs7Nit4bj40ZHFgSzs5V1Yj'@;
put 'VVgqLGQkQGZGTG5ocFR5UzA5NltGa1omSmpCcSoieyRwTkskWFdAZUVUeSNnP1c4Zyg1LjhhXy8hVlRPPDxHfmVveTdoa3twQ1p8ayYrOV4pXTdFaipKLHNKWzkycjwuMUVzPHwvUkJteXxsRmw0VltbMnsqSytYckJoOVgsSlE9diFQbyRDfStUNDpdRUdffGxlW0ZXeTI0aWo8YHlwJkkleEpP'@;
put 'O30mfGN1USZSajslIXopZiJRbTNGcUdvUEB6PHBwQ2RZMiEjfGMmcmtqPVdhfWc4W2Rse2hrZGAjeGRYUTtte0g+TDRbOVQpezhpOk1DVmV0e1oyOT0qYmxjIT13LmlheTRiSDg+VFBoNVsjUGpVfWFEJiV1Mix4RXghbk15ajRgLGxYUkdKIkFwTkx0dHtMeE9mMF0hY15bLGFMRDMyS2d6PHkr'@;
put 'bi5vWFQ/ZDgmTUsoamNDWWdYbEgoQ2ZSPn08T3h2O1RjclVOKjcjOFQoKiE5QDwzZXFNSFh4eDw6WTNsNUpdYzxLKlFzMSEiVVFHYHdDRipePHR2UTt3YTI8VjImRGp+eVJjPFNQYVQxfC9xR3pdSGVtJCo9M1Z9dGhkYWg7VFpEMHFuP247QiFHYWgpalVgbCUlREJfZCFrKDQ4Y0AlIzU0O3lL'@;
put 'PFQkRUlmPUR0dm9KYlFxPGdrKVJoITd7OChuLzVfOHNSXiR3cSMvX1ZxKF5NdCIhPXhmIzdCKVglIUZiIzBDelNbP015OzM/M0MySS9UVzMrVmxsLEd6cCR1Q3dNPVZvVXVTZjJ7dzwoenBtN24kQ208WTtKSlQ3YWlJZUMmeC8jTWt0V0YxIlRhZHMmWkUiZVVdNiMvOCk4SFlWejNDXXhuNGA2'@;
put 'OV1gK1FISVtmUmM0bkVLLjhWUHQoIVMmW3R7QTNPWipqNVNVT1lPK1d5dXtRaHt4Wix1MXFHbjdVZl8yYiVkd0pQJjhQIUNXUzwwTkdEVyQ7YVZqcko5PHx9R3wye3MyLCtjMDIrX3IqWEU1fERLWkI8Y0xmI2RyUU5TQl0qNHNtRkwmcV13a1k8R2NXKTY5dTpkJVIja24qJjJFeEtQc2NUfXVZ'@;
put 'VnhjfWpRMF88QG1Pfk95REtrRGo6cnhSb0g2MkdELygudnl7SWxTKy92TW0zd0FzTUxAYTNJXmZDVDJ9NHY1cmUhbV0sOzhzNGooSWgxd2tJU2ZFUURNUlg0WURdcHtyT3tBeG0qXy8ldEJbXjgmQ1JScFAhYExQXjpSY3dlOEltbmVhbEZzSXtGYlRTd0h4VjkkP2F7MEpUZWpFPHQzd1Rjdjxj'@;
put 'I2F2M3pGa2Yjb1Z+ci5uIXU0KFQiSG01dSJEQlc0fTJCRExOeUJ5LGFIR2RzeTFWdTZ4Ml1FcSF3a108Rjt5az1ZVFp3Y3w6Tl5bVVVUdUx9V21iJitIRFNmVzU5PWFWJHh7dztdaWBlQjpqZ35gUDYzfFsiVkIpZmJrKGlIIyh0N2cvdT5nKy98P3F0a2k1Uj0pTUJANmQyQnUzYUs8dmJISigk'@;
put 'JmEzfHJFZCVMfV9XST1AOkdfdjJhI0slPmA2P0wudkBHZU0rb0VhZ0IxIW9PKDRFU2VNOD52TEBFb151JXN+akx4XkVAeT4jNlpnbWFGVSVKWkglTW5yXzh1ckMxfF0rNzksZi5FdEtkYDokUGZkcVFgW1RsbzUvN3lpN3kiYWVlTUUxKWh1VyVUPnJzPEBNUTxkZ0pWcEcxcnMpJGpmZSRRSUQh'@;
put 'VUZwZEpWYzpbeH1fQiN2WHJvQlY1REs+MEIxXyQmcGxPNU45R2szOiR2PnthfDBzQ1VQeVVWRkhwW3o5eWRdMDJ+QTcvdUEwNypkZnVsZEYmXTFjXXRRXUAhXUxyeHYvVC5nKkNeUT1WL1AkWTRLRGFRSSJ8bDo4e259SjRwWC5+I35pO1AlVihRTlVYNHs8Y1tbb2BTWmFgdT5nR291R10uQExw'@;
put 'K3o+aF4hNDdwXSM5LlBlSk8+djgxZWNUZzBAOCJ3PyVTeEdaZXUxMyJIWVNlYHQkTGU5c0NnITJPLllBIjBheSJDMzJSTTlhNVI3bE5Jbl1+VVJDYXJqNjZRJE14REJjfiZhY0RWTUtYTCgkMno4b3ArMyoxZT1kMXR8a2I3VnpAV0x2IiRzcWFaOXIvUnMyUEAialpueWtqYF5nbjk6fjN9XnNK'@;
put 'ODVMR31oR140KSg8SmlHIkZwMn5DIy8kTX59JkFbIyZSMGE8YFlIdWwwWTZtey9edEx2Nk8wQDk0V3hoJGprNWEzQH5bcmhxUiwjRHhJUXNdTnEoeFReX1Nhc3UsQTg2W2JgZj5dI3glLjdAdXBwZjkpRElyYzxCcGpDV0tkPSQ4RGgkbX4ydVVePyE1NnJaOnpmKmR+VG0hdzBdLmxqJXlDUkZC'@;
put 'PTdMTkBWVV9uZlViVl1tJHZdRGg/eGIkYmVVPThtYF1rNjMpZiksXVZiV3BYYXhzcCRQPSRgRDl2JXRnRSkwWi5hTXJfa3tee3Q0MiVqSmQubDNAeWw7VEE7a3JyejBDTEYlfGxESnNgWzcjUTpiZDVAfVMlVEhkUGAvODYldG8yZ3RDIndhYzNDTEZMRkxGdVk5Onw3fjc2W0FnUERnOV9SUzU7'@;
put 'V0tYaS8/aXxtcV0rP1IjYFAsOTdgQVtvWnhZYHlSLF96SWVlX2JvMV04T1ksTGU/aTcsRz17Onc3Nj5FeitsWFp5bDo1KTlAbVp0bjNPb3Q0aUliSldSUUkleWY9VmppIWdaS3ZuJEwrVzpjMDgoUmRuQ3s/PS9lazNARzZ5Q1koa1t6bEhmQ3hOZHM7JCVXPV1HSzAvXThfL28zWnBsOCRAbnc+'@;
put 'd1ElUzghYD1fVShZe2cvfGtlSjZNNlMoSSQyb0g4Mz4ibjc+YDo1XkArZ1pIc3UsRjtOUjtrKFdpbypJWWE1NjBkWDA2JTBoQ1AyYTJecl0qZCVsI2JRPzwxdXRAelQ4YkpfSCVrZnFjfC4kJHk1UGV2NDlCQkBtTDlxWjJtMCxrYTIzYzVFYiQse2FgbTJZZTxHczF1Kmp7OGIkcmViOmM/RHB7'@;
put 'T3IjT1UvIy9bNyM5NW5NKSVqTz1XfjpyIj1sI0MoeGpxV3tsZ2FUaXBFKkNYTk9wVVFJKUBha3YhaExxXVdfd15SRkA8bUI4dEZAa3BfSVdwSjNsYE9gWDtiaWdiQWBMJGtwLjVsMUR4X1F7NWglXTxkdi43YFssYkNme2RpOFYsdT0wNn0qKV1Ge1ErNl9FSW9dYHlSPXEkRV09IV5JNT5IPX06'@;
put 'P11yWVVpYDgmTjY7N3A4O0p6ITJCO35qPlB9TzlAeWUxZ19UL2trNVVhWnExeExEMjdhUWZFZXYoOGgwQjhSciwueDwlJW1GV2FPN1J2fCJFXVtkMDd0P0JSNjozKzRnKGx4bC4hQCE0W1ljQjg8Vyt6PmNBZlprbDR4WXtTdzR9NTd0ZVEuZDg7RV1zPjEjdWt0NnVVczByZ2ZbXlo6UkU7fF00'@;
put 'bUNMOjZbJFV1QHpkJHE1Nk5CeVVLUTB6ej5sdTJ6PiJUdl5AbVB8OHx+ZDU4WzdhcFFbYHlRPSVkMykmSylES04uY2xvLlQjZFIlJGc6MFI6YDdTZHhlOyR1MHF9XTBSOmA3UmdgZFA/cTBNNkU4NV1bUXFSOntXZEhLTUZ7OEQrKiNZbSx7cGJ2YF9yNWwzQDhhJC5fZGt0ckNjZ2twRXAmWXFJ'@;
put 'WmVWOC83TmRkJEw0c3kkRnk0bFAxZ3J0amRTQk1VXm1PbTYyUjprZTtXR0pFKCUqaVtabmIuQzg2JFokJWtUY2RqVDFZP2NuRzFoNEZQVG1VaUVzQWVyJGpyIVAyN25aOTRwKnc3Pjx9TyYjYH11PDBxInlASS9tem8/eWRYaGJaMz43amRjTj55JDR3T3QhciozYz1ncztMJFQ5eUc1akVkWGA3'@;
put 'ZC83LjQ1akUoZ1hHI3ZPdTd4Ykdkc0dEUCJ5fDs5NGpYXWQrdVtjSGUwWFcxb1lxT0ZmfGZFZ21hOTR3Tyx1P2ZWJjJjdCV2UFVhfmRkWCxkLzd9T25aUT8uOm4wSmUsdXlHalpEUVJtQWV1KjRjLyQ5YDA8X2ZUbU5gfE9ebmIxTyxlZEQ4c11lYyw6QWVlKS4jS1RudV54RWVPRmp6Wmt9ZGI2'@;
put 'VGUqakpeNSQjRkY8TCh3VWI6RGUkN3c8Xlg5I2VYW3c+NkZOZ2NANDZ1KkhgbXQwVyxkTFo3NkBvKSNLKU1KelEubTBxXSw8b2pJIVlwcDBwbHd8OHIiIUFQfWRaUGxMWjdVYU43YDdmUjFOSDBVPXUwWDgoKi40PV0+djxvfGJTfT1ZZjZ9SGFeNyE7RzJgLDxmTzcvZz94bG41bUNaJFQ7eDlu'@;
put 'bGtdOGJQYUYkT206clhtQVpKOFQ1RTZNYXJlPnlpW2g1W3BAZn03e3JJWko4TFs2biRqMTlvbSU3aF4qI3lDRmVdNyxkMlZWODkyRCt4c29oTzEiJDJgWzhPUV4lNWVgU1R7RGwxbHQpQ2tpOD0leEwobHE+azdmSjZleyNNZ3lidTNfNkNXRk17dC96eTcuU0BMe3RsMmtvU2l8N1dfQjgqOUs4'@;
put 'bThMJD96SjZSRDE0ITZaaFU7ZTN6KVBgbDdRYVRlTykzWnZdOzNEOEs4R1hqezVVL01ySEU/RFcuRFsyc11UemBbeDlfcXVdbHZ0SDA+TzFNekwkbDtkaSM3ams/LnhIKEAlbzo6NWE4NH1fZ1lkOF8hTn15JipSfmR4NG97V1o6bD5gPEgkZTshQzEySkFCTHhYYCIlU1pjUCRlbHs7bmNQcUVJ'@;
put 'eDc1RHZNfTtuaFVxN2ddOD8wOmlKUGlfJD9kTztjNyt1VDJQeS96bnlLSVAjaDdnbG55Q284fG5UMn1JXUZ2QWJ1SVZRdl1uMG1hImhfJHJKKGFHdjN7VFF0bFkwNVk7XShTWXtrMShTLmFOTGJpN1ZjKj1JPz01dlouOTdJcjk3QlJxZ0lyQTgyMCU4QGZDZHx4eTBqWGQ8d09xLGhKQXk9bkd4'@;
put 'QmV3Iys4ciQxd15vZE4iYnZ5XX1RXVdLVzl8WjJtNWg1XnJddlFkJFsmZVhtdkp+ZjlHWmN2cDRpSVV1dFhybH5AIjcxPWF5SkZNNjI7Jks2JSpEUnZTNyRkZEBmVVl7YyRZS1c5PU9xZ1NIMmFoLjtubm0sLnQkJUg4P1RgIT1dOHcqWjF7N1o4PjNedTJQO1VmQXpfQF8/RmBIaEdeKDprbFVB'@;
put 'SWZbWm5heys0dVFHazwhellfJEwzK05YSWE/N1tGbmQkZlZIc3slTUVwcTUhVWJ4bWB6K31QOUsoU3pDKU99NFR6SnRsSGZqR0IjaEV0fWBYcHE1IUZvLmpxaiJoXzhXRTJjJEQ9N2AqQD1dI2dranE3YVVmVz1sN204cSUiQVk6ISo8MChKS2dZLDhfP307JDMhamVAPytMXTUlZG0lTnhPMSwq'@;
put 'XV82blB7X19Jd2Q2d3NiZGchQmNmQyQuTFZzO1csR1ZOZUdaSGFIS3w4bVZNNnhlfXgiN2dFXkVaJHUlNzJ1VTFKfWRBJUAhP3xrM2ZbQWBONm5ScEpRS0pxLlRzSGYlLlBgK2NnJHhlVHs/QTgjJVkrKyNLRShTPjo0NSg7IU9uM2hZWUlRTzNuSXZUOT88WCFdMUlicl4lTFJlJDRqWCx1aWsz'@;
put 'ZSx1eERJSFFPM25JUHxmYmVPZU9lbHBWUVV9fTxsZz0hKTRgdXlEbmchcDlbRTE5W2IkOVt5O1gvPWUiJnNpX3Y0SEBGR2Z+dGFzdF5bam5hXj88bDdfXi5gZ1ZKZzl3WDVWKXAxKSFnR3Z+X308LGFHdkAlJTklOVVfcWdgNT1aJHo+bix1IiYzMFcsSUdHZkdTUjJIKG9dJjs/XW5wJiU+Z285'@;
put 'Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+'@;
put 'Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285Jjs/XW5wJiU+Z285JjtMZV9mbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbzkmOz5sYm89OXhVKnMmJT5n'@;
put 'Rlcqez9dPjB8OlYjbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywl'@;
put 'aj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUCMwZywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8wbywlaj8hbmYlUD8w'@;
put 'bywlaj8hNjJDQCZqPyFvPCE7XTAvVSNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RW5nPSElMjEwMz5XM3klIXZOVFBLLzcjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9'@;
put 'VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0pLc3ReVTltZjopc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2'@;
put 'fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI242NkJ7X0o9VCRfXyM+VHt5Pzd7TnZaRHpFTUpZU3dpRypNdlpEekVNSllTd1Y5bjxoLmIsY181Liw9UlkxMnNHXWRQTnZaRHpFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6ODBFTUpZU3dpRypNdlpE'@;
put 'ekVNSllTd2lHKk12WkR6RU1KWTRlU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUdwZypNdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1LKj9dPGw6bmcsfXUyWXAzUm10dThtdnU4bXh1OG1dQjByNlsyUCJXTlcpcH0h'@;
put 'Oyx7X18jbXxxWyViNXghO0tNOzM/VWJpZzlXKnNxdF4zM3tHTm08JTtfMzNgcGtmfEdMTV1OWCptfHFzeGVZKmxxL2JzdztfMzN7RzY/U1ZdTlgqbHEvYnN3R3plW2EuN0lJOTVpRUlhQFNWXU5BV11OWCpscS9iIjIqMXV3ZzlWWUo9Yyx3WlJ4Qjt7VHlKYX1QeH5PUmZpISZpcSpddy5IMlBS'@;
put 'ZmkhJmlxKl13JWUhb3Ahe180NWFiI281LlozWVgkUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEq'@;
put 'XXcuSDJQUmZpIVY1fS5AIyg0UGdqLzJeZC9IUWUvMW1lL0k5dDQkOXxyfHU2W3dbZmhpZXNmU0ojZ1F4V3J0Xl0vJG85UUJeXyMjSXJbZmgleCE7YjUyXyVRaiVlSW0jMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZ5bGcsPG1jZWlzfG9RXU8kTiM7NnQ0KmZjLGdlPCEyMCU4N2pRUG1mYyxn'@;
put 'ZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlOCwjaiUocD5gdyxgfG9LYHxYTmB8R1FgfFsjO2AkSClRTSF8ciNnTTklaiRQXkkjZ005c3t9PGxZOy57PT9o'@;
put 'Zzl6ZVlydF5DOG1bfW1xW31tUVB7OFc7bTlicGg4O2czXSRlOCVSO205YnBoODtnM10kZSVlIW9wIXtfNDVhYiRgSTN4VV9CZWAkZTglUjttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSRlOCVSO205YnBoODtnM10kZTglUjttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSldPGwoZXU+JVBY'@;
put 'bl1MWG5ITVhuWE1YbldQdT5+Vy9pQEROfF8jS1AlZSEle19fIzVdXi5TfmtTIWc8OXV7fTx5SHJbMnNpSmc5XmVnOV5lbDIjeDc3JXdBeTdPV2lAREdmcykqSE0he3V3UFdpQERHZnMpKkhNIW45eT5tJHE8OlFuaW0xL1BlRH5VMzxFbzpjUE9SW1FrTk4mW2clK31Td2pyUCN7cDowYWJkIVtk'@;
put 'W0RHZnMpKkhNIXt1d1BXaUBER2ZzKSpITSF7dXdQV2lAREdmcylTfXxmIUg2JF9EZT19Q2U9QkRlPUZEZT0vRE58WC9TZn50YXN0XmIsWWVNIShydF5RfSZvTCszeCE7NVA1VilwXXVpJUZqZ3ZXbVhmfl99PGZ7OF1jOyFIZGVOZnppSyVBKyQhI2BQcnRecyk7YC84Z2MkNDpdNmBUYVQ/QGlh'@;
put 'Wz8hYWJoeWVYbzl7TyouYTtJbGk4TnFRJmNnW203Z3o4UjpqazJtazlRK1daOTQhMkwkYzExJW9bQGlZM3JVTzNDMzFRVTM6JWtbIy5meTw0amtmeWVYKi4xMGVYfG9RXTdwUV15IV0uQWV1NHYlZjg6OEMvQCMoNFBnai8yXmQvSFFlLzFtZS9JOXQ0JDl8ciFqUk0pWGk4fS4qSE0hfHIjZ1cj'@;
put 'JWopb2AuWzs8bF1IV1Yqe3R0aSVxa0VeXyNUODUzaXJ1NGhrfTM2WzJmXWxbSU92TWRbUCRVVzlnWWQ4JGFAMSQ4OE81NmtwNi8wLi5sNCsiZlEsT2x+JHtDZyMjJXRQe0ldal1Ccmcyd1Y5QHcoWWh2IihMMWdUN0hzeD8xb2ZbUlZQKT8hYz0rTDE8ZlIjRGZbUnlFaiV0UFA5PGxnWztgZGda'@;
put 'VkNoSXI1NnVRUzZaOEtnTWQsLlt6cHk7PXkja2QlQEU4ai91UXlMT2ZWJHY5UXprXkckdjl3fHg7IzA7Uks7djt7IzpoMH4vI15tUCRtOTJtQXBKODMmdGFCYGM+cFVKOWBde241ZTdqaSUoSilydF5pc2klKEpfP18jS0RyW31tSTw8bHQhY2U3anN8fTx0e3FbM35TSmc5JmhYcnRePkQobzp+'@;
put 'I3ghOz5RPTQmaGghJWopbz82JjkhO2JKfV99PE9CXy5vM2EpIWdVbD0qPGxYfX08TXZxW1RGJjghO0RSezM/VUgoIWdQKV4/XyNYRV8ubktXaUxQaDIrcEdpKyViU10oRSFTNk4uW2hDZjszP1V4bGglY3VIbUFrZ31YZU0hR3VDZjxLa3tfI2JFbWZpc3xdXyNjeDUzaXIsKGllRyQ0VltoZzlu'@;
put 'aVlydF5OOG1bPEtyUnw4IjdyUyFWe2lfUmxedUprMXMpUUN7UVF6SG1fL1UhdDxbMUtsX0Q3SXR4bGljRl8xYyxUUi94VWZjRlIyXSpeP1NkVnk5VjZXUHY5NzQwPCxna0w8SihqJT07UDs8bChFMVYqezQrJm8hOTw/PGwpeDRWKnt5NG1bZmguaGc5fFN3e308bzUiKUdAJWM7LiMmSix5e1BS'@;
put 'R2ZFKUAqPGw7RWl3Y1R+ailJMUlhdntRfUlEa3lqRD1MU2A9Siw6KUosLjA7UkQyYkMxSURrb0tpfXlJVTw2TTNpVVB6SU46VlZ0eVs9ZDs/alMoclM7Lm9lQiMzWkFKMHN8ayFHbHl8WXUpO0pAJVIqTkIrKiU0b15CYHZ8L2RQP047d21qYj1yTmQzPSZNPDpbYUI4VStWN01qMncpLHFLLjFn'@;
put 'amxpPCFPXkNMKTFQbXBSd3k4UHNUMCFwY1g8VjdMbTU6RyRjbERnfitWVkkoKFJWNk4ueGhqPGVoQGldKilZelF8XyRrbmlvS30xV21EXiIobGhvSzslcyMoODosNSosOVZtc1RJL0AwTzQ5RWJXZ0pLKFlTT0RvcEZWc3tNRCI7MzF7bHtpZTVWX0U8Uip0PXMjR3VaeVM2JFBtU3dLQWB7RiI7'@;
put 'ek16PnpLPC85KnlqK1U0KzI2L1kkLnk2Z1NhVTNnayt9Nj1ZWyore0whdHF9bWp2KnB2Xl1iXzF5bFZsQ1NodnhfX191LnQ9dUorR3JJLnB3ODosLCo7Ump3Ti5mTEQ9e1JSUm54JWt8RFZ5PDRXbGNHeCNsbShlPXEqVkZMMVh2PDJ+aVRpRW9tTVZaVjczZTBkOklyWDc6d1VLKzlzXlZYPDdG'@;
put 'JUAkP2czK08lVT1BQ0V2Pk9bVllrNEpWUU4hViNSd0Y9T1tNT2tUSFRPKUdRRyNibTpsPCV4PEtNXyVtOXZZW2o4bWFyfnt8ajtASyhUZzkmZWBXZCJfTz02Z1NzR2YwZnxsR25UOiRYSTJsYFhUZWdxMDkvN0p5LCIhZWB9P2BebDFOPkF5eik4bzZtYi5ablE9UEZjPUw5ZyVPLnpKOCE3bVF8'@;
put 'T25hKEpga3tLamc+eXN5QlBuN1EpJTJoRmdzPm0kLGwoaVBnV3YyO1ZNTz1nLkhvYldwM2QkbVtiPDQ2Myk1Szg1IXxbJn5fWVtjWkJdVlpIdDtJfTxsRWB2ZnZoWnRaMCYhQDcsRT04YSRdJCZXPX0zTyxjKT9PfllROVhkcTgzUCRwRyN0bz5nSTkyRSt8QlB+LFZkVl5wYkY4UyNiamM3Yzpi'@;
put 'OGkkS1R4ZTFtMHFiejZLaElkOXZ8SDpHVmpZZzYyTktkTTcpXXBOXmE7MTx3U0Q1bTcpeyYhR2Y8czQ0aD8/MG0kY2ViYnF3XzN1PTpnRzNgOVI8NWJUaDdPKClYKywhYThaM21gLzU+XSNETTFRaEU4MTs6SigkQEhVN1k8cVlrWFpAbSVeZjt6PmIlYj9qajk6bkN1bDw3anh4Slk1dFR+ZF1i'@;
put 'IWgoKls9I2IhaExDWEVCbnBsSTx3bj0sJjY2TUMmPWNdeDFRLnJqfVdRUD1NLkEmMyFLRkNffGJYKyIsRXtFcUsoMW9LKFhfMG12OW5NKC5DQDA+QyU3JHxASnFLUE0oeyU3JHIrYV81NWlJNWhDaU9CVyxkVkJdJCs+ISQ+ZT1USmlFNXFiXzFucWpIZnR9V1V5Ym5sL0BBJVhzTShDQFhzbSwv'@;
put 'bHttX0kkN08xVV84bTEzZDp2fXc2LiVrW2Q2OXN4c3xpLmouNTFmUFYhN0ldcnpEflN3XnpdPENfPnwxb3FUUD0qQENRQnsqZEtYVmd2fV0wT1BOOEVkekN6QzkuOTJuWz8xWnJWbU8zUjoyaHQhY0BNKE5sQS56al5tUHw8ekVmenh2LExyYW40ZjAhRD4uOTckbF5OPXJbRiZhPy4uQD0qJk1O'@;
put 'SCZHZVA/Znl9JmZeZ213Lldfe0lXS0M+Vncpd3tobFJNJjtASFJZRSUsT2RuMWQ2TUAuIVteYmB+S3VUXiVOYH4/ZS50Pk0hJSFvcGYkL0l8Z2w3RXklU19UImQqcnQhLyFWbkkkOSE3bS5dRXk7bzE8SkBnLCUyQVY8eCtQNXFTI2NASjIuc1tLIjVuSVlUbyhJJHclQmpCLnI8eHx3IzNZKW1k'@;
put 'Ols9Nm5LXXNSbzhfJmJRIX5dSkRyZGtYX0cmaVt7c3gpV3VxSiJqVlQoaDVhXiNyKDlqR2d8d184cCRANztsem1mO0FAVThhbzBkPG0uZDpCYyF3fDB5RmlHZipwNXhdaD03SCtPKF1+SnZCPmZgPnNUbXMscjg4fWw3dD1dMDMpVGcibkFbTyh9answUnF3O0gmYUdpPHZRRTNkTShreWVoRVN2'@;
put 'ZDpAPUVoXUk1bVNQUnEuVG1wdjokLHhKejQ0aF4jRU1bSywuWyZvclZtN3B4ZlU5UnFuMm49NlVdVWhlTSgzekE3KH1BIyp9fmE3LF5nSGA2MksoYmlPKS5seCwrXUx6clIuPFtJbyglQEZnIm5wMjZFaW5RVSk+I2IpSSU+R2d9ayJuO0BlVGIkdX45NkJ7ZVQ9OEQrTytEKFRnfHd4TiU+PlJz'@;
put 'XWE+el1PUFQ6SVZVbGltYiRzPkc9UWklLjsxLzhWbTV1ZDA2WGQ6eiUlYS9dSWx0Pm57RjFuZDdKK2lfc3IkTyxMLCRYRXloTSklZmdxM0orT3okaiV+VStmayQoRkA1LFIjO2ouIXtmXiNTPTRlfDA5NiFhVHN1LCUyJGovOTRNP3wubEd7bDFicTNgLmxDYCQlakdfITs2cShvM2IpPV1MOSZJ'@;
put 'dmwxMUEuJntpXkdmI2AubEd6KjR+XS48KFU/fWdHXyE2SjJfcihlUXVYPS5gJi5sdyE3VChKTSVMNm48JlIvUDJ8NG14Z19teEdOXltqKl51PTB9V3N0JmFHOiRyUkJbQVI5Jj0wZ05AOXJZOClyVSE7UnY8LGxseWhoYHopbzNDcD5RSD80K25kVEV6PCpNciguIjNAYXNwYjpFZSUjYX5TcjF8'@;
put 'bGEhP3x+TjBkYjZVZVZtMyk7IlRDYyo1azFJWiQ3cXQsUT97Oi5nZjZWSH1Pfk4uRHNIVjF4N3Z2WCx0bklaYVtMVWBkcGwyMXRVfk5fSnZfRHltWkE/emciensxZSlNNFY9QTBpa3xtNyQhOVteckBnJTsrUD9GY0FdSCNyK1puQFphYWJiTHlOOmQpNGh6bEJkWG9aJF9iJXx1c25SQ09EK11W'@;
put 'dSVNfFVDQVBOJjhha2ZgZCtlLl1LJExlYW5geVZnImtBLmJ3JDAjOXtdaV9uUDxyUU59TX1NfU19TX41YTB5JSVJQiM8ZUhoJjBRTmU2ZS8xRy9QaSxAPyNvMV1eSTFtXn1wYjNgXUpzQHF4clEhai9wOCE8elA9fkpMVWVnaFtxeGgkfjAiUj4lXTd+P3ddL2VSdlZtJmRSdjsua3JmLDdueyxB'@;
put 'aUckPFIhfVkzNj5jLDduQVJFKG0zZik8ejBKSFI7e2pQbSxOaFVmUGQkUHRlYll2SXtkfF1dIV4yajE1JHFaWW1MJD9nS3EmSUloUnY3NltKOSRwJE9pcWhRP1RQflkhfFAjZT1EMzZ6N211VT0uWjhWe1J2XzU2cmYwJUBCb19pOjk2aj8pfDE4SjA7TG0yJD9tXzVVKHtgOmpWbmlebGBLcTRq'@;
put 'RUkhZ1lwMyksbTdtVz1OOzcyb2AzPnM+T316Mi97NCR+MFlWWCN4eyopbkY8eCJFMl4zdm12bj9AUzI7MV5DUihRQ2lyaCZ2c2BpaXYhM2ZuPWdUP0tmZHVnWyk8bCRfNE07allKL2FlXktdZkZbcXcqTFN8JXQubH5WakxAMH5WajtAdm0/c2hHYHJGVnFib08lcS9Kb35FMUtdVCMuTSs/fCpq'@;
put 'cnM9SXkuSjswfSp8JkA9ZG5jPyE0YykiL2ZnZXE3Sk4kdypLXW1iPn04N3teejtnXUlReHg9MiN8bihbMDY7VmpkJG8oeHN8ODEkI2gjVlBoOXxGZzBAVShrfXJ+eF5vSlg9cn5DUU8jdXFyeF0hXjI8USx9dytzaEU4L3tPPSxrY01gXX5qR3NYbTVRZ05jJDd4ZURYc0pZJXxRPzErIWhbanFz'@;
put 'Xn0yXyE2Pn4xLDFtVj1GezBhaHlkKWFRTTNoJFc6Xz9takhKK1FHcEpeJFIzU2sxd1Uoez4xcn5oMXdVM3NyNlhfbWpwRCVhWjNoKFc6ZVttanBEbTFgVn0jKlF8SyN1aF59L2lbVChKflkzQW9IPVJTZnAxMStwSGRuYGxvK3BQPUsyaWt0a3Zwd05FfWNRIjNsPHU9N3AqRCM5SDg1TzU2VllH'@;
put 'LjgsQFoyMz06aDtHcEJUeSQrcCZFI0lNMmVRcWp8WkdiJV1KOXJZdk5CcFR9TmdYU0Q2OnJWbURVI0wkRDxTIjp4X059TSlOMURhSyVZY15gMDlGb31KXlVxPCZNeTRtM0ZAeFNAe31hbHJ9NihtZDBGK114RSVYJnB4TUBlLjJtVn0xb357Uz1DbyI/aWNpbVFzNVFhVCN1PnJyQzFPOW0uXUF5'@;
put 'QCV0VlE5LFUve2JuRn0uUCorXUd1fSp8YCs3PnFoUWl4eX0qMj4ofi5RUysmXmJpYVt9YV8rJmolVi8sTGpnLlN2cCRFTTUpZj9TdnUsSUxAWmclMWAkajdWSjNxRzdKbyFCWztANGJwUWJgOmozXyRVZj09PSFhMSE3andbYiQ7MDd1ME9jJXxxU0VdZnV9KX0xM1UoZlZJOXMsfCZLZVY6eEIz'@;
put 'RV5tPU5vIUBadWw3LnJofDM6IylANDZxLE9sfF5tLC9sUTFNXSNvOjpNV2cmK2FSXTNQWSV1YT9ne3JuZiM9KXEvSmkjOzBuJGAvZHJuZl5QdCEvMERTLy53LlQ9WVdfRzVLcndVK19PW0tIOk89Ik8zKU96JUBhLDJtYHlCQEt1d15RVXVRJiU5MiQlNC5hP2AqSF1Bb25bNzQpQDxYSHVAJS5N'@;
put 'IyxbemJpJCZ2JXI8T1k3WmV5TmAyMFs9N24ucGtvUVtfUjNfeWU1UDVPLFlbam5gI3xzVW49T1U+fG1vRzFPJTJnfXguUDtAJi41LEpRQHxBfWE2PXE4LFtIcVZuLltkfkJ0WXU0UCo1cnNsQFVGeXo8MXxHZ3oyVzE0aHsrOTJ7MSMyeSVZRHMlKXpKIyhHSVNHZyJqRFE+Zk9UQFIuclIrIm5o'@;
put 'OnN6PDI4L1RbXTt2XVp8XTB1eEg6clVZKDUkaTEzYCs9OH0wMkpdMFM8QGtJYSReI1EkTiRoKUhNeFFWbVQ5YjA4OypsPCtMWyIuYCtrfT8xWyZxTkJwNlREK2dkIz06MjxdMnE4YGV8dT1PM2VUJE5NajdURFNPKHRVbj1PfXhVLnI2YlUjVm58WkVoPERLSV9pP0xFKHY7MmdaaDVqYSxSd0Bl'@;
put 'dzs0ai9wRVBgWzBaN24/Zz9dL2RuMyF4Ujg+ekdsRlFSO31IOz1KOUNJfDwidyViTGU0aCViJDdSYHFzRElDUFZbNixRPzBTQlJ9bmIkMF04JC4jdzB7fXlzbVQ9dVFTZV9gLDNtPGRRITYkSlFAWmViWl89TmJ7ZGciajpsc0Alb0dQSVhbZDRldTJsOzgvYCpAREBDJUovYT4+VXQoQHAiNTBl'@;
put 'MUB6Vm1RXUkwdFVFZmpHJDd+aSQ3JUBzIkdyUC9ZUHI8dERRfUdkZ1A2N2lzM2cpQmJeNiFrXURRSmVlOFI6YD81YSt1aixDWTRjaSptMD4wfVdNe2M0IkMpRClEVEBAYlg7NWhkby4jRH44bS5dZDNOI05oemx8YktgL2hiJktlUGU+eFI6P0FFM0g4OWZVN1I3X3VrZVMzKUJjZ3xnQHVHc3RE'@;
put 'fk5eM2xbS1FBL1BlNC5Nck9jbmwxXWRiJCYmMloxYCZaOGFUUjpiMT5POHJ9R1lvOFRRJi44ZHxgTjQ0USw/N0U0KEJrbzdxWixMTlldNCg/WVM6fDcpeGk2KnVkM30qJmp8M1F1NWkxM11yXlZDOGhjbT00YnpsYm8iYkdybV9kKXpWcEl1OiszWlteeDd1Vm1AQldhaXZZLGc/Pz8mLkY7aHQv'@;
put 'Vn07V0BYX1V0MGFZZWhANChTI3EySFYhfGBObGhVLn5jQlh8RVdwVmJbdUUoRnhhJXBkNyx1cmJ5aFVbUTU3bkVdUVlGaSFEL1FEPD5uTDBiI25XNnpRUlE5X3dqV10iaUB7I2luT2AyUEFwQ20wP2JRRHl1Q3Y5aW9sdFAlYCoqOXJlWlo0NHRabC5Gem9uP3g/WTl8ZWV7WTxbb15RLEB+QzRr'@;
put 'XiMpKTlyQVtRQEFTXSMkKihXW1I1dF1KVkhBd1ZhKHd6Ukw6JlFgbik3ckReSl4kLyoyKkVsdk5hQGFbZU1mSW9CUD45d3V1dypDfjhEail5KjxuY0IvenlrVjYwT0xIXXA5Q2hgUXNEM0J5fX0haCNeTVNeSDpuMnFQPHZpeldXfm5iTlZnaikuXjBvKyQqX1BTRTp9KSk0QiNzLGJIcjMjWz0k'@;
put 'd1ReSXlqK2Y+WX08VF9AVitVOy9pNToiTTk/XXtuKyIyPWdeYD1MZ1taTG9OWyk3Yz1HPUo+XU5KcVZVanMzLEVTZmRfIjRgVnxZWCNmR0Jydih5cUBLezo6SHUhcH01ZE5ufnVBVVhJYj86XzNfRjhEXVM5ZWBEczElY0ZNMDBmbzc+c2RRJlE9WSM+eTF0cTtoUEI2SFg8OVQ7Rl57MUhTPmV5'@;
put 'USlJdjVXYTZWQjNuUiJzcUxEMltjTm47PEJ1JllmT2tNMj8lK2UxMF1MXkh0cXdMLDd5YnYiVXR+dks0RlIvPSUzV3t4SGVCUTFmJHNRX0E0LiV5aFtlUEF6QWFtYE5afFdiSVVRPF9Ubzl+bWcmYS9DWnIwLDFFe3wmRmZXbF1QXnBgQ0RNVzwvUElnSiVfX2giYEB6U0tKUClMSVE5SnwkPkY+'@;
put 'dEZtSjdnLDIoUih5ejhxYFt3RG16djZuVixXI3Qkd1V8QntkVkskPTNnTFcyKVp6OzxHNjZZKF5RPW99biw+fFdyJFV4MW9bWHZCM1EwQF8ycG5gKmdYMlddTlRLO3FMZns1RnEqYU5qfFFwdzxXI0NlNWpxTzNuRDc8T3dkQlFEc1ZSSnQpJGJlV0AxaHFXdVtOW25Id3xCIkhzZilRbUV4cUJm'@;
put 'PUY+TGVEUjQsIzdedls/TnJWfG9yInV7QD4jOlZPdUIybUpkbSZtRlYlbmMzfH0jMC5IT1F3REFSTlFFZComSE9CUSs4RFlxPDhLIlA4KjxNd3h0IjJBKnJbMUJ+TEBLRGo2ZX5ZLHJmK0kuOCp9JGdOWHo1TT1MJDNuJUcpd3RyOSFRMW9WV1tEaltIbyh2UUwpfCl3JS9RQjgzdlhTRVd6fWNz'@;
put 'QjVNfktoRypgXXxsQmJKeUFQK1BhPmUlcmRza0EvcCkodU11RHVPXzNoTiYrNTBiKiJ2UU81PltFdC5uZz9uelovKDEreGgsRnJYbnJLdFEoTHt8c31mW0dqRl0kOklbOU14Ijl4fWB4NXZpTklgTkEuYn5La143SkBYbz4vT15VanFGJSRwU0QsRnhSOyY5NzpOKT1vPmhTMyQqWUkzRUxCW0Qp'@;
put 'eytPRHtlVCNtS0s0KzJ9cXc0TThiYz86UTlkWl5sN3opLjxWbWhZWFg/QFVtT01HU2tCNGtLaW8yakQ6PHRCJThXTz9rPUJJXT46R1NkPWVoal5CaWVHbiNXMCU2Qnc0QjIqLE1GSnRFaF9Ucig4L25yZWgzLDNENV8zZlJRI05wNVcjXSJKVj1hIXs3akxDMTJAUWxieyR5VF5DOj50bCpoIXoo'@;
put 'TjdtRUMkbXNDMSpOXThZbkR+d3wyR01XXSE6YSFVeD9IOEE3bDVzRlBZSW9ZXj57NWgrZEMhSSNBeyFaX0c1UldCWXxxX2A0NHwpcmdLQHp0W2t9Im1+YCskVnxfWVVTIkg3fUY9dzM+QUpfTFp6PElAdVMvRTlaM2IqKU1SY2NtMlouTTZkYWhgPjRITFpHLElPNEQ9Pz5GZTY7bjx9em0/aisi'@;
put 'ZV9eLHJ8MDJfUj9xcEZ5cCRLb3VvW3pwcDBHfEZEJTNESSpFRWY3cW1wbTFvW2VZW3FHPzNRNS5jPVQvT1cidixgKFsrJm4relZTbld6aUpYJl9aUjgmPHdybXZ3XyF2c1BDdW9WIzwmNG9Wdl9RWmRbTzlXRSNKUj9bKkBTUU9GL189JjMqQlp6dFdhMkxtNCFoJWpdaCU+dG9WdF9iSUQiITYi'@;
put 'cyxgeFs0OXJzeHwldHw9MVJ2LiRLd1VRKTpvIz03dnZJNWlqMytUMi42cjRLR1NnRjY8d213fEEjflVsPUlfNX03XkcvKzNvVnJfYzFjW3VwYSN9amJ5dEoldWVLbVZgKyghQlFeLjo7IlVKXVUrMDJsVnQhd15vbStuIjwjcCM9dk5iVFltSCMjJXtFMCErYCpNWDxrZzRwaz5JXXwjR3RvWyY4'@;
put 'WSwkT3ApJW9vSjg9I29hVFltb01tPFImWH57U0k0UkMoaGY7OHtKQk97LkJkaiIrcjU7KlkzWythTUxDPFIzKz5qeXN2U0ErYS4kWkZqQCxPJDB4KyRfMnhvaHViSmA8PGtMU35CLGBsWz5iOU1fVTFLO3FwRjoqNCFPb3xDeFsqLiYzPzpKbz5uW1ZbbmlkL285KCVLKklzTUlLTkBUIz5QMC4m'@;
put 'M1YqO0N1NV4keCpnYkhNOz5nRlU+bjNHUnMhcm0qNERHRW9MNFdUMWBRUDpGbjJvVi58N2FMNGhTW3F3YG5rVVchaixgfUBLbntDInlKdyxNKXxORUw0fFFbcW9gb1tUVz9nLGAxKCVLP302bWAwVG1pYCF2VFcqZSxgOEA0OW1zbDd4W0BeS25tc0E2ekRdclkuVykqSFI/QWpUOVslW1dHLyJ6'@;
put 'b1Y2fF1sSzRvTltxVWBgNlNXM29bcUZNTHZVUVtuKEFpejJ8fXo9cWhHI14wbzBEKDo8RnFSM1tWPm9bbVpNKm4rRypWUWhYQGleTyheZ0ZjVzMucCZvV31gVj5VNFRNS253SCx8X04wW2l+SWp6WyR8R3xPNG1UbVd0bUtud0hyKHheUiVPLiZNWDw1TiFdWVs6ViQ4IyZnKXIhWWczPEt3SUMq'@;
put 'TSVzOXpbcTtzIz1vViRzWXlbcWAuKnk2PGJnOX1hR0cvRT1WPi59ckRHL3w8VWgufSEiYSsmM0MzdUwrYDV5KUZQd3JnQ3UqKi9fRi8/PFVoMnNyLyxgR0A+YmpzKy5XQ3hKMDw5RnFBLEdiZjNwbER9azIhd2pbcWN9K0pJL0Z5b1Z2fHxHSS9AeG9WaTchWkIiVn5lMngqKV5PN2ErenV5W0Fe'@;
put 'aHlieFtxfF9vW040bzlvVkx+Nm15W1V2eXN4Kk01fkN2SlshdltbcWNHQyNMVHpmNmhoPEZwe0BfS3EsSC9hO1Y+eHM6OCxgJn0xTXpbPSR6W2N8L2U7T31Gb10+YllXa1JzV1ZobSZ4fGAlRi9BeG9WRkR6W0d0UitKT31zTChsViUmN1JSI3I2b1JAeWovfGtpZCtIKDVlPjVeMGEzK1p7Ri9U'@;
put 'Z2BhV218P1ArKlQ9bUd4OGBjJHYxKDwlPzNRWVdgTyxgeH5lNkYvendwJklSeks1IltBNH0kMEYvVHdwJmt8fEdKNEBGW3EpX012JUIzRSUjO3FGLzJ2b1ZofGE9STQ3RVtxOV8hdkwmWGNDekc3ajZLRUl9ZUJ6W1hdPy5lc1IzLGBJe0d8elEvTXZsRiM3K3hKeTt5WmQqISkwfCEwYiZrIjlW'@;
put 'JmB5W0l8UitJL31+RX1bYWIwfUslYSRWWmJ6I312UDw4Tj5Tcip2ZlpGdyxqXzFFQWZ8fkN9JkgoaDl9SjZMYyF+Ql07Y2B+M18kTn1zY3w8WlJTaihUeDYyQF81MGZwZ0ZgLm9bO1tEMDVgUSRBRT10MHlNVF9fOz1EZ1U4byRrW0F9ZEcoaDh9fkM0RlpMIn5XMy9LZGBsdVJxW357YFtLfXM8'@;
put 'aFt+SD9xe1Y1YGVbfkc/Q0hzKFp8SFlBdEBJcVcqVFlWSzZsR097WUo4UlldRjMwcHguWEVOKChga15tMSp2VmN2d2RNI3Nlfm8vbkl7c3ZfKnV0KDZ9MzRHN3RwP1FkWyNDcUZbfn4+Z046cS5jR2hGfjZZbnhqPG5TL1liUiIsZ3RMOSl5SU5JfVZFO0lgISZpfS5OM2VFeHE1fHlZYTxfdXpG'@;
put 'PyxNUTk6cXFCbnR4YmNWZSlIJH46XmZ9SyM/UXxzUH5iPDBbX3N2fGwhdSg+fiJfflNzV21TQSIufil9Vn1nOSo+e3NzfGh7NV1ROSR9cT9hI3UodCg9flp7QGR0V11+S30sSTRGJH46P0VofXMofXx3NEYic1R8JkhXTF1+Pl81XUc3X3NufENIaW4jfncoMD9jWn0pP29idk0vPX44X25JNH1Z'@;
put 'P3kzdCgrfi5gXUJGfiZ1Z3hMX0dmJTU/bmtFRXYrQ0hYV0BCIk9EUmJYYyNhUiN7LGdJaEkrU0drdVUqfVtUbFRXVlA5UCtAbnozbzVEeGFrTjomVUlbI2Z8SStPdU52Uj9kbj89PD0pQkQlMy9MR3lFSjUyOmJwQlBMezFySzBVO14zWDFGV1RDLFsoQV9dd2xUTTc5MVt0cUZaZXJFaXR1KEB+'@;
put 'TiNdXUdzIz1UaDNnbSZNRztxcUo9cVZ9PX4jYHNwVGhePEp8ekJ5ci50dFc5fmVbcHA2bEozRVQ0MHorNWVTM21UPSldeDVyS25VMVc0WTlNVT1taXI2Ljwxej40ZXNtbVYodnNXV2lARD9jX289JDlneG1QPVdAITAlazRYZnhxRXx3eUptdiYvM3AoJTVbRW90KSVvfX5jdFl6XVQpaCs+fn5P'@;
put 'M1hRNDx9MnokKlFqXyh+UVtFb2ElS3xrXlpzK35PW3s7bFYuUylocX5QLjg1e341T0B+dGBPalc0NH0kMTRGP3Ngc1RVdmdofkNIeCljYEV2WitQSUBLI2c6cV4+ZXNbfDJ0c35TT0xMV3xyKC9WfDR0WyV5c347X2NuNHJIVn4uJE5bfFBAaFd9M05XW3xMQEw0O1V1KChzSl56eVpyVzQ7MyRO'@;
put 'cltKIkB8MWlyc088P3N5e2tJNlZdWF8uLkYpYF4pe31VIShzR15HL1lyaG47M3NKclthdkB8Ymlzfkg8S0xocmpCc1t4Ont9TSFXKCV7Zm49M3UoQHxdXmRfPjMvJmArLzY5VipiZU1BTXlXaXU/b3tHSDRMN2FPbnp4JEg3YU9+eElMSlZLNiQ0ZXgpeHh0OipzeCJ2e0x0Pyt+LkZ2IkJyKkhf'@;
put 'X0AoMGR9R0MrX3Ngfl5LTXtuSTZGU2FoKSJfPigwZC5HP3Q9c1VDSzZtQVd4ZndZTz5+L187KVlGPCghfklGcSJqbDNbKHJGbVMoIX5FbWJ2W34xQU9jcmEzTFMoS1ZLNl8oa3hLdm5JWj83S0EiZUFJN1ZOTnhnKHlLRzokV10/ZT9hdlpdWlNXXWF+N25wTGZHYSJVQ1d0QE92dSl9RzUwdnpG'@;
put 'MzZFfmwiczpEJlV0ZHpQRFNBS1Z7Six+RzdTfEZPZkcsbmIzWnhTYX5rLCoqQykxfT8/MWg4cGpuOW97cixlJHpESnxlZz5+eT9fWkk/bzF8MWBTYGx1Ln5HK3wqaWZzPVdbOXElMiRGXndvRFJta0RycmouR1lHRV1UIXFxN0VAekwzJkBISC5mSWI1NG5HdlQpcz88Oj9Qd11ldmNTYVJ7NSol'@;
put 'UypLRzp1T19fN3EjI3MjNU5LNjg/YF9UZXtkRkVTYUF+PT88WGx5Pi5iMigoV3ZrSismZGU5SHE4a11PJlhTWSN5VCZLb2drfitxL0oyM1RyJmwoMWNKTXc7Sm4+YnFtWmR9Vl47KyI1TiEhNDU5N30sW0ImRUIwVHZiU2EjKyFMOF40XSZvJXUsS0xydylPdlozTVhNLkc+cV99LC45Y3Qia08r'@;
put 'c1U0cmQpIUg0XSNCcj5CTHxyM0BvPmpTZ0REKW03LHZTcUF7YFtWLkF0Mn0+SVNfInt4RTp8UUU7MnV2YXNWeVhzcVRAcnIkUzlFcFJeRm9aM1s9WyM+NlY3LmxCLkFWPWpvSlBhJW8+I3htS2VfeXQ2X3E/Zmg2V3ZgekhpTX5dRV0xWUtaZWhNODtuW0gpZjZISTFLVl0xKyRiYCNjYHNOfGZx'@;
put 'PFhtQnUzXWtJc0dnS3NwYEB4M1Q6P2dGZ0l7Imp1PUgmUnh0PXxbZDN9KkB6SDpSLGI/Ky5mfTpUUXNfRys1QVUyXn57cVpIeyppNmE1YTJtPzcxLHUkXztxLDVoRDhdITVhYFpeP31hOyEzIzFqN2F5WkBZcT43KX1hPlAsOU5lcSxTOE88ZVRnVD4qMT48Llh9LDxCfWNeX1NHb3NAMSMvSnZ9'@;
put 'I3BoZiVPOjNPKF83JkttLEpsR2lqMC97WHlQUVEmNFVUMmZWPCo9e2c2JWdbalA5OFg9VT8uL10maUwwI2BXe2RyV193bTA7cDg5PVErVjhZMS9scC9ob2B5QTo2QF49ZGdgbVpeemhCYCVlNFByczhwJl16bCsjMmdVK0VgN250NkMhOzBOODEsWzNWVntiTHhmSW0sdjF5ZGlZJChWY3NITHlP'@;
put 'WjAxMUljdkxSUH5SRlY6WWVBU311Ti51ISIxYkM/azNQYmprYTNFd153STs6KCpUSmJ9T1QmSSxFSzZjdG14aHl4N2Jjb1Q6SyR+PlRnZHQjS3xnIm1LZDdNaElsWiZUIls3aT1CKm83WzQuK05wKm5sX0N1b1IoVE1pbUJ+QXlXQ3l1aTRJLHljNCtPdXU0ND5XTkhRcF5uI2B3KTUuQXg/Ll53'@;
put 'TXRKNzF0YlokTTpDVHRnUUBWVDdTR1N1alVpV1F0O34zQGg2fXM8fUwwQXQ/flhgbWJXNG1+PStxUHt+V351em5JOX5oQDV5ZUNGZGV6PVZLKlBJcnw3fjpeX3hxV1t+fH1FJTp2fHMpfjB+SH0wWz9RP35xfj99SWBaU0F0S05GZH45aEYwLm1XX2JFPChRNTNnNDJVUVFqfjdxS101Yz81SmIl'@;
put 'M1lHZ0Z3P2xWcTRqJDp2dShRLExjQSJ9fjt+JStkeXJVSzZzcj8/dEAqTkxVODdSSStPU0I3aVBYeHR8aD5xNXkqPmFFd09+ZVNxWDVPN21xIiJ7KGtfYyp5MUMiMl9KWTFXZSp9UmlzV3FedFs3bEJycXw+M0NHOjlGfl9oQShLRzpRY1d4OnY+WCk1U2FVdF5RUUtKWDRSMCl6V1V8Nj5jaDFX'@;
put 'TWI/alcmeTFYRENEI0dMaWlBSU0rYSFTcUZXUmpOMEFwRXFwXUN9PnVHKmhDNW5YOER3Xyx1YnFEdlAiYXlwNFk+aEkkfkxMJUZTWHYmRU41M1A0Vkk/fmp9Mkw0RiV+UEBic31zLH1oeWBlfX5Sfig8al9fc053aD5kMDh3fDF7flBkWFBsMCYuOElraDRxaGspS14+KVVxTH1JZiRRPUptbyFp'@;
put 'alVsXUREbHEvYF9dcmlVJkVgM0tKWSl+RXRbWSl+RX5Oe3M+XkRAWkx1d0Bzc0ZjXmc7STMqJXJfV3ZSMypbOWl8LlpWWGNvK0BePUtvVTIsXjF5dyk+ZSNsKWp9fFhlPX08TnFLKEdWUl8iWCI7RTFRUyxtWiY6Mmw6RnoiTXhkUEJ2dC47a1VNPmlMazBhQSFJaUhjQG4zPCZFfWpVWHR1VXFI'@;
put 'cXE7X2swMi4rSTEhUTxtT0BTWWNJbSJTRSFLfHB2eV4xUSVxUW49e2h2d3FMUnhvfT4yVVh0Z2YuKkoyZEwuYno5LCZya0s2azokKjckSnFsXl9XcDAoUT9WMmRIZjFiKFpBIW5zaEtpelFfdzMqTWswQXk8STE+cmtLcS9hLkpdVGNNOUFKRDcoeldgYGB1emUxQi48RTFPIj9tI34ufXh5O2F5'@;
put 'cnpXZTVOcV9bcihyc0psJDkqUmBgTygifmghX354K3YwY317MkArd2I6PC8yO1VTYUxBangjUTN7Ky58M2hDUl9yR0A/dENHcEo8YzBdTXppZ3JOdU9SLk9dSjdSTVc0bjx7TihocFRfKllRITNPeXomdSwmSnFSXiJ+OjxKMnZqamtDfXlERHteT19fL34rUiR+fGtqTUg8RiF2XjUxSHBDbUFG'@;
put 'TFIreHl4MmlvNklEPCFGbTosfmp0aTNJOjohWXlqWnJkLDZZTSF8dVdsK0dXZk06VlZ0KWR2TkxnfWEjOX5BY3g6SH40akljdntWezM+TFY4JFZCc1c9LkZPQX1gKVM0KGFRcVY1MkwxP1tDbXxEQTh9LE96Rj9jYyt6dlFkXz5qMF19eXpMNGdlcjg4fTJ6eGsyWzFlK31oYWdXY3hKL0xDNHkh'@;
put 'LzBSel8jOFlXdzt1akpgUm1iVyk/QzBffHssbXNgbkZjbVFDLD5AaWZAfWB3ZyhMVG4xdX5BWyVofE4mLHlAcjxgfXoyUCg4bjdUWDxLI1B+JF0zPlVvbi5VKWEjR34relAoR1lfO2MjKFV5QFFGb18ydlZ8RWo1fURvJn5QdG8odGlpX2w1XmslYFFaVnwkNVE0KU1nbld2bWIvfGhAaX4xY1BX'@;
put 'QH05Mjx8JE52fktYUFcpSXpGak0sdi5bPlRRP2AyM19CeXx9WEI2aF5obDFxN25vV3tGeWxbNSlbfUkiZn5QYyh+dnFgc3VJTS96W1J5bnxGQGIoPVQ6OVFwRjcpXnB5N3xwdTh9Pj1mbmo0TntzVzhbYVBpfTQoJT41ODdUQ0RNL1l7b0IlfVlHY3NwYzBGJl56RVVgUVp8fVVYUldnaiQ+KUc9'@;
put 'MitgVHcqfUlFSUxZY2ZuXUQ8Mj91emtmYDs4N31sP1IofUM6OVVkNzVLLyVLXmBddip9a3JnPTZ9Tl9RNDp1X2V6Ii9pcFs5Mnt8bTt8c0dRTS9eW1J5R35Dbz05NWU3NVMvJUt+YGwrMX45Ymc9Oz8uPSNzRUsjaF1wVHhCNDltL1tOMnd+UHM6OU4mKFUxfl00PTlqZzc1e3RvVnxbLkZ3fGdo'@;
put 'IT5DOE57M353Y2ooPUguUWtHZm5jRlc0eClaUy58eTVZKHVnXzslQGhLcGBpXjZ9LmNmfkw/Zyh3djltaH5WPUJhUSlLUF8+I0l1XztFQn5dPz1+UG59XXk6aEtUfXk1a3MwTEtMYUp4W1VILkMoeTltJH13LEdjNnxXREJ+cClXKGJIJD5Gelc0filaU3BfSishfWtpPTltbnNwTS5wU3lfIXZD'@;
put 'flVYJHNMQWc9b3t2c1Q0RHpfZXVCNCpwL2VUUT9NSlR8bGU4aDFXXjtlSnNwLF5RRjp8RmtmfjgrZVc5W1BReX5RXUVjTXRCYV5+LFo1aClZY19BXVpTXX47Sy85RU59XUN5KFVfezJ2X31ofWhfa0hsdSIrMjtuKDxeelVvfm1wOWh5Ly9pTV0pSmt8IzplXzBEKGgufSwpKH1wIVFXTFJKY0Rd'@;
put 'c1Irc0M/N1RkLH5pXX1WfW9XQm1ML1k0KzdffTZfNz5aO1ojMF9aQzd+InVbWFRdZGUpfW8hZH5pY2MrcVNLdkRgIyRSKGoyRjcuPi9DKnxfdC9ROXlBIkdAc3glfCtMbXNhREA5Ll9eKTl9NmM6dkBaIyRvKW9GQmBvMSV+XyN0YHt+e3R5SUs2S3UhKitEbWZfZipTN1JEVWQsKzBdamxNbjxf'@;
put 'SGMhPzhhKWJCMml3MTF+b3xNRihETzpXcGk4N3BsUWxRemVgOE4jOVhqV019c18pMDVGQm1UXn1jbTQ2UXBqQWV4Nyw3VUNINlljPmAiOmI2LCNeb1FncnRrWFJ2aFlzcDlnOklJaFdCLEs+ZVVmbmAvYy9teWV1Z2d8MWcvbTh0b29ESixQaWY0cCp1NXU5LnY1eUM2TkExeTshOj55K2h+RURe'@;
put 'dXN5OTV0fTdJcHFUSVB+WS9dLDdRR1ljeF9BJGx4QHlfSGF1dXRMXjhnPig2bldCOj9iZWU3OiV3PnkjeDdAU15lTDZ1I1VWSTdnQyQuRzowPjErc2hLUThnVnAkNTBkaE0iOnlKdzBLVCgjYXApOUJlLm18dCldI2J6U3RsMVlHWHY0eilnPzZuUyhWZ2pjNHJKSS96LjdOZG5Fb10qJCUlRGV9'@;
put 'UH0qUz09TG40ejQwZyx1Q1g4Wy5PdytoK3k1cSR6QGpjbkNxWFpRWl9DUSZRaUJiTWs/WS5Ge1lKNlUlT1c5TzFMYFNRYFhYYW5zbFVRSUVdYFsyZTpXXStIZTYvNmhlRlJ4THUrNGolWUVIdSFEJnBtbFgvMkBtcFMhJkkhZl95NVkiZFJ2bSxFXVpbVFpAIy5SdGxJIXg3eSYlQCljMzAxVUJk'@;
put 'fTdGNlZQUmJ0KXApb1h2eDd0XUExQGRESTlzSihhaF00WTwoUS5bPXEiYXUxPiovO3prOi90NkBsTGFoOXAuO11KOnxeMjdUcT4oLzZ5L14iVDgsPjEoUlBXQFJuRSZ3N2RrOylAfGRMOUJyN2tdTzJnfGQlSSN0UjVfOl9JbzovdGkyVWFZOV1SQTsjZXR9JHF1YXdwPioxPio2Rzp8JlY9dCxb'@;
put 'JnZhOHRSNWQ6ODxycUo5PUlVNyV5Pl85NmhMM2JwY0w2Yjk+KmNpJWJDUCVkZ1E9VTUpNGhGUDMsRGchX3Q2bVMrZEo4aDBGK0k0c3l3PnYhRDFRPU9fU2ExJENFPW05M1ptI1YlZHdEJjV8JVtSfmQqU2xML2syLygqR2UuZE9deWpZPCRUZUZuSCZbMlMrZFMubEwva1pEOTAkOGNMYzckZ0lP'@;
put 'WCwjU2E4KkhoUEBMOyF8NW40JWRDZV9TQVVvN18yIUVuMyxhIXRhKGQzMVFYOjElQjtzJnhIVWFPZVQ/VEY5dFM2TihbMCo2eXNUe3lRRzpuJTBVXSFdSkJlZyFmfHR9aEQ6M0pebFZRZlssb10yIWhKKiNYIVZmV0JfSlVhckhuSllLUTledyJkUnZAI2RWUnloTXo6RjNnRUBCKV1abGZdRCxO'@;
put 'eF93KERATyElPj11NCVMaUI1KTdkVTk1dHtfL08lT2dQJmQvNzh6NExUYyR5ITImajZoOUErUFNibXNuJF4xUT1JK1I9OTQkalBEITd1XVVlaXNNZCFbM2ZEfjxJYXVEdXNPfWMhZEUpejliKlpVdzRwKnEiPXdQeCI7Yk9dI103aDgxbmc4KTB8OXs4P2Y2ak1WbWVTSkVmYFE1ak44QjtbN0I4'@;
put 'eF9PMkEhMXRCOGtTRl59N1JiSGE1RSt4I2Foa3UwdDVndmNeXy84KVtoZyFhQmBTb0hnSX05Y2RFZF9oRDhETkBwRCs4P05IVTUlNW5KVlEqJSNIVDI4IXFnMVVAZ1s8Yj0walYkIl1XOFtKUmsialYkSzh2Iko4eDtBXk9FamNNKDs3d1g8V1UlQD1hbl8ke2kyY0VdSD1lLnwuRmQ1ODZVMk52'@;
put 'bExibl1vSktAMT1bZGpLa01peG5tbERfeEM4NiVgUWdrX0FWQFg7cDFFKmNkPE4+QlJKUmsyMVtZUypTJF1qX1J6Vn5WRTBJTCtzSXNQLzU6Ym4wbHUqYURLTjUlLkg1L1tNaEJtQkBJfDQvdnxwOHxASXw0MGEyRkJjJiJFczVRTDhjR2M3ckk7N3ZsRGlUYzVkJVovbWpaQCQuN2gyN3R+THBK'@;
put 'Jm1wbFp7dkQmRnFSbyk6eGtIUixJUTd1PEVrKzk6JkAkbltRbmNkNmB2RmlYN0NYOFtBbUxQIjc5SUg9MSxKT0BjKiNtNHpuaittQlRsQGMxdGF1VXVqRkx6RmY+Yz1nWSw3PmdiWl9FSS8kNGpjUDd1QUBdWWtwSDouN0w7JlQxbTk6VkV1SWpyWDlySWZzWE4/RV5tcGxiY0R5S1A+M1RlRFch'@;
put 'fV41cEpGPDshIXQuXXQ+e217T2k+Z2JdWkVQSGlFOWIkNSRbUChZQWVuNH5wQkkoSkE4I3h4UXl4LmQiQkgkUlM+M3sxOz1bZHM+ZnluW3xkTmlGS3leJUVKeVsyV19hby4jdj1uOT9VfmleYHRxbX17ZCF0elU+bXtPYntuMjFydV1ON3dtX0dBO1pjczsvb0gwVUt1XUdzP0tuVERQS1hebXdn'@;
put 'dXBtbGUlUGBsJUpvP093THN4aTZgS1ZwfkV7XSZZOkV3OyQsbD1ld1BIMUkoRElhSUhzfCZKOW1ycDJOUjh+Vy5WT0hqT0hweE9AKDA2UnZ+U05MOFhYRUB1PHZsLyhIfUtPOCtSX0YpMWFWJlklIyIxYkNScldtOixtNFtlWjlnWW9ed3c+eGhNUjpRNUQra15sJUpdRiU+MmUwfk8xNDE9Iixz'@;
put 'IV9VMjY/bHtpRV0wbTZoemw4JShEXWxfUWZoRz1KZTo9Q0lpQm0sP2dCb0NRQmt1fDdHJkVBQ3MsdyUzPk8hZ1dVX1ErNGFJUX08JC5kX147WCYvUmJ4YkIkWCtTVDVOfVJ2PnJtLHZ0fj8lQz0oUyNvUjxUW2RodC9dYm5GST9nVS5YYVNKNmNfaUd7NHJ4KUw7N25pTEJtTWYzQ3xbc31rZXop'@;
put 'UzlqYUhDVklgVXFTPSRra3w6XWZbaSMuLis9JSFLbmp7T1FGcWVFKUt1KV1iJShAMUBHOEZpSD9OUjFdSlFPI3BqfDcqU3g0LDVwanFdcWxGWDBeKGFON0FlbUxsMngwfFF3TCY/Qjt4M0g4VWF0YitkRlgxZ0w9UyN3T0MuW1NEO2xNYGM8KDlsVnhxMEUqY2QvWVNwQGFoTUpsXiNeeikiMnRU'@;
put 'cEBhJGYzYFpsJSQ6Z3VsPChdZGRvKE86PTBmTH52dl9BbUxVN3lvJl0/ZUI4PFc6UX08NWE5N2pGcnojTHt0KiM5UH1Pckhoa0xyV3RpWCY1W0QiRyNbaFc7cmJ9eXl4cXl3UUVkZW5sYyRQPTE9MH0iMEVQcj5yWEI4KiNTOHhiZWBvJDUoKHMsNyp2QWUpRE59IkdCTDVVfFo7RXVbWns+N2kw'@;
put 'WVZULHA3KERUSyt5ZHlUYytwezVzcWtdYVRuPSp8a2VIOChAfWtsakQ7PyFRZTByQlIvQHclb1QkN3srbms9aSYjeUcmcFdwMGRiNnVzSjgmajQmZDxQbFVkMi5mW25ReU9SMWE/MztZSm9YMzpKUVpgL1ltZEVkODshQGtLJElnU1A9VmpmcUw2IWtBJXQhTSRLUWwsRWU4eFJsXVc2YXs6VnEl'@;
put 'PTBqOlIxZG1wOml5XSUlN2pjZVV8IUksMUA+NGJLZTo9RDFIZUFlK3VySFt2Ozl4NzMvW2o4Kkplc0hwTEM0aChlMFo6czB4THxRbWxUOF45O2c/JXlZVX5PPFY3WGEwOyxkd2NQaEg5TjpEM3hMcW5CSTxtYyQ2W0FnPzc2W0FndjNYYVBlSFtfXX5qbHYmSU99eEQ3ejUsR0tIcyZOZElzfFtF'@;
put 'K2RBajJaUSF2MHk4UmJZcUoxYCY/N3xRbmROSV1hQWxCOF9hMysza19RQmVuWmZiOTRdN2VpQGVQJTIpYylfNzZoRzg2dWNvIipebSk9WCMpemxdbUJiOSxLNjZxMiN0MC5TZ0NwWntvLlppZWYkbS82PCgvUTt7ZEI1QFljITE8a0kuYDUzZnR6M2QmXT8xfj9rcFBxMkNxc3JDOHBzO2gpU3pV'@;
put 'OHMsWWQ5KVo4b1gkZFtLcUhGeU9baXNJSHRIOmcvS0kzYShLZTRjYnFdOmdaTzdKN3JlPmBXe2BAYSxJe2clOkpjOXdYQTM8QDQ1KmZ1ZzkkYns6VFgrOmtrNTFQWXBqJGdRJXU3UXNqdTBebF9RUyVCUEE4IndRbnplOzYqaTJadl06JC43Nmh6bEdYb1gyU3xoWDdFOmNLVmUpbVg4SnJKSSoj'@;
put 'VFRVKEVFN183ajtmYXUhQGpQV0V1SUp4b3FfSGszemFReS8uaCksKzZrWDwrcEA7eDw2alcjR3VMQyg2ck83X1V9LDc5P343cVtwMlNFWjY8JE5SOENjQz5FWHBUQGI9ZiNuZHM7IXF7fXUwKD0jUD1XTykxI3xmfjBuUjgkM15yVDwyKj0sUHw4cXY6eFl6eF8pOjNXT2hlYW9JblUlIm8rNUwr'@;
put 'KilyfjVWTiYpRnwpMWV3SFJQXWxzNE9uPncoK14sVVI0PWchbkNqUDN6dD9RVE0zVm5qUmpJTCQvPU1HUnBAPkIlQkAmbE8zQltjIz9obnRfRkY0JDkxdm82fCptZ00rX1ZkeCp7LykpOylvJDpvXz45aFtuMWU9QzR1Li4xfFpZN3JnQmJjNUtEUG1+bF87JjpaI3lpYV1GVShkSDRUby8zREBI'@;
put 'WmBhSHZ8N0JzQnh2KSkjPmYpLiZqTmp1NV9OYz85NEw8TDY1ckpVS1BDYkJjYnZ6PWVYaklNLENxSXdHK21nJD0kSzEpRUozXTFmITMrTTloPGkkTWJ8NU9WNjc+TStoXS5fTmBaU2c9M1FEamRIRD0zMUZnVnFTY31NR1M/b0RfVyYsJGJLIVFJb3xld1VtNU5FdC85T293S19wUUB0eixeYjA7'@;
put 'X0RON3NpW0pGeHclfVN1S1Z7Il5EMV9MfExifDVCfXFQajBIXVo5aU9wQmV1QWAiU00/PlhpQDNxR1osYGgxMGhhMXMmVS4vfUtgWV88aGJVeCFAfENEWXwuQ2lBRU1gQmooeHptLmVMOnUmVzB3bWIkPjoiPUpXdT1iWlopNntiWndeW21CLF8jd1p8U2NPN1NhVXdgfk5JY2dKOS5sK149MiV8'@;
put 'S2N6I2A9QyplVGMoJE4idTx4JFF4OmI3RTUhWFpHL2hEO3ouV0I0LzppOn18T00/IU0/JGJdSDN4Y3tCM3JQZ0U2QkVsYGBhXXIxYShQeWF0Xz5zVWMhMjomY1pgJnpbRCF9c0E1aWkjei5qRTN9VD1JKiwxVlhtNllPKEk1ayVmRSV8V041Ljd8PUFraW1CNnVsX1JDSzdAM1dDMStOSl58LiJ1'@;
put 'Y21Cfig+fSQyNVR2MXlUK3k2ZVtYIjEmWFVDZUI2ZGdgUiI/ckg0YCVbRXVgU2Imcj8uIThxZCZQdEs8QUdwQ0tmYE14QnNGOkRmR2FhISZ+LldMcUArKHpCInMvM0xVemVvMEZUODorbyp3K0Qsdlk/dl5bZE1ofEEqeD0kcUFCc00oYSlNPHRvRUFzKVp1en5bJFdgfjtCKFp+WjNONDU1RXh4'@;
put 'KXI3Lk5md01NaGMralhhWzZkdUFhUzJgQ1J5cldEUyhSUkQsbUN4PXt6L3REelRYJnskeEModWpFUlNkS1cyeTZZZVRZVTkoeTYvKHZRXWB+TXBMKk0vRlN+bzU7OylibEJfbmRZZSlqLzFyNFlBR3FPKCUkNWY0VGokQFEkKE42UjwweXA+PyIlWSlJVXooNHJiMzFneiIlK2tNfT4iJU0iKnlp'@;
put 'aXAhN08wPk5OKk5JciouNWkyXWhFNyxrMk9DN18sMiQoX11pRUJ0SWdfa0JRVz8zVU8/KCN4OUlKOUovIXhqUTd2MDx8YkZUNWtHQD0heHZXOVNWNWJdX3UyVWVhd2o9TUA9YXhKZmE0bVJCSW18Kk0qSVklUyY1djJkSVk0OUshNVUhNUI1Yk9WQCIldTdxRkFwMlE7TmBRWHRJPEtDPz4iJSxf'@;
put 'OjRWKkI5d2F2dC9UKWJJZF1dcCN9Mkc+e0Z2ZSxrYVokX0gxSWhkdTkrUFlmM3YsTHRiXkxWO1BCQH5Ve2s9RlR0XiZdbSMhbHhISkQ6eDk+fEl3XWhpbHZqWXB+VHVKU1U6eHteV0MuSERYPGFhS0FpS0tRVXxZUmhTIzNPI25XMHE3IUhYR3o5ZmE4JmpbTE9rRF8zWzc4PXB4IUdVWChIXV0p'@;
put 'ZXBUcUsqKE1kbGJzYSlMUVRAPSp3WlE+dHBCQnZuM3cobGZQT3FwIkhtdHpWT09IJCR1aTlkL3Zzfnh7XnxIQSQ8RGJqaGVLd31mRGlLSUA9M3VlT1t6MExBZ0VAWEdidEIhMDlvcGxCZ3pOYyg3cGZRK31PcyxRKi47dFEqQm1AZEJBaVp7WUMyIUl6biZCfFZLLy5qRGhdVE5qRlRbVWReYF1v'@;
put 'ci4iZV5GaTc0SjBXfGVOI31YbllyKUhQSz9pIzF2ZWx6dEptbSllcXxxUC9heSxXSmQ/OiZDanFTdWppRmgvWUx7XmQkV2ZwVU1pUExYXnYuKzNjY2M7aDk1Z0BCeE1hcmI9InN1ejkxSmtiIUQmQnE3NUdeaDNRO1JecCNIYTUhN3h3QXJOO25uTSoxdFN5VTVBWTRLZiNgS3YpQFdhREBvIkI+'@;
put 'd0RCNV1mUCNMNCxjQ1A3cV1hQU8mPjhxaVJEcDZuPVYzU1ZsTUYhREJuWUxPTlUwfERuMTRFY2g3ZzV+YGtTWkxHNW5lbCojMXU0UkY5NWN0VTVCMG5hOllJIVk4Y0VhNjIreER1KTQvKE9KLj8+T0NmWyZHYDFnejF6SWhHWzR6dGY6IUs7fURhL0xIRmZrbiNIS0I/REREL1hkXTJnMEh6Qj5I'@;
put 'eEZuWSkoOlskLn1WYjNhJnpLS1E4P1AmcyZxTFQsUH5VcGtgWEhUdWlnMz86W3ExXlF+RlQ4Oys6QjV8P0dpQzM5OEV0SjxDVnhrXSNOfEx6KG1Ma3JTSn5LUUUvLHgvQzhwdHpWOVpOP1kmLnV4V2lTJlpzPCpIKmNqWi5hKCZQcHtYSEJbUDg0dWclWzN2X3tIXi9rZjA5eFZBRjNpLnFaLGtL'@;
put 'KjFEblk/WTUoaHhVcS89KihoNGkrN0hXaH03fndocE5ZNTpJLHN8dDB4RWoxVTV3b3U4TjdLKzMmNzRHSFVFLGQvZW9rOiJTPy5odypFejJPUSw/cS9lb2sjdE5EUFhjM1k8RCFlK0xbTyY4UyI7Qnh9KUxnclgmIldAVXZvKzQvIklLVmc2NUJzcmdHNGNuXno2alA/UnBvOGxbNT89TFlBailb'@;
put 'MnVZJj1QKU5edkUkbnB4NmJQQnQ9bGEmPVAjTX5XLCRbWlNbNCJFbFBIcFUjSHsxMjxhZ15kLlg4cVFWeyY3OjNjTl0lTnVTKDNmJWJ1OlcpbnNQLGVJa3BOYE1jaTglaiF8VUtKWU83X15gIToka1BuTG5UKzEoTTNYTDQ7M2NJKTRHdFlBZkhRJlcpM24/PFYjSGIyeEwoRm03PmxkI0o2OFl4'@;
put 'MTA5IjpJQVtrUi5qXTNqV1dgbjhSQWBdb3hVfUEybV02K2N0TUBrTEM5aiNINkp3TEJaKG1CeEg8M3c+cCN3PnddRT1henltY0FnKUF8KzJaMnlzX2wjI1QyLzo1MipNIWM8S1ZndzlWa1BPVUhpTmg6Q1QkXXswRHRsRCp4W2M3XTlNUFIvUEoqbDd3X3hpNltoS2goSzZTJVdqIzdYQDMsWEZZ'@;
put 'ej1MZCtlR3FJdSQqV21qXSFnaVcyNXxlMWBrUzFrYVNIMF1lMTRMemVtQVFsTTM5UUlhSz14JmQ9OjxEQEZiTV5pS2hvO09GQ2lPTUk8RDF4K1JHOyo7bj53a3krJFdlOS9DZykpeERidDVJa1U+d3JGcFpVQ2cjSWdbIW0qWUpOWDU5Kn4wRVVxQWciaGghTnAwRSwqTzdVNSYobUc1P3ohbFFd'@;
put 'ViVZMD09cUhhc1B0WnhPPzwyRSVafkYlRl9KI0g5NGNYT1NBYDMlQ3o2SWUqTUNTcTF3Q3R9VzZkOGN+SzFva1RYWDt0alAhRSswdS5EYl1tdlVBd1skSlZLaGhRdzJlcFZSS2ciY2xUa0MjKkd7bCN6Nlcraz1pdTd0UURJIXlEQUFPJi51TVlncypSKmRUTXBCbiV4Kj1IalAzWiwpZ192emFC'@;
put 'KU5WQWtVMWpLaGAwUFRKOi4yLDd7SHpMJnRDQHFtPnc7QnBpfDA0T09wdXp1b2NpXldKcnxxPEhJK312TzkzYyNQbk9uSCkpfXB7U0lsM3ZfbUEscHExTG9dKHF1OV0xZ2dWQUUkIXV6YiMvciI6PiIlQVJEblFlM0s7d1NYLjVbdGwlejlvcD5Hfm57S1UkYHBXTihRU3FNaClKPU0oV2FMKzBD'@;
put 'bz91YzA4OHIwcHBLSH1Sdk9kN0JtY0RTcEBAJkR5XSIldihsVV9NbzBsOXZfdy5qWVdpUyZXSU5pNFZXRyU8TjNHKmgxVnQmR3BwNzByMU9GdHFCRVZ2eXVRN1VCVCY1dmhNazN4aVo4MzhSZEklIUpdX3QzUSp8QklUUjFWLjMrfG9pT2pHQD1ndkVZWXoiUXY7eSssdCpFQGQuOzcrW0gzYUBv'@;
put 'UHB+IlZOOmAiZT4/IiVIWGA8QUNVa1ZpU3czJUtlQk0oJSlGZmwib1l2JTtAdklBQUsuIlAmNXYreW9MJXlUZ156Lk9uYGFTR2B0M3hlKEgrZEFEIiVWSD81dVlSJXBwRUpQJElZWEBwVEhBM0xaO3YsZnEqLl0mKnRyIVVLcDIoNDFENmxFU0ZoWGdIUjhgWGQ5ZCZQfGguSENDI0xPJnRUM3Fx'@;
put 'a1BlcV1OVEFWd09DRHpgQT42X31Xc0JMeT5FeUs5In03Iit4OXJ3ey9QaiVMTWNtVFB3XnRhUmUmWDFGekFJNUx3PFQxLz5GI3ZCOnl7XiJZMWlNJERhWyFuQmRYQVJCX2MmNXYzclIlIzU4KWcmWUVLRCNHdVJxcHhDX1NlfiVCaTwrMHxuckwrSHFJQD1OY0BZIU9FR0J4T08lODY1Vi9fXXhI'@;
put 'N15JSDt1PDdWS3UxO3ciaHAwcHAiWGxkZkx+NUdJUWZpSztPX3RacXU5I1dtdWBafjVKZiIpSFRDYTR1cHAwWlQ6YCRfI2dQfkw8V19FU0IqXyJnQD4sSllKeyRhUmNpMEdPNWQhXk1sa1tJLDdJejArdnJfUF5RNzFMbGx3JDE3Yl05NlN2Tk5oNmBgREU/T2MkQTdjcFZVI181P0FdXVk3JjB0'@;
put 'MGZwLjlnNFtKTFgoUyhXTyY+WW1sI01YUlROTmcvP1hyU25QLGNWKldUaUhaN1JXNnFuTX1zNkN9T0JENENORTwqSmxhaXclSzR3Yj55fFg1YVhFI0drZSo2dzM2VGZFI1B4bmhObD1yWXpSUGplOyojeS4rU25ZKDJ9Mz5DIUUwJSF0Vlg+dnxMNXhDKjMicW9PZFpNNUNsdz99QkBiaDFFe1sv'@;
put 'M19USCh6WStqa201Zj1IL003SDUlVjY8MSRAVjl8bnRYbyRhOlYoeURaO3NjZ0VWdVNfLzVaPTBEWnwwTlpeJlovR0hUMEhbJFFIcnd6JE9HRjdzTS5uPiFbWURAJmRyOz8oNGtRUyRTbF4vcV8/MDFPZ0k9YzR8IVo7OUs/eillMF4mVWR8W1liN2NFaHl5N3JCQCQ1MzRAbXVWVkhFM3ZQPGVI'@;
put 'IzZIOi83bVMiKEJEbnRzeWBGQ30vN0lvQ0xxeiY6X2F0czJMfDwme18pXlFWXnhMYVBuKnIzLyRCWndad2Yhd0dyQDl2NHI5KUNEbWlVMHRoTntEKnBhWnd3S3hHSCZxJkw7dXc1OUNjK3JUMEJ2ZmNYMzNoO3JmQEczQ1dIVjd4ZG5hVzxrVUN0RGpdcyZFXU1iSl1MRUIscUYlNVYwdFAjeW9r'@;
put 'Pjo7Vjo+ZDZOL04iQkoiR1g+NFZrJno+NHwxN3tqW2FXfXhbMUZCOndfOHpvKlgqdlRwTiw3IXg2ZzJoPTUwKFsudXlDMHR5Xy95Wnh7I185ITlWd18od3tZaXk4fTx9Znt3WGZbZWppKmVnSiZ4JGkhYjp2UzZ4R3RleCJYaWx9a1diN3olUDIxZyI1NUdWX2s+NSp6NVAzS3dWSHF8a05yKF1j'@;
put 'YlExUHQrLkx8QWxyfHZOQTNQdEZhUCk2dntdbGhhfHEpRGtZPjFHQjQ3MShaRFY/IiVkbXMzYHxPZHcpUUJIYlpTKGp8cHdNNytWMWg/YEQ3Nlh+U055JVFGcG5zbmFdP3ZJaH1CfkRrWVNwPnB8YytIUX5TL1FmMmByKDkqTTtkY3N0flZUem0hME9EYTp2U3IiP0NJVnpOK1pYKyZQX086emhX'@;
put 'VH5ENzxuZWdIYm4vfUVgNzd3Si9vc3ZgQjIiTXtOWShIfiY2PnNYYTRbR1Q2fnVbS0RkR20+TnsqKntETDJHLyhyWkBESWYkOztKYmkzTXtMfUIyTEwqYHBrUSh8cnc/WHN3P3VIQU46QlJ8XSY/eS5hK3Ipb3VrcTc+NTV6L1BLQnolJks7NThdT1p9VjMlal1yJl9fNWM6UXs0P08vOj8vbkk8'@;
put 'UXU+ZT1wPnBlcVN1czEoTUhENzNOcFppWCtNX3h5RiY1ST9LSDEjcGJ4YSZbU1BPQnBGVDJzQDwlMXR3OjpRdnM/X294cXYhT0Qvc3NlfjZ9Qjw3ZzNvJTRTe0J7YUh7Y1A2dHpLUXY6TGteRmQ9KzNfYDU3UElKQ2lCcT5HVkRFd2tPMkhOM0NKQyQsKEsjX0piekQocmJjRDE+L2t7enRvbFMk'@;
put 'aV0zNlU2RHpEQkNufk40cml6I3Q7cjYuQXI/MlA7Q3pCcGJHanlgLyp5XTg1YWMzQUx8YkNkQWE9V208aGkrOGE8M1R0Vl5adE0pekV3PjpvT3t9Qk47ZWI5R0tsMT1jLnxMdW8iPkFkQ21Ya3lFcmtgMDFTM1N7TixSV1o2Mkw4RH5Ta0QucjVvdCY0WkUxZS4+TGJhbEMxRmMydStEciovYmhD'@;
put 'NixdI3lGZW84b2h+fWZbZTNqanl9X0tDKDFacU4+MXhaeHphZFR7QSlrWjRmQC4+Yz9aYF1ad3dORk5vaGA1KHp8Wm08IkgjZSN2c1Zwe3NNO2U4NkVRU1lDXWcoL3wwT2IyWiwrcmxYenlyc1c6NFVJQ2tdUG58cU59KXwlMlF0JncuUUhdfjVwTE16bUF1WzQ2czJTJHBrY2hLcmQpLjV5bTo9'@;
put 'RSZYPnhffXt7ZjpyaW07UTlydi8ydkBfdFlaVCJmJkNDbF01WTp8WFY4UHx8S0QoVGBKLjhKZj1USDl9PkBNWSRIWDJfcV0vS3pPKDJVcnlAY3FfbXZgTmY9fmAjNVpAfXg1aHohJjkxVl5aeU52NnhxIzdkKHYyKkxUMnltRj5hOi59PDo7TH5jKE5jNlhgMmZObUpqMTZufFJjcFQyPU96Nk1J'@;
put 'TC99ViphZGNHTm5+cVd6e3chakQ+TG5DcmF6b2FgIzhHNFE6YFI1e3BmUlswL2kmQ3hWW1tbKXB8KEw3Ml1IKW9uNyY1NTIyMGYxc3U9RFdaW1ZTNlUwPmNPRWR2JjZ8WzdPVCE1NnMyZHZ+YGRoZlo9TSVNcEM7dVkwUWFAJjtaMjVoUyJaakYiLy9aTzFueD88YmA6OUJkWGQhNzlrbng2dXtN'@;
put 'S2JCPyQ4RVFkdlc+XmA/P2taJkhbN29PKD5ZfHgpRmU5bWk6QzR2SCk3dCV1VmpdaFlQZzZhe1teNS5dcVomWCVgNGg2a1QxVWdUeG1oNyY6W0BYRlU7P2h1fkxseXdBOXlwVlBsLzh0WlQpP3UxeUE6XXxvfDhGUmkyPmVXRWBVYnpWVWVlX25zb2BWImVeclhUcnR9fXZxZlU7eGtXKF5fU35j'@;
put 'XixRSEdjX25zSGBXM3l8XVpSTEJhZF9kU1MqRzNwakpiU2BJfjEiQ3MzeWRDeXlTMmVNTXosWHBqT2JSYCtuY1NGWSM4ZzA9L2BTb3pLZm9pNS5XYiZvcGg3WypjP01hWkJdPDU8LyUydlZsbllXVGw/NSVwQCk3OSNkMn1dS119YExFenwvWH5LKSJIXml0W0V7RTpOYS5bO0Uhd3BWUGxVcm40'@;
put 'MXs7RTVRO2U+L0FhMU9peGQxRGQxaGc0eGczWnN+WU97YHNbS2Y6V1N9clVSOjNUTGJ9UzYxKixjSiNCUyglfDcre2JkcSVMSzVfS3R8RltARns0NVFYfHk2QEZTWVUoMF8yeChrSmoyaHs5JEFLditHb3xBKzpIVGUhV0NqenI3P2FyTnklS0c2VjBgY0tsSFJkZzw2UmFSeHA+XjVxTCZCNjlM'@;
put 'YnpOUF1mYWNLJjBMbn4vJVooKSlKOj1zXSY5JTV+ejgicl9+QW9WaV1YKChzcVVlfileSktDLFR7ZSoxTjBaNihlakkmeU41Wmp7by8vYVdsYisxRm5sPGNAfDhYblo9XzRFSWJiPz06THI8czFgbEMqN1JzMGAwLCVTejczVTE2NWZYS2xdWG52PWlXe00zeD9YWTBtRiVbTHxeN3ZTR11wMisw'@;
put 'TlBLQkFhNFRPfHdTQTpfWkNOQ0IzaWE+TTphcltdOjE2QWA1OnpHWVpUQ2xJODpYRGhwMDZEPmNAPk5GI2Vibkh7JDVCeigvXW5wO0cvb3NHYDZEUzFLTkg2KTN5c3N+QjFYdEtlU0VgW2tadVtBRj50XzM/NUVANkREYHB3ZHMxYGRTWTNCcEUmXWJKcnJmKUJ0az8vNnN8KFZHLiEiTnxLPnJG'@;
put 'ekkySTJEWkskdDdNbkhdS3JbXWBZSyRObD56JURqXSlRJjV3NjJLW2JEZFdkL1pxVGRjPlV1RGs5cUZDZDp8RlFtPT5eUEFDMFdIP2NgX3t0NSNmPXpGeVVdT1pIJTVwTEowbXEjQnNWTGEse3I3KVoiWjouaXM7enFRejJ4XihhdXpndSl2aHhvRigqSXFwanBqXzk9P2h1Ikk+amMzYU1eZXU3'@;
put 'Xn1je1BFTSVFaF5lWyZFYVgrKkdOak9XcV9xejVdIiJ+cV8+cEtoVSgzV3w5LmpFfk5PTGhXJHk3dCxJLlFvVDFZIi5wc3V9UmM5aXJYN1NybXB6UzNJYGI6bFN9XmZZKCFjZEJVO3U4Wk5sZGhUe3g3V3BlMFUoVn41OyFTSG94TitremwuYj4qPzQoKWAhY0ldVnxybT9fOXtwb2V1Wz9WUl0/'@;
put 'bUxOb1omLDA2fVozKUdUIlp5Nj58QlljcEJIfm96I0hscjJSMWBeUUZQOVZKPFZ2fFspR0x1czFoK1RSY3FmMi9kMWFoeXMlXyt2TkQ2eDY+KTVtfmBMJjVFYGRZY3AhYUo0Tzp+fHguJEwrQz1RRDp+fFspKmUwU3gjZTIwe2Q2X1drXUovMSZqe3Q7diM5KWVpJSx5NnF8NCxzWmt1dSlLclBd'@;
put 'RnJuOmUzWFk6ZXdWb3toN3MlLD1BclFkaDFzJnYyLkBKUnZ3YTp3fEUrJWl8b196JiolQ0FmXSgzJEgkLFFtOltWX1t3RGBPYmNxOnEmJVtJLCYjNFNSWk4mQ2AmImRPJC84MVthbyYsSjAzMT50dzEkTT43Vi9bKEM2dihgWD58SjgsR187M35gejtCMmlXfnpwVmMvfiF8JFRbVytxVj5fKVhP'@;
put 'eilvS2pnQko+YiYyX187ZzVhPEA6bTgsM0p7OjYkRiFhSyY8YzNlY2YrRFQ7UGVALlpxXSlxem5AaVgzSUtxdXtIUF02T0pJcX1WME1JPmxxWSl6NFZybml8YjFWV3I5cVgpMUNkTlcjKTN7YHs6LDB9ViRvektjcVdLPWBIO3xFOCt5fSgzeF9ONzBKcXBaRnBfalh9Vnx6eksrPiVZZWpmNjBU'@;
put 'ck9RcmY0OlgjIns2UG5EcilWZnIpVlFgU1oxT2xQMEtxcXF7cFgzSWNJXXEoLzQ1Ky57NnZWTmBPRihFV3lMWis+SColMixjfVZldUpWXV9scGZdaiIoayhgKTN6X3lASCpseWQ+c2d0RWRxSjdgKFFEQCZOT2s2L1hyWUAmTk8qKHI+KzVnZEhkVGxXMyk8QmxXMzRReE80I0lyP3omY3VVTl5S'@;
put 'VCM1aCJRRStLS3sxSHgmU11AWF1uQVdeb34+NkNDXWVCMktxJitUQ2xbSztIPlQpRCx9ME0wclJ9N3kmNUthOHhZaE5yYyw2UT5uRlZIT0lgaTorNWxkKSZaL2hlcWYwWFd4VF9kRVJfOmV+ekpWWV06dHs2Yjo2OTd2NmJhKzR4ZXVWMjlOU2JBQHJ3WXJ7fD9gKHVGZW84SkxpfGoqYEc8aj9l'@;
put 'Z2Z2P3J3XyFGVi9ZPnR1I3RzeTpXV1psQDJDe1lWbzgpSzJTbjUveDMjRXtnTiVhbjE8UU9oMmtnZX4+NCRlSX4jYXkrckFYJUNbJnI0QlcrPStLS3syMDA2cDhXMEd9U21YP0RdaCJlMHcjZjJyKktiYmExPmpTUjhrZjJKYitSV158TmM+NUdyIltdNUo6WzJKP2VhcWY+dF1EXS9bMlszTy5y'@;
put 'RU1Fb2hxX1ksUXRGVihLMlNSOCg4QSlBckw4IUNCXTBycFZTXVI4K1QySlhhRjZAc0ZgYjRDe1F0akIrNndaQFsxV3gzaEZxcy9gYjRCcF1ZI0FiK1JXeHw3eWV2PmVyT0J7SjtoZXFmLCYrVCtWKXpZX29ieW5qUDA2K1NgRVByaTp2a3R4KVR5ZHUjNiJWXyJaUDNkT1Y/MFllNWJJREdtJiQ0'@;
put 'OGB5QHouUDBzM2RPW1U3Yzh7ZzFrKHlQa1JkSGkyKUBBclB9VyM+MDl4cDpraD1zSFlgdUBRVDojX3B5PDt4SS4mW3NpWDxabUUmU19EKElOeyQ5K3MkZC5pS08mU2B3RHtVe31OWUhQeGcodkk5ektPJlNrLDpJJUtiY2gpJUQocih9d3BsLz9jLmcodmlje0dMaXEqWkViNitIRzZvSENFKVdG'@;
put 'ZnhYUF15SXN8c3wvSzcwP2NPQUROemRyTGkyX3VqeDpIWGM3XXRXUFMjJCZ7UnFObjRgakIoS0h0LkdVXmBfMD5ldkpJOCpIN3ljIUpSe2AvcjRTWSpnVyZPRUc3VlssdyF+UTxQfG10alU0T043InNwc3VMaCFxc1JLbVdLQnE4SXdxUDJNUnZicyxgQ3Z2czpQOWhER1F6b2N2aGVgalk+fXtG'@;
put 'eXdbPitEYHxSKThoQzUlLE9HeV9mKDtFJSxwYFpTRnNwKENnYnM9YDgqPn1wP25Xcz5sTyN+MGYyfXZbfFFVUW4zO2NaYFA4KE1+Ym85KWhPVyUxM3klenFQV3szd2Zza2NoV1tiaG47XSU6On02dFNXKUZHL1NkYlosXWJFMV8qQ2RzRig3Jmx3InhRamJaRy9XNzIoKm5xOC9fN2tRKG9Ha0Ii'@;
put 'Q1ZlS35Aai85ISkzSX1gT3xkfiolJWhJN1tLNGdKe1t1JX1nMjRodHcjQW0pJkhIfWc1cnNpL2goJl50KDV9UDJuKF1RU0VkQCRkJX1JKVcoRmYyPnVQLDdiKE5HVTRkMztjO19fQj5zdVMmPjx5S1BTTCNFdixmIzF+Wyk5fnhHUSxkKDtzdmRlKm03LnwlaWpzcCkwUm5bJGRkV04qc1c1fVY6'@;
put 'ZUVKfmFgSzRuVVR2ZjclW01KeEZrTn04aVdhUTFyIiI7Yy8+WkMjfHY6TDQ/Q2NfNEJkK05bXjxNTHVuXko6JDomWTYlVmJzJmBXfG94UX5xbGdXQnkyeXM6WEk+dDB5O2NJfWcqKXNFd2ErMTNMOCN9ZGBMUDJ7SywrfjN6UHxfXlUvZn5WcFE0U2QoaDV9SX1xTC59WVdENzxDPihRSTkoY3Bo'@;
put 'flhMWSgrOFNYanxKa3hGR0gxRj90Kk8yfll3eEZ7Q2BlVHw+WHJXL15BOSN8ajJQTFFRJmhARE9qPXRLUCRANUM9RiE6JkheXzAxVCgoRVRMYCJLUH4ob0Y4X1orZH4ocSJ+Nn5EP1JMX0RFaHcpfl15RiFDYnNbPkp5dF89T2p+WGNTTElIRWhmfEBCI306d1Y3ck9VKEBAKkFeZSk/P3dbfCk/'@;
put 'VjQlZ3E4SjF4S3EpeUg/YD5YPGhFXyU6JGhNTlB8JS4wUlR+fihjK0MiUnFPV1tFdCg6c0x7LmA4JFpMRVgkbDN+N3xqQlVba0ooczpTPT8ufiJbcjAufSlPPHNOTmJaU35NcGRzfUYhPlBKcThhfn5XUyh3PiZIQWBoXWxXKm9eP2EseFpRanR+Vk1gc3IuMn1qW0lGM19pSnE4QjF4S01dRDhB'@;
put 'Im0hS1AjWyVDMG5USzg1Oz8+REp+cnRkfn52dChDfW1IbChjcVojSmB5djp8en1AfkhzMn0xW346cWdlMmQraFciRTlZWXxSeyFzQFE1aCM6LElFQjpJMn1mWy4xIX0yYzFGZUlDVGg1a34vPW4obCxwXjtjK3NDPTJ5IncjZ2I5eD0xPlV8OkhWKE5IXiklPXZUKzQjPSx+bzJ5UWNfVTFPaihf'@;
put 'R3xUTD1pKG0yPjhSKzdbKkt5TygufHVYUHZlfXMidkpRfCQsMSFFfio3eUZjd2BuZF9aMk9qWil2cDJ9RFtFUm9zJD1VNDwiNV1lVy5LY19CMkBkaX4wIUZjfUhqRXh8VEUlLFtGTE5lX18xOlBKW2JfcX5xKl55WyY4V05NOVtXKH5pakJrWE0+TldtX0s3Uig1aTR5NnRPKCh8OkghSUtgKkMm'@;
put 'c2lFKnZMYDpCMVBRKFBnNHldeH1MYnNuYGpFaXNwQyE+b09zVzZ9byVpLGJJe3R3OzJ9LkBJRjVfQmU+flEvMn1QW31kKX1mNDBSRylIND59Zk0+fitgJCp9fipgKSo/fnlbN185PiZQZCtBazQkOnY5fnF8fn5XfHM9QiJXKHh0Zj8jUWd+VFJRXzheVXUoV3hrb3oocn1oISRuMlNYLktuRjEr'@;
put 'Ym49ImErKFtGSn0yWzEvJFhEUnpDeVskX0g7aU9KVlJbV15CPDhBPylFRj98c1BjJFZ4QzhzPTM3byUuQThPfGtfYTwvZVpyWzZXdU1zZ3I4eyRfN0JaKDBpPz9CazwhUnpRXiMqcU0qbX4qfXZrdko8RGZPdFZFbVNeP0ZTYGAuZTglXiM9SUc4XzpbNW5IXlFGQkxoWUVaKE4sPT9eXS47MDl0'@;
put 'PkJXdjpdO0hfe1MrVndxcntJQHVbN1FZY1E5NkNWVj0hPz8/aD47TUpPOzdZejtUNiZKMXMiQip3Rzs6Mz03Wj8jfU43YnY+eU52RHdGRUJ0Z1pdT3tYS0MmV0dDJktzKUJpdjR2ZG5PcXFkcTdjWn5ZaS5icjhZe0FlWSxZKDF1Tkh5YzVMezQ9JmlBSzhva14yZnh2NDA6YE8yIiVRdytGZjg3'@;
put 'cXE9cztUInNQO043L0Ijc3Zzc2EiO0p7RH1nI1t+Zz5NNFN5fXFQXXkjJjw3LzMhYSVYaih2ITYuMTxHeGpMbCpQTWlkOjdjSXJ6QHZjXiJJLDNjVUdHOUlrIyh9ZUQyZ1BBQXpYQUFBQT9iKUQ9KDVEIjx2SERHKl96SzZBdXtrPj1La2lTbkFEYEVLP1RLMiRKQV1DTTx1bUNBWj8yM0p8aG4w'@;
put 'aGU+Sj1tQXpYMzRjQ1RBRUUwISp2VnRyLFhMRlJ9MGZEQUFwSGZHK25SUUF1VlF2RHNiOUJHT088YWVMITNKSTZXUmo/NlJ3KSEoXyRvST1IQU17cWl1P28/el1IXTBYW2IrRG1GeEFpe2gxW1BddldeZUVhX18ob31pMy53cFY8REB5UX5mTyFjWz5uPiRIXmRVS15kVV9eOVZoeT4zSXheM2Iu'@;
put 'Zz9vYD8kKS4qVndrcXZ+XTdfYXlBenlFKG9HUWAuNTQvQyFWZXJIRnJEYC5KUTZDYTRDMFlVR258ZVtuN18sUmhVXyFifF0yYH5IOGAwZGw7fiRqXVdQU3NXcXpDIn5AKGg1MyM1e1gic1tPPSoiLH5zd2xYYiJ+fSN6ZEs6RipJfVh5ZXgjZ0dSfStrdWo4LHVDciJtb2I9dmx1c1kpck1eNH5Z'@;
put 'cW1AXWNnZit6LCxNSmVpYjFuZXAmVDhpcWpZbG83KCowR0NbQm5uMEw7U0AxNnkzSUp1IW1DTmgqUndAVnlldDcxLnciOXIieEp0SSVNLkB0MU9TOzAiUHFjKV1eRkh6Xi8+bT19TVpOZDlhSy9WJncqPy9XNTpvY216VldBZ217MVpHfDM1dEkpT3tjeVl2RD9uZzREVzNnfnJfVUJMYyVTbT9x'@;
put 'V2lYTzVDYDRhMSY6c1FzUnxUdiMhbnZ0a117XzpPNk08VFI0eXkpclB0eC9sK3BTNHM8V3FWPE8wLDNAI30iR091U1ZvXzF+SGZPPH12YFZQTFV6SDNIbSFdWyJrSEN2bVcuUztoXWVHYX5KfmM8PC9NMklQO3VPUyNtL0QzWXhyNn1sS09BOXNLMWxzITsmRSwqKiNpIiZBVU9ZdSQ+UD1uSkcv'@;
put 'RGcxcFlhPUdheWdzXVp+Kn1PVzRSKzJndEAoMWxEWFhRJHlgKHEqa2E9VD5Xej5BZztya0A2XSt3VzBJRkxMbDFUKjA5YE5lfUE2Xyw0KiVGS0omdXhxcVppKkRrWUU3SFMqd3NiWS9bby8uWFdMei8uO1NaLCRyfGZyYUdRREkmOCMraWtZfEddRnElUEQ7Q3EjSCp7N0gqQWQkZ2VVZ0E6JHBu'@;
put 'bnpzJUloRkdLaXslREF4cSpQRHFRRGFLN308M1VCSilDQztPPzZdUWNyMD05PHQrOzd0VFMhWkI8WjdLNkZDdCphezlkVEJlOEJbYyh1cyYlPikudiZkRXJ1bF1TVkcyY2lsJEhITylXQnoxQlh8Pz5Hb0klVXdFYT1ZdGVFe1lVQVAxMEsyVTZWJHN7Y2w/d0xPdXpCUlsyLiVtKFtmYFRRIjNa'@;
put 'Tk1RUWs9UTdhe3JbUWwlZ0JhWUw5RUF0c01SRCV5KCthYDJWMDxYR0NrWz81VHxheHZ6NkRfUXRkVjd1dyErWnEqaE97LzRYVmxwO0R3RS5BJVRmNDo/SlNNMHRUaHwyLDxeWStFJGBddy5naHArL318ZUIxNEZ6LyZWUWddZVRDT3w3WTZffSFsfihUWjcpQk8iI3YmYV1uQ10lezVdaXc0QiNq'@;
put 'RHZ7T3J+JmYhc2JgfnRiLikjQCo2OjQkdCojXk9KYC9FN3w+YHlJKl9yMFl8JjZBIn13Zyl8SCVQbzpiOkMwQlYiR2g1UTNwd0RnNS9tZFMyKlY8MixaZE4zRVtsX0MhSEheRVBdalA7MzxxcC9sMG4uVCYsKSUhdEcrW3xHVU10X3pjUU0+YnQ0UEFMW2pCcXtWa2tGWlU/a0ZzP3kxKUhBY2Nu'@;
put 'KGRaWXE+ZDo6ITVdLHRUeHRpVFRnJmJ9cSooTl04fUw1eStzRFh8OiloTnhfTm9NY0pQenB+Z0VzUTQjN2pnQVcmKyh7eyRQN3Jdem9+dWFEQmJsW0J3bV8leXlpPURjQTdLVkopKSIjJV46V283T0UyeFBLajt5JlY8WV5oMnxPUzNYSUQlRkl6TT5leEhYSGhUWkJZKT1ZfGVKOTszPHw4LiV9'@;
put 'VTdzQDpNPnlEUSV2RGN4ST1EQkJufCw6N3A7cCgsSndOPmshZS5gK0NJSVF6dkduNSFyPVBIZitbayM+R1t5byxmXS5dTjJ1PEJQYVlJbENjSl5BPVhWQjlzO0ldK3tYbTtwYTVBXSwkMGJBZzx4WTZLUH4lWTUqNGQkJjQlLD9uY0tdfkZ+K08zJjtKXWIyZk5PSysxZHRkVnhHTSxMXTBkQjco'@;
put 'KCpUX29edkgudCtLSnFDUm4pTnduW1FKS3kzeiZxOjdabT5jUztxJEkxaCIoK3FmWnNJIURVKU1TZTdNJixsVnJRWVA1WmE5P2lPO149bVpYQ11GPzUzRW8rKShzKmg0QH5PckNDTzJNdEZ4THIzOU1XWzRXPGBWc3J2QH1PP0J8VyE1NVoue3JGRDdxdVVyS1pQbCpBfCt5UnV2NH1TIShqPVNo'@;
put 'OSY6PmAvJChlRS9TOSgxSzwmNHtqPHpdfEFwVi5TOilONHNNe3FRNUVdfkZDXWAicHo2bl5CT0tCeCh9KFRWWysodG57IzBtVHIxNVhRMH00ZU9XMl8mK2hofmVGdkguX31+V1d1WXRCMjRoeS9CczhbLnssY2k9R0RuR1E9YUg5Z1c2aD1Obl5bQSY0MlguS08ob3cucCZxI34vcHVJRjBMWmhy'@;
put 'Mz9OMUMzMHFkdXhxcSl5ezZAWmR+cXxyMXhhKkUsLzcrWXxYV2RneChSI1pHd18qKztyc0JUd31xc0k9OWlAaVA/K01XV0VUeD8yKHJTWCwvTHlWX2ksN3BuR3Q+MHhsNXpHdmlKdj4mbUx4NSw4dD5gRzM8KCsocnBpM3grd192JmRYfFJISGk1Xlk7OzwsWigoXSM5Iy5bSWk+OUNRRF9nPlF+'@;
put 'WzlUeFdKeShWWGkhc2NVMltLSU9dW15wOzI3cGdrbkEuYFhTR0hgb2taRDdjU1NkOWV0P2pvYlhzJW18VjRefStBOmg8JTNfbEkrT2Q9aWcpaypkU09+SjxEdU9lSkY2TGk8Mk5UcXVMWigoNmZ9Jik7c08vWCxCRU9eOjA1XzBNSE1IOWgwKFRfck90Sk1ILlFITjx7eSVeSSVnOUJvV0Y6Ml5H'@;
put 'QE5eaE50fjJxSFZKVHl3KWF9fTB6YV9+TWhtZkQ1aHNndloxa05XI0JdW2crdX5fe3QhSHZjXmkrdHNsdFdfVUdUSmtMInxSSXE+L1hpPlJAV1coUG1iWFhdNH1CQnxyWXUvaXMiXlIjcEdzX11bNHgqREp3TEtlL1VPdT5aWHJVX1N9KGJfJC43cEY1cD5ISG5TdVUiaHcpdj5eej1hJWk/fVFa'@;
put 'ZD19QzF4PXduYE4iQHJnbGJdPVA5LGBPUWBEPmlOb1E5LFVSRzpWTjlydVRxakIrUl1CWjxvOiVoKG1HZT1kRCl3Ri44QFhBVCg+UCFTZjJnLGBPV308ey5vZS4hQDNJandmK20oZ3V7b3c/WV9uMCQuMWJaP216IXxuVn00UVR6OnpVXihKW20+cjxGWlMjNV8wWjtyUEFSPH1eWFBrSXRKT1E3'@;
put 'azN4MXZkfGVbdT5AaDh7UXk1XyssPjE+ZXFKMipWKzZ1e28xIkU+WkJSI3QmIXN6PUx8UW17Tyw+SXBzI1tdb3xRdmNfeGMua0N7Jn0jVTwye29aWFRNSGBbVUI+aktIUk1xJGN5d1teOShVY15RVm52UjJKUmtMLGJNVT8ucH5HenBzMjNoOkNVX01VYjNja1AsYE9KYFpzd1ZWUzJAM0lud0xx'@;
put 'RWRGWl0jaX4xfFVfVXp0cFdnKT9sR21fMlY0TGdPRz8wJWAoKlpFd2J+K2FGWnJFdn1hajRySS9fOV5nalo6UVZ4OH5WeDN4ISk1c3MieDFvXm96WTFzRF1bayQ5aFJwbGI1eWNeayQuUWIjOV5leTN4eTxRV2tqTHxdNTYmWm1mV0hmSipGMkt5e295JU18XzltM11SNSo7TWBfKlkvWVczVWFT'@;
put 'OjxgeDYsJjNJIVRdYVtydGFeb0VAP35MO2I4Ui43cC8+RDBFLld6JFl6QD9+e3RxPjJvaD5sYC9paVk0cm03cFVDb0FEVXgmK3QhQXdjXkJOdXMsPllffm5sU0ZQTz8sZ35yK2IrJnJZOH1vb2NTOjIhWyF1Vy58fGpCdHJ0cHg0TkxVdjoyTzVQSCs9KChQZj1KPjlYSlswKVVIYVZFdnpRVlhA'@;
put 'aU5bSXsvM19sQlkvZkNzUSpuNXIsPlZQdEJ1IyM3KHlBRlRiUX1VVHJVYzM3U2QqS20sO11Gd281e3FxVGQiUlBqWCksQVp2cjFRdjQ4KkVUTnRjeiJrRzlQWi5RKWEpVik7YmJxLnglbm9vTTUzVSxfdjpLcEM1cD59PTR2P3ZifiJLWTNkdEo0WXRYX3clMmE5dVVHRGh0MHg3SnJSbFokJTxX'@;
put 'dXY9X1pQRGx0JE0kRFtLZE15dWRjUXZdRXdXOkM+V35KMX02cnBGIUFDKFlYfFh0Qi57RyZlSiVjNzRXZCRyOC89UFg1M3xMNUdhTVl6bD15fmlVRXdBUS9jYCRYVmpUdndDWW5+TFhYMWQjeSxWT3U2a0oqdnpabUx8IXIodmA+ckNPUTlNMUJwTHVOXUVKdDpDSHJtXVhzQjdIfT92PXIoQUZ0'@;
put 'NUZWTjckXlsoS1dsOnorSW58NEtRKU1WR2R2PksiNUYkQTppRyZuVSxYc0I0O1JdSkZxL1d4eSxES1l6O0l2USpCVnQsaHM+fj8pbTlOXSZrdko8KnhUfGMyW1p0Uzs+dmtEWzAuaV1xalR2cStzKW1EZ0F3VzRZZmJGKElYZFNOQlk3cVNJc0hFNm5LMXxGTnFsaj0wYkRXVU8oZFBmb0BQZm4m'@;
put 'NC5PblhyPi5SV2Q8dURCU31fRzpuKE4qX2VOJSFtYSg/fVo+TW96WypzUkZCO2hJZyNyU0RwTGd6dHxVR1lSZU06L3A+fVZ7cmpaTShLcFVdNUpNUkNueTw6RyImQitCQHV8Zj1oPkdJOkN0LyM6XUU5Rj1oTUY/UHo+Tz0wbVomW0svTDRSXVdgKD47VyRbIzliYn5SV09AKDxSWylWMzV+cSIm'@;
put 'bT5yYStmUFtldTkkQi5BaytRVChCKXRQfUFleH0qPko1dEIrUT0pRVIhX3xsaUBESDx9cn5dd2hBPTNCbS5WUVtudnV5LGtFXnk/e1dmcylaOyhyZSxnZTZVT3wpKXN2VEJRfGUoX1toP3VYLHVCVG1iO08yYywrR2o4WUYqJnkifFR4cHFaSWAuOjJBZmBCbSNDL2NCSyI1RjBrNV93SCY0Lk8m'@;
put 'c2ZZLDU0d09zJXV5MWZEXVFIbmMrbDRkPSIzX2hENXJHPkdKKCNBTnliSloqalVBKGlYTF4+Nk5jSWM9I01aKWIkY090IXMiaEdWJkMyJDBXMmg6bXMuYl9XS1NbMl8kLGszOHpwfmZOaVNGUChHOkxyellrRWQoLEcmR2FLeVV1dCgpPDoyQWYkLlV1KGh4ZGRne2MvWThbKzdMfCo0bnJjLzp2'@;
put 'QkE0fCtnWVQ+bUp2UT0sSypVdyhyPiJWaHd2N0JKdW9vOiNHbGJYJGs5Ylg0JHgpL3BhNF0mPzhRWj91V2kkTV0mWkNXS1pNPi9iTWtgPSREIW0zQUFUbkRdKWtCcExFKjZ3ND5VYW4sLzNDfjxpQD1HNHIoLmFjeyMoKztNUX1vU0ZQfE9qQGEzQygzJFdeWE55RlRKYHQ5VHdVRnBPZCRoKFRP'@;
put 'UXpwPGluUVN+eWk7JkBORFYhcG9eWktdciR0LENBJiZ7WXhQYyNaLmB5JSgjP21zfkQ3M31vS1FSWD1oV0QwIiswNUc4Llt7fSFoRCtUX0ldMXM4c1R4TEtwPjNJXVtKWFU0OihQNG4zY1QkfSMhWl9UUT9bW3ZWZVpYc2cuLmMlUUldXmwjbUlBOzR0UkZNXm1ZWldZT1VfdVlUSSRIS354NU5x'@;
put 'cXJCXjQvekYia18iMyhqIk5+QkVKXS9OUE9ML0U/aklIdGNeVERpfi5fVl8reSxreno3P3lIUihmaUFeOlo8X2ZFOzM8QSt3bSsyXn5wXUwoQ1p5fnxDXVdBe0NwYzU+LFlUS2E1JT9Peil8JCI9aDwlZ1lsST8oUT1udWw1SkdONFpQWUUsJHV0KmVLeHtvZzpqKDczWUYpRjM8a2IlezY9M3hs'@;
put 'YnZzSEo1VF0sen1BM2t1KzVdMVBAQk90I20zPD4xaC5vVG5XdGxTU1kkX1ZhYHJJdGc8cndqPzNJQWhOfFJJciV9XmFuXzUmQio1ZFc6JHY3KnRVVXRGJTZ+RyUvKCslflM+Ml5hK0heamozaGRaTHFMTGFhW1o1fDVAUXxBNnI8I1JRTHRiO3xqSnhVW0x3P3x9dT46IixVXUx3P3RHVShzKk01'@;
put 'Tk13P3lIdHwjMSE8czkkfUl1Z0MuJk5QRlp4Q3Qoc0gsVnAvN3AoYDhaX3tgSVFHIWRzfmpRej5vUmFyXi5sdStKbTlVZixofiZBfkY2JkEjR2dsfkptPiZYbVVUbEMqYk0+YCZSNSg3cC9EMmhsQjUkJiR0L3Y3SFBLbU13fXJOeUBhblRTLDJeInsiXS9MbX5+W1VfbDVQSHAwOCkmR1V8VmJN'@;
put 'UmkueitdfHF6SipffnpEZE98YTcxSmldfEMwIVtRSVRHMFt2fFozeiFeZzVGMmhESDYkKG4pazBBdj9xSG5fVllZPTdBdj8zSWhVRkI6Mj5WYyU7R3E4VF06YlZUfHhYQn4iNjdMKmcseFJIe0V0flhvK3U+NEFOIV8odVBHQFlucHwkVFhydXMmY2w8aGlUXmlRXnl3fmB3Jm1iMnl1b3F+MT9a'@;
put 'SEY1dX19fCs1PihYe2FjSExPaG59cmV9K1BuVlUjbiklcVV6RGN+djZENUVyQENPQSEuJl9XZDA5azU/WTFRKGZrU25HKS85fXFQOVZ2JVpQNTdzOHxXX0k7cjZeN1JHLyZ2LGYuMnVsLmQ3ZG05P2liaU5YMFlFVztNKUU1Z0NDWkYpaTtqNTJLUE44KiwsbUwlTVpMZypWb2JeaWFkdl9qKHpZ'@;
put 'UTx3VV8oa11jOnVKRm8xW0ZqTTA9PEguaDdSTCppTkEve25yRiwuOllkMDwsbnx2WXIuOyxvZFsoVng1KGVXcDMxX0E2T0k9a0ddKiZnRHE0fS8xaHReOGgmYTFqRUMqX3p3fXI6RHhqczZOYlRMR3U4bWZyKClWeDRsU0BJSmp2XnYoPTFoYHZlVEQ0UCxKQjM/ZzFHc1J5JHtfZT1+MFNUbkRV'@;
put 'QEQkIjVSeDp1NkFGXmZqIzU6b2FoOHh2Y2VgalJoJkNURCVJIkljJD18LislZyU0ck1nPitQOz8/SVNzbndrUWpERHpuVyxuYCpsPiFQZCF5dnt7UFFbPix2Ijklaj1SKGBedG5hU1M1Tm9gR1ZoQSNMVFBiKFVtNXczb1dSWVEzNSZzZUswVT9HTCErTkhiL3JqLklZZ2JOcGNue0tHJnRHbSFg'@;
put 'Pl0rVk9IYEdWRj9tU2dJP351V3RDfSo/TW0pPUMkQFNIP3xUQjRhLCUhLkVoaFsqQz1CcTR7KXp+ez9aX0dEPylHQDRscGA4I3FSQUAkKFdkW3kpOjdIQit8XnMlXnYxQCFKXShbKSRXKjA0fC5DeXI0Qil9KXoibEtgWCpNUzRlaUR6ajdDKUdYd15qNFMqTiJfM1M0dW56RUAsfj1yeEUjeXJN'@;
put 'PVYySkJYdFNNfTd4aGZ5TlAiPFFYUXF2TC8/c0k4M3kpNlZ1MU1zX2hsVn1kNiVTU01JLFBnTk0qY3JMWX09QGNfb25OMGV3bzY/OV1gLDh4KXttRiFJJiN6KClgfmtRQG4xMFd8cDNUMltaRkI4c2J4R1ZiTi9ZMkpsUGQ1RGk1Ql17NGxeJlNCKCZeNipzSipHTCozblVdRz9ge0R6PiUyd1tg'@;
put 'emwxZzJnZHJLQGg+L3g/VXhBfXgzczdgVWY1JXNvTHgzY31jPTp+VVZIJn1PUl84fnVYfDlWbmAxL0ddNzhtZUxKI3l6cHl2RHZqdlB8e2E3UHxkXjwzaSVtPj88e1JqNUBRVExGeU1aQWxTbnJ2MFJGWylWRlpwVSljInNNUCROOFNxIlcpPClKaTY+b1t4NzA2Qn50KUIoX0xfb1Y9PUpaI0R2'@;
put 'QnF8O1JGIVdbfVBDVV9RJTMlQ29+c0NLMH0weDB8Iz1tVDFtKXN0TEx8WVJWM216eU52d0BgbFlqNTR3ISlzczduWF84PDkmMVkrfl8kOV4rTlIjVzNpfHVqdj41V0NecUooX0xzbT5DP2xyM1klfSg0dT5OOko1b1V3RzFyT35vU1BCRTY9TUA5JHNVeEJzU053bCloOl0hblRYJS9GaT1zcmde'@;
put 'eFAyLldoK0h1RWhPfV0pSnw0Ok1KKF8+OWY+YkF8bH4uPWViLCw4bEZ6fmR0WF89bTJvUVIzRiQ/MXlWRElSdUJUfDZIcD5yfW4kV1tIfVpuMGYhJmJ1Z3NTYjRUbG4hJmJlUih1bktxcW4hJk5NfnN6eyMwfE5iVzRea3hPKHxNZkdxfj8yWSo1fF9HUUFaTFBvNj48Tk9RdXVVdTw8IStxUHV8'@;
put 'MzFCcmptbygwMVVfSj1NSSRIPXwofVZfWSFEUT1xekBuSWx9TDVtJHgvWE9lVy8rWElmSkpPKVE7YFtdPSZBfH5tci41aWN8XkpjTihlYV8sb1U9TS9GSEMrYXw2TUA3V2FmQTM+YzttLlV5ez1sN35zLjc7czJycV46SHxyJC9rPnIiPn56JiNRQkwxZkI1P31PYHw1N1RRWXtKQ2kwLEBOZXxQ'@;
put 'Tk0iVWFUaEZjQTxpP095IVVxdSV+UzdlPTssUV9MJUk0ZlNMfGdaWHI9YTl9eEdTOX5pTUhJNUY7SSZdIlhJJjQuT3NZZiRrMHg3eWc1Kkc3a18sJj1rZlk6fU96OiZtVClaVkhffmFvMn1LRnguMXFNLDVpPnJzOSR7aCwhc3h1VV9SOnhnPTMzPlpFMHI+TVFuLHlNNCFFRyYpSy9jQnM+MldM'@;
put 'Y0A8ZDdaPk0+eGhzR3M0JGpeTzlbUUEiK3M9K0NqSVRYfCNNWF9HOSUuI2QpPllwYXNyX0NfO0ZLY1V8Olo2ekBTbl5DSDFTeC5qOCtAJmUuSVg0bj9UNHdbTjt0KG0yfC47bTJvZH03JVRKTkJYWD1zcG1ifkMhS3wmfTZHbT5HUD51Pk47fDhqcT5GaUJtKUVBIltANCR+fXJvV18xLzF3bHIm'@;
put 'e0ZDXXJ8Y2teJUU6X2RheyZtSDVVLlhlfnBdXSZ0IVoqNENsYDdJNipdRU92JHpVXzJWbD5jYHgrcD5rYFlyMEIwXyN3PyYkW05kMUpzc2VxVW4iNCVOOVZffihsc3o3JEIuNWoxajp9KFJVbkNvbkN1OVp0NCohPklkaVBGQD48bklRYHBNN0dWWERIUTQ5WUx8elU1XlN8ZkJISSxIeEJgLnx9'@;
put 'LGlWX1csaz4rX3UsfSZaeyUjeWZvO25JL195JU55UD10flJSWV85T1pWfEd3Kns3N3MwfVNfYThQcS9ZN3N5VDRgcTBdRXtOZXVfcDxfeGFeJkdacDpHL1JddzpnfC51LiZ1RkZpeFc1RDZmN14uSj51dktvSEc3NnM1dSw+NHVjREw0QlZOV3F6N21ZNCRhfCsoY0EkKEhOQmh8bFl2PitiOCZy'@;
put 'e2hhPSZZdkk8KVllJVkqLnxKSDNmc1k0d24oNkJdRV5RS2siSl9zYFRVbi5GVWQhIkJeenljZmAyNCoqfHw9RTxtUCV9fTxOfEshRyZCS1FuZHdtV3Q9MlRgNVgyeUdfXylsIiYzJGltcVo/flBoOG08VTN7PHdhK3F9LCYvJmpASnlAfFlDNzR9T20qJH0rd1hfd0h9ayMpPn12aWVKQHJxK3R8'@;
put 'W1smbTN0OG5nRVp8K1JpejF8Km1NP2A5aDlFWVkuJCxrYS5MI0dNLFFHdE48K1JpbS4od10wWGt6dENPTz9WM2xuWW4xKFpSK1cjZy9Rc1IsISVnd0ByPmtvdyhCQk1dLlFOLihjYkZMQUYwdCVBWXI1aj93STx2IW19InxDR1ZNNVkuZEMhQGh5NyI2dWI4TzVhNCRZUX5qejomPmopS3JHOTgo'@;
put 'MEtIW3B7PlBrJiVJSShiQ34henQ+XWk9TEQjdUN9c3ZNOH5jeXErIUdjfF5Zc2dManp1U3FyTEtxZjl2elQlOVBzb1FXXWtRb3gqdlRNP3NRVEMmaUUscFpUcTVna2FVfV0rdyM6U3RDdCNVZHE0dyhUJkJ4dTR4d0FKLnojNFVROUx5QkQzYllqeXE8N1MsTTBEN2IvOjpXUjxqWG0rYFJzclQ2'@;
put 'eSxPaX5pdF83MEFvfj9TY1tCaW0sZC9EX0puMkFsT2NlUk1rMy5sV1s9KmdBZWJ8I00/JnhRbDN8cT44WFlbW1orUCkrYWJMaH5AU0gmSkY0Z0claGA5T3I+b1s6Kyxbdn5Rb28+YnQkVDBFY1M5fnhaNiRjXitWdUl1KHl1a1s1Z21gSlp+fUpTdD54ZH5kUU9gLjltQHtbVUZqMHB0VH1rJVhN'@;
put 'UXVuY1FkTS9aL1JtczFhe3JwRm11Z3N8PU5FWU5SKnE5fWp9dzExWjQqZXUvdjlzY0QwWnQ4SFQzQEd2PFhSYTpvPj1VRFQoTSVmP0BVUn1PWW9rIXVTWmB7VmAiaFp0VTpRbEcudXQlP3YuV01xLzF0MHxMbCJRZHJbWitQJTJhSEI3PllKTHwuVzxNV3Fyfl0qIypXK0xEOHZ6UXM4QDJEZCxS'@;
put 'MUdWaig/U3I2dVlPd0RlcyErLExgPW8+aEIjZGxqbGFwMH16XyVaRmdpOUNmP0hnciYuaFNWR3gxTmU6Wkx2YHU+Jl5OUX1RRU90T05ERytVWVAkd0E8Oi59VHo1dFZIYjRbL1kucDpUXn0vXSt9fVBvdGM/NWd4VGJDKCopNnlhdEFYO1FdSi9KMEI3SEA6YDBraEkpZWI2dUhVMENIe2FiND43'@;
put 'bnAwbVBJYy97KkV6b3dxdElobDNjMTMxZygxN3xUS2h6NnkwJWV4WnVtQEdmbXs6WnUjW1M0KSlSfT4oSURSeyFIXUhnLiRAYHpPfiRBaHBffnNWNk9lZ0RwaiVJKnE9TSMxS2AjSEJdMX1aSmE2K2ZHdiJmS10vNS9KZVNVLi5XazZIb0V0Q19EeVlNNGtXKURjRVkqQmVNRX1aa1puI25VTiUh'@;
put 'KjZyYz8oUyMwLipnNEcsfmUrV258fC8xNE9jRVc7SF4rUCUjfXdgdjhoSDUsVnUsKmcoPXZzVFVVbjYoWzE/WnlJPzkrSilqKEM2OGF0Xnd5YU1ETVlYOSxENn1UM3RaNCF2PXVBYGJUbyJlNGU/VnAzOF4jal9ufjFTdTorP2pdYUNrUHRJTj96cm04SFkqaWowUUsiViZsKjx4T2QmZ0EpZyh+'@;
put 'NUQseGNmSjV8RnpFLEZYYWA2aGg7ZTZVSm9eVHQ9WkNtcUB3X245S0dhQzlOOn0wfXhoMT82RDh8UVpnbnRgPTFUY1J+SmA7Jm92R20pa3UlQkg/Mmg6V0ZAXmJUPTlzNGg6OWMxalYzIXNIa1IwX0VMfFs8ZSQ5JGluKzYpYml8bUpuIzJCIVhhSjFhV2U5KDduKXZVRCJGaDVFSSxOV2F8W2hM'@;
put 'bEVfTExAPCt5O19FNjEzUEpte2FyJmZ0Iz51ZnJHJmZQW1h2Mmh8KCIrb24/R1ltTHE4eSlkVXFiZjtKLkQrIWNBVSg+dDVSU0MwTHd+WVVuPis1aWZDd1k5MnlAV0NCJWx5NmBEbXVbdnMpeUVyfDd1Y2ZqeDM0bUIpdyJUIlNyYEdWWnYqLnFxRy8mVGxiUW8uR0p6IXwhNTRyc0I6TzNMLyo8'@;
put 'fTVSYW40bnFJP3VCdzNoalN9KjZZZDBlUiZ9WENGPkhGUWkoMWl8ZWo0cmRDWk8qQjhBTGNsMHYkRlJTaiNEeX1KQ18mSXRzO05jODx9cz4/eWZgbEtrQjplVCZfdCQ+LDZKdH52Zmp5dGYsPEtjdVhFc3FvJmk9b2ZNO1Z2dClrdnEsbVU/UzI6fTkwcl9BSEJsMGhUdnVqSFRPaXQ5ZT17diw1'@;
put 'I3JeW2ZnJShTRkohO0hiT0hVL11tQCxiKGteTmw+UldFcEpnYn5YNVlrYj9Eb0pKUXp3JThzOFFCbDVxRVFmIi8sREVHPkUuaU5+fDo1IiZ4NlIwQmxJNXw0PSpmSXFLJSElSkZ7UiIzPklpVGpyTiYoZVdNXixWRkFhK09UbDU7Y05bS0R7YXtkbkpkfDtAeyZGd0dSJHp3Pn5TVmFhemw3cEwh'@;
put 'NHczKmpHT0Qiels2cn0pInhbKDFJVyZJQiRZUnYwd31KfmlHLjdrNTE2bngjInpdZkRKN3c8QixdUHYqalt0enJgaioqMEllQmpYQ2VXfHVJeSJxMVQ/ZFB1V0xHZFpTPD9aSTM4ZWR+MyhdJGszI3w+STMrSGpAJitCaTRELFV8TEJOdFtRPX5GR1VzUkdZUmY1dkFGQjdCXiYyP35pfDZPXWp5'@;
put 'QSEkaU5heGNWbW5GYWF7KmAqcFNuK2B5Ym9KMmFiNnVqOTlCUUd6WGcreDApLz8yWVJqeW88K1JfYDNCbFRyRDNONFdsXURiJj8hNG1NaWc4IlZqbGJmWU4xRWFtQ0B9Ynt9aEFtNV9PYmVZVEMsaTsmQzN8JW9wRXZ9bH5YQ3hfKUVZUylUYFpMJkQ6Q3dJbUREVDJgQlVAN2BKNShUV3pfM1Rk'@;
put 'bTFFWGxlUCR0Ti9mSXp5JVBreTl8dnVfJiJbOEY+TXJlcFBjW2N0QkRJUmJhZ345OyNRbUpWdHQ/Yj9kR118Pkl7aFVFSFtec18mRlYhWTdiYm16SCJzQzF2JGZ+RDFnUSo+JDh+Yy9KLl4lTVNyRjc9Y1c3OlNGVTtCPTk5bkhFWGVAa2EyZXo4TEt1Q0dzUmlkc1BWRWJEO0ohUDdHVXtwW0Ax'@;
put 'bl9ET2d0OmJzKzV9aXouXmByekFgLHhBKj99c281b3cjeiwrKE42KSFafGFzcVg5QllMfFYvTkp5dVB0NGhfVkcyMXwmMHpaIzBSY2xXYkpDU3tHSD9IUjtMWV8lL2gkQzI9Im5vUH16QjBYRUdxYXFzcHRXbm1MKCI5dG4rbldYOzoyPk0hQlNvPCI0bHlzZ3RiVVF0dlVoNlR8W0VfNjdKNVtW'@;
put 'KD99LFYqTSJtOVApLn5TaWBnSElkM21lc0ZRaUJnO1EpcWxGQm9tTGFuaEtWKnpdKVZFLkRTVysyMCgrbGRFKEg7fD1EcHRvZXl5c35vITYkOjNnZnlNeGsmemhpTCQieGFTYkN0QXY2cXojKXhCVWhARyM+RWlwSWNDKEwqfnskO3VoOm4oIyw7NWAheklgPG5FTDE0KHA+Ly9FSEBBLiQ7UTgl'@;
put 'aDo4LCRUVDNBfkNkWl9XWC5JcC9PSCQ+YFExTjRydi5ISDIvU3cxaGI5L0pAJDoiYzRWRTFyZDAxPmFCdCVXdlh+OkdibEI/I00zTmB4MHRyXkhhSyY0Pm5qeUZ+RnJWPk8jMn5UKGtSb2lhLHl7QnVhaCR1UDlpPlpmK0JUNikia1c6K2B+MlpsWjIrWTI/I3RAdSJubkc/YTNUV218Q0l3fkE/'@;
put 'QGhCPCIxKHtyOjs7L05pdHY0bEdAXXJbQmZ8dzhxc1p3KUhdM3JTOTRlU35GeztPeS5XNnkyTEZIOkwiYiEoJnlzOCFKNyh3Q0ZWKmY/UChGNzNvVllARG9ALnNiWl4rQ1ZYZiQqQk95TTc4IlhZOkAzTU91UUpeS0xbMUd+JlYiK1JYOml4IT5weHJNN0NJUmV4JH04UnU+ViFaeEhEcXVtVzVr'@;
put 'RT57S0ZqdE9AKT9Rc2BQS0BkTW1bfFVbWyZBWGx6JVptSyEkT3hQZ2ZDL1M6KyFodU5MaihsaW9aSkIlRUNYRHFnUndzZktMfHVoL2puMUtqTWNEUiFlKyJySC49LmVOVn41SnQzKUBCKml4XWBeRF5RZ0pANyl8V1NCM2QqYTBGSi98NHkzcVFocj15fGx4dyk/TUpJJFoxNntid3okNks6On1T'@;
put 'Z09Vd29nYHlEVS9tPkJwYUgrK01DXmVqQEwpQHdLdD5CVWA3d2gmJl02elBYJVpWdnNfWC57cipDTnIwIVQ5SWNjMSVuPVMka083dU5Ja1ZVbSFTUWc1WStSRDFFJHMyb1dbZTBaL3xhVG5JNSEmKUw4fTQpcD5kUCJiX09mLHtMXz9ifkBLaSE8SzpoJn5ZNVI5QGF1MGBRck5MJlojPkNkMix6'@;
put 'IXw2TS83YXlhKXBzezFNUypfSVBmeipEKmdRTHBDUlpzQE9nKUFePmxiUC5fW0M6PX04ITsmOFtuXWFscCxWT2V9NENwTHpVRUUpfEhBWyZtWFZOL0JHZjhzRWlXTzw+cnc5dnJHMCxvfnZ0V25WInhabUFlVns7YWFnWFVSKHhIeXE1fDhKYWRoOzooUEhMSE0heSxyaVQmdGsxLyo3MV1PWi5N'@;
put 'Pl1QZFkrYVFPUk99STlaW2pWLHFycmpJUTRVTkMiWVFHVmd4KnwvTiouOXlALCE7fWtUTk9SaV5Ybi54OEIlPXhYfD4qXSYsNilaIUMxcGwxZCNPcyJiOUkvViYvKX4+azZTVEEhTVskX0UrcGR3Uk0ubyE2XzlPQk8ofUdKVkU3Sy8lbUNueEN9QHcuanM5WlhuQFpEVHVCUiNYWUJbR3ZURD1N'@;
put 'YSowczhMM1R9UWhaZ0EqSGZuRl5odWdDV0VeRnR+W1dZX1AvdDFQL0V0S2N8MkpTVkV0UkRLdV8lYWwmcH1QSzB4WTwiPjkyXjpfKU4+c2V7eCJBa3RbTCsrcjlTK3lTMHlGSntFO0hTZ0x0WXg9SXVQUWRtQXVlSV95YU93ZUhgKCNQfihhMkolLixvX0RES01FZywqaEBGUj9KdXpuZ1tOOCht'@;
put 'LipuO0goc34/SktVWXB3e0lVbkkyPUIiaCZUOzlmbDlecUV2TkpPLjsxT3o/PS54YXFTNExaeD4vT1Q3cXBCIVdBejNPbSxfKCRyMXhQanZUKiheSmNnZyNdYSh9Il1nRiF8cyE7WkkrTGgkdC5zQmEyKE1Ga0BHY0FzRGhpTjovYSFseGksInx3S05pazZDRDlzM19bUzoiZWNuJVMpN01He2hV'@;
put 'UmdzWVZCIX4qZFRua0FPV1ojeksifiRXJE5oJGxnX0x9fj5vbD4wM1FmajYifDk2anM+dSJGaFRMPklDLCRVRHxlajdhMkhJZEZkWDlrZkc3PG5bc3p5L31FZFM2MVh0QWJZfFFLSiFrcGwqQU5ddmh1ZCxQPkJ4eTQxXzVHfi9LYmRIeXNXWn1bSU9jSl9rRWk1JEtiREhqWDtUOlFhSCxCV0l3'@;
put 'bH5beUxDdSYiVEhyYDd3WHxBS2xpak5JPzI+RH1kPSRLU3lOTyV8Yi5JKD50flFpTn5+Pio/VlZ0NTFBb3k9JG9kNyZtUE5yK3VdYXowQUlSbFlifF9YUHZNd3M5XSM5SiZhKEwmcnRvcj4lbyJLaEJdMUYvOkU5emlgYCl+Y3UjfURHa0J8QVh5cn51ZldBYkhlLDcsTntoZXwxeEkoakMrUil6'@;
put 'a3guUWJ3b0xHT2pSV2U1eFV8ejU3ZkJaKmg2fSxBWE9EOixhPlkkNWxCSWxZX2UlbGEsZHM+T1RVNlZaKThFTGZBeU1FWlhEdTlyREdweXlSSiJJbHJERSVeOzAlRldBcEVDLipWSV0sbmo0KzVXNi4sI2I7Rih8WjRQPzFkQUNYLztYdHhefER6Q0NFOl8wQTVASVRJbmNtWGo6NVhNOy5EM3RZ'@;
put 'NEhQJUxMTzcsTSguP0FGNEE8LzI+KmZjJTVJTik1Ri5MVE54S3ExcDBGdGM0dTIzX2hFZWssaG9JLmA5Q1tyfCkyTCZfb2ZFUlQ6RndFY3Z2OG1ETmg3MVVxNmksQ312MW0hbWFsfj1HXiYwajVYSClsS2V6KSl+Nld1bD88OD5+XlROfG1WIT85RGssP1FIP2xpLkBMUjs/ZH5iVVhfRDV+bEpE'@;
put 'aWUhJGE9X34lWlB+NGw4YDhQdGF+WTl0eCs5RSQhNmUydSMzXSlXRThIZFBrLjo+TyQ3cnAqNHJsR2teV0YsX3JFKnIvQ15RfX5PW0pfK3J9KkYmUztqOj9ASyo0YiM4XkhKUiZUWlFAQEh0VXVJUjRUJUlqTjJpTHdmZ0VBT3Q4fkwrOHsmLEBSSFt0U0wxSGFqJFs2RlJTajBFMH03ZTsmODVh'@;
put 'UTh6RWlQTGZTLFYrdGZELltrfGQ2eD4pTV0xNE8yR1c7PXRvRnU1ZUpHL2UoWzVMcXRTJmE5QiR2a2h9QFpHbXVQLFBQbHxqQ0AmVCRueiVaSklGNyZCOFpoQyxJbW56XT4xfE1LenBSUWBOaSkiVEBAbSY/fDNiISswNz5OaSR7LkNqfHFOfiY2YiREaGNGdmRtY3NGcVU5fHJnQjZHO3RFPD1+'@;
put 'InBSZ2lOOHpnZkJbano4aVpecU5zejwmejYsaGs2aSIvOUdOd0UvcnZrRVRkZHhJYytHQXE1Uz9SUTd0MndtLixFWFgrYThfRnlAJk5ldTFmRGxueEZVRGQ9e0poTkRyXSkjQT0+UXhiWDFqc11RKDluOkoxOl5bPU01KTFPKl85JE4pK2ErP1EoNm4zVFhxe2FgTT92fWx7QH53cFYpaz1nK2Ve'@;
put 'XlclPmhocyFZanM2dTxNPi9uVCMucWZJT0ZsfStyLHpuPnt7JmI6T11sez8yP2h5JC9acnhtWlErTyJEc1tafHJCRzVMfkwkfE5TRWBIaUUpOz9udDouTSpJSSlXM1VsPmpLeCEkflUla3xYMUldSU9zfXRMZkddV1lgUGFNWU4wQSJjOm4+RU1KWUEieWo3cj5idUA4M0F0Z1Y2JCVaPzVEMkhr'@;
put 'XnElL31tTEROVjYlUTNjZng0Z0RKTHZXKjUvMSVtazNEI2JMI2o9JkJdWU84elttQ08oQVRrUkAyIT99KE0pJDs+dVhMdHtCa0UvfXM1KG55UkxTWjJ0bytaZFJYe3khWlFMfCl1dVc/V1pqIiNgdHVmMkgjTHx6SCVedlRwSn1tZ1s6djo0S3w0TnRRPXRNPD5lZWR9SEFgJil0aEwsT091MHNx'@;
put 'UlZfVzZuMlRwK315akIoUEM1LnQvQTNoXyNaVGtbWkppJFd+Kn5TUWBPTmRpRGEqOyVzL0RpeUw5aFleWSEyKGwwYjY4Zy5bRlspPkNpRiVaMm16LnEwJS8kUDYkKWdFNnclQjl1ajp7JlJvaVFqZyk+fUE1Z2dYKHArUixvKy81fXNqQU9laE5UeipnIlJHaCNmUTpuKShaV25NSiZ0YSkqeV87'@;
put 'M1JNQnA+ajpgRDVvNCEyeWhDLzA7X3ZhITRkMF5VK09jPzR9WCxyTUF7TFchTWBXI0BbWEtgb3BIKj1KfTdrfltRcT5LaWlaL0RHaVU0Q016cmE0MnhMIi9PODV9LlZHTU0oY1VRVH4uPzomLltfUXBEWlJdc3duZFpbTFs9cXFeSUYxOitPaT41V1VXX1V0d0pzIUFBWiM6dEVwei58MjdrOFNS'@;
put 'VUIyeF9paFRxUlpiMCFzdU1zLjFbSzNodCo0ZFNUfTFEXlpaYjZbOlFHVGNTQEF4QWB5ckJ6clBoZUdDR19DNXljSXQuSGxTLkJzJmI2YmxpRzNRZEMpdXIjWHxYLzpRKC5kVV9YekJBNE8sfDEyUnNGKyVZU3NlfllVanlkRGthMmAveHJdNDFHSG1mblJFPyl0VGpHYCkkcnVdVEBNZzlaRkgo'@;
put 'fSp9SlI6WXwoTXJnUXNndChjNUFRRn1zQEpIPz4rWWpKdyFjOjtdMEQ/PmhxTE18bUgqM35xRH5jR1pjRE5mImV+dWUxJXB3Z21ATHxuLlYjKkBJekF+Pld6dF9yV3dYJXNWQnBzVD9NcWY8JGJtSCpAZkFhe0xxI19NMFZ6RDQ7Y3tAb0pPeW1TOEUlfDtAYCZrWFpSeERndCZ+I0JUbkFBUCk4'@;
put 'PjRsWT9+ZXMleGR+TDU/XUAkeiRjZ0VmT3hpbHhmdmhKRUEuPCxoYEIzRS5hS1lpYG02MkF2RFFReWF0WllTSFJaSHZ2bHguTHN1dEJBQUFBQUFCdCxMTWZuTEJuQSpjP3J4Z3FUfGZDJkIiYFJLNnNjckQiTT4iWnpAUGRxcVRFYC5SUklSWy5NLFM0bS4jdDd2XnBkeiRkQGw1eFUrMXQ/XmVP'@;
put 'U3FXeCgzXlFEcXVaMCNKKUloXmIsYDxBPiReKU92VXgjSSNzTTQzNjJ+RS5qPzgzZiZrMUF4Wkk3SX5xZl1sKGp3KH0lZUV8Qz0vMDoxWH04I1tJWXBbbUAzKmUiLHd8PCsxeyIwWUcjX2BbLEpyUntXI0pqPXQkS08iPHMqIXNTJUVjXSV7QG5yMnw/bUhYJjh1flFyb21veGVqMFlOZXJOP3Jf'@;
put 'OlUwRz98WnVZR01xe24qOnkrWyljbjVoTjxAVy4wTzMrV2dOOGtVPl1hKnVBKGtVZUlYMktoeylrdk8+aCN0c1lMVDlea21tT3BxXWwmR3A8eWRdMipJSVM8Szl5NSQ1eHV8XTYrfjYvbVErSzg9Tjs0eG5AO3AlSm4od0wybCwuK24vM1Jffj1ZJndbdS9QQWBDfC5JXnlQensmdjd8SyFVISY6'@;
put 'VUdaOX0oKFd2YVZlcDIkZURMVXssUX1zc3FqTygsZ3dfUGZ4OyZPK0lCTjtQfD06MjNvZiUuRzxiP0YzPnNXZGdKZXQ6Q2pnIXRdbTpyfi5FVGxSYnAxLkF+Lih0JiMuXSpNeU9AZDVFY10sYnxaUlRzTip6MmRQV0JraX5JNlVzKHFuQUBLUjZ1dFlJcGtxWFRtVSNES3pdcUJsSj9YRVdYYy9g'@;
put 'UUVNWG5KXVgqdFRlXWVyLnVAKyY+cHwrRzJWSX5YQHx7SG13QnlJJDE8JDIsX3xtQGlFTXA2SD5WaXZZLDMwMUc4L0xvckY4O1ppPnNaVDkyZCo2Qm81XlRIIUZiIkZ3RlYlTEBrOEpvRTFNMWVKI01SdXtEMDteNmQ1SDludy99T09oNUE8bl82aWRdVVhpMylZJWhTakBQfiE0VSFGRGAjO11f'@;
put 'LEZYVTs9fEA0M354O3ZxKjs+ZSE7fHgpTm4qdTpybD1CcXhPanJHL25yQClrViZLPzBvOGMqLG5+fT1gNXFVaF55UEFGcixFVXhjPT1We3hzamJNbUYwN1lXemYmeG1yLiRKN1ApXj9WL2JTeyZrUlhLNG86ZDZeS1d+L10zdj0hOmUlTExrZWtQQUY5WyR4PmRTTUdZITYibldIMWU/akQ8b3Nq'@;
put 'cDo+MVs7YW17V18hYTJePXYwUlF+d2pBKXNmL24jL2hDQU9QWVc4P21vTUBQUmdGWV9VaWI/ZGZVZDlzI0w/MCFJL1Q+WitMaj8rQlFSYVNLYzlmUX0mQjE0aEhiPCprfTMoM3k7ZTc9UyNCeWxCbGteLkJhS1VGZm1AVFoldGlben4zfG4uM2UySSs5WyM/fClVSlI4fnlGeER7SmVuNjQvZT4p'@;
put 'JkJAW2J5Ul5kW0xUZVcjUlp5JEcmUCwvWGhXUzl3VjRRPUl+XSNAfUkrRXVYWnBUQH5uRDpacUdlLnxpbF9qSWR5bzcjNj93dVFkQkUlIShke3N6bj1PUXxxQFJ3SFRQfnc1bmYpTjlhI1pbUXw6bUNtJHVMLmokcXpROTVzSkBXMyFAdn1CQVlpKDYyfEtlVm5RciJ7cHVDYHl9a0s9XmN+X100'@;
put 'YzVdfjdPTDwyOWJQYCtvUkBnIitYUW1bPW19PUs4ZmQoN3owOnR9VV52a0w9MXNwcEAsaFRAcFpVSCwlZ3xbVSxkRUUqTFFhez1HdyNLLFlgcWBPeXsyWGw9PysjYGFac1J5bTpSTGJRNGAqOl5iUGRmTVBkInJIP3N+WiYmPXBpbl9iNnFkRFhhTFFbbjsuYW58YFBjOHhUMGh2QkRORCUrYmE5'@;
put 'VFVLO0ExdFtgOH5iVSVkU2w0XWQ/c0t3c1ZZJC5ZTCZvSXRPWSl+MHh0Nzd8JlZ+fWhPJDpOfnVnJFJvfls1NjIlclsodVY3fj80SEs5NH1ySzQ4Zlk7OXZnSGcmb04hMXlDYGF8VDY2Kntmc2wzYlpofV1YRkMpWyM8XldGN05lK3EyVHJwUk9AfUQiZ3pdY3I/dDRpZjZkVlQ9MCY7JWUuUT5P'@;
put 'fCh+KD5wV0xYV0Rja21bTnU9XjZGOillU0AzWS9ua0RML3J4R3l4Q3ZoViQ5RTI/JlImcyt4LkhgQD0xVilCQ2s4MkdmXmJienwjWlE8e3o5aWw0QEJ1RFp3ajBEQzlCfXpVJDN9JHVqMylVJnwyTyR5Wz4kQU4lSzgmJXAkRzBKMUV4MVpZeXx+fUcjbkpyW1NKYjVzRClHPE5kOylNOEB6bFZX'@;
put 'TEpXfCVaJmlxeEJ1JntbNGZRMXNbSU1eIjBuMlJLN34uaXJCL08+WXc/LF40WDpHV0E1YGpCJkgoN3Y9eiQ/fW0jXT5aMlpwMlUucnQ9P1VETVNQVFdgI2pGJVZCM1FbNFY9SlpReUo/TUxDdHJ+VDZvY0NXXzw/RihHW31OU097ekRUXkx2RDxPWkM4dkolbVtAM2dELHY0MEZPK2p8Vm1dSi4+'@;
put 'O0l0fE92PXR5UVRQbl1UKUprekJHZy4kYSYoUVt+bl9YMipobTkyLD8qUU5UJVlOPHspak8+ZWNjbTJrfTs7amJ3fk5gQV9CIXpdRnJfcmFVc0tlczhDLlFhdFtHbnJld1hrW11QKXQ7blNBVmZ9JlRxaEAmTGFmOzdSPzxCQEk8c3RsQHlfaVYmRlBnKj1HbGBncC8jWWtXcHhuVXAscmJKfD5s'@;
put 'azxybH5LIyFZO3BOKmRNTmJweyhCLHB9d043dzd7SkV1XkxuezRnOnkqM1ptX29qUXsjfm5AaFVsVmJ8MVE+Xm85W3hdJT1JX0cxPXwrSl0yOFgrZGRTaGh7XTcjZ3BIOWcxP2FWRTtFMmlydmtqM0soX35wW2oxaFQ1QFhmYD0zbWklIzZLNHx6fSVQT09Ue0V0JE11YWlILnNwR3d9OldKPjxg'@;
put 'amF9N2V9JDsqY15eaWZnVmxsVEJRIlRTKkpdPlU4ayZEOXw1a3dzfWZ4NnpAUWx4cWsiIWE0YH5AKURLZS9UXVV9cnpXKD11cDAlYS5ZRjEsOmZDJk8/W1gxfT4oanZDZT8xKSopb0VESixsUG49djxsLHNmczVifnNJOnx0Z2lUVntaOTxed2ghYWg9N1FpNVRXbE9WOSk0YFNHflold3JyfUJ7'@;
put 'amhNVSlkSXklPCE9Yz5xVE9+bE4oJj40UyE7VDwkeEUqbi9hQiI2ZmE8b3B9RWVmKVYmQGlSLFVDdD1dKDs2MD9Lai41YEskcjxfR3JKK1BWQGImQlA7OiMmWVNXLn59X3NwTVN6MmZwa1FDU190YGJFXVVTZClsbmhKTURMYD04e3xyaSNAUj1zP0JpezJwb0xwWGBYe1BBRjdkOD15dk4xT1Vh'@;
put 'P3kwQlppMiJzI2RJRDB7aCNycUc0TDEzYHt4XSRQOlU/KCNXfigjZGZaI1tdQXlfLk1NJXMlQV5+THhfMnpzbFROemIyK2NsQCxZfmZ0TSJkRyMrL0xScyg0RUFWQzQsdlhhZnVFfSV1MmdhM0t9KlYlbjFCeHEuckNPdSxsaSErVGxLdnh8OX5HZnRxfTwlPlomQ0lQfS9UbnF0MHtOQT80bTtU'@;
put 'PzUyPWJwVyhwa2AkVnlSIXdQTFpZfj9UVzRHbzJjTzlkJU8oTF44TFZqaVpKNl1OXiRdQiE0UClSfDxZRHJEcWg2JnBxKixJMn4qUihbKFA9UztLOHtZemxnNX5bb1NvcXR4Y0lpaTJEMj05fEpXPm1aLE94PilvQy9HcjlUTTBFRT1XWT9UW0BsVEA9PiVibnFvJXlleVIrcU06eS5SQjAwMilF'@;
put 'XTY/elJ3Tn0lKDpOIT16QzoweUk1REB4SCRlSW90S0NPTTVVeWdmIiNHcTErYitbflNxYl8kZEVtLHxvMnxweyN2QSE3YSkzOm47XyoyUVpneFlfVVdienh8R2IhOCNebjN3MEZJfE1KY0ZjYV9mfSUzTihPITxeTUlfI1pmfU1qS2h+RCJnPDZwJj9ocXJbblBMRnk6fWNdcmgoZC9AeHJ0Z196'@;
put 'U1B6PGw4cX1VaFJLRCE/eXgkWz1kanhGSTNtIypeUztuemYhITMyRzswRS9RRjBSb24oU3I/RFRpc0h5L3c0dl1MS2N4Ml1wez4pXVhETDpbJUwsNlAxc0tLZEdQYHAyJkUhc3YwUSF5ZDpZXyR8ezpHUTQzbTgvUlZQWlA9N2g+OnJnV3dvekNDI0t4OF9USCU0cTYjPXF5b0JhK3IzODpuMzxX'@;
put 'KU9qSnNeVmQ2WWpPdFVsM0krVSgyKlUlfipYKnA1KXgxbFZmNyE8UzgwZU0rPmBJRCRURWlFMVc9bXZMSmN9dGsoemVmIS5dbT4jPlBYP2NEb3lrOEhaUipBMDxbU0lvaVUoQEE9UE5LXyI+RGFYPTlVWk9nXWZIW0RjeDZWWlkua1o5M0JYe0t+YFlyWWwhbT9JMldlUFF0fTZ5KmZaWUYxcCVw'@;
put 'KigueHlyIVFRSFhDOEFwdkFEdUtNL2U4N2JufVJ7JkJxbSpCSUVeVGN0eFJwL2I3Pmh+cTJEYjtVJUl8dn5AbHA4LEMjfDs/UClBdDh+OX5tTEJGbChBTDpdQSJ6Si9TKTBbIVR+MCJCe3NxUFI7MU08fElnNHs0JS5icHljUkw3dFN7bnBraTZSK1JuTF87Z098cX1ScUpLak1MdUsxfmFTdFth'@;
put 'TEZCLlJXPjVaSUJuOCh8M3R7bj1mZEU9LlFlTHx6JGspTkVJciY0aW5JZ1JII3VkQndEYl4vbltdV31WLD4xcXFmUmw0TTt5b3xyS0ZMZm1UYGJYbDFBRy8jaHpLbW8zNl5YMlpgPltRaGt6UkNxK2RrXSt7L2RCV29ZX01ZWk9UPChBJXgmdU9eOyR0dT1RJSlzcnlefU0vMUR6S0A7RHJ5dCw+'@;
put 'PWp8Lz1nSFY5NXYrQyp3OjwpNyZkTGBKQ3RvSFJZcnExW25DN1Foe1NNMm9uX0dgWVdgRUE4T35ac2VfRXlHaGJxaDdFQldFLn0uVmN+I15oM3xrTDpwNFk5SzA7aCQkaSU+OXtUdV8xZ3UmTkJFLD0kN0FBcUhCPGRiSzlUUTlLT1VUOH5WcWwzaih5R3dXa19QV3piaCpMJiVWZ0Q8VCs+JVcy'@;
put 'dWdZT103T3Jnck9BfSFse3JiP213cE1GUl1MOURbKEFEQnRUIT1Ab2F4MXk7c0smeVNVOj06emNDJSNTYlI2L2YvV1tWWzkhTEsrVFhieXBZP3lwKl1pay5wNUNZZSI7bTEkOHpNOyRrby5eQ0Y8c1NGM3NsUmEpUk8rfXlJSU4+aXkwV0xUdkYqK1IoRzV1JFlvUUA8OylLOHREb014OnwoYyhh'@;
put 'SXhdJFFjNU1dI1JeM2VCTkJZa2RTMj8jIVdkNyZCI159az9IQyRZc2tKOEVrdD1XIVNINFFATHdhcTlJUylKbWdsZzhxanhrR1Y7VVNgUCp1M3kzTmhSXW9wWixXQnc/WjROTUBpdnV3JFYwbHAjOHVxVEsoVFM/cmFbU3JePERJTyZyMntxZVEqSSI+NFk5VXJoKF9dbX47OTZ8fSh1QF5FInox'@;
put 'ZV5idzo2VmMkQiRMbWg8XVlydmtdJTpOdGdndipddztILE1eZGhSRnswRFZmV0tvIVtWNypTd00uXyZOcUYwS1EjKTJxQnMxS15dWi5pdnR7NiQse0lHQ0BJcl11QnteYChqTmR9W2orPiRKR2RSaDEkaXBQKz5hLDo4UU47L3RxcE1vOEBRenore1c4I3suK105Mnp+Jis7RDtkcTg/UVtdJHM5'@;
put 'X2JKKDVjOzw3cE0sbjhDaGE1fUBpWTtNTno+IShVX2toWyooMjFhN11wJEpxVHFYU1ttOntWTU9JI3tiY3lie29WKm5ULjc0QzMkRmtFYyVaQ29baihkUXFzN2dVKVFbTEpaM2pAeGZQI2hFciQ/OHltI3pRJGVCam1IRXU8LjZ3bSVIZS5ISVhUY1JwbWFNR19pJiozcyFXWF1ZQls6NWImdX4q'@;
put 'SkhhM1IlKFImck4ubk1aKzR9JFsyPStDcE9eL3orJVt6e2EhMH1HOSRgMVZgeXk4TVlGITk8dzo2ZU15fUp6YWReTTdxcSt1eGQiVSQ0bkpZXV9aVncxfkZMR1tMW2NOQnk6blMqPntuOiEhKUFLeCt8MTRxfCsjKFg+NDhIKDR1YlNyXzkuL24wNTVkcHZuXTNnNnYmWm1DRWxJTVF4cWolTi5C'@;
put 'SEZzZTA7LHRIPyFvITtnO1lNLykrVl59b0hsPiVgeEJvfCw0K18hMD5YJWJ0WEgsbC9EflV2SHlxPkApKEtnbCxsUzVoXXV5ODR8M3tNRC5Gam9qdmdbJSRZNDgvVUEybn49MF8yLER9X3Y6PmdzYEQ4UmU/WzMzI0pPU2ZNZHtHc0xUOGhMTU4rNmEjNnBaZzdJa1JfKVJscHNfI1R9PnI6Z3Ns'@;
put 'NGlfLEpIYUlUZUI3I2s4Y3NfRU4qeTZ0emhJS00zdCw9S1dJSDFKNm9jQjZlK1FqRXY1QTxUPlQxbXJuMXBfeHJPakVWL2UjOE8jdFErQG4iNV1dLyU+ciZuR0VTVWhnVVRVfU9nIyNbN3ZjeDYhI215KGdyMjFpSHcudFV7WW5IZXZpMDMiN1JwYUJwOTEmOj8qUlNvcno5SCxULGQ1K1khYGo7'@;
put 'X1A7UjNdUGpaYFt6YHQ1L1g+eEdgZGVXXjkwQCJCfVt8My47OUloU21JdiovfFNVNUg2Q2JANW4rMio0fks9IUJtOWslOVorSGp5cTREdzsoZmNUVmNtbzhXVmooczQqL2BZP2hvSz5NRkUrfCV0VjgpRit5RXJPYCRGIn1iWXQibigoQTNTcnE9dys/eU09UUtlSS9wUG06bywkW0U1bkc9cjRq'@;
put 'fT5TTE1lVD19bHFaeE9gMHxYTiR4WW1AZG9RVldjLy9vK1VoSCxobigjVzUjIzxrRz1eMn5zVWhlO18xd0tbPzQhSTBpUWZmbDclYzVQNmAjYEpDJkF5JlRecFVMa3RTWSxEWFUxbj92akt0UHcrIT5pW0V7TEhiKnQoKGFpPTBNYWgzUTAmez5rUVhpLj5vOyNtNSUlJHE1LjBBeW9+djYvNX1y'@;
put 'cFJPND4zMXNBJD1dQXVjYWtUM20xMihFUjZvVC5lUHJeO2pETU4vRWhZbl5IKzlDZkRBSXNaI3w1JT5fKzFRUytzTVJZTD0zd1o9Mm9mTGdFUSs0W0tnK0x2Wi5EXndxOlhEKHdmNDJ0UWc4MDVYaVhCN09pLCpafXAzflkrZDolY2cuOnU6KkBVIj1GYzBBSWpiSTpMdHJ7UkIkPSZtNF5vYVVR'@;
put 'Y2dLPmt+P1goemNvPXpyYkZgSDFZODJ8JWtGcSRNY3E7XWd8TSU/eDRxNU9ULzNzLntNdT1fR3RoQGAlKUoyUiNMPmNqbnd3R3kkRyxUJmIzbENaYSlqU1M+SSNRJXJGSm5EcFglZjJzQSJZMjUsLl9VR292RH1jMGFfOzhOWF15UnM+Nll8SE18an5XbHAsamxzNzp5UjswfkhiMV0jW2s+VHY+'@;
put 'aFp8Wz46R3VQPWI+Wzd4dy4pNSV2IW05fCooIVRFMEZjXTdeSz9PbDNUZURSJElqcyFoOGxyZVA+UVBWY009Mi8vIys+MGVybUBZeVo7Tm9mKUtgbCVob1l2OGlwaHhPJCg3dH4lXSpqbjNedGdMS1ghfExjUldVTDx7NVpRQTg7XjNbWHlTZmUkI2phK3BLLEMuV3JTPmM5N3oyei8xazozZmFK'@;
put 'fSkvYCYlPkRnKF9XWVhiVVdSKntJNy8lJllOT3AiRXJ+KmhjMyhXO3pwZz52MWJtZkBATTd3M1Uje301Li5xdXB+aVpvcSwwRD9lc1NBX3hZci57JWBUZyliczgmVT9pKiFbSUw+e0VyfGB0Ji8wTVdffFt7ezdmZ0VIQHd1VT9edWZCa2lSaz5PbHxSKz1zWShRP1h8RDEqZ2JbWHdSciEsOXQi'@;
put 'TytPbS9TX0VDcGkjUyhePld7RTtXWzdfKD58amgvciFjdm5gRF1AdiVyW15KMWMsNDRSXTE9TWFwfU1DXSghbT9wSl8uaX4leigpLDMmPlZtZC4oXTIqa3ZMb1BpRjEwK2FjNjA7dmhnYz4sOkhGOEIib3crT192JV1mfDZ2M3QmZGRjO2R2aDRkJF9raDZLUzpqKnBTM0hEVm1XdWNIbz8qIj4p'@;
put 'W1N0VmcoNFdETnNlWnFqWDVqazllSiFwJUN5eS8yL09ZUVYxR0hpd2hdR2svenZTcTptKFt5Lig0ZlVyUyM2Mkt5JUhbaTYzczNlcnJJM2BwclFHcDl3KFpePFpSR3BPPVc6eVIsK0lFZzM7MW4qOVEsWGVzSnlLJmdNfiVDTTk4OjZ8JnRzfDQ4bSpkVmdeOE4mW1l6USpaX3dZTmQ9VFtbLFJK'@;
put 'RjtJfEhkd3dfYD42RyFeMERrYSVJPUpEInZqP0Z7b1RkbihUOy5wRmx1LkNFfGMwfF5gKXVbYEgkfShiVkM3bFRkekRSPWk9LllnPnZnTC9BUy8xRTVKS212S2JqcDAkSTlmVmtec2VlS2QzR1IwRjB7Rl4iR0tHJmtaQW16ZHdxb1RqXUZqeSwwXnBCKFVJPT4/a0NbWjBhMihgfVs2NGpnQTNy'@;
put 'cDBjQzR+fHlTcyEkLmchdjVgISYzaVFAVFt4dFp+cCRaVUhUT3dMbFJjZFVOOTpJQD9KX3V6SDVxUGkzUEFWSyxDXyR7MSwqMnNVTGRjajN4bihReSRTXWdMeGlLZ0s8ZmY6Nl85TEVlV3E5XztVLFt7X2wuWmY5PFpsR1pRflh8UTp6dSVkL248KCZLezNhWXlKSG9iK0lOOT80Rn1xTUNHP015'@;
put 'P2BJQWtEJEtse1QkUCFVLEFpPXBxdCZeMkhoRTVXWlVeNClEbmZsL3RgPjgjNV0mUyZrUHU8Y11yOT5YRUlBSHRHd1QyWnV+dSk1SHlCblQyXkNIdll2b3w2KzosbSMsOz1TPiMoWylgbVJGOFlGfk41JS9bPDtfRSVUdUN8JTFiVWVoMmRzenpDdSlCNm1hWU5CdmA1dyUkKHdIczEwTWAkKSkx'@;
put 'PGoxXTQ8P2dxVD1NWHY+WENoeVhAKDteeTxuS3c/TmshW0V8TFdCIXpDJn4vS044UktSYH0vaXJPWk9sUTx5PE1sSzwuUFh9TDRHOUAiKC5yVTFiRVFCejNZYU4rJCtZTVM8JGskP0hES2VRfipWcElLWCpGMDtEdU91dkdRUTMsUmRdVDIzWWM8Q187KD0ye2JFaT53IXQwJk9FZnpdTkJ+LzAv'@;
put 'eygoOjM5OklHaCV5VTouSiklZzQ9KTpday42aUN8MnN1ZF17VThBbS9mfTVOZzs3Rn0kcXdoTHgwNGRycyszcmt7O2BySFVNeHR5YnpgcS97dGdnfXZAdzpvKSw8aSZxcEkyM0Y8IWlvOT88T0UzTU10QzVgYk1fQzEvU3JML005WnEvZ3NSaiY0RSpQdCx+Yj0lcTxhXXY1NzR9diMiWWNxcihx'@;
put 'R1AkLHNxTGI+ImZPdTtjSSNIWHI4d2d7cVd1dkZuSDB+cV5ZIyVEZFtmaCx3fil2b2ZZNkdLITptVHhCMlN5IXdjL29OUURGKS83dnssblgufjNvJV9YfFN2c1RkZU54JlJ+aFc8R1tFcl1ea2xXNXZvSkVPIVFyTXVqKGAyfW16aU08bkxUPH1mOEcoSHNNeS4keHtFekt1W2AuVUNsfHpTa3t8'@;
put 'cyQqSUd4RjltZFtHNk1dayVbbSp4ZzA9JnY3Pk04NXVOcUdvfWlSfnYzYVBCKV1aVUx5MXJTanV7Yl1Ofl9RWDZnfmpXIyU+Imx9RUhyd3I1cXZyNTA6Ym5dOjBIKCI2YGwrd0csbDp7enBQfTwzOTwyUkdie2hWL24hez00OSUkLmQ9JFVgVGhJe3wrN1VIYS4lQTVeZGQlYm57OU83OFZmdU56'@;
put 'VEZjUk4hNFZAUjQ0eEcyZF1VMD9JYzxnKDYpdC58bk5LXjZDLE5uZjJYZS8/PFJWMn1yQzpNKVJNPkV3RWFCX1dgZWNrbk08b0JNUiZQdmRsYGQpM1hMOGZteTYhciJVWSk1OHxCXylRcGAmJCFlZix7RltDbzBwdSRab3ZKNkkrKlZ9c2wsKnhtQzkzQnUrOV43ZiMxJCteXiliN2pXTnwmSVNa'@;
put 'TlRgfEtMZ0tjOXksY1NiRldUJDorN2RaeGojNWUzZjIqQyhzYyhRdCxOMU0jay8kUDBjcSQjc2QyNn5qP0dmKExDRFJwPVRgI1dAPkVdcipETEQ7N1tHV2tNV2xLTG85U2lRW2llTnIue1crajw0b0UlYDIuIVI9M2hlR0kiTE9OZ346IihhcmlwVW81ZSI1Q2NRR1djaixWKjRpPUcmUnZ6RzVA'@;
put 'Kj5kYCpZM0pRRD1VZCtFRHU8RCp7TjxySF8kQWQzWX1XZ00yXj5CY0RBbUtsY28sLElbMShNSGV3OklmSjpYTSVrejd7V2RWRTpzQFdwYn5RIS9ZJip0e2tBM0k8QCxRMWNgfUQmQz1mYENWZ0ZrdWBKZi8oVClbWlNGKTUrInsien5QeGxxRCtjR0xwa04vOmVzN3xZWGpuSmtMNHtJK2orP2hJ'@;
put 'PSZzb0ZHIVldVCM3OWNbIyx1ZlFMZW5zJDZwdUlfQFJiR3E4JDRZVERveHh8IWIyU0BTNFsifTMwezg6Y01acn00eHRjdEhHYDJRN2dCfGNzSHdgRUs/azIxXUVmbWp9a2JXN3ksJWxrNHY1Ii5tVFRYNUtXPzN8RFAhOE0pW0UqXXt1PnN9KGw5I3g9PXNOUGZlbU9JZiw7YWQ8d0NwaSI3Tk1J'@;
put 'K3Moey4vI3lPQnxBZm5pVmxTWmt5NjxHTmBedEROSCxSIUhiXWhyd05HWExoIWREZzY2VUEoLkwvKEs4JEF1TFF+clg1YCF7N2pUKiN2KXA4dDE8PFJfLlhic2RpL1RlaHFlcVtOJmdOJWJ1elVGfTk6eipCPTJRTVthO0VkOUJZe2l7ZXZJOCFuWlNQfXlfaFJ2ISl2UWdbK1thJHRORCtKITp1'@;
put 'P2hJV2s9VSlsQmtxPi9FZnN3YStGQEB6ZHVML0UkbTlDO0k6M0p7SEckM3d0ZTxwckBrOFNtbXxLbzg5a2MibTFmXjZdUXMlJkdnayN7ZC41JVI6aGB7KGA5NTJRJERRPy9iZjcxUD1gRyUvX0JeTEZhZjdbLHtQfCpJRy5GJTxtcHMiJiJ5M19yIV02TUJoIXBBX11DfVBfWCksRXpafm1RPyNs'@;
put 'LmU0aVkmKnk2aGhDJDhhRT1JdFAuPzsxNDdbaEFFTC41aHBLP0BTckQ3IXBIK2NlbDo9KCxoIV9ReXp4dl4sI317QnpAdG07bXNIMXRrPmpzTDN6KGNiIlNHPnBuZyZ+cW04SFZdSyVfYnVIa0xdKkRHLFNYNlVNVjtjRGBARnJsfWkxcC5EXUk+Q2ZvZDNuS0ZmQmVNMGVLdFVjKnt7QF8scF5Q'@;
put 'cHxpZ0pSV2AsdHtaJFtDKTBGMVpbeDVdNE14WyYvQzl5eU13Z1ppIlUrbDtPU2YxRGl4PFl5OyNkW1piRyEvTHVXelJ4MiJ8anJncywvcGouWmg8ZWlnLjAyYz9CO3RCWU5nXzRBNTlHcSNMcG88S0lFU2NXTztRdyE1S1FYYjBod3E8KHZ3QFYwPTNtKF05VHldMk0rZTw9aHU9QHJfMjVGNioi'@;
put 'KkRWbkJjbCJDciVaP1lDakgzfWpDMTZ+TyguYEBPZkhZUWdFJkY8NipHMGZoaXt3bFcuZXhYdnVkLjx5SEtVLD03UzZjeWVkRFZHeGhLa2pVZiVPV3I4KFpzeDJaNiEvbCIkUjNPfHRTKy9dRiZUOkc7QUdZI3p6YXB5Km1wK25adlBrPDJnVj15aXpVN155KSxVO35JZk56QzVbe3htZSNzI0ZM'@;
put 'aXU+cDN7QmtTQ2lVbjNFLklpbjMpeV0xOVtJbiF+JnpDVXRXLHNYMVR2fD4oO3EmU1l5VzQ9KVUmJTlPYkV4ZSNyalpYdjB3M0xmXzkyPWBCN0NKX0FuVCRyeXpbRy9zQlpQfWApZXg9a0I+aHdfKTBHNnswZmAmQiJ2SGFfNDBvX2ZFeE1iQFdrMyNBYnU/LnFgYi91bTBvdHU8dS9kVn4jPTld'@;
put 'bDxMUGBJTnAqcy53Oj1afSs0QCJDTVlKUiN5QSt3JD90RFM+N1FgbkowbTxwT3pJQVtENFttRkQvNTt2dClGUmFhRkg/QmRuaWo5JU1UOSYyUyMrT01fREQzcXUpTT5DdC8hdTAjfj1ORz95aWdrLzNOWiJQUzo2UEZ1JU5sZFAvMEI2ZnNQdj5ARk9hJFBqdX5Ud3JbWE0pflp5bC9pIio2czch'@;
put 'Z2hiYT0wOUs2cD89enZwbkpnXWlEKXtwK1EiXmsrVjBZIUFrWiF2aCgzUD89Tit9el5hMEFHKFFUUVhmd0NGdyZiejNqKjo/XSF0I2lRc3dFMXJeaSlRbj92ZE9JclYieiF+aHR8ZlQrMV4yNlFJMHlrUX50VzYwTUgxb3NhOkZCWS5VeSlKayFEe1Mqa2ZDRz1eNllyVmc5fHpCRl1mRipFVj1Q'@;
put 'KU1fbTs0fnlDbjI2NVhWYmA/SDt0NmpxUTR2MjQ8Sih3WDx6fl99Lz1wbkc7VmR2Q1pMaX1XMTlFTTx5IUwkVTwkaG4hVDJqUlZ6SzZTITYzcC5lQEVEaFMyYmQqUV15Kzh+XXpYUzQxJCQvfjUrYC5oWURvVnJyM1kzci9RW3RTN2EmS09PQ3JhVypsPEJeUiVLL0JhNDw7dzJEMlAqeHZwOVFL'@;
put 'Y0QzRlI/dGsqOkJkPVtgLE5fPnF8VFlnJktrYmArPlh4O0Bodnp7O3EkSjkpN2RYdCpEak5vSUsjYVJYSm91WlhlTGJaLjspOyI8cm9tYTBuI0didVl5dFNraFF3cFBRRy88dSxsKmVhWUdHXT5tXWYqIzVJOHt4U3tvYSFkeE8vaUojZWV3clFUX2dAalJbb2MiMVlXOGZoSV9PcDFscnluUSpu'@;
put 'ZmBMWnZAUTtlSW0iekNLcW1pNnpMX0QsZkZtbkZHe24sP3F5cGJ0bytEcVssWVFNN0dudHV6YTsxRShTdG47JCpqamt4WzVdZDhNLFdaRmpzQiFjTGxZRix1Rk1+L2soZzZ9fU04eWw/eEp5WG9tUiN0TVZzLlZmUCpxUyhdIXpgdV51I0BaTDUkNGl2NmBDRj8iaCxVWkV8UXtEVHJORVJrRTMz'@;
put 'YGY8LCxFUz01SSFAUDghITFtMTpUNiRlXUoqYEROKF5QJVY/fVArIlZ2dExYRkJLImVWNmUjNU5SZHMpKFBQazp4entLek5vPywvISRrUzBgODJmbEJRYCo3cW1KdGpRIlo9Okl5NH1yYj4pWHxlT3BnWmI/REUqckl1MyF3Jn0kTS5nblkyWF8/czwzfUA0QHtEd00jUSRlOElUUjRxOSpCK3BN'@;
put 'c08lXzM2TWsmMS87YVUlPDxJI3dhM2ReJmM8TlRVOV5nNkxHbmtaXS9wO0BVIURBO0R0ITE8ZV4zbSpmcTdWL0prVkJqa2NjTE4wXmt0a28oJmtWRXJ6VXZHS1k8MyNoMWElZ3Apa19hXmkiXnRwRXxOcmYuYV08RyRpQkY7PXZXXy5zLit6QEtFTFFqKF43Zm4sNGRMYH5uMGJvI05tMit7ZDA7'@;
put 'V1NOXSNXYncvTG9XZ3ovcn4sUkxKPTBhNzs1MDVQdV4sLzl4JX5IdUdabzljKk1jKzNXX1pvTVl2eDslSzdZb3RrRC5zeFU9ITRxWUtSRDFQWi85KE9xfm8wYywlMCl8alpLZG1NJXQjbHc3fFBOWnpRejUkbnJPc2QqRFY7ajNqcmFHNiR3QUA7O3U/LnwkLkY0LmhXZH09R3pzbjB9LnBRfWVe'@;
put 'XTYrUygzekhLNittJCpdS3B3Z0sxemErQDZuWEU8bzhCYlpHQnsqaHJCeiN6IitldC9yWV59TFVbZyE+MFc+YCp1NGR8cmtoTTRvITg2cU8lcytNcmc4KH1wVnQrJWQyPkhsTV9zPEBmZm9Ka20sUlVMM2BKMjBZY3NpMHNFVVN8ey9tVXtLS2VEI2B3bT5BO3RQY0RnK1lhImhyRlhXRHd4VHZz'@;
put 'PitmP3xzVndQW0ZTc0hgQ3l1QkRvOlZ4UjhUZEYkSShtTyNbN1EmMzoxUmw3USJPe1k4L0padzxmK2RdKV4qd1pXeVZGV11UU0tKNzFSIjBjPUdHUH0rUjA2RVdTR2tDTnw8UUY4YzZxSnwkYHpadyxlTEs9T0l7PS9vSEkpaUkjJm8jY2xoOHQ4KGlHaHdlRlkjN0VBUiV7c0AhYmlJaSEmeGgq'@;
put 'YjE3cFMhcW8+XWtZfnJ4VChzfUJHeCZqIyMoeD9fIzlqd1JBcF1acnVAWHVPRj5sMnN3RXh6QTZDfkxjXT9dUyVgbjY3JlRdYyp6X2VCLCUwRF99UXM4RXVMXmY4KTRbWXhDWzR8eCplQyU8PD0lejJEVVNoZHs3NnB6VFJESmxyKWZufGBFYEp9eFF5OlIxd1lJRG5Ka0IqREh3fHg1SUs8Om9g'@;
put 'Si8ueGdzY09va0RPJE8qJEw0fTtmZkREQHlwZndFWDp6SHBQbCxmLHtmYTVgal1lUnM+dDFMTDRfd31xT2R+I0MpKWEzb3NGYyUreUVDM3g+PGhnO0hINmhZbzZNRkoxNnYqQCl3bnU3WiNTJHNbWW59V1g2eypNfkZQPyt7cVJQW2ZzdDs+ektmaGNlRTZNQEhQXUZdJD1JdlNxJTwsZGdVcmAx'@;
put 'Yls2WXhXKztDZy48KyYwRllyZWpsJT0oJHdDYUNgcHhpJUw1akBlJVpaKklEP3JzU214flhtamxVaCk0USt1Qk40V3I+SS42IzgzNFgwNl4lYEdFRnU2ZSovRHVxYXckKUtAb0dNfT07ZHdVZVNAaj8xeDQjcXJxQkk3ckR6KmhCLzd7bDNbXXpoXSs4MS51VGFfYy9CWjBYIkA7Tk1dLmhMaWQx'@;
put 'SEB8NCROKVtsQFYjJiE+S2h9UiNKfGFKPEA/LlF5Ljh6YGUvQVBZNCQkfH43cSk3TGFlSVdnVnh+K0FfeEspdy5ETXg2Zjc7OzlTJCp5YDFiIlpCMmtwYVg0Tzh5KFFrI2gxY1ZfTVtCO18jM3kwL1pNNXdicD9dI0svYj51cjZSNlJJL340OVghfXhhO202eXZGaF1SPiV4QWtjbUU3ISR5L1ZA'@;
put 'eDJbVWg/TzVIRXoxV1N7VWNjKzFTM0xgeEx8XiljP0FAKzQ4NF5mZThBam06T1prNyM8JTo4dUJEUj4+XXZ8bzoxPH1mMkxLIzZXe18saFh7QWVVdzhHS31BaGNnMU9HP0RZemo5V1Y5fmw7OCMvZXh8WXpEI3RobVA8WUgyOzNnO3Jsfl92PVE1XyFaYj51JjJISDtAZHtoPGZ9MDpEclhhRCp8'@;
put 'ZXEjWzh3Mj4yW1FVdXQmKVgjYHE4LmlgO1QqPSEpWlc+ZDZIO2R7VyNwTCV0UXdUYWozKWsxWShRJF1gTjloeHs/QVJ6YGtgbT5OU3Qhe0tWP1txaXZ0VltNP1Z8PE46Jl45OlcwdXhHXmkzQVEuRyltPHFvYT9BV2E0RFVkeWpZSnJaOExTRDxDOClyKnVkKzwka0BoRn5QZkQ7TDpPQ2xTaCR4'@;
put 'cCo6Y3RJW1RIVWd2dkJSKn4rdENTVEJDZGVzaWxnekhTaisoPWJ5Z3YkfG1fX01sZHMwIi9WWCRpU1ljN15yOzQiR1ksa3s5MTF9MUExW1EuQH0rUHZwcVZ5SX5qVWJhVXMwVUoiIVBKNUVrQz02fno1fT1NJFRqZ0Y7NzhuMEMiK3ZjfFlKIStVTCVXN3tqP24pUTRmVik/eHg1fV8vZy4/U0cp'@;
put 'MTshdVtIODdMYVJTOjdNbntnNkA/fmxiQ2d9N0MyaHZ7fDR7Snk/JCUkWktxJHxjQHJAW3olJUJRSCkpPWQ4aUh9V3UuaVs0IzFbXntgJEBJIVY2IyRMOEdTUSQ/RSlsNlFrKS9PSl47UnJEWmkraCMxJEB8QihdY1pyWCIraTpONTVkdmNBRTpAYytpTDk8MFpqflAhIyhtYCs9XnIsYlFUd2ov'@;
put 'LlFlTU9WJn5ARzZJdXBiQEwwTFhjZD5gUEpQejB8TCYkUnNzIzh2VDAhYWpvdU54JGBJclNAQmN8aFlzR0xjRVR2YjRuWXZxLzlydm8lJH1oUHNJTVgmUGtXfU1pOWlDIXhqQ1hqTGFJa11ldFsiQ00+MnhubCtuNn0hdkA5O3RiUjdJXmdgOiY1My8ofSFmNX5GKC9nLF0qS3lYViRLI2pTWHR4'@;
put 'UXtPPilBVDJdMXw0c2tRQmJJbkw7WCJxN0hidG9YdnkxUlckWnNMWWEkdnoiKk8uey98TDtkInksfjh0JFclfD0oOyVFVih6Omg9NjdXbHludkJgajRpb0M8PH4zKzYwI1BaNGB3S3Y1fS9XSVpqMnovKFBTSSJeRnZOX1ZrPjhWblQiR3xpKyxTVj9mbTpOa2tPYy40dCxgbyZpJjxnaCl+YjFX'@;
put 'QkcvKVRRajJmaywpMiJgZ19HdEIxRTxtKis2ZmxJeVl9NnQhV24yVWM/PGFpTXRhYk4zb29fNGY3WntvSiErOXt2bW5GWHU/SmUoUjQqcUIxQCY9aGclcnlDRDNMbVhwdXpZNCkjK3dKe34qXkd3N0xJTVtRQmlyYz4xLmchNn13Nyt7KEsyQmleP3dHTyg/IyxLKkpTNj5dcTdPZjhZcz5dNl5L'@;
put 'bjBbJCtYQkVCVyl5RFlfPWtmTF9zVTN2fk4kem53djVrNDNzcXlAdkJuaTYsJihAL3VIVzIiK0U+WGJuMyVdIzFmKWZHJXs3Mm5pRVI7L1tje1R3S1Y+ZUx5MEh6MkV+cUpRJG1yJE1WKkBRVGw2W3U6Tl90eH0haEdqUiE9JktPIXlDLHo4KnlNY1B2bW9TY2g6LGZ2ZlJdUC9EOzEyV2xMfEZa'@;
put 'c2Y/YUpDNHNAY1FoRVJtbihyQzAuYUJhR1AmeSpRLihRVSYrYF5iS1U/SWtrJSQlZnpqZl5xbis8WyI1NU5CTTUmSmw5c01qO1p6KmYoK0NHSDZYcDRyUkpKdTBXQSw6TzxAVldkYjhaY3EsTkdiU204KkNyVnV4QFJka05pRGJ4PV96PE0+RS4paFchK09DQ1skeTQmbipwS1lzZHxKYTBIR2BX'@;
put 'ITp9b2R4UFZaVX01NiIxNyMqMiwzX01vU1FCK1lOMnFlO18lcUNUdGg8fiZ1SSFAI3t4V048eHw9KUB+QHlnXSJ8UytzUWFJZDlENytaSks4Lm55fn5MbGVfI0kjOiF2TVAuez9PXU1McldSJnFFT2p4ckx2Q0RUUGtNLnxwM3svS259RWc/Z145USQjOUB6b3V9Y1VddER9fTt5eywwNXRKY3k9'@;
put 'b2g3WSkwO3BBZSE7Jl4jMG5SNzR9SjtnanMsVU5eNF10fEN1cGNRbWBZU0ozJSkxdzQuPk99ZHwhV08rYGh9eTFDRFJ2fHoiKWBadC4vM2hSYHA8MENqLFdRfkIyQXlAKjtpUXU/KixsaytnKVpLPEk+Xys0Z08xJXJHc3VRQEMhK0tQakRpVVNBbkdqP1QiaFU7YnxaREhQaTJdOTooYWd6ZFQs'@;
put 'VVohfDZpOGxAMEhkRUJxWCtYQHd1SlZ1TmZeank7Nj06aVhpWWMvLywzKUlLTz57Rkt0dEdxSDMoRGRlK3pVdEw8c2pPMkIjN2c7USgoNyxsRFtdI31kUFNOZGE7ejwoVW0kNCxgMTUqeFdOfUs1NSpeLkM9Nig2UHV9LHYvRlNTYndzaW5fUT5lNTo3Ik5qLDNCQ0BMQDphW11AfkBQUC9EW3Vl'@;
put 'cn1Xd2hgSWsyMn5WMHEiNTRaXyI3JVJdcjNERGgwTS47JnZzQHU8XVNCeSE4c3lbUnlKdUU7aDdaSUlHaT9oLDlfZ1FQPGo1dG00ZTJacGoqMlUqSC9wRmFUfmthKGFLISFKQyQuVkJGcT0jbFtxP3t7clMubV5pZDx7anl1JSZ+Nn5NUnpVMnVAIT5neCJqYUZ2PnVPUHxaWmNOeERPSEAqfiZT'@;
put 'ITVCcS97azBlJXlANWhAYGd4ISl6MiZvJC9eTWApNShqLCNMJFUhaj4oXlB4R0NZNGw8dSlyNlZNQE43OXhdP2UweEw3Vi5qNnE6JXQ8SEt9V0M7VzZvQDV9W3RJWVFZIyFmKSovJCk7L0ZpK1NqM2JLQHZsMFYhal0wQn5bTTJgPEt3Z1BqeEBBX0BrVHVfKVp1VFFZIWJ1d2ZCZC46U2FqbH5Q'@;
put 'RkU2T3U9JH0hcEpkL1k7UlpLdjtyczJkSDVSKUN7S1EwYH03anQmP3wvd1s5KV8rcHxSeVhzS2koST0zOE9jOTdiXjNMWllUdFovZl9bc2xXM29Be1pAT1hUM0dbe15mI3JFbD0zbyFXb29gcztfTF8uKn5IOnhydTl6R2xJbVo3XyNTY2c0UTBfM3EjTDxbdUVzWXBnUF4pPj5+RHlSP1A6aV89'@;
put 'RXJ5aXlVPT9uVUNWXXEiaGtQXmtUdiJ6NXU+bjZZanBhTiJQemBxaCVIQldRQ3JfeDZgPE15RUFwOGkwKjBRfjtoWWYrQCNgTClnamdjNixnbiQ0PlYoO1k4MUQ6KiNQTjY4WXFvLHkld1lROTB3ZShUR19DIk5eOVJIQnJMYzwzSVR4XXU4XjpGTHVLOSokTyEoNXpRZGlpPmxzdHFkLG1qan1q'@;
put 'XSlwUDN5VFZzODM5LGt8WjAiVygvcDdOeyk/XVRjMjQmbFhbPUI2K1llIXdrNGk0fF80Q2lDdS5JZFJzVHVQL11VRF1xPipbImlXVX09e3k8ST9rN0FvUmJuNHYjbSs1ZUt2cyo/fD1SeTVqPnl3ZDYhTF44bkN4QTxXYG1oUHVpTFRYPGt3TGYxKC5aaVVxfTB+cFRpZStgeiNsUlNTXm9RW1FY'@;
put 'Wkl2K0Z2QFEicGgsZkYsVWZZIUd9R3coUS41UGtSZnNyIVQuWysvSCVsLz89aCspW0sweCpZKEY3cTIzc3ooKzFNKHg4Ki54cUxFajczRH46Wi4hPjllZEFQIWssPHkqez1HcihPamhhTDtzXTt4bnExIzA2LDR3SFVybGlkdXArU09zb3coK3JMIU4sZXFWb05mXXUwfVVvZTtELEpqTE46NTVi'@;
put 'byVzbipxfElBM28uY2hNRFB1VV5rMng4YkEwSWhgaV1nR1pbOlV7c19yNjJDd2Y/NlB5fD1dVFVndUxIOmFNbj1sR1M9JWBiJH1RQ3VmRjVSJCh1cSxbNlkiUF5PbjNWJHN4N1VFYmlIdEFFZnt4YTMyZUhIM2dIQGthYzNKKiwoNnl7fGJAIT5OUylrcSk/RSVMeUQyWmY/KUcjRlEuJkpjXUJM'@;
put 'K3BTMn5sc2ppWjRfUFh9QH46Ukk/cntwZ3IvSlRUNEd5JElWSjxSMTlvQSk/QmI4WHEzc2c1SHFUT2FlVGBEdFFATzpfUVcjRFA/JXpNRjFzKWBjdzRPaCgsfUR0YHFSQVU9YnZWfjNVVTQ8R2kuQF42UTgiZHZYUyVQN1dlVF1fMW5LUiJYVnArciFbXn0rUiU2bEdrJFdTP0kyfG1NOl1Pckha'@;
put 'PUwrWld5ZCN4PmgqdEVrc0lPLz48VmA+Q29gV1lXbF1UTSZKJnF7Y0VTQD9WMGh0UnQrRlVxYE4jfTY1ejp2MlsyUWVnbCJRMD4lUXxWaT1AOHFYYTFDOnZJSX09VX59d1lkVlVmR2FsOzMuRzRgTDxTeVY1XiQqT3FTX3Q8OHhAJSl+QDpFVkglUnUxZVZJayt4e1RHQzdFNl5aSFVhWT1DWGx3'@;
put 'STd8OzFZfDsiV14lbCJCRUZ+YiNweCM4eDs9cFA8V0RsQU40WSssLmZLPVh+MD5aU0lbJC9MWk5oeHtAO2tfTTBoXWUsdFtYYGkjP25aTktqd004Izp1TjRMW1AuRzcpOE9YISl3LEh3Ijl7O2FTXkEqOmBCXWdlUnIvT0VeTS5OfFJEfCklSjRlWHtDPSoyaHgzNFFGUWBFVV9WJk14aWgpUzdP'@;
put 'ek4+Yk1zV09qcVllPFpCTHRiMmFdU2I1ckdKdnd5Wk9HUF03JlE4fllUJGw9K3t+K2IuVyZaZUkmPXsvITR8V082M08zcjY2aSlyaTZMWjRxN2QmfVlZVHo7dF8iMF8mQEpUNkxoclU1QktaQU5JbVpmST9WaVM1azYlUi92STElM2paRDg3VmBrQ045P19SZlk5YTIlfWgsI087V2c1UmVCakxh'@;
put 'cUM0UXs/fFZYTCVfZHg1b19WR018R0d1Iy81SmJRSi9uTSl2IW50MzxCLm0heCx8IUJlRFp2KjREMzx1Zil5eS9xMkUmbm95KHJaVXFhSlpUSVVacE5jfGghLF8hYig0M15EbDtYMnlQV15nanJvTzZLLCskZ2crZFZmJSNFc2xYX2g/O3NEXW1ecixpQ05TNFIlJmwhTUUmJX57OWRBd252UWIu'@;
put 'Kk5EM2hiWDc8VktjbGRTZUM7ZFIsIl9CVWY7fGMkNXBOVWJAR0hganpbZTwybjBdLihIeFZBTDt5MltbXkgvX0FhWk8/SXNfdFc1Q3drc0JnMj0sKEEhT146TDtCLnlIPDBAOmloKmNfLkN0JSFTV3huYHVjXUwoU0NXUVo+YTkhQyQ/dCtXb21pTlI+PV9oZkl0OyVROjdka3dEKjY/T0Q9WU9h'@;
put 'aj57IihIX1htMkhZR3U2T3gyQT0oZG9rYmJRSVlufmxWcTdlMTdHdW1QWyx3dGh5VWEiaWZUZSVVXSl9a1hGfllwR0NOUWxgdVJAV2NDTnY/I2lDTk40ImdxVEZYPHpqQ0R0cSguQVRqQiFNendPI1h4eWhQYyIuZTVQQ1B9czJ6MXVPZWZTQm5ZRkQmLysqUkk1WWFxUksiQWNDOnBpeVcxKUdZ'@;
put 'Ni49LEdYOVJqaURAdF1WV1UsWlF4IU0vRXFULDFJIV4vfHgpWSpRZX02dl8mNDhxZmJJeiQuY2JuNVhiaVNDSF5QXlZdRFI+Z2ZMSlV1NDIwZDNhKVRFPkc8MnheQyJvWH0/UXEqZDVzO0RJUTRDWz84I11hPSJPYEslfCYsYTt8MWR9bytkVEBLWCk9aDokMXEyN0Jtd1tMWEY7UCU5Ky4+SDF4'@;
put 'JVFeRSshNVJ6S3F7RzZ5TDFVYmhQWmZ4YDl4OEtNP2E5PU5qMjg/UDY0PmViSk9OamdZci9yUT82KDgjMko6Il05d35AX3NPbnQsZ09ke2QiVz4sM3tNREBCWTgrLnEiR2EocnFCallISzt9bjV6Ji80OmhUPFlkQkJhTWMlRSxkUmJCKW8vMEdLL1Z6OXY5dk5sJSszPnUzT3pjYmlobmEzc2Iy'@;
put 'bnxmRXs5JlA5cjVhUCw4Xzd5WUopYmczWVtXcHVoQ2hbbm8+Z3RWPk8oO2MuQmA/aUY+WiQheTg/WTEmYT8kd2A1LiE6elMhYT5INnBjfk1KOl03ZVFhPE9iTVp+KV5IXjE4ciQiJUpVJnpgRzBRcjJKNVl2ZmgzJWpEPl5dYVNsIyN8QztQYjJvJnY+RnRSaSNIV2R2QiI8Izhmb2lQdFB6YD81'@;
put 'OE9lT31wUmxlLEEpc0tLckx6ciglVy4uKnQrOlEua0lpOVpuQ0IhbDBodnAlXSp8YGc0PCExKj9xTWBeaDZYMHs4fHFVVDtpbHtES3dTeX1Ccjh0d11TKj12USpSR1FHT2QrVjhIMVp9XVdIO0hndkQjSDxhQC9IJXhMak9ENDcmNm8pOUxjKiI9SkMxSmFOdElSOl5kYE5PZTpLbmtXcW5VRVRM'@;
put 'NWpuLm9McVo7WDpPLzk5I0kuRH5jImBtfGY1VHpDbGcxLkErUnR5eXRxUyYqM2hMUUN7JGs0W0N9VXRTQnVAR3NpQWIpRCkwOWxYWUdbTjQjVWwjSGZUdWRbTVEkbkh9WHo1bDlZMCshOztVJHM7TWJCR2UkVTZ+RlN1az9KMjkhI1sseDtoImBSPy9mUk1uK1JIeWkocWYrN3Z4NFFqVk96aj1M'@;
put 'TX5CUzpdZTlmWEphMllafis9KmtNZmJAVkl7eURndy5Mdi9aNEVUSmZ7eER7VzR2QFhyREZha11AfEtUVnsoWjxJOk0+MVhLXipbYWEhJSkrRSFQdnJ2TDFBJCRdVyNTVG0wZ1FtIlcibDlqXzpVU3x9Xj9gISlaVjMyYUlxPmJmd3pdXzVVZ2chZyMvcj1geyZOMVh3b2t6XSp2LnFOSzEhKFRB'@;
put 'a0lDWl5nMTFxODwlZyJwbD19O1AuXVBLKVtJSTldM3ghQUNVXW1mPyRlSioqU0tWR1Moe09PJlU9Yl1AfVpUPGY9WXhFQHgvOC83YE18MU8kVVo6JHEmQGJpRkxefWoqS2d8U3tkVkF6OGZHTn1NNUJSZW1qQ2hYIzckQkNaa3w5US5PZ2AkQSpALiFsSjdldXMrVjNhdjwoL0BDZSMkS0JdJUJx'@;
put 'SyMyJnlaI1pmR0F3M2J7JTJEa3l9UEhOeHUmcCpKTWc3JEFlKE9zR1UxOFRLRmhwXihrVTp3bGNZVGcjQDNLfXN9ITF8YCx8dlFsKCYqaS56X1MyZ3ZVIjNbJWhJLDk9Y2BXY31xQypQX05zVTtQQHdxYVVtbExzdl4mJT1eMEwqJk9paEkkV3lYPGAjQ1tkRn4yazc+VWVDbjFNKVY9IS4vWjBz'@;
put 'LDdRRkE2enopQDpbbT5UR15BZEdtK0VlcGRbKHhsQis3L3dRS2o6XU59JmQsfkVabHN8cWMvVllBM0xqRFBQN21nSXcuUmRFS3VxPXJPOk94WmIyaUJJXSU5OTd3dDowLjRmWmBFdi9rUF9sTHYwYDwwXzFLYT0vb2NsZCpeTHJPcTMsazJ7Iz1bXWVMRTNwO3FJOjI/XjQ4PXcpaz04el99UmM+'@;
put 'W3dvS0p9VilrQ1QvNEk7PDhSSVJtNkhzdTRnPVlqaURxWWdJRCNTWDI6ZkpaTGNhQ29lc3tDQWlHbC9dUm0mU2twIkx8W0FsMjY2UWhiITxda296Rz8uSDdCdm8sOnIkMm5TW0pONV1mRTpEIWpDPGN1ZHhCRmpjTlFyfFohYHMhTnxAYTd6OSkvNHpnN3U/U3NFWV1pMyJNeStoNjApPilKXyF6'@;
put 'ZXhWbmQ/WXhRU3lxJFN1Kz1eXVhSUGUkayxPdml5cz09WS9VOl9Wb2pQLk4uK15dVTpHIWIhJTFzaXxwQVR2UiN9OSYpNH5dRTE5UitoV1M+ZmdJJCw5NTt1flVIeXhCTzFoKFo1OzNNNlcmX2spdUZpOGtFT1pKbksyc1AzZS9fY3IkYVAkWXgyelczaTVuI2pqYHJReyQydGpBfmBJNzVKcTwz'@;
put 'bjdXb3I2WXZWZSxiY2FSfDpUXTZJejx4JUU0fE0ya3NjN35yUVRIOSFfT0UyPC5kSCZXUng7PndfMH5MKlU+K086KX1hVy5RSTl3Pzp3bGVnPFhRTWRCU3BYaFBZQ2syc0x7a28wNG8ob3FfLi5bUG1aTGElPDQ/bCM0QDBMbF1kKVR8cWdEXmUpK0RDPU9IdGxja35RVzxyTWM6aXd4UlNiPnxy'@;
put 'Zz02OUJoWUA8XWF6bWBCPngwZ0krWlpXR2FQSyRMbDNXRiY/Y2xBL1QkdSxTMXQqc0Q9Wz83RS9XLl1+QlZbWzJSUUcldDZCenxDTjExWz9aZF5Hel5iJEN3cCVHT3h6NDt0eWUkc21ZQ35Qb0ppI0dSbiJrWFBWVGpUenA9U2lTKVErRUpzI00iMSlbVGRSdSRnJDJWK2RxQHJvZTUjXyZpejEl'@;
put 'M1BKelM5eH5zckdsIz89OihaWE80dENjQUUrZjJCbDVIbG5kLjxxI2w5cXkrUCtjOVg9a3cxdDYpfGxRQlpvQmZfMiY3dGsrSyZbO2BqSTJJWk5wV0dFMllibXBqWEpOMF5eW01Vd1pIQzFPUkV1SDddZnglJTcse0hLYUtNSDBuRyZXKlMwSnpPdXg+Klg0QE8lSl0rQ30kUndrcD5sMzRFdVNI'@;
put 'UHJISFR2X29tZFF4cT85Z1NkWDN+SzUubyNYOXJjKEZTZm5oTk8oSlA9b2BIRTh5Um9qXiRzP3Rye3VTd2s/UElRbik2MD1PO1MoQlFBJHtbUG48Z0txOW1KKS88SSwxY14yN0JsZl4lZFM6Pm9DNGZuckl8Y35NWlRkYGEsZy5Je3JXNnM1SHNTYkFvdDs2PHA3cSpUJDZjak8+TTwibDhOU0gq'@;
put 'VnNUYFVdazdfbXFjV1EsTzt9LCY3UGNSSitmMEA5Pk1jdHRsUWclancoPCR5QSZbNnZ3UkQpI3FuNDV4bnM8UmhbVVZLPExza3FydWo2aFMqOFFgcy89WWU7ImVMcUN1K0NUITRmJW9McigmLytsO0hiX3ZZXnptYmtFMTooXklAXmojUHIhTyk/aitWN0BAP2A8ezdLdmUjeyhOWW5vLD5vKSxE'@;
put 'UChMSlpgIWN6fV1JblUqXkxPflJtfVVCNWRhWV5AbkB+IWxbRGNyRFRlWyVtbHRhPmhRJHZnMyFlSzpnfWZyPll8bVtoTUZvfVRFaE1pdC4laEJSVD1MNSlqYno8K3VKIX5RPXYqZ3BRd2tKXXhtKEJJVyp0KCErb3NgcjReJDMjYX5dY0Y9VSllTCxeb2xwXXVEQ3o+ZFBmb1R5YkBAKVhRLlFR'@;
put 'Y0wsL0phT20iJiQoU3dFb2srJXh9WjhINjUkYFE6IiV+SlR6bjVsZ3FmSz9IcDQ5XXc7OzcpJmNrOFptPXBxYDAxKnlIWjsoJmg6WWZrQm52MWpxXS59T0pkYyxrLm9lOltaI29kVDJ2K2tGfi4sSjFeO08qTz0/Tm4yUW17Vylfc29fdyZ3PmtCWjQmSlFNbHQsOzZEQiJ2QjFZOTosb29yKUBN'@;
put 'WkZZOGFlJWNseixFcDAxYmRBPnNjMHNLWy91d1N0a1ZBSkkpXSgpdUVRWDlLWTh7UUZNITc3em8qQW58JXg2ZTJLeSZ3SWAyZiRxYWFhXWxCVjFVLiE9fDFKZzJ3RTk5c1lVd00sPnNKVCg+I3dfOyFBZDlQdkIucTYuPzUsR2VQbzBwXzpXNzlMMmQyNkVRJmglOyU6R1dhQC46Ry4lZ3tAU1s+'@;
put 'PjVfd3RRcDdEfG0uZS5hXS5+TWQzLD9HfHoxTyRJP0A2VVhEQDo7M0FPWTpQNzFbejkha2VnQ1ZAISl6VXA9S3xeRzx+QnNqQGEwMmtyej94R3tpcj17eWZNcEhVM1pQci9mJDUjNkMueiVHfllCKStdVHBjK2pDZG5WakMuVV4iITh8Y2RpLyNdXkhoPH5LNGJ0VFFeLkBHWSk0JmhOWkc1eVhV'@;
put 'QjJ6cGhjSnlJLjB0K3wrPV5ofFtQN2dNNExaWW82SXI3JGZfJXZsdzt1YSolXl5+RVJENklzJlNYM2l9UWgwcl8pOUhURE5rYGtDKXdse1BUWHUlNCV+fTJxZGpFP1gla1UxWGZgYmV6YFpmUnNIKHczNmlFMWJxRisuQWZ5Xk9HKzJUJks8azM5WUJiV0FsPnhfb1J3P0p6P31MVHV4NyNqMkZt'@;
put 'aElWU31MV1B5LiZgMTNId0dxSXV4QlIqMHU4a1ZkYG1la2s1JkskcEVJcnB0O0s6Yzo+a1YrXStrbD1DU2JGYl14b087ZSJMMmdDOHErKCh9TzpEanwyTkEmKGRXS11OZHJ+V2ksZlgiSlhidVFVLnkxPC8vLFlpRzVUUC53KmNhS3FOXVV+UGcqSmw3Zz9Td2N8YkFMZlg6XkZVKWBKak1vRSoz'@;
put 'K3BsYDRhV3RsL1JMXkB0ekdZPWE3b3QrOSN5OFE8RmBOKHA/SikrJVF1LlA6KEk4cVVrd1V+T1V0aHJeYVJhYzE5bGMyPGYjP3hnfT4zQDxxLnw1OlZbcGBqSCwyezlkKX0jRyFGUT5yNEhWVX0xMEtoWTxAe3ZPQDEqOU5+fEtyJkVvNTp8Q2xPVyNDWHJgdix1c1ddTF5CTkokfS5SczY1N1RW'@;
put 'dUNSOzEwZFlXQCNSY0w/KSFQUUg2N3YvNj1qQy5GJHE4bzl4RU1mO3J0Ult9RnhtKkxERnFASFs3JXBTOCIvOkt2MCJeT1hfZUhdRjAubSJvUCpIPXBXI0pBYkJXR2tMR3BuJVo1eGk0Ll1sS3d1VCEiaklNNzBLM21AbSQpLG00KS5JW2FDV1tHJnJbc2FdeV9Bb2p6R09INlY+YUU5cyJMJmlB'@;
put 'WH5ddnJBIkNfMXs7MDkkSDJUbXBSQm1rWyFJeTJiQkExL0JvPUliTV03b05FIVdffWA3MXVkdH0ke0JeWSZEX293TlNaK3opNyFZe11sKjt2MEpRMjAvLnVCUj5qUDIiTz90SEtdbSo5Wj93T3lQRHUra3JzLHxrZyJoRV57UFpCPCo/N1hLeCtoUm16Rl03ezp0ayxxTEt1akQrRWc8WnhVOyFn'@;
put 'bnNSSVFeTzZQW1RHTnhKY2A4az5GeiwqWSI+QipweCpOJiQyT2FFP2FaJD9uTnouNDZZfGouSElUak07VUAjeF8sdE1DPTFuLzw5RjxWcElxMGVnPiZRP186bWg4VnA2eGg9bmlNKTQ8azFlUzFxc1I5Ym0iUHBpckp9bGM/Nn57SHh6M19sYUdqeH5QfUJ3ZSpfZ1l6NSZXPz1dOyt4enZKKm1o'@;
put 'eUFvUSpgYSorcU8/U2BSPzIkV1VCPDBAUWhbTVZaODdMLl08RFEySXU2OnYhJUdUdCI3elY1fVNoXX0oTyw6aGdnQVNeKC8udXRYKzVeamU+MENgeDBKKWojQ143S20kbjdtZjd3W2RPTnshU0FZayZodXFSNFliYF90TXguXT1DRVVyYlY3QEA6Jj9WRSlublk2Jipzaylja3lvc3hjIXxaWltS'@;
put 'Ojc7ZV1hfHZjVSUuUC8/fWpDaXJWQ2c1OkwjbmdHK19aU31NPmFnVSZ3ajVfQ111VzMwJDdYbyFfVFU5NjdIKVg4O3tDZFlgODQwem1+MXxGSiNdcGc6MUwweTcxPkYyYnRqdnZSUS87bTRKeVApZCppVldocjAmZSNEfU56YX5Paj1gQGd4YzNMSmVpTnhiWzBNP3s7WntxKUp4bTN9YEFmfFJm'@;
put 'LiV6OFhZUEZeNl48TSF5RkhWVip3MypNPmRaJWNYeHp7RENlJVJLUnZna2E0bCpRR1NYZStxaVphKCguQy9sXnBKOnB0ek5sOjxpRGNgW2IyTkJiYzhYaU8jeUY3PHdjWGsubU1tIXpJfUk0Z28rMzA0eGU3WWwjR0crRTxIIjJGO0xgZjNaXXpgMyRRSzBSYjBnbjEiRUZNQ19XRHAlTGluQ3VA'@;
put 'W3JRM3kpVEN0Z31WejMpNj4xVUZhMWhEN3k5ZkFwOWxyTXlsYCNuRW4sPFpmSyRjREhSVi97S2IpR09qc1hvQllPXlE4ayhrI15IZUk1ei47SVRjYXUraH17Ui59Vz1sSlp3XUFvJVh2Q0p0YVd3I002YVhEZWllWz5TWTE/WjUxc1NYIyxxT0N6TUgiYXZ6SCoxRDJwUkp7TlRgRG5iNixtTS8i'@;
put 'U0Z1e18mKyhoUHZJR3M5TCsidDRhPDdLdEJLeHBNTXUwfXVvNzpqWUVPLE9LSisxRF9SZTslTHpMNlVsazZtYj9RWjMzJXcyeXJlPD4wI2s6K3dZTlpvKjlBSzRkU2IodS5hU0pCZEtMKVRvcyhJYFh5R21gRG4uXnpdPTY/Pjp+eWRiRkBxfkdbYFMsYiJ7c0piSXkmJnJzWmBFd2cmVWlhTmY9'@;
put 'ej80ZFdKQkBMXW1HYGVXQnkibTokQUVuZVY3Jj14REJFImhxRCoxbk5BbXRyR1JWW2luNzpRfDo4ckgsX25ZYkdfY0dlWChgJEp6ZF1JNzw2LztERWI3WDJ3azQsV3hkYzdbWHJEMHhAMD08TiFhPE8pX242SlRFMWtLRzBMeylRUGltXldEYjNAYzgwbD8uVltBZ2s6MEU/Rn5deUlsPH5gazJ+'@;
put 'dCwzYFhMOkpzRTZjXWA1aFB5WUtNaGp6OnlhKnx7Kk9FeENWbTZXbHAjSHFvbG9aeGczQC9vUUdAbjdpYlVyXVJZYmwiaWV+bSxAPVUiPDt9e0ImaUhJMV41WFBfJj4pTEAwU34xJDhLNCFGNkpoZSxfUiMqWVQ2dlspK19fKXlGR15AfStyJUJXaixdfSM5TnQ0OCMkQDF6aiQ0OUVMQlFaY1o6'@;
put 'QlIufTV7PUREaWQoaH01ZFI7aSJXKW89ZksyV2ldcFJAaGM3UWpXe0RhW0g8WUhoNVEsZEdJZFQ+MkQxX0QuKU9BP1BDNUdyalMmZVVkd218YXNbQD5GLildQ0V0eCVaOiQzQXZ2MFVhXVFiKVpLbFFiYH5YNng1cSEqOUY5ezZNNihTXnx+bU87PDpYPXQkNXVgQFg9dCR+OWQkMiFbaDVtVDVK'@;
put 'dHI2WUJ8PVglMzo2Xlg9ezFbPHl3QjhZUEEsL3A1bWptSXB6bExRRFcyTnN0QGRTUX4+cjAxSnlQMzo5WztGQEMxdT1aSGp9WV8+Mm1IdmZFUUFXOzlbPEJ5SWA6MU9yfHgiUihKT1BMRndKaWF9M0VKNDRQXSk4XjEyPH1rcnEobFRQUTdedzEzfmJuNzxHQG89I301bFNMX0taIyksZiRpfClw'@;
put 'Vyg4ckYvJSMmbiRfdnc+c3JuRi99NjltJF8lImcob25GL0hOODVsfSkqKH5iVE9xcS54S25jd0o/OVZfUiJnfEFbUEw3SjwyfF1RPSF9IVg2PkJUZ18vVjg1I19yRXNzdSFzKDN+eypdc3xpZWdCPU9UaXxQayF+USEyeXUpYCE5cWJIOnYkfSg4cChbXy9DPn0pTEYoOH1he19fX2RseWR0M09G'@;
put 'LzBDUldVQ3xveWQwOCRRQlJDI1B2QHt8fSRMVjNwPXYobGVLRCRCJEc0XjxhSyVjWjZLdnVQS3hETjI1eDNILkoxPDVZUTMxfn1CPj9lU1VYUFdqQHJdLih+Vz8hbHEoPHJ0bUVkfGBNTHk+bCYzekF7S3J3Tyl7VGtpVGNGLz0xZiUrR19rfjAzcFJEd0U3fWRNNF9LclJnPkhheFcycEhqKk80'@;
put 'bkRZTGhNR0h2ZCJ2ZygwWnFKNG4uVW9RTTwse3dKfF9HbjtCOX0rSzw/I1FXY0FESEwjeVcuTzRZcHgrNj8rdVs6NGhnX3ZpZllTQTZtdDBYc3B2XUxsI3hETjJ2WXloSVVUVG0vQXlYc191Z1Q5I1NjRi8wWSJIR1EyQjFFMmQueEBJJFFbdGU0STRPeFJefGtiImNUZ21nWSl1OU1UP3dgJEk8'@;
put 'QklyPFA+S0BZMWQuXnoqT09DTyJvI3NTeis4MENpXVsqQFg8VnNFSHdHSEJIJkYjcyNjOnlJNmFDTmA3fXZGYUJAbmciR0hCSF5DI3NSR2BTaCtnWj5xfkx3bSFBPShAUUdYVD9HemNfMTV7ZWM/SWEoI1YrOGkwK2FDY3M4K2g1OyoiZCY/NGVRbXB5QVlTaHY/fmhIKU5EUnVJIVVOfTwhR151'@;
put 'ZXNORDw/dF5Lb3xAb3c8YHc7RktMWW89fFdQV0kqQHQhKE12Y1JeZEUjb1t0Wi5ZJj0hPkcqPCJHTGpOQShoW21CMlJVSHR1ZXNKRD0/dVQpXW5LanJhRE03K3gvYW9PckcqNEk0WlhyfFZ5cDp1JiVOY1UxezE0dkQ+VmFBRDc4UCV9TCtjM1ZUbmgmSSIpW1UmWGd5MkpUfFZNb3g5Ij5heC5O'@;
put 'bS48eTVAVkkldlRAY3J5ejZ7V2dtbD9DOEJMdU0uMFR8aEp0N05bUV1SKlImZj5zNEk0dz9xfFZ5aW9xeG14UXVpXV8uUkk+UDIwI1laSWdNfDF1b212ZWdJaGpDLHVZKnRpZ191Ykg2cCFZaV9FXjRIUWNSQmxMZnBYUFdPWnJ8MXlUVDRqUUBdPVVmVHl7WHBxWUcmNEk0JWAofWFaTXZHeHln'@;
put 'TkpJLmg/UnhRL3oiUk94WyYlZyhtN2xAOns5dDBOaT8sN1twUDp2L050UWtKX2wkKVloNj95aWNGL1pHR317ZXhMO1l3NDVzM1U5KS5KSUgsYHFzQkBVQ1sveHdfX1BzI0sqMXFYQSFtZUhkST8qazkvKEoraCFyJEdOT0Q3MExbZ0lCeDc7ZjdTZC8wMm8hLnc4MXhEWWw1YW83PlYsNHcrRTx5'@;
put 'b1txTndJSHc6cXNnKEhVJngoWn4iN2Y/a0t3MEtXWWNjRWM/JWcoO0k7VSk0O3VgTFEkY0g1eilGQXZlcyZ3cnxhekghRE5bZFtjbEQqdTdGOkxhY0VjWkQjc15jdikwY3t0Il5bdFBeX25wQjYye3Vlc3NdcXxjPXxETXRuTklYYSYzI2tOaHE5bHdvQWAzJHhHJnlLVXpETUd9XmgoVSVAPkYq'@;
put 'IT5NZEl0IXI0X1hoMmY+aXFHRVRbOTdvUypsPmwsbkhCUD5FQ0dCdSxlTG5pZFNpYms0KkkxR0M4Tk9jIis1Sis8Lyh9cEdBMmYuemcoSlVLQm42LHpyVkM0K2xWTn4qMWRTaVNQV1IhJHI3RWpFdCM/Vng9OlRpKXZvQ3RwSGRTKkkxRSRGPGJhNEc9MiNFMmZHWk1XJU1ZWW5jZVNaTW1wQXVd'@;
put 'Klgse3FhTlRNcDs/VEs0ezFIJUw8e0lHNkN0IjVdKyE+KGJ5WF5feUJ3WkQxXStqKVFDS3s0ZFNpdE9XUjlqRn5tMCFYe3tZTTZ0e3paNz1FIl1HNjk0aFBYNmpKVG9IOjErSmRpWjY2O0ZpWnMpOGNVQ2FiZCw7UkZ7PjJiWShIRzx7Wl0pdHI9cEZ0VCI3OzJSVGYsTDBMXykhPjFsY3wlTj9C'@;
put 'PUdOKilSaiY0KVVhOn1xOExpSUxbKV82ZyklMUFRaWNAeFhSM1BsWkxNLkRnamp3aCtkRXFhUmwzfDs2RUVraSNHIy9adCRwUTVrKWhYcFRRcSJuWG8iVUA/VVhrOlI9KVplT352eUd6bF0mbWlOTjdYckpOKXVXbkxPTz1OM3wiOTFTPmg4d2whSSVbMG52YUF8REVeNE05KkRfYX1+THx6NCh1'@;
put 'KjFTXiZyKltgOkJpYyQuRE0pfXU5d3lsal1oYERySWcxbXNqUVM/V3VDdEtwXSshPmQma3gjRHlPfTVfSXVzY2MoZjhZLyQyJF8yZXkzT3dPd0pAb0xvVFBLIU55N1QoZSE6OitsSGBUbEVnbHV7W2kpWHNnaCRWWk43MkkkT3ViNXU5NTo+PHlEbCNveT8lZzc0aGZ7b0JkP2ZwWCpVSF17KCo7'@;
put 'fHI/Slt5VVU0amBxV3U3eTRkdWlzVkE4OGIyLzVxPiRmN3tld0w8P3tiS2dYV0RlQmcmNkgxNHFDa0ArR3h7PTZuIndFQU8sSHpxK1pCX2MsTShYOFlFZmY7e0ZCQT96MUNgYHs2InV2cEU6YHU8XW5aKjN4XjdibFJyVnJUXmhgSlZOYFpzQUxxKSJUZDl8flhaREg8WHIuNHNFQUBASTNJcTJ3'@;
put 'd0BDRV5+NSlCam1zRmwhPiNWdlZWZSZzRiFpMColKGJFVlh1bEFPPmJPS2p5fTlYUjlUJCNEXihGKS89aDYxZztDKD43Wk9vdXZwQF0uOXxXdXw9RXIveSIuOFFPKUVoaUB4P0Z2Ujx4OzNJTntiSzNWQnNncmJldGtsMkBtK3VhQEtuKmV5PT93SVtTWzFvSVlBZFk7MUw8IV1CZjdERV43OyU6'@;
put 'IzkoYm0yeDdpdX0rYDJLKSwuYEZddCohQlFJUHd4L3J6UE1kMkswR0NnWjlqUmROZmNUdkVZfGR8a0xUdkQlT1koIT4sOn5QZkczYn1eRnZeSUxTX0E7aGM2Qk8vMUVsP24uMGdNVEYoKDlFe1duI1ZCNmlRaEBXV1ddez9lflpXU2IpcCRdKTEzTjZfMyNtVnMjdlllTDBgbUIlfFhNdGA/JXRd'@;
put 'e2U1OSNHNUdHbm0+R315Y1VrUVFeVUpTT2k0U2F8KHRZbVpFWnI/XW5QfnVhJXk5eE90dnBeL0tmc0h1dFJ6ZHUyTjpuWWpQbylnP3g5bW9eKzg0azVKXTRbYHZiSnhgPzpXYEZ6KT1JOEU1fD9COUA+Jn53bUFMS2U1V1RKejw3RylzfDJ8IURjRWJWOE1TaSFMOFRMdTZ5JXNIW3NUJX55Rmh0'@;
put 'SEIwNGozT15qfno1N0hmdGBUaVpZWlUsbHVyWDhuaFgqVVB3cnxWeXMwT1NrYDFmVmNLQkc8IU5dKm00ajM7TSl9S1pTQFhGNkBEMTFxd20kTHlKLjQyaHNYbmJKKkZtOVEjY3JqKTs4WSxHfWNCU1R2Xn5yYE80ZnxUeHd6QDk8dHdoTk87KXdoNyZycCw7K0RXfSldKzlaaEtQW117PyF1fjtH'@;
put 'Wns/WnxWNlgpIX5zcDtANUNZfUc3VnEpYitmekZxYGRPekZGXzU0PX4zYTEvWkNKYEguIShuMXE0aW5pSV58b05bcEZiZFJfQmB6aHduaEh5aDZwXy5WPn52eWBlbDhCXmdNIl9mMEUvOiNHOF99KmBiLm9hRk5bfH5tSTkyQXBGWSRSdiIvNE98fUpuVFsmUk1jfFZWQ0o4OyEuKFRVfnw9Tjx6'@;
put 'N3tXRUNPUEpvVix0fD1FdTV9LjMqbytQJTNGKWNzIW06Q3wjbDBWN30uWCFdOmchLH1lQkQ0UElkPGkhLH1nW3wzfjYxXlM8a35kPX4uImNxYDtULH0xQEc0JngmX3h0NShtYl5LaiUyTWNwfD14S3R9Yl5sVjM8OnNRM0BxKFk8cHw9LyZtX1UjVFdQJFNMSjBSYF1HSC5rRHJlNzZZKHpMalU7'@;
put 'bU5rKzVAVkJ1SW1JOVRCLGJqXmY4PmN3SGZHal88MDMuSmJ4ZmhaJWhoQ3AmRjR0JGNhSi98QD8ualNtOzE/MU9gdGMxOHBESHJlWnE2aE1odStSV0hRSyRVRjRdRmV5a1FsaVZ6X1lXRkJ0fVBlJTF8N0pSbyg9Q2lVcFcrajJqbHNUbHVbJSloKm5kbUBdM0xXVWhiSWA2OitsT3BQfS5rY3A4'@;
put 'dyFeM2hNdmtaQF9WZCs4PllhMVdYd3VrWF1AZjJgP0BoW1hfKGJ5PEN+RkdofGAqKW1JOVdBRUVRPGxOI2c/eU5jJGY7fUJqQS83Nj5oUGwzfUJZSC9UfXYyNi9xQHlIelsvd2NrJWY7fWIjdTw5ZXw6fDdramlfazxia001OCExekZjbVRwJnhFXjk1MHB+K1Z1W2RVdlRkYSZzM25Zemc5REZ4'@;
put 'ZGApZShHWStvV2cwVyFven45YH4uKmlwJFEzXX48VypgKlY5UjMub1dxZ01BfXJQMTNkNmpLN29WdigvNi9ZeTwydCNoZ1ZkbT9XfD0mRXdzR290az0ka1YoRXdzMWN6JH4mYXpXOCI3OzkmVDVmUjNII3Y/QTQidlIkTWR2XXlIUiJEKnBVcD82Nz8hX0RBU0JIWjRzfi97RCRgUiNzNmhpVTVg'@;
put 'OyxgUlJXOz9mRFRXXjg6NzVVJmBSeURzTkQuamdwbltMTTN9Y0FZPS5dPC5WZXR8cEovMjtVJmA8aH1vOWdNfTJdX2dCOD8+eEtXfWFtUzd6Mm50Wl1afFpnR2l4ZT8iU3xKfCZgTm0pOG50ODVQLEZXP1khZDdlRy9PTWg8WFBxV2xFdVtYVXleNUh0KDYkYXYmVG9bZHw5V1NmdGxlVjNMWm1n'@;
put 'LFslfTN2WnQwcXw3KEArKz4xK3g6THxRO1pMfE9KaWpffjEzLkh4ISFpdSZoQyNWPi8sUGdTKXpbPTo/Lih6QTJmQFFkIn06bWB0cEpkPzYjdlJCL1ksKCNLJGh+Tlh7M2dwUW1lSWx8Q0RQNHBLeV5lSWx8d2xGL189IzMrTGZXakhgQDlDTnhXOEkjPTk6YmolJn1hLkUiJXNiTnRbfl94XjBt'@;
put 'Pn1ONnhbTVgqcTgyJn5wdFk/cldSQyVkaypjOChVaFslMl1heGYpJlkjb0ArcGZFT30zJGJPRTpPNVVoMUVyZSk1VDRPNzVmcFNhLnZaXnNHMSlvR3VbJUV6OnNwP3NrViVrVndabShoL2NeZjhZLHMwYXBScW0rYmtncFJeMzo+OTBgeiRWeSx7Y11pX3UvPy5fPXsmMSU7Y2c8ezNFNVlHcClR'@;
put 'dyhVa1dzWi9YfXVmR3Z3N2JHZGlVIkBbMUp1Z3NPMlJ3dy4qXl8mbXVmXyZZeU4vSExiYyZVSlNJflRjX1s3P11xLkREbysiek5JVlQ3ISplRCp6fClmPll9QDNFdihmNDd9IUBNXnhBS1ZyUEEvTEkwKTBuRWhpVmttYiE7LHtLOVgvdU54LnwhQCw6RHk6RUtZb2kua2ZlSWJIJn11V3RQS1M8'@;
put 'LnIyK2d+bkdfJnhPR20pb05oVyxkeGpNRzw9L2lQbDw3RTpVJldRR3JAXkpSQkFzTWR+RFI3N0R1WndpJUdwOGk7UGdBbUJ2UWl6M0tXS1JlckkwYW5rbE5Cdz8yVUZ6d1taQy5ZbF5IUTo/M3s1LyF9LF47WWt6V0NaKDpaZHc1alhERHp4a2BQfERZfHZhPW4/KyxPVVUxc3JqZlFBYzA+VW08'@;
put 'bEE2ZXtmanZ3N2prQ01bRTFjUzNra0lsVHB3TyF9a19dVm52VVh4bzRtSDBMR3o6JF0hUj45XiFlQGkwZG1xSlVMeXZOR1REfno1MjBoMThtbGNWTHQhTllXbjxwPUZUQnxIJUU6fSxnbFswOHlzYXp6QiNsc1B4dDZXKnZleltzYXo1U1NtXmJwTVEvKXkwMGYlXlVNaUc/ZFV7WGF0M05TL3tT'@;
put 'YW5hWEYxYDk8S3YrUWpgQX0iIXtWeT5JLzY4NHA0Old2ISJKRn4xeStTbkE2bD4iOldyZHVMY2pRfDwxY1AoPHlEcHg5TDhAPnZdeXplLiUpVjsxUUpfLEh0ZWp5TEAsW2VqT3lRd0FieSFxUjMuSH5ILFU6PEJ2Tkl+dlZge3lQRDcxVkVdITVDUnR+bDFYdXoiTjl7aCI3M2hHUylQYl9HVXNJ'@;
put 'dEIjbFEpZCp8IzNWV0l1dH1zWjFCS3RiZiJRLFdfPmo8WGJpdSUuYGUzeXw1K2JKfj1gZURpfkcsYDh+ZCQ+fHJnMjI+NyJsXWR+SDZgfmEzZ0x3I15FTk5adSVhQ1gxRFc7QnxXclQuRzd9dTF8Kk85RWQ8PzlITm1MKn5ASnNXeyxYRCJJcl9zbGNPTTJgNTZ9aEp8P0pdQiJJfigjZngleEwh'@;
put 'ZHd4YHBPQi4iYzJxJldXPDRMYj16dF9OfD49PDx3PC5ZWEA0SzNHUSppZk43MUNGJTQsYiR3ZStPT09nYCgxVm5wMyVJeSFFUkRGd3VeamxnTj5oekBNcj81WWV8Z3ZrSWQxaGF3YV1BcmNbdXhPQ2ckJmUqXmpYX0ZFYWVbPElAcTpTdV4mWSl4KU1WNm1YMnFtWTNxRz0rOiRhZ2MpR1N7JF5H'@;
put 'VUVjWSJkZHVfXXcmSWklWWFVTltMYEN3PVNtIjFPSD4qTGEqPWQ/NmlkeDY2PXR6eXkrdzNGZCZNenV+akhNX2J2L3JeQ1BqXk9VI0tPKV86MTxXSHIoWTZBRHUlWmE/RGdXSz5fYipeO0RyTEVoRnE9KTMxP1pOPW94UGRPKiVULyNCbmBIZS9fQ0FxIVZ9O3x1LHlSLF9ST3RhW3U5LGJLUj15'@;
put 'IWV4N3VIb2tQMEFfdiopWUo/Y1J0ZSgrY2o8PC9uQSZ+UWhHMCMlQHhzaVBWOiNuOiNRO0lDKWleLjJOL1tYN1lTbHM3Z2V+VEdqUntbdVprOi8qa3dPbU9nY1EqQjVGcVpINlMwUEcvSXMkPngkYS9pfUlPTSs1ZytSV18oQlFCWUB+aV1bYF91MSIkR14hVkNZTiZUe247czNwPmROPm05L3c2'@;
put 'emBVOjNiP30jOHBlI3NWQjVQZyMvMy48dkAuUnMlcGtEeXNjb2I4LEMjanlFbXBuWUR8T0MkNGc+dV89d3l7I2VPKSQidDokWmc+Kl5FR0lnaFp6VkkraTBNQUF8KC8/VWNDRWhqdWA4ZitAVzs8KDp6UlE2ZCJ4WkhYImEkZVFpOFJLUyRQV3sjZWNmYjFDeyxHL15JJD9yR05QdGE5RUVrZCVm'@;
put 'eC9hXnBOS0tdVjt2PDVPeDohNHdjU2MjUnd4YE5wJG9XOUVBSH1ZeHx5dEpedFBBXSRyejJ2IU9AZ3VXUHQ9TFt7bDwvLzFafGlMUXYvLFRTIy9JdWRKQmlBVHsuOyNEcFhBITF5Zz5iZEZ2LzVGYE91I35gLk9MJlRjL29KJHZRTThDOkElNzI8Tmo+LDQ1RkI3P0xOaGp5aV9TOU8xeX5RTEU/'@;
put 'Uy95VDkzcClJY1JwJEJHTVRaUnhVVnJUTWR1WUtacEo9eXR8X2BCUksicXxYO2opeD9pRT1CUX1LTTo5TitEW04yX1BebC9bVWAoOlcsJTxJdDBdbXFTOFE8YHFNSy5hajlDV01ISzxJXkYibzxeMURoSF1ZXWpVfX1SfGF1ODBIQHhpUmx5dkIrX2hMaGpQbFI1W15uTik4OVI4SVZiVE5fJmJL'@;
put 'QChZLm5eU1R+ZWBuMHpWd1QjVWJUJSVJO3wje3w/Ii90cVgsXzFRMEE8aHhTTG1HKCtfI0BvNmtzLHl4SFNgKDYrNU9CV2hDVlsqbisvSjdlaCZ7MG4zeFhNUTMueFZqRUZOajdjJTlmeG58PV11Z1krT1JGaCsmfSQ5XUI1SE5zenliUzs/cGw9PWFyZjYoJkhfa1RbJDBaRlI/fW1qXjoqTU9d'@;
put 'TXZLd3xleXI7eTxRSHpmYkpVbzs1alI3d0lCME1yPFFILFEjdVokPzdZTkpsRnZlaX1tL1trKjM5UW1lbCZqV2A2Pn4yYSo/NylxXyVKRkxVLHQyczdjP0ghXUZmVCMhWyghKSlJRi8mYWFPLk9TIkJodUZ2bkdNSGFuSWFBTl4+TltQZ1UwOHc6RmZ7d3hiKWl5fD9uVGJCR1p1ajcrOFRBfmd3'@;
put 'ZXlMNT9FZkwleDleMj5peCJjfl5oMzV+OUM0YGhKOT5SMFk1REZaNCpiZGQ5cktLWigoSV12NzJUYX0hQzdYN05mKjxeVVB0I2dCJl5tUHYjR0NST35HQENSdV5uQiM8YkVGfEFrSX1MK1l6NjtkPlMkfjZOaHU8aV5PTFczPUpOUHg+LktfOFQiOy8yfUpZMSh1dk9WTnFrQHw3XlJRfDNFNnRK'@;
put 'ezNVKDs/R2N0MGM2Png9ZSkyV2VCRD1lV2k2PFg2fVZqYTA3aTtyMSpeSnp7WmcuP3dLIk53PGFGY2ozc2xLL01XNlkoU0R9a3JUTC5MVHFqdF9HZVooJStKdElRfGZobSt8QkQ/UkxdMyQhNDEoYFc2KlNSPFdnckdkLyYsSzxCMCt1XUg5ZHQiTVZINz5jJjRJT0AvPWU8XmNGTWJ8XXNwR3cl'@;
put 'YylUUT1MZ1o+eT92aWRzbGBSbGRjPD9BbXthJT0yJFJUKTZkYTlxNk1DXVI+YiFUdUx0anA0NldWQChMSGJtQyV+UDFVSi4ub2N6MzxRdiFyYix8YyV+Y2wwVGpeVmZ1a01dQTYoPDIqU3lCL05hS2c8NntmLFVVOFRDdixCKlhqe3diTUYsNWBraG5aUGNQREdZLz4xND9GWnUwd3M2LGpucW9b'@;
put 'VztyPkZ3WnVaMHNCJjxQSFhASCJ4IXFINVZabzdEXyJZSiFDSF9jOG54KGg0Wk44PjZ+QlkoOkIpRCsrNSU8b2UyPiYlQkFNKWxNUm1tV0tUVCpGPlM1OVFzKjFYTV1weDZEPVpmX2QpbGMrT2tFcUA2QVk+eH4ielJQPCNdKDY0RlZMbzppZzoxcjlQQj9pfjl0aEBuP0YjVTlYfEEsQEVFbVJg'@;
put 'amIuSzEhYklvNTFybWtQKmRlZj5QPmZNTW9rekB7Ilo2SixiPltmTCl2fVFER3paWm5kWFQiVng+eVpgQ05Kdzg2MnNFZEN4aWt1KlJ6QFRhcSE/SHtmMD00O2IiQTN4S1d8aUJNZ0lhbjpBUEE9LzZHZStbWDZ4dm9eKGdkKmJhN3xHOU52YkpocFpBdlAoTlU7YSVMbzRNemQrdUk8d3thSCZy'@;
put 'Rj8/K0greG0rXlh7RWJ2czh3OXNnMUw7MSs3RlU2aTFZYUljKG48fWtZZG0kOGp9TCF2Yl1leyMwVCNJYUpYQkZlRl50XTQ5NVVzNnpwJHQlNElpel5DYGk8X0d1ZiQuPF9OelgzQkV2Li50Qk9sOW1iS1YwYUEma2ZlNkdoNzBPYm5XdiNHUU9SPTQrfTJ8QFdwSn4rQFRkXkRfW1lMby92Q1d0'@;
put 'PmshXmNFcjdRNypCaUA6N1lVViJFfnlNWXR5dXxFY009IyYhaEU2TGU9OTh8UFpqO2FkZlhNcVAyeWZzLGNyVm54Oy9PUEBHNTxEPTJDY35JZ18hVil4dC94RDIocWEqO1JDK1g+Km54SXw1bXYrdFdHcEpBQW1wOyNgdVJRLiFQK2hzcixGeHFMe2JtViZbInxJd2VIT0h8RVZqOnxSYGhUKEJh'@;
put 'Q3VCL00/K3Nke2o8QFpOe14hQWIiW1NsaVRAVSljQ115WDxqXjo3YDZfOkV7UGBZITtMXkp3UStsYWpETj5aaCxPTGphdGl8fF4wZjNTV1VfOnZKfjJMJX5pNyIraTgwPFg/PW5TNyNEM25fVE03UDske1ZxJWJgej9dPl9qUi5Bb3Vba3Z3R15ucjBzV1tPR0t2RSohPztubG46dj8pND8ubltU'@;
put 'N3JVUUdfVkJqfGtycD06flRuJVZgbCtEbnFfSnxFUjlyQ2M9MCE9JGVocWsiNjh+P0o9JmxoYFNhR0ldOXsvJGw9RSw/OVBFVUlodT1deF89Z340dTtqe0t+KnM+RVhmZTtBQjpIUWpZZkBgbW48Z2hfLFMzYWhfUXBGfjB2bklGU0Q3WjAlfTAyVCpeemgybmpxbzwsJFNgYUcpIUQoSnZRYko+'@;
put 'X3c0Skk6THpRRHRFKiJCQVJ5SFZgNX1dPkwqUDRlcmYlPTlvRFUlKyw7QGZgTVV+PmB+LygmOS53I1lqNCljXkw8R1E9VkBFeHMqfUZLdigpcD5IaHVwdXJVM0poMFFuWCw0NlZTUTRhJiZXNHhrbXp1Xiw0Jiw4cF1nSGh3eSxpLElCI0k0Y29jIVgvc0VeeTVJeSJaSTB+cz0pXipuLmA6bClI'@;
put 'Z1ImSjZhJWhYd0deLFVnPlNFOnZjKjNlIU0mRWF2SSp1Pylfa19Vfn14UFc3QTZtRnVqKW0/IW49JE5WRyxJXVU/OF9ifHxtY3VBSERSYnFQRiQsSXssVGs5KDJpQiI4KyhbPm5ueVZVMV00LzpTcExfbzhgN3hdbW47PXtwdDM+ekMoelQvOm9fVXRwR0BkVztUe0hzWig4OnZzLlheZSFyOkJv'@;
put 'dCVdcF9WcTcudzg5XUZyUittODY4NDl7TjE1Vz5jc1VrajFqWzkuYUdYZnZfVlczOzN9WXxuOTJlSEx4Rk9taWU8ITZJYGE/MS5Gd0N7IWoxOCU3alFQPm5KKSY4eiMlel9QXTg3alFQJkw2IkVIekhRamFsUVBtZk5BJWVDOHJgO2EiYXM+YTM0aXU8bTZhUmlwTWxPVyRCYF8jTUVtUzI9SlZO'@;
put 'ckI8aC5JQSk3ak1QJiIiV0FaPzsqaEo4aGV7dHs1aWFOVFpBNzxhZSFzdSw+Tn09WzdLPXQkOzxeJWtqaW1LYkNhfm1CIjtVJXUoeVBEfGhBU3JZQEkheT9hMmkuRkxSYXxiMWgmUjtHOUBuMyJwSXR0SU9pUyNCaDRAUHlXVkI8aEtDTHQyITIwTE9ua3BURGtMfThhd2BCYiZScWpGYk4yTFRq'@;
put 'e29qQzRxTm5rRy4wMllkXWIydUgudyhoTCxKPClKdHspU0FoZ3RuKUxZSX4sPWpbcyNdN2Q4aXZCJVNNYmFqZ1FUZkQ4XmhVRXRsV2NrSmQsRWlmRV5ydThjKn5+MTJFIWZHNjYxRStZS0UmRFc8XkJYNiJsWjtHNjpDQkJlbX4+NyE5Y1BheSxFMzBAUGJ9Y052ZjRlMHFjbl18OiwzOGlXT3hW'@;
put 'QilLMnJQfmx+RCpESmVJOEJlSVB7KWtZRURNTVg8JmFxbD9oOmYpRFtiUWE3T3hiJDNJalZBW2JddHJkYCJjJW00OHN8ZHMzc3A2OGt2WzolYldTZHNLZztifHxjJiloP35SeDZ9QU0hKk9MM19EdzBJR2JnKUxNbzI2YUk0NGRKUXJ9UU57dG9WLlU/b1RKejhqKSVLfT5ldjhJdDJjfDhYfUdX'@;
put 'cnVufn43fnNGIX08NGp3TldSPzdFUGFXU0xdbkxAWztoRWNuVWx8b256XlpKfnFYYks+ZSkoO1dHUlMhWHR+MlFmbnheaDpmfls/ez9oPSFUX35SUGZudF5+VF4/TEd9TEhCT29pdXdMdCppI313fnZCKWZLPDRCTVUpaSNgWW4jU3l9eSV7NVRRPEN7Pnpmfn06OVQle253QF0iVEQ3KkIpczRC'@;
put 'VUxuMHpHfnMyP29GQH40MXUofilCIlk9Xn1FeDM+QG4xcjwwW0svWyVDPHxISSN+QiJ0e3xvOVhjajRQTmdTby8/XkZxJig0UkY7ei5XPSZHUWhxNGtrdDg5V3hfclRXKyVSVTNUWzYrMFcycyV2ITtJKWZIUTJWL3h8ZHM3eStRSH5VOGN6bUxLVU4qaU8mSTh4JiphJiEkV0UxODJjZlFvJG5e'@;
put 'R3dyJXZ9TGglOlp2RlJkR0RxU3dhLzQ0UiVqQyQsNkpQTm99NEFjPDZEPEFZOyhQTmcxaSRGSDxEelAlW041e2VzOW4/VTMlOyVnIVQkeFNPWyhAZyFSQUpbRSZQP09YOi5OZkNvSyMwOzI+MW1ub3E7R2JER052TnhpPFJ7aldRKXZIZGwuciExaiN2LCVAbWJJckBSaDR3e2ppXk1NfjkoZVJe'@;
put 'cGxXe30vYXRQI3RMY018PEkzdyFqdF1PO3UzJWB5Vik0SSE2a0BLKzAzPTA1QlU4UGF4SENtVGBYbT5SR2o+Y3E3LEVXfjdmZ21ERiRhNDo6SEx+OTY4QzUpY0w4TzZUXy9leCt4Kzo8eDU0YlpPVDFAYDdBci9CUlQ6PUZJTHJyKVEsVX5KZ2o1Vjk8MiVpJHhFaWVkTW1RNkpsMiVxXmdLSWp4'@;
put 'UW08WTBqVnVCR0c1Z2NqW3ZXejQzOFYuXnk5NUlNJUpuWUs3PV5UJlZdVktMeE9LTyUlMjojMCZSOmB1QDhzakdaaT9dJmtiekkrRSFBbD45UVl+YyhdKytwc15eWlF8TkNqK0BhSCt5aVc0Z1gzUipGakI6MmBvOG1IVjB+QDpxazRdISJaOCZsTSpsWEo/N2d8XVIuSF5ib117Nzdaelp7NShS'@;
put 'NG41dyteUE45ZShaIXNpeDR3QFFpPXd4dFFILn5gQVBtTTpoRHU8PH5SXyVQKXdsIi89eWVfVmQ6dUk/XT16Pk9hcUpSUTh8e0k1dzUoZm1CJnwlWEhJWXhaekB8TEQ4PHh9XjleSX1aTyNNb0g0ejs/QEdKJXRLK1BleFAlPmM5NGMhK21fRSolJjclbTFhTSVnKzcxdUNIVFs9ZWFdMFhYaCZZ'@;
put 'MEdNVkh4SlZ8MjI/KUIyaHM5cDc+Pz15UzU7aVRkdXdgdnU9PyxKUkdsLkByKChtJDNvTGJmRkY2QVZVIThkMHFiJXBydWY/JEJ7WkAjUiEzaDZOWzRtZk5eV15xQjBSO0NLQE9pXl5wR1NmeVFBdDljWGNSW1VaMVBUSWRlUGZNPVRuKmo2b1J3dktPWE5KVWV6ZW8+V2NLWD0rKSl1TT9tQDlz'@;
put 'dVdkN2I5TilsdEBJdFBHISZadW9ea04iImMzTHspPCJMekQkY30sTitNOCpoQyRnZUIqUn5LNnp1Unl6RXApRS56SytkRTRVTj0ib1ptQ1ZRflgyeHB7UjdLUU1CUSMhQXh3ejguXm00QmBrQXtWOl41SWtwRy9WcDheYVppJU1TRyh7Mz0mN2U5USZsYj9jZWFoKlJebUZFQkI4MkhlWyQ2cGlP'@;
put 'SDd7bGppTWBINFF8ZjFkMCF+bDosTzl8NnUwbGNsMnNNMUxrQE8zZT5FKyoqT2ksT3twO15HKSR0PHZPOVFbKWZhIkc2S29NKUlCaSllPk1tKzRHITJYdTtFbj9bMTpBNE85SltBKSovQjZCYHs0PEYzNXBLLCt1eEMpc2F5YCk4LFJpRHZpUWA9fmFBcVpBcGNwfVEyREN1XVVoamBEK0VYJmly'@;
put 'cFo4fjE3Lk95TTMmSU9DX2M5eTU4eTIoKDpFXkwsLGlDWTZZcilmXTBvMmVAYmF6ODIqSUBjSzBqRjY4PEw3VWYjJFovWGpdOkZpXXtYXjtEbWpYMHArNiQicHR1Q31PLDJrdz5oSlAkWFNvR0A1RV1YTE5ycllCRkBxS2B5V1NvL19SUCx2UzE3X1ExSFg2citHaE9Ke1d4WmVCV2JSeFZOQW4y'@;
put 'e3BzL2g4fihmPG9zKUVEKUw+TENqZUB+OTI1QXhlOjdIZkpMakAvSSN5QCU8OUg8T296ZWpdRz1FdiF+ZyFSW0FvZXJDan48WTVGanYrOlVZeGAiTC8jcz0iR0YpZyFsT0dKWGhzdyM7W1FULlpIajdZfS5yX3sxOHFJS3NXJU09dFViPzZNQi5ZI2RWPXpyWm4iYFo2Kys1YittLjN1SkJxMCkr'@;
put 'Z0VRVmkkRzxUMDckTE5vNnBKdGAua0xEIiIxeTgyTzcqPDxfeExsbCNDZ1p7aEhvMG9Cc3pLPXlhWVNeO1BHaHk8VDA2Z2RSazA+Y08vKERdWXtGVW1KYVU+eylIWzQmW3ViZUVQUlNWeVdTVS88aypfbkozZyJvQm53Xk0pKyx3SGo/TE5mcEsqenlvbSZma0J6Yz9GKntpfjtTKCIlNEtacktz'@;
put 'UEYkPi9TZTBLUjIpRndtWyZ1ZEB0PlcqPS5KPVpzQ1d6MF4hIX4rIkpvejlWSm5YTExETypHQDdiWkVCbV9TM3tFcDFRTD5gWUZMInA0V3QlVisuVFA1UHEyfEd5Tj0mKzdIcjY3TndES1V+bT0xa3ZZWXZIbVkvN1V8NVkwWnRUWm5QTiZNejpkb3Z9KE52WDUyeyoqMXNaRlBKaFlaK15JLnZX'@;
put 'WyU/bSRKLF1HS3A7Sn0+SllZZCtxTXxtcEVXKV1jVGUyPm1MSTJecCo2flBpbDFVOT8kYkJGS3RwL0RKSlV5emowdl5rJklaLyxRak9rfDN1eHRqOVpQTnVNUTJJS0JuIkVTRT5nIjRae0FLPSFmVmMhVjw6fGAwMyE9bGRvWWNVYSNyR1MvXjxmJks2WntOTCQ1STFuUmtkPTxkNEtib3N6amxa'@;
put 'SiFjfW1TejN2P1pRfXs6O2dndGQ1VU9Qaz46eFNBZmVPfEtiaEtYRXpgajdjNm9JJUA+WTlGZDspJEwsS2RofDNZek5xcThbW319KUtJdzcmOVJlUFNKOHgjIy5KIzdsLFE/OVFabl1NMjwzdWZrdnpkanhpQnI4US9eZzIzT2JoKVgwRnMlNntlaFY9RVl6NVNBfHttWUhQanpzXiJ4djZCSjU4'@;
put 'KGR8am0vbGsydWRoPjpRcDtieSZNeWM2T2MhQ1khNFo3YDwxajcjNVo9MVdqbWZYez16dkExNSh1NTp6X0VMbU1NV1IpSnhfRnJWVWNodHU+ZyRudWM0PSM6YyU7RmlsLzVCWER5clIyRWtpV3pBX3RGQExdY3M3TTFqQWBIeDx7YC9YPVE1b2JgMnBudm5ZQz5Yamg6ci5rd0JwZkJGLz5jdCU/'@;
put 'a2VrS1FMbT1OYSlBQz5hZl8vMHozJkFKO1QkfH1TPUR6ZDxmSXwpLnpQVFMqTkxMPz5FfGowckNkPWo1M0hYYW1DLFV5ZiEpXlF4fmkwV0V3d2l1fSlFPDN4XVdfO09RdWsvbCwpcFMzfXddcU9KVGs6R2FieDdqJEFERSNOckZ+aU1fPCRJbUh5aUJHaTRNdUFUOjI/bTNJandYW3g/YkxbSV9K'@;
put 'PDI2Vm97WkVUM1FzUVlpN3VNcX1pTVchPWBPbzkjVzc4bGIqdnZUa2Umb3QoYGQ8Y3hjIkxObTJKUyZjT09MSzVkL3xKKk9mXzhDbkkwXyppTVJKUl87SzxsVlpmX1UyS0YkUFRCLHA1biFrcUUwcyhjJTw2Ml1KTGpseSRaUTR9dk5xNHhHbX5icWtNZ34mNVhnOTBzIm5aSjM3fUM+PX16Wkxg'@;
put 'dD0pdVRTY2ckblpQQnRxI3g5dE5+Vnk3RDp3cU5bJE4rdU43WEl7VnlHQjJIO1Q9bCZiUyhhKVk3PHBrd0tOdkByXW9LV2lvZmg9XlV2OVIkPigwLGgzJEw9Y3k4PHA8SUZ0QCRgZzc2akF8bWB3ZW46SGY1XmFwemxyMzFNLnt2NHNJYENGTHRQaipoUiF1TmlDWjQyfWxrUVJAcC5lRzF7WHVN'@;
put 'cDxEKCxJendEWjFIQyQsNixXQFJLbjdzOkcyVk1Ea19VeVRRNitiRkkoXms2YWxPKk5MI35ZWXgibVRDY35xYTZtRyUmJmszc1ByX0p7YHl2WC5SbURpPj59KHRBS3I9Pkw/e3IpV3ROOipMLDhNaSEvJlhaLCZKdm98KikyUTshSmgqOkpWbn4/OiQ/dlNrXlFrfVZCcH1XQCxuYHR6dTolZ3Zz'@;
put 'cy90VHx6TSFIK1E/bjVkbzpPXSF5OUI4PiZkR1JuUj9PcWsweHNFKnddc1BvcU5hRjJofSVFWT4hdVd9fDZabWlRR0AkRjBRWGd0NllbdFF8fWFGNEd4d0cqaWJOOE0+dGVfRTssdmZJKWskJj1CJDZgWFF8I1ZAPlI3flpLJF1NNXc0Uk9+O3BUNzIsV1hzPDtSe1c+WFtzUT08VUZ9eWxSZzwi'@;
put 'NG92JmZnK0U1Wkw5bmpGMmxGIUkiRTc+L3I0Nzk8TmM1Sk1IbGFfPFBRVVAkRlhRWTwsVShNa2ZiO2ZnPjxXcVVRP09FVXdhWkN3O24uOW9RYlRNOkclb3VsIkUlfjttVyQ6QDZLeUxHRGVaLncmfGMlPndOOFF3d1FGfD5XRjUiYDNvL1k/bzdIelFiMVtsJHs+QFVbSDlvZlB2RVB+KyJBXUss'@;
put 'Y24udHcuIzFSbSlCWlJ3JVhwQjc+O0RhUyJ6flY4eTZqfTl1clN7N2dRRFk8WnFzelhQWVBAUTpTOFR1cnpYOUxHdzlSZDduenYqT3s3Z3dPS09kI1kyfFBPKXxSO3ZkbjwrZ0V8b28iWzFVYDJlN3g4VFNme0lhWUJkMiFTZlg+S2Uwc1U9UElhTSxmJld2MSZMMStsfjxeOFNdQiIiM01mRSpf'@;
put 'QkFdYW4uKkBIZEppXWooej41WUxefCY+JVVyR2tIfkkzK1p4VUNYRHQvQnFNdFJoSVk9QzEsUkoheSxOMD5vdjYlVWRKWSEhZDAseVtDPyhCcTA1VE5gfGF1V1N6NHR2a1lmX0JYKnhgZ1hpOVJRITY6a0xQe0FoRD81dVB0VFhrOlJaI0khe0JxOU1XSlJgMFNKO3F5RFNxYEJxaWpqWDpZX3Uv'@;
put 'O3VhdjFTRmIoTTldQG4paExjakspeS5zJkZ+WDEoWDJNPyRnTzx4SXVvVXskQnF5dkk3PXQlWC8lKzVzfD5XNn0pZTdQQTVrUjlYKkxnYyVMMDZEXzQhd21VIV05N1R2b30rbTp7YiJJK3R7NHFPJWpaTyQwSzddM2FlP1QpM1dHPml7ZE1nVUQxcnxod1VaMWI6JSpgYkViLmM2PiM4NlNub3Vi'@;
put 'KXkmTjdweEw9dF0zRER+KEQ0X0Q1KUNOL1coRmRzdXovLDNET2M3UEFGbng6U3Q2XTNDRyFSI0ckaWtmaUVOLyY8aV8hUlR5fWcxRW9qR0pyej9faV9BcjVBVHF5QTIrLyxGUipbP3NZYEpNS3g2ZylhPjQudSlRcyssVm5XL1NUcX40Z1VQWFNXdVlhX11Wa3UxUyE1PVI8KEZSYmxYfFBhbF4u'@;
put 'OD8vdzB6Q0k1TCwpP2xiKVApX01QcGx6Z18vVXpJIkwoTlVwSFZTPy5tQDZBdz41Z1FeZjBdRlFjXkxpZCtwd01LUVp0OFQ3ZV5iVSo9dCQrJGAlSnIhUWolNnV5OTFQTTo+UUBWXVpMMXRoPWdkVm4zIUtWfTA3Q2w2Tzhne2YwQCF2Q1JYJWw/P081Li9SVyN9MWo8P2ozP0oleVIrYWM2PG5d'@;
put 'ZjBaUy90X1UkYy8zWChkWGdkJTZjJGFQSjVLfSFdKjBiNmMhSSY1YnpNKERbTWs0KENrbHk4ekNgeWhuKk9tZjRoeFhVfGczZ3clNjZ9KlkhVH4+bWxETzB0R3QyOzdTKUdsMWxMUyhmT2d8WEt9P21ENUVoNk0qYm5ZXXs7d2s6PGRkQT9FcDQ2cU58KEpdfVFaIzZnJD4xYGdkaW5pd2tfZlVU'@;
put 'SHdkOzRQKHc1KXIzUX1sdVVVekxMXztTMFp8UTNadz9nIWhjYDozUUV5M2Nse106czttfj5pdmAqe3pjfGc/YipBMWZ2c0pXY3tdcE19bGx+MHkiIyNzeyp0MjxmMWhdaiV9aVJRKHN1bHxAZXkmJUhoS2JoMEFdZV9PJH5vSW9oKS88P3FUZHZpLGM/UFUvRyhVdV9QVVh4WC5WSnBQKHNbenF8'@;
put 'MTQsSzdjXlFaNW5nNFkja3A9LEJiLDl9OUdURn48ZSlWTF9DYm4mdWV4QlA0fnFEV0c+aU5Kal8uRTlYW35iMnhQfX5WYFBCW3xoNiJLNC4hVD1TfnMpN2FQeDNHJXU0a2RALz5gL0d4TF98YUJfOy9gLn46OW18an06OXdbP1k9OWl8MGA6OXNbN3Q1fjNvV1c1fWthKXJCKSJub2hxbiw7QV5f'@;
put 'Nj9aZHN5SmVrfWxpJW00XX56SWB0aSxYeGhLL04vOSpse11ydEpSTzZQKEsjPF9oOFYvaDg9QjFMNH1tLlAqUjp+aGJudUo/JkY3JHVISWFje10/fH5fXjskYE09OjkydjlEY3NkcTpfcVs4Xzl9Nl9eXypAcy5lfFRlYF88a3dBMXJbMDxrJDVjXXk1VS5xcXdBfV17d1FrNj9YVSg+WDZeLFIw'@;
put 'PVZ3RXQoZ2BlQ184KSxeRSR7Y3A+ZHYzNntrUkQmJGE/O0RzIzJtL2l0fSY5ezs4KTVRQDFSYjA6R058bTNSa3hyIUZxQ2t+Nmp4OlkoZVMpYkl9azshb3UvcWpFbnMiJiw7bXNPPjt9fVhwN0RWbi58fWh5a0ozdWljXVhGIVImdFdMfF4/ImcuOT91R3xzT0lgIU98KDBJSXlya1JROkklYzQi'@;
put 'fnE0JHRwMUNhejxLMyJET1NfX3I8Ln1kZEhGN285ayVUflNsKD59YSg6OWRxfF1ZT1EoXmkpcnNUc3BefVltfV0ufE07XjtEU2tfbFNgKj9ZNGhILnRtVih8MXQyZihKP1diVigrSShxN30zeEwqRzc9KXZkMFkmI0BRY19aQStWLFUrejpfKDJLOn1HUHx4Qm9oM3dkYEgsRT9MazZJKFVVJiZF'@;
put 'NFF3RDRoKyxNflUoZjEpJW5zZFFNZFp8Q0pgPylsOjkoQEAqM2hpLHRte2QyPiMvZDs1fWg4XjsvUltjfV03fDMiQ3VJMVMxPztdIm5bNVpkc3Q2ej8hWDY9bzNtXXVCMWg/LyRyPWJSOVcqZSlUd1RrfVhFfiUwZE9qfDlPVmxiYEtYSDYkXnhVMWh4RDFGPDJPdDFlPG9NdH5+bU58NCI+O0Yx'@;
put 'T2ZzZ3dvKFg/eEc/O09AbzF+fSRdPn4pLDwyYF9xekVWWi81Uyl8MUBMNC8pJDkifGBtTmR3fHJ7MDVDKn4wMGpoNjhgakQuaW5uRzs6OSJ9dHthWzEsNVMlPztMcDolPXZRZ3I7a0MmSio7QGhzM1psOmI/Xz8xaEo+RiRXKGFAWlNNfko6OlE5NH1sQF4vQjs8NX50bj1+YURlUUhTL3x6Kyho'@;
put 'RV47MGkoSSh6cmJ9Tz9yfng8LlFoTXw0Vj9Ddnx8bmVLYmMpbypsSnNKbXNETyIjO31oYn1dLyYrPmhpJElXcmxzYyhBPSNoLFF1X1FSX0ciZmxzfCZXcmUoY3shYjxdWn4zWjZNZXZdQ0cpKClMRGwvJHIhTlJqSzFedEZ1IWh7XWhmPV1ZbF0qWEhQfD5IPyZWeikla3NYJlh9ZCh8PUxBY348'@;
put 'UyY5fntkOmtEfV0jeW5oeCs0VmZmMWh2QWRINXZHSF47XTdofmxkIV9yUUtIbm88Zy5HZj13dngkIz9Ybys+PTJ0fVUxOUBKY09nSGBHYmh0bm9BVHN7bD5XLmZmNGBHYiIoVSVsSiJmaVNPcW0jJjk0KGhLTGIyPmBJKHJlTnp6RXoiPl1mXUlXcjA/dF5AbCZaZHN1Kl9fVXAvN2ZjMSk6Izph'@;
put 'SWM1UUdwJTciKEsjNUp3ZHx+Um1Oe2hzeG5yKDVbYy9eRFAoInQpcmklc0prc1VMIiMsfShWfGx4fEhxVUE8MiVzJjlGQEExPDlEQEAqWE8uUSxkQCZdRWd8LzA5Ki9LUCg7eGAobCFOUn4jSDc2fWthUCpYJCVea2VqPzAsbGUqTHJDY185SXtANz0hVHB1YzlUNSYlS2YzVnJDLzlbTV54SEsk'@;
put 'THpLP1ZVWWc/fXQ6RyklaXNhSiFUOChiOCRjY1EqPk9TTS8zSG9HND8hVCtadHlAek0vTFRGZjYxXyJRZD0wPztYIzxsSnZnLG5RZD5KMm5SNH1SLGheJX04WEh2K2JAeklka08lPCh2LlsxKVI2WX02d1EqQTEyaCQqKEVTKFR4QFFrX3hPakdBPTNLZkk7SmF4Jjl1WGZzekA4Y3ZOfVMofWxQ'@;
put 'I0JKQ3tTfiNlJDZZKX44KHYhUX56MDV+YlVkUyJzfFdNNnx+aGJXND5bKzFkP0RjOEkrNyt+S3A4fWB+LFk/YS5+PzpdfkVyYnR6azQ+XVh5QiV9U0hCPTcsdFd9LF4pfTlRUEIiUzhzfisoOGdNLD1+M1cvYHIrems3K11YM0BKViJzNUZzNz5+O1N7fk9yZTx9fU87QjM0fiZEO35KNnFbKjEh'@;
put 'fWFISiFjc21qX18lY147O18jKV87Ol9VMS85MD8vSzJoRSohYEB7OzhqbmRzOXV0fFJyS3UrKVd3aUwqOCk1PVAqQlMqYk5EUHtKbT5iOzUqY25GUFtBdCtBPFE/VlB8PiYoQTleKmhDaCRYfWZzbUZBdSJmNE5ycCN9TUt8bGtfciRfOyNfIV5aNHR8KWxQTFtNJjlzcCF9YWA6Oyl4UFdKS1Yv'@;
put 'THMhfipEQ2BMa31+eStDfkNJW1hUXVJ5QXRwRk8pbn11SVlsLEcsPH5lZHN2aylyd3RKL3lwbzFyPzk8LilfYThYdzFANHo/OnZhfH5ANUMzTDZDcH1gMDlzIjshPmxCOCRBe1Z1Vn56VWBzUSNWZTN+fHomNHhLeXtvbFpXSVteRUR8b2wvfiJPfXNiMXBpWWA7KV99QWBdN1Q0c2FUKX19aEFU'@;
put 'VzxveUZyW0VSWnw0am1OPygmfFtqUDJQKDoybHxQNTJoIlFVQTV8KUp3c3VZTENGPlk1KHZGUiFfKVZ4d2lOTFJ7aXFBT3FaaU5QLnojS0w7UCg6UiZ3ZH5maU5FUTliUk0yMShjWiRCUTlQUmJCNWs2fTZVZEI+dDFlP0MkU2haZlpUNm0iNFBXNlp8c3pYVVt7dDJsJjI+Q0ciMjJOYm5OZmBL'@;
put 'Umg1bHtIXWVreEYpYSJbVTRXeF8xJmN3bkNdcyJwVnZdUGJua09pfl1JRy4oWzVIdkVtPjkoNGA5eH5DP2ldfmBHNjgiQEU4UXRiTVMxPExPRTNZaChwZD50Yk1JenFLVlo/QjUpckFQfExIeDJTdGw5R09qbDI+a3RsfHUsXTt7QDl9N1pLKi5kZX4rN3Rfbk1xeDojdWp+R0Q/P1koeGJtNn0z'@;
put 'WlIqeDpWIWh3P2FkZDAxQXQ8W2R+PGh8ZlIzM3AhbHdyfk9jc2FqMT9TWFV8ZCRdKixYWzFkPyU4ZlIuUUdJPlZJMHt+I1Nkc2ExcnxARDY+bH00MW5oLlFVISY5PVlhbCo+fEhrSWJjIXNLPUliLD5KcWx4ezthKFgxd2YyPlpHQm5eX2QwZXZsPiRiYF97NXYvWWlgM31UZ3xvM2hjJXIsTntO'@;
put 'aiU1YDJVL18pamVzWHtTalRMei9+X1NObSZxfFNqZXNPJDlpUUVoRDZmX3ZZSDpfQHJldjs4UFBYSEguPiV9R0diRykvQE4qQlMhRVtxWFclKnZvWEpDMHdHcUoxZT5jZmh0ZCN1QjYuVSEqSksoTixhYStnRGpVZmVVdzk/fHdjfCtaYHRqMENtPFFgd3VfeXoleDMsL3QvNTB3aDZ0JWtHTypZ'@;
put 'ZGpeXk8wZDhfPXk6SSVhZngrN1ljJXUqdW5YM0QwTn4+fktDZFUuWHxXWjM1T0QxPzxaYEMlLiI+Ij5aS3hjY2d4b187eF8ramRzWnp7VEp6UTRdYz0/U141UFVONzVnKTpmXVFuMTl8N2o+Pz0rX18vOCVoRlY1YzdUeEVgdz4mMFlpKTJiblJNMj8xcnxGQylVKVBWXzh9cmpKUCNzdUVUVFBX'@;
put 'WX5rOSsldUduLjF3cjxTLCZ1dkBURnJrYDMxTSxVUVo8QFh8YTk7Pyt8OH1bNTRFNHxxfCw8NmNgbGliWC5tbkA5SERmc0R4THtzQjtFZ3V+Pm4kWHhYLkloaDZKaS82Yk9qK3glMDx1b3ZsbnZeZzdTU2IkaTQwd2ZiVjFIaT04Ol1sITxRd1syJC5sPURIPiRQSklSMmsrd2tVVDgxWjg4Ujsy'@;
put 'ZD9SVDgubTtmKEZnOyVJfiQyJElYWWgrLiNCfTkiSXo5YmIjNXJeZzhvNG5ecHUvKm1KcTtVY0FZYFNbYXMoTEYwfDlpUlJpTUdoQmNBSypqcEQqV2k2dlpxVGRTY2xyRTxwcWtJWVB3QVJDMndwa0xGalZoZ3JVVFNQIiRPSSVTMTE7STRrQX1BTjdlXk9qTkdeVzUocFZFSipVcmkjeTNDPUl1'@;
put 'UmMxaCJ8PE4vOWp7bk0vOWA+V1QxaHBdblE+R1Y1KFVhKD9gL0sxaDldRyhIL3NBfjpjc1J6Il9RKjh9aDVsd2J7K0Robl5xdHtJfjlgMXVvfiViaDZnfSgyZWdSY05dbzFUe3Z+P2dsUGZzS345YWZzQ1tsITtxSFNte3ZvVzR7JEguQ313alNXYzF4Om4/K3p1c3RIRy9+NTtjUGA1T1hXO0RO'@;
put 'MiJgfXQofWZYekYqME4yfWArNzR9d1VTNF9XTjI+fWt0Z1czMEc3V3tAWiM+cnROMjt9VXZSV189dWosPit6fX4jUllTNHxoYTR9Om1mZ1UsRGskc0lsLHpePipHIUpHYj8oTlNfWHJ+KF9qd2BOfiMuOFglOkh3azN4JX14MT8uOzRPV3grdHxSck0val4iQlg0JTRhQ2IzUCJ0ejdua08wRGMq'@;
put 'RVVWQGwvO2FyT31fNFF2RHpQR1UuTUxIOFk6N1RGbUFxaUFKWy4mTnhMZGxYWCRXSEhjN2ZIOnUmazglPkZAdEVSV2I7d2suOHRZSTlKKCgwOmZyNEBXdC8ldyE+ezR0czZkRlo4V0djXjdbZXRVWmZffiFEUH02MUV7cURDW3ZRRyJANWI8dWRmNEVHWEdwayE0KjlaJHQyQnJPZzVbd046VUll'@;
put 'SSRLW1UiOERNZDAuRGA9WiE1dC9rdV9eX1tBOSpmQF1EcGE5NCxxKGQwRH4rPz8jVm9mLEhRTj8vMzYya3VRWnFfKEsvUW95c1BlKTdidCI5dUVaMn5LMihWeFVBUT4lYW16L14lJFt6dDswNHViUWdUP1t4fG1IIiZLKitYK3pedFlxMntbJWVkKmB4aXQuNkJGMzx8eFo5fVJ8NmJYQXJ3ZGZo'@;
put 'NXoiNiJCUFFAfiIzY1pbdGtiTl9ZL1syRUhPaD5HMEdmPn1DcGgzPiRoPEFtVE9LLnhBeDpYcFQwfGo8XWFEaGlsJiIkMmRQaDBqLD5QS2Rvb1VVYn5NJCU5KEM6fmE3Xnpfb3JzRlFmMEY/cz04KFpLMXMxSCZ5I2p8TyNxVEg2Z0lvO2Bnci4meTRHdC9baFF1JVJZWFdxZnF3eXFHODs2Szgv'@;
put 'c1p3dWVeTSE5OVFseF0kJTZgXiNmNSRiZDome2x4dypuYjF7ZH5PdFd5P1ttJSpOXWMkUCl5NjApc282dSxoYXskO1VkJG8rZ01mI19Fezh1XkFGe2YjTX0kaFB2XjdQUXBjJEYhJEE8Km1RW2J6Uz5OYFAuaUouQnFebTREOnsjfGRYLm5UY1EzSi4vYCw5Rn5Xby9KaWJQfiUhK2k6WXs0bXpd'@;
put 'UTN0eUxFeiQpWlYkPzRJX1EsRD41Zlg5RUJ1WFN6OygqXXZjMVpCM0Y5X0g1NDY+R1dZdiw2X2l0ZmU7aDg/NHd7VXEzMEVrNHZWbnk7Km5NSnFvNU9qJnkuS19ebD47OXE8Jm1CZnklSj1XKmZPWXxaOmR6aG54ZE9LcmtGaDNwM19QRFlVXzBJaVNdezYzb2c1cnlBM1h8VjcoXXpMS0tMUHNz'@;
put 'eixfTF95S2lfKG12PVM7PGtLKUw+YXQkVC5gImdCVXlIeVt6fXxTP3B+a118QmpBPFdpNzxJZzd1bnMyPHJdKE0uXjo+TXJKOF88dng3XzZRaUVFIzVxIilqWCF1U0dNMkYweEc1X2FNI04zSkMxIUMhKFN4Vi5BWHNRcD9uK3hRc285YW5fLDhZeV9neXs5Q01LQlVJe3U1PSJJP31DTUJ0KSss'@;
put 'cnt+Xzg8IlN5Q2xuRVBWSXxkdnQqbWY6Sko3Kn5gUHlDJUVhfEJTL1ZQKHllWSV2fEU0dllqYTlsLHVxVXBKUy5rSXhhOnNIOUMqdFVRdG9URk4zR1grdi8yZ0wuKzZuW28sb1hUeiRfP15tZmxgQy49bXgyaEg8byVRfjFvTipjZSVdKi9NcDFaOVR1V1c2KXtwOEtVdzx3TWRbO3IrKkw1SSQz'@;
put 'KkZ4PVc9TipWLD1dZiI6PFljNC9pOEVEWEhaOm5ETXQlPH09Rl0pN15ENFZHPzJsYDRZQGBgP0tNelpHMDU6TkRDWiVEOTkpVUpbXU4hfTdGLi9aPzAqZmtvenI0Q1JJK3p1VCFmTz40YiswM0tUQEwhQFpIX2YhT3pQYjFNTV5BY0YmOlFLbH4jNXxXPGhMbSxbTXl3IXA3MjRwbm5RJlV4RzdD'@;
put 'aFk4ZjJtdiNkcHRCRTFOWlNCQy5MeUpSNFVrQDVMOD90NSU7fShse3AwXStUdHB7PExBWCFjNVs0TFNjQkpAL355RUQpdE9rUDZnL3pgPjVMQnFCe0VzT1kwPEBGM3xIMHZ7ZHBSJXBaPUgqX1NaLE50RFZZOnoid10yKWxsJF8rNFFtdHVsSjdUIypQPG1uSXU/VnFyWWxoKjdmdkwvYTZGbyh7'@;
put 'KyZ7Ly8zYT5iMkZuSGA9MUBXY2JgX3c8dXJGVWZMLEF6dGVRPjhOX0Q8cCI3YE40LGVBTWVlO3xgMnJbRlhscyViYEx0VnJmWHN5cDZGbz1CcjMiKnBediY/Y09FN0VpYlRNRF99JWpwaS5eey9nKzdwd2hePVAwMEcsTmpzKUZmMiFrSltQJSQ5TXt2Py9IZnl5PGEhTW51fFhmKz0xKVt1ajJa'@;
put 'OiFqaClaJmd7cyZRTERFdGB2TE9OT34vZCllaHQjc2hOMy9hRjZ7dlcpfVFHS31tUnJFMDtoLyRHb3loNDNMO21iW1IxY2AxfmIzVF16TDo1Wkt1WSV+YmxWcCp6Wj9NRGJJPExXMDxtMEYsR3pXMj9zcEgldlI+KHEyPHUvWnZ7VHdSYVMwNSRVTSZBeiIwbXUuY0ByNUB9UHMzUl9CRSZucF1t'@;
put 'aVs3YyQrcnlac1gyd2lpO3xHU1RzckZ8Mjk9QGpSW1pjVTY8MX5GL0FCMzNiPmMkNE9Rdy90T3E9YHZ7Iy4yOT5QYXhXZVdXeDFmOjE3NFI6R3hWdFN6WHsjdDUoMChjQjg1MEMieThFPyVyJWl0KXliIlRDSWNuNCVwSX56elJxQSE/fXMsXykpem9lKH1PTD4sJHteald3THU+WWp1PFhVeVo0'@;
put 'fCMzW11PJnxveWJCPjgkYTk3NCVeWmBEdjxycDJmSVdOImlTX2s2VmNjNTYwYTRLaEhqMDc/K0YlU1kieEw4Mz4jaSg4RWpkaVEuazFyJU1uP2tXa0tKZE4qJi9HLDFXYDpXNjN8ZTFLe181WHZWLmlXbTc6TGBLNjVUQSgpI2F4Z1pOT35LM0UlR21BI1p7OGZLfW1LQDpEd19nLDpDR2llaWZZ'@;
put 'TGRVMilRYWI+XTEuZWchK3pqMVk0YTNCZjNneDY8Z0Y5PUNkQCpjb2shIXRrajYmVT0mOD5FYj1rLixsKDA8cClLYUBnYzU0VVAoQiZxd1h6dXFpQml4TVdGOEhhTSUxJH5OW2l2ZywvIVg0XkB7ZSloN0xoKXlBZG1jTmhobCM8OCshZVQha140WiVkSE1GPTRQamtZXThlND9KU0Y5T21zPmg3'@;
put 'IUNLKmEsQ1k9UDJaI3Y/YjckN2JgK0IqZDBgaDZbbkZuLzgxeWl8LzgyZkRMUXl0aFlZVCRNZEVEKn4sXT5iZmRCZyNoOTR8PmpMVEJZTzg1MVV9Nmp6YXF1WD1aMjQwX11VQ0FIXVtDITQwSUZicGVRYVhydy9JI0xNcjI5WyJ7Nz1tUmhjeSxkIjNBSSU5PSRIMyYoTHVXOSxtc2RkPkNafXJ8'@;
put 'SWwuZlhCalAjIz00Sm42QX5YKUc1aCVBS01QT2l4QlhzM1hOQzVRdFR0LyxDZHNkTGtxfCQ5QUxrYStrR3d5T2MqLy9sN1prJS8wP0pdWkR5fkVjbVs1bkl+MDE6U31TZFh5L1Q+I19KanZ+PSw5NCg7aXh4JCQlQlpIMzdAVTE3c09sSjZ2KSIyXyVXbEhke2FmSF9qVWYyPyNSKEZtNklhZ3gw'@;
put 'ckBYPUBxKDd4OGljS2c3MzxKbzN1UnEpL3VsQzYxfXVFcV5STTkkdXZFOTVwJTs7YGQwYjY4UH0oUy9EWHdVcml8aCRlVSZbWT81RjNMKVsvSz8wYzh6QGRUb1ZzQXtPNWhtaz44Ny4wSn5sIn5ra3NBaWcqSWM7R2pPQ2NdVUhyRCVCeFZdfFprOTQ6blRjQDgodiMoWSZBVWo5UmlgRCREcmJs'@;
put 'byNKZjRsejVbIjpWcVJYfHUsKGp1REUxWC9LVHcvVmdpY1dxSDE0fmBFYzFYT0hFSGI7Q3o9OjEraFpjLmtZZ1hNI29fdSUscXheIUkkbW5JVHI2QEpkTDV2UEJ0RnI6KTx5NktuSSlAMUp1MzZAa1pCdDFNeWduUz1lcH4jdjE+SVF7T0R7NW9TZ3ViIzQ9Ukl5OlgrU0VxUWdJfnY4PiM+MzlL'@;
put 'ImojfHo0UVYkKzRYdVtjMUxkVU51MWZSYnE4Z0ddXyQiVE5fTTdyS3JHX35yPUwxUEUyP31pPSp0MyNjXWtqaElSa3xgNiptT2EvST4oQEA+cHhkQSVrIV5wdSlnUXd7dnIpX05xO3V6W0MvVSxySUcvUE02Y3xkcy5mZTQwJm1yNjhLUl5fN11FZlBCenozUXhaeT15R19hWiQmWjl3QUlgOyNQ'@;
put 'fmcyZTFqZzMjI2tGP1szViNZay91YyomWSMvSChUdnokJVA5WlBzYTVddjl3dTU7U0JASj01SWlmV1FYSTBVQScpKSksSEF8fChIQT1teHQoe3dhc21CaW5hcnk6T3RlLGxvY2F0ZUZpbGU6dm9pZCAwfSkpLEhBfWZ1bmN0aW9uIEN4dChjKXtyZXR1cm57cGF0aDpjLnBhdGgsZGF0YTpgPD94'@;
put 'bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+XG48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPlxuPHN2ZyB3aWR0aD0i'@;
put 'JHtjLndpZHRofSIgaGVpZ2h0PSIke2MuaGVpZ2h0fSI+PC9zdmc+YH19ZnVuY3Rpb24gU3h0KGMpe3JldHVybiBjLm1hcChDeHQpfXZhciBKOGU9Y2xhc3MgSXd7Y29uc3RydWN0b3IobCl7dGhpcy5fbW9kdWxlPWx9c3RhdGljIGxvYWQoKXtyZXR1cm4gX3h0KCkudGhlbihsPT5uZXcgSXco'@;
put 'bCkpfXN0YXRpYyB1bmxvYWQoKXshZnVuY3Rpb24gd3h0KCl7SEEmJihIQT12b2lkIDApfSgpfXZlcnNpb24oKXtyZXR1cm4gdGhpcy5fbW9kdWxlLkdyYXBodml6LnByb3RvdHlwZS52ZXJzaW9uKCl9bGF5b3V0KGwsYT0ic3ZnIixkPSJkb3QiLGgpe2lmKCFsKXJldHVybiIiO2xldCBmPW5l'@;
put 'dyB0aGlzLl9tb2R1bGUuR3JhcGh2aXooaD8ueUludmVydD8xOjAsaD8ubm9wP2g/Lm5vcDowKSx2PSIiLE09IiI7dHJ5eyFmdW5jdGlvbiBNeHQoYyxsKXtsZXQgYT17aW1hZ2VzOltdLGZpbGVzOltdLC4uLmx9O1suLi5hLmZpbGVzLC4uLlN4dChhLmltYWdlcyldLmZvckVhY2goZD0+Yy5j'@;
put 'cmVhdGVGaWxlKGQucGF0aCxkLmRhdGEpKX0oZixoKTt0cnl7dj1mLmxheW91dChsLGEsZCl9Y2F0Y2goRCl7TT1ELm1lc3NhZ2V9TT1mLmxhc3RFcnJvcigpfHxNfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koZil9aWYoIXYmJk0pdGhyb3cgSXcudW5sb2FkKCksbmV3IEVycm9yKE0p'@;
put 'O3JldHVybiB2fWFjeWNsaWMobCxhPSExLGQ9ITEpe2lmKCFsKXJldHVybnthY3ljbGljOiExLG51bV9yZXY6MCxvdXRGaWxlOiIifTtsZXQgaD1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6LGY9ITEsdj0wLE09IiIsRD0iIjt0cnl7dHJ5e2Y9aC5hY3ljbGljKGwsYSxkKSx2PWguYWN5Y2xp'@;
put 'Y19udW1fcmV2LE09aC5hY3ljbGljX291dEZpbGV9Y2F0Y2goWil7RD1aLm1lc3NhZ2V9RD1oLmxhc3RFcnJvcigpfHxEfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koaCl9aWYoRCl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJyb3IoRCk7cmV0dXJue2FjeWNsaWM6ZixudW1fcmV2OnYs'@;
put 'b3V0RmlsZTpNfX10cmVkKGwsYT0hMSxkPSExKXtpZighbClyZXR1cm57b3V0OiIiLGVycjoiIn07bGV0IGg9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeixmPSIiLHY9IiIsTT0iIjt0cnl7dHJ5e2gudHJlZChsLGEsZCksZj1oLnRyZWRfb3V0LHY9aC50cmVkX2Vycn1jYXRjaChEKXtNPUQu'@;
put 'bWVzc2FnZX1NPWgubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShoKX1pZighZiYmTSl0aHJvdyBJdy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJue291dDpmLGVycjp2fX11bmZsYXR0ZW4obCxhPTAsZD0hMSxoPTApe2lmKCFsKXJldHVybiIiO2xldCBm'@;
put 'PW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXosdj0iIixNPSIiO3RyeXt0cnl7dj1mLnVuZmxhdHRlbihsLGEsZCxoKX1jYXRjaChEKXtNPUQubWVzc2FnZX1NPWYubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShmKX1pZighdiYmTSl0aHJvdyBJdy51bmxvYWQo'@;
put 'KSxuZXcgRXJyb3IoTSk7cmV0dXJuIHZ9Y2lyY28obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImNpcmNvIixkKX1kb3QobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImRvdCIsZCl9ZmRwKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxh'@;
put 'LCJmZHAiLGQpfXNmZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInNmZHAiLGQpfW5lYXRvKGwsYT0ic3ZnIixkKXtyZXR1cm4gdGhpcy5sYXlvdXQobCxhLCJuZWF0byIsZCl9b3NhZ2UobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm9zYWdlIixk'@;
put 'KX1wYXRjaHdvcmsobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInBhdGNod29yayIsZCl9dHdvcGkobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsInR3b3BpIixkKX1ub3AobCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsImRvdCIsIm5vcCIpfW5vcDIobCl7'@;
put 'cmV0dXJuIHRoaXMubGF5b3V0KGwsImRvdCIsIm5vcDIiKX19O2Z1bmN0aW9uIFBOKGMpe3JldHVybiBPYmplY3QuYXNzaWduKHt9LGMpfWZ1bmN0aW9uIFM2KGMpe3JldHVybiBNYXRoLnJvdW5kKDEwMCpjKS8xMDB9ZnVuY3Rpb24gUThlKGMsbCl7aWYoInBvbHlnb24iPT1jLnRhZyl7KGE9'@;
put 'UE4oYykpLnRhZz0icGF0aCI7dmFyIGg9UE4oZD1jLmF0dHJpYnV0ZXMpLGY9ZC5wb2ludHM7aWYoInBvbHlnb24iPT1sLnRhZyl7KHY9Yy5iYm94KS5jeD12Lngrdi53aWR0aC8yLHYuY3k9di55K3YuaGVpZ2h0LzI7Zm9yKHZhciBEPWQucG9pbnRzLnNwbGl0KCIgIiksWj1ELm1hcChmdW5j'@;
put 'dGlvbihPbil7dmFyIHpyPU9uLnNwbGl0KCIsIik7cmV0dXJuW3pyWzBdLXYuY3gsenJbMV0tdi5jeV19KSxuZT1aW1oubGVuZ3RoLTFdWzBdLGNlPVpbWi5sZW5ndGgtMV1bMV0sYmU9MDtiZTxaLmxlbmd0aDtiZSsrLG5lPUVlLGNlPUJlKXt2YXIgcWU9KEVlPVpbYmVdWzBdKS1uZTtpZigw'@;
put 'IT0ocnQ9KEJlPVpbYmVdWzFdKS1jZSkmJjA8PShwdD1uZS1jZSpxZS9ydCkmJnB0PDEvMCYmKG5lPD1wdCYmcHQ8PUVlfHxFZTw9cHQmJnB0PD1uZSkpYnJlYWt9dmFyIGR0PVtbdi5jeCtwdCx2LmN5KzBdLmpvaW4oIiwiKV07Zj0oZHQ9KGR0PWR0LmNvbmNhdChELnNsaWNlKGJlKSkpLmNv'@;
put 'bmNhdChELnNsaWNlKDAsYmUpKSkuam9pbigiICIpfWguZD0iTSIrZisieiIsZGVsZXRlIGgucG9pbnRzLGEuYXR0cmlidXRlcz1ofWVsc2V7dmFyIGE7KGE9UE4oYykpLnRhZz0icGF0aCIsaD1QTihkPWMuYXR0cmlidXRlcyk7dmFyIGQsRWUsQmUscHQsSnQ9ZC5jeCx2bj1kLmN5LENuPWQu'@;
put 'cngsdG49ZC5yeTtpZigicG9seWdvbiI9PWwudGFnKXt2YXIgdjsodj1sLmJib3gpLmN4PXYueCt2LndpZHRoLzIsdi5jeT12Lnkrdi5oZWlnaHQvMjt2YXIgTW49bC5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpWzBdLnNwbGl0KCIsIikscnQ9KHFlPU1uWzBdLXYuY3gsTW5bMV0tdi5j'@;
put 'eSksZ3I9TWF0aC5zcXJ0KE1hdGgucG93KHFlLDIpK01hdGgucG93KHJ0LDIpKSxHbj1xZS9ncixvaT0tcnQvZ3J9ZWxzZSBHbj0xLG9pPTA7aC5kPSJNICIrSnQrIiAiK3ZuKyIgbSAiKyhFZT1DbipHbikrIiwiKyhCZT0tdG4qb2kpKyIgYSAiK0NuKyIsIit0bisiIDAgMSwwICIrKHFlPShw'@;
put 'dD1DbiotR24pLUVlKSsiLCIrKHJ0PS10biotb2ktQmUpKyIgYSAiK0NuKyIsIit0bisiIDAgMSwwICIrLXFlKyIsIistcnQrInoiLGRlbGV0ZSBoLmN4LGRlbGV0ZSBoLmN5LGRlbGV0ZSBoLnJ4LGRlbGV0ZSBoLnJ5LGEuYXR0cmlidXRlcz1ofXJldHVybiBhfWZ1bmN0aW9uIFR4dCgpe3Ry'@;
put 'eXtKOGUubG9hZCgpLnRoZW4oYT0+e2EubGF5b3V0KCIiLCJzdmciLCJkb3QiKSx0aGlzLmxheW91dFN5bmM9YS5sYXlvdXQuYmluZChhKSxudWxsPT10aGlzLl93b3JrZXImJnRoaXMuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpLHRoaXMuX2FmdGVySW5pdCYmdGhpcy5fYWZ0ZXJJ'@;
put 'bml0KCl9KX1jYXRjaHt9aWYobnVsbCE9dGhpcy5fd29ya2VyKXt2YXIgYz10aGlzLl92aXpVUkwsbD10aGlzO3RoaXMuX3dvcmtlclBvcnQub25tZXNzYWdlPWZ1bmN0aW9uKGEpe2wuX3dvcmtlckNhbGxiYWNrcy5zaGlmdCgpLmNhbGwobCxhKX0sYy5tYXRjaCgvXmh0dHBzPzpcL1wvfF5c'@;
put 'L1wvL2kpfHwoYz1uZXcgd2luZG93LlVSTChjLGRvY3VtZW50LmxvY2F0aW9uLmhyZWYpLmhyZWYpLFB0ZS5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OiIiLGVuZ2luZToiZG90Iix2aXpVUkw6Y30sZnVuY3Rpb24oYSl7fSksUHRlLmNhbGwodGhpcyx7dHlwZToidmVyc2lvbiJ9LGZ1'@;
put 'bmN0aW9uKGEpeyJ2ZXJzaW9uIj09PWEuZGF0YS50eXBlJiYobC5fZ3JhcGh2aXpWZXJzaW9uPWEuZGF0YS52ZXJzaW9uLGwuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpKX0pfX1mdW5jdGlvbiBQdGUoYyxsKXt0aGlzLl93b3JrZXJDYWxsYmFja3MucHVzaChsKSx0aGlzLl93b3Jr'@;
put 'ZXJQb3J0LnBvc3RNZXNzYWdlKGMpfWZ1bmN0aW9uIER4dChjLGwpe3ZhciBhPXRoaXMuX29wdGlvbnMua2V5TW9kZSxkPXRoaXMuX29wdGlvbnMudHdlZW5QYXRocyxoPXRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM7aWYoInN0cmluZyI9PXR5cGVvZiB0aGlzLl9vcHRpb25zLnR3ZWVuUHJl'@;
put 'Y2lzaW9uJiZ0aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIikpdmFyIGY9K3RoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uc3BsaXQoIiUiKVswXS8xMDAsdj10aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uLmluY2x1ZGVzKCIlIik7ZWxzZSBmPXRoaXMuX29w'@;
put 'dGlvbnMudHdlZW5QcmVjaXNpb24sdj0hMTt2YXIgTT10aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzLEQ9e30sWj10aGlzLl9kaWN0aW9uYXJ5fHx7fSxuZT17fSxjZT10aGlzLl9ub2RlRGljdGlvbmFyeXx8e307ZnVuY3Rpb24gcHQoR24sb2k9MCxfaSl7KGZ1bmN0aW9uIGJlKEdu'@;
put 'LG9pKXt2YXIgX2k9R24udGFnO2lmKCJpbmRleCI9PWEpR24ua2V5PW9pO2Vsc2UgaWYoIiMiIT1faVswXSlpZigiaWQiPT1hKUduLmtleT1Hbi5hdHRyaWJ1dGVzLmlkO2Vsc2UgaWYoInRpdGxlIj09YSl7dmFyIE9uPUduLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oenIpe3JldHVybiJ0aXRs'@;
put 'ZSI9PXpyLnRhZ30pO09uJiYoR24ua2V5PU9uLmNoaWxkcmVuLmxlbmd0aD4wP09uLmNoaWxkcmVuWzBdLnRleHQ6IiIpfW51bGw9PUduLmtleSYmKGgmJigiZWxsaXBzZSI9PV9pfHwicG9seWdvbiI9PV9pKSYmKF9pPSJwYXRoIiksR24ua2V5PV9pKyItIitvaSl9KShHbixvaSksZnVuY3Rp'@;
put 'b24gRWUoR24sb2kpe0duLmlkPShvaT9vaS5pZCsiLiI6IiIpK0duLmtleX0oR24sX2kpO3ZhciB6cj1aW0duLmlkXTsoZnVuY3Rpb24gQmUoR24pe0RbR24uaWRdPUdufSkoR24pLGZ1bmN0aW9uIHFlKEduLG9pKXtoJiZHbi5pZCBpbiBaJiYoInBvbHlnb24iPT1vaS50YWd8fCJlbGxpcHNl'@;
put 'Ij09b2kudGFnfHwicGF0aCI9PW9pLnRhZykmJihvaS50YWchPUduLnRhZ3x8InBvbHlnb24iPT1Hbi50YWcpJiYoInBhdGgiIT1vaS50YWcmJihHbi5hbHRlcm5hdGl2ZU9sZD1ROGUob2ksR24pKSwicGF0aCIhPUduLnRhZyYmKEduLmFsdGVybmF0aXZlTmV3PVE4ZShHbixvaSkpKX0oR24s'@;
put 'enIpLGZ1bmN0aW9uIHJ0KEduLG9pKXtpZihkJiZvaSYmKCJwYXRoIj09b2kudGFnfHxHbi5hbHRlcm5hdGl2ZU9sZCYmInBhdGgiPT1Hbi5hbHRlcm5hdGl2ZU9sZC50YWcpKXt2YXIgX2k9KEduLmFsdGVybmF0aXZlTmV3fHxHbikuYXR0cmlidXRlcy5kO2lmKEduLmFsdGVybmF0aXZlT2xk'@;
put 'KXZhciBPbj1UdGUoR24uYWx0ZXJuYXRpdmVPbGQpO2Vsc2UgT249VHRlKG9pKTsoR24uYWx0ZXJuYXRpdmVPbGR8fChHbi5hbHRlcm5hdGl2ZU9sZD17fSkpLnBvaW50cz1mdW5jdGlvbiBHTXQoYyxsLGEsZCl7Y29uc3QgaD1jLGY9aC5jbG9uZU5vZGUoKSx2PWguZ2V0VG90YWxMZW5ndGgo'@;
put 'KSxNPShmLnNldEF0dHJpYnV0ZSgiZCIsbCksZikuZ2V0VG90YWxMZW5ndGgoKSxEPVswXTtsZXQgWj0wO2NvbnN0IG5lPWQ/YTphL01hdGgubWF4KHYsTSk7Zm9yKDsoWis9bmUpPDE7KUQucHVzaChaKTtyZXR1cm4gRC5wdXNoKDEpLEQubWFwKGZ1bmN0aW9uKGJlKXtjb25zdCBFZT1oLmdl'@;
put 'dFBvaW50QXRMZW5ndGgoYmUqdiksQmU9Zi5nZXRQb2ludEF0TGVuZ3RoKGJlKk0pO3JldHVybltbRWUueCxFZS55XSxbQmUueCxCZS55XV19KX0oT24sX2ksZix2KX19KEduLHpyKTt2YXIgSm49e307R24uY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihEcil7dmFyICRyPURyLnRhZzsoImVs'@;
put 'bGlwc2UiPT0kcnx8InBvbHlnb24iPT0kcikmJigkcj0icGF0aCIpLG51bGw9PUpuWyRyXSYmKEpuWyRyXT0wKSxwdChEcixKblskcl0rKyxHbil9KX1mdW5jdGlvbiB2bihHbil7KGZ1bmN0aW9uIGR0KEduKXtpZihNJiZHbi5wYXJlbnQmJiJub2RlIj09R24ucGFyZW50LmF0dHJpYnV0ZXMu'@;
put 'Y2xhc3MmJiJ0aXRsZSI9PUduLnRhZyl7aWYoR24uY2hpbGRyZW4ubGVuZ3RoPjApdmFyIE9uPUduLmNoaWxkcmVuWzBdLnRleHQ7ZWxzZSBPbj0iIjtuZVtPbl09R24ucGFyZW50fX0pKEduKSxmdW5jdGlvbiBKdChHbil7dmFyIF9pPUduLnRhZztpZihNJiYhWltHbi5pZF0mJkduLnBhcmVu'@;
put 'dCYmJDhlKEduKSYmKCJwYXRoIj09X2l8fCJwb2x5Z29uIj09X2kpKXtpZigicG9seWdvbiI9PV9pKXt2YXIgenI9R24ucGFyZW50LmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oSHIpe3JldHVybiJwYXRoIj09SHIudGFnfSk7enImJihHbi50b3RhbExlbmd0aD16ci50b3RhbExlbmd0aCl9dmFy'@;
put 'IEpuPWZ1bmN0aW9uIHFNdChjKXtyZXR1cm4gZnVuY3Rpb24gS010KGMpe3JldHVybiJlZGdlIj09Yy5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcz9jLnBhcmVudDpjLnBhcmVudC5wYXJlbnQucGFyZW50fShjKS5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKGwpe3JldHVybiJ0aXRsZSI9PWwudGFn'@;
put 'fSl9KEduKSxEcj1Kbi5jaGlsZHJlblswXSwkcj1Eci50ZXh0LnNwbGl0KCItPiIpOzIhPSRyLmxlbmd0aCYmKCRyPURyLnRleHQuc3BsaXQoIi0tIikpO3ZhciB3aT0kclswXSx0bz1uZVt3aV07aWYoT2JqZWN0Lmhhc093bihjZSx3aSkpe3ZhciBwbz1jZVt3aV07aWYoKE50PXRvLmNoaWxk'@;
put 'cmVuLmZpbmRJbmRleChmdW5jdGlvbihIcixLcil7cmV0dXJuImciPT1Ici50YWd9KSk+PTApe3ZhciB2dD10by5jaGlsZHJlbltOdF0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKEhyLEtyKXtyZXR1cm4iYSI9PUhyLnRhZ30pO3RvPXRvLmNoaWxkcmVuW050XS5jaGlsZHJlblt2dF19'@;
put 'KE50PXBvLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihIcixLcil7cmV0dXJuImciPT1Ici50YWd9KSk+PTAmJih2dD1wby5jaGlsZHJlbltOdF0uY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKEtyLGFuKXtyZXR1cm4iYSI9PUtyLnRhZ30pLHBvPXBvLmNoaWxkcmVuW050XS5jaGls'@;
put 'ZHJlblt2dF0pO2Zvcih2YXIgSHQ9dG8uY2hpbGRyZW4sTnQ9MDtOdDxIdC5sZW5ndGg7TnQrKylpZigicG9seWdvbiI9PUh0W050XS50YWd8fCJlbGxpcHNlIj09SHRbTnRdLnRhZ3x8InBhdGgiPT1IdFtOdF0udGFnfHwidGV4dCI9PUh0W050XS50YWcpe3ZhciBIbj1IdFtOdF07YnJlYWt9'@;
put 'dmFyIHRyPXBvLmNoaWxkcmVuO2ZvcihOdD0wO050PHRyLmxlbmd0aDtOdCsrKWlmKCJwb2x5Z29uIj09dHJbTnRdLnRhZ3x8ImVsbGlwc2UiPT10cltOdF0udGFnfHwicGF0aCI9PXRyW050XS50YWd8fCJ0ZXh0Ij09dHJbTnRdLnRhZyl7dmFyIG9yPXRyW050XTticmVha31Hbi5vZmZzZXQ9'@;
put 'b3ImJkhuP3t4Om9yLmNlbnRlci54LUhuLmNlbnRlci54LHk6b3IuY2VudGVyLnktSG4uY2VudGVyLnl9Ont4OjAseTowfX19fShHbiksR24uY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihvaSl7dm4ob2kpfSl9dGhpcy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0RW5kIix0aGlzKTt2YXIgQ249'@;
put 'd3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoImRpdiIpLE1uPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGMsImltYWdlL3N2Zyt4bWwiKTtDbi5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gTW4uZG9jdW1lbnRFbGVtZW50fSk7dmFy'@;
put 'IEdyPWV2KENuLnNlbGVjdCgic3ZnIikpO3RoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFFeHRyYWN0RW5kIix0aGlzKSxwdChHciksdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMUVuZCIsdGhpcyksdm4oR3IpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFz'@;
put 'czJFbmQiLHRoaXMpLHRoaXMuX2RhdGE9R3IsdGhpcy5fZGljdGlvbmFyeT1ELHRoaXMuX25vZGVEaWN0aW9uYXJ5PW5lLHRoaXMuX2V4dHJhY3REYXRhPWZ1bmN0aW9uKEduLG9pLF9pKXt2YXIgT249ZXYoR24pO3JldHVybiBwdChPbixvaSxfaSksdm4oT24pLE9ufSx0aGlzLl9idXN5PSEx'@;
put 'LHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzRW5kIix0aGlzKSxsJiZsLmNhbGwodGhpcyksdGhpcy5fcXVldWUubGVuZ3RoPjAmJnRoaXMuX3F1ZXVlLnNoaWZ0KCkuY2FsbCh0aGlzKX1mdW5jdGlvbiBGTihjLGwpe2lmKChhPShjPWw/Yy50b0V4cG9uZW50aWFsKGwtMSk6Yy50'@;
put 'b0V4cG9uZW50aWFsKCkpLmluZGV4T2YoImUiKSk8MClyZXR1cm4gbnVsbDt2YXIgYSxkPWMuc2xpY2UoMCxhKTtyZXR1cm5bZC5sZW5ndGg+MT9kWzBdK2Quc2xpY2UoMik6ZCwrYy5zbGljZShhKzEpXX12YXIgZTdlLHRFdD0vXig/OiguKT8oWzw+PV5dKSk/KFsrXC0oIF0pPyhbJCNdKT8o'@;
put 'MCk/KFxkKyk/KCwpPyhcLlxkKyk/KH4pPyhbYS16JV0pPyQvaTtmdW5jdGlvbiBGdGUoYyl7aWYoIShsPXRFdC5leGVjKGMpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2MpO3ZhciBsO3JldHVybiBuZXcgSHRlKHtmaWxsOmxbMV0sYWxpZ246bFsyXSxzaWduOmxbM10s'@;
put 'c3ltYm9sOmxbNF0semVybzpsWzVdLHdpZHRoOmxbNl0sY29tbWE6bFs3XSxwcmVjaXNpb246bFs4XSYmbFs4XS5zbGljZSgxKSx0cmltOmxbOV0sdHlwZTpsWzEwXX0pfWZ1bmN0aW9uIEh0ZShjKXt0aGlzLmZpbGw9dm9pZCAwPT09Yy5maWxsPyIgIjpjLmZpbGwrIiIsdGhpcy5hbGlnbj12'@;
put 'b2lkIDA9PT1jLmFsaWduPyI+IjpjLmFsaWduKyIiLHRoaXMuc2lnbj12b2lkIDA9PT1jLnNpZ24/Ii0iOmMuc2lnbisiIix0aGlzLnN5bWJvbD12b2lkIDA9PT1jLnN5bWJvbD8iIjpjLnN5bWJvbCsiIix0aGlzLnplcm89ISFjLnplcm8sdGhpcy53aWR0aD12b2lkIDA9PT1jLndpZHRoP3Zv'@;
put 'aWQgMDorYy53aWR0aCx0aGlzLmNvbW1hPSEhYy5jb21tYSx0aGlzLnByZWNpc2lvbj12b2lkIDA9PT1jLnByZWNpc2lvbj92b2lkIDA6K2MucHJlY2lzaW9uLHRoaXMudHJpbT0hIWMudHJpbSx0aGlzLnR5cGU9dm9pZCAwPT09Yy50eXBlPyIiOmMudHlwZSsiIn1mdW5jdGlvbiB0N2UoYyxs'@;
put 'KXt2YXIgYT1GTihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdO3JldHVybiBoPDA/IjAuIituZXcgQXJyYXkoLWgpLmpvaW4oIjAiKStkOmQubGVuZ3RoPmgrMT9kLnNsaWNlKDAsaCsxKSsiLiIrZC5zbGljZShoKzEpOmQrbmV3IEFycmF5KGgtZC5sZW5ndGgrMiku'@;
put 'am9pbigiMCIpfUZ0ZS5wcm90b3R5cGU9SHRlLnByb3RvdHlwZSxIdGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZmlsbCt0aGlzLmFsaWduK3RoaXMuc2lnbit0aGlzLnN5bWJvbCsodGhpcy56ZXJvPyIwIjoiIikrKHZvaWQgMD09PXRoaXMud2lkdGg/IiI6'@;
put 'TWF0aC5tYXgoMSwwfHRoaXMud2lkdGgpKSsodGhpcy5jb21tYT8iLCI6IiIpKyh2b2lkIDA9PT10aGlzLnByZWNpc2lvbj8iIjoiLiIrTWF0aC5tYXgoMCwwfHRoaXMucHJlY2lzaW9uKSkrKHRoaXMudHJpbT8ifiI6IiIpK3RoaXMudHlwZX07Y29uc3QgbjdlPXsiJSI6KGMsbCk9PigxMDAq'@;
put 'YykudG9GaXhlZChsKSxiOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMiksYzpjPT5jKyIiLGQ6ZnVuY3Rpb24gWHh0KGMpe3JldHVybiBNYXRoLmFicyhjPU1hdGgucm91bmQoYykpPj0xZTIxP2MudG9Mb2NhbGVTdHJpbmcoImVuIikucmVwbGFjZSgvLC9nLCIiKTpjLnRvU3RyaW5nKDEw'@;
put 'KX0sZTooYyxsKT0+Yy50b0V4cG9uZW50aWFsKGwpLGY6KGMsbCk9PmMudG9GaXhlZChsKSxnOihjLGwpPT5jLnRvUHJlY2lzaW9uKGwpLG86Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZyg4KSxwOihjLGwpPT50N2UoMTAwKmMsbCkscjp0N2UsczpmdW5jdGlvbiByRXQoYyxsKXt2YXIgYT1G'@;
put 'TihjLGwpO2lmKCFhKXJldHVybiBjKyIiO3ZhciBkPWFbMF0saD1hWzFdLGY9aC0oZTdlPTMqTWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGgvMykpKSkrMSx2PWQubGVuZ3RoO3JldHVybiBmPT09dj9kOmY+dj9kK25ldyBBcnJheShmLXYrMSkuam9pbigiMCIpOmY+MD9kLnNs'@;
put 'aWNlKDAsZikrIi4iK2Quc2xpY2UoZik6IjAuIituZXcgQXJyYXkoMS1mKS5qb2luKCIwIikrRk4oYyxNYXRoLm1heCgwLGwrZi0xKSlbMF19LFg6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSx4OmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMTYpfTtmdW5j'@;
put 'dGlvbiByN2UoYyl7cmV0dXJuIGN9dmFyIEhOLHRmLGk3ZT1BcnJheS5wcm90b3R5cGUubWFwLG83ZT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXTshZnVuY3Rpb24gYUV0KGMpe0hOPWZ1bmN0aW9uIGlFdChj'@;
put 'KXt2YXIgbD12b2lkIDA9PT1jLmdyb3VwaW5nfHx2b2lkIDA9PT1jLnRob3VzYW5kcz9yN2U6ZnVuY3Rpb24gUXh0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBoPWEubGVuZ3RoLGY9W10sdj0wLE09Y1swXSxEPTA7aD4wJiZNPjAmJihEK00rMT5kJiYoTT1NYXRoLm1heCgx'@;
put 'LGQtRCkpLGYucHVzaChhLnN1YnN0cmluZyhoLT1NLGgrTSkpLCEoKEQrPU0rMSk+ZCkpOylNPWNbdj0odisxKSVjLmxlbmd0aF07cmV0dXJuIGYucmV2ZXJzZSgpLmpvaW4obCl9fShpN2UuY2FsbChjLmdyb3VwaW5nLE51bWJlciksYy50aG91c2FuZHMrIiIpLGE9dm9pZCAwPT09Yy5jdXJy'@;
put 'ZW5jeT8iIjpjLmN1cnJlbmN5WzBdKyIiLGQ9dm9pZCAwPT09Yy5jdXJyZW5jeT8iIjpjLmN1cnJlbmN5WzFdKyIiLGg9dm9pZCAwPT09Yy5kZWNpbWFsPyIuIjpjLmRlY2ltYWwrIiIsZj12b2lkIDA9PT1jLm51bWVyYWxzP3I3ZTpmdW5jdGlvbiBlRXQoYyl7cmV0dXJuIGZ1bmN0aW9uKGwp'@;
put 'e3JldHVybiBsLnJlcGxhY2UoL1swLTldL2csZnVuY3Rpb24oYSl7cmV0dXJuIGNbK2FdfSl9fShpN2UuY2FsbChjLm51bWVyYWxzLFN0cmluZykpLHY9dm9pZCAwPT09Yy5wZXJjZW50PyIlIjpjLnBlcmNlbnQrIiIsTT12b2lkIDA9PT1jLm1pbnVzPyJcdTIyMTIiOmMubWludXMrIiIsRD12'@;
put 'b2lkIDA9PT1jLm5hbj8iTmFOIjpjLm5hbisiIjtmdW5jdGlvbiBaKGNlKXt2YXIgYmU9KGNlPUZ0ZShjZSkpLmZpbGwsRWU9Y2UuYWxpZ24sQmU9Y2Uuc2lnbixxZT1jZS5zeW1ib2wscnQ9Y2UuemVybyxwdD1jZS53aWR0aCxkdD1jZS5jb21tYSxKdD1jZS5wcmVjaXNpb24sdm49Y2UudHJp'@;
put 'bSxDbj1jZS50eXBlOyJuIj09PUNuPyhkdD0hMCxDbj0iZyIpOm43ZVtDbl18fCh2b2lkIDA9PT1KdCYmKEp0PTEyKSx2bj0hMCxDbj0iZyIpLChydHx8IjAiPT09YmUmJiI9Ij09PUVlKSYmKHJ0PSEwLGJlPSIwIixFZT0iPSIpO3ZhciB0bj0iJCI9PT1xZT9hOiIjIj09PXFlJiYvW2JveFhd'@;
put 'Ly50ZXN0KENuKT8iMCIrQ24udG9Mb3dlckNhc2UoKToiIixNbj0iJCI9PT1xZT9kOi9bJXBdLy50ZXN0KENuKT92OiIiLENyPW43ZVtDbl0sR3I9L1tkZWZncHJzJV0vLnRlc3QoQ24pO2Z1bmN0aW9uIGdyKEduKXt2YXIgT24senIsSm4sb2k9dG4sX2k9TW47aWYoImMiPT09Q24pX2k9Q3Io'@;
put 'R24pK19pLEduPSIiO2Vsc2V7dmFyIERyPShHbj0rR24pPDB8fDEvR248MDtpZihHbj1pc05hTihHbik/RDpDcihNYXRoLmFicyhHbiksSnQpLHZuJiYoR249ZnVuY3Rpb24gbkV0KGMpe2U6Zm9yKHZhciBoLGw9Yy5sZW5ndGgsYT0xLGQ9LTE7YTxsOysrYSlzd2l0Y2goY1thXSl7Y2FzZSIu'@;
put 'IjpkPWg9YTticmVhaztjYXNlIjAiOjA9PT1kJiYoZD1hKSxoPWE7YnJlYWs7ZGVmYXVsdDppZighK2NbYV0pYnJlYWsgZTtkPjAmJihkPTApfXJldHVybiBkPjA/Yy5zbGljZSgwLGQpK2Muc2xpY2UoaCsxKTpjfShHbikpLERyJiYwPT0rR24mJiIrIiE9PUJlJiYoRHI9ITEpLG9pPShEcj8i'@;
put 'KCI9PT1CZT9CZTpNOiItIj09PUJlfHwiKCI9PT1CZT8iIjpCZSkrb2ksX2k9KCJzIj09PUNuP283ZVs4K2U3ZS8zXToiIikrX2krKERyJiYiKCI9PT1CZT8iKSI6IiIpLEdyKWZvcihPbj0tMSx6cj1Hbi5sZW5ndGg7KytPbjx6cjspaWYoNDg+KEpuPUduLmNoYXJDb2RlQXQoT24pKXx8Sm4+'@;
put 'NTcpe19pPSg0Nj09PUpuP2grR24uc2xpY2UoT24rMSk6R24uc2xpY2UoT24pKStfaSxHbj1Hbi5zbGljZSgwLE9uKTticmVha319ZHQmJiFydCYmKEduPWwoR24sMS8wKSk7dmFyICRyPW9pLmxlbmd0aCtHbi5sZW5ndGgrX2kubGVuZ3RoLHdpPSRyPHB0P25ldyBBcnJheShwdC0kcisxKS5q'@;
put 'b2luKGJlKToiIjtzd2l0Y2goZHQmJnJ0JiYoR249bCh3aStHbix3aS5sZW5ndGg/cHQtX2kubGVuZ3RoOjEvMCksd2k9IiIpLEVlKXtjYXNlIjwiOkduPW9pK0duK19pK3dpO2JyZWFrO2Nhc2UiPSI6R249b2krd2krR24rX2k7YnJlYWs7Y2FzZSJeIjpHbj13aS5zbGljZSgwLCRyPXdpLmxl'@;
put 'bmd0aD4+MSkrb2krR24rX2krd2kuc2xpY2UoJHIpO2JyZWFrO2RlZmF1bHQ6R249d2krb2krR24rX2l9cmV0dXJuIGYoR24pfXJldHVybiBKdD12b2lkIDA9PT1KdD82Oi9bZ3Byc10vLnRlc3QoQ24pP01hdGgubWF4KDEsTWF0aC5taW4oMjEsSnQpKTpNYXRoLm1heCgwLE1hdGgubWluKDIw'@;
put 'LEp0KSksZ3IudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gY2UrIiJ9LGdyfXJldHVybntmb3JtYXQ6Wixmb3JtYXRQcmVmaXg6ZnVuY3Rpb24gbmUoY2UsYmUpe3ZhciBFZT1aKCgoY2U9RnRlKGNlKSkudHlwZT0iZiIsY2UpKSxCZT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5m'@;
put 'bG9vcihmdW5jdGlvbiBKeHQoYyl7cmV0dXJuKGM9Rk4oTWF0aC5hYnMoYykpKT9jWzFdOk5hTn0oYmUpLzMpKSkscWU9TWF0aC5wb3coMTAsLUJlKSxydD1vN2VbOCtCZS8zXTtyZXR1cm4gZnVuY3Rpb24ocHQpe3JldHVybiBFZShxZSpwdCkrcnR9fX19KGMpLHRmPUhOLmZvcm1hdH0oe3Ro'@;
put 'b3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdfSk7Y29uc3QgTnRlPU1hdGguUEksVnRlPTIqTnRlLG52PTFlLTYsY0V0PVZ0ZS1udjtmdW5jdGlvbiBhN2UoYyl7dGhpcy5fKz1jWzBdO2ZvcihsZXQgbD0xLGE9Yy5sZW5ndGg7bDxhOysrbCl0aGlzLl8rPWFyZ3Vt'@;
put 'ZW50c1tsXStjW2xdfWNsYXNzIEJ0ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9bnVsbD09bD9hN2U6ZnVuY3Rpb24gdUV0KGMpe2xldCBsPU1hdGguZmxvb3IoYyk7aWYoIShsPj0wKSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2N9YCk7aWYobD4xNSlyZXR1cm4gYTdlO2NvbnN0IGE9MTAqKmw7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IGg9MSxmPWQubGVuZ3RoO2g8ZjsrK2gpdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50c1toXSph'@;
put 'KS9hK2RbaF19fShsKX1tb3ZlVG8obCxhKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9YH1jbG9zZVBhdGgoKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlzLl9hcHBl'@;
put 'bmRgWmApfWxpbmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rbH0sJHt0aGlzLl95MT0rYX1gfXF1YWRyYXRpY0N1cnZlVG8obCxhLGQsaCl7dGhpcy5fYXBwZW5kYFEkeytsfSwkeythfSwke3RoaXMuX3gxPStkfSwke3RoaXMuX3kxPStofWB9YmV6aWVyQ3VydmVUbyhsLGEs'@;
put 'ZCxoLGYsdil7dGhpcy5fYXBwZW5kYEMkeytsfSwkeythfSwkeytkfSwkeytofSwke3RoaXMuX3gxPStmfSwke3RoaXMuX3kxPSt2fWB9YXJjVG8obCxhLGQsaCxmKXtpZihsPStsLGE9K2EsZD0rZCxoPStoLChmPStmKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2Z9'@;
put 'YCk7bGV0IHY9dGhpcy5feDEsTT10aGlzLl95MSxEPWQtbCxaPWgtYSxuZT12LWwsY2U9TS1hLGJlPW5lKm5lK2NlKmNlO2lmKG51bGw9PT10aGlzLl94MSl0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDE9bH0sJHt0aGlzLl95MT1hfWA7ZWxzZSBpZihiZT5udilpZihNYXRoLmFicyhjZSpELVoq'@;
put 'bmUpPm52JiZmKXtsZXQgRWU9ZC12LEJlPWgtTSxxZT1EKkQrWipaLHJ0PUVlKkVlK0JlKkJlLHB0PU1hdGguc3FydChxZSksZHQ9TWF0aC5zcXJ0KGJlKSxKdD1mKk1hdGgudGFuKChOdGUtTWF0aC5hY29zKChxZStiZS1ydCkvKDIqcHQqZHQpKSkvMiksdm49SnQvZHQsQ249SnQvcHQ7TWF0'@;
put 'aC5hYnModm4tMSk+bnYmJnRoaXMuX2FwcGVuZGBMJHtsK3ZuKm5lfSwke2Erdm4qY2V9YCx0aGlzLl9hcHBlbmRgQSR7Zn0sJHtmfSwwLDAsJHsrKGNlKkVlPm5lKkJlKX0sJHt0aGlzLl94MT1sK0NuKkR9LCR7dGhpcy5feTE9YStDbipafWB9ZWxzZSB0aGlzLl9hcHBlbmRgTCR7dGhpcy5f'@;
put 'eDE9bH0sJHt0aGlzLl95MT1hfWB9YXJjKGwsYSxkLGgsZix2KXtpZihsPStsLGE9K2Esdj0hIXYsKGQ9K2QpPDApdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7ZH1gKTtsZXQgTT1kKk1hdGguY29zKGgpLEQ9ZCpNYXRoLnNpbihoKSxaPWwrTSxuZT1hK0QsY2U9MV52LGJl'@;
put 'PXY/aC1mOmYtaDtudWxsPT09dGhpcy5feDE/dGhpcy5fYXBwZW5kYE0ke1p9LCR7bmV9YDooTWF0aC5hYnModGhpcy5feDEtWik+bnZ8fE1hdGguYWJzKHRoaXMuX3kxLW5lKT5udikmJnRoaXMuX2FwcGVuZGBMJHtafSwke25lfWAsZCYmKGJlPDAmJihiZT1iZSVWdGUrVnRlKSxiZT5jRXQ/'@;
put 'dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwxLCR7Y2V9LCR7bC1NfSwke2EtRH1BJHtkfSwke2R9LDAsMSwke2NlfSwke3RoaXMuX3gxPVp9LCR7dGhpcy5feTE9bmV9YDpiZT5udiYmdGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwkeysoYmU+PU50ZSl9LCR7Y2V9LCR7dGhpcy5feDE9bCtk'@;
put 'Kk1hdGguY29zKGYpfSwke3RoaXMuX3kxPWErZCpNYXRoLnNpbihmKX1gKX1yZWN0KGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1oJHtkPStkfXYkeytofWgkey1kfVpgfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMu'@;
put 'X319ZnVuY3Rpb24gczdlKCl7cmV0dXJuIG5ldyBCdGV9ZnVuY3Rpb24gZEV0KGMsbCxhLGQpe3JldHVybiBsPS1sLGQ9LWQsW2MsbF09W2MqYS1sKmQsYypkK2wqYV0sW2MsbD0tbF19ZnVuY3Rpb24gbDdlKGMsbCxhLGQsaCxmLHYpe3ZhciBEPWV2KGg3ZS5jYWxsKHRoaXMsZikpO2MuZGF0'@;
put 'YShbRF0pLExBLmNhbGwoYy5ub2RlKCksRCksYzdlKGMsbCxhLGQsaCxmLHYpfWZ1bmN0aW9uIGM3ZShjLGwsYSxkLGgsZix2KXt2YXIgTT12LnNob3J0ZW5pbmd8fDAsY2U9W1swLC0zLjVdLFsxMCwwXSxbMCwzLjVdLFswLC0zLjVdXSxiZT1kLWwsRWU9aC1hLEJlPU1hdGguc3FydChiZSpi'@;
put 'ZStFZSpFZSk7aWYoMD09QmUpdmFyIHFlPTEscnQ9MDtlbHNlIHFlPWJlL0JlLHJ0PUVlL0JlO2lmKGQ9bCsoQmUtTS0xMC0uMSkqcWUsaD1hKyhCZS1NLTEwLS4xKSpydCxmLlVSTHx8Zi50b29sdGlwKXZhciBwdD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RX'@;
put 'aXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIiksZHQ9cHQuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLEp0PXB0LnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInBvbHlnb24iKTtlbHNlIGR0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicGF0aCIpLEp0'@;
put 'PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO3ZhciB2bj1zN2UoKTt2bi5tb3ZlVG8obCxhKSx2bi5saW5lVG8oZCxoKSxkdC5hdHRyKCJkIix2biksZD1sKyhCZS1NLTEwKSpxZSxoPWErKEJlLU0tMTApKnJ0O2Zvcih2YXIgQ249MDtDbjxjZS5sZW5ndGg7Q24r'@;
put 'KyljZVtDbl09ZEV0KCh0bj1jZVtDbl0pWzBdLHRuWzFdLHFlLHJ0KTtmb3IoQ249MDtDbjxjZS5sZW5ndGg7Q24rKyljZVtDbl09W2QrKHRuPWNlW0NuXSlbMF0saCt0blsxXV07dmFyIE1uPVtdO2ZvcihDbj0wO0NuPGNlLmxlbmd0aDtDbisrKXt2YXIgdG47TW4ucHVzaCgodG49Y2VbQ25d'@;
put 'KS5qb2luKCIsIikpfXZhciBDcj1Nbi5qb2luKCIgIik7cmV0dXJuIEp0LmF0dHIoInBvaW50cyIsQ3IpLHRoaXN9ZnVuY3Rpb24gdTdlKCl7cmV0dXJuIHRoaXMuX2RyYXduRWRnZT8odGhpcy5fZHJhd25FZGdlLmcucmVtb3ZlKCksdGhpcy5fZHJhd25FZGdlPW51bGwsdGhpcyk6dGhpc31m'@;
put 'dW5jdGlvbiBkN2UoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlP3RoaXMuX2RyYXduRWRnZS5nOndzKG51bGwpfWZ1bmN0aW9uIGg3ZShjKXt2YXIgbD0iIjtmb3IodmFyIGEgb2YgT2JqZWN0LmtleXMoYykpbnVsbCE9Y1thXSYmKGwrPScgIicrYSsnIj0iJytjW2FdKyciJyk7dmFyIGg9dGhp'@;
put 'cy5sYXlvdXRTeW5jKCJkaWdyYXBoIHthIC0+IGIgWyIrbCsiXX0iLCJzdmciLCJkb3QiKSx2PShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGgsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4gd3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQo'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdi5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5lZGdlIil9ZnVuY3Rpb24gZjdlKGMsbCxhLGQsaCxmKXt2YXIgTT1ldih2N2UuY2FsbCh0aGlzLGQsaCkpO3JldHVybiBjLmRhdGEoW01dKSxMQS5jYWxsKGMubm9kZSgpLE0pLHA3ZShjLGwsYSxoKSx0aGlz'@;
put 'fWZ1bmN0aW9uIHA3ZShjLGwsYSxkLGgpe2lmKGQuVVJMfHxkLnRvb2x0aXApdmFyIGY9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpO2Vsc2UgZj1jO3ZhciB2PWYuc2VsZWN0QWxsKCJlbGxpcHNlLHBvbHlnb24s'@;
put 'cGF0aCxwb2x5bGluZSIpLE09Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7aWYoMCE9di5zaXplKCkpe3ZhciBEPXYubm9kZSgpLmdldEJCb3goKTtELmN4PUQueCtELndpZHRoLzIsRC5jeT1ELnkrRC5oZWlnaHQvMn1lbHNlIDAhPU0uc2l6ZSgpJiYoRD17eDorTS5h'@;
put 'dHRyKCJ4IikseTorTS5hdHRyKCJ5Iiksd2lkdGg6MCxoZWlnaHQ6MCxjeDorTS5hdHRyKCJ4IiksY3k6K00uYXR0cigieSIpfSk7cmV0dXJuIHYuZWFjaChmdW5jdGlvbihaLG5lKXt2YXIgY2U9d3ModGhpcyk7aWYoY2UuYXR0cigiY3giKSljZS5hdHRyKCJjeCIsUzYobCkpLmF0dHIoImN5'@;
put 'IixTNihhKSk7ZWxzZSBpZihjZS5hdHRyKCJwb2ludHMiKSl7dmFyIGJlPWNlLmF0dHIoInBvaW50cyIpLnRyaW0oKTtjZS5hdHRyKCJwb2ludHMiLGZ1bmN0aW9uIHh4dChmLGwsYSl7dmFyIGgsZD0oaD1mLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5zcGxpdCgiLCIp'@;
put 'fSk7cmV0dXJuIGQ9aC5tYXAoZnVuY3Rpb24odil7cmV0dXJuW1M2KCtsKyArdi5zcGxpdCgiLCIpWzBdKSxTNigrYSsgK3Yuc3BsaXQoIiwiKVsxXSldfSksKGg9ZC5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpLmpvaW4oIiAiKX0oYmUsbC1ELmN4LGEtRC5jeSkpfWVs'@;
put 'c2V7dmFyIEVlPWNlLmF0dHIoImQiKTtjZS5hdHRyKCJkIixmdW5jdGlvbiBFeHQoYyxsLGEpeyhmPWMuc3BsaXQoL1tBLVogXS8pKS5zaGlmdCgpO3ZhciBkPWMuc3BsaXQoL1teW0EtWiBdKy8pLGY9KGYubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LnNwbGl0KCIsIil9KSxmLm1hcChmdW5j'@;
put 'dGlvbih2KXtyZXR1cm5bUzYoK2wrICt2LnNwbGl0KCIsIilbMF0pLFM2KCthKyArdi5zcGxpdCgiLCIpWzFdKV19KS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpO3JldHVybiBkLnJlZHVjZShmdW5jdGlvbih2LE0sRCl7cmV0dXJuIHYuY29uY2F0KE0sZltEXSl9LFtd'@;
put 'KS5qb2luKCIiKX0oRWUsbC1ELmN4LGEtRC5jeSkpfX0pLDAhPU0uc2l6ZSgpJiZNLmF0dHIoIngiLFM2KCtNLmF0dHIoIngiKStsLUQuY3gpKS5hdHRyKCJ5IixTNigrTS5hdHRyKCJ5IikrYS1ELmN5KSksdGhpc31mdW5jdGlvbiBnN2UoKXtpZighdGhpcy5fZHJhd25Ob2RlKXJldHVybiB0'@;
put 'aGlzO3ZhciBjPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBjLmVtcHR5KCl8fGMucmVtb3ZlKCksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc31mdW5jdGlvbiBtN2UoKXtyZXR1cm4gdGhpcy5fZHJhd25Ob2RlP3RoaXMuX2RyYXduTm9kZS5nOndzKG51bGwpfWZ1bmN0aW9uIHY3ZShjLGwp'@;
put 'e3ZhciBhPSIiO2Zvcih2YXIgZCBvZiBPYmplY3Qua2V5cyhsKSludWxsIT1sW2RdJiYoYSs9JyAiJytkKyciPSInK2xbZF0rJyInKTt2YXIgZj10aGlzLmxheW91dFN5bmMoJ2dyYXBoIHsiJytjKyciIFsnK2ErIl19Iiwic3ZnIiwiZG90IiksTT0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBh'@;
put 'cnNlRnJvbVN0cmluZyhmLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIHdzKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIE0uZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIubm9kZSIpfWZ1bmN0aW9uIE5OKGMpe3NlbGYuZG9jdW1l'@;
put 'bnQ9e30sYy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihsKXtsZXQgYT1zZWxmWyJAaHBjYy1qcy93YXNtIl07bnVsbD09YSYmbC5kYXRhLnZpelVSTCYmKGltcG9ydFNjcmlwdHMobC5kYXRhLnZpelVSTCksYT1zZWxmWyJAaHBjYy1qcy93YXNtIl0pLCJ2ZXJzaW9uIiE9'@;
put 'bC5kYXRhLnR5cGU/YS5HcmFwaHZpei5sb2FkKCkudGhlbihkPT57Y29uc3QgaD1kLmxheW91dChsLmRhdGEuZG90LCJzdmciLGwuZGF0YS5lbmdpbmUsbC5kYXRhLm9wdGlvbnMpO2MucG9zdE1lc3NhZ2UoaD97dHlwZToiZG9uZSIsc3ZnOmh9OmwuZGF0YS52aXpVUkw/e3R5cGU6ImluaXQi'@;
put 'fTp7dHlwZToic2tpcCJ9KX0pLmNhdGNoKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJlcnJvciIsZXJyb3I6ZC5tZXNzYWdlfSl9KTphLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJ2ZXJzaW9uIix2ZXJzaW9uOmQudmVyc2lvbigpfSl9KX0pfWZ1bmN0'@;
put 'aW9uIF9FdCgpe05OKHNlbGYpfWZ1bmN0aW9uIHdFdCgpe3NlbGYub25jb25uZWN0PWZ1bmN0aW9uKGMpe2NvbnN0IGw9Yy5wb3J0c1swXTtOTihsKSxsLnN0YXJ0KCl9fWZ1bmN0aW9uIGp0ZShjLGwpe2lmKHRoaXMuX29wdGlvbnM9e3VzZVdvcmtlcjohMCx1c2VTaGFyZWRXb3JrZXI6ITEs'@;
put 'ZW5naW5lOiJkb3QiLGtleU1vZGU6InRpdGxlIixmYWRlOiEwLHR3ZWVuUGF0aHM6ITAsdHdlZW5TaGFwZXM6ITAsY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczohMCx0d2VlblByZWNpc2lvbjoxLGdyb3dFbnRlcmluZ0VkZ2VzOiEwLHpvb206ITAsem9vbVNjYWxlRXh0ZW50OlsuMSwxMF0s'@;
put 'em9vbVRyYW5zbGF0ZUV4dGVudDpbWy0xLzAsLTEvMF0sWzEvMCwxLzBdXSx3aWR0aDpudWxsLGhlaWdodDpudWxsLHNjYWxlOjEsZml0OiExfSxsIGluc3RhbmNlb2YgT2JqZWN0KWZvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhsKSl0aGlzLl9vcHRpb25zW2FdPWxbYV07ZWxzZSJib29sZWFu'@;
put 'Ij09dHlwZW9mIGwmJih0aGlzLl9vcHRpb25zLnVzZVdvcmtlcj1sKTt2YXIgZD10aGlzLl9vcHRpb25zLnVzZVdvcmtlcixoPXRoaXMuX29wdGlvbnMudXNlU2hhcmVkV29ya2VyO2lmKHR5cGVvZiBXb3JrZXI+InUiJiYoZD0hMSksdHlwZW9mIFNoYXJlZFdvcmtlcj4idSImJihoPSExKSxk'@;
put 'fHxoKXt2YXIgdj1zdGUoInNjcmlwdCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0L3dvcmtlciI9PXdzKHRoaXMpLmF0dHIoInR5cGUiKXx8d3ModGhpcykuYXR0cigic3JjIikmJndzKHRoaXMpLmF0dHIoInNyYyIpLm1hdGNoKC8uKlwvQGhwY2MtanNcL3dhc20vKX0p'@;
put 'OzA9PXYuc2l6ZSgpPyhjb25zb2xlLndhcm4oJ05vIHNjcmlwdCB0YWcgb2YgdHlwZSAiamF2YXNjcmlwdC93b3JrZXIiIHdhcyBmb3VuZCBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5nIHdlYiB3b3JrZXIuJyksZD0hMSxoPSExKToodGhpcy5fdml6VVJMPXYuYXR0cigic3Jj'@;
put 'IiksdGhpcy5fdml6VVJMfHwoY29uc29sZS53YXJuKCdObyAic3JjIiBhdHRyaWJ1dGUgb2Ygd2FzIGZvdW5kIG9uIHRoZSAiamF2YXNjcmlwdC93b3JrZXIiIHNjcmlwdCB0YWcgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicpLGQ9ITEsaD0hMSkpfWlm'@;
put 'KGgpe2NvbnN0IFo9ImRhdGE6YXBwbGljYXRpb24vamF2YXNjcmlwdDtiYXNlNjQsIitidG9hKE5OLnRvU3RyaW5nKCkrIigiK3dFdC50b1N0cmluZygpKyIpKCkiKTt0aGlzLl93b3JrZXI9dGhpcy5fd29ya2VyPW5ldyBTaGFyZWRXb3JrZXIoWiksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93'@;
put 'b3JrZXIucG9ydCx0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnBvcnQuY2xvc2UuYmluZCh0aGlzLl93b3JrZXJQb3J0KSx0aGlzLl93b3JrZXIucG9ydC5zdGFydCgpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIGlmKGQpe3ZhciBNPW5ldyBCbG9iKFtOTi50b1N0'@;
put 'cmluZygpKyIoIitfRXQudG9TdHJpbmcoKSsiKSgpIl0pLEQ9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoTSk7dGhpcy5fd29ya2VyPW5ldyBXb3JrZXIoRCksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIsdGhpcy5fd29ya2VyUG9ydENsb3NlPXRoaXMuX3dvcmtlci50ZXJtaW5h'@;
put 'dGUuYmluZCh0aGlzLl93b3JrZXIpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIEo4ZS5sb2FkKCkudGhlbigoWj0+e3RoaXMuX2dyYXBodml6VmVyc2lvbj1aLnZlcnNpb24oKX0pLmJpbmQodGhpcykpO3RoaXMuX3NlbGVjdGlvbj1jLHRoaXMuX2FjdGl2ZT0hMSx0aGlzLl9idXN5'@;
put 'PSExLHRoaXMuX2pvYnM9W10sdGhpcy5fcXVldWU9W10sdGhpcy5fa2V5TW9kZXM9bmV3IFNldChbInRpdGxlIiwiaWQiLCJ0YWctaW5kZXgiLCJpbmRleCJdKSx0aGlzLl9pbWFnZXM9W10sdGhpcy5fdHJhbnNsYXRpb249dm9pZCAwLHRoaXMuX3NjYWxlPXZvaWQgMCx0aGlzLl9ldmVudFR5'@;
put 'cGVzPVsiaW5pdEVuZCIsInN0YXJ0IiwibGF5b3V0U3RhcnQiLCJsYXlvdXRFbmQiLCJkYXRhRXh0cmFjdEVuZCIsImRhdGFQcm9jZXNzUGFzczFFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIiwiZGF0YVByb2Nlc3NFbmQiLCJyZW5kZXJTdGFydCIsInJlbmRlckVuZCIsInRyYW5zaXRpb25T'@;
put 'dGFydCIsInRyYW5zaXRpb25FbmQiLCJyZXN0b3JlRW5kIiwiZW5kIiwiem9vbSJdLHRoaXMuX2Rpc3BhdGNoPWx0ZSguLi50aGlzLl9ldmVudFR5cGVzKSxUeHQuY2FsbCh0aGlzKSxjLm5vZGUoKS5fX2dyYXBodml6X189dGhpc31mdW5jdGlvbiBWTihjLGwpe3JldHVybiB3cyhjKS5ncmFw'@;
put 'aHZpeihsKX1zN2UucHJvdG90eXBlPUJ0ZS5wcm90b3R5cGUsanRlLnByb3RvdHlwZT1WTi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmp0ZSxlbmdpbmU6ZnVuY3Rpb24gQnh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmVuZ2luZT1jLHRoaXN9LGFkZEltYWdlOmZ1bmN0aW9uIGp4dChjLGws'@;
put 'YSl7cmV0dXJuIHRoaXMuX2ltYWdlcy5wdXNoKHtwYXRoOmMsd2lkdGg6bCxoZWlnaHQ6YX0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rpb24genh0KGMpe2lmKCF0aGlzLl9rZXlNb2Rlcy5oYXMoYykpdGhyb3cgRXJyb3IoIklsbGVnYWwga2V5TW9kZTogIitjKTtpZihjIT10aGlzLl9vcHRpb25z'@;
put 'LmtleU1vZGUmJm51bGwhPXRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJuIHRoaXMuX29wdGlvbnMua2V5TW9kZT1jLHRoaXN9LGZhZGU6ZnVuY3Rpb24gVXh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZhZGU9Yyx0aGlzfSx0d2Vl'@;
put 'blBhdGhzOmZ1bmN0aW9uIFp4dChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPWMsdGhpc30sdHdlZW5TaGFwZXM6ZnVuY3Rpb24gV3h0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzPWMsYyYmKHRoaXMuX29wdGlvbnMudHdlZW5QYXRocz0hMCksdGhpc30s'@;
put 'Y29udmVydEVxdWFsU2lkZWRQb2x5Z29uczpmdW5jdGlvbiBZeHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucz1jLHRoaXN9LHR3ZWVuUHJlY2lzaW9uOmZ1bmN0aW9uIEd4dChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbj1j'@;
put 'LHRoaXN9LGdyb3dFbnRlcmluZ0VkZ2VzOmZ1bmN0aW9uICR4dChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcz1jLHRoaXN9LHpvb206ZnVuY3Rpb24gQk10KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb209Yyx0aGlzLl9vcHRpb25zLnpvb20mJiF0aGlzLl96'@;
put 'b29tQmVoYXZpb3I/WThlLmNhbGwodGhpcyk6IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5fem9vbVNlbGVjdGlvbi5vbigiLnpvb20iLG51bGwpLHRoaXMuX3pvb21CZWhhdmlvcj1udWxsKSx0aGlzfSxyZXNldFpvb206ZnVuY3Rpb24gak10KGMpe3Zh'@;
put 'ciBsPXRoaXMuX3pvb21TZWxlY3Rpb247cmV0dXJuIGMmJihsPWwudHJhbnNpdGlvbihjKSksbC5jYWxsKHRoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0sdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm0pLHRoaXN9LHpvb21CZWhhdmlvcjpmdW5jdGlvbiBaTXQoKXtyZXR1cm4gdGhpcy5fem9v'@;
put 'bUJlaGF2aW9yfHxudWxsfSx6b29tU2VsZWN0aW9uOmZ1bmN0aW9uIFdNdCgpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxudWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVuY3Rpb24gek10KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21TY2FsZUV4dGVudD1jLHRoaXN9LHpvb21UcmFu'@;
put 'c2xhdGVFeHRlbnQ6ZnVuY3Rpb24gVU10KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9Yyx0aGlzfSxyZW5kZXI6ZnVuY3Rpb24gWE10KGMpe3JldHVybiB0aGlzLl9idXN5Pyh0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVuZGVyLmJpbmQodGhpcyxjKSksdGhp'@;
put 'cyk6KHRoaXMuX2Rpc3BhdGNoLmNhbGwoInJlbmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT92TihmdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb249Q3RlKHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5KCkpLEs4ZS5jYWxsKHRoaXMsYyl9LmJpbmQodGhpcyksMCk6Szhl'@;
put 'LmNhbGwodGhpcyxjKSx0aGlzKX0sbGF5b3V0OmZ1bmN0aW9uIEF4dChjLGwsYSxkKXtpZih0aGlzLl93b3JrZXIpUHRlLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6YyxlbmdpbmU6bCxvcHRpb25zOmF9LGZ1bmN0aW9uKGYpe2QuY2FsbCh0aGlzLGYuZGF0YSl9KTtlbHNlIHRyeXt2'@;
put 'YXIgaD10aGlzLmxheW91dFN5bmMoYywic3ZnIixsLGEpO2QuY2FsbCh0aGlzLHt0eXBlOiJkb25lIixzdmc6aH0pfWNhdGNoKGYpe2QuY2FsbCh0aGlzLHt0eXBlOiJlcnJvciIsZXJyb3I6Zi5tZXNzYWdlfSl9fSxkb3Q6ZnVuY3Rpb24ga3h0KGMsbCl7dmFyIGE9dGhpcyxoPXRoaXMuX29w'@;
put 'dGlvbnMuZW5naW5lLGY9dGhpcy5faW1hZ2VzO3JldHVybiB0aGlzLl9kaXNwYXRjaC5jYWxsKCJzdGFydCIsdGhpcyksdGhpcy5fYnVzeT0hMCx0aGlzLl9kaXNwYXRjaC5jYWxsKCJsYXlvdXRTdGFydCIsdGhpcyksdGhpcy5fd29ya2VyfHxudWxsIT10aGlzLmxheW91dFN5bmM/KHRoaXMu'@;
put 'bGF5b3V0KGMsaCx7aW1hZ2VzOmZ9LGZ1bmN0aW9uKE0pe3N3aXRjaChNLnR5cGUpe2Nhc2UiZXJyb3IiOmlmKCFhLl9vbmVycm9yKXRocm93IE0uZXJyb3IubWVzc2FnZTthLl9vbmVycm9yKE0uZXJyb3IpO2JyZWFrO2Nhc2UiZG9uZSI6RHh0LmNhbGwodGhpcyxNLnN2ZyxsKX19KSx0aGlz'@;
put 'KToodGhpcy5fYWZ0ZXJJbml0PXRoaXMuZG90LmJpbmQodGhpcyxjLGwpLHRoaXMpfSxkYXRhOmZ1bmN0aW9uICRNdCgpe3JldHVybiB0aGlzLl9kYXRhfHxudWxsfSxyZW5kZXJEb3Q6ZnVuY3Rpb24gSXh0KGMsbCl7dmFyIGE9dGhpcztyZXR1cm4gdGhpcy5kb3QoYyxmdW5jdGlvbiBkKCl7'@;
put 'YS5yZW5kZXIobCl9KSx0aGlzfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIFJ4dChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP3RoaXMuX3RyYW5zaXRpb25GYWN0b3J5PWM6dGhpcy5fdHJhbnNpdGlvbj1DdGUoYyksdGhpc30sYWN0aXZlOmZ1bmN0aW9uIEx4dChjKXt2YXIgYT10aGlz'@;
put 'Ll9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPWEuc2l6ZSgpP2Z1bmN0aW9uIHlNdChjLGwpe3ZhciBkLGgsYT1jLl9fdHJhbnNpdGlvbjtpZihhKWZvcihoIGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSlpZigoZD1hW2hdKS5zdGF0ZT4x'@;
put 'JiZkLm5hbWU9PT1sKXJldHVybiBuZXcgdTQoW1tjXV0sYk10LGwsK2gpO3JldHVybiBudWxsfShhLm5vZGUoKSxjKTpudWxsfSxvcHRpb25zOmZ1bmN0aW9uIE94dChjKXtpZih0eXBlb2YgYz4idSIpcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdGhpcy5fb3B0aW9ucyk7Zm9yKHZhciBsIG9m'@;
put 'IE9iamVjdC5rZXlzKGMpKXRoaXMuX29wdGlvbnNbbF09Y1tsXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gUHh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLndpZHRoPWMsdGhpc30saGVpZ2h0OmZ1bmN0aW9uIEZ4dChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5oZWlnaHQ9Yyx0aGlz'@;
put 'fSxzY2FsZTpmdW5jdGlvbiBIeHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuc2NhbGU9Yyx0aGlzfSxmaXQ6ZnVuY3Rpb24gTnh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZpdD1jLHRoaXN9LGF0dHJpYnV0ZXI6ZnVuY3Rpb24gVnh0KGMpe3JldHVybiB0aGlzLl9hdHRyaWJ1dGVyPWMs'@;
put 'dGhpc30sb246ZnVuY3Rpb24gS3h0KGMsbCl7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKGMsbCksdGhpc30sb25lcnJvcjpmdW5jdGlvbiBxeHQoYyl7cmV0dXJuIHRoaXMuX29uZXJyb3I9Yyx0aGlzfSxsb2dFdmVudHM6ZnVuY3Rpb24gc0V0KGMpe3ZhciBsPURhdGUubm93KCksYT17fSxk'@;
put 'PXRoaXMuX2V2ZW50VHlwZXMsaD1NYXRoLm1heCguLi5kLm1hcChEPT5ELmxlbmd0aCkpO2ZvcihsZXQgRD0wO0Q8ZC5sZW5ndGg7RCsrKXtsZXQgWj1kW0RdO2FbWl09W107dmFyIHYsTSxmPXRoaXM7dGhpcy5vbihaKyIubG9nIixjP2Z1bmN0aW9uKCl7dmFyIG5lPURhdGUubm93KCksY2U9'@;
put 'YVtaXS5sZW5ndGg7YVtaXS5wdXNoKG5lKTt2YXIgYmU9IiI7aWYoYmUrPSJFdmVudCAiLGJlKz10ZigiID4yIikoRCkrIiAiLGJlKz1aKyIgIi5yZXBlYXQoaC1aLmxlbmd0aCksYmUrPXRmKCIgPjUiKShuZS1sKSsiICIsImluaXRFbmQiIT1aJiYoYmUrPXRmKCIgPjUiKShuZS1hLnN0YXJ0'@;
put 'W2NlXSkpLCJkYXRhUHJvY2Vzc0VuZCI9PVomJihiZSs9IiBwcmVwYXJlICAgICAgICAgICAgICAgICAiK3RmKCIgPjUiKShuZS1hLmxheW91dEVuZFtjZV0pKSwicmVuZGVyRW5kIj09WiYmZi5fdHJhbnNpdGlvbiYmKGJlKz0iIHRyYW5zaXRpb24gc3RhcnQgbWFyZ2luICIrdGYoIiA+NSIp'@;
put 'KGYuX3RyYW5zaXRpb24uZGVsYXkoKS0obmUtYS5yZW5kZXJTdGFydFtjZV0pKSx2PWYuX3RyYW5zaXRpb24uZGVsYXkoKSxNPWYuX3RyYW5zaXRpb24uZHVyYXRpb24oKSksInRyYW5zaXRpb25TdGFydCI9PVope3ZhciBFZT1uZS1hLnJlbmRlclN0YXJ0W2NlXTtiZSs9IiB0cmFuc2l0aW9u'@;
put 'IGRlbGF5ICAgICAgICAiK3RmKCIgPjUiKShuZS1hLnJlbmRlclN0YXJ0W2NlXSksYmUrPSIgZXhwZWN0ZWQgIit0ZigiID41IikodiksYmUrPSIgZGlmZiAiK3RmKCIgPjUiKShFZS12KX1pZigidHJhbnNpdGlvbkVuZCI9PVope3ZhciBCZT1uZS1hLnRyYW5zaXRpb25TdGFydFtjZV07YmUr'@;
put 'PSIgdHJhbnNpdGlvbiBkdXJhdGlvbiAgICAgIit0ZigiID41IikoQmUpLGJlKz0iIGV4cGVjdGVkICIrdGYoIiA+NSIpKE0pLGJlKz0iIGRpZmYgIit0ZigiID41IikoQmUtTSl9Y29uc29sZS5sb2coYmUpLGw9bmV9Om51bGwpfXJldHVybiB0aGlzfSxkZXN0cm95OmZ1bmN0aW9uIGxFdCgp'@;
put 'e3JldHVybiBkZWxldGUgdGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3RWRnZTpmdW5jdGlvbiBoRXQoYyxsLGEsZCxoLGY9e30pe2lmKChoPU9iamVjdC5hc3NpZ24oe30saCkpLnN0eWxl'@;
put 'JiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciB2PXdzKG51bGwpO2Vsc2V7dmFyIFo9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxjZT1ldihoN2UuY2FsbCh0aGlzLGgpKTt2'@;
put 'PVouYXBwZW5kKCJnIikuZGF0YShbY2VdKSxMQS5jYWxsKHYubm9kZSgpLGNlKSxsN2UuY2FsbCh0aGlzLHYsYyxsLGEsZCxoLGYpfXJldHVybiB0aGlzLl9kcmF3bkVkZ2U9e2c6dix4MTpjLHkxOmwseDI6YSx5MjpkLGF0dHJpYnV0ZXM6aH0sdGhpc30sdXBkYXRlRHJhd25FZGdlOmZ1bmN0'@;
put 'aW9uIGZFdChjLGwsYSxkLGg9e30sZj17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciB2PXRoaXMuX2RyYXduRWRnZS5nO3JldHVybiBoPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXMsaCksdGhp'@;
put 'cy5fZHJhd25FZGdlLngxPWMsdGhpcy5fZHJhd25FZGdlLnkxPWwsdGhpcy5fZHJhd25FZGdlLngyPWEsdGhpcy5fZHJhd25FZGdlLnkyPWQsIXYuZW1wdHkoKXx8aC5zdHlsZSYmaC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRh'@;
put 'UHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3bkVkZ2UuZz12KSx2LmVtcHR5KCl8fGw3ZS5jYWxsKHRoaXMsdixjLGwsYSxkLGgsZiksdGhpc30sbW92ZURyYXduRWRnZUVuZFBvaW50OmZ1bmN0aW9uIHBF'@;
put 'dChjLGwsYT17fSl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBkPXRoaXMuX2RyYXduRWRnZS5nLGg9dGhpcy5fZHJhd25FZGdlLngxLGY9dGhpcy5fZHJhd25FZGdlLnkxLHY9dGhpcy5fZHJhd25FZGdlLmF0dHJpYnV0ZXM7'@;
put 'cmV0dXJuIHRoaXMuX2RyYXduRWRnZS54Mj1jLHRoaXMuX2RyYXduRWRnZS55Mj1sLGM3ZShkLGgsZixjLGwsdixhKSx0aGlzfSxpbnNlcnREcmF3bkVkZ2U6ZnVuY3Rpb24gZ0V0KGMpe2lmKCF0aGlzLl9kcmF3bkVkZ2UpdGhyb3cgRXJyb3IoIk5vIGVkZ2UgaGFzIGJlZW4gZHJhd24iKTt2'@;
put 'YXIgbD10aGlzLl9kcmF3bkVkZ2UuZztpZihsLmVtcHR5KCkpcmV0dXJuIHRoaXM7bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQoYyk7dmFyIHY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhv'@;
put 'dXREYXRhUHJvcGFnYXRpb24oImciKSxNPXYuZGF0dW0oKSxEPXRoaXMuX2V4dHJhY3REYXRhKGwsTS5jaGlsZHJlbi5sZW5ndGgsdi5kYXR1bSgpKTtyZXR1cm4gTS5jaGlsZHJlbi5wdXNoKEQpLEF0ZShsLEQpLHRoaXMuX2RyYXduRWRnZT1udWxsLHRoaXN9LHJlbW92ZURyYXduRWRnZTp1'@;
put 'N2UscmVtb3ZlRHJhd25FZGdlOnU3ZSxkcmF3bkVkZ2VTZWxlY3Rpb246ZDdlLGRyYXduRWRnZVNlbGVjdGlvbjpkN2UsZHJhd05vZGU6ZnVuY3Rpb24gbUV0KGMsbCxhLGQ9e30saD17fSl7aWYoKGQ9T2JqZWN0LmFzc2lnbih7fSxkKSkuc3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlz'@;
put 'IikpdmFyIGY9d3MobnVsbCk7ZWxzZXt2YXIgRD10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLG5lPWV2KHY3ZS5jYWxsKHRoaXMsYSxkKSk7Zj1ELmFwcGVuZCgiZyIpLmRhdGEoW25l'@;
put 'XSksTEEuY2FsbChmLm5vZGUoKSxuZSksZjdlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCl9cmV0dXJuIHRoaXMuX2RyYXduTm9kZT17ZzpmLG5vZGVJZDphLHg6Yyx5OmwsYXR0cmlidXRlczpkfSx0aGlzfSx1cGRhdGVEcmF3bk5vZGU6ZnVuY3Rpb24gdkV0KGMsbCxhLGQ9e30saD17fSl7aWYo'@;
put 'IXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBmPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBudWxsPT1hJiYoYT10aGlzLl9kcmF3bk5vZGUubm9kZUlkKSxkPU9iamVjdC5hc3NpZ24odGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXMs'@;
put 'ZCksdGhpcy5fZHJhd25Ob2RlLm5vZGVJZD1hLHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJhd25Ob2RlLnk9bCwhZi5lbXB0eSgpfHxkLnN0eWxlJiZkLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwoZj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigi'@;
put 'c3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduTm9kZS5nPWYpLGYuZW1wdHkoKXx8ZjdlLmNhbGwodGhpcyxmLGMsbCxhLGQsaCksdGhpc30sbW92ZURyYXduTm9kZTpmdW5jdGlvbiBiRXQoYyxsLGE9e30pe2lmKCF0aGlzLl9k'@;
put 'cmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZD10aGlzLl9kcmF3bk5vZGUuZyxoPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO3JldHVybiB0aGlzLl9kcmF3bk5vZGUueD1jLHRoaXMuX2RyYXduTm9kZS55PWwsZC5lbXB0eSgpfHxwN2UoZCxj'@;
put 'LGwsaCksdGhpc30saW5zZXJ0RHJhd25Ob2RlOmZ1bmN0aW9uIHlFdChjKXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7bnVsbD09YyYmKGM9dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCk7dmFyIGw9dGhpcy5fZHJhd25Ob2RlLmc7aWYo'@;
put 'bC5lbXB0eSgpKXJldHVybiB0aGlzO3ZhciBhPXRoaXMuX2RyYXduTm9kZS5hdHRyaWJ1dGVzO2lmKGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGl0bGUiKS50ZXh0KGMpLGEuVVJMfHxhLnRvb2x0aXApdmFyIGY9bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiku'@;
put 'c2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiYSIpLE09KGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxmLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKSk7ZWxzZSBsLnNlbGVjdFdpdGhvdXREYXRh'@;
put 'UHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksTT1sLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtNLnRleHQoYS5sYWJlbHx8Yyk7dmFyIG5lPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5z'@;
put 'ZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksY2U9bmUuZGF0dW0oKSxiZT10aGlzLl9leHRyYWN0RGF0YShsLGNlLmNoaWxkcmVuLmxlbmd0aCxuZS5kYXR1bSgpKTtyZXR1cm4gY2UuY2hpbGRyZW4ucHVzaChiZSksQXRlKGwsYmUpLHRoaXMuX2RyYXduTm9kZT1udWxsLHRoaXN9'@;
put 'LHJlbW92ZURyYXduTm9kZTpnN2UscmVtb3ZlRHJhd25Ob2RlOmc3ZSxkcmF3bk5vZGVTZWxlY3Rpb246bTdlLGRyYXduTm9kZVNlbGVjdGlvbjptN2UsZ3JhcGh2aXpWZXJzaW9uOmZ1bmN0aW9uIEpNdCgpe3JldHVybiB0aGlzLl9ncmFwaHZpelZlcnNpb259fSwkOS5wcm90b3R5cGUuZ3Jh'@;
put 'cGh2aXo9ZnVuY3Rpb24gQ0V0KGMpe3ZhciBsPXRoaXMubm9kZSgpLl9fZ3JhcGh2aXpfXztyZXR1cm4gbD8obC5vcHRpb25zKGMpLHZOKGZ1bmN0aW9uKCl7bC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyl9LmJpbmQodGhpcyksMCkpOmw9bmV3IGp0ZSh0aGlzLGMpLGx9LCQ5LnBy'@;
put 'b3RvdHlwZS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uPWZ1bmN0aW9uIFNFdChjKXtyZXR1cm4gd3ModGhpcy5zaXplKCk+MD90aGlzLm5vZGUoKS5xdWVyeVNlbGVjdG9yKGMpOm51bGwpfTt2YXIgTUV0PV8oOTgwODMpO2Z1bmN0aW9uIHhFdChjLGwpezEmYyYmR3QoMCwiY2xyLWlj'@;
put 'b24iLDI5KX1mdW5jdGlvbiBFRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhl'@;
put 'KCl9fWZ1bmN0aW9uIFRFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMjYsMiksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gYmkoZi5saWJyYXJp'@;
put 'ZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLG10KDQseEV0LDEsMCwiY2xyLWljb24iLDI3KSg1LEVFdCwxLDAsImNsci1pY29uIiwyOCks'@;
put 'aGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEFFdChjLGwpezEmYyYm'@;
put 'R3QoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlvbiBrRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9dm8oMyksZj1PZSgyKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiBoLnZhbHVl'@;
put 'PSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcy5UQUJMRU5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBERXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM2LDMpLGdp'@;
put 'KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gYmkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpLiRpbXBsaWNp'@;
put 'dDtyZXR1cm4gQ3QoT2UoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCksbXQoNCxBRXQsMSwwLCJjbHItaWNvbiIsMjcpKDUsa0V0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPXZvKDMpLGQ9T2UoMikuJGltcGxpY2l0O2ZlKDIp'@;
put 'LHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBJRXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyOSl9ZnVuY3Rpb24gUkV0KGMsbCl7aWYoMSZj'@;
put 'KXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksT2UoKTtjb25zdCBoPXZvKDMpLGY9T2UoKS4kaW1wbGljaXQsdj1PZSgzKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJj'@;
put 'b2x1bW5zLkNPTE5BTUUiKSl9KSxoZSgpfX1mdW5jdGlvbiBMRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNCkoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDM5LDMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9l'@;
put 'KCkuJGltcGxpY2l0O3JldHVybiBiaShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDMpLnRyZWVPbkZpbHRlcihoLCJjb2x1bW5zLkNPTE5B'@;
put 'TUUiKSl9KSxoZSgpLG10KDQsSUV0LDEsMCwiY2xyLWljb24iLDI3KSg1LFJFdCwxLDAsImNsci1pY29uIiwyOCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKCkuJGltcGxpY2l0O2ZlKDIpLHBpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMikseGUoIm5nSWYiLGEu'@;
put 'dmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBPRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIikoMSwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGlt'@;
put 'cGxpY2l0LGY9T2UoKS4kaW1wbGljaXQsdj1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuY29sdW1uT25DbGljayhoLHYsZikpfSksR3QoMiwiY2xyLWljb24iLDQxKSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoNCk7ZmUoKSxUcigiY29sdW1u'@;
put 'LWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSxmZSgyKSxJcigiICIsYS5DT0xOQU1FLCIgIil9fWZ1bmN0aW9uIFBFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3Qo'@;
put 'YSkuJGltcGxpY2l0LHY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYsdi50YWJsZXMpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIGJpKGYuZXhwYW5kZWQsaCl8fChm'@;
put 'LmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS50YWJsZU9uQ2xpY2soaC5UQUJMRVVSSSxoLGYpKX0pLEd0KDIsImNsci1pY29uIiwzOCks'@;
put 'TGUoMyksaGUoKSxtdCg0LExFdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDUsT0V0LDQsMywiY2xyLXRyZWUtbm9kZSIsNiksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSx4'@;
put 'ZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nQ29sdW1ucyYmIWEuY29sdW1ucyksZmUoKSx4ZSgiaWQiLGEuVEFCTEVVUkkpLGZlKDIpLElyKCIgIixhLlRBQkxFTkFNRSwiICIpLGZlKCkseGUoIm5nSWYiLGEuY29sdW1ucyksZmUoKSx4ZSgibmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24g'@;
put 'RkV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmxpYnJhcnlMaXN0KSl9KSxn'@;
put 'aSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIGJpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCku'@;
put 'JGltcGxpY2l0LGY9T2UoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZSUQsQ3QoZi5saWJyYXJ5T25DbGljayhmLmxpYnx8IiIsaCkpfSksR3QoMiwiY2xyLWljb24iLDM0KSxMZSgzKSxoZSgpLG10KDQsREV0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSkoNSxQRXQsNiw4LCJjbHItdHJlZS1ub2Rl'@;
put 'IiwzNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7VHIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCkscGkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSx4ZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLElyKCIgIixhLkxJQlJB'@;
put 'UllOQU1FLCIgIiksZmUoKSx4ZSgibmdJZiIsYS50YWJsZXMpLGZlKCkseGUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gSEV0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxGRXQsNiw3LCJjbHItdHJlZS1ub2RlIiwzMSksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2Zl'@;
put 'KCkseGUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiBORXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQyKSgxLCJzcGFuIiw0MyksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBWRXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDQ0KSxHdCgx'@;
put 'LCJjbHItaWNvbiIsNDUpLGRlKDIsInAiLDQ2KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGNvbHVtbiBvciB0YWJsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIEJFdChjLGwpe2lmKDEmYyYmKGRlKDAsImgzIiw1NSksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksSXIoIiAiLGEu'@;
put 'Y3VycmVudExpbmVhZ2VQYXRoQ29sdW1uP2EuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUrIi4iK2EuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uOmEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUsIiAiKX19ZnVuY3Rpb24gakV0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1MyksbXQo'@;
put 'MSxCRXQsMiwxLCJoMyIsNTQpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4mJiFhLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKX19ZnVuY3Rpb24gekV0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEp'@;
put 'LGRlKDIsImEiLDU2KSxMZSgzKSxoZSgpLExlKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLElyKCIgIixhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVswXSwiLiIpLGZlKCkseGUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5saW5lYWdlVGFibGVOYW1lKSxmZSgp'@;
put 'LHdyKGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzFdKSxmZSgpLElyKCIiLGEubGluZWFnZUNvbHVtbk5hbWUubGVuZ3RoPjA/Ii4iK2EubGluZWFnZUNvbHVtbk5hbWU6IiIsIiAiKX19ZnVuY3Rpb24gVUV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2Niks'@;
put 'RnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5kb3dubG9hZFBORygpKX0pLExlKDEsIiBQTkcgIiksaGUoKX19ZnVuY3Rpb24gWkV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3'@;
put 'dChhKSxDdChPZSg0KS5kb3dubG9hZENTVigpKX0pLExlKDEsIiBDU1YgIiksaGUoKX19ZnVuY3Rpb24gV0V0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEp'@;
put 'LEN0KE9lKDMpLmRvd25sb2FkU1ZHKCkpfSksTGUoMiwiU1ZHIiksaGUoKSxtdCgzLFVFdCwyLDAsImRpdiIsNjcpLGRlKDQsImRpdiIsNjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZG93bmxvYWREb3QoKSl9KSxMZSg1LCJEb3QiKSxoZSgpLG10KDYs'@;
put 'WkV0LDIsMCwiZGl2Iiw2NyksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMykseGUoIm5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpLGZlKDMpLHhlKCJuZ0lmIixhLmZsYXRkYXRhKX19ZnVuY3Rpb24gWUV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi'@;
put 'Y2xyLWNoZWNrYm94LXdyYXBwZXIiLDY4KSgxLCJpbnB1dCIsNjkpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmdlbmVyYXRlR3JhcGgoKSl9KSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKTtyZXR1cm4gYmko'@;
put 'Zi5yZWZyZXNoQ2FjaGUsaCl8fChmLnJlZnJlc2hDYWNoZT1oKSxDdChoKX0pLGhlKCksZGUoMiwibGFiZWwiKSxMZSgzLCJSZWZyZXNoIENhY2hlIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLHBpKCJuZ01vZGVsIixhLnJlZnJlc2hDYWNoZSl9fWZ1bmN0aW9uIEdFdChj'@;
put 'LGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsNTcpKDEsImJ1dHRvbiIsNTgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikubGltaXREb3REZXB0aD0hMCl9KSxMZSgyLCIgTGltaXQgZGVwdGggIiksaGUoKSxkZSgzLCJkaXYiLDU5KSg0LCJk'@;
put 'aXYiLDYwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMSxDdChoLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2gub25HZW5lcmF0ZUNsaWNrKCk6aC5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpfSks'@;
put 'R3QoNSwiaW5wdXQiLDYxKSxkZSg2LCJsYWJlbCIpLExlKDcsIkJhY2t3YXJkIiksaGUoKSgpLGRlKDgsImRpdiIsNjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmZvcndhcmRMaW5lYWdlPSEwLEN0KGgucm91dGVyLnVybC5pbmNsdWRlcygi'@;
put 'Y29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxHdCg5LCJpbnB1dCIsNjEpLGRlKDEwLCJsYWJlbCIpLExlKDExLCJGb3J3YXJkIiksaGUoKSgpKCksZGUoMTIsImNsci1kcm9wZG93biIsNjIpKDEzLCJidXR0b24iLDYzKSxMZSgx'@;
put 'NCwiIERvd25sb2FkICIpLEd0KDE1LCJjbHItaWNvbiIsMjIpLGhlKCksbXQoMTYsV0V0LDcsMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDIzKSxoZSgpLG10KDE3LFlFdCw0LDEsImNsci1jaGVja2JveC13cmFwcGVyIiw2NCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNSkseGUoImNo'@;
put 'ZWNrZWQiLCFhLmZvcndhcmRMaW5lYWdlKSxmZSg0KSx4ZSgiY2hlY2tlZCIsYS5mb3J3YXJkTGluZWFnZSksZmUoNCkseGUoImRpc2FibGVkIiwhYS5jb2x1bW4mJiFhLnRhYmxlKSxmZSg0KSx4ZSgibmdJZiIsYS5jb2x1bW4pfX1mdW5jdGlvbiAkRXQoYyxsKXsxJmMmJihkZSgwLCJzcGFu'@;
put 'Iiw3MyksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gS0V0KGMsbCl7MSZjJiZHdCgwLCJzcGFuIiw0Myl9ZnVuY3Rpb24gcUV0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw3NCkoMSwiZGl2Iiw3NSksbXQoMixLRXQsMSwwLCJzcGFuIiw3NiksaGUoKSxHdCgzLCJkaXYi'@;
put 'LDc3KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMikseGUoIm5nSWYiLGEuZ3JhcGhSZW5kZXJpbmcpfX1mdW5jdGlvbiBYRXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJkaXYiLDcwKSxtdCgyLCRFdCwyLDAsInNwYW4iLDcxKSgzLHFFdCw0LDEsImRpdiIsNzIpLGhlKCko'@;
put 'KSksMiZjKXtjb25zdCBhPU9lKDIpO1RyKCJtdC0yIixhLnRhYmxlRmxhZyksZmUoMikseGUoIm5nSWYiLGEuZ3JhcGhMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5ncmFwaExvYWRpbmcpfX1mdW5jdGlvbiBKRXQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLGpFdCwyLDEsImRpdiIsNDcp'@;
put 'LGRlKDIsImRpdiIsNDgpKDMsInNlY3Rpb24iLDQ5KSg0LCJkaXYiLDUwKSxtdCg1LHpFdCw1LDQsInNwYW4iLDExKSxoZSgpLG10KDYsR0V0LDE4LDQsImRpdiIsNTEpLGhlKCksbXQoNyxYRXQsNCw0LCJkaXYiLDUyKSxoZSgpLHVpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5n'@;
put 'SWYiLCFhLmdyYXBoQ29udGFpbmVyKSxmZSg0KSx4ZSgibmdJZiIsYS5saW5lYWdlVGFibGVOYW1lLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKSxmZSgpLHhlKCJuZ0lmIixhLmdyYXBoQ29udGFpbmVyKX19ZnVuY3Rpb24gUUV0KGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPUxuKCk7ZGUoMCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5yZW5kZXJUb0Rvd25sb2FkKCJQTkciKSl9KSxMZSgxLCIgUE5HICIpLGhlKCl9fWZ1bmN0aW9uIGVUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1k'@;
put 'cm9wZG93bi1tZW51Iiw2NSkoMSwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnJlbmRlclRvRG93bmxvYWQoIlNWRyIpKX0pLExlKDIsIlNWRyIpLGhlKCksbXQoMyxRRXQsMiwwLCJkaXYiLDY3KSxkZSg0LCJkaXYiLDY2KSxGdCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBoLmRvd25sb2FkRG90KCksQ3QoaC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLExlKDUsIiBEb3QgIiksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLHhlKCJuZ0lmIiwhYS5oZWxwZXJTZXJ2aWNlLmlzTWlj'@;
put 'cm9zb2Z0KX19Y29uc3QgdFR0PV8oOTc1ODYpO2xldCBCTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWil7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLnJvdXRlcj1mLHRoaXMubG9jYXRpb249dix0aGlz'@;
put 'LmV2ZW50U2VydmljZT1NLHRoaXMubG9nZ2VyU2VydmljZT1ELHRoaXMuaGVscGVyU2VydmljZT1aLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmZvcndhcmRMaW5lYWdlPSExLHRoaXMuZmxhdGRhdGE9W10sdGhpcy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFw'@;
put 'aFJlbmRlcmluZz0hMSx0aGlzLmdyYXBoQ29udGFpbmVyPSExLHRoaXMudml6SW5wdXQ9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMudGFibGVDb2x1bW5zUmVmPSIiLHRoaXMubGluZWFnZVRh'@;
put 'YmxlTmFtZT0iIix0aGlzLmxpbmVhZ2VDb2x1bW5OYW1lPSIiLHRoaXMubGliPW51bGwsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5yZWZyZXNoQ2FjaGU9ITEsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT0iIix0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj0iIix0aGlz'@;
put 'LmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5sYXJnZURvdEZpbGVMaW1pdD0xZTMsdGhpcy5saW1pdERvdERlcHRoPSExLHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy5kZWJvdW5jZVRpbWU9MjAwfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlz'@;
put 'LnRhYmxlRmxhZ310YWJsZU9uQ2xpY2soYSxkLGgsZj0hMSl7dmFyIHY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5jb2x1bW5zPyhkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLCEwPT09ZC5leHBhbmRlZCYmKHYudGFibGU9YSxmfHx2Lm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSkp'@;
put 'OihkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQubG9hZGluZ0NvbHVtbnM9ITAsdi50YWJsZT1hLHYuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGU9ZC5MSUJOQU1FKyIuIitkLlRBQkxFTkFNRSx5aWVsZCB2LnNlbGVjdFRhYmxlKGEsZCksZnx8di5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNr'@;
put 'KCkpLHYuY29sbGFwc2VUcmVlSXRlbXMoaC50YWJsZXMsZCl9KSgpfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7dGFibGV1cmk6YX1dfTt5aWVsZCBoLnNhc1NlcnZpY2Uu'@;
put 'cmVxdWVzdCgibGluZWFnZS9nZXRtZXRhY29scyIsZikudGhlbih2PT57aC5jb2x1bW5zTGlzdD12LmFkYXB0ZXJSZXNwb25zZS5tZXRhY29scyxoLmNvbHVtbnNMaXN0JiZoLmNvbHVtbnNMaXN0Lmxlbmd0aD4wJiYoZC5jb2x1bW5zPWguY29sdW1uc0xpc3QsZC5leHBhbmRlZD0hMCxkLmxv'@;
put 'YWRpbmdDb2x1bW5zPSExKX0pLmNhdGNoKHY9PnYpLGguc2V0R2xvYmFsRGF0YSgpfSkoKX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJy'@;
put 'YXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9'@;
put 'PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5pbkZvcmVncm91bmQ9ITAsZC50YWJsZXM/ZC5leHBhbmRlZD0hZC5leHBhbmRlZDooZC5sb2FkaW5nVGFibGVz'@;
put 'PSEwLHlpZWxkIGguc2VsZWN0TGlicmFyeShhLGQpKSxoLmNvbGxhcHNlVHJlZUl0ZW1zKGgubGlicmFyeUxpc3QsZCl9KSgpfXNlbGVjdExpYnJhcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLnRhYmxlc0xpc3Q9W10saC5jb2x1bW5zTGlzdD1bXTtsZXQgZj17'@;
put 'U0FTQ29udHJvbFRhYmxlOlt7bGlidXJpOmF9XX07eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YXRhYmxlcyIsZikudGhlbih2PT57aC50YWJsZXNMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm1ldGF0YWJsZXMsaC50YWJsZXNMaXN0JiZoLnRhYmxlc0xpc3QubGVu'@;
put 'Z3RoPjAmJihkLnRhYmxlcz1oLnRhYmxlc0xpc3QsZC5leHBhbmRlZD0hMCksaC5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaCh2PT52KSxkLmxvYWRpbmdUYWJsZXM9ITF9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0'@;
put 'aGlzLmNvbHVtbj1hLkNPTFVSSSx0aGlzLnNldEdsb2JhbERhdGEoKSx0aGlzLm9uR2VuZXJhdGVDbGljaygpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9u'@;
put 'RmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksS24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0'@;
put 'KCJcXCIpLGg9dGhpcy5jb2x1bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19c2V0R2xvYmFsRGF0YSgpe0tuLmxpbmVhZ2UubGlicmFyeUxpc3Q9dGhpcy5saWJyYXJ5TGlzdCxLbi5saW5lYWdlLnRhYmxlc0xpc3Q9dGhpcy50YWJsZXNMaXN0LEtu'@;
put 'LmxpbmVhZ2UuY29sdW1uc0xpc3Q9dGhpcy5jb2x1bW5zTGlzdCxLbi5saW5lYWdlLmxpYj10aGlzLmxpYixLbi5saW5lYWdlLnRhYmxlPXRoaXMudGFibGUsS24ubGluZWFnZS5jb2x1bW49dGhpcy5jb2x1bW59bG9hZEdsb2JhbERhdGEoKXt0aGlzLmxpYnJhcnlMaXN0PUtuLmxpbmVhZ2Uu'@;
put 'bGlicmFyeUxpc3QsdGhpcy50YWJsZXNMaXN0PUtuLmxpbmVhZ2UudGFibGVzTGlzdCx0aGlzLmNvbHVtbnNMaXN0PUtuLmxpbmVhZ2UuY29sdW1uc0xpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2g9S24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2h9cmVzdWJtaXRXaXRoTWF4RGVwdGgoYSl7bGV0'@;
put 'IGQ7dGhpcy5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpLGEmJihkPXttYXhfZGVwdGg6YX0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMucm91dGUscXVlcnlQYXJhbXM6ZH0pfW5nT25Jbml0KCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbGluZWFn'@;
put 'ZSI7bGV0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMucmVsb2FkO2lmKHZvaWQgMCE9PWEpe2xldCBkPXRoaXMucm91dGVyLnVybDsicmVsb2FkIj09PWE/bG9jYWxTdG9yYWdlLmdldEl0ZW0oImZpcnN0TG9hZCIpPyhsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZmlyc3RMb2FkIiks'@;
put 'dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpKToobG9jYWxTdG9yYWdlLmZpcnN0TG9hZD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwyZTMpKTp0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0'@;
put 'ZShkLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSl9dGhpcy5pbml0RGF0YSgpfWluaXREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7S24ubGluZWFnZS5saWJyYXJ5TGlzdCYmKEtuLmxpbmVhZ2UubGlicmFyeUxpc3QubGVuZ3RoPjA/YS5sb2FkR2xvYmFsRGF0'@;
put 'YSgpOnlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMiLG51bGwpLnRoZW4odj0+e2EubGlicmFyeUxpc3Q9di5hZGFwdGVyUmVzcG9uc2Uuc2FzbGlicyxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcnlMaXN0KSxhLmxpYnJhcnlMaXN0'@;
put 'JiZhLmxpYnJhcnlMaXN0Lmxlbmd0aD4wJiYoYS5saWI9YS5saWJyYXJ5TGlzdFswXS5MSUJSQVJZSUQpLGEuc2V0R2xvYmFsRGF0YSgpfSkuY2F0Y2godj0+diksYS5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUodj0+e2Eub25Sb3V0ZUNoYW5nZSgpfSksYS5yb3V0ZS5wYXJhbXMuc3Vi'@;
put 'c2NyaWJlKHY9PnthLm9uUm91dGVDaGFuZ2UoKX0pKX0pKCl9b25Sb3V0ZUNoYW5nZSgpe2NsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCksdGhpcy5kZWJvdW5jZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuY29sdXJp'@;
put 'LGQ9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZGlyZWN0aW9uLGg9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVpZCxmPXRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMubWF4X2RlcHRoO2EmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQsdGhp'@;
put 'cy5jb2x1bW49YSx0aGlzLmdlbmVyYXRlR3JhcGgoYSxkLGYpKSwhdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKSYmaCYmZCYmKHRoaXMuZm9yd2FyZExpbmVhZ2U9IkZPUldBUkQiPT09ZCx0aGlzLnRhYmxlPWgsdGhpcy5nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChoLGQsZikp'@;
put 'fSx0aGlzLmRlYm91bmNlVGltZSl9bmdBZnRlckNvbnRlbnRJbml0KCl7fWRpcmVjdGlvblRleHQoKXtyZXR1cm4gdGhpcy5mb3J3YXJkTGluZWFnZT8iRk9SV0FSRCI6IlJFVkVSU0UifW9uR2VuZXJhdGVDbGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy5jb2x1bW4/'@;
put 'dGhpcy5jb2x1bW4uc3Vic3RyaW5nKHRoaXMuY29sdW1uLmluZGV4T2YoIlxcIikrMSk6bnVsbDt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlL2NvbHVtbi8iK2QrIi8iK2EpfW9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRl'@;
put 'eHQoKSxkPXRoaXMudGFibGUuaW5jbHVkZXMoIlxcIik/dGhpcy50YWJsZS5zcGxpdCgiXFwiKVsxXTp0aGlzLnRhYmxlO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvIitkKyIvIithKX1nZW5lcmF0ZUdyYXBoVGFibGVMZXZlbChhLGQsaCl7dmFyIGY9dGhpczty'@;
put 'ZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxlX2lkOmEsZGlyZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpfV19O3JldHVybiJ1bmRlZmluZWQiPT09di5TQVNDb250cm9sVGFibGVbMF0udGFibGVfaWQmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9y'@;
put 'dE1vZGFsKCJnZW5lcmF0ZUdyYXBoVGFibGVMZXZlbCgpIiwidGFibGVfaWQgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGgmJih2LlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250'@;
put 'YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoTSxEKT0+e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNodGFibGVsaW5lYWdlIix2KS50aGVuKGZ1bmN0aW9uKCl7dmFyIFo9ZWUoZnVuY3Rpb24qKG5lKXtpZihuZS5hZGFwdGVy'@;
put 'UmVzcG9uc2UuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5k'@;
put 'ZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiBuZSlyZXR1cm4gZi52aXpJbnB1dD0iZGln'@;
put 'cmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1uZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJSRUYrIi4iK25lLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFTkFNRTtsZXQgY2U9bmUuYWRhcHRlclJlc3BvbnNlLmZpbmFs'@;
put 'ZmluYWwsYmU9IiI7Zm9yKGxldCBFZT0wO0VlPGNlLmxlbmd0aDtFZSsrKWJlKz11bmVzY2FwZShjZVtFZV0uTElORSkrIlxuIjtpZihmLmZsYXRkYXRhPW5lLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgRWU9Zi5saWJyYXJ5TGlzdC5maW5kKEJlPT5uZS5h'@;
put 'ZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5MSUJVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhCZS5MSUJSQVJZSUQudG9VcHBlckNhc2UoKSkpO2lmKEVlKXtsZXQgQmU7aWYoeWllbGQgZi5saWJyYXJ5T25DbGljayhFZS5MSUJSQVJZSUQsRWUpLEVlLnRhYmxlcyYmKEJlPUVlLnRhYmxlcy5m'@;
put 'aW5kKHFlPT5xZS5UQUJMRVVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKG5lLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLlRBQkxFSUQudG9VcHBlckNhc2UoKSkpLEJlKSl7aWYoZi50YWJsZT1CZS5UQUJMRVVSSSxmLnRhYmxlKXtjb25zdCBxZT1mLnRhYmxlLnJlcGxhY2UoIlxcIiwiXFxc'@;
put 'XCIpO3NldFRpbWVvdXQoKCk9PntsZXQgcnQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2lkPScke3FlfSddYCk7cnQmJnJ0LnNjcm9sbEludG9WaWV3KCl9LDFlMyl9Zi50YWJsZU9uQ2xpY2soQmUuVEFCTEVVUkksQmUsRWUsdm9pZCAwIT09ZCl9RWUmJihFZS5leHBhbmRlZD0hMCksQmUm'@;
put 'JihCZS5leHBhbmRlZD0hMCl9fWYudml6SW5wdXQ9YmV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuaWRsb29rdXA9bmUuYWRhcHRlclJlc3Bv'@;
put 'bnNlLmlkbG9va3VwLG5lLmFkYXB0ZXJSZXNwb25zZS5maW5hbGZpbmFsLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9bmUuYWRhcHRlclJlc3BvbnNlLmZpbmFsZmluYWwubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLE0oKX0pO3JldHVybiBmdW5jdGlvbihu'@;
put 'ZSl7cmV0dXJuIFouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goWj0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1jYW5jZWxSZW5kZXJpbmdHcmFwaCgpe3RoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9'@;
put 'Iix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5idWlsZEdyYXBoKCl9Y29udGludWVSZW5kZXJpbmdHcmFwaCgpe3RoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKCk9PntpZihudWxsIT09dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQpe3N3aXRj'@;
put 'aCh0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7Y2FzZSJQTkciOnRoaXMuZG93bmxvYWRQTkcoKTticmVhaztjYXNlIlNWRyI6dGhpcy5kb3dubG9hZFNWRygpfXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy52aXpJbnB1dD0iZGlncmFwaCBHIHtObyBMaW5lYWdlIEF2'@;
put 'YWlsYWJsZX0iLHRoaXMuYnVpbGRHcmFwaCgpfX0pfXJlbmRlclRvRG93bmxvYWQoYSl7c3dpdGNoKGEpe2Nhc2UiUE5HIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iUE5HIix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKTticmVhaztjYXNlIlNWRyI6dGhpcy5wZW5kaW5nUmVu'@;
put 'ZGVyRG93bmxvYWQ9IlNWRyIsdGhpcy5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl9fW1ha2VHcmFwaExpbmthYmxlKGEpe2xldCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIiNncmFwaCAubm9kZSIpO2ZvcihsZXQgaCBvZiBkKXtsZXQgTSxmPWgucXVlcnlTZWxlY3RvcigidGl0bGUi'@;
put 'KS5pbm5lckhUTUwsdj1hLmZpbmQoRD0+RC5NRVRBSUQ9PT1mKTt2JiYoTT0iVEFCTEUiPT09di5NRVRBVFlQRT8iL3ZpZXcvZGF0YS8iK3YuTUVUQU5BTUU6Ii92aWV3L21ldGFkYXRhL29iamVjdC8iK3YuTUVUQUlELGguY2xhc3NMaXN0LmFkZCgiY3Vyc29yLXBvaW50ZXIiKSxoLmFkZEV2'@;
put 'ZW50TGlzdGVuZXIoImNsaWNrIixEPT57dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChNKX0pKX19Z2VuZXJhdGVHcmFwaChhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e1NBU0NvbnRyb2xUYWJsZTpbe2NvbHVyaTphfHxmLmNvbHVtbixkaXJlY3Rpb246'@;
put 'ZHx8Zi5kaXJlY3Rpb25UZXh0KCkscmVmcmVzaDpmLnJlZnJlc2hDYWNoZT8xOjB9XX07cmV0dXJuInVuZGVmaW5lZCI9PT12LlNBU0NvbnRyb2xUYWJsZVswXS5jb2x1cmkmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoKCkiLCJjb2x1cmkgaXMgdW5kZWZp'@;
put 'bmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGgmJih2LlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgo'@;
put 'TSxEKT0+e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNoY29sbGluZWFnZSIsdikudGhlbihmdW5jdGlvbigpe3ZhciBaPWVlKGZ1bmN0aW9uKihuZSl7aWYobmUuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLmxlbmd0aD4wJiZmLmxpY2VuY2VTZXJ2aWNlLmNoZWNrTGluZWFn'@;
put 'ZUxpbWl0KCkpcmV0dXJuIGYuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIk5vdGljZSIsIllvdSBoYXZlIHJlYWNoZWQgZGFpbHkgbWF4aW11bSBvZiBsaW5lYWdlIGRpYWdyYW0gcmVuZGVyaW5ncy4gVG8gdW5sb2NrIGFkZGl0aW9uYWwgZGlhZ3JhbXMsIGNvbnRhY3Qgc3VwcG9ydEBk'@;
put 'YXRhY29udHJvbGxlci5pbyIpLHZvaWQgZi5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgbmUuYWRhcHRlclJlc3BvbnNlKXJldHVybiBmLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJvcn0iLHZvaWQgZi5idWlsZEdyYXBoKCk7'@;
put 'Zi5saW5lYWdlVGFibGVOYW1lPW5lLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLkxJQlJFRisiLiIrbmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCTkFNRSxmLmxpbmVhZ2VDb2x1bW5OYW1lPW5lLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLkNPTE5BTUUsZi5pZGxvb2t1cD1uZS5hZGFw'@;
put 'dGVyUmVzcG9uc2UuaWRsb29rdXA7bGV0IGNlPW5lLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLGJlPSIiO2ZvcihsZXQgRWU9MDtFZTxjZS5sZW5ndGg7RWUrKyliZSs9dW5lc2NhcGUoY2VbRWVdLlNUUklORykrIlxuIjtpZihmLnZpeklucHV0PWJlfHwiZGlncmFwaCBHIHtObyBMaW5lYWdl'@;
put 'IEF2YWlsYWJsZX0iLGYudml6SW5wdXQ9Zi52aXpJbnB1dC5yZXBsYWNlKC9cc2RzOi9nLCJcbmRzOiIpLnJlcGxhY2UoL1xzXG4vZywiXG4iKSxmLmZsYXRkYXRhPW5lLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YSxmLmxpYnJhcnlMaXN0KXtsZXQgQmUsRWU9Zi5saWJyYXJ5TGlzdC5maW5k'@;
put 'KHFlPT5uZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXT8uTElCVVJJPy50b1VwcGVyQ2FzZSgpPy5pbmNsdWRlcyhxZT8uTElCUkFSWUlEPy50b1VwcGVyQ2FzZSgpKSk7RWUmJih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKEVlLkxJQlJBUllJRCxFZSksRWUudGFibGVzJiYoQmU9RWUudGFibGVz'@;
put 'LmZpbmQocWU9PnFlLlRBQkxFVVJJPT09bmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCVVJJKSxCZSYmZi50YWJsZU9uQ2xpY2soQmUuVEFCTEVVUkksQmUsRWUsITApLnRoZW4oKCk9PntsZXQgcWU9QmUuVEFCTEVVUkk7aWYocWUpe2NvbnN0IHJ0PXFlLnJlcGxhY2UoIlxcIiwiXFxc'@;
put 'XCIpO2xldCBwdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7cnR9J11gKTtzZXRUaW1lb3V0KCgpPT57cHQmJihmLmxvZ2dlclNlcnZpY2UubG9nKCJsaWJyYXJ5VG9TZWxlY3QiLEVlKSxwdC5zY3JvbGxJbnRvVmlldygpKX0sMWUzKX19KSksRWUmJihFZS5leHBhbmRlZD0hMCks'@;
put 'QmUmJihCZS5leHBhbmRlZD0hMCkpfW5lLmFkYXB0ZXJSZXNwb25zZS5mcm9tc2FzLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9bmUuYWRhcHRlclJlc3BvbnNlLmZyb21zYXMubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLE0oKX0pO3JldHVybiBmdW5jdGlv'@;
put 'bihuZSl7cmV0dXJuIFouYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goWj0+e2YuZ3JhcGhMb2FkaW5nPSExLGYuZ3JhcGhDb250YWluZXI9ITF9KX0pfSkoKX1nZXRTVkdVUkwoKXtsZXQgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxkPW5ldyBYTUxTZXJpYWxp'@;
put 'emVyLGg9bmV3IEJsb2IoW2Quc2VyaWFsaXplVG9TdHJpbmcoYSldLHt0eXBlOiJpbWFnZS9zdmcreG1sIn0pO3JldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKGgpfWdldFNWR0Jsb2IoKXtsZXQgYT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZ3JhcGgiKSxkPW5ldyBYTUxTZXJpYWxpemVy'@;
put 'O3JldHVybiBuZXcgQmxvYihbZC5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6ImltYWdlL3N2Zyt4bWwifSl9ZG93bmxvYWRTVkcoKXtpZihWTigiI2dyYXBoIikucmVzZXRab29tKCksbmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cu'@;
put 'bmF2aWdhdG9yLm1zU2F2ZUJsb2IodGhpcy5nZXRTVkdCbG9iKCksdGhpcy5jb25zdHJ1Y3ROYW1lKCJzdmciKSk7ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0U1ZHVVJMKCksYS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoInN2ZyIp'@;
put 'LGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9fWRvd25sb2FkUE5HKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Vk4oIiNncmFwaCIpLnJlc2V0Wm9vbSgpLE1FdC5zYXZlU3ZnQXNQbmcoZG9jdW1l'@;
put 'bnQucXVlcnlTZWxlY3RvcigiI2dyYXBoIHN2ZyIpLGEuY29uc3RydWN0TmFtZSgicG5nIikpfSkoKX1kb3dubG9hZENTVigpe2xldCBhPXRoaXMuZmxhdGRhdGE7Y29uc3QgZD0obmUsY2UpPT5udWxsPT09Y2U/IiI6Y2UsaD1PYmplY3Qua2V5cyhhWzBdKTtsZXQgZj1hLm1hcChuZT0+aC5t'@;
put 'YXAoY2U9PkpTT04uc3RyaW5naWZ5KG5lW2NlXSxkKSkuam9pbigiLCIpKTtmLnVuc2hpZnQoaC5qb2luKCIsIikpO2xldCB2PWYuam9pbigiXHJcbiIpO3ZhciBNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxEPW5ldyBCbG9iKFt2XSx7dHlwZToidGV4dC9jc3YifSk7aWYobmF2aWdh'@;
put 'dG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoRCx0aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpKTtlbHNle3ZhciBaPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKEQpO00uaHJlZj1aLE0uZG93bmxvYWQ9dGhp'@;
put 'cy5jb25zdHJ1Y3ROYW1lKCJjc3YiKSxNLmNsaWNrKCksd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoWiksTS5yZW1vdmUoKX19Z2V0RG90VXJsKCl7bGV0IGQ9bmV3IEJsb2IoW3RoaXMudml6SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO3JldHVybiB3aW5kb3cuVVJMLmNyZWF0ZU9i'@;
put 'amVjdFVSTChkKX1nZXREb3RCbG9iKCl7cmV0dXJuIG5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KX1kb3dubG9hZERvdCgpe2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1Nh'@;
put 'dmVCbG9iKHRoaXMuZ2V0RG90QmxvYigpLHRoaXMuY29uc3RydWN0TmFtZSgidHh0IikpO2Vsc2V7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2EuaHJlZj10aGlzLmdldERvdFVybCgpLGEuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSxkb2N1bWVudC5ib2R5'@;
put 'LmFwcGVuZENoaWxkKGEpLGEuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfX1zaG93U3ZnKCl7d2luZG93Lm9wZW4odGhpcy5nZXRTVkdVUkwoKSwiX2JsYW5rIil9YnVpbGRHcmFwaChhKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLmdyYXBoTG9h'@;
put 'ZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSEwLHNldFRpbWVvdXQoKCk9PntWTigiI2dyYXBoIikuem9vbSghMCkuYWRkSW1hZ2UoImh0dHBzOi8vZGF0YWNvbnRyb2xsZXIuaW8vd3AtY29udGVudC91cGxvYWRzLzIwMjAvMDEvZmMxLnBuZyIsIjMwcHgiLCIzMHB4IikucmVuZGVyRG90'@;
put 'KHRoaXMudml6SW5wdXQsKCk9Pnt0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuaWRsb29rdXAmJnRoaXMubWFrZUdyYXBoTGlua2FibGUodGhpcy5pZGxvb2t1cCksYSYmYSgpfSl9LDEwMCl9Y29uc3RydWN0TmFtZShhKXtsZXQgZD0iIixoPSIiLGY9IiIsdj10VHQoKS5mb3JtYXQoIllZ'@;
put 'TU1ERF9ISG1tIik7aWYodGhpcy5saWJyYXJ5TGlzdCYmdGhpcy5saWJyYXJ5TGlzdC5sZW5ndGgpe2xldCBNPXRoaXMubGlicmFyeUxpc3QuZmluZChEPT5ELkxJQlJBUllJRD09dGhpcy5saWIpO00mJihkPWBfJHtNLkxJQlJBUllOQU1FfWApfWlmKHRoaXMudGFibGVzTGlzdCYmdGhpcy50'@;
put 'YWJsZXNMaXN0Lmxlbmd0aCl7bGV0IE09dGhpcy50YWJsZXNMaXN0LmZpbmQoRD0+RC5UQUJMRVVSST09dGhpcy50YWJsZSk7TSYmKGg9YF8ke00uVEFCTEVOQU1FfWApfWlmKHRoaXMuY29sdW1uc0xpc3QmJnRoaXMuY29sdW1uc0xpc3QubGVuZ3RoKXtsZXQgTT10aGlzLmNvbHVtbnNMaXN0'@;
put 'LmZpbmQoRD0+RC5DT0xVUkk9PXRoaXMuY29sdW1uKTtNJiYoZj1gXyR7TS5DT0xOQU1FfWApfXJldHVybmAke3RoaXMuZGlyZWN0aW9uVGV4dCgpfSR7ZH0ke2h9JHtmfV8ke3Z9LiR7YX1gfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHUx'@;
put 'KSxHZSh0bCksR2UoQ3UpLEdlKExzKSxHZShwaCksR2UodmMpLEdlKE1kKSxHZShZdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWxpbmVhZ2UiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjU4LHZhcnM6MTEs'@;
put 'Y29uc3RzOltbIm1heERlcHRoRG90IiwiIl0sWyJtYXhEZXB0aCIsIiJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbMywic2Nyb2xsZWRUb0JvdHRvbSJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9y'@;
put 'T2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEs'@;
put 'Im1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iXSxbMSwiYmlnbGluZWFnZS1yb3ciLCJtYi0waSJdLFsidHlwZSIsIm51bWJlciIsIm1pbiIsIjEiLCJwbGFjZWhvbGRlciIsIk1heCBkZXB0aCB2YWx1ZSIsMSwi'@;
put 'Y2xyLWlucHV0IiwibWF4LWRlcHRoLWlucHV0Il0sWzEsIm1iLTIwIl0sWzEsImJpZ2xpbmVhZ2Utcm93Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwi'@;
put 'YnRuLXByaW1hcnkiLCJtdC0zLW5lZ2F0aXZlIiwzLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Iiw0LCJjbHJJZk9wZW4iXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxG'@;
put 'b2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVz'@;
put 'IiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJj'@;
put 'bHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJF'@;
put 'eHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJd'@;
put 'LFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLCJpZCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVs'@;
put 'Q2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBl'@;
put 'Iiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVz'@;
put 'dGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImZvcm0tYmxvY2siLCJzdyIsInBvc2l0aW9uLXJlbGF0aXZlIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImxpbmFnZS10aXRsZS13cmFwcGVyIiwiZC1mbGV4IiwiYWxpZ24taXRl'@;
put 'bXMtY2VudGVyIiwiZm9udC13ZWlnaHQtYm9sZCIsInBvc2l0aW9uLWFic29sdXRlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQiLDQsIm5nSWYiXSxbMywibXQtMiIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQt'@;
put 'ZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBwYi0xMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsInBiLTEwIl0sWzMsInJvdXRlckxpbmsiXSxbMSwiY2xyLWNvbC1tZC0xMiIsInRleHQtY2VudGVyIiwiZC1m'@;
put 'bGV4IiwianVzdGlmeS1jb250ZW50LWVuZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJtci01IiwzLCJjbGljayJdLFsxLCJidG4tZ3JvdXAiLCJkaXJlY3Rpb24iLCJkLWJsb2NrIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlv'@;
put 'IiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJtci0xMCJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4taW5mby1vdXRsaW5lIiwzLCJkaXNhYmxlZCJdLFsiY2xhc3MiLCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIiw0LCJu'@;
put 'Z0lmIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsidHlwZSIsImNoZWNrYm94Iiwi'@;
put 'Y2xyQ2hlY2tib3giLCIiLCJuYW1lIiwicmVmcmVzaENhY2hlIiwzLCJjaGFuZ2UiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInBvc2l0aW9uLXJlbGF0aXZlIiw0LCJuZ0lmIl0sWzEs'@;
put 'InNwaW5uZXIiXSxbMSwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiZ3JhcGgtcmVuZGVyLXNwaW5uZXIiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJpZCIsImdyYXBoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUxuKCk7ZGUo'@;
put 'MCwiYXBwLXNpZGViYXIiLDQpLEZ0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmxvYWRNb3JlTGlicmFyaWVzKCkpfSksZGUoMSwiY2xyLXRyZWUiKSxtdCgyLFRFdCw2LDMsImNsci10cmVlLW5vZGUiLDUpKDMsSEV0LDIsMSwibmctY29udGFpbmVy'@;
put 'Iiw2KSxoZSgpLG10KDQsTkV0LDMsMCwiZGl2Iiw3KSxoZSgpLGRlKDUsImRpdiIsOCkoNiwiZGl2Iiw5KSxtdCg3LFZFdCw0LDAsImRpdiIsMTApKDgsSkV0LDgsNCwibmctY29udGFpbmVyIiwxMSksaGUoKSgpLGRlKDksImNsci1tb2RhbCIsMTIpKDEwLCJoMyIsMTMpLExlKDExLCJMaW1p'@;
put 'dCBEZXB0aCIpLGhlKCksZGUoMTIsImRpdiIsMTQpKDEzLCJwIiksTGUoMTQsIkVudGVyIHRoZSBkZXB0aCBudW1iZXIgeW91IHdvdWxkIGxpa2UgdG8gbGltaXQgRE9UIHJlbmRlcmluZyB0bzoiKSxoZSgpKCksZGUoMTUsImRpdiIsMTUpKDE2LCJkaXYiLDE2KSxHdCgxNywiaW5wdXQiLDE3'@;
put 'LDApLGhlKCksZGUoMTksImNsci1jb250cm9sLWhlbHBlciIsMTgpLExlKDIwLCJUbyByZW5kZXIgd2l0aCB1bmxpbWl0ZWQgZGVwdGgsIGxlYXZlIHRoZSBpbnB1dCBlbXB0eSIpLGhlKCksZGUoMjEsImRpdiIsMTkpKDIyLCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHd0KGYpLEN0KGgubGltaXREb3REZXB0aD0hMSl9KSxMZSgyMywiIENhbmNlbCAiKSxoZSgpLGRlKDI0LCJidXR0b24iLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoZik7Y29uc3QgTT12bygxOCk7cmV0dXJuIGgucmVzdWJtaXRXaXRoTWF4RGVwdGgoTS52YWx1ZSksQ3QoaC5s'@;
put 'aW1pdERvdERlcHRoPSExKX0pLExlKDI1LCIgUmVzdWJtaXQgIiksaGUoKSgpKCkoKSxkZSgyNiwiY2xyLW1vZGFsIiwxMikoMjcsImgzIiwxMyksTGUoMjgsIldhcm5pbmciKSxoZSgpLGRlKDI5LCJkaXYiLDE0KSgzMCwicCIpLExlKDMxKSxoZSgpKCksZGUoMzIsImRpdiIsMTUpKDMzLCJk'@;
put 'aXYiLDE5KSgzNCwicCIpLExlKDM1LCJSZW5kZXIgYW55d2F5ICh0aGlzIG1heSB0YWtlIGEgbG9uZyB0aW1lKSIpLGhlKCksZGUoMzYsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCkpfSksTGUoMzcs'@;
put 'IiBSZW5kZXIgIiksaGUoKSgpLGRlKDM4LCJkaXYiLDE5KSgzOSwicCIpLExlKDQwLCJEb3dubG9hZCB0aGUgcmVzdWx0IChQTkcgJiBTVkcgcmVxdWlyZSByZW5kZXJpbmcpIiksaGUoKSxkZSg0MSwiY2xyLWRyb3Bkb3duIikoNDIsImJ1dHRvbiIsMjEpLExlKDQzLCIgRG93bmxvYWQgIiks'@;
put 'R3QoNDQsImNsci1pY29uIiwyMiksaGUoKSxtdCg0NSxlVHQsNiwxLCJjbHItZHJvcGRvd24tbWVudSIsMjMpLGhlKCkoKSxkZSg0NiwiZGl2IiwxOSkoNDcsInAiKSxMZSg0OCwiUmVzdWJtaXQgd2l0aCBhIG1heC1kZXB0aCAoc3BlY2lmeSBkZXB0aCkiKSxoZSgpLEd0KDQ5LCJpbnB1dCIs'@;
put 'MTcsMSksZGUoNTEsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPXZvKDUwKTtyZXR1cm4gQ3QoaC5yZXN1Ym1pdFdpdGhNYXhEZXB0aChNLnZhbHVlKSl9KSxMZSg1MiwiIFJlc3VibWl0ICIpLGhlKCkoKSxkZSg1MywiZGl2IiwxOSkoNTQsInAiKSxM'@;
put 'ZSg1NSwiQ2FuY2VsIHRoaXMgc3VibWlzc2lvbiIpLGhlKCksZGUoNTYsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jYW5jZWxSZW5kZXJpbmdHcmFwaCgpKX0pLExlKDU3LCIgQ2FuY2VsICIpLGhlKCkoKSgpKCl9MiZkJiYoZmUoMikseGUo'@;
put 'Im5nSWYiLGgubGlicmFyeUxpc3QpLGZlKCkseGUoIm5nRm9yT2YiLGgubGlicmFyeUxpc3QpLGZlKCkseGUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSxmZSgzKSx4ZSgibmdJZiIsIWguY29sdW1uJiYhaC50YWJsZSksZmUoKSx4ZSgibmdJZiIsaC5jb2x1bW58fGgudGFibGUpLGZlKCks'@;
put 'eGUoImNsck1vZGFsT3BlbiIsaC5saW1pdERvdERlcHRoKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDE3KSx4ZSgiY2xyTW9kYWxPcGVuIixudWxsIT09aC5sYXJnZURvdEZpbGVMaW5lcykoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg1KSxJcigiIFRoZSBnZW5lcmF0ZWQgZG90IGZp'@;
put 'bGUgaGFzICIsaC5sYXJnZURvdEZpbGVMaW5lcywiIGxpbmVzLiBSZW5kZXJpbmcgbWF5IHRha2UgYSBsb25nIHRpbWUsIGhvdyB3b3VsZCB5b3UgbGlrZSB0byBwcm9jZWVkPyAiKSxmZSgxMSkseGUoImRpc2FibGVkIiwhaC5jb2x1bW4mJiFoLnRhYmxlKSl9LGRlcGVuZGVuY2llczpbbHMs'@;
put 'eW8sYzEsZWMsQjEsbmwsR3MsVGgsUGQsZmcsRmwsb3UsJHUsVjAsRDIsZHMsQkwsVzEsSWQsUmQsc2csZjcscDcsTnksaTQscjRdLHN0eWxlczpbIi50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9Y2hlY2tib3hdW19uZ2NvbnRlbnQtJUNPTVAlXTpjaGVj'@;
put 'a2VkICsgbGFiZWxbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBlYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29s'@;
put 'b3J9I2dyYXBoW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDB2aCAtIDE5NXB4KTtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpjZW50ZXI7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO2JvcmRlcjoxcHggc29saWQgI2U0ZTRlNDttYXJnaW4tdG9wOjEwcHh9LnNlbGVjdGlv'@;
put 'bi13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO21heC13aWR0aDo2NzBweH0uY29sdW1uLWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZDhlM2U5O2NvbG9yOiMwMDB9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNXJl'@;
put 'bSFpbXBvcnRhbnR9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAuY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDpjYWxjKDEwMHZoIC0gMTIwcHgpfS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgLmNhcmRbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVyZW0gLjM1cmVtIWltcG9ydGFudH1jbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5idG4tZ3JvdXAuZGlyZWN0aW9uW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5ncmFwaC1yZW5kZXItc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRl'@;
put 'cjttYXJnaW4tdG9wOjEwcHh9LmJpZ2xpbmVhZ2Utcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1ib3R0b206MjBweH0ubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowfS5saW5lYWdlLXRpdGxlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MTJweH0ubWF4LWRlcHRoLWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfUBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCl7LnRvZ2ds'@;
put 'ZS1zd2l0Y2gtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjIwcHh9fSJdfSl9fXJldHVybiBjfSkoKTtjb25zdCBuVHQ9KCk9PlsxMCwyMCw1MCwxMDBdO2Z1bmN0aW9uIHJUdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMTQpLExlKDEpLGhlKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmTSgidmFsdWUiLGEpLGZlKCksSXIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gaVR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjApfWZ1bmN0aW9uIG9UdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwyMSksRnQoImNs'@;
put 'aWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGgubWV0YURhdGFTZWFyY2g9IiIsQ3QoaC5tZXRhTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gYVR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpKDEsImRp'@;
put 'diIsMTYpKDIsImlucHV0IiwxNywwKSxnaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBiaShmLm1ldGFEYXRhU2VhcmNoLGgpfHwoZi5tZXRhRGF0YVNlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3Qo'@;
put 'YSksQ3QoT2UoKS5tZXRhTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxtdCg0LGlUdCwxLDAsImNsci1pY29uIiwxOCkoNSxvVHQsMSwwLCJjbHItaWNvbiIsMTkpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9dm8oMyksZD1PZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLm1ldGFEYXRhU2VhcmNoKSxm'@;
put 'ZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHNUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDIzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0'@;
put 'IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5tZXRhRGF0YUxpc3QpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gYmkoZi5leHBhbmRlZCxoKXx8'@;
put 'KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwyNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQsZj1PZSgpO3JldHVybiBmLm1ldGFEYXRhSWQ9aC5JRCxDdChmLm1ldGFEYXRhT25DbGljayhmLm1ldGFEYXRhSWQsaCkpfSksR3QoMiwi'@;
put 'Y2xyLWljb24iLDI1KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O3BpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxJcigiICIsYS5JRCwiICIpfX1mdW5jdGlvbiBs'@;
put 'VHQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLHNUdCw0LDMsImNsci10cmVlLW5vZGUiLDIyKSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gY1R0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyNiksR3QoMSwiY2xyLWlj'@;
put 'b24iLDI3KSxkZSgyLCJwIiwyOCksTGUoMywiIFBsZWFzZSBzZWxlY3QgYSB0eXBlICIpLGhlKCkoKSl9ZnVuY3Rpb24gdVR0KGMsbCl7MSZjJiYoZGUoMCwiaDQiKSxMZSgxLCJMb2FkaW5nIG1ldGFkYXRhIHR5cGVzIiksaGUoKSl9ZnVuY3Rpb24gZFR0KGMsbCl7MSZjJiYoZGUoMCwiaDQi'@;
put 'KSxMZSgxLCJMb2FkaW5nIG1ldGFkYXRhIG9iamVjdHMiKSxoZSgpKX1mdW5jdGlvbiBoVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxtdCgxLHVUdCwyLDAsImg0IiwzMSkoMixkVHQsMiwwLCJoNCIsMzEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIixhLm1l'@;
put 'dGF0eXBlc0xvYWRpbmcpLGZlKCkseGUoIm5nSWYiLCFhLm1ldGF0eXBlc0xvYWRpbmcpfX1mdW5jdGlvbiBmVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI5KSgxLCJzcGFuIiwzMCksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSxtdCgzLGhUdCwzLDIsImRpdiIsMzEpLGhlKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1PZSgpO2ZlKDMpLHhlKCJuZ0lmIixhLmxvYWRpbmcpfX1mdW5jdGlvbiBwVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYiLDM4KSgxLCJpbnB1dCIsMzksMSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMik7'@;
put 'cmV0dXJuIGJpKGYubWV0YU9iamVjdFNlYXJjaCxoKXx8KGYubWV0YU9iamVjdFNlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikubWV0YU9iamVjdE9uRmlsdGVyKCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSgp'@;
put 'LHBpKCJuZ01vZGVsIixhLm1ldGFPYmplY3RTZWFyY2gpfX1mdW5jdGlvbiBnVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw0Myl9ZnVuY3Rpb24gbVR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjUpfWZ1bmN0aW9uIHZUdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDU0KSxMZSgx'@;
put 'KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoKSxJcigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gYlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIpLG10KDMsZ1R0LDEsMCwiY2xyLWljb24iLDUxKSg0LG1U'@;
put 'dCwxLDAsImNsci1pY29uIiw1MiksTGUoNSksaGUoKSxtdCg2LHZUdCwyLDEsInAiLDUzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgiY2xyRXhwYW5kYWJsZSIsITApLGZlKCksVHIoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxmZSgyKSx4ZSgibmdJZiIsIWEuY291'@;
put 'bnQpLGZlKCkseGUoIm5nSWYiLGEuY291bnQpLGZlKCksSXIoIiAiLGEuZGlzcGxheSwiICIpLGZlKCkseGUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rpb24geVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUiLDQ3KSxtdCgxLGJUdCw3LDcsImNsci10cmVlLW5vZGUiLDQ4KSxRcygy'@;
put 'LCJhc3luYyIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg2KTt4ZSgiY2xyTGF6eSIsITApLGZlKCkseGUoImNsclJlY3Vyc2l2ZUZvck9mIixEYygyLDMsYS5yb290JCkpKCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsYS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIF9UdChjLGwpe2lmKDEm'@;
put 'YyYmKGRlKDAsImNsci1hY2NvcmRpb24tY29udGVudCIpLG10KDEseVR0LDMsNSwiY2xyLXRyZWUiLDQ2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoKSx4ZSgibmdJZiIsYS5zaG93QWNjKX19ZnVuY3Rpb24gd1R0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWFj'@;
put 'Y29yZGlvbi1wYW5lbCIsNDIpLEZ0KCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgzKTtyZXR1cm4gQ3QoaD92LnBhbmVsQ2hhbmdlKGgsZik6IiIpfSksZGUoMSwiY2xyLWFjY29yZGlvbi10aXRsZSIp'@;
put 'LEd0KDIsImNsci1pY29uIiw0MyksTGUoMyksZGUoNCwicCIsNDQpLExlKDUpLGhlKCkoKSxtdCg2LF9UdCwyLDEsImNsci1hY2NvcmRpb24tY29udGVudCIsNDUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDMpLElyKCIgIixhLk5BTUUsIiAiKSxmZSgyKSx3cihh'@;
put 'LklEKX19ZnVuY3Rpb24gQ1R0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSx3VHQsNywyLCJjbHItYWNjb3JkaW9uLXBhbmVsIiw0MSksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIFNUdChjLGwpe2lmKDEmYyYmKGRl'@;
put 'KDAsImRpdiIsNDApKDEsImNsci1hY2NvcmRpb24iKSxtdCgyLENUdCwyLDEsIm5nLWNvbnRhaW5lciIsNyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMikseGUoIm5nRm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gTVR0KGMsbCl7MSZjJiZHdCgwLCJjbHIt'@;
put 'aWNvbiIsNDMpfWZ1bmN0aW9uIHhUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI1KX1mdW5jdGlvbiBFVHQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiw1NCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCksSXIoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9u'@;
put 'IFRUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDQ5KSgxLCJkaXYiLDUwKSgyLCJkaXYiKSxtdCgzLE1UdCwxLDAsImNsci1pY29uIiw1MSkoNCx4VHQsMSwwLCJjbHItaWNvbiIsNTIpLExlKDUpLGhlKCksbXQoNixFVHQsMiwxLCJwIiw1MyksaGUoKSgpKSwyJmMpe2Nv'@;
put 'bnN0IGE9bC4kaW1wbGljaXQ7eGUoImNsckV4cGFuZGFibGUiLCEwKSxmZSgpLFRyKCJvYmplY3QtaGVhZGVyIiwhYS5jb3VudCksZmUoMikseGUoIm5nSWYiLCFhLmNvdW50KSxmZSgpLHhlKCJuZ0lmIixhLmNvdW50KSxmZSgpLElyKCIgIixhLmRpc3BsYXksIiAiKSxmZSgpLHhlKCJuZ0lm'@;
put 'IiwhYS5jb3VudCl9fWZ1bmN0aW9uIEFUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlIiw0NyksbXQoMSxUVHQsNyw3LCJjbHItdHJlZS1ub2RlIiw0OCksUXMoMiwiYXN5bmMiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7eGUoImNsckxhenkiLCEwKSxmZSgpLHhlKCJjbHJSZWN1'@;
put 'cnNpdmVGb3JPZiIsRGMoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiBrVHQoYyxsKXtpZigxJmMmJihjaSgwKSxkZSgxLCJkaXYiLDU1KSxHdCgyLCJjbHItaWNvbiIsNDMpLGRlKDMsImRpdiIsNTYpKDQsInAiLDU3'@;
put 'KSxMZSg1KSxoZSgpLGRlKDYsInAiLDU4KSxMZSg3KSxoZSgpKCkoKSxtdCg4LEFUdCwzLDUsImNsci10cmVlIiw0NiksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoMyk7ZmUoNSksSXIoIiAiLGEuTkFNRSwiICIpLGZlKDIpLElyKCIgIixhLklELCIgIiksZmUoKSx4ZSgi'@;
put 'bmdJZiIsZC5zaG93QWNjKX19ZnVuY3Rpb24gRFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0MCksbXQoMSxrVHQsOSwzLCJuZy1jb250YWluZXIiLDcpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93TGlzdCl9fWZ1bmN0aW9u'@;
put 'IElUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLExlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxMZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksTGUoNiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksd3Io'@;
put 'YS5UWVBFKSxmZSgyKSx3cihhLk5BTUUpLGZlKDIpLHdyKGEuVkFMVUUpfX1mdW5jdGlvbiBSVHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZGF0YWdyaWQiLDU5KSgxLCJjbHItZGctY29sdW1uIiksTGUoMiwiIFRZUEUgIiksR3QoMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDYwKSxoZSgp'@;
put 'LGRlKDQsImNsci1kZy1jb2x1bW4iKSxMZSg1LCIgTkFNRSAiKSxHdCg2LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGhlKCksZGUoNywiY2xyLWRnLWNvbHVtbiIpLExlKDgsIiBWQUxVRSAiKSxHdCg5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGhlKCksbXQoMTAsSVR0LDcsMywi'@;
put 'Y2xyLWRnLXJvdyIsNjEpLGRlKDExLCJjbHItZGctZm9vdGVyIikoMTIsImNsci1kZy1wYWdpbmF0aW9uIiw2MiwyKSgxNCwiY2xyLWRnLXBhZ2Utc2l6ZSIsNjMpLExlKDE1LCJBdHRyaWJ1dGVzIHBlciBwYWdlIiksaGUoKSxMZSgxNiksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT12bygxMyks'@;
put 'ZD1PZSgyKTtmZSgzKSx4ZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQudHlwZUZpbHRlciksZmUoMykseGUoImNsckRnU3RyaW5nRmlsdGVyIixkLm5hbWVGaWx0ZXIpLGZlKDMpLHhlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC52YWx1ZUZpbHRlciksZmUoKSx4ZSgiY2xyRGdJdGVtc09mIixkLm1l'@;
put 'dGFPYmplY3RBdHRyaWJ1dGVzKSxmZSgyKSx4ZSgiY2xyRGdQYWdlU2l6ZSIsMTApLGZlKDIpLHhlKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLFlzKDksblR0KSksZmUoMiksRmYoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBBdHRyaWJ1'@;
put 'dGVzICIpfX1mdW5jdGlvbiBMVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMyKSgxLCJkaXYiLDMzKSxtdCgyLHBUdCwzLDEsImRpdiIsMzQpLEd0KDMsImJyIiksbXQoNCxTVHQsMywxLCJkaXYiLDM1KSg1LERUdCwyLDEsImRpdiIsMzUpLGhlKCksZGUoNiwiZGl2IiwzNikoNywiaDMi'@;
put 'KSxMZSg4KSxoZSgpLG10KDksUlR0LDE3LDEwLCJjbHItZGF0YWdyaWQiLDM3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLHhlKCJuZ0lmIixhLm1ldGFPYmplY3RMaXN0JiYhYS5vYmplY3RSb3V0ZSksZmUoMikseGUoIm5nSWYiLCFhLm9iamVjdFZpZXcpLGZlKCkseGUoIm5n'@;
put 'SWYiLGEub2JqZWN0VmlldyksZmUoMyksd3IoYS5hc3NvT2JqZWN0U2VsZWN0ZWQpLGZlKCkseGUoIm5nSWYiLGEuc2hvd1RhYmxlKX19bGV0IHp0ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmV2ZW50U2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRo'@;
put 'aXMuaGVscGVyU2VydmljZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj12LHRoaXMucm91dGU9TSx0aGlzLm1ldGFEYXRhU2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdFNlYXJjaD0iIix0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnM9W10sdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRl'@;
put 'cz1bXSx0aGlzLnNob3dUYWJsZT0hMSx0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhRGF0YUlkPSIiLHRoaXMubG9hZGluZz0hMCx0aGlzLm1ldGF0eXBlc0xvYWRpbmc9ITAsdGhpcy5tZXRhT2JqZWN0U2l6ZT0yMDAsdGhpcy5hc3NvVHlwZVNlbGVjdGVkPSIiLHRoaXMuYXNzb09iamVjdFNl'@;
put 'bGVjdGVkPSIiLHRoaXMucmVwb3NpdG9yeT0iIix0aGlzLm9iamVjdFJvdXRlPSExLHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5vYmplY3RWaWV3PSExLHRoaXMuZ2V0Q2hpbGRyZW49RD0+RC5jb3VudD9mYShELmRldGFpbHMpOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFk'@;
put 'ZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOkQuQVNTT0NVUkl9XX0pLnRoZW4obmU9Pnt0aGlzLnNob3dUYWJsZT0hMCx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPW5lLmFkYXB0ZXJSZXNwb25zZS5hdHRyaWJ1dGVzLHRoaXMuYXNzb09iamVjdFNlbGVjdGVkPUQuTkFN'@;
put 'RTtsZXQgY2U9dGhpcy5yb3V0ZXIudXJsO3JldHVybiB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLm9iamVjdFJvdXRlP2NlLnNsaWNlKDAsY2UubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrRC5BU1NPQ1VSSS5zbGljZSgxK0QuQVNTT0NVUkkuaW5kZXhPZigiXFwi'@;
put 'KSk6Y2UrIi9vYmplY3QvIitELkFTU09DVVJJLnNsaWNlKDErRC5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKSksdGhpcy5nZXRBc3Nvc2lhdGlvbnNDb3VudChuZS5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zKX0pLHRoaXMuZGVib3VuY2U9ITF9bmdPbkluaXQoKXtLbi52aWV3ZXIuY3Vy'@;
put 'cmVudFNlbGVjdGlvbj0idmlldy9tZXRhZGF0YSIsdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvdmlldy9tZXRhZGF0YS9vYmplY3QvIikmJih0aGlzLm9iamVjdFJvdXRlPSEwLHRoaXMub2JqZWN0Vmlldz0hMCksdGhpcy5wYWdlU2l6ZT01LEtuLm1ldGFkYXRhLm1ldGFEYXRhTGlzdCYm'@;
put 'S24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyYmIXRoaXMub2JqZWN0Um91dGU/KHRoaXMubWV0YURhdGFMaXN0PUtuLm1ldGFkYXRhLm1ldGFEYXRhTGlzdCx0aGlzLnJlcG9zaXRvcmllcz1Lbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzLHRoaXMucmVwb3NpdG9yeT1Lbi5tZXRhZGF0'@;
put 'YS5zZWxlY3RlZFJlcG9zaXRvcnksdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMSx0aGlzLm1ldGFEYXRhU2VhcmNoPUtuLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoKToodGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YXR5cGVzIixudWxsKS50aGVu'@;
put 'KGE9Pnt0aGlzLm1ldGFEYXRhTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS50eXBlcyxLbi5tZXRhZGF0YS5tZXRhRGF0YUxpc3Q9dGhpcy5tZXRhRGF0YUxpc3QsdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMX0pLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2'@;
put 'L21ldGFyZXBvcyIsbnVsbCkudGhlbihhPT57bGV0IGQ9ITE7dGhpcy5yZXBvc2l0b3JpZXM9W107Zm9yKGxldCBoPTA7aDxhLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvcy5sZW5ndGg7aCsrKXRoaXMucmVwb3NpdG9yaWVzLnB1c2goYS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3NbaF0uTkFN'@;
put 'RSksIkZvdW5kYXRpb24iPT09YS5hZGFwdGVyUmVzcG9uc2Uub3V0cmVwb3NbaF0uTkFNRSYmKGQ9ITApO2lmKHRoaXMucmVwb3NpdG9yeT1kPyJGb3VuZGF0aW9uIjphLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvc1swXS5OQU1FLEtuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3JpZXM9dGhpcy5y'@;
put 'ZXBvc2l0b3JpZXMsS24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMucmVwb3NpdG9yeSx0aGlzLm9iamVjdFJvdXRlKXt0aGlzLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSx0aGlzLnNob3dEYXRhPSEwO2xldCBoPSIiLGY9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMu'@;
put 'b2JqZWN0SUQ7dGhpcy5tZXRhT2JqZWN0TGlzdD1bXSx0aGlzLm1ldGFPYmplY3RMaXN0LnB1c2goe0lEOmYsTkFNRTpofSksdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9dGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RPbkNsaWNrKHRoaXMubWV0YU9iamVjdFNob3dMaXN0WzBd'@;
put 'LklELHRoaXMubWV0YU9iamVjdFNob3dMaXN0WzBdKX19KSl9dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdp'@;
put 'ZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5kZWQ9ITEpfSl9bWV0YURhdGFPbkNsaWNrKGEsZCl7dGhpcy5vYmplY3RWaWV3PSExLHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvdmlldy9tZXRhZGF0YSIpLHRoaXMuc2hvd0RhdGE9ITEsdGhpcy5sb2FkaW5nPSEwLHRo'@;
put 'aXMuc2VsZWN0bWV0YURhdGEoYSxkKX1tZXRhT2JqZWN0T25DbGljayhhLGQpe3RoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIgLiAiLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2VsZWN0bWV0YU9iamVjdChhLGQpfXNlbGVjdG1ldGFEYXRhKGEs'@;
put 'ZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YW9iamVjdHMiLHtTQVNDb250cm9sVGFibGU6W3ttZXRhdHlwZTphLHJlcG86aC5yZXBvc2l0b3J5fV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RMaXN0PXYuYWRhcHRl'@;
put 'clJlc3BvbnNlLm9iamVjdHMsaC5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhoLm1ldGFPYmplY3RTaXplKSxoLmxvYWRpbmc9ITEsaC5hc3NvVHlwZVNlbGVjdGVkPWEsaC5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksaC5zaG93RGF0YT0hMH0pfSkoKX1zZWxlY3RtZXRhT2JqZWN0KGEs'@;
put 'ZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6YX1dfSkudGhlbih2PT57aC5tZXRhT2JqZWN0QXNzb2NpYXRpb25zPXYuYWRhcHRlclJlc3BvbnNl'@;
put 'LmFzc29jaWF0aW9ucyxoLnJvb3QkPWZhKGguZ2V0QXNzb3NpYXRpb25zQ291bnQodi5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zKSksaC5zaG93QWNjPSEwLGguc2hvd1RhYmxlPSEwO2xldCBNPXYuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXMuZmluZChaPT4iTmFtZSI9PT1aLk5B'@;
put 'TUUpLlZBTFVFO2guYXNzb09iamVjdFNlbGVjdGVkPU0sZC5OQU1FPU07bGV0IEQ9aC5yb3V0ZXIudXJsO2gubG9jYXRpb24ucmVwbGFjZVN0YXRlKGgub2JqZWN0Um91dGU/RC5zbGljZSgwLEQubGFzdEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrYS5zbGljZSgxK2EuaW5kZXhPZigi'@;
put 'XFwiKSk6RCsiL29iamVjdC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpKSxoLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXYuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXN9KX0pKCl9c2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9u'@;
put 'Kigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21ldGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4odj0+e2gubWV0YU9iamVjdEF0dHJpYnV0ZXM9di5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlcyxoLnNob3dUYWJsZT0hMH0pfSkoKX1n'@;
put 'ZXRBc3Nvc2lhdGlvbnNDb3VudChhKXtsZXQgZD1uZXcgTWFwO2ZvcihsZXQgZiBvZiBhKXtkLmhhcyhmLkFTU09DKXx8ZC5zZXQoZi5BU1NPQyx7Y291bnQ6MCxkZXRhaWxzOltdfSk7bGV0IHY9ZC5nZXQoZi5BU1NPQyk7di5jb3VudCsrLHYuZGV0YWlscy5wdXNoKHtBU1NPQ1VSSTpmLkFT'@;
put 'U09DVVJJLE5BTUU6Zi5OQU1FLGRpc3BsYXk6Zi5OQU1FLFVSSTpmLkFTU09DVVJJLnNsaWNlKGYuQVNTT0NVUkkuaW5kZXhPZigiOiIpKzEpfSl9bGV0IGg9W107cmV0dXJuIGQuZm9yRWFjaChmdW5jdGlvbihmLHYpe2gucHVzaCh7QVNTT0M6dixjb3VudDpmLmNvdW50LGRldGFpbHM6Zi5k'@;
put 'ZXRhaWxzLGRpc3BsYXk6disiICggIitmLmNvdW50KyIgKSJ9KX0pLGh9c2V0VHlwZUFzc29zaWF0aW9ucyhhKXtsZXQgZD1bXTtmb3IobGV0IGggb2YgdGhpcy5tZXRhT2JqZWN0QXNzb2NpYXRpb25zKWguQVNTT0M9PT1hJiZkLnB1c2goaCk7cmV0dXJuIHRoaXMuYXNzb3NpYXRpb25OYW1l'@;
put 'cz1kLGR9YXNzb3NpYXRpb25OYW1lT25DbGljayhhKXt0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhhKX1tZXRhTGlzdE9uRmlsdGVyKCl7dGhp'@;
put 'cy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLm1ldGFEYXRhTGlzdCx0aGlzLm1ldGFEYXRhU2VhcmNoLCJJRCIpLEtuLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoPXRoaXMubWV0YURhdGFTZWFyY2h9bWV0YU9iamVjdE9uRmlsdGVyKCl7dGhpcy5tZXRhT2JqZWN0QXR0cmli'@;
put 'dXRlcz1bXSx0aGlzLmhlbHBlclNlcnZpY2UubWV0YU9iamVjdE9uRmlsdGVyKHRoaXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2JqZWN0U2VhcmNoLCJOQU1FIiksdGhpcy5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyh0aGlzLm1ldGFPYmplY3RTaXplKSxLbi5tZXRhZGF0YS5tZXRhT2Jq'@;
put 'ZWN0U2VhcmNoPXRoaXMubWV0YU9iamVjdFNlYXJjaH1nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhhKXtpZih2b2lkIDAhPT10aGlzLm1ldGFPYmplY3RMaXN0JiZ0aGlzLm1ldGFPYmplY3RMaXN0Lmxlbmd0aD5hKXtsZXQgZD0wLGg9LTE7Zm9yKGxldCBmPTA7Zjx0aGlzLm1ldGFPYmplY3RM'@;
put 'aXN0Lmxlbmd0aDtmKyspaWYoKHZvaWQgMD09PXRoaXMubWV0YU9iamVjdExpc3RbZl0uaGlkZGVufHwhMT09PXRoaXMubWV0YU9iamVjdExpc3RbZl0uaGlkZGVuKSYmZCsrLGQ9PT1hKXtoPWY7YnJlYWt9dGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9LTEhPT1oP3RoaXMubWV0YU9iamVjdExp'@;
put 'c3Quc2xpY2UoMCxoKTp0aGlzLm1ldGFPYmplY3RMaXN0fWVsc2UgdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9dGhpcy5tZXRhT2JqZWN0TGlzdH1wYW5lbENoYW5nZShhLGQpe3RoaXMuZGVib3VuY2V8fCh0aGlzLm1ldGFPYmplY3RPbkNsaWNrKGQuSUQsZCksdGhpcy5kZWJvdW5jZT0hMCxz'@;
put 'ZXRUaW1lb3V0KCgpPT57dGhpcy5kZWJvdW5jZT0hMX0sNjAwKSl9dXBkYXRlU2VsZWN0ZWRSZXBvc2l0b3J5KCl7S24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMucmVwb3NpdG9yeX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShH'@;
put 'ZSh2YyksR2UodGwpLEdlKFl1KSxHZShwaCksR2UoTHMpLEdlKEN1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbWV0YWRhdGEiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjE3LHZhcnM6OCxjb25zdHM6W1si'@;
put 'c2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hPYmpUcmVlSW5wdXQiLCIiXSxbInBhZ2luYXRpb24iLCIiXSxbMSwicmVwby1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFszLCJ2'@;
put 'YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQtaSJdLFsxLCJjb2xvci1ncmF5Il0sWyJjbGFzcyIs'@;
put 'Im5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1yb3cgY2xyLWZsZXgtZ3Jvdy0xIiw0LCJuZ0lmIl0sWzMsInZhbHVlIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIi'@;
put 'XSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIFNBUyBUeXBlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5n'@;
put 'SWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJjbGlj'@;
put 'ayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJibG9jayJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIs'@;
put 'IjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbNCwibmdJZiJdLFsxLCJjbHItcm93IiwiY2xyLWZsZXgtZ3Jv'@;
put 'dy0xIl0sWzEsImNsci1jb2wtNiJdLFsiY2xhc3MiLCJzZWFyY2gtaW5wdXQiLDQsIm5nSWYiXSxbImNsYXNzIiwib2JqZWN0cy1jb2wiLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC02IiwidGV4dC1jZW50ZXIiXSxbImNsYXNzIiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciIsNCwibmdJZiJdLFsx'@;
put 'LCJzZWFyY2gtaW5wdXQiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJzZWFyY2giLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwib2JqZWN0cy1jb2wiXSxbMywiY2xyQWNjb3JkaW9uUGFu'@;
put 'ZWxPcGVuQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsxLCJmbG9hdC1yaWdodCJdLFs0LCJjbHJJZkV4cGFuZGVkIl0sWzMsImNsckxhenkiLDQsIm5nSWYiXSxbMywiY2xyTGF6eSJdLFszLCJjbHJF'@;
put 'eHBhbmRhYmxlIiw0LCJjbHJSZWN1cnNpdmVGb3IiLCJjbHJSZWN1cnNpdmVGb3JPZiIsImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIl0sWzMsImNsckV4cGFuZGFibGUiXSxbMSwiZnVsbC13aWR0aCJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciIsNCwibmdJZiJdLFsic2hhcGUiLCJibG9j'@;
put 'ayIsNCwibmdJZiJdLFsiY2xhc3MiLCJmbG9hdC1yaWdodCBvYmplY3QtdXJpIiw0LCJuZ0lmIl0sWzEsImZsb2F0LXJpZ2h0Iiwib2JqZWN0LXVyaSJdLFsxLCJjb2xzLWhlYWQiXSxbMSwib2JqZWN0LXRleHQiXSxbMSwibS0wIiwid29yZC1icmVhayIsIm1yLTIwIl0sWzEsImZsb2F0LXJp'@;
put 'Z2h0IiwibWwtMyJdLFsxLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnU3RyaW5nRmlsdGVyIl0sWzQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdlU2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxo'@;
put 'KXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIpKDEsImRpdiIsMykoMiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIpLExlKDQsIk1ldGFkYXRhIFJlcG9zaXRvcnkiKSxoZSgpLGRlKDUsInNlbGVjdCIsNCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBi'@;
put 'aShoLnJlcG9zaXRvcnksdil8fChoLnJlcG9zaXRvcnk9diksdn0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgudXBkYXRlU2VsZWN0ZWRSZXBvc2l0b3J5KCl9KSxtdCg2LHJUdCwyLDIsIm9wdGlvbiIsNSksaGUoKSgpKCksZGUoNywiY2xyLXRyZWUiKSxtdCg4LGFUdCw2LDMs'@;
put 'ImNsci10cmVlLW5vZGUiLDYpKDksbFR0LDIsMSwibmctY29udGFpbmVyIiw3KSxoZSgpKCksZGUoMTAsImRpdiIsOCkoMTEsImRpdiIsOSkoMTIsImgzIiwxMCksTGUoMTMpLGhlKCksbXQoMTQsY1R0LDQsMCwiZGl2IiwxMSkoMTUsZlR0LDQsMSwiZGl2IiwxMikoMTYsTFR0LDEwLDUsImRp'@;
put 'diIsMTMpLGhlKCkoKSksMiZkJiYoZmUoNSkscGkoIm5nTW9kZWwiLGgucmVwb3NpdG9yeSksZmUoKSx4ZSgibmdGb3JPZiIsaC5yZXBvc2l0b3JpZXMpLGZlKDIpLHhlKCJuZ0lmIixoLm1ldGFEYXRhTGlzdCksZmUoKSx4ZSgibmdGb3JPZiIsaC5tZXRhRGF0YUxpc3QpLGZlKDQpLHdyKGgu'@;
put 'YXNzb1R5cGVTZWxlY3RlZCksZmUoKSx4ZSgibmdJZiIsIWgubG9hZGluZyYmIWgubWV0YU9iamVjdExpc3QpLGZlKCkseGUoIm5nSWYiLGgubG9hZGluZyksZmUoKSx4ZSgibmdJZiIsaC5zaG93RGF0YSkpfSxkZXBlbmRlbmNpZXM6W2xzLHlvLFlmLEdmLGVjLFdmLG5sLEdzLFRtLFFmLGs3'@;
put 'LGxPLEp5LHF4LGNPLHhtLFJkZSxTcCxENyx0XyxFbSxFNyxNbSxUNyxjRyxUaCxQZCxWZGUsRmwsVjAsSDFlLGRzLFJkLCR5LEd5LFMxZSxQTCx4MWUsTTFlLEUxZSxBWSxpNCxyNCxFTV0sc3R5bGVzOlsiYm9keVtjZHMtdGhlbWU9ZGFya10gLm9iamVjdC1oZWFkZXI6aG92ZXJ7YmFja2dy'@;
put 'b3VuZC1jb2xvcjojNDA1NTYwfSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5vYmplY3RzLWNvbHtiYWNrZ3JvdW5kOiNmZmZ9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLm9iamVjdC1oZWFkZXI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZDhlM2U5fS5vYmplY3RzLWNvbFtfbmdjb250ZW50'@;
put 'LSVDT01QJV17aGVpZ2h0Ojc1dmg7b3ZlcmZsb3c6c2Nyb2xsO2JvcmRlcjoxcHggc29saWQgI2NjY2NjYztib3JkZXItcmFkaXVzOjRweH0uY29scy1oZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkICNjY2NjY2M7cGFkZGluZzoxMHB4O2Rpc3BsYXk6ZmxleH0ub2Jq'@;
put 'ZWN0LXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO21hcmdpbi1sZWZ0OjEwcHg7ZmxleDoxfS5yZXBvLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6'@;
put 'MTVweDttYXJnaW4tbGVmdDoxNXB4O21hcmdpbi1ib3R0b206MTBweH0uY2xyLWFjY29yZGlvbi10aXRsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uZmxvYXQtcmlnaHRbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO2Zsb2F0OnJpZ2h0fS5mdWxsLXdpZHRoW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5vYmplY3QtdXJpW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46NXB4IDAgMH0ub2JqZWN0LWhlYWRlcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbjtw'@;
put 'YWRkaW5nLWxlZnQ6M3B4O3BhZGRpbmctcmlnaHQ6M3B4fS5vYmplY3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcntib3JkZXItcmFkaXVzOjNweH0uZGF0YWdyaWQtaG9zdFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTp1bnNldCFpbXBvcnRhbnR9LmNhcmRbX25nY29udGVu'@;
put 'dC0lQ09NUCVde21hcmdpbi10b3A6MDtmbGV4OjE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIWltcG9ydGFudDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufSJdfSl9c3Rh'@;
put 'dGlje3RoaXMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBPVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gUFR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxu'@;
put 'KCk7ZGUoMCwiY2xyLWljb24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC5yb2xlU2VhcmNoPSIiLEN0KGgucm9sZUxpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIEZUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAs'@;
put 'ImNsci10cmVlLW5vZGUiLDcpKDEsImRpdiIsOCkoMiwiaW5wdXQiLDksMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gYmkoZi5yb2xlU2VhcmNoLGgpfHwoZi5yb2xlU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlv'@;
put 'bigpe3JldHVybiB3dChhKSxDdChPZSgpLnJvbGVMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLG10KDQsT1R0LDEsMCwiY2xyLWljb24iLDEwKSg1LFBUdCwxLDAsImNsci1pY29uIiwxMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQucm9s'@;
put 'ZVNlYXJjaCksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBIVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0'@;
put 'KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkucm9sZU9uQ2xpY2soaCkpfSksZGUoMSwicCIsMTYpLEd0KDIsImNsci1pY29uIiwxNyksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdCxkPU9lKCk7VHIoImFjdGl2ZSIsYS5ST0xFVVJJ'@;
put 'PT09ZC5yb2xlVXJpKSxmZSgzKSxJcigiICIsYS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiBOVHQoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLEhUdCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlkZGVu'@;
put 'KX19ZnVuY3Rpb24gVlR0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gQlR0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBqVHQo'@;
put 'YyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsMzIpKDEsInRkIiwzMCksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsMzApLExlKDQpLGhlKCksZGUoNSwidGQiLDMwKSxMZSg2KSxoZSgpLGRlKDcsInRkIiwzMCksTGUoOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInJvdXRlckxp'@;
put 'bmsiLCIvdmlldy91c2VybmF2L3VzZXJzLyIrYS5VUklNRU0pLGZlKDIpLHdyKGEuTUVNQkVSTkFNRSksZmUoMiksd3IoYS5FTUFJTCksZmUoMiksd3IoYS5NRU1CRVJDUkVBVEVEKSxmZSgyKSx3cihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiB6VHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0'@;
put 'YWJsZSIsMjgpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMjkpKDQsImIiKSxMZSg1LCJOQU1FIiksaGUoKSgpLGRlKDYsInRkIiwyOSkoNywiYiIpLExlKDgsIkVNQUlMIiksaGUoKSgpLGRlKDksInRkIiwyOSkoMTAsImIiKSxMZSgxMSwiQ1JFQVRFRCIpLGhlKCkoKSxkZSgxMiwidGQi'@;
put 'LDMwKSgxMywiYiIpLExlKDE0LCJVUERBVEVEIiksaGUoKSgpKCkoKSxkZSgxNSwidGJvZHkiKSxtdCgxNixqVHQsOSw1LCJ0ciIsMzEpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDE2KSx4ZSgibmdGb3JPZiIsYS5yb2xlTWVtYmVycyl9fWZ1bmN0aW9uIFVUdChjLGwpezEmYyYm'@;
put 'KGRlKDAsImg1IiksTGUoMSwiTm8gR3JvdXBzIFByZXNlbnQgISIpLGhlKCkpfWZ1bmN0aW9uIFpUdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMikoMSwidGQiLDMwKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMCksTGUoNCksaGUoKSxkZSg1LCJ0ZCIsMzApLExlKDYpLGhlKCksZGUoNywi'@;
put 'dGQiLDMwKSxMZSg4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrYS5VUklNRU0pLGZlKDIpLHdyKGEuTUVNQkVSTkFNRSksZmUoMiksd3IoYS5FTUFJTCksZmUoMiksd3IoYS5NRU1CRVJDUkVBVEVEKSxm'@;
put 'ZSgyKSx3cihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBXVHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjgpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMjkpKDQsImIiKSxMZSg1LCJOQU1FIiksaGUoKSgpLGRlKDYsInRkIiwyOSkoNywiYiIpLExlKDgsIkVNQUlMIiksaGUo'@;
put 'KSgpLGRlKDksInRkIiwyOSkoMTAsImIiKSxMZSgxMSwiQ1JFQVRFRCIpLGhlKCkoKSxkZSgxMiwidGQiLDMwKSgxMywiYiIpLExlKDE0LCJVUERBVEVEIiksaGUoKSgpKCkoKSxkZSgxNSwidGJvZHkiKSxtdCgxNixaVHQsOSw1LCJ0ciIsMzEpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIp'@;
put 'O2ZlKDE2KSx4ZSgibmdGb3JPZiIsYS5yb2xlR3JvdXBzKX19ZnVuY3Rpb24gWVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiZGl2IiwyMCkoMiwiZGl2IiwyMSkoMywidGFibGUiLDIyKSg0LCJ0Ym9keSIpKDUsInRyIikoNiwidGQiLDIzKSg3LCJwIiwyNCkoOCwiYiIpLExlKDkp'@;
put 'LGhlKCkoKSgpKCksZGUoMTAsInRyIikoMTEsInRkIiwyMykoMTIsImkiKSxMZSgxMyksaGUoKSgpKCkoKSgpKCkoKSxkZSgxNCwiZGl2IiwyMCkoMTUsImRpdiIsMjEpKDE2LCJkaXYiLDI1KSgxNywiZGl2IikoMTgsImgzIiksTGUoMTkpLGhlKCksbXQoMjAsQlR0LDIsMCwiaDUiLDYpLGRl'@;
put 'KDIxLCJkaXYiLDI2KSxtdCgyMix6VHQsMTcsMSwidGFibGUiLDI3KSxoZSgpKCksR3QoMjMsImhyIiksZGUoMjQsImRpdiIpKDI1LCJoMyIpLExlKDI2KSxoZSgpLG10KDI3LFVUdCwyLDAsImg1Iiw2KSxkZSgyOCwiZGl2IiwyNiksbXQoMjksV1R0LDE3LDEsInRhYmxlIiwyNyksaGUoKSgp'@;
put 'LEd0KDMwLCJiciIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDkpLHdyKGEucm9sZU5hbWUpLGZlKDQpLHdyKGEucm9sZURlc2MpLGZlKDYpLElyKCJNRU1CRVJTICgiLGEucm9sZU1lbWJlcnNDb3VudCwiKSIpLGZlKCkseGUoIm5nSWYiLDA9PWEucm9sZU1lbWJlcnNDb3Vu'@;
put 'dCksZmUoMikseGUoIm5nSWYiLDAhPWEucm9sZU1lbWJlcnNDb3VudCksZmUoNCksSXIoIkdyb3VwcyAoIixhLnJvbGVHcm91cHNDb3VudCwiKSIpLGZlKCkseGUoIm5nSWYiLDA9PWEucm9sZUdyb3Vwc0NvdW50KSxmZSgyKSx4ZSgibmdJZiIsMCE9YS5yb2xlR3JvdXBzQ291bnQpfX1sZXQg'@;
put 'YjdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlPXYsdGhpcy5yb2xlU2VhcmNoPSIiLHRoaXMucm9sZVVyaT0iIix0aGlzLnJv'@;
put 'bGVOYW1lPSIiLHRoaXMucm9sZURlc2M9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmxvYWRpbmc9ITF9bmdPbkluaXQoKXtLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L3JvbGVzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBz'@;
put 'aG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksS24udXNlcm5hdi5yb2xlTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50Pyh0aGlzLnJvbGVzPUtuLnVzZXJuYXYucm9sZUxpc3QsdGhpcy5yb2xl'@;
put 'U2VhcmNoPUtuLnVzZXJuYXYucm9sZVNlYXJjaCk6dm9pZCAwPT09S24udXNlcm5hdi5yb2xlTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZXM9'@;
put 'YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsS24udXNlcm5hdi5yb2xlTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnBhcmFtUHJlc2VudCYmdm9pZCAwIT09dGhpcy5yb2xlcyl7bGV0IGQ9dGhpcy5maW5kUm9sZSh0aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkpOyExIT09ZCYmKHRo'@;
put 'aXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21l'@;
put 'bWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLmxlbmd0aCx0'@;
put 'aGlzLnJvbGVVcmk9ZC5ST0xFVVJJLHRoaXMucm9sZU5hbWU9ZC5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWQuUk9MRURFU0N9KSl9fSkpOih0aGlzLnJvbGVzPUtuLnVzZXJuYXYucm9sZUxpc3QsdGhpcy5yb2xlU2VhcmNoPUtuLnVzZXJuYXYucm9sZVNlYXJjaCx0aGlzLnNhc1NlcnZpY2Uu'@;
put 'cmVxdWVzdCgidXNlcm5hdi91c2Vycm9sZXMiLG51bGwpLnRoZW4oYT0+e2lmKHRoaXMucm9sZXM9YS5hZGFwdGVyUmVzcG9uc2Uucm9sZXMsS24udXNlcm5hdi5yb2xlTGlzdD1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnBhcmFtUHJlc2VudCYmdm9pZCAwIT09dGhpcy5yb2xlcyl7'@;
put 'bGV0IGQ9dGhpcy5maW5kUm9sZSh0aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkpOyExIT09ZCYmKHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oZj0+'@;
put 'e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMs'@;
put 'dGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9ZC5ST0xFVVJJLHRoaXMucm9sZU5hbWU9ZC5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWQuUk9MRURFU0N9KSl9fSkpfXJvbGVMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBl'@;
put 'clNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMucm9sZXMsdGhpcy5yb2xlU2VhcmNoLCJST0xFTkFNRSIpLEtuLnVzZXJuYXYucm9sZVNlYXJjaD10aGlzLnJvbGVTZWFyY2h9cm9sZU9uQ2xpY2soYSl7dGhpcy5sb2FkaW5nPSEwO2xldCBkPXRoaXMucm91dGVyLnVybDt0aGlzLmxvY2F0'@;
put 'aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnBhcmFtUHJlc2VudD9kLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSsiLyIrZW5jb2RlVVJJKGEuUk9MRVVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuUk9MRVVSSSkpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnly'@;
put 'b2xlIix7aXdhbnQ6W3tyb2xlaWQ6YS5ST0xFVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlTWVtYmVycz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLHRoaXMucm9sZU1lbWJlcnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNtZW1iZXJzLmxlbmd0aCx0'@;
put 'aGlzLnJvbGVHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLHRoaXMucm9sZUdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcy5sZW5ndGgsdGhpcy5yb2xlVXJpPWEuUk9MRVVSSSx0aGlzLnJvbGVOYW1lPWEuUk9MRU5BTUUsdGhpcy5yb2xlRGVzYz1hLlJP'@;
put 'TEVERVNDfSl9ZmluZFJvbGUoYSxkKXtsZXQgaD0hMTtyZXR1cm4gYS5mb3JFYWNoKGY9PntmLlJPTEVVUkk9PT1kJiYoaD1mKX0pLGh9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodGwpLEdlKFl1KSxHZShMcyksR2UocGgpLEdlKEN1KSl9'@;
put 'fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Wcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtcm9sZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsxLCJzaWRlYmFyLWhlaWdodCJdLFsi'@;
put 'Y2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsi'@;
put 'YXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgUm9sZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0s'@;
put 'WyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5n'@;
put 'Il0sWyJzaGFwZSIsImJsb2Nrcy1ncm91cCJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsInRhYmxlIiwicm9sZS1pbmZvIl0sWzEsImxlZnQiXSxbMSwicm9sZS1pbmZvLXRleHQiXSxbMSwiY2FyZCIsInJvbGUt'@;
put 'ZGF0YSJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzEsIndpZHRoLTI1Il0sWzEsIiJdLFszLCJyb3V0ZXJMaW5rIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywicm91dGVy'@;
put 'TGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHItdHJlZSIpLG10KDIsRlR0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxOVHQsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLG10KDUsVlR0LDMs'@;
put 'MCwiZGl2Iiw1KSg2LFlUdCwzMSw4LCJkaXYiLDYpLGhlKCkpLDImZCYmKGZlKDIpLHhlKCJuZ0lmIixoLnJvbGVzKSxmZSgpLHhlKCJuZ0Zvck9mIixoLnJvbGVzKSxmZSgyKSx4ZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixoLnJvbGVNZW1iZXJzJiYhaC5sb2FkaW5nKSl9'@;
put 'LGRlcGVuZGVuY2llczpbbHMseW8sYzEsZWMsbmwsR3MsVGgsUGQsRmwsUmQsaTQscjRdLHN0eWxlczpbImJvZHlbY2RzLXRoZW1lPWRhcmtdIC5yb2xle2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5yb2xlLWRh'@;
put 'dGF7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyOTQwNGJ9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLnJvbGUtaW5mb3tiYWNr'@;
put 'Z3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAucm9sZS1kYXRhe2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAg'@;
put 'MnB4IDVweCAjZGFkN2Q3fSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5tZW1iZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fS5zaWRlYmFyLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnJvbGUtaW5mby10ZXh0W19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0ucm9sZS1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fS5yb2xlLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3RleHQt'@;
put 'YWxpZ246Y2VudGVyfS5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9LnJvbGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDp1bnNldH0ucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSwgLnJvbGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9Lm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IHRib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntjdXJzb3I6cG9pbnRlcn0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OnNjcm9sbDttYXgtaGVpZ2h0OjcwMHB4fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgt'@;
put 'd2lkdGg6IDc2OHB4KXsucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Il19KX19cmV0dXJuIGN9KSgpLEdUdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXVzZXJuYXYtcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZk'@;
put 'JiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbcmddfSl9fXJldHVybiBjfSkoKSwkVHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk'@;
put 'fHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxl'@;
put 'dCIpfSxkZXBlbmRlbmNpZXM6W3JnXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gS1R0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTIpfWZ1bmN0aW9uIHFUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0'@;
put 'KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGgudXNlclNlYXJjaD0iIixDdChoLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBYVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlucHV0Iiw5LDApLGdp'@;
put 'KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGJpKGYudXNlclNlYXJjaCxoKXx8KGYudXNlclNlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS51c2VyTGlzdE9uRmlsdGVyKCkpfSks'@;
put 'aGUoKSxtdCg0LEtUdCwxLDAsImNsci1pY29uIiwxMCkoNSxxVHQsMSwwLCJjbHItaWNvbiIsMTEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9dm8oMyksZD1PZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLnVzZXJTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgp'@;
put 'LHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gSlR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnVzZXJP'@;
put 'bkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxHdCgyLCJjbHItaWNvbiIsMTcpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO1RyKCJhY3RpdmUiLChudWxsPT1kLnVzZXJJbmZvP251bGw6ZC51c2VySW5mby5VUkkpPT09YS5VUkkpLGZlKDMpLEly'@;
put 'KCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gUVR0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxKVHQsNCwzLCJjbHItdHJlZS1ub2RlIiwxNCksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGVBdChjLGwpezEmYyYm'@;
put 'KGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIHRBdChjLGwpe2lmKDEmYyYmKGNpKDApLGRlKDEsInRyIikoMiwidGQiLDI3KSxMZSgzLCIgTWV0YWRhdGEgQ3JlYXRlZDogIiksZGUoNCwiYiIpLExlKDUpLGhlKCkoKSgp'@;
put 'LGRlKDYsInRyIikoNywidGQiLDI3KSxMZSg4LCIgTWV0YWRhdGEgVXBkYXRlZDogIiksZGUoOSwiYiIpLExlKDEwKSxoZSgpKCkoKSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoNSksd3IoYS51c2VySW5mby5NRVRBREFUQUNSRUFURUQpLGZlKDUpLHdyKGEudXNlckluZm8uTUVUQURB'@;
put 'VEFVUERBVEVEKX19ZnVuY3Rpb24gbkF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLExlKDgpLGhlKCkoKSgpKCksZGUoOSwidHIiKSgxMCwidGQiLDI3'@;
put 'KSgxMSwicCIsMjgpKDEyLCJiIiksTGUoMTMpLGhlKCkoKSgpKCksbXQoMTQsdEF0LDExLDIsIm5nLWNvbnRhaW5lciIsNiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDgpLHdyKGEudXNlckluZm8uTkFNRSksZmUoNSksd3IoYS51c2VySW5mby5ESVNQTEFZTkFNRSksZmUo'@;
put 'KSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1mdW5jdGlvbiByQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksTGUo'@;
put 'OCksaGUoKSgpKCkoKSxkZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpLExlKDExLCIgVXNlciBJRDogIiksZGUoMTIsImIiKSxMZSgxMyksaGUoKSgpKCksZGUoMTQsInRyIikoMTUsInRkIiwyNyksTGUoMTYsIiBVc2VyIHByb3ZpZGVyIElEOiAiKSxkZSgxNywiYiIpLExlKDE4KSxoZSgpKCkoKSgp'@;
put 'KCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoOCksd3IoYS51c2VySW5mby5OQU1FKSxmZSg1KSx3cihhLnVzZXJJbmZvLlVSSSksZmUoNSksd3IoYS51c2VySW5mby5QUk9WSURFUil9fWZ1bmN0aW9uIGlBdChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gRW1haWxzIFByZXNl'@;
put 'bnQiKSxoZSgpKX1mdW5jdGlvbiBvQXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwzMSksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsMzEpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLHdyKGEuRU1BSUwpLGZlKDIpLHdyKGEuVFlQRSl9fWZ1bmN0'@;
put 'aW9uIGFBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLExlKDUsIkVNQUlMIiksaGUoKSgpLGRlKDYsInRkIiwzMSkoNywiYiIpLExlKDgsIlRZUEUiKSxoZSgpKCkoKSgpLGRlKDksInRib2R5IiksbXQoMTAsb0F0'@;
put 'LDUsMiwidHIiLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDEwKSx4ZSgibmdGb3JPZiIsYS51c2VyRW1haWxzKX19ZnVuY3Rpb24gc0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyKSxoZSgpLG10KDMsaUF0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIs'@;
put 'MjQpLG10KDUsYUF0LDExLDEsInRhYmxlIiwyNSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksSXIoIkVNQUlMUyAoIixhLnVzZXJFbWFpbHNDb3VudHx8IjAiLCIpIiksZmUoKSx4ZSgibmdJZiIsMD09YS51c2VyRW1haWxzQ291bnQpLGZlKDIpLHhlKCJuZ0lmIiwwIT1hLnVz'@;
put 'ZXJFbWFpbHNDb3VudCl9fWZ1bmN0aW9uIGxBdChjLGwpezEmYyYmR3QoMCwiaHIiKX1mdW5jdGlvbiBjQXQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIEdyb3VwcyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gdUF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDMzKSxMZSgxKSxo'@;
put 'ZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7eGUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iK2EuVVJJKSxmZSgpLElyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBkQXQoYyxsKXtpZigxJmMmJihjaSgwKSxkZSgxLCJ0ZCIsMzMpLExlKDIpLGhl'@;
put 'KCksdWkoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCkseGUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L2dyb3Vwcy8iKyhhLkdST1VQVVJJfHxhLlVSSSkpLGZlKCksSXIoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIGhBdChjLGwpe2lmKDEmYyYmKGRlKDAs'@;
put 'InRyIiksbXQoMSx1QXQsMiwyLCJ0ZCIsMzIpKDIsZEF0LDMsMiwibmctY29udGFpbmVyIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEu'@;
put 'U2VydmVyVHlwZS5TYXNWaXlhKX19ZnVuY3Rpb24gZkF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLG10KDIsaEF0LDMsMiwidHIiLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLHhlKCJuZ0Zvck9mIixhLnVzZXJHcm91cHMpfX1mdW5jdGlv'@;
put 'biBwQXQoYyxsKXsxJmMmJkd0KDAsImhyIil9ZnVuY3Rpb24gZ0F0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBSb2xlcyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rpb24gbUF0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMzQpLExlKDIpLGhlKCkoKSksMiZjKXtjb25z'@;
put 'dCBhPWwuJGltcGxpY2l0LGQ9T2UoNCk7ZmUoKSx4ZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvcm9sZXMvIitkLmdldFJvbGVVUkkoYS5ST0xFVVJJKSksZmUoKSxJcigiICIsYS5ST0xFTkFNRSwiICIpfX1mdW5jdGlvbiB2QXQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkp'@;
put 'KDEsInRib2R5IiksbXQoMixtQXQsMywyLCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMikseGUoIm5nRm9yT2YiLGEudXNlclJvbGVzKX19ZnVuY3Rpb24gYkF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyKSxoZSgpLG10KDMsZ0F0LDIsMCwi'@;
put 'aDUiLDYpLGRlKDQsImRpdiIsMjQpLG10KDUsdkF0LDMsMSwidGFibGUiLDI1KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxJcigiUk9MRVMgKCIsYS51c2VyUm9sZXNDb3VudHx8IjAiLCIpIiksZmUoKSx4ZSgibmdJZiIsMD09YS51c2VyUm9sZXNDb3VudCksZmUoMikseGUo'@;
put 'Im5nSWYiLDAhPWEudXNlclJvbGVzQ291bnQpfX1mdW5jdGlvbiB5QXQoYyxsKXsxJmMmJkd0KDAsImhyIil9ZnVuY3Rpb24gX0F0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBMb2dpbnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIHdBdChjLGwpe2lmKDEmYyYmKGRlKDAsInRy'@;
put 'IikoMSwidGQiLDMxKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMSksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksd3IoYS5ET01BSU4pLGZlKDIpLHdyKGEuVVNFUklEKX19ZnVuY3Rpb24gQ0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0'@;
put 'aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJiIiksTGUoNSwiRE9NQUlOIiksaGUoKSgpLGRlKDYsInRkIikoNywiYiIpLExlKDgsIlVTRVIgSUQiKSxoZSgpKCkoKSgpLGRlKDksInRib2R5IiksbXQoMTAsd0F0LDUsMiwidHIiLDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2Zl'@;
put 'KDEwKSx4ZSgibmdGb3JPZiIsYS51c2VyTG9naW5zKX19ZnVuY3Rpb24gU0F0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyKSxoZSgpLG10KDMsX0F0LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjQpLG10KDUsQ0F0LDExLDEsInRhYmxlIiwyNSksaGUoKSgpKSwyJmMp'@;
put 'e2NvbnN0IGE9T2UoMik7ZmUoMiksSXIoIkxPR0lOUyAoIixhLnVzZXJMb2dpbnNDb3VudHx8IjAiLCIpIiksZmUoKSx4ZSgibmdJZiIsMD09YS51c2VyTG9naW5zQ291bnQpLGZlKDIpLHhlKCJuZ0lmIiwwIT1hLnVzZXJMb2dpbnNDb3VudCl9fWZ1bmN0aW9uIE1BdChjLGwpe2lmKDEmYyYm'@;
put 'KGRlKDAsImRpdiIpLG10KDEsbkF0LDE1LDMsImRpdiIsMjApKDIsckF0LDE5LDMsImRpdiIsMjApLGRlKDMsImRpdiIsMjEpKDQsImRpdiIsMjIpKDUsImRpdiIsMjMpLG10KDYsc0F0LDYsMywiZGl2Iiw2KSg3LGxBdCwxLDAsImhyIiw2KSxkZSg4LCJkaXYiKSg5LCJoMyIpLExlKDEwKSxo'@;
put 'ZSgpLG10KDExLGNBdCwyLDAsImg1Iiw2KSxkZSgxMiwiZGl2IiwyNCksbXQoMTMsZkF0LDMsMSwidGFibGUiLDI1KSxoZSgpKCksbXQoMTQscEF0LDEsMCwiaHIiLDYpKDE1LGJBdCw2LDMsImRpdiIsNikoMTYseUF0LDEsMCwiaHIiLDYpKDE3LFNBdCw2LDMsImRpdiIsNiksR3QoMTgsImJy'@;
put 'IiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhJiZhLnVzZXJJbmZvKSxmZSg0KSx4ZSgibmdJZiIs'@;
put 'YS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgzKSxJcigiR1JPVVBTICgiLGEudXNlckdyb3Vwc0NvdW50fHwiMCIsIikiKSxmZSgpLHhlKCJuZ0lmIiwwPT1hLnVzZXJHcm91cHNDb3Vu'@;
put 'dCksZmUoMikseGUoIm5nSWYiLDAhPWEudXNlckdyb3Vwc0NvdW50KSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlw'@;
put 'ZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWxldCB5N2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuc2FzU2VydmljZT1kLHRoaXMucm91'@;
put 'dGU9aCx0aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZXI9dix0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2VyU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFyYW1OYW1lPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHZoLlNBU2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMu'@;
put 'c2VydmVyVHlwZT0iIix0aGlzLlNlcnZlclR5cGU9UzAuWSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLCJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2Vy'@;
put 'dmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgpe2lmKEtuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvdXNlcnMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1OYW1l'@;
put 'PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksS24udXNlcm5hdi51c2VyTGlzdCYmIXRoaXMucGFyYW1QcmVzZW50KXRoaXMudXNlcnM9S24udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9S24udXNlcm5hdi51c2VyU2VhcmNoO2Vsc2UgaWYodm9pZCAwPT09S24udXNl'@;
put 'cm5hdi51c2VyTGlzdD8odGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50'@;
put 'aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0ZW1zLm1hcChmPT4oe05BTUU6Zi5uYW1lLFVSSTpmLmlkLFBST1ZJREVSOmYucHJvdmlkZXJJZH0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1oLEtuLnVzZXJuYXYudXNlckxpc3Q9aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0'@;
put 'KCJ1c2VybmF2L3VzZXJtZW1iZXJzIixudWxsKS50aGVuKGE9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy51c2Vycz1hLmFkYXB0ZXJSZXNwb25zZS51c2VycyxLbi51c2VybmF2LnVzZXJMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnVzZXJzfSkpOih0aGlzLnVzZXJzPUtuLnVzZXJuYXYudXNlckxp'@;
put 'c3QsdGhpcy51c2VyU2VhcmNoPUtuLnVzZXJuYXYudXNlclNlYXJjaCksdGhpcy5wYXJhbVByZXNlbnQpaWYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhKXtsZXQgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmk7ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9p'@;
put 'ZGVudGl0aWVzL3VzZXJzLyIrYSsiL21lbWJlcnNoaXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifX0pLnRoZW4oZD0+ZC50ZXh0KCkpLnRoZW4oZD0+e2xldCBoPUpTT04ucGFyc2UoZCk7dGhpcy51c2VyRGF0YT1oLHRoaXMubG9hZGluZz0hMTts'@;
put 'ZXQgZj1oLml0ZW1zLm1hcCh2PT4oe0dST1VQTkFNRTp2Lm5hbWUsVVJJOnYuaWR9KSk7dGhpcy51c2VyR3JvdXBzPWYsdGhpcy51c2VyR3JvdXBzQ291bnQ9Zi5sZW5ndGgsdGhpcy51c2VycyYmKHRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKHY9PnYuVVJJPT09YSkpfSl9ZWxzZXtj'@;
put 'b25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaTt0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpbe3VyaTphfV19KS50aGVuKGg9Pntzd2l0Y2godGhpcy5sb2FkaW5nPSExLHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBT'@;
put 'MC5ZLlNhczk6dGhpcy51c2VySW5mbz1oLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLHRoaXMudXNlckVtYWlscz1oLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLmxlbmd0aCx0aGlzLnVzZXJSb2xlcz1oLmFkYXB0'@;
put 'ZXJSZXNwb25zZS5yb2xlcyx0aGlzLnVzZXJSb2xlc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJMb2dpbnM9aC5hZGFwdGVyUmVzcG9uc2UubG9naW5zLHRoaXMudXNlckxvZ2luc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLmxvZ2lucy5sZW5ndGg7YnJl'@;
put 'YWs7Y2FzZSBTMC5ZLlNhc2pzOmlmKHRoaXMudXNlcnMpdGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoZj0+Zi5VUkk9PT1hKTtlbHNle2NvbnN0IGY9aC5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VSSTpmLklELE5BTUU6Zi5OQU1FLERJU1BMQVlOQU1F'@;
put 'OmYuTkFNRX19fXRoaXMudXNlckRhdGE9aC5hZGFwdGVyUmVzcG9uc2UsdGhpcy51c2VyR3JvdXBzPWguYWRhcHRlclJlc3BvbnNlLmdyb3Vwcyx0aGlzLnVzZXJHcm91cHNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMubGVuZ3RofSl9fXVzZXJMaXN0T25GaWx0ZXIoKXt0aGlzLmhl'@;
put 'bHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMudXNlcnMsdGhpcy51c2VyU2VhcmNoLCJOQU1FIiksS24udXNlcm5hdi51c2VyU2VhcmNoPXRoaXMudXNlclNlYXJjaH11c2VyT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRp'@;
put 'b24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5VUkkpOmQrIi8iK2VuY29kZVVSSShhLlVSSSkpLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGll'@;
put 'cy91c2Vycy8iK2EuVVJJKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLnVzZXJEYXRhPWYsdGhpcy5sb2FkaW5nPSExO2xldCB2'@;
put 'PWYuaXRlbXMubWFwKE09Pih7R1JPVVBOQU1FOk0ubmFtZSxVUkk6TS5pZH0pKTt0aGlzLnVzZXJHcm91cHM9dix0aGlzLnVzZXJHcm91cHNDb3VudD12Lmxlbmd0aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQoTT0+TS5VUkk9PT1hLlVSSSkpfSk6dGhpcy5z'@;
put 'YXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1cmk6YS5VUkl9XX0pLnRoZW4oZj0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIFMwLlkuU2FzOTp0aGlzLnVzZXJJbmZvPWYuYWRhcHRlclJlc3BvbnNl'@;
put 'LmluZm9bMF0sdGhpcy51c2VyRW1haWxzPWYuYWRhcHRlclJlc3BvbnNlLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMubGVuZ3RoLHRoaXMudXNlclJvbGVzPWYuYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9Zi5h'@;
put 'ZGFwdGVyUmVzcG9uc2Uucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1mLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2UubG9naW5zLmxlbmd0aDticmVhaztjYXNlIFMwLlkuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVz'@;
put 'ZXJJbmZvPXRoaXMudXNlcnMuZmluZCh2PT52LlVSST09PWEuVVJJKTtlbHNle2NvbnN0IHY9Zi5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VSSTp2LklELE5BTUU6di5OQU1FLERJU1BMQVlOQU1FOnYuTkFNRX19fXRoaXMudXNlckRhdGE9Zi5hZGFwdGVyUmVz'@;
put 'cG9uc2UsdGhpcy51c2VyR3JvdXBzPWYuYWRhcHRlclJlc3BvbnNlLmdyb3Vwcyx0aGlzLnVzZXJHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMubGVuZ3RofSl9Z2V0Um9sZVVSSShhKXtyZXR1cm4gYS5zcGxpdCgiT01TT0JKOklkZW50aXR5R3JvdXAiKVsxXS5zbGljZSgx'@;
put 'KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShZdSksR2UodGwpLEdlKEN1KSxHZShwaCksR2UoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC11c2VyIl1dLGhvc3RBdHRyczpbMSwiY29u'@;
put 'dGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNs'@;
put 'YXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBVc2VycyIsIm5hbWUiLCJpbnB1'@;
put 'dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywi'@;
put 'Y2xpY2siXSxbMywiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwidXNlciJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJjbGFzcyIsImNsci1yb3ciLDQs'@;
put 'Im5nSWYiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwiY2FyZCIsInVzZXItZGF0YSJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgdXNlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsInVzZXItaW5mbyJdLFsxLCJsZWZ0Il0sWzEsInVzZXIt'@;
put 'aW5mby10ZXh0Il0sWzEsInRhYmxlIiwidXNlci10YWJsZSJdLFsxLCJ3aWR0aC01MCJdLFsxLCIiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLCJjbGFzcyIsIiIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMSwiIiwzLCJyb3V0'@;
put 'ZXJMaW5rIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSxtdCgyLFhUdCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsUVR0LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpKCksZGUoNCwi'@;
put 'ZGl2Iiw0KSxtdCg1LGVBdCwzLDAsImRpdiIsNSkoNixNQXQsMTksMTEsImRpdiIsNiksaGUoKSksMiZkJiYoZmUoMikseGUoIm5nSWYiLGgudXNlcnMpLGZlKCkseGUoIm5nRm9yT2YiLGgudXNlcnMpLGZlKDIpLHhlKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGgudXNlckRh'@;
put 'dGEmJiFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltscyx5byxjMSxmeSxlYyxubCxHcyxUaCxQZCxGbCxSZCxpNCxyNF0sc3R5bGVzOlsiLnNpZGViYXItaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJX0udXNlci1pbmZvLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rp'@;
put 'c3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLnVzZXItaW5mb3tiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSAudXNlci1kYXRhe2JhY2tncm91bmQtY29sb3I6IzMxNDM1'@;
put 'MTtib3JkZXItY29sb3I6IzMxNDM1MX0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC51c2VyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzI5NDA0Yn0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAudXNlci1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXIt'@;
put 'Y29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC51c2VyLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9ICBib2R5W2Nkcy10'@;
put 'aGVtZT1saWdodF0gLnVzZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2fS51c2VyLWluZm9bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9LnVzZXItaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICB0ZFtf'@;
put 'bmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH0udXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OmF1dG99LnVzZXItZGF0YVtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS51c2VyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS51c2VyLXRhYmxlW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGJvZHlbX25nY29udGVudC0lQ09NUCVdICAgdHJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpw'@;
put 'b2ludGVyfS53aWR0aC01MFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NTAlfS53aWR0aC0zM1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzMlfS50YWJsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXk6c2Nyb2xsO21heC1oZWlnaHQ6NTAwcHh9QG1lZGlhIHNj'@;
put 'cmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX0iXX0pfX1yZXR1cm4gY30pKCkseEF0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmh0dHA9YSx0aGlzLmFwcFN0b3Jl'@;
put 'U2VydmljZT1kLHRoaXMudml5YUFwaXM9e0FuYWx5dGljc19JbnNpZ2h0czp7aW5zaWdodHM6Ii9pbnNpZ2h0cyJ9LFZpc3VhbGlzYXRpb246e3JlcG9ydHM6Ii9yZXBvcnRzIixyZXBvcnRJbWFnZXM6Ii9yZXBvcnRJbWFnZXMiLHJlcG9ydFRyYW5zZm9ybXM6Ii9yZXBvcnRUcmFuc2Zvcm1z'@;
put 'Iix2aXN1YWxBbmFseXRpY3M6Ii92aXN1YWxBbmFseXRpY3MifSxDb21wdXRlOntqb2JzOiIvam9iRGVmaW5pdGlvbnMiLGpvYkV4ZWN1dGlvbjoiL2pvYkV4ZWN1dGlvbiJ9LERlY2lzaW9uX01hbmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21vZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBv'@;
put 'c2l0b3J5OiIvbW9kZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2giLG1pY3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2RhdGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNpbmVzc1J1bGVzIixyZWZlcmVuY2VEYXRh'@;
put 'OiIvcmVmZXJlbmNlRGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZpbml0aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVCdWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7'@;
put 'Zm9sZGVyczoiL2ZvbGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3RhdGlvbnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVsYXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dvbiJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xl'@;
put 'YXJuaW5nOnttbFBpcGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0sT3RoZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIiO2NvbnN0IGg9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKTt0aGlzLnNl'@;
put 'cnZlclVybD1oPy5zZXJ2ZXJVcmx8fCIiLHRoaXMuZ2V0QnlDb2xsZWN0aW9uKCJqb2JzIikuc3Vic2NyaWJlKGY9Pntjb25zb2xlLmxvZygicmVzIixmKX0pfWdldEFsbENvbGxlY3Rpb25zKCl7cmV0dXJuIHRoaXMudml5YUFwaXN9Z2V0QnlVcmwoYSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQo'@;
put 'YCR7dGhpcy5zZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEJ5Q29sbGVjdGlvbihhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp'@;
put 'e3JldHVybiBuZXcoZHx8YykoeHIoQ1cpLHhyKFg4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9b24oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3QgRUF0PWM9Plsic2VnbWVudCIsY10sVEF0PShjLGwpPT4oeyJz'@;
put 'ZWdtZW50LW1haW4iOiEwLGV4cGFuZGFibGU6YyxleHBhbmRlZDpsfSk7ZnVuY3Rpb24gQUF0KGMsbCl7MSZjJiZHdCgwLCJkaXYiLDkpfWZ1bmN0aW9uIGtBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNwYW4iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29u'@;
put 'c3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5vblZhbHVlQ2xpY2soaCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoKSx3cihhLmRlc2NyaXB0aW9uKX19ZnVuY3Rpb24gREF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwi'@;
put 'c2VjdGlvbiIsMTEpKDEsIm5neC1qc29uLXZpZXdlciIsMTIpLEZ0KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgyKS5vblNlZ21lbnRMaW5rQ2xpY2soaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdCxkPU9lKCk7'@;
put 'ZmUoKSx4ZSgianNvbiIsYS52YWx1ZSkoImV4cGFuZGVkIixkLmV4cGFuZGVkKSgiZGVwdGgiLGQuZGVwdGgpKCJfY3VycmVudERlcHRoIixkLl9jdXJyZW50RGVwdGgrMSl9fWZ1bmN0aW9uIElBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsInNlY3Rpb24iLDIpKDEsInNlY3Rp'@;
put 'b24iLDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS50b2dnbGUoaCkpfSksbXQoMixBQXQsMSwwLCJkaXYiLDQpLGRlKDMsInNwYW4iLDUpLExlKDQpLGhlKCksZGUoNSwic3BhbiIsNiksTGUoNiwiOiAiKSxoZSgpLG10KDcs'@;
put 'a0F0LDIsMSwic3BhbiIsNyksaGUoKSxtdCg4LERBdCwyLDQsInNlY3Rpb24iLDgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTt4ZSgibmdDbGFzcyIsc3AoNixFQXQsInNlZ21lbnQtdHlwZS0iK2EudHlwZSkpLGZlKCkseGUoIm5nQ2xhc3MiLGxwKDgsVEF0LGQu'@;
put 'aXNFeHBhbmRhYmxlKGEpLGEuZXhwYW5kZWQpKSxmZSgpLHhlKCJuZ0lmIixkLmlzRXhwYW5kYWJsZShhKSksZmUoMiksd3IoYS5rZXkpLGZlKDMpLHhlKCJuZ0lmIiwhYS5leHBhbmRlZHx8IWQuaXNFeHBhbmRhYmxlKGEpKSxmZSgpLHhlKCJuZ0lmIixhLmV4cGFuZGVkJiZkLmlzRXhwYW5k'@;
put 'YWJsZShhKSl9fWxldCBSQXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kZWQ9ITAsdGhpcy5kZXB0aD0tMSx0aGlzLl9jdXJyZW50RGVwdGg9MCx0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZD1uZXcgWHIsdGhpcy5zZWdtZW50cz1bXX1uZ09uQ2hhbmdlcygpe3RoaXMu'@;
put 'c2VnbWVudHM9W10sdGhpcy5qc29uPXRoaXMuZGVjeWNsZSh0aGlzLmpzb24pLCJvYmplY3QiPT10eXBlb2YgdGhpcy5qc29uP09iamVjdC5rZXlzKHRoaXMuanNvbikuZm9yRWFjaChhPT57dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShhLHRoaXMuanNvblthXSkpfSk6'@;
put 'dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShgKCR7dHlwZW9mIHRoaXMuanNvbn0pYCx0aGlzLmpzb24pKX1pc0V4cGFuZGFibGUoYSl7cmV0dXJuIm9iamVjdCI9PT1hLnR5cGV8fCJhcnJheSI9PT1hLnR5cGV9dG9nZ2xlKGEpe3RoaXMuaXNFeHBhbmRhYmxlKGEpJiYo'@;
put 'YS5leHBhbmRlZD0hYS5leHBhbmRlZCl9b25WYWx1ZUNsaWNrKGEpeyJsaW5rIj09PWEudHlwZSYmdGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhLnZhbHVlKX1vblNlZ21lbnRMaW5rQ2xpY2soYSl7dGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhKX1wYXJzZUtleVZhbHVlKGEs'@;
put 'ZCl7Y29uc3QgaD17a2V5OmEsdmFsdWU6ZCx0eXBlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIitkLGV4cGFuZGVkOnRoaXMuaXNFeHBhbmRlZCgpfTtzd2l0Y2godHlwZW9mIGgudmFsdWUpe2Nhc2UibnVtYmVyIjpoLnR5cGU9Im51bWJlciI7YnJlYWs7Y2FzZSJib29sZWFuIjpoLnR5cGU9ImJv'@;
put 'b2xlYW4iO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmgudHlwZT0iZnVuY3Rpb24iO2JyZWFrO2Nhc2Uic3RyaW5nIjppZih0aGlzLmlzTGluayhoLnZhbHVlKSl7aC50eXBlPSJsaW5rIjticmVha31oLnR5cGU9InN0cmluZyIsaC5kZXNjcmlwdGlvbj0nIicraC52YWx1ZSsnIic7YnJlYWs7Y2Fz'@;
put 'ZSJ1bmRlZmluZWQiOmgudHlwZT0idW5kZWZpbmVkIixoLmRlc2NyaXB0aW9uPSJ1bmRlZmluZWQiO2JyZWFrO2Nhc2Uib2JqZWN0IjpudWxsPT09aC52YWx1ZT8oaC50eXBlPSJudWxsIixoLmRlc2NyaXB0aW9uPSJudWxsIik6QXJyYXkuaXNBcnJheShoLnZhbHVlKT8oaC50eXBlPSJhcnJh'@;
put 'eSIsaC5kZXNjcmlwdGlvbj0iQXJyYXlbIitoLnZhbHVlLmxlbmd0aCsiXSAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKTpoLnZhbHVlIGluc3RhbmNlb2YgRGF0ZT9oLnR5cGU9ImRhdGUiOihoLnR5cGU9Im9iamVjdCIsaC5kZXNjcmlwdGlvbj0iT2JqZWN0ICIrSlNPTi5zdHJpbmdpZnko'@;
put 'aC52YWx1ZSkpfXJldHVybiBofWlzTGluayhhKXtyZXR1cm4iaHR0cHM6Ly8iPT09YS5zdWJzdHJpbmcoMCw4KXx8Imh0dHA6Ly8iPT09YS5zdWJzdHJpbmcoMCw3KXx8Ii8iPT09YVswXX1pc0V4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQmJiEodGhpcy5kZXB0aD4tMSYmdGhpcy5f'@;
put 'Y3VycmVudERlcHRoPj10aGlzLmRlcHRoKX1kZWN5Y2xlKGEpe2NvbnN0IGQ9bmV3IFdlYWtNYXA7cmV0dXJuIGZ1bmN0aW9uIGgoZix2KXtsZXQgTSxEO3JldHVybiJvYmplY3QiIT10eXBlb2YgZnx8bnVsbD09PWZ8fGYgaW5zdGFuY2VvZiBCb29sZWFufHxmIGluc3RhbmNlb2YgRGF0ZXx8'@;
put 'ZiBpbnN0YW5jZW9mIE51bWJlcnx8ZiBpbnN0YW5jZW9mIFJlZ0V4cHx8ZiBpbnN0YW5jZW9mIFN0cmluZz9mOihNPWQuZ2V0KGYpLHZvaWQgMCE9PU0/eyRyZWY6TX06KGQuc2V0KGYsdiksQXJyYXkuaXNBcnJheShmKT8oRD1bXSxmLmZvckVhY2goZnVuY3Rpb24oWixuZSl7RFtuZV09aCha'@;
put 'LHYrIlsiK25lKyJdIil9KSk6KEQ9e30sT2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlvbihaKXtEW1pdPWgoZltaXSx2KyJbIitKU09OLnN0cmluZ2lmeShaKSsiXSIpfSkpLEQpKX0oYSwiJCIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmd4LWpzb24tdmlld2VyIl1dLGlucHV0czp7anNvbjoianNvbiIsZXhwYW5kZWQ6ImV4cGFuZGVkIixkZXB0aDoiZGVwdGgiLF9jdXJyZW50RGVwdGg6Il9jdXJyZW50RGVwdGgifSxvdXRwdXRzOntzZWdtZW50TGlua0NsaWNr'@;
put 'ZWQ6InNlZ21lbnRMaW5rQ2xpY2tlZCJ9LGZlYXR1cmVzOlt3bF0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMSwibmd4LWpzb24tdmlld2VyIl0sWzMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ0NsYXNzIl0sWzMsImNsaWNrIiwibmdDbGFzcyJdLFsiY2xhc3MiLCJ0'@;
put 'b2dnbGVyIiw0LCJuZ0lmIl0sWzEsInNlZ21lbnQta2V5Il0sWzEsInNlZ21lbnQtc2VwYXJhdG9yIl0sWyJjbGFzcyIsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzEsInRvZ2dsZXIiXSxbMSwic2VnbWVudC12YWx1'@;
put 'ZSIsMywiY2xpY2siXSxbMSwiY2hpbGRyZW4iXSxbMywic2VnbWVudExpbmtDbGlja2VkIiwianNvbiIsImV4cGFuZGVkIiwiZGVwdGgiLCJfY3VycmVudERlcHRoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwic2VjdGlvbiIsMCksbXQoMSxJQXQsOSwxMSwic2VjdGlv'@;
put 'biIsMSksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdGb3JPZiIsZC5zZWdtZW50cykpfSxkZXBlbmRlbmNpZXM6W3d1LGxzLHlvLGNdLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6dmFyKC0tbmd4LWpzb24t'@;
put 'Zm9udC1mYW1pbHksIG1vbm9zcGFjZSk7Zm9udC1zaXplOnZhcigtLW5neC1qc29uLWZvbnQtc2l6ZSwgMWVtKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdt'@;
put 'ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweDttYXJnaW46MXB4IDFweCAxcHggMTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3dvcmQt'@;
put 'd3JhcDpicmVhay13b3JkfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7'@;
put 'bWFyZ2luLWxlZnQ6LTE0cHg7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOi44ZW07bGluZS1oZWlnaHQ6MS4yZW07dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9yOnZhcigtLW5neC1qc29uLXRvZ2dsZXIsICM3ODc4NzgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiXFwyNWJhIjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFz'@;
put 'ZS1pbn0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1rZXks'@;
put 'ICM0RTE4N0MpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1zZXBhcmF0b3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5n'@;
put 'eC1qc29uLXNlcGFyYXRvciwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xv'@;
put 'cjp2YXIoLS1uZ3gtanNvbi12YWx1ZSwgIzAwMCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hpbGRyZW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXN0cmluZ1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zdHJpbmcsICNGRjZCNkIp'@;
put 'fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udW1iZXJbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4'@;
put 'LWpzb24tbnVtYmVyLCAjMDA5Njg4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYm9vbGVhbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1ib29sZWFuLCAjQjkzOEE0KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZGF0ZVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdt'@;
put 'ZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1kYXRlLCAjMDU2NjhEKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250'@;
put 'ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYXJyYXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNl'@;
put 'Z21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tb2JqZWN0LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZnVuY3Rpb25bX25n'@;
put 'Y29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZnVuY3Rpb24sICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNl'@;
put 'Z21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWxpbmssICM5QjU5QjYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bGwsICNmZmYpfS5uZ3gtanNv'@;
put 'bi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24t'@;
put 'dW5kZWZpbmVkLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXti'@;
put 'YWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLW51bGwtYmcsIHJlZCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5z'@;
put 'ZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1t'@;
put 'YWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1s'@;
put 'aW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5z'@;
put 'ZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dHJhbnNmb3JtOnJv'@;
put 'dGF0ZSg5MGRlZyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25n'@;
put 'Y29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfSddfSksY30pKCksTEF0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0p'@;
put 'LGN9KSgpLE9BdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtpZighYS5pbmNsdWRlcygiLyIpKXJldHVybiBhO2xldCBkPSIiO2NvbnN0IGg9YS5zcGxpdCgiLyIpO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWlmKCIiIT09aFtmXSl7Y29uc3Qgdj1oW2ZdO2QrPSIvIit2LGhbZl09'@;
put 'YDxhIGhyZWY9JHtkfT4ke3Z9PC9hPmB9cmV0dXJuIGguam9pbigiLyIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJsaW5raW56ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9'@;
put 'KSgpLFBBdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWxsKHtuYW1lOiJwcmV0dHlqc29uIix0'@;
put 'eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gRkF0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwyNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZNKCJ2YWx1ZSIsYS52YWx1ZSksZmUoKSxJcigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24g'@;
put 'SEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0Z3JvdXAiLDIyKSxtdCgxLEZBdCwyLDIsIm9wdGlvbiIsMjMpLFFzKDIsImtleXZhbHVlIiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTt4ZSgibGFiZWwiLGEua2V5KSxmZSgpLHhlKCJuZ0Zvck9mIixEYygyLDIsZC5j'@;
put 'b2xsZWN0aW9uc1thLmtleV0pKX19ZnVuY3Rpb24gTkF0KGMsbCl7MSZjJiYoZGUoMCwicCIsMjUpLExlKDEsIiBTZWxlY3QgY29sbGVjdGlvbiB0byBzdGFydCAiKSxoZSgpKX1mdW5jdGlvbiBWQXQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwyNil9ZnVuY3Rpb24gQkF0KGMsbCl7'@;
put 'MSZjJiZHdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIGpBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci1pY29uIiwzMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGgubGlua3NTZWFyY2g9IiIsQ3QoaC5saW5rc0xpc3RP'@;
put 'bkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIHpBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI3KSgxLCJkaXYiLDI4KSgyLCJpbnB1dCIsMjksMCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1'@;
put 'cm4gYmkoZi5saW5rc1NlYXJjaCxoKXx8KGYubGlua3NTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkubGlua3NMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLG10KDQsQkF0LDEsMCwiY2xyLWljb24iLDMwKSg1LGpBdCwxLDAsImNsci1p'@;
put 'Y29uIiwzMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKCk7ZmUoMikscGkoIm5nTW9kZWwiLGQubGlua3NTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gVUF0KGMsbCl7'@;
put 'aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmVuZHBvaW50TGlua3MpKX0pLGdpKCJjbHJF'@;
put 'eHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gYmkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwzNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGlj'@;
put 'aXQ7cmV0dXJuIEN0KE9lKCkubGlua09uQ2xpY2soaCkpfSksR3QoMiwiY2xyLWljb24iLDM3KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O3BpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYh'@;
put 'YS50YWJsZXMpLGZlKDMpLGp1KCIgIixhLm1ldGhvZCwiICIsYS5yZWwsIiAiKX19ZnVuY3Rpb24gWkF0KGMsbCl7aWYoMSZjJiYoY2koMCksbXQoMSxVQXQsNCw0LCJjbHItdHJlZS1ub2RlIiwzNCksdWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhp'@;
put 'ZGRlbil9fWZ1bmN0aW9uIFdBdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBZQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLml0ZW1z'@;
put 'U2VhcmNoPSIiLEN0KGguaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBHQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyNykoMSwiZGl2IiwyOCkoMiwiaW5wdXQiLDM4LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbiho'@;
put 'KXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGJpKGYuaXRlbXNTZWFyY2gsaCl8fChmLml0ZW1zU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSksaGUoKSxtdCg0LFdBdCwxLDAsImNsci1p'@;
put 'Y29uIiwzMCkoNSxZQXQsMSwwLCJjbHItaWNvbiIsMzEpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9dm8oMyksZD1PZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLml0ZW1zU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5n'@;
put 'dGg+MCl9fWZ1bmN0aW9uICRBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xpY2tlZChoLGYsdi5l'@;
put 'bmRwb2ludEl0ZW1zKSl9KSxnaSgiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIGJpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZGUoMSwicCIsMzYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3'@;
put 'dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLml0ZW1PbkNsaWNrKGgpKX0pLEd0KDIsImNsci1pY29uIiwzNyksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2Fk'@;
put 'aW5nIiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxJcigiICIsYS5uYW1lfHxhLmlkLCIgIil9fWZ1bmN0aW9uIEtBdChjLGwpe2lmKDEmYyYmKGNpKDApLG10KDEsJEF0LDQsMywiY2xyLXRyZWUtbm9kZSIsMzQpLHVpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtm'@;
put 'ZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBxQXQoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzOSl9ZnVuY3Rpb24gWEF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwibmd4LWpzb24tdmlld2VyIiw0OSksRnQoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVu'@;
put 'Y3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLm9uSnNvbkxpbmtDbGljayhoKSl9KSxoZSgpfTImYyYmeGUoImpzb24iLE9lKDMpLmVuZHBvaW50SnNvbikoImV4cGFuZGVkIiwhMSl9ZnVuY3Rpb24gSkF0KGMsbCl7aWYoMSZjJiYoY2koMCksTGUoMSksUXMoMiwicHJldHR5anNvbiIp'@;
put 'LHVpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLElyKCJcbiAgICAgICAgICAgICIsRGMoMiwxLGEuZW5kcG9pbnRKc29uKSwiXG4gICAgICAgICAgIil9fWZ1bmN0aW9uIFFBdChjLGwpe2lmKDEmYyYmKGNpKDApLExlKDEsIlxuICAgICAgICAgICIpLG10KDIsWEF0LDEsMiwibmd4LWpz'@;
put 'b24tdmlld2VyIiw0OCksTGUoMywiXG4gICAgICAgICAgIiksbXQoNCxKQXQsMywzLCJuZy1jb250YWluZXIiLDIxKSxMZSg1LCJcbiAgICAgICAgIiksdWkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLHhlKCJuZ0lmIiwhYS5yYXdKc29uKSxmZSgyKSx4ZSgibmdJZiIsYS5yYXdKc29u'@;
put 'KX19ZnVuY3Rpb24gZWt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksZGUoMSwiZGl2Iiw0MCkoMiwic3BhbiIsNDEpLExlKDMsIiBHRVQgIiksZGUoNCwicCIsNDIpLFFzKDUsImxpbmtpbnplIiksRnQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5v'@;
put 'bkJyZWFkY3Vtc0NsaWNrKGgpKX0pLGhlKCksZGUoNiwiYnV0dG9uIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNvcHlCcmVhZGNydW1zKCkpfSksR3QoNywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoOCwiZGl2Iiw0MykoOSwiY2xyLWlucHV0LWNv'@;
put 'bnRhaW5lciIsMTQpKDEwLCJsYWJlbCIpLExlKDExLCJTdGFydCIpLGhlKCksZGUoMTIsImlucHV0Iiw0NCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gYmkoZi5lbmRwb2ludC5zdGFydCxoKXx8KGYuZW5kcG9pbnQuc3RhcnQ9aCks'@;
put 'Q3QoaCl9KSxoZSgpKCksZGUoMTMsImNsci1pbnB1dC1jb250YWluZXIiLDE0KSgxNCwibGFiZWwiKSxMZSgxNSwiTGltaXQiKSxoZSgpLGRlKDE2LCJpbnB1dCIsNDQpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGJpKGYuZW5kcG9p'@;
put 'bnQubGltaXQsaCl8fChmLmVuZHBvaW50LmxpbWl0PWgpLEN0KGgpfSksaGUoKSgpLGRlKDE3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuYXBwbHlRdWVyeVBhcmFtcygpKX0pLEd0KDE4LCJjbHItaWNvbiIsNDYpLGhlKCkoKSgpLGRl'@;
put 'KDE5LCJwcmUiLDQ3KSxMZSgyMCwiICAgICAgICAiKSxtdCgyMSxRQXQsNiwyLCJuZy1jb250YWluZXIiLDIxKSxMZSgyMiwiXG4gICAgICAiKSxoZSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoNCkseGUoImlubmVySFRNTCIsRGMoNSw3LGEuZW5kcG9pbnQudXJsKSxWNCksZmUo'@;
put 'OCkscGkoIm5nTW9kZWwiLGEuZW5kcG9pbnQuc3RhcnQpLHhlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksZmUoNCkscGkoIm5nTW9kZWwiLGEuZW5kcG9pbnQubGltaXQpLHhlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCksZmUoKSx4ZSgiZGlz'@;
put 'YWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQmJnZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLGZlKDQpLHhlKCJuZ0lmIixhLmVuZHBvaW50SnNvbil9fWxldCB0a3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNh'@;
put 'c1ZpeWFTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLmNvbGxlY3Rpb25zPXt9LHRoaXMuY29sbGVjdGlvbj0iIix0aGlzLmVuZHBvaW50TGlua3M9W10sdGhpcy5lbmRwb2ludEl0ZW1zPVtdLHRoaXMuZW5kcG9pbnQ9e3VybDoiIixzdGFydDot'@;
put 'MSxsaW1pdDotMX0sdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLnJhd0pzb249ITEsdGhpcy5saW5rc1NlYXJjaD0iIix0aGlzLml0ZW1zU2VhcmNoPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IHZoLlNBU2pzQ29uZmlnfW5nT25Jbml0KCl7'@;
put 'dGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmNvbGxlY3Rpb25zPXRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QWxsQ29sbGVjdGlvbnMoKX1saW5rc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhp'@;
put 'cy5lbmRwb2ludExpbmtzLHRoaXMubGlua3NTZWFyY2gsInJlbCIpLEtuLnZpeWFBcGkubGlua3NzU2VhcmNoPXRoaXMubGlua3NTZWFyY2h9aXRlbXNMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRJdGVtcyx0aGlzLml0ZW1z'@;
put 'U2VhcmNoLCJuYW1lIiksS24udml5YUFwaS5pdGVtc1NlYXJjaD10aGlzLml0ZW1zU2VhcmNofWxpbmtPbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmhyZWYpfWl0ZW1PbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmxpbmtzWzBdLmhyZWYpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxh'@;
put 'cHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXVwZGF0ZVNlbGVjdGVkQ29sbGVj'@;
put 'dGlvbigpe0tuLnZpeWFBcGkuc2VsZWN0ZWRDb2xsZWN0aW9uPXRoaXMuY29sbGVjdGlvbix0aGlzLmVuZHBvaW50LnVybD10aGlzLmNvbGxlY3Rpb24sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5Q29sbGVjdGlvbih0aGlzLmNvbGxlY3Rpb24p'@;
put 'LnN1YnNjcmliZShhPT57dGhpcy5lbmRwb2ludExpbmtzPWEubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWEuaXRlbXM/YS5pdGVtczpbXSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExLHRoaXMuZW5kcG9pbnRKc29uPWEsdGhpcy5lbmRwb2ludC5zdGFydD1hLnN0YXJ0LHRoaXMuZW5kcG9p'@;
put 'bnQubGltaXQ9YS5saW1pdH0sYT0+e3RoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITE7bGV0IGQ9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7YS5tZXNzYWdlJiYoZD1hLm1lc3NhZ2UpLGEuZXJyb3ImJihhLmVycm9yLm1lc3NhZ2UmJihkPWEuZXJyb3IubWVzc2FnZSks'@;
put 'YS5lcnJvci5yZW1lZGlhdGlvbiYmKGQ9YCR7ZH1cbiR7YS5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxkLG51bGwsIkhUVFAgRXJyb3IiKX0pfW9uSnNvbkxpbmtDbGljayhhKXt0aGlzLmxvYWRVcmwoYSl9b25Kc29uQ2xpY2so'@;
put 'YSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCJBIj09PWEuc3JjRWxlbWVudC50YWdOYW1lKXtjb25zdCBkPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxlbWVudC5ob3N0KVsxXTt0aGlzLmxvYWRVcmwoZCl9fW9uQnJlYWRjdW1zQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgp'@;
put 'LCFhLnNyY0VsZW1lbnQuaHJlZilyZXR1cm47Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfWNvcHlKc29uKCl7dGhpcy5lbmRwb2ludEpzb24mJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3Ry'@;
put 'aW5naWZ5KHRoaXMuZW5kcG9pbnRKc29uLG51bGwsMikpfWNvcHlCcmVhZGNydW1zKCl7dGhpcy5lbmRwb2ludCYmdGhpcy5lbmRwb2ludC51cmwmJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZW5kcG9pbnQudXJsKX1hcHBseVF1ZXJ5UGFyYW1zKCl7Y29uc3QgYT10aGlz'@;
put 'LmVuZHBvaW50LnN0YXJ0LGQ9dGhpcy5lbmRwb2ludC5saW1pdCxoPWA/JHt2b2lkIDAhPT1hPyJzdGFydD0iK2E6IiJ9JHt2b2lkIDAhPT1kPyImbGltaXQ9IitkOiIifWAsZj1gJHt0aGlzLmVuZHBvaW50LnVybC5zcGxpdCgiPyIpWzBdfSR7aH1gO3RoaXMubG9hZFVybChmKX1sb2FkVXJs'@;
put 'KGEpe3RoaXMuZW5kcG9pbnRMb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlVcmwoYSkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZHBvaW50TGlua3M9ZC5saW5rcyx0aGlzLmVuZHBvaW50SXRlbXM9ZC5pdGVtcz9kLml0ZW1zOltdLHRoaXMuZW5kcG9pbnRKc29uPWQsdGhpcy5l'@;
put 'bmRwb2ludExvYWRpbmc9ITEsdGhpcy5lbmRwb2ludC51cmw9YSx0aGlzLmVuZHBvaW50LnN0YXJ0PWQuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1kLmxpbWl0fSxkPT57dGhpcy5lbmRwb2ludExvYWRpbmc9ITE7bGV0IGg9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVz'@;
put 'dCI7ZC5tZXNzYWdlJiYoaD1kLm1lc3NhZ2UpLGQuZXJyb3ImJihkLmVycm9yLm1lc3NhZ2UmJihoPWQuZXJyb3IubWVzc2FnZSksZC5lcnJvci5yZW1lZGlhdGlvbiYmKGg9YCR7aH1cbiR7ZC5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwo'@;
put 'bnVsbCxoLG51bGwsIkhUVFAgRXJyb3IiKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFl1KSxHZSh4QXQpLEdlKHRsKSxHZSh2YykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9VnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpeWEt'@;
put 'YXBpLWV4cGxvcmVyIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozMyx2YXJzOjEzLGNvbnN0czpbWyJzZWFyY2hMaW5rc1RyZWVJbnB1dCIsIiJdLFsic2VhcmNoSXRlbXNUcmVlSW5wdXQiLCIiXSxbMSwiYXBpLWNvbGxlY3Rpb24tZHJvcGRvd24iXSxbImNs'@;
put 'clNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbENoYW5nZSIsImNoYW5nZSIsIm5nTW9kZWwiXSxbMywibGFiZWwiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1j'@;
put 'b250ZW50LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsImgtMTAwIiwicC0xMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVt'@;
put 'biJdLFsxLCJ3LTEwMCIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInNpdGlvbi1yZWxhdGl2ZSJdLFsxLCJqc29uLXRvZ2dsZSIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwibS0wIl0sWyJ0eXBl'@;
put 'IiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsImJ0bi1zbSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29weSJdLFsxLCJ0ZXh0LWNlbnRlciIsIm0tMCJdLFsiY2xyU21hbGwi'@;
put 'LCIiLDQsIm5nSWYiXSxbMSwidy0xMDAiLCJsaWdodCJdLFs0LCJuZ0lmIl0sWzMsImxhYmVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywidmFsdWUiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEs'@;
put 'InRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGxpbmtzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFw'@;
put 'ZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0'@;
put 'LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGl0ZW1z'@;
put 'IiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImQt'@;
put 'ZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJlbmRwb2ludC1icmVhZGNydW1zIiwzLCJjbGljayIsImlubmVySFRNTCJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwicXVlcnktcGFyYW1zIl0sWyJjbHJJbnB1dCIsIiIsInR5'@;
put 'cGUiLCJudW1iZXIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsInBsYXkiXSxbMSwianNvbi1hcmVhIl0sWyJjbGFzcyIsImQt'@;
put 'YmxvY2siLDMsImpzb24iLCJleHBhbmRlZCIsInNlZ21lbnRMaW5rQ2xpY2tlZCIsNCwibmdJZiJdLFsxLCJkLWJsb2NrIiwzLCJzZWdtZW50TGlua0NsaWNrZWQiLCJqc29uIiwiZXhwYW5kZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJhcHAtc2lkZWJhciIpKDEs'@;
put 'ImRpdiIsMikoMiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIpLExlKDQsIkFQSSBDb2xsZWN0aW9uIiksaGUoKSxkZSg1LCJzZWxlY3QiLDMpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gYmkoaC5jb2xsZWN0aW9uLHYpfHwoaC5jb2xsZWN0aW9uPXYp'@;
put 'LHZ9KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLnVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpfSksbXQoNixIQXQsMyw0LCJvcHRncm91cCIsNCksUXMoNywia2V5dmFsdWUiKSxoZSgpKCkoKSxtdCg4LE5BdCwyLDAsInAiLDUpLGRlKDksImRpdiIsNiksbXQoMTAsVkF0LDEs'@;
put 'MCwiY2xyLXNwaW5uZXIiLDcpLGhlKCksZGUoMTEsImNsci10cmVlIiksbXQoMTIsekF0LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoMTMsWkF0LDIsMSwibmctY29udGFpbmVyIiw5KSxoZSgpLGRlKDE0LCJjbHItdHJlZSIpLG10KDE1LEdBdCw2LDMsImNsci10cmVlLW5vZGUiLDgpKDE2LEtB'@;
put 'dCwyLDEsIm5nLWNvbnRhaW5lciIsOSksaGUoKSgpLGRlKDE3LCJkaXYiLDEwKSgxOCwiZGl2IiwxMSkoMTksImRpdiIsMTIpKDIwLCJkaXYiLDEzKSgyMSwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDE0KSgyMiwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjMsImlucHV0IiwxNSksZ2koIm5nTW9k'@;
put 'ZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBiaShoLnJhd0pzb24sdil8fChoLnJhd0pzb249diksdn0pLGhlKCksZGUoMjQsImxhYmVsIiksTGUoMjUsIlJBVyBKc29uIiksaGUoKSgpKCksZGUoMjYsImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5jb3B5'@;
put 'SnNvbigpfSksR3QoMjcsImNsci1pY29uIiwxNyksaGUoKSgpLGRlKDI4LCJoNCIsMTgpLExlKDI5LCIgQVBJIEV4cGxvcmVyICIpLG10KDMwLHFBdCwxLDAsImNsci1zcGlubmVyIiwxOSksaGUoKSgpLEd0KDMxLCJociIsMjApLG10KDMyLGVrdCwyMyw5LCJuZy1jb250YWluZXIiLDIxKSxo'@;
put 'ZSgpKCkpLDImZCYmKGZlKDUpLHBpKCJuZ01vZGVsIixoLmNvbGxlY3Rpb24pLGZlKCkseGUoIm5nRm9yT2YiLERjKDcsMTEsaC5jb2xsZWN0aW9ucykpLGZlKDIpLHhlKCJuZ0lmIixoLmVuZHBvaW50TGlua3MubGVuZ3RoPDEmJiFoLmNvbGxlY3Rpb25Mb2FkaW5nKSxmZSgyKSx4ZSgibmdJ'@;
put 'ZiIsaC5jb2xsZWN0aW9uTG9hZGluZyksZmUoMikseGUoIm5nSWYiLGguZW5kcG9pbnRMaW5rcy5sZW5ndGg+MCksZmUoKSx4ZSgibmdGb3JPZiIsaC5lbmRwb2ludExpbmtzKSxmZSgyKSx4ZSgibmdJZiIsaC5lbmRwb2ludEl0ZW1zLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0Zvck9mIixoLmVu'@;
put 'ZHBvaW50SXRlbXMpLGZlKDcpLHBpKCJuZ01vZGVsIixoLnJhd0pzb24pLGZlKDcpLHhlKCJuZ0lmIixoLmVuZHBvaW50TG9hZGluZyksZmUoMikseGUoIm5nSWYiLGguY29sbGVjdGlvbi5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W2xzLHlvLFlmLEdmLGVjLG1MLEIxLFdmLG5sLEdzLFRo'@;
put 'LFBkLEZsLFYwLGRzLFcxLFZ5LElkLFJkLFlMLCR5LEd5LE1oLGk0LHI0LFJBdCx5UixPQXQsUEF0XSxzdHlsZXM6WyIuYXBpLWNvbGxlY3Rpb24tZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4'@;
put 'fS5qc29uLWFyZWFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5qc29uLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgICBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5qc29u'@;
put 'LWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgID5uZ3gtanNvbi12aWV3ZXJ7aGVpZ2h0OjEwMCV9Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAgPm5neC1qc29uLXZpZXdlcj4ubmd4LWpzb24tdmlld2Vye292ZXJmbG93OmF1dG99Lmpzb24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7bWFyZ2luOjB9LmVuZHBvaW50LWJyZWFkY3J1bXNbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMCAxMHB4fS5xdWVyeS1wYXJhbXNbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRo'@;
put 'OjcwcHh9Il19KX19cmV0dXJuIGN9KSgpO2NvbnN0IG5rdD1uZXcgU3QoIldpbmRvd1Rva2VuIix0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmRvY3VtZW50P3twcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT53aW5kb3d9Ontwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT57fX0p'@;
put 'O2xldCBya3Q9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1pvbmU9YSx0aGlzLmRvY3VtZW50PWQsdGhpcy53aW5kb3c9aCx0aGlzLmNvcHlTdWJqZWN0PW5ldyBXbix0aGlzLmNvcHlSZXNwb25zZSQ9dGhpcy5jb3B5U3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlz'@;
put 'LmNvbmZpZz17fX1jb25maWd1cmUoYSl7dGhpcy5jb25maWc9YX1jb3B5KGEpe2lmKCF0aGlzLmlzU3VwcG9ydGVkfHwhYSlyZXR1cm4gdGhpcy5wdXNoQ29weVJlc3BvbnNlKHtpc1N1Y2Nlc3M6ITEsY29udGVudDphfSk7Y29uc3QgZD10aGlzLmNvcHlGcm9tQ29udGVudChhKTtyZXR1cm4g'@;
put 'dGhpcy5wdXNoQ29weVJlc3BvbnNlKGQ/e2NvbnRlbnQ6YSxpc1N1Y2Nlc3M6ZH06e2lzU3VjY2VzczohMSxjb250ZW50OmF9KX1nZXQgaXNTdXBwb3J0ZWQoKXtyZXR1cm4hIXRoaXMuZG9jdW1lbnQucXVlcnlDb21tYW5kU3VwcG9ydGVkJiYhIXRoaXMuZG9jdW1lbnQucXVlcnlDb21tYW5k'@;
put 'U3VwcG9ydGVkKCJjb3B5IikmJiEhdGhpcy53aW5kb3d9aXNUYXJnZXRWYWxpZChhKXtpZihhIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudHx8YSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpe2lmKGEuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKXRocm93IG5ldyBFcnJvcign'@;
put 'SW52YWxpZCAidGFyZ2V0IiBhdHRyaWJ1dGUuIFBsZWFzZSB1c2UgInJlYWRvbmx5IiBpbnN0ZWFkIG9mICJkaXNhYmxlZCIgYXR0cmlidXRlJyk7cmV0dXJuITB9dGhyb3cgbmV3IEVycm9yKCJUYXJnZXQgc2hvdWxkIGJlIGlucHV0IG9yIHRleHRhcmVhIil9Y29weUZyb21JbnB1dEVsZW1l'@;
put 'bnQoYSxkPSEwKXt0cnl7dGhpcy5zZWxlY3RUYXJnZXQoYSk7Y29uc3QgaD10aGlzLmNvcHlUZXh0KCk7cmV0dXJuIHRoaXMuY2xlYXJTZWxlY3Rpb24oZD9hOnZvaWQgMCx0aGlzLndpbmRvdyksaCYmdGhpcy5pc0NvcHlTdWNjZXNzSW5JRTExKCl9Y2F0Y2h7cmV0dXJuITF9fWlzQ29weVN1'@;
put 'Y2Nlc3NJbklFMTEoKXtjb25zdCBhPXRoaXMud2luZG93LmNsaXBib2FyZERhdGE7cmV0dXJuIShhJiZhLmdldERhdGEmJiFhLmdldERhdGEoIlRleHQiKSl9Y29weUZyb21Db250ZW50KGEsZD10aGlzLmRvY3VtZW50LmJvZHkpe2lmKHRoaXMudGVtcFRleHRBcmVhJiYhZC5jb250YWlucyh0'@;
put 'aGlzLnRlbXBUZXh0QXJlYSkmJnRoaXMuZGVzdHJveSh0aGlzLnRlbXBUZXh0QXJlYS5wYXJlbnRFbGVtZW50fHx2b2lkIDApLCF0aGlzLnRlbXBUZXh0QXJlYSl7dGhpcy50ZW1wVGV4dEFyZWE9dGhpcy5jcmVhdGVUZW1wVGV4dEFyZWEodGhpcy5kb2N1bWVudCx0aGlzLndpbmRvdyk7dHJ5'@;
put 'e2QuYXBwZW5kQ2hpbGQodGhpcy50ZW1wVGV4dEFyZWEpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiQ29udGFpbmVyIHNob3VsZCBiZSBhIERvbSBlbGVtZW50Iil9fXRoaXMudGVtcFRleHRBcmVhLnZhbHVlPWE7Y29uc3QgaD10aGlzLmNvcHlGcm9tSW5wdXRFbGVtZW50KHRoaXMudGVtcFRl'@;
put 'eHRBcmVhLCExKTtyZXR1cm4gdGhpcy5jb25maWcuY2xlYW5VcEFmdGVyQ29weSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCksaH1kZXN0cm95KGE9dGhpcy5kb2N1bWVudC5ib2R5KXt0aGlzLnRlbXBUZXh0QXJlYSYmKGEucmVtb3ZlQ2hp'@;
put 'bGQodGhpcy50ZW1wVGV4dEFyZWEpLHRoaXMudGVtcFRleHRBcmVhPXZvaWQgMCl9c2VsZWN0VGFyZ2V0KGEpe3JldHVybiBhLnNlbGVjdCgpLGEuc2V0U2VsZWN0aW9uUmFuZ2UoMCxhLnZhbHVlLmxlbmd0aCksYS52YWx1ZS5sZW5ndGh9Y29weVRleHQoKXtyZXR1cm4gdGhpcy5kb2N1bWVu'@;
put 'dC5leGVjQ29tbWFuZCgiY29weSIpfWNsZWFyU2VsZWN0aW9uKGEsZCl7YSYmYS5mb2N1cygpLGQuZ2V0U2VsZWN0aW9uKCk/LnJlbW92ZUFsbFJhbmdlcygpfWNyZWF0ZVRlbXBUZXh0QXJlYShhLGQpe2NvbnN0IGg9InJ0bCI9PT1hLmRvY3VtZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoImRp'@;
put 'ciIpO2xldCBmO3JldHVybiBmPWEuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKSxmLnN0eWxlLmZvbnRTaXplPSIxMnB0IixmLnN0eWxlLmJvcmRlcj0iMCIsZi5zdHlsZS5wYWRkaW5nPSIwIixmLnN0eWxlLm1hcmdpbj0iMCIsZi5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGYuc3R5bGVb'@;
put 'aD8icmlnaHQiOiJsZWZ0Il09Ii05OTk5cHgiLGYuc3R5bGUudG9wPShkLnBhZ2VZT2Zmc2V0fHxhLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApKyJweCIsZi5zZXRBdHRyaWJ1dGUoInJlYWRvbmx5IiwiIiksZn1wdXNoQ29weVJlc3BvbnNlKGEpe3RoaXMuY29weVN1YmplY3Qub2JzZXJ2'@;
put 'ZXJzLmxlbmd0aD4wJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNvcHlTdWJqZWN0Lm5leHQoYSl9KX1wdXNoQ29weVJlcG9uc2UoYSl7dGhpcy5wdXNoQ29weVJlc3BvbnNlKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKSh4cihZbykseHIo'@;
put 'dnMpLHhyKG5rdCw4KSl9LGMuXHUwMjc1cHJvdj1vbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksaWt0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5uZ1pvbmU9YSx0aGlzLmhvc3Q9ZCx0aGlzLnJlbmRlcmVy'@;
put 'PWgsdGhpcy5jbGlwYm9hcmRTcnY9Zix0aGlzLmNiT25TdWNjZXNzPW5ldyBYcix0aGlzLmNiT25FcnJvcj1uZXcgWHIsdGhpcy5vbkNsaWNrPXY9Pnt0aGlzLmNsaXBib2FyZFNydi5pc1N1cHBvcnRlZD90aGlzLnRhcmdldEVsbSYmdGhpcy5jbGlwYm9hcmRTcnYuaXNUYXJnZXRWYWxpZCh0'@;
put 'aGlzLnRhcmdldEVsbSk/dGhpcy5oYW5kbGVSZXN1bHQodGhpcy5jbGlwYm9hcmRTcnYuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50YXJnZXRFbG0pLHRoaXMudGFyZ2V0RWxtLnZhbHVlLHYpOnRoaXMuY2JDb250ZW50JiZ0aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5j'@;
put 'b3B5RnJvbUNvbnRlbnQodGhpcy5jYkNvbnRlbnQsdGhpcy5jb250YWluZXIpLHRoaXMuY2JDb250ZW50LHYpOnRoaXMuaGFuZGxlUmVzdWx0KCExLHZvaWQgMCx2KX19bmdPbkluaXQoKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuY2xpY2tMaXN0ZW5lcj10aGlz'@;
put 'LnJlbmRlcmVyLmxpc3Rlbih0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwiY2xpY2siLHRoaXMub25DbGljayl9KX1uZ09uRGVzdHJveSgpe3RoaXMuY2xpY2tMaXN0ZW5lciYmdGhpcy5jbGlja0xpc3RlbmVyKCksdGhpcy5jbGlwYm9hcmRTcnYuZGVzdHJveSh0aGlzLmNvbnRhaW5lcil9aGFu'@;
put 'ZGxlUmVzdWx0KGEsZCxoKXtsZXQgZj17aXNTdWNjZXNzOmEsY29udGVudDpkLHN1Y2Nlc3NNZXNzYWdlOnRoaXMuY2JTdWNjZXNzTXNnLGV2ZW50Omh9O2E/dGhpcy5jYk9uU3VjY2Vzcy5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uU3VjY2Vzcy5lbWl0KGYpfSk6'@;
put 'dGhpcy5jYk9uRXJyb3Iub2JzZXJ2ZWQmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY2JPbkVycm9yLmVtaXQoZil9KSx0aGlzLmNsaXBib2FyZFNydi5wdXNoQ29weVJlc3BvbnNlKGYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShZbyks'@;
put 'R2UoSmkpLEdlKEVhKSxHZShya3QpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmd4Q2xpcGJvYXJkIiwiIl1dLGlucHV0czp7dGFyZ2V0RWxtOltqbi5Ob25lLCJuZ3hDbGlwYm9hcmQiLCJ0YXJnZXRFbG0iXSxjb250YWluZXI6ImNvbnRhaW5lciIsY2JDb250'@;
put 'ZW50OiJjYkNvbnRlbnQiLGNiU3VjY2Vzc01zZzoiY2JTdWNjZXNzTXNnIn0sb3V0cHV0czp7Y2JPblN1Y2Nlc3M6ImNiT25TdWNjZXNzIixjYk9uRXJyb3I6ImNiT25FcnJvciJ9fSksY30pKCksb2t0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0pLGN9KSgpO3ZhciBha3Q9XygyNTAwMSk7bGV0IHNrdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLC4uLmQpe2NvbnN0IGg9cGFyc2VJbnQoZFswXSl8fDIsZj0ibnVt'@;
put 'YmVyIiE9dHlwZW9mIGE/cGFyc2VJbnQoYSk6YTtyZXR1cm4oMCxha3QuQykoZixoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1sbCh7bmFtZToiY29udmVydFNpemUiLHR5cGU6YyxwdXJlOiEwfSl9'@;
put 'fXJldHVybiBjfSkoKTtjb25zdCBsa3Q9WyJxdWVyeUZpbHRlciJdLGNrdD0oKT0+WyIiLCIgIl07ZnVuY3Rpb24gdWt0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw1NCksR3QoMSwiY2xyLXNwaW5uZXIiLDU1KSxoZSgpKX1mdW5jdGlvbiBka3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw2'@;
put 'MSl9ZnVuY3Rpb24gaGt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDYyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsQ3QoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpfX1m'@;
put 'dW5jdGlvbiBma3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw1NikoMSwiZGl2Iiw1NykoMiwiaW5wdXQiLDU4LDEpLGdpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGJpKGYubGlicmFyaWVzU2Vh'@;
put 'cmNoLGgpfHwoZi5saWJyYXJpZXNTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKSxtdCg0LGRrdCwxLDAsImNsci1pY29uIiw1OSkoNSxoa3QsMSwwLCJjbHItaWNvbiIsNjApLGhlKCko'@;
put 'KX1pZigyJmMpe2NvbnN0IGE9dm8oMyksZD1PZSgpO2ZlKDIpLHBpKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBwa3QoYyxsKXsxJmMmJkd0KDAs'@;
put 'ImNsci1pY29uIiw2MSl9ZnVuY3Rpb24gZ2t0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiY2xyLWljb24iLDYyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksT2UoKTtjb25zdCBoPXZvKDMpLGY9T2UoMikuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gaC52YWx1ZT0iIixm'@;
put 'LnNlYXJjaFN0cmluZz0iIixDdCh2LnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMiKSl9KSxoZSgpfX1mdW5jdGlvbiBta3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw1NikoMSwiZGl2Iiw1NykoMiwiaW5wdXQiLDY3LDIpLGdpKCJuZ01vZGVsQ2hhbmdl'@;
put 'IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gYmkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2Uo'@;
put 'KS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxtdCg0LHBrdCwxLDAsImNsci1pY29uIiw1OSkoNSxna3QsMSwwLCJjbHItaWNvbiIsNjApLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9dm8oMyksZD1PZSgyKS4kaW1wbGljaXQ7ZmUoMikseGUoImlkIiwic2VhcmNoXyIrZC5MSUJS'@;
put 'QVJZUkVGKSxwaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gdmt0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNzQpfWZ1bmN0aW9uIGJrdChjLGwp'@;
put 'ezEmYyYmR3QoMCwiY2xyLWljb24iLDc1KX1mdW5jdGlvbiB5a3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJidXR0b24iLDcwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLm5nVmFyLGY9T2UoKS4kaW1wbGljaXQsdj1PZSgyKS4kaW1wbGljaXQs'@;
put 'TT1PZSgpO3JldHVybiBDdChoPyIiOk0ub25UYWJsZUNsaWNrKGYsdikpfSksY2koMSw3MSksbXQoMix2a3QsMSwwLCJjbHItaWNvbiIsNzIpKDMsYmt0LDEsMCwiY2xyLWljb24iLDczKSx1aSgpLExlKDQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkubmdWYXIsZD1PZSgpLiRpbXBsaWNp'@;
put 'dCxoPU9lKDIpLiRpbXBsaWNpdCxmPU9lKCk7VHIoImRjLWxvY2tlZC1jb250cm9sIixhKSgiYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLGZlKCkseGUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwhMCksZmUoKSx4'@;
put 'ZSgibmdTd2l0Y2hDYXNlIiwhMSksZmUoKSxJcigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpfX1mdW5jdGlvbiBfa3QoYyxsKXsxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw3NykoMSwic3BhbiIpLExlKDIsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBw'@;
put 'b3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGhlKCkoKSl9ZnVuY3Rpb24gd2t0KGMsbCl7MSZjJiYoY2koMCksbXQoMSxfa3QsMywwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw3NiksdWkoKSl9ZnVuY3Rpb24gQ2t0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAiKSxtdCgxLHlrdCw1'@;
put 'LDgsImJ1dHRvbiIsNjkpKDIsd2t0LDIsMCwibmctY29udGFpbmVyIiw0MiksaGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXIsZD1PZSgpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIixkLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0lmIixhKX19ZnVuY3Rpb24gU2t0KGMsbCl7aWYoMSZjJiYoZGUo'@;
put 'MCwiY2xyLXRyZWUtbm9kZSIpLG10KDEsQ2t0LDMsMiwiY2xyLXRvb2x0aXAiLDY4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPU9lKDMpO2ZlKCkseGUoIm5nVmFyIixhKzE+ZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBNa3Qo'@;
put 'YyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw2NCksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYpKX0pLGdpKCJjbHJFeHBhbmRlZENoYW5nZSIs'@;
put 'ZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gYmkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiw2NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQsZj1PZSgpO3JldHVy'@;
put 'biBmLmxpYj1oLkxJQlJBUllSRUYsQ3QoZi5saWJyYXJ5T25DbGljayhoLkxJQlJBUllSRUYsaCkpfSksR3QoMiwiY2xyLWljb24iLDY2KSxMZSgzKSxoZSgpLG10KDQsbWt0LDYsNCwiY2xyLXRyZWUtbm9kZSIsNykoNSxTa3QsMiwxLCJjbHItdHJlZS1ub2RlIiw4KSxoZSgpfWlmKDImYyl7'@;
put 'Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtUcigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxwaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksSXIoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxmZSgpLHhl'@;
put 'KCJuZ0lmIixhLnRhYmxlcyksZmUoKSx4ZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiB4a3QoYyxsKXtpZigxJmMmJihjaSgwKSxtdCgxLE1rdCw2LDcsImNsci10cmVlLW5vZGUiLDYzKSx1aSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlk'@;
put 'ZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIEVrdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzgpKDEsInNwYW4iLDc5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIFRrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsODApKDEsImRpdiIs'@;
put 'ODEpKDIsImRpdiIsODIpKDMsImRpdiIsODMpKDQsImJ1dHRvbiIsODQpLEd0KDUsImNsci1pY29uIiw4NSksaGUoKSxkZSg2LCJoMyIsNDcpLExlKDcsIkVycm9yIiksaGUoKSgpLGRlKDgsImRpdiIsMTUpKDksInAiKSxMZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIp'@;
put 'LGhlKCkoKSxkZSgxMSwiZGl2IiwyNikoMTIsImJ1dHRvbiIsODYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5udWxsVmFyaWFibGVzPSExKX0pLExlKDEzLCIgT2sgIiksaGUoKSgpKCkoKSgpfX1mdW5jdGlvbiBBa3QoYyxsKXsxJmMmJkd0KDAsImRpdiIs'@;
put 'ODcpfWZ1bmN0aW9uIGtrdChjLGwpezEmYyYmR3QoMCwiYXBwLXF1ZXJ5IixudWxsLDMpfWZ1bmN0aW9uIERrdChjLGwpezEmYyYmKGRlKDAsImRpdiIsODgpKDEsInNwYW4iLDg5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsImRpdiIsOTApKDQsInAiLDkxKSxMZSg1LCJMb2Fk'@;
put 'aW5nIFRhYmxlIFZpZXdlciIpLGhlKCkoKSgpKX1mdW5jdGlvbiBJa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJjbHItaWNvbiIsMTE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksT2UoKTtjb25zdCBoPXZvKDUpO3JldHVybiBDdChPZSgyKS5zZWFyY2hUYWJsZSho'@;
put 'KSl9KSxoZSgpfX1mdW5jdGlvbiBSa3QoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMTYpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uIExrdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDExNyl9ZnVuY3Rpb24gT2t0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTE4'@;
put 'KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxJcigiICIsbnVsbD09YS50YWJsZVRpdGxlP251bGw6YS50YWJsZVRpdGxlLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIFBrdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDEyMCks'@;
put 'TGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKCksSXIoIiAiLGEuZHNOb3RlLCIgIil9fWZ1bmN0aW9uIEZrdChjLGwpezEmYyYmKGNpKDApLG10KDEsUGt0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE5KSx1aSgpKX1mdW5jdGlvbiBIa3QoYyxsKXtpZigxJmMmJihkZSgw'@;
put 'LCJzcGFuIiksTGUoMSksUXMoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoKSxHSSgiICgiLGo4KDIsNCxhLm51bWJlck9mUm93cywiLCIpLCIgIiwxPT09YS5udW1iZXJPZlJvd3M/InJvdyI6InJvd3MiLCIsICIsYS5maWx0ZXJDb2xzLmxlbmd0'@;
put 'aCwiIiwxPT09YS5maWx0ZXJDb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24gTmt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7Y2koMCksbXQoMSxIa3QsMyw3LCJzcGFuIiw0MiksZGUoMiwiY2xyLWljb24iLDEyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiB3dChhKSxDdChPZSgzKS5yZWxvYWRUYWJsZURhdGEoKSl9KSxoZSgpLHVpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUoIm5nSWYiLG51bGwhPT1hLm51bWJlck9mUm93cyl9fWZ1bmN0aW9uIFZrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1MbigpO2RlKDAsImRpdiIsMTI3'@;
put 'KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDUpLmVkaXRUYWJsZSgpKX0pLEd0KDEsImNsci1pY29uIiwxMzMpLGRlKDIsInNwYW4iKSxMZSgzLCJFZGl0IiksaGUoKSgpfX1mdW5jdGlvbiBCa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJkaXYi'@;
put 'LDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg1KS5nb1RvTGluZWFnZSgpKX0pLEd0KDEsImNsci1pY29uIiwxMzQpLGRlKDIsInNwYW4iKSxMZSgzLCJMaW5lYWdlIiksaGUoKSgpfX1mdW5jdGlvbiBqa3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtk'@;
put 'ZSgwLCJjbHItZHJvcGRvd24tbWVudSIsMTI2KSgxLCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5uZXdWaWV3Ym94KCkpfSksR3QoMiwiY2xyLWljb24iLDEyOCksZGUoMywic3BhbiIpLExlKDQsIlZpZXdib3hlcyIpLGhlKCkoKSxtdCg1'@;
put 'LFZrdCw0LDAsImRpdiIsMTI5KSg2LEJrdCw0LDAsImRpdiIsMTI5KSxkZSg3LCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5vcGVuUWIoKSl9KSxHdCg4LCJjbHItaWNvbiIsMTMwKSxkZSg5LCJzcGFuIiksTGUoMTAsIkZpbHRlciIpLGhl'@;
put 'KCkoKSxkZSgxMSwiZGl2IiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoNCkub3BlbkRvd25sb2FkPSEwKX0pLEd0KDEyLCJjbHItaWNvbiIsMTMxKSxkZSgxMywic3BhbiIpLExlKDE0LCJEb3dubG9hZCIpLGhlKCkoKSxkZSgxNSwiZGl2IiwxMjcpLEZ0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoNCkuc2hvd1dlYlF1ZXJ5KCkpfSksR3QoMTYsImNsci1pY29uIiwxMzIpLGRlKDE3LCJzcGFuIiksTGUoMTgsIldlYiBRdWVyeSBVUkwiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoNSkseGUoIm5nSWYi'@;
put 'LGEudGFibGVFZGl0RXhpc3RzKCkpLGZlKCkseGUoIm5nSWYiLGEudGFibGV1cmkpfX1mdW5jdGlvbiB6a3QoYyxsKXsxJmMmJihkZSgwLCJjbHItZHJvcGRvd24iLDEyMikoMSwiYnV0dG9uIiwxMjMpLEd0KDIsImNsci1pY29uIiwxMjQpLExlKDMsIiBvcHRpb25zICIpLGhlKCksbXQoNCxq'@;
put 'a3QsMTksMiwiY2xyLWRyb3Bkb3duLW1lbnUiLDEyNSksaGUoKSksMiZjJiZ4ZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKX1mdW5jdGlvbiBVa3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEzNSkoMSwic3BhbiIpLExlKDIsIkZJTFRFUiA6ICIpLGRlKDMsImIiKSxMZSg0KSxo'@;
put 'ZSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDQpLHdyKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24gWmt0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUxuKCk7ZGUoMCwiZGl2Iiw5OCkoMSwic2VjdGlvbiIsOTkpKDIsImZvcm0iLDEwMCkoMywiZGl2IiwxMDEpKDQsImlucHV0IiwxMDIsNCks'@;
put 'RnQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9dm8oNSk7cmV0dXJuIEN0KE9lKDIpLnNlYXJjaFRhYmxlKGgpKX0pLGhlKCksbXQoNixJa3QsMSwwLCJjbHItaWNvbiIsMTAzKSg3LFJrdCwyLDAsInNwYW4iLDEwNCksaGUoKSxkZSg4LCJjbHItY2hlY2tib3gtY29u'@;
put 'dGFpbmVyIikoOSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxMCwiaW5wdXQiLDEwNSksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMik7cmV0dXJuIGJpKGYuc2VhcmNoTnVtZXJpYyxoKXx8KGYuc2VhcmNoTnVtZXJpYz1oKSxDdChoKX0pLGhlKCks'@;
put 'ZGUoMTEsImxhYmVsIiksTGUoMTIsIk51bWVyaWMiKSxoZSgpKCkoKSgpKCksZGUoMTMsImRpdiIsMTA2KSgxNCwicCIsMTA3KSgxNSwiY2xyLXRvb2x0aXAiLDEwOCkoMTYsImNsci1pY29uIiwxMDkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuZGF0YXNl'@;
put 'dEluZm89ITApfSksaGUoKSxtdCgxNyxMa3QsMSwwLCJjbHItaWNvbiIsMTEwKSgxOCxPa3QsMiwxLCJzcGFuIiwxMTEpKDE5LEZrdCwyLDAsIm5nLWNvbnRhaW5lciIsNDIpLGhlKCksbXQoMjAsTmt0LDMsMSwibmctY29udGFpbmVyIiw0MiksaGUoKSgpLGRlKDIxLCJkaXYiLDExMiksbXQo'@;
put 'MjIsemt0LDUsMSwiY2xyLWRyb3Bkb3duIiwxMTMpLGhlKCksbXQoMjMsVWt0LDUsMSwiZGl2IiwxMTQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDQpLHhlKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSxmZSgyKSx4ZSgibmdJZiIsIWEuc2VhcmNoTG9h'@;
put 'ZGluZyksZmUoKSx4ZSgibmdJZiIsYS5zZWFyY2hMb2FkaW5nKSxmZSgzKSxwaSgibmdNb2RlbCIsYS5zZWFyY2hOdW1lcmljKSxmZSg3KSx4ZSgibmdJZiIsbnVsbD09YS50YWJsZVRpdGxlP251bGw6YS50YWJsZVRpdGxlLmluY2x1ZGVzKCItRkMiKSksZmUoKSx4ZSgibmdJZiIsYS50YWJs'@;
put 'ZVRpdGxlJiZhLnRhYmxlVGl0bGUubGVuZ3RoPjApLGZlKCkseGUoIm5nSWYiLGEuZHNOb3RlJiZhLmRzTm90ZS5sZW5ndGg+MCksZmUoKSx4ZSgibmdJZiIsYS50YWJsZVRpdGxlJiZhLnRhYmxlVGl0bGUubGVuZ3RoPjApLGZlKDIpLHhlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJiFhLmFib3J0'@;
put 'QWN0aXZlKSxmZSgpLHhlKCJuZ0lmIiwiMT0xIiE9PWEucXVlcnlUZXh0JiYhWXMoMTAsY2t0KS5pbmNsdWRlcyhhLnF1ZXJ5VGV4dCkmJiFhLmFib3J0QWN0aXZlKX19ZnVuY3Rpb24gV2t0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMzYpLEd0KDEsImltZyIsMTM3KSxkZSgyLCJoMyIsMTM4'@;
put 'KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBhIGxpYnJhcnkgIiksaGUoKSgpKX1mdW5jdGlvbiBZa3QoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiw1NSl9ZnVuY3Rpb24gR2t0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxNDUpLEd0KDEsImltZyIsMTQ2KSxkZSgyLCJwIiwxMzgpLExlKDMs'@;
put 'IiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIiksaGUoKSgpKX1mdW5jdGlvbiAka3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtkZSgwLCJwIiwxNDkpLExlKDEsIiBObyBsaWJyYXJ5IGluZm8gZm91bmQuIENsaWNrICIpLGRlKDIsImNsci1pY29uIiwxNTApLEZ0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoNCkucmVsb2FkTGliSW5mbygpKX0pLGhlKCksTGUoMywiIGJ1dHRvbiB0byByZWZyZXNoLiAiKSxoZSgpfX1mdW5jdGlvbiBLa3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIkVOR0lORToiKSxoZSgpLGRlKDMsInRk'@;
put 'IiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkVOR0lORToiIiwiICIpfX1mdW5jdGlvbiBxa3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIkxJQklEOiIpLGhlKCks'@;
put 'ZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCSUQ6IiIsIiAiKX19ZnVuY3Rpb24gWGt0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJMSUJOQU1F'@;
put 'OiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCTkFNRToiIiwiICIpfX1mdW5jdGlvbiBKa3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExl'@;
put 'KDIsIkxJQlNJWkU6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxRcyg1LCJjb252ZXJ0U2l6ZSIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/RGMoNSwxLGEubGliaW5mb1swXS5MSUJTSVpFKToiIiwiICIpfX1mdW5jdGlvbiBRa3Qo'@;
put 'YyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIk9XTkVSUzoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLk9XTkVSUzoiIiwiICIpfX1mdW5j'@;
put 'dGlvbiBlRHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIlBBVEhTOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksSXIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEFUSFM6IiIsIiAi'@;
put 'KX19ZnVuY3Rpb24gdER0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJQRVJNUzoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlBFUk1T'@;
put 'OiIiLCIgIil9fWZ1bmN0aW9uIG5EdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksTGUoMiwiU0NIRU1BUzoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLElyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZv'@;
put 'WzBdLlNDSEVNQVM6IiIsIiAiKX19ZnVuY3Rpb24gckR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJUQUJMRV9DTlQ6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSg1KTtmZSg0KSxJcigiICIsYS5saWJpbmZv'@;
put 'WzBdP2EubGliaW5mb1swXS5UQUJMRV9DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gaUR0KGMsbCl7aWYoMSZjJiYoY2koMCksZGUoMSwidGFibGUiKSxtdCgyLEtrdCw1LDEsInRyIiw0MikoMyxxa3QsNSwxLCJ0ciIsNDIpKDQsWGt0LDUsMSwidHIiLDQyKSg1LEprdCw2LDMsInRyIiw0MikoNixR'@;
put 'a3QsNSwxLCJ0ciIsNDIpKDcsZUR0LDUsMSwidHIiLDQyKSg4LHREdCw1LDEsInRyIiw0MikoOSxuRHQsNSwxLCJ0ciIsNDIpKDEwLHJEdCw1LDEsInRyIiw0MiksaGUoKSx1aSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMikseGUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkVOR0lORSks'@;
put 'ZmUoKSx4ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCSUQpLGZlKCkseGUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkxJQk5BTUUpLGZlKCkseGUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uTElCU0laRSksZmUoKSx4ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uT1dORVJT'@;
put 'KSxmZSgpLHhlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QQVRIUyksZmUoKSx4ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uUEVSTVMpLGZlKCkseGUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlNDSEVNQVMpLGZlKCkseGUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uVEFCTEVf'@;
put 'Q05UKX19ZnVuY3Rpb24gb0R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNDcpLG10KDEsJGt0LDQsMCwicCIsMTQ4KSgyLGlEdCwxMSw5LCJuZy1jb250YWluZXIiLDQyKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSx4ZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aDwxKSxmZSgp'@;
put 'LHhlKCJuZ0lmIixhLmxpYmluZm8ubGVuZ3RoPjApfX1mdW5jdGlvbiBhRHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9TG4oKTtjaSgwKSxkZSgxLCJkaXYiLDEzOSksR3QoMiwic2VjdGlvbiIsOTkpLGRlKDMsImRpdiIsMTQwKSg0LCJwIiw5MSksTGUoNSksaGUoKSxkZSg2LCJjbHItaWNvbiIs'@;
put 'MTIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLnJlbG9hZExpYkluZm8oKSl9KSxoZSgpKCksR3QoNywiZGl2IiwxMTIpLGhlKCksZGUoOCwiZGl2IiwxNDEpLG10KDksWWt0LDEsMCwiY2xyLXNwaW5uZXIiLDE0MiksaGUoKSxtdCgxMCxHa3QsNCwwLCJk'@;
put 'aXYiLDE0MykoMTEsb0R0LDMsMiwiZGl2IiwxNDQpLHVpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDUpLElyKCIgIixhLmxpYiwiICIpLGZlKDQpLHhlKCJuZ0lmIixudWxsPT09YS5saWJpbmZvKSxmZSgpLHhlKCJuZ0lmIixudWxsIT09YS5saWJpbmZvKSxmZSgpLHhlKCJuZ0lmIixu'@;
put 'dWxsIT09YS5saWJpbmZvKX19ZnVuY3Rpb24gc0R0KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE1NiksTGUoMSwiIE5vIGRhdGEgZm91bmQgd2l0aCBnaXZlbiBjb25kaXRpb25zICIpLGhlKCkpfWZ1bmN0aW9uIGxEdChjLGwpezEmYyYmKGRlKDAsImgzIiwxNTYpLExlKDEsIiBObyBkYXRhIGZv'@;
put 'dW5kIGR1ZSB0byBzYXMgcmVxdWVzdCBlcnJvciAiKSxoZSgpKX1mdW5jdGlvbiBjRHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE1MyksR3QoMSwiY2xyLWljb24iLDE1NCksbXQoMixzRHQsMiwwLCJoMyIsMTU1KSgzLGxEdCwyLDAsImgzIiwxNTUpLGhlKCkpLDImYyl7Y29uc3QgYT1P'@;
put 'ZSgyKTtmZSgyKSx4ZSgibmdJZiIsYS5ub0RhdGEpLGZlKCkseGUoIm5nSWYiLGEubm9EYXRhUmVxRXJyKX19ZnVuY3Rpb24gdUR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNTcpLEd0KDEsImhvdC10YWJsZSIsMTU4KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSx4ZSgibXVs'@;
put 'dGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGEuaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGEuaG90VGFibGUuY29sSGVhZGVycykoImNvbHVtbnMiLGEuaG90VGFibGUuY29sdW1ucykoImNvcHlQYXN0ZSIsYS5ob3RUYWJs'@;
put 'ZS5jb3B5UGFzdGUpKCJjb250ZXh0TWVudSIsYS5ob3RUYWJsZS5jb250ZXh0TWVudSkoImZpbHRlcnMiLCEwKSgiZHJvcGRvd25NZW51IixhLmhvdFRhYmxlLmRyb3Bkb3duTWVudSkoImhlaWdodCIsYS5ob3RUYWJsZS5oZWlnaHQpKCJtb2RpZnlDb2xXaWR0aCIsYS5tYXhXaWR0aENoZWtl'@;
put 'cikoImNlbGxzIixhLmhvdFRhYmxlLmNlbGxzKSgibWF4Um93cyIsYS5ob3RUYWJsZS5tYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoImFmdGVyR2V0Q29sSGVhZGVyIixhLmhvdFRhYmxlLmFmdGVyR2V0Q29sSGVhZGVyKSgicm93SGVhZGVycyIsYS5ob3RUYWJsZS5yb3dIZWFk'@;
put 'ZXJzKSgicm93SGVhZGVyV2lkdGgiLGEuaG90VGFibGUucm93SGVhZGVyV2lkdGgpKCJyb3dIZWlnaHRzIixhLmhvdFRhYmxlLnJvd0hlaWdodHMpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlLmxpY2Vuc2VLZXkpfX1mdW5jdGlvbiBkRHQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNTkpLExl'@;
put 'KDEpLEd0KDIsImNvbnRhY3QtbGluayIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLElyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gaER0KGMsbCl7aWYo'@;
put 'MSZjJiYoZGUoMCwiZGl2Iiw5MiksbXQoMSxaa3QsMjQsMTEsImRpdiIsOTMpKDIsV2t0LDQsMCwiZGl2Iiw5NCkoMyxhRHQsMTIsNCwibmctY29udGFpbmVyIiw0MikoNCxjRHQsNCwyLCJkaXYiLDk1KSg1LHVEdCwyLDE5LCJkaXYiLDk2KSxkZSg2LCJkaXYiKSxtdCg3LGREdCwzLDEsInAi'@;
put 'LDk3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLGEudGFibGUpLGZlKCkseGUoIm5nSWYiLCEoYS5saWJ8fGEudGFibGV8fGEubm9EYXRhUmVxRXJyfHxhLm5vRGF0YSkpLGZlKCkseGUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiYhYS50YWJs'@;
put 'ZSYmYS5saWIpLGZlKCkseGUoIm5nSWYiLGEubm9EYXRhfHxhLm5vRGF0YVJlcUVyciksZmUoKSx4ZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJmEudGFibGUpLGZlKDIpLHhlKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkIT09YS5J'@;
put 'bmZpbml0eSYmYS5ob3RUYWJsZS5kYXRhJiZhLmhvdFRhYmxlLmRhdGEubGVuZ3RoPmEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQpfX1sZXQgak49KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFosbmUsY2Upe3RoaXMubGljZW5jZVNlcnZp'@;
put 'Y2U9YSx0aGlzLnNhc1N0b3JlU2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5yb3V0ZT12LHRoaXMuZXZlbnRTZXJ2aWNlPU0sdGhpcy5sb2dnZXJTZXJ2aWNlPUQsdGhpcy5oZWxwZXJTZXJ2aWNlPVosdGhpcy5sb2NhdGlvbj1uZSx0aGlzLmNkZj1jZSx0'@;
put 'aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IHBkLHRoaXMubGlicmFyaWVzUGFnaW5nPSExLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGlicmFyeVRhYmxlc1JlZj0iIix0aGlzLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMSx0aGlzLmxpYmluZm89bnVsbCx0aGlzLnRhYmxldXJp'@;
put 'PW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJDb2xzPVtdLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmFib3J0QWN0aXZlPSExLHRoaXMudXJsRmlsdGVyUGs9bnVsbCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLndlYlF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5RXJyPSExLHRoaXMu'@;
put 'dGFibGVGbGFnPSEwLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMSx0aGlzLmxvYWRpbmdUYWJsZVZpZXc9ITEsdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMubm9EYXRhPSExLHRoaXMubm9EYXRhUmVxRXJyPSExLHRoaXMudGFibGVEaXNhYmxlPSExLHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0aGlz'@;
put 'Lm9wZW5Eb3dubG9hZD0hMSx0aGlzLndlYlF1ZXJ5PSExLHRoaXMud2ViUXVlcnlUYWI9ITEsdGhpcy5kb3dubG9hZEZvcm1hdD0iQ1NWIix0aGlzLnNhc2pzQ29uZmlnPW5ldyB2aC5TQVNqc0NvbmZpZyx0aGlzLnNlYXJjaExvYWRpbmc9ITEsdGhpcy5zZWFyY2hOdW1lcmljPSExLHRoaXMu'@;
put 'bnVtYmVyT2ZSb3dzPW51bGwsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy4kZGF0YUZvcm1hdHM9bnVsbCx0aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lvbnM9W10sdGhpcy5kc05vdGU9IiIsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5s'@;
put 'aWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGNvbHVtbnM6W10saGVpZ2h0OiIxMDAlIixtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWR8fDEvMCxzZXR0aW5nczp7fSxsaWNl'@;
put 'bnNlS2V5OnZvaWQgMCxyb3dIZWFkZXJzOmJlPT4iICIsYWZ0ZXJHZXRDb2xIZWFkZXI6KGJlLEVlLEJlKT0+e0VlLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0scm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyMCxjb250ZXh0TWVudTpb'@;
put 'ImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEwfSxkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFk'@;
put 'X29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjooYmUsRWUsQmUscWUscnQscHQpPT57Y29uc3QgZHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBKdCx2bj0i'@;
put 'Tm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgQ249dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSx0bj1Dbj9DblswXVsxXTotMSxNbj10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AodG4pO0p0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW01uXSxK'@;
put 'dCYmKHZuPWBMQUJFTDogJHtKdD8ubGFiZWx9PGJyPlRZUEU6ICR7SnQ/LnR5cGV9PGJyPkxFTkdUSDogJHtKdD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7SnQ/LmZvcm1hdH1gKX1yZXR1cm4gZHQuaW5uZXJIVE1MPXZuLGR0fX19fX0sdGhpcy5ob3RJbnN0YW5jZT1udWxsLHRoaXMuaG90SW5z'@;
put 'dGFuY2VDbGlja0xpc3RlbmVyPSExLHRoaXMudmlld2JveE9wZW49ITEsdGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXI9bmV3IFdtLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9bmdPbkluaXQoKXsiIiE9PUtuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9u'@;
put 'JiYwPT09T2JqZWN0LmtleXModGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMpLmxlbmd0aCYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hv'@;
put 'dC5wYXJhbXMubGliTWVtJiYoS24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvZGF0YSIpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZS5saWNlbnNlS2V5PWF9KX1uZXdWaWV3Ym94KCl7dGhpcy52aWV3Ym94T3Bl'@;
put 'bj0hMH1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9c2VhcmNoVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5zZWFyY2hMb2FkaW5nPSEwO2xl'@;
put 'dCBoPWEudmFsdWUsZj1kLmxpYisiLiIrZC50YWJsZSx2PXBhcnNlSW50KGQucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKXx8MDt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YVNlYXJjaChoLGQuc2VhcmNoTnVtZXJpYyxmLHYpLnRoZW4oTT0+e00uc2FzcGFyYW1zfHxN'@;
put 'LnZpZXdEYXRhPyhkLmhvdFRhYmxlLmRhdGE9TS52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1NLiR2aWV3ZGF0YSxkLmRzbWV0YT1NLmRzbWV0YSxkLnZlcnNpb25zPU0udmVyc2lvbnN8fFtdLGQuc2V0RFNOb3RlKCksZC5udW1iZXJPZlJvd3M9TS5zYXNwYXJhbXNbMF0uTk9CUyxkLnF1ZXJ5'@;
put 'VGV4dD1NLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxkLmhlYWRlclBrcz1NLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSwwPT09ZC5ob3RUYWJsZS5kYXRhLmxlbmd0aD9kLm5vRGF0YT0hMDooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEsZC5zZXR1cEhvdCgpKSk6ZC5z'@;
put 'ZWFyY2hMb2FkaW5nPSExfSkuY2F0Y2goTT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLGQuc2VhcmNoTG9hZGluZz0hMX0pKCl9cmVsb2FkVGFibGVEYXRhKCl7dGhpcy52aWV3RGF0YSh0aGlzLnVybEZpbHRlclBrfHwwKX1yZWxvYWRMaWJJbmZvKCl7dmFyIGE9dGhpcztyZXR1cm4g'@;
put 'ZWUoZnVuY3Rpb24qKCl7YS5saWJpbmZvPW51bGwsYS5zYXNTdG9yZVNlcnZpY2UucmVmcmVzaExpYkluZm8oYS5saWIpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZD1lZShmdW5jdGlvbiooaCl7YS5saWJpbmZvPWgubGliaW5mbyxLbi52aWV3ZXIubGliaW5mbz1hLmxpYmluZm87Y29uc3QgZj1h'@;
put 'LmxpYnJhcmllcy5maW5kKHY9PnYuTElCUkFSWVJFRj09PWEubGliKTtmJiYoZi5saWJpbmZvPWEubGliaW5mbyl9KTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLG51bGw9PT1hLmxpYmlu'@;
put 'Zm8mJihhLmxpYmluZm89W10pfSl9KSgpfWZpbHRlckZuKGEpe3RoaXMubGlicmFyaWVzPXRoaXMubGlicmFyaWVzLmZpbHRlcihoPT4tMSE9PWguTElCUkFSWU5BTUUudG9Mb3dlckNhc2UoKS5pbmRleE9mKGEudG9Mb2NhbGVMb3dlckNhc2UoKSkpfWRvd25sb2FkRGF0YSgpe2xldCBhPXRo'@;
put 'aXMuc2FzanNDb25maWcuc2VydmVyVXJsLGQ9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgaD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCBELGY9IiZ0eXBlPSIrdGhpcy5kb3dubG9hZEZvcm1hdCx2PSImdGFibGU9Iit0aGlzLnRhYmxlVGl0bGUsTT0iU0FT'@;
put 'VklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiI7RD10eXBlb2YgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQ+InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hv'@;
put 'dC5wYXJhbXMuZmlsdGVySWQpLHdpbmRvdy5vcGVuKGEraCsiLz9fcHJvZ3JhbT0iK2QrIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0cmF3ZGF0YSIrZit2K00rIiZmaWx0ZXI9IitEKSx0aGlzLm9wZW5Eb3dubG9hZD0hMX1kb3dubG9hZERETCgpe2xldCBhPXRoaXMubGliLGQ9dGhpcy50YWJsZSxo'@;
put 'PXRoaXMuZG93bmxvYWRGb3JtYXQucmVwbGFjZSgiX0RETCIsIiIpLGY9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdj10aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBNPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZitNKyIvP19wcm9ncmFt'@;
put 'PSIrdisiL3NlcnZpY2VzL3B1YmxpYy9nZXRkZGwiK2AmZHM9JHtkfSZsaWJyZWY9JHthfSZmbGF2b3VyPSR7aH0keyJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT9gJl9jb250ZXh0bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIn1gKSx0aGlz'@;
put 'Lm9wZW5Eb3dubG9hZD0hMX1vbkNsaUNvbW1hbmRGb2N1cyhhKXthLnByZXZlbnREZWZhdWx0KCksYS50YXJnZXQuc2VsZWN0KCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMubGliVGFiKX10YWJsZUVkaXRFeGlzdHMoKXtsZXQgYT17fTth'@;
put 'PUtuLmVkaXRvci5saWJzQW5kVGFibGVzO2xldCBkPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMV0saD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzBdO3JldHVybiEhYVtoXSYmYVtoXS5pbmNsdWRlcyhkKX1nb1RvTGluZWFnZSgpe2xldCBkPWAvdmlldy9saW5lYWdlLyR7dGhpcy50YWJsZXVy'@;
put 'aS5zcGxpdCgiXFwiKVsxXX0vUkVWRVJTRWA7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChkKX1zaG93V2ViUXVlcnkoKXtsZXQgYTt0aGlzLndlYlF1ZXJ5PSEwLGE9dHlwZW9mIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUu'@;
put 'c25hcHNob3QucGFyYW1zLmZpbHRlcklkKTtsZXQgZD13aW5kb3cubG9jYXRpb24ucG9ydC5sZW5ndGg+MD8iOiIrd2luZG93LmxvY2F0aW9uLnBvcnQ6IiI7Y29uc3QgaD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCB2PWAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2Nv'@;
put 'bH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSR7ZH0vJHtofS8/X3Byb2dyYW09JHt0aGlzLnNhc2pzQ29uZmlnLmFwcExvY30vc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEmdHlwZT1XRUIke3RoaXMud2ViUXVlcnlUYWI/IlRBQiI6IkNTViJ9JnRhYmxlPSR7dGhpcy50YWJsZVRp'@;
put 'dGxlfSR7IiZmaWx0ZXI9IithfWA7dGhpcy53ZWJRdWVyeVRleHQ9di5yZXBsYWNlKC8gL2dpbSwiJTIwIil9Y29weVRvQ2xpcCgpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7YS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGEuc3R5bGUubGVmdD0iMCIsYS5zdHls'@;
put 'ZS50b3A9IjAiLGEuc3R5bGUub3BhY2l0eT0iMCIsYS52YWx1ZT10aGlzLndlYlF1ZXJ5VGV4dCxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuZm9jdXMoKSxhLnNlbGVjdCgpLGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5IiksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKX1n'@;
put 'b1RvVmlld2VyKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31jaGVja0V4cGFuZChhKXt9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFS'@;
put 'WVJFRiE9PWQuTElCUkFSWVJFRiYmKGguZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyaWVzLCEwKSx0aGlz'@;
put 'LmxpYnJhcmllc1BhZ2luZz0hMSl9dHJlZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlFeHBhbmRlZENoYW5nZShhLGQpe2EmJnRoaXMuY29sbGFwc2VMaWJyYXJ5'@;
put 'SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2lmKGQudGFibGVzP2QuZXhwYW5kZWQ9ISFofHwhZC5leHBhbmRlZDp5aWVsZCBmLnNlbGVjdFRhYmxlKGEsITEsZCksZC5leHBhbmRlZCl7Zi5jZGYu'@;
put 'ZGV0ZWN0Q2hhbmdlcygpO2xldCB2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNzZWFyY2hfJHtkLkxJQlJBUllSRUZ9YCk7Zi5sb2dnZXJTZXJ2aWNlLmxvZygiW2xpYlRyZWVTZWFyY2hJbnB1dF0iLHYpLHYmJnYuZm9jdXMoKSxkJiZkLmxpYmluZm8mJihmLmxpYmluZm89ZC5saWJpbmZv'@;
put 'KSxmLmxpYiYmZi50YWJsZSYmIWg/Zi5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhIl0se3NraXBMb2NhdGlvbkNoYW5nZTohMCxxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KS50aGVuKCgpPT57Zi5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrZi5saWJdLHtxdWVy'@;
put 'eVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KX0pOmYubGliJiYhZi50YWJsZSYmZi5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi92aWV3L2RhdGEvIitmLmxpYil9Zi5jb2xsYXBzZUxpYnJhcnlJdGVtcyhmLmxpYnJhcmllcyxkKX0pKCl9b25UYWJsZUNsaWNrKGEsZCl7dGhpcy5saWI9ZC5M'@;
put 'SUJSQVJZUkVGLHRoaXMudGFibGU9YSx0aGlzLnNlbGVjdExpYlRhYmxlKGEpLHRoaXMudmlld0RhdGEoMCl9c2VsZWN0VGFibGUoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2gubG9hZGluZ1RhYmxlcz0hMCxmLnRhYmxlPSExLGYudGFibGVEaXNhYmxlPSEwLCJQ'@;
put 'bGVhc2Ugc2VsZWN0IGxpYnJhcnkiIT09YT9Lbi52aWV3ZXIudGFibGVzU2V0JiZkPyhmLmFib3J0QWN0aXZlPSExLGYudGFibGVEaXNhYmxlPSExLGYudGFibGVzPUtuLnZpZXdlci50YWJsZXMsZi5saWJpbmZvPUtuLnZpZXdlci5saWJpbmZvKTooZi5saWJpbmZvPW51bGwseWllbGQgZi5z'@;
put 'YXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhhKS50aGVuKHY9PntmLmFib3J0QWN0aXZlPSExLGYudGFibGVEaXNhYmxlPSExO2xldCBNPXYubXB0YWJsZXMubWFwKGZ1bmN0aW9uKEQpe3JldHVybiBELk1FTU5BTUV9KTtmLmxpYmluZm89di5saWJpbmZvfHxbXSxmLnRhYmxlcz1NLGgmJiho'@;
put 'LnRhYmxlcz1NLGgubGliaW5mbz1mLmxpYmluZm8pLEtuLnZpZXdlci5saWJyYXJpZXM9Zi5saWJyYXJpZXMsS24udmlld2VyLmxpYnJhcnk9Zi5saWIsS24udmlld2VyLnRhYmxlcz1mLnRhYmxlcyxLbi52aWV3ZXIubGliaW5mbz1mLmxpYmluZm8sS24udmlld2VyLnRhYmxlc1NldD0hMH0p'@;
put 'LmNhdGNoKHY9PntmLmxvZ2dlclNlcnZpY2UuZXJyb3IodiksZi5hYm9ydEFjdGl2ZT0hMCxmLm5vRGF0YT0hMCxmLnRhYmxlVGl0bGU9IiIsZi50YWJsZURpc2FibGU9ITB9KSk6Zi50YWJsZURpc2FibGU9ITAsS24udmlld2VyLmxpYnJhcnk9Zi5saWIsZHx8Zi5jbGVhckdsb2JhbHNGaWx0'@;
put 'ZXIoKSxoLmxvYWRpbmdUYWJsZXM9ITEsaC5leHBhbmRlZD0haC5leHBhbmRlZH0pKCl9c2VsZWN0TGliVGFibGUoYSxkKXsiUGxlYXNlIHNlbGVjdCB0YWJsZSIhPT1hPyh0aGlzLmFjdGlvbkRpc2FibGU9ITEsdGhpcy5saWJUYWI9dGhpcy5saWIrIi4iK3RoaXMudGFibGUpOnRoaXMuYWN0'@;
put 'aW9uRGlzYWJsZT0hMCxLbi52aWV3ZXIudGFibGU9YSxkfHx0aGlzLmNsZWFyR2xvYmFsc0ZpbHRlcigpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5saWJUYWIpfWNsZWFyR2xvYmFsc0ZpbHRlcigpe0tuLnZpZXdlci5maWx0ZXIubGliZHM9IiIsS24udmlld2VyLmZpbHRlci53aGVy'@;
put 'ZUNsYXVzZT0iIixLbi52aWV3ZXIuZmlsdGVyLmdyb3VwTG9naWM9IiIsS24udmlld2VyLmZpbHRlci5jbGF1c2VzPVtdLEtuLnZpZXdlci5maWx0ZXIuY29scz1bXSxLbi52aWV3ZXIuZmlsdGVyLnZhbHM9W119bGliVGFiQWN0aXZlKGEsZCl7cmV0dXJuISF0aGlzLmxpYlRhYiYmYSsiLiIr'@;
put 'ZD09PXRoaXMubGliVGFifXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyaWVzLHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJS'@;
put 'QVJZTkFNRSIpLEtuLnZpZXdlci5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGlicmFyeVJlc2V0RmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnJlc2V0QXJyYXlGaWx0ZXIodGhpcy5saWJyYXJpZXMpfXZpZXdEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1'@;
put 'bmN0aW9uKigpe2xldCBoO2lmKGQubG9hZGluZ1RhYmxlVmlldz0hMCx0eXBlb2YgZC5saWJEYXRhc2V0PiJ1IiloPWQubGliKyIuIitkLnRhYmxlO2Vsc2UgaWYodHlwZW9mIGQubGliPiJ1IiYmdHlwZW9mIGQudGFibGU+InUiKXtsZXQgTT1bXTtpZihNPWQubGliRGF0YXNldC5zcGxpdCgi'@;
put 'LiIpLEtuLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUtuLnZpZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKEQ9PntkLmxpYnJhcmllcz1ELnNhc2xpYnN9KS5jYXRjaChEPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKEQpfSksZC5s'@;
put 'aWI9TVswXSxLbi52aWV3ZXIuc3RhcnR1cFNldClkLnRhYmxlcz1Lbi52aWV3ZXIudGFibGVzO2Vsc2V7bGV0IEQ9ZC5saWJyYXJpZXMuZmluZChaPT5aLkxJQlJBUllSRUYudG9Mb3dlckNhc2UoKT09PWQubGliLnRvTG93ZXJDYXNlKCkpO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdU'@;
put 'YWJsZXMoZC5saWIpLnRoZW4oWj0+e2QudGFibGVzPVoubXB0YWJsZXMubWFwKGZ1bmN0aW9uKG5lKXtyZXR1cm4gbmUuTUVNTkFNRX0pLEQudGFibGVzPWQudGFibGVzLEtuLnZpZXdlci5saWJyYXJpZXM9ZC5saWJyYXJpZXMsS24udmlld2VyLnRhYmxlcz1kLnRhYmxlcyxLbi52aWV3ZXIu'@;
put 'c3RhcnR1cFNldD0hMH0pLmNhdGNoKFo9PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoWil9KX1kLnRhYmxlPU1bMV0sZC50YWJsZUZsYWc9ITEsaD1kLmxpYkRhdGFzZXQsZC5saWJUYWI9aH1lbHNlIEtuLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUtuLnZpZXdlci5saWJyYXJpZXM6'@;
put 'eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKE09PntkLmxpYnJhcmllcz1NLnNhc2xpYnN9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pfSksdHlwZW9mIGQudGFibGU8InUiJiYoS24udmlld2VyLnN0YXJ0dXBTZXQ/ZC50YWJsZXM9S24udmlld2Vy'@;
put 'LnRhYmxlczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGQubGliKS50aGVuKE09PntkLnRhYmxlcz1NLm1wdGFibGVzLm1hcChmdW5jdGlvbihEKXtyZXR1cm4gRC5NRU1OQU1FfSl9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pLGQucm91dGVyLm5hdmln'@;
put 'YXRlKFsiL3ZpZXcvZGF0YSJdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KX0pLGQudGFibGVGbGFnPSExLGg9ZC5saWIrIi4iK2QudGFibGUsZC50YWJsZVRpdGxlPWgsZC5saWJUYWI9aCk7ZC5yb3V0ZXIudXJsLnNwbGl0KCIvIikubGVuZ3RoPjMmJmgmJih5aWVsZCBkLnNh'@;
put 'c1N0b3JlU2VydmljZS52aWV3RGF0YShoLGEpLnRoZW4oTT0+e2lmKE0ucXVlcnkubGVuZ3RoPjAmJiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmMD09PUtuLnZpZXdlci5maWx0ZXIuY2xhdXNlcy5sZW5ndGgmJihLbi52aWV3ZXIuZmlsdGVyLnF1ZXJ5PWQuaGVscGVyU2VydmljZS5kZWVwQ2xv'@;
put 'bmUoTS5xdWVyeSksS24udmlld2VyLmZpbHRlci5saWJkcz1kLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sZC5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZSgidmlld2VyIixNLmNvbHMpKSxkLmFib3J0QWN0aXZlPSExLGQuZmlsdGVyQ29scz1NLmNv'@;
put 'bHMsTmVlKGQuZmlsdGVyQ29scyxbXSxNLiR2aWV3ZGF0YSksZC5udW1iZXJPZlJvd3M9TS5zYXNwYXJhbXNbMF0uTk9CUyxkLmhlYWRlclBrcz1NLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSwiU0FTOSI9PT1kLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUpe2xldCBiZT1NLnNh'@;
put 'c3BhcmFtc1swXS5UQUJMRVVSSTtiZSYmYmUubGVuZ3RoPjAmJihkLnRhYmxldXJpPWJlKX1kLmhvdFRhYmxlLmRhdGE9TS52aWV3ZGF0YSxkLiRkYXRhRm9ybWF0cz1NLiR2aWV3ZGF0YSxkLmRzbWV0YT1NLmRzbWV0YSxkLnZlcnNpb25zPU0udmVyc2lvbnN8fFtdLGQuc2V0RFNOb3RlKCks'@;
put 'ZC5xdWVyeVRleHQ9TS5zYXNwYXJhbXNbMF0uRklMVEVSX1RFWFQ7bGV0IEQ9W10sWj1bXTtmb3IobGV0IGJlIGluIE0udmlld2RhdGFbMF0pYmUmJloucHVzaChiZSk7Zm9yKGxldCBiZT0wO2JlPFoubGVuZ3RoO2JlKyspRC5wdXNoKHtkYXRhOlpbYmVdfSk7ZC5ob3RUYWJsZS5jb2xIZWFk'@;
put 'ZXJzPVosZC5ob3RUYWJsZS5jb2x1bW5zPUQsZC5ob3RUYWJsZS5jZWxscz1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19LGQudGFibGVGbGFnPSExO2xldCBjZT1bXTtjZT1oLnNwbGl0KCIuIiksZC5saWI9Y2VbMF0sZC50YWJsZT1jZVsxXSwwPT09ZC5ob3RUYWJsZS5kYXRhLmxl'@;
put 'bmd0aD8oZC5ub0RhdGE9ITAsZC50YWJsZUZsYWc9ITApOihkLm5vRGF0YT0hMSxkLnRhYmxlRmxhZz0hMSksZC5ub0RhdGFSZXFFcnI9ITF9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pLGQuYWJvcnRBY3RpdmU9ITAsZC5ub0RhdGFSZXFFcnI9ITB9KSksZC5yb3V0ZXIu'@;
put 'dXJsLmluY2x1ZGVzKCIvZGF0YSIpJiZoJiZkLnJvdXRlci5uYXZpZ2F0ZSgwIT09YT9bIi92aWV3L2RhdGEvIitoKyIvIithXTpbIi92aWV3L2RhdGEvIitoXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7bGV0IGY9ZC50YWJsZSx2PWQubGlicmFyaWVzLmZpbmQoTT0+TS5M'@;
put 'SUJSQVJZUkVGLnRvTG93ZXJDYXNlKCk9PT1kLmxpYi50b0xvd2VyQ2FzZSgpKTt2PyhLbi52aWV3ZXIubGlicmFyaWVzLmxlbmd0aD4wJiYoZC5saWJyYXJpZXM9S24udmlld2VyLmxpYnJhcmllcyxkLmxpYnJhcmllc1NlYXJjaD1Lbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoKSxkLmxpYnJh'@;
put 'cnlPbkNsaWNrKGQubGliLHYsITApKTpkLmxpYmluZm89W10sZC50YWJsZT1mfHxkLnRhYmxlLGQubGlicmFyaWVzJiZkLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhkLmxpYnJhcmllcyksZC5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvZGF0YSIpJiZkLmV2ZW50U2VydmljZS5jbG9z'@;
put 'ZVNpZGViYXIoKSxkLmxvYWRpbmdUYWJsZVZpZXc9ITEsIWQubm9EYXRhJiYhZC5ub0RhdGFSZXFFcnImJmgmJmQuc2V0dXBIb3QoKSxkLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcnx8c2V0VGltZW91dCgoKT0+e2xldCBNPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIp'@;
put 'O00mJihNLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsRD0+e3NldFRpbWVvdXQoKCk9PntsZXQgWj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO1omJlouY2xpY2soKX0sMTAwKX0pLGQuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSEw'@;
put 'KX0sMmUzKX0pKCl9bWF4V2lkdGhDaGVrZXIoYSxkKXtyZXR1cm4gYT4yMDA/MjAwOmF9b3BlblFiKCl7dGhpcy5maWx0ZXI9ITAsdGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMubGliKyIuIit0aGlzLnRhYmxlLHRo'@;
put 'aXMuZmlsdGVyQ29scyl9c2VuZENsYXVzZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZD1bXSxoPVtdO2lmKHR5cGVvZiBhLmNsYXVzZXM+InUiKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9'@;
put 'ITEpO3tsZXQgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4idmlldyI9PT1Lbi5yb290UGFyYW0mJihLbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXM9W10sS24udmlld2VyLmZpbHRlci5xdWVyeT1bXSxLbi52aWV3ZXIuZmlsdGVyLmdyb3VwTG9n'@;
put 'aWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKXtjb25zdCBNPWZbdl0uZWxlbWVudHM7ZD1NLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1'@;
put 'cm4gbnVsbD09PUQudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKE0pfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt7Y29uc3QgZj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119'@;
put 'O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKE09Pntjb25zdCBEPXtmaWx0ZXJDbGF1c2VzOltdfTtNLmVsZW1lbnRzLmZvckVhY2goWj0+e0QuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWikpfSksRC5jbGF1c2VMb2dpYz1NLmNsYXVzZUxvZ2ljLGYu'@;
put 'ZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShEKSl9KTtjb25zdCB2PWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsdikudGhlbihNPT57YS5xdWVyeVRl'@;
put 'eHQ9TS5yZXN1bHRbMF0uRklMVEVSX1RFWFQ7bGV0IEQ9TS5yZXN1bHRbMF0uRklMVEVSX1JLO2Eucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YS8iK2EubGliZHMrIi8iK0RdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KSxhLnZpZXdEYXRhKEQpLGEuZmlsdGVyPSExfSku'@;
put 'Y2F0Y2goTT0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihNKX0pLGEuc3VibWl0TG9hZGluZz0hMX19KSgpfXJlbW92ZVF1ZXJ5KCl7dGhpcy5zYXNTdG9yZVNlcnZpY2UucmVtb3ZlQ2xhdXNlKCl9ZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoYSl7dm9pZCAwIT09YS5MT0FEX1JFRiYmdGhp'@;
put 'cy5yb3V0ZXIubmF2aWdhdGUoW2Avc3RhZ2UvJHthLkxPQURfUkVGfWBdKX1zZXREU05vdGUoKXtjb25zdCBhPXRoaXMuZHNtZXRhLmZpbmQoZj0+Ik5PVEVTIj09PWYuTkFNRSksZD10aGlzLmRzbWV0YS5maW5kKGY9PiJERF9MT05HREVTQyI9PT1mLk5BTUUpLGg9dGhpcy5kc21ldGEuZmlu'@;
put 'ZChmPT4iRERfU0hPUlRERVNDIj09PWYuTkFNRSk7dGhpcy5kc05vdGU9YSYmYS5WQUxVRT9hLlZBTFVFOmQmJmQuVkFMVUU/ZC5WQUxVRTpoJiZoLlZBTFVFP2guVkFMVUU6IiJ9c2V0dXBIb3QoKXtzZXRUaW1lb3V0KCgpPT57IXRoaXMubG9hZGluZ1RhYmxlVmlldyYmdGhpcy5saWJEYXRh'@;
put 'c2V0JiYodGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5jZSgiaG90SW5zdGFuY2UiKSx0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsbW9kaWZ5Q29sV2lk'@;
put 'dGg6ZnVuY3Rpb24oYSxkKXtyZXR1cm4gYT41MDA/NTAwOmF9LGFmdGVyR2V0Q29sSGVhZGVyOihhLGQpPT57Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoYSk7aCYmdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihoKT4tMSYmZC5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVh'@;
put 'ZGVyU3R5bGUiKSxkLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX19KSl9LDFlMyl9bG9hZFdpdGhQYXJhbWV0ZXJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zd2l0Y2hGbGFnPSEwLGEudGFibGVUaXRsZT1hLnJvdXRl'@;
put 'LnNuYXBzaG90LnBhcmFtcy5saWJNZW18fDAsYS51cmxGaWx0ZXJQaz1wYXJzZUludChhLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZHx8IjAiKTtsZXQgaD1hLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW07YS5saWJEYXRhc2V0PWgsaC5pbmNsdWRlcygiLiIpfHwoYS5saWI9'@;
put 'aCkseWllbGQgYS52aWV3RGF0YShhLnVybEZpbHRlclBrKSxhLm5vRGF0YT9zZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITB9LDEyMDApOnNldFRpbWVvdXQoKCk9PnthLnRhYmxlRmxhZz0hMX0sMTIwMCl9KSgpfWxvYWRXaXRob3V0UGFyYW1ldGVycygpe3ZhciBhPXRoaXM7cmV0dXJu'@;
put 'IGVlKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMSxhLmxpYnJhcmllc0xvYWRpbmc9ITAsS24udmlld2VyLnN0YXJ0dXBTZXQ/c2V0VGltZW91dCgoKT0+e2EubGlicmFyaWVzPUtuLnZpZXdlci5saWJyYXJpZXMsYS5saWJyYXJpZXNTZWFyY2g9S24udmlld2VyLmxpYnJhcmllc1NlYXJj'@;
put 'aCxhLmxpYj1Lbi52aWV3ZXIubGlicmFyeSxhLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJpZXMpfSwxMDApOihhLm5vRGF0YVJlcUVycj0hMSx5aWVsZCBhLnNhc1N0b3JlU2Vy'@;
put 'dmljZS52aWV3TGlicygpLnRoZW4oZD0+e2EubGlicmFyaWVzPWQuc2FzbGlicyxLbi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLEtuLnZpZXdlci5zdGFydHVwU2V0PSEwLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJh'@;
put 'cmllcyl9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLm5vRGF0YVJlcUVycj0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2Eu'@;
put 'aG90VGFibGUuZGF0YS5sZW5ndGg+MCYmKGEudGFibGVGbGFnPSEwKSxhLl9xdWVyeT1hLnNhc1N0b3JlU2VydmljZS5xdWVyeS5zdWJzY3JpYmUoZD0+e2Eud2hlcmVTdHJpbmc9ZC5zdHJpbmcsYS5jbGF1c2VzPWQub2JqLGEubGliZHM9ZC5saWJkc30pLHR5cGVvZiBhLnJvdXRlLnNuYXBz'@;
put 'aG90LnBhcmFtcy5saWJNZW08InUiP2EubG9hZFdpdGhQYXJhbWV0ZXJzKCk6YS5sb2FkV2l0aG91dFBhcmFtZXRlcnMoKX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodTEpLEdlKFpoKSxHZSh0bCksR2UoTHMpLEdlKEN1KSxHZSh2'@;
put 'YyksR2UoTWQpLEdlKFl1KSxHZShwaCksR2UoeHMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPVZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZuYShsa3QsNSksMiZkKXtsZXQgZjt4aShmPUVpKCkpJiYoaC5xdWVy'@;
put 'eUZpbHRlckNvbXBMaXN0PWYpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjk1LHZhcnM6MzAsY29uc3RzOltbImNsaUNvbW1hbmRJbnB1dCIsIiJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbInF1ZXJ5RmlsdGVy'@;
put 'IiwiIl0sWyJzZWFyY2hFbCIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRl'@;
put 'eHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hlc3QiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ryb3AiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwi'@;
put 'Y2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImNsci1jb2wtbWQtNiJdLFsxLCJkb3dubG9hZC1zZWxlY3QiXSxbImNsclNlbGVjdCIsIiIs'@;
put 'MywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbInZhbHVlIiwiQ1NWIl0sWyJ2YWx1ZSIsIlNBUyJdLFsidmFsdWUiLCJQR1NRTF9EREwiXSxbInZhbHVlIiwiU0FTX0RETCJdLFsidmFsdWUiLCJUU1FMX0RETCJdLFsidmFsdWUiLCJFWENFTCJdLFsidmFsdWUiLCJNQVJLRE9XTiJdLFsx'@;
put 'LCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJpZCJdLFsxLCJtb2RhbC1ib2R5Iiwi'@;
put 'd2ViLXF1ZXJ5Il0sWzEsInJvdyJdLFsxLCJjbHItY29sLWxnLTEyIiwiY2xyLWNvbC1tZC0xMiIsImNsci1jb2wtc20tMTIiLCJjbHItY29sLXhzLTEyIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWJldHdlZW4i'@;
put 'XSxbMSwiYnRuLWdyb3VwIl0sWzEsInJhZGlvIiwiYnRuIiwzLCJjbGljayJdLFsidHlwZSIsInJhZGlvIiwibmFtZSIsImJ0bi1ncm91cC1kZW1vLXJhZGlvcyIsMywiY2hlY2tlZCJdLFsxLCJjYXJkLWJsb2NrIiwid2ViLXF1ZXJ5LXdyYXBwZXIiLCJ3b3JkLWJyZWFrLWFsbCJdLFsiY2xy'@;
put 'VGV4dGFyZWEiLCIiLCJyb3dzIiwiNCIsImNvbHMiLCI1MCIsInR5cGUiLCJ0ZXh0IiwicmVhZG9ubHkiLCIiLDEsIndlYi1xdWVyeS10ZXh0IiwzLCJmb2N1cyIsInZhbHVlIl0sWzEsImNhcmQtZm9vdGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayIsIm5neENs'@;
put 'aXBib2FyZCJdLFsiYXJpYS1tb2RhbCIsInRydWUiLDEsImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20i'@;
put 'LCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiYnRuLXNtIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzMs'@;
put 'ImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwi'@;
put 'bG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCBuby1ib3JkZXJzIGgtMTAwIGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDQsIm5nSWYiXSxbMywib3BlbkNoYW5nZSIsInJvd0NsaWNrZWQiLCJvcGVuIiwiZHNtZXRhIiwidmVyc2lvbnMiXSxbMywidmlld2JveE1vZGFs'@;
put 'Q2hhbmdlIiwidmlld2JveE1vZGFsIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVy'@;
put 'IiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2Vh'@;
put 'cmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNs'@;
put 'ckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIs'@;
put 'MywibmdNb2RlbENoYW5nZSIsImtleXVwIiwiaWQiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImRjLWxvY2tlZC1jb250cm9sIiwiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbImNsclRvb2x0'@;
put 'aXBUcmlnZ2VyIiwiIiwxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbMywibmdTd2l0Y2giXSxbInNoYXBlIiwiYm9sdCIsNCwibmdTd2l0Y2hDYXNlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJd'@;
put 'LFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJt'@;
put 'b2RhbCIsInotaW5kZXgtaGlnaGVzdCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9z'@;
put 'ZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIl0sWzEsImxvYWRpbmdTcGlubmVyIl0s'@;
put 'WzEsInNwaW5uZXIiXSxbMSwibXQtMTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsxLCJjYXJkIiwibm8tYm9yZGVycyIsImgtMTAwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWyJjbGFzcyIsImhlYWRlci1yb3cgY2xyLXJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBjbHIt'@;
put 'anVzdGlmeS1jb250ZW50LWNlbnRlciB3LTEwMCBtLTAiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZC1ibG9jayBub0RhdGEiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWZsZXgtMSIsNCwibmdJZiJdLFsiY2xhc3MiLCJt'@;
put 'dC0yLWkgdy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiLCJtLTAiXSxbMSwiZm9ybS1ibG9jayIsInRhYmxlLXNlYXJjaC13cmFw'@;
put 'cGVyIiwic3ciLCJjbHItY29sLW1kIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiaW5wdXQtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCIsIm5hbWUiLCJzZWFyY2gtaW5wdXQiLDMsImtleXVwLmVudGVy'@;
put 'IiwidHlwZSJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUiLDQsIm5nSWYiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwibmFtZSIsIm51bWVyaWNfY2hlY2siLDMsIm5nTW9kZWxDaGFu'@;
put 'Z2UiLCJuZ01vZGVsIl0sWzEsInRpdGxlLWNvbCIsImNsci1jb2wtYXV0byIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LXNtLXJvdyJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJjbHItZmxleC1jb2x1bW4iLCJkLWZsZXgiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItYWxpZ24taXRl'@;
put 'bXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJhcmlhLWxhYmVsIiwiVmlldyBkYXRhc2V0IG1ldGEgaW5mbyIsInNoYXBlIiwiaW5mby1jaXJjbGUiLCJz'@;
put 'aXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3cgbXItNSIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDQsIm5nSWYiXSxbMSwib3B0aW9ucy1jb2wiLCJjbHIt'@;
put 'Y29sLW1kIl0sWyJjbGFzcyIsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgaW5mb0JhciIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giLDMsImNsaWNrIl0sWzEsInNwaW5uZXIiLCJzcGlu'@;
put 'bmVyLWlubGluZSJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciLCJtci01Il0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0'@;
put 'IiwiY2xyU2l6ZSIsImxnIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLDMsImNsaWNrIl0sWzEsIm9wdGlvbnMtZHJvcGRvd24iLDMsImNsckNsb3NlTWVudU9uSXRlbUNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4i'@;
put 'LCJidG4tc20iLCJidG4tb3V0bGluZSIsImZpbHRlclNpZGUiXSxbInNoYXBlIiwiY29nIiwic2l6ZSIsIjE1Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwz'@;
put 'LCJjbGljayJdLFsic2hhcGUiLCJ2aWV3LWNhcmRzIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImZpbHRlciJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsic2hhcGUiLCJkb3dubG9hZC1jbG91ZCJdLFsic2hhcGUiLCJwZW5jaWwiXSxbInNo'@;
put 'YXBlIiwic3dpdGNoIl0sWzEsImNsci1jb2wtbWQtMTIiLCJpbmZvQmFyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9pbWFnZXMvc2VsZWN0LWxpYnJhcnkucG5nIiwiYWx0Iiwic2Vs'@;
put 'ZWN0IGEgbGlicmFyeSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImJvcmRlci1ib3R0b20tZGl2aWRlciIsImp1c3RpZnktY29u'@;
put 'dGVudC1iZXR3ZWVuIiwidy0xMDAiLCJtLTAiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIiwibXQtMTUiLCJtYi0xNSJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyBwb2lu'@;
put 'dGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxpYmluZm8gbS0wIGNsci1yb3ciLDQsIm5nSWYiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMv'@;
put 'c2VydmljZXMvd2ViL2ltYWdlcy9zZWxlY3QtdGFibGUucG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWzEsImxpYmluZm8iLCJtLTAiLCJjbHItcm93Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIG0tMCB3LTEwMCIsNCwibmdJZiJdLFsxLCJ0'@;
put 'ZXh0LWNlbnRlciIsIm0tMCIsInctMTAwIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLCJtLTAiLDMsImNsaWNrIl0sWzEsIm0tMCJdLFsxLCJtLTAiLCJmb250LWJvbGQiXSxbMSwiY2FyZC1ibG9jayIsIm5vRGF0YSJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJk'@;
put 'Iiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwiY2xhc3NO'@;
put 'YW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiY29weVBhc3RlIiwiY29udGV4dE1lbnUiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51Iiwi'@;
put 'aGVpZ2h0IiwibW9kaWZ5Q29sV2lkdGgiLCJjZWxscyIsIm1heFJvd3MiLCJtYW51YWxDb2x1bW5SZXNpemUiLCJhZnRlckdldENvbEhlYWRlciIsInJvd0hlYWRlcnMiLCJyb3dIZWFkZXJXaWR0aCIsInJvd0hlaWdodHMiLCJsaWNlbnNlS2V5Il0sWzEsIm10LTItaSIsInctMTAwIiwidGV4'@;
put 'dC1jZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9TG4oKTtkZSgwLCJhcHAtc2lkZWJhciIsNSksRnQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubG9hZE1vcmVMaWJyYXJpZXMoKSl9KSxtdCgxLHVrdCwyLDAs'@;
put 'ImRpdiIsNiksZGUoMiwiY2xyLXRyZWUiKSxtdCgzLGZrdCw2LDMsImNsci10cmVlLW5vZGUiLDcpKDQseGt0LDIsMSwibmctY29udGFpbmVyIiw4KSxoZSgpLG10KDUsRWt0LDMsMCwiZGl2Iiw5KSxoZSgpLGRlKDYsImRpdiIsMTApLG10KDcsVGt0LDE0LDAsImRpdiIsMTEpKDgsQWt0LDEs'@;
put 'MCwiZGl2IiwxMiksZGUoOSwiY2xyLW1vZGFsIiwxMyksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGJpKGgub3BlbkRvd25sb2FkLE0pfHwoaC5vcGVuRG93bmxvYWQ9TSksQ3QoTSl9KSxkZSgxMCwiaDMiLDE0KSxMZSgxMSwiRG93bmxvYWQiKSxo'@;
put 'ZSgpLGRlKDEyLCJkaXYiLDE1KSgxMywiZGl2IiwxNikoMTQsImNsci1zZWxlY3QtY29udGFpbmVyIiwxNykoMTUsImxhYmVsIiksTGUoMTYsIlBsZWFzZSBjaG9vc2UgZG93bmxvYWQgZm9ybWF0IiksaGUoKSxkZSgxNywic2VsZWN0IiwxOCksZ2koIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KE0pe3JldHVybiB3dChmKSxiaShoLmRvd25sb2FkRm9ybWF0LE0pfHwoaC5kb3dubG9hZEZvcm1hdD1NKSxDdChNKX0pLGRlKDE4LCJvcHRpb24iLDE5KSxMZSgxOSwiQ1NWIiksaGUoKSxkZSgyMCwib3B0aW9uIiwyMCksTGUoMjEsIkRhdGFsaW5lcyAoY2FyZHMgZmlsZSkiKSxoZSgpLGRl'@;
put 'KDIyLCJvcHRpb24iLDIxKSxMZSgyMywiRERMIChQR1NRTCBGbGF2b3VyKSIpLGhlKCksZGUoMjQsIm9wdGlvbiIsMjIpLExlKDI1LCJEREwgKFNBUyBGbGF2b3VyKSIpLGhlKCksZGUoMjYsIm9wdGlvbiIsMjMpLExlKDI3LCJEREwgKFRTUUwgRmxhdm91cikiKSxoZSgpLGRlKDI4LCJvcHRp'@;
put 'b24iLDI0KSxMZSgyOSwiRXhjZWwgKC54bHN4KSIpLGhlKCksZGUoMzAsIm9wdGlvbiIsMjUpLExlKDMxLCJNYXJrZG93biAoLm1kKSIpLGhlKCkoKSgpKCkoKSxkZSgzMiwiZGl2IiwyNikoMzMsImJ1dHRvbiIsMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5v'@;
put 'cGVuRG93bmxvYWQ9ITEpfSksTGUoMzQsIiBDYW5jZWwgIiksaGUoKSxkZSgzNSwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmRvd25sb2FkRm9ybWF0LmluY2x1ZGVzKCJEREwiKT9oLmRvd25sb2FkRERMKCk6aC5kb3dubG9hZERhdGEoKSl9'@;
put 'KSxMZSgzNiwiIE9rICIpLGhlKCkoKSgpLGRlKDM3LCJjbHItbW9kYWwiLDEzKSxnaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksYmkoaC53ZWJRdWVyeSxNKXx8KGgud2ViUXVlcnk9TSksQ3QoTSl9KSxkZSgzOCwiaDMiLDE0KSxMZSgzOSwiIFdlYiBR'@;
put 'dWVyeSBVUkwgIiksaGUoKSxkZSg0MCwiZGl2IiwyOSkoNDEsImRpdiIsMzApKDQyLCJkaXYiLDMxKSg0MywiZGl2IiwzMikoNDQsImRpdiIsMzMpKDQ1LCJzcGFuIiksTGUoNDYsIkNvcHkgdGhlIGJlbG93IGludG8geW91ciBwcmVmZXJyZWQgY2xpZW50IHRvb2w6IiksaGUoKSxkZSg0Nywi'@;
put 'ZGl2IiwzNCkoNDgsImRpdiIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC53ZWJRdWVyeVRhYj0hMCxDdChoLnNob3dXZWJRdWVyeSgpKX0pLEd0KDQ5LCJpbnB1dCIsMzYpLGRlKDUwLCJsYWJlbCIpLExlKDUxLCJUQUIiKSxoZSgpKCksZGUoNTIsImRpdiIsMzUp'@;
put 'LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC53ZWJRdWVyeVRhYj0hMSxDdChoLnNob3dXZWJRdWVyeSgpKX0pLEd0KDUzLCJpbnB1dCIsMzYpLGRlKDU0LCJsYWJlbCIpLExlKDU1LCJDU1YiKSxoZSgpKCkoKSgpLGRlKDU2LCJkaXYiLDM3KSg1NywidGV4dGFyZWEiLDM4'@;
put 'LDApLEZ0KCJmb2N1cyIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25DbGlDb21tYW5kRm9jdXMoTSkpfSksTGUoNTksIiAgICAgICAgICAgICAgIiksaGUoKSgpLGRlKDYwLCJkaXYiLDM5KSg2MSwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChm'@;
put 'KSxDdChoLmNvcHlUb0NsaXAoKSl9KSxMZSg2MiwiIGNvcHkgdG8gY2xpcGJvYXJkICIpLGhlKCkoKSgpKCkoKSgpLGRlKDYzLCJkaXYiLDI2KSg2NCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLndlYlF1ZXJ5PSExKX0pLExlKDY1LCIgY2xv'@;
put 'c2UgIiksaGUoKSgpKCksZGUoNjYsImNsci1tb2RhbCIsNDEpLGdpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxiaShoLmZpbHRlcixNKXx8KGguZmlsdGVyPU0pLEN0KE0pfSksZGUoNjcsImgzIiwxNCksTGUoNjgsIiBGaWx0ZXIgZm9yIHRhYmxlOiIp'@;
put 'LGRlKDY5LCJzcGFuIiksTGUoNzApLGhlKCkoKSxkZSg3MSwiZGl2IiwxNSksbXQoNzIsa2t0LDIsMCwiYXBwLXF1ZXJ5Iiw0MiksaGUoKSxkZSg3MywiZGl2IiwyNikoNzQsImJ1dHRvbiIsNDMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNldEZpbHRlcigp'@;
put 'KX0pLExlKDc1LCIgcmVzZXQgZmlsdGVyICIpLGhlKCksZGUoNzYsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5maWx0ZXI9ITEsQ3QoaC5yZW1vdmVRdWVyeSgpKX0pLExlKDc3LCIgQ2FuY2VsICIpLGhlKCksZGUoNzgsImJ1dHRvbiIsNDUpLEZ0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zZW5kQ2xhdXNlKCkpfSksTGUoNzksIiBPayAiKSxoZSgpKCkoKSxkZSg4MCwiY2xyLW1vZGFsIiw0NiksZ2koImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGJpKGgucXVlcnlFcnIsTSl8'@;
put 'fChoLnF1ZXJ5RXJyPU0pLEN0KE0pfSksZGUoODEsImgzIiw0NyksTGUoODIsIkVycm9yIiksaGUoKSxkZSg4MywiZGl2IiwxNSkoODQsInAiKSxMZSg4NSksaGUoKSgpLGRlKDg2LCJkaXYiLDI2KSg4NywiYnV0dG9uIiw0OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxD'@;
put 'dChoLnF1ZXJ5RXJyPSExKX0pLExlKDg4LCIgQ2FuY2VsICIpLGhlKCksZGUoODksImJ1dHRvbiIsNDkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxMZSg5MCwiIE9rICIpLGhlKCkoKSgpLG10KDkxLERrdCw2LDAsImRpdiIsNTApKDky'@;
put 'LGhEdCw4LDYsImRpdiIsNTEpLGhlKCksZGUoOTMsImFwcC1kYXRhc2V0LWluZm8iLDUyKSxnaSgib3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLGJpKGguZGF0YXNldEluZm8sTSl8fChoLmRhdGFzZXRJbmZvPU0pLEN0KE0pfSksRnQoInJvd0NsaWNrZWQiLGZ1bmN0aW9u'@;
put 'KE0pe3JldHVybiB3dChmKSxDdChoLmRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKE0pKX0pLGhlKCksZGUoOTQsImFwcC12aWV3Ym94ZXMiLDUzKSxnaSgidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksYmkoaC52aWV3Ym94T3BlbixNKXx8KGgudmlld2Jv'@;
put 'eE9wZW49TSksQ3QoTSl9KSxoZSgpfWlmKDImZCl7Y29uc3QgZj12byg1OCk7ZmUoKSx4ZSgibmdJZiIsaC5saWJyYXJpZXNMb2FkaW5nKSxmZSgyKSx4ZSgibmdJZiIsaC5saWJyYXJpZXMpLGZlKCkseGUoIm5nRm9yT2YiLGgubGlicmFyaWVzKSxmZSgpLHhlKCJuZ0lmIixoLmxpYnJhcmll'@;
put 'c1BhZ2luZyksZmUoMikseGUoIm5nSWYiLGgubnVsbFZhcmlhYmxlcyksZmUoKSx4ZSgibmdJZiIsaC5udWxsVmFyaWFibGVzKSxmZSgpLHBpKCJjbHJNb2RhbE9wZW4iLGgub3BlbkRvd25sb2FkKSx4ZSgiY2xyTW9kYWxTaXplIiwibWQiKSxmZSg4KSxwaSgibmdNb2RlbCIsaC5kb3dubG9h'@;
put 'ZEZvcm1hdCksZmUoMTgpLHhlKCJpZCIsaC50YWJsZVRpdGxlKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLndlYlF1ZXJ5KSx4ZSgiY2xyTW9kYWxTaXplIiwibGciKSxmZSgxMikseGUoImNoZWNrZWQiLGgud2ViUXVlcnlUYWIpLGZlKDQpLHhlKCJjaGVja2VkIiwhaC53ZWJRdWVyeVRh'@;
put 'YiksZmUoNCkseGUoInZhbHVlIixoLndlYlF1ZXJ5VGV4dCksZmUoNCkseGUoIm5neENsaXBib2FyZCIsZiksZmUoNSkscGkoImNsck1vZGFsT3BlbiIsaC5maWx0ZXIpLHhlKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksSXIoIiAiLGgubGliVGFi'@;
put 'LCIgIiksZmUoMikseGUoIm5nSWYiLGguZmlsdGVyKSxmZSg2KSx4ZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSxmZSgyKSxwaSgiY2xyTW9kYWxPcGVuIixoLnF1ZXJ5RXJyKSxmZSg1KSx3cihoLnF1ZXJ5RXJyTWVzc2FnZSksZmUoNikseGUoIm5nSWYiLGgubG9hZGluZ1RhYmxl'@;
put 'VmlldyksZmUoKSx4ZSgibmdJZiIsIWgubG9hZGluZ1RhYmxlVmlldyksZmUoKSxwaSgib3BlbiIsaC5kYXRhc2V0SW5mbykseGUoImRzbWV0YSIsaC5kc21ldGEpKCJ2ZXJzaW9ucyIsaC52ZXJzaW9ucyksZmUoKSxwaSgidmlld2JveE1vZGFsIixoLnZpZXdib3hPcGVuKX19LGRlcGVuZGVu'@;
put 'Y2llczpbRTZlLGxzLHlvLFMyLGNwLGlrdCxhNyxZZixHZixlYyxCMSxXZixubCxpNyxHcyx5cCxUaCxQZCxmZyxGbCxvdSwkdSxWMCxEMixSMixkcyxxMWUsVzEsVnksSWQsUmQsJHksR3ksSkwsc2csZjcscDcsTnksZzcsdjcsbTcsTWgsRF8saTQsazZlLGZPLEtlZSxTdyxyNCxJNmUsc2t0'@;
put 'XSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpu'@;
put 'b3dyYXB9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMx'@;
put 'NDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0uaGVhZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAudGl0bGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7'@;
put 'YWxpZ24taXRlbXM6Y2VudGVyfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcHRpb25zLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uc3dbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxcmVtIDByZW0gLjVy'@;
put 'ZW0gMXJlbX0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4O2JhY2tncm91bmQ6IzQ5NTk2Nztjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4O2ZvbnQtc2l6ZToxNnB4fS5maWx0ZXJTaWRlW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4t'@;
put 'dG9wOjI2cHg7bWFyZ2luLWJvdHRvbToxOXB4fS5vcHRpb25zLWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWljb257bWFyZ2luLXJpZ2h0OjVweH0uZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTgwcHg7bWFyZ2luLXRvcDotMThweDtwYWRkaW5n'@;
put 'OjB9LmRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmJ0bltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTt0ZXh0LXRyYW5zZm9ybTpub25lfS5jYXJkRmxleFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lm5vRGF0'@;
put 'YVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjF9LmZpbHRlckJ0bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpm'@;
put 'bGV4LWVuZH0uZWRpdEJ0bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5idG5WaWV3W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCFpbXBvcnRhbnR9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzou'@;
put 'NXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZG93bmxvYWQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1zZWxlY3Qtd3JhcHBlcnttYXgtaGVpZ2h0OnVuc2V0IWltcG9ydGFudH0ucmVmcmVzaC10YWJsZVtfbmdjb250ZW50LSVD'@;
put 'T01QJV17Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fS5saWJpbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjEwcHggMjBweDtvdmVyZmxvdzphdXRvfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdo'@;
put 'dC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUsIGhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5oYW5kc29udGFibGUgdGhlYWQgdGguaHRfX2hpZ2hsaWdodC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZC1jb2xvcjojMzA2YjAwYjAhaW1wb3J0YW50fWhvdC10YWJsZVtf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAgIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZC1jb2xvcjojMzA2YjAwNmUhaW1wb3J0YW50fS5uby10YWJsZS1zZWxlY3RlZC1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOm5vbmU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1z'@;
put 'OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LndlYi1xdWVyeVtfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDozNXZofS53ZWItcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLndlYi1xdWVyeS10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjEwMHB4O21heC1o'@;
put 'ZWlnaHQ6MTAwcHg7d2lkdGg6MTAwJSFpbXBvcnRhbnR9LndlYi1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAud2ViLXF1ZXJ5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LndlYi1xdWVyeVtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAud2ViLXF1ZXJ5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItdGV4dGFyZWEtY29udGFpbmVye21hcmdpbjowIWltcG9ydGFudH0ud2ViLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53ZWItcXVlcnktd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAg'@;
put 'IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW46MCFpbXBvcnRhbnR9LnRhYmxlLXNlYXJjaC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDowfS50YWJsZS1zZWFyY2gtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtW19uZ2NvbnRlbnQtJUNPTVAlXXtw'@;
put 'YWRkaW5nLWxlZnQ6MH0udGFibGUtc2VhcmNoLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6NHB4fS50YWJsZS1zZWFyY2gtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXJ7'@;
put 'bWFyZ2luLXRvcDowfS50YWJsZS1zZWFyY2gtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXJ7bWFyZ2luLWxlZnQ6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LmZpbHRlckJ0bltfbmdjb250ZW50LSVDT01QJV0sIC5l'@;
put 'ZGl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn19QG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KXsucm93W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MHJlbTttYXJnaW4tbGVmdDowcmVtfX0iXX0pfX1yZXR1cm4gY30p'@;
put 'KCk7Y29uc3QgZkR0PVt7cGF0aDoiIixjb21wb25lbnQ6JFR0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86ImRhdGEifSx7cGF0aDoiZGF0YSIsY29tcG9uZW50OmpOfSx7cGF0aDoiZGF0YSIsY29tcG9uZW50OmpOfSx7cGF0aDoiZGF0YS86bGliTWVt'@;
put 'LzpmaWx0ZXJJZCIsY29tcG9uZW50OmpOfSx7cGF0aDoiZGF0YS86bGliTWVtIixjb21wb25lbnQ6ak59LHtwYXRoOiJsaW5lYWdlIixjb21wb25lbnQ6Qk59LHtwYXRoOiJsaW5lYWdlLzp0YWJsZWlkLzpkaXJlY3Rpb24iLGNvbXBvbmVudDpCTn0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpj'@;
put 'b2x1cmkvOmRpcmVjdGlvbiIsY29tcG9uZW50OkJOfSx7cGF0aDoibGluZWFnZS9jb2x1bW4vOmNvbHVyaS86ZGlyZWN0aW9uLzpyZWxvYWQiLGNvbXBvbmVudDpCTn0se3BhdGg6InZpeWEtYXBpLWV4cGxvcmVyIixjb21wb25lbnQ6dGt0fSx7cGF0aDoibWV0YWRhdGEiLGNvbXBvbmVudDp6'@;
put 'dGV9LHtwYXRoOiJtZXRhZGF0YS9vYmplY3QvOm9iamVjdElEIixjb21wb25lbnQ6enRlfSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRC86b2JqZWN0TmFtZSIsY29tcG9uZW50Onp0ZX0se3BhdGg6InVzZXJuYXYiLGNvbXBvbmVudDpHVHQsY2hpbGRyZW46W3twYXRoOiIiLHBh'@;
put 'dGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoiZ3JvdXBzIn0se3BhdGg6InVzZXJzIixjb21wb25lbnQ6eTdlfSx7cGF0aDoidXNlcnMvOnVyaSIsY29tcG9uZW50Onk3ZX0se3BhdGg6Imdyb3VwcyIsY29tcG9uZW50OnE2ZX0se3BhdGg6Imdyb3Vwcy86dXJpIixjb21wb25lbnQ6cTZlfSx7'@;
put 'cGF0aDoicm9sZXMiLGNvbXBvbmVudDpiN2V9LHtwYXRoOiJyb2xlcy86dXJpIixjb21wb25lbnQ6YjdlfV19XX1dO2xldCBwRHQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtp'@;
put 'KHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W2pjLmZvckNoaWxkKGZEdCksamNdfSl9fXJldHVybiBjfSkoKSxnRHQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMu'@;
put 'XHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0w2ZSxMbyxwRHQsb2t0LEljLEIwLGk5LmZvclJvb3QoKSxXOSxDdyxTQSxYZWUsUTJdfSl9fXJldHVybiBjfSkoKTtjb25zdCB2RHQ9amMuZm9yUm9vdChbe3BhdGg6IiIscmVkaXJlY3RU'@;
put 'bzoiaG9tZSIscGF0aE1hdGNoOiJmdWxsIn0se3BhdGg6InZpZXciLGxvYWRDaGlsZHJlbjooKT0+Z0R0fSx7cGF0aDoicmV2aWV3Iixjb21wb25lbnQ6bV90LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86InRvYXBwcm92ZSJ9LHtwYXRoOiIiLGxvYWRD'@;
put 'aGlsZHJlbjooKT0+Z190fV19LHtwYXRoOiJsaWNlbnNpbmciLGxvYWRDaGlsZHJlbjooKT0+T2J0fSx7cGF0aDoiaG9tZSIsbG9hZENoaWxkcmVuOigpPT5LdnR9LHtwYXRoOiJlZGl0b3IiLGxvYWRDaGlsZHJlbjooKT0+Vjd0fSx7cGF0aDoic3RhZ2UiLGxvYWRDaGlsZHJlbjooKT0+RV90'@;
put 'fSx7cGF0aDoic3lzdGVtIixsb2FkQ2hpbGRyZW46KCk9PlZfdH0se3BhdGg6ImRlcGxveSIsbG9hZENoaWxkcmVuOigpPT5jS2V9LHtwYXRoOiIqKiIsY29tcG9uZW50OngkZX1dLHt1c2VIYXNoOiEwfSk7bGV0IGJEdD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Yyxib290c3RyYXA6W1BZZV19KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbb0wsWmgsUWVlLEdSXSxpbXBvcnRzOltNJGUseGFlLEljLEVPZSx0QWUsdkR0LEN3LEIw'@;
put 'LFc5LFNBLFEyLExBdF19KX19cmV0dXJuIGN9KSgpO01DZSgpLmJvb3RzdHJhcE1vZHVsZShiRHQpfSwzNzM0Oihtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57dmFyIF9hc3luY1RvR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oMjky'@;
put 'OTMpLmRlZmF1bHQsX3dyYXBBc3luY0dlbmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDQyOTU4KS5kZWZhdWx0LF9hd2FpdEFzeW5jR2VuZXJhdG9yPV9fd2VicGFja19yZXF1aXJlX18oNTMzNDQpLmRlZmF1bHQsX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGU9X193ZWJwYWNrX3JlcXVpcmVf'@;
put 'Xyg5MzUxMykuZGVmYXVsdCxfYXN5bmNJdGVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDgyODgxKS5kZWZhdWx0LF87c2VsZixfPSgpPT4oKCk9Pnt2YXIgX193ZWJwYWNrX21vZHVsZXNfXz17MzA2MjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDg3NjQpLkJ1ZmZlcjtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5Dc3ZGb3JtYXR0ZXJTdHJlYW09dm9pZCAwO2NvbnN0IHk9XygyODMwKSxnPV8oOTk0Nyk7cS5Dc3ZGb3JtYXR0ZXJTdHJlYW09Y2xhc3MgQiBleHRlbmRzIHkuVHJhbnNmb3Jte2NvbnN0cnVjdG9yKFApe3N1'@;
put 'cGVyKHt3cml0YWJsZU9iamVjdE1vZGU6UC5vYmplY3RNb2RlfSksdGhpcy5oYXNXcml0dGVuQk9NPSExLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1QLHRoaXMucm93Rm9ybWF0dGVyPW5ldyBnLlJvd0Zvcm1hdHRlcihQKSx0aGlzLmhhc1dyaXR0ZW5CT009IVAud3JpdGVCT019dHJhbnNmb3Jt'@;
put 'KFApe3JldHVybiB0aGlzLnJvd0Zvcm1hdHRlci5yb3dUcmFuc2Zvcm09UCx0aGlzfV90cmFuc2Zvcm0oUCxGLE8pe2xldCB6PSExO3RyeXt0aGlzLmhhc1dyaXR0ZW5CT018fCh0aGlzLnB1c2godGhpcy5mb3JtYXR0ZXJPcHRpb25zLkJPTSksdGhpcy5oYXNXcml0dGVuQk9NPSEwKSx0aGlz'@;
put 'LnJvd0Zvcm1hdHRlci5mb3JtYXQoUCwoTixMKT0+Tj8oej0hMCxPKE4pKTooTCYmTC5mb3JFYWNoKEs9Pnt0aGlzLnB1c2goSS5mcm9tKEssInV0ZjgiKSl9KSx6PSEwLE8oKSkpfWNhdGNoKE4pe2lmKHopdGhyb3cgTjtPKE4pfX1fZmx1c2goUCl7dGhpcy5yb3dGb3JtYXR0ZXIuZmluaXNo'@;
put 'KChGLE8pPT5GP1AoRik6KE8mJk8uZm9yRWFjaCh6PT57dGhpcy5wdXNoKEkuZnJvbSh6LCJ1dGY4IikpfSksUCgpKSl9fX0sNjc2MzoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuRm9ybWF0dGVyT3B0aW9u'@;
put 'cz12b2lkIDAscS5Gb3JtYXR0ZXJPcHRpb25zPWNsYXNzIF97Y29uc3RydWN0b3IoeT17fSl7dmFyIGc7dGhpcy5vYmplY3RNb2RlPSEwLHRoaXMuZGVsaW1pdGVyPSIsIix0aGlzLnJvd0RlbGltaXRlcj0iXG4iLHRoaXMucXVvdGU9JyInLHRoaXMuZXNjYXBlPXRoaXMucXVvdGUsdGhpcy5x'@;
put 'dW90ZUNvbHVtbnM9ITEsdGhpcy5xdW90ZUhlYWRlcnM9dGhpcy5xdW90ZUNvbHVtbnMsdGhpcy5oZWFkZXJzPW51bGwsdGhpcy5pbmNsdWRlRW5kUm93RGVsaW1pdGVyPSExLHRoaXMud3JpdGVCT009ITEsdGhpcy5CT009Ilx1ZmVmZiIsdGhpcy5hbHdheXNXcml0ZUhlYWRlcnM9ITEsT2Jq'@;
put 'ZWN0LmFzc2lnbih0aGlzLHl8fHt9KSx0eXBlb2YgeT8ucXVvdGVIZWFkZXJzPiJ1IiYmKHRoaXMucXVvdGVIZWFkZXJzPXRoaXMucXVvdGVDb2x1bW5zKSwhMD09PXk/LnF1b3RlP3RoaXMucXVvdGU9JyInOiExPT09eT8ucXVvdGUmJih0aGlzLnF1b3RlPSIiKSwic3RyaW5nIiE9dHlwZW9m'@;
put 'IHk/LmVzY2FwZSYmKHRoaXMuZXNjYXBlPXRoaXMucXVvdGUpLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPSEhdGhpcy5oZWFkZXJzJiYobnVsbD09PShnPXkud3JpdGVIZWFkZXJzKXx8dm9pZCAwPT09Z3x8ZyksdGhpcy5oZWFkZXJzPUFycmF5LmlzQXJyYXkodGhpcy5oZWFkZXJzKT90aGlz'@;
put 'LmhlYWRlcnM6bnVsbCx0aGlzLmVzY2FwZWRRdW90ZT1gJHt0aGlzLmVzY2FwZX0ke3RoaXMucXVvdGV9YH19fSw1MTg2OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihQKXtyZXR1cm4gUCYmUC5fX2VzTW9k'@;
put 'dWxlP1A6e2RlZmF1bHQ6UH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkZpZWxkRm9ybWF0dGVyPXZvaWQgMDtjb25zdCB5PUkoXyg4MDk0KSksZz1JKF8oOTcyMikpLEI9SShfKDE2NTgpKTtxLkZpZWxkRm9ybWF0dGVyPWNsYXNzIHd7Y29u'@;
put 'c3RydWN0b3IoRil7dGhpcy5faGVhZGVycz1udWxsLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1GLG51bGwhPT1GLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9Ri5oZWFkZXJzKSx0aGlzLlJFUExBQ0VfUkVHRVhQPW5ldyBSZWdFeHAoRi5xdW90ZSwiZyIpO2NvbnN0IE89YFske0YuZGVsaW1pdGVy'@;
put 'fSR7Qi5kZWZhdWx0KEYucm93RGVsaW1pdGVyKX18XHJ8XG5dYDt0aGlzLkVTQ0FQRV9SRUdFWFA9bmV3IFJlZ0V4cChPKX1zZXQgaGVhZGVycyhGKXt0aGlzLl9oZWFkZXJzPUZ9c2hvdWxkUXVvdGUoRixPKXtjb25zdCB6PU8/dGhpcy5mb3JtYXR0ZXJPcHRpb25zLnF1b3RlSGVhZGVyczp0'@;
put 'aGlzLmZvcm1hdHRlck9wdGlvbnMucXVvdGVDb2x1bW5zO3JldHVybiB5LmRlZmF1bHQoeik/ejpBcnJheS5pc0FycmF5KHopP3pbRl06bnVsbCE9PXRoaXMuX2hlYWRlcnMmJnpbdGhpcy5faGVhZGVyc1tGXV19Zm9ybWF0KEYsTyx6KXtjb25zdCBOPWAke2cuZGVmYXVsdChGKT8iIjpGfWAu'@;
put 'cmVwbGFjZSgvXDAvZywiIikse2Zvcm1hdHRlck9wdGlvbnM6TH09dGhpcztyZXR1cm4iIiE9PUwucXVvdGUmJi0xIT09Ti5pbmRleE9mKEwucXVvdGUpP3RoaXMucXVvdGVGaWVsZChOLnJlcGxhY2UodGhpcy5SRVBMQUNFX1JFR0VYUCxMLmVzY2FwZWRRdW90ZSkpOi0xIT09Ti5zZWFyY2go'@;
put 'dGhpcy5FU0NBUEVfUkVHRVhQKXx8dGhpcy5zaG91bGRRdW90ZShPLHopP3RoaXMucXVvdGVGaWVsZChOKTpOfXF1b3RlRmllbGQoRil7Y29uc3R7cXVvdGU6T309dGhpcy5mb3JtYXR0ZXJPcHRpb25zO3JldHVybmAke099JHtGfSR7T31gfX19LDcxODE6ZnVuY3Rpb24odWUscSxfKXsidXNl'@;
put 'IHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuUm93Rm9ybWF0dGVyPXZvaWQgMDtj'@;
put 'b25zdCB5PUkoXyg4NDIzKSksZz1JKF8oMjMwNykpLEI9Xyg1MTg2KSx3PV8oNDY5Mik7Y2xhc3MgUHtjb25zdHJ1Y3RvcihPKXt0aGlzLnJvd0NvdW50PTAsdGhpcy5mb3JtYXR0ZXJPcHRpb25zPU8sdGhpcy5maWVsZEZvcm1hdHRlcj1uZXcgQi5GaWVsZEZvcm1hdHRlcihPKSx0aGlzLmhl'@;
put 'YWRlcnM9Ty5oZWFkZXJzLHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzPU8uc2hvdWxkV3JpdGVIZWFkZXJzLHRoaXMuaGFzV3JpdHRlbkhlYWRlcnM9ITEsbnVsbCE9PXRoaXMuaGVhZGVycyYmKHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz10aGlzLmhlYWRlcnMpLE8udHJhbnNmb3JtJiYo'@;
put 'dGhpcy5yb3dUcmFuc2Zvcm09Ty50cmFuc2Zvcm0pfXN0YXRpYyBpc1Jvd0hhc2hBcnJheShPKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkoTykmJkFycmF5LmlzQXJyYXkoT1swXSkmJjI9PT1PWzBdLmxlbmd0aH1zdGF0aWMgaXNSb3dBcnJheShPKXtyZXR1cm4gQXJyYXkuaXNBcnJheShPKSYm'@;
put 'IXRoaXMuaXNSb3dIYXNoQXJyYXkoTyl9c3RhdGljIGdhdGhlckhlYWRlcnMoTyl7cmV0dXJuIFAuaXNSb3dIYXNoQXJyYXkoTyk/Ty5tYXAoej0+elswXSk6QXJyYXkuaXNBcnJheShPKT9POk9iamVjdC5rZXlzKE8pfXN0YXRpYyBjcmVhdGVUcmFuc2Zvcm0oTyl7cmV0dXJuIHcuaXNTeW5j'@;
put 'VHJhbnNmb3JtKE8pPyh6LE4pPT57bGV0IEw9bnVsbDt0cnl7TD1PKHopfWNhdGNoKEspe3JldHVybiBOKEspfXJldHVybiBOKG51bGwsTCl9Oih6LE4pPT57Tyh6LE4pfX1zZXQgcm93VHJhbnNmb3JtKE8pe2lmKCF5LmRlZmF1bHQoTykpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHRyYW5z'@;
put 'Zm9ybSBzaG91bGQgYmUgYSBmdW5jdGlvbiIpO3RoaXMuX3Jvd1RyYW5zZm9ybT1QLmNyZWF0ZVRyYW5zZm9ybShPKX1mb3JtYXQoTyx6KXt0aGlzLmNhbGxUcmFuc2Zvcm1lcihPLChOLEwpPT57aWYoTilyZXR1cm4geihOKTtpZighTylyZXR1cm4geihudWxsKTtjb25zdCBLPVtdO2lmKEwp'@;
put 'e2NvbnN0e3Nob3VsZEZvcm1hdENvbHVtbnM6VSxoZWFkZXJzOld9PXRoaXMuY2hlY2tIZWFkZXJzKEwpO2lmKHRoaXMuc2hvdWxkV3JpdGVIZWFkZXJzJiZXJiYhdGhpcy5oYXNXcml0dGVuSGVhZGVycyYmKEsucHVzaCh0aGlzLmZvcm1hdENvbHVtbnMoVywhMCkpLHRoaXMuaGFzV3JpdHRl'@;
put 'bkhlYWRlcnM9ITApLFUpe2NvbnN0IFk9dGhpcy5nYXRoZXJDb2x1bW5zKEwpO0sucHVzaCh0aGlzLmZvcm1hdENvbHVtbnMoWSwhMSkpfX1yZXR1cm4geihudWxsLEspfSl9ZmluaXNoKE8pe2NvbnN0IHo9W107aWYodGhpcy5mb3JtYXR0ZXJPcHRpb25zLmFsd2F5c1dyaXRlSGVhZGVycyYm'@;
put 'MD09PXRoaXMucm93Q291bnQpe2lmKCF0aGlzLmhlYWRlcnMpcmV0dXJuIE8obmV3IEVycm9yKCJgYWx3YXlzV3JpdGVIZWFkZXJzYCBvcHRpb24gaXMgc2V0IHRvIHRydWUgYnV0IGBoZWFkZXJzYCBvcHRpb24gbm90IHByb3ZpZGVkLiIpKTt6LnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKHRo'@;
put 'aXMuaGVhZGVycywhMCkpfXJldHVybiB0aGlzLmZvcm1hdHRlck9wdGlvbnMuaW5jbHVkZUVuZFJvd0RlbGltaXRlciYmei5wdXNoKHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5yb3dEZWxpbWl0ZXIpLE8obnVsbCx6KX1jaGVja0hlYWRlcnMoTyl7aWYodGhpcy5oZWFkZXJzKXJldHVybntzaG91'@;
put 'bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6dGhpcy5oZWFkZXJzfTtjb25zdCB6PVAuZ2F0aGVySGVhZGVycyhPKTtyZXR1cm4gdGhpcy5oZWFkZXJzPXosdGhpcy5maWVsZEZvcm1hdHRlci5oZWFkZXJzPXosdGhpcy5zaG91bGRXcml0ZUhlYWRlcnM/e3Nob3VsZEZvcm1hdENvbHVtbnM6'@;
put 'IWcuZGVmYXVsdCh6LE8pLGhlYWRlcnM6en06e3Nob3VsZEZvcm1hdENvbHVtbnM6ITAsaGVhZGVyczpudWxsfX1nYXRoZXJDb2x1bW5zKE8pe2lmKG51bGw9PT10aGlzLmhlYWRlcnMpdGhyb3cgbmV3IEVycm9yKCJIZWFkZXJzIGlzIGN1cnJlbnRseSBudWxsIik7cmV0dXJuIEFycmF5Lmlz'@;
put 'QXJyYXkoTyk/UC5pc1Jvd0hhc2hBcnJheShPKT90aGlzLmhlYWRlcnMubWFwKCh6LE4pPT57Y29uc3QgTD1PW05dO3JldHVybiBMP0xbMV06IiJ9KTpQLmlzUm93QXJyYXkoTykmJiF0aGlzLnNob3VsZFdyaXRlSGVhZGVycz9POnRoaXMuaGVhZGVycy5tYXAoKHosTik9Pk9bTl0pOnRoaXMu'@;
put 'aGVhZGVycy5tYXAoej0+T1t6XSl9Y2FsbFRyYW5zZm9ybWVyKE8seil7cmV0dXJuIHRoaXMuX3Jvd1RyYW5zZm9ybT90aGlzLl9yb3dUcmFuc2Zvcm0oTyx6KTp6KG51bGwsTyl9Zm9ybWF0Q29sdW1ucyhPLHope2NvbnN0IE49Ty5tYXAoKEssVSk9PnRoaXMuZmllbGRGb3JtYXR0ZXIuZm9y'@;
put 'bWF0KEssVSx6KSkuam9pbih0aGlzLmZvcm1hdHRlck9wdGlvbnMuZGVsaW1pdGVyKSx7cm93Q291bnQ6TH09dGhpcztyZXR1cm4gdGhpcy5yb3dDb3VudCs9MSxMP1t0aGlzLmZvcm1hdHRlck9wdGlvbnMucm93RGVsaW1pdGVyLE5dLmpvaW4oIiIpOk59fXEuUm93Rm9ybWF0dGVyPVB9LDk5'@;
put 'NDc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuRmllbGRGb3JtYXR0ZXI9cS5Sb3dGb3JtYXR0ZXI9dm9pZCAwO3ZhciBJPV8oNzE4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIlJvd0Zvcm1hdHRl'@;
put 'ciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuUm93Rm9ybWF0dGVyfX0pO3ZhciB5PV8oNTE4Nik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIkZpZWxkRm9ybWF0dGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5GaWVsZEZvcm1hdHRl'@;
put 'cn19KX0sNzIwMTpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDg3NjQpLkJ1ZmZlcix5PXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihVLFcsWSxYKXt2b2lkIDA9PT1YJiYoWD1ZKSxPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'VSxYLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBXW1ldfX0pfTpmdW5jdGlvbihVLFcsWSxYKXt2b2lkIDA9PT1YJiYoWD1ZKSxVW1hdPVdbWV19KSxnPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihVLFcpe09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShVLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTpXfSl9OmZ1bmN0aW9uKFUsVyl7VS5kZWZhdWx0PVd9KSxCPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihVKXtpZihVJiZVLl9fZXNNb2R1bGUpcmV0dXJuIFU7dmFyIFc9e307aWYobnVs'@;
put 'bCE9VSlmb3IodmFyIFkgaW4gVSkiZGVmYXVsdCIhPT1ZJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVSxZKSYmeShXLFUsWSk7cmV0dXJuIGcoVyxVKSxXfSx3PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihVLFcpe2Zvcih2YXIgWSBpbiBVKSJkZWZh'@;
put 'dWx0IiE9PVkmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVyxZKSYmeShXLFUsWSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLndyaXRlVG9QYXRoPXEud3JpdGVUb1N0cmluZz1xLndyaXRlVG9CdWZmZXI9cS53cml0'@;
put 'ZVRvU3RyZWFtPXEud3JpdGU9cS5mb3JtYXQ9cS5Gb3JtYXR0ZXJPcHRpb25zPXEuQ3N2Rm9ybWF0dGVyU3RyZWFtPXZvaWQgMDtjb25zdCBQPV8oOTUzOSksRj1fKDI4MzApLE89QihfKDg2NDYpKSx6PV8oNjc2MyksTj1fKDMwNjIpO3coXyg0NjkyKSxxKTt2YXIgTD1fKDMwNjIpO09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShxLCJDc3ZGb3JtYXR0ZXJTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMLkNzdkZvcm1hdHRlclN0cmVhbX19KTt2YXIgSz1fKDY3NjMpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJGb3JtYXR0ZXJPcHRpb25zIix7ZW51bWVy'@;
put 'YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSy5Gb3JtYXR0ZXJPcHRpb25zfX0pLHEuZm9ybWF0PVU9Pm5ldyBOLkNzdkZvcm1hdHRlclN0cmVhbShuZXcgei5Gb3JtYXR0ZXJPcHRpb25zKFUpKSxxLndyaXRlPShVLFcpPT57Y29uc3QgWT1xLmZvcm1hdChXKSxYPVAucHJvbWlzaWZ5'@;
put 'KChlZSxKKT0+e1kud3JpdGUoZWUsdm9pZCAwLEopfSk7cmV0dXJuIFUucmVkdWNlKChlZSxKKT0+ZWUudGhlbigoKT0+WChKKSksUHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKCk9PlkuZW5kKCkpLmNhdGNoKGVlPT57WS5lbWl0KCJlcnJvciIsZWUpfSksWX0scS53cml0ZVRvU3RyZWFtPShV'@;
put 'LFcsWSk9PnEud3JpdGUoVyxZKS5waXBlKFUpLHEud3JpdGVUb0J1ZmZlcj0oVSxXPXt9KT0+e2NvbnN0IFk9W10sWD1uZXcgRi5Xcml0YWJsZSh7d3JpdGUoZWUsSixyZSl7WS5wdXNoKGVlKSxyZSgpfX0pO3JldHVybiBuZXcgUHJvbWlzZSgoZWUsSik9PntYLm9uKCJlcnJvciIsSikub24o'@;
put 'ImZpbmlzaCIsKCk9PmVlKEkuY29uY2F0KFkpKSkscS53cml0ZShVLFcpLnBpcGUoWCl9KX0scS53cml0ZVRvU3RyaW5nPShVLFcpPT5xLndyaXRlVG9CdWZmZXIoVSxXKS50aGVuKFk9PlkudG9TdHJpbmcoKSkscS53cml0ZVRvUGF0aD0oVSxXLFkpPT57Y29uc3QgWD1PLmNyZWF0ZVdyaXRl'@;
put 'U3RyZWFtKFUse2VuY29kaW5nOiJ1dGY4In0pO3JldHVybiBxLndyaXRlKFcsWSkucGlwZShYKX19LDQ2OTI6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmlzU3luY1RyYW5zZm9ybT12b2lkIDAscS5pc1N5'@;
put 'bmNUcmFuc2Zvcm09Xz0+MT09PV8ubGVuZ3RofSwyNjU2OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihPKXtyZXR1cm4gTyYmTy5fX2VzTW9kdWxlP086e2RlZmF1bHQ6T319O09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmRlY29kZVRva2VuPXEuaGFzVG9rZW5FeHBpcmVkPXEuaXNSZWZyZXNoVG9rZW5FeHBpcmluZz1xLmlzQWNjZXNzVG9rZW5FeHBpcmluZz12b2lkIDA7Y29uc3QgeT1JKF8oNjI0NSkpO2Z1bmN0aW9uIFAoTyx6KXtyZXR1cm4oMCx5'@;
put 'LmRlZmF1bHQpKE8pLmV4cC0obmV3IERhdGUpLnZhbHVlT2YoKS8xZTM8PXp9cS5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9ZnVuY3Rpb24gZyhPLHo9MzYwMCl7cmV0dXJuIU98fFAoTyx6KX0scS5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uIEIoTyx6PTMwKXtyZXR1cm4hT3x8UChP'@;
put 'LHopfSxxLmhhc1Rva2VuRXhwaXJlZD1mdW5jdGlvbiB3KE8pe3JldHVybiFPfHxQKE8sMCl9LHEuZGVjb2RlVG9rZW49ZnVuY3Rpb24gRihPKXtsZXQgejt0cnl7ej0oMCx5LmRlZmF1bHQpKE8pfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCB0b2tlbiBzdXBwbGllZC4iKX1yZXR1'@;
put 'cm4gen19LDY3OTk6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAse2VudW1lcmFibGU6'@;
put 'ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSl9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLHk9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90'@;
put 'b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkoXygyNjU2KSxxKX0sMzI1OToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pLHEucHJlZml4TWVzc2FnZT12b2lkIDAscS5wcmVmaXhNZXNzYWdlPShJLHkpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBJKWlmKEkuaGFzT3duUHJvcGVydHkoIm1lc3NhZ2UiKSlJLm1lc3NhZ2U9eStJLm1lc3NhZ2U7ZWxzZXtpZighSS5oYXNPd25Qcm9wZXJ0eSgi'@;
put 'Ym9keSIpKXJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSSkse21lc3NhZ2U6eX0pO2lmKCJvYmplY3QiPT10eXBlb2YgSS5ib2R5JiYoSS5tZXNzYWdlPUkuYm9keS5tZXNzYWdlP3krSS5ib2R5Lm1lc3NhZ2U6eSksInN0cmluZyI9PXR5cGVvZiBJLmJvZHkpe2xldCBn'@;
put 'O3RyeXtnPUpTT04ucGFyc2UoSS5ib2R5KX1jYXRjaHtyZXR1cm4gSS5tZXNzYWdlPXksSX1yZXR1cm4gZy5tZXNzYWdlPWcubWVzc2FnZT95K2cubWVzc2FnZTp5LEkuYm9keT1nLEl9fXJldHVybiJzdHJpbmciPT10eXBlb2YgSSYmKEk9eStJKSxJfX0sOTc3ODpmdW5jdGlvbih1ZSxxLF8p'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3'@;
put 'XX19KX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSkseT10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIs'@;
put 'dykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseShfKDMyNTkpLHEpLHkoXygxMDY0KSxxKX0sMTA2NDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEw'@;
put 'fSkscS5TZXJ2ZXJUeXBlRXJyb3I9dm9pZCAwO2NvbnN0IEk9XygzOTAwKTtjbGFzcyB5IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoQj1bXSl7bGV0IHc9KEI9Wy4uLm5ldyBTZXQoQildKS5sZW5ndGg/Qi5qb2luKCIsICIpLnRyaW0oKTpbSS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsSS5TZXJ2'@;
put 'ZXJUeXBlLlNhczksSS5TZXJ2ZXJUeXBlLlNhc2pzXS5qb2luKCIsICIpLnRyaW0oKTt3PXcucmVwbGFjZSgvLFxzKFteLF0qKSQvLCIgYW5kICQxIiksc3VwZXIoYEludmFsaWQgc2VydmVyIHR5cGU6IHZhbGlkIG9wdGlvbiR7MSE9PUIubGVuZ3RoPyJzIjoiIn0gJHsxIT09Qi5sZW5ndGg/'@;
put 'ImFyZSI6ImlzIn0gJHt3fWApLHRoaXMubmFtZT0iU2VydmVyVHlwZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fXEuU2VydmVyVHlwZUVycm9yPXl9LDM5MDY6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3'@;
put 'YWl0ZXJ8fGZ1bmN0aW9uKE8seixOLEwpe3JldHVybiBuZXcoTnx8KE49UHJvbWlzZSkpKGZ1bmN0aW9uKFUsVyl7ZnVuY3Rpb24gWShKKXt0cnl7ZWUoTC5uZXh0KEopKX1jYXRjaChyZSl7VyhyZSl9fWZ1bmN0aW9uIFgoSil7dHJ5e2VlKEwudGhyb3coSikpfWNhdGNoKHJlKXtXKHJlKX19'@;
put 'ZnVuY3Rpb24gZWUoSil7Si5kb25lP1UoSi52YWx1ZSk6ZnVuY3Rpb24gSyhVKXtyZXR1cm4gVSBpbnN0YW5jZW9mIE4/VTpuZXcgTihmdW5jdGlvbihXKXtXKFUpfSl9KEoudmFsdWUpLnRoZW4oWSxYKX1lZSgoTD1MLmFwcGx5KE8senx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnVwZGF0ZUNzdj1xLmNyZWF0ZUNzdj1xLnJlYWRDc3Y9dm9pZCAwO2NvbnN0IHk9XygxNTU5KSxnPV8oNzIwMSk7cS5yZWFkQ3N2PU89Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkKDAs'@;
put 'eS5yZWFkRmlsZSkoTykpLnNwbGl0KCJcbiIpLmZpbHRlcihOPT5OLmxlbmd0aCkubWFwKE49Pk4uc3BsaXQoIiwiKSl9KSxxLmNyZWF0ZUNzdj0oTyx6LE4pPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEw9eWllbGQoMCxnLndyaXRlVG9TdHJpbmcpKHose2hl'@;
put 'YWRlcnM6Tn0pO3lpZWxkKDAseS5jcmVhdGVGaWxlKShPLEwpfSkscS51cGRhdGVDc3Y9KE8seixOLEwpPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9eWllbGQgRihPLHosTixMKTtpZihMKXtjb25zdCBVPTA9PT1LLmxlbmd0aD8xOksubGVuZ3RoLFc9Ti5m'@;
put 'aW5kSW5kZXgoWT0+WT09PUwpO1c+LTE/ei5zcGxpY2UoVywwLFUpOihOLnNwbGljZSgwLDAsTCksei5zcGxpY2UoMCwwLFUpKX1LLnB1c2goeikseWllbGQoMCxxLmNyZWF0ZUNzdikoTyxLLE4pfSk7Y29uc3QgRj0oTyx6LE4sTCk9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q'@;
put 'KCl7aWYoei5sZW5ndGghPT1OLmxlbmd0aCl7aWYoei5sZW5ndGg+Ti5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7aWYoIUx8fHoubGVuZ3RoKzEhPT1OLmxlbmd0aCl0aHJvdyBuZXcgRXJy'@;
put 'b3IoImEgcmVjb3JkIGNhbiBub3QgaGF2ZSBsZXNzIGZpZWxkcyB0aGFuIHByb3ZpZGVkIGNvbHVtbnMiKX1lbHNlIGlmKEwmJk4uaW5jbHVkZXMoTCkpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbW9yZSBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIik7Y29u'@;
put 'c3QgSz15aWVsZCgwLHEucmVhZENzdikoTykuY2F0Y2goVz0+W10pLFU9S1swXTtpZihVKXtpZihOLmxlbmd0aD5VLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBncmVhdGVyIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtp'@;
put 'ZihOLmxlbmd0aDxVLmxlbmd0aCl7aWYoIUx8fE4ubGVuZ3RoKzEhPT1VLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRlZCBjb2x1bW5zIGFyZSBsZXNzIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtjb25zdCBXPVUuZmluZEluZGV4KFg9Plg9PT1M'@;
put 'KSxZPVsuLi5OXTtpZighKFc+LTEpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYoWS5zcGxpY2UoVywwLEwpLEpTT04uc3RyaW5naWZ5KE4pIT09SlNPTi5zdHJpbmdpZnkoWSkpdGhyb3cgbmV3IEVycm9yKCJw'@;
put 'cm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKX1lbHNle2lmKEpTT04uc3RyaW5naWZ5KE4pIT09SlNPTi5zdHJpbmdpZnkoVSkpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKTtp'@;
put 'ZihMJiYhTi5pbmNsdWRlcyhMKSl0aHJvdyBuZXcgRXJyb3IoImNhbiBub3QgYWRkIG5ldyBpZCB0byBleGlzdGluZyBkYXRhIil9fXJldHVybiBLfSl9LDE1NTk6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3Qu'@;
put 'Y3JlYXRlP2Z1bmN0aW9uKG0sQSxvZSx0ZSl7dm9pZCAwPT09dGUmJih0ZT1vZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG0sdGUse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEFbb2VdfX0pfTpmdW5jdGlvbihtLEEsb2UsdGUpe3ZvaWQgMD09PXRlJiYodGU9b2UpLG1b'@;
put 'dGVdPUFbb2VdfSkseT10aGlzJiZ0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24obSxBKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6QX0pfTpmdW5jdGlvbihtLEEpe20uZGVmYXVsdD1BfSksZz10'@;
put 'aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24obSl7aWYobSYmbS5fX2VzTW9kdWxlKXJldHVybiBtO3ZhciBBPXt9O2lmKG51bGwhPW0pZm9yKHZhciBvZSBpbiBtKSJkZWZhdWx0IiE9PW9lJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobSxvZSkmJkkoQSxt'@;
put 'LG9lKTtyZXR1cm4geShBLG0pLEF9LEI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKG0sQSxvZSx0ZSl7cmV0dXJuIG5ldyhvZXx8KG9lPVByb21pc2UpKShmdW5jdGlvbih3ZSxVZSl7ZnVuY3Rpb24gSmUodmUpe3RyeXtNZSh0ZS5uZXh0KHZlKSl9Y2F0Y2goWGUpe1VlKFhlKX19'@;
put 'ZnVuY3Rpb24gYXQodmUpe3RyeXtNZSh0ZS50aHJvdyh2ZSkpfWNhdGNoKFhlKXtVZShYZSl9fWZ1bmN0aW9uIE1lKHZlKXt2ZS5kb25lP3dlKHZlLnZhbHVlKTpmdW5jdGlvbiBzZSh3ZSl7cmV0dXJuIHdlIGluc3RhbmNlb2Ygb2U/d2U6bmV3IG9lKGZ1bmN0aW9uKFVlKXtVZSh3ZSl9KX0o'@;
put 'dmUudmFsdWUpLnRoZW4oSmUsYXQpfU1lKCh0ZT10ZS5hcHBseShtLEF8fFtdKSkubmV4dCgpKX0pfSx3PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihtKXtyZXR1cm4gbSYmbS5fX2VzTW9kdWxlP206e2RlZmF1bHQ6bX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJf'@;
put 'X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmdldExpbmVFbmRpbmc9cS5pc1Rlc3RGaWxlPXEudGVzdEZpbGVSZWdFeHA9cS5jcmVhdGVSZWFkU3RyZWFtPXEuY3JlYXRlV3JpdGVTdHJlYW09cS5nZXRSZWFsUGF0aD1xLmJhc2U2NEVuY29kZUZpbGU9cS5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9'@;
put 'cS5wYXRoU2VwRXNjYXBlZD1xLmNvcHk9cS5tb3ZlRmlsZT1xLmdldFJlbGF0aXZlUGF0aD1xLnVuaWZ5RmlsZVBhdGg9cS5kZWxldGVGb2xkZXI9cS5kZWxldGVGaWxlPXEuY3JlYXRlRmlsZT1xLmNyZWF0ZUZvbGRlcj1xLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1xLmxpc3RT'@;
put 'dWJGb2xkZXJzSW5Gb2xkZXI9cS5saXN0U2FzRmlsZXNJbkZvbGRlcj1xLmxpc3RJbmlGaWxlc0luRm9sZGVyPXEubGlzdEZpbGVzSW5Gb2xkZXI9cS5yZWFkRmlsZUJpbmFyeT1xLnJlYWRGaWxlPXEuaXNGb2xkZXI9cS5mb2xkZXJFeGlzdHM9cS5maWxlRXhpc3RzPXZvaWQgMDtjb25zdCBQ'@;
put 'PXcoXyg1Njc0KSksRj13KF8oMjUyMCkpLE89Xyg2MjY2KSx6PWcoXygyOTc1KSksTj1fKDM5MDApO2Z1bmN0aW9uIEsobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sUC5kZWZhdWx0LmNvbnN0YW50'@;
put 'cy5GX09LKS50aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfWZ1bmN0aW9uIFkobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSl9KX1mdW5jdGlvbiBYKG0pe3JldHVybiBCKHRoaXMsdm9pZCAw'@;
put 'LHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oQT0+QS5maWx0ZXIob2U9PiFvZS5pc0RpcmVjdG9yeSgpKS5tYXAob2U9Pm9lLm5hbWUpKX0pfWZ1bmN0aW9uIGllKG0sQT0hMCxvZT1bXSl7cmV0'@;
put 'dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZGRpcihtLHt3aXRoRmlsZVR5cGVzOiEwfSkudGhlbih0ZT0+Qih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoQSYmdGUuZmlsdGVyKHdlPT53ZS5pc0RpcmVj'@;
put 'dG9yeSgpKS5sZW5ndGgpe2xldCB3ZT1bXTtyZXR1cm4geWllbGQoMCxPLmFzeW5jRm9yRWFjaCkodGUuZmlsdGVyKFVlPT5VZS5pc0RpcmVjdG9yeSgpKSxVZT0+Qih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSmU9VWUubmFtZTtpZighb2UuaW5jbHVkZXMoSmUpKXtj'@;
put 'b25zdCBhdD1GLmRlZmF1bHQuam9pbihtLEplKTt3ZT1bLi4ud2UsLi4uKHlpZWxkIGllKGF0LEEsb2UpKS5tYXAoTWU9PkYuZGVmYXVsdC5qb2luKEplLE1lKSldfX0pKSxbLi4udGUuZmlsdGVyKFVlPT4hVWUuaXNEaXJlY3RvcnkoKSkubWFwKFVlPT5VZS5uYW1lKSwuLi53ZV19cmV0dXJu'@;
put 'IHRlLm1hcChzZT0+c2UubmFtZSl9KSl9KX1mdW5jdGlvbiBsZShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5ta2RpcihtLHtyZWN1cnNpdmU6ITB9KX0pfWZ1bmN0aW9uIFNlKG0sQT1GLmRlZmF1bHQuc2VwLG9l'@;
put 'PSIvIil7Y29uc3QgdGU9e3VuaXg6Ii8iLHdpbjoiXFwifTtsZXQgc2U9T2JqZWN0LmtleXModGUpLmZpbmQod2U9PnRlW3dlXT09PUEpO2lmKHNlKXtjb25zdCB3ZT10ZVtPYmplY3Qua2V5cyh0ZSkuZmluZChVZT0+VWUhPT1zZSldO3JldHVybiBzZT10ZVtzZV0sbS5zcGxpdCh3ZSkuam9p'@;
put 'bihzZSl9cmV0dXJuIG0uc3BsaXQob2UpLmpvaW4oQSl9cS5maWxlRXhpc3RzPWZ1bmN0aW9uIEwobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKG0sUC5kZWZhdWx0LmNvbnN0YW50cy5GX09LKS50aGVu'@;
put 'KCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pfSxxLmZvbGRlckV4aXN0cz1LLHEuaXNGb2xkZXI9ZnVuY3Rpb24gVShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5sc3RhdChtKS50aGVuKEE9PkEuaXNEaXJlY3Rvcnko'@;
put 'KSkuY2F0Y2goKCk9PiExKX0pfSxxLnJlYWRGaWxlPWZ1bmN0aW9uIFcobSxBPSJ1dGY4Iil7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSxBKX0pfSxxLnJlYWRGaWxlQmluYXJ5PVkscS5saXN0Rmls'@;
put 'ZXNJbkZvbGRlcj1YLHEubGlzdEluaUZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24gZWUobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBYKG0pKS5maWx0ZXIoQT0+QS5lbmRzV2l0aCgiLmluaSIpKX0pfSxxLmxpc3RTYXNGaWxlc0luRm9sZGVy'@;
put 'PWZ1bmN0aW9uIEoobSxBPSExLG9lPVtdKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGllKG0sQSxvZSkpLmZpbHRlcih3ZT0+d2UuZW5kc1dpdGgoIi5zYXMiKSl9KX0scS5saXN0U3ViRm9sZGVyc0luRm9sZGVyPWZ1bmN0aW9uIHJlKG0p'@;
put 'e3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oQT0+QS5maWx0ZXIob2U9Pm9lLmlzRGlyZWN0b3J5KCkpLm1hcChvZT0+b2UubmFtZSkpfSl9LHEubGlzdEZp'@;
put 'bGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPWllLHEuY3JlYXRlRm9sZGVyPWxlLHEuY3JlYXRlRmlsZT1mdW5jdGlvbiBtZShtLEEsb2Upe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZigobT1TZShtKSkuc3BsaXQoRi5kZWZhdWx0LnNlcCkubGVuZ3RoPjEpe2xl'@;
put 'dCB0ZT1tLnNwbGl0KEYuZGVmYXVsdC5zZXApO3RlLnBvcCgpO2NvbnN0IHNlPXRlLmpvaW4oRi5kZWZhdWx0LnNlcCk7KHlpZWxkIEsoc2UpKXx8KHlpZWxkIGxlKHNlKSl9cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy53cml0ZUZpbGUobSxBLG9lKX0pfSxxLmRlbGV0ZUZpbGU9ZnVuY3Rp'@;
put 'b24gX2UobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucmVtb3ZlKG0pfSl9LHEuZGVsZXRlRm9sZGVyPWZ1bmN0aW9uIFRlKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0'@;
put 'LnJtKG0se3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pfSl9LHEudW5pZnlGaWxlUGF0aD1TZSxxLmdldFJlbGF0aXZlUGF0aD1mdW5jdGlvbiB6ZShtLEEpe2NvbnN0IG9lPW0uc3BsaXQoRi5kZWZhdWx0LnNlcCksdGU9QS5zcGxpdChGLmRlZmF1bHQuc2VwKTtsZXQgc2U9W10sd2U9W107b2Uu'@;
put 'Zm9yRWFjaCgodmUsWGUpPT57dm9pZCAwIT09dGVbWGVdJiZvZVtYZV09PT10ZVtYZV0/c2UucHVzaCh2ZSk6dmUmJndlLnB1c2godmUpfSk7Y29uc3QgVWU9c2Uuam9pbihGLmRlZmF1bHQuc2VwKSxKZT1uZXcgUmVnRXhwKGBeJHtGLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwi'@;
put 'KX1gKSxhdD1uZXcgUmVnRXhwKGAke0YuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpfSRgKTtyZXR1cm4od2UubGVuZ3RoP2AuLiR7Ri5kZWZhdWx0LnNlcH1gLnJlcGVhdCh3ZS5sZW5ndGgpOmAuJHtGLmRlZmF1bHQuc2VwfWApK0EucmVwbGFjZShVZSwiIikucmVwbGFjZShK'@;
put 'ZSwiIikucmVwbGFjZShhdCwiIil9LHEubW92ZUZpbGU9ZnVuY3Rpb24gVihtLEEpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlbmFtZShtLEEpfSl9LHEuY29weT1mdW5jdGlvbiBwKG0sQSl7cmV0dXJuIEIodGhp'@;
put 'cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQuY29weShtLEEpfSl9LHEucGF0aFNlcEVzY2FwZWQ9Ri5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIikscS5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9ZnVuY3Rpb24gYihtKXtyZXR1cm4gQih0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFkobSkudGhlbihBPT57bGV0IG9lPUYuZGVmYXVsdC5leHRuYW1lKG0pLnN1YnN0cigxKXx8InBuZyI7cmV0dXJuInN2ZyI9PT1vZSYmKG9lPSJzdmcreG1sIiksImRhdGE6aW1hZ2UvIitvZSsiO2Jhc2U2NCwiK0EudG9TdHJpbmcoImJh'@;
put 'c2U2NCIpfSl9KX0scS5iYXNlNjRFbmNvZGVGaWxlPWZ1bmN0aW9uIHgobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMucmVhZEZpbGUobSx7ZW5jb2Rpbmc6ImJhc2U2NCJ9KX0pfSxxLmdldFJlYWxQYXRoPWZ1bmN0'@;
put 'aW9uIEMobSl7cmV0dXJuIFAuZGVmYXVsdC5yZWFscGF0aFN5bmMobSl9LHEuY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24gVChtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIHouZmlsZUV4aXN0cyhtKSl8fCh5aWVsZCB6LmNyZWF0ZUZp'@;
put 'bGUobSwiIikpLFAuZGVmYXVsdC5jcmVhdGVXcml0ZVN0cmVhbShtLHtmbGFnczoiYSJ9KX0pfSxxLmNyZWF0ZVJlYWRTdHJlYW09bT0+Qih2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LmNyZWF0ZVJlYWRTdHJlYW0obSl9KSxxLnRlc3RGaWxlUmVn'@;
put 'RXhwPS9cLnRlc3RcLihcZCtcLik/c2FzJC9pLHEuaXNUZXN0RmlsZT1tPT5xLnRlc3RGaWxlUmVnRXhwLnRlc3QobSkscS5nZXRMaW5lRW5kaW5nPW09Pm5ldyBSZWdFeHAoTi5MaW5lRW5kaW5ncy5DUkxGKS50ZXN0KG0pP04uTGluZUVuZGluZ3MuQ1JMRjpOLkxpbmVFbmRpbmdzLkxGfSw1'@;
put 'NjI2OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9'@;
put 'KSxxLmdldEFic29sdXRlUGF0aD12b2lkIDA7Y29uc3QgeT1JKF8oMjUyMCkpLGc9SShfKDc0MzUpKTtxLmdldEFic29sdXRlUGF0aD0odyxQKT0+eS5kZWZhdWx0LmlzQWJzb2x1dGUodyl8fC9efi8uZXhlYyh3KT95LmRlZmF1bHQubm9ybWFsaXplKHcucmVwbGFjZSgvXn4vLGcuZGVmYXVs'@;
put 'dC5ob21lZGlyKCkpKTp5LmRlZmF1bHQuam9pbihQLHcpfSwyOTc1OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbih3LFAsRixPKXt2b2lkIDA9PT1PJiYoTz1GKSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkodyxPLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfX0pfTpmdW5jdGlvbih3LFAsRixPKXt2b2lkIDA9PT1PJiYoTz1GKSx3W09dPVBbRl19KSx5PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbih3LFApe2Zvcih2YXIgRiBpbiB3'@;
put 'KSJkZWZhdWx0IiE9PUYmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUCxGKSYmSShQLHcsRil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnJlYWRDc3Y9cS5jcmVhdGVDc3Y9cS51cGRhdGVDc3Y9cS5nZXRMaW5lRW5k'@;
put 'aW5nPXEudGVzdEZpbGVSZWdFeHA9cS5pc1Rlc3RGaWxlPXEuZ2V0UmVhbFBhdGg9cS5iYXNlNjRFbmNvZGVGaWxlPXEuYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPXEuY29weT1xLnBhdGhTZXBFc2NhcGVkPXEubW92ZUZpbGU9cS51bmlmeUZpbGVQYXRoPXEuZ2V0UmVsYXRpdmVQYXRoPXEuZGVs'@;
put 'ZXRlRm9sZGVyPXEuZGVsZXRlRmlsZT1xLmNyZWF0ZVdyaXRlU3RyZWFtPXEuY3JlYXRlUmVhZFN0cmVhbT1xLmNyZWF0ZUZvbGRlcj1xLmNyZWF0ZUZpbGU9cS5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9cS5saXN0U3ViRm9sZGVyc0luRm9sZGVyPXEubGlzdFNhc0ZpbGVzSW5G'@;
put 'b2xkZXI9cS5saXN0SW5pRmlsZXNJbkZvbGRlcj1xLmxpc3RGaWxlc0luRm9sZGVyPXEucmVhZEZpbGVCaW5hcnk9cS5yZWFkRmlsZT1xLmlzRm9sZGVyPXEuZm9sZGVyRXhpc3RzPXEuZmlsZUV4aXN0cz12b2lkIDA7dmFyIGc9XygxNTU5KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiZmls'@;
put 'ZUV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZmlsZUV4aXN0c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiZm9sZGVyRXhpc3RzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5mb2xkZXJFeGlzdHN9fSksT2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KHEsImlzRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5pc0ZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwicmVhZEZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnJlYWRGaWxlfX0pLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShxLCJyZWFkRmlsZUJpbmFyeSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcucmVhZEZpbGVCaW5hcnl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImxpc3RGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gZy5saXN0RmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwibGlzdEluaUZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmxpc3RJbmlGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShxLCJsaXN0U2FzRmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubGlzdFNhc0ZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImxpc3RTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv'@;
put 'bigpe3JldHVybiBnLmxpc3RTdWJGb2xkZXJzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVy'@;
put 'fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJjcmVhdGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5jcmVhdGVGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJjcmVhdGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBnLmNyZWF0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiY3JlYXRlUmVhZFN0cmVhbSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuY3JlYXRlUmVhZFN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiY3JlYXRlV3JpdGVTdHJl'@;
put 'YW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmNyZWF0ZVdyaXRlU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJkZWxldGVGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5kZWxldGVGaWxlfX0pLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShxLCJkZWxldGVGb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmRlbGV0ZUZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiZ2V0UmVsYXRpdmVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5n'@;
put 'ZXRSZWxhdGl2ZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsInVuaWZ5RmlsZVBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnVuaWZ5RmlsZVBhdGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIm1vdmVGaWxlIix7ZW51bWVyYWJsZTohMCxn'@;
put 'ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5tb3ZlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwicGF0aFNlcEVzY2FwZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnBhdGhTZXBFc2NhcGVkfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJjb3B5Iix7'@;
put 'ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5jb3B5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJiYXNlNjRFbmNvZGVJbWFnZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmJhc2U2NEVuY29kZUltYWdlRmlsZX19KSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkocSwiYmFzZTY0RW5jb2RlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuYmFzZTY0RW5jb2RlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiZ2V0UmVhbFBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBnLmdldFJlYWxQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJpc1Rlc3RGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5pc1Rlc3RGaWxlfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJ0ZXN0RmlsZVJlZ0V4cCIse2VudW1lcmFibGU6'@;
put 'ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcudGVzdEZpbGVSZWdFeHB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImdldExpbmVFbmRpbmciLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmdldExpbmVFbmRpbmd9fSk7dmFyIEI9XygzOTA2KTtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkocSwidXBkYXRlQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi51cGRhdGVDc3Z9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImNyZWF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIuY3JlYXRlQ3N2fX0p'@;
put 'LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJyZWFkQ3N2Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQi5yZWFkQ3N2fX0pLHkoXyg1NjI2KSxxKX0sMjc3NzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIs'@;
put 'e3ZhbHVlOiEwfSkscS5uZXdMaW5lPXEuY2FwaXRhbGl6ZUZpcnN0Q2hhcj1xLnNhbml0aXplU3BlY2lhbENoYXJzPXEucGFkV2l0aE51bWJlcj12b2lkIDA7dmFyIEk9Xyg1MzA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwicGFkV2l0aE51bWJlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIEkucGFkV2l0aE51bWJlcn19KTt2YXIgeT1fKDkyNzUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJzYW5pdGl6ZVNwZWNpYWxDaGFycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuc2FuaXRpemVTcGVjaWFsQ2hhcnN9fSksT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KHEsImNhcGl0YWxpemVGaXJzdENoYXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5LmNhcGl0YWxpemVGaXJzdENoYXJ9fSk7dmFyIGc9XygxNjI4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwibmV3TGluZSIse2VudW1lcmFibGU6ITAs'@;
put 'Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubmV3TGluZX19KX0sNTMwNjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEucGFkV2l0aE51bWJlcj12b2lkIDAscS5wYWRXaXRoTnVtYmVyPShJLHk9MCk9Pkk+OT9J'@;
put 'OmAke3l9JHtJfWB9LDE2Mjg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5uZXdMaW5lPXZvaWQgMCxxLm5ld0xpbmU9KCk9PiJ3aW4zMiI9PT1JLnBsYXRmb3JtPyJcXHJcXG4i'@;
put 'OiJcXG4ifSw5Mjc1Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5jYXBpdGFsaXplRmlyc3RDaGFyPXEuc2FuaXRpemVTcGVjaWFsQ2hhcnM9dm9pZCAwLHEuc2FuaXRpemVTcGVjaWFsQ2hhcnM9eT0+eS5y'@;
put 'ZXBsYWNlKC9bXHUwMDFiXHUwMDliXVtbKCkjOz9dKig/OlswLTldezEsNH0oPzo7WzAtOV17MCw0fSkqKT9bMC05QS1PUlpjZi1ucXJ5PT48XS9nLCIiKSxxLmNhcGl0YWxpemVGaXJzdENoYXI9eT0+eS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt5LnNsaWNlKDEpfSw2NDY3OmZ1bmN0aW9u'@;
put 'KHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmlzU3BlY2lh'@;
put 'bE1pc3Npbmc9cS5jaG9pY2VWYWxpZGF0b3I9cS5jb25maXJtYXRpb25WYWxpZGF0b3I9cS51cmxWYWxpZGF0b3I9dm9pZCAwO2NvbnN0IHk9SShfKDQ4MSkpO3EudXJsVmFsaWRhdG9yPShGLE8pPT4hIXkuZGVmYXVsdC5pc0h0dHBVcmkoRil8fCEheS5kZWZhdWx0LmlzSHR0cHNVcmkoRil8'@;
put 'fCIiPT09Rnx8TyxxLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1GPT4hMD09PUZ8fCExPT09RixxLmNob2ljZVZhbGlkYXRvcj0oRixPLHopPT5GPjAmJkY8PU98fHoscS5pc1NwZWNpYWxNaXNzaW5nPUY9Pigic3RyaW5nIiE9dHlwZW9mIEZ8fCFGLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4'@;
put 'cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoRil9LDc3NTc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZ2VuZXJhdGVUaW1lc3RhbXA9cS50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPXEu'@;
put 'Y29udmVydFNlY29uZHNUb0htcz12b2lkIDA7dmFyIEk9XygxMzAyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiY29udmVydFNlY29uZHNUb0htcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY29udmVydFNlY29uZHNUb0htc319KSxPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkocSwidGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiZ2VuZXJhdGVUaW1lc3RhbXAiLHtlbnVtZXJhYmxlOiEwLGdl'@;
put 'dDpmdW5jdGlvbigpe3JldHVybiBJLmdlbmVyYXRlVGltZXN0YW1wfX0pfSwxMzAyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmNvbnZlcnRTZWNvbmRzVG9IbXM9cS5nZW5lcmF0ZVRpbWVzdGFtcD1x'@;
put 'LnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9dm9pZCAwO2NvbnN0IEk9XygyNzc3KTtxLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1M9KHc9RGF0ZS5ub3coKSk9Pntjb25zdCBQPW5ldyBEYXRlKHcpO3JldHVybltQLmdldEZ1bGxZZWFyKCksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldE1v'@;
put 'bnRoKCkrMSksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldERhdGUoKSldLmpvaW4oIi8iKSsiICIrWygwLEkucGFkV2l0aE51bWJlcikoUC5nZXRIb3VycygpKSwoMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0TWludXRlcygpKSwoMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0U2Vjb25kcygpKV0u'@;
put 'am9pbigiOiIpfSxxLmdlbmVyYXRlVGltZXN0YW1wPSh3PSIiLFApPT57Y29uc3QgRj1uZXcgRGF0ZTtsZXQgTz1bRi5nZXRVVENGdWxsWWVhcigpLEYuZ2V0VVRDTW9udGgoKSsxLEYuZ2V0VVRDRGF0ZSgpLEYuZ2V0VVRDSG91cnMoKSxGLmdldFVUQ01pbnV0ZXMoKSxGLmdldFVUQ1NlY29u'@;
put 'ZHMoKV07cmV0dXJuIE89Ty5tYXAoej0+KDAsSS5wYWRXaXRoTnVtYmVyKSh6KSksUCYmdyYmUDxPLmxlbmd0aCYmUD49MCYmTy5zcGxpY2UoUCwwLHcpLE89Ty5qb2luKFA/IiI6dyksT30scS5jb252ZXJ0U2Vjb25kc1RvSG1zPXc9PntpZighdylyZXR1cm4iMCBzZWNvbmQiO2NvbnN0IFA9'@;
put 'TWF0aC5mbG9vcih3LzYwKSxGPU1hdGguZmxvb3IoUC82MCksTz1QJTYwLHo9dyU2MDtsZXQgTj0iIjtyZXR1cm4gRj4wJiYoTj1GKyIgaG91ciIrKEY+MT8icyI6IiIpKSxPPjAmJihOKz1gJHtOPyIsICI6IiJ9JHtPfSBtaW51dGUke08+MT8icyI6IiJ9YCksej4wJiYoTis9YCR7Tj8iLCAi'@;
put 'OiIifSR7en0gc2Vjb25kJHt6PjE/InMiOiIifWApLE59fSw4MjM5Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5Db25maWdUeXBlcz12b2lkIDAsKEk9cS5Db25maWdUeXBlc3x8KHEuQ29uZmln'@;
put 'VHlwZXM9e30pKS5CdWlsZD0iYnVpbGRDb25maWciLEkuU2VydmljZT0ic2VydmljZUNvbmZpZyIsSS5Kb2I9ImpvYkNvbmZpZyIsSS5UZXN0PSJ0ZXN0Q29uZmlnIixJLkRvYz0iZG9jQ29uZmlnIixJLkRlcGxveT0iZGVwbG95Q29uZmlnIixJLlN0cmVhbT0ic3RyZWFtQ29uZmlnIixJLkF1'@;
put 'dGg9ImF1dGhDb25maWcifSwyNDI3Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE4OToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pfSwzNjkyOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ3Mjk6KHVlLHEpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxx'@;
put 'LkxpbmVFbmRpbmdzPXZvaWQgMCwoST1xLkxpbmVFbmRpbmdzfHwocS5MaW5lRW5kaW5ncz17fSkpLkNSTEY9IlxyXG4iLEkuTEY9IlxuIn0sNjkzOToodWUscSk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEu'@;
put 'TWVtYmVyVHlwZT12b2lkIDAsKEk9cS5NZW1iZXJUeXBlfHwocS5NZW1iZXJUeXBlPXt9KSkuc2VydmljZT0ic2VydmljZSIsSS5maWxlPSJmaWxlIixJLmZvbGRlcj0iZm9sZGVyIn0sMzMyNzoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pfSw1MTY1Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDM5MDA6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChP'@;
put 'YmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSl9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3'@;
put 'XX0pLHk9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUi'@;
put 'LHt2YWx1ZTohMH0pLHkoXyg4MjM5KSxxKSx5KF8oMjQyNykscSkseShfKDE4OSkscSkseShfKDM2OTIpLHEpLHkoXyg2OTM5KSxxKSx5KF8oMzMyNykscSkseShfKDUxNjUpLHEpLHkoXyg0MDY5KSxxKSx5KF8oODkzMikscSkseShfKDQpLHEpLHkoXygyMDE1KSxxKSx5KF8oODUxNSkscSks'@;
put 'eShfKDUzMTMpLHEpLHkoXyg4OTc5KSxxKSx5KF8oNDcyOSkscSl9LDQwNjk6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmlzTWFjcm9WYXJzPXZvaWQgMCxxLmlzTWFjcm9WYXJzPUk9PkkmJiJvYmplY3Qi'@;
put 'PT10eXBlb2YgSS5tYWNyb1ZhcnMmJiFBcnJheS5pc0FycmF5KEkubWFjcm9WYXJzKX0sODkzMjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5TQVNKc0ZpbGVUeXBlPXZvaWQgMCwoST1xLlNBU0pzRmlsZVR5cGV8fChxLlNBU0pzRmlsZVR5cGU9e30pKS5zZXJ2aWNlPSJTZXJ2aWNlIixJLmpvYj0iSm9iIixJLnRlc3Q9IlRlc3QiLEkuZmlsZT0iRmlsZSJ9'@;
put 'LDIwMTU6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNToodWUscSk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuU2Vy'@;
put 'dmVyVHlwZT12b2lkIDAsKEk9cS5TZXJ2ZXJUeXBlfHwocS5TZXJ2ZXJUeXBlPXt9KSkuU2FzVml5YT0iU0FTVklZQSIsSS5TYXM5PSJTQVM5IixJLlNhc2pzPSJTQVNKUyJ9LDUzMTM6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7'@;
put 'dmFsdWU6ITB9KX0sODk3OToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5UYXJnZXQ9dm9pZCAwO2NvbnN0IEk9Xyg4MjM5KSx5PV8oODUxNSksZz1fKDY3ODEpO3EuVGFyZ2V0PWNsYXNzIEJ7Y29uc3Ry'@;
put 'dWN0b3IoUCxGPXt9KXt0aGlzLl9zZXJ2ZXJUeXBlPXkuU2VydmVyVHlwZS5TYXNWaXlhLHRoaXMuZ2V0Q29uZmlnPShPLHopPT5PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5fY29uZmlnW09dfHx7fSkseltPXSk7dHJ5e2lmKCFQKXRocm93IG5ldyBFcnJvcigiSW52YWxp'@;
put 'ZCB0YXJnZXQ6IElucHV0IEpTT04gaXMgbnVsbCBvciB1bmRlZmluZWQuIik7dGhpcy5fY29uZmlnPUYsdGhpcy5fbmFtZT0oMCxnLnZhbGlkYXRlVGFyZ2V0TmFtZSkoUC5uYW1lKSx0aGlzLl9zZXJ2ZXJVcmw9KDAsZy52YWxpZGF0ZVNlcnZlclVybCkoUC5zZXJ2ZXJVcmwpLHRoaXMuX3Nl'@;
put 'cnZlclR5cGU9KDAsZy52YWxpZGF0ZVNlcnZlclR5cGUpKFAuc2VydmVyVHlwZSksdGhpcy5faHR0cHNBZ2VudE9wdGlvbnM9KDAsZy52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zKShQLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLl9hcHBMb2M9KDAsZy52YWxpZGF0ZUFwcExvYykoUC5hcHBM'@;
put 'b2MpLHRoaXMuX2NvbnRleHROYW1lPSgwLGcudmFsaWRhdGVDb250ZXh0TmFtZSkoUC5jb250ZXh0TmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSx0aGlzLl9zZXJ2ZXJOYW1lPSgwLGcudmFsaWRhdGVTZXJ2ZXJOYW1lKShQLnNlcnZlck5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc3luY0Zv'@;
put 'bGRlcj0oMCxnLnZhbGlkYXRlU3luY0ZvbGRlcikoUC5zeW5jRm9sZGVyKSx0aGlzLl9yZXBvc2l0b3J5TmFtZT0oMCxnLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWUpKFAucmVwb3NpdG9yeU5hbWUsdGhpcy5fc2VydmVyVHlwZSksUC5kb2NDb25maWcmJih0aGlzLl9kb2NDb25maWc9KDAsZy52'@;
put 'YWxpZGF0ZURvY0NvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5Eb2MsUCkpKSxQLmF1dGhDb25maWcmJih0aGlzLl9hdXRoQ29uZmlnPSgwLGcudmFsaWRhdGVBdXRoQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLkF1dGgsUCkpKSxQLmF1dGhDb25maWdT'@;
put 'YXM5JiYodGhpcy5fYXV0aENvbmZpZ1Nhczk9KDAsZy52YWxpZGF0ZUF1dGhDb25maWdTYXM5KShQLmF1dGhDb25maWdTYXM5KSksUC5idWlsZENvbmZpZyYmKHRoaXMuX2J1aWxkQ29uZmlnPSgwLGcudmFsaWRhdGVCdWlsZENvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5C'@;
put 'dWlsZCxQKSx0aGlzLl9uYW1lKSksdGhpcy5fZGVwbG95Q29uZmlnPSgwLGcudmFsaWRhdGVEZXBsb3lDb25maWcpKFAuZGVwbG95Q29uZmlnP3RoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuRGVwbG95LFApOntkZXBsb3lTZXJ2aWNlUGFjazohMCxkZXBsb3lTY3JpcHRzOltdfSksUC5z'@;
put 'ZXJ2aWNlQ29uZmlnJiYodGhpcy5fc2VydmljZUNvbmZpZz0oMCxnLnZhbGlkYXRlU2VydmljZUNvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBlcy5TZXJ2aWNlLFApKSksUC5qb2JDb25maWcmJih0aGlzLl9qb2JDb25maWc9KDAsZy52YWxpZGF0ZUpvYkNvbmZpZykodGhpcy5n'@;
put 'ZXRDb25maWcoSS5Db25maWdUeXBlcy5Kb2IsUCkpKSxQLnN0cmVhbUNvbmZpZyYmKHRoaXMuX3N0cmVhbUNvbmZpZz0oMCxnLnZhbGlkYXRlU3RyZWFtQ29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLlN0cmVhbSxQKSkpLFAudGVzdENvbmZpZyYmKHRoaXMuX3Rlc3RDb25m'@;
put 'aWc9KDAsZy52YWxpZGF0ZVRlc3RDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuVGVzdCxQKSkpLFAubWFjcm9Gb2xkZXJzJiZQLm1hY3JvRm9sZGVycy5sZW5ndGgmJih0aGlzLl9tYWNyb0ZvbGRlcnM9UC5tYWNyb0ZvbGRlcnMpLFAucHJvZ3JhbUZvbGRlcnMmJlAucHJv'@;
put 'Z3JhbUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fcHJvZ3JhbUZvbGRlcnM9UC5wcm9ncmFtRm9sZGVycyksUC5iaW5hcnlGb2xkZXJzJiZQLmJpbmFyeUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fYmluYXJ5Rm9sZGVycz1QLmJpbmFyeUZvbGRlcnMpLFAuc3luY0RpcmVjdG9yaWVzJiZQLnN5bmNE'@;
put 'aXJlY3Rvcmllcy5sZW5ndGgmJih0aGlzLl9zeW5jRGlyZWN0b3JpZXM9KDAsZy52YWxpZGF0ZVN5bmNEaXJlY3RvcmllcykoUC5zeW5jRGlyZWN0b3JpZXMpKSxQLnNhc2pzQnVpbGRGb2xkZXImJih0aGlzLl9zYXNqc0J1aWxkRm9sZGVyPSgwLGcudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVy'@;
put 'KShQLnNhc2pzQnVpbGRGb2xkZXIpKSxQLnNhc2pzUmVzdWx0c0ZvbGRlciYmKHRoaXMuX3Nhc2pzUmVzdWx0c0ZvbGRlcj0oMCxnLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyKShQLnNhc2pzUmVzdWx0c0ZvbGRlcikpfWNhdGNoKE8pe3Rocm93IG5ldyBFcnJvcihgRXJyb3IgcGFyc2lu'@;
put 'ZyB0YXJnZXQ6ICR7Ty5tZXNzYWdlfWApfX1nZXQgbmFtZSgpe3JldHVybiB0aGlzLl9uYW1lfWdldCBzZXJ2ZXJVcmwoKXtyZXR1cm4gdGhpcy5fc2VydmVyVXJsfWdldCBzZXJ2ZXJUeXBlKCl7cmV0dXJuIHRoaXMuX3NlcnZlclR5cGV9Z2V0IGh0dHBzQWdlbnRPcHRpb25zKCl7cmV0dXJu'@;
put 'IHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zfWdldCBhcHBMb2MoKXtyZXR1cm4gdGhpcy5fYXBwTG9jfWdldCBkb2NDb25maWcoKXtyZXR1cm4gdGhpcy5fZG9jQ29uZmlnfWdldCBhdXRoQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWd9Z2V0IGF1dGhDb25maWdTYXM5KCl7cmV0dXJu'@;
put 'IHRoaXMuX2F1dGhDb25maWdTYXM5fWdldCBidWlsZENvbmZpZygpe3JldHVybiB0aGlzLl9idWlsZENvbmZpZ31nZXQgZGVwbG95Q29uZmlnKCl7cmV0dXJuIHRoaXMuX2RlcGxveUNvbmZpZ31nZXQgc2VydmljZUNvbmZpZygpe3JldHVybiB0aGlzLl9zZXJ2aWNlQ29uZmlnfWdldCBqb2JD'@;
put 'b25maWcoKXtyZXR1cm4gdGhpcy5fam9iQ29uZmlnfWdldCBzdHJlYW1Db25maWcoKXtyZXR1cm4gdGhpcy5fc3RyZWFtQ29uZmlnfWdldCBtYWNyb0ZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fbWFjcm9Gb2xkZXJzfWdldCBwcm9ncmFtRm9sZGVycygpe3JldHVybiB0aGlzLl9wcm9ncmFtRm9s'@;
put 'ZGVyc31nZXQgYmluYXJ5Rm9sZGVycygpe3JldHVybiB0aGlzLl9iaW5hcnlGb2xkZXJzfWdldCBjb250ZXh0TmFtZSgpe3JldHVybiB0aGlzLl9jb250ZXh0TmFtZX1nZXQgc2VydmVyTmFtZSgpe3JldHVybiB0aGlzLl9zZXJ2ZXJOYW1lfWdldCByZXBvc2l0b3J5TmFtZSgpe3JldHVybiB0'@;
put 'aGlzLl9yZXBvc2l0b3J5TmFtZX1nZXQgdGVzdENvbmZpZygpe3JldHVybiB0aGlzLl90ZXN0Q29uZmlnfWdldCBzeW5jRm9sZGVyKCl7cmV0dXJuIHRoaXMuX3N5bmNGb2xkZXJ9Z2V0IHN5bmNEaXJlY3Rvcmllcygpe3JldHVybiB0aGlzLl9zeW5jRGlyZWN0b3JpZXN9Z2V0IHNhc2pzQnVp'@;
put 'bGRGb2xkZXIoKXtyZXR1cm4gdGhpcy5fc2FzanNCdWlsZEZvbGRlcn1nZXQgc2FzanNSZXN1bHRzRm9sZGVyKCl7cmV0dXJuIHRoaXMuX3Nhc2pzUmVzdWx0c0ZvbGRlcn10b0pzb24oUD0hMCl7dmFyIEYsTyx6O2NvbnN0IE49e25hbWU6dGhpcy5uYW1lLHNlcnZlclVybDp0aGlzLnNlcnZl'@;
put 'clVybCxzZXJ2ZXJUeXBlOnRoaXMuc2VydmVyVHlwZSxodHRwc0FnZW50T3B0aW9uczp0aGlzLmh0dHBzQWdlbnRPcHRpb25zLGFwcExvYzp0aGlzLmFwcExvYyxkb2NDb25maWc6dGhpcy5kb2NDb25maWcsZGVwbG95Q29uZmlnOnRoaXMuZGVwbG95Q29uZmlnfTtyZXR1cm4hKG51bGw9PT0o'@;
put 'Rj10aGlzLm1hY3JvRm9sZGVycyl8fHZvaWQgMD09PUYpJiZGLmxlbmd0aCYmKE4ubWFjcm9Gb2xkZXJzPXRoaXMubWFjcm9Gb2xkZXJzKSwhKG51bGw9PT0oTz10aGlzLnByb2dyYW1Gb2xkZXJzKXx8dm9pZCAwPT09TykmJk8ubGVuZ3RoJiYoTi5wcm9ncmFtRm9sZGVycz10aGlzLnByb2dy'@;
put 'YW1Gb2xkZXJzKSwhKG51bGw9PT0oej10aGlzLmJpbmFyeUZvbGRlcnMpfHx2b2lkIDA9PT16KSYmei5sZW5ndGgmJihOLmJpbmFyeUZvbGRlcnM9dGhpcy5iaW5hcnlGb2xkZXJzKSx0aGlzLmF1dGhDb25maWcmJihOLmF1dGhDb25maWc9dGhpcy5hdXRoQ29uZmlnKSx0aGlzLmF1dGhDb25m'@;
put 'aWdTYXM5JiYoTi5hdXRoQ29uZmlnU2FzOT10aGlzLmF1dGhDb25maWdTYXM5KSx0aGlzLnNhc2pzQnVpbGRGb2xkZXI/Ti5zYXNqc0J1aWxkRm9sZGVyPXRoaXMuc2FzanNCdWlsZEZvbGRlcjpQJiYoTi5zYXNqc0J1aWxkRm9sZGVyPWcuREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVIpLHRo'@;
put 'aXMuc2FzanNSZXN1bHRzRm9sZGVyP04uc2FzanNSZXN1bHRzRm9sZGVyPXRoaXMuc2FzanNSZXN1bHRzRm9sZGVyOlAmJihOLnNhc2pzUmVzdWx0c0ZvbGRlcj1nLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVIpLHRoaXMuc3luY0RpcmVjdG9yaWVzP04uc3luY0RpcmVjdG9yaWVzPXRo'@;
put 'aXMuc3luY0RpcmVjdG9yaWVzOlAmJihOLnN5bmNEaXJlY3Rvcmllcz1bXSksdGhpcy5idWlsZENvbmZpZz9OLmJ1aWxkQ29uZmlnPXRoaXMuYnVpbGRDb25maWc6UCYmKE4uYnVpbGRDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLGJ1aWxkT3V0cHV0RmlsZU5hbWU6YCR7'@;
put 'dGhpcy5uYW1lfS5zYXNgLG1hY3JvVmFyczp7fX0pLHRoaXMuam9iQ29uZmlnP04uam9iQ29uZmlnPXRoaXMuam9iQ29uZmlnOlAmJihOLmpvYkNvbmZpZz17am9iRm9sZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnNlcnZpY2VDb25m'@;
put 'aWc/Ti5zZXJ2aWNlQ29uZmlnPXRoaXMuc2VydmljZUNvbmZpZzpQJiYoTi5zZXJ2aWNlQ29uZmlnPXtzZXJ2aWNlRm9sZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnN0cmVhbUNvbmZpZz9OLnN0cmVhbUNvbmZpZz10aGlzLnN0cmVh'@;
put 'bUNvbmZpZzpQJiYoTi5zdHJlYW1Db25maWc9e3N0cmVhbVdlYkZvbGRlcjoiIixzdHJlYW1XZWI6ITEsd2ViU291cmNlUGF0aDoiIixzdHJlYW1TZXJ2aWNlTmFtZToiIixhc3NldFBhdGhzOltdfSksdGhpcy50ZXN0Q29uZmlnP04udGVzdENvbmZpZz10aGlzLnRlc3RDb25maWc6UCYmKE4u'@;
put 'dGVzdENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9LHRlc3RTZXRVcDoiIix0ZXN0VGVhckRvd246IiJ9KSx0aGlzLnNlcnZlclR5cGU9PT15LlNlcnZlclR5cGUuU2FzVml5YT9OLmNvbnRleHROYW1lPXRoaXMuY29udGV4dE5hbWU6dGhpcy5zZXJ2'@;
put 'ZXJUeXBlPT09eS5TZXJ2ZXJUeXBlLlNhczkmJihOLnNlcnZlck5hbWU9dGhpcy5zZXJ2ZXJOYW1lLE4ucmVwb3NpdG9yeU5hbWU9dGhpcy5yZXBvc2l0b3J5TmFtZSksTn19fSw2NzgxOmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZh'@;
put 'dWx0fHxmdW5jdGlvbihwKXtyZXR1cm4gcCYmcC5fX2VzTW9kdWxlP3A6e2RlZmF1bHQ6cH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnZhbGlkYXRlU2FzanNSZXN1bHRzRm9sZGVyPXEudmFsaWRhdGVTYXNqc0J1aWxkRm9sZGVyPXEudmFs'@;
put 'aWRhdGVTeW5jRGlyZWN0b3JpZXM9cS52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPXEudmFsaWRhdGVTeW5jRm9sZGVyPXEudmFsaWRhdGVTZXJ2ZXJOYW1lPXEudmFsaWRhdGVDb250ZXh0TmFtZT1xLnZhbGlkYXRlU3RyZWFtQ29uZmlnPXEudmFsaWRhdGVEZXBsb3lDb25maWc9cS52YWxpZGF0'@;
put 'ZUpvYkNvbmZpZz1xLnZhbGlkYXRlVGVzdENvbmZpZz1xLnZhbGlkYXRlU2VydmljZUNvbmZpZz1xLnZhbGlkYXRlQnVpbGRDb25maWc9cS52YWxpZGF0ZUF1dGhDb25maWdTYXM5PXEudmFsaWRhdGVBdXRoQ29uZmlnPXEudmFsaWRhdGVEb2NDb25maWc9cS52YWxpZGF0ZUFwcExvYz1xLnZh'@;
put 'bGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9cS52YWxpZGF0ZVNlcnZlclVybD1xLnZhbGlkYXRlVGFyZ2V0TmFtZT1xLnZhbGlkYXRlU2VydmVyVHlwZT1xLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVI9cS5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUj12b2lkIDA7Y29uc3QgeT1JKF8o'@;
put 'NDgxKSksZz1fKDM5MDApO3EuREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVI9InNhc2pzYnVpbGQiLHEuREVGQVVMVF9TQVNKU19SRVNVTFRTX0ZPTERFUj0ic2FzanNyZXN1bHRzIixxLnZhbGlkYXRlU2VydmVyVHlwZT1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZl'@;
put 'ciB0eXBlOiBgc2VydmVyVHlwZWAgY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKHAhPT1nLlNlcnZlclR5cGUuU2FzOSYmcCE9PWcuU2VydmVyVHlwZS5TYXNWaXlhJiZwIT09Zy5TZXJ2ZXJUeXBlLlNhc2pzKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZXJ2ZXIgdHlwZTog'@;
put 'U3VwcG9ydGVkIHZhbHVlcyBmb3IgIFxgc2VydmVyVHlwZVxgIGFyZSAke2cuU2VydmVyVHlwZS5TYXNWaXlhfSwgJHtnLlNlcnZlclR5cGUuU2FzOX0gYW5kICR7Zy5TZXJ2ZXJUeXBlLlNhc2pzfS5gKTtyZXR1cm4gcH0scS52YWxpZGF0ZVRhcmdldE5hbWU9cD0+e2lmKCFwKXRocm93IG5l'@;
put 'dyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7aWYocC50cmltKCkuaW5jbHVkZXMoIiAiKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgaW5jbHVkZSBzcGFj'@;
put 'ZXMuIik7aWYoIS9eW2EtekEtWjAtOVwtXSskL2kudGVzdChwKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBkYXNoZXMuIik7cmV0dXJuIHB9LHEudmFsaWRhdGVTZXJ2ZXJV'@;
put 'cmw9cD0+e2lmKG51bGw9PXAmJihwPSIiKSwiIiE9PXAmJiF5LmRlZmF1bHQuaXNIdHRwVXJpKHApJiYheS5kZWZhdWx0LmlzSHR0cHNVcmkocCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciBVUkw6IGBzZXJ2ZXJVcmxgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgc3RyaW5n'@;
put 'IG9yIGEgdmFsaWQgVVJMIG9mIHRoZSBmb3JtIGh0dHAocyk6Ly95b3VyLXNlcnZlci5jb20oOnBvcnQpLiIpO3JldHVybiBwfSxxLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9cD0+e2lmKHApe2lmKCJvYmplY3QiIT10eXBlb2YgcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6'@;
put 'IGBodHRwc0FnZW50T3B0aW9uc2Agc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBvciBhbiBvYmplY3Qgb2YgYEh0dHBzQWdlbnRPcHRpb25zYCIpO2lmKG51bGw9PXAuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKXAuYWxsb3dJbnNlY3VyZVJlcXVlc3RzPSExO2Vsc2UgaWYoImJvb2xlYW4iIT10'@;
put 'eXBlb2YgcC5hbGxvd0luc2VjdXJlUmVxdWVzdHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNBZ2VudE9wdGlvbnMuYWxsb3dJbnNlY3VyZVJlcXVlc3RzYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGEgYm9vbGVhbiIpO3JldHVybiJzdHJpbmciIT10eXBl'@;
put 'b2YgcC5jYVBhdGgmJihwLmNhUGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgcC5rZXlQYXRoJiYocC5rZXlQYXRoPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBwLmNlcnRQYXRoJiYocC5jZXJ0UGF0aD12b2lkIDApLHB9fSxxLnZhbGlkYXRlQXBwTG9jPXA9PntpZighcCl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKCFwLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXBwIGxvY2F0aW9uOiBgYXBwTG9jYCBtdXN0IHN0YXJ0IHdpdGgg'@;
put 'YSBgL2AuIik7cmV0dXJuIHB9LHEudmFsaWRhdGVEb2NDb25maWc9cD0+e2lmKHB8fChwPXt9KSwiYm9vbGVhbiIhPXR5cGVvZiBwLmRpc3BsYXlNYWNyb0NvcmUmJihwLmRpc3BsYXlNYWNyb0NvcmU9dm9pZCAwKSwiYm9vbGVhbiIhPXR5cGVvZiBwLmVuYWJsZUxpbmVhZ2UmJihwLmVuYWJs'@;
put 'ZUxpbmVhZ2U9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIHAub3V0RGlyZWN0b3J5JiYocC5vdXREaXJlY3Rvcnk9dm9pZCAwKSwic3RyaW5nIj09dHlwZW9mIHAuZGF0YUNvbnRyb2xsZXJVcmwpe2lmKCIiIT09cC5kYXRhQ29udHJvbGxlclVybCYmIXkuZGVmYXVsdC5pc0h0dHBVcmkocC5k'@;
put 'YXRhQ29udHJvbGxlclVybCkmJiF5LmRlZmF1bHQuaXNIdHRwc1VyaShwLmRhdGFDb250cm9sbGVyVXJsKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRGF0YSBDb250cm9sbGVyIFVybDogYGRhdGFDb250cm9sbGVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBh'@;
put 'IHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKX1lbHNlIHAuZGF0YUNvbnRyb2xsZXJVcmw9dm9pZCAwO3JldHVybiBwfSxxLnZhbGlkYXRlQXV0aENvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29u'@;
put 'ZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcH0scS52YWxpZGF0ZUF1dGhDb25maWdTYXM5PXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcgZm9yIHNhczk6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVk'@;
put 'LiIpO2lmKCFwLnVzZXJOYW1lfHwhcC5wYXNzd29yZCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYXV0aCBjb25maWcgZm9yIHNhczk6IHVzZXJOYW1lIGFuZCBwYXNzd29yZCBjYW4gbm90IGJlIGVtcHR5Iik7cmV0dXJuIHB9LHEudmFsaWRhdGVCdWlsZENvbmZpZz0ocCxiKT0+e2lmKCFw'@;
put 'KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBidWlsZCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmJ1aWxkT3V0cHV0RmlsZU5hbWV8fChwLmJ1aWxkT3V0cHV0RmlsZU5hbWU9YCR7Yn0uc2FzYCkscC5pbml0UHJvZ3JhbXx8KHAuaW5pdFBy'@;
put 'b2dyYW09IiIpLHAudGVybVByb2dyYW18fChwLnRlcm1Qcm9ncmFtPSIiKSxwLm1hY3JvVmFyc3x8KHAubWFjcm9WYXJzPXt9KSxwfSxxLnZhbGlkYXRlU2VydmljZUNvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZpY2UgY29uZmlnOiBKU09OIGNhbm5vdCBi'@;
put 'ZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5pbml0UHJvZ3JhbXx8KHAuaW5pdFByb2dyYW09IiIpLHAudGVybVByb2dyYW18fChwLnRlcm1Qcm9ncmFtPSIiKSxwLnNlcnZpY2VGb2xkZXJzfHwocC5zZXJ2aWNlRm9sZGVycz1bXSkscC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17'@;
put 'fSkscH0scS52YWxpZGF0ZVRlc3RDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0ZXN0IGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHAuaW5pdFByb2dyYW18fChwLmluaXRQcm9ncmFtPSIiKSxwLnRlcm1Qcm9ncmFt'@;
put 'fHwocC50ZXJtUHJvZ3JhbT0iIikscC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17fSkscC50ZXN0U2V0VXB8fChwLnRlc3RTZXRVcD0iIikscC50ZXN0VGVhckRvd258fChwLnRlc3RUZWFyRG93bj0iIikscH0scS52YWxpZGF0ZUpvYkNvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9y'@;
put 'KCJJbnZhbGlkIGpvYiBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmluaXRQcm9ncmFtfHwocC5pbml0UHJvZ3JhbT0iIikscC50ZXJtUHJvZ3JhbXx8KHAudGVybVByb2dyYW09IiIpLHAuam9iRm9sZGVyc3x8KHAuam9iRm9sZGVycz1bXSks'@;
put 'cC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17fSkscH0scS52YWxpZGF0ZURlcGxveUNvbmZpZz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlcGxveSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmRlcGxveVNlcnZpY2VQ'@;
put 'YWNrPSEhcC5kZXBsb3lTZXJ2aWNlUGFjayxwLmRlcGxveVNjcmlwdHN8fChwLmRlcGxveVNjcmlwdHM9W10pLHB9LHEudmFsaWRhdGVTdHJlYW1Db25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVu'@;
put 'ZGVmaW5lZC4iKTtpZighMCE9PXAuc3RyZWFtV2ViJiYhMSE9PXAuc3RyZWFtV2ViKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViYCBjYW5ub3QgYmUgYSBub24tYm9vbGVhbiB2YWx1ZS4iKTtpZihwLnN0cmVhbVdlYiYmIXAuc3RyZWFtV2ViRm9s'@;
put 'ZGVyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgc3RyZWFtV2ViRm9sZGVyYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gYHN0cmVhbVdlYmAgaXMgdHJ1ZS4iKTtpZihwLnN0cmVhbVdlYiYmIXAud2ViU291cmNlUGF0aCl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHdlYlNvdXJjZVBhdGhgIHNob3VsZCBjb250YWluIHRoZSBwYXRoIHRvIHlvdXIgZnJvbnRlbmQgYXBwbGljYXRpb24gZWcgYnVpbGQsIGRpc3QsIG9yIHNyYy4iKTtyZXR1cm4gcC5zdHJlYW1Mb2dvJiYic3RyaW5nIiE9dHlwZW9m'@;
put 'IHAuc3RyZWFtTG9nbyYmKHAuc3RyZWFtTG9nbz12b2lkIDApLHAuYXNzZXRQYXRoc3x8KHAuYXNzZXRQYXRocz1bXSkscC5zdHJlYW1TZXJ2aWNlTmFtZXx8KHAuc3RyZWFtU2VydmljZU5hbWU9ImNsaWNrbWUiKSxwfSxxLnZhbGlkYXRlQ29udGV4dE5hbWU9KHAsYik9PmIhPT1nLlNlcnZl'@;
put 'clR5cGUuU2FzVml5YXx8cD9wOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLHEudmFsaWRhdGVTZXJ2ZXJOYW1lPShwLGIpPT5iIT09Zy5TZXJ2ZXJUeXBlLlNhczl8fHA/cDoiU0FTQXBwIixxLnZhbGlkYXRlU3luY0ZvbGRlcj1wPT57aWYoInN0cmluZyI9PXR5cGVvZiBw'@;
put 'JiZwKXJldHVybiBwfSxxLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWU9KHAsYik9PmIhPT1nLlNlcnZlclR5cGUuU2FzOXx8cD9wOiJGb3VuZGF0aW9uIixxLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yaWVzIGNv'@;
put 'bmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHAuZm9yRWFjaChiPT57aWYoIWIubG9jYWx8fCFiLnJlbW90ZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yeSBjb25maWc6IHZhbHVlcyBvZiBwcm9wZXJ0eSAnbG9jYWwnIGFuZCAn'@;
put 'cmVtb3RlIGNhbiBub3QgYmUgZW1wdHkgb3IgdW5kZWZpbmVkIil9KSxwfSxxLnZhbGlkYXRlU2FzanNCdWlsZEZvbGRlcj1wPT57aWYoInN0cmluZyIhPXR5cGVvZiBwKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHZhbHVlICgke3R5cGVvZiBwfSkgaXMgcHJvdmlkZWQgZm9y'@;
put 'IHByb3BlcnR5ICdzYXNqc0J1aWxkRm9sZGVyJyBpbiBjb25maWcuIFJlcXVpcmVkIGlzIHN0cmluZy5gKTtyZXR1cm4gcHx8cS5ERUZBVUxUX1NBU0pTX0JVSUxEX0ZPTERFUn0scS52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcj1wPT57aWYoInN0cmluZyIhPXR5cGVvZiBwKXRocm93IG5l'@;
put 'dyBFcnJvcihgSW52YWxpZCB0eXBlIG9mIHZhbHVlICgke3R5cGVvZiBwfSkgaXMgcHJvdmlkZWQgZm9yIHByb3BlcnR5ICdzYXNqc1Jlc3VsdHNGb2xkZXInIGluIGNvbmZpZy4gUmVxdWlyZWQgaXMgc3RyaW5nLmApO3JldHVybiBwfHxxLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVJ9'@;
put 'fSwyOTI3OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPV8oODc2NCkuQnVmZmVyLHk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEYpe3JldHVybiBGJiZGLl9fZXNNb2R1bGU/Rjp7ZGVmYXVsdDpGfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9f'@;
put 'ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZGVjb2RlRnJvbUJhc2U2ND1xLmVuY29kZVRvQmFzZTY0PXZvaWQgMDtjb25zdCBnPXkoXyg1ODM1KSksQj0ie3Nhc2pzX2VuY29kZWR9IjtxLmVuY29kZVRvQmFzZTY0PUY9Pntjb25zdCBPPWcuZGVmYXVsdC5yYW5kb21CeXRlcygxMDApLnRvU3Ry'@;
put 'aW5nKCJoZXgiKSx6PUkuZnJvbShPK0YpLnRvU3RyaW5nKCJiYXNlNjQiKTtyZXR1cm4gQit6fSxxLmRlY29kZUZyb21CYXNlNjQ9Rj0+Ri5zdGFydHNXaXRoKEIpPyhGPUYucmVwbGFjZSgvXntzYXNqc19lbmNvZGVkfS8sIiIpLEkuZnJvbShGLCJiYXNlNjQiKS50b1N0cmluZygpLnN1YnN0'@;
put 'cmluZygyMDApKTpGfSw1ODE6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmJ5dGVzVG9TaXplPXZvaWQgMCxxLmJ5dGVzVG9TaXplPShJLHk9MSxnPTEwOTk1MTE2Mjc3NzYpPT57aWYoMD09PUkpcmV0dXJu'@;
put 'IjAgQiI7ST1JPmc/ZzpJO2NvbnN0IFA9eTwwPzA6eSxGPU1hdGguZmxvb3IoTWF0aC5sb2coSSkvTWF0aC5sb2coMTAyNCkpO3JldHVybihJL01hdGgucG93KDEwMjQsRikpLnRvRml4ZWQoUCkrIiAiK1siQiIsIktCIiwiTUIiLCJHQiIsIlRCIl1bRl19fSw4NjUzOih1ZSxxKT0+eyJ1c2Ug'@;
put 'c3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5jaHVuaz12b2lkIDAscS5jaHVuaz1mdW5jdGlvbiBfKEkseT0yMjApe3JldHVybiBJLmxlbmd0aDw9eT9bSV06KEkubWF0Y2gobmV3IFJlZ0V4cCgiLnsxLCIreSsifSIsImciKSl8fFtd'@;
put 'KS5maWx0ZXIoZz0+ISFnKX19LDY0NTc6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmRpZmY9dm9pZCAwLHEuZGlmZj1mdW5jdGlvbiBfKEkseSl7cmV0dXJuWy4uLkkuZmlsdGVyKHc9PiJvYmplY3QiPT10'@;
put 'eXBlb2Ygdz8hSlNPTi5zdHJpbmdpZnkoeSkuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkodykpOiF5LmluY2x1ZGVzKHcpKSwuLi55LmZpbHRlcih3PT4ib2JqZWN0Ij09dHlwZW9mIHc/IUpTT04uc3RyaW5naWZ5KEkpLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KHcpKTohSS5pbmNsdWRlcyh3'@;
put 'KSldfX0sMTUyOToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZ2V0RXhlY3V0b3JQYXRoPXZvaWQgMDtjb25zdCBfPXtTQVNWSVlBOiIvU0FTSm9iRXhlY3V0aW9uIixTQVM5OiIvU0FTU3RvcmVkUHJvY2Vz'@;
put 'cy9kbyJ9O3EuZ2V0RXhlY3V0b3JQYXRoPXk9Pnk/KHk9eS50b1VwcGVyQ2FzZSgpLF9beV18fCIiKToiIn0sMzMxNjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZXRUcmVlRXhhbXBsZT1xLmlzRmls'@;
put 'ZVRyZWU9dm9pZCAwO2NvbnN0IEk9XygzOTAwKTtxLmlzRmlsZVRyZWU9Rj0+RiYmRi5tZW1iZXJzJiZBcnJheS5pc0FycmF5KEYubWVtYmVycykmJjA9PT1GLm1lbWJlcnMuZmlsdGVyKE89PiFnKE8pJiYhQihPKSYmIXcoTykpLmxlbmd0aDtjb25zdCBnPUY9PkYmJiJzdHJpbmciPT10eXBl'@;
put 'b2YgRi5uYW1lJiZGLnR5cGU9PT1JLk1lbWJlclR5cGUuc2VydmljZSYmInN0cmluZyI9PXR5cGVvZiBGLmNvZGUsQj1GPT5GJiYic3RyaW5nIj09dHlwZW9mIEYubmFtZSYmRi50eXBlPT09SS5NZW1iZXJUeXBlLmZpbGUmJiJzdHJpbmciPT10eXBlb2YgRi5jb2RlLHc9Rj0+RiYmInN0cmlu'@;
put 'ZyI9PXR5cGVvZiBGLm5hbWUmJkYudHlwZT09PUkuTWVtYmVyVHlwZS5mb2xkZXImJkYubWVtYmVycyYmQXJyYXkuaXNBcnJheShGLm1lbWJlcnMpJiYwPT09Ri5tZW1iZXJzLmZpbHRlcihPPT4hZyhPKSYmIUIoTykmJiF3KE8pKS5sZW5ndGg7cS5nZXRUcmVlRXhhbXBsZT0oKT0+KHttZW1i'@;
put 'ZXJzOlt7bmFtZToiam9icyIsdHlwZTpJLk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJleHRyYWN0Iix0eXBlOkkuTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6Im1ha2VkYXRhMSIsdHlwZTpJLk1lbWJlclR5cGUuc2VydmljZSxjb2RlOiIlcHV0IEhlbGxvIFdv'@;
put 'cmxkITsifV19XX1dfSl9LDYyNjY6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKE4sTCxLLFUpe3ZvaWQgMD09PVUmJihVPUspLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLFUse2Vu'@;
put 'dW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIExbS119fSl9OmZ1bmN0aW9uKE4sTCxLLFUpe3ZvaWQgMD09PVUmJihVPUspLE5bVV09TFtLXX0pLHk9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKE4sTCl7Zm9yKHZhciBLIGluIE4pImRlZmF1bHQiIT09SyYmIU9i'@;
put 'amVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChMLEspJiZJKEwsTixLKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuY2h1bms9cS5kaWZmPXEuYnl0ZXNUb1NpemU9cS5nZXRFeGVjdXRvclBhdGg9cS5kZWNvZGVGcm9tQmFzZTY0'@;
put 'PXEuZW5jb2RlVG9CYXNlNjQ9cS51cmxPcmlnaW49cS5nZW5lcmF0ZVBhdGhGb3JTYXM9cS5nZXRNYWNyb3NQYXRoPXEuZXNjYXBlV2luU2xhc2hlcz1xLmlzTGludXg9cS5pc1dpbmRvd3M9cS51bmlxQXJyYXk9cS5hc3luY0ZvckVhY2g9cS51dWlkdjQ9dm9pZCAwO3ZhciBnPV8oMTEzMSk7'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsInV1aWR2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcudXVpZHY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJhc3luY0ZvckVhY2giLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmFzeW5j'@;
put 'Rm9yRWFjaH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwidW5pcUFycmF5Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy51bmlxQXJyYXl9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImlzV2luZG93cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGcuaXNXaW5kb3dzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJpc0xpbnV4Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5pc0xpbnV4fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJlc2NhcGVXaW5TbGFzaGVzIix7ZW51bWVyYWJsZTohMCxn'@;
put 'ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5lc2NhcGVXaW5TbGFzaGVzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJnZXRNYWNyb3NQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZXRNYWNyb3NQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJn'@;
put 'ZW5lcmF0ZVBhdGhGb3JTYXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmdlbmVyYXRlUGF0aEZvclNhc319KSx5KF8oMzMxNikscSk7dmFyIEI9Xyg5NjUyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwidXJsT3JpZ2luIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gQi51cmxPcmlnaW59fSk7dmFyIHc9XygyOTI3KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiZW5jb2RlVG9CYXNlNjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3LmVuY29kZVRvQmFzZTY0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShx'@;
put 'LCJkZWNvZGVGcm9tQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdy5kZWNvZGVGcm9tQmFzZTY0fX0pO3ZhciBQPV8oMTUyOSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImdldEV4ZWN1dG9yUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIFAuZ2V0RXhlY3V0b3JQYXRofX0pO3ZhciBGPV8oNTgxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiYnl0ZXNUb1NpemUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBGLmJ5dGVzVG9TaXplfX0pO3ZhciBPPV8oNjQ1Nyk7T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KHEsImRpZmYiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBPLmRpZmZ9fSk7dmFyIHo9Xyg4NjUzKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiY2h1bmsiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB6LmNodW5rfX0pfSw5NjUyOih1ZSxx'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS51cmxPcmlnaW49dm9pZCAwLHEudXJsT3JpZ2luPUk9PntpZigiIj09PUkpcmV0dXJuIEk7bGV0IHk7dHJ5e3k9bmV3IFVSTChJKS5vcmlnaW59Y2F0Y2h7dGhyb3cgbmV3'@;
put 'IEVycm9yKCJJbnZhbGlkIFVSTC4iKX1yZXR1cm4geX19LDExMzE6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIHk9Xyg0MTU1KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihXLFksWCxlZSl7cmV0dXJuIG5ldyhYfHwoWD1Qcm9taXNlKSkoZnVuY3Rpb24ocmUs'@;
put 'aWUpe2Z1bmN0aW9uIGxlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIG1lKFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBfZShUZSl7VGUuZG9uZT9yZShUZS52YWx1ZSk6ZnVuY3Rpb24gSihyZSl7'@;
put 'cmV0dXJuIHJlIGluc3RhbmNlb2YgWD9yZTpuZXcgWChmdW5jdGlvbihpZSl7aWUocmUpfSl9KFRlLnZhbHVlKS50aGVuKGxlLG1lKX1fZSgoZWU9ZWUuYXBwbHkoVyxZfHxbXSkpLm5leHQoKSl9KX0sQj10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oVyl7cmV0dXJuIFcm'@;
put 'JlcuX19lc01vZHVsZT9XOntkZWZhdWx0Old9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZW5lcmF0ZVBhdGhGb3JTYXM9cS5nZXRNYWNyb3NQYXRoPXEuZXNjYXBlV2luU2xhc2hlcz1xLmlzTGludXg9cS5pc1dpbmRvd3M9cS51bmlxQXJy'@;
put 'YXk9cS51dWlkdjQ9cS5hc3luY0ZvckVhY2g9dm9pZCAwO2NvbnN0IHc9QihfKDI1MjApKTtxLmFzeW5jRm9yRWFjaD1mdW5jdGlvbiBQKFcsWSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2ZvcihsZXQgWD0wO1g8Vy5sZW5ndGg7WCsrKXlpZWxkIFkoV1tYXSxY'@;
put 'LFcpfSl9LHEudXVpZHY0PSgpPT4ieHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Ii5yZXBsYWNlKC9beHldL2csVz0+e2NvbnN0IFk9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybigieCI9PVc/WTozJll8OCkudG9TdHJpbmcoMTYpfSkscS51bmlxQXJyYXk9Vz0+QXJyYXku'@;
put 'ZnJvbShuZXcgU2V0KFcpKSxxLmlzV2luZG93cz0oKT0+IndpbjMyIj09PXkucGxhdGZvcm0scS5pc0xpbnV4PSgpPT4ibGludXgiPT09eS5wbGF0Zm9ybSxxLmVzY2FwZVdpblNsYXNoZXM9Vz0+KDAscS5pc1dpbmRvd3MpKCk/Vy5yZXBsYWNlKC9cXC9nLCJcXFxcIik6VyxxLmdldE1hY3Jv'@;
put 'c1BhdGg9KCk9PncuZGVmYXVsdC5qb2luKCIvIiwiLi4iLCJtYWNyb3MiKSxxLmdlbmVyYXRlUGF0aEZvclNhcz1XPT5XLnJlcGxhY2UoL1xcL2csIi8iKX0sOTgwOToodWUscSxfKT0+e3ZhciBJPXE7SS5iaWdudW09Xyg0NTkwKSxJLmRlZmluZT1fKDI1MDApLmRlZmluZSxJLmJhc2U9Xygx'@;
put 'OTc5KSxJLmNvbnN0YW50cz1fKDY4MjYpLEkuZGVjb2RlcnM9Xyg4MzA3KSxJLmVuY29kZXJzPV8oNjU3OSl9LDI1MDA6KHVlLHEsXyk9Pnt2YXIgST1fKDk4MDkpLHk9Xyg1NzE3KTtmdW5jdGlvbiBCKHcsUCl7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PVAsdGhpcy5kZWNvZGVycz17fSx0aGlz'@;
put 'LmVuY29kZXJzPXt9fXEuZGVmaW5lPWZ1bmN0aW9uKFAsRil7cmV0dXJuIG5ldyBCKFAsRil9LEIucHJvdG90eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihQKXt2YXIgRjt0cnl7Rj1fKDUxNDApLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xu'@;
put 'ICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7Rj1mdW5jdGlvbih6KXt0aGlzLl9pbml0TmFtZWQoeil9fXJldHVybiB5KEYsUCksRi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbih6KXtQLmNhbGwodGhpcyx6KX0sbmV3IEYodGhpcyl9LEIucHJvdG90eXBlLl9n'@;
put 'ZXREZWNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KFA9UHx8ImRlciIpfHwodGhpcy5kZWNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmRlY29kZXJzW1BdKSksdGhpcy5kZWNvZGVyc1tQXX0sQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0'@;
put 'aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihGKS5kZWNvZGUoUCxPKX0sQi5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoUD1QfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW1BdPXRoaXMuX2NyZWF0'@;
put 'ZU5hbWVkKEkuZW5jb2RlcnNbUF0pKSx0aGlzLmVuY29kZXJzW1BdfSxCLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEYpLmVuY29kZShQLE8pfX0sNjYyNToodWUscSxfKT0+e3ZhciBJPV8oNTcxNykseT1fKDE5NzkpLlJlcG9ydGVy'@;
put 'LGc9Xyg4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gQihQLEYpe3kuY2FsbCh0aGlzLEYpLGcuaXNCdWZmZXIoUCk/KHRoaXMuYmFzZT1QLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9UC5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiB3KFAsRil7aWYoQXJy'@;
put 'YXkuaXNBcnJheShQKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9UC5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiB3fHwoTz1uZXcgdyhPLEYpKSx0aGlzLmxlbmd0aCs9Ty5sZW5ndGgsT30sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIFApe2lmKCEoMDw9UCYm'@;
put 'UDw9MjU1KSlyZXR1cm4gRi5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBQKXRoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1nLmJ5dGVMZW5ndGgoUCk7ZWxzZXtpZighZy5pc0J1'@;
put 'ZmZlcihQKSlyZXR1cm4gRi5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgUCk7dGhpcy52YWx1ZT1QLHRoaXMubGVuZ3RoPVAubGVuZ3RofX1JKEIseSkscS5DPUIsQi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6'@;
put 'eS5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sQi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbihGKXt2YXIgTz1uZXcgQih0aGlzLmJhc2UpO3JldHVybiBPLm9mZnNldD1GLm9mZnNldCxPLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD1GLm9mZnNldCx5LnByb3RvdHlwZS5y'@;
put 'ZXN0b3JlLmNhbGwodGhpcyxGLnJlcG9ydGVyKSxPfSxCLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LEIucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihGKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/'@;
put 'dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKEZ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sQi5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihGLE8pe2lmKCEodGhpcy5vZmZzZXQrRjw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKE98fCJE'@;
put 'ZWNvZGVyQnVmZmVyIG92ZXJydW4iKTt2YXIgej1uZXcgQih0aGlzLmJhc2UpO3JldHVybiB6Ll9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsei5vZmZzZXQ9dGhpcy5vZmZzZXQsei5sZW5ndGg9dGhpcy5vZmZzZXQrRix0aGlzLm9mZnNldCs9Rix6fSxCLnByb3RvdHlwZS5y'@;
put 'YXc9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMuYmFzZS5zbGljZShGP0Yub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0scS5SPXcsdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihGLE8pe3JldHVybiBGfHwoRj1uZXcgZyh0aGlzLmxlbmd0aCkpLE98fChPPTApLDA9PT10aGlzLmxl'@;
put 'bmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHope3ouam9pbihGLE8pLE8rPXoubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9GW09dPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVlP0Yu'@;
put 'd3JpdGUodGhpcy52YWx1ZSxPKTpnLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoRixPKSxPKz10aGlzLmxlbmd0aCkpLEZ9fSwxOTc5Oih1ZSxxLF8pPT57dmFyIEk9cTtJLlJlcG9ydGVyPV8oODQ2NSkuYixJLkRlY29kZXJCdWZmZXI9Xyg2NjI1KS5DLEkuRW5jb2Rl'@;
put 'ckJ1ZmZlcj1fKDY2MjUpLlIsSS5Ob2RlPV8oMTk0OSl9LDE5NDk6KHVlLHEsXyk9Pnt2YXIgST1fKDE5NzkpLlJlcG9ydGVyLHk9XygxOTc5KS5FbmNvZGVyQnVmZmVyLGc9XygxOTc5KS5EZWNvZGVyQnVmZmVyLEI9Xyg5NzQ2KSx3PVsic2VxIiwic2Vxb2YiLCJzZXQiLCJzZXRvZiIsIm9i'@;
put 'amlkIiwiYm9vbCIsImdlbnRpbWUiLCJ1dGN0aW1lIiwibnVsbF8iLCJlbnVtIiwiaW50Iiwib2JqRGVzYyIsImJpdHN0ciIsImJtcHN0ciIsImNoYXJzdHIiLCJnZW5zdHIiLCJncmFwaHN0ciIsImlhNXN0ciIsImlzbzY0NnN0ciIsIm51bXN0ciIsIm9jdHN0ciIsInByaW50c3RyIiwidDYx'@;
put 'c3RyIiwidW5pc3RyIiwidXRmOHN0ciIsInZpZGVvc3RyIl0sUD1bImtleSIsIm9iaiIsInVzZSIsIm9wdGlvbmFsIiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImRlZiIsImNob2ljZSIsImFueSIsImNvbnRhaW5zIl0uY29uY2F0KHcpO2Z1bmN0aW9uIE8oTixMKXt2YXIgSz17fTt0aGlzLl9i'@;
put 'YXNlU3RhdGU9SyxLLmVuYz1OLEsucGFyZW50PUx8fG51bGwsSy5jaGlsZHJlbj1udWxsLEsudGFnPW51bGwsSy5hcmdzPW51bGwsSy5yZXZlcnNlQXJncz1udWxsLEsuY2hvaWNlPW51bGwsSy5vcHRpb25hbD0hMSxLLmFueT0hMSxLLm9iaj0hMSxLLnVzZT1udWxsLEsudXNlRGVjb2Rlcj1u'@;
put 'dWxsLEsua2V5PW51bGwsSy5kZWZhdWx0PW51bGwsSy5leHBsaWNpdD1udWxsLEsuaW1wbGljaXQ9bnVsbCxLLmNvbnRhaW5zPW51bGwsSy5wYXJlbnR8fChLLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9dWUuZXhwb3J0cz1PO3ZhciB6PVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0'@;
put 'YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNpdCIsImNvbnRhaW5zIl07Ty5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgTD10aGlz'@;
put 'Ll9iYXNlU3RhdGUsSz17fTt6LmZvckVhY2goZnVuY3Rpb24oVyl7S1tXXT1MW1ddfSk7dmFyIFU9bmV3IHRoaXMuY29uc3RydWN0b3IoSy5wYXJlbnQpO3JldHVybiBVLl9iYXNlU3RhdGU9SyxVfSxPLnByb3RvdHlwZS5fd3JhcD1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZTtQ'@;
put 'LmZvckVhY2goZnVuY3Rpb24oSyl7dGhpc1tLXT1mdW5jdGlvbigpe3ZhciBXPW5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO3JldHVybiBMLmNoaWxkcmVuLnB1c2goVyksV1tLXS5hcHBseShXLGFyZ3VtZW50cyl9fSx0aGlzKX0sTy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oTCl7dmFy'@;
put 'IEs9dGhpcy5fYmFzZVN0YXRlO0IobnVsbD09PUsucGFyZW50KSxMLmNhbGwodGhpcyksSy5jaGlsZHJlbj1LLmNoaWxkcmVuLmZpbHRlcihmdW5jdGlvbihVKXtyZXR1cm4gVS5fYmFzZVN0YXRlLnBhcmVudD09PXRoaXN9LHRoaXMpLEIuZXF1YWwoSy5jaGlsZHJlbi5sZW5ndGgsMSwiUm9v'@;
put 'dCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkIil9LE8ucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZSxVPUwuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiBXIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7TD1MLmZpbHRl'@;
put 'cihmdW5jdGlvbihXKXtyZXR1cm4hKFcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PVUubGVuZ3RoJiYoQihudWxsPT09Sy5jaGlsZHJlbiksSy5jaGlsZHJlbj1VLFUuZm9yRWFjaChmdW5jdGlvbihXKXtXLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSww'@;
put 'IT09TC5sZW5ndGgmJihCKG51bGw9PT1LLmFyZ3MpLEsuYXJncz1MLEsucmV2ZXJzZUFyZ3M9TC5tYXAoZnVuY3Rpb24oVyl7aWYoIm9iamVjdCIhPXR5cGVvZiBXfHxXLmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBXO3ZhciBZPXt9O3JldHVybiBPYmplY3Qua2V5cyhXKS5mb3JFYWNo'@;
put 'KGZ1bmN0aW9uKFgpe1g9PSgwfFgpJiYoWHw9MCksWVtXW1hdXT1YfSksWX0pKX0sWyJfcGVla1RhZyIsIl9kZWNvZGVUYWciLCJfdXNlIiwiX2RlY29kZVN0ciIsIl9kZWNvZGVPYmppZCIsIl9kZWNvZGVUaW1lIiwiX2RlY29kZU51bGwiLCJfZGVjb2RlSW50IiwiX2RlY29kZUJvb2wiLCJf'@;
put 'ZGVjb2RlTGlzdCIsIl9lbmNvZGVDb21wb3NpdGUiLCJfZW5jb2RlU3RyIiwiX2VuY29kZU9iamlkIiwiX2VuY29kZVRpbWUiLCJfZW5jb2RlTnVsbCIsIl9lbmNvZGVJbnQiLCJfZW5jb2RlQm9vbCJdLmZvckVhY2goZnVuY3Rpb24oTil7Ty5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt0aHJv'@;
put 'dyBuZXcgRXJyb3IoTisiIG5vdCBpbXBsZW1lbnRlZCBmb3IgZW5jb2Rpbmc6ICIrdGhpcy5fYmFzZVN0YXRlLmVuYyl9fSksdy5mb3JFYWNoKGZ1bmN0aW9uKE4pe08ucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFU9QXJyYXkucHJvdG90eXBlLnNsaWNl'@;
put 'LmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gQihudWxsPT09Sy50YWcpLEsudGFnPU4sdGhpcy5fdXNlQXJncyhVKSx0aGlzfX0pLE8ucHJvdG90eXBlLnVzZT1mdW5jdGlvbihMKXtCKEwpO3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy51c2UpLEsudXNlPUwsdGhpc30s'@;
put 'Ty5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LE8ucHJvdG90eXBlLmRlZj1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuZGVmYXVsdCksSy5kZWZhdWx0PUwsSy5v'@;
put 'cHRpb25hbD0hMCx0aGlzfSxPLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuZXhwbGljaXQmJm51bGw9PT1LLmltcGxpY2l0KSxLLmV4cGxpY2l0PUwsdGhpc30sTy5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rp'@;
put 'b24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmV4cGxpY2l0JiZudWxsPT09Sy5pbXBsaWNpdCksSy5pbXBsaWNpdD1MLHRoaXN9LE8ucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZSxLPUFycmF5LnByb3RvdHlwZS5zbGlj'@;
put 'ZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEwub2JqPSEwLDAhPT1LLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhLKSx0aGlzfSxPLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmtleSksSy5rZXk9TCx0aGlzfSxPLnByb3Rv'@;
put 'dHlwZS5hbnk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLmFueT0hMCx0aGlzfSxPLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmNob2ljZSksSy5jaG9pY2U9TCx0aGlzLl91c2VBcmdzKE9iamVj'@;
put 'dC5rZXlzKEwpLm1hcChmdW5jdGlvbihVKXtyZXR1cm4gTFtVXX0pKSx0aGlzfSxPLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsudXNlKSxLLmNvbnRhaW5zPUwsdGhpc30sTy5wcm90b3R5cGUuX2RlY29kZT1m'@;
put 'dW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09VS5wYXJlbnQpcmV0dXJuIEwud3JhcFJlc3VsdChVLmNoaWxkcmVuWzBdLl9kZWNvZGUoTCxLKSk7dmFyIHJlLFc9VS5kZWZhdWx0LFk9ITAsWD1udWxsO2lmKG51bGwhPT1VLmtleSYmKFg9TC5lbnRlcktleShV'@;
put 'LmtleSkpLFUub3B0aW9uYWwpe3ZhciBlZT1udWxsO2lmKG51bGwhPT1VLmV4cGxpY2l0P2VlPVUuZXhwbGljaXQ6bnVsbCE9PVUuaW1wbGljaXQ/ZWU9VS5pbXBsaWNpdDpudWxsIT09VS50YWcmJihlZT1VLnRhZyksbnVsbCE9PWVlfHxVLmFueSl7aWYoWT10aGlzLl9wZWVrVGFnKEwsZWUs'@;
put 'VS5hbnkpLEwuaXNFcnJvcihZKSlyZXR1cm4gWX1lbHNle3ZhciBKPUwuc2F2ZSgpO3RyeXtudWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRhZyxMLEspOnRoaXMuX2RlY29kZUNob2ljZShMLEspLFk9ITB9Y2F0Y2h7WT0hMX1MLnJlc3RvcmUoSil9fWlmKFUub2JqJiZZ'@;
put 'JiYocmU9TC5lbnRlck9iamVjdCgpKSxZKXtpZihudWxsIT09VS5leHBsaWNpdCl7dmFyIGllPXRoaXMuX2RlY29kZVRhZyhMLFUuZXhwbGljaXQpO2lmKEwuaXNFcnJvcihpZSkpcmV0dXJuIGllO0w9aWV9dmFyIGxlPUwub2Zmc2V0O2lmKG51bGw9PT1VLnVzZSYmbnVsbD09PVUuY2hvaWNl'@;
put 'KXtVLmFueSYmKEo9TC5zYXZlKCkpO3ZhciBtZT10aGlzLl9kZWNvZGVUYWcoTCxudWxsIT09VS5pbXBsaWNpdD9VLmltcGxpY2l0OlUudGFnLFUuYW55KTtpZihMLmlzRXJyb3IobWUpKXJldHVybiBtZTtVLmFueT9XPUwucmF3KEopOkw9bWV9aWYoSyYmSy50cmFjayYmbnVsbCE9PVUudGFn'@;
put 'JiZLLnRyYWNrKEwucGF0aCgpLGxlLEwubGVuZ3RoLCJ0YWdnZWQiKSxLJiZLLnRyYWNrJiZudWxsIT09VS50YWcmJksudHJhY2soTC5wYXRoKCksTC5vZmZzZXQsTC5sZW5ndGgsImNvbnRlbnQiKSxVLmFueXx8KFc9bnVsbD09PVUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoVS50YWcs'@;
put 'TCxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTCxLKSksTC5pc0Vycm9yKFcpKXJldHVybiBXO2lmKCFVLmFueSYmbnVsbD09PVUuY2hvaWNlJiZudWxsIT09VS5jaGlsZHJlbiYmVS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKFNlKXtTZS5fZGVjb2RlKEwsSyl9KSxVLmNvbnRhaW5zJiYoIm9j'@;
put 'dHN0ciI9PT1VLnRhZ3x8ImJpdHN0ciI9PT1VLnRhZykpe3ZhciBfZT1uZXcgZyhXKTtXPXRoaXMuX2dldFVzZShVLmNvbnRhaW5zLEwuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKF9lLEspfX1yZXR1cm4gVS5vYmomJlkmJihXPUwubGVhdmVPYmplY3QocmUpKSxudWxsPT09VS5rZXl8'@;
put 'fG51bGw9PT1XJiYhMCE9PVk/bnVsbCE9PVgmJkwuZXhpdEtleShYKTpMLmxlYXZlS2V5KFgsVS5rZXksVyksV30sTy5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PUx8fCJzZXQiPT09TD9udWxsOiJz'@;
put 'ZXFvZiI9PT1MfHwic2V0b2YiPT09TD90aGlzLl9kZWNvZGVMaXN0KEssTCxXLmFyZ3NbMF0sVSk6L3N0ciQvLnRlc3QoTCk/dGhpcy5fZGVjb2RlU3RyKEssTCxVKToib2JqaWQiPT09TCYmVy5hcmdzP3RoaXMuX2RlY29kZU9iamlkKEssVy5hcmdzWzBdLFcuYXJnc1sxXSxVKToib2JqaWQi'@;
put 'PT09TD90aGlzLl9kZWNvZGVPYmppZChLLG51bGwsbnVsbCxVKToiZ2VudGltZSI9PT1MfHwidXRjdGltZSI9PT1MP3RoaXMuX2RlY29kZVRpbWUoSyxMLFUpOiJudWxsXyI9PT1MP3RoaXMuX2RlY29kZU51bGwoSyxVKToiYm9vbCI9PT1MP3RoaXMuX2RlY29kZUJvb2woSyxVKToib2JqRGVz'@;
put 'YyI9PT1MP3RoaXMuX2RlY29kZVN0cihLLEwsVSk6ImludCI9PT1MfHwiZW51bSI9PT1MP3RoaXMuX2RlY29kZUludChLLFcuYXJncyYmVy5hcmdzWzBdLFUpOm51bGwhPT1XLnVzZT90aGlzLl9nZXRVc2UoVy51c2UsSy5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoSyxVKTpLLmVycm9y'@;
put 'KCJ1bmtub3duIHRhZzogIitMKX0sTy5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gVS51c2VEZWNvZGVyPXRoaXMuX3VzZShMLEspLEIobnVsbD09PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksVS51c2VEZWNvZGVy'@;
put 'PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLFUuaW1wbGljaXQhPT1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKFUudXNlRGVjb2Rlcj1VLnVzZURlY29kZXIuY2xvbmUoKSxVLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1VLmltcGxpY2l0KSxV'@;
put 'LnVzZURlY29kZXJ9LE8ucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGUsVz1udWxsLFk9ITE7cmV0dXJuIE9iamVjdC5rZXlzKFUuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKFgpe3ZhciBlZT1MLnNhdmUoKSxKPVUuY2hvaWNlW1hdO3Ry'@;
put 'eXt2YXIgcmU9Si5fZGVjb2RlKEwsSyk7aWYoTC5pc0Vycm9yKHJlKSlyZXR1cm4hMTtXPXt0eXBlOlgsdmFsdWU6cmV9LFk9ITB9Y2F0Y2h7cmV0dXJuIEwucmVzdG9yZShlZSksITF9cmV0dXJuITB9LHRoaXMpLFk/VzpMLmVycm9yKCJDaG9pY2Ugbm90IG1hdGNoZWQiKX0sTy5wcm90b3R5'@;
put 'cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyB5KEwsdGhpcy5yZXBvcnRlcil9LE8ucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oTCxLLFUpe3ZhciBXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5kZWZhdWx0fHxXLmRlZmF1bHQhPT1MKXt2YXIg'@;
put 'WT10aGlzLl9lbmNvZGVWYWx1ZShMLEssVSk7aWYodm9pZCAwIT09WSYmIXRoaXMuX3NraXBEZWZhdWx0KFksSyxVKSlyZXR1cm4gWX19LE8ucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1XLnBhcmVudClyZXR1'@;
put 'cm4gVy5jaGlsZHJlblswXS5fZW5jb2RlKEwsS3x8bmV3IEkpO3ZhciBKPW51bGw7aWYodGhpcy5yZXBvcnRlcj1LLFcub3B0aW9uYWwmJnZvaWQgMD09PUwpe2lmKG51bGw9PT1XLmRlZmF1bHQpcmV0dXJuO0w9Vy5kZWZhdWx0fXZhciBZPW51bGwsWD0hMTtpZihXLmFueSlKPXRoaXMuX2Ny'@;
put 'ZWF0ZUVuY29kZXJCdWZmZXIoTCk7ZWxzZSBpZihXLmNob2ljZSlKPXRoaXMuX2VuY29kZUNob2ljZShMLEspO2Vsc2UgaWYoVy5jb250YWlucylZPXRoaXMuX2dldFVzZShXLmNvbnRhaW5zLFUpLl9lbmNvZGUoTCxLKSxYPSEwO2Vsc2UgaWYoVy5jaGlsZHJlbilZPVcuY2hpbGRyZW4ubWFw'@;
put 'KGZ1bmN0aW9uKGxlKXtpZigibnVsbF8iPT09bGUuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIGxlLl9lbmNvZGUobnVsbCxLLEwpO2lmKG51bGw9PT1sZS5fYmFzZVN0YXRlLmtleSlyZXR1cm4gSy5lcnJvcigiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXkiKTt2YXIgbWU9Sy5lbnRlcktleShsZS5f'@;
put 'YmFzZVN0YXRlLmtleSk7aWYoIm9iamVjdCIhPXR5cGVvZiBMKXJldHVybiBLLmVycm9yKCJDaGlsZCBleHBlY3RlZCwgYnV0IGlucHV0IGlzIG5vdCBvYmplY3QiKTt2YXIgX2U9bGUuX2VuY29kZShMW2xlLl9iYXNlU3RhdGUua2V5XSxLLEwpO3JldHVybiBLLmxlYXZlS2V5KG1lKSxfZX0s'@;
put 'dGhpcykuZmlsdGVyKGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGV9KSxZPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWSk7ZWxzZSBpZigic2Vxb2YiPT09Vy50YWd8fCJzZXRvZiI9PT1XLnRhZyl7aWYoIVcuYXJnc3x8MSE9PVcuYXJncy5sZW5ndGgpcmV0dXJuIEsuZXJyb3IoIlRvbyBtYW55'@;
put 'IGFyZ3MgZm9yIDogIitXLnRhZyk7aWYoIUFycmF5LmlzQXJyYXkoTCkpcmV0dXJuIEsuZXJyb3IoInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXkiKTt2YXIgZWU9dGhpcy5jbG9uZSgpO2VlLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxZPXRoaXMuX2NyZWF0ZUVuY29kZXJC'@;
put 'dWZmZXIoTC5tYXAoZnVuY3Rpb24obGUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0sTCkuX2VuY29kZShsZSxLKX0sZWUpKX1lbHNlIG51bGwhPT1XLnVzZT9KPXRoaXMuX2dldFVzZShXLnVzZSxVKS5fZW5jb2RlKEwsSyk6KFk9dGhpcy5fZW5jb2RlUHJp'@;
put 'bWl0aXZlKFcudGFnLEwpLFg9ITApO2lmKCFXLmFueSYmbnVsbD09PVcuY2hvaWNlKXt2YXIgcmU9bnVsbCE9PVcuaW1wbGljaXQ/Vy5pbXBsaWNpdDpXLnRhZyxpZT1udWxsPT09Vy5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PXJlP251bGw9PT1XLnVzZSYmSy5lcnJv'@;
put 'cigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PVcudXNlJiYoSj10aGlzLl9lbmNvZGVDb21wb3NpdGUocmUsWCxpZSxZKSl9cmV0dXJuIG51bGwhPT1XLmV4cGxpY2l0JiYoSj10aGlzLl9lbmNvZGVDb21wb3NpdGUoVy5leHBsaWNpdCwhMSwiY29udGV4'@;
put 'dCIsSikpLEp9LE8ucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGUsVz1VLmNob2ljZVtMLnR5cGVdO3JldHVybiBXfHxCKCExLEwudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKFUuY2hvaWNl'@;
put 'KSkpLFcuX2VuY29kZShMLnZhbHVlLEspfSxPLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KEwpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxMKTtpZigib2JqaWQiPT09TCYmVS5hcmdzKXJldHVy'@;
put 'biB0aGlzLl9lbmNvZGVPYmppZChLLFUucmV2ZXJzZUFyZ3NbMF0sVS5hcmdzWzFdKTtpZigib2JqaWQiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoSyxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PUx8fCJ1dGN0aW1lIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoSyxMKTtp'@;
put 'ZigibnVsbF8iPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09THx8ImVudW0iPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlSW50KEssVS5hcmdzJiZVLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKEspO2lmKCJvYmpE'@;
put 'ZXNjIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLEwpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK0wpfSxPLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oTCl7cmV0dXJuL15bMC05IF0qJC8udGVzdChMKX0sTy5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVu'@;
put 'Y3Rpb24oTCl7cmV0dXJuL15bQS1aYS16MC05ICdcKFwpXCssXC1cLlwvOj1cP10qJC8udGVzdChMKX19LDg0NjU6KHVlLHEsXyk9Pnt2YXIgST1fKDU3MTcpO2Z1bmN0aW9uIHkoQil7dGhpcy5fcmVwb3J0ZXJTdGF0ZT17b2JqOm51bGwscGF0aDpbXSxvcHRpb25zOkJ8fHt9LGVycm9yczpb'@;
put 'XX19ZnVuY3Rpb24gZyhCLHcpe3RoaXMucGF0aD1CLHRoaXMucmV0aHJvdyh3KX1xLmI9eSx5LnByb3RvdHlwZS5pc0Vycm9yPWZ1bmN0aW9uKHcpe3JldHVybiB3IGluc3RhbmNlb2YgZ30seS5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0'@;
put 'dXJue29iajp3Lm9iaixwYXRoTGVuOncucGF0aC5sZW5ndGh9fSx5LnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGU7UC5vYmo9dy5vYmosUC5wYXRoPVAucGF0aC5zbGljZSgwLHcucGF0aExlbil9LHkucHJvdG90eXBlLmVudGVyS2V5PWZ1'@;
put 'bmN0aW9uKHcpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGgucHVzaCh3KX0seS5wcm90b3R5cGUuZXhpdEtleT1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO1AucGF0aD1QLnBhdGguc2xpY2UoMCx3LTEpfSx5LnByb3RvdHlwZS5sZWF2ZUtleT1mdW5jdGlv'@;
put 'bih3LFAsRil7dmFyIE89dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkodyksbnVsbCE9PU8ub2JqJiYoTy5vYmpbUF09Ril9LHkucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLmpvaW4oIi8iKX0seS5wcm90b3R5cGUuZW50'@;
put 'ZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlLFA9dy5vYmo7cmV0dXJuIHcub2JqPXt9LFB9LHkucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKHcpe3ZhciBQPXRoaXMuX3JlcG9ydGVyU3RhdGUsRj1QLm9iajtyZXR1cm4gUC5vYmo9dyxGfSx5LnBy'@;
put 'b3RvdHlwZS5lcnJvcj1mdW5jdGlvbih3KXt2YXIgUCxGPXRoaXMuX3JlcG9ydGVyU3RhdGUsTz13IGluc3RhbmNlb2YgZztpZihQPU8/dzpuZXcgZyhGLnBhdGgubWFwKGZ1bmN0aW9uKHope3JldHVybiJbIitKU09OLnN0cmluZ2lmeSh6KSsiXSJ9KS5qb2luKCIiKSx3Lm1lc3NhZ2V8fHcs'@;
put 'dy5zdGFjayksIUYub3B0aW9ucy5wYXJ0aWFsKXRocm93IFA7cmV0dXJuIE98fEYuZXJyb3JzLnB1c2goUCksUH0seS5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBQLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMu'@;
put 'aXNFcnJvcih3KT9udWxsOncsZXJyb3JzOlAuZXJyb3JzfTp3fSxJKGcsRXJyb3IpLGcucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24odyl7aWYodGhpcy5tZXNzYWdlPXcrIiBhdDogIisodGhpcy5wYXRofHwiKHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNh'@;
put 'cHR1cmVTdGFja1RyYWNlKHRoaXMsZyksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKFApe3RoaXMuc3RhY2s9UC5zdGFja31yZXR1cm4gdGhpc319LDE2MDoodWUscSxfKT0+e3ZhciBJPV8oNjgyNik7cS50YWdDbGFzcz17MDoidW5pdmVyc2Fs'@;
put 'IiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LHEudGFnQ2xhc3NCeU5hbWU9SS5fcmV2ZXJzZShxLnRhZ0NsYXNzKSxxLnRhZz17MDoiZW5kIiwxOiJib29sIiwyOiJpbnQiLDM6ImJpdHN0ciIsNDoib2N0c3RyIiw1OiJudWxsXyIsNjoib2JqaWQiLDc6Im9iakRl'@;
put 'c2MiLDg6ImV4dGVybmFsIiw5OiJyZWFsIiwxMDoiZW51bSIsMTE6ImVtYmVkIiwxMjoidXRmOHN0ciIsMTM6InJlbGF0aXZlT2lkIiwxNjoic2VxIiwxNzoic2V0IiwxODoibnVtc3RyIiwxOToicHJpbnRzdHIiLDIwOiJ0NjFzdHIiLDIxOiJ2aWRlb3N0ciIsMjI6ImlhNXN0ciIsMjM6InV0'@;
put 'Y3RpbWUiLDI0OiJnZW50aW1lIiwyNToiZ3JhcGhzdHIiLDI2OiJpc282NDZzdHIiLDI3OiJnZW5zdHIiLDI4OiJ1bmlzdHIiLDI5OiJjaGFyc3RyIiwzMDoiYm1wc3RyIn0scS50YWdCeU5hbWU9SS5fcmV2ZXJzZShxLnRhZyl9LDY4MjY6KHVlLHEsXyk9Pnt2YXIgST1xO0kuX3JldmVyc2U9'@;
put 'ZnVuY3Rpb24oZyl7dmFyIEI9e307cmV0dXJuIE9iamVjdC5rZXlzKGcpLmZvckVhY2goZnVuY3Rpb24odyl7KDB8dyk9PXcmJih3fD0wKSxCW2dbd11dPXd9KSxCfSxJLmRlcj1fKDE2MCl9LDE2NzE6KHVlLHEsXyk9Pnt2YXIgST1fKDU3MTcpLHk9Xyg5ODA5KSxnPXkuYmFzZSxCPXkuYmln'@;
put 'bnVtLHc9eS5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIFAoTil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPU4ubmFtZSx0aGlzLmVudGl0eT1OLHRoaXMudHJlZT1uZXcgRix0aGlzLnRyZWUuX2luaXQoTi5ib2R5KX1mdW5jdGlvbiBGKE4pe2cuTm9kZS5jYWxsKHRoaXMsImRlciIsTil9ZnVu'@;
put 'Y3Rpb24gTyhOLEwpe3ZhciBLPU4ucmVhZFVJbnQ4KEwpO2lmKE4uaXNFcnJvcihLKSlyZXR1cm4gSzt2YXIgVT13LnRhZ0NsYXNzW0s+PjZdLFc9ISgzMiZLKTtpZigzMSZ+SylLJj0zMTtlbHNle3ZhciBZPUs7Zm9yKEs9MDshKDEyOCZ+WSk7KXtpZihZPU4ucmVhZFVJbnQ4KEwpLE4uaXNF'@;
put 'cnJvcihZKSlyZXR1cm4gWTtLPDw9NyxLfD0xMjcmWX19cmV0dXJue2NsczpVLHByaW1pdGl2ZTpXLHRhZzpLLHRhZ1N0cjp3LnRhZ1tLXX19ZnVuY3Rpb24geihOLEwsSyl7dmFyIFU9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9yKFUpKXJldHVybiBVO2lmKCFMJiYxMjg9PT1VKXJldHVy'@;
put 'biBudWxsO2lmKCEoMTI4JlUpKXJldHVybiBVO3ZhciBXPTEyNyZVO2lmKFc+NClyZXR1cm4gTi5lcnJvcigibGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZyIpO1U9MDtmb3IodmFyIFk9MDtZPFc7WSsrKXtVPDw9ODt2YXIgWD1OLnJlYWRVSW50OChLKTtpZihOLmlzRXJyb3IoWCkpcmV0dXJu'@;
put 'IFg7VXw9WH1yZXR1cm4gVX11ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEwgaW5zdGFuY2VvZiBnLkRlY29kZXJCdWZmZXJ8fChMPW5ldyBnLkRlY29kZXJCdWZmZXIoTCxLKSksdGhpcy50cmVlLl9kZWNvZGUoTCxLKX0sSShGLGcuTm9kZSks'@;
put 'Ri5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oTCxLLFUpe2lmKEwuaXNFbXB0eSgpKXJldHVybiExO3ZhciBXPUwuc2F2ZSgpLFk9TyhMLCdGYWlsZWQgdG8gcGVlayB0YWc6ICInK0srJyInKTtyZXR1cm4gTC5pc0Vycm9yKFkpP1k6KEwucmVzdG9yZShXKSxZLnRhZz09PUt8fFkudGFn'@;
put 'U3RyPT09S3x8WS50YWdTdHIrIm9mIj09PUt8fFUpfSxGLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz1PKEwsJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mICInK0srJyInKTtpZihMLmlzRXJyb3IoVykpcmV0dXJuIFc7dmFyIFk9eihMLFcucHJpbWl0aXZlLCdG'@;
put 'YWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytLKyciJyk7aWYoTC5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCFVJiZXLnRhZyE9PUsmJlcudGFnU3RyIT09SyYmVy50YWdTdHIrIm9mIiE9PUspcmV0dXJuIEwuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6ICInK0srJyInKTtpZihXLnByaW1p'@;
put 'dGl2ZXx8bnVsbCE9PVkpcmV0dXJuIEwuc2tpcChZLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicrSysnIicpO3ZhciBYPUwuc2F2ZSgpLGVlPXRoaXMuX3NraXBVbnRpbEVuZChMLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3Jl'@;
put 'dHVybiBMLmlzRXJyb3IoZWUpP2VlOihZPUwub2Zmc2V0LVgub2Zmc2V0LEwucmVzdG9yZShYKSxMLnNraXAoWSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0srJyInKSl9LEYucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24oTCxLKXtmb3IoOzspe3ZhciBVPU8oTCxLKTtp'@;
put 'ZihMLmlzRXJyb3IoVSkpcmV0dXJuIFU7dmFyIFksVz16KEwsVS5wcmltaXRpdmUsSyk7aWYoTC5pc0Vycm9yKFcpKXJldHVybiBXO2lmKFk9VS5wcmltaXRpdmV8fG51bGwhPT1XP0wuc2tpcChXKTp0aGlzLl9za2lwVW50aWxFbmQoTCxLKSxMLmlzRXJyb3IoWSkpcmV0dXJuIFk7aWYoImVu'@;
put 'ZCI9PT1VLnRhZ1N0cilicmVha319LEYucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKEwsSyxVLFcpe2Zvcih2YXIgWT1bXTshTC5pc0VtcHR5KCk7KXt2YXIgWD10aGlzLl9wZWVrVGFnKEwsImVuZCIpO2lmKEwuaXNFcnJvcihYKSlyZXR1cm4gWDt2YXIgZWU9VS5kZWNvZGUoTCwi'@;
put 'ZGVyIixXKTtpZihMLmlzRXJyb3IoZWUpJiZYKWJyZWFrO1kucHVzaChlZSl9cmV0dXJuIFl9LEYucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24oTCxLKXtpZigiYml0c3RyIj09PUspe3ZhciBVPUwucmVhZFVJbnQ4KCk7cmV0dXJuIEwuaXNFcnJvcihVKT9VOnt1bnVzZWQ6VSxkYXRh'@;
put 'OkwucmF3KCl9fWlmKCJibXBzdHIiPT09Syl7dmFyIFc9TC5yYXcoKTtpZihXLmxlbmd0aCUyPT0xKXJldHVybiBMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2Zvcih2YXIgWT0iIixYPTA7WDxXLmxlbmd0aC8yO1grKylZKz1TdHJp'@;
put 'bmcuZnJvbUNoYXJDb2RlKFcucmVhZFVJbnQxNkJFKDIqWCkpO3JldHVybiBZfWlmKCJudW1zdHIiPT09Syl7dmFyIGVlPUwucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKGVlKT9lZTpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3Ry'@;
put 'IHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PUspcmV0dXJuIEwucmF3KCk7aWYoIm9iakRlc2MiPT09SylyZXR1cm4gTC5yYXcoKTtpZigicHJpbnRzdHIiPT09Syl7dmFyIEo9TC5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihK'@;
put 'KT9KOkwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9cmV0dXJuL3N0ciQvLnRlc3QoSyk/TC5yYXcoKS50b1N0cmluZygpOkwuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIp'@;
put 'fSxGLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oTCxLLFUpe2Zvcih2YXIgVyxZPVtdLFg9MDshTC5pc0VtcHR5KCk7KXt2YXIgZWU9TC5yZWFkVUludDgoKTtYPDw9NyxYfD0xMjcmZWUsMTI4JmVlfHwoWS5wdXNoKFgpLFg9MCl9aWYoMTI4JmVlJiZZLnB1c2goWCksVz1VP1k6'@;
put 'W1lbMF0vNDB8MCxZWzBdJTQwXS5jb25jYXQoWS5zbGljZSgxKSksSyl7dmFyIGllPUtbVy5qb2luKCIgIildO3ZvaWQgMD09PWllJiYoaWU9S1tXLmpvaW4oIi4iKV0pLHZvaWQgMCE9PWllJiYoVz1pZSl9cmV0dXJuIFd9LEYucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKEwsSyl7'@;
put 'dmFyIFU9TC5yYXcoKS50b1N0cmluZygpO2lmKCJnZW50aW1lIj09PUspdmFyIFc9MHxVLnNsaWNlKDAsNCksWT0wfFUuc2xpY2UoNCw2KSxYPTB8VS5zbGljZSg2LDgpLGVlPTB8VS5zbGljZSg4LDEwKSxKPTB8VS5zbGljZSgxMCwxMikscmU9MHxVLnNsaWNlKDEyLDE0KTtlbHNle2lmKCJ1'@;
put 'dGN0aW1lIiE9PUspcmV0dXJuIEwuZXJyb3IoIkRlY29kaW5nICIrSysiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTtXPTB8VS5zbGljZSgwLDIpLFk9MHxVLnNsaWNlKDIsNCksWD0wfFUuc2xpY2UoNCw2KSxlZT0wfFUuc2xpY2UoNiw4KSxKPTB8VS5zbGljZSg4LDEwKSxyZT0wfFUu'@;
put 'c2xpY2UoMTAsMTIpLFc9Vzw3MD8yZTMrVzoxOTAwK1d9cmV0dXJuIERhdGUuVVRDKFcsWS0xLFgsZWUsSixyZSwwKX0sRi5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oTCl7cmV0dXJuIG51bGx9LEYucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKEwpe3ZhciBLPUwucmVh'@;
put 'ZFVJbnQ4KCk7cmV0dXJuIEwuaXNFcnJvcihLKT9LOjAhPT1LfSxGLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKEwsSyl7dmFyIFU9TC5yYXcoKSxXPW5ldyBCKFUpO3JldHVybiBLJiYoVz1LW1cudG9TdHJpbmcoMTApXXx8VyksV30sRi5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbihM'@;
put 'LEspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBMJiYoTD1MKEspKSxMLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sODMwNzoodWUscSxfKT0+e3ZhciBJPXE7SS5kZXI9XygxNjcxKSxJLnBlbT1fKDk2MzEpfSw5NjMxOih1ZSxxLF8pPT57dmFyIEk9Xyg1NzE3KSx5PV8oODc2NCkuQnVm'@;
put 'ZmVyLGc9XygxNjcxKTtmdW5jdGlvbiBCKHcpe2cuY2FsbCh0aGlzLHcpLHRoaXMuZW5jPSJwZW0ifUkoQixnKSx1ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRil7Zm9yKHZhciBPPVAudG9TdHJpbmcoKS5zcGxpdCgvW1xyXG5dKy9nKSx6PUYubGFiZWwudG9V'@;
put 'cHBlckNhc2UoKSxOPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxMPS0xLEs9LTEsVT0wO1U8Ty5sZW5ndGg7VSsrKXt2YXIgVz1PW1VdLm1hdGNoKE4pO2lmKG51bGwhPT1XJiZXWzJdPT09eil7aWYoLTEhPT1MKXtpZigiRU5EIiE9PVdbMV0pYnJlYWs7Sz1VO2JyZWFrfWlm'@;
put 'KCJCRUdJTiIhPT1XWzFdKWJyZWFrO0w9VX19aWYoLTE9PT1MfHwtMT09PUspdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK3opO3ZhciBZPU8uc2xpY2UoTCsxLEspLmpvaW4oIiIpO1kucmVwbGFjZSgvW15hLXowLTlcK1wvPV0rL2dpLCIiKTt2YXIgWD1u'@;
put 'ZXcgeShZLCJiYXNlNjQiKTtyZXR1cm4gZy5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxYLEYpfX0sNjk4NDoodWUscSxfKT0+e3ZhciBJPV8oNTcxNykseT1fKDg3NjQpLkJ1ZmZlcixnPV8oOTgwOSksQj1nLmJhc2Usdz1nLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gUChOKXt0aGlzLmVu'@;
put 'Yz0iZGVyIix0aGlzLm5hbWU9Ti5uYW1lLHRoaXMuZW50aXR5PU4sdGhpcy50cmVlPW5ldyBGLHRoaXMudHJlZS5faW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7Qi5Ob2RlLmNhbGwodGhpcywiZGVyIixOKX1mdW5jdGlvbiBPKE4pe3JldHVybiBOPDEwPyIwIitOOk59dWUuZXhwb3J0cz1Q'@;
put 'LFAucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihMLEspe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShMLEspLmpvaW4oKX0sSShGLEIuTm9kZSksRi5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihMLEssVSxXKXt2YXIgSixZPWZ1bmN0aW9uIHooTixMLEssVSl7dmFyIFc7'@;
put 'aWYoInNlcW9mIj09PU4/Tj0ic2VxIjoic2V0b2YiPT09TiYmKE49InNldCIpLHcudGFnQnlOYW1lLmhhc093blByb3BlcnR5KE4pKVc9dy50YWdCeU5hbWVbTl07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIE58fCgwfE4pIT09TilyZXR1cm4gVS5lcnJvcigiVW5rbm93biB0YWc6ICIrTik7'@;
put 'Vz1OfXJldHVybiBXPj0zMT9VLmVycm9yKCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooTHx8KFd8PTMyKSxXfD13LnRhZ0NsYXNzQnlOYW1lW0t8fCJ1bml2ZXJzYWwiXTw8Nil9KEwsSyxVLHRoaXMucmVwb3J0ZXIpO2lmKFcubGVuZ3RoPDEyOClyZXR1cm4oSj1u'@;
put 'ZXcgeSgyKSlbMF09WSxKWzFdPVcubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osV10pO2Zvcih2YXIgWD0xLGVlPVcubGVuZ3RoO2VlPj0yNTY7ZWU+Pj04KVgrKzsoSj1uZXcgeSgyK1gpKVswXT1ZLEpbMV09MTI4fFgsZWU9MStYO2Zvcih2YXIgcmU9Vy5sZW5ndGg7cmU+'@;
put 'MDtlZS0tLHJlPj49OClKW2VlXT0yNTUmcmU7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osV10pfSxGLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEwsSyl7aWYoImJpdHN0ciI9PT1LKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfEwudW51c2Vk'@;
put 'LEwuZGF0YV0pO2lmKCJibXBzdHIiPT09Syl7Zm9yKHZhciBVPW5ldyB5KDIqTC5sZW5ndGgpLFc9MDtXPEwubGVuZ3RoO1crKylVLndyaXRlVUludDE2QkUoTC5jaGFyQ29kZUF0KFcpLDIqVyk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVSl9cmV0dXJuIm51bXN0ciI9PT1L'@;
put 'P3RoaXMuX2lzTnVtc3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09Sz90aGlzLl9pc1ByaW50c3Ry'@;
put 'KEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwg'@;
put 'bGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChLKXx8Im9iakRlc2MiPT09Sz90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMu'@;
put 'cmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTCxLLFUpe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmlu'@;
put 'ZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtMPUtbTF0uc3BsaXQoL1tcc1wuXSsvZyk7Zm9yKHZhciBXPTA7VzxM'@;
put 'Lmxlbmd0aDtXKyspTFtXXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoTCkpZm9yKEw9TC5zbGljZSgpLFc9MDtXPEwubGVuZ3RoO1crKylMW1ddfD0wO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJy'@;
put 'YXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoTCkpO2lmKCFVKXtpZihMWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7TC5zcGxpY2UoMCwyLDQwKkxbMF0rTFsxXSl9dmFyIFk9MDtmb3IoVz0wO1c8TC5s'@;
put 'ZW5ndGg7VysrKXt2YXIgWD1MW1ddO2ZvcihZKys7WD49MTI4O1g+Pj03KVkrK312YXIgZWU9bmV3IHkoWSksSj1lZS5sZW5ndGgtMTtmb3IoVz1MLmxlbmd0aC0xO1c+PTA7Vy0tKWZvcihlZVtKLS1dPTEyNyYoWD1MW1ddKTsoWD4+PTcpPjA7KWVlW0otLV09MTI4fDEyNyZYO3JldHVybiB0'@;
put 'aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGVlKX0sRi5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oTCxLKXt2YXIgVSxXPW5ldyBEYXRlKEwpO3JldHVybiJnZW50aW1lIj09PUs/VT1bTyhXLmdldEZ1bGxZZWFyKCkpLE8oVy5nZXRVVENNb250aCgpKzEpLE8oVy5nZXRVVENEYXRl'@;
put 'KCkpLE8oVy5nZXRVVENIb3VycygpKSxPKFcuZ2V0VVRDTWludXRlcygpKSxPKFcuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PUs/VT1bTyhXLmdldEZ1bGxZZWFyKCklMTAwKSxPKFcuZ2V0VVRDTW9udGgoKSsxKSxPKFcuZ2V0VVRDRGF0ZSgpKSxPKFcuZ2V0'@;
put 'VVRDSG91cnMoKSksTyhXLmdldFVUQ01pbnV0ZXMoKSksTyhXLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKFUsIm9jdHN0ciIpfSxGLnBy'@;
put 'b3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sRi5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihMLEspe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0'@;
put 'cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoTCkpO0w9S1tMXX1pZigibnVtYmVyIiE9'@;
put 'dHlwZW9mIEwmJiF5LmlzQnVmZmVyKEwpKXt2YXIgVT1MLnRvQXJyYXkoKTshTC5zaWduJiYxMjgmVVswXSYmVS51bnNoaWZ0KDApLEw9bmV3IHkoVSl9aWYoeS5pc0J1ZmZlcihMKSl7dmFyIFc9TC5sZW5ndGg7MD09PUwubGVuZ3RoJiZXKys7dmFyIFg9bmV3IHkoVyk7cmV0dXJuIEwuY29w'@;
put 'eShYKSwwPT09TC5sZW5ndGgmJihYWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWCl9aWYoTDwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk7aWYoTDwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsTF0pO1c9MTtmb3IodmFyIFk9'@;
put 'TDtZPj0yNTY7WT4+PTgpVysrO2ZvcihZPShYPW5ldyBBcnJheShXKSkubGVuZ3RoLTE7WT49MDtZLS0pWFtZXT0yNTUmTCxMPj49ODtyZXR1cm4gMTI4JlhbMF0mJlgudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyB5KFgpKX0sRi5wcm90b3R5cGUuX2VuY29kZUJv'@;
put 'b2w9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTD8yNTU6MCl9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTCxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTCYmKEw9TChLKSksTC5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sRi5wcm90b3R5cGUu'@;
put 'X3NraXBEZWZhdWx0PWZ1bmN0aW9uKEwsSyxVKXt2YXIgWSxXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5kZWZhdWx0KXJldHVybiExO3ZhciBYPUwuam9pbigpO2lmKHZvaWQgMD09PVcuZGVmYXVsdEJ1ZmZlciYmKFcuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShXLmRl'@;
put 'ZmF1bHQsSyxVKS5qb2luKCkpLFgubGVuZ3RoIT09Vy5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoWT0wO1k8WC5sZW5ndGg7WSsrKWlmKFhbWV0hPT1XLmRlZmF1bHRCdWZmZXJbWV0pcmV0dXJuITE7cmV0dXJuITB9fSw2NTc5Oih1ZSxxLF8pPT57dmFyIEk9cTtJLmRlcj1f'@;
put 'KDY5ODQpLEkucGVtPV8oMjg4Myl9LDI4ODM6KHVlLHEsXyk9Pnt2YXIgST1fKDU3MTcpLHk9Xyg2OTg0KTtmdW5jdGlvbiBnKEIpe3kuY2FsbCh0aGlzLEIpLHRoaXMuZW5jPSJwZW0ifUkoZyx5KSx1ZS5leHBvcnRzPWcsZy5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHcsUCl7Zm9yKHZh'@;
put 'ciBPPXkucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdykudG9TdHJpbmcoImJhc2U2NCIpLHo9WyItLS0tLUJFR0lOICIrUC5sYWJlbCsiLS0tLS0iXSxOPTA7TjxPLmxlbmd0aDtOKz02NCl6LnB1c2goTy5zbGljZShOLE4rNjQpKTtyZXR1cm4gei5wdXNoKCItLS0tLUVORCAiK1AubGFi'@;
put 'ZWwrIi0tLS0tIiksei5qb2luKCJcbiIpfX0sNDU5MDpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJLHkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7'@;
put 'dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5s'@;
put 'ZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6eS5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3Ry'@;
put 'eXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpfKDk1MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6'@;
put 'Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4'@;
put 'O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5Lmlz'@;
put 'QXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4g'@;
put 'dGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2cs'@;
put 'IiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51'@;
put 'bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0'@;
put 'aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJy'@;
put 'YXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5s'@;
put 'ZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMs'@;
put 'dGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlz'@;
put 'LndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5l'@;
put 'dyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4'@;
put 'PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+'@;
put 'MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUgl'@;
put 'QyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIG9lPTE7Zm9yKG09eihwLEEscC5sZW5ndGgs'@;
put 'YiksQT0wO0E8ajtBKyspb2UqPWI7dGhpcy5pbXVsbihvZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3Ro'@;
put 'KTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwp'@;
put 'O3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEm'@;
put 'JjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCks'@;
put 'dGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0'@;
put 'MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwy'@;
put 'MDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7'@;
put 'dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LG9lPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1h'@;
put 'eCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK29lKS82NzEwODg2NHwwLG9lPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfG9lLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0t'@;
put 'LGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIx'@;
put 'NSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDsp'@;
put 'eD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIG9lPXRoaXMuY2xvbmUoKTtmb3Iob2UubmVnYXRpdmU9MDshb2UuaXNaZXJvKCk7KXt2YXIgdGU9b2UubW9kbihB'@;
put 'KS50b1N0cmluZyhwKTt4PShvZT1vZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJh'@;
put 'c2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRz'@;
put 'WzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlM'@;
put 'aWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBh'@;
put 'cnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNl'@;
put 'e2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIo'@;
put 'cCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9'@;
put 'PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFy'@;
put 'IGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2Ir'@;
put 'Kyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5j'@;
put 'dGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlz'@;
put 'LmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVy'@;
put 'bygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRz'@;
put 'W2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5s'@;
put 'ZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1m'@;
put 'dW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw'@;
put 'ZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0'@;
put 'aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0'@;
put 'aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0'@;
put 'aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3Ro'@;
put 'aXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5j'@;
put 'dGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRo'@;
put 'aXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9m'@;
put 'IHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7'@;
put 'aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0w'@;
put 'LGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8'@;
put 'Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMu'@;
put 'bGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVn'@;
put 'YXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6'@;
put 'cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0'@;
put 'aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1w'@;
put 'KTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4y'@;
put 'Nix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVn'@;
put 'YXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxvZT0wfENbMF0sdGU9ODE5MSZv'@;
put 'ZSxzZT1vZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsYXQ9MHxDWzJdLE1lPTgxOTEmYXQsdmU9YXQ+Pj4xMyxYZT0wfENbM10samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9'@;
put 'VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+'@;
put 'MTMsc2k9MHxUWzFdLFF0PTgxOTEmc2ksc249c2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5y'@;
put 'PTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsQm49MHxUWzddLHJuPTgxOTEmQm4senQ9Qm4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5n'@;
put 'dGg9MTk7dmFyIGhvPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEU9TWF0'@;
put 'aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIE1pPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8'@;
put 'MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKE1pPj4+MjYpfDAsTWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGgu'@;
put 'aW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVs'@;
put 'KHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsUnQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxF'@;
put 'PUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStN'@;
put 'YXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+'@;
put 'MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQp'@;
put 'fDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGhuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8'@;
put 'MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChz'@;
put 'ZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVs'@;
put 'KFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKGplLGhuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsV3Qp'@;
put 'fDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2'@;
put 'YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMs'@;
put 'RT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFl'@;
put 'LHNuKXwwLEU9RStNYXRoLmltdWwoUmUsaG4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoRGUsV3Qp'@;
put 'fDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmltdWwoTWUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8'@;
put 'MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChz'@;
put 'ZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVs'@;
put 'KG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsV3Qp'@;
put 'fDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFV0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxF'@;
put 'PUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStN'@;
put 'YXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+'@;
put 'MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQp'@;
put 'fDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8'@;
put 'MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09'@;
put 'bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGgu'@;
put 'aW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVs'@;
put 'KHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxF'@;
put 'PUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStN'@;
put 'YXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGgu'@;
put 'aW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5p'@;
put 'bXVsKGplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE1lLHJuKXwwLG09KG09bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxybil8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUs'@;
put 'Y24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIElvPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8'@;
put 'MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKElvPj4+MjYpfDAsSW8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGgu'@;
put 'aW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVs'@;
put 'KE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUs'@;
put 'V2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoamUscm4pfDAsbT0obT1tK01hdGguaW11bChqZSx6'@;
put 'dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bChNZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwo'@;
put 'VWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09'@;
put 'TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQs'@;
put 'c3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8'@;
put 'MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUscm4pfDAsbT0obT1tK01hdGguaW11bChSZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9'@;
put 'QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bChqZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGorKEU9RStNYXRoLmltdWwoTWUsWHQpfDApfDApKygoODE5MSYobT0obT1t'@;
put 'K01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVs'@;
put 'KHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxU'@;
put 'dCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09'@;
put 'KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIGdv'@;
put 'PShqKyhFPUUrTWF0aC5pbXVsKGplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGdvPj4+MjYpfDAsZ28mPTY3MTA4ODYzLEU9TWF0'@;
put 'aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8'@;
put 'MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1tK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9'@;
put 'QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGorKEU9RStNYXRoLmltdWwoUmUsWHQpfDApfDApKygoODE5MSYobT0obT1t'@;
put 'K01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVs'@;
put 'KHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6'@;
put 'dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxmbil8MDt2YXIgY289KGorKEU9RStNYXRoLmltdWwo'@;
put 'a2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09'@;
put 'TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQs'@;
put 'Y24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIF9vPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8'@;
put 'MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKF9vPj4+MjYpfDAsX28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGgu'@;
put 'aW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgT289KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVs'@;
put 'KE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoT28+Pj4yNil8MCxPbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZuKSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2'@;
put 'YXIgSG89KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjM7'@;
put 'dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikpKyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBd'@;
put 'PWhvLEhbMV09TWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPUlvLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPWdvLEhbMTNdPVFuLEhbMTRdPWNvLEhbMTVdPV9vLEhbMTZdPU9vLEhbMTddPUhvLEhbMThdPXRpLDAhPT1qJiYo'@;
put 'SFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5s'@;
put 'ZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBYKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxl'@;
put 'bmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8'@;
put 'cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3Ro'@;
put 'LS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1'@;
put 'cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgp'@;
put 'e2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29z'@;
put 'KDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxvZT0wO29lPFQ7b2UrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W29lK3dlXSxKZT1DW29lK3dlXSxhdD14W29lK3dlK2pdLE1lPUNbb2Urd2Ural0sdmU9dGUqYXQtc2UqTWU7TWU9dGUq'@;
put 'TWUrc2UqYXQseFtvZSt3ZV09VWUrKGF0PXZlKSxDW29lK3dlXT1KZStNZSx4W29lK3dlK2pdPVVlLWF0LENbb2Urd2Ural09SmUtTWUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4'@;
put 'PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFd'@;
put 'LHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNd'@;
put 'L2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihU'@;
put 'Pj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1'@;
put 'bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLG9lPW5ldyBBcnJheShD'@;
put 'KSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxv'@;
put 'ZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSpvZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSpvZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQp'@;
put 'LHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7'@;
put 'cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlz'@;
put 'LHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0'@;
put 'aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyks'@;
put 'dGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMu'@;
put 'Y2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9'@;
put 'KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgu'@;
put 'bXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7'@;
put 'VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4'@;
put 'XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3Rv'@;
put 'dHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9'@;
put 'TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNb'@;
put 'bStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIG9lPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8b2U+Pj5ULEE9b2Uman1yZXR1cm4gRSYmMCE9'@;
put 'PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4o'@;
put 'cCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0'@;
put 'aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3Jl'@;
put 'dHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29y'@;
put 'a3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlz'@;
put 'LnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTow'@;
put 'IT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0'@;
put 'aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMu'@;
put 'd29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhp'@;
put 'cy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53'@;
put 'b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9u'@;
put 'KHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJz'@;
put 'PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4'@;
put 'XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4'@;
put 'XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlz'@;
put 'LnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5s'@;
put 'ZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBvZT1DLmNsb25lKCkuX2lz'@;
put 'aGxuc3VibXVsKFQsMSxFKTswPT09b2UubmVnYXRpdmUmJihDPW9lLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRo'@;
put 'Lm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0'@;
put 'cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9'@;
put 'OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRo'@;
put 'aXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09'@;
put 'YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4o'@;
put 'cC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxI'@;
put 'fSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJu'@;
put 'IHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51'@;
put 'c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIg'@;
put 'Yj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFy'@;
put 'IEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihw'@;
put 'KXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJngu'@;
put 'aXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBvZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmb2U8MjY7KytvZSx0ZTw8PTEpO2lmKG9lPjApZm9yKGIuaXVzaHJuKG9lKTtv'@;
put 'ZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4w'@;
put 'OykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdj'@;
put 'ZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgb2UsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1u'@;
put 'ZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2'@;
put 'YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1y'@;
put 'ZXR1cm4ob2U9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmb2UuaWFkZChwKSxvZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCks'@;
put 'eD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigx'@;
put 'KTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9'@;
put 'LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZw'@;
put 'fSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDsw'@;
put 'IT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlv'@;
put 'bigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0'@;
put 'cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1m'@;
put 'dW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlw'@;
put 'ZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMh'@;
put 'PT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1'@;
put 'bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7'@;
put 'cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9'@;
put 'PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51'@;
put 'bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZy'@;
put 'b21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0'@;
put 'aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5j'@;
put 'dGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5j'@;
put 'dGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJl'@;
put 'ZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl'@;
put 'cnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlz'@;
put 'LnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVk'@;
put 'SW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVk'@;
put 'LCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlz'@;
put 'LnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgo'@;
put 'KSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUg'@;
put 'ZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3Ry'@;
put 'aW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKFYpe1NlLmNhbGwodGhpcyxWKSx0'@;
put 'aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2lu'@;
put 'dm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9'@;
put 'bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50'@;
put 'bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0s'@;
put 'aWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0'@;
put 'MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109'@;
put 'SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHAp'@;
put 'e3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJu'@;
put 'IDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3gr'@;
put 'Kyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYocmVbcF0pcmV0dXJuIHJlW3BdO3ZhciBiO2lmKCJrMjU2'@;
put 'Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gcmVbcF09YixifSxTZS5wcm90b3R5'@;
put 'cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0'@;
put 'aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmlt'@;
put 'ZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRk'@;
put 'PWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9'@;
put 'cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQo'@;
put 'dGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShw'@;
put 'KSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhp'@;
put 'cy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAu'@;
put 'aXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8o'@;
put 'KSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRo'@;
put 'aXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLG9lPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdl'@;
put 'LmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7b2U9b2UucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gb2V9LFNlLnByb3RvdHlwZS5pbnZtPWZ1'@;
put 'bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygx'@;
put 'KS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9'@;
put 'MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sb2U9bS0xO29lPj0wO29lLS0pe3ZhciB0ZT1BPj5vZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8'@;
put 'PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1vZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0s'@;
put 'U2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyB6ZShwKX0sQih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhp'@;
put 'cy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8o'@;
put 'KXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1U'@;
put 'O3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDAp'@;
put 'Ll9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlz'@;
put 'dWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT1fLm5t'@;
put 'ZCh1ZSksdGhpcyl9LDkyODI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KSx5PV8oNTEwOCk7ZnVuY3Rpb24gZyhWZSl7cmV0dXJuKGc9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oa2Upe3Jl'@;
put 'dHVybiB0eXBlb2Yga2V9OmZ1bmN0aW9uKGtlKXtyZXR1cm4ga2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmtlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZrZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGtlfSkoVmUpfWZ1bmN0aW9uIEIoVmUsa2Upe2Zvcih2YXIg'@;
put 'QWU9MDtBZTxrZS5sZW5ndGg7QWUrKyl7dmFyIF90PWtlW0FlXTtfdC5lbnVtZXJhYmxlPV90LmVudW1lcmFibGV8fCExLF90LmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gX3QmJihfdC53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFZlLFAoX3Qua2V5KSxfdCl9fWZ1bmN0'@;
put 'aW9uIHcoVmUsa2UsQWUpe3JldHVybiBrZSYmQihWZS5wcm90b3R5cGUsa2UpLEFlJiZCKFZlLEFlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVmUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksVmV9ZnVuY3Rpb24gUChWZSl7dmFyIGtlPWZ1bmN0aW9uIEYoVmUsa2Upe2lmKCJvYmplY3Qi'@;
put 'IT09ZyhWZSl8fG51bGw9PT1WZSlyZXR1cm4gVmU7dmFyIEFlPVZlW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09QWUpe3ZhciBfdD1BZS5jYWxsKFZlLGtlfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09ZyhfdCkpcmV0dXJuIF90O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q'@;
put 'cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09a2U/U3RyaW5nOk51bWJlcikoVmUpfShWZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1nKGtlKT9rZTpTdHJpbmcoa2UpfXZhciB6ZSxWLE49XygyMTM2KS5jb2RlcyxMPU4uRVJS'@;
put 'X0FNQklHVU9VU19BUkdVTUVOVCxLPU4uRVJSX0lOVkFMSURfQVJHX1RZUEUsVT1OLkVSUl9JTlZBTElEX0FSR19WQUxVRSxXPU4uRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFLFk9Ti5FUlJfTUlTU0lOR19BUkdTLFg9Xyg1OTYxKSxKPV8oOTUzOSkuaW5zcGVjdCxyZT1fKDk1MzkpLnR5cGVz'@;
put 'LGllPXJlLmlzUHJvbWlzZSxsZT1yZS5pc1JlZ0V4cCxtZT1fKDgxNjIpKCksX2U9Xyg1NjI0KSgpLFRlPV8oMTkyNCkoIlJlZ0V4cC5wcm90b3R5cGUudGVzdCIpO2Z1bmN0aW9uIEMoKXt2YXIgVmU9Xyg5MTU4KTt6ZT1WZS5pc0RlZXBFcXVhbCxWPVZlLmlzRGVlcFN0cmljdEVxdWFsfXZh'@;
put 'ciBFPSExLG09dWUuZXhwb3J0cz13ZSxBPXt9O2Z1bmN0aW9uIG9lKFZlKXt0aHJvdyBWZS5tZXNzYWdlIGluc3RhbmNlb2YgRXJyb3I/VmUubWVzc2FnZTpuZXcgWChWZSl9ZnVuY3Rpb24gc2UoVmUsa2UsQWUsX3Qpe2lmKCFBZSl7dmFyIG50PSExO2lmKDA9PT1rZSludD0hMCxfdD0iTm8g'@;
put 'dmFsdWUgYXJndW1lbnQgcGFzc2VkIHRvIGBhc3NlcnQub2soKWAiO2Vsc2UgaWYoX3QgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBfdDt2YXIgUWU9bmV3IFgoe2FjdHVhbDpBZSxleHBlY3RlZDohMCxtZXNzYWdlOl90LG9wZXJhdG9yOiI9PSIsc3RhY2tTdGFydEZuOlZlfSk7dGhyb3cgUWUu'@;
put 'Z2VuZXJhdGVkTWVzc2FnZT1udCxRZX19ZnVuY3Rpb24gd2UoKXtmb3IodmFyIFZlPWFyZ3VtZW50cy5sZW5ndGgsa2U9bmV3IEFycmF5KFZlKSxBZT0wO0FlPFZlO0FlKyspa2VbQWVdPWFyZ3VtZW50c1tBZV07c2UuYXBwbHkodm9pZCAwLFt3ZSxrZS5sZW5ndGhdLmNvbmNhdChrZSkpfW0u'@;
put 'ZmFpbD1mdW5jdGlvbiB0ZShWZSxrZSxBZSxfdCxudCl7dmFyIHVuLFFlPWFyZ3VtZW50cy5sZW5ndGg7aWYoMD09PVFlP3VuPSJGYWlsZWQiOjE9PT1RZT8oQWU9VmUsVmU9dm9pZCAwKTooITE9PT1FJiYoRT0hMCwoSS5lbWl0V2FybmluZz9JLmVtaXRXYXJuaW5nOnkud2Fybi5iaW5kKHkp'@;
put 'KSgiYXNzZXJ0LmZhaWwoKSB3aXRoIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBhc3NlcnQuc3RyaWN0RXF1YWwoKSBpbnN0ZWFkIG9yIG9ubHkgcGFzcyBhIG1lc3NhZ2UuIiwiRGVwcmVjYXRpb25XYXJuaW5nIiwiREVQMDA5NCIpKSwyPT09UWUm'@;
put 'JihfdD0iIT0iKSksQWUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBBZTt2YXIgTXQ9e2FjdHVhbDpWZSxleHBlY3RlZDprZSxvcGVyYXRvcjp2b2lkIDA9PT1fdD8iZmFpbCI6X3Qsc3RhY2tTdGFydEZuOm50fHx0ZX07dm9pZCAwIT09QWUmJihNdC5tZXNzYWdlPUFlKTt2YXIgRHQ9bmV3IFgo'@;
put 'TXQpO3Rocm93IHVuJiYoRHQubWVzc2FnZT11bixEdC5nZW5lcmF0ZWRNZXNzYWdlPSEwKSxEdH0sbS5Bc3NlcnRpb25FcnJvcj1YLG0ub2s9d2UsbS5lcXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3Rl'@;
put 'ZCIpO2tlIT1BZSYmb2Uoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiI9PSIsc3RhY2tTdGFydEZuOlZlfSl9LG0ubm90RXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0'@;
put 'ZWQiKTtrZT09QWUmJm9lKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoiIT0iLHN0YWNrU3RhcnRGbjpWZX0pfSxtLmRlZXBFcXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBl'@;
put 'Y3RlZCIpO3ZvaWQgMD09PXplJiZDKCksemUoa2UsQWUpfHxvZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6ImRlZXBFcXVhbCIsc3RhY2tTdGFydEZuOlZlfSl9LG0ubm90RGVlcEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVu'@;
put 'Z3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09emUmJkMoKSx6ZShrZSxBZSkmJm9lKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoibm90RGVlcEVxdWFsIixzdGFja1N0YXJ0Rm46VmV9KX0sbS5kZWVwU3RyaWN0RXF1YWw9'@;
put 'ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT16ZSYmQygpLFYoa2UsQWUpfHxvZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVh'@;
put 'bCIsc3RhY2tTdGFydEZuOlZlfSl9LG0ubm90RGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIFVlKFZlLGtlLEFlKXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09emUmJkMoKSxWKFZlLGtlKSYmb2Uoe2FjdHVhbDpWZSxleHBl'@;
put 'Y3RlZDprZSxtZXNzYWdlOkFlLG9wZXJhdG9yOiJub3REZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpVZX0pfSxtLnN0cmljdEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7X2Uoa2Us'@;
put 'QWUpfHxvZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6InN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46VmV9KX0sbS5ub3RTdHJpY3RFcXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwi'@;
put 'LCJleHBlY3RlZCIpO19lKGtlLEFlKSYmb2Uoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJub3RTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlZlfSl9O3ZhciBKZT13KGZ1bmN0aW9uIFZlKGtlLEFlLF90KXt2YXIgbnQ9dGhpczsoZnVuY3Rpb24gTyhWZSxr'@;
put 'ZSl7aWYoIShWZSBpbnN0YW5jZW9mIGtlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsVmUpLEFlLmZvckVhY2goZnVuY3Rpb24oUWUpe1FlIGluIGtlJiYobnRbUWVdPXZvaWQgMCE9PV90JiYic3RyaW5nIj09dHlwZW9m'@;
put 'IF90W1FlXSYmbGUoa2VbUWVdKSYmVGUoa2VbUWVdLF90W1FlXSk/X3RbUWVdOmtlW1FlXSl9KX0pO2Z1bmN0aW9uIE1lKFZlLGtlLEFlLF90KXtpZigiZnVuY3Rpb24iIT10eXBlb2Yga2Upe2lmKGxlKGtlKSlyZXR1cm4gVGUoa2UsVmUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93'@;
put 'IG5ldyBLKCJleHBlY3RlZCIsWyJGdW5jdGlvbiIsIlJlZ0V4cCJdLGtlKTtpZigib2JqZWN0IiE9PWcoVmUpfHxudWxsPT09VmUpe3ZhciBudD1uZXcgWCh7YWN0dWFsOlZlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6QWUsb3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOl90'@;
put 'fSk7dGhyb3cgbnQub3BlcmF0b3I9X3QubmFtZSxudH12YXIgUWU9T2JqZWN0LmtleXMoa2UpO2lmKGtlIGluc3RhbmNlb2YgRXJyb3IpUWUucHVzaCgibmFtZSIsIm1lc3NhZ2UiKTtlbHNlIGlmKDA9PT1RZS5sZW5ndGgpdGhyb3cgbmV3IFUoImVycm9yIixrZSwibWF5IG5vdCBiZSBhbiBl'@;
put 'bXB0eSBvYmplY3QiKTtyZXR1cm4gdm9pZCAwPT09emUmJkMoKSxRZS5mb3JFYWNoKGZ1bmN0aW9uKHVuKXsic3RyaW5nIj09dHlwZW9mIFZlW3VuXSYmbGUoa2VbdW5dKSYmVGUoa2VbdW5dLFZlW3VuXSl8fGZ1bmN0aW9uIGF0KFZlLGtlLEFlLF90LG50LFFlKXtpZighKEFlIGluIFZlKXx8'@;
put 'IVYoVmVbQWVdLGtlW0FlXSkpe2lmKCFfdCl7dmFyIHVuPW5ldyBKZShWZSxudCkseXQ9bmV3IEplKGtlLG50LFZlKSxNdD1uZXcgWCh7YWN0dWFsOnVuLGV4cGVjdGVkOnl0LG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpRZX0pO3Rocm93IE10LmFjdHVhbD1WZSxN'@;
put 'dC5leHBlY3RlZD1rZSxNdC5vcGVyYXRvcj1RZS5uYW1lLE10fW9lKHthY3R1YWw6VmUsZXhwZWN0ZWQ6a2UsbWVzc2FnZTpfdCxvcGVyYXRvcjpRZS5uYW1lLHN0YWNrU3RhcnRGbjpRZX0pfX0oVmUsa2UsdW4sQWUsUWUsX3QpfSksITB9cmV0dXJuIHZvaWQgMCE9PWtlLnByb3RvdHlwZSYm'@;
put 'VmUgaW5zdGFuY2VvZiBrZXx8IUVycm9yLmlzUHJvdG90eXBlT2Yoa2UpJiYhMD09PWtlLmNhbGwoe30sVmUpfWZ1bmN0aW9uIHZlKFZlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgVmUpdGhyb3cgbmV3IEsoImZuIiwiRnVuY3Rpb24iLFZlKTt0cnl7VmUoKX1jYXRjaChrZSl7cmV0dXJuIGtl'@;
put 'fXJldHVybiBBfWZ1bmN0aW9uIFhlKFZlKXtyZXR1cm4gaWUoVmUpfHxudWxsIT09VmUmJiJvYmplY3QiPT09ZyhWZSkmJiJmdW5jdGlvbiI9PXR5cGVvZiBWZS50aGVuJiYiZnVuY3Rpb24iPT10eXBlb2YgVmUuY2F0Y2h9ZnVuY3Rpb24gamUoVmUpe3JldHVybiBQcm9taXNlLnJlc29sdmUo'@;
put 'KS50aGVuKGZ1bmN0aW9uKCl7dmFyIGtlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBWZSl7aWYoIVhlKGtlPVZlKCkpKXRocm93IG5ldyBXKCJpbnN0YW5jZSBvZiBQcm9taXNlIiwicHJvbWlzZUZuIixrZSl9ZWxzZXtpZighWGUoVmUpKXRocm93IG5ldyBLKCJwcm9taXNlRm4iLFsiRnVuY3Rp'@;
put 'b24iLCJQcm9taXNlIl0sVmUpO2tlPVZlfXJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGtlfSkudGhlbihmdW5jdGlvbigpe3JldHVybiBBfSkuY2F0Y2goZnVuY3Rpb24oQWUpe3JldHVybiBBZX0pfSl9ZnVuY3Rpb24gRGUoVmUsa2UsQWUsX3Qpe2lm'@;
put 'KCJzdHJpbmciPT10eXBlb2YgQWUpe2lmKDQ9PT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBLKCJlcnJvciIsWyJPYmplY3QiLCJFcnJvciIsIkZ1bmN0aW9uIiwiUmVnRXhwIl0sQWUpO2lmKCJvYmplY3QiPT09ZyhrZSkmJm51bGwhPT1rZSl7aWYoa2UubWVzc2FnZT09PUFlKXRocm93'@;
put 'IG5ldyBMKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yIG1lc3NhZ2UgIicuY29uY2F0KGtlLm1lc3NhZ2UsJyIgaXMgaWRlbnRpY2FsIHRvIHRoZSBtZXNzYWdlLicpKX1lbHNlIGlmKGtlPT09QWUpdGhyb3cgbmV3IEwoImVycm9yL21lc3NhZ2UiLCdUaGUgZXJyb3IgIicuY29uY2F0KGtl'@;
put 'LCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSk7X3Q9QWUsQWU9dm9pZCAwfWVsc2UgaWYobnVsbCE9QWUmJiJvYmplY3QiIT09ZyhBZSkmJiJmdW5jdGlvbiIhPXR5cGVvZiBBZSl0aHJvdyBuZXcgSygiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4'@;
put 'cCJdLEFlKTtpZihrZT09PUEpe3ZhciBudD0iIjtBZSYmQWUubmFtZSYmKG50Kz0iICgiLmNvbmNhdChBZS5uYW1lLCIpIikpLG50Kz1fdD8iOiAiLmNvbmNhdChfdCk6Ii4iLG9lKHthY3R1YWw6dm9pZCAwLGV4cGVjdGVkOkFlLG9wZXJhdG9yOlZlLm5hbWUsbWVzc2FnZToiTWlzc2luZyBl'@;
put 'eHBlY3RlZCAiLmNvbmNhdCgicmVqZWN0cyI9PT1WZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQobnQpLHN0YWNrU3RhcnRGbjpWZX0pfWlmKEFlJiYhTWUoa2UsQWUsX3QsVmUpKXRocm93IGtlfWZ1bmN0aW9uIEZlKFZlLGtlLEFlLF90KXtpZihrZSE9PUEpe2lmKCJz'@;
put 'dHJpbmciPT10eXBlb2YgQWUmJihfdD1BZSxBZT12b2lkIDApLCFBZXx8TWUoa2UsQWUpKXt2YXIgbnQ9X3Q/IjogIi5jb25jYXQoX3QpOiIuIjtvZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG9wZXJhdG9yOlZlLm5hbWUsbWVzc2FnZToiR290IHVud2FudGVkICIuY29uY2F0KCJkb2VzTm90'@;
put 'UmVqZWN0Ij09PVZlLm5hbWU/InJlamVjdGlvbiI6ImV4Y2VwdGlvbiIpLmNvbmNhdChudCwiXG4iKSsnQWN0dWFsIG1lc3NhZ2U6ICInLmNvbmNhdChrZSYma2UubWVzc2FnZSwnIicpLHN0YWNrU3RhcnRGbjpWZX0pfXRocm93IGtlfX1mdW5jdGlvbiBSZShWZSxrZSxBZSxfdCxudCl7aWYo'@;
put 'IWxlKGtlKSl0aHJvdyBuZXcgSygicmVnZXhwIiwiUmVnRXhwIixrZSk7dmFyIFFlPSJtYXRjaCI9PT1udDtpZigic3RyaW5nIiE9dHlwZW9mIFZlfHxUZShrZSxWZSkhPT1RZSl7aWYoQWUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBBZTt2YXIgdW49IUFlO0FlPUFlfHwoInN0cmluZyIhPXR5'@;
put 'cGVvZiBWZT8nVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgJysiIi5jb25jYXQoZyhWZSksIiAoIikuY29uY2F0KEooVmUpLCIpIik6KFFlPyJUaGUgaW5wdXQgZGlkIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uICI6'@;
put 'IlRoZSBpbnB1dCB3YXMgZXhwZWN0ZWQgdG8gbm90IG1hdGNoIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gIikrIiIuY29uY2F0KEooa2UpLCIuIElucHV0OlxuXG4iKS5jb25jYXQoSihWZSksIlxuIikpO3ZhciB5dD1uZXcgWCh7YWN0dWFsOlZlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6QWUsb3Bl'@;
put 'cmF0b3I6bnQsc3RhY2tTdGFydEZuOl90fSk7dGhyb3cgeXQuZ2VuZXJhdGVkTWVzc2FnZT11bix5dH19ZnVuY3Rpb24gSWUoKXtmb3IodmFyIFZlPWFyZ3VtZW50cy5sZW5ndGgsa2U9bmV3IEFycmF5KFZlKSxBZT0wO0FlPFZlO0FlKyspa2VbQWVdPWFyZ3VtZW50c1tBZV07c2UuYXBwbHko'@;
put 'dm9pZCAwLFtJZSxrZS5sZW5ndGhdLmNvbmNhdChrZSkpfW0udGhyb3dzPWZ1bmN0aW9uIFZlKGtlKXtmb3IodmFyIEFlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KEFlPjE/QWUtMTowKSxudD0xO250PEFlO250KyspX3RbbnQtMV09YXJndW1lbnRzW250XTtEZS5hcHBseSh2b2lk'@;
put 'IDAsW1ZlLHZlKGtlKV0uY29uY2F0KF90KSl9LG0ucmVqZWN0cz1mdW5jdGlvbiBWZShrZSl7Zm9yKHZhciBBZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShBZT4xP0FlLTE6MCksbnQ9MTtudDxBZTtudCsrKV90W250LTFdPWFyZ3VtZW50c1tudF07cmV0dXJuIGplKGtlKS50aGVu'@;
put 'KGZ1bmN0aW9uKFFlKXtyZXR1cm4gRGUuYXBwbHkodm9pZCAwLFtWZSxRZV0uY29uY2F0KF90KSl9KX0sbS5kb2VzTm90VGhyb3c9ZnVuY3Rpb24gVmUoa2Upe2Zvcih2YXIgQWU9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoQWU+MT9BZS0xOjApLG50PTE7bnQ8QWU7bnQrKylfdFtu'@;
put 'dC0xXT1hcmd1bWVudHNbbnRdO0ZlLmFwcGx5KHZvaWQgMCxbVmUsdmUoa2UpXS5jb25jYXQoX3QpKX0sbS5kb2VzTm90UmVqZWN0PWZ1bmN0aW9uIFZlKGtlKXtmb3IodmFyIEFlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9bmV3IEFycmF5KEFlPjE/QWUtMTowKSxudD0xO250PEFlO250KyspX3Rb'@;
put 'bnQtMV09YXJndW1lbnRzW250XTtyZXR1cm4gamUoa2UpLnRoZW4oZnVuY3Rpb24oUWUpe3JldHVybiBGZS5hcHBseSh2b2lkIDAsW1ZlLFFlXS5jb25jYXQoX3QpKX0pfSxtLmlmRXJyb3I9ZnVuY3Rpb24gVmUoa2Upe2lmKG51bGwhPWtlKXt2YXIgQWU9ImlmRXJyb3IgZ290IHVud2FudGVk'@;
put 'IGV4Y2VwdGlvbjogIjsib2JqZWN0Ij09PWcoa2UpJiYic3RyaW5nIj09dHlwZW9mIGtlLm1lc3NhZ2U/QWUrPTA9PT1rZS5tZXNzYWdlLmxlbmd0aCYma2UuY29uc3RydWN0b3I/a2UuY29uc3RydWN0b3IubmFtZTprZS5tZXNzYWdlOkFlKz1KKGtlKTt2YXIgX3Q9bmV3IFgoe2FjdHVhbDpr'@;
put 'ZSxleHBlY3RlZDpudWxsLG9wZXJhdG9yOiJpZkVycm9yIixtZXNzYWdlOkFlLHN0YWNrU3RhcnRGbjpWZX0pLG50PWtlLnN0YWNrO2lmKCJzdHJpbmciPT10eXBlb2YgbnQpe3ZhciBRZT1udC5zcGxpdCgiXG4iKTtRZS5zaGlmdCgpO2Zvcih2YXIgdW49X3Quc3RhY2suc3BsaXQoIlxuIiks'@;
put 'eXQ9MDt5dDxRZS5sZW5ndGg7eXQrKyl7dmFyIE10PXVuLmluZGV4T2YoUWVbeXRdKTtpZigtMSE9PU10KXt1bj11bi5zbGljZSgwLE10KTticmVha319X3Quc3RhY2s9IiIuY29uY2F0KHVuLmpvaW4oIlxuIiksIlxuIikuY29uY2F0KFFlLmpvaW4oIlxuIikpfXRocm93IF90fX0sbS5tYXRj'@;
put 'aD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7UmUoa2UsQWUsX3QsVmUsIm1hdGNoIil9LG0uZG9lc05vdE1hdGNoPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtSZShrZSxBZSxfdCxWZSwiZG9lc05vdE1hdGNoIil9LG0uc3RyaWN0PW1lKEllLG0se2VxdWFsOm0uc3RyaWN0RXF1YWwsZGVlcEVxdWFs'@;
put 'Om0uZGVlcFN0cmljdEVxdWFsLG5vdEVxdWFsOm0ubm90U3RyaWN0RXF1YWwsbm90RGVlcEVxdWFsOm0ubm90RGVlcFN0cmljdEVxdWFsfSksbS5zdHJpY3Quc3RyaWN0PW0uc3RyaWN0fSw1OTYxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSk7ZnVuY3Rpb24geShBLG9l'@;
put 'KXt2YXIgdGU9T2JqZWN0LmtleXMoQSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIHNlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoQSk7b2UmJihzZT1zZS5maWx0ZXIoZnVuY3Rpb24od2Upe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y'@;
put 'KEEsd2UpLmVudW1lcmFibGV9KSksdGUucHVzaC5hcHBseSh0ZSxzZSl9cmV0dXJuIHRlfWZ1bmN0aW9uIGcoQSl7Zm9yKHZhciBvZT0xO29lPGFyZ3VtZW50cy5sZW5ndGg7b2UrKyl7dmFyIHRlPW51bGwhPWFyZ3VtZW50c1tvZV0/YXJndW1lbnRzW29lXTp7fTtvZSUyP3koT2JqZWN0KHRl'@;
put 'KSwhMCkuZm9yRWFjaChmdW5jdGlvbihzZSl7QihBLHNlLHRlW3NlXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHRlKSk6eShPYmplY3QodGUpKS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKHNlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxzZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRlLHNlKSl9KX1yZXR1cm4gQX1mdW5jdGlvbiBCKEEsb2UsdGUpe3JldHVybihvZT1PKG9lKSlpbiBBP09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLG9lLHt2YWx1ZTp0'@;
put 'ZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOkFbb2VdPXRlLEF9ZnVuY3Rpb24gUChBLG9lKXtmb3IodmFyIHRlPTA7dGU8b2UubGVuZ3RoO3RlKyspe3ZhciBzZT1vZVt0ZV07c2UuZW51bWVyYWJsZT1zZS5lbnVtZXJhYmxlfHwhMSxzZS5jb25maWd1cmFi'@;
put 'bGU9ITAsInZhbHVlImluIHNlJiYoc2Uud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLE8oc2Uua2V5KSxzZSl9fWZ1bmN0aW9uIE8oQSl7dmFyIG9lPWZ1bmN0aW9uIHooQSxvZSl7aWYoIm9iamVjdCIhPT1pZShBKXx8bnVsbD09PUEpcmV0dXJuIEE7dmFyIHRlPUFbU3lt'@;
put 'Ym9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT10ZSl7dmFyIHNlPXRlLmNhbGwoQSxvZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9PWllKHNlKSlyZXR1cm4gc2U7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1y'@;
put 'ZXR1cm4oInN0cmluZyI9PT1vZT9TdHJpbmc6TnVtYmVyKShBKX0oQSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1pZShvZSk/b2U6U3RyaW5nKG9lKX1mdW5jdGlvbiBLKEEsb2Upe2lmKG9lJiYoIm9iamVjdCI9PT1pZShvZSl8fCJmdW5jdGlvbiI9PXR5cGVvZiBvZSkpcmV0dXJuIG9l'@;
put 'O2lmKHZvaWQgMCE9PW9lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIFUoQSl9ZnVuY3Rpb24gVShBKXtpZih2b2lkIDA9PT1BKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhp'@;
put 'cyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIEF9ZnVuY3Rpb24gVyhBKXt2YXIgb2U9ImZ1bmN0aW9uIj09dHlwZW9mIE1hcD9uZXcgTWFwOnZvaWQgMDtyZXR1cm4gVz1mdW5jdGlvbihzZSl7aWYobnVsbD09PXNlfHwhZnVu'@;
put 'Y3Rpb24gZWUoQSl7cmV0dXJuLTEhPT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKEEpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKX0oc2UpKXJldHVybiBzZTtpZigiZnVuY3Rpb24iIT10eXBlb2Ygc2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBi'@;
put 'ZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih0eXBlb2Ygb2U8InUiKXtpZihvZS5oYXMoc2UpKXJldHVybiBvZS5nZXQoc2UpO29lLnNldChzZSx3ZSl9ZnVuY3Rpb24gd2UoKXtyZXR1cm4gWShzZSxhcmd1bWVudHMscmUodGhpcykuY29uc3RydWN0b3IpfXJldHVybiB3ZS5wcm90b3R5cGU9'@;
put 'T2JqZWN0LmNyZWF0ZShzZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp3ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxKKHdlLHNlKX0sVyhBKX1mdW5jdGlvbiBZKEEsb2UsdGUpe3JldHVybihZPVgoKT9SZWZsZWN0LmNvbnN0cnVjdC5iaW5k'@;
put 'KCk6ZnVuY3Rpb24od2UsVWUsSmUpe3ZhciBhdD1bbnVsbF07YXQucHVzaC5hcHBseShhdCxVZSk7dmFyIHZlPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KHdlLGF0KSk7cmV0dXJuIEplJiZKKHZlLEplLnByb3RvdHlwZSksdmV9KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWCgp'@;
put 'e2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNv'@;
put 'bnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBKKEEsb2Upe3JldHVybihKPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHNlLHdlKXtyZXR1cm4gc2UuX19wcm90b19f'@;
put 'PXdlLHNlfSkoQSxvZSl9ZnVuY3Rpb24gcmUoQSl7cmV0dXJuKHJlPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKHRlKXtyZXR1cm4gdGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodGUpfSkoQSl9ZnVuY3Rpb24g'@;
put 'aWUoQSl7cmV0dXJuKGllPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKG9lKXtyZXR1cm4gdHlwZW9mIG9lfTpmdW5jdGlvbihvZSl7cmV0dXJuIG9lJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZvZS5jb25z'@;
put 'dHJ1Y3Rvcj09PVN5bWJvbCYmb2UhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBvZX0pKEEpfXZhciBtZT1fKDk1MzkpLmluc3BlY3QsVGU9XygyMTM2KS5jb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRTtmdW5jdGlvbiBTZShBLG9lLHRlKXtyZXR1cm4odm9pZCAwPT09dGV8'@;
put 'fHRlPkEubGVuZ3RoKSYmKHRlPUEubGVuZ3RoKSxBLnN1YnN0cmluZyh0ZS1vZS5sZW5ndGgsdGUpPT09b2V9dmFyIFY9IiIscD0iIixiPSIiLHg9IiIsQz17ZGVlcFN0cmljdEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbDoiLHN0cmljdEVxdWFsOiJF'@;
put 'eHBlY3RlZCB2YWx1ZXMgdG8gYmUgc3RyaWN0bHkgZXF1YWw6IixzdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgdG8gYmUgcmVmZXJlbmNlLWVxdWFsIHRvICJleHBlY3RlZCI6JyxkZWVwRXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGRlZXAtZXF1YWw6'@;
put 'IixlcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIGxvb3NlbHkgZXF1YWw6Iixub3REZWVwU3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSBzdHJpY3RseSBkZWVwLWVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHN0cmlj'@;
put 'dGx5IHVuZXF1YWwgdG86Jyxub3RTdHJpY3RFcXVhbE9iamVjdDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsbm90RGVlcEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsIHRvOics'@;
put 'bm90RXF1YWw6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIGxvb3NlbHkgdW5lcXVhbCB0bzonLG5vdElkZW50aWNhbDoiVmFsdWVzIGlkZW50aWNhbCBidXQgbm90IHJlZmVyZW5jZS1lcXVhbDoifTtmdW5jdGlvbiBIKEEpe3ZhciBvZT1PYmplY3Qua2V5cyhBKSx0ZT1PYmplY3QuY3JlYXRl'@;
put 'KE9iamVjdC5nZXRQcm90b3R5cGVPZihBKSk7cmV0dXJuIG9lLmZvckVhY2goZnVuY3Rpb24oc2Upe3RlW3NlXT1BW3NlXX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZSwibWVzc2FnZSIse3ZhbHVlOkEubWVzc2FnZX0pLHRlfWZ1bmN0aW9uIGooQSl7cmV0dXJuIG1lKEEse2NvbXBhY3Q6'@;
put 'ITEsY3VzdG9tSW5zcGVjdDohMSxkZXB0aDoxZTMsbWF4QXJyYXlMZW5ndGg6MS8wLHNob3dIaWRkZW46ITEsYnJlYWtMZW5ndGg6MS8wLHNob3dQcm94eTohMSxzb3J0ZWQ6ITAsZ2V0dGVyczohMH0pfXZhciBtPWZ1bmN0aW9uKEEsb2UpeyFmdW5jdGlvbiBOKEEsb2Upe2lmKCJmdW5jdGlv'@;
put 'biIhPXR5cGVvZiBvZSYmbnVsbCE9PW9lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShvZSYmb2UucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QSx3'@;
put 'cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksb2UmJkooQSxvZSl9KHNlLEEpO3ZhciB0ZT1mdW5jdGlvbiBMKEEpe3ZhciBvZT1YKCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHdlLHNlPXJlKEEp'@;
put 'O2lmKG9lKXt2YXIgVWU9cmUodGhpcykuY29uc3RydWN0b3I7d2U9UmVmbGVjdC5jb25zdHJ1Y3Qoc2UsYXJndW1lbnRzLFVlKX1lbHNlIHdlPXNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gSyh0aGlzLHdlKX19KHNlKTtmdW5jdGlvbiBzZSh3ZSl7dmFyIFVlO2lmKGZ1bmN0aW9u'@;
put 'IHcoQSxvZSl7aWYoIShBIGluc3RhbmNlb2Ygb2UpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHNlKSwib2JqZWN0IiE9PWllKHdlKXx8bnVsbD09PXdlKXRocm93IG5ldyBUZSgib3B0aW9ucyIsIk9iamVjdCIsd2UpO3Zh'@;
put 'ciBKZT13ZS5tZXNzYWdlLGF0PXdlLm9wZXJhdG9yLE1lPXdlLnN0YWNrU3RhcnRGbix2ZT13ZS5hY3R1YWwsWGU9d2UuZXhwZWN0ZWQsamU9RXJyb3Iuc3RhY2tUcmFjZUxpbWl0O2lmKEVycm9yLnN0YWNrVHJhY2VMaW1pdD0wLG51bGwhPUplKVVlPXRlLmNhbGwodGhpcyxTdHJpbmcoSmUp'@;
put 'KTtlbHNlIGlmKEkuc3RkZXJyJiZJLnN0ZGVyci5pc1RUWSYmKEkuc3RkZXJyJiZJLnN0ZGVyci5nZXRDb2xvckRlcHRoJiYxIT09SS5zdGRlcnIuZ2V0Q29sb3JEZXB0aCgpPyhWPSJceDFiWzM0bSIscD0iXHgxYlszMm0iLHg9Ilx4MWJbMzltIixiPSJceDFiWzMxbSIpOihWPSIiLHA9IiIs'@;
put 'eD0iIixiPSIiKSksIm9iamVjdCI9PT1pZSh2ZSkmJm51bGwhPT12ZSYmIm9iamVjdCI9PT1pZShYZSkmJm51bGwhPT1YZSYmInN0YWNrImluIHZlJiZ2ZSBpbnN0YW5jZW9mIEVycm9yJiYic3RhY2siaW4gWGUmJlhlIGluc3RhbmNlb2YgRXJyb3ImJih2ZT1IKHZlKSxYZT1IKFhlKSksImRl'@;
put 'ZXBTdHJpY3RFcXVhbCI9PT1hdHx8InN0cmljdEVxdWFsIj09PWF0KVVlPXRlLmNhbGwodGhpcyxmdW5jdGlvbiBFKEEsb2UsdGUpe3ZhciBzZT0iIix3ZT0iIixVZT0wLEplPSIiLGF0PSExLE1lPWooQSksdmU9TWUuc3BsaXQoIlxuIiksWGU9aihvZSkuc3BsaXQoIlxuIiksamU9MCxEZT0i'@;
put 'IjtpZigic3RyaWN0RXF1YWwiPT09dGUmJiJvYmplY3QiPT09aWUoQSkmJiJvYmplY3QiPT09aWUob2UpJiZudWxsIT09QSYmbnVsbCE9PW9lJiYodGU9InN0cmljdEVxdWFsT2JqZWN0IiksMT09PXZlLmxlbmd0aCYmMT09PVhlLmxlbmd0aCYmdmVbMF0hPT1YZVswXSl7dmFyIEZlPXZlWzBd'@;
put 'Lmxlbmd0aCtYZVswXS5sZW5ndGg7aWYoRmU8PTEwKXtpZighKCJvYmplY3QiPT09aWUoQSkmJm51bGwhPT1BfHwib2JqZWN0Ij09PWllKG9lKSYmbnVsbCE9PW9lfHwwPT09QSYmMD09PW9lKSlyZXR1cm4iIi5jb25jYXQoQ1t0ZV0sIlxuXG4iKSsiIi5jb25jYXQodmVbMF0sIiAhPT0gIiku'@;
put 'Y29uY2F0KFhlWzBdLCJcbiIpfWVsc2UgaWYoInN0cmljdEVxdWFsT2JqZWN0IiE9PXRlJiZGZTwoSS5zdGRlcnImJkkuc3RkZXJyLmlzVFRZP0kuc3RkZXJyLmNvbHVtbnM6ODApKXtmb3IoO3ZlWzBdW2plXT09PVhlWzBdW2plXTspamUrKztqZT4yJiYoRGU9IlxuICAiLmNvbmNhdChmdW5j'@;
put 'dGlvbiB6ZShBLG9lKXtpZihvZT1NYXRoLmZsb29yKG9lKSwwPT1BLmxlbmd0aHx8MD09b2UpcmV0dXJuIiI7dmFyIHRlPUEubGVuZ3RoKm9lO2ZvcihvZT1NYXRoLmZsb29yKE1hdGgubG9nKG9lKS9NYXRoLmxvZygyKSk7b2U7KUErPUEsb2UtLTtyZXR1cm4gQStBLnN1YnN0cmluZygwLHRl'@;
put 'LUEubGVuZ3RoKX0oIiAiLGplKSwiXiIpLGplPTApfX1mb3IodmFyIEllPXZlW3ZlLmxlbmd0aC0xXSxWZT1YZVtYZS5sZW5ndGgtMV07SWU9PT1WZSYmKGplKys8Mj9KZT0iXG4gICIuY29uY2F0KEllKS5jb25jYXQoSmUpOnNlPUllLHZlLnBvcCgpLFhlLnBvcCgpLDAhPT12ZS5sZW5ndGgm'@;
put 'JjAhPT1YZS5sZW5ndGgpOylJZT12ZVt2ZS5sZW5ndGgtMV0sVmU9WGVbWGUubGVuZ3RoLTFdO3ZhciBrZT1NYXRoLm1heCh2ZS5sZW5ndGgsWGUubGVuZ3RoKTtpZigwPT09a2Upe3ZhciBBZT1NZS5zcGxpdCgiXG4iKTtpZihBZS5sZW5ndGg+MzApZm9yKEFlWzI2XT0iIi5jb25jYXQoViwi'@;
put 'Li4uIikuY29uY2F0KHgpO0FlLmxlbmd0aD4yNzspQWUucG9wKCk7cmV0dXJuIiIuY29uY2F0KEMubm90SWRlbnRpY2FsLCJcblxuIikuY29uY2F0KEFlLmpvaW4oIlxuIiksIlxuIil9amU+MyYmKEplPSJcbiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KS5jb25jYXQoSmUpLGF0PSEwKSwi'@;
put 'IiE9PXNlJiYoSmU9IlxuICAiLmNvbmNhdChzZSkuY29uY2F0KEplKSxzZT0iIik7dmFyIF90PTAsbnQ9Q1t0ZV0rIlxuIi5jb25jYXQocCwiKyBhY3R1YWwiKS5jb25jYXQoeCwiICIpLmNvbmNhdChiLCItIGV4cGVjdGVkIikuY29uY2F0KHgpLFFlPSIgIi5jb25jYXQoViwiLi4uIikuY29u'@;
put 'Y2F0KHgsIiBMaW5lcyBza2lwcGVkIik7Zm9yKGplPTA7amU8a2U7amUrKyl7dmFyIHVuPWplLVVlO2lmKHZlLmxlbmd0aDxqZSsxKXVuPjEmJmplPjImJih1bj40Pyh3ZSs9IlxuIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpLGF0PSEwKTp1bj4zJiYod2UrPSJcbiAgIi5jb25jYXQoWGVb'@;
put 'amUtMl0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KFhlW2plLTFdKSxfdCsrKSxVZT1qZSxzZSs9IlxuIi5jb25jYXQoYiwiLSIpLmNvbmNhdCh4LCIgIikuY29uY2F0KFhlW2plXSksX3QrKztlbHNlIGlmKFhlLmxlbmd0aDxqZSsxKXVuPjEmJmplPjImJih1bj40Pyh3ZSs9IlxuIi5jb25j'@;
put 'YXQoViwiLi4uIikuY29uY2F0KHgpLGF0PSEwKTp1bj4zJiYod2UrPSJcbiAgIi5jb25jYXQodmVbamUtMl0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KHZlW2plLTFdKSxfdCsrKSxVZT1qZSx3ZSs9IlxuIi5jb25jYXQocCwiKyIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHZlW2plXSksX3Qr'@;
put 'KztlbHNle3ZhciB5dD1YZVtqZV0sTXQ9dmVbamVdLER0PU10IT09eXQmJighU2UoTXQsIiwiKXx8TXQuc2xpY2UoMCwtMSkhPT15dCk7RHQmJlNlKHl0LCIsIikmJnl0LnNsaWNlKDAsLTEpPT09TXQmJihEdD0hMSxNdCs9IiwiKSxEdD8odW4+MSYmamU+MiYmKHVuPjQ/KHdlKz0iXG4iLmNv'@;
put 'bmNhdChWLCIuLi4iKS5jb25jYXQoeCksYXQ9ITApOnVuPjMmJih3ZSs9IlxuICAiLmNvbmNhdCh2ZVtqZS0yXSksX3QrKyksd2UrPSJcbiAgIi5jb25jYXQodmVbamUtMV0pLF90KyspLFVlPWplLHdlKz0iXG4iLmNvbmNhdChwLCIrIikuY29uY2F0KHgsIiAiKS5jb25jYXQoTXQpLHNlKz0i'@;
put 'XG4iLmNvbmNhdChiLCItIikuY29uY2F0KHgsIiAiKS5jb25jYXQoeXQpLF90Kz0yKTood2UrPXNlLHNlPSIiLCgxPT09dW58fDA9PT1qZSkmJih3ZSs9IlxuICAiLmNvbmNhdChNdCksX3QrKykpfWlmKF90PjIwJiZqZTxrZS0yKXJldHVybiIiLmNvbmNhdChudCkuY29uY2F0KFFlLCJcbiIp'@;
put 'LmNvbmNhdCh3ZSwiXG4iKS5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpLmNvbmNhdChzZSwiXG4iKSsiIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpfXJldHVybiIiLmNvbmNhdChudCkuY29uY2F0KGF0P1FlOiIiLCJcbiIpLmNvbmNhdCh3ZSkuY29uY2F0KHNlKS5jb25jYXQoSmUpLmNv'@;
put 'bmNhdChEZSl9KHZlLFhlLGF0KSk7ZWxzZSBpZigibm90RGVlcFN0cmljdEVxdWFsIj09PWF0fHwibm90U3RyaWN0RXF1YWwiPT09YXQpe3ZhciBEZT1DW2F0XSxGZT1qKHZlKS5zcGxpdCgiXG4iKTtpZigibm90U3RyaWN0RXF1YWwiPT09YXQmJiJvYmplY3QiPT09aWUodmUpJiZudWxsIT09'@;
put 'dmUmJihEZT1DLm5vdFN0cmljdEVxdWFsT2JqZWN0KSxGZS5sZW5ndGg+MzApZm9yKEZlWzI2XT0iIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpO0ZlLmxlbmd0aD4yNzspRmUucG9wKCk7VWU9dGUuY2FsbCh0aGlzLDE9PT1GZS5sZW5ndGg/IiIuY29uY2F0KERlLCIgIikuY29uY2F0KEZl'@;
put 'WzBdKToiIi5jb25jYXQoRGUsIlxuXG4iKS5jb25jYXQoRmUuam9pbigiXG4iKSwiXG4iKSl9ZWxzZXt2YXIgUmU9aih2ZSksSWU9IiIsVmU9Q1thdF07Im5vdERlZXBFcXVhbCI9PT1hdHx8Im5vdEVxdWFsIj09PWF0PyhSZT0iIi5jb25jYXQoQ1thdF0sIlxuXG4iKS5jb25jYXQoUmUpKS5s'@;
put 'ZW5ndGg+MTAyNCYmKFJlPSIiLmNvbmNhdChSZS5zbGljZSgwLDEwMjEpLCIuLi4iKSk6KEllPSIiLmNvbmNhdChqKFhlKSksUmUubGVuZ3RoPjUxMiYmKFJlPSIiLmNvbmNhdChSZS5zbGljZSgwLDUwOSksIi4uLiIpKSxJZS5sZW5ndGg+NTEyJiYoSWU9IiIuY29uY2F0KEllLnNsaWNlKDAs'@;
put 'NTA5KSwiLi4uIikpLCJkZWVwRXF1YWwiPT09YXR8fCJlcXVhbCI9PT1hdD9SZT0iIi5jb25jYXQoVmUsIlxuXG4iKS5jb25jYXQoUmUsIlxuXG5zaG91bGQgZXF1YWxcblxuIik6SWU9IiAiLmNvbmNhdChhdCwiICIpLmNvbmNhdChJZSkpLFVlPXRlLmNhbGwodGhpcywiIi5jb25jYXQoUmUp'@;
put 'LmNvbmNhdChJZSkpfXJldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ9amUsVWUuZ2VuZXJhdGVkTWVzc2FnZT0hSmUsT2JqZWN0LmRlZmluZVByb3BlcnR5KFUoVWUpLCJuYW1lIix7dmFsdWU6IkFzc2VydGlvbkVycm9yIFtFUlJfQVNTRVJUSU9OXSIsZW51bWVyYWJsZTohMSx3cml0YWJs'@;
put 'ZTohMCxjb25maWd1cmFibGU6ITB9KSxVZS5jb2RlPSJFUlJfQVNTRVJUSU9OIixVZS5hY3R1YWw9dmUsVWUuZXhwZWN0ZWQ9WGUsVWUub3BlcmF0b3I9YXQsRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKFUoVWUpLE1lKSxVZS5uYW1lPSJBc3NlcnRp'@;
put 'b25FcnJvciIsSyhVZSl9cmV0dXJuIGZ1bmN0aW9uIEYoQSxvZSx0ZSl7b2UmJlAoQS5wcm90b3R5cGUsb2UpLHRlJiZQKEEsdGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfShzZSxbe2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIiIuY29uY2F0KHRoaXMubmFtZSwiIFsiKS5jb25jYXQodGhpcy5jb2RlLCJdOiAiKS5jb25jYXQodGhpcy5tZXNzYWdlKX19LHtrZXk6b2UsdmFsdWU6ZnVuY3Rpb24oVWUsSmUpe3JldHVybiBtZSh0aGlzLGcoZyh7fSxKZSkse30se2N1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MH0p'@;
put 'KX19XSksc2V9KFcoRXJyb3IpLG1lLmN1c3RvbSk7dWUuZXhwb3J0cz1tfSwyMTM2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkobWUpe3JldHVybihJPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9u'@;
put 'KF9lKXtyZXR1cm4gdHlwZW9mIF9lfTpmdW5jdGlvbihfZSl7cmV0dXJuIF9lJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZfZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmX2UhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBfZX0pKG1lKX1mdW5jdGlvbiB5KG1lLF9lKXtm'@;
put 'b3IodmFyIFRlPTA7VGU8X2UubGVuZ3RoO1RlKyspe3ZhciBTZT1fZVtUZV07U2UuZW51bWVyYWJsZT1TZS5lbnVtZXJhYmxlfHwhMSxTZS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIFNlJiYoU2Uud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZSxCKFNlLmtleSksU2Up'@;
put 'fX1mdW5jdGlvbiBCKG1lKXt2YXIgX2U9ZnVuY3Rpb24gdyhtZSxfZSl7aWYoIm9iamVjdCIhPT1JKG1lKXx8bnVsbD09PW1lKXJldHVybiBtZTt2YXIgVGU9bWVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1UZSl7dmFyIFNlPVRlLmNhbGwobWUsX2V8fCJkZWZhdWx0Iik7aWYo'@;
put 'Im9iamVjdCIhPT1JKFNlKSlyZXR1cm4gU2U7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1fZT9TdHJpbmc6TnVtYmVyKShtZSl9KG1lLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09'@;
put 'PUkoX2UpP19lOlN0cmluZyhfZSl9ZnVuY3Rpb24gTyhtZSxfZSl7cmV0dXJuKE89T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oU2UsemUpe3JldHVybiBTZS5fX3Byb3RvX189emUsU2V9KShtZSxfZSl9ZnVuY3Rpb24gVShtZSl7'@;
put 'cmV0dXJuKFU9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZi5iaW5kKCk6ZnVuY3Rpb24oVGUpe3JldHVybiBUZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihUZSl9KShtZSl9dmFyIFksWCxXPXt9O2Z1bmN0aW9uIGVlKG1lLF9lLFRlKXtUZXx8'@;
put 'KFRlPUVycm9yKTt2YXIgemU9ZnVuY3Rpb24oVil7IWZ1bmN0aW9uIEYobWUsX2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBfZSYmbnVsbCE9PV9lKXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7bWUucHJv'@;
put 'dG90eXBlPU9iamVjdC5jcmVhdGUoX2UmJl9lLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOm1lLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksX2UmJk8obWUsX2UpfShiLFYpO3Zh'@;
put 'ciBwPWZ1bmN0aW9uIHoobWUpe3ZhciBfZT1mdW5jdGlvbiBLKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gQm9v'@;
put 'bGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpO3JldHVybiBmdW5jdGlvbigpe3ZhciB6ZSxTZT1VKG1lKTtpZihfZSl7dmFyIFY9VSh0aGlzKS5jb25zdHJ1Y3Rvcjt6ZT1S'@;
put 'ZWZsZWN0LmNvbnN0cnVjdChTZSxhcmd1bWVudHMsVil9ZWxzZSB6ZT1TZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGZ1bmN0aW9uIE4obWUsX2Upe2lmKF9lJiYoIm9iamVjdCI9PT1JKF9lKXx8ImZ1bmN0aW9uIj09dHlwZW9mIF9lKSlyZXR1cm4gX2U7aWYodm9pZCAwIT09X2Up'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWQiKTtyZXR1cm4gZnVuY3Rpb24gTChtZSl7aWYodm9pZCAwPT09bWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRp'@;
put 'YWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gbWV9KG1lKX0odGhpcyx6ZSl9fShiKTtmdW5jdGlvbiBiKHgsQyxUKXt2YXIgSDtyZXR1cm4gZnVuY3Rpb24gUChtZSxfZSl7aWYoIShtZSBpbnN0YW5jZW9mIF9lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u'@;
put 'b3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxiKSxIPXAuY2FsbCh0aGlzLGZ1bmN0aW9uIFNlKFYscCxiKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIF9lP19lOl9lKFYscCxiKX0oeCxDLFQpKSxILmNvZGU9bWUsSH1yZXR1cm4gZnVuY3Rpb24gZyhtZSxfZSxUZSl7cmV0'@;
put 'dXJuIF9lJiZ5KG1lLnByb3RvdHlwZSxfZSksVGUmJnkobWUsVGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KSxtZX0oYil9KFRlKTtXW21lXT16ZX1mdW5jdGlvbiBKKG1lLF9lKXtpZihBcnJheS5pc0FycmF5KG1lKSl7dmFyIFRlPW1lLmxl'@;
put 'bmd0aDtyZXR1cm4gbWU9bWUubWFwKGZ1bmN0aW9uKFNlKXtyZXR1cm4gU3RyaW5nKFNlKX0pLFRlPjI/Im9uZSBvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChtZS5zbGljZSgwLFRlLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrbWVbVGUtMV06Mj09PVRlPyJvbmUgb2YgIi5jb25jYXQoX2Us'@;
put 'IiAiKS5jb25jYXQobWVbMF0sIiBvciAiKS5jb25jYXQobWVbMV0pOiJvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChtZVswXSl9cmV0dXJuIm9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KFN0cmluZyhtZSkpfWVlKCJFUlJfQU1CSUdVT1VTX0FSR1VNRU5UIiwnVGhlICIlcyIgYXJndW1l'@;
put 'bnQgaXMgYW1iaWd1b3VzLiAlcycsVHlwZUVycm9yKSxlZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKG1lLF9lLFRlKXt2YXIgU2UsemU7aWYodm9pZCAwPT09WSYmKFk9Xyg5MjgyKSksWSgic3RyaW5nIj09dHlwZW9mIG1lLCInbmFtZScgbXVzdCBiZSBhIHN0cmluZyIpLCJz'@;
put 'dHJpbmciPT10eXBlb2YgX2UmJmZ1bmN0aW9uIHJlKG1lLF9lLFRlKXtyZXR1cm4gbWUuc3Vic3RyKCFUZXx8VGU8MD8wOitUZSxfZS5sZW5ndGgpPT09X2V9KF9lLCJub3QgIik/KFNlPSJtdXN0IG5vdCBiZSIsX2U9X2UucmVwbGFjZSgvXm5vdCAvLCIiKSk6U2U9Im11c3QgYmUiLGZ1bmN0'@;
put 'aW9uIGllKG1lLF9lLFRlKXtyZXR1cm4odm9pZCAwPT09VGV8fFRlPm1lLmxlbmd0aCkmJihUZT1tZS5sZW5ndGgpLG1lLnN1YnN0cmluZyhUZS1fZS5sZW5ndGgsVGUpPT09X2V9KG1lLCIgYXJndW1lbnQiKSl6ZT0iVGhlICIuY29uY2F0KG1lLCIgIikuY29uY2F0KFNlLCIgIikuY29uY2F0'@;
put 'KEooX2UsInR5cGUiKSk7ZWxzZXt2YXIgVj1mdW5jdGlvbiBsZShtZSxfZSxUZSl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBUZSYmKFRlPTApLCEoVGUrX2UubGVuZ3RoPm1lLmxlbmd0aCkmJi0xIT09bWUuaW5kZXhPZihfZSxUZSl9KG1lLCIuIik/InByb3BlcnR5IjoiYXJndW1lbnQiO3pl'@;
put 'PSdUaGUgIicuY29uY2F0KG1lLCciICcpLmNvbmNhdChWLCIgIikuY29uY2F0KFNlLCIgIikuY29uY2F0KEooX2UsInR5cGUiKSl9cmV0dXJuIHplKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQoSShUZSkpfSxUeXBlRXJyb3IpLGVlKCJFUlJfSU5WQUxJRF9BUkdfVkFMVUUiLGZ1bmN0aW9u'@;
put 'KG1lLF9lKXt2YXIgVGU9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJpcyBpbnZhbGlkIjt2b2lkIDA9PT1YJiYoWD1fKDk1MzkpKTt2YXIgU2U9WC5pbnNwZWN0KF9lKTtyZXR1cm4gU2UubGVuZ3RoPjEyOCYmKFNlPSIiLmNvbmNhdChT'@;
put 'ZS5zbGljZSgwLDEyOCksIi4uLiIpKSwiVGhlIGFyZ3VtZW50ICciLmNvbmNhdChtZSwiJyAiKS5jb25jYXQoVGUsIi4gUmVjZWl2ZWQgIikuY29uY2F0KFNlKX0sVHlwZUVycm9yLFJhbmdlRXJyb3IpLGVlKCJFUlJfSU5WQUxJRF9SRVRVUk5fVkFMVUUiLGZ1bmN0aW9uKG1lLF9lLFRlKXt2'@;
put 'YXIgU2U7cmV0dXJuIFNlPVRlJiZUZS5jb25zdHJ1Y3RvciYmVGUuY29uc3RydWN0b3IubmFtZT8iaW5zdGFuY2Ugb2YgIi5jb25jYXQoVGUuY29uc3RydWN0b3IubmFtZSk6InR5cGUgIi5jb25jYXQoSShUZSkpLCJFeHBlY3RlZCAiLmNvbmNhdChtZSwnIHRvIGJlIHJldHVybmVkIGZyb20g'@;
put 'dGhlICInKS5jb25jYXQoX2UsJyInKSsiIGZ1bmN0aW9uIGJ1dCBnb3QgIi5jb25jYXQoU2UsIi4iKX0sVHlwZUVycm9yKSxlZSgiRVJSX01JU1NJTkdfQVJHUyIsZnVuY3Rpb24oKXtmb3IodmFyIG1lPWFyZ3VtZW50cy5sZW5ndGgsX2U9bmV3IEFycmF5KG1lKSxUZT0wO1RlPG1lO1RlKysp'@;
put 'X2VbVGVdPWFyZ3VtZW50c1tUZV07dm9pZCAwPT09WSYmKFk9Xyg5MjgyKSksWShfZS5sZW5ndGg+MCwiQXQgbGVhc3Qgb25lIGFyZyBuZWVkcyB0byBiZSBzcGVjaWZpZWQiKTt2YXIgU2U9IlRoZSAiLHplPV9lLmxlbmd0aDtzd2l0Y2goX2U9X2UubWFwKGZ1bmN0aW9uKFYpe3JldHVybici'@;
put 'Jy5jb25jYXQoViwnIicpfSksemUpe2Nhc2UgMTpTZSs9IiIuY29uY2F0KF9lWzBdLCIgYXJndW1lbnQiKTticmVhaztjYXNlIDI6U2UrPSIiLmNvbmNhdChfZVswXSwiIGFuZCAiKS5jb25jYXQoX2VbMV0sIiBhcmd1bWVudHMiKTticmVhaztkZWZhdWx0OlNlKz1fZS5zbGljZSgwLHplLTEp'@;
put 'LmpvaW4oIiwgIiksU2UrPSIsIGFuZCAiLmNvbmNhdChfZVt6ZS0xXSwiIGFyZ3VtZW50cyIpfXJldHVybiIiLmNvbmNhdChTZSwiIG11c3QgYmUgc3BlY2lmaWVkIil9LFR5cGVFcnJvciksdWUuZXhwb3J0cy5jb2Rlcz1XfSw5MTU4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9u'@;
put 'IEkoRHQsaXQpe3JldHVybiBmdW5jdGlvbiBQKER0KXtpZihBcnJheS5pc0FycmF5KER0KSlyZXR1cm4gRHR9KER0KXx8ZnVuY3Rpb24gdyhEdCxpdCl7dmFyICRlPW51bGw9PUR0P251bGw6dHlwZW9mIFN5bWJvbDwidSImJkR0W1N5bWJvbC5pdGVyYXRvcl18fER0WyJAQGl0ZXJhdG9yIl07'@;
put 'aWYobnVsbCE9JGUpe3ZhciB0dCxIZSx1dCxxdCxSdD1bXSxQdD0hMCxzaT0hMTt0cnl7aWYodXQ9KCRlPSRlLmNhbGwoRHQpKS5uZXh0LDA9PT1pdCl7aWYoT2JqZWN0KCRlKSE9PSRlKXJldHVybjtQdD0hMX1lbHNlIGZvcig7IShQdD0odHQ9dXQuY2FsbCgkZSkpLmRvbmUpJiYoUnQucHVz'@;
put 'aCh0dC52YWx1ZSksUnQubGVuZ3RoIT09aXQpO1B0PSEwKTt9Y2F0Y2goUXQpe3NpPSEwLEhlPVF0fWZpbmFsbHl7dHJ5e2lmKCFQdCYmbnVsbCE9JGUucmV0dXJuJiYocXQ9JGUucmV0dXJuKCksT2JqZWN0KHF0KSE9PXF0KSlyZXR1cm59ZmluYWxseXtpZihzaSl0aHJvdyBIZX19cmV0dXJu'@;
put 'IFJ0fX0oRHQsaXQpfHxmdW5jdGlvbiBnKER0LGl0KXtpZihEdCl7aWYoInN0cmluZyI9PXR5cGVvZiBEdClyZXR1cm4gQihEdCxpdCk7dmFyICRlPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChEdCkuc2xpY2UoOCwtMSk7aWYoIk9iamVjdCI9PT0kZSYmRHQuY29uc3RydWN0b3Im'@;
put 'JigkZT1EdC5jb25zdHJ1Y3Rvci5uYW1lKSwiTWFwIj09PSRlfHwiU2V0Ij09PSRlKXJldHVybiBBcnJheS5mcm9tKER0KTtpZigiQXJndW1lbnRzIj09PSRlfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdCgkZSkpcmV0dXJuIEIoRHQsaXQpfX0oRHQs'@;
put 'aXQpfHxmdW5jdGlvbiB5KCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9y'@;
put 'XSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBCKER0LGl0KXsobnVsbD09aXR8fGl0PkR0Lmxlbmd0aCkmJihpdD1EdC5sZW5ndGgpO2Zvcih2YXIgJGU9MCx0dD1uZXcgQXJyYXkoaXQpOyRlPGl0OyRlKyspdHRbJGVdPUR0WyRlXTtyZXR1cm4gdHR9ZnVuY3Rpb24gRihEdCl7cmV0dXJuKEY9'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oaXQpe3JldHVybiB0eXBlb2YgaXR9OmZ1bmN0aW9uKGl0KXtyZXR1cm4gaXQmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJml0LmNvbnN0cnVjdG9yPT09U3ltYm9s'@;
put 'JiZpdCE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGl0fSkoRHQpfXZhciBPPXZvaWQgMCE9PS9hL2cuZmxhZ3Msej1mdW5jdGlvbihpdCl7dmFyICRlPVtdO3JldHVybiBpdC5mb3JFYWNoKGZ1bmN0aW9uKHR0KXtyZXR1cm4gJGUucHVzaCh0dCl9KSwkZX0sTj1mdW5jdGlv'@;
put 'bihpdCl7dmFyICRlPVtdO3JldHVybiBpdC5mb3JFYWNoKGZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gJGUucHVzaChbSGUsdHRdKX0pLCRlfSxMPU9iamVjdC5pcz9PYmplY3QuaXM6Xyg2MDkpLEs9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1i'@;
put 'b2xzOmZ1bmN0aW9uKCl7cmV0dXJuW119LFU9TnVtYmVyLmlzTmFOP051bWJlci5pc05hTjpfKDM2MCk7ZnVuY3Rpb24gVyhEdCl7cmV0dXJuIER0LmNhbGwuYmluZChEdCl9dmFyIFk9VyhPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KSxYPVcoT2JqZWN0LnByb3RvdHlwZS5wcm9w'@;
put 'ZXJ0eUlzRW51bWVyYWJsZSksZWU9VyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSxKPV8oOTUzOSkudHlwZXMscmU9Si5pc0FueUFycmF5QnVmZmVyLGllPUouaXNBcnJheUJ1ZmZlclZpZXcsbGU9Si5pc0RhdGUsbWU9Si5pc01hcCxfZT1KLmlzUmVnRXhwLFRlPUouaXNTZXQsU2U9Si5p'@;
put 'c05hdGl2ZUVycm9yLHplPUouaXNCb3hlZFByaW1pdGl2ZSxWPUouaXNOdW1iZXJPYmplY3QscD1KLmlzU3RyaW5nT2JqZWN0LGI9Si5pc0Jvb2xlYW5PYmplY3QseD1KLmlzQmlnSW50T2JqZWN0LEM9Si5pc1N5bWJvbE9iamVjdCxUPUouaXNGbG9hdDMyQXJyYXksSD1KLmlzRmxvYXQ2NEFy'@;
put 'cmF5O2Z1bmN0aW9uIGooRHQpe2lmKDA9PT1EdC5sZW5ndGh8fER0Lmxlbmd0aD4xMClyZXR1cm4hMDtmb3IodmFyIGl0PTA7aXQ8RHQubGVuZ3RoO2l0Kyspe3ZhciAkZT1EdC5jaGFyQ29kZUF0KGl0KTtpZigkZTw0OHx8JGU+NTcpcmV0dXJuITB9cmV0dXJuIDEwPT09RHQubGVuZ3RoJiZE'@;
put 'dD49TWF0aC5wb3coMiwzMil9ZnVuY3Rpb24gRShEdCl7cmV0dXJuIE9iamVjdC5rZXlzKER0KS5maWx0ZXIoaikuY29uY2F0KEsoRHQpLmZpbHRlcihPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmJpbmQoRHQpKSl9ZnVuY3Rpb24gbShEdCxpdCl7aWYoRHQ9PT1pdCly'@;
put 'ZXR1cm4gMDtmb3IodmFyICRlPUR0Lmxlbmd0aCx0dD1pdC5sZW5ndGgsSGU9MCx1dD1NYXRoLm1pbigkZSx0dCk7SGU8dXQ7KytIZSlpZihEdFtIZV0hPT1pdFtIZV0peyRlPUR0W0hlXSx0dD1pdFtIZV07YnJlYWt9cmV0dXJuICRlPHR0Py0xOnR0PCRlPzE6MH12YXIgc2U9MCx3ZT0xLFVl'@;
put 'PTIsSmU9MztmdW5jdGlvbiBEZShEdCxpdCwkZSx0dCl7aWYoRHQ9PT1pdClyZXR1cm4gMCE9PUR0fHwhJGV8fEwoRHQsaXQpO2lmKCRlKXtpZigib2JqZWN0IiE9PUYoRHQpKXJldHVybiJudW1iZXIiPT10eXBlb2YgRHQmJlUoRHQpJiZVKGl0KTtpZigib2JqZWN0IiE9PUYoaXQpfHxudWxs'@;
put 'PT09RHR8fG51bGw9PT1pdHx8T2JqZWN0LmdldFByb3RvdHlwZU9mKER0KSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihpdCkpcmV0dXJuITF9ZWxzZXtpZihudWxsPT09RHR8fCJvYmplY3QiIT09RihEdCkpcmV0dXJuKG51bGw9PT1pdHx8Im9iamVjdCIhPT1GKGl0KSkmJkR0PT1pdDtpZihu'@;
put 'dWxsPT09aXR8fCJvYmplY3QiIT09RihpdCkpcmV0dXJuITF9dmFyIEhlPWVlKER0KTtpZihIZSE9PWVlKGl0KSlyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KER0KSl7aWYoRHQubGVuZ3RoIT09aXQubGVuZ3RoKXJldHVybiExO3ZhciBxdD1FKER0KSxSdD1FKGl0KTtyZXR1cm4gcXQubGVu'@;
put 'Z3RoPT09UnQubGVuZ3RoJiZSZShEdCxpdCwkZSx0dCx3ZSxxdCl9aWYoIltvYmplY3QgT2JqZWN0XSI9PT1IZSYmKCFtZShEdCkmJm1lKGl0KXx8IVRlKER0KSYmVGUoaXQpKSlyZXR1cm4hMTtpZihsZShEdCkpe2lmKCFsZShpdCl8fERhdGUucHJvdG90eXBlLmdldFRpbWUuY2FsbChEdCkh'@;
put 'PT1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoaXQpKXJldHVybiExfWVsc2UgaWYoX2UoRHQpKXtpZighX2UoaXQpfHwhZnVuY3Rpb24gYXQoRHQsaXQpe3JldHVybiBPP0R0LnNvdXJjZT09PWl0LnNvdXJjZSYmRHQuZmxhZ3M9PT1pdC5mbGFnczpSZWdFeHAucHJvdG90eXBlLnRvU3Ry'@;
put 'aW5nLmNhbGwoRHQpPT09UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0KX0oRHQsaXQpKXJldHVybiExfWVsc2UgaWYoU2UoRHQpfHxEdCBpbnN0YW5jZW9mIEVycm9yKXtpZihEdC5tZXNzYWdlIT09aXQubWVzc2FnZXx8RHQubmFtZSE9PWl0Lm5hbWUpcmV0dXJuITF9ZWxzZXtp'@;
put 'ZihpZShEdCkpe2lmKCRlfHwhVChEdCkmJiFIKER0KSl7aWYoIWZ1bmN0aW9uIHZlKER0LGl0KXtyZXR1cm4gRHQuYnl0ZUxlbmd0aD09PWl0LmJ5dGVMZW5ndGgmJjA9PT1tKG5ldyBVaW50OEFycmF5KER0LmJ1ZmZlcixEdC5ieXRlT2Zmc2V0LER0LmJ5dGVMZW5ndGgpLG5ldyBVaW50OEFy'@;
put 'cmF5KGl0LmJ1ZmZlcixpdC5ieXRlT2Zmc2V0LGl0LmJ5dGVMZW5ndGgpKX0oRHQsaXQpKXJldHVybiExfWVsc2UgaWYoIWZ1bmN0aW9uIE1lKER0LGl0KXtpZihEdC5ieXRlTGVuZ3RoIT09aXQuYnl0ZUxlbmd0aClyZXR1cm4hMTtmb3IodmFyICRlPTA7JGU8RHQuYnl0ZUxlbmd0aDskZSsr'@;
put 'KWlmKER0WyRlXSE9PWl0WyRlXSlyZXR1cm4hMTtyZXR1cm4hMH0oRHQsaXQpKXJldHVybiExO3ZhciBQdD1FKER0KSxzaT1FKGl0KTtyZXR1cm4gUHQubGVuZ3RoPT09c2kubGVuZ3RoJiZSZShEdCxpdCwkZSx0dCxzZSxQdCl9aWYoVGUoRHQpKXJldHVybiEoIVRlKGl0KXx8RHQuc2l6ZSE9'@;
put 'PWl0LnNpemUpJiZSZShEdCxpdCwkZSx0dCxVZSk7aWYobWUoRHQpKXJldHVybiEoIW1lKGl0KXx8RHQuc2l6ZSE9PWl0LnNpemUpJiZSZShEdCxpdCwkZSx0dCxKZSk7aWYocmUoRHQpKXtpZighZnVuY3Rpb24gWGUoRHQsaXQpe3JldHVybiBEdC5ieXRlTGVuZ3RoPT09aXQuYnl0ZUxlbmd0'@;
put 'aCYmMD09PW0obmV3IFVpbnQ4QXJyYXkoRHQpLG5ldyBVaW50OEFycmF5KGl0KSl9KER0LGl0KSlyZXR1cm4hMX1lbHNlIGlmKHplKER0KSYmIWZ1bmN0aW9uIGplKER0LGl0KXtyZXR1cm4gVihEdCk/VihpdCkmJkwoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoRHQpLE51bWJlci5w'@;
put 'cm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KSk6cChEdCk/cChpdCkmJlN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KT09PVN0cmluZy5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KTpiKER0KT9iKGl0KSYmQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KT09PUJvb2xl'@;
put 'YW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCk6eChEdCk/eChpdCkmJkJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KT09PUJpZ0ludC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KTpDKGl0KSYmU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoRHQpPT09U3ltYm9sLnBy'@;
put 'b3RvdHlwZS52YWx1ZU9mLmNhbGwoaXQpfShEdCxpdCkpcmV0dXJuITF9cmV0dXJuIFJlKER0LGl0LCRlLHR0LHNlKX1mdW5jdGlvbiBGZShEdCxpdCl7cmV0dXJuIGl0LmZpbHRlcihmdW5jdGlvbigkZSl7cmV0dXJuIFgoRHQsJGUpfSl9ZnVuY3Rpb24gUmUoRHQsaXQsJGUsdHQsSGUsdXQp'@;
put 'e2lmKDU9PT1hcmd1bWVudHMubGVuZ3RoKXt1dD1PYmplY3Qua2V5cyhEdCk7dmFyIHF0PU9iamVjdC5rZXlzKGl0KTtpZih1dC5sZW5ndGghPT1xdC5sZW5ndGgpcmV0dXJuITF9Zm9yKHZhciBSdD0wO1J0PHV0Lmxlbmd0aDtSdCsrKWlmKCFZKGl0LHV0W1J0XSkpcmV0dXJuITE7aWYoJGUm'@;
put 'JjU9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgUHQ9SyhEdCk7aWYoMCE9PVB0Lmxlbmd0aCl7dmFyIHNpPTA7Zm9yKFJ0PTA7UnQ8UHQubGVuZ3RoO1J0Kyspe3ZhciBRdD1QdFtSdF07aWYoWChEdCxRdCkpe2lmKCFYKGl0LFF0KSlyZXR1cm4hMTt1dC5wdXNoKFF0KSxzaSsrfWVsc2UgaWYo'@;
put 'WChpdCxRdCkpcmV0dXJuITF9dmFyIHNuPUsoaXQpO2lmKFB0Lmxlbmd0aCE9PXNuLmxlbmd0aCYmRmUoaXQsc24pLmxlbmd0aCE9PXNpKXJldHVybiExfWVsc2V7dmFyIFJpPUsoaXQpO2lmKDAhPT1SaS5sZW5ndGgmJjAhPT1GZShpdCxSaSkubGVuZ3RoKXJldHVybiExfX1pZigwPT09dXQu'@;
put 'bGVuZ3RoJiYoSGU9PT1zZXx8SGU9PT13ZSYmMD09PUR0Lmxlbmd0aHx8MD09PUR0LnNpemUpKXJldHVybiEwO2lmKHZvaWQgMD09PXR0KXR0PXt2YWwxOm5ldyBNYXAsdmFsMjpuZXcgTWFwLHBvc2l0aW9uOjB9O2Vsc2V7dmFyIGhuPXR0LnZhbDEuZ2V0KER0KTtpZih2b2lkIDAhPT1obil7'@;
put 'dmFyIGZ0PXR0LnZhbDIuZ2V0KGl0KTtpZih2b2lkIDAhPT1mdClyZXR1cm4gaG49PT1mdH10dC5wb3NpdGlvbisrfXR0LnZhbDEuc2V0KER0LHR0LnBvc2l0aW9uKSx0dC52YWwyLnNldChpdCx0dC5wb3NpdGlvbik7dmFyIE9yPWZ1bmN0aW9uIHVuKER0LGl0LCRlLHR0LEhlLHV0KXt2YXIg'@;
put 'cXQ9MDtpZih1dD09PVVlKXtpZighZnVuY3Rpb24gX3QoRHQsaXQsJGUsdHQpe2Zvcih2YXIgSGU9bnVsbCx1dD16KER0KSxxdD0wO3F0PHV0Lmxlbmd0aDtxdCsrKXt2YXIgUnQ9dXRbcXRdO2lmKCJvYmplY3QiPT09RihSdCkmJm51bGwhPT1SdCludWxsPT09SGUmJihIZT1uZXcgU2V0KSxI'@;
put 'ZS5hZGQoUnQpO2Vsc2UgaWYoIWl0LmhhcyhSdCkpe2lmKCRlfHwha2UoRHQsaXQsUnQpKXJldHVybiExO251bGw9PT1IZSYmKEhlPW5ldyBTZXQpLEhlLmFkZChSdCl9fWlmKG51bGwhPT1IZSl7Zm9yKHZhciBQdD16KGl0KSxzaT0wO3NpPFB0Lmxlbmd0aDtzaSsrKXt2YXIgUXQ9UHRbc2ld'@;
put 'O2lmKCJvYmplY3QiPT09RihRdCkmJm51bGwhPT1RdCl7aWYoIUllKEhlLFF0LCRlLHR0KSlyZXR1cm4hMX1lbHNlIGlmKCEkZSYmIUR0LmhhcyhRdCkmJiFJZShIZSxRdCwkZSx0dCkpcmV0dXJuITF9cmV0dXJuIDA9PT1IZS5zaXplfXJldHVybiEwfShEdCxpdCwkZSxIZSkpcmV0dXJuITF9'@;
put 'ZWxzZSBpZih1dD09PUplKXtpZighZnVuY3Rpb24gUWUoRHQsaXQsJGUsdHQpe2Zvcih2YXIgSGU9bnVsbCx1dD1OKER0KSxxdD0wO3F0PHV0Lmxlbmd0aDtxdCsrKXt2YXIgUnQ9SSh1dFtxdF0sMiksUHQ9UnRbMF0sc2k9UnRbMV07aWYoIm9iamVjdCI9PT1GKFB0KSYmbnVsbCE9PVB0KW51'@;
put 'bGw9PT1IZSYmKEhlPW5ldyBTZXQpLEhlLmFkZChQdCk7ZWxzZXt2YXIgUXQ9aXQuZ2V0KFB0KTtpZih2b2lkIDA9PT1RdCYmIWl0LmhhcyhQdCl8fCFEZShzaSxRdCwkZSx0dCkpe2lmKCRlfHwhQWUoRHQsaXQsUHQsc2ksdHQpKXJldHVybiExO251bGw9PT1IZSYmKEhlPW5ldyBTZXQpLEhl'@;
put 'LmFkZChQdCl9fX1pZihudWxsIT09SGUpe2Zvcih2YXIgc249TihpdCksUmk9MDtSaTxzbi5sZW5ndGg7UmkrKyl7dmFyIGhuPUkoc25bUmldLDIpLGZ0PWhuWzBdLE9yPWhuWzFdO2lmKCJvYmplY3QiPT09RihmdCkmJm51bGwhPT1mdCl7aWYoIW50KEhlLER0LGZ0LE9yLCRlLHR0KSlyZXR1'@;
put 'cm4hMX1lbHNlIGlmKCEoJGV8fER0LmhhcyhmdCkmJkRlKER0LmdldChmdCksT3IsITEsdHQpfHxudChIZSxEdCxmdCxPciwhMSx0dCkpKXJldHVybiExfXJldHVybiAwPT09SGUuc2l6ZX1yZXR1cm4hMH0oRHQsaXQsJGUsSGUpKXJldHVybiExfWVsc2UgaWYodXQ9PT13ZSlmb3IoO3F0PER0'@;
put 'Lmxlbmd0aDtxdCsrKXtpZighWShEdCxxdCkpe2lmKFkoaXQscXQpKXJldHVybiExO2Zvcih2YXIgUnQ9T2JqZWN0LmtleXMoRHQpO3F0PFJ0Lmxlbmd0aDtxdCsrKXt2YXIgUHQ9UnRbcXRdO2lmKCFZKGl0LFB0KXx8IURlKER0W1B0XSxpdFtQdF0sJGUsSGUpKXJldHVybiExfXJldHVybiBS'@;
put 'dC5sZW5ndGg9PT1PYmplY3Qua2V5cyhpdCkubGVuZ3RofWlmKCFZKGl0LHF0KXx8IURlKER0W3F0XSxpdFtxdF0sJGUsSGUpKXJldHVybiExfWZvcihxdD0wO3F0PHR0Lmxlbmd0aDtxdCsrKXt2YXIgc2k9dHRbcXRdO2lmKCFEZShEdFtzaV0saXRbc2ldLCRlLEhlKSlyZXR1cm4hMX1yZXR1'@;
put 'cm4hMH0oRHQsaXQsJGUsdXQsdHQsSGUpO3JldHVybiB0dC52YWwxLmRlbGV0ZShEdCksdHQudmFsMi5kZWxldGUoaXQpLE9yfWZ1bmN0aW9uIEllKER0LGl0LCRlLHR0KXtmb3IodmFyIEhlPXooRHQpLHV0PTA7dXQ8SGUubGVuZ3RoO3V0Kyspe3ZhciBxdD1IZVt1dF07aWYoRGUoaXQscXQs'@;
put 'JGUsdHQpKXJldHVybiBEdC5kZWxldGUocXQpLCEwfXJldHVybiExfWZ1bmN0aW9uIFZlKER0KXtzd2l0Y2goRihEdCkpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gbnVsbDtjYXNlIm9iamVjdCI6cmV0dXJuO2Nhc2Uic3ltYm9sIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6RHQ9K0R0O2Nhc2Ui'@;
put 'bnVtYmVyIjppZihVKER0KSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBrZShEdCxpdCwkZSl7dmFyIHR0PVZlKCRlKTtyZXR1cm4gdHQ/PyhpdC5oYXModHQpJiYhRHQuaGFzKHR0KSl9ZnVuY3Rpb24gQWUoRHQsaXQsJGUsdHQsSGUpe3ZhciB1dD1WZSgkZSk7aWYobnVsbCE9dXQpcmV0'@;
put 'dXJuIHV0O3ZhciBxdD1pdC5nZXQodXQpO3JldHVybiEodm9pZCAwPT09cXQmJiFpdC5oYXModXQpfHwhRGUodHQscXQsITEsSGUpKSYmIUR0Lmhhcyh1dCkmJkRlKHR0LHF0LCExLEhlKX1mdW5jdGlvbiBudChEdCxpdCwkZSx0dCxIZSx1dCl7Zm9yKHZhciBxdD16KER0KSxSdD0wO1J0PHF0'@;
put 'Lmxlbmd0aDtSdCsrKXt2YXIgUHQ9cXRbUnRdO2lmKERlKCRlLFB0LEhlLHV0KSYmRGUodHQsaXQuZ2V0KFB0KSxIZSx1dCkpcmV0dXJuIER0LmRlbGV0ZShQdCksITB9cmV0dXJuITF9dWUuZXhwb3J0cz17aXNEZWVwRXF1YWw6ZnVuY3Rpb24geXQoRHQsaXQpe3JldHVybiBEZShEdCxpdCwh'@;
put 'MSl9LGlzRGVlcFN0cmljdEVxdWFsOmZ1bmN0aW9uIE10KER0LGl0KXtyZXR1cm4gRGUoRHQsaXQsITApfX19LDgyMjQ6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLndyYXBwZXI9ZnVuY3Rpb24gXyhJKXty'@;
put 'ZXR1cm4gSX19LDk3NDI6KHVlLHEpPT57InVzZSBzdHJpY3QiO3EuYnl0ZUxlbmd0aD1mdW5jdGlvbiBGKFUpe3ZhciBXPVAoVSksWD1XWzFdO3JldHVybiAzKihXWzBdK1gpLzQtWH0scS50b0J5dGVBcnJheT1mdW5jdGlvbiB6KFUpe3ZhciBXLGxlLFk9UChVKSxYPVlbMF0sZWU9WVsxXSxK'@;
put 'PW5ldyB5KGZ1bmN0aW9uIE8oVSxXLFkpe3JldHVybiAzKihXK1kpLzQtWX0oMCxYLGVlKSkscmU9MCxpZT1lZT4wP1gtNDpYO2ZvcihsZT0wO2xlPGllO2xlKz00KVc9SVtVLmNoYXJDb2RlQXQobGUpXTw8MTh8SVtVLmNoYXJDb2RlQXQobGUrMSldPDwxMnxJW1UuY2hhckNvZGVBdChsZSsy'@;
put 'KV08PDZ8SVtVLmNoYXJDb2RlQXQobGUrMyldLEpbcmUrK109Vz4+MTYmMjU1LEpbcmUrK109Vz4+OCYyNTUsSltyZSsrXT0yNTUmVztyZXR1cm4gMj09PWVlJiYoVz1JW1UuY2hhckNvZGVBdChsZSldPDwyfElbVS5jaGFyQ29kZUF0KGxlKzEpXT4+NCxKW3JlKytdPTI1NSZXKSwxPT09ZWUm'@;
put 'JihXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDEwfElbVS5jaGFyQ29kZUF0KGxlKzEpXTw8NHxJW1UuY2hhckNvZGVBdChsZSsyKV0+PjIsSltyZSsrXT1XPj44JjI1NSxKW3JlKytdPTI1NSZXKSxKfSxxLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gSyhVKXtmb3IodmFyIFcsWT1VLmxlbmd0aCxY'@;
put 'PVklMyxlZT1bXSxKPTE2MzgzLHJlPTAsaWU9WS1YO3JlPGllO3JlKz1KKWVlLnB1c2goTChVLHJlLHJlK0o+aWU/aWU6cmUrSikpO3JldHVybiAxPT09WD9lZS5wdXNoKF9bKFc9VVtZLTFdKT4+Ml0rX1tXPDw0JjYzXSsiPT0iKToyPT09WCYmZWUucHVzaChfWyhXPShVW1ktMl08PDgpK1Vb'@;
put 'WS0xXSk+PjEwXStfW1c+PjQmNjNdK19bVzw8MiY2M10rIj0iKSxlZS5qb2luKCIiKX07Zm9yKHZhciBfPVtdLEk9W10seT10eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxnPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6'@;
put 'MDEyMzQ1Njc4OSsvIixCPTA7Qjw2NDsrK0IpX1tCXT1nW0JdLElbZy5jaGFyQ29kZUF0KEIpXT1CO2Z1bmN0aW9uIFAoVSl7dmFyIFc9VS5sZW5ndGg7aWYoVyU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFy'@;
put 'IFk9VS5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1ZJiYoWT1XKSxbWSxZPT09Vz8wOjQtWSU0XX1mdW5jdGlvbiBOKFUpe3JldHVybiBfW1U+PjE4JjYzXStfW1U+PjEyJjYzXStfW1U+PjYmNjNdK19bNjMmVV19ZnVuY3Rpb24gTChVLFcsWSl7Zm9yKHZhciBlZT1bXSxKPVc7SjxZO0orPTMp'@;
put 'ZWUucHVzaChOKChVW0pdPDwxNiYxNjcxMTY4MCkrKFVbSisxXTw8OCY2NTI4MCkrKDI1NSZVW0orMl0pKSk7cmV0dXJuIGVlLmpvaW4oIiIpfUlbNDVdPTYyLElbOTVdPTYzfSwzNTUwOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkseSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoeCxD'@;
put 'KXtpZigheCl0aHJvdyBuZXcgRXJyb3IoQ3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKHgsQyl7eC5zdXBlcl89Qzt2YXIgVD1mdW5jdGlvbigpe307VC5wcm90b3R5cGU9Qy5wcm90b3R5cGUseC5wcm90b3R5cGU9bmV3IFQseC5wcm90b3R5cGUuY29uc3RydWN0b3I9eH1mdW5j'@;
put 'dGlvbiB3KHgsQyxUKXtpZih3LmlzQk4oeCkpcmV0dXJuIHg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PXgmJigoImxlIj09PUN8fCJiZSI9PT1DKSYmKFQ9QyxDPTEwKSx0aGlzLl9pbml0KHh8fDAsQ3x8MTAsVHx8'@;
put 'ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzp5LkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOl8oNjYwMSkuQnVmZmVyfWNhdGNoe31mdW5jdGlv'@;
put 'biBGKHgsQyl7dmFyIFQ9eC5jaGFyQ29kZUF0KEMpO3JldHVybiBUPj00OCYmVDw9NTc/VC00ODpUPj02NSYmVDw9NzA/VC01NTpUPj05NyYmVDw9MTAyP1QtODc6dm9pZCBnKCExLCJJbnZhbGlkIGNoYXJhY3RlciBpbiAiK3gpfWZ1bmN0aW9uIE8oeCxDLFQpe3ZhciBIPUYoeCxUKTtyZXR1'@;
put 'cm4gVC0xPj1DJiYoSHw9Rih4LFQtMSk8PDQpLEh9ZnVuY3Rpb24geih4LEMsVCxIKXtmb3IodmFyIGo9MCxFPTAsbT1NYXRoLm1pbih4Lmxlbmd0aCxUKSxBPUM7QTxtO0ErKyl7dmFyIG9lPXguY2hhckNvZGVBdChBKS00ODtqKj1ILEU9b2U+PTQ5P29lLTQ5KzEwOm9lPj0xNz9vZS0xNysx'@;
put 'MDpvZSxnKG9lPj0wJiZFPEgsIkludmFsaWQgY2hhcmFjdGVyIiksais9RX1yZXR1cm4gan1mdW5jdGlvbiBOKHgsQyl7eC53b3Jkcz1DLndvcmRzLHgubGVuZ3RoPUMubGVuZ3RoLHgubmVnYXRpdmU9Qy5uZWdhdGl2ZSx4LnJlZD1DLnJlZH1pZih3LmlzQk49ZnVuY3Rpb24oQyl7cmV0dXJu'@;
put 'IEMgaW5zdGFuY2VvZiB3fHxudWxsIT09QyYmIm9iamVjdCI9PXR5cGVvZiBDJiZDLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShDLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5jbXAoVCk+MD9DOlR9LHcubWluPWZ1bmN0aW9u'@;
put 'KEMsVCl7cmV0dXJuIEMuY21wKFQpPDA/QzpUfSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihDLFQsSCl7aWYoIm51bWJlciI9PXR5cGVvZiBDKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKEMsVCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIEMpcmV0dXJuIHRoaXMuX2luaXRBcnJheShDLFQs'@;
put 'SCk7ImhleCI9PT1UJiYoVD0xNiksZyhUPT09KDB8VCkmJlQ+PTImJlQ8PTM2KTt2YXIgaj0wOyItIj09PShDPUMudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoaisrLHRoaXMubmVnYXRpdmU9MSksajxDLmxlbmd0aCYmKDE2PT09VD90aGlzLl9wYXJzZUhleChDLGosSCk6'@;
put 'KHRoaXMuX3BhcnNlQmFzZShDLFQsaiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxULEgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKEMsVCxIKXtDPDAmJih0aGlzLm5lZ2F0aXZlPTEsQz0tQyksQzw2NzEwODg2ND8odGhpcy53b3Jkcz1b'@;
put 'NjcxMDg4NjMmQ10sdGhpcy5sZW5ndGg9MSk6Qzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZDLEMvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKEM8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3'@;
put 'MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihDLFQsSCl7aWYoZygibnVtYmVyIj09dHlwZW9mIEMubGVuZ3RoKSxDLmxlbmd0aDw9MClyZXR1cm4gdGhp'@;
put 'cy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChDLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBqPTA7ajx0aGlzLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT0wO3ZhciBFLG0sQT0wO2lmKCJiZSI9'@;
put 'PT1IKWZvcihqPUMubGVuZ3RoLTEsRT0wO2o+PTA7ai09Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbai0xXTw8OHxDW2otMl08PDE2KTw8QSY2NzEwODg2Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYmJihBLT0yNixFKyspO2Vsc2UgaWYoImxlIj09'@;
put 'PUgpZm9yKGo9MCxFPTA7ajxDLmxlbmd0aDtqKz0zKXRoaXMud29yZHNbRV18PShtPUNbal18Q1tqKzFdPDw4fENbaisyXTw8MTYpPDxBJjY3MTA4ODYzLHRoaXMud29yZHNbRSsxXT1tPj4+MjYtQSY2NzEwODg2MywoQSs9MjQpPj0yNiYmKEEtPTI2LEUrKyk7cmV0dXJuIHRoaXMuX3N0cmlw'@;
put 'KCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihDLFQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChDLmxlbmd0aC1UKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBqPTA7ajx0aGlzLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT0wO3ZhciBB'@;
put 'LEU9MCxtPTA7aWYoImJlIj09PUgpZm9yKGo9Qy5sZW5ndGgtMTtqPj1UO2otPTIpQT1PKEMsVCxqKTw8RSx0aGlzLndvcmRzW21dfD02NzEwODg2MyZBLEU+PTE4PyhFLT0xOCx0aGlzLndvcmRzW20rPTFdfD1BPj4+MjYpOkUrPTg7ZWxzZSBmb3Ioaj0oQy5sZW5ndGgtVCklMj09MD9UKzE6'@;
put 'VDtqPEMubGVuZ3RoO2orPTIpQT1PKEMsVCxqKTw8RSx0aGlzLndvcmRzW21dfD02NzEwODg2MyZBLEU+PTE4PyhFLT0xOCx0aGlzLndvcmRzW20rPTFdfD1BPj4+MjYpOkUrPTg7dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihDLFQsSCl7dGhpcy53b3Jk'@;
put 'cz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGo9MCxFPTE7RTw9NjcxMDg4NjM7RSo9VClqKys7ai0tLEU9RS9UfDA7Zm9yKHZhciBtPUMubGVuZ3RoLUgsQT1tJWosb2U9TWF0aC5taW4obSxtLUEpK0gsdGU9MCxzZT1IO3NlPG9lO3NlKz1qKXRlPXooQyxzZSxzZStqLFQpLHRoaXMuaW11'@;
put 'bG4oRSksdGhpcy53b3Jkc1swXSt0ZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz10ZTp0aGlzLl9pYWRkbih0ZSk7aWYoMCE9PUEpe3ZhciB3ZT0xO2Zvcih0ZT16KEMsc2UsQy5sZW5ndGgsVCksc2U9MDtzZTxBO3NlKyspd2UqPVQ7dGhpcy5pbXVsbih3ZSksdGhpcy53b3Jkc1swXSt0ZTw2'@;
put 'NzEwODg2ND90aGlzLndvcmRzWzBdKz10ZTp0aGlzLl9pYWRkbih0ZSl9dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihDKXtDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aDtUKyspQy53b3Jkc1tUXT10aGlzLndv'@;
put 'cmRzW1RdO0MubGVuZ3RoPXRoaXMubGVuZ3RoLEMubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxDLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24oQyl7TihDLHRoaXMpfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBDPW5ldyB3KG51bGwpO3JldHVybiB0'@;
put 'aGlzLmNvcHkoQyksQ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihDKXtmb3IoO3RoaXMubGVuZ3RoPEM7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuX3N0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhp'@;
put 'cy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHR5'@;
put 'cGVvZiBTeW1ib2w8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7dy5wcm90b3R5cGVbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09TH1jYXRjaHt3LnByb3RvdHlwZS5pbnNwZWN0PUx9ZWxzZSB3LnByb3RvdHlwZS5pbnNwZWN0PUw7ZnVu'@;
put 'Y3Rpb24gTCgpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifXZhciBLPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwx'@;
put 'MSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sVz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgw'@;
put 'OCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0'@;
put 'NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZSh4LEMsVCl7VC5uZWdhdGl2ZT1DLm5lZ2F0aXZlXngubmVnYXRpdmU7dmFyIEg9eC5sZW5ndGgrQy5sZW5ndGh8MDtULmxlbmd0aD1ILEg9SC0xfDA7dmFyIGo9MHx4LndvcmRzWzBdLEU9MHxDLndv'@;
put 'cmRzWzBdLG09aipFLG9lPW0vNjcxMDg4NjR8MDtULndvcmRzWzBdPTY3MTA4ODYzJm07Zm9yKHZhciB0ZT0xO3RlPEg7dGUrKyl7Zm9yKHZhciBzZT1vZT4+PjI2LHdlPTY3MTA4ODYzJm9lLFVlPU1hdGgubWluKHRlLEMubGVuZ3RoLTEpLEplPU1hdGgubWF4KDAsdGUteC5sZW5ndGgrMSk7'@;
put 'SmU8PVVlO0plKyspc2UrPShtPShqPTB8eC53b3Jkc1t0ZS1KZXwwXSkqKEU9MHxDLndvcmRzW0plXSkrd2UpLzY3MTA4ODY0fDAsd2U9NjcxMDg4NjMmbTtULndvcmRzW3RlXT0wfHdlLG9lPTB8c2V9cmV0dXJuIDAhPT1vZT9ULndvcmRzW3RlXT0wfG9lOlQubGVuZ3RoLS0sVC5fc3RyaXAo'@;
put 'KX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihDLFQpe3ZhciBIO2lmKFQ9MHxUfHwxLDE2PT09KEM9Q3x8MTApfHwiaGV4Ij09PUMpe0g9IiI7Zm9yKHZhciBqPTAsRT0wLG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIEE9dGhpcy53b3Jkc1ttXSxvZT0oMTY3NzcyMTUmKEE8PGp8'@;
put 'RSkpLnRvU3RyaW5nKDE2KTtFPUE+Pj4yNC1qJjE2Nzc3MjE1LChqKz0yKT49MjYmJihqLT0yNixtLS0pLEg9MCE9PUV8fG0hPT10aGlzLmxlbmd0aC0xP0tbNi1vZS5sZW5ndGhdK29lK0g6b2UrSH1mb3IoMCE9PUUmJihIPUUudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJVQhPTA7KUg9IjAi'@;
put 'K0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihDPT09KDB8QykmJkM+PTImJkM8PTM2KXt2YXIgdGU9VVtDXSxzZT1XW0NdO0g9IiI7dmFyIHdlPXRoaXMuY2xvbmUoKTtmb3Iod2UubmVnYXRpdmU9MDshd2UuaXNaZXJvKCk7KXt2YXIgVWU9d2UubW9kcm4oc2Up'@;
put 'LnRvU3RyaW5nKEMpO0g9KHdlPXdlLmlkaXZuKHNlKSkuaXNaZXJvKCk/VWUrSDpLW3RlLVVlLmxlbmd0aF0rVWUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJVQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1nKCExLCJC'@;
put 'YXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP0MrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jk'@;
put 'c1syXT9DKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LUM6Q30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsMil9LFAmJih3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKFAsQyxUKX0pLHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJh'@;
put 'eSxDLFQpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihDLFQsSCl7dGhpcy5fc3RyaXAoKTt2YXIgaj10aGlzLmJ5dGVMZW5ndGgoKSxFPUh8fE1hdGgubWF4KDEsaik7ZyhqPD1FLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhFPjAsIlJlcXVl'@;
put 'c3RlZCBhcnJheSBsZW5ndGggPD0gMCIpO3ZhciBtPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuYWxsb2NVbnNhZmU/Qy5hbGxvY1Vuc2FmZShUKTpuZXcgQyhUKX0oQyxFKTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PVQ/IkxFIjoiQkUiKV0obSxqKSxtfSx3LnByb3RvdHlw'@;
put 'ZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD0wLGo9MCxFPTAsbT0wO0U8dGhpcy5sZW5ndGg7RSsrKXt2YXIgQT10aGlzLndvcmRzW0VdPDxtfGo7Q1tIKytdPTI1NSZBLEg8Qy5sZW5ndGgmJihDW0grK109QT4+OCYyNTUpLEg8Qy5sZW5ndGgmJihDW0grK109QT4+'@;
put 'MTYmMjU1KSw2PT09bT8oSDxDLmxlbmd0aCYmKENbSCsrXT1BPj4yNCYyNTUpLGo9MCxtPTApOihqPUE+Pj4yNCxtKz0yKX1pZihIPEMubGVuZ3RoKWZvcihDW0grK109ajtIPEMubGVuZ3RoOylDW0grK109MH0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24oQyxUKXtmb3Io'@;
put 'dmFyIEg9Qy5sZW5ndGgtMSxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxqO0NbSC0tXT0yNTUmQSxIPj0wJiYoQ1tILS1dPUE+PjgmMjU1KSxIPj0wJiYoQ1tILS1dPUE+PjE2JjI1NSksNj09PW0/KEg+PTAmJihDW0gtLV09QT4+MjQmMjU1'@;
put 'KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSD49MClmb3IoQ1tILS1dPWo7SD49MDspQ1tILS1dPTB9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihDKXtyZXR1cm4gMzItTWF0aC5jbHozMihDKX06ZnVuY3Rpb24oQyl7dmFyIFQ9QyxIPTA7cmV0dXJu'@;
put 'IFQ+PTQwOTYmJihIKz0xMyxUPj4+PTEzKSxUPj02NCYmKEgrPTcsVD4+Pj03KSxUPj04JiYoSCs9NCxUPj4+PTQpLFQ+PTImJihIKz0yLFQ+Pj49MiksSCtUfSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oQyl7aWYoMD09PUMpcmV0dXJuIDI2O3ZhciBUPUMsSD0wO3JldHVybiA4'@;
put 'MTkxJlR8fChIKz0xMyxUPj4+PTEzKSwxMjcmVHx8KEgrPTcsVD4+Pj03KSwxNSZUfHwoSCs9NCxUPj4+PTQpLDMmVHx8KEgrPTIsVD4+Pj0yKSwxJlR8fEgrKyxIfSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlz'@;
put 'Lmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStUfSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBDPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRz'@;
put 'W1RdKTtpZihDKz1ILDI2IT09SClicmVha31yZXR1cm4gQ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90'@;
put 'aGlzLmFicygpLmlub3RuKEMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMudGVzdG4oQy0xKT90aGlzLm5vdG4oQykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnBy'@;
put 'b3RvdHlwZS5pdW9yPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8Qy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIFQ9MDtUPEMubGVuZ3RoO1QrKyl0aGlzLndvcmRzW1RdPXRoaXMud29yZHNbVF18Qy53b3Jkc1tUXTtyZXR1cm4gdGhpcy5fc3RyaXAo'@;
put 'KX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKEMpe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhpcy5pdW9yKEMpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihDKTpDLmNsb25l'@;
put 'KCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKEMpOkMuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihDKXt2YXIgVDtUPXRoaXMubGVuZ3RoPkMu'@;
put 'bGVuZ3RoP0M6dGhpcztmb3IodmFyIEg9MDtIPFQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mQy53b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRo'@;
put 'aXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoQyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoQyk6Qy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24o'@;
put 'Qyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChDKTpDLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKEMpe3ZhciBULEg7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFQ9dGhpcyxIPUMpOihUPUMsSD10aGlzKTtmb3Io'@;
put 'dmFyIGo9MDtqPEgubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal1eSC53b3Jkc1tqXTtpZih0aGlzIT09VClmb3IoO2o8VC5sZW5ndGg7aisrKXRoaXMud29yZHNbal09VC53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90'@;
put 'b3R5cGUuaXhvcj1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoQyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoQyk6Qy5jbG9uZSgpLml4'@;
put 'b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihDKTpDLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZD'@;
put 'Pj0wKTt2YXIgVD0wfE1hdGguY2VpbChDLzI2KSxIPUMlMjY7dGhpcy5fZXhwYW5kKFQpLEg+MCYmVC0tO2Zvcih2YXIgaj0wO2o8VDtqKyspdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tqXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEw'@;
put 'ODg2Mz4+MjYtSCksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKEMpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKEMsVCl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBIPUMvMjZ8MCxqPUMlMjY7'@;
put 'cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09VD90aGlzLndvcmRzW0hdfDE8PGo6dGhpcy53b3Jkc1tIXSZ+KDE8PGopLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyl7dmFyIFQsSCxqO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5u'@;
put 'ZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIEMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSxDLm5lZ2F0aXZlPTEs'@;
put 'VC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oSD10aGlzLGo9Qyk6KEg9QyxqPXRoaXMpO2Zvcih2YXIgRT0wLG09MDttPGoubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pKygwfGoud29yZHNbbV0pK0UpLEU9VD4+PjI2O2Zvcig7'@;
put 'MCE9PUUmJm08SC5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1ttXSkrRSksRT1UPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PUUpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09RSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9y'@;
put 'KDttPEgubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPUgud29yZHNbbV07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihDKXt2YXIgVDtyZXR1cm4gMCE9PUMubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsVD10aGlzLnN1YihDKSxDLm5lZ2F0'@;
put 'aXZlXj0xLFQpOjA9PT1DLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLFQ9Qy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLFQpOnRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKEMpOkMuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3Rv'@;
put 'dHlwZS5pc3ViPWZ1bmN0aW9uKEMpe2lmKDAhPT1DLm5lZ2F0aXZlKXtDLm5lZ2F0aXZlPTA7dmFyIFQ9dGhpcy5pYWRkKEMpO3JldHVybiBDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChDKSx0'@;
put 'aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgaixFLEg9dGhpcy5jbXAoQyk7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oaj10aGlzLEU9Qyk6KGo9QyxFPXRoaXMpO2Zvcih2YXIgbT0wLEE9'@;
put 'MDtBPEUubGVuZ3RoO0ErKyltPShUPSgwfGoud29yZHNbQV0pLSgwfEUud29yZHNbQV0pK20pPj4yNix0aGlzLndvcmRzW0FdPTY3MTA4ODYzJlQ7Zm9yKDswIT09bSYmQTxqLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2lm'@;
put 'KDA9PT1tJiZBPGoubGVuZ3RoJiZqIT09dGhpcylmb3IoO0E8ai5sZW5ndGg7QSsrKXRoaXMud29yZHNbQV09ai53b3Jkc1tBXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQSksaiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJv'@;
put 'dG90eXBlLnN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoQyl9O3ZhciBKPWZ1bmN0aW9uKEMsVCxIKXt2YXIgb2UsdGUsc2Usaj1DLndvcmRzLEU9VC53b3JkcyxtPUgud29yZHMsQT0wLHdlPTB8alswXSxVZT04MTkxJndlLEplPXdlPj4+MTMsYXQ9MHxqWzFdLE1l'@;
put 'PTgxOTEmYXQsdmU9YXQ+Pj4xMyxYZT0wfGpbMl0samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8alszXSxSZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxqWzRdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfGpbNV0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8als2XSx5dD04MTkx'@;
put 'JnVuLE10PXVuPj4+MTMsRHQ9MHxqWzddLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfGpbOF0sSGU9ODE5MSZ0dCx1dD10dD4+PjEzLHF0PTB8als5XSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsc2k9MHxFWzBdLFF0PTgxOTEmc2ksc249c2k+Pj4xMyxSaT0wfEVbMV0saG49ODE5MSZSaSxm'@;
put 'dD1SaT4+PjEzLE9yPTB8RVsyXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxFWzNdLHN0PTgxOTEmUm4sVXQ9Um4+Pj4xMyxyaT0wfEVbNF0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8RVs1XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsQm49MHxFWzZdLHJuPTgxOTEmQm4senQ9Qm4+'@;
put 'Pj4xMyxoaT0wfEVbN10sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8RVs4XSxYdD04MTkxJklpLGVuPUlpPj4+MTMsaG89MHxFWzldLE1pPTgxOTEmaG8sdnI9aG8+Pj4xMztILm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgV249KEErKG9lPU1hdGgu'@;
put 'aW11bChVZSxRdCkpfDApKygoODE5MSYodGU9KHRlPU1hdGguaW11bChVZSxzbikpK01hdGguaW11bChKZSxRdCl8MCkpPDwxMyl8MDtBPSgoc2U9TWF0aC5pbXVsKEplLHNuKSkrKHRlPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxvZT1NYXRoLmltdWwoTWUsUXQpLHRlPSh0'@;
put 'ZT1NYXRoLmltdWwoTWUsc24pKStNYXRoLmltdWwodmUsUXQpfDAsc2U9TWF0aC5pbXVsKHZlLHNuKTt2YXIgJGk9KEErKG9lPW9lK01hdGguaW11bChVZSxobil8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDApKTw8MTMpfDA7'@;
put 'QT0oKHNlPXNlK01hdGguaW11bChKZSxmdCl8MCkrKHRlPj4+MTMpfDApKygkaT4+PjI2KXwwLCRpJj02NzEwODg2MyxvZT1NYXRoLmltdWwoamUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoamUsc24pKStNYXRoLmltdWwoRGUsUXQpfDAsc2U9TWF0aC5pbXVsKERlLHNuKSxvZT1vZStNYXRoLmlt'@;
put 'dWwoTWUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLHNlPXNlK01hdGguaW11bCh2ZSxmdCl8MDt2YXIgZWk9KEErKG9lPW9lK01hdGguaW11bChVZSxXdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLEF0KXwwKStN'@;
put 'YXRoLmltdWwoSmUsV3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxBdCl8MCkrKHRlPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUmUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoUmUsc24pKStNYXRoLmltdWwoSWUsUXQpfDAsc2U9TWF0'@;
put 'aC5pbXVsKEllLHNuKSxvZT1vZStNYXRoLmltdWwoamUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLHNlPXNlK01hdGguaW11bChEZSxmdCl8MCxvZT1vZStNYXRoLmltdWwoTWUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxBdCl8'@;
put 'MCkrTWF0aC5pbXVsKHZlLFd0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxBdCl8MDt2YXIgUXI9KEErKG9lPW9lK01hdGguaW11bChVZSxzdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLFV0KXwwKStNYXRoLmltdWwoSmUsc3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01h'@;
put 'dGguaW11bChKZSxVdCl8MCkrKHRlPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxvZT1NYXRoLmltdWwoa2UsUXQpLHRlPSh0ZT1NYXRoLmltdWwoa2Usc24pKStNYXRoLmltdWwoQWUsUXQpfDAsc2U9TWF0aC5pbXVsKEFlLHNuKSxvZT1vZStNYXRoLmltdWwoUmUsaG4pfDAs'@;
put 'dGU9KHRlPXRlK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLHNlPXNlK01hdGguaW11bChJZSxmdCl8MCxvZT1vZStNYXRoLmltdWwoamUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKERlLFd0KXwwLHNlPXNlK01hdGguaW11bChE'@;
put 'ZSxBdCl8MCxvZT1vZStNYXRoLmltdWwoTWUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxVdCl8MDt2YXIgVmk9KEErKG9lPW9lK01hdGguaW11bChVZSxXZSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUr'@;
put 'TWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxUdCl8MCkrKHRlPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxvZT1NYXRoLmltdWwobnQsUXQpLHRlPSh0ZT1NYXRoLmltdWwobnQsc24pKStNYXRo'@;
put 'LmltdWwoUWUsUXQpfDAsc2U9TWF0aC5pbXVsKFFlLHNuKSxvZT1vZStNYXRoLmltdWwoa2UsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLHNlPXNlK01hdGguaW11bChBZSxmdCl8MCxvZT1vZStNYXRoLmltdWwoUmUsV3QpfDAsdGU9KHRl'@;
put 'PXRlK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLHNlPXNlK01hdGguaW11bChJZSxBdCl8MCxvZT1vZStNYXRoLmltdWwoamUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxVdCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLHNlPXNlK01hdGguaW11bChEZSxVdCl8'@;
put 'MCxvZT1vZStNYXRoLmltdWwoTWUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLHNlPXNlK01hdGguaW11bCh2ZSxUdCl8MDt2YXIgTmk9KEErKG9lPW9lK01hdGguaW11bChVZSxodCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5p'@;
put 'bXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx4dCl8MCkrKHRlPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxvZT1NYXRoLmltdWwoeXQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoeXQsc24pKStNYXRoLmltdWwo'@;
put 'TXQsUXQpfDAsc2U9TWF0aC5pbXVsKE10LHNuKSxvZT1vZStNYXRoLmltdWwobnQsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLHNlPXNlK01hdGguaW11bChRZSxmdCl8MCxvZT1vZStNYXRoLmltdWwoa2UsV3QpfDAsdGU9KHRlPXRlK01h'@;
put 'dGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLHNlPXNlK01hdGguaW11bChBZSxBdCl8MCxvZT1vZStNYXRoLmltdWwoUmUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxVdCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLHNlPXNlK01hdGguaW11bChJZSxVdCl8MCxvZT1v'@;
put 'ZStNYXRoLmltdWwoamUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLHNlPXNlK01hdGguaW11bChEZSxUdCl8MCxvZT1vZStNYXRoLmltdWwoTWUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0'@;
put 'KXwwLHNlPXNlK01hdGguaW11bCh2ZSx4dCl8MDt2YXIgSW89KEErKG9lPW9lK01hdGguaW11bChVZSxybil8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx6dCl8MCkr'@;
put 'KHRlPj4+MTMpfDApKyhJbz4+PjI2KXwwLElvJj02NzEwODg2MyxvZT1NYXRoLmltdWwoaXQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoaXQsc24pKStNYXRoLmltdWwoJGUsUXQpfDAsc2U9TWF0aC5pbXVsKCRlLHNuKSxvZT1vZStNYXRoLmltdWwoeXQsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11'@;
put 'bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLHNlPXNlK01hdGguaW11bChNdCxmdCl8MCxvZT1vZStNYXRoLmltdWwobnQsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxBdCl8MCkrTWF0aC5pbXVsKFFlLFd0KXwwLHNlPXNlK01hdGguaW11bChRZSxBdCl8MCxvZT1vZStNYXRo'@;
put 'LmltdWwoa2Usc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLHNlPXNlK01hdGguaW11bChBZSxVdCl8MCxvZT1vZStNYXRoLmltdWwoUmUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLHNl'@;
put 'PXNlK01hdGguaW11bChJZSxUdCl8MCxvZT1vZStNYXRoLmltdWwoamUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLHNlPXNlK01hdGguaW11bChEZSx4dCl8MCxvZT1vZStNYXRoLmltdWwoTWUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11'@;
put 'bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLHNlPXNlK01hdGguaW11bCh2ZSx6dCl8MDt2YXIgTHI9KEErKG9lPW9lK01hdGguaW11bChVZSxjbil8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDApKTw8MTMpfDA7QT0o'@;
put 'KHNlPXNlK01hdGguaW11bChKZSxmbil8MCkrKHRlPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxvZT1NYXRoLmltdWwoSGUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwodXQsUXQpfDAsc2U9TWF0aC5pbXVsKHV0LHNuKSxvZT1vZStNYXRoLmltdWwo'@;
put 'aXQsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGhuKXwwLHNlPXNlK01hdGguaW11bCgkZSxmdCl8MCxvZT1vZStNYXRoLmltdWwoeXQsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLHNlPXNlK01h'@;
put 'dGguaW11bChNdCxBdCl8MCxvZT1vZStNYXRoLmltdWwobnQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLHNlPXNlK01hdGguaW11bChRZSxVdCl8MCxvZT1vZStNYXRoLmltdWwoa2UsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxU'@;
put 'dCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLHNlPXNlK01hdGguaW11bChBZSxUdCl8MCxvZT1vZStNYXRoLmltdWwoUmUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLHNlPXNlK01hdGguaW11bChJZSx4dCl8MCxvZT1vZStNYXRoLmltdWwo'@;
put 'amUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLHNlPXNlK01hdGguaW11bChEZSx6dCl8MCxvZT1vZStNYXRoLmltdWwoTWUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxmbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLHNlPXNlK01h'@;
put 'dGguaW11bCh2ZSxmbil8MDt2YXIgV2k9KEErKG9lPW9lK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxlbil8MCkrKHRlPj4+MTMpfDAp'@;
put 'KyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoUnQsc24pKStNYXRoLmltdWwoUHQsUXQpfDAsc2U9TWF0aC5pbXVsKFB0LHNuKSxvZT1vZStNYXRoLmltdWwoSGUsaG4pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxmdCl8MCkr'@;
put 'TWF0aC5pbXVsKHV0LGhuKXwwLHNlPXNlK01hdGguaW11bCh1dCxmdCl8MCxvZT1vZStNYXRoLmltdWwoaXQsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLHNlPXNlK01hdGguaW11bCgkZSxBdCl8MCxvZT1vZStNYXRoLmltdWwoeXQsc3Qp'@;
put 'fDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLHNlPXNlK01hdGguaW11bChNdCxVdCl8MCxvZT1vZStNYXRoLmltdWwobnQsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLHNlPXNlK01hdGguaW11'@;
put 'bChRZSxUdCl8MCxvZT1vZStNYXRoLmltdWwoa2UsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLHNlPXNlK01hdGguaW11bChBZSx4dCl8MCxvZT1vZStNYXRoLmltdWwoUmUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSx6dCl8MCkr'@;
put 'TWF0aC5pbXVsKEllLHJuKXwwLHNlPXNlK01hdGguaW11bChJZSx6dCl8MCxvZT1vZStNYXRoLmltdWwoamUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxmbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLHNlPXNlK01hdGguaW11bChEZSxmbil8MCxvZT1vZStNYXRoLmltdWwoTWUsWHQp'@;
put 'fDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxlbil8MDt2YXIgZ289KEErKG9lPW9lK01hdGguaW11bChVZSxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHZyKXwwKStNYXRoLmltdWwo'@;
put 'SmUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx2cil8MCkrKHRlPj4+MTMpfDApKyhnbz4+PjI2KXwwLGdvJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsaG4pLHRlPSh0ZT1NYXRoLmltdWwoUnQsZnQpKStNYXRoLmltdWwoUHQsaG4pfDAsc2U9TWF0aC5pbXVsKFB0'@;
put 'LGZ0KSxvZT1vZStNYXRoLmltdWwoSGUsV3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxBdCl8MCkrTWF0aC5pbXVsKHV0LFd0KXwwLHNlPXNlK01hdGguaW11bCh1dCxBdCl8MCxvZT1vZStNYXRoLmltdWwoaXQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5p'@;
put 'bXVsKCRlLHN0KXwwLHNlPXNlK01hdGguaW11bCgkZSxVdCl8MCxvZT1vZStNYXRoLmltdWwoeXQsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLHNlPXNlK01hdGguaW11bChNdCxUdCl8MCxvZT1vZStNYXRoLmltdWwobnQsaHQpfDAsdGU9'@;
put 'KHRlPXRlK01hdGguaW11bChudCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLHNlPXNlK01hdGguaW11bChRZSx4dCl8MCxvZT1vZStNYXRoLmltdWwoa2Uscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLHNlPXNlK01hdGguaW11bChBZSx6'@;
put 'dCl8MCxvZT1vZStNYXRoLmltdWwoUmUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLHNlPXNlK01hdGguaW11bChJZSxmbil8MCxvZT1vZStNYXRoLmltdWwoamUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5p'@;
put 'bXVsKERlLFh0KXwwLHNlPXNlK01hdGguaW11bChEZSxlbil8MDt2YXIgUW49KEErKG9lPW9lK01hdGguaW11bChNZSxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKE1lLHZyKXwwKStNYXRoLmltdWwodmUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh2'@;
put 'ZSx2cil8MCkrKHRlPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsV3QpLHRlPSh0ZT1NYXRoLmltdWwoUnQsQXQpKStNYXRoLmltdWwoUHQsV3QpfDAsc2U9TWF0aC5pbXVsKFB0LEF0KSxvZT1vZStNYXRoLmltdWwoSGUsc3QpfDAsdGU9KHRlPXRl'@;
put 'K01hdGguaW11bChIZSxVdCl8MCkrTWF0aC5pbXVsKHV0LHN0KXwwLHNlPXNlK01hdGguaW11bCh1dCxVdCl8MCxvZT1vZStNYXRoLmltdWwoaXQsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLHNlPXNlK01hdGguaW11bCgkZSxUdCl8MCxv'@;
put 'ZT1vZStNYXRoLmltdWwoeXQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLHNlPXNlK01hdGguaW11bChNdCx4dCl8MCxvZT1vZStNYXRoLmltdWwobnQscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFl'@;
put 'LHJuKXwwLHNlPXNlK01hdGguaW11bChRZSx6dCl8MCxvZT1vZStNYXRoLmltdWwoa2UsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxmbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLHNlPXNlK01hdGguaW11bChBZSxmbil8MCxvZT1vZStNYXRoLmltdWwoUmUsWHQpfDAsdGU9KHRlPXRl'@;
put 'K01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwLHNlPXNlK01hdGguaW11bChJZSxlbil8MDt2YXIgY289KEErKG9lPW9lK01hdGguaW11bChqZSxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKGplLHZyKXwwKStNYXRoLmltdWwoRGUsTWkpfDApKTw8'@;
put 'MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChEZSx2cil8MCkrKHRlPj4+MTMpfDApKyhjbz4+PjI2KXwwLGNvJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsc3QpLHRlPSh0ZT1NYXRoLmltdWwoUnQsVXQpKStNYXRoLmltdWwoUHQsc3QpfDAsc2U9TWF0aC5pbXVsKFB0LFV0KSxvZT1vZStN'@;
put 'YXRoLmltdWwoSGUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxUdCl8MCkrTWF0aC5pbXVsKHV0LFdlKXwwLHNlPXNlK01hdGguaW11bCh1dCxUdCl8MCxvZT1vZStNYXRoLmltdWwoaXQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXww'@;
put 'LHNlPXNlK01hdGguaW11bCgkZSx4dCl8MCxvZT1vZStNYXRoLmltdWwoeXQscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLHNlPXNlK01hdGguaW11bChNdCx6dCl8MCxvZT1vZStNYXRoLmltdWwobnQsY24pfDAsdGU9KHRlPXRlK01hdGgu'@;
put 'aW11bChudCxmbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLHNlPXNlK01hdGguaW11bChRZSxmbil8MCxvZT1vZStNYXRoLmltdWwoa2UsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwLHNlPXNlK01hdGguaW11bChBZSxlbil8MDt2YXIgX289'@;
put 'KEErKG9lPW9lK01hdGguaW11bChSZSxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFJlLHZyKXwwKStNYXRoLmltdWwoSWUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChJZSx2cil8MCkrKHRlPj4+MTMpfDApKyhfbz4+PjI2KXwwLF9vJj02NzEwODg2'@;
put 'MyxvZT1NYXRoLmltdWwoUnQsV2UpLHRlPSh0ZT1NYXRoLmltdWwoUnQsVHQpKStNYXRoLmltdWwoUHQsV2UpfDAsc2U9TWF0aC5pbXVsKFB0LFR0KSxvZT1vZStNYXRoLmltdWwoSGUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSx4dCl8MCkrTWF0aC5pbXVsKHV0LGh0KXwwLHNlPXNl'@;
put 'K01hdGguaW11bCh1dCx4dCl8MCxvZT1vZStNYXRoLmltdWwoaXQscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLHNlPXNlK01hdGguaW11bCgkZSx6dCl8MCxvZT1vZStNYXRoLmltdWwoeXQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5'@;
put 'dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLHNlPXNlK01hdGguaW11bChNdCxmbil8MCxvZT1vZStNYXRoLmltdWwobnQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwLHNlPXNlK01hdGguaW11bChRZSxlbil8MDt2YXIgT289KEErKG9l'@;
put 'PW9lK01hdGguaW11bChrZSxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLHZyKXwwKStNYXRoLmltdWwoQWUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChBZSx2cil8MCkrKHRlPj4+MTMpfDApKyhPbz4+PjI2KXwwLE9vJj02NzEwODg2MyxvZT1N'@;
put 'YXRoLmltdWwoUnQsaHQpLHRlPSh0ZT1NYXRoLmltdWwoUnQseHQpKStNYXRoLmltdWwoUHQsaHQpfDAsc2U9TWF0aC5pbXVsKFB0LHh0KSxvZT1vZStNYXRoLmltdWwoSGUscm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSx6dCl8MCkrTWF0aC5pbXVsKHV0LHJuKXwwLHNlPXNlK01hdGgu'@;
put 'aW11bCh1dCx6dCl8MCxvZT1vZStNYXRoLmltdWwoaXQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxmbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLHNlPXNlK01hdGguaW11bCgkZSxmbil8MCxvZT1vZStNYXRoLmltdWwoeXQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxlbil8'@;
put 'MCkrTWF0aC5pbXVsKE10LFh0KXwwLHNlPXNlK01hdGguaW11bChNdCxlbil8MDt2YXIgSG89KEErKG9lPW9lK01hdGguaW11bChudCxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKG50LHZyKXwwKStNYXRoLmltdWwoUWUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01h'@;
put 'dGguaW11bChRZSx2cil8MCkrKHRlPj4+MTMpfDApKyhIbz4+PjI2KXwwLEhvJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQscm4pLHRlPSh0ZT1NYXRoLmltdWwoUnQsenQpKStNYXRoLmltdWwoUHQscm4pfDAsc2U9TWF0aC5pbXVsKFB0LHp0KSxvZT1vZStNYXRoLmltdWwoSGUsY24pfDAs'@;
put 'dGU9KHRlPXRlK01hdGguaW11bChIZSxmbil8MCkrTWF0aC5pbXVsKHV0LGNuKXwwLHNlPXNlK01hdGguaW11bCh1dCxmbil8MCxvZT1vZStNYXRoLmltdWwoaXQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwLHNlPXNlK01hdGguaW11bCgk'@;
put 'ZSxlbil8MDt2YXIgdGk9KEErKG9lPW9lK01hdGguaW11bCh5dCxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKHl0LHZyKXwwKStNYXRoLmltdWwoTXQsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChNdCx2cil8MCkrKHRlPj4+MTMpfDApKyh0aT4+PjI2'@;
put 'KXwwLHRpJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsY24pLHRlPSh0ZT1NYXRoLmltdWwoUnQsZm4pKStNYXRoLmltdWwoUHQsY24pfDAsc2U9TWF0aC5pbXVsKFB0LGZuKSxvZT1vZStNYXRoLmltdWwoSGUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxlbil8MCkrTWF0aC5pbXVs'@;
put 'KHV0LFh0KXwwLHNlPXNlK01hdGguaW11bCh1dCxlbil8MDt2YXIgZ2E9KEErKG9lPW9lK01hdGguaW11bChpdCxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LHZyKXwwKStNYXRoLmltdWwoJGUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCgkZSx2'@;
put 'cil8MCkrKHRlPj4+MTMpfDApKyhnYT4+PjI2KXwwLGdhJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsWHQpLHRlPSh0ZT1NYXRoLmltdWwoUnQsZW4pKStNYXRoLmltdWwoUHQsWHQpfDAsc2U9TWF0aC5pbXVsKFB0LGVuKTt2YXIgTnM9KEErKG9lPW9lK01hdGguaW11bChIZSxNaSl8MCl8'@;
put 'MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLHZyKXwwKStNYXRoLmltdWwodXQsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh1dCx2cil8MCkrKHRlPj4+MTMpfDApKyhOcz4+PjI2KXwwLE5zJj02NzEwODg2Mzt2YXIgYmw9KEErKG9lPU1hdGguaW11bChSdCxN'@;
put 'aSkpfDApKygoODE5MSYodGU9KHRlPU1hdGguaW11bChSdCx2cikpK01hdGguaW11bChQdCxNaSl8MCkpPDwxMyl8MDtyZXR1cm4gQT0oKHNlPU1hdGguaW11bChQdCx2cikpKyh0ZT4+PjEzKXwwKSsoYmw+Pj4yNil8MCxibCY9NjcxMDg4NjMsbVswXT1XbixtWzFdPSRpLG1bMl09ZWksbVsz'@;
put 'XT1RcixtWzRdPVZpLG1bNV09TmksbVs2XT1JbyxtWzddPUxyLG1bOF09V2ksbVs5XT1nbyxtWzEwXT1RbixtWzExXT1jbyxtWzEyXT1fbyxtWzEzXT1PbyxtWzE0XT1IbyxtWzE1XT10aSxtWzE2XT1nYSxtWzE3XT1OcyxtWzE4XT1ibCwwIT09QSYmKG1bMTldPUEsSC5sZW5ndGgrKyksSH07'@;
put 'ZnVuY3Rpb24gcmUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlLFQubGVuZ3RoPXgubGVuZ3RoK0MubGVuZ3RoO2Zvcih2YXIgSD0wLGo9MCxFPTA7RTxULmxlbmd0aC0xO0UrKyl7dmFyIG09ajtqPTA7Zm9yKHZhciBBPTY3MTA4ODYzJkgsb2U9TWF0aC5taW4oRSxD'@;
put 'Lmxlbmd0aC0xKSx0ZT1NYXRoLm1heCgwLEUteC5sZW5ndGgrMSk7dGU8PW9lO3RlKyspe3ZhciBKZT0oMHx4LndvcmRzW0UtdGVdKSooMHxDLndvcmRzW3RlXSksYXQ9NjcxMDg4NjMmSmU7QT02NzEwODg2MyYoYXQ9YXQrQXwwKSxqKz0obT0obT1tKyhKZS82NzEwODg2NHwwKXwwKSsoYXQ+'@;
put 'Pj4yNil8MCk+Pj4yNixtJj02NzEwODg2M31ULndvcmRzW0VdPUEsSD1tLG09an1yZXR1cm4gMCE9PUg/VC53b3Jkc1tFXT1IOlQubGVuZ3RoLS0sVC5fc3RyaXAoKX1mdW5jdGlvbiBpZSh4LEMsVCl7cmV0dXJuIHJlKHgsQyxUKX1mdW5jdGlvbiBsZSh4LEMpe3RoaXMueD14LHRoaXMueT1D'@;
put 'fU1hdGguaW11bHx8KEo9ZWUpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKEMsVCl7dmFyIGo9dGhpcy5sZW5ndGgrQy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Qy5sZW5ndGg/Sih0aGlzLEMsVCk6ajw2Mz9lZSh0aGlzLEMsVCk6ajwxMDI0P3JlKHRoaXMsQyxU'@;
put 'KTppZSh0aGlzLEMsVCl9LGxlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyksSD13LnByb3RvdHlwZS5fY291bnRCaXRzKEMpLTEsaj0wO2o8QztqKyspVFtqXT10aGlzLnJldkJpbihqLEgsQyk7cmV0dXJuIFR9LGxlLnByb3RvdHlwZS5yZXZC'@;
put 'aW49ZnVuY3Rpb24oQyxULEgpe2lmKDA9PT1DfHxDPT09SC0xKXJldHVybiBDO2Zvcih2YXIgaj0wLEU9MDtFPFQ7RSsrKWp8PSgxJkMpPDxULUUtMSxDPj49MTtyZXR1cm4gan0sbGUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oQyxULEgsaixFLG0pe2Zvcih2YXIgQT0wO0E8bTtBKysp'@;
put 'altBXT1UW0NbQV1dLEVbQV09SFtDW0FdXX0sbGUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihDLFQsSCxqLEUsbSl7dGhpcy5wZXJtdXRlKG0sQyxULEgsaixFKTtmb3IodmFyIEE9MTtBPEU7QTw8PTEpZm9yKHZhciBvZT1BPDwxLHRlPU1hdGguY29zKDIqTWF0aC5QSS9vZSksc2U9'@;
put 'TWF0aC5zaW4oMipNYXRoLlBJL29lKSx3ZT0wO3dlPEU7d2UrPW9lKWZvcih2YXIgVWU9dGUsSmU9c2UsYXQ9MDthdDxBO2F0Kyspe3ZhciBNZT1IW3dlK2F0XSx2ZT1qW3dlK2F0XSxYZT1IW3dlK2F0K0FdLGplPWpbd2UrYXQrQV0sRGU9VWUqWGUtSmUqamU7amU9VWUqamUrSmUqWGUsSFt3'@;
put 'ZSthdF09TWUrKFhlPURlKSxqW3dlK2F0XT12ZStqZSxIW3dlK2F0K0FdPU1lLVhlLGpbd2UrYXQrQV09dmUtamUsYXQhPT1vZSYmKERlPXRlKlVlLXNlKkplLEplPXRlKkplK3NlKlVlLFVlPURlKX19LGxlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihDLFQpe3ZhciBIPTF8TWF0'@;
put 'aC5tYXgoVCxDKSxqPTEmSCxFPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpRSsrO3JldHVybiAxPDxFKzEran0sbGUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihDLFQsSCl7aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBFPUNbal07Q1tqXT1DW0gtai0xXSxDW0gt'@;
put 'ai0xXT1FLEU9VFtqXSxUW2pdPS1UW0gtai0xXSxUW0gtai0xXT0tRX19LGxlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTA7ajxULzI7aisrKXt2YXIgRT04MTkyKk1hdGgucm91bmQoQ1syKmorMV0vVCkrTWF0aC5yb3VuZChDWzIqal0vVCkr'@;
put 'SDtDW2pdPTY3MTA4ODYzJkUsSD1FPDY3MTA4ODY0PzA6RS82NzEwODg2NHwwfXJldHVybiBDfSxsZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihDLFQsSCxqKXtmb3IodmFyIEU9MCxtPTA7bTxUO20rKylIWzIqbV09ODE5MSYoRSs9MHxDW21dKSxIWzIqbSsxXT04MTkxJihFPj4+'@;
put 'PTEzKSxFPj4+PTEzO2ZvcihtPTIqVDttPGo7KyttKUhbbV09MDtnKDA9PT1FKSxnKCEoLTgxOTImRSkpfSxsZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9MDtIPEM7SCsrKVRbSF09MDtyZXR1cm4gVH0sbGUucHJvdG90eXBlLm11bHA9ZnVu'@;
put 'Y3Rpb24oQyxULEgpe3ZhciBqPTIqdGhpcy5ndWVzc0xlbjEzYihDLmxlbmd0aCxULmxlbmd0aCksRT10aGlzLm1ha2VSQlQoaiksbT10aGlzLnN0dWIoaiksQT1uZXcgQXJyYXkoaiksb2U9bmV3IEFycmF5KGopLHRlPW5ldyBBcnJheShqKSxzZT1uZXcgQXJyYXkoaiksd2U9bmV3IEFycmF5'@;
put 'KGopLFVlPW5ldyBBcnJheShqKSxKZT1ILndvcmRzO0plLmxlbmd0aD1qLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVuZ3RoLEEsaiksdGhpcy5jb252ZXJ0MTNiKFQud29yZHMsVC5sZW5ndGgsc2UsaiksdGhpcy50cmFuc2Zvcm0oQSxtLG9lLHRlLGosRSksdGhpcy50cmFuc2Zvcm0o'@;
put 'c2UsbSx3ZSxVZSxqLEUpO2Zvcih2YXIgYXQ9MDthdDxqO2F0Kyspe3ZhciBNZT1vZVthdF0qd2VbYXRdLXRlW2F0XSpVZVthdF07dGVbYXRdPW9lW2F0XSpVZVthdF0rdGVbYXRdKndlW2F0XSxvZVthdF09TWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKG9lLHRlLGopLHRoaXMudHJhbnNmb3Jt'@;
put 'KG9lLHRlLEplLG0saixFKSx0aGlzLmNvbmp1Z2F0ZShKZSxtLGopLHRoaXMubm9ybWFsaXplMTNiKEplLGopLEgubmVnYXRpdmU9Qy5uZWdhdGl2ZV5ULm5lZ2F0aXZlLEgubGVuZ3RoPUMubGVuZ3RoK1QubGVuZ3RoLEguX3N0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihDKXt2'@;
put 'YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLHRoaXMubXVsVG8oQyxUKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgr'@;
put 'Qy5sZW5ndGgpLGllKHRoaXMsQyxUKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKEMsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQyksZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2'@;
put 'NzEwODg2NCk7Zm9yKHZhciBIPTAsaj0wO2o8dGhpcy5sZW5ndGg7aisrKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSpDLG09KDY3MTA4ODYzJkUpKyg2NzEwODg2MyZIKTtIPj49MjYsSCs9RS82NzEwODg2NHwwLEgrPW0+Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJm19cmV0dXJuIDAh'@;
put 'PT1IJiYodGhpcy53b3Jkc1tqXT1ILHRoaXMubGVuZ3RoKyspLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKEMpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9'@;
put 'LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihDKXt2YXIgVD1mdW5jdGlvbiBYKHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoeC5iaXRMZW5ndGgoKSksVD0wO1Q8Qy5sZW5ndGg7VCsrKUNb'@;
put 'VF09eC53b3Jkc1tULzI2fDBdPj4+VCUyNiYxO3JldHVybiBDfShDKTtpZigwPT09VC5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgSD10aGlzLGo9MDtqPFQubGVuZ3RoJiYwPT09VFtqXTtqKyssSD1ILnNxcigpKTtpZigrK2o8VC5sZW5ndGgpZm9yKHZhciBFPUguc3FyKCk7ajxU'@;
put 'Lmxlbmd0aDtqKyssRT1FLnNxcigpKTAhPT1UW2pdJiYoSD1ILm11bChFKSk7cmV0dXJuIEh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIEUsVD1DJTI2LEg9KEMtVCkvMjYsaj02NzEwODg2Mz4+PjI2LVQ8PDI2LVQ7aWYo'@;
put 'MCE9PVQpe3ZhciBtPTA7Zm9yKEU9MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXSZqO3RoaXMud29yZHNbRV09KDB8dGhpcy53b3Jkc1tFXSktQTw8VHxtLG09QT4+PjI2LVR9bSYmKHRoaXMud29yZHNbRV09bSx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKEU9'@;
put 'dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSl0aGlzLndvcmRzW0UrSF09dGhpcy53b3Jkc1tFXTtmb3IoRT0wO0U8SDtFKyspdGhpcy53b3Jkc1tFXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gZygwPT09'@;
put 'dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oQyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihDLFQsSCl7dmFyIGo7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApLGo9VD8oVC1UJTI2KS8yNjowO3ZhciBFPUMlMjYsbT1NYXRoLm1pbigoQy1FKS8yNix0aGlzLmxlbmd0aCksQT02'@;
put 'NzEwODg2M142NzEwODg2Mz4+PkU8PEUsb2U9SDtpZihqLT1tLGo9TWF0aC5tYXgoMCxqKSxvZSl7Zm9yKHZhciB0ZT0wO3RlPG07dGUrKylvZS53b3Jkc1t0ZV09dGhpcy53b3Jkc1t0ZV07b2UubGVuZ3RoPW19aWYoMCE9PW0paWYodGhpcy5sZW5ndGg+bSlmb3IodGhpcy5sZW5ndGgtPW0s'@;
put 'dGU9MDt0ZTx0aGlzLmxlbmd0aDt0ZSsrKXRoaXMud29yZHNbdGVdPXRoaXMud29yZHNbdGUrbV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgc2U9MDtmb3IodGU9dGhpcy5sZW5ndGgtMTt0ZT49MCYmKDAhPT1zZXx8dGU+PWopO3RlLS0pe3ZhciB3ZT0wfHRoaXMu'@;
put 'd29yZHNbdGVdO3RoaXMud29yZHNbdGVdPXNlPDwyNi1FfHdlPj4+RSxzZT13ZSZBfXJldHVybiBvZSYmMCE9PXNlJiYob2Uud29yZHNbb2UubGVuZ3RoKytdPXNlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sdy5wcm90'@;
put 'b3R5cGUuaXNocm49ZnVuY3Rpb24oQyxULEgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihDLFQsSCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihDKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oQyl7'@;
put 'cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oQyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihDKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oQyl9LHcucHJvdG90eXBlLnRl'@;
put 'c3RuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PFQpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBD'@;
put 'JiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1UJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0'@;
put 'aCksMCE9PVQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQpLHRoaXMuX3N0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihDKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rp'@;
put 'b24oQyl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBDKSxnKEM8NjcxMDg4NjQpLEM8MD90aGlzLmlzdWJuKC1DKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPD1DPyh0aGlzLndvcmRzWzBdPUMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5u'@;
put 'ZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oQyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihDKXt0aGlzLndvcmRzWzBdKz1DO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgmJnRoaXMu'@;
put 'd29yZHNbVF0+PTY3MTA4ODY0O1QrKyl0aGlzLndvcmRzW1RdLT02NzEwODg2NCxUPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW1QrMV09MTp0aGlzLndvcmRzW1QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsVCsxKSx0aGlzfSx3LnByb3RvdHlwZS5p'@;
put 'c3Vibj1mdW5jdGlvbihDKXtpZihnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3MTA4ODY0KSxDPDApcmV0dXJuIHRoaXMuaWFkZG4oLUMpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0'@;
put 'aGlzLndvcmRzWzBdLT1DLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tUXTwwO1QrKyl0aGlzLndvcmRzW1RdKz02NzEw'@;
put 'ODg2NCx0aGlzLndvcmRzW1QrMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihDKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKEMpfSx3'@;
put 'LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKEMsVCxIKXt2YXIgRTt0aGlzLl9l'@;
put 'eHBhbmQoQy5sZW5ndGgrSCk7dmFyIG0sQT0wO2ZvcihFPTA7RTxDLmxlbmd0aDtFKyspe209KDB8dGhpcy53b3Jkc1tFK0hdKStBO3ZhciBvZT0oMHxDLndvcmRzW0VdKSpUO0E9KChtLT02NzEwODg2MyZvZSk+PjI2KS0ob2UvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tFK0hdPTY3MTA4ODYz'@;
put 'Jm19Zm9yKDtFPHRoaXMubGVuZ3RoLUg7RSsrKUE9KG09KDB8dGhpcy53b3Jkc1tFK0hdKStBKT4+MjYsdGhpcy53b3Jkc1tFK0hdPTY3MTA4ODYzJm07aWYoMD09PUEpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKGcoLTE9PT1BKSxBPTAsRT0wO0U8dGhpcy5sZW5ndGg7RSsrKUE9KG09LSgw'@;
put 'fHRoaXMud29yZHNbRV0pK0EpPj4yNix0aGlzLndvcmRzW0VdPTY3MTA4ODYzJm07cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihDLFQpe3ZhciBILGo9dGhpcy5jbG9uZSgpLEU9QyxtPTB8RS53b3Jkc1tFLmxlbmd0'@;
put 'aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMobSkpJiYoRT1FLnVzaGxuKEgpLGouaXVzaGxuKEgpLG09MHxFLndvcmRzW0UubGVuZ3RoLTFdKTt2YXIgdGUsb2U9ai5sZW5ndGgtRS5sZW5ndGg7aWYoIm1vZCIhPT1UKXsodGU9bmV3IHcobnVsbCkpLmxlbmd0aD1vZSsxLHRlLndvcmRz'@;
put 'PW5ldyBBcnJheSh0ZS5sZW5ndGgpO2Zvcih2YXIgc2U9MDtzZTx0ZS5sZW5ndGg7c2UrKyl0ZS53b3Jkc1tzZV09MH12YXIgd2U9ai5jbG9uZSgpLl9pc2hsbnN1Ym11bChFLDEsb2UpOzA9PT13ZS5uZWdhdGl2ZSYmKGo9d2UsdGUmJih0ZS53b3Jkc1tvZV09MSkpO2Zvcih2YXIgVWU9b2Ut'@;
put 'MTtVZT49MDtVZS0tKXt2YXIgSmU9NjcxMDg4NjQqKDB8ai53b3Jkc1tFLmxlbmd0aCtVZV0pKygwfGoud29yZHNbRS5sZW5ndGgrVWUtMV0pO2ZvcihKZT1NYXRoLm1pbihKZS9tfDAsNjcxMDg4NjMpLGouX2lzaGxuc3VibXVsKEUsSmUsVWUpOzAhPT1qLm5lZ2F0aXZlOylKZS0tLGoubmVn'@;
put 'YXRpdmU9MCxqLl9pc2hsbnN1Ym11bChFLDEsVWUpLGouaXNaZXJvKCl8fChqLm5lZ2F0aXZlXj0xKTt0ZSYmKHRlLndvcmRzW1VlXT1KZSl9cmV0dXJuIHRlJiZ0ZS5fc3RyaXAoKSxqLl9zdHJpcCgpLCJkaXYiIT09VCYmMCE9PUgmJmouaXVzaHJuKEgpLHtkaXY6dGV8fG51bGwsbW9kOmp9'@;
put 'fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oQyxULEgpe3JldHVybiBnKCFDLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmU/KG09dGhpcy5uZWcoKS5kaXZtb2QoQyxUKSwibW9k'@;
put 'IiE9PVQmJihqPW0uZGl2Lm5lZygpKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlhZGQoQykpLHtkaXY6aixtb2Q6RX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZT8obT10aGlzLmRpdm1vZChDLm5lZygpLFQpLCJtb2QiIT09VCYm'@;
put 'KGo9bS5kaXYubmVnKCkpLHtkaXY6aixtb2Q6bS5tb2R9KTp0aGlzLm5lZ2F0aXZlJkMubmVnYXRpdmU/KG09dGhpcy5uZWcoKS5kaXZtb2QoQy5uZWcoKSxUKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlzdWIoQykpLHtkaXY6bS5kaXYsbW9kOkV9'@;
put 'KTpDLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoQyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Qy5sZW5ndGg/ImRpdiI9PT1UP3tkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PVQ/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMu'@;
put 'd29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kcm4oQy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KEMsVCk7dmFyIGosRSxtfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsImRpdiIsITEpLmRp'@;
put 'dn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oQyl7'@;
put 'dmFyIFQ9dGhpcy5kaXZtb2QoQyk7aWYoVC5tb2QuaXNaZXJvKCkpcmV0dXJuIFQuZGl2O3ZhciBIPTAhPT1ULmRpdi5uZWdhdGl2ZT9ULm1vZC5pc3ViKEMpOlQubW9kLGo9Qy51c2hybigxKSxFPUMuYW5kbG4oMSksbT1ILmNtcChqKTtyZXR1cm4gbTwwfHwxPT09RSYmMD09PW0/VC5kaXY6'@;
put 'MCE9PVQuZGl2Lm5lZ2F0aXZlP1QuZGl2LmlzdWJuKDEpOlQuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2Rybj1mdW5jdGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLGcoQzw9NjcxMDg4NjMpO2Zvcih2YXIgSD0oMTw8MjYpJUMsaj0wLEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSlq'@;
put 'PShIKmorKDB8dGhpcy53b3Jkc1tFXSkpJUM7cmV0dXJuIFQ/LWo6an0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5tb2RybihDKX0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzKTtmb3IodmFy'@;
put 'IEg9MCxqPXRoaXMubGVuZ3RoLTE7aj49MDtqLS0pe3ZhciBFPSgwfHRoaXMud29yZHNbal0pKzY3MTA4ODY0Kkg7dGhpcy53b3Jkc1tqXT1FL0N8MCxIPUUlQ31yZXR1cm4gdGhpcy5fc3RyaXAoKSxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oQyl7cmV0'@;
put 'dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihDKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlKSxnKCFDLmlzWmVybygpKTt2YXIgVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHco'@;
put 'MSksRT1uZXcgdygwKSxtPW5ldyB3KDApLEE9bmV3IHcoMSksb2U9MDtULmlzRXZlbigpJiZILmlzRXZlbigpOylULml1c2hybigxKSxILml1c2hybigxKSwrK29lO2Zvcih2YXIgdGU9SC5jbG9uZSgpLHNlPVQuY2xvbmUoKTshVC5pc1plcm8oKTspe2Zvcih2YXIgd2U9MCxVZT0xOyEoVC53'@;
put 'b3Jkc1swXSZVZSkmJndlPDI2Oysrd2UsVWU8PD0xKTtpZih3ZT4wKWZvcihULml1c2hybih3ZSk7d2UtLSA+MDspKGouaXNPZGQoKXx8RS5pc09kZCgpKSYmKGouaWFkZCh0ZSksRS5pc3ViKHNlKSksai5pdXNocm4oMSksRS5pdXNocm4oMSk7Zm9yKHZhciBKZT0wLGF0PTE7IShILndvcmRz'@;
put 'WzBdJmF0KSYmSmU8MjY7KytKZSxhdDw8PTEpO2lmKEplPjApZm9yKEguaXVzaHJuKEplKTtKZS0tID4wOykobS5pc09kZCgpfHxBLmlzT2RkKCkpJiYobS5pYWRkKHRlKSxBLmlzdWIoc2UpKSxtLml1c2hybigxKSxBLml1c2hybigxKTtULmNtcChIKT49MD8oVC5pc3ViKEgpLGouaXN1Yiht'@;
put 'KSxFLmlzdWIoQSkpOihILmlzdWIoVCksbS5pc3ViKGopLEEuaXN1YihFKSl9cmV0dXJue2E6bSxiOkEsZ2NkOkguaXVzaGxuKG9lKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlKSxnKCFDLmlzWmVybygpKTt2YXIgd2UsVD10aGlzLEg9Qy5jbG9u'@;
put 'ZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksRT1uZXcgdygwKSxtPUguY2xvbmUoKTtULmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIEE9MCxvZT0xOyEoVC53b3Jkc1swXSZvZSkmJkE8MjY7KytBLG9lPDw9MSk7aWYo'@;
put 'QT4wKWZvcihULml1c2hybihBKTtBLS0gPjA7KWouaXNPZGQoKSYmai5pYWRkKG0pLGouaXVzaHJuKDEpO2Zvcih2YXIgdGU9MCxzZT0xOyEoSC53b3Jkc1swXSZzZSkmJnRlPDI2OysrdGUsc2U8PD0xKTtpZih0ZT4wKWZvcihILml1c2hybih0ZSk7dGUtLSA+MDspRS5pc09kZCgpJiZFLmlh'@;
put 'ZGQobSksRS5pdXNocm4oMSk7VC5jbXAoSCk+PTA/KFQuaXN1YihIKSxqLmlzdWIoRSkpOihILmlzdWIoVCksRS5pc3ViKGopKX1yZXR1cm4od2U9MD09PVQuY21wbigxKT9qOkUpLmNtcG4oMCk8MCYmd2UuaWFkZChDKSx3ZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKEMpe2lmKHRoaXMu'@;
put 'aXNaZXJvKCkpcmV0dXJuIEMuYWJzKCk7aWYoQy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgVD10aGlzLmNsb25lKCksSD1DLmNsb25lKCk7VC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIGo9MDtULmlzRXZlbigpJiZILmlzRXZlbigpO2orKylULml1c2hybigxKSxI'@;
put 'Lml1c2hybigxKTtmb3IoOzspe2Zvcig7VC5pc0V2ZW4oKTspVC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgRT1ULmNtcChIKTtpZihFPDApe3ZhciBtPVQ7VD1ILEg9bX1lbHNlIGlmKDA9PT1FfHwwPT09SC5jbXBuKDEpKWJyZWFrO1QuaXN1YihIKX1yZXR1'@;
put 'cm4gSC5pdXNobG4oail9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZWdjZChDKS5hLnVtb2QoQyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZDfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyk7dmFyIFQ9QyUyNixIPShDLVQpLzI2LGo9MTw8VDtpZih0aGlz'@;
put 'Lmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9aix0aGlzO2Zvcih2YXIgRT1qLG09SDswIT09RSYmbTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPTB8dGhpcy53b3Jkc1ttXTtFPShBKz1FKT4+PjI2LHRoaXMud29yZHNbbV09QSY9NjcxMDg4NjN9cmV0'@;
put 'dXJuIDAhPT1FJiYodGhpcy53b3Jkc1ttXT1FLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKEMpe3ZhciBILFQ9QzwwO2lm'@;
put 'KDAhPT10aGlzLm5lZ2F0aXZlJiYhVClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmVClyZXR1cm4gMTtpZih0aGlzLl9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7VCYmKEM9LUMpLGcoQzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGo9MHx0aGlzLndv'@;
put 'cmRzWzBdO0g9aj09PUM/MDpqPEM/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oQyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdh'@;
put 'dGl2ZSlyZXR1cm4gMTt2YXIgVD10aGlzLnVjbXAoQyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVQ6VH0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihDKXtpZih0aGlzLmxlbmd0aD5DLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxDLmxlbmd0aClyZXR1cm4tMTtmb3Io'@;
put 'dmFyIFQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBqPTB8dGhpcy53b3Jkc1tIXSxFPTB8Qy53b3Jkc1tIXTtpZihqIT09RSl7ajxFP1Q9LTE6aj5FJiYoVD0xKTticmVha319cmV0dXJuIFR9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21w'@;
put 'bihDKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIDE9PT10aGlzLmNtcChDKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBuKEMpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPj0wfSx3LnBy'@;
put 'b3RvdHlwZS5sdG49ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKEMpe3JldHVybi0xPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKTw9MH0sdy5wcm90b3R5cGUu'@;
put 'bHRlPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcChDKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKEMpe3JldHVybiAwPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wKEMpfSx3LnJlZD1mdW5jdGlvbihDKXtyZXR1'@;
put 'cm4gbmV3IHAoQyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKEMpe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksQy5jb252ZXJ0'@;
put 'VG8odGhpcykuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5'@;
put 'cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnJlZD1DLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKEMpe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKEMpfSx3LnBy'@;
put 'b3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3'@;
put 'b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLEMpfSx3LnBy'@;
put 'b3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwg'@;
put 'd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyks'@;
put 'dGhpcy5yZWQubXVsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEMpLHRoaXMucmVkLmltdWwodGhpcyxDKX0sdy5wcm90'@;
put 'b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0'@;
put 'aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRo'@;
put 'IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkx'@;
put 'KHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3Rv'@;
put 'dHlwZS5yZWRQb3c9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQmJiFDLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxDKX07dmFyIG1lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVs'@;
put 'bH07ZnVuY3Rpb24gX2UoeCxDKXt0aGlzLm5hbWU9eCx0aGlzLnA9bmV3IHcoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIFRlKCl7X2UuY2FsbCh0'@;
put 'aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBTZSgpe19lLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAw'@;
put 'IDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gemUoKXtfZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFYoKXtfZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHAoeCl7aWYoInN0cmluZyI9PXR5cGVvZiB4KXt2YXIgQz13Ll9wcmltZSh4KTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIGcoeC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBn'@;
put 'cmVhdGVyIHRoYW4gMSIpLHRoaXMubT14LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBiKHgpe3AuY2FsbCh0aGlzLHgpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSku'@;
put 'aXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlz'@;
put 'LnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9X2UucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLEN9LF9lLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKEMp'@;
put 'e3ZhciBILFQ9Qztkb3t0aGlzLnNwbGl0KFQsdGhpcy50bXApLEg9KFQ9KFQ9dGhpcy5pbXVsSyhUKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgaj1IPHRoaXMubj8tMTpULnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWo/KFQud29yZHNbMF09MCxU'@;
put 'Lmxlbmd0aD0xKTpqPjA/VC5pc3ViKHRoaXMucCk6dm9pZCAwIT09VC5zdHJpcD9ULnN0cmlwKCk6VC5fc3RyaXAoKSxUfSxfZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oQyxUKXtDLml1c2hybih0aGlzLm4sMCxUKX0sX2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe3JldHVybiBD'@;
put 'LmltdWwodGhpcy5rKX0sQihUZSxfZSksVGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPTQxOTQzMDMsaj1NYXRoLm1pbihDLmxlbmd0aCw5KSxFPTA7RTxqO0UrKylULndvcmRzW0VdPUMud29yZHNbRV07aWYoVC5sZW5ndGg9aixDLmxlbmd0aDw9OSlyZXR1cm4g'@;
put 'Qy53b3Jkc1swXT0wLHZvaWQoQy5sZW5ndGg9MSk7dmFyIG09Qy53b3Jkc1s5XTtmb3IoVC53b3Jkc1tULmxlbmd0aCsrXT1tJkgsRT0xMDtFPEMubGVuZ3RoO0UrKyl7dmFyIEE9MHxDLndvcmRzW0VdO0Mud29yZHNbRS0xMF09KEEmSCk8PDR8bT4+PjIyLG09QX1DLndvcmRzW0UtMTBdPW0+'@;
put 'Pj49MjIsQy5sZW5ndGgtPTA9PT1tJiZDLmxlbmd0aD4xMD8xMDo5fSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7Qy53b3Jkc1tDLmxlbmd0aF09MCxDLndvcmRzW0MubGVuZ3RoKzFdPTAsQy5sZW5ndGgrPTI7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXt2YXIgaj0w'@;
put 'fEMud29yZHNbSF07Qy53b3Jkc1tIXT02NzEwODg2MyYoVCs9OTc3KmopLFQ9NjQqaisoVC82NzEwODg2NHwwKX1yZXR1cm4gMD09PUMud29yZHNbQy5sZW5ndGgtMV0mJihDLmxlbmd0aC0tLDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiZDLmxlbmd0aC0tKSxDfSxCKFNlLF9lKSxCKHplLF9l'@;
put 'KSxCKFYsX2UpLFYucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl7dmFyIGo9MTkqKDB8Qy53b3Jkc1tIXSkrVCxFPTY3MTA4ODYzJmo7aj4+Pj0yNixDLndvcmRzW0hdPUUsVD1qfXJldHVybiAwIT09VCYmKEMud29yZHNbQy5sZW5n'@;
put 'dGgrK109VCksQ30sdy5fcHJpbWU9ZnVuY3Rpb24oQyl7aWYobWVbQ10pcmV0dXJuIG1lW0NdO3ZhciBUO2lmKCJrMjU2Ij09PUMpVD1uZXcgVGU7ZWxzZSBpZigicDIyNCI9PT1DKVQ9bmV3IFNlO2Vsc2UgaWYoInAxOTIiPT09QylUPW5ldyB6ZTtlbHNle2lmKCJwMjU1MTkiIT09Qyl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitDKTtUPW5ldyBWfXJldHVybiBtZVtDXT1ULFR9LHAucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKEMpe2coMD09PUMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhDLnJlZCwicmVkIHdvcmtzIG9ubHkg'@;
put 'd2l0aCByZWQgbnVtYmVycyIpfSxwLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihDLFQpe2coIShDLm5lZ2F0aXZlfFQubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcoQy5yZWQmJkMucmVkPT09VC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKX0scC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoQykuX2ZvcmNlUmVkKHRoaXMpOihOKEMsQy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSxDKX0scC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKEMpe3Jl'@;
put 'dHVybiBDLmlzWmVybygpP0MuY2xvbmUoKTp0aGlzLm0uc3ViKEMpLl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9m'@;
put 'b3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLmlhZGQoVCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHAucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3Zlcmlm'@;
put 'eTIoQyxUKTt2YXIgSD1DLnN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSxwLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuaXN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkgu'@;
put 'aWFkZCh0aGlzLm0pLEh9LHAucHJvdG90eXBlLnNobD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkxKEMpLHRoaXMuaW1vZChDLnVzaGxuKFQpKX0scC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9kKEMuaW11'@;
put 'bChUKSl9LHAucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9kKEMubXVsKFQpKX0scC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbXVsKEMsQy5jbG9uZSgpKX0scC5wcm90b3R5cGUuc3FyPWZ1bmN0'@;
put 'aW9uKEMpe3JldHVybiB0aGlzLm11bChDLEMpfSxwLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKEMpe2lmKEMuaXNaZXJvKCkpcmV0dXJuIEMuY2xvbmUoKTt2YXIgVD10aGlzLm0uYW5kbG4oMyk7aWYoZyhUJTI9PTEpLDM9PT1UKXt2YXIgSD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4o'@;
put 'Mik7cmV0dXJuIHRoaXMucG93KEMsSCl9Zm9yKHZhciBqPXRoaXMubS5zdWJuKDEpLEU9MDshai5pc1plcm8oKSYmMD09PWouYW5kbG4oMSk7KUUrKyxqLml1c2hybigxKTtnKCFqLmlzWmVybygpKTt2YXIgbT1uZXcgdygxKS50b1JlZCh0aGlzKSxBPW0ucmVkTmVnKCksb2U9dGhpcy5tLnN1'@;
put 'Ym4oMSkuaXVzaHJuKDEpLHRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IodGU9bmV3IHcoMip0ZSp0ZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHRlLG9lKS5jbXAoQSk7KXRlLnJlZElBZGQoQSk7Zm9yKHZhciBzZT10aGlzLnBvdyh0ZSxqKSx3ZT10aGlzLnBvdyhDLGouYWRkbigxKS5p'@;
put 'dXNocm4oMSkpLFVlPXRoaXMucG93KEMsaiksSmU9RTswIT09VWUuY21wKG0pOyl7Zm9yKHZhciBhdD1VZSxNZT0wOzAhPT1hdC5jbXAobSk7TWUrKylhdD1hdC5yZWRTcXIoKTtnKE1lPEplKTt2YXIgdmU9dGhpcy5wb3coc2UsbmV3IHcoMSkuaXVzaGxuKEplLU1lLTEpKTt3ZT13ZS5yZWRN'@;
put 'dWwodmUpLHNlPXZlLnJlZFNxcigpLFVlPVVlLnJlZE11bChzZSksSmU9TWV9cmV0dXJuIHdlfSxwLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3ZhciBUPUMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ULm5lZ2F0aXZlPyhULm5lZ2F0aXZlPTAsdGhpcy5pbW9kKFQpLnJlZE5lZygp'@;
put 'KTp0aGlzLmltb2QoVCl9LHAucHJvdG90eXBlLnBvdz1mdW5jdGlvbihDLFQpe2lmKFQuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ULmNtcG4oMSkpcmV0dXJuIEMuY2xvbmUoKTt2YXIgaj1uZXcgQXJyYXkoMTYpO2pbMF09bmV3IHcoMSkudG9SZWQodGhp'@;
put 'cyksalsxXT1DO2Zvcih2YXIgRT0yO0U8ai5sZW5ndGg7RSsrKWpbRV09dGhpcy5tdWwoaltFLTFdLEMpO3ZhciBtPWpbMF0sQT0wLG9lPTAsdGU9VC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXRlJiYodGU9MjYpLEU9VC5sZW5ndGgtMTtFPj0wO0UtLSl7Zm9yKHZhciBzZT1ULndvcmRzW0Vd'@;
put 'LHdlPXRlLTE7d2U+PTA7d2UtLSl7dmFyIFVlPXNlPj53ZSYxO20hPT1qWzBdJiYobT10aGlzLnNxcihtKSksMCE9PVVlfHwwIT09QT8oQTw8PTEsQXw9VWUsKDQ9PSsrb2V8fDA9PT1FJiYwPT09d2UpJiYobT10aGlzLm11bChtLGpbQV0pLG9lPTAsQT0wKSk6b2U9MH10ZT0yNn1yZXR1cm4g'@;
put 'bX0scC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3ZhciBUPUMudW1vZCh0aGlzLm0pO3JldHVybiBUPT09Qz9ULmNsb25lKCk6VH0scC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5jbG9uZSgpO3JldHVybiBULnJlZD1udWxsLFR9LHcubW9udD1m'@;
put 'dW5jdGlvbihDKXtyZXR1cm4gbmV3IGIoQyl9LEIoYixwKSxiLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW1vZChDLnVzaGxuKHRoaXMuc2hpZnQpKX0sYi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5pbW9kKEMubXVs'@;
put 'KHRoaXMucmludikpO3JldHVybiBULnJlZD1udWxsLFR9LGIucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlzWmVybygpfHxULmlzWmVybygpKXJldHVybiBDLndvcmRzWzBdPTAsQy5sZW5ndGg9MSxDO3ZhciBIPUMuaW11bChUKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVs'@;
put 'KHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0KSxtPUU7cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRo'@;
put 'aXMpfSxiLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlzWmVybygpfHxULmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Qy5tdWwoVCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5t'@;
put 'dWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0aGlzLm0pPj0wP209RS5pc3ViKHRoaXMubSk6RS5jbXBuKDApPDAmJihtPUUuaWFkZCh0aGlzLm0pKSxtLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihD'@;
put 'KXtyZXR1cm4gdGhpcy5pbW9kKEMuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT1fLm5tZCh1ZSksdGhpcyl9LDk5MzE6KHVlLHEsXyk9Pnt2YXIgSTtmdW5jdGlvbiB5KEIpe3RoaXMucmFuZD1CfWlmKHVlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0'@;
put 'dXJuIEl8fChJPW5ldyB5KG51bGwpKSxJLmdlbmVyYXRlKHcpfSx1ZS5leHBvcnRzLlJhbmQ9eSx5LnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmFuZCh3KX0seS5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7aWYodGhpcy5yYW5kLmdldEJ5dGVzKXJl'@;
put 'dHVybiB0aGlzLnJhbmQuZ2V0Qnl0ZXModyk7Zm9yKHZhciBQPW5ldyBVaW50OEFycmF5KHcpLEY9MDtGPFAubGVuZ3RoO0YrKylQW0ZdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIFB9LCJvYmplY3QiPT10eXBlb2Ygc2VsZilzZWxmLmNyeXB0byYmc2VsZi5jcnlwdG8uZ2V0UmFuZG9t'@;
put 'VmFsdWVzP3kucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoUCksUH06c2VsZi5tc0NyeXB0byYmc2VsZi5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/eS5wcm90b3R5cGUuX3JhbmQ9'@;
put 'ZnVuY3Rpb24odyl7dmFyIFA9bmV3IFVpbnQ4QXJyYXkodyk7cmV0dXJuIHNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFApLFB9OiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYoeS5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRl'@;
put 'ZCB5ZXQiKX0pO2Vsc2UgdHJ5e3ZhciBnPV8oOTIxNCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGcucmFuZG9tQnl0ZXMpdGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIik7eS5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odyl7cmV0dXJuIGcucmFuZG9tQnl0ZXModyl9fWNhdGNoe319'@;
put 'LDQ0OTc6KHVlLHEsXyk9Pnt2YXIgST1fKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiB5KE8pe0kuaXNCdWZmZXIoTyl8fChPPUkuZnJvbShPKSk7Zm9yKHZhciB6PU8ubGVuZ3RoLzR8MCxOPW5ldyBBcnJheSh6KSxMPTA7TDx6O0wrKylOW0xdPU8ucmVhZFVJbnQzMkJFKDQqTCk7cmV0dXJuIE59'@;
put 'ZnVuY3Rpb24gZyhPKXtmb3IoOzA8Ty5sZW5ndGg7TysrKU9bMF09MH1mdW5jdGlvbiBCKE8seixOLEwsSyl7Zm9yKHZhciBsZSxtZSxfZSxUZSxVPU5bMF0sVz1OWzFdLFk9TlsyXSxYPU5bM10sZWU9T1swXV56WzBdLEo9T1sxXV56WzFdLHJlPU9bMl1eelsyXSxpZT1PWzNdXnpbM10sU2U9'@;
put 'NCx6ZT0xO3plPEs7emUrKylsZT1VW2VlPj4+MjRdXldbSj4+PjE2JjI1NV1eWVtyZT4+PjgmMjU1XV5YWzI1NSZpZV1eeltTZSsrXSxtZT1VW0o+Pj4yNF1eV1tyZT4+PjE2JjI1NV1eWVtpZT4+PjgmMjU1XV5YWzI1NSZlZV1eeltTZSsrXSxfZT1VW3JlPj4+MjRdXldbaWU+Pj4xNiYyNTVd'@;
put 'XllbZWU+Pj44JjI1NV1eWFsyNTUmSl1eeltTZSsrXSxUZT1VW2llPj4+MjRdXldbZWU+Pj4xNiYyNTVdXllbSj4+PjgmMjU1XV5YWzI1NSZyZV1eeltTZSsrXSxlZT1sZSxKPW1lLHJlPV9lLGllPVRlO3JldHVybiBsZT0oTFtlZT4+PjI0XTw8MjR8TFtKPj4+MTYmMjU1XTw8MTZ8TFtyZT4+'@;
put 'PjgmMjU1XTw8OHxMWzI1NSZpZV0pXnpbU2UrK10sbWU9KExbSj4+PjI0XTw8MjR8TFtyZT4+PjE2JjI1NV08PDE2fExbaWU+Pj44JjI1NV08PDh8TFsyNTUmZWVdKV56W1NlKytdLF9lPShMW3JlPj4+MjRdPDwyNHxMW2llPj4+MTYmMjU1XTw8MTZ8TFtlZT4+PjgmMjU1XTw8OHxMWzI1NSZK'@;
put 'XSleeltTZSsrXSxUZT0oTFtpZT4+PjI0XTw8MjR8TFtlZT4+PjE2JjI1NV08PDE2fExbSj4+PjgmMjU1XTw8OHxMWzI1NSZyZV0pXnpbU2UrK10sW2xlPj4+PTAsbWU+Pj49MCxfZT4+Pj0wLFRlPj4+PTBdfXZhciB3PVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxQPWZ1bmN0aW9u'@;
put 'KCl7Zm9yKHZhciBPPW5ldyBBcnJheSgyNTYpLHo9MDt6PDI1Njt6KyspT1t6XT16PDEyOD96PDwxOno8PDFeMjgzO2Zvcih2YXIgTj1bXSxMPVtdLEs9W1tdLFtdLFtdLFtdXSxVPVtbXSxbXSxbXSxbXV0sVz0wLFk9MCxYPTA7WDwyNTY7KytYKXt2YXIgZWU9WV5ZPDwxXlk8PDJeWTw8M15Z'@;
put 'PDw0O05bV109ZWU9ZWU+Pj44XjI1NSZlZV45OSxMW2VlXT1XO3ZhciBKPU9bV10scmU9T1tKXSxpZT1PW3JlXSxsZT0yNTcqT1tlZV1eMTY4NDMwMDgqZWU7S1swXVtXXT1sZTw8MjR8bGU+Pj44LEtbMV1bV109bGU8PDE2fGxlPj4+MTYsS1syXVtXXT1sZTw8OHxsZT4+PjI0LEtbM11bV109'@;
put 'bGUsVVswXVtlZV09KGxlPTE2ODQzMDA5KmllXjY1NTM3KnJlXjI1NypKXjE2ODQzMDA4KlcpPDwyNHxsZT4+PjgsVVsxXVtlZV09bGU8PDE2fGxlPj4+MTYsVVsyXVtlZV09bGU8PDh8bGU+Pj4yNCxVWzNdW2VlXT1sZSwwPT09Vz9XPVk9MTooVz1KXk9bT1tPW2llXkpdXV0sWV49T1tPW1ld'@;
put 'XSl9cmV0dXJue1NCT1g6TixJTlZfU0JPWDpMLFNVQl9NSVg6SyxJTlZfU1VCX01JWDpVfX0oKTtmdW5jdGlvbiBGKE8pe3RoaXMuX2tleT15KE8pLHRoaXMuX3Jlc2V0KCl9Ri5ibG9ja1NpemU9MTYsRi5rZXlTaXplPTMyLEYucHJvdG90eXBlLmJsb2NrU2l6ZT1GLmJsb2NrU2l6ZSxGLnBy'@;
put 'b3RvdHlwZS5rZXlTaXplPUYua2V5U2l6ZSxGLnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24oKXtmb3IodmFyIE89dGhpcy5fa2V5LHo9Ty5sZW5ndGgsTj16KzYsTD00KihOKzEpLEs9W10sVT0wO1U8ejtVKyspS1tVXT1PW1VdO2ZvcihVPXo7VTxMO1UrKyl7dmFyIFc9S1tVLTFdO1Ulej09'@;
put 'MD8oVz1QLlNCT1hbKFc9Vzw8OHxXPj4+MjQpPj4+MjRdPDwyNHxQLlNCT1hbVz4+PjE2JjI1NV08PDE2fFAuU0JPWFtXPj4+OCYyNTVdPDw4fFAuU0JPWFsyNTUmV10sV149d1tVL3p8MF08PDI0KTp6PjYmJlUlej09NCYmKFc9UC5TQk9YW1c+Pj4yNF08PDI0fFAuU0JPWFtXPj4+MTYmMjU1'@;
put 'XTw8MTZ8UC5TQk9YW1c+Pj44JjI1NV08PDh8UC5TQk9YWzI1NSZXXSksS1tVXT1LW1Utel1eV31mb3IodmFyIFk9W10sWD0wO1g8TDtYKyspe3ZhciBlZT1MLVgsSj1LW2VlLShYJTQ/MDo0KV07WVtYXT1YPDR8fGVlPD00P0o6UC5JTlZfU1VCX01JWFswXVtQLlNCT1hbSj4+PjI0XV1eUC5J'@;
put 'TlZfU1VCX01JWFsxXVtQLlNCT1hbSj4+PjE2JjI1NV1dXlAuSU5WX1NVQl9NSVhbMl1bUC5TQk9YW0o+Pj44JjI1NV1dXlAuSU5WX1NVQl9NSVhbM11bUC5TQk9YWzI1NSZKXV19dGhpcy5fblJvdW5kcz1OLHRoaXMuX2tleVNjaGVkdWxlPUssdGhpcy5faW52S2V5U2NoZWR1bGU9WX0sRi5w'@;
put 'cm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKE8pe3JldHVybiBCKE89eShPKSx0aGlzLl9rZXlTY2hlZHVsZSxQLlNVQl9NSVgsUC5TQk9YLHRoaXMuX25Sb3VuZHMpfSxGLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oTyl7dmFyIHo9dGhpcy5lbmNyeXB0QmxvY2tS'@;
put 'YXcoTyksTj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTi53cml0ZVVJbnQzMkJFKHpbMF0sMCksTi53cml0ZVVJbnQzMkJFKHpbMV0sNCksTi53cml0ZVVJbnQzMkJFKHpbMl0sOCksTi53cml0ZVVJbnQzMkJFKHpbM10sMTIpLE59LEYucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlv'@;
put 'bihPKXt2YXIgej0oTz15KE8pKVsxXTtPWzFdPU9bM10sT1szXT16O3ZhciBOPUIoTyx0aGlzLl9pbnZLZXlTY2hlZHVsZSxQLklOVl9TVUJfTUlYLFAuSU5WX1NCT1gsdGhpcy5fblJvdW5kcyksTD1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gTC53cml0ZVVJbnQzMkJFKE5bMF0sMCksTC53'@;
put 'cml0ZVVJbnQzMkJFKE5bM10sNCksTC53cml0ZVVJbnQzMkJFKE5bMl0sOCksTC53cml0ZVVJbnQzMkJFKE5bMV0sMTIpLEx9LEYucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7Zyh0aGlzLl9rZXlTY2hlZHVsZSksZyh0aGlzLl9pbnZLZXlTY2hlZHVsZSksZyh0aGlzLl9rZXkpfSx1ZS5l'@;
put 'eHBvcnRzLkFFUz1GfSw0ODQ4Oih1ZSxxLF8pPT57dmFyIEk9Xyg0NDk3KSx5PV8oOTUwOSkuQnVmZmVyLGc9XygxMDI3KSxCPV8oNTcxNyksdz1fKDMyODgpLFA9Xyg3Mjk1KSxGPV8oNjg1KTtmdW5jdGlvbiBOKEwsSyxVLFcpe2cuY2FsbCh0aGlzKTt2YXIgWT15LmFsbG9jKDQsMCk7dGhp'@;
put 'cy5fY2lwaGVyPW5ldyBJLkFFUyhLKTt2YXIgWD10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFkpO3RoaXMuX2doYXNoPW5ldyB3KFgpLFU9ZnVuY3Rpb24geihMLEssVSl7aWYoMTI9PT1LLmxlbmd0aClyZXR1cm4gTC5fZmluSUQ9eS5jb25jYXQoW0sseS5mcm9tKFswLDAsMCwxXSldKSx5'@;
put 'LmNvbmNhdChbSyx5LmZyb20oWzAsMCwwLDJdKV0pO3ZhciBXPW5ldyB3KFUpLFk9Sy5sZW5ndGgsWD1ZJTE2O1cudXBkYXRlKEspLFgmJlcudXBkYXRlKHkuYWxsb2MoWD0xNi1YLDApKSxXLnVwZGF0ZSh5LmFsbG9jKDgsMCkpO3ZhciBlZT04KlksSj15LmFsbG9jKDgpO0oud3JpdGVVSW50'@;
put 'QkUoZWUsMCw4KSxXLnVwZGF0ZShKKSxMLl9maW5JRD1XLnN0YXRlO3ZhciByZT15LmZyb20oTC5fZmluSUQpO3JldHVybiBGKHJlKSxyZX0odGhpcyxVLFgpLHRoaXMuX3ByZXY9eS5mcm9tKFUpLHRoaXMuX2NhY2hlPXkuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9eS5hbGxvY1Vu'@;
put 'c2FmZSgwKSx0aGlzLl9kZWNyeXB0PVcsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9TCx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfUIoTixnKSxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4p'@;
put 'e3ZhciBLPTE2LXRoaXMuX2FsZW4lMTY7SzwxNiYmKEs9eS5hbGxvYyhLLDApLHRoaXMuX2doYXNoLnVwZGF0ZShLKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBVPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEwpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9MOlUpLHRo'@;
put 'aXMuX2xlbis9TC5sZW5ndGgsVX0sTi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgTD1QKHRoaXMu'@;
put 'X2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIE8oTCxLKXt2YXIgVT0wO0wubGVuZ3RoIT09Sy5sZW5ndGgmJlUrKztmb3IodmFyIFc9TWF0aC5taW4o'@;
put 'TC5sZW5ndGgsSy5sZW5ndGgpLFk9MDtZPFc7KytZKVUrPUxbWV1eS1tZXTtyZXR1cm4gVX0oTCx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9TCx0aGlzLl9jaXBo'@;
put 'ZXIuc2NydWIoKX0sTi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHR8fCF5LmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4g'@;
put 'dGhpcy5fYXV0aFRhZ30sTi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihLKXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1LfSxOLnByb3RvdHlwZS5z'@;
put 'ZXRBQUQ9ZnVuY3Rpb24oSyl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKEspLHRoaXMuX2FsZW4rPUsubGVuZ3RofSx1ZS5leHBvcnRzPU59LDQ2OTY6KHVlLHEs'@;
put 'Xyk9Pnt2YXIgST1fKDE0OTQpLHk9Xyg2MTkzKSxnPV8oNDk0Nik7cS5jcmVhdGVDaXBoZXI9cS5DaXBoZXI9SS5jcmVhdGVDaXBoZXIscS5jcmVhdGVDaXBoZXJpdj1xLkNpcGhlcml2PUkuY3JlYXRlQ2lwaGVyaXYscS5jcmVhdGVEZWNpcGhlcj1xLkRlY2lwaGVyPXkuY3JlYXRlRGVjaXBo'@;
put 'ZXIscS5jcmVhdGVEZWNpcGhlcml2PXEuRGVjaXBoZXJpdj15LmNyZWF0ZURlY2lwaGVyaXYscS5saXN0Q2lwaGVycz1xLmdldENpcGhlcnM9ZnVuY3Rpb24gQigpe3JldHVybiBPYmplY3Qua2V5cyhnKX19LDYxOTM6KHVlLHEsXyk9Pnt2YXIgST1fKDQ4NDgpLHk9Xyg5NTA5KS5CdWZmZXIs'@;
put 'Zz1fKDQ1KSxCPV8oNTk2OSksdz1fKDEwMjcpLFA9Xyg0NDk3KSxGPV8oMzA0OCk7ZnVuY3Rpb24geihXLFksWCl7dy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBOLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgUC5BRVMoWSksdGhpcy5fcHJldj15LmZyb20oWCksdGhp'@;
put 'cy5fbW9kZT1XLHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIE4oKXt0aGlzLmNhY2hlPXkuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gSyhXLFksWCl7dmFyIGVlPWdbVy50b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7'@;
put 'aWYoInN0cmluZyI9PXR5cGVvZiBYJiYoWD15LmZyb20oWCkpLCJHQ00iIT09ZWUubW9kZSYmWC5sZW5ndGghPT1lZS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK1gubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIFkmJihZPXkuZnJvbShZKSksWS5sZW5n'@;
put 'dGghPT1lZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGggIitZLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1lZS50eXBlP25ldyBCKGVlLm1vZHVsZSxZLFgsITApOiJhdXRoIj09PWVlLnR5cGU/bmV3IEkoZWUubW9kdWxlLFksWCwhMCk6bmV3IHooZWUu'@;
put 'bW9kdWxlLFksWCl9Xyg1NzE3KSh6LHcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVyl7dGhpcy5fY2FjaGUuYWRkKFcpO2Zvcih2YXIgWSxYLGVlPVtdO1k9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspWD10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxZKSxlZS5w'@;
put 'dXNoKFgpO3JldHVybiB5LmNvbmNhdChlZSl9LHoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIGZ1bmN0aW9uIEwoVyl7dmFyIFk9V1sxNV07aWYoWTwxfHxZPjE2KXRocm93IG5ldyBFcnJv'@;
put 'cigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2Zvcih2YXIgWD0tMTsrK1g8WTspaWYoV1tYKygxNi1ZKV0hPT1ZKXRocm93IG5ldyBFcnJvcigidW5hYmxlIHRvIGRlY3J5cHQgZGF0YSIpO2lmKDE2IT09WSlyZXR1cm4gVy5zbGljZSgwLDE2LVkpfSh0aGlzLl9tb2RlLmRlY3J5cHQodGhp'@;
put 'cyxXKSk7aWYoVyl0aHJvdyBuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbihXKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFXLHRoaXN9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihX'@;
put 'KXt0aGlzLmNhY2hlPXkuY29uY2F0KFt0aGlzLmNhY2hlLFddKX0sTi5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKFcpe3ZhciBZO2lmKFcpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBZPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2'@;
put 'KSxZfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBZPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxZO3JldHVybiBudWxsfSxOLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJl'@;
put 'dHVybiB0aGlzLmNhY2hlfSxxLmNyZWF0ZURlY2lwaGVyPWZ1bmN0aW9uIFUoVyxZKXt2YXIgWD1nW1cudG9Mb3dlckNhc2UoKV07aWYoIVgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIGVlPUYoWSwhMSxYLmtleSxYLml2KTtyZXR1cm4gSyhXLGVlLmtl'@;
put 'eSxlZS5pdil9LHEuY3JlYXRlRGVjaXBoZXJpdj1LfSwxNDk0Oih1ZSxxLF8pPT57dmFyIEk9Xyg0NSkseT1fKDQ4NDgpLGc9Xyg5NTA5KS5CdWZmZXIsQj1fKDU5NjkpLHc9XygxMDI3KSxQPV8oNDQ5NyksRj1fKDMwNDgpO2Z1bmN0aW9uIHooVyxZLFgpe3cuY2FsbCh0aGlzKSx0aGlzLl9j'@;
put 'YWNoZT1uZXcgTCx0aGlzLl9jaXBoZXI9bmV3IFAuQUVTKFkpLHRoaXMuX3ByZXY9Zy5mcm9tKFgpLHRoaXMuX21vZGU9Vyx0aGlzLl9hdXRvcGFkZGluZz0hMH1fKDU3MTcpKHosdyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihXKXt0aGlzLl9jYWNoZS5hZGQoVyk7Zm9yKHZhciBZ'@;
put 'LFgsZWU9W107WT10aGlzLl9jYWNoZS5nZXQoKTspWD10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxZKSxlZS5wdXNoKFgpO3JldHVybiBnLmNvbmNhdChlZSl9O3ZhciBOPWcuYWxsb2MoMTYsMTYpO2Z1bmN0aW9uIEwoKXt0aGlzLmNhY2hlPWcuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gSyhX'@;
put 'LFksWCl7dmFyIGVlPUlbVy50b0xvd2VyQ2FzZSgpXTtpZighZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBZJiYoWT1nLmZyb20oWSkpLFkubGVuZ3RoIT09ZWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxp'@;
put 'ZCBrZXkgbGVuZ3RoICIrWS5sZW5ndGgpO2lmKCJzdHJpbmciPT10eXBlb2YgWCYmKFg9Zy5mcm9tKFgpKSwiR0NNIiE9PWVlLm1vZGUmJlgubGVuZ3RoIT09ZWUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitYLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT1l'@;
put 'ZS50eXBlP25ldyBCKGVlLm1vZHVsZSxZLFgpOiJhdXRoIj09PWVlLnR5cGU/bmV3IHkoZWUubW9kdWxlLFksWCk6bmV3IHooZWUubW9kdWxlLFksWCl9ei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIFc9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZyly'@;
put 'ZXR1cm4gVz10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxXKSx0aGlzLl9jaXBoZXIuc2NydWIoKSxXO2lmKCFXLmVxdWFscyhOKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aCIpfSx6LnByb3RvdHlwZS5zZXRB'@;
put 'dXRvUGFkZGluZz1mdW5jdGlvbihXKXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISFXLHRoaXN9LEwucHJvdG90eXBlLmFkZD1mdW5jdGlvbihXKXt0aGlzLmNhY2hlPWcuY29uY2F0KFt0aGlzLmNhY2hlLFddKX0sTC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5s'@;
put 'ZW5ndGg+MTUpe3ZhciBXPXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksV31yZXR1cm4gbnVsbH0sTC5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIFc9MTYtdGhpcy5jYWNoZS5sZW5ndGgsWT1nLmFsbG9jVW5z'@;
put 'YWZlKFcpLFg9LTE7KytYPFc7KVkud3JpdGVVSW50OChXLFgpO3JldHVybiBnLmNvbmNhdChbdGhpcy5jYWNoZSxZXSl9LHEuY3JlYXRlQ2lwaGVyaXY9SyxxLmNyZWF0ZUNpcGhlcj1mdW5jdGlvbiBVKFcsWSl7dmFyIFg9SVtXLnRvTG93ZXJDYXNlKCldO2lmKCFYKXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO3ZhciBlZT1GKFksITEsWC5rZXksWC5pdik7cmV0dXJuIEsoVyxlZS5rZXksZWUuaXYpfX0sMzI4ODoodWUscSxfKT0+e3ZhciBJPV8oOTUwOSkuQnVmZmVyLHk9SS5hbGxvYygxNiwwKTtmdW5jdGlvbiBCKFApe3ZhciBGPUkuYWxsb2NVbnNh'@;
put 'ZmUoMTYpO3JldHVybiBGLndyaXRlVUludDMyQkUoUFswXT4+PjAsMCksRi53cml0ZVVJbnQzMkJFKFBbMV0+Pj4wLDQpLEYud3JpdGVVSW50MzJCRShQWzJdPj4+MCw4KSxGLndyaXRlVUludDMyQkUoUFszXT4+PjAsMTIpLEZ9ZnVuY3Rpb24gdyhQKXt0aGlzLmg9UCx0aGlzLnN0YXRlPUku'@;
put 'YWxsb2MoMTYsMCksdGhpcy5jYWNoZT1JLmFsbG9jVW5zYWZlKDApfXcucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKFApe2Zvcih2YXIgRj0tMTsrK0Y8UC5sZW5ndGg7KXRoaXMuc3RhdGVbRl1ePVBbRl07dGhpcy5fbXVsdGlwbHkoKX0sdy5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9u'@;
put 'KCl7Zm9yKHZhciBPLE4sUD1mdW5jdGlvbiBnKFApe3JldHVybltQLnJlYWRVSW50MzJCRSgwKSxQLnJlYWRVSW50MzJCRSg0KSxQLnJlYWRVSW50MzJCRSg4KSxQLnJlYWRVSW50MzJCRSgxMildfSh0aGlzLmgpLEY9WzAsMCwwLDBdLEw9LTE7KytMPDEyODspe2ZvcighISh0aGlzLnN0YXRl'@;
put 'W35+KEwvOCldJjE8PDctTCU4KSYmKEZbMF1ePVBbMF0sRlsxXV49UFsxXSxGWzJdXj1QWzJdLEZbM11ePVBbM10pLE49ISEoMSZQWzNdKSxPPTM7Tz4wO08tLSlQW09dPVBbT10+Pj4xfCgxJlBbTy0xXSk8PDMxO1BbMF09UFswXT4+PjEsTiYmKFBbMF09LTUyMDA5MzY5Nl5QWzBdKX10aGlz'@;
put 'LnN0YXRlPUIoRil9LHcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihQKXt0aGlzLmNhY2hlPUkuY29uY2F0KFt0aGlzLmNhY2hlLFBdKTtmb3IodmFyIEY7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylGPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNl'@;
put 'KDE2KSx0aGlzLmdoYXNoKEYpfSx3LnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihQLEYpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChJLmNvbmNhdChbdGhpcy5jYWNoZSx5XSwxNikpLHRoaXMuZ2hhc2goQihbMCxQLDAsRl0pKSx0aGlzLnN0YXRlfSx1ZS5leHBvcnRz'@;
put 'PXd9LDY4NTp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24gcShfKXtmb3IodmFyIHksST1fLmxlbmd0aDtJLS07KXtpZigyNTUhPT0oeT1fLnJlYWRVSW50OChJKSkpe3krKyxfLndyaXRlVUludDgoeSxJKTticmVha31fLndyaXRlVUludDgoMCxJKX19fSw1MjkyOih1ZSxxLF8pPT57dmFyIEk9'@;
put 'Xyg3Mjk1KTtxLmVuY3J5cHQ9ZnVuY3Rpb24oeSxnKXt2YXIgQj1JKGcseS5fcHJldik7cmV0dXJuIHkuX3ByZXY9eS5fY2lwaGVyLmVuY3J5cHRCbG9jayhCKSx5Ll9wcmV2fSxxLmRlY3J5cHQ9ZnVuY3Rpb24oeSxnKXt2YXIgQj15Ll9wcmV2O3kuX3ByZXY9Zzt2YXIgdz15Ll9jaXBoZXIu'@;
put 'ZGVjcnlwdEJsb2NrKGcpO3JldHVybiBJKHcsQil9fSw2MzExOih1ZSxxLF8pPT57dmFyIEk9Xyg5NTA5KS5CdWZmZXIseT1fKDcyOTUpO2Z1bmN0aW9uIGcoQix3LFApe3ZhciBGPXcubGVuZ3RoLE89eSh3LEIuX2NhY2hlKTtyZXR1cm4gQi5fY2FjaGU9Qi5fY2FjaGUuc2xpY2UoRiksQi5f'@;
put 'cHJldj1JLmNvbmNhdChbQi5fcHJldixQP3c6T10pLE99cS5lbmNyeXB0PWZ1bmN0aW9uKEIsdyxQKXtmb3IodmFyIE8sRj1JLmFsbG9jVW5zYWZlKDApO3cubGVuZ3RoOyl7aWYoMD09PUIuX2NhY2hlLmxlbmd0aCYmKEIuX2NhY2hlPUIuX2NpcGhlci5lbmNyeXB0QmxvY2soQi5fcHJldiks'@;
put 'Qi5fcHJldj1JLmFsbG9jVW5zYWZlKDApKSwhKEIuX2NhY2hlLmxlbmd0aDw9dy5sZW5ndGgpKXtGPUkuY29uY2F0KFtGLGcoQix3LFApXSk7YnJlYWt9Rj1JLmNvbmNhdChbRixnKEIsdy5zbGljZSgwLE89Qi5fY2FjaGUubGVuZ3RoKSxQKV0pLHc9dy5zbGljZShPKX1yZXR1cm4gRn19LDE1'@;
put 'MTA6KHVlLHEsXyk9Pnt2YXIgST1fKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiB5KEIsdyxQKXtmb3IodmFyIEwsSyxPPS0xLE49MDsrK088ODspTis9KDEyOCYoSz1CLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIuX3ByZXYpWzBdXihMPXcmMTw8Ny1PPzEyODowKSkpPj5PJTgsQi5fcHJldj1nKEIu'@;
put 'X3ByZXYsUD9MOkspO3JldHVybiBOfWZ1bmN0aW9uIGcoQix3KXt2YXIgUD1CLmxlbmd0aCxGPS0xLE89SS5hbGxvY1Vuc2FmZShCLmxlbmd0aCk7Zm9yKEI9SS5jb25jYXQoW0IsSS5mcm9tKFt3XSldKTsrK0Y8UDspT1tGXT1CW0ZdPDwxfEJbRisxXT4+NztyZXR1cm4gT31xLmVuY3J5cHQ9'@;
put 'ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgRj13Lmxlbmd0aCxPPUkuYWxsb2NVbnNhZmUoRiksej0tMTsrK3o8RjspT1t6XT15KEIsd1t6XSxQKTtyZXR1cm4gT319LDE5NjQ6KHVlLHEsXyk9Pnt2YXIgST1fKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiB5KGcsQix3KXt2YXIgRj1nLl9jaXBoZXIu'@;
put 'ZW5jcnlwdEJsb2NrKGcuX3ByZXYpWzBdXkI7cmV0dXJuIGcuX3ByZXY9SS5jb25jYXQoW2cuX3ByZXYuc2xpY2UoMSksSS5mcm9tKFt3P0I6Rl0pXSksRn1xLmVuY3J5cHQ9ZnVuY3Rpb24oZyxCLHcpe2Zvcih2YXIgUD1CLmxlbmd0aCxGPUkuYWxsb2NVbnNhZmUoUCksTz0tMTsrK088UDsp'@;
put 'RltPXT15KGcsQltPXSx3KTtyZXR1cm4gRn19LDYwMDk6KHVlLHEsXyk9Pnt2YXIgST1fKDcyOTUpLHk9Xyg5NTA5KS5CdWZmZXIsZz1fKDY4NSk7ZnVuY3Rpb24gQihQKXt2YXIgRj1QLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KFAuX3ByZXYpO3JldHVybiBnKFAuX3ByZXYpLEZ9cS5lbmNy'@;
put 'eXB0PWZ1bmN0aW9uKFAsRil7dmFyIE89TWF0aC5jZWlsKEYubGVuZ3RoLzE2KSx6PVAuX2NhY2hlLmxlbmd0aDtQLl9jYWNoZT15LmNvbmNhdChbUC5fY2FjaGUseS5hbGxvY1Vuc2FmZSgxNipPKV0pO2Zvcih2YXIgTj0wO048TztOKyspe3ZhciBMPUIoUCksSz16KzE2Kk47UC5fY2FjaGUu'@;
put 'd3JpdGVVSW50MzJCRShMWzBdLEsrMCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzFdLEsrNCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzJdLEsrOCksUC5fY2FjaGUud3JpdGVVSW50MzJCRShMWzNdLEsrMTIpfXZhciBVPVAuX2NhY2hlLnNsaWNlKDAsRi5sZW5ndGgpO3JldHVybiBQ'@;
put 'Ll9jYWNoZT1QLl9jYWNoZS5zbGljZShGLmxlbmd0aCksSShGLFUpfX0sMTA4NDoodWUscSk9PntxLmVuY3J5cHQ9ZnVuY3Rpb24oXyxJKXtyZXR1cm4gXy5fY2lwaGVyLmVuY3J5cHRCbG9jayhJKX0scS5kZWNyeXB0PWZ1bmN0aW9uKF8sSSl7cmV0dXJuIF8uX2NpcGhlci5kZWNyeXB0Qmxv'@;
put 'Y2soSSl9fSw0NToodWUscSxfKT0+e3ZhciBJPXtFQ0I6XygxMDg0KSxDQkM6Xyg1MjkyKSxDRkI6Xyg2MzExKSxDRkI4Ol8oMTk2NCksQ0ZCMTpfKDE1MTApLE9GQjpfKDg4NjEpLENUUjpfKDYwMDkpLEdDTTpfKDYwMDkpfSx5PV8oNDk0Nik7Zm9yKHZhciBnIGluIHkpeVtnXS5tb2R1bGU9'@;
put 'SVt5W2ddLm1vZGVdO3VlLmV4cG9ydHM9eX0sODg2MToodWUscSxfKT0+e3ZhciBJPV8oODc2NCkuQnVmZmVyLHk9Xyg3Mjk1KTtmdW5jdGlvbiBnKEIpe3JldHVybiBCLl9wcmV2PUIuX2NpcGhlci5lbmNyeXB0QmxvY2soQi5fcHJldiksQi5fcHJldn1xLmVuY3J5cHQ9ZnVuY3Rpb24oQix3'@;
put 'KXtmb3IoO0IuX2NhY2hlLmxlbmd0aDx3Lmxlbmd0aDspQi5fY2FjaGU9SS5jb25jYXQoW0IuX2NhY2hlLGcoQildKTt2YXIgUD1CLl9jYWNoZS5zbGljZSgwLHcubGVuZ3RoKTtyZXR1cm4gQi5fY2FjaGU9Qi5fY2FjaGUuc2xpY2Uody5sZW5ndGgpLHkodyxQKX19LDU5Njk6KHVlLHEsXyk9'@;
put 'Pnt2YXIgST1fKDQ0OTcpLHk9Xyg5NTA5KS5CdWZmZXIsZz1fKDEwMjcpO2Z1bmN0aW9uIHcoUCxGLE8seil7Zy5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgSS5BRVMoRiksdGhpcy5fcHJldj15LmZyb20oTyksdGhpcy5fY2FjaGU9eS5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNo'@;
put 'ZT15LmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9eix0aGlzLl9tb2RlPVB9Xyg1NzE3KSh3LGcpLHcucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLFAsdGhpcy5fZGVjcnlwdCl9LHcucHJvdG90eXBlLl9maW5hbD1mdW5j'@;
put 'dGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfSx1ZS5leHBvcnRzPXd9LDM2MTQ6KHVlLHEsXyk9Pnt2YXIgST1fKDc2NjcpLHk9Xyg0Njk2KSxnPV8oNDUpLEI9Xyg5NzE1KSx3PV8oMzA0OCk7ZnVuY3Rpb24gTyhMLEssVSl7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlyZXR1cm4geS5j'@;
put 'cmVhdGVDaXBoZXJpdihMLEssVSk7aWYoQltMXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlUsbW9kZTpMfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24geihMLEssVSl7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlyZXR1cm4geS5jcmVhdGVE'@;
put 'ZWNpcGhlcml2KEwsSyxVKTtpZihCW0xdKXJldHVybiBuZXcgSSh7a2V5OkssaXY6VSxtb2RlOkwsZGVjcnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfXEuY3JlYXRlQ2lwaGVyPXEuQ2lwaGVyPWZ1bmN0aW9uIFAoTCxLKXt2YXIgVSxXO2lmKEw9'@;
put 'TC50b0xvd2VyQ2FzZSgpLGdbTF0pVT1nW0xdLmtleSxXPWdbTF0uaXY7ZWxzZXtpZighQltMXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtVPTgqQltMXS5rZXksVz1CW0xdLml2fXZhciBZPXcoSywhMSxVLFcpO3JldHVybiBPKEwsWS5rZXksWS5pdil9LHEu'@;
put 'Y3JlYXRlQ2lwaGVyaXY9cS5DaXBoZXJpdj1PLHEuY3JlYXRlRGVjaXBoZXI9cS5EZWNpcGhlcj1mdW5jdGlvbiBGKEwsSyl7dmFyIFUsVztpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKVU9Z1tMXS5rZXksVz1nW0xdLml2O2Vsc2V7aWYoIUJbTF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52'@;
put 'YWxpZCBzdWl0ZSB0eXBlIik7VT04KkJbTF0ua2V5LFc9QltMXS5pdn12YXIgWT13KEssITEsVSxXKTtyZXR1cm4geihMLFkua2V5LFkuaXYpfSxxLmNyZWF0ZURlY2lwaGVyaXY9cS5EZWNpcGhlcml2PXoscS5saXN0Q2lwaGVycz1xLmdldENpcGhlcnM9ZnVuY3Rpb24gTigpe3JldHVybiBP'@;
put 'YmplY3Qua2V5cyhCKS5jb25jYXQoeS5nZXRDaXBoZXJzKCkpfX0sNzY2NzoodWUscSxfKT0+e3ZhciBJPV8oMTAyNykseT1fKDUyNTEpLGc9Xyg1NzE3KSxCPV8oOTUwOSkuQnVmZmVyLHc9eyJkZXMtZWRlMy1jYmMiOnkuQ0JDLmluc3RhbnRpYXRlKHkuRURFKSwiZGVzLWVkZTMiOnkuRURF'@;
put 'LCJkZXMtZWRlLWNiYyI6eS5DQkMuaW5zdGFudGlhdGUoeS5FREUpLCJkZXMtZWRlIjp5LkVERSwiZGVzLWNiYyI6eS5DQkMuaW5zdGFudGlhdGUoeS5ERVMpLCJkZXMtZWNiIjp5LkRFU307ZnVuY3Rpb24gUChGKXtJLmNhbGwodGhpcyk7dmFyIE4sTz1GLm1vZGUudG9Mb3dlckNhc2UoKSx6'@;
put 'PXdbT107Tj1GLmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgTD1GLmtleTtCLmlzQnVmZmVyKEwpfHwoTD1CLmZyb20oTCkpLCgiZGVzLWVkZSI9PT1PfHwiZGVzLWVkZS1jYmMiPT09TykmJihMPUIuY29uY2F0KFtMLEwuc2xpY2UoMCw4KV0pKTt2YXIgSz1GLml2O0IuaXNCdWZm'@;
put 'ZXIoSyl8fChLPUIuZnJvbShLKSksdGhpcy5fZGVzPXouY3JlYXRlKHtrZXk6TCxpdjpLLHR5cGU6Tn0pfXcuZGVzPXdbImRlcy1jYmMiXSx3LmRlczM9d1siZGVzLWVkZTMtY2JjIl0sdWUuZXhwb3J0cz1QLGcoUCxJKSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3JldHVybiBC'@;
put 'LmZyb20odGhpcy5fZGVzLnVwZGF0ZShGKSl9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBCLmZyb20odGhpcy5fZGVzLmZpbmFsKCkpfX0sOTcxNToodWUscSk9PntxWyJkZXMtZWNiIl09e2tleTo4LGl2OjB9LHFbImRlcy1jYmMiXT1xLmRlcz17a2V5OjgsaXY6OH0s'@;
put 'cVsiZGVzLWVkZTMtY2JjIl09cS5kZXMzPXtrZXk6MjQsaXY6OH0scVsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LHFbImRlcy1lZGUtY2JjIl09e2tleToxNixpdjo4fSxxWyJkZXMtZWRlIl09e2tleToxNixpdjowfX0sMzY2MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM1'@;
put 'NTApLHk9XygxNzk4KSxnPV8oOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEIoRil7dmFyIHosTz1GLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve3o9bmV3IEkoeShPKSl9d2hpbGUoei5jbXAoRi5tb2R1bHVzKT49MHx8IXoudW1vZChGLnByaW1lMSl8fCF6LnVtb2QoRi5wcmltZTIpKTtyZXR1cm4g'@;
put 'en1mdW5jdGlvbiBQKEYsTyl7dmFyIHo9ZnVuY3Rpb24gdyhGKXt2YXIgTz1CKEYpO3JldHVybntibGluZGVyOk8udG9SZWQoSS5tb250KEYubW9kdWx1cykpLnJlZFBvdyhuZXcgSShGLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpPLmludm0oRi5tb2R1bHVzKX19KE8p'@;
put 'LE49Ty5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxMPW5ldyBJKEYpLm11bCh6LmJsaW5kZXIpLnVtb2QoTy5tb2R1bHVzKSxLPUwudG9SZWQoSS5tb250KE8ucHJpbWUxKSksVT1MLnRvUmVkKEkubW9udChPLnByaW1lMikpLFc9Ty5jb2VmZmljaWVudCxZPU8ucHJpbWUxLFg9Ty5wcmltZTIsZWU9'@;
put 'Sy5yZWRQb3coTy5leHBvbmVudDEpLmZyb21SZWQoKSxKPVUucmVkUG93KE8uZXhwb25lbnQyKS5mcm9tUmVkKCkscmU9ZWUuaXN1YihKKS5pbXVsKFcpLnVtb2QoWSkuaW11bChYKTtyZXR1cm4gSi5pYWRkKHJlKS5pbXVsKHoudW5ibGluZGVyKS51bW9kKE8ubW9kdWx1cykudG9BcnJheUxp'@;
put 'a2UoZywiYmUiLE4pfVAuZ2V0cj1CLHVlLmV4cG9ydHM9UH0sNjA0MjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPV8oNTIwNyl9LDQ3NDM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NTA5KS5CdWZmZXIseT1fKDM0ODIpLGc9XygzODcyKSxCPV8oNTcxNyks'@;
put 'dz1fKDI5NTcpLFA9Xyg3NzUzKSxGPV8oNTIwNyk7ZnVuY3Rpb24gTyhLKXtnLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIFU9RltLXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1VLmhhc2gsdGhpcy5faGFzaD15KFUuaGFz'@;
put 'aCksdGhpcy5fdGFnPVUuaWQsdGhpcy5fc2lnblR5cGU9VS5zaWdufWZ1bmN0aW9uIHooSyl7Zy5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBVPUZbS107aWYoIVUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaD15KFUuaGFzaCksdGhpcy5fdGFn'@;
put 'PVUuaWQsdGhpcy5fc2lnblR5cGU9VS5zaWdufWZ1bmN0aW9uIE4oSyl7cmV0dXJuIG5ldyBPKEspfWZ1bmN0aW9uIEwoSyl7cmV0dXJuIG5ldyB6KEspfU9iamVjdC5rZXlzKEYpLmZvckVhY2goZnVuY3Rpb24oSyl7RltLXS5pZD1JLmZyb20oRltLXS5pZCwiaGV4IiksRltLLnRvTG93ZXJD'@;
put 'YXNlKCldPUZbS119KSxCKE8sZy5Xcml0YWJsZSksTy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUsVyxZKXt0aGlzLl9oYXNoLnVwZGF0ZShVKSxZKCl9LE8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihVLFcpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9m'@;
put 'IFU/SS5mcm9tKFUsVyk6VSksdGhpc30sTy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihVLFcpe3RoaXMuZW5kKCk7dmFyIFk9dGhpcy5faGFzaC5kaWdlc3QoKSxYPXcoWSxVLHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIFc/WC50b1N0cmluZyhXKTpY'@;
put 'fSxCKHosZy5Xcml0YWJsZSksei5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUsVyxZKXt0aGlzLl9oYXNoLnVwZGF0ZShVKSxZKCl9LHoucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihVLFcpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFU/SS5mcm9tKFUs'@;
put 'Vyk6VSksdGhpc30sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFUsVyxZKXt2YXIgWD0ic3RyaW5nIj09dHlwZW9mIFc/SS5mcm9tKFcsWSk6Vzt0aGlzLmVuZCgpO3ZhciBlZT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBQKFgsZWUsVSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcp'@;
put 'fSx1ZS5leHBvcnRzPXtTaWduOk4sVmVyaWZ5OkwsY3JlYXRlU2lnbjpOLGNyZWF0ZVZlcmlmeTpMfX0sMjk1NzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk1MDkpLkJ1ZmZlcix5PV8oODM1NSksZz1fKDM2NjMpLEI9Xyg2OTQ4KS5lYyx3PV8oMzU1MCksUD1fKDk4MCksRj1f'@;
put 'KDEzMDgpO2Z1bmN0aW9uIFUoSixyZSxpZSxsZSl7aWYoKEo9SS5mcm9tKEoudG9BcnJheSgpKSkubGVuZ3RoPHJlLmJ5dGVMZW5ndGgoKSl7dmFyIG1lPUkuYWxsb2MocmUuYnl0ZUxlbmd0aCgpLUoubGVuZ3RoKTtKPUkuY29uY2F0KFttZSxKXSl9dmFyIF9lPWllLmxlbmd0aCxUZT1mdW5j'@;
put 'dGlvbiBZKEoscmUpe0o9KEo9VyhKLHJlKSkubW9kKHJlKTt2YXIgaWU9SS5mcm9tKEoudG9BcnJheSgpKTtpZihpZS5sZW5ndGg8cmUuYnl0ZUxlbmd0aCgpKXt2YXIgbGU9SS5hbGxvYyhyZS5ieXRlTGVuZ3RoKCktaWUubGVuZ3RoKTtpZT1JLmNvbmNhdChbbGUsaWVdKX1yZXR1cm4gaWV9'@;
put 'KGllLHJlKSxTZT1JLmFsbG9jKF9lKTtTZS5maWxsKDEpO3ZhciB6ZT1JLmFsbG9jKF9lKTtyZXR1cm4gemU9eShsZSx6ZSkudXBkYXRlKFNlKS51cGRhdGUoSS5mcm9tKFswXSkpLnVwZGF0ZShKKS51cGRhdGUoVGUpLmRpZ2VzdCgpLFNlPXkobGUsemUpLnVwZGF0ZShTZSkuZGlnZXN0KCks'@;
put 'e2s6emU9eShsZSx6ZSkudXBkYXRlKFNlKS51cGRhdGUoSS5mcm9tKFsxXSkpLnVwZGF0ZShKKS51cGRhdGUoVGUpLmRpZ2VzdCgpLHY6U2U9eShsZSx6ZSkudXBkYXRlKFNlKS5kaWdlc3QoKX19ZnVuY3Rpb24gVyhKLHJlKXt2YXIgaWU9bmV3IHcoSiksbGU9KEoubGVuZ3RoPDwzKS1yZS5i'@;
put 'aXRMZW5ndGgoKTtyZXR1cm4gbGU+MCYmaWUuaXNocm4obGUpLGllfWZ1bmN0aW9uIFgoSixyZSxpZSl7dmFyIGxlLG1lO2Rve2ZvcihsZT1JLmFsbG9jKDApOzgqbGUubGVuZ3RoPEouYml0TGVuZ3RoKCk7KXJlLnY9eShpZSxyZS5rKS51cGRhdGUocmUudikuZGlnZXN0KCksbGU9SS5jb25j'@;
put 'YXQoW2xlLHJlLnZdKTttZT1XKGxlLEopLHJlLms9eShpZSxyZS5rKS51cGRhdGUocmUudikudXBkYXRlKEkuZnJvbShbMF0pKS5kaWdlc3QoKSxyZS52PXkoaWUscmUuaykudXBkYXRlKHJlLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09bWUuY21wKEopKTtyZXR1cm4gbWV9ZnVuY3Rpb24gZWUo'@;
put 'SixyZSxpZSxsZSl7cmV0dXJuIEoudG9SZWQody5tb250KGllKSkucmVkUG93KHJlKS5mcm9tUmVkKCkubW9kKGxlKX11ZS5leHBvcnRzPWZ1bmN0aW9uIHooSixyZSxpZSxsZSxtZSl7dmFyIF9lPVAocmUpO2lmKF9lLmN1cnZlKXtpZigiZWNkc2EiIT09bGUmJiJlY2RzYS9yc2EiIT09bGUp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uIE4oSixyZSl7dmFyIGllPUZbcmUuY3VydmUuam9pbigiLiIpXTtpZighaWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrcmUuY3VydmUuam9pbigiLiIpKTt2YXIgX2U9bmV3'@;
put 'IEIoaWUpLmtleUZyb21Qcml2YXRlKHJlLnByaXZhdGVLZXkpLnNpZ24oSik7cmV0dXJuIEkuZnJvbShfZS50b0RFUigpKX0oSixfZSl9aWYoImRzYSI9PT1fZS50eXBlKXtpZigiZHNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5j'@;
put 'dGlvbiBMKEoscmUsaWUpe2Zvcih2YXIgemUsbGU9cmUucGFyYW1zLnByaXZfa2V5LG1lPXJlLnBhcmFtcy5wLF9lPXJlLnBhcmFtcy5xLFRlPXJlLnBhcmFtcy5nLFNlPW5ldyB3KDApLFY9VyhKLF9lKS5tb2QoX2UpLHA9ITEsYj1VKGxlLF9lLEosaWUpOyExPT09cDspU2U9ZWUoVGUsemU9'@;
put 'WChfZSxiLGllKSxtZSxfZSksMD09PShwPXplLmludm0oX2UpLmltdWwoVi5hZGQobGUubXVsKFNlKSkpLm1vZChfZSkpLmNtcG4oMCkmJihwPSExLFNlPW5ldyB3KDApKTtyZXR1cm4gZnVuY3Rpb24gSyhKLHJlKXtKPUoudG9BcnJheSgpLHJlPXJlLnRvQXJyYXkoKSwxMjgmSlswXSYmKEo9'@;
put 'WzBdLmNvbmNhdChKKSksMTI4JnJlWzBdJiYocmU9WzBdLmNvbmNhdChyZSkpO3ZhciBsZT1bNDgsSi5sZW5ndGgrcmUubGVuZ3RoKzQsMixKLmxlbmd0aF07cmV0dXJuIGxlPWxlLmNvbmNhdChKLFsyLHJlLmxlbmd0aF0scmUpLEkuZnJvbShsZSl9KFNlLHApfShKLF9lLGllKX1pZigicnNh'@;
put 'IiE9PWxlJiYiZWNkc2EvcnNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO2lmKHZvaWQgMCE9PXJlLnBhZGRpbmcmJjEhPT1yZS5wYWRkaW5nKXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBvciB1bnN1cHBvcnRlZCBwYWRkaW5nIG1vZGUiKTtKPUku'@;
put 'Y29uY2F0KFttZSxKXSk7Zm9yKHZhciBUZT1fZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxTZT1bMCwxXTtKLmxlbmd0aCtTZS5sZW5ndGgrMTxUZTspU2UucHVzaCgyNTUpO1NlLnB1c2goMCk7Zm9yKHZhciB6ZT0tMTsrK3plPEoubGVuZ3RoOylTZS5wdXNoKEpbemVdKTtyZXR1cm4gZyhTZSxf'@;
put 'ZSl9LHVlLmV4cG9ydHMuZ2V0S2V5PVUsdWUuZXhwb3J0cy5tYWtlS2V5PVh9LDc3NTM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NTA5KS5CdWZmZXIseT1fKDM1NTApLGc9Xyg2OTQ4KS5lYyxCPV8oOTgwKSx3PV8oMTMwOCk7ZnVuY3Rpb24geihOLEwpe2lmKE4uY21wbigw'@;
put 'KTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoTi5jbXAoTCk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gUChOLEwsSyxVLFcpe3ZhciBZPUIoSyk7aWYoImVjIj09PVkudHlwZSl7aWYoImVjZHNhIiE9PVUmJiJlY2Rz'@;
put 'YS9yc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBGKE4sTCxLKXt2YXIgVT13W0suZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIitLLmRhdGEu'@;
put 'YWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBnKFUpLnZlcmlmeShMLE4sSy5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGEpfShOLEwsWSl9aWYoImRzYSI9PT1ZLnR5cGUpe2lmKCJkc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIp'@;
put 'O3JldHVybiBmdW5jdGlvbiBPKE4sTCxLKXt2YXIgVT1LLmRhdGEucCxXPUsuZGF0YS5xLFk9Sy5kYXRhLmcsWD1LLmRhdGEucHViX2tleSxlZT1CLnNpZ25hdHVyZS5kZWNvZGUoTiwiZGVyIiksSj1lZS5zLHJlPWVlLnI7eihKLFcpLHoocmUsVyk7dmFyIGllPXkubW9udChVKSxsZT1KLmlu'@;
put 'dm0oVyk7cmV0dXJuIDA9PT1ZLnRvUmVkKGllKS5yZWRQb3cobmV3IHkoTCkubXVsKGxlKS5tb2QoVykpLmZyb21SZWQoKS5tdWwoWC50b1JlZChpZSkucmVkUG93KHJlLm11bChsZSkubW9kKFcpKS5mcm9tUmVkKCkpLm1vZChVKS5tb2QoVykuY21wKHJlKX0oTixMLFkpfWlmKCJyc2EiIT09'@;
put 'VSYmImVjZHNhL3JzYSIhPT1VKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7TD1JLmNvbmNhdChbVyxMXSk7Zm9yKHZhciBYPVkubW9kdWx1cy5ieXRlTGVuZ3RoKCksZWU9WzFdLEo9MDtMLmxlbmd0aCtlZS5sZW5ndGgrMjxYOyllZS5wdXNoKDI1NSksSis9MTtl'@;
put 'ZS5wdXNoKDApO2Zvcih2YXIgcmU9LTE7KytyZTxMLmxlbmd0aDspZWUucHVzaChMW3JlXSk7ZWU9SS5mcm9tKGVlKTt2YXIgaWU9eS5tb250KFkubW9kdWx1cyk7Tj0oTj1uZXcgeShOKS50b1JlZChpZSkpLnJlZFBvdyhuZXcgeShZLnB1YmxpY0V4cG9uZW50KSksTj1JLmZyb20oTi5mcm9t'@;
put 'UmVkKCkudG9BcnJheSgpKTt2YXIgbGU9Sjw4PzE6MDtmb3IoWD1NYXRoLm1pbihOLmxlbmd0aCxlZS5sZW5ndGgpLE4ubGVuZ3RoIT09ZWUubGVuZ3RoJiYobGU9MSkscmU9LTE7KytyZTxYOylsZXw9TltyZV1eZWVbcmVdO3JldHVybiAwPT09bGV9fSw0MzkwOih1ZSxxLF8pPT57InVzZSBz'@;
put 'dHJpY3QiO3ZhciBJPV8oODIxMikseT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oSyl7dmFyIFU9W107Zm9yKHZhciBXIGluIEspVS5wdXNoKFcpO3JldHVybiBVfTt1ZS5leHBvcnRzPXo7dmFyIGc9T2JqZWN0LmNyZWF0ZShfKDY0OTcpKTtnLmluaGVyaXRzPV8oNTcxNyk7dmFyIEI9Xyg0OTYw'@;
put 'KSx3PV8oMjAxMCk7Zy5pbmhlcml0cyh6LEIpO2Zvcih2YXIgUD15KHcucHJvdG90eXBlKSxGPTA7RjxQLmxlbmd0aDtGKyspe3ZhciBPPVBbRl07ei5wcm90b3R5cGVbT118fCh6LnByb3RvdHlwZVtPXT13LnByb3RvdHlwZVtPXSl9ZnVuY3Rpb24geihLKXtpZighKHRoaXMgaW5zdGFuY2Vv'@;
put 'ZiB6KSlyZXR1cm4gbmV3IHooSyk7Qi5jYWxsKHRoaXMsSyksdy5jYWxsKHRoaXMsSyksSyYmITE9PT1LLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksSyYmITE9PT1LLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLEsmJiExPT09Sy5hbGxv'@;
put 'd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsTil9ZnVuY3Rpb24gTigpe3RoaXMuYWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhMLHRoaXMpfWZ1bmN0aW9uIEwoSyl7Sy5lbmQoKX1PYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoei5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsImRlc3Ryb3ll'@;
put 'ZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2'@;
put 'b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KSx6LnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihLLFUpe3Ro'@;
put 'aXMucHVzaChudWxsKSx0aGlzLmVuZCgpLEkubmV4dFRpY2soVSxLKX19LDEyOTQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1nO3ZhciBJPV8oMzkxMikseT1PYmplY3QuY3JlYXRlKF8oNjQ5NykpO2Z1bmN0aW9uIGcoQil7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0'@;
put 'dXJuIG5ldyBnKEIpO0kuY2FsbCh0aGlzLEIpfXkuaW5oZXJpdHM9Xyg1NzE3KSx5LmluaGVyaXRzKGcsSSksZy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihCLHcsUCl7UChudWxsLEIpfX0sNDk2MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9Xyg4MjEy'@;
put 'KTt1ZS5leHBvcnRzPWxlO3ZhciBCLGc9Xyg1ODI2KTtsZS5SZWFkYWJsZVN0YXRlPWllLF8oNzE4Nyk7dmFyIFA9ZnVuY3Rpb24odmUsWGUpe3JldHVybiB2ZS5saXN0ZW5lcnMoWGUpLmxlbmd0aH0sRj1fKDk4MTkpLE89XygxNTcyKS5CdWZmZXIsej0odHlwZW9mIF8uZzwidSI/Xy5nOnR5'@;
put 'cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LEs9T2JqZWN0LmNyZWF0ZShfKDY0OTcpKTtLLmluaGVyaXRzPV8oNTcxNyk7dmFyIFU9Xyg2MzUzKSxXPXZvaWQgMDtXPVUmJlUuZGVidWdsb2c/VS5kZWJ1Z2xv'@;
put 'Zygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBlZSxZPV8oMjI2NyksWD1fKDU5OTcpO0suaW5oZXJpdHMobGUsRik7dmFyIEo9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gaWUodmUsWGUpe3ZhciBqZT1YZSBpbnN0YW5jZW9mKEI9Qnx8'@;
put 'Xyg0MzkwKSk7dGhpcy5vYmplY3RNb2RlPSEhKHZlPXZlfHx7fSkub2JqZWN0TW9kZSxqZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhdmUucmVhZGFibGVPYmplY3RNb2RlKTt2YXIgRGU9dmUuaGlnaFdhdGVyTWFyayxGZT12ZS5yZWFkYWJsZUhpZ2hXYXRlck1hcms7'@;
put 'dGhpcy5oaWdoV2F0ZXJNYXJrPURlfHwwPT09RGU/RGU6amUmJihGZXx8MD09PUZlKT9GZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmJ1ZmZlcj1uZXcgWSx0aGlzLmxlbmd0aD0wLHRoaXMu'@;
put 'cGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFi'@;
put 'bGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dmUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlz'@;
put 'LmVuY29kaW5nPW51bGwsdmUuZW5jb2RpbmcmJihlZXx8KGVlPV8oMjIyMSkucyksdGhpcy5kZWNvZGVyPW5ldyBlZSh2ZS5lbmNvZGluZyksdGhpcy5lbmNvZGluZz12ZS5lbmNvZGluZyl9ZnVuY3Rpb24gbGUodmUpe2lmKEI9Qnx8Xyg0MzkwKSwhKHRoaXMgaW5zdGFuY2VvZiBsZSkpcmV0'@;
put 'dXJuIG5ldyBsZSh2ZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgaWUodmUsdGhpcyksdGhpcy5yZWFkYWJsZT0hMCx2ZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB2ZS5yZWFkJiYodGhpcy5fcmVhZD12ZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgdmUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ry'@;
put 'b3k9dmUuZGVzdHJveSkpLEYuY2FsbCh0aGlzKX1mdW5jdGlvbiBtZSh2ZSxYZSxqZSxEZSxGZSl7dmFyIEllLFJlPXZlLl9yZWFkYWJsZVN0YXRlO3JldHVybiBudWxsPT09WGU/KFJlLnJlYWRpbmc9ITEsZnVuY3Rpb24gYih2ZSxYZSl7aWYoIVhlLmVuZGVkKXtpZihYZS5kZWNvZGVyKXt2'@;
put 'YXIgamU9WGUuZGVjb2Rlci5lbmQoKTtqZSYmamUubGVuZ3RoJiYoWGUuYnVmZmVyLnB1c2goamUpLFhlLmxlbmd0aCs9WGUub2JqZWN0TW9kZT8xOmplLmxlbmd0aCl9WGUuZW5kZWQ9ITAseCh2ZSl9fSh2ZSxSZSkpOihGZXx8KEllPWZ1bmN0aW9uIFRlKHZlLFhlKXt2YXIgamU7cmV0dXJu'@;
put 'IWZ1bmN0aW9uIEwodmUpe3JldHVybiBPLmlzQnVmZmVyKHZlKXx8dmUgaW5zdGFuY2VvZiB6fShYZSkmJiJzdHJpbmciIT10eXBlb2YgWGUmJnZvaWQgMCE9PVhlJiYhdmUub2JqZWN0TW9kZSYmKGplPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSks'@;
put 'amV9KFJlLFhlKSksSWU/dmUuZW1pdCgiZXJyb3IiLEllKTpSZS5vYmplY3RNb2RlfHxYZSYmWGUubGVuZ3RoPjA/KCJzdHJpbmciIT10eXBlb2YgWGUmJiFSZS5vYmplY3RNb2RlJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YoWGUpIT09Ty5wcm90b3R5cGUmJihYZT1mdW5jdGlvbiBOKHZlKXty'@;
put 'ZXR1cm4gTy5mcm9tKHZlKX0oWGUpKSxEZT9SZS5lbmRFbWl0dGVkP3ZlLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50IikpOl9lKHZlLFJlLFhlLCEwKTpSZS5lbmRlZD92ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0ucHVz'@;
put 'aCgpIGFmdGVyIEVPRiIpKTooUmUucmVhZGluZz0hMSxSZS5kZWNvZGVyJiYhamU/KFhlPVJlLmRlY29kZXIud3JpdGUoWGUpLFJlLm9iamVjdE1vZGV8fDAhPT1YZS5sZW5ndGg/X2UodmUsUmUsWGUsITEpOlQodmUsUmUpKTpfZSh2ZSxSZSxYZSwhMSkpKTpEZXx8KFJlLnJlYWRpbmc9ITEp'@;
put 'KSxmdW5jdGlvbiBTZSh2ZSl7cmV0dXJuIXZlLmVuZGVkJiYodmUubmVlZFJlYWRhYmxlfHx2ZS5sZW5ndGg8dmUuaGlnaFdhdGVyTWFya3x8MD09PXZlLmxlbmd0aCl9KFJlKX1mdW5jdGlvbiBfZSh2ZSxYZSxqZSxEZSl7WGUuZmxvd2luZyYmMD09PVhlLmxlbmd0aCYmIVhlLnN5bmM/KHZl'@;
put 'LmVtaXQoImRhdGEiLGplKSx2ZS5yZWFkKDApKTooWGUubGVuZ3RoKz1YZS5vYmplY3RNb2RlPzE6amUubGVuZ3RoLERlP1hlLmJ1ZmZlci51bnNoaWZ0KGplKTpYZS5idWZmZXIucHVzaChqZSksWGUubmVlZFJlYWRhYmxlJiZ4KHZlKSksVCh2ZSxYZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KGxlLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0'@;
put 'YXRlLmRlc3Ryb3llZD12ZSl9fSksbGUucHJvdG90eXBlLmRlc3Ryb3k9WC5kZXN0cm95LGxlLnByb3RvdHlwZS5fdW5kZXN0cm95PVgudW5kZXN0cm95LGxlLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbih2ZSxYZSl7dGhpcy5wdXNoKG51bGwpLFhlKHZlKX0sbGUucHJvdG90eXBlLnB1'@;
put 'c2g9ZnVuY3Rpb24odmUsWGUpe3ZhciBEZSxqZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBqZS5vYmplY3RNb2RlP0RlPSEwOiJzdHJpbmciPT10eXBlb2YgdmUmJigoWGU9WGV8fGplLmRlZmF1bHRFbmNvZGluZykhPT1qZS5lbmNvZGluZyYmKHZlPU8uZnJvbSh2ZSxYZSksWGU9IiIp'@;
put 'LERlPSEwKSxtZSh0aGlzLHZlLFhlLCExLERlKX0sbGUucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24odmUpe3JldHVybiBtZSh0aGlzLHZlLG51bGwsITAsITEpfSxsZS5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2lu'@;
put 'Z30sbGUucHJvdG90eXBlLnNldEVuY29kaW5nPWZ1bmN0aW9uKHZlKXtyZXR1cm4gZWV8fChlZT1fKDIyMjEpLnMpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgZWUodmUpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dmUsdGhpc307ZnVuY3Rpb24gcCh2ZSxYZSl7cmV0'@;
put 'dXJuIHZlPD0wfHwwPT09WGUubGVuZ3RoJiZYZS5lbmRlZD8wOlhlLm9iamVjdE1vZGU/MTp2ZSE9dmU/WGUuZmxvd2luZyYmWGUubGVuZ3RoP1hlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOlhlLmxlbmd0aDoodmU+WGUuaGlnaFdhdGVyTWFyayYmKFhlLmhpZ2hXYXRlck1hcms9ZnVuY3Rp'@;
put 'b24gVih2ZSl7cmV0dXJuIHZlPj04Mzg4NjA4P3ZlPTgzODg2MDg6KHZlLS0sdmV8PXZlPj4+MSx2ZXw9dmU+Pj4yLHZlfD12ZT4+PjQsdmV8PXZlPj4+OCx2ZXw9dmU+Pj4xNix2ZSsrKSx2ZX0odmUpKSx2ZTw9WGUubGVuZ3RoP3ZlOlhlLmVuZGVkP1hlLmxlbmd0aDooWGUubmVlZFJlYWRh'@;
put 'YmxlPSEwLDApKX1mdW5jdGlvbiB4KHZlKXt2YXIgWGU9dmUuX3JlYWRhYmxlU3RhdGU7WGUubmVlZFJlYWRhYmxlPSExLFhlLmVtaXR0ZWRSZWFkYWJsZXx8KFcoImVtaXRSZWFkYWJsZSIsWGUuZmxvd2luZyksWGUuZW1pdHRlZFJlYWRhYmxlPSEwLFhlLnN5bmM/eS5uZXh0VGljayhDLHZl'@;
put 'KTpDKHZlKSl9ZnVuY3Rpb24gQyh2ZSl7VygiZW1pdCByZWFkYWJsZSIpLHZlLmVtaXQoInJlYWRhYmxlIiksb2UodmUpfWZ1bmN0aW9uIFQodmUsWGUpe1hlLnJlYWRpbmdNb3JlfHwoWGUucmVhZGluZ01vcmU9ITAseS5uZXh0VGljayhILHZlLFhlKSl9ZnVuY3Rpb24gSCh2ZSxYZSl7Zm9y'@;
put 'KHZhciBqZT1YZS5sZW5ndGg7IVhlLnJlYWRpbmcmJiFYZS5mbG93aW5nJiYhWGUuZW5kZWQmJlhlLmxlbmd0aDxYZS5oaWdoV2F0ZXJNYXJrJiYoVygibWF5YmVSZWFkTW9yZSByZWFkIDAiKSx2ZS5yZWFkKDApLGplIT09WGUubGVuZ3RoKTspamU9WGUubGVuZ3RoO1hlLnJlYWRpbmdNb3Jl'@;
put 'PSExfWZ1bmN0aW9uIEUodmUpe1coInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLHZlLnJlYWQoMCl9ZnVuY3Rpb24gQSh2ZSxYZSl7WGUucmVhZGluZ3x8KFcoInJlc3VtZSByZWFkIDAiKSx2ZS5yZWFkKDApKSxYZS5yZXN1bWVTY2hlZHVsZWQ9ITEsWGUuYXdhaXREcmFpbj0wLHZlLmVt'@;
put 'aXQoInJlc3VtZSIpLG9lKHZlKSxYZS5mbG93aW5nJiYhWGUucmVhZGluZyYmdmUucmVhZCgwKX1mdW5jdGlvbiBvZSh2ZSl7dmFyIFhlPXZlLl9yZWFkYWJsZVN0YXRlO2ZvcihXKCJmbG93IixYZS5mbG93aW5nKTtYZS5mbG93aW5nJiZudWxsIT09dmUucmVhZCgpOyk7fWZ1bmN0aW9uIHRl'@;
put 'KHZlLFhlKXtyZXR1cm4gMD09PVhlLmxlbmd0aD9udWxsOihYZS5vYmplY3RNb2RlP2plPVhlLmJ1ZmZlci5zaGlmdCgpOiF2ZXx8dmU+PVhlLmxlbmd0aD8oamU9WGUuZGVjb2Rlcj9YZS5idWZmZXIuam9pbigiIik6MT09PVhlLmJ1ZmZlci5sZW5ndGg/WGUuYnVmZmVyLmhlYWQuZGF0YTpY'@;
put 'ZS5idWZmZXIuY29uY2F0KFhlLmxlbmd0aCksWGUuYnVmZmVyLmNsZWFyKCkpOmplPWZ1bmN0aW9uIHNlKHZlLFhlLGplKXt2YXIgRGU7cmV0dXJuIHZlPFhlLmhlYWQuZGF0YS5sZW5ndGg/KERlPVhlLmhlYWQuZGF0YS5zbGljZSgwLHZlKSxYZS5oZWFkLmRhdGE9WGUuaGVhZC5kYXRhLnNs'@;
put 'aWNlKHZlKSk6RGU9dmU9PT1YZS5oZWFkLmRhdGEubGVuZ3RoP1hlLnNoaWZ0KCk6amU/ZnVuY3Rpb24gd2UodmUsWGUpe3ZhciBqZT1YZS5oZWFkLERlPTEsRmU9amUuZGF0YTtmb3IodmUtPUZlLmxlbmd0aDtqZT1qZS5uZXh0Oyl7dmFyIFJlPWplLmRhdGEsSWU9dmU+UmUubGVuZ3RoP1Jl'@;
put 'Lmxlbmd0aDp2ZTtpZihGZSs9SWU9PT1SZS5sZW5ndGg/UmU6UmUuc2xpY2UoMCx2ZSksMD09KHZlLT1JZSkpe0llPT09UmUubGVuZ3RoPygrK0RlLFhlLmhlYWQ9amUubmV4dD9qZS5uZXh0OlhlLnRhaWw9bnVsbCk6KFhlLmhlYWQ9amUsamUuZGF0YT1SZS5zbGljZShJZSkpO2JyZWFrfSsr'@;
put 'RGV9cmV0dXJuIFhlLmxlbmd0aC09RGUsRmV9KHZlLFhlKTpmdW5jdGlvbiBVZSh2ZSxYZSl7dmFyIGplPU8uYWxsb2NVbnNhZmUodmUpLERlPVhlLmhlYWQsRmU9MTtmb3IoRGUuZGF0YS5jb3B5KGplKSx2ZS09RGUuZGF0YS5sZW5ndGg7RGU9RGUubmV4dDspe3ZhciBSZT1EZS5kYXRhLEll'@;
put 'PXZlPlJlLmxlbmd0aD9SZS5sZW5ndGg6dmU7aWYoUmUuY29weShqZSxqZS5sZW5ndGgtdmUsMCxJZSksMD09KHZlLT1JZSkpe0llPT09UmUubGVuZ3RoPygrK0ZlLFhlLmhlYWQ9RGUubmV4dD9EZS5uZXh0OlhlLnRhaWw9bnVsbCk6KFhlLmhlYWQ9RGUsRGUuZGF0YT1SZS5zbGljZShJZSkp'@;
put 'O2JyZWFrfSsrRmV9cmV0dXJuIFhlLmxlbmd0aC09RmUsamV9KHZlLFhlKSxEZX0odmUsWGUuYnVmZmVyLFhlLmRlY29kZXIpLGplKTt2YXIgamV9ZnVuY3Rpb24gSmUodmUpe3ZhciBYZT12ZS5fcmVhZGFibGVTdGF0ZTtpZihYZS5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoJyJlbmRSZWFk'@;
put 'YWJsZSgpIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO1hlLmVuZEVtaXR0ZWR8fChYZS5lbmRlZD0hMCx5Lm5leHRUaWNrKGF0LFhlLHZlKSl9ZnVuY3Rpb24gYXQodmUsWGUpeyF2ZS5lbmRFbWl0dGVkJiYwPT09dmUubGVuZ3RoJiYodmUuZW5kRW1pdHRlZD0hMCxYZS5yZWFkYWJs'@;
put 'ZT0hMSxYZS5lbWl0KCJlbmQiKSl9ZnVuY3Rpb24gTWUodmUsWGUpe2Zvcih2YXIgamU9MCxEZT12ZS5sZW5ndGg7amU8RGU7amUrKylpZih2ZVtqZV09PT1YZSlyZXR1cm4gamU7cmV0dXJuLTF9bGUucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24odmUpe1coInJlYWQiLHZlKSx2ZT1wYXJzZUlu'@;
put 'dCh2ZSwxMCk7dmFyIFhlPXRoaXMuX3JlYWRhYmxlU3RhdGUsamU9dmU7aWYoMCE9PXZlJiYoWGUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09dmUmJlhlLm5lZWRSZWFkYWJsZSYmKFhlLmxlbmd0aD49WGUuaGlnaFdhdGVyTWFya3x8WGUuZW5kZWQpKXJldHVybiBXKCJyZWFkOiBlbWl0UmVh'@;
put 'ZGFibGUiLFhlLmxlbmd0aCxYZS5lbmRlZCksMD09PVhlLmxlbmd0aCYmWGUuZW5kZWQ/SmUodGhpcyk6eCh0aGlzKSxudWxsO2lmKDA9PT0odmU9cCh2ZSxYZSkpJiZYZS5lbmRlZClyZXR1cm4gMD09PVhlLmxlbmd0aCYmSmUodGhpcyksbnVsbDt2YXIgRmUsRGU9WGUubmVlZFJlYWRhYmxl'@;
put 'O3JldHVybiBXKCJuZWVkIHJlYWRhYmxlIixEZSksKDA9PT1YZS5sZW5ndGh8fFhlLmxlbmd0aC12ZTxYZS5oaWdoV2F0ZXJNYXJrKSYmVygibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLERlPSEwKSxYZS5lbmRlZHx8WGUucmVhZGluZz9XKCJyZWFkaW5nIG9yIGVuZGVkIixEZT0hMSk6'@;
put 'RGUmJihXKCJkbyByZWFkIiksWGUucmVhZGluZz0hMCxYZS5zeW5jPSEwLDA9PT1YZS5sZW5ndGgmJihYZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoWGUuaGlnaFdhdGVyTWFyayksWGUuc3luYz0hMSxYZS5yZWFkaW5nfHwodmU9cChqZSxYZSkpKSxudWxsPT09KEZlPXZlPjA/dGUo'@;
put 'dmUsWGUpOm51bGwpPyhYZS5uZWVkUmVhZGFibGU9ITAsdmU9MCk6WGUubGVuZ3RoLT12ZSwwPT09WGUubGVuZ3RoJiYoWGUuZW5kZWR8fChYZS5uZWVkUmVhZGFibGU9ITApLGplIT09dmUmJlhlLmVuZGVkJiZKZSh0aGlzKSksbnVsbCE9PUZlJiZ0aGlzLmVtaXQoImRhdGEiLEZlKSxGZX0s'@;
put 'bGUucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHZlKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIl9yZWFkKCkgaXMgbm90IGltcGxlbWVudGVkIikpfSxsZS5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih2ZSxYZSl7dmFyIGplPXRoaXMsRGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0'@;
put 'Y2goRGUucGlwZXNDb3VudCl7Y2FzZSAwOkRlLnBpcGVzPXZlO2JyZWFrO2Nhc2UgMTpEZS5waXBlcz1bRGUucGlwZXMsdmVdO2JyZWFrO2RlZmF1bHQ6RGUucGlwZXMucHVzaCh2ZSl9RGUucGlwZXNDb3VudCs9MSxXKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLERlLnBpcGVzQ291bnQsWGUp'@;
put 'O3ZhciBSZT1YZSYmITE9PT1YZS5lbmR8fHZlPT09SS5zdGRvdXR8fHZlPT09SS5zdGRlcnI/RHQ6VmU7ZnVuY3Rpb24gVmUoKXtXKCJvbmVuZCIpLHZlLmVuZCgpfURlLmVuZEVtaXR0ZWQ/eS5uZXh0VGljayhSZSk6amUub25jZSgiZW5kIixSZSksdmUub24oInVucGlwZSIsZnVuY3Rpb24g'@;
put 'SWUoaXQsJGUpe1coIm9udW5waXBlIiksaXQ9PT1qZSYmJGUmJiExPT09JGUuaGFzVW5waXBlZCYmKCRlLmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gX3QoKXtXKCJjbGVhbnVwIiksdmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIix5dCksdmUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsTXQpLHZl'@;
put 'LnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsa2UpLHZlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsdW4pLHZlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLEllKSxqZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixWZSksamUucmVtb3ZlTGlzdGVuZXIoImVuZCIsRHQpLGplLnJlbW92ZUxpc3RlbmVyKCJk'@;
put 'YXRhIixRZSksQWU9ITAsRGUuYXdhaXREcmFpbiYmKCF2ZS5fd3JpdGFibGVTdGF0ZXx8dmUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYma2UoKX0oKSl9KTt2YXIga2U9ZnVuY3Rpb24gaih2ZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFhlPXZlLl9yZWFkYWJsZVN0YXRlO1coInBpcGVP'@;
put 'bkRyYWluIixYZS5hd2FpdERyYWluKSxYZS5hd2FpdERyYWluJiZYZS5hd2FpdERyYWluLS0sMD09PVhlLmF3YWl0RHJhaW4mJlAodmUsImRhdGEiKSYmKFhlLmZsb3dpbmc9ITAsb2UodmUpKX19KGplKTt2ZS5vbigiZHJhaW4iLGtlKTt2YXIgQWU9ITEsbnQ9ITE7ZnVuY3Rpb24gUWUoaXQp'@;
put 'e1coIm9uZGF0YSIpLG50PSExLCExPT09dmUud3JpdGUoaXQpJiYhbnQmJigoMT09PURlLnBpcGVzQ291bnQmJkRlLnBpcGVzPT09dmV8fERlLnBpcGVzQ291bnQ+MSYmLTEhPT1NZShEZS5waXBlcyx2ZSkpJiYhQWUmJihXKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLERlLmF3YWl0'@;
put 'RHJhaW4pLERlLmF3YWl0RHJhaW4rKyxudD0hMCksamUucGF1c2UoKSl9ZnVuY3Rpb24gdW4oaXQpe1coIm9uZXJyb3IiLGl0KSxEdCgpLHZlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsdW4pLDA9PT1QKHZlLCJlcnJvciIpJiZ2ZS5lbWl0KCJlcnJvciIsaXQpfWZ1bmN0aW9uIHl0KCl7dmUu'@;
put 'cmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsTXQpLER0KCl9ZnVuY3Rpb24gTXQoKXtXKCJvbmZpbmlzaCIpLHZlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIseXQpLER0KCl9ZnVuY3Rpb24gRHQoKXtXKCJ1bnBpcGUiKSxqZS51bnBpcGUodmUpfXJldHVybiBqZS5vbigiZGF0YSIsUWUpLGZ1bmN0'@;
put 'aW9uIHJlKHZlLFhlLGplKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgdmUucHJlcGVuZExpc3RlbmVyKXJldHVybiB2ZS5wcmVwZW5kTGlzdGVuZXIoWGUsamUpO3ZlLl9ldmVudHMmJnZlLl9ldmVudHNbWGVdP2codmUuX2V2ZW50c1tYZV0pP3ZlLl9ldmVudHNbWGVdLnVuc2hpZnQoamUpOnZl'@;
put 'Ll9ldmVudHNbWGVdPVtqZSx2ZS5fZXZlbnRzW1hlXV06dmUub24oWGUsamUpfSh2ZSwiZXJyb3IiLHVuKSx2ZS5vbmNlKCJjbG9zZSIseXQpLHZlLm9uY2UoImZpbmlzaCIsTXQpLHZlLmVtaXQoInBpcGUiLGplKSxEZS5mbG93aW5nfHwoVygicGlwZSByZXN1bWUiKSxqZS5yZXN1bWUoKSks'@;
put 'dmV9LGxlLnByb3RvdHlwZS51bnBpcGU9ZnVuY3Rpb24odmUpe3ZhciBYZT10aGlzLl9yZWFkYWJsZVN0YXRlLGplPXtoYXNVbnBpcGVkOiExfTtpZigwPT09WGUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09WGUucGlwZXNDb3VudClyZXR1cm4gdmUmJnZlIT09WGUucGlwZXN8fCh2'@;
put 'ZXx8KHZlPVhlLnBpcGVzKSxYZS5waXBlcz1udWxsLFhlLnBpcGVzQ291bnQ9MCxYZS5mbG93aW5nPSExLHZlJiZ2ZS5lbWl0KCJ1bnBpcGUiLHRoaXMsamUpKSx0aGlzO2lmKCF2ZSl7dmFyIERlPVhlLnBpcGVzLEZlPVhlLnBpcGVzQ291bnQ7WGUucGlwZXM9bnVsbCxYZS5waXBlc0NvdW50'@;
put 'PTAsWGUuZmxvd2luZz0hMTtmb3IodmFyIFJlPTA7UmU8RmU7UmUrKylEZVtSZV0uZW1pdCgidW5waXBlIix0aGlzLHtoYXNVbnBpcGVkOiExfSk7cmV0dXJuIHRoaXN9dmFyIEllPU1lKFhlLnBpcGVzLHZlKTtyZXR1cm4tMT09PUllfHwoWGUucGlwZXMuc3BsaWNlKEllLDEpLFhlLnBpcGVz'@;
put 'Q291bnQtPTEsMT09PVhlLnBpcGVzQ291bnQmJihYZS5waXBlcz1YZS5waXBlc1swXSksdmUuZW1pdCgidW5waXBlIix0aGlzLGplKSksdGhpc30sbGUucHJvdG90eXBlLmFkZExpc3RlbmVyPWxlLnByb3RvdHlwZS5vbj1mdW5jdGlvbih2ZSxYZSl7dmFyIGplPUYucHJvdG90eXBlLm9uLmNh'@;
put 'bGwodGhpcyx2ZSxYZSk7aWYoImRhdGEiPT09dmUpITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZigicmVhZGFibGUiPT09dmUpe3ZhciBEZT10aGlzLl9yZWFkYWJsZVN0YXRlOyFEZS5lbmRFbWl0dGVkJiYhRGUucmVhZGFibGVMaXN0ZW5p'@;
put 'bmcmJihEZS5yZWFkYWJsZUxpc3RlbmluZz1EZS5uZWVkUmVhZGFibGU9ITAsRGUuZW1pdHRlZFJlYWRhYmxlPSExLERlLnJlYWRpbmc/RGUubGVuZ3RoJiZ4KHRoaXMpOnkubmV4dFRpY2soRSx0aGlzKSl9cmV0dXJuIGplfSxsZS5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHZl'@;
put 'PXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHZlLmZsb3dpbmd8fChXKCJyZXN1bWUiKSx2ZS5mbG93aW5nPSEwLGZ1bmN0aW9uIG0odmUsWGUpe1hlLnJlc3VtZVNjaGVkdWxlZHx8KFhlLnJlc3VtZVNjaGVkdWxlZD0hMCx5Lm5leHRUaWNrKEEsdmUsWGUpKX0odGhpcyx2ZSkpLHRoaXN9'@;
put 'LGxlLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBXKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihXKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2lu'@;
put 'Zz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXN9LGxlLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHZlKXt2YXIgWGU9dGhpcyxqZT10aGlzLl9yZWFkYWJsZVN0YXRlLERlPSExO2Zvcih2YXIgRmUgaW4gdmUub24oImVuZCIsZnVuY3Rpb24oKXtpZihXKCJ3cmFwcGVkIGVuZCIpLGplLmRl'@;
put 'Y29kZXImJiFqZS5lbmRlZCl7dmFyIEllPWplLmRlY29kZXIuZW5kKCk7SWUmJkllLmxlbmd0aCYmWGUucHVzaChJZSl9WGUucHVzaChudWxsKX0pLHZlLm9uKCJkYXRhIixmdW5jdGlvbihJZSl7Vygid3JhcHBlZCBkYXRhIiksamUuZGVjb2RlciYmKEllPWplLmRlY29kZXIud3JpdGUoSWUp'@;
put 'KSxqZS5vYmplY3RNb2RlJiZudWxsPT1JZXx8IShqZS5vYmplY3RNb2RlfHxJZSYmSWUubGVuZ3RoKXx8WGUucHVzaChJZSl8fChEZT0hMCx2ZS5wYXVzZSgpKX0pLHZlKXZvaWQgMD09PXRoaXNbRmVdJiYiZnVuY3Rpb24iPT10eXBlb2YgdmVbRmVdJiYodGhpc1tGZV09ZnVuY3Rpb24oSWUp'@;
put 'e3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2ZVtJZV0uYXBwbHkodmUsYXJndW1lbnRzKX19KEZlKSk7Zm9yKHZhciBSZT0wO1JlPEoubGVuZ3RoO1JlKyspdmUub24oSltSZV0sdGhpcy5lbWl0LmJpbmQodGhpcyxKW1JlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKEllKXtXKCJ3'@;
put 'cmFwcGVkIF9yZWFkIixJZSksRGUmJihEZT0hMSx2ZS5yZXN1bWUoKSl9LHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZS5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUu'@;
put 'aGlnaFdhdGVyTWFya319KSxsZS5fZnJvbUxpc3Q9dGV9LDM5MTI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1CO3ZhciBJPV8oNDM5MCkseT1PYmplY3QuY3JlYXRlKF8oNjQ5NykpO2Z1bmN0aW9uIGcoRixPKXt2YXIgej10aGlzLl90cmFuc2Zvcm1TdGF0ZTt6LnRyYW5z'@;
put 'Zm9ybWluZz0hMTt2YXIgTj16LndyaXRlY2I7aWYoIU4pcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigid3JpdGUgY2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIikpO3oud3JpdGVjaHVuaz1udWxsLHoud3JpdGVjYj1udWxsLG51bGwhPU8mJnRoaXMucHVzaChPKSxO'@;
put 'KEYpO3ZhciBMPXRoaXMuX3JlYWRhYmxlU3RhdGU7TC5yZWFkaW5nPSExLChMLm5lZWRSZWFkYWJsZXx8TC5sZW5ndGg8TC5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChMLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIEIoRil7aWYoISh0aGlzIGluc3RhbmNlb2YgQikpcmV0dXJuIG5ldyBC'@;
put 'KEYpO0kuY2FsbCh0aGlzLEYpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpnLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxl'@;
put 'U3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxGJiYoImZ1bmN0aW9uIj09dHlwZW9mIEYudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPUYudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgRi5mbHVzaCYmKHRoaXMuX2ZsdXNoPUYuZmx1c2gp'@;
put 'KSx0aGlzLm9uKCJwcmVmaW5pc2giLHcpfWZ1bmN0aW9uIHcoKXt2YXIgRj10aGlzOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9mbHVzaD90aGlzLl9mbHVzaChmdW5jdGlvbihPLHope1AoRixPLHopfSk6UCh0aGlzLG51bGwsbnVsbCl9ZnVuY3Rpb24gUChGLE8seil7aWYoTylyZXR1cm4g'@;
put 'Ri5lbWl0KCJlcnJvciIsTyk7aWYobnVsbCE9eiYmRi5wdXNoKHopLEYuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwIik7aWYoRi5fdHJhbnNmb3JtU3RhdGUudHJhbnNmb3JtaW5nKXRocm93'@;
put 'IG5ldyBFcnJvcigiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHN0aWxsIHRyYW5zZm9ybWluZyIpO3JldHVybiBGLnB1c2gobnVsbCl9eS5pbmhlcml0cz1fKDU3MTcpLHkuaW5oZXJpdHMoQixJKSxCLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYsTyl7cmV0dXJuIHRoaXMuX3RyYW5z'@;
put 'Zm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsSS5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsRixPKX0sQi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihGLE8seil7dGhyb3cgbmV3IEVycm9yKCJfdHJhbnNmb3JtKCkgaXMgbm90IGltcGxlbWVudGVkIil9LEIucHJvdG90eXBlLl93'@;
put 'cml0ZT1mdW5jdGlvbihGLE8seil7dmFyIE49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoTi53cml0ZWNiPXosTi53cml0ZWNodW5rPUYsTi53cml0ZWVuY29kaW5nPU8sIU4udHJhbnNmb3JtaW5nKXt2YXIgTD10aGlzLl9yZWFkYWJsZVN0YXRlOyhOLm5lZWRUcmFuc2Zvcm18fEwubmVlZFJl'@;
put 'YWRhYmxlfHxMLmxlbmd0aDxMLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKEwuaGlnaFdhdGVyTWFyayl9fSxCLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihGKXt2YXIgTz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09Ty53cml0ZWNodW5rJiZPLndyaXRlY2ImJiFPLnRyYW5zZm9y'@;
put 'bWluZz8oTy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKE8ud3JpdGVjaHVuayxPLndyaXRlZW5jb2RpbmcsTy5hZnRlclRyYW5zZm9ybSkpOk8ubmVlZFRyYW5zZm9ybT0hMH0sQi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRixPKXt2YXIgej10aGlzO0kucHJvdG90eXBl'@;
put 'Ll9kZXN0cm95LmNhbGwodGhpcyxGLGZ1bmN0aW9uKE4pe08oTiksei5lbWl0KCJjbG9zZSIpfSl9fSwyMDEwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSkseT1fKDgyMTIpO2Z1bmN0aW9uIEIobSl7dmFyIEE9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51'@;
put 'bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gRShtLEEsb2Upe3ZhciB0ZT1tLmVudHJ5O2ZvcihtLmVudHJ5PW51bGw7dGU7KXt2YXIgc2U9dGUuY2FsbGJhY2s7QS5wZW5kaW5nY2ItLSxzZShvZSksdGU9dGUubmV4dH1BLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PW19KEEs'@;
put 'bSl9fXVlLmV4cG9ydHM9Sjt2YXIgUCx3PSFJLmJyb3dzZXImJlsidjAuMTAiLCJ2MC45LiJdLmluZGV4T2YoSS52ZXJzaW9uLnNsaWNlKDAsNSkpPi0xP3NldEltbWVkaWF0ZTp5Lm5leHRUaWNrO0ouV3JpdGFibGVTdGF0ZT1YO3ZhciBGPU9iamVjdC5jcmVhdGUoXyg2NDk3KSk7Ri5pbmhl'@;
put 'cml0cz1fKDU3MTcpO3ZhciBlZSxPPXtkZXByZWNhdGU6Xyg0OTI3KX0sej1fKDk4MTkpLE49XygxNTcyKS5CdWZmZXIsTD0odHlwZW9mIF8uZzwidSI/Xy5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9'@;
put 'LFc9Xyg1OTk3KTtmdW5jdGlvbiBZKCl7fWZ1bmN0aW9uIFgobSxBKXtQPVB8fF8oNDM5MCk7dmFyIG9lPUEgaW5zdGFuY2VvZiBQO3RoaXMub2JqZWN0TW9kZT0hIShtPW18fHt9KS5vYmplY3RNb2RlLG9lJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFtLndyaXRhYmxl'@;
put 'T2JqZWN0TW9kZSk7dmFyIHRlPW0uaGlnaFdhdGVyTWFyayxzZT1tLndyaXRhYmxlSGlnaFdhdGVyTWFyazt0aGlzLmhpZ2hXYXRlck1hcms9dGV8fDA9PT10ZT90ZTpvZSYmKHNlfHwwPT09c2UpP3NlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5m'@;
put 'bG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09bS5kZWNvZGVTdHJp'@;
put 'bmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1tLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oSmUpeyFmdW5j'@;
put 'dGlvbiB6ZShtLEEpe3ZhciBvZT1tLl93cml0YWJsZVN0YXRlLHRlPW9lLnN5bmMsc2U9b2Uud3JpdGVjYjtpZihmdW5jdGlvbiBTZShtKXttLndyaXRpbmc9ITEsbS53cml0ZWNiPW51bGwsbS5sZW5ndGgtPW0ud3JpdGVsZW4sbS53cml0ZWxlbj0wfShvZSksQSkhZnVuY3Rpb24gVGUobSxB'@;
put 'LG9lLHRlLHNlKXstLUEucGVuZGluZ2NiLG9lPyh5Lm5leHRUaWNrKHNlLHRlKSx5Lm5leHRUaWNrKEgsbSxBKSxtLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxtLmVtaXQoImVycm9yIix0ZSkpOihzZSh0ZSksbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5lbWl0'@;
put 'KCJlcnJvciIsdGUpLEgobSxBKSl9KG0sb2UsdGUsQSxzZSk7ZWxzZXt2YXIgd2U9eChvZSk7IXdlJiYhb2UuY29ya2VkJiYhb2UuYnVmZmVyUHJvY2Vzc2luZyYmb2UuYnVmZmVyZWRSZXF1ZXN0JiZiKG0sb2UpLHRlP3coVixtLG9lLHdlLHNlKTpWKG0sb2Usd2Usc2UpfX0oQSxKZSl9LHRo'@;
put 'aXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmJ1ZmZlcmVkUmVxdWVz'@;
put 'dENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEIodGhpcyl9ZnVuY3Rpb24gSihtKXtpZihQPVB8fF8oNDM5MCksIShlZS5jYWxsKEosdGhpcyl8fHRoaXMgaW5zdGFuY2VvZiBQKSlyZXR1cm4gbmV3IEoobSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgWChtLHRoaXMpLHRo'@;
put 'aXMud3JpdGFibGU9ITAsbSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBtLndyaXRlJiYodGhpcy5fd3JpdGU9bS53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIG0ud3JpdGV2JiYodGhpcy5fd3JpdGV2PW0ud3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgbS5kZXN0cm95JiYodGhpcy5fZGVzdHJv'@;
put 'eT1tLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBtLmZpbmFsJiYodGhpcy5fZmluYWw9bS5maW5hbCkpLHouY2FsbCh0aGlzKX1mdW5jdGlvbiBfZShtLEEsb2UsdGUsc2Usd2UsVWUpe0Eud3JpdGVsZW49dGUsQS53cml0ZWNiPVVlLEEud3JpdGluZz0hMCxBLnN5bmM9ITAsb2U/bS5f'@;
put 'd3JpdGV2KHNlLEEub253cml0ZSk6bS5fd3JpdGUoc2Usd2UsQS5vbndyaXRlKSxBLnN5bmM9ITF9ZnVuY3Rpb24gVihtLEEsb2UsdGUpe29lfHxmdW5jdGlvbiBwKG0sQSl7MD09PUEubGVuZ3RoJiZBLm5lZWREcmFpbiYmKEEubmVlZERyYWluPSExLG0uZW1pdCgiZHJhaW4iKSl9KG0sQSks'@;
put 'QS5wZW5kaW5nY2ItLSx0ZSgpLEgobSxBKX1mdW5jdGlvbiBiKG0sQSl7QS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciBvZT1BLmJ1ZmZlcmVkUmVxdWVzdDtpZihtLl93cml0ZXYmJm9lJiZvZS5uZXh0KXt2YXIgc2U9bmV3IEFycmF5KEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLHdlPUEuY29y'@;
put 'a2VkUmVxdWVzdHNGcmVlO3dlLmVudHJ5PW9lO2Zvcih2YXIgVWU9MCxKZT0hMDtvZTspc2VbVWVdPW9lLG9lLmlzQnVmfHwoSmU9ITEpLG9lPW9lLm5leHQsVWUrPTE7c2UuYWxsQnVmZmVycz1KZSxfZShtLEEsITAsQS5sZW5ndGgsc2UsIiIsd2UuZmluaXNoKSxBLnBlbmRpbmdjYisrLEEu'@;
put 'bGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHdlLm5leHQ/KEEuY29ya2VkUmVxdWVzdHNGcmVlPXdlLm5leHQsd2UubmV4dD1udWxsKTpBLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgQihBKSxBLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO29lOyl7dmFyIGF0PW9lLmNodW5rO2lm'@;
put 'KF9lKG0sQSwhMSxBLm9iamVjdE1vZGU/MTphdC5sZW5ndGgsYXQsb2UuZW5jb2Rpbmcsb2UuY2FsbGJhY2spLG9lPW9lLm5leHQsQS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLEEud3JpdGluZylicmVha31udWxsPT09b2UmJihBLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9QS5idWZmZXJl'@;
put 'ZFJlcXVlc3Q9b2UsQS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHgobSl7cmV0dXJuIG0uZW5kaW5nJiYwPT09bS5sZW5ndGgmJm51bGw9PT1tLmJ1ZmZlcmVkUmVxdWVzdCYmIW0uZmluaXNoZWQmJiFtLndyaXRpbmd9ZnVuY3Rpb24gQyhtLEEpe20uX2ZpbmFsKGZ1bmN0aW9uKG9l'@;
put 'KXtBLnBlbmRpbmdjYi0tLG9lJiZtLmVtaXQoImVycm9yIixvZSksQS5wcmVmaW5pc2hlZD0hMCxtLmVtaXQoInByZWZpbmlzaCIpLEgobSxBKX0pfWZ1bmN0aW9uIEgobSxBKXt2YXIgb2U9eChBKTtyZXR1cm4gb2UmJihmdW5jdGlvbiBUKG0sQSl7IUEucHJlZmluaXNoZWQmJiFBLmZpbmFs'@;
put 'Q2FsbGVkJiYoImZ1bmN0aW9uIj09dHlwZW9mIG0uX2ZpbmFsPyhBLnBlbmRpbmdjYisrLEEuZmluYWxDYWxsZWQ9ITAseS5uZXh0VGljayhDLG0sQSkpOihBLnByZWZpbmlzaGVkPSEwLG0uZW1pdCgicHJlZmluaXNoIikpKX0obSxBKSwwPT09QS5wZW5kaW5nY2ImJihBLmZpbmlzaGVkPSEw'@;
put 'LG0uZW1pdCgiZmluaXNoIikpKSxvZX1GLmluaGVyaXRzKEoseiksWC5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBBPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LG9lPVtdO0E7KW9lLnB1c2goQSksQT1BLm5leHQ7cmV0dXJuIG9lfSxmdW5jdGlvbigpe3RyeXtPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoWC5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpPLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4i'@;
put 'LCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhlZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0lu'@;
put 'c3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKG0pe3JldHVybiEhZWUuY2FsbCh0aGlzLG0pfHx0aGlzPT09SiYmbSYmbS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFh9fSkpOmVlPWZ1bmN0aW9uKG0pe3JldHVybiBt'@;
put 'IGluc3RhbmNlb2YgdGhpc30sSi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigpe3RoaXMuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpKX0sSi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24obSxBLG9lKXt2YXIgdGU9dGhpcy5fd3JpdGFibGVTdGF0'@;
put 'ZSxzZT0hMSx3ZT0hdGUub2JqZWN0TW9kZSYmZnVuY3Rpb24gVShtKXtyZXR1cm4gTi5pc0J1ZmZlcihtKXx8bSBpbnN0YW5jZW9mIEx9KG0pO3JldHVybiB3ZSYmIU4uaXNCdWZmZXIobSkmJihtPWZ1bmN0aW9uIEsobSl7cmV0dXJuIE4uZnJvbShtKX0obSkpLCJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBBJiYob2U9QSxBPW51bGwpLHdlP0E9ImJ1ZmZlciI6QXx8KEE9dGUuZGVmYXVsdEVuY29kaW5nKSwiZnVuY3Rpb24iIT10eXBlb2Ygb2UmJihvZT1ZKSx0ZS5lbmRlZD9mdW5jdGlvbiByZShtLEEpe3ZhciBvZT1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVuZCIpO20uZW1pdCgiZXJyb3Ii'@;
put 'LG9lKSx5Lm5leHRUaWNrKEEsb2UpfSh0aGlzLG9lKTood2V8fGZ1bmN0aW9uIGllKG0sQSxvZSx0ZSl7dmFyIHNlPSEwLHdlPSExO3JldHVybiBudWxsPT09b2U/d2U9bmV3IFR5cGVFcnJvcigiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iKToic3RyaW5nIiE9dHlwZW9m'@;
put 'IG9lJiZ2b2lkIDAhPT1vZSYmIUEub2JqZWN0TW9kZSYmKHdlPW5ldyBUeXBlRXJyb3IoIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmsiKSksd2UmJihtLmVtaXQoImVycm9yIix3ZSkseS5uZXh0VGljayh0ZSx3ZSksc2U9ITEpLHNlfSh0aGlzLHRlLG0sb2UpKSYmKHRlLnBlbmRp'@;
put 'bmdjYisrLHNlPWZ1bmN0aW9uIG1lKG0sQSxvZSx0ZSxzZSx3ZSl7aWYoIW9lKXt2YXIgVWU9ZnVuY3Rpb24gbGUobSxBLG9lKXtyZXR1cm4hbS5vYmplY3RNb2RlJiYhMSE9PW0uZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiBBJiYoQT1OLmZyb20oQSxvZSkpLEF9KEEsdGUsc2Up'@;
put 'O3RlIT09VWUmJihvZT0hMCxzZT0iYnVmZmVyIix0ZT1VZSl9dmFyIEplPUEub2JqZWN0TW9kZT8xOnRlLmxlbmd0aDtBLmxlbmd0aCs9SmU7dmFyIGF0PUEubGVuZ3RoPEEuaGlnaFdhdGVyTWFyaztpZihhdHx8KEEubmVlZERyYWluPSEwKSxBLndyaXRpbmd8fEEuY29ya2VkKXt2YXIgTWU9'@;
put 'QS5sYXN0QnVmZmVyZWRSZXF1ZXN0O0EubGFzdEJ1ZmZlcmVkUmVxdWVzdD17Y2h1bms6dGUsZW5jb2Rpbmc6c2UsaXNCdWY6b2UsY2FsbGJhY2s6d2UsbmV4dDpudWxsfSxNZT9NZS5uZXh0PUEubGFzdEJ1ZmZlcmVkUmVxdWVzdDpBLmJ1ZmZlcmVkUmVxdWVzdD1BLmxhc3RCdWZmZXJlZFJl'@;
put 'cXVlc3QsQS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIF9lKG0sQSwhMSxKZSx0ZSxzZSx3ZSk7cmV0dXJuIGF0fSh0aGlzLHRlLHdlLG0sQSxvZSkpLHNlfSxKLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sSi5wcm90b3R5cGUu'@;
put 'dW5jb3JrPWZ1bmN0aW9uKCl7dmFyIG09dGhpcy5fd3JpdGFibGVTdGF0ZTttLmNvcmtlZCYmKG0uY29ya2VkLS0sIW0ud3JpdGluZyYmIW0uY29ya2VkJiYhbS5idWZmZXJQcm9jZXNzaW5nJiZtLmJ1ZmZlcmVkUmVxdWVzdCYmYih0aGlzLG0pKX0sSi5wcm90b3R5cGUuc2V0RGVmYXVsdEVu'@;
put 'Y29kaW5nPWZ1bmN0aW9uKEEpe2lmKCJzdHJpbmciPT10eXBlb2YgQSYmKEE9QS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRleE9mKChB'@;
put 'KyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitBKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9QSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSi5wcm90b3R5cGUsIndyaXRhYmxlSGln'@;
put 'aFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxKLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24obSxBLG9lKXtvZShuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIp'@;
put 'KX0sSi5wcm90b3R5cGUuX3dyaXRldj1udWxsLEoucHJvdG90eXBlLmVuZD1mdW5jdGlvbihtLEEsb2Upe3ZhciB0ZT10aGlzLl93cml0YWJsZVN0YXRlOyJmdW5jdGlvbiI9PXR5cGVvZiBtPyhvZT1tLG09bnVsbCxBPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBBJiYob2U9QSxBPW51bGwp'@;
put 'LG51bGwhPW0mJnRoaXMud3JpdGUobSxBKSx0ZS5jb3JrZWQmJih0ZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSx0ZS5lbmRpbmd8fGZ1bmN0aW9uIGoobSxBLG9lKXtBLmVuZGluZz0hMCxIKG0sQSksb2UmJihBLmZpbmlzaGVkP3kubmV4dFRpY2sob2UpOm0ub25jZSgiZmluaXNoIixvZSkp'@;
put 'LEEuZW5kZWQ9ITAsbS53cml0YWJsZT0hMX0odGhpcyx0ZSxvZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKLnByb3RvdHlwZSwiZGVzdHJveWVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJv'@;
put 'eWVkfSxzZXQ6ZnVuY3Rpb24obSl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPW0pfX0pLEoucHJvdG90eXBlLmRlc3Ryb3k9Vy5kZXN0cm95LEoucHJvdG90eXBlLl91bmRlc3Ryb3k9Vy51bmRlc3Ryb3ksSi5wcm90b3R5cGUuX2Rlc3Ryb3k9'@;
put 'ZnVuY3Rpb24obSxBKXt0aGlzLmVuZCgpLEEobSl9fSwyMjY3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciB5PV8oMTU3MikuQnVmZmVyLGc9Xyg2NDE5KTtmdW5jdGlvbiBCKHcsUCxGKXt3LmNvcHkoUCxGKX11ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdygpeyhmdW5jdGlv'@;
put 'biBJKHcsUCl7aWYoISh3IGluc3RhbmNlb2YgUCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLHcpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIHcucHJvdG90eXBlLnB1c2g9'@;
put 'ZnVuY3Rpb24oRil7dmFyIE89e2RhdGE6RixuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Tzp0aGlzLmhlYWQ9Tyx0aGlzLnRhaWw9TywrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKEYpe3ZhciBPPXtkYXRhOkYsbmV4dDp0aGlzLmhl'@;
put 'YWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1PKSx0aGlzLmhlYWQ9TywrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIEY9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/'@;
put 'dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxGfX0sdy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgp'@;
put 'cmV0dXJuIiI7Zm9yKHZhciBPPXRoaXMuaGVhZCx6PSIiK08uZGF0YTtPPU8ubmV4dDspeis9RitPLmRhdGE7cmV0dXJuIHp9LHcucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIHkuYWxsb2MoMCk7Zm9yKHZhciBPPXkuYWxsb2NVbnNhZmUo'@;
put 'Rj4+PjApLHo9dGhpcy5oZWFkLE49MDt6OylCKHouZGF0YSxPLE4pLE4rPXouZGF0YS5sZW5ndGgsej16Lm5leHQ7cmV0dXJuIE99LHd9KCksZyYmZy5pbnNwZWN0JiZnLmluc3BlY3QuY3VzdG9tJiYodWUuZXhwb3J0cy5wcm90b3R5cGVbZy5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rpb24oKXt2'@;
put 'YXIgdz1nLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK3d9KX0sNTk5NzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDgyMTIpO2Z1bmN0aW9uIEIodyxQKXt3LmVtaXQoImVycm9yIixQKX11ZS5leHBvcnRzPXtk'@;
put 'ZXN0cm95OmZ1bmN0aW9uIHkodyxQKXt2YXIgRj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KFA/UCh3KTp3JiYodGhpcy5fd3Jp'@;
put 'dGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soQix0aGlzLHcpKTpJLm5leHRUaWNrKEIsdGhpcyx3KSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFk'@;
put 'YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KHd8fG51bGwsZnVuY3Rpb24oTil7IVAmJk4/Ri5fd3JpdGFibGVTdGF0ZT9GLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRl'@;
put 'ZHx8KEYuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soQixGLE4pKTpJLm5leHRUaWNrKEIsRixOKTpQJiZQKE4pfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiBnKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVk'@;
put 'PSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRh'@;
put 'YmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVT'@;
put 'dGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfX19LDk4MTk6KHVlLHEsXyk9Pnt1ZS5leHBvcnRzPV8oNzE4NykuRXZlbnRFbWl0dGVyfSwxNTcyOih1ZSxxLF8pPT57dmFyIEk9Xyg4NzY0KSx5PUkuQnVmZmVyO2Z1bmN0aW9uIGcodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19ZnVuY3Rpb24g'@;
put 'Qih3LFAsRil7cmV0dXJuIHkodyxQLEYpfXkuZnJvbSYmeS5hbGxvYyYmeS5hbGxvY1Vuc2FmZSYmeS5hbGxvY1Vuc2FmZVNsb3c/dWUuZXhwb3J0cz1JOihnKEkscSkscS5CdWZmZXI9QiksZyh5LEIpLEIuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciI9PXR5cGVvZiB3KXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHkodyxQLEYpfSxCLmFsbG9jPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBP'@;
put 'PXkodyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP08uZmlsbChQLEYpOk8uZmlsbChQKTpPLmZpbGwoMCksT30sQi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBh'@;
put 'IG51bWJlciIpO3JldHVybiB5KHcpfSxCLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZmZXIodyl9fSwzODcyOih1ZSxxLF8pPT57'@;
put 'KHE9dWUuZXhwb3J0cz1fKDQ5NjApKS5TdHJlYW09cSxxLlJlYWRhYmxlPXEscS5Xcml0YWJsZT1fKDIwMTApLHEuRHVwbGV4PV8oNDM5MCkscS5UcmFuc2Zvcm09XygzOTEyKSxxLlBhc3NUaHJvdWdoPV8oMTI5NCl9LDIyMjE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzMzY0'@;
put 'KS5CdWZmZXIseT1JLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKEope3N3aXRjaCgoSj0iIitKKSYmSi50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6'@;
put 'Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIHcoSil7dmFyIHJlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIEIoSil7dmFyIHJlPWZ1bmN0aW9uIGcoSil7aWYoIUopcmV0dXJuInV0ZjgiO2Zv'@;
put 'cih2YXIgcmU7Oylzd2l0Y2goSil7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEi'@;
put 'O2Nhc2UiYmFzZTY0IjpjYXNlImFzY2lpIjpjYXNlImhleCI6cmV0dXJuIEo7ZGVmYXVsdDppZihyZSlyZXR1cm47Sj0oIiIrSikudG9Mb3dlckNhc2UoKSxyZT0hMH19KEopO2lmKCJzdHJpbmciIT10eXBlb2YgcmUmJihJLmlzRW5jb2Rpbmc9PT15fHwheShKKSkpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJVbmtub3duIGVuY29kaW5nOiAiK0opO3JldHVybiByZXx8Sn0oSiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9Syx0aGlzLmVuZD1VLHJlPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXoscmU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0'@;
put 'PVcsdGhpcy5lbmQ9WSxyZT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9WCx2b2lkKHRoaXMuZW5kPWVlKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPUkuYWxsb2NVbnNhZmUocmUpfWZ1bmN0aW9uIFAoSil7cmV0dXJuIEo8PTEyNz8w'@;
put 'Oko+PjU9PTY/MjpKPj40PT0xND8zOko+PjM9PTMwPzQ6Sj4+Nj09Mj8tMTotMn1mdW5jdGlvbiB6KEope3ZhciByZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLGllPWZ1bmN0aW9uIE8oSixyZSxpZSl7aWYoMTI4IT0oMTkyJnJlWzBdKSlyZXR1cm4gSi5sYXN0TmVlZD0wLCJcdWZm'@;
put 'ZmQiO2lmKEoubGFzdE5lZWQ+MSYmcmUubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZyZVsxXSkpcmV0dXJuIEoubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjImJnJlLmxlbmd0aD4yJiYxMjghPSgxOTImcmVbMl0pKXJldHVybiBKLmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlz'@;
put 'LEopO3JldHVybiB2b2lkIDAhPT1pZT9pZTp0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aD8oSi5jb3B5KHRoaXMubGFzdENoYXIscmUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihKLmNvcHkodGhpcy5sYXN0'@;
put 'Q2hhcixyZSwwLEoubGVuZ3RoKSx2b2lkKHRoaXMubGFzdE5lZWQtPUoubGVuZ3RoKSl9ZnVuY3Rpb24gSyhKLHJlKXtpZigoSi5sZW5ndGgtcmUpJTI9PTApe3ZhciBpZT1KLnRvU3RyaW5nKCJ1dGYxNmxlIixyZSk7aWYoaWUpe3ZhciBsZT1pZS5jaGFyQ29kZUF0KGllLmxlbmd0aC0xKTtp'@;
put 'ZihsZT49NTUyOTYmJmxlPD01NjMxOSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSxpZS5zbGljZSgwLC0xKX1yZXR1cm4gaWV9cmV0dXJuIHRoaXMubGFz'@;
put 'dE5lZWQ9MSx0aGlzLmxhc3RUb3RhbD0yLHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXSxKLnRvU3RyaW5nKCJ1dGYxNmxlIixyZSxKLmxlbmd0aC0xKX1mdW5jdGlvbiBVKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3Jl'@;
put 'K3RoaXMubGFzdENoYXIudG9TdHJpbmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6cmV9ZnVuY3Rpb24gVyhKLHJlKXt2YXIgaWU9KEoubGVuZ3RoLXJlKSUzO3JldHVybiAwPT09aWU/Si50b1N0cmluZygiYmFzZTY0IixyZSk6KHRoaXMubGFzdE5lZWQ9My1p'@;
put 'ZSx0aGlzLmxhc3RUb3RhbD0zLDE9PT1pZT90aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0pLEoudG9TdHJpbmcoImJhc2U2NCIscmUsSi5sZW5ndGgtaWUpKX1mdW5jdGlv'@;
put 'biBZKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3JlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOnJlfWZ1bmN0aW9uIFgoSil7cmV0dXJuIEoudG9TdHJpbmcodGhpcy5lbmNvZGlu'@;
put 'Zyl9ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiJ9cS5zPXcsdy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSil7aWYoMD09PUoubGVuZ3RoKXJldHVybiIiO3ZhciByZSxpZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0ocmU9dGhpcy5m'@;
put 'aWxsTGFzdChKKSkpcmV0dXJuIiI7aWU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBpZT0wO3JldHVybiBpZTxKLmxlbmd0aD9yZT9yZSt0aGlzLnRleHQoSixpZSk6dGhpcy50ZXh0KEosaWUpOnJlfHwiIn0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIEwoSil7dmFyIHJl'@;
put 'PUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cmUrIlx1ZmZmZCI6cmV9LHcucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24gTihKLHJlKXt2YXIgaWU9ZnVuY3Rpb24gRihKLHJlLGllKXt2YXIgbGU9cmUubGVuZ3RoLTE7aWYobGU8aWUpcmV0dXJuIDA7'@;
put 'dmFyIG1lPVAocmVbbGVdKTtyZXR1cm4gbWU+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTEpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1lPVAocmVbbGVdKSk+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTIpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1lPVAocmVbbGVdKSk+PTA/KG1l'@;
put 'PjAmJigyPT09bWU/bWU9MDpKLmxhc3ROZWVkPW1lLTMpLG1lKTowfSh0aGlzLEoscmUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBKLnRvU3RyaW5nKCJ1dGY4IixyZSk7dGhpcy5sYXN0VG90YWw9aWU7dmFyIGxlPUoubGVuZ3RoLShpZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gSi5jb3B5'@;
put 'KHRoaXMubGFzdENoYXIsMCxsZSksSi50b1N0cmluZygidXRmOCIscmUsbGUpfSx3LnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihKKXtpZih0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aClyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCww'@;
put 'LHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsSi5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPUoubGVuZ3RofX0sMzM2NDoo'@;
put 'dWUscSxfKT0+e3ZhciBJPV8oODc2NCkseT1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiB5KHcsUCxGKX15LmZyb20mJnkuYWxsb2MmJnkuYWxsb2NVbnNhZmUmJnkuYWxsb2NVbnNhZmVTbG93P3VlLmV4'@;
put 'cG9ydHM9STooZyhJLHEpLHEuQnVmZmVyPUIpLGcoeSxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiB5KHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlv'@;
put 'bih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz15KHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIu'@;
put 'YWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4geSh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sNzI5NToodWUscSxfKT0+e3ZhciBJPV8oODc2NCkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHc9TWF0aC5taW4oZy5sZW5ndGgsQi5sZW5n'@;
put 'dGgpLFA9bmV3IEkodyksRj0wO0Y8dzsrK0YpUFtGXT1nW0ZdXkJbRl07cmV0dXJuIFB9fSw4NzY0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTEwOCk7Y29uc3QgeT1fKDk3NDIpLGc9Xyg2NDUpLEI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO3EuQnVmZmVyPU8scS5TbG93QnVmZmVyPWZ1bmN0aW9uIHJlKCRlKXtyZXR1cm4rJGUhPSRlJiYoJGU9MCksTy5hbGxvYygrJGUpfSxxLklOU1BFQ1RfTUFYX0JZVEVTPTUwO2NvbnN0'@;
put 'IHc9MjE0NzQ4MzY0NztmdW5jdGlvbiBGKCRlKXtpZigkZT53KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrJGUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO2NvbnN0IHR0PW5ldyBVaW50OEFycmF5KCRlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9m'@;
put 'KHR0LE8ucHJvdG90eXBlKSx0dH1mdW5jdGlvbiBPKCRlLHR0LEhlKXtpZigibnVtYmVyIj09dHlwZW9mICRlKXtpZigic3RyaW5nIj09dHlwZW9mIHR0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0'@;
put 'eXBlIG51bWJlcicpO3JldHVybiBLKCRlKX1yZXR1cm4geigkZSx0dCxIZSl9ZnVuY3Rpb24geigkZSx0dCxIZSl7aWYoInN0cmluZyI9PXR5cGVvZiAkZSlyZXR1cm4gZnVuY3Rpb24gVSgkZSx0dCl7aWYoKCJzdHJpbmciIT10eXBlb2YgdHR8fCIiPT09dHQpJiYodHQ9InV0ZjgiKSwhTy5p'@;
put 'c0VuY29kaW5nKHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3R0KTtjb25zdCBIZT0wfGllKCRlLHR0KTtsZXQgdXQ9RihIZSk7Y29uc3QgcXQ9dXQud3JpdGUoJGUsdHQpO3JldHVybiBxdCE9PUhlJiYodXQ9dXQuc2xpY2UoMCxxdCkpLHV0fSgkZSx0dCk7'@;
put 'aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCRlKSlyZXR1cm4gZnVuY3Rpb24gWSgkZSl7aWYodW4oJGUsVWludDhBcnJheSkpe2NvbnN0IHR0PW5ldyBVaW50OEFycmF5KCRlKTtyZXR1cm4gWCh0dC5idWZmZXIsdHQuYnl0ZU9mZnNldCx0dC5ieXRlTGVuZ3RoKX1yZXR1cm4gVygkZSl9KCRlKTtp'@;
put 'ZihudWxsPT0kZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiAkZSk7aWYodW4oJGUs'@;
put 'QXJyYXlCdWZmZXIpfHwkZSYmdW4oJGUuYnVmZmVyLEFycmF5QnVmZmVyKXx8dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1IiYmKHVuKCRlLFNoYXJlZEFycmF5QnVmZmVyKXx8JGUmJnVuKCRlLmJ1ZmZlcixTaGFyZWRBcnJheUJ1ZmZlcikpKXJldHVybiBYKCRlLHR0LEhlKTtpZigibnVt'@;
put 'YmVyIj09dHlwZW9mICRlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidmFsdWUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO2NvbnN0IHV0PSRlLnZhbHVlT2YmJiRlLnZhbHVlT2YoKTtpZihudWxsIT11dCYmdXQhPT0kZSly'@;
put 'ZXR1cm4gTy5mcm9tKHV0LHR0LEhlKTtjb25zdCBxdD1mdW5jdGlvbiBlZSgkZSl7aWYoTy5pc0J1ZmZlcigkZSkpe2NvbnN0IHR0PTB8SigkZS5sZW5ndGgpLEhlPUYodHQpO3JldHVybiAwPT09SGUubGVuZ3RofHwkZS5jb3B5KEhlLDAsMCx0dCksSGV9cmV0dXJuIHZvaWQgMCE9PSRlLmxl'@;
put 'bmd0aD8ibnVtYmVyIiE9dHlwZW9mICRlLmxlbmd0aHx8eXQoJGUubGVuZ3RoKT9GKDApOlcoJGUpOiJCdWZmZXIiPT09JGUudHlwZSYmQXJyYXkuaXNBcnJheSgkZS5kYXRhKT9XKCRlLmRhdGEpOnZvaWQgMH0oJGUpO2lmKHF0KXJldHVybiBxdDtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVs'@;
put 'bCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgJGVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gTy5mcm9tKCRlW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLHR0LEhlKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBi'@;
put 'ZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiAkZSl9ZnVuY3Rpb24gTigkZSl7aWYoIm51bWJlciIhPXR5cGVvZiAkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIg'@;
put 'YXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKCRlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyskZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gSygkZSl7cmV0dXJuIE4oJGUpLEYoJGU8MD8wOjB8SigkZSkpfWZ1bmN0'@;
put 'aW9uIFcoJGUpe2NvbnN0IHR0PSRlLmxlbmd0aDwwPzA6MHxKKCRlLmxlbmd0aCksSGU9Rih0dCk7Zm9yKGxldCB1dD0wO3V0PHR0O3V0Kz0xKUhlW3V0XT0yNTUmJGVbdXRdO3JldHVybiBIZX1mdW5jdGlvbiBYKCRlLHR0LEhlKXtpZih0dDwwfHwkZS5ieXRlTGVuZ3RoPHR0KXRocm93IG5l'@;
put 'dyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZigkZS5ieXRlTGVuZ3RoPHR0KyhIZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpO2xldCB1dDtyZXR1cm4gdXQ9dm9pZCAw'@;
put 'PT09dHQmJnZvaWQgMD09PUhlP25ldyBVaW50OEFycmF5KCRlKTp2b2lkIDA9PT1IZT9uZXcgVWludDhBcnJheSgkZSx0dCk6bmV3IFVpbnQ4QXJyYXkoJGUsdHQsSGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZih1dCxPLnByb3RvdHlwZSksdXR9ZnVuY3Rpb24gSigkZSl7aWYoJGU+PXcpdGhy'@;
put 'b3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK3cudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHwkZX1mdW5jdGlvbiBpZSgkZSx0dCl7aWYoTy5pc0J1ZmZlcigkZSkpcmV0dXJuICRlLmxlbmd0'@;
put 'aDtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoJGUpfHx1bigkZSxBcnJheUJ1ZmZlcikpcmV0dXJuICRlLmJ5dGVMZW5ndGg7aWYoInN0cmluZyIhPXR5cGVvZiAkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1'@;
put 'ZmZlciwgb3IgQXJyYXlCdWZmZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgJGUpO2NvbnN0IEhlPSRlLmxlbmd0aCx1dD1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCF1dCYmMD09PUhlKXJldHVybiAwO2xldCBxdD0hMTtmb3IoOzspc3dpdGNoKHR0KXtjYXNl'@;
put 'ImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBIZTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBrZSgkZSkubGVuZ3RoO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gMipIZTtjYXNlImhleCI6cmV0'@;
put 'dXJuIEhlPj4+MTtjYXNlImJhc2U2NCI6cmV0dXJuIG50KCRlKS5sZW5ndGg7ZGVmYXVsdDppZihxdClyZXR1cm4gdXQ/LTE6a2UoJGUpLmxlbmd0aDt0dD0oIiIrdHQpLnRvTG93ZXJDYXNlKCkscXQ9ITB9fWZ1bmN0aW9uIGxlKCRlLHR0LEhlKXtsZXQgdXQ9ITE7aWYoKHZvaWQgMD09PXR0'@;
put 'fHx0dDwwKSYmKHR0PTApLHR0PnRoaXMubGVuZ3RofHwoKHZvaWQgMD09PUhlfHxIZT50aGlzLmxlbmd0aCkmJihIZT10aGlzLmxlbmd0aCksSGU8PTApfHwoSGU+Pj49MCk8PSh0dD4+Pj0wKSlyZXR1cm4iIjtmb3IoJGV8fCgkZT0idXRmOCIpOzspc3dpdGNoKCRlKXtjYXNlImhleCI6cmV0'@;
put 'dXJuIG0odGhpcyx0dCxIZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gQyh0aGlzLHR0LEhlKTtjYXNlImFzY2lpIjpyZXR1cm4gaih0aGlzLHR0LEhlKTtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiBFKHRoaXMsdHQsSGUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4geCh0'@;
put 'aGlzLHR0LEhlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIEEodGhpcyx0dCxIZSk7ZGVmYXVsdDppZih1dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiKyRlKTskZT0oJGUrIiIpLnRvTG93ZXJDYXNl'@;
put 'KCksdXQ9ITB9fWZ1bmN0aW9uIG1lKCRlLHR0LEhlKXtjb25zdCB1dD0kZVt0dF07JGVbdHRdPSRlW0hlXSwkZVtIZV09dXR9ZnVuY3Rpb24gX2UoJGUsdHQsSGUsdXQscXQpe2lmKDA9PT0kZS5sZW5ndGgpcmV0dXJuLTE7aWYoInN0cmluZyI9PXR5cGVvZiBIZT8odXQ9SGUsSGU9MCk6SGU+'@;
put 'MjE0NzQ4MzY0Nz9IZT0yMTQ3NDgzNjQ3OkhlPC0yMTQ3NDgzNjQ4JiYoSGU9LTIxNDc0ODM2NDgpLHl0KEhlPStIZSkmJihIZT1xdD8wOiRlLmxlbmd0aC0xKSxIZTwwJiYoSGU9JGUubGVuZ3RoK0hlKSxIZT49JGUubGVuZ3RoKXtpZihxdClyZXR1cm4tMTtIZT0kZS5sZW5ndGgtMX1lbHNl'@;
put 'IGlmKEhlPDApe2lmKCFxdClyZXR1cm4tMTtIZT0wfWlmKCJzdHJpbmciPT10eXBlb2YgdHQmJih0dD1PLmZyb20odHQsdXQpKSxPLmlzQnVmZmVyKHR0KSlyZXR1cm4gMD09PXR0Lmxlbmd0aD8tMTpUZSgkZSx0dCxIZSx1dCxxdCk7aWYoIm51bWJlciI9PXR5cGVvZiB0dClyZXR1cm4gdHQm'@;
put 'PTI1NSwiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9xdD9VaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoJGUsdHQsSGUpOlVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoJGUsdHQsSGUpOlRlKCRlLFt0dF0sSGUsdXQs'@;
put 'cXQpO3Rocm93IG5ldyBUeXBlRXJyb3IoInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlciIpfWZ1bmN0aW9uIFRlKCRlLHR0LEhlLHV0LHF0KXtsZXQgc24sUnQ9MSxQdD0kZS5sZW5ndGgsc2k9dHQubGVuZ3RoO2lmKHZvaWQgMCE9PXV0JiYoInVjczIiPT09KHV0PVN0cmlu'@;
put 'Zyh1dCkudG9Mb3dlckNhc2UoKSl8fCJ1Y3MtMiI9PT11dHx8InV0ZjE2bGUiPT09dXR8fCJ1dGYtMTZsZSI9PT11dCkpe2lmKCRlLmxlbmd0aDwyfHx0dC5sZW5ndGg8MilyZXR1cm4tMTtSdD0yLFB0Lz0yLHNpLz0yLEhlLz0yfWZ1bmN0aW9uIFF0KFJpLGhuKXtyZXR1cm4gMT09PVJ0P1Jp'@;
put 'W2huXTpSaS5yZWFkVUludDE2QkUoaG4qUnQpfWlmKHF0KXtsZXQgUmk9LTE7Zm9yKHNuPUhlO3NuPFB0O3NuKyspaWYoUXQoJGUsc24pPT09UXQodHQsLTE9PT1SaT8wOnNuLVJpKSl7aWYoLTE9PT1SaSYmKFJpPXNuKSxzbi1SaSsxPT09c2kpcmV0dXJuIFJpKlJ0fWVsc2UtMSE9PVJpJiYo'@;
put 'c24tPXNuLVJpKSxSaT0tMX1lbHNlIGZvcihIZStzaT5QdCYmKEhlPVB0LXNpKSxzbj1IZTtzbj49MDtzbi0tKXtsZXQgUmk9ITA7Zm9yKGxldCBobj0wO2huPHNpO2huKyspaWYoUXQoJGUsc24raG4pIT09UXQodHQsaG4pKXtSaT0hMTticmVha31pZihSaSlyZXR1cm4gc259cmV0dXJuLTF9'@;
put 'ZnVuY3Rpb24gU2UoJGUsdHQsSGUsdXQpe0hlPU51bWJlcihIZSl8fDA7Y29uc3QgcXQ9JGUubGVuZ3RoLUhlO3V0Pyh1dD1OdW1iZXIodXQpKT5xdCYmKHV0PXF0KTp1dD1xdDtjb25zdCBSdD10dC5sZW5ndGg7bGV0IFB0O2Zvcih1dD5SdC8yJiYodXQ9UnQvMiksUHQ9MDtQdDx1dDsrK1B0'@;
put 'KXtjb25zdCBzaT1wYXJzZUludCh0dC5zdWJzdHIoMipQdCwyKSwxNik7aWYoeXQoc2kpKXJldHVybiBQdDskZVtIZStQdF09c2l9cmV0dXJuIFB0fWZ1bmN0aW9uIHplKCRlLHR0LEhlLHV0KXtyZXR1cm4gUWUoa2UodHQsJGUubGVuZ3RoLUhlKSwkZSxIZSx1dCl9ZnVuY3Rpb24gVigkZSx0'@;
put 'dCxIZSx1dCl7cmV0dXJuIFFlKGZ1bmN0aW9uIEFlKCRlKXtjb25zdCB0dD1bXTtmb3IobGV0IEhlPTA7SGU8JGUubGVuZ3RoOysrSGUpdHQucHVzaCgyNTUmJGUuY2hhckNvZGVBdChIZSkpO3JldHVybiB0dH0odHQpLCRlLEhlLHV0KX1mdW5jdGlvbiBwKCRlLHR0LEhlLHV0KXtyZXR1cm4g'@;
put 'UWUobnQodHQpLCRlLEhlLHV0KX1mdW5jdGlvbiBiKCRlLHR0LEhlLHV0KXtyZXR1cm4gUWUoZnVuY3Rpb24gX3QoJGUsdHQpe2xldCBIZSx1dCxxdDtjb25zdCBSdD1bXTtmb3IobGV0IFB0PTA7UHQ8JGUubGVuZ3RoJiYhKCh0dC09Mik8MCk7KytQdClIZT0kZS5jaGFyQ29kZUF0KFB0KSx1'@;
put 'dD1IZT4+OCxxdD1IZSUyNTYsUnQucHVzaChxdCksUnQucHVzaCh1dCk7cmV0dXJuIFJ0fSh0dCwkZS5sZW5ndGgtSGUpLCRlLEhlLHV0KX1mdW5jdGlvbiB4KCRlLHR0LEhlKXtyZXR1cm4geS5mcm9tQnl0ZUFycmF5KDA9PT10dCYmSGU9PT0kZS5sZW5ndGg/JGU6JGUuc2xpY2UodHQsSGUp'@;
put 'KX1mdW5jdGlvbiBDKCRlLHR0LEhlKXtIZT1NYXRoLm1pbigkZS5sZW5ndGgsSGUpO2NvbnN0IHV0PVtdO2xldCBxdD10dDtmb3IoO3F0PEhlOyl7Y29uc3QgUnQ9JGVbcXRdO2xldCBQdD1udWxsLHNpPVJ0PjIzOT80OlJ0PjIyMz8zOlJ0PjE5MT8yOjE7aWYocXQrc2k8PUhlKXtsZXQgUXQs'@;
put 'c24sUmksaG47c3dpdGNoKHNpKXtjYXNlIDE6UnQ8MTI4JiYoUHQ9UnQpO2JyZWFrO2Nhc2UgMjpRdD0kZVtxdCsxXSwxMjg9PSgxOTImUXQpJiYoaG49KDMxJlJ0KTw8Nnw2MyZRdCxobj4xMjcmJihQdD1obikpO2JyZWFrO2Nhc2UgMzpRdD0kZVtxdCsxXSxzbj0kZVtxdCsyXSwxMjg9PSgx'@;
put 'OTImUXQpJiYxMjg9PSgxOTImc24pJiYoaG49KDE1JlJ0KTw8MTJ8KDYzJlF0KTw8Nnw2MyZzbixobj4yMDQ3JiYoaG48NTUyOTZ8fGhuPjU3MzQzKSYmKFB0PWhuKSk7YnJlYWs7Y2FzZSA0OlF0PSRlW3F0KzFdLHNuPSRlW3F0KzJdLFJpPSRlW3F0KzNdLDEyOD09KDE5MiZRdCkmJjEyOD09'@;
put 'KDE5MiZzbikmJjEyOD09KDE5MiZSaSkmJihobj0oMTUmUnQpPDwxOHwoNjMmUXQpPDwxMnwoNjMmc24pPDw2fDYzJlJpLGhuPjY1NTM1JiZobjwxMTE0MTEyJiYoUHQ9aG4pKX19bnVsbD09PVB0PyhQdD02NTUzMyxzaT0xKTpQdD42NTUzNSYmKFB0LT02NTUzNix1dC5wdXNoKFB0Pj4+MTAm'@;
put 'MTAyM3w1NTI5NiksUHQ9NTYzMjB8MTAyMyZQdCksdXQucHVzaChQdCkscXQrPXNpfXJldHVybiBmdW5jdGlvbiBIKCRlKXtjb25zdCB0dD0kZS5sZW5ndGg7aWYodHQ8PVQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCRlKTtsZXQgSGU9IiIsdXQ9MDtmb3IoO3V0'@;
put 'PHR0OylIZSs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsJGUuc2xpY2UodXQsdXQrPVQpKTtyZXR1cm4gSGV9KHV0KX1xLmtNYXhMZW5ndGg9dywhKE8uVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiBQKCl7dHJ5e2NvbnN0ICRlPW5ldyBVaW50OEFycmF5KDEpLHR0PXtm'@;
put 'b286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHR0LFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoJGUsdHQpLDQyPT09JGUuZm9vKCl9Y2F0Y2h7cmV0dXJuITF9fSgpKSYmdHlwZW9mIEk8InUiJiYiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgSS5lcnJvciYmSS5lcnJvcigiVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5IGBidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1'@;
put 'cHBvcnQuIiksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJwYXJlbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKE8uaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwib2Zmc2V0'@;
put 'Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihPLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSksTy5wb29sU2l6ZT04MTkyLE8uZnJvbT1mdW5jdGlvbigkZSx0dCxIZSl7cmV0dXJuIHooJGUsdHQsSGUpfSxPYmplY3Quc2V0UHJvdG90eXBlT2YoTy5w'@;
put 'cm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihPLFVpbnQ4QXJyYXkpLE8uYWxsb2M9ZnVuY3Rpb24oJGUsdHQsSGUpe3JldHVybiBmdW5jdGlvbiBMKCRlLHR0LEhlKXtyZXR1cm4gTigkZSksJGU8PTA/RigkZSk6dm9pZCAwIT09dHQ/InN0cmlu'@;
put 'ZyI9PXR5cGVvZiBIZT9GKCRlKS5maWxsKHR0LEhlKTpGKCRlKS5maWxsKHR0KTpGKCRlKX0oJGUsdHQsSGUpfSxPLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKCRlKXtyZXR1cm4gSygkZSl9LE8uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKCRlKXtyZXR1cm4gSygkZSl9LE8uaXNCdWZmZXI9ZnVu'@;
put 'Y3Rpb24odHQpe3JldHVybiBudWxsIT10dCYmITA9PT10dC5faXNCdWZmZXImJnR0IT09Ty5wcm90b3R5cGV9LE8uY29tcGFyZT1mdW5jdGlvbih0dCxIZSl7aWYodW4odHQsVWludDhBcnJheSkmJih0dD1PLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSx1bihIZSxVaW50OEFy'@;
put 'cmF5KSYmKEhlPU8uZnJvbShIZSxIZS5vZmZzZXQsSGUuYnl0ZUxlbmd0aCkpLCFPLmlzQnVmZmVyKHR0KXx8IU8uaXNCdWZmZXIoSGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhB'@;
put 'cnJheScpO2lmKHR0PT09SGUpcmV0dXJuIDA7bGV0IHV0PXR0Lmxlbmd0aCxxdD1IZS5sZW5ndGg7Zm9yKGxldCBSdD0wLFB0PU1hdGgubWluKHV0LHF0KTtSdDxQdDsrK1J0KWlmKHR0W1J0XSE9PUhlW1J0XSl7dXQ9dHRbUnRdLHF0PUhlW1J0XTticmVha31yZXR1cm4gdXQ8cXQ/LTE6cXQ8'@;
put 'dXQ/MTowfSxPLmlzRW5jb2Rpbmc9ZnVuY3Rpb24odHQpe3N3aXRjaChTdHJpbmcodHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2Fz'@;
put 'ZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sTy5jb25jYXQ9ZnVuY3Rpb24odHQsSGUpe2lmKCFBcnJheS5pc0FycmF5KHR0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJh'@;
put 'eSBvZiBCdWZmZXJzJyk7aWYoMD09PXR0Lmxlbmd0aClyZXR1cm4gTy5hbGxvYygwKTtsZXQgdXQ7aWYodm9pZCAwPT09SGUpZm9yKEhlPTAsdXQ9MDt1dDx0dC5sZW5ndGg7Kyt1dClIZSs9dHRbdXRdLmxlbmd0aDtjb25zdCBxdD1PLmFsbG9jVW5zYWZlKEhlKTtsZXQgUnQ9MDtmb3IodXQ9'@;
put 'MDt1dDx0dC5sZW5ndGg7Kyt1dCl7bGV0IFB0PXR0W3V0XTtpZih1bihQdCxVaW50OEFycmF5KSlSdCtQdC5sZW5ndGg+cXQubGVuZ3RoPyhPLmlzQnVmZmVyKFB0KXx8KFB0PU8uZnJvbShQdCkpLFB0LmNvcHkocXQsUnQpKTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChxdCxQdCxS'@;
put 'dCk7ZWxzZXtpZighTy5pc0J1ZmZlcihQdCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO1B0LmNvcHkocXQsUnQpfVJ0Kz1QdC5sZW5ndGh9cmV0dXJuIHF0fSxPLmJ5dGVMZW5ndGg9aWUsTy5wcm90b3R5cGUuX2lz'@;
put 'QnVmZmVyPSEwLE8ucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO2lmKHR0JTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKGxldCBIZT0wO0hlPHR0O0hlKz0yKW1l'@;
put 'KHRoaXMsSGUsSGUrMSk7cmV0dXJuIHRoaXN9LE8ucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO2lmKHR0JTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKGxldCBI'@;
put 'ZT0wO0hlPHR0O0hlKz00KW1lKHRoaXMsSGUsSGUrMyksbWUodGhpcyxIZSsxLEhlKzIpO3JldHVybiB0aGlzfSxPLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0'@;
put 'IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2ZvcihsZXQgSGU9MDtIZTx0dDtIZSs9OCltZSh0aGlzLEhlLEhlKzcpLG1lKHRoaXMsSGUrMSxIZSs2KSxtZSh0aGlzLEhlKzIsSGUrNSksbWUodGhpcyxIZSszLEhlKzQpO3JldHVybiB0aGlzfSxPLnByb3RvdHlwZS50b0xvY2FsZVN0cmlu'@;
put 'Zz1PLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2NvbnN0IHR0PXRoaXMubGVuZ3RoO3JldHVybiAwPT09dHQ/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qyh0aGlzLDAsdHQpOmxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sTy5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHR0KXtp'@;
put 'ZighTy5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09dHR8fDA9PT1PLmNvbXBhcmUodGhpcyx0dCl9LE8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtsZXQgdHQ9IiI7Y29uc3QgSGU9cS5JTlNQ'@;
put 'RUNUX01BWF9CWVRFUztyZXR1cm4gdHQ9dGhpcy50b1N0cmluZygiaGV4IiwwLEhlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPkhlJiYodHQrPSIgLi4uICIpLCI8QnVmZmVyICIrdHQrIj4ifSxCJiYoTy5wcm90b3R5cGVbQl09Ty5wcm90b3R5cGUuaW5z'@;
put 'cGVjdCksTy5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbih0dCxIZSx1dCxxdCxSdCl7aWYodW4odHQsVWludDhBcnJheSkmJih0dD1PLmZyb20odHQsdHQub2Zmc2V0LHR0LmJ5dGVMZW5ndGgpKSwhTy5pc0J1ZmZlcih0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFy'@;
put 'Z3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgdHQpO2lmKHZvaWQgMD09PUhlJiYoSGU9MCksdm9pZCAwPT09dXQmJih1dD10dD90dC5sZW5ndGg6MCksdm9pZCAwPT09cXQmJihxdD0wKSx2b2lkIDA9PT1SdCYm'@;
put 'KFJ0PXRoaXMubGVuZ3RoKSxIZTwwfHx1dD50dC5sZW5ndGh8fHF0PDB8fFJ0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihxdD49UnQmJkhlPj11dClyZXR1cm4gMDtpZihxdD49UnQpcmV0dXJuLTE7aWYoSGU+PXV0KXJldHVybiAx'@;
put 'O2lmKHRoaXM9PT10dClyZXR1cm4gMDtsZXQgUHQ9KFJ0Pj4+PTApLShxdD4+Pj0wKSxzaT0odXQ+Pj49MCktKEhlPj4+PTApO2NvbnN0IFF0PU1hdGgubWluKFB0LHNpKSxzbj10aGlzLnNsaWNlKHF0LFJ0KSxSaT10dC5zbGljZShIZSx1dCk7Zm9yKGxldCBobj0wO2huPFF0OysraG4paWYo'@;
put 'c25baG5dIT09UmlbaG5dKXtQdD1zbltobl0sc2k9UmlbaG5dO2JyZWFrfXJldHVybiBQdDxzaT8tMTpzaTxQdD8xOjB9LE8ucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZih0dCxIZSx1dCl9LE8ucHJvdG90eXBlLmluZGV4T2Y9'@;
put 'ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBfZSh0aGlzLHR0LEhlLHV0LCEwKX0sTy5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBfZSh0aGlzLHR0LEhlLHV0LCExKX0sTy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odHQsSGUsdXQscXQpe2lmKHZv'@;
put 'aWQgMD09PUhlKXF0PSJ1dGY4Iix1dD10aGlzLmxlbmd0aCxIZT0wO2Vsc2UgaWYodm9pZCAwPT09dXQmJiJzdHJpbmciPT10eXBlb2YgSGUpcXQ9SGUsdXQ9dGhpcy5sZW5ndGgsSGU9MDtlbHNle2lmKCFpc0Zpbml0ZShIZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5n'@;
put 'LCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0hlPj4+PTAsaXNGaW5pdGUodXQpPyh1dD4+Pj0wLHZvaWQgMD09PXF0JiYocXQ9InV0ZjgiKSk6KHF0PXV0LHV0PXZvaWQgMCl9Y29uc3QgUnQ9dGhpcy5sZW5ndGgtSGU7aWYoKHZvaWQgMD09'@;
put 'PXV0fHx1dD5SdCkmJih1dD1SdCksdHQubGVuZ3RoPjAmJih1dDwwfHxIZTwwKXx8SGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7cXR8fChxdD0idXRmOCIpO2xldCBQdD0hMTtmb3IoOzspc3dpdGNo'@;
put 'KHF0KXtjYXNlImhleCI6cmV0dXJuIFNlKHRoaXMsdHQsSGUsdXQpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHplKHRoaXMsdHQsSGUsdXQpO2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFYodGhpcyx0dCxIZSx1dCk7Y2FzZSJiYXNlNjQiOnJl'@;
put 'dHVybiBwKHRoaXMsdHQsSGUsdXQpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gYih0aGlzLHR0LEhlLHV0KTtkZWZhdWx0OmlmKFB0KXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcXQpO3F0PSgiIitx'@;
put 'dCkudG9Mb3dlckNhc2UoKSxQdD0hMH19LE8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07Y29uc3QgVD00MDk2O2Z1bmN0aW9uIGooJGUsdHQsSGUpe2xl'@;
put 'dCB1dD0iIjtIZT1NYXRoLm1pbigkZS5sZW5ndGgsSGUpO2ZvcihsZXQgcXQ9dHQ7cXQ8SGU7KytxdCl1dCs9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmJGVbcXRdKTtyZXR1cm4gdXR9ZnVuY3Rpb24gRSgkZSx0dCxIZSl7bGV0IHV0PSIiO0hlPU1hdGgubWluKCRlLmxlbmd0aCxIZSk7Zm9y'@;
put 'KGxldCBxdD10dDtxdDxIZTsrK3F0KXV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKCRlW3F0XSk7cmV0dXJuIHV0fWZ1bmN0aW9uIG0oJGUsdHQsSGUpe2NvbnN0IHV0PSRlLmxlbmd0aDsoIXR0fHx0dDwwKSYmKHR0PTApLCghSGV8fEhlPDB8fEhlPnV0KSYmKEhlPXV0KTtsZXQgcXQ9IiI7Zm9y'@;
put 'KGxldCBSdD10dDtSdDxIZTsrK1J0KXF0Kz1NdFskZVtSdF1dO3JldHVybiBxdH1mdW5jdGlvbiBBKCRlLHR0LEhlKXtjb25zdCB1dD0kZS5zbGljZSh0dCxIZSk7bGV0IHF0PSIiO2ZvcihsZXQgUnQ9MDtSdDx1dC5sZW5ndGgtMTtSdCs9MilxdCs9U3RyaW5nLmZyb21DaGFyQ29kZSh1dFtS'@;
put 'dF0rMjU2KnV0W1J0KzFdKTtyZXR1cm4gcXR9ZnVuY3Rpb24gb2UoJGUsdHQsSGUpe2lmKCRlJTEhPTB8fCRlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKCRlK3R0PkhlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9u'@;
put 'ZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gdGUoJGUsdHQsSGUsdXQscXQsUnQpe2lmKCFPLmlzQnVmZmVyKCRlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmZmVyIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYodHQ+cXR8fHR0PFJ0KXRocm93IG5ldyBSYW5n'@;
put 'ZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihIZSt1dD4kZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIHNlKCRlLHR0LEhlLHV0LHF0KXtEZSh0dCx1dCxxdCwkZSxIZSw3KTtsZXQgUnQ9TnVt'@;
put 'YmVyKHR0JkJpZ0ludCg0Mjk0OTY3Mjk1KSk7JGVbSGUrK109UnQsUnQ+Pj04LCRlW0hlKytdPVJ0LFJ0Pj49OCwkZVtIZSsrXT1SdCxSdD4+PTgsJGVbSGUrK109UnQ7bGV0IFB0PU51bWJlcih0dD4+QmlnSW50KDMyKSZCaWdJbnQoNDI5NDk2NzI5NSkpO3JldHVybiAkZVtIZSsrXT1QdCxQ'@;
put 'dD4+PTgsJGVbSGUrK109UHQsUHQ+Pj04LCRlW0hlKytdPVB0LFB0Pj49OCwkZVtIZSsrXT1QdCxIZX1mdW5jdGlvbiB3ZSgkZSx0dCxIZSx1dCxxdCl7RGUodHQsdXQscXQsJGUsSGUsNyk7bGV0IFJ0PU51bWJlcih0dCZCaWdJbnQoNDI5NDk2NzI5NSkpOyRlW0hlKzddPVJ0LFJ0Pj49OCwk'@;
put 'ZVtIZSs2XT1SdCxSdD4+PTgsJGVbSGUrNV09UnQsUnQ+Pj04LCRlW0hlKzRdPVJ0O2xldCBQdD1OdW1iZXIodHQ+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gJGVbSGUrM109UHQsUHQ+Pj04LCRlW0hlKzJdPVB0LFB0Pj49OCwkZVtIZSsxXT1QdCxQdD4+PTgsJGVb'@;
put 'SGVdPVB0LEhlKzh9ZnVuY3Rpb24gVWUoJGUsdHQsSGUsdXQscXQsUnQpe2lmKEhlK3V0PiRlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoSGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24g'@;
put 'SmUoJGUsdHQsSGUsdXQscXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCxxdHx8VWUoJGUsMCxIZSw0KSxnLndyaXRlKCRlLHR0LEhlLHV0LDIzLDQpLEhlKzR9ZnVuY3Rpb24gYXQoJGUsdHQsSGUsdXQscXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCxxdHx8VWUoJGUsMCxIZSw4KSxnLndyaXRl'@;
put 'KCRlLHR0LEhlLHV0LDUyLDgpLEhlKzh9Ty5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24odHQsSGUpe2NvbnN0IHV0PXRoaXMubGVuZ3RoOyh0dD1+fnR0KTwwPyh0dCs9dXQpPDAmJih0dD0wKTp0dD51dCYmKHR0PXV0KSwoSGU9dm9pZCAwPT09SGU/dXQ6fn5IZSk8MD8oSGUrPXV0KTwwJiYo'@;
put 'SGU9MCk6SGU+dXQmJihIZT11dCksSGU8dHQmJihIZT10dCk7Y29uc3QgcXQ9dGhpcy5zdWJhcnJheSh0dCxIZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihxdCxPLnByb3RvdHlwZSkscXR9LE8ucHJvdG90eXBlLnJlYWRVaW50TEU9Ty5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5j'@;
put 'dGlvbih0dCxIZSx1dCl7dHQ+Pj49MCxIZT4+Pj0wLHV0fHxvZSh0dCxIZSx0aGlzLmxlbmd0aCk7bGV0IHF0PXRoaXNbdHRdLFJ0PTEsUHQ9MDtmb3IoOysrUHQ8SGUmJihSdCo9MjU2KTspcXQrPXRoaXNbdHQrUHRdKlJ0O3JldHVybiBxdH0sTy5wcm90b3R5cGUucmVhZFVpbnRCRT1PLnBy'@;
put 'b3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKHR0LEhlLHV0KXt0dD4+Pj0wLEhlPj4+PTAsdXR8fG9lKHR0LEhlLHRoaXMubGVuZ3RoKTtsZXQgcXQ9dGhpc1t0dCstLUhlXSxSdD0xO2Zvcig7SGU+MCYmKFJ0Kj0yNTYpOylxdCs9dGhpc1t0dCstLUhlXSpSdDtyZXR1cm4gcXR9LE8ucHJv'@;
put 'dG90eXBlLnJlYWRVaW50OD1PLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxvZSh0dCwxLHRoaXMubGVuZ3RoKSx0aGlzW3R0XX0sTy5wcm90b3R5cGUucmVhZFVpbnQxNkxFPU8ucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0'@;
put 'dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fG9lKHR0LDIsdGhpcy5sZW5ndGgpLHRoaXNbdHRdfHRoaXNbdHQrMV08PDh9LE8ucHJvdG90eXBlLnJlYWRVaW50MTZCRT1PLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxvZSh0dCwyLHRo'@;
put 'aXMubGVuZ3RoKSx0aGlzW3R0XTw8OHx0aGlzW3R0KzFdfSxPLnByb3RvdHlwZS5yZWFkVWludDMyTEU9Ty5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8b2UodHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdHRdfHRoaXNbdHQrMV08PDh8'@;
put 'dGhpc1t0dCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdHQrM119LE8ucHJvdG90eXBlLnJlYWRVaW50MzJCRT1PLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxvZSh0dCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3R0XSsodGhp'@;
put 'c1t0dCsxXTw8MTZ8dGhpc1t0dCsyXTw8OHx0aGlzW3R0KzNdKX0sTy5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPUR0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBIZT10aGlzW3R0XSx1dD10aGlzW3R0KzddOyh2b2lkIDA9PT1IZXx8dm9pZCAwPT09dXQpJiZS'@;
put 'ZSh0dCx0aGlzLmxlbmd0aC04KTtjb25zdCBxdD1IZSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3RoaXNbKyt0dF0qMioqMjQsUnQ9dGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSs2NTUzNip0aGlzWysrdHRdK3V0KjIqKjI0O3JldHVybiBCaWdJbnQocXQpKyhCaWdJbnQoUnQp'@;
put 'PDxCaWdJbnQoMzIpKX0pLE8ucHJvdG90eXBlLnJlYWRCaWdVSW50NjRCRT1EdChmdW5jdGlvbih0dCl7RmUodHQ+Pj49MCwib2Zmc2V0Iik7Y29uc3QgSGU9dGhpc1t0dF0sdXQ9dGhpc1t0dCs3XTsodm9pZCAwPT09SGV8fHZvaWQgMD09PXV0KSYmUmUodHQsdGhpcy5sZW5ndGgtOCk7Y29u'@;
put 'c3QgcXQ9SGUqMioqMjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt0aGlzWysrdHRdLFJ0PXRoaXNbKyt0dF0qMioqMjQrNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1srK3R0XSt1dDtyZXR1cm4oQmlnSW50KHF0KTw8QmlnSW50KDMyKSkrQmlnSW50KFJ0KX0pLE8ucHJvdG90'@;
put 'eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0dCxIZSx1dCl7dHQ+Pj49MCxIZT4+Pj0wLHV0fHxvZSh0dCxIZSx0aGlzLmxlbmd0aCk7bGV0IHF0PXRoaXNbdHRdLFJ0PTEsUHQ9MDtmb3IoOysrUHQ8SGUmJihSdCo9MjU2KTspcXQrPXRoaXNbdHQrUHRdKlJ0O3JldHVybiBSdCo9MTI4LHF0Pj1S'@;
put 'dCYmKHF0LT1NYXRoLnBvdygyLDgqSGUpKSxxdH0sTy5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHR0LEhlLHV0KXt0dD4+Pj0wLEhlPj4+PTAsdXR8fG9lKHR0LEhlLHRoaXMubGVuZ3RoKTtsZXQgcXQ9SGUsUnQ9MSxQdD10aGlzW3R0Ky0tcXRdO2Zvcig7cXQ+MCYmKFJ0Kj0yNTYp'@;
put 'OylQdCs9dGhpc1t0dCstLXF0XSpSdDtyZXR1cm4gUnQqPTEyOCxQdD49UnQmJihQdC09TWF0aC5wb3coMiw4KkhlKSksUHR9LE8ucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8b2UodHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdHRdPy0x'@;
put 'KigyNTUtdGhpc1t0dF0rMSk6dGhpc1t0dF19LE8ucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHR0LEhlKXt0dD4+Pj0wLEhlfHxvZSh0dCwyLHRoaXMubGVuZ3RoKTtjb25zdCB1dD10aGlzW3R0XXx0aGlzW3R0KzFdPDw4O3JldHVybiAzMjc2OCZ1dD80Mjk0OTAxNzYwfHV0OnV0'@;
put 'fSxPLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0dCxIZSl7dHQ+Pj49MCxIZXx8b2UodHQsMix0aGlzLmxlbmd0aCk7Y29uc3QgdXQ9dGhpc1t0dCsxXXx0aGlzW3R0XTw8ODtyZXR1cm4gMzI3NjgmdXQ/NDI5NDkwMTc2MHx1dDp1dH0sTy5wcm90b3R5cGUucmVhZEludDMyTEU9'@;
put 'ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxvZSh0dCw0LHRoaXMubGVuZ3RoKSx0aGlzW3R0XXx0aGlzW3R0KzFdPDw4fHRoaXNbdHQrMl08PDE2fHRoaXNbdHQrM108PDI0fSxPLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAs'@;
put 'SGV8fG9lKHR0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdHRdPDwyNHx0aGlzW3R0KzFdPDwxNnx0aGlzW3R0KzJdPDw4fHRoaXNbdHQrM119LE8ucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFPUR0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBIZT10aGlzW3R0XSx1dD10'@;
put 'aGlzW3R0KzddO3JldHVybih2b2lkIDA9PT1IZXx8dm9pZCAwPT09dXQpJiZSZSh0dCx0aGlzLmxlbmd0aC04KSwoQmlnSW50KHRoaXNbdHQrNF0rMjU2KnRoaXNbdHQrNV0rNjU1MzYqdGhpc1t0dCs2XSsodXQ8PDI0KSk8PEJpZ0ludCgzMikpK0JpZ0ludChIZSsyNTYqdGhpc1srK3R0XSs2'@;
put 'NTUzNip0aGlzWysrdHRdKzE2Nzc3MjE2KnRoaXNbKyt0dF0pfSksTy5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkU9RHQoZnVuY3Rpb24odHQpe0ZlKHR0Pj4+PTAsIm9mZnNldCIpO2NvbnN0IEhlPXRoaXNbdHRdLHV0PXRoaXNbdHQrN107KHZvaWQgMD09PUhlfHx2b2lkIDA9PT11dCkmJlJl'@;
put 'KHR0LHRoaXMubGVuZ3RoLTgpO2NvbnN0IHF0PShIZTw8MjQpKzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdGhpc1srK3R0XTtyZXR1cm4oQmlnSW50KHF0KTw8QmlnSW50KDMyKSkrQmlnSW50KDE2Nzc3MjE2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSsyNTYqdGhpc1sr'@;
put 'K3R0XSt1dCl9KSxPLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fG9lKHR0LDQsdGhpcy5sZW5ndGgpLGcucmVhZCh0aGlzLHR0LCEwLDIzLDQpfSxPLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0'@;
put 'Pj4+PTAsSGV8fG9lKHR0LDQsdGhpcy5sZW5ndGgpLGcucmVhZCh0aGlzLHR0LCExLDIzLDQpfSxPLnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxvZSh0dCw4LHRoaXMubGVuZ3RoKSxnLnJlYWQodGhpcyx0dCwhMCw1Miw4KX0sTy5w'@;
put 'cm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8b2UodHQsOCx0aGlzLmxlbmd0aCksZy5yZWFkKHRoaXMsdHQsITEsNTIsOCl9LE8ucHJvdG90eXBlLndyaXRlVWludExFPU8ucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKHR0LEhl'@;
put 'LHV0LHF0KXt0dD0rdHQsSGU+Pj49MCx1dD4+Pj0wLHF0fHx0ZSh0aGlzLHR0LEhlLHV0LE1hdGgucG93KDIsOCp1dCktMSwwKTtsZXQgUnQ9MSxQdD0wO2Zvcih0aGlzW0hlXT0yNTUmdHQ7KytQdDx1dCYmKFJ0Kj0yNTYpOyl0aGlzW0hlK1B0XT10dC9SdCYyNTU7cmV0dXJuIEhlK3V0fSxP'@;
put 'LnByb3RvdHlwZS53cml0ZVVpbnRCRT1PLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0dCxIZSx1dCxxdCl7dHQ9K3R0LEhlPj4+PTAsdXQ+Pj49MCxxdHx8dGUodGhpcyx0dCxIZSx1dCxNYXRoLnBvdygyLDgqdXQpLTEsMCk7bGV0IFJ0PXV0LTEsUHQ9MTtmb3IodGhpc1tIZStS'@;
put 'dF09MjU1JnR0Oy0tUnQ+PTAmJihQdCo9MjU2KTspdGhpc1tIZStSdF09dHQvUHQmMjU1O3JldHVybiBIZSt1dH0sTy5wcm90b3R5cGUud3JpdGVVaW50OD1PLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMs'@;
put 'dHQsSGUsMSwyNTUsMCksdGhpc1tIZV09MjU1JnR0LEhlKzF9LE8ucHJvdG90eXBlLndyaXRlVWludDE2TEU9Ty5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDIsNjU1MzUsMCksdGhpc1tI'@;
put 'ZV09MjU1JnR0LHRoaXNbSGUrMV09dHQ+Pj44LEhlKzJ9LE8ucHJvdG90eXBlLndyaXRlVWludDE2QkU9Ty5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDIsNjU1MzUsMCksdGhpc1tIZV09'@;
put 'dHQ+Pj44LHRoaXNbSGUrMV09MjU1JnR0LEhlKzJ9LE8ucHJvdG90eXBlLndyaXRlVWludDMyTEU9Ty5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0hl'@;
put 'KzNdPXR0Pj4+MjQsdGhpc1tIZSsyXT10dD4+PjE2LHRoaXNbSGUrMV09dHQ+Pj44LHRoaXNbSGVdPTI1NSZ0dCxIZSs0fSxPLnByb3RvdHlwZS53cml0ZVVpbnQzMkJFPU8ucHJvdG90eXBlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1'@;
put 'dHx8dGUodGhpcyx0dCxIZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tIZV09dHQ+Pj4yNCx0aGlzW0hlKzFdPXR0Pj4+MTYsdGhpc1tIZSsyXT10dD4+PjgsdGhpc1tIZSszXT0yNTUmdHQsSGUrNH0sTy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRMRT1EdChmdW5jdGlvbih0dCxIZT0wKXtyZXR1'@;
put 'cm4gc2UodGhpcyx0dCxIZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxPLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NEJFPUR0KGZ1bmN0aW9uKHR0LEhlPTApe3JldHVybiB3ZSh0aGlzLHR0LEhlLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZm'@;
put 'ZiIpKX0pLE8ucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24odHQsSGUsdXQscXQpe2lmKHR0PSt0dCxIZT4+Pj0wLCFxdCl7Y29uc3QgUXQ9TWF0aC5wb3coMiw4KnV0LTEpO3RlKHRoaXMsdHQsSGUsdXQsUXQtMSwtUXQpfWxldCBSdD0wLFB0PTEsc2k9MDtmb3IodGhpc1tIZV09MjU1'@;
put 'JnR0OysrUnQ8dXQmJihQdCo9MjU2KTspdHQ8MCYmMD09PXNpJiYwIT09dGhpc1tIZStSdC0xXSYmKHNpPTEpLHRoaXNbSGUrUnRdPSh0dC9QdHwwKS1zaSYyNTU7cmV0dXJuIEhlK3V0fSxPLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXtpZih0dD0rdHQsSGU+'@;
put 'Pj49MCwhcXQpe2NvbnN0IFF0PU1hdGgucG93KDIsOCp1dC0xKTt0ZSh0aGlzLHR0LEhlLHV0LFF0LTEsLVF0KX1sZXQgUnQ9dXQtMSxQdD0xLHNpPTA7Zm9yKHRoaXNbSGUrUnRdPTI1NSZ0dDstLVJ0Pj0wJiYoUHQqPTI1Nik7KXR0PDAmJjA9PT1zaSYmMCE9PXRoaXNbSGUrUnQrMV0mJihz'@;
put 'aT0xKSx0aGlzW0hlK1J0XT0odHQvUHR8MCktc2kmMjU1O3JldHVybiBIZSt1dH0sTy5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsMSwxMjcsLTEyOCksdHQ8MCYmKHR0PTI1NSt0dCsxKSx0aGlz'@;
put 'W0hlXT0yNTUmdHQsSGUrMX0sTy5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbSGVdPTI1NSZ0dCx0aGlzW0hlKzFdPXR0Pj4+OCxIZSsyfSxPLnByb3Rv'@;
put 'dHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCx1dHx8dGUodGhpcyx0dCxIZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tIZV09dHQ+Pj44LHRoaXNbSGUrMV09MjU1JnR0LEhlKzJ9LE8ucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlv'@;
put 'bih0dCxIZSx1dCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLHV0fHx0ZSh0aGlzLHR0LEhlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1tIZV09MjU1JnR0LHRoaXNbSGUrMV09dHQ+Pj44LHRoaXNbSGUrMl09dHQ+Pj4xNix0aGlzW0hlKzNdPXR0Pj4+MjQsSGUrNH0sTy5wcm90b3R5'@;
put 'cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsdXR8fHRlKHRoaXMsdHQsSGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0dDwwJiYodHQ9NDI5NDk2NzI5NSt0dCsxKSx0aGlzW0hlXT10dD4+PjI0LHRoaXNbSGUrMV09dHQ+Pj4xNix0'@;
put 'aGlzW0hlKzJdPXR0Pj4+OCx0aGlzW0hlKzNdPTI1NSZ0dCxIZSs0fSxPLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0TEU9RHQoZnVuY3Rpb24odHQsSGU9MCl7cmV0dXJuIHNlKHRoaXMsdHQsSGUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZm'@;
put 'ZmYiKSl9KSxPLnByb3RvdHlwZS53cml0ZUJpZ0ludDY0QkU9RHQoZnVuY3Rpb24odHQsSGU9MCl7cmV0dXJuIHdlKHRoaXMsdHQsSGUsLUJpZ0ludCgiMHg4MDAwMDAwMDAwMDAwMDAwIiksQmlnSW50KCIweDdmZmZmZmZmZmZmZmZmZmYiKSl9KSxPLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9'@;
put 'ZnVuY3Rpb24odHQsSGUsdXQpe3JldHVybiBKZSh0aGlzLHR0LEhlLCEwLHV0KX0sTy5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHR0LEhlLHV0KXtyZXR1cm4gSmUodGhpcyx0dCxIZSwhMSx1dCl9LE8ucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24odHQsSGUsdXQp'@;
put 'e3JldHVybiBhdCh0aGlzLHR0LEhlLCEwLHV0KX0sTy5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0dCxIZSx1dCl7cmV0dXJuIGF0KHRoaXMsdHQsSGUsITEsdXQpfSxPLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHR0LEhlLHV0LHF0KXtpZighTy5pc0J1ZmZlcih0dCkpdGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYodXR8fCh1dD0wKSwhcXQmJjAhPT1xdCYmKHF0PXRoaXMubGVuZ3RoKSxIZT49dHQubGVuZ3RoJiYoSGU9dHQubGVuZ3RoKSxIZXx8KEhlPTApLHF0PjAmJnF0PHV0JiYocXQ9dXQpLHF0PT09dXR8fDA9'@;
put 'PT10dC5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihIZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYodXQ8MHx8dXQ+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtp'@;
put 'ZihxdDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO3F0PnRoaXMubGVuZ3RoJiYocXQ9dGhpcy5sZW5ndGgpLHR0Lmxlbmd0aC1IZTxxdC11dCYmKHF0PXR0Lmxlbmd0aC1IZSt1dCk7Y29uc3QgUnQ9cXQtdXQ7cmV0dXJuIHRoaXM9PT10dCYmImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4/dGhpcy5jb3B5V2l0aGluKEhlLHV0LHF0KTpVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbCh0dCx0aGlzLnN1YmFycmF5KHV0LHF0KSxIZSksUnR9LE8ucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24odHQs'@;
put 'SGUsdXQscXQpe2lmKCJzdHJpbmciPT10eXBlb2YgdHQpe2lmKCJzdHJpbmciPT10eXBlb2YgSGU/KHF0PUhlLEhlPTAsdXQ9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgdXQmJihxdD11dCx1dD10aGlzLmxlbmd0aCksdm9pZCAwIT09cXQmJiJzdHJpbmciIT10eXBlb2YgcXQpdGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZyIpO2lmKCJzdHJpbmciPT10eXBlb2YgcXQmJiFPLmlzRW5jb2RpbmcocXQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrcXQpO2lmKDE9PT10dC5sZW5ndGgpe2NvbnN0IFB0PXR0LmNo'@;
put 'YXJDb2RlQXQoMCk7KCJ1dGY4Ij09PXF0JiZQdDwxMjh8fCJsYXRpbjEiPT09cXQpJiYodHQ9UHQpfX1lbHNlIm51bWJlciI9PXR5cGVvZiB0dD90dCY9MjU1OiJib29sZWFuIj09dHlwZW9mIHR0JiYodHQ9TnVtYmVyKHR0KSk7aWYoSGU8MHx8dGhpcy5sZW5ndGg8SGV8fHRoaXMubGVuZ3Ro'@;
put 'PHV0KXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZih1dDw9SGUpcmV0dXJuIHRoaXM7bGV0IFJ0O2lmKEhlPj4+PTAsdXQ9dm9pZCAwPT09dXQ/dGhpcy5sZW5ndGg6dXQ+Pj4wLHR0fHwodHQ9MCksIm51bWJlciI9PXR5cGVvZiB0dClmb3IoUnQ9SGU7UnQ8'@;
put 'dXQ7KytSdCl0aGlzW1J0XT10dDtlbHNle2NvbnN0IFB0PU8uaXNCdWZmZXIodHQpP3R0Ok8uZnJvbSh0dCxxdCksc2k9UHQubGVuZ3RoO2lmKDA9PT1zaSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgIicrdHQrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2Zv'@;
put 'cihSdD0wO1J0PHV0LUhlOysrUnQpdGhpc1tSdCtIZV09UHRbUnQlc2ldfXJldHVybiB0aGlzfTtjb25zdCBNZT17fTtmdW5jdGlvbiB2ZSgkZSx0dCxIZSl7TWVbJGVdPWNsYXNzIGV4dGVuZHMgSGV7Y29uc3RydWN0b3IoKXtzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJt'@;
put 'ZXNzYWdlIix7dmFsdWU6dHQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHRoaXMubmFtZT1gJHt0aGlzLm5hbWV9IFskeyRlfV1gLGRlbGV0ZSB0aGlzLm5hbWV9Z2V0IGNvZGUoKXtyZXR1cm4gJGV9c2V0IGNvZGUocXQpe09iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eSh0aGlzLCJjb2RlIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cXQsd3JpdGFibGU6ITB9KX10b1N0cmluZygpe3JldHVybmAke3RoaXMubmFtZX0gWyR7JGV9XTogJHt0aGlzLm1lc3NhZ2V9YH19fWZ1bmN0aW9uIFhlKCRlKXtsZXQgdHQ9IiIsSGU9'@;
put 'JGUubGVuZ3RoO2NvbnN0IHV0PSItIj09PSRlWzBdPzE6MDtmb3IoO0hlPj11dCs0O0hlLT0zKXR0PWBfJHskZS5zbGljZShIZS0zLEhlKX0ke3R0fWA7cmV0dXJuYCR7JGUuc2xpY2UoMCxIZSl9JHt0dH1gfWZ1bmN0aW9uIERlKCRlLHR0LEhlLHV0LHF0LFJ0KXtpZigkZT5IZXx8JGU8dHQp'@;
put 'e2NvbnN0IFB0PSJiaWdpbnQiPT10eXBlb2YgdHQ/Im4iOiIiO2xldCBzaTt0aHJvdyBzaT1SdD4zPzA9PT10dHx8dHQ9PT1CaWdJbnQoMCk/YD49IDAke1B0fSBhbmQgPCAyJHtQdH0gKiogJHs4KihSdCsxKX0ke1B0fWA6YD49IC0oMiR7UHR9ICoqICR7OCooUnQrMSktMX0ke1B0fSkgYW5k'@;
put 'IDwgMiAqKiAkezgqKFJ0KzEpLTF9JHtQdH1gOmA+PSAke3R0fSR7UHR9IGFuZCA8PSAke0hlfSR7UHR9YCxuZXcgTWUuRVJSX09VVF9PRl9SQU5HRSgidmFsdWUiLHNpLCRlKX0hZnVuY3Rpb24gamUoJGUsdHQsSGUpe0ZlKHR0LCJvZmZzZXQiKSwodm9pZCAwPT09JGVbdHRdfHx2b2lkIDA9'@;
put 'PT0kZVt0dCtIZV0pJiZSZSh0dCwkZS5sZW5ndGgtKEhlKzEpKX0odXQscXQsUnQpfWZ1bmN0aW9uIEZlKCRlLHR0KXtpZigibnVtYmVyIiE9dHlwZW9mICRlKXRocm93IG5ldyBNZS5FUlJfSU5WQUxJRF9BUkdfVFlQRSh0dCwibnVtYmVyIiwkZSl9ZnVuY3Rpb24gUmUoJGUsdHQsSGUpe3Ro'@;
put 'cm93IE1hdGguZmxvb3IoJGUpIT09JGU/KEZlKCRlLEhlKSxuZXcgTWUuRVJSX09VVF9PRl9SQU5HRShIZXx8Im9mZnNldCIsImFuIGludGVnZXIiLCRlKSk6dHQ8MD9uZXcgTWUuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTOm5ldyBNZS5FUlJfT1VUX09GX1JBTkdFKEhlfHwib2Zmc2V0Iixg'@;
put 'Pj0gJHtIZT8xOjB9IGFuZCA8PSAke3R0fWAsJGUpfXZlKCJFUlJfQlVGRkVSX09VVF9PRl9CT1VORFMiLGZ1bmN0aW9uKCRlKXtyZXR1cm4gJGU/YCR7JGV9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2A6IkF0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3Vu'@;
put 'ZHMifSxSYW5nZUVycm9yKSx2ZSgiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKCRlLHR0KXtyZXR1cm5gVGhlICIkeyRlfSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAke3R5cGVvZiB0dH1gfSxUeXBlRXJyb3IpLHZlKCJFUlJfT1VUX09G'@;
put 'X1JBTkdFIixmdW5jdGlvbigkZSx0dCxIZSl7bGV0IHV0PWBUaGUgdmFsdWUgb2YgIiR7JGV9IiBpcyBvdXQgb2YgcmFuZ2UuYCxxdD1IZTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihIZSkmJk1hdGguYWJzKEhlKT40Mjk0OTY3Mjk2P3F0PVhlKFN0cmluZyhIZSkpOiJiaWdpbnQiPT10eXBl'@;
put 'b2YgSGUmJihxdD1TdHJpbmcoSGUpLChIZT5CaWdJbnQoMikqKkJpZ0ludCgzMil8fEhlPC0oQmlnSW50KDIpKipCaWdJbnQoMzIpKSkmJihxdD1YZShxdCkpLHF0Kz0ibiIpLHV0Kz1gIEl0IG11c3QgYmUgJHt0dH0uIFJlY2VpdmVkICR7cXR9YCx1dH0sUmFuZ2VFcnJvcik7Y29uc3QgSWU9'@;
put 'L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBrZSgkZSx0dCl7bGV0IEhlO3R0PXR0fHwxLzA7Y29uc3QgdXQ9JGUubGVuZ3RoO2xldCBxdD1udWxsO2NvbnN0IFJ0PVtdO2ZvcihsZXQgUHQ9MDtQdDx1dDsrK1B0KXtpZihIZT0kZS5jaGFyQ29kZUF0KFB0KSxIZT41NTI5NSYmSGU8NTcz'@;
put 'NDQpe2lmKCFxdCl7aWYoSGU+NTYzMTkpeyh0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKFB0KzE9PT11dCl7KHR0LT0zKT4tMSYmUnQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9cXQ9SGU7Y29udGludWV9aWYoSGU8NTYzMjApeyh0dC09Myk+LTEmJlJ0'@;
put 'LnB1c2goMjM5LDE5MSwxODkpLHF0PUhlO2NvbnRpbnVlfUhlPTY1NTM2KyhxdC01NTI5Njw8MTB8SGUtNTYzMjApfWVsc2UgcXQmJih0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpO2lmKHF0PW51bGwsSGU8MTI4KXtpZigodHQtPTEpPDApYnJlYWs7UnQucHVzaChIZSl9ZWxzZSBp'@;
put 'ZihIZTwyMDQ4KXtpZigodHQtPTIpPDApYnJlYWs7UnQucHVzaChIZT4+NnwxOTIsNjMmSGV8MTI4KX1lbHNlIGlmKEhlPDY1NTM2KXtpZigodHQtPTMpPDApYnJlYWs7UnQucHVzaChIZT4+MTJ8MjI0LEhlPj42JjYzfDEyOCw2MyZIZXwxMjgpfWVsc2V7aWYoIShIZTwxMTE0MTEyKSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKCh0dC09NCk8MClicmVhaztSdC5wdXNoKEhlPj4xOHwyNDAsSGU+PjEyJjYzfDEyOCxIZT4+NiY2M3wxMjgsNjMmSGV8MTI4KX19cmV0dXJuIFJ0fWZ1bmN0aW9uIG50KCRlKXtyZXR1cm4geS50b0J5dGVBcnJheShmdW5jdGlv'@;
put 'biBWZSgkZSl7aWYoKCRlPSgkZT0kZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShJZSwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7JGUubGVuZ3RoJTQhPTA7KSRlKz0iPSI7cmV0dXJuICRlfSgkZSkpfWZ1bmN0aW9uIFFlKCRlLHR0LEhlLHV0KXtsZXQgcXQ7Zm9yKHF0PTA7'@;
put 'cXQ8dXQmJiEocXQrSGU+PXR0Lmxlbmd0aHx8cXQ+PSRlLmxlbmd0aCk7KytxdCl0dFtxdCtIZV09JGVbcXRdO3JldHVybiBxdH1mdW5jdGlvbiB1bigkZSx0dCl7cmV0dXJuICRlIGluc3RhbmNlb2YgdHR8fG51bGwhPSRlJiZudWxsIT0kZS5jb25zdHJ1Y3RvciYmbnVsbCE9JGUuY29uc3Ry'@;
put 'dWN0b3IubmFtZSYmJGUuY29uc3RydWN0b3IubmFtZT09PXR0Lm5hbWV9ZnVuY3Rpb24geXQoJGUpe3JldHVybiAkZSE9JGV9Y29uc3QgTXQ9ZnVuY3Rpb24oKXtjb25zdCAkZT0iMDEyMzQ1Njc4OWFiY2RlZiIsdHQ9bmV3IEFycmF5KDI1Nik7Zm9yKGxldCBIZT0wO0hlPDE2OysrSGUpe2Nv'@;
put 'bnN0IHV0PTE2KkhlO2ZvcihsZXQgcXQ9MDtxdDwxNjsrK3F0KXR0W3V0K3F0XT0kZVtIZV0rJGVbcXRdfXJldHVybiB0dH0oKTtmdW5jdGlvbiBEdCgkZSl7cmV0dXJuIHR5cGVvZiBCaWdJbnQ+InUiP2l0OiRlfWZ1bmN0aW9uIGl0KCl7dGhyb3cgbmV3IEVycm9yKCJCaWdJbnQgbm90IHN1'@;
put 'cHBvcnRlZCIpfX0sNTExNjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDg2MTIpLHk9XygxNzY4KSxnPV8oODkyOCksQj1fKDk3NzApO3VlLmV4cG9ydHM9Qnx8SS5jYWxsKGcseSl9LDMxOTI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg4NjEyKSx5PV8oMTc2OCks'@;
put 'Zz1fKDUxMTYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gZyhJLHksYXJndW1lbnRzKX19LDE3Njg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHl9LDg5Mjg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1GdW5jdGlvbi5wcm90'@;
put 'b3R5cGUuY2FsbH0sMzE5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oODYxMikseT1fKDQ0NTMpLGc9Xyg4OTI4KSxCPV8oNTExNik7dWUuZXhwb3J0cz1mdW5jdGlvbihQKXtpZihQLmxlbmd0aDwxfHwiZnVuY3Rpb24iIT10eXBlb2YgUFswXSl0aHJvdyBuZXcgeSgiYSBmdW5j'@;
put 'dGlvbiBpcyByZXF1aXJlZCIpO3JldHVybiBCKEksZyxQKX19LDk3NzA6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3QmJlJlZmxlY3QuYXBwbHl9LDE5MjQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyMTApLHk9Xyg1NTU5'@;
put 'KSxnPXkoSSgiU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mIikpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRj1JKHcsISFQKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRiYmZyh3LCIucHJvdG90eXBlLiIpPi0xP3koRik6Rn19LDU1NTk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7'@;
put 'dmFyIEk9Xyg3NzcxKSx5PV8oNDQyOSksZz1fKDMxOSksQj1fKDMxOTIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7dmFyIEY9Zyhhcmd1bWVudHMpLE89UC5sZW5ndGgtKGFyZ3VtZW50cy5sZW5ndGgtMSk7cmV0dXJuIEkoRiwxKyhPPjA/TzowKSwhMCl9LHk/eSh1ZS5leHBvcnRzLCJhcHBs'@;
put 'eSIse3ZhbHVlOkJ9KTp1ZS5leHBvcnRzLmFwcGx5PUJ9LDczNzk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyMTApLHk9XygzMTkpLGc9eShbSSgiJVN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiUiKV0pO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXt2YXIgRj1JKHcsISFQKTty'@;
put 'ZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRiYmZyh3LCIucHJvdG90eXBlLiIpPi0xP3koW0ZdKTpGfX0sMTAyNzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk1MDkpLkJ1ZmZlcix5PV8oMjgzMCkuVHJhbnNmb3JtLGc9XygyNTUzKS5zO2Z1bmN0aW9uIHcoeil7eS5jYWxsKHRo'@;
put 'aXMpLHRoaXMuaGFzaE1vZGU9InN0cmluZyI9PXR5cGVvZiB6LHRoaXMuaGFzaE1vZGU/dGhpc1t6XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9maW5hbCYmKHRoaXMuX19maW5hbD10aGlzLl9maW5hbCx0aGlzLl9maW5hbD1udWxs'@;
put 'KSx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH1fKDU3MTcpKHcseSk7dmFyIFA9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLEY9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihJLnByb3RvdHlwZSBp'@;
put 'bnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7dy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHosTixMKXt2YXIgSz1mdW5jdGlvbiBPKHosTil7aWYoeiBpbnN0YW5jZW9mIEkpcmV0dXJuIHo7aWYoInN0cmluZyI9PXR5cGVvZiB6KXJldHVybiBJLmZyb20o'@;
put 'eixOKTtpZihGJiZBcnJheUJ1ZmZlci5pc1ZpZXcoeikpe2lmKDA9PT16LmJ5dGVMZW5ndGgpcmV0dXJuIEkuYWxsb2MoMCk7dmFyIEw9SS5mcm9tKHouYnVmZmVyLHouYnl0ZU9mZnNldCx6LmJ5dGVMZW5ndGgpO2lmKEwuYnl0ZUxlbmd0aD09PXouYnl0ZUxlbmd0aClyZXR1cm4gTH1pZihQ'@;
put 'JiZ6IGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5pc0J1ZmZlcih6KSYmei5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIHouY29uc3RydWN0b3IuaXNCdWZmZXImJnouY29uc3RydWN0b3IuaXNCdWZmZXIoeikpcmV0dXJuIEkuZnJvbSh6KTt0aHJvdyBuZXcgVHlwZUVycm9yKCdU'@;
put 'aGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4nKX0oeixOKSxVPXRoaXMuX3VwZGF0ZShLKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihMJiYoVT10aGlzLl90b1N0cmlu'@;
put 'ZyhVLEwpKSxVKX0sdy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LHcucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0'@;
put 'QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0'@;
put 'YXRlIil9LHcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oeixOLEwpe3ZhciBLO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZSh6KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHopKX1jYXRjaChVKXtLPVV9ZmluYWxseXtMKEspfX0sdy5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0'@;
put 'aW9uKHope3ZhciBOO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKEwpe049TH16KE4pfSx3LnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih6KXt2YXIgTj10aGlzLl9fZmluYWwoKXx8SS5hbGxvYygwKTtyZXR1cm4geiYmKE49dGhpcy5fdG9TdHJpbmcoTix6'@;
put 'LCEwKSksTn0sdy5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHosTixMKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgZyhOKSx0aGlzLl9lbmNvZGluZz1OKSx0aGlzLl9lbmNvZGluZyE9PU4pdGhyb3cgbmV3IEVycm9yKCJjYW5cdTIwMTl0IHN3aXRjaCBlbmNv'@;
put 'ZGluZ3MiKTt2YXIgSz10aGlzLl9kZWNvZGVyLndyaXRlKHopO3JldHVybiBMJiYoSys9dGhpcy5fZGVjb2Rlci5lbmQoKSksS30sdWUuZXhwb3J0cz13fSw1MTA4Oih1ZSxxLF8pPT57dmFyIEk9Xyg5NTM5KSx5PV8oOTI4Mik7ZnVuY3Rpb24gZygpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGlt'@;
put 'ZSgpfXZhciB3LEI9QXJyYXkucHJvdG90eXBlLnNsaWNlLFA9e307dz10eXBlb2YgXy5nPCJ1IiYmXy5nLmNvbnNvbGU/Xy5nLmNvbnNvbGU6dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jb25zb2xlP3dpbmRvdy5jb25zb2xlOnt9O2Zvcih2YXIgRj1bW2Z1bmN0aW9uIEsoKXt9LCJsb2ci'@;
put 'XSxbZnVuY3Rpb24gVSgpe3cubG9nLmFwcGx5KHcsYXJndW1lbnRzKX0sImluZm8iXSxbZnVuY3Rpb24gVygpe3cubG9nLmFwcGx5KHcsYXJndW1lbnRzKX0sIndhcm4iXSxbZnVuY3Rpb24gWSgpe3cud2Fybi5hcHBseSh3LGFyZ3VtZW50cyl9LCJlcnJvciJdLFtmdW5jdGlvbiBYKGxlKXtQ'@;
put 'W2xlXT1nKCl9LCJ0aW1lIl0sW2Z1bmN0aW9uIGVlKGxlKXt2YXIgbWU9UFtsZV07aWYoIW1lKXRocm93IG5ldyBFcnJvcigiTm8gc3VjaCBsYWJlbDogIitsZSk7ZGVsZXRlIFBbbGVdO3ZhciBfZT1nKCktbWU7dy5sb2cobGUrIjogIitfZSsibXMiKX0sInRpbWVFbmQiXSxbZnVuY3Rpb24g'@;
put 'Sigpe3ZhciBsZT1uZXcgRXJyb3I7bGUubmFtZT0iVHJhY2UiLGxlLm1lc3NhZ2U9SS5mb3JtYXQuYXBwbHkobnVsbCxhcmd1bWVudHMpLHcuZXJyb3IobGUuc3RhY2spfSwidHJhY2UiXSxbZnVuY3Rpb24gcmUobGUpe3cubG9nKEkuaW5zcGVjdChsZSkrIlxuIil9LCJkaXIiXSxbZnVuY3Rp'@;
put 'b24gaWUobGUpe2lmKCFsZSl7dmFyIG1lPUIuY2FsbChhcmd1bWVudHMsMSk7eS5vayghMSxJLmZvcm1hdC5hcHBseShudWxsLG1lKSl9fSwiYXNzZXJ0Il1dLE89MDtPPEYubGVuZ3RoO08rKyl7dmFyIHo9RltPXSxMPXpbMV07d1tMXXx8KHdbTF09elswXSl9dWUuZXhwb3J0cz13fSw2NDk3'@;
put 'Oih1ZSxxLF8pPT57dmFyIEk9Xyg4NzY0KS5CdWZmZXI7ZnVuY3Rpb24gWChlZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlZSl9cS5pc0FycmF5PWZ1bmN0aW9uIHkoZWUpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZWUpOiJbb2JqZWN0IEFy'@;
put 'cmF5XSI9PT1YKGVlKX0scS5pc0Jvb2xlYW49ZnVuY3Rpb24gZyhlZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZWV9LHEuaXNOdWxsPWZ1bmN0aW9uIEIoZWUpe3JldHVybiBudWxsPT09ZWV9LHEuaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gdyhlZSl7cmV0dXJuIG51bGw9PWVlfSxx'@;
put 'LmlzTnVtYmVyPWZ1bmN0aW9uIFAoZWUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZWV9LHEuaXNTdHJpbmc9ZnVuY3Rpb24gRihlZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlZX0scS5pc1N5bWJvbD1mdW5jdGlvbiBPKGVlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGVlfSxxLmlzVW5k'@;
put 'ZWZpbmVkPWZ1bmN0aW9uIHooZWUpe3JldHVybiB2b2lkIDA9PT1lZX0scS5pc1JlZ0V4cD1mdW5jdGlvbiBOKGVlKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PVgoZWUpfSxxLmlzT2JqZWN0PWZ1bmN0aW9uIEwoZWUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZWUmJm51bGwhPT1lZX0s'@;
put 'cS5pc0RhdGU9ZnVuY3Rpb24gSyhlZSl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09WChlZSl9LHEuaXNFcnJvcj1mdW5jdGlvbiBVKGVlKXtyZXR1cm4iW29iamVjdCBFcnJvcl0iPT09WChlZSl8fGVlIGluc3RhbmNlb2YgRXJyb3J9LHEuaXNGdW5jdGlvbj1mdW5jdGlvbiBXKGVlKXtyZXR1'@;
put 'cm4iZnVuY3Rpb24iPT10eXBlb2YgZWV9LHEuaXNQcmltaXRpdmU9ZnVuY3Rpb24gWShlZSl7cmV0dXJuIG51bGw9PT1lZXx8ImJvb2xlYW4iPT10eXBlb2YgZWV8fCJudW1iZXIiPT10eXBlb2YgZWV8fCJzdHJpbmciPT10eXBlb2YgZWV8fCJzeW1ib2wiPT10eXBlb2YgZWV8fHR5cGVvZiBl'@;
put 'ZT4idSJ9LHEuaXNCdWZmZXI9SS5pc0J1ZmZlcn0sNjM5MzoodWUscSxfKT0+e3ZhciBJPV8oODc2NCkuQnVmZmVyLHk9Xyg2OTQ4KSxnPV8oNjQyNik7dWUuZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4gbmV3IHcoTyl9O3ZhciBCPXtzZWNwMjU2azE6e25hbWU6InNlY3AyNTZrMSIsYnl0'@;
put 'ZUxlbmd0aDozMn0sc2VjcDIyNHIxOntuYW1lOiJwMjI0IixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOiJwMjU2IixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOiJwMTkyIixieXRlTGVuZ3RoOjI0fSxlZDI1NTE5OntuYW1lOiJlZDI1NTE5IixieXRlTGVuZ3RoOjMy'@;
put 'fSxzZWNwMzg0cjE6e25hbWU6InAzODQiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZToicDUyMSIsYnl0ZUxlbmd0aDo2Nn19O2Z1bmN0aW9uIHcoRil7dGhpcy5jdXJ2ZVR5cGU9QltGXSx0aGlzLmN1cnZlVHlwZXx8KHRoaXMuY3VydmVUeXBlPXtuYW1lOkZ9KSx0aGlzLmN1cnZl'@;
put 'PW5ldyB5LmVjKHRoaXMuY3VydmVUeXBlLm5hbWUpLHRoaXMua2V5cz12b2lkIDB9ZnVuY3Rpb24gUChGLE8seil7QXJyYXkuaXNBcnJheShGKXx8KEY9Ri50b0FycmF5KCkpO3ZhciBOPW5ldyBJKEYpO2lmKHomJk4ubGVuZ3RoPHope3ZhciBMPW5ldyBJKHotTi5sZW5ndGgpO0wuZmlsbCgw'@;
put 'KSxOPUkuY29uY2F0KFtMLE5dKX1yZXR1cm4gTz9OLnRvU3RyaW5nKE8pOk59Qi5wMjI0PUIuc2VjcDIyNHIxLEIucDI1Nj1CLnNlY3AyNTZyMT1CLnByaW1lMjU2djEsQi5wMTkyPUIuc2VjcDE5MnIxPUIucHJpbWUxOTJ2MSxCLnAzODQ9Qi5zZWNwMzg0cjEsQi5wNTIxPUIuc2VjcDUyMXIx'@;
put 'LHcucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbihGLE8pe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkoRixPKX0sdy5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihGLE8seil7cmV0dXJuIE89T3x8InV0Zjgi'@;
put 'LEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsTykpLFAodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKEYpLmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCkseix0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1'@;
put 'bmN0aW9uKEYsTyl7dmFyIHo9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1PLCEwKTtyZXR1cm4iaHlicmlkIj09PU8mJih6WzBdPXpbei5sZW5ndGgtMV0lMj83OjYpLFAoeixGKX0sdy5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihGKXtyZXR1cm4gUCh0aGlz'@;
put 'LmtleXMuZ2V0UHJpdmF0ZSgpLEYpfSx3LnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oRixPKXtyZXR1cm4gTz1PfHwidXRmOCIsSS5pc0J1ZmZlcihGKXx8KEY9bmV3IEkoRixPKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWMoRiksdGhpc30sdy5wcm90b3R5cGUuc2V0UHJpdmF0'@;
put 'ZUtleT1mdW5jdGlvbihGLE8pe089T3x8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsTykpO3ZhciB6PW5ldyBnKEYpO3JldHVybiB6PXoudG9TdHJpbmcoMTYpLHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmtleXMuX2ltcG9ydFByaXZhdGUoeiksdGhp'@;
put 'c319LDY0MjY6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSx5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnBy'@;
put 'b3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxu'@;
put 'dWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13OnkuQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYm'@;
put 'dHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Xyg4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixw'@;
put 'LGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEw'@;
put 'Omo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9'@;
put 'ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4'@;
put 'KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVn'@;
put 'YXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtw'@;
put 'PDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAw'@;
put 'NzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYo'@;
put 'ZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0'@;
put 'aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2'@;
put 'LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2'@;
put 'NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtm'@;
put 'b3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9'@;
put 'MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9'@;
put 'LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gs'@;
put 'bT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgb2U9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylvZSo9Yjt0'@;
put 'aGlzLmltdWxuKG9lKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5s'@;
put 'ZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxw'@;
put 'fSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5s'@;
put 'ZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNw'@;
put 'ZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAw'@;
put 'MCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwx'@;
put 'NiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwz'@;
put 'NTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUx'@;
put 'LDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0w'@;
put 'fHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsb2U9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9'@;
put 'dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrb2UpLzY3MTA4ODY0fDAsb2U9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8b2UsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBl'@;
put 'LnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygx'@;
put 'Nik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhp'@;
put 'cy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgb2U9dGhpcy5jbG9uZSgpO2ZvcihvZS5uZWdhdGl2ZT0wOyFvZS5pc1plcm8oKTspe3ZhciB0ZT1vZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KG9lPW9l'@;
put 'LmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAy'@;
put 'IGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5'@;
put 'Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5n'@;
put 'KDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90'@;
put 'b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhp'@;
put 'cy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspaltt'@;
put 'XT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9'@;
put 'cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAs'@;
put 'eD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhp'@;
put 'cy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0'@;
put 'cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhp'@;
put 'cy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUu'@;
put 'aXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0x'@;
put 'KSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4g'@;
put 'dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9y'@;
put 'KHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhp'@;
put 'cy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0'@;
put 'dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5k'@;
put 'PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9'@;
put 'dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAo'@;
put 'KX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5j'@;
put 'bG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5'@;
put 'cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jk'@;
put 'c1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnww'@;
put 'LEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYm'@;
put 'MD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdh'@;
put 'dGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4y'@;
put 'Njtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10'@;
put 'aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCks'@;
put 'cC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0s'@;
put 'dy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlh'@;
put 'ZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFy'@;
put 'IEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4'@;
put 'NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9'@;
put 'LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLG9lPTB8Q1swXSx0ZT04MTkxJm9lLHNlPW9lPj4+MTMsd2U9MHxDWzFd'@;
put 'LFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxhdD0wfENbMl0sTWU9ODE5MSZhdCx2ZT1hdD4+PjEzLFhlPTB8Q1szXSxqZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04'@;
put 'MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxzaT0wfFRbMV0sUXQ9ODE5MSZz'@;
put 'aSxzbj1zaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9'@;
put 'bnI+Pj4xMyxCbj0wfFRbN10scm49ODE5MSZCbix6dD1Cbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgaG89KGorKEU9TWF0'@;
put 'aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0'@;
put 'aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgTWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0'@;
put 'aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoTWk+Pj4yNil8MCxNaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStN'@;
put 'YXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0o'@;
put 'KEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxSdCksbT0obT1NYXRoLmltdWwoamUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAs'@;
put 'bT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIg'@;
put 'V249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1N'@;
put 'YXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKGplLFF0KXwwLG09KG09bStNYXRoLmltdWwoamUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNu'@;
put 'KXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAs'@;
put 'QT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSso'@;
put 'JGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJ'@;
put 'ZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1l'@;
put 'LEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11'@;
put 'bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0o'@;
put 'bT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChS'@;
put 'ZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGplLFd0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0'@;
put 'KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAs'@;
put 'QT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSso'@;
put 'UXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChR'@;
put 'ZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJl'@;
put 'LEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAs'@;
put 'bT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIg'@;
put 'Vmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1N'@;
put 'YXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNu'@;
put 'KXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAs'@;
put 'QT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoamUsV2UpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkr'@;
put 'TWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStN'@;
put 'YXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0o'@;
put 'KEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAs'@;
put 'bT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUr'@;
put 'TWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRo'@;
put 'LmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXwwLG09KG09bStNYXRoLmltdWwoamUseHQpfDApK01hdGguaW11'@;
put 'bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUscm4pfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVs'@;
put 'KFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgSW89KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0'@;
put 'aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStN'@;
put 'YXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11'@;
put 'bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFl'@;
put 'LFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChqZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUscm4p'@;
put 'fDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLGNuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJiht'@;
put 'PShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRo'@;
put 'LmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVs'@;
put 'KHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQp'@;
put 'fDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChSZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxF'@;
put 'PUUrTWF0aC5pbXVsKGplLGNuKXwwLG09KG09bStNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStN'@;
put 'YXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwo'@;
put 'dXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2Up'@;
put 'fDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8'@;
put 'MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChSZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgZ289KGorKEU9RStNYXRoLmltdWwoamUs'@;
put 'WHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0'@;
put 'aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQp'@;
put 'fDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxF'@;
put 'PUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStN'@;
put 'YXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwo'@;
put 'dXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4p'@;
put 'fDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBjbz0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJiht'@;
put 'PShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhjbz4+PjI2KXwwLGNvJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRo'@;
put 'LmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVs'@;
put 'KHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgX289KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0'@;
put 'aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoX28+Pj4yNil8MCxfbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStN'@;
put 'YXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBPbz0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0o'@;
put 'KEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhPbz4+PjI2KXwwLE9vJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBIbz0oaisoRT1FK01hdGguaW11'@;
put 'bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhIbz4+PjI2KXwwLEhvJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVs'@;
put 'KEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09aG8sSFsxXT1NaSxIWzJdPXZyLEhb'@;
put 'M109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09SW8sSFsxMF09THIsSFsxMV09V2ksSFsxMl09Z28sSFsxM109UW4sSFsxNF09Y28sSFsxNV09X28sSFsxNl09T28sSFsxN109SG8sSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9'@;
put 'O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4g'@;
put 'eD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIFgoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxU'@;
put 'PTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2'@;
put 'MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxi'@;
put 'KTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZC'@;
put 'aW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylD'@;
put 'W2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5z'@;
put 'aW4oMipNYXRoLlBJL0UpLG9lPTA7b2U8VDtvZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbb2Urd2VdLEplPUNbb2Urd2VdLGF0PXhbb2Urd2Ural0sTWU9Q1tvZSt3ZStqXSx2ZT10ZSphdC1zZSpNZTtNZT10ZSpNZStzZSphdCx4W29lK3dlXT1VZSso'@;
put 'YXQ9dmUpLENbb2Urd2VdPUplK01lLHhbb2Urd2Ural09VWUtYXQsQ1tvZSt3ZStqXT1KZS1NZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4'@;
put 'LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltD'@;
put 'XT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQs'@;
put 'eD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9'@;
put 'MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIq'@;
put 'dGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksb2U9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14'@;
put 'LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILG9lLHRlLEMsVCk7Zm9yKHZhciB3ZT0w'@;
put 'O3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKm9lW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKm9lW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxD'@;
put 'KSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJy'@;
put 'YXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11'@;
put 'bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53'@;
put 'b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxu'@;
put 'PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUu'@;
put 'cG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJl'@;
put 'dHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnBy'@;
put 'b3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNb'@;
put 'VF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9'@;
put 'MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihw'@;
put 'LGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2'@;
put 'YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1sw'@;
put 'XT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgb2U9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxvZT4+PlQsQT1vZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgr'@;
put 'K109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNo'@;
put 'bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0s'@;
put 'dy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8'@;
put 'ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUg'@;
put 'bnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBl'@;
put 'Lm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10'@;
put 'aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3Rv'@;
put 'dHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jk'@;
put 'c1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhp'@;
put 'cy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9'@;
put 'MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNb'@;
put 'VF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWop'@;
put 'cmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUu'@;
put 'X3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxl'@;
put 'bmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIG9lPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1v'@;
put 'ZS5uZWdhdGl2ZSYmKEM9b2UsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2Myks'@;
put 'Qy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIh'@;
put 'PT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9'@;
put 'PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVn'@;
put 'YXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYw'@;
put 'IT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06'@;
put 'Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5j'@;
put 'dGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwh'@;
put 'MCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxI'@;
put 'PXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlz'@;
put 'Lmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2'@;
put 'NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGco'@;
put 'IXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSks'@;
put 'eC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIG9lPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZvZTwyNjsrK29lLHRlPDw9MSk7aWYob2U+MClmb3IoYi5pdXNocm4ob2UpO29lLS0gPjA7KShDLmlzT2RkKCl8fFQu'@;
put 'aXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQo'@;
put 'KSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90'@;
put 'b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBvZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2Iu'@;
put 'Y21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1sw'@;
put 'XSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihvZT0wPT09Yi5jbXBuKDEp'@;
put 'P0M6VCkuY21wbigwKTwwJiZvZS5pYWRkKHApLG9lfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZl'@;
put 'PTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8'@;
put 'MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1'@;
put 'bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0gr'@;
put 'Kyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxl'@;
put 'bmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9'@;
put 'MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlz'@;
put 'Lm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYo'@;
put 'dGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9'@;
put 'MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu'@;
put 'Y21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHAp'@;
put 'fSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90'@;
put 'b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250'@;
put 'ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGgg'@;
put 'bnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMu'@;
put 'cmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0'@;
put 'aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMu'@;
put 'cmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1'@;
put 'Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMu'@;
put 'cmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCBy'@;
put 'ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkx'@;
put 'KHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJv'@;
put 'dG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdp'@;
put 'dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRo'@;
put 'aXMucmVkLnBvdyh0aGlzLHApfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNo'@;
put 'bG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1l'@;
put 'KCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9'@;
put 'dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExl'@;
put 'bmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9'@;
put 'dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53'@;
put 'b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxl'@;
put 'KHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVu'@;
put 'Y3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0'@;
put 'aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1Qr'@;
put 'Kyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxw'@;
put 'LndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgt'@;
put 'MV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRz'@;
put 'W3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihyZVtwXSlyZXR1cm4gcmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlm'@;
put 'KCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiByZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihw'@;
put 'KXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3'@;
put 'b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVk'@;
put 'KHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92'@;
put 'ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21w'@;
put 'KHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlz'@;
put 'dWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIp'@;
put 'KX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5w'@;
put 'cm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9u'@;
put 'ZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsr'@;
put 'LEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSku'@;
put 'Y21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksb2U9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVk'@;
put 'U3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTtvZT1vZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBvZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52'@;
put 'bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1i'@;
put 'LmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCkl'@;
put 'MjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxvZT1tLTE7b2U+PTA7b2UtLSl7dmFyIHRlPUE+Pm9lJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09'@;
put 'VCYmMD09PW9lKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZy'@;
put 'b209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IHplKHApfSxCKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNo'@;
put 'aWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBw'@;
put 'LndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+'@;
put 'PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4'@;
put 'PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTww'@;
put 'JiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPV8ubm1kKHVlKSx0aGlzKX0sMzQ4MjoodWUs'@;
put 'cSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDU3MTcpLHk9XygyMzE4KSxnPV8oOTc4NSksQj1fKDkwNzIpLHc9XygxMDI3KTtmdW5jdGlvbiBQKEYpe3cuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPUZ9SShQLHcpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7dGhp'@;
put 'cy5faGFzaC51cGRhdGUoRil9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiJtZDUiPT09KE89Ty50b0xvd2VyQ2FzZSgpKT9uZXcgeToicm1kMTYwIj09PU98fCJyaXBlbWQxNjAi'@;
put 'PT09Tz9uZXcgZzpuZXcgUChCKE8pKX19LDgwMjg6KHVlLHEsXyk9Pnt2YXIgST1fKDIzMTgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSl7cmV0dXJuKG5ldyBJKS51cGRhdGUoeSkuZGlnZXN0KCl9fSw4MzU1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTcxNykseT1fKDEwMzEp'@;
put 'LGc9XygxMDI3KSxCPV8oOTUwOSkuQnVmZmVyLHc9Xyg4MDI4KSxQPV8oOTc4NSksRj1fKDkwNzIpLE89Qi5hbGxvYygxMjgpO2Z1bmN0aW9uIHooTixMKXtnLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBMJiYoTD1CLmZyb20oTCkpO3ZhciBLPSJzaGE1MTIiPT09Tnx8'@;
put 'InNoYTM4NCI9PT1OPzEyODo2NDt0aGlzLl9hbGc9Tix0aGlzLl9rZXk9TCxMLmxlbmd0aD5LP0w9KCJybWQxNjAiPT09Tj9uZXcgUDpGKE4pKS51cGRhdGUoTCkuZGlnZXN0KCk6TC5sZW5ndGg8SyYmKEw9Qi5jb25jYXQoW0wsT10sSykpO2Zvcih2YXIgVz10aGlzLl9pcGFkPUIuYWxsb2NV'@;
put 'bnNhZmUoSyksWT10aGlzLl9vcGFkPUIuYWxsb2NVbnNhZmUoSyksWD0wO1g8SztYKyspV1tYXT01NF5MW1hdLFlbWF09OTJeTFtYXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09Tj9uZXcgUDpGKE4pLHRoaXMuX2hhc2gudXBkYXRlKFcpfUkoeixnKSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0'@;
put 'aW9uKE4pe3RoaXMuX2hhc2gudXBkYXRlKE4pfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgUDpGKHRoaXMuX2FsZykpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoTikuZGln'@;
put 'ZXN0KCl9LHVlLmV4cG9ydHM9ZnVuY3Rpb24oTCxLKXtyZXR1cm4icm1kMTYwIj09PShMPUwudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09TD9uZXcgeigicm1kMTYwIixLKToibWQ1Ij09PUw/bmV3IHkodyxLKTpuZXcgeihMLEspfX0sMTAzMToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgST1fKDU3MTcpLHk9Xyg5NTA5KS5CdWZmZXIsZz1fKDEwMjcpLEI9eS5hbGxvYygxMjgpLHc9NjQ7ZnVuY3Rpb24gUChGLE8pe2cuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIE8mJihPPXkuZnJvbShPKSksdGhpcy5fYWxnPUYsdGhpcy5fa2V5PU8sTy5sZW5n'@;
put 'dGg+dz9PPUYoTyk6Ty5sZW5ndGg8dyYmKE89eS5jb25jYXQoW08sQl0sdykpO2Zvcih2YXIgej10aGlzLl9pcGFkPXkuYWxsb2NVbnNhZmUodyksTj10aGlzLl9vcGFkPXkuYWxsb2NVbnNhZmUodyksTD0wO0w8dztMKyspeltMXT01NF5PW0xdLE5bTF09OTJeT1tMXTt0aGlzLl9oYXNoPVt6'@;
put 'XX1JKFAsZyksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt0aGlzLl9oYXNoLnB1c2goRil9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBGPXRoaXMuX2FsZyh5LmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyh5LmNvbmNhdChbdGhpcy5fb3Bh'@;
put 'ZCxGXSkpfSx1ZS5leHBvcnRzPVB9LDU4MzU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7cS5yYW5kb21CeXRlcz1xLnJuZz1xLnBzZXVkb1JhbmRvbUJ5dGVzPXEucHJuZz1fKDE3OTgpLHEuY3JlYXRlSGFzaD1xLkhhc2g9XygzNDgyKSxxLmNyZWF0ZUhtYWM9cS5IbWFjPV8oODM1NSk7dmFy'@;
put 'IEk9Xyg2MDQyKSx5PU9iamVjdC5rZXlzKEkpLGc9WyJzaGExIiwic2hhMjI0Iiwic2hhMjU2Iiwic2hhMzg0Iiwic2hhNTEyIiwibWQ1Iiwicm1kMTYwIl0uY29uY2F0KHkpO3EuZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGd9O3ZhciBCPV8oNTYzMik7cS5wYmtkZjI9Qi5wYmtkZjIs'@;
put 'cS5wYmtkZjJTeW5jPUIucGJrZGYyU3luYzt2YXIgdz1fKDM2MTQpO3EuQ2lwaGVyPXcuQ2lwaGVyLHEuY3JlYXRlQ2lwaGVyPXcuY3JlYXRlQ2lwaGVyLHEuQ2lwaGVyaXY9dy5DaXBoZXJpdixxLmNyZWF0ZUNpcGhlcml2PXcuY3JlYXRlQ2lwaGVyaXYscS5EZWNpcGhlcj13LkRlY2lwaGVy'@;
put 'LHEuY3JlYXRlRGVjaXBoZXI9dy5jcmVhdGVEZWNpcGhlcixxLkRlY2lwaGVyaXY9dy5EZWNpcGhlcml2LHEuY3JlYXRlRGVjaXBoZXJpdj13LmNyZWF0ZURlY2lwaGVyaXYscS5nZXRDaXBoZXJzPXcuZ2V0Q2lwaGVycyxxLmxpc3RDaXBoZXJzPXcubGlzdENpcGhlcnM7dmFyIFA9XygyNjA3'@;
put 'KTtxLkRpZmZpZUhlbGxtYW5Hcm91cD1QLkRpZmZpZUhlbGxtYW5Hcm91cCxxLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1QLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxxLmdldERpZmZpZUhlbGxtYW49UC5nZXREaWZmaWVIZWxsbWFuLHEuY3JlYXRlRGlmZmllSGVsbG1hbj1QLmNyZWF0'@;
put 'ZURpZmZpZUhlbGxtYW4scS5EaWZmaWVIZWxsbWFuPVAuRGlmZmllSGVsbG1hbjt2YXIgRj1fKDQ3NDMpO3EuY3JlYXRlU2lnbj1GLmNyZWF0ZVNpZ24scS5TaWduPUYuU2lnbixxLmNyZWF0ZVZlcmlmeT1GLmNyZWF0ZVZlcmlmeSxxLlZlcmlmeT1GLlZlcmlmeSxxLmNyZWF0ZUVDREg9Xyg2'@;
put 'MzkzKTt2YXIgTz1fKDc5MDApO3EucHVibGljRW5jcnlwdD1PLnB1YmxpY0VuY3J5cHQscS5wcml2YXRlRW5jcnlwdD1PLnByaXZhdGVFbmNyeXB0LHEucHVibGljRGVjcnlwdD1PLnB1YmxpY0RlY3J5cHQscS5wcml2YXRlRGVjcnlwdD1PLnByaXZhdGVEZWNyeXB0O3ZhciB6PV8oNzk2Myk7'@;
put 'cS5yYW5kb21GaWxsPXoucmFuZG9tRmlsbCxxLnJhbmRvbUZpbGxTeW5jPXoucmFuZG9tRmlsbFN5bmMscS5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigic29ycnksIGNyZWF0ZUNyZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbndlIGFjY2Vw'@;
put 'dCBwdWxsIHJlcXVlc3RzXG5odHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSIpfSxxLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERI'@;
put 'X05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NT'@;
put 'MV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LDIyOTY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0NDI5KSx5PV8oMzQ2NCksZz1fKDQ0'@;
put 'NTMpLEI9Xyg3Mjk2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFAsRixPKXtpZighUHx8Im9iamVjdCIhPXR5cGVvZiBQJiYiZnVuY3Rpb24iIT10eXBlb2YgUCl0aHJvdyBuZXcgZygiYG9iamAgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbmAiKTtpZigic3RyaW5nIiE9dHlwZW9mIEYm'@;
put 'JiJzeW1ib2wiIT10eXBlb2YgRil0aHJvdyBuZXcgZygiYHByb3BlcnR5YCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgc3ltYm9sYCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MyYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzNdJiZudWxsIT09YXJndW1lbnRzWzNdKXRocm93IG5ldyBnKCJg'@;
put 'bm9uRW51bWVyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD40JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNF0mJm51bGwhPT1hcmd1bWVudHNbNF0pdGhyb3cgbmV3IGcoImBub25Xcml0YWJsZWAsIGlmIHBy'@;
put 'b3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsIik7aWYoYXJndW1lbnRzLmxlbmd0aD41JiYiYm9vbGVhbiIhPXR5cGVvZiBhcmd1bWVudHNbNV0mJm51bGwhPT1hcmd1bWVudHNbNV0pdGhyb3cgbmV3IGcoImBub25Db25maWd1cmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBh'@;
put 'IGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NiYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzZdKXRocm93IG5ldyBnKCJgbG9vc2VgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4iKTt2YXIgej1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNd'@;
put 'Om51bGwsTj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJndW1lbnRzWzRdOm51bGwsTD1hcmd1bWVudHMubGVuZ3RoPjU/YXJndW1lbnRzWzVdOm51bGwsSz1hcmd1bWVudHMubGVuZ3RoPjYmJmFyZ3VtZW50c1s2XSxVPSEhQiYmQihQLEYpO2lmKEkpSShQLEYse2NvbmZpZ3VyYWJsZTpudWxsPT09'@;
put 'TCYmVT9VLmNvbmZpZ3VyYWJsZTohTCxlbnVtZXJhYmxlOm51bGw9PT16JiZVP1UuZW51bWVyYWJsZToheix2YWx1ZTpPLHdyaXRhYmxlOm51bGw9PT1OJiZVP1Uud3JpdGFibGU6IU59KTtlbHNle2lmKCFLJiYoenx8Tnx8TCkpdGhyb3cgbmV3IHkoIlRoaXMgZW52aXJvbm1lbnQgZG9lcyBu'@;
put 'b3Qgc3VwcG9ydCBkZWZpbmluZyBhIHByb3BlcnR5IGFzIG5vbi1jb25maWd1cmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWVudW1lcmFibGUuIik7UFtGXT1PfX19LDQyODk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyMjE1KSx5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1i'@;
put 'b2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJmb28iKSxnPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsQj1BcnJheS5wcm90b3R5cGUuY29uY2F0LHc9XygyMjk2KSxGPV8oMTA0NCkoKSxPPWZ1bmN0aW9uKE4sTCxLLFUpe2lmKEwgaW4gTilpZighMD09PVUpe2lmKE5bTF09PT1LKXJl'@;
put 'dHVybn1lbHNlIGlmKCFmdW5jdGlvbihOKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTiYmIltvYmplY3QgRnVuY3Rpb25dIj09PWcuY2FsbChOKX0oVSl8fCFVKCkpcmV0dXJuO0Y/dyhOLEwsSywhMCk6dyhOLEwsSyl9LHo9ZnVuY3Rpb24oTixMKXt2YXIgSz1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjI/YXJndW1lbnRzWzJdOnt9LFU9SShMKTt5JiYoVT1CLmNhbGwoVSxPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKEwpKSk7Zm9yKHZhciBXPTA7VzxVLmxlbmd0aDtXKz0xKU8oTixVW1ddLExbVVtXXV0sS1tVW1ddXSl9O3ouc3VwcG9ydHNEZXNjcmlwdG9ycz0hIUYsdWUuZXhwb3J0'@;
put 'cz16fSw1MjUxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3EudXRpbHM9XygxMjc4KSxxLkNpcGhlcj1fKDU3NTYpLHEuREVTPV8oNzc4KSxxLkNCQz1fKDkwNTEpLHEuRURFPV8oNjUxKX0sOTA1MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk3NDYpLHk9Xyg1NzE3KSxnPXt9'@;
put 'O2Z1bmN0aW9uIEIoUCl7SS5lcXVhbChQLmxlbmd0aCw4LCJJbnZhbGlkIElWIGxlbmd0aCIpLHRoaXMuaXY9bmV3IEFycmF5KDgpO2Zvcih2YXIgRj0wO0Y8dGhpcy5pdi5sZW5ndGg7RisrKXRoaXMuaXZbRl09UFtGXX1xLmluc3RhbnRpYXRlPWZ1bmN0aW9uIHcoUCl7ZnVuY3Rpb24gRihM'@;
put 'KXtQLmNhbGwodGhpcyxMKSx0aGlzLl9jYmNJbml0KCl9eShGLFApO2Zvcih2YXIgTz1PYmplY3Qua2V5cyhnKSx6PTA7ejxPLmxlbmd0aDt6Kyspe3ZhciBOPU9bel07Ri5wcm90b3R5cGVbTl09Z1tOXX1yZXR1cm4gRi5jcmVhdGU9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyBGKEspfSxGfSxn'@;
put 'Ll9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEY9bmV3IEIodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT1GfSxnLl91cGRhdGU9ZnVuY3Rpb24oRixPLHosTil7dmFyIEs9dGhpcy5jb25zdHJ1Y3Rvci5zdXBlcl8ucHJvdG90eXBlLFU9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5'@;
put 'cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylVW1ddXj1GW08rV107Zm9yKEsuX3VwZGF0ZS5jYWxsKHRoaXMsVSwwLHosTiksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKVVbV109eltOK1ddfWVsc2V7Zm9yKEsuX3VwZGF0ZS5jYWxsKHRoaXMsRixP'@;
put 'LHosTiksVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKXpbTitXXV49VVtXXTtmb3IoVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKVVbV109RltPK1ddfX19LDU3NTY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NzQ2KTtmdW5jdGlvbiB5KGcpe3RoaXMub3B0aW9ucz1nLHRoaXMu'@;
put 'dHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5wYWRkaW5nPSExIT09Zy5wYWRkaW5nfXVlLmV4cG9ydHM9eSx5LnByb3RvdHlwZS5faW5p'@;
put 'dD1mdW5jdGlvbigpe30seS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEIpe3JldHVybiAwPT09Qi5sZW5ndGg/W106ImRlY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQoQik6dGhpcy5fdXBkYXRlRW5jcnlwdChCKX0seS5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlv'@;
put 'bihCLHcpe2Zvcih2YXIgUD1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsQi5sZW5ndGgtdyksRj0wO0Y8UDtGKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrRl09Qlt3K0ZdO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9UCxQfSx5LnByb3RvdHlwZS5fZmx1'@;
put 'c2hCdWZmZXI9ZnVuY3Rpb24oQix3KXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsQix3KSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSx5LnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbihCKXt2YXIgdz0wLFA9MCxPPW5ldyBBcnJheSgoKHRoaXMu'@;
put 'YnVmZmVyT2ZmK0IubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwKSp0aGlzLmJsb2NrU2l6ZSk7MCE9PXRoaXMuYnVmZmVyT2ZmJiYodys9dGhpcy5fYnVmZmVyKEIsdyksdGhpcy5idWZmZXJPZmY9PT10aGlzLmJ1ZmZlci5sZW5ndGgmJihQKz10aGlzLl9mbHVzaEJ1ZmZlcihPLFApKSk7Zm9y'@;
put 'KHZhciB6PUIubGVuZ3RoLShCLmxlbmd0aC13KSV0aGlzLmJsb2NrU2l6ZTt3PHo7dys9dGhpcy5ibG9ja1NpemUpdGhpcy5fdXBkYXRlKEIsdyxPLFApLFArPXRoaXMuYmxvY2tTaXplO2Zvcig7dzxCLmxlbmd0aDt3KyssdGhpcy5idWZmZXJPZmYrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZl'@;
put 'ck9mZl09Qlt3XTtyZXR1cm4gT30seS5wcm90b3R5cGUuX3VwZGF0ZURlY3J5cHQ9ZnVuY3Rpb24oQil7Zm9yKHZhciB3PTAsUD0wLEY9TWF0aC5jZWlsKCh0aGlzLmJ1ZmZlck9mZitCLmxlbmd0aCkvdGhpcy5ibG9ja1NpemUpLTEsTz1uZXcgQXJyYXkoRip0aGlzLmJsb2NrU2l6ZSk7Rj4w'@;
put 'O0YtLSl3Kz10aGlzLl9idWZmZXIoQix3KSxQKz10aGlzLl9mbHVzaEJ1ZmZlcihPLFApO3JldHVybiB3Kz10aGlzLl9idWZmZXIoQix3KSxPfSx5LnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbihCKXt2YXIgdyxQO3JldHVybiBCJiYodz10aGlzLnVwZGF0ZShCKSksUD0iZW5jcnlwdCI9PT10'@;
put 'aGlzLnR5cGU/dGhpcy5fZmluYWxFbmNyeXB0KCk6dGhpcy5fZmluYWxEZWNyeXB0KCksdz93LmNvbmNhdChQKTpQfSx5LnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKEIsdyl7aWYoMD09PXcpcmV0dXJuITE7Zm9yKDt3PEIubGVuZ3RoOylCW3crK109MDtyZXR1cm4hMH0seS5wcm90b3R5cGUu'@;
put 'X2ZpbmFsRW5jcnlwdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9wYWQodGhpcy5idWZmZXIsdGhpcy5idWZmZXJPZmYpKXJldHVybltdO3ZhciBCPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEIsMCksQn0seS5wcm90b3R5cGUuX3Vu'@;
put 'cGFkPWZ1bmN0aW9uKEIpe3JldHVybiBCfSx5LnByb3RvdHlwZS5fZmluYWxEZWNyeXB0PWZ1bmN0aW9uKCl7SS5lcXVhbCh0aGlzLmJ1ZmZlck9mZix0aGlzLmJsb2NrU2l6ZSwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHQiKTt2YXIgQj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3Jl'@;
put 'dHVybiB0aGlzLl9mbHVzaEJ1ZmZlcihCLDApLHRoaXMuX3VucGFkKEIpfX0sNzc4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oOTc0NikseT1fKDU3MTcpLGc9XygxMjc4KSxCPV8oNTc1Nik7ZnVuY3Rpb24gdygpe3RoaXMudG1wPW5ldyBBcnJheSgyKSx0aGlzLmtleXM9bnVs'@;
put 'bH1mdW5jdGlvbiBQKE8pe0IuY2FsbCh0aGlzLE8pO3ZhciB6PW5ldyB3O3RoaXMuX2Rlc1N0YXRlPXosdGhpcy5kZXJpdmVLZXlzKHosTy5rZXkpfXkoUCxCKSx1ZS5leHBvcnRzPVAsUC5jcmVhdGU9ZnVuY3Rpb24oeil7cmV0dXJuIG5ldyBQKHopfTt2YXIgRj1bMSwxLDIsMiwyLDIsMiwy'@;
put 'LDEsMiwyLDIsMiwyLDIsMV07UC5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbih6LE4pe3oua2V5cz1uZXcgQXJyYXkoMzIpLEkuZXF1YWwoTi5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBMPWcucmVhZFVJbnQzMkJFKE4sMCksSz1nLnJlYWRV'@;
put 'SW50MzJCRShOLDQpO2cucGMxKEwsSyx6LnRtcCwwKSxMPXoudG1wWzBdLEs9ei50bXBbMV07Zm9yKHZhciBVPTA7VTx6LmtleXMubGVuZ3RoO1UrPTIpe3ZhciBXPUZbVT4+PjFdO0w9Zy5yMjhzaGwoTCxXKSxLPWcucjI4c2hsKEssVyksZy5wYzIoTCxLLHoua2V5cyxVKX19LFAucHJvdG90'@;
put 'eXBlLl91cGRhdGU9ZnVuY3Rpb24oeixOLEwsSyl7dmFyIFU9dGhpcy5fZGVzU3RhdGUsVz1nLnJlYWRVSW50MzJCRSh6LE4pLFk9Zy5yZWFkVUludDMyQkUoeixOKzQpO2cuaXAoVyxZLFUudG1wLDApLFc9VS50bXBbMF0sWT1VLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5f'@;
put 'ZW5jcnlwdChVLFcsWSxVLnRtcCwwKTp0aGlzLl9kZWNyeXB0KFUsVyxZLFUudG1wLDApLFk9VS50bXBbMV0sZy53cml0ZVVJbnQzMkJFKEwsVz1VLnRtcFswXSxLKSxnLndyaXRlVUludDMyQkUoTCxZLEsrNCl9LFAucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oeixOKXtpZighMT09PXRoaXMu'@;
put 'cGFkZGluZylyZXR1cm4hMTtmb3IodmFyIEw9ei5sZW5ndGgtTixLPU47Szx6Lmxlbmd0aDtLKyspeltLXT1MO3JldHVybiEwfSxQLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oeil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuIHo7Zm9yKHZhciBOPXpbei5sZW5ndGgtMV0sTD16Lmxl'@;
put 'bmd0aC1OO0w8ei5sZW5ndGg7TCsrKUkuZXF1YWwoeltMXSxOKTtyZXR1cm4gei5zbGljZSgwLHoubGVuZ3RoLU4pfSxQLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbih6LE4sTCxLLFUpe2Zvcih2YXIgVz1OLFk9TCxYPTA7WDx6LmtleXMubGVuZ3RoO1grPTIpe3ZhciBlZT16LmtleXNb'@;
put 'WF0sSj16LmtleXNbWCsxXTtnLmV4cGFuZChZLHoudG1wLDApO3ZhciByZT1nLnN1YnN0aXR1dGUoZWVePXoudG1wWzBdLEpePXoudG1wWzFdKSxsZT1ZO1k9KFdeZy5wZXJtdXRlKHJlKSk+Pj4wLFc9bGV9Zy5yaXAoWSxXLEssVSl9LFAucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKHos'@;
put 'TixMLEssVSl7Zm9yKHZhciBXPUwsWT1OLFg9ei5rZXlzLmxlbmd0aC0yO1g+PTA7WC09Mil7dmFyIGVlPXoua2V5c1tYXSxKPXoua2V5c1tYKzFdO2cuZXhwYW5kKFcsei50bXAsMCk7dmFyIHJlPWcuc3Vic3RpdHV0ZShlZV49ei50bXBbMF0sSl49ei50bXBbMV0pLGxlPVc7Vz0oWV5nLnBl'@;
put 'cm11dGUocmUpKT4+PjAsWT1sZX1nLnJpcChXLFksSyxVKX19LDY1MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk3NDYpLHk9Xyg1NzE3KSxnPV8oNTc1NiksQj1fKDc3OCk7ZnVuY3Rpb24gdyhGLE8pe0kuZXF1YWwoTy5sZW5ndGgsMjQsIkludmFsaWQga2V5IGxlbmd0aCIp'@;
put 'O3ZhciB6PU8uc2xpY2UoMCw4KSxOPU8uc2xpY2UoOCwxNiksTD1PLnNsaWNlKDE2LDI0KTt0aGlzLmNpcGhlcnM9ImVuY3J5cHQiPT09Rj9bQi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTp6fSksQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpOfSksQi5jcmVhdGUoe3R5cGU6ImVu'@;
put 'Y3J5cHQiLGtleTpMfSldOltCLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Okx9KSxCLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Ok59KSxCLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Onp9KV19ZnVuY3Rpb24gUChGKXtnLmNhbGwodGhpcyxGKTt2YXIgTz1uZXcgdyh0aGlzLnR5'@;
put 'cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9T315KFAsZyksdWUuZXhwb3J0cz1QLFAuY3JlYXRlPWZ1bmN0aW9uKE8pe3JldHVybiBuZXcgUChPKX0sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihPLHosTixMKXt2YXIgSz10aGlzLl9lZGVTdGF0ZTtLLmNpcGhlcnNb'@;
put 'MF0uX3VwZGF0ZShPLHosTixMKSxLLmNpcGhlcnNbMV0uX3VwZGF0ZShOLEwsTixMKSxLLmNpcGhlcnNbMl0uX3VwZGF0ZShOLEwsTixMKX0sUC5wcm90b3R5cGUuX3BhZD1CLnByb3RvdHlwZS5fcGFkLFAucHJvdG90eXBlLl91bnBhZD1CLnByb3RvdHlwZS5fdW5wYWR9LDEyNzg6KHVlLHEp'@;
put 'PT57InVzZSBzdHJpY3QiO3EucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEIsdyl7cmV0dXJuKEJbMCt3XTw8MjR8QlsxK3ddPDwxNnxCWzIrd108PDh8QlszK3ddKT4+PjB9LHEud3JpdGVVSW50MzJCRT1mdW5jdGlvbihCLHcsUCl7QlswK1BdPXc+Pj4yNCxCWzErUF09dz4+PjE2JjI1NSxCWzIr'@;
put 'UF09dz4+PjgmMjU1LEJbMytQXT0yNTUmd30scS5pcD1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj02O04+PTA7Ti09Mil7Zm9yKHZhciBMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD13Pj4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KU88PD0xLE98PUI+Pj5MK04mMX1mb3Io'@;
put 'Tj02O04+PTA7Ti09Mil7Zm9yKEw9MTtMPD0yNTtMKz04KXo8PD0xLHp8PXc+Pj5MK04mMTtmb3IoTD0xO0w8PTI1O0wrPTgpejw8PTEsenw9Qj4+PkwrTiYxfVBbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LHEucmlwPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTA7Tjw0'@;
put 'O04rKylmb3IodmFyIEw9MjQ7TD49MDtMLT04KU88PD0xLE98PXc+Pj5MK04mMSxPPDw9MSxPfD1CPj4+TCtOJjE7Zm9yKE49NDtOPDg7TisrKWZvcihMPTI0O0w+PTA7TC09OCl6PDw9MSx6fD13Pj4+TCtOJjEsejw8PTEsenw9Qj4+PkwrTiYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9'@;
put 'LHEucGMxPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTc7Tj49NTtOLS0pe2Zvcih2YXIgTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KU88PD0xLE98PUI+PkwrTiYxfWZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD13Pj5M'@;
put 'K04mMTtmb3IoTj0xO048PTM7TisrKXtmb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEsenw9dz4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KXo8PD0xLHp8PUI+PkwrTiYxfWZvcihMPTA7TDw9MjQ7TCs9OCl6PDw9MSx6fD1CPj5MK04mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxxLnIy'@;
put 'OHNobD1mdW5jdGlvbihCLHcpe3JldHVybiBCPDx3JjI2ODQzNTQ1NXxCPj4+Mjgtd307dmFyIF89WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIy'@;
put 'LDMsMTAsMTQsNiwyMCwyNywyNF07cS5wYzI9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49Xy5sZW5ndGg+Pj4xLEw9MDtMPE47TCsrKU88PD0xLE98PUI+Pj5fW0xdJjE7Zm9yKEw9TjtMPF8ubGVuZ3RoO0wrKyl6PDw9MSx6fD13Pj4+X1tMXSYxO1BbRiswXT1PPj4+MCxQ'@;
put 'W0YrMV09ej4+PjB9LHEuZXhwYW5kPWZ1bmN0aW9uKEIsdyxQKXt2YXIgRj0wLE89MDtGPSgxJkIpPDw1fEI+Pj4yNztmb3IodmFyIHo9MjM7ej49MTU7ei09NClGPDw9NixGfD1CPj4+eiY2Mztmb3Ioej0xMTt6Pj0zO3otPTQpT3w9Qj4+PnomNjMsTzw8PTY7T3w9KDMxJkIpPDwxfEI+Pj4z'@;
put 'MSx3W1ArMF09Rj4+PjAsd1tQKzFdPU8+Pj4wfTt2YXIgST1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3'@;
put 'LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUs'@;
put 'MiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywx'@;
put 'MywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwx'@;
put 'LDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEy'@;
put 'LDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywx'@;
put 'NCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQs'@;
put 'MTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtxLnN1YnN0aXR1dGU9ZnVuY3Rpb24oQix3KXtmb3IodmFyIFA9MCxGPTA7Rjw0O0YrKylQPDw9NCxQfD1JWzY0KkYr'@;
put 'KEI+Pj4xOC02KkYmNjMpXTtmb3IoRj0wO0Y8NDtGKyspUDw8PTQsUHw9SVsyNTYrNjQqRisodz4+PjE4LTYqRiY2MyldO3JldHVybiBQPj4+MH07dmFyIHk9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2'@;
put 'LDEwLDIxLDI4LDddO3EucGVybXV0ZT1mdW5jdGlvbihCKXtmb3IodmFyIHc9MCxQPTA7UDx5Lmxlbmd0aDtQKyspdzw8PTEsd3w9Qj4+PnlbUF0mMTtyZXR1cm4gdz4+PjB9LHEucGFkU3BsaXQ9ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgRj1CLnRvU3RyaW5nKDIpO0YubGVuZ3RoPHc7KUY9'@;
put 'IjAiK0Y7Zm9yKHZhciBPPVtdLHo9MDt6PHc7eis9UClPLnB1c2goRi5zbGljZSh6LHorUCkpO3JldHVybiBPLmpvaW4oIiAiKX19LDI2MDc6KHVlLHEsXyk9Pnt2YXIgST1fKDg3NjQpLkJ1ZmZlcix5PV8oMzU5MCksZz1fKDk3OTkpLEI9Xyg3NDI2KSxQPXtiaW5hcnk6ITAsaGV4OiEwLGJh'@;
put 'c2U2NDohMH07cS5EaWZmaWVIZWxsbWFuR3JvdXA9cS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9cS5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIHcoTyl7dmFyIHo9bmV3IEkoZ1tPXS5wcmltZSwiaGV4IiksTj1uZXcgSShnW09dLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyBCKHosTil9LHEu'@;
put 'Y3JlYXRlRGlmZmllSGVsbG1hbj1xLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24gRihPLHosTixMKXtyZXR1cm4gSS5pc0J1ZmZlcih6KXx8dm9pZCAwPT09UFt6XT9GKE8sImJpbmFyeSIseixOKTooej16fHwiYmluYXJ5IixMPUx8fCJiaW5hcnkiLE49Tnx8bmV3IEkoWzJdKSxJLmlzQnVmZmVy'@;
put 'KE4pfHwoTj1uZXcgSShOLEwpKSwibnVtYmVyIj09dHlwZW9mIE8/bmV3IEIoeShPLE4pLE4sITApOihJLmlzQnVmZmVyKE8pfHwoTz1uZXcgSShPLHopKSxuZXcgQihPLE4sITApKSl9fSw3NDI2Oih1ZSxxLF8pPT57dmFyIEk9Xyg4NzY0KS5CdWZmZXIseT1fKDM2MjApLEI9bmV3KF8oMzA0'@;
put 'NykpLHc9bmV3IHkoMjQpLFA9bmV3IHkoMTEpLEY9bmV3IHkoMTApLE89bmV3IHkoMyksej1uZXcgeSg3KSxOPV8oMzU5MCksTD1fKDE3OTgpO2Z1bmN0aW9uIEsoSixyZSl7cmV0dXJuIHJlPXJlfHwidXRmOCIsSS5pc0J1ZmZlcihKKXx8KEo9bmV3IEkoSixyZSkpLHRoaXMuX3B1Yj1uZXcg'@;
put 'eShKKSx0aGlzfWZ1bmN0aW9uIFUoSixyZSl7cmV0dXJuIHJlPXJlfHwidXRmOCIsSS5pc0J1ZmZlcihKKXx8KEo9bmV3IEkoSixyZSkpLHRoaXMuX3ByaXY9bmV3IHkoSiksdGhpc311ZS5leHBvcnRzPVg7dmFyIFc9e307ZnVuY3Rpb24gWChKLHJlLGllKXt0aGlzLnNldEdlbmVyYXRvcihy'@;
put 'ZSksdGhpcy5fX3ByaW1lPW5ldyB5KEopLHRoaXMuX3ByaW1lPXkubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPUoubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxpZT8odGhpcy5zZXRQdWJsaWNLZXk9Syx0'@;
put 'aGlzLnNldFByaXZhdGVLZXk9VSk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gZWUoSixyZSl7dmFyIGllPW5ldyBJKEoudG9BcnJheSgpKTtyZXR1cm4gcmU/aWUudG9TdHJpbmcocmUpOmllfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShYLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVt'@;
put 'ZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5fcHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uIFkoSixyZSl7dmFyIGllPXJlLnRvU3RyaW5nKCJoZXgiKSxsZT1baWUsSi50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihsZSBp'@;
put 'biBXKXJldHVybiBXW2xlXTt2YXIgX2UsbWU9MDtpZihKLmlzRXZlbigpfHwhTi5zaW1wbGVTaWV2ZXx8IU4uZmVybWF0VGVzdChKKXx8IUIudGVzdChKKSlyZXR1cm4gbWUrPTEsV1tsZV09bWUrPSIwMiI9PT1pZXx8IjA1Ij09PWllPzg6NCxtZTtzd2l0Y2goQi50ZXN0KEouc2hybigxKSl8'@;
put 'fChtZSs9MiksaWUpe2Nhc2UiMDIiOkoubW9kKHcpLmNtcChQKSYmKG1lKz04KTticmVhaztjYXNlIjA1IjooX2U9Si5tb2QoRikpLmNtcChPKSYmX2UuY21wKHopJiYobWUrPTgpO2JyZWFrO2RlZmF1bHQ6bWUrPTR9cmV0dXJuIFdbbGVdPW1lLG1lfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dl'@;
put 'bikpLHRoaXMuX3ByaW1lQ29kZX19KSxYLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IHkoTCh0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhp'@;
put 'cy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LFgucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oSil7dmFyIHJlPShKPShKPW5ldyB5KEopKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksaWU9bmV3IEkocmUudG9B'@;
put 'cnJheSgpKSxsZT10aGlzLmdldFByaW1lKCk7aWYoaWUubGVuZ3RoPGxlLmxlbmd0aCl7dmFyIG1lPW5ldyBJKGxlLmxlbmd0aC1pZS5sZW5ndGgpO21lLmZpbGwoMCksaWU9SS5jb25jYXQoW21lLGllXSl9cmV0dXJuIGllfSxYLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24ocmUp'@;
put 'e3JldHVybiBlZSh0aGlzLl9wdWIscmUpfSxYLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKHJlKXtyZXR1cm4gZWUodGhpcy5fcHJpdixyZSl9LFgucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKEope3JldHVybiBlZSh0aGlzLl9fcHJpbWUsSil9LFgucHJvdG90eXBlLmdl'@;
put 'dEdlbmVyYXRvcj1mdW5jdGlvbihKKXtyZXR1cm4gZWUodGhpcy5fZ2VuLEopfSxYLnByb3RvdHlwZS5zZXRHZW5lcmF0b3I9ZnVuY3Rpb24oSixyZSl7cmV0dXJuIHJlPXJlfHwidXRmOCIsSS5pc0J1ZmZlcihKKXx8KEo9bmV3IEkoSixyZSkpLHRoaXMuX19nZW49Six0aGlzLl9nZW49bmV3'@;
put 'IHkoSiksdGhpc319LDM1OTA6KHVlLHEsXyk9Pnt2YXIgST1fKDE3OTgpO3VlLmV4cG9ydHM9bGUsbGUuc2ltcGxlU2lldmU9cmUsbGUuZmVybWF0VGVzdD1pZTt2YXIgeT1fKDM2MjApLGc9bmV3IHkoMjQpLHc9bmV3KF8oMzA0NykpLFA9bmV3IHkoMSksRj1uZXcgeSgyKSxPPW5ldyB5KDUp'@;
put 'LEw9KG5ldyB5KDE2KSxuZXcgeSg4KSxuZXcgeSgxMCkpLEs9bmV3IHkoMyksVz0obmV3IHkoNyksbmV3IHkoMTEpKSxZPW5ldyB5KDQpLGVlPShuZXcgeSgxMiksbnVsbCk7ZnVuY3Rpb24gcmUobWUpe2Zvcih2YXIgX2U9ZnVuY3Rpb24gSigpe2lmKG51bGwhPT1lZSlyZXR1cm4gZWU7dmFy'@;
put 'IF9lPVtdO19lWzBdPTI7Zm9yKHZhciBUZT0xLFNlPTM7U2U8MTA0ODU3NjtTZSs9Mil7Zm9yKHZhciB6ZT1NYXRoLmNlaWwoTWF0aC5zcXJ0KFNlKSksVj0wO1Y8VGUmJl9lW1ZdPD16ZSYmU2UlX2VbVl0hPTA7VisrKTtUZSE9PVYmJl9lW1ZdPD16ZXx8KF9lW1RlKytdPVNlKX1yZXR1cm4g'@;
put 'ZWU9X2UsX2V9KCksVGU9MDtUZTxfZS5sZW5ndGg7VGUrKylpZigwPT09bWUubW9kbihfZVtUZV0pKXJldHVybiAwPT09bWUuY21wbihfZVtUZV0pO3JldHVybiEwfWZ1bmN0aW9uIGllKG1lKXt2YXIgX2U9eS5tb250KG1lKTtyZXR1cm4gMD09PUYudG9SZWQoX2UpLnJlZFBvdyhtZS5zdWJu'@;
put 'KDEpKS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiBsZShtZSxfZSl7aWYobWU8MTYpcmV0dXJuIG5ldyB5KDI9PT1fZXx8NT09PV9lP1sxNDAsMTIzXTpbMTQwLDM5XSk7X2U9bmV3IHkoX2UpO2Zvcih2YXIgVGUsU2U7Oyl7Zm9yKFRlPW5ldyB5KEkoTWF0aC5jZWlsKG1lLzgpKSk7VGUu'@;
put 'Yml0TGVuZ3RoKCk+bWU7KVRlLmlzaHJuKDEpO2lmKFRlLmlzRXZlbigpJiZUZS5pYWRkKFApLFRlLnRlc3RuKDEpfHxUZS5pYWRkKEYpLF9lLmNtcChGKSl7aWYoIV9lLmNtcChPKSlmb3IoO1RlLm1vZChMKS5jbXAoSyk7KVRlLmlhZGQoWSl9ZWxzZSBmb3IoO1RlLm1vZChnKS5jbXAoVyk7'@;
put 'KVRlLmlhZGQoWSk7aWYocmUoU2U9VGUuc2hybigxKSkmJnJlKFRlKSYmaWUoU2UpJiZpZShUZSkmJncudGVzdChTZSkmJncudGVzdChUZSkpcmV0dXJuIFRlfX19LDM2MjA6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSx5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFW'@;
put 'KXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHco'@;
put 'VixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9'@;
put 'dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13OnkuQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Xyg3NzQ4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixw'@;
put 'KXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3Io'@;
put 'dmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09'@;
put 'cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/'@;
put 'cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhi'@;
put 'PT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyks'@;
put 'ImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9'@;
put 'MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMp'@;
put 'LCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9'@;
put 'MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0w'@;
put 'O0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0'@;
put 'aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4'@;
put 'PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3Io'@;
put 'Qz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxi'@;
put 'LEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZh'@;
put 'ciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlz'@;
put 'LndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgb2U9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylvZSo9Yjt0aGlzLmltdWxuKG9lKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlz'@;
put 'LnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVn'@;
put 'YXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0'@;
put 'aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5j'@;
put 'dGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3Zh'@;
put 'ciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw'@;
put 'MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1b'@;
put 'MCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYs'@;
put 'NDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZl'@;
put 'PXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKysp'@;
put 'e2Zvcih2YXIgQT1FPj4+MjYsb2U9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrb2UpLzY3MTA4ODY0fDAsb2U9Njcx'@;
put 'MDg4NjMmSDtiLndvcmRzW21dPTB8b2UsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtm'@;
put 'b3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9O'@;
put 'WzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2'@;
put 'YXIgb2U9dGhpcy5jbG9uZSgpO2ZvcihvZS5uZWdhdGl2ZT0wOyFvZS5pc1plcm8oKTspe3ZhciB0ZT1vZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KG9lPW9lLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4'@;
put 'Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10'@;
put 'aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUg'@;
put 'dXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJh'@;
put 'eUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxD'@;
put 'KTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNa'@;
put 'ZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9'@;
put 'LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+'@;
put 'PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQp'@;
put 'LDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1m'@;
put 'dW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5j'@;
put 'dGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9'@;
put 'ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVy'@;
put 'biB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNb'@;
put 'dGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRp'@;
put 'dmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5s'@;
put 'ZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jk'@;
put 'c1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24o'@;
put 'cCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1'@;
put 'YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhp'@;
put 'cyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMu'@;
put 'aXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3Ro'@;
put 'P3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2'@;
put 'YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz'@;
put 'LmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndv'@;
put 'cmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMu'@;
put 'X25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFy'@;
put 'IFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9'@;
put 'Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5h'@;
put 'ZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3Vi'@;
put 'KHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFk'@;
put 'ZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVy'@;
put 'biB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jk'@;
put 'c1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29y'@;
put 'ZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAs'@;
put 'Yix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLG9lPTB8Q1swXSx0ZT04MTkxJm9lLHNlPW9lPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxhdD0wfENbMl0sTWU9ODE5MSZhdCx2ZT1hdD4+PjEzLFhlPTB8Q1szXSxqZT04MTkxJlhl'@;
put 'LERlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1E'@;
put 'dD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxzaT0wfFRbMV0sUXQ9ODE5MSZzaSxzbj1zaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4x'@;
put 'MyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxCbj0wfFRbN10scm49ODE5MSZCbix6dD1Cbj4+PjEzLGhpPTB8VFs4XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9'@;
put 'MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgaG89KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8'@;
put 'MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgTWk9KGorKEU9RStNYXRoLmlt'@;
put 'dWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoTWk+Pj4yNil8MCxNaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09'@;
put 'KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1F'@;
put 'K01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02NzEwODg2MyxFPU1hdGguaW11bChq'@;
put 'ZSxSdCksbT0obT1NYXRoLmltdWwoamUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01h'@;
put 'dGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5p'@;
put 'bXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0'@;
put 'KSxFPUUrTWF0aC5pbXVsKGplLFF0KXwwLG09KG09bStNYXRoLmltdWwoamUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9'@;
put 'QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1t'@;
put 'K01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVs'@;
put 'KEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAsbT0obT1tK01hdGguaW11bChqZSxm'@;
put 'dCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09'@;
put 'KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMp'@;
put 'fDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2Us'@;
put 'UXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8'@;
put 'MCxFPUUrTWF0aC5pbXVsKGplLFd0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxVdCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9'@;
put 'QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1t'@;
put 'K01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVs'@;
put 'KE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAsbT0obT1tK01hdGguaW11bChrZSxm'@;
put 'dCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09'@;
put 'KG09bStNYXRoLmltdWwoamUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01h'@;
put 'dGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5p'@;
put 'bXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0'@;
put 'KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9'@;
put 'QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01h'@;
put 'dGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoamUsV2UpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0'@;
put 'aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1F'@;
put 'K01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02NzEwODg2MyxFPU1hdGguaW11bChI'@;
put 'ZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01h'@;
put 'dGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5p'@;
put 'bXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwo'@;
put 'SWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXwwLG09KG09bStNYXRoLmltdWwoamUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUscm4pfDAsbT0obT1tK01hdGguaW11bChN'@;
put 'ZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2YXIgSW89KGorKEU9RStNYXRoLmlt'@;
put 'dWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09'@;
put 'KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwo'@;
put 'eXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxV'@;
put 'dCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXww'@;
put 'LEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChqZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLGNuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZm4pfDAp'@;
put 'K01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUs'@;
put 'ZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3QpfDAsbT0obT1tK01hdGguaW11bChp'@;
put 'dCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXww'@;
put 'LG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1F'@;
put 'K01hdGguaW11bChSZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLGNuKXwwLG09KG09bStNYXRoLmltdWwoamUsZm4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0'@;
put 'aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2'@;
put 'KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXww'@;
put 'LEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09bStNYXRoLmltdWwobnQseHQpfDAp'@;
put 'K01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChSZSxjbil8MCxtPShtPW0r'@;
put 'TWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgZ289KGorKEU9RStNYXRoLmltdWwoamUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9'@;
put 'KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXww'@;
put 'LG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1F'@;
put 'K01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0'@;
put 'aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2'@;
put 'KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXww'@;
put 'LEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09bStNYXRoLmltdWwobnQsZm4pfDAp'@;
put 'K01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBjbz0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUs'@;
put 'ZW4pfDApKyhtPj4+MTMpfDApKyhjbz4+PjI2KXwwLGNvJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4pfDAsbT0obT1tK01hdGguaW11bChp'@;
put 'dCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2YXIgX289KGorKEU9RStNYXRoLmlt'@;
put 'dWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoX28+Pj4yNil8MCxfbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09'@;
put 'KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLGZuKXwwO3ZhciBPbz0oaisoRT1F'@;
put 'K01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhPbz4+PjI2KXwwLE9vJj02NzEwODg2MyxFPU1hdGguaW11bChI'@;
put 'ZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBIbz0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMp'@;
put 'fDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhIbz4+PjI2KXwwLEhvJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1'@;
put 'cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09aG8sSFsxXT1NaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09SW8sSFsxMF09THIsSFsxMV09V2ksSFsx'@;
put 'Ml09Z28sSFsxM109UW4sSFsxNF09Y28sSFsxNV09X28sSFsxNl09T28sSFsxN109SG8sSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlz'@;
put 'Lnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0'@;
put 'aW9uIFgoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3Ro'@;
put 'LTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2'@;
put 'LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9'@;
put 'dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgx'@;
put 'JnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMu'@;
put 'cGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLG9lPTA7b2U8VDtvZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhb'@;
put 'b2Urd2VdLEplPUNbb2Urd2VdLGF0PXhbb2Urd2Ural0sTWU9Q1tvZSt3ZStqXSx2ZT10ZSphdC1zZSpNZTtNZT10ZSpNZStzZSphdCx4W29lK3dlXT1VZSsoYXQ9dmUpLENbb2Urd2VdPUplK01lLHhbb2Urd2Ural09VWUtYXQsQ1tvZSt3ZStqXT1KZS1NZSx3ZSE9PUUmJih2ZT1tKnRlLUEq'@;
put 'c2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rp'@;
put 'b24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9'@;
put 'MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4'@;
put 'LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9y'@;
put 'KHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcg'@;
put 'QXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksb2U9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIu'@;
put 'd29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILG9lLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKm9lW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKm9lW3dl'@;
put 'XSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0'@;
put 'aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIg'@;
put 'Yj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9u'@;
put 'KHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhp'@;
put 'cy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVy'@;
put 'biB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7'@;
put 'YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytD'@;
put 'PGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIp'@;
put 'LzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgs'@;
put 'dGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5p'@;
put 'c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRo'@;
put 'Lm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+'@;
put 'SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIg'@;
put 'b2U9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxvZT4+PlQsQT1vZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90'@;
put 'b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7'@;
put 'cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRl'@;
put 'c3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBw'@;
put 'JiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0'@;
put 'aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlv'@;
put 'bihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVn'@;
put 'YXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndv'@;
put 'cmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1'@;
put 'Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhp'@;
put 'cy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4'@;
put 'NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnBy'@;
put 'b3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBh'@;
put 'bmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9y'@;
put 'KDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53'@;
put 'b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9'@;
put 'KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0u'@;
put 'bGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIG9lPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1vZS5uZWdhdGl2ZSYmKEM9b2UsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEw'@;
put 'ODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQs'@;
put 'MSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAs'@;
put 'Yix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1i'@;
put 'JiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9k'@;
put 'fSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21w'@;
put 'KHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jk'@;
put 'c1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0'@;
put 'dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1pl'@;
put 'cm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6'@;
put 'Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49'@;
put 'ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1m'@;
put 'dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zv'@;
put 'cih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIG9lPTAs'@;
put 'dGU9MTshKGIud29yZHNbMF0mdGUpJiZvZTwyNjsrK29lLHRlPDw9MSk7aWYob2U+MClmb3IoYi5pdXNocm4ob2UpO29lLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTsh'@;
put 'KHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMu'@;
put 'aXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBvZSxiPXRoaXMseD1w'@;
put 'LmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtp'@;
put 'ZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxU'@;
put 'Lml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihvZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZvZS5pYWRkKHApLG9lfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8o'@;
put 'KSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJu'@;
put 'KDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1'@;
put 'c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+'@;
put 'dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3Ro'@;
put 'PD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9'@;
put 'PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRo'@;
put 'aXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4'@;
put 'PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0'@;
put 'dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAs'@;
put 'eD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcu'@;
put 'cHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUu'@;
put 'bHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5j'@;
put 'dGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBT'@;
put 'ZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlz'@;
put 'KS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9y'@;
put 'Y2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBl'@;
put 'LnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9u'@;
put 'bHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBl'@;
put 'LnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBv'@;
put 'bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJl'@;
put 'ZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5y'@;
put 'ZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVk'@;
put 'LCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51'@;
put 'bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyks'@;
put 'dGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJl'@;
put 'ZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5j'@;
put 'dGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsy'@;
put 'NTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAw'@;
put 'MDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRl'@;
put 'ciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVz'@;
put 'aGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIp'@;
put 'LHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3Zh'@;
put 'ciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxl'@;
put 'bmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmlt'@;
put 'dWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53'@;
put 'b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49'@;
put 'MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAu'@;
put 'd29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxC'@;
put 'KFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0'@;
put 'aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihyZVtwXSlyZXR1cm4gcmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93'@;
put 'IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiByZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5'@;
put 'IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4g'@;
put 'cC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNl'@;
put 'UmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnky'@;
put 'KHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5p'@;
put 'YWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmlt'@;
put 'dWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1m'@;
put 'dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1'@;
put 'c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMu'@;
put 'bS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksb2U9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJu'@;
put 'KDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTtvZT1vZS5yZWRNdWwoSmUp'@;
put 'LEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBvZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMu'@;
put 'aW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sx'@;
put 'XT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxvZT1tLTE7b2U+'@;
put 'PTA7b2UtLSl7dmFyIHRlPUE+Pm9lJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PW9lKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5j'@;
put 'b252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1'@;
put 'cm4gbmV3IHplKHApfSxCKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52'@;
put 'KSk7cmV0dXJuIGIucmVkPW51bGwsYn0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWlu'@;
put 'dikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5w'@;
put 'cm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMu'@;
put 'bSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVy'@;
put 'biB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPV8ubm1kKHVlKSx0aGlzKX0sNjUwNDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZyxJPV8oMzE5KSx5PV8oNzI5Nik7dHJ5e2c9W10uX19wcm90b19fPT09QXJyYXkucHJv'@;
put 'dG90eXBlfWNhdGNoKEYpe2lmKCFGfHwib2JqZWN0IiE9dHlwZW9mIEZ8fCEoImNvZGUiaW4gRil8fCJFUlJfUFJPVE9fQUNDRVNTIiE9PUYuY29kZSl0aHJvdyBGfXZhciBCPSEhZyYmeSYmeShPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKSx3PU9iamVjdCxQPXcuZ2V0UHJvdG90eXBl'@;
put 'T2Y7dWUuZXhwb3J0cz1CJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5nZXQ/SShbQi5nZXRdKToiZnVuY3Rpb24iPT10eXBlb2YgUCYmZnVuY3Rpb24oTyl7cmV0dXJuIFAobnVsbD09Tz9POncoTykpfX0sNjk0ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1xO0kudmVyc2lvbj1fKDg1'@;
put 'OTcpLmk4LEkudXRpbHM9Xyg5NTMpLEkucmFuZD1fKDk5MzEpLEkuY3VydmU9Xyg4MjU0KSxJLmN1cnZlcz1fKDU0MjcpLEkuZWM9Xyg3OTU0KSxJLmVkZHNhPV8oNTk4MCl9LDQ5MTg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzNzg1KSx5PV8oOTUzKSxnPXkuZ2V0TkFGLEI9'@;
put 'eS5nZXRKU0Ysdz15LmFzc2VydDtmdW5jdGlvbiBQKE8seil7dGhpcy50eXBlPU8sdGhpcy5wPW5ldyBJKHoucCwxNiksdGhpcy5yZWQ9ei5wcmltZT9JLnJlZCh6LnByaW1lKTpJLm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IEkoMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBJ'@;
put 'KDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgSSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPXoubiYmbmV3IEkoei5uLDE2KSx0aGlzLmc9ei5nJiZ0aGlzLnBvaW50RnJvbUpTT04oei5nLHouZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3'@;
put 'IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBOPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFOfHxOLmNtcG4oMTAwKT4wP3RoaXMucmVk'@;
put 'Tj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIEYoTyx6KXt0aGlzLmN1cnZlPU8sdGhpcy50eXBlPXosdGhpcy5wcmVjb21wdXRlZD1udWxsfXVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlv'@;
put 'bigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sUC5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKHosTil7dyh6LnByZWNvbXB1dGVkKTt2'@;
put 'YXIgTD16Ll9nZXREb3VibGVzKCksSz1nKE4sMSx0aGlzLl9iaXRMZW5ndGgpLFU9KDE8PEwuc3RlcCsxKS0oTC5zdGVwJTI9PTA/MjoxKTtVLz0zO3ZhciBZLFgsVz1bXTtmb3IoWT0wO1k8Sy5sZW5ndGg7WSs9TC5zdGVwKXtYPTA7Zm9yKHZhciBlZT1ZK0wuc3RlcC0xO2VlPj1ZO2VlLS0p'@;
put 'WD0oWDw8MSkrS1tlZV07Vy5wdXNoKFgpfWZvcih2YXIgSj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkscmU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGllPVU7aWU+MDtpZS0tKXtmb3IoWT0wO1k8Vy5sZW5ndGg7WSsrKShYPVdbWV0pPT09aWU/cmU9cmUubWl4ZWRBZGQoTC5w'@;
put 'b2ludHNbWV0pOlg9PT0taWUmJihyZT1yZS5taXhlZEFkZChMLnBvaW50c1tZXS5uZWcoKSkpO0o9Si5hZGQocmUpfXJldHVybiBKLnRvUCgpfSxQLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbih6LE4pe2Zvcih2YXIgTD00LEs9ei5fZ2V0TkFGUG9pbnRzKEwpLFU9Sy5wb2ludHMsVz1n'@;
put 'KE4sTD1LLnduZCx0aGlzLl9iaXRMZW5ndGgpLFk9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLFg9Vy5sZW5ndGgtMTtYPj0wO1gtLSl7Zm9yKHZhciBlZT0wO1g+PTAmJjA9PT1XW1hdO1gtLSllZSsrO2lmKFg+PTAmJmVlKyssWT1ZLmRibHAoZWUpLFg8MClicmVhazt2YXIgSj1XW1hd'@;
put 'O3coMCE9PUopLFk9ImFmZmluZSI9PT16LnR5cGU/WS5taXhlZEFkZChKPjA/VVtKLTE+PjFdOlVbLUotMT4+MV0ubmVnKCkpOlkuYWRkKEo+MD9VW0otMT4+MV06VVstSi0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT16LnR5cGU/WS50b1AoKTpZfSxQLnByb3RvdHlwZS5fd25hZk11'@;
put 'bEFkZD1mdW5jdGlvbih6LE4sTCxLLFUpe3ZhciBKLHJlLGllLFc9dGhpcy5fd25hZlQxLFk9dGhpcy5fd25hZlQyLFg9dGhpcy5fd25hZlQzLGVlPTA7Zm9yKEo9MDtKPEs7SisrKXt2YXIgbGU9KGllPU5bSl0pLl9nZXROQUZQb2ludHMoeik7V1tKXT1sZS53bmQsWVtKXT1sZS5wb2ludHN9'@;
put 'Zm9yKEo9Sy0xO0o+PTE7Si09Mil7dmFyIG1lPUotMSxfZT1KO2lmKDE9PT1XW21lXSYmMT09PVdbX2VdKXt2YXIgVGU9W05bbWVdLG51bGwsbnVsbCxOW19lXV07MD09PU5bbWVdLnkuY21wKE5bX2VdLnkpPyhUZVsxXT1OW21lXS5hZGQoTltfZV0pLFRlWzJdPU5bbWVdLnRvSigpLm1peGVk'@;
put 'QWRkKE5bX2VdLm5lZygpKSk6MD09PU5bbWVdLnkuY21wKE5bX2VdLnkucmVkTmVnKCkpPyhUZVsxXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXSksVGVbMl09TlttZV0uYWRkKE5bX2VdLm5lZygpKSk6KFRlWzFdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdKSxUZVsyXT1OW21lXS50'@;
put 'b0ooKS5taXhlZEFkZChOW19lXS5uZWcoKSkpO3ZhciBTZT1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSx6ZT1CKExbbWVdLExbX2VdKTtmb3IoZWU9TWF0aC5tYXgoemVbMF0ubGVuZ3RoLGVlKSxYW21lXT1uZXcgQXJyYXkoZWUpLFhbX2VdPW5ldyBBcnJheShlZSkscmU9MDtyZTxlZTtyZSsr'@;
put 'KVhbbWVdW3JlXT1TZVszKigxKygwfHplWzBdW3JlXSkpKygxKygwfHplWzFdW3JlXSkpXSxYW19lXVtyZV09MCxZW21lXT1UZX1lbHNlIFhbbWVdPWcoTFttZV0sV1ttZV0sdGhpcy5fYml0TGVuZ3RoKSxYW19lXT1nKExbX2VdLFdbX2VdLHRoaXMuX2JpdExlbmd0aCksZWU9TWF0aC5tYXgo'@;
put 'WFttZV0ubGVuZ3RoLGVlKSxlZT1NYXRoLm1heChYW19lXS5sZW5ndGgsZWUpfXZhciBiPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSx4PXRoaXMuX3duYWZUNDtmb3IoSj1lZTtKPj0wO0otLSl7Zm9yKHZhciBDPTA7Sj49MDspe3ZhciBUPSEwO2ZvcihyZT0wO3JlPEs7cmUrKyl4W3Jl'@;
put 'XT0wfFhbcmVdW0pdLDAhPT14W3JlXSYmKFQ9ITEpO2lmKCFUKWJyZWFrO0MrKyxKLS19aWYoSj49MCYmQysrLGI9Yi5kYmxwKEMpLEo8MClicmVhaztmb3IocmU9MDtyZTxLO3JlKyspe3ZhciBIPXhbcmVdOzAhPT1IJiYoSD4wP2llPVlbcmVdW0gtMT4+MV06SDwwJiYoaWU9WVtyZV1bLUgt'@;
put 'MT4+MV0ubmVnKCkpLGI9ImFmZmluZSI9PT1pZS50eXBlP2IubWl4ZWRBZGQoaWUpOmIuYWRkKGllKSl9fWZvcihKPTA7SjxLO0orKylZW0pdPW51bGw7cmV0dXJuIFU/YjpiLnRvUCgpfSxQLkJhc2VQb2ludD1GLEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJO'@;
put 'b3QgaW1wbGVtZW50ZWQiKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sUC5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oeixOKXt6PXkudG9BcnJheSh6LE4pO3ZhciBMPXRoaXMucC5ieXRlTGVuZ3RoKCk7'@;
put 'aWYoKDQ9PT16WzBdfHw2PT09elswXXx8Nz09PXpbMF0pJiZ6Lmxlbmd0aC0xPT0yKkwpcmV0dXJuIDY9PT16WzBdP3coelt6Lmxlbmd0aC0xXSUyPT0wKTo3PT09elswXSYmdyh6W3oubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoei5zbGljZSgxLDErTCksei5zbGljZSgxK0wsMSsyKkwp'@;
put 'KTtpZigoMj09PXpbMF18fDM9PT16WzBdKSYmei5sZW5ndGgtMT09PUwpcmV0dXJuIHRoaXMucG9pbnRGcm9tWCh6LnNsaWNlKDEsMStMKSwzPT09elswXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxGLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0'@;
put 'aW9uKHope3JldHVybiB0aGlzLmVuY29kZSh6LCEwKX0sRi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbih6KXt2YXIgTj10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLEw9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLE4pO3JldHVybiB6P1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNv'@;
put 'bmNhdChMKTpbNF0uY29uY2F0KEwsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLE4pKX0sRi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHosTil7cmV0dXJuIHkuZW5jb2RlKHRoaXMuX2VuY29kZShOKSx6KX0sRi5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbih6KXtpZih0aGlzLnBy'@;
put 'ZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBOPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gTi5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLE4uZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQseiksTi5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1'@;
put 'dGVkPU4sdGhpc30sRi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oeil7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIE49dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhTiYmTi5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKHouYml0TGVuZ3RoKCkrMSkv'@;
put 'Ti5zdGVwKX0sRi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oeixOKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIEw9W3RoaXNdLEs9dGhpcyxVPTA7VTxOO1UrPXope2Zv'@;
put 'cih2YXIgVz0wO1c8ejtXKyspSz1LLmRibCgpO0wucHVzaChLKX1yZXR1cm57c3RlcDp6LHBvaW50czpMfX0sRi5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbih6KXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRl'@;
put 'ZC5uYWY7Zm9yKHZhciBOPVt0aGlzXSxMPSgxPDx6KS0xLEs9MT09PUw/bnVsbDp0aGlzLmRibCgpLFU9MTtVPEw7VSsrKU5bVV09TltVLTFdLmFkZChLKTtyZXR1cm57d25kOnoscG9pbnRzOk59fSxGLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxGLnByb3Rv'@;
put 'dHlwZS5kYmxwPWZ1bmN0aW9uKHope2Zvcih2YXIgTj10aGlzLEw9MDtMPHo7TCsrKU49Ti5kYmwoKTtyZXR1cm4gTn19LDExMzg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NTMpLHk9XygzNzg1KSxnPV8oNTcxNyksQj1fKDQ5MTgpLHc9SS5hc3NlcnQ7ZnVuY3Rpb24gUChP'@;
put 'KXt0aGlzLnR3aXN0ZWQ9MSE9KDB8Ty5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmLTE9PSgwfE8uYSksdGhpcy5leHRlbmRlZD10aGlzLm1PbmVBLEIuY2FsbCh0aGlzLCJlZHdhcmRzIixPKSx0aGlzLmE9bmV3IHkoTy5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEu'@;
put 'dG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgeShPLmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IHkoTy5kLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksdyghdGhpcy50d2lzdGVkfHwwPT09'@;
put 'dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09KDB8Ty5jKX1mdW5jdGlvbiBGKE8seixOLEwsSyl7Qi5CYXNlUG9pbnQuY2FsbCh0aGlzLE8sInByb2plY3RpdmUiKSxudWxsPT09eiYmbnVsbD09PU4mJm51bGw9PT1MPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMu'@;
put 'eT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IHkoeiwxNiksdGhpcy55PW5ldyB5KE4sMTYpLHRoaXMuej1MP25ldyB5KEwsMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1LJiZuZXcg'@;
put 'eShLLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQm'@;
put 'JiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9'@;
put 'dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX1nKFAsQiksdWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLm1PbmVBP3oucmVkTmVnKCk6dGhpcy5hLnJlZE11bCh6KX0sUC5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24oeil7cmV0'@;
put 'dXJuIHRoaXMub25lQz96OnRoaXMuYy5yZWRNdWwoeil9LFAucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gdGhpcy5wb2ludCh6LE4sTCxLKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbih6LE4peyh6PW5ldyB5KHosMTYpKS5yZWR8fCh6PXoudG9S'@;
put 'ZWQodGhpcy5yZWQpKTt2YXIgTD16LnJlZFNxcigpLEs9dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChMKSksVT10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwoTCkpLFc9Sy5yZWRNdWwoVS5yZWRJbnZtKCkpLFk9Vy5yZWRTcXJ0KCk7aWYoMCE9PVku'@;
put 'cmVkU3FyKCkucmVkU3ViKFcpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBYPVkuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKE4mJiFYfHwhTiYmWCkmJihZPVkucmVkTmVnKCkpLHRoaXMucG9pbnQoeixZKX0sUC5wcm90b3R5cGUucG9pbnRG'@;
put 'cm9tWT1mdW5jdGlvbih6LE4peyh6PW5ldyB5KHosMTYpKS5yZWR8fCh6PXoudG9SZWQodGhpcy5yZWQpKTt2YXIgTD16LnJlZFNxcigpLEs9TC5yZWRTdWIodGhpcy5jMiksVT1MLnJlZE11bCh0aGlzLmQpLnJlZE11bCh0aGlzLmMyKS5yZWRTdWIodGhpcy5hKSxXPUsucmVkTXVsKFUucmVk'@;
put 'SW52bSgpKTtpZigwPT09Vy5jbXAodGhpcy56ZXJvKSl7aWYoTil0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8seil9dmFyIFk9Vy5yZWRTcXJ0KCk7aWYoMCE9PVkucmVkU3FyKCkucmVkU3ViKFcpLmNtcCh0aGlzLnplcm8pKXRo'@;
put 'cm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiBZLmZyb21SZWQoKS5pc09kZCgpIT09TiYmKFk9WS5yZWROZWcoKSksdGhpcy5wb2ludChZLHopfSxQLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih6KXtpZih6LmlzSW5maW5pdHkoKSlyZXR1cm4hMDt6Lm5vcm1hbGl6'@;
put 'ZSgpO3ZhciBOPXoueC5yZWRTcXIoKSxMPXoueS5yZWRTcXIoKSxLPU4ucmVkTXVsKHRoaXMuYSkucmVkQWRkKEwpLFU9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoTikucmVkTXVsKEwpKSk7cmV0dXJuIDA9PT1LLmNtcChVKX0sZyhGLEIuQmFzZVBvaW50'@;
put 'KSxQLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHope3JldHVybiBGLmZyb21KU09OKHRoaXMseil9LFAucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHosTixMLEspe3JldHVybiBuZXcgRih0aGlzLHosTixMLEspfSxGLmZyb21KU09OPWZ1bmN0aW9uKHosTil7cmV0dXJuIG5l'@;
put 'dyBGKHosTlswXSxOWzFdLE5bMl0pfSxGLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LmZy'@;
put 'b21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LEYucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYoMD09PXRoaXMueS5jbXAodGhpcy56KXx8dGhpcy56T25lJiYw'@;
put 'PT09dGhpcy55LmNtcCh0aGlzLmN1cnZlLmMpKX0sRi5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciB6PXRoaXMueC5yZWRTcXIoKSxOPXRoaXMueS5yZWRTcXIoKSxMPXRoaXMuei5yZWRTcXIoKTtMPUwucmVkSUFkZChMKTt2YXIgSz10aGlzLmN1cnZlLl9tdWxBKHopLFU9dGhp'@;
put 'cy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIoeikucmVkSVN1YihOKSxXPUsucmVkQWRkKE4pLFk9Vy5yZWRTdWIoTCksWD1LLnJlZFN1YihOKSxlZT1VLnJlZE11bChZKSxKPVcucmVkTXVsKFgpLHJlPVUucmVkTXVsKFgpLGllPVkucmVkTXVsKFcpO3JldHVybiB0aGlzLmN1'@;
put 'cnZlLnBvaW50KGVlLEosaWUscmUpfSxGLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciBLLFUsVyxZLFgsZWUsej10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksTj10aGlzLngucmVkU3FyKCksTD10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2'@;
put 'YXIgSj0oWT10aGlzLmN1cnZlLl9tdWxBKE4pKS5yZWRBZGQoTCk7dGhpcy56T25lPyhLPXoucmVkU3ViKE4pLnJlZFN1YihMKS5yZWRNdWwoSi5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxVPUoucmVkTXVsKFkucmVkU3ViKEwpKSxXPUoucmVkU3FyKCkucmVkU3ViKEopLnJlZFN1YihKKSk6'@;
put 'KFg9dGhpcy56LnJlZFNxcigpLGVlPUoucmVkU3ViKFgpLnJlZElTdWIoWCksSz16LnJlZFN1YihOKS5yZWRJU3ViKEwpLnJlZE11bChlZSksVT1KLnJlZE11bChZLnJlZFN1YihMKSksVz1KLnJlZE11bChlZSkpfWVsc2UgWT1OLnJlZEFkZChMKSxYPXRoaXMuY3VydmUuX211bEModGhpcy56'@;
put 'KS5yZWRTcXIoKSxlZT1ZLnJlZFN1YihYKS5yZWRTdWIoWCksSz10aGlzLmN1cnZlLl9tdWxDKHoucmVkSVN1YihZKSkucmVkTXVsKGVlKSxVPXRoaXMuY3VydmUuX211bEMoWSkucmVkTXVsKE4ucmVkSVN1YihMKSksVz1ZLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSyxV'@;
put 'LFcpfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sRi5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbih6KXt2YXIgTj10aGlzLnkucmVkU3Vi'@;
put 'KHRoaXMueCkucmVkTXVsKHoueS5yZWRTdWIoei54KSksTD10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKHoueS5yZWRBZGQoei54KSksSz10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bCh6LnQpLFU9dGhpcy56LnJlZE11bCh6LnoucmVkQWRkKHoueikpLFc9TC5yZWRT'@;
put 'dWIoTiksWT1VLnJlZFN1YihLKSxYPVUucmVkQWRkKEspLGVlPUwucmVkQWRkKE4pLEo9Vy5yZWRNdWwoWSkscmU9WC5yZWRNdWwoZWUpLGllPVcucmVkTXVsKGVlKSxsZT1ZLnJlZE11bChYKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChKLHJlLGxlLGllKX0sRi5wcm90b3R5cGUuX3Byb2pB'@;
put 'ZGQ9ZnVuY3Rpb24oeil7dmFyIHJlLGllLE49dGhpcy56LnJlZE11bCh6LnopLEw9Ti5yZWRTcXIoKSxLPXRoaXMueC5yZWRNdWwoei54KSxVPXRoaXMueS5yZWRNdWwoei55KSxXPXRoaXMuY3VydmUuZC5yZWRNdWwoSykucmVkTXVsKFUpLFk9TC5yZWRTdWIoVyksWD1MLnJlZEFkZChXKSxl'@;
put 'ZT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHoueC5yZWRBZGQoei55KSkucmVkSVN1YihLKS5yZWRJU3ViKFUpLEo9Ti5yZWRNdWwoWSkucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lzdGVkPyhyZT1OLnJlZE11bChYKS5yZWRNdWwoVS5yZWRTdWIodGhpcy5jdXJ2ZS5f'@;
put 'bXVsQShLKSkpLGllPVkucmVkTXVsKFgpKToocmU9Ti5yZWRNdWwoWCkucmVkTXVsKFUucmVkU3ViKEspKSxpZT10aGlzLmN1cnZlLl9tdWxDKFkpLnJlZE11bChYKSksdGhpcy5jdXJ2ZS5wb2ludChKLHJlLGllKX0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmlz'@;
put 'SW5maW5pdHkoKT96OnouaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHRBZGQoeik6dGhpcy5fcHJvakFkZCh6KX0sRi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLl9oYXNEb3VibGVzKHopP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVs'@;
put 'KHRoaXMseik6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHopfSxGLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oeixOLEwpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsTl0sW3osTF0sMiwhMSl9LEYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oeixOLEwpe3Jl'@;
put 'dHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsTl0sW3osTF0sMiwhMCl9LEYucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1cm4gdGhpczt2YXIgej10aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh6KSx0'@;
put 'aGlzLnk9dGhpcy55LnJlZE11bCh6KSx0aGlzLnQmJih0aGlzLnQ9dGhpcy50LnJlZE11bCh6KSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSxGLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCks'@;
put 'dGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMudC5yZWROZWcoKSl9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhp'@;
put 'cy55LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXM9PT16fHwwPT09dGhpcy5nZXRYKCkuY21wKHouZ2V0WCgpKSYmMD09PXRoaXMuZ2V0WSgpLmNtcCh6LmdldFkoKSl9LEYucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbih6KXt2YXIgTj16LnRvUmVk'@;
put 'KHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhpcy54LmNtcChOKSlyZXR1cm4hMDtmb3IodmFyIEw9ei5jbG9uZSgpLEs9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopOzspe2lmKEwuaWFkZCh0aGlzLmN1cnZlLm4pLEwuY21wKHRoaXMuY3VydmUucCk+PTAp'@;
put 'cmV0dXJuITE7aWYoTi5yZWRJQWRkKEspLDA9PT10aGlzLnguY21wKE4pKXJldHVybiEwfX0sRi5wcm90b3R5cGUudG9QPUYucHJvdG90eXBlLm5vcm1hbGl6ZSxGLnByb3RvdHlwZS5taXhlZEFkZD1GLnByb3RvdHlwZS5hZGR9LDgyNTQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9'@;
put 'cTtJLmJhc2U9Xyg0OTE4KSxJLnNob3J0PV8oNjY3MyksSS5tb250PV8oMjg4MSksSS5lZHdhcmRzPV8oMTEzOCl9LDI4ODE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzNzg1KSx5PV8oNTcxNyksZz1fKDQ5MTgpLEI9Xyg5NTMpO2Z1bmN0aW9uIHcoRil7Zy5jYWxsKHRoaXMs'@;
put 'Im1vbnQiLEYpLHRoaXMuYT1uZXcgSShGLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IEkoRi5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgSSg0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBJKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlz'@;
put 'LmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gUChGLE8seil7Zy5CYXNlUG9pbnQuY2FsbCh0aGlzLEYsInByb2plY3RpdmUiKSxudWxsPT09TyYmbnVsbD09PXo/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJv'@;
put 'KToodGhpcy54PW5ldyBJKE8sMTYpLHRoaXMuej1uZXcgSSh6LDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfXkodyxnKSx1ZS5leHBvcnRzPXcsdy5w'@;
put 'cm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oTyl7dmFyIHo9Ty5ub3JtYWxpemUoKS54LE49ei5yZWRTcXIoKSxMPU4ucmVkTXVsKHopLnJlZEFkZChOLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoeik7cmV0dXJuIDA9PT1MLnJlZFNxcnQoKS5yZWRTcXIoKS5jbXAoTCl9LHkoUCxnLkJhc2VQ'@;
put 'b2ludCksdy5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oTyx6KXtyZXR1cm4gdGhpcy5wb2ludChCLnRvQXJyYXkoTyx6KSwxKX0sdy5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTyx6KXtyZXR1cm4gbmV3IFAodGhpcyxPLHopfSx3LnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1'@;
put 'bmN0aW9uKE8pe3JldHVybiBQLmZyb21KU09OKHRoaXMsTyl9LFAucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LFAucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxQ'@;
put 'LmZyb21KU09OPWZ1bmN0aW9uKE8seil7cmV0dXJuIG5ldyBQKE8selswXSx6WzFdfHxPLm9uZSl9LFAucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJl'@;
put 'ZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sUC5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9LFAucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3ZhciB6PXRoaXMueC5y'@;
put 'ZWRBZGQodGhpcy56KS5yZWRTcXIoKSxMPXRoaXMueC5yZWRTdWIodGhpcy56KS5yZWRTcXIoKSxLPXoucmVkU3ViKEwpLFU9ei5yZWRNdWwoTCksVz1LLnJlZE11bChMLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoSykpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChVLFcpfSxQLnBy'@;
put 'b3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKE8seil7dmFyIE49dGhpcy54LnJlZEFkZCh0aGlzLnopLEw9dGhpcy54LnJlZFN1Yih0aGlzLnopLEs9'@;
put 'Ty54LnJlZEFkZChPLnopLFc9Ty54LnJlZFN1YihPLnopLnJlZE11bChOKSxZPUsucmVkTXVsKEwpLFg9ei56LnJlZE11bChXLnJlZEFkZChZKS5yZWRTcXIoKSksZWU9ei54LnJlZE11bChXLnJlZElTdWIoWSkucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFgsZWUpfSxQLnBy'@;
put 'b3RvdHlwZS5tdWw9ZnVuY3Rpb24oTyl7Zm9yKHZhciB6PU8uY2xvbmUoKSxOPXRoaXMsTD10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksVT1bXTswIT09ei5jbXBuKDApO3ouaXVzaHJuKDEpKVUucHVzaCh6LmFuZGxuKDEpKTtmb3IodmFyIFc9VS5sZW5ndGgtMTtXPj0wO1ctLSkwPT09'@;
put 'VVtXXT8oTj1OLmRpZmZBZGQoTCx0aGlzKSxMPUwuZGJsKCkpOihMPU4uZGlmZkFkZChMLHRoaXMpLE49Ti5kYmwoKSk7cmV0dXJuIEx9LFAucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAu'@;
put 'cHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5lcT1mdW5jdGlvbihPKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChPLmdldFgoKSl9LFAucHJvdG90eXBlLm5vcm1h'@;
put 'bGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sUC5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw2Njcz'@;
put 'Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oOTUzKSx5PV8oMzc4NSksZz1fKDU3MTcpLEI9Xyg0OTE4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAoeil7Qi5jYWxsKHRoaXMsInNob3J0Iix6KSx0aGlzLmE9bmV3IHkoei5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyB5'@;
put 'KHouYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMudGludj10aGlzLnR3by5yZWRJbnZtKCksdGhpcy56ZXJvQT0wPT09dGhpcy5hLmZyb21SZWQoKS5jbXBuKDApLHRoaXMudGhyZWVBPTA9PT10aGlzLmEuZnJvbVJlZCgpLnN1Yih0aGlzLnApLmNtcG4oLTMpLHRoaXMuZW5kbz10aGlzLl9n'@;
put 'ZXRFbmRvbW9ycGhpc20oeiksdGhpcy5fZW5kb1duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fZW5kb1duYWZUMj1uZXcgQXJyYXkoNCl9ZnVuY3Rpb24gRih6LE4sTCxLKXtCLkJhc2VQb2ludC5jYWxsKHRoaXMseiwiYWZmaW5lIiksbnVsbD09PU4mJm51bGw9PT1MPyh0aGlzLng9bnVsbCx0'@;
put 'aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgeShOLDE2KSx0aGlzLnk9bmV3IHkoTCwxNiksSyYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQo'@;
put 'dGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBPKHosTixMLEspe0IuQmFzZVBvaW50LmNhbGwodGhpcyx6LCJqYWNvYmlhbiIpLG51bGw9PT1OJiZudWxsPT09TCYmbnVsbD09PUs/'@;
put 'KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyB5KDApKToodGhpcy54PW5ldyB5KE4sMTYpLHRoaXMueT1uZXcgeShMLDE2KSx0aGlzLno9bmV3IHkoSywxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUu'@;
put 'cmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX1nKFAsQiksdWUuZXhwb3J0cz1QLFAucHJv'@;
put 'dG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24oTil7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIEwsSztpZihOLmJldGEpTD1uZXcgeShOLmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBVPXRoaXMuX2dldEVuZG9S'@;
put 'b290cyh0aGlzLnApO0w9KEw9VVswXS5jbXAoVVsxXSk8MD9VWzBdOlVbMV0pLnRvUmVkKHRoaXMucmVkKX1pZihOLmxhbWJkYSlLPW5ldyB5KE4ubGFtYmRhLDE2KTtlbHNle3ZhciBXPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKFdbMF0pLnguY21wKHRoaXMu'@;
put 'Zy54LnJlZE11bChMKSk/Sz1XWzBdOncoMD09PXRoaXMuZy5tdWwoSz1XWzFdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTCkpKX1yZXR1cm57YmV0YTpMLGxhbWJkYTpLLGJhc2lzOk4uYmFzaXM/Ti5iYXNpcy5tYXAoZnVuY3Rpb24oWCl7cmV0dXJue2E6bmV3IHkoWC5hLDE2KSxiOm5ldyB5'@;
put 'KFguYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKEspfX19LFAucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24oTil7dmFyIEw9Tj09PXRoaXMucD90aGlzLnJlZDp5Lm1vbnQoTiksSz1uZXcgeSgyKS50b1JlZChMKS5yZWRJbnZtKCksVT1LLnJlZE5lZygpLFc9bmV3IHkoMyku'@;
put 'dG9SZWQoTCkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChLKTtyZXR1cm5bVS5yZWRBZGQoVykuZnJvbVJlZCgpLFUucmVkU3ViKFcpLmZyb21SZWQoKV19LFAucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24oTil7Zm9yKHZhciBKLHJlLGllLGxlLG1lLF9lLFRlLHplLFYsTD10'@;
put 'aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLEs9TixVPXRoaXMubi5jbG9uZSgpLFc9bmV3IHkoMSksWT1uZXcgeSgwKSxYPW5ldyB5KDApLGVlPW5ldyB5KDEpLFNlPTA7MCE9PUsuY21wbigwKTspe3ZhciBwPVUuZGl2KEspO3plPVUuc3ViKHAubXVsKEsp'@;
put 'KSxWPVguc3ViKHAubXVsKFcpKTt2YXIgYj1lZS5zdWIocC5tdWwoWSkpO2lmKCFpZSYmemUuY21wKEwpPDApSj1UZS5uZWcoKSxyZT1XLGllPXplLm5lZygpLGxlPVY7ZWxzZSBpZihpZSYmMj09KytTZSlicmVhaztUZT16ZSxVPUssSz16ZSxYPVcsVz1WLGVlPVksWT1ifW1lPXplLm5lZygp'@;
put 'LF9lPVY7dmFyIHg9aWUuc3FyKCkuYWRkKGxlLnNxcigpKTtyZXR1cm4gbWUuc3FyKCkuYWRkKF9lLnNxcigpKS5jbXAoeCk+PTAmJihtZT1KLF9lPXJlKSxpZS5uZWdhdGl2ZSYmKGllPWllLm5lZygpLGxlPWxlLm5lZygpKSxtZS5uZWdhdGl2ZSYmKG1lPW1lLm5lZygpLF9lPV9lLm5lZygp'@;
put 'KSxbe2E6aWUsYjpsZX0se2E6bWUsYjpfZX1dfSxQLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuZW5kby5iYXNpcyxLPUxbMF0sVT1MWzFdLFc9VS5iLm11bChOKS5kaXZSb3VuZCh0aGlzLm4pLFk9Sy5iLm5lZygpLm11bChOKS5kaXZSb3VuZCh0aGlzLm4p'@;
put 'LFg9Vy5tdWwoSy5hKSxlZT1ZLm11bChVLmEpLEo9Vy5tdWwoSy5iKSxyZT1ZLm11bChVLmIpO3JldHVybntrMTpOLnN1YihYKS5zdWIoZWUpLGsyOkouYWRkKHJlKS5uZWcoKX19LFAucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oTixMKXsoTj1uZXcgeShOLDE2KSkucmVkfHwoTj1O'@;
put 'LnRvUmVkKHRoaXMucmVkKSk7dmFyIEs9Ti5yZWRTcXIoKS5yZWRNdWwoTikucmVkSUFkZChOLnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksVT1LLnJlZFNxcnQoKTtpZigwIT09VS5yZWRTcXIoKS5yZWRTdWIoSykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZh'@;
put 'bGlkIHBvaW50Iik7dmFyIFc9VS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oTCYmIVd8fCFMJiZXKSYmKFU9VS5yZWROZWcoKSksdGhpcy5wb2ludChOLFUpfSxQLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihOKXtpZihOLmluZilyZXR1cm4hMDt2YXIgTD1OLngsSz1OLnksVT10aGlz'@;
put 'LmEucmVkTXVsKEwpLFc9TC5yZWRTcXIoKS5yZWRNdWwoTCkucmVkSUFkZChVKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1LLnJlZFNxcigpLnJlZElTdWIoVykuY21wbigwKX0sUC5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXtmb3IodmFyIFU9dGhpcy5f'@;
put 'ZW5kb1duYWZUMSxXPXRoaXMuX2VuZG9XbmFmVDIsWT0wO1k8Ti5sZW5ndGg7WSsrKXt2YXIgWD10aGlzLl9lbmRvU3BsaXQoTFtZXSksZWU9TltZXSxKPWVlLl9nZXRCZXRhKCk7WC5rMS5uZWdhdGl2ZSYmKFguazEuaW5lZygpLGVlPWVlLm5lZyghMCkpLFguazIubmVnYXRpdmUmJihYLmsy'@;
put 'LmluZWcoKSxKPUoubmVnKCEwKSksVVsyKlldPWVlLFVbMipZKzFdPUosV1syKlldPVguazEsV1syKlkrMV09WC5rMn1mb3IodmFyIHJlPXRoaXMuX3duYWZNdWxBZGQoMSxVLFcsMipZLEspLGllPTA7aWU8MipZO2llKyspVVtpZV09bnVsbCxXW2llXT1udWxsO3JldHVybiByZX0sZyhGLEIu'@;
put 'QmFzZVBvaW50KSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihOLEwsSyl7cmV0dXJuIG5ldyBGKHRoaXMsTixMLEspfSxQLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKE4sTCl7cmV0dXJuIEYuZnJvbUpTT04odGhpcyxOLEwpfSxGLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5j'@;
put 'dGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIE49dGhpcy5wcmVjb21wdXRlZDtpZihOJiZOLmJldGEpcmV0dXJuIE4uYmV0YTt2YXIgTD10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoTil7dmFyIEs9dGhpcy5jdXJ2'@;
put 'ZSxVPWZ1bmN0aW9uKFcpe3JldHVybiBLLnBvaW50KFcueC5yZWRNdWwoSy5lbmRvLmJldGEpLFcueSl9O04uYmV0YT1MLEwucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6Ti5uYWYmJnt3bmQ6Ti5uYWYud25kLHBvaW50czpOLm5hZi5wb2ludHMubWFwKFUpfSxkb3VibGVzOk4uZG91Ymxl'@;
put 'cyYme3N0ZXA6Ti5kb3VibGVzLnN0ZXAscG9pbnRzOk4uZG91Ymxlcy5wb2ludHMubWFwKFUpfX19cmV0dXJuIEx9fSxGLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0'@;
put 'aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25k'@;
put 'LHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxGLmZyb21KU09OPWZ1bmN0aW9uKE4sTCxLKXsic3RyaW5nIj09dHlwZW9mIEwmJihMPUpTT04ucGFyc2UoTCkpO3ZhciBVPU4ucG9pbnQoTFswXSxMWzFdLEspO2lmKCFMWzJd'@;
put 'KXJldHVybiBVO2Z1bmN0aW9uIFcoWCl7cmV0dXJuIE4ucG9pbnQoWFswXSxYWzFdLEspfXZhciBZPUxbMl07cmV0dXJuIFUucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOlkuZG91YmxlcyYme3N0ZXA6WS5kb3VibGVzLnN0ZXAscG9pbnRzOltVXS5jb25jYXQoWS5kb3VibGVzLnBv'@;
put 'aW50cy5tYXAoVykpfSxuYWY6WS5uYWYmJnt3bmQ6WS5uYWYud25kLHBvaW50czpbVV0uY29uY2F0KFkubmFmLnBvaW50cy5tYXAoVykpfX0sVX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxF'@;
put 'QyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxGLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24o'@;
put 'Til7aWYodGhpcy5pbmYpcmV0dXJuIE47aWYoTi5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShOKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKE4pKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoTi54KSlyZXR1cm4gdGhp'@;
put 'cy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBMPXRoaXMueS5yZWRTdWIoTi55KTswIT09TC5jbXBuKDApJiYoTD1MLnJlZE11bCh0aGlzLngucmVkU3ViKE4ueCkucmVkSW52bSgpKSk7dmFyIEs9TC5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihOLngpLFU9TC5yZWRNdWwo'@;
put 'dGhpcy54LnJlZFN1YihLKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSl9LEYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBOPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09Ti5jbXBuKDApKXJldHVy'@;
put 'biB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEw9dGhpcy5jdXJ2ZS5hLEs9dGhpcy54LnJlZFNxcigpLFU9Ti5yZWRJbnZtKCksVz1LLnJlZEFkZChLKS5yZWRJQWRkKEspLnJlZElBZGQoTCkucmVkTXVsKFUpLFk9Vy5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhp'@;
put 'cy54KSksWD1XLnJlZE11bCh0aGlzLngucmVkU3ViKFkpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWSxYKX0sRi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbihOKXtyZXR1cm4gTj1uZXcgeShOLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hhc0RvdWJsZXMoTik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxOKTp0aGlzLmN1cnZlLmVuZG8/dGhp'@;
put 'cy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFtOXSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLE4pfSxGLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oTixMLEspe3ZhciBVPVt0aGlzLExdLFc9W04sS107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25h'@;
put 'Zk11bEFkZChVLFcpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxVLFcsMil9LEYucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oTixMLEspe3ZhciBVPVt0aGlzLExdLFc9W04sS107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChVLFcsITApOnRo'@;
put 'aXMuY3VydmUuX3duYWZNdWxBZGQoMSxVLFcsMiwhMCl9LEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzPT09Tnx8dGhpcy5pbmY9PT1OLmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcChOLngpJiYwPT09dGhpcy55LmNtcChOLnkpKX0sRi5wcm90b3R5cGUubmVn'@;
put 'PWZ1bmN0aW9uKE4pe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYoTiYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIEs9dGhpcy5wcmVjb21wdXRlZCxVPWZ1bmN0aW9uKFcpe3JldHVybiBXLm5lZygpfTtMLnBy'@;
put 'ZWNvbXB1dGVkPXtuYWY6Sy5uYWYmJnt3bmQ6Sy5uYWYud25kLHBvaW50czpLLm5hZi5wb2ludHMubWFwKFUpfSxkb3VibGVzOksuZG91YmxlcyYme3N0ZXA6Sy5kb3VibGVzLnN0ZXAscG9pbnRzOksuZG91Ymxlcy5wb2ludHMubWFwKFUpfX19cmV0dXJuIEx9LEYucHJvdG90eXBlLnRvSj1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLmluZj90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSl9LGcoTyxCLkJhc2VQb2ludCksUC5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKE4sTCxLKXtyZXR1'@;
put 'cm4gbmV3IE8odGhpcyxOLEwsSyl9LE8ucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIE49dGhpcy56LnJlZEludm0oKSxMPU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKEwpLFU9dGhp'@;
put 'cy55LnJlZE11bChMKS5yZWRNdWwoTik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoSyxVKX0sTy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sTy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4p'@;
put 'e2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBOO2lmKE4uaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBMPU4uei5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxVPXRoaXMueC5yZWRNdWwoTCksVz1OLngucmVkTXVsKEspLFk9dGhpcy55LnJlZE11bChMLnJlZE11bChOLnopKSxY'@;
put 'PU4ueS5yZWRNdWwoSy5yZWRNdWwodGhpcy56KSksZWU9VS5yZWRTdWIoVyksSj1ZLnJlZFN1YihYKTtpZigwPT09ZWUuY21wbigwKSlyZXR1cm4gMCE9PUouY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgcmU9ZWUucmVkU3FyKCksaWU9'@;
put 'cmUucmVkTXVsKGVlKSxsZT1VLnJlZE11bChyZSksbWU9Si5yZWRTcXIoKS5yZWRJQWRkKGllKS5yZWRJU3ViKGxlKS5yZWRJU3ViKGxlKSxfZT1KLnJlZE11bChsZS5yZWRJU3ViKG1lKSkucmVkSVN1YihZLnJlZE11bChpZSkpLFRlPXRoaXMuei5yZWRNdWwoTi56KS5yZWRNdWwoZWUpO3Jl'@;
put 'dHVybiB0aGlzLmN1cnZlLmpwb2ludChtZSxfZSxUZSl9LE8ucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiBOLnRvSigpO2lmKE4uaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPXRoaXMueCxV'@;
put 'PU4ueC5yZWRNdWwoTCksVz10aGlzLnksWT1OLnkucmVkTXVsKEwpLnJlZE11bCh0aGlzLnopLFg9Sy5yZWRTdWIoVSksZWU9Vy5yZWRTdWIoWSk7aWYoMD09PVguY21wbigwKSlyZXR1cm4gMCE9PWVlLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJs'@;
put 'KCk7dmFyIEo9WC5yZWRTcXIoKSxyZT1KLnJlZE11bChYKSxpZT1LLnJlZE11bChKKSxsZT1lZS5yZWRTcXIoKS5yZWRJQWRkKHJlKS5yZWRJU3ViKGllKS5yZWRJU3ViKGllKSxtZT1lZS5yZWRNdWwoaWUucmVkSVN1YihsZSkpLnJlZElTdWIoVy5yZWRNdWwocmUpKSxfZT10aGlzLnoucmVk'@;
put 'TXVsKFgpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsZSxtZSxfZSl9LE8ucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oTil7aWYoMD09PU4pcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIU4pcmV0dXJuIHRoaXMuZGJsKCk7dmFyIEw7aWYodGhpcy5j'@;
put 'dXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciBLPXRoaXM7Zm9yKEw9MDtMPE47TCsrKUs9Sy5kYmwoKTtyZXR1cm4gS312YXIgVT10aGlzLmN1cnZlLmEsVz10aGlzLmN1cnZlLnRpbnYsWT10aGlzLngsWD10aGlzLnksZWU9dGhpcy56LEo9ZWUucmVkU3FyKCkucmVkU3FyKCks'@;
put 'cmU9WC5yZWRBZGQoWCk7Zm9yKEw9MDtMPE47TCsrKXt2YXIgaWU9WS5yZWRTcXIoKSxsZT1yZS5yZWRTcXIoKSxtZT1sZS5yZWRTcXIoKSxfZT1pZS5yZWRBZGQoaWUpLnJlZElBZGQoaWUpLnJlZElBZGQoVS5yZWRNdWwoSikpLFRlPVkucmVkTXVsKGxlKSxTZT1fZS5yZWRTcXIoKS5yZWRJ'@;
put 'U3ViKFRlLnJlZEFkZChUZSkpLHplPVRlLnJlZElTdWIoU2UpLFY9X2UucmVkTXVsKHplKTtWPVYucmVkSUFkZChWKS5yZWRJU3ViKG1lKTt2YXIgcD1yZS5yZWRNdWwoZWUpO0wrMTxOJiYoSj1KLnJlZE11bChtZSkpLFk9U2UsZWU9cCxyZT1WfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChZ'@;
put 'LHJlLnJlZE11bChXKSxlZSl9LE8ucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LE8ucHJvdG90'@;
put 'eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIE4sTCxLO2lmKHRoaXMuek9uZSl7dmFyIFU9dGhpcy54LnJlZFNxcigpLFc9dGhpcy55LnJlZFNxcigpLFk9Vy5yZWRTcXIoKSxYPXRoaXMueC5yZWRBZGQoVykucmVkU3FyKCkucmVkSVN1YihVKS5yZWRJU3ViKFkpO1g9WC5yZWRJQWRkKFgp'@;
put 'O3ZhciBlZT1VLnJlZEFkZChVKS5yZWRJQWRkKFUpLEo9ZWUucmVkU3FyKCkucmVkSVN1YihYKS5yZWRJU3ViKFgpLHJlPVkucmVkSUFkZChZKTtyZT0ocmU9cmUucmVkSUFkZChyZSkpLnJlZElBZGQocmUpLE49SixMPWVlLnJlZE11bChYLnJlZElTdWIoSikpLnJlZElTdWIocmUpLEs9dGhp'@;
put 'cy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMueC5yZWRTcXIoKSxsZT10aGlzLnkucmVkU3FyKCksbWU9bGUucmVkU3FyKCksX2U9dGhpcy54LnJlZEFkZChsZSkucmVkU3FyKCkucmVkSVN1YihpZSkucmVkSVN1YihtZSk7X2U9X2UucmVkSUFkZChfZSk7dmFyIFRlPWllLnJl'@;
put 'ZEFkZChpZSkucmVkSUFkZChpZSksU2U9VGUucmVkU3FyKCksemU9bWUucmVkSUFkZChtZSk7emU9KHplPXplLnJlZElBZGQoemUpKS5yZWRJQWRkKHplKSxOPVNlLnJlZElTdWIoX2UpLnJlZElTdWIoX2UpLEw9VGUucmVkTXVsKF9lLnJlZElTdWIoTikpLnJlZElTdWIoemUpLEs9KEs9dGhp'@;
put 'cy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKEspfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChOLEwsSyl9LE8ucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBOLEwsSztpZih0aGlzLnpPbmUpe3ZhciBVPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxZPVcu'@;
put 'cmVkU3FyKCksWD10aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElTdWIoVSkucmVkSVN1YihZKTtYPVgucmVkSUFkZChYKTt2YXIgZWU9VS5yZWRBZGQoVSkucmVkSUFkZChVKS5yZWRJQWRkKHRoaXMuY3VydmUuYSksSj1lZS5yZWRTcXIoKS5yZWRJU3ViKFgpLnJlZElTdWIoWCk7Tj1K'@;
put 'O3ZhciByZT1ZLnJlZElBZGQoWSk7cmU9KHJlPXJlLnJlZElBZGQocmUpKS5yZWRJQWRkKHJlKSxMPWVlLnJlZE11bChYLnJlZElTdWIoSikpLnJlZElTdWIocmUpLEs9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGllPXRoaXMuei5yZWRTcXIoKSxsZT10aGlzLnkucmVkU3FyKCks'@;
put 'bWU9dGhpcy54LnJlZE11bChsZSksX2U9dGhpcy54LnJlZFN1YihpZSkucmVkTXVsKHRoaXMueC5yZWRBZGQoaWUpKTtfZT1fZS5yZWRBZGQoX2UpLnJlZElBZGQoX2UpO3ZhciBUZT1tZS5yZWRJQWRkKG1lKSxTZT0oVGU9VGUucmVkSUFkZChUZSkpLnJlZEFkZChUZSk7Tj1fZS5yZWRTcXIo'@;
put 'KS5yZWRJU3ViKFNlKSxLPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGxlKS5yZWRJU3ViKGllKTt2YXIgemU9bGUucmVkU3FyKCk7emU9KHplPSh6ZT16ZS5yZWRJQWRkKHplKSkucmVkSUFkZCh6ZSkpLnJlZElBZGQoemUpLEw9X2UucmVkTXVsKFRlLnJlZElTdWIo'@;
put 'TikpLnJlZElTdWIoemUpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChOLEwsSyl9LE8ucHJvdG90eXBlLl9kYmw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLmN1cnZlLmEsTD10aGlzLngsSz10aGlzLnksVT10aGlzLnosVz1VLnJlZFNxcigpLnJlZFNxcigpLFk9TC5yZWRTcXIoKSxYPUsucmVk'@;
put 'U3FyKCksZWU9WS5yZWRBZGQoWSkucmVkSUFkZChZKS5yZWRJQWRkKE4ucmVkTXVsKFcpKSxKPUwucmVkQWRkKEwpLHJlPShKPUoucmVkSUFkZChKKSkucmVkTXVsKFgpLGllPWVlLnJlZFNxcigpLnJlZElTdWIocmUucmVkQWRkKHJlKSksbGU9cmUucmVkSVN1YihpZSksbWU9WC5yZWRTcXIo'@;
put 'KTttZT0obWU9KG1lPW1lLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSk7dmFyIF9lPWVlLnJlZE11bChsZSkucmVkSVN1YihtZSksVGU9Sy5yZWRBZGQoSykucmVkTXVsKFUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChpZSxfZSxUZSl9LE8ucHJvdG90eXBlLnRycGw9'@;
put 'ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIE49dGhpcy54LnJlZFNxcigpLEw9dGhpcy55LnJlZFNxcigpLEs9dGhpcy56LnJlZFNxcigpLFU9TC5yZWRTcXIoKSxXPU4ucmVkQWRkKE4pLnJlZElBZGQoTiksWT1XLnJlZFNx'@;
put 'cigpLFg9dGhpcy54LnJlZEFkZChMKS5yZWRTcXIoKS5yZWRJU3ViKE4pLnJlZElTdWIoVSksZWU9KFg9KFg9KFg9WC5yZWRJQWRkKFgpKS5yZWRBZGQoWCkucmVkSUFkZChYKSkucmVkSVN1YihZKSkucmVkU3FyKCksSj1VLnJlZElBZGQoVSk7Sj0oSj0oSj1KLnJlZElBZGQoSikpLnJlZElB'@;
put 'ZGQoSikpLnJlZElBZGQoSik7dmFyIHJlPVcucmVkSUFkZChYKS5yZWRTcXIoKS5yZWRJU3ViKFkpLnJlZElTdWIoZWUpLnJlZElTdWIoSiksaWU9TC5yZWRNdWwocmUpO2llPShpZT1pZS5yZWRJQWRkKGllKSkucmVkSUFkZChpZSk7dmFyIGxlPXRoaXMueC5yZWRNdWwoZWUpLnJlZElTdWIo'@;
put 'aWUpO2xlPShsZT1sZS5yZWRJQWRkKGxlKSkucmVkSUFkZChsZSk7dmFyIG1lPXRoaXMueS5yZWRNdWwocmUucmVkTXVsKEoucmVkSVN1YihyZSkpLnJlZElTdWIoWC5yZWRNdWwoZWUpKSk7bWU9KG1lPShtZT1tZS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSkpLnJlZElBZGQobWUpO3ZhciBf'@;
put 'ZT10aGlzLnoucmVkQWRkKFgpLnJlZFNxcigpLnJlZElTdWIoSykucmVkSVN1YihlZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGxlLG1lLF9lKX0sTy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE4sTCl7cmV0dXJuIE49bmV3IHkoTixMKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsTil9'@;
put 'LE8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE4pe2lmKCJhZmZpbmUiPT09Ti50eXBlKXJldHVybiB0aGlzLmVxKE4udG9KKCkpO2lmKHRoaXM9PT1OKXJldHVybiEwO3ZhciBMPXRoaXMuei5yZWRTcXIoKSxLPU4uei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChLKS5yZWRJU3ViKE4u'@;
put 'eC5yZWRNdWwoTCkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIFU9TC5yZWRNdWwodGhpcy56KSxXPUsucmVkTXVsKE4ueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKFcpLnJlZElTdWIoTi55LnJlZE11bChVKSkuY21wbigwKX0sTy5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKE4pe3ZhciBM'@;
put 'PXRoaXMuei5yZWRTcXIoKSxLPU4udG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChMKTtpZigwPT09dGhpcy54LmNtcChLKSlyZXR1cm4hMDtmb3IodmFyIFU9Ti5jbG9uZSgpLFc9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChMKTs7KXtpZihVLmlhZGQodGhpcy5jdXJ2ZS5uKSxVLmNtcCh0'@;
put 'aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKEsucmVkSUFkZChXKSwwPT09dGhpcy54LmNtcChLKSlyZXR1cm4hMH19LE8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAi'@;
put 'K3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxPLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDU0Mjc6KHVlLHEsXyk9Pnsi'@;
put 'dXNlIHN0cmljdCI7dmFyIE8sST1xLHk9XygzNzE1KSxnPV8oODI1NCksdz1fKDk1MykuYXNzZXJ0O2Z1bmN0aW9uIFAoeil7dGhpcy5jdXJ2ZT0ic2hvcnQiPT09ei50eXBlP25ldyBnLnNob3J0KHopOiJlZHdhcmRzIj09PXoudHlwZT9uZXcgZy5lZHdhcmRzKHopOm5ldyBnLm1vbnQoeiks'@;
put 'dGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD16Lmhhc2gsdyh0aGlzLmcudmFsaWRhdGUoKSwiSW52YWxpZCBjdXJ2ZSIpLHcodGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE8iKX1mdW5jdGlvbiBG'@;
put 'KHosTil7T2JqZWN0LmRlZmluZVByb3BlcnR5KEkseix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIEw9bmV3IFAoTik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOkx9'@;
put 'KSxMfX0pfUkuUHJlc2V0Q3VydmU9UCxGKCJwMTkyIix7dHlwZToic2hvcnQiLHByaW1lOiJwMTkyIixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmMiLGI6IjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiA5OWRlZjgzNiAxNDZiYzliMSBiNGQyMjgzMSIsaGFzaDp5LnNoYTI1NixnUmVkOiExLGc6WyIxODhkYTgwZSBiMDMw'@;
put 'OTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMiIsIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExIl19KSxGKCJwMjI0Iix7dHlwZToic2hvcnQiLHByaW1lOiJwMjI0IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUiLGI6ImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIz'@;
put 'NTVmZmI0IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmMTZhMiBlMGI4ZjAzZSAxM2RkMjk0NSA1YzVjMmEzZCIsaGFzaDp5LnNoYTI1NixnUmVkOiExLGc6WyJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMSIs'@;
put 'ImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0Il19KSxGKCJwMjU2Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YiIs'@;
put 'bjoiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTEiLGhhc2g6eS5zaGEyNTYsZ1JlZDohMSxnOlsiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUg'@;
put 'ZDg5OGMyOTYiLCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNSJdfSksRigicDM4NCIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAw'@;
put 'MDAwMCBmZmZmZmZmYyIsYjoiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWYiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczIixoYXNoOnkuc2hhMzg0LGdSZWQ6ITEsZzpbImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgy'@;
put 'NTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3IiwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWYiXX0pLEYoInA1MjEi'@;
put 'LHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiIsYToiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmMiLGI6IjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAw'@;
put 'IixuOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOSIsaGFzaDp5'@;
put 'LnNoYTUxMixnUmVkOiExLGc6WyIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBj'@;
put 'MmU1YmQ2NiIsIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwIl19'@;
put 'KSxGKCJjdXJ2ZTI1NTE5Iix7dHlwZToibW9udCIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiNzZkMDYiLGI6IjEiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAw'@;
put 'MDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6eS5zaGEyNTYsZ1JlZDohMSxnOlsiOSJdfSksRigiZWQyNTUxOSIse3R5cGU6ImVkd2FyZHMiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ii0xIixjOiIxIixkOiI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEy'@;
put 'NjMxYTVjZjVkM2VkIixoYXNoOnkuc2hhMjU2LGdSZWQ6ITEsZzpbIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWEiLCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2'@;
put 'NjY2NjU4Il19KTt0cnl7Tz1fKDEwMzcpfWNhdGNoe089dm9pZCAwfUYoInNlY3AyNTZrMSIse3R5cGU6InNob3J0IixwcmltZToiazI1NiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiLGE6IjAiLGI6'@;
put 'IjciLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxIixoOiIxIixoYXNoOnkuc2hhMjU2LGJldGE6IjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5'@;
put 'NTAxZWUiLGxhbWJkYToiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MiIsYmFzaXM6W3thOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIsYjoiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzIn0s'@;
put 'e2E6IjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIsYjoiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUifV0sZ1JlZDohMSxnOlsiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsIjQ4M2FkYTc3'@;
put 'MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgiLE9dfSl9LDc5NTQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzNzg1KSx5PV8oMjE1NiksZz1fKDk1MyksQj1fKDU0MjcpLHc9Xyg5OTMxKSxQPWcuYXNzZXJ0LEY9XygxMjUx'@;
put 'KSxPPV8oNjExKTtmdW5jdGlvbiB6KE4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIHopKXJldHVybiBuZXcgeihOKTsic3RyaW5nIj09dHlwZW9mIE4mJihQKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLE4pLCJVbmtub3duIGN1cnZlICIrTiksTj1CW05dKSxOIGluc3Rh'@;
put 'bmNlb2YgQi5QcmVzZXRDdXJ2ZSYmKE49e2N1cnZlOk59KSx0aGlzLmN1cnZlPU4uY3VydmUuY3VydmUsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRoaXMubi51c2hybigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz1OLmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1dGUoTi5jdXJ2'@;
put 'ZS5uLmJpdExlbmd0aCgpKzEpLHRoaXMuaGFzaD1OLmhhc2h8fE4uY3VydmUuaGFzaH11ZS5leHBvcnRzPXosei5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbihMKXtyZXR1cm4gbmV3IEYodGhpcyxMKX0sei5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24oTCxLKXtyZXR1cm4g'@;
put 'Ri5mcm9tUHJpdmF0ZSh0aGlzLEwsSyl9LHoucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gRi5mcm9tUHVibGljKHRoaXMsTCxLKX0sei5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbihMKXtMfHwoTD17fSk7Zm9yKHZhciBLPW5ldyB5KHtoYXNoOnRo'@;
put 'aXMuaGFzaCxwZXJzOkwucGVycyxwZXJzRW5jOkwucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6TC5lbnRyb3B5fHx3KHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLGVudHJvcHlFbmM6TC5lbnRyb3B5JiZMLmVudHJvcHlFbmN8fCJ1dGY4Iixub25jZTp0aGlzLm4udG9BcnJheSgpfSksVT10aGlz'@;
put 'Lm4uYnl0ZUxlbmd0aCgpLFc9dGhpcy5uLnN1YihuZXcgSSgyKSk7Oyl7dmFyIFk9bmV3IEkoSy5nZW5lcmF0ZShVKSk7aWYoIShZLmNtcChXKT4wKSlyZXR1cm4gWS5pYWRkbigxKSx0aGlzLmtleUZyb21Qcml2YXRlKFkpfX0sei5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKEws'@;
put 'SyxVKXt2YXIgVztpZihJLmlzQk4oTCl8fCJudW1iZXIiPT10eXBlb2YgTClXPShMPW5ldyBJKEwsMTYpKS5ieXRlTGVuZ3RoKCk7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIEwpVz1MLmxlbmd0aCxMPW5ldyBJKEwsMTYpO2Vsc2V7dmFyIFk9TC50b1N0cmluZygpO1c9WS5sZW5ndGgrMT4+'@;
put 'PjEsTD1uZXcgSShZLDE2KX0ibnVtYmVyIiE9dHlwZW9mIFUmJihVPTgqVyk7dmFyIFg9VS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIFg+MCYmKEw9TC51c2hybihYKSksIUsmJkwuY21wKHRoaXMubik+PTA/TC5zdWIodGhpcy5uKTpMfSx6LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEws'@;
put 'SyxVLFcpe2lmKCJvYmplY3QiPT10eXBlb2YgVSYmKFc9VSxVPW51bGwpLFd8fChXPXt9KSwic3RyaW5nIiE9dHlwZW9mIEwmJiJudW1iZXIiIT10eXBlb2YgTCYmIUkuaXNCTihMKSl7UCgib2JqZWN0Ij09dHlwZW9mIEwmJkwmJiJudW1iZXIiPT10eXBlb2YgTC5sZW5ndGgsIkV4cGVjdGVk'@;
put 'IG1lc3NhZ2UgdG8gYmUgYW4gYXJyYXktbGlrZSwgYSBoZXggc3RyaW5nLCBvciBhIEJOIGluc3RhbmNlIiksUChMLmxlbmd0aD4+PjA9PT1MLmxlbmd0aCk7Zm9yKHZhciBZPTA7WTxMLmxlbmd0aDtZKyspUCgoMjU1JkxbWV0pPT09TFtZXSl9Sz10aGlzLmtleUZyb21Qcml2YXRlKEssVSks'@;
put 'TD10aGlzLl90cnVuY2F0ZVRvTihMLCExLFcubXNnQml0TGVuZ3RoKSxQKCFMLmlzTmVnKCksIkNhbiBub3Qgc2lnbiBhIG5lZ2F0aXZlIG1lc3NhZ2UiKTt2YXIgWD10aGlzLm4uYnl0ZUxlbmd0aCgpLGVlPUsuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIixYKSxKPUwudG9BcnJheSgiYmUi'@;
put 'LFgpO1AobmV3IEkoSikuZXEoTCksIkNhbiBub3Qgc2lnbiBtZXNzYWdlIik7Zm9yKHZhciByZT1uZXcgeSh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTplZSxub25jZTpKLHBlcnM6Vy5wZXJzLHBlcnNFbmM6Vy5wZXJzRW5jfHwidXRmOCJ9KSxpZT10aGlzLm4uc3ViKG5ldyBJKDEpKSxsZT0w'@;
put 'OztsZSsrKXt2YXIgbWU9Vy5rP1cuayhsZSk6bmV3IEkocmUuZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKCEoKG1lPXRoaXMuX3RydW5jYXRlVG9OKG1lLCEwKSkuY21wbigxKTw9MHx8bWUuY21wKGllKT49MCkpe3ZhciBfZT10aGlzLmcubXVsKG1lKTtpZighX2UuaXNJbmZp'@;
put 'bml0eSgpKXt2YXIgVGU9X2UuZ2V0WCgpLFNlPVRlLnVtb2QodGhpcy5uKTtpZigwIT09U2UuY21wbigwKSl7dmFyIHplPW1lLmludm0odGhpcy5uKS5tdWwoU2UubXVsKEsuZ2V0UHJpdmF0ZSgpKS5pYWRkKEwpKTtpZigwIT09KHplPXplLnVtb2QodGhpcy5uKSkuY21wbigwKSl7dmFyIFY9'@;
put 'KF9lLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1UZS5jbXAoU2UpPzI6MCk7cmV0dXJuIFcuY2Fub25pY2FsJiZ6ZS5jbXAodGhpcy5uaCk+MCYmKHplPXRoaXMubi5zdWIoemUpLFZePTEpLG5ldyBPKHtyOlNlLHM6emUscmVjb3ZlcnlQYXJhbTpWfSl9fX19fX0sei5wcm90b3R5cGUudmVy'@;
put 'aWZ5PWZ1bmN0aW9uKEwsSyxVLFcsWSl7WXx8KFk9e30pLEw9dGhpcy5fdHJ1bmNhdGVUb04oTCwhMSxZLm1zZ0JpdExlbmd0aCksVT10aGlzLmtleUZyb21QdWJsaWMoVSxXKTt2YXIgWD0oSz1uZXcgTyhLLCJoZXgiKSkucixlZT1LLnM7aWYoWC5jbXBuKDEpPDB8fFguY21wKHRoaXMubik+'@;
put 'PTB8fGVlLmNtcG4oMSk8MHx8ZWUuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIGxlLEo9ZWUuaW52bSh0aGlzLm4pLHJlPUoubXVsKEwpLnVtb2QodGhpcy5uKSxpZT1KLm11bChYKS51bW9kKHRoaXMubik7cmV0dXJuIHRoaXMuY3VydmUuX21heHdlbGxUcmljaz8hKGxlPXRoaXMuZy5q'@;
put 'bXVsQWRkKHJlLFUuZ2V0UHVibGljKCksaWUpKS5pc0luZmluaXR5KCkmJmxlLmVxWFRvUChYKTohKGxlPXRoaXMuZy5tdWxBZGQocmUsVS5nZXRQdWJsaWMoKSxpZSkpLmlzSW5maW5pdHkoKSYmMD09PWxlLmdldFgoKS51bW9kKHRoaXMubikuY21wKFgpfSx6LnByb3RvdHlwZS5yZWNvdmVy'@;
put 'UHViS2V5PWZ1bmN0aW9uKE4sTCxLLFUpe1AoKDMmSyk9PT1LLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzIiksTD1uZXcgTyhMLFUpO3ZhciBXPXRoaXMubixZPW5ldyBJKE4pLFg9TC5yLGVlPUwucyxKPTEmSyxyZT1LPj4xO2lmKFguY21wKHRoaXMuY3VydmUu'@;
put 'cC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZyZSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZSIpO1g9dGhpcy5jdXJ2ZS5wb2ludEZyb21YKHJlP1guYWRkKHRoaXMuY3VydmUubik6WCxKKTt2YXIgaWU9TC5yLmludm0oVyksbGU9Vy5zdWIo'@;
put 'WSkubXVsKGllKS51bW9kKFcpLG1lPWVlLm11bChpZSkudW1vZChXKTtyZXR1cm4gdGhpcy5nLm11bEFkZChsZSxYLG1lKX0sei5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbihOLEwsSyxVKXtpZihudWxsIT09KEw9bmV3IE8oTCxVKSkucmVjb3ZlcnlQYXJhbSlyZXR1'@;
put 'cm4gTC5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgVz0wO1c8NDtXKyspe3ZhciBZO3RyeXtZPXRoaXMucmVjb3ZlclB1YktleShOLEwsVyl9Y2F0Y2h7Y29udGludWV9aWYoWS5lcShLKSlyZXR1cm4gV310aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3Rv'@;
put 'ciIpfX0sMTI1MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM3ODUpLGc9Xyg5NTMpLmFzc2VydDtmdW5jdGlvbiBCKHcsUCl7dGhpcy5lYz13LHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsUC5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKFAucHJpdixQLnByaXZFbmMp'@;
put 'LFAucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoUC5wdWIsUC5wdWJFbmMpfXVlLmV4cG9ydHM9QixCLmZyb21QdWJsaWM9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKFAse3B1YjpGLHB1YkVuYzpPfSl9LEIuZnJvbVByaXZhdGU9ZnVuY3Rpb24oUCxGLE8p'@;
put 'e3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKFAse3ByaXY6Rixwcml2RW5jOk99KX0sQi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgUD10aGlzLmdldFB1YmxpYygpO3JldHVybiBQLmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjoiSW52YWxpZCBwdWJsaWMg'@;
put 'a2V5In06UC52YWxpZGF0ZSgpP1AubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5ICogTiAhPSBPIn06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnQi'@;
put 'fX0sQi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKFAsRil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBQJiYoRj1QLFA9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLEY/dGhpcy5wdWIuZW5jb2RlKEYsUCk6dGhpcy5wdWJ9LEIucHJvdG90'@;
put 'eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24oUCl7cmV0dXJuImhleCI9PT1QP3RoaXMucHJpdi50b1N0cmluZygxNiwyKTp0aGlzLnByaXZ9LEIucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKFAsRil7dGhpcy5wcml2PW5ldyBJKFAsRnx8MTYpLHRoaXMucHJpdj10aGlzLnByaXYu'@;
put 'dW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxCLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uKFAsRil7aWYoUC54fHxQLnkpcmV0dXJuIm1vbnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBlP2coUC54LCJOZWVkIHggY29vcmRpbmF0ZSIpOigic2hvcnQiPT09dGhpcy5lYy5jdXJ2ZS50eXBl'@;
put 'fHwiZWR3YXJkcyI9PT10aGlzLmVjLmN1cnZlLnR5cGUpJiZnKFAueCYmUC55LCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KFAueCxQLnkpKTt0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KFAsRil9LEIu'@;
put 'cHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbihQKXtyZXR1cm4gUC52YWxpZGF0ZSgpfHxnKFAudmFsaWRhdGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxpZGF0ZWQiKSxQLm11bCh0aGlzLnByaXYpLmdldFgoKX0sQi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMu'@;
put 'ZWMuc2lnbihQLHRoaXMsRixPKX0sQi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkoUCxGLHRoaXMsdm9pZCAwLE8pfSxCLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlz'@;
put 'LnByaXYudG9TdHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKSsiID4ifX0sNjExOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzc4NSkseT1fKDk1MyksZz15LmFzc2VydDtmdW5jdGlvbiBCKHosTil7aWYoeiBpbnN0YW5jZW9mIEIp'@;
put 'cmV0dXJuIHo7dGhpcy5faW1wb3J0REVSKHosTil8fChnKHouciYmei5zLCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHMiKSx0aGlzLnI9bmV3IEkoei5yLDE2KSx0aGlzLnM9bmV3IEkoei5zLDE2KSx0aGlzLnJlY292ZXJ5UGFyYW09dm9pZCAwPT09ei5yZWNvdmVyeVBhcmFtP251bGw6ei5y'@;
put 'ZWNvdmVyeVBhcmFtKX1mdW5jdGlvbiB3KCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIFAoeixOKXt2YXIgTD16W04ucGxhY2UrK107aWYoISgxMjgmTCkpcmV0dXJuIEw7dmFyIEs9MTUmTDtpZigwPT09S3x8Sz40fHwwPT09eltOLnBsYWNlXSlyZXR1cm4hMTtmb3IodmFyIFU9MCxXPTAsWT1O'@;
put 'LnBsYWNlO1c8SztXKyssWSsrKVU8PD04LFV8PXpbWV0sVT4+Pj0wO3JldHVybiEoVTw9MTI3KSYmKE4ucGxhY2U9WSxVKX1mdW5jdGlvbiBGKHope2Zvcih2YXIgTj0wLEw9ei5sZW5ndGgtMTsheltOXSYmISgxMjgmeltOKzFdKSYmTjxMOylOKys7cmV0dXJuIDA9PT1OP3o6ei5zbGljZShO'@;
put 'KX1mdW5jdGlvbiBPKHosTil7aWYoTjwxMjgpei5wdXNoKE4pO2Vsc2V7dmFyIEw9MSsoTWF0aC5sb2coTikvTWF0aC5MTjI+Pj4zKTtmb3Ioei5wdXNoKDEyOHxMKTstLUw7KXoucHVzaChOPj4+KEw8PDMpJjI1NSk7ei5wdXNoKE4pfX11ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuX2ltcG9y'@;
put 'dERFUj1mdW5jdGlvbihOLEwpe049eS50b0FycmF5KE4sTCk7dmFyIEs9bmV3IHc7aWYoNDghPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIFU9UChOLEspO2lmKCExPT09VXx8VStLLnBsYWNlIT09Ti5sZW5ndGh8fDIhPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIFc9UChOLEspO2lm'@;
put 'KCExPT09V3x8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIFk9Ti5zbGljZShLLnBsYWNlLFcrSy5wbGFjZSk7aWYoSy5wbGFjZSs9VywyIT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBYPVAoTixLKTtpZighMT09PVh8fE4ubGVuZ3RoIT09WCtLLnBsYWNlfHwxMjgmTltLLnBsYWNl'@;
put 'XSlyZXR1cm4hMTt2YXIgZWU9Ti5zbGljZShLLnBsYWNlLFgrSy5wbGFjZSk7aWYoMD09PVlbMF0pe2lmKCEoMTI4JllbMV0pKXJldHVybiExO1k9WS5zbGljZSgxKX1pZigwPT09ZWVbMF0pe2lmKCEoMTI4JmVlWzFdKSlyZXR1cm4hMTtlZT1lZS5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5l'@;
put 'dyBJKFkpLHRoaXMucz1uZXcgSShlZSksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LEIucHJvdG90eXBlLnRvREVSPWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuci50b0FycmF5KCksSz10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmTFswXSYmKEw9WzBdLmNvbmNhdChMKSksMTI4JktbMF0m'@;
put 'JihLPVswXS5jb25jYXQoSykpLEw9RihMKSxLPUYoSyk7IShLWzBdfHwxMjgmS1sxXSk7KUs9Sy5zbGljZSgxKTt2YXIgVT1bMl07TyhVLEwubGVuZ3RoKSwoVT1VLmNvbmNhdChMKSkucHVzaCgyKSxPKFUsSy5sZW5ndGgpO3ZhciBXPVUuY29uY2F0KEspLFk9WzQ4XTtyZXR1cm4gTyhZLFcu'@;
put 'bGVuZ3RoKSxZPVkuY29uY2F0KFcpLHkuZW5jb2RlKFksTil9fSw1OTgwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzcxNSkseT1fKDU0MjcpLGc9Xyg5NTMpLEI9Zy5hc3NlcnQsdz1nLnBhcnNlQnl0ZXMsUD1fKDkwODcpLEY9XygzNjIyKTtmdW5jdGlvbiBPKHope2lmKEIo'@;
put 'ImVkMjU1MTkiPT09eiwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhciIpLCEodGhpcyBpbnN0YW5jZW9mIE8pKXJldHVybiBuZXcgTyh6KTt0aGlzLmN1cnZlPXo9eVt6XS5jdXJ2ZSx0aGlzLmc9ei5nLHRoaXMuZy5wcmVjb21wdXRlKHoubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBv'@;
put 'aW50Q2xhc3M9ei5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKHoubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9SS5zaGE1MTJ9dWUuZXhwb3J0cz1PLE8ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oTixMKXtOPXcoTik7dmFyIEs9dGhpcy5rZXlG'@;
put 'cm9tU2VjcmV0KEwpLFU9dGhpcy5oYXNoSW50KEsubWVzc2FnZVByZWZpeCgpLE4pLFc9dGhpcy5nLm11bChVKSxZPXRoaXMuZW5jb2RlUG9pbnQoVyksWD10aGlzLmhhc2hJbnQoWSxLLnB1YkJ5dGVzKCksTikubXVsKEsucHJpdigpKSxlZT1VLmFkZChYKS51bW9kKHRoaXMuY3VydmUubik7'@;
put 'cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjpXLFM6ZWUsUmVuY29kZWQ6WX0pfSxPLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oTixMLEspe2lmKE49dyhOKSwoTD10aGlzLm1ha2VTaWduYXR1cmUoTCkpLlMoKS5ndGUoTC5lZGRzYS5jdXJ2ZS5uKXx8TC5TKCkuaXNOZWcoKSlyZXR1'@;
put 'cm4hMTt2YXIgVT10aGlzLmtleUZyb21QdWJsaWMoSyksVz10aGlzLmhhc2hJbnQoTC5SZW5jb2RlZCgpLFUucHViQnl0ZXMoKSxOKSxZPXRoaXMuZy5tdWwoTC5TKCkpO3JldHVybiBMLlIoKS5hZGQoVS5wdWIoKS5tdWwoVykpLmVxKFkpfSxPLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9u'@;
put 'KCl7Zm9yKHZhciBOPXRoaXMuaGFzaCgpLEw9MDtMPGFyZ3VtZW50cy5sZW5ndGg7TCsrKU4udXBkYXRlKGFyZ3VtZW50c1tMXSk7cmV0dXJuIGcuaW50RnJvbUxFKE4uZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sTy5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihOKXty'@;
put 'ZXR1cm4gUC5mcm9tUHVibGljKHRoaXMsTil9LE8ucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24oTil7cmV0dXJuIFAuZnJvbVNlY3JldCh0aGlzLE4pfSxPLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKHRo'@;
put 'aXMsTil9LE8ucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKE4pe3ZhciBMPU4uZ2V0WSgpLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gTFt0aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD1OLmdldFgoKS5pc09kZCgpPzEyODowLEx9LE8ucHJvdG90eXBlLmRl'@;
put 'Y29kZVBvaW50PWZ1bmN0aW9uKE4pe3ZhciBMPShOPWcucGFyc2VCeXRlcyhOKSkubGVuZ3RoLTEsSz1OLnNsaWNlKDAsTCkuY29uY2F0KC0xMjkmTltMXSksVT0hISgxMjgmTltMXSksVz1nLmludEZyb21MRShLKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKFcsVSl9LE8ucHJvdG90'@;
put 'eXBlLmVuY29kZUludD1mdW5jdGlvbihOKXtyZXR1cm4gTi50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LE8ucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbihOKXtyZXR1cm4gZy5pbnRGcm9tTEUoTil9LE8ucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24oTil7cmV0dXJu'@;
put 'IE4gaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSw5MDg3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oOTUzKSx5PUkuYXNzZXJ0LGc9SS5wYXJzZUJ5dGVzLEI9SS5jYWNoZWRQcm9wZXJ0eTtmdW5jdGlvbiB3KFAsRil7dGhpcy5lZGRzYT1QLHRoaXMuX3NlY3JldD1nKEYu'@;
put 'c2VjcmV0KSxQLmlzUG9pbnQoRi5wdWIpP3RoaXMuX3B1Yj1GLnB1Yjp0aGlzLl9wdWJCeXRlcz1nKEYucHViKX13LmZyb21QdWJsaWM9ZnVuY3Rpb24oRixPKXtyZXR1cm4gTyBpbnN0YW5jZW9mIHc/TzpuZXcgdyhGLHtwdWI6T30pfSx3LmZyb21TZWNyZXQ9ZnVuY3Rpb24oRixPKXtyZXR1'@;
put 'cm4gTyBpbnN0YW5jZW9mIHc/TzpuZXcgdyhGLHtzZWNyZXQ6T30pfSx3LnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxCKHcsInB1YkJ5dGVzIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSksQih3'@;
put 'LCJwdWIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSksQih3LCJwcml2Qnl0ZXMiLGZ1bmN0aW9uKCl7dmFyIEY9dGhpcy5lZGRzYSxPPXRoaXMuaGFz'@;
put 'aCgpLHo9Ri5lbmNvZGluZ0xlbmd0aC0xLE49Ty5zbGljZSgwLEYuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBOWzBdJj0yNDgsTlt6XSY9MTI3LE5bel18PTY0LE59KSxCKHcsInByaXYiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSks'@;
put 'Qih3LCJoYXNoIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxCKHcsIm1lc3NhZ2VQcmVmaXgiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSks'@;
put 'dy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihGKXtyZXR1cm4geSh0aGlzLl9zZWNyZXQsIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5IiksdGhpcy5lZGRzYS5zaWduKEYsdGhpcyl9LHcucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihGLE8pe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeShGLE8s'@;
put 'dGhpcyl9LHcucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbihGKXtyZXR1cm4geSh0aGlzLl9zZWNyZXQsIktleVBhaXIgaXMgcHVibGljIG9ubHkiKSxJLmVuY29kZSh0aGlzLnNlY3JldCgpLEYpfSx3LnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oRil7cmV0dXJuIEkuZW5jb2Rl'@;
put 'KHRoaXMucHViQnl0ZXMoKSxGKX0sdWUuZXhwb3J0cz13fSwzNjIyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzc4NSkseT1fKDk1MyksZz15LmFzc2VydCxCPXkuY2FjaGVkUHJvcGVydHksdz15LnBhcnNlQnl0ZXM7ZnVuY3Rpb24gUChGLE8pe3RoaXMuZWRkc2E9Riwib2Jq'@;
put 'ZWN0IiE9dHlwZW9mIE8mJihPPXcoTykpLEFycmF5LmlzQXJyYXkoTykmJihnKE8ubGVuZ3RoPT09MipGLmVuY29kaW5nTGVuZ3RoLCJTaWduYXR1cmUgaGFzIGludmFsaWQgc2l6ZSIpLE89e1I6Ty5zbGljZSgwLEYuZW5jb2RpbmdMZW5ndGgpLFM6Ty5zbGljZShGLmVuY29kaW5nTGVuZ3Ro'@;
put 'KX0pLGcoTy5SJiZPLlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLEYuaXNQb2ludChPLlIpJiYodGhpcy5fUj1PLlIpLE8uUyBpbnN0YW5jZW9mIEkmJih0aGlzLl9TPU8uUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShPLlIpP08uUjpPLlJlbmNvZGVkLHRoaXMuX1NlbmNv'@;
put 'ZGVkPUFycmF5LmlzQXJyYXkoTy5TKT9PLlM6Ty5TZW5jb2RlZH1CKFAsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxCKFAsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2Rl'@;
put 'ZCgpKX0pLEIoUCwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSksQihQLCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksUC5wcm90b3R5cGUudG9CeXRlcz1mdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LFAucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHkuZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSx1ZS5leHBvcnRzPVB9LDEwMzc6dWU9Pnt1ZS5l'@;
put 'eHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIx'@;
put 'Il0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2'@;
put 'YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJh'@;
put 'ZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0'@;
put 'YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0'@;
put 'OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0'@;
put 'NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3'@;
put 'N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2'@;
put 'ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdl'@;
put 'Yzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5'@;
put 'NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZm'@;
put 'MjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3'@;
put 'ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3'@;
put 'OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3'@;
put 'ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODki'@;
put 'XSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0'@;
put 'YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZh'@;
put 'MGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUw'@;
put 'NzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdk'@;
put 'ZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0'@;
put 'MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThm'@;
put 'N2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0'@;
put 'YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3'@;
put 'NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5'@;
put 'MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5'@;
put 'MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNl'@;
put 'YTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYz'@;
put 'M2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJm'@;
put 'YWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUx'@;
put 'Il0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWEx'@;
put 'MThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4'@;
put 'MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1'@;
put 'MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0Yzhl'@;
put 'NmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4'@;
put 'ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMw'@;
put 'ZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIs'@;
put 'ImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJj'@;
put 'ZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFm'@;
put 'MGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFl'@;
put 'N2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3'@;
put 'NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3'@;
put 'NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5'@;
put 'NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJd'@;
put 'LFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4'@;
put 'ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJk'@;
put 'ZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4'@;
put 'YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNh'@;
put 'NTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJk'@;
put 'ZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2Zm'@;
put 'Y2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2'@;
put 'IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3'@;
put 'Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMw'@;
put 'ZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3'@;
put 'ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVm'@;
put 'ODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1'@;
put 'NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYw'@;
put 'YTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4'@;
put 'ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3'@;
put 'M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFl'@;
put 'NTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0'@;
put 'IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVh'@;
put 'MWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4'@;
put 'YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhk'@;
put 'YWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYx'@;
put 'NWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2'@;
put 'MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMz'@;
put 'YmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYi'@;
put 'XSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVh'@;
put 'MjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMy'@;
put 'Zjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5'@;
put 'NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRi'@;
put 'YzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkz'@;
put 'NmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4Yzgw'@;
put 'MDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIs'@;
put 'IjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRl'@;
put 'MzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMx'@;
put 'OGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMz'@;
put 'MzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0Njhm'@;
put 'YmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEz'@;
put 'OTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5'@;
put 'MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxb'@;
put 'IjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdl'@;
put 'OWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2Vm'@;
put 'NDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRj'@;
put 'Yzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThj'@;
put 'ZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZh'@;
put 'MGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4'@;
put 'Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIs'@;
put 'IjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgx'@;
put 'MjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0'@;
put 'ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2'@;
put 'OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2'@;
put 'OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUw'@;
put 'YmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5'@;
put 'MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0s'@;
put 'WyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdl'@;
put 'YjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2'@;
put 'OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNj'@;
put 'ZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2'@;
put 'YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0'@;
put 'NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1'@;
put 'ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwi'@;
put 'ZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZi'@;
put 'YTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJk'@;
put 'ODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3'@;
put 'MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRl'@;
put 'ZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFi'@;
put 'ZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQx'@;
put 'MGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIx'@;
put 'ZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIw'@;
put 'YTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFj'@;
put 'NWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlk'@;
put 'OTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4Mjdj'@;
put 'ZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5'@;
put 'Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1'@;
put 'ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJl'@;
put 'N2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZm'@;
put 'MGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0'@;
put 'Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcy'@;
put 'OTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQx'@;
put 'MTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3'@;
put 'ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAz'@;
put 'MTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1'@;
put 'ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMy'@;
put 'NWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAy'@;
put 'IiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgy'@;
put 'OGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEw'@;
put 'MWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjky'@;
put 'M2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEy'@;
put 'ZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcw'@;
put 'NTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUy'@;
put 'MWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1'@;
put 'Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2'@;
put 'ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0'@;
put 'OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5Yjll'@;
put 'YmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUy'@;
put 'ZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRi'@;
put 'MGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdk'@;
put 'MGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5'@;
put 'MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3'@;
put 'NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3'@;
put 'Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdi'@;
put 'ZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2'@;
put 'MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3'@;
put 'Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRi'@;
put 'NTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODci'@;
put 'XSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQz'@;
put 'MzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1'@;
put 'OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEz'@;
put 'NzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0'@;
put 'ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2Uy'@;
put 'NzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4'@;
put 'ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNl'@;
put 'OSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdm'@;
put 'MzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYy'@;
put 'NjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2'@;
put 'ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4'@;
put 'NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVk'@;
put 'YzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSw5NTM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9cSx5PV8oMzc4NSksZz1fKDk3NDYpLEI9Xyg0NTA0KTtJLmFzc2VydD1nLEkudG9BcnJheT1CLnRvQXJyYXksSS56'@;
put 'ZXJvMj1CLnplcm8yLEkudG9IZXg9Qi50b0hleCxJLmVuY29kZT1CLmVuY29kZSxJLmdldE5BRj1mdW5jdGlvbiB3KE4sTCxLKXt2YXIgVyxVPW5ldyBBcnJheShNYXRoLm1heChOLmJpdExlbmd0aCgpLEspKzEpO2ZvcihXPTA7VzxVLmxlbmd0aDtXKz0xKVVbV109MDt2YXIgWT0xPDxMKzEs'@;
put 'WD1OLmNsb25lKCk7Zm9yKFc9MDtXPFUubGVuZ3RoO1crKyl7dmFyIGVlLEo9WC5hbmRsbihZLTEpO1guaXNPZGQoKT9YLmlzdWJuKGVlPUo+KFk+PjEpLTE/KFk+PjEpLUo6Sik6ZWU9MCxVW1ddPWVlLFguaXVzaHJuKDEpfXJldHVybiBVfSxJLmdldEpTRj1mdW5jdGlvbiBQKE4sTCl7dmFy'@;
put 'IEs9W1tdLFtdXTtOPU4uY2xvbmUoKSxMPUwuY2xvbmUoKTtmb3IodmFyIFksVT0wLFc9MDtOLmNtcG4oLVUpPjB8fEwuY21wbigtVyk+MDspe3ZhciBKLHJlLFg9Ti5hbmRsbigzKStVJjMsZWU9TC5hbmRsbigzKStXJjM7Mz09PVgmJihYPS0xKSwzPT09ZWUmJihlZT0tMSksSj0xJlg/MyE9'@;
put 'KFk9Ti5hbmRsbig3KStVJjcpJiY1IT09WXx8MiE9PWVlP1g6LVg6MCxLWzBdLnB1c2goSikscmU9MSZlZT8zIT0oWT1MLmFuZGxuKDcpK1cmNykmJjUhPT1ZfHwyIT09WD9lZTotZWU6MCxLWzFdLnB1c2gocmUpLDIqVT09PUorMSYmKFU9MS1VKSwyKlc9PT1yZSsxJiYoVz0xLVcpLE4uaXVz'@;
put 'aHJuKDEpLEwuaXVzaHJuKDEpfXJldHVybiBLfSxJLmNhY2hlZFByb3BlcnR5PWZ1bmN0aW9uIEYoTixMLEspe3ZhciBVPSJfIitMO04ucHJvdG90eXBlW0xdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXNbVV0/dGhpc1tVXTp0aGlzW1VdPUsuY2FsbCh0aGlzKX19LEkucGFyc2VC'@;
put 'eXRlcz1mdW5jdGlvbiBPKE4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgTj9JLnRvQXJyYXkoTiwiaGV4Iik6Tn0sSS5pbnRGcm9tTEU9ZnVuY3Rpb24geihOKXtyZXR1cm4gbmV3IHkoTiwiaGV4IiwibGUiKX19LDM3ODU6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSx5KXsidXNlIHN0'@;
put 'cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlw'@;
put 'ZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMu'@;
put 'X2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13OnkuQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Xyg1NTY4KS5C'@;
put 'dWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQp'@;
put 'LHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0'@;
put 'dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0'@;
put 'aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShw'@;
put 'LGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMs'@;
put 'eCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jk'@;
put 'cz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0'@;
put 'JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4g'@;
put 'dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJi'@;
put 'ZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxl'@;
put 'Ij09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3Ry'@;
put 'aXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFy'@;
put 'IGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2Ir'@;
put 'MTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29y'@;
put 'ZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRo'@;
put 'aXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgb2U9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylvZSo9Yjt0aGlzLmltdWxuKG9lKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jk'@;
put 'c1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlz'@;
put 'Lmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5n'@;
put 'dGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9'@;
put 'LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAi'@;
put 'KSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwi'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1'@;
put 'LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3'@;
put 'NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtm'@;
put 'dW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEw'@;
put 'ODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsb2U9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRz'@;
put 'W3NlXSkrb2UpLzY3MTA4ODY0fDAsb2U9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8b2UsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0o'@;
put 'cD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4'@;
put 'PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0z'@;
put 'Nil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgb2U9dGhpcy5jbG9uZSgpO2ZvcihvZS5uZWdhdGl2ZT0wOyFvZS5pc1plcm8oKTspe3ZhciB0ZT1vZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KG9lPW9lLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9y'@;
put 'KHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBw'@;
put 'PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51'@;
put 'bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4g'@;
put 'Zyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0'@;
put 'ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5j'@;
put 'bG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVz'@;
put 'aHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgr'@;
put 'PTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcs'@;
put 'Yj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0x'@;
put 'KStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0s'@;
put 'dy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xv'@;
put 'bmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJv'@;
put 'dG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5s'@;
put 'ZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJu'@;
put 'IGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlv'@;
put 'bihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7'@;
put 'eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHAp'@;
put 'fSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNs'@;
put 'b25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1i'@;
put 'LndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMu'@;
put 'bmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7'@;
put 'cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhp'@;
put 'cy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5u'@;
put 'b3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1i'@;
put 'P3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1'@;
put 'YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhp'@;
put 'cyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4'@;
put 'ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hd'@;
put 'O3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRp'@;
put 'dmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7'@;
put 'cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4'@;
put 'PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxU'@;
put 'LndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVu'@;
put 'Z3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgp'@;
put 'LmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLG9lPTB8Q1swXSx0ZT04MTkxJm9lLHNlPW9lPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxhdD0wfENbMl0sTWU9ODE5MSZhdCx2ZT1h'@;
put 'dD4+PjEzLFhlPTB8Q1szXSxqZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4x'@;
put 'MyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxzaT0wfFRbMV0sUXQ9ODE5MSZzaSxzbj1zaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9'@;
put 'MHxUWzNdLFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxCbj0wfFRbN10scm49ODE5MSZCbix6dD1Cbj4+PjEzLGhpPTB8VFs4'@;
put 'XSxjbj04MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgaG89KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkp'@;
put 'K01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEpl'@;
put 'LFB0KTt2YXIgTWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoTWk+Pj4yNil8MCxNaSY9Njcx'@;
put 'MDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5p'@;
put 'bXVsKEplLHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXww'@;
put 'LHZyJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxSdCksbT0obT1NYXRoLmltdWwoamUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9'@;
put 'QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1t'@;
put 'K01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVs'@;
put 'KEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKGplLFF0KXwwLG09KG09bStNYXRoLmltdWwoamUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxm'@;
put 'dCl8MCkrTWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwo'@;
put 'dGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09'@;
put 'TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoamUs'@;
put 'aG4pfDAsbT0obT1tK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8'@;
put 'MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXww'@;
put 'KStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmlt'@;
put 'dWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUs'@;
put 'aG4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGplLFd0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxV'@;
put 'dCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwo'@;
put 'dGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09'@;
put 'TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2Us'@;
put 'aG4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8'@;
put 'MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9'@;
put 'QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1t'@;
put 'K01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVs'@;
put 'KCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxm'@;
put 'dCl8MCkrTWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09'@;
put 'KG09bStNYXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoamUsV2UpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01h'@;
put 'dGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5p'@;
put 'bXVsKEplLHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXww'@;
put 'LE5pJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9'@;
put 'QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01h'@;
put 'dGguaW11bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0'@;
put 'aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXwwLG09KG09bStNYXRoLmltdWwoamUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwo'@;
put 'TWUscm4pfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxm'@;
put 'bil8MDt2YXIgSW89KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9Njcx'@;
put 'MDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5p'@;
put 'bXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwo'@;
put 'UWUsc3QpfDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChS'@;
put 'ZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChqZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLGNuKXww'@;
put 'LG09KG09bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8'@;
put 'MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwo'@;
put 'aXQsV3QpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxV'@;
put 'dCl8MCxFPUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXww'@;
put 'LEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChSZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLGNuKXwwLG09KG09bStNYXRoLmltdWwoamUsZm4pfDAp'@;
put 'K01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUs'@;
put 'ZW4pfDApKyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChp'@;
put 'dCxVdCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXww'@;
put 'LG09KG09bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1F'@;
put 'K01hdGguaW11bChSZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgZ289KGorKEU9RStNYXRoLmltdWwoamUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxlbil8MCkrTWF0'@;
put 'aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0'@;
put 'LFV0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXww'@;
put 'LEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDAp'@;
put 'K01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUs'@;
put 'ZW4pfDApKyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChp'@;
put 'dCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXww'@;
put 'LG09KG09bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBjbz0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8'@;
put 'MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhjbz4+PjI2KXwwLGNvJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwo'@;
put 'aXQscm4pfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxm'@;
put 'bil8MDt2YXIgX289KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoX28+Pj4yNil8MCxfbyY9Njcx'@;
put 'MDg4NjMsRT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5p'@;
put 'bXVsKCRlLGZuKXwwO3ZhciBPbz0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhPbz4+PjI2KXww'@;
put 'LE9vJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBIbz0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXww'@;
put 'KStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhIbz4+PjI2KXwwLEhvJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGgu'@;
put 'aW11bCh1dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09aG8sSFsxXT1NaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhb'@;
put 'OV09SW8sSFsxMF09THIsSFsxMV09V2ksSFsxMl09Z28sSFsxM109UW4sSFsxNF09Y28sSFsxNV09X28sSFsxNl09T28sSFsxN109SG8sSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1'@;
put 'bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8'@;
put 'NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIFgoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4'@;
put 'ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4'@;
put 'ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihw'@;
put 'KXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zv'@;
put 'cih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09'@;
put 'ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLG9lPTA7b2U8VDtvZSs9RSlmb3IodmFyIHRlPW0sc2U9'@;
put 'QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbb2Urd2VdLEplPUNbb2Urd2VdLGF0PXhbb2Urd2Ural0sTWU9Q1tvZSt3ZStqXSx2ZT10ZSphdC1zZSpNZTtNZT10ZSpNZStzZSphdCx4W29lK3dlXT1VZSsoYXQ9dmUpLENbb2Urd2VdPUplK01lLHhbb2Urd2Ural09VWUtYXQsQ1tvZSt3ZStq'@;
put 'XT1KZS1NZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxK'@;
put 'LnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUx'@;
put 'M2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlw'@;
put 'ZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJv'@;
put 'dG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VS'@;
put 'QlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksb2U9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVu'@;
put 'Z3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILG9lLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKm9lW3dlXS1tW3dlXSp0ZVt3ZV07bVt3'@;
put 'ZV09RVt3ZV0qdGVbd2VdK21bd2VdKm9lW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVe'@;
put 'Yi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90'@;
put 'b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9'@;
put 'LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIr'@;
put 'PUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJv'@;
put 'dG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5l'@;
put 'dyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09'@;
put 'PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAm'@;
put 'JnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+'@;
put 'Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4g'@;
put 'dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1i'@;
put 'JTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3Ro'@;
put 'PUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+'@;
put 'PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgb2U9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxvZT4+PlQsQT1vZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVu'@;
put 'Z3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5w'@;
put 'cm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0'@;
put 'aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5s'@;
put 'ZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHAp'@;
put 'fSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1w'@;
put 'LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFy'@;
put 'IGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3Ro'@;
put 'LGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCks'@;
put 'dGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08'@;
put 'MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4g'@;
put 'dGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0'@;
put 'aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhp'@;
put 'cy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlz'@;
put 'Lmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAs'@;
put 'SD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5n'@;
put 'dGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIG9lPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1vZS5uZWdhdGl2ZSYmKEM9b2UsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9'@;
put 'RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5u'@;
put 'ZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5w'@;
put 'cm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1i'@;
put 'JiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUgu'@;
put 'ZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5s'@;
put 'ZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNb'@;
put 'MF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnBy'@;
put 'b3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10'@;
put 'aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5k'@;
put 'aXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDty'@;
put 'ZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMu'@;
put 'c3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdh'@;
put 'dGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7'@;
put 'IWIuaXNaZXJvKCk7KXtmb3IodmFyIG9lPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZvZTwyNjsrK29lLHRlPDw9MSk7aWYob2U+MClmb3IoYi5pdXNocm4ob2UpO29lLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1'@;
put 'c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigx'@;
put 'KTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAu'@;
put 'aXNaZXJvKCkpO3ZhciBvZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29y'@;
put 'ZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0t'@;
put 'ID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihvZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZvZS5pYWRkKHApLG9lfSx3LnByb3RvdHlwZS5nY2Q9'@;
put 'ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVu'@;
put 'KCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkp'@;
put 'YnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5p'@;
put 'c09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAt'@;
put 'YikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jk'@;
put 'c1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rp'@;
put 'b24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJp'@;
put 'ZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5u'@;
put 'ZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5s'@;
put 'ZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7'@;
put 'cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0'@;
put 'aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4o'@;
put 'cCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5y'@;
put 'ZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBw'@;
put 'b3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRG'@;
put 'cm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhp'@;
put 'cy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBn'@;
put 'KHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y'@;
put 'ZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJu'@;
put 'IGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y'@;
put 'ZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQu'@;
put 'aW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1m'@;
put 'dW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVk'@;
put 'U3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJz'@;
put 'IiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl'@;
put 'ZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGws'@;
put 'cDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVu'@;
put 'Y3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5'@;
put 'IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3Ru'@;
put 'KDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNo'@;
put 'aWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMu'@;
put 'bWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3Rv'@;
put 'dHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1'@;
put 'cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmlt'@;
put 'dWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5n'@;
put 'dGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+'@;
put 'PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0w'@;
put 'O3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0'@;
put 'aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0'@;
put 'dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihyZVtwXSlyZXR1cm4gcmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9l'@;
put 'O2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiByZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZl'@;
put 'cyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJl'@;
put 'ZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90'@;
put 'eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+'@;
put 'PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9'@;
put 'ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3Vi'@;
put 'KGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5f'@;
put 'dmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5j'@;
put 'bG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3Zh'@;
put 'ciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVk'@;
put 'KHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksb2U9'@;
put 'dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxu'@;
put 'KHNlLVVlLTEpKTtvZT1vZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBvZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0'@;
put 'aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0Nb'@;
put 'MF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3Io'@;
put 'dmFyIEE9Yi53b3Jkc1tUXSxvZT1tLTE7b2U+PTA7b2UtLSl7dmFyIHRlPUE+Pm9lJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PW9lKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09'@;
put 'MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxs'@;
put 'LGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IHplKHApfSxCKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIg'@;
put 'Yj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFz'@;
put 'a24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMu'@;
put 'bSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5p'@;
put 'bWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3Rv'@;
put 'dHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPV8ubm1kKHVlKSx0aGlzKX0sNDQyOTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcT1PYmplY3QuZGVmaW5lUHJvcGVydHl8fCExO2lm'@;
put 'KHEpdHJ5e3Eoe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7cT0hMX11ZS5leHBvcnRzPXF9LDM5ODE6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1FdmFsRXJyb3J9LDE2NDg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1FcnJvcn0sNDcyNjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5l'@;
put 'eHBvcnRzPVJhbmdlRXJyb3J9LDY3MTI6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1SZWZlcmVuY2VFcnJvcn0sMzQ2NDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVN5bnRheEVycm9yfSw0NDUzOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9VHlwZUVycm9yfSwzOTE1'@;
put 'OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9VVJJRXJyb3J9LDg4OTI6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1PYmplY3R9LDcxODc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEIsST1fKDUxMDgpLHk9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVs'@;
put 'bCxnPXkmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LmFwcGx5P3kuYXBwbHk6ZnVuY3Rpb24oX2UsVGUsU2Upe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChfZSxUZSxTZSl9O0I9eSYmImZ1bmN0aW9uIj09dHlwZW9mIHkub3duS2V5cz95Lm93bktleXM6T2JqZWN0LmdldE93'@;
put 'blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihfZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKF9lKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhfZSkpfTpmdW5jdGlvbihfZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKF9lKX07dmFy'@;
put 'IFA9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihfZSl7cmV0dXJuIF9lIT1fZX07ZnVuY3Rpb24gRigpe0YuaW5pdC5jYWxsKHRoaXMpfXVlLmV4cG9ydHM9Rix1ZS5leHBvcnRzLm9uY2U9ZnVuY3Rpb24gcmUobWUsX2Upe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihUZSxTZSl7ZnVuY3Rp'@;
put 'b24gemUocCl7bWUucmVtb3ZlTGlzdGVuZXIoX2UsViksU2UocCl9ZnVuY3Rpb24gVigpeyJmdW5jdGlvbiI9PXR5cGVvZiBtZS5yZW1vdmVMaXN0ZW5lciYmbWUucmVtb3ZlTGlzdGVuZXIoImVycm9yIix6ZSksVGUoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKX1sZShtZSxfZSxWLHtvbmNl'@;
put 'OiEwfSksImVycm9yIiE9PV9lJiZmdW5jdGlvbiBpZShtZSxfZSxUZSl7ImZ1bmN0aW9uIj09dHlwZW9mIG1lLm9uJiZsZShtZSwiZXJyb3IiLF9lLFRlKX0obWUsemUse29uY2U6ITB9KX0pfSxGLkV2ZW50RW1pdHRlcj1GLEYucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLEYucHJvdG90eXBl'@;
put 'Ll9ldmVudHNDb3VudD0wLEYucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBPPTEwO2Z1bmN0aW9uIHoobWUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rp'@;
put 'b24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbWUpfWZ1bmN0aW9uIE4obWUpe3JldHVybiB2b2lkIDA9PT1tZS5fbWF4TGlzdGVuZXJzP0YuZGVmYXVsdE1heExpc3RlbmVyczptZS5fbWF4TGlzdGVuZXJzfWZ1bmN0aW9uIEwobWUsX2UsVGUsU2Upe3ZhciB6ZSxWLHA7aWYoeihUZSksdm9p'@;
put 'ZCAwPT09KFY9bWUuX2V2ZW50cyk/KFY9bWUuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLG1lLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09Vi5uZXdMaXN0ZW5lciYmKG1lLmVtaXQoIm5ld0xpc3RlbmVyIixfZSxUZS5saXN0ZW5lcj9UZS5saXN0ZW5lcjpUZSksVj1tZS5fZXZlbnRz'@;
put 'KSxwPVZbX2VdKSx2b2lkIDA9PT1wKXA9VltfZV09VGUsKyttZS5fZXZlbnRzQ291bnQ7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgcD9wPVZbX2VdPVNlP1tUZSxwXTpbcCxUZV06U2U/cC51bnNoaWZ0KFRlKTpwLnB1c2goVGUpLCh6ZT1OKG1lKSk+MCYmcC5sZW5ndGg+emUmJiFwLndh'@;
put 'cm5lZCl7cC53YXJuZWQ9ITA7dmFyIGI9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrcC5sZW5ndGgrIiAiK1N0cmluZyhfZSkrIiBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNl'@;
put 'IGxpbWl0Iik7Yi5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLGIuZW1pdHRlcj1tZSxiLnR5cGU9X2UsYi5jb3VudD1wLmxlbmd0aCxmdW5jdGlvbiB3KG1lKXtJJiZJLndhcm4mJkkud2FybihtZSl9KGIpfXJldHVybiBtZX1mdW5jdGlvbiBLKCl7aWYoIXRoaXMuZmlyZWQp'@;
put 'cmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVyKHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRz'@;
put 'KX1mdW5jdGlvbiBVKG1lLF9lLFRlKXt2YXIgU2U9e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0Om1lLHR5cGU6X2UsbGlzdGVuZXI6VGV9LHplPUsuYmluZChTZSk7cmV0dXJuIHplLmxpc3RlbmVyPVRlLFNlLndyYXBGbj16ZSx6ZX1mdW5jdGlvbiBXKG1lLF9lLFRlKXt2YXIgU2U9'@;
put 'bWUuX2V2ZW50cztpZih2b2lkIDA9PT1TZSlyZXR1cm5bXTt2YXIgemU9U2VbX2VdO3JldHVybiB2b2lkIDA9PT16ZT9bXToiZnVuY3Rpb24iPT10eXBlb2YgemU/VGU/W3plLmxpc3RlbmVyfHx6ZV06W3plXTpUZT9mdW5jdGlvbiBKKG1lKXtmb3IodmFyIF9lPW5ldyBBcnJheShtZS5sZW5n'@;
put 'dGgpLFRlPTA7VGU8X2UubGVuZ3RoOysrVGUpX2VbVGVdPW1lW1RlXS5saXN0ZW5lcnx8bWVbVGVdO3JldHVybiBfZX0oemUpOlgoemUsemUubGVuZ3RoKX1mdW5jdGlvbiBZKG1lKXt2YXIgX2U9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PV9lKXt2YXIgVGU9X2VbbWVdO2lmKCJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBUZSlyZXR1cm4gMTtpZih2b2lkIDAhPT1UZSlyZXR1cm4gVGUubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIFgobWUsX2Upe2Zvcih2YXIgVGU9bmV3IEFycmF5KF9lKSxTZT0wO1NlPF9lOysrU2UpVGVbU2VdPW1lW1NlXTtyZXR1cm4gVGV9ZnVuY3Rpb24gbGUobWUsX2Us'@;
put 'VGUsU2Upe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBtZS5vbilTZS5vbmNlP21lLm9uY2UoX2UsVGUpOm1lLm9uKF9lLFRlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBtZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVz'@;
put 'dCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBtZSk7bWUuYWRkRXZlbnRMaXN0ZW5lcihfZSxmdW5jdGlvbiB6ZShWKXtTZS5vbmNlJiZtZS5yZW1vdmVFdmVudExpc3RlbmVyKF9lLHplKSxUZShWKX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRiwi'@;
put 'ZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE99LHNldDpmdW5jdGlvbihtZSl7aWYoIm51bWJlciIhPXR5cGVvZiBtZXx8bWU8MHx8UChtZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3Rl'@;
put 'bmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJyttZSsiLiIpO089bWV9fSksRi5pbml0PWZ1bmN0aW9uKCl7KHZvaWQgMD09PXRoaXMuX2V2ZW50c3x8dGhpcy5fZXZlbnRzPT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRo'@;
put 'aXMpLl9ldmVudHMpJiYodGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCksdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfSxGLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe2lmKCJudW1i'@;
put 'ZXIiIT10eXBlb2YgX2V8fF9lPDB8fFAoX2UpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrX2UrIi4iKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPV9l'@;
put 'LHRoaXN9LEYucHJvdG90eXBlLmdldE1heExpc3RlbmVycz1mdW5jdGlvbigpe3JldHVybiBOKHRoaXMpfSxGLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKF9lKXtmb3IodmFyIFRlPVtdLFNlPTE7U2U8YXJndW1lbnRzLmxlbmd0aDtTZSsrKVRlLnB1c2goYXJndW1lbnRzW1NlXSk7dmFyIHpl'@;
put 'PSJlcnJvciI9PT1fZSxWPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1WKXplPXplJiZ2b2lkIDA9PT1WLmVycm9yO2Vsc2UgaWYoIXplKXJldHVybiExO2lmKHplKXt2YXIgcDtpZihUZS5sZW5ndGg+MCYmKHA9VGVbMF0pLHAgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBwO3ZhciBiPW5ldyBF'@;
put 'cnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKHA/IiAoIitwLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgYi5jb250ZXh0PXAsYn12YXIgeD1WW19lXTtpZih2b2lkIDA9PT14KXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB4KWcoeCx0aGlzLFRlKTtlbHNle3ZhciBDPXgubGVuZ3RoLFQ9'@;
put 'WCh4LEMpO2ZvcihTZT0wO1NlPEM7KytTZSlnKFRbU2VdLHRoaXMsVGUpfXJldHVybiEwfSxGLnByb3RvdHlwZS5vbj1GLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihfZSxUZSl7cmV0dXJuIEwodGhpcyxfZSxUZSwhMSl9LEYucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5j'@;
put 'dGlvbihfZSxUZSl7cmV0dXJuIEwodGhpcyxfZSxUZSwhMCl9LEYucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiB6KFRlKSx0aGlzLm9uKF9lLFUodGhpcyxfZSxUZSkpLHRoaXN9LEYucHJvdG90eXBlLnByZXBlbmRPbmNlTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3Jl'@;
put 'dHVybiB6KFRlKSx0aGlzLnByZXBlbmRMaXN0ZW5lcihfZSxVKHRoaXMsX2UsVGUpKSx0aGlzfSxGLnByb3RvdHlwZS5vZmY9Ri5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3ZhciBTZSx6ZSxWLHAsYjtpZih6KFRlKSx2b2lkIDA9PT0oemU9dGhpcy5fZXZlbnRz'@;
put 'KSlyZXR1cm4gdGhpcztpZih2b2lkIDA9PT0oU2U9emVbX2VdKSlyZXR1cm4gdGhpcztpZihTZT09PVRlfHxTZS5saXN0ZW5lcj09PVRlKTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSB6ZVtfZV0semUucmVtb3ZlTGlzdGVu'@;
put 'ZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLF9lLFNlLmxpc3RlbmVyfHxUZSkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIFNlKXtmb3IoVj0tMSxwPVNlLmxlbmd0aC0xO3A+PTA7cC0tKWlmKFNlW3BdPT09VGV8fFNlW3BdLmxpc3RlbmVyPT09VGUpe2I9U2VbcF0ubGlzdGVu'@;
put 'ZXIsVj1wO2JyZWFrfWlmKFY8MClyZXR1cm4gdGhpczswPT09Vj9TZS5zaGlmdCgpOmZ1bmN0aW9uIGVlKG1lLF9lKXtmb3IoO19lKzE8bWUubGVuZ3RoO19lKyspbWVbX2VdPW1lW19lKzFdO21lLnBvcCgpfShTZSxWKSwxPT09U2UubGVuZ3RoJiYoemVbX2VdPVNlWzBdKSx2b2lkIDAhPT16'@;
put 'ZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsX2UsYnx8VGUpfXJldHVybiB0aGlzfSxGLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3ZhciBUZSxTZSx6ZTtpZih2b2lkIDA9PT0oU2U9dGhpcy5fZXZlbnRzKSlyZXR1cm4gdGhp'@;
put 'cztpZih2b2lkIDA9PT1TZS5yZW1vdmVMaXN0ZW5lcilyZXR1cm4gMD09PWFyZ3VtZW50cy5sZW5ndGg/KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApOnZvaWQgMCE9PVNlW19lXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZl'@;
put 'bnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIFNlW19lXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIHAsVj1PYmplY3Qua2V5cyhTZSk7Zm9yKHplPTA7emU8Vi5sZW5ndGg7Kyt6ZSkicmVtb3ZlTGlzdGVuZXIiIT09KHA9Vlt6ZV0pJiZ0aGlzLnJlbW92ZUFsbExp'@;
put 'c3RlbmVycyhwKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZihUZT1TZVtfZV0pKXRoaXMucmVtb3ZlTGlz'@;
put 'dGVuZXIoX2UsVGUpO2Vsc2UgaWYodm9pZCAwIT09VGUpZm9yKHplPVRlLmxlbmd0aC0xO3plPj0wO3plLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihfZSxUZVt6ZV0pO3JldHVybiB0aGlzfSxGLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3JldHVybiBXKHRoaXMsX2UsITApfSxG'@;
put 'LnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oX2Upe3JldHVybiBXKHRoaXMsX2UsITEpfSxGLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24obWUsX2Upe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBtZS5saXN0ZW5lckNvdW50P21lLmxpc3RlbmVyQ291bnQoX2UpOlkuY2FsbChtZSxf'@;
put 'ZSl9LEYucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9WSxGLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/Qih0aGlzLl9ldmVudHMpOltdfX0sMzA0ODoodWUscSxfKT0+e3ZhciBJPV8oOTUwOSkuQnVmZmVyLHk9XygyMzE4KTt1ZS5l'@;
put 'eHBvcnRzPWZ1bmN0aW9uIGcoQix3LFAsRil7aWYoSS5pc0J1ZmZlcihCKXx8KEI9SS5mcm9tKEIsImJpbmFyeSIpKSx3JiYoSS5pc0J1ZmZlcih3KXx8KHc9SS5mcm9tKHcsImJpbmFyeSIpKSw4IT09dy5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZm'@;
put 'ZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBPPVAvOCx6PUkuYWxsb2MoTyksTj1JLmFsbG9jKEZ8fDApLEw9SS5hbGxvYygwKTtPPjB8fEY+MDspe3ZhciBLPW5ldyB5O0sudXBkYXRlKEwpLEsudXBkYXRlKEIpLHcmJksudXBkYXRlKHcpLEw9Sy5kaWdlc3QoKTt2YXIgVT0wO2lm'@;
put 'KE8+MCl7dmFyIFc9ei5sZW5ndGgtTztVPU1hdGgubWluKE8sTC5sZW5ndGgpLEwuY29weSh6LFcsMCxVKSxPLT1VfWlmKFU8TC5sZW5ndGgmJkY+MCl7dmFyIFk9Ti5sZW5ndGgtRixYPU1hdGgubWluKEYsTC5sZW5ndGgtVSk7TC5jb3B5KE4sWSxVLFUrWCksRi09WH19cmV0dXJuIEwuZmls'@;
put 'bCgwKSx7a2V5OnosaXY6Tn19fSw0MDI5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTMyMCkseT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGc9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHosTixMKXtpZighSShOKSl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIgSzthcmd1bWVudHMubGVuZ3RoPj0zJiYoSz1MKSxmdW5jdGlvbiBGKE8pe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT15LmNhbGwoTyl9KHopP2Z1bmN0aW9uKHosTixMKXtmb3IodmFyIEs9MCxVPXou'@;
put 'bGVuZ3RoO0s8VTtLKyspZy5jYWxsKHosSykmJihudWxsPT1MP04oeltLXSxLLHopOk4uY2FsbChMLHpbS10sSyx6KSl9KHosTixLKToic3RyaW5nIj09dHlwZW9mIHo/ZnVuY3Rpb24oeixOLEwpe2Zvcih2YXIgSz0wLFU9ei5sZW5ndGg7SzxVO0srKyludWxsPT1MP04oei5jaGFyQXQoSyks'@;
put 'Syx6KTpOLmNhbGwoTCx6LmNoYXJBdChLKSxLLHopfSh6LE4sSyk6ZnVuY3Rpb24oeixOLEwpe2Zvcih2YXIgSyBpbiB6KWcuY2FsbCh6LEspJiYobnVsbD09TD9OKHpbS10sSyx6KTpOLmNhbGwoTCx6W0tdLEsseikpfSh6LE4sSyl9fSw2MjMwOnVlPT57dWUuZXhwb3J0cz0ib2JqZWN0Ij09'@;
put 'dHlwZW9mIHNlbGY/c2VsZi5Gb3JtRGF0YTp3aW5kb3cuRm9ybURhdGF9LDM4NzM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KTtjb25zdCB5PV8oNzcpLGc9XygyNTIwKSxCPV8oMTM4MSkubWtkaXJzU3luYyx3PV8oMzE4KS51dGltZXNNaWxsaXNTeW5jLFA9XygyNzMz'@;
put 'KTtmdW5jdGlvbiBPKF9lLFRlLFNlLHplKXtjb25zdCBwPSh6ZS5kZXJlZmVyZW5jZT95LnN0YXRTeW5jOnkubHN0YXRTeW5jKShUZSk7aWYocC5pc0RpcmVjdG9yeSgpKXJldHVybiBmdW5jdGlvbiBlZShfZSxUZSxTZSx6ZSxWKXtyZXR1cm4gVGU/cmUoU2UsemUsVik6ZnVuY3Rpb24gSihf'@;
put 'ZSxUZSxTZSx6ZSl7cmV0dXJuIHkubWtkaXJTeW5jKFNlKSxyZShUZSxTZSx6ZSksWShTZSxfZSl9KF9lLm1vZGUsU2UsemUsVil9KHAsX2UsVGUsU2UsemUpO2lmKHAuaXNGaWxlKCl8fHAuaXNDaGFyYWN0ZXJEZXZpY2UoKXx8cC5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9uIHoo'@;
put 'X2UsVGUsU2UsemUsVil7cmV0dXJuIFRlP2Z1bmN0aW9uIE4oX2UsVGUsU2UsemUpe2lmKHplLm92ZXJ3cml0ZSlyZXR1cm4geS51bmxpbmtTeW5jKFNlKSxMKF9lLFRlLFNlLHplKTtpZih6ZS5lcnJvck9uRXhpc3QpdGhyb3cgbmV3IEVycm9yKGAnJHtTZX0nIGFscmVhZHkgZXhpc3RzYCl9'@;
put 'KF9lLFNlLHplLFYpOkwoX2UsU2UsemUsVil9KHAsX2UsVGUsU2UsemUpO2lmKHAuaXNTeW1ib2xpY0xpbmsoKSlyZXR1cm4gZnVuY3Rpb24gbGUoX2UsVGUsU2UsemUpe2xldCBWPXkucmVhZGxpbmtTeW5jKFRlKTtpZih6ZS5kZXJlZmVyZW5jZSYmKFY9Zy5yZXNvbHZlKEkuY3dkKCksVikp'@;
put 'LF9lKXtsZXQgcDt0cnl7cD15LnJlYWRsaW5rU3luYyhTZSl9Y2F0Y2goYil7aWYoIkVJTlZBTCI9PT1iLmNvZGV8fCJVTktOT1dOIj09PWIuY29kZSlyZXR1cm4geS5zeW1saW5rU3luYyhWLFNlKTt0aHJvdyBifWlmKHplLmRlcmVmZXJlbmNlJiYocD1nLnJlc29sdmUoSS5jd2QoKSxwKSks'@;
put 'UC5pc1NyY1N1YmRpcihWLHApKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7Vn0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7cH0nLmApO2lmKFAuaXNTcmNTdWJkaXIocCxWKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgJyR7cH0nIHdpdGggJyR7'@;
put 'Vn0nLmApO3JldHVybiBmdW5jdGlvbiBtZShfZSxUZSl7cmV0dXJuIHkudW5saW5rU3luYyhUZSkseS5zeW1saW5rU3luYyhfZSxUZSl9KFYsU2UpfXJldHVybiB5LnN5bWxpbmtTeW5jKFYsU2UpfShfZSxUZSxTZSx6ZSk7dGhyb3cgcC5pc1NvY2tldCgpP25ldyBFcnJvcihgQ2Fubm90IGNv'@;
put 'cHkgYSBzb2NrZXQgZmlsZTogJHtUZX1gKTpwLmlzRklGTygpP25ldyBFcnJvcihgQ2Fubm90IGNvcHkgYSBGSUZPIHBpcGU6ICR7VGV9YCk6bmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7VGV9YCl9ZnVuY3Rpb24gTChfZSxUZSxTZSx6ZSl7cmV0dXJuIHkuY29weUZpbGVTeW5jKFRlLFNl'@;
put 'KSx6ZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJmZ1bmN0aW9uIEsoX2UsVGUsU2UpeyhmdW5jdGlvbiBVKF9lKXtyZXR1cm4hKDEyOCZfZSl9KShfZSkmJmZ1bmN0aW9uIFcoX2UsVGUpe1koX2UsMTI4fFRlKX0oU2UsX2UpLGZ1bmN0aW9uIFgoX2UsVGUpe2NvbnN0IFNlPXkuc3RhdFN5bmMoX2Up'@;
put 'O3coVGUsU2UuYXRpbWUsU2UubXRpbWUpfShUZSxTZSl9KF9lLm1vZGUsVGUsU2UpLFkoU2UsX2UubW9kZSl9ZnVuY3Rpb24gWShfZSxUZSl7cmV0dXJuIHkuY2htb2RTeW5jKF9lLFRlKX1mdW5jdGlvbiByZShfZSxUZSxTZSl7Y29uc3QgemU9eS5vcGVuZGlyU3luYyhfZSk7dHJ5e2xldCBW'@;
put 'O2Zvcig7bnVsbCE9PShWPXplLnJlYWRTeW5jKCkpOylpZShWLm5hbWUsX2UsVGUsU2UpfWZpbmFsbHl7emUuY2xvc2VTeW5jKCl9fWZ1bmN0aW9uIGllKF9lLFRlLFNlLHplKXtjb25zdCBWPWcuam9pbihUZSxfZSkscD1nLmpvaW4oU2UsX2UpO2lmKHplLmZpbHRlciYmIXplLmZpbHRlcihW'@;
put 'LHApKXJldHVybjtjb25zdHtkZXN0U3RhdDpifT1QLmNoZWNrUGF0aHNTeW5jKFYscCwiY29weSIsemUpO3JldHVybiBPKGIsVixwLHplKX11ZS5leHBvcnRzPWZ1bmN0aW9uIEYoX2UsVGUsU2UpeyJmdW5jdGlvbiI9PXR5cGVvZiBTZSYmKFNlPXtmaWx0ZXI6U2V9KSwoU2U9U2V8fHt9KS5j'@;
put 'bG9iYmVyPSEoImNsb2JiZXIiaW4gU2UpfHwhIVNlLmNsb2JiZXIsU2Uub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gU2U/ISFTZS5vdmVyd3JpdGU6U2UuY2xvYmJlcixTZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PUkuYXJjaCYmSS5lbWl0V2FybmluZygiVXNpbmcgdGhlIHByZXNl'@;
put 'cnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG5cdHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMiIpO2NvbnN0e3NyY1N0'@;
put 'YXQ6emUsZGVzdFN0YXQ6Vn09UC5jaGVja1BhdGhzU3luYyhfZSxUZSwiY29weSIsU2UpO2lmKFAuY2hlY2tQYXJlbnRQYXRoc1N5bmMoX2UsemUsVGUsImNvcHkiKSxTZS5maWx0ZXImJiFTZS5maWx0ZXIoX2UsVGUpKXJldHVybjtjb25zdCBwPWcuZGlybmFtZShUZSk7cmV0dXJuIHkuZXhp'@;
put 'c3RzU3luYyhwKXx8QihwKSxPKFYsX2UsVGUsU2UpfX0sNzE4OToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpO2NvbnN0IHk9Xyg3NzQ5KSxnPV8oMjUyMCkse21rZGlyczpCfT1fKDEzODEpLHtwYXRoRXhpc3RzOnd9PV8oOTI1Nykse3V0aW1lc01pbGxpczpQfT1fKDMx'@;
put 'OCksRj1fKDI3MzMpO2Z1bmN0aW9uIHooKXtyZXR1cm4oej1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsemU9e30peyJmdW5jdGlvbiI9PXR5cGVvZiB6ZSYmKHplPXtmaWx0ZXI6emV9KSx6ZS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gemUpfHwhIXplLmNsb2JiZXIsemUub3Zl'@;
put 'cndyaXRlPSJvdmVyd3JpdGUiaW4gemU/ISF6ZS5vdmVyd3JpdGU6emUuY2xvYmJlcix6ZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PUkuYXJjaCYmSS5lbWl0V2FybmluZygiVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJl'@;
put 'Y29tbWVuZGVkO1xuXG5cdHNlZSBodHRwczovL2dpdGh1Yi5jb20vanByaWNoYXJkc29uL25vZGUtZnMtZXh0cmEvaXNzdWVzLzI2OSIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMSIpO2NvbnN0e3NyY1N0YXQ6VixkZXN0U3RhdDpwfT15aWVsZCBGLmNoZWNrUGF0aHMoVGUsU2UsImNv'@;
put 'cHkiLHplKTtpZih5aWVsZCBGLmNoZWNrUGFyZW50UGF0aHMoVGUsVixTZSwiY29weSIpLCEoeWllbGQgTihUZSxTZSx6ZSkpKXJldHVybjtjb25zdCB4PWcuZGlybmFtZShTZSk7KHlpZWxkIHcoeCkpfHwoeWllbGQgQih4KSkseWllbGQgSyhwLFRlLFNlLHplKX0pKS5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyl9ZnVuY3Rpb24gTihUZSxTZSx6ZSl7cmV0dXJuIEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEwoKXtyZXR1cm4oTD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsemUpe3JldHVybiF6ZS5maWx0ZXJ8fHplLmZpbHRlcihUZSxTZSl9KSkuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEsoVGUsU2UsemUsVil7cmV0dXJuIFUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFUoKXtyZXR1cm4gVT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsemUsVil7Y29uc3QgYj15aWVsZChWLmRlcmVmZXJlbmNlP3kuc3Rh'@;
put 'dDp5LmxzdGF0KShTZSk7aWYoYi5pc0RpcmVjdG9yeSgpKXJldHVybiBmdW5jdGlvbiBpZShUZSxTZSx6ZSxWLHApe3JldHVybiBsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KGIsVGUsU2UsemUsVik7aWYoYi5pc0ZpbGUoKXx8Yi5pc0NoYXJhY3RlckRldmljZSgpfHxiLmlzQmxvY2tEZXZp'@;
put 'Y2UoKSlyZXR1cm4gZnVuY3Rpb24gVyhUZSxTZSx6ZSxWLHApe3JldHVybiBZLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oYixUZSxTZSx6ZSxWKTtpZihiLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGZ1bmN0aW9uIG1lKFRlLFNlLHplLFYpe3JldHVybiBfZS5hcHBseSh0aGlzLGFyZ3VtZW50'@;
put 'cyl9KFRlLFNlLHplLFYpO3Rocm93IGIuaXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7U2V9YCk6Yi5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke1NlfWApOm5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke1Nl'@;
put 'fWApfSksVS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWSgpe3JldHVybihZPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSxWLHApe2lmKCFTZSlyZXR1cm4gWChUZSx6ZSxWLHApO2lmKHAub3ZlcndyaXRlKXJldHVybiB5aWVsZCB5LnVubGluayhWKSxYKFRl'@;
put 'LHplLFYscCk7aWYocC5lcnJvck9uRXhpc3QpdGhyb3cgbmV3IEVycm9yKGAnJHtWfScgYWxyZWFkeSBleGlzdHNgKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gWChUZSxTZSx6ZSxWKXtyZXR1cm4gZWUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGVlKCl7cmV0'@;
put 'dXJuKGVlPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSxWKXtpZih5aWVsZCB5LmNvcHlGaWxlKFNlLHplKSxWLnByZXNlcnZlVGltZXN0YW1wcyl7KGZ1bmN0aW9uIEooVGUpe3JldHVybiEoMTI4JlRlKX0pKFRlLm1vZGUpJiYoeWllbGQgZnVuY3Rpb24gcmUoVGUsU2Up'@;
put 'e3JldHVybiB5LmNobW9kKFRlLDEyOHxTZSl9KHplLFRlLm1vZGUpKTtjb25zdCBwPXlpZWxkIHkuc3RhdChTZSk7eWllbGQgUCh6ZSxwLmF0aW1lLHAubXRpbWUpfXJldHVybiB5LmNobW9kKHplLFRlLm1vZGUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBsZSgpe3JldHVy'@;
put 'bihsZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsemUsVixwKXtTZXx8KHlpZWxkIHkubWtkaXIoVikpO2NvbnN0IGI9W107dmFyIFQseD0hMSxDPSExO3RyeXtmb3IodmFyIGosSD1fYXN5bmNJdGVyYXRvcih5aWVsZCB5Lm9wZW5kaXIoemUpKTt4PSEoaj15aWVsZCBILm5l'@;
put 'eHQoKSkuZG9uZTt4PSExKXtjb25zdCBFPWoudmFsdWU7e2NvbnN0IG09Zy5qb2luKHplLEUubmFtZSksQT1nLmpvaW4oVixFLm5hbWUpO2IucHVzaChOKG0sQSxwKS50aGVuKG9lPT57aWYob2UpcmV0dXJuIEYuY2hlY2tQYXRocyhtLEEsImNvcHkiLHApLnRoZW4oKHtkZXN0U3RhdDp0ZX0p'@;
put 'PT5LKHRlLG0sQSxwKSl9KSl9fX1jYXRjaChFKXtDPSEwLFQ9RX1maW5hbGx5e3RyeXt4JiZudWxsIT1ILnJldHVybiYmKHlpZWxkIEgucmV0dXJuKCkpfWZpbmFsbHl7aWYoQyl0aHJvdyBUfX15aWVsZCBQcm9taXNlLmFsbChiKSxTZXx8KHlpZWxkIHkuY2htb2QoVixUZS5tb2RlKSl9KSku'@;
put 'YXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIF9lKCl7cmV0dXJuKF9lPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihUZSxTZSx6ZSxWKXtsZXQgcD15aWVsZCB5LnJlYWRsaW5rKFNlKTtpZihWLmRlcmVmZXJlbmNlJiYocD1nLnJlc29sdmUoSS5jd2QoKSxwKSksIVRlKXJldHVy'@;
put 'biB5LnN5bWxpbmsocCx6ZSk7bGV0IGI9bnVsbDt0cnl7Yj15aWVsZCB5LnJlYWRsaW5rKHplKX1jYXRjaCh4KXtpZigiRUlOVkFMIj09PXguY29kZXx8IlVOS05PV04iPT09eC5jb2RlKXJldHVybiB5LnN5bWxpbmsocCx6ZSk7dGhyb3cgeH1pZihWLmRlcmVmZXJlbmNlJiYoYj1nLnJlc29s'@;
put 'dmUoSS5jd2QoKSxiKSksRi5pc1NyY1N1YmRpcihwLGIpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvcHkgJyR7cH0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7Yn0nLmApO2lmKEYuaXNTcmNTdWJkaXIoYixwKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUg'@;
put 'JyR7Yn0nIHdpdGggJyR7cH0nLmApO3JldHVybiB5aWVsZCB5LnVubGluayh6ZSkseS5zeW1saW5rKHAsemUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPWZ1bmN0aW9uIE8oVGUsU2Upe3JldHVybiB6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDY0NjQ6KHVlLHEsXyk9'@;
put 'PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDg5ODEpLmZyb21Qcm9taXNlO3VlLmV4cG9ydHM9e2NvcHk6SShfKDcxODkpKSxjb3B5U3luYzpfKDM4NzMpfX0sNTU5MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPV8oODk4MSkuZnJvbVByb21pc2UseT1fKDc3NDkpLGc9XygyNTIw'@;
put 'KSxCPV8oMTM4MSksdz1fKDQ1NDIpLFA9SShmdW5jdGlvbigpe3ZhciBPPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihOKXtsZXQgTDt0cnl7TD15aWVsZCB5LnJlYWRkaXIoTil9Y2F0Y2h7cmV0dXJuIEIubWtkaXJzKE4pfXJldHVybiBQcm9taXNlLmFsbChMLm1hcChLPT53LnJlbW92'@;
put 'ZShnLmpvaW4oTixLKSkpKX0pO3JldHVybiBmdW5jdGlvbiB6KE4pe3JldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpO2Z1bmN0aW9uIEYoTyl7bGV0IHo7dHJ5e3o9eS5yZWFkZGlyU3luYyhPKX1jYXRjaHtyZXR1cm4gQi5ta2RpcnNTeW5jKE8pfXouZm9yRWFjaChOPT57Tj1n'@;
put 'LmpvaW4oTyxOKSx3LnJlbW92ZVN5bmMoTil9KX11ZS5leHBvcnRzPXtlbXB0eURpclN5bmM6RixlbXB0eWRpclN5bmM6RixlbXB0eURpcjpQLGVtcHR5ZGlyOlB9fSw2NTMwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Xyg4OTgxKS5mcm9tUHJvbWlzZSx5PV8oMjUyMCksZz1f'@;
put 'KDc3NDkpLEI9XygxMzgxKTtmdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE8pe2xldCB6O3RyeXt6PXlpZWxkIGcuc3RhdChPKX1jYXRjaHt9aWYoeiYmei5pc0ZpbGUoKSlyZXR1cm47Y29uc3QgTj15LmRpcm5hbWUoTyk7bGV0IEw9bnVsbDt0cnl7'@;
put 'TD15aWVsZCBnLnN0YXQoTil9Y2F0Y2goSyl7aWYoIkVOT0VOVCI9PT1LLmNvZGUpcmV0dXJuIHlpZWxkIEIubWtkaXJzKE4pLHZvaWQoeWllbGQgZy53cml0ZUZpbGUoTywiIikpO3Rocm93IEt9TC5pc0RpcmVjdG9yeSgpP3lpZWxkIGcud3JpdGVGaWxlKE8sIiIpOnlpZWxkIGcucmVhZGRp'@;
put 'cihOKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17Y3JlYXRlRmlsZTpJKGZ1bmN0aW9uIHcoTyl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY3JlYXRlRmlsZVN5bmM6ZnVuY3Rpb24gRihPKXtsZXQgejt0cnl7ej1nLnN0YXRTeW5jKE8pfWNhdGNoe31p'@;
put 'Zih6JiZ6LmlzRmlsZSgpKXJldHVybjtjb25zdCBOPXkuZGlybmFtZShPKTt0cnl7Zy5zdGF0U3luYyhOKS5pc0RpcmVjdG9yeSgpfHxnLnJlYWRkaXJTeW5jKE4pfWNhdGNoKEwpe2lmKCFMfHwiRU5PRU5UIiE9PUwuY29kZSl0aHJvdyBMO0IubWtkaXJzU3luYyhOKX1nLndyaXRlRmlsZVN5'@;
put 'bmMoTywiIil9fX0sMTcyMDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtjcmVhdGVGaWxlOkksY3JlYXRlRmlsZVN5bmM6eX09Xyg2NTMwKSx7Y3JlYXRlTGluazpnLGNyZWF0ZUxpbmtTeW5jOkJ9PV8oNDE0Nykse2NyZWF0ZVN5bWxpbms6dyxjcmVhdGVTeW1saW5rU3luYzpQfT1f'@;
put 'KDM2MzUpO3VlLmV4cG9ydHM9e2NyZWF0ZUZpbGU6SSxjcmVhdGVGaWxlU3luYzp5LGVuc3VyZUZpbGU6SSxlbnN1cmVGaWxlU3luYzp5LGNyZWF0ZUxpbms6ZyxjcmVhdGVMaW5rU3luYzpCLGVuc3VyZUxpbms6ZyxlbnN1cmVMaW5rU3luYzpCLGNyZWF0ZVN5bWxpbms6dyxjcmVhdGVTeW1s'@;
put 'aW5rU3luYzpQLGVuc3VyZVN5bWxpbms6dyxlbnN1cmVTeW1saW5rU3luYzpQfX0sNDE0NzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPV8oODk4MSkuZnJvbVByb21pc2UseT1fKDI1MjApLGc9Xyg3NzQ5KSxCPV8oMTM4MSkse3BhdGhFeGlzdHM6d309Xyg5MjU3KSx7YXJlSWRl'@;
put 'bnRpY2FsOlB9PV8oMjczMyk7ZnVuY3Rpb24gTygpe3JldHVybihPPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihOLEwpe2xldCBLLFU7dHJ5e0s9eWllbGQgZy5sc3RhdChMKX1jYXRjaHt9dHJ5e1U9eWllbGQgZy5sc3RhdChOKX1jYXRjaChYKXt0aHJvdyBYLm1lc3NhZ2U9WC5tZXNz'@;
put 'YWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLFh9aWYoSyYmUChVLEspKXJldHVybjtjb25zdCBXPXkuZGlybmFtZShMKTsoeWllbGQgdyhXKSl8fCh5aWVsZCBCLm1rZGlycyhXKSkseWllbGQgZy5saW5rKE4sTCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9'@;
put 'e2NyZWF0ZUxpbms6SShmdW5jdGlvbiBGKE4sTCl7cmV0dXJuIE8uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY3JlYXRlTGlua1N5bmM6ZnVuY3Rpb24geihOLEwpe2xldCBLO3RyeXtLPWcubHN0YXRTeW5jKEwpfWNhdGNoe310cnl7Y29uc3QgWT1nLmxzdGF0U3luYyhOKTtpZihLJiZQKFks'@;
put 'SykpcmV0dXJufWNhdGNoKFkpe3Rocm93IFkubWVzc2FnZT1ZLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksWX1jb25zdCBVPXkuZGlybmFtZShMKTtyZXR1cm4gZy5leGlzdHNTeW5jKFUpfHxCLm1rZGlyc1N5bmMoVSksZy5saW5rU3luYyhOLEwpfX19LDYwNzI6KHVl'@;
put 'LHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDI1MjApLHk9Xyg3NzQ5KSx7cGF0aEV4aXN0czpnfT1fKDkyNTcpLEI9Xyg4OTgxKS5mcm9tUHJvbWlzZTtmdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKE8seil7aWYoSS5pc0Fic29sdXRlKE8p'@;
put 'KXt0cnl7eWllbGQgeS5sc3RhdChPKX1jYXRjaChVKXt0aHJvdyBVLm1lc3NhZ2U9VS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLFV9cmV0dXJue3RvQ3dkOk8sdG9Ec3Q6T319Y29uc3QgTj1JLmRpcm5hbWUoeiksTD1JLmpvaW4oTixPKTtpZih5aWVsZCBnKEwp'@;
put 'KXJldHVybnt0b0N3ZDpMLHRvRHN0Ok99O3RyeXt5aWVsZCB5LmxzdGF0KE8pfWNhdGNoKFUpe3Rocm93IFUubWVzc2FnZT1VLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVTeW1saW5rIiksVX1yZXR1cm57dG9Dd2Q6Tyx0b0RzdDpJLnJlbGF0aXZlKE4sTyl9fSkpLmFwcGx5KHRo'@;
put 'aXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtzeW1saW5rUGF0aHM6QihmdW5jdGlvbiB3KE8seil7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksc3ltbGlua1BhdGhzU3luYzpmdW5jdGlvbiBGKE8seil7aWYoSS5pc0Fic29sdXRlKE8pKXtpZigheS5leGlzdHNTeW5jKE8pKXRo'@;
put 'cm93IG5ldyBFcnJvcigiYWJzb2x1dGUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDpPLHRvRHN0Ok99fWNvbnN0IE49SS5kaXJuYW1lKHopLEw9SS5qb2luKE4sTyk7aWYoeS5leGlzdHNTeW5jKEwpKXJldHVybnt0b0N3ZDpMLHRvRHN0Ok99O2lmKCF5LmV4aXN0c1N5'@;
put 'bmMoTykpdGhyb3cgbmV3IEVycm9yKCJyZWxhdGl2ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJue3RvQ3dkOk8sdG9Ec3Q6SS5yZWxhdGl2ZShOLE8pfX19fSw5MjU5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Xyg3NzQ5KSx5PV8oODk4MSkuZnJvbVByb21pc2U7'@;
put 'ZnVuY3Rpb24gQigpe3JldHVybihCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihQLEYpe2lmKEYpcmV0dXJuIEY7bGV0IE87dHJ5e089eWllbGQgSS5sc3RhdChQKX1jYXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJuIE8mJk8uaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9KSkuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e3N5bWxpbmtUeXBlOnkoZnVuY3Rpb24gZyhQLEYpe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHN5bWxpbmtUeXBlU3luYzpmdW5jdGlvbiB3KFAsRil7aWYoRilyZXR1cm4gRjtsZXQgTzt0cnl7Tz1JLmxzdGF0U3luYyhQKX1j'@;
put 'YXRjaHtyZXR1cm4iZmlsZSJ9cmV0dXJuIE8mJk8uaXNEaXJlY3RvcnkoKT8iZGlyIjoiZmlsZSJ9fX0sMzYzNToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPV8oODk4MSkuZnJvbVByb21pc2UseT1fKDI1MjApLGc9Xyg3NzQ5KSx7bWtkaXJzOkIsbWtkaXJzU3luYzp3fT1fKDEz'@;
put 'ODEpLHtzeW1saW5rUGF0aHM6UCxzeW1saW5rUGF0aHNTeW5jOkZ9PV8oNjA3Mikse3N5bWxpbmtUeXBlOk8sc3ltbGlua1R5cGVTeW5jOnp9PV8oOTI1OSkse3BhdGhFeGlzdHM6Tn09Xyg5MjU3KSx7YXJlSWRlbnRpY2FsOkx9PV8oMjczMyk7ZnVuY3Rpb24gVSgpe3JldHVybihVPV9hc3lu'@;
put 'Y1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLFgsZWUpe2xldCBKO3RyeXtKPXlpZWxkIGcubHN0YXQoWCl9Y2F0Y2h7fWlmKEomJkouaXNTeW1ib2xpY0xpbmsoKSl7Y29uc3RbbWUsX2VdPXlpZWxkIFByb21pc2UuYWxsKFtnLnN0YXQoWSksZy5zdGF0KFgpXSk7aWYoTChtZSxfZSkpcmV0dXJu'@;
put 'fWNvbnN0IHJlPXlpZWxkIFAoWSxYKTtZPXJlLnRvRHN0O2NvbnN0IGllPXlpZWxkIE8ocmUudG9Dd2QsZWUpLGxlPXkuZGlybmFtZShYKTtyZXR1cm4oeWllbGQgTihsZSkpfHwoeWllbGQgQihsZSkpLGcuc3ltbGluayhZLFgsaWUpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBv'@;
put 'cnRzPXtjcmVhdGVTeW1saW5rOkkoZnVuY3Rpb24gSyhZLFgsZWUpe3JldHVybiBVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZVN5bWxpbmtTeW5jOmZ1bmN0aW9uIFcoWSxYLGVlKXtsZXQgSjt0cnl7Sj1nLmxzdGF0U3luYyhYKX1jYXRjaHt9aWYoSiYmSi5pc1N5bWJvbGljTGlu'@;
put 'aygpKXtjb25zdCBtZT1nLnN0YXRTeW5jKFkpLF9lPWcuc3RhdFN5bmMoWCk7aWYoTChtZSxfZSkpcmV0dXJufWNvbnN0IHJlPUYoWSxYKTtZPXJlLnRvRHN0LGVlPXoocmUudG9Dd2QsZWUpO2NvbnN0IGllPXkuZGlybmFtZShYKTtyZXR1cm4gZy5leGlzdHNTeW5jKGllKXx8dyhpZSksZy5z'@;
put 'eW1saW5rU3luYyhZLFgsZWUpfX19LDc3NDk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KTtjb25zdCB5PV8oODk4MSkuZnJvbUNhbGxiYWNrLGc9Xyg3NyksQj1bImFjY2VzcyIsImFwcGVuZEZpbGUiLCJjaG1vZCIsImNob3duIiwiY2xvc2UiLCJjb3B5RmlsZSIsImNw'@;
put 'IiwiZmNobW9kIiwiZmNob3duIiwiZmRhdGFzeW5jIiwiZnN0YXQiLCJmc3luYyIsImZ0cnVuY2F0ZSIsImZ1dGltZXMiLCJnbG9iIiwibGNobW9kIiwibGNob3duIiwibHV0aW1lcyIsImxpbmsiLCJsc3RhdCIsIm1rZGlyIiwibWtkdGVtcCIsIm9wZW4iLCJvcGVuZGlyIiwicmVhZGRpciIs'@;
put 'InJlYWRGaWxlIiwicmVhZGxpbmsiLCJyZWFscGF0aCIsInJlbmFtZSIsInJtIiwicm1kaXIiLCJzdGF0Iiwic3RhdGZzIiwic3ltbGluayIsInRydW5jYXRlIiwidW5saW5rIiwidXRpbWVzIiwid3JpdGVGaWxlIl0uZmlsdGVyKHc9PiJmdW5jdGlvbiI9PXR5cGVvZiBnW3ddKTtPYmplY3Qu'@;
put 'YXNzaWduKHEsZyksQi5mb3JFYWNoKHc9PntxW3ddPXkoZ1t3XSl9KSxxLmV4aXN0cz1mdW5jdGlvbih3LFApe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBQP2cuZXhpc3RzKHcsUCk6bmV3IFByb21pc2UoRj0+Zy5leGlzdHModyxGKSl9LHEucmVhZD1mdW5jdGlvbih3LFAsRixPLHosTil7'@;
put 'cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE4/Zy5yZWFkKHcsUCxGLE8seixOKTpuZXcgUHJvbWlzZSgoTCxLKT0+e2cucmVhZCh3LFAsRixPLHosKFUsVyxZKT0+e2lmKFUpcmV0dXJuIEsoVSk7TCh7Ynl0ZXNSZWFkOlcsYnVmZmVyOll9KX0pfSl9LHEud3JpdGU9ZnVuY3Rpb24odyxQLC4u'@;
put 'LkYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGW0YubGVuZ3RoLTFdP2cud3JpdGUodyxQLC4uLkYpOm5ldyBQcm9taXNlKChPLHopPT57Zy53cml0ZSh3LFAsLi4uRiwoTixMLEspPT57aWYoTilyZXR1cm4geihOKTtPKHtieXRlc1dyaXR0ZW46TCxidWZmZXI6S30pfSl9KX0scS5yZWFk'@;
put 'dj1mdW5jdGlvbih3LFAsLi4uRil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEZbRi5sZW5ndGgtMV0/Zy5yZWFkdih3LFAsLi4uRik6bmV3IFByb21pc2UoKE8seik9PntnLnJlYWR2KHcsUCwuLi5GLChOLEwsSyk9PntpZihOKXJldHVybiB6KE4pO08oe2J5dGVzUmVhZDpMLGJ1ZmZlcnM6'@;
put 'S30pfSl9KX0scS53cml0ZXY9ZnVuY3Rpb24odyxQLC4uLkYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGW0YubGVuZ3RoLTFdP2cud3JpdGV2KHcsUCwuLi5GKTpuZXcgUHJvbWlzZSgoTyx6KT0+e2cud3JpdGV2KHcsUCwuLi5GLChOLEwsSyk9PntpZihOKXJldHVybiB6KE4pO08oe2J5'@;
put 'dGVzV3JpdHRlbjpMLGJ1ZmZlcnM6S30pfSl9KX0sImZ1bmN0aW9uIj09dHlwZW9mIGcucmVhbHBhdGgubmF0aXZlP3EucmVhbHBhdGgubmF0aXZlPXkoZy5yZWFscGF0aC5uYXRpdmUpOkkuZW1pdFdhcm5pbmcoImZzLnJlYWxwYXRoLm5hdGl2ZSBpcyBub3QgYSBmdW5jdGlvbi4gSXMgZnMg'@;
put 'YmVpbmcgbW9ua2V5LXBhdGNoZWQ/IiwiV2FybmluZyIsImZzLWV4dHJhLVdBUk4wMDAzIil9LDU2NzQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17Li4uXyg3NzQ5KSwuLi5fKDY0NjQpLC4uLl8oNTU5MCksLi4uXygxNzIwKSwuLi5fKDY1NzMpLC4uLl8oMTM4MSksLi4u'@;
put 'Xyg1MzApLC4uLl8oNDY3MCksLi4uXyg5MjU3KSwuLi5fKDQ1NDIpfX0sNjU3MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPV8oODk4MSkuZnJvbVByb21pc2UseT1fKDcxODMpO3kub3V0cHV0SnNvbj1JKF8oMzUwOCkpLHkub3V0cHV0SnNvblN5bmM9Xyg5NTc4KSx5Lm91dHB1'@;
put 'dEpTT049eS5vdXRwdXRKc29uLHkub3V0cHV0SlNPTlN5bmM9eS5vdXRwdXRKc29uU3luYyx5LndyaXRlSlNPTj15LndyaXRlSnNvbix5LndyaXRlSlNPTlN5bmM9eS53cml0ZUpzb25TeW5jLHkucmVhZEpTT049eS5yZWFkSnNvbix5LnJlYWRKU09OU3luYz15LnJlYWRKc29uU3luYyx1ZS5l'@;
put 'eHBvcnRzPXl9LDcxODM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDY4MTMpO3VlLmV4cG9ydHM9e3JlYWRKc29uOkkucmVhZEZpbGUscmVhZEpzb25TeW5jOkkucmVhZEZpbGVTeW5jLHdyaXRlSnNvbjpJLndyaXRlRmlsZSx3cml0ZUpzb25TeW5jOkkud3JpdGVGaWxlU3lu'@;
put 'Y319LDk1Nzg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5Okl9PV8oNjc4MCkse291dHB1dEZpbGVTeW5jOnl9PV8oNDY3MCk7dWUuZXhwb3J0cz1mdW5jdGlvbiBnKEIsdyxQKXtjb25zdCBGPUkodyxQKTt5KEIsRixQKX19LDM1MDg6KHVlLHEsXyk9PnsidXNlIHN0'@;
put 'cmljdCI7Y29uc3R7c3RyaW5naWZ5Okl9PV8oNjc4MCkse291dHB1dEZpbGU6eX09Xyg0NjcwKTtmdW5jdGlvbiBCKCl7cmV0dXJuKEI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKHcsUCxGPXt9KXtjb25zdCBPPUkoUCxGKTt5aWVsZCB5KHcsTyxGKX0pKS5hcHBseSh0aGlzLGFyZ3Vt'@;
put 'ZW50cyl9dWUuZXhwb3J0cz1mdW5jdGlvbiBnKHcsUCl7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sMTM4MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPV8oODk4MSkuZnJvbVByb21pc2Use21ha2VEaXI6eSxtYWtlRGlyU3luYzpnfT1fKDgyMzMpLEI9SSh5KTt1'@;
put 'ZS5leHBvcnRzPXtta2RpcnM6Qixta2RpcnNTeW5jOmcsbWtkaXJwOkIsbWtkaXJwU3luYzpnLGVuc3VyZURpcjpCLGVuc3VyZURpclN5bmM6Z319LDgyMzM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDc3NDkpLHtjaGVja1BhdGg6eX09XygzNDY4KSxnPUI9PiJudW1iZXIi'@;
put 'PT10eXBlb2YgQj9COnttb2RlOjUxMSwuLi5CfS5tb2RlO3VlLmV4cG9ydHMubWFrZURpcj1mdW5jdGlvbigpe3ZhciBCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKih3LFApe3JldHVybiB5KHcpLEkubWtkaXIodyx7bW9kZTpnKFApLHJlY3Vyc2l2ZTohMH0pfSk7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKHcsUCl7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx1ZS5leHBvcnRzLm1ha2VEaXJTeW5jPShCLHcpPT4oeShCKSxJLm1rZGlyU3luYyhCLHttb2RlOmcodykscmVjdXJzaXZlOiEwfSkpfSwzNDY4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSk7'@;
put 'Y29uc3QgeT1fKDI1MjApO3VlLmV4cG9ydHMuY2hlY2tQYXRoPWZ1bmN0aW9uKEIpe2lmKCJ3aW4zMiI9PT1JLnBsYXRmb3JtJiYvWzw+OiJ8PypdLy50ZXN0KEIucmVwbGFjZSh5LnBhcnNlKEIpLnJvb3QsIiIpKSl7Y29uc3QgUD1uZXcgRXJyb3IoYFBhdGggY29udGFpbnMgaW52YWxpZCBj'@;
put 'aGFyYWN0ZXJzOiAke0J9YCk7dGhyb3cgUC5jb2RlPSJFSU5WQUwiLFB9fX0sNTMwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Xyg4OTgxKS5mcm9tUHJvbWlzZTt1ZS5leHBvcnRzPXttb3ZlOkkoXyg0MzYpKSxtb3ZlU3luYzpfKDM3MzYpfX0sMzczNjoodWUscSxfKT0+eyJ1'@;
put 'c2Ugc3RyaWN0Ijtjb25zdCBJPV8oNzcpLHk9XygyNTIwKSxnPV8oNjQ2NCkuY29weVN5bmMsQj1fKDQ1NDIpLnJlbW92ZVN5bmMsdz1fKDEzODEpLm1rZGlycFN5bmMsUD1fKDI3MzMpO2Z1bmN0aW9uIE4oSyxVLFcpe3RyeXtJLnJlbmFtZVN5bmMoSyxVKX1jYXRjaChZKXtpZigiRVhERVYi'@;
put 'IT09WS5jb2RlKXRocm93IFk7cmV0dXJuIGZ1bmN0aW9uIEwoSyxVLFcpe3JldHVybiBnKEssVSx7b3ZlcndyaXRlOlcsZXJyb3JPbkV4aXN0OiEwLHByZXNlcnZlVGltZXN0YW1wczohMH0pLEIoSyl9KEssVSxXKX19dWUuZXhwb3J0cz1mdW5jdGlvbiBGKEssVSxXKXtjb25zdCBZPShXPVd8'@;
put 'fHt9KS5vdmVyd3JpdGV8fFcuY2xvYmJlcnx8ITEse3NyY1N0YXQ6WCxpc0NoYW5naW5nQ2FzZTplZT0hMX09UC5jaGVja1BhdGhzU3luYyhLLFUsIm1vdmUiLFcpO3JldHVybiBQLmNoZWNrUGFyZW50UGF0aHNTeW5jKEssWCxVLCJtb3ZlIiksZnVuY3Rpb24gTyhLKXtjb25zdCBVPXkuZGly'@;
put 'bmFtZShLKTtyZXR1cm4geS5wYXJzZShVKS5yb290PT09VX0oVSl8fHcoeS5kaXJuYW1lKFUpKSxmdW5jdGlvbiB6KEssVSxXLFkpe2lmKFkpcmV0dXJuIE4oSyxVLFcpO2lmKFcpcmV0dXJuIEIoVSksTihLLFUsVyk7aWYoSS5leGlzdHNTeW5jKFUpKXRocm93IG5ldyBFcnJvcigiZGVzdCBh'@;
put 'bHJlYWR5IGV4aXN0cy4iKTtyZXR1cm4gTihLLFUsVyl9KEssVSxZLGVlKX19LDQzNjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPV8oNzc0OSkseT1fKDI1MjApLHtjb3B5Omd9PV8oNjQ2NCkse3JlbW92ZTpCfT1fKDQ1NDIpLHtta2RpcnA6d309XygxMzgxKSx7cGF0aEV4aXN0'@;
put 'czpQfT1fKDkyNTcpLEY9XygyNzMzKTtmdW5jdGlvbiB6KCl7cmV0dXJuIHo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWSxYPXt9KXtjb25zdCBlZT1YLm92ZXJ3cml0ZXx8WC5jbG9iYmVyfHwhMSx7c3JjU3RhdDpKLGlzQ2hhbmdpbmdDYXNlOnJlPSExfT15aWVsZCBGLmNoZWNr'@;
put 'UGF0aHMoVyxZLCJtb3ZlIixYKTt5aWVsZCBGLmNoZWNrUGFyZW50UGF0aHMoVyxKLFksIm1vdmUiKTtjb25zdCBpZT15LmRpcm5hbWUoWSk7cmV0dXJuIHkucGFyc2UoaWUpLnJvb3QhPT1pZSYmKHlpZWxkIHcoaWUpKSxmdW5jdGlvbiBOKFcsWSxYLGVlKXtyZXR1cm4gTC5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cyl9KFcsWSxlZSxyZSl9KSx6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBMKCl7cmV0dXJuIEw9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWSxYLGVlKXtpZighZWUpaWYoWCl5aWVsZCBCKFkpO2Vsc2UgaWYoeWllbGQgUChZKSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7dHJ5e3lpZWxkIEkucmVuYW1lKFcsWSl9Y2F0Y2goSil7aWYoIkVYREVWIiE9PUouY29kZSl0aHJvdyBKO3lpZWxkIGZ1bmN0aW9uIEsoVyxZLFgpe3JldHVybiBVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0oVyxZLFgpfX0pLEwuYXBwbHkodGhp'@;
put 'cyxhcmd1bWVudHMpfWZ1bmN0aW9uIFUoKXtyZXR1cm4oVT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVyxZLFgpe3JldHVybiB5aWVsZCBnKFcsWSx7b3ZlcndyaXRlOlgsZXJyb3JPbkV4aXN0OiEwLHByZXNlcnZlVGltZXN0YW1wczohMH0pLEIoVyl9KSkuYXBwbHkodGhpcyxhcmd1'@;
put 'bWVudHMpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gTyhXLFkpe3JldHVybiB6LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDQ2NzA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDg5ODEpLmZyb21Qcm9taXNlLHk9Xyg3NzQ5KSxnPV8oMjUyMCksQj1fKDEzODEpLHc9Xyg5MjU3KS5w'@;
put 'YXRoRXhpc3RzO2Z1bmN0aW9uIEYoKXtyZXR1cm4oRj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooeixOLEw9InV0Zi04Iil7Y29uc3QgSz1nLmRpcm5hbWUoeik7cmV0dXJuKHlpZWxkIHcoSykpfHwoeWllbGQgQi5ta2RpcnMoSykpLHkud3JpdGVGaWxlKHosTixMKX0pKS5hcHBseSh0'@;
put 'aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17b3V0cHV0RmlsZTpJKGZ1bmN0aW9uIFAoeixOKXtyZXR1cm4gRi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxvdXRwdXRGaWxlU3luYzpmdW5jdGlvbiBPKHosLi4uTil7Y29uc3QgTD1nLmRpcm5hbWUoeik7eS5leGlzdHNTeW5jKEwpfHxCLm1r'@;
put 'ZGlyc1N5bmMoTCkseS53cml0ZUZpbGVTeW5jKHosLi4uTil9fX0sOTI1NzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPV8oODk4MSkuZnJvbVByb21pc2UseT1fKDc3NDkpO3VlLmV4cG9ydHM9e3BhdGhFeGlzdHM6SShmdW5jdGlvbiBnKEIpe3JldHVybiB5LmFjY2VzcyhCKS50'@;
put 'aGVuKCgpPT4hMCkuY2F0Y2goKCk9PiExKX0pLHBhdGhFeGlzdHNTeW5jOnkuZXhpc3RzU3luY319LDQ1NDI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDc3KSx5PV8oODk4MSkuZnJvbUNhbGxiYWNrO3VlLmV4cG9ydHM9e3JlbW92ZTp5KGZ1bmN0aW9uIGcodyxQKXtJLnJt'@;
put 'KHcse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0sUCl9KSxyZW1vdmVTeW5jOmZ1bmN0aW9uIEIodyl7SS5ybVN5bmModyx7cmVjdXJzaXZlOiEwLGZvcmNlOiEwfSl9fX0sMjczMzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPV8oNzc0OSkseT1fKDI1MjApLGc9Xyg4OTgxKS5mcm9t'@;
put 'UHJvbWlzZTtmdW5jdGlvbiBGKCl7cmV0dXJuKEY9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFksWCxlZSxKKXtjb25zdHtzcmNTdGF0OnJlLGRlc3RTdGF0OmllfT15aWVsZCBmdW5jdGlvbiBCKFksWCxlZSl7Y29uc3QgSj1lZS5kZXJlZmVyZW5jZT9yZT0+SS5zdGF0KHJlLHtiaWdp'@;
put 'bnQ6ITB9KTpyZT0+SS5sc3RhdChyZSx7YmlnaW50OiEwfSk7cmV0dXJuIFByb21pc2UuYWxsKFtKKFkpLEooWCkuY2F0Y2gocmU9PntpZigiRU5PRU5UIj09PXJlLmNvZGUpcmV0dXJuIG51bGw7dGhyb3cgcmV9KV0pLnRoZW4oKFtyZSxpZV0pPT4oe3NyY1N0YXQ6cmUsZGVzdFN0YXQ6aWV9'@;
put 'KSl9KFksWCxKKTtpZihpZSl7aWYoSyhyZSxpZSkpe2NvbnN0IGxlPXkuYmFzZW5hbWUoWSksbWU9eS5iYXNlbmFtZShYKTtpZigibW92ZSI9PT1lZSYmbGUhPT1tZSYmbGUudG9Mb3dlckNhc2UoKT09PW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0YXQ6cmUsZGVzdFN0YXQ6aWUsaXND'@;
put 'aGFuZ2luZ0Nhc2U6ITB9O3Rocm93IG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKX1pZihyZS5pc0RpcmVjdG9yeSgpJiYhaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9y'@;
put 'eSAnJHtYfScgd2l0aCBkaXJlY3RvcnkgJyR7WX0nLmApO2lmKCFyZS5pc0RpcmVjdG9yeSgpJiZpZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7WH0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtZfScuYCl9aWYocmUuaXNEaXJl'@;
put 'Y3RvcnkoKSYmVShZLFgpKXRocm93IG5ldyBFcnJvcihXKFksWCxlZSkpO3JldHVybntzcmNTdGF0OnJlLGRlc3RTdGF0OmllfX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24geihZLFgsZWUsSil7cmV0dXJuIE4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIE4oKXty'@;
put 'ZXR1cm4oTj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooWSxYLGVlLEope2NvbnN0IHJlPXkucmVzb2x2ZSh5LmRpcm5hbWUoWSkpLGllPXkucmVzb2x2ZSh5LmRpcm5hbWUoZWUpKTtpZihpZT09PXJlfHxpZT09PXkucGFyc2UoaWUpLnJvb3QpcmV0dXJuO2xldCBsZTt0cnl7bGU9eWll'@;
put 'bGQgSS5zdGF0KGllLHtiaWdpbnQ6ITB9KX1jYXRjaChtZSl7aWYoIkVOT0VOVCI9PT1tZS5jb2RlKXJldHVybjt0aHJvdyBtZX1pZihLKFgsbGUpKXRocm93IG5ldyBFcnJvcihXKFksZWUsSikpO3JldHVybiB6KFksWCxpZSxKKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24g'@;
put 'SyhZLFgpe3JldHVybiBYLmlubyYmWC5kZXYmJlguaW5vPT09WS5pbm8mJlguZGV2PT09WS5kZXZ9ZnVuY3Rpb24gVShZLFgpe2NvbnN0IGVlPXkucmVzb2x2ZShZKS5zcGxpdCh5LnNlcCkuZmlsdGVyKHJlPT5yZSksSj15LnJlc29sdmUoWCkuc3BsaXQoeS5zZXApLmZpbHRlcihyZT0+cmUp'@;
put 'O3JldHVybiBlZS5ldmVyeSgocmUsaWUpPT5KW2llXT09PXJlKX1mdW5jdGlvbiBXKFksWCxlZSl7cmV0dXJuYENhbm5vdCAke2VlfSAnJHtZfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtYfScuYH11ZS5leHBvcnRzPXtjaGVja1BhdGhzOmcoZnVuY3Rpb24gUChZLFgsZWUs'@;
put 'Sil7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY2hlY2tQYXRoc1N5bmM6ZnVuY3Rpb24gTyhZLFgsZWUsSil7Y29uc3R7c3JjU3RhdDpyZSxkZXN0U3RhdDppZX09ZnVuY3Rpb24gdyhZLFgsZWUpe2xldCBKO2NvbnN0IHJlPWVlLmRlcmVmZXJlbmNlP2xlPT5JLnN0YXRTeW5j'@;
put 'KGxlLHtiaWdpbnQ6ITB9KTpsZT0+SS5sc3RhdFN5bmMobGUse2JpZ2ludDohMH0pLGllPXJlKFkpO3RyeXtKPXJlKFgpfWNhdGNoKGxlKXtpZigiRU5PRU5UIj09PWxlLmNvZGUpcmV0dXJue3NyY1N0YXQ6aWUsZGVzdFN0YXQ6bnVsbH07dGhyb3cgbGV9cmV0dXJue3NyY1N0YXQ6aWUsZGVz'@;
put 'dFN0YXQ6Sn19KFksWCxKKTtpZihpZSl7aWYoSyhyZSxpZSkpe2NvbnN0IGxlPXkuYmFzZW5hbWUoWSksbWU9eS5iYXNlbmFtZShYKTtpZigibW92ZSI9PT1lZSYmbGUhPT1tZSYmbGUudG9Mb3dlckNhc2UoKT09PW1lLnRvTG93ZXJDYXNlKCkpcmV0dXJue3NyY1N0YXQ6cmUsZGVzdFN0YXQ6'@;
put 'aWUsaXNDaGFuZ2luZ0Nhc2U6ITB9O3Rocm93IG5ldyBFcnJvcigiU291cmNlIGFuZCBkZXN0aW5hdGlvbiBtdXN0IG5vdCBiZSB0aGUgc2FtZS4iKX1pZihyZS5pc0RpcmVjdG9yeSgpJiYhaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRp'@;
put 'cmVjdG9yeSAnJHtYfScgd2l0aCBkaXJlY3RvcnkgJyR7WX0nLmApO2lmKCFyZS5pc0RpcmVjdG9yeSgpJiZpZS5pc0RpcmVjdG9yeSgpKXRocm93IG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSBkaXJlY3RvcnkgJyR7WH0nIHdpdGggbm9uLWRpcmVjdG9yeSAnJHtZfScuYCl9aWYocmUu'@;
put 'aXNEaXJlY3RvcnkoKSYmVShZLFgpKXRocm93IG5ldyBFcnJvcihXKFksWCxlZSkpO3JldHVybntzcmNTdGF0OnJlLGRlc3RTdGF0OmllfX0sY2hlY2tQYXJlbnRQYXRoczpnKHopLGNoZWNrUGFyZW50UGF0aHNTeW5jOmZ1bmN0aW9uIEwoWSxYLGVlLEope2NvbnN0IHJlPXkucmVzb2x2ZSh5'@;
put 'LmRpcm5hbWUoWSkpLGllPXkucmVzb2x2ZSh5LmRpcm5hbWUoZWUpKTtpZihpZT09PXJlfHxpZT09PXkucGFyc2UoaWUpLnJvb3QpcmV0dXJuO2xldCBsZTt0cnl7bGU9SS5zdGF0U3luYyhpZSx7YmlnaW50OiEwfSl9Y2F0Y2gobWUpe2lmKCJFTk9FTlQiPT09bWUuY29kZSlyZXR1cm47dGhy'@;
put 'b3cgbWV9aWYoSyhYLGxlKSl0aHJvdyBuZXcgRXJyb3IoVyhZLGVlLEopKTtyZXR1cm4gTChZLFgsaWUsSil9LGlzU3JjU3ViZGlyOlUsYXJlSWRlbnRpY2FsOkt9fSwzMTg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDc3NDkpLHk9Xyg4OTgxKS5mcm9tUHJvbWlzZTtmdW5j'@;
put 'dGlvbiBCKCl7cmV0dXJuKEI9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFAsRixPKXtjb25zdCB6PXlpZWxkIEkub3BlbihQLCJyKyIpO2xldCBOPW51bGw7dHJ5e3lpZWxkIEkuZnV0aW1lcyh6LEYsTyl9ZmluYWxseXt0cnl7eWllbGQgSS5jbG9zZSh6KX1jYXRjaChMKXtOPUx9fWlm'@;
put 'KE4pdGhyb3cgTn0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17dXRpbWVzTWlsbGlzOnkoZnVuY3Rpb24gZyhQLEYsTyl7cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksdXRpbWVzTWlsbGlzU3luYzpmdW5jdGlvbiB3KFAsRixPKXtjb25zdCB6PUkub3BlblN5'@;
put 'bmMoUCwicisiKTtyZXR1cm4gSS5mdXRpbWVzU3luYyh6LEYsTyksSS5jbG9zZVN5bmMoeil9fX0sNzY0ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEk9TWF0aC5tYXgsZz1mdW5jdGlvbihGLE8pe2Zvcih2YXIgej1bXSxOPTA7TjxGLmxlbmd0'@;
put 'aDtOKz0xKXpbTl09RltOXTtmb3IodmFyIEw9MDtMPE8ubGVuZ3RoO0wrPTEpeltMK0YubGVuZ3RoXT1PW0xdO3JldHVybiB6fTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe3ZhciBPPXRoaXM7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE98fCJbb2JqZWN0IEZ1bmN0aW9uXSIhPT1fLmFwcGx5KE8p'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIitPKTtmb3IodmFyIE4sej1mdW5jdGlvbihGLE8pe2Zvcih2YXIgej1bXSxOPTEsTD0wO048Ri5sZW5ndGg7Tis9MSxMKz0xKXpbTF09RltOXTtyZXR1cm4gen0oYXJn'@;
put 'dW1lbnRzKSxLPUkoMCxPLmxlbmd0aC16Lmxlbmd0aCksVT1bXSxXPTA7VzxLO1crKylVW1ddPSIkIitXO2lmKE49RnVuY3Rpb24oImJpbmRlciIsInJldHVybiBmdW5jdGlvbiAoIitmdW5jdGlvbihQLEYpe2Zvcih2YXIgTz0iIix6PTA7ejxQLmxlbmd0aDt6Kz0xKU8rPVBbel0seisxPFAu'@;
put 'bGVuZ3RoJiYoTys9IiwiKTtyZXR1cm4gT30oVSkrIil7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9IikoZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgTil7dmFyIFg9Ty5hcHBseSh0aGlzLGcoeixhcmd1bWVudHMpKTtyZXR1cm4gT2JqZWN0KFgpPT09WD9Y'@;
put 'OnRoaXN9cmV0dXJuIE8uYXBwbHkoRixnKHosYXJndW1lbnRzKSl9KSxPLnByb3RvdHlwZSl7dmFyIFk9ZnVuY3Rpb24oKXt9O1kucHJvdG90eXBlPU8ucHJvdG90eXBlLE4ucHJvdG90eXBlPW5ldyBZLFkucHJvdG90eXBlPW51bGx9cmV0dXJuIE59fSw4NjEyOih1ZSxxLF8pPT57InVzZSBz'@;
put 'dHJpY3QiO3ZhciBJPV8oNzY0OCk7dWUuZXhwb3J0cz1GdW5jdGlvbi5wcm90b3R5cGUuYmluZHx8SX0sMjEwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJLHk9Xyg4ODkyKSxnPV8oMTY0OCksQj1fKDM5ODEpLHc9Xyg0NzI2KSxQPV8oNjcxMiksRj1fKDM0NjQpLE89Xyg0NDUzKSx6'@;
put 'PV8oMzkxNSksTj1fKDk3MzgpLEw9Xyg2MzI5KSxLPV8oMjI2NCksVT1fKDU3MzApLFc9Xyg3MDcpLFk9XygzODYyKSxYPV8oOTU1MCksZWU9RnVuY3Rpb24sSj1mdW5jdGlvbih2ZSl7dHJ5e3JldHVybiBlZSgnInVzZSBzdHJpY3QiOyByZXR1cm4gKCcrdmUrIikuY29uc3RydWN0b3I7Iiko'@;
put 'KX1jYXRjaHt9fSxyZT1fKDcyOTYpLGllPV8oNDQyOSksbGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgT30sbWU9cmU/ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGxlfWNhdGNoe3RyeXtyZXR1cm4gcmUoYXJndW1lbnRzLCJjYWxsZWUiKS5nZXR9Y2F0Y2h7cmV0dXJuIGxlfX19KCk6bGUsX2U9Xygx'@;
put 'NDA1KSgpLFRlPV8oMTYxOCksU2U9Xyg4ODk5KSx6ZT1fKDQ0MyksVj1fKDE3NjgpLHA9Xyg4OTI4KSxiPXt9LHg9dHlwZW9mIFVpbnQ4QXJyYXk+InUifHwhVGU/STpUZShVaW50OEFycmF5KSxDPXtfX3Byb3RvX186bnVsbCwiJUFnZ3JlZ2F0ZUVycm9yJSI6dHlwZW9mIEFnZ3JlZ2F0ZUVy'@;
put 'cm9yPiJ1Ij9JOkFnZ3JlZ2F0ZUVycm9yLCIlQXJyYXklIjpBcnJheSwiJUFycmF5QnVmZmVyJSI6dHlwZW9mIEFycmF5QnVmZmVyPiJ1Ij9JOkFycmF5QnVmZmVyLCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpOkksIiVBc3luY0Zy'@;
put 'b21TeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpJLCIlQXN5bmNGdW5jdGlvbiUiOmIsIiVBc3luY0dlbmVyYXRvciUiOmIsIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSI6YiwiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIjpiLCIlQXRvbWljcyUiOnR5cGVvZiBBdG9taWNzPiJ1Ij9JOkF0b21p'@;
put 'Y3MsIiVCaWdJbnQlIjp0eXBlb2YgQmlnSW50PiJ1Ij9JOkJpZ0ludCwiJUJpZ0ludDY0QXJyYXklIjp0eXBlb2YgQmlnSW50NjRBcnJheT4idSI/STpCaWdJbnQ2NEFycmF5LCIlQmlnVWludDY0QXJyYXklIjp0eXBlb2YgQmlnVWludDY0QXJyYXk+InUiP0k6QmlnVWludDY0QXJyYXksIiVC'@;
put 'b29sZWFuJSI6Qm9vbGVhbiwiJURhdGFWaWV3JSI6dHlwZW9mIERhdGFWaWV3PiJ1Ij9JOkRhdGFWaWV3LCIlRGF0ZSUiOkRhdGUsIiVkZWNvZGVVUkklIjpkZWNvZGVVUkksIiVkZWNvZGVVUklDb21wb25lbnQlIjpkZWNvZGVVUklDb21wb25lbnQsIiVlbmNvZGVVUkklIjplbmNvZGVVUkks'@;
put 'IiVlbmNvZGVVUklDb21wb25lbnQlIjplbmNvZGVVUklDb21wb25lbnQsIiVFcnJvciUiOmcsIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOkIsIiVGbG9hdDE2QXJyYXklIjp0eXBlb2YgRmxvYXQxNkFycmF5PiJ1Ij9JOkZsb2F0MTZBcnJheSwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBG'@;
put 'bG9hdDMyQXJyYXk+InUiP0k6RmxvYXQzMkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/STpGbG9hdDY0QXJyYXksIiVGaW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/STpGaW5hbGl6YXRpb25SZWdpc3Ry'@;
put 'eSwiJUZ1bmN0aW9uJSI6ZWUsIiVHZW5lcmF0b3JGdW5jdGlvbiUiOmIsIiVJbnQ4QXJyYXklIjp0eXBlb2YgSW50OEFycmF5PiJ1Ij9JOkludDhBcnJheSwiJUludDE2QXJyYXklIjp0eXBlb2YgSW50MTZBcnJheT4idSI/STpJbnQxNkFycmF5LCIlSW50MzJBcnJheSUiOnR5cGVvZiBJbnQz'@;
put 'MkFycmF5PiJ1Ij9JOkludDMyQXJyYXksIiVpc0Zpbml0ZSUiOmlzRmluaXRlLCIlaXNOYU4lIjppc05hTiwiJUl0ZXJhdG9yUHJvdG90eXBlJSI6X2UmJlRlP1RlKFRlKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpOkksIiVKU09OJSI6Im9iamVjdCI9PXR5cGVvZiBKU09OP0pTT046SSwiJU1h'@;
put 'cCUiOnR5cGVvZiBNYXA+InUiP0k6TWFwLCIlTWFwSXRlcmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgTWFwPiJ1Inx8IV9lfHwhVGU/STpUZSgobmV3IE1hcClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJU1hdGglIjpNYXRoLCIlTnVtYmVyJSI6TnVtYmVyLCIlT2JqZWN0JSI6eSwiJU9iamVjdC5n'@;
put 'ZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIjpyZSwiJXBhcnNlRmxvYXQlIjpwYXJzZUZsb2F0LCIlcGFyc2VJbnQlIjpwYXJzZUludCwiJVByb21pc2UlIjp0eXBlb2YgUHJvbWlzZT4idSI/STpQcm9taXNlLCIlUHJveHklIjp0eXBlb2YgUHJveHk+InUiP0k6UHJveHksIiVSYW5nZUVycm9y'@;
put 'JSI6dywiJVJlZmVyZW5jZUVycm9yJSI6UCwiJVJlZmxlY3QlIjp0eXBlb2YgUmVmbGVjdD4idSI/STpSZWZsZWN0LCIlUmVnRXhwJSI6UmVnRXhwLCIlU2V0JSI6dHlwZW9mIFNldD4idSI/STpTZXQsIiVTZXRJdGVyYXRvclByb3RvdHlwZSUiOnR5cGVvZiBTZXQ+InUifHwhX2V8fCFUZT9J'@;
put 'OlRlKChuZXcgU2V0KVtTeW1ib2wuaXRlcmF0b3JdKCkpLCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP0k6U2hhcmVkQXJyYXlCdWZmZXIsIiVTdHJpbmclIjpTdHJpbmcsIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZSgiIltT'@;
put 'eW1ib2wuaXRlcmF0b3JdKCkpOkksIiVTeW1ib2wlIjpfZT9TeW1ib2w6SSwiJVN5bnRheEVycm9yJSI6RiwiJVRocm93VHlwZUVycm9yJSI6bWUsIiVUeXBlZEFycmF5JSI6eCwiJVR5cGVFcnJvciUiOk8sIiVVaW50OEFycmF5JSI6dHlwZW9mIFVpbnQ4QXJyYXk+InUiP0k6VWludDhBcnJh'@;
put 'eSwiJVVpbnQ4Q2xhbXBlZEFycmF5JSI6dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5PiJ1Ij9JOlVpbnQ4Q2xhbXBlZEFycmF5LCIlVWludDE2QXJyYXklIjp0eXBlb2YgVWludDE2QXJyYXk+InUiP0k6VWludDE2QXJyYXksIiVVaW50MzJBcnJheSUiOnR5cGVvZiBVaW50MzJBcnJheT4idSI/'@;
put 'STpVaW50MzJBcnJheSwiJVVSSUVycm9yJSI6eiwiJVdlYWtNYXAlIjp0eXBlb2YgV2Vha01hcD4idSI/STpXZWFrTWFwLCIlV2Vha1JlZiUiOnR5cGVvZiBXZWFrUmVmPiJ1Ij9JOldlYWtSZWYsIiVXZWFrU2V0JSI6dHlwZW9mIFdlYWtTZXQ+InUiP0k6V2Vha1NldCwiJUZ1bmN0aW9uLnBy'@;
put 'b3RvdHlwZS5jYWxsJSI6cCwiJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUiOlYsIiVPYmplY3QuZGVmaW5lUHJvcGVydHklIjppZSwiJU9iamVjdC5nZXRQcm90b3R5cGVPZiUiOlNlLCIlTWF0aC5hYnMlIjpOLCIlTWF0aC5mbG9vciUiOkwsIiVNYXRoLm1heCUiOkssIiVNYXRoLm1pbiUi'@;
put 'OlUsIiVNYXRoLnBvdyUiOlcsIiVNYXRoLnJvdW5kJSI6WSwiJU1hdGguc2lnbiUiOlgsIiVSZWZsZWN0LmdldFByb3RvdHlwZU9mJSI6emV9O2lmKFRlKXRyeXtudWxsLmVycm9yfWNhdGNoKHZlKXt2YXIgVD1UZShUZSh2ZSkpO0NbIiVFcnJvci5wcm90b3R5cGUlIl09VH12YXIgSD1mdW5j'@;
put 'dGlvbiB2ZShYZSl7dmFyIGplO2lmKCIlQXN5bmNGdW5jdGlvbiUiPT09WGUpamU9SigiYXN5bmMgZnVuY3Rpb24gKCkge30iKTtlbHNlIGlmKCIlR2VuZXJhdG9yRnVuY3Rpb24lIj09PVhlKWplPUooImZ1bmN0aW9uKiAoKSB7fSIpO2Vsc2UgaWYoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9u'@;
put 'JSI9PT1YZSlqZT1KKCJhc3luYyBmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3IlIj09PVhlKXt2YXIgRGU9dmUoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSIpO0RlJiYoamU9RGUucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUi'@;
put 'PT09WGUpe3ZhciBGZT12ZSgiJUFzeW5jR2VuZXJhdG9yJSIpO0ZlJiZUZSYmKGplPVRlKEZlLnByb3RvdHlwZSkpfXJldHVybiBDW1hlXT1qZSxqZX0saj17X19wcm90b19fOm51bGwsIiVBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJUFycmF5'@;
put 'UHJvdG90eXBlJSI6WyJBcnJheSIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b19lbnRyaWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImVudHJpZXMiXSwiJUFycmF5UHJvdG9fZm9yRWFjaCUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJmb3JFYWNoIl0sIiVBcnJheVByb3RvX2tleXMlIjpb'@;
put 'IkFycmF5IiwicHJvdG90eXBlIiwia2V5cyJdLCIlQXJyYXlQcm90b192YWx1ZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwidmFsdWVzIl0sIiVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSI6WyJBc3luY0Z1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvciUiOlsiQXN5bmNH'@;
put 'ZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUJvb2xlYW5Qcm90b3R5cGUlIjpbIkJvb2xlYW4iLCJwcm90b3R5cGUiXSwiJURhdGFWaWV3'@;
put 'UHJvdG90eXBlJSI6WyJEYXRhVmlldyIsInByb3RvdHlwZSJdLCIlRGF0ZVByb3RvdHlwZSUiOlsiRGF0ZSIsInByb3RvdHlwZSJdLCIlRXJyb3JQcm90b3R5cGUlIjpbIkVycm9yIiwicHJvdG90eXBlIl0sIiVFdmFsRXJyb3JQcm90b3R5cGUlIjpbIkV2YWxFcnJvciIsInByb3RvdHlwZSJd'@;
put 'LCIlRmxvYXQzMkFycmF5UHJvdG90eXBlJSI6WyJGbG9hdDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJUZsb2F0NjRBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQ2NEFycmF5IiwicHJvdG90eXBlIl0sIiVGdW5jdGlvblByb3RvdHlwZSUiOlsiRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVy'@;
put 'YXRvciUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUdlbmVyYXRvclByb3RvdHlwZSUiOlsiR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiLCJwcm90b3R5cGUiXSwiJUludDhBcnJheVByb3RvdHlwZSUiOlsiSW50OEFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQx'@;
put 'NkFycmF5UHJvdG90eXBlJSI6WyJJbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVJbnQzMkFycmF5UHJvdG90eXBlJSI6WyJJbnQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVKU09OUGFyc2UlIjpbIkpTT04iLCJwYXJzZSJdLCIlSlNPTlN0cmluZ2lmeSUiOlsiSlNPTiIsInN0cmluZ2lmeSJd'@;
put 'LCIlTWFwUHJvdG90eXBlJSI6WyJNYXAiLCJwcm90b3R5cGUiXSwiJU51bWJlclByb3RvdHlwZSUiOlsiTnVtYmVyIiwicHJvdG90eXBlIl0sIiVPYmplY3RQcm90b3R5cGUlIjpbIk9iamVjdCIsInByb3RvdHlwZSJdLCIlT2JqUHJvdG9fdG9TdHJpbmclIjpbIk9iamVjdCIsInByb3RvdHlw'@;
put 'ZSIsInRvU3RyaW5nIl0sIiVPYmpQcm90b192YWx1ZU9mJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIl0sIiVQcm9taXNlUHJvdG90eXBlJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIl0sIiVQcm9taXNlUHJvdG9fdGhlbiUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSIsInRoZW4i'@;
put 'XSwiJVByb21pc2VfYWxsJSI6WyJQcm9taXNlIiwiYWxsIl0sIiVQcm9taXNlX3JlamVjdCUiOlsiUHJvbWlzZSIsInJlamVjdCJdLCIlUHJvbWlzZV9yZXNvbHZlJSI6WyJQcm9taXNlIiwicmVzb2x2ZSJdLCIlUmFuZ2VFcnJvclByb3RvdHlwZSUiOlsiUmFuZ2VFcnJvciIsInByb3RvdHlw'@;
put 'ZSJdLCIlUmVmZXJlbmNlRXJyb3JQcm90b3R5cGUlIjpbIlJlZmVyZW5jZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWdFeHBQcm90b3R5cGUlIjpbIlJlZ0V4cCIsInByb3RvdHlwZSJdLCIlU2V0UHJvdG90eXBlJSI6WyJTZXQiLCJwcm90b3R5cGUiXSwiJVNoYXJlZEFycmF5QnVmZmVyUHJv'@;
put 'dG90eXBlJSI6WyJTaGFyZWRBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlU3RyaW5nUHJvdG90eXBlJSI6WyJTdHJpbmciLCJwcm90b3R5cGUiXSwiJVN5bWJvbFByb3RvdHlwZSUiOlsiU3ltYm9sIiwicHJvdG90eXBlIl0sIiVTeW50YXhFcnJvclByb3RvdHlwZSUiOlsiU3ludGF4RXJy'@;
put 'b3IiLCJwcm90b3R5cGUiXSwiJVR5cGVkQXJyYXlQcm90b3R5cGUlIjpbIlR5cGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVR5cGVFcnJvclByb3RvdHlwZSUiOlsiVHlwZUVycm9yIiwicHJvdG90eXBlIl0sIiVVaW50OEFycmF5UHJvdG90eXBlJSI6WyJVaW50OEFycmF5IiwicHJvdG90eXBl'@;
put 'Il0sIiVVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSUiOlsiVWludDhDbGFtcGVkQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQxNkFycmF5UHJvdG90eXBlJSI6WyJVaW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDMyQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQzMkFycmF5IiwicHJv'@;
put 'dG90eXBlIl0sIiVVUklFcnJvclByb3RvdHlwZSUiOlsiVVJJRXJyb3IiLCJwcm90b3R5cGUiXSwiJVdlYWtNYXBQcm90b3R5cGUlIjpbIldlYWtNYXAiLCJwcm90b3R5cGUiXSwiJVdlYWtTZXRQcm90b3R5cGUlIjpbIldlYWtTZXQiLCJwcm90b3R5cGUiXX0sRT1fKDg2MTIpLG09Xyg4ODI0'@;
put 'KSxBPUUuY2FsbChwLEFycmF5LnByb3RvdHlwZS5jb25jYXQpLG9lPUUuY2FsbChWLEFycmF5LnByb3RvdHlwZS5zcGxpY2UpLHRlPUUuY2FsbChwLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksc2U9RS5jYWxsKHAsU3RyaW5nLnByb3RvdHlwZS5zbGljZSksd2U9RS5jYWxsKHAsUmVnRXhw'@;
put 'LnByb3RvdHlwZS5leGVjKSxVZT0vW14lLltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JSQpKS9nLEplPS9cXChcXCk/L2csTWU9ZnVuY3Rpb24oWGUsamUpe3ZhciBGZSxEZT1Y'@;
put 'ZTtpZihtKGosRGUpJiYoRGU9IiUiKyhGZT1qW0RlXSlbMF0rIiUiKSxtKEMsRGUpKXt2YXIgUmU9Q1tEZV07aWYoUmU9PT1iJiYoUmU9SChEZSkpLHR5cGVvZiBSZT4idSImJiFqZSl0aHJvdyBuZXcgTygiaW50cmluc2ljICIrWGUrIiBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQ'@;
put 'bGVhc2UgZmlsZSBhbiBpc3N1ZSEiKTtyZXR1cm57YWxpYXM6RmUsbmFtZTpEZSx2YWx1ZTpSZX19dGhyb3cgbmV3IEYoImludHJpbnNpYyAiK1hlKyIgZG9lcyBub3QgZXhpc3QhIil9O3VlLmV4cG9ydHM9ZnVuY3Rpb24oWGUsamUpe2lmKCJzdHJpbmciIT10eXBlb2YgWGV8fDA9PT1YZS5s'@;
put 'ZW5ndGgpdGhyb3cgbmV3IE8oImludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiYiYm9vbGVhbiIhPXR5cGVvZiBqZSl0aHJvdyBuZXcgTygnImFsbG93TWlzc2luZyIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtp'@;
put 'ZihudWxsPT09d2UoL14lP1teJV0qJT8kLyxYZSkpdGhyb3cgbmV3IEYoImAlYCBtYXkgbm90IGJlIHByZXNlbnQgYW55d2hlcmUgYnV0IGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiB0aGUgaW50cmluc2ljIG5hbWUiKTt2YXIgRGU9ZnVuY3Rpb24oWGUpe3ZhciBqZT1zZShYZSwwLDEp'@;
put 'LERlPXNlKFhlLC0xKTtpZigiJSI9PT1qZSYmIiUiIT09RGUpdGhyb3cgbmV3IEYoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAiKTtpZigiJSI9PT1EZSYmIiUiIT09amUpdGhyb3cgbmV3IEYoImludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0'@;
put 'ZWQgb3BlbmluZyBgJWAiKTt2YXIgRmU9W107cmV0dXJuIHRlKFhlLFVlLGZ1bmN0aW9uKFJlLEllLFZlLGtlKXtGZVtGZS5sZW5ndGhdPVZlP3RlKGtlLEplLCIkMSIpOkllfHxSZX0pLEZlfShYZSksRmU9RGUubGVuZ3RoPjA/RGVbMF06IiIsUmU9TWUoIiUiK0ZlKyIlIixqZSksSWU9UmUu'@;
put 'bmFtZSxWZT1SZS52YWx1ZSxrZT0hMSxBZT1SZS5hbGlhcztBZSYmKEZlPUFlWzBdLG9lKERlLEEoWzAsMV0sQWUpKSk7Zm9yKHZhciBfdD0xLG50PSEwO190PERlLmxlbmd0aDtfdCs9MSl7dmFyIFFlPURlW190XSx1bj1zZShRZSwwLDEpLHl0PXNlKFFlLC0xKTtpZigoJyInPT09dW58fCIn'@;
put 'Ij09PXVufHwiYCI9PT11bnx8JyInPT09eXR8fCInIj09PXl0fHwiYCI9PT15dCkmJnVuIT09eXQpdGhyb3cgbmV3IEYoInByb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMiKTtpZigoImNvbnN0cnVjdG9yIj09PVFlfHwhbnQpJiYoa2U9ITApLG0o'@;
put 'QyxJZT0iJSIrKEZlKz0iLiIrUWUpKyIlIikpVmU9Q1tJZV07ZWxzZSBpZihudWxsIT1WZSl7aWYoIShRZSBpbiBWZSkpe2lmKCFqZSl0aHJvdyBuZXcgTygiYmFzZSBpbnRyaW5zaWMgZm9yICIrWGUrIiBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4iKTtyZXR1'@;
put 'cm59aWYocmUmJl90KzE+PURlLmxlbmd0aCl7dmFyIE10PXJlKFZlLFFlKTtWZT0obnQ9ISFNdCkmJiJnZXQiaW4gTXQmJiEoIm9yaWdpbmFsVmFsdWUiaW4gTXQuZ2V0KT9NdC5nZXQ6VmVbUWVdfWVsc2UgbnQ9bShWZSxRZSksVmU9VmVbUWVdO250JiYha2UmJihDW0llXT1WZSl9fXJldHVy'@;
put 'biBWZX19LDg4OTk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg4ODkyKTt1ZS5leHBvcnRzPUkuZ2V0UHJvdG90eXBlT2Z8fG51bGx9LDQ0Mzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXR5cGVvZiBSZWZsZWN0PCJ1IiYmUmVmbGVjdC5nZXRQcm90b3R5cGVPZnx8bnVs'@;
put 'bH0sMTYxODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQ0MykseT1fKDg4OTkpLGc9Xyg2NTA0KTt1ZS5leHBvcnRzPUk/ZnVuY3Rpb24odyl7cmV0dXJuIEkodyl9Onk/ZnVuY3Rpb24odyl7aWYoIXd8fCJvYmplY3QiIT10eXBlb2YgdyYmImZ1bmN0aW9uIiE9dHlwZW9mIHcp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiZ2V0UHJvdG86IG5vdCBhbiBvYmplY3QiKTtyZXR1cm4geSh3KX06Zz9mdW5jdGlvbih3KXtyZXR1cm4gZyh3KX06bnVsbH0sNjkwOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcn0sNzI5Njoo'@;
put 'dWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDY5MCk7aWYoSSl0cnl7SShbXSwibGVuZ3RoIil9Y2F0Y2h7ST1udWxsfXVlLmV4cG9ydHM9SX0sNjQ1ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uIF8oSSl7aWYobnVsbD09PUl8fCJvYmplY3QiIT10eXBlb2Yg'@;
put 'SSlyZXR1cm4gSTtpZihJIGluc3RhbmNlb2YgT2JqZWN0KXZhciB5PXtfX3Byb3RvX186cShJKX07ZWxzZSB5PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEkpLmZvckVhY2goZnVuY3Rpb24oZyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHks'@;
put 'ZyxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEksZykpfSkseX07dmFyIHE9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihJKXtyZXR1cm4gSS5fX3Byb3RvX199fSw3NzoodWUscSxfKT0+e3ZhciBPLHosST1fKDQxNTUpLHk9Xyg1MTA4KSxnPV8oNTQ0MyksQj1fKDIx'@;
put 'NjEpLHc9Xyg4NTIwKSxQPV8oNjQ1OCksRj1fKDk1MzkpO2Z1bmN0aW9uIEwocmUsaWUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShyZSxPLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaWV9fSl9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/'@;
put 'KE89U3ltYm9sLmZvcigiZ3JhY2VmdWwtZnMucXVldWUiKSx6PVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnByZXZpb3VzIikpOihPPSJfX19ncmFjZWZ1bC1mcy5xdWV1ZSIsej0iX19fZ3JhY2VmdWwtZnMucHJldmlvdXMiKTt2YXIgWCxLPWZ1bmN0aW9uIE4oKXt9O2Z1bmN0aW9uIFcocmUp'@;
put 'e0IocmUpLHJlLmdyYWNlZnVsaWZ5PVcscmUuY3JlYXRlUmVhZFN0cmVhbT1mdW5jdGlvbiBzZShhdCxNZSl7cmV0dXJuIG5ldyByZS5SZWFkU3RyZWFtKGF0LE1lKX0scmUuY3JlYXRlV3JpdGVTdHJlYW09ZnVuY3Rpb24gd2UoYXQsTWUpe3JldHVybiBuZXcgcmUuV3JpdGVTdHJlYW0oYXQs'@;
put 'TWUpfTt2YXIgaWU9cmUucmVhZEZpbGU7cmUucmVhZEZpbGU9ZnVuY3Rpb24gbGUoYXQsTWUsdmUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBNZSYmKHZlPU1lLE1lPW51bGwpLGZ1bmN0aW9uIFhlKGplLERlLEZlLFJlKXtyZXR1cm4gaWUoamUsRGUsZnVuY3Rpb24oSWUpeyFJZXx8IkVN'@;
put 'RklMRSIhPT1JZS5jb2RlJiYiRU5GSUxFIiE9PUllLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEZlJiZGZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WShbWGUsW2plLERlLEZlXSxJZSxSZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oYXQsTWUsdmUpfTt2YXIgbWU9cmUud3JpdGVGaWxl'@;
put 'O3JlLndyaXRlRmlsZT1mdW5jdGlvbiBfZShhdCxNZSx2ZSxYZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksZnVuY3Rpb24gamUoRGUsRmUsUmUsSWUsVmUpe3JldHVybiBtZShEZSxGZSxSZSxmdW5jdGlvbihrZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNv'@;
put 'ZGUmJiJFTkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpZKFtqZSxbRGUsRmUsUmUsSWVdLGtlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShhdCxNZSx2ZSxYZSl9O3ZhciBUZT1yZS5hcHBlbmRGaWxlO1RlJiYo'@;
put 'cmUuYXBwZW5kRmlsZT1mdW5jdGlvbiBTZShhdCxNZSx2ZSxYZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksZnVuY3Rpb24gamUoRGUsRmUsUmUsSWUsVmUpe3JldHVybiBUZShEZSxGZSxSZSxmdW5jdGlvbihrZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNv'@;
put 'ZGUmJiJFTkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpZKFtqZSxbRGUsRmUsUmUsSWVdLGtlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShhdCxNZSx2ZSxYZSl9KTt2YXIgemU9cmUuY29weUZpbGU7emUmJihy'@;
put 'ZS5jb3B5RmlsZT1mdW5jdGlvbiBWKGF0LE1lLHZlLFhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT0wKSxmdW5jdGlvbiBqZShEZSxGZSxSZSxJZSxWZSl7cmV0dXJuIHplKERlLEZlLFJlLGZ1bmN0aW9uKGtlKXsha2V8fCJFTUZJTEUiIT09a2UuY29kZSYmIkVO'@;
put 'RklMRSIhPT1rZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlkoW2plLFtEZSxGZSxSZSxJZV0sa2UsVmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGF0LE1lLHZlLFhlKX0pO3ZhciBwPXJlLnJlYWRkaXI7cmUucmVhZGRpcj1mdW5j'@;
put 'dGlvbiB4KGF0LE1lLHZlKXsiZnVuY3Rpb24iPT10eXBlb2YgTWUmJih2ZT1NZSxNZT1udWxsKTt2YXIgWGU9Yi50ZXN0KEkudmVyc2lvbik/ZnVuY3Rpb24oRmUsUmUsSWUsVmUpe3JldHVybiBwKEZlLGplKEZlLFJlLEllLFZlKSl9OmZ1bmN0aW9uKEZlLFJlLEllLFZlKXtyZXR1cm4gcChG'@;
put 'ZSxSZSxqZShGZSxSZSxJZSxWZSkpfTtyZXR1cm4gWGUoYXQsTWUsdmUpO2Z1bmN0aW9uIGplKERlLEZlLFJlLEllKXtyZXR1cm4gZnVuY3Rpb24oVmUsa2UpeyFWZXx8IkVNRklMRSIhPT1WZS5jb2RlJiYiRU5GSUxFIiE9PVZlLmNvZGU/KGtlJiZrZS5zb3J0JiZrZS5zb3J0KCksImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFJlJiZSZS5jYWxsKHRoaXMsVmUsa2UpKTpZKFtYZSxbRGUsRmUsUmVdLFZlLEllfHxEYXRlLm5vdygpLERhdGUubm93KCldKX19fTt2YXIgYj0vXnZbMC01XVwuLztpZigidjAuOCI9PT1JLnZlcnNpb24uc3Vic3RyKDAsNCkpe3ZhciBDPXcocmUpO209Qy5SZWFkU3Ry'@;
put 'ZWFtLG9lPUMuV3JpdGVTdHJlYW19dmFyIFQ9cmUuUmVhZFN0cmVhbTtUJiYobS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShULnByb3RvdHlwZSksbS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbiBBKCl7dmFyIGF0PXRoaXM7SmUoYXQucGF0aCxhdC5mbGFncyxhdC5tb2RlLGZ1bmN0aW9uKE1l'@;
put 'LHZlKXtNZT8oYXQuYXV0b0Nsb3NlJiZhdC5kZXN0cm95KCksYXQuZW1pdCgiZXJyb3IiLE1lKSk6KGF0LmZkPXZlLGF0LmVtaXQoIm9wZW4iLHZlKSxhdC5yZWFkKCkpfSl9KTt2YXIgSD1yZS5Xcml0ZVN0cmVhbTtIJiYob2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSC5wcm90b3R5cGUp'@;
put 'LG9lLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uIHRlKCl7dmFyIGF0PXRoaXM7SmUoYXQucGF0aCxhdC5mbGFncyxhdC5tb2RlLGZ1bmN0aW9uKE1lLHZlKXtNZT8oYXQuZGVzdHJveSgpLGF0LmVtaXQoImVycm9yIixNZSkpOihhdC5mZD12ZSxhdC5lbWl0KCJvcGVuIix2ZSkpfSl9KSxPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkocmUsIlJlYWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbX0sc2V0OmZ1bmN0aW9uKGF0KXttPWF0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZSwiV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gb2V9LHNldDpmdW5jdGlvbihhdCl7b2U9YXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIGo9bTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmUsIkZpbGVSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGp9LHNldDpmdW5jdGlvbihhdCl7'@;
put 'aj1hdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgRT1vZTtmdW5jdGlvbiBtKGF0LE1lKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG0/KFQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOm0uYXBwbHkoT2JqZWN0LmNyZWF0ZShtLnByb3RvdHlwZSksYXJndW1lbnRz'@;
put 'KX1mdW5jdGlvbiBvZShhdCxNZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBvZT8oSC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcyk6b2UuYXBwbHkoT2JqZWN0LmNyZWF0ZShvZS5wcm90b3R5cGUpLGFyZ3VtZW50cyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLCJGaWxlV3JpdGVTdHJl'@;
put 'YW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRX0sc2V0OmZ1bmN0aW9uKGF0KXtFPWF0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBVZT1yZS5vcGVuO2Z1bmN0aW9uIEplKGF0LE1lLHZlLFhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT1u'@;
put 'dWxsKSxmdW5jdGlvbiBqZShEZSxGZSxSZSxJZSxWZSl7cmV0dXJuIFVlKERlLEZlLFJlLGZ1bmN0aW9uKGtlLEFlKXsha2V8fCJFTUZJTEUiIT09a2UuY29kZSYmIkVORklMRSIhPT1rZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBJZSYmSWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlkoW2pl'@;
put 'LFtEZSxGZSxSZSxJZV0sa2UsVmV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGF0LE1lLHZlLFhlKX1yZXR1cm4gcmUub3Blbj1KZSxyZX1mdW5jdGlvbiBZKHJlKXtLKCJFTlFVRVVFIixyZVswXS5uYW1lLHJlWzFdKSxnW09dLnB1c2gocmUpLEooKX1mdW5jdGlvbiBlZSgpe2Zvcih2'@;
put 'YXIgcmU9RGF0ZS5ub3coKSxpZT0wO2llPGdbT10ubGVuZ3RoOysraWUpZ1tPXVtpZV0ubGVuZ3RoPjImJihnW09dW2llXVszXT1yZSxnW09dW2llXVs0XT1yZSk7SigpfWZ1bmN0aW9uIEooKXtpZihjbGVhclRpbWVvdXQoWCksWD12b2lkIDAsMCE9PWdbT10ubGVuZ3RoKXt2YXIgcmU9Z1tP'@;
put 'XS5zaGlmdCgpLGllPXJlWzBdLGxlPXJlWzFdLG1lPXJlWzJdLF9lPXJlWzNdLFRlPXJlWzRdO2lmKHZvaWQgMD09PV9lKUsoIlJFVFJZIixpZS5uYW1lLGxlKSxpZS5hcHBseShudWxsLGxlKTtlbHNlIGlmKERhdGUubm93KCktX2U+PTZlNCl7SygiVElNRU9VVCIsaWUubmFtZSxsZSk7dmFy'@;
put 'IFNlPWxlLnBvcCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBTZSYmU2UuY2FsbChudWxsLG1lKX1lbHNle3ZhciB6ZT1EYXRlLm5vdygpLVRlLFY9TWF0aC5tYXgoVGUtX2UsMSk7emU+PU1hdGgubWluKDEuMipWLDEwMCk/KEsoIlJFVFJZIixpZS5uYW1lLGxlKSxpZS5hcHBseShudWxsLGxlLmNv'@;
put 'bmNhdChbX2VdKSkpOmdbT10ucHVzaChyZSl9dm9pZCAwPT09WCYmKFg9c2V0VGltZW91dChKLDApKX19Ri5kZWJ1Z2xvZz9LPUYuZGVidWdsb2coImdmczQiKTovXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmKEs9ZnVuY3Rpb24oKXt2YXIgcmU9Ri5mb3JtYXQuYXBw'@;
put 'bHkoRixhcmd1bWVudHMpO3JlPSJHRlM0OiAiK3JlLnNwbGl0KC9cbi8pLmpvaW4oIlxuR0ZTNDogIikseS5lcnJvcihyZSl9KSxnW09dfHwoTChnLF8uZ1tPXXx8W10pLGcuY2xvc2U9ZnVuY3Rpb24ocmUpe2Z1bmN0aW9uIGllKGxlLG1lKXtyZXR1cm4gcmUuY2FsbChnLGxlLGZ1bmN0aW9u'@;
put 'KF9lKXtfZXx8ZWUoKSwiZnVuY3Rpb24iPT10eXBlb2YgbWUmJm1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaWUseix7dmFsdWU6cmV9KSxpZX0oZy5jbG9zZSksZy5jbG9zZVN5bmM9ZnVuY3Rpb24ocmUpe2Z1bmN0aW9uIGllKGxlKXty'@;
put 'ZS5hcHBseShnLGFyZ3VtZW50cyksZWUoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLHose3ZhbHVlOnJlfSksaWV9KGcuY2xvc2VTeW5jKSwvXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmSS5vbigiZXhpdCIsZnVuY3Rpb24oKXtLKGdbT10pLF8oOTI4'@;
put 'MikuZXF1YWwoZ1tPXS5sZW5ndGgsMCl9KSksXy5nW09dfHxMKF8uZyxnW09dKSx1ZS5leHBvcnRzPVcoUChnKSksSS5lbnYuVEVTVF9HUkFDRUZVTF9GU19HTE9CQUxfUEFUQ0gmJiFnLl9fcGF0Y2hlZCYmKHVlLmV4cG9ydHM9VyhnKSxnLl9fcGF0Y2hlZD0hMCl9LDg1MjA6KHVlLHEsXyk9'@;
put 'Pnt2YXIgST1fKDQxNTUpLHk9XygyODMwKS5TdHJlYW07dWUuZXhwb3J0cz1mdW5jdGlvbiBnKEIpe3JldHVybntSZWFkU3RyZWFtOmZ1bmN0aW9uIHcoRixPKXtpZighKHRoaXMgaW5zdGFuY2VvZiB3KSlyZXR1cm4gbmV3IHcoRixPKTt5LmNhbGwodGhpcyk7dmFyIHo9dGhpczt0aGlzLnBh'@;
put 'dGg9Rix0aGlzLmZkPW51bGwsdGhpcy5yZWFkYWJsZT0hMCx0aGlzLnBhdXNlZD0hMSx0aGlzLmZsYWdzPSJyIix0aGlzLm1vZGU9NDM4LHRoaXMuYnVmZmVyU2l6ZT02NTUzNixPPU98fHt9O2Zvcih2YXIgTj1PYmplY3Qua2V5cyhPKSxMPTAsSz1OLmxlbmd0aDtMPEs7TCsrKXt2YXIgVT1O'@;
put 'W0xdO3RoaXNbVV09T1tVXX1pZih0aGlzLmVuY29kaW5nJiZ0aGlzLnNldEVuY29kaW5nKHRoaXMuZW5jb2RpbmcpLHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBOdW1iZXIiKTtpZih2'@;
put 'b2lkIDA9PT10aGlzLmVuZCl0aGlzLmVuZD0xLzA7ZWxzZSBpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuZW5kKXRocm93IFR5cGVFcnJvcigiZW5kIG11c3QgYmUgYSBOdW1iZXIiKTtpZih0aGlzLnN0YXJ0PnRoaXMuZW5kKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA8PSBlbmQi'@;
put 'KTt0aGlzLnBvcz10aGlzLnN0YXJ0fW51bGw9PT10aGlzLmZkP0Iub3Blbih0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1vZGUsZnVuY3Rpb24oVyxZKXtpZihXKXJldHVybiB6LmVtaXQoImVycm9yIixXKSx2b2lkKHoucmVhZGFibGU9ITEpO3ouZmQ9WSx6LmVtaXQoIm9wZW4iLFkpLHou'@;
put 'X3JlYWQoKX0pOkkubmV4dFRpY2soZnVuY3Rpb24oKXt6Ll9yZWFkKCl9KX0sV3JpdGVTdHJlYW06ZnVuY3Rpb24gUChGLE8pe2lmKCEodGhpcyBpbnN0YW5jZW9mIFApKXJldHVybiBuZXcgUChGLE8pO3kuY2FsbCh0aGlzKSx0aGlzLnBhdGg9Rix0aGlzLmZkPW51bGwsdGhpcy53cml0YWJs'@;
put 'ZT0hMCx0aGlzLmZsYWdzPSJ3Iix0aGlzLmVuY29kaW5nPSJiaW5hcnkiLHRoaXMubW9kZT00MzgsdGhpcy5ieXRlc1dyaXR0ZW49MCxPPU98fHt9O2Zvcih2YXIgej1PYmplY3Qua2V5cyhPKSxOPTAsTD16Lmxlbmd0aDtOPEw7TisrKXt2YXIgSz16W05dO3RoaXNbS109T1tLXX1pZih2b2lk'@;
put 'IDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhyb3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydDwwKXRocm93IG5ldyBFcnJvcigic3RhcnQgbXVzdCBiZSA+PSB6ZXJvIik7dGhpcy5wb3M9dGhpcy5zdGFy'@;
put 'dH10aGlzLmJ1c3k9ITEsdGhpcy5fcXVldWU9W10sbnVsbD09PXRoaXMuZmQmJih0aGlzLl9vcGVuPUIub3Blbix0aGlzLl9xdWV1ZS5wdXNoKFt0aGlzLl9vcGVuLHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSx2b2lkIDBdKSx0aGlzLmZsdXNoKCkpfX19fSwyMTYxOih1ZSxxLF8p'@;
put 'PT57dmFyIEk9Xyg0MTU1KSx5PV8oMzIwOCksZz1JLmN3ZCxCPW51bGwsdz1JLmVudi5HUkFDRUZVTF9GU19QTEFURk9STXx8SS5wbGF0Zm9ybTtJLmN3ZD1mdW5jdGlvbigpe3JldHVybiBCfHwoQj1nLmNhbGwoSSkpLEJ9O3RyeXtJLmN3ZCgpfWNhdGNoe31pZigiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgSS5jaGRpcil7dmFyIFA9SS5jaGRpcjtJLmNoZGlyPWZ1bmN0aW9uKE8pe0I9bnVsbCxQLmNhbGwoSSxPKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YoSS5jaGRpcixQKX11ZS5leHBvcnRzPWZ1bmN0aW9uIEYoTyl7ZnVuY3Rpb24gTChKKXtyZXR1'@;
put 'cm4gSiYmZnVuY3Rpb24ocmUsaWUsbGUpe3JldHVybiBKLmNhbGwoTyxyZSxpZSxmdW5jdGlvbihtZSl7ZWUobWUpJiYobWU9bnVsbCksbGUmJmxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBLKEope3JldHVybiBKJiZmdW5jdGlvbihyZSxpZSl7dHJ5e3JldHVybiBKLmNh'@;
put 'bGwoTyxyZSxpZSl9Y2F0Y2gobGUpe2lmKCFlZShsZSkpdGhyb3cgbGV9fX1mdW5jdGlvbiBVKEope3JldHVybiBKJiZmdW5jdGlvbihyZSxpZSxsZSxtZSl7cmV0dXJuIEouY2FsbChPLHJlLGllLGxlLGZ1bmN0aW9uKF9lKXtlZShfZSkmJihfZT1udWxsKSxtZSYmbWUuYXBwbHkodGhpcyxh'@;
put 'cmd1bWVudHMpfSl9fWZ1bmN0aW9uIFcoSil7cmV0dXJuIEomJmZ1bmN0aW9uKHJlLGllLGxlKXt0cnl7cmV0dXJuIEouY2FsbChPLHJlLGllLGxlKX1jYXRjaChtZSl7aWYoIWVlKG1lKSl0aHJvdyBtZX19fWZ1bmN0aW9uIFkoSil7cmV0dXJuIEomJmZ1bmN0aW9uKHJlLGllLGxlKXtmdW5j'@;
put 'dGlvbiBtZShfZSxUZSl7VGUmJihUZS51aWQ8MCYmKFRlLnVpZCs9NDI5NDk2NzI5NiksVGUuZ2lkPDAmJihUZS5naWQrPTQyOTQ5NjcyOTYpKSxsZSYmbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfXJldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBpZSYmKGxlPWllLGllPW51bGwpLGllP0ouY2Fs'@;
put 'bChPLHJlLGllLG1lKTpKLmNhbGwoTyxyZSxtZSl9fWZ1bmN0aW9uIFgoSil7cmV0dXJuIEomJmZ1bmN0aW9uKHJlLGllKXt2YXIgbGU9aWU/Si5jYWxsKE8scmUsaWUpOkouY2FsbChPLHJlKTtyZXR1cm4gbGUmJihsZS51aWQ8MCYmKGxlLnVpZCs9NDI5NDk2NzI5NiksbGUuZ2lkPDAmJihs'@;
put 'ZS5naWQrPTQyOTQ5NjcyOTYpKSxsZX19ZnVuY3Rpb24gZWUoSil7cmV0dXJuIUp8fCJFTk9TWVMiPT09Si5jb2RlfHwhKEkuZ2V0dWlkJiYwPT09SS5nZXR1aWQoKXx8IkVJTlZBTCIhPT1KLmNvZGUmJiJFUEVSTSIhPT1KLmNvZGUpfXkuaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZJ'@;
put 'LnZlcnNpb24ubWF0Y2goL152MFwuNlwuWzAtMl18XnYwXC41XC4vKSYmZnVuY3Rpb24geihKKXtKLmxjaG1vZD1mdW5jdGlvbihyZSxpZSxsZSl7Si5vcGVuKHJlLHkuT19XUk9OTFl8eS5PX1NZTUxJTkssaWUsZnVuY3Rpb24obWUsX2Upe21lP2xlJiZsZShtZSk6Si5mY2htb2QoX2UsaWUs'@;
put 'ZnVuY3Rpb24oVGUpe0ouY2xvc2UoX2UsZnVuY3Rpb24oU2Upe2xlJiZsZShUZXx8U2UpfSl9KX0pfSxKLmxjaG1vZFN5bmM9ZnVuY3Rpb24ocmUsaWUpe3ZhciBfZSxsZT1KLm9wZW5TeW5jKHJlLHkuT19XUk9OTFl8eS5PX1NZTUxJTkssaWUpLG1lPSEwO3RyeXtfZT1KLmZjaG1vZFN5bmMo'@;
put 'bGUsaWUpLG1lPSExfWZpbmFsbHl7aWYobWUpdHJ5e0ouY2xvc2VTeW5jKGxlKX1jYXRjaHt9ZWxzZSBKLmNsb3NlU3luYyhsZSl9cmV0dXJuIF9lfX0oTyksTy5sdXRpbWVzfHxmdW5jdGlvbiBOKEope3kuaGFzT3duUHJvcGVydHkoIk9fU1lNTElOSyIpJiZKLmZ1dGltZXM/KEoubHV0aW1l'@;
put 'cz1mdW5jdGlvbihyZSxpZSxsZSxtZSl7Si5vcGVuKHJlLHkuT19TWU1MSU5LLGZ1bmN0aW9uKF9lLFRlKXtfZT9tZSYmbWUoX2UpOkouZnV0aW1lcyhUZSxpZSxsZSxmdW5jdGlvbihTZSl7Si5jbG9zZShUZSxmdW5jdGlvbih6ZSl7bWUmJm1lKFNlfHx6ZSl9KX0pfSl9LEoubHV0aW1lc1N5'@;
put 'bmM9ZnVuY3Rpb24ocmUsaWUsbGUpe3ZhciBfZSxtZT1KLm9wZW5TeW5jKHJlLHkuT19TWU1MSU5LKSxUZT0hMDt0cnl7X2U9Si5mdXRpbWVzU3luYyhtZSxpZSxsZSksVGU9ITF9ZmluYWxseXtpZihUZSl0cnl7Si5jbG9zZVN5bmMobWUpfWNhdGNoe31lbHNlIEouY2xvc2VTeW5jKG1lKX1y'@;
put 'ZXR1cm4gX2V9KTpKLmZ1dGltZXMmJihKLmx1dGltZXM9ZnVuY3Rpb24ocmUsaWUsbGUsbWUpe21lJiZJLm5leHRUaWNrKG1lKX0sSi5sdXRpbWVzU3luYz1mdW5jdGlvbigpe30pfShPKSxPLmNob3duPVUoTy5jaG93biksTy5mY2hvd249VShPLmZjaG93biksTy5sY2hvd249VShPLmxjaG93'@;
put 'biksTy5jaG1vZD1MKE8uY2htb2QpLE8uZmNobW9kPUwoTy5mY2htb2QpLE8ubGNobW9kPUwoTy5sY2htb2QpLE8uY2hvd25TeW5jPVcoTy5jaG93blN5bmMpLE8uZmNob3duU3luYz1XKE8uZmNob3duU3luYyksTy5sY2hvd25TeW5jPVcoTy5sY2hvd25TeW5jKSxPLmNobW9kU3luYz1LKE8u'@;
put 'Y2htb2RTeW5jKSxPLmZjaG1vZFN5bmM9SyhPLmZjaG1vZFN5bmMpLE8ubGNobW9kU3luYz1LKE8ubGNobW9kU3luYyksTy5zdGF0PVkoTy5zdGF0KSxPLmZzdGF0PVkoTy5mc3RhdCksTy5sc3RhdD1ZKE8ubHN0YXQpLE8uc3RhdFN5bmM9WChPLnN0YXRTeW5jKSxPLmZzdGF0U3luYz1YKE8u'@;
put 'ZnN0YXRTeW5jKSxPLmxzdGF0U3luYz1YKE8ubHN0YXRTeW5jKSxPLmNobW9kJiYhTy5sY2htb2QmJihPLmxjaG1vZD1mdW5jdGlvbihKLHJlLGllKXtpZSYmSS5uZXh0VGljayhpZSl9LE8ubGNobW9kU3luYz1mdW5jdGlvbigpe30pLE8uY2hvd24mJiFPLmxjaG93biYmKE8ubGNob3duPWZ1'@;
put 'bmN0aW9uKEoscmUsaWUsbGUpe2xlJiZJLm5leHRUaWNrKGxlKX0sTy5sY2hvd25TeW5jPWZ1bmN0aW9uKCl7fSksIndpbjMyIj09PXcmJihPLnJlbmFtZT0iZnVuY3Rpb24iIT10eXBlb2YgTy5yZW5hbWU/Ty5yZW5hbWU6ZnVuY3Rpb24oSil7ZnVuY3Rpb24gcmUoaWUsbGUsbWUpe3ZhciBf'@;
put 'ZT1EYXRlLm5vdygpLFRlPTA7SihpZSxsZSxmdW5jdGlvbiBTZSh6ZSl7aWYoemUmJigiRUFDQ0VTIj09PXplLmNvZGV8fCJFUEVSTSI9PT16ZS5jb2RlfHwiRUJVU1kiPT09emUuY29kZSkmJkRhdGUubm93KCktX2U8NmU0KXJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ty5zdGF0KGxl'@;
put 'LGZ1bmN0aW9uKFYscCl7ViYmIkVOT0VOVCI9PT1WLmNvZGU/SihpZSxsZSxTZSk6bWUoemUpfSl9LFRlKSx2b2lkKFRlPDEwMCYmKFRlKz0xMCkpO21lJiZtZSh6ZSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YocmUsSikscmV9KE8ucmVu'@;
put 'YW1lKSksTy5yZWFkPSJmdW5jdGlvbiIhPXR5cGVvZiBPLnJlYWQ/Ty5yZWFkOmZ1bmN0aW9uKEope2Z1bmN0aW9uIHJlKGllLGxlLG1lLF9lLFRlLFNlKXt2YXIgemU7aWYoU2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBTZSl7dmFyIFY9MDt6ZT1mdW5jdGlvbihwLGIseCl7aWYocCYmIkVBR0FJ'@;
put 'TiI9PT1wLmNvZGUmJlY8MTApcmV0dXJuIFYrKyxKLmNhbGwoTyxpZSxsZSxtZSxfZSxUZSx6ZSk7U2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1yZXR1cm4gSi5jYWxsKE8saWUsbGUsbWUsX2UsVGUsemUpfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YmJk9iamVjdC5zZXRQcm90b3R5'@;
put 'cGVPZihyZSxKKSxyZX0oTy5yZWFkKSxPLnJlYWRTeW5jPSJmdW5jdGlvbiIhPXR5cGVvZiBPLnJlYWRTeW5jP08ucmVhZFN5bmM6ZnVuY3Rpb24oSil7cmV0dXJuIGZ1bmN0aW9uKHJlLGllLGxlLG1lLF9lKXtmb3IodmFyIFRlPTA7Oyl0cnl7cmV0dXJuIEouY2FsbChPLHJlLGllLGxlLG1l'@;
put 'LF9lKX1jYXRjaChTZSl7aWYoIkVBR0FJTiI9PT1TZS5jb2RlJiZUZTwxMCl7VGUrKztjb250aW51ZX10aHJvdyBTZX19fShPLnJlYWRTeW5jKX19LDEwNDQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0NDI5KSx5PWZ1bmN0aW9uKCl7cmV0dXJuISFJfTt5Lmhhc0FycmF5TGVu'@;
put 'Z3RoRGVmaW5lQnVnPWZ1bmN0aW9uKCl7aWYoIUkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09SShbXSwibGVuZ3RoIix7dmFsdWU6MX0pLmxlbmd0aH1jYXRjaHtyZXR1cm4hMH19LHVlLmV4cG9ydHM9eX0sMTQwNToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST10eXBlb2YgU3lt'@;
put 'Ym9sPCJ1IiYmU3ltYm9sLHk9Xyg1NDE5KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEkmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgSSgiZm9vIikmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJiYXIiKSYmeSgp'@;
put 'fX0sNTQxOTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFN5bWJvbHx8ImZ1bmN0aW9uIiE9dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpcmV0dXJuITE7aWYoInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRl'@;
put 'cmF0b3IpcmV0dXJuITA7dmFyIF89e30sST1TeW1ib2woInRlc3QiKSx5PU9iamVjdChJKTtpZigic3RyaW5nIj09dHlwZW9mIEl8fCJbb2JqZWN0IFN5bWJvbF0iIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEkpfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5'@;
put 'cGUudG9TdHJpbmcuY2FsbCh5KSlyZXR1cm4hMTtmb3IodmFyIEIgaW4gX1tJXT00MixfKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3Qua2V5cyYmMCE9PU9iamVjdC5rZXlzKF8pLmxlbmd0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h'@;
put 'bWVzJiYwIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoXykubGVuZ3RoKXJldHVybiExO3ZhciB3PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoXyk7aWYoMSE9PXcubGVuZ3RofHx3WzBdIT09SXx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChf'@;
put 'LEkpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKXt2YXIgUD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKF8sSSk7aWYoNDIhPT1QLnZhbHVlfHwhMCE9PVAuZW51bWVyYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH19'@;
put 'LDY0MTA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1NDE5KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIEkoKSYmISFTeW1ib2wudG9TdHJpbmdUYWd9fSwzMzQ5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oOTUwOSkuQnVmZmVyLHk9XygyODMwKS5UcmFu'@;
put 'c2Zvcm07ZnVuY3Rpb24gQihPKXt5LmNhbGwodGhpcyksdGhpcy5fYmxvY2s9SS5hbGxvY1Vuc2FmZShPKSx0aGlzLl9ibG9ja1NpemU9Tyx0aGlzLl9ibG9ja09mZnNldD0wLHRoaXMuX2xlbmd0aD1bMCwwLDAsMF0sdGhpcy5fZmluYWxpemVkPSExfV8oNTcxNykoQix5KSxCLnByb3RvdHlw'@;
put 'ZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKE8seixOKXt2YXIgTD1udWxsO3RyeXt0aGlzLnVwZGF0ZShPLHopfWNhdGNoKEspe0w9S31OKEwpfSxCLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oTyl7dmFyIHo9bnVsbDt0cnl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpfWNhdGNoKE4pe3o9Tn1P'@;
put 'KHopfTt2YXIgdz10eXBlb2YgVWludDhBcnJheTwidSIsUD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSImJkFycmF5QnVmZmVyLmlzVmlldyYmKEkucHJvdG90eXBlIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5UWVBFRF9BUlJBWV9TVVBQT1JUKTtCLnBy'@;
put 'b3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oTyx6KXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBjYWxsZWQiKTtPPWZ1bmN0aW9uIEYoTyx6KXtpZihPIGluc3RhbmNlb2YgSSlyZXR1cm4gTztpZigic3RyaW5nIj09dHlwZW9mIE8pcmV0dXJuIEku'@;
put 'ZnJvbShPLHopO2lmKFAmJkFycmF5QnVmZmVyLmlzVmlldyhPKSl7aWYoMD09PU8uYnl0ZUxlbmd0aClyZXR1cm4gSS5hbGxvYygwKTt2YXIgTj1JLmZyb20oTy5idWZmZXIsTy5ieXRlT2Zmc2V0LE8uYnl0ZUxlbmd0aCk7aWYoTi5ieXRlTGVuZ3RoPT09Ty5ieXRlTGVuZ3RoKXJldHVybiBO'@;
put 'fWlmKHcmJk8gaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLmlzQnVmZmVyKE8pJiZPLmNvbnN0cnVjdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTy5jb25zdHJ1Y3Rvci5pc0J1ZmZlciYmTy5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihPKSlyZXR1cm4gSS5mcm9tKE8pO3Rocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoJ1RoZSAiZGF0YSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBCdWZmZXIsIFR5cGVkQXJyYXksIG9yIERhdGFWaWV3LicpfShPLHopO2Zvcih2YXIgTj10aGlzLl9ibG9jayxMPTA7dGhpcy5fYmxvY2tPZmZzZXQrTy5sZW5ndGgtTD49dGhp'@;
put 'cy5fYmxvY2tTaXplOyl7Zm9yKHZhciBLPXRoaXMuX2Jsb2NrT2Zmc2V0O0s8dGhpcy5fYmxvY2tTaXplOylOW0srK109T1tMKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtMPE8ubGVuZ3RoOylOW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPU9bTCsrXTtmb3IodmFy'@;
put 'IFU9MCxXPTgqTy5sZW5ndGg7Vz4wOysrVSl0aGlzLl9sZW5ndGhbVV0rPVcsKFc9dGhpcy5fbGVuZ3RoW1VdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtVXS09NDI5NDk2NzI5NipXKTtyZXR1cm4gdGhpc30sQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5l'@;
put 'dyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sQi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKE8pe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgej10aGlzLl9kaWdl'@;
put 'c3QoKTt2b2lkIDAhPT1PJiYoej16LnRvU3RyaW5nKE8pKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBOPTA7Tjw0OysrTil0aGlzLl9sZW5ndGhbTl09MDtyZXR1cm4gen0sQi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBF'@;
put 'cnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVtZW50ZWQiKX0sdWUuZXhwb3J0cz1CfSwzNzE1Oih1ZSxxLF8pPT57dmFyIEk9cTtJLnV0aWxzPV8oNjQzNiksSS5jb21tb249Xyg1NzcyKSxJLnNoYT1fKDkwNDEpLEkucmlwZW1kPV8oMjk0OSksSS5obWFjPV8oMjM0NCksSS5zaGExPUkuc2hh'@;
put 'LnNoYTEsSS5zaGEyNTY9SS5zaGEuc2hhMjU2LEkuc2hhMjI0PUkuc2hhLnNoYTIyNCxJLnNoYTM4ND1JLnNoYS5zaGEzODQsSS5zaGE1MTI9SS5zaGEuc2hhNTEyLEkucmlwZW1kMTYwPUkucmlwZW1kLnJpcGVtZDE2MH0sNTc3MjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDY0'@;
put 'MzYpLHk9Xyg5NzQ2KTtmdW5jdGlvbiBnKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRo'@;
put 'aXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1xLkJsb2NrSGFzaD1n'@;
put 'LGcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih3LFApe2lmKHc9SS50b0FycmF5KHcsUCksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KHcpOncsdGhpcy5wZW5kaW5nVG90YWwrPXcubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRh'@;
put 'OCl7dmFyIEY9KHc9dGhpcy5wZW5kaW5nKS5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz13LnNsaWNlKHcubGVuZ3RoLUYsdy5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHc9SS5qb2luMzIodywwLHcubGVuZ3RoLUYsdGhpcy5l'@;
put 'bmRpYW4pO2Zvcih2YXIgTz0wO088dy5sZW5ndGg7Tys9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodyxPLE8rdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLHkobnVsbD09'@;
put 'PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHcpfSxnLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5wZW5kaW5nVG90YWwsUD10aGlzLl9kZWx0YTgsRj1QLSh3K3RoaXMucGFkTGVuZ3RoKSVQLE89bmV3IEFycmF5KEYrdGhpcy5wYWRMZW5ndGgpO09bMF09MTI4O2Zv'@;
put 'cih2YXIgej0xO3o8Rjt6KyspT1t6XT0wO2lmKHc8PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgTj04O048dGhpcy5wYWRMZW5ndGg7TisrKU9beisrXT0wO09beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT13Pj4+MjQmMjU1LE9beisrXT13Pj4+MTYm'@;
put 'MjU1LE9beisrXT13Pj4+OCYyNTUsT1t6KytdPTI1NSZ3fWVsc2UgZm9yKE9beisrXT0yNTUmdyxPW3orK109dz4+PjgmMjU1LE9beisrXT13Pj4+MTYmMjU1LE9beisrXT13Pj4+MjQmMjU1LE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE9beisrXT0wLE49ODtOPHRoaXMucGFkTGVuZ3Ro'@;
put 'O04rKylPW3orK109MDtyZXR1cm4gT319LDIzNDQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg2NDM2KSx5PV8oOTc0Nik7ZnVuY3Rpb24gZyhCLHcsUCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnKEIsdyxQKTt0aGlzLkhhc2g9Qix0aGlzLmJsb2NrU2l6'@;
put 'ZT1CLmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT1CLm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHRoaXMuX2luaXQoSS50b0FycmF5KHcsUCkpfXVlLmV4cG9ydHM9ZyxnLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih3KXt3Lmxlbmd0aD50aGlzLmJsb2NrU2l6'@;
put 'ZSYmKHc9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KS5kaWdlc3QoKSkseSh3Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgUD13Lmxlbmd0aDtQPHRoaXMuYmxvY2tTaXplO1ArKyl3LnB1c2goMCk7Zm9yKFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj01NDtmb3IodGhpcy5pbm5l'@;
put 'cj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpLFA9MDtQPHcubGVuZ3RoO1ArKyl3W1BdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpfSxnLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodyxQKSx0aGlzfSxn'@;
put 'LnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KHcpfX0sMjk0OToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDY0MzYpLHk9Xyg1NzcyKSxnPUkucm90bDMyLEI9'@;
put 'SS5zdW0zMix3PUkuc3VtMzJfMyxQPUkuc3VtMzJfNCxGPXkuQmxvY2tIYXNoO2Z1bmN0aW9uIE8oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE87Ri5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUz'@;
put 'Nzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0aW9uIHooWCxlZSxKLHJlKXtyZXR1cm4gWDw9MTU/ZWVeSl5yZTpYPD0zMT9lZSZKfH5lZSZyZTpYPD00Nz8oZWV8fkopXnJlOlg8PTYzP2VlJnJlfEomfnJlOmVlXihKfH5yZSl9ZnVuY3Rpb24gTChYKXtyZXR1cm4gWDw9MTU/MTM1'@;
put 'MjgyOTkyNjpYPD0zMT8xNTQ4NjAzNjg0Olg8PTQ3PzE4MzYwNzI2OTE6WDw9NjM/MjA1Mzk5NDIxNzowfUkuaW5oZXJpdHMoTyxGKSxxLnJpcGVtZDE2MD1PLE8uYmxvY2tTaXplPTUxMixPLm91dFNpemU9MTYwLE8uaG1hY1N0cmVuZ3RoPTE5MixPLnBhZExlbmd0aD02NCxPLnByb3RvdHlw'@;
put 'ZS5fdXBkYXRlPWZ1bmN0aW9uKGVlLEope2Zvcih2YXIgcmU9dGhpcy5oWzBdLGllPXRoaXMuaFsxXSxsZT10aGlzLmhbMl0sbWU9dGhpcy5oWzNdLF9lPXRoaXMuaFs0XSxUZT1yZSxTZT1pZSx6ZT1sZSxWPW1lLHA9X2UsYj0wO2I8ODA7YisrKXt2YXIgeD1CKGcoUChyZSx6KGIsaWUsbGUs'@;
put 'bWUpLGVlW0tbYl0rSl0sKFg9Yik8PTE1PzA6WDw9MzE/MTUxODUwMDI0OTpYPD00Nz8xODU5Nzc1MzkzOlg8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOCksV1tiXSksX2UpO3JlPV9lLF9lPW1lLG1lPWcobGUsMTApLGxlPWllLGllPXgseD1CKGcoUChUZSx6KDc5LWIsU2UsemUsViksZWVb'@;
put 'VVtiXStKXSxMKGIpKSxZW2JdKSxwKSxUZT1wLHA9VixWPWcoemUsMTApLHplPVNlLFNlPXh9dmFyIFg7eD13KHRoaXMuaFsxXSxsZSxWKSx0aGlzLmhbMV09dyh0aGlzLmhbMl0sbWUscCksdGhpcy5oWzJdPXcodGhpcy5oWzNdLF9lLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbNF0scmUsU2Up'@;
put 'LHRoaXMuaFs0XT13KHRoaXMuaFswXSxpZSx6ZSksdGhpcy5oWzBdPXh9LE8ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oZWUpe3JldHVybiJoZXgiPT09ZWU/SS50b0hleDMyKHRoaXMuaCwibGl0dGxlIik6SS5zcGxpdDMyKHRoaXMuaCwibGl0dGxlIil9O3ZhciBLPVswLDEsMiwzLDQs'@;
put 'NSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEs'@;
put 'Myw4LDExLDYsMTUsMTNdLFU9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcs'@;
put 'MTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sVz1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3'@;
put 'LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sWT1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywx'@;
put 'MSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDkwNDE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7cS5zaGExPV8oNDc2'@;
put 'MSkscS5zaGEyMjQ9Xyg3OTkpLHEuc2hhMjU2PV8oOTM0NCkscS5zaGEzODQ9Xyg3NzIpLHEuc2hhNTEyPV8oNTkwMCl9LDQ3NjE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg2NDM2KSx5PV8oNTc3MiksZz1fKDcwMzgpLEI9SS5yb3RsMzIsdz1JLnN1bTMyLFA9SS5zdW0zMl81'@;
put 'LEY9Zy5mdF8xLE89eS5CbG9ja0hhc2gsej1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07ZnVuY3Rpb24gTigpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4pKXJldHVybiBuZXcgTjtPLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcs'@;
put 'MjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5XPW5ldyBBcnJheSg4MCl9SS5pbmhlcml0cyhOLE8pLHVlLmV4cG9ydHM9TixOLmJsb2NrU2l6ZT01MTIsTi5vdXRTaXplPTE2MCxOLmhtYWNTdHJlbmd0aD04MCxOLnBhZExlbmd0aD02NCxOLnByb3RvdHlwZS5fdXBkYXRl'@;
put 'PWZ1bmN0aW9uKEssVSl7Zm9yKHZhciBXPXRoaXMuVyxZPTA7WTwxNjtZKyspV1tZXT1LW1UrWV07Zm9yKDtZPFcubGVuZ3RoO1krKylXW1ldPUIoV1tZLTNdXldbWS04XV5XW1ktMTRdXldbWS0xNl0sMSk7dmFyIFg9dGhpcy5oWzBdLGVlPXRoaXMuaFsxXSxKPXRoaXMuaFsyXSxyZT10aGlz'@;
put 'LmhbM10saWU9dGhpcy5oWzRdO2ZvcihZPTA7WTxXLmxlbmd0aDtZKyspe3ZhciBsZT1+fihZLzIwKSxtZT1QKEIoWCw1KSxGKGxlLGVlLEoscmUpLGllLFdbWV0seltsZV0pO2llPXJlLHJlPUosSj1CKGVlLDMwKSxlZT1YLFg9bWV9dGhpcy5oWzBdPXcodGhpcy5oWzBdLFgpLHRoaXMuaFsx'@;
put 'XT13KHRoaXMuaFsxXSxlZSksdGhpcy5oWzJdPXcodGhpcy5oWzJdLEopLHRoaXMuaFszXT13KHRoaXMuaFszXSxyZSksdGhpcy5oWzRdPXcodGhpcy5oWzRdLGllKX0sTi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihLKXtyZXR1cm4iaGV4Ij09PUs/SS50b0hleDMyKHRoaXMuaCwiYmln'@;
put 'Iik6SS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3OTk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg2NDM2KSx5PV8oOTM0NCk7ZnVuY3Rpb24gZygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZzt5LmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkx'@;
put 'NDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1JLmluaGVyaXRzKGcseSksdWUuZXhwb3J0cz1nLGcuYmxvY2tTaXplPTUxMixnLm91dFNpemU9MjI0LGcuaG1hY1N0cmVuZ3RoPTE5MixnLnBhZExlbmd0aD02'@;
put 'NCxnLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpOkkuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIil9fSw5MzQ0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNjQzNiks'@;
put 'eT1fKDU3NzIpLGc9Xyg3MDM4KSxCPV8oOTc0Niksdz1JLnN1bTMyLFA9SS5zdW0zMl80LEY9SS5zdW0zMl81LE89Zy5jaDMyLHo9Zy5tYWozMixOPWcuczBfMjU2LEw9Zy5zMV8yNTYsSz1nLmcwXzI1NixVPWcuZzFfMjU2LFc9eS5CbG9ja0hhc2gsWT1bMTExNjM1MjQwOCwxODk5NDQ3NDQx'@;
put 'LDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQw'@;
put 'MjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcy'@;
put 'MDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0'@;
put 'LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5'@;
put 'MzI1Mjk4XTtmdW5jdGlvbiBYKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWCkpcmV0dXJuIG5ldyBYO1cuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1'@;
put 'XSx0aGlzLms9WSx0aGlzLlc9bmV3IEFycmF5KDY0KX1JLmluaGVyaXRzKFgsVyksdWUuZXhwb3J0cz1YLFguYmxvY2tTaXplPTUxMixYLm91dFNpemU9MjU2LFguaG1hY1N0cmVuZ3RoPTE5MixYLnBhZExlbmd0aD02NCxYLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEoscmUpe2Zvcih2'@;
put 'YXIgaWU9dGhpcy5XLGxlPTA7bGU8MTY7bGUrKylpZVtsZV09SltyZStsZV07Zm9yKDtsZTxpZS5sZW5ndGg7bGUrKylpZVtsZV09UChVKGllW2xlLTJdKSxpZVtsZS03XSxLKGllW2xlLTE1XSksaWVbbGUtMTZdKTt2YXIgbWU9dGhpcy5oWzBdLF9lPXRoaXMuaFsxXSxUZT10aGlzLmhbMl0s'@;
put 'U2U9dGhpcy5oWzNdLHplPXRoaXMuaFs0XSxWPXRoaXMuaFs1XSxwPXRoaXMuaFs2XSxiPXRoaXMuaFs3XTtmb3IoQih0aGlzLmsubGVuZ3RoPT09aWUubGVuZ3RoKSxsZT0wO2xlPGllLmxlbmd0aDtsZSsrKXt2YXIgeD1GKGIsTCh6ZSksTyh6ZSxWLHApLHRoaXMua1tsZV0saWVbbGVdKSxD'@;
put 'PXcoTihtZSkseihtZSxfZSxUZSkpO2I9cCxwPVYsVj16ZSx6ZT13KFNlLHgpLFNlPVRlLFRlPV9lLF9lPW1lLG1lPXcoeCxDKX10aGlzLmhbMF09dyh0aGlzLmhbMF0sbWUpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxfZSksdGhpcy5oWzJdPXcodGhpcy5oWzJdLFRlKSx0aGlzLmhbM109dyh0'@;
put 'aGlzLmhbM10sU2UpLHRoaXMuaFs0XT13KHRoaXMuaFs0XSx6ZSksdGhpcy5oWzVdPXcodGhpcy5oWzVdLFYpLHRoaXMuaFs2XT13KHRoaXMuaFs2XSxwKSx0aGlzLmhbN109dyh0aGlzLmhbN10sYil9LFgucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oSil7cmV0dXJuImhleCI9PT1KP0ku'@;
put 'dG9IZXgzMih0aGlzLmgsImJpZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzcyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNjQzNikseT1fKDU5MDApO2Z1bmN0aW9uIGcoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1cm4gbmV3IGc7eS5jYWxsKHRoaXMpLHRo'@;
put 'aXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4'@;
put 'MTMsMzIwNDA3NTQyOF19SS5pbmhlcml0cyhnLHkpLHVlLmV4cG9ydHM9ZyxnLmJsb2NrU2l6ZT0xMDI0LGcub3V0U2l6ZT0zODQsZy5obWFjU3RyZW5ndGg9MTkyLGcucGFkTGVuZ3RoPTEyOCxnLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiJoZXgiPT09dz9JLnRvSGV4'@;
put 'MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLCJiaWciKX19LDU5MDA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg2NDM2KSx5PV8oNTc3MiksZz1fKDk3NDYpLEI9SS5yb3RyNjRfaGksdz1JLnJvdHI2NF9sbyxQPUkuc2hy'@;
put 'NjRfaGksRj1JLnNocjY0X2xvLE89SS5zdW02NCx6PUkuc3VtNjRfaGksTj1JLnN1bTY0X2xvLEw9SS5zdW02NF80X2hpLEs9SS5zdW02NF80X2xvLFU9SS5zdW02NF81X2hpLFc9SS5zdW02NF81X2xvLFk9eS5CbG9ja0hhc2gsWD1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEs'@;
put 'NjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMx'@;
put 'MDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYx'@;
put 'MzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgy'@;
put 'LDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2'@;
put 'MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3'@;
put 'NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMz'@;
put 'NDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0'@;
put 'Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkz'@;
put 'NTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1'@;
put 'NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3'@;
put 'MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdO2Z1bmN0aW9uIGVlKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZWUpKXJldHVybiBuZXcgZWU7WS5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0'@;
put 'MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPVgsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIEoo'@;
put 'eCxDLFQsSCxqKXt2YXIgRT14JlRefngmajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiByZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXn5DJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gaWUoeCxDLFQsSCxqKXt2YXIgRT14JlReeCZqXlQm'@;
put 'ajtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBsZSh4LEMsVCxILGosRSl7dmFyIG09QyZIXkMmRV5IJkU7cmV0dXJuIG08MCYmKG0rPTQyOTQ5NjcyOTYpLG19ZnVuY3Rpb24gbWUoeCxDKXt2YXIgRT1CKHgsQywyOCleQihDLHgsMileQihDLHgsNyk7cmV0dXJuIEU8'@;
put 'MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gX2UoeCxDKXt2YXIgRT13KHgsQywyOCledyhDLHgsMiledyhDLHgsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gVGUoeCxDKXt2YXIgRT1CKHgsQywxNCleQih4LEMsMTgpXkIoQyx4LDkpO3JldHVybiBFPDAm'@;
put 'JihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFNlKHgsQyl7dmFyIEU9dyh4LEMsMTQpXncoeCxDLDE4KV53KEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiB6ZSh4LEMpe3ZhciBFPUIoeCxDLDEpXkIoeCxDLDgpXlAoeCxDLDcpO3JldHVybiBFPDAmJihF'@;
put 'Kz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFYoeCxDKXt2YXIgRT13KHgsQywxKV53KHgsQyw4KV5GKHgsQyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBwKHgsQyl7dmFyIEU9Qih4LEMsMTkpXkIoQyx4LDI5KV5QKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5'@;
put 'NDk2NzI5NiksRX1mdW5jdGlvbiBiKHgsQyl7dmFyIEU9dyh4LEMsMTkpXncoQyx4LDI5KV5GKHgsQyw2KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1JLmluaGVyaXRzKGVlLFkpLHVlLmV4cG9ydHM9ZWUsZWUuYmxvY2tTaXplPTEwMjQsZWUub3V0U2l6ZT01MTIsZWUuaG1hY1N0'@;
put 'cmVuZ3RoPTE5MixlZS5wYWRMZW5ndGg9MTI4LGVlLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPXRoaXMuVyxqPTA7ajwzMjtqKyspSFtqXT1DW1Qral07Zm9yKDtqPEgubGVuZ3RoO2orPTIpe3ZhciBFPXAoSFtqLTRdLEhbai0zXSksbT1iKEhbai00'@;
put 'XSxIW2otM10pLEE9SFtqLTE0XSxvZT1IW2otMTNdLHRlPXplKEhbai0zMF0sSFtqLTI5XSksc2U9VihIW2otMzBdLEhbai0yOV0pLHdlPUhbai0zMl0sVWU9SFtqLTMxXTtIW2pdPUwoRSxtLEEsb2UsdGUsc2Usd2UsVWUpLEhbaisxXT1LKEUsbSxBLG9lLHRlLHNlLHdlLFVlKX19LGVlLnBy'@;
put 'b3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEMsVCl7dGhpcy5fcHJlcGFyZUJsb2NrKEMsVCk7dmFyIEg9dGhpcy5XLGo9dGhpcy5oWzBdLEU9dGhpcy5oWzFdLG09dGhpcy5oWzJdLEE9dGhpcy5oWzNdLG9lPXRoaXMuaFs0XSx0ZT10aGlzLmhbNV0sc2U9dGhpcy5oWzZdLHdlPXRoaXMuaFs3'@;
put 'XSxVZT10aGlzLmhbOF0sSmU9dGhpcy5oWzldLGF0PXRoaXMuaFsxMF0sTWU9dGhpcy5oWzExXSx2ZT10aGlzLmhbMTJdLFhlPXRoaXMuaFsxM10samU9dGhpcy5oWzE0XSxEZT10aGlzLmhbMTVdO2codGhpcy5rLmxlbmd0aD09PUgubGVuZ3RoKTtmb3IodmFyIEZlPTA7RmU8SC5sZW5ndGg7'@;
put 'RmUrPTIpe3ZhciBSZT1qZSxJZT1EZSxWZT1UZShVZSxKZSksa2U9U2UoVWUsSmUpLEFlPUooVWUsMCxhdCwwLHZlKSxfdD1yZSgwLEplLDAsTWUsMCxYZSksbnQ9dGhpcy5rW0ZlXSxRZT10aGlzLmtbRmUrMV0sdW49SFtGZV0seXQ9SFtGZSsxXSxNdD1VKFJlLEllLFZlLGtlLEFlLF90LG50'@;
put 'LFFlLHVuLHl0KSxEdD1XKFJlLEllLFZlLGtlLEFlLF90LG50LFFlLHVuLHl0KTtSZT1tZShqLEUpLEllPV9lKGosRSksVmU9aWUoaiwwLG0sMCxvZSksa2U9bGUoMCxFLDAsQSwwLHRlKTt2YXIgaXQ9eihSZSxJZSxWZSxrZSksJGU9TihSZSxJZSxWZSxrZSk7amU9dmUsRGU9WGUsdmU9YXQs'@;
put 'WGU9TWUsYXQ9VWUsTWU9SmUsVWU9eihzZSx3ZSxNdCxEdCksSmU9Tih3ZSx3ZSxNdCxEdCksc2U9b2Usd2U9dGUsb2U9bSx0ZT1BLG09aixBPUUsaj16KE10LER0LGl0LCRlKSxFPU4oTXQsRHQsaXQsJGUpfU8odGhpcy5oLDAsaixFKSxPKHRoaXMuaCwyLG0sQSksTyh0aGlzLmgsNCxvZSx0'@;
put 'ZSksTyh0aGlzLmgsNixzZSx3ZSksTyh0aGlzLmgsOCxVZSxKZSksTyh0aGlzLmgsMTAsYXQsTWUpLE8odGhpcy5oLDEyLHZlLFhlKSxPKHRoaXMuaCwxNCxqZSxEZSl9LGVlLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEMpe3JldHVybiJoZXgiPT09Qz9JLnRvSGV4MzIodGhpcy5oLCJi'@;
put 'aWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDcwMzg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIHk9Xyg2NDM2KS5yb3RyMzI7ZnVuY3Rpb24gQihMLEssVSl7cmV0dXJuIEwmS15+TCZVfWZ1bmN0aW9uIHcoTCxLLFUpe3JldHVybiBMJkteTCZVXksmVX1mdW5jdGlvbiBQKEws'@;
put 'SyxVKXtyZXR1cm4gTF5LXlV9cS5mdF8xPWZ1bmN0aW9uIGcoTCxLLFUsVyl7cmV0dXJuIDA9PT1MP0IoSyxVLFcpOjE9PT1MfHwzPT09TD9QKEssVSxXKToyPT09TD93KEssVSxXKTp2b2lkIDB9LHEuY2gzMj1CLHEubWFqMzI9dyxxLnAzMj1QLHEuczBfMjU2PWZ1bmN0aW9uIEYoTCl7cmV0'@;
put 'dXJuIHkoTCwyKV55KEwsMTMpXnkoTCwyMil9LHEuczFfMjU2PWZ1bmN0aW9uIE8oTCl7cmV0dXJuIHkoTCw2KV55KEwsMTEpXnkoTCwyNSl9LHEuZzBfMjU2PWZ1bmN0aW9uIHooTCl7cmV0dXJuIHkoTCw3KV55KEwsMTgpXkw+Pj4zfSxxLmcxXzI1Nj1mdW5jdGlvbiBOKEwpe3JldHVybiB5'@;
put 'KEwsMTcpXnkoTCwxOSleTD4+PjEwfX0sNjQzNjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk3NDYpLHk9Xyg1NzE3KTtmdW5jdGlvbiBnKGIseCl7cmV0dXJuISg1NTI5NiE9KDY0NTEyJmIuY2hhckNvZGVBdCh4KSl8fHg8MHx8eCsxPj1iLmxlbmd0aCkmJjU2MzIwPT0oNjQ1'@;
put 'MTImYi5jaGFyQ29kZUF0KHgrMSkpfWZ1bmN0aW9uIFAoYil7cmV0dXJuKGI+Pj4yNHxiPj4+OCY2NTI4MHxiPDw4JjE2NzExNjgwfCgyNTUmYik8PDI0KT4+PjB9ZnVuY3Rpb24gTyhiKXtyZXR1cm4gMT09PWIubGVuZ3RoPyIwIitiOmJ9ZnVuY3Rpb24geihiKXtyZXR1cm4gNz09PWIubGVu'@;
put 'Z3RoPyIwIitiOjY9PT1iLmxlbmd0aD8iMDAiK2I6NT09PWIubGVuZ3RoPyIwMDAiK2I6ND09PWIubGVuZ3RoPyIwMDAwIitiOjM9PT1iLmxlbmd0aD8iMDAwMDAiK2I6Mj09PWIubGVuZ3RoPyIwMDAwMDAiK2I6MT09PWIubGVuZ3RoPyIwMDAwMDAwIitiOmJ9cS5pbmhlcml0cz15LHEudG9B'@;
put 'cnJheT1mdW5jdGlvbiBCKGIseCl7aWYoQXJyYXkuaXNBcnJheShiKSlyZXR1cm4gYi5zbGljZSgpO2lmKCFiKXJldHVybltdO3ZhciBDPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgYilpZih4KXtpZigiaGV4Ij09PXgpZm9yKChiPWIucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0'@;
put 'aCUyIT0wJiYoYj0iMCIrYiksSD0wO0g8Yi5sZW5ndGg7SCs9MilDLnB1c2gocGFyc2VJbnQoYltIXStiW0grMV0sMTYpKX1lbHNlIGZvcih2YXIgVD0wLEg9MDtIPGIubGVuZ3RoO0grKyl7dmFyIGo9Yi5jaGFyQ29kZUF0KEgpO2o8MTI4P0NbVCsrXT1qOmo8MjA0OD8oQ1tUKytdPWo+PjZ8'@;
put 'MTkyLENbVCsrXT02MyZqfDEyOCk6ZyhiLEgpPyhqPTY1NTM2KygoMTAyMyZqKTw8MTApKygxMDIzJmIuY2hhckNvZGVBdCgrK0gpKSxDW1QrK109aj4+MTh8MjQwLENbVCsrXT1qPj4xMiY2M3wxMjgsQ1tUKytdPWo+PjYmNjN8MTI4LENbVCsrXT02MyZqfDEyOCk6KENbVCsrXT1qPj4xMnwy'@;
put 'MjQsQ1tUKytdPWo+PjYmNjN8MTI4LENbVCsrXT02MyZqfDEyOCl9ZWxzZSBmb3IoSD0wO0g8Yi5sZW5ndGg7SCsrKUNbSF09MHxiW0hdO3JldHVybiBDfSxxLnRvSGV4PWZ1bmN0aW9uIHcoYil7Zm9yKHZhciB4PSIiLEM9MDtDPGIubGVuZ3RoO0MrKyl4Kz1PKGJbQ10udG9TdHJpbmcoMTYp'@;
put 'KTtyZXR1cm4geH0scS5odG9ubD1QLHEudG9IZXgzMj1mdW5jdGlvbiBGKGIseCl7Zm9yKHZhciBDPSIiLFQ9MDtUPGIubGVuZ3RoO1QrKyl7dmFyIEg9YltUXTsibGl0dGxlIj09PXgmJihIPVAoSCkpLEMrPXooSC50b1N0cmluZygxNikpfXJldHVybiBDfSxxLnplcm8yPU8scS56ZXJvOD16'@;
put 'LHEuam9pbjMyPWZ1bmN0aW9uIE4oYix4LEMsVCl7dmFyIEg9Qy14O0koSCU0PT0wKTtmb3IodmFyIGo9bmV3IEFycmF5KEgvNCksRT0wLG09eDtFPGoubGVuZ3RoO0UrKyxtKz00KWpbRV09KCJiaWciPT09VD9iW21dPDwyNHxiW20rMV08PDE2fGJbbSsyXTw8OHxiW20rM106YlttKzNdPDwy'@;
put 'NHxiW20rMl08PDE2fGJbbSsxXTw8OHxiW21dKT4+PjA7cmV0dXJuIGp9LHEuc3BsaXQzMj1mdW5jdGlvbiBMKGIseCl7Zm9yKHZhciBDPW5ldyBBcnJheSg0KmIubGVuZ3RoKSxUPTAsSD0wO1Q8Yi5sZW5ndGg7VCsrLEgrPTQpe3ZhciBqPWJbVF07ImJpZyI9PT14PyhDW0hdPWo+Pj4yNCxD'@;
put 'W0grMV09aj4+PjE2JjI1NSxDW0grMl09aj4+PjgmMjU1LENbSCszXT0yNTUmaik6KENbSCszXT1qPj4+MjQsQ1tIKzJdPWo+Pj4xNiYyNTUsQ1tIKzFdPWo+Pj44JjI1NSxDW0hdPTI1NSZqKX1yZXR1cm4gQ30scS5yb3RyMzI9ZnVuY3Rpb24gSyhiLHgpe3JldHVybiBiPj4+eHxiPDwzMi14'@;
put 'fSxxLnJvdGwzMj1mdW5jdGlvbiBVKGIseCl7cmV0dXJuIGI8PHh8Yj4+PjMyLXh9LHEuc3VtMzI9ZnVuY3Rpb24gVyhiLHgpe3JldHVybiBiK3g+Pj4wfSxxLnN1bTMyXzM9ZnVuY3Rpb24gWShiLHgsQyl7cmV0dXJuIGIreCtDPj4+MH0scS5zdW0zMl80PWZ1bmN0aW9uIFgoYix4LEMsVCl7'@;
put 'cmV0dXJuIGIreCtDK1Q+Pj4wfSxxLnN1bTMyXzU9ZnVuY3Rpb24gZWUoYix4LEMsVCxIKXtyZXR1cm4gYit4K0MrVCtIPj4+MH0scS5zdW02ND1mdW5jdGlvbiBKKGIseCxDLFQpe3ZhciBFPVQrYlt4KzFdPj4+MDtiW3hdPShFPFQ/MTowKStDK2JbeF0+Pj4wLGJbeCsxXT1FfSxxLnN1bTY0'@;
put 'X2hpPWZ1bmN0aW9uIHJlKGIseCxDLFQpe3JldHVybih4K1Q+Pj4wPHg/MTowKStiK0M+Pj4wfSxxLnN1bTY0X2xvPWZ1bmN0aW9uIGllKGIseCxDLFQpe3JldHVybiB4K1Q+Pj4wfSxxLnN1bTY0XzRfaGk9ZnVuY3Rpb24gbGUoYix4LEMsVCxILGosRSxtKXt2YXIgQT0wLG9lPXg7cmV0dXJu'@;
put 'IEErPShvZT1vZStUPj4+MCk8eD8xOjAsQSs9KG9lPW9lK2o+Pj4wKTxqPzE6MCxiK0MrSCtFKyhBKz0ob2U9b2UrbT4+PjApPG0/MTowKT4+PjB9LHEuc3VtNjRfNF9sbz1mdW5jdGlvbiBtZShiLHgsQyxULEgsaixFLG0pe3JldHVybiB4K1QraittPj4+MH0scS5zdW02NF81X2hpPWZ1bmN0'@;
put 'aW9uIF9lKGIseCxDLFQsSCxqLEUsbSxBLG9lKXt2YXIgdGU9MCxzZT14O3JldHVybiB0ZSs9KHNlPXNlK1Q+Pj4wKTx4PzE6MCx0ZSs9KHNlPXNlK2o+Pj4wKTxqPzE6MCx0ZSs9KHNlPXNlK20+Pj4wKTxtPzE6MCxiK0MrSCtFK0ErKHRlKz0oc2U9c2Urb2U+Pj4wKTxvZT8xOjApPj4+MH0s'@;
put 'cS5zdW02NF81X2xvPWZ1bmN0aW9uIFRlKGIseCxDLFQsSCxqLEUsbSxBLG9lKXtyZXR1cm4geCtUK2orbStvZT4+PjB9LHEucm90cjY0X2hpPWZ1bmN0aW9uIFNlKGIseCxDKXtyZXR1cm4oeDw8MzItQ3xiPj4+Qyk+Pj4wfSxxLnJvdHI2NF9sbz1mdW5jdGlvbiB6ZShiLHgsQyl7cmV0dXJu'@;
put 'KGI8PDMyLUN8eD4+PkMpPj4+MH0scS5zaHI2NF9oaT1mdW5jdGlvbiBWKGIseCxDKXtyZXR1cm4gYj4+PkN9LHEuc2hyNjRfbG89ZnVuY3Rpb24gcChiLHgsQyl7cmV0dXJuKGI8PDMyLUN8eD4+PkMpPj4+MH19LDg4MjQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9RnVuY3Rpb24u'@;
put 'cHJvdG90eXBlLmNhbGwseT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGc9Xyg4NjEyKTt1ZS5leHBvcnRzPWcuY2FsbChJLHkpfSwyMTU2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzcxNSkseT1fKDQ1MDQpLGc9Xyg5NzQ2KTtmdW5jdGlvbiBCKHcpe2lmKCEo'@;
put 'dGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQih3KTt0aGlzLmhhc2g9dy5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIXcucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dy5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3Ro'@;
put 'LHRoaXMuX3Jlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgUD15LnRvQXJyYXkody5lbnRyb3B5LHcuZW50cm9weUVuY3x8ImhleCIpLEY9eS50b0FycmF5KHcubm9uY2Usdy5ub25jZUVuY3x8ImhleCIpLE89eS50b0FycmF5'@;
put 'KHcucGVycyx3LnBlcnNFbmN8fCJoZXgiKTtnKFAubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiAiK3RoaXMubWluRW50cm9weSsiIGJpdHMiKSx0aGlzLl9pbml0KFAsRixPKX11ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuX2luaXQ9'@;
put 'ZnVuY3Rpb24oUCxGLE8pe3ZhciB6PVAuY29uY2F0KEYpLmNvbmNhdChPKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBOPTA7Tjx0aGlzLlYubGVuZ3RoO04rKyl0aGlzLktbTl09MCx0aGlzLlZbTl09MTt0'@;
put 'aGlzLl91cGRhdGUoeiksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LEIucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBJLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oUCl7'@;
put 'dmFyIEY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO1AmJihGPUYudXBkYXRlKFApKSx0aGlzLks9Ri5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLFAmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYp'@;
put 'LnVwZGF0ZShbMV0pLnVwZGF0ZShQKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sQi5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKFAsRixPLHopeyJzdHJpbmciIT10eXBlb2YgRiYmKHo9TyxPPUYsRj1udWxsKSxQPXkudG9BcnJheShQ'@;
put 'LEYpLE89eS50b0FycmF5KE8seiksZyhQLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5fdXBkYXRlKFAuY29uY2F0KE98fFtdKSksdGhpcy5fcmVzZWVkPTF9LEIucHJvdG90'@;
put 'eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKFAsRixPLHope2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBGJiYoej1PLE89RixGPW51bGwpLE8mJihPPXkudG9BcnJheShPLHp8fCJo'@;
put 'ZXgiKSx0aGlzLl91cGRhdGUoTykpO2Zvcih2YXIgTj1bXTtOLmxlbmd0aDxQOyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLE49Ti5jb25jYXQodGhpcy5WKTt2YXIgTD1OLnNsaWNlKDAsUCk7cmV0dXJuIHRoaXMuX3VwZGF0ZShPKSx0aGlzLl9yZXNlZWQr'@;
put 'Kyx5LmVuY29kZShMLEYpfX0sNjQ1Oih1ZSxxKT0+e3EucmVhZD1mdW5jdGlvbihfLEkseSxnLEIpe3ZhciB3LFAsRj04KkItZy0xLE89KDE8PEYpLTEsej1PPj4xLE49LTcsTD15P0ItMTowLEs9eT8tMToxLFU9X1tJK0xdO2ZvcihMKz1LLHc9VSYoMTw8LU4pLTEsVT4+PS1OLE4rPUY7Tj4w'@;
put 'O3c9MjU2KncrX1tJK0xdLEwrPUssTi09OCk7Zm9yKFA9dyYoMTw8LU4pLTEsdz4+PS1OLE4rPWc7Tj4wO1A9MjU2KlArX1tJK0xdLEwrPUssTi09OCk7aWYoMD09PXcpdz0xLXo7ZWxzZXtpZih3PT09TylyZXR1cm4gUD9OYU46MS8wKihVPy0xOjEpO1ArPU1hdGgucG93KDIsZyksdy09en1y'@;
put 'ZXR1cm4oVT8tMToxKSpQKk1hdGgucG93KDIsdy1nKX0scS53cml0ZT1mdW5jdGlvbihfLEkseSxnLEIsdyl7dmFyIFAsRixPLHo9OCp3LUItMSxOPSgxPDx6KS0xLEw9Tj4+MSxLPTIzPT09Qj9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsVT1nPzA6dy0xLFc9Zz8xOi0xLFk9'@;
put 'STwwfHwwPT09SSYmMS9JPDA/MTowO2ZvcihJPU1hdGguYWJzKEkpLGlzTmFOKEkpfHxJPT09MS8wPyhGPWlzTmFOKEkpPzE6MCxQPU4pOihQPU1hdGguZmxvb3IoTWF0aC5sb2coSSkvTWF0aC5MTjIpLEkqKE89TWF0aC5wb3coMiwtUCkpPDEmJihQLS0sTyo9MiksKEkrPVArTD49MT9LL086'@;
put 'SypNYXRoLnBvdygyLDEtTCkpKk8+PTImJihQKyssTy89MiksUCtMPj1OPyhGPTAsUD1OKTpQK0w+PTE/KEY9KEkqTy0xKSpNYXRoLnBvdygyLEIpLFArPUwpOihGPUkqTWF0aC5wb3coMixMLTEpKk1hdGgucG93KDIsQiksUD0wKSk7Qj49ODtfW3krVV09MjU1JkYsVSs9VyxGLz0yNTYsQi09'@;
put 'OCk7Zm9yKFA9UDw8QnxGLHorPUI7ej4wO19beStVXT0yNTUmUCxVKz1XLFAvPTI1Nix6LT04KTtfW3krVS1XXXw9MTI4Kll9fSw1NzE3OnVlPT57dWUuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihfLEkpe0kmJihfLnN1cGVyXz1JLF8ucHJvdG90'@;
put 'eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpfLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pKX06ZnVuY3Rpb24oXyxJKXtpZihJKXtfLnN1cGVyXz1JO3ZhciB5PWZ1bmN0aW9uKCl7fTt5LnByb3RvdHlwZT1JLnBy'@;
put 'b3RvdHlwZSxfLnByb3RvdHlwZT1uZXcgeSxfLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1ffX19LDI1ODQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg2NDEwKSgpLGc9Xyg3Mzc5KSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEI9ZnVuY3Rpb24oTyl7cmV0dXJuIShJJiZP'@;
put 'JiYib2JqZWN0Ij09dHlwZW9mIE8mJlN5bWJvbC50b1N0cmluZ1RhZyBpbiBPKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PT1nKE8pfSx3PWZ1bmN0aW9uKE8pe3JldHVybiEhQihPKXx8bnVsbCE9PU8mJiJvYmplY3QiPT10eXBlb2YgTyYmImxlbmd0aCJpbiBPJiYibnVtYmVyIj09dHlwZW9m'@;
put 'IE8ubGVuZ3RoJiZPLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIiE9PWcoTykmJiJjYWxsZWUiaW4gTyYmIltvYmplY3QgRnVuY3Rpb25dIj09PWcoTy5jYWxsZWUpfSxQPWZ1bmN0aW9uKCl7cmV0dXJuIEIoYXJndW1lbnRzKX0oKTtCLmlzTGVnYWN5QXJndW1lbnRzPXcsdWUuZXhwb3J0'@;
put 'cz1QP0I6d30sNTMyMDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSx5LHE9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLF89Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZudWxsIT09UmVmbGVjdCYmUmVmbGVjdC5hcHBseTtpZigiZnVuY3Rpb24iPT10eXBlb2YgXyYmImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7ST1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImxlbmd0aCIse2dldDpmdW5jdGlvbigpe3Rocm93IHl9fSkseT17fSxfKGZ1bmN0aW9uKCl7dGhyb3cgNDJ9LG51bGwsSSl9Y2F0Y2goZWUpe2VlIT09eSYmKF89bnVsbCl9ZWxzZSBf'@;
put 'PW51bGw7dmFyIGc9L15ccypjbGFzc1xiLyxCPWZ1bmN0aW9uKEope3RyeXt2YXIgcmU9cS5jYWxsKEopO3JldHVybiBnLnRlc3QocmUpfWNhdGNoe3JldHVybiExfX0sdz1mdW5jdGlvbihKKXt0cnl7cmV0dXJuIUIoSikmJihxLmNhbGwoSiksITApfWNhdGNoe3JldHVybiExfX0sUD1PYmpl'@;
put 'Y3QucHJvdG90eXBlLnRvU3RyaW5nLFU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdUYWcsVz0hKDAgaW5bLF0pLFk9ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIFg9ZG9jdW1lbnQuYWxsO1AuY2FsbChY'@;
put 'KT09PVAuY2FsbChkb2N1bWVudC5hbGwpJiYoWT1mdW5jdGlvbihKKXtpZigoV3x8IUopJiYodHlwZW9mIEo+InUifHwib2JqZWN0Ij09dHlwZW9mIEopKXRyeXt2YXIgcmU9UC5jYWxsKEopO3JldHVybigiW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0iPT09cmV8fCJbb2JqZWN0IEhUTUwg'@;
put 'ZG9jdW1lbnQuYWxsIGNsYXNzXSI9PT1yZXx8IltvYmplY3QgSFRNTENvbGxlY3Rpb25dIj09PXJlfHwiW29iamVjdCBPYmplY3RdIj09PXJlKSYmbnVsbD09SigiIil9Y2F0Y2h7fXJldHVybiExfSl9dWUuZXhwb3J0cz1fP2Z1bmN0aW9uKEope2lmKFkoSikpcmV0dXJuITA7aWYoIUp8fCJm'@;
put 'dW5jdGlvbiIhPXR5cGVvZiBKJiYib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7dHJ5e18oSixudWxsLEkpfWNhdGNoKHJlKXtpZihyZSE9PXkpcmV0dXJuITF9cmV0dXJuIUIoSikmJncoSil9OmZ1bmN0aW9uKEope2lmKFkoSikpcmV0dXJuITA7aWYoIUp8fCJmdW5jdGlvbiIhPXR5cGVv'@;
put 'ZiBKJiYib2JqZWN0IiE9dHlwZW9mIEopcmV0dXJuITE7aWYoVSlyZXR1cm4gdyhKKTtpZihCKEopKXJldHVybiExO3ZhciByZT1QLmNhbGwoSik7cmV0dXJuISgiW29iamVjdCBGdW5jdGlvbl0iIT09cmUmJiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1yZSYmIS9eXFtvYmplY3Qg'@;
put 'SFRNTC8udGVzdChyZSkpJiZ3KEopfX0sODY2MjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeixJPV8oNzM3OSksZz1fKDkyNDYpKC9eXHMqKD86ZnVuY3Rpb24pP1wqLyksQj1fKDY0MTApKCksdz1fKDE2MTgpLFA9SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEY9SSgiRnVu'@;
put 'Y3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nIik7dWUuZXhwb3J0cz1mdW5jdGlvbihMKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgTClyZXR1cm4hMTtpZihnKEYoTCkpKXJldHVybiEwO2lmKCFCKXJldHVybiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PT1QKEwpO2lmKCF3KXJldHVybiEx'@;
put 'O2lmKHR5cGVvZiB6PiJ1Iil7dmFyIFU9ZnVuY3Rpb24oKXtpZighQilyZXR1cm4hMTt0cnl7cmV0dXJuIEZ1bmN0aW9uKCJyZXR1cm4gZnVuY3Rpb24qKCkge30iKSgpfWNhdGNoe319KCk7ej0hIVUmJncoVSl9cmV0dXJuIHcoTCk9PT16fX0sODYxMTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5l'@;
put 'eHBvcnRzPWZ1bmN0aW9uKF8pe3JldHVybiBfIT1ffX0sMzYwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTU1OSkseT1fKDQyODkpLGc9Xyg4NjExKSxCPV8oOTQxNSksdz1fKDMxOTQpLFA9SShCKCksTnVtYmVyKTt5KFAse2dldFBvbHlmaWxsOkIsaW1wbGVtZW50YXRpb246'@;
put 'ZyxzaGltOnd9KSx1ZS5leHBvcnRzPVB9LDk0MTU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg4NjExKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05hTiYmTnVtYmVyLmlzTmFOKE5hTikmJiFOdW1iZXIuaXNOYU4oImEiKT9OdW1iZXIuaXNOYU46SX19'@;
put 'LDMxOTQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0Mjg5KSx5PV8oOTQxNSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBCPXkoKTtyZXR1cm4gSShOdW1iZXIse2lzTmFOOkJ9LHtpc05hTjpmdW5jdGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4hPT1CfX0pLEJ9fSw4NDIw'@;
put 'Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciB3LEk9Xyg3Mzc5KSx5PV8oNjQxMCkoKSxnPV8oODgyNCksQj1fKDcyOTYpO2lmKHkpe3ZhciBQPUkoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLEY9e30sTz1mdW5jdGlvbigpe3Rocm93IEZ9LHo9e3RvU3RyaW5nOk8sdmFsdWVPZjpPfTsi'@;
put 'c3ltYm9sIj09dHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZSYmKHpbU3ltYm9sLnRvUHJpbWl0aXZlXT1PKSx3PWZ1bmN0aW9uKFUpe2lmKCFVfHwib2JqZWN0IiE9dHlwZW9mIFUpcmV0dXJuITE7dmFyIFc9QihVLCJsYXN0SW5kZXgiKTtpZighV3x8IWcoVywidmFsdWUiKSlyZXR1cm4hMTt0'@;
put 'cnl7UChVLHopfWNhdGNoKFgpe3JldHVybiBYPT09Rn19fWVsc2V7dmFyIE49SSgiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpO3c9ZnVuY3Rpb24oVSl7cmV0dXJuISghVXx8Im9iamVjdCIhPXR5cGVvZiBVJiYiZnVuY3Rpb24iIT10eXBlb2YgVSkmJiJbb2JqZWN0IFJlZ0V4cF0iPT09'@;
put 'TihVKX19dWUuZXhwb3J0cz13fSw1NjkyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNjQzMCk7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtyZXR1cm4hIUkoZyl9fSw1ODI2OnVlPT57dmFyIHE9e30udG9TdHJpbmc7dWUuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihf'@;
put 'KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1xLmNhbGwoXyl9fSw2ODEzOih1ZSxxLF8pPT57bGV0IEk7dHJ5e0k9Xyg3Nyl9Y2F0Y2h7ST1fKDQxMjkpfWNvbnN0IHk9Xyg4OTgxKSx7c3RyaW5naWZ5Omcsc3RyaXBCb206Qn09Xyg2NzgwKTtmdW5jdGlvbiBQKCl7cmV0dXJuKFA9X2FzeW5j'@;
put 'VG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWT17fSl7InN0cmluZyI9PXR5cGVvZiBZJiYoWT17ZW5jb2Rpbmc6WX0pO2NvbnN0IFg9WS5mc3x8SSxlZT0hKCJ0aHJvd3MiaW4gWSl8fFkudGhyb3dzO2xldCByZSxKPXlpZWxkIHkuZnJvbUNhbGxiYWNrKFgucmVhZEZpbGUpKFcsWSk7Sj1CKEop'@;
put 'O3RyeXtyZT1KU09OLnBhcnNlKEosWT9ZLnJldml2ZXI6bnVsbCl9Y2F0Y2goaWUpe2lmKGVlKXRocm93IGllLm1lc3NhZ2U9YCR7V306ICR7aWUubWVzc2FnZX1gLGllO3JldHVybiBudWxsfXJldHVybiByZX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgRj15LmZyb21Qcm9taXNl'@;
put 'KGZ1bmN0aW9uIHcoVyl7cmV0dXJuIFAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7ZnVuY3Rpb24gTigpe3JldHVybihOPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFksWD17fSl7Y29uc3QgZWU9WC5mc3x8SSxKPWcoWSxYKTt5aWVsZCB5LmZyb21DYWxsYmFjayhlZS53cml0ZUZp'@;
put 'bGUpKFcsSixYKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9Y29uc3QgTD15LmZyb21Qcm9taXNlKGZ1bmN0aW9uIHooVyxZKXtyZXR1cm4gTi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTt1ZS5leHBvcnRzPXtyZWFkRmlsZTpGLHJlYWRGaWxlU3luYzpmdW5jdGlvbiBPKFcsWT17fSl7InN0'@;
put 'cmluZyI9PXR5cGVvZiBZJiYoWT17ZW5jb2Rpbmc6WX0pO2NvbnN0IFg9WS5mc3x8SSxlZT0hKCJ0aHJvd3MiaW4gWSl8fFkudGhyb3dzO3RyeXtsZXQgSj1YLnJlYWRGaWxlU3luYyhXLFkpO3JldHVybiBKPUIoSiksSlNPTi5wYXJzZShKLFkucmV2aXZlcil9Y2F0Y2goSil7aWYoZWUpdGhy'@;
put 'b3cgSi5tZXNzYWdlPWAke1d9OiAke0oubWVzc2FnZX1gLEo7cmV0dXJuIG51bGx9fSx3cml0ZUZpbGU6TCx3cml0ZUZpbGVTeW5jOmZ1bmN0aW9uIEsoVyxZLFg9e30pe2NvbnN0IGVlPVguZnN8fEksSj1nKFksWCk7cmV0dXJuIGVlLndyaXRlRmlsZVN5bmMoVyxKLFgpfX19LDY3ODA6KHVl'@;
put 'LHEsXyk9Pnt2YXIgST1fKDg3NjQpLkJ1ZmZlcjt1ZS5leHBvcnRzPXtzdHJpbmdpZnk6ZnVuY3Rpb24geShCLHtFT0w6dz0iXG4iLGZpbmFsRU9MOlA9ITAscmVwbGFjZXI6Rj1udWxsLHNwYWNlczpPfT17fSl7Y29uc3Qgej1QP3c6IiI7cmV0dXJuIEpTT04uc3RyaW5naWZ5KEIsRixPKS5y'@;
put 'ZXBsYWNlKC9cbi9nLHcpK3p9LHN0cmlwQm9tOmZ1bmN0aW9uIGcoQil7cmV0dXJuIEkuaXNCdWZmZXIoQikmJihCPUIudG9TdHJpbmcoInV0ZjgiKSksQi5yZXBsYWNlKC9eXHVGRUZGLywiIil9fX0sNjI0NToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKEYpe3RoaXMubWVz'@;
put 'c2FnZT1GfV8ucihxKSxfLmQocSx7SW52YWxpZFRva2VuRXJyb3I6KCk9PkIsZGVmYXVsdDooKT0+UH0pLChJLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRDaGFyYWN0ZXJFcnJvciI7dmFyIHk9dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5hdG9iJiZ3aW5kb3cuYXRvYi5i'@;
put 'aW5kKHdpbmRvdyl8fGZ1bmN0aW9uKEYpe3ZhciBPPVN0cmluZyhGKS5yZXBsYWNlKC89KyQvLCIiKTtpZihPLmxlbmd0aCU0PT0xKXRocm93IG5ldyBJKCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLiIpO2Zvcih2YXIg'@;
put 'eixOLEw9MCxLPTAsVT0iIjtOPU8uY2hhckF0KEsrKyk7fk4mJih6PUwlND82NCp6K046TixMKyslNCk/VSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmej4+KC0yKkwmNikpOjApTj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3'@;
put 'ODkrLz0iLmluZGV4T2YoTik7cmV0dXJuIFV9O2Z1bmN0aW9uIEIoRil7dGhpcy5tZXNzYWdlPUZ9KEIucHJvdG90eXBlPW5ldyBFcnJvcikubmFtZT0iSW52YWxpZFRva2VuRXJyb3IiO2NvbnN0IFA9ZnVuY3Rpb24gdyhGLE8pe2lmKCJzdHJpbmciIT10eXBlb2YgRil0aHJvdyBuZXcgQigi'@;
put 'SW52YWxpZCB0b2tlbiBzcGVjaWZpZWQiKTt2YXIgej0hMD09PShPPU98fHt9KS5oZWFkZXI/MDoxO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShmdW5jdGlvbiBnKEYpe3ZhciBPPUYucmVwbGFjZSgvLS9nLCIrIikucmVwbGFjZSgvXy9nLCIvIik7c3dpdGNoKE8ubGVuZ3RoJTQpe2Nhc2UgMDpi'@;
put 'cmVhaztjYXNlIDI6Tys9Ij09IjticmVhaztjYXNlIDM6Tys9Ij0iO2JyZWFrO2RlZmF1bHQ6dGhyb3ciSWxsZWdhbCBiYXNlNjR1cmwgc3RyaW5nISJ9dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoeShPKS5yZXBsYWNlKC8oLikvZyxmdW5jdGlvbihOLEwpe3ZhciBLPUwuY2hhckNv'@;
put 'ZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtyZXR1cm4gSy5sZW5ndGg8MiYmKEs9IjAiK0spLCIlIitLfSkpfWNhdGNoe3JldHVybiB5KE8pfX0oRi5zcGxpdCgiLiIpW3pdKSl9Y2F0Y2goTil7dGhyb3cgbmV3IEIoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkOiAiK04ubWVz'@;
put 'c2FnZSl9fX0sMTY1ODoodWUscSxfKT0+e3ZhciBnPS9bXFxeJC4qKz8oKVtcXXt9fF0vZyxCPVJlZ0V4cChnLnNvdXJjZSksUD0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLEY9Im9iamVjdCI9PXR5cGVvZiBfLmcmJl8uZyYmXy5nLk9i'@;
put 'amVjdD09PU9iamVjdCYmXy5nfHxQfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLHo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxOPUYuU3ltYm9sLEw9Tj9OLnByb3RvdHlwZTp2b2lkIDAsSz1MP0wudG9TdHJpbmc6dm9pZCAwO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZWUoSil7cmV0dXJu'@;
put 'KEo9ZnVuY3Rpb24gWChKKXtyZXR1cm4gbnVsbD09Sj8iIjpmdW5jdGlvbiBVKEope2lmKCJzdHJpbmciPT10eXBlb2YgSilyZXR1cm4gSjtpZihmdW5jdGlvbiBZKEope3JldHVybiJzeW1ib2wiPT10eXBlb2YgSnx8ZnVuY3Rpb24gVyhKKXtyZXR1cm4hIUomJiJvYmplY3QiPT10eXBlb2Yg'@;
put 'Sn0oSikmJiJbb2JqZWN0IFN5bWJvbF0iPT16LmNhbGwoSil9KEopKXJldHVybiBLP0suY2FsbChKKToiIjt2YXIgcmU9SisiIjtyZXR1cm4iMCI9PXJlJiYxL0o9PS0xLzA/Ii0wIjpyZX0oSil9KEopKSYmQi50ZXN0KEopP0oucmVwbGFjZShnLCJcXCQmIik6Sn19LDgwOTQ6dWU9Pnt2YXIg'@;
put 'ST1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3VlLmV4cG9ydHM9ZnVuY3Rpb24geShCKXtyZXR1cm4hMD09PUJ8fCExPT09Qnx8ZnVuY3Rpb24gZyhCKXtyZXR1cm4hIUImJiJvYmplY3QiPT10eXBlb2YgQn0oQikmJiJbb2JqZWN0IEJvb2xlYW5dIj09SS5jYWxsKEIpfX0sMjMwNzoodWUs'@;
put 'cSxfKT0+e3VlPV8ubm1kKHVlKTt2YXIgeT0iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyIsZz0xLEI9Mix3PTkwMDcxOTkyNTQ3NDA5OTEsUD0iW29iamVjdCBBcmd1bWVudHNdIixGPSJbb2JqZWN0IEFycmF5XSIsTz0iW29iamVjdCBBc3luY0Z1bmN0aW9uXSIsej0iW29iamVjdCBCb29s'@;
put 'ZWFuXSIsTj0iW29iamVjdCBEYXRlXSIsTD0iW29iamVjdCBFcnJvcl0iLEs9IltvYmplY3QgRnVuY3Rpb25dIixVPSJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIsVz0iW29iamVjdCBNYXBdIixZPSJbb2JqZWN0IE51bWJlcl0iLFg9IltvYmplY3QgTnVsbF0iLGVlPSJbb2JqZWN0IE9i'@;
put 'amVjdF0iLEo9IltvYmplY3QgUHJvbWlzZV0iLHJlPSJbb2JqZWN0IFByb3h5XSIsaWU9IltvYmplY3QgUmVnRXhwXSIsbGU9IltvYmplY3QgU2V0XSIsbWU9IltvYmplY3QgU3RyaW5nXSIsVGU9IltvYmplY3QgVW5kZWZpbmVkXSIsU2U9IltvYmplY3QgV2Vha01hcF0iLHplPSJbb2JqZWN0'@;
put 'IEFycmF5QnVmZmVyXSIsVj0iW29iamVjdCBEYXRhVmlld10iLG9lPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLHRlPS9eKD86MHxbMS05XVxkKikkLyxzZT17fTtzZVsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09c2VbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPXNlWyJbb2JqZWN0'@;
put 'IEludDhBcnJheV0iXT1zZVsiW29iamVjdCBJbnQxNkFycmF5XSJdPXNlWyJbb2JqZWN0IEludDMyQXJyYXldIl09c2VbIltvYmplY3QgVWludDhBcnJheV0iXT1zZVsiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1zZVsiW29iamVjdCBVaW50MTZBcnJheV0iXT1zZVsiW29iamVjdCBV'@;
put 'aW50MzJBcnJheV0iXT0hMCxzZVtQXT1zZVtGXT1zZVt6ZV09c2Vbel09c2VbVl09c2VbTl09c2VbTF09c2VbS109c2VbV109c2VbWV09c2VbZWVdPXNlW2llXT1zZVtsZV09c2VbbWVdPXNlW1NlXT0hMTt2YXIgd2U9Im9iamVjdCI9PXR5cGVvZiBfLmcmJl8uZyYmXy5nLk9iamVjdD09PU9i'@;
put 'amVjdCYmXy5nLFVlPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGYsSmU9d2V8fFVlfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGF0PXEmJiFxLm5vZGVUeXBlJiZxLE1lPWF0JiZ1ZSYmIXVlLm5vZGVUeXBlJiZ1ZSx2ZT1NZSYmTWUu'@;
put 'ZXhwb3J0cz09PWF0LFhlPXZlJiZ3ZS5wcm9jZXNzLGplPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBYZSYmWGUuYmluZGluZyYmWGUuYmluZGluZygidXRpbCIpfWNhdGNoe319KCksRGU9amUmJmplLmlzVHlwZWRBcnJheTtmdW5jdGlvbiBJZShBbixvbil7Zm9yKHZhciBtaT0tMSxBcj1udWxs'@;
put 'PT1Bbj8wOkFuLmxlbmd0aDsrK21pPEFyOylpZihvbihBblttaV0sbWksQW4pKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEFlKEFuLG9uKXtyZXR1cm4gQW4uaGFzKG9uKX1mdW5jdGlvbiBudChBbil7dmFyIG9uPS0xLG1pPUFycmF5KEFuLnNpemUpO3JldHVybiBBbi5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKEFyLFBhKXttaVsrK29uXT1bUGEsQXJdfSksbWl9ZnVuY3Rpb24gdW4oQW4pe3ZhciBvbj0tMSxtaT1BcnJheShBbi5zaXplKTtyZXR1cm4gQW4uZm9yRWFjaChmdW5jdGlvbihBcil7bWlbKytvbl09QXJ9KSxtaX12YXIgQW4seXQ9QXJyYXkucHJvdG90eXBlLER0PU9iamVjdC5w'@;
put 'cm90b3R5cGUsaXQ9SmVbIl9fY29yZS1qc19zaGFyZWRfXyJdLCRlPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyx0dD1EdC5oYXNPd25Qcm9wZXJ0eSxIZT0oQW49L1teLl0rJC8uZXhlYyhpdCYmaXQua2V5cyYmaXQua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK0Fu'@;
put 'OiIiLHV0PUR0LnRvU3RyaW5nLHF0PVJlZ0V4cCgiXiIrJGUuY2FsbCh0dCkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxdL2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIiksUnQ9'@;
put 'dmU/SmUuQnVmZmVyOnZvaWQgMCxQdD1KZS5TeW1ib2wsc2k9SmUuVWludDhBcnJheSxRdD1EdC5wcm9wZXJ0eUlzRW51bWVyYWJsZSxzbj15dC5zcGxpY2UsUmk9UHQ/UHQudG9TdHJpbmdUYWc6dm9pZCAwLGhuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsZnQ9UnQ/UnQuaXNCdWZm'@;
put 'ZXI6dm9pZCAwLE9yPWZ1bmN0aW9uIFFlKEFuLG9uKXtyZXR1cm4gZnVuY3Rpb24obWkpe3JldHVybiBBbihvbihtaSkpfX0oT2JqZWN0LmtleXMsT2JqZWN0KSxXdD1ZaChKZSwiRGF0YVZpZXciKSxBdD1ZaChKZSwiTWFwIiksUm49WWgoSmUsIlByb21pc2UiKSxzdD1ZaChKZSwiU2V0Iiks'@;
put 'VXQ9WWgoSmUsIldlYWtNYXAiKSxyaT1ZaChPYmplY3QsImNyZWF0ZSIpLFdlPU9sKFd0KSxUdD1PbChBdCksbnI9T2woUm4pLGh0PU9sKHN0KSx4dD1PbChVdCksQm49UHQ/UHQucHJvdG90eXBlOnZvaWQgMCxybj1Cbj9Cbi52YWx1ZU9mOnZvaWQgMDtmdW5jdGlvbiB6dChBbil7dmFyIG9u'@;
put 'PS0xLG1pPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytvbjxtaTspe3ZhciBBcj1Bbltvbl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiBlbihBbil7dmFyIG9uPS0xLG1pPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7Kytvbjxt'@;
put 'aTspe3ZhciBBcj1Bbltvbl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiBlaShBbil7dmFyIG9uPS0xLG1pPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytvbjxtaTspe3ZhciBBcj1Bbltvbl07dGhpcy5zZXQoQXJbMF0sQXJbMV0pfX1mdW5jdGlvbiBX'@;
put 'aShBbil7dmFyIG9uPS0xLG1pPW51bGw9PUFuPzA6QW4ubGVuZ3RoO2Zvcih0aGlzLl9fZGF0YV9fPW5ldyBlaTsrK29uPG1pOyl0aGlzLmFkZChBbltvbl0pfWZ1bmN0aW9uIGNvKEFuKXt2YXIgb249dGhpcy5fX2RhdGFfXz1uZXcgZW4oQW4pO3RoaXMuc2l6ZT1vbi5zaXplfWZ1bmN0aW9u'@;
put 'IGJsKEFuLG9uKXtmb3IodmFyIG1pPUFuLmxlbmd0aDttaS0tOylpZihzZihBblttaV1bMF0sb24pKXJldHVybiBtaTtyZXR1cm4tMX1mdW5jdGlvbiBSYyhBbil7cmV0dXJuIG51bGw9PUFuP3ZvaWQgMD09PUFuP1RlOlg6UmkmJlJpIGluIE9iamVjdChBbik/ZnVuY3Rpb24gYWYoQW4pe3Zh'@;
put 'ciBvbj10dC5jYWxsKEFuLFJpKSxtaT1BbltSaV07dHJ5e0FuW1JpXT12b2lkIDA7dmFyIEFyPSEwfWNhdGNoe312YXIgUGE9dXQuY2FsbChBbik7cmV0dXJuIEFyJiYob24/QW5bUmldPW1pOmRlbGV0ZSBBbltSaV0pLFBhfShBbik6ZnVuY3Rpb24gbjUoQW4pe3JldHVybiB1dC5jYWxsKEFu'@;
put 'KX0oQW4pfWZ1bmN0aW9uIGswKEFuKXtyZXR1cm4gVm8oQW4pJiZSYyhBbik9PVB9ZnVuY3Rpb24gaXIoQW4sb24sbWksQXIsUGEpe3JldHVybiBBbj09PW9ufHwobnVsbD09QW58fG51bGw9PW9ufHwhVm8oQW4pJiYhVm8ob24pP0FuIT1BbiYmb24hPW9uOmZ1bmN0aW9uIEVvKEFuLG9uLG1p'@;
put 'LEFyLFBhLGVhKXt2YXIgYWw9bGYoQW4pLHphPWxmKG9uKSxWcz1hbD9GOllpKEFuKSxDcz16YT9GOllpKG9uKSxCbD0oVnM9VnM9PVA/ZWU6VnMpPT1lZSxIYT0oQ3M9Q3M9PVA/ZWU6Q3MpPT1lZSxrYT1Wcz09Q3M7aWYoa2EmJmNmKEFuKSl7aWYoIWNmKG9uKSlyZXR1cm4hMTthbD0hMCxC'@;
put 'bD0hMX1pZihrYSYmIUJsKXJldHVybiBlYXx8KGVhPW5ldyBjbyksYWx8fEQzKEFuKT92MChBbixvbixtaSxBcixQYSxlYSk6ZnVuY3Rpb24gTm8oQW4sb24sbWksQXIsUGEsZWEsYWwpe3N3aXRjaChtaSl7Y2FzZSBWOmlmKEFuLmJ5dGVMZW5ndGghPW9uLmJ5dGVMZW5ndGh8fEFuLmJ5dGVP'@;
put 'ZmZzZXQhPW9uLmJ5dGVPZmZzZXQpcmV0dXJuITE7QW49QW4uYnVmZmVyLG9uPW9uLmJ1ZmZlcjtjYXNlIHplOnJldHVybiEoQW4uYnl0ZUxlbmd0aCE9b24uYnl0ZUxlbmd0aHx8IWVhKG5ldyBzaShBbiksbmV3IHNpKG9uKSkpO2Nhc2UgejpjYXNlIE46Y2FzZSBZOnJldHVybiBzZigrQW4s'@;
put 'K29uKTtjYXNlIEw6cmV0dXJuIEFuLm5hbWU9PW9uLm5hbWUmJkFuLm1lc3NhZ2U9PW9uLm1lc3NhZ2U7Y2FzZSBpZTpjYXNlIG1lOnJldHVybiBBbj09b24rIiI7Y2FzZSBXOnZhciB6YT1udDtjYXNlIGxlOmlmKHphfHwoemE9dW4pLEFuLnNpemUhPW9uLnNpemUmJiEoQXImZykpcmV0dXJu'@;
put 'ITE7dmFyIENzPWFsLmdldChBbik7aWYoQ3MpcmV0dXJuIENzPT1vbjtBcnw9QixhbC5zZXQoQW4sb24pO3ZhciBCbD12MCh6YShBbiksemEob24pLEFyLFBhLGVhLGFsKTtyZXR1cm4gYWwuZGVsZXRlKEFuKSxCbDtjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYocm4pcmV0dXJuIHJuLmNhbGwo'@;
put 'QW4pPT1ybi5jYWxsKG9uKX1yZXR1cm4hMX0oQW4sb24sVnMsbWksQXIsUGEsZWEpO2lmKCEobWkmZykpe3ZhciBTdD1CbCYmdHQuY2FsbChBbiwiX193cmFwcGVkX18iKSxCdD1IYSYmdHQuY2FsbChvbiwiX193cmFwcGVkX18iKTtpZihTdHx8QnQpe3ZhciBfbj1TdD9Bbi52YWx1ZSgpOkFu'@;
put 'LG1uPUJ0P29uLnZhbHVlKCk6b247cmV0dXJuIGVhfHwoZWE9bmV3IGNvKSxQYShfbixtbixtaSxBcixlYSl9fXJldHVybiEha2EmJihlYXx8KGVhPW5ldyBjbyksZnVuY3Rpb24gSXUoQW4sb24sbWksQXIsUGEsZWEpe3ZhciBhbD1taSZnLHphPVByKEFuKSxWcz16YS5sZW5ndGg7aWYoVnMh'@;
put 'PVByKG9uKS5sZW5ndGgmJiFhbClyZXR1cm4hMTtmb3IodmFyIEhhPVZzO0hhLS07KXt2YXIga2E9emFbSGFdO2lmKCEoYWw/a2EgaW4gb246dHQuY2FsbChvbixrYSkpKXJldHVybiExfXZhciBTdD1lYS5nZXQoQW4pO2lmKFN0JiZlYS5nZXQob24pKXJldHVybiBTdD09b247dmFyIEJ0PSEw'@;
put 'O2VhLnNldChBbixvbiksZWEuc2V0KG9uLEFuKTtmb3IodmFyIF9uPWFsOysrSGE8VnM7KXt2YXIgbW49QW5ba2E9emFbSGFdXSxJbj1vbltrYV07aWYoQXIpdmFyIGJuPWFsP0FyKEluLG1uLGthLG9uLEFuLGVhKTpBcihtbixJbixrYSxBbixvbixlYSk7aWYoISh2b2lkIDA9PT1ibj9tbj09'@;
put 'PUlufHxQYShtbixJbixtaSxBcixlYSk6Ym4pKXtCdD0hMTticmVha31fbnx8KF9uPSJjb25zdHJ1Y3RvciI9PWthKX1pZihCdCYmIV9uKXt2YXIgdXI9QW4uY29uc3RydWN0b3Isdmk9b24uY29uc3RydWN0b3I7dXIhPXZpJiYiY29uc3RydWN0b3IiaW4gQW4mJiJjb25zdHJ1Y3RvciJpbiBv'@;
put 'biYmISgiZnVuY3Rpb24iPT10eXBlb2YgdXImJnVyIGluc3RhbmNlb2YgdXImJiJmdW5jdGlvbiI9PXR5cGVvZiB2aSYmdmkgaW5zdGFuY2VvZiB2aSkmJihCdD0hMSl9cmV0dXJuIGVhLmRlbGV0ZShBbiksZWEuZGVsZXRlKG9uKSxCdH0oQW4sb24sbWksQXIsUGEsZWEpKX0oQW4sb24sbWks'@;
put 'QXIsaXIsUGEpKX1mdW5jdGlvbiB2MChBbixvbixtaSxBcixQYSxlYSl7dmFyIGFsPW1pJmcsemE9QW4ubGVuZ3RoLFZzPW9uLmxlbmd0aDtpZih6YSE9VnMmJiEoYWwmJlZzPnphKSlyZXR1cm4hMTt2YXIgQ3M9ZWEuZ2V0KEFuKTtpZihDcyYmZWEuZ2V0KG9uKSlyZXR1cm4gQ3M9PW9uO3Zh'@;
put 'ciBCbD0tMSxIYT0hMCxrYT1taSZCP25ldyBXaTp2b2lkIDA7Zm9yKGVhLnNldChBbixvbiksZWEuc2V0KG9uLEFuKTsrK0JsPHphOyl7dmFyIFN0PUFuW0JsXSxCdD1vbltCbF07aWYoQXIpdmFyIF9uPWFsP0FyKEJ0LFN0LEJsLG9uLEFuLGVhKTpBcihTdCxCdCxCbCxBbixvbixlYSk7aWYo'@;
put 'dm9pZCAwIT09X24pe2lmKF9uKWNvbnRpbnVlO0hhPSExO2JyZWFrfWlmKGthKXtpZighSWUob24sZnVuY3Rpb24obW4sSW4pe2lmKCFBZShrYSxJbikmJihTdD09PW1ufHxQYShTdCxtbixtaSxBcixlYSkpKXJldHVybiBrYS5wdXNoKEluKX0pKXtIYT0hMTticmVha319ZWxzZSBpZihTdCE9'@;
put 'PUJ0JiYhUGEoU3QsQnQsbWksQXIsZWEpKXtIYT0hMTticmVha319cmV0dXJuIGVhLmRlbGV0ZShBbiksZWEuZGVsZXRlKG9uKSxIYX1mdW5jdGlvbiBQcihBbil7cmV0dXJuIGZ1bmN0aW9uIGZ1KEFuLG9uLG1pKXt2YXIgQXI9b24oQW4pO3JldHVybiBsZihBbik/QXI6ZnVuY3Rpb24gUmUo'@;
put 'QW4sb24pe2Zvcih2YXIgbWk9LTEsQXI9b24ubGVuZ3RoLFBhPUFuLmxlbmd0aDsrK21pPEFyOylBbltQYSttaV09b25bbWldO3JldHVybiBBbn0oQXIsbWkoQW4pKX0oQW4sJGgsa3MpfWZ1bmN0aW9uIHNkKEFuLG9uKXt2YXIgbWk9QW4uX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIEpjKEFu'@;
put 'KXt2YXIgb249dHlwZW9mIEFuO3JldHVybiJzdHJpbmciPT1vbnx8Im51bWJlciI9PW9ufHwic3ltYm9sIj09b258fCJib29sZWFuIj09b24/Il9fcHJvdG9fXyIhPT1BbjpudWxsPT09QW59KG9uKT9taVsic3RyaW5nIj09dHlwZW9mIG9uPyJzdHJpbmciOiJoYXNoIl06bWkubWFwfWZ1bmN0'@;
put 'aW9uIFloKEFuLG9uKXt2YXIgbWk9ZnVuY3Rpb24gX3QoQW4sb24pe3JldHVybiBBbj8uW29uXX0oQW4sb24pO3JldHVybiBmdW5jdGlvbiBsaShBbil7cmV0dXJuISghTGMoQW4pfHxmdW5jdGlvbiB0NShBbil7cmV0dXJuISFIZSYmSGUgaW4gQW59KEFuKSkmJih1ZihBbik/cXQ6b2UpLnRl'@;
put 'c3QoT2woQW4pKX0obWkpP21pOnZvaWQgMH16dC5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gaGkoKXt0aGlzLl9fZGF0YV9fPXJpP3JpKG51bGwpOnt9LHRoaXMuc2l6ZT0wfSx6dC5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIGNuKEFuKXt2YXIgb249dGhpcy5oYXMoQW4pJiZkZWxldGUg'@;
put 'dGhpcy5fX2RhdGFfX1tBbl07cmV0dXJuIHRoaXMuc2l6ZS09b24/MTowLG9ufSx6dC5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIGZuKEFuKXt2YXIgb249dGhpcy5fX2RhdGFfXztpZihyaSl7dmFyIG1pPW9uW0FuXTtyZXR1cm4gbWk9PT15P3ZvaWQgMDptaX1yZXR1cm4gdHQuY2FsbChvbixB'@;
put 'bik/b25bQW5dOnZvaWQgMH0senQucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBJaShBbil7dmFyIG9uPXRoaXMuX19kYXRhX187cmV0dXJuIHJpP3ZvaWQgMCE9PW9uW0FuXTp0dC5jYWxsKG9uLEFuKX0senQucHJvdG90eXBlLnNldD1mdW5jdGlvbiBYdChBbixvbil7dmFyIG1pPXRoaXMuX19k'@;
put 'YXRhX187cmV0dXJuIHRoaXMuc2l6ZSs9dGhpcy5oYXMoQW4pPzA6MSxtaVtBbl09cmkmJnZvaWQgMD09PW9uP3k6b24sdGhpc30sZW4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGhvKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sZW4ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlv'@;
put 'biBNaShBbil7dmFyIG9uPXRoaXMuX19kYXRhX18sbWk9Ymwob24sQW4pO3JldHVybiEobWk8MHx8KG1pPT1vbi5sZW5ndGgtMT9vbi5wb3AoKTpzbi5jYWxsKG9uLG1pLDEpLC0tdGhpcy5zaXplLDApKX0sZW4ucHJvdG90eXBlLmdldD1mdW5jdGlvbiB2cihBbil7dmFyIG9uPXRoaXMuX19k'@;
put 'YXRhX18sbWk9Ymwob24sQW4pO3JldHVybiBtaTwwP3ZvaWQgMDpvblttaV1bMV19LGVuLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gV24oQW4pe3JldHVybiBibCh0aGlzLl9fZGF0YV9fLEFuKT4tMX0sZW4ucHJvdG90eXBlLnNldD1mdW5jdGlvbiAkaShBbixvbil7dmFyIG1pPXRoaXMuX19k'@;
put 'YXRhX18sQXI9YmwobWksQW4pO3JldHVybiBBcjwwPygrK3RoaXMuc2l6ZSxtaS5wdXNoKFtBbixvbl0pKTptaVtBcl1bMV09b24sdGhpc30sZWkucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIFFyKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgenQsbWFwOm5ldyhBdHx8'@;
put 'ZW4pLHN0cmluZzpuZXcgenR9fSxlaS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIFZpKEFuKXt2YXIgb249c2QodGhpcyxBbikuZGVsZXRlKEFuKTtyZXR1cm4gdGhpcy5zaXplLT1vbj8xOjAsb259LGVpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gTmkoQW4pe3JldHVybiBzZCh0aGlzLEFu'@;
put 'KS5nZXQoQW4pfSxlaS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIElvKEFuKXtyZXR1cm4gc2QodGhpcyxBbikuaGFzKEFuKX0sZWkucHJvdG90eXBlLnNldD1mdW5jdGlvbiBMcihBbixvbil7dmFyIG1pPXNkKHRoaXMsQW4pLEFyPW1pLnNpemU7cmV0dXJuIG1pLnNldChBbixvbiksdGhpcy5z'@;
put 'aXplKz1taS5zaXplPT1Bcj8wOjEsdGhpc30sV2kucHJvdG90eXBlLmFkZD1XaS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbiBnbyhBbil7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KEFuLHkpLHRoaXN9LFdpLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gUW4oQW4pe3JldHVybiB0aGlzLl9fZGF0'@;
put 'YV9fLmhhcyhBbil9LGNvLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBfbygpe3RoaXMuX19kYXRhX189bmV3IGVuLHRoaXMuc2l6ZT0wfSxjby5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIE9vKEFuKXt2YXIgb249dGhpcy5fX2RhdGFfXyxtaT1vbi5kZWxldGUoQW4pO3JldHVybiB0aGlz'@;
put 'LnNpemU9b24uc2l6ZSxtaX0sY28ucHJvdG90eXBlLmdldD1mdW5jdGlvbiBIbyhBbil7cmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KEFuKX0sY28ucHJvdG90eXBlLmhhcz1mdW5jdGlvbiB0aShBbil7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKEFuKX0sY28ucHJvdG90eXBlLnNldD1mdW5j'@;
put 'dGlvbiBnYShBbixvbil7dmFyIG1pPXRoaXMuX19kYXRhX187aWYobWkgaW5zdGFuY2VvZiBlbil7dmFyIEFyPW1pLl9fZGF0YV9fO2lmKCFBdHx8QXIubGVuZ3RoPDE5OSlyZXR1cm4gQXIucHVzaChbQW4sb25dKSx0aGlzLnNpemU9KyttaS5zaXplLHRoaXM7bWk9dGhpcy5fX2RhdGFfXz1u'@;
put 'ZXcgZWkoQXIpfXJldHVybiBtaS5zZXQoQW4sb24pLHRoaXMuc2l6ZT1taS5zaXplLHRoaXN9O3ZhciBrcz1obj9mdW5jdGlvbihBbil7cmV0dXJuIG51bGw9PUFuP1tdOihBbj1PYmplY3QoQW4pLGZ1bmN0aW9uIEZlKEFuLG9uKXtmb3IodmFyIG1pPS0xLEFyPW51bGw9PUFuPzA6QW4ubGVu'@;
put 'Z3RoLFBhPTAsZWE9W107KyttaTxBcjspe3ZhciBhbD1BblttaV07b24oYWwsbWksQW4pJiYoZWFbUGErK109YWwpfXJldHVybiBlYX0oaG4oQW4pLGZ1bmN0aW9uKG9uKXtyZXR1cm4gUXQuY2FsbChBbixvbil9KSl9OmZ1bmN0aW9uIEtoKCl7cmV0dXJuW119LFlpPVJjO2Z1bmN0aW9uIHls'@;
put 'KEFuLG9uKXtyZXR1cm4hIShvbj1vbj8/dykmJigibnVtYmVyIj09dHlwZW9mIEFufHx0ZS50ZXN0KEFuKSkmJkFuPi0xJiZBbiUxPT0wJiZBbjxvbn1mdW5jdGlvbiBPbChBbil7aWYobnVsbCE9QW4pe3RyeXtyZXR1cm4gJGUuY2FsbChBbil9Y2F0Y2h7fXRyeXtyZXR1cm4gQW4rIiJ9Y2F0'@;
put 'Y2h7fX1yZXR1cm4iIn1mdW5jdGlvbiBzZihBbixvbil7cmV0dXJuIEFuPT09b258fEFuIT1BbiYmb24hPW9ufShXdCYmWWkobmV3IFd0KG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1WfHxBdCYmWWkobmV3IEF0KSE9V3x8Um4mJllpKFJuLnJlc29sdmUoKSkhPUp8fHN0JiZZaShuZXcgc3QpIT1s'@;
put 'ZXx8VXQmJllpKG5ldyBVdCkhPVNlKSYmKFlpPWZ1bmN0aW9uKEFuKXt2YXIgb249UmMoQW4pLG1pPW9uPT1lZT9Bbi5jb25zdHJ1Y3Rvcjp2b2lkIDAsQXI9bWk/T2wobWkpOiIiO2lmKEFyKXN3aXRjaChBcil7Y2FzZSBXZTpyZXR1cm4gVjtjYXNlIFR0OnJldHVybiBXO2Nhc2UgbnI6cmV0'@;
put 'dXJuIEo7Y2FzZSBodDpyZXR1cm4gbGU7Y2FzZSB4dDpyZXR1cm4gU2V9cmV0dXJuIG9ufSk7dmFyIGxkPWswKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk/azA6ZnVuY3Rpb24oQW4pe3JldHVybiBWbyhBbikmJnR0LmNhbGwoQW4sImNhbGxlZSIpJiYhUXQuY2FsbChBbiwiY2Fs'@;
put 'bGVlIil9LGxmPUFycmF5LmlzQXJyYXksY2Y9ZnR8fGZ1bmN0aW9uIHFoKCl7cmV0dXJuITF9O2Z1bmN0aW9uIHVmKEFuKXtpZighTGMoQW4pKXJldHVybiExO3ZhciBvbj1SYyhBbik7cmV0dXJuIG9uPT1LfHxvbj09VXx8b249PU98fG9uPT1yZX1mdW5jdGlvbiBHaChBbil7cmV0dXJuIm51'@;
put 'bWJlciI9PXR5cGVvZiBBbiYmQW4+LTEmJkFuJTE9PTAmJkFuPD13fWZ1bmN0aW9uIExjKEFuKXt2YXIgb249dHlwZW9mIEFuO3JldHVybiBudWxsIT1BbiYmKCJvYmplY3QiPT1vbnx8ImZ1bmN0aW9uIj09b24pfWZ1bmN0aW9uIFZvKEFuKXtyZXR1cm4gbnVsbCE9QW4mJiJvYmplY3QiPT10'@;
put 'eXBlb2YgQW59dmFyIEQzPURlP2Z1bmN0aW9uIGtlKEFuKXtyZXR1cm4gZnVuY3Rpb24ob24pe3JldHVybiBBbihvbil9fShEZSk6ZnVuY3Rpb24gVnQoQW4pe3JldHVybiBWbyhBbikmJkdoKEFuLmxlbmd0aCkmJiEhc2VbUmMoQW4pXX07ZnVuY3Rpb24gJGgoQW4pe3JldHVybiBmdW5jdGlv'@;
put 'biBrMShBbil7cmV0dXJuIG51bGwhPUFuJiZHaChBbi5sZW5ndGgpJiYhdWYoQW4pfShBbik/ZnVuY3Rpb24gTnMoQW4sb24pe3ZhciBtaT1sZihBbiksQXI9IW1pJiZsZChBbiksUGE9IW1pJiYhQXImJmNmKEFuKSxlYT0hbWkmJiFBciYmIVBhJiZEMyhBbiksYWw9bWl8fEFyfHxQYXx8ZWEs'@;
put 'emE9YWw/ZnVuY3Rpb24gVmUoQW4sb24pe2Zvcih2YXIgbWk9LTEsQXI9QXJyYXkoQW4pOysrbWk8QW47KUFyW21pXT1vbihtaSk7cmV0dXJuIEFyfShBbi5sZW5ndGgsU3RyaW5nKTpbXSxWcz16YS5sZW5ndGg7Zm9yKHZhciBDcyBpbiBBbikob258fHR0LmNhbGwoQW4sQ3MpKSYmKCFhbHx8'@;
put 'ISgibGVuZ3RoIj09Q3N8fFBhJiYoIm9mZnNldCI9PUNzfHwicGFyZW50Ij09Q3MpfHxlYSYmKCJidWZmZXIiPT1Dc3x8ImJ5dGVMZW5ndGgiPT1Dc3x8ImJ5dGVPZmZzZXQiPT1Dcyl8fHlsKENzLFZzKSkpJiZ6YS5wdXNoKENzKTtyZXR1cm4gemF9KEFuKTpmdW5jdGlvbiBKcihBbil7aWYo'@;
put 'IWZ1bmN0aW9uIGIwKEFuKXt2YXIgb249QW4mJkFuLmNvbnN0cnVjdG9yO3JldHVybiBBbj09PSgiZnVuY3Rpb24iPT10eXBlb2Ygb24mJm9uLnByb3RvdHlwZXx8RHQpfShBbikpcmV0dXJuIE9yKEFuKTt2YXIgb249W107Zm9yKHZhciBtaSBpbiBPYmplY3QoQW4pKXR0LmNhbGwoQW4sbWkp'@;
put 'JiYiY29uc3RydWN0b3IiIT1taSYmb24ucHVzaChtaSk7cmV0dXJuIG9ufShBbil9dWUuZXhwb3J0cz1mdW5jdGlvbiB0aChBbixvbil7cmV0dXJuIGlyKEFuLG9uKX19LDg0MjM6KHVlLHEsXyk9Pnt2YXIgTz0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2Jq'@;
put 'ZWN0JiZzZWxmLHo9Im9iamVjdCI9PXR5cGVvZiBfLmcmJl8uZyYmXy5nLk9iamVjdD09PU9iamVjdCYmXy5nfHxPfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLE49T2JqZWN0LnByb3RvdHlwZSxMPU4uaGFzT3duUHJvcGVydHksSz1OLnRvU3RyaW5nLFU9ei5TeW1ib2wsVz1VP1UudG9T'@;
put 'dHJpbmdUYWc6dm9pZCAwO3VlLmV4cG9ydHM9ZnVuY3Rpb24gSihpZSl7aWYoIWZ1bmN0aW9uIHJlKGllKXt2YXIgbGU9dHlwZW9mIGllO3JldHVybiBudWxsIT1pZSYmKCJvYmplY3QiPT1sZXx8ImZ1bmN0aW9uIj09bGUpfShpZSkpcmV0dXJuITE7dmFyIGxlPWZ1bmN0aW9uIFkoaWUpe3Jl'@;
put 'dHVybiBudWxsPT1pZT92b2lkIDA9PT1pZT8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6VyYmVyBpbiBPYmplY3QoaWUpP2Z1bmN0aW9uIFgoaWUpe3ZhciBsZT1MLmNhbGwoaWUsVyksbWU9aWVbV107dHJ5e2llW1ddPXZvaWQgMDt2YXIgX2U9ITB9Y2F0Y2h7fXZhciBU'@;
put 'ZT1LLmNhbGwoaWUpO3JldHVybiBfZSYmKGxlP2llW1ddPW1lOmRlbGV0ZSBpZVtXXSksVGV9KGllKTpmdW5jdGlvbiBlZShpZSl7cmV0dXJuIEsuY2FsbChpZSl9KGllKX0oaWUpO3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PWxlfHwiW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iPT1s'@;
put 'ZXx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1sZXx8IltvYmplY3QgUHJveHldIj09bGV9fSw5NzIyOnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbiBxKF8pe3JldHVybiBudWxsPT1ffX0sOTczODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGguYWJzfSw2MzI5OnVlPT57InVz'@;
put 'ZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5mbG9vcn0sMzY3ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oXyl7cmV0dXJuIF8hPV99fSwyMjY0OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5tYXh9LDU3MzA6dWU9PnsidXNl'@;
put 'IHN0cmljdCI7dWUuZXhwb3J0cz1NYXRoLm1pbn0sNzA3OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5wb3d9LDM4NjI6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1NYXRoLnJvdW5kfSw5NTUwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzY3OCk7dWUu'@;
put 'ZXhwb3J0cz1mdW5jdGlvbihnKXtyZXR1cm4gSShnKXx8MD09PWc/ZzpnPDA/LTE6MX19LDIzMTg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1NzE3KSx5PV8oMzM0OSksZz1fKDk1MDkpLkJ1ZmZlcixCPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gdygpe3kuY2FsbCh0aGlzLDY0'@;
put 'KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBQKEwsSyl7cmV0dXJuIEw8PEt8TD4+PjMyLUt9ZnVuY3Rpb24gRihMLEssVSxXLFksWCxlZSl7cmV0dXJuIFAoTCsoSyZVfH5LJlcpK1kr'@;
put 'WHwwLGVlKStLfDB9ZnVuY3Rpb24gTyhMLEssVSxXLFksWCxlZSl7cmV0dXJuIFAoTCsoSyZXfFUmflcpK1krWHwwLGVlKStLfDB9ZnVuY3Rpb24geihMLEssVSxXLFksWCxlZSl7cmV0dXJuIFAoTCsoS15VXlcpK1krWHwwLGVlKStLfDB9ZnVuY3Rpb24gTihMLEssVSxXLFksWCxlZSl7cmV0'@;
put 'dXJuIFAoTCsoVV4oS3x+VykpK1krWHwwLGVlKStLfDB9SSh3LHkpLHcucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIEw9QixLPTA7SzwxNjsrK0spTFtLXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KkspO3ZhciBVPXRoaXMuX2EsVz10aGlzLl9iLFk9dGhpcy5fYyxY'@;
put 'PXRoaXMuX2Q7VT1GKFUsVyxZLFgsTFswXSwzNjE0MDkwMzYwLDcpLFg9RihYLFUsVyxZLExbMV0sMzkwNTQwMjcxMCwxMiksWT1GKFksWCxVLFcsTFsyXSw2MDYxMDU4MTksMTcpLFc9RihXLFksWCxVLExbM10sMzI1MDQ0MTk2NiwyMiksVT1GKFUsVyxZLFgsTFs0XSw0MTE4NTQ4Mzk5LDcp'@;
put 'LFg9RihYLFUsVyxZLExbNV0sMTIwMDA4MDQyNiwxMiksWT1GKFksWCxVLFcsTFs2XSwyODIxNzM1OTU1LDE3KSxXPUYoVyxZLFgsVSxMWzddLDQyNDkyNjEzMTMsMjIpLFU9RihVLFcsWSxYLExbOF0sMTc3MDAzNTQxNiw3KSxYPUYoWCxVLFcsWSxMWzldLDIzMzY1NTI4NzksMTIpLFk9RihZ'@;
put 'LFgsVSxXLExbMTBdLDQyOTQ5MjUyMzMsMTcpLFc9RihXLFksWCxVLExbMTFdLDIzMDQ1NjMxMzQsMjIpLFU9RihVLFcsWSxYLExbMTJdLDE4MDQ2MDM2ODIsNyksWD1GKFgsVSxXLFksTFsxM10sNDI1NDYyNjE5NSwxMiksWT1GKFksWCxVLFcsTFsxNF0sMjc5Mjk2NTAwNiwxNyksVT1PKFUs'@;
put 'Vz1GKFcsWSxYLFUsTFsxNV0sMTIzNjUzNTMyOSwyMiksWSxYLExbMV0sNDEyOTE3MDc4Niw1KSxYPU8oWCxVLFcsWSxMWzZdLDMyMjU0NjU2NjQsOSksWT1PKFksWCxVLFcsTFsxMV0sNjQzNzE3NzEzLDE0KSxXPU8oVyxZLFgsVSxMWzBdLDM5MjEwNjk5OTQsMjApLFU9TyhVLFcsWSxYLExb'@;
put 'NV0sMzU5MzQwODYwNSw1KSxYPU8oWCxVLFcsWSxMWzEwXSwzODAxNjA4Myw5KSxZPU8oWSxYLFUsVyxMWzE1XSwzNjM0NDg4OTYxLDE0KSxXPU8oVyxZLFgsVSxMWzRdLDM4ODk0Mjk0NDgsMjApLFU9TyhVLFcsWSxYLExbOV0sNTY4NDQ2NDM4LDUpLFg9TyhYLFUsVyxZLExbMTRdLDMyNzUx'@;
put 'NjM2MDYsOSksWT1PKFksWCxVLFcsTFszXSw0MTA3NjAzMzM1LDE0KSxXPU8oVyxZLFgsVSxMWzhdLDExNjM1MzE1MDEsMjApLFU9TyhVLFcsWSxYLExbMTNdLDI4NTAyODU4MjksNSksWD1PKFgsVSxXLFksTFsyXSw0MjQzNTYzNTEyLDkpLFk9TyhZLFgsVSxXLExbN10sMTczNTMyODQ3Mywx'@;
put 'NCksVT16KFUsVz1PKFcsWSxYLFUsTFsxMl0sMjM2ODM1OTU2MiwyMCksWSxYLExbNV0sNDI5NDU4ODczOCw0KSxYPXooWCxVLFcsWSxMWzhdLDIyNzIzOTI4MzMsMTEpLFk9eihZLFgsVSxXLExbMTFdLDE4MzkwMzA1NjIsMTYpLFc9eihXLFksWCxVLExbMTRdLDQyNTk2NTc3NDAsMjMpLFU9'@;
put 'eihVLFcsWSxYLExbMV0sMjc2Mzk3NTIzNiw0KSxYPXooWCxVLFcsWSxMWzRdLDEyNzI4OTMzNTMsMTEpLFk9eihZLFgsVSxXLExbN10sNDEzOTQ2OTY2NCwxNiksVz16KFcsWSxYLFUsTFsxMF0sMzIwMDIzNjY1NiwyMyksVT16KFUsVyxZLFgsTFsxM10sNjgxMjc5MTc0LDQpLFg9eihYLFUs'@;
put 'VyxZLExbMF0sMzkzNjQzMDA3NCwxMSksWT16KFksWCxVLFcsTFszXSwzNTcyNDQ1MzE3LDE2KSxXPXooVyxZLFgsVSxMWzZdLDc2MDI5MTg5LDIzKSxVPXooVSxXLFksWCxMWzldLDM2NTQ2MDI4MDksNCksWD16KFgsVSxXLFksTFsxMl0sMzg3MzE1MTQ2MSwxMSksWT16KFksWCxVLFcsTFsx'@;
put 'NV0sNTMwNzQyNTIwLDE2KSxVPU4oVSxXPXooVyxZLFgsVSxMWzJdLDMyOTk2Mjg2NDUsMjMpLFksWCxMWzBdLDQwOTYzMzY0NTIsNiksWD1OKFgsVSxXLFksTFs3XSwxMTI2ODkxNDE1LDEwKSxZPU4oWSxYLFUsVyxMWzE0XSwyODc4NjEyMzkxLDE1KSxXPU4oVyxZLFgsVSxMWzVdLDQyMzc1'@;
put 'MzMyNDEsMjEpLFU9TihVLFcsWSxYLExbMTJdLDE3MDA0ODU1NzEsNiksWD1OKFgsVSxXLFksTFszXSwyMzk5OTgwNjkwLDEwKSxZPU4oWSxYLFUsVyxMWzEwXSw0MjkzOTE1NzczLDE1KSxXPU4oVyxZLFgsVSxMWzFdLDIyNDAwNDQ0OTcsMjEpLFU9TihVLFcsWSxYLExbOF0sMTg3MzMxMzM1'@;
put 'OSw2KSxYPU4oWCxVLFcsWSxMWzE1XSw0MjY0MzU1NTUyLDEwKSxZPU4oWSxYLFUsVyxMWzZdLDI3MzQ3Njg5MTYsMTUpLFc9TihXLFksWCxVLExbMTNdLDEzMDkxNTE2NDksMjEpLFU9TihVLFcsWSxYLExbNF0sNDE0OTQ0NDIyNiw2KSxYPU4oWCxVLFcsWSxMWzExXSwzMTc0NzU2OTE3LDEw'@;
put 'KSxZPU4oWSxYLFUsVyxMWzJdLDcxODc4NzI1OSwxNSksVz1OKFcsWSxYLFUsTFs5XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2ErVXwwLHRoaXMuX2I9dGhpcy5fYitXfDAsdGhpcy5fYz10aGlzLl9jK1l8MCx0aGlzLl9kPXRoaXMuX2QrWHwwfSx3LnByb3RvdHlwZS5fZGlnZXN0'@;
put 'PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxs'@;
put 'KDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEw9Zy5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEwu'@;
put 'd3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksTC53cml0ZUludDMyTEUodGhpcy5fYiw0KSxMLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLEx9LHVlLmV4cG9ydHM9d30sMzA0NzoodWUscSxfKT0+e3ZhciBJPV8oNjI0MCkseT1fKDk5MzEpO2Z1bmN0'@;
put 'aW9uIGcoQil7dGhpcy5yYW5kPUJ8fG5ldyB5LlJhbmR9dWUuZXhwb3J0cz1nLGcuY3JlYXRlPWZ1bmN0aW9uKHcpe3JldHVybiBuZXcgZyh3KX0sZy5wcm90b3R5cGUuX3JhbmRiZWxvdz1mdW5jdGlvbih3KXt2YXIgUD13LmJpdExlbmd0aCgpLEY9TWF0aC5jZWlsKFAvOCk7ZG97dmFyIE89'@;
put 'bmV3IEkodGhpcy5yYW5kLmdlbmVyYXRlKEYpKX13aGlsZShPLmNtcCh3KT49MCk7cmV0dXJuIE99LGcucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24odyxQKXt2YXIgRj1QLnN1Yih3KTtyZXR1cm4gdy5hZGQodGhpcy5fcmFuZGJlbG93KEYpKX0sZy5wcm90b3R5cGUudGVzdD1mdW5j'@;
put 'dGlvbih3LFAsRil7dmFyIE89dy5iaXRMZW5ndGgoKSx6PUkubW9udCh3KSxOPW5ldyBJKDEpLnRvUmVkKHopO1B8fChQPU1hdGgubWF4KDEsTy80OHwwKSk7Zm9yKHZhciBMPXcuc3VibigxKSxLPTA7IUwudGVzdG4oSyk7SysrKTtmb3IodmFyIFU9dy5zaHJuKEspLFc9TC50b1JlZCh6KTtQ'@;
put 'PjA7UC0tKXt2YXIgWD10aGlzLl9yYW5kcmFuZ2UobmV3IEkoMiksTCk7RiYmRihYKTt2YXIgZWU9WC50b1JlZCh6KS5yZWRQb3coVSk7aWYoMCE9PWVlLmNtcChOKSYmMCE9PWVlLmNtcChXKSl7Zm9yKHZhciBKPTE7SjxLO0orKyl7aWYoMD09PShlZT1lZS5yZWRTcXIoKSkuY21wKE4pKXJl'@;
put 'dHVybiExO2lmKDA9PT1lZS5jbXAoVykpYnJlYWt9aWYoSj09PUspcmV0dXJuITF9fXJldHVybiEwfSxnLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKHcsUCl7dmFyIEY9dy5iaXRMZW5ndGgoKSxPPUkubW9udCh3KSx6PW5ldyBJKDEpLnRvUmVkKE8pO1B8fChQPU1hdGgubWF4KDEs'@;
put 'Ri80OHwwKSk7Zm9yKHZhciBOPXcuc3VibigxKSxMPTA7IU4udGVzdG4oTCk7TCsrKTtmb3IodmFyIEs9dy5zaHJuKEwpLFU9Ti50b1JlZChPKTtQPjA7UC0tKXt2YXIgVz10aGlzLl9yYW5kcmFuZ2UobmV3IEkoMiksTiksWT13LmdjZChXKTtpZigwIT09WS5jbXBuKDEpKXJldHVybiBZO3Zh'@;
put 'ciBYPVcudG9SZWQoTykucmVkUG93KEspO2lmKDAhPT1YLmNtcCh6KSYmMCE9PVguY21wKFUpKXtmb3IodmFyIGVlPTE7ZWU8TDtlZSsrKXtpZigwPT09KFg9WC5yZWRTcXIoKSkuY21wKHopKXJldHVybiBYLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KTtpZigwPT09WC5jbXAoVSkpYnJlYWt9'@;
put 'aWYoZWU9PT1MKXJldHVybihYPVgucmVkU3FyKCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KX19cmV0dXJuITF9fSw2MjQwOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkseSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2Vy'@;
put 'dGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJu'@;
put 'IFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9J'@;
put 'LmV4cG9ydHM9dzp5LkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOl8oNjYxOSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3Jl'@;
put 'dHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0'@;
put 'aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5j'@;
put 'b25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVu'@;
put 'Y3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFy'@;
put 'IEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXko'@;
put 'dGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhp'@;
put 'cy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5'@;
put 'KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNl'@;
put 'aWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9'@;
put 'KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1w'@;
put 'W0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5n'@;
put 'dGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1P'@;
put 'KHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEw'@;
put 'ODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1i'@;
put 'KUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbiht'@;
put 'KTtpZigwIT09ail7dmFyIG9lPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspb2UqPWI7dGhpcy5pbXVsbihvZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5'@;
put 'PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnBy'@;
put 'b3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90'@;
put 'b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVu'@;
put 'Z3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAw'@;
put 'MDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAi'@;
put 'LCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3'@;
put 'NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5'@;
put 'NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFy'@;
put 'IHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LG9lPTY3MTA4'@;
put 'ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK29lKS82NzEwODg2NHwwLG9lPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfG9lLEU9'@;
put 'MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMu'@;
put 'bGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigw'@;
put 'IT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIG9lPXRoaXMuY2xvbmUoKTtmb3Iob2Uu'@;
put 'bmVnYXRpdmU9MDshb2UuaXNaZXJvKCk7KXt2YXIgdGU9b2UubW9kbihBKS50b1N0cmluZyhwKTt4PShvZT1vZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1'@;
put 'cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhp'@;
put 'cy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5u'@;
put 'ZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUu'@;
put 'dG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdl'@;
put 'ciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxB'@;
put 'Lml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1h'@;
put 'dGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgr'@;
put 'Yn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4'@;
put 'KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygp'@;
put 'KXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRo'@;
put 'aXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRl'@;
put 'c3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5w'@;
put 'cm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBi'@;
put 'PTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3Rv'@;
put 'dHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHAp'@;
put 'OnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhp'@;
put 'cy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxl'@;
put 'bmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4'@;
put 'b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKysp'@;
put 'dGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9'@;
put 'ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5j'@;
put 'bG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNb'@;
put 'Q109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3Rv'@;
put 'dHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAo'@;
put 'KX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5l'@;
put 'Z2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRo'@;
put 'aXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxl'@;
put 'bmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVy'@;
put 'biAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6'@;
put 'dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxi'@;
put 'Ll9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVu'@;
put 'Z3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1I'@;
put 'JiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1N'@;
put 'YXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxU'@;
put 'PWIud29yZHMsSD14LndvcmRzLGo9MCxvZT0wfENbMF0sdGU9ODE5MSZvZSxzZT1vZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsYXQ9MHxDWzJdLE1lPTgxOTEmYXQsdmU9YXQ+Pj4xMyxYZT0wfENbM10samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04'@;
put 'MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0sbnQ9ODE5MSZfdCxRZT1fdD4+PjEzLHVuPTB8Q1s3XSx5dD04MTkxJnVuLE10PXVuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0'@;
put 'dCx1dD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsc2k9MHxUWzFdLFF0PTgxOTEmc2ksc249c2k+Pj4xMyxSaT0wfFRbMl0saG49ODE5MSZSaSxmdD1SaT4+PjEzLE9yPTB8VFszXSxXdD04MTkxJk9yLEF0PU9yPj4+MTMsUm49MHxUWzRdLHN0PTgxOTEmUm4sVXQ9'@;
put 'Um4+Pj4xMyxyaT0wfFRbNV0sV2U9ODE5MSZyaSxUdD1yaT4+PjEzLG5yPTB8VFs2XSxodD04MTkxJm5yLHh0PW5yPj4+MTMsQm49MHxUWzddLHJuPTgxOTEmQm4senQ9Qm4+Pj4xMyxoaT0wfFRbOF0sY249ODE5MSZoaSxmbj1oaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+'@;
put 'MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIGhvPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkr'@;
put 'KG0+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIE1pPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09'@;
put 'KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKE1pPj4+MjYpfDAsTWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGgu'@;
put 'aW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgdnI9KGorKEU9RStNYXRoLmltdWwodGUsaG4pfDApfDApKygo'@;
put 'ODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGhuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsodnI+Pj4yNil8MCx2ciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsUnQpLG09KG09TWF0aC5pbXVsKGplLFB0'@;
put 'KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsaG4pfDAsbT0obT1tK01h'@;
put 'dGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGhuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFd0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxXdCl8MCkpPDwxMyl8MDtqPSgo'@;
put 'QT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxRdCl8MCxt'@;
put 'PShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGhuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxobil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStN'@;
put 'YXRoLmltdWwoVWUsV3QpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFd0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyICRpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVXQpfDApK01hdGgu'@;
put 'aW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxVdCl8MCkrKG0+Pj4xMyl8MCkrKCRpPj4+MjYpfDAsJGkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQ'@;
put 'dCksRT1FK01hdGguaW11bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKGplLGhuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxobil8MCxB'@;
put 'PUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsV3QpfDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFd0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFV0KXwwKStN'@;
put 'YXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSxVdCl8MDt2YXIgZWk9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0'@;
put 'KXwwKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwobnQsUnQpLG09KG09TWF0aC5pbXVsKG50LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Us'@;
put 'c24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsaG4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGhuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxXdCl8MCxt'@;
put 'PShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoRGUsV3QpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmltdWwoTWUsVXQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLFV0KXwwLEU9RStN'@;
put 'YXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGgu'@;
put 'aW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQ'@;
put 'dCksRT1FK01hdGguaW11bChudCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGhuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxobil8MCxB'@;
put 'PUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsV3QpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFd0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFV0KXwwKStN'@;
put 'YXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSxVdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01h'@;
put 'dGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHJuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxybil8MCkpPDwxMyl8MDtqPSgo'@;
put 'QT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxt'@;
put 'PShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKG50LGhuKXwwLG09KG09bStNYXRoLmltdWwobnQsZnQpfDApK01hdGguaW11bChRZSxobil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStN'@;
put 'YXRoLmltdWwoa2UsV3QpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFd0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFV0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGgu'@;
put 'aW11bChJZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVs'@;
put 'KHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUscm4pfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgTmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygo'@;
put 'ODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZuKXwwKSsobT4+PjEzKXwwKSsoTmk+Pj4yNil8MCxOaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0'@;
put 'KSkrTWF0aC5pbXVsKHV0LFJ0KXwwLEE9TWF0aC5pbXVsKHV0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsaG4pfDAsbT0obT1tK01h'@;
put 'dGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGhuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChudCxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LEF0KXwwKStNYXRoLmltdWwoUWUsV3QpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVs'@;
put 'KGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsVXQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLFV0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUs'@;
put 'VHQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE1lLHJuKXwwLG09KG09bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxybil8'@;
put 'MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUsZm4pfDA7dmFyIElvPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09'@;
put 'KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKElvPj4+MjYpfDAsSW8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGgu'@;
put 'aW11bCh1dCxRdCl8MCxBPU1hdGguaW11bCh1dCxzbiksRT1FK01hdGguaW11bChpdCxobil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsaG4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFd0KXwwLG09KG09bStNYXRoLmltdWwo'@;
put 'eXQsQXQpfDApK01hdGguaW11bChNdCxXdCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwobnQsc3QpfDAsbT0obT1tK01hdGguaW11bChudCxVdCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsVXQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8'@;
put 'MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9'@;
put 'RStNYXRoLmltdWwoamUscm4pfDAsbT0obT1tK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKERlLHJuKXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bChNZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01h'@;
put 'dGguaW11bCh2ZSxmbil8MDt2YXIgTHI9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoTHI+Pj4y'@;
put 'Nil8MCxMciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaG4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKHV0LGhuKXwwLEE9TWF0aC5pbXVsKHV0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFd0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxXdCl8'@;
put 'MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxVdCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsVXQpfDAsRT1FK01hdGguaW11bChudCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFR0KXww'@;
put 'KStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUscm4pfDAsbT0obT1t'@;
put 'K01hdGguaW11bChSZSx6dCl8MCkrTWF0aC5pbXVsKEllLHJuKXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bChqZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxmbil8MDt2YXIgV2k9KGor'@;
put 'KEU9RStNYXRoLmltdWwoTWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsRT1NYXRoLmlt'@;
put 'dWwoSGUsV3QpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKHV0LFd0KXwwLEE9TWF0aC5pbXVsKHV0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsVXQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLFV0KXwwLEU9'@;
put 'RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChudCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01h'@;
put 'dGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLHJuKXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxybil8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5p'@;
put 'bXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUsZm4pfDA7dmFyIGdvPShqKyhFPUUrTWF0aC5pbXVsKGplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkr'@;
put 'KG0+Pj4xMyl8MCkrKGdvPj4+MjYpfDAsZ28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSxVdCkpK01hdGguaW11bCh1dCxzdCl8MCxBPU1hdGguaW11bCh1dCxVdCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXww'@;
put 'KStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwobnQscm4pfDAsbT0obT1t'@;
put 'K01hdGguaW11bChudCx6dCl8MCkrTWF0aC5pbXVsKFFlLHJuKXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxmbil8MDt2YXIgUW49KGor'@;
put 'KEU9RStNYXRoLmltdWwoUmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoUW4+Pj4yNil8MCxRbiY9NjcxMDg4NjMsRT1NYXRoLmlt'@;
put 'dWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKHV0LFdlKXwwLEE9TWF0aC5pbXVsKHV0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9'@;
put 'RStNYXRoLmltdWwoeXQscm4pfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHJuKXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChudCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKG50LGZuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01h'@;
put 'dGguaW11bChRZSxmbil8MDt2YXIgY289KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsoY28+Pj4y'@;
put 'Nil8MCxjbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKHV0LGh0KXwwLEE9TWF0aC5pbXVsKHV0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LHJuKXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxybil8'@;
put 'MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxmbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQsZm4pfDA7dmFyIF9vPShqKyhFPUUrTWF0aC5pbXVsKG50LFh0KXwwKXwwKSsoKDgxOTEmKG09'@;
put 'KG09bStNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKF9vPj4+MjYpfDAsX28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHJuKSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGgu'@;
put 'aW11bCh1dCxybil8MCxBPU1hdGguaW11bCh1dCx6dCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxmbil8MDt2YXIgT289KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygo'@;
put 'ODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoT28+Pj4yNil8MCxPbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLGZu'@;
put 'KSkrTWF0aC5pbXVsKHV0LGNuKXwwLEE9TWF0aC5pbXVsKHV0LGZuKTt2YXIgSG89KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVu'@;
put 'KXwwKSsobT4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjM7dmFyIHRpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwodXQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bCh1dCxlbikp'@;
put 'KyhtPj4+MTMpfDApKyh0aT4+PjI2KXwwLHRpJj02NzEwODg2MyxIWzBdPWhvLEhbMV09TWksSFsyXT12cixIWzNdPVduLEhbNF09JGksSFs1XT1laSxIWzZdPVFyLEhbN109VmksSFs4XT1OaSxIWzldPUlvLEhbMTBdPUxyLEhbMTFdPVdpLEhbMTJdPWdvLEhbMTNdPVFuLEhbMTRdPWNvLEhb'@;
put 'MTVdPV9vLEhbMTZdPU9vLEhbMTddPUhvLEhbMThdPXRpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnBy'@;
put 'b3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBYKFYscCxiKXtiLm5lZ2F0aXZlPXAu'@;
put 'bmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0'@;
put 'aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWos'@;
put 'eD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCkt'@;
put 'MSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9'@;
put 'LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2'@;
put 'YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxvZT0wO29lPFQ7b2UrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W29lK3dlXSxKZT1DW29lK3dlXSxhdD14W29l'@;
put 'K3dlK2pdLE1lPUNbb2Urd2Ural0sdmU9dGUqYXQtc2UqTWU7TWU9dGUqTWUrc2UqYXQseFtvZSt3ZV09VWUrKGF0PXZlKSxDW29lK3dlXT1KZStNZSx4W29lK3dlK2pdPVVlLWF0LENbb2Urd2Ural09SmUtTWUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxK'@;
put 'LnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2'@;
put 'YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5'@;
put 'MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0gr'@;
put 'Kyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8'@;
put 'cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09'@;
put 'bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLG9lPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50'@;
put 'cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxvZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSpvZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSpvZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29u'@;
put 'anVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnBy'@;
put 'b3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29y'@;
put 'ZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCks'@;
put 'ZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1'@;
put 'cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90'@;
put 'eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2'@;
put 'O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIo'@;
put 'KTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYt'@;
put 'YjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtm'@;
put 'b3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGco'@;
put 'MD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgp'@;
put 'LGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDtt'@;
put 'PHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIG9lPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndv'@;
put 'cmRzW21dPUE8PDI2LVR8b2U+Pj5ULEE9b2Uman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4'@;
put 'KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxu'@;
put 'KHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIi'@;
put 'PT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIp'@;
put 'LzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlz'@;
put 'Lmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5'@;
put 'cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRp'@;
put 'dmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMu'@;
put 'd29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJl'@;
put 'ciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVu'@;
put 'Z3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1'@;
put 'cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtm'@;
put 'b3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShI'@;
put 'PSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRz'@;
put 'W1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkm'@;
put 'JihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxl'@;
put 'bmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBvZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09b2UubmVnYXRpdmUmJihDPW9lLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0'@;
put 'ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0'@;
put 'aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkp'@;
put 'LHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQu'@;
put 'bmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2'@;
put 'ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRo'@;
put 'aXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4o'@;
put 'cC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEx'@;
put 'KS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAh'@;
put 'PT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlw'@;
put 'ZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMp'@;
put 'O2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xv'@;
put 'bmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygw'@;
put 'KSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBvZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmb2U8'@;
put 'MjY7KytvZSx0ZTw8PTEpO2lmKG9lPjApZm9yKGIuaXVzaHJuKG9lKTtvZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7Kytz'@;
put 'ZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3Vi'@;
put 'KGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgb2UsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/'@;
put 'Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0g'@;
put 'PjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIu'@;
put 'aXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4ob2U9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmb2UuaWFkZChwKSxvZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1pl'@;
put 'cm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4o'@;
put 'KTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09'@;
put 'ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlw'@;
put 'ZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgr'@;
put 'MSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMu'@;
put 'bGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtp'@;
put 'ZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAw'@;
put 'IT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTty'@;
put 'ZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7'@;
put 'dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXty'@;
put 'ZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09'@;
put 'PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHAp'@;
put 'PD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1'@;
put 'bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlw'@;
put 'ZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0'@;
put 'aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJu'@;
put 'IGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlz'@;
put 'LnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVy'@;
put 'biBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp'@;
put 'cy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBl'@;
put 'LnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGco'@;
put 'dGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEo'@;
put 'dGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJv'@;
put 'dG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGco'@;
put 'dGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0'@;
put 'aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2Uo'@;
put 'KXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZm'@;
put 'IGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5w'@;
put 'cmltZT1udWxsfWZ1bmN0aW9uIHplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRo'@;
put 'aXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlz'@;
put 'Lm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRo'@;
put 'aXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnAp'@;
put 'OnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnBy'@;
put 'b3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEp'@;
put 'O3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5n'@;
put 'dGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4'@;
put 'NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxL'@;
put 'PWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rp'@;
put 'b24ocCl7aWYocmVbcF0pcmV0dXJuIHJlW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUg'@;
put 'IitwKTtiPW5ldyBUZX1yZXR1cm4gcmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnBy'@;
put 'b3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmlt'@;
put 'b2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMu'@;
put 'bS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlh'@;
put 'ZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVy'@;
put 'biB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlw'@;
put 'ZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1m'@;
put 'dW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVs'@;
put 'KHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAs'@;
put 'eCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlz'@;
put 'Lm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLG9lPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1U'@;
put 'OzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7b2U9b2UucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11'@;
put 'bChBKSxzZT1VZX1yZXR1cm4gb2V9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9'@;
put 'ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3Ro'@;
put 'O1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sb2U9bS0xO29lPj0wO29lLS0pe3ZhciB0ZT1BPj5vZSYxO0gh'@;
put 'PT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1vZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBi'@;
put 'PXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyB6ZShwKX0sQih6ZSxTZSksemUu'@;
put 'cHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LHpl'@;
put 'LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwo'@;
put 'dGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIp'@;
put 'e2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlz'@;
put 'LnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMu'@;
put 'bSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT1fLm5tZCh1ZSksdGhpcyl9LDk3NDY6dWU9PntmdW5jdGlvbiBxKF8sSSl7aWYoIV8pdGhyb3cgbmV3IEVycm9yKEl8fCJBc3NlcnRpb24gZmFpbGVkIil9dWUuZXhwb3J0cz1xLHEuZXF1YWw9ZnVuY3Rpb24oSSx5LGcpe2lm'@;
put 'KEkhPXkpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkOiAiK0krIiAhPSAiK3kpfX0sNDUwNDoodWUscSk9PnsidXNlIHN0cmljdCI7dmFyIF89cTtmdW5jdGlvbiB5KEIpe3JldHVybiAxPT09Qi5sZW5ndGg/IjAiK0I6Qn1mdW5jdGlvbiBnKEIpe2Zvcih2YXIgdz0iIixQ'@;
put 'PTA7UDxCLmxlbmd0aDtQKyspdys9eShCW1BdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHd9Xy50b0FycmF5PWZ1bmN0aW9uIEkoQix3KXtpZihBcnJheS5pc0FycmF5KEIpKXJldHVybiBCLnNsaWNlKCk7aWYoIUIpcmV0dXJuW107dmFyIFA9W107aWYoInN0cmluZyIhPXR5cGVvZiBCKXtmb3Io'@;
put 'dmFyIEY9MDtGPEIubGVuZ3RoO0YrKylQW0ZdPTB8QltGXTtyZXR1cm4gUH1pZigiaGV4Ij09PXcpZm9yKChCPUIucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoQj0iMCIrQiksRj0wO0Y8Qi5sZW5ndGg7Ris9MilQLnB1c2gocGFyc2VJbnQoQltGXStCW0YrMV0s'@;
put 'MTYpKTtlbHNlIGZvcihGPTA7RjxCLmxlbmd0aDtGKyspe3ZhciBPPUIuY2hhckNvZGVBdChGKSx6PU8+PjgsTj0yNTUmTzt6P1AucHVzaCh6LE4pOlAucHVzaChOKX1yZXR1cm4gUH0sXy56ZXJvMj15LF8udG9IZXg9ZyxfLmVuY29kZT1mdW5jdGlvbih3LFApe3JldHVybiJoZXgiPT09UD9n'@;
put 'KHcpOnd9fSw0MjQ0OnVlPT57InVzZSBzdHJpY3QiO3ZhciBxPWZ1bmN0aW9uKF8pe3JldHVybiBfIT1ffTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEkseSl7cmV0dXJuIDA9PT1JJiYwPT09eT8xL0k9PTEveTohIShJPT09eXx8cShJKSYmcSh5KSl9fSw2MDk6KHVlLHEsXyk9PnsidXNlIHN0cmlj'@;
put 'dCI7dmFyIEk9Xyg0Mjg5KSx5PV8oNTU1OSksZz1fKDQyNDQpLEI9Xyg1NjI0KSx3PV8oMjI4MSksUD15KEIoKSxPYmplY3QpO0koUCx7Z2V0UG9seWZpbGw6QixpbXBsZW1lbnRhdGlvbjpnLHNoaW06d30pLHVlLmV4cG9ydHM9UH0sNTYyNDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'ST1fKDQyNDQpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpJfX0sMjI4MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDU2MjQpLHk9Xyg0Mjg5KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIEI9SSgp'@;
put 'O3JldHVybiB5KE9iamVjdCx7aXM6Qn0se2lzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5pcyE9PUJ9fSksQn19LDg5ODc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk7aWYoIU9iamVjdC5rZXlzKXt2YXIgeT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGc9T2JqZWN0'@;
put 'LnByb3RvdHlwZS50b1N0cmluZyxCPV8oMTQxNCksdz1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLFA9IXcuY2FsbCh7dG9TdHJpbmc6bnVsbH0sInRvU3RyaW5nIiksRj13LmNhbGwoZnVuY3Rpb24oKXt9LCJwcm90b3R5cGUiKSxPPVsidG9TdHJpbmciLCJ0b0xvY2Fs'@;
put 'ZVN0cmluZyIsInZhbHVlT2YiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNvbnN0cnVjdG9yIl0sej1mdW5jdGlvbihVKXt2YXIgVz1VLmNvbnN0cnVjdG9yO3JldHVybiBXJiZXLnByb3RvdHlwZT09PVV9LE49eyRhcHBsaWNhdGlv'@;
put 'bkNhY2hlOiEwLCRjb25zb2xlOiEwLCRleHRlcm5hbDohMCwkZnJhbWU6ITAsJGZyYW1lRWxlbWVudDohMCwkZnJhbWVzOiEwLCRpbm5lckhlaWdodDohMCwkaW5uZXJXaWR0aDohMCwkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiEwLCRvbm1vemZ1bGxzY3JlZW5lcnJvcjohMCwkb3V0ZXJIZWln'@;
put 'aHQ6ITAsJG91dGVyV2lkdGg6ITAsJHBhZ2VYT2Zmc2V0OiEwLCRwYWdlWU9mZnNldDohMCwkcGFyZW50OiEwLCRzY3JvbGxMZWZ0OiEwLCRzY3JvbGxUb3A6ITAsJHNjcm9sbFg6ITAsJHNjcm9sbFk6ITAsJHNlbGY6ITAsJHdlYmtpdEluZGV4ZWREQjohMCwkd2Via2l0U3RvcmFnZUluZm86'@;
put 'ITAsJHdpbmRvdzohMH0sTD1mdW5jdGlvbigpe2lmKHR5cGVvZiB3aW5kb3c+InUiKXJldHVybiExO2Zvcih2YXIgVSBpbiB3aW5kb3cpdHJ5e2lmKCFOWyIkIitVXSYmeS5jYWxsKHdpbmRvdyxVKSYmbnVsbCE9PXdpbmRvd1tVXSYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3dbVV0pdHJ5e3oo'@;
put 'd2luZG93W1VdKX1jYXRjaHtyZXR1cm4hMH19Y2F0Y2h7cmV0dXJuITB9cmV0dXJuITF9KCk7ST1mdW5jdGlvbihXKXt2YXIgWT1udWxsIT09VyYmIm9iamVjdCI9PXR5cGVvZiBXLFg9IltvYmplY3QgRnVuY3Rpb25dIj09PWcuY2FsbChXKSxlZT1CKFcpLEo9WSYmIltvYmplY3QgU3RyaW5n'@;
put 'XSI9PT1nLmNhbGwoVykscmU9W107aWYoIVkmJiFYJiYhZWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmtleXMgY2FsbGVkIG9uIGEgbm9uLW9iamVjdCIpO3ZhciBpZT1GJiZYO2lmKEomJlcubGVuZ3RoPjAmJiF5LmNhbGwoVywwKSlmb3IodmFyIGxlPTA7bGU8Vy5sZW5ndGg7Kyts'@;
put 'ZSlyZS5wdXNoKFN0cmluZyhsZSkpO2lmKGVlJiZXLmxlbmd0aD4wKWZvcih2YXIgbWU9MDttZTxXLmxlbmd0aDsrK21lKXJlLnB1c2goU3RyaW5nKG1lKSk7ZWxzZSBmb3IodmFyIF9lIGluIFcpKCFpZXx8InByb3RvdHlwZSIhPT1fZSkmJnkuY2FsbChXLF9lKSYmcmUucHVzaChTdHJpbmco'@;
put 'X2UpKTtpZihQKWZvcih2YXIgVGU9ZnVuY3Rpb24oVSl7aWYodHlwZW9mIHdpbmRvdz4idSJ8fCFMKXJldHVybiB6KFUpO3RyeXtyZXR1cm4geihVKX1jYXRjaHtyZXR1cm4hMX19KFcpLFNlPTA7U2U8Ty5sZW5ndGg7KytTZSkoIVRlfHwiY29uc3RydWN0b3IiIT09T1tTZV0pJiZ5LmNhbGwo'@;
put 'VyxPW1NlXSkmJnJlLnB1c2goT1tTZV0pO3JldHVybiByZX19dWUuZXhwb3J0cz1JfSwyMjE1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPUFycmF5LnByb3RvdHlwZS5zbGljZSx5PV8oMTQxNCksZz1PYmplY3Qua2V5cyxCPWc/ZnVuY3Rpb24oRil7cmV0dXJuIGcoRil9Ol8oODk4'@;
put 'Nyksdz1PYmplY3Qua2V5cztCLnNoaW09ZnVuY3Rpb24oKXtpZihPYmplY3Qua2V5cyl7dmFyIEY9ZnVuY3Rpb24oKXt2YXIgTz1PYmplY3Qua2V5cyhhcmd1bWVudHMpO3JldHVybiBPJiZPLmxlbmd0aD09PWFyZ3VtZW50cy5sZW5ndGh9KDEsMik7Rnx8KE9iamVjdC5rZXlzPWZ1bmN0aW9u'@;
put 'KHope3JldHVybiB5KHopP3coSS5jYWxsKHopKTp3KHopfSl9ZWxzZSBPYmplY3Qua2V5cz1CO3JldHVybiBPYmplY3Qua2V5c3x8Qn0sdWUuZXhwb3J0cz1CfSwxNDE0OnVlPT57InVzZSBzdHJpY3QiO3ZhciBxPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dWUuZXhwb3J0cz1mdW5jdGlv'@;
put 'bihJKXt2YXIgeT1xLmNhbGwoSSksZz0iW29iamVjdCBBcmd1bWVudHNdIj09PXk7cmV0dXJuIGd8fChnPSJbb2JqZWN0IEFycmF5XSIhPT15JiZudWxsIT09SSYmIm9iamVjdCI9PXR5cGVvZiBJJiYibnVtYmVyIj09dHlwZW9mIEkubGVuZ3RoJiZJLmxlbmd0aD49MCYmIltvYmplY3QgRnVu'@;
put 'Y3Rpb25dIj09PXEuY2FsbChJLmNhbGxlZSkpLGd9fSwyODM3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjIxNSkseT1fKDU0MTkpKCksZz1fKDczNzkpLEI9Xyg4ODkyKSx3PWcoIkFycmF5LnByb3RvdHlwZS5wdXNoIiksUD1nKCJPYmplY3QucHJvdG90eXBlLnByb3BlcnR5'@;
put 'SXNFbnVtZXJhYmxlIiksRj15P0IuZ2V0T3duUHJvcGVydHlTeW1ib2xzOm51bGw7dWUuZXhwb3J0cz1mdW5jdGlvbih6LE4pe2lmKG51bGw9PXopdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dmFyIEw9Qih6KTtpZigxPT09YXJndW1lbnRzLmxlbmd0'@;
put 'aClyZXR1cm4gTDtmb3IodmFyIEs9MTtLPGFyZ3VtZW50cy5sZW5ndGg7KytLKXt2YXIgVT1CKGFyZ3VtZW50c1tLXSksVz1JKFUpLFk9eSYmKEIuZ2V0T3duUHJvcGVydHlTeW1ib2xzfHxGKTtpZihZKWZvcih2YXIgWD1ZKFUpLGVlPTA7ZWU8WC5sZW5ndGg7KytlZSl7dmFyIEo9WFtlZV07'@;
put 'UChVLEopJiZ3KFcsSil9Zm9yKHZhciByZT0wO3JlPFcubGVuZ3RoOysrcmUpe3ZhciBpZT1XW3JlXTtQKFUsaWUpJiYoTFtpZV09VVtpZV0pfX1yZXR1cm4gTH19LDgxNjI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyODM3KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKCl7aWYoIU9iamVjdC5hc3NpZ24pcmV0dXJuITE7Zm9yKHZhciBCPSJhYmNkZWZnaGlqa2xtbm9wcXJzdCIsdz1CLnNwbGl0KCIiKSxQPXt9LEY9MDtGPHcubGVuZ3RoOysrRilQW3dbRl1dPXdbRl07dmFyIE89T2JqZWN0LmFzc2lnbih7fSxQKSx6'@;
put 'PSIiO2Zvcih2YXIgTiBpbiBPKXorPU47cmV0dXJuIEIhPT16fSgpfHxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNzaWdufHwhT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKXJldHVybiExO3ZhciBCPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7MToyfSk7dHJ5e09iamVjdC5hc3NpZ24oQiwi'@;
put 'eHkiKX1jYXRjaHtyZXR1cm4ieSI9PT1CWzFdfXJldHVybiExfSgpP0k6T2JqZWN0LmFzc2lnbn19LDc0MzU6KHVlLHEpPT57cS5lbmRpYW5uZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIkxFIn0scS5ob3N0bmFtZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbG9jYXRpb248InUiP2xvY2F0aW9u'@;
put 'Lmhvc3RuYW1lOiIifSxxLmxvYWRhdmc9ZnVuY3Rpb24oKXtyZXR1cm5bXX0scS51cHRpbWU9ZnVuY3Rpb24oKXtyZXR1cm4gMH0scS5mcmVlbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LHEudG90YWxtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxV'@;
put 'RX0scS5jcHVzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHEudHlwZT1mdW5jdGlvbigpe3JldHVybiJCcm93c2VyIn0scS5yZWxlYXNlPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBuYXZpZ2F0b3I8InUiP25hdmlnYXRvci5hcHBWZXJzaW9uOiIifSxxLm5ldHdvcmtJbnRlcmZhY2VzPXEuZ2V0'@;
put 'TmV0d29ya0ludGVyZmFjZXM9ZnVuY3Rpb24oKXtyZXR1cm57fX0scS5hcmNoPWZ1bmN0aW9uKCl7cmV0dXJuImphdmFzY3JpcHQifSxxLnBsYXRmb3JtPWZ1bmN0aW9uKCl7cmV0dXJuImJyb3dzZXIifSxxLnRtcGRpcj1xLnRtcERpcj1mdW5jdGlvbigpe3JldHVybiIvdG1wIn0scS5FT0w9'@;
put 'IlxuIixxLmhvbWVkaXI9ZnVuY3Rpb24oKXtyZXR1cm4iLyJ9fSwyODE4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oOTgwOSk7cS5jZXJ0aWZpY2F0ZT1fKDE5MzQpO3ZhciB5PUkuZGVmaW5lKCJSU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMu'@;
put 'a2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUV4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaW1lMSIpLmludCgpLHRoaXMua2V5KCJwcmltZTIiKS5pbnQoKSx0'@;
put 'aGlzLmtleSgiZXhwb25lbnQxIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MiIpLmludCgpLHRoaXMua2V5KCJjb2VmZmljaWVudCIpLmludCgpKX0pO3EuUlNBUHJpdmF0ZUtleT15O3ZhciBnPUkuZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhp'@;
put 'cy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtxLlJTQVB1YmxpY0tleT1nO3ZhciBCPUkuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmpp'@;
put 'ZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2VxKCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgp'@;
put 'KS5vcHRpb25hbCgpKX0pLHc9SS5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTtxLlB1YmxpY0tleT13O3ZhciBQ'@;
put 'PUkuZGVmaW5lKCJQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7cS5Qcml2YXRlS2V5PVA7'@;
put 'dmFyIEY9SS5kZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5zZXEoKS5vYmoodGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlzLmtleSgia2Rl'@;
put 'Iikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgic2FsdCIpLm9jdHN0cigpLHRoaXMua2V5KCJpdGVycyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnbyIp'@;
put 'Lm9iamlkKCksdGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7cS5FbmNyeXB0ZWRQcml2YXRlS2V5PUY7dmFyIE89SS5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5r'@;
put 'ZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSx0aGlzLmtleSgicHViX2tleSIpLmludCgpLHRoaXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO3EuRFNBUHJpdmF0ZUtleT1PLHEuRFNBcGFyYW09'@;
put 'SS5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgej1JLmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtuYW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSksTj1JLmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5jdGlvbigpe3Ro'@;
put 'aXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKHopLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgpLmV4cGxpY2l0'@;
put 'KDEpLmJpdHN0cigpKX0pO3EuRUNQcml2YXRlS2V5PU4scS5zaWduYXR1cmU9SS5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LDE5MzQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7'@;
put 'dmFyIEk9Xyg5ODA5KSx5PUkuZGVmaW5lKCJUaW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHt1dGNUaW1lOnRoaXMudXRjdGltZSgpLGdlbmVyYWxUaW1lOnRoaXMuZ2VudGltZSgpfSl9KSxnPUkuZGVmaW5lKCJBdHRyaWJ1dGVUeXBlVmFsdWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5v'@;
put 'YmoodGhpcy5rZXkoInR5cGUiKS5vYmppZCgpLHRoaXMua2V5KCJ2YWx1ZSIpLmFueSgpKX0pLEI9SS5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoInBhcmFtZXRlcnMi'@;
put 'KS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSl9KSx3PUkuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0UHVibGlj'@;
put 'S2V5IikuYml0c3RyKCkpfSksUD1JLmRlZmluZSgiUmVsYXRpdmVEaXN0aW5ndWlzaGVkTmFtZSIsZnVuY3Rpb24oKXt0aGlzLnNldG9mKGcpfSksRj1JLmRlZmluZSgiUkROU2VxdWVuY2UiLGZ1bmN0aW9uKCl7dGhpcy5zZXFvZihQKX0pLE89SS5kZWZpbmUoIk5hbWUiLGZ1bmN0aW9uKCl7'@;
put 'dGhpcy5jaG9pY2Uoe3JkblNlcXVlbmNlOnRoaXMudXNlKEYpfSl9KSx6PUkuZGVmaW5lKCJWYWxpZGl0eSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgibm90QmVmb3JlIikudXNlKHkpLHRoaXMua2V5KCJub3RBZnRlciIpLnVzZSh5KSl9KSxOPUkuZGVmaW5lKCJFeHRl'@;
put 'bnNpb24iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImV4dG5JRCIpLm9iamlkKCksdGhpcy5rZXkoImNyaXRpY2FsIikuYm9vbCgpLmRlZighMSksdGhpcy5rZXkoImV4dG5WYWx1ZSIpLm9jdHN0cigpKX0pLEw9SS5kZWZpbmUoIlRCU0NlcnRpZmljYXRlIixmdW5jdGlv'@;
put 'bigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuZXhwbGljaXQoMCkuaW50KCkub3B0aW9uYWwoKSx0aGlzLmtleSgic2VyaWFsTnVtYmVyIikuaW50KCksdGhpcy5rZXkoInNpZ25hdHVyZSIpLnVzZShCKSx0aGlzLmtleSgiaXNzdWVyIikudXNlKE8pLHRoaXMua2V5KCJ2'@;
put 'YWxpZGl0eSIpLnVzZSh6KSx0aGlzLmtleSgic3ViamVjdCIpLnVzZShPKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleUluZm8iKS51c2UodyksdGhpcy5rZXkoImlzc3VlclVuaXF1ZUlEIikuaW1wbGljaXQoMSkuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgic3ViamVjdFVuaXF1'@;
put 'ZUlEIikuaW1wbGljaXQoMikuYml0c3RyKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiZXh0ZW5zaW9ucyIpLmV4cGxpY2l0KDMpLnNlcW9mKE4pLm9wdGlvbmFsKCkpfSksSz1JLmRlZmluZSgiWDUwOUNlcnRpZmljYXRlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0YnND'@;
put 'ZXJ0aWZpY2F0ZSIpLnVzZShMKSx0aGlzLmtleSgic2lnbmF0dXJlQWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzaWduYXR1cmVWYWx1ZSIpLmJpdHN0cigpKX0pO3VlLmV4cG9ydHM9S30sNzYzMToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST0vUHJvYy1UeXBlOiA0LEVOQ1JZ'@;
put 'UFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxyXSsvbSx5PS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxnPS9eLS0tLS1CRUdJTiAo'@;
put 'KD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLEI9XygzMDQ4KSx3PV8oNDY5NiksUD1fKDk1MDkpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYsTyl7dmFyIEwsej1GLnRvU3RyaW5nKCksTj16Lm1hdGNoKEkpO2lm'@;
put 'KE4pe3ZhciBVPSJhZXMiK05bMV0sVz1QLmZyb20oTlsyXSwiaGV4IiksWT1QLmZyb20oTlszXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpLFg9QihPLFcuc2xpY2UoMCw4KSxwYXJzZUludChOWzFdLDEwKSkua2V5LGVlPVtdLEo9dy5jcmVhdGVEZWNpcGhlcml2KFUsWCxXKTtl'@;
put 'ZS5wdXNoKEoudXBkYXRlKFkpKSxlZS5wdXNoKEouZmluYWwoKSksTD1QLmNvbmNhdChlZSl9ZWxzZXt2YXIgSz16Lm1hdGNoKGcpO0w9UC5mcm9tKEtbMl0ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOnoubWF0Y2goeSlbMV0sZGF0YTpMfX19LDk4MDoodWUs'@;
put 'cSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDI4MTgpLHk9XygyNTYyKSxnPV8oNzYzMSksQj1fKDQ2OTYpLHc9Xyg1NjMyKSxQPV8oOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIE8oeil7dmFyIE47Im9iamVjdCI9PXR5cGVvZiB6JiYhUC5pc0J1ZmZlcih6KSYmKE49ei5wYXNzcGhyYXNlLHo9'@;
put 'ei5rZXkpLCJzdHJpbmciPT10eXBlb2YgeiYmKHo9UC5mcm9tKHopKTt2YXIgVyxZLEw9Zyh6LE4pLEs9TC50YWcsVT1MLmRhdGE7c3dpdGNoKEspe2Nhc2UiQ0VSVElGSUNBVEUiOlk9SS5jZXJ0aWZpY2F0ZS5kZWNvZGUoVSwiZGVyIikudGJzQ2VydGlmaWNhdGUuc3ViamVjdFB1YmxpY0tl'@;
put 'eUluZm87Y2FzZSJQVUJMSUMgS0VZIjpzd2l0Y2goWXx8KFk9SS5QdWJsaWNLZXkuZGVjb2RlKFUsImRlciIpKSxXPVkuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBJLlJTQVB1YmxpY0tleS5kZWNvZGUoWS5zdWJqZWN0'@;
put 'UHVibGljS2V5LmRhdGEsImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybiBZLnN1YmplY3RQcml2YXRlS2V5PVkuc3ViamVjdFB1YmxpY0tleSx7dHlwZToiZWMiLGRhdGE6WX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFkuYWxnb3JpdGhtLnBhcmFtcy5wdWJf'@;
put 'a2V5PUkuRFNBcGFyYW0uZGVjb2RlKFkuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOlkuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrVyl9Y2FzZSJFTkNSWVBURUQgUFJJVkFURSBLRVkiOlU9'@;
put 'ZnVuY3Rpb24gRih6LE4pe3ZhciBMPXouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LEs9cGFyc2VJbnQoei5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLFU9eVt6LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpv'@;
put 'aW4oIi4iKV0sVz16LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixZPXouc3ViamVjdFByaXZhdGVLZXksWD1wYXJzZUludChVLnNwbGl0KCItIilbMV0sMTApLzgsZWU9dy5wYmtkZjJTeW5jKE4sTCxLLFgsInNoYTEiKSxKPUIuY3JlYXRlRGVjaXBoZXJpdihVLGVlLFcpLHJlPVtdO3Jl'@;
put 'dHVybiByZS5wdXNoKEoudXBkYXRlKFkpKSxyZS5wdXNoKEouZmluYWwoKSksUC5jb25jYXQocmUpfShVPUkuRW5jcnlwdGVkUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIiksTik7Y2FzZSJQUklWQVRFIEtFWSI6c3dpdGNoKFc9KFk9SS5Qcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKSkuYWxn'@;
put 'b3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBJLlJTQVByaXZhdGVLZXkuZGVjb2RlKFkuc3ViamVjdFByaXZhdGVLZXksImRlciIpO2Nhc2UiMS4yLjg0MC4xMDA0NS4yLjEiOnJldHVybntjdXJ2ZTpZLmFsZ29yaXRobS5jdXJ2'@;
put 'ZSxwcml2YXRlS2V5OkkuRUNQcml2YXRlS2V5LmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKS5wcml2YXRlS2V5fTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gWS5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5PUkuRFNBcGFyYW0uZGVjb2RlKFkuc3ViamVjdFByaXZh'@;
put 'dGVLZXksImRlciIpLHt0eXBlOiJkc2EiLHBhcmFtczpZLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSBpZCAiK1cpfWNhc2UiUlNBIFBVQkxJQyBLRVkiOnJldHVybiBJLlJTQVB1YmxpY0tleS5kZWNvZGUoVSwiZGVyIik7Y2FzZSJSU0Eg'@;
put 'UFJJVkFURSBLRVkiOnJldHVybiBJLlJTQVByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpO2Nhc2UiRFNBIFBSSVZBVEUgS0VZIjpyZXR1cm57dHlwZToiZHNhIixwYXJhbXM6SS5EU0FQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKX07Y2FzZSJFQyBQUklWQVRFIEtFWSI6cmV0dXJue2N1cnZl'@;
put 'OihVPUkuRUNQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKSkucGFyYW1ldGVycy52YWx1ZSxwcml2YXRlS2V5OlUucHJpdmF0ZUtleX07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IHR5cGUgIitLKX19Ty5zaWduYXR1cmU9SS5zaWduYXR1cmUsdWUuZXhwb3J0cz1PfSwx'@;
put 'NzI1OnVlPT57dWUuZXhwb3J0cz0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihfLEkpe18uc3VwZXJfPUksXy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShJLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOl8sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxj'@;
put 'b25maWd1cmFibGU6ITB9fSl9OmZ1bmN0aW9uKF8sSSl7Xy5zdXBlcl89STt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9SS5wcm90b3R5cGUsXy5wcm90b3R5cGU9bmV3IHksXy5wcm90b3R5cGUuY29uc3RydWN0b3I9X319LDI5NzQ6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8p'@;
put 'e3JldHVybiBfJiYib2JqZWN0Ij09dHlwZW9mIF8mJiJmdW5jdGlvbiI9PXR5cGVvZiBfLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBfLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBfLnJlYWRVSW50OH19LDgwNTk6KHVlLHEsXyk9Pnt2YXIgST1fKDQxNTUpLHk9Xyg1MTA4KSxnPS8lW3Nk'@;
put 'aiVdL2c7cS5mb3JtYXQ9ZnVuY3Rpb24oRSl7aWYoIWxlKEUpKXtmb3IodmFyIG09W10sQT0wO0E8YXJndW1lbnRzLmxlbmd0aDtBKyspbS5wdXNoKFAoYXJndW1lbnRzW0FdKSk7cmV0dXJuIG0uam9pbigiICIpfUE9MTtmb3IodmFyIG9lPWFyZ3VtZW50cyx0ZT1vZS5sZW5ndGgsc2U9U3Ry'@;
put 'aW5nKEUpLnJlcGxhY2UoZyxmdW5jdGlvbihVZSl7aWYoIiUlIj09PVVlKXJldHVybiIlIjtpZihBPj10ZSlyZXR1cm4gVWU7c3dpdGNoKFVlKXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKG9lW0ErK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIob2VbQSsrXSk7Y2FzZSIlaiI6dHJ5e3JldHVy'@;
put 'biBKU09OLnN0cmluZ2lmeShvZVtBKytdKX1jYXRjaHtyZXR1cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gVWV9fSksd2U9b2VbQV07QTx0ZTt3ZT1vZVsrK0FdKUood2UpfHwhU2Uod2UpP3NlKz0iICIrd2U6c2UrPSIgIitQKHdlKTtyZXR1cm4gc2V9LHEuZGVwcmVjYXRlPWZ1bmN0'@;
put 'aW9uKEUsbSl7aWYoX2UoXy5nLnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBxLmRlcHJlY2F0ZShFLG0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYoITA9PT1JLm5vRGVwcmVjYXRpb24pcmV0dXJuIEU7dmFyIEE9ITE7cmV0dXJuIGZ1bmN0aW9uIG9lKCl7aWYoIUEpe2lm'@;
put 'KEkudGhyb3dEZXByZWNhdGlvbil0aHJvdyBuZXcgRXJyb3IobSk7SS50cmFjZURlcHJlY2F0aW9uP3kudHJhY2UobSk6eS5lcnJvcihtKSxBPSEwfXJldHVybiBFLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciB3LEI9e307ZnVuY3Rpb24gUChFLG0pe3ZhciBBPXtzZWVuOltdLHN0eWxp'@;
put 'emU6T307cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihBLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKEEuY29sb3JzPWFyZ3VtZW50c1szXSksZWUobSk/QS5zaG93SGlkZGVuPW06bSYmcS5fZXh0ZW5kKEEsbSksX2UoQS5zaG93SGlkZGVuKSYmKEEuc2hv'@;
put 'd0hpZGRlbj0hMSksX2UoQS5kZXB0aCkmJihBLmRlcHRoPTIpLF9lKEEuY29sb3JzKSYmKEEuY29sb3JzPSExKSxfZShBLmN1c3RvbUluc3BlY3QpJiYoQS5jdXN0b21JbnNwZWN0PSEwKSxBLmNvbG9ycyYmKEEuc3R5bGl6ZT1GKSxOKEEsRSxBLmRlcHRoKX1mdW5jdGlvbiBGKEUsbSl7dmFy'@;
put 'IEE9UC5zdHlsZXNbbV07cmV0dXJuIEE/Ilx4MWJbIitQLmNvbG9yc1tBXVswXSsibSIrRSsiXHgxYlsiK1AuY29sb3JzW0FdWzFdKyJtIjpFfWZ1bmN0aW9uIE8oRSxtKXtyZXR1cm4gRX1mdW5jdGlvbiBOKEUsbSxBKXtpZihFLmN1c3RvbUluc3BlY3QmJm0mJnAobS5pbnNwZWN0KSYmbS5p'@;
put 'bnNwZWN0IT09cS5pbnNwZWN0JiYoIW0uY29uc3RydWN0b3J8fG0uY29uc3RydWN0b3IucHJvdG90eXBlIT09bSkpe3ZhciBvZT1tLmluc3BlY3QoQSxFKTtyZXR1cm4gbGUob2UpfHwob2U9TihFLG9lLEEpKSxvZX12YXIgdGU9ZnVuY3Rpb24gTChFLG0pe2lmKF9lKG0pKXJldHVybiBFLnN0'@;
put 'eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKGxlKG0pKXt2YXIgQT0iJyIrSlNPTi5zdHJpbmdpZnkobSkucmVwbGFjZSgvXiJ8IiQvZywiIikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gRS5zdHlsaXplKEEsInN0cmluZyIpfXJl'@;
put 'dHVybiBpZShtKT9FLnN0eWxpemUoIiIrbSwibnVtYmVyIik6ZWUobSk/RS5zdHlsaXplKCIiK20sImJvb2xlYW4iKTpKKG0pP0Uuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2b2lkIDB9KEUsbSk7aWYodGUpcmV0dXJuIHRlO3ZhciBzZT1PYmplY3Qua2V5cyhtKSx3ZT1mdW5jdGlvbiB6KEUp'@;
put 'e3ZhciBtPXt9O3JldHVybiBFLmZvckVhY2goZnVuY3Rpb24oQSxvZSl7bVtBXT0hMH0pLG19KHNlKTtpZihFLnNob3dIaWRkZW4mJihzZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhtKSksVihtKSYmKHNlLmluZGV4T2YoIm1lc3NhZ2UiKT49MHx8c2UuaW5kZXhPZigiZGVzY3JpcHRp'@;
put 'b24iKT49MCkpcmV0dXJuIEsobSk7aWYoMD09PXNlLmxlbmd0aCl7aWYocChtKSlyZXR1cm4gRS5zdHlsaXplKCJbRnVuY3Rpb24iKyhtLm5hbWU/IjogIittLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKFRlKG0pKXJldHVybiBFLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmlu'@;
put 'Zy5jYWxsKG0pLCJyZWdleHAiKTtpZih6ZShtKSlyZXR1cm4gRS5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobSksImRhdGUiKTtpZihWKG0pKXJldHVybiBLKG0pfXZhciBYZSxKZT0iIixhdD0hMSxNZT1bInsiLCJ9Il07cmV0dXJuIFgobSkmJihhdD0hMCxNZT1bIlsi'@;
put 'LCJdIl0pLHAobSkmJihKZT0iIFtGdW5jdGlvbiIrKG0ubmFtZT8iOiAiK20ubmFtZToiIikrIl0iKSxUZShtKSYmKEplPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobSkpLHplKG0pJiYoSmU9IiAiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwobSkpLFYobSkm'@;
put 'JihKZT0iICIrSyhtKSksMCE9PXNlLmxlbmd0aHx8YXQmJjAhPW0ubGVuZ3RoP0E8MD9UZShtKT9FLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJyZWdleHAiKTpFLnN0eWxpemUoIltPYmplY3RdIiwic3BlY2lhbCIpOihFLnNlZW4ucHVzaChtKSxYZT1hdD9m'@;
put 'dW5jdGlvbiBVKEUsbSxBLG9lLHRlKXtmb3IodmFyIHNlPVtdLHdlPTAsVWU9bS5sZW5ndGg7d2U8VWU7Kyt3ZSlqKG0sU3RyaW5nKHdlKSk/c2UucHVzaChXKEUsbSxBLG9lLFN0cmluZyh3ZSksITApKTpzZS5wdXNoKCIiKTtyZXR1cm4gdGUuZm9yRWFjaChmdW5jdGlvbihKZSl7SmUubWF0'@;
put 'Y2goL15cZCskLyl8fHNlLnB1c2goVyhFLG0sQSxvZSxKZSwhMCkpfSksc2V9KEUsbSxBLHdlLHNlKTpzZS5tYXAoZnVuY3Rpb24oamUpe3JldHVybiBXKEUsbSxBLHdlLGplLGF0KX0pLEUuc2Vlbi5wb3AoKSxmdW5jdGlvbiBZKEUsbSxBKXt2YXIgdGU9RS5yZWR1Y2UoZnVuY3Rpb24oc2Us'@;
put 'd2Upe3JldHVybiB3ZS5pbmRleE9mKCJcbiIpLHNlK3dlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gdGU+NjA/QVswXSsoIiI9PT1tPyIiOm0rIlxuICIpKyIgIitFLmpvaW4oIixcbiAgIikrIiAiK0FbMV06QVswXSttKyIgIitFLmpvaW4oIiwg'@;
put 'IikrIiAiK0FbMV19KFhlLEplLE1lKSk6TWVbMF0rSmUrTWVbMV19ZnVuY3Rpb24gSyhFKXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRSkrIl0ifWZ1bmN0aW9uIFcoRSxtLEEsb2UsdGUsc2Upe3ZhciB3ZSxVZSxKZTtpZigoSmU9T2JqZWN0LmdldE93blByb3Bl'@;
put 'cnR5RGVzY3JpcHRvcihtLHRlKXx8e3ZhbHVlOm1bdGVdfSkuZ2V0P1VlPUUuc3R5bGl6ZShKZS5zZXQ/IltHZXR0ZXIvU2V0dGVyXSI6IltHZXR0ZXJdIiwic3BlY2lhbCIpOkplLnNldCYmKFVlPUUuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVjaWFsIikpLGoob2UsdGUpfHwod2U9IlsiK3Rl'@;
put 'KyJdIiksVWV8fChFLnNlZW4uaW5kZXhPZihKZS52YWx1ZSk8MD8oVWU9SihBKT9OKEUsSmUudmFsdWUsbnVsbCk6TihFLEplLnZhbHVlLEEtMSkpLmluZGV4T2YoIlxuIik+LTEmJihVZT1zZT9VZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oYXQpe3JldHVybiIgICIrYXR9KS5qb2luKCJc'@;
put 'biIpLnN1YnN0cigyKToiXG4iK1VlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihhdCl7cmV0dXJuIiAgICIrYXR9KS5qb2luKCJcbiIpKTpVZT1FLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLF9lKHdlKSl7aWYoc2UmJnRlLm1hdGNoKC9eXGQrJC8pKXJldHVybiBVZTsod2U9'@;
put 'SlNPTi5zdHJpbmdpZnkoIiIrdGUpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyh3ZT13ZS5zdWJzdHIoMSx3ZS5sZW5ndGgtMiksd2U9RS5zdHlsaXplKHdlLCJuYW1lIikpOih3ZT13ZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVw'@;
put 'bGFjZSgvKF4ifCIkKS9nLCInIiksd2U9RS5zdHlsaXplKHdlLCJzdHJpbmciKSl9cmV0dXJuIHdlKyI6ICIrVWV9ZnVuY3Rpb24gWChFKXtyZXR1cm4gQXJyYXkuaXNBcnJheShFKX1mdW5jdGlvbiBlZShFKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBFfWZ1bmN0aW9uIEooRSl7cmV0dXJu'@;
put 'IG51bGw9PT1FfWZ1bmN0aW9uIGllKEUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgRX1mdW5jdGlvbiBsZShFKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEV9ZnVuY3Rpb24gX2UoRSl7cmV0dXJuIHZvaWQgMD09PUV9ZnVuY3Rpb24gVGUoRSl7cmV0dXJuIFNlKEUpJiYiW29iamVjdCBSZWdF'@;
put 'eHBdIj09PXgoRSl9ZnVuY3Rpb24gU2UoRSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBFJiZudWxsIT09RX1mdW5jdGlvbiB6ZShFKXtyZXR1cm4gU2UoRSkmJiJbb2JqZWN0IERhdGVdIj09PXgoRSl9ZnVuY3Rpb24gVihFKXtyZXR1cm4gU2UoRSkmJigiW29iamVjdCBFcnJvcl0iPT09eChF'@;
put 'KXx8RSBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBwKEUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFfWZ1bmN0aW9uIHgoRSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChFKX1mdW5jdGlvbiBDKEUpe3JldHVybiBFPDEwPyIwIitFLnRvU3RyaW5nKDEwKTpF'@;
put 'LnRvU3RyaW5nKDEwKX1xLmRlYnVnbG9nPWZ1bmN0aW9uKEUpe2lmKF9lKHcpJiYodz1JLmVudi5OT0RFX0RFQlVHfHwiIiksRT1FLnRvVXBwZXJDYXNlKCksIUJbRV0paWYobmV3IFJlZ0V4cCgiXFxiIitFKyJcXGIiLCJpIikudGVzdCh3KSl7dmFyIG09SS5waWQ7QltFXT1mdW5jdGlvbigp'@;
put 'e3ZhciBBPXEuZm9ybWF0LmFwcGx5KHEsYXJndW1lbnRzKTt5LmVycm9yKCIlcyAlZDogJXMiLEUsbSxBKX19ZWxzZSBCW0VdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gQltFXX0scS5pbnNwZWN0PVAsUC5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxp'@;
put 'bnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LFAuc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixu'@;
put 'dW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0scS5pc0FycmF5PVgscS5pc0Jvb2xlYW49ZWUscS5pc051bGw9SixxLmlzTnVsbE9yVW5kZWZpbmVkPWZ1'@;
put 'bmN0aW9uIHJlKEUpe3JldHVybiBudWxsPT1FfSxxLmlzTnVtYmVyPWllLHEuaXNTdHJpbmc9bGUscS5pc1N5bWJvbD1mdW5jdGlvbiBtZShFKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIEV9LHEuaXNVbmRlZmluZWQ9X2UscS5pc1JlZ0V4cD1UZSxxLmlzT2JqZWN0PVNlLHEuaXNEYXRlPXpl'@;
put 'LHEuaXNFcnJvcj1WLHEuaXNGdW5jdGlvbj1wLHEuaXNQcmltaXRpdmU9ZnVuY3Rpb24gYihFKXtyZXR1cm4gbnVsbD09PUV8fCJib29sZWFuIj09dHlwZW9mIEV8fCJudW1iZXIiPT10eXBlb2YgRXx8InN0cmluZyI9PXR5cGVvZiBFfHwic3ltYm9sIj09dHlwZW9mIEV8fHR5cGVvZiBFPiJ1'@;
put 'In0scS5pc0J1ZmZlcj1fKDI5NzQpO3ZhciBUPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gaihFLG0pe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSxt'@;
put 'KX1xLmxvZz1mdW5jdGlvbigpe3kubG9nKCIlcyAtICVzIixmdW5jdGlvbiBIKCl7dmFyIEU9bmV3IERhdGUsbT1bQyhFLmdldEhvdXJzKCkpLEMoRS5nZXRNaW51dGVzKCkpLEMoRS5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW0UuZ2V0RGF0ZSgpLFRbRS5nZXRNb250aCgpXSxt'@;
put 'XS5qb2luKCIgIil9KCkscS5mb3JtYXQuYXBwbHkocSxhcmd1bWVudHMpKX0scS5pbmhlcml0cz1fKDE3MjUpLHEuX2V4dGVuZD1mdW5jdGlvbihFLG0pe2lmKCFtfHwhU2UobSkpcmV0dXJuIEU7Zm9yKHZhciBBPU9iamVjdC5rZXlzKG0pLG9lPUEubGVuZ3RoO29lLS07KUVbQVtvZV1dPW1b'@;
put 'QVtvZV1dO3JldHVybiBFfX0sMjUyMDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9IndpbjMyIj09PUkucGxhdGZvcm0sZz1fKDgwNTkpO2Z1bmN0aW9uIEIoWSxYKXtmb3IodmFyIGVlPVtdLEo9MDtKPFkubGVuZ3RoO0orKyl7dmFyIHJlPVlbSl07IXJlfHwiLiI9'@;
put 'PT1yZXx8KCIuLiI9PT1yZT9lZS5sZW5ndGgmJiIuLiIhPT1lZVtlZS5sZW5ndGgtMV0/ZWUucG9wKCk6WCYmZWUucHVzaCgiLi4iKTplZS5wdXNoKHJlKSl9cmV0dXJuIGVlfWZ1bmN0aW9uIHcoWSl7Zm9yKHZhciBYPVkubGVuZ3RoLTEsZWU9MDtlZTw9WCYmIVlbZWVdO2VlKyspO2Zvcih2'@;
put 'YXIgSj1YO0o+PTAmJiFZW0pdO0otLSk7cmV0dXJuIDA9PT1lZSYmSj09PVg/WTplZT5KP1tdOlkuc2xpY2UoZWUsSisxKX12YXIgUD0vXihbYS16QS1aXTp8W1xcXC9dezJ9W15cXFwvXStbXFxcL10rW15cXFwvXSspPyhbXFxcL10pPyhbXHNcU10qPykkLyxGPS9eKFtcc1xTXSo/KSgoPzpc'@;
put 'LnsxLDJ9fFteXFxcL10rP3wpKFwuW14uXC9cXF0qfCkpKD86W1xcXC9dKikkLyxPPXt9O2Z1bmN0aW9uIHooWSl7dmFyIFg9UC5leGVjKFkpLGVlPShYWzFdfHwiIikrKFhbMl18fCIiKSxyZT1GLmV4ZWMoWFszXXx8IiIpO3JldHVybltlZSxyZVsxXSxyZVsyXSxyZVszXV19ZnVuY3Rpb24g'@;
put 'TihZKXt2YXIgWD1QLmV4ZWMoWSksZWU9WFsxXXx8IiIsSj0hIWVlJiYiOiIhPT1lZVsxXTtyZXR1cm57ZGV2aWNlOmVlLGlzVW5jOkosaXNBYnNvbHV0ZTpKfHwhIVhbMl0sdGFpbDpYWzNdfX1mdW5jdGlvbiBMKFkpe3JldHVybiJcXFxcIitZLnJlcGxhY2UoL15bXFxcL10rLywiIikucmVw'@;
put 'bGFjZSgvW1xcXC9dKy9nLCJcXCIpfU8ucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgWT0iIixYPSIiLGVlPSExLEo9YXJndW1lbnRzLmxlbmd0aC0xO0o+PS0xO0otLSl7dmFyIHJlO2lmKEo+PTA/cmU9YXJndW1lbnRzW0pdOlk/KCEocmU9SS5lbnZbIj0iK1ldKXx8cmUuc3Vic3RyKDAs'@;
put 'MykudG9Mb3dlckNhc2UoKSE9PVkudG9Mb3dlckNhc2UoKSsiXFwiKSYmKHJlPVkrIlxcIik6cmU9SS5jd2QoKSwhZy5pc1N0cmluZyhyZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZihyZSl7dmFyIGllPU4ocmUp'@;
put 'LGxlPWllLmRldmljZSxtZT1pZS5pc1VuYyxfZT1pZS5pc0Fic29sdXRlLFRlPWllLnRhaWw7aWYoKCFsZXx8IVl8fGxlLnRvTG93ZXJDYXNlKCk9PT1ZLnRvTG93ZXJDYXNlKCkpJiYoWXx8KFk9bGUpLGVlfHwoWD1UZSsiXFwiK1gsZWU9X2UpLFkmJmVlKSlicmVha319cmV0dXJuIG1lJiYo'@;
put 'WT1MKFkpKSxZKyhlZT8iXFwiOiIiKSsoWD1CKFguc3BsaXQoL1tcXFwvXSsvKSwhZWUpLmpvaW4oIlxcIikpfHwiLiJ9LE8ubm9ybWFsaXplPWZ1bmN0aW9uKFkpe3ZhciBYPU4oWSksZWU9WC5kZXZpY2UsSj1YLmlzVW5jLHJlPVguaXNBYnNvbHV0ZSxpZT1YLnRhaWwsbGU9L1tcXFwvXSQv'@;
put 'LnRlc3QoaWUpO3JldHVybiEoaWU9QihpZS5zcGxpdCgvW1xcXC9dKy8pLCFyZSkuam9pbigiXFwiKSkmJiFyZSYmKGllPSIuIiksaWUmJmxlJiYoaWUrPSJcXCIpLEomJihlZT1MKGVlKSksZWUrKHJlPyJcXCI6IiIpK2llfSxPLmlzQWJzb2x1dGU9ZnVuY3Rpb24oWSl7cmV0dXJuIE4oWSku'@;
put 'aXNBYnNvbHV0ZX0sTy5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBZPVtdLFg9MDtYPGFyZ3VtZW50cy5sZW5ndGg7WCsrKXt2YXIgZWU9YXJndW1lbnRzW1hdO2lmKCFnLmlzU3RyaW5nKGVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3Ry'@;
put 'aW5ncyIpO2VlJiZZLnB1c2goZWUpfXZhciBKPVkuam9pbigiXFwiKTtyZXR1cm4vXltcXFwvXXsyfVteXFxcL10vLnRlc3QoWVswXSl8fChKPUoucmVwbGFjZSgvXltcXFwvXXsyLH0vLCJcXCIpKSxPLm5vcm1hbGl6ZShKKX0sTy5yZWxhdGl2ZT1mdW5jdGlvbihZLFgpe1k9Ty5yZXNvbHZl'@;
put 'KFkpLFg9Ty5yZXNvbHZlKFgpO2Zvcih2YXIgZWU9WS50b0xvd2VyQ2FzZSgpLEo9WC50b0xvd2VyQ2FzZSgpLHJlPXcoWC5zcGxpdCgiXFwiKSksaWU9dyhlZS5zcGxpdCgiXFwiKSksbGU9dyhKLnNwbGl0KCJcXCIpKSxtZT1NYXRoLm1pbihpZS5sZW5ndGgsbGUubGVuZ3RoKSxfZT1tZSxU'@;
put 'ZT0wO1RlPG1lO1RlKyspaWYoaWVbVGVdIT09bGVbVGVdKXtfZT1UZTticmVha31pZigwPT1fZSlyZXR1cm4gWDt2YXIgU2U9W107Zm9yKFRlPV9lO1RlPGllLmxlbmd0aDtUZSsrKVNlLnB1c2goIi4uIik7cmV0dXJuKFNlPVNlLmNvbmNhdChyZS5zbGljZShfZSkpKS5qb2luKCJcXCIpfSxP'@;
put 'Ll9tYWtlTG9uZz1mdW5jdGlvbihZKXtpZighZy5pc1N0cmluZyhZKSlyZXR1cm4gWTtpZighWSlyZXR1cm4iIjt2YXIgWD1PLnJlc29sdmUoWSk7cmV0dXJuL15bYS16QS1aXVw6XFwvLnRlc3QoWCk/IlxcXFw/XFwiK1g6L15cXFxcW14/Ll0vLnRlc3QoWCk/IlxcXFw/XFxVTkNcXCIrWC5z'@;
put 'dWJzdHJpbmcoMik6WX0sTy5kaXJuYW1lPWZ1bmN0aW9uKFkpe3ZhciBYPXooWSksZWU9WFswXSxKPVhbMV07cmV0dXJuIGVlfHxKPyhKJiYoSj1KLnN1YnN0cigwLEoubGVuZ3RoLTEpKSxlZStKKToiLiJ9LE8uYmFzZW5hbWU9ZnVuY3Rpb24oWSxYKXt2YXIgZWU9eihZKVsyXTtyZXR1cm4g'@;
put 'WCYmZWUuc3Vic3RyKC0xKlgubGVuZ3RoKT09PVgmJihlZT1lZS5zdWJzdHIoMCxlZS5sZW5ndGgtWC5sZW5ndGgpKSxlZX0sTy5leHRuYW1lPWZ1bmN0aW9uKFkpe3JldHVybiB6KFkpWzNdfSxPLmZvcm1hdD1mdW5jdGlvbihZKXtpZighZy5pc09iamVjdChZKSl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgWSk7aWYoIWcuaXNTdHJpbmcoWS5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAi'@;
put 'K3R5cGVvZiBZLnJvb3QpO3ZhciBlZT1ZLmRpcixKPVkuYmFzZXx8IiI7cmV0dXJuIGVlP2VlW2VlLmxlbmd0aC0xXT09PU8uc2VwP2VlK0o6ZWUrTy5zZXArSjpKfSxPLnBhcnNlPWZ1bmN0aW9uKFkpe2lmKCFnLmlzU3RyaW5nKFkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAn'@;
put 'cGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIFkpO3ZhciBYPXooWSk7aWYoIVh8fDQhPT1YLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHBhdGggJyIrWSsiJyIpO3JldHVybntyb290OlhbMF0sZGlyOlhbMF0rWFsxXS5zbGljZSgwLC0xKSxi'@;
put 'YXNlOlhbMl0sZXh0OlhbM10sbmFtZTpYWzJdLnNsaWNlKDAsWFsyXS5sZW5ndGgtWFszXS5sZW5ndGgpfX0sTy5zZXA9IlxcIixPLmRlbGltaXRlcj0iOyI7dmFyIEs9L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLFU9e307'@;
put 'ZnVuY3Rpb24gVyhZKXtyZXR1cm4gSy5leGVjKFkpLnNsaWNlKDEpfVUucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgWT0iIixYPSExLGVlPWFyZ3VtZW50cy5sZW5ndGgtMTtlZT49LTEmJiFYO2VlLS0pe3ZhciBKPWVlPj0wP2FyZ3VtZW50c1tlZV06SS5jd2QoKTtpZighZy5pc1N0cmlu'@;
put 'ZyhKKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIpO0omJihZPUorIi8iK1ksWD0iLyI9PT1KWzBdKX1yZXR1cm4oWD8iLyI6IiIpKyhZPUIoWS5zcGxpdCgiLyIpLCFYKS5qb2luKCIvIikpfHwiLiJ9LFUubm9ybWFsaXpl'@;
put 'PWZ1bmN0aW9uKFkpe3ZhciBYPVUuaXNBYnNvbHV0ZShZKSxlZT1ZJiYiLyI9PT1ZW1kubGVuZ3RoLTFdO3JldHVybiEoWT1CKFkuc3BsaXQoIi8iKSwhWCkuam9pbigiLyIpKSYmIVgmJihZPSIuIiksWSYmZWUmJihZKz0iLyIpLChYPyIvIjoiIikrWX0sVS5pc0Fic29sdXRlPWZ1bmN0aW9u'@;
put 'KFkpe3JldHVybiIvIj09PVkuY2hhckF0KDApfSxVLmpvaW49ZnVuY3Rpb24oKXtmb3IodmFyIFk9IiIsWD0wO1g8YXJndW1lbnRzLmxlbmd0aDtYKyspe3ZhciBlZT1hcmd1bWVudHNbWF07aWYoIWcuaXNTdHJpbmcoZWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRo'@;
put 'LmpvaW4gbXVzdCBiZSBzdHJpbmdzIik7ZWUmJihZKz1ZPyIvIitlZTplZSl9cmV0dXJuIFUubm9ybWFsaXplKFkpfSxVLnJlbGF0aXZlPWZ1bmN0aW9uKFksWCl7WT1VLnJlc29sdmUoWSkuc3Vic3RyKDEpLFg9VS5yZXNvbHZlKFgpLnN1YnN0cigxKTtmb3IodmFyIGVlPXcoWS5zcGxpdCgi'@;
put 'LyIpKSxKPXcoWC5zcGxpdCgiLyIpKSxyZT1NYXRoLm1pbihlZS5sZW5ndGgsSi5sZW5ndGgpLGllPXJlLGxlPTA7bGU8cmU7bGUrKylpZihlZVtsZV0hPT1KW2xlXSl7aWU9bGU7YnJlYWt9dmFyIG1lPVtdO2ZvcihsZT1pZTtsZTxlZS5sZW5ndGg7bGUrKyltZS5wdXNoKCIuLiIpO3JldHVy'@;
put 'bihtZT1tZS5jb25jYXQoSi5zbGljZShpZSkpKS5qb2luKCIvIil9LFUuX21ha2VMb25nPWZ1bmN0aW9uKFkpe3JldHVybiBZfSxVLmRpcm5hbWU9ZnVuY3Rpb24oWSl7dmFyIFg9VyhZKSxlZT1YWzBdLEo9WFsxXTtyZXR1cm4gZWV8fEo/KEomJihKPUouc3Vic3RyKDAsSi5sZW5ndGgtMSkp'@;
put 'LGVlK0opOiIuIn0sVS5iYXNlbmFtZT1mdW5jdGlvbihZLFgpe3ZhciBlZT1XKFkpWzJdO3JldHVybiBYJiZlZS5zdWJzdHIoLTEqWC5sZW5ndGgpPT09WCYmKGVlPWVlLnN1YnN0cigwLGVlLmxlbmd0aC1YLmxlbmd0aCkpLGVlfSxVLmV4dG5hbWU9ZnVuY3Rpb24oWSl7cmV0dXJuIFcoWSlb'@;
put 'M119LFUuZm9ybWF0PWZ1bmN0aW9uKFkpe2lmKCFnLmlzT2JqZWN0KFkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aE9iamVjdCcgbXVzdCBiZSBhbiBvYmplY3QsIG5vdCAiK3R5cGVvZiBZKTtpZighZy5pc1N0cmluZyhZLnJvb3R8fCIiKSl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCIncGF0aE9iamVjdC5yb290JyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgbm90ICIrdHlwZW9mIFkucm9vdCk7cmV0dXJuKFkuZGlyP1kuZGlyK1Uuc2VwOiIiKSsoWS5iYXNlfHwiIil9LFUucGFyc2U9ZnVuY3Rpb24oWSl7aWYoIWcuaXNTdHJpbmcoWSkpdGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoU3RyaW5nJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgWSk7dmFyIFg9VyhZKTtpZighWHx8NCE9PVgubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgcGF0aCAnIitZKyInIik7cmV0dXJuIFhbMV09WFsxXXx8IiIs'@;
put 'WFsyXT1YWzJdfHwiIixYWzNdPVhbM118fCIiLHtyb290OlhbMF0sZGlyOlhbMF0rWFsxXS5zbGljZSgwLC0xKSxiYXNlOlhbMl0sZXh0OlhbM10sbmFtZTpYWzJdLnNsaWNlKDAsWFsyXS5sZW5ndGgtWFszXS5sZW5ndGgpfX0sVS5zZXA9Ii8iLFUuZGVsaW1pdGVyPSI6Iix1ZS5leHBvcnRz'@;
put 'PXk/TzpVLHVlLmV4cG9ydHMucG9zaXg9VSx1ZS5leHBvcnRzLndpbjMyPU99LDU2MzI6KHVlLHEsXyk9PntxLnBia2RmMj1fKDg2MzgpLHEucGJrZGYyU3luYz1fKDEyNTcpfSw4NjM4Oih1ZSxxLF8pPT57dmFyIFAsTCxJPV8oOTUwOSkuQnVmZmVyLHk9Xyg3MzU3KSxnPV8oMjM2OCksQj1f'@;
put 'KDEyNTcpLHc9Xyg3Nzc3KSxGPV8uZy5jcnlwdG8mJl8uZy5jcnlwdG8uc3VidGxlLE89e3NoYToiU0hBLTEiLCJzaGEtMSI6IlNIQS0xIixzaGExOiJTSEEtMSIsc2hhMjU2OiJTSEEtMjU2Iiwic2hhLTI1NiI6IlNIQS0yNTYiLHNoYTM4NDoiU0hBLTM4NCIsInNoYS0zODQiOiJTSEEtMzg0'@;
put 'Iiwic2hhLTUxMiI6IlNIQS01MTIiLHNoYTUxMjoiU0hBLTUxMiJ9LHo9W107ZnVuY3Rpb24gSygpe3JldHVybiBMfHwoTD1fLmcucHJvY2VzcyYmXy5nLnByb2Nlc3MubmV4dFRpY2s/Xy5nLnByb2Nlc3MubmV4dFRpY2s6Xy5nLnF1ZXVlTWljcm90YXNrP18uZy5xdWV1ZU1pY3JvdGFzazpf'@;
put 'Lmcuc2V0SW1tZWRpYXRlP18uZy5zZXRJbW1lZGlhdGU6Xy5nLnNldFRpbWVvdXQpfWZ1bmN0aW9uIFUoWSxYLGVlLEoscmUpe3JldHVybiBGLmltcG9ydEtleSgicmF3IixZLHtuYW1lOiJQQktERjIifSwhMSxbImRlcml2ZUJpdHMiXSkudGhlbihmdW5jdGlvbihpZSl7cmV0dXJuIEYuZGVy'@;
put 'aXZlQml0cyh7bmFtZToiUEJLREYyIixzYWx0OlgsaXRlcmF0aW9uczplZSxoYXNoOntuYW1lOnJlfX0saWUsSjw8Myl9KS50aGVuKGZ1bmN0aW9uKGllKXtyZXR1cm4gSS5mcm9tKGllKX0pfXVlLmV4cG9ydHM9ZnVuY3Rpb24oWSxYLGVlLEoscmUsaWUpeyJmdW5jdGlvbiI9PXR5cGVvZiBy'@;
put 'ZSYmKGllPXJlLHJlPXZvaWQgMCk7dmFyIGxlPU9bKHJlPXJlfHwic2hhMSIpLnRvTG93ZXJDYXNlKCldO2lmKGxlJiYiZnVuY3Rpb24iPT10eXBlb2YgXy5nLlByb21pc2Upe2lmKHkoZWUsSiksWT13KFksZywiUGFzc3dvcmQiKSxYPXcoWCxnLCJTYWx0IiksImZ1bmN0aW9uIiE9dHlwZW9m'@;
put 'IGllKXRocm93IG5ldyBFcnJvcigiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyIik7IWZ1bmN0aW9uIFcoWSxYKXtZLnRoZW4oZnVuY3Rpb24oZWUpe0soKShmdW5jdGlvbigpe1gobnVsbCxlZSl9KX0sZnVuY3Rpb24oZWUpe0soKShmdW5jdGlvbigpe1goZWUpfSl9KX0oZnVuY3Rp'@;
put 'b24gTihZKXtpZihfLmcucHJvY2VzcyYmIV8uZy5wcm9jZXNzLmJyb3dzZXJ8fCFGfHwhRi5pbXBvcnRLZXl8fCFGLmRlcml2ZUJpdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09eltZXSlyZXR1cm4geltZXTt2YXIgWD1VKFA9UHx8SS5hbGxvYyg4KSxQLDEwLDEy'@;
put 'OCxZKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSk7cmV0dXJuIHpbWV09WCxYfShsZSkudGhlbihmdW5jdGlvbihtZSl7cmV0dXJuIG1lP1UoWSxYLGVlLEosbGUpOkIoWSxYLGVlLEoscmUpfSksaWUpfWVsc2UgSygpKGZ1bmN0aW9uKCl7'@;
put 'dmFyIG1lO3RyeXttZT1CKFksWCxlZSxKLHJlKX1jYXRjaChfZSl7cmV0dXJuIGllKF9lKX1pZShudWxsLG1lKX0pfX0sMjM2ODoodWUscSxfKT0+e3ZhciB5LEk9Xyg0MTU1KTt5PV8uZy5wcm9jZXNzJiZfLmcucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6Xy5nLnByb2Nlc3MmJl8uZy5wcm9j'@;
put 'ZXNzLnZlcnNpb24/cGFyc2VJbnQoSS52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0Zi04Iix1ZS5leHBvcnRzPXl9LDczNTc6dWU9Pnt2YXIgcT1NYXRoLnBvdygyLDMwKS0xO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxJKXtpZigibnVt'@;
put 'YmVyIiE9dHlwZW9mIF8pdGhyb3cgbmV3IFR5cGVFcnJvcigiSXRlcmF0aW9ucyBub3QgYSBudW1iZXIiKTtpZihfPDApdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGl0ZXJhdGlvbnMiKTtpZigibnVtYmVyIiE9dHlwZW9mIEkpdGhyb3cgbmV3IFR5cGVFcnJvcigiS2V5IGxlbmd0aCBub3Qg'@;
put 'YSBudW1iZXIiKTtpZihJPDB8fEk+cXx8SSE9SSl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQga2V5IGxlbmd0aCIpfX0sMTI1NzoodWUscSxfKT0+e3ZhciBJPV8oODAyOCkseT1fKDk3ODUpLGc9Xyg5MDcyKSxCPV8oOTUwOSkuQnVmZmVyLHc9Xyg3MzU3KSxQPV8oMjM2OCksRj1fKDc3Nzcp'@;
put 'LE89Qi5hbGxvYygxMjgpLHo9e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2NCxybWQxNjA6MjAscmlwZW1kMTYwOjIwfTtmdW5jdGlvbiBOKFUsVyxZKXt2YXIgWD1mdW5jdGlvbiBMKFUpe3JldHVybiJybWQxNjAiPT09VXx8InJpcGVtZDE2'@;
put 'MCI9PT1VP2Z1bmN0aW9uIFkoWCl7cmV0dXJuKG5ldyB5KS51cGRhdGUoWCkuZGlnZXN0KCl9OiJtZDUiPT09VT9JOmZ1bmN0aW9uIFcoWCl7cmV0dXJuIGcoVSkudXBkYXRlKFgpLmRpZ2VzdCgpfX0oVSksZWU9InNoYTUxMiI9PT1VfHwic2hhMzg0Ij09PVU/MTI4OjY0O1cubGVuZ3RoPmVl'@;
put 'P1c9WChXKTpXLmxlbmd0aDxlZSYmKFc9Qi5jb25jYXQoW1csT10sZWUpKTtmb3IodmFyIEo9Qi5hbGxvY1Vuc2FmZShlZSt6W1VdKSxyZT1CLmFsbG9jVW5zYWZlKGVlK3pbVV0pLGllPTA7aWU8ZWU7aWUrKylKW2llXT01NF5XW2llXSxyZVtpZV09OTJeV1tpZV07dmFyIGxlPUIuYWxsb2NV'@;
put 'bnNhZmUoZWUrWSs0KTtKLmNvcHkobGUsMCwwLGVlKSx0aGlzLmlwYWQxPWxlLHRoaXMuaXBhZDI9Six0aGlzLm9wYWQ9cmUsdGhpcy5hbGc9VSx0aGlzLmJsb2Nrc2l6ZT1lZSx0aGlzLmhhc2g9WCx0aGlzLnNpemU9eltVXX1OLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oVSxXKXtyZXR1cm4g'@;
put 'VS5jb3B5KFcsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaChXKS5jb3B5KHRoaXMub3BhZCx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKHRoaXMub3BhZCl9LHVlLmV4cG9ydHM9ZnVuY3Rpb24gSyhVLFcsWSxYLGVlKXt3KFksWCk7dmFyIEo9bmV3IE4oZWU9ZWV8fCJzaGExIixVPUYoVSxQ'@;
put 'LCJQYXNzd29yZCIpLChXPUYoVyxQLCJTYWx0IikpLmxlbmd0aCkscmU9Qi5hbGxvY1Vuc2FmZShYKSxpZT1CLmFsbG9jVW5zYWZlKFcubGVuZ3RoKzQpO1cuY29weShpZSwwLDAsVy5sZW5ndGgpO2Zvcih2YXIgbGU9MCxtZT16W2VlXSxfZT1NYXRoLmNlaWwoWC9tZSksVGU9MTtUZTw9X2U7'@;
put 'VGUrKyl7aWUud3JpdGVVSW50MzJCRShUZSxXLmxlbmd0aCk7Zm9yKHZhciBTZT1KLnJ1bihpZSxKLmlwYWQxKSx6ZT1TZSxWPTE7VjxZO1YrKyl7emU9Si5ydW4oemUsSi5pcGFkMik7Zm9yKHZhciBwPTA7cDxtZTtwKyspU2VbcF1ePXplW3BdfVNlLmNvcHkocmUsbGUpLGxlKz1tZX1yZXR1'@;
put 'cm4gcmV9fSw3Nzc3Oih1ZSxxLF8pPT57dmFyIEk9Xyg5NTA5KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbih5LGcsQil7aWYoSS5pc0J1ZmZlcih5KSlyZXR1cm4geTtpZigic3RyaW5nIj09dHlwZW9mIHkpcmV0dXJuIEkuZnJvbSh5LGcpO2lmKEFycmF5QnVmZmVyLmlzVmlldyh5KSly'@;
put 'ZXR1cm4gSS5mcm9tKHkuYnVmZmVyKTt0aHJvdyBuZXcgVHlwZUVycm9yKEIrIiBtdXN0IGJlIGEgc3RyaW5nLCBhIEJ1ZmZlciwgYSB0eXBlZCBhcnJheSBvciBhIERhdGFWaWV3Iil9fSw5OTA4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9WyJGbG9hdDE2QXJyYXkiLCJGbG9hdDMy'@;
put 'QXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQ4QXJyYXkiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiXX0sODIxMjoodWUs'@;
put 'cSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpO3VlLmV4cG9ydHM9dHlwZW9mIEk+InUifHwhSS52ZXJzaW9ufHwwPT09SS52ZXJzaW9uLmluZGV4T2YoInYwLiIpfHwwPT09SS52ZXJzaW9uLmluZGV4T2YoInYxLiIpJiYwIT09SS52ZXJzaW9uLmluZGV4T2YoInYxLjguIik/e25l'@;
put 'eHRUaWNrOmZ1bmN0aW9uIHkoZyxCLHcsUCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGcpdGhyb3cgbmV3IFR5cGVFcnJvcignImNhbGxiYWNrIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt2YXIgTyx6LEY9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2goRil7Y2FzZSAwOmNhc2UgMTpy'@;
put 'ZXR1cm4gSS5uZXh0VGljayhnKTtjYXNlIDI6cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtnLmNhbGwobnVsbCxCKX0pO2Nhc2UgMzpyZXR1cm4gSS5uZXh0VGljayhmdW5jdGlvbigpe2cuY2FsbChudWxsLEIsdyl9KTtjYXNlIDQ6cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtn'@;
put 'LmNhbGwobnVsbCxCLHcsUCl9KTtkZWZhdWx0OmZvcihPPW5ldyBBcnJheShGLTEpLHo9MDt6PE8ubGVuZ3RoOylPW3orK109YXJndW1lbnRzW3pdO3JldHVybiBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7Zy5hcHBseShudWxsLE8pfSl9fX06SX0sNDE1NTp1ZT0+e3ZhciBfLEkscT11ZS5leHBv'@;
put 'cnRzPXt9O2Z1bmN0aW9uIHkoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBnKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBCKFcpe2lmKF89PT1zZXRUaW1l'@;
put 'b3V0KXJldHVybiBzZXRUaW1lb3V0KFcsMCk7aWYoKF89PT15fHwhXykmJnNldFRpbWVvdXQpcmV0dXJuIF89c2V0VGltZW91dCxzZXRUaW1lb3V0KFcsMCk7dHJ5e3JldHVybiBfKFcsMCl9Y2F0Y2h7dHJ5e3JldHVybiBfLmNhbGwobnVsbCxXLDApfWNhdGNoe3JldHVybiBfLmNhbGwodGhp'@;
put 'cyxXLDApfX19IWZ1bmN0aW9uKCl7dHJ5e189ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDp5fWNhdGNoe189eX10cnl7ST0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpnfWNhdGNoe0k9Z319KCk7dmFyIE8sUD1bXSxGPSExLHo9'@;
put 'LTE7ZnVuY3Rpb24gTigpeyFGfHwhT3x8KEY9ITEsTy5sZW5ndGg/UD1PLmNvbmNhdChQKTp6PS0xLFAubGVuZ3RoJiZMKCkpfWZ1bmN0aW9uIEwoKXtpZighRil7dmFyIFc9QihOKTtGPSEwO2Zvcih2YXIgWT1QLmxlbmd0aDtZOyl7Zm9yKE89UCxQPVtdOysrejxZOylPJiZPW3pdLnJ1bigp'@;
put 'O3o9LTEsWT1QLmxlbmd0aH1PPW51bGwsRj0hMSxmdW5jdGlvbiB3KFcpe2lmKEk9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dChXKTtpZigoST09PWd8fCFJKSYmY2xlYXJUaW1lb3V0KXJldHVybiBJPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoVyk7dHJ5e3JldHVybiBJ'@;
put 'KFcpfWNhdGNoe3RyeXtyZXR1cm4gSS5jYWxsKG51bGwsVyl9Y2F0Y2h7cmV0dXJuIEkuY2FsbCh0aGlzLFcpfX19KFcpfX1mdW5jdGlvbiBLKFcsWSl7dGhpcy5mdW49Vyx0aGlzLmFycmF5PVl9ZnVuY3Rpb24gVSgpe31xLm5leHRUaWNrPWZ1bmN0aW9uKFcpe3ZhciBZPW5ldyBBcnJheShh'@;
put 'cmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIFg9MTtYPGFyZ3VtZW50cy5sZW5ndGg7WCsrKVlbWC0xXT1hcmd1bWVudHNbWF07UC5wdXNoKG5ldyBLKFcsWSkpLDE9PT1QLmxlbmd0aCYmIUYmJkIoTCl9LEsucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigp'@;
put 'e3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LHEudGl0bGU9ImJyb3dzZXIiLHEuYnJvd3Nlcj0hMCxxLmVudj17fSxxLmFyZ3Y9W10scS52ZXJzaW9uPSIiLHEudmVyc2lvbnM9e30scS5vbj1VLHEuYWRkTGlzdGVuZXI9VSxxLm9uY2U9VSxxLm9mZj1VLHEucmVtb3ZlTGlzdGVu'@;
put 'ZXI9VSxxLnJlbW92ZUFsbExpc3RlbmVycz1VLHEuZW1pdD1VLHEucHJlcGVuZExpc3RlbmVyPVUscS5wcmVwZW5kT25jZUxpc3RlbmVyPVUscS5saXN0ZW5lcnM9ZnVuY3Rpb24oVyl7cmV0dXJuW119LHEuYmluZGluZz1mdW5jdGlvbihXKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmlu'@;
put 'ZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LHEuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxxLmNoZGlyPWZ1bmN0aW9uKFcpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LHEudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LDc5MDA6KHVlLHEs'@;
put 'Xyk9PntxLnB1YmxpY0VuY3J5cHQ9Xyg2NTU5KSxxLnByaXZhdGVEZWNyeXB0PV8oNjEzOCkscS5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbih5LGcpe3JldHVybiBxLnB1YmxpY0VuY3J5cHQoeSxnLCEwKX0scS5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKHksZyl7cmV0dXJuIHEucHJpdmF0ZURl'@;
put 'Y3J5cHQoeSxnLCEwKX19LDkxOTk6KHVlLHEsXyk9Pnt2YXIgST1fKDM0ODIpLHk9Xyg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gZyhCKXt2YXIgdz15LmFsbG9jVW5zYWZlKDQpO3JldHVybiB3LndyaXRlVUludDMyQkUoQiwwKSx3fXVlLmV4cG9ydHM9ZnVuY3Rpb24oQix3KXtmb3IodmFyIE8s'@;
put 'UD15LmFsbG9jKDApLEY9MDtQLmxlbmd0aDx3OylPPWcoRisrKSxQPXkuY29uY2F0KFtQLEkoInNoYTEiKS51cGRhdGUoQikudXBkYXRlKE8pLmRpZ2VzdCgpXSk7cmV0dXJuIFAuc2xpY2UoMCx3KX19LDIxNDQ6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSx5KXsidXNlIHN0cmljdCI7'@;
put 'ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25z'@;
put 'dHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQo'@;
put 'Vnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13OnkuQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Xyg3MTA4KS5CdWZmZXJ9'@;
put 'Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVu'@;
put 'Y3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAg'@;
put 'aW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAs'@;
put 'Yil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7'@;
put 'ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRo'@;
put 'aXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcx'@;
put 'MDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4'@;
put 'ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53'@;
put 'b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14'@;
put 'KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgp'@;
put 'Zm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0s'@;
put 'dy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0w'@;
put 'LEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8'@;
put 'cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBd'@;
put 'LHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29y'@;
put 'ZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgb2U9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylvZSo9Yjt0aGlzLmltdWxuKG9lKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9'@;
put 'bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0'@;
put 'aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDsp'@;
put 'dGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJv'@;
put 'dG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlz'@;
put 'LnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1'@;
put 'LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0'@;
put 'MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlv'@;
put 'biBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZI'@;
put 'O2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsb2U9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkr'@;
put 'b2UpLzY3MTA4ODY0fDAsb2U9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8b2UsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwx'@;
put 'MCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1U'@;
put 'fHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFy'@;
put 'IG09TFtwXSxBPUtbcF07eD0iIjt2YXIgb2U9dGhpcy5jbG9uZSgpO2ZvcihvZS5uZWdhdGl2ZT0wOyFvZS5pc1plcm8oKTspe3ZhciB0ZT1vZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KG9lPW9lLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMu'@;
put 'aXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMu'@;
put 'd29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBj'@;
put 'YW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBl'@;
put 'b2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0'@;
put 'aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgp'@;
put 'O2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgp'@;
put 'LGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+'@;
put 'Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03'@;
put 'KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3'@;
put 'LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90'@;
put 'b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0s'@;
put 'dy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBl'@;
put 'Lm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8'@;
put 'cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0'@;
put 'aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXty'@;
put 'ZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRo'@;
put 'aXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnBy'@;
put 'b3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCku'@;
put 'aXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRz'@;
put 'W0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRp'@;
put 'dmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJu'@;
put 'IHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhw'@;
put 'YW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1'@;
put 'bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMu'@;
put 'd29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0'@;
put 'aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXAp'@;
put 'Oih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihi'@;
put 'PSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVy'@;
put 'biB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRo'@;
put 'aXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdh'@;
put 'dGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMu'@;
put 'Y21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRz'@;
put 'W2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2or'@;
put 'Kyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIo'@;
put 'cCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLG9lPTB8Q1swXSx0ZT04MTkxJm9lLHNlPW9lPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxhdD0wfENbMl0sTWU9ODE5MSZhdCx2ZT1hdD4+PjEz'@;
put 'LFhlPTB8Q1szXSxqZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxudD04MTkxJl90LFFlPV90Pj4+MTMsdW49MHxDWzddLHl0PTgxOTEmdW4sTXQ9dW4+Pj4xMyxEdD0w'@;
put 'fENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LHV0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxzaT0wfFRbMV0sUXQ9ODE5MSZzaSxzbj1zaT4+PjEzLFJpPTB8VFsyXSxobj04MTkxJlJpLGZ0PVJpPj4+MTMsT3I9MHxUWzNd'@;
put 'LFd0PTgxOTEmT3IsQXQ9T3I+Pj4xMyxSbj0wfFRbNF0sc3Q9ODE5MSZSbixVdD1Sbj4+PjEzLHJpPTB8VFs1XSxXZT04MTkxJnJpLFR0PXJpPj4+MTMsbnI9MHxUWzZdLGh0PTgxOTEmbnIseHQ9bnI+Pj4xMyxCbj0wfFRbN10scm49ODE5MSZCbix6dD1Cbj4+PjEzLGhpPTB8VFs4XSxjbj04'@;
put 'MTkxJmhpLGZuPWhpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgaG89KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGgu'@;
put 'aW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2'@;
put 'YXIgTWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoTWk+Pj4yNil8MCxNaSY9NjcxMDg4NjMs'@;
put 'RT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEpl'@;
put 'LHNuKXwwO3ZhciB2cj0oaisoRT1FK01hdGguaW11bCh0ZSxobil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsaG4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyh2cj4+PjI2KXwwLHZyJj02'@;
put 'NzEwODg2MyxFPU1hdGguaW11bChqZSxSdCksbT0obT1NYXRoLmltdWwoamUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRo'@;
put 'LmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsaG4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsV3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu'@;
put 'aW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFd0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0'@;
put 'KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKGplLFF0KXwwLG09KG09bStNYXRoLmltdWwoamUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsaG4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkr'@;
put 'TWF0aC5pbXVsKHZlLGhuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsV3QpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgJGk9KGorKEU9RStNYXRoLmltdWwodGUsc3Qp'@;
put 'fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxVdCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFV0KXwwKSsobT4+PjEzKXwwKSsoJGk+Pj4yNil8MCwkaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5p'@;
put 'bXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoamUsaG4pfDAs'@;
put 'bT0obT1tK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERlLGhuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bChNZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsV3QpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUr'@;
put 'TWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsVXQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLFV0KXwwO3ZhciBlaT0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRo'@;
put 'LmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxFPU1hdGguaW11bChudCxSdCksbT0obT1NYXRoLmltdWwobnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUs'@;
put 'UHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChSZSxobil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsaG4pfDAs'@;
put 'QT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGplLFd0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChEZSxXdCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSxVdCl8MCkr'@;
put 'TWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsVXQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsaHQp'@;
put 'fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5p'@;
put 'bXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKG50LFF0KXwwLG09KG09bStNYXRoLmltdWwobnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsaG4pfDAs'@;
put 'bT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGhuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChSZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsV3QpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUr'@;
put 'TWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsVXQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLFV0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRo'@;
put 'LmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUscm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGgu'@;
put 'aW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHJuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0'@;
put 'KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwobnQsaG4pfDAsbT0obT1tK01hdGguaW11bChudCxmdCl8MCkr'@;
put 'TWF0aC5pbXVsKFFlLGhuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxXdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsV3QpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStN'@;
put 'YXRoLmltdWwoUmUsVXQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLFV0KXwwLEU9RStNYXRoLmltdWwoamUsV2UpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11'@;
put 'bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLHJuKXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxybil8MCxBPUErTWF0aC5pbXVsKEpl'@;
put 'LHp0KXwwO3ZhciBOaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZm4pfDApKyhtPj4+MTMpfDApKyhOaT4+PjI2KXwwLE5pJj02'@;
put 'NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwodXQsUnQpfDAsQT1NYXRoLmltdWwodXQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRo'@;
put 'LmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxobil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsaG4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKG50LFd0KXwwLG09KG09bStNYXRoLmltdWwobnQsQXQpfDApK01hdGguaW11'@;
put 'bChRZSxXdCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSxVdCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsVXQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVs'@;
put 'KFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXwwLG09KG09bStNYXRoLmltdWwoamUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUscm4p'@;
put 'fDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHJuKXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxmbil8MDt2'@;
put 'YXIgSW89KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMs'@;
put 'RT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKHV0LFF0KXwwLEE9TWF0aC5pbXVsKHV0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGhuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxobil8MCxBPUErTWF0aC5pbXVsKCRl'@;
put 'LGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsV3QpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFd0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChudCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKG50LFV0KXwwKStNYXRoLmltdWwoUWUsc3Qp'@;
put 'fDAsQT1BK01hdGguaW11bChRZSxVdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8'@;
put 'MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChqZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUscm4pfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLGNuKXwwLG09KG09'@;
put 'bStNYXRoLmltdWwoTWUsZm4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLGZuKXwwO3ZhciBMcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7'@;
put 'aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxobiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwodXQsaG4pfDAsQT1NYXRoLmltdWwodXQsZnQpLEU9RStNYXRoLmltdWwoaXQsV3Qp'@;
put 'fDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFd0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFV0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCxVdCl8MCxF'@;
put 'PUUrTWF0aC5pbXVsKG50LFdlKXwwLG09KG09bStNYXRoLmltdWwobnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStN'@;
put 'YXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChSZSxybil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUscm4pfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLGNuKXwwLG09KG09bStNYXRoLmltdWwoamUsZm4pfDApK01hdGgu'@;
put 'aW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLGZuKXwwO3ZhciBXaT0oaisoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDAp'@;
put 'KyhtPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXdCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwodXQsV3QpfDAsQT1NYXRoLmltdWwodXQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCxVdCl8'@;
put 'MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsVXQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKG50LGh0KXwwLG09KG09'@;
put 'bStNYXRoLmltdWwobnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Uscm4pfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHJuKXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGgu'@;
put 'aW11bChSZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxmbil8MDt2YXIgZ289KGorKEU9RStNYXRoLmltdWwoamUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5pbXVs'@;
put 'KERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLFV0KSkrTWF0aC5pbXVsKHV0LHN0KXwwLEE9TWF0aC5pbXVsKHV0LFV0KSxF'@;
put 'PUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStN'@;
put 'YXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChudCxybil8MCxtPShtPW0rTWF0aC5pbXVsKG50LHp0KXwwKStNYXRoLmltdWwoUWUscm4pfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZm4pfDApK01hdGgu'@;
put 'aW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLGZuKXwwO3ZhciBRbj0oaisoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDAp'@;
put 'KyhtPj4+MTMpfDApKyhRbj4+PjI2KXwwLFFuJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwodXQsV2UpfDAsQT1NYXRoLmltdWwodXQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8'@;
put 'MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxybil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQscm4pfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKG50LGNuKXwwLG09KG09'@;
put 'bStNYXRoLmltdWwobnQsZm4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLGZuKXwwO3ZhciBjbz0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7'@;
put 'aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhjbz4+PjI2KXwwLGNvJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwodXQsaHQpfDAsQT1NYXRoLmltdWwodXQseHQpLEU9RStNYXRoLmltdWwoaXQscm4p'@;
put 'fDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHJuKXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxmbil8MDt2'@;
put 'YXIgX289KGorKEU9RStNYXRoLmltdWwobnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoX28+Pj4yNil8MCxfbyY9NjcxMDg4NjMs'@;
put 'RT1NYXRoLmltdWwoSGUscm4pLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKHV0LHJuKXwwLEE9TWF0aC5pbXVsKHV0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZm4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRl'@;
put 'LGZuKXwwO3ZhciBPbz0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhPbz4+PjI2KXwwLE9vJj02'@;
put 'NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUsZm4pKStNYXRoLmltdWwodXQsY24pfDAsQT1NYXRoLmltdWwodXQsZm4pO3ZhciBIbz0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRo'@;
put 'LmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhIbz4+PjI2KXwwLEhvJj02NzEwODg2Mzt2YXIgdGk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bCh1'@;
put 'dCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKHV0LGVuKSkrKG0+Pj4xMyl8MCkrKHRpPj4+MjYpfDAsdGkmPTY3MTA4ODYzLEhbMF09aG8sSFsxXT1NaSxIWzJdPXZyLEhbM109V24sSFs0XT0kaSxIWzVdPWVpLEhbNl09UXIsSFs3XT1WaSxIWzhdPU5pLEhbOV09SW8s'@;
put 'SFsxMF09THIsSFsxMV09V2ksSFsxMl09Z28sSFsxM109UW4sSFsxNF09Y28sSFsxNV09X28sSFsxNl09T28sSFsxN109SG8sSFsxOF09dGksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9u'@;
put 'IEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0'@;
put 'aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIFgoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngs'@;
put 'RT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDAp'@;
put 'fDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3Io'@;
put 'dmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIg'@;
put 'Qz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rp'@;
put 'b24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLG9lPTA7b2U8VDtvZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0w'@;
put 'O3dlPGo7d2UrKyl7dmFyIFVlPXhbb2Urd2VdLEplPUNbb2Urd2VdLGF0PXhbb2Urd2Ural0sTWU9Q1tvZSt3ZStqXSx2ZT10ZSphdC1zZSpNZTtNZT10ZSpNZStzZSphdCx4W29lK3dlXT1VZSsoYXQ9dmUpLENbb2Urd2VdPUplK01lLHhbb2Urd2Ural09VWUtYXQsQ1tvZSt3ZStqXT1KZS1N'@;
put 'ZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3Rv'@;
put 'dHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVu'@;
put 'Y3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252'@;
put 'ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBl'@;
put 'LnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyks'@;
put 'SD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksb2U9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGos'@;
put 'QyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILG9lLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKm9lW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3'@;
put 'ZV0qdGVbd2VdK21bd2VdKm9lW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdh'@;
put 'dGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUu'@;
put 'bXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJv'@;
put 'dG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcx'@;
put 'MDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBl'@;
put 'LnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJh'@;
put 'eShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107'@;
put 'QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTAp'@;
put 'O3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1i'@;
put 'fUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5z'@;
put 'dHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8y'@;
put 'NjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYo'@;
put 'MCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigw'@;
put 'IT09QXx8bT49Qyk7bS0tKXt2YXIgb2U9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxvZT4+PlQsQT1vZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEp'@;
put 'LHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5'@;
put 'cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNo'@;
put 'cm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHAp'@;
put 'e2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9'@;
put 'TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnBy'@;
put 'b3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRo'@;
put 'aXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDti'@;
put 'PHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSks'@;
put 'dGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5u'@;
put 'ZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKysp'@;
put 'dGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5j'@;
put 'bG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAs'@;
put 'Yix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jk'@;
put 'c1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0'@;
put 'aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQu'@;
put 'd29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsx'@;
put 'LG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIG9lPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1vZS5uZWdhdGl2ZSYmKEM9b2UsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3Rl'@;
put 'Pj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2'@;
put 'ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5'@;
put 'cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1I'@;
put 'LmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5l'@;
put 'ZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+'@;
put 'dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06'@;
put 'e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlw'@;
put 'ZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRp'@;
put 'dm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVn'@;
put 'YXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4g'@;
put 'eH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAo'@;
put 'KX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9i'@;
put 'LnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNa'@;
put 'ZXJvKCk7KXtmb3IodmFyIG9lPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZvZTwyNjsrK29lLHRlPDw9MSk7aWYob2U+MClmb3IoYi5pdXNocm4ob2UpO29lLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigx'@;
put 'KTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNt'@;
put 'cCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJv'@;
put 'KCkpO3ZhciBvZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0m'@;
put 'RSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylU'@;
put 'LmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihvZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZvZS5pYWRkKHApLG9lfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rp'@;
put 'b24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7Qysr'@;
put 'KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7'@;
put 'Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1m'@;
put 'dW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYs'@;
put 'Qz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1q'@;
put 'Jj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7'@;
put 'dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3Zh'@;
put 'ciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2'@;
put 'ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgp'@;
put 'cmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJu'@;
put 'IDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNt'@;
put 'cChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9'@;
put 'LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVu'@;
put 'Y3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2'@;
put 'ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRo'@;
put 'aXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9y'@;
put 'Y2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMu'@;
put 'cmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3Vi'@;
put 'KHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhp'@;
put 'cy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zl'@;
put 'cmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0'@;
put 'aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlv'@;
put 'bigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3'@;
put 'b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp'@;
put 'cy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWco'@;
put 'dGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5Mjpu'@;
put 'dWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24g'@;
put 'bGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm'@;
put 'ZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2Zm'@;
put 'ZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJt'@;
put 'b2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2'@;
put 'KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10'@;
put 'aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5p'@;
put 'cmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09'@;
put 'PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1'@;
put 'bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9Qyxw'@;
put 'Lmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9'@;
put 'an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5s'@;
put 'ZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxw'@;
put 'fSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAh'@;
put 'PT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihyZVtwXSlyZXR1cm4gcmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7'@;
put 'aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiByZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGco'@;
put 'cC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVk'@;
put 'IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5l'@;
put 'Zz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJngu'@;
put 'aXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rp'@;
put 'b24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3Jl'@;
put 'dHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5'@;
put 'MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgp'@;
put 'KX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRo'@;
put 'aXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMp'@;
put 'LGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksb2U9dGhpcy5w'@;
put 'b3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVl'@;
put 'LTEpKTtvZT1vZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBvZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmlt'@;
put 'b2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3'@;
put 'IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9'@;
put 'Yi53b3Jkc1tUXSxvZT1tLTE7b2U+PTA7b2UtLSl7dmFyIHRlPUE+Pm9lJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PW9lKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0'@;
put 'dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcu'@;
put 'bW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IHplKHApfSxCKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlz'@;
put 'Lmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhp'@;
put 'cy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEgu'@;
put 'X2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24o'@;
put 'dGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5p'@;
put 'bnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPV8ubm1kKHVlKSx0aGlzKX0sNjEzODoodWUscSxfKT0+e3ZhciBJPV8oOTgwKSx5PV8oOTE5OSksZz1fKDc4NTkpLEI9XygyMTQ0KSx3PV8o'@;
put 'MzY2MyksUD1fKDM0ODIpLEY9Xyg0ODE4KSxPPV8oOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oVSxXLFkpe3ZhciBYO1g9VS5wYWRkaW5nP1UucGFkZGluZzpZPzE6NDt2YXIgcmUsZWU9SShVKSxKPWVlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFcubGVuZ3RoPkp8fG5ldyBC'@;
put 'KFcpLmNtcChlZS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZT1ZP0YobmV3IEIoVyksZWUpOncoVyxlZSk7dmFyIGllPU8uYWxsb2MoSi1yZS5sZW5ndGgpO2lmKHJlPU8uY29uY2F0KFtpZSxyZV0sSiksND09PVgpcmV0dXJuIGZ1bmN0aW9uIHoo'@;
put 'SyxVKXt2YXIgVz1LLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFk9UCgic2hhMSIpLnVwZGF0ZShPLmFsbG9jKDApKS5kaWdlc3QoKSxYPVkubGVuZ3RoO2lmKDAhPT1VWzBdKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3ZhciBlZT1VLnNsaWNlKDEsWCsxKSxKPVUuc2xpY2Uo'@;
put 'WCsxKSxyZT1nKGVlLHkoSixYKSksaWU9ZyhKLHkocmUsVy1YLTEpKTtpZihmdW5jdGlvbiBMKEssVSl7Sz1PLmZyb20oSyksVT1PLmZyb20oVSk7dmFyIFc9MCxZPUsubGVuZ3RoO0subGVuZ3RoIT09VS5sZW5ndGgmJihXKyssWT1NYXRoLm1pbihLLmxlbmd0aCxVLmxlbmd0aCkpO2Zvcih2'@;
put 'YXIgWD0tMTsrK1g8WTspVys9S1tYXV5VW1hdO3JldHVybiBXfShZLGllLnNsaWNlKDAsWCkpKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgbGU9WDswPT09aWVbbGVdOylsZSsrO2lmKDEhPT1pZVtsZSsrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24g'@;
put 'ZXJyb3IiKTtyZXR1cm4gaWUuc2xpY2UobGUpfShlZSxyZSk7aWYoMT09PVgpcmV0dXJuIGZ1bmN0aW9uIE4oSyxVLFcpe2Zvcih2YXIgWT1VLnNsaWNlKDAsMiksWD0yLGVlPTA7MCE9PVVbWCsrXTspaWYoWD49VS5sZW5ndGgpe2VlKys7YnJlYWt9dmFyIEo9VS5zbGljZSgyLFgtMSk7aWYo'@;
put 'KCIwMDAyIiE9PVkudG9TdHJpbmcoImhleCIpJiYhV3x8IjAwMDEiIT09WS50b1N0cmluZygiaGV4IikmJlcpJiZlZSsrLEoubGVuZ3RoPDgmJmVlKyssZWUpdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIFUuc2xpY2UoWCl9KDAscmUsWSk7aWYoMz09PVgpcmV0'@;
put 'dXJuIHJlO3Rocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIil9fSw2NTU5Oih1ZSxxLF8pPT57dmFyIEk9Xyg5ODApLHk9XygxNzk4KSxnPV8oMzQ4MiksQj1fKDkxOTkpLHc9Xyg3ODU5KSxQPV8oMjE0NCksRj1fKDQ4MTgpLE89XygzNjYzKSx6PV8oOTUwOSkuQnVmZmVyO3VlLmV4'@;
put 'cG9ydHM9ZnVuY3Rpb24oVyxZLFgpe3ZhciBlZTtlZT1XLnBhZGRpbmc/Vy5wYWRkaW5nOlg/MTo0O3ZhciByZSxKPUkoVyk7aWYoND09PWVlKXJlPWZ1bmN0aW9uIE4oVSxXKXt2YXIgWT1VLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFg9Vy5sZW5ndGgsZWU9Zygic2hhMSIpLnVwZGF0ZSh6LmFs'@;
put 'bG9jKDApKS5kaWdlc3QoKSxKPWVlLmxlbmd0aCxyZT0yKko7aWYoWD5ZLXJlLTIpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7dmFyIGllPXouYWxsb2MoWS1YLXJlLTIpLGxlPVktSi0xLG1lPXkoSiksX2U9dyh6LmNvbmNhdChbZWUsaWUsei5hbGxvYygxLDEpLFddLGxl'@;
put 'KSxCKG1lLGxlKSksVGU9dyhtZSxCKF9lLEopKTtyZXR1cm4gbmV3IFAoei5jb25jYXQoW3ouYWxsb2MoMSksVGUsX2VdLFkpKX0oSixZKTtlbHNlIGlmKDE9PT1lZSlyZT1mdW5jdGlvbiBMKFUsVyxZKXt2YXIgSixYPVcubGVuZ3RoLGVlPVUubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoWD5l'@;
put 'ZS0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gSj1ZP3ouYWxsb2MoZWUtWC0zLDI1NSk6ZnVuY3Rpb24gSyhVKXtmb3IodmFyIEosVz16LmFsbG9jVW5zYWZlKFUpLFk9MCxYPXkoMipVKSxlZT0wO1k8VTspZWU9PT1YLmxlbmd0aCYmKFg9eSgyKlUpLGVl'@;
put 'PTApLChKPVhbZWUrK10pJiYoV1tZKytdPUopO3JldHVybiBXfShlZS1YLTMpLG5ldyBQKHouY29uY2F0KFt6LmZyb20oWzAsWT8xOjJdKSxKLHouYWxsb2MoMSksV10sZWUpKX0oSixZLFgpO2Vsc2V7aWYoMyE9PWVlKXRocm93IG5ldyBFcnJvcigidW5rbm93biBwYWRkaW5nIik7aWYoKHJl'@;
put 'PW5ldyBQKFkpKS5jbXAoSi5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gWD9PKHJlLEopOkYocmUsSil9fSw0ODE4Oih1ZSxxLF8pPT57dmFyIEk9XygyMTQ0KSx5PV8oOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rp'@;
put 'b24gZyhCLHcpe3JldHVybiB5LmZyb20oQi50b1JlZChJLm1vbnQody5tb2R1bHVzKSkucmVkUG93KG5ldyBJKHcucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCkudG9BcnJheSgpKX19LDc4NTk6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sSSl7Zm9yKHZhciB5PV8ubGVuZ3RoLGc9LTE7'@;
put 'KytnPHk7KV9bZ11ePUlbZ107cmV0dXJuIF99fSwzNjg5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO18ucihxKSxfLmQocSx7ZGVjb2RlOigpPT5TZSxkZWZhdWx0OigpPT54LGVuY29kZTooKT0+emUsdG9BU0NJSTooKT0+cCx0b1VuaWNvZGU6KCk9PlYsdWNzMmRlY29kZTooKT0+aWUsdWNz'@;
put 'MmVuY29kZTooKT0+bGV9KTtjb25zdCBJPTIxNDc0ODM2NDcseT0zNixOPS9eeG4tLS8sTD0vW15cMC1ceDdGXS8sSz0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csVT17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJh'@;
put 'c2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sWT1NYXRoLmZsb29yLFg9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBlZShDKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihVW0NdKX1m'@;
put 'dW5jdGlvbiByZShDLFQpe2NvbnN0IEg9Qy5zcGxpdCgiQCIpO2xldCBqPSIiO0gubGVuZ3RoPjEmJihqPUhbMF0rIkAiLEM9SFsxXSk7Y29uc3QgbT1mdW5jdGlvbiBKKEMsVCl7Y29uc3QgSD1bXTtsZXQgaj1DLmxlbmd0aDtmb3IoO2otLTspSFtqXT1UKENbal0pO3JldHVybiBIfSgoQz1D'@;
put 'LnJlcGxhY2UoSywiLiIpKS5zcGxpdCgiLiIpLFQpLmpvaW4oIi4iKTtyZXR1cm4gaittfWZ1bmN0aW9uIGllKEMpe2NvbnN0IFQ9W107bGV0IEg9MDtjb25zdCBqPUMubGVuZ3RoO2Zvcig7SDxqOyl7Y29uc3QgRT1DLmNoYXJDb2RlQXQoSCsrKTtpZihFPj01NTI5NiYmRTw9NTYzMTkmJkg8'@;
put 'ail7Y29uc3QgbT1DLmNoYXJDb2RlQXQoSCsrKTs1NjMyMD09KDY0NTEyJm0pP1QucHVzaCgoKDEwMjMmRSk8PDEwKSsoMTAyMyZtKSs2NTUzNik6KFQucHVzaChFKSxILS0pfWVsc2UgVC5wdXNoKEUpfXJldHVybiBUfWNvbnN0IGxlPUM9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLkMpLG1l'@;
put 'PWZ1bmN0aW9uKEMpe3JldHVybiBDPj00OCYmQzw1OD9DLTQ4KzI2OkM+PTY1JiZDPDkxP0MtNjU6Qz49OTcmJkM8MTIzP0MtOTc6eX0sX2U9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQysyMis3NSooQzwyNiktKCgwIT1UKTw8NSl9LFRlPWZ1bmN0aW9uKEMsVCxIKXtsZXQgaj0wO2ZvcihDPUg/'@;
put 'WShDLzcwMCk6Qz4+MSxDKz1ZKEMvVCk7Qz40NTU7ais9eSlDPVkoQy8zNSk7cmV0dXJuIFkoaiszNipDLyhDKzM4KSl9LFNlPWZ1bmN0aW9uKEMpe2NvbnN0IFQ9W10sSD1DLmxlbmd0aDtsZXQgaj0wLEU9MTI4LG09NzIsQT1DLmxhc3RJbmRleE9mKCItIik7QTwwJiYoQT0wKTtmb3IobGV0'@;
put 'IG9lPTA7b2U8QTsrK29lKUMuY2hhckNvZGVBdChvZSk+PTEyOCYmZWUoIm5vdC1iYXNpYyIpLFQucHVzaChDLmNoYXJDb2RlQXQob2UpKTtmb3IobGV0IG9lPUE+MD9BKzE6MDtvZTxIOyl7Y29uc3QgdGU9ajtmb3IobGV0IHdlPTEsVWU9eTs7VWUrPXkpe29lPj1IJiZlZSgiaW52YWxpZC1p'@;
put 'bnB1dCIpO2NvbnN0IEplPW1lKEMuY2hhckNvZGVBdChvZSsrKSk7SmU+PXkmJmVlKCJpbnZhbGlkLWlucHV0IiksSmU+WSgoSS1qKS93ZSkmJmVlKCJvdmVyZmxvdyIpLGorPUplKndlO2NvbnN0IGF0PVVlPD1tPzE6VWU+PW0rMjY/MjY6VWUtbTtpZihKZTxhdClicmVhaztjb25zdCBNZT15'@;
put 'LWF0O3dlPlkoSS9NZSkmJmVlKCJvdmVyZmxvdyIpLHdlKj1NZX1jb25zdCBzZT1ULmxlbmd0aCsxO209VGUoai10ZSxzZSwwPT10ZSksWShqL3NlKT5JLUUmJmVlKCJvdmVyZmxvdyIpLEUrPVkoai9zZSksaiU9c2UsVC5zcGxpY2UoaisrLDAsRSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBv'@;
put 'aW50KC4uLlQpfSx6ZT1mdW5jdGlvbihDKXtjb25zdCBUPVtdLEg9KEM9aWUoQykpLmxlbmd0aDtsZXQgaj0xMjgsRT0wLG09NzI7Zm9yKGNvbnN0IHRlIG9mIEMpdGU8MTI4JiZULnB1c2goWCh0ZSkpO2NvbnN0IEE9VC5sZW5ndGg7bGV0IG9lPUE7Zm9yKEEmJlQucHVzaCgiLSIpO29lPEg7'@;
put 'KXtsZXQgdGU9STtmb3IoY29uc3Qgd2Ugb2YgQyl3ZT49aiYmd2U8dGUmJih0ZT13ZSk7Y29uc3Qgc2U9b2UrMTt0ZS1qPlkoKEktRSkvc2UpJiZlZSgib3ZlcmZsb3ciKSxFKz0odGUtaikqc2Usaj10ZTtmb3IoY29uc3Qgd2Ugb2YgQylpZih3ZTxqJiYrK0U+SSYmZWUoIm92ZXJmbG93Iiks'@;
put 'd2U9PT1qKXtsZXQgVWU9RTtmb3IobGV0IEplPXk7O0plKz15KXtjb25zdCBhdD1KZTw9bT8xOkplPj1tKzI2PzI2OkplLW07aWYoVWU8YXQpYnJlYWs7Y29uc3QgTWU9VWUtYXQsdmU9eS1hdDtULnB1c2goWChfZShhdCtNZSV2ZSwwKSkpLFVlPVkoTWUvdmUpfVQucHVzaChYKF9lKFVlLDAp'@;
put 'KSksbT1UZShFLHNlLG9lPT09QSksRT0wLCsrb2V9KytFLCsran1yZXR1cm4gVC5qb2luKCIiKX0sVj1mdW5jdGlvbihDKXtyZXR1cm4gcmUoQyxmdW5jdGlvbihUKXtyZXR1cm4gTi50ZXN0KFQpP1NlKFQuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6VH0pfSxwPWZ1bmN0aW9uKEMpe3JldHVy'@;
put 'biByZShDLGZ1bmN0aW9uKFQpe3JldHVybiBMLnRlc3QoVCk/InhuLS0iK3plKFQpOlR9KX0seD17dmVyc2lvbjoiMi4zLjEiLHVjczI6e2RlY29kZTppZSxlbmNvZGU6bGV9LGRlY29kZTpTZSxlbmNvZGU6emUsdG9BU0NJSTpwLHRvVW5pY29kZTpWfX0sNzEyOToodWUscSk9PnsidXNlIHN0'@;
put 'cmljdCI7dmFyIF89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiB5KFApe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KFAucmVwbGFjZSgvXCsvZywiICIpKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gZyhQKXt0cnl7cmV0dXJuIGVuY29kZVVSSUNv'@;
put 'bXBvbmVudChQKX1jYXRjaHtyZXR1cm4gbnVsbH19cS5zdHJpbmdpZnk9ZnVuY3Rpb24gdyhQLEYpe0Y9Rnx8IiI7dmFyIHosTixPPVtdO2ZvcihOIGluInN0cmluZyIhPXR5cGVvZiBGJiYoRj0iPyIpLFApaWYoXy5jYWxsKFAsTikpe2lmKCEoej1QW05dKSYmKG51bGw9PXp8fGlzTmFOKHop'@;
put 'KSYmKHo9IiIpLE49ZyhOKSx6PWcoeiksbnVsbD09PU58fG51bGw9PT16KWNvbnRpbnVlO08ucHVzaChOKyI9Iit6KX1yZXR1cm4gTy5sZW5ndGg/RitPLmpvaW4oIiYiKToiIn0scS5wYXJzZT1mdW5jdGlvbiBCKFApe2Zvcih2YXIgeixGPS8oW149PyMmXSspPT8oW14mXSopL2csTz17fTt6'@;
put 'PUYuZXhlYyhQKTspe3ZhciBOPXkoelsxXSksTD15KHpbMl0pO251bGw9PT1OfHxudWxsPT09THx8TiBpbiBPfHwoT1tOXT1MKX1yZXR1cm4gT319LDE3OTg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KSx5PTY1NTM2LHc9Xyg5NTA5KS5CdWZmZXIsUD1fLmcuY3J5cHRv'@;
put 'fHxfLmcubXNDcnlwdG87dWUuZXhwb3J0cz1QJiZQLmdldFJhbmRvbVZhbHVlcz9mdW5jdGlvbiBGKE8seil7aWYoTz40Mjk0OTY3Mjk1KXRocm93IG5ldyBSYW5nZUVycm9yKCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzIik7dmFyIE49dy5hbGxvY1Vuc2FmZShPKTtpZihPPjAp'@;
put 'aWYoTz55KWZvcih2YXIgTD0wO0w8TztMKz15KVAuZ2V0UmFuZG9tVmFsdWVzKE4uc2xpY2UoTCxMK3kpKTtlbHNlIFAuZ2V0UmFuZG9tVmFsdWVzKE4pO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB6P0kubmV4dFRpY2soZnVuY3Rpb24oKXt6KG51bGwsTil9KTpOfTpmdW5jdGlvbiBCKCl7'@;
put 'dGhyb3cgbmV3IEVycm9yKCJTZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyLlxuVXNlIENocm9tZSwgRmlyZWZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfX0sNzk2MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'ST1fKDQxNTUpO2Z1bmN0aW9uIHkoKXt0aHJvdyBuZXcgRXJyb3IoInNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXJcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTEiKX12YXIgZz1fKDk1MDkpLEI9'@;
put 'XygxNzk4KSx3PWcuQnVmZmVyLFA9Zy5rTWF4TGVuZ3RoLEY9Xy5nLmNyeXB0b3x8Xy5nLm1zQ3J5cHRvLE89TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiB6KFcsWSl7aWYoIm51bWJlciIhPXR5cGVvZiBXfHxXIT1XKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVt'@;
put 'YmVyIik7aWYoVz5PfHxXPDApdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50MzIiKTtpZihXPlB8fFc+WSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIE4oVyxZLFgpe2lmKCJudW1iZXIiIT10eXBlb2YgV3x8VyE9'@;
put 'Vyl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihXPk98fFc8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihXK1k+WHx8Vz5QKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rp'@;
put 'b24gSyhXLFksWCxlZSl7aWYoSS5icm93c2VyKXt2YXIgcmU9bmV3IFVpbnQ4QXJyYXkoVy5idWZmZXIsWSxYKTtyZXR1cm4gRi5nZXRSYW5kb21WYWx1ZXMocmUpLGVlP3ZvaWQgSS5uZXh0VGljayhmdW5jdGlvbigpe2VlKG51bGwsVyl9KTpXfWlmKCFlZSlyZXR1cm4gQihYKS5jb3B5KFcs'@;
put 'WSksVztCKFgsZnVuY3Rpb24obGUsbWUpe2lmKGxlKXJldHVybiBlZShsZSk7bWUuY29weShXLFkpLGVlKG51bGwsVyl9KX1GJiZGLmdldFJhbmRvbVZhbHVlc3x8IUkuYnJvd3Nlcj8ocS5yYW5kb21GaWxsPWZ1bmN0aW9uIEwoVyxZLFgsZWUpe2lmKCEody5pc0J1ZmZlcihXKXx8VyBpbnN0'@;
put 'YW5jZW9mIF8uZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgWSllZT1ZLFk9MCxYPVcubGVuZ3RoO2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIFgp'@;
put 'ZWU9WCxYPVcubGVuZ3RoLVk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgZWUpdGhyb3cgbmV3IFR5cGVFcnJvcignImNiIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1cm4geihZLFcubGVuZ3RoKSxOKFgsWSxXLmxlbmd0aCksSyhXLFksWCxlZSl9LHEucmFuZG9tRmls'@;
put 'bFN5bmM9ZnVuY3Rpb24gVShXLFksWCl7aWYodHlwZW9mIFk+InUiJiYoWT0wKSwhKHcuaXNCdWZmZXIoVyl8fFcgaW5zdGFuY2VvZiBfLmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0'@;
put 'dXJuIHooWSxXLmxlbmd0aCksdm9pZCAwPT09WCYmKFg9Vy5sZW5ndGgtWSksTihYLFksVy5sZW5ndGgpLEsoVyxZLFgpfSk6KHEucmFuZG9tRmlsbD15LHEucmFuZG9tRmlsbFN5bmM9eSl9LDQyODE6dWU9PnsidXNlIHN0cmljdCI7dmFyIF89e307ZnVuY3Rpb24gSShQLEYsTyl7T3x8KE89'@;
put 'RXJyb3IpO3ZhciBOPWZ1bmN0aW9uKEwpe2Z1bmN0aW9uIEsoVSxXLFkpe3JldHVybiBMLmNhbGwodGhpcyxmdW5jdGlvbiB6KEwsSyxVKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEY/RjpGKEwsSyxVKX0oVSxXLFkpKXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gcShQLEYpe1AucHJvdG90eXBl'@;
put 'PU9iamVjdC5jcmVhdGUoRi5wcm90b3R5cGUpLFAucHJvdG90eXBlLmNvbnN0cnVjdG9yPVAsUC5fX3Byb3RvX189Rn0oSyxMKSxLfShPKTtOLnByb3RvdHlwZS5uYW1lPU8ubmFtZSxOLnByb3RvdHlwZS5jb2RlPVAsX1tQXT1OfWZ1bmN0aW9uIHkoUCxGKXtpZihBcnJheS5pc0FycmF5KFAp'@;
put 'KXt2YXIgTz1QLmxlbmd0aDtyZXR1cm4gUD1QLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gU3RyaW5nKHopfSksTz4yPyJvbmUgb2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQLnNsaWNlKDAsTy0xKS5qb2luKCIsICIpLCIsIG9yICIpK1BbTy0xXToyPT09Tz8ib25lIG9mICIuY29uY2F0KEYs'@;
put 'IiAiKS5jb25jYXQoUFswXSwiIG9yICIpLmNvbmNhdChQWzFdKToib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChTdHJpbmcoUCkpfUkoIkVSUl9JTlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oUCxGKXtyZXR1cm4nVGhl'@;
put 'IHZhbHVlICInK0YrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK1ArJyInfSxUeXBlRXJyb3IpLEkoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihQLEYsTyl7dmFyIHosTjtpZigic3RyaW5nIj09dHlwZW9mIEYmJmZ1bmN0aW9uIGcoUCxGLE8pe3JldHVybiBQLnN1YnN0cigh'@;
put 'T3x8TzwwPzA6K08sRi5sZW5ndGgpPT09Rn0oRiwibm90ICIpPyh6PSJtdXN0IG5vdCBiZSIsRj1GLnJlcGxhY2UoL15ub3QgLywiIikpOno9Im11c3QgYmUiLGZ1bmN0aW9uIEIoUCxGLE8pe3JldHVybih2b2lkIDA9PT1PfHxPPlAubGVuZ3RoKSYmKE89UC5sZW5ndGgpLFAuc3Vic3RyaW5n'@;
put 'KE8tRi5sZW5ndGgsTyk9PT1GfShQLCIgYXJndW1lbnQiKSlOPSJUaGUgIi5jb25jYXQoUCwiICIpLmNvbmNhdCh6LCIgIikuY29uY2F0KHkoRiwidHlwZSIpKTtlbHNle3ZhciBMPWZ1bmN0aW9uIHcoUCxGLE8pe3JldHVybiJudW1iZXIiIT10eXBlb2YgTyYmKE89MCksIShPK0YubGVuZ3Ro'@;
put 'PlAubGVuZ3RoKSYmLTEhPT1QLmluZGV4T2YoRixPKX0oUCwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtOPSdUaGUgIicuY29uY2F0KFAsJyIgJykuY29uY2F0KEwsIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdCh5KEYsInR5cGUiKSl9cmV0dXJuIE4rIi4gUmVjZWl2ZWQgdHlwZSAiLmNv'@;
put 'bmNhdCh0eXBlb2YgTyl9LFR5cGVFcnJvciksSSgiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksSSgiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9uKFApe3JldHVybiJUaGUgIitQKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1l'@;
put 'bnRlZCJ9KSxJKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLEkoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihQKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitQKyIgYWZ0ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxJKCJFUlJfTVVMVElQ'@;
put 'TEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxJKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLEkoIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksSSgiRVJSX1NUUkVB'@;
put 'TV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLEkoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihQKXtyZXR1cm4iVW5rbm93biBlbmNvZGluZzogIitQfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fVU5TSElGVF9B'@;
put 'RlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLHVlLmV4cG9ydHMucT1ffSw2NzUzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSkseT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oTCl7dmFyIEs9W107Zm9yKHZhciBVIGluIEwpSy5w'@;
put 'dXNoKFUpO3JldHVybiBLfTt1ZS5leHBvcnRzPU87dmFyIGc9Xyg5NDgxKSxCPV8oNDIyOSk7Xyg1NzE3KShPLGcpO2Zvcih2YXIgdz15KEIucHJvdG90eXBlKSxQPTA7UDx3Lmxlbmd0aDtQKyspe3ZhciBGPXdbUF07Ty5wcm90b3R5cGVbRl18fChPLnByb3RvdHlwZVtGXT1CLnByb3RvdHlw'@;
put 'ZVtGXSl9ZnVuY3Rpb24gTyhMKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8oTCk7Zy5jYWxsKHRoaXMsTCksQi5jYWxsKHRoaXMsTCksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLEwmJighMT09PUwucmVhZGFibGUmJih0aGlzLnJlYWRhYmxlPSExKSwhMT09PUwud3JpdGFi'@;
put 'bGUmJih0aGlzLndyaXRhYmxlPSExKSwhMT09PUwuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSx0aGlzLm9uY2UoImVuZCIseikpKX1mdW5jdGlvbiB6KCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhOLHRoaXMpfWZ1bmN0aW9uIE4oTCl7TC5l'@;
put 'bmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90'@;
put 'b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3Ro'@;
put 'Iix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlz'@;
put 'Ll9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10'@;
put 'aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KX0sMjcyNToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXk7dmFyIEk9Xyg0NjA1KTtmdW5jdGlvbiB5KGcpe2lmKCEo'@;
put 'dGhpcyBpbnN0YW5jZW9mIHkpKXJldHVybiBuZXcgeShnKTtJLmNhbGwodGhpcyxnKX1fKDU3MTcpKHksSSkseS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihnLEIsdyl7dyhudWxsLGcpfX0sOTQ4MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeSxJPV8oNDE1NSk7dWUuZXhw'@;
put 'b3J0cz1wLHAuUmVhZGFibGVTdGF0ZT1WLF8oNzE4Nyk7dmFyIEwsQj1mdW5jdGlvbihSZSxJZSl7cmV0dXJuIFJlLmxpc3RlbmVycyhJZSkubGVuZ3RofSx3PV8oMjUwMyksUD1fKDg3NjQpLkJ1ZmZlcixGPSh0eXBlb2YgXy5nPCJ1Ij9fLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5'@;
put 'cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sTj1fKDQ2MTYpO0w9TiYmTi5kZWJ1Z2xvZz9OLmRlYnVnbG9nKCJzdHJlYW0iKTpmdW5jdGlvbigpe307dmFyIGxlLG1lLF9lLEs9Xyg3MzI3KSxVPV8oMTE5NSksWT1fKDI0NTcpLmdldEhpZ2hXYXRlck1h'@;
put 'cmssWD1fKDQyODEpLnEsZWU9WC5FUlJfSU5WQUxJRF9BUkdfVFlQRSxKPVguRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRixyZT1YLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGllPVguRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtfKDU3MTcpKHAsdyk7dmFyIFRlPVUu'@;
put 'ZXJyb3JPckRlc3Ryb3ksU2U9WyJlcnJvciIsImNsb3NlIiwiZGVzdHJveSIsInBhdXNlIiwicmVzdW1lIl07ZnVuY3Rpb24gVihGZSxSZSxJZSl7eT15fHxfKDY3NTMpLCJib29sZWFuIiE9dHlwZW9mIEllJiYoSWU9UmUgaW5zdGFuY2VvZiB5KSx0aGlzLm9iamVjdE1vZGU9ISEoRmU9RmV8'@;
put 'fHt9KS5vYmplY3RNb2RlLEllJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFGZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1ZKHRoaXMsRmUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIsSWUpLHRoaXMuYnVmZmVyPW5ldyBLLHRoaXMubGVuZ3Ro'@;
put 'PTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhp'@;
put 'cy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PUZlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhRmUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rp'@;
put 'bmc9RmUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsRmUuZW5jb2RpbmcmJihsZXx8KGxlPV8oMjU1MykucyksdGhpcy5kZWNvZGVyPW5ldyBsZShGZS5lbmNv'@;
put 'ZGluZyksdGhpcy5lbmNvZGluZz1GZS5lbmNvZGluZyl9ZnVuY3Rpb24gcChGZSl7aWYoeT15fHxfKDY3NTMpLCEodGhpcyBpbnN0YW5jZW9mIHApKXJldHVybiBuZXcgcChGZSk7dGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgVihGZSx0aGlzLHRoaXMgaW5zdGFuY2VvZiB5KSx0aGlzLnJlYWRh'@;
put 'YmxlPSEwLEZlJiYoImZ1bmN0aW9uIj09dHlwZW9mIEZlLnJlYWQmJih0aGlzLl9yZWFkPUZlLnJlYWQpLCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1GZS5kZXN0cm95KSksdy5jYWxsKHRoaXMpfWZ1bmN0aW9uIGIoRmUsUmUsSWUsVmUsa2Upe0woInJl'@;
put 'YWRhYmxlQWRkQ2h1bmsiLFJlKTt2YXIgX3QsQWU9RmUuX3JlYWRhYmxlU3RhdGU7aWYobnVsbD09PVJlKUFlLnJlYWRpbmc9ITEsZnVuY3Rpb24gRShGZSxSZSl7aWYoTCgib25Fb2ZDaHVuayIpLCFSZS5lbmRlZCl7aWYoUmUuZGVjb2Rlcil7dmFyIEllPVJlLmRlY29kZXIuZW5kKCk7SWUm'@;
put 'JkllLmxlbmd0aCYmKFJlLmJ1ZmZlci5wdXNoKEllKSxSZS5sZW5ndGgrPVJlLm9iamVjdE1vZGU/MTpJZS5sZW5ndGgpfVJlLmVuZGVkPSEwLFJlLnN5bmM/bShGZSk6KFJlLm5lZWRSZWFkYWJsZT0hMSxSZS5lbWl0dGVkUmVhZGFibGV8fChSZS5lbWl0dGVkUmVhZGFibGU9ITAsQShGZSkp'@;
put 'KX19KEZlLEFlKTtlbHNlIGlmKGtlfHwoX3Q9ZnVuY3Rpb24gQyhGZSxSZSl7dmFyIEllO3JldHVybiFmdW5jdGlvbiB6KEZlKXtyZXR1cm4gUC5pc0J1ZmZlcihGZSl8fEZlIGluc3RhbmNlb2YgRn0oUmUpJiYic3RyaW5nIiE9dHlwZW9mIFJlJiZ2b2lkIDAhPT1SZSYmIUZlLm9iamVjdE1v'@;
put 'ZGUmJihJZT1uZXcgZWUoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxSZSkpLEllfShBZSxSZSkpLF90KVRlKEZlLF90KTtlbHNlIGlmKEFlLm9iamVjdE1vZGV8fFJlJiZSZS5sZW5ndGg+MClpZigic3RyaW5nIiE9dHlwZW9mIFJlJiYhQWUub2JqZWN0TW9kZSYm'@;
put 'T2JqZWN0LmdldFByb3RvdHlwZU9mKFJlKSE9PVAucHJvdG90eXBlJiYoUmU9ZnVuY3Rpb24gTyhGZSl7cmV0dXJuIFAuZnJvbShGZSl9KFJlKSksVmUpQWUuZW5kRW1pdHRlZD9UZShGZSxuZXcgaWUpOngoRmUsQWUsUmUsITApO2Vsc2UgaWYoQWUuZW5kZWQpVGUoRmUsbmV3IEopO2Vsc2V7'@;
put 'aWYoQWUuZGVzdHJveWVkKXJldHVybiExO0FlLnJlYWRpbmc9ITEsQWUuZGVjb2RlciYmIUllPyhSZT1BZS5kZWNvZGVyLndyaXRlKFJlKSxBZS5vYmplY3RNb2RlfHwwIT09UmUubGVuZ3RoP3goRmUsQWUsUmUsITEpOm9lKEZlLEFlKSk6eChGZSxBZSxSZSwhMSl9ZWxzZSBWZXx8KEFlLnJl'@;
put 'YWRpbmc9ITEsb2UoRmUsQWUpKTtyZXR1cm4hQWUuZW5kZWQmJihBZS5sZW5ndGg8QWUuaGlnaFdhdGVyTWFya3x8MD09PUFlLmxlbmd0aCl9ZnVuY3Rpb24geChGZSxSZSxJZSxWZSl7UmUuZmxvd2luZyYmMD09PVJlLmxlbmd0aCYmIVJlLnN5bmM/KFJlLmF3YWl0RHJhaW49MCxGZS5lbWl0'@;
put 'KCJkYXRhIixJZSkpOihSZS5sZW5ndGgrPVJlLm9iamVjdE1vZGU/MTpJZS5sZW5ndGgsVmU/UmUuYnVmZmVyLnVuc2hpZnQoSWUpOlJlLmJ1ZmZlci5wdXNoKEllKSxSZS5uZWVkUmVhZGFibGUmJm0oRmUpKSxvZShGZSxSZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHAucHJvdG90eXBlLCJk'@;
put 'ZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKFJlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0'@;
put 'ZS5kZXN0cm95ZWQ9UmUpfX0pLHAucHJvdG90eXBlLmRlc3Ryb3k9VS5kZXN0cm95LHAucHJvdG90eXBlLl91bmRlc3Ryb3k9VS51bmRlc3Ryb3kscC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oRmUsUmUpe1JlKEZlKX0scC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihGZSxSZSl7dmFy'@;
put 'IFZlLEllPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEllLm9iamVjdE1vZGU/VmU9ITA6InN0cmluZyI9PXR5cGVvZiBGZSYmKChSZT1SZXx8SWUuZGVmYXVsdEVuY29kaW5nKSE9PUllLmVuY29kaW5nJiYoRmU9UC5mcm9tKEZlLFJlKSxSZT0iIiksVmU9ITApLGIodGhpcyxGZSxSZSwh'@;
put 'MSxWZSl9LHAucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24oRmUpe3JldHVybiBiKHRoaXMsRmUsbnVsbCwhMCwhMSl9LHAucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHAucHJvdG90eXBlLnNldEVuY29kaW5n'@;
put 'PWZ1bmN0aW9uKEZlKXtsZXx8KGxlPV8oMjU1Mykucyk7dmFyIFJlPW5ldyBsZShGZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPVJlLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgSWU9dGhpcy5f'@;
put 'cmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZCxWZT0iIjtudWxsIT09SWU7KVZlKz1SZS53cml0ZShJZS5kYXRhKSxJZT1JZS5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVhcigpLCIiIT09VmUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goVmUpLHRo'@;
put 'aXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPVZlLmxlbmd0aCx0aGlzfTt2YXIgVD0xMDczNzQxODI0O2Z1bmN0aW9uIGooRmUsUmUpe3JldHVybiBGZTw9MHx8MD09PVJlLmxlbmd0aCYmUmUuZW5kZWQ/MDpSZS5vYmplY3RNb2RlPzE6RmUhPUZlP1JlLmZsb3dpbmcmJlJlLmxlbmd0aD9SZS5i'@;
put 'dWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpSZS5sZW5ndGg6KEZlPlJlLmhpZ2hXYXRlck1hcmsmJihSZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIEgoRmUpe3JldHVybiBGZT49VD9GZT1UOihGZS0tLEZlfD1GZT4+PjEsRmV8PUZlPj4+MixGZXw9RmU+Pj40LEZlfD1GZT4+PjgsRmV8PUZlPj4+'@;
put 'MTYsRmUrKyksRmV9KEZlKSksRmU8PVJlLmxlbmd0aD9GZTpSZS5lbmRlZD9SZS5sZW5ndGg6KFJlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gbShGZSl7dmFyIFJlPUZlLl9yZWFkYWJsZVN0YXRlO0woImVtaXRSZWFkYWJsZSIsUmUubmVlZFJlYWRhYmxlLFJlLmVtaXR0ZWRSZWFk'@;
put 'YWJsZSksUmUubmVlZFJlYWRhYmxlPSExLFJlLmVtaXR0ZWRSZWFkYWJsZXx8KEwoImVtaXRSZWFkYWJsZSIsUmUuZmxvd2luZyksUmUuZW1pdHRlZFJlYWRhYmxlPSEwLEkubmV4dFRpY2soQSxGZSkpfWZ1bmN0aW9uIEEoRmUpe3ZhciBSZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJlbWl0UmVh'@;
put 'ZGFibGVfIixSZS5kZXN0cm95ZWQsUmUubGVuZ3RoLFJlLmVuZGVkKSwhUmUuZGVzdHJveWVkJiYoUmUubGVuZ3RofHxSZS5lbmRlZCkmJihGZS5lbWl0KCJyZWFkYWJsZSIpLFJlLmVtaXR0ZWRSZWFkYWJsZT0hMSksUmUubmVlZFJlYWRhYmxlPSFSZS5mbG93aW5nJiYhUmUuZW5kZWQmJlJl'@;
put 'Lmxlbmd0aDw9UmUuaGlnaFdhdGVyTWFyayxNZShGZSl9ZnVuY3Rpb24gb2UoRmUsUmUpe1JlLnJlYWRpbmdNb3JlfHwoUmUucmVhZGluZ01vcmU9ITAsSS5uZXh0VGljayh0ZSxGZSxSZSkpfWZ1bmN0aW9uIHRlKEZlLFJlKXtmb3IoOyFSZS5yZWFkaW5nJiYhUmUuZW5kZWQmJihSZS5sZW5n'@;
put 'dGg8UmUuaGlnaFdhdGVyTWFya3x8UmUuZmxvd2luZyYmMD09PVJlLmxlbmd0aCk7KXt2YXIgSWU9UmUubGVuZ3RoO2lmKEwoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksRmUucmVhZCgwKSxJZT09PVJlLmxlbmd0aClicmVha31SZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiB3ZShGZSl7dmFy'@;
put 'IFJlPUZlLl9yZWFkYWJsZVN0YXRlO1JlLnJlYWRhYmxlTGlzdGVuaW5nPUZlLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCxSZS5yZXN1bWVTY2hlZHVsZWQmJiFSZS5wYXVzZWQ/UmUuZmxvd2luZz0hMDpGZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmRmUucmVzdW1lKCl9ZnVuY3Rp'@;
put 'b24gVWUoRmUpe0woInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLEZlLnJlYWQoMCl9ZnVuY3Rpb24gYXQoRmUsUmUpe0woInJlc3VtZSIsUmUucmVhZGluZyksUmUucmVhZGluZ3x8RmUucmVhZCgwKSxSZS5yZXN1bWVTY2hlZHVsZWQ9ITEsRmUuZW1pdCgicmVzdW1lIiksTWUoRmUpLFJl'@;
put 'LmZsb3dpbmcmJiFSZS5yZWFkaW5nJiZGZS5yZWFkKDApfWZ1bmN0aW9uIE1lKEZlKXt2YXIgUmU9RmUuX3JlYWRhYmxlU3RhdGU7Zm9yKEwoImZsb3ciLFJlLmZsb3dpbmcpO1JlLmZsb3dpbmcmJm51bGwhPT1GZS5yZWFkKCk7KTt9ZnVuY3Rpb24gdmUoRmUsUmUpe3JldHVybiAwPT09UmUu'@;
put 'bGVuZ3RoP251bGw6KFJlLm9iamVjdE1vZGU/SWU9UmUuYnVmZmVyLnNoaWZ0KCk6IUZlfHxGZT49UmUubGVuZ3RoPyhJZT1SZS5kZWNvZGVyP1JlLmJ1ZmZlci5qb2luKCIiKToxPT09UmUuYnVmZmVyLmxlbmd0aD9SZS5idWZmZXIuZmlyc3QoKTpSZS5idWZmZXIuY29uY2F0KFJlLmxlbmd0'@;
put 'aCksUmUuYnVmZmVyLmNsZWFyKCkpOkllPVJlLmJ1ZmZlci5jb25zdW1lKEZlLFJlLmRlY29kZXIpLEllKTt2YXIgSWV9ZnVuY3Rpb24gWGUoRmUpe3ZhciBSZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJlbmRSZWFkYWJsZSIsUmUuZW5kRW1pdHRlZCksUmUuZW5kRW1pdHRlZHx8KFJlLmVuZGVk'@;
put 'PSEwLEkubmV4dFRpY2soamUsUmUsRmUpKX1mdW5jdGlvbiBqZShGZSxSZSl7aWYoTCgiZW5kUmVhZGFibGVOVCIsRmUuZW5kRW1pdHRlZCxGZS5sZW5ndGgpLCFGZS5lbmRFbWl0dGVkJiYwPT09RmUubGVuZ3RoJiYoRmUuZW5kRW1pdHRlZD0hMCxSZS5yZWFkYWJsZT0hMSxSZS5lbWl0KCJl'@;
put 'bmQiKSxGZS5hdXRvRGVzdHJveSkpe3ZhciBJZT1SZS5fd3JpdGFibGVTdGF0ZTsoIUllfHxJZS5hdXRvRGVzdHJveSYmSWUuZmluaXNoZWQpJiZSZS5kZXN0cm95KCl9fWZ1bmN0aW9uIERlKEZlLFJlKXtmb3IodmFyIEllPTAsVmU9RmUubGVuZ3RoO0llPFZlO0llKyspaWYoRmVbSWVdPT09'@;
put 'UmUpcmV0dXJuIEllO3JldHVybi0xfXAucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oRmUpe0woInJlYWQiLEZlKSxGZT1wYXJzZUludChGZSwxMCk7dmFyIFJlPXRoaXMuX3JlYWRhYmxlU3RhdGUsSWU9RmU7aWYoMCE9PUZlJiYoUmUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09RmUmJlJlLm5l'@;
put 'ZWRSZWFkYWJsZSYmKCgwIT09UmUuaGlnaFdhdGVyTWFyaz9SZS5sZW5ndGg+PVJlLmhpZ2hXYXRlck1hcms6UmUubGVuZ3RoPjApfHxSZS5lbmRlZCkpcmV0dXJuIEwoInJlYWQ6IGVtaXRSZWFkYWJsZSIsUmUubGVuZ3RoLFJlLmVuZGVkKSwwPT09UmUubGVuZ3RoJiZSZS5lbmRlZD9YZSh0'@;
put 'aGlzKTptKHRoaXMpLG51bGw7aWYoMD09PShGZT1qKEZlLFJlKSkmJlJlLmVuZGVkKXJldHVybiAwPT09UmUubGVuZ3RoJiZYZSh0aGlzKSxudWxsO3ZhciBrZSxWZT1SZS5uZWVkUmVhZGFibGU7cmV0dXJuIEwoIm5lZWQgcmVhZGFibGUiLFZlKSwoMD09PVJlLmxlbmd0aHx8UmUubGVuZ3Ro'@;
put 'LUZlPFJlLmhpZ2hXYXRlck1hcmspJiZMKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFyayIsVmU9ITApLFJlLmVuZGVkfHxSZS5yZWFkaW5nP0woInJlYWRpbmcgb3IgZW5kZWQiLFZlPSExKTpWZSYmKEwoImRvIHJlYWQiKSxSZS5yZWFkaW5nPSEwLFJlLnN5bmM9ITAsMD09PVJlLmxlbmd0'@;
put 'aCYmKFJlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChSZS5oaWdoV2F0ZXJNYXJrKSxSZS5zeW5jPSExLFJlLnJlYWRpbmd8fChGZT1qKEllLFJlKSkpLG51bGw9PT0oa2U9RmU+MD92ZShGZSxSZSk6bnVsbCk/KFJlLm5lZWRSZWFkYWJsZT1SZS5sZW5ndGg8PVJlLmhpZ2hXYXRlck1h'@;
put 'cmssRmU9MCk6KFJlLmxlbmd0aC09RmUsUmUuYXdhaXREcmFpbj0wKSwwPT09UmUubGVuZ3RoJiYoUmUuZW5kZWR8fChSZS5uZWVkUmVhZGFibGU9ITApLEllIT09RmUmJlJlLmVuZGVkJiZYZSh0aGlzKSksbnVsbCE9PWtlJiZ0aGlzLmVtaXQoImRhdGEiLGtlKSxrZX0scC5wcm90b3R5cGUu'@;
put 'X3JlYWQ9ZnVuY3Rpb24oRmUpe1RlKHRoaXMsbmV3IHJlKCJfcmVhZCgpIikpfSxwLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEZlLFJlKXt2YXIgSWU9dGhpcyxWZT10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChWZS5waXBlc0NvdW50KXtjYXNlIDA6VmUucGlwZXM9RmU7YnJlYWs7Y2Fz'@;
put 'ZSAxOlZlLnBpcGVzPVtWZS5waXBlcyxGZV07YnJlYWs7ZGVmYXVsdDpWZS5waXBlcy5wdXNoKEZlKX1WZS5waXBlc0NvdW50Kz0xLEwoInBpcGUgY291bnQ9JWQgb3B0cz0laiIsVmUucGlwZXNDb3VudCxSZSk7dmFyIEFlPVJlJiYhMT09PVJlLmVuZHx8RmU9PT1JLnN0ZG91dHx8RmU9PT1J'@;
put 'LnN0ZGVycj90dDpudDtmdW5jdGlvbiBudCgpe0woIm9uZW5kIiksRmUuZW5kKCl9VmUuZW5kRW1pdHRlZD9JLm5leHRUaWNrKEFlKTpJZS5vbmNlKCJlbmQiLEFlKSxGZS5vbigidW5waXBlIixmdW5jdGlvbiBfdChIZSx1dCl7TCgib251bnBpcGUiKSxIZT09PUllJiZ1dCYmITE9PT11dC5o'@;
put 'YXNVbnBpcGVkJiYodXQuaGFzVW5waXBlZD0hMCxmdW5jdGlvbiB5dCgpe0woImNsZWFudXAiKSxGZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLGl0KSxGZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIiwkZSksRmUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixRZSksRmUucmVtb3ZlTGlzdGVuZXIo'@;
put 'ImVycm9yIixEdCksRmUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsX3QpLEllLnJlbW92ZUxpc3RlbmVyKCJlbmQiLG50KSxJZS5yZW1vdmVMaXN0ZW5lcigiZW5kIix0dCksSWUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLE10KSx1bj0hMCxWZS5hd2FpdERyYWluJiYoIUZlLl93cml0YWJsZVN0'@;
put 'YXRlfHxGZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW4pJiZRZSgpfSgpKX0pO3ZhciBRZT1mdW5jdGlvbiBzZShGZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIEllPUZlLl9yZWFkYWJsZVN0YXRlO0woInBpcGVPbkRyYWluIixJZS5hd2FpdERyYWluKSxJZS5hd2FpdERyYWluJiZJZS5hd2Fp'@;
put 'dERyYWluLS0sMD09PUllLmF3YWl0RHJhaW4mJkIoRmUsImRhdGEiKSYmKEllLmZsb3dpbmc9ITAsTWUoRmUpKX19KEllKTtGZS5vbigiZHJhaW4iLFFlKTt2YXIgdW49ITE7ZnVuY3Rpb24gTXQoSGUpe0woIm9uZGF0YSIpO3ZhciB1dD1GZS53cml0ZShIZSk7TCgiZGVzdC53cml0ZSIsdXQp'@;
put 'LCExPT09dXQmJigoMT09PVZlLnBpcGVzQ291bnQmJlZlLnBpcGVzPT09RmV8fFZlLnBpcGVzQ291bnQ+MSYmLTEhPT1EZShWZS5waXBlcyxGZSkpJiYhdW4mJihMKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLFZlLmF3YWl0RHJhaW4pLFZlLmF3YWl0RHJhaW4rKyksSWUucGF1c2Uo'@;
put 'KSl9ZnVuY3Rpb24gRHQoSGUpe0woIm9uZXJyb3IiLEhlKSx0dCgpLEZlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsRHQpLDA9PT1CKEZlLCJlcnJvciIpJiZUZShGZSxIZSl9ZnVuY3Rpb24gaXQoKXtGZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIiwkZSksdHQoKX1mdW5jdGlvbiAkZSgpe0wo'@;
put 'Im9uZmluaXNoIiksRmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixpdCksdHQoKX1mdW5jdGlvbiB0dCgpe0woInVucGlwZSIpLEllLnVucGlwZShGZSl9cmV0dXJuIEllLm9uKCJkYXRhIixNdCksZnVuY3Rpb24gemUoRmUsUmUsSWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5wcmVwZW5k'@;
put 'TGlzdGVuZXIpcmV0dXJuIEZlLnByZXBlbmRMaXN0ZW5lcihSZSxJZSk7RmUuX2V2ZW50cyYmRmUuX2V2ZW50c1tSZV0/QXJyYXkuaXNBcnJheShGZS5fZXZlbnRzW1JlXSk/RmUuX2V2ZW50c1tSZV0udW5zaGlmdChJZSk6RmUuX2V2ZW50c1tSZV09W0llLEZlLl9ldmVudHNbUmVdXTpGZS5v'@;
put 'bihSZSxJZSl9KEZlLCJlcnJvciIsRHQpLEZlLm9uY2UoImNsb3NlIixpdCksRmUub25jZSgiZmluaXNoIiwkZSksRmUuZW1pdCgicGlwZSIsSWUpLFZlLmZsb3dpbmd8fChMKCJwaXBlIHJlc3VtZSIpLEllLnJlc3VtZSgpKSxGZX0scC5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKEZlKXt2'@;
put 'YXIgUmU9dGhpcy5fcmVhZGFibGVTdGF0ZSxJZT17aGFzVW5waXBlZDohMX07aWYoMD09PVJlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PVJlLnBpcGVzQ291bnQpcmV0dXJuIEZlJiZGZSE9PVJlLnBpcGVzfHwoRmV8fChGZT1SZS5waXBlcyksUmUucGlwZXM9bnVsbCxSZS5waXBl'@;
put 'c0NvdW50PTAsUmUuZmxvd2luZz0hMSxGZSYmRmUuZW1pdCgidW5waXBlIix0aGlzLEllKSksdGhpcztpZighRmUpe3ZhciBWZT1SZS5waXBlcyxrZT1SZS5waXBlc0NvdW50O1JlLnBpcGVzPW51bGwsUmUucGlwZXNDb3VudD0wLFJlLmZsb3dpbmc9ITE7Zm9yKHZhciBBZT0wO0FlPGtlO0Fl'@;
put 'KyspVmVbQWVdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBfdD1EZShSZS5waXBlcyxGZSk7cmV0dXJuLTE9PT1fdHx8KFJlLnBpcGVzLnNwbGljZShfdCwxKSxSZS5waXBlc0NvdW50LT0xLDE9PT1SZS5waXBlc0NvdW50JiYoUmUucGlwZXM9'@;
put 'UmUucGlwZXNbMF0pLEZlLmVtaXQoInVucGlwZSIsdGhpcyxJZSkpLHRoaXN9LHAucHJvdG90eXBlLmFkZExpc3RlbmVyPXAucHJvdG90eXBlLm9uPWZ1bmN0aW9uKEZlLFJlKXt2YXIgSWU9dy5wcm90b3R5cGUub24uY2FsbCh0aGlzLEZlLFJlKSxWZT10aGlzLl9yZWFkYWJsZVN0YXRlO3Jl'@;
put 'dHVybiJkYXRhIj09PUZlPyhWZS5yZWFkYWJsZUxpc3RlbmluZz10aGlzLmxpc3RlbmVyQ291bnQoInJlYWRhYmxlIik+MCwhMSE9PVZlLmZsb3dpbmcmJnRoaXMucmVzdW1lKCkpOiJyZWFkYWJsZSI9PT1GZSYmIVZlLmVuZEVtaXR0ZWQmJiFWZS5yZWFkYWJsZUxpc3RlbmluZyYmKFZlLnJl'@;
put 'YWRhYmxlTGlzdGVuaW5nPVZlLm5lZWRSZWFkYWJsZT0hMCxWZS5mbG93aW5nPSExLFZlLmVtaXR0ZWRSZWFkYWJsZT0hMSxMKCJvbiByZWFkYWJsZSIsVmUubGVuZ3RoLFZlLnJlYWRpbmcpLFZlLmxlbmd0aD9tKHRoaXMpOlZlLnJlYWRpbmd8fEkubmV4dFRpY2soVWUsdGhpcykpLEllfSxw'@;
put 'LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihGZSxSZSl7dmFyIEllPXcucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLmNhbGwodGhpcyxGZSxSZSk7cmV0dXJuInJlYWRhYmxlIj09PUZlJiZJLm5leHRUaWNrKHdlLHRoaXMpLEllfSxwLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0'@;
put 'ZW5lcnM9ZnVuY3Rpb24oRmUpe3ZhciBSZT13LnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybigicmVhZGFibGUiPT09RmV8fHZvaWQgMD09PUZlKSYmSS5uZXh0VGljayh3ZSx0aGlzKSxSZX0scC5wcm90b3R5cGUucmVzdW1lPWZ1bmN0'@;
put 'aW9uKCl7dmFyIEZlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIEZlLmZsb3dpbmd8fChMKCJyZXN1bWUiKSxGZS5mbG93aW5nPSFGZS5yZWFkYWJsZUxpc3RlbmluZyxmdW5jdGlvbiBKZShGZSxSZSl7UmUucmVzdW1lU2NoZWR1bGVkfHwoUmUucmVzdW1lU2NoZWR1bGVkPSEwLEkubmV4'@;
put 'dFRpY2soYXQsRmUsUmUpKX0odGhpcyxGZSkpLEZlLnBhdXNlZD0hMSx0aGlzfSxwLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBMKCJjYWxsIHBhdXNlIGZsb3dpbmc9JWoiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZs'@;
put 'b3dpbmcmJihMKCJwYXVzZSIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz0hMSx0aGlzLmVtaXQoInBhdXNlIikpLHRoaXMuX3JlYWRhYmxlU3RhdGUucGF1c2VkPSEwLHRoaXN9LHAucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oRmUpe3ZhciBSZT10aGlzLEllPXRoaXMuX3JlYWRhYmxl'@;
put 'U3RhdGUsVmU9ITE7Zm9yKHZhciBrZSBpbiBGZS5vbigiZW5kIixmdW5jdGlvbigpe2lmKEwoIndyYXBwZWQgZW5kIiksSWUuZGVjb2RlciYmIUllLmVuZGVkKXt2YXIgX3Q9SWUuZGVjb2Rlci5lbmQoKTtfdCYmX3QubGVuZ3RoJiZSZS5wdXNoKF90KX1SZS5wdXNoKG51bGwpfSksRmUub24o'@;
put 'ImRhdGEiLGZ1bmN0aW9uKF90KXtMKCJ3cmFwcGVkIGRhdGEiKSxJZS5kZWNvZGVyJiYoX3Q9SWUuZGVjb2Rlci53cml0ZShfdCkpLEllLm9iamVjdE1vZGUmJm51bGw9PV90fHwhKEllLm9iamVjdE1vZGV8fF90JiZfdC5sZW5ndGgpfHxSZS5wdXNoKF90KXx8KFZlPSEwLEZlLnBhdXNlKCkp'@;
put 'fSksRmUpdm9pZCAwPT09dGhpc1trZV0mJiJmdW5jdGlvbiI9PXR5cGVvZiBGZVtrZV0mJih0aGlzW2tlXT1mdW5jdGlvbihudCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEZlW250XS5hcHBseShGZSxhcmd1bWVudHMpfX0oa2UpKTtmb3IodmFyIEFlPTA7QWU8U2UubGVuZ3RoO0FlKysp'@;
put 'RmUub24oU2VbQWVdLHRoaXMuZW1pdC5iaW5kKHRoaXMsU2VbQWVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oX3Qpe0woIndyYXBwZWQgX3JlYWQiLF90KSxWZSYmKFZlPSExLEZlLnJlc3VtZSgpKX0sdGhpc30sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHAucHJvdG90eXBl'@;
put 'W1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1tZSYmKG1lPV8oNTg1MCkpLG1lKHRoaXMpfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigp'@;
put 'e3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHAucHJvdG90eXBlLCJyZWFkYWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRh'@;
put 'YmxlU3RhdGUuYnVmZmVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVGbG93aW5nIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxzZXQ6ZnVuY3Rpb24oUmUpe3RoaXMuX3JlYWRh'@;
put 'YmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9UmUpfX0pLHAuX2Zyb21MaXN0PXZlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0'@;
put 'YXRlLmxlbmd0aH19KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocC5mcm9tPWZ1bmN0aW9uKEZlLFJlKXtyZXR1cm4gdm9pZCAwPT09X2UmJihfZT1fKDUxNjcpKSxfZShwLEZlLFJlKX0pfSw0NjA1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Tzt2YXIgST1fKDQy'@;
put 'ODEpLnEseT1JLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELGc9SS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssQj1JLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsdz1JLkVSUl9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxQPV8oNjc1Myk7ZnVuY3Rpb24gRihMLEspe3ZhciBV'@;
put 'PXRoaXMuX3RyYW5zZm9ybVN0YXRlO1UudHJhbnNmb3JtaW5nPSExO3ZhciBXPVUud3JpdGVjYjtpZihudWxsPT09VylyZXR1cm4gdGhpcy5lbWl0KCJlcnJvciIsbmV3IGcpO1Uud3JpdGVjaHVuaz1udWxsLFUud3JpdGVjYj1udWxsLG51bGwhPUsmJnRoaXMucHVzaChLKSxXKEwpO3ZhciBZ'@;
put 'PXRoaXMuX3JlYWRhYmxlU3RhdGU7WS5yZWFkaW5nPSExLChZLm5lZWRSZWFkYWJsZXx8WS5sZW5ndGg8WS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChZLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIE8oTCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPKEwpO1AuY2Fs'@;
put 'bCh0aGlzLEwpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpGLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVjYjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVl'@;
put 'ZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSxMJiYoImZ1bmN0aW9uIj09dHlwZW9mIEwudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPUwudHJhbnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2YgTC5mbHVzaCYmKHRoaXMuX2ZsdXNoPUwuZmx1c2gpKSx0aGlzLm9u'@;
put 'KCJwcmVmaW5pc2giLHopfWZ1bmN0aW9uIHooKXt2YXIgTD10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ/Tih0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goZnVuY3Rpb24oSyxVKXtOKEwsSyxVKX0pfWZ1bmN0aW9u'@;
put 'IE4oTCxLLFUpe2lmKEspcmV0dXJuIEwuZW1pdCgiZXJyb3IiLEspO2lmKG51bGwhPVUmJkwucHVzaChVKSxMLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgdztpZihMLl90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEI7cmV0dXJuIEwucHVzaChudWxsKX1f'@;
put 'KDU3MTcpKE8sUCksTy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihMLEspe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLFAucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLEwsSyl9LE8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTCxLLFUpe1UobmV3'@;
put 'IHkoIl90cmFuc2Zvcm0oKSIpKX0sTy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihXLndyaXRlY2I9VSxXLndyaXRlY2h1bms9TCxXLndyaXRlZW5jb2Rpbmc9SywhVy50cmFuc2Zvcm1pbmcpe3ZhciBZPXRoaXMuX3JlYWRh'@;
put 'YmxlU3RhdGU7KFcubmVlZFRyYW5zZm9ybXx8WS5uZWVkUmVhZGFibGV8fFkubGVuZ3RoPFkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoWS5oaWdoV2F0ZXJNYXJrKX19LE8ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1L'@;
put 'LndyaXRlY2h1bmt8fEsudHJhbnNmb3JtaW5nP0submVlZFRyYW5zZm9ybT0hMDooSy50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKEsud3JpdGVjaHVuayxLLndyaXRlZW5jb2RpbmcsSy5hZnRlclRyYW5zZm9ybSkpfSxPLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihMLEsp'@;
put 'e1AucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxMLGZ1bmN0aW9uKFUpe0soVSl9KX19LDQyMjk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEIsST1fKDQxNTUpO2Z1bmN0aW9uIGcoTWUpe3ZhciB2ZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZp'@;
put 'bmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBhdChNZSx2ZSxYZSl7dmFyIGplPU1lLmVudHJ5O2ZvcihNZS5lbnRyeT1udWxsO2plOyl7dmFyIERlPWplLmNhbGxiYWNrO3ZlLnBlbmRpbmdjYi0tLERlKFhlKSxqZT1qZS5uZXh0fXZlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PU1lfSh2ZSxN'@;
put 'ZSl9fXVlLmV4cG9ydHM9VixWLldyaXRhYmxlU3RhdGU9U2U7dmFyIHplLHc9e2RlcHJlY2F0ZTpfKDQ5MjcpfSxQPV8oMjUwMyksRj1fKDg3NjQpLkJ1ZmZlcixPPSh0eXBlb2YgXy5nPCJ1Ij9fLmc6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5V'@;
put 'aW50OEFycmF5fHxmdW5jdGlvbigpe30sTD1fKDExOTUpLFU9XygyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLFc9Xyg0MjgxKS5xLFk9Vy5FUlJfSU5WQUxJRF9BUkdfVFlQRSxYPVcuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsZWU9Vy5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssSj1XLkVSUl9T'@;
put 'VFJFQU1fQ0FOTk9UX1BJUEUscmU9Vy5FUlJfU1RSRUFNX0RFU1RST1lFRCxpZT1XLkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsbGU9Vy5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxtZT1XLkVSUl9VTktOT1dOX0VOQ09ESU5HLF9lPUwuZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gVGUoKXt9'@;
put 'ZnVuY3Rpb24gU2UoTWUsdmUsWGUpe0I9Qnx8Xyg2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBYZSYmKFhlPXZlIGluc3RhbmNlb2YgQiksdGhpcy5vYmplY3RNb2RlPSEhKE1lPU1lfHx7fSkub2JqZWN0TW9kZSxYZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhTWUud3Jp'@;
put 'dGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9VSh0aGlzLE1lLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLFhlKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRl'@;
put 'c3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PU1lLmRlY29kZVN0cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPU1lLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMu'@;
put 'YnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oRGUpeyFmdW5jdGlvbiBFKE1lLHZlKXt2YXIgWGU9TWUuX3dyaXRhYmxlU3RhdGUsamU9WGUuc3luYyxEZT1YZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBEZSl0aHJvdyBuZXcgZWU7aWYoZnVuY3Rpb24g'@;
put 'aihNZSl7TWUud3JpdGluZz0hMSxNZS53cml0ZWNiPW51bGwsTWUubGVuZ3RoLT1NZS53cml0ZWxlbixNZS53cml0ZWxlbj0wfShYZSksdmUpIWZ1bmN0aW9uIEgoTWUsdmUsWGUsamUsRGUpey0tdmUucGVuZGluZ2NiLFhlPyhJLm5leHRUaWNrKERlLGplKSxJLm5leHRUaWNrKFVlLE1lLHZl'@;
put 'KSxNZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsX2UoTWUsamUpKTooRGUoamUpLE1lLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxfZShNZSxqZSksVWUoTWUsdmUpKX0oTWUsWGUsamUsdmUsRGUpO2Vsc2V7dmFyIEZlPXRlKFhlKXx8TWUuZGVzdHJveWVkOyFGZSYm'@;
put 'IVhlLmNvcmtlZCYmIVhlLmJ1ZmZlclByb2Nlc3NpbmcmJlhlLmJ1ZmZlcmVkUmVxdWVzdCYmb2UoTWUsWGUpLGplP0kubmV4dFRpY2sobSxNZSxYZSxGZSxEZSk6bShNZSxYZSxGZSxEZSl9fSh2ZSxEZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVk'@;
put 'UmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5pc2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmVtaXRDbG9zZT0hMSE9PU1lLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEhTWUuYXV0b0Rlc3Ry'@;
put 'b3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBnKHRoaXMpfWZ1bmN0aW9uIFYoTWUpe3ZhciB2ZT10aGlzIGluc3RhbmNlb2YoQj1CfHxfKDY3NTMpKTtpZighdmUmJiF6ZS5jYWxsKFYsdGhpcykpcmV0dXJuIG5ldyBWKE1lKTt0aGlz'@;
put 'Ll93cml0YWJsZVN0YXRlPW5ldyBTZShNZSx0aGlzLHZlKSx0aGlzLndyaXRhYmxlPSEwLE1lJiYoImZ1bmN0aW9uIj09dHlwZW9mIE1lLndyaXRlJiYodGhpcy5fd3JpdGU9TWUud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBNZS53cml0ZXYmJih0aGlzLl93cml0ZXY9TWUud3JpdGV2KSwi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgTWUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9TWUuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIE1lLmZpbmFsJiYodGhpcy5fZmluYWw9TWUuZmluYWwpKSxQLmNhbGwodGhpcyl9ZnVuY3Rpb24gVChNZSx2ZSxYZSxqZSxEZSxGZSxSZSl7dmUud3JpdGVs'@;
put 'ZW49amUsdmUud3JpdGVjYj1SZSx2ZS53cml0aW5nPSEwLHZlLnN5bmM9ITAsdmUuZGVzdHJveWVkP3ZlLm9ud3JpdGUobmV3IHJlKCJ3cml0ZSIpKTpYZT9NZS5fd3JpdGV2KERlLHZlLm9ud3JpdGUpOk1lLl93cml0ZShEZSxGZSx2ZS5vbndyaXRlKSx2ZS5zeW5jPSExfWZ1bmN0aW9uIG0o'@;
put 'TWUsdmUsWGUsamUpe1hlfHxmdW5jdGlvbiBBKE1lLHZlKXswPT09dmUubGVuZ3RoJiZ2ZS5uZWVkRHJhaW4mJih2ZS5uZWVkRHJhaW49ITEsTWUuZW1pdCgiZHJhaW4iKSl9KE1lLHZlKSx2ZS5wZW5kaW5nY2ItLSxqZSgpLFVlKE1lLHZlKX1mdW5jdGlvbiBvZShNZSx2ZSl7dmUuYnVmZmVy'@;
put 'UHJvY2Vzc2luZz0hMDt2YXIgWGU9dmUuYnVmZmVyZWRSZXF1ZXN0O2lmKE1lLl93cml0ZXYmJlhlJiZYZS5uZXh0KXt2YXIgRGU9bmV3IEFycmF5KHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSxGZT12ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU7RmUuZW50cnk9WGU7Zm9yKHZhciBSZT0wLEllPSEw'@;
put 'O1hlOylEZVtSZV09WGUsWGUuaXNCdWZ8fChJZT0hMSksWGU9WGUubmV4dCxSZSs9MTtEZS5hbGxCdWZmZXJzPUllLFQoTWUsdmUsITAsdmUubGVuZ3RoLERlLCIiLEZlLmZpbmlzaCksdmUucGVuZGluZ2NiKyssdmUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLEZlLm5leHQ/KHZlLmNvcmtl'@;
put 'ZFJlcXVlc3RzRnJlZT1GZS5uZXh0LEZlLm5leHQ9bnVsbCk6dmUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBnKHZlKSx2ZS5idWZmZXJlZFJlcXVlc3RDb3VudD0wfWVsc2V7Zm9yKDtYZTspe3ZhciBWZT1YZS5jaHVuaztpZihUKE1lLHZlLCExLHZlLm9iamVjdE1vZGU/MTpWZS5sZW5ndGgs'@;
put 'VmUsWGUuZW5jb2RpbmcsWGUuY2FsbGJhY2spLFhlPVhlLm5leHQsdmUuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSx2ZS53cml0aW5nKWJyZWFrfW51bGw9PT1YZSYmKHZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCl9dmUuYnVmZmVyZWRSZXF1ZXN0PVhlLHZlLmJ1ZmZlclByb2Nlc3Npbmc9'@;
put 'ITF9ZnVuY3Rpb24gdGUoTWUpe3JldHVybiBNZS5lbmRpbmcmJjA9PT1NZS5sZW5ndGgmJm51bGw9PT1NZS5idWZmZXJlZFJlcXVlc3QmJiFNZS5maW5pc2hlZCYmIU1lLndyaXRpbmd9ZnVuY3Rpb24gc2UoTWUsdmUpe01lLl9maW5hbChmdW5jdGlvbihYZSl7dmUucGVuZGluZ2NiLS0sWGUm'@;
put 'Jl9lKE1lLFhlKSx2ZS5wcmVmaW5pc2hlZD0hMCxNZS5lbWl0KCJwcmVmaW5pc2giKSxVZShNZSx2ZSl9KX1mdW5jdGlvbiBVZShNZSx2ZSl7dmFyIFhlPXRlKHZlKTtpZihYZSYmKGZ1bmN0aW9uIHdlKE1lLHZlKXshdmUucHJlZmluaXNoZWQmJiF2ZS5maW5hbENhbGxlZCYmKCJmdW5jdGlv'@;
put 'biIhPXR5cGVvZiBNZS5fZmluYWx8fHZlLmRlc3Ryb3llZD8odmUucHJlZmluaXNoZWQ9ITAsTWUuZW1pdCgicHJlZmluaXNoIikpOih2ZS5wZW5kaW5nY2IrKyx2ZS5maW5hbENhbGxlZD0hMCxJLm5leHRUaWNrKHNlLE1lLHZlKSkpfShNZSx2ZSksMD09PXZlLnBlbmRpbmdjYiYmKHZlLmZp'@;
put 'bmlzaGVkPSEwLE1lLmVtaXQoImZpbmlzaCIpLHZlLmF1dG9EZXN0cm95KSkpe3ZhciBqZT1NZS5fcmVhZGFibGVTdGF0ZTsoIWplfHxqZS5hdXRvRGVzdHJveSYmamUuZW5kRW1pdHRlZCkmJk1lLmRlc3Ryb3koKX1yZXR1cm4gWGV9Xyg1NzE3KShWLFApLFNlLnByb3RvdHlwZS5nZXRCdWZm'@;
put 'ZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHZlPXRoaXMuYnVmZmVyZWRSZXF1ZXN0LFhlPVtdO3ZlOylYZS5wdXNoKHZlKSx2ZT12ZS5uZXh0O3JldHVybiBYZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFNlLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OncuZGVwcmVjYXRl'@;
put 'KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYm'@;
put 'U3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KHplPUZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLFN5bWJvbC5oYXNJbnN0YW5jZSx7'@;
put 'dmFsdWU6ZnVuY3Rpb24odmUpe3JldHVybiEhemUuY2FsbCh0aGlzLHZlKXx8dGhpcz09PVYmJnZlJiZ2ZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFNlfX0pKTp6ZT1mdW5jdGlvbih2ZSl7cmV0dXJuIHZlIGluc3RhbmNlb2YgdGhpc30sVi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbigp'@;
put 'e19lKHRoaXMsbmV3IEopfSxWLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihNZSx2ZSxYZSl7dmFyIGplPXRoaXMuX3dyaXRhYmxlU3RhdGUsRGU9ITEsRmU9IWplLm9iamVjdE1vZGUmJmZ1bmN0aW9uIE4oTWUpe3JldHVybiBGLmlzQnVmZmVyKE1lKXx8TWUgaW5zdGFuY2VvZiBPfShNZSk7'@;
put 'cmV0dXJuIEZlJiYhRi5pc0J1ZmZlcihNZSkmJihNZT1mdW5jdGlvbiB6KE1lKXtyZXR1cm4gRi5mcm9tKE1lKX0oTWUpKSwiZnVuY3Rpb24iPT10eXBlb2YgdmUmJihYZT12ZSx2ZT1udWxsKSxGZT92ZT0iYnVmZmVyIjp2ZXx8KHZlPWplLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9'@;
put 'dHlwZW9mIFhlJiYoWGU9VGUpLGplLmVuZGluZz9mdW5jdGlvbiBwKE1lLHZlKXt2YXIgWGU9bmV3IGxlO19lKE1lLFhlKSxJLm5leHRUaWNrKHZlLFhlKX0odGhpcyxYZSk6KEZlfHxmdW5jdGlvbiBiKE1lLHZlLFhlLGplKXt2YXIgRGU7cmV0dXJuIG51bGw9PT1YZT9EZT1uZXcgaWU6InN0'@;
put 'cmluZyIhPXR5cGVvZiBYZSYmIXZlLm9iamVjdE1vZGUmJihEZT1uZXcgWSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0sWGUpKSwhRGV8fChfZShNZSxEZSksSS5uZXh0VGljayhqZSxEZSksITEpfSh0aGlzLGplLE1lLFhlKSkmJihqZS5wZW5kaW5nY2IrKyxEZT1mdW5jdGlvbiBDKE1l'@;
put 'LHZlLFhlLGplLERlLEZlKXtpZighWGUpe3ZhciBSZT1mdW5jdGlvbiB4KE1lLHZlLFhlKXtyZXR1cm4hTWUub2JqZWN0TW9kZSYmITEhPT1NZS5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIHZlJiYodmU9Ri5mcm9tKHZlLFhlKSksdmV9KHZlLGplLERlKTtqZSE9PVJlJiYoWGU9'@;
put 'ITAsRGU9ImJ1ZmZlciIsamU9UmUpfXZhciBJZT12ZS5vYmplY3RNb2RlPzE6amUubGVuZ3RoO3ZlLmxlbmd0aCs9SWU7dmFyIFZlPXZlLmxlbmd0aDx2ZS5oaWdoV2F0ZXJNYXJrO2lmKFZlfHwodmUubmVlZERyYWluPSEwKSx2ZS53cml0aW5nfHx2ZS5jb3JrZWQpe3ZhciBrZT12ZS5sYXN0'@;
put 'QnVmZmVyZWRSZXF1ZXN0O3ZlLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOmplLGVuY29kaW5nOkRlLGlzQnVmOlhlLGNhbGxiYWNrOkZlLG5leHQ6bnVsbH0sa2U/a2UubmV4dD12ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OnZlLmJ1ZmZlcmVkUmVxdWVzdD12ZS5sYXN0QnVmZmVyZWRSZXF1'@;
put 'ZXN0LHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgVChNZSx2ZSwhMSxJZSxqZSxEZSxGZSk7cmV0dXJuIFZlfSh0aGlzLGplLEZlLE1lLHZlLFhlKSksRGV9LFYucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt0aGlzLl93cml0YWJsZVN0YXRlLmNvcmtlZCsrfSxWLnByb3RvdHlw'@;
put 'ZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgTWU9dGhpcy5fd3JpdGFibGVTdGF0ZTtNZS5jb3JrZWQmJihNZS5jb3JrZWQtLSwhTWUud3JpdGluZyYmIU1lLmNvcmtlZCYmIU1lLmJ1ZmZlclByb2Nlc3NpbmcmJk1lLmJ1ZmZlcmVkUmVxdWVzdCYmb2UodGhpcyxNZSkpfSxWLnByb3RvdHlwZS5z'@;
put 'ZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24odmUpe2lmKCJzdHJpbmciPT10eXBlb2YgdmUmJih2ZT12ZS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJy'@;
put 'YXciXS5pbmRleE9mKCh2ZSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBtZSh2ZSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXZlLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVt'@;
put 'ZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLFYucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihNZSx2ZSxYZSl7WGUobmV3IFgoIl93cml0ZSgpIikpfSxWLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsVi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9u'@;
put 'KE1lLHZlLFhlKXt2YXIgamU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTWU/KFhlPU1lLE1lPW51bGwsdmU9bnVsbCk6ImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksbnVsbCE9TWUmJnRoaXMud3JpdGUoTWUsdmUpLGplLmNvcmtl'@;
put 'ZCYmKGplLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLGplLmVuZGluZ3x8ZnVuY3Rpb24gSmUoTWUsdmUsWGUpe3ZlLmVuZGluZz0hMCxVZShNZSx2ZSksWGUmJih2ZS5maW5pc2hlZD9JLm5leHRUaWNrKFhlKTpNZS5vbmNlKCJmaW5pc2giLFhlKSksdmUuZW5kZWQ9ITAsTWUud3JpdGFibGU9'@;
put 'ITF9KHRoaXMsamUsWGUpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5w'@;
put 'cm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24odmUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93'@;
put 'cml0YWJsZVN0YXRlLmRlc3Ryb3llZD12ZSl9fSksVi5wcm90b3R5cGUuZGVzdHJveT1MLmRlc3Ryb3ksVi5wcm90b3R5cGUuX3VuZGVzdHJveT1MLnVuZGVzdHJveSxWLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihNZSx2ZSl7dmUoTWUpfX0sNTg1MDoodWUscSxfKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgeSxJPV8oNDE1NSk7ZnVuY3Rpb24gZyhsZSxtZSxfZSl7cmV0dXJuIG1lPWZ1bmN0aW9uIEIobGUpe3ZhciBtZT1mdW5jdGlvbiB3KGxlLG1lKXtpZigib2JqZWN0IiE9dHlwZW9mIGxlfHxudWxsPT09bGUpcmV0dXJuIGxlO3ZhciBfZT1sZVtTeW1ib2wudG9QcmltaXRpdmVd'@;
put 'O2lmKHZvaWQgMCE9PV9lKXt2YXIgVGU9X2UuY2FsbChsZSxtZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIFRlKXJldHVybiBUZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5n'@;
put 'Ij09PW1lP1N0cmluZzpOdW1iZXIpKGxlKX0obGUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbWU/bWU6U3RyaW5nKG1lKX0obWUpLG1lIGluIGxlP09iamVjdC5kZWZpbmVQcm9wZXJ0eShsZSxtZSx7dmFsdWU6X2UsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3Jp'@;
put 'dGFibGU6ITB9KTpsZVttZV09X2UsbGV9dmFyIFA9Xyg4NjEwKSxGPVN5bWJvbCgibGFzdFJlc29sdmUiKSxPPVN5bWJvbCgibGFzdFJlamVjdCIpLHo9U3ltYm9sKCJlcnJvciIpLE49U3ltYm9sKCJlbmRlZCIpLEw9U3ltYm9sKCJsYXN0UHJvbWlzZSIpLEs9U3ltYm9sKCJoYW5kbGVQcm9t'@;
put 'aXNlIiksVT1TeW1ib2woInN0cmVhbSIpO2Z1bmN0aW9uIFcobGUsbWUpe3JldHVybnt2YWx1ZTpsZSxkb25lOm1lfX1mdW5jdGlvbiBZKGxlKXt2YXIgbWU9bGVbRl07aWYobnVsbCE9PW1lKXt2YXIgX2U9bGVbVV0ucmVhZCgpO251bGwhPT1fZSYmKGxlW0xdPW51bGwsbGVbRl09bnVsbCxs'@;
put 'ZVtPXT1udWxsLG1lKFcoX2UsITEpKSl9fWZ1bmN0aW9uIFgobGUpe0kubmV4dFRpY2soWSxsZSl9dmFyIEo9T2JqZWN0LmdldFByb3RvdHlwZU9mKGZ1bmN0aW9uKCl7fSkscmU9T2JqZWN0LnNldFByb3RvdHlwZU9mKChnKHk9e2dldCBzdHJlYW0oKXtyZXR1cm4gdGhpc1tVXX0sbmV4dDpm'@;
put 'dW5jdGlvbigpe3ZhciBtZT10aGlzLF9lPXRoaXNbel07aWYobnVsbCE9PV9lKXJldHVybiBQcm9taXNlLnJlamVjdChfZSk7aWYodGhpc1tOXSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFcodm9pZCAwLCEwKSk7aWYodGhpc1tVXS5kZXN0cm95ZWQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0'@;
put 'aW9uKFYscCl7SS5uZXh0VGljayhmdW5jdGlvbigpe21lW3pdP3AobWVbel0pOlYoVyh2b2lkIDAsITApKX0pfSk7dmFyIFNlLFRlPXRoaXNbTF07aWYoVGUpU2U9bmV3IFByb21pc2UoZnVuY3Rpb24gZWUobGUsbWUpe3JldHVybiBmdW5jdGlvbihfZSxUZSl7bGUudGhlbihmdW5jdGlvbigp'@;
put 'e21lW05dP19lKFcodm9pZCAwLCEwKSk6bWVbS10oX2UsVGUpfSxUZSl9fShUZSx0aGlzKSk7ZWxzZXt2YXIgemU9dGhpc1tVXS5yZWFkKCk7aWYobnVsbCE9PXplKXJldHVybiBQcm9taXNlLnJlc29sdmUoVyh6ZSwhMSkpO1NlPW5ldyBQcm9taXNlKHRoaXNbS10pfXJldHVybiB0aGlzW0xd'@;
put 'PVNlLFNlfX0sU3ltYm9sLmFzeW5jSXRlcmF0b3IsZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGcoeSwicmV0dXJuIixmdW5jdGlvbigpe3ZhciBtZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfZSxUZSl7bWVbVV0uZGVzdHJveShudWxsLGZ1bmN0aW9uKFNlKXtTZT9UZShT'@;
put 'ZSk6X2UoVyh2b2lkIDAsITApKX0pfSl9KSx5KSxKKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKG1lKXt2YXIgX2UsVGU9T2JqZWN0LmNyZWF0ZShyZSwoZyhfZT17fSxVLHt2YWx1ZTptZSx3cml0YWJsZTohMH0pLGcoX2UsRix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGcoX2UsTyx7dmFsdWU6'@;
put 'bnVsbCx3cml0YWJsZTohMH0pLGcoX2Useix7dmFsdWU6bnVsbCx3cml0YWJsZTohMH0pLGcoX2UsTix7dmFsdWU6bWUuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCx3cml0YWJsZTohMH0pLGcoX2UsSyx7dmFsdWU6ZnVuY3Rpb24oemUsVil7dmFyIHA9VGVbVV0ucmVhZCgpO3A/KFRlW0xd'@;
put 'PW51bGwsVGVbRl09bnVsbCxUZVtPXT1udWxsLHplKFcocCwhMSkpKTooVGVbRl09emUsVGVbT109Vil9LHdyaXRhYmxlOiEwfSksX2UpKTtyZXR1cm4gVGVbTF09bnVsbCxQKG1lLGZ1bmN0aW9uKFNlKXtpZihTZSYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PVNlLmNvZGUpe3Zh'@;
put 'ciB6ZT1UZVtPXTtyZXR1cm4gbnVsbCE9PXplJiYoVGVbTF09bnVsbCxUZVtGXT1udWxsLFRlW09dPW51bGwsemUoU2UpKSx2b2lkKFRlW3pdPVNlKX12YXIgVj1UZVtGXTtudWxsIT09ViYmKFRlW0xdPW51bGwsVGVbRl09bnVsbCxUZVtPXT1udWxsLFYoVyh2b2lkIDAsITApKSksVGVbTl09'@;
put 'ITB9KSxtZS5vbigicmVhZGFibGUiLFguYmluZChudWxsLFRlKSksVGV9fSw3MzI3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoWSxYKXt2YXIgZWU9T2JqZWN0LmtleXMoWSk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIEo9T2JqZWN0LmdldE93blBy'@;
put 'b3BlcnR5U3ltYm9scyhZKTtYJiYoSj1KLmZpbHRlcihmdW5jdGlvbihyZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoWSxyZSkuZW51bWVyYWJsZX0pKSxlZS5wdXNoLmFwcGx5KGVlLEopfXJldHVybiBlZX1mdW5jdGlvbiB5KFkpe2Zvcih2YXIgWD0xO1g8YXJn'@;
put 'dW1lbnRzLmxlbmd0aDtYKyspe3ZhciBlZT1udWxsIT1hcmd1bWVudHNbWF0/YXJndW1lbnRzW1hdOnt9O1glMj9JKE9iamVjdChlZSksITApLmZvckVhY2goZnVuY3Rpb24oSil7ZyhZLEosZWVbSl0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnRpZXMoWSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlZSkpOkkoT2JqZWN0KGVlKSkuZm9yRWFjaChmdW5jdGlvbihKKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoWSxKLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZWUsSikpfSl9cmV0dXJuIFl9ZnVuY3Rp'@;
put 'b24gZyhZLFgsZWUpe3JldHVybihYPUYoWCkpaW4gWT9PYmplY3QuZGVmaW5lUHJvcGVydHkoWSxYLHt2YWx1ZTplZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOllbWF09ZWUsWX1mdW5jdGlvbiB3KFksWCl7Zm9yKHZhciBlZT0wO2VlPFgubGVuZ3RoO2Vl'@;
put 'Kyspe3ZhciBKPVhbZWVdO0ouZW51bWVyYWJsZT1KLmVudW1lcmFibGV8fCExLEouY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBKJiYoSi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFksRihKLmtleSksSil9fWZ1bmN0aW9uIEYoWSl7dmFyIFg9ZnVuY3Rpb24gTyhZLFgp'@;
put 'e2lmKCJvYmplY3QiIT10eXBlb2YgWXx8bnVsbD09PVkpcmV0dXJuIFk7dmFyIGVlPVlbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1lZSl7dmFyIEo9ZWUuY2FsbChZLFh8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiBKO3Rocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09WD9TdHJpbmc6TnVtYmVyKShZKX0oWSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBYP1g6U3RyaW5nKFgpfXZhciBOPV8oODc2NCkuQnVmZmVyLEs9Xygy'@;
put 'MzYxKS5pbnNwZWN0LFU9SyYmSy5jdXN0b218fCJpbnNwZWN0IjtmdW5jdGlvbiBXKFksWCxlZSl7Ti5wcm90b3R5cGUuY29weS5jYWxsKFksWCxlZSl9dWUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIFkoKXsoZnVuY3Rpb24gQihZLFgpe2lmKCEoWSBpbnN0YW5jZW9mIFgpKXRocm93'@;
put 'IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyxZKSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiBmdW5jdGlvbiBQKFksWCxlZSl7WCYmdyhZLnByb3RvdHlwZSxYKSxlZSYmdyhZLGVlKSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoWSwicHJvdG90eXBlIix7d3JpdGFibGU6ITF9KX0oWSxbe2tleToicHVzaCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1KOnRoaXMuaGVhZD1KLHRoaXMudGFpbD1K'@;
put 'LCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJ1bnNoaWZ0Iix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9e2RhdGE6ZWUsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1KKSx0aGlzLmhlYWQ9SiwrK3RoaXMubGVuZ3RofX0se2tleToic2hpZnQiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgZWU9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5sZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxlZX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlz'@;
put 'LmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKGVlKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBKPXRoaXMuaGVhZCxyZT0iIitKLmRhdGE7Sj1KLm5leHQ7KXJlKz1lZStKLmRhdGE7cmV0dXJuIHJlfX0s'@;
put 'e2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBOLmFsbG9jKDApO2Zvcih2YXIgSj1OLmFsbG9jVW5zYWZlKGVlPj4+MCkscmU9dGhpcy5oZWFkLGllPTA7cmU7KVcocmUuZGF0YSxKLGllKSxpZSs9cmUuZGF0YS5sZW5ndGgscmU9cmUu'@;
put 'bmV4dDtyZXR1cm4gSn19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0aW9uKGVlLEope3ZhciByZTtyZXR1cm4gZWU8dGhpcy5oZWFkLmRhdGEubGVuZ3RoPyhyZT10aGlzLmhlYWQuZGF0YS5zbGljZSgwLGVlKSx0aGlzLmhlYWQuZGF0YT10aGlzLmhlYWQuZGF0YS5zbGljZShlZSkpOnJl'@;
put 'PWVlPT09dGhpcy5oZWFkLmRhdGEubGVuZ3RoP3RoaXMuc2hpZnQoKTpKP3RoaXMuX2dldFN0cmluZyhlZSk6dGhpcy5fZ2V0QnVmZmVyKGVlKSxyZX19LHtrZXk6ImZpcnN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlYWQuZGF0YX19LHtrZXk6Il9nZXRTdHJpbmciLHZhbHVl'@;
put 'OmZ1bmN0aW9uKGVlKXt2YXIgSj10aGlzLmhlYWQscmU9MSxpZT1KLmRhdGE7Zm9yKGVlLT1pZS5sZW5ndGg7Sj1KLm5leHQ7KXt2YXIgbGU9Si5kYXRhLG1lPWVlPmxlLmxlbmd0aD9sZS5sZW5ndGg6ZWU7aWYoaWUrPW1lPT09bGUubGVuZ3RoP2xlOmxlLnNsaWNlKDAsZWUpLDA9PShlZS09'@;
put 'bWUpKXttZT09PWxlLmxlbmd0aD8oKytyZSx0aGlzLmhlYWQ9Si5uZXh0P0oubmV4dDp0aGlzLnRhaWw9bnVsbCk6KHRoaXMuaGVhZD1KLEouZGF0YT1sZS5zbGljZShtZSkpO2JyZWFrfSsrcmV9cmV0dXJuIHRoaXMubGVuZ3RoLT1yZSxpZX19LHtrZXk6Il9nZXRCdWZmZXIiLHZhbHVlOmZ1'@;
put 'bmN0aW9uKGVlKXt2YXIgSj1OLmFsbG9jVW5zYWZlKGVlKSxyZT10aGlzLmhlYWQsaWU9MTtmb3IocmUuZGF0YS5jb3B5KEopLGVlLT1yZS5kYXRhLmxlbmd0aDtyZT1yZS5uZXh0Oyl7dmFyIGxlPXJlLmRhdGEsbWU9ZWU+bGUubGVuZ3RoP2xlLmxlbmd0aDplZTtpZihsZS5jb3B5KEosSi5s'@;
put 'ZW5ndGgtZWUsMCxtZSksMD09KGVlLT1tZSkpe21lPT09bGUubGVuZ3RoPygrK2llLHRoaXMuaGVhZD1yZS5uZXh0P3JlLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9cmUscmUuZGF0YT1sZS5zbGljZShtZSkpO2JyZWFrfSsraWV9cmV0dXJuIHRoaXMubGVuZ3RoLT1pZSxKfX0s'@;
put 'e2tleTpVLHZhbHVlOmZ1bmN0aW9uKGVlLEope3JldHVybiBLKHRoaXMseSh5KHt9LEopLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pLFl9KCl9LDExOTU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KTtmdW5jdGlvbiBnKE8seil7UChPLHopLEIoTyl9'@;
put 'ZnVuY3Rpb24gQihPKXtPLl93cml0YWJsZVN0YXRlJiYhTy5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fE8uX3JlYWRhYmxlU3RhdGUmJiFPLl9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8Ty5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIFAoTyx6KXtPLmVtaXQoImVycm9yIix6KX11ZS5leHBv'@;
put 'cnRzPXtkZXN0cm95OmZ1bmN0aW9uIHkoTyx6KXt2YXIgTj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KHo/eihPKTpPJiYodGhp'@;
put 'cy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soUCx0aGlzLE8pKTpJLm5leHRUaWNrKFAsdGhpcyxPKSksdGhpcyk6KHRoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlz'@;
put 'Ll9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KE98fG51bGwsZnVuY3Rpb24oVSl7IXomJlU/Ti5fd3JpdGFibGVTdGF0ZT9OLl93cml0YWJsZVN0YXRlLmVycm9y'@;
put 'RW1pdHRlZD9JLm5leHRUaWNrKEIsTik6KE4uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEkubmV4dFRpY2soZyxOLFUpKTpJLm5leHRUaWNrKGcsTixVKTp6PyhJLm5leHRUaWNrKEIsTikseihVKSk6SS5uZXh0VGljayhCLE4pfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiB3'@;
put 'KCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFi'@;
put 'bGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlz'@;
put 'aGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbiBGKE8seil7dmFyIE49Ty5fcmVhZGFibGVTdGF0ZSxMPU8uX3dyaXRhYmxlU3RhdGU7TiYmTi5hdXRvRGVzdHJv'@;
put 'eXx8TCYmTC5hdXRvRGVzdHJveT9PLmRlc3Ryb3koeik6Ty5lbWl0KCJlcnJvciIseil9fX0sODYxMDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQyODEpLnEuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gZygpe311ZS5leHBvcnRzPWZ1bmN0aW9uIHcoUCxG'@;
put 'LE8pe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGKXJldHVybiB3KFAsbnVsbCxGKTtGfHwoRj17fSksTz1mdW5jdGlvbiB5KFApe3ZhciBGPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFGKXtGPSEwO2Zvcih2YXIgTz1hcmd1bWVudHMubGVuZ3RoLHo9bmV3IEFycmF5KE8pLE49MDtOPE87Tisr'@;
put 'KXpbTl09YXJndW1lbnRzW05dO1AuYXBwbHkodGhpcyx6KX19fShPfHxnKTt2YXIgej1GLnJlYWRhYmxlfHwhMSE9PUYucmVhZGFibGUmJlAucmVhZGFibGUsTj1GLndyaXRhYmxlfHwhMSE9PUYud3JpdGFibGUmJlAud3JpdGFibGUsTD1mdW5jdGlvbigpe1Aud3JpdGFibGV8fFUoKX0sSz1Q'@;
put 'Ll93cml0YWJsZVN0YXRlJiZQLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkLFU9ZnVuY3Rpb24oKXtOPSExLEs9ITAsenx8Ty5jYWxsKFApfSxXPVAuX3JlYWRhYmxlU3RhdGUmJlAuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCxZPWZ1bmN0aW9uKCl7ej0hMSxXPSEwLE58fE8uY2FsbChQKX0s'@;
put 'WD1mdW5jdGlvbihpZSl7Ty5jYWxsKFAsaWUpfSxlZT1mdW5jdGlvbigpe3ZhciBpZTtyZXR1cm4geiYmIVc/KCghUC5fcmVhZGFibGVTdGF0ZXx8IVAuX3JlYWRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEkpLE8uY2FsbChQLGllKSk6TiYmIUs/KCghUC5fd3JpdGFibGVTdGF0ZXx8IVAu'@;
put 'X3dyaXRhYmxlU3RhdGUuZW5kZWQpJiYoaWU9bmV3IEkpLE8uY2FsbChQLGllKSk6dm9pZCAwfSxKPWZ1bmN0aW9uKCl7UC5yZXEub24oImZpbmlzaCIsVSl9O3JldHVybiBmdW5jdGlvbiBCKFApe3JldHVybiBQLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFAuYWJvcnR9KFApPyhQ'@;
put 'Lm9uKCJjb21wbGV0ZSIsVSksUC5vbigiYWJvcnQiLGVlKSxQLnJlcT9KKCk6UC5vbigicmVxdWVzdCIsSikpOk4mJiFQLl93cml0YWJsZVN0YXRlJiYoUC5vbigiZW5kIixMKSxQLm9uKCJjbG9zZSIsTCkpLFAub24oImVuZCIsWSksUC5vbigiZmluaXNoIixVKSwhMSE9PUYuZXJyb3ImJlAu'@;
put 'b24oImVycm9yIixYKSxQLm9uKCJjbG9zZSIsZWUpLGZ1bmN0aW9uKCl7UC5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLFUpLFAucmVtb3ZlTGlzdGVuZXIoImFib3J0IixlZSksUC5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsSiksUC5yZXEmJlAucmVxLnJlbW92ZUxpc3RlbmVyKCJmaW5p'@;
put 'c2giLFUpLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsTCksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLEwpLFAucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsVSksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixZKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsWCksUC5yZW1vdmVMaXN0ZW5lcigiY2xv'@;
put 'c2UiLGVlKX19fSw1MTY3OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw5OTQ2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJLGc9Xyg0MjgxKS5xLEI9Zy5FUlJf'@;
put 'TUlTU0lOR19BUkdTLHc9Zy5FUlJfU1RSRUFNX0RFU1RST1lFRDtmdW5jdGlvbiBQKFUpe2lmKFUpdGhyb3cgVX1mdW5jdGlvbiB6KFUpe1UoKX1mdW5jdGlvbiBOKFUsVyl7cmV0dXJuIFUucGlwZShXKX11ZS5leHBvcnRzPWZ1bmN0aW9uIEsoKXtmb3IodmFyIFU9YXJndW1lbnRzLmxlbmd0'@;
put 'aCxXPW5ldyBBcnJheShVKSxZPTA7WTxVO1krKylXW1ldPWFyZ3VtZW50c1tZXTt2YXIgWD1mdW5jdGlvbiBMKFUpe3JldHVybiBVLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIFVbVS5sZW5ndGgtMV0/VS5wb3AoKTpQfShXKTtpZihBcnJheS5pc0FycmF5KFdbMF0pJiYoVz1XWzBdKSxX'@;
put 'Lmxlbmd0aDwyKXRocm93IG5ldyBCKCJzdHJlYW1zIik7dmFyIGVlLEo9Vy5tYXAoZnVuY3Rpb24ocmUsaWUpe3ZhciBsZT1pZTxXLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbiBPKFUsVyxZLFgpe1g9ZnVuY3Rpb24geShVKXt2YXIgVz0hMTtyZXR1cm4gZnVuY3Rpb24oKXtXfHwoVz0hMCxV'@;
put 'LmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpKX19KFgpO3ZhciBlZT0hMTtVLm9uKCJjbG9zZSIsZnVuY3Rpb24oKXtlZT0hMH0pLHZvaWQgMD09PUkmJihJPV8oODYxMCkpLEkoVSx7cmVhZGFibGU6Vyx3cml0YWJsZTpZfSxmdW5jdGlvbihyZSl7aWYocmUpcmV0dXJuIFgocmUpO2VlPSEwLFgo'@;
put 'KX0pO3ZhciBKPSExO3JldHVybiBmdW5jdGlvbihyZSl7aWYoIWVlJiYhSil7aWYoSj0hMCxmdW5jdGlvbiBGKFUpe3JldHVybiBVLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIFUuYWJvcnR9KFUpKXJldHVybiBVLmFib3J0KCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFUuZGVzdHJv'@;
put 'eSlyZXR1cm4gVS5kZXN0cm95KCk7WChyZXx8bmV3IHcoInBpcGUiKSl9fX0ocmUsbGUsaWU+MCxmdW5jdGlvbihfZSl7ZWV8fChlZT1fZSksX2UmJkouZm9yRWFjaCh6KSwhbGUmJihKLmZvckVhY2goeiksWChlZSkpfSl9KTtyZXR1cm4gVy5yZWR1Y2UoTil9fSwyNDU3Oih1ZSxxLF8pPT57'@;
put 'InVzZSBzdHJpY3QiO3ZhciBJPV8oNDI4MSkucS5FUlJfSU5WQUxJRF9PUFRfVkFMVUU7dWUuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbiBnKEIsdyxQLEYpe3ZhciBPPWZ1bmN0aW9uIHkoQix3LFApe3JldHVybiBudWxsIT1CLmhpZ2hXYXRlck1hcms/Qi5oaWdoV2F0ZXJN'@;
put 'YXJrOnc/QltQXTpudWxsfSh3LEYsUCk7aWYobnVsbCE9Tyl7aWYoIWlzRmluaXRlKE8pfHxNYXRoLmZsb29yKE8pIT09T3x8TzwwKXRocm93IG5ldyBJKEY/UDoiaGlnaFdhdGVyTWFyayIsTyk7cmV0dXJuIE1hdGguZmxvb3IoTyl9cmV0dXJuIEIub2JqZWN0TW9kZT8xNjoxNjM4NH19fSwy'@;
put 'NTAzOih1ZSxxLF8pPT57dWUuZXhwb3J0cz1fKDcxODcpLkV2ZW50RW1pdHRlcn0sNzQxODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sSSl7aWYoST1JLnNwbGl0KCI6IilbMF0sIShfPStfKSlyZXR1cm4hMTtzd2l0Y2goSSl7Y2FzZSJodHRwIjpjYXNlIndzIjpy'@;
put 'ZXR1cm4gODAhPT1fO2Nhc2UiaHR0cHMiOmNhc2Uid3NzIjpyZXR1cm4gNDQzIT09XztjYXNlImZ0cCI6cmV0dXJuIDIxIT09XztjYXNlImdvcGhlciI6cmV0dXJuIDcwIT09XztjYXNlImZpbGUiOnJldHVybiExfXJldHVybiAwIT09X319LDk3ODU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7'@;
put 'dmFyIEk9Xyg4NzY0KS5CdWZmZXIseT1fKDU3MTcpLGc9XygzMzQ5KSxCPW5ldyBBcnJheSgxNiksdz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEz'@;
put 'LDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxQPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIs'@;
put 'MTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLEY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwx'@;
put 'MywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLE89WzgsOSw5LDEx'@;
put 'LDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1'@;
put 'LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLHo9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sTj1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBMKCl7Zy5jYWxsKHRoaXMsNjQpLHRoaXMuX2E9'@;
put 'MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBLKEoscmUpe3JldHVybiBKPDxyZXxKPj4+MzItcmV9ZnVuY3Rpb24gVShKLHJlLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1'@;
put 'cm4gSyhKKyhyZV5pZV5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBXKEoscmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKHJlJmllfH5yZSZsZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBZKEoscmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKChyZXx+'@;
put 'aWUpXmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIFgoSixyZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisocmUmbGV8aWUmfmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIGVlKEoscmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKHJlXihpZXx+bGUpKStf'@;
put 'ZStUZXwwLFNlKSttZXwwfXkoTCxnKSxMLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBKPUIscmU9MDtyZTwxNjsrK3JlKUpbcmVdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqcmUpO2Zvcih2YXIgaWU9MHx0aGlzLl9hLGxlPTB8dGhpcy5fYixtZT0wfHRoaXMuX2Ms'@;
put 'X2U9MHx0aGlzLl9kLFRlPTB8dGhpcy5fZSxTZT0wfHRoaXMuX2EsemU9MHx0aGlzLl9iLFY9MHx0aGlzLl9jLHA9MHx0aGlzLl9kLGI9MHx0aGlzLl9lLHg9MDt4PDgwO3grPTEpe3ZhciBDLFQ7eDwxNj8oQz1VKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selswXSxGW3hdKSxUPWVlKFNlLHpl'@;
put 'LFYscCxiLEpbUFt4XV0sTlswXSxPW3hdKSk6eDwzMj8oQz1XKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selsxXSxGW3hdKSxUPVgoU2UsemUsVixwLGIsSltQW3hdXSxOWzFdLE9beF0pKTp4PDQ4PyhDPVkoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzJdLEZbeF0pLFQ9WShTZSx6ZSxWLHAs'@;
put 'YixKW1BbeF1dLE5bMl0sT1t4XSkpOng8NjQ/KEM9WChpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbM10sRlt4XSksVD1XKFNlLHplLFYscCxiLEpbUFt4XV0sTlszXSxPW3hdKSk6KEM9ZWUoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzRdLEZbeF0pLFQ9VShTZSx6ZSxWLHAsYixKW1BbeF1d'@;
put 'LE5bNF0sT1t4XSkpLGllPVRlLFRlPV9lLF9lPUsobWUsMTApLG1lPWxlLGxlPUMsU2U9YixiPXAscD1LKFYsMTApLFY9emUsemU9VH12YXIgSD10aGlzLl9iK21lK3B8MDt0aGlzLl9iPXRoaXMuX2MrX2UrYnwwLHRoaXMuX2M9dGhpcy5fZCtUZStTZXwwLHRoaXMuX2Q9dGhpcy5fZStpZSt6'@;
put 'ZXwwLHRoaXMuX2U9dGhpcy5fYStsZStWfDAsdGhpcy5fYT1IfSxMLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0'@;
put 'LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0'@;
put 'aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEo9SS5hbGxvYz9JLmFsbG9jKDIwKTpuZXcgSSgyMCk7cmV0dXJuIEoud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksSi53cml0ZUludDMyTEUodGhpcy5fYiw0KSxKLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEoud3JpdGVJbnQzMkxFKHRoaXMu'@;
put 'X2QsMTIpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2UsMTYpLEp9LHVlLmV4cG9ydHM9TH0sOTUwOToodWUscSxfKT0+e3ZhciBJPV8oODc2NCkseT1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiB5KHcsUCxG'@;
put 'KX15LmZyb20mJnkuYWxsb2MmJnkuYWxsb2NVbnNhZmUmJnkuYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLHEpLHEuQnVmZmVyPUIpLEIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoeS5wcm90b3R5cGUpLGcoeSxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIi'@;
put 'PT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiB5KHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUg'@;
put 'YSBudW1iZXIiKTt2YXIgTz15KHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFy'@;
put 'Z3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4geSh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0s'@;
put 'OTI0NjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDczNzkpLHk9Xyg4NDIwKSxnPUkoIlJlZ0V4cC5wcm90b3R5cGUuZXhlYyIpLEI9Xyg0NDUzKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFApe2lmKCF5KFApKXRocm93IG5ldyBCKCJgcmVnZXhgIG11c3QgYmUgYSBSZWdFeHAiKTty'@;
put 'ZXR1cm4gZnVuY3Rpb24oTyl7cmV0dXJuIG51bGwhPT1nKFAsTyl9fX0sNzc3MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDIxMCkseT1fKDIyOTYpLGc9XygxMDQ0KSgpLEI9Xyg3Mjk2KSx3PV8oNDQ1MyksUD1JKCIlTWF0aC5mbG9vciUiKTt1ZS5leHBvcnRzPWZ1bmN0aW9u'@;
put 'KE8seil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIE8pdGhyb3cgbmV3IHcoImBmbmAgaXMgbm90IGEgZnVuY3Rpb24iKTtpZigibnVtYmVyIiE9dHlwZW9mIHp8fHo8MHx8ej40Mjk0OTY3Mjk1fHxQKHopIT09eil0aHJvdyBuZXcgdygiYGxlbmd0aGAgbXVzdCBiZSBhIHBvc2l0aXZlIDMyLWJp'@;
put 'dCBpbnRlZ2VyIik7dmFyIE49YXJndW1lbnRzLmxlbmd0aD4yJiYhIWFyZ3VtZW50c1syXSxMPSEwLEs9ITA7aWYoImxlbmd0aCJpbiBPJiZCKXt2YXIgVT1CKE8sImxlbmd0aCIpO1UmJiFVLmNvbmZpZ3VyYWJsZSYmKEw9ITEpLFUmJiFVLndyaXRhYmxlJiYoSz0hMSl9cmV0dXJuKEx8fEt8'@;
put 'fCFOKSYmKGc/eShPLCJsZW5ndGgiLHosITAsITApOnkoTywibGVuZ3RoIix6KSksT319LDQxODk6KHVlLHEsXyk9Pnt2YXIgST1fKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiB5KGcsQil7dGhpcy5fYmxvY2s9SS5hbGxvYyhnKSx0aGlzLl9maW5hbFNpemU9Qix0aGlzLl9ibG9ja1NpemU9Zyx0'@;
put 'aGlzLl9sZW49MH15LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZyxCKXsic3RyaW5nIj09dHlwZW9mIGcmJihnPUkuZnJvbShnLEI9Qnx8InV0ZjgiKSk7Zm9yKHZhciB3PXRoaXMuX2Jsb2NrLFA9dGhpcy5fYmxvY2tTaXplLEY9Zy5sZW5ndGgsTz10aGlzLl9sZW4sej0wO3o8Rjspe2Zv'@;
put 'cih2YXIgTj1PJVAsTD1NYXRoLm1pbihGLXosUC1OKSxLPTA7SzxMO0srKyl3W04rS109Z1t6K0tdO3orPUwsKE8rPUwpJVA9PTAmJnRoaXMuX3VwZGF0ZSh3KX1yZXR1cm4gdGhpcy5fbGVuKz1GLHRoaXN9LHkucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihnKXt2YXIgQj10aGlzLl9sZW4l'@;
put 'dGhpcy5fYmxvY2tTaXplO3RoaXMuX2Jsb2NrW0JdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsQisxKSxCPj10aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpO3ZhciB3PTgqdGhpcy5fbGVuO2lmKHc8PTQyOTQ5NjcyOTUpdGhp'@;
put 'cy5fYmxvY2sud3JpdGVVSW50MzJCRSh3LHRoaXMuX2Jsb2NrU2l6ZS00KTtlbHNle3ZhciBQPSg0Mjk0OTY3Mjk1JncpPj4+MDt0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKCh3LVApLzQyOTQ5NjcyOTYsdGhpcy5fYmxvY2tTaXplLTgpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoUCx0'@;
put 'aGlzLl9ibG9ja1NpemUtNCl9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKTt2YXIgTz10aGlzLl9oYXNoKCk7cmV0dXJuIGc/Ty50b1N0cmluZyhnKTpPfSx5LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIG11c3QgYmUgaW1wbGVtZW50ZWQg'@;
put 'Ynkgc3ViY2xhc3MiKX0sdWUuZXhwb3J0cz15fSw5MDcyOih1ZSxxLF8pPT57dmFyIEk9dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtnPWcudG9Mb3dlckNhc2UoKTt2YXIgQj1JW2ddO2lmKCFCKXRocm93IG5ldyBFcnJvcihnKyIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVx'@;
put 'dWVzdHMpIik7cmV0dXJuIG5ldyBCfTtJLnNoYT1fKDQ0NDgpLEkuc2hhMT1fKDgzMzYpLEkuc2hhMjI0PV8oODQzMiksSS5zaGEyNTY9Xyg3NDk5KSxJLnNoYTM4ND1fKDE2ODYpLEkuc2hhNTEyPV8oNzgxNil9LDQ0NDg6KHVlLHEsXyk9Pnt2YXIgST1fKDU3MTcpLHk9Xyg0MTg5KSxnPV8o'@;
put 'OTUwOSkuQnVmZmVyLEI9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSx3PW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyx5LmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihOKXtyZXR1cm4gTjw8NXxOPj4+Mjd9'@;
put 'ZnVuY3Rpb24gTyhOKXtyZXR1cm4gTjw8MzB8Tj4+PjJ9ZnVuY3Rpb24geihOLEwsSyxVKXtyZXR1cm4gMD09PU4/TCZLfH5MJlU6Mj09PU4/TCZLfEwmVXxLJlU6TF5LXlV9SShQLHkpLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMu'@;
put 'X2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7Zm9yKHZhciBMPXRoaXMuX3csSz0wfHRoaXMuX2EsVT0wfHRoaXMuX2IsVz0wfHRoaXMuX2MsWT0w'@;
put 'fHRoaXMuX2QsWD0wfHRoaXMuX2UsZWU9MDtlZTwxNjsrK2VlKUxbZWVdPU4ucmVhZEludDMyQkUoNCplZSk7Zm9yKDtlZTw4MDsrK2VlKUxbZWVdPUxbZWUtM11eTFtlZS04XV5MW2VlLTE0XV5MW2VlLTE2XTtmb3IodmFyIEo9MDtKPDgwOysrSil7dmFyIHJlPX5+KEovMjApLGllPUYoSykr'@;
put 'eihyZSxVLFcsWSkrWCtMW0pdK0JbcmVdfDA7WD1ZLFk9VyxXPU8oVSksVT1LLEs9aWV9dGhpcy5fYT1LK3RoaXMuX2F8MCx0aGlzLl9iPVUrdGhpcy5fYnwwLHRoaXMuX2M9Vyt0aGlzLl9jfDAsdGhpcy5fZD1ZK3RoaXMuX2R8MCx0aGlzLl9lPVgrdGhpcy5fZXwwfSxQLnByb3RvdHlwZS5f'@;
put 'aGFzaD1mdW5jdGlvbigpe3ZhciBOPWcuYWxsb2NVbnNhZmUoMjApO3JldHVybiBOLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLE4ud3Jp'@;
put 'dGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksTn0sdWUuZXhwb3J0cz1QfSw4MzM2Oih1ZSxxLF8pPT57dmFyIEk9Xyg1NzE3KSx5PV8oNDE4OSksZz1fKDk1MDkpLkJ1ZmZlcixCPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1'@;
put 'bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcseS5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoTCl7cmV0dXJuIEw8PDF8TD4+PjMxfWZ1bmN0aW9uIE8oTCl7cmV0dXJuIEw8PDV8TD4+PjI3fWZ1bmN0aW9uIHooTCl7cmV0dXJuIEw8PDMwfEw+Pj4yfWZ1bmN0aW9uIE4oTCxL'@;
put 'LFUsVyl7cmV0dXJuIDA9PT1MP0smVXx+SyZXOjI9PT1MP0smVXxLJld8VSZXOkteVV5XfUkoUCx5KSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMz'@;
put 'ODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgSz10aGlzLl93LFU9MHx0aGlzLl9hLFc9MHx0aGlzLl9iLFk9MHx0aGlzLl9jLFg9MHx0aGlzLl9kLGVlPTB8dGhpcy5fZSxKPTA7SjwxNjsrK0opS1tKXT1MLnJlYWRJ'@;
put 'bnQzMkJFKDQqSik7Zm9yKDtKPDgwOysrSilLW0pdPUYoS1tKLTNdXktbSi04XV5LW0otMTRdXktbSi0xNl0pO2Zvcih2YXIgcmU9MDtyZTw4MDsrK3JlKXt2YXIgaWU9fn4ocmUvMjApLGxlPU8oVSkrTihpZSxXLFksWCkrZWUrS1tyZV0rQltpZV18MDtlZT1YLFg9WSxZPXooVyksVz1VLFU9'@;
put 'bGV9dGhpcy5fYT1VK3RoaXMuX2F8MCx0aGlzLl9iPVcrdGhpcy5fYnwwLHRoaXMuX2M9WSt0aGlzLl9jfDAsdGhpcy5fZD1YK3RoaXMuX2R8MCx0aGlzLl9lPWVlK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTD1nLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4g'@;
put 'TC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLEx9LHVlLmV4cG9ydHM9UH0sODQzMjoo'@;
put 'dWUscSxfKT0+e3ZhciBJPV8oNTcxNykseT1fKDc0OTkpLGc9Xyg0MTg5KSxCPV8oOTUwOSkuQnVmZmVyLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LGcuY2FsbCh0aGlzLDY0LDU2KX1JKFAseSksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigp'@;
put 'e3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxQ'@;
put 'LnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBGPUIuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBGLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEYud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksRi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxGLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxG'@;
put 'LndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxGLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxGLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxGfSx1ZS5leHBvcnRzPVB9LDc0OTk6KHVlLHEsXyk9Pnt2YXIgST1fKDU3MTcpLHk9Xyg0MTg5KSxnPV8oOTUwOSkuQnVmZmVyLEI9WzExMTYzNTI0'@;
put 'MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAs'@;
put 'MzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgy'@;
put 'NDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcx'@;
put 'OTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMy'@;
put 'MDQwMzE0NzksMzMyOTMyNTI5OF0sdz1uZXcgQXJyYXkoNjQpO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcseS5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIEYoVSxXLFkpe3JldHVybiBZXlUmKFdeWSl9ZnVuY3Rpb24gTyhVLFcsWSl7cmV0dXJuIFUmV3xZJihVfFcpfWZ1'@;
put 'bmN0aW9uIHooVSl7cmV0dXJuKFU+Pj4yfFU8PDMwKV4oVT4+PjEzfFU8PDE5KV4oVT4+PjIyfFU8PDEwKX1mdW5jdGlvbiBOKFUpe3JldHVybihVPj4+NnxVPDwyNileKFU+Pj4xMXxVPDwyMSleKFU+Pj4yNXxVPDw3KX1mdW5jdGlvbiBMKFUpe3JldHVybihVPj4+N3xVPDwyNSleKFU+Pj4x'@;
put 'OHxVPDwxNCleVT4+PjN9ZnVuY3Rpb24gSyhVKXtyZXR1cm4oVT4+PjE3fFU8PDE1KV4oVT4+PjE5fFU8PDEzKV5VPj4+MTB9SShQLHkpLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5'@;
put 'MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYyLHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVSl7Zm9yKHZhciBXPXRoaXMuX3csWT0wfHRoaXMu'@;
put 'X2EsWD0wfHRoaXMuX2IsZWU9MHx0aGlzLl9jLEo9MHx0aGlzLl9kLHJlPTB8dGhpcy5fZSxpZT0wfHRoaXMuX2YsbGU9MHx0aGlzLl9nLG1lPTB8dGhpcy5faCxfZT0wO19lPDE2OysrX2UpV1tfZV09VS5yZWFkSW50MzJCRSg0Kl9lKTtmb3IoO19lPDY0OysrX2UpV1tfZV09SyhXW19lLTJd'@;
put 'KStXW19lLTddK0woV1tfZS0xNV0pK1dbX2UtMTZdfDA7Zm9yKHZhciBUZT0wO1RlPDY0OysrVGUpe3ZhciBTZT1tZStOKHJlKStGKHJlLGllLGxlKStCW1RlXStXW1RlXXwwLHplPXooWSkrTyhZLFgsZWUpfDA7bWU9bGUsbGU9aWUsaWU9cmUscmU9SitTZXwwLEo9ZWUsZWU9WCxYPVksWT1T'@;
put 'ZSt6ZXwwfXRoaXMuX2E9WSt0aGlzLl9hfDAsdGhpcy5fYj1YK3RoaXMuX2J8MCx0aGlzLl9jPWVlK3RoaXMuX2N8MCx0aGlzLl9kPUordGhpcy5fZHwwLHRoaXMuX2U9cmUrdGhpcy5fZXwwLHRoaXMuX2Y9aWUrdGhpcy5fZnwwLHRoaXMuX2c9bGUrdGhpcy5fZ3wwLHRoaXMuX2g9bWUrdGhp'@;
put 'cy5faHwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBVPWcuYWxsb2NVbnNhZmUoMzIpO3JldHVybiBVLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLFUud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksVS53cml0ZUludDMyQkUodGhpcy5fYyw4KSxVLndyaXRlSW50MzJCRSh0aGlz'@;
put 'Ll9kLDEyKSxVLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxVLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxVLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxVLndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSxVfSx1ZS5leHBvcnRzPVB9LDE2ODY6KHVlLHEsXyk9Pnt2YXIgST1fKDU3MTcpLHk9'@;
put 'Xyg3ODE2KSxnPV8oNDE4OSksQj1fKDk1MDkpLkJ1ZmZlcix3PW5ldyBBcnJheSgxNjApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcsZy5jYWxsKHRoaXMsMTI4LDExMil9SShQLHkpLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MzQxODA3'@;
put 'MDM2NSx0aGlzLl9iaD0xNjU0MjcwMjUwLHRoaXMuX2NoPTI0Mzg1MjkzNzAsdGhpcy5fZGg9MzU1NDYyMzYwLHRoaXMuX2VoPTE3MzE0MDU0MTUsdGhpcy5fZmg9MjM5NDE4MDIzMSx0aGlzLl9naD0zNjc1MDA4NTI1LHRoaXMuX2hoPTEyMDMwNjI4MTMsdGhpcy5fYWw9MzIzODM3MTAzMix0'@;
put 'aGlzLl9ibD05MTQxNTA2NjMsdGhpcy5fY2w9ODEyNzAyOTk5LHRoaXMuX2RsPTQxNDQ5MTI2OTcsdGhpcy5fZWw9NDI5MDc3NTg1Nyx0aGlzLl9mbD0xNzUwNjAzMDI1LHRoaXMuX2dsPTE2OTQwNzY4MzksdGhpcy5faGw9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5j'@;
put 'dGlvbigpe3ZhciBGPUIuYWxsb2NVbnNhZmUoNDgpO2Z1bmN0aW9uIE8oeixOLEwpe0Yud3JpdGVJbnQzMkJFKHosTCksRi53cml0ZUludDMyQkUoTixMKzQpfXJldHVybiBPKHRoaXMuX2FoLHRoaXMuX2FsLDApLE8odGhpcy5fYmgsdGhpcy5fYmwsOCksTyh0aGlzLl9jaCx0aGlzLl9jbCwx'@;
put 'NiksTyh0aGlzLl9kaCx0aGlzLl9kbCwyNCksTyh0aGlzLl9laCx0aGlzLl9lbCwzMiksTyh0aGlzLl9maCx0aGlzLl9mbCw0MCksRn0sdWUuZXhwb3J0cz1QfSw3ODE2Oih1ZSxxLF8pPT57dmFyIEk9Xyg1NzE3KSx5PV8oNDE4OSksZz1fKDk1MDkpLkJ1ZmZlcixCPVsxMTE2MzUyNDA4LDM2'@;
put 'MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0'@;
put 'MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4'@;
put 'NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4Niwy'@;
put 'MTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4'@;
put 'MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5'@;
put 'MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkw'@;
put 'OSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1Mzcw'@;
put 'MDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEw'@;
put 'MjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIx'@;
put 'LDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUw'@;
put 'NTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LHkuY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIEYoWCxlZSxKKXtyZXR1cm4gSl5YJihl'@;
put 'ZV5KKX1mdW5jdGlvbiBPKFgsZWUsSil7cmV0dXJuIFgmZWV8SiYoWHxlZSl9ZnVuY3Rpb24geihYLGVlKXtyZXR1cm4oWD4+PjI4fGVlPDw0KV4oZWU+Pj4yfFg8PDMwKV4oZWU+Pj43fFg8PDI1KX1mdW5jdGlvbiBOKFgsZWUpe3JldHVybihYPj4+MTR8ZWU8PDE4KV4oWD4+PjE4fGVlPDwx'@;
put 'NCleKGVlPj4+OXxYPDwyMyl9ZnVuY3Rpb24gTChYLGVlKXtyZXR1cm4oWD4+PjF8ZWU8PDMxKV4oWD4+Pjh8ZWU8PDI0KV5YPj4+N31mdW5jdGlvbiBLKFgsZWUpe3JldHVybihYPj4+MXxlZTw8MzEpXihYPj4+OHxlZTw8MjQpXihYPj4+N3xlZTw8MjUpfWZ1bmN0aW9uIFUoWCxlZSl7cmV0'@;
put 'dXJuKFg+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fFg8PDMpXlg+Pj42fWZ1bmN0aW9uIFcoWCxlZSl7cmV0dXJuKFg+Pj4xOXxlZTw8MTMpXihlZT4+PjI5fFg8PDMpXihYPj4+NnxlZTw8MjYpfWZ1bmN0aW9uIFkoWCxlZSl7cmV0dXJuIFg+Pj4wPGVlPj4+MD8xOjB9SShQLHkpLFAucHJvdG90'@;
put 'eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1'@;
put 'LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMu'@;
put 'X2hsPTMyNzAzMzIwOSx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFgpe2Zvcih2YXIgZWU9dGhpcy5fdyxKPTB8dGhpcy5fYWgscmU9MHx0aGlzLl9iaCxpZT0wfHRoaXMuX2NoLGxlPTB8dGhpcy5fZGgsbWU9MHx0aGlzLl9laCxfZT0wfHRoaXMuX2ZoLFRlPTB8dGhpcy5f'@;
put 'Z2gsU2U9MHx0aGlzLl9oaCx6ZT0wfHRoaXMuX2FsLFY9MHx0aGlzLl9ibCxwPTB8dGhpcy5fY2wsYj0wfHRoaXMuX2RsLHg9MHx0aGlzLl9lbCxDPTB8dGhpcy5fZmwsVD0wfHRoaXMuX2dsLEg9MHx0aGlzLl9obCxqPTA7ajwzMjtqKz0yKWVlW2pdPVgucmVhZEludDMyQkUoNCpqKSxlZVtq'@;
put 'KzFdPVgucmVhZEludDMyQkUoNCpqKzQpO2Zvcig7ajwxNjA7ais9Mil7dmFyIEU9ZWVbai0zMF0sbT1lZVtqLTMwKzFdLEE9TChFLG0pLG9lPUsobSxFKSx0ZT1VKEU9ZWVbai00XSxtPWVlW2otNCsxXSksc2U9VyhtLEUpLEplPWVlW2otMzJdLGF0PWVlW2otMzIrMV0sTWU9b2UrZWVbai0x'@;
put 'NCsxXXwwLHZlPUErZWVbai0xNF0rWShNZSxvZSl8MDt2ZT0odmU9dmUrdGUrWShNZT1NZStzZXwwLHNlKXwwKStKZStZKE1lPU1lK2F0fDAsYXQpfDAsZWVbal09dmUsZWVbaisxXT1NZX1mb3IodmFyIFhlPTA7WGU8MTYwO1hlKz0yKXt2ZT1lZVtYZV0sTWU9ZWVbWGUrMV07dmFyIGplPU8o'@;
put 'SixyZSxpZSksRGU9Tyh6ZSxWLHApLEZlPXooSix6ZSksUmU9eih6ZSxKKSxJZT1OKG1lLHgpLFZlPU4oeCxtZSksa2U9QltYZV0sQWU9QltYZSsxXSxfdD1GKG1lLF9lLFRlKSxudD1GKHgsQyxUKSxRZT1IK1ZlfDAsdW49U2UrSWUrWShRZSxIKXwwO3VuPSh1bj0odW49dW4rX3QrWShRZT1R'@;
put 'ZStudHwwLG50KXwwKStrZStZKFFlPVFlK0FlfDAsQWUpfDApK3ZlK1koUWU9UWUrTWV8MCxNZSl8MDt2YXIgeXQ9UmUrRGV8MCxNdD1GZStqZStZKHl0LFJlKXwwO1NlPVRlLEg9VCxUZT1fZSxUPUMsX2U9bWUsQz14LG1lPWxlK3VuK1koeD1iK1FlfDAsYil8MCxsZT1pZSxiPXAsaWU9cmUs'@;
put 'cD1WLHJlPUosVj16ZSxKPXVuK010K1koemU9UWUreXR8MCxRZSl8MH10aGlzLl9hbD10aGlzLl9hbCt6ZXwwLHRoaXMuX2JsPXRoaXMuX2JsK1Z8MCx0aGlzLl9jbD10aGlzLl9jbCtwfDAsdGhpcy5fZGw9dGhpcy5fZGwrYnwwLHRoaXMuX2VsPXRoaXMuX2VsK3h8MCx0aGlzLl9mbD10aGlz'@;
put 'Ll9mbCtDfDAsdGhpcy5fZ2w9dGhpcy5fZ2wrVHwwLHRoaXMuX2hsPXRoaXMuX2hsK0h8MCx0aGlzLl9haD10aGlzLl9haCtKK1kodGhpcy5fYWwsemUpfDAsdGhpcy5fYmg9dGhpcy5fYmgrcmUrWSh0aGlzLl9ibCxWKXwwLHRoaXMuX2NoPXRoaXMuX2NoK2llK1kodGhpcy5fY2wscCl8MCx0'@;
put 'aGlzLl9kaD10aGlzLl9kaCtsZStZKHRoaXMuX2RsLGIpfDAsdGhpcy5fZWg9dGhpcy5fZWgrbWUrWSh0aGlzLl9lbCx4KXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK19lK1kodGhpcy5fZmwsQyl8MCx0aGlzLl9naD10aGlzLl9naCtUZStZKHRoaXMuX2dsLFQpfDAsdGhpcy5faGg9dGhpcy5faGgr'@;
put 'U2UrWSh0aGlzLl9obCxIKXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBYPWcuYWxsb2NVbnNhZmUoNjQpO2Z1bmN0aW9uIGVlKEoscmUsaWUpe1gud3JpdGVJbnQzMkJFKEosaWUpLFgud3JpdGVJbnQzMkJFKHJlLGllKzQpfXJldHVybiBlZSh0aGlzLl9haCx0aGlzLl9h'@;
put 'bCwwKSxlZSh0aGlzLl9iaCx0aGlzLl9ibCw4KSxlZSh0aGlzLl9jaCx0aGlzLl9jbCwxNiksZWUodGhpcy5fZGgsdGhpcy5fZGwsMjQpLGVlKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxlZSh0aGlzLl9maCx0aGlzLl9mbCw0MCksZWUodGhpcy5fZ2gsdGhpcy5fZ2wsNDgpLGVlKHRoaXMuX2ho'@;
put 'LHRoaXMuX2hsLDU2KSxYfSx1ZS5leHBvcnRzPVB9LDI4MzA6KHVlLHEsXyk9Pnt1ZS5leHBvcnRzPWc7dmFyIEk9Xyg3MTg3KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gZygpe0kuY2FsbCh0aGlzKX1fKDU3MTcpKGcsSSksZy5SZWFkYWJsZT1fKDk0ODEpLGcuV3JpdGFibGU9Xyg0MjI5KSxn'@;
put 'LkR1cGxleD1fKDY3NTMpLGcuVHJhbnNmb3JtPV8oNDYwNSksZy5QYXNzVGhyb3VnaD1fKDI3MjUpLGcuZmluaXNoZWQ9Xyg4NjEwKSxnLnBpcGVsaW5lPV8oOTk0NiksZy5TdHJlYW09ZyxnLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEIsdyl7dmFyIFA9dGhpcztmdW5jdGlvbiBGKFcpe0Iu'@;
put 'd3JpdGFibGUmJiExPT09Qi53cml0ZShXKSYmUC5wYXVzZSYmUC5wYXVzZSgpfWZ1bmN0aW9uIE8oKXtQLnJlYWRhYmxlJiZQLnJlc3VtZSYmUC5yZXN1bWUoKX1QLm9uKCJkYXRhIixGKSxCLm9uKCJkcmFpbiIsTyksIUIuX2lzU3RkaW8mJighd3x8ITEhPT13LmVuZCkmJihQLm9uKCJlbmQi'@;
put 'LE4pLFAub24oImNsb3NlIixMKSk7dmFyIHo9ITE7ZnVuY3Rpb24gTigpe3p8fCh6PSEwLEIuZW5kKCkpfWZ1bmN0aW9uIEwoKXt6fHwoej0hMCwiZnVuY3Rpb24iPT10eXBlb2YgQi5kZXN0cm95JiZCLmRlc3Ryb3koKSl9ZnVuY3Rpb24gSyhXKXtpZihVKCksMD09PUkubGlzdGVuZXJDb3Vu'@;
put 'dCh0aGlzLCJlcnJvciIpKXRocm93IFd9ZnVuY3Rpb24gVSgpe1AucmVtb3ZlTGlzdGVuZXIoImRhdGEiLEYpLEIucmVtb3ZlTGlzdGVuZXIoImRyYWluIixPKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLE4pLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJl'@;
put 'cnJvciIsSyksQi5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEspLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsVSksUC5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFUpLEIucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVKX1yZXR1cm4gUC5vbigiZXJyb3IiLEspLEIub24oImVycm9yIixLKSxQLm9uKCJl'@;
put 'bmQiLFUpLFAub24oImNsb3NlIixVKSxCLm9uKCJjbG9zZSIsVSksQi5lbWl0KCJwaXBlIixQKSxCfX0sMjU1MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk1MDkpLkJ1ZmZlcix5PUkuaXNFbmNvZGluZ3x8ZnVuY3Rpb24oSil7c3dpdGNoKChKPSIiK0opJiZKLnRvTG93ZXJD'@;
put 'YXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UiYmluYXJ5IjpjYXNlImJhc2U2NCI6Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOmNhc2UicmF3IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiEx'@;
put 'fX07ZnVuY3Rpb24gdyhKKXt2YXIgcmU7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24gQihKKXt2YXIgcmU9ZnVuY3Rpb24gZyhKKXtpZighSilyZXR1cm4idXRmOCI7Zm9yKHZhciByZTs7KXN3aXRjaChKKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVj'@;
put 'czIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gSjtkZWZhdWx0OmlmKHJlKXJldHVy'@;
put 'bjtKPSgiIitKKS50b0xvd2VyQ2FzZSgpLHJlPSEwfX0oSik7aWYoInN0cmluZyIhPXR5cGVvZiByZSYmKEkuaXNFbmNvZGluZz09PXl8fCF5KEopKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrSik7cmV0dXJuIHJlfHxKfShKKSx0aGlzLmVuY29kaW5nKXtjYXNlInV0'@;
put 'ZjE2bGUiOnRoaXMudGV4dD1LLHRoaXMuZW5kPVUscmU9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmlsbExhc3Q9eixyZT00O2JyZWFrO2Nhc2UiYmFzZTY0Ijp0aGlzLnRleHQ9Vyx0aGlzLmVuZD1ZLHJlPTM7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy53cml0ZT1YLHZvaWQodGhpcy5l'@;
put 'bmQ9ZWUpfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9SS5hbGxvY1Vuc2FmZShyZSl9ZnVuY3Rpb24gUChKKXtyZXR1cm4gSjw9MTI3PzA6Sj4+NT09Nj8yOko+PjQ9PTE0PzM6Sj4+Mz09MzA/NDpKPj42PT0yPy0xOi0yfWZ1bmN0aW9uIHooSil7dmFy'@;
put 'IHJlPXRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsaWU9ZnVuY3Rpb24gTyhKLHJlLGllKXtpZigxMjghPSgxOTImcmVbMF0pKXJldHVybiBKLmxhc3ROZWVkPTAsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4xJiZyZS5sZW5ndGg+MSl7aWYoMTI4IT0oMTkyJnJlWzFdKSlyZXR1cm4gSi5s'@;
put 'YXN0TmVlZD0xLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MiYmcmUubGVuZ3RoPjImJjEyOCE9KDE5MiZyZVsyXSkpcmV0dXJuIEoubGFzdE5lZWQ9MiwiXHVmZmZkIn19KHRoaXMsSik7cmV0dXJuIHZvaWQgMCE9PWllP2llOnRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoPyhKLmNvcHkodGhpcy5s'@;
put 'YXN0Q2hhcixyZSwwLHRoaXMubGFzdE5lZWQpLHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKSk6KEouY29weSh0aGlzLmxhc3RDaGFyLHJlLDAsSi5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09Si5sZW5ndGgpKX1mdW5jdGlvbiBLKEos'@;
put 'cmUpe2lmKChKLmxlbmd0aC1yZSklMj09MCl7dmFyIGllPUoudG9TdHJpbmcoInV0ZjE2bGUiLHJlKTtpZihpZSl7dmFyIGxlPWllLmNoYXJDb2RlQXQoaWUubGVuZ3RoLTEpO2lmKGxlPj01NTI5NiYmbGU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0'@;
put 'aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdLGllLnNsaWNlKDAsLTEpfXJldHVybiBpZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdLEoudG9TdHJp'@;
put 'bmcoInV0ZjE2bGUiLHJlLEoubGVuZ3RoLTEpfWZ1bmN0aW9uIFUoSil7dmFyIHJlPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVk'@;
put 'KTpyZX1mdW5jdGlvbiBXKEoscmUpe3ZhciBpZT0oSi5sZW5ndGgtcmUpJTM7cmV0dXJuIDA9PT1pZT9KLnRvU3RyaW5nKCJiYXNlNjQiLHJlKToodGhpcy5sYXN0TmVlZD0zLWllLHRoaXMubGFzdFRvdGFsPTMsMT09PWllP3RoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXToodGhpcy5s'@;
put 'YXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSksSi50b1N0cmluZygiYmFzZTY0IixyZSxKLmxlbmd0aC1pZSkpfWZ1bmN0aW9uIFkoSil7dmFyIHJlPUomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/'@;
put 'cmUrdGhpcy5sYXN0Q2hhci50b1N0cmluZygiYmFzZTY0IiwwLDMtdGhpcy5sYXN0TmVlZCk6cmV9ZnVuY3Rpb24gWChKKXtyZXR1cm4gSi50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBlZShKKXtyZXR1cm4gSiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIn1xLnM9dyx3LnBy'@;
put 'b3RvdHlwZS53cml0ZT1mdW5jdGlvbihKKXtpZigwPT09Si5sZW5ndGgpcmV0dXJuIiI7dmFyIHJlLGllO2lmKHRoaXMubGFzdE5lZWQpe2lmKHZvaWQgMD09PShyZT10aGlzLmZpbGxMYXN0KEopKSlyZXR1cm4iIjtpZT10aGlzLmxhc3ROZWVkLHRoaXMubGFzdE5lZWQ9MH1lbHNlIGllPTA7'@;
put 'cmV0dXJuIGllPEoubGVuZ3RoP3JlP3JlK3RoaXMudGV4dChKLGllKTp0aGlzLnRleHQoSixpZSk6cmV8fCIifSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24gTChKKXt2YXIgcmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9yZSsiXHVmZmZkIjpy'@;
put 'ZX0sdy5wcm90b3R5cGUudGV4dD1mdW5jdGlvbiBOKEoscmUpe3ZhciBpZT1mdW5jdGlvbiBGKEoscmUsaWUpe3ZhciBsZT1yZS5sZW5ndGgtMTtpZihsZTxpZSlyZXR1cm4gMDt2YXIgbWU9UChyZVtsZV0pO3JldHVybiBtZT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMSksbWUpOi0tbGU8'@;
put 'aWV8fC0yPT09bWU/MDoobWU9UChyZVtsZV0pKT49MD8obWU+MCYmKEoubGFzdE5lZWQ9bWUtMiksbWUpOi0tbGU8aWV8fC0yPT09bWU/MDoobWU9UChyZVtsZV0pKT49MD8obWU+MCYmKDI9PT1tZT9tZT0wOkoubGFzdE5lZWQ9bWUtMyksbWUpOjB9KHRoaXMsSixyZSk7aWYoIXRoaXMubGFz'@;
put 'dE5lZWQpcmV0dXJuIEoudG9TdHJpbmcoInV0ZjgiLHJlKTt0aGlzLmxhc3RUb3RhbD1pZTt2YXIgbGU9Si5sZW5ndGgtKGllLXRoaXMubGFzdE5lZWQpO3JldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhciwwLGxlKSxKLnRvU3RyaW5nKCJ1dGY4IixyZSxsZSl9LHcucHJvdG90eXBlLmZpbGxM'@;
put 'YXN0PWZ1bmN0aW9uKEope2lmKHRoaXMubGFzdE5lZWQ8PUoubGVuZ3RoKXJldHVybiBKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0'@;
put 'VG90YWwpO0ouY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCxKLmxlbmd0aCksdGhpcy5sYXN0TmVlZC09Si5sZW5ndGh9fSw3ODU3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9XygzNjg5KSx5PV8oNDU2NCksZz1fKDc1MiksQj1fKDIy'@;
put 'MjQpLnksdz1fKDU3NjEpLm0sUD1fKDg5NzEpLlUsRj1fKDc2NTIpLE89Xyg0NTYpLHtmcm9tQ2FsbGJhY2s6en09Xyg3MDQxKSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpOfT1fKDEyNjkpLEw9L15bXHgyMVx4MjMtXHgyQlx4MkQtXHgzQVx4M0MtXHg1Qlx4NUQtXHg3RV0rJC8sSz0vW1x4'@;
put 'MDAtXHgxRl0vLFU9WyJcbiIsIlxyIiwiXDAiXSxXPS9bXHgyMC1ceDNBXHgzQy1ceDdFXSsvLFk9L1tceDA5XHgyMC1ceDJGXHgzQi1ceDQwXHg1Qi1ceDYwXHg3Qi1ceDdFXS8sWD17amFuOjAsZmViOjEsbWFyOjIsYXByOjMsbWF5OjQsanVuOjUsanVsOjYsYXVnOjcsc2VwOjgsb2N0Ojks'@;
put 'bm92OjEwLGRlYzoxMX0sZWU9MjE0NzQ4MzY0N2UzLHJlPSdJbnZhbGlkIHNhbWVTaXRlQ29udGV4dCBvcHRpb24gZm9yIGdldENvb2tpZXMoKTsgZXhwZWN0ZWQgb25lIG9mICJzdHJpY3QiLCAibGF4Iiwgb3IgIm5vbmUiJztmdW5jdGlvbiBpZShqZSl7Ri52YWxpZGF0ZShGLmlzTm9uRW1w'@;
put 'dHlTdHJpbmcoamUpLGplKTtjb25zdCBEZT1TdHJpbmcoamUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIm5vbmUiPT09RGV8fCJsYXgiPT09RGV8fCJzdHJpY3QiPT09RGU/RGU6bnVsbH1jb25zdCBsZT1PYmplY3QuZnJlZXplKHtTSUxFTlQ6InNpbGVudCIsU1RSSUNUOiJzdHJpY3QiLERJU0FC'@;
put 'TEVEOiJ1bnNhZmUtZGlzYWJsZWQifSksbWU9Lyg/Ol4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfSQpfCg/Ol4oPzooPzpbYS1mXGRdezEsNH06KXs3fSg/OlthLWZcZF17MSw0fXw6KXwo'@;
put 'PzpbYS1mXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fDpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1c'@;
put 'ZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwyfXw6KXwoPzpbYS1mXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxb'@;
put 'MS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSwzfXw6KXwoPzpbYS1mXGRdezEsNH06KXszfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxk'@;
put 'KSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsM306KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86'@;
put 'MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw1fXw6KXwoPzpbYS1mXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mXGRdezEsNH0pezAsNH06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwy'@;
put 'WzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw2fXw6KXwoPzo6KD86KD86OlthLWZcZF17MSw0fSl7MCw1fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQp'@;
put 'KXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDd9fDopKSkkKS8sX2U9IlxuXFxbPyg/OlxuKD86W2EtZkEtRlxcZF17MSw0fTopezd9KD86W2EtZkEtRlxcZF17MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs2fSg/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8'@;
put 'XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NX0oPzo6KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01'@;
put 'XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSwyfXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXs0fSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxk'@;
put 'KSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsM318Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7M30oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxk'@;
put 'XFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezJ9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsM306KD86MjVbMC01'@;
put 'XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw1fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsxfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9'@;
put 'KXswLDR9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNn18Oil8XG4oPzo6KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAs'@;
put 'NX06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw3fXw6KSlcbikoPzolWzAtOWEtekEtWl17MSx9KT9cXF0/XG4iLnJlcGxh'@;
put 'Y2UoL1xzKlwvXC8uKiQvZ20sIiIpLnJlcGxhY2UoL1xuL2csIiIpLnRyaW0oKSxUZT1uZXcgUmVnRXhwKGBeJHtfZX0kYCk7ZnVuY3Rpb24gU2UoamUsRGUsRmUsUmUpe2xldCBJZT0wO2Zvcig7SWU8amUubGVuZ3RoOyl7Y29uc3QgVmU9amUuY2hhckNvZGVBdChJZSk7aWYoVmU8PTQ3fHxW'@;
put 'ZT49NTgpYnJlYWs7SWUrK31yZXR1cm4gSWU8RGV8fEllPkZlfHwhUmUmJkllIT1qZS5sZW5ndGg/bnVsbDpwYXJzZUludChqZS5zdWJzdHIoMCxJZSksMTApfWZ1bmN0aW9uIHplKGplKXtjb25zdCBEZT1qZS5zcGxpdCgiOiIpLEZlPVswLDAsMF07aWYoMyE9PURlLmxlbmd0aClyZXR1cm4g'@;
put 'bnVsbDtmb3IobGV0IFJlPTA7UmU8MztSZSsrKXtjb25zdCBWZT1TZShEZVtSZV0sMSwyLDI9PVJlKTtpZihudWxsPT09VmUpcmV0dXJuIG51bGw7RmVbUmVdPVZlfXJldHVybiBGZX1mdW5jdGlvbiBWKGplKXtqZT1TdHJpbmcoamUpLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCk7Y29uc3Qg'@;
put 'RGU9WFtqZV07cmV0dXJuIERlPj0wP0RlOm51bGx9ZnVuY3Rpb24gcChqZSl7aWYoIWplKXJldHVybjtjb25zdCBEZT1qZS5zcGxpdChZKTtpZighRGUpcmV0dXJuO2xldCBGZT1udWxsLFJlPW51bGwsSWU9bnVsbCxWZT1udWxsLGtlPW51bGwsQWU9bnVsbDtmb3IobGV0IF90PTA7X3Q8RGUu'@;
put 'bGVuZ3RoO190Kyspe2NvbnN0IG50PURlW190XS50cmltKCk7aWYoIW50Lmxlbmd0aCljb250aW51ZTtsZXQgUWU7bnVsbD09PUllJiYoUWU9emUobnQpLFFlKT8oRmU9UWVbMF0sUmU9UWVbMV0sSWU9UWVbMl0pOm51bGwhPT1WZXx8KFFlPVNlKG50LDEsMiwhMCksbnVsbD09PVFlKT9udWxs'@;
put 'IT09a2V8fChRZT1WKG50KSxudWxsPT09UWUpP251bGw9PT1BZSYmKFFlPVNlKG50LDIsNCwhMCksbnVsbCE9PVFlJiYoQWU9UWUsQWU+PTcwJiZBZTw9OTk/QWUrPTE5MDA6QWU+PTAmJkFlPD02OSYmKEFlKz0yZTMpKSk6a2U9UWU6VmU9UWV9cmV0dXJuIG51bGw9PT1WZXx8bnVsbD09PWtl'@;
put 'fHxudWxsPT09QWV8fG51bGw9PT1JZXx8VmU8MXx8VmU+MzF8fEFlPDE2MDF8fEZlPjIzfHxSZT41OXx8SWU+NTk/dm9pZCAwOm5ldyBEYXRlKERhdGUuVVRDKEFlLGtlLFZlLEZlLFJlLEllKSl9ZnVuY3Rpb24gYihqZSl7cmV0dXJuIEYudmFsaWRhdGUoRi5pc0RhdGUoamUpLGplKSxqZS50'@;
put 'b1VUQ1N0cmluZygpfWZ1bmN0aW9uIHgoamUpe3JldHVybiBudWxsPT1qZT9udWxsOihqZT1qZS50cmltKCkucmVwbGFjZSgvXlwuLywiIiksVGUudGVzdChqZSkmJihqZT1qZS5yZXBsYWNlKCJbIiwiIikucmVwbGFjZSgiXSIsIiIpKSxJJiYvW15cdTAwMDEtXHUwMDdmXS8udGVzdChqZSkm'@;
put 'JihqZT1JLnRvQVNDSUkoamUpKSxqZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBDKGplLERlLEZlKXtpZihudWxsPT1qZXx8bnVsbD09RGUpcmV0dXJuIG51bGw7aWYoITEhPT1GZSYmKGplPXgoamUpLERlPXgoRGUpKSxqZT09RGUpcmV0dXJuITA7Y29uc3QgUmU9amUubGFzdEluZGV4T2Yo'@;
put 'RGUpO3JldHVybiEoUmU8PTB8fGplLmxlbmd0aCE9PURlLmxlbmd0aCtSZXx8Ii4iIT09amUuc3Vic3RyKFJlLTEsMSl8fG1lLnRlc3QoamUpKX1mdW5jdGlvbiBUKGplKXtpZighamV8fCIvIiE9PWplLnN1YnN0cigwLDEpKXJldHVybiIvIjtpZigiLyI9PT1qZSlyZXR1cm4gamU7Y29uc3Qg'@;
put 'RGU9amUubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gMD09PURlPyIvIjpqZS5zbGljZSgwLERlKX1mdW5jdGlvbiBFKGplLERlKXtpZigoIURlfHwib2JqZWN0IiE9dHlwZW9mIERlKSYmKERlPXt9KSxGLmlzRW1wdHlTdHJpbmcoamUpfHwhRi5pc1N0cmluZyhqZSkpcmV0dXJuIG51bGw7Y29u'@;
put 'c3QgRmU9KGplPWplLnRyaW0oKSkuaW5kZXhPZigiOyIpLEllPWZ1bmN0aW9uIGooamUsRGUpe2plPWZ1bmN0aW9uIEgoamUpe2lmKEYuaXNFbXB0eVN0cmluZyhqZSkpcmV0dXJuIGplO2ZvcihsZXQgRGU9MDtEZTxVLmxlbmd0aDtEZSsrKXtjb25zdCBGZT1qZS5pbmRleE9mKFVbRGVdKTst'@;
put 'MSE9PUZlJiYoamU9amUuc3Vic3RyKDAsRmUpKX1yZXR1cm4gamV9KGplKSxGLnZhbGlkYXRlKEYuaXNTdHJpbmcoamUpLGplKTtsZXQgUmUsSWUsRmU9amUuaW5kZXhPZigiPSIpO2lmKERlKTA9PT1GZSYmKEZlPShqZT1qZS5zdWJzdHIoMSkpLmluZGV4T2YoIj0iKSk7ZWxzZSBpZihGZTw9'@;
put 'MClyZXR1cm47aWYoRmU8PTA/KFJlPSIiLEllPWplLnRyaW0oKSk6KFJlPWplLnN1YnN0cigwLEZlKS50cmltKCksSWU9amUuc3Vic3RyKEZlKzEpLnRyaW0oKSksSy50ZXN0KFJlKXx8Sy50ZXN0KEllKSlyZXR1cm47Y29uc3QgVmU9bmV3IGF0O3JldHVybiBWZS5rZXk9UmUsVmUudmFsdWU9'@;
put 'SWUsVmV9KC0xPT09RmU/amU6amUuc3Vic3RyKDAsRmUpLCEhRGUubG9vc2UpO2lmKCFJZSlyZXR1cm47aWYoLTE9PT1GZSlyZXR1cm4gSWU7Y29uc3QgVmU9amUuc2xpY2UoRmUrMSkudHJpbSgpO2lmKDA9PT1WZS5sZW5ndGgpcmV0dXJuIEllO2NvbnN0IGtlPVZlLnNwbGl0KCI7Iik7Zm9y'@;
put 'KDtrZS5sZW5ndGg7KXtjb25zdCBBZT1rZS5zaGlmdCgpLnRyaW0oKTtpZigwPT09QWUubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IF90PUFlLmluZGV4T2YoIj0iKTtsZXQgbnQsUWU7c3dpdGNoKC0xPT09X3Q/KG50PUFlLFFlPW51bGwpOihudD1BZS5zdWJzdHIoMCxfdCksUWU9QWUuc3Vic3Ry'@;
put 'KF90KzEpKSxudD1udC50cmltKCkudG9Mb3dlckNhc2UoKSxRZSYmKFFlPVFlLnRyaW0oKSksbnQpe2Nhc2UiZXhwaXJlcyI6aWYoUWUpe2NvbnN0IHl0PXAoUWUpO3l0JiYoSWUuZXhwaXJlcz15dCl9YnJlYWs7Y2FzZSJtYXgtYWdlIjppZihRZSYmL14tP1swLTldKyQvLnRlc3QoUWUpKXtj'@;
put 'b25zdCB5dD1wYXJzZUludChRZSwxMCk7SWUuc2V0TWF4QWdlKHl0KX1icmVhaztjYXNlImRvbWFpbiI6aWYoUWUpe2NvbnN0IHl0PVFlLnRyaW0oKS5yZXBsYWNlKC9eXC4vLCIiKTt5dCYmKEllLmRvbWFpbj15dC50b0xvd2VyQ2FzZSgpKX1icmVhaztjYXNlInBhdGgiOkllLnBhdGg9UWUm'@;
put 'JiIvIj09PVFlWzBdP1FlOm51bGw7YnJlYWs7Y2FzZSJzZWN1cmUiOkllLnNlY3VyZT0hMDticmVhaztjYXNlImh0dHBvbmx5IjpJZS5odHRwT25seT0hMDticmVhaztjYXNlInNhbWVzaXRlIjpzd2l0Y2goUWU/UWUudG9Mb3dlckNhc2UoKToiIil7Y2FzZSJzdHJpY3QiOkllLnNhbWVTaXRl'@;
put 'PSJzdHJpY3QiO2JyZWFrO2Nhc2UibGF4IjpJZS5zYW1lU2l0ZT0ibGF4IjticmVhaztjYXNlIm5vbmUiOkllLnNhbWVTaXRlPSJub25lIjticmVhaztkZWZhdWx0OkllLnNhbWVTaXRlPXZvaWQgMH1icmVhaztkZWZhdWx0OkllLmV4dGVuc2lvbnM9SWUuZXh0ZW5zaW9uc3x8W10sSWUuZXh0'@;
put 'ZW5zaW9ucy5wdXNoKEFlKX19cmV0dXJuIEllfWZ1bmN0aW9uIG9lKGplKXtsZXQgRGU7dHJ5e0RlPUpTT04ucGFyc2UoamUpfWNhdGNoKEZlKXtyZXR1cm4gRmV9cmV0dXJuIERlfWZ1bmN0aW9uIHRlKGplKXtpZighamV8fEYuaXNFbXB0eVN0cmluZyhqZSkpcmV0dXJuIG51bGw7bGV0IERl'@;
put 'O2lmKCJzdHJpbmciPT10eXBlb2YgamUpe2lmKERlPW9lKGplKSxEZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBudWxsfWVsc2UgRGU9amU7Y29uc3QgRmU9bmV3IGF0O2ZvcihsZXQgUmU9MDtSZTxhdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzLmxlbmd0aDtSZSsrKXtjb25zdCBJZT1hdC5z'@;
put 'ZXJpYWxpemFibGVQcm9wZXJ0aWVzW1JlXTt2b2lkIDA9PT1EZVtJZV18fERlW0llXT09PUplW0llXXx8KEZlW0llXT0iZXhwaXJlcyI9PT1JZXx8ImNyZWF0aW9uIj09PUllfHwibGFzdEFjY2Vzc2VkIj09PUllP251bGw9PT1EZVtJZV0/bnVsbDoiSW5maW5pdHkiPT1EZVtJZV0/IkluZmlu'@;
put 'aXR5IjpuZXcgRGF0ZShEZVtJZV0pOkRlW0llXSl9cmV0dXJuIEZlfWZ1bmN0aW9uIHNlKGplLERlKXtGLnZhbGlkYXRlKEYuaXNPYmplY3QoamUpLGplKSxGLnZhbGlkYXRlKEYuaXNPYmplY3QoRGUpLERlKTtsZXQgRmU9MDtyZXR1cm4gRmU9KERlLnBhdGg/RGUucGF0aC5sZW5ndGg6MCkt'@;
put 'KGplLnBhdGg/amUucGF0aC5sZW5ndGg6MCksMCE9PUZlfHwoRmU9KGplLmNyZWF0aW9uP2plLmNyZWF0aW9uLmdldFRpbWUoKTplZSktKERlLmNyZWF0aW9uP0RlLmNyZWF0aW9uLmdldFRpbWUoKTplZSksMCE9PUZlfHwoRmU9amUuY3JlYXRpb25JbmRleC1EZS5jcmVhdGlvbkluZGV4KSks'@;
put 'RmV9ZnVuY3Rpb24gVWUoamUpe2lmKGplIGluc3RhbmNlb2YgT2JqZWN0KXJldHVybiBqZTt0cnl7amU9ZGVjb2RlVVJJKGplKX1jYXRjaHt9cmV0dXJuIHkoamUpfWNvbnN0IEplPXtrZXk6IiIsdmFsdWU6IiIsZXhwaXJlczoiSW5maW5pdHkiLG1heEFnZTpudWxsLGRvbWFpbjpudWxsLHBh'@;
put 'dGg6bnVsbCxzZWN1cmU6ITEsaHR0cE9ubHk6ITEsZXh0ZW5zaW9uczpudWxsLGhvc3RPbmx5Om51bGwscGF0aElzRGVmYXVsdDpudWxsLGNyZWF0aW9uOm51bGwsbGFzdEFjY2Vzc2VkOm51bGwsc2FtZVNpdGU6dm9pZCAwfTtjbGFzcyBhdHtjb25zdHJ1Y3RvcihEZT17fSl7Y29uc3QgRmU9'@;
put 'TigpO0ZlJiYodGhpc1tGZV09dGhpcy5pbnNwZWN0KSxPYmplY3QuYXNzaWduKHRoaXMsSmUsRGUpLHRoaXMuY3JlYXRpb249dGhpcy5jcmVhdGlvbnx8bmV3IERhdGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImNyZWF0aW9uSW5kZXgiLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJs'@;
put 'ZTohMSx3cml0YWJsZTohMCx2YWx1ZTorK2F0LmNvb2tpZXNDcmVhdGVkfSl9aW5zcGVjdCgpe2NvbnN0IERlPURhdGUubm93KCksRmU9bnVsbCE9dGhpcy5ob3N0T25seT90aGlzLmhvc3RPbmx5OiI/IixSZT10aGlzLmNyZWF0aW9uP0RlLXRoaXMuY3JlYXRpb24uZ2V0VGltZSgpKyJtcyI6'@;
put 'Ij8iLEllPXRoaXMubGFzdEFjY2Vzc2VkP0RlLXRoaXMubGFzdEFjY2Vzc2VkLmdldFRpbWUoKSsibXMiOiI/IjtyZXR1cm5gQ29va2llPSIke3RoaXMudG9TdHJpbmcoKX07IGhvc3RPbmx5PSR7RmV9OyBhQWdlPSR7SWV9OyBjQWdlPSR7UmV9ImB9dG9KU09OKCl7Y29uc3QgRGU9e307Zm9y'@;
put 'KGNvbnN0IEZlIG9mIGF0LnNlcmlhbGl6YWJsZVByb3BlcnRpZXMpdGhpc1tGZV0hPT1KZVtGZV0mJigiZXhwaXJlcyI9PT1GZXx8ImNyZWF0aW9uIj09PUZlfHwibGFzdEFjY2Vzc2VkIj09PUZlP0RlW0ZlXT1udWxsPT09dGhpc1tGZV0/bnVsbDoiSW5maW5pdHkiPT10aGlzW0ZlXT8iSW5m'@;
put 'aW5pdHkiOnRoaXNbRmVdLnRvSVNPU3RyaW5nKCk6Im1heEFnZSI9PT1GZT9udWxsIT09dGhpc1tGZV0mJihEZVtGZV09dGhpc1tGZV09PTEvMHx8dGhpc1tGZV09PS0xLzA/dGhpc1tGZV0udG9TdHJpbmcoKTp0aGlzW0ZlXSk6dGhpc1tGZV0hPT1KZVtGZV0mJihEZVtGZV09dGhpc1tGZV0p'@;
put 'KTtyZXR1cm4gRGV9Y2xvbmUoKXtyZXR1cm4gdGUodGhpcy50b0pTT04oKSl9dmFsaWRhdGUoKXtpZighTC50ZXN0KHRoaXMudmFsdWUpfHx0aGlzLmV4cGlyZXMhPTEvMCYmISh0aGlzLmV4cGlyZXMgaW5zdGFuY2VvZiBEYXRlKSYmIXAodGhpcy5leHBpcmVzKXx8bnVsbCE9dGhpcy5tYXhB'@;
put 'Z2UmJnRoaXMubWF4QWdlPD0wfHxudWxsIT10aGlzLnBhdGgmJiFXLnRlc3QodGhpcy5wYXRoKSlyZXR1cm4hMTtjb25zdCBEZT10aGlzLmNkb21haW4oKTtyZXR1cm4hKERlJiYoRGUubWF0Y2goL1wuJC8pfHxudWxsPT1nLmdldFB1YmxpY1N1ZmZpeChEZSkpKX1zZXRFeHBpcmVzKERlKXt0'@;
put 'aGlzLmV4cGlyZXM9RGUgaW5zdGFuY2VvZiBEYXRlP0RlOnAoRGUpfHwiSW5maW5pdHkifXNldE1heEFnZShEZSl7dGhpcy5tYXhBZ2U9RGU9PT0xLzB8fERlPT09LTEvMD9EZS50b1N0cmluZygpOkRlfWNvb2tpZVN0cmluZygpe2xldCBEZT10aGlzLnZhbHVlO3JldHVybiBudWxsPT1EZSYm'@;
put 'KERlPSIiKSwiIj09PXRoaXMua2V5P0RlOmAke3RoaXMua2V5fT0ke0RlfWB9dG9TdHJpbmcoKXtsZXQgRGU9dGhpcy5jb29raWVTdHJpbmcoKTtpZih0aGlzLmV4cGlyZXMhPTEvMCYmKHRoaXMuZXhwaXJlcyBpbnN0YW5jZW9mIERhdGU/RGUrPWA7IEV4cGlyZXM9JHtiKHRoaXMuZXhwaXJl'@;
put 'cyl9YDpEZSs9YDsgRXhwaXJlcz0ke3RoaXMuZXhwaXJlc31gKSxudWxsIT10aGlzLm1heEFnZSYmdGhpcy5tYXhBZ2UhPTEvMCYmKERlKz1gOyBNYXgtQWdlPSR7dGhpcy5tYXhBZ2V9YCksdGhpcy5kb21haW4mJiF0aGlzLmhvc3RPbmx5JiYoRGUrPWA7IERvbWFpbj0ke3RoaXMuZG9tYWlu'@;
put 'fWApLHRoaXMucGF0aCYmKERlKz1gOyBQYXRoPSR7dGhpcy5wYXRofWApLHRoaXMuc2VjdXJlJiYoRGUrPSI7IFNlY3VyZSIpLHRoaXMuaHR0cE9ubHkmJihEZSs9IjsgSHR0cE9ubHkiKSx0aGlzLnNhbWVTaXRlJiYibm9uZSIhPT10aGlzLnNhbWVTaXRlKXtjb25zdCBGZT1hdC5zYW1lU2l0'@;
put 'ZUNhbm9uaWNhbFt0aGlzLnNhbWVTaXRlLnRvTG93ZXJDYXNlKCldO0RlKz1gOyBTYW1lU2l0ZT0ke0ZlfHx0aGlzLnNhbWVTaXRlfWB9cmV0dXJuIHRoaXMuZXh0ZW5zaW9ucyYmdGhpcy5leHRlbnNpb25zLmZvckVhY2goRmU9PntEZSs9YDsgJHtGZX1gfSksRGV9VFRMKERlKXtpZihudWxs'@;
put 'IT10aGlzLm1heEFnZSlyZXR1cm4gdGhpcy5tYXhBZ2U8PTA/MDoxZTMqdGhpcy5tYXhBZ2U7bGV0IEZlPXRoaXMuZXhwaXJlcztyZXR1cm4gRmUhPTEvMD8oRmUgaW5zdGFuY2VvZiBEYXRlfHwoRmU9cChGZSl8fDEvMCksRmU9PTEvMD8xLzA6RmUuZ2V0VGltZSgpLShEZXx8RGF0ZS5ub3co'@;
put 'KSkpOjEvMH1leHBpcnlUaW1lKERlKXtpZihudWxsIT10aGlzLm1heEFnZSl7Y29uc3QgUmU9dGhpcy5tYXhBZ2U8PTA/LTEvMDoxZTMqdGhpcy5tYXhBZ2U7cmV0dXJuKERlfHx0aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSkuZ2V0VGltZSgpK1JlfXJldHVybiB0aGlzLmV4cGlyZXM9PTEvMD8x'@;
put 'LzA6dGhpcy5leHBpcmVzLmdldFRpbWUoKX1leHBpcnlEYXRlKERlKXtjb25zdCBGZT10aGlzLmV4cGlyeVRpbWUoRGUpO3JldHVybiBGZT09MS8wP25ldyBEYXRlKGVlKTpGZT09LTEvMD9uZXcgRGF0ZSgwKTpuZXcgRGF0ZShGZSl9aXNQZXJzaXN0ZW50KCl7cmV0dXJuIG51bGwhPXRoaXMu'@;
put 'bWF4QWdlfHx0aGlzLmV4cGlyZXMhPTEvMH1jYW5vbmljYWxpemVkRG9tYWluKCl7cmV0dXJuIG51bGw9PXRoaXMuZG9tYWluP251bGw6eCh0aGlzLmRvbWFpbil9Y2RvbWFpbigpe3JldHVybiB0aGlzLmNhbm9uaWNhbGl6ZWREb21haW4oKX19ZnVuY3Rpb24gTWUoamUpe2lmKG51bGwhPWpl'@;
put 'KXtjb25zdCBEZT1qZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChEZSl7Y2FzZSBsZS5TVFJJQ1Q6Y2FzZSBsZS5TSUxFTlQ6Y2FzZSBsZS5ESVNBQkxFRDpyZXR1cm4gRGV9fXJldHVybiBsZS5TSUxFTlR9YXQuY29va2llc0NyZWF0ZWQ9MCxhdC5wYXJzZT1FLGF0LmZyb21KU09OPXRlLGF0LnNl'@;
put 'cmlhbGl6YWJsZVByb3BlcnRpZXM9T2JqZWN0LmtleXMoSmUpLGF0LnNhbWVTaXRlTGV2ZWw9e3N0cmljdDozLGxheDoyLG5vbmU6MX0sYXQuc2FtZVNpdGVDYW5vbmljYWw9e3N0cmljdDoiU3RyaWN0IixsYXg6IkxheCJ9O2NsYXNzIHZle2NvbnN0cnVjdG9yKERlLEZlPXtyZWplY3RQdWJs'@;
put 'aWNTdWZmaXhlczohMH0peyJib29sZWFuIj09dHlwZW9mIEZlJiYoRmU9e3JlamVjdFB1YmxpY1N1ZmZpeGVzOkZlfSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KEZlKSxGZSksdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcz1GZS5yZWplY3RQdWJsaWNTdWZmaXhlcyx0aGlzLmVuYWJsZUxvb3Nl'@;
put 'TW9kZT0hIUZlLmxvb3NlTW9kZSx0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbj0iYm9vbGVhbiIhPXR5cGVvZiBGZS5hbGxvd1NwZWNpYWxVc2VEb21haW58fEZlLmFsbG93U3BlY2lhbFVzZURvbWFpbix0aGlzLnN0b3JlPURlfHxuZXcgdyx0aGlzLnByZWZpeFNlY3VyaXR5PU1lKEZlLnBy'@;
put 'ZWZpeFNlY3VyaXR5KSx0aGlzLl9jbG9uZVN5bmM9WGUoImNsb25lIiksdGhpcy5faW1wb3J0Q29va2llc1N5bmM9WGUoIl9pbXBvcnRDb29raWVzIiksdGhpcy5nZXRDb29raWVzU3luYz1YZSgiZ2V0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llU3RyaW5nU3luYz1YZSgiZ2V0Q29va2llU3Ry'@;
put 'aW5nIiksdGhpcy5nZXRTZXRDb29raWVTdHJpbmdzU3luYz1YZSgiZ2V0U2V0Q29va2llU3RyaW5ncyIpLHRoaXMucmVtb3ZlQWxsQ29va2llc1N5bmM9WGUoInJlbW92ZUFsbENvb2tpZXMiKSx0aGlzLnNldENvb2tpZVN5bmM9WGUoInNldENvb2tpZSIpLHRoaXMuc2VyaWFsaXplU3luYz1Y'@;
put 'ZSgic2VyaWFsaXplIil9c2V0Q29va2llKERlLEZlLFJlLEllKXtsZXQgVmU7aWYoRi52YWxpZGF0ZShGLmlzTm9uRW1wdHlTdHJpbmcoRmUpLEllLFJlKSxGLmlzRnVuY3Rpb24oRmUpKXJldHVybihJZT1GZSkobmV3IEVycm9yKCJObyBVUkwgd2FzIHNwZWNpZmllZCIpKTtjb25zdCBrZT1V'@;
put 'ZShGZSk7aWYoRi5pc0Z1bmN0aW9uKFJlKSYmKEllPVJlLFJlPXt9KSxGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihJZSksSWUpLCFGLmlzTm9uRW1wdHlTdHJpbmcoRGUpJiYhRi5pc09iamVjdChEZSkmJkRlIGluc3RhbmNlb2YgU3RyaW5nJiYwPT1EZS5sZW5ndGgpcmV0dXJuIEllKG51bGwp'@;
put 'O2NvbnN0IEFlPXgoa2UuaG9zdG5hbWUpLF90PVJlLmxvb3NlfHx0aGlzLmVuYWJsZUxvb3NlTW9kZTtsZXQgbnQ9bnVsbDtpZihSZS5zYW1lU2l0ZUNvbnRleHQmJihudD1pZShSZS5zYW1lU2l0ZUNvbnRleHQpLCFudCkpcmV0dXJuIEllKG5ldyBFcnJvcihyZSkpO2lmKCJzdHJpbmciPT10'@;
put 'eXBlb2YgRGV8fERlIGluc3RhbmNlb2YgU3RyaW5nKXtpZighKERlPWF0LnBhcnNlKERlLHtsb29zZTpfdH0pKSlyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgZmFpbGVkIHRvIHBhcnNlIiksSWUoUmUuaWdub3JlRXJyb3I/bnVsbDpWZSl9ZWxzZSBpZighKERlIGluc3RhbmNlb2YgYXQp'@;
put 'KXJldHVybiBWZT1uZXcgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHRvIHNldENvb2tpZSBtdXN0IGJlIGEgQ29va2llIG9iamVjdCBvciBzdHJpbmciKSxJZShSZS5pZ25vcmVFcnJvcj9udWxsOlZlKTtjb25zdCBRZT1SZS5ub3d8fG5ldyBEYXRlO2lmKHRoaXMucmVqZWN0UHVibGljU3VmZml4'@;
put 'ZXMmJkRlLmRvbWFpbiYmbnVsbD09Zy5nZXRQdWJsaWNTdWZmaXgoRGUuY2RvbWFpbigpLHthbGxvd1NwZWNpYWxVc2VEb21haW46dGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4saWdub3JlRXJyb3I6UmUuaWdub3JlRXJyb3J9KSYmIVRlLnRlc3QoRGUuZG9tYWluKSlyZXR1cm4gVmU9bmV3'@;
put 'IEVycm9yKCJDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gYSBwdWJsaWMgc3VmZml4IiksSWUoUmUuaWdub3JlRXJyb3I/bnVsbDpWZSk7aWYoRGUuZG9tYWluKXtpZighQyhBZSxEZS5jZG9tYWluKCksITEpKXJldHVybiBWZT1uZXcgRXJyb3IoYENvb2tpZSBub3QgaW4gdGhpcyBob3N0J3Mg'@;
put 'ZG9tYWluLiBDb29raWU6JHtEZS5jZG9tYWluKCl9IFJlcXVlc3Q6JHtBZX1gKSxJZShSZS5pZ25vcmVFcnJvcj9udWxsOlZlKTtudWxsPT1EZS5ob3N0T25seSYmKERlLmhvc3RPbmx5PSExKX1lbHNlIERlLmhvc3RPbmx5PSEwLERlLmRvbWFpbj1BZTtpZigoIURlLnBhdGh8fCIvIiE9PURl'@;
put 'LnBhdGhbMF0pJiYoRGUucGF0aD1UKGtlLnBhdGhuYW1lKSxEZS5wYXRoSXNEZWZhdWx0PSEwKSwhMT09PVJlLmh0dHAmJkRlLmh0dHBPbmx5KXJldHVybiBWZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBIdHRwT25seSBhbmQgdGhpcyBpc24ndCBhbiBIVFRQIEFQSSIpLEllKFJlLmlnbm9yZUVy'@;
put 'cm9yP251bGw6VmUpO2lmKCJub25lIiE9PURlLnNhbWVTaXRlJiZ2b2lkIDAhPT1EZS5zYW1lU2l0ZSYmbnQmJiJub25lIj09PW50KXJldHVybiBWZT1uZXcgRXJyb3IoIkNvb2tpZSBpcyBTYW1lU2l0ZSBidXQgdGhpcyBpcyBhIGNyb3NzLW9yaWdpbiByZXF1ZXN0IiksSWUoUmUuaWdub3Jl'@;
put 'RXJyb3I/bnVsbDpWZSk7Y29uc3QgdW49dGhpcy5wcmVmaXhTZWN1cml0eT09PWxlLlNJTEVOVDtpZih0aGlzLnByZWZpeFNlY3VyaXR5IT09bGUuRElTQUJMRUQpe2xldCAkZSxpdD0hMTtpZihmdW5jdGlvbiBtKGplKXtyZXR1cm4gRi52YWxpZGF0ZShGLmlzT2JqZWN0KGplKSxqZSksIWpl'@;
put 'LmtleS5zdGFydHNXaXRoKCJfX1NlY3VyZS0iKXx8amUuc2VjdXJlfShEZSk/ZnVuY3Rpb24gQShqZSl7cmV0dXJuIEYudmFsaWRhdGUoRi5pc09iamVjdChqZSkpLCFqZS5rZXkuc3RhcnRzV2l0aCgiX19Ib3N0LSIpfHxqZS5zZWN1cmUmJmplLmhvc3RPbmx5JiZudWxsIT1qZS5wYXRoJiYi'@;
put 'LyI9PT1qZS5wYXRofShEZSl8fChpdD0hMCwkZT0iQ29va2llIGhhcyBfX0hvc3QgcHJlZml4IGJ1dCBlaXRoZXIgU2VjdXJlIG9yIEhvc3RPbmx5IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IG9yIFBhdGggaXMgbm90ICcvJyIpOihpdD0hMCwkZT0iQ29va2llIGhhcyBfX1NlY3VyZSBwcmVmaXgg'@;
put 'YnV0IFNlY3VyZSBhdHRyaWJ1dGUgaXMgbm90IHNldCIpLGl0KXJldHVybiBJZShSZS5pZ25vcmVFcnJvcnx8dW4/bnVsbDpuZXcgRXJyb3IoJGUpKX1jb25zdCBNdD10aGlzLnN0b3JlO010LnVwZGF0ZUNvb2tpZXx8KE10LnVwZGF0ZUNvb2tpZT1mdW5jdGlvbihpdCwkZSx0dCl7dGhpcy5w'@;
put 'dXRDb29raWUoJGUsdHQpfSksTXQuZmluZENvb2tpZShEZS5kb21haW4sRGUucGF0aCxEZS5rZXksZnVuY3Rpb24gRHQoaXQsJGUpe2lmKGl0KXJldHVybiBJZShpdCk7Y29uc3QgdHQ9ZnVuY3Rpb24oSGUpe2lmKEhlKXJldHVybiBJZShIZSk7SWUobnVsbCxEZSl9O2lmKCRlKXtpZighMT09'@;
put 'PVJlLmh0dHAmJiRlLmh0dHBPbmx5KXJldHVybiBpdD1uZXcgRXJyb3IoIm9sZCBDb29raWUgaXMgSHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxJZShSZS5pZ25vcmVFcnJvcj9udWxsOml0KTtEZS5jcmVhdGlvbj0kZS5jcmVhdGlvbixEZS5jcmVhdGlvbkluZGV4PSRl'@;
put 'LmNyZWF0aW9uSW5kZXgsRGUubGFzdEFjY2Vzc2VkPVFlLE10LnVwZGF0ZUNvb2tpZSgkZSxEZSx0dCl9ZWxzZSBEZS5jcmVhdGlvbj1EZS5sYXN0QWNjZXNzZWQ9UWUsTXQucHV0Q29va2llKERlLHR0KX0pfWdldENvb2tpZXMoRGUsRmUsUmUpe0YudmFsaWRhdGUoRi5pc05vbkVtcHR5U3Ry'@;
put 'aW5nKERlKSxSZSxEZSk7Y29uc3QgSWU9VWUoRGUpO0YuaXNGdW5jdGlvbihGZSkmJihSZT1GZSxGZT17fSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KEZlKSxSZSxGZSksRi52YWxpZGF0ZShGLmlzRnVuY3Rpb24oUmUpLFJlKTtjb25zdCBWZT14KEllLmhvc3RuYW1lKSxrZT1JZS5wYXRobmFt'@;
put 'ZXx8Ii8iO2xldCBBZT1GZS5zZWN1cmU7bnVsbD09QWUmJkllLnByb3RvY29sJiYoImh0dHBzOiI9PUllLnByb3RvY29sfHwid3NzOiI9PUllLnByb3RvY29sKSYmKEFlPSEwKTtsZXQgX3Q9MDtpZihGZS5zYW1lU2l0ZUNvbnRleHQpe2NvbnN0IGl0PWllKEZlLnNhbWVTaXRlQ29udGV4dCk7'@;
put 'aWYoX3Q9YXQuc2FtZVNpdGVMZXZlbFtpdF0sIV90KXJldHVybiBSZShuZXcgRXJyb3IocmUpKX1sZXQgbnQ9RmUuaHR0cDtudWxsPT1udCYmKG50PSEwKTtjb25zdCBRZT1GZS5ub3d8fERhdGUubm93KCksdW49ITEhPT1GZS5leHBpcmUseXQ9ISFGZS5hbGxQYXRocyxNdD10aGlzLnN0b3Jl'@;
put 'O2Z1bmN0aW9uIER0KGl0KXtpZihpdC5ob3N0T25seSl7aWYoaXQuZG9tYWluIT1WZSlyZXR1cm4hMX1lbHNlIGlmKCFDKFZlLGl0LmRvbWFpbiwhMSkpcmV0dXJuITE7cmV0dXJuISgheXQmJiFQKGtlLGl0LnBhdGgpfHxpdC5zZWN1cmUmJiFBZXx8aXQuaHR0cE9ubHkmJiFudHx8X3QmJmF0'@;
put 'LnNhbWVTaXRlTGV2ZWxbaXQuc2FtZVNpdGV8fCJub25lIl0+X3R8fHVuJiZpdC5leHBpcnlUaW1lKCk8PVFlJiYoTXQucmVtb3ZlQ29va2llKGl0LmRvbWFpbixpdC5wYXRoLGl0LmtleSwoKT0+e30pLDEpKX1NdC5maW5kQ29va2llcyhWZSx5dD9udWxsOmtlLHRoaXMuYWxsb3dTcGVjaWFs'@;
put 'VXNlRG9tYWluLChpdCwkZSk9PntpZihpdClyZXR1cm4gUmUoaXQpOyRlPSRlLmZpbHRlcihEdCksITEhPT1GZS5zb3J0JiYoJGU9JGUuc29ydChzZSkpO2NvbnN0IHR0PW5ldyBEYXRlO2Zvcihjb25zdCBIZSBvZiAkZSlIZS5sYXN0QWNjZXNzZWQ9dHQ7UmUobnVsbCwkZSl9KX1nZXRDb29r'@;
put 'aWVTdHJpbmcoLi4uRGUpe2NvbnN0IEZlPURlLnBvcCgpO0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKEZlKSxGZSksRGUucHVzaChmdW5jdGlvbihJZSxWZSl7SWU/RmUoSWUpOkZlKG51bGwsVmUuc29ydChzZSkubWFwKGtlPT5rZS5jb29raWVTdHJpbmcoKSkuam9pbigiOyAiKSl9KSx0aGlz'@;
put 'LmdldENvb2tpZXMuYXBwbHkodGhpcyxEZSl9Z2V0U2V0Q29va2llU3RyaW5ncyguLi5EZSl7Y29uc3QgRmU9RGUucG9wKCk7Ri52YWxpZGF0ZShGLmlzRnVuY3Rpb24oRmUpLEZlKSxEZS5wdXNoKGZ1bmN0aW9uKEllLFZlKXtJZT9GZShJZSk6RmUobnVsbCxWZS5tYXAoa2U9PmtlLnRvU3Ry'@;
put 'aW5nKCkpKX0pLHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLERlKX1zZXJpYWxpemUoRGUpe0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKERlKSxEZSk7bGV0IEZlPXRoaXMuc3RvcmUuY29uc3RydWN0b3IubmFtZTtGLmlzT2JqZWN0KEZlKSYmKEZlPW51bGwpO2NvbnN0IFJlPXt2ZXJzaW9u'@;
put 'OmB0b3VnaC1jb29raWVAJHtPfWAsc3RvcmVUeXBlOkZlLHJlamVjdFB1YmxpY1N1ZmZpeGVzOiEhdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyxlbmFibGVMb29zZU1vZGU6ISF0aGlzLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VEb21haW46ISF0aGlzLmFsbG93U3BlY2lhbFVz'@;
put 'ZURvbWFpbixwcmVmaXhTZWN1cml0eTpNZSh0aGlzLnByZWZpeFNlY3VyaXR5KSxjb29raWVzOltdfTtpZighdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKXJldHVybiBEZShuZXcgRXJyb3IoInN0b3JlIGRvZXMg'@;
put 'bm90IHN1cHBvcnQgZ2V0QWxsQ29va2llcyBhbmQgY2Fubm90IGJlIHNlcmlhbGl6ZWQiKSk7dGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKChJZSxWZSk9PkllP0RlKEllKTooUmUuY29va2llcz1WZS5tYXAoa2U9PihkZWxldGUoa2U9a2UgaW5zdGFuY2VvZiBhdD9rZS50b0pTT04oKTprZSku'@;
put 'Y3JlYXRpb25JbmRleCxrZSkpLERlKG51bGwsUmUpKSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplU3luYygpfV9pbXBvcnRDb29raWVzKERlLEZlKXtsZXQgUmU9RGUuY29va2llcztpZighUmV8fCFBcnJheS5pc0FycmF5KFJlKSlyZXR1cm4gRmUobmV3IEVycm9yKCJzZXJpYWxp'@;
put 'emVkIGphciBoYXMgbm8gY29va2llcyBhcnJheSIpKTtSZT1SZS5zbGljZSgpO2NvbnN0IEllPVZlPT57aWYoVmUpcmV0dXJuIEZlKFZlKTtpZighUmUubGVuZ3RoKXJldHVybiBGZShWZSx0aGlzKTtsZXQga2U7dHJ5e2tlPXRlKFJlLnNoaWZ0KCkpfWNhdGNoKEFlKXtyZXR1cm4gRmUoQWUp'@;
put 'fWlmKG51bGw9PT1rZSlyZXR1cm4gSWUobnVsbCk7dGhpcy5zdG9yZS5wdXRDb29raWUoa2UsSWUpfTtJZSgpfWNsb25lKERlLEZlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKEZlPURlLERlPW51bGwpLHRoaXMuc2VyaWFsaXplKChSZSxJZSk9PntpZihSZSlyZXR1cm4gRmUoUmUpO3ZlLmRl'@;
put 'c2VyaWFsaXplKEllLERlLEZlKX0pfWNsb25lU3luYyhEZSl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2Nsb25lU3luYygpO2lmKCFEZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBjbG9uZSBkZXN0aW5hdGlvbiBzdG9yZSBpcyBub3Qgc3lu'@;
put 'Y2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKERlKX1yZW1vdmVBbGxDb29raWVzKERlKXtGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihEZSksRGUpO2NvbnN0IEZlPXRoaXMuc3RvcmU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEZlLnJlbW92'@;
put 'ZUFsbENvb2tpZXMmJkZlLnJlbW92ZUFsbENvb2tpZXMhPT1CLnByb3RvdHlwZS5yZW1vdmVBbGxDb29raWVzKXJldHVybiBGZS5yZW1vdmVBbGxDb29raWVzKERlKTtGZS5nZXRBbGxDb29raWVzKChSZSxJZSk9PntpZihSZSlyZXR1cm4gRGUoUmUpO2lmKDA9PT1JZS5sZW5ndGgpcmV0dXJu'@;
put 'IERlKG51bGwpO2xldCBWZT0wO2NvbnN0IGtlPVtdO2Z1bmN0aW9uIEFlKF90KXtpZihfdCYma2UucHVzaChfdCksVmUrKyxWZT09PUllLmxlbmd0aClyZXR1cm4gRGUoa2UubGVuZ3RoP2tlWzBdOm51bGwpfUllLmZvckVhY2goX3Q9PntGZS5yZW1vdmVDb29raWUoX3QuZG9tYWluLF90LnBh'@;
put 'dGgsX3Qua2V5LEFlKX0pfSl9c3RhdGljIGRlc2VyaWFsaXplKERlLEZlLFJlKXtsZXQgSWU7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgmJihSZT1GZSxGZT1udWxsKSxGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihSZSksUmUpLCJzdHJpbmciPT10eXBlb2YgRGUpe2lmKEllPW9lKERlKSxJZSBp'@;
put 'bnN0YW5jZW9mIEVycm9yKXJldHVybiBSZShJZSl9ZWxzZSBJZT1EZTtjb25zdCBWZT1uZXcgdmUoRmUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOkllLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpJZS5lbmFibGVMb29zZU1vZGUsYWxsb3dTcGVjaWFsVXNlRG9tYWluOkllLmFsbG93'@;
put 'U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpJZS5wcmVmaXhTZWN1cml0eX0pO1ZlLl9pbXBvcnRDb29raWVzKEllLGtlPT57aWYoa2UpcmV0dXJuIFJlKGtlKTtSZShudWxsLFZlKX0pfXN0YXRpYyBkZXNlcmlhbGl6ZVN5bmMoRGUsRmUpe2NvbnN0IFJlPSJzdHJpbmciPT10eXBl'@;
put 'b2YgRGU/SlNPTi5wYXJzZShEZSk6RGUsSWU9bmV3IHZlKEZlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpSZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6UmUuZW5hYmxlTG9vc2VNb2RlfSk7aWYoIUllLnN0b3JlLnN5bmNocm9ub3VzKXRocm93IG5ldyBFcnJvcigiQ29va2llSmFy'@;
put 'IHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiBJZS5faW1wb3J0Q29va2llc1N5bmMoUmUpLEllfX1mdW5jdGlvbiBYZShqZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLkRlKXtpZighdGhpcy5zdG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcg'@;
put 'RXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtsZXQgRmUsUmU7aWYodGhpc1tqZV0oLi4uRGUsKEllLFZlKT0+e0ZlPUllLFJlPVZlfSksRmUpdGhyb3cgRmU7cmV0dXJuIFJlfX12ZS5mcm9tSlNPTj12ZS5kZXNlcmlh'@;
put 'bGl6ZVN5bmMsWyJfaW1wb3J0Q29va2llcyIsImNsb25lIiwiZ2V0Q29va2llcyIsImdldENvb2tpZVN0cmluZyIsImdldFNldENvb2tpZVN0cmluZ3MiLCJyZW1vdmVBbGxDb29raWVzIiwic2VyaWFsaXplIiwic2V0Q29va2llIl0uZm9yRWFjaChqZT0+e3ZlLnByb3RvdHlwZVtqZV09eih2'@;
put 'ZS5wcm90b3R5cGVbamVdKX0pLHZlLmRlc2VyaWFsaXplPXoodmUuZGVzZXJpYWxpemUpLHEudmVyc2lvbj1PLHEuQ29va2llSmFyPXZlLHEuQ29va2llPWF0LHEuU3RvcmU9QixxLk1lbW9yeUNvb2tpZVN0b3JlPXcscS5wYXJzZURhdGU9cCxxLmZvcm1hdERhdGU9YixxLnBhcnNlPUUscS5m'@;
put 'cm9tSlNPTj10ZSxxLmRvbWFpbk1hdGNoPUMscS5kZWZhdWx0UGF0aD1ULHEucGF0aE1hdGNoPVAscS5nZXRQdWJsaWNTdWZmaXg9Zy5nZXRQdWJsaWNTdWZmaXgscS5jb29raWVDb21wYXJlPXNlLHEucGVybXV0ZURvbWFpbj1fKDczMjQpLnBlcm11dGVEb21haW4scS5wZXJtdXRlUGF0aD1m'@;
put 'dW5jdGlvbiB3ZShqZSl7aWYoRi52YWxpZGF0ZShGLmlzU3RyaW5nKGplKSksIi8iPT09amUpcmV0dXJuWyIvIl07Y29uc3QgRGU9W2plXTtmb3IoO2plLmxlbmd0aD4xOyl7Y29uc3QgRmU9amUubGFzdEluZGV4T2YoIi8iKTtpZigwPT09RmUpYnJlYWs7amU9amUuc3Vic3RyKDAsRmUpLERl'@;
put 'LnB1c2goamUpfXJldHVybiBEZS5wdXNoKCIvIiksRGV9LHEuY2Fub25pY2FsRG9tYWluPXgscS5QcmVmaXhTZWN1cml0eUVudW09bGUscS5QYXJhbWV0ZXJFcnJvcj1GLlBhcmFtZXRlckVycm9yfSw1NzYxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0e2Zyb21DYWxsYmFjazp5fT1f'@;
put 'KDcwNDEpLGc9XygyMjI0KS55LEI9Xyg3MzI0KS5wZXJtdXRlRG9tYWluLHc9Xyg4OTcxKS5VLHtnZXRDdXN0b21JbnNwZWN0U3ltYm9sOlAsZ2V0VXRpbEluc3BlY3Q6Rn09XygxMjY5KTtjbGFzcyBPIGV4dGVuZHMgZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5zeW5jaHJvbm91cz0h'@;
put 'MCx0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51bGwpO2NvbnN0IFU9UCgpO1UmJih0aGlzW1VdPXRoaXMuaW5zcGVjdCl9aW5zcGVjdCgpe3JldHVybmB7IGlkeDogJHtGKHopKHRoaXMuaWR4LCExLDIpfSB9YH1maW5kQ29va2llKFUsVyxZLFgpe3JldHVybiBYKG51bGwsdGhpcy5pZHhbVV0m'@;
put 'JnRoaXMuaWR4W1VdW1ddP3RoaXMuaWR4W1VdW1ddW1ldfHxudWxsOnZvaWQgMCl9ZmluZENvb2tpZXMoVSxXLFksWCl7Y29uc3QgZWU9W107aWYoImZ1bmN0aW9uIj09dHlwZW9mIFkmJihYPVksWT0hMCksIVUpcmV0dXJuIFgobnVsbCxbXSk7bGV0IEo7Sj1XP2Z1bmN0aW9uKG1lKXtPYmpl'@;
put 'Y3Qua2V5cyhtZSkuZm9yRWFjaChfZT0+e2lmKHcoVyxfZSkpe2NvbnN0IFRlPW1lW19lXTtmb3IoY29uc3QgU2UgaW4gVGUpZWUucHVzaChUZVtTZV0pfX0pfTpmdW5jdGlvbihtZSl7Zm9yKGNvbnN0IF9lIGluIG1lKXtjb25zdCBUZT1tZVtfZV07Zm9yKGNvbnN0IFNlIGluIFRlKWVlLnB1'@;
put 'c2goVGVbU2VdKX19O2NvbnN0IHJlPUIoVSxZKXx8W1VdLGllPXRoaXMuaWR4O3JlLmZvckVhY2gobGU9Pntjb25zdCBtZT1pZVtsZV07bWUmJkoobWUpfSksWChudWxsLGVlKX1wdXRDb29raWUoVSxXKXt0aGlzLmlkeFtVLmRvbWFpbl18fCh0aGlzLmlkeFtVLmRvbWFpbl09T2JqZWN0LmNy'@;
put 'ZWF0ZShudWxsKSksdGhpcy5pZHhbVS5kb21haW5dW1UucGF0aF18fCh0aGlzLmlkeFtVLmRvbWFpbl1bVS5wYXRoXT1PYmplY3QuY3JlYXRlKG51bGwpKSx0aGlzLmlkeFtVLmRvbWFpbl1bVS5wYXRoXVtVLmtleV09VSxXKG51bGwpfXVwZGF0ZUNvb2tpZShVLFcsWSl7dGhpcy5wdXRDb29r'@;
put 'aWUoVyxZKX1yZW1vdmVDb29raWUoVSxXLFksWCl7dGhpcy5pZHhbVV0mJnRoaXMuaWR4W1VdW1ddJiZ0aGlzLmlkeFtVXVtXXVtZXSYmZGVsZXRlIHRoaXMuaWR4W1VdW1ddW1ldLFgobnVsbCl9cmVtb3ZlQ29va2llcyhVLFcsWSl7cmV0dXJuIHRoaXMuaWR4W1VdJiYoVz9kZWxldGUgdGhp'@;
put 'cy5pZHhbVV1bV106ZGVsZXRlIHRoaXMuaWR4W1VdKSxZKG51bGwpfXJlbW92ZUFsbENvb2tpZXMoVSl7cmV0dXJuIHRoaXMuaWR4PU9iamVjdC5jcmVhdGUobnVsbCksVShudWxsKX1nZXRBbGxDb29raWVzKFUpe2NvbnN0IFc9W10sWT10aGlzLmlkeDtPYmplY3Qua2V5cyhZKS5mb3JFYWNo'@;
put 'KGVlPT57T2JqZWN0LmtleXMoWVtlZV0pLmZvckVhY2gocmU9PntPYmplY3Qua2V5cyhZW2VlXVtyZV0pLmZvckVhY2gobGU9PntudWxsIT09bGUmJlcucHVzaChZW2VlXVtyZV1bbGVdKX0pfSl9KSxXLnNvcnQoKGVlLEopPT4oZWUuY3JlYXRpb25JbmRleHx8MCktKEouY3JlYXRpb25JbmRl'@;
put 'eHx8MCkpLFUobnVsbCxXKX19ZnVuY3Rpb24geihLKXtjb25zdCBVPU9iamVjdC5rZXlzKEspO2lmKDA9PT1VLmxlbmd0aClyZXR1cm4iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHt9IjtsZXQgVz0iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbiI7cmV0dXJuIE9iamVjdC5rZXlzKEsp'@;
put 'LmZvckVhY2goKFksWCk9PntXKz1mdW5jdGlvbiBOKEssVSl7bGV0IFk9YCAgJyR7S30nOiBbT2JqZWN0OiBudWxsIHByb3RvdHlwZV0ge1xuYDtyZXR1cm4gT2JqZWN0LmtleXMoVSkuZm9yRWFjaCgoWCxlZSxKKT0+e1krPWZ1bmN0aW9uIEwoSyxVKXtjb25zdCBXPSIgICAgIjtsZXQgWT1g'@;
put 'JHtXfScke0t9JzogW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKFUpLmZvckVhY2goKFgsZWUsSik9PntZKz1gICAgICAgJHtYfTogJHtVW1hdLmluc3BlY3QoKX1gLGVlPEoubGVuZ3RoLTEmJihZKz0iLCIpLFkrPSJcbiJ9KSxZKz1gJHtXfX1gLFl9'@;
put 'KFgsVVtYXSksZWU8Si5sZW5ndGgtMSYmKFkrPSIsIiksWSs9IlxuIn0pLFkrPSIgIH0iLFl9KFksS1tZXSksWDxVLmxlbmd0aC0xJiYoVys9IiwiKSxXKz0iXG4ifSksVys9In0iLFd9WyJmaW5kQ29va2llIiwiZmluZENvb2tpZXMiLCJwdXRDb29raWUiLCJ1cGRhdGVDb29raWUiLCJyZW1v'@;
put 'dmVDb29raWUiLCJyZW1vdmVDb29raWVzIiwicmVtb3ZlQWxsQ29va2llcyIsImdldEFsbENvb2tpZXMiXS5mb3JFYWNoKEs9PntPLnByb3RvdHlwZVtLXT15KE8ucHJvdG90eXBlW0tdKX0pLHEubT1PfSw4OTcxOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtxLlU9ZnVuY3Rpb24gXyhJLHkpe3Jl'@;
put 'dHVybiB5PT09SXx8MD09PUkuaW5kZXhPZih5KSYmKCIvIj09PXkuc3Vic3RyKC0xKXx8Ii8iPT09SS5zdWJzdHIoeS5sZW5ndGgsMSkpfX0sNzMyNDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPV8oNzUyKTtxLnBlcm11dGVEb21haW49ZnVuY3Rpb24geShnLEIpe2NvbnN0IHc9'@;
put 'SS5nZXRQdWJsaWNTdWZmaXgoZyx7YWxsb3dTcGVjaWFsVXNlRG9tYWluOkJ9KTtpZighdylyZXR1cm4gbnVsbDtpZih3PT1nKXJldHVybltnXTsiLiI9PWcuc2xpY2UoLTEpJiYoZz1nLnNsaWNlKDAsLTEpKTtjb25zdCBGPWcuc2xpY2UoMCwtKHcubGVuZ3RoKzEpKS5zcGxpdCgiLiIpLnJl'@;
put 'dmVyc2UoKTtsZXQgTz13O2NvbnN0IHo9W09dO2Zvcig7Ri5sZW5ndGg7KU89YCR7Ri5zaGlmdCgpfS4ke099YCx6LnB1c2goTyk7cmV0dXJuIHp9fSw3NTI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDg1NjYpLHk9WyJsb2NhbCIsImV4YW1wbGUiLCJpbnZhbGlkIiwibG9j'@;
put 'YWxob3N0IiwidGVzdCJdLGc9WyJsb2NhbGhvc3QiLCJpbnZhbGlkIl07cS5nZXRQdWJsaWNTdWZmaXg9ZnVuY3Rpb24gQih3LFA9e30pe2NvbnN0IEY9dy5zcGxpdCgiLiIpLE89RltGLmxlbmd0aC0xXSxOPSEhUC5pZ25vcmVFcnJvcjtpZihQLmFsbG93U3BlY2lhbFVzZURvbWFpbiYmeS5p'@;
put 'bmNsdWRlcyhPKSl7aWYoRi5sZW5ndGg+MSlyZXR1cm5gJHtGW0YubGVuZ3RoLTJdfS4ke099YDtpZihnLmluY2x1ZGVzKE8pKXJldHVybmAke099YH1pZighTiYmeS5pbmNsdWRlcyhPKSl0aHJvdyBuZXcgRXJyb3IoYENvb2tpZSBoYXMgZG9tYWluIHNldCB0byB0aGUgcHVibGljIHN1ZmZp'@;
put 'eCAiJHtPfSIgd2hpY2ggaXMgYSBzcGVjaWFsIHVzZSBkb21haW4uIFRvIGFsbG93IHRoaXMsIGNvbmZpZ3VyZSB5b3VyIENvb2tpZUphciB3aXRoIHthbGxvd1NwZWNpYWxVc2VEb21haW46dHJ1ZSwgcmVqZWN0UHVibGljU3VmZml4ZXM6IGZhbHNlfS5gKTtyZXR1cm4gSS5nZXQodyl9fSwy'@;
put 'MjI0Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtxLnk9Y2xhc3MgX3tjb25zdHJ1Y3Rvcigpe3RoaXMuc3luY2hyb25vdXM9ITF9ZmluZENvb2tpZSh5LGcsQix3KXt0aHJvdyBuZXcgRXJyb3IoImZpbmRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9ZmluZENvb2tpZXMoeSxnLEIsdyl7dGhy'@;
put 'b3cgbmV3IEVycm9yKCJmaW5kQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1wdXRDb29raWUoeSxnKXt0aHJvdyBuZXcgRXJyb3IoInB1dENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX11cGRhdGVDb29raWUoeSxnLEIpe3Rocm93IG5ldyBFcnJvcigidXBkYXRlQ29va2llIGlzIG5v'@;
put 'dCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tpZSh5LGcsQix3KXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWVzKHksZyxCKXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUNvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9cmVt'@;
put 'b3ZlQWxsQ29va2llcyh5KXt0aHJvdyBuZXcgRXJyb3IoInJlbW92ZUFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9Z2V0QWxsQ29va2llcyh5KXt0aHJvdyBuZXcgRXJyb3IoImdldEFsbENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkICh0aGVyZWZvcmUgamFyIGNhbm5vdCBiZSBz'@;
put 'ZXJpYWxpemVkKSIpfX19LDEyNjk6KHVlLHEsXyk9PntmdW5jdGlvbiBJKCl7dHJ5e3JldHVybiBfKDk1MzkpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiB5KCl7cmV0dXJuIFN5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIil9cS5nZXRVdGlsSW5zcGVjdD1mdW5j'@;
put 'dGlvbih3LFA9e30pe2NvbnN0IE89KFAucmVxdWlyZVV0aWx8fEkpKCk7cmV0dXJuIGZ1bmN0aW9uKE4sTCxLKXtyZXR1cm4gTz9PLmluc3BlY3QoTixMLEspOncoTil9fSxxLmdldEN1c3RvbUluc3BlY3RTeW1ib2w9ZnVuY3Rpb24odz17fSl7cmV0dXJuKHcubG9va3VwQ3VzdG9tSW5zcGVj'@;
put 'dFN5bWJvbHx8eSkoKXx8ZnVuY3Rpb24gZyhCKXtjb25zdCBQPShCLnJlcXVpcmVVdGlsfHxJKSgpO3JldHVybiBQP1AuaW5zcGVjdC5jdXN0b206bnVsbH0odyl9fSw3NjUyOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKE4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBOfWZ1'@;
put 'bmN0aW9uIEIoTil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBOfHxOIGluc3RhbmNlb2YgU3RyaW5nfWZ1bmN0aW9uIHcoTil7cmV0dXJuIltvYmplY3QgT2JqZWN0XSI9PT10b1N0cmluZy5jYWxsKE4pfWNsYXNzIHogZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvciguLi5MKXtzdXBlciguLi5M'@;
put 'KX19cS5QYXJhbWV0ZXJFcnJvcj16LHEuaXNGdW5jdGlvbj1fLHEuaXNOb25FbXB0eVN0cmluZz1mdW5jdGlvbiBJKE4pe3JldHVybiBCKE4pJiYiIiE9PU59LHEuaXNEYXRlPWZ1bmN0aW9uIHkoTil7cmV0dXJuIGZ1bmN0aW9uIFAoTixMKXt0cnl7cmV0dXJuIE4gaW5zdGFuY2VvZiBMfWNh'@;
put 'dGNoe3JldHVybiExfX0oTixEYXRlKSYmZnVuY3Rpb24gRihOKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIE4mJk4lMT09MH0oTi5nZXRUaW1lKCkpfSxxLmlzRW1wdHlTdHJpbmc9ZnVuY3Rpb24gZyhOKXtyZXR1cm4iIj09PU58fE4gaW5zdGFuY2VvZiBTdHJpbmcmJiIiPT09Ti50b1N0cmlu'@;
put 'ZygpfSxxLmlzU3RyaW5nPUIscS5pc09iamVjdD13LHEudmFsaWRhdGU9ZnVuY3Rpb24gTyhOLEwsSyl7aWYoXyhMKXx8KEs9TCxMPW51bGwpLHcoSyl8fChLPXtFcnJvcjoiRmFpbGVkIENoZWNrIn0pLCFOKXtpZighTCl0aHJvdyBuZXcgeihLKTtMKG5ldyB6KEspKX19fSw0NTY6dWU9Pnt1'@;
put 'ZS5leHBvcnRzPSI0LjEuMyJ9LDcwNDE6KHVlLHEpPT57InVzZSBzdHJpY3QiO3EuZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKF8pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0p'@;
put 'cmV0dXJuIG5ldyBQcm9taXNlKChJLHkpPT57YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGhdPShnLEIpPT57aWYoZylyZXR1cm4geShnKTtJKEIpfSxhcmd1bWVudHMubGVuZ3RoKyssXy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtfLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sIm5hbWUiLHt2'@;
put 'YWx1ZTpfLm5hbWV9KX0scS5mcm9tUHJvbWlzZT1mdW5jdGlvbihfKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7Y29uc3QgST1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSSlyZXR1cm4gXy5hcHBseSh0aGlzLGFy'@;
put 'Z3VtZW50cyk7ZGVsZXRlIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdLGFyZ3VtZW50cy5sZW5ndGgtLSxfLmFwcGx5KHRoaXMsYXJndW1lbnRzKS50aGVuKHk9PkkobnVsbCx5KSxJKX0sIm5hbWUiLHt2YWx1ZTpfLm5hbWV9KX19LDY3MjpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsTyl7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixMKXtmdW5jdGlvbiBLKFkpe3RyeXtXKE8ubmV4dChZKSl9Y2F0Y2goWCl7TChYKX19ZnVuY3Rpb24gVShZKXt0cnl7VyhPLnRocm93'@;
put 'KFkpKX1jYXRjaChYKXtMKFgpfX1mdW5jdGlvbiBXKFkpe1kuZG9uZT9OKFkudmFsdWUpOmZ1bmN0aW9uIHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTCl7TChOKX0pfShZLnZhbHVlKS50aGVuKEssVSl9VygoTz1PLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkp'@;
put 'fSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkNvbnRleHRNYW5hZ2VyPXZvaWQgMDtjb25zdCB5PV8oNTkyOCksZz1fKDk3NzgpO3EuQ29udGV4dE1hbmFnZXI9Y2xhc3MgQntnZXQgZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVy'@;
put 'biB0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHN9Z2V0IGdldERlZmF1bHRMYXVuY2hlckNvbnRleHRzKCl7cmV0dXJuIHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHN9Y29uc3RydWN0b3IoUCxGKXt0aGlzLnNlcnZlclVybD1QLHRoaXMucmVxdWVzdENsaWVudD1GLHRoaXMuZGVmYXVs'@;
put 'dENvbXB1dGVDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiRGF0YSBNaW5pbmcgY29tcHV0ZSBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBjb21wdXRlIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLCJTQVMgTW9k'@;
put 'ZWwgTWFuYWdlciBjb21wdXRlIGNvbnRleHQiLCJTQVMgU3R1ZGlvIGNvbXB1dGUgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgY29tcHV0ZSBjb250ZXh0Il0sdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cz1bIkNBUyBGb3JtYXRzIHNlcnZpY2UgbGF1bmNoZXIgY29udGV4'@;
put 'dCIsIkRhdGEgTWluaW5nIGxhdW5jaGVyIGNvbnRleHQiLCJJbXBvcnQgOSBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJKb2IgRmxvdyBFeGVjdXRpb24gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBKb2IgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgTW9kZWwgTWFuYWdlciBs'@;
put 'YXVuY2hlciBjb250ZXh0IiwiU0FTIFN0dWRpbyBsYXVuY2hlciBjb250ZXh0IiwiU0FTIFZpc3VhbCBGb3JlY2FzdGluZyBsYXVuY2hlciBjb250ZXh0Il0sUCYmKDAseS5pc1VybCkoUCl9Z2V0Q29tcHV0ZUNvbnRleHRzKFApe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'biooKXtjb25zdHtyZXN1bHQ6Rn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGAsUCkuY2F0Y2goej0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1'@;
put 'dGUgY29udGV4dHMuICIpfSk7cmV0dXJuKEYmJkYuaXRlbXM/Ri5pdGVtczpbXSkubWFwKHo9Pih7Y3JlYXRlZEJ5OnouY3JlYXRlZEJ5LGlkOnouaWQsbmFtZTp6Lm5hbWUsdmVyc2lvbjp6LnZlcnNpb24sYXR0cmlidXRlczp7fX0pKX0pfWdldExhdW5jaGVyQ29udGV4dHMoUCl7cmV0dXJu'@;
put 'IEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpGfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9sYXVuY2hlci9jb250ZXh0cz9saW1pdD0xMDAwMGAsUCkuY2F0Y2goej0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdl'@;
put 'KSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGxhdW5jaGVyIGNvbnRleHRzLiAiKX0pO3JldHVybihGJiZGLml0ZW1zP0YuaXRlbXM6W10pLm1hcCh6PT4oe2NyZWF0ZWRCeTp6LmNyZWF0ZWRCeSxpZDp6LmlkLG5hbWU6ei5uYW1lLHZlcnNpb246ei52ZXJzaW9uLGF0dHJpYnV0ZXM6e319KSl9'@;
put 'KX1jcmVhdGVDb21wdXRlQ29udGV4dChQLEYsTyx6LE4sTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMudmFsaWRhdGVDb250ZXh0TmFtZShQKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsYENvbXB1'@;
put 'dGUgY29udGV4dCAnJHtQfScgYWxyZWFkeSBleGlzdHMuYCksKHlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRzKE4pKS5maW5kKGVlPT5lZS5uYW1lPT09UCkpdGhyb3cgbmV3IEVycm9yKGBDb21wdXRlIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApO2lmKEYmJiF0aGlzLmRl'@;
put 'ZmF1bHRMYXVuY2hlckNvbnRleHRzLmluY2x1ZGVzKEYpJiYhKHlpZWxkIHRoaXMuZ2V0TGF1bmNoZXJDb250ZXh0cyhOKSkuZmluZChKPT5KLm5hbWU9PT1GKSl7Y29uc3QgSj1gVGhlIGxhdW5jaGVyIGNvbnRleHQgZm9yICR7Rn1gLGllPXlpZWxkIHRoaXMuY3JlYXRlTGF1bmNoZXJDb250'@;
put 'ZXh0KEYsSiwiZGlyZWN0IixOKS5jYXRjaChsZT0+e3Rocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4gJHtsZX1gKX0pO2lmKCFpZXx8IWllLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250'@;
put 'ZXh0LiIpO0Y9aWUubmFtZX1sZXQgVz17cmV1c2VTZXJ2ZXJQcm9jZXNzZXM6ITB9O08mJihXPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxXKSx7cnVuU2VydmVyQXM6T30pKTtjb25zdCBZPXtuYW1lOlAsbGF1bmNoQ29udGV4dDp7Y29udGV4dE5hbWU6Rnx8IiJ9LGF0dHJpYnV0'@;
put 'ZXM6V307TCYmTC5sZW5ndGg/WS5hdXRob3JpemVkVXNlcnM9TDpZLmF1dGhvcml6ZUFsbEF1dGhlbnRpY2F0ZWRVc2Vycz0hMCx6JiYoWS5lbnZpcm9ubWVudD17YXV0b0V4ZWNMaW5lczp6fSk7Y29uc3R7cmVzdWx0Olh9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMu'@;
put 'c2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzYCxZLE4pLmNhdGNoKGVlPT57dGhyb3coMCxnLnByZWZpeE1lc3NhZ2UpKGVlLCJFcnJvciB3aGlsZSBjcmVhdGluZyBjb21wdXRlIGNvbnRleHQuICIpfSk7cmV0dXJuIFh9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoUCxGLE89ImRpcmVjdCIs'@;
put 'eil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFQKXRocm93IG5ldyBFcnJvcigiQ29udGV4dCBuYW1lIGlzIHJlcXVpcmVkLiIpO2lmKHRoaXMuaXNEZWZhdWx0Q29udGV4dChQLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMsYExhdW5jaGVyIGNvbnRl'@;
put 'eHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApLCh5aWVsZCB0aGlzLmdldExhdW5jaGVyQ29udGV4dHMoeikpLmZpbmQoVz0+Vy5uYW1lPT09UCkpdGhyb3cgbmV3IEVycm9yKGBMYXVuY2hlciBjb250ZXh0ICcke1B9JyBhbHJlYWR5IGV4aXN0cy5gKTtjb25zdCBLPXtuYW1lOlAsZGVzY3Jp'@;
put 'cHRpb246RixsYXVuY2hUeXBlOk99LHtyZXN1bHQ6VX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2xhdW5jaGVyL2NvbnRleHRzYCxLLHopLmNhdGNoKFc9Pnt0aHJvdygwLGcucHJlZml4TWVzc2FnZSkoVywiRXJyb3Igd2hpbGUgY3JlYXRpbmcg'@;
put 'bGF1bmNoZXIgY29udGV4dC4gIil9KTtyZXR1cm4gVX0pfWVkaXRDb21wdXRlQ29udGV4dChQLEYsTyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB6O3RoaXMudmFsaWRhdGVDb250ZXh0TmFtZShQKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0aGlzLmRl'@;
put 'ZmF1bHRDb21wdXRlQ29udGV4dHMsIkVkaXRpbmcgZGVmYXVsdCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKSx6PXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoUCxPKSx6fHwoej15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlJZChGLmlk'@;
put 'LE8pKTtjb25zdHtyZXN1bHQ6TixldGFnOkx9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHMvJHt6LmlkfWAsTykuY2F0Y2goSz0+e3Rocm93IEsmJjQwND09PUsuc3RhdHVzP25ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7'@;
put 'UH0nIHdhcyBub3QgZm91bmQgb24gdGhpcyBzZXJ2ZXIuYCk6S30pO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucHV0KGAvY29tcHV0ZS9jb250ZXh0cy8ke04uaWR9YCxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxOKSxGKSx7YXR0cmlidXRl'@;
put 'czpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sTi5hdHRyaWJ1dGVzKSxGLmF0dHJpYnV0ZXMpfSksTyx7IklmLU1hdGNoIjpMfSl9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6'@;
put 'T309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9maWx0ZXI9ZXEobmFtZSwgIiR7UH0iKWAsRikuY2F0Y2goej0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29u'@;
put 'dGV4dCBieSBuYW1lLiAiKX0pO2lmKCFPfHwhTy5pdGVtc3x8IU8uaXRlbXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7UH0nIHdhcyBub3QgZm91bmQgYXQgJyR7dGhpcy5zZXJ2ZXJVcmx9Jy5gKTtyZXR1cm4gTy5pdGVtc1swXX0pfWdldENvbXB1dGVDb250ZXh0'@;
put 'QnlJZChQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6T309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke1B9YCxGKS5jYXRjaCh6PT57dGhyb3coMCxnLnByZWZp'@;
put 'eE1lc3NhZ2UpKHosIkVycm9yIHdoaWxlIGdldHRpbmcgY29tcHV0ZSBjb250ZXh0IGJ5IGlkLiAiKX0pO3JldHVybiBPfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpPfT15aWVsZCB0aGlz'@;
put 'LnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwYCxGPy5hY2Nlc3NfdG9rZW4pLmNhdGNoKFU9Pnt0aHJvdygwLGcucHJlZml4TWVzc2FnZSkoVSwiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgY29tcHV0ZSBjb250ZXh0cy4iKX0p'@;
put 'LHo9Ty5pdGVtc3x8W10sTj1bXSxMPXoubWFwKFU9Pntjb25zdCBXPVsiJXB1dCAmPXN5c3VzZXJpZDsiXTtyZXR1cm4oKT0+UChgdGVzdC0ke1UubmFtZX1gLFcsVS5uYW1lLEYsbnVsbCwhMSwhMCwhMCkuY2F0Y2goWT0+WSl9KTtsZXQgSz1bXTtmb3IoY29uc3QgVSBvZiBMKUsucHVzaCh5'@;
put 'aWVsZCBVKCkpO3JldHVybiBLLmZvckVhY2goKFUsVyk9PntpZihVJiZVLmxvZyl0cnl7bGV0IFg9IiI7Y29uc3QgZWU9VS5sb2cuc3BsaXQoIlxuIikuZmluZChKPT5KLnN0YXJ0c1dpdGgoIlNZU1VTRVJJRD0iKSk7ZWUmJihYPWVlLnJlcGxhY2UoIlNZU1VTRVJJRD0iLCIiKSxOLnB1c2go'@;
put 'e2NyZWF0ZWRCeTp6W1ddLmNyZWF0ZWRCeSxpZDp6W1ddLmlkLG5hbWU6eltXXS5uYW1lLHZlcnNpb246eltXXS52ZXJzaW9uLGF0dHJpYnV0ZXM6e3N5c1VzZXJJZDpYfX0pKX1jYXRjaChZKXt0aHJvdyBZfX0pLE59KX1kZWxldGVDb21wdXRlQ29udGV4dChQLEYpe3JldHVybiBJKHRoaXMs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoUCksdGhpcy5pc0RlZmF1bHRDb250ZXh0KFAsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJEZWxldGluZyBkZWZhdWx0IFNBUyBjb21wdXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITAp'@;
put 'O2NvbnN0IHo9eWllbGQgdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShQLEYpO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7ei5pZH1gLEYpfSl9dmFsaWRhdGVDb250ZXh0TmFtZShQKXtpZigh'@;
put 'UCl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKX1pc0RlZmF1bHRDb250ZXh0KFAsRj10aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsTz0iIix6PSExKXtpZihGLmluY2x1ZGVzKFApKXRocm93IG5ldyBFcnJvcihgJHtPfSR7ej8iXG5EZWZhdWx0IGNvbnRl'@;
put 'eHRzOiIrRi5tYXAoKE4sTCk9PmBcbiR7TCsxfS4gJHtOfWApOiIifWApfX19LDgzMDY6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHosTixMLEspe3JldHVybiBuZXcoTHx8KEw9UHJvbWlzZSkpKGZ1bmN0aW9uKFcs'@;
put 'WSl7ZnVuY3Rpb24gWChyZSl7dHJ5e0ooSy5uZXh0KHJlKSl9Y2F0Y2goaWUpe1koaWUpfX1mdW5jdGlvbiBlZShyZSl7dHJ5e0ooSy50aHJvdyhyZSkpfWNhdGNoKGllKXtZKGllKX19ZnVuY3Rpb24gSihyZSl7cmUuZG9uZT9XKHJlLnZhbHVlKTpmdW5jdGlvbiBVKFcpe3JldHVybiBXIGlu'@;
put 'c3RhbmNlb2YgTD9XOm5ldyBMKGZ1bmN0aW9uKFkpe1koVyl9KX0ocmUudmFsdWUpLnRoZW4oWCxlZSl9SigoSz1LLmFwcGx5KHosTnx8W10pKS5uZXh0KCkpfSl9LHk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHope3JldHVybiB6JiZ6Ll9fZXNNb2R1bGU/ejp7ZGVm'@;
put 'YXVsdDp6fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuU0FTOUFwaUNsaWVudD12b2lkIDA7Y29uc3QgZz1fKDc3NTcpLEI9eShfKDYyMzApKSx3PV8oNzk1KSxQPV8oNTkyOCk7cS5TQVM5QXBpQ2xpZW50PWNsYXNzIEZ7Y29uc3RydWN0b3Io'@;
put 'TixMLEspe3RoaXMuc2VydmVyVXJsPU4sdGhpcy5qb2JzUGF0aD1MLE4mJigwLFAuaXNVcmwpKE4pLHRoaXMucmVxdWVzdENsaWVudD1uZXcgdy5TYXM5UmVxdWVzdENsaWVudChOLEspfWdldENvbmZpZygpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmx9fXNldENvbmZpZyhOKXtO'@;
put 'JiYodGhpcy5zZXJ2ZXJVcmw9Til9ZXhlY3V0ZVNjcmlwdChOLEwsSyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIHRoaXMucmVxdWVzdENsaWVudC5sb2dpbihMLEssdGhpcy5qb2JzUGF0aCk7Y29uc3QgVz1PKFsuLi5OLCJkYXRhIF9udWxsXzsiLCJm'@;
put 'aWxlIF93ZWJvdXQ7IiwicHV0ICdFeGVjdXRlZCBzYXNqcyBydW4nOyIsInJ1bjsiXS5qb2luKCJcbiIpKSxZPWAvVXNlciBGb2xkZXJzLyR7TH0vTXkgRm9sZGVyL3Nhc2pzL3J1bm5lcmAsWD0ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IitXLmdldEJvdW5kYXJ5KCksSj17ImNh'@;
put 'Y2hlLWNvbnRyb2wiOiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOlgsIkNvbnRlbnQtTGVuZ3RoIjpXLmdldExlbmd0aFN5bmMoKSxDb25uZWN0aW9uOiJrZWVwLWFsaXZlIn0scmU9YCR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrWSsiJl9kZWJ1Zz1sb2ci'@;
put 'fWA7cmV0dXJuKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHJlLFcsdm9pZCAwLFgsSikpLnJlc3VsdH0pfX07Y29uc3QgTz16PT57Y29uc3QgTj1uZXcgQi5kZWZhdWx0LEw9YHNhc2pzLWV4ZWN1dGUtc2FzOS0keygwLGcuZ2VuZXJhdGVUaW1lc3RhbXApKCIiKX0uc2FzYDtyZXR1'@;
put 'cm4gTi5hcHBlbmQoTCx6LHtmaWxlbmFtZTpMLGNvbnRlbnRUeXBlOiJ0ZXh0L3BsYWluIn0pLE59fSw5ODIxOmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSkseT1fKDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHJlLGllLGxlLG1lKXty'@;
put 'ZXR1cm4gbmV3KGxlfHwobGU9UHJvbWlzZSkpKGZ1bmN0aW9uKFRlLFNlKXtmdW5jdGlvbiB6ZShiKXt0cnl7cChtZS5uZXh0KGIpKX1jYXRjaCh4KXtTZSh4KX19ZnVuY3Rpb24gVihiKXt0cnl7cChtZS50aHJvdyhiKSl9Y2F0Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIHAoYil7Yi5kb25lP1Rl'@;
put 'KGIudmFsdWUpOmZ1bmN0aW9uIF9lKFRlKXtyZXR1cm4gVGUgaW5zdGFuY2VvZiBsZT9UZTpuZXcgbGUoZnVuY3Rpb24oU2Upe1NlKFRlKX0pfShiLnZhbHVlKS50aGVuKHplLFYpfXAoKG1lPW1lLmFwcGx5KHJlLGllfHxbXSkpLm5leHQoKSl9KX0sQj10aGlzJiZ0aGlzLl9faW1wb3J0RGVm'@;
put 'YXVsdHx8ZnVuY3Rpb24ocmUpe3JldHVybiByZSYmcmUuX19lc01vZHVsZT9yZTp7ZGVmYXVsdDpyZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLlNBU1ZpeWFBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IHc9Xyg1OTI4KSxQPUIoXyg2MjMwKSks'@;
put 'Rj1fKDEzOTUpLE89Xyg2OTAzKSx6PV8oNjcyKSxOPV8oOTA5NyksTD1fKDk3NzgpLEs9XygxMzQzKSxVPV8oNzA0KSxXPV8oNjQ5NiksWT1fKDE2MjIpLFg9XygzNTY5KSxlZT1fKDM2Nik7cS5TQVNWaXlhQXBpQ2xpZW50PWNsYXNzIEp7Y29uc3RydWN0b3IoaWUsbGUsbWUsX2Upe3RoaXMu'@;
put 'c2VydmVyVXJsPWllLHRoaXMucm9vdEZvbGRlck5hbWU9bGUsdGhpcy5jb250ZXh0TmFtZT1tZSx0aGlzLnJlcXVlc3RDbGllbnQ9X2UsdGhpcy5fZGVidWc9ITEsdGhpcy5zZXNzaW9uTWFuYWdlcj1uZXcgTy5TZXNzaW9uTWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLmNvbnRleHROYW1l'@;
put 'LHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5jb250ZXh0TWFuYWdlcj1uZXcgei5Db250ZXh0TWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuZm9sZGVyTWFwPW5ldyBNYXAsaWUmJigwLHcuaXNVcmwpKGllKX1hcHBlbmRSZXF1ZXN0KGllLGxlLG1lKXt0'@;
put 'aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChpZSxsZSxtZSl9Z2V0IGRlYnVnKCl7cmV0dXJuIHRoaXMuX2RlYnVnfXNldCBkZWJ1ZyhpZSl7dGhpcy5fZGVidWc9aWUsdGhpcy5zZXNzaW9uTWFuYWdlciYmKHRoaXMuc2Vzc2lvbk1hbmFnZXIuZGVidWc9aWUpfWdldEpvYnNJbkZv'@;
put 'bGRlcihpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGxlPSgwLHcuaXNSZWxhdGl2ZVBhdGgpKGllKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke2llfWA6aWU7cmV0dXJuIHRoaXMuZm9sZGVyTWFwLmdldChsZSl8fCh5aWVsZCB0aGlzLnBvcHVs'@;
put 'YXRlRm9sZGVyTWFwKGxlKSksdGhpcy5mb2xkZXJNYXAuZ2V0KGxlKX0pfWdldENvbmZpZygpe3JldHVybntzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmwscm9vdEZvbGRlck5hbWU6dGhpcy5yb290Rm9sZGVyTmFtZX19c2V0Q29uZmlnKGllLGxlKXtpZSYmKHRoaXMuc2VydmVyVXJsPWllKSxs'@;
put 'ZSYmKHRoaXMucm9vdEZvbGRlck5hbWU9bGUpfWdldENvbXB1dGVDb250ZXh0cyhpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0cyhpZSl9KX1nZXREZWZhdWx0Q29tcHV0'@;
put 'ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0c31nZXRMYXVuY2hlckNvbnRleHRzKGllKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0'@;
put 'TGF1bmNoZXJDb250ZXh0cyhpZSl9KX1nZXRFeGVjdXRhYmxlQ29udGV4dHMoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBsZT10aGlzLmV4ZWN1dGVTY3JpcHQuYmluZCh0aGlzKTtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5nZXRF'@;
put 'eGVjdXRhYmxlQ29udGV4dHMobGUsaWUpfSl9Y3JlYXRlU2Vzc2lvbihpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDpfZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAi'@;
put 'LGxlKSxUZT1fZS5pdGVtcyYmX2UuaXRlbXMubGVuZ3RoP19lLml0ZW1zLmZpbmQoemU9PnplLm5hbWU9PT1pZSk6bnVsbDtpZighVGUpdGhyb3cgbmV3IEVycm9yKGBFeGVjdXRpb24gY29udGV4dCAke2llfSBub3QgZm91bmQuYCk7Y29uc3R7cmVzdWx0OlNlfT15aWVsZCB0aGlzLnJlcXVl'@;
put 'c3RDbGllbnQucG9zdChgL2NvbXB1dGUvY29udGV4dHMvJHtUZS5pZH0vc2Vzc2lvbnNgLHt9LGxlKTtyZXR1cm4gU2V9KX1jcmVhdGVDb21wdXRlQ29udGV4dChpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0'@;
put 'aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUNvbXB1dGVDb250ZXh0KGllLGxlLG1lLF9lLFRlLFNlKX0pfWNyZWF0ZUxhdW5jaGVyQ29udGV4dChpZSxsZSxtZT0iZGlyZWN0IixfZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNv'@;
put 'bnRleHRNYW5hZ2VyLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChpZSxsZSxtZSxfZSl9KX1lZGl0Q29tcHV0ZUNvbnRleHQoaWUsbGUsbWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5lZGl0Q29tcHV0ZUNv'@;
put 'bnRleHQoaWUsbGUsbWUpfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5kZWxldGVDb21wdXRlQ29udGV4dChpZSxsZSl9KX1leGVjdXRlU2NyaXB0KGll'@;
put 'LGxlLG1lLF9lLFRlPW51bGwsU2U9ITEsemU9ITEsVj0hMCxwLGI9ITEseCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFkuZXhlY3V0ZU9uQ29tcHV0ZUFwaSkodGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2Vzc2lvbk1hbmFnZXIsdGhpcy5yb290'@;
put 'Rm9sZGVyTmFtZSxpZSxsZSxtZSxfZSxUZSxTZSx6ZSxWLHAsYix4KX0pfWdldEZvbGRlcihpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9'@;
put 'JHtpZX1gLGxlKS50aGVuKG1lPT5tZS5yZXN1bHQpfSl9Y3JlYXRlRmlsZShpZSxsZSxtZSxfZSxUZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCFtZSYmIV9lKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhlIHBhcmVudCBmb2xkZXIgaXMg'@;
put 'cmVxdWlyZWQuIik7IV9lJiZtZSYmKF9lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKG1lLFRlKSk7Y29uc3QgU2U9e0FjY2VwdDoiYXBwbGljYXRpb24vdm5kLnNhcy5maWxlK2pzb24iLCJDb250ZW50LURpc3Bvc2l0aW9uIjpgZmlsZW5hbWU9IiR7aWV9IjtgfSx6ZT1uZXcgUC5kZWZhdWx0'@;
put 'O3JldHVybiB6ZS5hcHBlbmQoImZpbGUiLGxlLGllKSwoeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9maWxlcy9maWxlcz9wYXJlbnRGb2xkZXJVcmk9JHtfZX0mdHlwZURlZk5hbWU9ZmlsZSNyYXdVcGxvYWRgLHplLFRlLCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0i'@;
put 'K3plLl9ib3VuZGFyeSxTZSkpLnJlc3VsdH0pfWNyZWF0ZUZvbGRlcihpZSxsZSxtZSxfZSxUZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFNlPUkubG9nZ2VyfHx5O2lmKCFsZSYmIW1lKXRocm93IG5ldyBFcnJvcigiUGF0aCBvciBVUkkgb2YgdGhl'@;
put 'IHBhcmVudCBmb2xkZXIgaXMgcmVxdWlyZWQuIik7aWYoIW1lJiZsZSlpZihtZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShsZSxfZSkpe2lmKFRlKXtjb25zdCBWPWxlKyIvIitpZTsoeWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoVixfZSkpJiYoeWllbGQgdGhpcy5kZWxldGVGb2xkZXIobGUr'@;
put 'Ii8iK2llLF9lKSl9fWVsc2V7U2UuaW5mbyhgUGFyZW50IGZvbGRlciBhdCBwYXRoICcke2xlfScgaXMgbm90IHByZXNlbnQuYCk7Y29uc3QgVj1sZS5zdWJzdHJpbmcoMCxsZS5sYXN0SW5kZXhPZigiLyIpKSxwPWAke2xlLnNwbGl0KCIvIikucG9wKCl9YDtpZigiIj09PVYpdGhyb3cgbmV3'@;
put 'IEYuUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IobGUsdGhpcy5zZXJ2ZXJVcmwsX2UpO1NlLmluZm8oYENyZWF0aW5nIHBhcmVudCBmb2xkZXI6XG4nJHtwfScgaW4gJyR7Vn0nYCk7Y29uc3QgYj15aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcihwLFYsdm9pZCAwLF9lKTtTZS5pbmZvKGBQYXJlbnQg'@;
put 'Zm9sZGVyICcke3B9JyBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC5gKSxtZT1gL2ZvbGRlcnMvZm9sZGVycy8ke2IuaWR9YH1jb25zdHtyZXN1bHQ6emV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAvZm9sZGVycy9mb2xkZXJzP3BhcmVudEZvbGRlclVyaT0ke21lfWAs'@;
put 'e25hbWU6aWUsdHlwZToiZm9sZGVyIn0sX2UpLmNhdGNoKFY9Pntjb25zdHttZXNzYWdlOnAscmVzcG9uc2U6Yn09VjtpZihwJiZiJiZiLmRhdGEmJmIuZGF0YS5tZXNzYWdlKXtjb25zdHtzdGF0dXM6eH09Yix7bWVzc2FnZTpDfT1iLmRhdGEsVD1bcCxDXS5tYXAoaj0+L1wuJC8udGVzdChq'@;
put 'KT9qOmAke2p9LmApO3Rocm93IVRlJiY0MDk9PT14JiZULnB1c2goJ1RvIG92ZXJyaWRlLCBwbGVhc2Ugc2V0ICJpc0ZvcmNlZCIgdG8gInRydWUiLicpLFQuam9pbigiICIpfXRocm93IFZ9KTtyZXR1cm4geWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChgJHtsZX0vJHtpZX1gLF9lKSx6'@;
put 'ZX0pfWNyZWF0ZUpvYkRlZmluaXRpb24oaWUsbGUsbWUsX2UsVGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighbWUmJiFfZSl0aHJvdyBuZXcgRXJyb3IoIlBhdGggdG8gb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVy'@;
put 'biFfZSYmbWUmJihfZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShtZSxUZSkpLHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9qb2JEZWZpbml0aW9ucy9kZWZpbml0aW9ucz9wYXJlbnRGb2xkZXJVcmk9JHtfZX1gLHtuYW1lOmllLHBhcmFtZXRlcnM6'@;
put 'W3tuYW1lOiJfYWRkamVzYmVnaW5lbmRtYWNyb3MiLHR5cGU6IkNIQVJBQ1RFUiIsZGVmYXVsdFZhbHVlOiJmYWxzZSJ9XSx0eXBlOiJDb21wdXRlIixjb2RlOmxlfSxUZSl9KX1nZXRBdXRoQ29kZShpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGxl'@;
put 'PWAke3RoaXMuc2VydmVyVXJsfS9TQVNMb2dvbi9vYXV0aC9hdXRob3JpemU/Y2xpZW50X2lkPSR7aWV9JnJlc3BvbnNlX3R5cGU9Y29kZWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQobGUsdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihfZT0+X2UucmVzdWx0KS50aGVu'@;
put 'KF9lPT5nKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgVGU9IiI7aWYoKDAsTi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkoX2UpKXtjb25zdCB6ZT0oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmF1dGhvcml6ZShfZSkpLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9i'@;
put 'b2R5PiIpWzBdLFY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFYuaW5uZXJIVE1MPXplLFRlPVYucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHQsVGV9e2NvbnN0IFNlPV9lLnNwbGl0KCI8Ym9keT4iKVsxXS5zcGxpdCgiPC9ib2R5PiIpWzBdLHpl'@;
put 'PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB6ZS5pbm5lckhUTUw9U2UsemUmJihUZT16ZS5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dCksVGV9fSkpLmNhdGNoKCgpPT5udWxsKX0pfWdldEFjY2Vzc1Rva2VuKGllLGxlLG1lKXtyZXR1cm4gZyh0'@;
put 'aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsWC5nZXRBY2Nlc3NUb2tlbkZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxpZSxsZSxtZSl9KX1yZWZyZXNoVG9rZW5zKGllLGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJu'@;
put 'KDAsZWUucmVmcmVzaFRva2Vuc0ZvclZpeWEpKHRoaXMucmVxdWVzdENsaWVudCxpZSxsZSxtZSl9KX1kZWxldGVDbGllbnQoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT10aGlzLnNlcnZlclVybCtgL29hdXRoL2NsaWVudHMvJHtpZX1g'@;
put 'O3JldHVybih5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKG1lLGxlKSkucmVzdWx0fSl9ZXhlY3V0ZUNvbXB1dGVKb2IoaWUsbGUsbWUsX2UsVGUsU2U9ITAsemU9ITEsVixwPSExLGIpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgeD0oVGV8fHt9'@;
put 'KS5hY2Nlc3NfdG9rZW47aWYoVGUmJih7YWNjZXNzX3Rva2VuOnh9PXlpZWxkKDAsVS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxUZSkpLCgwLHcuaXNSZWxhdGl2ZVBhdGgpKGllKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBj'@;
put 'YW5ub3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lIik7Y29uc3QgQz1pZS5zcGxpdCgiLyIpLFQ9Qy5wb3AoKSxIPUMuam9pbigiLyIpLGo9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7SH1gOkg7eWllbGQg'@;
put 'dGhpcy5wb3B1bGF0ZUZvbGRlck1hcChqLHgpLmNhdGNoKHRlPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHRlLCJFcnJvciB3aGlsZSBwb3B1bGF0aW5nIGZvbGRlciBtYXAuICIpfSk7Y29uc3QgRT10aGlzLmZvbGRlck1hcC5nZXQoaik7aWYoIUUpdGhyb3cgbmV3IEVycm9yKGBUaGUg'@;
put 'Zm9sZGVyICcke2p9JyB3YXMgbm90IGZvdW5kIG9uICcke3RoaXMuc2VydmVyVXJsfSdgKTtjb25zdCBtPUU/LmZpbmQodGU9PnRlLm5hbWU9PT1UKTtpZighbSl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5kLiIpO2xldCBBPW0/LmNvZGU7aWYoIUEpe2NvbnN0IHRlPW0/Lmxp'@;
put 'bmtzLmZpbmQod2U9PiJnZXRSZXNvdXJjZSI9PT13ZS5yZWwpO2lmKCF0ZSl0aHJvdyBuZXcgRXJyb3IoIlVSSSBvZiBqb2IgZGVmaW5pdGlvbiB3YXMgbm90IGZvdW5kLiIpO2NvbnN0e3Jlc3VsdDpzZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0k'@;
put 'e3RlLmhyZWZ9YCx4KS5jYXRjaCh3ZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKSh3ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IgZGVmaW5pdGlvbi4gIil9KTtBPXNlLmNvZGUsbS5jb2RlPUF9QXx8KEE9IiIpO2NvbnN0IG9lPUEucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnNwbGl0KCJc'@;
put 'biIpO3JldHVybiB5aWVsZCB0aGlzLmV4ZWN1dGVTY3JpcHQoaWUsb2UsbGUsVGUsX2UsbWUsemUsU2UsVixwLGIpfSl9ZXhlY3V0ZUpvYihpZSxsZSxtZSxfZSxUZSl7dmFyIFNlLHplLFY7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBwPShUZXx8e30pLmFj'@;
put 'Y2Vzc190b2tlbjtpZihUZSYmKHthY2Nlc3NfdG9rZW46cH09eWllbGQoMCxVLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LFRlKSksKDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJlbGF0aXZlIHBhdGhzIGNhbm5v'@;
put 'dCBiZSB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVyIG5hbWUuIik7Y29uc3QgYj1pZS5zcGxpdCgiLyIpLHg9Yi5wb3AoKSxDPWIuam9pbigiLyIpLFQ9KDAsdy5pc1JlbGF0aXZlUGF0aCkoaWUpP2Ake3RoaXMucm9vdEZvbGRlck5hbWV9LyR7Q31gOkM7eWllbGQgdGhp'@;
put 'cy5wb3B1bGF0ZUZvbGRlck1hcChULHApO2NvbnN0IEg9dGhpcy5mb2xkZXJNYXAuZ2V0KFQpO2lmKCFIKXRocm93IG5ldyBFcnJvcihgVGhlIGZvbGRlciAnJHtUfScgd2FzIG5vdCBmb3VuZCBvbiAnJHt0aGlzLnNlcnZlclVybH0nLmApO2NvbnN0IGo9SD8uZmluZChEZT0+RGUubmFtZT09'@;
put 'PXgpO2xldCBFPVtdO2lmKF9lJiZPYmplY3Qua2V5cyhfZSkubGVuZ3RoJiYoRT15aWVsZCB0aGlzLnVwbG9hZFRhYmxlcyhfZSxwKSksIWopdGhyb3cgbmV3IEVycm9yKCJKb2Igd2FzIG5vdCBmb3VuZC4iKTtjb25zdCBtPW51bGw9PT0oU2U9aj8ubGlua3MuZmluZChEZT0+ImdldFJlc291'@;
put 'cmNlIj09PURlLnJlbCkpfHx2b2lkIDA9PT1TZT92b2lkIDA6U2UuaHJlZix7cmVzdWx0OkF9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHttfWAscCksb2U9e19jb250ZXh0TmFtZTpsZSxfcHJvZ3JhbTpgJHtUfS8ke3h9YCxfd2ViaW5fZmlsZV9j'@;
put 'b3VudDpFLmxlbmd0aCxfT01JVEpTT05MSVNUSU5HOiEwLF9PTUlUSlNPTkxPRzohMCxfT01JVFNFU1NJT05SRVNVTFRTOiEwLF9PTUlUVEVYVExJU1RJTkc6ITAsX09NSVRURVhUTE9HOiEwfTttZSYmKG9lLl9PTUlUVEVYVExPRz0iZmFsc2UiLG9lLl9PTUlUU0VTU0lPTlJFU1VMVFM9ImZh'@;
put 'bHNlIixvZS5fREVCVUc9MTMxKSxFLmZvckVhY2goKERlLEZlKT0+e29lW2Bfd2ViaW5fZmlsZXVyaSR7RmUrMX1gXT1gL2ZpbGVzL2ZpbGVzLyR7RGUuZmlsZS5pZH1gLG9lW2Bfd2ViaW5fbmFtZSR7RmUrMX1gXT1EZS50YWJsZU5hbWV9KTtjb25zdCB0ZT17bmFtZTpgZXhlYy0ke3h9YCxk'@;
put 'ZXNjcmlwdGlvbjoiUG93ZXJlZCBieSBTQVNqcyIsam9iRGVmaW5pdGlvbjpBLGFyZ3VtZW50czpvZX0se3Jlc3VsdDpzZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkV4ZWN1dGlvbi9qb2JzP19hY3Rpb249d2FpdGAsdGUscCksd2U9eWll'@;
put 'bGQgdGhpcy5wb2xsSm9iU3RhdGUoc2UsVGUpLmNhdGNoKERlPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKERlLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfSkse3Jlc3VsdDpVZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0v'@;
put 'am9iRXhlY3V0aW9uL2pvYnMvJHtzZS5pZH1gLHApO2xldCBKZSxhdDtjb25zdCBNZT1VZS5yZXN1bHRzWyJfd2Vib3V0Lmpzb24iXSx2ZT1VZS5saW5rcy5maW5kKERlPT4ibG9nIj09PURlLnJlbCk7aWYoTWUmJihKZT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2Vy'@;
put 'dmVyVXJsfSR7TWV9L2NvbnRlbnRgLHAsInRleHQvcGxhaW4iKSksbWUmJnZlJiYoYXQ9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke3ZlLmhyZWZ9L2NvbnRlbnRgLHApLnRoZW4oRGU9PkRlLnJlc3VsdC5pdGVtcy5tYXAoRmU9PkZlLmxpbmUpLmpv'@;
put 'aW4oIlxuIikpKSwiZmFpbGVkIj09PXdlKXRocm93IG5ldyBGLkpvYkV4ZWN1dGlvbkVycm9yKG51bGw9PT0oemU9VWUuZXJyb3IpfHx2b2lkIDA9PT16ZT92b2lkIDA6emUuZXJyb3JDb2RlLG51bGw9PT0oVj1VZS5lcnJvcil8fHZvaWQgMD09PVY/dm9pZCAwOlYubWVzc2FnZSxhdCk7Y29u'@;
put 'c3QgWGU9e3Jlc3VsdDpKZT8ucmVzdWx0LGxvZzphdH0se2Vycm9yOmplfT1VZTtyZXR1cm4gamUmJihYZS5lcnJvcj1qZSksWGV9KX1wb3B1bGF0ZUZvbGRlck1hcChpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPSgwLHcuaXNSZWxhdGl2'@;
put 'ZVBhdGgpKGllKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke2llfWA6aWU7aWYodGhpcy5mb2xkZXJNYXAuZ2V0KG1lKSlyZXR1cm47Y29uc3QgX2U9Ii9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0iK21lLHtyZXN1bHQ6VGV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7'@;
put 'X2V9YCxsZSkuY2F0Y2goVj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShWLCJFcnJvciB3aGlsZSBnZXR0aW5nIGZvbGRlci4gIil9KTtpZighVGUpdGhyb3cgbmV3IEVycm9yKGBUaGUgcGF0aCAke21lfSBkb2VzIG5vdCBleGlzdCBvbiAke3RoaXMuc2VydmVyVXJsfWApO2NvbnN0e3Jl'@;
put 'c3VsdDpTZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgL2ZvbGRlcnMvZm9sZGVycy8ke1RlLmlkfS9tZW1iZXJzP2xpbWl0PSR7VGUubWVtYmVyQ291bnQ8NTAwPzUwMDpUZS5tZW1iZXJDb3VudH1gLGxlKS5jYXRjaChWPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKFYsIkVy'@;
put 'cm9yIHdoaWxlIGdldHRpbmcgbWVtYmVycy4gIil9KTt0aGlzLmZvbGRlck1hcC5zZXQobWUsU2UuaXRlbXMpfSl9cG9sbEpvYlN0YXRlKGllLGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsSy5wb2xsSm9iU3RhdGUpKHRoaXMucmVxdWVz'@;
put 'dENsaWVudCxpZSx0aGlzLmRlYnVnLGxlLG1lKX0pfXVwbG9hZFRhYmxlcyhpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFcudXBsb2FkVGFibGVzKSh0aGlzLnJlcXVlc3RDbGllbnQsaWUsbGUpfSl9Z2V0Rm9sZGVyRGV0YWlscyhpZSxs'@;
put 'ZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPSgwLHcuaXNVcmkpKGllKT9pZTpgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7aWV9YCx7cmVzdWx0Ol9lfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJs'@;
put 'fSR7bWV9YCxsZSkuY2F0Y2goVGU9PntpZihUZSBpbnN0YW5jZW9mIEYuQ2VydGlmaWNhdGVFcnJvcil0aHJvdyBUZTtyZXR1cm57cmVzdWx0Om51bGx9fSk7aWYoX2UpcmV0dXJuIF9lfSl9Z2V0Rm9sZGVyVXJpKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q'@;
put 'KCl7Y29uc3QgbWU9eWllbGQgdGhpcy5nZXRGb2xkZXJEZXRhaWxzKGllLGxlKTtpZihtZSlyZXR1cm5gL2ZvbGRlcnMvZm9sZGVycy8ke21lLmlkfWB9KX1nZXRSZWN5Y2xlQmluVXJpKGllKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Om1l'@;
put 'fT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9mb2xkZXJzL2ZvbGRlcnMvQG15UmVjeWNsZUJpbmAsaWUpLmNhdGNoKF9lPT57aWYoX2UgaW5zdGFuY2VvZiBGLkNlcnRpZmljYXRlRXJyb3IpdGhyb3cgX2U7cmV0dXJue3Jlc3VsdDpudWxsfX0pO2lm'@;
put 'KG1lKXJldHVybmAvZm9sZGVycy9mb2xkZXJzLyR7bWUuaWR9YH0pfWdldENvbXB1dGVDb250ZXh0QnlOYW1lKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRCeU5h'@;
put 'bWUoaWUsbGUpfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeUlkKGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKGllLGxlKX0pfWxpc3RGb2xkZXIoaWUsbGUsbWU9'@;
put 'MjApe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBfZT0oMCx3LmlzVXJpKShpZSk/aWU6eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoaWUsbGUpLHtyZXN1bHQ6VGV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHtf'@;
put 'ZX0vbWVtYmVycz9saW1pdD0ke21lfWAsbGUpO3JldHVybiBUZSYmVGUuaXRlbXM/VGUuaXRlbXMubWFwKFNlPT5TZS5uYW1lKTpbXX0pfW1vdmVGb2xkZXIoaWUsbGUsbWUsX2Upe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT1pZS5zcGxpdCgiLyIp'@;
put 'LnBvcCgpO2lmKHlpZWxkIHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhsZSxfZSkpbWU9VGU7ZWxzZXtsZXQgeD1sZS5zcGxpdCgiLyIpO3guc3BsaWNlKHgubGVuZ3RoLTEsMSksbGU9eC5qb2luKCIvIil9Y29uc3QgemU9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkoaWUsX2UpLFY9eWllbGQgdGhp'@;
put 'cy5nZXRGb2xkZXJVcmkobGUsX2UpO2lmKCF6ZSlyZXR1cm47Y29uc3QgcD16ZT8uc3BsaXQoIi8iKS5wb3AoKSx7cmVzdWx0OmJ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wYXRjaChgJHt0aGlzLnNlcnZlclVybH0ke3plfWAse2lkOnAsbmFtZTptZSxwYXJlbnRGb2xkZXJVcmk6Vn0s'@;
put 'X2UpLmNhdGNoKHg9Pnt0aHJvdyB4LmNvZGUmJiJFTk9URk9VTkQiPT09eC5jb2RlP3tib2R5OnttZXNzYWdlOmBGb2xkZXIgJyR7aWUuc3BsaXQoIi8iKS5wb3AoKX0nIHdhcyBub3QgZm91bmQuYH19Onh9KTtyZXR1cm4gYnx8dm9pZCAwfSl9ZGVsZXRlRm9sZGVyKGllLGxlKXtyZXR1cm4g'@;
put 'Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbWU9eWllbGQgdGhpcy5nZXRSZWN5Y2xlQmluVXJpKGxlKSxfZT1pZS5zcGxpdCgiLyIpLnBvcCgpfHwiIixUZT1uZXcgRGF0ZSx6ZT1fZSsiICIrVGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkrIiAiK1RlLnRvTG9jYWxlVGlt'@;
put 'ZVN0cmluZygpO3JldHVybiB5aWVsZCB0aGlzLm1vdmVGb2xkZXIoaWUsbWUsemUsbGUpfSl9fX0sNTk1NjpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxZLFgsZWUpe3JldHVybiBuZXcoWHx8KFg9UHJvbWlzZSkp'@;
put 'KGZ1bmN0aW9uKHJlLGllKXtmdW5jdGlvbiBsZShUZSl7dHJ5e19lKGVlLm5leHQoVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBtZShUZSl7dHJ5e19lKGVlLnRocm93KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gX2UoVGUpe1RlLmRvbmU/cmUoVGUudmFsdWUpOmZ1'@;
put 'bmN0aW9uIEoocmUpe3JldHVybiByZSBpbnN0YW5jZW9mIFg/cmU6bmV3IFgoZnVuY3Rpb24oaWUpe2llKHJlKX0pfShUZS52YWx1ZSkudGhlbihsZSxtZSl9X2UoKGVlPWVlLmFwcGx5KFcsWXx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7'@;
put 'dmFsdWU6ITB9KTtjb25zdCB5PV8oNTkyOCksZz1fKDEyMzApLEI9Xyg5ODIxKSx3PV8oODMwNiksUD1fKDM0NjcpLEY9XygxNTI3KSxPPV8oMzkwMCksej1fKDQ1ODgpLE49XygzNjAyKSxMPV8oODIxNyksSz17c2VydmVyVXJsOiIiLHBhdGhTQVNKUzoiL1NBU2pzQXBpL3N0cC9leGVjdXRl'@;
put 'IixwYXRoU0FTOToiL1NBU1N0b3JlZFByb2Nlc3MvZG8iLHBhdGhTQVNWaXlhOiIvU0FTSm9iRXhlY3V0aW9uIixhcHBMb2M6Ii9QdWJsaWMvc2VlZGFwcCIsc2VydmVyVHlwZTpPLlNlcnZlclR5cGUuU2FzVml5YSxkZWJ1ZzohMSxjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29t'@;
put 'cHV0ZSBjb250ZXh0Iix1c2VDb21wdXRlQXBpOm51bGwsbG9naW5NZWNoYW5pc206Zy5Mb2dpbk1lY2hhbmlzbS5EZWZhdWx0fTtxLmRlZmF1bHQ9Y2xhc3MgVXtjb25zdHJ1Y3RvcihZKXt0aGlzLnNhc2pzQ29uZmlnPW5ldyBnLlNBU2pzQ29uZmlnLHRoaXMuam9ic1BhdGg9IiIsdGhpcy5z'@;
put 'YXNWaXlhQXBpQ2xpZW50PW51bGwsdGhpcy5zYXM5QXBpQ2xpZW50PW51bGwsdGhpcy5zYXNKU0FwaUNsaWVudD1udWxsLHRoaXMuZmlsZVVwbG9hZGVyPW51bGwsdGhpcy5hdXRoTWFuYWdlcj1udWxsLHRoaXMucmVxdWVzdENsaWVudD1udWxsLHRoaXMud2ViSm9iRXhlY3V0b3I9bnVsbCx0'@;
put 'aGlzLnNhc2pzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1udWxsLHRoaXMuamVzSm9iRXhlY3V0b3I9bnVsbCx0aGlzLnNhczlKb2JFeGVjdXRvcj1udWxsLHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzPSgpPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'biooKXt2YXIgWCxlZSxKLHJlLGllO3lpZWxkIG51bGw9PT0oWD10aGlzLndlYkpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09WD92b2lkIDA6WC5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KGVlPXRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yKXx8dm9pZCAwPT09ZWU/dm9pZCAw'@;
put 'OmVlLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0oSj10aGlzLmplc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09Sj92b2lkIDA6Si5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KHJlPXRoaXMuZmlsZVVwbG9hZGVyKXx8dm9pZCAwPT09cmU/dm9pZCAw'@;
put 'OnJlLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpLHlpZWxkIG51bGw9PT0oaWU9dGhpcy5zYXNqc0pvYkV4ZWN1dG9yKXx8dm9pZCAwPT09aWU/dm9pZCAwOmllLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpfSksdGhpcy5zZXRWZXJib3NlTW9kZT1YPT57dmFyIGVlO251bGw9PT0oZWU9dGhpcy5y'@;
put 'ZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09ZWV8fGVlLnNldFZlcmJvc2VNb2RlKFgpfSx0aGlzLnNhc2pzQ29uZmlnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxLKSxZKSx0aGlzLnNldHVwQ29uZmlndXJhdGlvbigpfWdldENzcmZUb2tlbihZPSJnZW5lcmFsIil7dmFyIFg7cmV0'@;
put 'dXJuIG51bGw9PT0oWD10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1YP3ZvaWQgMDpYLmdldENzcmZUb2tlbihZKX1leGVjdXRlU2NyaXB0KHtsaW5lc09mQ29kZTpZLGZpbGVOYW1lOlgsY29udGV4dE5hbWU6ZWUscnVuVGltZTpKLGF1dGhDb25maWc6cmUsYXV0aENvbmZpZ1Nhczk6'@;
put 'aWUsZGVidWc6bGV9KXt2YXIgbWUsX2U7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtPLlNlcnZlclR5cGUuU2FzOSxPLlNlcnZlclR5cGUuU2FzanMsTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFd'@;
put 'KSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSl7aWYoIWllKXRocm93IG5ldyBFcnJvcigiQXV0aCBjb25maWcgZm9yIHNhczkgaXMgbm90IHByb3ZpZGVkIik7cmV0dXJuIHlpZWxkIG51bGw9PT0obWU9dGhpcy5zYXM5QXBpQ2xpZW50KXx8dm9pZCAw'@;
put 'PT09bWU/dm9pZCAwOm1lLmV4ZWN1dGVTY3JpcHQoWSxpZS51c2VyTmFtZSxpZS5wYXNzd29yZCl9aWYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc2pzKXJldHVybiB5aWVsZCBudWxsPT09KF9lPXRoaXMuc2FzSlNBcGlDbGllbnQpfHx2b2lkIDA9PT1f'@;
put 'ZT92b2lkIDA6X2UuZXhlY3V0ZVNjcmlwdChZLmpvaW4oIlxuIiksSixyZSk7aWYodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWEpe2lmKCEoZWU9ZWV8fHRoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpKXRocm93IG5ldyBFcnJvcigiQ29udGV4'@;
put 'dCBuYW1lIGlzIHVuZGVmaW5lZC4gUGxlYXNlIHNldCBhIGBjb250ZXh0TmFtZWAgaW4geW91ciBTQVNqcyBvciBvdmVycmlkZSBjb25maWcuIik7aWYoIVgpdGhyb3cgbmV3IEVycm9yKCJGaWxlIG5hbWUgaXMgcmVxdWlyZWQgaW4gY2FzZSBvZiBTQVMgVklZQS4gUGxlYXNlIHByb3ZpZGUg'@;
put 'YSBgZmlsZU5hbWVgLiIpO3JldHVybiB5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZXhlY3V0ZVNjcmlwdChYLFksZWUscmUsbnVsbCxsZXx8dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyl9fSl9ZXhlY3V0ZUpvYihZLFgsZWUpe3ZhciBKO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxm'@;
put 'dW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZXhlY3V0ZVNjcmlwdCIsW08uU2VydmVyVHlwZS5TYXNqc10pLHlpZWxkIG51bGw9PT0oSj10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09Sj92b2lkIDA6Si5leGVjdXRlSm9iKFksWCxlZSl9KX1nZXRDb21w'@;
put 'dXRlQ29udGV4dHMoWSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dHMiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21w'@;
put 'dXRlQ29udGV4dHMoWSl9KX1nZXRMYXVuY2hlckNvbnRleHRzKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0TGF1bmNoZXJDb250ZXh0cyIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhp'@;
put 'cy5zYXNWaXlhQXBpQ2xpZW50LmdldExhdW5jaGVyQ29udGV4dHMoWSl9KX1nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldERlZmF1bHRDb21wdXRlQ29udGV4dHMiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHRoaXMuc2FzVml5'@;
put 'YUFwaUNsaWVudC5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzKCl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RXhlY3V0YWJsZUNvbnRleHRzIixbTy5TZXJ2'@;
put 'ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKFkpfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoWSxYLGVlLEoscmUsaWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01l'@;
put 'dGhvZFN1cHBvcnRlZCgiY3JlYXRlQ29tcHV0ZUNvbnRleHQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVDb21wdXRlQ29udGV4dChZLFgsZWUsSixyZSxpZSl9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoWSxYLGVlLEope3JldHVy'@;
put 'biBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlTGF1bmNoZXJDb250ZXh0IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlTGF1bmNoZXJDb250ZXh0KFks'@;
put 'WCxlZSxKKX0pfWVkaXRDb21wdXRlQ29udGV4dChZLFgsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZWRpdENvbXB1dGVDb250ZXh0IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNh'@;
put 'c1ZpeWFBcGlDbGllbnQuZWRpdENvbXB1dGVDb250ZXh0KFksWCxlZSl9KX1kZWxldGVDb21wdXRlQ29udGV4dChZLFgpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRlQ29tcHV0ZUNvbnRleHQiLFtP'@;
put 'LlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDb21wdXRlQ29udGV4dChZLFgpfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoWSxYKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRo'@;
put 'b2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlOYW1lIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoWSxYKX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChZLFgpe3JldHVybiBJKHRoaXMsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeUlkIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKFksWCl9KX1jcmVhdGVT'@;
put 'ZXNzaW9uKFksWCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVTZXNzaW9uIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlU2Vzc2lvbihZ'@;
put 'LFgpfSl9Y3JlYXRlRm9sZGVyKFksWCxlZSxKLHJlLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHJlP3lpZWxkIHJlLmNyZWF0ZUZvbGRlcihZLFgsZWUsSixpZSk6eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUZvbGRlcihZLFgs'@;
put 'ZWUsSixpZSl9KX1jcmVhdGVGaWxlKFksWCxlZSxKLHJlLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIGllP3lpZWxkIGllLmNyZWF0ZUZpbGUoWSxYLGVlLEoscmUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGaWxlKFksWCxl'@;
put 'ZSxKLHJlKX0pfWdldEZvbGRlcihZLFgpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Rm9sZGVyIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Rm9s'@;
put 'ZGVyKFksWCl9KX1kZWxldGVGb2xkZXIoWSxYKXt2YXIgZWU7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVGb2xkZXIiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0oZWU9dGhp'@;
put 'cy5zYXNWaXlhQXBpQ2xpZW50KXx8dm9pZCAwPT09ZWU/dm9pZCAwOmVlLmRlbGV0ZUZvbGRlcihZLFgpfSl9bGlzdEZvbGRlcihZLFgsZWUpe3ZhciBKO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibGlzdEZv'@;
put 'bGRlciIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgbnVsbD09PShKPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUo/dm9pZCAwOkoubGlzdEZvbGRlcihZLFgsZWUpfSl9bW92ZUZvbGRlcihZLFgsZWUsSil7dmFyIHJlO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQg'@;
put 'MCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgibW92ZUZvbGRlciIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgbnVsbD09PShyZT10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1yZT92b2lkIDA6cmUubW92ZUZvbGRlcihZLFgsZWUsSil9'@;
put 'KX1jcmVhdGVKb2JEZWZpbml0aW9uKFksWCxlZSxKLHJlLGllKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUpvYkRlZmluaXRpb24iLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLGllP3lpZWxkIGll'@;
put 'LmNyZWF0ZUpvYkRlZmluaXRpb24oWSxYLGVlLEoscmUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVKb2JEZWZpbml0aW9uKFksWCxlZSxKLHJlKX0pfWdldEF1dGhDb2RlKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5p'@;
put 'c01ldGhvZFN1cHBvcnRlZCgiZ2V0QXV0aENvZGUiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRBdXRoQ29kZShZKX0pfWdldEFjY2Vzc1Rva2VuKFksWCxlZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3Jl'@;
put 'dHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRBY2Nlc3NUb2tlbiIsW08uU2VydmVyVHlwZS5TYXNWaXlhLE8uU2VydmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcz95aWVsZCB0aGlzLnNhc0pTQXBpQ2xpZW50Lmdl'@;
put 'dEFjY2Vzc1Rva2VuKFksZWUpOnlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbihZLFgsZWUpfSl9cmVmcmVzaFRva2VucyhZLFgsZWUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgi'@;
put 'cmVmcmVzaFRva2VucyIsW08uU2VydmVyVHlwZS5TYXNWaXlhLE8uU2VydmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcz95aWVsZCB0aGlzLnNhc0pTQXBpQ2xpZW50LnJlZnJlc2hUb2tlbnMoZWUpOnlpZWxkIHRoaXMuc2Fz'@;
put 'Vml5YUFwaUNsaWVudC5yZWZyZXNoVG9rZW5zKFksWCxlZSl9KX1kZWxldGVDbGllbnQoWSxYKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNsaWVudCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSks'@;
put 'eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNsaWVudChZLFgpfSl9Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0NvbmZpZ31nZXRVc2VyTmFtZSgpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLnVzZXJOYW1lfXNldFNBU2pzQ29uZmlnKFkpe3JldHVybiBJKHRo'@;
put 'aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLnNhc2pzQ29uZmlnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxZKSx0aGlzLnNldHVwQ29uZmlndXJhdGlvbigpfSl9c2V0RGVidWdTdGF0ZShZKXt0aGlzLnNhc2pzQ29uZmlnLmRlYnVn'@;
put 'PVksdGhpcy5zYXNWaXlhQXBpQ2xpZW50JiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPVkpfWNoZWNrU2Vzc2lvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5jaGVja1Nlc3Npb24oKX0pfWxvZ0luKFksWCxl'@;
put 'ZSxKPXt9KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zYXNqc0NvbmZpZy5sb2dpbk1lY2hhbmlzbT09PWcuTG9naW5NZWNoYW5pc20uRGVmYXVsdCl7aWYoIVl8fCFYKXRocm93IG5ldyBFcnJvcigiQSB1c2VybmFtZSBhbmQgcGFzc3dvcmQgYXJl'@;
put 'IHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIGRlZmF1bHQgbG9naW4gbWVjaGFuaXNtLiIpO3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmxvZ0luKFksWCl9aWYodHlwZW9mIHdpbmRvdz4idSIpdGhyb3cgbmV3IEVycm9yKCJUaGUgcmVkaXJlY3RlZCBsb2dpbiBtZWNoYW5pc20gaXMgb25seSBh'@;
put 'dmFpbGFibGUgZm9yIHVzZSBpbiB0aGUgYnJvd3Nlci4iKTtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5yZWRpcmVjdGVkTG9nSW4oSil9KX1sb2dPdXQoKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dPdXQoKX11cGxvYWRGaWxlKFksWCxlZSxKPXt9LHJlKXtyZXR1cm4gSSh0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Sj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksSik7Y29uc3QgaWU9e2ZpbGVzOlgscGFyYW1zOmVlfTtyZXR1cm4geWllbGQgdGhpcy5maWxlVXBsb2FkZXIuZXhlY3V0ZShZLGllLEoscmUpfSl9cmVxdWVz'@;
put 'dChZLFgsZWU9e30sSixyZSxpZT1bXSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2VlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLnNhc2pzQ29uZmlnKSxlZSk7Y29uc3QgbGU9KDAseS52YWxpZGF0ZUlucHV0KShYKTtyZXR1cm4gbGUuc3Rh'@;
put 'dHVzP2VlLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNqc0pvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxYLGVlLEoscmUsaWUpOmVlLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzVml5YSYmbnVsbCE9ZWUudXNlQ29tcHV0ZUFwaT9lZS51c2VDb21wdXRl'@;
put 'QXBpP3lpZWxkIHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxYLGVlLEoscmUpOihlZS5jb250ZXh0TmFtZXx8KGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxlZSkse2NvbnRleHROYW1lOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQifSkpLHlp'@;
put 'ZWxkIHRoaXMuamVzSm9iRXhlY3V0b3IuZXhlY3V0ZShZLFgsZWUsSixyZSxpZSkpOmVlLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSYmZWUudXNlcm5hbWUmJmVlLnBhc3N3b3JkP3lpZWxkIHRoaXMuc2FzOUpvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxYLGVlKTp5aWVsZCB0aGlzLndl'@;
put 'YkpvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxYLGVlLEoscmUsaWUpOlByb21pc2UucmVqZWN0KG5ldyBnLkVycm9yUmVzcG9uc2UobGUubXNnKSl9KX1kZXBsb3lTZXJ2aWNlUGFjayhZLFgsZWUsSixyZT0hMSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuaXNN'@;
put 'ZXRob2RTdXBwb3J0ZWQoImRlcGxveVNlcnZpY2VQYWNrIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKTtsZXQgaWU9bnVsbDtpZihlZXx8WCllZXx8KGVlPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKSxYfHwoWD10aGlzLnNhc2pzQ29uZmlnLmFwcExvYyksdGhpcy5zYXNqc0NvbmZpZy5z'@;
put 'ZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWE/KGllPW5ldyBCLlNBU1ZpeWFBcGlDbGllbnQoZWUsWCx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksaWUuZGVidWc9dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyk6dGhpcy5zYXNqc0NvbmZpZy5z'@;
put 'ZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhczkmJihpZT1uZXcgdy5TQVM5QXBpQ2xpZW50KGVlLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucykpO2Vsc2V7bGV0IG1lPW51bGw7dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJU'@;
put 'eXBlLlNhc1ZpeWE/bWU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbmZpZygpOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5JiYobWU9dGhpcy5zYXM5QXBpQ2xpZW50LmdldENvbmZpZygpKSxlZT1tZS5zZXJ2ZXJVcmwsWD1tZS5yb290Rm9sZGVy'@;
put 'TmFtZX1ZLm1lbWJlcnNbMF0ubWVtYmVycyYmWS5tZW1iZXJzWzBdLm1lbWJlcnMuc29ydChtZT0+ImZvbGRlciI9PT1tZS50eXBlPy0xOjEpO2NvbnN0IGxlPVkubWVtYmVyczt5aWVsZCB0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhYLGxlLEosaWUscmUpfSl9c3RhcnRDb21wdXRl'@;
put 'Sm9iKFksWCxlZT17fSxKLHJlLGllLGxlPSExLG1lLF9lKXt2YXIgVGUsU2UsemUsVjtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoZWU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcpLGVlKSx0aGlzLmlzTWV0aG9kU3Vw'@;
put 'cG9ydGVkKCJzdGFydENvbXB1dGVKb2IiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLCFlZS5jb250ZXh0TmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29u'@;
put 'ZmlnLiIpO3JldHVybiBfZT8obnVsbD09PShUZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1UZXx8VGUuc2V0VmVyYm9zZU1vZGUoX2UpLG51bGw9PT0oU2U9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09U2V8fFNlLmVuYWJsZVZlcmJvc2VNb2RlKCkpOiExPT09X2UmJihu'@;
put 'dWxsPT09KHplPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PXplfHx6ZS5kaXNhYmxlVmVyYm9zZU1vZGUoKSksbnVsbD09PShWPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PVY/dm9pZCAwOlYuZXhlY3V0ZUNvbXB1dGVKb2IoWSxlZS5jb250ZXh0TmFtZSxlZS5kZWJ1'@;
put 'ZyxYLEosISFyZSwhMSxpZSxsZSxtZSl9KX1mZXRjaExvZ0ZpbGVDb250ZW50KFksWCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KFksWCkudGhlbihlZT0+e2lmKCFlZSlyZXR1cm4gUHJvbWlzZS5y'@;
put 'ZWplY3QobmV3IGcuRXJyb3JSZXNwb25zZSgiRXJyb3Igd2hpbGUgZmV0Y2hpbmcgbG9nLiBSZXNwb25zZSB3YXMgbm90IHByb3ZpZGVkLiIpKTt0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGVlLnJlc3VsdCl9Y2F0Y2goSil7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBnLkVycm9yUmVz'@;
put 'cG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gVGhlIHJlc3VsdCBpcyBub3QgdmFsaWQuIixKKSl9fSl9KX1nZXRTYXNSZXF1ZXN0cygpe3JldHVyblsuLi50aGlzLnJlcXVlc3RDbGllbnQuZ2V0UmVxdWVzdHMoKV0uc29ydCh5LmNvbXBhcmVUaW1lc3RhbXBzKX1jbGVhclNhc1Jl'@;
put 'cXVlc3RzKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyUmVxdWVzdHMoKX1zZXR1cENvbmZpZ3VyYXRpb24oKXtpZih2b2lkIDA9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybHx8IiI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybClpZih0eXBlb2YgbG9jYXRpb248InUiKXtsZXQg'@;
put 'WT1gJHtsb2NhdGlvbi5wcm90b2NvbH0vLyR7bG9jYXRpb24uaG9zdG5hbWV9YDtsb2NhdGlvbi5wb3J0JiYoWT1gJHtZfToke2xvY2F0aW9uLnBvcnR9YCksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmw9WX1lbHNlIHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPSIiOyIvIj09PXRoaXMu'@;
put 'c2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKC0xKSYmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKDAsLTEpKSx0aGlzLnJlcXVlc3RDbGllbnQ/dGhpcy5yZXF1ZXN0Q2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmln'@;
put 'LnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKTp0aGlzLnJlcXVlc3RDbGllbnQ9bmV3KHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcz9OLlNhc2pzUmVxdWVzdENsaWVudDp6LlJlcXVlc3RDbGllbnQpKHRoaXMuc2Fz'@;
put 'anNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMsdGhpcy5zYXNqc0NvbmZpZy5yZXF1ZXN0SGlzdG9yeUxpbWl0LHRoaXMuc2FzanNDb25maWcudmVyYm9zZSksdGhpcy5qb2JzUGF0aD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNl'@;
put 'cnZlclR5cGUuU2FzVml5YT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVNWaXlhOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5P3RoaXMuc2FzanNDb25maWcucGF0aFNBUzk6dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTSlMsdGhpcy5hdXRoTWFuYWdlcj1u'@;
put 'ZXcgRi5BdXRoTWFuYWdlcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2Fz'@;
put 'Vml5YSYmKHRoaXMuc2FzVml5YUFwaUNsaWVudD90aGlzLnNhc1ZpeWFBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuYXBwTG9jKTp0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9bmV3IEIuU0FTVml5YUFwaUNsaWVudCh0aGlzLnNh'@;
put 'c2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpLHRoaXMuc2FzanNDb25maWcuc2Vy'@;
put 'dmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5JiYodGhpcy5zYXM5QXBpQ2xpZW50P3RoaXMuc2FzOUFwaUNsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpOnRoaXMuc2FzOUFwaUNsaWVudD1uZXcgdy5TQVM5QXBpQ2xpZW50KHRoaXMuc2FzanNDb25maWcuc2Vy'@;
put 'dmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucykpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcyYmKHRoaXMuc2FzSlNBcGlDbGllbnR8fCh0aGlzLnNhc0pTQXBpQ2xpZW50PW5ldyBQLlNBU2pzQXBp'@;
put 'Q2xpZW50KHRoaXMucmVxdWVzdENsaWVudCkpKSx0aGlzLmZpbGVVcGxvYWRlcj1uZXcgTC5GaWxlVXBsb2FkZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLndlYkpv'@;
put 'YkV4ZWN1dG9yPW5ldyBMLldlYkpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuc2FzanNKb2JFeGVjdXRvcj1u'@;
put 'ZXcgTC5TYXNqc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLnNhczlKb2JFeGVjdXRvcj1uZXcgTC5TYXM5Sm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0Nv'@;
put 'bmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpLHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yPW5ldyBMLkNvbXB1dGVKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlz'@;
put 'LnNhc1ZpeWFBcGlDbGllbnQpLHRoaXMuamVzSm9iRXhlY3V0b3I9bmV3IEwuSmVzSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KX1jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoWSxYLGVlLEoscmUpe3JldHVybiBJKHRoaXMsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCgwLHkuYXN5bmNGb3JFYWNoKShYLGllPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtzd2l0Y2goaWUudHlwZSl7Y2FzZSJmb2xkZXIiOnlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyKGllLm5hbWUsWSx2b2lkIDAsZWUsSixyZSk7'@;
put 'YnJlYWs7Y2FzZSJmaWxlIjp5aWVsZCB0aGlzLmNyZWF0ZUZpbGUoaWUubmFtZSxpZS5jb2RlLFksdm9pZCAwLGVlLEopO2JyZWFrO2Nhc2Uic2VydmljZSI6eWllbGQgdGhpcy5jcmVhdGVKb2JEZWZpbml0aW9uKGllLm5hbWUsaWUuY29kZSxZLHZvaWQgMCxlZSxKKTticmVhaztkZWZhdWx0'@;
put 'OnRocm93IG5ldyBFcnJvcihgVW5pZGVudGlmaWVkIG1lbWJlciAnJHtpZS5uYW1lfScgcHJvdmlkZWQuYCl9ImZvbGRlciI9PT1pZS50eXBlJiZpZS5tZW1iZXJzJiZpZS5tZW1iZXJzLmxlbmd0aCYmKHlpZWxkIHRoaXMuY3JlYXRlRm9sZGVyc0FuZFNlcnZpY2VzKGAke1l9LyR7aWUubmFt'@;
put 'ZX1gLGllLm1lbWJlcnMsZWUsSixyZSkpfSkpfSl9aXNNZXRob2RTdXBwb3J0ZWQoWSxYKXtpZighdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlfHwhWC5pbmNsdWRlcyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUpKXRocm93IG5ldyBFcnJvcihgTWV0aG9kICcke1l9JyBpcyBvbmx5'@;
put 'IHN1cHBvcnRlZCBvbiAke1guam9pbigiLCAiKX0gc2VydmVycy5gKX1lbmFibGVWZXJib3NlTW9kZShZLFgpe3ZhciBlZTtudWxsPT09KGVlPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PWVlfHxlZS5lbmFibGVWZXJib3NlTW9kZShZLFgpfWRpc2FibGVWZXJib3NlTW9kZSgpe3Zh'@;
put 'ciBZO251bGw9PT0oWT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1ZfHxZLmRpc2FibGVWZXJib3NlTW9kZSgpfX19LDM0Njc6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE4sTCxLLFUpe3JldHVybiBuZXco'@;
put 'S3x8KEs9UHJvbWlzZSkpKGZ1bmN0aW9uKFksWCl7ZnVuY3Rpb24gZWUoaWUpe3RyeXtyZShVLm5leHQoaWUpKX1jYXRjaChsZSl7WChsZSl9fWZ1bmN0aW9uIEooaWUpe3RyeXtyZShVLnRocm93KGllKSl9Y2F0Y2gobGUpe1gobGUpfX1mdW5jdGlvbiByZShpZSl7aWUuZG9uZT9ZKGllLnZh'@;
put 'bHVlKTpmdW5jdGlvbiBXKFkpe3JldHVybiBZIGluc3RhbmNlb2YgSz9ZOm5ldyBLKGZ1bmN0aW9uKFgpe1goWSl9KX0oaWUudmFsdWUpLnRoZW4oZWUsSil9cmUoKFU9VS5hcHBseShOLEx8fFtdKSkubmV4dCgpKX0pfSx5PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihO'@;
put 'KXtyZXR1cm4gTiYmTi5fX2VzTW9kdWxlP046e2RlZmF1bHQ6Tn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLlNBU2pzQXBpQ2xpZW50PXZvaWQgMDtjb25zdCBnPXkoXyg2MjMwKSksQj1fKDM5MDApLHc9Xyg5Nzc4KSxQPV8oNTcpLEY9Xygy'@;
put 'NDkpLE89Xyg3MDQpO3EuU0FTanNBcGlDbGllbnQ9Y2xhc3Mgentjb25zdHJ1Y3RvcihMKXt0aGlzLnJlcXVlc3RDbGllbnQ9TH1nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKEwpe2NvbnN0e2FjY2Vzc190b2tl'@;
put 'bjpLfT15aWVsZCgwLE8uZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQsTCxCLlNlcnZlclR5cGUuU2FzanMpO3JldHVybiBLfX0pfWRlcGxveShMLEssVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9eWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tl'@;
put 'bkZvclJlcXVlc3QoVSk7TC5hcHBMb2M9TC5hcHBMb2N8fEs7Y29uc3R7cmVzdWx0Oll9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9kcml2ZS9kZXBsb3kiLEwsVyx2b2lkIDAse30se21heENvbnRlbnRMZW5ndGg6MS8wLG1heEJvZHlMZW5ndGg6MS8wfSk7cmV0'@;
put 'dXJuIFByb21pc2UucmVzb2x2ZShZKX0pfWRlcGxveVppcEZpbGUoTCxLKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7Y3JlYXRlUmVhZFN0cmVhbTpVfT1fKDI5NzUpLFc9eWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoSyksWT15aWVs'@;
put 'ZCBVKEwpLFg9bmV3IGcuZGVmYXVsdDtYLmFwcGVuZCgiZmlsZSIsWSk7Y29uc3QgZWU9YG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7WC5nZXRCb3VuZGFyeSgpfWAse3Jlc3VsdDpKfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95'@;
put 'L3VwbG9hZCIsWCxXLGVlLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVuZ3RoOjEvMH0pO3JldHVybiBQcm9taXNlLnJlc29sdmUoSil9KX1leGVjdXRlSm9iKEwsSyxVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz1VP1UuYWNjZXNz'@;
put 'X3Rva2VuOnZvaWQgMDtsZXQgWTtZPUwuX3Byb2dyYW0uc3RhcnRzV2l0aCgiLyIpP0wuX3Byb2dyYW06YCR7S30vJHtMLl9wcm9ncmFtfWA7Y29uc3QgWD15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvc3RwL2V4ZWN1dGUiLE9iamVjdC5hc3NpZ24oT2JqZWN0LmFz'@;
put 'c2lnbih7X2RlYnVnOjEzMX0sTCkse19wcm9ncmFtOll9KSxXKTtyZXR1cm57cmVzdWx0OlgucmVzdWx0LGxvZzpYLmxvZ319KX1leGVjdXRlU2NyaXB0KEwsSz0ic2FzIixVKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz15aWVsZCB0aGlzLmdldEFj'@;
put 'Y2Vzc1Rva2VuRm9yUmVxdWVzdChVKSxZPXtsb2c6IiJ9O3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvY29kZS9leGVjdXRlIix7Y29kZTpMLHJ1blRpbWU6S30sVykudGhlbihYPT57Y29uc3R7bG9nOmVlLHByaW50T3V0cHV0OkoscmVzdWx0OnJlfT1Y'@;
put 'O1kubG9nPWVlLEomJihZLnByaW50T3V0cHV0PUopLHJlJiYoWS53ZWJvdXQ9cmUpfSkuY2F0Y2goWD0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShYLCJFcnJvciB3aGlsZSBzZW5kaW5nIFBPU1QgcmVxdWVzdCB0byBleGVjdXRlIGNvZGUuICIpfSksWX0pfWdldEFjY2Vzc1Rva2VuKEws'@;
put 'Syl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFAuZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LEwsSyl9KX1yZWZyZXNoVG9rZW5zKEwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1'@;
put 'cm4oMCxGLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykodGhpcy5yZXF1ZXN0Q2xpZW50LEwpfSl9fX0sNjkwMzpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9Xyg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLEwsSyxVKXtyZXR1cm4g'@;
put 'bmV3KEt8fChLPVByb21pc2UpKShmdW5jdGlvbihZLFgpe2Z1bmN0aW9uIGVlKGllKXt0cnl7cmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUpe1gobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7cmUoVS50aHJvdyhpZSkpfWNhdGNoKGxlKXtYKGxlKX19ZnVuY3Rpb24gcmUoaWUpe2llLmRvbmU/WShp'@;
put 'ZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIEs/WTpuZXcgSyhmdW5jdGlvbihYKXtYKFkpfSl9KGllLnZhbHVlKS50aGVuKGVlLEopfXJlKChVPVUuYXBwbHkoTixMfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUi'@;
put 'LHt2YWx1ZTohMH0pLHEuU2Vzc2lvbk1hbmFnZXI9dm9pZCAwO2NvbnN0IEI9XygxMjMwKSx3PV8oMTM5NSksUD1fKDU5MjgpLEY9Xyg5Nzc4KTtxLlNlc3Npb25NYW5hZ2VyPWNsYXNzIHp7Y29uc3RydWN0b3IoTCxLLFUpe3RoaXMuc2VydmVyVXJsPUwsdGhpcy5jb250ZXh0TmFtZT1LLHRo'@;
put 'aXMucmVxdWVzdENsaWVudD1VLHRoaXMubG9nZ2VkRXJyb3JzPVtdLHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yPSJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gc3RhdGUgbGluay4gIix0aGlzLnNlc3Npb25zPVtdLHRoaXMuY3VycmVudENvbnRleHQ9bnVsbCx0aGlzLnNldHRpbmdD'@;
put 'b250ZXh0PSExLHRoaXMuX2RlYnVnPSExLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZT17cHJpbnRlZDohMSxzdGF0ZTpCLlNlc3Npb25TdGF0ZS5Ob1N0YXRlfSxMJiYoMCxQLmlzVXJsKShMKX1nZXQgZGVidWcoKXtyZXR1cm4gdGhpcy5fZGVidWd9c2V0IGRlYnVnKEwpe3RoaXMuX2RlYnVn'@;
put 'PUx9aXNTZXNzaW9uVmFsaWQoTCl7aWYoIUwpcmV0dXJuITE7Y29uc3QgSz0oKG5ldyBEYXRlKS5nZXRUaW1lKCktbmV3IERhdGUoTC5jcmVhdGlvblRpbWVTdGFtcCkuZ2V0VGltZSgpKS8xZTM7cmV0dXJuISghTC5hdHRyaWJ1dGVzfHxLPj1MLmF0dHJpYnV0ZXMuc2Vzc2lvbkluYWN0aXZl'@;
put 'VGltZW91dCl9cmVtb3ZlU2Vzc2lvbkZyb21Qb29sKEwpe3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoSz0+Sy5pZCE9PUwuaWQpfXJlbW92ZUV4cGlyZWRTZXNzaW9ucygpe3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0ZXIoTD0+dGhpcy5pc1Nlc3Npb25WYWxp'@;
put 'ZChMKSl9dGhyb3dFcnJvcnMoTCxLKXt0aHJvdyBLPygwLEYucHJlZml4TWVzc2FnZSkobmV3IEVycm9yKEwuam9pbigiLiAiKSksSyk6bmV3IEVycm9yKEwubWFwKFU9PlUubWVzc2FnZT9VLm1lc3NhZ2U6VSkuam9pbigiLiAiKSl9Z2V0U2Vzc2lvbihMKXtyZXR1cm4gZyh0aGlzLHZvaWQg'@;
put 'MCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1bXTtsZXQgVT0hMTtjb25zdCBXPSgpPT57Sy5sZW5ndGgmJiFVJiYoVT0hMCx0aGlzLnRocm93RXJyb3JzKEspKX07aWYodGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKSx0aGlzLnNlc3Npb25zLmxlbmd0aCl7Y29uc3QgWT10aGlzLnNl'@;
put 'c3Npb25zWzBdO3JldHVybiB0aGlzLnJlbW92ZVNlc3Npb25Gcm9tUG9vbChZKSx0aGlzLmNyZWF0ZVNlc3Npb25zKEwpLmNhdGNoKFg9PntLLnB1c2goWCl9KSx0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKEwpLmNhdGNoKFg9PntLLnB1c2goWCl9KSxXKCksWX17dGhpcy5jcmVhdGVT'@;
put 'ZXNzaW9ucyhMKS5jYXRjaChYPT57Sy5wdXNoKFgpfSkseWllbGQgdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihMKS5jYXRjaChYPT57Sy5wdXNoKFgpfSksdGhpcy5yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKTtjb25zdCBZPXRoaXMuc2Vzc2lvbnMucG9wKCk7cmV0dXJuIHRoaXMucmVt'@;
put 'b3ZlU2Vzc2lvbkZyb21Qb29sKFkpLFcoKSxZfX0pfWdldEVycm9yTWVzc2FnZShMLEssVSl7cmV0dXJuYCR7VX0gcmVxdWVzdCB0byAke0t9IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICR7TC5yZXNwb25zZS5zdGF0dXN8fCJ1bmtub3duIn0uIGArTC5yZXNwb25zZS5kYXRhLm1lc3NhZ2V8'@;
put 'fCIifWNsZWFyU2Vzc2lvbihMLEspe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBVPWAvY29tcHV0ZS9zZXNzaW9ucy8ke0x9YDtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShVLEspLnRoZW4oKCk9Pnt0aGlzLnNlc3Npb25zPXRo'@;
put 'aXMuc2Vzc2lvbnMuZmlsdGVyKFc9PlcuaWQhPT1MKX0pLmNhdGNoKFc9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoVyxVLCJERUxFVEUiKSwiRXJyb3Igd2hpbGUgZGVsZXRpbmcgc2Vzc2lvbi4gIil9KX0pfWNyZWF0ZVNlc3Npb25zKEwpe3JldHVy'@;
put 'biBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPVtdO3RoaXMuc2Vzc2lvbnMubGVuZ3RofHwoeWllbGQoMCxQLmFzeW5jRm9yRWFjaCkobmV3IEFycmF5KDEpLCgpPT5nKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCB0aGlzLmNyZWF0ZUFuZFdh'@;
put 'aXRGb3JTZXNzaW9uKEwpLmNhdGNoKFU9PntLLnB1c2goVSl9KX0pKSksSy5sZW5ndGgmJnRoaXMudGhyb3dFcnJvcnMoSywiRXJyb3Igd2hpbGUgY3JlYXRpbmcgc2Vzc2lvbi4gIil9KX13YWl0Rm9yQ3VycmVudENvbnRleHQoKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp'@;
put 'b24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKEw9Pntjb25zdCBLPXNldEludGVydmFsKCgpPT57dGhpcy5jdXJyZW50Q29udGV4dCYmKHRoaXMuc2V0dGluZ0NvbnRleHQ9ITEsY2xlYXJJbnRlcnZhbChLKSxMKCkpfSwxMDApfSl9KX1jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihMKXtyZXR1cm4g'@;
put 'Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5jdXJyZW50Q29udGV4dHx8KHRoaXMuc2V0dGluZ0NvbnRleHQ/eWllbGQgdGhpcy53YWl0Rm9yQ3VycmVudENvbnRleHQoKTp5aWVsZCB0aGlzLnNldEN1cnJlbnRDb250ZXh0KEwpKTtjb25zdCBLPWAke3RoaXMuc2VydmVy'@;
put 'VXJsfS9jb21wdXRlL2NvbnRleHRzLyR7dGhpcy5jdXJyZW50Q29udGV4dC5pZH0vc2Vzc2lvbnNgLHtyZXN1bHQ6VSxldGFnOld9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KEsse30sTCkuY2F0Y2goWD0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVycm9yTWVz'@;
put 'c2FnZShYLEssIlBPU1QiKSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgc2Vzc2lvbi4gIil9KTtVLmV0YWc9Vztjb25zdCBZPVUubGlua3MuZmluZChYPT4ic3RhdGUiPT09WC5yZWwpO2lmKCFZKXRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yO3JldHVybiBVLnN0YXRlVXJsPVkuaHJl'@;
put 'Zix5aWVsZCB0aGlzLndhaXRGb3JTZXNzaW9uKFUsVyxMKSx0aGlzLnNlc3Npb25zLnB1c2goVSksVX0pfXNldEN1cnJlbnRDb250ZXh0KEwpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5jdXJyZW50Q29udGV4dCl7Y29uc3QgSz1gJHt0aGlzLnNl'@;
put 'cnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGA7dGhpcy5zZXR0aW5nQ29udGV4dD0hMDtjb25zdHtyZXN1bHQ6VX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChLLEwpLmNhdGNoKFg9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3Nh'@;
put 'Z2UoWCxLLCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsaXN0IG9mIGNvbnRleHRzLiAiKX0pLFk9KFUmJlUuaXRlbXMmJlUuaXRlbXMubGVuZ3RoP1UuaXRlbXM6W10pLmZpbmQoWD0+WC5uYW1lPT09dGhpcy5jb250ZXh0TmFtZSk7aWYoIVkpdGhyb3cgbmV3IEVycm9yKGBUaGUgY29u'@;
put 'dGV4dCAnJHt0aGlzLmNvbnRleHROYW1lfScgd2FzIG5vdCBmb3VuZCBvbiB0aGUgc2VydmVyICR7dGhpcy5zZXJ2ZXJVcmx9LmApO3RoaXMuY3VycmVudENvbnRleHQ9WSxQcm9taXNlLnJlc29sdmUoKX19KX13YWl0Rm9yU2Vzc2lvbihMLEssVSl7dmFyIFc7cmV0dXJuIGcodGhpcyx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldHtzdGF0ZTpZfT1MO2NvbnN0e3N0YXRlVXJsOlh9PUwsZWU9SS5sb2dnZXJ8fHk7aWYoWT09PUIuU2Vzc2lvblN0YXRlLlBlbmRpbmd8fFk9PT1CLlNlc3Npb25TdGF0ZS5SdW5uaW5nfHxZPT09Qi5TZXNzaW9uU3RhdGUuTm9TdGF0ZSl7aWYoWCl7'@;
put 'dGhpcy5kZWJ1ZyYmIXRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkJiYoZWUuaW5mbyhgUG9sbGluZzogJHt0aGlzLnNlcnZlclVybCtYfWApLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSEwKTtjb25zdCBKPWAke3RoaXMuc2VydmVyVXJsfSR7WH0/d2FpdD0zMGAs'@;
put 'e3Jlc3VsdDpyZSxyZXNwb25zZVN0YXR1czppZX09eWllbGQgdGhpcy5nZXRTZXNzaW9uU3RhdGUoSixLLFUpLmNhdGNoKGxlPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGxlLCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBzZXNzaW9uLiAiKX0pO2lmKFk9cmUudHJpbSgpLHRoaXMuZGVi'@;
put 'dWcmJnRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZSE9PVkmJihlZS5pbmZvKGBDdXJyZW50IHNlc3Npb24gc3RhdGUgaXMgJyR7WX0nYCksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlPVksdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQ9ITEpLCFZKXtjb25zdCBs'@;
put 'ZT1uZXcgdy5Ob1Nlc3Npb25TdGF0ZUVycm9yKGllLHRoaXMuc2VydmVyVXJsK1gsbnVsbD09PShXPUwubGlua3MuZmluZChtZT0+ImxvZyI9PT1tZS5yZWwpKXx8dm9pZCAwPT09Vz92b2lkIDA6Vy5ocmVmKTtyZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnMuZmluZChtZT0+bWUuc2VydmVyUmVz'@;
put 'cG9uc2VTdGF0dXM9PT1sZS5zZXJ2ZXJSZXNwb25zZVN0YXR1cyl8fCh0aGlzLmxvZ2dlZEVycm9ycy5wdXNoKGxlKSxlZS5pbmZvKGxlLm1lc3NhZ2UpKSx5aWVsZCB0aGlzLndhaXRGb3JTZXNzaW9uKEwsSyxVKX1yZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnM9W10sWX10aHJvdyB0aGlzLnNl'@;
put 'c3Npb25TdGF0ZUxpbmtFcnJvcn1yZXR1cm4gdGhpcy5sb2dnZWRFcnJvcnM9W10sWX0pfWdldFNlc3Npb25TdGF0ZShMLEssVSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KEwsVSwidGV4dC9wbGFp'@;
put 'biIseyJJZi1Ob25lLU1hdGNoIjpLfSkudGhlbihXPT4oe3Jlc3VsdDpXLnJlc3VsdCxyZXNwb25zZVN0YXR1czpXLnN0YXR1c30pKS5jYXRjaChXPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFcsTCwiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcg'@;
put 'c2Vzc2lvbiBzdGF0ZS4gIil9KX0pfWdldFZhcmlhYmxlKEwsSyxVKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz1gJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9zZXNzaW9ucy8ke0x9L3ZhcmlhYmxlcy8ke0t9YDtyZXR1cm4geWllbGQgdGhpcy5y'@;
put 'ZXF1ZXN0Q2xpZW50LmdldChXLFUpLmNhdGNoKFk9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoWSxXLCJHRVQiKSxgRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc2Vzc2lvbiB2YXJpYWJsZSAnJHtLfScuIGApfSl9KX19fSwxNjIyOmZ1bmN0aW9uKHVlLHEs'@;
put 'Xyl7InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSkseT1fKDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFUsVyxZLFgpe3JldHVybiBuZXcoWXx8KFk9UHJvbWlzZSkpKGZ1bmN0aW9uKEoscmUpe2Z1bmN0aW9uIGllKF9lKXt0cnl7bWUoWC5uZXh0KF9lKSl9Y2F0Y2go'@;
put 'VGUpe3JlKFRlKX19ZnVuY3Rpb24gbGUoX2Upe3RyeXttZShYLnRocm93KF9lKSl9Y2F0Y2goVGUpe3JlKFRlKX19ZnVuY3Rpb24gbWUoX2Upe19lLmRvbmU/SihfZS52YWx1ZSk6ZnVuY3Rpb24gZWUoSil7cmV0dXJuIEogaW5zdGFuY2VvZiBZP0o6bmV3IFkoZnVuY3Rpb24ocmUpe3JlKEop'@;
put 'fSl9KF9lLnZhbHVlKS50aGVuKGllLGxlKX1tZSgoWD1YLmFwcGx5KFUsV3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmV4ZWN1dGVPbkNvbXB1dGVBcGk9dm9pZCAwO2NvbnN0IEI9Xyg3NzU3KSx3PV8oOTc3OCks'@;
put 'UD1fKDM2MDcpLEY9Xyg3MDQpLE89Xyg1OTI4KSx6PV8oNzE0KSxOPV8oMTM0MyksTD1fKDY0OTYpO3EuZXhlY3V0ZU9uQ29tcHV0ZUFwaT1mdW5jdGlvbiBLKFUsVyxZLFgsZWUsSixyZSxpZT1udWxsLGxlPSExLG1lPSExLF9lPSEwLFRlLFNlPSExLHplKXt2YXIgVixwO3JldHVybiBnKHRo'@;
put 'aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgYj0ocmV8fHt9KS5hY2Nlc3NfdG9rZW47cmUmJih7YWNjZXNzX3Rva2VuOmJ9PXlpZWxkKDAsRi5nZXRUb2tlbnMpKFUscmUpKTtjb25zdCB4PUkubG9nZ2VyfHx5O3RyeXtsZXQgQztjb25zdCBUPXlpZWxkIFcuZ2V0U2Vzc2lvbihi'@;
put 'KS5jYXRjaChNZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShNZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uLiAiKX0pO2lmKEM9VC5pZCxTZSl7Y29uc3R7cmVzdWx0Ok1lfT15aWVsZCBXLmdldFZhcmlhYmxlKEMsIlNZU0pPQklEIixiKS5jYXRjaCh2ZT0+e3Rocm93KDAsdy5w'@;
put 'cmVmaXhNZXNzYWdlKSh2ZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHZhcmlhYmxlLiAiKX0pO2lmKE1lJiZNZS52YWx1ZSl7Y29uc3QgdmU9WT9YLnNwbGl0KFkpLmpvaW4oIiIpLnJlcGxhY2UoL15cLy8sIiIpOlg7KEkubG9nZ2VyfHx5KS5pbmZvKGBUcmlnZ2VyaW5nICcke3Zl'@;
put 'fScgd2l0aCBQSUQgJHtNZS52YWx1ZX0gYXQgJHsoMCxCLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1MpKCl9YCl9fWxldCBIO0g9KDAsTy5pc1JlbGF0aXZlUGF0aCkoWCk/YGV4ZWMtJHtYLmluY2x1ZGVzKCIvIik/WC5zcGxpdCgiLyIpWzFdOlh9YDpYLnNwbGl0KCIvIikucG9wKCk7bGV0'@;
put 'IGo9e1NZU19KRVNfSk9CX1VSSToiIixfcHJvZ3JhbTooMCxPLmlzUmVsYXRpdmVQYXRoKShYKT9ZKyIvIitYOlh9O3plJiYoaj1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30saiksemUpKSxsZSYmKGo9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGopLHtfREVCVUc6MTMx'@;
put 'fSkpO2xldCBFPVtdO2llJiYoSlNPTi5zdHJpbmdpZnkoaWUpLmluY2x1ZGVzKCI7Iik/KEU9eWllbGQoMCxMLnVwbG9hZFRhYmxlcykoVSxpZSxiKS5jYXRjaChNZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShNZSwiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIHRhYmxlcy4gIil9KSxqLl93'@;
put 'ZWJpbl9maWxlX2NvdW50PUUubGVuZ3RoLEUuZm9yRWFjaCgoTWUsdmUpPT57altgX3dlYmluX2ZpbGV1cmkke3ZlKzF9YF09YC9maWxlcy9maWxlcy8ke01lLmZpbGUuaWR9YCxqW2Bfd2ViaW5fbmFtZSR7dmUrMX1gXT1NZS50YWJsZU5hbWV9KSk6aj1PYmplY3QuYXNzaWduKE9iamVjdC5h'@;
put 'c3NpZ24oe30saiksKDAsei5mb3JtYXREYXRhRm9yUmVxdWVzdCkoaWUpKSk7Y29uc3QgbT17bmFtZTpIfHwiRGVmYXVsdCBKb2IgTmFtZSIsZGVzY3JpcHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGNvZGU6ZWUsdmFyaWFibGVzOmosdmVyc2lvbjoyfSx7cmVzdWx0OkF9PXlpZWxkIFUucG9z'@;
put 'dChgL2NvbXB1dGUvc2Vzc2lvbnMvJHtDfS9qb2JzYCxtLGIpLmNhdGNoKE1lPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKE1lLCJFcnJvciB3aGlsZSBwb3N0aW5nIGpvYi4gIil9KTtpZighX2UpcmV0dXJuIFQ7bGUmJih4LmluZm8oYEpvYiBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yICck'@;
put 'e0h9Jy5gKSx4LmluZm8oYFlvdSBjYW4gbW9uaXRvciB0aGUgam9iIHByb2dyZXNzIGF0ICcke1UuZ2V0QmFzZVVybCgpfSR7QS5saW5rcy5maW5kKE1lPT4ic3RhdGUiPT09TWUucmVsKS5ocmVmfScuYCkpO2NvbnN0IHRlPXlpZWxkKDAsTi5wb2xsSm9iU3RhdGUpKFUsQSxsZSxyZSxUZSx7'@;
put 'c2Vzc2lvbjpULHNlc3Npb25NYW5hZ2VyOld9KS5jYXRjaChNZT0+Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHZlLFhlO2NvbnN0IGplPW51bGw9PT0odmU9TWU/LnJlc3BvbnNlKXx8dm9pZCAwPT09dmU/dm9pZCAwOnZlLmRhdGEsRGU9L2Vycj1bMC05XSosLy5leGVj'@;
put 'KGplKTtpZigiNTExMyI9PT0obnVsbD09PShYZT1EZT8uWzBdKXx8dm9pZCAwPT09WGU/dm9pZCAwOlhlLnNsaWNlKDQsLTEpKSl7Y29uc3QgSWU9QS5saW5rcy5maW5kKFZlPT4idXAiPT09VmUucmVsKS5ocmVmKyIvbG9nIjtNZS5sb2c9eWllbGQoMCxPLmZldGNoTG9nQnlDaHVua3MpKFUs'@;
put 'YixJZSwxZTYpfXRocm93KDAsdy5wcmVmaXhNZXNzYWdlKShNZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX0pKTtyZSYmKHthY2Nlc3NfdG9rZW46Yn09eWllbGQoMCxGLmdldFRva2VucykoVSxyZSkpO2NvbnN0e3Jlc3VsdDpzZX09eWllbGQgVS5nZXQoYC9jb21wdXRl'@;
put 'L3Nlc3Npb25zLyR7Q30vam9icy8ke0EuaWR9YCxiKS5jYXRjaChNZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShNZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IuICIpfSk7bGV0IHdlLFVlPSIiO2NvbnN0IEplPXNlLmxpbmtzLmZpbmQoTWU9PiJsb2ciPT09TWUucmVsKTtpZihsZSYm'@;
put 'SmUpe2NvbnN0IE1lPWAke0plLmhyZWZ9L2NvbnRlbnRgLHZlPW51bGwhPT0ocD1udWxsPT09KFY9c2UubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PVY/dm9pZCAwOlYubGluZUNvdW50KSYmdm9pZCAwIT09cD9wOjFlNjtVZT15aWVsZCgwLE8uZmV0Y2hMb2dCeUNodW5rcykoVSxiLE1lLHZl'@;
put 'KX1pZih0ZT09PU4uSm9iU3RhdGUuRmFpbGVkfHx0ZT09PU4uSm9iU3RhdGUuRXJyb3IpdGhyb3cgbmV3IFAuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yKHNlLFVlKTtpZighbWUpcmV0dXJue2pvYjpzZSxsb2c6VWV9O2NvbnN0IGF0PWAvY29tcHV0ZS9zZXNzaW9ucy8ke0N9L2ZpbGVyZWZz'@;
put 'L193ZWJvdXQvY29udGVudGA7cmV0dXJuIHdlPXlpZWxkIFUuZ2V0KGF0LGIsInRleHQvcGxhaW4iKS5jYXRjaChNZT0+Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIHZlLFhlO2lmKE1lIGluc3RhbmNlb2YgUC5Ob3RGb3VuZEVycm9yJiZKZSl7Y29uc3QgamU9YCR7SmUu'@;
put 'aHJlZn0vY29udGVudGAsRGU9bnVsbCE9PShYZT1udWxsPT09KHZlPXNlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT12ZT92b2lkIDA6dmUubGluZUNvdW50KSYmdm9pZCAwIT09WGU/WGU6MWU2O3JldHVybiBVZT15aWVsZCgwLE8uZmV0Y2hMb2dCeUNodW5rcykoVSxiLGplLERlKSxQcm9t'@;
put 'aXNlLnJlamVjdCh7c3RhdHVzOjUwMCxsb2c6VWV9KX1yZXR1cm57cmVzdWx0OkpTT04uc3RyaW5naWZ5KE1lKX19KSkseWllbGQgVy5jbGVhclNlc3Npb24oQyxiKS5jYXRjaChNZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShNZSwiRXJyb3Igd2hpbGUgY2xlYXJpbmcgc2Vzc2lvbi4g'@;
put 'Iil9KSx7cmVzdWx0OndlPy5yZXN1bHQsbG9nOlVlfX1jYXRjaChDKXtpZig0MDQ9PT1DLnN0YXR1cylyZXR1cm4gSyhVLFcsWSxYLGVlLEoscmUsaWUsbGUsITEsITApO3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShDLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgc2NyaXB0LiAiKX19KX19LDc0'@;
put 'NTg6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KSx5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEYsTyx6KXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihMLEspe2Z1bmN0aW9uIFUoWCl7dHJ5e1koei5uZXh0KFgpKX1jYXRj'@;
put 'aChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcoWCl7dHJ5e1koei50aHJvdyhYKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBZKFgpe1guZG9uZT9MKFgudmFsdWUpOmZ1bmN0aW9uIE4oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBPP0w6bmV3IE8oZnVuY3Rpb24oSyl7SyhMKX0pfShYLnZhbHVl'@;
put 'KS50aGVuKFUsVyl9WSgoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmdldEZpbGVTdHJlYW09dm9pZCAwO2NvbnN0IGc9XygyOTc1KSxCPV8oNzc1Nyk7cS5nZXRGaWxlU3RyZWFtPShQLEYp'@;
put 'PT55KHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2NyZWF0ZVdyaXRlU3RyZWFtOk99PV8oMjk3NSksej1GfHxJLmN3ZCgpO2lmKHlpZWxkKDAsZy5pc0ZvbGRlcikoeikpe2NvbnN0IEw9YCR7UC5uYW1lfHwiam9iIn0tJHsoMCxCLmdlbmVyYXRlVGltZXN0YW1wKSgp'@;
put 'fS5sb2dgLFU9XygyNTIwKS5qb2luKEZ8fEkuY3dkKCksTCk7cmV0dXJuIHlpZWxkIE8oVSl9cmV0dXJuIHlpZWxkIE8oeil9KX0sMTM0MzpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9Xyg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlv'@;
put 'bihXLFksWCxlZSl7cmV0dXJuIG5ldyhYfHwoWD1Qcm9taXNlKSkoZnVuY3Rpb24ocmUsaWUpe2Z1bmN0aW9uIGxlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIG1lKFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1m'@;
put 'dW5jdGlvbiBfZShUZSl7VGUuZG9uZT9yZShUZS52YWx1ZSk6ZnVuY3Rpb24gSihyZSl7cmV0dXJuIHJlIGluc3RhbmNlb2YgWD9yZTpuZXcgWChmdW5jdGlvbihpZSl7aWUocmUpfSl9KFRlLnZhbHVlKS50aGVuKGxlLG1lKX1fZSgoZWU9ZWUuYXBwbHkoVyxZfHxbXSkpLm5leHQoKSl9KX07'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZG9Qb2xsPXEucG9sbEpvYlN0YXRlPXEuSm9iU3RhdGU9dm9pZCAwO2NvbnN0IEI9Xyg3MDQpLHc9XygxMzk1KSxQPV8oMTIzMCksRj1fKDU5MjgpO3ZhciBPLFc7KFc9Tz1xLkpvYlN0YXRlfHwocS5K'@;
put 'b2JTdGF0ZT17fSkpLkNvbXBsZXRlZD0iY29tcGxldGVkIixXLlJ1bm5pbmc9InJ1bm5pbmciLFcuUGVuZGluZz0icGVuZGluZyIsVy5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLFcuTm9TdGF0ZT0iIixXLkZhaWxlZD0iZmFpbGVkIixXLkVycm9yPSJlcnJvciIscS5wb2xsSm9iU3RhdGU9'@;
put 'ZnVuY3Rpb24geihXLFksWCxlZSxKLHJlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgaWU9SS5sb2dnZXJ8fHksbGU9Sj8uc3RyZWFtTG9nfHwhMSxtZT1be21heFBvbGxDb3VudDoyMDAscG9sbEludGVydmFsOjMwMH0se21heFBvbGxDb3VudDozMDAs'@;
put 'cG9sbEludGVydmFsOjNlM30se21heFBvbGxDb3VudDo1MDAscG9sbEludGVydmFsOjNlNH0se21heFBvbGxDb3VudDozNDAwLHBvbGxJbnRlcnZhbDo2ZTR9XTtsZXQgX2U7aWYodm9pZCAwIT09Sil7X2U9W0pdO2xldHtwb2xsU3RyYXRlZ3k6eH09Sjt2b2lkIDAhPT14PyhVKHgpLHg9eC5z'@;
put 'b3J0KChDLFQpPT5DLm1heFBvbGxDb3VudC1ULm1heFBvbGxDb3VudCksX2U9Wy4uLl9lLC4uLnhdKTpfZT1bLi4uX2UsLi4ubWVdfWVsc2UgX2U9bWU7bGV0IFRlPV9lLnNwbGljZSgwLDEpWzBdO0o9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LFRlKSxKfHx7fSk7Y29uc3QgU2U9'@;
put 'WS5saW5rcy5maW5kKHg9PiJzdGF0ZSI9PT14LnJlbCk7aWYoIVNlKXRocm93IG5ldyBFcnJvcigiSm9iIHN0YXRlIGxpbmsgd2FzIG5vdCBmb3VuZC4iKTtsZXQgcCx6ZT15aWVsZCBOKFcsWSxPLk5vU3RhdGUsWCxlZSkuY2F0Y2goeD0+KGllLmVycm9yKGBFcnJvciBmZXRjaGluZyBqb2Ig'@;
put 'c3RhdGUgZnJvbSAke1NlLmhyZWZ9LiBTdGFydGluZyBwb2xsLCBhc3N1bWluZyBqb2IgdG8gYmUgcnVubmluZy5gLHgpLE8uVW5hdmFpbGFibGUpKSxWPTA7aWYoemU9PT1PLkNvbXBsZXRlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHplKTtpZihsZSYmKDAsRi5pc05vZGUpKCkpe2NvbnN0'@;
put 'e2dldEZpbGVTdHJlYW06eH09Xyg3NDU4KTtwPXlpZWxkIHgoWSxKLmxvZ0ZvbGRlclBhdGgpfWxldCBiPXlpZWxkKDAscS5kb1BvbGwpKFcsWSx6ZSxYLFYsSixlZSxsZSxwLHJlKTtpZih6ZT1iLnN0YXRlLFY9Yi5wb2xsQ291bnQsIUwoemUpfHxWPj1KLm1heFBvbGxDb3VudCYmIV9lLmxl'@;
put 'bmd0aClyZXR1cm4gemU7Zm9yKDtfZS5sZW5ndGgmJkwoemUpOylUZT1fZS5zcGxpY2UoMCwxKVswXSxKJiYoVGUubG9nRm9sZGVyUGF0aD1KLmxvZ0ZvbGRlclBhdGgpLGI9eWllbGQoMCxxLmRvUG9sbCkoVyxZLHplLFgsVixUZSxlZSxsZSxwLHJlKSx6ZT1iLnN0YXRlLFY9Yi5wb2xsQ291'@;
put 'bnQ7cmV0dXJuIHAmJnAuZW5kKCksemV9KX07Y29uc3QgTj0oVyxZLFgsZWUsSik9Pmcodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgcmU9WS5saW5rcy5maW5kKGllPT4ic3RhdGUiPT09aWUucmVsKTtpZihMKFgpKXtsZXQgaWU7SiYmKGllPXlpZWxkKDAsQi5nZXRU'@;
put 'b2tlbnMpKFcsSikpO2NvbnN0e3Jlc3VsdDpsZX09eWllbGQgVy5nZXQoYCR7cmUuaHJlZn0/X2FjdGlvbj13YWl0JndhaXQ9MzAwYCxpZT8uYWNjZXNzX3Rva2VuLCJ0ZXh0L3BsYWluIix7fSxlZSkuY2F0Y2gobWU9Pnt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJvcihZLmlkLG1lKX0p'@;
put 'O3JldHVybiBsZS50cmltKCl9cmV0dXJuIFh9KSxMPVc9Plc9PT1PLlJ1bm5pbmd8fFc9PT1PLk5vU3RhdGV8fFc9PT1PLlBlbmRpbmd8fFc9PT1PLlVuYXZhaWxhYmxlO3EuZG9Qb2xsPShXLFksWCxlZSxKLHJlLGllLGxlLG1lLF9lKT0+Zyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'biooKXt2YXIgVGUsU2U7Y29uc3R7bWF4UG9sbENvdW50OnplLHBvbGxJbnRlcnZhbDpWfT1yZSxwPUkubG9nZ2VyfHx5LGI9WS5saW5rcy5maW5kKEU9PiJzdGF0ZSI9PT1FLnJlbCk7bGV0IEM9MCxUPVgsSD1PLk5vU3RhdGUsaj0wO2Zvcig7TChUKSYmSjw9emU7KXtpZihfZSYmSiYmSiUx'@;
put 'MD09MCYmaWUpe2NvbnN0e3Nlc3Npb246bSxzZXNzaW9uTWFuYWdlcjpBfT1fZSx7c3RhdGVVcmw6b2UsZXRhZzp0ZSxpZDpzZX09bSx7YWNjZXNzX3Rva2VuOndlfT1pZSx7aWQ6VWV9PVkse3Jlc3VsdDpKZSxyZXNwb25zZVN0YXR1czphdH09eWllbGQgQS5nZXRTZXNzaW9uU3RhdGUob2Us'@;
put 'dGUsd2UpLmNhdGNoKHZlPT57dGhyb3cgbmV3IHcuSm9iU3RhdGVQb2xsRXJyb3IoVWUsdmUpfSksTWU9dmU9PltQLlNlc3Npb25TdGF0ZS5SdW5uaW5nLFAuU2Vzc2lvblN0YXRlLklkbGVdLmluY2x1ZGVzKHZlKTtpZighTWUoSmUpfHwyMDAhPT1hdCl7QS5jbGVhclNlc3Npb24oc2Usd2Up'@;
put 'O2NvbnN0IHZlPU1lKEplKT9gU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMgbm90IDIwMC4gU2Vzc2lvbiByZXNwb25zZSBzdGF0dXMgaXMgJHthdH0uYDpgU2Vzc2lvbiBzdGF0ZSBvZiB0aGUgam9iIGlzIG5vdCAncnVubmluZycgb3IgJ2lkbGUnLiBTZXNzaW9uIHN0YXRlIGlzICcke0pl'@;
put 'fSdgO3Rocm93IG5ldyB3LkpvYlN0YXRlUG9sbEVycm9yKFVlLG5ldyBFcnJvcih2ZSkpfX1UPXlpZWxkIE4oVyxZLFQsZWUsaWUpLmNhdGNoKG09PntpZihDKyssSj49emV8fEM+PTUpdGhyb3cgbTtyZXR1cm4gcC5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gJHtiLmhy'@;
put 'ZWZ9LiBSZXN1bWluZyBwb2xsLCBhc3N1bWluZyBqb2IgdG8gYmUgcnVubmluZy5gLG0pLE8uVW5hdmFpbGFibGV9KSxKKys7Y29uc3QgRT1ZLmxpbmtzLmZpbmQobT0+InNlbGYiPT09bS5yZWwpLmhyZWY7aWYobGUpe2NvbnN0e3Jlc3VsdDptfT15aWVsZCBXLmdldChFLGllPy5hY2Nlc3Nf'@;
put 'dG9rZW4pLEE9bnVsbCE9PShTZT1udWxsPT09KFRlPW0ubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PVRlP3ZvaWQgMDpUZS5saW5lQ291bnQpJiZ2b2lkIDAhPT1TZT9TZToxZTYse3NhdmVMb2c6b2V9PSgwLEYuaXNOb2RlKSgpP18oMjA4MCk6e3NhdmVMb2c6bnVsbH07b2UmJih5aWVsZCBv'@;
put 'ZShZLFcsaixBLG1lLGllPy5hY2Nlc3NfdG9rZW4pKSxqKz1BfWVlJiZIIT09VCYmKHAuaW5mbyhgUG9sbGluZzogJHtXLmdldEJhc2VVcmwoKStFfS9zdGF0ZWApLHAuaW5mbyhgQ3VycmVudCBqb2Igc3RhdGU6ICR7VH1gKSxIPVQpLFQhPT1PLlVuYXZhaWxhYmxlJiZDPjAmJihDPTApLFQh'@;
put 'PT1PLkNvbXBsZXRlZCYmKHlpZWxkKDAsRi5kZWxheSkoVikpfXJldHVybntzdGF0ZTpULHBvbGxDb3VudDpKfX0pO2NvbnN0IFU9Vz0+e2NvbnN0IFk9KFgsZWUpPT57dGhyb3cgbmV3IEVycm9yKGBQb2xsIHN0cmF0ZWdpZXMgYXJlIG5vdCB2YWxpZC4ke1g/YCAke1h9YDoiIn0ke2VlP2Ag'@;
put 'SW52YWxpZCBwb2xsIHN0cmF0ZWd5OiBcbiR7SlNPTi5zdHJpbmdpZnkoZWUsbnVsbCwyKX1gOiIifWApfTtXLmZvckVhY2goKFgsZWUpPT57Y29uc3R7bWF4UG9sbENvdW50OkoscG9sbEludGVydmFsOnJlfT1YO0o8MT9ZKCInbWF4UG9sbENvdW50JyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFu'@;
put 'IDAuIixYKTowIT09ZWU/Sjw9V1tlZS0xXS5tYXhQb2xsQ291bnQmJlkoIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gJ21heFBvbGxDb3VudCcgaW4gcHJldmlvdXMgcG9sbCBzdHJhdGVneS4iLFgpOnJlPDEmJlkoIidwb2xsSW50ZXJ2YWwnIGhhcyB0byBiZSBncmVh'@;
put 'dGVyIHRoYW4gMC4iLFgpfSl9fSwyMDgwOmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSkseT1fKDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVu'@;
put 'Y3Rpb24gVyhlZSl7dHJ5e1goTi5uZXh0KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWShlZSl7dHJ5e1goTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFgoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/'@;
put 'SzpuZXcgeihmdW5jdGlvbihVKXtVKEspfSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9WCgoTj1OLmFwcGx5KEYsT3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnNhdmVMb2c9dm9pZCAwO2NvbnN0IEI9Xyg1OTI4KSx3'@;
put 'PV8oNjEzMSk7cS5zYXZlTG9nPWZ1bmN0aW9uIFAoRixPLHosTixMLEspe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighSyl0aHJvdyBuZXcgRXJyb3IoYExvZ3MgZm9yIGpvYiAke0YuaWR9IGNhbm5vdCBiZSBmZXRjaGVkIHdpdGhvdXQgYSB2YWxpZCBhY2Nl'@;
put 'c3MgdG9rZW4uYCk7aWYoIUwpdGhyb3cgbmV3IEVycm9yKGBMb2dzIGZvciBqb2IgJHtGLmlkfSBjYW5ub3QgYmUgd3JpdHRlbiB3aXRob3V0IGEgdmFsaWQgd3JpdGUgc3RyZWFtLmApO2NvbnN0IFU9SS5sb2dnZXJ8fHksVz1GLmxpbmtzLmZpbmQoWD0+ImxvZyI9PT1YLnJlbCk7aWYoIVcp'@;
put 'dGhyb3cgbmV3IEVycm9yKGBMb2cgVVJMIGZvciBqb2IgJHtGLmlkfSB3YXMgbm90IGZvdW5kLmApO2NvbnN0IFk9eWllbGQoMCxCLmZldGNoTG9nKShPLEssYCR7Vy5ocmVmfS9jb250ZW50YCx6LE4pO1UuaW5mbyhgV3JpdGluZyBsb2dzIHRvICR7TC5wYXRofWApLHlpZWxkKDAsdy53cml0'@;
put 'ZVN0cmVhbSkoTCxZfHwiIil9KX19LDY0OTY6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLE8pe3JldHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTCl7ZnVuY3Rpb24gSyhZKXt0cnl7VyhP'@;
put 'Lm5leHQoWSkpfWNhdGNoKFgpe0woWCl9fWZ1bmN0aW9uIFUoWSl7dHJ5e1coTy50aHJvdyhZKSl9Y2F0Y2goWCl7TChYKX19ZnVuY3Rpb24gVyhZKXtZLmRvbmU/TihZLnZhbHVlKTpmdW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKEwpe0woTil9'@;
put 'KX0oWS52YWx1ZSkudGhlbihLLFUpfVcoKE89Ty5hcHBseSh3LFB8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS51cGxvYWRUYWJsZXM9dm9pZCAwO2NvbnN0IHk9Xyg5Nzc4KSxnPV8oMjQwMik7cS51cGxvYWRUYWJs'@;
put 'ZXM9ZnVuY3Rpb24gQih3LFAsRil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE89W107Zm9yKGNvbnN0IHogaW4gUCl7Y29uc3QgTj0oMCxnLmNvbnZlcnRUb0NTVikoUCx6KTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Til0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7Y29uc3QgTD15aWVsZCB3LnVwbG9hZEZpbGUoIi9maWxlcy9maWxlcyNyYXdVcGxvYWQiLE4sRikuY2F0Y2goSz0+e3Rocm93KDAseS5wcmVmaXhNZXNzYWdl'@;
put 'KShLLCJFcnJvciB3aGlsZSB1cGxvYWRpbmcgZmlsZS4gIil9KTtPLnB1c2goe3RhYmxlTmFtZTp6LGZpbGU6TC5yZXN1bHR9KX1yZXR1cm4gT30pfX0sNjEzMTpmdW5jdGlvbih1ZSxxKXsidXNlIHN0cmljdCI7dmFyIF89dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHksZyxCLHcp'@;
put 'e3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKEYsTyl7ZnVuY3Rpb24geihLKXt0cnl7TCh3Lm5leHQoSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIE4oSyl7dHJ5e0wody50aHJvdyhLKSl9Y2F0Y2goVSl7TyhVKX19ZnVuY3Rpb24gTChLKXtLLmRvbmU/RihLLnZhbHVl'@;
put 'KTpmdW5jdGlvbiBQKEYpe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKGZ1bmN0aW9uKE8pe08oRil9KX0oSy52YWx1ZSkudGhlbih6LE4pfUwoKHc9dy5hcHBseSh5LGd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEw'@;
put 'fSkscS53cml0ZVN0cmVhbT12b2lkIDAscS53cml0ZVN0cmVhbT0oeSxnKT0+Xyh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKEIsdyk9Pnt5LndyaXRlKGcrIlxuIixQPT57UD93KFApOkIoITApfSl9KX0pfSwyODUxOmZ1bmN0aW9uKHVlLHEs'@;
put 'Xyl7InVzZSBzdHJpY3QiO3ZhciBJPV8oNTEwOCkseT1fKDQxNTUpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcsWSxYLGVlKXtyZXR1cm4gbmV3KFh8fChYPVByb21pc2UpKShmdW5jdGlvbihyZSxpZSl7ZnVuY3Rpb24gbGUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0'@;
put 'Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gbWUoVGUpe3RyeXtfZShlZS50aHJvdyhUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP3JlKFRlLnZhbHVlKTpmdW5jdGlvbiBKKHJlKXtyZXR1cm4gcmUgaW5zdGFuY2VvZiBYP3JlOm5ldyBYKGZ1bmN0aW9uKGll'@;
put 'KXtpZShyZSl9KX0oVGUudmFsdWUpLnRoZW4obGUsbWUpfV9lKChlZT1lZS5hcHBseShXLFl8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5BdXRoTWFuYWdlcj12b2lkIDA7Y29uc3QgQj1fKDM5MDApLHc9XygxMzk1'@;
put 'KSxQPV8oNTkyOCksRj1fKDExNzApLE89Xyg1NDE4KSx6PV8oNDU4MiksTj1fKDY1NDcpLEw9XygxNTI3KTtxLkF1dGhNYW5hZ2VyPWNsYXNzIEt7Y29uc3RydWN0b3IoWSxYLGVlLEope3RoaXMuc2VydmVyVXJsPVksdGhpcy5zZXJ2ZXJUeXBlPVgsdGhpcy5yZXF1ZXN0Q2xpZW50PWVlLHRo'@;
put 'aXMubG9naW5DYWxsYmFjaz1KLHRoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9Ii9TQVNMb2dvbiIsdGhpcy5leHRyYWN0VXNlck5hbWU9cmU9Pntzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEIuU2VydmVyVHlwZS5TYXNW'@;
put 'aXlhOnJldHVybiByZT8uaWQ7Y2FzZSBCLlNlcnZlclR5cGUuU2FzOTpyZXR1cm4iIjtjYXNlIEIuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4gcmU/LnVzZXJuYW1lO2RlZmF1bHQ6cmV0dXJuIEkuZXJyb3IoIlNlcnZlciBUeXBlIG5vdCBmb3VuZCBpbiBleHRyYWN0VXNlck5hbWUgZnVuY3Rp'@;
put 'b24iKSwiIn19LHRoaXMuZXh0cmFjdFVzZXJMb25nTmFtZT1yZT0+e3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIHJlPy5uYW1lO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuKDAsRi5leHRyYWN0VXNlckxvbmdOYW1lU2FzOSko'@;
put 'cmUpO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVybiByZT8uZGlzcGxheU5hbWU7ZGVmYXVsdDpyZXR1cm4gSS5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBmdW5jdGlvbiIpLCIifX0sdGhpcy5zZXRMb2dpblVybD1yZT0+e2xldCBpZT1yZVsx'@;
put 'XS5yZXBsYWNlKC9cPy4qLywiIik7aWYoIi8iPT09aWVbMF0pe2llPWllLnN1YnN0cigxKTtjb25zdCBsZT10aGlzLnNlcnZlclVybD9gJHt0aGlzLnNlcnZlclVybH0vJHtpZX1gOmAke2llfWA7dGhpcy5sb2dpblVybD10aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzVml5YT9s'@;
put 'ZTpsZS5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKX19LHRoaXMubG9naW5Vcmw9Ii9TQVNMb2dvbi9sb2dpbiIsdGhpcy5sb2dvdXRVcmw9dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNMb2dvbi9sb2dvdXQ/Ijp0aGlzLnNl'@;
put 'cnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzVml5YT8iL1NBU0xvZ29uL2xvZ291dC5kbz8iOiIvU0FTTG9nb24vbG9nb3V0Iix0aGlzLnJlZGlyZWN0ZWRMb2dpblVybD10aGlzLnNlcnZlclVybCt0aGlzLnJlZGlyZWN0ZWRMb2dpblVybH1yZWRpcmVjdGVkTG9nSW4oe29uTG9nZ2VkT3V0'@;
put 'Oll9KXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7aXNMb2dnZWRJbjpYLHVzZXJOYW1lOmVlLHVzZXJMb25nTmFtZTpKfT15aWVsZCB0aGlzLmZldGNoVXNlck5hbWUoKTtpZihYKXJldHVybih5LmxvZ2dlcnx8SSkubG9nKCJsb2dpbiB3YXMgbm90IGF0'@;
put 'dGVtcHRlZCBhcyBhIHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSx5aWVsZCB0aGlzLmxvZ2luQ2FsbGJhY2soKSx7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTplZSx1c2VyTG9uZ05hbWU6Sn07Y29uc3QgcmU9eWllbGQoMCxPLm9wZW5XZWJQYWdlKSh0aGlzLnJlZGlyZWN0ZWRMb2dp'@;
put 'blVybCwiU0FTTG9nb24iLHt3aWR0aDo1MDAsaGVpZ2h0OjYwMH0sWSk7aWYoIXJlKXJldHVybntpc0xvZ2dlZEluOiExLHVzZXJOYW1lOiIiLHVzZXJMb25nTmFtZToiIn07Y29uc3R7aXNMb2dnZWRJbjppZX09dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/eWllbGQo'@;
put 'MCxOLnZlcmlmeVNhc1ZpeWFMb2dpbikocmUpOnlpZWxkKDAsei52ZXJpZnlTYXM5TG9naW4pKHJlKTtpZihyZS5jbG9zZSgpLGllKXt0aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzOSYmKHlpZWxkIHRoaXMucGVyZm9ybUNBU1NlY3VyaXR5Q2hlY2soKSk7Y29uc3R7dXNlck5h'@;
put 'bWU6bGUsdXNlckxvbmdOYW1lOm1lfT15aWVsZCB0aGlzLmZldGNoVXNlck5hbWUoKTtyZXR1cm4geWllbGQgdGhpcy5sb2dpbkNhbGxiYWNrKCkse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6bGUsdXNlckxvbmdOYW1lOm1lfX1yZXR1cm57aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2Vy'@;
put 'TG9uZ05hbWU6IiJ9fSl9bG9nSW4oWSxYKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZWU9e19zZXJ2aWNlOiJkZWZhdWx0Iix1c2VybmFtZTpZLHBhc3N3b3JkOlh9O3RoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiI7bGV0e2lzTG9n'@;
put 'Z2VkSW46Sixsb2dpbkZvcm06cmUsdXNlckxvbmdOYW1lOmllfT15aWVsZCB0aGlzLmNoZWNrU2Vzc2lvbigpO2lmKEopcmV0dXJuKHkubG9nZ2VyfHxJKS5sb2coImxvZ2luIHdhcyBub3QgYXR0ZW1wdGVkIGFzIGEgdmFsaWQgc2Vzc2lvbiBhbHJlYWR5IGV4aXN0cyIpLHlpZWxkIHRoaXMu'@;
put 'bG9naW5DYWxsYmFjaygpLHRoaXMudXNlck5hbWU9ZWUudXNlcm5hbWUsdGhpcy51c2VyTG9uZ05hbWU9aWUse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6dGhpcy51c2VyTmFtZSx1c2VyTG9uZ05hbWU6dGhpcy51c2VyTG9uZ05hbWV9O2xldCBsZT15aWVsZCB0aGlzLnNlbmRMb2dpblJlcXVl'@;
put 'c3QocmUsZWUpLG1lPSgwLEwuaXNMb2dJblN1Y2Nlc3NIZWFkZXJQcmVzZW50KSh0aGlzLnNlcnZlclR5cGUsbGUpO2lmKCFtZSl7aWYoVShsZSkpe2NvbnN0IFRlPXlpZWxkIHRoaXMuZ2V0TG9naW5Gb3JtKGxlKTtsZT15aWVsZCB0aGlzLnNlbmRMb2dpblJlcXVlc3QoVGUsZWUpfWNvbnN0'@;
put 'IF9lPXlpZWxkIHRoaXMuY2hlY2tTZXNzaW9uKCk7bWU9X2UuaXNMb2dnZWRJbix0aGlzLnVzZXJMb25nTmFtZT1fZS51c2VyTG9uZ05hbWV9cmV0dXJuIG1lJiYodGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczkmJih5aWVsZCB0aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNr'@;
put 'KCkpLHRoaXMubG9naW5DYWxsYmFjaygpLHRoaXMudXNlck5hbWU9ZWUudXNlcm5hbWUpLHtpc0xvZ2dlZEluOm1lLHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNlckxvbmdOYW1lfX0pfXBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCl7cmV0dXJuIGcodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU1N0b3JlZFByb2Nlc3Mval9zcHJpbmdfY2FzX3NlY3VyaXR5X2NoZWNrYDt5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAvU0FTTG9nb24vbG9naW4/c2VydmljZT0ke1l9YCx2b2lkIDAp'@;
put 'LmNhdGNoKFg9PntpZighKFggaW5zdGFuY2VvZiB3Lk5vdEZvdW5kRXJyb3IpKXRocm93IFh9KX0pfXNlbmRMb2dpblJlcXVlc3QoWSxYKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc2pzKXtjb25z'@;
put 'dHt1c2VybmFtZTpyZSxwYXNzd29yZDppZX09WCx7cmVzdWx0OmxlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCh0aGlzLmxvZ2luVXJsLHt1c2VybmFtZTpyZSxwYXNzd29yZDppZX0sdm9pZCAwKTtyZXR1cm4gbGV9Zm9yKGNvbnN0IHJlIGluIFkpWFtyZV09WVtyZV07Y29uc3Qg'@;
put 'ZWU9KDAsUC5zZXJpYWxpemUpKFgpLHtyZXN1bHQ6Sn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCxlZSx2b2lkIDAsInRleHQvcGxhaW4iLHsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixBY2NlcHQ6IiovKiJ9'@;
put 'KTtyZXR1cm4gSn0pfWNoZWNrU2Vzc2lvbigpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtpc0xvZ2dlZEluOlksdXNlck5hbWU6WCx1c2VyTG9uZ05hbWU6ZWV9PXlpZWxkIHRoaXMuZmV0Y2hVc2VyTmFtZSgpO2xldCBKPW51bGw7cmV0dXJuIFl8fCh5'@;
put 'aWVsZCB0aGlzLmxvZ091dCgpLEo9eWllbGQgdGhpcy5nZXROZXdMb2dpbkZvcm0oKSksUHJvbWlzZS5yZXNvbHZlKHtpc0xvZ2dlZEluOlksdXNlck5hbWU6WCx1c2VyTG9uZ05hbWU6ZWUsbG9naW5Gb3JtOkp9KX0pfWdldE5ld0xvZ2luRm9ybSgpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZv'@;
put 'aWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzanMpcmV0dXJuIHRoaXMucmVxdWVzdENsaWVudC5nZXQoIi8iLHZvaWQgMCkudGhlbigoe3Jlc3VsdDpYfSk9Pnt2YXIgZWU7Y29uc3QgSj1udWxsPT09KGVlPS88c2NyaXB0PmRvY3VtZW50LmNv'@;
put 'b2tpZSA9ICcoWFNSRi1UT0tFTj0uKjsgTWF4LUFnZT04NjQwMDsgU2FtZVNpdGU9U3RyaWN0OyBQYXRoPVwvOyknPFwvc2NyaXB0Pi8uZXhlYyhYKSl8fHZvaWQgMD09PWVlP3ZvaWQgMDplZVsxXTtKJiYoZG9jdW1lbnQuY29va2llPUopfSk7Y29uc3R7cmVzdWx0Oll9PXlpZWxkIHRoaXMu'@;
put 'cmVxdWVzdENsaWVudC5nZXQodGhpcy5sb2dpblVybC5yZXBsYWNlKCIvU0FTTG9nb24vbG9naW4uZG8iLCIvU0FTTG9nb24vbG9naW4iKSx2b2lkIDAsInRleHQvcGxhaW4iKTtyZXR1cm4geWllbGQgdGhpcy5nZXRMb2dpbkZvcm0oWSl9KX1mZXRjaFVzZXJOYW1lKCl7cmV0dXJuIGcodGhp'@;
put 'cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFk9dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/YCR7dGhpcy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvQGN1cnJlbnRVc2VyYDp0aGlzLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzOT9gJHt0'@;
put 'aGlzLnNlcnZlclVybH0vU0FTU3RvcmVkUHJvY2Vzc2A6YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU2pzQXBpL3Nlc3Npb25gLHtyZXN1bHQ6WH09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChZLHZvaWQgMCwidGV4dC9wbGFpbiIpLmNhdGNoKEo9Pih7cmVzdWx0OiJhdXRoRXJyIn0pKSxl'@;
put 'ZT0iYXV0aEVyciIhPT1YO3JldHVybiBlZT97aXNMb2dnZWRJbjplZSx1c2VyTmFtZTp0aGlzLmV4dHJhY3RVc2VyTmFtZShYKSx1c2VyTG9uZ05hbWU6dGhpcy5leHRyYWN0VXNlckxvbmdOYW1lKFgpfTooeWllbGQgdGhpcy5sb2dPdXQoKSx7aXNMb2dnZWRJbjplZSx1c2VyTmFtZToiIix1'@;
put 'c2VyTG9uZ05hbWU6IiJ9KX0pfWdldExvZ2luRm9ybShZKXtjb25zdCBlZT0vPGZvcm0uK2FjdGlvbj0iKC4qKExvZ29ufGxvZ2luKVteIl0qKS4qPi8uZXhlYyhZKSxKPXt9O2lmKGVlJiZlZS5sZW5ndGgpe3RoaXMuc2V0TG9naW5VcmwoZWUpO2NvbnN0IHJlPShZPVkucmVwbGFjZSgvPGlu'@;
put 'cHV0L2csIlxuPGlucHV0IikpLm1hdGNoKC88aW5wdXQuKiJoaWRkZW4iW14+XSo+L2cpO3JlJiZyZS5mb3JFYWNoKGllPT57Y29uc3QgbGU9aWUubWF0Y2goL25hbWU9IihbXiJdKikiXHN2YWx1ZT0iKFteIl0qKS8pO2xlJiZsZS5sZW5ndGgmJihKW2xlWzFdXT1sZVsyXSl9KX1yZXR1cm4g'@;
put 'T2JqZWN0LmtleXMoSikubGVuZ3RoP0o6bnVsbH1sb2dPdXQoKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMucmVxdWVzdENsaWVudC5jbGVhckNzcmZUb2tlbnMoKSx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9nb3V0VXJsLHZvaWQg'@;
put 'MCkudGhlbigoKT0+ITApfSl9fTtjb25zdCBVPVc9Pi9BbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0aGUgc3lzdGVtIHdhcyB2ZXJpZnlpbmcgeW91ciBjcmVkZW50aWFscy4gUGxlYXNlIGVudGVyIHlvdXIgY3JlZGVudGlhbHMgYWdhaW4uL2dtLnRlc3QoVyl9LDU3OmZ1bmN0aW9uKHVlLHEs'@;
put 'Xyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihQLEYsTyx6KXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihMLEspe2Z1bmN0aW9uIFUoWCl7dHJ5e1koei5uZXh0KFgpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcoWCl7'@;
put 'dHJ5e1koei50aHJvdyhYKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBZKFgpe1guZG9uZT9MKFgudmFsdWUpOmZ1bmN0aW9uIE4oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBPP0w6bmV3IE8oZnVuY3Rpb24oSyl7SyhMKX0pfShYLnZhbHVlKS50aGVuKFUsVyl9WSgoej16LmFwcGx5KFAs'@;
put 'Rnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9dm9pZCAwO2NvbnN0IHk9Xyg5Nzc4KSxnPV8oOTAxNyksQj1fKDM5MDApO3EuZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcz1mdW5j'@;
put 'dGlvbiB3KFAsRixPKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3Qgej0iL1NBU2pzQXBpL2F1dGgvdG9rZW4iLE49e2NsaWVudElkOkYsY29kZTpPfTtyZXR1cm4geWllbGQgUC5wb3N0KHosTix2b2lkIDApLnRoZW4oTD0+e2NvbnN0IEs9TC5yZXN1bHQ7'@;
put 'cmV0dXJue2FjY2Vzc190b2tlbjpLLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46Sy5yZWZyZXNoVG9rZW59fSkuY2F0Y2goTD0+e3Rocm93KDAseS5wcmVmaXhNZXNzYWdlKShMLCgwLGcuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJmZXRjaGluZyBhY2Nlc3MgdG9rZW4iLCJnZXRB'@;
put 'Y2Nlc3NUb2tlbkZvclNhc2pzIixCLlNlcnZlclR5cGUuU2FzanMseixOLEYpKX0pfSl9fSwzNTY5OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPV8oODc2NCkuQnVmZmVyLHk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKE8seixOLEwpe3JldHVybiBuZXcoTnx8'@;
put 'KE49UHJvbWlzZSkpKGZ1bmN0aW9uKFUsVyl7ZnVuY3Rpb24gWShKKXt0cnl7ZWUoTC5uZXh0KEopKX1jYXRjaChyZSl7VyhyZSl9fWZ1bmN0aW9uIFgoSil7dHJ5e2VlKEwudGhyb3coSikpfWNhdGNoKHJlKXtXKHJlKX19ZnVuY3Rpb24gZWUoSil7Si5kb25lP1UoSi52YWx1ZSk6ZnVuY3Rp'@;
put 'b24gSyhVKXtyZXR1cm4gVSBpbnN0YW5jZW9mIE4/VTpuZXcgTihmdW5jdGlvbihXKXtXKFUpfSl9KEoudmFsdWUpLnRoZW4oWSxYKX1lZSgoTD1MLmFwcGx5KE8senx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmdl'@;
put 'dEFjY2Vzc1Rva2VuRm9yVml5YT12b2lkIDA7Y29uc3QgZz1fKDM5MDApLEI9Xyg5Nzc4KSx3PV8oMTM5NSksUD1fKDkwMTcpO3EuZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhPWZ1bmN0aW9uIEYoTyx6LE4sTCl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBLO0s9'@;
put 'dHlwZW9mIEk+InUiP2J0b2EoeisiOiIrTik6SS5mcm9tKHorIjoiK04pLnRvU3RyaW5nKCJiYXNlNjQiKTtjb25zdCBVPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLFc9e0F1dGhvcml6YXRpb246IkJhc2ljICIrSyxBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24ifSxZPW5ldyBVUkxTZWFyY2hQ'@;
put 'YXJhbXMoe2dyYW50X3R5cGU6ImF1dGhvcml6YXRpb25fY29kZSIsY29kZTpMfSksWD1uZXcgVVJMU2VhcmNoUGFyYW1zKFkpO3JldHVybiB5aWVsZCBPLnBvc3QoVSxYLHZvaWQgMCwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIixXKS50aGVuKEo9PkoucmVzdWx0KS5jYXRj'@;
put 'aChKPT57dGhyb3cgSiBpbnN0YW5jZW9mIHcuQ2VydGlmaWNhdGVFcnJvcj9KOigwLEIucHJlZml4TWVzc2FnZSkoSiwoMCxQLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhIixnLlNlcnZlclR5cGUuU2Fz'@;
put 'Vml5YSxVLFksVyx6LE4pKX0pfSl9fSw5MDE3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9cS5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZp'@;
put 'eD12b2lkIDA7Y29uc3QgST1fKDM5MDApLGc9UD0+YFJlc3BvbnNlIGZyb20gJHsoUD0+UD09PUkuU2VydmVyVHlwZS5TYXNWaXlhPyJWaXlhIjoiU2FzanMiKShQKX0gaXMgYmVsb3cuYDtxLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PShQLEYsTyx6LE4sTCxLLFUpPT57Y29uc3QgVz1Y'@;
put 'PT5KU09OLnN0cmluZ2lmeShYLG51bGwsMiksWT1bYEVycm9yIHdoaWxlICR7UH0gZnJvbSAke3p9YCxgVGhyb3duIGJ5IHRoZSBAc2FzanMvYWRhcHRlciAke0Z9IGZ1bmN0aW9uLmBdO3JldHVybiBOJiYoWS5wdXNoKCJQYXlsb2FkOiIpLFkucHVzaChXKE4pKSksTCYmKFkucHVzaCgiSGVh'@;
put 'ZGVyczoiKSxZLnB1c2goVyhMKSkpLEsmJlkucHVzaChgQ2xpZW50SWQ6ICR7S31gKSxVJiZZLnB1c2goYENsaWVudFNlY3JldDogJHtVfWApLFkucHVzaCgiIiksWS5wdXNoKGAke2coTyl9YCksWS5wdXNoKCIiKSxZLmpvaW4oIlxuIil9LHEuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhS'@;
put 'ZXNwb25zZT0oUCxGKT0+UC5zcGxpdChgJHtnKEYpfVxuYCkucG9wKCl9LDcwNDpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9Xyg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gbmV3KEx8fChMPVByb21p'@;
put 'c2UpKShmdW5jdGlvbihXLFkpe2Z1bmN0aW9uIFgocmUpe3RyeXtKKEsubmV4dChyZSkpfWNhdGNoKGllKXtZKGllKX19ZnVuY3Rpb24gZWUocmUpe3RyeXtKKEsudGhyb3cocmUpKX1jYXRjaChpZSl7WShpZSl9fWZ1bmN0aW9uIEoocmUpe3JlLmRvbmU/VyhyZS52YWx1ZSk6ZnVuY3Rpb24g'@;
put 'VShXKXtyZXR1cm4gVyBpbnN0YW5jZW9mIEw/VzpuZXcgTChmdW5jdGlvbihZKXtZKFcpfSl9KHJlLnZhbHVlKS50aGVuKFgsZWUpfUooKEs9Sy5hcHBseSh6LE58fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZXRU'@;
put 'b2tlbnM9dm9pZCAwO2NvbnN0IEI9Xyg2Nzk5KSx3PV8oMzkwMCksUD1fKDM2NiksRj1fKDI0OSk7cS5nZXRUb2tlbnM9ZnVuY3Rpb24gTyh6LE4sTD13LlNlcnZlclR5cGUuU2FzVml5YSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9SS5sb2dnZXJ8'@;
put 'fHk7bGV0e2FjY2Vzc190b2tlbjpVLHJlZnJlc2hfdG9rZW46VyxjbGllbnQ6WSxzZWNyZXQ6WH09TjtpZigoMCxCLmlzQWNjZXNzVG9rZW5FeHBpcmluZykoVSl8fCgwLEIuaXNSZWZyZXNoVG9rZW5FeHBpcmluZykoVykpe2lmKCgwLEIuaGFzVG9rZW5FeHBpcmVkKShXKSl7Y29uc3QgSj0i'@;
put 'VW5hYmxlIHRvIG9idGFpbiBuZXcgYWNjZXNzIHRva2VuLiBZb3VyIHJlZnJlc2ggdG9rZW4gaGFzIGV4cGlyZWQuIjt0aHJvdyBLLmVycm9yKEopLG5ldyBFcnJvcihKKX1LLmluZm8oIlJlZnJlc2hpbmcgYWNjZXNzIGFuZCByZWZyZXNoIHRva2Vucy4iKSwoe2FjY2Vzc190b2tlbjpVLHJl'@;
put 'ZnJlc2hfdG9rZW46V309TD09PXcuU2VydmVyVHlwZS5TYXNWaXlhP3lpZWxkKDAsUC5yZWZyZXNoVG9rZW5zRm9yVml5YSkoeixZLFgsVyk6eWllbGQoMCxGLnJlZnJlc2hUb2tlbnNGb3JTYXNqcykoeixXKSl9cmV0dXJue2FjY2Vzc190b2tlbjpVLHJlZnJlc2hfdG9rZW46VyxjbGllbnQ6'@;
put 'WSxzZWNyZXQ6WH19KX19LDE1Mjc6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURl'@;
put 'c2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5jdGlvbihnLEIs'@;
put 'dyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSx5PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVj'@;
put 'dC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx5KF8oMjg1MSkscSkseShfKDkwOTcpLHEpLHkoXyg5MTY2KSxxKSx5KF8oNjY0MykscSl9LDkwOTc6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFs'@;
put 'dWU6ITB9KSxxLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPXZvaWQgMCxxLmlzQXV0aG9yaXplRm9ybVJlcXVpcmVkPUk9Pi88Zm9ybS4rYWN0aW9uPSIoLipMb2dvblwvb2F1dGhcL2F1dGhvcml6ZVteIl0qKS4qPi9nbS50ZXN0KEkpfSw5MTY2Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5pc0xvZ0luUmVxdWlyZWQ9dm9pZCAwLHEuaXNMb2dJblJlcXVpcmVkPUk9Pi88Zm9ybS4rYWN0aW9uPSIoLiooTG9nb24pfChsb2dpbilbXiJdKikuKj4vZ20udGVzdChJKX0sNjY0MzoodWUscSxfKT0+eyJ1'@;
put 'c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5pc0xvZ0luU3VjY2Vzc0hlYWRlclByZXNlbnQ9cS5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcj1xLmxvZ2luU3VjY2Vzc0hlYWRlcnM9cS5kZWZhdWx0U3VjY2Vzc0hlYWRl'@;
put 'cktleT12b2lkIDA7Y29uc3QgST1fKDM5MDApLHk9Xyg1OTI4KSxnPSJZb3UgaGF2ZSBzaWduZWQgaW4uIjtxLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5PSJkZWZhdWx0IixxLmxvZ2luU3VjY2Vzc0hlYWRlcnM9e2VzOiJZYSBzZSBoYSBpbmljaWFkbyBsYSBzZXNpXHhmM24uIix0aDoiXHUw'@;
put 'ZTA0XHUwZTM4XHUwZTEzXHUwZTI1XHUwZTA3XHUwZTBhXHUwZTM3XHUwZTQ4XHUwZTJkXHUwZTQwXHUwZTAyXHUwZTQ5XHUwZTMyXHUwZTQzXHUwZTBhXHUwZTQ5XHUwZTQxXHUwZTI1XHUwZTQ5XHUwZTI3IixqYToiXHUzMGI1XHUzMGE0XHUzMGYzXHUzMGE0XHUzMGYzXHUzMDU3XHUzMDdl'@;
put 'XHUzMDU3XHUzMDVmXHUzMDAyIixuYjoiRHUgaGFyIGxvZ2dldCBkZWcgcFx4ZTUuIixzbDoiUHJpamF2aWxpIHN0ZSBzZS4iLGFyOiJcdTA2NDRcdTA2NDJcdTA2MmYgXHUwNjQyXHUwNjQ1XHUwNjJhICIsc2s6IlByaWhsXHhlMXNpbGkgc3RlIHNhLiIsemhfSEs6Ilx1NjBhOFx1NWRmMlx1'@;
put 'NzY3Ylx1NTE2NVx1MzAwMiIsemhfQ046Ilx1NjBhOFx1NWRmMlx1NzY3Ylx1NWY1NVx1MzAwMiIsaXQ6IkwndXRlbnRlIHNpIFx4ZTggY29ubmVzc28uIixzdjoiRHUgaGFyIGxvZ2dhdCBpbi4iLGhlOiJcdTA1ZTBcdTA1ZGJcdTA1ZTBcdTA1ZTFcdTA1ZWEgIixubDoiVSBoZWJ0IHppY2gg'@;
put 'YWFuZ2VtZWxkLiIscGw6Ilpvc3RhXHUwMTQyZVx1MDE1YiB6YWxvZ293YW55LiIsa286Ilx1Yjg1Y1x1YWRmOFx1Yzc3OFx1ZDU4OFx1YzJiNVx1YjJjOFx1YjJlNC4iLHpoX1RXOiJcdTYwYThcdTVkZjJcdTc2N2JcdTUxNjVcdTMwMDIiLHRyOiJPdHVydW0gYVx4ZTd0XHUwMTMxblx1MDEz'@;
put 'MXouIixpdzoiXHUwNWUwXHUwNWRiXHUwNWUwXHUwNWUxXHUwNWVhICIsZnI6IlZvdXMgXHhlYXRlcyBjb25uZWN0XHhlOS4iLHVrOiJcdTA0MTJcdTA0MzggXHUwNDMyXHUwNDMyXHUwNDU2XHUwNDM5XHUwNDQ4XHUwNDNiXHUwNDM4IFx1MDQzMiBcdTA0M2VcdTA0MzFcdTA0M2JcdTA0NTZc'@;
put 'dTA0M2FcdTA0M2VcdTA0MzJcdTA0MzhcdTA0MzkgXHUwNDM3XHUwNDMwXHUwNDNmXHUwNDM4XHUwNDQxLiIscHRfQlI6IlZvY1x4ZWEgc2UgY29uZWN0b3UuIixubzoiRHUgaGFyIGxvZ2dldCBkZWcgcFx4ZTUuIixjczoiSnN0ZSBwXHUwMTU5aWhsXHhlMVx1MDE2MWVuaS4iLGZpOiJPbGV0'@;
put 'IGtpcmphdXR1bnV0IHNpc1x4ZTRceGU0bi4iLHJ1OiJcdTA0MTJcdTA0NGIgXHUwNDMyXHUwNDRiXHUwNDNmXHUwNDNlXHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNiXHUwNDM4IFx1MDQzMlx1MDQ0NVx1MDQzZVx1MDQzNCBcdTA0MzIgXHUwNDQxXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDM1XHUw'@;
put 'NDNjXHUwNDQzLiIsZWw6Ilx1MDM4OFx1MDNjN1x1MDNiNVx1MDNjNFx1MDNiNSBcdTAzYzNcdTAzYzVcdTAzYmRcdTAzYjRcdTAzYjVcdTAzYjhcdTAzYjVcdTAzYWYuIixocjoiUHJpamF2aWxpIHN0ZSBzZS4iLGRhOiJEdSBlciBsb2dnZXQgcFx4ZTUuIixkZToiU2llIHNpbmQgamV0enQg'@;
put 'YW5nZW1lbGRldC4iLHNoOiJQcmlqYXZsamVuaSBzdGUuIixwdDoiSW5pY2lvdSBzZXNzXHhlM28uIixodToiQmVqZWxlbnRrZXpldHQuIixzcjoiUHJpamF2bGplbmkgc3RlLiIsZW46ZyxbcS5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleV06Z30scS5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hl'@;
put 'YWRlcj0oKT0+e2xldCBQPXEubG9naW5TdWNjZXNzSGVhZGVyc1txLmRlZmF1bHRTdWNjZXNzSGVhZGVyS2V5XTtjb25zdCBGPSgwLHkuZ2V0VXNlckxhbmd1YWdlKSgpO2lmKEYpe2xldCBPPXEubG9naW5TdWNjZXNzSGVhZGVyc1tGXTtpZihPKVA9TztlbHNle2NvbnN0IE49T2JqZWN0Lmtl'@;
put 'eXMocS5sb2dpblN1Y2Nlc3NIZWFkZXJzKS5maW5kKEw9Pm5ldyBSZWdFeHAoTCwiaSIpLnRlc3QoRikpO04mJihQPXEubG9naW5TdWNjZXNzSGVhZGVyc1tOXSl9fXJldHVybiBQfSxxLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudD0oUCxGKT0+UD09PUkuU2VydmVyVHlwZS5TYXNqcz9G'@;
put 'Py5sb2dnZWRJbjpuZXcgUmVnRXhwKCgwLHEuZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCksImdtIikudGVzdChGKX0sNTQxODpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsTyl7cmV0dXJuIG5l'@;
put 'dyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixMKXtmdW5jdGlvbiBLKFkpe3RyeXtXKE8ubmV4dChZKSl9Y2F0Y2goWCl7TChYKX19ZnVuY3Rpb24gVShZKXt0cnl7VyhPLnRocm93KFkpKX1jYXRjaChYKXtMKFgpfX1mdW5jdGlvbiBXKFkpe1kuZG9uZT9OKFkudmFsdWUpOmZ1bmN0aW9u'@;
put 'IHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTCl7TChOKX0pfShZLnZhbHVlKS50aGVuKEssVSl9VygoTz1PLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLm9wZW5X'@;
put 'ZWJQYWdlPXZvaWQgMDtjb25zdCB5PV8oMTIxMCksZz17d2lkdGg6NTAwLGhlaWdodDo2MDB9O3Eub3BlbldlYlBhZ2U9ZnVuY3Rpb24gQih3LFA9IiIsRj1nLE8pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHt3aWR0aDp6LGhlaWdodDpOfT1GLEw9c2Ny'@;
put 'ZWVuLndpZHRoLzItei8yLEs9c2NyZWVuLmhlaWdodC8yLU4vMjtyZXR1cm4gd2luZG93Lm9wZW4odyxQLGB0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9JHt6fSxoZWlnaHQ9JHtOfSxsZWZ0PSR7TH0sdG9wPSR7S31gKXx8KCh5aWVsZChPPz95Lm9wZW5Mb2dpblByb21w'@;
put 'dCkoKSk/d2luZG93Lm9wZW4odyxQLGB0b29sYmFyPTAsbG9jYXRpb249MCxtZW51YmFyPTAsd2lkdGg9JHt6fSxoZWlnaHQ9JHtOfSxsZWZ0PSR7TH0sdG9wPSR7S31gKTpudWxsKX0pfX0sMjQ5OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2Fp'@;
put 'dGVyfHxmdW5jdGlvbihQLEYsTyx6KXtyZXR1cm4gbmV3KE98fChPPVByb21pc2UpKShmdW5jdGlvbihMLEspe2Z1bmN0aW9uIFUoWCl7dHJ5e1koei5uZXh0KFgpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFcoWCl7dHJ5e1koei50aHJvdyhYKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5j'@;
put 'dGlvbiBZKFgpe1guZG9uZT9MKFgudmFsdWUpOmZ1bmN0aW9uIE4oTCl7cmV0dXJuIEwgaW5zdGFuY2VvZiBPP0w6bmV3IE8oZnVuY3Rpb24oSyl7SyhMKX0pfShYLnZhbHVlKS50aGVuKFUsVyl9WSgoej16LmFwcGx5KFAsRnx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnJlZnJlc2hUb2tlbnNGb3JTYXNqcz12b2lkIDA7Y29uc3QgeT1fKDk3NzgpLGc9Xyg5MDE3KSxCPV8oMzkwMCk7cS5yZWZyZXNoVG9rZW5zRm9yU2FzanM9ZnVuY3Rpb24gdyhQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxm'@;
put 'dW5jdGlvbiooKXtjb25zdCBPPSIvU0FTanNBcGkvYXV0aC9yZWZyZXNoIix6PXtBdXRob3JpemF0aW9uOiJCZWFyZXIgIitGfTtyZXR1cm4geWllbGQgUC5wb3N0KE8sdm9pZCAwLHZvaWQgMCx2b2lkIDAseikudGhlbihMPT57Y29uc3QgSz1MLnJlc3VsdDtyZXR1cm57YWNjZXNzX3Rva2Vu'@;
put 'OksuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tlbjpLLnJlZnJlc2hUb2tlbn19KS5jYXRjaChMPT57dGhyb3coMCx5LnByZWZpeE1lc3NhZ2UpKEwsKDAsZy5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclNhc2pzIixCLlNl'@;
put 'cnZlclR5cGUuU2FzanMsTykpfSl9KX19LDM2NjpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDg3NjQpLkJ1ZmZlcix5PXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLEwsSyxVKXtyZXR1cm4gbmV3KEt8fChLPVByb21pc2UpKShmdW5jdGlvbihZLFgpe2Z1'@;
put 'bmN0aW9uIGVlKGllKXt0cnl7cmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUpe1gobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7cmUoVS50aHJvdyhpZSkpfWNhdGNoKGxlKXtYKGxlKX19ZnVuY3Rpb24gcmUoaWUpe2llLmRvbmU/WShpZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXtyZXR1cm4gWSBpbnN0'@;
put 'YW5jZW9mIEs/WTpuZXcgSyhmdW5jdGlvbihYKXtYKFkpfSl9KGllLnZhbHVlKS50aGVuKGVlLEopfXJlKChVPVUuYXBwbHkoTixMfHxbXSkpLm5leHQoKSl9KX0sZz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTil7cmV0dXJuIE4mJk4uX19lc01vZHVsZT9OOntkZWZh'@;
put 'dWx0Ok59fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5yZWZyZXNoVG9rZW5zRm9yVml5YT12b2lkIDA7Y29uc3QgQj1fKDM5MDApLHc9Xyg5Nzc4KSxQPWcoXyg2MjMwKSksRj1fKDU5MjgpLE89Xyg5MDE3KTtxLnJlZnJlc2hUb2tlbnNGb3JW'@;
put 'aXlhPWZ1bmN0aW9uIHooTixMLEssVSl7cmV0dXJuIHkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKCEoMCxGLmlzTm9kZSkoKSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCAncmVmcmVzaFRva2Vuc0ZvclZpeWEnIGNhbiBvbmx5IGJlIHVzZWQgYnkgTm9kZS4iKTtjb25zdCBX'@;
put 'PSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLFg9e0F1dGhvcml6YXRpb246IkJhc2ljICIrKHR5cGVvZiBJPiJ1Ij9idG9hKEwrIjoiK0spOkkuZnJvbShMKyI6IitLKS50b1N0cmluZygiYmFzZTY0IikpfSxlZT1uZXcgUC5kZWZhdWx0O3JldHVybiBlZS5hcHBlbmQoImdyYW50X3R5cGUiLCJy'@;
put 'ZWZyZXNoX3Rva2VuIiksZWUuYXBwZW5kKCJyZWZyZXNoX3Rva2VuIixVKSx5aWVsZCBOLnBvc3QoVyxlZSx2b2lkIDAsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrZWUuX2JvdW5kYXJ5LFgpLnRoZW4ocmU9PnJlLnJlc3VsdCkuY2F0Y2gocmU9Pnt0aHJvdygwLHcucHJlZml4'@;
put 'TWVzc2FnZSkocmUsKDAsTy5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclZpeWEiLEIuU2VydmVyVHlwZS5TYXNWaXlhLFcsZWUsWCxMLEspKX0pfSl9fSw0NTgyOmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3Zh'@;
put 'ciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LFAsRixPKXtyZXR1cm4gbmV3KEZ8fChGPVByb21pc2UpKShmdW5jdGlvbihOLEwpe2Z1bmN0aW9uIEsoWSl7dHJ5e1coTy5uZXh0KFkpKX1jYXRjaChYKXtMKFgpfX1mdW5jdGlvbiBVKFkpe3RyeXtXKE8udGhyb3coWSkpfWNh'@;
put 'dGNoKFgpe0woWCl9fWZ1bmN0aW9uIFcoWSl7WS5kb25lP04oWS52YWx1ZSk6ZnVuY3Rpb24geihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRihmdW5jdGlvbihMKXtMKE4pfSl9KFkudmFsdWUpLnRoZW4oSyxVKX1XKChPPU8uYXBwbHkodyxQfHxbXSkpLm5leHQoKSl9KX07T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEudmVyaWZ5U2FzOUxvZ2luPXZvaWQgMDtjb25zdCB5PV8oNTkyOCksZz1fKDE1MjcpO3EudmVyaWZ5U2FzOUxvZ2luPWZ1bmN0aW9uIEIodyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u'@;
put 'Kigpe2xldCBQPSExLEY9bmV3IERhdGUsTz0wO2Rve2lmKHlpZWxkKDAseS5kZWxheSkoMWUzKSx3LmNsb3NlZClicmVhaztQPXcud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xvZ29uIikmJncud2luZG93LmRvY3VtZW50LmJvZHkuaW5uZXJUZXh0LmluY2x1ZGVzKCgwLGcu'@;
put 'Z2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXIpKCkpLE89KChuZXcgRGF0ZSkudmFsdWVPZigpLUYudmFsdWVPZigpKS8xZTN9d2hpbGUoIVAmJk88MzAwKTtyZXR1cm57aXNMb2dnZWRJbjpQfX0pfX0sNjU0NzpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0'@;
put 'aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKFgpe3RyeXtZKHoubmV4dChYKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKFgpe3RyeXtZKHoudGhyb3coWCkpfWNhdGNoKGVlKXtL'@;
put 'KGVlKX19ZnVuY3Rpb24gWShYKXtYLmRvbmU/TChYLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0oWC52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5pc0xvZ2dlZEluU0FTVklZQT1xLnZlcmlmeVNhc1ZpeWFMb2dpbj12b2lkIDA7Y29uc3QgeT1fKDU5MjgpLGc9XygxNTI3KTtxLnZlcmlmeVNhc1ZpeWFMb2dpbj1mdW5jdGlvbiBCKFApe3ZhciBGLE87cmV0dXJuIEko'@;
put 'dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCB6PSExLE49bmV3IERhdGUsTD0wO2Rve2lmKHlpZWxkKDAseS5kZWxheSkoMWUzKSxQLmNsb3NlZClicmVhazt6PSgwLHEuaXNMb2dnZWRJblNBU1ZJWUEpKCksTD0oKG5ldyBEYXRlKS52YWx1ZU9mKCktTi52YWx1ZU9mKCkpLzFl'@;
put 'M313aGlsZSgheiYmTDwzMDApO2xldCBLPSExO049bmV3IERhdGU7ZG97aWYoeWllbGQoMCx5LmRlbGF5KSgxZTMpLFAuY2xvc2VkKWJyZWFrO0s9UC53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKXx8KG51bGw9PT0oTz1udWxsPT09KEY9UC53aW5kb3cuZG9jdW1l'@;
put 'bnQuYm9keSl8fHZvaWQgMD09PUY/dm9pZCAwOkYuaW5uZXJUZXh0KXx8dm9pZCAwPT09Tz92b2lkIDA6Ty5pbmNsdWRlcygoMCxnLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyKSgpKSksTD0oKG5ldyBEYXRlKS52YWx1ZU9mKCktTi52YWx1ZU9mKCkpLzFlM313aGlsZSghSyYmTDwz'@;
put 'MDApO3JldHVybntpc0xvZ2dlZEluOnomJkt9fSl9LHEuaXNMb2dnZWRJblNBU1ZJWUE9KCk9PmRvY3VtZW50LmNvb2tpZS5pbmNsdWRlcygiQ3VycmVudC1Vc2VyIikmJmRvY3VtZW50LmNvb2tpZS5pbmNsdWRlcygidXNlcklkIil9LDQwMzc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybT12b2lkIDA7Y29uc3QgST1fKDI0MDIpLHk9Xyg1OTI4KTtxLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09KEIsdyk9Pntmb3IoY29uc3QgUCBpbiB3KXtpZighQXJyYXku'@;
put 'aXNBcnJheSh3W1BdKSljb250aW51ZTtjb25zdCBGPVAsTz0oMCxJLmNvbnZlcnRUb0NTVikodyxQKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Tyl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNo'@;
put 'YXJhY3RlcnMuIik7aWYoKDAseS5pc05vZGUpKCkpQi5hcHBlbmQoRixPLHtmaWxlbmFtZTpgJHtGfS5jc3ZgLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7ZWxzZXtjb25zdCB6PW5ldyBCbG9iKFtPXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pO0IuYXBwZW5kKEYseixgJHtG'@;
put 'fS5jc3ZgKX19cmV0dXJuIEJ9fSwyMTcwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtPXZvaWQgMDtjb25zdCBJPV8oMjQwMikseT1fKDQ3OTkpO3EuZ2VuZXJh'@;
put 'dGVUYWJsZVVwbG9hZEZvcm09KEIsdyk9Pntjb25zdCBQPVtdLEY9e307bGV0IE89MDtmb3IoY29uc3QgeiBpbiB3KXtPKyssKDAsSS5pc0Zvcm1hdHNUYWJsZSkoeil8fFAucHVzaCh6KTtjb25zdCBOPSgwLEkuY29udmVydFRvQ1NWKSh3LHopO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExF'@;
put 'TkdUSCI9PT1OKXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtOLmxlbmd0aD4xNmUzPygwLHkuc3BsaXRDaHVua3MpKE4pLm1hcChLPT57Qi5hcHBlbmQoYHNhc2pzJHtPfWRhdGFgLEspfSk6'@;
put 'Rltgc2FzanMke099ZGF0YWBdPU59cmV0dXJuIEYuc2FzanNfdGFibGVzPVAuam9pbigiICIpLHtmb3JtRGF0YTpCLHJlcXVlc3RQYXJhbXM6Rn19fSwzNjA3OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNy'@;
put 'ZWF0ZT9mdW5jdGlvbih3LFAsRixPKXt2b2lkIDA9PT1PJiYoTz1GKTt2YXIgej1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFAsRik7KCF6fHwoImdldCJpbiB6PyFQLl9fZXNNb2R1bGU6ei53cml0YWJsZXx8ei5jb25maWd1cmFibGUpKSYmKHo9e2VudW1lcmFibGU6ITAsZ2V0'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJuIFBbRl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsTyx6KX06ZnVuY3Rpb24odyxQLEYsTyl7dm9pZCAwPT09TyYmKE89Riksd1tPXT1QW0ZdfSkseT10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24odyxQKXtmb3IodmFyIEYgaW4gdykiZGVm'@;
put 'YXVsdCIhPT1GJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsRikmJkkoUCx3LEYpfSxnPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtjb25zdCBCPWcoXyg1OTU2KSk7eShfKDEyMzApLHEpLHkoXygxMzk1KSxxKSx5KF8oOTgyMSkscSkseShfKDgzMDYpLHEpLHkoXygzNDY3KSxxKSx5KF8oMzYwMikscSkscS5kZWZhdWx0PUIuZGVmYXVsdH0sMTU3MDpmdW5jdGlvbih1ZSxx'@;
put 'LF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKFgpe3RyeXtZKHoubmV4dChYKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKFgp'@;
put 'e3RyeXtZKHoudGhyb3coWCkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShYKXtYLmRvbmU/TChYLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0oWC52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQ'@;
put 'LEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5Db21wdXRlSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IHk9XygzOTAwKSxnPV8oMTM5NSksQj1fKDYxMTgpO3EuQ29tcHV0ZUpvYkV4ZWN1dG9yPWNsYXNzIHcgZXh0'@;
put 'ZW5kcyBCLkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihGLE8pe3N1cGVyKEYseS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLHRoaXMuc2FzVml5YUFwaUNsaWVudD1PfWV4ZWN1dGUoRixPLHosTixMKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1OfHwo'@;
put 'KCk9PlByb21pc2UucmVzb2x2ZSgpKTtyZXR1cm4gbmV3IFByb21pc2UoKFgsZWUpPT57dmFyIEo7bnVsbD09PShKPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUp8fEouZXhlY3V0ZUNvbXB1dGVKb2IoRix6LmNvbnRleHROYW1lLHouZGVidWcsTyxMLCEwLCEwKS50aGVuKHJl'@;
put 'PT57dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QocmUsRix6LmRlYnVnKSxYKHJlLnJlc3VsdCl9KS5jYXRjaChyZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmUgaW5zdGFuY2VvZiBnLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5'@;
put 'YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KHJlLEYsei5kZWJ1ZyksZWUobmV3IGcuRXJyb3JSZXNwb25zZShyZT8ubWVzc2FnZSxyZSkpKSxyZSBpbnN0YW5jZW9mIGcuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoRixPLHos'@;
put 'TikudGhlbihpZT0+e1goaWUpfSxpZT0+e2VlKGllKX0pKSx5aWVsZCBLKCkpOmVlKG5ldyBnLkVycm9yUmVzcG9uc2UocmU/Lm1lc3NhZ2UscmUpKX0pKX0pfSl9fX0sMzQ5MTpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rp'@;
put 'b24oRixPLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oSyxVKXtmdW5jdGlvbiBXKGVlKXt0cnl7WChOLm5leHQoZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBZKGVlKXt0cnl7WChOLnRocm93KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWChlZSl7'@;
put 'ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBMKEspe3JldHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFUpe1UoSyl9KX0oZWUudmFsdWUpLnRoZW4oVyxZKX1YKChOPU4uYXBwbHkoRixPfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9f'@;
put 'ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuRmlsZVVwbG9hZGVyPXZvaWQgMDtjb25zdCB5PV8oNTkyOCksZz1fKDEzOTUpLEI9XygzOTAwKSx3PV8oNjExOCk7cS5GaWxlVXBsb2FkZXI9Y2xhc3MgUCBleHRlbmRzIHcuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKE8seixOLEwpe3N1cGVy'@;
put 'KE8seiksdGhpcy5qb2JzUGF0aD1OLHRoaXMucmVxdWVzdENsaWVudD1MfWV4ZWN1dGUoTyx6LE4sTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2ZpbGVzOksscGFyYW1zOlV9PXosVz1MfHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtpZighSz8ubGVu'@;
put 'Z3RoKXRocm93IG5ldyBnLkVycm9yUmVzcG9uc2UoIkF0IGxlYXN0IG9uZSBmaWxlIG11c3QgYmUgcHJvdmlkZWQuIik7aWYoIU98fCIiPT09Tyl0aHJvdyBuZXcgZy5FcnJvclJlc3BvbnNlKCJzYXNKb2IgbXVzdCBiZSBwcm92aWRlZC4iKTtsZXQgWT0iIjtmb3IobGV0IG1lIGluIFUpVS5o'@;
put 'YXNPd25Qcm9wZXJ0eShtZSkmJihZKz1gJiR7bWV9PSR7VVttZV19YCk7Y29uc3QgWD1OLmFwcExvYz9OLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK08ucmVwbGFjZSgvXlwvLywiIik6TyxlZT1gJHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IitYfSR7WX1gLEo9bmV3IEZvcm1E'@;
put 'YXRhO2ZvcihsZXQgbWUgb2YgSylKLmFwcGVuZCgiZmlsZSIsbWUuZmlsZSxtZS5maWxlTmFtZSk7Y29uc3QgcmU9dGhpcy5yZXF1ZXN0Q2xpZW50LmdldENzcmZUb2tlbigiZmlsZSIpO3JlJiZKLmFwcGVuZCgiX2NzcmYiLHJlLnZhbHVlKSxOLmRlYnVnJiZKLmFwcGVuZCgiX2RlYnVnIiwi'@;
put 'MTMxIiksTi5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJk4uY29udGV4dE5hbWUmJkouYXBwZW5kKCJfY29udGV4dG5hbWUiLE4uY29udGV4dE5hbWUpO2NvbnN0IGllPXsiY2FjaGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRl'@;
put 'eHQvcGxhaW4ifTtyZXR1cm4gbmV3IFByb21pc2UoKG1lLF9lKT0+e3RoaXMucmVxdWVzdENsaWVudC5wb3N0KGVlLEosdm9pZCAwLCJhcHBsaWNhdGlvbi9qc29uIixpZSkudGhlbihUZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVu'@;
put 'ZFJlcXVlc3QoVGUsTyxOLmRlYnVnKTtsZXQgU2U9VGUucmVzdWx0O2lmKE4uZGVidWcpc3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCLlNlcnZlclR5cGUuU2FzVml5YTpTZT15aWVsZCgwLHkucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZSkoVGUucmVzdWx0LHRoaXMucmVxdWVzdENs'@;
put 'aWVudCxOLnNlcnZlclVybCk7YnJlYWs7Y2FzZSBCLlNlcnZlclR5cGUuU2FzOTpTZT0ic3RyaW5nIj09dHlwZW9mIFRlLnJlc3VsdD8oMCx5LnBhcnNlV2Vib3V0UmVzcG9uc2UpKFRlLnJlc3VsdCxlZSk6VGUucmVzdWx0O2JyZWFrO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc2pzOlNlPSJzdHJp'@;
put 'bmciPT10eXBlb2YgVGUucmVzdWx0PygwLHkuZ2V0VmFsaWRKc29uKShUZS5yZXN1bHQpOlRlLnJlc3VsdH1lbHNlIFNlPSJzdHJpbmciPT10eXBlb2YgVGUucmVzdWx0PygwLHkuZ2V0VmFsaWRKc29uKShUZS5yZXN1bHQpOlRlLnJlc3VsdDttZShTZSl9KSkuY2F0Y2goVGU9PkkodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe1RlIGluc3RhbmNlb2YgZy5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFRlLE8sTi5kZWJ1ZyksX2UobmV3IGcuRXJyb3JSZXNwb25zZShUZT8ubWVzc2FnZSxUZSkpKSxUZSBpbnN0YW5jZW9mIGcu'@;
put 'TG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoTyx6LE4sTCkudGhlbihTZT0+e21lKFNlKX0sU2U9PntfZShTZSl9KSkseWllbGQgVygpKTpfZShuZXcgZy5FcnJvclJlc3BvbnNlKCJGaWxlIHVwbG9hZCByZXF1ZXN0IGZhaWxl'@;
put 'ZC4iLFRlKSl9KSl9KX0pfX19LDQ0NDY6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVuY3Rpb24gVyhlZSl7dHJ5e1goTi5u'@;
put 'ZXh0KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWShlZSl7dHJ5e1goTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFgoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihVKXtV'@;
put 'KEspfSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9WCgoTj1OLmFwcGx5KEYsT3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkplc0pvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCB5PV8oMzkwMCksZz1fKDEzOTUpLEI9Xyg2'@;
put 'MTE4KSx3PV8oNTkyOCk7cS5KZXNKb2JFeGVjdXRvcj1jbGFzcyBQIGV4dGVuZHMgQi5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoTyx6KXtzdXBlcihPLHkuU2VydmVyVHlwZS5TYXNWaXlhKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9en1leGVjdXRlKE8seixOLEwsSyxVPVtdKXtyZXR1'@;
put 'cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVz1MfHwoKCk9PlByb21pc2UucmVzb2x2ZSgpKTtyZXR1cm4gbmV3IFByb21pc2UoKFgsZWUpPT57dmFyIEo7bnVsbD09PShKPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUp8fEouZXhlY3V0ZUpvYihP'@;
put 'LE4uY29udGV4dE5hbWUsTi5kZWJ1Zyx6LEspLnRoZW4ocmU9Pnt0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChyZSxPLE4uZGVidWcpO2NvbnN0IGllPSgwLHcuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKHJlLFUpO1goaWUpfSkuY2F0Y2gocmU9PkkodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JlIGluc3RhbmNlb2YgZy5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KHJlLE8sTi5kZWJ1ZyksZWUobmV3IGcuRXJyb3JSZXNwb25zZShyZT8ubWVzc2FnZSxyZSkpKSxyZSBpbnN0YW5jZW9m'@;
put 'IGcuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KCgpPT50aGlzLmV4ZWN1dGUoTyx6LE4sTCxLLFUpLnRoZW4oaWU9PntYKGllKX0saWU9PntlZShpZSl9KSkseWllbGQgVygpKTplZShuZXcgZy5FcnJvclJlc3BvbnNlKHJlPy5tZXNzYWdlLHJlKSl9KSl9'@;
put 'KX0pfX19LDYxMTg6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEIsdyxQLEYpe3JldHVybiBuZXcoUHx8KFA9UHJvbWlzZSkpKGZ1bmN0aW9uKHosTil7ZnVuY3Rpb24gTChXKXt0cnl7VShGLm5leHQoVykpfWNhdGNo'@;
put 'KFkpe04oWSl9fWZ1bmN0aW9uIEsoVyl7dHJ5e1UoRi50aHJvdyhXKSl9Y2F0Y2goWSl7TihZKX19ZnVuY3Rpb24gVShXKXtXLmRvbmU/eihXLnZhbHVlKTpmdW5jdGlvbiBPKHope3JldHVybiB6IGluc3RhbmNlb2YgUD96Om5ldyBQKGZ1bmN0aW9uKE4pe04oeil9KX0oVy52YWx1ZSkudGhl'@;
put 'bihMLEspfVUoKEY9Ri5hcHBseShCLHd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5CYXNlSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IHk9Xyg1OTI4KTtxLkJhc2VKb2JFeGVjdXRvcj1jbGFzcyBne2NvbnN0cnVj'@;
put 'dG9yKHcsUCl7dGhpcy5zZXJ2ZXJVcmw9dyx0aGlzLnNlcnZlclR5cGU9UCx0aGlzLndhaXRpbmdSZXF1ZXN0cz1bXSx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz0oKT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQoMCx5LmFzeW5jRm9yRWFjaCkodGhpcy53YWl0'@;
put 'aW5nUmVxdWVzdHMsRj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgRigpfSkpLHRoaXMud2FpdGluZ1JlcXVlc3RzPVtdfSl9YXBwZW5kV2FpdGluZ1JlcXVlc3Qodyl7dGhpcy53YWl0aW5nUmVxdWVzdHMucHVzaCh3KX1nZXRSZXF1ZXN0UGFyYW1zKHcpe2NvbnN0'@;
put 'IFA9e307cmV0dXJuIHcuZGVidWcmJihQLl9vbWl0dGV4dGxvZz0iZmFsc2UiLFAuX29taXRzZXNzaW9ucmVzdWx0cz0iZmFsc2UiLFAuX2RlYnVnPTEzMSksUH19fSwyNjkzOmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlv'@;
put 'bihOLEwsSyxVKXtyZXR1cm4gbmV3KEt8fChLPVByb21pc2UpKShmdW5jdGlvbihZLFgpe2Z1bmN0aW9uIGVlKGllKXt0cnl7cmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUpe1gobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7cmUoVS50aHJvdyhpZSkpfWNhdGNoKGxlKXtYKGxlKX19ZnVuY3Rpb24g'@;
put 'cmUoaWUpe2llLmRvbmU/WShpZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIEs/WTpuZXcgSyhmdW5jdGlvbihYKXtYKFkpfSl9KGllLnZhbHVlKS50aGVuKGVlLEopfXJlKChVPVUuYXBwbHkoTixMfHxbXSkpLm5leHQoKSl9KX0seT10aGlzJiZ0aGlzLl9faW1w'@;
put 'b3J0RGVmYXVsdHx8ZnVuY3Rpb24oTil7cmV0dXJuIE4mJk4uX19lc01vZHVsZT9OOntkZWZhdWx0Ok59fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5TYXM5Sm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IGc9eShfKDYyMzApKSxCPV8oMTM5NSks'@;
put 'dz1fKDU5MjgpLFA9Xyg2MTE4KSxGPV8oNzk1KTtxLlNhczlKb2JFeGVjdXRvcj1jbGFzcyBPIGV4dGVuZHMgUC5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoTCxLLFUsVyxZKXtzdXBlcihMLEspLHRoaXMuam9ic1BhdGg9VSx0aGlzLnJlcXVlc3RDbGllbnQ9Vyx0aGlzLnNhczlSZXF1'@;
put 'ZXN0Q2xpZW50PW5ldyBGLlNhczlSZXF1ZXN0Q2xpZW50KEwsWSl9ZXhlY3V0ZShMLEssVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9KDAsdy5pc1JlbGF0aXZlUGF0aCkoTCkmJlUuYXBwTG9jP1UuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikr'@;
put 'TC5yZXBsYWNlKC9eXC8vLCIiKTpMO2xldCBZPWAke1Uuc2VydmVyVXJsfSR7dGhpcy5qb2JzUGF0aH0/JHsiX3Byb2dyYW09IitXfWA7WT1gJHtZfSR7VS51c2VybmFtZSYmVS5wYXNzd29yZD8iJl91c2VybmFtZT0iK1UudXNlcm5hbWUrIiZfcGFzc3dvcmQ9IitVLnBhc3N3b3JkOiIifWAs'@;
put 'WT1gJHtZfSR7VS5kZWJ1Zz8iJl9kZWJ1Zz0xMzEiOiIifWA7bGV0IFg9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoVSkpLGVlPW5ldyBnLmRlZmF1bHQ7aWYoSyl0cnl7ZWU9eihlZSxLKX1jYXRjaChpZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBCLkVycm9y'@;
put 'UmVzcG9uc2UoaWU/Lm1lc3NhZ2UsaWUpKX1lbHNlIEs9IiI7Zm9yKGNvbnN0IGllIGluIFgpWC5oYXNPd25Qcm9wZXJ0eShpZSkmJmVlLmFwcGVuZChpZSxYW2llXSk7eWllbGQgdGhpcy5zYXM5UmVxdWVzdENsaWVudC5sb2dpbihVLnVzZXJuYW1lLFUucGFzc3dvcmQsdGhpcy5qb2JzUGF0'@;
put 'aCk7Y29uc3QgSj1LJiZPYmplY3Qua2V5cyhLKS5sZW5ndGg/Im11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrZWUuX2JvdW5kYXJ5OiJ0ZXh0L3BsYWluIjtyZXR1cm4gbmV3IFByb21pc2UoKGllLGxlKT0+dGhpcy5zYXM5UmVxdWVzdENsaWVudC5wb3N0KFksZWUsdm9pZCAwLEos'@;
put 'e0FjY2VwdDoiKi8qIixDb25uZWN0aW9uOiJLZWVwLUFsaXZlIn0pLnRoZW4obWU9Pnt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChtZSxMLFUuZGVidWcpLGllKG1lKX0pLmNhdGNoKG1lPT57bGV0IF9lPW1lO21lLnJlc3VsdCYmIiIhPT1tZS5yZXN1bHQ/X2U9bWUucmVzdWx0'@;
put 'Om1lLm1lc3NhZ2UmJihfZT1tZS5tZXNzYWdlKSx0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChfZSxMLFUuZGVidWcpLGxlKG5ldyBCLkVycm9yUmVzcG9uc2UobWU/Lm1lc3NhZ2UsbWUpKX0pKX0pfWdldFJlcXVlc3RQYXJhbXMoTCl7Y29uc3QgSz17fTtyZXR1cm4gTC5kZWJ1'@;
put 'ZyYmKEsuX2RlYnVnPTEzMSksS319O2NvbnN0IHo9KE4sTCk9Pntmb3IoY29uc3QgSyBpbiBMKXtjb25zdCBVPUssVz0oMCx3LmNvbnZlcnRUb0NTVikoTCxLKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Vyl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEg'@;
put 'c3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7Ti5hcHBlbmQoVSxXLHtmaWxlbmFtZTpgJHtVfS5jc3ZgLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi9jc3YifSl9cmV0dXJuIE59fSwxMDY1OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRo'@;
put 'aXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihMLEssVSxXKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihYLGVlKXtmdW5jdGlvbiBKKGxlKXt0cnl7aWUoVy5uZXh0KGxlKSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gcmUobGUpe3RyeXtpZShXLnRocm93KGxl'@;
put 'KSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gaWUobGUpe2xlLmRvbmU/WChsZS52YWx1ZSk6ZnVuY3Rpb24gWShYKXtyZXR1cm4gWCBpbnN0YW5jZW9mIFU/WDpuZXcgVShmdW5jdGlvbihlZSl7ZWUoWCl9KX0obGUudmFsdWUpLnRoZW4oSixyZSl9aWUoKFc9Vy5hcHBseShMLEt8fFtd'@;
put 'KSkubmV4dCgpKX0pfSx5PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihMKXtyZXR1cm4gTCYmTC5fX2VzTW9kdWxlP0w6e2RlZmF1bHQ6TH19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLlNhc2pzSm9iRXhlY3V0b3I9dm9p'@;
put 'ZCAwO2NvbnN0IGc9eShfKDYyMzApKSxCPV8oMzkwMCksdz1fKDEzOTUpLFA9Xyg0MDM3KSxGPV8oNTkyOCksTz1fKDU5MjgpLHo9Xyg2MTE4KTtxLlNhc2pzSm9iRXhlY3V0b3I9Y2xhc3MgTiBleHRlbmRzIHouQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEssVSxXKXtzdXBlcihLLEIu'@;
put 'U2VydmVyVHlwZS5TYXNqcyksdGhpcy5qb2JzUGF0aD1VLHRoaXMucmVxdWVzdENsaWVudD1XfWV4ZWN1dGUoSyxVLFcsWSxYLGVlPVtdKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSj1ZLHJlPSgwLE8uaXNSZWxhdGl2ZVBhdGgpKEspJiZXLmFwcExv'@;
put 'Yz9XLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0sucmVwbGFjZSgvXlwvLywiIik6SztsZXQgaWU9YCR7Vy5zZXJ2ZXJVcmx9JHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IityZX1gLGxlPU9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKFcpKSxtZT0oMCxG'@;
put 'LmdldEZvcm1EYXRhKSgpO2lmKFUpdHJ5e21lPSgwLFAuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkobWUsVSl9Y2F0Y2goU2Upe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKFNlPy5tZXNzYWdlLFNlKSl9Zm9yKGNvbnN0IFNlIGluIGxlKWxlLmhhc093blByb3Bl'@;
put 'cnR5KFNlKSYmbWUuYXBwZW5kKFNlLGxlW1NlXSk7Y29uc3QgX2U9bWUgaW5zdGFuY2VvZiBnLmRlZmF1bHQmJnR5cGVvZiBGb3JtRGF0YT4idSI/YG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSR7bWUuZ2V0SGVhZGVycygpWyJjb250ZW50LXR5cGUiXX1gOiJtdWx0aXBhcnQvZm9y'@;
put 'bS1kYXRhIjtyZXR1cm4gbmV3IFByb21pc2UoKFNlLHplKT0+e3RoaXMucmVxdWVzdENsaWVudC5wb3N0KGllLG1lLFg/LmFjY2Vzc190b2tlbixfZSkudGhlbihWPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihPYmplY3QuZW50cmllcyhWLnJlc3VsdCkubGVuZ3RoPDEp'@;
put 'dGhyb3cgbmV3IHcuSm9iRXhlY3V0aW9uRXJyb3IoMCxgTm8gd2Vib3V0IHdhcyByZXR1cm5lZCBieSBqb2IgJHtyZX0uICBQbGVhc2UgY2hlY2sgdGhlIFNBUyBsb2cgZm9yIG1vcmUgaW5mby5gLFYubG9nKTtjb25zdHtyZXN1bHQ6cH09VjtwJiYic3RyaW5nIj09dHlwZW9mIHAmJnAudHJp'@;
put 'bSgpJiYoVi5yZXN1bHQ9KDAsTy5nZXRWYWxpZEpzb24pKHApKSx0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChWLEssVy5kZWJ1Zyk7Y29uc3QgYj0oMCxPLmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKShWLGVlKTtTZShiKX0pKS5jYXRjaChWPT5JKHRoaXMsdm9pZCAw'@;
put 'LHZvaWQgMCxmdW5jdGlvbiooKXtWIGluc3RhbmNlb2Ygdy5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFYsSyxXLmRlYnVnKSx6ZShuZXcgdy5FcnJvclJlc3BvbnNlKFY/Lm1lc3NhZ2UsVikpKSxWIGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVp'@;
put 'cmVkRXJyb3I/KFl8fHplKG5ldyB3LkVycm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQgY3JlZGVudGlhbHMuIixWKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRl'@;
put 'KEssVSxXLFksWCxlZSkudGhlbihwPT57U2UocCl9LHA9Pnt6ZShwKX0pKSxKJiYoeWllbGQgSigpKSk6emUobmV3IHcuRXJyb3JSZXNwb25zZShWPy5tZXNzYWdlLFYpKX0pKX0pfSl9fX0sNjA4NDpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdh'@;
put 'aXRlcnx8ZnVuY3Rpb24oTCxLLFUsVyl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24oWCxlZSl7ZnVuY3Rpb24gSihsZSl7dHJ5e2llKFcubmV4dChsZSkpfWNhdGNoKG1lKXtlZShtZSl9fWZ1bmN0aW9uIHJlKGxlKXt0cnl7aWUoVy50aHJvdyhsZSkpfWNhdGNoKG1lKXtl'@;
put 'ZShtZSl9fWZ1bmN0aW9uIGllKGxlKXtsZS5kb25lP1gobGUudmFsdWUpOmZ1bmN0aW9uIFkoWCl7cmV0dXJuIFggaW5zdGFuY2VvZiBVP1g6bmV3IFUoZnVuY3Rpb24oZWUpe2VlKFgpfSl9KGxlLnZhbHVlKS50aGVuKEoscmUpfWllKChXPVcuYXBwbHkoTCxLfHxbXSkpLm5leHQoKSl9KX0s'@;
put 'eT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTCl7cmV0dXJuIEwmJkwuX19lc01vZHVsZT9MOntkZWZhdWx0Okx9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5XZWJKb2JFeGVjdXRvcj12b2lkIDA7Y29uc3QgZz15KF8o'@;
put 'NjIzMCkpLEI9XygzOTAwKSx3PV8oMTM5NSksUD1fKDQwMzcpLEY9XygyMTcwKSxPPV8oNTkyOCksej1fKDYxMTgpO3EuV2ViSm9iRXhlY3V0b3I9Y2xhc3MgTiBleHRlbmRzIHouQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEssVSxXLFksWCl7c3VwZXIoSyxVKSx0aGlzLmpvYnNQYXRo'@;
put 'PVcsdGhpcy5yZXF1ZXN0Q2xpZW50PVksdGhpcy5zYXNWaXlhQXBpQ2xpZW50PVh9ZXhlY3V0ZShLLFUsVyxZLFgsZWU9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBKPVkscmU9KDAsTy5pc1JlbGF0aXZlUGF0aCkoSykmJlcuYXBwTG9jP1cuYXBw'@;
put 'TG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrSy5yZXBsYWNlKC9eXC8vLCIiKTpLO2xldCBpZT1gJHtXLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK3JlfWA7aWYoVy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWEpe2xldCBTZTt0cnl7U2U9eWllbGQg'@;
put 'dGhpcy5nZXRKb2JVcmkoSyl9Y2F0Y2goemUpe3JldHVybiBuZXcgUHJvbWlzZSgoVixwKT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7emUgaW5zdGFuY2VvZiB3LkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRl'@;
put 'KEssVSxXLFksWCxlZSkudGhlbihiPT57VihiKX0sYj0+e3AoYil9KSksSiYmKHlpZWxkIEooKSkpOnAobmV3IHcuRXJyb3JSZXNwb25zZSh6ZT8ubWVzc2FnZSx6ZSkpfSkpfWllKz1TZS5sZW5ndGg+MD8iJl9qb2I9IitTZToiIixTZS5sZW5ndGg+MCYmKGllKz0iJl9qb2I9IitTZSxpZT1p'@;
put 'ZS5yZXBsYWNlKCJfcHJvZ3JhbT0iLCJfX3Byb2dyYW09IikpLGllKz1XLmNvbnRleHROYW1lJiYhL1xzLy50ZXN0KFcuY29udGV4dE5hbWUpP2AmX2NvbnRleHRuYW1lPSR7Vy5jb250ZXh0TmFtZX1gOiIifWxldCBsZT1PYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhX'@;
put 'KSksbWU9KDAsTy5nZXRGb3JtRGF0YSkoKTtpZihVKXtjb25zdCBTZT1KU09OLnN0cmluZ2lmeShVKTtpZihXLnNlcnZlclR5cGU9PT1CLlNlcnZlclR5cGUuU2FzOXx8U2UubGVuZ3RoPjVlNXx8U2UuaW5jbHVkZXMoIjsiKSl0cnl7bWU9KDAsUC5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtKSht'@;
put 'ZSxVKX1jYXRjaCh6ZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyB3LkVycm9yUmVzcG9uc2UoemU/Lm1lc3NhZ2UsemUpKX1lbHNlIHRyeXtjb25zdHtmb3JtRGF0YTp6ZSxyZXF1ZXN0UGFyYW1zOlZ9PSgwLEYuZ2VuZXJhdGVUYWJsZVVwbG9hZEZvcm0pKG1lLFUpO21lPXplLGxlPU9i'@;
put 'amVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxsZSksVil9Y2F0Y2goemUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKHplPy5tZXNzYWdlLHplKSl9fWZvcihjb25zdCBTZSBpbiBsZSlsZS5oYXNPd25Qcm9wZXJ0eShTZSkmJm1lLmFwcGVuZChTZSxsZVtT'@;
put 'ZV0pO2NvbnN0IF9lPW1lIGluc3RhbmNlb2YgZy5kZWZhdWx0JiZ0eXBlb2YgRm9ybURhdGE+InUiP2BtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke21lLmdldEhlYWRlcnMoKVsiY29udGVudC10eXBlIl19YDoibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7cmV0dXJuIG5ldyBQcm9taXNl'@;
put 'KChTZSx6ZSk9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChpZSxtZSxYPy5hY2Nlc3NfdG9rZW4sX2UpLnRoZW4oVj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVixLLFcuZGVidWcpO2xldCBwPVYucmVzdWx0O2lm'@;
put 'KFcuZGVidWcpc3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCLlNlcnZlclR5cGUuU2FzVml5YTpwPXlpZWxkKDAsTy5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShWLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQsdGhpcy5zZXJ2ZXJVcmwpO2JyZWFrO2Nhc2UgQi5TZXJ2ZXJUeXBl'@;
put 'LlNhczk6cD0ic3RyaW5nIj09dHlwZW9mIFYucmVzdWx0PygwLE8ucGFyc2VXZWJvdXRSZXNwb25zZSkoVi5yZXN1bHQsaWUpOlYucmVzdWx0fWNvbnN0IGI9KDAsTy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcykoe3Jlc3VsdDpwLGxvZzpWLmxvZ30sZWUpO1NlKGIpfSkpLmNhdGNo'@;
put 'KFY9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe1YgaW5zdGFuY2VvZiB3LkpvYkV4ZWN1dGlvbkVycm9yJiYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVixLLFcuZGVidWcpLHplKG5ldyB3LkVycm9yUmVzcG9uc2UoVj8ubWVzc2FnZSxWKSkpLFYgaW5zdGFu'@;
put 'Y2VvZiB3LkxvZ2luUmVxdWlyZWRFcnJvcj8oWXx8emUobmV3IHcuRXJyb3JSZXNwb25zZSgiUmVxdWVzdCBpcyBub3QgYXV0aGVudGljYXRlZC4gTWFrZSBzdXJlIC5lbnYgZmlsZSBleGlzdHMgd2l0aCB2YWxpZCBjcmVkZW50aWFscy4iLFYpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0'@;
put 'KCgpPT50aGlzLmV4ZWN1dGUoSyxVLFcsWSxYLGVlKS50aGVuKHA9PntTZShwKX0scD0+e3plKHApfSkpLEomJih5aWVsZCBKKCkpKTp6ZShuZXcgdy5FcnJvclJlc3BvbnNlKFY/Lm1lc3NhZ2UsVikpfSkpfSl9KX1nZXRKb2JVcmkoSyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1'@;
put 'bmN0aW9uKigpe2lmKCF0aGlzLnNhc1ZpeWFBcGlDbGllbnQpcmV0dXJuIiI7bGV0IFcsWSxVPSIiO2lmKCgwLE8uaXNSZWxhdGl2ZVBhdGgpKEspKXtjb25zdCBlZT1LLnNwbGl0KCIvIik7Vz1lZS5sZW5ndGg+MT9lZVswXToiIixZPWVlLmxlbmd0aD4xP2VlWzFdOiIifWVsc2V7Y29uc3Qg'@;
put 'ZWU9Sy5zcGxpdCgiLyIpO1k9ZWUucG9wKCl8fCIiLFc9ZWUuam9pbigiLyIpfWlmKCFZKXRocm93IG5ldyBFcnJvcigiSm9iIG5hbWUgaXMgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2NvbnN0IFg9eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEpvYnNJbkZvbGRlcihXKTtp'@;
put 'ZihYKXtjb25zdCBlZT1YLmZpbmQoSj0+Si5uYW1lPT09WSYmImpvYkRlZmluaXRpb24iPT09Si5jb250ZW50VHlwZSk7ZWUmJihVPWVlLnVyaSl9cmV0dXJuIFV9KX19fSw4MjE3OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5n'@;
put 'fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYmKEY9e2VudW1l'@;
put 'cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSkseT10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFy'@;
put 'IHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseShfKDE1NzApLHEpLHkoXygzNDkxKSxxKSx5KF8oNDQ0NikscSks'@;
put 'eShfKDYxMTgpLHEpLHkoXygyNjkzKSxxKSx5KF8oNjA4NCkscSkseShfKDEwNjUpLHEpfSw0NTg4OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSkseT1fKDUxMDgpLGc9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9u'@;
put 'KHJlLGllLGxlLG1lKXt2b2lkIDA9PT1tZSYmKG1lPWxlKTt2YXIgX2U9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpZSxsZSk7KCFfZXx8KCJnZXQiaW4gX2U/IWllLl9fZXNNb2R1bGU6X2Uud3JpdGFibGV8fF9lLmNvbmZpZ3VyYWJsZSkpJiYoX2U9e2VudW1lcmFibGU6ITAs'@;
put 'Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGllW2xlXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocmUsbWUsX2UpfTpmdW5jdGlvbihyZSxpZSxsZSxtZSl7dm9pZCAwPT09bWUmJihtZT1sZSkscmVbbWVdPWllW2xlXX0pLEI9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3Qu'@;
put 'Y3JlYXRlP2Z1bmN0aW9uKHJlLGllKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocmUsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmllfSl9OmZ1bmN0aW9uKHJlLGllKXtyZS5kZWZhdWx0PWllfSksdz10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24ocmUpe2lmKHJlJiZy'@;
put 'ZS5fX2VzTW9kdWxlKXJldHVybiByZTt2YXIgaWU9e307aWYobnVsbCE9cmUpZm9yKHZhciBsZSBpbiByZSkiZGVmYXVsdCIhPT1sZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlLGxlKSYmZyhpZSxyZSxsZSk7cmV0dXJuIEIoaWUscmUpLGllfSxQPXRoaXMmJnRo'@;
put 'aXMuX19hd2FpdGVyfHxmdW5jdGlvbihyZSxpZSxsZSxtZSl7cmV0dXJuIG5ldyhsZXx8KGxlPVByb21pc2UpKShmdW5jdGlvbihUZSxTZSl7ZnVuY3Rpb24gemUoYil7dHJ5e3AobWUubmV4dChiKSl9Y2F0Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIFYoYil7dHJ5e3AobWUudGhyb3coYikpfWNh'@;
put 'dGNoKHgpe1NlKHgpfX1mdW5jdGlvbiBwKGIpe2IuZG9uZT9UZShiLnZhbHVlKTpmdW5jdGlvbiBfZShUZSl7cmV0dXJuIFRlIGluc3RhbmNlb2YgbGU/VGU6bmV3IGxlKGZ1bmN0aW9uKFNlKXtTZShUZSl9KX0oYi52YWx1ZSkudGhlbih6ZSxWKX1wKChtZT1tZS5hcHBseShyZSxpZXx8W10p'@;
put 'KS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnRocm93SWZFcnJvcj1xLlJlcXVlc3RDbGllbnQ9dm9pZCAwO2NvbnN0IEY9dyhfKDgzNzMpKSxPPV8oMTUyNyksej1fKDEzOTUpLE49XygyODEzKSxMPV8oOTc3OCksSz1fKDk1'@;
put 'MjYpLFU9Xyg1OTI4KSxXPV8oMTAwNSksWT1fKDk1MzkpO3EuUmVxdWVzdENsaWVudD1jbGFzcyBYe2NvbnN0cnVjdG9yKGllLGxlLG1lLF9lKXt0aGlzLmJhc2VVcmw9aWUsdGhpcy5yZXF1ZXN0cz1bXSx0aGlzLnJlcXVlc3RzTGltaXQ9MTAsdGhpcy52ZXJib3NlTW9kZT0hMSx0aGlzLmNz'@;
put 'cmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5nZXRSZXF1ZXN0cz0oKT0+dGhpcy5yZXF1ZXN0cyx0aGlzLmNsZWFyUmVxdWVzdHM9KCk9Pnt0aGlzLnJlcXVlc3RzPVtdfSx0aGlzLmF1dGhvcml6ZT1UZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0'@;
put 'IFNlPW51bGw7Y29uc3QgemU9e30sVj1UZS5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSxwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3AuaW5uZXJIVE1MPVY7Y29uc3QgYj1wLnF1ZXJ5U2VsZWN0b3IoIiNhcHBsaWNhdGlvbl9hdXRob3JpemF0aW9uIik7'@;
put 'U2U9Yj90aGlzLmJhc2VVcmwrYi5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpOm51bGw7Y29uc3QgeD1iPy5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCIpO2Zvcihjb25zdCBIIG9mIHgpInVzZXJfb2F1dGhfYXBwcm92YWwiPT09SC5uYW1lJiYoSC52YWx1ZT0idHJ1ZSIpLHplW0gubmFtZV09SC52'@;
put 'YWx1ZTtjb25zdCBDPU9iamVjdC5rZXlzKHplKS5maW5kKEg9Pkg/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoImNzcmYiKSk7QyYmKHRoaXMuY3NyZlRva2VuLnZhbHVlPXplW0NdLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWU9dGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZXx8IngtY3NyZi10'@;
put 'b2tlbiIpO2NvbnN0IFQ9bmV3IEZvcm1EYXRhO2Zvcihjb25zdCBIIGluIHplKXplLmhhc093blByb3BlcnR5KEgpJiZULmFwcGVuZChILHplW0hdKTtpZighU2UpdGhyb3cgbmV3IEVycm9yKCJBdXRoIEZvcm0gVVJMIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiB5aWVsZCB0aGlz'@;
put 'Lmh0dHBDbGllbnQucG9zdChTZSxULHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6e0FjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiJ9fSkudGhlbihIPT5ILmRhdGEpLmNhdGNoKEg9PnsoSS5sb2dnZXJ8fHkpLmVycm9yKEgpfSl9KSx0aGlzLnByZXR0aWZ5U3Ry'@;
put 'aW5nPVRlPT4oMCxZLmluc3BlY3QpKFRlLHtjb2xvcnM6ImJsZWFjaGVkIiE9PXRoaXMudmVyYm9zZU1vZGV9KSx0aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5PVRlPT57aWYoIVRlKXJldHVybiIiO2xldCBTZTtpZigic3RyaW5nIj09dHlwZW9mIFRlKXRyeXtTZT1KU09OLnBhcnNlKFRlKX1j'@;
put 'YXRjaHtTZT1UZX1lbHNlIFNlPVRlO2NvbnN0IHplPXRoaXMucHJldHRpZnlTdHJpbmcoU2UpLnNwbGl0KCJcbiIpO3JldHVybiB6ZS5sZW5ndGg+NTEmJih6ZS5zcGxpY2UoNTApLHplLnB1c2goIi4uLiIpKSx6ZS5qb2luKCJcbiIpfSx0aGlzLmhhbmRsZUF4aW9zUmVzcG9uc2U9VGU9Pnt2'@;
put 'YXIgU2UsemUsVixwO2NvbnN0e3N0YXR1czpiLGNvbmZpZzp4LHJlcXVlc3Q6QyxkYXRhOlR9PVRlLEg9bnVsbCE9PShTZT1DPy5faGVhZGVyKSYmdm9pZCAwIT09U2U/U2U6Ik5vdCBwcm92aWRlZFxuIixqPW51bGwhPT0oVj1udWxsPT09KHplPUM/LnJlcyl8fHZvaWQgMD09PXplP3ZvaWQg'@;
put 'MDp6ZS5yYXdIZWFkZXJzKSYmdm9pZCAwIT09Vj9WOlsiTm90IHByb3ZpZGVkIl0sRT10aGlzLmZvcm1hdEhlYWRlcnMoaiksbT10aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5KFQpO3JldHVybiBudWxsPT09KHA9SS5sb2dnZXIpfHx2b2lkIDA9PT1wfHxwLmluZm8oYEhUVFAgUmVxdWVzdCAo'@;
put 'Zmlyc3QgNTAgbGluZXMpOlxuJHtIfSR7dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keSh4LmRhdGEpfVxuXG5IVFRQIFJlc3BvbnNlIENvZGU6ICR7dGhpcy5wcmV0dGlmeVN0cmluZyhiKX1cblxuSFRUUCBSZXNwb25zZSAoZmlyc3QgNTAgbGluZXMpOlxuJHtFfSR7bT9gXG5cbiR7bX1gOiIi'@;
put 'fVxuYCksVGV9LHRoaXMuaGFuZGxlQXhpb3NFcnJvcj1UZT0+e3ZhciBTZSx6ZSxWLHAsYix4O2NvbnN0IEM9Ik5vdCBwcm92aWRlZCIse3Jlc3BvbnNlOlQscmVxdWVzdDpILGNvbmZpZzpqfT1UZTtsZXQgRT17X2hlYWRlcjpgJHtDfVxuYCxyZXM6e3Jhd0hlYWRlcnM6W0NdfX07SCYmKEU9'@;
put 'e19oZWFkZXI6bnVsbCE9PShWPW51bGwhPT0oU2U9SC5faGVhZGVyKSYmdm9pZCAwIT09U2U/U2U6bnVsbD09PSh6ZT1ILl9jdXJyZW50UmVxdWVzdCl8fHZvaWQgMD09PXplP3ZvaWQgMDp6ZS5faGVhZGVyKSYmdm9pZCAwIT09Vj9WOkMscmVzOntyYXdIZWFkZXJzOm51bGwhPT0oYj1udWxs'@;
put 'PT09KHA9SC5yZXMpfHx2b2lkIDA9PT1wP3ZvaWQgMDpwLnJhd0hlYWRlcnMpJiZ2b2lkIDAhPT1iP2I6W0NdfX0pO2xldCBtPVR8fHtzdGF0dXM6QyxyZXF1ZXN0OkUsY29uZmlnOmp8fHtkYXRhOkMsaGVhZGVyczp7fX0sZGF0YTpDfTtjb25zdHtzdGF0dXM6QSxyZXF1ZXN0Om9lLGRhdGE6'@;
put 'dGV9PW0se19oZWFkZXI6c2UscmVzOndlfT1vZSxVZT10aGlzLmZvcm1hdEhlYWRlcnMod2UucmF3SGVhZGVycyksSmU9dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keSh0ZSk7cmV0dXJuIG51bGw9PT0oeD1JLmxvZ2dlcil8fHZvaWQgMD09PXh8fHguaW5mbyhgSFRUUCBSZXF1ZXN0IChmaXJz'@;
put 'dCA1MCBsaW5lcyk6XG4ke3NlfSR7dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShqPy5kYXRhKX1cblxuSFRUUCBSZXNwb25zZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmcoQSl9XG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7VWV9JHtKZT9gXG5cbiR7SmV9YDoi'@;
put 'In1cbmApLFRlfSx0aGlzLmZvcm1hdEhlYWRlcnM9VGU9PlRlLnJlZHVjZSgoU2UsemUsVik9PlNlKyhWJTI9PTA/YCR7MD09PVY/IiI6IlxuIn0ke3plfWA6YDogJHt6ZX1gKSwiIiksdGhpcy5zZXRWZXJib3NlTW9kZT1UZT0+e3RoaXMudmVyYm9zZU1vZGU9VGUsdGhpcy52ZXJib3NlTW9k'@;
put 'ZT90aGlzLmVuYWJsZVZlcmJvc2VNb2RlKCk6dGhpcy5kaXNhYmxlVmVyYm9zZU1vZGUoKX0sdGhpcy5lbmFibGVWZXJib3NlTW9kZT0oVGU9dGhpcy5oYW5kbGVBeGlvc1Jlc3BvbnNlLFNlPXRoaXMuaGFuZGxlQXhpb3NFcnJvcik9Pnt0aGlzLmh0dHBJbnRlcmNlcHRvcj10aGlzLmh0dHBD'@;
put 'bGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShUZSxTZSl9LHRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlPSgpPT57dGhpcy5odHRwSW50ZXJjZXB0b3ImJnRoaXMuaHR0cENsaWVudC5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZWplY3QodGhpcy5odHRwSW50ZXJjZXB0b3IpfSx0aGlzLmdl'@;
put 'dEhlYWRlcnM9KFRlLFNlKT0+e2NvbnN0IHplPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09U2UmJih6ZVsiQ29udGVudC1UeXBlIl09U2UpLHplLkFjY2VwdD0iYXBwbGljYXRpb24vanNvbiI9PT1TZT8iYXBwbGljYXRpb24vanNvbiI6IiovKiIsVGUm'@;
put 'Jih6ZS5BdXRob3JpemF0aW9uPWBCZWFyZXIgJHtUZX1gKSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lJiZ0aGlzLmNzcmZUb2tlbi52YWx1ZSYmKHplW3RoaXMuY3NyZlRva2VuLmhlYWRlck5hbWVdPXRoaXMuY3NyZlRva2VuLnZhbHVlKSx6ZX0sdGhpcy5wYXJzZUFuZFNldEZpbGVVcGxv'@;
put 'YWRDc3JmVG9rZW49VGU9Pntjb25zdCBTZT10aGlzLnBhcnNlQ3NyZlRva2VuKFRlKTtTZSYmKHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbj1TZSl9LHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW49VGU9Pntjb25zdCBTZT10aGlzLnBhcnNlQ3NyZlRva2VuKFRlKTtTZSYmKHRoaXMuY3NyZlRv'@;
put 'a2VuPVNlKX0sdGhpcy5wYXJzZUNzcmZUb2tlbj1UZT0+e3ZhciBTZTtjb25zdCB6ZT1udWxsPT09KFNlPVRlLmhlYWRlcnNbIngtY3NyZi1oZWFkZXIiXSl8fHZvaWQgMD09PVNlP3ZvaWQgMDpTZS50b0xvd2VyQ2FzZSgpO2lmKHplKXJldHVybntoZWFkZXJOYW1lOnplLHZhbHVlOlRlLmhl'@;
put 'YWRlcnNbemVdfHwiIn19LHRoaXMuaGFuZGxlRXJyb3I9KFRlLFNlLHplPSExKT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVj1UZS5yZXNwb25zZTtpZihUZSBpbnN0YW5jZW9mIHouQXV0aG9yaXplRXJyb3Ipe2NvbnN0IHA9eWllbGQgdGhpcy5odHRwQ2xpZW50'@;
put 'LmdldChUZS5jb25maXJtVXJsLHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIixBY2NlcHQ6IiovKiJ9fSkuY2F0Y2goYj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShiLCJFcnJvciB3aGlsZSBnZXR0aW5nIGVycm9yIGNvbmZpcm1V'@;
put 'cmwuICIpfSk7cmV0dXJuKDAsTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkocD8uZGF0YSkmJih5aWVsZCB0aGlzLmF1dGhvcml6ZShwLmRhdGEpLmNhdGNoKGI9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoYiwiRXJyb3Igd2hpbGUgYXV0aG9yaXppbmcgcmVxdWVzdC4gIil9KSkseWll'@;
put 'bGQgU2UoKS5jYXRjaChiPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKGIsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KX1pZihUZSBpbnN0YW5jZW9mIHouTG9naW5SZXF1aXJlZEVycm9yKXRocm93IHRoaXMuY2xlYXJDc3JmVG9rZW5zKCks'@;
put 'VGU7aWYoVGUgaW5zdGFuY2VvZiBXLkludmFsaWRTQVNqc0NzcmZFcnJvcilyZXR1cm4geWllbGQgdGhpcy5odHRwQ2xpZW50LmdldCgiLyIse3dpdGhYU1JGVG9rZW46ITB9KS50aGVuKHA9Pnt2YXIgYjtjb25zdCB4PW51bGw9PT0oYj0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhT'@;
put 'UkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWMocC5kYXRhKSl8fHZvaWQgMD09PWI/dm9pZCAwOmJbMV07eCYmKGRvY3VtZW50LmNvb2tpZT14KX0pLmNhdGNoKHA9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSko'@;
put 'cCwiRXJyb3Igd2hpbGUgcmUtZmV0Y2hpbmcgQ1NSRiB0b2tlbi4iKX0pLHlpZWxkIFNlKCkuY2F0Y2gocD0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShwLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSk7aWYoNDAzPT09Vj8uc3RhdHVzfHw0'@;
put 'NDk9PT1WPy5zdGF0dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRDc3JmVG9rZW4oViksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWUpcmV0dXJuIHlpZWxkIFNlKCkuY2F0Y2gocD0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShwLCJFcnJvciB3aGlsZSBl'@;
put 'eGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSk7dGhyb3cgVGV9aWYoNDA0PT09Vj8uc3RhdHVzKXRocm93IG5ldyB6Lk5vdEZvdW5kRXJyb3IoVi5jb25maWcudXJsKTtpZig1MDIhPT1WPy5zdGF0dXMpdGhyb3cgVGUuaXNBeGlvc0Vycm9yJiYiVU5BQkxFX1RPX1ZFUklG'@;
put 'WV9MRUFGX1NJR05BVFVSRSI9PT1UZS5jb2RlP25ldyB6LkNlcnRpZmljYXRlRXJyb3IoVGUubWVzc2FnZSk6VGUubWVzc2FnZT9UZTooMCxMLnByZWZpeE1lc3NhZ2UpKFRlLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIik7aWYoemUpdGhyb3cgbmV3IHouSW50ZXJuYWxTZXJ2ZXJF'@;
put 'cnJvcn0pLHRoaXMuY3JlYXRlSHR0cENsaWVudChpZSxsZSksbWUmJih0aGlzLnJlcXVlc3RzTGltaXQ9bWUpLF9lJiYodGhpcy5zZXRWZXJib3NlTW9kZShfZSksdGhpcy5lbmFibGVWZXJib3NlTW9kZSgpKX1zZXRDb25maWcoaWUsbGUpe3RoaXMuY3JlYXRlSHR0cENsaWVudChpZSxsZSl9'@;
put 'c2F2ZUxvY2FsU3RvcmFnZVRva2VuKGllLGxlKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWNjZXNzVG9rZW4iLGllKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2VuIixsZSl9Z2V0Q3NyZlRva2VuKGllPSJnZW5lcmFsIil7cmV0dXJuImZpbGUiPT09aWU/dGhpcy5maWxlVXBs'@;
put 'b2FkQ3NyZlRva2VuOnRoaXMuY3NyZlRva2VufWNsZWFyQ3NyZlRva2Vucygpe3RoaXMuY3NyZlRva2VuPXtoZWFkZXJOYW1lOiIiLHZhbHVlOiIifSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9fWNsZWFyTG9jYWxTdG9yYWdlVG9rZW5zKCl7bG9j'@;
put 'YWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIiwiIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsIiIpfWdldEJhc2VVcmwoKXtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmJhc2VVUkx8fCIifWFwcGVuZFJlcXVlc3QoaWUsbGUsbWUpe2xldCBfZT0i'@;
put 'IixUZT0iIixTZT1udWxsO21lJiYoaWU/LmxvZz8oX2U9KDAsVS5wYXJzZVNvdXJjZUNvZGUpKGllLmxvZyksVGU9KDAsVS5wYXJzZUdlbmVyYXRlZENvZGUpKGllLmxvZyksU2U9aWU/LnJlc3VsdD9pZS5yZXN1bHQuV09SSzppZS5sb2cpOmllPy5yZXN1bHQmJigic3RyaW5nIj09dHlwZW9m'@;
put 'IGllLnJlc3VsdCYmKF9lPSgwLFUucGFyc2VTb3VyY2VDb2RlKShpZS5yZXN1bHQpLFRlPSgwLFUucGFyc2VHZW5lcmF0ZWRDb2RlKShpZS5yZXN1bHQpKSxTZT1pZS5yZXN1bHQuV09SSykpO2NvbnN0IHplPSJzdHJpbmciPT10eXBlb2YgaWU/LnJlc3VsdD9pZT8ucmVzdWx0OkpTT04uc3Ry'@;
put 'aW5naWZ5KGllPy5yZXN1bHQsbnVsbCwyKTt0aGlzLnJlcXVlc3RzLnB1c2goe2xvZ0ZpbGU6aWU/LmxvZ3x8emV8fGllLHNlcnZpY2VMaW5rOmxlLHRpbWVzdGFtcDpuZXcgRGF0ZSxzb3VyY2VDb2RlOl9lLGdlbmVyYXRlZENvZGU6VGUsU0FTV09SSzpTZX0pLHRoaXMucmVxdWVzdHMubGVu'@;
put 'Z3RoPnRoaXMucmVxdWVzdHNMaW1pdCYmdGhpcy5yZXF1ZXN0cy5zcGxpY2UoMCwxKX1nZXQoaWUsbGUsbWU9ImFwcGxpY2F0aW9uL2pzb24iLF9lPXt9LFRlPSExKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgemU9e2hlYWRlcnM6T2JqZWN0LmFzc2ln'@;
put 'bihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhsZSxtZSkpLF9lKSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09bWU/InRleHQiOiJqc29uIix3aXRoWFNSRlRva2VuOiEwfTtyZXR1cm4idGV4dC9wbGFpbiI9PT1tZSYmKHplLnRyYW5zZm9ybVJlc3BvbnNlPXZvaWQgMCks'@;
put 'dGhpcy5odHRwQ2xpZW50LmdldChpZSx6ZSkudGhlbihWPT4oKDAscS50aHJvd0lmRXJyb3IpKFYpLHRoaXMucGFyc2VSZXNwb25zZShWKSkpLmNhdGNoKFY9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFYsKCk9PnRoaXMu'@;
put 'Z2V0KGllLGxlLG1lLF9lKS5jYXRjaChwPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHAsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSksVGUpfSkpfSl9cG9zdChpZSxsZSxtZSxfZT0iYXBwbGljYXRpb24vanNvbiIsVGU9e30sU2U9e30pe3Jl'@;
put 'dHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCB6ZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKG1lLF9lKSksVGUpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdChpZSxsZSxPYmplY3QuYXNzaWduKHtoZWFkZXJzOnpl'@;
put 'LHdpdGhYU1JGVG9rZW46ITB9LFNlKSkudGhlbihWPT4oKDAscS50aHJvd0lmRXJyb3IpKFYpLHRoaXMucGFyc2VSZXNwb25zZShWKSkpLmNhdGNoKFY9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFYsKCk9PnRoaXMucG9z'@;
put 'dChpZSxsZSxtZSxfZSxUZSkpfSkpfSl9cHV0KGllLGxlLG1lLF9lPXt9KXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhtZSwiYXBwbGljYXRpb24vanNvbiIpKSxf'@;
put 'ZSk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wdXQoaWUsbGUse2hlYWRlcnM6VGUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oU2U9PigoMCxxLnRocm93SWZFcnJvcikoU2UpLHRoaXMucGFyc2VSZXNwb25zZShTZSkpKS5jYXRjaChTZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24q'@;
put 'KCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoU2UsKCk9PnRoaXMucHV0KGllLGxlLG1lLF9lKSl9KSl9KX1kZWxldGUoaWUsbGUpe3JldHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT10aGlzLmdldEhlYWRlcnMobGUsImFwcGxpY2F0aW9uL2pz'@;
put 'b24iKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LmRlbGV0ZShpZSx7aGVhZGVyczptZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihfZT0+KCgwLHEudGhyb3dJZkVycm9yKShfZSksdGhpcy5wYXJzZVJlc3BvbnNlKF9lKSkpLmNhdGNoKF9lPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlv'@;
put 'biooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihfZSwoKT0+dGhpcy5kZWxldGUoaWUsbGUpKX0pKX0pfXBhdGNoKGllLGxlPXt9LG1lKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgX2U9dGhpcy5nZXRIZWFkZXJzKG1lLCJhcHBsaWNhdGlv'@;
put 'bi9qc29uIik7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wYXRjaChpZSxsZSx7aGVhZGVyczpfZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihUZT0+KCgwLHEudGhyb3dJZkVycm9yKShUZSksdGhpcy5wYXJzZVJlc3BvbnNlKFRlKSkpLmNhdGNoKFRlPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxm'@;
put 'dW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihUZSwoKT0+dGhpcy5wYXRjaChpZSxsZSxtZSkpfSkpfSl9dXBsb2FkRmlsZShpZSxsZSxtZSl7dmFyIF9lO3JldHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBUZT10aGlzLmdldEhlYWRl'@;
put 'cnMobWUsImFwcGxpY2F0aW9uL2pzb24iKTtudWxsIT09KF9lPXRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbikmJnZvaWQgMCE9PV9lJiZfZS52YWx1ZSYmKFRlW3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4udmFsdWUpO3RyeXtj'@;
put 'b25zdCBTZT15aWVsZCB0aGlzLmh0dHBDbGllbnQucG9zdChpZSxsZSx7aGVhZGVyczpUZSx0cmFuc2Zvcm1SZXF1ZXN0OnplPT56ZX0pO3JldHVybntyZXN1bHQ6U2UuZGF0YSxldGFnOlNlLmhlYWRlcnMuZXRhZ319Y2F0Y2goU2Upe2NvbnN0IHplPVNlLnJlc3BvbnNlO2lmKDQwMz09PXpl'@;
put 'Py5zdGF0dXN8fDQ0OT09PXplPy5zdGF0dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuKHplKSx0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pcmV0dXJuIHRoaXMudXBsb2FkRmlsZShpZSxsZSxtZSk7dGhyb3cgU2V9dGhyb3cgU2V9fSl9cGFyc2VSZXNwb25zZShp'@;
put 'ZSl7Y29uc3QgbGU9aWU/LmhlYWRlcnM/aWUuaGVhZGVycy5ldGFnOiIiO2xldCBtZSxfZT0hMTt0cnl7bWU9InN0cmluZyI9PXR5cGVvZiBpZS5kYXRhP0pTT04ucGFyc2UoaWUuZGF0YSk6aWUuZGF0YX1jYXRjaHt0cnl7bWU9SlNPTi5wYXJzZSgoMCxOLnBhcnNlV2Vib3V0UmVzcG9uc2Up'@;
put 'KGllLmRhdGEpKX1jYXRjaHttZT1pZS5kYXRhfV9lPSEwfWxldCBUZT17cmVzdWx0Om1lLGV0YWc6bGUsc3RhdHVzOmllLnN0YXR1c307cmV0dXJuIF9lJiYoVGUubG9nPWllLmRhdGEpLFRlfWNyZWF0ZUh0dHBDbGllbnQoaWUsbGUpe2NvbnN0IG1lPWxlP25ldyBGLkFnZW50KGxlKTp2b2lk'@;
put 'IDA7dGhpcy5odHRwQ2xpZW50PSgwLFUuY3JlYXRlQXhpb3NJbnN0YW5jZSkoaWUsbWUpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1fZT0+X2U+PTIwMCYmX2U8PTQwMX19LHEudGhyb3dJZkVycm9yPXJlPT57dmFyIGllLGxlLG1lLF9lLFRlLFNlLHplO3N3aXRj'@;
put 'aChyZS5zdGF0dXMpe2Nhc2UgNDAwOmlmKCJvYmplY3QiPT10eXBlb2YgcmUuZGF0YSYmImludmFsaWRfZ3JhbnQiPT09cmUuZGF0YS5lcnJvcil0aHJvdyBuZXcgei5Mb2dpblJlcXVpcmVkRXJyb3IocmUuZGF0YSk7aWYoInN0cmluZyI9PXR5cGVvZiByZS5kYXRhJiYiaW52YWxpZCBjc3Jm'@;
put 'IHRva2VuISI9PT1yZS5kYXRhLnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IFcuSW52YWxpZFNBU2pzQ3NyZkVycm9yO2JyZWFrO2Nhc2UgNDAxOnRocm93Im9iamVjdCI9PXR5cGVvZiByZS5kYXRhP25ldyB6LkxvZ2luUmVxdWlyZWRFcnJvcihyZS5kYXRhKTpuZXcgei5Mb2dpblJlcXVpcmVk'@;
put 'RXJyb3J9aWYobnVsbCE9PShsZT1udWxsPT09KGllPXJlLmRhdGEpfHx2b2lkIDA9PT1pZT92b2lkIDA6aWUuZW50aXR5SUQpJiZ2b2lkIDAhPT1sZSYmbGUuaW5jbHVkZXMoImxvZ2luIikpdGhyb3cgbmV3IHouTG9naW5SZXF1aXJlZEVycm9yO2lmKCJzdHJpbmciPT10eXBlb2YgcmUuZGF0'@;
put 'YSYmKDAsTy5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkocmUuZGF0YSkpdGhyb3cgbmV3IHouQXV0aG9yaXplRXJyb3IoIkF1dGhvcml6YXRpb24gcmVxdWlyZWQiLHJlLnJlcXVlc3QucmVzcG9uc2VVUkwpO2lmKCJzdHJpbmciPT10eXBlb2YgcmUuZGF0YSYmKDAsTy5pc0xvZ0luUmVxdWly'@;
put 'ZWQpKHJlLmRhdGEpJiYobnVsbD09PShfZT1udWxsPT09KG1lPXJlLmNvbmZpZyl8fHZvaWQgMD09PW1lP3ZvaWQgMDptZS51cmwpfHx2b2lkIDA9PT1fZXx8IV9lLmluY2x1ZGVzKCIvU0FTTG9nb24vbG9naW4iKSkpdGhyb3cgbmV3IHouTG9naW5SZXF1aXJlZEVycm9yO2lmKG51bGwhPT0o'@;
put 'VGU9cmUuZGF0YSkmJnZvaWQgMCE9PVRlJiZUZS5hdXRoX3JlcXVlc3QpdGhyb3cgbmV3IHouQXV0aG9yaXplRXJyb3IocmUuZGF0YS5tZXNzYWdlLHJlLnJlcXVlc3QucmVzcG9uc2VVUkwpO2lmKG51bGwhPT0oemU9bnVsbD09PShTZT1yZS5jb25maWcpfHx2b2lkIDA9PT1TZT92b2lkIDA6'@;
put 'U2UudXJsKSYmdm9pZCAwIT09emUmJnplLmluY2x1ZGVzKCJzYXNBdXRoRXJyb3IiKSl0aHJvdyBuZXcgSy5TQVM5QXV0aEVycm9yO2NvbnN0IFY9SihyZS5kYXRhKTtpZihWKXRocm93IFZ9O2NvbnN0IEo9cmU9PntpZighcmUpcmV0dXJuIG51bGw7dHJ5e2NvbnN0IGllPUpTT04ucGFyc2Uo'@;
put 'cmU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpO2lmKGllLmVycm9yQ29kZSYmaWUubWVzc2FnZSlyZXR1cm4gbmV3IHouSm9iRXhlY3V0aW9uRXJyb3IoaWUuZXJyb3JDb2RlLGllLm1lc3NhZ2UscmU/LnJlcGxhY2UoL1tcblxyXS9nLCIgIikpfWNhdGNoe310cnl7aWYocmU/LmluY2x1ZGVz'@;
put 'KCd7ImVycm9yQ29kZScpKXtjb25zdCBsZT1yZS5zcGxpdCgneyJlcnJvckNvZGUnKTtpZihsZS5sZW5ndGg+MSl7Y29uc3QgbWU9J3siZXJyb3JDb2RlJytsZVsxXS5zcGxpdCgnIn0nKVswXSsnIn0nLF9lPUpTT04ucGFyc2UobWUucmVwbGFjZSgvW1xuXHJdL2csIiAiKSk7cmV0dXJuIG5l'@;
put 'dyB6LkpvYkV4ZWN1dGlvbkVycm9yKF9lLmVycm9yQ29kZSxfZS5tZXNzYWdlLHJlPy5yZXBsYWNlKC9bXG5ccl0vZywiXG4iKSl9fX1jYXRjaHt9dHJ5e2lmKHJlPy5tYXRjaCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSkpe2NvbnN0IGxlPXJlLnNwbGl0KC9zdG9yZWQgcHJvY2Vz'@;
put 'cyBub3QgZm91bmQ6IC9pKTtpZihsZS5sZW5ndGg+MSl7Y29uc3QgbWU9bGVbMV0uc3BsaXQoIjxpPiIpWzFdLnNwbGl0KCI8L2k+IilbMF0sX2U9bWUuZW5kc1dpdGgoInJ1bm5lciIpPyJTQVNKUyBydW5uZXIgbm90IGZvdW5kLiBIZXJlJ3MgdGhlIGxpbmsgKGh0dHBzOi8vY2xpLnNhc2pz'@;
put 'LmlvL2F1dGgvI3Nhc2pzLXJ1bm5lcikgdG8gdGhlIFNBUyBjb2RlIGZvciByZWdpc3RlcmluZyB0aGUgU0FTanMgcnVubmVyIjpgU3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAke21lfWA7cmV0dXJuIG5ldyB6LkpvYkV4ZWN1dGlvbkVycm9yKDUwMCxfZSwiIil9fX1jYXRjaHt9dHJ5e2lm'@;
put 'KCFyZT8ubWF0Y2goLz4+d2Vib3V0QkVHSU48PC8pJiZyZT8ubWF0Y2goL1N0b3JlZCBQcm9jZXNzIEVycm9yL2kpJiZyZT8ubWF0Y2goL1RoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuL2kpKXtjb25zdCBsZT1yZS5zcGxpdCgiPGgyPlNBUyBMb2c8L2gyPiIpO2lmKGxlLmxl'@;
put 'bmd0aD4xKXtjb25zdCBtZT1sZVsxXS5zcGxpdCgiPHByZT4iKVsxXS5zcGxpdCgiPC9wcmU+IilbMF07cmV0dXJuIG5ldyB6LkpvYkV4ZWN1dGlvbkVycm9yKDUwMCwiVGhpcyByZXF1ZXN0IGNvbXBsZXRlZCB3aXRoIGVycm9ycy4iLG1lKX19fWNhdGNoe31yZXR1cm4gbnVsbH19LDc5NTpm'@;
put 'dW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oTCxLLFUsVyl7dm9pZCAwPT09VyYmKFc9VSk7dmFyIFk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihLLFUpOyghWXx8KCJn'@;
put 'ZXQiaW4gWT8hSy5fX2VzTW9kdWxlOlkud3JpdGFibGV8fFkuY29uZmlndXJhYmxlKSkmJihZPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBLW1VdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShMLFcsWSl9OmZ1bmN0aW9uKEwsSyxVLFcpe3ZvaWQgMD09PVcmJihXPVUp'@;
put 'LExbV109S1tVXX0pLHk9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsSyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEwsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOkt9KX06ZnVuY3Rpb24oTCxLKXtMLmRlZmF1bHQ9S30pLGc9'@;
put 'dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKEwpe2lmKEwmJkwuX19lc01vZHVsZSlyZXR1cm4gTDt2YXIgSz17fTtpZihudWxsIT1MKWZvcih2YXIgVSBpbiBMKSJkZWZhdWx0IiE9PVUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChMLFUpJiZJKEssTCxV'@;
put 'KTtyZXR1cm4geShLLEwpLEt9LEI9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEwsSyxVLFcpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKFgsZWUpe2Z1bmN0aW9uIEoobGUpe3RyeXtpZShXLm5leHQobGUpKX1jYXRjaChtZSl7ZWUobWUpfX1mdW5jdGlvbiBy'@;
put 'ZShsZSl7dHJ5e2llKFcudGhyb3cobGUpKX1jYXRjaChtZSl7ZWUobWUpfX1mdW5jdGlvbiBpZShsZSl7bGUuZG9uZT9YKGxlLnZhbHVlKTpmdW5jdGlvbiBZKFgpe3JldHVybiBYIGluc3RhbmNlb2YgVT9YOm5ldyBVKGZ1bmN0aW9uKGVlKXtlZShYKX0pfShsZS52YWx1ZSkudGhlbihKLHJl'@;
put 'KX1pZSgoVz1XLmFwcGx5KEwsS3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLlNhczlSZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCB3PV8oODIyNCksUD1nKF8oNzg1NykpLEY9Xyg5Nzc4KSxPPV8oNDU4OCksej1f'@;
put 'KDEzOTUpO3EuU2FzOVJlcXVlc3RDbGllbnQ9Y2xhc3MgTiBleHRlbmRzIE8uUmVxdWVzdENsaWVudHtjb25zdHJ1Y3RvcihLLFUpe3N1cGVyKEssVSksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLm1heFJlZGlyZWN0cz0wLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1'@;
put 'cz1XPT5XPj0yMDAmJlc8MzAzLHcud3JhcHBlciYmKCgwLHcud3JhcHBlcikodGhpcy5odHRwQ2xpZW50KSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyPW5ldyBQLkNvb2tpZUphcil9bG9naW4oSyxVLFcpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25z'@;
put 'dCBZPWAvVXNlciBGb2xkZXJzLyR7S30vTXkgRm9sZGVyL3Nhc2pzL3J1bm5lcmA7dGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphciYmKHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXIucmVtb3ZlQWxsQ29va2llcygpLHlpZWxkIHRoaXMuZ2V0KGAke1d9P19wcm9ncmFtPSR7WX0mX3Vz'@;
put 'ZXJuYW1lPSR7S30mX3Bhc3N3b3JkPSR7VX1gLHZvaWQgMCwidGV4dC9wbGFpbiIpKX0pfWdldChLLFUsVz0iYXBwbGljYXRpb24vanNvbiIsWT17fSxYPSExKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSj17aGVhZGVyczpPYmplY3QuYXNzaWduKE9i'@;
put 'amVjdC5hc3NpZ24oe30sdGhpcy5nZXRIZWFkZXJzKFUsVykpLFkpLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT1XPyJ0ZXh0IjoianNvbiIsd2l0aFhTUkZUb2tlbjohMH07cmV0dXJuInRleHQvcGxhaW4iPT09VyYmKEoudHJhbnNmb3JtUmVzcG9uc2U9dm9pZCAwKSx0aGlzLmh0dHBD'@;
put 'bGllbnQuZ2V0KEssSikudGhlbihyZT0+MzAyPT09cmUuc3RhdHVzP3RoaXMuZ2V0KHJlLmhlYWRlcnMubG9jYXRpb24sVSxXKTooKDAsTy50aHJvd0lmRXJyb3IpKHJlKSx0aGlzLnBhcnNlUmVzcG9uc2UocmUpKSkuY2F0Y2gocmU9PkIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigp'@;
put 'e2lmKHJlIGluc3RhbmNlb2Ygei5Kb2JFeGVjdXRpb25FcnJvcil0aHJvdyByZTtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihyZSwoKT0+dGhpcy5nZXQoSyxVLFcsWSkuY2F0Y2goaWU9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkoaWUsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBo'@;
put 'YW5kbGUgZXJyb3IgY2FsbGJhY2suICIpfSksWCkuY2F0Y2goaWU9Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkoaWUsIkVycm9yIHdoaWxlIGhhbmRsaW5nIGVycm9yLiAiKX0pfSkpfSl9cG9zdChLLFUsVyxZPSJhcHBsaWNhdGlvbi9qc29uIixYPXt9KXtyZXR1cm4gQih0aGlzLHZvaWQg'@;
put 'MCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgZWU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhXLFkpKSxYKTtyZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3QoSyxVLHtoZWFkZXJzOmVlLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKEo9PkIodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiAzMDI9PT1KLnN0YXR1cz95aWVsZCB0aGlzLmdldChKLmhlYWRlcnMubG9jYXRpb24sdm9pZCAwLFksWCk6KCgwLE8udGhyb3dJZkVycm9yKShKKSx0aGlzLnBhcnNlUmVzcG9uc2UoSikpfSkpLmNhdGNoKEo9PkIodGhpcyx2b2lkIDAs'@;
put 'dm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKEosKCk9PnRoaXMucG9zdChLLFUsVyxZLFgpKX0pKX0pfX19LDM2MDI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEu'@;
put 'U0FTSlNfTE9HU19TRVBBUkFUT1I9cS5TYXNqc1JlcXVlc3RDbGllbnQ9dm9pZCAwO2NvbnN0IEk9Xyg0NTg4KTtxLlNhc2pzUmVxdWVzdENsaWVudD1jbGFzcyB5IGV4dGVuZHMgSS5SZXF1ZXN0Q2xpZW50e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmdldEhlYWRl'@;
put 'cnM9KEIsdyk9Pnt2YXIgUDtjb25zdCBGPXt9O3JldHVybiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiIT09dyYmKEZbIkNvbnRlbnQtVHlwZSJdPXcpLEYuQWNjZXB0PSJhcHBsaWNhdGlvbi9qc29uIj09PXc/dzoiKi8qIiwhQiYmdHlwZW9mIHdpbmRvdzwidSImJihCPW51'@;
put 'bGwhPT0oUD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiYWNjZXNzVG9rZW4iKSkmJnZvaWQgMCE9PVA/UDp2b2lkIDApLEImJihGLkF1dGhvcml6YXRpb249YEJlYXJlciAke0J9YCksRn19cGFyc2VSZXNwb25zZShCKXtjb25zdCB3PUI/LmhlYWRlcnM/Qi5oZWFkZXJzLmV0YWc6IiI7bGV0IEYs'@;
put 'Tyx6LFA9e307dHJ5e1A9InN0cmluZyI9PXR5cGVvZiBCLmRhdGE/SlNPTi5wYXJzZShCLmRhdGEpOkIuZGF0YX1jYXRjaHtpZihCLmRhdGEuaW5jbHVkZXMocS5TQVNKU19MT0dTX1NFUEFSQVRPUikpe2NvbnN0e2RhdGE6S309QixVPUsuc3BsaXQocS5TQVNKU19MT0dTX1NFUEFSQVRPUik7'@;
put 'Rj1VLnNwbGljZSgwLDEpWzBdLHZvaWQgMCE9PUYmJihQPUYpO2NvbnN0IFc9VS5zcGxpY2UoMCxVLmxlbmd0aC0xKSxZPW5ldyBSZWdFeHAoYCR7cS5TQVNKU19MT0dTX1NFUEFSQVRPUn0kYCksWD1VWzBdO1gmJihZLnRlc3QoSyk/Vy5sZW5ndGg+MSYmVy5wdXNoKFgpOno9WCksTz1XLmpv'@;
put 'aW4ocS5TQVNKU19MT0dTX1NFUEFSQVRPUil9ZWxzZSBQPUIuZGF0YX1jb25zdCBOPXtyZXN1bHQ6UCxsb2c6T3x8IiIsZXRhZzp3LHN0YXR1czpCLnN0YXR1c307cmV0dXJuIHomJihOLnByaW50T3V0cHV0PXopLE59fSxxLlNBU0pTX0xPR1NfU0VQQVJBVE9SPSJTQVNKU19MT0dTX1NFUEFS'@;
put 'QVRPUl8xNjNlZTE3YjZmZjI0ZjAyODkyODk3MmQ4MGEyNjc4NCJ9LDQ3MDoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NjY2Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'cSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDYxNzc6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTc2NjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pfSw0OTc1Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDIxNToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZToh'@;
put 'MH0pfSw0NzgyOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQxNjg6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNjoo'@;
put 'dWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzODQwOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDMxNTM6KHVlLHEpPT57InVz'@;
put 'ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTQyODoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1ODQxOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgSSx5O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkxvZ2luTWVjaGFuaXNtPXEuU0FTanNDb25maWc9dm9pZCAwLHEuU0FTanNDb25maWc9Y2xhc3MgX3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2VydmVyVXJsPSIiLHRoaXMucGF0aFNBU0pTPSIi'@;
put 'LHRoaXMucGF0aFNBUzk9IiIsdGhpcy5wYXRoU0FTVml5YT0iIix0aGlzLmFwcExvYz0iIix0aGlzLnNlcnZlclR5cGU9bnVsbCx0aGlzLmRlYnVnPSEwLHRoaXMudmVyYm9zZT0hMCx0aGlzLmNvbnRleHROYW1lPSIiLHRoaXMudXNlQ29tcHV0ZUFwaT1udWxsLHRoaXMubG9naW5NZWNoYW5p'@;
put 'c209SS5EZWZhdWx0LHRoaXMucmVxdWVzdEhpc3RvcnlMaW1pdD0xMH19LCh5PUk9cS5Mb2dpbk1lY2hhbmlzbXx8KHEuTG9naW5NZWNoYW5pc209e30pKS5EZWZhdWx0PSJEZWZhdWx0Iix5LlJlZGlyZWN0ZWQ9IlJlZGlyZWN0ZWQifSw2MDM4Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'STtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5TZXNzaW9uU3RhdGU9dm9pZCAwLChJPXEuU2Vzc2lvblN0YXRlfHwocS5TZXNzaW9uU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsSS5SdW5uaW5nPSJydW5uaW5nIixJLlBlbmRpbmc9'@;
put 'InBlbmRpbmciLEkuSWRsZT0iaWRsZSIsSS5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLEkuTm9TdGF0ZT0iIixJLkZhaWxlZD0iZmFpbGVkIixJLkVycm9yPSJlcnJvciJ9LDk0OTM6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7'@;
put 'dmFsdWU6ITB9KX0sODY1MDoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxMjQ6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxx'@;
put 'LkF1dGhvcml6ZUVycm9yPXZvaWQgMDtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoeSxnKXtzdXBlcih5KSx0aGlzLm1lc3NhZ2U9eSx0aGlzLmNvbmZpcm1Vcmw9Zyx0aGlzLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3Rv'@;
put 'dHlwZSl9fXEuQXV0aG9yaXplRXJyb3I9X30sOTQ2NToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuQ2VydGlmaWNhdGVFcnJvcj12b2lkIDA7Y2xhc3MgSSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGcp'@;
put 'e3N1cGVyKGAke2d9XG5QbGVhc2UgdmlzaXQgdGhlIGxpbmsgYmVsb3cgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gb24gdGhpcyBpc3N1ZTpcbi0gaHR0cHM6Ly9naXRodWIuY29tL3Nhc2pzL2NsaS9pc3N1ZXMvMTE4MSNpc3N1ZWNvbW1lbnQtMTA5MDYzODU4NFxuYCksdGhpcy5uYW1lPSJD'@;
put 'ZXJ0aWZpY2F0ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxJLnByb3RvdHlwZSl9fXEuQ2VydGlmaWNhdGVFcnJvcj1JfSw1MjY3Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5Db21wdXRl'@;
put 'Sm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO2NsYXNzIF8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih5LGcpe3N1cGVyKCJFcnJvcjogSm9iIGV4ZWN1dGlvbiBmYWlsZWQiKSx0aGlzLmpvYj15LHRoaXMubG9nPWcsdGhpcy5uYW1lPSJDb21wdXRlSm9iRXhlY3V0aW9uRXJyb3IiLE9iamVj'@;
put 'dC5zZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90eXBlKX19cS5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9X30sOTIzMjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuRXJyb3JSZXNwb25zZT12b2lkIDAs'@;
put 'cS5FcnJvclJlc3BvbnNlPWNsYXNzIF97Y29uc3RydWN0b3IoeSxnLEIpe2xldCB3PWc7aWYoIm9iamVjdCIhPXR5cGVvZiBnKXRyeXt3PUpTT04ucGFyc2UoZyl9Y2F0Y2h7Qj1nLHc9IiJ9dGhpcy5lcnJvcj17bWVzc2FnZTp5LGRldGFpbHM6dyxyYXc6Qn19fX0sNTEwOToodWUscSk9Pnsi'@;
put 'dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuSW50ZXJuYWxTZXJ2ZXJFcnJvcj12b2lkIDA7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkVycm9yOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuIiks'@;
put 'dGhpcy5uYW1lPSJJbnRlcm5hbFNlcnZlckVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fXEuSW50ZXJuYWxTZXJ2ZXJFcnJvcj1ffSw1NTE4Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSkscS5JbnZhbGlkSnNvbkVycm9yPXZvaWQgMDtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigiRXJyb3I6IGludmFsaWQgSnNvbiBzdHJpbmciKSx0aGlzLm5hbWU9IkludmFsaWRKc29uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLF8u'@;
put 'cHJvdG90eXBlKX19cS5JbnZhbGlkSnNvbkVycm9yPV99LDEwMDU6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkludmFsaWRTQVNqc0NzcmZFcnJvcj12b2lkIDA7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2Nv'@;
put 'bnN0cnVjdG9yKCl7c3VwZXIoIkF1dGggZXJyb3I6IEludmFsaWQgQ1NSRiB0b2tlbiEiKSx0aGlzLm5hbWU9IkludmFsaWRTQVNqc0NzcmZFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1xLkludmFsaWRTQVNqc0NzcmZFcnJvcj1ffSw4NTMxOih1ZSxx'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5Kb2JFeGVjdXRpb25FcnJvcj12b2lkIDA7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHksZyxCKXtzdXBlcihgRXJyb3IgQ29kZSAke3l9OiAke2d9YCks'@;
put 'dGhpcy5lcnJvckNvZGU9eSx0aGlzLmVycm9yTWVzc2FnZT1nLHRoaXMucmVzdWx0PUIsdGhpcy5uYW1lPSJKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1xLkpvYkV4ZWN1dGlvbkVycm9yPV99LDkwNzk6KHVlLHEpPT57InVzZSBz'@;
put 'dHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkpvYlN0YXRlUG9sbEVycm9yPXZvaWQgMDtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoeSxnKXtzdXBlcihgRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdGUgZm9yIGpv'@;
put 'YiAke3l9OiAke2cubWVzc2FnZXx8Z31gKSx0aGlzLm9yaWdpbmFsRXJyb3I9Zyx0aGlzLm5hbWU9IkpvYlN0YXRlUG9sbEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fXEuSm9iU3RhdGVQb2xsRXJyb3I9X30sMzA5NjoodWUscSk9PnsidXNlIHN0cmlj'@;
put 'dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuSnNvblBhcnNlQXJyYXlFcnJvcj12b2lkIDA7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkNhbiBub3QgcGFyc2UgYXJyYXkgb2JqZWN0IHRvIGpzb24uIiksdGhp'@;
put 'cy5uYW1lPSJKc29uUGFyc2VBcnJheUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fXEuSnNvblBhcnNlQXJyYXlFcnJvcj1ffSw2NzQzOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVl'@;
put 'OiEwfSkscS5Mb2dpblJlcXVpcmVkRXJyb3I9dm9pZCAwO2NsYXNzIF8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih5KXtzdXBlcihgQXV0aCBlcnJvcjogJHt5P0pTT04uc3RyaW5naWZ5KHksbnVsbCwyKToiWW91IG11c3QgYmUgbG9nZ2VkIGluIHRvIGFjY2VzcyB0aGlzIHJlc291cmNl'@;
put 'In1gKSx0aGlzLm5hbWU9IkxvZ2luUmVxdWlyZWRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1xLkxvZ2luUmVxdWlyZWRFcnJvcj1ffSw3ODY0Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIs'@;
put 'e3ZhbHVlOiEwfSkscS5Ob1Nlc3Npb25TdGF0ZUVycm9yPXZvaWQgMDtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoeSxnLEIpe3N1cGVyKGBDb3VsZCBub3QgZ2V0IHNlc3Npb24gc3RhdGUuIFNlcnZlciByZXNwb25kZWQgd2l0aCAke3l9IHdoaWxzdCBjaGVja2luZyBzdGF0'@;
put 'ZTogJHtnfWApLHRoaXMuc2VydmVyUmVzcG9uc2VTdGF0dXM9eSx0aGlzLnNlc3Npb25TdGF0ZVVybD1nLHRoaXMubG9nVXJsPUIsdGhpcy5uYW1lPSJOb1Nlc3Npb25TdGF0dXMiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90eXBlKX19cS5Ob1Nlc3Npb25TdGF0ZUVycm9y'@;
put 'PV99LDk1Nzc6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLk5vdEZvdW5kRXJyb3I9dm9pZCAwO2NsYXNzIF8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih5KXtzdXBlcihgRXJyb3I6IFJlc291cmNlIGF0'@;
put 'ICR7eX0gd2FzIG5vdCBmb3VuZGApLHRoaXMudXJsPXksdGhpcy5uYW1lPSJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fXEuTm90Rm91bmRFcnJvcj1ffSw5Mjc5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPXZvaWQgMDtjb25zdCBJPV8oNjc5OSk7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKEIsdyxQKXtsZXQgRj1gUm9vdCBmb2xkZXIgJHtCfSB3YXMgbm90IGZvdW5kLlxuUGxl'@;
put 'YXNlIGNoZWNrICR7d30vU0FTRHJpdmUuXG5JZiB0aGUgZm9sZGVyIERPRVMgZXhpc3QgdGhlbiBpdCBpcyBsaWtlbHkgYSBwZXJtaXNzaW9uIHByb2JsZW0uXG5gO2lmKFApe2xldCB6PSgwLEkuZGVjb2RlVG9rZW4pKFApLnNjb3BlO3o9ei5tYXAoTj0+IiogIitOKSxGKz0iWW91ciBhY2Nl'@;
put 'c3MgdG9rZW4gY29udGFpbnMgdGhlIGZvbGxvd2luZyBzY29wZXM6XG4iK3ouam9pbigiXG4iKX1zdXBlcihGKSx0aGlzLm5hbWU9IlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyx5LnByb3RvdHlwZSl9fXEuUm9vdEZvbGRlck5vdEZvdW5kRXJy'@;
put 'b3I9eX0sOTUyNjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuU0FTOUF1dGhFcnJvcj12b2lkIDA7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIlRoZSBjcmVkZW50aWFscyB5'@;
put 'b3UgcHJvdmlkZWQgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQuIFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgc2V0IG9mIGNyZWRlbnRpYWxzLiIpLHRoaXMubmFtZT0iQXV0aG9yaXplRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90eXBlKX19cS5TQVM5QXV0aEVycm9y'@;
put 'PV99LDg4NzU6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLldlYm91dFJlc3BvbnNlRXJyb3I9dm9pZCAwO2NsYXNzIF8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih5KXtzdXBlcihgRXJyb3I6IGVycm9y'@;
put 'IHdoaWxlIHBhcnNpbmcgcmVzcG9uc2UgZnJvbSAke3l9YCksdGhpcy51cmw9eSx0aGlzLm5hbWU9IldlYm91dFJlc3BvbnNlRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90eXBlKX19cS5XZWJvdXRSZXNwb25zZUVycm9yPV99LDEzOTU6ZnVuY3Rpb24odWUscSxf'@;
put 'KXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19l'@;
put 'c01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSx5'@;
put 'PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFs'@;
put 'dWU6ITB9KSx5KF8oMTI0KSxxKSx5KF8oOTQ2NSkscSkseShfKDUyNjcpLHEpLHkoXyg5MjMyKSxxKSx5KF8oNTEwOSkscSkseShfKDU1MTgpLHEpLHkoXyg4NTMxKSxxKSx5KF8oOTA3OSkscSkseShfKDMwOTYpLHEpLHkoXyg2NzQzKSxxKSx5KF8oNzg2NCkscSkseShfKDk1NzcpLHEpLHko'@;
put 'Xyg5Mjc5KSxxKSx5KF8oODg3NSkscSl9LDEyMzA6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Q'@;
put 'cm9wZXJ0eURlc2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5j'@;
put 'dGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSx5PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcs'@;
put 'dyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx5KF8oNDcwKSxxKSx5KF8oNDY2NikscSkseShfKDQ5NzUpLHEpLHkoXyg1NzY2KSxxKSx5KF8oMjE1KSxxKSx5KF8oNDc4MikscSkseShfKDQxNjgpLHEpLHkoXyg4NTE2KSxxKSx5KF8oMzg0MCks'@;
put 'cSkseShfKDU4NDEpLHEpLHkoXygxNDI4KSxxKSx5KF8oNjAzOCkscSkseShfKDk0OTMpLHEpLHkoXygzMTUzKSxxKSx5KF8oODY1MCkscSkseShfKDYxNzcpLHEpLHkoXygxMzk1KSxxKX0sMzMwMjpmdW5jdGlvbih1ZSxxKXsidXNlIHN0cmljdCI7dmFyIF89dGhpcyYmdGhpcy5fX2F3YWl0'@;
put 'ZXJ8fGZ1bmN0aW9uKHksZyxCLHcpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKEYsTyl7ZnVuY3Rpb24geihLKXt0cnl7TCh3Lm5leHQoSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIE4oSyl7dHJ5e0wody50aHJvdyhLKSl9Y2F0Y2goVSl7TyhVKX19ZnVuY3Rpb24g'@;
put 'TChLKXtLLmRvbmU/RihLLnZhbHVlKTpmdW5jdGlvbiBQKEYpe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKGZ1bmN0aW9uKE8pe08oRil9KX0oSy52YWx1ZSkudGhlbih6LE4pfUwoKHc9dy5hcHBseSh5LGd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwi'@;
put 'X19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz12b2lkIDAscS5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmlidXRlcz1mdW5jdGlvbiBJKHksZyl7cmV0dXJuIF8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBCPXt9O2lmKGc/'@;
put 'Lmxlbmd0aCl7Y29uc3Qgdz1nLnJlZHVjZSgoUCxGKT0+KFBbRl09eVtGXSxQKSx7fSk7Qj1PYmplY3QuYXNzaWduKHtyZXN1bHQ6eS5yZXN1bHR9LHcpfWVsc2UgQj15LnJlc3VsdDtyZXR1cm4gQn0pfX0sNzkyMjpmdW5jdGlvbih1ZSxxKXsidXNlIHN0cmljdCI7dmFyIF89dGhpcyYmdGhp'@;
put 'cy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHksZyxCLHcpe3JldHVybiBuZXcoQnx8KEI9UHJvbWlzZSkpKGZ1bmN0aW9uKEYsTyl7ZnVuY3Rpb24geihLKXt0cnl7TCh3Lm5leHQoSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIE4oSyl7dHJ5e0wody50aHJvdyhLKSl9Y2F0Y2goVSl7TyhVKX19'@;
put 'ZnVuY3Rpb24gTChLKXtLLmRvbmU/RihLLnZhbHVlKTpmdW5jdGlvbiBQKEYpe3JldHVybiBGIGluc3RhbmNlb2YgQj9GOm5ldyBCKGZ1bmN0aW9uKE8pe08oRil9KX0oSy52YWx1ZSkudGhlbih6LE4pfUwoKHc9dy5hcHBseSh5LGd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5hc3luY0ZvckVhY2g9dm9pZCAwLHEuYXN5bmNGb3JFYWNoPWZ1bmN0aW9uIEkoeSxnKXtyZXR1cm4gXyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Zm9yKGxldCBCPTA7Qjx5Lmxlbmd0aDtCKyspeWllbGQgZyh5W0Jd'@;
put 'LEIseSl9KX19LDM3OTM6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmNvbXBhcmVUaW1lc3RhbXBzPXZvaWQgMCxxLmNvbXBhcmVUaW1lc3RhbXBzPShJLHkpPT55LnRpbWVzdGFtcC5nZXRUaW1lKCktSS50'@;
put 'aW1lc3RhbXAuZ2V0VGltZSgpfSwyNDAyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuaXNGb3JtYXRzVGFibGU9cS5jb252ZXJ0VG9DU1Y9dm9pZCAwO2NvbnN0IHk9Xyg2NDY3'@;
put 'KSxnPV8oOTc3OCk7cS5jb252ZXJ0VG9DU1Y9KEYsTyk9Pnt2YXIgejtpZighRltPXSl7Y29uc3QgZWU9KDAsZy5wcmVmaXhNZXNzYWdlKSgiTm8gdGFibGUgcHJvdmlkZWQgdG8gYmUgY29udmVydGVkIHRvIENTVi4iLCJFcnJvciB3aGlsZSBjb252ZXJ0aW5nIHRvIENTVi4gIik7dGhyb3ci'@;
put 'c3RyaW5nIj09dHlwZW9mIGVlP25ldyBFcnJvcihlZSk6ZWV9Y29uc3QgTj1GW09dO2lmKCFBcnJheS5pc0FycmF5KE4pKXJldHVybiIiO2xldCBVLEw9bnVsbD09PSh6PUZbYCQke099YF0pfHx2b2lkIDA9PT16P3ZvaWQgMDp6LmZvcm1hdHMsSz1bXSxXPSExO0wmJihLPU9iamVjdC5rZXlz'@;
put 'KEwpLm1hcChlZT0+YCR7ZWV9OiR7TFtlZV19YCkpO2NvbnN0IFk9T2JqZWN0LmtleXMoTlswXSk7cmV0dXJuIFkuZm9yRWFjaChlZT0+e2lmKCFMfHwhT2JqZWN0LmtleXMoTCkuaW5jbHVkZXMoZWUpKXtsZXQgSj0hMSxyZT0hMTtpZihOLmZvckVhY2goaWU9PntudWxsPT09aWVbZWVdfHwi'@;
put 'bnVtYmVyIj09dHlwZW9mIGllW2VlXT9KPSEwOiJzdHJpbmciPT10eXBlb2YgaWVbZWVdJiYoMCx5LmlzU3BlY2lhbE1pc3NpbmcpKGllW2VlXSkmJihyZT0hMCl9KSxKJiZyZSlLLnB1c2goYCR7ZWV9OmJlc3QuYCksTHx8KEw9e30pLExbZWVdPSJiZXN0LiI7ZWxzZXtsZXQgaWU9bnVsbCxs'@;
put 'ZT0hMSxtZT0tMTtjb25zdCBfZT1OLm1hcCgoVGUsU2UpPT57aWYoVGVbZWVdfHwiIj09PVRlW2VlXSl7bGV0IHplO3JldHVybiBpZT9sZXx8KGxlPSgiIj09PVRlW2VlXXx8InN0cmluZyI9PXR5cGVvZiBUZVtlZV0/ImNoYXJzIjoibnVtYmVyIikhPT1pZSxtZT1sZT9TZSsxOi0xKTppZT0i'@;
put 'Ij09PVRlW2VlXXx8InN0cmluZyI9PXR5cGVvZiBUZVtlZV0/ImNoYXJzIjoibnVtYmVyIiwic3RyaW5nIj09dHlwZW9mIFRlW2VlXSYmKHplPVAoVGVbZWVdKSksemV9fSkuc29ydCgoVGUsU2UpPT5TZS1UZSlbMF07X2UmJl9lPjMyNzY1JiYoVz0hMCksbGUmJkkuZXJyb3IoYFJvdyAoJHtt'@;
put 'ZX0pLCBDb2x1bW4gKCR7ZWV9KSBoYXMgbWl4ZWQgdHlwZXM6IEVSUk9SYCksSy5wdXNoKGAke2VlfTokeyJjaGFycyI9PT1pZT8iJGNoYXIiOiIifSR7X2V8fCgiY2hhcnMiPT09aWU/IjEiOiJiZXN0Iil9LmApfX19KSxMJiYoSz1LLnNvcnQoKGVlLEopPT5ZLmluZGV4T2YoZWUucmVwbGFj'@;
put 'ZSgvOi4qLywiIikpLVkuaW5kZXhPZihKLnJlcGxhY2UoLzouKi8sIiIpKSkpLFc/IkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIjooVT1OLm1hcChlZT0+T2JqZWN0LmtleXMoZWUpLm1hcCgocmUsaWUpPT57bGV0IGxlO2NvbnN0IG1lPWVlW3JlXTtpZigibnVtYmVyIj09dHlwZW9mIG1l'@;
put 'KXJldHVybiBtZTtpZihsZT1udWxsPT09bWU/IiI6bWUsTCYmImJlc3QuIj09PUxbcmVdKXtpZihsZSYmISgwLHkuaXNTcGVjaWFsTWlzc2luZykobGUpKXRocm93IG5ldyBFcnJvcigiQSBTcGVjaWFsIG1pc3NpbmcgdmFsdWUgY2FuIG9ubHkgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20g'@;
put 'J0EnIHRvICdaJywgJ18nLCAnLlthLXpdJywgJy5fJyIpO3JldHVybmAke2xlLmluY2x1ZGVzKCIuIik/IiI6Ii4ifSR7bGUudG9Mb3dlckNhc2UoKX1gfXJldHVybiBsZT1sZS5yZXBsYWNlKC8iL2csJyIiJyksbGU9YCIke2xlfSJgLGxlLnN1YnN0cmluZygxLGxlLmxlbmd0aC0xKS5zZWFy'@;
put 'Y2goLyhcdHxcbnxccnwsfFwnfFwiKS9nbSk8MCYmKGxlPWxlLnN1YnN0cmluZygxLGxlLmxlbmd0aC0xKSksbGU9bGUucmVwbGFjZSgvXHJcbi9nbSwiXG4iKSwiIj09PWxlJiZLW2llXS5pbmNsdWRlcygiYmVzdCIpJiYobGU9Ii4iKSxsZX0pLmpvaW4oIiwiKSksSy5qb2luKCIsIikucmVw'@;
put 'bGFjZSgvLC9nLCIgIikrIlxyXG4iK1Uuam9pbigiXHJcbiIpKX0scS5pc0Zvcm1hdHNUYWJsZT1GPT4vXlwkLiovLnRlc3QoRik7Y29uc3QgUD1GPT57bGV0IE89Ri5sZW5ndGg7Zm9yKGxldCB6PUYubGVuZ3RoLTE7ej49MDt6LS0pe2NvbnN0IE49Ri5jaGFyQ29kZUF0KHopO04+MTI3JiZO'@;
put 'PD0yMDQ3P08rKzpOPjIwNDcmJk48PTY1NTM1JiYoTys9MiksTj49NTYzMjAmJk48PTU3MzQzJiZ6LS19cmV0dXJuIE99fSw2MTE2OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihCKXtyZXR1cm4gQiYmQi5f'@;
put 'X2VzTW9kdWxlP0I6e2RlZmF1bHQ6Qn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmNyZWF0ZUF4aW9zSW5zdGFuY2U9dm9pZCAwO2NvbnN0IHk9SShfKDcyMTgpKTtxLmNyZWF0ZUF4aW9zSW5zdGFuY2U9KEIsdyk9PnkuZGVmYXVsdC5jcmVh'@;
put 'dGUoe2Jhc2VVUkw6QixodHRwc0FnZW50Ond9KX0sOTgyNToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZGVsYXk9dm9pZCAwLHEuZGVsYXk9ST0+bmV3IFByb21pc2UoeT0+c2V0VGltZW91dCh5LEkpKX0s'@;
put 'OTkwOmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSkseT1fKDUxMDgpLGc9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVuY3Rpb24gVyhlZSl7dHJ5e1goTi5u'@;
put 'ZXh0KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWShlZSl7dHJ5e1goTi50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFgoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihVKXtV'@;
put 'KEspfSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9WCgoTj1OLmFwcGx5KEYsT3x8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmZldGNoTG9nPXEuZmV0Y2hMb2dCeUNodW5rcz12b2lkIDA7Y29uc3QgQj1fKDk3NzgpO3Eu'@;
put 'ZmV0Y2hMb2dCeUNodW5rcz0oRixPLHosTik9Pmcodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkKDAscS5mZXRjaExvZykoRixPLHosMCxOKX0pLHEuZmV0Y2hMb2c9KEYsTyx6LE4sTCk9Pmcodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29u'@;
put 'c3QgSz1JLmxvZ2dlcnx8eTtsZXQgVT0iIjtjb25zdCBXPUw8MWU0P0w6MWU0O2Rve0suaW5mbyhgRmV0Y2hpbmcgbG9ncyBmcm9tIGxpbmUgbm86ICR7TisxfSB0byAke04rV30gb2YgJHtMfS5gKTtjb25zdCBZPXlpZWxkIEYuZ2V0KGAke3p9P3N0YXJ0PSR7Tn0mbGltaXQ9JHtXfWAsTyku'@;
put 'dGhlbihlZT0+ZWUucmVzdWx0KS5jYXRjaChlZT0+e3Rocm93KDAsQi5wcmVmaXhNZXNzYWdlKShlZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsb2cuICIpfSk7aWYoMD09PVkuaXRlbXMubGVuZ3RoKWJyZWFrO1UrPVkuaXRlbXMubWFwKGVlPT5lZS5saW5lKS5qb2luKCJcbiIpLE4rPVd9d2hp'@;
put 'bGUoTjxMKTtyZXR1cm4gVX0pfSw3MTQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZm9ybWF0RGF0YUZvclJlcXVlc3Q9dm9pZCAwO2NvbnN0IEk9XygyNDAyKSx5PV8oNDc5OSk7cS5mb3JtYXREYXRh'@;
put 'Rm9yUmVxdWVzdD1CPT57Y29uc3Qgdz1bXTtsZXQgUD0wO2NvbnN0IEY9e307Zm9yKGNvbnN0IE8gaW4gQil7aWYoKDAsSS5pc0Zvcm1hdHNUYWJsZSkoTykmJk9iamVjdC5rZXlzKEIpLmluY2x1ZGVzKE8ucmVwbGFjZSgvXlwkLywiIikpKWNvbnRpbnVlO1ArKywoMCxJLmlzRm9ybWF0c1Rh'@;
put 'YmxlKShPKXx8dy5wdXNoKE8pO2NvbnN0IHo9KDAsSS5jb252ZXJ0VG9DU1YpKEIsTyk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PXopdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJz'@;
put 'LiIpO2lmKHoubGVuZ3RoPjE2ZTMpe2NvbnN0IE49KDAseS5zcGxpdENodW5rcykoeik7Rltgc2FzanMke1B9ZGF0YTBgXT1OLmxlbmd0aCxOLmZvckVhY2goKEwsSyk9PntGW2BzYXNqcyR7UH1kYXRhJHtLKzF9YF09TH0pfWVsc2UgRltgc2FzanMke1B9ZGF0YWBdPXp9cmV0dXJuIEYuc2Fz'@;
put 'anNfdGFibGVzPXcuam9pbigiICIpLEZ9fSw4NDU4OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbih3KXtyZXR1cm4gdyYmdy5fX2VzTW9kdWxlP3c6e2RlZmF1bHQ6d319O09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmdldEZvcm1EYXRhPXZvaWQgMDtjb25zdCB5PV8oNTkyOCksZz1JKF8oNjIzMCkpO3EuZ2V0Rm9ybURhdGE9KCk9PigwLHkuaXNOb2RlKSgpP25ldyBnLmRlZmF1bHQ6bmV3IEZvcm1EYXRhfSwzMjYwOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0'@;
put 'IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZXRVc2VyTGFuZ3VhZ2U9dm9pZCAwLHEuZ2V0VXNlckxhbmd1YWdlPSgpPT53aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfHx3aW5kb3cubmF2aWdhdG9yLnVzZXJMYW5ndWFnZX0sMTg4NDoodWUs'@;
put 'cSxfKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZXRWYWxpZEpzb249dm9pZCAwO2NvbnN0IEk9XygxMzk1KTtxLmdldFZhbGlkSnNvbj1nPT57dHJ5e2lmKG51bGw9PWcpdGhyb3cgbmV3IEkuSW52YWxpZEpzb25F'@;
put 'cnJvcjtpZihBcnJheS5pc0FycmF5KGcpKXRocm93IG5ldyBJLkpzb25QYXJzZUFycmF5RXJyb3I7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBnP2c6IiI9PT1nP3t9OkpTT04ucGFyc2UoZyl9Y2F0Y2goQil7dGhyb3cgQiBpbnN0YW5jZW9mIEkuSnNvblBhcnNlQXJyYXlFcnJvcj9COm5ldyBJ'@;
put 'LkludmFsaWRKc29uRXJyb3J9fX0sNTkyODpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3Bl'@;
put 'cnR5RGVzY3JpcHRvcihCLHcpOyghRnx8KCJnZXQiaW4gRj8hQi5fX2VzTW9kdWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAsRil9OmZ1bmN0aW9u'@;
put 'KGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLHk9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkoXygzMzAyKSxxKSx5KF8oNzkyMikscSkseShfKDM3OTMpLHEpLHkoXygyNDAyKSxxKSx5KF8oNjExNikscSkseShfKDk4MjUpLHEpLHkoXyg5OTApLHEpLHkoXygxODg0KSxxKSx5KF8oNDI0MykscSks'@;
put 'eShfKDI1NykscSkseShfKDIpLHEpLHkoXygyNjE1KSxxKSx5KF8oMjkyMCkscSkseShfKDI0MjIpLHEpLHkoXygzMSkscSkseShfKDY1MTUpLHEpLHkoXyg2NDE2KSxxKSx5KF8oMjgxMykscSkseShfKDk4OTYpLHEpLHkoXyg0Nzk5KSxxKSx5KF8oNDUxNikscSkseShfKDg0NTgpLHEpLHko'@;
put 'XygzMjYwKSxxKX0sNDI0MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmlzTm9kZT12b2lkIDAscS5pc05vZGU9KCk9PnR5cGVvZiBJPCJ1IiYmbnVsbCE9SS52ZXJzaW9ucyYm'@;
put 'bnVsbCE9SS52ZXJzaW9ucy5ub2RlfSwyNTc6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmlzUmVsYXRpdmVQYXRoPXZvaWQgMCxxLmlzUmVsYXRpdmVQYXRoPUk9PiEhSSYmIUkuc3RhcnRzV2l0aCgiLyIp'@;
put 'fSwyOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5pc1VyaT12b2lkIDAscS5pc1VyaT1JPT4vXlwvZm9sZGVyc1wvZm9sZGVyc1wvLy50ZXN0KEkpfSwyNjE1Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5pc1VybD12b2lkIDAscS5pc1VybD1JPT57Y29uc3QgeT1bImh0dHA6IiwiaHR0cHM6Il07dHJ5e2NvbnN0IGc9bmV3IFVSTChJKTtpZigheS5pbmNsdWRlcyhnLnByb3RvY29sKSlyZXR1cm4hMX1jYXRjaHty'@;
put 'ZXR1cm4hMX1yZXR1cm4hMH19LDEyMTA6ZnVuY3Rpb24odWUscSl7InVzZSBzdHJpY3QiO3ZhciBfPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLE8seixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtYKE4ubmV4'@;
put 'dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtYKE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBYKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIEwoSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShL'@;
put 'KX0pfShlZS52YWx1ZSkudGhlbihXLFkpfVgoKE49Ti5hcHBseShGLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5vcGVuTG9naW5Qcm9tcHQ9dm9pZCAwO3ZhciBJPWZ1bmN0aW9uKEYpe3JldHVybiBGLnN0eWxl'@;
put 'cz0ic2FzanNBZGFwdGVyU3R5bGVzIixGLm92ZXJsYXk9InNhc2pzQWRhcHRlckxvZ2luUHJvbXB0QkciLEYuZGlhbG9nPSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdCIsRn0oSXx8e30pO2NvbnN0IHk9InNhc2pzLWFkYXB0ZXIiLGc9e3BvcFVwOmAke3l9cG9wVXBgLHBvcFVwQkc6YCR7eX1w'@;
put 'b3BVcEJHYH07cS5vcGVuTG9naW5Qcm9tcHQ9KCk9Pm5ldyBQcm9taXNlKEY9Pl8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO08uaWQ9SS5zdHlsZXMsTy5pbm5lclRleHQ9UDtjb25zdCB6PWRvY3VtZW50'@;
put 'LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3ouaWQ9SS5vdmVybGF5LHouY2xhc3NMaXN0LmFkZChnLnBvcFVwQkcpO2NvbnN0IE49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ti5pZD1JLmRpYWxvZyxOLmNsYXNzTGlzdC5hZGQoZy5wb3BVcCk7Y29uc3QgTD1kb2N1bWVudC5jcmVhdGVF'@;
put 'bGVtZW50KCJoMSIpO0wuaW5uZXJUZXh0PSJTZXNzaW9uIEV4cGlyZWQhIixOLmFwcGVuZENoaWxkKEwpO2NvbnN0IEs9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksVT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7VS5pbm5lclRleHQ9IllvdSBuZWVkIHRvIHJlbG9naW4s'@;
put 'IGNsaWNrIE9LIHRvIGxvZ2luLiIsSy5hcHBlbmRDaGlsZChVKSxOLmFwcGVuZENoaWxkKEspO2NvbnN0IFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7Vy5jbGFzc0xpc3QuYWRkKCJjYW5jZWwiKSxXLmlubmVyVGV4dD0iQ2FuY2VsIixXLm9uY2xpY2s9KCk9Pnt3KCksRigh'@;
put 'MSl9LE4uYXBwZW5kQ2hpbGQoVyk7Y29uc3QgWT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJidXR0b24iKTtZLmNsYXNzTGlzdC5hZGQoImNvbmZpcm0iKSxZLmlubmVyVGV4dD0iT2siLFkub25jbGljaz0oKT0+e3coKSxGKCEwKX0sTi5hcHBlbmRDaGlsZChZKSxkb2N1bWVudC5ib2R5LnN0'@;
put 'eWxlLm92ZXJmbG93PSJoaWRkZW4iLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoTyksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh6KSxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKE4pfSkpO2NvbnN0IHc9KCk9PntPYmplY3QudmFsdWVzKEkpLmZvckVhY2goRj0+e3ZhciBPO2NvbnN0'@;
put 'IHo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoRik7bnVsbD09PShPPXo/LnBhcmVudE5vZGUpfHx2b2lkIDA9PT1PfHxPLnJlbW92ZUNoaWxkKHopfSksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iYXV0byJ9LFA9YFxuLiR7Zy5wb3BVcEJHfSAsXG4uJHtnLnBvcFVwfSB7XG4gIHot'@;
put 'aW5kZXg6IDEwMDAwO1xufVxuLiR7Zy5wb3BVcH0ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtc'@;
put 'biAgdG9wOiA0MCU7XG4gIGxlZnQ6IDUwJTtcbiAgcGFkZGluZzogMDtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBmb250LWZhbWlseTogJ1BUIFNhbnMnLCBzYW5zLXNlcmlmO1xuICBjb2xvcjogI2ZmZjtcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xuICB6LWluZGV4OiA5OTk7XG4gIG92ZXJm'@;
put 'bG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbiAgbWFyZ2luOiAwO1xuICB3aWR0aDogMTAwJTtcbiAgbWF4LXdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtaGVpZ2h0OiAzMDBweDtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUw'@;
put 'JSwgLTUwJSk7XG59XG4uJHtnLnBvcFVwfSA+IGgxIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDVweDtcbiAgbWluLWhlaWdodDogNDBweDtc'@;
put 'biAgZm9udC1zaXplOiAxLjJlbTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG4gIGJvcmRlci13aWR0aDogNXB4O1xuICBi'@;
put 'b3JkZXItY29sb3I6IGJsYWNrO1xufVxuLiR7Zy5wb3BVcH0gPiBkaXYge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLTEwOHB4KTtcbiAgbWFyZ2luOiAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gt'@;
put 'c2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBhZGRpbmc6IDUlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXItY29sb3I6ICNjY2M7XG4gIGJvcmRlci1zdHlsZTogbm9uZSBub25lIHNv'@;
put 'bGlkIG5vbmU7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuLiR7Zy5wb3BVcH0gPiBkaXYgPiBzcGFuIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6'@;
put 'IGJvcmRlci1ib3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgd2lkdGg6IDMwMHB4O1xuICBoZWlnaHQ6IDEwOHB4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG59XG4uJHtnLnBvcFVwfSAuY2FuY2VsIHtcbiAgZmxvYXQ6IGxl'@;
put 'ZnQ7XG59XG4uJHtnLnBvcFVwfSAuY29uZmlybSB7XG4gIGZsb2F0OiByaWdodDtcbn1cbi4ke2cucG9wVXB9ID4gYnV0dG9uIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1i'@;
put 'b3g7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMTBweDtcbiAgd2lkdGg6IDUwJTtcbiAgYm9yZGVyOiAxcHggbm9uZSAjY2NjO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgaGVpZ2h0OiA1MHB4O1xuICBiYWNrZ3Jv'@;
put 'dW5kOiByZ2JhKDEsIDEsIDEsIDAuMik7XG59XG4uJHtnLnBvcFVwfSA+IGJ1dHRvbjpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcbn1cbi4ke2cucG9wVXBCR30ge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4g'@;
put 'IGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbiAgb3BhY2l0eTogMC45NTtcbiAgei1pbmRleDogNTA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHJhZGlhbC1ncmFkaWVudCgjMDM3OGNkLCAjMDEyMDM2KTtcbn1c'@;
put 'bmB9LDI5MjA6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLm5lZWRzUmV0cnk9dm9pZCAwLHEubmVlZHNSZXRyeT1JPT4hIUkmJihJLmluY2x1ZGVzKCciZXJyb3JDb2RlIjo0MDMnKSYmSS5pbmNsdWRlcygi'@;
put 'X2NzcmYiKSYmSS5pbmNsdWRlcygiWC1DU1JGLVRPS0VOIil8fEkuaW5jbHVkZXMoJyJzdGF0dXMiOjQwMycpJiZJLmluY2x1ZGVzKCciZXJyb3IiOiJGb3JiaWRkZW4iJyl8fEkuaW5jbHVkZXMoJyJzdGF0dXMiOjQ0OScpJiZJLmluY2x1ZGVzKCJBdXRoZW50aWNhdGlvbiBzdWNjZXNzLCBy'@;
put 'ZXRyeSBvcmlnaW5hbCByZXF1ZXN0IikpfSwyNDIyOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5wYXJzZUdlbmVyYXRlZENvZGU9dm9pZCAwLHEucGFyc2VHZW5lcmF0ZWRDb2RlPUk9Pkkuc3BsaXQoIlxu'@;
put 'IikuZmlsdGVyKHc9PncudHJpbSgpLnN0YXJ0c1dpdGgoIk1QUklOVCIpKS5qb2luKCJcclxuIil9LDMxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTEwOCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEucGFyc2VTYXNWaXlhTG9n'@;
put 'PXZvaWQgMCxxLnBhcnNlU2FzVml5YUxvZz1nPT57bGV0IEI7dHJ5e0I9Zy5pdGVtcz9nLml0ZW1zLm1hcCh3PT53LmxpbmUpLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoZyl9Y2F0Y2godyl7SS5lcnJvcigiQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgdGhlIGxvZyBy'@;
put 'ZXNwb25zZSIsdyksQj1nfXJldHVybiBCfX0sNjUxNToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEucGFyc2VTb3VyY2VDb2RlPXZvaWQgMCxxLnBhcnNlU291cmNlQ29kZT1JPT5JLnNwbGl0KCJcbiIpLmZp'@;
put 'bHRlcihCPT5CLnRyaW0oKS5zdWJzdHJpbmcoMCwxMCkudHJpbVN0YXJ0KCkubWF0Y2goL15cZC8pKS5qb2luKCJcclxuIil9LDY0MTY6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEIsdyxQLEYpe3JldHVybiBuZXco'@;
put 'UHx8KFA9UHJvbWlzZSkpKGZ1bmN0aW9uKHosTil7ZnVuY3Rpb24gTChXKXt0cnl7VShGLm5leHQoVykpfWNhdGNoKFkpe04oWSl9fWZ1bmN0aW9uIEsoVyl7dHJ5e1UoRi50aHJvdyhXKSl9Y2F0Y2goWSl7TihZKX19ZnVuY3Rpb24gVShXKXtXLmRvbmU/eihXLnZhbHVlKTpmdW5jdGlvbiBP'@;
put 'KHope3JldHVybiB6IGluc3RhbmNlb2YgUD96Om5ldyBQKGZ1bmN0aW9uKE4pe04oeil9KX0oVy52YWx1ZSkudGhlbihMLEspfVUoKEY9Ri5hcHBseShCLHd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5wYXJzZVNh'@;
put 'c1ZpeWFEZWJ1Z1Jlc3BvbnNlPXZvaWQgMDtjb25zdCB5PV8oNTkyOCk7cS5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlPShCLHcsUCk9Pkkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgRj1CLnNwbGl0KC88aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6'@;
put 'IDUwMHB4IiBzcmM9Inw8aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6IDUwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOkNhbnZhczsiIHNyYz0vKVsxXSxPPUY/Ri5zcGxpdCgvIj48XC9pZnJhbWU+fD48XC9pZnJhbWU+LylbMF06bnVsbDtpZighTyl0aHJvdyBuZXcgRXJyb3IoIlVu'@;
put 'YWJsZSB0byBmaW5kIHdlYm91dCBmaWxlIFVSTC4iKTtyZXR1cm4gdy5nZXQoUCtPLHZvaWQgMCwidGV4dC9wbGFpbiIpLnRoZW4oej0+KDAseS5nZXRWYWxpZEpzb24pKHoucmVzdWx0KSl9KX0sMjgxMzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDUxMDgpO09iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnBhcnNlV2Vib3V0UmVzcG9uc2U9dm9pZCAwO2NvbnN0IHk9XygxMzk1KTtxLnBhcnNlV2Vib3V0UmVzcG9uc2U9KEIsdyk9PntsZXQgUD0iIjtpZihCLmluY2x1ZGVzKCI+PndlYm91dEJFR0lOPDwiKSl0cnl7UD1CLnNw'@;
put 'bGl0KCI+PndlYm91dEJFR0lOPDwiKVsxXS5zcGxpdCgiPj53ZWJvdXRFTkQ8PCIpWzBdfWNhdGNoKEYpe2lmKHcpdGhyb3cgbmV3IHkuV2Vib3V0UmVzcG9uc2VFcnJvcih3KTtQPSIiLEkuZXJyb3IoRil9cmV0dXJuIFB9fSwxMTcwOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT12b2lkIDA7Y29uc3QgXz1bIkxvZyBPZmYiXTtxLmV4dHJhY3RVc2VyTG9uZ05hbWVTYXM5PXk9Pntjb25zdCBCPXk/Lm1hdGNoKC8idGl0bGUiOlxzPyIuKj8iLyk7bGV0IHc9'@;
put 'Qj8uWzBdLnNwbGl0KCI6IilbMV0udHJpbSgpLFA9dz8uaW5kZXhPZigiICIpO3JldHVybiB3PyhfLm1hcChGPT57Y29uc3QgTz13Py5pbmRleE9mKEYpfHwtMTtPPi0xJiYoUD1PK0YubGVuZ3RoKX0pLHcuc2xpY2UoUCwtMSkudHJpbSgpKToidW5rbm93biJ9fSw5ODk2Oih1ZSxxKT0+eyJ1'@;
put 'c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5zZXJpYWxpemU9dm9pZCAwLHEuc2VyaWFsaXplPUk9Pntjb25zdCB5PVtdO2Zvcihjb25zdCBnIGluIEkpaWYoSS5oYXNPd25Qcm9wZXJ0eShnKSlpZihJW2ddaW5zdGFuY2VvZiBB'@;
put 'cnJheSlmb3IobGV0IEI9MCx3PUlbZ10ubGVuZ3RoO0I8dztCKyspeS5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChnKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KElbZ11bQl0pKTtlbHNlIHkucHVzaChlbmNvZGVVUklDb21wb25lbnQoZykrIj0iK2VuY29kZVVSSUNvbXBvbmVudChJW2ddKSk7'@;
put 'cmV0dXJuIHkuam9pbigiJiIpfX0sNDc5OToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuc3BsaXRDaHVua3M9dm9pZCAwLHEuc3BsaXRDaHVua3M9ST0+e2NvbnN0IGc9TWF0aC5jZWlsKEkubGVuZ3RoLzE2'@;
put 'ZTMpLEI9bmV3IEFycmF5KGcpO2ZvcihsZXQgdz0wLFA9MDt3PGc7Kyt3LFArPTE2ZTMpQlt3XT1JLnN1YnN0cihQLDE2ZTMpO3JldHVybiBCfX0sNDUxNjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEudmFs'@;
put 'aWRhdGVJbnB1dD1xLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPXEuTU9SRV9JTkZPPXZvaWQgMCxxLk1PUkVfSU5GTz0iRm9yIG1vcmUgaW5mbyBzZWUgaHR0cHM6Ly9zYXNqcy5pby9zYXNqcy1hZGFwdGVyLyNyZXF1ZXN0LXJlc3BvbnNlIixxLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFPWBQ'@;
put 'YXJhbWV0ZXIgZGF0YSBjb250YWlucyBpbnZhbGlkIHRhYmxlIHN0cnVjdHVyZS4gJHtxLk1PUkVfSU5GT31gLHEudmFsaWRhdGVJbnB1dD15PT57aWYobnVsbD09PXkpcmV0dXJue3N0YXR1czohMCxtc2c6IiJ9O2lmKCJvYmplY3QiIT09SSh5KSlyZXR1cm57c3RhdHVzOiExLG1zZzpxLklO'@;
put 'VkFMSURfVEFCTEVfU1RSVUNUVVJFfTtjb25zdCBnPUI9PkIubWF0Y2goL15cJC4qLykmJk9iamVjdC5rZXlzKHkpLmluY2x1ZGVzKEIucmVwbGFjZSgvXlwkLywiIikpO2Zvcihjb25zdCBCIGluIHkpe2lmKCFCLm1hdGNoKC9eW2EtekEtWl9dLykmJiFnKEIpKXJldHVybntzdGF0dXM6ITEs'@;
put 'bXNnOiJGaXJzdCBsZXR0ZXIgb2YgdGFibGUgc2hvdWxkIGJlIGFscGhhYmV0IG9yIHVuZGVyc2NvcmUuIn07aWYoIUIubWF0Y2goL15bYS16QS1aX11bYS16QS1aMC05X10qJC8pJiYhZyhCKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiVGFibGUgbmFtZSBzaG91bGQgYmUgYWxwaGFudW1lcmlj'@;
put 'LiJ9O2lmKEIubGVuZ3RoPjMyKXJldHVybntzdGF0dXM6ITEsbXNnOiJNYXhpbXVtIGxlbmd0aCBmb3IgdGFibGUgbmFtZSBjb3VsZCBiZSAzMiBjaGFyYWN0ZXJzLiJ9O2lmKCJBcnJheSIhPT1JKHlbQl0pJiYhZyhCKSlyZXR1cm57c3RhdHVzOiExLG1zZzpxLklOVkFMSURfVEFCTEVfU1RS'@;
put 'VUNUVVJFfTtpZihBcnJheS5pc0FycmF5KHlbQl0pKWZvcihjb25zdCB3IG9mIHlbQl0pe2lmKCJvYmplY3QiIT09SSh3KSlyZXR1cm57c3RhdHVzOiExLG1zZzpgVGFibGUgJHtCfSBjb250YWlucyBpbnZhbGlkIHN0cnVjdHVyZS4gJHtxLk1PUkVfSU5GT31gfTt7Y29uc3QgUD1PYmplY3Qu'@;
put 'a2V5cyh3KTtmb3IoY29uc3QgRiBvZiBQKWlmKHZvaWQgMD09PXdbRl0pcmV0dXJue3N0YXR1czohMSxtc2c6YEEgcm93IGluIHRhYmxlICR7Qn0gY29udGFpbnMgaW52YWxpZCB2YWx1ZS4gQ2FuJ3QgYXNzaWduIHVuZGVmaW5lZCB0byAke0Z9LmB9fX19cmV0dXJue3N0YXR1czohMCxtc2c6'@;
put 'IiJ9fTtjb25zdCBJPXk9PkFycmF5LmlzQXJyYXkoeSk/IkFycmF5Ijp0eXBlb2YgeX0sODk4MToodWUscSk9PnsidXNlIHN0cmljdCI7cS5mcm9tQ2FsbGJhY2s9ZnVuY3Rpb24oXyl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5JKXtpZigiZnVuY3Rpb24iIT10'@;
put 'eXBlb2YgSVtJLmxlbmd0aC0xXSlyZXR1cm4gbmV3IFByb21pc2UoKHksZyk9PntJLnB1c2goKEIsdyk9Pm51bGwhPUI/ZyhCKTp5KHcpKSxfLmFwcGx5KHRoaXMsSSl9KTtfLmFwcGx5KHRoaXMsSSl9LCJuYW1lIix7dmFsdWU6Xy5uYW1lfSl9LHEuZnJvbVByb21pc2U9ZnVuY3Rpb24oXyl7'@;
put 'cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiguLi5JKXtjb25zdCB5PUlbSS5sZW5ndGgtMV07aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHkpcmV0dXJuIF8uYXBwbHkodGhpcyxJKTtJLnBvcCgpLF8uYXBwbHkodGhpcyxJKS50aGVuKGc9PnkobnVsbCxnKSx5KX0sIm5hbWUi'@;
put 'LHt2YWx1ZTpfLm5hbWV9KX19LDQ1NjQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg3NDE4KSx5PV8oNzEyOSksZz0vXltceDAwLVx4MjBcdTAwYTBcdTE2ODBcdTIwMDAtXHUyMDBhXHUyMDI4XHUyMDI5XHUyMDJmXHUyMDVmXHUzMDAwXHVmZWZmXSsvLEI9L1tcblxyXHRdL2cs'@;
put 'dz0vXltBLVphLXpdW0EtWmEtejAtOSstLl0qOlwvXC8vLFA9LzpcZCskLyxGPS9eKFthLXpdW2EtejAtOS4rLV0qOik/KFwvXC8pPyhbXFwvXSspPyhbXFNcc10qKS9pLE89L15bYS16QS1aXTovO2Z1bmN0aW9uIHoocmUpe3JldHVybihyZXx8IiIpLnRvU3RyaW5nKCkucmVwbGFjZShnLCIi'@;
put 'KX12YXIgTj1bWyIjIiwiaGFzaCJdLFsiPyIsInF1ZXJ5Il0sZnVuY3Rpb24oaWUsbGUpe3JldHVybiBVKGxlLnByb3RvY29sKT9pZS5yZXBsYWNlKC9cXC9nLCIvIik6aWV9LFsiLyIsInBhdGhuYW1lIl0sWyJAIiwiYXV0aCIsMV0sW05hTiwiaG9zdCIsdm9pZCAwLDEsMV0sWy86KFxkKikk'@;
put 'LywicG9ydCIsdm9pZCAwLDFdLFtOYU4sImhvc3RuYW1lIix2b2lkIDAsMSwxXV0sTD17aGFzaDoxLHF1ZXJ5OjF9O2Z1bmN0aW9uIEsocmUpe3ZhciBpZTtpZT10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIF8uZzwidSI/Xy5nOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9O3ZhciBU'@;
put 'ZSxtZT17fSxfZT10eXBlb2YocmU9cmV8fGllLmxvY2F0aW9ufHx7fSk7aWYoImJsb2I6Ij09PXJlLnByb3RvY29sKW1lPW5ldyBYKHVuZXNjYXBlKHJlLnBhdGhuYW1lKSx7fSk7ZWxzZSBpZigic3RyaW5nIj09PV9lKWZvcihUZSBpbiBtZT1uZXcgWChyZSx7fSksTClkZWxldGUgbWVbVGVd'@;
put 'O2Vsc2UgaWYoIm9iamVjdCI9PT1fZSl7Zm9yKFRlIGluIHJlKVRlIGluIEx8fChtZVtUZV09cmVbVGVdKTt2b2lkIDA9PT1tZS5zbGFzaGVzJiYobWUuc2xhc2hlcz13LnRlc3QocmUuaHJlZikpfXJldHVybiBtZX1mdW5jdGlvbiBVKHJlKXtyZXR1cm4iZmlsZToiPT09cmV8fCJmdHA6Ij09'@;
put 'PXJlfHwiaHR0cDoiPT09cmV8fCJodHRwczoiPT09cmV8fCJ3czoiPT09cmV8fCJ3c3M6Ij09PXJlfWZ1bmN0aW9uIFcocmUsaWUpe3JlPShyZT16KHJlKSkucmVwbGFjZShCLCIiKSxpZT1pZXx8e307dmFyIHplLGxlPUYuZXhlYyhyZSksbWU9bGVbMV0/bGVbMV0udG9Mb3dlckNhc2UoKToi'@;
put 'IixfZT0hIWxlWzJdLFRlPSEhbGVbM10sU2U9MDtyZXR1cm4gX2U/VGU/KHplPWxlWzJdK2xlWzNdK2xlWzRdLFNlPWxlWzJdLmxlbmd0aCtsZVszXS5sZW5ndGgpOih6ZT1sZVsyXStsZVs0XSxTZT1sZVsyXS5sZW5ndGgpOlRlPyh6ZT1sZVszXStsZVs0XSxTZT1sZVszXS5sZW5ndGgpOnpl'@;
put 'PWxlWzRdLCJmaWxlOiI9PT1tZT9TZT49MiYmKHplPXplLnNsaWNlKDIpKTpVKG1lKT96ZT1sZVs0XTptZT9fZSYmKHplPXplLnNsaWNlKDIpKTpTZT49MiYmVShpZS5wcm90b2NvbCkmJih6ZT1sZVs0XSkse3Byb3RvY29sOm1lLHNsYXNoZXM6X2V8fFUobWUpLHNsYXNoZXNDb3VudDpTZSxy'@;
put 'ZXN0OnplfX1mdW5jdGlvbiBYKHJlLGllLGxlKXtpZihyZT0ocmU9eihyZSkpLnJlcGxhY2UoQiwiIiksISh0aGlzIGluc3RhbmNlb2YgWCkpcmV0dXJuIG5ldyBYKHJlLGllLGxlKTt2YXIgbWUsX2UsVGUsU2UsemUsVixwPU4uc2xpY2UoKSxiPXR5cGVvZiBpZSx4PXRoaXMsQz0wO2Zvcigi'@;
put 'b2JqZWN0IiE9PWImJiJzdHJpbmciIT09YiYmKGxlPWllLGllPW51bGwpLGxlJiYiZnVuY3Rpb24iIT10eXBlb2YgbGUmJihsZT15LnBhcnNlKSxtZT0hKF9lPVcocmV8fCIiLGllPUsoaWUpKSkucHJvdG9jb2wmJiFfZS5zbGFzaGVzLHguc2xhc2hlcz1fZS5zbGFzaGVzfHxtZSYmaWUuc2xh'@;
put 'c2hlcyx4LnByb3RvY29sPV9lLnByb3RvY29sfHxpZS5wcm90b2NvbHx8IiIscmU9X2UucmVzdCwoImZpbGU6Ij09PV9lLnByb3RvY29sJiYoMiE9PV9lLnNsYXNoZXNDb3VudHx8Ty50ZXN0KHJlKSl8fCFfZS5zbGFzaGVzJiYoX2UucHJvdG9jb2x8fF9lLnNsYXNoZXNDb3VudDwyfHwhVSh4'@;
put 'LnByb3RvY29sKSkpJiYocFszXT1bLyguKikvLCJwYXRobmFtZSJdKTtDPHAubGVuZ3RoO0MrKykiZnVuY3Rpb24iIT10eXBlb2YoU2U9cFtDXSk/KFY9U2VbMV0sKFRlPVNlWzBdKSE9VGU/eFtWXT1yZToic3RyaW5nIj09dHlwZW9mIFRlP34oemU9IkAiPT09VGU/cmUubGFzdEluZGV4T2Yo'@;
put 'VGUpOnJlLmluZGV4T2YoVGUpKSYmKCJudW1iZXIiPT10eXBlb2YgU2VbMl0/KHhbVl09cmUuc2xpY2UoMCx6ZSkscmU9cmUuc2xpY2UoemUrU2VbMl0pKTooeFtWXT1yZS5zbGljZSh6ZSkscmU9cmUuc2xpY2UoMCx6ZSkpKTooemU9VGUuZXhlYyhyZSkpJiYoeFtWXT16ZVsxXSxyZT1yZS5z'@;
put 'bGljZSgwLHplLmluZGV4KSkseFtWXT14W1ZdfHxtZSYmU2VbM10mJmllW1ZdfHwiIixTZVs0XSYmKHhbVl09eFtWXS50b0xvd2VyQ2FzZSgpKSk6cmU9U2UocmUseCk7bGUmJih4LnF1ZXJ5PWxlKHgucXVlcnkpKSxtZSYmaWUuc2xhc2hlcyYmIi8iIT09eC5wYXRobmFtZS5jaGFyQXQoMCkm'@;
put 'JigiIiE9PXgucGF0aG5hbWV8fCIiIT09aWUucGF0aG5hbWUpJiYoeC5wYXRobmFtZT1mdW5jdGlvbiBZKHJlLGllKXtpZigiIj09PXJlKXJldHVybiBpZTtmb3IodmFyIGxlPShpZXx8Ii8iKS5zcGxpdCgiLyIpLnNsaWNlKDAsLTEpLmNvbmNhdChyZS5zcGxpdCgiLyIpKSxtZT1sZS5sZW5n'@;
put 'dGgsX2U9bGVbbWUtMV0sVGU9ITEsU2U9MDttZS0tOykiLiI9PT1sZVttZV0/bGUuc3BsaWNlKG1lLDEpOiIuLiI9PT1sZVttZV0/KGxlLnNwbGljZShtZSwxKSxTZSsrKTpTZSYmKDA9PT1tZSYmKFRlPSEwKSxsZS5zcGxpY2UobWUsMSksU2UtLSk7cmV0dXJuIFRlJiZsZS51bnNoaWZ0KCIi'@;
put 'KSwoIi4iPT09X2V8fCIuLiI9PT1fZSkmJmxlLnB1c2goIiIpLGxlLmpvaW4oIi8iKX0oeC5wYXRobmFtZSxpZS5wYXRobmFtZSkpLCIvIiE9PXgucGF0aG5hbWUuY2hhckF0KDApJiZVKHgucHJvdG9jb2wpJiYoeC5wYXRobmFtZT0iLyIreC5wYXRobmFtZSksSSh4LnBvcnQseC5wcm90b2Nv'@;
put 'bCl8fCh4Lmhvc3Q9eC5ob3N0bmFtZSx4LnBvcnQ9IiIpLHgudXNlcm5hbWU9eC5wYXNzd29yZD0iIix4LmF1dGgmJih+KHplPXguYXV0aC5pbmRleE9mKCI6IikpPyh4LnVzZXJuYW1lPXguYXV0aC5zbGljZSgwLHplKSx4LnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklD'@;
put 'b21wb25lbnQoeC51c2VybmFtZSkpLHgucGFzc3dvcmQ9eC5hdXRoLnNsaWNlKHplKzEpLHgucGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh4LnBhc3N3b3JkKSkpOngudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudCh4'@;
put 'LmF1dGgpKSx4LmF1dGg9eC5wYXNzd29yZD94LnVzZXJuYW1lKyI6Iit4LnBhc3N3b3JkOngudXNlcm5hbWUpLHgub3JpZ2luPSJmaWxlOiIhPT14LnByb3RvY29sJiZVKHgucHJvdG9jb2wpJiZ4Lmhvc3Q/eC5wcm90b2NvbCsiLy8iK3guaG9zdDoibnVsbCIseC5ocmVmPXgudG9TdHJpbmco'@;
put 'KX1YLnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uIGVlKHJlLGllLGxlKXt2YXIgbWU9dGhpcztzd2l0Y2gocmUpe2Nhc2UicXVlcnkiOiJzdHJpbmciPT10eXBlb2YgaWUmJmllLmxlbmd0aCYmKGllPShsZXx8eS5wYXJzZSkoaWUpKSxtZVtyZV09aWU7YnJlYWs7Y2FzZSJwb3J0IjptZVtyZV09'@;
put 'aWUsSShpZSxtZS5wcm90b2NvbCk/aWUmJihtZS5ob3N0PW1lLmhvc3RuYW1lKyI6IitpZSk6KG1lLmhvc3Q9bWUuaG9zdG5hbWUsbWVbcmVdPSIiKTticmVhaztjYXNlImhvc3RuYW1lIjptZVtyZV09aWUsbWUucG9ydCYmKGllKz0iOiIrbWUucG9ydCksbWUuaG9zdD1pZTticmVhaztjYXNl'@;
put 'Imhvc3QiOm1lW3JlXT1pZSxQLnRlc3QoaWUpPyhpZT1pZS5zcGxpdCgiOiIpLG1lLnBvcnQ9aWUucG9wKCksbWUuaG9zdG5hbWU9aWUuam9pbigiOiIpKToobWUuaG9zdG5hbWU9aWUsbWUucG9ydD0iIik7YnJlYWs7Y2FzZSJwcm90b2NvbCI6bWUucHJvdG9jb2w9aWUudG9Mb3dlckNhc2Uo'@;
put 'KSxtZS5zbGFzaGVzPSFsZTticmVhaztjYXNlInBhdGhuYW1lIjpjYXNlImhhc2giOmlmKGllKXt2YXIgX2U9InBhdGhuYW1lIj09PXJlPyIvIjoiIyI7bWVbcmVdPWllLmNoYXJBdCgwKSE9PV9lP19lK2llOmllfWVsc2UgbWVbcmVdPWllO2JyZWFrO2Nhc2UidXNlcm5hbWUiOmNhc2UicGFz'@;
put 'c3dvcmQiOm1lW3JlXT1lbmNvZGVVUklDb21wb25lbnQoaWUpO2JyZWFrO2Nhc2UiYXV0aCI6dmFyIFRlPWllLmluZGV4T2YoIjoiKTt+VGU/KG1lLnVzZXJuYW1lPWllLnNsaWNlKDAsVGUpLG1lLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQobWUudXNl'@;
put 'cm5hbWUpKSxtZS5wYXNzd29yZD1pZS5zbGljZShUZSsxKSxtZS5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KG1lLnBhc3N3b3JkKSkpOm1lLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoaWUpKX1mb3IodmFyIFNl'@;
put 'PTA7U2U8Ti5sZW5ndGg7U2UrKyl7dmFyIHplPU5bU2VdO3plWzRdJiYobWVbemVbMV1dPW1lW3plWzFdXS50b0xvd2VyQ2FzZSgpKX1yZXR1cm4gbWUuYXV0aD1tZS5wYXNzd29yZD9tZS51c2VybmFtZSsiOiIrbWUucGFzc3dvcmQ6bWUudXNlcm5hbWUsbWUub3JpZ2luPSJmaWxlOiIhPT1t'@;
put 'ZS5wcm90b2NvbCYmVShtZS5wcm90b2NvbCkmJm1lLmhvc3Q/bWUucHJvdG9jb2wrIi8vIittZS5ob3N0OiJudWxsIixtZS5ocmVmPW1lLnRvU3RyaW5nKCksbWV9LHRvU3RyaW5nOmZ1bmN0aW9uIEoocmUpeyghcmV8fCJmdW5jdGlvbiIhPXR5cGVvZiByZSkmJihyZT15LnN0cmluZ2lmeSk7'@;
put 'dmFyIGllLGxlPXRoaXMsbWU9bGUuaG9zdCxfZT1sZS5wcm90b2NvbDtfZSYmIjoiIT09X2UuY2hhckF0KF9lLmxlbmd0aC0xKSYmKF9lKz0iOiIpO3ZhciBUZT1fZSsobGUucHJvdG9jb2wmJmxlLnNsYXNoZXN8fFUobGUucHJvdG9jb2wpPyIvLyI6IiIpO3JldHVybiBsZS51c2VybmFtZT8o'@;
put 'VGUrPWxlLnVzZXJuYW1lLGxlLnBhc3N3b3JkJiYoVGUrPSI6IitsZS5wYXNzd29yZCksVGUrPSJAIik6bGUucGFzc3dvcmQ/KFRlKz0iOiIrbGUucGFzc3dvcmQsVGUrPSJAIik6ImZpbGU6IiE9PWxlLnByb3RvY29sJiZVKGxlLnByb3RvY29sKSYmIW1lJiYiLyIhPT1sZS5wYXRobmFtZSYm'@;
put 'KFRlKz0iQCIpLCgiOiI9PT1tZVttZS5sZW5ndGgtMV18fFAudGVzdChsZS5ob3N0bmFtZSkmJiFsZS5wb3J0KSYmKG1lKz0iOiIpLFRlKz1tZStsZS5wYXRobmFtZSwoaWU9Im9iamVjdCI9PXR5cGVvZiBsZS5xdWVyeT9yZShsZS5xdWVyeSk6bGUucXVlcnkpJiYoVGUrPSI/IiE9PWllLmNo'@;
put 'YXJBdCgwKT8iPyIraWU6aWUpLGxlLmhhc2gmJihUZSs9bGUuaGFzaCksVGV9fSxYLmV4dHJhY3RQcm90b2NvbD1XLFgubG9jYXRpb249SyxYLnRyaW1MZWZ0PXosWC5xcz15LHVlLmV4cG9ydHM9WH0sNDkyNzoodWUscSxfKT0+e3ZhciBJPV8oNTEwOCk7ZnVuY3Rpb24gZyhCKXt0cnl7aWYo'@;
put 'IV8uZy5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIHc9Xy5nLmxvY2FsU3RvcmFnZVtCXTtyZXR1cm4gbnVsbCE9dyYmInRydWUiPT09U3RyaW5nKHcpLnRvTG93ZXJDYXNlKCl9dWUuZXhwb3J0cz1mdW5jdGlvbiB5KEIsdyl7aWYoZygibm9EZXByZWNhdGlvbiIp'@;
put 'KXJldHVybiBCO3ZhciBQPSExO3JldHVybiBmdW5jdGlvbiBGKCl7aWYoIVApe2lmKGcoInRocm93RGVwcmVjYXRpb24iKSl0aHJvdyBuZXcgRXJyb3Iodyk7ZygidHJhY2VEZXByZWNhdGlvbiIpP0kudHJhY2Uodyk6SS53YXJuKHcpLFA9ITB9cmV0dXJuIEIuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpfX19LDM4NDp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyl7cmV0dXJuIF8mJiJvYmplY3QiPT10eXBlb2YgXyYmImZ1bmN0aW9uIj09dHlwZW9mIF8uY29weSYmImZ1bmN0aW9uIj09dHlwZW9mIF8uZmlsbCYmImZ1bmN0aW9uIj09dHlwZW9mIF8ucmVhZFVJbnQ4fX0sNTk1NToodWUs'@;
put 'cSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDI1ODQpLHk9Xyg4NjYyKSxnPV8oNjQzMCksQj1fKDU2OTIpO2Z1bmN0aW9uIHcoQWUpe3JldHVybiBBZS5jYWxsLmJpbmQoQWUpfXZhciBQPXR5cGVvZiBCaWdJbnQ8InUiLEY9dHlwZW9mIFN5bWJvbDwidSIsTz13KE9iamVjdC5wcm90b3R5'@;
put 'cGUudG9TdHJpbmcpLHo9dyhOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YpLE49dyhTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YpLEw9dyhCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mKTtpZihQKXZhciBLPXcoQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mKTtpZihGKXZhciBVPXcoU3ltYm9sLnBy'@;
put 'b3RvdHlwZS52YWx1ZU9mKTtmdW5jdGlvbiBXKEFlLF90KXtpZigib2JqZWN0IiE9dHlwZW9mIEFlKXJldHVybiExO3RyeXtyZXR1cm4gX3QoQWUpLCEwfWNhdGNoe3JldHVybiExfX1mdW5jdGlvbiBwKEFlKXtyZXR1cm4iW29iamVjdCBNYXBdIj09PU8oQWUpfWZ1bmN0aW9uIHgoQWUpe3Jl'@;
put 'dHVybiJbb2JqZWN0IFNldF0iPT09TyhBZSl9ZnVuY3Rpb24gVChBZSl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0iPT09TyhBZSl9ZnVuY3Rpb24gaihBZSl7cmV0dXJuIltvYmplY3QgV2Vha1NldF0iPT09TyhBZSl9ZnVuY3Rpb24gbShBZSl7cmV0dXJuIltvYmplY3QgQXJyYXlCdWZmZXJd'@;
put 'Ij09PU8oQWUpfWZ1bmN0aW9uIEEoQWUpe3JldHVybiEodHlwZW9mIEFycmF5QnVmZmVyPiJ1IikmJihtLndvcmtpbmc/bShBZSk6QWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil9ZnVuY3Rpb24gb2UoQWUpe3JldHVybiJbb2JqZWN0IERhdGFWaWV3XSI9PT1PKEFlKX1mdW5jdGlvbiB0ZShB'@;
put 'ZSl7cmV0dXJuISh0eXBlb2YgRGF0YVZpZXc+InUiKSYmKG9lLndvcmtpbmc/b2UoQWUpOkFlIGluc3RhbmNlb2YgRGF0YVZpZXcpfXEuaXNBcmd1bWVudHNPYmplY3Q9SSxxLmlzR2VuZXJhdG9yRnVuY3Rpb249eSxxLmlzVHlwZWRBcnJheT1CLHEuaXNQcm9taXNlPWZ1bmN0aW9uIFkoQWUp'@;
put 'e3JldHVybiB0eXBlb2YgUHJvbWlzZTwidSImJkFlIGluc3RhbmNlb2YgUHJvbWlzZXx8bnVsbCE9PUFlJiYib2JqZWN0Ij09dHlwZW9mIEFlJiYiZnVuY3Rpb24iPT10eXBlb2YgQWUudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIEFlLmNhdGNofSxxLmlzQXJyYXlCdWZmZXJWaWV3PWZ1bmN0'@;
put 'aW9uIFgoQWUpe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KEFlKTpCKEFlKXx8dGUoQWUpfSxxLmlzVWludDhBcnJheT1mdW5jdGlvbiBlZShBZSl7cmV0dXJuIlVpbnQ4QXJyYXkiPT09ZyhBZSl9LHEuaXNVaW50'@;
put 'OENsYW1wZWRBcnJheT1mdW5jdGlvbiBKKEFlKXtyZXR1cm4iVWludDhDbGFtcGVkQXJyYXkiPT09ZyhBZSl9LHEuaXNVaW50MTZBcnJheT1mdW5jdGlvbiByZShBZSl7cmV0dXJuIlVpbnQxNkFycmF5Ij09PWcoQWUpfSxxLmlzVWludDMyQXJyYXk9ZnVuY3Rpb24gaWUoQWUpe3JldHVybiJV'@;
put 'aW50MzJBcnJheSI9PT1nKEFlKX0scS5pc0ludDhBcnJheT1mdW5jdGlvbiBsZShBZSl7cmV0dXJuIkludDhBcnJheSI9PT1nKEFlKX0scS5pc0ludDE2QXJyYXk9ZnVuY3Rpb24gbWUoQWUpe3JldHVybiJJbnQxNkFycmF5Ij09PWcoQWUpfSxxLmlzSW50MzJBcnJheT1mdW5jdGlvbiBfZShB'@;
put 'ZSl7cmV0dXJuIkludDMyQXJyYXkiPT09ZyhBZSl9LHEuaXNGbG9hdDMyQXJyYXk9ZnVuY3Rpb24gVGUoQWUpe3JldHVybiJGbG9hdDMyQXJyYXkiPT09ZyhBZSl9LHEuaXNGbG9hdDY0QXJyYXk9ZnVuY3Rpb24gU2UoQWUpe3JldHVybiJGbG9hdDY0QXJyYXkiPT09ZyhBZSl9LHEuaXNCaWdJ'@;
put 'bnQ2NEFycmF5PWZ1bmN0aW9uIHplKEFlKXtyZXR1cm4iQmlnSW50NjRBcnJheSI9PT1nKEFlKX0scS5pc0JpZ1VpbnQ2NEFycmF5PWZ1bmN0aW9uIFYoQWUpe3JldHVybiJCaWdVaW50NjRBcnJheSI9PT1nKEFlKX0scC53b3JraW5nPXR5cGVvZiBNYXA8InUiJiZwKG5ldyBNYXApLHEuaXNN'@;
put 'YXA9ZnVuY3Rpb24gYihBZSl7cmV0dXJuISh0eXBlb2YgTWFwPiJ1IikmJihwLndvcmtpbmc/cChBZSk6QWUgaW5zdGFuY2VvZiBNYXApfSx4Lndvcmtpbmc9dHlwZW9mIFNldDwidSImJngobmV3IFNldCkscS5pc1NldD1mdW5jdGlvbiBDKEFlKXtyZXR1cm4hKHR5cGVvZiBTZXQ+InUiKSYm'@;
put 'KHgud29ya2luZz94KEFlKTpBZSBpbnN0YW5jZW9mIFNldCl9LFQud29ya2luZz10eXBlb2YgV2Vha01hcDwidSImJlQobmV3IFdlYWtNYXApLHEuaXNXZWFrTWFwPWZ1bmN0aW9uIEgoQWUpe3JldHVybiEodHlwZW9mIFdlYWtNYXA+InUiKSYmKFQud29ya2luZz9UKEFlKTpBZSBpbnN0YW5j'@;
put 'ZW9mIFdlYWtNYXApfSxqLndvcmtpbmc9dHlwZW9mIFdlYWtTZXQ8InUiJiZqKG5ldyBXZWFrU2V0KSxxLmlzV2Vha1NldD1mdW5jdGlvbiBFKEFlKXtyZXR1cm4gaihBZSl9LG0ud29ya2luZz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZtKG5ldyBBcnJheUJ1ZmZlcikscS5pc0FycmF5QnVm'@;
put 'ZmVyPUEsb2Uud29ya2luZz10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgRGF0YVZpZXc8InUiJiZvZShuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKDEpLDAsMSkpLHEuaXNEYXRhVmlldz10ZTt2YXIgc2U9dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPCJ1Ij9TaGFyZWRBcnJh'@;
put 'eUJ1ZmZlcjp2b2lkIDA7ZnVuY3Rpb24gd2UoQWUpe3JldHVybiJbb2JqZWN0IFNoYXJlZEFycmF5QnVmZmVyXSI9PT1PKEFlKX1mdW5jdGlvbiBVZShBZSl7cmV0dXJuISh0eXBlb2Ygc2U+InUiKSYmKHR5cGVvZiB3ZS53b3JraW5nPiJ1IiYmKHdlLndvcmtpbmc9d2UobmV3IHNlKSksd2Uu'@;
put 'd29ya2luZz93ZShBZSk6QWUgaW5zdGFuY2VvZiBzZSl9ZnVuY3Rpb24gamUoQWUpe3JldHVybiBXKEFlLHopfWZ1bmN0aW9uIERlKEFlKXtyZXR1cm4gVyhBZSxOKX1mdW5jdGlvbiBGZShBZSl7cmV0dXJuIFcoQWUsTCl9ZnVuY3Rpb24gUmUoQWUpe3JldHVybiBQJiZXKEFlLEspfWZ1bmN0'@;
put 'aW9uIEllKEFlKXtyZXR1cm4gRiYmVyhBZSxVKX1xLmlzU2hhcmVkQXJyYXlCdWZmZXI9VWUscS5pc0FzeW5jRnVuY3Rpb249ZnVuY3Rpb24gSmUoQWUpe3JldHVybiJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09PU8oQWUpfSxxLmlzTWFwSXRlcmF0b3I9ZnVuY3Rpb24gYXQoQWUpe3JldHVy'@;
put 'biJbb2JqZWN0IE1hcCBJdGVyYXRvcl0iPT09TyhBZSl9LHEuaXNTZXRJdGVyYXRvcj1mdW5jdGlvbiBNZShBZSl7cmV0dXJuIltvYmplY3QgU2V0IEl0ZXJhdG9yXSI9PT1PKEFlKX0scS5pc0dlbmVyYXRvck9iamVjdD1mdW5jdGlvbiB2ZShBZSl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9y'@;
put 'XSI9PT1PKEFlKX0scS5pc1dlYkFzc2VtYmx5Q29tcGlsZWRNb2R1bGU9ZnVuY3Rpb24gWGUoQWUpe3JldHVybiJbb2JqZWN0IFdlYkFzc2VtYmx5Lk1vZHVsZV0iPT09TyhBZSl9LHEuaXNOdW1iZXJPYmplY3Q9amUscS5pc1N0cmluZ09iamVjdD1EZSxxLmlzQm9vbGVhbk9iamVjdD1GZSxx'@;
put 'LmlzQmlnSW50T2JqZWN0PVJlLHEuaXNTeW1ib2xPYmplY3Q9SWUscS5pc0JveGVkUHJpbWl0aXZlPWZ1bmN0aW9uIFZlKEFlKXtyZXR1cm4gamUoQWUpfHxEZShBZSl8fEZlKEFlKXx8UmUoQWUpfHxJZShBZSl9LHEuaXNBbnlBcnJheUJ1ZmZlcj1mdW5jdGlvbiBrZShBZSl7cmV0dXJuIHR5'@;
put 'cGVvZiBVaW50OEFycmF5PCJ1IiYmKEEoQWUpfHxVZShBZSkpfSxbImlzUHJveHkiLCJpc0V4dGVybmFsIiwiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKEFlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocSxBZSx7ZW51bWVyYWJsZTohMSx2YWx1ZTpmdW5jdGlv'@;
put 'bigpe3Rocm93IG5ldyBFcnJvcihBZSsiIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdXNlcmxhbmQiKX19KX0pfSw5NTM5Oih1ZSxxLF8pPT57dmFyIEk9Xyg0MTU1KSx5PV8oNTEwOCksZz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc3x8ZnVuY3Rpb24od2Upe2Zvcih2YXIgVWU9T2Jq'@;
put 'ZWN0LmtleXMod2UpLEplPXt9LGF0PTA7YXQ8VWUubGVuZ3RoO2F0KyspSmVbVWVbYXRdXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdlLFVlW2F0XSk7cmV0dXJuIEplfSxCPS8lW3NkaiVdL2c7cS5mb3JtYXQ9ZnVuY3Rpb24oc2Upe2lmKCFfZShzZSkpe2Zvcih2YXIgd2U9'@;
put 'W10sVWU9MDtVZTxhcmd1bWVudHMubGVuZ3RoO1VlKyspd2UucHVzaChPKGFyZ3VtZW50c1tVZV0pKTtyZXR1cm4gd2Uuam9pbigiICIpfVVlPTE7Zm9yKHZhciBKZT1hcmd1bWVudHMsYXQ9SmUubGVuZ3RoLE1lPVN0cmluZyhzZSkucmVwbGFjZShCLGZ1bmN0aW9uKFhlKXtpZigiJSUiPT09'@;
put 'WGUpcmV0dXJuIiUiO2lmKFVlPj1hdClyZXR1cm4gWGU7c3dpdGNoKFhlKXtjYXNlIiVzIjpyZXR1cm4gU3RyaW5nKEplW1VlKytdKTtjYXNlIiVkIjpyZXR1cm4gTnVtYmVyKEplW1VlKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KEplW1VlKytdKX1jYXRjaHtyZXR1'@;
put 'cm4iW0NpcmN1bGFyXSJ9ZGVmYXVsdDpyZXR1cm4gWGV9fSksdmU9SmVbVWVdO1VlPGF0O3ZlPUplWysrVWVdKWllKHZlKXx8IVYodmUpP01lKz0iICIrdmU6TWUrPSIgIitPKHZlKTtyZXR1cm4gTWV9LHEuZGVwcmVjYXRlPWZ1bmN0aW9uKHNlLHdlKXtpZih0eXBlb2YgSTwidSImJiEwPT09'@;
put 'SS5ub0RlcHJlY2F0aW9uKXJldHVybiBzZTtpZih0eXBlb2YgST4idSIpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHEuZGVwcmVjYXRlKHNlLHdlKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3ZhciBVZT0hMTtyZXR1cm4gZnVuY3Rpb24gSmUoKXtpZighVWUpe2lmKEkudGhyb3dEZXByZWNh'@;
put 'dGlvbil0aHJvdyBuZXcgRXJyb3Iod2UpO0kudHJhY2VEZXByZWNhdGlvbj95LnRyYWNlKHdlKTp5LmVycm9yKHdlKSxVZT0hMH1yZXR1cm4gc2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIHc9e30sUD0vXiQvO2lmKEkuZW52Lk5PREVfREVCVUcpe3ZhciBGPUkuZW52Lk5PREVfREVC'@;
put 'VUc7Rj1GLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrPy5dL2csIlxcJCYiKS5yZXBsYWNlKC9cKi9nLCIuKiIpLnJlcGxhY2UoLywvZywiJHxeIikudG9VcHBlckNhc2UoKSxQPW5ldyBSZWdFeHAoIl4iK0YrIiQiLCJpIil9ZnVuY3Rpb24gTyhzZSx3ZSl7dmFyIFVlPXtzZWVuOltdLHN0eWxp'@;
put 'emU6Tn07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihVZS5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihVZS5jb2xvcnM9YXJndW1lbnRzWzNdKSxyZSh3ZSk/VWUuc2hvd0hpZGRlbj13ZTp3ZSYmcS5fZXh0ZW5kKFVlLHdlKSxTZShVZS5zaG93SGlkZGVu'@;
put 'KSYmKFVlLnNob3dIaWRkZW49ITEpLFNlKFVlLmRlcHRoKSYmKFVlLmRlcHRoPTIpLFNlKFVlLmNvbG9ycykmJihVZS5jb2xvcnM9ITEpLFNlKFVlLmN1c3RvbUluc3BlY3QpJiYoVWUuY3VzdG9tSW5zcGVjdD0hMCksVWUuY29sb3JzJiYoVWUuc3R5bGl6ZT16KSxLKFVlLHNlLFVlLmRlcHRo'@;
put 'KX1mdW5jdGlvbiB6KHNlLHdlKXt2YXIgVWU9Ty5zdHlsZXNbd2VdO3JldHVybiBVZT8iXHgxYlsiK08uY29sb3JzW1VlXVswXSsibSIrc2UrIlx4MWJbIitPLmNvbG9yc1tVZV1bMV0rIm0iOnNlfWZ1bmN0aW9uIE4oc2Usd2Upe3JldHVybiBzZX1mdW5jdGlvbiBLKHNlLHdlLFVlKXtpZihz'@;
put 'ZS5jdXN0b21JbnNwZWN0JiZ3ZSYmeCh3ZS5pbnNwZWN0KSYmd2UuaW5zcGVjdCE9PXEuaW5zcGVjdCYmKCF3ZS5jb25zdHJ1Y3Rvcnx8d2UuY29uc3RydWN0b3IucHJvdG90eXBlIT09d2UpKXt2YXIgSmU9d2UuaW5zcGVjdChVZSxzZSk7cmV0dXJuIF9lKEplKXx8KEplPUsoc2UsSmUsVWUp'@;
put 'KSxKZX12YXIgYXQ9ZnVuY3Rpb24gVShzZSx3ZSl7aWYoU2Uod2UpKXJldHVybiBzZS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihfZSh3ZSkpe3ZhciBVZT0iJyIrSlNPTi5zdHJpbmdpZnkod2UpLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIiku'@;
put 'cmVwbGFjZSgvXFwiL2csJyInKSsiJyI7cmV0dXJuIHNlLnN0eWxpemUoVWUsInN0cmluZyIpfXJldHVybiBtZSh3ZSk/c2Uuc3R5bGl6ZSgiIit3ZSwibnVtYmVyIik6cmUod2UpP3NlLnN0eWxpemUoIiIrd2UsImJvb2xlYW4iKTppZSh3ZSk/c2Uuc3R5bGl6ZSgibnVsbCIsIm51bGwiKTp2'@;
put 'b2lkIDB9KHNlLHdlKTtpZihhdClyZXR1cm4gYXQ7dmFyIE1lPU9iamVjdC5rZXlzKHdlKSx2ZT1mdW5jdGlvbiBMKHNlKXt2YXIgd2U9e307cmV0dXJuIHNlLmZvckVhY2goZnVuY3Rpb24oVWUsSmUpe3dlW1VlXT0hMH0pLHdlfShNZSk7aWYoc2Uuc2hvd0hpZGRlbiYmKE1lPU9iamVjdC5n'@;
put 'ZXRPd25Qcm9wZXJ0eU5hbWVzKHdlKSksYih3ZSkmJihNZS5pbmRleE9mKCJtZXNzYWdlIik+PTB8fE1lLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBXKHdlKTtpZigwPT09TWUubGVuZ3RoKXtpZih4KHdlKSlyZXR1cm4gc2Uuc3R5bGl6ZSgiW0Z1bmN0aW9uIisod2UubmFt'@;
put 'ZT8iOiAiK3dlLm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKHplKHdlKSlyZXR1cm4gc2Uuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpLCJyZWdleHAiKTtpZihwKHdlKSlyZXR1cm4gc2Uuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdl'@;
put 'KSwiZGF0ZSIpO2lmKGIod2UpKXJldHVybiBXKHdlKX12YXIgSWUsamU9IiIsRGU9ITEsRmU9WyJ7IiwifSJdO3JldHVybiBKKHdlKSYmKERlPSEwLEZlPVsiWyIsIl0iXSkseCh3ZSkmJihqZT0iIFtGdW5jdGlvbiIrKHdlLm5hbWU/IjogIit3ZS5uYW1lOiIiKSsiXSIpLHplKHdlKSYmKGpl'@;
put 'PSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpKSxwKHdlKSYmKGplPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKHdlKSksYih3ZSkmJihqZT0iICIrVyh3ZSkpLDAhPT1NZS5sZW5ndGh8fERlJiYwIT13ZS5sZW5ndGg/VWU8MD96ZSh3ZSk/c2Uuc3R5'@;
put 'bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2UpLCJyZWdleHAiKTpzZS5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooc2Uuc2Vlbi5wdXNoKHdlKSxJZT1EZT9mdW5jdGlvbiBZKHNlLHdlLFVlLEplLGF0KXtmb3IodmFyIE1lPVtdLHZlPTAsWGU9d2UubGVuZ3Ro'@;
put 'O3ZlPFhlOysrdmUpbSh3ZSxTdHJpbmcodmUpKT9NZS5wdXNoKFgoc2Usd2UsVWUsSmUsU3RyaW5nKHZlKSwhMCkpOk1lLnB1c2goIiIpO3JldHVybiBhdC5mb3JFYWNoKGZ1bmN0aW9uKGplKXtqZS5tYXRjaCgvXlxkKyQvKXx8TWUucHVzaChYKHNlLHdlLFVlLEplLGplLCEwKSl9KSxNZX0o'@;
put 'c2Usd2UsVWUsdmUsTWUpOk1lLm1hcChmdW5jdGlvbihWZSl7cmV0dXJuIFgoc2Usd2UsVWUsdmUsVmUsRGUpfSksc2Uuc2Vlbi5wb3AoKSxmdW5jdGlvbiBlZShzZSx3ZSxVZSl7dmFyIGF0PXNlLnJlZHVjZShmdW5jdGlvbihNZSx2ZSl7cmV0dXJuIHZlLmluZGV4T2YoIlxuIiksTWUrdmUu'@;
put 'cmVwbGFjZSgvXHUwMDFiXFtcZFxkP20vZywiIikubGVuZ3RoKzF9LDApO3JldHVybiBhdD42MD9VZVswXSsoIiI9PT13ZT8iIjp3ZSsiXG4gIikrIiAiK3NlLmpvaW4oIixcbiAgIikrIiAiK1VlWzFdOlVlWzBdK3dlKyIgIitzZS5qb2luKCIsICIpKyIgIitVZVsxXX0oSWUsamUsRmUpKTpG'@;
put 'ZVswXStqZStGZVsxXX1mdW5jdGlvbiBXKHNlKXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc2UpKyJdIn1mdW5jdGlvbiBYKHNlLHdlLFVlLEplLGF0LE1lKXt2YXIgdmUsWGUsamU7aWYoKGplPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2UsYXQp'@;
put 'fHx7dmFsdWU6d2VbYXRdfSkuZ2V0P1hlPXNlLnN0eWxpemUoamUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTpqZS5zZXQmJihYZT1zZS5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksbShKZSxhdCl8fCh2ZT0iWyIrYXQrIl0iKSxYZXx8KHNlLnNl'@;
put 'ZW4uaW5kZXhPZihqZS52YWx1ZSk8MD8oWGU9aWUoVWUpP0soc2UsamUudmFsdWUsbnVsbCk6SyhzZSxqZS52YWx1ZSxVZS0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKFhlPU1lP1hlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihEZSl7cmV0dXJuIiAgIitEZX0pLmpvaW4oIlxuIikuc2xpY2Uo'@;
put 'Mik6IlxuIitYZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oRGUpe3JldHVybiIgICAiK0RlfSkuam9pbigiXG4iKSk6WGU9c2Uuc3R5bGl6ZSgiW0NpcmN1bGFyXSIsInNwZWNpYWwiKSksU2UodmUpKXtpZihNZSYmYXQubWF0Y2goL15cZCskLykpcmV0dXJuIFhlOyh2ZT1KU09OLnN0cmlu'@;
put 'Z2lmeSgiIithdCkpLm1hdGNoKC9eIihbYS16QS1aX11bYS16QS1aXzAtOV0qKSIkLyk/KHZlPXZlLnNsaWNlKDEsLTEpLHZlPXNlLnN0eWxpemUodmUsIm5hbWUiKSk6KHZlPXZlLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwiL2csJyInKS5yZXBsYWNlKC8oXiJ8IiQpL2csIici'@;
put 'KSx2ZT1zZS5zdHlsaXplKHZlLCJzdHJpbmciKSl9cmV0dXJuIHZlKyI6ICIrWGV9ZnVuY3Rpb24gSihzZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoc2UpfWZ1bmN0aW9uIHJlKHNlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBzZX1mdW5jdGlvbiBpZShzZSl7cmV0dXJuIG51bGw9PT1zZX1m'@;
put 'dW5jdGlvbiBtZShzZSl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBzZX1mdW5jdGlvbiBfZShzZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBzZX1mdW5jdGlvbiBTZShzZSl7cmV0dXJuIHZvaWQgMD09PXNlfWZ1bmN0aW9uIHplKHNlKXtyZXR1cm4gVihzZSkmJiJbb2JqZWN0IFJlZ0V4cF0i'@;
put 'PT09VChzZSl9ZnVuY3Rpb24gVihzZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBzZSYmbnVsbCE9PXNlfWZ1bmN0aW9uIHAoc2Upe3JldHVybiBWKHNlKSYmIltvYmplY3QgRGF0ZV0iPT09VChzZSl9ZnVuY3Rpb24gYihzZSl7cmV0dXJuIFYoc2UpJiYoIltvYmplY3QgRXJyb3JdIj09PVQo'@;
put 'c2UpfHxzZSBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiB4KHNlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygc2V9ZnVuY3Rpb24gVChzZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzZSl9ZnVuY3Rpb24gSChzZSl7cmV0dXJuIHNlPDEwPyIwIitzZS50b1N0'@;
put 'cmluZygxMCk6c2UudG9TdHJpbmcoMTApfXEuZGVidWdsb2c9ZnVuY3Rpb24oc2Upe2lmKHNlPXNlLnRvVXBwZXJDYXNlKCksIXdbc2VdKWlmKFAudGVzdChzZSkpe3ZhciB3ZT1JLnBpZDt3W3NlXT1mdW5jdGlvbigpe3ZhciBVZT1xLmZvcm1hdC5hcHBseShxLGFyZ3VtZW50cyk7eS5lcnJv'@;
put 'cigiJXMgJWQ6ICVzIixzZSx3ZSxVZSl9fWVsc2Ugd1tzZV09ZnVuY3Rpb24oKXt9O3JldHVybiB3W3NlXX0scS5pbnNwZWN0PU8sTy5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6Wzkw'@;
put 'LDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LE8uc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRl'@;
put 'ZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0scS50eXBlcz1fKDU5NTUpLHEuaXNBcnJheT1KLHEuaXNCb29sZWFuPXJlLHEuaXNOdWxsPWllLHEuaXNOdWxsT3JVbmRlZmluZWQ9ZnVuY3Rpb24gbGUoc2Upe3JldHVy'@;
put 'biBudWxsPT1zZX0scS5pc051bWJlcj1tZSxxLmlzU3RyaW5nPV9lLHEuaXNTeW1ib2w9ZnVuY3Rpb24gVGUoc2Upe3JldHVybiJzeW1ib2wiPT10eXBlb2Ygc2V9LHEuaXNVbmRlZmluZWQ9U2UscS5pc1JlZ0V4cD16ZSxxLnR5cGVzLmlzUmVnRXhwPXplLHEuaXNPYmplY3Q9VixxLmlzRGF0'@;
put 'ZT1wLHEudHlwZXMuaXNEYXRlPXAscS5pc0Vycm9yPWIscS50eXBlcy5pc05hdGl2ZUVycm9yPWIscS5pc0Z1bmN0aW9uPXgscS5pc1ByaW1pdGl2ZT1mdW5jdGlvbiBDKHNlKXtyZXR1cm4gbnVsbD09PXNlfHwiYm9vbGVhbiI9PXR5cGVvZiBzZXx8Im51bWJlciI9PXR5cGVvZiBzZXx8InN0'@;
put 'cmluZyI9PXR5cGVvZiBzZXx8InN5bWJvbCI9PXR5cGVvZiBzZXx8dHlwZW9mIHNlPiJ1In0scS5pc0J1ZmZlcj1fKDM4NCk7dmFyIGo9WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXTtmdW5jdGlvbiBtKHNl'@;
put 'LHdlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlLHdlKX1xLmxvZz1mdW5jdGlvbigpe3kubG9nKCIlcyAtICVzIixmdW5jdGlvbiBFKCl7dmFyIHNlPW5ldyBEYXRlLHdlPVtIKHNlLmdldEhvdXJzKCkpLEgoc2UuZ2V0TWludXRlcygpKSxIKHNlLmdl'@;
put 'dFNlY29uZHMoKSldLmpvaW4oIjoiKTtyZXR1cm5bc2UuZ2V0RGF0ZSgpLGpbc2UuZ2V0TW9udGgoKV0sd2VdLmpvaW4oIiAiKX0oKSxxLmZvcm1hdC5hcHBseShxLGFyZ3VtZW50cykpfSxxLmluaGVyaXRzPV8oNTcxNykscS5fZXh0ZW5kPWZ1bmN0aW9uKHNlLHdlKXtpZighd2V8fCFWKHdl'@;
put 'KSlyZXR1cm4gc2U7Zm9yKHZhciBVZT1PYmplY3Qua2V5cyh3ZSksSmU9VWUubGVuZ3RoO0plLS07KXNlW1VlW0plXV09d2VbVWVbSmVdXTtyZXR1cm4gc2V9O3ZhciBBPXR5cGVvZiBTeW1ib2w8InUiP1N5bWJvbCgidXRpbC5wcm9taXNpZnkuY3VzdG9tIik6dm9pZCAwO2Z1bmN0aW9uIG9l'@;
put 'KHNlLHdlKXtpZighc2Upe3ZhciBVZT1uZXcgRXJyb3IoIlByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGggYSBmYWxzeSB2YWx1ZSIpO1VlLnJlYXNvbj1zZSxzZT1VZX1yZXR1cm4gd2Uoc2UpfXEucHJvbWlzaWZ5PWZ1bmN0aW9uKHdlKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygd2UpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7aWYoQSYmd2VbQV0pe3ZhciBVZTtpZigiZnVuY3Rpb24iIT10eXBlb2YoVWU9d2VbQV0pKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidXRpbC5wcm9taXNpZnkuY3VzdG9t'@;
put 'IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFVlLEEse3ZhbHVlOlVlLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksVWV9ZnVuY3Rpb24gVWUoKXtmb3IodmFyIEplLGF0LE1lPW5ldyBQ'@;
put 'cm9taXNlKGZ1bmN0aW9uKGplLERlKXtKZT1qZSxhdD1EZX0pLHZlPVtdLFhlPTA7WGU8YXJndW1lbnRzLmxlbmd0aDtYZSsrKXZlLnB1c2goYXJndW1lbnRzW1hlXSk7dmUucHVzaChmdW5jdGlvbihqZSxEZSl7amU/YXQoamUpOkplKERlKX0pO3RyeXt3ZS5hcHBseSh0aGlzLHZlKX1jYXRj'@;
put 'aChqZSl7YXQoamUpfXJldHVybiBNZX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKFVlLE9iamVjdC5nZXRQcm90b3R5cGVPZih3ZSkpLEEmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShVZSxBLHt2YWx1ZTpVZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0p'@;
put 'LE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFVlLGcod2UpKX0scS5wcm9taXNpZnkuY3VzdG9tPUEscS5jYWxsYmFja2lmeT1mdW5jdGlvbiB0ZShzZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHNlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUg'@;
put 'b2YgdHlwZSBGdW5jdGlvbicpO2Z1bmN0aW9uIHdlKCl7Zm9yKHZhciBVZT1bXSxKZT0wO0plPGFyZ3VtZW50cy5sZW5ndGg7SmUrKylVZS5wdXNoKGFyZ3VtZW50c1tKZV0pO3ZhciBhdD1VZS5wb3AoKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhl'@;
put 'IGxhc3QgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uIik7dmFyIE1lPXRoaXMsdmU9ZnVuY3Rpb24oKXtyZXR1cm4gYXQuYXBwbHkoTWUsYXJndW1lbnRzKX07c2UuYXBwbHkodGhpcyxVZSkudGhlbihmdW5jdGlvbihYZSl7SS5uZXh0VGljayh2ZS5iaW5kKG51bGwsbnVsbCxY'@;
put 'ZSkpfSxmdW5jdGlvbihYZSl7SS5uZXh0VGljayhvZS5iaW5kKG51bGwsWGUsdmUpKX0pfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yod2UsT2JqZWN0LmdldFByb3RvdHlwZU9mKHNlKSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod2UsZyhzZSkpLHdlfX0sNDgxOih1ZSxxLF8pPT57'@;
put 'IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmV4cG9ydHMuaXNfdXJpPWcsSS5leHBvcnRzLmlzX2h0dHBfdXJpPUIsSS5leHBvcnRzLmlzX2h0dHBzX3VyaT13LEkuZXhwb3J0cy5pc193ZWJfdXJpPVAsSS5leHBvcnRzLmlzVXJpPWcsSS5leHBvcnRzLmlzSHR0cFVyaT1CLEkuZXhwb3J0'@;
put 'cy5pc0h0dHBzVXJpPXcsSS5leHBvcnRzLmlzV2ViVXJpPVA7dmFyIHk9ZnVuY3Rpb24oRil7cmV0dXJuIEYubWF0Y2goLyg/OihbXjpcLz8jXSspOik/KD86XC9cLyhbXlwvPyNdKikpPyhbXj8jXSopKD86XD8oW14jXSopKT8oPzojKC4qKSk/Lyl9O2Z1bmN0aW9uIGcoRil7aWYoRiYmIS9b'@;
put 'XmEtejAtOVw6XC9cP1wjXFtcXVxAXCFcJFwmXCdcKFwpXCpcK1wsXDtcPVwuXC1cX1x+XCVdL2kudGVzdChGKSYmIS8lW14wLTlhLWZdL2kudGVzdChGKSYmIS8lWzAtOWEtZl0oOj9bXjAtOWEtZl18JCkvaS50ZXN0KEYpKXt2YXIgTyxOLEwsSyxVLHo9IiIsVz0iIjtpZihOPShPPXkoRikp'@;
put 'WzJdLEw9T1szXSxLPU9bNF0sVT1PWzVdLCh6PU9bMV0pJiZ6Lmxlbmd0aCYmTC5sZW5ndGg+PTApe2lmKE4mJk4ubGVuZ3RoKXtpZigwIT09TC5sZW5ndGgmJiEvXlwvLy50ZXN0KEwpKXJldHVybn1lbHNlIGlmKC9eXC9cLy8udGVzdChMKSlyZXR1cm47aWYoL15bYS16XVthLXowLTlcK1wt'@;
put 'XC5dKiQvLnRlc3Qoei50b0xvd2VyQ2FzZSgpKSlyZXR1cm4gVys9eisiOiIsTiYmTi5sZW5ndGgmJihXKz0iLy8iK04pLFcrPUwsSyYmSy5sZW5ndGgmJihXKz0iPyIrSyksVSYmVS5sZW5ndGgmJihXKz0iIyIrVSksV319fWZ1bmN0aW9uIEIoRixPKXtpZihnKEYpKXt2YXIgeixLLFcsWSxO'@;
put 'PSIiLEw9IiIsVT0iIixYPSIiO2lmKEw9KHo9eShGKSlbMl0sSz16WzNdLFc9els0XSxZPXpbNV0sTj16WzFdKXtpZihPKXtpZigiaHR0cHMiIT1OLnRvTG93ZXJDYXNlKCkpcmV0dXJufWVsc2UgaWYoImh0dHAiIT1OLnRvTG93ZXJDYXNlKCkpcmV0dXJuO2lmKEwpcmV0dXJuLzooXGQrKSQv'@;
put 'LnRlc3QoTCkmJihVPUwubWF0Y2goLzooXGQrKSQvKVswXSxMPUwucmVwbGFjZSgvOlxkKyQvLCIiKSksWCs9TisiOiIsWCs9Ii8vIitMLFUmJihYKz1VKSxYKz1LLFcmJlcubGVuZ3RoJiYoWCs9Ij8iK1cpLFkmJlkubGVuZ3RoJiYoWCs9IiMiK1kpLFh9fX1mdW5jdGlvbiB3KEYpe3JldHVy'@;
put 'biBCKEYsITApfWZ1bmN0aW9uIFAoRil7cmV0dXJuIEIoRil8fHcoRil9fSh1ZT1fLm5tZCh1ZSkpfSw1MTQwOihfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzKT0+e3ZhciBpbmRleE9mPWZ1bmN0aW9uKHVlLHEpe2lmKHVlLmluZGV4T2YpcmV0dXJuIHVlLmluZGV4T2YocSk7Zm9y'@;
put 'KHZhciBfPTA7Xzx1ZS5sZW5ndGg7XysrKWlmKHVlW19dPT09cSlyZXR1cm4gXztyZXR1cm4tMX0sT2JqZWN0X2tleXM9ZnVuY3Rpb24odWUpe2lmKE9iamVjdC5rZXlzKXJldHVybiBPYmplY3Qua2V5cyh1ZSk7dmFyIHE9W107Zm9yKHZhciBfIGluIHVlKXEucHVzaChfKTtyZXR1cm4gcX0s'@;
put 'Zm9yRWFjaD1mdW5jdGlvbih1ZSxxKXtpZih1ZS5mb3JFYWNoKXJldHVybiB1ZS5mb3JFYWNoKHEpO2Zvcih2YXIgXz0wO188dWUubGVuZ3RoO18rKylxKHVlW19dLF8sdWUpfSxkZWZpbmVQcm9wPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIl8iLHt9'@;
put 'KSxmdW5jdGlvbih1ZSxxLF8pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSxxLHt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTpffSl9fWNhdGNoe3JldHVybiBmdW5jdGlvbihxLF8sSSl7cVtfXT1JfX19KCksZ2xvYmFscz1bIkFycmF5IiwiQm9vbGVh'@;
put 'biIsIkRhdGUiLCJFcnJvciIsIkV2YWxFcnJvciIsIkZ1bmN0aW9uIiwiSW5maW5pdHkiLCJKU09OIiwiTWF0aCIsIk5hTiIsIk51bWJlciIsIk9iamVjdCIsIlJhbmdlRXJyb3IiLCJSZWZlcmVuY2VFcnJvciIsIlJlZ0V4cCIsIlN0cmluZyIsIlN5bnRheEVycm9yIiwiVHlwZUVycm9yIiwi'@;
put 'VVJJRXJyb3IiLCJkZWNvZGVVUkkiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlbmNvZGVVUkkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJldmFsIiwiaXNGaW5pdGUiLCJpc05hTiIsInBhcnNlRmxvYXQiLCJwYXJzZUludCIsInVuZGVmaW5lZCIsInVuZXNjYXBlIl07ZnVuY3Rp'@;
put 'b24gQ29udGV4dCgpe31Db250ZXh0LnByb3RvdHlwZT17fTt2YXIgU2NyaXB0PWV4cG9ydHMuU2NyaXB0PWZ1bmN0aW9uKHEpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFNjcmlwdCkpcmV0dXJuIG5ldyBTY3JpcHQocSk7dGhpcy5jb2RlPXF9O1NjcmlwdC5wcm90b3R5cGUucnVuSW5Db250ZXh0'@;
put 'PWZ1bmN0aW9uKHVlKXtpZighKHVlIGluc3RhbmNlb2YgQ29udGV4dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigibmVlZHMgYSAnY29udGV4dCcgYXJndW1lbnQuIik7dmFyIHE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7cS5zdHlsZXx8KHEuc3R5bGU9e30pLHEuc3R5bGUuZGlz'@;
put 'cGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChxKTt2YXIgXz1xLmNvbnRlbnRXaW5kb3csST1fLmV2YWwseT1fLmV4ZWNTY3JpcHQ7IUkmJnkmJih5LmNhbGwoXywibnVsbCIpLEk9Xy5ldmFsKSxmb3JFYWNoKE9iamVjdF9rZXlzKHVlKSxmdW5jdGlvbih3KXtfW3ddPXVl'@;
put 'W3ddfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKHcpe3VlW3ddJiYoX1t3XT11ZVt3XSl9KTt2YXIgZz1PYmplY3Rfa2V5cyhfKSxCPUkuY2FsbChfLHRoaXMuY29kZSk7cmV0dXJuIGZvckVhY2goT2JqZWN0X2tleXMoXyksZnVuY3Rpb24odyl7KHcgaW4gdWV8fC0xPT09aW5kZXhPZihn'@;
put 'LHcpKSYmKHVlW3ddPV9bd10pfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKHcpe3cgaW4gdWV8fGRlZmluZVByb3AodWUsdyxfW3ddKX0pLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocSksQn0sU2NyaXB0LnByb3RvdHlwZS5ydW5JblRoaXNDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGV2YWwodGhpcy5jb2RlKX0sU2NyaXB0LnByb3RvdHlwZS5ydW5Jbk5ld0NvbnRleHQ9ZnVuY3Rpb24odWUpe3ZhciBxPVNjcmlwdC5jcmVhdGVDb250ZXh0KHVlKSxfPXRoaXMucnVuSW5Db250ZXh0KHEpO3JldHVybiB1ZSYmZm9yRWFjaChPYmplY3Rfa2V5cyhxKSxmdW5jdGlvbihJKXt1'@;
put 'ZVtJXT1xW0ldfSksX30sZm9yRWFjaChPYmplY3Rfa2V5cyhTY3JpcHQucHJvdG90eXBlKSxmdW5jdGlvbih1ZSl7ZXhwb3J0c1t1ZV09U2NyaXB0W3VlXT1mdW5jdGlvbihxKXt2YXIgXz1TY3JpcHQocSk7cmV0dXJuIF9bdWVdLmFwcGx5KF8sW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkp'@;
put 'fX0pLGV4cG9ydHMuaXNDb250ZXh0PWZ1bmN0aW9uKHVlKXtyZXR1cm4gdWUgaW5zdGFuY2VvZiBDb250ZXh0fSxleHBvcnRzLmNyZWF0ZVNjcmlwdD1mdW5jdGlvbih1ZSl7cmV0dXJuIGV4cG9ydHMuU2NyaXB0KHVlKX0sZXhwb3J0cy5jcmVhdGVDb250ZXh0PVNjcmlwdC5jcmVhdGVDb250'@;
put 'ZXh0PWZ1bmN0aW9uKHVlKXt2YXIgcT1uZXcgQ29udGV4dDtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHVlJiZmb3JFYWNoKE9iamVjdF9rZXlzKHVlKSxmdW5jdGlvbihfKXtxW19dPXVlW19dfSkscX19LDY0MzA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MDI5KSx5PV8oMzA4'@;
put 'MyksZz1fKDU1NTkpLEI9Xyg3Mzc5KSx3PV8oNzI5NiksUD1CKCJPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIiksRj1fKDY0MTApKCksTz10eXBlb2YgZ2xvYmFsVGhpcz4idSI/Xy5nOmdsb2JhbFRoaXMsej15KCksTj1CKCJTdHJpbmcucHJvdG90eXBlLnNsaWNlIiksTD1PYmplY3QuZ2V0'@;
put 'UHJvdG90eXBlT2YsSz1CKCJBcnJheS5wcm90b3R5cGUuaW5kZXhPZiIsITApfHxmdW5jdGlvbihlZSxKKXtmb3IodmFyIHJlPTA7cmU8ZWUubGVuZ3RoO3JlKz0xKWlmKGVlW3JlXT09PUopcmV0dXJuIHJlO3JldHVybi0xfSxVPXtfX3Byb3RvX186bnVsbH07SSh6LEYmJncmJkw/ZnVuY3Rp'@;
put 'b24oWCl7dmFyIGVlPW5ldyBPW1hdO2lmKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBlZSl7dmFyIEo9TChlZSkscmU9dyhKLFN5bWJvbC50b1N0cmluZ1RhZyk7aWYoIXJlKXt2YXIgaWU9TChKKTtyZT13KGllLFN5bWJvbC50b1N0cmluZ1RhZyl9VVsiJCIrWF09ZyhyZS5nZXQpfX06ZnVuY3Rp'@;
put 'b24oWCl7dmFyIGVlPW5ldyBPW1hdLEo9ZWUuc2xpY2V8fGVlLnNldDtKJiYoVVsiJCIrWF09ZyhKKSl9KSx1ZS5leHBvcnRzPWZ1bmN0aW9uKGVlKXtpZighZWV8fCJvYmplY3QiIT10eXBlb2YgZWUpcmV0dXJuITE7aWYoIUYpe3ZhciBKPU4oUChlZSksOCwtMSk7cmV0dXJuIEsoeixKKT4t'@;
put 'MT9KOiJPYmplY3QiPT09SiYmZnVuY3Rpb24oZWUpe3ZhciBKPSExO3JldHVybiBJKFUsZnVuY3Rpb24ocmUsaWUpe2lmKCFKKXRyeXtyZShlZSksSj1OKGllLDEpfWNhdGNoe319KSxKfShlZSl9cmV0dXJuIHc/ZnVuY3Rpb24oZWUpe3ZhciBKPSExO3JldHVybiBJKFUsZnVuY3Rpb24ocmUs'@;
put 'aWUpe2lmKCFKKXRyeXsiJCIrcmUoZWUpPT09aWUmJihKPU4oaWUsMSkpfWNhdGNoe319KSxKfShlZSk6bnVsbH19LDg2NDY6KCk9Pnt9LDk1MDooKT0+e30sNjYwMTooKT0+e30sOTIxNDooKT0+e30sNjQxOTooKT0+e30sNjM1MzooKT0+e30sODYyMzooKT0+e30sNzc0ODooKT0+e30sNTU2'@;
put 'ODooKT0+e30sNTQ0MzooKT0+e30sNDEyOTooKT0+e30sNjYxOTooKT0+e30sNzEwODooKT0+e30sMjM2MTooKT0+e30sNDYxNjooKT0+e30sODM3MzooKT0+e30sMzA4MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk5MDgpLHk9dHlwZW9mIGdsb2JhbFRoaXM+InUiP18uZzpn'@;
put 'bG9iYWxUaGlzO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIEI9W10sdz0wO3c8SS5sZW5ndGg7dysrKSJmdW5jdGlvbiI9PXR5cGVvZiB5W0lbd11dJiYoQltCLmxlbmd0aF09SVt3XSk7cmV0dXJuIEJ9fSw3MjE4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSks'@;
put 'eT1fKDg3NjQpLkJ1ZmZlcixnPV8oNTEwOCk7ZnVuY3Rpb24gQihTdCxCdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFN0LmFwcGx5KEJ0LGFyZ3VtZW50cyl9fWNvbnN0e3RvU3RyaW5nOnd9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlB9PU9iamVjdCxGPShTdD0+QnQ9'@;
put 'Pntjb25zdCBfbj13LmNhbGwoQnQpO3JldHVybiBTdFtfbl18fChTdFtfbl09X24uc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxPPVN0PT4oU3Q9U3QudG9Mb3dlckNhc2UoKSxCdD0+RihCdCk9PT1TdCksej1TdD0+QnQ9PnR5cGVvZiBCdD09PVN0'@;
put 'LHtpc0FycmF5Ok59PUFycmF5LEw9eigidW5kZWZpbmVkIiksVT1PKCJBcnJheUJ1ZmZlciIpLFk9eigic3RyaW5nIiksWD16KCJmdW5jdGlvbiIpLGVlPXooIm51bWJlciIpLEo9U3Q9Pm51bGwhPT1TdCYmIm9iamVjdCI9PXR5cGVvZiBTdCxpZT1TdD0+e2lmKCJvYmplY3QiIT09RihTdCkp'@;
put 'cmV0dXJuITE7Y29uc3QgQnQ9UChTdCk7cmV0dXJuIShudWxsIT09QnQmJkJ0IT09T2JqZWN0LnByb3RvdHlwZSYmbnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihCdCl8fFN5bWJvbC50b1N0cmluZ1RhZyBpbiBTdHx8U3ltYm9sLml0ZXJhdG9yIGluIFN0KX0sbGU9TygiRGF0ZSIpLG1l'@;
put 'PU8oIkZpbGUiKSxfZT1PKCJCbG9iIiksVGU9TygiRmlsZUxpc3QiKSxWPU8oIlVSTFNlYXJjaFBhcmFtcyIpLFtwLGIseCxDXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChPKTtmdW5jdGlvbiBIKFN0LEJ0LHthbGxPd25LZXlzOl9uPSEx'@;
put 'fT17fSl7aWYobnVsbD09PVN0fHx0eXBlb2YgU3Q+InUiKXJldHVybjtsZXQgbW4sSW47aWYoIm9iamVjdCIhPXR5cGVvZiBTdCYmKFN0PVtTdF0pLE4oU3QpKWZvcihtbj0wLEluPVN0Lmxlbmd0aDttbjxJbjttbisrKUJ0LmNhbGwobnVsbCxTdFttbl0sbW4sU3QpO2Vsc2V7Y29uc3QgYm49'@;
put 'X24/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3QpOk9iamVjdC5rZXlzKFN0KSx1cj1ibi5sZW5ndGg7bGV0IHZpO2Zvcihtbj0wO21uPHVyO21uKyspdmk9Ym5bbW5dLEJ0LmNhbGwobnVsbCxTdFt2aV0sdmksU3QpfX1mdW5jdGlvbiBqKFN0LEJ0KXtCdD1CdC50b0xvd2VyQ2FzZSgp'@;
put 'O2NvbnN0IF9uPU9iamVjdC5rZXlzKFN0KTtsZXQgSW4sbW49X24ubGVuZ3RoO2Zvcig7bW4tLSA+MDspaWYoSW49X25bbW5dLEJ0PT09SW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gSW47cmV0dXJuIG51bGx9Y29uc3QgRT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Yg'@;
put 'c2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Xy5nLG09U3Q9PiFMKFN0KSYmU3QhPT1FLGF0PShTdD0+QnQ9PlN0JiZCdCBpbnN0YW5jZW9mIFN0KSh0eXBlb2YgVWludDhBcnJheTwidSImJlAoVWludDhBcnJheSkpLFhlPU8oIkhUTUxGb3JtRWxlbWVudCIpLERlPSgo'@;
put 'e2hhc093blByb3BlcnR5OlN0fSk9PihCdCxfbik9PlN0LmNhbGwoQnQsX24pKShPYmplY3QucHJvdG90eXBlKSxGZT1PKCJSZWdFeHAiKSxSZT0oU3QsQnQpPT57Y29uc3QgX249T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoU3QpLG1uPXt9O0goX24sKEluLGJuKT0+e2xldCB1'@;
put 'cjshMSE9PSh1cj1CdChJbixibixTdCkpJiYobW5bYm5dPXVyfHxJbil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhTdCxtbil9LFFlPU8oIkFzeW5jRnVuY3Rpb24iKSx5dD0oU3Q9ImZ1bmN0aW9uIj09dHlwZW9mIHNldEltbWVkaWF0ZSxCdD1YKEUucG9zdE1lc3NhZ2UpLFN0P3NldElt'@;
put 'bWVkaWF0ZTpCdD8oX249YGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLG1uPVtdLEUuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6SW4sZGF0YTpibn0pPT57SW49PT1FJiZibj09PV9uJiZtbi5sZW5ndGgmJm1uLnNoaWZ0KCkoKX0sITEpLEluPT57bW4ucHVzaChJbiksRS5w'@;
put 'b3N0TWVzc2FnZShfbiwiKiIpfSk6X249PnNldFRpbWVvdXQoX24pKSxNdD10eXBlb2YgcXVldWVNaWNyb3Rhc2s8InUiP3F1ZXVlTWljcm90YXNrLmJpbmQoRSk6dHlwZW9mIEk8InUiJiZJLm5leHRUaWNrfHx5dDt2YXIgU3QsQnQsX24sbW4sRHQ9e2lzQXJyYXk6Tixpc0FycmF5QnVmZmVy'@;
put 'OlUsaXNCdWZmZXI6ZnVuY3Rpb24gSyhTdCl7cmV0dXJuIG51bGwhPT1TdCYmIUwoU3QpJiZudWxsIT09U3QuY29uc3RydWN0b3ImJiFMKFN0LmNvbnN0cnVjdG9yKSYmWChTdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJlN0LmNvbnN0cnVjdG9yLmlzQnVmZmVyKFN0KX0saXNGb3JtRGF0YTpT'@;
put 'dD0+e2xldCBCdDtyZXR1cm4gU3QmJigiZnVuY3Rpb24iPT10eXBlb2YgRm9ybURhdGEmJlN0IGluc3RhbmNlb2YgRm9ybURhdGF8fFgoU3QuYXBwZW5kKSYmKCJmb3JtZGF0YSI9PT0oQnQ9RihTdCkpfHwib2JqZWN0Ij09PUJ0JiZYKFN0LnRvU3RyaW5nKSYmIltvYmplY3QgRm9ybURhdGFd'@;
put 'Ij09PVN0LnRvU3RyaW5nKCkpKX0saXNBcnJheUJ1ZmZlclZpZXc6ZnVuY3Rpb24gVyhTdCl7bGV0IEJ0O3JldHVybiBCdD10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KFN0KTpTdCYmU3QuYnVmZmVyJiZVKFN0LmJ1ZmZlciks'@;
put 'QnR9LGlzU3RyaW5nOlksaXNOdW1iZXI6ZWUsaXNCb29sZWFuOlN0PT4hMD09PVN0fHwhMT09PVN0LGlzT2JqZWN0OkosaXNQbGFpbk9iamVjdDppZSxpc1JlYWRhYmxlU3RyZWFtOnAsaXNSZXF1ZXN0OmIsaXNSZXNwb25zZTp4LGlzSGVhZGVyczpDLGlzVW5kZWZpbmVkOkwsaXNEYXRlOmxl'@;
put 'LGlzRmlsZTptZSxpc0Jsb2I6X2UsaXNSZWdFeHA6RmUsaXNGdW5jdGlvbjpYLGlzU3RyZWFtOlN0PT5KKFN0KSYmWChTdC5waXBlKSxpc1VSTFNlYXJjaFBhcmFtczpWLGlzVHlwZWRBcnJheTphdCxpc0ZpbGVMaXN0OlRlLGZvckVhY2g6SCxtZXJnZTpmdW5jdGlvbiBBKCl7Y29uc3R7Y2Fz'@;
put 'ZWxlc3M6U3R9PW0odGhpcykmJnRoaXN8fHt9LEJ0PXt9LF9uPShtbixJbik9Pntjb25zdCBibj1TdCYmaihCdCxJbil8fEluO0J0W2JuXT1pZShCdFtibl0pJiZpZShtbik/QShCdFtibl0sbW4pOmllKG1uKT9BKHt9LG1uKTpOKG1uKT9tbi5zbGljZSgpOm1ufTtmb3IobGV0IG1uPTAsSW49'@;
put 'YXJndW1lbnRzLmxlbmd0aDttbjxJbjttbisrKWFyZ3VtZW50c1ttbl0mJkgoYXJndW1lbnRzW21uXSxfbik7cmV0dXJuIEJ0fSxleHRlbmQ6KFN0LEJ0LF9uLHthbGxPd25LZXlzOm1ufT17fSk9PihIKEJ0LChJbixibik9PntTdFtibl09X24mJlgoSW4pP0IoSW4sX24pOklufSx7YWxsT3du'@;
put 'S2V5czptbn0pLFN0KSx0cmltOlN0PT5TdC50cmltP1N0LnRyaW0oKTpTdC5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIiksc3RyaXBCT006U3Q9Pig2NTI3OT09PVN0LmNoYXJDb2RlQXQoMCkmJihTdD1TdC5zbGljZSgxKSksU3QpLGluaGVyaXRzOihT'@;
put 'dCxCdCxfbixtbik9PntTdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCdC5wcm90b3R5cGUsbW4pLFN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1TdCxPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsInN1cGVyIix7dmFsdWU6QnQucHJvdG90eXBlfSksX24mJk9iamVjdC5hc3NpZ24oU3QucHJv'@;
put 'dG90eXBlLF9uKX0sdG9GbGF0T2JqZWN0OihTdCxCdCxfbixtbik9PntsZXQgSW4sYm4sdXI7Y29uc3Qgdmk9e307aWYoQnQ9QnR8fHt9LG51bGw9PVN0KXJldHVybiBCdDtkb3tmb3IoSW49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoU3QpLGJuPUluLmxlbmd0aDtibi0tID4wOyl1cj1J'@;
put 'bltibl0sKCFtbnx8bW4odXIsU3QsQnQpKSYmIXZpW3VyXSYmKEJ0W3VyXT1TdFt1cl0sdmlbdXJdPSEwKTtTdD0hMSE9PV9uJiZQKFN0KX13aGlsZShTdCYmKCFfbnx8X24oU3QsQnQpKSYmU3QhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gQnR9LGtpbmRPZjpGLGtpbmRPZlRlc3Q6Tyxl'@;
put 'bmRzV2l0aDooU3QsQnQsX24pPT57U3Q9U3RyaW5nKFN0KSwodm9pZCAwPT09X258fF9uPlN0Lmxlbmd0aCkmJihfbj1TdC5sZW5ndGgpO2NvbnN0IG1uPVN0LmluZGV4T2YoQnQsX24tPUJ0Lmxlbmd0aCk7cmV0dXJuLTEhPT1tbiYmbW49PT1fbn0sdG9BcnJheTpTdD0+e2lmKCFTdClyZXR1'@;
put 'cm4gbnVsbDtpZihOKFN0KSlyZXR1cm4gU3Q7bGV0IEJ0PVN0Lmxlbmd0aDtpZighZWUoQnQpKXJldHVybiBudWxsO2NvbnN0IF9uPW5ldyBBcnJheShCdCk7Zm9yKDtCdC0tID4wOylfbltCdF09U3RbQnRdO3JldHVybiBfbn0sZm9yRWFjaEVudHJ5OihTdCxCdCk9Pntjb25zdCBtbj0oU3Qm'@;
put 'JlN0W1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoU3QpO2xldCBJbjtmb3IoOyhJbj1tbi5uZXh0KCkpJiYhSW4uZG9uZTspe2NvbnN0IGJuPUluLnZhbHVlO0J0LmNhbGwoU3QsYm5bMF0sYm5bMV0pfX0sbWF0Y2hBbGw6KFN0LEJ0KT0+e2xldCBfbjtjb25zdCBtbj1bXTtmb3IoO251bGwhPT0o'@;
put 'X249U3QuZXhlYyhCdCkpOyltbi5wdXNoKF9uKTtyZXR1cm4gbW59LGlzSFRNTEZvcm06WGUsaGFzT3duUHJvcGVydHk6RGUsaGFzT3duUHJvcDpEZSxyZWR1Y2VEZXNjcmlwdG9yczpSZSxmcmVlemVNZXRob2RzOlN0PT57UmUoU3QsKEJ0LF9uKT0+e2lmKFgoU3QpJiYtMSE9PVsiYXJndW1l'@;
put 'bnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZihfbikpcmV0dXJuITE7aWYoWChTdFtfbl0pKXtpZihCdC5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBCdClyZXR1cm4gdm9pZChCdC53cml0YWJsZT0hMSk7QnQuc2V0fHwoQnQuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3Qg'@;
put 'cmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK19uKyInIil9KX19KX0sdG9PYmplY3RTZXQ6KFN0LEJ0KT0+e2NvbnN0IF9uPXt9LG1uPUluPT57SW4uZm9yRWFjaChibj0+e19uW2JuXT0hMH0pfTtyZXR1cm4gTihTdCk/bW4oU3QpOm1uKFN0cmluZyhTdCkuc3BsaXQoQnQpKSxfbn0sdG9D'@;
put 'YW1lbENhc2U6U3Q9PlN0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbihfbixtbixJbil7cmV0dXJuIG1uLnRvVXBwZXJDYXNlKCkrSW59KSxub29wOigpPT57fSx0b0Zpbml0ZU51bWJlcjooU3QsQnQpPT5udWxsIT1TdCYmTnVtYmVyLmlz'@;
put 'RmluaXRlKFN0PStTdCk/U3Q6QnQsZmluZEtleTpqLGdsb2JhbDpFLGlzQ29udGV4dERlZmluZWQ6bSxpc1NwZWNDb21wbGlhbnRGb3JtOmZ1bmN0aW9uIF90KFN0KXtyZXR1cm4hIShTdCYmWChTdC5hcHBlbmQpJiYiRm9ybURhdGEiPT09U3RbU3ltYm9sLnRvU3RyaW5nVGFnXSYmU3RbU3lt'@;
put 'Ym9sLml0ZXJhdG9yXSl9LHRvSlNPTk9iamVjdDpTdD0+e2NvbnN0IEJ0PW5ldyBBcnJheSgxMCksX249KG1uLEluKT0+e2lmKEoobW4pKXtpZihCdC5pbmRleE9mKG1uKT49MClyZXR1cm47aWYoISgidG9KU09OImluIG1uKSl7QnRbSW5dPW1uO2NvbnN0IGJuPU4obW4pP1tdOnt9O3JldHVy'@;
put 'biBIKG1uLCh1cix2aSk9Pntjb25zdCBGcj1fbih1cixJbisxKTshTChGcikmJihiblt2aV09RnIpfSksQnRbSW5dPXZvaWQgMCxibn19cmV0dXJuIG1ufTtyZXR1cm4gX24oU3QsMCl9LGlzQXN5bmNGbjpRZSxpc1RoZW5hYmxlOlN0PT5TdCYmKEooU3QpfHxYKFN0KSkmJlgoU3QudGhlbikm'@;
put 'JlgoU3QuY2F0Y2gpLHNldEltbWVkaWF0ZTp5dCxhc2FwOk10fTtmdW5jdGlvbiBpdChTdCxCdCxfbixtbixJbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9'@;
put 'KG5ldyBFcnJvcikuc3RhY2ssdGhpcy5tZXNzYWdlPVN0LHRoaXMubmFtZT0iQXhpb3NFcnJvciIsQnQmJih0aGlzLmNvZGU9QnQpLF9uJiYodGhpcy5jb25maWc9X24pLG1uJiYodGhpcy5yZXF1ZXN0PW1uKSxJbiYmKHRoaXMucmVzcG9uc2U9SW4sdGhpcy5zdGF0dXM9SW4uc3RhdHVzP0lu'@;
put 'LnN0YXR1czpudWxsKX1EdC5pbmhlcml0cyhpdCxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5h'@;
put 'bWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkR0LnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMuc3RhdHVzfX19KTtjb25zdCAkZT1pdC5w'@;
put 'cm90b3R5cGUsdHQ9e307ZnVuY3Rpb24gdXQoU3Qpe3JldHVybiBEdC5pc1BsYWluT2JqZWN0KFN0KXx8RHQuaXNBcnJheShTdCl9ZnVuY3Rpb24gcXQoU3Qpe3JldHVybiBEdC5lbmRzV2l0aChTdCwiW10iKT9TdC5zbGljZSgwLC0yKTpTdH1mdW5jdGlvbiBSdChTdCxCdCxfbil7cmV0dXJu'@;
put 'IFN0P1N0LmNvbmNhdChCdCkubWFwKGZ1bmN0aW9uKEluLGJuKXtyZXR1cm4gSW49cXQoSW4pLCFfbiYmYm4/IlsiK0luKyJdIjpJbn0pLmpvaW4oX24/Ii4iOiIiKTpCdH1bIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQi'@;
put 'LCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKFN0PT57dHRb'@;
put 'U3RdPXt2YWx1ZTpTdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpdCx0dCksT2JqZWN0LmRlZmluZVByb3BlcnR5KCRlLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pLGl0LmZyb209KFN0LEJ0LF9uLG1uLEluLGJuKT0+e2NvbnN0IHVyPU9iamVjdC5jcmVhdGUoJGUpO3JldHVybiBE'@;
put 'dC50b0ZsYXRPYmplY3QoU3QsdXIsZnVuY3Rpb24oRnIpe3JldHVybiBGciE9PUVycm9yLnByb3RvdHlwZX0sdmk9PiJpc0F4aW9zRXJyb3IiIT09dmkpLGl0LmNhbGwodXIsU3QubWVzc2FnZSxCdCxfbixtbixJbiksdXIuY2F1c2U9U3QsdXIubmFtZT1TdC5uYW1lLGJuJiZPYmplY3QuYXNz'@;
put 'aWduKHVyLGJuKSx1cn07Y29uc3Qgc2k9RHQudG9GbGF0T2JqZWN0KER0LHt9LG51bGwsZnVuY3Rpb24oQnQpe3JldHVybi9eaXNbQS1aXS8udGVzdChCdCl9KTtmdW5jdGlvbiBRdChTdCxCdCxfbil7aWYoIUR0LmlzT2JqZWN0KFN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVz'@;
put 'dCBiZSBhbiBvYmplY3QiKTtCdD1CdHx8bmV3IEZvcm1EYXRhO2NvbnN0IG1uPShfbj1EdC50b0ZsYXRPYmplY3QoX24se21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihfYSxqaSl7cmV0dXJuIUR0LmlzVW5kZWZpbmVkKGppW19hXSl9KSkubWV0YVRva2Vu'@;
put 'cyxJbj1fbi52aXNpdG9yfHxzbyxibj1fbi5kb3RzLHVyPV9uLmluZGV4ZXMsRnI9KF9uLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkR0LmlzU3BlY0NvbXBsaWFudEZvcm0oQnQpO2lmKCFEdC5pc0Z1bmN0aW9uKEluKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3Qg'@;
put 'YmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIG5vKHRhKXtpZihudWxsPT09dGEpcmV0dXJuIiI7aWYoRHQuaXNEYXRlKHRhKSlyZXR1cm4gdGEudG9JU09TdHJpbmcoKTtpZighRnImJkR0LmlzQmxvYih0YSkpdGhyb3cgbmV3IGl0KCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZl'@;
put 'ciBpbnN0ZWFkLiIpO3JldHVybiBEdC5pc0FycmF5QnVmZmVyKHRhKXx8RHQuaXNUeXBlZEFycmF5KHRhKT9GciYmImZ1bmN0aW9uIj09dHlwZW9mIEJsb2I/bmV3IEJsb2IoW3RhXSk6eS5mcm9tKHRhKTp0YX1mdW5jdGlvbiBzbyh0YSxfYSxqaSl7bGV0IE9jPXRhO2lmKHRhJiYhamkmJiJv'@;
put 'YmplY3QiPT10eXBlb2YgdGEpaWYoRHQuZW5kc1dpdGgoX2EsInt9IikpX2E9bW4/X2E6X2Euc2xpY2UoMCwtMiksdGE9SlNPTi5zdHJpbmdpZnkodGEpO2Vsc2UgaWYoRHQuaXNBcnJheSh0YSkmJmZ1bmN0aW9uIFB0KFN0KXtyZXR1cm4gRHQuaXNBcnJheShTdCkmJiFTdC5zb21lKHV0KX0o'@;
put 'dGEpfHwoRHQuaXNGaWxlTGlzdCh0YSl8fER0LmVuZHNXaXRoKF9hLCJbXSIpKSYmKE9jPUR0LnRvQXJyYXkodGEpKSlyZXR1cm4gX2E9cXQoX2EpLE9jLmZvckVhY2goZnVuY3Rpb24oU28sQW8peyFEdC5pc1VuZGVmaW5lZChTbykmJm51bGwhPT1TbyYmQnQuYXBwZW5kKCEwPT09dXI/UnQo'@;
put 'W19hXSxBbyxibik6bnVsbD09PXVyP19hOl9hKyJbXSIsbm8oU28pKX0pLCExO3JldHVybiEhdXQodGEpfHwoQnQuYXBwZW5kKFJ0KGppLF9hLGJuKSxubyh0YSkpLCExKX1jb25zdCBCbz1bXSwkYT1PYmplY3QuYXNzaWduKHNpLHtkZWZhdWx0VmlzaXRvcjpzbyxjb252ZXJ0VmFsdWU6bm8s'@;
put 'aXNWaXNpdGFibGU6dXR9KTtpZighRHQuaXNPYmplY3QoU3QpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gZnVuY3Rpb24gS2wodGEsX2Epe2lmKCFEdC5pc1VuZGVmaW5lZCh0YSkpe2lmKC0xIT09Qm8uaW5kZXhPZih0YSkpdGhyb3cgRXJy'@;
put 'b3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK19hLmpvaW4oIi4iKSk7Qm8ucHVzaCh0YSksRHQuZm9yRWFjaCh0YSxmdW5jdGlvbihPYyxqbCl7ITA9PT0oIShEdC5pc1VuZGVmaW5lZChPYyl8fG51bGw9PT1PYykmJkluLmNhbGwoQnQsT2MsRHQuaXNTdHJpbmcoamwpP2ps'@;
put 'LnRyaW0oKTpqbCxfYSwkYSkpJiZLbChPYyxfYT9fYS5jb25jYXQoamwpOltqbF0pfSksQm8ucG9wKCl9fShTdCksQnR9ZnVuY3Rpb24gc24oU3Qpe2NvbnN0IEJ0PXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAi'@;
put 'fTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KFN0KS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihtbil7cmV0dXJuIEJ0W21uXX0pfWZ1bmN0aW9uIFJpKFN0LEJ0KXt0aGlzLl9wYWlycz1bXSxTdCYmUXQoU3QsdGhpcyxCdCl9Y29uc3QgaG49UmkucHJvdG90eXBlO2Z1'@;
put 'bmN0aW9uIGZ0KFN0KXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KFN0KS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJd'@;
put 'Iil9ZnVuY3Rpb24gT3IoU3QsQnQsX24pe2lmKCFCdClyZXR1cm4gU3Q7Y29uc3QgbW49X24mJl9uLmVuY29kZXx8ZnQ7RHQuaXNGdW5jdGlvbihfbikmJihfbj17c2VyaWFsaXplOl9ufSk7Y29uc3QgSW49X24mJl9uLnNlcmlhbGl6ZTtsZXQgYm47aWYoYm49SW4/SW4oQnQsX24pOkR0Lmlz'@;
put 'VVJMU2VhcmNoUGFyYW1zKEJ0KT9CdC50b1N0cmluZygpOm5ldyBSaShCdCxfbikudG9TdHJpbmcobW4pLGJuKXtjb25zdCB1cj1TdC5pbmRleE9mKCIjIik7LTEhPT11ciYmKFN0PVN0LnNsaWNlKDAsdXIpKSxTdCs9KC0xPT09U3QuaW5kZXhPZigiPyIpPyI/IjoiJiIpK2JufXJldHVybiBT'@;
put 'dH1obi5hcHBlbmQ9ZnVuY3Rpb24oQnQsX24pe3RoaXMuX3BhaXJzLnB1c2goW0J0LF9uXSl9LGhuLnRvU3RyaW5nPWZ1bmN0aW9uKEJ0KXtjb25zdCBfbj1CdD9mdW5jdGlvbihtbil7cmV0dXJuIEJ0LmNhbGwodGhpcyxtbixzbil9OnNuO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rp'@;
put 'b24oSW4pe3JldHVybiBfbihJblswXSkrIj0iK19uKEluWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEF0PWNsYXNzIFd0e2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoQnQsX24sbW4pe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpCdCxyZWplY3RlZDpf'@;
put 'bixzeW5jaHJvbm91czohIW1uJiZtbi5zeW5jaHJvbm91cyxydW5XaGVuOm1uP21uLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoQnQpe3RoaXMuaGFuZGxlcnNbQnRdJiYodGhpcy5oYW5kbGVyc1tCdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYo'@;
put 'dGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChCdCl7RHQuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKG1uKXtudWxsIT09bW4mJkJ0KG1uKX0pfX0sUm49e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9LFdlPXtp'@;
put 'c0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOnR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpSaSxGb3JtRGF0YTp0eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGwsQmxvYjp0eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsfSxwcm90b2Nv'@;
put 'bHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07Y29uc3QgVHQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsbnI9Im9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvcnx8dm9pZCAwLGh0PVR0JiYoIW5yfHxbIlJlYWN0'@;
put 'TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKG5yLnByb2R1Y3QpPDApLHh0PXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmImZ1bmN0aW9uIj09dHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyxCbj1UdCYm'@;
put 'd2luZG93LmxvY2F0aW9uLmhyZWZ8fCJodHRwOi8vbG9jYWxob3N0Ijt2YXIgenQ9ey4uLk9iamVjdC5mcmVlemUoe19fcHJvdG9fXzpudWxsLGhhc0Jyb3dzZXJFbnY6VHQsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52Onh0LGhhc1N0YW5kYXJkQnJvd3NlckVudjpodCxuYXZpZ2F0'@;
put 'b3I6bnIsb3JpZ2luOkJufSksLi4uV2V9O2Z1bmN0aW9uIElpKFN0KXtmdW5jdGlvbiBCdChfbixtbixJbixibil7bGV0IHVyPV9uW2JuKytdO2lmKCJfX3Byb3RvX18iPT09dXIpcmV0dXJuITA7Y29uc3Qgdmk9TnVtYmVyLmlzRmluaXRlKCt1ciksRnI9Ym4+PV9uLmxlbmd0aDtyZXR1cm4g'@;
put 'dXI9IXVyJiZEdC5pc0FycmF5KEluKT9Jbi5sZW5ndGg6dXIsRnI/KEluW3VyXT1EdC5oYXNPd25Qcm9wKEluLHVyKT9bSW5bdXJdLG1uXTptbiwhdmkpOigoIUluW3VyXXx8IUR0LmlzT2JqZWN0KEluW3VyXSkpJiYoSW5bdXJdPVtdKSxCdChfbixtbixJblt1cl0sYm4pJiZEdC5pc0FycmF5'@;
put 'KEluW3VyXSkmJihJblt1cl09ZnVuY3Rpb24gZm4oU3Qpe2NvbnN0IEJ0PXt9LF9uPU9iamVjdC5rZXlzKFN0KTtsZXQgbW47Y29uc3QgSW49X24ubGVuZ3RoO2xldCBibjtmb3IobW49MDttbjxJbjttbisrKWJuPV9uW21uXSxCdFtibl09U3RbYm5dO3JldHVybiBCdH0oSW5bdXJdKSksIXZp'@;
put 'KX1pZihEdC5pc0Zvcm1EYXRhKFN0KSYmRHQuaXNGdW5jdGlvbihTdC5lbnRyaWVzKSl7Y29uc3QgX249e307cmV0dXJuIER0LmZvckVhY2hFbnRyeShTdCwobW4sSW4pPT57QnQoZnVuY3Rpb24gY24oU3Qpe3JldHVybiBEdC5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csU3QpLm1hcChCdD0+'@;
put 'IltdIj09PUJ0WzBdPyIiOkJ0WzFdfHxCdFswXSl9KG1uKSxJbixfbiwwKX0pLF9ufXJldHVybiBudWxsfWNvbnN0IGVuPXt0cmFuc2l0aW9uYWw6Um4sYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKEJ0LF9uKXtjb25zdCBtbj1fbi5n'@;
put 'ZXRDb250ZW50VHlwZSgpfHwiIixJbj1tbi5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsYm49RHQuaXNPYmplY3QoQnQpO2lmKGJuJiZEdC5pc0hUTUxGb3JtKEJ0KSYmKEJ0PW5ldyBGb3JtRGF0YShCdCkpLER0LmlzRm9ybURhdGEoQnQpKXJldHVybiBJbj9KU09OLnN0cmluZ2lm'@;
put 'eShJaShCdCkpOkJ0O2lmKER0LmlzQXJyYXlCdWZmZXIoQnQpfHxEdC5pc0J1ZmZlcihCdCl8fER0LmlzU3RyZWFtKEJ0KXx8RHQuaXNGaWxlKEJ0KXx8RHQuaXNCbG9iKEJ0KXx8RHQuaXNSZWFkYWJsZVN0cmVhbShCdCkpcmV0dXJuIEJ0O2lmKER0LmlzQXJyYXlCdWZmZXJWaWV3KEJ0KSly'@;
put 'ZXR1cm4gQnQuYnVmZmVyO2lmKER0LmlzVVJMU2VhcmNoUGFyYW1zKEJ0KSlyZXR1cm4gX24uc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksQnQudG9TdHJpbmcoKTtsZXQgdmk7aWYoYm4pe2lmKG1uLmluZGV4T2Yo'@;
put 'ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBmdW5jdGlvbiBoaShTdCxCdCl7cmV0dXJuIFF0KFN0LG5ldyB6dC5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKF9uLG1uLEluLGJuKXtyZXR1cm4genQu'@;
put 'aXNOb2RlJiZEdC5pc0J1ZmZlcihfbik/KHRoaXMuYXBwZW5kKG1uLF9uLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOmJuLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEJ0KSl9KEJ0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKHZpPUR0LmlzRmls'@;
put 'ZUxpc3QoQnQpKXx8bW4uaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtjb25zdCBGcj10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIFF0KHZpP3siZmlsZXNbXSI6QnR9OkJ0LEZyJiZuZXcgRnIsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBibnx8SW4/'@;
put 'KF9uLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksZnVuY3Rpb24gWHQoU3QsQnQsX24pe2lmKER0LmlzU3RyaW5nKFN0KSl0cnl7cmV0dXJuKEJ0fHxKU09OLnBhcnNlKShTdCksRHQudHJpbShTdCl9Y2F0Y2gobW4pe2lmKCJTeW50YXhFcnJvciIhPT1tbi5uYW1lKXRo'@;
put 'cm93IG1ufXJldHVybihfbnx8SlNPTi5zdHJpbmdpZnkpKFN0KX0oQnQpKTpCdH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihCdCl7Y29uc3QgX249dGhpcy50cmFuc2l0aW9uYWx8fGVuLnRyYW5zaXRpb25hbCxtbj1fbiYmX24uZm9yY2VkSlNPTlBhcnNpbmcsSW49Impzb24iPT09'@;
put 'dGhpcy5yZXNwb25zZVR5cGU7aWYoRHQuaXNSZXNwb25zZShCdCl8fER0LmlzUmVhZGFibGVTdHJlYW0oQnQpKXJldHVybiBCdDtpZihCdCYmRHQuaXNTdHJpbmcoQnQpJiYobW4mJiF0aGlzLnJlc3BvbnNlVHlwZXx8SW4pKXtjb25zdCB1cj0hKF9uJiZfbi5zaWxlbnRKU09OUGFyc2luZykm'@;
put 'JkluO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShCdCl9Y2F0Y2godmkpe2lmKHVyKXRocm93IlN5bnRheEVycm9yIj09PXZpLm5hbWU/aXQuZnJvbSh2aSxpdC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTp2aX19cmV0dXJuIEJ0fV0sdGltZW91dDowLHhzcmZDb29r'@;
put 'aWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp6dC5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6enQuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlv'@;
put 'bihCdCl7cmV0dXJuIEJ0Pj0yMDAmJkJ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O0R0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBh'@;
put 'dGNoIl0sU3Q9Pntlbi5oZWFkZXJzW1N0XT17fX0pO3ZhciBobz1lbjtjb25zdCBNaT1EdC50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1z'@;
put 'aW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxXbj1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uICRp'@;
put 'KFN0KXtyZXR1cm4gU3QmJlN0cmluZyhTdCkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZWkoU3Qpe3JldHVybiExPT09U3R8fG51bGw9PVN0P1N0OkR0LmlzQXJyYXkoU3QpP1N0Lm1hcChlaSk6U3RyaW5nKFN0KX1mdW5jdGlvbiBOaShTdCxCdCxfbixtbixJbil7aWYoRHQuaXNG'@;
put 'dW5jdGlvbihtbikpcmV0dXJuIG1uLmNhbGwodGhpcyxCdCxfbik7aWYoSW4mJihCdD1fbiksRHQuaXNTdHJpbmcoQnQpKXtpZihEdC5pc1N0cmluZyhtbikpcmV0dXJuLTEhPT1CdC5pbmRleE9mKG1uKTtpZihEdC5pc1JlZ0V4cChtbikpcmV0dXJuIG1uLnRlc3QoQnQpfX1jbGFzcyBXaXtj'@;
put 'b25zdHJ1Y3RvcihCdCl7QnQmJnRoaXMuc2V0KEJ0KX1zZXQoQnQsX24sbW4pe2NvbnN0IEluPXRoaXM7ZnVuY3Rpb24gYm4odmksRnIsbm8pe2NvbnN0IHNvPSRpKEZyKTtpZighc28pdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2Nv'@;
put 'bnN0IEJvPUR0LmZpbmRLZXkoSW4sc28pOyghQm98fHZvaWQgMD09PUluW0JvXXx8ITA9PT1ub3x8dm9pZCAwPT09bm8mJiExIT09SW5bQm9dKSYmKEluW0JvfHxGcl09ZWkodmkpKX1jb25zdCB1cj0odmksRnIpPT5EdC5mb3JFYWNoKHZpLChubyxzbyk9PmJuKG5vLHNvLEZyKSk7aWYoRHQu'@;
put 'aXNQbGFpbk9iamVjdChCdCl8fEJ0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil1cihCdCxfbik7ZWxzZSBpZihEdC5pc1N0cmluZyhCdCkmJihCdD1CdC50cmltKCkpJiYhKFN0PT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KFN0LnRyaW0oKSkpKEJ0KSl1cigo'@;
put 'U3Q9Pntjb25zdCBCdD17fTtsZXQgX24sbW4sSW47cmV0dXJuIFN0JiZTdC5zcGxpdCgiXG4iKS5mb3JFYWNoKGZ1bmN0aW9uKHVyKXtJbj11ci5pbmRleE9mKCI6IiksX249dXIuc3Vic3RyaW5nKDAsSW4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLG1uPXVyLnN1YnN0cmluZyhJbisxKS50cmlt'@;
put 'KCksISghX258fEJ0W19uXSYmTWlbX25dKSYmKCJzZXQtY29va2llIj09PV9uP0J0W19uXT9CdFtfbl0ucHVzaChtbik6QnRbX25dPVttbl06QnRbX25dPUJ0W19uXT9CdFtfbl0rIiwgIittbjptbil9KSxCdH0pKEJ0KSxfbik7ZWxzZSBpZihEdC5pc0hlYWRlcnMoQnQpKWZvcihjb25zdFt2'@;
put 'aSxGcl1vZiBCdC5lbnRyaWVzKCkpYm4oRnIsdmksbW4pO2Vsc2UgbnVsbCE9QnQmJmJuKF9uLEJ0LG1uKTtyZXR1cm4gdGhpc31nZXQoQnQsX24pe2lmKEJ0PSRpKEJ0KSl7Y29uc3QgbW49RHQuZmluZEtleSh0aGlzLEJ0KTtpZihtbil7Y29uc3QgSW49dGhpc1ttbl07aWYoIV9uKXJldHVy'@;
put 'biBJbjtpZighMD09PV9uKXJldHVybiBmdW5jdGlvbiBRcihTdCl7Y29uc3QgQnQ9T2JqZWN0LmNyZWF0ZShudWxsKSxfbj0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nO2xldCBtbjtmb3IoO21uPV9uLmV4ZWMoU3QpOylCdFttblsxXV09bW5bMl07cmV0dXJuIEJ0fShJbik7'@;
put 'aWYoRHQuaXNGdW5jdGlvbihfbikpcmV0dXJuIF9uLmNhbGwodGhpcyxJbixtbik7aWYoRHQuaXNSZWdFeHAoX24pKXJldHVybiBfbi5leGVjKEluKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKEJ0LF9uKXtpZihC'@;
put 'dD0kaShCdCkpe2NvbnN0IG1uPUR0LmZpbmRLZXkodGhpcyxCdCk7cmV0dXJuISghbW58fHZvaWQgMD09PXRoaXNbbW5dfHxfbiYmIU5pKDAsdGhpc1ttbl0sbW4sX24pKX1yZXR1cm4hMX1kZWxldGUoQnQsX24pe2NvbnN0IG1uPXRoaXM7bGV0IEluPSExO2Z1bmN0aW9uIGJuKHVyKXtpZih1'@;
put 'cj0kaSh1cikpe2NvbnN0IHZpPUR0LmZpbmRLZXkobW4sdXIpO3ZpJiYoIV9ufHxOaSgwLG1uW3ZpXSx2aSxfbikpJiYoZGVsZXRlIG1uW3ZpXSxJbj0hMCl9fXJldHVybiBEdC5pc0FycmF5KEJ0KT9CdC5mb3JFYWNoKGJuKTpibihCdCksSW59Y2xlYXIoQnQpe2NvbnN0IF9uPU9iamVjdC5r'@;
put 'ZXlzKHRoaXMpO2xldCBtbj1fbi5sZW5ndGgsSW49ITE7Zm9yKDttbi0tOyl7Y29uc3QgYm49X25bbW5dOyghQnR8fE5pKDAsdGhpc1tibl0sYm4sQnQsITApKSYmKGRlbGV0ZSB0aGlzW2JuXSxJbj0hMCl9cmV0dXJuIElufW5vcm1hbGl6ZShCdCl7Y29uc3QgX249dGhpcyxtbj17fTtyZXR1'@;
put 'cm4gRHQuZm9yRWFjaCh0aGlzLChJbixibik9Pntjb25zdCB1cj1EdC5maW5kS2V5KG1uLGJuKTtpZih1cilyZXR1cm4gX25bdXJdPWVpKEluKSx2b2lkIGRlbGV0ZSBfbltibl07Y29uc3Qgdmk9QnQ/ZnVuY3Rpb24gSW8oU3Qpe3JldHVybiBTdC50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBs'@;
put 'YWNlKC8oW2EtelxkXSkoXHcqKS9nLChCdCxfbixtbik9Pl9uLnRvVXBwZXJDYXNlKCkrbW4pfShibik6U3RyaW5nKGJuKS50cmltKCk7dmkhPT1ibiYmZGVsZXRlIF9uW2JuXSxfblt2aV09ZWkoSW4pLG1uW3ZpXT0hMH0pLHRoaXN9Y29uY2F0KC4uLkJ0KXtyZXR1cm4gdGhpcy5jb25zdHJ1'@;
put 'Y3Rvci5jb25jYXQodGhpcywuLi5CdCl9dG9KU09OKEJ0KXtjb25zdCBfbj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBEdC5mb3JFYWNoKHRoaXMsKG1uLEluKT0+e251bGwhPW1uJiYhMSE9PW1uJiYoX25bSW5dPUJ0JiZEdC5pc0FycmF5KG1uKT9tbi5qb2luKCIsICIpOm1uKX0pLF9u'@;
put 'fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtCdCxfbl0pPT5CdCsiOiAiK19uKS5qb2luKCJcbiIpfWdl'@;
put 'dFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oQnQpe3JldHVybiBCdCBpbnN0YW5jZW9mIHRoaXM/QnQ6bmV3IHRoaXMoQnQpfXN0YXRpYyBjb25jYXQoQnQsLi4uX24pe2NvbnN0IG1uPW5ldyB0aGlzKEJ0KTtyZXR1cm4gX24uZm9yRWFj'@;
put 'aChJbj0+bW4uc2V0KEluKSksbW59c3RhdGljIGFjY2Vzc29yKEJ0KXtjb25zdCBtbj0odGhpc1tXbl09dGhpc1tXbl09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxJbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBibih1cil7Y29uc3Qgdmk9JGkodXIpO21uW3ZpXXx8KGZ1bmN0aW9uIExy'@;
put 'KFN0LEJ0KXtjb25zdCBfbj1EdC50b0NhbWVsQ2FzZSgiICIrQnQpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChtbj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShTdCxtbitfbix7dmFsdWU6ZnVuY3Rpb24oSW4sYm4sdXIpe3JldHVybiB0aGlzW21uXS5jYWxsKHRoaXMsQnQsSW4sYm4s'@;
put 'dXIpfSxjb25maWd1cmFibGU6ITB9KX0pfShJbix1ciksbW5bdmldPSEwKX1yZXR1cm4gRHQuaXNBcnJheShCdCk/QnQuZm9yRWFjaChibik6Ym4oQnQpLHRoaXN9fVdpLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2Rpbmci'@;
put 'LCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKSxEdC5yZWR1Y2VEZXNjcmlwdG9ycyhXaS5wcm90b3R5cGUsKHt2YWx1ZTpTdH0sQnQpPT57bGV0IF9uPUJ0WzBdLnRvVXBwZXJDYXNlKCkrQnQuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+U3Qsc2V0KG1uKXt0aGlzW19uXT1tbn19fSks'@;
put 'RHQuZnJlZXplTWV0aG9kcyhXaSk7dmFyIGdvPVdpO2Z1bmN0aW9uIFFuKFN0LEJ0KXtjb25zdCBfbj10aGlzfHxobyxtbj1CdHx8X24sSW49Z28uZnJvbShtbi5oZWFkZXJzKTtsZXQgYm49bW4uZGF0YTtyZXR1cm4gRHQuZm9yRWFjaChTdCxmdW5jdGlvbih2aSl7Ym49dmkuY2FsbChfbixi'@;
put 'bixJbi5ub3JtYWxpemUoKSxCdD9CdC5zdGF0dXM6dm9pZCAwKX0pLEluLm5vcm1hbGl6ZSgpLGJufWZ1bmN0aW9uIGNvKFN0KXtyZXR1cm4hKCFTdHx8IVN0Ll9fQ0FOQ0VMX18pfWZ1bmN0aW9uIF9vKFN0LEJ0LF9uKXtpdC5jYWxsKHRoaXMsU3Q/PyJjYW5jZWxlZCIsaXQuRVJSX0NBTkNF'@;
put 'TEVELEJ0LF9uKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWZ1bmN0aW9uIE9vKFN0LEJ0LF9uKXtjb25zdCBtbj1fbi5jb25maWcudmFsaWRhdGVTdGF0dXM7X24uc3RhdHVzJiZtbiYmIW1uKF9uLnN0YXR1cyk/QnQobmV3IGl0KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2Rl'@;
put 'ICIrX24uc3RhdHVzLFtpdC5FUlJfQkFEX1JFUVVFU1QsaXQuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihfbi5zdGF0dXMvMTAwKS00XSxfbi5jb25maWcsX24ucmVxdWVzdCxfbikpOlN0KF9uKX1EdC5pbmhlcml0cyhfbyxpdCx7X19DQU5DRUxfXzohMH0pO2NvbnN0IE5zPShTdCxC'@;
put 'dCxfbj0zKT0+e2xldCBtbj0wO2NvbnN0IEluPWZ1bmN0aW9uIHRpKFN0LEJ0KXtTdD1TdHx8MTA7Y29uc3QgX249bmV3IEFycmF5KFN0KSxtbj1uZXcgQXJyYXkoU3QpO2xldCB1cixJbj0wLGJuPTA7cmV0dXJuIEJ0PXZvaWQgMCE9PUJ0P0J0OjFlMyxmdW5jdGlvbihGcil7Y29uc3Qgbm89'@;
put 'RGF0ZS5ub3coKSxzbz1tbltibl07dXJ8fCh1cj1ubyksX25bSW5dPUZyLG1uW0luXT1ubztsZXQgQm89Ym4sJGE9MDtmb3IoO0JvIT09SW47KSRhKz1fbltCbysrXSxCbyU9U3Q7aWYoSW49KEluKzEpJVN0LEluPT09Ym4mJihibj0oYm4rMSklU3QpLG5vLXVyPEJ0KXJldHVybjtjb25zdCBL'@;
put 'bD1zbyYmbm8tc287cmV0dXJuIEtsP01hdGgucm91bmQoMWUzKiRhL0tsKTp2b2lkIDB9fSg1MCwyNTApO3JldHVybiBmdW5jdGlvbiBnYShTdCxCdCl7bGV0IEluLGJuLF9uPTAsbW49MWUzL0J0O2NvbnN0IHVyPShubyxzbz1EYXRlLm5vdygpKT0+e19uPXNvLEluPW51bGwsYm4mJihjbGVh'@;
put 'clRpbWVvdXQoYm4pLGJuPW51bGwpLFN0LmFwcGx5KG51bGwsbm8pfTtyZXR1cm5bKC4uLm5vKT0+e2NvbnN0IHNvPURhdGUubm93KCksQm89c28tX247Qm8+PW1uP3VyKG5vLHNvKTooSW49bm8sYm58fChibj1zZXRUaW1lb3V0KCgpPT57Ym49bnVsbCx1cihJbil9LG1uLUJvKSkpfSwoKT0+'@;
put 'SW4mJnVyKEluKV19KGJuPT57Y29uc3QgdXI9Ym4ubG9hZGVkLHZpPWJuLmxlbmd0aENvbXB1dGFibGU/Ym4udG90YWw6dm9pZCAwLEZyPXVyLW1uLG5vPUluKEZyKTttbj11cixTdCh7bG9hZGVkOnVyLHRvdGFsOnZpLHByb2dyZXNzOnZpP3VyL3ZpOnZvaWQgMCxieXRlczpGcixyYXRlOm5v'@;
put 'fHx2b2lkIDAsZXN0aW1hdGVkOm5vJiZ2aSYmdXI8PXZpPyh2aS11cikvbm86dm9pZCAwLGV2ZW50OmJuLGxlbmd0aENvbXB1dGFibGU6bnVsbCE9dmksW0J0PyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfSl9LF9uKX0sYmw9KFN0LEJ0KT0+e2NvbnN0IF9uPW51bGwhPVN0O3JldHVyblttbj0+'@;
put 'QnRbMF0oe2xlbmd0aENvbXB1dGFibGU6X24sdG90YWw6U3QsbG9hZGVkOm1ufSksQnRbMV1dfSxmdT1TdD0+KC4uLkJ0KT0+RHQuYXNhcCgoKT0+U3QoLi4uQnQpKTt2YXIgUmM9enQuaGFzU3RhbmRhcmRCcm93c2VyRW52PygoU3QsQnQpPT5fbj0+KF9uPW5ldyBVUkwoX24senQub3JpZ2lu'@;
put 'KSxTdC5wcm90b2NvbD09PV9uLnByb3RvY29sJiZTdC5ob3N0PT09X24uaG9zdCYmKEJ0fHxTdC5wb3J0PT09X24ucG9ydCkpKShuZXcgVVJMKHp0Lm9yaWdpbiksenQubmF2aWdhdG9yJiYvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHp0Lm5hdmlnYXRvci51c2VyQWdlbnQpKTooKT0+ITAsazA9'@;
put 'enQuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShTdCxCdCxfbixtbixJbixibil7Y29uc3QgdXI9W1N0KyI9IitlbmNvZGVVUklDb21wb25lbnQoQnQpXTtEdC5pc051bWJlcihfbikmJnVyLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShfbikudG9HTVRTdHJpbmcoKSksRHQuaXNTdHJp'@;
put 'bmcobW4pJiZ1ci5wdXNoKCJwYXRoPSIrbW4pLER0LmlzU3RyaW5nKEluKSYmdXIucHVzaCgiZG9tYWluPSIrSW4pLCEwPT09Ym4mJnVyLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT11ci5qb2luKCI7ICIpfSxyZWFkKFN0KXtjb25zdCBCdD1kb2N1bWVudC5jb29raWUubWF0Y2go'@;
put 'bmV3IFJlZ0V4cCgiKF58O1xccyopKCIrU3QrIik9KFteO10qKSIpKTtyZXR1cm4gQnQ/ZGVjb2RlVVJJQ29tcG9uZW50KEJ0WzNdKTpudWxsfSxyZW1vdmUoU3Qpe3RoaXMud3JpdGUoU3QsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQ6KCk9Pm51bGwscmVtb3ZlKCl7'@;
put 'fX07ZnVuY3Rpb24gbGkoU3QsQnQsX24pe2xldCBtbj0hZnVuY3Rpb24gaXIoU3Qpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoU3QpfShCdCk7cmV0dXJuIFN0JiZtbnx8MD09X24/ZnVuY3Rpb24gRW8oU3QsQnQpe3JldHVybiBCdD9TdC5yZXBsYWNlKC9cLz9c'@;
put 'LyQvLCIiKSsiLyIrQnQucmVwbGFjZSgvXlwvKy8sIiIpOlN0fShTdCxCdCk6QnR9Y29uc3QgVnQ9U3Q9PlN0IGluc3RhbmNlb2YgZ28/ey4uLlN0fTpTdDtmdW5jdGlvbiBKcihTdCxCdCl7QnQ9QnR8fHt9O2NvbnN0IF9uPXt9O2Z1bmN0aW9uIG1uKG5vLHNvLEJvLCRhKXtyZXR1cm4gRHQu'@;
put 'aXNQbGFpbk9iamVjdChubykmJkR0LmlzUGxhaW5PYmplY3Qoc28pP0R0Lm1lcmdlLmNhbGwoe2Nhc2VsZXNzOiRhfSxubyxzbyk6RHQuaXNQbGFpbk9iamVjdChzbyk/RHQubWVyZ2Uoe30sc28pOkR0LmlzQXJyYXkoc28pP3NvLnNsaWNlKCk6c299ZnVuY3Rpb24gSW4obm8sc28sQm8sJGEp'@;
put 'e3JldHVybiBEdC5pc1VuZGVmaW5lZChzbyk/RHQuaXNVbmRlZmluZWQobm8pP3ZvaWQgMDptbih2b2lkIDAsbm8sMCwkYSk6bW4obm8sc28sMCwkYSl9ZnVuY3Rpb24gYm4obm8sc28pe2lmKCFEdC5pc1VuZGVmaW5lZChzbykpcmV0dXJuIG1uKHZvaWQgMCxzbyl9ZnVuY3Rpb24gdXIobm8s'@;
put 'c28pe3JldHVybiBEdC5pc1VuZGVmaW5lZChzbyk/RHQuaXNVbmRlZmluZWQobm8pP3ZvaWQgMDptbih2b2lkIDAsbm8pOm1uKHZvaWQgMCxzbyl9ZnVuY3Rpb24gdmkobm8sc28sQm8pe3JldHVybiBCbyBpbiBCdD9tbihubyxzbyk6Qm8gaW4gU3Q/bW4odm9pZCAwLG5vKTp2b2lkIDB9Y29u'@;
put 'c3QgRnI9e3VybDpibixtZXRob2Q6Ym4sZGF0YTpibixiYXNlVVJMOnVyLHRyYW5zZm9ybVJlcXVlc3Q6dXIsdHJhbnNmb3JtUmVzcG9uc2U6dXIscGFyYW1zU2VyaWFsaXplcjp1cix0aW1lb3V0OnVyLHRpbWVvdXRNZXNzYWdlOnVyLHdpdGhDcmVkZW50aWFsczp1cix3aXRoWFNSRlRva2Vu'@;
put 'OnVyLGFkYXB0ZXI6dXIscmVzcG9uc2VUeXBlOnVyLHhzcmZDb29raWVOYW1lOnVyLHhzcmZIZWFkZXJOYW1lOnVyLG9uVXBsb2FkUHJvZ3Jlc3M6dXIsb25Eb3dubG9hZFByb2dyZXNzOnVyLGRlY29tcHJlc3M6dXIsbWF4Q29udGVudExlbmd0aDp1cixtYXhCb2R5TGVuZ3RoOnVyLGJlZm9y'@;
put 'ZVJlZGlyZWN0OnVyLHRyYW5zcG9ydDp1cixodHRwQWdlbnQ6dXIsaHR0cHNBZ2VudDp1cixjYW5jZWxUb2tlbjp1cixzb2NrZXRQYXRoOnVyLHJlc3BvbnNlRW5jb2Rpbmc6dXIsdmFsaWRhdGVTdGF0dXM6dmksaGVhZGVyczoobm8sc28sQm8pPT5JbihWdChubyksVnQoc28pLDAsITApfTty'@;
put 'ZXR1cm4gRHQuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LFN0LEJ0KSksZnVuY3Rpb24oc28pe2NvbnN0IEJvPUZyW3NvXXx8SW4sJGE9Qm8oU3Rbc29dLEJ0W3NvXSxzbyk7RHQuaXNVbmRlZmluZWQoJGEpJiZCbyE9PXZpfHwoX25bc29dPSRhKX0pLF9ufXZhciB2MD1T'@;
put 'dD0+e2NvbnN0IEJ0PUpyKHt9LFN0KTtsZXQgRnIse2RhdGE6X24sd2l0aFhTUkZUb2tlbjptbix4c3JmSGVhZGVyTmFtZTpJbix4c3JmQ29va2llTmFtZTpibixoZWFkZXJzOnVyLGF1dGg6dml9PUJ0O2lmKEJ0LmhlYWRlcnM9dXI9Z28uZnJvbSh1ciksQnQudXJsPU9yKGxpKEJ0LmJhc2VV'@;
put 'UkwsQnQudXJsKSxTdC5wYXJhbXMsU3QucGFyYW1zU2VyaWFsaXplciksdmkmJnVyLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgodmkudXNlcm5hbWV8fCIiKSsiOiIrKHZpLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudCh2aS5wYXNzd29yZCkpOiIiKSkp'@;
put 'LER0LmlzRm9ybURhdGEoX24pKWlmKHp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8enQuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXVyLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZighMSE9PShGcj11ci5nZXRDb250ZW50VHlwZSgpKSl7Y29uc3Rbbm8sLi4uc29dPUZy'@;
put 'P0ZyLnNwbGl0KCI7IikubWFwKEJvPT5Cby50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTt1ci5zZXRDb250ZW50VHlwZShbbm98fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5zb10uam9pbigiOyAiKSl9aWYoenQuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobW4mJkR0LmlzRnVuY3Rpb24o'@;
put 'bW4pJiYobW49bW4oQnQpKSxtbnx8ITEhPT1tbiYmUmMoQnQudXJsKSkpe2NvbnN0IG5vPUluJiZibiYmazAucmVhZChibik7bm8mJnVyLnNldChJbixubyl9cmV0dXJuIEJ0fSxJdT10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiJiZmdW5jdGlvbihTdCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1'@;
put 'bmN0aW9uKF9uLG1uKXtjb25zdCBJbj12MChTdCk7bGV0IGJuPUluLmRhdGE7Y29uc3QgdXI9Z28uZnJvbShJbi5oZWFkZXJzKS5ub3JtYWxpemUoKTtsZXQgc28sQm8sJGEsS2wsdGEse3Jlc3BvbnNlVHlwZTp2aSxvblVwbG9hZFByb2dyZXNzOkZyLG9uRG93bmxvYWRQcm9ncmVzczpub309'@;
put 'SW47ZnVuY3Rpb24gX2EoKXtLbCYmS2woKSx0YSYmdGEoKSxJbi5jYW5jZWxUb2tlbiYmSW4uY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoc28pLEluLnNpZ25hbCYmSW4uc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iixzbyl9bGV0IGppPW5ldyBYTUxIdHRwUmVxdWVzdDtmdW5j'@;
put 'dGlvbiBPYygpe2lmKCFqaSlyZXR1cm47Y29uc3QgU289Z28uZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGppJiZqaS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7T28oZnVuY3Rpb24oJDApe19uKCQwKSxfYSgpfSxmdW5jdGlvbigkMCl7bW4oJDApLF9hKCl9LHtkYXRhOnZpJiYi'@;
put 'dGV4dCIhPT12aSYmImpzb24iIT09dmk/amkucmVzcG9uc2U6amkucmVzcG9uc2VUZXh0LHN0YXR1czpqaS5zdGF0dXMsc3RhdHVzVGV4dDpqaS5zdGF0dXNUZXh0LGhlYWRlcnM6U28sY29uZmlnOlN0LHJlcXVlc3Q6aml9KSxqaT1udWxsfWppLm9wZW4oSW4ubWV0aG9kLnRvVXBwZXJDYXNl'@;
put 'KCksSW4udXJsLCEwKSxqaS50aW1lb3V0PUluLnRpbWVvdXQsIm9ubG9hZGVuZCJpbiBqaT9qaS5vbmxvYWRlbmQ9T2M6amkub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWppfHw0IT09amkucmVhZHlTdGF0ZXx8MD09PWppLnN0YXR1cyYmKCFqaS5yZXNwb25zZVVSTHx8MCE9PWpp'@;
put 'LnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6IikpfHxzZXRUaW1lb3V0KE9jKX0samkub25hYm9ydD1mdW5jdGlvbigpe2ppJiYobW4obmV3IGl0KCJSZXF1ZXN0IGFib3J0ZWQiLGl0LkVDT05OQUJPUlRFRCxTdCxqaSkpLGppPW51bGwpfSxqaS5vbmVycm9yPWZ1bmN0aW9uKCl7bW4obmV3'@;
put 'IGl0KCJOZXR3b3JrIEVycm9yIixpdC5FUlJfTkVUV09SSyxTdCxqaSkpLGppPW51bGx9LGppLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBBbz1Jbi50aW1lb3V0PyJ0aW1lb3V0IG9mICIrSW4udGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIjtJbi50aW1lb3V0RXJy'@;
put 'b3JNZXNzYWdlJiYoQW89SW4udGltZW91dEVycm9yTWVzc2FnZSksbW4obmV3IGl0KEFvLChJbi50cmFuc2l0aW9uYWx8fFJuKS5jbGFyaWZ5VGltZW91dEVycm9yP2l0LkVUSU1FRE9VVDppdC5FQ09OTkFCT1JURUQsU3QsamkpKSxqaT1udWxsfSx2b2lkIDA9PT1ibiYmdXIuc2V0Q29udGVu'@;
put 'dFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gamkmJkR0LmZvckVhY2godXIudG9KU09OKCksZnVuY3Rpb24oQW8sWGgpe2ppLnNldFJlcXVlc3RIZWFkZXIoWGgsQW8pfSksRHQuaXNVbmRlZmluZWQoSW4ud2l0aENyZWRlbnRpYWxzKXx8KGppLndpdGhDcmVkZW50aWFscz0hIUlu'@;
put 'LndpdGhDcmVkZW50aWFscyksdmkmJiJqc29uIiE9PXZpJiYoamkucmVzcG9uc2VUeXBlPUluLnJlc3BvbnNlVHlwZSksbm8mJihbJGEsdGFdPU5zKG5vLCEwKSxqaS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsJGEpKSxGciYmamkudXBsb2FkJiYoW0JvLEtsXT1OcyhGciksamkudXBs'@;
put 'b2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixCbyksamkudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLEtsKSksKEluLmNhbmNlbFRva2VufHxJbi5zaWduYWwpJiYoc289U289PntqaSYmKG1uKCFTb3x8U28udHlwZT9uZXcgX28obnVsbCxTdCxqaSk6U28pLGppLmFi'@;
put 'b3J0KCksamk9bnVsbCl9LEluLmNhbmNlbFRva2VuJiZJbi5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoc28pLEluLnNpZ25hbCYmKEluLnNpZ25hbC5hYm9ydGVkP3NvKCk6SW4uc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixzbykpKTtjb25zdCBqbD1mdW5jdGlvbiBIbyhTdCl7Y29u'@;
put 'c3QgQnQ9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoU3QpO3JldHVybiBCdCYmQnRbMV18fCIifShJbi51cmwpO2psJiYtMT09PXp0LnByb3RvY29scy5pbmRleE9mKGpsKT9tbihuZXcgaXQoIlVuc3VwcG9ydGVkIHByb3RvY29sICIramwrIjoiLGl0LkVSUl9CQURfUkVRVUVT'@;
put 'VCxTdCkpOmppLnNlbmQoYm58fG51bGwpfSl9LHNkPShTdCxCdCk9Pntjb25zdHtsZW5ndGg6X259PVN0PVN0P1N0LmZpbHRlcihCb29sZWFuKTpbXTtpZihCdHx8X24pe2xldCBJbixtbj1uZXcgQWJvcnRDb250cm9sbGVyO2NvbnN0IGJuPWZ1bmN0aW9uKG5vKXtpZighSW4pe0luPSEwLHZp'@;
put 'KCk7Y29uc3Qgc289bm8gaW5zdGFuY2VvZiBFcnJvcj9ubzp0aGlzLnJlYXNvbjttbi5hYm9ydChzbyBpbnN0YW5jZW9mIGl0P3NvOm5ldyBfbyhzbyBpbnN0YW5jZW9mIEVycm9yP3NvLm1lc3NhZ2U6c28pKX19O2xldCB1cj1CdCYmc2V0VGltZW91dCgoKT0+e3VyPW51bGwsYm4obmV3IGl0'@;
put 'KGB0aW1lb3V0ICR7QnR9IG9mIG1zIGV4Y2VlZGVkYCxpdC5FVElNRURPVVQpKX0sQnQpO2NvbnN0IHZpPSgpPT57U3QmJih1ciYmY2xlYXJUaW1lb3V0KHVyKSx1cj1udWxsLFN0LmZvckVhY2gobm89Pntuby51bnN1YnNjcmliZT9uby51bnN1YnNjcmliZShibik6bm8ucmVtb3ZlRXZlbnRM'@;
put 'aXN0ZW5lcigiYWJvcnQiLGJuKX0pLFN0PW51bGwpfTtTdC5mb3JFYWNoKG5vPT5uby5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYm4pKTtjb25zdHtzaWduYWw6RnJ9PW1uO3JldHVybiBGci51bnN1YnNjcmliZT0oKT0+RHQuYXNhcCh2aSksRnJ9fTtjb25zdCBZaD1mdW5jdGlvbiooU3Qs'@;
put 'QnQpe2xldCBfbj1TdC5ieXRlTGVuZ3RoO2lmKCFCdHx8X248QnQpcmV0dXJuIHZvaWQoeWllbGQgU3QpO2xldCBJbixtbj0wO2Zvcig7bW48X247KUluPW1uK0J0LHlpZWxkIFN0LnNsaWNlKG1uLEluKSxtbj1Jbn0sYWY9ZnVuY3Rpb24oKXt2YXIgU3Q9X3dyYXBBc3luY0dlbmVyYXRvcihm'@;
put 'dW5jdGlvbiooQnQsX24pe3ZhciBibixtbj0hMSxJbj0hMTt0cnl7Zm9yKHZhciB2aSx1cj1fYXN5bmNJdGVyYXRvcihrcyhCdCkpO21uPSEodmk9eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IodXIubmV4dCgpKSkuZG9uZTttbj0hMSl7Y29uc3QgRnI9dmkudmFsdWU7eWllbGQqX2FzeW5j'@;
put 'R2VuZXJhdG9yRGVsZWdhdGUoX2FzeW5jSXRlcmF0b3IoWWgoRnIsX24pKSxfYXdhaXRBc3luY0dlbmVyYXRvcil9fWNhdGNoKEZyKXtJbj0hMCxibj1Gcn1maW5hbGx5e3RyeXttbiYmbnVsbCE9dXIucmV0dXJuJiYoeWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IodXIucmV0dXJuKCkpKX1m'@;
put 'aW5hbGx5e2lmKEluKXRocm93IGJufX19KTtyZXR1cm4gZnVuY3Rpb24oX24sbW4pe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGtzPWZ1bmN0aW9uKCl7dmFyIFN0PV93cmFwQXN5bmNHZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtpZihCdFtTeW1ib2wuYXN5bmNJdGVyYXRv'@;
put 'cl0pcmV0dXJuIHZvaWQoeWllbGQqX2FzeW5jR2VuZXJhdG9yRGVsZWdhdGUoX2FzeW5jSXRlcmF0b3IoQnQpLF9hd2FpdEFzeW5jR2VuZXJhdG9yKSk7Y29uc3QgX249QnQuZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7Y29uc3R7ZG9uZTptbix2YWx1ZTpJbn09eWllbGQgX2F3YWl0QXN5bmNH'@;
put 'ZW5lcmF0b3IoX24ucmVhZCgpKTtpZihtbilicmVhazt5aWVsZCBJbn19ZmluYWxseXt5aWVsZCBfYXdhaXRBc3luY0dlbmVyYXRvcihfbi5jYW5jZWwoKSl9fSk7cmV0dXJuIGZ1bmN0aW9uKF9uKXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxZaT0oU3QsQnQsX24sbW4p'@;
put 'PT57Y29uc3QgSW49YWYoU3QsQnQpO2xldCB1cixibj0wLHZpPUZyPT57dXJ8fCh1cj0hMCxtbiYmbW4oRnIpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7cHVsbDpGcj0+X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKCl7dHJ5e2NvbnN0e2RvbmU6bm8sdmFsdWU6c299PXlpZWxk'@;
put 'IEluLm5leHQoKTtpZihubylyZXR1cm4gdmkoKSx2b2lkIEZyLmNsb3NlKCk7aWYoX24pe2xldCAkYT1ibis9c28uYnl0ZUxlbmd0aDtfbigkYSl9RnIuZW5xdWV1ZShuZXcgVWludDhBcnJheShzbykpfWNhdGNoKG5vKXt0aHJvdyB2aShubyksbm99fSkoKSxjYW5jZWw6RnI9Pih2aShGciks'@;
put 'SW4ucmV0dXJuKCkpfSx7aGlnaFdhdGVyTWFyazoyfSl9LHlsPSJmdW5jdGlvbiI9PXR5cGVvZiBmZXRjaCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlcXVlc3QmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZXNwb25zZSxKYz15bCYmImZ1bmN0aW9uIj09dHlwZW9mIFJlYWRhYmxlU3RyZWFtLHQ1PXls'@;
put 'JiYoImZ1bmN0aW9uIj09dHlwZW9mIFRleHRFbmNvZGVyPyhTdD0+QnQ9PlN0LmVuY29kZShCdCkpKG5ldyBUZXh0RW5jb2Rlcik6ZnVuY3Rpb24oKXt2YXIgU3Q9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoeWllbGQgbmV3IFJlc3BvbnNl'@;
put 'KEJ0KS5hcnJheUJ1ZmZlcigpKX0pO3JldHVybiBmdW5jdGlvbihCdCl7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLGIwPShTdCwuLi5CdCk9Pnt0cnl7cmV0dXJuISFTdCguLi5CdCl9Y2F0Y2h7cmV0dXJuITF9fSxuNT1KYyYmYjAoKCk9PntsZXQgU3Q9ITE7Y29uc3Qg'@;
put 'QnQ9bmV3IFJlcXVlc3QoenQub3JpZ2luLHtib2R5Om5ldyBSZWFkYWJsZVN0cmVhbSxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gU3Q9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKTtyZXR1cm4gU3QmJiFCdH0pLHNmPUpjJiZiMCgoKT0+RHQuaXNS'@;
put 'ZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxsZD17c3RyZWFtOnNmJiYoU3Q9PlN0LmJvZHkpfTt5bCYmKFN0PT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKEJ0PT57IWxkW0J0XSYmKGxkW0J0XT1EdC5pc0Z1'@;
put 'bmN0aW9uKFN0W0J0XSk/X249Pl9uW0J0XSgpOihfbixtbik9Pnt0aHJvdyBuZXcgaXQoYFJlc3BvbnNlIHR5cGUgJyR7QnR9JyBpcyBub3Qgc3VwcG9ydGVkYCxpdC5FUlJfTk9UX1NVUFBPUlQsbW4pfSl9KX0pKG5ldyBSZXNwb25zZSk7Y29uc3QgbGY9ZnVuY3Rpb24oKXt2YXIgU3Q9X2Fz'@;
put 'eW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0KXtyZXR1cm4gbnVsbD09QnQ/MDpEdC5pc0Jsb2IoQnQpP0J0LnNpemU6RHQuaXNTcGVjQ29tcGxpYW50Rm9ybShCdCk/KHlpZWxkIG5ldyBSZXF1ZXN0KHp0Lm9yaWdpbix7bWV0aG9kOiJQT1NUIixib2R5OkJ0fSkuYXJyYXlCdWZmZXIoKSku'@;
put 'Ynl0ZUxlbmd0aDpEdC5pc0FycmF5QnVmZmVyVmlldyhCdCl8fER0LmlzQXJyYXlCdWZmZXIoQnQpP0J0LmJ5dGVMZW5ndGg6KER0LmlzVVJMU2VhcmNoUGFyYW1zKEJ0KSYmKEJ0Kz0iIiksRHQuaXNTdHJpbmcoQnQpPyh5aWVsZCB0NShCdCkpLmJ5dGVMZW5ndGg6dm9pZCAwKX0pO3JldHVy'@;
put 'biBmdW5jdGlvbihfbil7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksazE9ZnVuY3Rpb24oKXt2YXIgU3Q9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKEJ0LF9uKXtyZXR1cm4gRHQudG9GaW5pdGVOdW1iZXIoQnQuZ2V0Q29udGVudExlbmd0aCgpKT8/bGYoX24pfSk7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKF9uLG1uKXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTt2YXIgY2Y9eWwmJmZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihCdCl7bGV0e3VybDpfbixtZXRob2Q6bW4sZGF0YTpJbixzaWduYWw6Ym4sY2FuY2Vs'@;
put 'VG9rZW46dXIsdGltZW91dDp2aSxvbkRvd25sb2FkUHJvZ3Jlc3M6RnIsb25VcGxvYWRQcm9ncmVzczpubyxyZXNwb25zZVR5cGU6c28saGVhZGVyczpCbyx3aXRoQ3JlZGVudGlhbHM6JGE9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6S2x9PXYwKEJ0KTtzbz1zbz8oc28rIiIpLnRvTG93'@;
put 'ZXJDYXNlKCk6InRleHQiO2xldCBfYSx0YT1zZChbYm4sdXImJnVyLnRvQWJvcnRTaWduYWwoKV0sdmkpO2NvbnN0IGppPXRhJiZ0YS51bnN1YnNjcmliZSYmKCgpPT57dGEudW5zdWJzY3JpYmUoKX0pO2xldCBPYzt0cnl7aWYobm8mJm41JiYiZ2V0IiE9PW1uJiYiaGVhZCIhPT1tbiYmMCE9'@;
put 'PShPYz15aWVsZCBrMShCbyxJbikpKXtsZXQgJDAsRzA9bmV3IFJlcXVlc3QoX24se21ldGhvZDoiUE9TVCIsYm9keTpJbixkdXBsZXg6ImhhbGYifSk7aWYoRHQuaXNGb3JtRGF0YShJbikmJigkMD1HMC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZCby5zZXRDb250ZW50VHlwZSgk'@;
put 'MCksRzAuYm9keSl7Y29uc3RbTmEscWldPWJsKE9jLE5zKGZ1KG5vKSkpO0luPVlpKEcwLmJvZHksNjU1MzYsTmEscWkpfX1EdC5pc1N0cmluZygkYSl8fCgkYT0kYT8iaW5jbHVkZSI6Im9taXQiKTtjb25zdCBqbD0iY3JlZGVudGlhbHMiaW4gUmVxdWVzdC5wcm90b3R5cGU7X2E9bmV3IFJl'@;
put 'cXVlc3QoX24sey4uLktsLHNpZ25hbDp0YSxtZXRob2Q6bW4udG9VcHBlckNhc2UoKSxoZWFkZXJzOkJvLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6SW4sZHVwbGV4OiJoYWxmIixjcmVkZW50aWFsczpqbD8kYTp2b2lkIDB9KTtsZXQgU289eWllbGQgZmV0Y2goX2EpO2NvbnN0IEFvPXNm'@;
put 'JiYoInN0cmVhbSI9PT1zb3x8InJlc3BvbnNlIj09PXNvKTtpZihzZiYmKEZyfHxBbyYmamkpKXtjb25zdCBHMD17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChTcz0+e0cwW1NzXT1Tb1tTc119KTtjb25zdCAkMD1EdC50b0Zpbml0ZU51bWJlcihTby5oZWFk'@;
put 'ZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW05hLHFpXT1GciYmYmwoJDAsTnMoZnUoRnIpLCEwKSl8fFtdO1NvPW5ldyBSZXNwb25zZShZaShTby5ib2R5LDY1NTM2LE5hLCgpPT57cWkmJnFpKCksamkmJmppKCl9KSxHMCl9c289c298fCJ0ZXh0IjtsZXQgWGg9eWllbGQgbGRbRHQuZmlu'@;
put 'ZEtleShsZCxzbyl8fCJ0ZXh0Il0oU28sQnQpO3JldHVybiFBbyYmamkmJmppKCkseWllbGQgbmV3IFByb21pc2UoKEcwLCQwKT0+e09vKEcwLCQwLHtkYXRhOlhoLGhlYWRlcnM6Z28uZnJvbShTby5oZWFkZXJzKSxzdGF0dXM6U28uc3RhdHVzLHN0YXR1c1RleHQ6U28uc3RhdHVzVGV4dCxj'@;
put 'b25maWc6QnQscmVxdWVzdDpfYX0pfSl9Y2F0Y2goamwpe3Rocm93IGppJiZqaSgpLGpsJiYiVHlwZUVycm9yIj09PWpsLm5hbWUmJi9mZXRjaC9pLnRlc3QoamwubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgaXQoIk5ldHdvcmsgRXJyb3IiLGl0LkVSUl9ORVRXT1JLLEJ0LF9hKSx7Y2F1'@;
put 'c2U6amwuY2F1c2V8fGpsfSk6aXQuZnJvbShqbCxqbCYmamwuY29kZSxCdCxfYSl9fSk7cmV0dXJuIGZ1bmN0aW9uKEJ0KXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKTtjb25zdCB0aD17aHR0cDpudWxsLHhocjpJdSxmZXRjaDpjZn07RHQuZm9yRWFjaCh0aCwoU3QsQnQp'@;
put 'PT57aWYoU3Qpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsIm5hbWUiLHt2YWx1ZTpCdH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoU3QsImFkYXB0ZXJOYW1lIix7dmFsdWU6QnR9KX19KTtjb25zdCB1Zj1TdD0+YC0gJHtTdH1gLEdoPVN0PT5EdC5pc0Z1bmN0aW9uKFN0'@;
put 'KXx8bnVsbD09PVN0fHwhMT09PVN0O3ZhciBMY19nZXRBZGFwdGVyPVN0PT57U3Q9RHQuaXNBcnJheShTdCk/U3Q6W1N0XTtjb25zdHtsZW5ndGg6QnR9PVN0O2xldCBfbixtbjtjb25zdCBJbj17fTtmb3IobGV0IGJuPTA7Ym48QnQ7Ym4rKyl7bGV0IHVyO2lmKF9uPVN0W2JuXSxtbj1fbiwh'@;
put 'R2goX24pJiYobW49dGhbKHVyPVN0cmluZyhfbikpLnRvTG93ZXJDYXNlKCldLHZvaWQgMD09PW1uKSl0aHJvdyBuZXcgaXQoYFVua25vd24gYWRhcHRlciAnJHt1cn0nYCk7aWYobW4pYnJlYWs7SW5bdXJ8fCIjIitibl09bW59aWYoIW1uKXtjb25zdCBibj1PYmplY3QuZW50cmllcyhJbiku'@;
put 'bWFwKChbdmksRnJdKT0+YGFkYXB0ZXIgJHt2aX0gYCsoITE9PT1Gcj8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKTt0aHJvdyBuZXcgaXQoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0'@;
put 'Y2ggdGhlIHJlcXVlc3QgIisoQnQ/Ym4ubGVuZ3RoPjE/InNpbmNlIDpcbiIrYm4ubWFwKHVmKS5qb2luKCJcbiIpOiIgIit1ZihiblswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIiksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBtbn07ZnVuY3Rpb24gVm8oU3Qpe2lmKFN0LmNhbmNl'@;
put 'bFRva2VuJiZTdC5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksU3Quc2lnbmFsJiZTdC5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgX28obnVsbCxTdCl9ZnVuY3Rpb24gRDMoU3Qpe3JldHVybiBWbyhTdCksU3QuaGVhZGVycz1nby5mcm9tKFN0LmhlYWRlcnMpLFN0LmRhdGE9UW4u'@;
put 'Y2FsbChTdCxTdC50cmFuc2Zvcm1SZXF1ZXN0KSwtMSE9PVsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihTdC5tZXRob2QpJiZTdC5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxMY19nZXRBZGFwdGVyKFN0LmFkYXB0'@;
put 'ZXJ8fGhvLmFkYXB0ZXIpKFN0KS50aGVuKGZ1bmN0aW9uKG1uKXtyZXR1cm4gVm8oU3QpLG1uLmRhdGE9UW4uY2FsbChTdCxTdC50cmFuc2Zvcm1SZXNwb25zZSxtbiksbW4uaGVhZGVycz1nby5mcm9tKG1uLmhlYWRlcnMpLG1ufSxmdW5jdGlvbihtbil7cmV0dXJuIGNvKG1uKXx8KFZvKFN0'@;
put 'KSxtbiYmbW4ucmVzcG9uc2UmJihtbi5yZXNwb25zZS5kYXRhPVFuLmNhbGwoU3QsU3QudHJhbnNmb3JtUmVzcG9uc2UsbW4ucmVzcG9uc2UpLG1uLnJlc3BvbnNlLmhlYWRlcnM9Z28uZnJvbShtbi5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KG1uKX0pfWNvbnN0IEtoPXt9'@;
put 'O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoU3QsQnQpPT57S2hbU3RdPWZ1bmN0aW9uKG1uKXtyZXR1cm4gdHlwZW9mIG1uPT09U3R8fCJhIisoQnQ8MT8ibiAiOiIgIikrU3R9fSk7Y29uc3QgcWg9e307S2gudHJh'@;
put 'bnNpdGlvbmFsPWZ1bmN0aW9uKEJ0LF9uLG1uKXtmdW5jdGlvbiBJbihibix1cil7cmV0dXJuIltBeGlvcyB2MS44LjJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrYm4rIiciK3VyKyhtbj8iLiAiK21uOiIiKX1yZXR1cm4oYm4sdXIsdmkpPT57aWYoITE9PT1CdCl0aHJvdyBuZXcgaXQoSW4o'@;
put 'dXIsIiBoYXMgYmVlbiByZW1vdmVkIisoX24/IiBpbiAiK19uOiIiKSksaXQuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBfbiYmIXFoW3VyXSYmKHFoW3VyXT0hMCxnLndhcm4oSW4odXIsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK19uKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0'@;
put 'aGUgbmVhciBmdXR1cmUiKSkpLCFCdHx8QnQoYm4sdXIsdmkpfX0sS2guc3BlbGxpbmc9ZnVuY3Rpb24oQnQpe3JldHVybihfbixtbik9PihnLndhcm4oYCR7bW59IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7QnR9YCksITApfTt2YXIgb249e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24g'@;
put 'QW4oU3QsQnQsX24pe2lmKCJvYmplY3QiIT10eXBlb2YgU3QpdGhyb3cgbmV3IGl0KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixpdC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29uc3QgbW49T2JqZWN0LmtleXMoU3QpO2xldCBJbj1tbi5sZW5ndGg7Zm9yKDtJbi0tID4wOyl7Y29uc3Qg'@;
put 'Ym49bW5bSW5dLHVyPUJ0W2JuXTtpZih1cil7Y29uc3Qgdmk9U3RbYm5dLEZyPXZvaWQgMD09PXZpfHx1cih2aSxibixTdCk7aWYoITAhPT1Gcil0aHJvdyBuZXcgaXQoIm9wdGlvbiAiK2JuKyIgbXVzdCBiZSAiK0ZyLGl0LkVSUl9CQURfT1BUSU9OX1ZBTFVFKX1lbHNlIGlmKCEwIT09X24p'@;
put 'dGhyb3cgbmV3IGl0KCJVbmtub3duIG9wdGlvbiAiK2JuLGl0LkVSUl9CQURfT1BUSU9OKX19LHZhbGlkYXRvcnM6S2h9O2NvbnN0IG1pPW9uLnZhbGlkYXRvcnM7Y2xhc3MgQXJ7Y29uc3RydWN0b3IoQnQpe3RoaXMuZGVmYXVsdHM9QnQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3'@;
put 'IEF0LHJlc3BvbnNlOm5ldyBBdH19cmVxdWVzdChCdCxfbil7dmFyIG1uPXRoaXM7cmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKigpe3RyeXtyZXR1cm4geWllbGQgbW4uX3JlcXVlc3QoQnQsX24pfWNhdGNoKEluKXtpZihJbiBpbnN0YW5jZW9mIEVycm9yKXtsZXQgYm49e307'@;
put 'RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoYm4pOmJuPW5ldyBFcnJvcjtjb25zdCB1cj1ibi5zdGFjaz9ibi5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3RyeXtJbi5zdGFjaz91ciYmIVN0cmluZyhJbi5zdGFjaykuZW5kc1dpdGgodXIucmVw'@;
put 'bGFjZSgvXi4rXG4uK1xuLywiIikpJiYoSW4uc3RhY2srPSJcbiIrdXIpOkluLnN0YWNrPXVyfWNhdGNoe319dGhyb3cgSW59fSkoKX1fcmVxdWVzdChCdCxfbil7InN0cmluZyI9PXR5cGVvZiBCdD8oX249X258fHt9KS51cmw9QnQ6X249QnR8fHt9LF9uPUpyKHRoaXMuZGVmYXVsdHMsX24p'@;
put 'O2NvbnN0e3RyYW5zaXRpb25hbDptbixwYXJhbXNTZXJpYWxpemVyOkluLGhlYWRlcnM6Ym59PV9uO3ZvaWQgMCE9PW1uJiZvbi5hc3NlcnRPcHRpb25zKG1uLHtzaWxlbnRKU09OUGFyc2luZzptaS50cmFuc2l0aW9uYWwobWkuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6bWkudHJhbnNp'@;
put 'dGlvbmFsKG1pLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6bWkudHJhbnNpdGlvbmFsKG1pLmJvb2xlYW4pfSwhMSksbnVsbCE9SW4mJihEdC5pc0Z1bmN0aW9uKEluKT9fbi5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6SW59Om9uLmFzc2VydE9wdGlvbnMoSW4se2VuY29kZTpt'@;
put 'aS5mdW5jdGlvbixzZXJpYWxpemU6bWkuZnVuY3Rpb259LCEwKSksdm9pZCAwIT09X24uYWxsb3dBYnNvbHV0ZVVybHN8fChfbi5hbGxvd0Fic29sdXRlVXJscz12b2lkIDA9PT10aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzfHx0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxz'@;
put 'KSxvbi5hc3NlcnRPcHRpb25zKF9uLHtiYXNlVXJsOm1pLnNwZWxsaW5nKCJiYXNlVVJMIiksd2l0aFhzcmZUb2tlbjptaS5zcGVsbGluZygid2l0aFhTUkZUb2tlbiIpfSwhMCksX24ubWV0aG9kPShfbi5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2Uo'@;
put 'KTtsZXQgdXI9Ym4mJkR0Lm1lcmdlKGJuLmNvbW1vbixibltfbi5tZXRob2RdKTtibiYmRHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSx0YT0+e2RlbGV0ZSBiblt0YV19KSxfbi5oZWFkZXJzPWdvLmNvbmNhdCh1cixibik7'@;
put 'Y29uc3Qgdmk9W107bGV0IEZyPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihfYSl7ImZ1bmN0aW9uIj09dHlwZW9mIF9hLnJ1bldoZW4mJiExPT09X2EucnVuV2hlbihfbil8fChGcj1GciYmX2Euc3luY2hyb25vdXMsdmkudW5zaGlmdChfYS5mdWxmaWxs'@;
put 'ZWQsX2EucmVqZWN0ZWQpKX0pO2NvbnN0IG5vPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oX2Epe25vLnB1c2goX2EuZnVsZmlsbGVkLF9hLnJlamVjdGVkKX0pO2xldCBzbywkYSxCbz0wO2lmKCFGcil7Y29uc3QgdGE9W0QzLmJpbmQodGhpcyksdm9p'@;
put 'ZCAwXTtmb3IodGEudW5zaGlmdC5hcHBseSh0YSx2aSksdGEucHVzaC5hcHBseSh0YSxubyksJGE9dGEubGVuZ3RoLHNvPVByb21pc2UucmVzb2x2ZShfbik7Qm88JGE7KXNvPXNvLnRoZW4odGFbQm8rK10sdGFbQm8rK10pO3JldHVybiBzb30kYT12aS5sZW5ndGg7bGV0IEtsPV9uO2ZvcihC'@;
put 'bz0wO0JvPCRhOyl7Y29uc3QgdGE9dmlbQm8rK10sX2E9dmlbQm8rK107dHJ5e0tsPXRhKEtsKX1jYXRjaChqaSl7X2EuY2FsbCh0aGlzLGppKTticmVha319dHJ5e3NvPUQzLmNhbGwodGhpcyxLbCl9Y2F0Y2godGEpe3JldHVybiBQcm9taXNlLnJlamVjdCh0YSl9Zm9yKEJvPTAsJGE9bm8u'@;
put 'bGVuZ3RoO0JvPCRhOylzbz1zby50aGVuKG5vW0JvKytdLG5vW0JvKytdKTtyZXR1cm4gc299Z2V0VXJpKEJ0KXtyZXR1cm4gT3IobGkoKEJ0PUpyKHRoaXMuZGVmYXVsdHMsQnQpKS5iYXNlVVJMLEJ0LnVybCxCdC5hbGxvd0Fic29sdXRlVXJscyksQnQucGFyYW1zLEJ0LnBhcmFtc1Nlcmlh'@;
put 'bGl6ZXIpfX1EdC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihCdCl7QXIucHJvdG90eXBlW0J0XT1mdW5jdGlvbihfbixtbil7cmV0dXJuIHRoaXMucmVxdWVzdChKcihtbnx8e30se21ldGhvZDpCdCx1cmw6X24sZGF0YToobW58fHt9KS5kYXRh'@;
put 'fSkpfX0pLER0LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihCdCl7ZnVuY3Rpb24gX24obW4pe3JldHVybiBmdW5jdGlvbihibix1cix2aSl7cmV0dXJuIHRoaXMucmVxdWVzdChKcih2aXx8e30se21ldGhvZDpCdCxoZWFkZXJzOm1uP3siQ29udGVudC1UeXBlIjoi'@;
put 'bXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpibixkYXRhOnVyfSkpfX1Bci5wcm90b3R5cGVbQnRdPV9uKCksQXIucHJvdG90eXBlW0J0KyJGb3JtIl09X24oITApfSk7dmFyIFBhPUFyO2NsYXNzIGVhe2NvbnN0cnVjdG9yKEJ0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgQnQpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBfbjt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oYm4pe19uPWJufSk7Y29uc3QgbW49dGhpczt0aGlzLnByb21pc2UudGhlbihJbj0+e2lmKCFtbi5fbGlzdGVuZXJzKXJldHVybjtsZXQg'@;
put 'Ym49bW4uX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtibi0tID4wOyltbi5fbGlzdGVuZXJzW2JuXShJbik7bW4uX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49SW49PntsZXQgYm47Y29uc3QgdXI9bmV3IFByb21pc2Uodmk9Pnttbi5zdWJzY3JpYmUodmkpLGJuPXZpfSkudGhl'@;
put 'bihJbik7cmV0dXJuIHVyLmNhbmNlbD1mdW5jdGlvbigpe21uLnVuc3Vic2NyaWJlKGJuKX0sdXJ9LEJ0KGZ1bmN0aW9uKGJuLHVyLHZpKXttbi5yZWFzb258fChtbi5yZWFzb249bmV3IF9vKGJuLHVyLHZpKSxfbihtbi5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJl'@;
put 'YXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoQnQpe3RoaXMucmVhc29uP0J0KHRoaXMucmVhc29uKTp0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goQnQpOnRoaXMuX2xpc3RlbmVycz1bQnRdfXVuc3Vic2NyaWJlKEJ0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJl'@;
put 'dHVybjtjb25zdCBfbj10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihCdCk7LTEhPT1fbiYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShfbiwxKX10b0Fib3J0U2lnbmFsKCl7Y29uc3QgQnQ9bmV3IEFib3J0Q29udHJvbGxlcixfbj1tbj0+e0J0LmFib3J0KG1uKX07cmV0dXJuIHRoaXMuc3Vic2Ny'@;
put 'aWJlKF9uKSxCdC5zaWduYWwudW5zdWJzY3JpYmU9KCk9PnRoaXMudW5zdWJzY3JpYmUoX24pLEJ0LnNpZ25hbH1zdGF0aWMgc291cmNlKCl7bGV0IEJ0O3JldHVybnt0b2tlbjpuZXcgZWEoZnVuY3Rpb24oSW4pe0J0PUlufSksY2FuY2VsOkJ0fX19dmFyIGFsPWVhO2NvbnN0IENzPXtDb250'@;
put 'aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxD'@;
put 'b250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVt'@;
put 'cG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlB'@;
put 'dXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6'@;
put 'NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJl'@;
put 'cXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFk'@;
put 'R2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAs'@;
put 'TmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhDcykuZm9yRWFjaCgoW1N0LEJ0XSk9PntDc1tCdF09U3R9KTt2YXIgQmw9Q3M7Y29uc3Qga2E9ZnVuY3Rpb24gSGEoU3Qpe2NvbnN0IEJ0PW5ldyBQYShTdCksX249QihQYS5wcm90b3R5cGUucmVxdWVz'@;
put 'dCxCdCk7cmV0dXJuIER0LmV4dGVuZChfbixQYS5wcm90b3R5cGUsQnQse2FsbE93bktleXM6ITB9KSxEdC5leHRlbmQoX24sQnQsbnVsbCx7YWxsT3duS2V5czohMH0pLF9uLmNyZWF0ZT1mdW5jdGlvbihJbil7cmV0dXJuIEhhKEpyKFN0LEluKSl9LF9ufShobyk7a2EuQXhpb3M9UGEsa2Eu'@;
put 'Q2FuY2VsZWRFcnJvcj1fbyxrYS5DYW5jZWxUb2tlbj1hbCxrYS5pc0NhbmNlbD1jbyxrYS5WRVJTSU9OPSIxLjguMiIsa2EudG9Gb3JtRGF0YT1RdCxrYS5BeGlvc0Vycm9yPWl0LGthLkNhbmNlbD1rYS5DYW5jZWxlZEVycm9yLGthLmFsbD1mdW5jdGlvbihCdCl7cmV0dXJuIFByb21pc2Uu'@;
put 'YWxsKEJ0KX0sa2Euc3ByZWFkPWZ1bmN0aW9uIHphKFN0KXtyZXR1cm4gZnVuY3Rpb24oX24pe3JldHVybiBTdC5hcHBseShudWxsLF9uKX19LGthLmlzQXhpb3NFcnJvcj1mdW5jdGlvbiBWcyhTdCl7cmV0dXJuIER0LmlzT2JqZWN0KFN0KSYmITA9PT1TdC5pc0F4aW9zRXJyb3J9LGthLm1l'@;
put 'cmdlQ29uZmlnPUpyLGthLkF4aW9zSGVhZGVycz1nbyxrYS5mb3JtVG9KU09OPVN0PT5JaShEdC5pc0hUTUxGb3JtKFN0KT9uZXcgRm9ybURhdGEoU3QpOlN0KSxrYS5nZXRBZGFwdGVyPUxjX2dldEFkYXB0ZXIsa2EuSHR0cFN0YXR1c0NvZGU9Qmwsa2EuZGVmYXVsdD1rYSx1ZS5leHBvcnRz'@;
put 'PWthfSw4NTY2Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSx5O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHEse19fZXNNb2R1bGU6e3ZhbHVlOiEwfSxbU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6Ik1vZHVsZSJ9fSk7Y29uc3Qgdz1mdW5jdGlvbiBfKFkpe3JldHVybiBZJiZZLl9f'@;
put 'ZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChZLCJkZWZhdWx0Iik/WS5kZWZhdWx0Oll9KGZ1bmN0aW9uIGcoKXtpZih5KXJldHVybiBJO3k9MTtjb25zdCBZPTIxNDc0ODM2NDcsWD0zNixUZT0vXnhuLS0vLFNlPS9bXlwwLVx4N0ZdLyx6ZT0vW1x4MkVc'@;
put 'dTMwMDJcdUZGMEVcdUZGNjFdL2csVj17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZh'@;
put 'bGlkIGlucHV0In0sYj1NYXRoLmZsb29yLHg9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBDKHdlKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihWW3dlXSl9ZnVuY3Rpb24gSCh3ZSxVZSl7Y29uc3QgSmU9d2Uuc3BsaXQoIkAiKTtsZXQgYXQ9IiI7SmUubGVuZ3RoPjEmJihhdD1KZVswXSsi'@;
put 'QCIsd2U9SmVbMV0pO2NvbnN0IHZlPWZ1bmN0aW9uIFQod2UsVWUpe2NvbnN0IEplPVtdO2xldCBhdD13ZS5sZW5ndGg7Zm9yKDthdC0tOylKZVthdF09VWUod2VbYXRdKTtyZXR1cm4gSmV9KCh3ZT13ZS5yZXBsYWNlKHplLCIuIikpLnNwbGl0KCIuIiksVWUpLmpvaW4oIi4iKTtyZXR1cm4g'@;
put 'YXQrdmV9ZnVuY3Rpb24gaih3ZSl7Y29uc3QgVWU9W107bGV0IEplPTA7Y29uc3QgYXQ9d2UubGVuZ3RoO2Zvcig7SmU8YXQ7KXtjb25zdCBNZT13ZS5jaGFyQ29kZUF0KEplKyspO2lmKE1lPj01NTI5NiYmTWU8PTU2MzE5JiZKZTxhdCl7Y29uc3QgdmU9d2UuY2hhckNvZGVBdChKZSsrKTs1'@;
put 'NjMyMD09KDY0NTEyJnZlKT9VZS5wdXNoKCgoMTAyMyZNZSk8PDEwKSsoMTAyMyZ2ZSkrNjU1MzYpOihVZS5wdXNoKE1lKSxKZS0tKX1lbHNlIFVlLnB1c2goTWUpfXJldHVybiBVZX1jb25zdCBtPWZ1bmN0aW9uKHdlKXtyZXR1cm4gd2U+PTQ4JiZ3ZTw1OD93ZS00OCsyNjp3ZT49NjUmJndl'@;
put 'PDkxP3dlLTY1OndlPj05NyYmd2U8MTIzP3dlLTk3Olh9LEE9ZnVuY3Rpb24od2UsVWUpe3JldHVybiB3ZSsyMis3NSood2U8MjYpLSgoMCE9VWUpPDw1KX0sb2U9ZnVuY3Rpb24od2UsVWUsSmUpe2xldCBhdD0wO2Zvcih3ZT1KZT9iKHdlLzcwMCk6d2U+PjEsd2UrPWIod2UvVWUpO3dlPjQ1'@;
put 'NTthdCs9WCl3ZT1iKHdlLzM1KTtyZXR1cm4gYihhdCszNip3ZS8od2UrMzgpKX0sdGU9ZnVuY3Rpb24od2Upe2NvbnN0IFVlPVtdLEplPXdlLmxlbmd0aDtsZXQgYXQ9MCxNZT0xMjgsdmU9NzIsWGU9d2UubGFzdEluZGV4T2YoIi0iKTtYZTwwJiYoWGU9MCk7Zm9yKGxldCBqZT0wO2plPFhl'@;
put 'OysramUpd2UuY2hhckNvZGVBdChqZSk+PTEyOCYmQygibm90LWJhc2ljIiksVWUucHVzaCh3ZS5jaGFyQ29kZUF0KGplKSk7Zm9yKGxldCBqZT1YZT4wP1hlKzE6MDtqZTxKZTspe2NvbnN0IERlPWF0O2ZvcihsZXQgUmU9MSxJZT1YOztJZSs9WCl7amU+PUplJiZDKCJpbnZhbGlkLWlucHV0'@;
put 'Iik7Y29uc3QgVmU9bSh3ZS5jaGFyQ29kZUF0KGplKyspKTtWZT49WCYmQygiaW52YWxpZC1pbnB1dCIpLFZlPmIoKFktYXQpL1JlKSYmQygib3ZlcmZsb3ciKSxhdCs9VmUqUmU7Y29uc3Qga2U9SWU8PXZlPzE6SWU+PXZlKzI2PzI2OkllLXZlO2lmKFZlPGtlKWJyZWFrO2NvbnN0IEFlPVgt'@;
put 'a2U7UmU+YihZL0FlKSYmQygib3ZlcmZsb3ciKSxSZSo9QWV9Y29uc3QgRmU9VWUubGVuZ3RoKzE7dmU9b2UoYXQtRGUsRmUsMD09RGUpLGIoYXQvRmUpPlktTWUmJkMoIm92ZXJmbG93IiksTWUrPWIoYXQvRmUpLGF0JT1GZSxVZS5zcGxpY2UoYXQrKywwLE1lKX1yZXR1cm4gU3RyaW5nLmZy'@;
put 'b21Db2RlUG9pbnQoLi4uVWUpfSxzZT1mdW5jdGlvbih3ZSl7Y29uc3QgVWU9W10sSmU9KHdlPWood2UpKS5sZW5ndGg7bGV0IGF0PTEyOCxNZT0wLHZlPTcyO2Zvcihjb25zdCBEZSBvZiB3ZSlEZTwxMjgmJlVlLnB1c2goeChEZSkpO2NvbnN0IFhlPVVlLmxlbmd0aDtsZXQgamU9WGU7Zm9y'@;
put 'KFhlJiZVZS5wdXNoKCItIik7amU8SmU7KXtsZXQgRGU9WTtmb3IoY29uc3QgUmUgb2Ygd2UpUmU+PWF0JiZSZTxEZSYmKERlPVJlKTtjb25zdCBGZT1qZSsxO0RlLWF0PmIoKFktTWUpL0ZlKSYmQygib3ZlcmZsb3ciKSxNZSs9KERlLWF0KSpGZSxhdD1EZTtmb3IoY29uc3QgUmUgb2Ygd2Up'@;
put 'aWYoUmU8YXQmJisrTWU+WSYmQygib3ZlcmZsb3ciKSxSZT09PWF0KXtsZXQgSWU9TWU7Zm9yKGxldCBWZT1YOztWZSs9WCl7Y29uc3Qga2U9VmU8PXZlPzE6VmU+PXZlKzI2PzI2OlZlLXZlO2lmKEllPGtlKWJyZWFrO2NvbnN0IEFlPUllLWtlLF90PVgta2U7VWUucHVzaCh4KEEoa2UrQWUl'@;
put 'X3QsMCkpKSxJZT1iKEFlL190KX1VZS5wdXNoKHgoQShJZSwwKSkpLHZlPW9lKE1lLEZlLGplPT09WGUpLE1lPTAsKytqZX0rK01lLCsrYXR9cmV0dXJuIFVlLmpvaW4oIiIpfTtyZXR1cm4gST17dmVyc2lvbjoiMi4zLjEiLHVjczI6e2RlY29kZTpqLGVuY29kZTp3ZT0+U3RyaW5nLmZyb21D'@;
put 'b2RlUG9pbnQoLi4ud2UpfSxkZWNvZGU6dGUsZW5jb2RlOnNlLHRvQVNDSUk6ZnVuY3Rpb24od2Upe3JldHVybiBIKHdlLGZ1bmN0aW9uKFVlKXtyZXR1cm4gU2UudGVzdChVZSk/InhuLS0iK3NlKFVlKTpVZX0pfSx0b1VuaWNvZGU6ZnVuY3Rpb24od2Upe3JldHVybiBIKHdlLGZ1bmN0aW9u'@;
put 'KFVlKXtyZXR1cm4gVGUudGVzdChVZSk/dGUoVWUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6VWV9KX19fSgpKSxGPVsiYWMiLCJjb20uYWMiLCJlZHUuYWMiLCJnb3YuYWMiLCJtaWwuYWMiLCJuZXQuYWMiLCJvcmcuYWMiLCJhZCIsImFlIiwiYWMuYWUiLCJjby5hZSIsImdvdi5hZSIsIm1p'@;
put 'bC5hZSIsIm5ldC5hZSIsIm9yZy5hZSIsInNjaC5hZSIsImFlcm8iLCJhaXJsaW5lLmFlcm8iLCJhaXJwb3J0LmFlcm8iLCJhY2NpZGVudC1pbnZlc3RpZ2F0aW9uLmFlcm8iLCJhY2NpZGVudC1wcmV2ZW50aW9uLmFlcm8iLCJhZXJvYmF0aWMuYWVybyIsImFlcm9jbHViLmFlcm8iLCJhZXJv'@;
put 'ZHJvbWUuYWVybyIsImFnZW50cy5hZXJvIiwiYWlyLXN1cnZlaWxsYW5jZS5hZXJvIiwiYWlyLXRyYWZmaWMtY29udHJvbC5hZXJvIiwiYWlyY3JhZnQuYWVybyIsImFpcnRyYWZmaWMuYWVybyIsImFtYnVsYW5jZS5hZXJvIiwiYXNzb2NpYXRpb24uYWVybyIsImF1dGhvci5hZXJvIiwiYmFs'@;
put 'bG9vbmluZy5hZXJvIiwiYnJva2VyLmFlcm8iLCJjYWEuYWVybyIsImNhcmdvLmFlcm8iLCJjYXRlcmluZy5hZXJvIiwiY2VydGlmaWNhdGlvbi5hZXJvIiwiY2hhbXBpb25zaGlwLmFlcm8iLCJjaGFydGVyLmFlcm8iLCJjaXZpbGF2aWF0aW9uLmFlcm8iLCJjbHViLmFlcm8iLCJjb25mZXJl'@;
put 'bmNlLmFlcm8iLCJjb25zdWx0YW50LmFlcm8iLCJjb25zdWx0aW5nLmFlcm8iLCJjb250cm9sLmFlcm8iLCJjb3VuY2lsLmFlcm8iLCJjcmV3LmFlcm8iLCJkZXNpZ24uYWVybyIsImRnY2EuYWVybyIsImVkdWNhdG9yLmFlcm8iLCJlbWVyZ2VuY3kuYWVybyIsImVuZ2luZS5hZXJvIiwiZW5n'@;
put 'aW5lZXIuYWVybyIsImVudGVydGFpbm1lbnQuYWVybyIsImVxdWlwbWVudC5hZXJvIiwiZXhjaGFuZ2UuYWVybyIsImV4cHJlc3MuYWVybyIsImZlZGVyYXRpb24uYWVybyIsImZsaWdodC5hZXJvIiwiZnJlaWdodC5hZXJvIiwiZnVlbC5hZXJvIiwiZ2xpZGluZy5hZXJvIiwiZ292ZXJubWVu'@;
put 'dC5hZXJvIiwiZ3JvdW5kaGFuZGxpbmcuYWVybyIsImdyb3VwLmFlcm8iLCJoYW5nZ2xpZGluZy5hZXJvIiwiaG9tZWJ1aWx0LmFlcm8iLCJpbnN1cmFuY2UuYWVybyIsImpvdXJuYWwuYWVybyIsImpvdXJuYWxpc3QuYWVybyIsImxlYXNpbmcuYWVybyIsImxvZ2lzdGljcy5hZXJvIiwibWFn'@;
put 'YXppbmUuYWVybyIsIm1haW50ZW5hbmNlLmFlcm8iLCJtYXJrZXRwbGFjZS5hZXJvIiwibWVkaWEuYWVybyIsIm1pY3JvbGlnaHQuYWVybyIsIm1vZGVsbGluZy5hZXJvIiwibmF2aWdhdGlvbi5hZXJvIiwicGFyYWNodXRpbmcuYWVybyIsInBhcmFnbGlkaW5nLmFlcm8iLCJwYXNzZW5nZXIt'@;
put 'YXNzb2NpYXRpb24uYWVybyIsInBpbG90LmFlcm8iLCJwcmVzcy5hZXJvIiwicHJvZHVjdGlvbi5hZXJvIiwicmVjcmVhdGlvbi5hZXJvIiwicmVwYm9keS5hZXJvIiwicmVzLmFlcm8iLCJyZXNlYXJjaC5hZXJvIiwicm90b3JjcmFmdC5hZXJvIiwic2FmZXR5LmFlcm8iLCJzY2llbnRpc3Qu'@;
put 'YWVybyIsInNlcnZpY2VzLmFlcm8iLCJzaG93LmFlcm8iLCJza3lkaXZpbmcuYWVybyIsInNvZnR3YXJlLmFlcm8iLCJzdHVkZW50LmFlcm8iLCJ0YXhpLmFlcm8iLCJ0cmFkZXIuYWVybyIsInRyYWRpbmcuYWVybyIsInRyYWluZXIuYWVybyIsInVuaW9uLmFlcm8iLCJ3b3JraW5nZ3JvdXAu'@;
put 'YWVybyIsIndvcmtzLmFlcm8iLCJhZiIsImNvbS5hZiIsImVkdS5hZiIsImdvdi5hZiIsIm5ldC5hZiIsIm9yZy5hZiIsImFnIiwiY28uYWciLCJjb20uYWciLCJuZXQuYWciLCJub20uYWciLCJvcmcuYWciLCJhaSIsImNvbS5haSIsIm5ldC5haSIsIm9mZi5haSIsIm9yZy5haSIsImFsIiwi'@;
put 'Y29tLmFsIiwiZWR1LmFsIiwiZ292LmFsIiwibWlsLmFsIiwibmV0LmFsIiwib3JnLmFsIiwiYW0iLCJjby5hbSIsImNvbS5hbSIsImNvbW11bmUuYW0iLCJuZXQuYW0iLCJvcmcuYW0iLCJhbyIsImNvLmFvIiwiZWQuYW8iLCJlZHUuYW8iLCJnb3YuYW8iLCJndi5hbyIsIml0LmFvIiwib2cu'@;
put 'YW8iLCJvcmcuYW8iLCJwYi5hbyIsImFxIiwiYXIiLCJiZXQuYXIiLCJjb20uYXIiLCJjb29wLmFyIiwiZWR1LmFyIiwiZ29iLmFyIiwiZ292LmFyIiwiaW50LmFyIiwibWlsLmFyIiwibXVzaWNhLmFyIiwibXV0dWFsLmFyIiwibmV0LmFyIiwib3JnLmFyIiwic2VuYXNhLmFyIiwidHVyLmFy'@;
put 'IiwiYXJwYSIsImUxNjQuYXJwYSIsImhvbWUuYXJwYSIsImluLWFkZHIuYXJwYSIsImlwNi5hcnBhIiwiaXJpcy5hcnBhIiwidXJpLmFycGEiLCJ1cm4uYXJwYSIsImFzIiwiZ292LmFzIiwiYXNpYSIsImF0IiwiYWMuYXQiLCJzdGguYWMuYXQiLCJjby5hdCIsImd2LmF0Iiwib3IuYXQiLCJh'@;
put 'dSIsImFzbi5hdSIsImNvbS5hdSIsImVkdS5hdSIsImdvdi5hdSIsImlkLmF1IiwibmV0LmF1Iiwib3JnLmF1IiwiY29uZi5hdSIsIm96LmF1IiwiYWN0LmF1IiwibnN3LmF1IiwibnQuYXUiLCJxbGQuYXUiLCJzYS5hdSIsInRhcy5hdSIsInZpYy5hdSIsIndhLmF1IiwiYWN0LmVkdS5hdSIs'@;
put 'ImNhdGhvbGljLmVkdS5hdSIsIm5zdy5lZHUuYXUiLCJudC5lZHUuYXUiLCJxbGQuZWR1LmF1Iiwic2EuZWR1LmF1IiwidGFzLmVkdS5hdSIsInZpYy5lZHUuYXUiLCJ3YS5lZHUuYXUiLCJxbGQuZ292LmF1Iiwic2EuZ292LmF1IiwidGFzLmdvdi5hdSIsInZpYy5nb3YuYXUiLCJ3YS5nb3Yu'@;
put 'YXUiLCJzY2hvb2xzLm5zdy5lZHUuYXUiLCJhdyIsImNvbS5hdyIsImF4IiwiYXoiLCJiaXouYXoiLCJjb20uYXoiLCJlZHUuYXoiLCJnb3YuYXoiLCJpbmZvLmF6IiwiaW50LmF6IiwibWlsLmF6IiwibmFtZS5heiIsIm5ldC5heiIsIm9yZy5heiIsInBwLmF6IiwicHJvLmF6IiwiYmEiLCJj'@;
put 'b20uYmEiLCJlZHUuYmEiLCJnb3YuYmEiLCJtaWwuYmEiLCJuZXQuYmEiLCJvcmcuYmEiLCJiYiIsImJpei5iYiIsImNvLmJiIiwiY29tLmJiIiwiZWR1LmJiIiwiZ292LmJiIiwiaW5mby5iYiIsIm5ldC5iYiIsIm9yZy5iYiIsInN0b3JlLmJiIiwidHYuYmIiLCIqLmJkIiwiYmUiLCJhYy5i'@;
put 'ZSIsImJmIiwiZ292LmJmIiwiYmciLCIwLmJnIiwiMS5iZyIsIjIuYmciLCIzLmJnIiwiNC5iZyIsIjUuYmciLCI2LmJnIiwiNy5iZyIsIjguYmciLCI5LmJnIiwiYS5iZyIsImIuYmciLCJjLmJnIiwiZC5iZyIsImUuYmciLCJmLmJnIiwiZy5iZyIsImguYmciLCJpLmJnIiwiai5iZyIsImsu'@;
put 'YmciLCJsLmJnIiwibS5iZyIsIm4uYmciLCJvLmJnIiwicC5iZyIsInEuYmciLCJyLmJnIiwicy5iZyIsInQuYmciLCJ1LmJnIiwidi5iZyIsIncuYmciLCJ4LmJnIiwieS5iZyIsInouYmciLCJiaCIsImNvbS5iaCIsImVkdS5iaCIsImdvdi5iaCIsIm5ldC5iaCIsIm9yZy5iaCIsImJpIiwi'@;
put 'Y28uYmkiLCJjb20uYmkiLCJlZHUuYmkiLCJvci5iaSIsIm9yZy5iaSIsImJpeiIsImJqIiwiYWZyaWNhLmJqIiwiYWdyby5iaiIsImFyY2hpdGVjdGVzLmJqIiwiYXNzdXIuYmoiLCJhdm9jYXRzLmJqIiwiY28uYmoiLCJjb20uYmoiLCJlY28uYmoiLCJlY29uby5iaiIsImVkdS5iaiIsImlu'@;
put 'Zm8uYmoiLCJsb2lzaXJzLmJqIiwibW9uZXkuYmoiLCJuZXQuYmoiLCJvcmcuYmoiLCJvdGUuYmoiLCJyZXN0YXVyYW50LmJqIiwicmVzdG8uYmoiLCJ0b3VyaXNtLmJqIiwidW5pdi5iaiIsImJtIiwiY29tLmJtIiwiZWR1LmJtIiwiZ292LmJtIiwibmV0LmJtIiwib3JnLmJtIiwiYm4iLCJj'@;
put 'b20uYm4iLCJlZHUuYm4iLCJnb3YuYm4iLCJuZXQuYm4iLCJvcmcuYm4iLCJibyIsImNvbS5ibyIsImVkdS5ibyIsImdvYi5ibyIsImludC5ibyIsIm1pbC5ibyIsIm5ldC5ibyIsIm9yZy5ibyIsInR2LmJvIiwid2ViLmJvIiwiYWNhZGVtaWEuYm8iLCJhZ3JvLmJvIiwiYXJ0ZS5ibyIsImJs'@;
put 'b2cuYm8iLCJib2xpdmlhLmJvIiwiY2llbmNpYS5ibyIsImNvb3BlcmF0aXZhLmJvIiwiZGVtb2NyYWNpYS5ibyIsImRlcG9ydGUuYm8iLCJlY29sb2dpYS5ibyIsImVjb25vbWlhLmJvIiwiZW1wcmVzYS5ibyIsImluZGlnZW5hLmJvIiwiaW5kdXN0cmlhLmJvIiwiaW5mby5ibyIsIm1lZGlj'@;
put 'aW5hLmJvIiwibW92aW1pZW50by5ibyIsIm11c2ljYS5ibyIsIm5hdHVyYWwuYm8iLCJub21icmUuYm8iLCJub3RpY2lhcy5ibyIsInBhdHJpYS5ibyIsInBsdXJpbmFjaW9uYWwuYm8iLCJwb2xpdGljYS5ibyIsInByb2Zlc2lvbmFsLmJvIiwicHVlYmxvLmJvIiwicmV2aXN0YS5ibyIsInNh'@;
put 'bHVkLmJvIiwidGVjbm9sb2dpYS5ibyIsInRrc2F0LmJvIiwidHJhbnNwb3J0ZS5ibyIsIndpa2kuYm8iLCJiciIsIjlndWFjdS5iciIsImFiYy5iciIsImFkbS5iciIsImFkdi5iciIsImFnci5iciIsImFqdS5iciIsImFtLmJyIiwiYW5hbmkuYnIiLCJhcGFyZWNpZGEuYnIiLCJhcHAuYnIi'@;
put 'LCJhcnEuYnIiLCJhcnQuYnIiLCJhdG8uYnIiLCJiLmJyIiwiYmFydWVyaS5iciIsImJlbGVtLmJyIiwiYmV0LmJyIiwiYmh6LmJyIiwiYmliLmJyIiwiYmlvLmJyIiwiYmxvZy5iciIsImJtZC5iciIsImJvYXZpc3RhLmJyIiwiYnNiLmJyIiwiY2FtcGluYWdyYW5kZS5iciIsImNhbXBpbmFz'@;
put 'LmJyIiwiY2F4aWFzLmJyIiwiY2ltLmJyIiwiY25nLmJyIiwiY250LmJyIiwiY29tLmJyIiwiY29udGFnZW0uYnIiLCJjb29wLmJyIiwiY296LmJyIiwiY3JpLmJyIiwiY3VpYWJhLmJyIiwiY3VyaXRpYmEuYnIiLCJkZWYuYnIiLCJkZXMuYnIiLCJkZXQuYnIiLCJkZXYuYnIiLCJlY24uYnIi'@;
put 'LCJlY28uYnIiLCJlZHUuYnIiLCJlbXAuYnIiLCJlbmYuYnIiLCJlbmcuYnIiLCJlc3AuYnIiLCJldGMuYnIiLCJldGkuYnIiLCJmYXIuYnIiLCJmZWlyYS5iciIsImZsb2cuYnIiLCJmbG9yaXBhLmJyIiwiZm0uYnIiLCJmbmQuYnIiLCJmb3J0YWwuYnIiLCJmb3QuYnIiLCJmb3ouYnIiLCJm'@;
put 'c3QuYnIiLCJnMTIuYnIiLCJnZW8uYnIiLCJnZ2YuYnIiLCJnb2lhbmlhLmJyIiwiZ292LmJyIiwiYWMuZ292LmJyIiwiYWwuZ292LmJyIiwiYW0uZ292LmJyIiwiYXAuZ292LmJyIiwiYmEuZ292LmJyIiwiY2UuZ292LmJyIiwiZGYuZ292LmJyIiwiZXMuZ292LmJyIiwiZ28uZ292LmJyIiwi'@;
put 'bWEuZ292LmJyIiwibWcuZ292LmJyIiwibXMuZ292LmJyIiwibXQuZ292LmJyIiwicGEuZ292LmJyIiwicGIuZ292LmJyIiwicGUuZ292LmJyIiwicGkuZ292LmJyIiwicHIuZ292LmJyIiwicmouZ292LmJyIiwicm4uZ292LmJyIiwicm8uZ292LmJyIiwicnIuZ292LmJyIiwicnMuZ292LmJy'@;
put 'Iiwic2MuZ292LmJyIiwic2UuZ292LmJyIiwic3AuZ292LmJyIiwidG8uZ292LmJyIiwiZ3J1LmJyIiwiaW1iLmJyIiwiaW5kLmJyIiwiaW5mLmJyIiwiamFiLmJyIiwiamFtcGEuYnIiLCJqZGYuYnIiLCJqb2ludmlsbGUuYnIiLCJqb3IuYnIiLCJqdXMuYnIiLCJsZWcuYnIiLCJsZWlsYW8u'@;
put 'YnIiLCJsZWwuYnIiLCJsb2cuYnIiLCJsb25kcmluYS5iciIsIm1hY2FwYS5iciIsIm1hY2Vpby5iciIsIm1hbmF1cy5iciIsIm1hcmluZ2EuYnIiLCJtYXQuYnIiLCJtZWQuYnIiLCJtaWwuYnIiLCJtb3JlbmEuYnIiLCJtcC5iciIsIm11cy5iciIsIm5hdGFsLmJyIiwibmV0LmJyIiwibml0'@;
put 'ZXJvaS5iciIsIioubm9tLmJyIiwibm90LmJyIiwibnRyLmJyIiwib2RvLmJyIiwib25nLmJyIiwib3JnLmJyIiwib3Nhc2NvLmJyIiwicGFsbWFzLmJyIiwicG9hLmJyIiwicHBnLmJyIiwicHJvLmJyIiwicHNjLmJyIiwicHNpLmJyIiwicHZoLmJyIiwicXNsLmJyIiwicmFkaW8uYnIiLCJy'@;
put 'ZWMuYnIiLCJyZWNpZmUuYnIiLCJyZXAuYnIiLCJyaWJlaXJhby5iciIsInJpby5iciIsInJpb2JyYW5jby5iciIsInJpb3ByZXRvLmJyIiwic2FsdmFkb3IuYnIiLCJzYW1wYS5iciIsInNhbnRhbWFyaWEuYnIiLCJzYW50b2FuZHJlLmJyIiwic2FvYmVybmFyZG8uYnIiLCJzYW9nb25jYS5i'@;
put 'ciIsInNlZy5iciIsInNqYy5iciIsInNsZy5iciIsInNsei5iciIsInNvcm9jYWJhLmJyIiwic3J2LmJyIiwidGF4aS5iciIsInRjLmJyIiwidGVjLmJyIiwidGVvLmJyIiwidGhlLmJyIiwidG1wLmJyIiwidHJkLmJyIiwidHVyLmJyIiwidHYuYnIiLCJ1ZGkuYnIiLCJ2ZXQuYnIiLCJ2aXgu'@;
put 'YnIiLCJ2bG9nLmJyIiwid2lraS5iciIsInpsZy5iciIsImJzIiwiY29tLmJzIiwiZWR1LmJzIiwiZ292LmJzIiwibmV0LmJzIiwib3JnLmJzIiwiYnQiLCJjb20uYnQiLCJlZHUuYnQiLCJnb3YuYnQiLCJuZXQuYnQiLCJvcmcuYnQiLCJidiIsImJ3IiwiY28uYnciLCJvcmcuYnciLCJieSIs'@;
put 'Imdvdi5ieSIsIm1pbC5ieSIsImNvbS5ieSIsIm9mLmJ5IiwiYnoiLCJjby5ieiIsImNvbS5ieiIsImVkdS5ieiIsImdvdi5ieiIsIm5ldC5ieiIsIm9yZy5ieiIsImNhIiwiYWIuY2EiLCJiYy5jYSIsIm1iLmNhIiwibmIuY2EiLCJuZi5jYSIsIm5sLmNhIiwibnMuY2EiLCJudC5jYSIsIm51'@;
put 'LmNhIiwib24uY2EiLCJwZS5jYSIsInFjLmNhIiwic2suY2EiLCJ5ay5jYSIsImdjLmNhIiwiY2F0IiwiY2MiLCJjZCIsImdvdi5jZCIsImNmIiwiY2ciLCJjaCIsImNpIiwiYWMuY2kiLCJhXHhlOXJvcG9ydC5jaSIsImFzc28uY2kiLCJjby5jaSIsImNvbS5jaSIsImVkLmNpIiwiZWR1LmNp'@;
put 'IiwiZ28uY2kiLCJnb3V2LmNpIiwiaW50LmNpIiwibmV0LmNpIiwib3IuY2kiLCJvcmcuY2kiLCIqLmNrIiwiIXd3dy5jayIsImNsIiwiY28uY2wiLCJnb2IuY2wiLCJnb3YuY2wiLCJtaWwuY2wiLCJjbSIsImNvLmNtIiwiY29tLmNtIiwiZ292LmNtIiwibmV0LmNtIiwiY24iLCJhYy5jbiIs'@;
put 'ImNvbS5jbiIsImVkdS5jbiIsImdvdi5jbiIsIm1pbC5jbiIsIm5ldC5jbiIsIm9yZy5jbiIsIlx1NTE2Y1x1NTNmOC5jbiIsIlx1N2RiMlx1N2Q2MS5jbiIsIlx1N2Y1MVx1N2VkYy5jbiIsImFoLmNuIiwiYmouY24iLCJjcS5jbiIsImZqLmNuIiwiZ2QuY24iLCJncy5jbiIsImd4LmNuIiwi'@;
put 'Z3ouY24iLCJoYS5jbiIsImhiLmNuIiwiaGUuY24iLCJoaS5jbiIsImhrLmNuIiwiaGwuY24iLCJobi5jbiIsImpsLmNuIiwianMuY24iLCJqeC5jbiIsImxuLmNuIiwibW8uY24iLCJubS5jbiIsIm54LmNuIiwicWguY24iLCJzYy5jbiIsInNkLmNuIiwic2guY24iLCJzbi5jbiIsInN4LmNu'@;
put 'IiwidGouY24iLCJ0dy5jbiIsInhqLmNuIiwieHouY24iLCJ5bi5jbiIsInpqLmNuIiwiY28iLCJjb20uY28iLCJlZHUuY28iLCJnb3YuY28iLCJtaWwuY28iLCJuZXQuY28iLCJub20uY28iLCJvcmcuY28iLCJjb20iLCJjb29wIiwiY3IiLCJhYy5jciIsImNvLmNyIiwiZWQuY3IiLCJmaS5j'@;
put 'ciIsImdvLmNyIiwib3IuY3IiLCJzYS5jciIsImN1IiwiY29tLmN1IiwiZWR1LmN1IiwiZ29iLmN1IiwiaW5mLmN1IiwibmF0LmN1IiwibmV0LmN1Iiwib3JnLmN1IiwiY3YiLCJjb20uY3YiLCJlZHUuY3YiLCJpZC5jdiIsImludC5jdiIsIm5ldC5jdiIsIm5vbWUuY3YiLCJvcmcuY3YiLCJw'@;
put 'dWJsLmN2IiwiY3ciLCJjb20uY3ciLCJlZHUuY3ciLCJuZXQuY3ciLCJvcmcuY3ciLCJjeCIsImdvdi5jeCIsImN5IiwiYWMuY3kiLCJiaXouY3kiLCJjb20uY3kiLCJla2xvZ2VzLmN5IiwiZ292LmN5IiwibHRkLmN5IiwibWlsLmN5IiwibmV0LmN5Iiwib3JnLmN5IiwicHJlc3MuY3kiLCJw'@;
put 'cm8uY3kiLCJ0bS5jeSIsImN6IiwiZGUiLCJkaiIsImRrIiwiZG0iLCJjby5kbSIsImNvbS5kbSIsImVkdS5kbSIsImdvdi5kbSIsIm5ldC5kbSIsIm9yZy5kbSIsImRvIiwiYXJ0LmRvIiwiY29tLmRvIiwiZWR1LmRvIiwiZ29iLmRvIiwiZ292LmRvIiwibWlsLmRvIiwibmV0LmRvIiwib3Jn'@;
put 'LmRvIiwic2xkLmRvIiwid2ViLmRvIiwiZHoiLCJhcnQuZHoiLCJhc3NvLmR6IiwiY29tLmR6IiwiZWR1LmR6IiwiZ292LmR6IiwibmV0LmR6Iiwib3JnLmR6IiwicG9sLmR6Iiwic29jLmR6IiwidG0uZHoiLCJlYyIsImNvbS5lYyIsImVkdS5lYyIsImZpbi5lYyIsImdvYi5lYyIsImdvdi5l'@;
put 'YyIsImluZm8uZWMiLCJrMTIuZWMiLCJtZWQuZWMiLCJtaWwuZWMiLCJuZXQuZWMiLCJvcmcuZWMiLCJwcm8uZWMiLCJlZHUiLCJlZSIsImFpcC5lZSIsImNvbS5lZSIsImVkdS5lZSIsImZpZS5lZSIsImdvdi5lZSIsImxpYi5lZSIsIm1lZC5lZSIsIm9yZy5lZSIsInByaS5lZSIsInJpaWsu'@;
put 'ZWUiLCJlZyIsImFjLmVnIiwiY29tLmVnIiwiZWR1LmVnIiwiZXVuLmVnIiwiZ292LmVnIiwiaW5mby5lZyIsIm1lLmVnIiwibWlsLmVnIiwibmFtZS5lZyIsIm5ldC5lZyIsIm9yZy5lZyIsInNjaS5lZyIsInNwb3J0LmVnIiwidHYuZWciLCIqLmVyIiwiZXMiLCJjb20uZXMiLCJlZHUuZXMi'@;
put 'LCJnb2IuZXMiLCJub20uZXMiLCJvcmcuZXMiLCJldCIsImJpei5ldCIsImNvbS5ldCIsImVkdS5ldCIsImdvdi5ldCIsImluZm8uZXQiLCJuYW1lLmV0IiwibmV0LmV0Iiwib3JnLmV0IiwiZXUiLCJmaSIsImFsYW5kLmZpIiwiZmoiLCJhYy5maiIsImJpei5maiIsImNvbS5maiIsImdvdi5m'@;
put 'aiIsImluZm8uZmoiLCJtaWwuZmoiLCJuYW1lLmZqIiwibmV0LmZqIiwib3JnLmZqIiwicHJvLmZqIiwiKi5mayIsImZtIiwiY29tLmZtIiwiZWR1LmZtIiwibmV0LmZtIiwib3JnLmZtIiwiZm8iLCJmciIsImFzc28uZnIiLCJjb20uZnIiLCJnb3V2LmZyIiwibm9tLmZyIiwicHJkLmZyIiwi'@;
put 'dG0uZnIiLCJhdm91ZXMuZnIiLCJjY2kuZnIiLCJncmV0YS5mciIsImh1aXNzaWVyLWp1c3RpY2UuZnIiLCJnYSIsImdiIiwiZ2QiLCJlZHUuZ2QiLCJnb3YuZ2QiLCJnZSIsImNvbS5nZSIsImVkdS5nZSIsImdvdi5nZSIsIm5ldC5nZSIsIm9yZy5nZSIsInB2dC5nZSIsInNjaG9vbC5nZSIs'@;
put 'ImdmIiwiZ2ciLCJjby5nZyIsIm5ldC5nZyIsIm9yZy5nZyIsImdoIiwiY29tLmdoIiwiZWR1LmdoIiwiZ292LmdoIiwibWlsLmdoIiwib3JnLmdoIiwiZ2kiLCJjb20uZ2kiLCJlZHUuZ2kiLCJnb3YuZ2kiLCJsdGQuZ2kiLCJtb2QuZ2kiLCJvcmcuZ2kiLCJnbCIsImNvLmdsIiwiY29tLmds'@;
put 'IiwiZWR1LmdsIiwibmV0LmdsIiwib3JnLmdsIiwiZ20iLCJnbiIsImFjLmduIiwiY29tLmduIiwiZWR1LmduIiwiZ292LmduIiwibmV0LmduIiwib3JnLmduIiwiZ292IiwiZ3AiLCJhc3NvLmdwIiwiY29tLmdwIiwiZWR1LmdwIiwibW9iaS5ncCIsIm5ldC5ncCIsIm9yZy5ncCIsImdxIiwi'@;
put 'Z3IiLCJjb20uZ3IiLCJlZHUuZ3IiLCJnb3YuZ3IiLCJuZXQuZ3IiLCJvcmcuZ3IiLCJncyIsImd0IiwiY29tLmd0IiwiZWR1Lmd0IiwiZ29iLmd0IiwiaW5kLmd0IiwibWlsLmd0IiwibmV0Lmd0Iiwib3JnLmd0IiwiZ3UiLCJjb20uZ3UiLCJlZHUuZ3UiLCJnb3YuZ3UiLCJndWFtLmd1Iiwi'@;
put 'aW5mby5ndSIsIm5ldC5ndSIsIm9yZy5ndSIsIndlYi5ndSIsImd3IiwiZ3kiLCJjby5neSIsImNvbS5neSIsImVkdS5neSIsImdvdi5neSIsIm5ldC5neSIsIm9yZy5neSIsImhrIiwiY29tLmhrIiwiZWR1LmhrIiwiZ292LmhrIiwiaWR2LmhrIiwibmV0LmhrIiwib3JnLmhrIiwiXHU0ZTJh'@;
put 'XHU0ZWJhLmhrIiwiXHU1MDBiXHU0ZWJhLmhrIiwiXHU1MTZjXHU1M2Y4LmhrIiwiXHU2NTNmXHU1ZTljLmhrIiwiXHU2NTRlXHU4MGIyLmhrIiwiXHU2NTU5XHU4MGIyLmhrIiwiXHU3Yjg3XHU0ZWJhLmhrIiwiXHU3ZDQ0XHU3ZTU0LmhrIiwiXHU3ZDQ0XHU3ZWM3LmhrIiwiXHU3ZGIyXHU3'@;
put 'ZDYxLmhrIiwiXHU3ZGIyXHU3ZWRjLmhrIiwiXHU3ZWM0XHU3ZTU0LmhrIiwiXHU3ZWM0XHU3ZWM3LmhrIiwiXHU3ZjUxXHU3ZDYxLmhrIiwiXHU3ZjUxXHU3ZWRjLmhrIiwiaG0iLCJobiIsImNvbS5obiIsImVkdS5obiIsImdvYi5obiIsIm1pbC5obiIsIm5ldC5obiIsIm9yZy5obiIsImhy'@;
put 'IiwiY29tLmhyIiwiZnJvbS5ociIsIml6LmhyIiwibmFtZS5ociIsImh0IiwiYWR1bHQuaHQiLCJhcnQuaHQiLCJhc3NvLmh0IiwiY29tLmh0IiwiY29vcC5odCIsImVkdS5odCIsImZpcm0uaHQiLCJnb3V2Lmh0IiwiaW5mby5odCIsIm1lZC5odCIsIm5ldC5odCIsIm9yZy5odCIsInBlcnNv'@;
put 'Lmh0IiwicG9sLmh0IiwicHJvLmh0IiwicmVsLmh0Iiwic2hvcC5odCIsImh1IiwiMjAwMC5odSIsImFncmFyLmh1IiwiYm9sdC5odSIsImNhc2luby5odSIsImNpdHkuaHUiLCJjby5odSIsImVyb3RpY2EuaHUiLCJlcm90aWthLmh1IiwiZmlsbS5odSIsImZvcnVtLmh1IiwiZ2FtZXMuaHUi'@;
put 'LCJob3RlbC5odSIsImluZm8uaHUiLCJpbmdhdGxhbi5odSIsImpvZ2Fzei5odSIsImtvbnl2ZWxvLmh1IiwibGFrYXMuaHUiLCJtZWRpYS5odSIsIm5ld3MuaHUiLCJvcmcuaHUiLCJwcml2Lmh1IiwicmVrbGFtLmh1Iiwic2V4Lmh1Iiwic2hvcC5odSIsInNwb3J0Lmh1Iiwic3VsaS5odSIs'@;
put 'InN6ZXguaHUiLCJ0bS5odSIsInRvenNkZS5odSIsInV0YXphcy5odSIsInZpZGVvLmh1IiwiaWQiLCJhYy5pZCIsImJpei5pZCIsImNvLmlkIiwiZGVzYS5pZCIsImdvLmlkIiwibWlsLmlkIiwibXkuaWQiLCJuZXQuaWQiLCJvci5pZCIsInBvbnBlcy5pZCIsInNjaC5pZCIsIndlYi5pZCIs'@;
put 'ImllIiwiZ292LmllIiwiaWwiLCJhYy5pbCIsImNvLmlsIiwiZ292LmlsIiwiaWRmLmlsIiwiazEyLmlsIiwibXVuaS5pbCIsIm5ldC5pbCIsIm9yZy5pbCIsIlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVkMFx1MDVlN1x1MDVkM1x1MDVkZVx1MDVkOVx1MDVkNC5cdTA1'@;
put 'ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZDlcdTA1ZTlcdTA1ZDVcdTA1ZDEuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWU2XHUwNWQ0XHUwNWRjLlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVkZVx1MDVkZVx1MDVlOVx1MDVkYy5c'@;
put 'dTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMiLCJpbSIsImFjLmltIiwiY28uaW0iLCJsdGQuY28uaW0iLCJwbGMuY28uaW0iLCJjb20uaW0iLCJuZXQuaW0iLCJvcmcuaW0iLCJ0dC5pbSIsInR2LmltIiwiaW4iLCI1Zy5pbiIsIjZnLmluIiwiYWMuaW4iLCJhaS5pbiIsImFtLmluIiwi'@;
put 'YmloYXIuaW4iLCJiaXouaW4iLCJidXNpbmVzcy5pbiIsImNhLmluIiwiY24uaW4iLCJjby5pbiIsImNvbS5pbiIsImNvb3AuaW4iLCJjcy5pbiIsImRlbGhpLmluIiwiZHIuaW4iLCJlZHUuaW4iLCJlci5pbiIsImZpcm0uaW4iLCJnZW4uaW4iLCJnb3YuaW4iLCJndWphcmF0LmluIiwiaW5k'@;
put 'LmluIiwiaW5mby5pbiIsImludC5pbiIsImludGVybmV0LmluIiwiaW8uaW4iLCJtZS5pbiIsIm1pbC5pbiIsIm5ldC5pbiIsIm5pYy5pbiIsIm9yZy5pbiIsInBnLmluIiwicG9zdC5pbiIsInByby5pbiIsInJlcy5pbiIsInRyYXZlbC5pbiIsInR2LmluIiwidWsuaW4iLCJ1cC5pbiIsInVz'@;
put 'LmluIiwiaW5mbyIsImludCIsImV1LmludCIsImlvIiwiY28uaW8iLCJjb20uaW8iLCJlZHUuaW8iLCJnb3YuaW8iLCJtaWwuaW8iLCJuZXQuaW8iLCJub20uaW8iLCJvcmcuaW8iLCJpcSIsImNvbS5pcSIsImVkdS5pcSIsImdvdi5pcSIsIm1pbC5pcSIsIm5ldC5pcSIsIm9yZy5pcSIsImly'@;
put 'IiwiYWMuaXIiLCJjby5pciIsImdvdi5pciIsImlkLmlyIiwibmV0LmlyIiwib3JnLmlyIiwic2NoLmlyIiwiXHUwNjI3XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2LmlyIiwiXHUwNjI3XHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2LmlyIiwiaXMiLCJpdCIsImVkdS5pdCIsImdvdi5pdCIsImFi'@;
put 'ci5pdCIsImFicnV6em8uaXQiLCJhb3N0YS12YWxsZXkuaXQiLCJhb3N0YXZhbGxleS5pdCIsImJhcy5pdCIsImJhc2lsaWNhdGEuaXQiLCJjYWwuaXQiLCJjYWxhYnJpYS5pdCIsImNhbS5pdCIsImNhbXBhbmlhLml0IiwiZW1pbGlhLXJvbWFnbmEuaXQiLCJlbWlsaWFyb21hZ25hLml0Iiwi'@;
put 'ZW1yLml0IiwiZnJpdWxpLXYtZ2l1bGlhLml0IiwiZnJpdWxpLXZlLWdpdWxpYS5pdCIsImZyaXVsaS12ZWdpdWxpYS5pdCIsImZyaXVsaS12ZW5lemlhLWdpdWxpYS5pdCIsImZyaXVsaS12ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpLXZnaXVsaWEuaXQiLCJmcml1bGl2LWdpdWxpYS5pdCIs'@;
put 'ImZyaXVsaXZlLWdpdWxpYS5pdCIsImZyaXVsaXZlZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGl2ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpdmdpdWxpYS5pdCIsImZ2Zy5pdCIsImxhei5pdCIsImxhemlvLml0IiwibGlnLml0IiwibGlndXJpYS5pdCIsImxv'@;
put 'bS5pdCIsImxvbWJhcmRpYS5pdCIsImxvbWJhcmR5Lml0IiwibHVjYW5pYS5pdCIsIm1hci5pdCIsIm1hcmNoZS5pdCIsIm1vbC5pdCIsIm1vbGlzZS5pdCIsInBpZWRtb250Lml0IiwicGllbW9udGUuaXQiLCJwbW4uaXQiLCJwdWcuaXQiLCJwdWdsaWEuaXQiLCJzYXIuaXQiLCJzYXJkZWdu'@;
put 'YS5pdCIsInNhcmRpbmlhLml0Iiwic2ljLml0Iiwic2ljaWxpYS5pdCIsInNpY2lseS5pdCIsInRhYS5pdCIsInRvcy5pdCIsInRvc2NhbmEuaXQiLCJ0cmVudGluLXN1ZC10aXJvbC5pdCIsInRyZW50aW4tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbi1zdWR0aXJvbC5pdCIsInRyZW50aW4t'@;
put 'c1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluLXN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vLml0IiwidHJlbnRpbm8tYS1hZGlnZS5pdCIsInRyZW50aW5vLWFhZGlnZS5pdCIsInRyZW50aW5vLWFsdG8tYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvYWRpZ2Uu'@;
put 'aXQiLCJ0cmVudGluby1zLXRpcm9sLml0IiwidHJlbnRpbm8tc3Rpcm9sLml0IiwidHJlbnRpbm8tc3VkLXRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VkdGlyb2wuaXQiLCJ0cmVudGluby1zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5vLXN1ZWQtdGly'@;
put 'b2wuaXQiLCJ0cmVudGluby1zdWVkdGlyb2wuaXQiLCJ0cmVudGlub2EtYWRpZ2UuaXQiLCJ0cmVudGlub2FhZGlnZS5pdCIsInRyZW50aW5vYWx0by1hZGlnZS5pdCIsInRyZW50aW5vYWx0b2FkaWdlLml0IiwidHJlbnRpbm9zLXRpcm9sLml0IiwidHJlbnRpbm9zdGlyb2wuaXQiLCJ0cmVu'@;
put 'dGlub3N1ZC10aXJvbC5pdCIsInRyZW50aW5vc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbm9zdWR0aXJvbC5pdCIsInRyZW50aW5vc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWQtdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWR0aXJvbC5pdCIsInRyZW50aW5zdWQtdGlyb2wuaXQiLCJ0cmVu'@;
put 'dGluc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbnN1ZHRpcm9sLml0IiwidHJlbnRpbnNceGZjZHRpcm9sLml0IiwidHJlbnRpbnN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluc3VlZHRpcm9sLml0IiwidHVzY2FueS5pdCIsInVtYi5pdCIsInVtYnJpYS5pdCIsInZhbC1kLWFvc3RhLml0IiwidmFs'@;
put 'LWRhb3N0YS5pdCIsInZhbGQtYW9zdGEuaXQiLCJ2YWxkYW9zdGEuaXQiLCJ2YWxsZS1hb3N0YS5pdCIsInZhbGxlLWQtYW9zdGEuaXQiLCJ2YWxsZS1kYW9zdGEuaXQiLCJ2YWxsZWFvc3RhLml0IiwidmFsbGVkLWFvc3RhLml0IiwidmFsbGVkYW9zdGEuaXQiLCJ2YWxsZWUtYW9zdGUuaXQi'@;
put 'LCJ2YWxsXHhlOWUtYW9zdGUuaXQiLCJ2YWxsZWUtZC1hb3N0ZS5pdCIsInZhbGxceGU5ZS1kLWFvc3RlLml0IiwidmFsbGVlYW9zdGUuaXQiLCJ2YWxsXHhlOWVhb3N0ZS5pdCIsInZhbGxlZWRhb3N0ZS5pdCIsInZhbGxceGU5ZWRhb3N0ZS5pdCIsInZhby5pdCIsInZkYS5pdCIsInZlbi5p'@;
put 'dCIsInZlbmV0by5pdCIsImFnLml0IiwiYWdyaWdlbnRvLml0IiwiYWwuaXQiLCJhbGVzc2FuZHJpYS5pdCIsImFsdG8tYWRpZ2UuaXQiLCJhbHRvYWRpZ2UuaXQiLCJhbi5pdCIsImFuY29uYS5pdCIsImFuZHJpYS1iYXJsZXR0YS10cmFuaS5pdCIsImFuZHJpYS10cmFuaS1iYXJsZXR0YS5p'@;
put 'dCIsImFuZHJpYWJhcmxldHRhdHJhbmkuaXQiLCJhbmRyaWF0cmFuaWJhcmxldHRhLml0IiwiYW8uaXQiLCJhb3N0YS5pdCIsImFvc3RlLml0IiwiYXAuaXQiLCJhcS5pdCIsImFxdWlsYS5pdCIsImFyLml0IiwiYXJlenpvLml0IiwiYXNjb2xpLXBpY2Vuby5pdCIsImFzY29saXBpY2Vuby5p'@;
put 'dCIsImFzdGkuaXQiLCJhdC5pdCIsImF2Lml0IiwiYXZlbGxpbm8uaXQiLCJiYS5pdCIsImJhbHNhbi5pdCIsImJhbHNhbi1zdWR0aXJvbC5pdCIsImJhbHNhbi1zXHhmY2R0aXJvbC5pdCIsImJhbHNhbi1zdWVkdGlyb2wuaXQiLCJiYXJpLml0IiwiYmFybGV0dGEtdHJhbmktYW5kcmlhLml0'@;
put 'IiwiYmFybGV0dGF0cmFuaWFuZHJpYS5pdCIsImJlbGx1bm8uaXQiLCJiZW5ldmVudG8uaXQiLCJiZXJnYW1vLml0IiwiYmcuaXQiLCJiaS5pdCIsImJpZWxsYS5pdCIsImJsLml0IiwiYm4uaXQiLCJiby5pdCIsImJvbG9nbmEuaXQiLCJib2x6YW5vLml0IiwiYm9semFuby1hbHRvYWRpZ2Uu'@;
put 'aXQiLCJib3plbi5pdCIsImJvemVuLXN1ZHRpcm9sLml0IiwiYm96ZW4tc1x4ZmNkdGlyb2wuaXQiLCJib3plbi1zdWVkdGlyb2wuaXQiLCJici5pdCIsImJyZXNjaWEuaXQiLCJicmluZGlzaS5pdCIsImJzLml0IiwiYnQuaXQiLCJidWxzYW4uaXQiLCJidWxzYW4tc3VkdGlyb2wuaXQiLCJi'@;
put 'dWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJidWxzYW4tc3VlZHRpcm9sLml0IiwiYnouaXQiLCJjYS5pdCIsImNhZ2xpYXJpLml0IiwiY2FsdGFuaXNzZXR0YS5pdCIsImNhbXBpZGFuby1tZWRpby5pdCIsImNhbXBpZGFub21lZGlvLml0IiwiY2FtcG9iYXNzby5pdCIsImNhcmJvbmlhLWlnbGVz'@;
put 'aWFzLml0IiwiY2FyYm9uaWFpZ2xlc2lhcy5pdCIsImNhcnJhcmEtbWFzc2EuaXQiLCJjYXJyYXJhbWFzc2EuaXQiLCJjYXNlcnRhLml0IiwiY2F0YW5pYS5pdCIsImNhdGFuemFyby5pdCIsImNiLml0IiwiY2UuaXQiLCJjZXNlbmEtZm9ybGkuaXQiLCJjZXNlbmEtZm9ybFx4ZWMuaXQiLCJj'@;
put 'ZXNlbmFmb3JsaS5pdCIsImNlc2VuYWZvcmxceGVjLml0IiwiY2guaXQiLCJjaGlldGkuaXQiLCJjaS5pdCIsImNsLml0IiwiY24uaXQiLCJjby5pdCIsImNvbW8uaXQiLCJjb3NlbnphLml0IiwiY3IuaXQiLCJjcmVtb25hLml0IiwiY3JvdG9uZS5pdCIsImNzLml0IiwiY3QuaXQiLCJjdW5l'@;
put 'by5pdCIsImN6Lml0IiwiZGVsbC1vZ2xpYXN0cmEuaXQiLCJkZWxsb2dsaWFzdHJhLml0IiwiZW4uaXQiLCJlbm5hLml0IiwiZmMuaXQiLCJmZS5pdCIsImZlcm1vLml0IiwiZmVycmFyYS5pdCIsImZnLml0IiwiZmkuaXQiLCJmaXJlbnplLml0IiwiZmxvcmVuY2UuaXQiLCJmbS5pdCIsImZv'@;
put 'Z2dpYS5pdCIsImZvcmxpLWNlc2VuYS5pdCIsImZvcmxceGVjLWNlc2VuYS5pdCIsImZvcmxpY2VzZW5hLml0IiwiZm9ybFx4ZWNjZXNlbmEuaXQiLCJmci5pdCIsImZyb3Npbm9uZS5pdCIsImdlLml0IiwiZ2Vub2EuaXQiLCJnZW5vdmEuaXQiLCJnby5pdCIsImdvcml6aWEuaXQiLCJnci5p'@;
put 'dCIsImdyb3NzZXRvLml0IiwiaWdsZXNpYXMtY2FyYm9uaWEuaXQiLCJpZ2xlc2lhc2NhcmJvbmlhLml0IiwiaW0uaXQiLCJpbXBlcmlhLml0IiwiaXMuaXQiLCJpc2VybmlhLml0Iiwia3IuaXQiLCJsYS1zcGV6aWEuaXQiLCJsYXF1aWxhLml0IiwibGFzcGV6aWEuaXQiLCJsYXRpbmEuaXQi'@;
put 'LCJsYy5pdCIsImxlLml0IiwibGVjY2UuaXQiLCJsZWNjby5pdCIsImxpLml0IiwibGl2b3Juby5pdCIsImxvLml0IiwibG9kaS5pdCIsImx0Lml0IiwibHUuaXQiLCJsdWNjYS5pdCIsIm1hY2VyYXRhLml0IiwibWFudG92YS5pdCIsIm1hc3NhLWNhcnJhcmEuaXQiLCJtYXNzYWNhcnJhcmEu'@;
put 'aXQiLCJtYXRlcmEuaXQiLCJtYi5pdCIsIm1jLml0IiwibWUuaXQiLCJtZWRpby1jYW1waWRhbm8uaXQiLCJtZWRpb2NhbXBpZGFuby5pdCIsIm1lc3NpbmEuaXQiLCJtaS5pdCIsIm1pbGFuLml0IiwibWlsYW5vLml0IiwibW4uaXQiLCJtby5pdCIsIm1vZGVuYS5pdCIsIm1vbnphLml0Iiwi'@;
put 'bW9uemEtYnJpYW56YS5pdCIsIm1vbnphLWUtZGVsbGEtYnJpYW56YS5pdCIsIm1vbnphYnJpYW56YS5pdCIsIm1vbnphZWJyaWFuemEuaXQiLCJtb256YWVkZWxsYWJyaWFuemEuaXQiLCJtcy5pdCIsIm10Lml0IiwibmEuaXQiLCJuYXBsZXMuaXQiLCJuYXBvbGkuaXQiLCJuby5pdCIsIm5v'@;
put 'dmFyYS5pdCIsIm51Lml0IiwibnVvcm8uaXQiLCJvZy5pdCIsIm9nbGlhc3RyYS5pdCIsIm9sYmlhLXRlbXBpby5pdCIsIm9sYmlhdGVtcGlvLml0Iiwib3IuaXQiLCJvcmlzdGFuby5pdCIsIm90Lml0IiwicGEuaXQiLCJwYWRvdmEuaXQiLCJwYWR1YS5pdCIsInBhbGVybW8uaXQiLCJwYXJt'@;
put 'YS5pdCIsInBhdmlhLml0IiwicGMuaXQiLCJwZC5pdCIsInBlLml0IiwicGVydWdpYS5pdCIsInBlc2Fyby11cmJpbm8uaXQiLCJwZXNhcm91cmJpbm8uaXQiLCJwZXNjYXJhLml0IiwicGcuaXQiLCJwaS5pdCIsInBpYWNlbnphLml0IiwicGlzYS5pdCIsInBpc3RvaWEuaXQiLCJwbi5pdCIs'@;
put 'InBvLml0IiwicG9yZGVub25lLml0IiwicG90ZW56YS5pdCIsInByLml0IiwicHJhdG8uaXQiLCJwdC5pdCIsInB1Lml0IiwicHYuaXQiLCJwei5pdCIsInJhLml0IiwicmFndXNhLml0IiwicmF2ZW5uYS5pdCIsInJjLml0IiwicmUuaXQiLCJyZWdnaW8tY2FsYWJyaWEuaXQiLCJyZWdnaW8t'@;
put 'ZW1pbGlhLml0IiwicmVnZ2lvY2FsYWJyaWEuaXQiLCJyZWdnaW9lbWlsaWEuaXQiLCJyZy5pdCIsInJpLml0IiwicmlldGkuaXQiLCJyaW1pbmkuaXQiLCJybS5pdCIsInJuLml0Iiwicm8uaXQiLCJyb21hLml0Iiwicm9tZS5pdCIsInJvdmlnby5pdCIsInNhLml0Iiwic2FsZXJuby5pdCIs'@;
put 'InNhc3NhcmkuaXQiLCJzYXZvbmEuaXQiLCJzaS5pdCIsInNpZW5hLml0Iiwic2lyYWN1c2EuaXQiLCJzby5pdCIsInNvbmRyaW8uaXQiLCJzcC5pdCIsInNyLml0Iiwic3MuaXQiLCJzXHhmY2R0aXJvbC5pdCIsInN1ZWR0aXJvbC5pdCIsInN2Lml0IiwidGEuaXQiLCJ0YXJhbnRvLml0Iiwi'@;
put 'dGUuaXQiLCJ0ZW1waW8tb2xiaWEuaXQiLCJ0ZW1waW9vbGJpYS5pdCIsInRlcmFtby5pdCIsInRlcm5pLml0IiwidG4uaXQiLCJ0by5pdCIsInRvcmluby5pdCIsInRwLml0IiwidHIuaXQiLCJ0cmFuaS1hbmRyaWEtYmFybGV0dGEuaXQiLCJ0cmFuaS1iYXJsZXR0YS1hbmRyaWEuaXQiLCJ0'@;
put 'cmFuaWFuZHJpYWJhcmxldHRhLml0IiwidHJhbmliYXJsZXR0YWFuZHJpYS5pdCIsInRyYXBhbmkuaXQiLCJ0cmVudG8uaXQiLCJ0cmV2aXNvLml0IiwidHJpZXN0ZS5pdCIsInRzLml0IiwidHVyaW4uaXQiLCJ0di5pdCIsInVkLml0IiwidWRpbmUuaXQiLCJ1cmJpbm8tcGVzYXJvLml0Iiwi'@;
put 'dXJiaW5vcGVzYXJvLml0IiwidmEuaXQiLCJ2YXJlc2UuaXQiLCJ2Yi5pdCIsInZjLml0IiwidmUuaXQiLCJ2ZW5lemlhLml0IiwidmVuaWNlLml0IiwidmVyYmFuaWEuaXQiLCJ2ZXJjZWxsaS5pdCIsInZlcm9uYS5pdCIsInZpLml0Iiwidmliby12YWxlbnRpYS5pdCIsInZpYm92YWxlbnRp'@;
put 'YS5pdCIsInZpY2VuemEuaXQiLCJ2aXRlcmJvLml0IiwidnIuaXQiLCJ2cy5pdCIsInZ0Lml0IiwidnYuaXQiLCJqZSIsImNvLmplIiwibmV0LmplIiwib3JnLmplIiwiKi5qbSIsImpvIiwiYWdyaS5qbyIsImFpLmpvIiwiY29tLmpvIiwiZWR1LmpvIiwiZW5nLmpvIiwiZm0uam8iLCJnb3Yu'@;
put 'am8iLCJtaWwuam8iLCJuZXQuam8iLCJvcmcuam8iLCJwZXIuam8iLCJwaGQuam8iLCJzY2guam8iLCJ0di5qbyIsImpvYnMiLCJqcCIsImFjLmpwIiwiYWQuanAiLCJjby5qcCIsImVkLmpwIiwiZ28uanAiLCJnci5qcCIsImxnLmpwIiwibmUuanAiLCJvci5qcCIsImFpY2hpLmpwIiwiYWtp'@;
put 'dGEuanAiLCJhb21vcmkuanAiLCJjaGliYS5qcCIsImVoaW1lLmpwIiwiZnVrdWkuanAiLCJmdWt1b2thLmpwIiwiZnVrdXNoaW1hLmpwIiwiZ2lmdS5qcCIsImd1bm1hLmpwIiwiaGlyb3NoaW1hLmpwIiwiaG9ra2FpZG8uanAiLCJoeW9nby5qcCIsImliYXJha2kuanAiLCJpc2hpa2F3YS5q'@;
put 'cCIsIml3YXRlLmpwIiwia2FnYXdhLmpwIiwia2Fnb3NoaW1hLmpwIiwia2FuYWdhd2EuanAiLCJrb2NoaS5qcCIsImt1bWFtb3RvLmpwIiwia3lvdG8uanAiLCJtaWUuanAiLCJtaXlhZ2kuanAiLCJtaXlhemFraS5qcCIsIm5hZ2Fuby5qcCIsIm5hZ2FzYWtpLmpwIiwibmFyYS5qcCIsIm5p'@;
put 'aWdhdGEuanAiLCJvaXRhLmpwIiwib2theWFtYS5qcCIsIm9raW5hd2EuanAiLCJvc2FrYS5qcCIsInNhZ2EuanAiLCJzYWl0YW1hLmpwIiwic2hpZ2EuanAiLCJzaGltYW5lLmpwIiwic2hpenVva2EuanAiLCJ0b2NoaWdpLmpwIiwidG9rdXNoaW1hLmpwIiwidG9reW8uanAiLCJ0b3R0b3Jp'@;
put 'LmpwIiwidG95YW1hLmpwIiwid2FrYXlhbWEuanAiLCJ5YW1hZ2F0YS5qcCIsInlhbWFndWNoaS5qcCIsInlhbWFuYXNoaS5qcCIsIlx1NGUwOVx1OTFjZC5qcCIsIlx1NGVhY1x1OTBmZC5qcCIsIlx1NGY1MFx1OGNjMC5qcCIsIlx1NTE3NVx1NWVhYi5qcCIsIlx1NTMxN1x1NmQ3N1x1OTA1'@;
put 'My5qcCIsIlx1NTM0M1x1ODQ0OS5qcCIsIlx1NTQ4Y1x1NmI0Y1x1NWM3MS5qcCIsIlx1NTdmY1x1NzM4OS5qcCIsIlx1NTkyN1x1NTIwNi5qcCIsIlx1NTkyN1x1OTYyYS5qcCIsIlx1NTk0OFx1ODI2Zi5qcCIsIlx1NWJhZVx1NTdjZS5qcCIsIlx1NWJhZVx1NWQwZS5qcCIsIlx1NWJjY1x1'@;
put 'NWM3MS5qcCIsIlx1NWM3MVx1NTNlMy5qcCIsIlx1NWM3MVx1NWY2Mi5qcCIsIlx1NWM3MVx1NjhhOC5qcCIsIlx1NWM5MFx1OTYxYy5qcCIsIlx1NWNhMVx1NWM3MS5qcCIsIlx1NWNhOVx1NjI0Yi5qcCIsIlx1NWNmNlx1NjgzOS5qcCIsIlx1NWU4M1x1NWNmNi5qcCIsIlx1NWZiM1x1NWNm'@;
put 'Ni5qcCIsIlx1NjExYlx1NWE5Yi5qcCIsIlx1NjExYlx1NzdlNS5qcCIsIlx1NjViMFx1NmY1Zi5qcCIsIlx1Njc3MVx1NGVhYy5qcCIsIlx1NjgwM1x1NjcyOC5qcCIsIlx1NmM5Nlx1N2UwNC5qcCIsIlx1NmVjYlx1OGNjMC5qcCIsIlx1NzE4YVx1NjcyYy5qcCIsIlx1NzdmM1x1NWRkZC5q'@;
put 'cCIsIlx1Nzk1ZVx1NTk0OFx1NWRkZC5qcCIsIlx1Nzk4Zlx1NGU5NS5qcCIsIlx1Nzk4Zlx1NWNhMS5qcCIsIlx1Nzk4Zlx1NWNmNi5qcCIsIlx1NzljYlx1NzUzMC5qcCIsIlx1N2ZhNFx1OTlhYy5qcCIsIlx1ODMyOFx1NTdjZS5qcCIsIlx1OTU3N1x1NWQwZS5qcCIsIlx1OTU3N1x1OTFj'@;
put 'ZS5qcCIsIlx1OTc1Mlx1NjhlZS5qcCIsIlx1OTc1OVx1NWNhMS5qcCIsIlx1OTk5OVx1NWRkZC5qcCIsIlx1OWFkOFx1NzdlNS5qcCIsIlx1OWNlNVx1NTNkNi5qcCIsIlx1OWU3Zlx1NTE1MFx1NWNmNi5qcCIsIioua2F3YXNha2kuanAiLCIhY2l0eS5rYXdhc2FraS5qcCIsIioua2l0YWt5'@;
put 'dXNodS5qcCIsIiFjaXR5LmtpdGFreXVzaHUuanAiLCIqLmtvYmUuanAiLCIhY2l0eS5rb2JlLmpwIiwiKi5uYWdveWEuanAiLCIhY2l0eS5uYWdveWEuanAiLCIqLnNhcHBvcm8uanAiLCIhY2l0eS5zYXBwb3JvLmpwIiwiKi5zZW5kYWkuanAiLCIhY2l0eS5zZW5kYWkuanAiLCIqLnlva29o'@;
put 'YW1hLmpwIiwiIWNpdHkueW9rb2hhbWEuanAiLCJhaXNhaS5haWNoaS5qcCIsImFtYS5haWNoaS5qcCIsImFuam8uYWljaGkuanAiLCJhc3VrZS5haWNoaS5qcCIsImNoaXJ5dS5haWNoaS5qcCIsImNoaXRhLmFpY2hpLmpwIiwiZnVzby5haWNoaS5qcCIsImdhbWFnb3JpLmFpY2hpLmpwIiwi'@;
put 'aGFuZGEuYWljaGkuanAiLCJoYXp1LmFpY2hpLmpwIiwiaGVraW5hbi5haWNoaS5qcCIsImhpZ2FzaGl1cmEuYWljaGkuanAiLCJpY2hpbm9taXlhLmFpY2hpLmpwIiwiaW5hemF3YS5haWNoaS5qcCIsImludXlhbWEuYWljaGkuanAiLCJpc3NoaWtpLmFpY2hpLmpwIiwiaXdha3VyYS5haWNo'@;
put 'aS5qcCIsImthbmllLmFpY2hpLmpwIiwia2FyaXlhLmFpY2hpLmpwIiwia2FzdWdhaS5haWNoaS5qcCIsImtpcmEuYWljaGkuanAiLCJraXlvc3UuYWljaGkuanAiLCJrb21ha2kuYWljaGkuanAiLCJrb25hbi5haWNoaS5qcCIsImtvdGEuYWljaGkuanAiLCJtaWhhbWEuYWljaGkuanAiLCJt'@;
put 'aXlvc2hpLmFpY2hpLmpwIiwibmlzaGlvLmFpY2hpLmpwIiwibmlzc2hpbi5haWNoaS5qcCIsIm9idS5haWNoaS5qcCIsIm9ndWNoaS5haWNoaS5qcCIsIm9oYXJ1LmFpY2hpLmpwIiwib2themFraS5haWNoaS5qcCIsIm93YXJpYXNhaGkuYWljaGkuanAiLCJzZXRvLmFpY2hpLmpwIiwic2hp'@;
put 'a2F0c3UuYWljaGkuanAiLCJzaGluc2hpcm8uYWljaGkuanAiLCJzaGl0YXJhLmFpY2hpLmpwIiwidGFoYXJhLmFpY2hpLmpwIiwidGFrYWhhbWEuYWljaGkuanAiLCJ0b2Jpc2hpbWEuYWljaGkuanAiLCJ0b2VpLmFpY2hpLmpwIiwidG9nby5haWNoaS5qcCIsInRva2FpLmFpY2hpLmpwIiwi'@;
put 'dG9rb25hbWUuYWljaGkuanAiLCJ0b3lvYWtlLmFpY2hpLmpwIiwidG95b2hhc2hpLmFpY2hpLmpwIiwidG95b2thd2EuYWljaGkuanAiLCJ0b3lvbmUuYWljaGkuanAiLCJ0b3lvdGEuYWljaGkuanAiLCJ0c3VzaGltYS5haWNoaS5qcCIsInlhdG9taS5haWNoaS5qcCIsImFraXRhLmFraXRh'@;
put 'LmpwIiwiZGFpc2VuLmFraXRhLmpwIiwiZnVqaXNhdG8uYWtpdGEuanAiLCJnb2pvbWUuYWtpdGEuanAiLCJoYWNoaXJvZ2F0YS5ha2l0YS5qcCIsImhhcHBvdS5ha2l0YS5qcCIsImhpZ2FzaGluYXJ1c2UuYWtpdGEuanAiLCJob25qby5ha2l0YS5qcCIsImhvbmp5by5ha2l0YS5qcCIsImlr'@;
put 'YXdhLmFraXRhLmpwIiwia2FtaWtvYW5pLmFraXRhLmpwIiwia2FtaW9rYS5ha2l0YS5qcCIsImthdGFnYW1pLmFraXRhLmpwIiwia2F6dW5vLmFraXRhLmpwIiwia2l0YWFraXRhLmFraXRhLmpwIiwia29zYWthLmFraXRhLmpwIiwia3lvd2EuYWtpdGEuanAiLCJtaXNhdG8uYWtpdGEuanAi'@;
put 'LCJtaXRhbmUuYWtpdGEuanAiLCJtb3JpeW9zaGkuYWtpdGEuanAiLCJuaWthaG8uYWtpdGEuanAiLCJub3NoaXJvLmFraXRhLmpwIiwib2RhdGUuYWtpdGEuanAiLCJvZ2EuYWtpdGEuanAiLCJvZ2F0YS5ha2l0YS5qcCIsInNlbWJva3UuYWtpdGEuanAiLCJ5b2tvdGUuYWtpdGEuanAiLCJ5'@;
put 'dXJpaG9uam8uYWtpdGEuanAiLCJhb21vcmkuYW9tb3JpLmpwIiwiZ29ub2hlLmFvbW9yaS5qcCIsImhhY2hpbm9oZS5hb21vcmkuanAiLCJoYXNoaWthbWkuYW9tb3JpLmpwIiwiaGlyYW5haS5hb21vcmkuanAiLCJoaXJvc2FraS5hb21vcmkuanAiLCJpdGF5YW5hZ2kuYW9tb3JpLmpwIiwi'@;
put 'a3Vyb2lzaGkuYW9tb3JpLmpwIiwibWlzYXdhLmFvbW9yaS5qcCIsIm11dHN1LmFvbW9yaS5qcCIsIm5ha2Fkb21hcmkuYW9tb3JpLmpwIiwibm9oZWppLmFvbW9yaS5qcCIsIm9pcmFzZS5hb21vcmkuanAiLCJvd2FuaS5hb21vcmkuanAiLCJyb2t1bm9oZS5hb21vcmkuanAiLCJzYW5ub2hl'@;
put 'LmFvbW9yaS5qcCIsInNoaWNoaW5vaGUuYW9tb3JpLmpwIiwic2hpbmdvLmFvbW9yaS5qcCIsInRha2tvLmFvbW9yaS5qcCIsInRvd2FkYS5hb21vcmkuanAiLCJ0c3VnYXJ1LmFvbW9yaS5qcCIsInRzdXJ1dGEuYW9tb3JpLmpwIiwiYWJpa28uY2hpYmEuanAiLCJhc2FoaS5jaGliYS5qcCIs'@;
put 'ImNob25hbi5jaGliYS5qcCIsImNob3NlaS5jaGliYS5qcCIsImNob3NoaS5jaGliYS5qcCIsImNodW8uY2hpYmEuanAiLCJmdW5hYmFzaGkuY2hpYmEuanAiLCJmdXR0c3UuY2hpYmEuanAiLCJoYW5hbWlnYXdhLmNoaWJhLmpwIiwiaWNoaWhhcmEuY2hpYmEuanAiLCJpY2hpa2F3YS5jaGli'@;
put 'YS5qcCIsImljaGlub21peWEuY2hpYmEuanAiLCJpbnphaS5jaGliYS5qcCIsImlzdW1pLmNoaWJhLmpwIiwia2FtYWdheWEuY2hpYmEuanAiLCJrYW1vZ2F3YS5jaGliYS5qcCIsImthc2hpd2EuY2hpYmEuanAiLCJrYXRvcmkuY2hpYmEuanAiLCJrYXRzdXVyYS5jaGliYS5qcCIsImtpbWl0'@;
put 'c3UuY2hpYmEuanAiLCJraXNhcmF6dS5jaGliYS5qcCIsImtvemFraS5jaGliYS5qcCIsImt1anVrdXJpLmNoaWJhLmpwIiwia3lvbmFuLmNoaWJhLmpwIiwibWF0c3Vkby5jaGliYS5qcCIsIm1pZG9yaS5jaGliYS5qcCIsIm1paGFtYS5jaGliYS5qcCIsIm1pbmFtaWJvc28uY2hpYmEuanAi'@;
put 'LCJtb2JhcmEuY2hpYmEuanAiLCJtdXRzdXphd2EuY2hpYmEuanAiLCJuYWdhcmEuY2hpYmEuanAiLCJuYWdhcmV5YW1hLmNoaWJhLmpwIiwibmFyYXNoaW5vLmNoaWJhLmpwIiwibmFyaXRhLmNoaWJhLmpwIiwibm9kYS5jaGliYS5qcCIsIm9hbWlzaGlyYXNhdG8uY2hpYmEuanAiLCJvbWln'@;
put 'YXdhLmNoaWJhLmpwIiwib25qdWt1LmNoaWJhLmpwIiwib3Rha2kuY2hpYmEuanAiLCJzYWthZS5jaGliYS5qcCIsInNha3VyYS5jaGliYS5qcCIsInNoaW1vZnVzYS5jaGliYS5qcCIsInNoaXJha28uY2hpYmEuanAiLCJzaGlyb2kuY2hpYmEuanAiLCJzaGlzdWkuY2hpYmEuanAiLCJzb2Rl'@;
put 'Z2F1cmEuY2hpYmEuanAiLCJzb3NhLmNoaWJhLmpwIiwidGFrby5jaGliYS5qcCIsInRhdGV5YW1hLmNoaWJhLmpwIiwidG9nYW5lLmNoaWJhLmpwIiwidG9obm9zaG8uY2hpYmEuanAiLCJ0b21pc2F0by5jaGliYS5qcCIsInVyYXlhc3UuY2hpYmEuanAiLCJ5YWNoaW1hdGEuY2hpYmEuanAi'@;
put 'LCJ5YWNoaXlvLmNoaWJhLmpwIiwieW9rYWljaGliYS5jaGliYS5qcCIsInlva29zaGliYWhpa2FyaS5jaGliYS5qcCIsInlvdHN1a2FpZG8uY2hpYmEuanAiLCJhaW5hbi5laGltZS5qcCIsImhvbmFpLmVoaW1lLmpwIiwiaWthdGEuZWhpbWUuanAiLCJpbWFiYXJpLmVoaW1lLmpwIiwiaXlv'@;
put 'LmVoaW1lLmpwIiwia2FtaWppbWEuZWhpbWUuanAiLCJraWhva3UuZWhpbWUuanAiLCJrdW1ha29nZW4uZWhpbWUuanAiLCJtYXNha2kuZWhpbWUuanAiLCJtYXRzdW5vLmVoaW1lLmpwIiwibWF0c3V5YW1hLmVoaW1lLmpwIiwibmFtaWthdGEuZWhpbWUuanAiLCJuaWloYW1hLmVoaW1lLmpw'@;
put 'Iiwib3p1LmVoaW1lLmpwIiwic2Fpam8uZWhpbWUuanAiLCJzZWl5by5laGltZS5qcCIsInNoaWtva3VjaHVvLmVoaW1lLmpwIiwidG9iZS5laGltZS5qcCIsInRvb24uZWhpbWUuanAiLCJ1Y2hpa28uZWhpbWUuanAiLCJ1d2FqaW1hLmVoaW1lLmpwIiwieWF3YXRhaGFtYS5laGltZS5qcCIs'@;
put 'ImVjaGl6ZW4uZnVrdWkuanAiLCJlaWhlaWppLmZ1a3VpLmpwIiwiZnVrdWkuZnVrdWkuanAiLCJpa2VkYS5mdWt1aS5qcCIsImthdHN1eWFtYS5mdWt1aS5qcCIsIm1paGFtYS5mdWt1aS5qcCIsIm1pbmFtaWVjaGl6ZW4uZnVrdWkuanAiLCJvYmFtYS5mdWt1aS5qcCIsIm9oaS5mdWt1aS5q'@;
put 'cCIsIm9uby5mdWt1aS5qcCIsInNhYmFlLmZ1a3VpLmpwIiwic2FrYWkuZnVrdWkuanAiLCJ0YWthaGFtYS5mdWt1aS5qcCIsInRzdXJ1Z2EuZnVrdWkuanAiLCJ3YWthc2EuZnVrdWkuanAiLCJhc2hpeWEuZnVrdW9rYS5qcCIsImJ1emVuLmZ1a3Vva2EuanAiLCJjaGlrdWdvLmZ1a3Vva2Eu'@;
put 'anAiLCJjaGlrdWhvLmZ1a3Vva2EuanAiLCJjaGlrdWpvLmZ1a3Vva2EuanAiLCJjaGlrdXNoaW5vLmZ1a3Vva2EuanAiLCJjaGlrdXplbi5mdWt1b2thLmpwIiwiY2h1by5mdWt1b2thLmpwIiwiZGF6YWlmdS5mdWt1b2thLmpwIiwiZnVrdWNoaS5mdWt1b2thLmpwIiwiaGFrYXRhLmZ1a3Vv'@;
put 'a2EuanAiLCJoaWdhc2hpLmZ1a3Vva2EuanAiLCJoaXJva2F3YS5mdWt1b2thLmpwIiwiaGlzYXlhbWEuZnVrdW9rYS5qcCIsImlpenVrYS5mdWt1b2thLmpwIiwiaW5hdHN1a2kuZnVrdW9rYS5qcCIsImthaG8uZnVrdW9rYS5qcCIsImthc3VnYS5mdWt1b2thLmpwIiwia2FzdXlhLmZ1a3Vv'@;
put 'a2EuanAiLCJrYXdhcmEuZnVrdW9rYS5qcCIsImtlaXNlbi5mdWt1b2thLmpwIiwia29nYS5mdWt1b2thLmpwIiwia3VyYXRlLmZ1a3Vva2EuanAiLCJrdXJvZ2kuZnVrdW9rYS5qcCIsImt1cnVtZS5mdWt1b2thLmpwIiwibWluYW1pLmZ1a3Vva2EuanAiLCJtaXlha28uZnVrdW9rYS5qcCIs'@;
put 'Im1peWFtYS5mdWt1b2thLmpwIiwibWl5YXdha2EuZnVrdW9rYS5qcCIsIm1penVtYWtpLmZ1a3Vva2EuanAiLCJtdW5ha2F0YS5mdWt1b2thLmpwIiwibmFrYWdhd2EuZnVrdW9rYS5qcCIsIm5ha2FtYS5mdWt1b2thLmpwIiwibmlzaGkuZnVrdW9rYS5qcCIsIm5vZ2F0YS5mdWt1b2thLmpw'@;
put 'Iiwib2dvcmkuZnVrdW9rYS5qcCIsIm9rYWdha2kuZnVrdW9rYS5qcCIsIm9rYXdhLmZ1a3Vva2EuanAiLCJva2kuZnVrdW9rYS5qcCIsIm9tdXRhLmZ1a3Vva2EuanAiLCJvbmdhLmZ1a3Vva2EuanAiLCJvbm9qby5mdWt1b2thLmpwIiwib3RvLmZ1a3Vva2EuanAiLCJzYWlnYXdhLmZ1a3Vv'@;
put 'a2EuanAiLCJzYXNhZ3VyaS5mdWt1b2thLmpwIiwic2hpbmd1LmZ1a3Vva2EuanAiLCJzaGlueW9zaGl0b21pLmZ1a3Vva2EuanAiLCJzaG9uYWkuZnVrdW9rYS5qcCIsInNvZWRhLmZ1a3Vva2EuanAiLCJzdWUuZnVrdW9rYS5qcCIsInRhY2hpYXJhaS5mdWt1b2thLmpwIiwidGFnYXdhLmZ1'@;
put 'a3Vva2EuanAiLCJ0YWthdGEuZnVrdW9rYS5qcCIsInRvaG8uZnVrdW9rYS5qcCIsInRveW90c3UuZnVrdW9rYS5qcCIsInRzdWlraS5mdWt1b2thLmpwIiwidWtpaGEuZnVrdW9rYS5qcCIsInVtaS5mdWt1b2thLmpwIiwidXN1aS5mdWt1b2thLmpwIiwieWFtYWRhLmZ1a3Vva2EuanAiLCJ5'@;
put 'YW1lLmZ1a3Vva2EuanAiLCJ5YW5hZ2F3YS5mdWt1b2thLmpwIiwieXVrdWhhc2hpLmZ1a3Vva2EuanAiLCJhaXp1YmFuZ2UuZnVrdXNoaW1hLmpwIiwiYWl6dW1pc2F0by5mdWt1c2hpbWEuanAiLCJhaXp1d2FrYW1hdHN1LmZ1a3VzaGltYS5qcCIsImFzYWthd2EuZnVrdXNoaW1hLmpwIiwi'@;
put 'YmFuZGFpLmZ1a3VzaGltYS5qcCIsImRhdGUuZnVrdXNoaW1hLmpwIiwiZnVrdXNoaW1hLmZ1a3VzaGltYS5qcCIsImZ1cnVkb25vLmZ1a3VzaGltYS5qcCIsImZ1dGFiYS5mdWt1c2hpbWEuanAiLCJoYW5hd2EuZnVrdXNoaW1hLmpwIiwiaGlnYXNoaS5mdWt1c2hpbWEuanAiLCJoaXJhdGEu'@;
put 'ZnVrdXNoaW1hLmpwIiwiaGlyb25vLmZ1a3VzaGltYS5qcCIsImlpdGF0ZS5mdWt1c2hpbWEuanAiLCJpbmF3YXNoaXJvLmZ1a3VzaGltYS5qcCIsImlzaGlrYXdhLmZ1a3VzaGltYS5qcCIsIml3YWtpLmZ1a3VzaGltYS5qcCIsIml6dW1pemFraS5mdWt1c2hpbWEuanAiLCJrYWdhbWlpc2hp'@;
put 'LmZ1a3VzaGltYS5qcCIsImthbmV5YW1hLmZ1a3VzaGltYS5qcCIsImthd2FtYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFrYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFzaGlvYmFyYS5mdWt1c2hpbWEuanAiLCJrb29yaS5mdWt1c2hpbWEuanAiLCJrb3JpeWFtYS5mdWt1c2hpbWEuanAiLCJrdW5p'@;
put 'bWkuZnVrdXNoaW1hLmpwIiwibWloYXJ1LmZ1a3VzaGltYS5qcCIsIm1pc2hpbWEuZnVrdXNoaW1hLmpwIiwibmFtaWUuZnVrdXNoaW1hLmpwIiwibmFuZ28uZnVrdXNoaW1hLmpwIiwibmlzaGlhaXp1LmZ1a3VzaGltYS5qcCIsIm5pc2hpZ28uZnVrdXNoaW1hLmpwIiwib2t1bWEuZnVrdXNo'@;
put 'aW1hLmpwIiwib21vdGVnby5mdWt1c2hpbWEuanAiLCJvbm8uZnVrdXNoaW1hLmpwIiwib3RhbWEuZnVrdXNoaW1hLmpwIiwic2FtZWdhd2EuZnVrdXNoaW1hLmpwIiwic2hpbW9nby5mdWt1c2hpbWEuanAiLCJzaGlyYWthd2EuZnVrdXNoaW1hLmpwIiwic2hvd2EuZnVrdXNoaW1hLmpwIiwi'@;
put 'c29tYS5mdWt1c2hpbWEuanAiLCJzdWthZ2F3YS5mdWt1c2hpbWEuanAiLCJ0YWlzaGluLmZ1a3VzaGltYS5qcCIsInRhbWFrYXdhLmZ1a3VzaGltYS5qcCIsInRhbmFndXJhLmZ1a3VzaGltYS5qcCIsInRlbmVpLmZ1a3VzaGltYS5qcCIsInlhYnVraS5mdWt1c2hpbWEuanAiLCJ5YW1hdG8u'@;
put 'ZnVrdXNoaW1hLmpwIiwieWFtYXRzdXJpLmZ1a3VzaGltYS5qcCIsInlhbmFpenUuZnVrdXNoaW1hLmpwIiwieXVnYXdhLmZ1a3VzaGltYS5qcCIsImFucGFjaGkuZ2lmdS5qcCIsImVuYS5naWZ1LmpwIiwiZ2lmdS5naWZ1LmpwIiwiZ2luYW4uZ2lmdS5qcCIsImdvZG8uZ2lmdS5qcCIsImd1'@;
put 'am8uZ2lmdS5qcCIsImhhc2hpbWEuZ2lmdS5qcCIsImhpY2hpc28uZ2lmdS5qcCIsImhpZGEuZ2lmdS5qcCIsImhpZ2FzaGlzaGlyYWthd2EuZ2lmdS5qcCIsImliaWdhd2EuZ2lmdS5qcCIsImlrZWRhLmdpZnUuanAiLCJrYWthbWlnYWhhcmEuZ2lmdS5qcCIsImthbmkuZ2lmdS5qcCIsImth'@;
put 'c2FoYXJhLmdpZnUuanAiLCJrYXNhbWF0c3UuZ2lmdS5qcCIsImthd2F1ZS5naWZ1LmpwIiwia2l0YWdhdGEuZ2lmdS5qcCIsIm1pbm8uZ2lmdS5qcCIsIm1pbm9rYW1vLmdpZnUuanAiLCJtaXRha2UuZ2lmdS5qcCIsIm1penVuYW1pLmdpZnUuanAiLCJtb3Rvc3UuZ2lmdS5qcCIsIm5ha2F0'@;
put 'c3VnYXdhLmdpZnUuanAiLCJvZ2FraS5naWZ1LmpwIiwic2FrYWhvZ2kuZ2lmdS5qcCIsInNla2kuZ2lmdS5qcCIsInNla2lnYWhhcmEuZ2lmdS5qcCIsInNoaXJha2F3YS5naWZ1LmpwIiwidGFqaW1pLmdpZnUuanAiLCJ0YWtheWFtYS5naWZ1LmpwIiwidGFydWkuZ2lmdS5qcCIsInRva2ku'@;
put 'Z2lmdS5qcCIsInRvbWlrYS5naWZ1LmpwIiwid2Fub3VjaGkuZ2lmdS5qcCIsInlhbWFnYXRhLmdpZnUuanAiLCJ5YW90c3UuZ2lmdS5qcCIsInlvcm8uZ2lmdS5qcCIsImFubmFrYS5ndW5tYS5qcCIsImNoaXlvZGEuZ3VubWEuanAiLCJmdWppb2thLmd1bm1hLmpwIiwiaGlnYXNoaWFnYXRz'@;
put 'dW1hLmd1bm1hLmpwIiwiaXNlc2FraS5ndW5tYS5qcCIsIml0YWt1cmEuZ3VubWEuanAiLCJrYW5uYS5ndW5tYS5qcCIsImthbnJhLmd1bm1hLmpwIiwia2F0YXNoaW5hLmd1bm1hLmpwIiwia2F3YWJhLmd1bm1hLmpwIiwia2lyeXUuZ3VubWEuanAiLCJrdXNhdHN1Lmd1bm1hLmpwIiwibWFl'@;
put 'YmFzaGkuZ3VubWEuanAiLCJtZWl3YS5ndW5tYS5qcCIsIm1pZG9yaS5ndW5tYS5qcCIsIm1pbmFrYW1pLmd1bm1hLmpwIiwibmFnYW5vaGFyYS5ndW5tYS5qcCIsIm5ha2Fub2pvLmd1bm1hLmpwIiwibmFubW9rdS5ndW5tYS5qcCIsIm51bWF0YS5ndW5tYS5qcCIsIm9penVtaS5ndW5tYS5q'@;
put 'cCIsIm9yYS5ndW5tYS5qcCIsIm90YS5ndW5tYS5qcCIsInNoaWJ1a2F3YS5ndW5tYS5qcCIsInNoaW1vbml0YS5ndW5tYS5qcCIsInNoaW50by5ndW5tYS5qcCIsInNob3dhLmd1bm1hLmpwIiwidGFrYXNha2kuZ3VubWEuanAiLCJ0YWtheWFtYS5ndW5tYS5qcCIsInRhbWFtdXJhLmd1bm1h'@;
put 'LmpwIiwidGF0ZWJheWFzaGkuZ3VubWEuanAiLCJ0b21pb2thLmd1bm1hLmpwIiwidHN1a2l5b25vLmd1bm1hLmpwIiwidHN1bWFnb2kuZ3VubWEuanAiLCJ1ZW5vLmd1bm1hLmpwIiwieW9zaGlva2EuZ3VubWEuanAiLCJhc2FtaW5hbWkuaGlyb3NoaW1hLmpwIiwiZGFpd2EuaGlyb3NoaW1h'@;
put 'LmpwIiwiZXRhamltYS5oaXJvc2hpbWEuanAiLCJmdWNodS5oaXJvc2hpbWEuanAiLCJmdWt1eWFtYS5oaXJvc2hpbWEuanAiLCJoYXRzdWthaWNoaS5oaXJvc2hpbWEuanAiLCJoaWdhc2hpaGlyb3NoaW1hLmhpcm9zaGltYS5qcCIsImhvbmdvLmhpcm9zaGltYS5qcCIsImppbnNla2lrb2dl'@;
put 'bi5oaXJvc2hpbWEuanAiLCJrYWl0YS5oaXJvc2hpbWEuanAiLCJrdWkuaGlyb3NoaW1hLmpwIiwia3VtYW5vLmhpcm9zaGltYS5qcCIsImt1cmUuaGlyb3NoaW1hLmpwIiwibWloYXJhLmhpcm9zaGltYS5qcCIsIm1peW9zaGkuaGlyb3NoaW1hLmpwIiwibmFrYS5oaXJvc2hpbWEuanAiLCJv'@;
put 'bm9taWNoaS5oaXJvc2hpbWEuanAiLCJvc2FraWthbWlqaW1hLmhpcm9zaGltYS5qcCIsIm90YWtlLmhpcm9zaGltYS5qcCIsInNha2EuaGlyb3NoaW1hLmpwIiwic2VyYS5oaXJvc2hpbWEuanAiLCJzZXJhbmlzaGkuaGlyb3NoaW1hLmpwIiwic2hpbmljaGkuaGlyb3NoaW1hLmpwIiwic2hv'@;
put 'YmFyYS5oaXJvc2hpbWEuanAiLCJ0YWtlaGFyYS5oaXJvc2hpbWEuanAiLCJhYmFzaGlyaS5ob2trYWlkby5qcCIsImFiaXJhLmhva2thaWRvLmpwIiwiYWliZXRzdS5ob2trYWlkby5qcCIsImFrYWJpcmEuaG9ra2FpZG8uanAiLCJha2tlc2hpLmhva2thaWRvLmpwIiwiYXNhaGlrYXdhLmhv'@;
put 'a2thaWRvLmpwIiwiYXNoaWJldHN1Lmhva2thaWRvLmpwIiwiYXNob3JvLmhva2thaWRvLmpwIiwiYXNzYWJ1Lmhva2thaWRvLmpwIiwiYXRzdW1hLmhva2thaWRvLmpwIiwiYmliYWkuaG9ra2FpZG8uanAiLCJiaWVpLmhva2thaWRvLmpwIiwiYmlmdWthLmhva2thaWRvLmpwIiwiYmlob3Jv'@;
put 'Lmhva2thaWRvLmpwIiwiYmlyYXRvcmkuaG9ra2FpZG8uanAiLCJjaGlwcHViZXRzdS5ob2trYWlkby5qcCIsImNoaXRvc2UuaG9ra2FpZG8uanAiLCJkYXRlLmhva2thaWRvLmpwIiwiZWJldHN1Lmhva2thaWRvLmpwIiwiZW1iZXRzdS5ob2trYWlkby5qcCIsImVuaXdhLmhva2thaWRvLmpw'@;
put 'IiwiZXJpbW8uaG9ra2FpZG8uanAiLCJlc2FuLmhva2thaWRvLmpwIiwiZXNhc2hpLmhva2thaWRvLmpwIiwiZnVrYWdhd2EuaG9ra2FpZG8uanAiLCJmdWt1c2hpbWEuaG9ra2FpZG8uanAiLCJmdXJhbm8uaG9ra2FpZG8uanAiLCJmdXJ1YmlyYS5ob2trYWlkby5qcCIsImhhYm9yby5ob2tr'@;
put 'YWlkby5qcCIsImhha29kYXRlLmhva2thaWRvLmpwIiwiaGFtYXRvbmJldHN1Lmhva2thaWRvLmpwIiwiaGlkYWthLmhva2thaWRvLmpwIiwiaGlnYXNoaWthZ3VyYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYXdhLmhva2thaWRvLmpwIiwiaGlyb28uaG9ra2FpZG8uanAiLCJob2t1cnl1Lmhv'@;
put 'a2thaWRvLmpwIiwiaG9rdXRvLmhva2thaWRvLmpwIiwiaG9uYmV0c3UuaG9ra2FpZG8uanAiLCJob3Jva2FuYWkuaG9ra2FpZG8uanAiLCJob3Jvbm9iZS5ob2trYWlkby5qcCIsImlrZWRhLmhva2thaWRvLmpwIiwiaW1ha2FuZS5ob2trYWlkby5qcCIsImlzaGlrYXJpLmhva2thaWRvLmpw'@;
put 'IiwiaXdhbWl6YXdhLmhva2thaWRvLmpwIiwiaXdhbmFpLmhva2thaWRvLmpwIiwia2FtaWZ1cmFuby5ob2trYWlkby5qcCIsImthbWlrYXdhLmhva2thaWRvLmpwIiwia2FtaXNoaWhvcm8uaG9ra2FpZG8uanAiLCJrYW1pc3VuYWdhd2EuaG9ra2FpZG8uanAiLCJrYW1vZW5haS5ob2trYWlk'@;
put 'by5qcCIsImtheWFiZS5ob2trYWlkby5qcCIsImtlbWJ1Y2hpLmhva2thaWRvLmpwIiwia2lrb25haS5ob2trYWlkby5qcCIsImtpbW9iZXRzdS5ob2trYWlkby5qcCIsImtpdGFoaXJvc2hpbWEuaG9ra2FpZG8uanAiLCJraXRhbWkuaG9ra2FpZG8uanAiLCJraXlvc2F0by5ob2trYWlkby5q'@;
put 'cCIsImtvc2hpbWl6dS5ob2trYWlkby5qcCIsImt1bm5lcHB1Lmhva2thaWRvLmpwIiwia3VyaXlhbWEuaG9ra2FpZG8uanAiLCJrdXJvbWF0c3VuYWkuaG9ra2FpZG8uanAiLCJrdXNoaXJvLmhva2thaWRvLmpwIiwia3V0Y2hhbi5ob2trYWlkby5qcCIsImt5b3dhLmhva2thaWRvLmpwIiwi'@;
put 'bWFzaGlrZS5ob2trYWlkby5qcCIsIm1hdHN1bWFlLmhva2thaWRvLmpwIiwibWlrYXNhLmhva2thaWRvLmpwIiwibWluYW1pZnVyYW5vLmhva2thaWRvLmpwIiwibW9tYmV0c3UuaG9ra2FpZG8uanAiLCJtb3NldXNoaS5ob2trYWlkby5qcCIsIm11a2F3YS5ob2trYWlkby5qcCIsIm11cm9y'@;
put 'YW4uaG9ra2FpZG8uanAiLCJuYWllLmhva2thaWRvLmpwIiwibmFrYWdhd2EuaG9ra2FpZG8uanAiLCJuYWthc2F0c3VuYWkuaG9ra2FpZG8uanAiLCJuYWthdG9tYmV0c3UuaG9ra2FpZG8uanAiLCJuYW5hZS5ob2trYWlkby5qcCIsIm5hbnBvcm8uaG9ra2FpZG8uanAiLCJuYXlvcm8uaG9r'@;
put 'a2FpZG8uanAiLCJuZW11cm8uaG9ra2FpZG8uanAiLCJuaWlrYXBwdS5ob2trYWlkby5qcCIsIm5pa2kuaG9ra2FpZG8uanAiLCJuaXNoaW9rb3BwZS5ob2trYWlkby5qcCIsIm5vYm9yaWJldHN1Lmhva2thaWRvLmpwIiwibnVtYXRhLmhva2thaWRvLmpwIiwib2JpaGlyby5ob2trYWlkby5q'@;
put 'cCIsIm9iaXJhLmhva2thaWRvLmpwIiwib2tldG8uaG9ra2FpZG8uanAiLCJva29wcGUuaG9ra2FpZG8uanAiLCJvdGFydS5ob2trYWlkby5qcCIsIm90b2JlLmhva2thaWRvLmpwIiwib3RvZnVrZS5ob2trYWlkby5qcCIsIm90b2luZXBwdS5ob2trYWlkby5qcCIsIm91bXUuaG9ra2FpZG8u'@;
put 'anAiLCJvem9yYS5ob2trYWlkby5qcCIsInBpcHB1Lmhva2thaWRvLmpwIiwicmFua29zaGkuaG9ra2FpZG8uanAiLCJyZWJ1bi5ob2trYWlkby5qcCIsInJpa3ViZXRzdS5ob2trYWlkby5qcCIsInJpc2hpcmkuaG9ra2FpZG8uanAiLCJyaXNoaXJpZnVqaS5ob2trYWlkby5qcCIsInNhcm9t'@;
put 'YS5ob2trYWlkby5qcCIsInNhcnVmdXRzdS5ob2trYWlkby5qcCIsInNoYWtvdGFuLmhva2thaWRvLmpwIiwic2hhcmkuaG9ra2FpZG8uanAiLCJzaGliZWNoYS5ob2trYWlkby5qcCIsInNoaWJldHN1Lmhva2thaWRvLmpwIiwic2hpa2FiZS5ob2trYWlkby5qcCIsInNoaWthb2kuaG9ra2Fp'@;
put 'ZG8uanAiLCJzaGltYW1ha2kuaG9ra2FpZG8uanAiLCJzaGltaXp1Lmhva2thaWRvLmpwIiwic2hpbW9rYXdhLmhva2thaWRvLmpwIiwic2hpbnNoaW5vdHN1Lmhva2thaWRvLmpwIiwic2hpbnRva3UuaG9ra2FpZG8uanAiLCJzaGlyYW51a2EuaG9ra2FpZG8uanAiLCJzaGlyYW9pLmhva2th'@;
put 'aWRvLmpwIiwic2hpcml1Y2hpLmhva2thaWRvLmpwIiwic29iZXRzdS5ob2trYWlkby5qcCIsInN1bmFnYXdhLmhva2thaWRvLmpwIiwidGFpa2kuaG9ra2FpZG8uanAiLCJ0YWthc3UuaG9ra2FpZG8uanAiLCJ0YWtpa2F3YS5ob2trYWlkby5qcCIsInRha2lub3VlLmhva2thaWRvLmpwIiwi'@;
put 'dGVzaGlrYWdhLmhva2thaWRvLmpwIiwidG9iZXRzdS5ob2trYWlkby5qcCIsInRvaG1hLmhva2thaWRvLmpwIiwidG9tYWtvbWFpLmhva2thaWRvLmpwIiwidG9tYXJpLmhva2thaWRvLmpwIiwidG95YS5ob2trYWlkby5qcCIsInRveWFrby5ob2trYWlkby5qcCIsInRveW90b21pLmhva2th'@;
put 'aWRvLmpwIiwidG95b3VyYS5ob2trYWlkby5qcCIsInRzdWJldHN1Lmhva2thaWRvLmpwIiwidHN1a2lnYXRhLmhva2thaWRvLmpwIiwidXJha2F3YS5ob2trYWlkby5qcCIsInVyYXVzdS5ob2trYWlkby5qcCIsInVyeXUuaG9ra2FpZG8uanAiLCJ1dGFzaGluYWkuaG9ra2FpZG8uanAiLCJ3'@;
put 'YWtrYW5haS5ob2trYWlkby5qcCIsIndhc3NhbXUuaG9ra2FpZG8uanAiLCJ5YWt1bW8uaG9ra2FpZG8uanAiLCJ5b2ljaGkuaG9ra2FpZG8uanAiLCJhaW9pLmh5b2dvLmpwIiwiYWthc2hpLmh5b2dvLmpwIiwiYWtvLmh5b2dvLmpwIiwiYW1hZ2FzYWtpLmh5b2dvLmpwIiwiYW9nYWtpLmh5'@;
put 'b2dvLmpwIiwiYXNhZ28uaHlvZ28uanAiLCJhc2hpeWEuaHlvZ28uanAiLCJhd2FqaS5oeW9nby5qcCIsImZ1a3VzYWtpLmh5b2dvLmpwIiwiZ29zaGlraS5oeW9nby5qcCIsImhhcmltYS5oeW9nby5qcCIsImhpbWVqaS5oeW9nby5qcCIsImljaGlrYXdhLmh5b2dvLmpwIiwiaW5hZ2F3YS5o'@;
put 'eW9nby5qcCIsIml0YW1pLmh5b2dvLmpwIiwia2Frb2dhd2EuaHlvZ28uanAiLCJrYW1pZ29yaS5oeW9nby5qcCIsImthbWlrYXdhLmh5b2dvLmpwIiwia2FzYWkuaHlvZ28uanAiLCJrYXN1Z2EuaHlvZ28uanAiLCJrYXdhbmlzaGkuaHlvZ28uanAiLCJtaWtpLmh5b2dvLmpwIiwibWluYW1p'@;
put 'YXdhamkuaHlvZ28uanAiLCJuaXNoaW5vbWl5YS5oeW9nby5qcCIsIm5pc2hpd2FraS5oeW9nby5qcCIsIm9uby5oeW9nby5qcCIsInNhbmRhLmh5b2dvLmpwIiwic2FubmFuLmh5b2dvLmpwIiwic2FzYXlhbWEuaHlvZ28uanAiLCJzYXlvLmh5b2dvLmpwIiwic2hpbmd1Lmh5b2dvLmpwIiwi'@;
put 'c2hpbm9uc2VuLmh5b2dvLmpwIiwic2hpc28uaHlvZ28uanAiLCJzdW1vdG8uaHlvZ28uanAiLCJ0YWlzaGkuaHlvZ28uanAiLCJ0YWthLmh5b2dvLmpwIiwidGFrYXJhenVrYS5oeW9nby5qcCIsInRha2FzYWdvLmh5b2dvLmpwIiwidGFraW5vLmh5b2dvLmpwIiwidGFtYmEuaHlvZ28uanAi'@;
put 'LCJ0YXRzdW5vLmh5b2dvLmpwIiwidG95b29rYS5oeW9nby5qcCIsInlhYnUuaHlvZ28uanAiLCJ5YXNoaXJvLmh5b2dvLmpwIiwieW9rYS5oeW9nby5qcCIsInlva2F3YS5oeW9nby5qcCIsImFtaS5pYmFyYWtpLmpwIiwiYXNhaGkuaWJhcmFraS5qcCIsImJhbmRvLmliYXJha2kuanAiLCJj'@;
put 'aGlrdXNlaS5pYmFyYWtpLmpwIiwiZGFpZ28uaWJhcmFraS5qcCIsImZ1amlzaGlyby5pYmFyYWtpLmpwIiwiaGl0YWNoaS5pYmFyYWtpLmpwIiwiaGl0YWNoaW5ha2EuaWJhcmFraS5qcCIsImhpdGFjaGlvbWl5YS5pYmFyYWtpLmpwIiwiaGl0YWNoaW90YS5pYmFyYWtpLmpwIiwiaWJhcmFr'@;
put 'aS5pYmFyYWtpLmpwIiwiaW5hLmliYXJha2kuanAiLCJpbmFzaGlraS5pYmFyYWtpLmpwIiwiaXRha28uaWJhcmFraS5qcCIsIml3YW1hLmliYXJha2kuanAiLCJqb3NvLmliYXJha2kuanAiLCJrYW1pc3UuaWJhcmFraS5qcCIsImthc2FtYS5pYmFyYWtpLmpwIiwia2FzaGltYS5pYmFyYWtp'@;
put 'LmpwIiwia2FzdW1pZ2F1cmEuaWJhcmFraS5qcCIsImtvZ2EuaWJhcmFraS5qcCIsIm1paG8uaWJhcmFraS5qcCIsIm1pdG8uaWJhcmFraS5qcCIsIm1vcml5YS5pYmFyYWtpLmpwIiwibmFrYS5pYmFyYWtpLmpwIiwibmFtZWdhdGEuaWJhcmFraS5qcCIsIm9hcmFpLmliYXJha2kuanAiLCJv'@;
put 'Z2F3YS5pYmFyYWtpLmpwIiwib21pdGFtYS5pYmFyYWtpLmpwIiwicnl1Z2FzYWtpLmliYXJha2kuanAiLCJzYWthaS5pYmFyYWtpLmpwIiwic2FrdXJhZ2F3YS5pYmFyYWtpLmpwIiwic2hpbW9kYXRlLmliYXJha2kuanAiLCJzaGltb3RzdW1hLmliYXJha2kuanAiLCJzaGlyb3NhdG8uaWJh'@;
put 'cmFraS5qcCIsInNvd2EuaWJhcmFraS5qcCIsInN1aWZ1LmliYXJha2kuanAiLCJ0YWthaGFnaS5pYmFyYWtpLmpwIiwidGFtYXRzdWt1cmkuaWJhcmFraS5qcCIsInRva2FpLmliYXJha2kuanAiLCJ0b21vYmUuaWJhcmFraS5qcCIsInRvbmUuaWJhcmFraS5qcCIsInRvcmlkZS5pYmFyYWtp'@;
put 'LmpwIiwidHN1Y2hpdXJhLmliYXJha2kuanAiLCJ0c3VrdWJhLmliYXJha2kuanAiLCJ1Y2hpaGFyYS5pYmFyYWtpLmpwIiwidXNoaWt1LmliYXJha2kuanAiLCJ5YWNoaXlvLmliYXJha2kuanAiLCJ5YW1hZ2F0YS5pYmFyYWtpLmpwIiwieWF3YXJhLmliYXJha2kuanAiLCJ5dWtpLmliYXJh'@;
put 'a2kuanAiLCJhbmFtaXp1LmlzaGlrYXdhLmpwIiwiaGFrdWkuaXNoaWthd2EuanAiLCJoYWt1c2FuLmlzaGlrYXdhLmpwIiwia2FnYS5pc2hpa2F3YS5qcCIsImthaG9rdS5pc2hpa2F3YS5qcCIsImthbmF6YXdhLmlzaGlrYXdhLmpwIiwia2F3YWtpdGEuaXNoaWthd2EuanAiLCJrb21hdHN1'@;
put 'LmlzaGlrYXdhLmpwIiwibmFrYW5vdG8uaXNoaWthd2EuanAiLCJuYW5hby5pc2hpa2F3YS5qcCIsIm5vbWkuaXNoaWthd2EuanAiLCJub25vaWNoaS5pc2hpa2F3YS5qcCIsIm5vdG8uaXNoaWthd2EuanAiLCJzaGlrYS5pc2hpa2F3YS5qcCIsInN1enUuaXNoaWthd2EuanAiLCJ0c3ViYXRh'@;
put 'LmlzaGlrYXdhLmpwIiwidHN1cnVnaS5pc2hpa2F3YS5qcCIsInVjaGluYWRhLmlzaGlrYXdhLmpwIiwid2FqaW1hLmlzaGlrYXdhLmpwIiwiZnVkYWkuaXdhdGUuanAiLCJmdWppc2F3YS5pd2F0ZS5qcCIsImhhbmFtYWtpLml3YXRlLmpwIiwiaGlyYWl6dW1pLml3YXRlLmpwIiwiaGlyb25v'@;
put 'Lml3YXRlLmpwIiwiaWNoaW5vaGUuaXdhdGUuanAiLCJpY2hpbm9zZWtpLml3YXRlLmpwIiwiaXdhaXp1bWkuaXdhdGUuanAiLCJpd2F0ZS5pd2F0ZS5qcCIsImpvYm9qaS5pd2F0ZS5qcCIsImthbWFpc2hpLml3YXRlLmpwIiwia2FuZWdhc2FraS5pd2F0ZS5qcCIsImthcnVtYWkuaXdhdGUu'@;
put 'anAiLCJrYXdhaS5pd2F0ZS5qcCIsImtpdGFrYW1pLml3YXRlLmpwIiwia3VqaS5pd2F0ZS5qcCIsImt1bm9oZS5pd2F0ZS5qcCIsImt1enVtYWtpLml3YXRlLmpwIiwibWl5YWtvLml3YXRlLmpwIiwibWl6dXNhd2EuaXdhdGUuanAiLCJtb3Jpb2thLml3YXRlLmpwIiwibmlub2hlLml3YXRl'@;
put 'LmpwIiwibm9kYS5pd2F0ZS5qcCIsIm9mdW5hdG8uaXdhdGUuanAiLCJvc2h1Lml3YXRlLmpwIiwib3RzdWNoaS5pd2F0ZS5qcCIsInJpa3V6ZW50YWthdGEuaXdhdGUuanAiLCJzaGl3YS5pd2F0ZS5qcCIsInNoaXp1a3Vpc2hpLml3YXRlLmpwIiwic3VtaXRhLml3YXRlLmpwIiwidGFub2hh'@;
put 'dGEuaXdhdGUuanAiLCJ0b25vLml3YXRlLmpwIiwieWFoYWJhLml3YXRlLmpwIiwieWFtYWRhLml3YXRlLmpwIiwiYXlhZ2F3YS5rYWdhd2EuanAiLCJoaWdhc2hpa2FnYXdhLmthZ2F3YS5qcCIsImthbm9uamkua2FnYXdhLmpwIiwia290b2hpcmEua2FnYXdhLmpwIiwibWFubm8ua2FnYXdh'@;
put 'LmpwIiwibWFydWdhbWUua2FnYXdhLmpwIiwibWl0b3lvLmthZ2F3YS5qcCIsIm5hb3NoaW1hLmthZ2F3YS5qcCIsInNhbnVraS5rYWdhd2EuanAiLCJ0YWRvdHN1LmthZ2F3YS5qcCIsInRha2FtYXRzdS5rYWdhd2EuanAiLCJ0b25vc2hvLmthZ2F3YS5qcCIsInVjaGlub21pLmthZ2F3YS5q'@;
put 'cCIsInV0YXp1LmthZ2F3YS5qcCIsInplbnRzdWppLmthZ2F3YS5qcCIsImFrdW5lLmthZ29zaGltYS5qcCIsImFtYW1pLmthZ29zaGltYS5qcCIsImhpb2tpLmthZ29zaGltYS5qcCIsImlzYS5rYWdvc2hpbWEuanAiLCJpc2VuLmthZ29zaGltYS5qcCIsIml6dW1pLmthZ29zaGltYS5qcCIs'@;
put 'ImthZ29zaGltYS5rYWdvc2hpbWEuanAiLCJrYW5veWEua2Fnb3NoaW1hLmpwIiwia2F3YW5hYmUua2Fnb3NoaW1hLmpwIiwia2lua28ua2Fnb3NoaW1hLmpwIiwia291eWFtYS5rYWdvc2hpbWEuanAiLCJtYWt1cmF6YWtpLmthZ29zaGltYS5qcCIsIm1hdHN1bW90by5rYWdvc2hpbWEuanAi'@;
put 'LCJtaW5hbWl0YW5lLmthZ29zaGltYS5qcCIsIm5ha2F0YW5lLmthZ29zaGltYS5qcCIsIm5pc2hpbm9vbW90ZS5rYWdvc2hpbWEuanAiLCJzYXRzdW1hc2VuZGFpLmthZ29zaGltYS5qcCIsInNvby5rYWdvc2hpbWEuanAiLCJ0YXJ1bWl6dS5rYWdvc2hpbWEuanAiLCJ5dXN1aS5rYWdvc2hp'@;
put 'bWEuanAiLCJhaWthd2Eua2FuYWdhd2EuanAiLCJhdHN1Z2kua2FuYWdhd2EuanAiLCJheWFzZS5rYW5hZ2F3YS5qcCIsImNoaWdhc2FraS5rYW5hZ2F3YS5qcCIsImViaW5hLmthbmFnYXdhLmpwIiwiZnVqaXNhd2Eua2FuYWdhd2EuanAiLCJoYWRhbm8ua2FuYWdhd2EuanAiLCJoYWtvbmUu'@;
put 'a2FuYWdhd2EuanAiLCJoaXJhdHN1a2Eua2FuYWdhd2EuanAiLCJpc2VoYXJhLmthbmFnYXdhLmpwIiwia2Fpc2VpLmthbmFnYXdhLmpwIiwia2FtYWt1cmEua2FuYWdhd2EuanAiLCJraXlva2F3YS5rYW5hZ2F3YS5qcCIsIm1hdHN1ZGEua2FuYWdhd2EuanAiLCJtaW5hbWlhc2hpZ2FyYS5r'@;
put 'YW5hZ2F3YS5qcCIsIm1pdXJhLmthbmFnYXdhLmpwIiwibmFrYWkua2FuYWdhd2EuanAiLCJuaW5vbWl5YS5rYW5hZ2F3YS5qcCIsIm9kYXdhcmEua2FuYWdhd2EuanAiLCJvaS5rYW5hZ2F3YS5qcCIsIm9pc28ua2FuYWdhd2EuanAiLCJzYWdhbWloYXJhLmthbmFnYXdhLmpwIiwic2FtdWth'@;
put 'd2Eua2FuYWdhd2EuanAiLCJ0c3VrdWkua2FuYWdhd2EuanAiLCJ5YW1ha2l0YS5rYW5hZ2F3YS5qcCIsInlhbWF0by5rYW5hZ2F3YS5qcCIsInlva29zdWthLmthbmFnYXdhLmpwIiwieXVnYXdhcmEua2FuYWdhd2EuanAiLCJ6YW1hLmthbmFnYXdhLmpwIiwienVzaGkua2FuYWdhd2EuanAi'@;
put 'LCJha2kua29jaGkuanAiLCJnZWlzZWkua29jaGkuanAiLCJoaWRha2Eua29jaGkuanAiLCJoaWdhc2hpdHN1bm8ua29jaGkuanAiLCJpbm8ua29jaGkuanAiLCJrYWdhbWkua29jaGkuanAiLCJrYW1pLmtvY2hpLmpwIiwia2l0YWdhd2Eua29jaGkuanAiLCJrb2NoaS5rb2NoaS5qcCIsIm1p'@;
put 'aGFyYS5rb2NoaS5qcCIsIm1vdG95YW1hLmtvY2hpLmpwIiwibXVyb3RvLmtvY2hpLmpwIiwibmFoYXJpLmtvY2hpLmpwIiwibmFrYW11cmEua29jaGkuanAiLCJuYW5rb2t1LmtvY2hpLmpwIiwibmlzaGl0b3NhLmtvY2hpLmpwIiwibml5b2RvZ2F3YS5rb2NoaS5qcCIsIm9jaGkua29jaGku'@;
put 'anAiLCJva2F3YS5rb2NoaS5qcCIsIm90b3lvLmtvY2hpLmpwIiwib3RzdWtpLmtvY2hpLmpwIiwic2FrYXdhLmtvY2hpLmpwIiwic3VrdW1vLmtvY2hpLmpwIiwic3VzYWtpLmtvY2hpLmpwIiwidG9zYS5rb2NoaS5qcCIsInRvc2FzaGltaXp1LmtvY2hpLmpwIiwidG95by5rb2NoaS5qcCIs'@;
put 'InRzdW5vLmtvY2hpLmpwIiwidW1hamkua29jaGkuanAiLCJ5YXN1ZGEua29jaGkuanAiLCJ5dXN1aGFyYS5rb2NoaS5qcCIsImFtYWt1c2Eua3VtYW1vdG8uanAiLCJhcmFvLmt1bWFtb3RvLmpwIiwiYXNvLmt1bWFtb3RvLmpwIiwiY2hveW8ua3VtYW1vdG8uanAiLCJneW9rdXRvLmt1bWFt'@;
put 'b3RvLmpwIiwia2FtaWFtYWt1c2Eua3VtYW1vdG8uanAiLCJraWt1Y2hpLmt1bWFtb3RvLmpwIiwia3VtYW1vdG8ua3VtYW1vdG8uanAiLCJtYXNoaWtpLmt1bWFtb3RvLmpwIiwibWlmdW5lLmt1bWFtb3RvLmpwIiwibWluYW1hdGEua3VtYW1vdG8uanAiLCJtaW5hbWlvZ3VuaS5rdW1hbW90'@;
put 'by5qcCIsIm5hZ2FzdS5rdW1hbW90by5qcCIsIm5pc2hpaGFyYS5rdW1hbW90by5qcCIsIm9ndW5pLmt1bWFtb3RvLmpwIiwib3p1Lmt1bWFtb3RvLmpwIiwic3Vtb3RvLmt1bWFtb3RvLmpwIiwidGFrYW1vcmkua3VtYW1vdG8uanAiLCJ1a2kua3VtYW1vdG8uanAiLCJ1dG8ua3VtYW1vdG8u'@;
put 'anAiLCJ5YW1hZ2Eua3VtYW1vdG8uanAiLCJ5YW1hdG8ua3VtYW1vdG8uanAiLCJ5YXRzdXNoaXJvLmt1bWFtb3RvLmpwIiwiYXlhYmUua3lvdG8uanAiLCJmdWt1Y2hpeWFtYS5reW90by5qcCIsImhpZ2FzaGl5YW1hLmt5b3RvLmpwIiwiaWRlLmt5b3RvLmpwIiwiaW5lLmt5b3RvLmpwIiwi'@;
put 'am95by5reW90by5qcCIsImthbWVva2Eua3lvdG8uanAiLCJrYW1vLmt5b3RvLmpwIiwia2l0YS5reW90by5qcCIsImtpenUua3lvdG8uanAiLCJrdW1peWFtYS5reW90by5qcCIsImt5b3RhbWJhLmt5b3RvLmpwIiwia3lvdGFuYWJlLmt5b3RvLmpwIiwia3lvdGFuZ28ua3lvdG8uanAiLCJt'@;
put 'YWl6dXJ1Lmt5b3RvLmpwIiwibWluYW1pLmt5b3RvLmpwIiwibWluYW1peWFtYXNoaXJvLmt5b3RvLmpwIiwibWl5YXp1Lmt5b3RvLmpwIiwibXVrby5reW90by5qcCIsIm5hZ2Fva2FreW8ua3lvdG8uanAiLCJuYWthZ3lvLmt5b3RvLmpwIiwibmFudGFuLmt5b3RvLmpwIiwib3lhbWF6YWtp'@;
put 'Lmt5b3RvLmpwIiwic2FreW8ua3lvdG8uanAiLCJzZWlrYS5reW90by5qcCIsInRhbmFiZS5reW90by5qcCIsInVqaS5reW90by5qcCIsInVqaXRhd2FyYS5reW90by5qcCIsIndhenVrYS5reW90by5qcCIsInlhbWFzaGluYS5reW90by5qcCIsInlhd2F0YS5reW90by5qcCIsImFzYWhpLm1p'@;
put 'ZS5qcCIsImluYWJlLm1pZS5qcCIsImlzZS5taWUuanAiLCJrYW1leWFtYS5taWUuanAiLCJrYXdhZ29lLm1pZS5qcCIsImtpaG8ubWllLmpwIiwia2lzb3Nha2kubWllLmpwIiwia2l3YS5taWUuanAiLCJrb21vbm8ubWllLmpwIiwia3VtYW5vLm1pZS5qcCIsImt1d2FuYS5taWUuanAiLCJt'@;
put 'YXRzdXNha2EubWllLmpwIiwibWVpd2EubWllLmpwIiwibWloYW1hLm1pZS5qcCIsIm1pbmFtaWlzZS5taWUuanAiLCJtaXN1Z2kubWllLmpwIiwibWl5YW1hLm1pZS5qcCIsIm5hYmFyaS5taWUuanAiLCJzaGltYS5taWUuanAiLCJzdXp1a2EubWllLmpwIiwidGFkby5taWUuanAiLCJ0YWlr'@;
put 'aS5taWUuanAiLCJ0YWtpLm1pZS5qcCIsInRhbWFraS5taWUuanAiLCJ0b2JhLm1pZS5qcCIsInRzdS5taWUuanAiLCJ1ZG9uby5taWUuanAiLCJ1cmVzaGluby5taWUuanAiLCJ3YXRhcmFpLm1pZS5qcCIsInlva2thaWNoaS5taWUuanAiLCJmdXJ1a2F3YS5taXlhZ2kuanAiLCJoaWdhc2hp'@;
put 'bWF0c3VzaGltYS5taXlhZ2kuanAiLCJpc2hpbm9tYWtpLm1peWFnaS5qcCIsIml3YW51bWEubWl5YWdpLmpwIiwia2FrdWRhLm1peWFnaS5qcCIsImthbWkubWl5YWdpLmpwIiwia2F3YXNha2kubWl5YWdpLmpwIiwibWFydW1vcmkubWl5YWdpLmpwIiwibWF0c3VzaGltYS5taXlhZ2kuanAi'@;
put 'LCJtaW5hbWlzYW5yaWt1Lm1peWFnaS5qcCIsIm1pc2F0by5taXlhZ2kuanAiLCJtdXJhdGEubWl5YWdpLmpwIiwibmF0b3JpLm1peWFnaS5qcCIsIm9nYXdhcmEubWl5YWdpLmpwIiwib2hpcmEubWl5YWdpLmpwIiwib25hZ2F3YS5taXlhZ2kuanAiLCJvc2FraS5taXlhZ2kuanAiLCJyaWZ1'@;
put 'Lm1peWFnaS5qcCIsInNlbWluZS5taXlhZ2kuanAiLCJzaGliYXRhLm1peWFnaS5qcCIsInNoaWNoaWthc2h1a3UubWl5YWdpLmpwIiwic2hpa2FtYS5taXlhZ2kuanAiLCJzaGlvZ2FtYS5taXlhZ2kuanAiLCJzaGlyb2lzaGkubWl5YWdpLmpwIiwidGFnYWpvLm1peWFnaS5qcCIsInRhaXdh'@;
put 'Lm1peWFnaS5qcCIsInRvbWUubWl5YWdpLmpwIiwidG9taXlhLm1peWFnaS5qcCIsIndha3V5YS5taXlhZ2kuanAiLCJ3YXRhcmkubWl5YWdpLmpwIiwieWFtYW1vdG8ubWl5YWdpLmpwIiwiemFvLm1peWFnaS5qcCIsImF5YS5taXlhemFraS5qcCIsImViaW5vLm1peWF6YWtpLmpwIiwiZ29r'@;
put 'YXNlLm1peWF6YWtpLmpwIiwiaHl1Z2EubWl5YXpha2kuanAiLCJrYWRvZ2F3YS5taXlhemFraS5qcCIsImthd2FtaW5hbWkubWl5YXpha2kuanAiLCJraWpvLm1peWF6YWtpLmpwIiwia2l0YWdhd2EubWl5YXpha2kuanAiLCJraXRha2F0YS5taXlhemFraS5qcCIsImtpdGF1cmEubWl5YXph'@;
put 'a2kuanAiLCJrb2JheWFzaGkubWl5YXpha2kuanAiLCJrdW5pdG9taS5taXlhemFraS5qcCIsImt1c2hpbWEubWl5YXpha2kuanAiLCJtaW1hdGEubWl5YXpha2kuanAiLCJtaXlha29ub2pvLm1peWF6YWtpLmpwIiwibWl5YXpha2kubWl5YXpha2kuanAiLCJtb3JvdHN1a2EubWl5YXpha2ku'@;
put 'anAiLCJuaWNoaW5hbi5taXlhemFraS5qcCIsIm5pc2hpbWVyYS5taXlhemFraS5qcCIsIm5vYmVva2EubWl5YXpha2kuanAiLCJzYWl0by5taXlhemFraS5qcCIsInNoaWliYS5taXlhemFraS5qcCIsInNoaW50b21pLm1peWF6YWtpLmpwIiwidGFrYWhhcnUubWl5YXpha2kuanAiLCJ0YWth'@;
put 'bmFiZS5taXlhemFraS5qcCIsInRha2F6YWtpLm1peWF6YWtpLmpwIiwidHN1bm8ubWl5YXpha2kuanAiLCJhY2hpLm5hZ2Fuby5qcCIsImFnZW1hdHN1Lm5hZ2Fuby5qcCIsImFuYW4ubmFnYW5vLmpwIiwiYW9raS5uYWdhbm8uanAiLCJhc2FoaS5uYWdhbm8uanAiLCJhenVtaW5vLm5hZ2Fu'@;
put 'by5qcCIsImNoaWt1aG9rdS5uYWdhbm8uanAiLCJjaGlrdW1hLm5hZ2Fuby5qcCIsImNoaW5vLm5hZ2Fuby5qcCIsImZ1amltaS5uYWdhbm8uanAiLCJoYWt1YmEubmFnYW5vLmpwIiwiaGFyYS5uYWdhbm8uanAiLCJoaXJheWEubmFnYW5vLmpwIiwiaWlkYS5uYWdhbm8uanAiLCJpaWppbWEu'@;
put 'bmFnYW5vLmpwIiwiaWl5YW1hLm5hZ2Fuby5qcCIsImlpenVuYS5uYWdhbm8uanAiLCJpa2VkYS5uYWdhbm8uanAiLCJpa3VzYWthLm5hZ2Fuby5qcCIsImluYS5uYWdhbm8uanAiLCJrYXJ1aXphd2EubmFnYW5vLmpwIiwia2F3YWthbWkubmFnYW5vLmpwIiwia2lzby5uYWdhbm8uanAiLCJr'@;
put 'aXNvZnVrdXNoaW1hLm5hZ2Fuby5qcCIsImtpdGFhaWtpLm5hZ2Fuby5qcCIsImtvbWFnYW5lLm5hZ2Fuby5qcCIsImtvbW9yby5uYWdhbm8uanAiLCJtYXRzdWthd2EubmFnYW5vLmpwIiwibWF0c3Vtb3RvLm5hZ2Fuby5qcCIsIm1pYXNhLm5hZ2Fuby5qcCIsIm1pbmFtaWFpa2kubmFnYW5v'@;
put 'LmpwIiwibWluYW1pbWFraS5uYWdhbm8uanAiLCJtaW5hbWltaW5vd2EubmFnYW5vLmpwIiwibWlub3dhLm5hZ2Fuby5qcCIsIm1peWFkYS5uYWdhbm8uanAiLCJtaXlvdGEubmFnYW5vLmpwIiwibW9jaGl6dWtpLm5hZ2Fuby5qcCIsIm5hZ2Fuby5uYWdhbm8uanAiLCJuYWdhd2EubmFnYW5v'@;
put 'LmpwIiwibmFnaXNvLm5hZ2Fuby5qcCIsIm5ha2FnYXdhLm5hZ2Fuby5qcCIsIm5ha2Fuby5uYWdhbm8uanAiLCJub3phd2FvbnNlbi5uYWdhbm8uanAiLCJvYnVzZS5uYWdhbm8uanAiLCJvZ2F3YS5uYWdhbm8uanAiLCJva2F5YS5uYWdhbm8uanAiLCJvbWFjaGkubmFnYW5vLmpwIiwib21p'@;
put 'Lm5hZ2Fuby5qcCIsIm9va3V3YS5uYWdhbm8uanAiLCJvb3NoaWthLm5hZ2Fuby5qcCIsIm90YWtpLm5hZ2Fuby5qcCIsIm90YXJpLm5hZ2Fuby5qcCIsInNha2FlLm5hZ2Fuby5qcCIsInNha2FraS5uYWdhbm8uanAiLCJzYWt1Lm5hZ2Fuby5qcCIsInNha3Voby5uYWdhbm8uanAiLCJzaGlt'@;
put 'b3N1d2EubmFnYW5vLmpwIiwic2hpbmFub21hY2hpLm5hZ2Fuby5qcCIsInNoaW9qaXJpLm5hZ2Fuby5qcCIsInN1d2EubmFnYW5vLmpwIiwic3V6YWthLm5hZ2Fuby5qcCIsInRha2FnaS5uYWdhbm8uanAiLCJ0YWthbW9yaS5uYWdhbm8uanAiLCJ0YWtheWFtYS5uYWdhbm8uanAiLCJ0YXRl'@;
put 'c2hpbmEubmFnYW5vLmpwIiwidGF0c3Vuby5uYWdhbm8uanAiLCJ0b2dha3VzaGkubmFnYW5vLmpwIiwidG9ndXJhLm5hZ2Fuby5qcCIsInRvbWkubmFnYW5vLmpwIiwidWVkYS5uYWdhbm8uanAiLCJ3YWRhLm5hZ2Fuby5qcCIsInlhbWFnYXRhLm5hZ2Fuby5qcCIsInlhbWFub3VjaGkubmFn'@;
put 'YW5vLmpwIiwieWFzYWthLm5hZ2Fuby5qcCIsInlhc3Vva2EubmFnYW5vLmpwIiwiY2hpaml3YS5uYWdhc2FraS5qcCIsImZ1dHN1Lm5hZ2FzYWtpLmpwIiwiZ290by5uYWdhc2FraS5qcCIsImhhc2FtaS5uYWdhc2FraS5qcCIsImhpcmFkby5uYWdhc2FraS5qcCIsImlraS5uYWdhc2FraS5q'@;
put 'cCIsImlzYWhheWEubmFnYXNha2kuanAiLCJrYXdhdGFuYS5uYWdhc2FraS5qcCIsImt1Y2hpbm90c3UubmFnYXNha2kuanAiLCJtYXRzdXVyYS5uYWdhc2FraS5qcCIsIm5hZ2FzYWtpLm5hZ2FzYWtpLmpwIiwib2JhbWEubmFnYXNha2kuanAiLCJvbXVyYS5uYWdhc2FraS5qcCIsIm9zZXRv'@;
put 'Lm5hZ2FzYWtpLmpwIiwic2Fpa2FpLm5hZ2FzYWtpLmpwIiwic2FzZWJvLm5hZ2FzYWtpLmpwIiwic2VpaGkubmFnYXNha2kuanAiLCJzaGltYWJhcmEubmFnYXNha2kuanAiLCJzaGlua2FtaWdvdG8ubmFnYXNha2kuanAiLCJ0b2dpdHN1Lm5hZ2FzYWtpLmpwIiwidHN1c2hpbWEubmFnYXNh'@;
put 'a2kuanAiLCJ1bnplbi5uYWdhc2FraS5qcCIsImFuZG8ubmFyYS5qcCIsImdvc2UubmFyYS5qcCIsImhlZ3VyaS5uYXJhLmpwIiwiaGlnYXNoaXlvc2hpbm8ubmFyYS5qcCIsImlrYXJ1Z2EubmFyYS5qcCIsImlrb21hLm5hcmEuanAiLCJrYW1pa2l0YXlhbWEubmFyYS5qcCIsImthbm1ha2ku'@;
put 'bmFyYS5qcCIsImthc2hpYmEubmFyYS5qcCIsImthc2hpaGFyYS5uYXJhLmpwIiwia2F0c3VyYWdpLm5hcmEuanAiLCJrYXdhaS5uYXJhLmpwIiwia2F3YWthbWkubmFyYS5qcCIsImthd2FuaXNoaS5uYXJhLmpwIiwia29yeW8ubmFyYS5qcCIsImt1cm90YWtpLm5hcmEuanAiLCJtaXRzdWUu'@;
put 'bmFyYS5qcCIsIm1peWFrZS5uYXJhLmpwIiwibmFyYS5uYXJhLmpwIiwibm9zZWdhd2EubmFyYS5qcCIsIm9qaS5uYXJhLmpwIiwib3VkYS5uYXJhLmpwIiwib3lvZG8ubmFyYS5qcCIsInNha3VyYWkubmFyYS5qcCIsInNhbmdvLm5hcmEuanAiLCJzaGltb2ljaGkubmFyYS5qcCIsInNoaW1v'@;
put 'a2l0YXlhbWEubmFyYS5qcCIsInNoaW5qby5uYXJhLmpwIiwic29uaS5uYXJhLmpwIiwidGFrYXRvcmkubmFyYS5qcCIsInRhd2FyYW1vdG8ubmFyYS5qcCIsInRlbmthd2EubmFyYS5qcCIsInRlbnJpLm5hcmEuanAiLCJ1ZGEubmFyYS5qcCIsInlhbWF0b2tvcml5YW1hLm5hcmEuanAiLCJ5'@;
put 'YW1hdG90YWthZGEubmFyYS5qcCIsInlhbWF6b2UubmFyYS5qcCIsInlvc2hpbm8ubmFyYS5qcCIsImFnYS5uaWlnYXRhLmpwIiwiYWdhbm8ubmlpZ2F0YS5qcCIsImdvc2VuLm5paWdhdGEuanAiLCJpdG9pZ2F3YS5uaWlnYXRhLmpwIiwiaXp1bW96YWtpLm5paWdhdGEuanAiLCJqb2V0c3Uu'@;
put 'bmlpZ2F0YS5qcCIsImthbW8ubmlpZ2F0YS5qcCIsImthcml3YS5uaWlnYXRhLmpwIiwia2FzaGl3YXpha2kubmlpZ2F0YS5qcCIsIm1pbmFtaXVvbnVtYS5uaWlnYXRhLmpwIiwibWl0c3VrZS5uaWlnYXRhLmpwIiwibXVpa2EubmlpZ2F0YS5qcCIsIm11cmFrYW1pLm5paWdhdGEuanAiLCJt'@;
put 'eW9rby5uaWlnYXRhLmpwIiwibmFnYW9rYS5uaWlnYXRhLmpwIiwibmlpZ2F0YS5uaWlnYXRhLmpwIiwib2ppeWEubmlpZ2F0YS5qcCIsIm9taS5uaWlnYXRhLmpwIiwic2Fkby5uaWlnYXRhLmpwIiwic2Fuam8ubmlpZ2F0YS5qcCIsInNlaXJvLm5paWdhdGEuanAiLCJzZWlyb3UubmlpZ2F0'@;
put 'YS5qcCIsInNla2lrYXdhLm5paWdhdGEuanAiLCJzaGliYXRhLm5paWdhdGEuanAiLCJ0YWdhbWkubmlpZ2F0YS5qcCIsInRhaW5haS5uaWlnYXRhLmpwIiwidG9jaGlvLm5paWdhdGEuanAiLCJ0b2thbWFjaGkubmlpZ2F0YS5qcCIsInRzdWJhbWUubmlpZ2F0YS5qcCIsInRzdW5hbi5uaWln'@;
put 'YXRhLmpwIiwidW9udW1hLm5paWdhdGEuanAiLCJ5YWhpa28ubmlpZ2F0YS5qcCIsInlvaXRhLm5paWdhdGEuanAiLCJ5dXphd2EubmlpZ2F0YS5qcCIsImJlcHB1Lm9pdGEuanAiLCJidW5nb29uby5vaXRhLmpwIiwiYnVuZ290YWthZGEub2l0YS5qcCIsImhhc2FtYS5vaXRhLmpwIiwiaGlq'@;
put 'aS5vaXRhLmpwIiwiaGltZXNoaW1hLm9pdGEuanAiLCJoaXRhLm9pdGEuanAiLCJrYW1pdHN1ZS5vaXRhLmpwIiwia29rb25vZS5vaXRhLmpwIiwia3VqdS5vaXRhLmpwIiwia3VuaXNha2kub2l0YS5qcCIsImt1c3Uub2l0YS5qcCIsIm9pdGEub2l0YS5qcCIsInNhaWtpLm9pdGEuanAiLCJ0'@;
put 'YWtldGEub2l0YS5qcCIsInRzdWt1bWkub2l0YS5qcCIsInVzYS5vaXRhLmpwIiwidXN1a2kub2l0YS5qcCIsInl1ZnUub2l0YS5qcCIsImFrYWl3YS5va2F5YW1hLmpwIiwiYXNha3VjaGkub2theWFtYS5qcCIsImJpemVuLm9rYXlhbWEuanAiLCJoYXlhc2hpbWEub2theWFtYS5qcCIsImli'@;
put 'YXJhLm9rYXlhbWEuanAiLCJrYWdhbWluby5va2F5YW1hLmpwIiwia2FzYW9rYS5va2F5YW1hLmpwIiwia2liaWNodW8ub2theWFtYS5qcCIsImt1bWVuYW4ub2theWFtYS5qcCIsImt1cmFzaGlraS5va2F5YW1hLmpwIiwibWFuaXdhLm9rYXlhbWEuanAiLCJtaXNha2kub2theWFtYS5qcCIs'@;
put 'Im5hZ2kub2theWFtYS5qcCIsIm5paW1pLm9rYXlhbWEuanAiLCJuaXNoaWF3YWt1cmEub2theWFtYS5qcCIsIm9rYXlhbWEub2theWFtYS5qcCIsInNhdG9zaG8ub2theWFtYS5qcCIsInNldG91Y2hpLm9rYXlhbWEuanAiLCJzaGluam8ub2theWFtYS5qcCIsInNob28ub2theWFtYS5qcCIs'@;
put 'InNvamEub2theWFtYS5qcCIsInRha2FoYXNoaS5va2F5YW1hLmpwIiwidGFtYW5vLm9rYXlhbWEuanAiLCJ0c3V5YW1hLm9rYXlhbWEuanAiLCJ3YWtlLm9rYXlhbWEuanAiLCJ5YWthZ2Uub2theWFtYS5qcCIsImFndW5pLm9raW5hd2EuanAiLCJnaW5vd2FuLm9raW5hd2EuanAiLCJnaW5v'@;
put 'emEub2tpbmF3YS5qcCIsImd1c2hpa2FtaS5va2luYXdhLmpwIiwiaGFlYmFydS5va2luYXdhLmpwIiwiaGlnYXNoaS5va2luYXdhLmpwIiwiaGlyYXJhLm9raW5hd2EuanAiLCJpaGV5YS5va2luYXdhLmpwIiwiaXNoaWdha2kub2tpbmF3YS5qcCIsImlzaGlrYXdhLm9raW5hd2EuanAiLCJp'@;
put 'dG9tYW4ub2tpbmF3YS5qcCIsIml6ZW5hLm9raW5hd2EuanAiLCJrYWRlbmEub2tpbmF3YS5qcCIsImtpbi5va2luYXdhLmpwIiwia2l0YWRhaXRvLm9raW5hd2EuanAiLCJraXRhbmFrYWd1c3VrdS5va2luYXdhLmpwIiwia3VtZWppbWEub2tpbmF3YS5qcCIsImt1bmlnYW1pLm9raW5hd2Eu'@;
put 'anAiLCJtaW5hbWlkYWl0by5va2luYXdhLmpwIiwibW90b2J1Lm9raW5hd2EuanAiLCJuYWdvLm9raW5hd2EuanAiLCJuYWhhLm9raW5hd2EuanAiLCJuYWthZ3VzdWt1Lm9raW5hd2EuanAiLCJuYWtpamluLm9raW5hd2EuanAiLCJuYW5qby5va2luYXdhLmpwIiwibmlzaGloYXJhLm9raW5h'@;
put 'd2EuanAiLCJvZ2ltaS5va2luYXdhLmpwIiwib2tpbmF3YS5va2luYXdhLmpwIiwib25uYS5va2luYXdhLmpwIiwic2hpbW9qaS5va2luYXdhLmpwIiwidGFrZXRvbWkub2tpbmF3YS5qcCIsInRhcmFtYS5va2luYXdhLmpwIiwidG9rYXNoaWtpLm9raW5hd2EuanAiLCJ0b21pZ3VzdWt1Lm9r'@;
put 'aW5hd2EuanAiLCJ0b25ha2kub2tpbmF3YS5qcCIsInVyYXNvZS5va2luYXdhLmpwIiwidXJ1bWEub2tpbmF3YS5qcCIsInlhZXNlLm9raW5hd2EuanAiLCJ5b21pdGFuLm9raW5hd2EuanAiLCJ5b25hYmFydS5va2luYXdhLmpwIiwieW9uYWd1bmkub2tpbmF3YS5qcCIsInphbWFtaS5va2lu'@;
put 'YXdhLmpwIiwiYWJlbm8ub3Nha2EuanAiLCJjaGloYXlhYWthc2FrYS5vc2FrYS5qcCIsImNodW8ub3Nha2EuanAiLCJkYWl0by5vc2FrYS5qcCIsImZ1amlpZGVyYS5vc2FrYS5qcCIsImhhYmlraW5vLm9zYWthLmpwIiwiaGFubmFuLm9zYWthLmpwIiwiaGlnYXNoaW9zYWthLm9zYWthLmpw'@;
put 'IiwiaGlnYXNoaXN1bWl5b3NoaS5vc2FrYS5qcCIsImhpZ2FzaGl5b2RvZ2F3YS5vc2FrYS5qcCIsImhpcmFrYXRhLm9zYWthLmpwIiwiaWJhcmFraS5vc2FrYS5qcCIsImlrZWRhLm9zYWthLmpwIiwiaXp1bWkub3Nha2EuanAiLCJpenVtaW90c3Uub3Nha2EuanAiLCJpenVtaXNhbm8ub3Nh'@;
put 'a2EuanAiLCJrYWRvbWEub3Nha2EuanAiLCJrYWl6dWthLm9zYWthLmpwIiwia2FuYW4ub3Nha2EuanAiLCJrYXNoaXdhcmEub3Nha2EuanAiLCJrYXRhbm8ub3Nha2EuanAiLCJrYXdhY2hpbmFnYW5vLm9zYWthLmpwIiwia2lzaGl3YWRhLm9zYWthLmpwIiwia2l0YS5vc2FrYS5qcCIsImt1'@;
put 'bWF0b3JpLm9zYWthLmpwIiwibWF0c3ViYXJhLm9zYWthLmpwIiwibWluYXRvLm9zYWthLmpwIiwibWlub2gub3Nha2EuanAiLCJtaXNha2kub3Nha2EuanAiLCJtb3JpZ3VjaGkub3Nha2EuanAiLCJuZXlhZ2F3YS5vc2FrYS5qcCIsIm5pc2hpLm9zYWthLmpwIiwibm9zZS5vc2FrYS5qcCIs'@;
put 'Im9zYWthc2F5YW1hLm9zYWthLmpwIiwic2FrYWkub3Nha2EuanAiLCJzYXlhbWEub3Nha2EuanAiLCJzZW5uYW4ub3Nha2EuanAiLCJzZXR0c3Uub3Nha2EuanAiLCJzaGlqb25hd2F0ZS5vc2FrYS5qcCIsInNoaW1hbW90by5vc2FrYS5qcCIsInN1aXRhLm9zYWthLmpwIiwidGFkYW9rYS5v'@;
put 'c2FrYS5qcCIsInRhaXNoaS5vc2FrYS5qcCIsInRhamlyaS5vc2FrYS5qcCIsInRha2Fpc2hpLm9zYWthLmpwIiwidGFrYXRzdWtpLm9zYWthLmpwIiwidG9uZGFiYXlhc2hpLm9zYWthLmpwIiwidG95b25ha2Eub3Nha2EuanAiLCJ0b3lvbm8ub3Nha2EuanAiLCJ5YW8ub3Nha2EuanAiLCJh'@;
put 'cmlha2Uuc2FnYS5qcCIsImFyaXRhLnNhZ2EuanAiLCJmdWt1ZG9taS5zYWdhLmpwIiwiZ2Vua2FpLnNhZ2EuanAiLCJoYW1hdGFtYS5zYWdhLmpwIiwiaGl6ZW4uc2FnYS5qcCIsImltYXJpLnNhZ2EuanAiLCJrYW1pbWluZS5zYWdhLmpwIiwia2FuemFraS5zYWdhLmpwIiwia2FyYXRzdS5z'@;
put 'YWdhLmpwIiwia2FzaGltYS5zYWdhLmpwIiwia2l0YWdhdGEuc2FnYS5qcCIsImtpdGFoYXRhLnNhZ2EuanAiLCJraXlhbWEuc2FnYS5qcCIsImtvdWhva3Uuc2FnYS5qcCIsImt5dXJhZ2kuc2FnYS5qcCIsIm5pc2hpYXJpdGEuc2FnYS5qcCIsIm9naS5zYWdhLmpwIiwib21hY2hpLnNhZ2Eu'@;
put 'anAiLCJvdWNoaS5zYWdhLmpwIiwic2FnYS5zYWdhLmpwIiwic2hpcm9pc2hpLnNhZ2EuanAiLCJ0YWt1LnNhZ2EuanAiLCJ0YXJhLnNhZ2EuanAiLCJ0b3N1LnNhZ2EuanAiLCJ5b3NoaW5vZ2FyaS5zYWdhLmpwIiwiYXJha2F3YS5zYWl0YW1hLmpwIiwiYXNha2Euc2FpdGFtYS5qcCIsImNo'@;
put 'aWNoaWJ1LnNhaXRhbWEuanAiLCJmdWppbWkuc2FpdGFtYS5qcCIsImZ1amltaW5vLnNhaXRhbWEuanAiLCJmdWtheWEuc2FpdGFtYS5qcCIsImhhbm5vLnNhaXRhbWEuanAiLCJoYW55dS5zYWl0YW1hLmpwIiwiaGFzdWRhLnNhaXRhbWEuanAiLCJoYXRvZ2F5YS5zYWl0YW1hLmpwIiwiaGF0'@;
put 'b3lhbWEuc2FpdGFtYS5qcCIsImhpZGFrYS5zYWl0YW1hLmpwIiwiaGlnYXNoaWNoaWNoaWJ1LnNhaXRhbWEuanAiLCJoaWdhc2hpbWF0c3V5YW1hLnNhaXRhbWEuanAiLCJob25qby5zYWl0YW1hLmpwIiwiaW5hLnNhaXRhbWEuanAiLCJpcnVtYS5zYWl0YW1hLmpwIiwiaXdhdHN1a2kuc2Fp'@;
put 'dGFtYS5qcCIsImthbWlpenVtaS5zYWl0YW1hLmpwIiwia2FtaWthd2Euc2FpdGFtYS5qcCIsImthbWlzYXRvLnNhaXRhbWEuanAiLCJrYXN1a2FiZS5zYWl0YW1hLmpwIiwia2F3YWdvZS5zYWl0YW1hLmpwIiwia2F3YWd1Y2hpLnNhaXRhbWEuanAiLCJrYXdhamltYS5zYWl0YW1hLmpwIiwi'@;
put 'a2F6by5zYWl0YW1hLmpwIiwia2l0YW1vdG8uc2FpdGFtYS5qcCIsImtvc2hpZ2F5YS5zYWl0YW1hLmpwIiwia291bm9zdS5zYWl0YW1hLmpwIiwia3VraS5zYWl0YW1hLmpwIiwia3VtYWdheWEuc2FpdGFtYS5qcCIsIm1hdHN1YnVzaGkuc2FpdGFtYS5qcCIsIm1pbmFuby5zYWl0YW1hLmpw'@;
put 'IiwibWlzYXRvLnNhaXRhbWEuanAiLCJtaXlhc2hpcm8uc2FpdGFtYS5qcCIsIm1peW9zaGkuc2FpdGFtYS5qcCIsIm1vcm95YW1hLnNhaXRhbWEuanAiLCJuYWdhdG9yby5zYWl0YW1hLmpwIiwibmFtZWdhd2Euc2FpdGFtYS5qcCIsIm5paXphLnNhaXRhbWEuanAiLCJvZ2Fuby5zYWl0YW1h'@;
put 'LmpwIiwib2dhd2Euc2FpdGFtYS5qcCIsIm9nb3NlLnNhaXRhbWEuanAiLCJva2VnYXdhLnNhaXRhbWEuanAiLCJvbWl5YS5zYWl0YW1hLmpwIiwib3Rha2kuc2FpdGFtYS5qcCIsInJhbnphbi5zYWl0YW1hLmpwIiwicnlva2FtaS5zYWl0YW1hLmpwIiwic2FpdGFtYS5zYWl0YW1hLmpwIiwi'@;
put 'c2FrYWRvLnNhaXRhbWEuanAiLCJzYXR0ZS5zYWl0YW1hLmpwIiwic2F5YW1hLnNhaXRhbWEuanAiLCJzaGlraS5zYWl0YW1hLmpwIiwic2hpcmFva2Euc2FpdGFtYS5qcCIsInNva2Euc2FpdGFtYS5qcCIsInN1Z2l0by5zYWl0YW1hLmpwIiwidG9kYS5zYWl0YW1hLmpwIiwidG9raWdhd2Eu'@;
put 'c2FpdGFtYS5qcCIsInRva29yb3phd2Euc2FpdGFtYS5qcCIsInRzdXJ1Z2FzaGltYS5zYWl0YW1hLmpwIiwidXJhd2Euc2FpdGFtYS5qcCIsIndhcmFiaS5zYWl0YW1hLmpwIiwieWFzaGlvLnNhaXRhbWEuanAiLCJ5b2tvemUuc2FpdGFtYS5qcCIsInlvbm8uc2FpdGFtYS5qcCIsInlvcmlp'@;
put 'LnNhaXRhbWEuanAiLCJ5b3NoaWRhLnNhaXRhbWEuanAiLCJ5b3NoaWthd2Euc2FpdGFtYS5qcCIsInlvc2hpbWkuc2FpdGFtYS5qcCIsImFpc2hvLnNoaWdhLmpwIiwiZ2Ftby5zaGlnYS5qcCIsImhpZ2FzaGlvbWkuc2hpZ2EuanAiLCJoaWtvbmUuc2hpZ2EuanAiLCJrb2thLnNoaWdhLmpw'@;
put 'Iiwia29uYW4uc2hpZ2EuanAiLCJrb3NlaS5zaGlnYS5qcCIsImtvdG8uc2hpZ2EuanAiLCJrdXNhdHN1LnNoaWdhLmpwIiwibWFpYmFyYS5zaGlnYS5qcCIsIm1vcml5YW1hLnNoaWdhLmpwIiwibmFnYWhhbWEuc2hpZ2EuanAiLCJuaXNoaWF6YWkuc2hpZ2EuanAiLCJub3RvZ2F3YS5zaGln'@;
put 'YS5qcCIsIm9taWhhY2hpbWFuLnNoaWdhLmpwIiwib3RzdS5zaGlnYS5qcCIsInJpdHRvLnNoaWdhLmpwIiwicnl1b2guc2hpZ2EuanAiLCJ0YWthc2hpbWEuc2hpZ2EuanAiLCJ0YWthdHN1a2kuc2hpZ2EuanAiLCJ0b3JhaGltZS5zaGlnYS5qcCIsInRveW9zYXRvLnNoaWdhLmpwIiwieWFz'@;
put 'dS5zaGlnYS5qcCIsImFrYWdpLnNoaW1hbmUuanAiLCJhbWEuc2hpbWFuZS5qcCIsImdvdHN1LnNoaW1hbmUuanAiLCJoYW1hZGEuc2hpbWFuZS5qcCIsImhpZ2FzaGlpenVtby5zaGltYW5lLmpwIiwiaGlrYXdhLnNoaW1hbmUuanAiLCJoaWtpbWkuc2hpbWFuZS5qcCIsIml6dW1vLnNoaW1h'@;
put 'bmUuanAiLCJrYWtpbm9raS5zaGltYW5lLmpwIiwibWFzdWRhLnNoaW1hbmUuanAiLCJtYXRzdWUuc2hpbWFuZS5qcCIsIm1pc2F0by5zaGltYW5lLmpwIiwibmlzaGlub3NoaW1hLnNoaW1hbmUuanAiLCJvaGRhLnNoaW1hbmUuanAiLCJva2lub3NoaW1hLnNoaW1hbmUuanAiLCJva3VpenVt'@;
put 'by5zaGltYW5lLmpwIiwic2hpbWFuZS5zaGltYW5lLmpwIiwidGFtYXl1LnNoaW1hbmUuanAiLCJ0c3V3YW5vLnNoaW1hbmUuanAiLCJ1bm5hbi5zaGltYW5lLmpwIiwieWFrdW1vLnNoaW1hbmUuanAiLCJ5YXN1Z2kuc2hpbWFuZS5qcCIsInlhdHN1a2Euc2hpbWFuZS5qcCIsImFyYWkuc2hp'@;
put 'enVva2EuanAiLCJhdGFtaS5zaGl6dW9rYS5qcCIsImZ1amkuc2hpenVva2EuanAiLCJmdWppZWRhLnNoaXp1b2thLmpwIiwiZnVqaWthd2Euc2hpenVva2EuanAiLCJmdWppbm9taXlhLnNoaXp1b2thLmpwIiwiZnVrdXJvaS5zaGl6dW9rYS5qcCIsImdvdGVtYmEuc2hpenVva2EuanAiLCJo'@;
put 'YWliYXJhLnNoaXp1b2thLmpwIiwiaGFtYW1hdHN1LnNoaXp1b2thLmpwIiwiaGlnYXNoaWl6dS5zaGl6dW9rYS5qcCIsIml0by5zaGl6dW9rYS5qcCIsIml3YXRhLnNoaXp1b2thLmpwIiwiaXp1LnNoaXp1b2thLmpwIiwiaXp1bm9rdW5pLnNoaXp1b2thLmpwIiwia2FrZWdhd2Euc2hpenVv'@;
put 'a2EuanAiLCJrYW5uYW1pLnNoaXp1b2thLmpwIiwia2F3YW5laG9uLnNoaXp1b2thLmpwIiwia2F3YXp1LnNoaXp1b2thLmpwIiwia2lrdWdhd2Euc2hpenVva2EuanAiLCJrb3NhaS5zaGl6dW9rYS5qcCIsIm1ha2lub2hhcmEuc2hpenVva2EuanAiLCJtYXRzdXpha2kuc2hpenVva2EuanAi'@;
put 'LCJtaW5hbWlpenUuc2hpenVva2EuanAiLCJtaXNoaW1hLnNoaXp1b2thLmpwIiwibW9yaW1hY2hpLnNoaXp1b2thLmpwIiwibmlzaGlpenUuc2hpenVva2EuanAiLCJudW1henUuc2hpenVva2EuanAiLCJvbWFlemFraS5zaGl6dW9rYS5qcCIsInNoaW1hZGEuc2hpenVva2EuanAiLCJzaGlt'@;
put 'aXp1LnNoaXp1b2thLmpwIiwic2hpbW9kYS5zaGl6dW9rYS5qcCIsInNoaXp1b2thLnNoaXp1b2thLmpwIiwic3Vzb25vLnNoaXp1b2thLmpwIiwieWFpenUuc2hpenVva2EuanAiLCJ5b3NoaWRhLnNoaXp1b2thLmpwIiwiYXNoaWthZ2EudG9jaGlnaS5qcCIsImJhdG8udG9jaGlnaS5qcCIs'@;
put 'ImhhZ2EudG9jaGlnaS5qcCIsImljaGlrYWkudG9jaGlnaS5qcCIsIml3YWZ1bmUudG9jaGlnaS5qcCIsImthbWlub2thd2EudG9jaGlnaS5qcCIsImthbnVtYS50b2NoaWdpLmpwIiwia2FyYXN1eWFtYS50b2NoaWdpLmpwIiwia3Vyb2lzby50b2NoaWdpLmpwIiwibWFzaGlrby50b2NoaWdp'@;
put 'LmpwIiwibWlidS50b2NoaWdpLmpwIiwibW9rYS50b2NoaWdpLmpwIiwibW90ZWdpLnRvY2hpZ2kuanAiLCJuYXN1LnRvY2hpZ2kuanAiLCJuYXN1c2hpb2JhcmEudG9jaGlnaS5qcCIsIm5pa2tvLnRvY2hpZ2kuanAiLCJuaXNoaWthdGEudG9jaGlnaS5qcCIsIm5vZ2kudG9jaGlnaS5qcCIs'@;
put 'Im9oaXJhLnRvY2hpZ2kuanAiLCJvaHRhd2FyYS50b2NoaWdpLmpwIiwib3lhbWEudG9jaGlnaS5qcCIsInNha3VyYS50b2NoaWdpLmpwIiwic2Fuby50b2NoaWdpLmpwIiwic2hpbW90c3VrZS50b2NoaWdpLmpwIiwic2hpb3lhLnRvY2hpZ2kuanAiLCJ0YWthbmV6YXdhLnRvY2hpZ2kuanAi'@;
put 'LCJ0b2NoaWdpLnRvY2hpZ2kuanAiLCJ0c3VnYS50b2NoaWdpLmpwIiwidWppaWUudG9jaGlnaS5qcCIsInV0c3Vub21peWEudG9jaGlnaS5qcCIsInlhaXRhLnRvY2hpZ2kuanAiLCJhaXp1bWkudG9rdXNoaW1hLmpwIiwiYW5hbi50b2t1c2hpbWEuanAiLCJpY2hpYmEudG9rdXNoaW1hLmpw'@;
put 'IiwiaXRhbm8udG9rdXNoaW1hLmpwIiwia2FpbmFuLnRva3VzaGltYS5qcCIsImtvbWF0c3VzaGltYS50b2t1c2hpbWEuanAiLCJtYXRzdXNoaWdlLnRva3VzaGltYS5qcCIsIm1pbWEudG9rdXNoaW1hLmpwIiwibWluYW1pLnRva3VzaGltYS5qcCIsIm1peW9zaGkudG9rdXNoaW1hLmpwIiwi'@;
put 'bXVnaS50b2t1c2hpbWEuanAiLCJuYWthZ2F3YS50b2t1c2hpbWEuanAiLCJuYXJ1dG8udG9rdXNoaW1hLmpwIiwic2FuYWdvY2hpLnRva3VzaGltYS5qcCIsInNoaXNoaWt1aS50b2t1c2hpbWEuanAiLCJ0b2t1c2hpbWEudG9rdXNoaW1hLmpwIiwid2FqaWtpLnRva3VzaGltYS5qcCIsImFk'@;
put 'YWNoaS50b2t5by5qcCIsImFraXJ1bm8udG9reW8uanAiLCJha2lzaGltYS50b2t5by5qcCIsImFvZ2FzaGltYS50b2t5by5qcCIsImFyYWthd2EudG9reW8uanAiLCJidW5reW8udG9reW8uanAiLCJjaGl5b2RhLnRva3lvLmpwIiwiY2hvZnUudG9reW8uanAiLCJjaHVvLnRva3lvLmpwIiwi'@;
put 'ZWRvZ2F3YS50b2t5by5qcCIsImZ1Y2h1LnRva3lvLmpwIiwiZnVzc2EudG9reW8uanAiLCJoYWNoaWpvLnRva3lvLmpwIiwiaGFjaGlvamkudG9reW8uanAiLCJoYW11cmEudG9reW8uanAiLCJoaWdhc2hpa3VydW1lLnRva3lvLmpwIiwiaGlnYXNoaW11cmF5YW1hLnRva3lvLmpwIiwiaGln'@;
put 'YXNoaXlhbWF0by50b2t5by5qcCIsImhpbm8udG9reW8uanAiLCJoaW5vZGUudG9reW8uanAiLCJoaW5vaGFyYS50b2t5by5qcCIsImluYWdpLnRva3lvLmpwIiwiaXRhYmFzaGkudG9reW8uanAiLCJrYXRzdXNoaWthLnRva3lvLmpwIiwia2l0YS50b2t5by5qcCIsImtpeW9zZS50b2t5by5q'@;
put 'cCIsImtvZGFpcmEudG9reW8uanAiLCJrb2dhbmVpLnRva3lvLmpwIiwia29rdWJ1bmppLnRva3lvLmpwIiwia29tYWUudG9reW8uanAiLCJrb3RvLnRva3lvLmpwIiwia291enVzaGltYS50b2t5by5qcCIsImt1bml0YWNoaS50b2t5by5qcCIsIm1hY2hpZGEudG9reW8uanAiLCJtZWd1cm8u'@;
put 'dG9reW8uanAiLCJtaW5hdG8udG9reW8uanAiLCJtaXRha2EudG9reW8uanAiLCJtaXp1aG8udG9reW8uanAiLCJtdXNhc2hpbXVyYXlhbWEudG9reW8uanAiLCJtdXNhc2hpbm8udG9reW8uanAiLCJuYWthbm8udG9reW8uanAiLCJuZXJpbWEudG9reW8uanAiLCJvZ2FzYXdhcmEudG9reW8u'@;
put 'anAiLCJva3V0YW1hLnRva3lvLmpwIiwib21lLnRva3lvLmpwIiwib3NoaW1hLnRva3lvLmpwIiwib3RhLnRva3lvLmpwIiwic2V0YWdheWEudG9reW8uanAiLCJzaGlidXlhLnRva3lvLmpwIiwic2hpbmFnYXdhLnRva3lvLmpwIiwic2hpbmp1a3UudG9reW8uanAiLCJzdWdpbmFtaS50b2t5'@;
put 'by5qcCIsInN1bWlkYS50b2t5by5qcCIsInRhY2hpa2F3YS50b2t5by5qcCIsInRhaXRvLnRva3lvLmpwIiwidGFtYS50b2t5by5qcCIsInRvc2hpbWEudG9reW8uanAiLCJjaGl6dS50b3R0b3JpLmpwIiwiaGluby50b3R0b3JpLmpwIiwia2F3YWhhcmEudG90dG9yaS5qcCIsImtvZ2UudG90'@;
put 'dG9yaS5qcCIsImtvdG91cmEudG90dG9yaS5qcCIsIm1pc2FzYS50b3R0b3JpLmpwIiwibmFuYnUudG90dG9yaS5qcCIsIm5pY2hpbmFuLnRvdHRvcmkuanAiLCJzYWthaW1pbmF0by50b3R0b3JpLmpwIiwidG90dG9yaS50b3R0b3JpLmpwIiwid2FrYXNhLnRvdHRvcmkuanAiLCJ5YXp1LnRv'@;
put 'dHRvcmkuanAiLCJ5b25hZ28udG90dG9yaS5qcCIsImFzYWhpLnRveWFtYS5qcCIsImZ1Y2h1LnRveWFtYS5qcCIsImZ1a3VtaXRzdS50b3lhbWEuanAiLCJmdW5haGFzaGkudG95YW1hLmpwIiwiaGltaS50b3lhbWEuanAiLCJpbWl6dS50b3lhbWEuanAiLCJpbmFtaS50b3lhbWEuanAiLCJq'@;
put 'b2hhbmEudG95YW1hLmpwIiwia2FtaWljaGkudG95YW1hLmpwIiwia3Vyb2JlLnRveWFtYS5qcCIsIm5ha2FuaWlrYXdhLnRveWFtYS5qcCIsIm5hbWVyaWthd2EudG95YW1hLmpwIiwibmFudG8udG95YW1hLmpwIiwibnl1emVuLnRveWFtYS5qcCIsIm95YWJlLnRveWFtYS5qcCIsInRhaXJh'@;
put 'LnRveWFtYS5qcCIsInRha2Fva2EudG95YW1hLmpwIiwidGF0ZXlhbWEudG95YW1hLmpwIiwidG9nYS50b3lhbWEuanAiLCJ0b25hbWkudG95YW1hLmpwIiwidG95YW1hLnRveWFtYS5qcCIsInVuYXp1a2kudG95YW1hLmpwIiwidW96dS50b3lhbWEuanAiLCJ5YW1hZGEudG95YW1hLmpwIiwi'@;
put 'YXJpZGEud2FrYXlhbWEuanAiLCJhcmlkYWdhd2Eud2FrYXlhbWEuanAiLCJnb2JvLndha2F5YW1hLmpwIiwiaGFzaGltb3RvLndha2F5YW1hLmpwIiwiaGlkYWthLndha2F5YW1hLmpwIiwiaGlyb2dhd2Eud2FrYXlhbWEuanAiLCJpbmFtaS53YWtheWFtYS5qcCIsIml3YWRlLndha2F5YW1h'@;
put 'LmpwIiwia2FpbmFuLndha2F5YW1hLmpwIiwia2FtaXRvbmRhLndha2F5YW1hLmpwIiwia2F0c3VyYWdpLndha2F5YW1hLmpwIiwia2ltaW5vLndha2F5YW1hLmpwIiwia2lub2thd2Eud2FrYXlhbWEuanAiLCJraXRheWFtYS53YWtheWFtYS5qcCIsImtveWEud2FrYXlhbWEuanAiLCJrb3ph'@;
put 'Lndha2F5YW1hLmpwIiwia296YWdhd2Eud2FrYXlhbWEuanAiLCJrdWRveWFtYS53YWtheWFtYS5qcCIsImt1c2hpbW90by53YWtheWFtYS5qcCIsIm1paGFtYS53YWtheWFtYS5qcCIsIm1pc2F0by53YWtheWFtYS5qcCIsIm5hY2hpa2F0c3V1cmEud2FrYXlhbWEuanAiLCJzaGluZ3Uud2Fr'@;
put 'YXlhbWEuanAiLCJzaGlyYWhhbWEud2FrYXlhbWEuanAiLCJ0YWlqaS53YWtheWFtYS5qcCIsInRhbmFiZS53YWtheWFtYS5qcCIsIndha2F5YW1hLndha2F5YW1hLmpwIiwieXVhc2Eud2FrYXlhbWEuanAiLCJ5dXJhLndha2F5YW1hLmpwIiwiYXNhaGkueWFtYWdhdGEuanAiLCJmdW5hZ2F0'@;
put 'YS55YW1hZ2F0YS5qcCIsImhpZ2FzaGluZS55YW1hZ2F0YS5qcCIsImlpZGUueWFtYWdhdGEuanAiLCJrYWhva3UueWFtYWdhdGEuanAiLCJrYW1pbm95YW1hLnlhbWFnYXRhLmpwIiwia2FuZXlhbWEueWFtYWdhdGEuanAiLCJrYXdhbmlzaGkueWFtYWdhdGEuanAiLCJtYW11cm9nYXdhLnlh'@;
put 'bWFnYXRhLmpwIiwibWlrYXdhLnlhbWFnYXRhLmpwIiwibXVyYXlhbWEueWFtYWdhdGEuanAiLCJuYWdhaS55YW1hZ2F0YS5qcCIsIm5ha2F5YW1hLnlhbWFnYXRhLmpwIiwibmFueW8ueWFtYWdhdGEuanAiLCJuaXNoaWthd2EueWFtYWdhdGEuanAiLCJvYmFuYXphd2EueWFtYWdhdGEuanAi'@;
put 'LCJvZS55YW1hZ2F0YS5qcCIsIm9ndW5pLnlhbWFnYXRhLmpwIiwib2hrdXJhLnlhbWFnYXRhLmpwIiwib2lzaGlkYS55YW1hZ2F0YS5qcCIsInNhZ2FlLnlhbWFnYXRhLmpwIiwic2FrYXRhLnlhbWFnYXRhLmpwIiwic2FrZWdhd2EueWFtYWdhdGEuanAiLCJzaGluam8ueWFtYWdhdGEuanAi'@;
put 'LCJzaGlyYXRha2EueWFtYWdhdGEuanAiLCJzaG9uYWkueWFtYWdhdGEuanAiLCJ0YWthaGF0YS55YW1hZ2F0YS5qcCIsInRlbmRvLnlhbWFnYXRhLmpwIiwidG96YXdhLnlhbWFnYXRhLmpwIiwidHN1cnVva2EueWFtYWdhdGEuanAiLCJ5YW1hZ2F0YS55YW1hZ2F0YS5qcCIsInlhbWFub2Jl'@;
put 'LnlhbWFnYXRhLmpwIiwieW9uZXphd2EueWFtYWdhdGEuanAiLCJ5dXphLnlhbWFnYXRhLmpwIiwiYWJ1LnlhbWFndWNoaS5qcCIsImhhZ2kueWFtYWd1Y2hpLmpwIiwiaGlrYXJpLnlhbWFndWNoaS5qcCIsImhvZnUueWFtYWd1Y2hpLmpwIiwiaXdha3VuaS55YW1hZ3VjaGkuanAiLCJrdWRh'@;
put 'bWF0c3UueWFtYWd1Y2hpLmpwIiwibWl0b3UueWFtYWd1Y2hpLmpwIiwibmFnYXRvLnlhbWFndWNoaS5qcCIsIm9zaGltYS55YW1hZ3VjaGkuanAiLCJzaGltb25vc2VraS55YW1hZ3VjaGkuanAiLCJzaHVuYW4ueWFtYWd1Y2hpLmpwIiwidGFidXNlLnlhbWFndWNoaS5qcCIsInRva3V5YW1h'@;
put 'LnlhbWFndWNoaS5qcCIsInRveW90YS55YW1hZ3VjaGkuanAiLCJ1YmUueWFtYWd1Y2hpLmpwIiwieXV1LnlhbWFndWNoaS5qcCIsImNodW8ueWFtYW5hc2hpLmpwIiwiZG9zaGkueWFtYW5hc2hpLmpwIiwiZnVlZnVraS55YW1hbmFzaGkuanAiLCJmdWppa2F3YS55YW1hbmFzaGkuanAiLCJm'@;
put 'dWppa2F3YWd1Y2hpa28ueWFtYW5hc2hpLmpwIiwiZnVqaXlvc2hpZGEueWFtYW5hc2hpLmpwIiwiaGF5YWthd2EueWFtYW5hc2hpLmpwIiwiaG9rdXRvLnlhbWFuYXNoaS5qcCIsImljaGlrYXdhbWlzYXRvLnlhbWFuYXNoaS5qcCIsImthaS55YW1hbmFzaGkuanAiLCJrb2Z1LnlhbWFuYXNo'@;
put 'aS5qcCIsImtvc2h1LnlhbWFuYXNoaS5qcCIsImtvc3VnZS55YW1hbmFzaGkuanAiLCJtaW5hbWktYWxwcy55YW1hbmFzaGkuanAiLCJtaW5vYnUueWFtYW5hc2hpLmpwIiwibmFrYW1pY2hpLnlhbWFuYXNoaS5qcCIsIm5hbmJ1LnlhbWFuYXNoaS5qcCIsIm5hcnVzYXdhLnlhbWFuYXNoaS5q'@;
put 'cCIsIm5pcmFzYWtpLnlhbWFuYXNoaS5qcCIsIm5pc2hpa2F0c3VyYS55YW1hbmFzaGkuanAiLCJvc2hpbm8ueWFtYW5hc2hpLmpwIiwib3RzdWtpLnlhbWFuYXNoaS5qcCIsInNob3dhLnlhbWFuYXNoaS5qcCIsInRhYmF5YW1hLnlhbWFuYXNoaS5qcCIsInRzdXJ1LnlhbWFuYXNoaS5qcCIs'@;
put 'InVlbm9oYXJhLnlhbWFuYXNoaS5qcCIsInlhbWFuYWtha28ueWFtYW5hc2hpLmpwIiwieWFtYW5hc2hpLnlhbWFuYXNoaS5qcCIsImtlIiwiYWMua2UiLCJjby5rZSIsImdvLmtlIiwiaW5mby5rZSIsIm1lLmtlIiwibW9iaS5rZSIsIm5lLmtlIiwib3Iua2UiLCJzYy5rZSIsImtnIiwiY29t'@;
put 'LmtnIiwiZWR1LmtnIiwiZ292LmtnIiwibWlsLmtnIiwibmV0LmtnIiwib3JnLmtnIiwiKi5raCIsImtpIiwiYml6LmtpIiwiY29tLmtpIiwiZWR1LmtpIiwiZ292LmtpIiwiaW5mby5raSIsIm5ldC5raSIsIm9yZy5raSIsImttIiwiYXNzLmttIiwiY29tLmttIiwiZWR1LmttIiwiZ292Lmtt'@;
put 'IiwibWlsLmttIiwibm9tLmttIiwib3JnLmttIiwicHJkLmttIiwidG0ua20iLCJhc3NvLmttIiwiY29vcC5rbSIsImdvdXYua20iLCJtZWRlY2luLmttIiwibm90YWlyZXMua20iLCJwaGFybWFjaWVucy5rbSIsInByZXNzZS5rbSIsInZldGVyaW5haXJlLmttIiwia24iLCJlZHUua24iLCJn'@;
put 'b3Yua24iLCJuZXQua24iLCJvcmcua24iLCJrcCIsImNvbS5rcCIsImVkdS5rcCIsImdvdi5rcCIsIm9yZy5rcCIsInJlcC5rcCIsInRyYS5rcCIsImtyIiwiYWMua3IiLCJjby5rciIsImVzLmtyIiwiZ28ua3IiLCJocy5rciIsImtnLmtyIiwibWlsLmtyIiwibXMua3IiLCJuZS5rciIsIm9y'@;
put 'LmtyIiwicGUua3IiLCJyZS5rciIsInNjLmtyIiwiYnVzYW4ua3IiLCJjaHVuZ2J1ay5rciIsImNodW5nbmFtLmtyIiwiZGFlZ3Uua3IiLCJkYWVqZW9uLmtyIiwiZ2FuZ3dvbi5rciIsImd3YW5nanUua3IiLCJneWVvbmdidWsua3IiLCJneWVvbmdnaS5rciIsImd5ZW9uZ25hbS5rciIsImlu'@;
put 'Y2hlb24ua3IiLCJqZWp1LmtyIiwiamVvbmJ1ay5rciIsImplb25uYW0ua3IiLCJzZW91bC5rciIsInVsc2FuLmtyIiwia3ciLCJjb20ua3ciLCJlZHUua3ciLCJlbWIua3ciLCJnb3Yua3ciLCJpbmQua3ciLCJuZXQua3ciLCJvcmcua3ciLCJreSIsImNvbS5reSIsImVkdS5reSIsIm5ldC5r'@;
put 'eSIsIm9yZy5reSIsImt6IiwiY29tLmt6IiwiZWR1Lmt6IiwiZ292Lmt6IiwibWlsLmt6IiwibmV0Lmt6Iiwib3JnLmt6IiwibGEiLCJjb20ubGEiLCJlZHUubGEiLCJnb3YubGEiLCJpbmZvLmxhIiwiaW50LmxhIiwibmV0LmxhIiwib3JnLmxhIiwicGVyLmxhIiwibGIiLCJjb20ubGIiLCJl'@;
put 'ZHUubGIiLCJnb3YubGIiLCJuZXQubGIiLCJvcmcubGIiLCJsYyIsImNvLmxjIiwiY29tLmxjIiwiZWR1LmxjIiwiZ292LmxjIiwibmV0LmxjIiwib3JnLmxjIiwibGkiLCJsayIsImFjLmxrIiwiYXNzbi5sayIsImNvbS5sayIsImVkdS5sayIsImdvdi5sayIsImdycC5sayIsImhvdGVsLmxr'@;
put 'IiwiaW50LmxrIiwibHRkLmxrIiwibmV0LmxrIiwibmdvLmxrIiwib3JnLmxrIiwic2NoLmxrIiwic29jLmxrIiwid2ViLmxrIiwibHIiLCJjb20ubHIiLCJlZHUubHIiLCJnb3YubHIiLCJuZXQubHIiLCJvcmcubHIiLCJscyIsImFjLmxzIiwiYml6LmxzIiwiY28ubHMiLCJlZHUubHMiLCJn'@;
put 'b3YubHMiLCJpbmZvLmxzIiwibmV0LmxzIiwib3JnLmxzIiwic2MubHMiLCJsdCIsImdvdi5sdCIsImx1IiwibHYiLCJhc24ubHYiLCJjb20ubHYiLCJjb25mLmx2IiwiZWR1Lmx2IiwiZ292Lmx2IiwiaWQubHYiLCJtaWwubHYiLCJuZXQubHYiLCJvcmcubHYiLCJseSIsImNvbS5seSIsImVk'@;
put 'dS5seSIsImdvdi5seSIsImlkLmx5IiwibWVkLmx5IiwibmV0Lmx5Iiwib3JnLmx5IiwicGxjLmx5Iiwic2NoLmx5IiwibWEiLCJhYy5tYSIsImNvLm1hIiwiZ292Lm1hIiwibmV0Lm1hIiwib3JnLm1hIiwicHJlc3MubWEiLCJtYyIsImFzc28ubWMiLCJ0bS5tYyIsIm1kIiwibWUiLCJhYy5t'@;
put 'ZSIsImNvLm1lIiwiZWR1Lm1lIiwiZ292Lm1lIiwiaXRzLm1lIiwibmV0Lm1lIiwib3JnLm1lIiwicHJpdi5tZSIsIm1nIiwiY28ubWciLCJjb20ubWciLCJlZHUubWciLCJnb3YubWciLCJtaWwubWciLCJub20ubWciLCJvcmcubWciLCJwcmQubWciLCJtaCIsIm1pbCIsIm1rIiwiY29tLm1r'@;
put 'IiwiZWR1Lm1rIiwiZ292Lm1rIiwiaW5mLm1rIiwibmFtZS5tayIsIm5ldC5tayIsIm9yZy5tayIsIm1sIiwiY29tLm1sIiwiZWR1Lm1sIiwiZ291di5tbCIsImdvdi5tbCIsIm5ldC5tbCIsIm9yZy5tbCIsInByZXNzZS5tbCIsIioubW0iLCJtbiIsImVkdS5tbiIsImdvdi5tbiIsIm9yZy5t'@;
put 'biIsIm1vIiwiY29tLm1vIiwiZWR1Lm1vIiwiZ292Lm1vIiwibmV0Lm1vIiwib3JnLm1vIiwibW9iaSIsIm1wIiwibXEiLCJtciIsImdvdi5tciIsIm1zIiwiY29tLm1zIiwiZWR1Lm1zIiwiZ292Lm1zIiwibmV0Lm1zIiwib3JnLm1zIiwibXQiLCJjb20ubXQiLCJlZHUubXQiLCJuZXQubXQi'@;
put 'LCJvcmcubXQiLCJtdSIsImFjLm11IiwiY28ubXUiLCJjb20ubXUiLCJnb3YubXUiLCJuZXQubXUiLCJvci5tdSIsIm9yZy5tdSIsIm11c2V1bSIsIm12IiwiYWVyby5tdiIsImJpei5tdiIsImNvbS5tdiIsImNvb3AubXYiLCJlZHUubXYiLCJnb3YubXYiLCJpbmZvLm12IiwiaW50Lm12Iiwi'@;
put 'bWlsLm12IiwibXVzZXVtLm12IiwibmFtZS5tdiIsIm5ldC5tdiIsIm9yZy5tdiIsInByby5tdiIsIm13IiwiYWMubXciLCJiaXoubXciLCJjby5tdyIsImNvbS5tdyIsImNvb3AubXciLCJlZHUubXciLCJnb3YubXciLCJpbnQubXciLCJuZXQubXciLCJvcmcubXciLCJteCIsImNvbS5teCIs'@;
put 'ImVkdS5teCIsImdvYi5teCIsIm5ldC5teCIsIm9yZy5teCIsIm15IiwiYml6Lm15IiwiY29tLm15IiwiZWR1Lm15IiwiZ292Lm15IiwibWlsLm15IiwibmFtZS5teSIsIm5ldC5teSIsIm9yZy5teSIsIm16IiwiYWMubXoiLCJhZHYubXoiLCJjby5teiIsImVkdS5teiIsImdvdi5teiIsIm1p'@;
put 'bC5teiIsIm5ldC5teiIsIm9yZy5teiIsIm5hIiwiYWx0Lm5hIiwiY28ubmEiLCJjb20ubmEiLCJnb3YubmEiLCJuZXQubmEiLCJvcmcubmEiLCJuYW1lIiwibmMiLCJhc3NvLm5jIiwibm9tLm5jIiwibmUiLCJuZXQiLCJuZiIsImFydHMubmYiLCJjb20ubmYiLCJmaXJtLm5mIiwiaW5mby5u'@;
put 'ZiIsIm5ldC5uZiIsIm90aGVyLm5mIiwicGVyLm5mIiwicmVjLm5mIiwic3RvcmUubmYiLCJ3ZWIubmYiLCJuZyIsImNvbS5uZyIsImVkdS5uZyIsImdvdi5uZyIsImkubmciLCJtaWwubmciLCJtb2JpLm5nIiwibmFtZS5uZyIsIm5ldC5uZyIsIm9yZy5uZyIsInNjaC5uZyIsIm5pIiwiYWMu'@;
put 'bmkiLCJiaXoubmkiLCJjby5uaSIsImNvbS5uaSIsImVkdS5uaSIsImdvYi5uaSIsImluLm5pIiwiaW5mby5uaSIsImludC5uaSIsIm1pbC5uaSIsIm5ldC5uaSIsIm5vbS5uaSIsIm9yZy5uaSIsIndlYi5uaSIsIm5sIiwibm8iLCJmaHMubm8iLCJmb2xrZWJpYmwubm8iLCJmeWxrZXNiaWJs'@;
put 'Lm5vIiwiaWRyZXR0Lm5vIiwibXVzZXVtLm5vIiwicHJpdi5ubyIsInZncy5ubyIsImRlcC5ubyIsImhlcmFkLm5vIiwia29tbXVuZS5ubyIsIm1pbC5ubyIsInN0YXQubm8iLCJhYS5ubyIsImFoLm5vIiwiYnUubm8iLCJmbS5ubyIsImhsLm5vIiwiaG0ubm8iLCJqYW4tbWF5ZW4ubm8iLCJt'@;
put 'ci5ubyIsIm5sLm5vIiwibnQubm8iLCJvZi5ubyIsIm9sLm5vIiwib3Nsby5ubyIsInJsLm5vIiwic2Yubm8iLCJzdC5ubyIsInN2YWxiYXJkLm5vIiwidG0ubm8iLCJ0ci5ubyIsInZhLm5vIiwidmYubm8iLCJncy5hYS5ubyIsImdzLmFoLm5vIiwiZ3MuYnUubm8iLCJncy5mbS5ubyIsImdz'@;
put 'LmhsLm5vIiwiZ3MuaG0ubm8iLCJncy5qYW4tbWF5ZW4ubm8iLCJncy5tci5ubyIsImdzLm5sLm5vIiwiZ3MubnQubm8iLCJncy5vZi5ubyIsImdzLm9sLm5vIiwiZ3Mub3Nsby5ubyIsImdzLnJsLm5vIiwiZ3Muc2Yubm8iLCJncy5zdC5ubyIsImdzLnN2YWxiYXJkLm5vIiwiZ3MudG0ubm8i'@;
put 'LCJncy50ci5ubyIsImdzLnZhLm5vIiwiZ3MudmYubm8iLCJha3JlaGFtbi5ubyIsIlx4ZTVrcmVoYW1uLm5vIiwiYWxnYXJkLm5vIiwiXHhlNWxnXHhlNXJkLm5vIiwiYXJuYS5ubyIsImJyb25ub3lzdW5kLm5vIiwiYnJceGY4bm5ceGY4eXN1bmQubm8iLCJicnVtdW5kZGFsLm5vIiwiYnJ5'@;
put 'bmUubm8iLCJkcm9iYWsubm8iLCJkclx4ZjhiYWsubm8iLCJlZ2Vyc3VuZC5ubyIsImZldHN1bmQubm8iLCJmbG9yby5ubyIsImZsb3JceGY4Lm5vIiwiZnJlZHJpa3N0YWQubm8iLCJob2trc3VuZC5ubyIsImhvbmVmb3NzLm5vIiwiaFx4ZjhuZWZvc3Mubm8iLCJqZXNzaGVpbS5ubyIsImpv'@;
put 'cnBlbGFuZC5ubyIsImpceGY4cnBlbGFuZC5ubyIsImtpcmtlbmVzLm5vIiwia29wZXJ2aWsubm8iLCJrcm9rc3RhZGVsdmEubm8iLCJsYW5nZXZhZy5ubyIsImxhbmdldlx4ZTVnLm5vIiwibGVpcnZpay5ubyIsIm1qb25kYWxlbi5ubyIsIm1qXHhmOG5kYWxlbi5ubyIsIm1vLWktcmFuYS5u'@;
put 'byIsIm1vc2pvZW4ubm8iLCJtb3NqXHhmOGVuLm5vIiwibmVzb2RkdGFuZ2VuLm5vIiwib3JrYW5nZXIubm8iLCJvc295cm8ubm8iLCJvc1x4Zjh5cm8ubm8iLCJyYWhvbHQubm8iLCJyXHhlNWhvbHQubm8iLCJzYW5kbmVzc2pvZW4ubm8iLCJzYW5kbmVzc2pceGY4ZW4ubm8iLCJza2Vkc21v'@;
put 'a29yc2V0Lm5vIiwic2xhdHR1bS5ubyIsInNwamVsa2F2aWsubm8iLCJzdGF0aGVsbGUubm8iLCJzdGF2ZXJuLm5vIiwic3Rqb3JkYWxzaGFsc2VuLm5vIiwic3RqXHhmOHJkYWxzaGFsc2VuLm5vIiwidGFuYW5nZXIubm8iLCJ0cmFuYnkubm8iLCJ2b3NzZXZhbmdlbi5ubyIsImFhcmJvcnRl'@;
put 'Lm5vIiwiYWVqcmllLm5vIiwiYWZqb3JkLm5vIiwiXHhlNWZqb3JkLm5vIiwiYWdkZW5lcy5ubyIsIm5lcy5ha2Vyc2h1cy5ubyIsImFrbm9sdW9rdGEubm8iLCJceGUxa1x1MDE0Ym9sdW9rdGEubm8iLCJhbC5ubyIsIlx4ZTVsLm5vIiwiYWxhaGVhZGp1Lm5vIiwiXHhlMWxhaGVhZGp1Lm5v'@;
put 'IiwiYWxlc3VuZC5ubyIsIlx4ZTVsZXN1bmQubm8iLCJhbHN0YWhhdWcubm8iLCJhbHRhLm5vIiwiXHhlMWx0XHhlMS5ubyIsImFsdmRhbC5ubyIsImFtbGkubm8iLCJceGU1bWxpLm5vIiwiYW1vdC5ubyIsIlx4ZTVtb3Qubm8iLCJhbmRhc3VvbG8ubm8iLCJhbmRlYnUubm8iLCJhbmRveS5u'@;
put 'byIsImFuZFx4Zjh5Lm5vIiwiYXJkYWwubm8iLCJceGU1cmRhbC5ubyIsImFyZW1hcmsubm8iLCJhcmVuZGFsLm5vIiwiXHhlNXMubm8iLCJhc2VyYWwubm8iLCJceGU1c2VyYWwubm8iLCJhc2tlci5ubyIsImFza2ltLm5vIiwiYXNrb3kubm8iLCJhc2tceGY4eS5ubyIsImFza3ZvbGwubm8i'@;
put 'LCJhc25lcy5ubyIsIlx4ZTVzbmVzLm5vIiwiYXVkbmVkYWxuLm5vIiwiYXVrcmEubm8iLCJhdXJlLm5vIiwiYXVybGFuZC5ubyIsImF1cnNrb2ctaG9sYW5kLm5vIiwiYXVyc2tvZy1oXHhmOGxhbmQubm8iLCJhdXN0ZXZvbGwubm8iLCJhdXN0cmhlaW0ubm8iLCJhdmVyb3kubm8iLCJhdmVy'@;
put 'XHhmOHkubm8iLCJiYWRhZGRqYS5ubyIsImJceGU1ZFx4ZTVkZGpceGU1Lm5vIiwiYlx4ZTZydW0ubm8iLCJiYWhjYXZ1b3RuYS5ubyIsImJceGUxaGNhdnVvdG5hLm5vIiwiYmFoY2NhdnVvdG5hLm5vIiwiYlx4ZTFoY2NhdnVvdG5hLm5vIiwiYmFpZGFyLm5vIiwiYlx4ZTFpZFx4ZTFyLm5v'@;
put 'IiwiYmFqZGRhci5ubyIsImJceGUxamRkYXIubm8iLCJiYWxhdC5ubyIsImJceGUxbFx4ZTF0Lm5vIiwiYmFsZXN0cmFuZC5ubyIsImJhbGxhbmdlbi5ubyIsImJhbHNmam9yZC5ubyIsImJhbWJsZS5ubyIsImJhcmR1Lm5vIiwiYmFydW0ubm8iLCJiYXRzZmpvcmQubm8iLCJiXHhlNXRzZmpv'@;
put 'cmQubm8iLCJiZWFyYWx2YWhraS5ubyIsImJlYXJhbHZceGUxaGtpLm5vIiwiYmVhcmR1Lm5vIiwiYmVpYXJuLm5vIiwiYmVyZy5ubyIsImJlcmdlbi5ubyIsImJlcmxldmFnLm5vIiwiYmVybGV2XHhlNWcubm8iLCJiaWV2YXQubm8iLCJiaWV2XHhlMXQubm8iLCJiaW5kYWwubm8iLCJiaXJr'@;
put 'ZW5lcy5ubyIsImJqYXJrb3kubm8iLCJiamFya1x4Zjh5Lm5vIiwiYmplcmtyZWltLm5vIiwiYmp1Z24ubm8iLCJib2RvLm5vIiwiYm9kXHhmOC5ubyIsImJva24ubm8iLCJib21sby5ubyIsImJceGY4bWxvLm5vIiwiYnJlbWFuZ2VyLm5vIiwiYnJvbm5veS5ubyIsImJyXHhmOG5uXHhmOHku'@;
put 'bm8iLCJidWRlamp1Lm5vIiwibmVzLmJ1c2tlcnVkLm5vIiwiYnlnbGFuZC5ubyIsImJ5a2xlLm5vIiwiY2FoY2VzdW9sby5ubyIsIlx1MDEwZFx4ZTFoY2VzdW9sby5ubyIsImRhdnZlbmphcmdhLm5vIiwiZGF2dmVualx4ZTFyZ2Eubm8iLCJkYXZ2ZXNpaWRhLm5vIiwiZGVhdG51Lm5vIiwi'@;
put 'ZGllbGRkYW51b3JyaS5ubyIsImRpdnRhc3Z1b2RuYS5ubyIsImRpdnR0YXN2dW90bmEubm8iLCJkb25uYS5ubyIsImRceGY4bm5hLm5vIiwiZG92cmUubm8iLCJkcmFtbWVuLm5vIiwiZHJhbmdlZGFsLm5vIiwiZHlyb3kubm8iLCJkeXJceGY4eS5ubyIsImVpZC5ubyIsImVpZGZqb3JkLm5v'@;
put 'IiwiZWlkc2Jlcmcubm8iLCJlaWRza29nLm5vIiwiZWlkc3ZvbGwubm8iLCJlaWdlcnN1bmQubm8iLCJlbHZlcnVtLm5vIiwiZW5lYmFray5ubyIsImVuZ2VyZGFsLm5vIiwiZXRuZS5ubyIsImV0bmVkYWwubm8iLCJldmVuYXNzaS5ubyIsImV2ZW5ceGUxXHUwMTYxXHUwMTYxaS5ubyIsImV2'@;
put 'ZW5lcy5ubyIsImV2amUtb2ctaG9ybm5lcy5ubyIsImZhcnN1bmQubm8iLCJmYXVza2Uubm8iLCJmZWRqZS5ubyIsImZldC5ubyIsImZpbm5veS5ubyIsImZpbm5ceGY4eS5ubyIsImZpdGphci5ubyIsImZqYWxlci5ubyIsImZqZWxsLm5vIiwiZmxhLm5vIiwiZmxceGU1Lm5vIiwiZmxha3N0'@;
put 'YWQubm8iLCJmbGF0YW5nZXIubm8iLCJmbGVra2Vmam9yZC5ubyIsImZsZXNiZXJnLm5vIiwiZmxvcmEubm8iLCJmb2xsZGFsLm5vIiwiZm9yZGUubm8iLCJmXHhmOHJkZS5ubyIsImZvcnNhbmQubm8iLCJmb3NuZXMubm8iLCJmclx4ZTZuYS5ubyIsImZyYW5hLm5vIiwiZnJlaS5ubyIsImZy'@;
put 'b2duLm5vIiwiZnJvbGFuZC5ubyIsImZyb3N0YS5ubyIsImZyb3lhLm5vIiwiZnJceGY4eWEubm8iLCJmdW9pc2t1Lm5vIiwiZnVvc3Nrby5ubyIsImZ1c2Eubm8iLCJmeXJlc2RhbC5ubyIsImdhaXZ1b3RuYS5ubyIsImdceGUxaXZ1b3RuYS5ubyIsImdhbHNhLm5vIiwiZ1x4ZTFsc1x4ZTEu'@;
put 'bm8iLCJnYW12aWsubm8iLCJnYW5nYXZpaWthLm5vIiwiZ1x4ZTFcdTAxNGJnYXZpaWthLm5vIiwiZ2F1bGFyLm5vIiwiZ2F1c2RhbC5ubyIsImdpZWh0YXZ1b2F0bmEubm8iLCJnaWxkZXNrYWwubm8iLCJnaWxkZXNrXHhlNWwubm8iLCJnaXNrZS5ubyIsImdqZW1uZXMubm8iLCJnamVyZHJ1'@;
put 'bS5ubyIsImdqZXJzdGFkLm5vIiwiZ2plc2RhbC5ubyIsImdqb3Zpay5ubyIsImdqXHhmOHZpay5ubyIsImdsb3BwZW4ubm8iLCJnb2wubm8iLCJncmFuLm5vIiwiZ3JhbmUubm8iLCJncmFudmluLm5vIiwiZ3JhdGFuZ2VuLm5vIiwiZ3JpbXN0YWQubm8iLCJncm9uZy5ubyIsImdydWUubm8i'@;
put 'LCJndWxlbi5ubyIsImd1b3ZkYWdlYWlkbnUubm8iLCJoYS5ubyIsImhceGU1Lm5vIiwiaGFibWVyLm5vIiwiaFx4ZTFibWVyLm5vIiwiaGFkc2VsLm5vIiwiaFx4ZTZnZWJvc3RhZC5ubyIsImhhZ2Vib3N0YWQubm8iLCJoYWxkZW4ubm8iLCJoYWxzYS5ubyIsImhhbWFyLm5vIiwiaGFtYXJv'@;
put 'eS5ubyIsImhhbW1hcmZlYXN0YS5ubyIsImhceGUxbW1ceGUxcmZlYXN0YS5ubyIsImhhbW1lcmZlc3Qubm8iLCJoYXBtaXIubm8iLCJoXHhlMXBtaXIubm8iLCJoYXJhbS5ubyIsImhhcmVpZC5ubyIsImhhcnN0YWQubm8iLCJoYXN2aWsubm8iLCJoYXR0ZmplbGxkYWwubm8iLCJoYXVnZXN1'@;
put 'bmQubm8iLCJvcy5oZWRtYXJrLm5vIiwidmFsZXIuaGVkbWFyay5ubyIsInZceGU1bGVyLmhlZG1hcmsubm8iLCJoZW1uZS5ubyIsImhlbW5lcy5ubyIsImhlbXNlZGFsLm5vIiwiaGl0cmEubm8iLCJoamFydGRhbC5ubyIsImhqZWxtZWxhbmQubm8iLCJob2JvbC5ubyIsImhvYlx4ZjhsLm5v'@;
put 'IiwiaG9mLm5vIiwiaG9sLm5vIiwiaG9sZS5ubyIsImhvbG1lc3RyYW5kLm5vIiwiaG9sdGFsZW4ubm8iLCJob2x0XHhlNWxlbi5ubyIsIm9zLmhvcmRhbGFuZC5ubyIsImhvcm5pbmRhbC5ubyIsImhvcnRlbi5ubyIsImhveWFuZ2VyLm5vIiwiaFx4Zjh5YW5nZXIubm8iLCJob3lsYW5kZXQu'@;
put 'bm8iLCJoXHhmOHlsYW5kZXQubm8iLCJodXJkYWwubm8iLCJodXJ1bS5ubyIsImh2YWxlci5ubyIsImh5bGxlc3RhZC5ubyIsImliZXN0YWQubm8iLCJpbmRlcm95Lm5vIiwiaW5kZXJceGY4eS5ubyIsIml2ZWxhbmQubm8iLCJpdmd1Lm5vIiwiamV2bmFrZXIubm8iLCJqb2xzdGVyLm5vIiwi'@;
put 'alx4Zjhsc3Rlci5ubyIsImpvbmRhbC5ubyIsImthZmpvcmQubm8iLCJrXHhlNWZqb3JkLm5vIiwia2FyYXNqb2hrYS5ubyIsImtceGUxclx4ZTFcdTAxNjFqb2hrYS5ubyIsImthcmFzam9rLm5vIiwia2FybHNveS5ubyIsImthcm1veS5ubyIsImthcm1ceGY4eS5ubyIsImthdXRva2Vpbm8u'@;
put 'bm8iLCJrbGFidS5ubyIsImtsXHhlNmJ1Lm5vIiwia2xlcHAubm8iLCJrb25nc2Jlcmcubm8iLCJrb25nc3Zpbmdlci5ubyIsImtyYWFuZ2hrZS5ubyIsImtyXHhlNWFuZ2hrZS5ubyIsImtyYWdlcm8ubm8iLCJrcmFnZXJceGY4Lm5vIiwia3Jpc3RpYW5zYW5kLm5vIiwia3Jpc3RpYW5zdW5k'@;
put 'Lm5vIiwia3JvZHNoZXJhZC5ubyIsImtyXHhmOGRzaGVyYWQubm8iLCJrdlx4ZTZmam9yZC5ubyIsImt2XHhlNm5hbmdlbi5ubyIsImt2YWZqb3JkLm5vIiwia3ZhbHN1bmQubm8iLCJrdmFtLm5vIiwia3ZhbmFuZ2VuLm5vIiwia3ZpbmVzZGFsLm5vIiwia3Zpbm5oZXJhZC5ubyIsImt2aXRl'@;
put 'c2VpZC5ubyIsImt2aXRzb3kubm8iLCJrdml0c1x4Zjh5Lm5vIiwibGFha2VzdnVlbWllLm5vIiwibFx4ZTZyZGFsLm5vIiwibGFocHBpLm5vIiwibFx4ZTFocHBpLm5vIiwibGFyZGFsLm5vIiwibGFydmlrLm5vIiwibGF2YWdpcy5ubyIsImxhdmFuZ2VuLm5vIiwibGVhbmdhdmlpa2Eubm8i'@;
put 'LCJsZWFcdTAxNGJnYXZpaWthLm5vIiwibGViZXNieS5ubyIsImxlaWthbmdlci5ubyIsImxlaXJmam9yZC5ubyIsImxla2Eubm8iLCJsZWtzdmlrLm5vIiwibGVudmlrLm5vIiwibGVyZGFsLm5vIiwibGVzamEubm8iLCJsZXZhbmdlci5ubyIsImxpZXIubm8iLCJsaWVybmUubm8iLCJsaWxs'@;
put 'ZWhhbW1lci5ubyIsImxpbGxlc2FuZC5ubyIsImxpbmRhcy5ubyIsImxpbmRceGU1cy5ubyIsImxpbmRlc25lcy5ubyIsImxvYWJhdC5ubyIsImxvYWJceGUxdC5ubyIsImxvZGluZ2VuLm5vIiwibFx4ZjhkaW5nZW4ubm8iLCJsb20ubm8iLCJsb3BwYS5ubyIsImxvcmVuc2tvZy5ubyIsImxc'@;
put 'eGY4cmVuc2tvZy5ubyIsImxvdGVuLm5vIiwibFx4Zjh0ZW4ubm8iLCJsdW5kLm5vIiwibHVubmVyLm5vIiwibHVyb3kubm8iLCJsdXJceGY4eS5ubyIsImx1c3Rlci5ubyIsImx5bmdkYWwubm8iLCJseW5nZW4ubm8iLCJtYWxhdHZ1b3BtaS5ubyIsIm1ceGUxbGF0dnVvcG1pLm5vIiwibWFs'@;
put 'c2Vsdi5ubyIsIm1ceGU1bHNlbHYubm8iLCJtYWx2aWsubm8iLCJtYW5kYWwubm8iLCJtYXJrZXIubm8iLCJtYXJuYXJkYWwubm8iLCJtYXNmam9yZGVuLm5vIiwibWFzb3kubm8iLCJtXHhlNXNceGY4eS5ubyIsIm1hdHRhLXZhcmpqYXQubm8iLCJtXHhlMXR0YS12XHhlMXJqamF0Lm5vIiwi'@;
put 'bWVsYW5kLm5vIiwibWVsZGFsLm5vIiwibWVsaHVzLm5vIiwibWVsb3kubm8iLCJtZWxceGY4eS5ubyIsIm1lcmFrZXIubm8iLCJtZXJceGU1a2VyLm5vIiwibWlkc3VuZC5ubyIsIm1pZHRyZS1nYXVsZGFsLm5vIiwibW9hcmVrZS5ubyIsIm1vXHhlNXJla2Uubm8iLCJtb2RhbGVuLm5vIiwi'@;
put 'bW9kdW0ubm8iLCJtb2xkZS5ubyIsImhlcm95Lm1vcmUtb2ctcm9tc2RhbC5ubyIsInNhbmRlLm1vcmUtb2ctcm9tc2RhbC5ubyIsImhlclx4Zjh5Lm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsInNhbmRlLm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsIm1vc2tlbmVzLm5vIiwibW9zcy5ubyIsIm1v'@;
put 'c3Zpay5ubyIsIm11b3NhdC5ubyIsIm11b3NceGUxdC5ubyIsIm5hYW1lc2pldnVlbWllLm5vIiwiblx4ZTVceGU1bWVzamV2dWVtaWUubm8iLCJuXHhlNnJceGY4eS5ubyIsIm5hbWRhbHNlaWQubm8iLCJuYW1zb3Mubm8iLCJuYW1zc2tvZ2FuLm5vIiwibmFubmVzdGFkLm5vIiwibmFyb3ku'@;
put 'bm8iLCJuYXJ2aWlrYS5ubyIsIm5hcnZpay5ubyIsIm5hdXN0ZGFsLm5vIiwibmF2dW90bmEubm8iLCJuXHhlMXZ1b3RuYS5ubyIsIm5lZHJlLWVpa2VyLm5vIiwibmVzbmEubm8iLCJuZXNvZGRlbi5ubyIsIm5lc3NlYnkubm8iLCJuZXNzZXQubm8iLCJuaXNzZWRhbC5ubyIsIm5pdHRlZGFs'@;
put 'Lm5vIiwibm9yZC1hdXJkYWwubm8iLCJub3JkLWZyb24ubm8iLCJub3JkLW9kYWwubm8iLCJub3JkZGFsLm5vIiwibm9yZGthcHAubm8iLCJiby5ub3JkbGFuZC5ubyIsImJceGY4Lm5vcmRsYW5kLm5vIiwiaGVyb3kubm9yZGxhbmQubm8iLCJoZXJceGY4eS5ub3JkbGFuZC5ubyIsIm5vcmRy'@;
put 'ZS1sYW5kLm5vIiwibm9yZHJlaXNhLm5vIiwibm9yZS1vZy11dmRhbC5ubyIsIm5vdG9kZGVuLm5vIiwibm90dGVyb3kubm8iLCJuXHhmOHR0ZXJceGY4eS5ubyIsIm9kZGEubm8iLCJva3NuZXMubm8iLCJceGY4a3NuZXMubm8iLCJvbWFzdnVvdG5hLm5vIiwib3BwZGFsLm5vIiwib3BwZWdh'@;
put 'cmQubm8iLCJvcHBlZ1x4ZTVyZC5ubyIsIm9ya2RhbC5ubyIsIm9ybGFuZC5ubyIsIlx4ZjhybGFuZC5ubyIsIm9yc2tvZy5ubyIsIlx4Zjhyc2tvZy5ubyIsIm9yc3RhLm5vIiwiXHhmOHJzdGEubm8iLCJvc2VuLm5vIiwib3N0ZXJveS5ubyIsIm9zdGVyXHhmOHkubm8iLCJ2YWxlci5vc3Rm'@;
put 'b2xkLm5vIiwidlx4ZTVsZXIuXHhmOHN0Zm9sZC5ubyIsIm9zdHJlLXRvdGVuLm5vIiwiXHhmOHN0cmUtdG90ZW4ubm8iLCJvdmVyaGFsbGEubm8iLCJvdnJlLWVpa2VyLm5vIiwiXHhmOHZyZS1laWtlci5ubyIsIm95ZXIubm8iLCJceGY4eWVyLm5vIiwib3lnYXJkZW4ubm8iLCJceGY4eWdh'@;
put 'cmRlbi5ubyIsIm95c3RyZS1zbGlkcmUubm8iLCJceGY4eXN0cmUtc2xpZHJlLm5vIiwicG9yc2FuZ2VyLm5vIiwicG9yc2FuZ3Uubm8iLCJwb3JzXHhlMVx1MDE0Ymd1Lm5vIiwicG9yc2dydW5uLm5vIiwicmFkZS5ubyIsInJceGU1ZGUubm8iLCJyYWRveS5ubyIsInJhZFx4Zjh5Lm5vIiwi'@;
put 'clx4ZTZsaW5nZW4ubm8iLCJyYWhra2VyYXZqdS5ubyIsInJceGUxaGtrZXJceGUxdmp1Lm5vIiwicmFpc2Eubm8iLCJyXHhlMWlzYS5ubyIsInJha2tlc3RhZC5ubyIsInJhbGluZ2VuLm5vIiwicmFuYS5ubyIsInJhbmRhYmVyZy5ubyIsInJhdW1hLm5vIiwicmVuZGFsZW4ubm8iLCJyZW5u'@;
put 'ZWJ1Lm5vIiwicmVubmVzb3kubm8iLCJyZW5uZXNceGY4eS5ubyIsInJpbmRhbC5ubyIsInJpbmdlYnUubm8iLCJyaW5nZXJpa2Uubm8iLCJyaW5nc2FrZXIubm8iLCJyaXNvci5ubyIsInJpc1x4ZjhyLm5vIiwicmlzc2Eubm8iLCJyb2FuLm5vIiwicm9kb3kubm8iLCJyXHhmOGRceGY4eS5u'@;
put 'byIsInJvbGxhZy5ubyIsInJvbXNhLm5vIiwicm9tc2tvZy5ubyIsInJceGY4bXNrb2cubm8iLCJyb3Jvcy5ubyIsInJceGY4cm9zLm5vIiwicm9zdC5ubyIsInJceGY4c3Qubm8iLCJyb3lrZW4ubm8iLCJyXHhmOHlrZW4ubm8iLCJyb3lydmlrLm5vIiwiclx4Zjh5cnZpay5ubyIsInJ1b3Zh'@;
put 'dC5ubyIsInJ5Z2dlLm5vIiwic2FsYW5nZW4ubm8iLCJzYWxhdC5ubyIsInNceGUxbGF0Lm5vIiwic1x4ZTFsXHhlMXQubm8iLCJzYWx0ZGFsLm5vIiwic2FtbmFuZ2VyLm5vIiwic2FuZGVmam9yZC5ubyIsInNhbmRuZXMubm8iLCJzYW5kb3kubm8iLCJzYW5kXHhmOHkubm8iLCJzYXJwc2Jv'@;
put 'cmcubm8iLCJzYXVkYS5ubyIsInNhdWhlcmFkLm5vIiwic2VsLm5vIiwic2VsYnUubm8iLCJzZWxqZS5ubyIsInNlbGpvcmQubm8iLCJzaWVsbGFrLm5vIiwic2lnZGFsLm5vIiwic2lsamFuLm5vIiwic2lyZGFsLm5vIiwic2thbml0Lm5vIiwic2tceGUxbml0Lm5vIiwic2thbmxhbmQubm8i'@;
put 'LCJza1x4ZTVubGFuZC5ubyIsInNrYXVuLm5vIiwic2tlZHNtby5ubyIsInNraS5ubyIsInNraWVuLm5vIiwic2tpZXJ2YS5ubyIsInNraWVydlx4ZTEubm8iLCJza2lwdHZldC5ubyIsInNramFrLm5vIiwic2tqXHhlNWsubm8iLCJza2plcnZveS5ubyIsInNramVydlx4Zjh5Lm5vIiwic2tv'@;
put 'ZGplLm5vIiwic21vbGEubm8iLCJzbVx4ZjhsYS5ubyIsInNuYWFzZS5ubyIsInNuXHhlNWFzZS5ubyIsInNuYXNhLm5vIiwic25ceGU1c2Eubm8iLCJzbmlsbGZqb3JkLm5vIiwic25vYXNhLm5vIiwic29nbmRhbC5ubyIsInNvZ25lLm5vIiwic1x4ZjhnbmUubm8iLCJzb2tuZGFsLm5vIiwi'@;
put 'c29sYS5ubyIsInNvbHVuZC5ubyIsInNvbW5hLm5vIiwic1x4ZjhtbmEubm8iLCJzb25kcmUtbGFuZC5ubyIsInNceGY4bmRyZS1sYW5kLm5vIiwic29uZ2RhbGVuLm5vIiwic29yLWF1cmRhbC5ubyIsInNceGY4ci1hdXJkYWwubm8iLCJzb3ItZnJvbi5ubyIsInNceGY4ci1mcm9uLm5vIiwi'@;
put 'c29yLW9kYWwubm8iLCJzXHhmOHItb2RhbC5ubyIsInNvci12YXJhbmdlci5ubyIsInNceGY4ci12YXJhbmdlci5ubyIsInNvcmZvbGQubm8iLCJzXHhmOHJmb2xkLm5vIiwic29ycmVpc2Eubm8iLCJzXHhmOHJyZWlzYS5ubyIsInNvcnRsYW5kLm5vIiwic29ydW0ubm8iLCJzXHhmOHJ1bS5u'@;
put 'byIsInNweWRlYmVyZy5ubyIsInN0YW5nZS5ubyIsInN0YXZhbmdlci5ubyIsInN0ZWlnZW4ubm8iLCJzdGVpbmtqZXIubm8iLCJzdGpvcmRhbC5ubyIsInN0alx4ZjhyZGFsLm5vIiwic3Rva2tlLm5vIiwic3Rvci1lbHZkYWwubm8iLCJzdG9yZC5ubyIsInN0b3JkYWwubm8iLCJzdG9yZmpv'@;
put 'cmQubm8iLCJzdHJhbmQubm8iLCJzdHJhbmRhLm5vIiwic3RyeW4ubm8iLCJzdWxhLm5vIiwic3VsZGFsLm5vIiwic3VuZC5ubyIsInN1bm5kYWwubm8iLCJzdXJuYWRhbC5ubyIsInN2ZWlvLm5vIiwic3ZlbHZpay5ubyIsInN5a2t5bHZlbi5ubyIsInRhbmEubm8iLCJiby50ZWxlbWFyay5u'@;
put 'byIsImJceGY4LnRlbGVtYXJrLm5vIiwidGltZS5ubyIsInRpbmd2b2xsLm5vIiwidGlubi5ubyIsInRqZWxkc3VuZC5ubyIsInRqb21lLm5vIiwidGpceGY4bWUubm8iLCJ0b2trZS5ubyIsInRvbGdhLm5vIiwidG9uc2Jlcmcubm8iLCJ0XHhmOG5zYmVyZy5ubyIsInRvcnNrZW4ubm8iLCJ0'@;
put 'clx4ZTZuYS5ubyIsInRyYW5hLm5vIiwidHJhbm95Lm5vIiwidHJhblx4Zjh5Lm5vIiwidHJvYW5kaW4ubm8iLCJ0cm9nc3RhZC5ubyIsInRyXHhmOGdzdGFkLm5vIiwidHJvbXNhLm5vIiwidHJvbXNvLm5vIiwidHJvbXNceGY4Lm5vIiwidHJvbmRoZWltLm5vIiwidHJ5c2lsLm5vIiwidHZl'@;
put 'ZGVzdHJhbmQubm8iLCJ0eWRhbC5ubyIsInR5bnNldC5ubyIsInR5c2Zqb3JkLm5vIiwidHlzbmVzLm5vIiwidHlzdlx4ZTZyLm5vIiwidHlzdmFyLm5vIiwidWxsZW5zYWtlci5ubyIsInVsbGVuc3Zhbmcubm8iLCJ1bHZpay5ubyIsInVuamFyZ2Eubm8iLCJ1bmpceGUxcmdhLm5vIiwidXRz'@;
put 'aXJhLm5vIiwidmFhcHN0ZS5ubyIsInZhZHNvLm5vIiwidmFkc1x4Zjgubm8iLCJ2XHhlNnJceGY4eS5ubyIsInZhZ2Eubm8iLCJ2XHhlNWdceGU1Lm5vIiwidmFnYW4ubm8iLCJ2XHhlNWdhbi5ubyIsInZhZ3NveS5ubyIsInZceGU1Z3NceGY4eS5ubyIsInZha3NkYWwubm8iLCJ2YWxsZS5u'@;
put 'byIsInZhbmcubm8iLCJ2YW55bHZlbi5ubyIsInZhcmRvLm5vIiwidmFyZFx4Zjgubm8iLCJ2YXJnZ2F0Lm5vIiwidlx4ZTFyZ2dceGUxdC5ubyIsInZhcm95Lm5vIiwidmVmc24ubm8iLCJ2ZWdhLm5vIiwidmVnYXJzaGVpLm5vIiwidmVnXHhlNXJzaGVpLm5vIiwidmVubmVzbGEubm8iLCJ2'@;
put 'ZXJkYWwubm8iLCJ2ZXJyYW4ubm8iLCJ2ZXN0Ynkubm8iLCJzYW5kZS52ZXN0Zm9sZC5ubyIsInZlc3RuZXMubm8iLCJ2ZXN0cmUtc2xpZHJlLm5vIiwidmVzdHJlLXRvdGVuLm5vIiwidmVzdHZhZ295Lm5vIiwidmVzdHZceGU1Z1x4Zjh5Lm5vIiwidmV2ZWxzdGFkLm5vIiwidmlrLm5vIiwi'@;
put 'dmlrbmEubm8iLCJ2aW5kYWZqb3JkLm5vIiwidm9hZ2F0Lm5vIiwidm9sZGEubm8iLCJ2b3NzLm5vIiwiKi5ucCIsIm5yIiwiYml6Lm5yIiwiY29tLm5yIiwiZWR1Lm5yIiwiZ292Lm5yIiwiaW5mby5uciIsIm5ldC5uciIsIm9yZy5uciIsIm51IiwibnoiLCJhYy5ueiIsImNvLm56IiwiY3Jp'@;
put 'Lm56IiwiZ2Vlay5ueiIsImdlbi5ueiIsImdvdnQubnoiLCJoZWFsdGgubnoiLCJpd2kubnoiLCJraXdpLm56IiwibWFvcmkubnoiLCJtXHUwMTAxb3JpLm56IiwibWlsLm56IiwibmV0Lm56Iiwib3JnLm56IiwicGFybGlhbWVudC5ueiIsInNjaG9vbC5ueiIsIm9tIiwiY28ub20iLCJjb20u'@;
put 'b20iLCJlZHUub20iLCJnb3Yub20iLCJtZWQub20iLCJtdXNldW0ub20iLCJuZXQub20iLCJvcmcub20iLCJwcm8ub20iLCJvbmlvbiIsIm9yZyIsInBhIiwiYWJvLnBhIiwiYWMucGEiLCJjb20ucGEiLCJlZHUucGEiLCJnb2IucGEiLCJpbmcucGEiLCJtZWQucGEiLCJuZXQucGEiLCJub20u'@;
put 'cGEiLCJvcmcucGEiLCJzbGQucGEiLCJwZSIsImNvbS5wZSIsImVkdS5wZSIsImdvYi5wZSIsIm1pbC5wZSIsIm5ldC5wZSIsIm5vbS5wZSIsIm9yZy5wZSIsInBmIiwiY29tLnBmIiwiZWR1LnBmIiwib3JnLnBmIiwiKi5wZyIsInBoIiwiY29tLnBoIiwiZWR1LnBoIiwiZ292LnBoIiwiaS5w'@;
put 'aCIsIm1pbC5waCIsIm5ldC5waCIsIm5nby5waCIsIm9yZy5waCIsInBrIiwiYWMucGsiLCJiaXoucGsiLCJjb20ucGsiLCJlZHUucGsiLCJmYW0ucGsiLCJna3AucGsiLCJnb2IucGsiLCJnb2cucGsiLCJnb2sucGsiLCJnb24ucGsiLCJnb3AucGsiLCJnb3MucGsiLCJnb3YucGsiLCJuZXQu'@;
put 'cGsiLCJvcmcucGsiLCJ3ZWIucGsiLCJwbCIsImNvbS5wbCIsIm5ldC5wbCIsIm9yZy5wbCIsImFncm8ucGwiLCJhaWQucGwiLCJhdG0ucGwiLCJhdXRvLnBsIiwiYml6LnBsIiwiZWR1LnBsIiwiZ21pbmEucGwiLCJnc20ucGwiLCJpbmZvLnBsIiwibWFpbC5wbCIsIm1lZGlhLnBsIiwibWlh'@;
put 'c3RhLnBsIiwibWlsLnBsIiwibmllcnVjaG9tb3NjaS5wbCIsIm5vbS5wbCIsInBjLnBsIiwicG93aWF0LnBsIiwicHJpdi5wbCIsInJlYWxlc3RhdGUucGwiLCJyZWwucGwiLCJzZXgucGwiLCJzaG9wLnBsIiwic2tsZXAucGwiLCJzb3MucGwiLCJzemtvbGEucGwiLCJ0YXJnaS5wbCIsInRt'@;
put 'LnBsIiwidG91cmlzbS5wbCIsInRyYXZlbC5wbCIsInR1cnlzdHlrYS5wbCIsImdvdi5wbCIsImFwLmdvdi5wbCIsImdyaXcuZ292LnBsIiwiaWMuZ292LnBsIiwiaXMuZ292LnBsIiwia21wc3AuZ292LnBsIiwia29uc3VsYXQuZ292LnBsIiwia3Bwc3AuZ292LnBsIiwia3dwLmdvdi5wbCIs'@;
put 'Imt3cHNwLmdvdi5wbCIsIm11cC5nb3YucGwiLCJtdy5nb3YucGwiLCJvaWEuZ292LnBsIiwib2lybS5nb3YucGwiLCJva2UuZ292LnBsIiwib293Lmdvdi5wbCIsIm9zY2hyLmdvdi5wbCIsIm91bS5nb3YucGwiLCJwYS5nb3YucGwiLCJwaW5iLmdvdi5wbCIsInBpdy5nb3YucGwiLCJwby5n'@;
put 'b3YucGwiLCJwci5nb3YucGwiLCJwc3AuZ292LnBsIiwicHNzZS5nb3YucGwiLCJwdXAuZ292LnBsIiwicnpndy5nb3YucGwiLCJzYS5nb3YucGwiLCJzZG4uZ292LnBsIiwic2tvLmdvdi5wbCIsInNvLmdvdi5wbCIsInNyLmdvdi5wbCIsInN0YXJvc3R3by5nb3YucGwiLCJ1Zy5nb3YucGwi'@;
put 'LCJ1Z2ltLmdvdi5wbCIsInVtLmdvdi5wbCIsInVtaWcuZ292LnBsIiwidXBvdy5nb3YucGwiLCJ1cHBvLmdvdi5wbCIsInVzLmdvdi5wbCIsInV3Lmdvdi5wbCIsInV6cy5nb3YucGwiLCJ3aWYuZ292LnBsIiwid2lpaC5nb3YucGwiLCJ3aW5iLmdvdi5wbCIsIndpb3MuZ292LnBsIiwid2l0'@;
put 'ZC5nb3YucGwiLCJ3aXcuZ292LnBsIiwid2t6Lmdvdi5wbCIsIndzYS5nb3YucGwiLCJ3c2tyLmdvdi5wbCIsIndzc2UuZ292LnBsIiwid3Vvei5nb3YucGwiLCJ3em1pdXcuZ292LnBsIiwienAuZ292LnBsIiwienBpc2RuLmdvdi5wbCIsImF1Z3VzdG93LnBsIiwiYmFiaWEtZ29yYS5wbCIs'@;
put 'ImJlZHppbi5wbCIsImJlc2tpZHkucGwiLCJiaWFsb3dpZXphLnBsIiwiYmlhbHlzdG9rLnBsIiwiYmllbGF3YS5wbCIsImJpZXN6Y3phZHkucGwiLCJib2xlc2xhd2llYy5wbCIsImJ5ZGdvc3pjei5wbCIsImJ5dG9tLnBsIiwiY2llc3p5bi5wbCIsImN6ZWxhZHoucGwiLCJjemVzdC5wbCIs'@;
put 'ImRsdWdvbGVrYS5wbCIsImVsYmxhZy5wbCIsImVsay5wbCIsImdsb2dvdy5wbCIsImduaWV6bm8ucGwiLCJnb3JsaWNlLnBsIiwiZ3JhamV3by5wbCIsImlsYXdhLnBsIiwiamF3b3J6bm8ucGwiLCJqZWxlbmlhLWdvcmEucGwiLCJqZ29yYS5wbCIsImthbGlzei5wbCIsImthcnBhY3oucGwi'@;
put 'LCJrYXJ0dXp5LnBsIiwia2FzenVieS5wbCIsImthdG93aWNlLnBsIiwia2F6aW1pZXJ6LWRvbG55LnBsIiwia2Vwbm8ucGwiLCJrZXRyenluLnBsIiwia2xvZHprby5wbCIsImtvYmllcnp5Y2UucGwiLCJrb2xvYnJ6ZWcucGwiLCJrb25pbi5wbCIsImtvbnNrb3dvbGEucGwiLCJrdXRuby5w'@;
put 'bCIsImxhcHkucGwiLCJsZWJvcmsucGwiLCJsZWduaWNhLnBsIiwibGV6YWpzay5wbCIsImxpbWFub3dhLnBsIiwibG9temEucGwiLCJsb3dpY3oucGwiLCJsdWJpbi5wbCIsImx1a293LnBsIiwibWFsYm9yay5wbCIsIm1hbG9wb2xza2EucGwiLCJtYXpvd3N6ZS5wbCIsIm1henVyeS5wbCIs'@;
put 'Im1pZWxlYy5wbCIsIm1pZWxuby5wbCIsIm1yYWdvd28ucGwiLCJuYWtsby5wbCIsIm5vd2FydWRhLnBsIiwibnlzYS5wbCIsIm9sYXdhLnBsIiwib2xlY2tvLnBsIiwib2xrdXN6LnBsIiwib2xzenR5bi5wbCIsIm9wb2N6bm8ucGwiLCJvcG9sZS5wbCIsIm9zdHJvZGEucGwiLCJvc3Ryb2xl'@;
put 'a2EucGwiLCJvc3Ryb3dpZWMucGwiLCJvc3Ryb3d3bGtwLnBsIiwicGlsYS5wbCIsInBpc3oucGwiLCJwb2RoYWxlLnBsIiwicG9kbGFzaWUucGwiLCJwb2xrb3dpY2UucGwiLCJwb21vcnNraWUucGwiLCJwb21vcnplLnBsIiwicHJvY2hvd2ljZS5wbCIsInBydXN6a293LnBsIiwicHJ6ZXdv'@;
put 'cnNrLnBsIiwicHVsYXd5LnBsIiwicmFkb20ucGwiLCJyYXdhLW1hei5wbCIsInJ5Ym5pay5wbCIsInJ6ZXN6b3cucGwiLCJzYW5vay5wbCIsInNlam55LnBsIiwic2tvY3pvdy5wbCIsInNsYXNrLnBsIiwic2x1cHNrLnBsIiwic29zbm93aWVjLnBsIiwic3RhbG93YS13b2xhLnBsIiwic3Rh'@;
put 'cmFjaG93aWNlLnBsIiwic3RhcmdhcmQucGwiLCJzdXdhbGtpLnBsIiwic3dpZG5pY2EucGwiLCJzd2llYm9kemluLnBsIiwic3dpbm91anNjaWUucGwiLCJzemN6ZWNpbi5wbCIsInN6Y3p5dG5vLnBsIiwidGFybm9icnplZy5wbCIsInRnb3J5LnBsIiwidHVyZWsucGwiLCJ0eWNoeS5wbCIs'@;
put 'InVzdGthLnBsIiwid2FsYnJ6eWNoLnBsIiwid2FybWlhLnBsIiwid2Fyc3phd2EucGwiLCJ3YXcucGwiLCJ3ZWdyb3cucGwiLCJ3aWVsdW4ucGwiLCJ3bG9jbC5wbCIsIndsb2NsYXdlay5wbCIsIndvZHppc2xhdy5wbCIsIndvbG9taW4ucGwiLCJ3cm9jbGF3LnBsIiwiemFjaHBvbW9yLnBs'@;
put 'IiwiemFnYW4ucGwiLCJ6YXJvdy5wbCIsInpnb3JhLnBsIiwiemdvcnplbGVjLnBsIiwicG0iLCJwbiIsImNvLnBuIiwiZWR1LnBuIiwiZ292LnBuIiwibmV0LnBuIiwib3JnLnBuIiwicG9zdCIsInByIiwiYml6LnByIiwiY29tLnByIiwiZWR1LnByIiwiZ292LnByIiwiaW5mby5wciIsImlz'@;
put 'bGEucHIiLCJuYW1lLnByIiwibmV0LnByIiwib3JnLnByIiwicHJvLnByIiwiYWMucHIiLCJlc3QucHIiLCJwcm9mLnByIiwicHJvIiwiYWFhLnBybyIsImFjYS5wcm8iLCJhY2N0LnBybyIsImF2b2NhdC5wcm8iLCJiYXIucHJvIiwiY3BhLnBybyIsImVuZy5wcm8iLCJqdXIucHJvIiwibGF3'@;
put 'LnBybyIsIm1lZC5wcm8iLCJyZWNodC5wcm8iLCJwcyIsImNvbS5wcyIsImVkdS5wcyIsImdvdi5wcyIsIm5ldC5wcyIsIm9yZy5wcyIsInBsby5wcyIsInNlYy5wcyIsInB0IiwiY29tLnB0IiwiZWR1LnB0IiwiZ292LnB0IiwiaW50LnB0IiwibmV0LnB0Iiwibm9tZS5wdCIsIm9yZy5wdCIs'@;
put 'InB1YmwucHQiLCJwdyIsImJlbGF1LnB3IiwiY28ucHciLCJlZC5wdyIsImdvLnB3Iiwib3IucHciLCJweSIsImNvbS5weSIsImNvb3AucHkiLCJlZHUucHkiLCJnb3YucHkiLCJtaWwucHkiLCJuZXQucHkiLCJvcmcucHkiLCJxYSIsImNvbS5xYSIsImVkdS5xYSIsImdvdi5xYSIsIm1pbC5x'@;
put 'YSIsIm5hbWUucWEiLCJuZXQucWEiLCJvcmcucWEiLCJzY2gucWEiLCJyZSIsImFzc28ucmUiLCJjb20ucmUiLCJybyIsImFydHMucm8iLCJjb20ucm8iLCJmaXJtLnJvIiwiaW5mby5ybyIsIm5vbS5ybyIsIm50LnJvIiwib3JnLnJvIiwicmVjLnJvIiwic3RvcmUucm8iLCJ0bS5ybyIsInd3'@;
put 'dy5ybyIsInJzIiwiYWMucnMiLCJjby5ycyIsImVkdS5ycyIsImdvdi5ycyIsImluLnJzIiwib3JnLnJzIiwicnUiLCJydyIsImFjLnJ3IiwiY28ucnciLCJjb29wLnJ3IiwiZ292LnJ3IiwibWlsLnJ3IiwibmV0LnJ3Iiwib3JnLnJ3Iiwic2EiLCJjb20uc2EiLCJlZHUuc2EiLCJnb3Yuc2Ei'@;
put 'LCJtZWQuc2EiLCJuZXQuc2EiLCJvcmcuc2EiLCJwdWIuc2EiLCJzY2guc2EiLCJzYiIsImNvbS5zYiIsImVkdS5zYiIsImdvdi5zYiIsIm5ldC5zYiIsIm9yZy5zYiIsInNjIiwiY29tLnNjIiwiZWR1LnNjIiwiZ292LnNjIiwibmV0LnNjIiwib3JnLnNjIiwic2QiLCJjb20uc2QiLCJlZHUu'@;
put 'c2QiLCJnb3Yuc2QiLCJpbmZvLnNkIiwibWVkLnNkIiwibmV0LnNkIiwib3JnLnNkIiwidHYuc2QiLCJzZSIsImEuc2UiLCJhYy5zZSIsImIuc2UiLCJiZC5zZSIsImJyYW5kLnNlIiwiYy5zZSIsImQuc2UiLCJlLnNlIiwiZi5zZSIsImZoLnNlIiwiZmhzay5zZSIsImZodi5zZSIsImcuc2Ui'@;
put 'LCJoLnNlIiwiaS5zZSIsImsuc2UiLCJrb21mb3JiLnNlIiwia29tbXVuYWxmb3JidW5kLnNlIiwia29tdnV4LnNlIiwibC5zZSIsImxhbmJpYi5zZSIsIm0uc2UiLCJuLnNlIiwibmF0dXJicnVrc2d5bW4uc2UiLCJvLnNlIiwib3JnLnNlIiwicC5zZSIsInBhcnRpLnNlIiwicHAuc2UiLCJw'@;
put 'cmVzcy5zZSIsInIuc2UiLCJzLnNlIiwidC5zZSIsInRtLnNlIiwidS5zZSIsIncuc2UiLCJ4LnNlIiwieS5zZSIsInouc2UiLCJzZyIsImNvbS5zZyIsImVkdS5zZyIsImdvdi5zZyIsIm5ldC5zZyIsIm9yZy5zZyIsInNoIiwiY29tLnNoIiwiZ292LnNoIiwibWlsLnNoIiwibmV0LnNoIiwi'@;
put 'b3JnLnNoIiwic2kiLCJzaiIsInNrIiwic2wiLCJjb20uc2wiLCJlZHUuc2wiLCJnb3Yuc2wiLCJuZXQuc2wiLCJvcmcuc2wiLCJzbSIsInNuIiwiYXJ0LnNuIiwiY29tLnNuIiwiZWR1LnNuIiwiZ291di5zbiIsIm9yZy5zbiIsInBlcnNvLnNuIiwidW5pdi5zbiIsInNvIiwiY29tLnNvIiwi'@;
put 'ZWR1LnNvIiwiZ292LnNvIiwibWUuc28iLCJuZXQuc28iLCJvcmcuc28iLCJzciIsInNzIiwiYml6LnNzIiwiY28uc3MiLCJjb20uc3MiLCJlZHUuc3MiLCJnb3Yuc3MiLCJtZS5zcyIsIm5ldC5zcyIsIm9yZy5zcyIsInNjaC5zcyIsInN0IiwiY28uc3QiLCJjb20uc3QiLCJjb25zdWxhZG8u'@;
put 'c3QiLCJlZHUuc3QiLCJlbWJhaXhhZGEuc3QiLCJtaWwuc3QiLCJuZXQuc3QiLCJvcmcuc3QiLCJwcmluY2lwZS5zdCIsInNhb3RvbWUuc3QiLCJzdG9yZS5zdCIsInN1Iiwic3YiLCJjb20uc3YiLCJlZHUuc3YiLCJnb2Iuc3YiLCJvcmcuc3YiLCJyZWQuc3YiLCJzeCIsImdvdi5zeCIsInN5'@;
put 'IiwiY29tLnN5IiwiZWR1LnN5IiwiZ292LnN5IiwibWlsLnN5IiwibmV0LnN5Iiwib3JnLnN5Iiwic3oiLCJhYy5zeiIsImNvLnN6Iiwib3JnLnN6IiwidGMiLCJ0ZCIsInRlbCIsInRmIiwidGciLCJ0aCIsImFjLnRoIiwiY28udGgiLCJnby50aCIsImluLnRoIiwibWkudGgiLCJuZXQudGgi'@;
put 'LCJvci50aCIsInRqIiwiYWMudGoiLCJiaXoudGoiLCJjby50aiIsImNvbS50aiIsImVkdS50aiIsImdvLnRqIiwiZ292LnRqIiwiaW50LnRqIiwibWlsLnRqIiwibmFtZS50aiIsIm5ldC50aiIsIm5pYy50aiIsIm9yZy50aiIsInRlc3QudGoiLCJ3ZWIudGoiLCJ0ayIsInRsIiwiZ292LnRs'@;
put 'IiwidG0iLCJjby50bSIsImNvbS50bSIsImVkdS50bSIsImdvdi50bSIsIm1pbC50bSIsIm5ldC50bSIsIm5vbS50bSIsIm9yZy50bSIsInRuIiwiY29tLnRuIiwiZW5zLnRuIiwiZmluLnRuIiwiZ292LnRuIiwiaW5kLnRuIiwiaW5mby50biIsImludGwudG4iLCJtaW5jb20udG4iLCJuYXQu'@;
put 'dG4iLCJuZXQudG4iLCJvcmcudG4iLCJwZXJzby50biIsInRvdXJpc20udG4iLCJ0byIsImNvbS50byIsImVkdS50byIsImdvdi50byIsIm1pbC50byIsIm5ldC50byIsIm9yZy50byIsInRyIiwiYXYudHIiLCJiYnMudHIiLCJiZWwudHIiLCJiaXoudHIiLCJjb20udHIiLCJkci50ciIsImVk'@;
put 'dS50ciIsImdlbi50ciIsImdvdi50ciIsImluZm8udHIiLCJrMTIudHIiLCJrZXAudHIiLCJtaWwudHIiLCJuYW1lLnRyIiwibmV0LnRyIiwib3JnLnRyIiwicG9sLnRyIiwidGVsLnRyIiwidHNrLnRyIiwidHYudHIiLCJ3ZWIudHIiLCJuYy50ciIsImdvdi5uYy50ciIsInR0IiwiYml6LnR0'@;
put 'IiwiY28udHQiLCJjb20udHQiLCJlZHUudHQiLCJnb3YudHQiLCJpbmZvLnR0IiwibWlsLnR0IiwibmFtZS50dCIsIm5ldC50dCIsIm9yZy50dCIsInByby50dCIsInR2IiwidHciLCJjbHViLnR3IiwiY29tLnR3IiwiZWJpei50dyIsImVkdS50dyIsImdhbWUudHciLCJnb3YudHciLCJpZHYu'@;
put 'dHciLCJtaWwudHciLCJuZXQudHciLCJvcmcudHciLCJ0eiIsImFjLnR6IiwiY28udHoiLCJnby50eiIsImhvdGVsLnR6IiwiaW5mby50eiIsIm1lLnR6IiwibWlsLnR6IiwibW9iaS50eiIsIm5lLnR6Iiwib3IudHoiLCJzYy50eiIsInR2LnR6IiwidWEiLCJjb20udWEiLCJlZHUudWEiLCJn'@;
put 'b3YudWEiLCJpbi51YSIsIm5ldC51YSIsIm9yZy51YSIsImNoZXJrYXNzeS51YSIsImNoZXJrYXN5LnVhIiwiY2hlcm5pZ292LnVhIiwiY2hlcm5paGl2LnVhIiwiY2hlcm5pdnRzaS51YSIsImNoZXJub3Z0c3kudWEiLCJjay51YSIsImNuLnVhIiwiY3IudWEiLCJjcmltZWEudWEiLCJjdi51'@;
put 'YSIsImRuLnVhIiwiZG5lcHJvcGV0cm92c2sudWEiLCJkbmlwcm9wZXRyb3Zzay51YSIsImRvbmV0c2sudWEiLCJkcC51YSIsImlmLnVhIiwiaXZhbm8tZnJhbmtpdnNrLnVhIiwia2gudWEiLCJraGFya2l2LnVhIiwia2hhcmtvdi51YSIsImtoZXJzb24udWEiLCJraG1lbG5pdHNraXkudWEi'@;
put 'LCJraG1lbG55dHNreWkudWEiLCJraWV2LnVhIiwia2lyb3ZvZ3JhZC51YSIsImttLnVhIiwia3IudWEiLCJrcm9weXZueXRza3lpLnVhIiwia3J5bS51YSIsImtzLnVhIiwia3YudWEiLCJreWl2LnVhIiwibGcudWEiLCJsdC51YSIsImx1Z2Fuc2sudWEiLCJsdWhhbnNrLnVhIiwibHV0c2su'@;
put 'dWEiLCJsdi51YSIsImx2aXYudWEiLCJtay51YSIsIm15a29sYWl2LnVhIiwibmlrb2xhZXYudWEiLCJvZC51YSIsIm9kZXNhLnVhIiwib2Rlc3NhLnVhIiwicGwudWEiLCJwb2x0YXZhLnVhIiwicml2bmUudWEiLCJyb3Zuby51YSIsInJ2LnVhIiwic2IudWEiLCJzZWJhc3RvcG9sLnVhIiwi'@;
put 'c2V2YXN0b3BvbC51YSIsInNtLnVhIiwic3VteS51YSIsInRlLnVhIiwidGVybm9waWwudWEiLCJ1ei51YSIsInV6aGdvcm9kLnVhIiwidXpoaG9yb2QudWEiLCJ2aW5uaWNhLnVhIiwidmlubnl0c2lhLnVhIiwidm4udWEiLCJ2b2x5bi51YSIsInlhbHRhLnVhIiwiemFrYXJwYXR0aWEudWEi'@;
put 'LCJ6YXBvcml6aHpoZS51YSIsInphcG9yaXpoemhpYS51YSIsInpoaXRvbWlyLnVhIiwiemh5dG9teXIudWEiLCJ6cC51YSIsInp0LnVhIiwidWciLCJhYy51ZyIsImNvLnVnIiwiY29tLnVnIiwiZ28udWciLCJuZS51ZyIsIm9yLnVnIiwib3JnLnVnIiwic2MudWciLCJ1ayIsImFjLnVrIiwi'@;
put 'Y28udWsiLCJnb3YudWsiLCJsdGQudWsiLCJtZS51ayIsIm5ldC51ayIsIm5ocy51ayIsIm9yZy51ayIsInBsYy51ayIsInBvbGljZS51ayIsIiouc2NoLnVrIiwidXMiLCJkbmkudXMiLCJmZWQudXMiLCJpc2EudXMiLCJraWRzLnVzIiwibnNuLnVzIiwiYWsudXMiLCJhbC51cyIsImFyLnVz'@;
put 'IiwiYXMudXMiLCJhei51cyIsImNhLnVzIiwiY28udXMiLCJjdC51cyIsImRjLnVzIiwiZGUudXMiLCJmbC51cyIsImdhLnVzIiwiZ3UudXMiLCJoaS51cyIsImlhLnVzIiwiaWQudXMiLCJpbC51cyIsImluLnVzIiwia3MudXMiLCJreS51cyIsImxhLnVzIiwibWEudXMiLCJtZC51cyIsIm1l'@;
put 'LnVzIiwibWkudXMiLCJtbi51cyIsIm1vLnVzIiwibXMudXMiLCJtdC51cyIsIm5jLnVzIiwibmQudXMiLCJuZS51cyIsIm5oLnVzIiwibmoudXMiLCJubS51cyIsIm52LnVzIiwibnkudXMiLCJvaC51cyIsIm9rLnVzIiwib3IudXMiLCJwYS51cyIsInByLnVzIiwicmkudXMiLCJzYy51cyIs'@;
put 'InNkLnVzIiwidG4udXMiLCJ0eC51cyIsInV0LnVzIiwidmEudXMiLCJ2aS51cyIsInZ0LnVzIiwid2EudXMiLCJ3aS51cyIsInd2LnVzIiwid3kudXMiLCJrMTIuYWsudXMiLCJrMTIuYWwudXMiLCJrMTIuYXIudXMiLCJrMTIuYXMudXMiLCJrMTIuYXoudXMiLCJrMTIuY2EudXMiLCJrMTIu'@;
put 'Y28udXMiLCJrMTIuY3QudXMiLCJrMTIuZGMudXMiLCJrMTIuZmwudXMiLCJrMTIuZ2EudXMiLCJrMTIuZ3UudXMiLCJrMTIuaWEudXMiLCJrMTIuaWQudXMiLCJrMTIuaWwudXMiLCJrMTIuaW4udXMiLCJrMTIua3MudXMiLCJrMTIua3kudXMiLCJrMTIubGEudXMiLCJrMTIubWEudXMiLCJr'@;
put 'MTIubWQudXMiLCJrMTIubWUudXMiLCJrMTIubWkudXMiLCJrMTIubW4udXMiLCJrMTIubW8udXMiLCJrMTIubXMudXMiLCJrMTIubXQudXMiLCJrMTIubmMudXMiLCJrMTIubmUudXMiLCJrMTIubmgudXMiLCJrMTIubmoudXMiLCJrMTIubm0udXMiLCJrMTIubnYudXMiLCJrMTIubnkudXMi'@;
put 'LCJrMTIub2gudXMiLCJrMTIub2sudXMiLCJrMTIub3IudXMiLCJrMTIucGEudXMiLCJrMTIucHIudXMiLCJrMTIuc2MudXMiLCJrMTIudG4udXMiLCJrMTIudHgudXMiLCJrMTIudXQudXMiLCJrMTIudmEudXMiLCJrMTIudmkudXMiLCJrMTIudnQudXMiLCJrMTIud2EudXMiLCJrMTIud2ku'@;
put 'dXMiLCJjYy5hay51cyIsImxpYi5hay51cyIsImNjLmFsLnVzIiwibGliLmFsLnVzIiwiY2MuYXIudXMiLCJsaWIuYXIudXMiLCJjYy5hcy51cyIsImxpYi5hcy51cyIsImNjLmF6LnVzIiwibGliLmF6LnVzIiwiY2MuY2EudXMiLCJsaWIuY2EudXMiLCJjYy5jby51cyIsImxpYi5jby51cyIs'@;
put 'ImNjLmN0LnVzIiwibGliLmN0LnVzIiwiY2MuZGMudXMiLCJsaWIuZGMudXMiLCJjYy5kZS51cyIsImNjLmZsLnVzIiwiY2MuZ2EudXMiLCJjYy5ndS51cyIsImNjLmhpLnVzIiwiY2MuaWEudXMiLCJjYy5pZC51cyIsImNjLmlsLnVzIiwiY2MuaW4udXMiLCJjYy5rcy51cyIsImNjLmt5LnVz'@;
put 'IiwiY2MubGEudXMiLCJjYy5tYS51cyIsImNjLm1kLnVzIiwiY2MubWUudXMiLCJjYy5taS51cyIsImNjLm1uLnVzIiwiY2MubW8udXMiLCJjYy5tcy51cyIsImNjLm10LnVzIiwiY2MubmMudXMiLCJjYy5uZC51cyIsImNjLm5lLnVzIiwiY2MubmgudXMiLCJjYy5uai51cyIsImNjLm5tLnVz'@;
put 'IiwiY2MubnYudXMiLCJjYy5ueS51cyIsImNjLm9oLnVzIiwiY2Mub2sudXMiLCJjYy5vci51cyIsImNjLnBhLnVzIiwiY2MucHIudXMiLCJjYy5yaS51cyIsImNjLnNjLnVzIiwiY2Muc2QudXMiLCJjYy50bi51cyIsImNjLnR4LnVzIiwiY2MudXQudXMiLCJjYy52YS51cyIsImNjLnZpLnVz'@;
put 'IiwiY2MudnQudXMiLCJjYy53YS51cyIsImNjLndpLnVzIiwiY2Mud3YudXMiLCJjYy53eS51cyIsImsxMi53eS51cyIsImxpYi5mbC51cyIsImxpYi5nYS51cyIsImxpYi5ndS51cyIsImxpYi5oaS51cyIsImxpYi5pYS51cyIsImxpYi5pZC51cyIsImxpYi5pbC51cyIsImxpYi5pbi51cyIs'@;
put 'ImxpYi5rcy51cyIsImxpYi5reS51cyIsImxpYi5sYS51cyIsImxpYi5tYS51cyIsImxpYi5tZC51cyIsImxpYi5tZS51cyIsImxpYi5taS51cyIsImxpYi5tbi51cyIsImxpYi5tby51cyIsImxpYi5tcy51cyIsImxpYi5tdC51cyIsImxpYi5uYy51cyIsImxpYi5uZC51cyIsImxpYi5uZS51'@;
put 'cyIsImxpYi5uaC51cyIsImxpYi5uai51cyIsImxpYi5ubS51cyIsImxpYi5udi51cyIsImxpYi5ueS51cyIsImxpYi5vaC51cyIsImxpYi5vay51cyIsImxpYi5vci51cyIsImxpYi5wYS51cyIsImxpYi5wci51cyIsImxpYi5yaS51cyIsImxpYi5zYy51cyIsImxpYi5zZC51cyIsImxpYi50'@;
put 'bi51cyIsImxpYi50eC51cyIsImxpYi51dC51cyIsImxpYi52YS51cyIsImxpYi52aS51cyIsImxpYi52dC51cyIsImxpYi53YS51cyIsImxpYi53aS51cyIsImxpYi53eS51cyIsImNodHIuazEyLm1hLnVzIiwicGFyb2NoLmsxMi5tYS51cyIsInB2dC5rMTIubWEudXMiLCJhbm4tYXJib3Iu'@;
put 'bWkudXMiLCJjb2cubWkudXMiLCJkc3QubWkudXMiLCJlYXRvbi5taS51cyIsImdlbi5taS51cyIsIm11cy5taS51cyIsInRlYy5taS51cyIsIndhc2h0ZW5hdy5taS51cyIsInV5IiwiY29tLnV5IiwiZWR1LnV5IiwiZ3ViLnV5IiwibWlsLnV5IiwibmV0LnV5Iiwib3JnLnV5IiwidXoiLCJj'@;
put 'by51eiIsImNvbS51eiIsIm5ldC51eiIsIm9yZy51eiIsInZhIiwidmMiLCJjb20udmMiLCJlZHUudmMiLCJnb3YudmMiLCJtaWwudmMiLCJuZXQudmMiLCJvcmcudmMiLCJ2ZSIsImFydHMudmUiLCJiaWIudmUiLCJjby52ZSIsImNvbS52ZSIsImUxMi52ZSIsImVkdS52ZSIsImZpcm0udmUi'@;
put 'LCJnb2IudmUiLCJnb3YudmUiLCJpbmZvLnZlIiwiaW50LnZlIiwibWlsLnZlIiwibmV0LnZlIiwibm9tLnZlIiwib3JnLnZlIiwicmFyLnZlIiwicmVjLnZlIiwic3RvcmUudmUiLCJ0ZWMudmUiLCJ3ZWIudmUiLCJ2ZyIsInZpIiwiY28udmkiLCJjb20udmkiLCJrMTIudmkiLCJuZXQudmki'@;
put 'LCJvcmcudmkiLCJ2biIsImFjLnZuIiwiYWkudm4iLCJiaXoudm4iLCJjb20udm4iLCJlZHUudm4iLCJnb3Yudm4iLCJoZWFsdGgudm4iLCJpZC52biIsImluZm8udm4iLCJpbnQudm4iLCJpby52biIsIm5hbWUudm4iLCJuZXQudm4iLCJvcmcudm4iLCJwcm8udm4iLCJhbmdpYW5nLnZuIiwi'@;
put 'YmFjZ2lhbmcudm4iLCJiYWNrYW4udm4iLCJiYWNsaWV1LnZuIiwiYmFjbmluaC52biIsImJhcmlhLXZ1bmd0YXUudm4iLCJiZW50cmUudm4iLCJiaW5oZGluaC52biIsImJpbmhkdW9uZy52biIsImJpbmhwaHVvYy52biIsImJpbmh0aHVhbi52biIsImNhbWF1LnZuIiwiY2FudGhvLnZuIiwi'@;
put 'Y2FvYmFuZy52biIsImRha2xhay52biIsImRha25vbmcudm4iLCJkYW5hbmcudm4iLCJkaWVuYmllbi52biIsImRvbmduYWkudm4iLCJkb25ndGhhcC52biIsImdpYWxhaS52biIsImhhZ2lhbmcudm4iLCJoYWlkdW9uZy52biIsImhhaXBob25nLnZuIiwiaGFuYW0udm4iLCJoYW5vaS52biIs'@;
put 'ImhhdGluaC52biIsImhhdWdpYW5nLnZuIiwiaG9hYmluaC52biIsImh1bmd5ZW4udm4iLCJraGFuaGhvYS52biIsImtpZW5naWFuZy52biIsImtvbnR1bS52biIsImxhaWNoYXUudm4iLCJsYW1kb25nLnZuIiwibGFuZ3Nvbi52biIsImxhb2NhaS52biIsImxvbmdhbi52biIsIm5hbWRpbmgu'@;
put 'dm4iLCJuZ2hlYW4udm4iLCJuaW5oYmluaC52biIsIm5pbmh0aHVhbi52biIsInBodXRoby52biIsInBodXllbi52biIsInF1YW5nYmluaC52biIsInF1YW5nbmFtLnZuIiwicXVhbmduZ2FpLnZuIiwicXVhbmduaW5oLnZuIiwicXVhbmd0cmkudm4iLCJzb2N0cmFuZy52biIsInNvbmxhLnZu'@;
put 'IiwidGF5bmluaC52biIsInRoYWliaW5oLnZuIiwidGhhaW5ndXllbi52biIsInRoYW5oaG9hLnZuIiwidGhhbmhwaG9ob2NoaW1pbmgudm4iLCJ0aHVhdGhpZW5odWUudm4iLCJ0aWVuZ2lhbmcudm4iLCJ0cmF2aW5oLnZuIiwidHV5ZW5xdWFuZy52biIsInZpbmhsb25nLnZuIiwidmluaHBo'@;
put 'dWMudm4iLCJ5ZW5iYWkudm4iLCJ2dSIsImNvbS52dSIsImVkdS52dSIsIm5ldC52dSIsIm9yZy52dSIsIndmIiwid3MiLCJjb20ud3MiLCJlZHUud3MiLCJnb3Yud3MiLCJuZXQud3MiLCJvcmcud3MiLCJ5dCIsIlx1MDYyN1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYyN1x1MDYyYSIsIlx1MDU3'@;
put 'MFx1MDU2MVx1MDU3NSIsIlx1MDlhY1x1MDliZVx1MDk4Mlx1MDliMlx1MDliZSIsIlx1MDQzMVx1MDQzMyIsIlx1MDYyN1x1MDY0NFx1MDYyOFx1MDYyZFx1MDYzMVx1MDY0YVx1MDY0NiIsIlx1MDQzMVx1MDQzNVx1MDQzYiIsIlx1NGUyZFx1NTZmZCIsIlx1NGUyZFx1NTcwYiIsIlx1MDYy'@;
put 'N1x1MDY0NFx1MDYyY1x1MDYzMlx1MDYyN1x1MDYyNlx1MDYzMSIsIlx1MDY0NVx1MDYzNVx1MDYzMSIsIlx1MDQzNVx1MDQ0ZSIsIlx1MDNiNVx1MDNjNSIsIlx1MDY0NVx1MDY0OFx1MDYzMVx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyNyIsIlx1MTBkMlx1MTBkNCIsIlx1'@;
put 'MDNiNVx1MDNiYiIsIlx1OTk5OVx1NmUyZiIsIlx1NTAwYlx1NGViYS5cdTk5OTlcdTZlMmYiLCJcdTUxNmNcdTUzZjguXHU5OTk5XHU2ZTJmIiwiXHU2NTNmXHU1ZTljLlx1OTk5OVx1NmUyZiIsIlx1NjU1OVx1ODBiMi5cdTk5OTlcdTZlMmYiLCJcdTdkNDRcdTdlNTQuXHU5OTk5XHU2ZTJm'@;
put 'IiwiXHU3ZGIyXHU3ZDYxLlx1OTk5OVx1NmUyZiIsIlx1MGNhZFx1MGNiZVx1MGNiMFx1MGNhNCIsIlx1MGIyZFx1MGIzZVx1MGIzMFx1MGIyNCIsIlx1MDlhZFx1MDliZVx1MDlmMFx1MDlhNCIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNFx1MDkyZVx1MDk0ZCIsIlx1MDkyZFx1MDkzZVx1'@;
put 'MDkzMFx1MDk0Ylx1MDkyNCIsIlx1MDY4MFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MGQyZFx1MGQzZVx1MGQzMFx1MGQyNFx1MGQwMiIsIlx1MDkyZFx1MDkzZVx1MDkzMFx1MDkyNCIsIlx1MDYyOFx1MDYyN1x1MDYzMVx1MDYyYSIsIlx1MDYyOFx1MDZiZVx1MDYyN1x1MDYzMVx1MDYyYSIs'@;
put 'Ilx1MGMyZFx1MGMzZVx1MGMzMFx1MGMyNFx1MGM0ZCIsIlx1MGFhZFx1MGFiZVx1MGFiMFx1MGFhNCIsIlx1MGEyZFx1MGEzZVx1MGEzMFx1MGEyNCIsIlx1MDlhZFx1MDliZVx1MDliMFx1MDlhNCIsIlx1MGI4N1x1MGJhOFx1MGJjZFx1MGJhNFx1MGJiZlx1MGJhZlx1MGJiZSIsIlx1MDYy'@;
put 'N1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYzMVx1MDYyN1x1MDY0MiIsIlx1MDYyN1x1MDY0NFx1MDYyN1x1MDYzMVx1MDYyZlx1MDY0NiIsIlx1ZDU1Y1x1YWQ2ZCIsIlx1MDQ5Ylx1MDQzMFx1MDQzNyIsIlx1'@;
put 'MGVhNVx1MGViMlx1MGVhNyIsIlx1MGRiZFx1MGQ4Mlx1MGQ5YVx1MGRjZiIsIlx1MGI4N1x1MGJiMlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJjOCIsIlx1MDYyN1x1MDY0NFx1MDY0NVx1MDYzYVx1MDYzMVx1MDYyOCIsIlx1MDQzY1x1MDQzYVx1MDQzNCIsIlx1MDQzY1x1MDQzZVx1MDQzZCIs'@;
put 'Ilx1NmZiM1x1OTU4MCIsIlx1NmZiM1x1OTVlOCIsIlx1MDY0NVx1MDY0NFx1MDY0YVx1MDYzM1x1MDY0YVx1MDYyNyIsIlx1MDYzOVx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDZhOVx1MDYzM1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY3ZVx1MDYyN1x1MDY0M1x1MDYz'@;
put 'M1x1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDY0MVx1MDY0NFx1MDYzM1x1MDYzN1x1MDY0YVx1MDY0NiIsIlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzMFx1MDQzYS5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0MzFcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUw'@;
put 'NDM0Llx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQ0MFx1MDQzMy5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2ZcdTA0NDAuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDQzXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0MFx1MDQ0NCIsIlx1MDY0Mlx1MDYz'@;
put 'N1x1MDYzMSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDYyOSIsIlx1MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDZjY1x1MDZjMyIsIlx1'@;
put 'MDYyN1x1MDY0NFx1MDYzM1x1MDYzOVx1MDY0OFx1MDYyZlx1MDY0YVx1MDY0NyIsIlx1MDYzM1x1MDY0OFx1MDYyZlx1MDYyN1x1MDY0NiIsIlx1NjViMFx1NTJhMFx1NTc2MSIsIlx1MGI5YVx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJhYVx1MGJjZFx1MGJhYVx1MGJjMlx1MGJiMFx1'@;
put 'MGJjZCIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyOSIsIlx1MDYzM1x1MDY0OFx1MDYzMVx1MDY0YVx1MDYyNyIsIlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUxN1x1MGUyYlx1MGUzMlx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMThcdTBlMzhcdTBlMjNcdTBlMDFc'@;
put 'dTBlMzRcdTBlMDguXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTQwXHUwZTE5XHUwZTQ3XHUwZTE1Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyM1x1MGUzMVx1MGUxMFx1MGUxYVx1MGUzMlx1MGUyNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjhcdTBlMzZcdTBlMDFcdTBlMjlcdTBl'@;
put 'MzIuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTJkXHUwZTA3XHUwZTA0XHUwZTRjXHUwZTAxXHUwZTIzLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MDYyYVx1MDY0OFx1MDY0Nlx1MDYzMyIsIlx1NTNmMFx1NzA2MyIsIlx1NTNmMFx1NmU3ZSIsIlx1ODFmYVx1NzA2MyIsIlx1MDQ0M1x1MDQz'@;
put 'YVx1MDQ0MCIsIlx1MDYyN1x1MDY0NFx1MDY0YVx1MDY0NVx1MDY0NiIsInh4eCIsInllIiwiY29tLnllIiwiZWR1LnllIiwiZ292LnllIiwibWlsLnllIiwibmV0LnllIiwib3JnLnllIiwiYWMuemEiLCJhZ3JpYy56YSIsImFsdC56YSIsImNvLnphIiwiZWR1LnphIiwiZ292LnphIiwiZ3Jv'@;
put 'bmRhci56YSIsImxhdy56YSIsIm1pbC56YSIsIm5ldC56YSIsIm5nby56YSIsIm5pYy56YSIsIm5pcy56YSIsIm5vbS56YSIsIm9yZy56YSIsInNjaG9vbC56YSIsInRtLnphIiwid2ViLnphIiwiem0iLCJhYy56bSIsImJpei56bSIsImNvLnptIiwiY29tLnptIiwiZWR1LnptIiwiZ292Lnpt'@;
put 'IiwiaW5mby56bSIsIm1pbC56bSIsIm5ldC56bSIsIm9yZy56bSIsInNjaC56bSIsInp3IiwiYWMuenciLCJjby56dyIsImdvdi56dyIsIm1pbC56dyIsIm9yZy56dyIsImFhYSIsImFhcnAiLCJhYmIiLCJhYmJvdHQiLCJhYmJ2aWUiLCJhYmMiLCJhYmxlIiwiYWJvZ2FkbyIsImFidWRoYWJp'@;
put 'IiwiYWNhZGVteSIsImFjY2VudHVyZSIsImFjY291bnRhbnQiLCJhY2NvdW50YW50cyIsImFjbyIsImFjdG9yIiwiYWRzIiwiYWR1bHQiLCJhZWciLCJhZXRuYSIsImFmbCIsImFmcmljYSIsImFnYWtoYW4iLCJhZ2VuY3kiLCJhaWciLCJhaXJidXMiLCJhaXJmb3JjZSIsImFpcnRlbCIsImFr'@;
put 'ZG4iLCJhbGliYWJhIiwiYWxpcGF5IiwiYWxsZmluYW56IiwiYWxsc3RhdGUiLCJhbGx5IiwiYWxzYWNlIiwiYWxzdG9tIiwiYW1hem9uIiwiYW1lcmljYW5leHByZXNzIiwiYW1lcmljYW5mYW1pbHkiLCJhbWV4IiwiYW1mYW0iLCJhbWljYSIsImFtc3RlcmRhbSIsImFuYWx5dGljcyIsImFu'@;
put 'ZHJvaWQiLCJhbnF1YW4iLCJhbnoiLCJhb2wiLCJhcGFydG1lbnRzIiwiYXBwIiwiYXBwbGUiLCJhcXVhcmVsbGUiLCJhcmFiIiwiYXJhbWNvIiwiYXJjaGkiLCJhcm15IiwiYXJ0IiwiYXJ0ZSIsImFzZGEiLCJhc3NvY2lhdGVzIiwiYXRobGV0YSIsImF0dG9ybmV5IiwiYXVjdGlvbiIsImF1'@;
put 'ZGkiLCJhdWRpYmxlIiwiYXVkaW8iLCJhdXNwb3N0IiwiYXV0aG9yIiwiYXV0byIsImF1dG9zIiwiYXdzIiwiYXhhIiwiYXp1cmUiLCJiYWJ5IiwiYmFpZHUiLCJiYW5hbWV4IiwiYmFuZCIsImJhbmsiLCJiYXIiLCJiYXJjZWxvbmEiLCJiYXJjbGF5Y2FyZCIsImJhcmNsYXlzIiwiYmFyZWZv'@;
put 'b3QiLCJiYXJnYWlucyIsImJhc2ViYWxsIiwiYmFza2V0YmFsbCIsImJhdWhhdXMiLCJiYXllcm4iLCJiYmMiLCJiYnQiLCJiYnZhIiwiYmNnIiwiYmNuIiwiYmVhdHMiLCJiZWF1dHkiLCJiZWVyIiwiYmVudGxleSIsImJlcmxpbiIsImJlc3QiLCJiZXN0YnV5IiwiYmV0IiwiYmhhcnRpIiwi'@;
put 'YmlibGUiLCJiaWQiLCJiaWtlIiwiYmluZyIsImJpbmdvIiwiYmlvIiwiYmxhY2siLCJibGFja2ZyaWRheSIsImJsb2NrYnVzdGVyIiwiYmxvZyIsImJsb29tYmVyZyIsImJsdWUiLCJibXMiLCJibXciLCJibnBwYXJpYmFzIiwiYm9hdHMiLCJib2VocmluZ2VyIiwiYm9mYSIsImJvbSIsImJv'@;
put 'bmQiLCJib28iLCJib29rIiwiYm9va2luZyIsImJvc2NoIiwiYm9zdGlrIiwiYm9zdG9uIiwiYm90IiwiYm91dGlxdWUiLCJib3giLCJicmFkZXNjbyIsImJyaWRnZXN0b25lIiwiYnJvYWR3YXkiLCJicm9rZXIiLCJicm90aGVyIiwiYnJ1c3NlbHMiLCJidWlsZCIsImJ1aWxkZXJzIiwiYnVz'@;
put 'aW5lc3MiLCJidXkiLCJidXp6IiwiYnpoIiwiY2FiIiwiY2FmZSIsImNhbCIsImNhbGwiLCJjYWx2aW5rbGVpbiIsImNhbSIsImNhbWVyYSIsImNhbXAiLCJjYW5vbiIsImNhcGV0b3duIiwiY2FwaXRhbCIsImNhcGl0YWxvbmUiLCJjYXIiLCJjYXJhdmFuIiwiY2FyZHMiLCJjYXJlIiwiY2Fy'@;
put 'ZWVyIiwiY2FyZWVycyIsImNhcnMiLCJjYXNhIiwiY2FzZSIsImNhc2giLCJjYXNpbm8iLCJjYXRlcmluZyIsImNhdGhvbGljIiwiY2JhIiwiY2JuIiwiY2JyZSIsImNlbnRlciIsImNlbyIsImNlcm4iLCJjZmEiLCJjZmQiLCJjaGFuZWwiLCJjaGFubmVsIiwiY2hhcml0eSIsImNoYXNlIiwi'@;
put 'Y2hhdCIsImNoZWFwIiwiY2hpbnRhaSIsImNocmlzdG1hcyIsImNocm9tZSIsImNodXJjaCIsImNpcHJpYW5pIiwiY2lyY2xlIiwiY2lzY28iLCJjaXRhZGVsIiwiY2l0aSIsImNpdGljIiwiY2l0eSIsImNsYWltcyIsImNsZWFuaW5nIiwiY2xpY2siLCJjbGluaWMiLCJjbGluaXF1ZSIsImNs'@;
put 'b3RoaW5nIiwiY2xvdWQiLCJjbHViIiwiY2x1Ym1lZCIsImNvYWNoIiwiY29kZXMiLCJjb2ZmZWUiLCJjb2xsZWdlIiwiY29sb2duZSIsImNvbW1iYW5rIiwiY29tbXVuaXR5IiwiY29tcGFueSIsImNvbXBhcmUiLCJjb21wdXRlciIsImNvbXNlYyIsImNvbmRvcyIsImNvbnN0cnVjdGlvbiIs'@;
put 'ImNvbnN1bHRpbmciLCJjb250YWN0IiwiY29udHJhY3RvcnMiLCJjb29raW5nIiwiY29vbCIsImNvcnNpY2EiLCJjb3VudHJ5IiwiY291cG9uIiwiY291cG9ucyIsImNvdXJzZXMiLCJjcGEiLCJjcmVkaXQiLCJjcmVkaXRjYXJkIiwiY3JlZGl0dW5pb24iLCJjcmlja2V0IiwiY3Jvd24iLCJj'@;
put 'cnMiLCJjcnVpc2UiLCJjcnVpc2VzIiwiY3Vpc2luZWxsYSIsImN5bXJ1IiwiY3lvdSIsImRhZCIsImRhbmNlIiwiZGF0YSIsImRhdGUiLCJkYXRpbmciLCJkYXRzdW4iLCJkYXkiLCJkY2xrIiwiZGRzIiwiZGVhbCIsImRlYWxlciIsImRlYWxzIiwiZGVncmVlIiwiZGVsaXZlcnkiLCJkZWxs'@;
put 'IiwiZGVsb2l0dGUiLCJkZWx0YSIsImRlbW9jcmF0IiwiZGVudGFsIiwiZGVudGlzdCIsImRlc2kiLCJkZXNpZ24iLCJkZXYiLCJkaGwiLCJkaWFtb25kcyIsImRpZXQiLCJkaWdpdGFsIiwiZGlyZWN0IiwiZGlyZWN0b3J5IiwiZGlzY291bnQiLCJkaXNjb3ZlciIsImRpc2giLCJkaXkiLCJk'@;
put 'bnAiLCJkb2NzIiwiZG9jdG9yIiwiZG9nIiwiZG9tYWlucyIsImRvdCIsImRvd25sb2FkIiwiZHJpdmUiLCJkdHYiLCJkdWJhaSIsImR1bmxvcCIsImR1cG9udCIsImR1cmJhbiIsImR2YWciLCJkdnIiLCJlYXJ0aCIsImVhdCIsImVjbyIsImVkZWthIiwiZWR1Y2F0aW9uIiwiZW1haWwiLCJl'@;
put 'bWVyY2siLCJlbmVyZ3kiLCJlbmdpbmVlciIsImVuZ2luZWVyaW5nIiwiZW50ZXJwcmlzZXMiLCJlcHNvbiIsImVxdWlwbWVudCIsImVyaWNzc29uIiwiZXJuaSIsImVzcSIsImVzdGF0ZSIsImV1cm92aXNpb24iLCJldXMiLCJldmVudHMiLCJleGNoYW5nZSIsImV4cGVydCIsImV4cG9zZWQi'@;
put 'LCJleHByZXNzIiwiZXh0cmFzcGFjZSIsImZhZ2UiLCJmYWlsIiwiZmFpcndpbmRzIiwiZmFpdGgiLCJmYW1pbHkiLCJmYW4iLCJmYW5zIiwiZmFybSIsImZhcm1lcnMiLCJmYXNoaW9uIiwiZmFzdCIsImZlZGV4IiwiZmVlZGJhY2siLCJmZXJyYXJpIiwiZmVycmVybyIsImZpZGVsaXR5Iiwi'@;
put 'ZmlkbyIsImZpbG0iLCJmaW5hbCIsImZpbmFuY2UiLCJmaW5hbmNpYWwiLCJmaXJlIiwiZmlyZXN0b25lIiwiZmlybWRhbGUiLCJmaXNoIiwiZmlzaGluZyIsImZpdCIsImZpdG5lc3MiLCJmbGlja3IiLCJmbGlnaHRzIiwiZmxpciIsImZsb3Jpc3QiLCJmbG93ZXJzIiwiZmx5IiwiZm9vIiwi'@;
put 'Zm9vZCIsImZvb3RiYWxsIiwiZm9yZCIsImZvcmV4IiwiZm9yc2FsZSIsImZvcnVtIiwiZm91bmRhdGlvbiIsImZveCIsImZyZWUiLCJmcmVzZW5pdXMiLCJmcmwiLCJmcm9nYW5zIiwiZnJvbnRpZXIiLCJmdHIiLCJmdWppdHN1IiwiZnVuIiwiZnVuZCIsImZ1cm5pdHVyZSIsImZ1dGJvbCIs'@;
put 'ImZ5aSIsImdhbCIsImdhbGxlcnkiLCJnYWxsbyIsImdhbGx1cCIsImdhbWUiLCJnYW1lcyIsImdhcCIsImdhcmRlbiIsImdheSIsImdiaXoiLCJnZG4iLCJnZWEiLCJnZW50IiwiZ2VudGluZyIsImdlb3JnZSIsImdnZWUiLCJnaWZ0IiwiZ2lmdHMiLCJnaXZlcyIsImdpdmluZyIsImdsYXNz'@;
put 'IiwiZ2xlIiwiZ2xvYmFsIiwiZ2xvYm8iLCJnbWFpbCIsImdtYmgiLCJnbW8iLCJnbXgiLCJnb2RhZGR5IiwiZ29sZCIsImdvbGRwb2ludCIsImdvbGYiLCJnb28iLCJnb29keWVhciIsImdvb2ciLCJnb29nbGUiLCJnb3AiLCJnb3QiLCJncmFpbmdlciIsImdyYXBoaWNzIiwiZ3JhdGlzIiwi'@;
put 'Z3JlZW4iLCJncmlwZSIsImdyb2NlcnkiLCJncm91cCIsImd1Y2NpIiwiZ3VnZSIsImd1aWRlIiwiZ3VpdGFycyIsImd1cnUiLCJoYWlyIiwiaGFtYnVyZyIsImhhbmdvdXQiLCJoYXVzIiwiaGJvIiwiaGRmYyIsImhkZmNiYW5rIiwiaGVhbHRoIiwiaGVhbHRoY2FyZSIsImhlbHAiLCJoZWxz'@;
put 'aW5raSIsImhlcmUiLCJoZXJtZXMiLCJoaXBob3AiLCJoaXNhbWl0c3UiLCJoaXRhY2hpIiwiaGl2IiwiaGt0IiwiaG9ja2V5IiwiaG9sZGluZ3MiLCJob2xpZGF5IiwiaG9tZWRlcG90IiwiaG9tZWdvb2RzIiwiaG9tZXMiLCJob21lc2Vuc2UiLCJob25kYSIsImhvcnNlIiwiaG9zcGl0YWwi'@;
put 'LCJob3N0IiwiaG9zdGluZyIsImhvdCIsImhvdGVscyIsImhvdG1haWwiLCJob3VzZSIsImhvdyIsImhzYmMiLCJodWdoZXMiLCJoeWF0dCIsImh5dW5kYWkiLCJpYm0iLCJpY2JjIiwiaWNlIiwiaWN1IiwiaWVlZSIsImlmbSIsImlrYW5vIiwiaW1hbWF0IiwiaW1kYiIsImltbW8iLCJpbW1v'@;
put 'YmlsaWVuIiwiaW5jIiwiaW5kdXN0cmllcyIsImluZmluaXRpIiwiaW5nIiwiaW5rIiwiaW5zdGl0dXRlIiwiaW5zdXJhbmNlIiwiaW5zdXJlIiwiaW50ZXJuYXRpb25hbCIsImludHVpdCIsImludmVzdG1lbnRzIiwiaXBpcmFuZ2EiLCJpcmlzaCIsImlzbWFpbGkiLCJpc3QiLCJpc3RhbmJ1'@;
put 'bCIsIml0YXUiLCJpdHYiLCJqYWd1YXIiLCJqYXZhIiwiamNiIiwiamVlcCIsImpldHp0IiwiamV3ZWxyeSIsImppbyIsImpsbCIsImptcCIsImpuaiIsImpvYnVyZyIsImpvdCIsImpveSIsImpwbW9yZ2FuIiwianBycyIsImp1ZWdvcyIsImp1bmlwZXIiLCJrYXVmZW4iLCJrZGRpIiwia2Vy'@;
put 'cnlob3RlbHMiLCJrZXJyeWxvZ2lzdGljcyIsImtlcnJ5cHJvcGVydGllcyIsImtmaCIsImtpYSIsImtpZHMiLCJraW0iLCJraW5kbGUiLCJraXRjaGVuIiwia2l3aSIsImtvZWxuIiwia29tYXRzdSIsImtvc2hlciIsImtwbWciLCJrcG4iLCJrcmQiLCJrcmVkIiwia3Vva2dyb3VwIiwia3lv'@;
put 'dG8iLCJsYWNhaXhhIiwibGFtYm9yZ2hpbmkiLCJsYW1lciIsImxhbmNhc3RlciIsImxhbmQiLCJsYW5kcm92ZXIiLCJsYW54ZXNzIiwibGFzYWxsZSIsImxhdCIsImxhdGlubyIsImxhdHJvYmUiLCJsYXciLCJsYXd5ZXIiLCJsZHMiLCJsZWFzZSIsImxlY2xlcmMiLCJsZWZyYWsiLCJsZWdh'@;
put 'bCIsImxlZ28iLCJsZXh1cyIsImxnYnQiLCJsaWRsIiwibGlmZSIsImxpZmVpbnN1cmFuY2UiLCJsaWZlc3R5bGUiLCJsaWdodGluZyIsImxpa2UiLCJsaWxseSIsImxpbWl0ZWQiLCJsaW1vIiwibGluY29sbiIsImxpbmsiLCJsaXBzeSIsImxpdmUiLCJsaXZpbmciLCJsbGMiLCJsbHAiLCJs'@;
put 'b2FuIiwibG9hbnMiLCJsb2NrZXIiLCJsb2N1cyIsImxvbCIsImxvbmRvbiIsImxvdHRlIiwibG90dG8iLCJsb3ZlIiwibHBsIiwibHBsZmluYW5jaWFsIiwibHRkIiwibHRkYSIsImx1bmRiZWNrIiwibHV4ZSIsImx1eHVyeSIsIm1hZHJpZCIsIm1haWYiLCJtYWlzb24iLCJtYWtldXAiLCJt'@;
put 'YW4iLCJtYW5hZ2VtZW50IiwibWFuZ28iLCJtYXAiLCJtYXJrZXQiLCJtYXJrZXRpbmciLCJtYXJrZXRzIiwibWFycmlvdHQiLCJtYXJzaGFsbHMiLCJtYXR0ZWwiLCJtYmEiLCJtY2tpbnNleSIsIm1lZCIsIm1lZGlhIiwibWVldCIsIm1lbGJvdXJuZSIsIm1lbWUiLCJtZW1vcmlhbCIsIm1l'@;
put 'biIsIm1lbnUiLCJtZXJjayIsIm1lcmNrbXNkIiwibWlhbWkiLCJtaWNyb3NvZnQiLCJtaW5pIiwibWludCIsIm1pdCIsIm1pdHN1YmlzaGkiLCJtbGIiLCJtbHMiLCJtbWEiLCJtb2JpbGUiLCJtb2RhIiwibW9lIiwibW9pIiwibW9tIiwibW9uYXNoIiwibW9uZXkiLCJtb25zdGVyIiwibW9y'@;
put 'bW9uIiwibW9ydGdhZ2UiLCJtb3Njb3ciLCJtb3RvIiwibW90b3JjeWNsZXMiLCJtb3YiLCJtb3ZpZSIsIm1zZCIsIm10biIsIm10ciIsIm11c2ljIiwibmFiIiwibmFnb3lhIiwibmF2eSIsIm5iYSIsIm5lYyIsIm5ldGJhbmsiLCJuZXRmbGl4IiwibmV0d29yayIsIm5ldXN0YXIiLCJuZXci'@;
put 'LCJuZXdzIiwibmV4dCIsIm5leHRkaXJlY3QiLCJuZXh1cyIsIm5mbCIsIm5nbyIsIm5oayIsIm5pY28iLCJuaWtlIiwibmlrb24iLCJuaW5qYSIsIm5pc3NhbiIsIm5pc3NheSIsIm5va2lhIiwibm9ydG9uIiwibm93Iiwibm93cnV6Iiwibm93dHYiLCJucmEiLCJucnciLCJudHQiLCJueWMi'@;
put 'LCJvYmkiLCJvYnNlcnZlciIsIm9mZmljZSIsIm9raW5hd2EiLCJvbGF5YW4iLCJvbGF5YW5ncm91cCIsIm9sbG8iLCJvbWVnYSIsIm9uZSIsIm9uZyIsIm9ubCIsIm9ubGluZSIsIm9vbyIsIm9wZW4iLCJvcmFjbGUiLCJvcmFuZ2UiLCJvcmdhbmljIiwib3JpZ2lucyIsIm9zYWthIiwib3Rz'@;
put 'dWthIiwib3R0Iiwib3ZoIiwicGFnZSIsInBhbmFzb25pYyIsInBhcmlzIiwicGFycyIsInBhcnRuZXJzIiwicGFydHMiLCJwYXJ0eSIsInBheSIsInBjY3ciLCJwZXQiLCJwZml6ZXIiLCJwaGFybWFjeSIsInBoZCIsInBoaWxpcHMiLCJwaG9uZSIsInBob3RvIiwicGhvdG9ncmFwaHkiLCJw'@;
put 'aG90b3MiLCJwaHlzaW8iLCJwaWNzIiwicGljdGV0IiwicGljdHVyZXMiLCJwaWQiLCJwaW4iLCJwaW5nIiwicGluayIsInBpb25lZXIiLCJwaXp6YSIsInBsYWNlIiwicGxheSIsInBsYXlzdGF0aW9uIiwicGx1bWJpbmciLCJwbHVzIiwicG5jIiwicG9obCIsInBva2VyIiwicG9saXRpZSIs'@;
put 'InBvcm4iLCJwcmFtZXJpY2EiLCJwcmF4aSIsInByZXNzIiwicHJpbWUiLCJwcm9kIiwicHJvZHVjdGlvbnMiLCJwcm9mIiwicHJvZ3Jlc3NpdmUiLCJwcm9tbyIsInByb3BlcnRpZXMiLCJwcm9wZXJ0eSIsInByb3RlY3Rpb24iLCJwcnUiLCJwcnVkZW50aWFsIiwicHViIiwicHdjIiwicXBv'@;
put 'biIsInF1ZWJlYyIsInF1ZXN0IiwicmFjaW5nIiwicmFkaW8iLCJyZWFkIiwicmVhbGVzdGF0ZSIsInJlYWx0b3IiLCJyZWFsdHkiLCJyZWNpcGVzIiwicmVkIiwicmVkc3RvbmUiLCJyZWR1bWJyZWxsYSIsInJlaGFiIiwicmVpc2UiLCJyZWlzZW4iLCJyZWl0IiwicmVsaWFuY2UiLCJyZW4i'@;
put 'LCJyZW50IiwicmVudGFscyIsInJlcGFpciIsInJlcG9ydCIsInJlcHVibGljYW4iLCJyZXN0IiwicmVzdGF1cmFudCIsInJldmlldyIsInJldmlld3MiLCJyZXhyb3RoIiwicmljaCIsInJpY2hhcmRsaSIsInJpY29oIiwicmlsIiwicmlvIiwicmlwIiwicm9ja3MiLCJyb2RlbyIsInJvZ2Vy'@;
put 'cyIsInJvb20iLCJyc3ZwIiwicnVnYnkiLCJydWhyIiwicnVuIiwicndlIiwicnl1a3l1Iiwic2FhcmxhbmQiLCJzYWZlIiwic2FmZXR5Iiwic2FrdXJhIiwic2FsZSIsInNhbG9uIiwic2Ftc2NsdWIiLCJzYW1zdW5nIiwic2FuZHZpayIsInNhbmR2aWtjb3JvbWFudCIsInNhbm9maSIsInNh'@;
put 'cCIsInNhcmwiLCJzYXMiLCJzYXZlIiwic2F4byIsInNiaSIsInNicyIsInNjYiIsInNjaGFlZmZsZXIiLCJzY2htaWR0Iiwic2Nob2xhcnNoaXBzIiwic2Nob29sIiwic2NodWxlIiwic2Nod2FyeiIsInNjaWVuY2UiLCJzY290Iiwic2VhcmNoIiwic2VhdCIsInNlY3VyZSIsInNlY3VyaXR5'@;
put 'Iiwic2VlayIsInNlbGVjdCIsInNlbmVyIiwic2VydmljZXMiLCJzZXZlbiIsInNldyIsInNleCIsInNleHkiLCJzZnIiLCJzaGFuZ3JpbGEiLCJzaGFycCIsInNoZWxsIiwic2hpYSIsInNoaWtzaGEiLCJzaG9lcyIsInNob3AiLCJzaG9wcGluZyIsInNob3VqaSIsInNob3ciLCJzaWxrIiwi'@;
put 'c2luYSIsInNpbmdsZXMiLCJzaXRlIiwic2tpIiwic2tpbiIsInNreSIsInNreXBlIiwic2xpbmciLCJzbWFydCIsInNtaWxlIiwic25jZiIsInNvY2NlciIsInNvY2lhbCIsInNvZnRiYW5rIiwic29mdHdhcmUiLCJzb2h1Iiwic29sYXIiLCJzb2x1dGlvbnMiLCJzb25nIiwic29ueSIsInNv'@;
put 'eSIsInNwYSIsInNwYWNlIiwic3BvcnQiLCJzcG90Iiwic3JsIiwic3RhZGEiLCJzdGFwbGVzIiwic3RhciIsInN0YXRlYmFuayIsInN0YXRlZmFybSIsInN0YyIsInN0Y2dyb3VwIiwic3RvY2tob2xtIiwic3RvcmFnZSIsInN0b3JlIiwic3RyZWFtIiwic3R1ZGlvIiwic3R1ZHkiLCJzdHls'@;
put 'ZSIsInN1Y2tzIiwic3VwcGxpZXMiLCJzdXBwbHkiLCJzdXBwb3J0Iiwic3VyZiIsInN1cmdlcnkiLCJzdXp1a2kiLCJzd2F0Y2giLCJzd2lzcyIsInN5ZG5leSIsInN5c3RlbXMiLCJ0YWIiLCJ0YWlwZWkiLCJ0YWxrIiwidGFvYmFvIiwidGFyZ2V0IiwidGF0YW1vdG9ycyIsInRhdGFyIiwi'@;
put 'dGF0dG9vIiwidGF4IiwidGF4aSIsInRjaSIsInRkayIsInRlYW0iLCJ0ZWNoIiwidGVjaG5vbG9neSIsInRlbWFzZWsiLCJ0ZW5uaXMiLCJ0ZXZhIiwidGhkIiwidGhlYXRlciIsInRoZWF0cmUiLCJ0aWFhIiwidGlja2V0cyIsInRpZW5kYSIsInRpcHMiLCJ0aXJlcyIsInRpcm9sIiwidGpt'@;
put 'YXh4IiwidGp4IiwidGttYXh4IiwidG1hbGwiLCJ0b2RheSIsInRva3lvIiwidG9vbHMiLCJ0b3AiLCJ0b3JheSIsInRvc2hpYmEiLCJ0b3RhbCIsInRvdXJzIiwidG93biIsInRveW90YSIsInRveXMiLCJ0cmFkZSIsInRyYWRpbmciLCJ0cmFpbmluZyIsInRyYXZlbCIsInRyYXZlbGVycyIs'@;
put 'InRyYXZlbGVyc2luc3VyYW5jZSIsInRydXN0IiwidHJ2IiwidHViZSIsInR1aSIsInR1bmVzIiwidHVzaHUiLCJ0dnMiLCJ1YmFuayIsInVicyIsInVuaWNvbSIsInVuaXZlcnNpdHkiLCJ1bm8iLCJ1b2wiLCJ1cHMiLCJ2YWNhdGlvbnMiLCJ2YW5hIiwidmFuZ3VhcmQiLCJ2ZWdhcyIsInZl'@;
put 'bnR1cmVzIiwidmVyaXNpZ24iLCJ2ZXJzaWNoZXJ1bmciLCJ2ZXQiLCJ2aWFqZXMiLCJ2aWRlbyIsInZpZyIsInZpa2luZyIsInZpbGxhcyIsInZpbiIsInZpcCIsInZpcmdpbiIsInZpc2EiLCJ2aXNpb24iLCJ2aXZhIiwidml2byIsInZsYWFuZGVyZW4iLCJ2b2RrYSIsInZvbHZvIiwidm90'@;
put 'ZSIsInZvdGluZyIsInZvdG8iLCJ2b3lhZ2UiLCJ3YWxlcyIsIndhbG1hcnQiLCJ3YWx0ZXIiLCJ3YW5nIiwid2FuZ2dvdSIsIndhdGNoIiwid2F0Y2hlcyIsIndlYXRoZXIiLCJ3ZWF0aGVyY2hhbm5lbCIsIndlYmNhbSIsIndlYmVyIiwid2Vic2l0ZSIsIndlZCIsIndlZGRpbmciLCJ3ZWli'@;
put 'byIsIndlaXIiLCJ3aG9zd2hvIiwid2llbiIsIndpa2kiLCJ3aWxsaWFtaGlsbCIsIndpbiIsIndpbmRvd3MiLCJ3aW5lIiwid2lubmVycyIsIndtZSIsIndvbHRlcnNrbHV3ZXIiLCJ3b29kc2lkZSIsIndvcmsiLCJ3b3JrcyIsIndvcmxkIiwid293Iiwid3RjIiwid3RmIiwieGJveCIsInhl'@;
put 'cm94IiwieGlodWFuIiwieGluIiwiXHUwOTE1XHUwOTQ5XHUwOTJlIiwiXHUzMGJiXHUzMGZjXHUzMGViIiwiXHU0ZjViXHU1YzcxIiwiXHU2MTQ4XHU1NTg0IiwiXHU5NmM2XHU1NmUyIiwiXHU1NzI4XHU3ZWJmIiwiXHU3MGI5XHU3NzBiIiwiXHUwZTA0XHUwZTJkXHUwZTIxIiwiXHU1MTZi'@;
put 'XHU1MzY2IiwiXHUwNjQ1XHUwNjQ4XHUwNjQyXHUwNjM5IiwiXHU1MTZjXHU3NmNhIiwiXHU1MTZjXHU1M2Y4IiwiXHU5OTk5XHU2ODNjXHU5MWNjXHU2MmM5IiwiXHU3ZjUxXHU3YWQ5IiwiXHU3OWZiXHU1MmE4IiwiXHU2MjExXHU3MjMxXHU0ZjYwIiwiXHUwNDNjXHUwNDNlXHUwNDQxXHUw'@;
put 'NDNhXHUwNDMyXHUwNDMwIiwiXHUwNDNhXHUwNDMwXHUwNDQyXHUwNDNlXHUwNDNiXHUwNDM4XHUwNDNhIiwiXHUwNDNlXHUwNDNkXHUwNDNiXHUwNDMwXHUwNDM5XHUwNDNkIiwiXHUwNDQxXHUwNDMwXHUwNDM5XHUwNDQyIiwiXHU4MDU0XHU5MDFhIiwiXHUwNWU3XHUwNWQ1XHUwNWRkIiwi'@;
put 'XHU2NWY2XHU1YzFhIiwiXHU1ZmFlXHU1MzVhIiwiXHU2ZGUxXHU5YTZjXHU5NTIxIiwiXHUzMGQ1XHUzMGExXHUzMGMzXHUzMGI3XHUzMGU3XHUzMGYzIiwiXHUwNDNlXHUwNDQwXHUwNDMzIiwiXHUwOTI4XHUwOTQ3XHUwOTFmIiwiXHUzMGI5XHUzMGM4XHUzMGEyIiwiXHUzMGEyXHUzMGRl'@;
put 'XHUzMGJlXHUzMGYzIiwiXHVjMGJjXHVjMTMxIiwiXHU1NTQ2XHU2ODA3IiwiXHU1NTQ2XHU1ZTk3IiwiXHU1NTQ2XHU1N2NlIiwiXHUwNDM0XHUwNDM1XHUwNDQyXHUwNDM4IiwiXHUzMGRkXHUzMGE0XHUzMGYzXHUzMGM4IiwiXHU2NWIwXHU5NWZiIiwiXHU1YmI2XHU5NmZiIiwiXHUwNjQz'@;
put 'XHUwNjQ4XHUwNjQ1IiwiXHU0ZTJkXHU2NTg3XHU3ZjUxIiwiXHU0ZTJkXHU0ZmUxIiwiXHU1YTMxXHU0ZTUwIiwiXHU4YzM3XHU2YjRjIiwiXHU5NmZiXHU4YTBhXHU3NmM4XHU3OWQxIiwiXHU4ZDJkXHU3MjY5IiwiXHUzMGFmXHUzMGU5XHUzMGE2XHUzMGM5IiwiXHU5MDFhXHU4Y2E5Iiwi'@;
put 'XHU3ZjUxXHU1ZTk3IiwiXHUwOTM4XHUwOTAyXHUwOTE3XHUwOTIwXHUwOTI4IiwiXHU5OTEwXHU1Mzg1IiwiXHU3ZjUxXHU3ZWRjIiwiXHUwNDNhXHUwNDNlXHUwNDNjIiwiXHU0ZTlhXHU5YTZjXHU5MDBhIiwiXHU5OGRmXHU1NGMxIiwiXHU5OGRlXHU1MjI5XHU2ZDY2IiwiXHU2MjRiXHU2'@;
put 'NzNhIiwiXHUwNjI3XHUwNjMxXHUwNjI3XHUwNjQ1XHUwNjQzXHUwNjQ4IiwiXHUwNjI3XHUwNjQ0XHUwNjM5XHUwNjQ0XHUwNjRhXHUwNjI3XHUwNjQ2IiwiXHUwNjI4XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMxIiwiXHUwNjI3XHUwNjI4XHUwNjQ4XHUwNjM4XHUwNjI4XHUwNjRhIiwiXHUw'@;
put 'NjQzXHUwNjI3XHUwNjJiXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQzIiwiXHUwNjQ3XHUwNjQ1XHUwNjMxXHUwNjI3XHUwNjQ3IiwiXHViMmY3XHVjZWY0IiwiXHU2NTNmXHU1ZTljIiwiXHUwNjM0XHUwNjI4XHUwNjQzXHUwNjI5IiwiXHUwNjI4XHUwNjRhXHUwNjJhXHUwNjQzIiwiXHUwNjM5'@;
put 'XHUwNjMxXHUwNjI4IiwiXHU2NzNhXHU2Nzg0IiwiXHU3ZWM0XHU3ZWM3XHU2NzNhXHU2Nzg0IiwiXHU1MDY1XHU1ZWI3IiwiXHU2MmRiXHU4MDU4IiwiXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHU1OTI3XHU2MmZmIiwiXHUzMDdmXHUzMDkzXHUzMDZhIiwiXHUzMGIwXHUzMGZjXHUzMGIwXHUz'@;
put 'MGViIiwiXHU0ZTE2XHU3NTRjIiwiXHU2NmY4XHU3YzRkIiwiXHU3ZjUxXHU1NzQwIiwiXHViMmY3XHViMTM3IiwiXHUzMGIzXHUzMGUwIiwiXHU1OTI5XHU0ZTNiXHU2NTU5IiwiXHU2ZTM4XHU2MjBmIiwidmVybVx4ZjZnZW5zYmVyYXRlciIsInZlcm1ceGY2Z2Vuc2JlcmF0dW5nIiwiXHU0'@;
put 'ZjAxXHU0ZTFhIiwiXHU0ZmUxXHU2MDZmIiwiXHU1NjA5XHU5MWNjXHU1OTI3XHU5MTUyXHU1ZTk3IiwiXHU1NjA5XHU5MWNjIiwiXHU1ZTdmXHU0ZTFjIiwiXHU2NTNmXHU1MmExIiwieHl6IiwieWFjaHRzIiwieWFob28iLCJ5YW1heHVuIiwieWFuZGV4IiwieW9kb2Jhc2hpIiwieW9nYSIs'@;
put 'Inlva29oYW1hIiwieW91IiwieW91dHViZSIsInl1biIsInphcHBvcyIsInphcmEiLCJ6ZXJvIiwiemlwIiwiem9uZSIsInp1ZXJpY2giLCJjby5rcmQiLCJlZHUua3JkIiwiYXJ0LnBsIiwiZ2xpd2ljZS5wbCIsImtyYWtvdy5wbCIsInBvem5hbi5wbCIsIndyb2MucGwiLCJ6YWtvcGFuZS5w'@;
put 'bCIsImxpYi5kZS51cyIsIjEyY2hhcnMuZGV2IiwiMTJjaGFycy5pdCIsIjEyY2hhcnMucHJvIiwiY2MudWEiLCJpbmYudWEiLCJsdGQudWEiLCI2MTEudG8iLCJhMmhvc3RlZC5jb20iLCJjcHNlcnZlci5jb20iLCJhYWEudm9ka2EiLCIqLm9uLWFjb3JuLmlvIiwiYWN0aXZldHJhaWwuYml6'@;
put 'IiwiYWRhcHRhYmxlLmFwcCIsImFkb2JlYWVtY2xvdWQuY29tIiwiKi5kZXYuYWRvYmVhZW1jbG91ZC5jb20iLCJhZW0ubGl2ZSIsImhseC5saXZlIiwiYWRvYmVhZW1jbG91ZC5uZXQiLCJhZW0ucGFnZSIsImhseC5wYWdlIiwiaGx4My5wYWdlIiwiYWRvYmVpby1zdGF0aWMubmV0IiwiYWRv'@;
put 'YmVpb3J1bnRpbWUubmV0IiwiYWZyaWNhLmNvbSIsImJlZXAucGwiLCJhaXJraXRhcHBzLmNvbSIsImFpcmtpdGFwcHMtYXUuY29tIiwiYWlya2l0YXBwcy5ldSIsImFpdmVuY2xvdWQuY29tIiwiYWthZG5zLm5ldCIsImFrYW1haS5uZXQiLCJha2FtYWktc3RhZ2luZy5uZXQiLCJha2FtYWll'@;
put 'ZGdlLm5ldCIsImFrYW1haWVkZ2Utc3RhZ2luZy5uZXQiLCJha2FtYWloZC5uZXQiLCJha2FtYWloZC1zdGFnaW5nLm5ldCIsImFrYW1haW9yaWdpbi5uZXQiLCJha2FtYWlvcmlnaW4tc3RhZ2luZy5uZXQiLCJha2FtYWl6ZWQubmV0IiwiYWthbWFpemVkLXN0YWdpbmcubmV0IiwiZWRnZWtl'@;
put 'eS5uZXQiLCJlZGdla2V5LXN0YWdpbmcubmV0IiwiZWRnZXN1aXRlLm5ldCIsImVkZ2VzdWl0ZS1zdGFnaW5nLm5ldCIsImJhcnN5LmNhIiwiKi5jb21wdXRlLmVzdGF0ZSIsIiouYWxjZXMubmV0d29yayIsImthc3NlcnZlci5jb20iLCJhbHRlcnZpc3RhLm9yZyIsImFsd2F5c2RhdGEubmV0'@;
put 'IiwibXlhbWF6ZS5uZXQiLCJleGVjdXRlLWFwaS5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJleGVjdXRlLWFwaS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZXhlY3V0ZS1hcGkuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtZWFzdC0x'@;
put 'LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0'@;
put 'aC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRo'@;
put 'ZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuY2Et'@;
put 'd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtc291dGgt'@;
put 'MS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdlc3QtMy5hbWF6b25hd3Mu'@;
put 'Y29tIiwiZXhlY3V0ZS1hcGkuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwi'@;
put 'ZXhlY3V0ZS1hcGkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1'@;
put 'dGUtYXBpLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJjbG91ZGZyb250Lm5ldCIsImF1dGguYWYtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5h'@;
put 'cC1ub3J0aGVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhlYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aC0y'@;
put 'LmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtNC5hbWF6'@;
put 'b25jb2duaXRvLmNvbSIsImF1dGguY2EtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5jYS13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtY2VudHJhbC0yLmFtYXpvbmNvZ25pdG8uY29tIiwi'@;
put 'YXV0aC5ldS1ub3J0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1zb3V0aC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1zb3V0aC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdlc3QtMi5hbWF6b25j'@;
put 'b2duaXRvLmNvbSIsImF1dGguZXUtd2VzdC0zLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5pbC1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLm1lLWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgubWUtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgu'@;
put 'c2EtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy1lYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy1lYXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtZWFzdC0yLmFtYXpv'@;
put 'bmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWdvdi13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnVzLXdlc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnVzLXdlc3QtMi5hbWF6b25jb2duaXRvLmNv'@;
put 'bSIsImF1dGgtZmlwcy51cy13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbS5jbiIsIiouY29tcHV0ZS5hbWF6b25hd3MuY29tIiwiKi5jb21wdXRlLTEuYW1hem9uYXdzLmNvbSIsInVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJv'@;
put 'ZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJub3RlYm9va3MtcHJvZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJzdHVkaW8tcHJvZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJhcHB1aS1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5j'@;
put 'b20uY24iLCJlbXJub3RlYm9va3MtcHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yc3R1ZGlvLXByb2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcmFwcHVpLXByb2QuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXBy'@;
put 'b2QuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlv'@;
put 'LXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdz'@;
put 'LmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1u'@;
put 'b3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVt'@;
put 'cm5vdGVib29rcy1wcm9kLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGgtMi5hbWF6b25hd3Mu'@;
put 'Y29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRo'@;
put 'ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVt'@;
put 'cmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3Qt'@;
put 'NC5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJv'@;
put 'b2tzLXByb2QuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIs'@;
put 'ImVtcnN0dWRpby1wcm9kLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtY2VudHJhbC0xLmFtYXpv'@;
put 'bmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtbm9y'@;
put 'dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJv'@;
put 'ZC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRp'@;
put 'by1wcm9kLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBw'@;
put 'dWktcHJvZC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZW1ybm90'@;
put 'ZWJvb2tzLXByb2QuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNv'@;
put 'bSIsImVtcnN0dWRpby1wcm9kLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QubWUtY2VudHJhbC0x'@;
put 'LmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2Quc2EtZWFz'@;
put 'dC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVz'@;
put 'LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51'@;
put 'cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1y'@;
put 'YXBwdWktcHJvZC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLXdlc3QtMS5hbWF6b25h'@;
put 'd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy13ZXN0LTIuYW1h'@;
put 'em9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiKi5jbi1ub3J0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbS5jbiIsIiouY24tbm9ydGh3ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tLmNuIiwiKi5hZi1zb3V0aC0xLmFpcmZsb3cuYW1hem9u'@;
put 'YXdzLmNvbSIsIiouYXAtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1ub3J0aGVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0zLmFpcmZsb3cuYW1hem9uYXdzLmNv'@;
put 'bSIsIiouYXAtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAt'@;
put 'c291dGhlYXN0LTMuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aGVhc3QtNC5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmNhLWNlbnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmNhLXdlc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LWNlbnRyYWwt'@;
put 'MS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LWNlbnRyYWwtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LW5vcnRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtc291dGgtMi5haXJmbG93LmFtYXpv'@;
put 'bmF3cy5jb20iLCIqLmV1LXdlc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXdlc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmV1LXdlc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmlsLWNlbnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLm1lLWNl'@;
put 'bnRyYWwtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLm1lLXNvdXRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5zYS1lYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy1lYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy1lYXN0LTIuYWlyZmxvdy5hbWF6'@;
put 'b25hd3MuY29tIiwiKi51cy13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi51cy13ZXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jbi1ub3J0aC0xLmFt'@;
put 'YXpvbmF3cy5jb20uY24iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1kZXByZWNhdGVkLmNuLW5v'@;
put 'cnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLW9iamVjdC1sYW1iZGEuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5kdWFsc3RhY2suY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFj'@;
put 'Y2Vzc3BvaW50LmR1YWxzdGFjay5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLWFjY2Vzc3BvaW50LmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1vYmplY3QtbGFtYmRhLmNuLW5vcnRo'@;
put 'd2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy13ZWJzaXRlLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5kdWFsc3RhY2suYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMz'@;
put 'LXdlYnNpdGUuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMt'@;
put 'd2Vic2l0ZS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3Bv'@;
put 'aW50LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3Bv'@;
put 'aW50LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1ub3J0aGVhc3QtMS5hbWF6'@;
put 'b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFs'@;
put 'c3RhY2suYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNv'@;
put 'bSIsInMzLW9iamVjdC1sYW1iZGEuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFw'@;
put 'LW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1v'@;
put 'YmplY3QtbGFtYmRhLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1h'@;
put 'em9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGgtMS5hbWF6'@;
put 'b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFw'@;
put 'LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aC0yLmFt'@;
put 'YXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIs'@;
put 'InMzLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3Mu'@;
put 'Y29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1z'@;
put 'b3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMz'@;
put 'LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0'@;
put 'LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3Rh'@;
put 'Y2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC00LmFtYXpv'@;
put 'bmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNv'@;
put 'dXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29t'@;
put 'IiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0'@;
put 'LTUuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25h'@;
put 'd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuY2EtY2VudHJhbC0x'@;
put 'LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmNhLWNl'@;
put 'bnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5j'@;
put 'b20iLCJzMy1maXBzLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIs'@;
put 'InMzLWFjY2Vzc3BvaW50LWZpcHMuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5k'@;
put 'dWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMS5hbWF6b25h'@;
put 'd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1jZW50cmFsLTIu'@;
put 'YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2lu'@;
put 'dC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vz'@;
put 'c3BvaW50LmR1YWxzdGFjay5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdl'@;
put 'YnNpdGUuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3'@;
put 'cy5jb20iLCJzMy5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMu'@;
put 'ZHVhbHN0YWNrLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20i'@;
put 'LCJzMy1hY2Nlc3Nwb2ludC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwi'@;
put 'czMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LXdlc3QtMS5hbWF6b25hd3MuY29t'@;
put 'IiwiczMtZGVwcmVjYXRlZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMt'@;
put 'YWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13'@;
put 'ZWJzaXRlLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtd2VzdC0zLmFtYXpvbmF3cy5j'@;
put 'b20iLCJzMy5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3Rh'@;
put 'Y2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29t'@;
put 'IiwiczMtYWNjZXNzcG9pbnQuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9u'@;
put 'YXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5tZS1j'@;
put 'ZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50'@;
put 'LmR1YWxzdGFjay5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUu'@;
put 'bWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuYW1hem9uYXdzLmNvbSIsInMzLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJz'@;
put 'My1hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMz'@;
put 'LWV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtZXh0ZXJuYWwtMS5hbWF6'@;
put 'b25hd3MuY29tIiwiczMtZmlwcy11cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIm1yYXAuYWNjZXNzcG9pbnQuczMtZ2xvYmFsLmFtYXpvbmF3cy5jb20iLCJzMy1tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1z'@;
put 'YS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtdXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy13ZXN0LTIuYW1h'@;
put 'em9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtZXUtd2VzdC0xLmFtYXpv'@;
put 'bmF3cy5jb20iLCJzMy13ZWJzaXRlLXNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMz'@;
put 'LXdlYnNpdGUtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5zYS1lYXN0LTEuYW1hem9uYXdz'@;
put 'LmNvbSIsInMzLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxz'@;
put 'dGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtZWFzdC0x'@;
put 'LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLWVhc3QtMS5h'@;
put 'bWF6b25hd3MuY29tIiwiczMtZGVwcmVjYXRlZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTEuYW1hem9uYXdzLmNv'@;
put 'bSIsInMzLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3Rh'@;
put 'Y2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBz'@;
put 'LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZGVwcmVjYXRlZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1lYXN0LTIu'@;
put 'YW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25h'@;
put 'd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1nb3YtZWFz'@;
put 'dC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZ292'@;
put 'LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWdvdi13'@;
put 'ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy1nb3Yt'@;
put 'd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQu'@;
put 'ZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLnVzLXdlc3Qt'@;
put 'MS5hbWF6b25hd3MuY29tIiwiczMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29t'@;
put 'IiwiczMtb2JqZWN0LWxhbWJkYS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3'@;
put 'cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy51cy13ZXN0'@;
put 'LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLXdlc3QtMi5h'@;
put 'bWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJsYWJlbGluZy5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtbm9ydGhlYXN0LTIuc2FnZW1h'@;
put 'a2VyLmF3cyIsImxhYmVsaW5nLmFwLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLXNvdXRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJs'@;
put 'YWJlbGluZy5ldS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVzLWVhc3QtMi5zYWdl'@;
put 'bWFrZXIuYXdzIiwibGFiZWxpbmcudXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hZi1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9v'@;
put 'ay5hcC1ub3J0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9ydGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFz'@;
put 'dC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC00LnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jYS1jZW50cmFsLTEuc2Fn'@;
put 'ZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMuY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jYS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMuY2Etd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3'@;
put 'cyIsIm5vdGVib29rLmV1LWNlbnRyYWwtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtbm9ydGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtc291dGgtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtd2Vz'@;
put 'dC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMy5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suaWwtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5tZS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIs'@;
put 'Im5vdGVib29rLm1lLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnNhLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZWFzdC0y'@;
put 'LnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1nb3YtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy1nb3Ytd2VzdC0xLnNh'@;
put 'Z2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLnVzLWdvdi13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdz'@;
put 'Iiwibm90ZWJvb2stZmlwcy51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmNuLW5vcnRoLTEuc2FnZW1ha2VyLmNvbS5jbiIsIm5vdGVib29rLmNuLW5vcnRod2VzdC0xLnNhZ2VtYWtlci5jb20uY24iLCJzdHVkaW8uYWYtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlv'@;
put 'LmFwLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLW5vcnRoZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMy5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoLTEuc2FnZW1h'@;
put 'a2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGhlYXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5jYS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRp'@;
put 'by5ldS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1ub3J0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIs'@;
put 'InN0dWRpby5ldS13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS13ZXN0LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5pbC1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5tZS1jZW50cmFsLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5tZS1zb3V0aC0xLnNhZ2VtYWtl'@;
put 'ci5hd3MiLCJzdHVkaW8uc2EtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtZ292LWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLWZpcHMudXMtZ292LWVh'@;
put 'c3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWdvdi13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby1maXBzLnVzLWdvdi13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIs'@;
put 'InN0dWRpby5jbi1ub3J0aC0xLnNhZ2VtYWtlci5jb20uY24iLCJzdHVkaW8uY24tbm9ydGh3ZXN0LTEuc2FnZW1ha2VyLmNvbS5jbiIsIiouZXhwZXJpbWVudHMuc2FnZW1ha2VyLmF3cyIsImFuYWx5dGljcy1nYXRld2F5LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRp'@;
put 'Y3MtZ2F0ZXdheS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoZWFz'@;
put 'dC0yLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3Mt'@;
put 'Z2F0ZXdheS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiYW1wbGlmeWFwcC5jb20iLCIqLmF3c2FwcHJ1bm5lci5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNv'@;
put 'bSIsInZmcy5jbG91ZDkuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLWVhc3QtMS5h'@;
put 'bWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vi'@;
put 'dmlldy1hc3NldHMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5j'@;
put 'bG91ZDkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1ub3J0'@;
put 'aGVhc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3'@;
put 'ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRz'@;
put 'LmF3cy1jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5j'@;
put 'YS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LWNlbnRyYWwtMS5hbWF6b25h'@;
put 'd3MuY29tIiwidmZzLmNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5l'@;
put 'dS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIs'@;
put 'IndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5ldS13'@;
put 'ZXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmll'@;
put 'dy1hc3NldHMuYXdzLWNsb3VkOS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmlsLWNlbnRy'@;
put 'YWwtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0'@;
put 'cy5jbG91ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3'@;
put 'cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1j'@;
put 'bG91ZDkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy13ZXN0LTEuYW1hem9uYXdzLmNv'@;
put 'bSIsInZmcy5jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy13ZXN0LTIuYW1h'@;
put 'em9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImF3c2FwcHMuY29tIiwiY24tbm9ydGgtMS5lYi5hbWF6b25hd3MuY29tLmNuIiwiY24tbm9ydGh3ZXN0LTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImVsYXN0aWNiZWFuc3RhbGsuY29t'@;
put 'IiwiYWYtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMy5lbGFz'@;
put 'dGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20i'@;
put 'LCJjYS1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS1ub3J0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtc291dGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMS5lbGFzdGljYmVhbnN0'@;
put 'YWxrLmNvbSIsImV1LXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXdlc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImlsLWNlbnRyYWwtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsIm1lLXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJzYS1lYXN0LTEuZWxhc3RpY2Jl'@;
put 'YW5zdGFsay5jb20iLCJ1cy1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1lYXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy1nb3YtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZ292LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLXdlc3QtMS5l'@;
put 'bGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsIiouZWxiLmFtYXpvbmF3cy5jb20uY24iLCIqLmVsYi5hbWF6b25hd3MuY29tIiwiYXdzZ2xvYmFsYWNjZWxlcmF0b3IuY29tIiwiKi5wcml2YXRlLnJlcG9zdC5hd3MiLCJlZXJvLm9ubGluZSIs'@;
put 'ImVlcm8tc3RhZ2Uub25saW5lIiwiYXBpZ2VlLmlvIiwicGFuZWwuZGV2Iiwic2lpaXRlcy5jb20iLCJhcHBzcGFjZWhvc3RlZC5jb20iLCJhcHBzcGFjZXVzZXJjb250ZW50LmNvbSIsImFwcHVkby5uZXQiLCJvbi1hcHRpYmxlLmNvbSIsImY1LnNpIiwiYXJ2YW5lZGdlLmlyIiwidXNlci5h'@;
put 'c2VpbmV0Lm5lLmpwIiwiZ3YudmMiLCJkLmd2LnZjIiwidXNlci5wYXJ0eS5ldXMiLCJwaW1pZW50YS5vcmciLCJwb2l2cm9uLm9yZyIsInBvdGFnZXIub3JnIiwic3dlZXRwZXBwZXIub3JnIiwibXlhc3VzdG9yLmNvbSIsImNkbi5wcm9kLmF0bGFzc2lhbi1kZXYubmV0IiwidHJhbnNsYXRl'@;
put 'ZC5wYWdlIiwibXlmcml0ei5saW5rIiwibXlmcml0ei5uZXQiLCJvbmF2c3RhY2submV0IiwiKi5hd2Rldi5jYSIsIiouYWR2aXNvci53cyIsImVjb21tZXJjZS1zaG9wLnBsIiwiYi1kYXRhLmlvIiwiYmFsZW5hLWRldmljZXMuY29tIiwiYmFzZS5lYyIsIm9mZmljaWFsLmVjIiwiYnV5c2hv'@;
put 'cC5qcCIsImZhc2hpb25zdG9yZS5qcCIsImhhbmRjcmFmdGVkLmpwIiwia2F3YWlpc2hvcC5qcCIsInN1cGVyc2FsZS5qcCIsInRoZXNob3AuanAiLCJzaG9wc2VsZWN0Lm5ldCIsImJhc2Uuc2hvcCIsImJlYWdsZWJvYXJkLmlvIiwiKi5iZWdldC5hcHAiLCJwYWdlcy5nYXkiLCJibnIubGEi'@;
put 'LCJiaXRidWNrZXQuaW8iLCJibGFja2JhdWRjZG4ubmV0Iiwib2YuamUiLCJibHVlYml0ZS5pbyIsImJvb21sYS5uZXQiLCJib3V0aXIuY29tIiwiYm94ZnVzZS5pbyIsInNxdWFyZTcuY2giLCJicGxhY2VkLmNvbSIsImJwbGFjZWQuZGUiLCJzcXVhcmU3LmRlIiwiYnBsYWNlZC5uZXQiLCJz'@;
put 'cXVhcmU3Lm5ldCIsIioucy5icmF2ZS5pbyIsInNob3AuYnJlbmRseS5ociIsInNob3AuYnJlbmRseS5ycyIsImJyb3dzZXJzYWZldHltYXJrLmlvIiwicmFkaW8uYW0iLCJyYWRpby5mbSIsInVrMC5iaWd2LmlvIiwiZGguYnl0ZW1hcmsuY28udWsiLCJ2bS5ieXRlbWFyay5jby51ayIsImNh'@;
put 'ZmpzLmNvbSIsImNhbnZhLWFwcHMuY24iLCIqLm15LmNhbnZhc2l0ZS5jbiIsImNhbnZhLWFwcHMuY29tIiwiKi5teS5jYW52YS5zaXRlIiwiZHJyLmFjIiwidXd1LmFpIiwiY2FycmQuY28iLCJjcmQuY28iLCJqdS5tcCIsImFwaS5nb3YudWsiLCJjZG43Ny1zdG9yYWdlLmNvbSIsInJzYy5j'@;
put 'b250ZW50cHJveHk5LmN6Iiwici5jZG43Ny5uZXQiLCJjZG43Ny1zc2wubmV0IiwiYy5jZG43Ny5vcmciLCJyc2MuY2RuNzcub3JnIiwic3NsLm9yaWdpbi5jZG43Ny1zZWN1cmUub3JnIiwiemEuYnoiLCJici5jb20iLCJjbi5jb20iLCJkZS5jb20iLCJldS5jb20iLCJqcG4uY29tIiwibWV4'@;
put 'LmNvbSIsInJ1LmNvbSIsInNhLmNvbSIsInVrLmNvbSIsInVzLmNvbSIsInphLmNvbSIsImNvbS5kZSIsImdiLm5ldCIsImh1Lm5ldCIsImpwLm5ldCIsInNlLm5ldCIsInVrLm5ldCIsImFlLm9yZyIsImNvbS5zZSIsImN4LnVhIiwiZGlzY291cnNlLmdyb3VwIiwiZGlzY291cnNlLnRlYW0i'@;
put 'LCJjbGVyay5hcHAiLCJjbGVya3N0YWdlLmFwcCIsIioubGNsLmRldiIsIioubGNsc3RhZ2UuZGV2IiwiKi5zdGcuZGV2IiwiKi5zdGdzdGFnZS5kZXYiLCJjbGV2ZXJhcHBzLmNjIiwiKi5zZXJ2aWNlcy5jbGV2ZXItY2xvdWQuY29tIiwiY2xldmVyYXBwcy5pbyIsImNsZXZlcmFwcHMudGVj'@;
put 'aCIsImNsaWNrcmlzaW5nLm5ldCIsImNsb3VkbnMuYXNpYSIsImNsb3VkbnMuYmUiLCJjbG91ZC1pcC5iaXoiLCJjbG91ZG5zLmJpeiIsImNsb3VkbnMuY2MiLCJjbG91ZG5zLmNoIiwiY2xvdWRucy5jbCIsImNsb3VkbnMuY2x1YiIsImRuc2Fici5jb20iLCJpcC1kZG5zLmNvbSIsImNsb3Vk'@;
put 'bnMuY3giLCJjbG91ZG5zLmV1IiwiY2xvdWRucy5pbiIsImNsb3VkbnMuaW5mbyIsImRkbnMtaXAubmV0IiwiZG5zLWNsb3VkLm5ldCIsImRucy1keW5hbWljLm5ldCIsImNsb3VkbnMubnoiLCJjbG91ZG5zLm9yZyIsImlwLWR5bmFtaWMub3JnIiwiY2xvdWRucy5waCIsImNsb3VkbnMucHJv'@;
put 'IiwiY2xvdWRucy5wdyIsImNsb3VkbnMudXMiLCJjNjYubWUiLCJjbG91ZDY2LndzIiwiY2xvdWQ2Ni56b25lIiwiamRldmNsb3VkLmNvbSIsIndwZGV2Y2xvdWQuY29tIiwiY2xvdWRhY2Nlc3MuaG9zdCIsImZyZWVzaXRlLmhvc3QiLCJjbG91ZGFjY2Vzcy5uZXQiLCIqLmNsb3VkZXJhLnNp'@;
put 'dGUiLCJjZi1pcGZzLmNvbSIsImNsb3VkZmxhcmUtaXBmcy5jb20iLCJ0cnljbG91ZGZsYXJlLmNvbSIsInBhZ2VzLmRldiIsInIyLmRldiIsIndvcmtlcnMuZGV2IiwiY2xvdWRmbGFyZS5uZXQiLCJjZG4uY2xvdWRmbGFyZS5uZXQiLCJjZG4uY2xvdWRmbGFyZWFueWNhc3QubmV0IiwiY2Ru'@;
put 'LmNsb3VkZmxhcmVjbi5uZXQiLCJjZG4uY2xvdWRmbGFyZWdsb2JhbC5uZXQiLCJjdXN0LmNsb3Vkc2NhbGUuY2giLCJvYmplY3RzLmxwZy5jbG91ZHNjYWxlLmNoIiwib2JqZWN0cy5ybWEuY2xvdWRzY2FsZS5jaCIsInduZXh0LmFwcCIsImNucHkuZ2RuIiwiKi5vdGFwLmNvIiwiY28uY2Ei'@;
put 'LCJjby5jb20iLCJjb2RlYmVyZy5wYWdlIiwiY3NiLmFwcCIsInByZXZpZXcuY3NiLmFwcCIsImNvLm5sIiwiY28ubm8iLCJ3ZWJob3N0aW5nLmJlIiwiaG9zdGluZy1jbHVzdGVyLm5sIiwiY3RmY2xvdWQubmV0IiwiY29udmV4LnNpdGUiLCJhYy5ydSIsImVkdS5ydSIsImdvdi5ydSIsImlu'@;
put 'dC5ydSIsIm1pbC5ydSIsInRlc3QucnUiLCJkeW4uY29zaWRucy5kZSIsImRuc3VwZGF0ZXIuZGUiLCJkeW5hbWlzY2hlcy1kbnMuZGUiLCJpbnRlcm5ldC1kbnMuZGUiLCJsLW8tZy1pLW4uZGUiLCJkeW5hbWljLWRucy5pbmZvIiwiZmVzdGUtaXAubmV0Iiwia254LXNlcnZlci5uZXQiLCJz'@;
put 'dGF0aWMtYWNjZXNzLm5ldCIsImNyYWZ0Lm1lIiwicmVhbG0uY3oiLCJvbi5jcmlzcC5lbWFpbCIsIiouY3J5cHRvbm9taWMubmV0IiwiY3Vydi5kZXYiLCJjZm9sa3MucGwiLCJjeW9uLmxpbmsiLCJjeW9uLnNpdGUiLCJwbGF0Zm9ybTAuYXBwIiwiZm53ay5zaXRlIiwiZm9saW9uZXR3b3Jr'@;
put 'LnNpdGUiLCJiaXouZGsiLCJjby5kayIsImZpcm0uZGsiLCJyZWcuZGsiLCJzdG9yZS5kayIsImR5bmRucy5kYXBwbm9kZS5pbyIsImJ1aWx0d2l0aGRhcmsuY29tIiwiZGFya2xhbmcuaW8iLCJkZW1vLmRhdGFkZXRlY3QuY29tIiwiaW5zdGFuY2UuZGF0YWRldGVjdC5jb20iLCJlZGdlc3Rh'@;
put 'Y2subWUiLCJkYXR0b2xvY2FsLmNvbSIsImRhdHRvcmVsYXkuY29tIiwiZGF0dG93ZWIuY29tIiwibXlkYXR0by5jb20iLCJkYXR0b2xvY2FsLm5ldCIsIm15ZGF0dG8ubmV0IiwiZGRuc3MuZGUiLCJkeW4uZGRuc3MuZGUiLCJkeW5kbnMuZGRuc3MuZGUiLCJkeW4taXAyNC5kZSIsImR5bmRu'@;
put 'czEuZGUiLCJob21lLXdlYnNlcnZlci5kZSIsImR5bi5ob21lLXdlYnNlcnZlci5kZSIsIm15aG9tZS1zZXJ2ZXIuZGUiLCJkZG5zcy5vcmciLCJkZWJpYW4ubmV0IiwiZGVmaW5pbWEuaW8iLCJkZWZpbmltYS5uZXQiLCJkZW5vLmRldiIsImRlbm8tc3RhZ2luZy5kZXYiLCJkZWR5bi5pbyIs'@;
put 'ImRldGEuYXBwIiwiZGV0YS5kZXYiLCJkZmlybWEucGwiLCJka29udG8ucGwiLCJ5b3UyLnBsIiwib25kaWdpdGFsb2NlYW4uYXBwIiwiKi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tIiwidXMua2ciLCJyc3MubXkuaWQiLCJkaWhlci5zb2x1dGlvbnMiLCJkaXNjb3Jkc2F5cy5jb20iLCJkaXNj'@;
put 'b3Jkc2V6LmNvbSIsImpvemkuYml6IiwiZG5zaG9tZS5kZSIsIm9ubGluZS50aCIsInNob3AudGgiLCJkcmF5ZGRucy5jb20iLCJzaG9wYXJlbmEucGwiLCJkcmVhbWhvc3RlcnMuY29tIiwiZHVydW1pcy5jb20iLCJteWRyb2JvLmNvbSIsImRydWQuaW8iLCJkcnVkLnVzIiwiZHVja2Rucy5v'@;
put 'cmciLCJkeS5maSIsInR1bmsub3JnIiwiZHluZG5zLmJpeiIsImZvci1iZXR0ZXIuYml6IiwiZm9yLW1vcmUuYml6IiwiZm9yLXNvbWUuYml6IiwiZm9yLXRoZS5iaXoiLCJzZWxmaXAuYml6Iiwid2ViaG9wLmJpeiIsImZ0cGFjY2Vzcy5jYyIsImdhbWUtc2VydmVyLmNjIiwibXlwaG90b3Mu'@;
put 'Y2MiLCJzY3JhcHBpbmcuY2MiLCJibG9nZG5zLmNvbSIsImNlY2hpcmUuY29tIiwiZG5zYWxpYXMuY29tIiwiZG5zZG9qby5jb20iLCJkb2VzbnRleGlzdC5jb20iLCJkb250ZXhpc3QuY29tIiwiZG9vbWRucy5jb20iLCJkeW4tby1zYXVyLmNvbSIsImR5bmFsaWFzLmNvbSIsImR5bmRucy1h'@;
put 'dC1ob21lLmNvbSIsImR5bmRucy1hdC13b3JrLmNvbSIsImR5bmRucy1ibG9nLmNvbSIsImR5bmRucy1mcmVlLmNvbSIsImR5bmRucy1ob21lLmNvbSIsImR5bmRucy1pcC5jb20iLCJkeW5kbnMtbWFpbC5jb20iLCJkeW5kbnMtb2ZmaWNlLmNvbSIsImR5bmRucy1waWNzLmNvbSIsImR5bmRu'@;
put 'cy1yZW1vdGUuY29tIiwiZHluZG5zLXNlcnZlci5jb20iLCJkeW5kbnMtd2ViLmNvbSIsImR5bmRucy13aWtpLmNvbSIsImR5bmRucy13b3JrLmNvbSIsImVzdC1hLWxhLW1haXNvbi5jb20iLCJlc3QtYS1sYS1tYXNpb24uY29tIiwiZXN0LWxlLXBhdHJvbi5jb20iLCJlc3QtbW9uLWJsb2d1'@;
put 'ZXVyLmNvbSIsImZyb20tYWsuY29tIiwiZnJvbS1hbC5jb20iLCJmcm9tLWFyLmNvbSIsImZyb20tY2EuY29tIiwiZnJvbS1jdC5jb20iLCJmcm9tLWRjLmNvbSIsImZyb20tZGUuY29tIiwiZnJvbS1mbC5jb20iLCJmcm9tLWdhLmNvbSIsImZyb20taGkuY29tIiwiZnJvbS1pYS5jb20iLCJm'@;
put 'cm9tLWlkLmNvbSIsImZyb20taWwuY29tIiwiZnJvbS1pbi5jb20iLCJmcm9tLWtzLmNvbSIsImZyb20ta3kuY29tIiwiZnJvbS1tYS5jb20iLCJmcm9tLW1kLmNvbSIsImZyb20tbWkuY29tIiwiZnJvbS1tbi5jb20iLCJmcm9tLW1vLmNvbSIsImZyb20tbXMuY29tIiwiZnJvbS1tdC5jb20i'@;
put 'LCJmcm9tLW5jLmNvbSIsImZyb20tbmQuY29tIiwiZnJvbS1uZS5jb20iLCJmcm9tLW5oLmNvbSIsImZyb20tbmouY29tIiwiZnJvbS1ubS5jb20iLCJmcm9tLW52LmNvbSIsImZyb20tb2guY29tIiwiZnJvbS1vay5jb20iLCJmcm9tLW9yLmNvbSIsImZyb20tcGEuY29tIiwiZnJvbS1wci5j'@;
put 'b20iLCJmcm9tLXJpLmNvbSIsImZyb20tc2MuY29tIiwiZnJvbS1zZC5jb20iLCJmcm9tLXRuLmNvbSIsImZyb20tdHguY29tIiwiZnJvbS11dC5jb20iLCJmcm9tLXZhLmNvbSIsImZyb20tdnQuY29tIiwiZnJvbS13YS5jb20iLCJmcm9tLXdpLmNvbSIsImZyb20td3YuY29tIiwiZnJvbS13'@;
put 'eS5jb20iLCJnZXRteWlwLmNvbSIsImdvdGRucy5jb20iLCJob2JieS1zaXRlLmNvbSIsImhvbWVsaW51eC5jb20iLCJob21ldW5peC5jb20iLCJpYW1hbGxhbWEuY29tIiwiaXMtYS1hbmFyY2hpc3QuY29tIiwiaXMtYS1ibG9nZ2VyLmNvbSIsImlzLWEtYm9va2tlZXBlci5jb20iLCJpcy1h'@;
put 'LWJ1bGxzLWZhbi5jb20iLCJpcy1hLWNhdGVyZXIuY29tIiwiaXMtYS1jaGVmLmNvbSIsImlzLWEtY29uc2VydmF0aXZlLmNvbSIsImlzLWEtY3BhLmNvbSIsImlzLWEtY3ViaWNsZS1zbGF2ZS5jb20iLCJpcy1hLWRlbW9jcmF0LmNvbSIsImlzLWEtZGVzaWduZXIuY29tIiwiaXMtYS1kb2N0'@;
put 'b3IuY29tIiwiaXMtYS1maW5hbmNpYWxhZHZpc29yLmNvbSIsImlzLWEtZ2Vlay5jb20iLCJpcy1hLWdyZWVuLmNvbSIsImlzLWEtZ3VydS5jb20iLCJpcy1hLWhhcmQtd29ya2VyLmNvbSIsImlzLWEtaHVudGVyLmNvbSIsImlzLWEtbGFuZHNjYXBlci5jb20iLCJpcy1hLWxhd3llci5jb20i'@;
put 'LCJpcy1hLWxpYmVyYWwuY29tIiwiaXMtYS1saWJlcnRhcmlhbi5jb20iLCJpcy1hLWxsYW1hLmNvbSIsImlzLWEtbXVzaWNpYW4uY29tIiwiaXMtYS1uYXNjYXJmYW4uY29tIiwiaXMtYS1udXJzZS5jb20iLCJpcy1hLXBhaW50ZXIuY29tIiwiaXMtYS1wZXJzb25hbHRyYWluZXIuY29tIiwi'@;
put 'aXMtYS1waG90b2dyYXBoZXIuY29tIiwiaXMtYS1wbGF5ZXIuY29tIiwiaXMtYS1yZXB1YmxpY2FuLmNvbSIsImlzLWEtcm9ja3N0YXIuY29tIiwiaXMtYS1zb2NpYWxpc3QuY29tIiwiaXMtYS1zdHVkZW50LmNvbSIsImlzLWEtdGVhY2hlci5jb20iLCJpcy1hLXRlY2hpZS5jb20iLCJpcy1h'@;
put 'LXRoZXJhcGlzdC5jb20iLCJpcy1hbi1hY2NvdW50YW50LmNvbSIsImlzLWFuLWFjdG9yLmNvbSIsImlzLWFuLWFjdHJlc3MuY29tIiwiaXMtYW4tYW5hcmNoaXN0LmNvbSIsImlzLWFuLWFydGlzdC5jb20iLCJpcy1hbi1lbmdpbmVlci5jb20iLCJpcy1hbi1lbnRlcnRhaW5lci5jb20iLCJp'@;
put 'cy1jZXJ0aWZpZWQuY29tIiwiaXMtZ29uZS5jb20iLCJpcy1pbnRvLWFuaW1lLmNvbSIsImlzLWludG8tY2Fycy5jb20iLCJpcy1pbnRvLWNhcnRvb25zLmNvbSIsImlzLWludG8tZ2FtZXMuY29tIiwiaXMtbGVldC5jb20iLCJpcy1ub3QtY2VydGlmaWVkLmNvbSIsImlzLXNsaWNrLmNvbSIs'@;
put 'ImlzLXViZXJsZWV0LmNvbSIsImlzLXdpdGgtdGhlYmFuZC5jb20iLCJpc2EtZ2Vlay5jb20iLCJpc2EtaG9ja2V5bnV0LmNvbSIsImlzc21hcnRlcnRoYW55b3UuY29tIiwibGlrZXMtcGllLmNvbSIsImxpa2VzY2FuZHkuY29tIiwibmVhdC11cmwuY29tIiwic2F2ZXMtdGhlLXdoYWxlcy5j'@;
put 'b20iLCJzZWxmaXAuY29tIiwic2VsbHMtZm9yLWxlc3MuY29tIiwic2VsbHMtZm9yLXUuY29tIiwic2VydmViYnMuY29tIiwic2ltcGxlLXVybC5jb20iLCJzcGFjZS10by1yZW50LmNvbSIsInRlYWNoZXMteW9nYS5jb20iLCJ3cml0ZXN0aGlzYmxvZy5jb20iLCJhdGguY3giLCJmdWV0dGVy'@;
put 'dGRhc25ldHouZGUiLCJpc3RlaW5nZWVrLmRlIiwiaXN0bWVpbi5kZSIsImxlYnRpbW5ldHouZGUiLCJsZWl0dW5nc2VuLmRlIiwidHJhZXVtdGdlcmFkZS5kZSIsImJhcnJlbC1vZi1rbm93bGVkZ2UuaW5mbyIsImJhcnJlbGwtb2Yta25vd2xlZGdlLmluZm8iLCJkeW5kbnMuaW5mbyIsImZv'@;
put 'ci1vdXIuaW5mbyIsImdyb2tzLXRoZS5pbmZvIiwiZ3Jva3MtdGhpcy5pbmZvIiwiaGVyZS1mb3ItbW9yZS5pbmZvIiwia25vd3NpdGFsbC5pbmZvIiwic2VsZmlwLmluZm8iLCJ3ZWJob3AuaW5mbyIsImZvcmdvdC5oZXIubmFtZSIsImZvcmdvdC5oaXMubmFtZSIsImF0LWJhbmQtY2FtcC5u'@;
put 'ZXQiLCJibG9nZG5zLm5ldCIsImJyb2tlLWl0Lm5ldCIsImJ1eXNob3VzZXMubmV0IiwiZG5zYWxpYXMubmV0IiwiZG5zZG9qby5uZXQiLCJkb2VzLWl0Lm5ldCIsImRvbnRleGlzdC5uZXQiLCJkeW5hbGlhcy5uZXQiLCJkeW5hdGhvbWUubmV0IiwiZW5kb2ZpbnRlcm5ldC5uZXQiLCJmcm9t'@;
put 'LWF6Lm5ldCIsImZyb20tY28ubmV0IiwiZnJvbS1sYS5uZXQiLCJmcm9tLW55Lm5ldCIsImdldHMtaXQubmV0IiwiaGFtLXJhZGlvLW9wLm5ldCIsImhvbWVmdHAubmV0IiwiaG9tZWlwLm5ldCIsImhvbWVsaW51eC5uZXQiLCJob21ldW5peC5uZXQiLCJpbi10aGUtYmFuZC5uZXQiLCJpcy1h'@;
put 'LWNoZWYubmV0IiwiaXMtYS1nZWVrLm5ldCIsImlzYS1nZWVrLm5ldCIsImtpY2tzLWFzcy5uZXQiLCJvZmZpY2Utb24tdGhlLm5ldCIsInBvZHpvbmUubmV0Iiwic2NyYXBwZXItc2l0ZS5uZXQiLCJzZWxmaXAubmV0Iiwic2VsbHMtaXQubmV0Iiwic2VydmViYnMubmV0Iiwic2VydmVmdHAu'@;
put 'bmV0IiwidGhydWhlcmUubmV0Iiwid2ViaG9wLm5ldCIsIm1lcnNlaW5lLm51IiwibWluZS5udSIsInNoYWNrbmV0Lm51IiwiYmxvZ2Rucy5vcmciLCJibG9nc2l0ZS5vcmciLCJib2xkbHlnb2luZ25vd2hlcmUub3JnIiwiZG5zYWxpYXMub3JnIiwiZG5zZG9qby5vcmciLCJkb2VzbnRleGlz'@;
put 'dC5vcmciLCJkb250ZXhpc3Qub3JnIiwiZG9vbWRucy5vcmciLCJkdnJkbnMub3JnIiwiZHluYWxpYXMub3JnIiwiZHluZG5zLm9yZyIsImdvLmR5bmRucy5vcmciLCJob21lLmR5bmRucy5vcmciLCJlbmRvZmludGVybmV0Lm9yZyIsImVuZG9mdGhlaW50ZXJuZXQub3JnIiwiZnJvbS1tZS5v'@;
put 'cmciLCJnYW1lLWhvc3Qub3JnIiwiZ290ZG5zLm9yZyIsImhvYmJ5LXNpdGUub3JnIiwiaG9tZWRucy5vcmciLCJob21lZnRwLm9yZyIsImhvbWVsaW51eC5vcmciLCJob21ldW5peC5vcmciLCJpcy1hLWJydWluc2Zhbi5vcmciLCJpcy1hLWNhbmRpZGF0ZS5vcmciLCJpcy1hLWNlbHRpY3Nm'@;
put 'YW4ub3JnIiwiaXMtYS1jaGVmLm9yZyIsImlzLWEtZ2Vlay5vcmciLCJpcy1hLWtuaWdodC5vcmciLCJpcy1hLWxpbnV4LXVzZXIub3JnIiwiaXMtYS1wYXRzZmFuLm9yZyIsImlzLWEtc294ZmFuLm9yZyIsImlzLWZvdW5kLm9yZyIsImlzLWxvc3Qub3JnIiwiaXMtc2F2ZWQub3JnIiwiaXMt'@;
put 'dmVyeS1iYWQub3JnIiwiaXMtdmVyeS1ldmlsLm9yZyIsImlzLXZlcnktZ29vZC5vcmciLCJpcy12ZXJ5LW5pY2Uub3JnIiwiaXMtdmVyeS1zd2VldC5vcmciLCJpc2EtZ2Vlay5vcmciLCJraWNrcy1hc3Mub3JnIiwibWlzY29uZnVzZWQub3JnIiwicG9kem9uZS5vcmciLCJyZWFkbXlibG9n'@;
put 'Lm9yZyIsInNlbGZpcC5vcmciLCJzZWxsc3lvdXJob21lLm9yZyIsInNlcnZlYmJzLm9yZyIsInNlcnZlZnRwLm9yZyIsInNlcnZlZ2FtZS5vcmciLCJzdHVmZi00LXNhbGUub3JnIiwid2ViaG9wLm9yZyIsImJldHRlci10aGFuLnR2IiwiZHluZG5zLnR2Iiwib24tdGhlLXdlYi50diIsIndv'@;
put 'cnNlLXRoYW4udHYiLCJpcy1ieS51cyIsImxhbmQtNC1zYWxlLnVzIiwic3R1ZmYtNC1zYWxlLnVzIiwiZHluZG5zLndzIiwibXlwZXRzLndzIiwiZGRuc2ZyZWUuY29tIiwiZGRuc2dlZWsuY29tIiwiZ2lpemUuY29tIiwiZ2xlZXplLmNvbSIsImtvem93LmNvbSIsImxvc2V5b3VyaXAuY29t'@;
put 'Iiwib29ndXkuY29tIiwidGhld29ya3BjLmNvbSIsImNhc2FjYW0ubmV0IiwiZHludS5uZXQiLCJhY2Nlc3NjYW0ub3JnIiwiY2FtZHZyLm9yZyIsImZyZWVkZG5zLm9yZyIsIm15d2lyZS5vcmciLCJ3ZWJyZWRpcmVjdC5vcmciLCJteWRkbnMucm9ja3MiLCJkeW52Ni5uZXQiLCJlNC5jeiIs'@;
put 'ImVhc3lwYW5lbC5hcHAiLCJlYXN5cGFuZWwuaG9zdCIsIiouZXdwLmxpdmUiLCJ0d21haWwuY2MiLCJ0d21haWwubmV0IiwidHdtYWlsLm9yZyIsIm15bWFpbGVyLmNvbS50dyIsInVybC50dyIsImF0LmVtZi5jYW1wIiwicnQuaHQiLCJlbGVtZW50b3IuY2xvdWQiLCJlbGVtZW50b3IuY29v'@;
put 'bCIsImVuLXJvb3QuZnIiLCJteXR1bGVhcC5jb20iLCJ0dWxlYXAtcGFydG5lcnMuY29tIiwiZW5jci5hcHAiLCJlbmNvcmVhcGkuY29tIiwiZXUuZW5jb3dheS5jbG91ZCIsImV1Lm9yZyIsImFsLmV1Lm9yZyIsImFzc28uZXUub3JnIiwiYXQuZXUub3JnIiwiYXUuZXUub3JnIiwiYmUuZXUu'@;
put 'b3JnIiwiYmcuZXUub3JnIiwiY2EuZXUub3JnIiwiY2QuZXUub3JnIiwiY2guZXUub3JnIiwiY24uZXUub3JnIiwiY3kuZXUub3JnIiwiY3ouZXUub3JnIiwiZGUuZXUub3JnIiwiZGsuZXUub3JnIiwiZWR1LmV1Lm9yZyIsImVlLmV1Lm9yZyIsImVzLmV1Lm9yZyIsImZpLmV1Lm9yZyIsImZy'@;
put 'LmV1Lm9yZyIsImdyLmV1Lm9yZyIsImhyLmV1Lm9yZyIsImh1LmV1Lm9yZyIsImllLmV1Lm9yZyIsImlsLmV1Lm9yZyIsImluLmV1Lm9yZyIsImludC5ldS5vcmciLCJpcy5ldS5vcmciLCJpdC5ldS5vcmciLCJqcC5ldS5vcmciLCJrci5ldS5vcmciLCJsdC5ldS5vcmciLCJsdS5ldS5vcmci'@;
put 'LCJsdi5ldS5vcmciLCJtZS5ldS5vcmciLCJtay5ldS5vcmciLCJtdC5ldS5vcmciLCJteS5ldS5vcmciLCJuZXQuZXUub3JnIiwibmcuZXUub3JnIiwibmwuZXUub3JnIiwibm8uZXUub3JnIiwibnouZXUub3JnIiwicGwuZXUub3JnIiwicHQuZXUub3JnIiwicm8uZXUub3JnIiwicnUuZXUu'@;
put 'b3JnIiwic2UuZXUub3JnIiwic2kuZXUub3JnIiwic2suZXUub3JnIiwidHIuZXUub3JnIiwidWsuZXUub3JnIiwidXMuZXUub3JnIiwiZXVyb2Rpci5ydSIsImV1LTEuZXZlbm5vZGUuY29tIiwiZXUtMi5ldmVubm9kZS5jb20iLCJldS0zLmV2ZW5ub2RlLmNvbSIsImV1LTQuZXZlbm5vZGUu'@;
put 'Y29tIiwidXMtMS5ldmVubm9kZS5jb20iLCJ1cy0yLmV2ZW5ub2RlLmNvbSIsInVzLTMuZXZlbm5vZGUuY29tIiwidXMtNC5ldmVubm9kZS5jb20iLCJyZWxheS5ldmVydmF1bHQuYXBwIiwicmVsYXkuZXZlcnZhdWx0LmRldiIsImV4cG8uYXBwIiwic3RhZ2luZy5leHBvLmFwcCIsIm9uZmFi'@;
put 'cmljYS5jb20iLCJydS5uZXQiLCJhZHlnZXlhLnJ1IiwiYmFzaGtpcmlhLnJ1IiwiYmlyLnJ1IiwiY2JnLnJ1IiwiY29tLnJ1IiwiZGFnZXN0YW4ucnUiLCJncm96bnkucnUiLCJrYWxteWtpYS5ydSIsImt1c3RhbmFpLnJ1IiwibWFyaW5lLnJ1IiwibW9yZG92aWEucnUiLCJtc2sucnUiLCJt'@;
put 'eXRpcy5ydSIsIm5hbGNoaWsucnUiLCJub3YucnUiLCJweWF0aWdvcnNrLnJ1Iiwic3BiLnJ1IiwidmxhZGlrYXZrYXoucnUiLCJ2bGFkaW1pci5ydSIsImFia2hhemlhLnN1IiwiYWR5Z2V5YS5zdSIsImFrdHl1Ymluc2suc3UiLCJhcmtoYW5nZWxzay5zdSIsImFybWVuaWEuc3UiLCJhc2hn'@;
put 'YWJhZC5zdSIsImF6ZXJiYWlqYW4uc3UiLCJiYWxhc2hvdi5zdSIsImJhc2hraXJpYS5zdSIsImJyeWFuc2suc3UiLCJidWtoYXJhLnN1IiwiY2hpbWtlbnQuc3UiLCJkYWdlc3Rhbi5zdSIsImVhc3Qta2F6YWtoc3Rhbi5zdSIsImV4bmV0LnN1IiwiZ2VvcmdpYS5zdSIsImdyb3pueS5zdSIs'@;
put 'Iml2YW5vdm8uc3UiLCJqYW1ieWwuc3UiLCJrYWxteWtpYS5zdSIsImthbHVnYS5zdSIsImthcmFjb2wuc3UiLCJrYXJhZ2FuZGEuc3UiLCJrYXJlbGlhLnN1Iiwia2hha2Fzc2lhLnN1Iiwia3Jhc25vZGFyLnN1Iiwia3VyZ2FuLnN1Iiwia3VzdGFuYWkuc3UiLCJsZW51Zy5zdSIsIm1hbmd5'@;
put 'c2hsYWsuc3UiLCJtb3Jkb3ZpYS5zdSIsIm1zay5zdSIsIm11cm1hbnNrLnN1IiwibmFsY2hpay5zdSIsIm5hdm9pLnN1Iiwibm9ydGgta2F6YWtoc3Rhbi5zdSIsIm5vdi5zdSIsIm9ibmluc2suc3UiLCJwZW56YS5zdSIsInBva3JvdnNrLnN1Iiwic29jaGkuc3UiLCJzcGIuc3UiLCJ0YXNo'@;
put 'a2VudC5zdSIsInRlcm1lei5zdSIsInRvZ2xpYXR0aS5zdSIsInRyb2l0c2suc3UiLCJ0c2VsaW5vZ3JhZC5zdSIsInR1bGEuc3UiLCJ0dXZhLnN1IiwidmxhZGlrYXZrYXouc3UiLCJ2bGFkaW1pci5zdSIsInZvbG9nZGEuc3UiLCJjaGFubmVsc2R2ci5uZXQiLCJ1LmNoYW5uZWxzZHZyLm5l'@;
put 'dCIsImVkZ2Vjb21wdXRlLmFwcCIsImZhc3RseS1lZGdlLmNvbSIsImZhc3RseS10ZXJyYXJpdW0uY29tIiwiZnJlZXRscy5mYXN0bHkubmV0IiwibWFwLmZhc3RseS5uZXQiLCJhLnByb2QuZmFzdGx5Lm5ldCIsImdsb2JhbC5wcm9kLmZhc3RseS5uZXQiLCJhLnNzbC5mYXN0bHkubmV0Iiwi'@;
put 'Yi5zc2wuZmFzdGx5Lm5ldCIsImdsb2JhbC5zc2wuZmFzdGx5Lm5ldCIsImZhc3RseWxiLm5ldCIsIm1hcC5mYXN0bHlsYi5uZXQiLCIqLnVzZXIuZm0iLCJmYXN0dnBzLXNlcnZlci5jb20iLCJmYXN0dnBzLmhvc3QiLCJteWZhc3QuaG9zdCIsImZhc3R2cHMuc2l0ZSIsIm15ZmFzdC5zcGFj'@;
put 'ZSIsImNvbm4udWsiLCJjb3Byby51ayIsImhvc3AudWsiLCJmZWRvcmFpbmZyYWNsb3VkLm9yZyIsImZlZG9yYXBlb3BsZS5vcmciLCJjbG91ZC5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5mZWRvcmFwcm9qZWN0Lm9yZyIsImFwcC5vcy5zdGcuZmVkb3JhcHJvamVjdC5vcmciLCJteWRv'@;
put 'Ymlzcy5jb20iLCJmaC1tdWVuc3Rlci5pbyIsImZpbGVnZWFyLm1lIiwiZmlyZWJhc2VhcHAuY29tIiwiZmxkcnYuY29tIiwiZmx1dHRlcmZsb3cuYXBwIiwiZmx5LmRldiIsInNody5pbyIsImVkZ2VhcHAubmV0IiwiZm9yZ2VibG9ja3MuY29tIiwiaWQuZm9yZ2Vyb2NrLmlvIiwiZnJhbWVy'@;
put 'LmFpIiwiZnJhbWVyLmFwcCIsImZyYW1lcmNhbnZhcy5jb20iLCJmcmFtZXIubWVkaWEiLCJmcmFtZXIucGhvdG9zIiwiZnJhbWVyLndlYnNpdGUiLCJmcmFtZXIud2lraSIsIjBlLnZjIiwiZnJlZWJveC1vcy5jb20iLCJmcmVlYm94b3MuY29tIiwiZmJ4LW9zLmZyIiwiZmJ4b3MuZnIiLCJm'@;
put 'cmVlYm94LW9zLmZyIiwiZnJlZWJveG9zLmZyIiwiZnJlZWRlc2t0b3Aub3JnIiwiZnJlZW15aXAuY29tIiwiKi5mcnVza3kuZGUiLCJ3aWVuLmZ1bmtmZXVlci5hdCIsImRhZW1vbi5hc2lhIiwiZGl4LmFzaWEiLCJteWRucy5ieiIsIjBhbS5qcCIsIjBnMC5qcCIsIjBqMC5qcCIsIjB0MC5q'@;
put 'cCIsIm15ZG5zLmpwIiwicGd3LmpwIiwid2pnLmpwIiwia2V5d29yZC1vbi5uZXQiLCJsaXZlLW9uLm5ldCIsInNlcnZlci1vbi5uZXQiLCJteWRucy50dyIsIm15ZG5zLnZjIiwiKi5mdXR1cmVjbXMuYXQiLCIqLmV4LmZ1dHVyZWNtcy5hdCIsIiouaW4uZnV0dXJlY21zLmF0IiwiZnV0dXJl'@;
put 'aG9zdGluZy5hdCIsImZ1dHVyZW1haWxpbmcuYXQiLCIqLmV4Lm9ydHNpbmZvLmF0IiwiKi5rdW5kZW4ub3J0c2luZm8uYXQiLCIqLnN0YXRpY3MuY2xvdWQiLCJhbGlhc2VzMTIxLmNvbSIsImNhbXBhaWduLmdvdi51ayIsInNlcnZpY2UuZ292LnVrIiwiaW5kZXBlbmRlbnQtY29tbWlzc2lv'@;
put 'bi51ayIsImluZGVwZW5kZW50LWlucXVlc3QudWsiLCJpbmRlcGVuZGVudC1pbnF1aXJ5LnVrIiwiaW5kZXBlbmRlbnQtcGFuZWwudWsiLCJpbmRlcGVuZGVudC1yZXZpZXcudWsiLCJwdWJsaWMtaW5xdWlyeS51ayIsInJveWFsLWNvbW1pc3Npb24udWsiLCJnZWhpcm4ubmUuanAiLCJ1c2Vy'@;
put 'Y29udGVudC5qcCIsImdlbnRhcHBzLmNvbSIsImdlbnRsZW50YXBpcy5jb20iLCJsYWIubXMiLCJjZG4tZWRnZXMubmV0IiwibG9jYWxjZXJ0Lm5ldCIsImxvY2FsaG9zdGNlcnQubmV0IiwiZ3NqLmJ6IiwiZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwiZ2l0aHVicHJldmlldy5kZXYiLCJnaXRo'@;
put 'dWIuaW8iLCJnaXRsYWIuaW8iLCJnaXRhcHAuc2kiLCJnaXRwYWdlLnNpIiwiZ2xpdGNoLm1lIiwibm9nLmNvbW11bml0eSIsImNvLnJvIiwic2hvcC5ybyIsImxvbGlwb3AuaW8iLCJhbmdyeS5qcCIsImJhYnlibHVlLmpwIiwiYmFieW1pbGsuanAiLCJiYWNrZHJvcC5qcCIsImJhbWJpbmEu'@;
put 'anAiLCJiaXR0ZXIuanAiLCJibHVzaC5qcCIsImJvby5qcCIsImJveS5qcCIsImJveWZyaWVuZC5qcCIsImJ1dC5qcCIsImNhbmR5cG9wLmpwIiwiY2Fwb28uanAiLCJjYXRmb29kLmpwIiwiY2hlYXAuanAiLCJjaGljYXBwYS5qcCIsImNoaWxsb3V0LmpwIiwiY2hpcHMuanAiLCJjaG93ZGVy'@;
put 'LmpwIiwiY2h1LmpwIiwiY2lhby5qcCIsImNvY290dGUuanAiLCJjb29sYmxvZy5qcCIsImNyYW5reS5qcCIsImN1dGVnaXJsLmpwIiwiZGFhLmpwIiwiZGVjYS5qcCIsImRlY2kuanAiLCJkaWdpY2suanAiLCJlZ29pc20uanAiLCJmYWtlZnVyLmpwIiwiZmVtLmpwIiwiZmxpZXIuanAiLCJm'@;
put 'bG9wcHkuanAiLCJmb29sLmpwIiwiZnJlbmNoa2lzcy5qcCIsImdpcmxmcmllbmQuanAiLCJnaXJseS5qcCIsImdsb29teS5qcCIsImdvbm5hLmpwIiwiZ3JlYXRlci5qcCIsImhhY2NhLmpwIiwiaGVhdnkuanAiLCJoZXIuanAiLCJoaWhvLmpwIiwiaGlwcHkuanAiLCJob2x5LmpwIiwiaHVu'@;
put 'Z3J5LmpwIiwiaWN1cnVzLmpwIiwiaXRpZ28uanAiLCJqZWxseWJlYW4uanAiLCJraWtpcmFyYS5qcCIsImtpbGwuanAiLCJraWxvLmpwIiwia3Vyb24uanAiLCJsaXR0bGVzdGFyLmpwIiwibG9saXBvcG1jLmpwIiwibG9saXRhcHVuay5qcCIsImxvbW8uanAiLCJsb3ZlcG9wLmpwIiwibG92'@;
put 'ZXNpY2suanAiLCJtYWluLmpwIiwibW9kcy5qcCIsIm1vbmQuanAiLCJtb25nb2xpYW4uanAiLCJtb28uanAiLCJuYW1hc3RlLmpwIiwibmlraXRhLmpwIiwibm9idXNoaS5qcCIsIm5vb3IuanAiLCJvb3BzLmpwIiwicGFyYWxsZWwuanAiLCJwYXJhc2l0ZS5qcCIsInBlY29yaS5qcCIsInBl'@;
put 'ZXdlZS5qcCIsInBlbm5lLmpwIiwicGVwcGVyLmpwIiwicGVybWEuanAiLCJwaWdib2F0LmpwIiwicGlub2tvLmpwIiwicHVueXUuanAiLCJwdXB1LmpwIiwicHVzc3ljYXQuanAiLCJweWEuanAiLCJyYWluZHJvcC5qcCIsInJlYWR5bWFkZS5qcCIsInNhZGlzdC5qcCIsInNjaG9vbGJ1cy5q'@;
put 'cCIsInNlY3JldC5qcCIsInN0YWJhLmpwIiwic3RyaXBwZXIuanAiLCJzdWIuanAiLCJzdW5ueWRheS5qcCIsInRoaWNrLmpwIiwidG9ua290c3UuanAiLCJ1bmRlci5qcCIsInVwcGVyLmpwIiwidmVsdmV0LmpwIiwidmVyc2UuanAiLCJ2ZXJzdXMuanAiLCJ2aXZpYW4uanAiLCJ3YXRzb24u'@;
put 'anAiLCJ3ZWJsaWtlLmpwIiwid2hpdGVzbm93LmpwIiwiem9tYmllLmpwIiwiaGV0ZW1sLm5ldCIsImdyYXBoaWMuZGVzaWduIiwiZ29pcC5kZSIsImJsb2dzcG90LmFlIiwiYmxvZ3Nwb3QuYWwiLCJibG9nc3BvdC5hbSIsIiouaG9zdGVkLmFwcCIsIioucnVuLmFwcCIsIndlYi5hcHAiLCJi'@;
put 'bG9nc3BvdC5jb20uYXIiLCJibG9nc3BvdC5jby5hdCIsImJsb2dzcG90LmNvbS5hdSIsImJsb2dzcG90LmJhIiwiYmxvZ3Nwb3QuYmUiLCJibG9nc3BvdC5iZyIsImJsb2dzcG90LmJqIiwiYmxvZ3Nwb3QuY29tLmJyIiwiYmxvZ3Nwb3QuY29tLmJ5IiwiYmxvZ3Nwb3QuY2EiLCJibG9nc3Bv'@;
put 'dC5jZiIsImJsb2dzcG90LmNoIiwiYmxvZ3Nwb3QuY2wiLCJibG9nc3BvdC5jb20uY28iLCIqLjBlbW0uY29tIiwiYXBwc3BvdC5jb20iLCIqLnIuYXBwc3BvdC5jb20iLCJibG9nc3BvdC5jb20iLCJjb2Rlc3BvdC5jb20iLCJnb29nbGVhcGlzLmNvbSIsImdvb2dsZWNvZGUuY29tIiwicGFn'@;
put 'ZXNwZWVkbW9iaWxpemVyLmNvbSIsIndpdGhnb29nbGUuY29tIiwid2l0aHlvdXR1YmUuY29tIiwiYmxvZ3Nwb3QuY3YiLCJibG9nc3BvdC5jb20uY3kiLCJibG9nc3BvdC5jeiIsImJsb2dzcG90LmRlIiwiKi5nYXRld2F5LmRldiIsImJsb2dzcG90LmRrIiwiYmxvZ3Nwb3QuY29tLmVlIiwi'@;
put 'YmxvZ3Nwb3QuY29tLmVnIiwiYmxvZ3Nwb3QuY29tLmVzIiwiYmxvZ3Nwb3QuZmkiLCJibG9nc3BvdC5mciIsImNsb3VkLmdvb2ciLCJ0cmFuc2xhdGUuZ29vZyIsIioudXNlcmNvbnRlbnQuZ29vZyIsImJsb2dzcG90LmdyIiwiYmxvZ3Nwb3QuaGsiLCJibG9nc3BvdC5ociIsImJsb2dzcG90'@;
put 'Lmh1IiwiYmxvZ3Nwb3QuY28uaWQiLCJibG9nc3BvdC5pZSIsImJsb2dzcG90LmNvLmlsIiwiYmxvZ3Nwb3QuaW4iLCJibG9nc3BvdC5pcyIsImJsb2dzcG90Lml0IiwiYmxvZ3Nwb3QuanAiLCJibG9nc3BvdC5jby5rZSIsImJsb2dzcG90LmtyIiwiYmxvZ3Nwb3QubGkiLCJibG9nc3BvdC5s'@;
put 'dCIsImJsb2dzcG90Lmx1IiwiYmxvZ3Nwb3QubWQiLCJibG9nc3BvdC5tayIsImJsb2dzcG90LmNvbS5tdCIsImJsb2dzcG90Lm14IiwiYmxvZ3Nwb3QubXkiLCJjbG91ZGZ1bmN0aW9ucy5uZXQiLCJibG9nc3BvdC5jb20ubmciLCJibG9nc3BvdC5ubCIsImJsb2dzcG90Lm5vIiwiYmxvZ3Nw'@;
put 'b3QuY28ubnoiLCJibG9nc3BvdC5wZSIsImJsb2dzcG90LnB0IiwiYmxvZ3Nwb3QucWEiLCJibG9nc3BvdC5yZSIsImJsb2dzcG90LnJvIiwiYmxvZ3Nwb3QucnMiLCJibG9nc3BvdC5ydSIsImJsb2dzcG90LnNlIiwiYmxvZ3Nwb3Quc2ciLCJibG9nc3BvdC5zaSIsImJsb2dzcG90LnNrIiwi'@;
put 'YmxvZ3Nwb3Quc24iLCJibG9nc3BvdC50ZCIsImJsb2dzcG90LmNvbS50ciIsImJsb2dzcG90LnR3IiwiYmxvZ3Nwb3QudWciLCJibG9nc3BvdC5jby51ayIsImJsb2dzcG90LmNvbS51eSIsImJsb2dzcG90LnZuIiwiYmxvZ3Nwb3QuY28uemEiLCJnb3VwaWxlLmZyIiwicHltbnQudWsiLCJj'@;
put 'bG91ZGFwcHMuZGlnaXRhbCIsImxvbmRvbi5jbG91ZGFwcHMuZGlnaXRhbCIsImdvdi5ubCIsImdyYWZhbmEtZGV2Lm5ldCIsImdyYXlqYXlsZWFndWVzLmNvbSIsImdceGZjbnN0aWdiZXN0ZWxsZW4uZGUiLCJnXHhmY25zdGlnbGllZmVybi5kZSIsImZpbi5jaSIsImZyZWUuaHIiLCJjYWEu'@;
put 'bGkiLCJ1YS5ycyIsImNvbmYuc2UiLCJoXHhlNGtraW5lbi5maSIsImhyc24uZGV2IiwiaGFzaGJhbmcuc2giLCJoYXN1cmEuYXBwIiwiaGFzdXJhLWFwcC5pbyIsImhhdGVuYWJsb2cuY29tIiwiaGF0ZW5hZGlhcnkuY29tIiwiaGF0ZWJsby5qcCIsImhhdGVuYWJsb2cuanAiLCJoYXRlbmFk'@;
put 'aWFyeS5qcCIsImhhdGVuYWRpYXJ5Lm9yZyIsInBhZ2VzLml0LmhzLWhlaWxicm9ubi5kZSIsInBhZ2VzLXJlc2VhcmNoLml0LmhzLWhlaWxicm9ubi5kZSIsImhlaXl1LnNwYWNlIiwiaGVsaW9oby5zdCIsImhlbGlvaG9zdC51cyIsImhlcGZvcmdlLm9yZyIsImhlcm9rdWFwcC5jb20iLCJo'@;
put 'ZXJva3Vzc2wuY29tIiwiaGV5Zmxvdy5wYWdlIiwiaGV5Zmxvdy5zaXRlIiwicmF2ZW5kYi5jbG91ZCIsInJhdmVuZGIuY29tbXVuaXR5IiwiZGV2ZWxvcG1lbnQucnVuIiwicmF2ZW5kYi5ydW4iLCJob21lc2tsZXAucGwiLCIqLmtpbi5vbmUiLCIqLmlkLnB1YiIsIioua2luLnB1YiIsInNl'@;
put 'Y2Fhcy5oayIsImhvcGxpeC5zaG9wIiwib3J4LmJpeiIsImJpei5nbCIsImJpei5uZyIsImNvLmJpei5uZyIsImRsLmJpei5uZyIsImdvLmJpei5uZyIsImxnLmJpei5uZyIsIm9uLmJpei5uZyIsImNvbC5uZyIsImZpcm0ubmciLCJnZW4ubmciLCJsdGQubmciLCJuZ28ubmciLCJwbGMubmci'@;
put 'LCJpZS51YSIsImhvc3R5aG9zdGluZy5pbyIsImhmLnNwYWNlIiwic3RhdGljLmhmLnNwYWNlIiwiaHlwZXJub2RlLmlvIiwiaW9iYi5uZXQiLCJjby5jeiIsIioubW9vbnNjYWxlLmlvIiwibW9vbnNjYWxlLm5ldCIsImdyLmNvbSIsImlraS5maSIsImlieG9zLml0IiwiaWxpYWRib3hvcy5p'@;
put 'dCIsInNtdXNoY2RuLmNvbSIsIndwaG9zdGVkbWFpbC5jb20iLCJ3cG11Y2RuLmNvbSIsInRlbXB1cmwuaG9zdCIsIndwbXVkZXYuaG9zdCIsImR5bi1iZXJsaW4uZGUiLCJpbi1iZXJsaW4uZGUiLCJpbi1icmIuZGUiLCJpbi1idXR0ZXIuZGUiLCJpbi1kc2wuZGUiLCJpbi12cG4uZGUiLCJp'@;
put 'bi1kc2wubmV0IiwiaW4tdnBuLm5ldCIsImluLWRzbC5vcmciLCJpbi12cG4ub3JnIiwiYml6LmF0IiwiaW5mby5hdCIsImluZm8uY3giLCJhYy5sZWcuYnIiLCJhbC5sZWcuYnIiLCJhbS5sZWcuYnIiLCJhcC5sZWcuYnIiLCJiYS5sZWcuYnIiLCJjZS5sZWcuYnIiLCJkZi5sZWcuYnIiLCJl'@;
put 'cy5sZWcuYnIiLCJnby5sZWcuYnIiLCJtYS5sZWcuYnIiLCJtZy5sZWcuYnIiLCJtcy5sZWcuYnIiLCJtdC5sZWcuYnIiLCJwYS5sZWcuYnIiLCJwYi5sZWcuYnIiLCJwZS5sZWcuYnIiLCJwaS5sZWcuYnIiLCJwci5sZWcuYnIiLCJyai5sZWcuYnIiLCJybi5sZWcuYnIiLCJyby5sZWcuYnIi'@;
put 'LCJyci5sZWcuYnIiLCJycy5sZWcuYnIiLCJzYy5sZWcuYnIiLCJzZS5sZWcuYnIiLCJzcC5sZWcuYnIiLCJ0by5sZWcuYnIiLCJwaXhvbGluby5jb20iLCJuYTR1LnJ1IiwiYXBwcy0xYW5kMS5jb20iLCJsaXZlLXdlYnNpdGUuY29tIiwiYXBwcy0xYW5kMS5uZXQiLCJ3ZWJzaXRlYnVpbGRl'@;
put 'ci5vbmxpbmUiLCJhcHAtaW9ub3Muc3BhY2UiLCJpb3BzeXMuc2UiLCIqLmR3ZWIubGluayIsImlwaWZvbnkubmV0IiwiaXIubWQiLCJpcy1hLWdvb2QuZGV2IiwiaXMtYS5kZXYiLCJpc2VydnNjaHVsZS5kZSIsIm1laW4taXNlcnYuZGUiLCJzY2h1bHBsYXR0Zm9ybS5kZSIsInNjaHVsc2Vy'@;
put 'dmVyLmRlIiwidGVzdC1pc2Vydi5kZSIsImlzZXJ2LmRldiIsIm1lbC5jbG91ZGxldHMuY29tLmF1IiwiY2xvdWQuaW50ZXJob3N0c29sdXRpb25zLmJlIiwiYWxwMS5hZS5mbG93LmNoIiwiYXBwZW5naW5lLmZsb3cuY2giLCJlcy0xLmF4YXJuZXQuY2xvdWQiLCJkaWFkZW0uY2xvdWQiLCJ2'@;
put 'aXAuamVsYXN0aWMuY2xvdWQiLCJqZWxlLmNsb3VkIiwiaXQxLmV1ci5hcnViYS5qZW52LWFydWJhLmNsb3VkIiwiaXQxLmplbnYtYXJ1YmEuY2xvdWQiLCJrZWxpd2ViLmNsb3VkIiwiY3Mua2VsaXdlYi5jbG91ZCIsIm94YS5jbG91ZCIsInRuLm94YS5jbG91ZCIsInVrLm94YS5jbG91ZCIs'@;
put 'InByaW1ldGVsLmNsb3VkIiwidWsucHJpbWV0ZWwuY2xvdWQiLCJjYS5yZWNsYWltLmNsb3VkIiwidWsucmVjbGFpbS5jbG91ZCIsInVzLnJlY2xhaW0uY2xvdWQiLCJjaC50cmVuZGhvc3RpbmcuY2xvdWQiLCJkZS50cmVuZGhvc3RpbmcuY2xvdWQiLCJqZWxlLmNsdWIiLCJkb3BhYXMuY29t'@;
put 'IiwicGFhcy5ob3N0ZWQtYnktcHJldmlkZXIuY29tIiwicmFnLWNsb3VkLmhvc3RldXIuY29tIiwicmFnLWNsb3VkLWNoLmhvc3RldXIuY29tIiwiamNsb3VkLmlrLXNlcnZlci5jb20iLCJqY2xvdWQtdmVyLWpwYy5pay1zZXJ2ZXIuY29tIiwiZGVtby5qZWxhc3RpYy5jb20iLCJwYWFzLm1h'@;
put 'c3NpdmVncmlkLmNvbSIsImplZC53YWZhaWNsb3VkLmNvbSIsInJ5ZC53YWZhaWNsb3VkLmNvbSIsImouc2NhbGVmb3JjZS5jb20uY3kiLCJqZWxhc3RpYy5kb2dhZG8uZXUiLCJmaS5jbG91ZHBsYXRmb3JtLmZpIiwiZGVtby5kYXRhY2VudGVyLmZpIiwicGFhcy5kYXRhY2VudGVyLmZpIiwi'@;
put 'amVsZS5ob3N0IiwibWlyY2xvdWQuaG9zdCIsInBhYXMuYmVlYnl0ZS5pbyIsInNla2QxLmJlZWJ5dGVhcHAuaW8iLCJqZWxlLmlvIiwiamMubmVlbi5pdCIsImpjbG91ZC5reiIsImNsb3VkamlmZnkubmV0IiwiZnJhMS1kZS5jbG91ZGppZmZ5Lm5ldCIsIndlc3QxLXVzLmNsb3VkamlmZnku'@;
put 'bmV0IiwiamxzLXN0bzEuZWxhc3R4Lm5ldCIsImpscy1zdG8yLmVsYXN0eC5uZXQiLCJqbHMtc3RvMy5lbGFzdHgubmV0IiwiZnItMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibG9uLTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJueS0xLnBh'@;
put 'YXMubWFzc2l2ZWdyaWQubmV0IiwibnktMi5wYWFzLm1hc3NpdmVncmlkLm5ldCIsInNnLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJqZWxhc3RpYy5zYXZlaW5jbG91ZC5uZXQiLCJub3JkZXN0ZS1pZGMuc2F2ZWluY2xvdWQubmV0Iiwiai5zY2FsZWZvcmNlLm5ldCIsInNkc2Nsb3VkLnBs'@;
put 'IiwidW5pY2xvdWQucGwiLCJtaXJjbG91ZC5ydSIsImVuc2NhbGVkLnNnIiwiamVsZS5zaXRlIiwiamVsYXN0aWMudGVhbSIsIm9yYW5nZWNsb3VkLnRuIiwiai5sYXllcnNoaWZ0LmNvLnVrIiwicGh4LmVuc2NhbGVkLnVzIiwibWlyY2xvdWQudXMiLCJteWppbm8ucnUiLCIqLmhvc3Rpbmcu'@;
put 'bXlqaW5vLnJ1IiwiKi5sYW5kaW5nLm15amluby5ydSIsIiouc3BlY3RydW0ubXlqaW5vLnJ1IiwiKi52cHMubXlqaW5vLnJ1Iiwiam90ZWx1bHUuY2xvdWQiLCJ3ZWJhZG9yc2l0ZS5jb20iLCJqb3V3d2ViLnNpdGUiLCIqLmNucy5qb3llbnQuY29tIiwiKi50cml0b24uem9uZSIsImpzLm9y'@;
put 'ZyIsImthYXMuZ2ciLCJraHBsYXkubmwiLCJrYXBzaS5maSIsImV6cHJveHkua3VsZXV2ZW4uYmUiLCJrdWxldXZlbi5jbG91ZCIsImtleW1hY2hpbmUuZGUiLCJraW5naG9zdC5uZXQiLCJ1bmk1Lm5ldCIsImtuaWdodHBvaW50LnN5c3RlbXMiLCJrb29iaW4uZXZlbnRzIiwid2VidGhpbmdz'@;
put 'LmlvIiwia3JlbGxpYW4ubmV0Iiwib3lhLnRvIiwiZ2l0LXJlcG9zLmRlIiwibGN1YmUtc2VydmVyLmRlIiwic3ZuLXJlcG9zLmRlIiwibGVhZHBhZ2VzLmNvIiwibHBhZ2VzLmNvIiwibHB1c2VyY29udGVudC5jb20iLCJsZWx1eC5zaXRlIiwibGlicDJwLmRpcmVjdCIsInJ1bmNvbnRhaW5l'@;
put 'cnMuZGV2IiwiY28uYnVzaW5lc3MiLCJjby5lZHVjYXRpb24iLCJjby5ldmVudHMiLCJjby5maW5hbmNpYWwiLCJjby5uZXR3b3JrIiwiY28ucGxhY2UiLCJjby50ZWNobm9sb2d5IiwibGlua3lhcmQtY2xvdWQuY2giLCJsaW5reWFyZC5jbG91ZCIsIm1lbWJlcnMubGlub2RlLmNvbSIsIiou'@;
put 'bm9kZWJhbGFuY2VyLmxpbm9kZS5jb20iLCIqLmxpbm9kZW9iamVjdHMuY29tIiwiaXAubGlub2RldXNlcmNvbnRlbnQuY29tIiwid2UuYnMiLCJmaWxlZ2Vhci1zZy5tZSIsImdnZmYubmV0IiwiKi51c2VyLmxvY2FsY2VydC5kZXYiLCJsb2R6LnBsIiwicGFiaWFuaWNlLnBsIiwicGxvY2su'@;
put 'cGwiLCJzaWVyYWR6LnBsIiwic2tpZXJuaWV3aWNlLnBsIiwiemdpZXJ6LnBsIiwibG9naW5saW5lLmFwcCIsImxvZ2lubGluZS5kZXYiLCJsb2dpbmxpbmUuaW8iLCJsb2dpbmxpbmUuc2VydmljZXMiLCJsb2dpbmxpbmUuc2l0ZSIsImxvaG11cy5tZSIsInNlcnZlcnMucnVuIiwia3Jhc25p'@;
put 'ay5wbCIsImxlY3puYS5wbCIsImx1YmFydG93LnBsIiwibHVibGluLnBsIiwicG9uaWF0b3dhLnBsIiwic3dpZG5pay5wbCIsImdsdWcub3JnLnVrIiwibHVnLm9yZy51ayIsImx1Z3Mub3JnLnVrIiwiYmFyc3kuYmciLCJiYXJzeS5jbHViIiwiYmFyc3ljZW50ZXIuY29tIiwiYmFyc3lvbmxp'@;
put 'bmUuY29tIiwiYmFyc3kuZGUiLCJiYXJzeS5kZXYiLCJiYXJzeS5ldSIsImJhcnN5LmdyIiwiYmFyc3kuaW4iLCJiYXJzeS5pbmZvIiwiYmFyc3kuaW8iLCJiYXJzeS5tZSIsImJhcnN5Lm1lbnUiLCJiYXJzeW9ubGluZS5tZW51IiwiYmFyc3kubW9iaSIsImJhcnN5Lm5ldCIsImJhcnN5Lm9u'@;
put 'bGluZSIsImJhcnN5Lm9yZyIsImJhcnN5LnBybyIsImJhcnN5LnB1YiIsImJhcnN5LnJvIiwiYmFyc3kucnMiLCJiYXJzeS5zaG9wIiwiYmFyc3lvbmxpbmUuc2hvcCIsImJhcnN5LnNpdGUiLCJiYXJzeS5zdG9yZSIsImJhcnN5LnN1cHBvcnQiLCJiYXJzeS51ayIsImJhcnN5LmNvLnVrIiwi'@;
put 'YmFyc3lvbmxpbmUuY28udWsiLCIqLm1hZ2VudG9zaXRlLmNsb3VkIiwiaGIuY2xkbWFpbC5ydSIsIm1hdGxhYi5jbG91ZCIsIm1vZGVsc2NhcGUuY29tIiwibXdjbG91ZG5vbnByb2QuY29tIiwicG9seXNwYWNlLmNvbSIsIm1heWZpcnN0LmluZm8iLCJtYXlmaXJzdC5vcmciLCJtYXplcGxh'@;
put 'eS5jb20iLCJtY2Rpci5tZSIsIm1jZGlyLnJ1IiwidnBzLm1jZGlyLnJ1IiwibWNwcmUucnUiLCJtZWRpYXRlY2guYnkiLCJtZWRpYXRlY2guZGV2IiwiaHJhLmhlYWx0aCIsIm1lZHVzYWpzLmFwcCIsIm1pbmlzZXJ2ZXIuY29tIiwibWVtc2V0Lm5ldCIsIm1lc3NlcmxpLmFwcCIsImF0bWV0'@;
put 'YS5jb20iLCJhcHBzLmZic2J4LmNvbSIsIiouY2xvdWQubWV0YWNlbnRydW0uY3oiLCJjdXN0b20ubWV0YWNlbnRydW0uY3oiLCJmbHQuY2xvdWQubXVuaS5jeiIsInVzci5jbG91ZC5tdW5pLmN6IiwibWV0ZW9yYXBwLmNvbSIsImV1Lm1ldGVvcmFwcC5jb20iLCJjby5wbCIsIiouYXp1cmVj'@;
put 'b250YWluZXIuaW8iLCJhenVyZS1hcGkubmV0IiwiYXp1cmUtbW9iaWxlLm5ldCIsImF6dXJlZWRnZS5uZXQiLCJhenVyZWZkLm5ldCIsImF6dXJlc3RhdGljYXBwcy5uZXQiLCIxLmF6dXJlc3RhdGljYXBwcy5uZXQiLCIyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCIzLmF6dXJlc3RhdGljYXBw'@;
put 'cy5uZXQiLCI0LmF6dXJlc3RhdGljYXBwcy5uZXQiLCI1LmF6dXJlc3RhdGljYXBwcy5uZXQiLCI2LmF6dXJlc3RhdGljYXBwcy5uZXQiLCI3LmF6dXJlc3RhdGljYXBwcy5uZXQiLCJjZW50cmFsdXMuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImVhc3Rhc2lhLmF6dXJlc3RhdGljYXBwcy5uZXQi'@;
put 'LCJlYXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0ZXVyb3BlLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJ3ZXN0dXMyLmF6dXJlc3RhdGljYXBwcy5uZXQiLCJhenVyZXdlYnNpdGVzLm5ldCIsImNsb3VkYXBwLm5ldCIsInRyYWZmaWNtYW5hZ2VyLm5ldCIsImJsb2IuY29yZS53aW5k'@;
put 'b3dzLm5ldCIsInNlcnZpY2VidXMud2luZG93cy5uZXQiLCJyb3V0aW5ndGhlY2xvdWQuY29tIiwic24ubXluZXRuYW1lLm5ldCIsInJvdXRpbmd0aGVjbG91ZC5uZXQiLCJyb3V0aW5ndGhlY2xvdWQub3JnIiwiY3N4LmNjIiwibXlkYnNlcnZlci5jb20iLCJ3ZWJzcGFjZWNvbmZpZy5kZSIs'@;
put 'Im1pdHR3YWxkLmluZm8iLCJtaXR0d2FsZHNlcnZlci5pbmZvIiwidHlwbzNzZXJ2ZXIuaW5mbyIsInByb2plY3Quc3BhY2UiLCJtb2R4LmRldiIsImJtb2F0dGFjaG1lbnRzLm9yZyIsIm5ldC5ydSIsIm9yZy5ydSIsInBwLnJ1IiwiaG9zdGVkcGkuY29tIiwiY2FyYWNhbC5teXRoaWMtYmVh'@;
put 'c3RzLmNvbSIsImN1c3RvbWVyLm15dGhpYy1iZWFzdHMuY29tIiwiZmVudGlnZXIubXl0aGljLWJlYXN0cy5jb20iLCJseW54Lm15dGhpYy1iZWFzdHMuY29tIiwib2NlbG90Lm15dGhpYy1iZWFzdHMuY29tIiwib25jaWxsYS5teXRoaWMtYmVhc3RzLmNvbSIsIm9uemEubXl0aGljLWJlYXN0'@;
put 'cy5jb20iLCJzcGhpbngubXl0aGljLWJlYXN0cy5jb20iLCJ2cy5teXRoaWMtYmVhc3RzLmNvbSIsIngubXl0aGljLWJlYXN0cy5jb20iLCJ5YWxpLm15dGhpYy1iZWFzdHMuY29tIiwiY3VzdC5yZXRyb3NudWIuY28udWsiLCJ1aS5uYWJ1LmNhc2EiLCJjbG91ZC5ub3NwYW1wcm94eS5jb20i'@;
put 'LCJuZXRmeS5hcHAiLCJuZXRsaWZ5LmFwcCIsIjR1LmNvbSIsIm5mc2hvc3QuY29tIiwiaXBmcy5uZnRzdG9yYWdlLmxpbmsiLCJuZ28udXMiLCJuZ3Jvay5hcHAiLCJuZ3Jvay1mcmVlLmFwcCIsIm5ncm9rLmRldiIsIm5ncm9rLWZyZWUuZGV2Iiwibmdyb2suaW8iLCJhcC5uZ3Jvay5pbyIs'@;
put 'ImF1Lm5ncm9rLmlvIiwiZXUubmdyb2suaW8iLCJpbi5uZ3Jvay5pbyIsImpwLm5ncm9rLmlvIiwic2Eubmdyb2suaW8iLCJ1cy5uZ3Jvay5pbyIsIm5ncm9rLnBpenphIiwibmdyb2sucHJvIiwidG9ydW4ucGwiLCJuaC1zZXJ2LmNvLnVrIiwibmltc2l0ZS51ayIsIm1tYWZhbi5iaXoiLCJt'@;
put 'eWZ0cC5iaXoiLCJuby1pcC5iaXoiLCJuby1pcC5jYSIsImZhbnRhc3lsZWFndWUuY2MiLCJnb3RkbnMuY2giLCIzdXRpbGl0aWVzLmNvbSIsImJsb2dzeXRlLmNvbSIsImNpc2NvZnJlYWsuY29tIiwiZGFtbnNlcnZlci5jb20iLCJkZG5za2luZy5jb20iLCJkaXRjaHlvdXJpcC5jb20iLCJk'@;
put 'bnNpc2tpbmt5LmNvbSIsImR5bm5zLmNvbSIsImdlZWtnYWxheHkuY29tIiwiaGVhbHRoLWNhcmVyZWZvcm0uY29tIiwiaG9tZXNlY3VyaXR5bWFjLmNvbSIsImhvbWVzZWN1cml0eXBjLmNvbSIsIm15YWN0aXZlZGlyZWN0b3J5LmNvbSIsIm15c2VjdXJpdHljYW1lcmEuY29tIiwibXl2bmMu'@;
put 'Y29tIiwibmV0LWZyZWFrcy5jb20iLCJvbnRoZXdpZmkuY29tIiwicG9pbnQydGhpcy5jb20iLCJxdWlja3N5dGVzLmNvbSIsInNlY3VyaXR5dGFjdGljcy5jb20iLCJzZXJ2ZWJlZXIuY29tIiwic2VydmVjb3VudGVyc3RyaWtlLmNvbSIsInNlcnZlZXhjaGFuZ2UuY29tIiwic2VydmVmdHAu'@;
put 'Y29tIiwic2VydmVnYW1lLmNvbSIsInNlcnZlaGFsZmxpZmUuY29tIiwic2VydmVodHRwLmNvbSIsInNlcnZlaHVtb3VyLmNvbSIsInNlcnZlaXJjLmNvbSIsInNlcnZlbXAzLmNvbSIsInNlcnZlcDJwLmNvbSIsInNlcnZlcGljcy5jb20iLCJzZXJ2ZXF1YWtlLmNvbSIsInNlcnZlc2FyY2Fz'@;
put 'bS5jb20iLCJzdHVmZnRvcmVhZC5jb20iLCJ1bnVzdWFscGVyc29uLmNvbSIsIndvcmtpc2JvcmluZy5jb20iLCJkdnJjYW0uaW5mbyIsImlsb3ZlY29sbGVnZS5pbmZvIiwibm8taXAuaW5mbyIsImJyYXNpbGlhLm1lIiwiZGRucy5tZSIsImRuc2Zvci5tZSIsImhvcHRvLm1lIiwibG9naW50'@;
put 'by5tZSIsIm5vaXAubWUiLCJ3ZWJob3AubWUiLCJib3VuY2VtZS5uZXQiLCJkZG5zLm5ldCIsImVhdGluZy1vcmdhbmljLm5ldCIsIm15ZGlzc2VudC5uZXQiLCJteWVmZmVjdC5uZXQiLCJteW1lZGlhcGMubmV0IiwibXlwc3gubmV0IiwibXlzZWN1cml0eWNhbWVyYS5uZXQiLCJuaGxmYW4u'@;
put 'bmV0Iiwibm8taXAubmV0IiwicGdhZmFuLm5ldCIsInByaXZhdGl6ZWhlYWx0aGluc3VyYW5jZS5uZXQiLCJyZWRpcmVjdG1lLm5ldCIsInNlcnZlYmxvZy5uZXQiLCJzZXJ2ZW1pbmVjcmFmdC5uZXQiLCJzeXRlcy5uZXQiLCJjYWJsZS1tb2RlbS5vcmciLCJjb2xsZWdlZmFuLm9yZyIsImNv'@;
put 'dWNocG90YXRvZnJpZXMub3JnIiwiaG9wdG8ub3JnIiwibWxiZmFuLm9yZyIsIm15ZnRwLm9yZyIsIm15c2VjdXJpdHljYW1lcmEub3JnIiwibmZsZmFuLm9yZyIsIm5vLWlwLm9yZyIsInJlYWQtYm9va3Mub3JnIiwidWZjZmFuLm9yZyIsInphcHRvLm9yZyIsIm5vLWlwLmNvLnVrIiwiZ29s'@;
put 'ZmZhbi51cyIsIm5vaXAudXMiLCJwb2ludHRvLnVzIiwic3RhZ2Uubm9kZWFydC5pbyIsIiouZGV2ZWxvcGVyLmFwcCIsIm5vb3AuYXBwIiwiKi5ub3J0aGZsYW5rLmFwcCIsIiouYnVpbGQucnVuIiwiKi5jb2RlLnJ1biIsIiouZGF0YWJhc2UucnVuIiwiKi5taWdyYXRpb24ucnVuIiwibm90'@;
put 'aWNlYWJsZS5uZXdzIiwibm90aW9uLnNpdGUiLCJkbnNraW5nLmNoIiwibXlwaS5jbyIsIm40dC5jbyIsIjAwMXd3dy5jb20iLCJteWlwaG9zdC5jb20iLCJmb3J1bXouaW5mbyIsInNvdW5kY2FzdC5tZSIsInRjcDQubWUiLCJkbnN1cC5uZXQiLCJoaWNhbS5uZXQiLCJub3ctZG5zLm5ldCIs'@;
put 'Im93bmlwLm5ldCIsInZwbmRucy5uZXQiLCJkeW5zZXJ2Lm9yZyIsIm5vdy1kbnMub3JnIiwieDQ0My5wdyIsIm5vdy1kbnMudG9wIiwibnRkbGwudG9wIiwiZnJlZWRkbnMudXMiLCJuc3VwZGF0ZS5pbmZvIiwibmVyZHBvbC5vdmgiLCJueWMubW4iLCJwcnZjeS5wYWdlIiwib2JsLm9uZyIs'@;
put 'Im9ic2VydmFibGVocS5jbG91ZCIsInN0YXRpYy5vYnNlcnZhYmxldXNlcmNvbnRlbnQuY29tIiwib21nLmxvbCIsImNsb3VkeWNsdXN0ZXIubmV0Iiwib21uaXdlLnNpdGUiLCIxMjN3ZWJzZWl0ZS5hdCIsIjEyM3dlYnNpdGUuYmUiLCJzaW1wbGVzaXRlLmNvbS5iciIsIjEyM3dlYnNpdGUu'@;
put 'Y2giLCJzaW1wbGVzaXRlLmNvbSIsIjEyM3dlYnNlaXRlLmRlIiwiMTIzaGplbW1lc2lkZS5kayIsIjEyM21pd2ViLmVzIiwiMTIza290aXNpdnUuZmkiLCIxMjNzaXRld2ViLmZyIiwic2ltcGxlc2l0ZS5nciIsIjEyM2hvbWVwYWdlLml0IiwiMTIzd2Vic2l0ZS5sdSIsIjEyM3dlYnNpdGUu'@;
put 'bmwiLCIxMjNoamVtbWVzaWRlLm5vIiwic2VydmljZS5vbmUiLCJzaW1wbGVzaXRlLnBsIiwiMTIzcGFnaW5hd2ViLnB0IiwiMTIzbWluc2lkYS5zZSIsImlzLWEtZnVsbHN0YWNrLmRldiIsImlzLWNvb2wuZGV2IiwiaXMtbm90LWEuZGV2IiwibG9jYWxwbGF5ZXIuZGV2IiwiaXMtbG9jYWwu'@;
put 'b3JnIiwib3BlbnNvY2lhbC5zaXRlIiwib3BlbmNyYWZ0Lmhvc3RpbmciLCIxNi1iLml0IiwiMzItYi5pdCIsIjY0LWIuaXQiLCJvcnNpdGVzLmNvbSIsIm9wZXJhdW5pdGUuY29tIiwiKi5jdXN0b21lci1vY2kuY29tIiwiKi5vY2kuY3VzdG9tZXItb2NpLmNvbSIsIioub2NwLmN1c3RvbWVy'@;
put 'LW9jaS5jb20iLCIqLm9jcy5jdXN0b21lci1vY2kuY29tIiwiKi5vcmFjbGVjbG91ZGFwcHMuY29tIiwiKi5vcmFjbGVnb3ZjbG91ZGFwcHMuY29tIiwiKi5vcmFjbGVnb3ZjbG91ZGFwcHMudWsiLCJ0ZWNoLm9yYW5nZSIsImNhbi5yZSIsImF1dGhnZWFyLXN0YWdpbmcuY29tIiwiYXV0aGdl'@;
put 'YXJhcHBzLmNvbSIsInNreWdlYXJhcHAuY29tIiwib3V0c3lzdGVtc2Nsb3VkLmNvbSIsIiouaG9zdGluZy5vdmgubmV0IiwiKi53ZWJwYWFzLm92aC5uZXQiLCJvd25wcm92aWRlci5jb20iLCJvd24ucG0iLCIqLm93by5jb2RlcyIsIm94LnJzIiwib3kubGMiLCJwZ2ZvZy5jb20iLCJwYWdl'@;
put 'eGwuY29tIiwiZ290cGFudGhlb24uY29tIiwicGFudGhlb25zaXRlLmlvIiwiKi5wYXl3aGlybC5jb20iLCIqLnhtaXQuY28iLCJ4bWl0LmRldiIsIm1hZGV0aGlzLnNpdGUiLCJzcnYudXMiLCJnaC5zcnYudXMiLCJnbC5zcnYudXMiLCJsazMucnUiLCJteXBlcC5saW5rIiwicGVyc3BlY3Rh'@;
put 'LmNsb3VkIiwib24td2ViLmZyIiwiKi51cHN1bi5hcHAiLCJ1cHN1bmFwcC5jb20iLCJlbnQucGxhdGZvcm0uc2giLCJldS5wbGF0Zm9ybS5zaCIsInVzLnBsYXRmb3JtLnNoIiwiKi5wbGF0Zm9ybXNoLnNpdGUiLCIqLnRzdC5zaXRlIiwicGxhdHRlci1hcHAuY29tIiwicGxhdHRlci1hcHAu'@;
put 'ZGV2IiwicGxhdHRlcnAudXMiLCJwbGV5LmdhbWVzIiwib25wb3J0ZXIucnVuIiwiY28uYm4iLCJwb3N0bWFuLWVjaG8uY29tIiwicHN0bW4uaW8iLCJtb2NrLnBzdG1uLmlvIiwiaHR0cGJpbi5vcmciLCJwcmVxdWFsaWZ5bWUudG9kYXkiLCJ4ZW4ucHJnbXIuY29tIiwicHJpdi5hdCIsInBy'@;
put 'b3RvbmV0LmlvIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLWVuLWZyYW5jZS5mciIsImJ5ZW4uc2l0ZSIsInB1YnRscy5vcmciLCJweXRob25hbnl3aGVyZS5jb20iLCJldS5weXRob25hbnl3aGVyZS5jb20iLCJxYTIuY29tIiwicWN4LmlvIiwiKi5zeXMucWN4LmlvIiwibXlxbmFwY2xvdWQu'@;
put 'Y24iLCJhbHBoYS1teXFuYXBjbG91ZC5jb20iLCJkZXYtbXlxbmFwY2xvdWQuY29tIiwibXljbG91ZG5hcy5jb20iLCJteW5hc2Nsb3VkLmNvbSIsIm15cW5hcGNsb3VkLmNvbSIsInFvdG8uaW8iLCJxdWFsaWZpb2FwcC5jb20iLCJsYWRlc2suY29tIiwicWJ1c2VyLmNvbSIsIioucXVpcGVs'@;
put 'ZW1lbnRzLmNvbSIsInZhcG9yLmNsb3VkIiwidmFwb3JjbG91ZC5pbyIsInJhY2ttYXplLmNvbSIsInJhY2ttYXplLm5ldCIsImNsb3Vkc2l0ZS5idWlsZGVycyIsIm15cmFkd2ViLm5ldCIsInNlcnZlcm5hbWUudXMiLCJ3ZWIuaW4iLCJpbi5uZXQiLCJteXJkYnguaW8iLCJzaXRlLnJiLWhv'@;
put 'c3RpbmcuaW8iLCIqLm9uLXJhbmNoZXIuY2xvdWQiLCIqLm9uLWszcy5pbyIsIioub24tcmlvLmlvIiwicmF2cGFnZS5jby5pbCIsInJlYWR0aGVkb2NzLWhvc3RlZC5jb20iLCJyZWFkdGhlZG9jcy5pbyIsInJoY2xvdWQuY29tIiwiaW5zdGFuY2VzLnNwYXduLmNjIiwib25yZW5kZXIuY29t'@;
put 'IiwiYXBwLnJlbmRlci5jb20iLCJyZXBsaXQuYXBwIiwiaWQucmVwbGl0LmFwcCIsImZpcmV3YWxsZWRyZXBsaXQuY28iLCJpZC5maXJld2FsbGVkcmVwbGl0LmNvIiwicmVwbC5jbyIsImlkLnJlcGwuY28iLCJyZXBsaXQuZGV2IiwiYXJjaGVyLnJlcGxpdC5kZXYiLCJib25lcy5yZXBsaXQu'@;
put 'ZGV2IiwiY2FuYXJ5LnJlcGxpdC5kZXYiLCJnbG9iYWwucmVwbGl0LmRldiIsImhhY2tlci5yZXBsaXQuZGV2IiwiaWQucmVwbGl0LmRldiIsImphbmV3YXkucmVwbGl0LmRldiIsImtpbS5yZXBsaXQuZGV2Iiwia2lyYS5yZXBsaXQuZGV2Iiwia2lyay5yZXBsaXQuZGV2Iiwib2RvLnJlcGxp'@;
put 'dC5kZXYiLCJwYXJpcy5yZXBsaXQuZGV2IiwicGljYXJkLnJlcGxpdC5kZXYiLCJwaWtlLnJlcGxpdC5kZXYiLCJwcmVyZWxlYXNlLnJlcGxpdC5kZXYiLCJyZWVkLnJlcGxpdC5kZXYiLCJyaWtlci5yZXBsaXQuZGV2Iiwic2lza28ucmVwbGl0LmRldiIsInNwb2NrLnJlcGxpdC5kZXYiLCJz'@;
put 'dGFnaW5nLnJlcGxpdC5kZXYiLCJzdWx1LnJlcGxpdC5kZXYiLCJ0YXJwaXQucmVwbGl0LmRldiIsInRlYW1zLnJlcGxpdC5kZXYiLCJ0dWNrZXIucmVwbGl0LmRldiIsIndlc2xleS5yZXBsaXQuZGV2Iiwid29yZi5yZXBsaXQuZGV2IiwicmVwbC5ydW4iLCJyZXNpbmRldmljZS5pbyIsImRl'@;
put 'dmljZXMucmVzaW5zdGFnaW5nLmlvIiwiaHpjLmlvIiwiYWRpbW8uY28udWsiLCJpdGNvdWxkYmV3b3Iuc2UiLCJhdXMuYmFza2V0YmFsbCIsIm56LmJhc2tldGJhbGwiLCJnaXQtcGFnZXMucml0LmVkdSIsInJvY2t5LnBhZ2UiLCJydWIuZGUiLCJydWhyLXVuaS1ib2NodW0uZGUiLCJpby5u'@;
put 'b2MucnVoci11bmktYm9jaHVtLmRlIiwiXHUwNDMxXHUwNDM4XHUwNDM3Llx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzYVx1MDQzZVx1MDQzYy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0NDBcdTA0NGJcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNjXHUwNDM4XHUw'@;
put 'NDQwLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQ0MVx1MDQzYS5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDMwXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDMwLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1'@;
put 'MDQ0MVx1MDQzZVx1MDQ0N1x1MDQzOC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2ZcdTA0MzEuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDRmLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsInJhcy5ydSIsIm55YXQuYXBwIiwiMTgwci5jb20iLCJkb2ppbi5jb20iLCJzYWt1cmF0YW4u'@;
put 'Y29tIiwic2FrdXJhd2ViLmNvbSIsIngwLmNvbSIsIjItZC5qcCIsImJvbmEuanAiLCJjcmFwLmpwIiwiZGF5bmlnaHQuanAiLCJlZWsuanAiLCJmbG9wLmpwIiwiaGFsZm1vb24uanAiLCJqZWV6LmpwIiwibWF0cml4LmpwIiwibWltb3phLmpwIiwiaXZvcnkubmUuanAiLCJtYWlsLWJveC5u'@;
put 'ZS5qcCIsIm1pbnRzLm5lLmpwIiwibW9rdXJlbi5uZS5qcCIsIm9wYWwubmUuanAiLCJzYWt1cmEubmUuanAiLCJzdW1vbW8ubmUuanAiLCJ0b3Bhei5uZS5qcCIsIm5ldGdhbWVycy5qcCIsIm55YW50YS5qcCIsIm8wbzAuanAiLCJyZHkuanAiLCJyZ3IuanAiLCJydWxlei5qcCIsInMzLmlz'@;
put 'azAxLnNha3VyYXN0b3JhZ2UuanAiLCJzMy5pc2swMi5zYWt1cmFzdG9yYWdlLmpwIiwic2Fsb29uLmpwIiwic2Jsby5qcCIsInNrci5qcCIsInRhbmsuanAiLCJ1aC1vaC5qcCIsInVuZG8uanAiLCJycy53ZWJhY2NlbC5qcCIsInVzZXIud2ViYWNjZWwuanAiLCJ3ZWJzb3phaS5qcCIsInhp'@;
put 'aS5qcCIsInNxdWFyZXMubmV0IiwianBuLm9yZyIsImtpcmFyYS5zdCIsIngwLnRvIiwiZnJvbS50diIsInNha3VyYS50diIsIiouYnVpbGRlci5jb2RlLmNvbSIsIiouZGV2LWJ1aWxkZXIuY29kZS5jb20iLCIqLnN0Zy1idWlsZGVyLmNvZGUuY29tIiwiKi4wMDEudGVzdC5jb2RlLWJ1aWxk'@;
put 'ZXItc3RnLnBsYXRmb3JtLnNhbGVzZm9yY2UuY29tIiwiKi5kLmNybS5kZXYiLCIqLncuY3JtLmRldiIsIioud2EuY3JtLmRldiIsIioud2IuY3JtLmRldiIsIioud2MuY3JtLmRldiIsIioud2QuY3JtLmRldiIsIioud2UuY3JtLmRldiIsIioud2YuY3JtLmRldiIsInNhbmRjYXRzLmlvIiwi'@;
put 'bG9nb2lwLmNvbSIsImxvZ29pcC5kZSIsImZyLXBhci0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJmci1wYXItMi5iYXJlbWV0YWwuc2N3LmNsb3VkIiwibmwtYW1zLTEuYmFyZW1ldGFsLnNjdy5jbG91ZCIsImNvY2twaXQuZnItcGFyLnNjdy5jbG91ZCIsImZuYy5mci1wYXIuc2N3LmNsb3Vk'@;
put 'IiwiZnVuY3Rpb25zLmZuYy5mci1wYXIuc2N3LmNsb3VkIiwiazhzLmZyLXBhci5zY3cuY2xvdWQiLCJub2Rlcy5rOHMuZnItcGFyLnNjdy5jbG91ZCIsInMzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLmZyLXBhci5zY3cuY2xvdWQiLCJ3aG0uZnItcGFyLnNjdy5jbG91ZCIsInBy'@;
put 'aXYuaW5zdGFuY2VzLnNjdy5jbG91ZCIsInB1Yi5pbnN0YW5jZXMuc2N3LmNsb3VkIiwiazhzLnNjdy5jbG91ZCIsImNvY2twaXQubmwtYW1zLnNjdy5jbG91ZCIsIms4cy5ubC1hbXMuc2N3LmNsb3VkIiwibm9kZXMuazhzLm5sLWFtcy5zY3cuY2xvdWQiLCJzMy5ubC1hbXMuc2N3LmNsb3Vk'@;
put 'IiwiczMtd2Vic2l0ZS5ubC1hbXMuc2N3LmNsb3VkIiwid2htLm5sLWFtcy5zY3cuY2xvdWQiLCJjb2NrcGl0LnBsLXdhdy5zY3cuY2xvdWQiLCJrOHMucGwtd2F3LnNjdy5jbG91ZCIsIm5vZGVzLms4cy5wbC13YXcuc2N3LmNsb3VkIiwiczMucGwtd2F3LnNjdy5jbG91ZCIsInMzLXdlYnNp'@;
put 'dGUucGwtd2F3LnNjdy5jbG91ZCIsInNjYWxlYm9vay5zY3cuY2xvdWQiLCJzbWFydGxhYmVsaW5nLnNjdy5jbG91ZCIsImRlZGlib3guZnIiLCJzY2hva29rZWtzLm5ldCIsImdvdi5zY290Iiwic2VydmljZS5nb3Yuc2NvdCIsInNjcnlzZWMuY29tIiwiY2xpZW50LnNjcnlwdGVkLmlvIiwi'@;
put 'ZmlyZXdhbGwtZ2F0ZXdheS5jb20iLCJmaXJld2FsbC1nYXRld2F5LmRlIiwibXktZ2F0ZXdheS5kZSIsIm15LXJvdXRlci5kZSIsInNwZG5zLmRlIiwic3BkbnMuZXUiLCJmaXJld2FsbC1nYXRld2F5Lm5ldCIsIm15LWZpcmV3YWxsLm9yZyIsIm15ZmlyZXdhbGwub3JnIiwic3BkbnMub3Jn'@;
put 'Iiwic2VpZGF0Lm5ldCIsInNlbGxmeS5zdG9yZSIsIm1pbmlzaXRlLm1zIiwic2Vuc2VlcmluZy5uZXQiLCJzZXJ2ZWJvbHQuY2xvdWQiLCJiaXoudWEiLCJjby51YSIsInBwLnVhIiwiYXMuc2guY24iLCJzaGVlenkuZ2FtZXMiLCJzaGlmdGVkaXQuaW8iLCJteXNob3BibG9ja3MuY29tIiwi'@;
put 'bXlzaG9waWZ5LmNvbSIsInNob3BpdHNpdGUuY29tIiwic2hvcHdhcmUuc2hvcCIsInNob3B3YXJlLnN0b3JlIiwibW8tc2llbWVucy5pbyIsIjFrYXBwLmNvbSIsImFwcGNoaXppLmNvbSIsImFwcGxpbnppLmNvbSIsInNpbmFhcHAuY29tIiwidmlwc2luYWFwcC5jb20iLCJzaXRlbGVhZi5u'@;
put 'ZXQiLCJzbWFsbC13ZWIub3JnIiwiYWVyb3BvcnQuZnIiLCJhdm9jYXQuZnIiLCJjaGFtYmFncmkuZnIiLCJjaGlydXJnaWVucy1kZW50aXN0ZXMuZnIiLCJleHBlcnRzLWNvbXB0YWJsZXMuZnIiLCJtZWRlY2luLmZyIiwibm90YWlyZXMuZnIiLCJwaGFybWFjaWVuLmZyIiwicG9ydC5mciIs'@;
put 'InZldGVyaW5haXJlLmZyIiwidnA0Lm1lIiwiKi5zbm93Zmxha2UuYXBwIiwiKi5wcml2YXRlbGluay5zbm93Zmxha2UuYXBwIiwic3RyZWFtbGl0LmFwcCIsInN0cmVhbWxpdGFwcC5jb20iLCJ0cnktc25vd3Bsb3cuY29tIiwibWFmZWxvLm5ldCIsInBsYXlzdGF0aW9uLWNsb3VkLmNvbSIs'@;
put 'InNyaHQuc2l0ZSIsImFwcHMubGFpci5pbyIsIiouc3RvbG9zLmlvIiwic3BhY2VraXQuaW8iLCJpbmQubW9tIiwiY3VzdG9tZXIuc3BlZWRwYXJ0bmVyLmRlIiwibXlzcHJlYWRzaG9wLmF0IiwibXlzcHJlYWRzaG9wLmNvbS5hdSIsIm15c3ByZWFkc2hvcC5iZSIsIm15c3ByZWFkc2hvcC5j'@;
put 'YSIsIm15c3ByZWFkc2hvcC5jaCIsIm15c3ByZWFkc2hvcC5jb20iLCJteXNwcmVhZHNob3AuZGUiLCJteXNwcmVhZHNob3AuZGsiLCJteXNwcmVhZHNob3AuZXMiLCJteXNwcmVhZHNob3AuZmkiLCJteXNwcmVhZHNob3AuZnIiLCJteXNwcmVhZHNob3AuaWUiLCJteXNwcmVhZHNob3AuaXQi'@;
put 'LCJteXNwcmVhZHNob3AubmV0IiwibXlzcHJlYWRzaG9wLm5sIiwibXlzcHJlYWRzaG9wLm5vIiwibXlzcHJlYWRzaG9wLnBsIiwibXlzcHJlYWRzaG9wLnNlIiwibXlzcHJlYWRzaG9wLmNvLnVrIiwidy1jb3JwLXN0YXRpY2JsaXR6LmNvbSIsInctY3JlZGVudGlhbGxlc3Mtc3RhdGljYmxp'@;
put 'dHouY29tIiwidy1zdGF0aWNibGl0ei5jb20iLCJzdGFja2hlcm8tbmV0d29yay5jb20iLCJydW5zLm9uc3RhY2tpdC5jbG91ZCIsInN0YWNraXQuZ2ciLCJzdGFja2l0LnJvY2tzIiwic3RhY2tpdC5ydW4iLCJzdGFja2l0LnpvbmUiLCJtdXNpY2lhbi5pbyIsIm5vdmVjb3JlLnNpdGUiLCJh'@;
put 'cGkuc3RkbGliLmNvbSIsImZlZWRiYWNrLmFjIiwiZm9ybXMuYWMiLCJhc3Nlc3NtZW50cy5jeCIsImNhbGN1bGF0b3JzLmN4IiwiZnVubmVscy5jeCIsInBheW5vdy5jeCIsInF1aXp6ZXMuY3giLCJyZXNlYXJjaGVkLmN4IiwidGVzdHMuY3giLCJzdXJ2ZXlzLnNvIiwic3RvcmViYXNlLnN0'@;
put 'b3JlIiwic3RvcmlwcmVzcy5hcHAiLCJzdG9yai5mYXJtIiwic3RyYXBpYXBwLmNvbSIsIm1lZGlhLnN0cmFwaWFwcC5jb20iLCJ2cHMtaG9zdC5uZXQiLCJhdGwuamVsYXN0aWMudnBzLWhvc3QubmV0IiwibmpzLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsInJpYy5qZWxhc3RpYy52cHMtaG9z'@;
put 'dC5uZXQiLCJzdHJlYWstbGluay5jb20iLCJzdHJlYWtsaW5rcy5jb20iLCJzdHJlYWt1c2VyY29udGVudC5jb20iLCJzb2Muc3JjZi5uZXQiLCJ1c2VyLnNyY2YubmV0IiwidXR3ZW50ZS5pbyIsInRlbXAtZG5zLmNvbSIsInN1cGFiYXNlLmNvIiwic3VwYWJhc2UuaW4iLCJzdXBhYmFzZS5u'@;
put 'ZXQiLCJzeW5jbG91ZC5pdCIsImRzY2xvdWQuYml6IiwiZGlyZWN0LnF1aWNrY29ubmVjdC5jbiIsImRzbXluYXMuY29tIiwiZmFtaWx5ZHMuY29tIiwiZGlza3N0YXRpb24ubWUiLCJkc2Nsb3VkLm1lIiwiaTIzNC5tZSIsIm15ZHMubWUiLCJzeW5vbG9neS5tZSIsImRzY2xvdWQubW9iaSIs'@;
put 'ImRzbXluYXMubmV0IiwiZmFtaWx5ZHMubmV0IiwiZHNteW5hcy5vcmciLCJmYW1pbHlkcy5vcmciLCJkaXJlY3QucXVpY2tjb25uZWN0LnRvIiwidnBucGx1cy50byIsIm15dGFiaXQuY29tIiwibXl0YWJpdC5jby5pbCIsInRhYml0b3JkZXIuY28uaWwiLCJ0YWlmdW4tZG5zLmRlIiwidHMu'@;
put 'bmV0IiwiKi5jLnRzLm5ldCIsImdkYS5wbCIsImdkYW5zay5wbCIsImdkeW5pYS5wbCIsIm1lZC5wbCIsInNvcG90LnBsIiwidGF2ZXVzZXJjb250ZW50LmNvbSIsInAudGF3ay5lbWFpbCIsInAudGF3a3RvLmVtYWlsIiwic2l0ZS50Yi1ob3N0aW5nLmNvbSIsImVkdWdpdC5pbyIsInMzLnRl'@;
put 'Y2tpZHMub3JnIiwidGVsZWJpdC5hcHAiLCJ0ZWxlYml0LmlvIiwiKi50ZWxlYml0Lnh5eiIsIiouZmlyZW5ldC5jaCIsIiouc3ZjLmZpcmVuZXQuY2giLCJyZXNlcnZkLmNvbSIsInRoaW5nZHVzdGRhdGEuY29tIiwiY3VzdC5kZXYudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kZXYudGhpbmdk'@;
put 'dXN0LmlvIiwiY3VzdC5kaXNyZWMudGhpbmdkdXN0LmlvIiwicmVzZXJ2ZC5kaXNyZWMudGhpbmdkdXN0LmlvIiwiY3VzdC5wcm9kLnRoaW5nZHVzdC5pbyIsImN1c3QudGVzdGluZy50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLnRlc3RpbmcudGhpbmdkdXN0LmlvIiwidGlja2V0cy5pbyIsImFy'@;
put 'dm8ubmV0d29yayIsImF6aW11dGgubmV0d29yayIsInRsb24ubmV0d29yayIsInRvcnByb2plY3QubmV0IiwicGFnZXMudG9ycHJvamVjdC5uZXQiLCJ0b3dubmV3cy1zdGFnaW5nLmNvbSIsIjEyaHAuYXQiLCIyaXguYXQiLCI0bGltYS5hdCIsImxpbWEtY2l0eS5hdCIsIjEyaHAuY2giLCIy'@;
put 'aXguY2giLCI0bGltYS5jaCIsImxpbWEtY2l0eS5jaCIsInRyYWZmaWNwbGV4LmNsb3VkIiwiZGUuY29vbCIsIjEyaHAuZGUiLCIyaXguZGUiLCI0bGltYS5kZSIsImxpbWEtY2l0eS5kZSIsIjEzMzcucGljdHVyZXMiLCJjbGFuLnJpcCIsImxpbWEtY2l0eS5yb2NrcyIsIndlYnNwYWNlLnJv'@;
put 'Y2tzIiwibGltYS56b25lIiwiKi50cmFuc3VybC5iZSIsIioudHJhbnN1cmwuZXUiLCJzaXRlLnRyYW5zaXAubWUiLCIqLnRyYW5zdXJsLm5sIiwidHV4ZmFtaWx5Lm9yZyIsImRkLWRucy5kZSIsImRyYXktZG5zLmRlIiwiZHJheWRucy5kZSIsImR5bi12cG4uZGUiLCJkeW52cG4uZGUiLCJt'@;
put 'ZWluLXZpZ29yLmRlIiwibXktdmlnb3IuZGUiLCJteS13YW4uZGUiLCJzeW5vLWRzLmRlIiwic3lub2xvZ3ktZGlza3N0YXRpb24uZGUiLCJzeW5vbG9neS1kcy5kZSIsImRpc2tzdGF0aW9uLmV1IiwiZGlza3N0YXRpb24ub3JnIiwidHlwZWRyZWFtLmFwcCIsInByby50eXBlZm9ybS5jb20i'@;
put 'LCIqLnViZXJzcGFjZS5kZSIsInViZXIuc3BhY2UiLCJoay5jb20iLCJpbmMuaGsiLCJsdGQuaGsiLCJoay5vcmciLCJpdC5jb20iLCJ1bmlzb24tc2VydmljZXMuY2xvdWQiLCJ2aXJ0dWFsLXVzZXIuZGUiLCJ2aXJ0dWFsdXNlci5kZSIsIm5hbWUucG0iLCJzY2gudGYiLCJiaXoud2YiLCJz'@;
put 'Y2gud2YiLCJvcmcueXQiLCJycy5iYSIsImJpZWxza28ucGwiLCJ1cGxpLmlvIiwidXJvd24uY2xvdWQiLCJkbnN1cGRhdGUuaW5mbyIsInVzLm9yZyIsInYudWEiLCJleHByZXNzLnZhbC5ydW4iLCJ3ZWIudmFsLnJ1biIsInZlcmNlbC5hcHAiLCJ2MC5idWlsZCIsInZlcmNlbC5kZXYiLCJ2'@;
put 'dXNlcmNvbnRlbnQubmV0Iiwibm93LnNoIiwiMjAzOC5pbyIsInJvdXRlci5tYW5hZ2VtZW50Iiwidi1pbmZvLmluZm8iLCJ2b29ybG9wZXIuY2xvdWQiLCIqLnZ1bHRyb2JqZWN0cy5jb20iLCJ3YWZmbGVjZWxsLmNvbSIsIndlYmZsb3cuaW8iLCJ3ZWJmbG93dGVzdC5pbyIsIioud2ViaGFy'@;
put 'ZS5kZXYiLCJib29rb25saW5lLmFwcCIsImhvdGVsd2l0aGZsaWdodC5jb20iLCJyZXNlcnZlLW9ubGluZS5jb20iLCJyZXNlcnZlLW9ubGluZS5uZXQiLCJjcHJhcGlkLmNvbSIsInBsZXNrbnMuY29tIiwid3AyLmhvc3QiLCJwZG5zLnBhZ2UiLCJwbGVzay5wYWdlIiwid3BzcXVhcmVkLnNp'@;
put 'dGUiLCIqLndhZGwudG9wIiwicmVtb3Rld2QuY29tIiwiYm94LmNhIiwicGFnZXMud2lhcmR3ZWIuY29tIiwidG9vbGZvcmdlLm9yZyIsIndtY2xvdWQub3JnIiwid21mbGFicy5vcmciLCJ3ZGguYXBwIiwicGFuZWwuZ2ciLCJkYWVtb24ucGFuZWwuZ2ciLCJ3aXhzaXRlLmNvbSIsIndpeHN0'@;
put 'dWRpby5jb20iLCJlZGl0b3J4LmlvIiwid2l4c3R1ZGlvLmlvIiwid2l4LnJ1biIsIm1lc3N3aXRoZG5zLmNvbSIsIndvbHRsYWItZGVtby5jb20iLCJteWZvcnVtLmNvbW11bml0eSIsImNvbW11bml0eS1wcm8uZGUiLCJkaXNrdXNzaW9uc2JlcmVpY2guZGUiLCJjb21tdW5pdHktcHJvLm5l'@;
put 'dCIsIm1laW5mb3J1bS5uZXQiLCJhZmZpbml0eWxvdHRlcnkub3JnLnVrIiwicmFmZmxlZW50cnkub3JnLnVrIiwid2Vla2x5bG90dGVyeS5vcmcudWsiLCJ3cGVuZ2luZXBvd2VyZWQuY29tIiwianMud3BlbmdpbmVwb3dlcmVkLmNvbSIsImhhbGYuaG9zdCIsInhuYmF5LmNvbSIsInUyLnhu'@;
put 'YmF5LmNvbSIsInUyLWxvY2FsLnhuYmF5LmNvbSIsImNpc3Ryb24ubmwiLCJkZW1vbi5ubCIsInhzNGFsbC5zcGFjZSIsInlhbmRleGNsb3VkLm5ldCIsInN0b3JhZ2UueWFuZGV4Y2xvdWQubmV0Iiwid2Vic2l0ZS55YW5kZXhjbG91ZC5uZXQiLCJvZmZpY2lhbC5hY2FkZW15IiwieW9sYXNp'@;
put 'dGUuY29tIiwieW9tYm8ubWUiLCJ5bmguZnIiLCJub2hvc3QubWUiLCJub2hvLnN0IiwiemEubmV0IiwiemEub3JnIiwiemFwLmNsb3VkIiwiemVhYnVyLmFwcCIsImJzcy5kZXNpZ24iLCJiYXNpY3NlcnZlci5pbyIsInZpcnR1YWxzZXJ2ZXIuaW8iLCJlbnRlcnByaXNlY2xvdWQubnUiXS5y'@;
put 'ZWR1Y2UoKFksWCk9Pntjb25zdCBlZT1YLnJlcGxhY2UoL14oXCpcLnxcISkvLCIiKSxKPXcudG9BU0NJSShlZSkscmU9WC5jaGFyQXQoMCk7aWYoWS5oYXMoSikpdGhyb3cgbmV3IEVycm9yKGBNdWx0aXBsZSBydWxlcyBmb3VuZCBmb3IgJHtYfSAoJHtKfSlgKTtyZXR1cm4gWS5zZXQoSix7'@;
put 'cnVsZTpYLHN1ZmZpeDplZSxwdW55U3VmZml4Okosd2lsZGNhcmQ6IioiPT09cmUsZXhjZXB0aW9uOiIhIj09PXJlfSksWX0sbmV3IE1hcCksej17RE9NQUlOX1RPT19TSE9SVDoiRG9tYWluIG5hbWUgdG9vIHNob3J0LiIsRE9NQUlOX1RPT19MT05HOiJEb21haW4gbmFtZSB0b28gbG9uZy4g'@;
put 'SXQgc2hvdWxkIGJlIG5vIG1vcmUgdGhhbiAyNTUgY2hhcnMuIixMQUJFTF9TVEFSVFNfV0lUSF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IHN0YXJ0IHdpdGggYSBkYXNoLiIsTEFCRUxfRU5EU19XSVRIX0RBU0g6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBub3QgZW5kIHdpdGgg'@;
put 'YSBkYXNoLiIsTEFCRUxfVE9PX0xPTkc6IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBtb3N0IDYzIGNoYXJzIGxvbmcuIixMQUJFTF9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIGxhYmVsIHNob3VsZCBiZSBhdCBsZWFzdCAxIGNoYXJhY3RlciBsb25nLiIsTEFCRUxfSU5WQUxJRF9D'@;
put 'SEFSUzoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvciBkYXNoZXMuIn0sTD1ZPT57aWYoInN0cmluZyIhPXR5cGVvZiBZKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcuIik7bGV0IFg9'@;
put 'WS5zbGljZSgwKS50b0xvd2VyQ2FzZSgpOyIuIj09PVguY2hhckF0KFgubGVuZ3RoLTEpJiYoWD1YLnNsaWNlKDAsWC5sZW5ndGgtMSkpO2NvbnN0IGVlPShZPT57Y29uc3QgWD13LnRvQVNDSUkoWSk7aWYoWC5sZW5ndGg8MSlyZXR1cm4iRE9NQUlOX1RPT19TSE9SVCI7aWYoWC5sZW5ndGg+'@;
put 'MjU1KXJldHVybiJET01BSU5fVE9PX0xPTkciO2NvbnN0IGVlPVguc3BsaXQoIi4iKTtsZXQgSjtmb3IobGV0IHJlPTA7cmU8ZWUubGVuZ3RoOysrcmUpe2lmKEo9ZWVbcmVdLCFKLmxlbmd0aClyZXR1cm4iTEFCRUxfVE9PX1NIT1JUIjtpZihKLmxlbmd0aD42MylyZXR1cm4iTEFCRUxfVE9P'@;
put 'X0xPTkciO2lmKCItIj09PUouY2hhckF0KDApKXJldHVybiJMQUJFTF9TVEFSVFNfV0lUSF9EQVNIIjtpZigiLSI9PT1KLmNoYXJBdChKLmxlbmd0aC0xKSlyZXR1cm4iTEFCRUxfRU5EU19XSVRIX0RBU0giO2lmKCEvXlthLXowLTlcLV9dKyQvLnRlc3QoSikpcmV0dXJuIkxBQkVMX0lOVkFM'@;
put 'SURfQ0hBUlMifX0pKFgpO2lmKGVlKXJldHVybntpbnB1dDpZLGVycm9yOnttZXNzYWdlOnpbZWVdLGNvZGU6ZWV9fTtjb25zdCBKPXtpbnB1dDpZLHRsZDpudWxsLHNsZDpudWxsLGRvbWFpbjpudWxsLHN1YmRvbWFpbjpudWxsLGxpc3RlZDohMX0scmU9WC5zcGxpdCgiLiIpO2lmKCJsb2Nh'@;
put 'bCI9PT1yZVtyZS5sZW5ndGgtMV0pcmV0dXJuIEo7Y29uc3QgaWU9KCk9PigveG4tLS8udGVzdChYKSYmKEouZG9tYWluJiYoSi5kb21haW49dy50b0FTQ0lJKEouZG9tYWluKSksSi5zdWJkb21haW4mJihKLnN1YmRvbWFpbj13LnRvQVNDSUkoSi5zdWJkb21haW4pKSksSiksbGU9KFk9Pntj'@;
put 'b25zdCBYPXcudG9BU0NJSShZKS5zcGxpdCgiLiIpO2ZvcihsZXQgZWU9MDtlZTxYLmxlbmd0aDtlZSsrKXtjb25zdCBKPVguc2xpY2UoZWUpLmpvaW4oIi4iKSxyZT1GLmdldChKKTtpZihyZSlyZXR1cm4gcmV9cmV0dXJuIG51bGx9KShYKTtpZighbGUpcmV0dXJuIHJlLmxlbmd0aDwyP0o6'@;
put 'KEoudGxkPXJlLnBvcCgpLEouc2xkPXJlLnBvcCgpLEouZG9tYWluPVtKLnNsZCxKLnRsZF0uam9pbigiLiIpLHJlLmxlbmd0aCYmKEouc3ViZG9tYWluPXJlLnBvcCgpKSxpZSgpKTtKLmxpc3RlZD0hMDtjb25zdCBtZT1sZS5zdWZmaXguc3BsaXQoIi4iKSxfZT1yZS5zbGljZSgwLHJlLmxl'@;
put 'bmd0aC1tZS5sZW5ndGgpO3JldHVybiBsZS5leGNlcHRpb24mJl9lLnB1c2gobWUuc2hpZnQoKSksSi50bGQ9bWUuam9pbigiLiIpLCFfZS5sZW5ndGh8fChsZS53aWxkY2FyZCYmKG1lLnVuc2hpZnQoX2UucG9wKCkpLEoudGxkPW1lLmpvaW4oIi4iKSksIV9lLmxlbmd0aCl8fChKLnNsZD1f'@;
put 'ZS5wb3AoKSxKLmRvbWFpbj1bSi5zbGQsSi50bGRdLmpvaW4oIi4iKSxfZS5sZW5ndGgmJihKLnN1YmRvbWFpbj1fZS5qb2luKCIuIikpKSxpZSgpfSxLPVk9PlkmJkwoWSkuZG9tYWlufHxudWxsLFU9WT0+e2NvbnN0IFg9TChZKTtyZXR1cm4hKCFYLmRvbWFpbnx8IVgubGlzdGVkKX07cS5k'@;
put 'ZWZhdWx0PXtwYXJzZTpMLGdldDpLLGlzVmFsaWQ6VX0scS5lcnJvckNvZGVzPXoscS5nZXQ9SyxxLmlzVmFsaWQ9VSxxLnBhcnNlPUx9LDQ5NDY6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFlcy0xMjgtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4'@;
put 'LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjowLCJtb2Rl'@;
put 'IjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5'@;
put 'cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczEyOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFl'@;
put 'czE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczI1NiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNpcGhlciI6'@;
put 'IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtl'@;
put 'eSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTky'@;
put 'LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYi'@;
put 'OjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwi'@;
put 'bW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJP'@;
put 'RkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBl'@;
put 'Ijoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFt'@;
put 'In0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTI1Ni1n'@;
put 'Y20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn19Jyl9LDUyMDc6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7InNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoi'@;
put 'c2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJSU0EtU0hBMjI0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJzaGEyNTZXaXRoUlNB'@;
put 'RW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwiUlNBLVNIQTI1NiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2'@;
put 'NTAzMDQwMjAxMDUwMDA0MjAifSwic2hhMzg0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sIlJTQS1TSEEzODQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJz'@;
put 'aGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hB'@;
put 'NTEyIjp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBMSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNCJ9'@;
put 'LCJlY2RzYS13aXRoLVNIQTEiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJzaGEyNTYiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sInNoYTIyNCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwic2hhMzg0'@;
put 'Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJzaGE1MTIiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVNIQTEiOnsic2lnbiI6ImRzYSIs'@;
put 'Imhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTIyNCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQi'@;
put 'LCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0'@;
put 'IiwiaWQiOiIifSwiRFNBLVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTUxMiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJp'@;
put 'ZCI6IiJ9LCJEU0EtUklQRU1EMTYwIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIifSwicmlwZW1kMTYwV2l0aFJTQSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIlJTQS1SSVBFTUQxNjAi'@;
put 'Onsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJtZDVXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn0s'@;
put 'IlJTQS1NRDUiOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9fScpfSwxMzA4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIxLjMuMTMyLjAuMTAiOiJzZWNwMjU2azEiLCIxLjMu'@;
put 'MTMyLjAuMzMiOiJwMjI0IiwiMS4yLjg0MC4xMDA0NS4zLjEuMSI6InAxOTIiLCIxLjIuODQwLjEwMDQ1LjMuMS43IjoicDI1NiIsIjEuMy4xMzIuMC4zNCI6InAzODQiLCIxLjMuMTMyLjAuMzUiOiJwNTIxIn0nKX0sMzIwODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFy'@;
put 'c2UoJ3siT19SRE9OTFkiOjAsIk9fV1JPTkxZIjoxLCJPX1JEV1IiOjIsIlNfSUZNVCI6NjE0NDAsIlNfSUZSRUciOjMyNzY4LCJTX0lGRElSIjoxNjM4NCwiU19JRkNIUiI6ODE5MiwiU19JRkJMSyI6MjQ1NzYsIlNfSUZJRk8iOjQwOTYsIlNfSUZMTksiOjQwOTYwLCJTX0lGU09DSyI6NDkx'@;
put 'NTIsIk9fQ1JFQVQiOjUxMiwiT19FWENMIjoyMDQ4LCJPX05PQ1RUWSI6MTMxMDcyLCJPX1RSVU5DIjoxMDI0LCJPX0FQUEVORCI6OCwiT19ESVJFQ1RPUlkiOjEwNDg1NzYsIk9fTk9GT0xMT1ciOjI1NiwiT19TWU5DIjoxMjgsIk9fU1lNTElOSyI6MjA5NzE1MiwiT19OT05CTE9DSyI6NCwi'@;
put 'U19JUldYVSI6NDQ4LCJTX0lSVVNSIjoyNTYsIlNfSVdVU1IiOjEyOCwiU19JWFVTUiI6NjQsIlNfSVJXWEciOjU2LCJTX0lSR1JQIjozMiwiU19JV0dSUCI6MTYsIlNfSVhHUlAiOjgsIlNfSVJXWE8iOjcsIlNfSVJPVEgiOjQsIlNfSVdPVEgiOjIsIlNfSVhPVEgiOjEsIkUyQklHIjo3LCJF'@;
put 'QUNDRVMiOjEzLCJFQUREUklOVVNFIjo0OCwiRUFERFJOT1RBVkFJTCI6NDksIkVBRk5PU1VQUE9SVCI6NDcsIkVBR0FJTiI6MzUsIkVBTFJFQURZIjozNywiRUJBREYiOjksIkVCQURNU0ciOjk0LCJFQlVTWSI6MTYsIkVDQU5DRUxFRCI6ODksIkVDSElMRCI6MTAsIkVDT05OQUJPUlRFRCI6'@;
put 'NTMsIkVDT05OUkVGVVNFRCI6NjEsIkVDT05OUkVTRVQiOjU0LCJFREVBRExLIjoxMSwiRURFU1RBRERSUkVRIjozOSwiRURPTSI6MzMsIkVEUVVPVCI6NjksIkVFWElTVCI6MTcsIkVGQVVMVCI6MTQsIkVGQklHIjoyNywiRUhPU1RVTlJFQUNIIjo2NSwiRUlEUk0iOjkwLCJFSUxTRVEiOjky'@;
put 'LCJFSU5QUk9HUkVTUyI6MzYsIkVJTlRSIjo0LCJFSU5WQUwiOjIyLCJFSU8iOjUsIkVJU0NPTk4iOjU2LCJFSVNESVIiOjIxLCJFTE9PUCI6NjIsIkVNRklMRSI6MjQsIkVNTElOSyI6MzEsIkVNU0dTSVpFIjo0MCwiRU1VTFRJSE9QIjo5NSwiRU5BTUVUT09MT05HIjo2MywiRU5FVERPV04i'@;
put 'OjUwLCJFTkVUUkVTRVQiOjUyLCJFTkVUVU5SRUFDSCI6NTEsIkVORklMRSI6MjMsIkVOT0JVRlMiOjU1LCJFTk9EQVRBIjo5NiwiRU5PREVWIjoxOSwiRU5PRU5UIjoyLCJFTk9FWEVDIjo4LCJFTk9MQ0siOjc3LCJFTk9MSU5LIjo5NywiRU5PTUVNIjoxMiwiRU5PTVNHIjo5MSwiRU5PUFJP'@;
put 'VE9PUFQiOjQyLCJFTk9TUEMiOjI4LCJFTk9TUiI6OTgsIkVOT1NUUiI6OTksIkVOT1NZUyI6NzgsIkVOT1RDT05OIjo1NywiRU5PVERJUiI6MjAsIkVOT1RFTVBUWSI6NjYsIkVOT1RTT0NLIjozOCwiRU5PVFNVUCI6NDUsIkVOT1RUWSI6MjUsIkVOWElPIjo2LCJFT1BOT1RTVVBQIjoxMDIs'@;
put 'IkVPVkVSRkxPVyI6ODQsIkVQRVJNIjoxLCJFUElQRSI6MzIsIkVQUk9UTyI6MTAwLCJFUFJPVE9OT1NVUFBPUlQiOjQzLCJFUFJPVE9UWVBFIjo0MSwiRVJBTkdFIjozNCwiRVJPRlMiOjMwLCJFU1BJUEUiOjI5LCJFU1JDSCI6MywiRVNUQUxFIjo3MCwiRVRJTUUiOjEwMSwiRVRJTUVET1VU'@;
put 'Ijo2MCwiRVRYVEJTWSI6MjYsIkVXT1VMREJMT0NLIjozNSwiRVhERVYiOjE4LCJTSUdIVVAiOjEsIlNJR0lOVCI6MiwiU0lHUVVJVCI6MywiU0lHSUxMIjo0LCJTSUdUUkFQIjo1LCJTSUdBQlJUIjo2LCJTSUdJT1QiOjYsIlNJR0JVUyI6MTAsIlNJR0ZQRSI6OCwiU0lHS0lMTCI6OSwiU0lH'@;
put 'VVNSMSI6MzAsIlNJR1NFR1YiOjExLCJTSUdVU1IyIjozMSwiU0lHUElQRSI6MTMsIlNJR0FMUk0iOjE0LCJTSUdURVJNIjoxNSwiU0lHQ0hMRCI6MjAsIlNJR0NPTlQiOjE5LCJTSUdTVE9QIjoxNywiU0lHVFNUUCI6MTgsIlNJR1RUSU4iOjIxLCJTSUdUVE9VIjoyMiwiU0lHVVJHIjoxNiwi'@;
put 'U0lHWENQVSI6MjQsIlNJR1hGU1oiOjI1LCJTSUdWVEFMUk0iOjI2LCJTSUdQUk9GIjoyNywiU0lHV0lOQ0giOjI4LCJTSUdJTyI6MjMsIlNJR1NZUyI6MTIsIlNTTF9PUF9BTEwiOjIxNDc0ODY3MTksIlNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT04iOjI2MjE0NCwi'@;
put 'U1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSI6NDE5NDMwNCwiU1NMX09QX0NJU0NPX0FOWUNPTk5FQ1QiOjMyNzY4LCJTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFIjo4MTkyLCJTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUciOjIxNDc0ODM2NDgsIlNTTF9PUF9ET05UX0lOU0VSVF9F'@;
put 'TVBUWV9GUkFHTUVOVFMiOjIwNDgsIlNTTF9PUF9FUEhFTUVSQUxfUlNBIjowLCJTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUIjo0LCJTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIiOjMyLCJTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHIjoxLCJTU0xfT1BfTVNJRV9T'@;
put 'U0xWMl9SU0FfUEFERElORyI6MCwiU1NMX09QX05FVFNDQVBFX0NBX0ROX0JVRyI6NTM2ODcwOTEyLCJTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRyI6MiwiU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUciOjEwNzM3NDE4MjQsIlNTTF9PUF9ORVRTQ0FQRV9SRVVT'@;
put 'RV9DSVBIRVJfQ0hBTkdFX0JVRyI6OCwiU1NMX09QX05PX0NPTVBSRVNTSU9OIjoxMzEwNzIsIlNTTF9PUF9OT19RVUVSWV9NVFUiOjQwOTYsIlNTTF9PUF9OT19TRVNTSU9OX1JFU1VNUFRJT05fT05fUkVORUdPVElBVElPTiI6NjU1MzYsIlNTTF9PUF9OT19TU0x2MiI6MTY3NzcyMTYsIlNT'@;
put 'TF9PUF9OT19TU0x2MyI6MzM1NTQ0MzIsIlNTTF9PUF9OT19USUNLRVQiOjE2Mzg0LCJTU0xfT1BfTk9fVExTdjEiOjY3MTA4ODY0LCJTU0xfT1BfTk9fVExTdjFfMSI6MjY4NDM1NDU2LCJTU0xfT1BfTk9fVExTdjFfMiI6MTM0MjE3NzI4LCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMSI6MCwiU1NM'@;
put 'X09QX1BLQ1MxX0NIRUNLXzIiOjAsIlNTTF9PUF9TSU5HTEVfREhfVVNFIjoxMDQ4NTc2LCJTU0xfT1BfU0lOR0xFX0VDREhfVVNFIjo1MjQyODgsIlNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUciOjEyOCwiU1NMX09QX1NTTFJFRjJfUkVVU0VfQ0VSVF9UWVBFX0JVRyI6MCwiU1NM'@;
put 'X09QX1RMU19CTE9DS19QQURESU5HX0JVRyI6NTEyLCJTU0xfT1BfVExTX0Q1X0JVRyI6MjU2LCJTU0xfT1BfVExTX1JPTExCQUNLX0JVRyI6ODM4ODYwOCwiRU5HSU5FX01FVEhPRF9EU0EiOjIsIkVOR0lORV9NRVRIT0RfREgiOjQsIkVOR0lORV9NRVRIT0RfUkFORCI6OCwiRU5HSU5FX01F'@;
put 'VEhPRF9FQ0RIIjoxNiwiRU5HSU5FX01FVEhPRF9FQ0RTQSI6MzIsIkVOR0lORV9NRVRIT0RfQ0lQSEVSUyI6NjQsIkVOR0lORV9NRVRIT0RfRElHRVNUUyI6MTI4LCJFTkdJTkVfTUVUSE9EX1NUT1JFIjoyNTYsIkVOR0lORV9NRVRIT0RfUEtFWV9NRVRIUyI6NTEyLCJFTkdJTkVfTUVUSE9E'@;
put 'X1BLRVlfQVNOMV9NRVRIUyI6MTAyNCwiRU5HSU5FX01FVEhPRF9BTEwiOjY1NTM1LCJFTkdJTkVfTUVUSE9EX05PTkUiOjAsIkRIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUUiOjIsIkRIX0NIRUNLX1BfTk9UX1BSSU1FIjoxLCJESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SIjo0LCJESF9O'@;
put 'T1RfU1VJVEFCTEVfR0VORVJBVE9SIjo4LCJOUE5fRU5BQkxFRCI6MSwiUlNBX1BLQ1MxX1BBRERJTkciOjEsIlJTQV9TU0xWMjNfUEFERElORyI6MiwiUlNBX05PX1BBRERJTkciOjMsIlJTQV9QS0NTMV9PQUVQX1BBRERJTkciOjQsIlJTQV9YOTMxX1BBRERJTkciOjUsIlJTQV9QS0NTMV9Q'@;
put 'U1NfUEFERElORyI6NiwiUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVTU0VEIjoyLCJQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRCI6NCwiUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQiOjYsIkZfT0siOjAsIlJfT0siOjQsIldfT0siOjIsIlhfT0siOjEsIlVWX1VEUF9SRVVTRUFERFIiOjR9'@;
put 'Jyl9LDk3OTk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7Im1vZHAxIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEw'@;
put 'ODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDIiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIx'@;
put 'NjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2Yjdl'@;
put 'ZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBi'@;
put 'YmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFl'@;
put 'Y2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTQiOnsi'@;
put 'Z2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0'@;
put 'ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1'@;
put 'NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZh'@;
put 'MDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRk'@;
put 'ZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0'@;
put 'ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZm'@;
put 'NGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNk'@;
put 'NzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZm'@;
put 'ZmZmZmZmZmZmZmZmIn0sIm1vZHAxNiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZk'@;
put 'ZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRj'@;
put 'ZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5'@;
put 'OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIy'@;
put 'NjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJh'@;
put 'NWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNk'@;
put 'MDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTciOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0'@;
put 'ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdj'@;
put 'NGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2Uz'@;
put 'YmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVh'@;
put 'NzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3'@;
put 'NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMw'@;
put 'NWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3'@;
put 'NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAx'@;
put 'YzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAz'@;
put 'N2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZiJ9'@;
put 'LCJtb2RwMTgiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1'@;
put 'NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNh'@;
put 'M2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1'@;
put 'MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZm'@;
put 'YTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZh'@;
put 'ZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFh'@;
put 'OTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNl'@;
put 'ZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2Zi'@;
put 'ZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2'@;
put 'MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2Fh'@;
put 'YjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1'@;
put 'YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUz'@;
put 'ODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmIn19Jyl9LDg1OTc6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17aTg6IjYuNi4xIn19LDI1NjI6dWU9Pnsi'@;
put 'dXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEu'@;
put 'MTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMu'@;
put 'NC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40'@;
put 'NCI6ImFlcy0yNTYtY2ZiIn0nKX19LF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg4OTE3NF9fKHVlKXt2YXIgcT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdWVdO2lmKHZvaWQgMCE9PXEpcmV0dXJuIHEuZXhwb3J0czt2'@;
put 'YXIgXz1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdWVdPXtpZDp1ZSxsb2FkZWQ6ITEsZXhwb3J0czp7fX07cmV0dXJuIF9fd2VicGFja19tb2R1bGVzX19bdWVdLmNhbGwoXy5leHBvcnRzLF8sXy5leHBvcnRzLF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODg5MTc0X18pLF8ubG9hZGVk'@;
put 'PSEwLF8uZXhwb3J0c31fX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg4OTE3NF9fLmQ9KHVlLHEpPT57Zm9yKHZhciBfIGluIHEpX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4ODkxNzRfXy5vKHEsXykmJiFfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg4OTE3NF9fLm8odWUsXykmJk9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eSh1ZSxfLHtlbnVtZXJhYmxlOiEwLGdldDpxW19dfSl9LF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODg5MTc0X18uZz1mdW5jdGlvbigpe2lmKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8'@;
put 'fG5ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoe2lmKCJvYmplY3QiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODg5MTc0X18ubz0odWUscSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh1'@;
put 'ZSxxKSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg4OTE3NF9fLnI9dWU9Pnt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eSh1ZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LF9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODg5MTc0X18ubm1kPXVlPT4odWUucGF0aHM9W10sdWUuY2hpbGRyZW58fCh1ZS5jaGlsZHJlbj1bXSksdWUpO3ZhciBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfXz1fX25lc3RlZF93'@;
put 'ZWJwYWNrX3JlcXVpcmVfMjg4OTE3NF9fKDM2MDcpO3JldHVybiBfX25lc3RlZF93ZWJwYWNrX2V4cG9ydHNfX30pKCksbW9kdWxlLmV4cG9ydHM9XygpfSw1OTQ4OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlv'@;
put 'bihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmlzU3BlY2lhbE1pc3Npbmc9cS5jaG9pY2VWYWxpZGF0b3I9cS5jb25maXJtYXRpb25WYWxpZGF0b3I9cS51cmxWYWxpZGF0'@;
put 'b3I9dm9pZCAwO2NvbnN0IHk9SShfKDEyOTU0KSk7cS51cmxWYWxpZGF0b3I9KEYsTyk9PiEheS5kZWZhdWx0LmlzSHR0cFVyaShGKXx8ISF5LmRlZmF1bHQuaXNIdHRwc1VyaShGKXx8IiI9PT1GfHxPLHEuY29uZmlybWF0aW9uVmFsaWRhdG9yPUY9PiEwPT09Rnx8ITE9PT1GLHEuY2hvaWNl'@;
put 'VmFsaWRhdG9yPShGLE8seik9PkY+MCYmRjw9T3x8eixxLmlzU3BlY2lhbE1pc3Npbmc9Rj0+KCJzdHJpbmciIT10eXBlb2YgRnx8IUYuaW5jbHVkZXMoIi4uIikpJiZuZXcgUmVnRXhwKCJeKFxcLik/W2Etel8uXXsxfSQiLCJpIikudGVzdChGKX0sMTMyNDc6KHVlLHEpPT57InVzZSBzdHJp'@;
put 'Y3QiO3ZhciB5O3EuWT12b2lkIDAsKHk9cS5ZfHwocS5ZPXt9KSkuU2FzVml5YT0iU0FTVklZQSIseS5TYXM5PSJTQVM5Iix5LlNhc2pzPSJTQVNKUyJ9LDI1MDAxOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtxLkM9dm9pZCAwLHEuQz0oeSxnPTEsQj0xMDk5NTExNjI3Nzc2KT0+e2lmKDA9PT15'@;
put 'KXJldHVybiIwIEIiO3k9eT5CP0I6eTtjb25zdCBGPWc8MD8wOmcsTz1NYXRoLmZsb29yKE1hdGgubG9nKHkpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oeS9NYXRoLnBvdygxMDI0LE8pKS50b0ZpeGVkKEYpKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW09dfX0sNDI5MjQ6ZnVuY3Rp'@;
put 'b24odWUpe3ZhciBxPXt2ZXJzaW9uOiIxLjE1LjAifTtxWzQzN109ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4'@;
put 'MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4'@;
put 'ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhhMlx4YTNceGE1XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUy'@;
put 'NTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZj'@;
put 'XHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlc'@;
put 'dTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYm'@;
put 'KHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzYyMF09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgx'@;
put 'Nlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHUw'@;
put 'MTA1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTA3XHhjNFx1MDEwNFx1MDExOFx1MDExOVx1MDE0Mlx4ZjRceGY2XHUwMTA2XHhmYlx4ZjlcdTAxNWFceGQ2XHhkY1x4YTJcdTAxNDFceGE1XHUwMTViXHUwMTkyXHUwMTc5XHUwMTdiXHhmM1x4ZDNcdTAxNDRcdTAxNDNcdTAxN2FcdTAx'@;
put 'N2NceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUy'@;
put 'NTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2Ix'@;
put 'XHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVh'@;
put 'MFx4YTAiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzczN109ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4'@;
put 'MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNk'@;
put 'ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUw'@;
put 'M2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTky'@;
put 'XHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUy'@;
put 'NTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2Ni'@;
put 'XHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNo'@;
put 'YXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVs4NTBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4'@;
put 'MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4'@;
put 'ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZceGFlXHhhY1x4YmRc'@;
put 'eGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1'@;
put 'NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTAxMzFceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhkOVx4ZmRceGRkXHhhZlx4YjRc'@;
put 'eGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5j'@;
put 'OnksZGVjOkl9fSgpLHFbODUyXT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYn'@;
put 'KCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUxXHhlZVx1MDE3OVx4YzRc'@;
put 'dTAxMDZceGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3YVx1MDEwY1x1MDE1Zlx4'@;
put 'YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1NWFcdTI1NTRcdTI1Njlc'@;
put 'dTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUwMTYwXHUwMTYxXHUwMTU0'@;
put 'XHhkYVx1MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChn'@;
put 'KSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzg1N109ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1'@;
put 'XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUw'@;
put 'XHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEzMVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlcdTAxMzBceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MDE1ZVx1MDE1Zlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx1MDExZVx1MDExZlx4YmZceGFlXHhhY1x4YmRc'@;
put 'eGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1'@;
put 'NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhiYVx4YWFceGNhXHhjYlx4YzhcdWZmZmRceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVcdWZmZmRceGQ3XHhkYVx4ZGJceGQ5XHhlY1x4ZmZceGFmXHhi'@;
put 'NFx4YWRceGIxXHVmZmZkXHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntl'@;
put 'bmM6eSxkZWM6SX19KCkscVs4NjFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQl'@;
put 'JicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhkMFx4ZjBceGRlXHhjNFx4YzVceGM5XHhl'@;
put 'Nlx4YzZceGY0XHhmNlx4ZmVceGZiXHhkZFx4ZmRceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGMxXHhjZFx4ZDNceGRhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1'@;
put 'MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2'@;
put 'NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2'@;
put 'XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1n'@;
put 'KSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVs4NjVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFh'@;
put 'XHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4'@;
put 'XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5'@;
put 'Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1'@;
put 'MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUw'@;
put 'Mzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJD'@;
put 'b2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVs4NjZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNc'@;
put 'eDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQx'@;
put 'Mlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1'@;
put 'MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2'@;
put 'M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1'@;
put 'MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MDQw'@;
put 'MVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHhhNFx1MjVhMFx4YTAiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFy'@;
put 'QXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzg3NF09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRc'@;
put 'eDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDI2XHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MGUwMVx1MGUwMlx1MGUwM1x1MGUwNFx1'@;
put 'MGUwNVx1MGUwNlx1MGUwN1x1MGUwOFx1MGUwOVx1MGUwYVx1MGUwYlx1MGUwY1x1MGUwZFx1MGUwZVx1MGUwZlx1MGUxMFx1MGUxMVx1MGUxMlx1MGUxM1x1MGUxNFx1MGUxNVx1MGUxNlx1MGUxN1x1MGUxOFx1MGUxOVx1MGUxYVx1MGUxYlx1MGUxY1x1MGUxZFx1MGUxZVx1MGUxZlx1MGUy'@;
put 'MFx1MGUyMVx1MGUyMlx1MGUyM1x1MGUyNFx1MGUyNVx1MGUyNlx1MGUyN1x1MGUyOFx1MGUyOVx1MGUyYVx1MGUyYlx1MGUyY1x1MGUyZFx1MGUyZVx1MGUyZlx1MGUzMFx1MGUzMVx1MGUzMlx1MGUzM1x1MGUzNFx1MGUzNVx1MGUzNlx1MGUzN1x1MGUzOFx1MGUzOVx1MGUzYVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1MGUzZlx1MGU0MFx1MGU0MVx1MGU0Mlx1MGU0M1x1MGU0NFx1MGU0NVx1MGU0Nlx1MGU0N1x1MGU0OFx1MGU0OVx1MGU0YVx1MGU0Ylx1MGU0Y1x1MGU0ZFx1MGU0ZVx1MGU0Zlx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1'@;
put 'N1x1MGU1OFx1MGU1OVx1MGU1YVx1MGU1Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbODk1'@;
put 'XT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5'@;
put 'Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAxMGNceGZjXHhlOVx1MDEwZlx4ZTRcdTAxMGVcdTAxNjRcdTAxMGRcdTAxMWJcdTAxMWFcdTAxMzlceGNkXHUwMTNlXHUwMWVhXHhjNFx4YzFceGM5XHUw'@;
put 'MTdlXHUwMTdkXHhmNFx4ZjZceGQzXHUwMTZmXHhkYVx4ZmRceGQ2XHhkY1x1MDE2MFx1MDEzZFx4ZGRcdTAxNThcdTAxNjVceGUxXHhlZFx4ZjNceGZhXHUwMTQ4XHUwMTQ3XHUwMTZlXHhkNFx1MDE2MVx1MDE1OVx1MDE1NVx1MDE1NFx4YmNceGE3XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1'@;
put 'OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBc'@;
put 'dTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1'@;
put 'MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0'@;
put 'KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbOTMyXT1mdW5jdGlvbigpe3ZhciBnLF89W10sST17fSx5PVtdO2Zvcih5WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4'@;
put 'MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY2MVx1ZmY2Mlx1ZmY2M1x1ZmY2NFx1ZmY2NVx1ZmY2Nlx1ZmY2N1x1ZmY2OFx1ZmY2OVx1ZmY2YVx1ZmY2Ylx1ZmY2Y1x1ZmY2ZFx1ZmY2ZVx1ZmY2Zlx1ZmY3MFx1ZmY3MVx1ZmY3Mlx1ZmY3M1x1ZmY3NFx1ZmY3NVx1ZmY3Nlx1'@;
put 'ZmY3N1x1ZmY3OFx1ZmY3OVx1ZmY3YVx1ZmY3Ylx1ZmY3Y1x1ZmY3ZFx1ZmY3ZVx1ZmY3Zlx1ZmY4MFx1ZmY4MVx1ZmY4Mlx1ZmY4M1x1ZmY4NFx1ZmY4NVx1ZmY4Nlx1ZmY4N1x1ZmY4OFx1ZmY4OVx1ZmY4YVx1ZmY4Ylx1ZmY4Y1x1ZmY4ZFx1ZmY4ZVx1ZmY4Zlx1ZmY5MFx1ZmY5MVx1ZmY5'@;
put 'Mlx1ZmY5M1x1ZmY5NFx1ZmY5NVx1ZmY5Nlx1ZmY5N1x1ZmY5OFx1ZmY5OVx1ZmY5YVx1ZmY5Ylx1ZmY5Y1x1ZmY5ZFx1ZmY5ZVx1ZmY5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzBdW2ddLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihJW3lbMF1bZ11dPTArZyxfWzArZ109eVswXVtnXSk7Zm9yKHlbMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAx'@;
put 'XHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThc'@;
put 'dTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFcdWZmMGJcdWZmMGRceGIxXHhkN1x1ZmZmZFx4ZjdcdWZmMWRcdTIy'@;
put 'NjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBhXHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVj'@;
put 'N1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIwOFx1MjIwYlx1'@;
put 'MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjEyYlx1'@;
put 'MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1ZWZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMjldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMjld'@;
put 'W2ddXT0zMzAyNCtnLF9bMzMwMjQrZ109eVsxMjldW2ddKTtmb3IoeVsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZc'@;
put 'dWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'NDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMw'@;
put 'NWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVc'@;
put 'dTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMw'@;
put 'OTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzMF1bZ10uY2hhckNvZGVBdCgw'@;
put 'KSYmKElbeVsxMzBdW2ddXT0zMzI4MCtnLF9bMzMyODArZ109eVsxMzBdW2ddKTtmb3IoeVsxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMw'@;
put 'YTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRc'@;
put 'dTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdWZm'@;
put 'ZmRcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAz'@;
put 'YTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRc'@;
put 'dTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzMV1bZ10u'@;
put 'Y2hhckNvZGVBdCgwKSYmKElbeVsxMzFdW2ddXT0zMzUzNitnLF9bMzM1MzYrZ109eVsxMzFdW2ddKTtmb3IoeVsxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0'@;
put 'MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0'@;
put 'M2NcdTA0M2RcdWZmZmRcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1'@;
put 'NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzJdLmxlbmd0aDsrK2cpNjU1MzMh'@;
put 'PT15WzEzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzJdW2ddXT0zMzc5MitnLF9bMzM3OTIrZ109eVsxMzJdW2ddKTtmb3IoeVsxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0'@;
put 'NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVcdTI0NmZcdTI0NzBcdTI0NzFcdTI0NzJcdTI0NzNcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdTMzNDlc'@;
put 'dTMzMTRcdTMzMjJcdTMzNGRcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMGRcdTMzMjZcdTMzMjNcdTMzMmJcdTMzNGFcdTMzM2JcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOGVcdTMzOGZcdTMzYzRcdTMzYTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTMzN2JcdWZmZmRcdTMwMWRcdTMwMWZcdTIxMTZcdTMzY2RcdTIxMjFcdTMyYTRcdTMyYTVcdTMyYTZcdTMyYTdcdTMyYThcdTMyMzFcdTMyMzJcdTMyMzlcdTMzN2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVc'@;
put 'dTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzVdLmxlbmd0'@;
put 'aDsrK2cpNjU1MzMhPT15WzEzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzVdW2ddXT0zNDU2MCtnLF9bMzQ1NjArZ109eVsxMzVdW2ddKTtmb3IoeVsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVcdTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgy'@;
put 'YTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRc'@;
put 'dTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNcdThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgw'@;
put 'YjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgwZTRcdTg1MmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9'@;
put 'eVsxMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzZdW2ddXT0zNDgxNitnLF9bMzQ4MTYrZ109eVsxMzZdW2ddKTtmb3IoeVsxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2'@;
put 'NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZc'@;
put 'dTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5'@;
put 'YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdWZmZmRcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdc'@;
put 'dTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVj'@;
put 'NGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdc'@;
put 'dTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcy'@;
put 'NTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxnPTA7ZyE9eVsxMzddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzddW2ddXT0zNTA3MitnLF9bMzUwNzIrZ109eVsxMzddW2ddKTtmb3IoeVsxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4NTdcdThhNzJc'@;
put 'dTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRcdTk1YTNcdTk2'@;
put 'OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmJcdWZmZmRcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRlMTRcdTljMzlcdTUzZjZc'@;
put 'dTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdcdTVkZmJcdTU1OWFcdTU4'@;
put 'MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3MGJcdTdhZmZcdTdiYTFc'@;
put 'dTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNcdTc3M2NcdTVjYTlcdTdm'@;
put 'ZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4YzRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzhdW2ddXT0zNTMyOCtnLF9bMzUzMjgrZ109eVsxMzhdW2ddKTtmb3IoeVsxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNc'@;
put 'dTViOWNcdTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2'@;
put 'NTBcdTkwMDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTFcdWZmZmRcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJc'@;
put 'dTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1'@;
put 'YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFc'@;
put 'dTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0'@;
put 'MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDhc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzldW2ddXT0zNTU4NCtnLF9bMzU1ODQrZ109eVsxMzldW2ddKTtmb3IoeVsxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhc'@;
put 'dTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdl'@;
put 'NGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZThcdWZmZmRcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBc'@;
put 'dThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgw'@;
put 'YTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRc'@;
put 'dTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUz'@;
put 'NDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFc'@;
put 'dTUzZTNcdTU0MTFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDBdW2ddXT0zNTg0MCtnLF9bMzU4NDArZ109eVsxNDBdW2ddKTtmb3IoeVsxNDFdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhc'@;
put 'dTYzYTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRcdTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgx'@;
put 'NTRcdTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThiMWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGRcdWZmZmRcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBc'@;
put 'dThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2JcdTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYw'@;
put 'NjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJc'@;
put 'dTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0YzlcdTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3'@;
put 'MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRc'@;
put 'dTdiMzlcdTUzMTlcdTUxOGFcdTUyMzdcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDFdW2ddXT0zNjA5NitnLF9bMzYwOTYrZ109eVsxNDFdW2ddKTtmb3IoeVsxNDJd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJc'@;
put 'dTVjNzFcdTYwZThcdTY0OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdiOTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4'@;
put 'ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdcdTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjJcdWZmZmRcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJc'@;
put 'dTgxMDJcdTgxZjNcdTg5OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThhZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1'@;
put 'ZDRcdTc4YzFcdTc5M2FcdTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVcdTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFc'@;
put 'dTViOWZcdTg1MDBcdTdiZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3'@;
put 'NTNcdTcwN2NcdTcyMzVcdTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJcdTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhc'@;
put 'dTZhMzlcdTdkYWNcdTk3MDBcdTU2ZGFcdTUzY2VcdTU0NjhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDJdW2ddXT0zNjM1MitnLF9bMzYzNTIrZ109eVsxNDJdW2dd'@;
put 'KTtmb3IoeVsxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZc'@;
put 'dTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdl'@;
put 'MmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjNcdWZmZmRcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdc'@;
put 'dTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUz'@;
put 'ZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJc'@;
put 'dTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThh'@;
put 'NTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNc'@;
put 'dTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDNdW2ddXT0zNjYwOCtnLF9bMzY2MDgr'@;
put 'Z109eVsxNDNdW2ddKTtmb3IoeVsxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFc'@;
put 'dTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZkZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkw'@;
put 'MzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVcdTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYThcdWZmZmRcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThc'@;
put 'dTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlhYzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0'@;
put 'N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBcdTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRc'@;
put 'dTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVlMmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4'@;
put 'YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNcdTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlc'@;
put 'dTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDRdW2ddXT0zNjg2'@;
put 'NCtnLF9bMzY4NjQrZ109eVsxNDRdW2ddKTtmb3IoeVsxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlNGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRc'@;
put 'dTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFcdTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdk'@;
put 'NDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVjNjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmJcdWZmZmRcdTY0Y2RcdTY1ZTlcdTY2Zjlc'@;
put 'dTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThcdTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYx'@;
put 'OGVcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRmZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRc'@;
put 'dTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVcdTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYy'@;
put 'MzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUzZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVc'@;
put 'dTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUzZWFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsx'@;
put 'NDVdW2ddXT0zNzEyMCtnLF9bMzcxMjArZ109eVsxNDVdW2ddKTtmb3IoeVsxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFc'@;
put 'dThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVm'@;
put 'M2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzRcdWZmZmRcdTkwMTBc'@;
put 'dTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTkyZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUx'@;
put 'Y2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2FcdTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1Nzdc'@;
put 'dTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1'@;
put 'MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNcdThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNc'@;
put 'dTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0Nl1bZ10uY2hhckNvZGVB'@;
put 'dCgwKSYmKElbeVsxNDZdW2ddXT0zNzM3NitnLF9bMzczNzYrZ109eVsxNDZdW2ddKTtmb3IoeVsxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkxMmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVc'@;
put 'dTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNcdThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1'@;
put 'MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVlYTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWNc'@;
put 'dWZmZmRcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZcdTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdi'@;
put 'NTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUyZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNc'@;
put 'dTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFcdTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkx'@;
put 'NDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcwNThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdc'@;
put 'dTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0N11b'@;
put 'Z10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDddW2ddXT0zNzYzMitnLF9bMzc2MzIrZ109eVsxNDddW2ddKTtmb3IoeVsxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5ODJcdTVjM2ZcdTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2Rc'@;
put 'dThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgxMzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2'@;
put 'YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFcdThmMjlcdTkxNGRcdTUwMGRcdTU3Zjlc'@;
put 'dTVhOTJcdTY4ODVcdWZmZmRcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdiOTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2'@;
put 'ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdcdTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZc'@;
put 'dTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgyMmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcx'@;
put 'NjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2NcdTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2Jc'@;
put 'dTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDhdLmxlbmd0aDsrK2cpNjU1'@;
put 'MzMhPT15WzE0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDhdW2ddXT0zNzg4OCtnLF9bMzc4ODgrZ109eVsxNDhdW2ddKTtmb3IoeVsxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlc'@;
put 'dTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVl'@;
put 'ZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNc'@;
put 'dTVlOWNcdTYwMTZcdTYyNzZcdTY1NzdcdWZmZmRcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5'@;
put 'NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVc'@;
put 'dTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdi'@;
put 'ODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFc'@;
put 'dTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDldLmxl'@;
put 'bmd0aDsrK2cpNjU1MzMhPT15WzE0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDldW2ddXT0zODE0NCtnLF9bMzgxNDQrZ109eVsxNDldW2ddKTtmb3IoeVsxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDVcdTZjZTFc'@;
put 'dTcwZjlcdTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3'@;
put 'MWJcdTY3ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBc'@;
put 'dTVlNGNcdTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzZcdWZmZmRcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUz'@;
put 'YzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFc'@;
put 'dTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTll'@;
put 'YmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFc'@;
put 'dTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7'@;
put 'ZyE9eVsxNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTBdW2ddXT0zODQwMCtnLF9bMzg0MDArZ109eVsxNTBdW2ddKTtmb3IoeVsxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dThhZWRcdThmMzhcdTU1MmZcdTRmNTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3OGRcdTU5'@;
put 'MTVcdTRlODhcdTRmNTlcdTRlMGVcdThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0YzlcdTg5ODFc'@;
put 'dThiMjFcdThlMGFcdTkwNjVcdTk2N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzJcdWZmZmRcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVcdTVk'@;
put 'NTBcdTZiMDRcdTZmZWJcdTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFcdTZlOWNc'@;
put 'dTc0MDlcdTc1NTlcdTc4NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThhZDJcdTkw'@;
put 'N2NcdTkxY2ZcdTk2NzVcdTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFcdTVkYmFc'@;
put 'dTYwMWNcdTczYjJcdTc5M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxnPTA7ZyE9eVsxNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTFdW2ddXT0zODY1NitnLF9bMzg2NTYrZ109eVsxNTFdW2ddKTtmb3IoeVsxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkw'@;
put 'Y2VcdTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTVcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVc'@;
put 'dThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRm'@;
put 'NTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFc'@;
put 'dTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTJdW2ddXT0zODkxMitnLF9bMzg5MTIrZ109eVsxNTJdW2ddKTtmb3IoeVsxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFcdTUxM2FcdTUxMzdcdTUxM2NcdTUx'@;
put 'M2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUxYTlcdTUxYWFcdTUxYWJcdTUxYjNc'@;
put 'dTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWRcdWZmZmRcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVcdTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUy'@;
put 'NGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUyY2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZc'@;
put 'dTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdcdTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUz'@;
put 'NjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRc'@;
put 'dTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0YjhcdTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0'@;
put 'YThcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTNdW2ddXT0zOTE2OCtnLF9bMzkxNjgrZ109eVsxNTNdW2ddKTtmb3IoeVsxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1NWNcdTU1'@;
put 'NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRcdTU1ZDRc'@;
put 'dTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzhcdWZmZmRcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2OGZcdTU2YTVcdTU2'@;
put 'YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1YzdcdTU3MWNcdTU3MjZc'@;
put 'dTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3ZTNcdTU4MGJcdTU4'@;
put 'MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhcdTU4ZTVcdTU4ZGNc'@;
put 'dTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5NjJcdTU5NjBcdTU5'@;
put 'NjdcdTU5NmNcdTU5NjlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTRdW2ddXT0zOTQyNCtnLF9bMzk0MjQrZ109eVsxNTRdW2ddKTtmb3IoeVsxNTVdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVh'@;
put 'NDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2Vc'@;
put 'dTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBcdWZmZmRcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTVi'@;
put 'ZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZc'@;
put 'dTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVk'@;
put 'MTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZc'@;
put 'dTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVl'@;
put 'YzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2ZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTVdW2ddXT0zOTY4MCtnLF9bMzk2ODArZ109eVsxNTVdW2ddKTtmb3IoeVsx'@;
put 'NTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVm'@;
put 'MDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVmMTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFc'@;
put 'dTVmODdcdTVmOWVcdTVmOTlcdTVmOThcdTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjBcdWZmZmRcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYw'@;
put 'MjZcdTYwMGZcdTYwM2FcdTYwNWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJc'@;
put 'dTYwYTdcdTYwOGJcdTYwZTFcdTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYx'@;
put 'M2VcdTYxMjhcdTYxMjdcdTYxNGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdc'@;
put 'dTYxYWNcdTYxOTRcdTYxOWFcdTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYy'@;
put 'MDBcdTYyMDhcdTYyMDlcdTYyMGRcdTYyMGNcdTYyMTRcdTYyMWJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTZdW2ddXT0zOTkzNitnLF9bMzk5MzYrZ109eVsxNTZd'@;
put 'W2ddKTtmb3IoeVsxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYy'@;
put 'ODJcdTYyODlcdTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRcdTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdc'@;
put 'dTYzMDJcdTYzMDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYzNGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmJcdWZmZmRcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYz'@;
put 'YzlcdTYzZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRcdTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVc'@;
put 'dTY0YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1'@;
put 'MzdcdTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZcdTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlc'@;
put 'dTY1ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2'@;
put 'ODlcdTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2YjlcdTY2YzlcdTY2YmVcdTY2YmNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTddW2ddXT00MDE5MitnLF9bNDAx'@;
put 'OTIrZ109eVsxNTddW2ddKTtmb3IoeVsxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3'@;
put 'MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZc'@;
put 'dTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdWZmZmRcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4'@;
put 'NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRc'@;
put 'dTY4ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5'@;
put 'M2RcdTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRc'@;
put 'dTY5ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZh'@;
put 'NTlcdTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNThdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNThdW2ddXT00'@;
put 'MDQ0OCtnLF9bNDA0NDgrZ109eVsxNThdW2ddKTtmb3IoeVsxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZh'@;
put 'YWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhcdTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2Zc'@;
put 'dTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZiYjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWZcdWZmZmRcdTllYmVcdTZjMDhcdTZj'@;
put 'MTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRcdTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFc'@;
put 'dTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZkM2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZk'@;
put 'ZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2NcdTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNc'@;
put 'dTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZlMWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZl'@;
put 'OWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZcdTZmMzJcdTZlY2NcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1OV1bZ10uY2hhckNvZGVBdCgwKSYmKElb'@;
put 'eVsxNTldW2ddXT00MDcwNCtnLF9bNDA3MDQrZ109eVsxNTldW2ddKTtmb3IoeVsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZm'@;
put 'NWJcdTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZmYjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFc'@;
put 'dTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFcdTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGRcdWZmZmRcdTcw'@;
put 'ZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcxOGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNc'@;
put 'dTcxZTdcdTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJcdTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcy'@;
put 'YTJcdTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcyZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhc'@;
put 'dTczNTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBcdTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0'@;
put 'NDFcdTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0ZDRcdTczZjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyNF1bZ10uY2hhckNv'@;
put 'ZGVBdCgwKSYmKElbeVsyMjRdW2ddXT01NzM0NCtnLF9bNTczNDQrZ109eVsyMjRdW2ddKTtmb3IoeVsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0'@;
put 'ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1Nzhc'@;
put 'dTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1'@;
put 'ZmZcdWZmZmRcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2Njhc'@;
put 'dTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2'@;
put 'ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVc'@;
put 'dTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4'@;
put 'ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2FcdTc4ZWNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIy'@;
put 'NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjVdW2ddXT01NzYwMCtnLF9bNTc2MDArZ109eVsyMjVdW2ddKTtmb3IoeVsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5'@;
put 'MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFc'@;
put 'dTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRcdTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdh'@;
put 'YTlcdTdhYzhcdTdhYjBcdWZmZmRcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNc'@;
put 'dTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBcdTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdi'@;
put 'OGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdjMDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdc'@;
put 'dTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVcdTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdj'@;
put 'YjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdkMDZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjZdLmxlbmd0aDsrK2cp'@;
put 'NjU1MzMhPT15WzIyNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjZdW2ddXT01Nzg1NitnLF9bNTc4NTYrZ109eVsyMjZdW2ddKTtmb3IoeVsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMDJcdTdkMWNcdTdkMTVcdTdk'@;
put 'MGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJcdTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRc'@;
put 'dTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdlMWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdl'@;
put 'M2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzdcdWZmZmRcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVcdTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJc'@;
put 'dTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdmNjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdm'@;
put 'ODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRc'@;
put 'dTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgwNzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgw'@;
put 'OWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjdd'@;
put 'Lmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjddW2ddXT01ODExMitnLF9bNTgxMTIrZ109eVsyMjddW2ddKTtmb3IoeVsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGJcdTgx'@;
put 'NDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBc'@;
put 'dTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgy'@;
put 'NDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdWZmZmRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRc'@;
put 'dTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgz'@;
put 'OWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRc'@;
put 'dTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0'@;
put 'ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxn'@;
put 'PTA7ZyE9eVsyMjhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjhdW2ddXT01ODM2OCtnLF9bNTgzNjgrZ109eVsyMjhdW2ddKTtmb3IoeVsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRcdTg1ZTVc'@;
put 'dTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2YzRcdTg2'@;
put 'YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWNcdWZmZmRcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2ZcdTg3MzdcdTg3M2Jc'@;
put 'dTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2ZDZcdTg3YWJcdTg3'@;
put 'YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRcdTg4NDJcdTg4NTJc'@;
put 'dTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4ZDhcdTg4ZDlcdTg4'@;
put 'ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWVcdWZmZmRcdWZmZmRcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjldW2ddXT01ODYyNCtnLF9bNTg2MjQrZ109eVsyMjldW2ddKTtmb3IoeVsyMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZcdTg5YzBcdTg5ZGFcdTg5ZGNc'@;
put 'dTg5ZGRcdTg5ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThhYThcdThhYTFcdThhOTFcdThh'@;
put 'YTVcdThhYTZcdThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTdcdWZmZmRcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBc'@;
put 'dThiMzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJcdThiOTNcdThiOTZcdThiOTlcdThi'@;
put 'OWFcdThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNc'@;
put 'dThjYWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRcdThkNzFcdThkNzNcdThkODFcdThk'@;
put 'OTlcdThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThlMzBcdThlMzRcdThlNGFcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzBdW2ddXT01ODg4MCtnLF9bNTg4ODArZ109eVsyMzBdW2ddKTtmb3IoeVsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRc'@;
put 'dThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThm'@;
put 'MjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWNcdWZmZmRcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZc'@;
put 'dTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkw'@;
put 'NjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThc'@;
put 'dTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTky'@;
put 'MWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRc'@;
put 'dTkzMmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzFdW2ddXT01OTEzNitnLF9bNTkxMzYrZ109eVsyMzFdW2ddKTtmb3IoeVsyMzJdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVc'@;
put 'dTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0'@;
put 'NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFcdTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTlcdWZmZmRcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2Rc'@;
put 'dTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2'@;
put 'OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBcdTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlc'@;
put 'dTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3'@;
put 'OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNcdTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJc'@;
put 'dTk4NmJcdTk4NmZcdTk4NzBcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzJdW2ddXT01OTM5MitnLF9bNTkzOTIrZ109eVsyMzJdW2ddKTtmb3IoeVsyMzNdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRc'@;
put 'dTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlcdTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5'@;
put 'ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDNcdWZmZmRcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlc'@;
put 'dTlhNmJcdTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFcdTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTli'@;
put 'MjNcdTliMjVcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTliMzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2Fc'@;
put 'dTliYjlcdTliYzZcdTliY2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRcdTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTlj'@;
put 'MjRcdTljMjFcdTljMzBcdTljNDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTljNjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJc'@;
put 'dTlkNDFcdTlkM2ZcdTlkM2VcdTlkNDZcdTlkNDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzNdW2ddXT01OTY0OCtnLF9bNTk2NDgrZ109eVsyMzNdW2ddKTtmb3Io'@;
put 'eVsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNWRcdTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRc'@;
put 'dTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTll'@;
put 'OWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdWZmZmRcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdc'@;
put 'dTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUx'@;
put 'ZGNcdTcxOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzRdW2ddXT01OTkwNCtnLF9bNTk5MDQrZ109eVsy'@;
put 'MzRdW2ddKTtmb3IoeVsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNc'@;
put 'dTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUy'@;
put 'YzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZmZmRcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJc'@;
put 'dTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYw'@;
put 'ODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJc'@;
put 'dTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZi'@;
put 'ZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJc'@;
put 'dTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzddW2ddXT02MDY3MitnLF9b'@;
put 'NjA2NzIrZ109eVsyMzddW2ddKTtmb3IoeVsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFc'@;
put 'dTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdh'@;
put 'ZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdWZmZmRcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBc'@;
put 'dWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkx'@;
put 'ZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNc'@;
put 'dTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3'@;
put 'NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJc'@;
put 'dTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzhdW2dd'@;
put 'XT02MDkyOCtnLF9bNjA5MjgrZ109eVsyMzhdW2ddKTtmb3IoeVsyNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdTIxNjBc'@;
put 'dTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2'@;
put 'ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdWZmZmRcdTUxNjRcdTUxOWRc'@;
put 'dTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4'@;
put 'OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRc'@;
put 'dTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2'@;
put 'MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZc'@;
put 'dTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI1MF1bZ10uY2hhckNvZGVBdCgwKSYm'@;
put 'KElbeVsyNTBdW2ddXT02NGUzK2csX1s2NGUzK2ddPXlbMjUwXVtnXSk7Zm9yKHlbMjUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2'@;
put 'ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2Qy'@;
put 'XHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmZmZkXHVm'@;
put 'YTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5'@;
put 'XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVm'@;
put 'YTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQw'@;
put 'XHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5'@;
put 'NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjUxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNTFdW2ddLmNoYXJD'@;
put 'b2RlQXQoMCkmJihJW3lbMjUxXVtnXV09NjQyNTYrZyxfWzY0MjU2K2ddPXlbMjUxXVtnXSk7Zm9yKHlbMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5'@;
put 'ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjUyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsy'@;
put 'NTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjUyXVtnXV09NjQ1MTIrZyxfWzY0NTEyK2ddPXlbMjUyXVtnXSk7cmV0dXJue2VuYzpJLGRlYzpffX0oKSxxWzkzNl09ZnVuY3Rpb24oKXt2YXIgZyxfPVtdLEk9e30seT1bXTtmb3IoeVswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZc'@;
put 'eDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWpr'@;
put 'bG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVswXS5sZW5ndGg7Kytn'@;
put 'KTY1NTMzIT09eVswXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzBdW2ddXT0wK2csX1swK2ddPXlbMF1bZ10pO2Zvcih5WzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUx'@;
put 'Mlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1'@;
put 'NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YVx1NGU2Ylx1NGU2Y1x1NGU2ZFx1NGU2ZVx1NGU2Zlx1NGU3Mlx1NGU3NFx1NGU3NVx1NGU3Nlx1NGU3N1x1NGU3OFx1NGU3OVx1NGU3YVx1NGU3Ylx1NGU3Y1x1NGU3ZFx1NGU3Zlx1NGU4MFx1NGU4MVx1NGU4Mlx1NGU4M1x1NGU4NFx1NGU4'@;
put 'NVx1NGU4N1x1NGU4YVx1ZmZmZFx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1'@;
put 'NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVmYVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMlx1NGYwM1x1NGYwNFx1NGYwNVx1NGYwNlx1NGYwN1x1NGYwOFx1NGYw'@;
put 'Ylx1NGYwY1x1NGYxMlx1NGYxM1x1NGYxNFx1NGYxNVx1NGYxNlx1NGYxY1x1NGYxZFx1NGYyMVx1NGYyM1x1NGYyOFx1NGYyOVx1NGYyY1x1NGYyZFx1NGYyZVx1NGYzMVx1NGYzM1x1NGYzNVx1NGYzN1x1NGYzOVx1NGYzYlx1NGYzZVx1NGYzZlx1NGY0MFx1NGY0MVx1NGY0Mlx1NGY0NFx1'@;
put 'NGY0NVx1NGY0N1x1NGY0OFx1NGY0OVx1NGY0YVx1NGY0Ylx1NGY0Y1x1NGY1Mlx1NGY1NFx1NGY1Nlx1NGY2MVx1NGY2Mlx1NGY2Nlx1NGY2OFx1NGY2YVx1NGY2Ylx1NGY2ZFx1NGY2ZVx1NGY3MVx1NGY3Mlx1NGY3NVx1NGY3N1x1NGY3OFx1NGY3OVx1NGY3YVx1NGY3ZFx1NGY4MFx1NGY4'@;
put 'MVx1NGY4Mlx1NGY4NVx1NGY4Nlx1NGY4N1x1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NVx1NGY5Nlx1NGY5OFx1NGY5OVx1NGY5YVx1NGY5Y1x1NGY5ZVx1NGY5Zlx1NGZhMVx1NGZhMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzEyOV0ubGVuZ3RoOysrZyk2'@;
put 'NTUzMyE9PXlbMTI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzEyOV1bZ11dPTMzMDI0K2csX1szMzAyNCtnXT15WzEyOV1bZ10pO2Zvcih5WzEzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGZhNFx1NGZhYlx1NGZhZFx1NGZi'@;
put 'MFx1NGZiMVx1NGZiMlx1NGZiM1x1NGZiNFx1NGZiNlx1NGZiN1x1NGZiOFx1NGZiOVx1NGZiYVx1NGZiYlx1NGZiY1x1NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjMlx1NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZkMlx1NGZkM1x1NGZkNFx1NGZkNVx1'@;
put 'NGZkNlx1NGZkOVx1NGZkYlx1NGZlMFx1NGZlMlx1NGZlNFx1NGZlNVx1NGZlN1x1NGZlYlx1NGZlY1x1NGZmMFx1NGZmMlx1NGZmNFx1NGZmNVx1NGZmNlx1NGZmN1x1NGZmOVx1NGZmYlx1NGZmY1x1NGZmZFx1NGZmZlx1NTAwMFx1NTAwMVx1NTAwMlx1NTAwM1x1NTAwNFx1NTAwNVx1NTAw'@;
put 'Nlx1NTAwN1x1NTAwOFx1NTAwOVx1NTAwYVx1ZmZmZFx1NTAwYlx1NTAwZVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxYlx1NTAxZFx1NTAxZVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyYlx1NTAyZlx1NTAzMFx1NTAzMVx1NTAzMlx1NTAzM1x1'@;
put 'NTAzNFx1NTAzNVx1NTAzNlx1NTAzN1x1NTAzOFx1NTAzOVx1NTAzYlx1NTAzZFx1NTAzZlx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NFx1NTA0NVx1NTA0Nlx1NTA0OVx1NTA0YVx1NTA0Ylx1NTA0ZFx1NTA1MFx1NTA1MVx1NTA1Mlx1NTA1M1x1NTA1NFx1NTA1Nlx1NTA1N1x1NTA1OFx1NTA1'@;
put 'OVx1NTA1Ylx1NTA1ZFx1NTA1ZVx1NTA1Zlx1NTA2MFx1NTA2MVx1NTA2Mlx1NTA2M1x1NTA2NFx1NTA2Nlx1NTA2N1x1NTA2OFx1NTA2OVx1NTA2YVx1NTA2Ylx1NTA2ZFx1NTA2ZVx1NTA2Zlx1NTA3MFx1NTA3MVx1NTA3Mlx1NTA3M1x1NTA3NFx1NTA3NVx1NTA3OFx1NTA3OVx1NTA3YVx1'@;
put 'NTA3Y1x1NTA3ZFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4YVx1NTA4Ylx1NTA4Y1x1NTA4ZVx1NTA4Zlx1NTA5MFx1NTA5MVx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5NVx1NTA5Nlx1NTA5N1x1NTA5OFx1NTA5OVx1NTA5YVx1NTA5Ylx1NTA5Y1x1NTA5'@;
put 'ZFx1NTA5ZVx1NTA5Zlx1NTBhMFx1NTBhMVx1NTBhMlx1NTBhNFx1NTBhNlx1NTBhYVx1NTBhYlx1NTBhZFx1NTBhZVx1NTBhZlx1NTBiMFx1NTBiMVx1NTBiM1x1NTBiNFx1NTBiNVx1NTBiNlx1NTBiN1x1NTBiOFx1NTBiOVx1NTBiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzEzMF0u'@;
put 'bGVuZ3RoOysrZyk2NTUzMyE9PXlbMTMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzEzMF1bZ11dPTMzMjgwK2csX1szMzI4MCtnXT15WzEzMF1bZ10pO2Zvcih5WzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBiZFx1NTBi'@;
put 'ZVx1NTBiZlx1NTBjMFx1NTBjMVx1NTBjMlx1NTBjM1x1NTBjNFx1NTBjNVx1NTBjNlx1NTBjN1x1NTBjOFx1NTBjOVx1NTBjYVx1NTBjYlx1NTBjY1x1NTBjZFx1NTBjZVx1NTBkMFx1NTBkMVx1NTBkMlx1NTBkM1x1NTBkNFx1NTBkNVx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYlx1NTBkY1x1'@;
put 'NTBkZFx1NTBkZVx1NTBkZlx1NTBlMFx1NTBlMVx1NTBlMlx1NTBlM1x1NTBlNFx1NTBlNVx1NTBlOFx1NTBlOVx1NTBlYVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNlx1NTBmN1x1NTBmOFx1NTBmOVx1NTBmYVx1NTBmY1x1NTBmZFx1NTBmZVx1NTBmZlx1NTEw'@;
put 'MFx1NTEwMVx1NTEwMlx1NTEwM1x1NTEwNFx1NTEwNVx1NTEwOFx1ZmZmZFx1NTEwOVx1NTEwYVx1NTEwY1x1NTEwZFx1NTEwZVx1NTEwZlx1NTExMFx1NTExMVx1NTExM1x1NTExNFx1NTExNVx1NTExNlx1NTExN1x1NTExOFx1NTExOVx1NTExYVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1'@;
put 'NTExZlx1NTEyMFx1NTEyMlx1NTEyM1x1NTEyNFx1NTEyNVx1NTEyNlx1NTEyN1x1NTEyOFx1NTEyOVx1NTEyYVx1NTEyYlx1NTEyY1x1NTEyZFx1NTEyZVx1NTEyZlx1NTEzMFx1NTEzMVx1NTEzMlx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzNlx1NTEzN1x1NTEzOFx1NTEzOVx1NTEzYVx1NTEz'@;
put 'Ylx1NTEzY1x1NTEzZFx1NTEzZVx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NTE1Zlx1NTE2MFx1NTE2MVx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1'@;
put 'NTE2Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNlx1NTFhN1x1NTFhOFx1NTFh'@;
put 'OVx1NTFhYVx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMlx1NTFkM1x1NTFkNFx1NTFkNVx1NTFkNlx1NTFkN1x1ZmZmZCIuc3BsaXQoIiIpLGc9'@;
put 'MDtnIT15WzEzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzEzMV1bZ11dPTMzNTM2K2csX1szMzUzNitnXT15WzEzMV1bZ10pO2Zvcih5WzEzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NTFkOFx1NTFkOVx1NTFkYVx1NTFkY1x1NTFkZVx1NTFkZlx1NTFlMlx1NTFlM1x1NTFlNVx1NTFlNlx1NTFlN1x1NTFlOFx1NTFlOVx1NTFlYVx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1'@;
put 'NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1NTI0NFx1NTI0NVx1NTI0Nlx1NTI0N1x1NTI0OFx1NTI0'@;
put 'OVx1NTI0Ylx1NTI0ZVx1NTI0Zlx1NTI1Mlx1NTI1M1x1NTI1NVx1NTI1N1x1NTI1OFx1ZmZmZFx1NTI1OVx1NTI1YVx1NTI1Ylx1NTI1ZFx1NTI1Zlx1NTI2MFx1NTI2Mlx1NTI2M1x1NTI2NFx1NTI2Nlx1NTI2OFx1NTI2Ylx1NTI2Y1x1NTI2ZFx1NTI2ZVx1NTI3MFx1NTI3MVx1NTI3M1x1'@;
put 'NTI3NFx1NTI3NVx1NTI3Nlx1NTI3N1x1NTI3OFx1NTI3OVx1NTI3YVx1NTI3Ylx1NTI3Y1x1NTI3ZVx1NTI4MFx1NTI4M1x1NTI4NFx1NTI4NVx1NTI4Nlx1NTI4N1x1NTI4OVx1NTI4YVx1NTI4Ylx1NTI4Y1x1NTI4ZFx1NTI4ZVx1NTI4Zlx1NTI5MVx1NTI5Mlx1NTI5NFx1NTI5NVx1NTI5'@;
put 'Nlx1NTI5N1x1NTI5OFx1NTI5OVx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZVx1NTJhZlx1NTJiMFx1NTJiNFx1NTJiNVx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiOVx1NTJiYVx1NTJiYlx1NTJiY1x1NTJiZFx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1'@;
put 'NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOVx1NTJkYVx1NTJkYlx1NTJkY1x1NTJkZFx1NTJkZVx1NTJlMFx1NTJlMVx1NTJlMlx1NTJlM1x1NTJlNVx1NTJlNlx1NTJlN1x1NTJlOFx1NTJlOVx1NTJl'@;
put 'YVx1NTJlYlx1NTJlY1x1NTJlZFx1NTJlZVx1NTJlZlx1NTJmMVx1NTJmMlx1NTJmM1x1NTJmNFx1NTJmNVx1NTJmNlx1NTJmN1x1NTJmOFx1NTJmYlx1NTJmY1x1NTJmZFx1NTMwMVx1NTMwMlx1NTMwM1x1NTMwNFx1NTMwN1x1NTMwOVx1NTMwYVx1NTMwYlx1NTMwY1x1NTMwZVx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLGc9MDtnIT15WzEzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzEzMl1bZ11dPTMzNzkyK2csX1szMzc5MitnXT15WzEzMl1bZ10pO2Zvcih5WzEzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NTMxMVx1NTMxMlx1NTMxM1x1NTMxNFx1NTMxOFx1NTMxYlx1NTMxY1x1NTMxZVx1NTMxZlx1NTMyMlx1NTMyNFx1NTMyNVx1NTMyN1x1NTMyOFx1NTMyOVx1NTMyYlx1NTMyY1x1NTMyZFx1NTMyZlx1NTMzMFx1NTMzMVx1NTMzMlx1NTMzM1x1NTMzNFx1NTMzNVx1'@;
put 'NTMzNlx1NTMzN1x1NTMzOFx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0ZFx1NTM1MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3Nlx1NTM3OVx1NTM3Ylx1NTM3'@;
put 'Y1x1NTM3ZFx1NTM3ZVx1NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4YVx1NTM4ZVx1NTM4Zlx1ZmZmZFx1NTM5MFx1NTM5MVx1NTM5Mlx1NTM5M1x1NTM5NFx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Ylx1NTM5Y1x1NTM5ZVx1NTNhMFx1NTNhMVx1NTNhNFx1NTNhN1x1NTNhYVx1'@;
put 'NTNhYlx1NTNhY1x1NTNhZFx1NTNhZlx1NTNiMFx1NTNiMVx1NTNiMlx1NTNiM1x1NTNiNFx1NTNiNVx1NTNiN1x1NTNiOFx1NTNiOVx1NTNiYVx1NTNiY1x1NTNiZFx1NTNiZVx1NTNjMFx1NTNjM1x1NTNjNFx1NTNjNVx1NTNjNlx1NTNjN1x1NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1NTNk'@;
put 'M1x1NTNkNVx1NTNkYVx1NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNlMlx1NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1NTNmZlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQxYVx1NTQxY1x1NTQyMlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQzMFx1'@;
put 'NTQzM1x1NTQzNlx1NTQzN1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1NTQ0Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0OVx1NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZFx1NTQ1ZVx1NTQ1Zlx1NTQ2MFx1NTQ2MVx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OVx1NTQ2'@;
put 'YVx1NTQ2Ylx1NTQ2Y1x1NTQ2ZFx1NTQ2ZVx1NTQ2Zlx1NTQ3MFx1NTQ3NFx1NTQ3OVx1NTQ3YVx1NTQ3ZVx1NTQ3Zlx1NTQ4MVx1NTQ4M1x1NTQ4NVx1NTQ4N1x1NTQ4OFx1NTQ4OVx1NTQ4YVx1NTQ4ZFx1NTQ5MVx1NTQ5M1x1NTQ5N1x1NTQ5OFx1NTQ5Y1x1NTQ5ZVx1NTQ5Zlx1NTRhMFx1'@;
put 'NTRhMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzEzM10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzEzM11bZ11dPTM0MDQ4K2csX1szNDA0OCtnXT15WzEzM11bZ10pO2Zvcih5WzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhMlx1NTRhNVx1NTRhZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRiNlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMFx1NTRlMVx1NTRlMlx1NTRlM1x1'@;
put 'NTRlNFx1NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNFx1NTRmNVx1NTRmNlx1NTRmN1x1NTRmOFx1NTRmOVx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYVx1NTUwYlx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxMlx1NTUxM1x1NTUx'@;
put 'NVx1NTUxNlx1NTUxN1x1NTUxOFx1NTUxOVx1NTUxYVx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUyNVx1NTUyNlx1ZmZmZFx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1'@;
put 'NTU0Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0Ylx1NTU0Y1x1NTU0ZFx1NTU0ZVx1NTU0Zlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1N1x1NTU1OFx1NTU1OVx1NTU1YVx1NTU1Ylx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2'@;
put 'Zlx1NTU3MFx1NTU3MVx1NTU3Mlx1NTU3M1x1NTU3NFx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMFx1NTVhMVx1NTVhMlx1NTVhM1x1'@;
put 'NTVhNFx1NTVhNVx1NTVhNlx1NTVhOFx1NTVhOVx1NTVhYVx1NTVhYlx1NTVhY1x1NTVhZFx1NTVhZVx1NTVhZlx1NTViMFx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1NTViY1x1NTViZlx1NTVjMFx1NTVjMVx1NTVjMlx1NTVjM1x1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVj'@;
put 'Ylx1NTVjZVx1NTVjZlx1NTVkMFx1NTVkNVx1NTVkN1x1NTVkOFx1NTVkOVx1NTVkYVx1NTVkYlx1NTVkZVx1NTVlMFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOFx1NTVmOVx1NTVmYVx1NTVmYlx1NTVmY1x1NTVmZlx1NTYwMlx1'@;
put 'NTYwM1x1NTYwNFx1NTYwNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzEzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzEzNF1bZ11dPTM0MzA0K2csX1szNDMwNCtnXT15WzEzNF1bZ10pO2Zvcih5WzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTYwNlx1NTYwN1x1NTYwYVx1NTYwYlx1NTYwZFx1NTYxMFx1NTYxMVx1NTYxMlx1NTYxM1x1NTYxNFx1NTYxNVx1NTYxNlx1NTYxN1x1NTYxOVx1NTYxYVx1NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1'@;
put 'NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MFx1NTY0MVx1NTY0Mlx1NTY0M1x1NTY0NFx1NTY0NVx1NTY0Nlx1NTY0N1x1NTY0OFx1NTY0OVx1NTY0YVx1NTY0'@;
put 'Ylx1NTY0Zlx1NTY1MFx1NTY1MVx1NTY1Mlx1NTY1M1x1NTY1NVx1NTY1Nlx1NTY1YVx1NTY1Ylx1NTY1ZFx1NTY1ZVx1NTY1Zlx1NTY2MFx1NTY2MVx1ZmZmZFx1NTY2M1x1NTY2NVx1NTY2Nlx1NTY2N1x1NTY2ZFx1NTY2ZVx1NTY2Zlx1NTY3MFx1NTY3Mlx1NTY3M1x1NTY3NFx1NTY3NVx1'@;
put 'NTY3N1x1NTY3OFx1NTY3OVx1NTY3YVx1NTY3ZFx1NTY3ZVx1NTY3Zlx1NTY4MFx1NTY4MVx1NTY4Mlx1NTY4M1x1NTY4NFx1NTY4N1x1NTY4OFx1NTY4OVx1NTY4YVx1NTY4Ylx1NTY4Y1x1NTY4ZFx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NFx1NTY5NVx1NTY5Nlx1NTY5N1x1NTY5OFx1NTY5'@;
put 'OVx1NTY5YVx1NTY5Ylx1NTY5Y1x1NTY5ZFx1NTY5ZVx1NTY5Zlx1NTZhMFx1NTZhMVx1NTZhMlx1NTZhNFx1NTZhNVx1NTZhNlx1NTZhN1x1NTZhOFx1NTZhOVx1NTZhYVx1NTZhYlx1NTZhY1x1NTZhZFx1NTZhZVx1NTZiMFx1NTZiMVx1NTZiMlx1NTZiM1x1NTZiNFx1NTZiNVx1NTZiNlx1'@;
put 'NTZiOFx1NTZiOVx1NTZiYVx1NTZiYlx1NTZiZFx1NTZiZVx1NTZiZlx1NTZjMFx1NTZjMVx1NTZjMlx1NTZjM1x1NTZjNFx1NTZjNVx1NTZjNlx1NTZjN1x1NTZjOFx1NTZjOVx1NTZjYlx1NTZjY1x1NTZjZFx1NTZjZVx1NTZjZlx1NTZkMFx1NTZkMVx1NTZkMlx1NTZkM1x1NTZkNVx1NTZk'@;
put 'Nlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNVx1NTZlNlx1NTZlN1x1NTZlOFx1NTZlOVx1NTZlYVx1NTZlY1x1NTZlZVx1NTZlZlx1NTZmMlx1NTZmM1x1NTZmNlx1NTZmN1x1NTZmOFx1NTZmYlx1NTZmY1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwYlx1NTcwY1x1'@;
put 'NTcwZFx1NTcwZVx1NTcwZlx1NTcxMFx1NTcxMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzEzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzEzNV1bZ11dPTM0NTYwK2csX1szNDU2MCtnXT15WzEzNV1bZ10pO2Zvcih5WzEzNl09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTcxMlx1NTcxM1x1NTcxNFx1NTcxNVx1NTcxNlx1NTcxN1x1NTcxOFx1NTcxOVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcxZVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1'@;
put 'NTcyYlx1NTczMVx1NTczMlx1NTczNFx1NTczNVx1NTczNlx1NTczN1x1NTczOFx1NTczY1x1NTczZFx1NTczZlx1NTc0MVx1NTc0M1x1NTc0NFx1NTc0NVx1NTc0Nlx1NTc0OFx1NTc0OVx1NTc0Ylx1NTc1Mlx1NTc1M1x1NTc1NFx1NTc1NVx1NTc1Nlx1NTc1OFx1NTc1OVx1NTc2Mlx1NTc2'@;
put 'M1x1NTc2NVx1NTc2N1x1NTc2Y1x1NTc2ZVx1NTc3MFx1NTc3MVx1NTc3Mlx1NTc3NFx1NTc3NVx1NTc3OFx1NTc3OVx1NTc3YVx1NTc3ZFx1NTc3ZVx1NTc3Zlx1NTc4MFx1ZmZmZFx1NTc4MVx1NTc4N1x1NTc4OFx1NTc4OVx1NTc4YVx1NTc4ZFx1NTc4ZVx1NTc4Zlx1NTc5MFx1NTc5MVx1'@;
put 'NTc5NFx1NTc5NVx1NTc5Nlx1NTc5N1x1NTc5OFx1NTc5OVx1NTc5YVx1NTc5Y1x1NTc5ZFx1NTc5ZVx1NTc5Zlx1NTdhNVx1NTdhOFx1NTdhYVx1NTdhY1x1NTdhZlx1NTdiMFx1NTdiMVx1NTdiM1x1NTdiNVx1NTdiNlx1NTdiN1x1NTdiOVx1NTdiYVx1NTdiYlx1NTdiY1x1NTdiZFx1NTdi'@;
put 'ZVx1NTdiZlx1NTdjMFx1NTdjMVx1NTdjNFx1NTdjNVx1NTdjNlx1NTdjN1x1NTdjOFx1NTdjOVx1NTdjYVx1NTdjY1x1NTdjZFx1NTdkMFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdkN1x1NTdkYlx1NTdkY1x1NTdkZVx1NTdlMVx1NTdlMlx1NTdlM1x1NTdlNVx1NTdlNlx1NTdlN1x1NTdlOFx1'@;
put 'NTdlOVx1NTdlYVx1NTdlYlx1NTdlY1x1NTdlZVx1NTdmMFx1NTdmMVx1NTdmMlx1NTdmM1x1NTdmNVx1NTdmNlx1NTdmN1x1NTdmYlx1NTdmY1x1NTdmZVx1NTdmZlx1NTgwMVx1NTgwM1x1NTgwNFx1NTgwNVx1NTgwOFx1NTgwOVx1NTgwYVx1NTgwY1x1NTgwZVx1NTgwZlx1NTgxMFx1NTgx'@;
put 'Mlx1NTgxM1x1NTgxNFx1NTgxNlx1NTgxN1x1NTgxOFx1NTgxYVx1NTgxYlx1NTgxY1x1NTgxZFx1NTgxZlx1NTgyMlx1NTgyM1x1NTgyNVx1NTgyNlx1NTgyN1x1NTgyOFx1NTgyOVx1NTgyYlx1NTgyY1x1NTgyZFx1NTgyZVx1NTgyZlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNlx1'@;
put 'NTgzN1x1NTgzOFx1NTgzOVx1NTgzYVx1NTgzYlx1NTgzY1x1NTgzZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzEzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzEzNl1bZ11dPTM0ODE2K2csX1szNDgxNitnXT15WzEzNl1bZ10pO2Zvcih5'@;
put 'WzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgzZVx1NTgzZlx1NTg0MFx1NTg0MVx1NTg0Mlx1NTg0M1x1NTg0NVx1NTg0Nlx1NTg0N1x1NTg0OFx1NTg0OVx1NTg0YVx1NTg0Ylx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1'@;
put 'NTg1M1x1NTg1NVx1NTg1Nlx1NTg1N1x1NTg1OVx1NTg1YVx1NTg1Ylx1NTg1Y1x1NTg1ZFx1NTg1Zlx1NTg2MFx1NTg2MVx1NTg2Mlx1NTg2M1x1NTg2NFx1NTg2Nlx1NTg2N1x1NTg2OFx1NTg2OVx1NTg2YVx1NTg2ZFx1NTg2ZVx1NTg2Zlx1NTg3MFx1NTg3MVx1NTg3Mlx1NTg3M1x1NTg3'@;
put 'NFx1NTg3NVx1NTg3Nlx1NTg3N1x1NTg3OFx1NTg3OVx1NTg3YVx1NTg3Ylx1NTg3Y1x1NTg3ZFx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4Y1x1ZmZmZFx1NTg4ZFx1NTg4ZVx1NTg4Zlx1NTg5MFx1NTg5MVx1NTg5NFx1NTg5NVx1NTg5Nlx1'@;
put 'NTg5N1x1NTg5OFx1NTg5Ylx1NTg5Y1x1NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhM1x1NThhNFx1NThhNVx1NThhNlx1NThhN1x1NThhYVx1NThhYlx1NThhY1x1NThhZFx1NThhZVx1NThhZlx1NThiMFx1NThiMVx1NThiMlx1NThiM1x1NThiNFx1NThiNVx1NThiNlx1NThiN1x1NThi'@;
put 'OFx1NThiOVx1NThiYVx1NThiYlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNlx1NThjN1x1NThjOFx1NThjOVx1NThjYVx1NThjYlx1NThjY1x1NThjZFx1NThjZVx1NThjZlx1NThkMFx1NThkMlx1NThkM1x1NThkNFx1NThkNlx1NThkN1x1NThkOFx1'@;
put 'NThkOVx1NThkYVx1NThkYlx1NThkY1x1NThkZFx1NThkZVx1NThkZlx1NThlMFx1NThlMVx1NThlMlx1NThlM1x1NThlNVx1NThlNlx1NThlN1x1NThlOFx1NThlOVx1NThlYVx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYVx1NThmYlx1NThm'@;
put 'Y1x1NThmZFx1NThmZVx1NThmZlx1NTkwMFx1NTkwMVx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOFx1NTkwOVx1NTkwYVx1NTkwYlx1NTkwY1x1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1'@;
put 'NTkyNlx1NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzEzN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzEzN11bZ11dPTM1MDcyK2csX1szNTA3MitnXT15WzEz'@;
put 'N11bZ10pO2Zvcih5WzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1Ylx1'@;
put 'NTk1Y1x1NTk1ZFx1NTk1ZVx1NTk1Zlx1NTk2MVx1NTk2M1x1NTk2NFx1NTk2Nlx1NTk2N1x1NTk2OFx1NTk2OVx1NTk2YVx1NTk2Ylx1NTk2Y1x1NTk2ZFx1NTk2ZVx1NTk2Zlx1NTk3MFx1NTk3MVx1NTk3Mlx1NTk3NVx1NTk3N1x1NTk3YVx1NTk3Ylx1NTk3Y1x1NTk3ZVx1NTk3Zlx1NTk4'@;
put 'MFx1NTk4NVx1NTk4OVx1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk4Zlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5YVx1NTk5Ylx1NTk5Y1x1NTk5ZFx1NTk5Zlx1NTlhMFx1NTlhMVx1NTlhMlx1NTlhNlx1ZmZmZFx1NTlhN1x1NTlhY1x1NTlhZFx1NTliMFx1NTliMVx1NTliM1x1'@;
put 'NTliNFx1NTliNVx1NTliNlx1NTliN1x1NTliOFx1NTliYVx1NTliY1x1NTliZFx1NTliZlx1NTljMFx1NTljMVx1NTljMlx1NTljM1x1NTljNFx1NTljNVx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZVx1NTlk'@;
put 'Zlx1NTllMFx1NTllMVx1NTllMlx1NTllNFx1NTllNlx1NTllN1x1NTllOVx1NTllYVx1NTllYlx1NTllZFx1NTllZVx1NTllZlx1NTlmMFx1NTlmMVx1NTlmMlx1NTlmM1x1NTlmNFx1NTlmNVx1NTlmNlx1NTlmN1x1NTlmOFx1NTlmYVx1NTlmY1x1NTlmZFx1NTlmZVx1NWEwMFx1NWEwMlx1'@;
put 'NWEwYVx1NWEwYlx1NWEwZFx1NWEwZVx1NWEwZlx1NWExMFx1NWExMlx1NWExNFx1NWExNVx1NWExNlx1NWExN1x1NWExOVx1NWExYVx1NWExYlx1NWExZFx1NWExZVx1NWEyMVx1NWEyMlx1NWEyNFx1NWEyNlx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyYlx1NWEyY1x1NWEyZFx1NWEyZVx1NWEy'@;
put 'Zlx1NWEzMFx1NWEzM1x1NWEzNVx1NWEzN1x1NWEzOFx1NWEzOVx1NWEzYVx1NWEzYlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MVx1NWE0Mlx1NWE0M1x1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Ylx1NWE0Y1x1NWE0ZFx1NWE0ZVx1NWE0Zlx1NWE1MFx1NWE1MVx1NWE1Mlx1NWE1M1x1'@;
put 'NWE1NFx1NWE1Nlx1NWE1N1x1NWE1OFx1NWE1OVx1NWE1Ylx1NWE1Y1x1NWE1ZFx1NWE1ZVx1NWE1Zlx1NWE2MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzEzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzEzOF1bZ11dPTM1MzI4K2csX1sz'@;
put 'NTMyOCtnXT15WzEzOF1bZ10pO2Zvcih5WzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE2MVx1NWE2M1x1NWE2NFx1NWE2NVx1NWE2Nlx1NWE2OFx1NWE2OVx1NWE2Ylx1NWE2Y1x1NWE2ZFx1NWE2ZVx1NWE2Zlx1NWE3MFx1'@;
put 'NWE3MVx1NWE3Mlx1NWE3M1x1NWE3OFx1NWE3OVx1NWE3Ylx1NWE3Y1x1NWE3ZFx1NWE3ZVx1NWE4MFx1NWE4MVx1NWE4Mlx1NWE4M1x1NWE4NFx1NWE4NVx1NWE4Nlx1NWE4N1x1NWE4OFx1NWE4OVx1NWE4YVx1NWE4Ylx1NWE4Y1x1NWE4ZFx1NWE4ZVx1NWE4Zlx1NWE5MFx1NWE5MVx1NWE5'@;
put 'M1x1NWE5NFx1NWE5NVx1NWE5Nlx1NWE5N1x1NWE5OFx1NWE5OVx1NWE5Y1x1NWE5ZFx1NWE5ZVx1NWE5Zlx1NWFhMFx1NWFhMVx1NWFhMlx1NWFhM1x1NWFhNFx1NWFhNVx1NWFhNlx1NWFhN1x1NWFhOFx1NWFhOVx1NWFhYlx1NWFhY1x1ZmZmZFx1NWFhZFx1NWFhZVx1NWFhZlx1NWFiMFx1'@;
put 'NWFiMVx1NWFiNFx1NWFiNlx1NWFiN1x1NWFiOVx1NWFiYVx1NWFiYlx1NWFiY1x1NWFiZFx1NWFiZlx1NWFjMFx1NWFjM1x1NWFjNFx1NWFjNVx1NWFjNlx1NWFjN1x1NWFjOFx1NWFjYVx1NWFjYlx1NWFjZFx1NWFjZVx1NWFjZlx1NWFkMFx1NWFkMVx1NWFkM1x1NWFkNVx1NWFkN1x1NWFk'@;
put 'OVx1NWFkYVx1NWFkYlx1NWFkZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFlNFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFlYVx1NWFlY1x1NWFlZFx1NWFlZVx1NWFlZlx1NWFmMFx1NWFmMlx1NWFmM1x1NWFmNFx1NWFmNVx1NWFmNlx1NWFmN1x1NWFmOFx1NWFmOVx1NWFmYVx1NWFmYlx1NWFmY1x1'@;
put 'NWFmZFx1NWFmZVx1NWFmZlx1NWIwMFx1NWIwMVx1NWIwMlx1NWIwM1x1NWIwNFx1NWIwNVx1NWIwNlx1NWIwN1x1NWIwOFx1NWIwYVx1NWIwYlx1NWIwY1x1NWIwZFx1NWIwZVx1NWIwZlx1NWIxMFx1NWIxMVx1NWIxMlx1NWIxM1x1NWIxNFx1NWIxNVx1NWIxOFx1NWIxOVx1NWIxYVx1NWIx'@;
put 'Ylx1NWIxY1x1NWIxZFx1NWIxZVx1NWIxZlx1NWIyMFx1NWIyMVx1NWIyMlx1NWIyM1x1NWIyNFx1NWIyNVx1NWIyNlx1NWIyN1x1NWIyOFx1NWIyOVx1NWIyYVx1NWIyYlx1NWIyY1x1NWIyZFx1NWIyZVx1NWIyZlx1NWIzMFx1NWIzMVx1NWIzM1x1NWIzNVx1NWIzNlx1NWIzOFx1NWIzOVx1'@;
put 'NWIzYVx1NWIzYlx1NWIzY1x1NWIzZFx1NWIzZVx1NWIzZlx1NWI0MVx1NWI0Mlx1NWI0M1x1NWI0NFx1NWI0NVx1NWI0Nlx1NWI0N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzEzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzEzOV1bZ11d'@;
put 'PTM1NTg0K2csX1szNTU4NCtnXT15WzEzOV1bZ10pO2Zvcih5WzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI0OFx1NWI0OVx1NWI0YVx1NWI0Ylx1NWI0Y1x1NWI0ZFx1NWI0ZVx1NWI0Zlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1'@;
put 'NWI2MFx1NWI2MVx1NWI2N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5'@;
put 'Nlx1NWI5Zlx1NWJhN1x1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJiMlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZlx1ZmZmZFx1NWJkMVx1NWJkNFx1'@;
put 'NWJkNVx1NWJkNlx1NWJkN1x1NWJkOFx1NWJkOVx1NWJkYVx1NWJkYlx1NWJkY1x1NWJlMFx1NWJlMlx1NWJlM1x1NWJlNlx1NWJlN1x1NWJlOVx1NWJlYVx1NWJlYlx1NWJlY1x1NWJlZFx1NWJlZlx1NWJmMVx1NWJmMlx1NWJmM1x1NWJmNFx1NWJmNVx1NWJmNlx1NWJmN1x1NWJmZFx1NWJm'@;
put 'ZVx1NWMwMFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMwZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1'@;
put 'NWMyZVx1NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2'@;
put 'N1x1NWM2OFx1NWM2OVx1NWM2YVx1NWM2Ylx1NWM2Y1x1NWM2ZFx1NWM3MFx1NWM3Mlx1NWM3M1x1NWM3NFx1NWM3NVx1NWM3Nlx1NWM3N1x1NWM3OFx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4M1x1NWM4NFx1NWM4NVx1NWM4Nlx1NWM4N1x1NWM4OVx1NWM4YVx1NWM4Ylx1'@;
put 'NWM4ZVx1NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1NWM5ZFx1NWM5ZVx1NWM5Zlx1NWNhMFx1NWNhMVx1NWNhNFx1NWNhNVx1NWNhNlx1NWNhN1x1NWNhOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTQwXVtnXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'SVt5WzE0MF1bZ11dPTM1ODQwK2csX1szNTg0MCtnXT15WzE0MF1bZ10pO2Zvcih5WzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNhYVx1NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1'@;
put 'NWNiYlx1NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNVx1NWNjNlx1NWNjN1x1NWNjOFx1NWNjOVx1NWNjYVx1NWNjY1x1NWNjZFx1NWNjZVx1NWNjZlx1NWNkMFx1NWNkMVx1NWNkM1x1NWNkNFx1NWNkNVx1NWNkNlx1NWNkN1x1NWNkOFx1NWNkYVx1NWNkYlx1NWNkY1x1NWNk'@;
put 'ZFx1NWNkZVx1NWNkZlx1NWNlMFx1NWNlMlx1NWNlM1x1NWNlN1x1NWNlOVx1NWNlYlx1NWNlY1x1NWNlZVx1NWNlZlx1NWNmMVx1NWNmMlx1NWNmM1x1NWNmNFx1NWNmNVx1NWNmNlx1NWNmN1x1NWNmOFx1NWNmOVx1NWNmYVx1NWNmY1x1NWNmZFx1NWNmZVx1NWNmZlx1NWQwMFx1ZmZmZFx1'@;
put 'NWQwMVx1NWQwNFx1NWQwNVx1NWQwOFx1NWQwOVx1NWQwYVx1NWQwYlx1NWQwY1x1NWQwZFx1NWQwZlx1NWQxMFx1NWQxMVx1NWQxMlx1NWQxM1x1NWQxNVx1NWQxN1x1NWQxOFx1NWQxOVx1NWQxYVx1NWQxY1x1NWQxZFx1NWQxZlx1NWQyMFx1NWQyMVx1NWQyMlx1NWQyM1x1NWQyNVx1NWQy'@;
put 'OFx1NWQyYVx1NWQyYlx1NWQyY1x1NWQyZlx1NWQzMFx1NWQzMVx1NWQzMlx1NWQzM1x1NWQzNVx1NWQzNlx1NWQzN1x1NWQzOFx1NWQzOVx1NWQzYVx1NWQzYlx1NWQzY1x1NWQzZlx1NWQ0MFx1NWQ0MVx1NWQ0Mlx1NWQ0M1x1NWQ0NFx1NWQ0NVx1NWQ0Nlx1NWQ0OFx1NWQ0OVx1NWQ0ZFx1'@;
put 'NWQ0ZVx1NWQ0Zlx1NWQ1MFx1NWQ1MVx1NWQ1Mlx1NWQ1M1x1NWQ1NFx1NWQ1NVx1NWQ1Nlx1NWQ1N1x1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2M1x1NWQ2NFx1NWQ2NVx1NWQ2Nlx1NWQ2N1x1NWQ2OFx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3'@;
put 'MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NVx1NWQ3Nlx1NWQ3N1x1NWQ3OFx1NWQ3OVx1NWQ3YVx1NWQ3Ylx1NWQ3Y1x1NWQ3ZFx1NWQ3ZVx1NWQ3Zlx1NWQ4MFx1NWQ4MVx1NWQ4M1x1NWQ4NFx1NWQ4NVx1NWQ4Nlx1NWQ4N1x1NWQ4OFx1NWQ4OVx1NWQ4YVx1NWQ4Ylx1NWQ4Y1x1NWQ4ZFx1'@;
put 'NWQ4ZVx1NWQ4Zlx1NWQ5MFx1NWQ5MVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5Nlx1NWQ5N1x1NWQ5OFx1NWQ5YVx1NWQ5Ylx1NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTQxXVtnXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoSVt5WzE0MV1bZ11dPTM2MDk2K2csX1szNjA5NitnXT15WzE0MV1bZ10pO2Zvcih5WzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWRhMVx1NWRhMlx1NWRhM1x1NWRhNFx1NWRhNVx1NWRhNlx1NWRhN1x1'@;
put 'NWRhOFx1NWRhOVx1NWRhYVx1NWRhYlx1NWRhY1x1NWRhZFx1NWRhZVx1NWRhZlx1NWRiMFx1NWRiMVx1NWRiMlx1NWRiM1x1NWRiNFx1NWRiNVx1NWRiNlx1NWRiOFx1NWRiOVx1NWRiYVx1NWRiYlx1NWRiY1x1NWRiZFx1NWRiZVx1NWRiZlx1NWRjMFx1NWRjMVx1NWRjMlx1NWRjM1x1NWRj'@;
put 'NFx1NWRjNlx1NWRjN1x1NWRjOFx1NWRjOVx1NWRjYVx1NWRjYlx1NWRjY1x1NWRjZVx1NWRjZlx1NWRkMFx1NWRkMVx1NWRkMlx1NWRkM1x1NWRkNFx1NWRkNVx1NWRkNlx1NWRkN1x1NWRkOFx1NWRkOVx1NWRkYVx1NWRkY1x1NWRkZlx1NWRlMFx1NWRlM1x1NWRlNFx1NWRlYVx1NWRlY1x1'@;
put 'NWRlZFx1ZmZmZFx1NWRmMFx1NWRmNVx1NWRmNlx1NWRmOFx1NWRmOVx1NWRmYVx1NWRmYlx1NWRmY1x1NWRmZlx1NWUwMFx1NWUwNFx1NWUwN1x1NWUwOVx1NWUwYVx1NWUwYlx1NWUwZFx1NWUwZVx1NWUxMlx1NWUxM1x1NWUxN1x1NWUxZVx1NWUxZlx1NWUyMFx1NWUyMVx1NWUyMlx1NWUy'@;
put 'M1x1NWUyNFx1NWUyNVx1NWUyOFx1NWUyOVx1NWUyYVx1NWUyYlx1NWUyY1x1NWUyZlx1NWUzMFx1NWUzMlx1NWUzM1x1NWUzNFx1NWUzNVx1NWUzNlx1NWUzOVx1NWUzYVx1NWUzZVx1NWUzZlx1NWU0MFx1NWU0MVx1NWU0M1x1NWU0Nlx1NWU0N1x1NWU0OFx1NWU0OVx1NWU0YVx1NWU0Ylx1'@;
put 'NWU0ZFx1NWU0ZVx1NWU0Zlx1NWU1MFx1NWU1MVx1NWU1Mlx1NWU1M1x1NWU1Nlx1NWU1N1x1NWU1OFx1NWU1OVx1NWU1YVx1NWU1Y1x1NWU1ZFx1NWU1Zlx1NWU2MFx1NWU2M1x1NWU2NFx1NWU2NVx1NWU2Nlx1NWU2N1x1NWU2OFx1NWU2OVx1NWU2YVx1NWU2Ylx1NWU2Y1x1NWU2ZFx1NWU2'@;
put 'ZVx1NWU2Zlx1NWU3MFx1NWU3MVx1NWU3NVx1NWU3N1x1NWU3OVx1NWU3ZVx1NWU4MVx1NWU4Mlx1NWU4M1x1NWU4NVx1NWU4OFx1NWU4OVx1NWU4Y1x1NWU4ZFx1NWU4ZVx1NWU5Mlx1NWU5OFx1NWU5Ylx1NWU5ZFx1NWVhMVx1NWVhMlx1NWVhM1x1NWVhNFx1NWVhOFx1NWVhOVx1NWVhYVx1'@;
put 'NWVhYlx1NWVhY1x1NWVhZVx1NWVhZlx1NWViMFx1NWViMVx1NWViMlx1NWViNFx1NWViYVx1NWViYlx1NWViY1x1NWViZFx1NWViZlx1NWVjMFx1NWVjMVx1NWVjMlx1NWVjM1x1NWVjNFx1NWVjNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlb'@;
put 'MTQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE0Ml1bZ11dPTM2MzUyK2csX1szNjM1MitnXT15WzE0Ml1bZ10pO2Zvcih5WzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYlx1NWVjY1x1'@;
put 'NWVjZFx1NWVjZVx1NWVjZlx1NWVkMFx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVkYVx1NWVkY1x1NWVkZFx1NWVkZVx1NWVkZlx1NWVlMFx1NWVlMVx1NWVlMlx1NWVlM1x1NWVlNFx1NWVlNVx1NWVlNlx1NWVlN1x1NWVlOVx1NWVlYlx1NWVlY1x1NWVlZFx1NWVlZVx1NWVl'@;
put 'Zlx1NWVmMFx1NWVmMVx1NWVmMlx1NWVmM1x1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1'@;
put 'NWYyMlx1NWYyM1x1NWYyNFx1ZmZmZFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYzMlx1NWYzM1x1NWYzNFx1NWYzNVx1NWYzNlx1NWYzN1x1NWYzOFx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MVx1NWY0Mlx1NWY0M1x1NWY0NFx1NWY0NVx1NWY0Nlx1NWY0N1x1NWY0'@;
put 'OFx1NWY0OVx1NWY0YVx1NWY0Ylx1NWY0Y1x1NWY0ZFx1NWY0ZVx1NWY0Zlx1NWY1MVx1NWY1NFx1NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1'@;
put 'NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMlx1NWZhM1x1NWZhNFx1NWZhNVx1NWZhNlx1NWZhN1x1NWZhOVx1NWZh'@;
put 'Ylx1NWZhY1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiMlx1NWZiM1x1NWZiNFx1NWZiNlx1NWZiOFx1NWZiOVx1NWZiYVx1NWZiYlx1NWZiZVx1NWZiZlx1NWZjMFx1NWZjMVx1NWZjMlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1'@;
put 'NWZkY1x1NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZlY1x1NWZlZlx1NWZmMFx1NWZmMlx1NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE0M10ubGVuZ3RoOysr'@;
put 'Zyk2NTUzMyE9PXlbMTQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE0M11bZ11dPTM2NjA4K2csX1szNjYwOCtnXT15WzE0M11bZ10pO2Zvcih5WzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAwOFx1NjAwOVx1NjAwYlx1'@;
put 'NjAwY1x1NjAxMFx1NjAxMVx1NjAxM1x1NjAxN1x1NjAxOFx1NjAxYVx1NjAxZVx1NjAxZlx1NjAyMlx1NjAyM1x1NjAyNFx1NjAyY1x1NjAyZFx1NjAyZVx1NjAzMFx1NjAzMVx1NjAzMlx1NjAzM1x1NjAzNFx1NjAzNlx1NjAzN1x1NjAzOFx1NjAzOVx1NjAzYVx1NjAzZFx1NjAzZVx1NjA0'@;
put 'MFx1NjA0NFx1NjA0NVx1NjA0Nlx1NjA0N1x1NjA0OFx1NjA0OVx1NjA0YVx1NjA0Y1x1NjA0ZVx1NjA0Zlx1NjA1MVx1NjA1M1x1NjA1NFx1NjA1Nlx1NjA1N1x1NjA1OFx1NjA1Ylx1NjA1Y1x1NjA1ZVx1NjA1Zlx1NjA2MFx1NjA2MVx1NjA2NVx1NjA2Nlx1NjA2ZVx1NjA3MVx1NjA3Mlx1'@;
put 'NjA3NFx1NjA3NVx1NjA3N1x1NjA3ZVx1NjA4MFx1ZmZmZFx1NjA4MVx1NjA4Mlx1NjA4NVx1NjA4Nlx1NjA4N1x1NjA4OFx1NjA4YVx1NjA4Ylx1NjA4ZVx1NjA4Zlx1NjA5MFx1NjA5MVx1NjA5M1x1NjA5NVx1NjA5N1x1NjA5OFx1NjA5OVx1NjA5Y1x1NjA5ZVx1NjBhMVx1NjBhMlx1NjBh'@;
put 'NFx1NjBhNVx1NjBhN1x1NjBhOVx1NjBhYVx1NjBhZVx1NjBiMFx1NjBiM1x1NjBiNVx1NjBiNlx1NjBiN1x1NjBiOVx1NjBiYVx1NjBiZFx1NjBiZVx1NjBiZlx1NjBjMFx1NjBjMVx1NjBjMlx1NjBjM1x1NjBjNFx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjY1x1NjBjZFx1NjBjZVx1NjBjZlx1'@;
put 'NjBkMFx1NjBkMlx1NjBkM1x1NjBkNFx1NjBkNlx1NjBkN1x1NjBkOVx1NjBkYlx1NjBkZVx1NjBlMVx1NjBlMlx1NjBlM1x1NjBlNFx1NjBlNVx1NjBlYVx1NjBmMVx1NjBmMlx1NjBmNVx1NjBmN1x1NjBmOFx1NjBmYlx1NjBmY1x1NjBmZFx1NjBmZVx1NjBmZlx1NjEwMlx1NjEwM1x1NjEw'@;
put 'NFx1NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMFx1NjExMVx1NjExMlx1NjExM1x1NjExNFx1NjExNlx1NjExN1x1NjExOFx1NjExOVx1NjExYlx1NjExY1x1NjExZFx1NjExZVx1NjEyMVx1NjEyMlx1NjEyNVx1NjEyOFx1NjEyOVx1NjEyYVx1NjEyY1x1NjEyZFx1NjEyZVx1'@;
put 'NjEyZlx1NjEzMFx1NjEzMVx1NjEzMlx1NjEzM1x1NjEzNFx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOFx1NjEzOVx1NjEzYVx1NjEzYlx1NjEzY1x1NjEzZFx1NjEzZVx1NjE0MFx1NjE0MVx1NjE0Mlx1NjE0M1x1NjE0NFx1NjE0NVx1NjE0Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE0'@;
put 'NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE0NF1bZ11dPTM2ODY0K2csX1szNjg2NCtnXT15WzE0NF1bZ10pO2Zvcih5WzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE0N1x1'@;
put 'NjE0OVx1NjE0Ylx1NjE0ZFx1NjE0Zlx1NjE1MFx1NjE1Mlx1NjE1M1x1NjE1NFx1NjE1Nlx1NjE1N1x1NjE1OFx1NjE1OVx1NjE1YVx1NjE1Ylx1NjE1Y1x1NjE1ZVx1NjE1Zlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OVx1NjE2YVx1NjE2Ylx1NjE2Y1x1NjE2'@;
put 'ZFx1NjE2ZVx1NjE2Zlx1NjE3MVx1NjE3Mlx1NjE3M1x1NjE3NFx1NjE3Nlx1NjE3OFx1NjE3OVx1NjE3YVx1NjE3Ylx1NjE3Y1x1NjE3ZFx1NjE3ZVx1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4Mlx1NjE4M1x1NjE4NFx1NjE4NVx1NjE4Nlx1NjE4N1x1NjE4OFx1NjE4OVx1NjE4YVx1NjE4Y1x1'@;
put 'NjE4ZFx1NjE4Zlx1NjE5MFx1NjE5MVx1NjE5Mlx1NjE5M1x1NjE5NVx1ZmZmZFx1NjE5Nlx1NjE5N1x1NjE5OFx1NjE5OVx1NjE5YVx1NjE5Ylx1NjE5Y1x1NjE5ZVx1NjE5Zlx1NjFhMFx1NjFhMVx1NjFhMlx1NjFhM1x1NjFhNFx1NjFhNVx1NjFhNlx1NjFhYVx1NjFhYlx1NjFhZFx1NjFh'@;
put 'ZVx1NjFhZlx1NjFiMFx1NjFiMVx1NjFiMlx1NjFiM1x1NjFiNFx1NjFiNVx1NjFiNlx1NjFiOFx1NjFiOVx1NjFiYVx1NjFiYlx1NjFiY1x1NjFiZFx1NjFiZlx1NjFjMFx1NjFjMVx1NjFjM1x1NjFjNFx1NjFjNVx1NjFjNlx1NjFjN1x1NjFjOVx1NjFjY1x1NjFjZFx1NjFjZVx1NjFjZlx1'@;
put 'NjFkMFx1NjFkM1x1NjFkNVx1NjFkNlx1NjFkN1x1NjFkOFx1NjFkOVx1NjFkYVx1NjFkYlx1NjFkY1x1NjFkZFx1NjFkZVx1NjFkZlx1NjFlMFx1NjFlMVx1NjFlMlx1NjFlM1x1NjFlNFx1NjFlNVx1NjFlN1x1NjFlOFx1NjFlOVx1NjFlYVx1NjFlYlx1NjFlY1x1NjFlZFx1NjFlZVx1NjFl'@;
put 'Zlx1NjFmMFx1NjFmMVx1NjFmMlx1NjFmM1x1NjFmNFx1NjFmNlx1NjFmN1x1NjFmOFx1NjFmOVx1NjFmYVx1NjFmYlx1NjFmY1x1NjFmZFx1NjFmZVx1NjIwMFx1NjIwMVx1NjIwMlx1NjIwM1x1NjIwNFx1NjIwNVx1NjIwN1x1NjIwOVx1NjIxM1x1NjIxNFx1NjIxOVx1NjIxY1x1NjIxZFx1'@;
put 'NjIxZVx1NjIyMFx1NjIyM1x1NjIyNlx1NjIyN1x1NjIyOFx1NjIyOVx1NjIyYlx1NjIyZFx1NjIyZlx1NjIzMFx1NjIzMVx1NjIzMlx1NjIzNVx1NjIzNlx1NjIzOFx1NjIzOVx1NjIzYVx1NjIzYlx1NjIzY1x1NjI0Mlx1NjI0NFx1NjI0NVx1NjI0Nlx1NjI0YVx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LGc9MDtnIT15WzE0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE0NV1bZ11dPTM3MTIwK2csX1szNzEyMCtnXT15WzE0NV1bZ10pO2Zvcih5WzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NjI0Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1NjI1YVx1NjI1Y1x1NjI1ZFx1NjI1ZVx1NjI1Zlx1NjI2MFx1NjI2MVx1NjI2Mlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4'@;
put 'MVx1NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4Ylx1NjI4Y1x1NjI4ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1'@;
put 'NjJiM1x1NjJiNFx1NjJiNlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMVx1ZmZmZFx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJm'@;
put 'YVx1NjJmYlx1NjMwMFx1NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMwY1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1'@;
put 'NjMzMVx1NjMzM1x1NjMzNFx1NjMzNVx1NjMzNlx1NjMzN1x1NjMzOFx1NjMzYlx1NjMzY1x1NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1Nlx1NjM1N1x1NjM1OFx1NjM1OVx1NjM1YVx1NjM1Ylx1NjM1'@;
put 'Y1x1NjM1ZFx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1'@;
put 'NjM4ZFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OVx1NjM5YVx1NjM5Ylx1NjM5Y1x1NjM5ZFx1NjM5ZVx1NjM5Zlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMFx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE0Nl1bZ11dPTM3Mzc2K2csX1szNzM3NitnXT15WzE0Nl1bZ10pO2Zvcih5WzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNjMVx1NjNjMlx1NjNjM1x1NjNjNVx1NjNjN1x1NjNjOFx1NjNjYVx1NjNjYlx1NjNjY1x1NjNkMVx1NjNkM1x1NjNkNFx1NjNkNVx1NjNkN1x1NjNkOFx1NjNkOVx1NjNkYVx1NjNkYlx1NjNkY1x1NjNkZFx1NjNkZlx1NjNlMlx1NjNlNFx1NjNlNVx1NjNl'@;
put 'Nlx1NjNlN1x1NjNlOFx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNlx1NjQwN1x1NjQwOFx1NjQwOVx1NjQwYVx1NjQwZFx1NjQwZVx1NjQxMVx1NjQxMlx1'@;
put 'NjQxNVx1NjQxNlx1NjQxN1x1NjQxOFx1NjQxOVx1NjQxYVx1NjQxZFx1NjQxZlx1NjQyMlx1NjQyM1x1NjQyNFx1ZmZmZFx1NjQyNVx1NjQyN1x1NjQyOFx1NjQyOVx1NjQyYlx1NjQyZVx1NjQyZlx1NjQzMFx1NjQzMVx1NjQzMlx1NjQzM1x1NjQzNVx1NjQzNlx1NjQzN1x1NjQzOFx1NjQz'@;
put 'OVx1NjQzYlx1NjQzY1x1NjQzZVx1NjQ0MFx1NjQ0Mlx1NjQ0M1x1NjQ0OVx1NjQ0Ylx1NjQ0Y1x1NjQ0ZFx1NjQ0ZVx1NjQ0Zlx1NjQ1MFx1NjQ1MVx1NjQ1M1x1NjQ1NVx1NjQ1Nlx1NjQ1N1x1NjQ1OVx1NjQ1YVx1NjQ1Ylx1NjQ1Y1x1NjQ1ZFx1NjQ1Zlx1NjQ2MFx1NjQ2MVx1NjQ2Mlx1'@;
put 'NjQ2M1x1NjQ2NFx1NjQ2NVx1NjQ2Nlx1NjQ2OFx1NjQ2YVx1NjQ2Ylx1NjQ2Y1x1NjQ2ZVx1NjQ2Zlx1NjQ3MFx1NjQ3MVx1NjQ3Mlx1NjQ3M1x1NjQ3NFx1NjQ3NVx1NjQ3Nlx1NjQ3N1x1NjQ3Ylx1NjQ3Y1x1NjQ3ZFx1NjQ3ZVx1NjQ3Zlx1NjQ4MFx1NjQ4MVx1NjQ4M1x1NjQ4Nlx1NjQ4'@;
put 'OFx1NjQ4OVx1NjQ4YVx1NjQ4Ylx1NjQ4Y1x1NjQ4ZFx1NjQ4ZVx1NjQ4Zlx1NjQ5MFx1NjQ5M1x1NjQ5NFx1NjQ5N1x1NjQ5OFx1NjQ5YVx1NjQ5Ylx1NjQ5Y1x1NjQ5ZFx1NjQ5Zlx1NjRhMFx1NjRhMVx1NjRhMlx1NjRhM1x1NjRhNVx1NjRhNlx1NjRhN1x1NjRhOFx1NjRhYVx1NjRhYlx1'@;
put 'NjRhZlx1NjRiMVx1NjRiMlx1NjRiM1x1NjRiNFx1NjRiNlx1NjRiOVx1NjRiYlx1NjRiZFx1NjRiZVx1NjRiZlx1NjRjMVx1NjRjM1x1NjRjNFx1NjRjNlx1NjRjN1x1NjRjOFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRk'@;
put 'OVx1NjRkYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE0N10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE0N11bZ11dPTM3NjMyK2csX1szNzYzMitnXT15WzE0N11bZ10pO2Zvcih5WzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjRkYlx1NjRkY1x1NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRlM1x1NjRlNVx1NjRlN1x1NjRlOFx1NjRlOVx1NjRlYVx1NjRlYlx1NjRlY1x1NjRlZFx1NjRlZVx1NjRlZlx1NjRmMFx1NjRmMVx1NjRmMlx1NjRmM1x1NjRmNFx1NjRm'@;
put 'NVx1NjRmNlx1NjRmN1x1NjRmOFx1NjRmOVx1NjRmYVx1NjRmYlx1NjRmY1x1NjRmZFx1NjRmZVx1NjRmZlx1NjUwMVx1NjUwMlx1NjUwM1x1NjUwNFx1NjUwNVx1NjUwNlx1NjUwN1x1NjUwOFx1NjUwYVx1NjUwYlx1NjUwY1x1NjUwZFx1NjUwZVx1NjUwZlx1NjUxMFx1NjUxMVx1NjUxM1x1'@;
put 'NjUxNFx1NjUxNVx1NjUxNlx1NjUxN1x1NjUxOVx1NjUxYVx1NjUxYlx1NjUxY1x1NjUxZFx1NjUxZVx1NjUxZlx1NjUyMFx1NjUyMVx1ZmZmZFx1NjUyMlx1NjUyM1x1NjUyNFx1NjUyNlx1NjUyN1x1NjUyOFx1NjUyOVx1NjUyYVx1NjUyY1x1NjUyZFx1NjUzMFx1NjUzMVx1NjUzMlx1NjUz'@;
put 'M1x1NjUzN1x1NjUzYVx1NjUzY1x1NjUzZFx1NjU0MFx1NjU0MVx1NjU0Mlx1NjU0M1x1NjU0NFx1NjU0Nlx1NjU0N1x1NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1'@;
put 'NjU2NVx1NjU2N1x1NjU2OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3Nlx1NjU3OFx1NjU3OVx1NjU3YVx1NjU3Ylx1NjU3Y1x1NjU3ZFx1NjU3ZVx1NjU3Zlx1NjU4MFx1NjU4MVx1NjU4Mlx1NjU4M1x1NjU4NFx1NjU4NVx1NjU4Nlx1NjU4'@;
put 'OFx1NjU4OVx1NjU4YVx1NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5NFx1NjU5NVx1NjU5Nlx1NjU5OFx1NjU5YVx1NjU5ZFx1NjU5ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1NjVhYVx1NjVhY1x1NjVhZVx1NjViMVx1NjViMlx1NjViM1x1NjViNFx1NjViNVx1NjViNlx1'@;
put 'NjViN1x1NjViOFx1NjViYVx1NjViYlx1NjViZVx1NjViZlx1NjVjMFx1NjVjMlx1NjVjN1x1NjVjOFx1NjVjOVx1NjVjYVx1NjVjZFx1NjVkMFx1NjVkMVx1NjVkM1x1NjVkNFx1NjVkNVx1NjVkOFx1NjVkOVx1NjVkYVx1NjVkYlx1NjVkY1x1NjVkZFx1NjVkZVx1NjVkZlx1NjVlMVx1NjVl'@;
put 'M1x1NjVlNFx1NjVlYVx1NjVlYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE0OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE0OF1bZ11dPTM3ODg4K2csX1szNzg4OCtnXT15WzE0OF1bZ10pO2Zvcih5WzE0OV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjVmMlx1NjVmM1x1NjVmNFx1NjVmNVx1NjVmOFx1NjVmOVx1NjVmYlx1NjVmY1x1NjVmZFx1NjVmZVx1NjVmZlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYx'@;
put 'MVx1NjYxMlx1NjYxNlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzN1x1NjYzOFx1NjYzOVx1NjYzYVx1NjYzYlx1NjYzZFx1'@;
put 'NjYzZlx1NjY0MFx1NjY0Mlx1NjY0NFx1NjY0NVx1NjY0Nlx1NjY0N1x1NjY0OFx1NjY0OVx1NjY0YVx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OFx1ZmZmZFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OVx1NjY2'@;
put 'YVx1NjY2Ylx1NjY2Y1x1NjY2ZFx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1'@;
put 'NjY5M1x1NjY5NFx1NjY5NVx1NjY5OFx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5ZVx1NjY5Zlx1NjZhMFx1NjZhMVx1NjZhMlx1NjZhM1x1NjZhNFx1NjZhNVx1NjZhNlx1NjZhOVx1NjZhYVx1NjZhYlx1NjZhY1x1NjZhZFx1NjZhZlx1NjZiMFx1NjZiMVx1NjZiMlx1NjZiM1x1NjZi'@;
put 'NVx1NjZiNlx1NjZiN1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZlx1NjZjMFx1NjZjMVx1NjZjMlx1NjZjM1x1NjZjNFx1NjZjNVx1NjZjNlx1NjZjN1x1NjZjOFx1NjZjOVx1NjZjYVx1NjZjYlx1NjZjY1x1NjZjZFx1NjZjZVx1NjZjZlx1NjZkMFx1NjZkMVx1NjZkMlx1'@;
put 'NjZkM1x1NjZkNFx1NjZkNVx1NjZkNlx1NjZkN1x1NjZkOFx1NjZkYVx1NjZkZVx1NjZkZlx1NjZlMFx1NjZlMVx1NjZlMlx1NjZlM1x1NjZlNFx1NjZlNVx1NjZlN1x1NjZlOFx1NjZlYVx1NjZlYlx1NjZlY1x1NjZlZFx1NjZlZVx1NjZlZlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZm'@;
put 'YVx1NjZmYlx1NjZmZFx1NjcwMVx1NjcwMlx1NjcwM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE0OV1bZ11dPTM4MTQ0K2csX1szODE0NCtnXT15WzE0OV1bZ10pO2Zvcih5WzE1MF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcwNFx1NjcwNVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMFx1NjcyMVx1Njcy'@;
put 'Mlx1NjcyM1x1NjcyNFx1NjcyNVx1NjcyN1x1NjcyOVx1NjcyZVx1NjczMFx1NjczMlx1NjczM1x1NjczNlx1NjczN1x1NjczOFx1NjczOVx1NjczYlx1NjczY1x1NjczZVx1NjczZlx1Njc0MVx1Njc0NFx1Njc0NVx1Njc0N1x1Njc0YVx1Njc0Ylx1Njc0ZFx1Njc1Mlx1Njc1NFx1Njc1NVx1'@;
put 'Njc1N1x1Njc1OFx1Njc1OVx1Njc1YVx1Njc1Ylx1Njc1ZFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Ylx1Njc2Y1x1Njc2ZVx1Njc3MVx1Njc3NFx1Njc3Nlx1ZmZmZFx1Njc3OFx1Njc3OVx1Njc3YVx1Njc3Ylx1Njc3ZFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4'@;
put 'Nlx1Njc4OFx1Njc4YVx1Njc4Y1x1Njc4ZFx1Njc4ZVx1Njc4Zlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Ylx1Njc5Zlx1NjdhMFx1NjdhMVx1NjdhNFx1NjdhNlx1NjdhOVx1NjdhY1x1NjdhZVx1NjdiMVx1NjdiMlx1NjdiNFx1NjdiOVx1NjdiYVx1NjdiYlx1'@;
put 'NjdiY1x1NjdiZFx1NjdiZVx1NjdiZlx1NjdjMFx1NjdjMlx1NjdjNVx1NjdjNlx1NjdjN1x1NjdjOFx1NjdjOVx1NjdjYVx1NjdjYlx1NjdjY1x1NjdjZFx1NjdjZVx1NjdkNVx1NjdkNlx1NjdkN1x1NjdkYlx1NjdkZlx1NjdlMVx1NjdlM1x1NjdlNFx1NjdlNlx1NjdlN1x1NjdlOFx1Njdl'@;
put 'YVx1NjdlYlx1NjdlZFx1NjdlZVx1NjdmMlx1NjdmNVx1NjdmNlx1NjdmN1x1NjdmOFx1NjdmOVx1NjdmYVx1NjdmYlx1NjdmY1x1NjdmZVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwZFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFx1NjgxOVx1NjgxYVx1NjgxYlx1'@;
put 'NjgxY1x1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMlx1NjgyM1x1NjgyNFx1NjgyNVx1NjgyNlx1NjgyN1x1NjgyOFx1NjgyYlx1NjgyY1x1NjgyZFx1NjgyZVx1NjgyZlx1NjgzMFx1NjgzMVx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzYVx1NjgzYlx1NjgzZlx1Njg0N1x1Njg0Ylx1Njg0ZFx1Njg0'@;
put 'Zlx1Njg1Mlx1Njg1Nlx1Njg1N1x1Njg1OFx1Njg1OVx1Njg1YVx1Njg1Ylx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE1MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTUwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE1MF1bZ11dPTM4NDAwK2csX1szODQwMCtnXT15WzE1MF1bZ10pO2Zv'@;
put 'cih5WzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njg1Y1x1Njg1ZFx1Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2Y1x1Njg2ZFx1Njg2ZVx1Njg2Zlx1Njg3MFx1Njg3MVx1Njg3Mlx1Njg3M1x1Njg3NVx1Njg3OFx1Njg3OVx1Njg3'@;
put 'YVx1Njg3Ylx1Njg3Y1x1Njg3ZFx1Njg3ZVx1Njg3Zlx1Njg4MFx1Njg4Mlx1Njg4NFx1Njg4N1x1Njg4OFx1Njg4OVx1Njg4YVx1Njg4Ylx1Njg4Y1x1Njg4ZFx1Njg4ZVx1Njg5MFx1Njg5MVx1Njg5Mlx1Njg5NFx1Njg5NVx1Njg5Nlx1Njg5OFx1Njg5OVx1Njg5YVx1Njg5Ylx1Njg5Y1x1'@;
put 'Njg5ZFx1Njg5ZVx1Njg5Zlx1NjhhMFx1NjhhMVx1NjhhM1x1NjhhNFx1NjhhNVx1NjhhOVx1NjhhYVx1NjhhYlx1NjhhY1x1NjhhZVx1NjhiMVx1NjhiMlx1NjhiNFx1NjhiNlx1NjhiN1x1NjhiOFx1ZmZmZFx1NjhiOVx1NjhiYVx1NjhiYlx1NjhiY1x1NjhiZFx1NjhiZVx1NjhiZlx1Njhj'@;
put 'MVx1NjhjM1x1NjhjNFx1NjhjNVx1NjhjNlx1NjhjN1x1NjhjOFx1NjhjYVx1NjhjY1x1NjhjZVx1NjhjZlx1NjhkMFx1NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1NjhkYlx1NjhkY1x1NjhkZFx1NjhkZVx1NjhkZlx1NjhlMVx1NjhlMlx1NjhlNFx1NjhlNVx1NjhlNlx1'@;
put 'NjhlN1x1NjhlOFx1NjhlOVx1NjhlYVx1NjhlYlx1NjhlY1x1NjhlZFx1NjhlZlx1NjhmMlx1NjhmM1x1NjhmNFx1NjhmNlx1NjhmN1x1NjhmOFx1NjhmYlx1NjhmZFx1NjhmZVx1NjhmZlx1NjkwMFx1NjkwMlx1NjkwM1x1NjkwNFx1NjkwNlx1NjkwN1x1NjkwOFx1NjkwOVx1NjkwYVx1Njkw'@;
put 'Y1x1NjkwZlx1NjkxMVx1NjkxM1x1NjkxNFx1NjkxNVx1NjkxNlx1NjkxN1x1NjkxOFx1NjkxOVx1NjkxYVx1NjkxYlx1NjkxY1x1NjkxZFx1NjkxZVx1NjkyMVx1NjkyMlx1NjkyM1x1NjkyNVx1NjkyNlx1NjkyN1x1NjkyOFx1NjkyOVx1NjkyYVx1NjkyYlx1NjkyY1x1NjkyZVx1NjkyZlx1'@;
put 'NjkzMVx1NjkzMlx1NjkzM1x1NjkzNVx1NjkzNlx1NjkzN1x1NjkzOFx1NjkzYVx1NjkzYlx1NjkzY1x1NjkzZVx1Njk0MFx1Njk0MVx1Njk0M1x1Njk0NFx1Njk0NVx1Njk0Nlx1Njk0N1x1Njk0OFx1Njk0OVx1Njk0YVx1Njk0Ylx1Njk0Y1x1Njk0ZFx1Njk0ZVx1Njk0Zlx1Njk1MFx1Njk1'@;
put 'MVx1Njk1Mlx1Njk1M1x1Njk1NVx1Njk1Nlx1Njk1OFx1Njk1OVx1Njk1Ylx1Njk1Y1x1Njk1Zlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE1MV1bZ11dPTM4NjU2K2csX1szODY1NitnXT15'@;
put 'WzE1MV1bZ10pO2Zvcih5WzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3Mlx1Njk3M1x1Njk3'@;
put 'NFx1Njk3NVx1Njk3Nlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1Njk4ZVx1Njk4Zlx1Njk5MFx1Njk5MVx1Njk5Mlx1Njk5M1x1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZFx1Njk5ZVx1Njk5Zlx1NjlhMFx1'@;
put 'NjlhMVx1NjlhMlx1NjlhM1x1NjlhNFx1NjlhNVx1NjlhNlx1NjlhOVx1NjlhYVx1NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZFx1ZmZmZFx1NjliZVx1NjliZlx1NjljMFx1NjljMlx1NjljM1x1Njlj'@;
put 'NFx1NjljNVx1NjljNlx1NjljN1x1NjljOFx1NjljOVx1NjljYlx1NjljZFx1NjljZlx1NjlkMVx1NjlkMlx1NjlkM1x1NjlkNVx1NjlkNlx1NjlkN1x1NjlkOFx1NjlkOVx1NjlkYVx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMVx1NjllMlx1NjllM1x1NjllNFx1NjllNVx1NjllNlx1NjllN1x1'@;
put 'NjllOFx1NjllOVx1NjllYVx1NjllYlx1NjllY1x1NjllZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmM1x1NjlmNFx1NjlmNVx1NjlmNlx1NjlmN1x1NjlmOFx1NjlmOVx1NjlmYVx1NjlmYlx1NjlmY1x1NjlmZVx1NmEwMFx1NmEwMVx1NmEwMlx1NmEwM1x1NmEwNFx1NmEwNVx1NmEwNlx1NmEw'@;
put 'N1x1NmEwOFx1NmEwOVx1NmEwYlx1NmEwY1x1NmEwZFx1NmEwZVx1NmEwZlx1NmExMFx1NmExMVx1NmExMlx1NmExM1x1NmExNFx1NmExNVx1NmExNlx1NmExOVx1NmExYVx1NmExYlx1NmExY1x1NmExZFx1NmExZVx1NmEyMFx1NmEyMlx1NmEyM1x1NmEyNFx1NmEyNVx1NmEyNlx1NmEyN1x1'@;
put 'NmEyOVx1NmEyYlx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1NmEzNFx1NmEzNlx1NmEzN1x1NmEzOFx1NmEzOVx1NmEzYVx1NmEzYlx1NmEzY1x1NmEzZlx1NmE0MFx1NmE0MVx1NmE0Mlx1NmE0M1x1NmE0NVx1NmE0Nlx1NmE0OFx1NmE0OVx1NmE0YVx1NmE0Ylx1NmE0'@;
put 'Y1x1NmE0ZFx1NmE0ZVx1NmE0Zlx1NmE1MVx1NmE1Mlx1NmE1M1x1NmE1NFx1NmE1NVx1NmE1Nlx1NmE1N1x1NmE1YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE1Ml1bZ11dPTM4OTEyK2cs'@;
put 'X1szODkxMitnXT15WzE1Ml1bZ10pO2Zvcih5WzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Y1x1NmE1ZFx1NmE1ZVx1NmE1Zlx1NmE2MFx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2Nlx1NmE2N1x1NmE2OFx1NmE2OVx1NmE2'@;
put 'YVx1NmE2Ylx1NmE2Y1x1NmE2ZFx1NmE2ZVx1NmE2Zlx1NmE3MFx1NmE3Mlx1NmE3M1x1NmE3NFx1NmE3NVx1NmE3Nlx1NmE3N1x1NmE3OFx1NmE3YVx1NmE3Ylx1NmE3ZFx1NmE3ZVx1NmE3Zlx1NmE4MVx1NmE4Mlx1NmE4M1x1NmE4NVx1NmE4Nlx1NmE4N1x1NmE4OFx1NmE4OVx1NmE4YVx1'@;
put 'NmE4Ylx1NmE4Y1x1NmE4ZFx1NmE4Zlx1NmE5Mlx1NmE5M1x1NmE5NFx1NmE5NVx1NmE5Nlx1NmE5OFx1NmE5OVx1NmE5YVx1NmE5Ylx1NmE5Y1x1NmE5ZFx1NmE5ZVx1NmE5Zlx1NmFhMVx1NmFhMlx1NmFhM1x1NmFhNFx1NmFhNVx1NmFhNlx1ZmZmZFx1NmFhN1x1NmFhOFx1NmFhYVx1NmFh'@;
put 'ZFx1NmFhZVx1NmFhZlx1NmFiMFx1NmFiMVx1NmFiMlx1NmFiM1x1NmFiNFx1NmFiNVx1NmFiNlx1NmFiN1x1NmFiOFx1NmFiOVx1NmFiYVx1NmFiYlx1NmFiY1x1NmFiZFx1NmFiZVx1NmFiZlx1NmFjMFx1NmFjMVx1NmFjMlx1NmFjM1x1NmFjNFx1NmFjNVx1NmFjNlx1NmFjN1x1NmFjOFx1'@;
put 'NmFjOVx1NmFjYVx1NmFjYlx1NmFjY1x1NmFjZFx1NmFjZVx1NmFjZlx1NmFkMFx1NmFkMVx1NmFkMlx1NmFkM1x1NmFkNFx1NmFkNVx1NmFkNlx1NmFkN1x1NmFkOFx1NmFkOVx1NmFkYVx1NmFkYlx1NmFkY1x1NmFkZFx1NmFkZVx1NmFkZlx1NmFlMFx1NmFlMVx1NmFlMlx1NmFlM1x1NmFl'@;
put 'NFx1NmFlNVx1NmFlNlx1NmFlN1x1NmFlOFx1NmFlOVx1NmFlYVx1NmFlYlx1NmFlY1x1NmFlZFx1NmFlZVx1NmFlZlx1NmFmMFx1NmFmMVx1NmFmMlx1NmFmM1x1NmFmNFx1NmFmNVx1NmFmNlx1NmFmN1x1NmFmOFx1NmFmOVx1NmFmYVx1NmFmYlx1NmFmY1x1NmFmZFx1NmFmZVx1NmFmZlx1'@;
put 'NmIwMFx1NmIwMVx1NmIwMlx1NmIwM1x1NmIwNFx1NmIwNVx1NmIwNlx1NmIwN1x1NmIwOFx1NmIwOVx1NmIwYVx1NmIwYlx1NmIwY1x1NmIwZFx1NmIwZVx1NmIwZlx1NmIxMFx1NmIxMVx1NmIxMlx1NmIxM1x1NmIxNFx1NmIxNVx1NmIxNlx1NmIxN1x1NmIxOFx1NmIxOVx1NmIxYVx1NmIx'@;
put 'Ylx1NmIxY1x1NmIxZFx1NmIxZVx1NmIxZlx1NmIyNVx1NmIyNlx1NmIyOFx1NmIyOVx1NmIyYVx1NmIyYlx1NmIyY1x1NmIyZFx1NmIyZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE1M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTUzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE1M11b'@;
put 'Z11dPTM5MTY4K2csX1szOTE2OCtnXT15WzE1M11bZ10pO2Zvcih5WzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmIyZlx1NmIzMFx1NmIzMVx1NmIzM1x1NmIzNFx1NmIzNVx1NmIzNlx1NmIzOFx1NmIzYlx1NmIzY1x1NmIz'@;
put 'ZFx1NmIzZlx1NmI0MFx1NmI0MVx1NmI0Mlx1NmI0NFx1NmI0NVx1NmI0OFx1NmI0YVx1NmI0Ylx1NmI0ZFx1NmI0ZVx1NmI0Zlx1NmI1MFx1NmI1MVx1NmI1Mlx1NmI1M1x1NmI1NFx1NmI1NVx1NmI1Nlx1NmI1N1x1NmI1OFx1NmI1YVx1NmI1Ylx1NmI1Y1x1NmI1ZFx1NmI1ZVx1NmI1Zlx1'@;
put 'NmI2MFx1NmI2MVx1NmI2OFx1NmI2OVx1NmI2Ylx1NmI2Y1x1NmI2ZFx1NmI2ZVx1NmI2Zlx1NmI3MFx1NmI3MVx1NmI3Mlx1NmI3M1x1NmI3NFx1NmI3NVx1NmI3Nlx1NmI3N1x1NmI3OFx1NmI3YVx1NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OFx1ZmZmZFx1NmI4Y1x1NmI4'@;
put 'ZVx1NmI4Zlx1NmI5MFx1NmI5MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5OFx1NmI5OVx1NmI5Y1x1NmI5ZFx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhNFx1NmJhNVx1NmJhNlx1NmJhN1x1NmJhOFx1NmJhOVx1NmJhYlx1NmJhY1x1NmJhZFx1NmJhZVx1NmJhZlx1NmJiMFx1'@;
put 'NmJiMVx1NmJiMlx1NmJiNlx1NmJiOFx1NmJiOVx1NmJiYVx1NmJiYlx1NmJiY1x1NmJiZFx1NmJiZVx1NmJjMFx1NmJjM1x1NmJjNFx1NmJjNlx1NmJjN1x1NmJjOFx1NmJjOVx1NmJjYVx1NmJjY1x1NmJjZVx1NmJkMFx1NmJkMVx1NmJkOFx1NmJkYVx1NmJkY1x1NmJkZFx1NmJkZVx1NmJk'@;
put 'Zlx1NmJlMFx1NmJlMlx1NmJlM1x1NmJlNFx1NmJlNVx1NmJlNlx1NmJlN1x1NmJlOFx1NmJlOVx1NmJlY1x1NmJlZFx1NmJlZVx1NmJmMFx1NmJmMVx1NmJmMlx1NmJmNFx1NmJmNlx1NmJmN1x1NmJmOFx1NmJmYVx1NmJmYlx1NmJmY1x1NmJmZVx1NmJmZlx1NmMwMFx1NmMwMVx1NmMwMlx1'@;
put 'NmMwM1x1NmMwNFx1NmMwOFx1NmMwOVx1NmMwYVx1NmMwYlx1NmMwY1x1NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMxZFx1NmMxZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1NmMyY1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMz'@;
put 'ZVx1NmMzZlx1NmM0M1x1NmM0NFx1NmM0NVx1NmM0OFx1NmM0Ylx1NmM0Y1x1NmM0ZFx1NmM0ZVx1NmM0Zlx1NmM1MVx1NmM1Mlx1NmM1M1x1NmM1Nlx1NmM1OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE1NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTU0XVtnXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoSVt5WzE1NF1bZ11dPTM5NDI0K2csX1szOTQyNCtnXT15WzE1NF1bZ10pO2Zvcih5WzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2Ylx1NmM2'@;
put 'Y1x1NmM2ZFx1NmM2ZVx1NmM2Zlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1'@;
put 'NmM5ZFx1NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNiMFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOFx1ZmZm'@;
put 'ZFx1NmNkOVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1'@;
put 'NmQxM1x1NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQxZlx1NmQyMFx1NmQyMVx1NmQyMlx1NmQyM1x1NmQyNFx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0'@;
put 'Mlx1NmQ0NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1'@;
put 'NmQ3YVx1NmQ3Ylx1NmQ3ZFx1NmQ3ZVx1NmQ3Zlx1NmQ4MFx1NmQ4MVx1NmQ4M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmQ5OVx1NmQ5YVx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRi'@;
put 'MFx1NmRiMVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOVx1NmRiYVx1NmRiYlx1NmRiY1x1NmRiZFx1NmRiZVx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE1NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTU1XVtnXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoSVt5WzE1NV1bZ11dPTM5NjgwK2csX1szOTY4MCtnXT15WzE1NV1bZ10pO2Zvcih5WzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRk'@;
put 'NFx1NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZFx1NmRmZVx1NmRmZlx1NmUwMFx1NmUwMVx1'@;
put 'NmUwMlx1NmUwM1x1NmUwNFx1NmUwNlx1NmUwN1x1NmUwOFx1NmUwOVx1NmUwYlx1NmUwZlx1NmUxMlx1NmUxM1x1NmUxNVx1NmUxOFx1NmUxOVx1NmUxYlx1NmUxY1x1NmUxZVx1NmUxZlx1NmUyMlx1NmUyNlx1NmUyN1x1NmUyOFx1NmUyYVx1NmUyY1x1NmUyZVx1NmUzMFx1NmUzMVx1NmUz'@;
put 'M1x1NmUzNVx1ZmZmZFx1NmUzNlx1NmUzN1x1NmUzOVx1NmUzYlx1NmUzY1x1NmUzZFx1NmUzZVx1NmUzZlx1NmU0MFx1NmU0MVx1NmU0Mlx1NmU0NVx1NmU0Nlx1NmU0N1x1NmU0OFx1NmU0OVx1NmU0YVx1NmU0Ylx1NmU0Y1x1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1'@;
put 'NmU1OVx1NmU1YVx1NmU1Y1x1NmU1ZFx1NmU1ZVx1NmU2MFx1NmU2MVx1NmU2Mlx1NmU2M1x1NmU2NFx1NmU2NVx1NmU2Nlx1NmU2N1x1NmU2OFx1NmU2OVx1NmU2YVx1NmU2Y1x1NmU2ZFx1NmU2Zlx1NmU3MFx1NmU3MVx1NmU3Mlx1NmU3M1x1NmU3NFx1NmU3NVx1NmU3Nlx1NmU3N1x1NmU3'@;
put 'OFx1NmU3OVx1NmU3YVx1NmU3Ylx1NmU3Y1x1NmU3ZFx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YVx1NmU4Ylx1NmU4Y1x1NmU4ZFx1NmU4ZVx1NmU5MVx1NmU5Mlx1NmU5M1x1NmU5NFx1NmU5NVx1NmU5Nlx1NmU5N1x1NmU5OVx1NmU5YVx1NmU5Ylx1NmU5ZFx1'@;
put 'NmU5ZVx1NmVhMFx1NmVhMVx1NmVhM1x1NmVhNFx1NmVhNlx1NmVhOFx1NmVhOVx1NmVhYlx1NmVhY1x1NmVhZFx1NmVhZVx1NmViMFx1NmViM1x1NmViNVx1NmViOFx1NmViOVx1NmViY1x1NmViZVx1NmViZlx1NmVjMFx1NmVjM1x1NmVjNFx1NmVjNVx1NmVjNlx1NmVjOFx1NmVjOVx1NmVj'@;
put 'YVx1NmVjY1x1NmVjZFx1NmVjZVx1NmVkMFx1NmVkMlx1NmVkNlx1NmVkOFx1NmVkOVx1NmVkYlx1NmVkY1x1NmVkZFx1NmVlM1x1NmVlN1x1NmVlYVx1NmVlYlx1NmVlY1x1NmVlZFx1NmVlZVx1NmVlZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE1Nl0ubGVuZ3RoOysrZyk2NTUzMyE9'@;
put 'PXlbMTU2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE1Nl1bZ11dPTM5OTM2K2csX1szOTkzNitnXT15WzE1Nl1bZ10pO2Zvcih5WzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmMFx1NmVmMVx1NmVmMlx1NmVmM1x1NmVm'@;
put 'NVx1NmVmNlx1NmVmN1x1NmVmOFx1NmVmYVx1NmVmYlx1NmVmY1x1NmVmZFx1NmVmZVx1NmVmZlx1NmYwMFx1NmYwMVx1NmYwM1x1NmYwNFx1NmYwNVx1NmYwN1x1NmYwOFx1NmYwYVx1NmYwYlx1NmYwY1x1NmYwZFx1NmYwZVx1NmYxMFx1NmYxMVx1NmYxMlx1NmYxNlx1NmYxN1x1NmYxOFx1'@;
put 'NmYxOVx1NmYxYVx1NmYxYlx1NmYxY1x1NmYxZFx1NmYxZVx1NmYxZlx1NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYyNlx1NmYyN1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYzMFx1NmYzMlx1NmYzNFx1NmYzNVx1NmYzN1x1NmYzOFx1NmYzOVx1NmYzYVx1NmYzYlx1NmYzY1x1NmYzZFx1NmYz'@;
put 'Zlx1NmY0MFx1NmY0MVx1NmY0Mlx1ZmZmZFx1NmY0M1x1NmY0NFx1NmY0NVx1NmY0OFx1NmY0OVx1NmY0YVx1NmY0Y1x1NmY0ZVx1NmY0Zlx1NmY1MFx1NmY1MVx1NmY1Mlx1NmY1M1x1NmY1NFx1NmY1NVx1NmY1Nlx1NmY1N1x1NmY1OVx1NmY1YVx1NmY1Ylx1NmY1ZFx1NmY1Zlx1NmY2MFx1'@;
put 'NmY2MVx1NmY2M1x1NmY2NFx1NmY2NVx1NmY2N1x1NmY2OFx1NmY2OVx1NmY2YVx1NmY2Ylx1NmY2Y1x1NmY2Zlx1NmY3MFx1NmY3MVx1NmY3M1x1NmY3NVx1NmY3Nlx1NmY3N1x1NmY3OVx1NmY3Ylx1NmY3ZFx1NmY3ZVx1NmY3Zlx1NmY4MFx1NmY4MVx1NmY4Mlx1NmY4M1x1NmY4NVx1NmY4'@;
put 'Nlx1NmY4N1x1NmY4YVx1NmY4Ylx1NmY4Zlx1NmY5MFx1NmY5MVx1NmY5Mlx1NmY5M1x1NmY5NFx1NmY5NVx1NmY5Nlx1NmY5N1x1NmY5OFx1NmY5OVx1NmY5YVx1NmY5Ylx1NmY5ZFx1NmY5ZVx1NmY5Zlx1NmZhMFx1NmZhMlx1NmZhM1x1NmZhNFx1NmZhNVx1NmZhNlx1NmZhOFx1NmZhOVx1'@;
put 'NmZhYVx1NmZhYlx1NmZhY1x1NmZhZFx1NmZhZVx1NmZhZlx1NmZiMFx1NmZiMVx1NmZiMlx1NmZiNFx1NmZiNVx1NmZiN1x1NmZiOFx1NmZiYVx1NmZiYlx1NmZiY1x1NmZiZFx1NmZiZVx1NmZiZlx1NmZjMVx1NmZjM1x1NmZjNFx1NmZjNVx1NmZjNlx1NmZjN1x1NmZjOFx1NmZjYVx1NmZj'@;
put 'Ylx1NmZjY1x1NmZjZFx1NmZjZVx1NmZjZlx1NmZkMFx1NmZkM1x1NmZkNFx1NmZkNVx1NmZkNlx1NmZkN1x1NmZkOFx1NmZkOVx1NmZkYVx1NmZkYlx1NmZkY1x1NmZkZFx1NmZkZlx1NmZlMlx1NmZlM1x1NmZlNFx1NmZlNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE1N10ubGVuZ3Ro'@;
put 'OysrZyk2NTUzMyE9PXlbMTU3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE1N11bZ11dPTQwMTkyK2csX1s0MDE5MitnXT15WzE1N11bZ10pO2Zvcih5WzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlNlx1NmZlN1x1NmZl'@;
put 'OFx1NmZlOVx1NmZlYVx1NmZlYlx1NmZlY1x1NmZlZFx1NmZmMFx1NmZmMVx1NmZmMlx1NmZmM1x1NmZmNFx1NmZmNVx1NmZmNlx1NmZmN1x1NmZmOFx1NmZmOVx1NmZmYVx1NmZmYlx1NmZmY1x1NmZmZFx1NmZmZVx1NmZmZlx1NzAwMFx1NzAwMVx1NzAwMlx1NzAwM1x1NzAwNFx1NzAwNVx1'@;
put 'NzAwNlx1NzAwN1x1NzAwOFx1NzAwOVx1NzAwYVx1NzAwYlx1NzAwY1x1NzAwZFx1NzAwZVx1NzAwZlx1NzAxMFx1NzAxMlx1NzAxM1x1NzAxNFx1NzAxNVx1NzAxNlx1NzAxN1x1NzAxOFx1NzAxOVx1NzAxY1x1NzAxZFx1NzAxZVx1NzAxZlx1NzAyMFx1NzAyMVx1NzAyMlx1NzAyNFx1NzAy'@;
put 'NVx1NzAyNlx1NzAyN1x1NzAyOFx1NzAyOVx1NzAyYVx1ZmZmZFx1NzAyYlx1NzAyY1x1NzAyZFx1NzAyZVx1NzAyZlx1NzAzMFx1NzAzMVx1NzAzMlx1NzAzM1x1NzAzNFx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYVx1NzAzYlx1NzAzY1x1NzAzZFx1NzAzZVx1NzAzZlx1NzA0MFx1NzA0MVx1'@;
put 'NzA0Mlx1NzA0M1x1NzA0NFx1NzA0NVx1NzA0Nlx1NzA0N1x1NzA0OFx1NzA0OVx1NzA0YVx1NzA0Ylx1NzA0ZFx1NzA0ZVx1NzA1MFx1NzA1MVx1NzA1Mlx1NzA1M1x1NzA1NFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1OFx1NzA1OVx1NzA1YVx1NzA1Ylx1NzA1Y1x1NzA1ZFx1NzA1Zlx1NzA2'@;
put 'MFx1NzA2MVx1NzA2Mlx1NzA2M1x1NzA2NFx1NzA2NVx1NzA2Nlx1NzA2N1x1NzA2OFx1NzA2OVx1NzA2YVx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1'@;
put 'NzA4Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZVx1NzA5Zlx1NzBhMFx1NzBhMVx1NzBhMlx1NzBhM1x1NzBhNFx1NzBhNVx1NzBhNlx1NzBhN1x1NzBhOFx1NzBhOVx1NzBhYVx1NzBiMFx1NzBiMlx1NzBiNFx1NzBi'@;
put 'NVx1NzBiNlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBjOVx1NzBjYlx1NzBjY1x1NzBjZFx1NzBjZVx1NzBjZlx1NzBkMFx1NzBkMVx1NzBkMlx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkN1x1NzBkYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15'@;
put 'WzE1OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTU4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE1OF1bZ11dPTQwNDQ4K2csX1s0MDQ0OCtnXT15WzE1OF1bZ10pO2Zvcih5WzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBk'@;
put 'Y1x1NzBkZFx1NzBkZVx1NzBlMFx1NzBlMVx1NzBlMlx1NzBlM1x1NzBlNVx1NzBlYVx1NzBlZVx1NzBmMFx1NzBmMVx1NzBmMlx1NzBmM1x1NzBmNFx1NzBmNVx1NzBmNlx1NzBmOFx1NzBmYVx1NzBmYlx1NzBmY1x1NzBmZVx1NzBmZlx1NzEwMFx1NzEwMVx1NzEwMlx1NzEwM1x1NzEwNFx1'@;
put 'NzEwNVx1NzEwNlx1NzEwN1x1NzEwOFx1NzEwYlx1NzEwY1x1NzEwZFx1NzEwZVx1NzEwZlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYlx1NzExY1x1NzExZFx1NzExZVx1NzExZlx1NzEyMFx1NzEyMVx1NzEyMlx1NzEyM1x1NzEyNFx1NzEyNVx1NzEyN1x1NzEyOFx1NzEyOVx1NzEy'@;
put 'YVx1NzEyYlx1NzEyY1x1NzEyZFx1NzEyZVx1NzEzMlx1NzEzM1x1NzEzNFx1ZmZmZFx1NzEzNVx1NzEzN1x1NzEzOFx1NzEzOVx1NzEzYVx1NzEzYlx1NzEzY1x1NzEzZFx1NzEzZVx1NzEzZlx1NzE0MFx1NzE0MVx1NzE0Mlx1NzE0M1x1NzE0NFx1NzE0Nlx1NzE0N1x1NzE0OFx1NzE0OVx1'@;
put 'NzE0Ylx1NzE0ZFx1NzE0Zlx1NzE1MFx1NzE1MVx1NzE1Mlx1NzE1M1x1NzE1NFx1NzE1NVx1NzE1Nlx1NzE1N1x1NzE1OFx1NzE1OVx1NzE1YVx1NzE1Ylx1NzE1ZFx1NzE1Zlx1NzE2MFx1NzE2MVx1NzE2Mlx1NzE2M1x1NzE2NVx1NzE2OVx1NzE2YVx1NzE2Ylx1NzE2Y1x1NzE2ZFx1NzE2'@;
put 'Zlx1NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZVx1NzE3Zlx1NzE4MFx1NzE4MVx1NzE4Mlx1NzE4M1x1NzE4NVx1NzE4Nlx1NzE4N1x1NzE4OFx1NzE4OVx1NzE4Ylx1NzE4Y1x1NzE4ZFx1NzE4ZVx1NzE5MFx1NzE5MVx1NzE5Mlx1'@;
put 'NzE5M1x1NzE5NVx1NzE5Nlx1NzE5N1x1NzE5YVx1NzE5Ylx1NzE5Y1x1NzE5ZFx1NzE5ZVx1NzFhMVx1NzFhMlx1NzFhM1x1NzFhNFx1NzFhNVx1NzFhNlx1NzFhN1x1NzFhOVx1NzFhYVx1NzFhYlx1NzFhZFx1NzFhZVx1NzFhZlx1NzFiMFx1NzFiMVx1NzFiMlx1NzFiNFx1NzFiNlx1NzFi'@;
put 'N1x1NzFiOFx1NzFiYVx1NzFiYlx1NzFiY1x1NzFiZFx1NzFiZVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjMlx1NzFjNFx1NzFjNVx1NzFjNlx1NzFjN1x1NzFjOFx1NzFjOVx1NzFjYVx1NzFjYlx1NzFjY1x1NzFjZFx1NzFjZlx1NzFkMFx1NzFkMVx1NzFkMlx1NzFkM1x1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLGc9MDtnIT15WzE1OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTU5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE1OV1bZ11dPTQwNzA0K2csX1s0MDcwNCtnXT15WzE1OV1bZ10pO2Zvcih5WzE2MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NzFkNlx1NzFkN1x1NzFkOFx1NzFkOVx1NzFkYVx1NzFkYlx1NzFkY1x1NzFkZFx1NzFkZVx1NzFkZlx1NzFlMVx1NzFlMlx1NzFlM1x1NzFlNFx1NzFlNlx1NzFlOFx1NzFlOVx1NzFlYVx1NzFlYlx1NzFlY1x1NzFlZFx1NzFlZlx1NzFmMFx1NzFmMVx1NzFmMlx1NzFmM1x1'@;
put 'NzFmNFx1NzFmNVx1NzFmNlx1NzFmN1x1NzFmOFx1NzFmYVx1NzFmYlx1NzFmY1x1NzFmZFx1NzFmZVx1NzFmZlx1NzIwMFx1NzIwMVx1NzIwMlx1NzIwM1x1NzIwNFx1NzIwNVx1NzIwN1x1NzIwOFx1NzIwOVx1NzIwYVx1NzIwYlx1NzIwY1x1NzIwZFx1NzIwZVx1NzIwZlx1NzIxMFx1NzIx'@;
put 'MVx1NzIxMlx1NzIxM1x1NzIxNFx1NzIxNVx1NzIxNlx1NzIxN1x1NzIxOFx1NzIxOVx1NzIxYVx1ZmZmZFx1NzIxYlx1NzIxY1x1NzIxZVx1NzIxZlx1NzIyMFx1NzIyMVx1NzIyMlx1NzIyM1x1NzIyNFx1NzIyNVx1NzIyNlx1NzIyN1x1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1'@;
put 'NzIzMlx1NzIzM1x1NzIzNFx1NzIzYVx1NzIzY1x1NzIzZVx1NzI0MFx1NzI0MVx1NzI0Mlx1NzI0M1x1NzI0NFx1NzI0NVx1NzI0Nlx1NzI0OVx1NzI0YVx1NzI0Ylx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1MVx1NzI1M1x1NzI1NFx1NzI1NVx1NzI1N1x1NzI1OFx1NzI1YVx1NzI1Y1x1NzI1'@;
put 'ZVx1NzI2MFx1NzI2M1x1NzI2NFx1NzI2NVx1NzI2OFx1NzI2YVx1NzI2Ylx1NzI2Y1x1NzI2ZFx1NzI3MFx1NzI3MVx1NzI3M1x1NzI3NFx1NzI3Nlx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3ZFx1NzI4Mlx1NzI4M1x1NzI4NVx1NzI4Nlx1NzI4N1x1NzI4OFx1NzI4OVx1NzI4Y1x1'@;
put 'NzI4ZVx1NzI5MFx1NzI5MVx1NzI5M1x1NzI5NFx1NzI5NVx1NzI5Nlx1NzI5N1x1NzI5OFx1NzI5OVx1NzI5YVx1NzI5Ylx1NzI5Y1x1NzI5ZFx1NzI5ZVx1NzJhMFx1NzJhMVx1NzJhMlx1NzJhM1x1NzJhNFx1NzJhNVx1NzJhNlx1NzJhN1x1NzJhOFx1NzJhOVx1NzJhYVx1NzJhYlx1NzJh'@;
put 'ZVx1NzJiMVx1NzJiMlx1NzJiM1x1NzJiNVx1NzJiYVx1NzJiYlx1NzJiY1x1NzJiZFx1NzJiZVx1NzJiZlx1NzJjMFx1NzJjNVx1NzJjNlx1NzJjN1x1NzJjOVx1NzJjYVx1NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJkNFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1NzJkYlx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTYwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2MF1bZ11dPTQwOTYwK2csX1s0MDk2MCtnXT15WzE2MF1bZ10pO2Zvcih5WzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVm'@;
put 'ZjVlXHUyMDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBm'@;
put 'XHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhi'@;
put 'MFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksZz0wO2chPXlbMTYxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTYxXVtnXV09NDEyMTYrZyxfWzQxMjE2K2ddPXlbMTYxXVtnXSk7Zm9yKHlbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0XHUyNDc1'@;
put 'XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUy'@;
put 'NDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZiXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTYyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTYyXVtnXV09NDE0NzIrZyxfWzQxNDcyK2ddPXlbMTYyXVtnXSk7Zm9yKHlbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVm'@;
put 'ZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0'@;
put 'XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVm'@;
put 'ZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjVi'@;
put 'XHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTYzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTYzXVtnXV09NDE3MjgrZyxfWzQxNzI4K2ddPXlbMTYzXVtnXSk7Zm9yKHlbMTY0XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUz'@;
put 'MDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYy'@;
put 'XHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUz'@;
put 'MDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY0XVtnXV09NDE5ODQrZyxfWzQxOTg0K2ddPXlbMTY0XVtnXSk7Zm9yKHlbMTY1XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUz'@;
put 'MGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMw'@;
put 'XHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUz'@;
put 'MGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY1XVtnXV09NDIyNDArZyxfWzQyMjQwK2ddPXlbMTY1XVtnXSk7Zm9y'@;
put 'KHlbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUw'@;
put 'MzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZTM1XHVmZTM2XHVmZTM5XHVmZTNhXHVmZTNmXHVmZTQwXHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQyXHVmZTQzXHVmZTQ0XHVmZmZkXHVmZmZkXHVmZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVmZTMxXHVmZmZkXHVmZTMzXHVmZTM0'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY2XVtnXV09NDI0OTYrZyxfWzQyNDk2K2ddPXlb'@;
put 'MTY2XVtnXSk7Zm9yKHlbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUw'@;
put 'NDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJh'@;
put 'XHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUw'@;
put 'NDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY3XVtnXV09NDI3NTIrZyxf'@;
put 'WzQyNzUyK2ddPXlbMTY3XVtnXSk7Zm9yKHlbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMmNhXHUwMmNiXHUwMmQ5XHUyMDEzXHUyMDE1XHUyMDI1XHUyMDM1XHUyMTA1XHUyMTA5XHUyMTk2XHUyMTk3XHUyMTk4XHUyMTk5'@;
put 'XHUyMjE1XHUyMjFmXHUyMjIzXHUyMjUyXHUyMjY2XHUyMjY3XHUyMmJmXHUyNTUwXHUyNTUxXHUyNTUyXHUyNTUzXHUyNTU0XHUyNTU1XHUyNTU2XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUyNTVjXHUyNTVkXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUyNTYyXHUyNTYzXHUy'@;
put 'NTY0XHUyNTY1XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUyNTZiXHUyNTZjXHUyNTZkXHUyNTZlXHUyNTZmXHUyNTcwXHUyNTcxXHUyNTcyXHUyNTczXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHVmZmZkXHUyNTg4XHUyNTg5XHUyNThhXHUyNThi'@;
put 'XHUyNThjXHUyNThkXHUyNThlXHUyNThmXHUyNTkzXHUyNTk0XHUyNTk1XHUyNWJjXHUyNWJkXHUyNWUyXHUyNWUzXHUyNWU0XHUyNWU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFkXHUzMDFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHUwMjUxXHVmZmZkXHUwMTQ0XHUwMTQ4'@;
put 'XHVmZmZkXHUwMjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUzMTE5XHUz'@;
put 'MTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY4XVtnXV09NDMwMDgrZyxfWzQzMDA4K2ddPXlb'@;
put 'MTY4XVtnXSk7Zm9yKHlbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHUzMmEzXHUzMzhlXHUzMzhmXHUzMzljXHUzMzlkXHUzMzll'@;
put 'XHUzM2ExXHUzM2M0XHUzM2NlXHUzM2QxXHUzM2QyXHUzM2Q1XHVmZTMwXHVmZmUyXHVmZmU0XHVmZmZkXHUyMTIxXHUzMjMxXHVmZmZkXHUyMDEwXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGZjXHUzMDliXHUzMDljXHUzMGZkXHUzMGZlXHUzMDA2XHUzMDlkXHUzMDllXHVmZTQ5XHVmZTRhXHVm'@;
put 'ZTRiXHVmZTRjXHVmZTRkXHVmZTRlXHVmZTRmXHVmZTUwXHVmZTUxXHVmZTUyXHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZTU5XHVmZTVhXHVmZTViXHVmZTVjXHVmZTVkXHVmZTVlXHVmZTVmXHVmZTYwXHVmZTYxXHVmZmZkXHVmZTYyXHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZTY4'@;
put 'XHVmZTY5XHVmZTZhXHVmZTZiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDA3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4'@;
put 'XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUy'@;
put 'NTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY5XVtnXV09NDMyNjQrZyxf'@;
put 'WzQzMjY0K2ddPXlbMTY5XVtnXSk7Zm9yKHlbMTcwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyXHU3MmUzXHU3MmU0XHU3MmU1XHU3MmU2XHU3MmU3XHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2'@;
put 'XHU3MmY5XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA2XHU3MzA3XHU3MzA4XHU3MzA5XHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3'@;
put 'MzI2XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNiXHU3MzNjXHU3MzNkXHU3MzQwXHU3MzQxXHU3MzQyXHU3MzQzXHU3MzQ0XHU3MzQ1XHU3MzQ2XHU3MzQ3XHU3MzQ4XHVmZmZkXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRj'@;
put 'XHU3MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4XHU3MzU5XHU3MzVhXHU3MzViXHU3MzVjXHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYxXHU3MzYyXHU3MzYzXHU3MzY0XHU3MzY1XHU3MzY2XHU3MzY3XHU3MzY4XHU3MzY5XHU3MzZhXHU3MzZiXHU3MzZlXHU3'@;
put 'MzcwXHU3MzcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTcwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTcwXVtn'@;
put 'XV09NDM1MjArZyxfWzQzNTIwK2ddPXlbMTcwXVtnXSk7Zm9yKHlbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzcyXHU3MzczXHU3Mzc0XHU3Mzc1XHU3Mzc2XHU3Mzc3XHU3Mzc4XHU3Mzc5XHU3MzdhXHU3MzdiXHU3Mzdj'@;
put 'XHU3MzdkXHU3MzdmXHU3MzgwXHU3MzgxXHU3MzgyXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhhXHU3MzhjXHU3MzhkXHU3MzhmXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlhXHU3MzljXHU3MzlkXHU3MzllXHU3M2EwXHU3M2ExXHU3'@;
put 'M2EzXHU3M2E0XHU3M2E1XHU3M2E2XHU3M2E3XHU3M2E4XHU3M2FhXHU3M2FjXHU3M2FkXHU3M2IxXHU3M2I0XHU3M2I1XHU3M2I2XHU3M2I4XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JlXHU3M2JmXHU3M2MxXHU3M2MzXHU3M2M0XHU3M2M1XHU3M2M2XHU3M2M3XHVmZmZkXHU3M2NiXHU3M2Nj'@;
put 'XHU3M2NlXHU3M2QyXHU3M2QzXHU3M2Q0XHU3M2Q1XHU3M2Q2XHU3M2Q3XHU3M2Q4XHU3M2RhXHU3M2RiXHU3M2RjXHU3M2RkXHU3M2RmXHU3M2UxXHU3M2UyXHU3M2UzXHU3M2U0XHU3M2U2XHU3M2U4XHU3M2VhXHU3M2ViXHU3M2VjXHU3M2VlXHU3M2VmXHU3M2YwXHU3M2YxXHU3M2YzXHU3'@;
put 'M2Y0XHU3M2Y1XHU3M2Y2XHU3M2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTcxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNzFdW2ddLmNoYXJDb2RlQXQoMCkm'@;
put 'JihJW3lbMTcxXVtnXV09NDM3NzYrZyxfWzQzNzc2K2ddPXlbMTcxXVtnXSk7Zm9yKHlbMTcyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3M2Y4XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZjXHU3M2ZkXHU3M2ZlXHU3M2ZmXHU3NDAw'@;
put 'XHU3NDAxXHU3NDAyXHU3NDA0XHU3NDA3XHU3NDA4XHU3NDBiXHU3NDBjXHU3NDBkXHU3NDBlXHU3NDExXHU3NDEyXHU3NDEzXHU3NDE0XHU3NDE1XHU3NDE2XHU3NDE3XHU3NDE4XHU3NDE5XHU3NDFjXHU3NDFkXHU3NDFlXHU3NDFmXHU3NDIwXHU3NDIxXHU3NDIzXHU3NDI0XHU3NDI3XHU3'@;
put 'NDI5XHU3NDJiXHU3NDJkXHU3NDJmXHU3NDMxXHU3NDMyXHU3NDM3XHU3NDM4XHU3NDM5XHU3NDNhXHU3NDNiXHU3NDNkXHU3NDNlXHU3NDNmXHU3NDQwXHU3NDQyXHU3NDQzXHU3NDQ0XHU3NDQ1XHU3NDQ2XHU3NDQ3XHU3NDQ4XHU3NDQ5XHU3NDRhXHU3NDRiXHU3NDRjXHU3NDRkXHVmZmZk'@;
put 'XHU3NDRlXHU3NDRmXHU3NDUwXHU3NDUxXHU3NDUyXHU3NDUzXHU3NDU0XHU3NDU2XHU3NDU4XHU3NDVkXHU3NDYwXHU3NDYxXHU3NDYyXHU3NDYzXHU3NDY0XHU3NDY1XHU3NDY2XHU3NDY3XHU3NDY4XHU3NDY5XHU3NDZhXHU3NDZiXHU3NDZjXHU3NDZlXHU3NDZmXHU3NDcxXHU3NDcyXHU3'@;
put 'NDczXHU3NDc0XHU3NDc1XHU3NDc4XHU3NDc5XHU3NDdhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTcyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNzJdW2ddLmNo'@;
put 'YXJDb2RlQXQoMCkmJihJW3lbMTcyXVtnXV09NDQwMzIrZyxfWzQ0MDMyK2ddPXlbMTcyXVtnXSk7Zm9yKHlbMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1'@;
put 'XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3NDhjXHU3NDhkXHU3NDhmXHU3NDkxXHU3NDkyXHU3NDkzXHU3NDk0XHU3NDk1XHU3NDk2XHU3NDk3XHU3NDk4XHU3NDk5XHU3NDlhXHU3NDliXHU3NDlkXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEyXHU3NGEzXHU3NGE0XHU3NGE1XHU3NGE2XHU3'@;
put 'NGFhXHU3NGFiXHU3NGFjXHU3NGFkXHU3NGFlXHU3NGFmXHU3NGIwXHU3NGIxXHU3NGIyXHU3NGIzXHU3NGI0XHU3NGI1XHU3NGI2XHU3NGI3XHU3NGI4XHU3NGI5XHU3NGJiXHU3NGJjXHU3NGJkXHU3NGJlXHU3NGJmXHU3NGMwXHU3NGMxXHU3NGMyXHU3NGMzXHU3NGM0XHU3NGM1XHU3NGM2'@;
put 'XHU3NGM3XHVmZmZkXHU3NGM4XHU3NGM5XHU3NGNhXHU3NGNiXHU3NGNjXHU3NGNkXHU3NGNlXHU3NGNmXHU3NGQwXHU3NGQxXHU3NGQzXHU3NGQ0XHU3NGQ1XHU3NGQ2XHU3NGQ3XHU3NGQ4XHU3NGQ5XHU3NGRhXHU3NGRiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3XHU3NGU4XHU3'@;
put 'NGU5XHU3NGVhXHU3NGViXHU3NGVjXHU3NGVkXHU3NGYwXHU3NGYxXHU3NGYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTczXS5sZW5ndGg7KytnKTY1NTMzIT09'@;
put 'eVsxNzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTczXVtnXV09NDQyODgrZyxfWzQ0Mjg4K2ddPXlbMTczXVtnXSk7Zm9yKHlbMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NGYzXHU3NGY1XHU3NGY4XHU3NGY5XHU3NGZh'@;
put 'XHU3NGZiXHU3NGZjXHU3NGZkXHU3NGZlXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1XHU3NTA2XHU3NTA3XHU3NTA4XHU3NTA5XHU3NTBhXHU3NTBiXHU3NTBjXHU3NTBlXHU3NTEwXHU3NTEyXHU3NTE0XHU3NTE1XHU3NTE2XHU3NTE3XHU3NTFiXHU3NTFkXHU3NTFlXHU3NTIwXHU3'@;
put 'NTIxXHU3NTIyXHU3NTIzXHU3NTI0XHU3NTI2XHU3NTI3XHU3NTJhXHU3NTJlXHU3NTM0XHU3NTM2XHU3NTM5XHU3NTNjXHU3NTNkXHU3NTNmXHU3NTQxXHU3NTQyXHU3NTQzXHU3NTQ0XHU3NTQ2XHU3NTQ3XHU3NTQ5XHU3NTRhXHU3NTRkXHU3NTUwXHU3NTUxXHU3NTUyXHU3NTUzXHU3NTU1'@;
put 'XHU3NTU2XHU3NTU3XHU3NTU4XHVmZmZkXHU3NTVkXHU3NTVlXHU3NTVmXHU3NTYwXHU3NTYxXHU3NTYyXHU3NTYzXHU3NTY0XHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiXHU3NTZjXHU3NTZkXHU3NTZlXHU3NTZmXHU3NTcwXHU3NTcxXHU3NTczXHU3NTc1XHU3NTc2XHU3NTc3XHU3NTdhXHU3'@;
put 'NTdiXHU3NTdjXHU3NTdkXHU3NTdlXHU3NTgwXHU3NTgxXHU3NTgyXHU3NTg0XHU3NTg1XHU3NTg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTc0XS5sZW5ndGg7'@;
put 'KytnKTY1NTMzIT09eVsxNzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTc0XVtnXV09NDQ1NDQrZyxfWzQ0NTQ0K2ddPXlbMTc0XVtnXSk7Zm9yKHlbMTc1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NTg4XHU3NTg5XHU3NThh'@;
put 'XHU3NThjXHU3NThkXHU3NThlXHU3NTkwXHU3NTkzXHU3NTk1XHU3NTk4XHU3NTliXHU3NTljXHU3NTllXHU3NWEyXHU3NWE2XHU3NWE3XHU3NWE4XHU3NWE5XHU3NWFhXHU3NWFkXHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2XHU3NWNiXHU3NWNjXHU3'@;
put 'NWNlXHU3NWNmXHU3NWQwXHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU1XHU3NWU5XHU3NWVjXHU3NWVkXHU3NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3NWZhXHU3NWZiXHU3NWZk'@;
put 'XHU3NWZlXHU3NjAyXHU3NjA0XHU3NjA2XHU3NjA3XHVmZmZkXHU3NjA4XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3NjBmXHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJjXHU3NjJlXHU3'@;
put 'NjJmXHU3NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlb'@;
put 'MTc1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTc1XVtnXV09NDQ4MDArZyxfWzQ0ODAwK2ddPXlbMTc1XVtnXSk7Zm9yKHlbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjQ1'@;
put 'XHU3NjQ2XHU3NjQ3XHU3NjQ4XHU3NjQ5XHU3NjRhXHU3NjRiXHU3NjRlXHU3NjRmXHU3NjUwXHU3NjUxXHU3NjUyXHU3NjUzXHU3NjU1XHU3NjU3XHU3NjU4XHU3NjU5XHU3NjVhXHU3NjViXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0XHU3NjY1XHU3NjY2XHU3NjY3XHU3'@;
put 'NjY4XHU3NjY5XHU3NjZhXHU3NjZjXHU3NjZkXHU3NjZlXHU3NjcwXHU3NjcxXHU3NjcyXHU3NjczXHU3Njc0XHU3Njc1XHU3Njc2XHU3Njc3XHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3Njkw'@;
put 'XHU3NjkyXHU3Njk0XHU3Njk1XHU3Njk3XHU3Njk4XHU3NjlhXHU3NjliXHVmZmZkXHU3NjljXHU3NjlkXHU3NjllXHU3NjlmXHU3NmEwXHU3NmExXHU3NmEyXHU3NmEzXHU3NmE1XHU3NmE2XHU3NmE3XHU3NmE4XHU3NmE5XHU3NmFhXHU3NmFiXHU3NmFjXHU3NmFkXHU3NmFmXHU3NmIwXHU3'@;
put 'NmIzXHU3NmI1XHU3NmI2XHU3NmI3XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmJiXHU3NmJjXHU3NmJkXHU3NmJlXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMx'@;
put 'XHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3'@;
put 'YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2Nzdm'@;
put 'XHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgi'@;
put 'IiksZz0wO2chPXlbMTc2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTc2XVtnXV09NDUwNTYrZyxfWzQ1MDU2K2ddPXlbMTc2XVtnXSk7Zm9yKHlbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU3NmM0XHU3NmM3XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmQzXHU3NmQ1XHU3NmQ5XHU3NmRhXHU3NmRjXHU3NmRkXHU3NmRlXHU3NmUwXHU3NmUxXHU3NmUyXHU3NmUzXHU3NmU0XHU3NmU2XHU3NmU3XHU3NmU4XHU3NmU5XHU3NmVhXHU3NmViXHU3NmVjXHU3NmVkXHU3NmYwXHU3'@;
put 'NmYzXHU3NmY1XHU3NmY2XHU3NmY3XHU3NmZhXHU3NmZiXHU3NmZkXHU3NmZmXHU3NzAwXHU3NzAyXHU3NzAzXHU3NzA1XHU3NzA2XHU3NzBhXHU3NzBjXHU3NzBlXHU3NzBmXHU3NzEwXHU3NzExXHU3NzEyXHU3NzEzXHU3NzE0XHU3NzE1XHU3NzE2XHU3NzE3XHU3NzE4XHU3NzFiXHU3NzFj'@;
put 'XHU3NzFkXHU3NzFlXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJhXHU3NzJiXHVmZmZkXHU3NzJjXHU3NzJlXHU3NzMwXHU3NzMxXHU3NzMyXHU3NzMzXHU3NzM0XHU3NzM5XHU3NzNiXHU3NzNkXHU3NzNlXHU3NzNmXHU3NzQyXHU3NzQ0XHU3NzQ1XHU3NzQ2XHU3NzQ4XHU3'@;
put 'NzQ5XHU3NzRhXHU3NzRiXHU3NzRjXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzUzXHU3NzU0XHU3NzU1XHU3NzU2XHU3NzU3XHU3NzU4XHU3NzU5XHU3NzVjXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2'@;
put 'XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2'@;
put 'YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJm'@;
put 'XHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTc3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTc3XVtnXV09NDUzMTIrZyxfWzQ1MzEyK2ddPXlbMTc3XVtnXSk7Zm9yKHlbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU3NzVkXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZhXHU3NzZkXHU3NzZlXHU3NzZmXHU3NzcwXHU3NzcxXHU3NzcyXHU3NzczXHU3Nzc0XHU3Nzc1XHU3Nzc2XHU3Nzc3XHU3Nzc4XHU3NzdhXHU3NzdiXHU3NzdjXHU3NzgxXHU3'@;
put 'NzgyXHU3NzgzXHU3Nzg2XHU3Nzg3XHU3Nzg4XHU3Nzg5XHU3NzhhXHU3NzhiXHU3NzhmXHU3NzkwXHU3NzkzXHU3Nzk0XHU3Nzk1XHU3Nzk2XHU3Nzk3XHU3Nzk4XHU3Nzk5XHU3NzlhXHU3NzliXHU3NzljXHU3NzlkXHU3NzllXHU3N2ExXHU3N2EzXHU3N2E0XHU3N2E2XHU3N2E4XHU3N2Fi'@;
put 'XHU3N2FkXHU3N2FlXHU3N2FmXHU3N2IxXHU3N2IyXHU3N2I0XHU3N2I2XHU3N2I3XHU3N2I4XHU3N2I5XHU3N2JhXHVmZmZkXHU3N2JjXHU3N2JlXHU3N2MwXHU3N2MxXHU3N2MyXHU3N2MzXHU3N2M0XHU3N2M1XHU3N2M2XHU3N2M3XHU3N2M4XHU3N2M5XHU3N2NhXHU3N2NiXHU3N2NjXHU3'@;
put 'N2NlXHU3N2NmXHU3N2QwXHU3N2QxXHU3N2QyXHU3N2QzXHU3N2Q0XHU3N2Q1XHU3N2Q2XHU3N2Q4XHU3N2Q5XHU3N2RhXHU3N2RkXHU3N2RlXHU3N2RmXHU3N2UwXHU3N2UxXHU3N2U0XHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMz'@;
put 'XHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4'@;
put 'ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThj'@;
put 'XHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2'@;
put 'NjBjXHU3MzE2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTc4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTc4XVtnXV09NDU1NjgrZyxfWzQ1NTY4K2ddPXlbMTc4XVtnXSk7Zm9yKHlbMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzXHU3ODA0XHU3ODA1XHU3ODA2XHU3ODA3XHU3ODA4XHU3ODBhXHU3ODBiXHU3'@;
put 'ODBlXHU3ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0'@;
put 'XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhXHVmZmZkXHU3ODViXHU3ODVjXHU3ODVlXHU3ODVmXHU3ODYwXHU3ODYxXHU3ODYyXHU3ODYzXHU3ODY0XHU3ODY1XHU3ODY2XHU3ODY3XHU3ODY4XHU3'@;
put 'ODY5XHU3ODZmXHU3ODcwXHU3ODcxXHU3ODcyXHU3ODczXHU3ODc0XHU3ODc1XHU3ODc2XHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkXHU3ODdlXHU3ODdmXHU3ODgwXHU3ODgxXHU3ODgyXHU3ODgzXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVl'@;
put 'XHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4'@;
put 'ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNh'@;
put 'XHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5'@;
put 'NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTc5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTc5XVtnXV09NDU4MjQrZyxfWzQ1ODI0K2ddPXlbMTc5XVtnXSk7Zm9yKHlbMTgwXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODg0XHU3ODg1XHU3ODg2XHU3ODg4XHU3ODhhXHU3ODhiXHU3ODhmXHU3ODkwXHU3ODkyXHU3ODk0XHU3ODk1XHU3ODk2XHU3ODk5XHU3ODlkXHU3ODllXHU3OGEwXHU3OGEyXHU3OGE0XHU3OGE2XHU3OGE4XHU3'@;
put 'OGE5XHU3OGFhXHU3OGFiXHU3OGFjXHU3OGFkXHU3OGFlXHU3OGFmXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQx'@;
put 'XHU3OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhXHU3OGRiXHU3OGRjXHU3OGRkXHU3OGRlXHU3OGRmXHU3OGUwXHU3OGUxXHU3OGUyXHU3OGUzXHVmZmZkXHU3OGU0XHU3OGU1XHU3OGU2XHU3OGU3XHU3OGU5XHU3OGVhXHU3OGViXHU3OGVkXHU3OGVlXHU3OGVmXHU3OGYwXHU3'@;
put 'OGYxXHU3OGYzXHU3OGY1XHU3OGY2XHU3OGY4XHU3OGY5XHU3OGZiXHU3OGZjXHU3OGZkXHU3OGZlXHU3OGZmXHU3OTAwXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2XHU3OTA3XHU3OTA4XHU3OTA5XHU3OTBhXHU3OTBiXHU3OTBjXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0'@;
put 'XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYyXHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3'@;
put 'ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3'@;
put 'XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNiXHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2'@;
put 'Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTgwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTgwXVtnXV09NDYwODArZyxfWzQ2MDgwK2ddPXlbMTgwXVtnXSk7Zm9yKHlbMTgxXT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTBkXHU3OTBlXHU3OTBmXHU3OTEwXHU3OTExXHU3OTEyXHU3OTE0XHU3OTE1XHU3OTE2XHU3OTE3XHU3OTE4XHU3OTE5XHU3OTFhXHU3OTFiXHU3OTFjXHU3OTFkXHU3OTFmXHU3OTIwXHU3'@;
put 'OTIxXHU3OTIyXHU3OTIzXHU3OTI1XHU3OTI2XHU3OTI3XHU3OTI4XHU3OTI5XHU3OTJhXHU3OTJiXHU3OTJjXHU3OTJkXHU3OTJlXHU3OTJmXHU3OTMwXHU3OTMxXHU3OTMyXHU3OTMzXHU3OTM1XHU3OTM2XHU3OTM3XHU3OTM4XHU3OTM5XHU3OTNkXHU3OTNmXHU3OTQyXHU3OTQzXHU3OTQ0'@;
put 'XHU3OTQ1XHU3OTQ3XHU3OTRhXHU3OTRiXHU3OTRjXHU3OTRkXHU3OTRlXHU3OTRmXHU3OTUwXHU3OTUxXHU3OTUyXHU3OTU0XHU3OTU1XHU3OTU4XHU3OTU5XHU3OTYxXHU3OTYzXHVmZmZkXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwXHU3OTcxXHU3'@;
put 'OTcyXHU3OTczXHU3OTc0XHU3OTc1XHU3OTc2XHU3OTc5XHU3OTdiXHU3OTdjXHU3OTdkXHU3OTdlXHU3OTdmXHU3OTgyXHU3OTgzXHU3OTg2XHU3OTg3XHU3OTg4XHU3OTg5XHU3OThiXHU3OThjXHU3OThkXHU3OThlXHU3OTkwXHU3OTkxXHU3OTkyXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5'@;
put 'XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5'@;
put 'MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFk'@;
put 'XHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4'@;
put 'YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTgxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTgxXVtnXV09NDYzMzYrZyxfWzQ2MzM2K2ddPXlbMTgxXVtnXSk7'@;
put 'Zm9yKHlbMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk3XHU3OTk4XHU3OTk5XHU3OTliXHU3OTljXHU3OTlkXHU3OTllXHU3OTlmXHU3OWEwXHU3OWExXHU3OWEyXHU3OWEzXHU3'@;
put 'OWE0XHU3OWE1XHU3OWE2XHU3OWE4XHU3OWE5XHU3OWFhXHU3OWFiXHU3OWFjXHU3OWFkXHU3OWFlXHU3OWFmXHU3OWIwXHU3OWIxXHU3OWIyXHU3OWI0XHU3OWI1XHU3OWI2XHU3OWI3XHU3OWI4XHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNj'@;
put 'XHU3OWNlXHU3OWNmXHU3OWQwXHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5XHU3OWRhXHU3OWRiXHU3OWRjXHU3OWRkXHU3OWRlXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhXHVmZmZkXHU3OWVjXHU3OWVlXHU3OWYxXHU3OWYyXHU3OWYzXHU3OWY0XHU3OWY1XHU3'@;
put 'OWY2XHU3OWY3XHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmXHU3YTEwXHU3YTExXHU3YTEyXHU3YTEzXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVm'@;
put 'XHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2'@;
put 'YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdm'@;
put 'XHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5'@;
put 'MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTgyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTgyXVtnXV09NDY1OTIrZyxfWzQ2NTkyK2dd'@;
put 'PXlbMTgyXVtnXSk7Zm9yKHlbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTFkXHU3YTFmXHU3YTIxXHU3YTIyXHU3YTI0XHU3YTI1XHU3YTI2XHU3YTI3XHU3YTI4XHU3YTI5XHU3YTJhXHU3YTJiXHU3YTJjXHU3YTJkXHU3'@;
put 'YTJlXHU3YTJmXHU3YTMwXHU3YTMxXHU3YTMyXHU3YTM0XHU3YTM1XHU3YTM2XHU3YTM4XHU3YTNhXHU3YTNlXHU3YTQwXHU3YTQxXHU3YTQyXHU3YTQzXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3YTQ5XHU3YTRhXHU3YTRiXHU3YTRjXHU3YTRkXHU3YTRlXHU3YTRmXHU3YTUwXHU3YTUy'@;
put 'XHU3YTUzXHU3YTU0XHU3YTU1XHU3YTU2XHU3YTU4XHU3YTU5XHU3YTVhXHU3YTViXHU3YTVjXHU3YTVkXHU3YTVlXHU3YTVmXHU3YTYwXHU3YTYxXHU3YTYyXHU3YTYzXHU3YTY0XHU3YTY1XHU3YTY2XHU3YTY3XHU3YTY4XHVmZmZkXHU3YTY5XHU3YTZhXHU3YTZiXHU3YTZjXHU3YTZkXHU3'@;
put 'YTZlXHU3YTZmXHU3YTcxXHU3YTcyXHU3YTczXHU3YTc1XHU3YTdiXHU3YTdjXHU3YTdkXHU3YTdlXHU3YTgyXHU3YTg1XHU3YTg3XHU3YTg5XHU3YThhXHU3YThiXHU3YThjXHU3YThlXHU3YThmXHU3YTkwXHU3YTkzXHU3YTk0XHU3YTk5XHU3YTlhXHU3YTliXHU3YTllXHU3YWExXHU3YWEy'@;
put 'XHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4'@;
put 'MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3'@;
put 'XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAxXHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2'@;
put 'NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2NzBkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTgzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTgzXVtnXV09NDY4NDgr'@;
put 'ZyxfWzQ2ODQ4K2ddPXlbMTgzXVtnXSk7Zm9yKHlbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YWEzXHU3YWE0XHU3YWE3XHU3YWE5XHU3YWFhXHU3YWFiXHU3YWFlXHU3YWFmXHU3YWIwXHU3YWIxXHU3YWIyXHU3YWI0XHU3'@;
put 'YWI1XHU3YWI2XHU3YWI3XHU3YWI4XHU3YWI5XHU3YWJhXHU3YWJiXHU3YWJjXHU3YWJkXHU3YWJlXHU3YWMwXHU3YWMxXHU3YWMyXHU3YWMzXHU3YWM0XHU3YWM1XHU3YWM2XHU3YWM3XHU3YWM4XHU3YWM5XHU3YWNhXHU3YWNjXHU3YWNkXHU3YWNlXHU3YWNmXHU3YWQwXHU3YWQxXHU3YWQy'@;
put 'XHU3YWQzXHU3YWQ0XHU3YWQ1XHU3YWQ3XHU3YWQ4XHU3YWRhXHU3YWRiXHU3YWRjXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU0XHU3YWU3XHU3YWU4XHU3YWU5XHU3YWVhXHU3YWViXHU3YWVjXHU3YWVlXHU3YWYwXHU3YWYxXHU3YWYyXHU3YWYzXHVmZmZkXHU3YWY0XHU3YWY1XHU3YWY2XHU3'@;
put 'YWY3XHU3YWY4XHU3YWZiXHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3YjAyXHU3YjA1XHU3YjA3XHU3YjA5XHU3YjBjXHU3YjBkXHU3YjBlXHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIxXHU3YjIyXHU3YjIzXHU3YjI3'@;
put 'XHU3YjI5XHU3YjJkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4'@;
put 'ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFh'@;
put 'XHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2'@;
put 'ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTg0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTg0'@;
put 'XVtnXV09NDcxMDQrZyxfWzQ3MTA0K2ddPXlbMTg0XVtnXSk7Zm9yKHlbMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3'@;
put 'YjNmXHU3YjQwXHU3YjQxXHU3YjQyXHU3YjQzXHU3YjQ0XHU3YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzXHU3YjY0XHU3YjY1XHU3YjY2XHU3YjY3XHU3YjY4XHU3YjY5XHU3YjZhXHU3YjZi'@;
put 'XHU3YjZjXHU3YjZkXHU3YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2XHU3Yjg3XHU3Yjg4XHU3Yjg5XHU3YjhhXHU3YjhiXHU3YjhjXHU3YjhlXHU3YjhmXHVmZmZkXHU3YjkxXHU3'@;
put 'YjkyXHU3YjkzXHU3Yjk2XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmJlXHU3YmJm'@;
put 'XHU3YmMwXHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1'@;
put 'N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAy'@;
put 'XHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3'@;
put 'Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTg1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODVdW2ddLmNoYXJDb2RlQXQo'@;
put 'MCkmJihJW3lbMTg1XVtnXV09NDczNjArZyxfWzQ3MzYwK2ddPXlbMTg1XVtnXSk7Zm9yKHlbMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3'@;
put 'YmQwXHU3YmQyXHU3YmQ0XHU3YmQ1XHU3YmQ2XHU3YmQ3XHU3YmQ4XHU3YmRiXHU3YmRjXHU3YmRlXHU3YmRmXHU3YmUwXHU3YmUyXHU3YmUzXHU3YmU0XHU3YmU3XHU3YmU4XHU3YmU5XHU3YmViXHU3YmVjXHU3YmVkXHU3YmVmXHU3YmYwXHU3YmYyXHU3YmYzXHU3YmY0XHU3YmY1XHU3YmY2'@;
put 'XHU3YmY4XHU3YmY5XHU3YmZhXHU3YmZiXHU3YmZkXHU3YmZmXHU3YzAwXHU3YzAxXHU3YzAyXHU3YzAzXHU3YzA0XHU3YzA1XHU3YzA2XHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwXHU3YzExXHU3YzEyXHU3YzEzXHU3YzE0XHU3YzE1XHU3YzE3XHU3YzE4XHU3YzE5XHVm'@;
put 'ZmZkXHU3YzFhXHU3YzFiXHU3YzFjXHU3YzFkXHU3YzFlXHU3YzIwXHU3YzIxXHU3YzIyXHU3YzIzXHU3YzI0XHU3YzI1XHU3YzI4XHU3YzI5XHU3YzJiXHU3YzJjXHU3YzJkXHU3YzJlXHU3YzJmXHU3YzMwXHU3YzMxXHU3YzMyXHU3YzMzXHU3YzM0XHU3YzM1XHU3YzM2XHU3YzM3XHU3YzM5'@;
put 'XHU3YzNhXHU3YzNiXHU3YzNjXHU3YzNkXHU3YzNlXHU3YzQyXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2'@;
put 'MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5'@;
put 'XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1'@;
put 'NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTg2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODZdW2dd'@;
put 'LmNoYXJDb2RlQXQoMCkmJihJW3lbMTg2XVtnXV09NDc2MTYrZyxfWzQ3NjE2K2ddPXlbMTg2XVtnXSk7Zm9yKHlbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzQzXHU3YzQ0XHU3YzQ1XHU3YzQ2XHU3YzQ3XHU3YzQ4XHU3'@;
put 'YzQ5XHU3YzRhXHU3YzRiXHU3YzRjXHU3YzRlXHU3YzRmXHU3YzUwXHU3YzUxXHU3YzUyXHU3YzUzXHU3YzU0XHU3YzU1XHU3YzU2XHU3YzU3XHU3YzU4XHU3YzU5XHU3YzVhXHU3YzViXHU3YzVjXHU3YzVkXHU3YzVlXHU3YzVmXHU3YzYwXHU3YzYxXHU3YzYyXHU3YzYzXHU3YzY0XHU3YzY1'@;
put 'XHU3YzY2XHU3YzY3XHU3YzY4XHU3YzY5XHU3YzZhXHU3YzZiXHU3YzZjXHU3YzZkXHU3YzZlXHU3YzZmXHU3YzcwXHU3YzcxXHU3YzcyXHU3Yzc1XHU3Yzc2XHU3Yzc3XHU3Yzc4XHU3Yzc5XHU3YzdhXHU3YzdlXHU3YzdmXHU3YzgwXHU3YzgxXHU3YzgyXHU3YzgzXHU3Yzg0XHU3Yzg1XHU3'@;
put 'Yzg2XHU3Yzg3XHVmZmZkXHU3Yzg4XHU3YzhhXHU3YzhiXHU3YzhjXHU3YzhkXHU3YzhlXHU3YzhmXHU3YzkwXHU3YzkzXHU3Yzk0XHU3Yzk2XHU3Yzk5XHU3YzlhXHU3YzliXHU3Y2EwXHU3Y2ExXHU3Y2EzXHU3Y2E2XHU3Y2E3XHU3Y2E4XHU3Y2E5XHU3Y2FiXHU3Y2FjXHU3Y2FkXHU3Y2Fm'@;
put 'XHU3Y2IwXHU3Y2I0XHU3Y2I1XHU3Y2I2XHU3Y2I3XHU3Y2I4XHU3Y2JhXHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2'@;
put 'ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRj'@;
put 'XHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2'@;
put 'ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTg3XS5sZW5ndGg7KytnKTY1NTMz'@;
put 'IT09eVsxODddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTg3XVtnXV09NDc4NzIrZyxfWzQ3ODcyK2ddPXlbMTg3XVtnXSk7Zm9yKHlbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3'@;
put 'Y2M0XHU3Y2M2XHU3Y2M5XHU3Y2NiXHU3Y2NlXHU3Y2NmXHU3Y2QwXHU3Y2QxXHU3Y2QyXHU3Y2QzXHU3Y2Q0XHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxXHU3Y2UyXHU3Y2UzXHU3Y2U0XHU3Y2U1XHU3Y2U2XHU3Y2U3XHU3Y2U5XHU3Y2VhXHU3Y2ViXHU3Y2VjXHU3Y2Vk'@;
put 'XHU3Y2VlXHU3Y2YwXHU3Y2YxXHU3Y2YyXHU3Y2YzXHU3Y2Y0XHU3Y2Y1XHU3Y2Y2XHU3Y2Y3XHU3Y2Y5XHU3Y2ZhXHU3Y2ZjXHU3Y2ZkXHU3Y2ZlXHU3Y2ZmXHU3ZDAwXHU3ZDAxXHU3ZDAyXHU3ZDAzXHU3ZDA0XHU3ZDA1XHU3ZDA2XHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBiXHU3ZDBjXHU3'@;
put 'ZDBkXHU3ZDBlXHU3ZDBmXHU3ZDEwXHVmZmZkXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE0XHU3ZDE1XHU3ZDE2XHU3ZDE3XHU3ZDE4XHU3ZDE5XHU3ZDFhXHU3ZDFiXHU3ZDFjXHU3ZDFkXHU3ZDFlXHU3ZDFmXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJh'@;
put 'XHU3ZDJjXHU3ZDJkXHU3ZDJlXHU3ZDMwXHU3ZDMxXHU3ZDMyXHU3ZDMzXHU3ZDM0XHU3ZDM1XHU3ZDM2XHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3'@;
put 'NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFh'@;
put 'XHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1'@;
put 'OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTg4XS5sZW5n'@;
put 'dGg7KytnKTY1NTMzIT09eVsxODhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTg4XVtnXV09NDgxMjgrZyxfWzQ4MTI4K2ddPXlbMTg4XVtnXSk7Zm9yKHlbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDM3XHU3ZDM4XHU3'@;
put 'ZDM5XHU3ZDNhXHU3ZDNiXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDNmXHU3ZDQwXHU3ZDQxXHU3ZDQyXHU3ZDQzXHU3ZDQ0XHU3ZDQ1XHU3ZDQ2XHU3ZDQ3XHU3ZDQ4XHU3ZDQ5XHU3ZDRhXHU3ZDRiXHU3ZDRjXHU3ZDRkXHU3ZDRlXHU3ZDRmXHU3ZDUwXHU3ZDUxXHU3ZDUyXHU3ZDUzXHU3ZDU0'@;
put 'XHU3ZDU1XHU3ZDU2XHU3ZDU3XHU3ZDU4XHU3ZDU5XHU3ZDVhXHU3ZDViXHU3ZDVjXHU3ZDVkXHU3ZDVlXHU3ZDVmXHU3ZDYwXHU3ZDYxXHU3ZDYyXHU3ZDYzXHU3ZDY0XHU3ZDY1XHU3ZDY2XHU3ZDY3XHU3ZDY4XHU3ZDY5XHU3ZDZhXHU3ZDZiXHU3ZDZjXHU3ZDZkXHU3ZDZmXHU3ZDcwXHU3'@;
put 'ZDcxXHU3ZDcyXHU3ZDczXHU3ZDc0XHU3ZDc1XHU3ZDc2XHVmZmZkXHU3ZDc4XHU3ZDc5XHU3ZDdhXHU3ZDdiXHU3ZDdjXHU3ZDdkXHU3ZDdlXHU3ZDdmXHU3ZDgwXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg0XHU3ZDg1XHU3ZDg2XHU3ZDg3XHU3ZDg4XHU3ZDg5XHU3ZDhhXHU3ZDhiXHU3ZDhj'@;
put 'XHU3ZDhkXHU3ZDhlXHU3ZDhmXHU3ZDkwXHU3ZDkxXHU3ZDkyXHU3ZDkzXHU3ZDk0XHU3ZDk1XHU3ZDk2XHU3ZDk3XHU3ZDk4XHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2'@;
put 'ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1Mjdm'@;
put 'XHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3'@;
put 'NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch'@;
put 'PXlbMTg5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTg5XVtnXV09NDgzODQrZyxfWzQ4Mzg0K2ddPXlbMTg5XVtnXSk7Zm9yKHlbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3'@;
put 'ZDk5XHU3ZDlhXHU3ZDliXHU3ZDljXHU3ZDlkXHU3ZDllXHU3ZDlmXHU3ZGEwXHU3ZGExXHU3ZGEyXHU3ZGEzXHU3ZGE0XHU3ZGE1XHU3ZGE3XHU3ZGE4XHU3ZGE5XHU3ZGFhXHU3ZGFiXHU3ZGFjXHU3ZGFkXHU3ZGFmXHU3ZGIwXHU3ZGIxXHU3ZGIyXHU3ZGIzXHU3ZGI0XHU3ZGI1XHU3ZGI2'@;
put 'XHU3ZGI3XHU3ZGI4XHU3ZGI5XHU3ZGJhXHU3ZGJiXHU3ZGJjXHU3ZGJkXHU3ZGJlXHU3ZGJmXHU3ZGMwXHU3ZGMxXHU3ZGMyXHU3ZGMzXHU3ZGM0XHU3ZGM1XHU3ZGM2XHU3ZGM3XHU3ZGM4XHU3ZGM5XHU3ZGNhXHU3ZGNiXHU3ZGNjXHU3ZGNkXHU3ZGNlXHU3ZGNmXHU3ZGQwXHU3ZGQxXHU3'@;
put 'ZGQyXHU3ZGQzXHU3ZGQ0XHU3ZGQ1XHU3ZGQ2XHU3ZGQ3XHU3ZGQ4XHU3ZGQ5XHVmZmZkXHU3ZGRhXHU3ZGRiXHU3ZGRjXHU3ZGRkXHU3ZGRlXHU3ZGRmXHU3ZGUwXHU3ZGUxXHU3ZGUyXHU3ZGUzXHU3ZGU0XHU3ZGU1XHU3ZGU2XHU3ZGU3XHU3ZGU4XHU3ZGU5XHU3ZGVhXHU3ZGViXHU3ZGVj'@;
put 'XHU3ZGVkXHU3ZGVlXHU3ZGVmXHU3ZGYwXHU3ZGYxXHU3ZGYyXHU3ZGYzXHU3ZGY0XHU3ZGY1XHU3ZGY2XHU3ZGY3XHU3ZGY4XHU3ZGY5XHU3ZGZhXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0'@;
put 'ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3'@;
put 'XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2'@;
put 'MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksZz0wO2chPXlbMTkwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTkwXVtnXV09NDg2NDArZyxfWzQ4NjQwK2ddPXlbMTkwXVtnXSk7Zm9yKHlbMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU3ZGZiXHU3ZGZjXHU3ZGZkXHU3ZGZlXHU3ZGZmXHU3ZTAwXHU3ZTAxXHU3ZTAyXHU3ZTAzXHU3ZTA0XHU3ZTA1XHU3ZTA2XHU3ZTA3XHU3ZTA4XHU3ZTA5XHU3ZTBhXHU3ZTBiXHU3ZTBjXHU3ZTBkXHU3ZTBlXHU3ZTBmXHU3ZTEwXHU3ZTExXHU3ZTEyXHU3ZTEzXHU3ZTE0'@;
put 'XHU3ZTE1XHU3ZTE2XHU3ZTE3XHU3ZTE4XHU3ZTE5XHU3ZTFhXHU3ZTFiXHU3ZTFjXHU3ZTFkXHU3ZTFlXHU3ZTFmXHU3ZTIwXHU3ZTIxXHU3ZTIyXHU3ZTIzXHU3ZTI0XHU3ZTI1XHU3ZTI2XHU3ZTI3XHU3ZTI4XHU3ZTI5XHU3ZTJhXHU3ZTJiXHU3ZTJjXHU3ZTJkXHU3ZTJlXHU3ZTJmXHU3'@;
put 'ZTMwXHU3ZTMxXHU3ZTMyXHU3ZTMzXHU3ZTM0XHU3ZTM1XHU3ZTM2XHU3ZTM3XHU3ZTM4XHU3ZTM5XHVmZmZkXHU3ZTNhXHU3ZTNjXHU3ZTNkXHU3ZTNlXHU3ZTNmXHU3ZTQwXHU3ZTQyXHU3ZTQzXHU3ZTQ0XHU3ZTQ1XHU3ZTQ2XHU3ZTQ4XHU3ZTQ5XHU3ZTRhXHU3ZTRiXHU3ZTRjXHU3ZTRk'@;
put 'XHU3ZTRlXHU3ZTRmXHU3ZTUwXHU3ZTUxXHU3ZTUyXHU3ZTUzXHU3ZTU0XHU3ZTU1XHU3ZTU2XHU3ZTU3XHU3ZTU4XHU3ZTU5XHU3ZTVhXHU3ZTViXHU3ZTVjXHU3ZTVkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2'@;
put 'OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYz'@;
put 'XHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4'@;
put 'OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgw'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTkxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTkxXVtnXV09NDg4OTYrZyxfWzQ4ODk2K2ddPXlbMTkxXVtnXSk7Zm9yKHlbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTVlXHU3ZTVmXHU3ZTYwXHU3ZTYxXHU3ZTYyXHU3ZTYzXHU3ZTY0XHU3ZTY1XHU3ZTY2XHU3ZTY3XHU3ZTY4XHU3ZTY5XHU3ZTZhXHU3ZTZiXHU3ZTZjXHU3ZTZkXHU3ZTZlXHU3ZTZmXHU3ZTcwXHU3ZTcxXHU3ZTcyXHU3ZTczXHU3ZTc0XHU3ZTc1'@;
put 'XHU3ZTc2XHU3ZTc3XHU3ZTc4XHU3ZTc5XHU3ZTdhXHU3ZTdiXHU3ZTdjXHU3ZTdkXHU3ZTdlXHU3ZTdmXHU3ZTgwXHU3ZTgxXHU3ZTgzXHU3ZTg0XHU3ZTg1XHU3ZTg2XHU3ZTg3XHU3ZTg4XHU3ZTg5XHU3ZThhXHU3ZThiXHU3ZThjXHU3ZThkXHU3ZThlXHU3ZThmXHU3ZTkwXHU3ZTkxXHU3'@;
put 'ZTkyXHU3ZTkzXHU3ZTk0XHU3ZTk1XHU3ZTk2XHU3ZTk3XHU3ZTk4XHU3ZTk5XHU3ZTlhXHU3ZTljXHU3ZTlkXHU3ZTllXHVmZmZkXHU3ZWFlXHU3ZWI0XHU3ZWJiXHU3ZWJjXHU3ZWQ2XHU3ZWU0XHU3ZWVjXHU3ZWY5XHU3ZjBhXHU3ZjEwXHU3ZjFlXHU3ZjM3XHU3ZjM5XHU3ZjNiXHU3ZjNj'@;
put 'XHU3ZjNkXHU3ZjNlXHU3ZjNmXHU3ZjQwXHU3ZjQxXHU3ZjQzXHU3ZjQ2XHU3ZjQ3XHU3ZjQ4XHU3ZjQ5XHU3ZjRhXHU3ZjRiXHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjRmXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1'@;
put 'ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1'@;
put 'XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2'@;
put 'Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4'@;
put 'XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTkyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTkyXVtnXV09NDkxNTIrZyxfWzQ5MTUyK2ddPXlbMTkyXVtnXSk7Zm9yKHlbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZjU2XHU3ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjVlXHU3ZjYwXHU3ZjYzXHU3ZjY0XHU3ZjY1XHU3ZjY2XHU3ZjY3XHU3ZjZiXHU3ZjZjXHU3ZjZkXHU3ZjZmXHU3ZjcwXHU3ZjczXHU3Zjc1XHU3Zjc2XHU3Zjc3XHU3Zjc4'@;
put 'XHU3ZjdhXHU3ZjdiXHU3ZjdjXHU3ZjdkXHU3ZjdmXHU3ZjgwXHU3ZjgyXHU3ZjgzXHU3Zjg0XHU3Zjg1XHU3Zjg2XHU3Zjg3XHU3Zjg4XHU3Zjg5XHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3ZjkxXHU3ZjkyXHU3ZjkzXHU3Zjk1XHU3Zjk2XHU3Zjk3XHU3Zjk4XHU3Zjk5XHU3ZjliXHU3'@;
put 'ZjljXHU3ZmEwXHU3ZmEyXHU3ZmEzXHU3ZmE1XHU3ZmE2XHU3ZmE4XHU3ZmE5XHU3ZmFhXHU3ZmFiXHU3ZmFjXHU3ZmFkXHU3ZmFlXHU3ZmIxXHVmZmZkXHU3ZmIzXHU3ZmI0XHU3ZmI1XHU3ZmI2XHU3ZmI3XHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3ZmM2'@;
put 'XHU3ZmM3XHU3ZmM4XHU3ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmXHU3ZmQwXHU3ZmQxXHU3ZmQyXHU3ZmQzXHU3ZmQ2XHU3ZmQ3XHU3ZmQ5XHU3ZmRhXHU3ZmRiXHU3ZmRjXHU3ZmRkXHU3ZmRlXHU3ZmUyXHU3ZmUzXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1'@;
put 'NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5'@;
put 'XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1'@;
put 'NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5'@;
put 'XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTkzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTkzXVtnXV09NDk0MDgrZyxfWzQ5NDA4K2ddPXlbMTkzXVtnXSk7Zm9yKHlbMTk0XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0XHU3ZmY1XHU3ZmY2XHU3ZmY3XHU3ZmY4XHU3ZmY5XHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAy'@;
put 'XHU4MDA3XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiXHU4MDJjXHU4MDJkXHU4MDJlXHU4MDJmXHU4MDMwXHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4'@;
put 'MDNlXHU4MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3XHVmZmZkXHU4MDU5XHU4MDViXHU4MDVjXHU4MDVkXHU4MDVlXHU4MDVmXHU4MDYwXHU4MDYxXHU4MDYyXHU4MDYzXHU4MDY0'@;
put 'XHU4MDY1XHU4MDY2XHU4MDY3XHU4MDY4XHU4MDZiXHU4MDZjXHU4MDZkXHU4MDZlXHU4MDZmXHU4MDcwXHU4MDcyXHU4MDczXHU4MDc0XHU4MDc1XHU4MDc2XHU4MDc3XHU4MDc4XHU4MDc5XHU4MDdhXHU4MDdiXHU4MDdjXHU4MDdkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1'@;
put 'YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRk'@;
put 'XHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4'@;
put 'N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTky'@;
put 'XHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTk0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTk0XVtnXV09NDk2NjQrZyxfWzQ5NjY0K2ddPXlbMTk0XVtnXSk7Zm9yKHlbMTk1'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDdlXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhhXHU4MDhkXHU4MDhlXHU4MDhmXHU4MDkwXHU4MDkxXHU4MDkyXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEz'@;
put 'XHU4MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIzXHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3XHU4MGM4XHU4MGM5XHU4MGNhXHU4MGNiXHU4MGNmXHU4MGQwXHU4MGQxXHU4MGQyXHU4MGQzXHU4MGQ0XHU4MGQ1XHU4MGQ4XHU4MGRmXHU4MGUwXHU4'@;
put 'MGUyXHU4MGUzXHU4MGU2XHU4MGVlXHU4MGY1XHU4MGY3XHU4MGY5XHU4MGZiXHU4MGZlXHU4MGZmXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBiXHVmZmZkXHU4MTBjXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFiXHU4MTFjXHU4MTFkXHU4MTFmXHU4MTIw'@;
put 'XHU4MTIxXHU4MTIyXHU4MTIzXHU4MTI0XHU4MTI1XHU4MTI2XHU4MTI3XHU4MTI4XHU4MTI5XHU4MTJhXHU4MTJiXHU4MTJkXHU4MTJlXHU4MTMwXHU4MTMzXHU4MTM0XHU4MTM1XHU4MTM3XHU4MTM5XHU4MTNhXHU4MTNiXHU4MTNjXHU4MTNkXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3'@;
put 'NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNm'@;
put 'XHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4'@;
put 'NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZk'@;
put 'XHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTk1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTk1XVtnXV09NDk5MjArZyxfWzQ5OTIwK2ddPXlbMTk1XVtn'@;
put 'XSk7Zm9yKHlbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MTQwXHU4MTQxXHU4MTQyXHU4MTQzXHU4MTQ0XHU4MTQ1XHU4MTQ3XHU4MTQ5XHU4MTRkXHU4MTRlXHU4MTRmXHU4MTUyXHU4MTU2XHU4MTU3XHU4MTU4XHU4MTVi'@;
put 'XHU4MTVjXHU4MTVkXHU4MTVlXHU4MTVmXHU4MTYxXHU4MTYyXHU4MTYzXHU4MTY0XHU4MTY2XHU4MTY4XHU4MTZhXHU4MTZiXHU4MTZjXHU4MTZmXHU4MTcyXHU4MTczXHU4MTc1XHU4MTc2XHU4MTc3XHU4MTc4XHU4MTgxXHU4MTgzXHU4MTg0XHU4MTg1XHU4MTg2XHU4MTg3XHU4MTg5XHU4'@;
put 'MThiXHU4MThjXHU4MThkXHU4MThlXHU4MTkwXHU4MTkyXHU4MTkzXHU4MTk0XHU4MTk1XHU4MTk2XHU4MTk3XHU4MTk5XHU4MTlhXHU4MTllXHU4MTlmXHU4MWEwXHU4MWExXHU4MWEyXHU4MWE0XHU4MWE1XHVmZmZkXHU4MWE3XHU4MWE5XHU4MWFiXHU4MWFjXHU4MWFkXHU4MWFlXHU4MWFm'@;
put 'XHU4MWIwXHU4MWIxXHU4MWIyXHU4MWI0XHU4MWI1XHU4MWI2XHU4MWI3XHU4MWI4XHU4MWI5XHU4MWJjXHU4MWJkXHU4MWJlXHU4MWJmXHU4MWM0XHU4MWM1XHU4MWM3XHU4MWM4XHU4MWM5XHU4MWNiXHU4MWNkXHU4MWNlXHU4MWNmXHU4MWQwXHU4MWQxXHU4MWQyXHU4MWQzXHU2NDc5XHU4'@;
put 'NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1'@;
put 'XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5'@;
put 'OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQy'@;
put 'XHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTk2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTk2XVtnXV09NTAxNzYrZyxfWzUwMTc2'@;
put 'K2ddPXlbMTk2XVtnXSk7Zm9yKHlbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQ0XHU4MWQ1XHU4MWQ2XHU4MWQ3XHU4MWQ4XHU4MWQ5XHU4MWRhXHU4MWRiXHU4MWRjXHU4MWRkXHU4MWRlXHU4MWRmXHU4MWUwXHU4MWUx'@;
put 'XHU4MWUyXHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5XHU4MWViXHU4MWVlXHU4MWVmXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY3XHU4MWY4XHU4MWY5XHU4MWZhXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3XHU4MjA4XHU4MjA5XHU4MjBhXHU4MjBiXHU4MjBlXHU4'@;
put 'MjBmXHU4MjExXHU4MjEzXHU4MjE1XHU4MjE2XHU4MjE3XHU4MjE4XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmXHVmZmZkXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1'@;
put 'XHU4MjQ2XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUwXHU4MjUxXHU4MjUyXHU4MjUzXHU4MjU0XHU4MjU1XHU4MjU2XHU4MjU3XHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwXHU4MjYxXHU4MjYyXHU4MjYzXHU4MjY0XHU4MjY1XHU4MjY2XHU4MjY3XHU4'@;
put 'MjY5XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1'@;
put 'XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2'@;
put 'MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4'@;
put 'XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTk3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTk3XVtnXV09NTA0'@;
put 'MzIrZyxfWzUwNDMyK2ddPXlbMTk3XVtnXSk7Zm9yKHlbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjZhXHU4MjZiXHU4MjZjXHU4MjZkXHU4MjcxXHU4Mjc1XHU4Mjc2XHU4Mjc3XHU4Mjc4XHU4MjdiXHU4MjdjXHU4Mjgw'@;
put 'XHU4MjgxXHU4MjgzXHU4Mjg1XHU4Mjg2XHU4Mjg3XHU4Mjg5XHU4MjhjXHU4MjkwXHU4MjkzXHU4Mjk0XHU4Mjk1XHU4Mjk2XHU4MjlhXHU4MjliXHU4MjllXHU4MmEwXHU4MmEyXHU4MmEzXHU4MmE3XHU4MmIyXHU4MmI1XHU4MmI2XHU4MmJhXHU4MmJiXHU4MmJjXHU4MmJmXHU4MmMwXHU4'@;
put 'MmMyXHU4MmMzXHU4MmM1XHU4MmM2XHU4MmM5XHU4MmQwXHU4MmQ2XHU4MmQ5XHU4MmRhXHU4MmRkXHU4MmUyXHU4MmU3XHU4MmU4XHU4MmU5XHU4MmVhXHU4MmVjXHU4MmVkXHU4MmVlXHU4MmYwXHU4MmYyXHU4MmYzXHU4MmY1XHU4MmY2XHU4MmY4XHVmZmZkXHU4MmZhXHU4MmZjXHU4MmZk'@;
put 'XHU4MmZlXHU4MmZmXHU4MzAwXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkXHU4MzFlXHU4MzFmXHU4MzIwXHU4MzIxXHU4MzIyXHU4MzIzXHU4MzI0XHU4MzI1XHU4MzI2XHU4MzI5XHU4MzJhXHU4MzJlXHU4MzMwXHU4MzMyXHU4'@;
put 'MzM3XHU4MzNiXHU4MzNkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUy'@;
put 'XHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2'@;
put 'NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3'@;
put 'XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2YzdkXHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTk4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lb'@;
put 'MTk4XVtnXV09NTA2ODgrZyxfWzUwNjg4K2ddPXlbMTk4XVtnXSk7Zm9yKHlbMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzNlXHU4MzNmXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRhXHU4MzRiXHU4MzRj'@;
put 'XHU4MzRkXHU4MzRlXHU4MzUzXHU4MzU1XHU4MzU2XHU4MzU3XHU4MzU4XHU4MzU5XHU4MzVkXHU4MzYyXHU4MzcwXHU4MzcxXHU4MzcyXHU4MzczXHU4Mzc0XHU4Mzc1XHU4Mzc2XHU4Mzc5XHU4MzdhXHU4MzdlXHU4MzdmXHU4MzgwXHU4MzgxXHU4MzgyXHU4MzgzXHU4Mzg0XHU4Mzg3XHU4'@;
put 'Mzg4XHU4MzhhXHU4MzhiXHU4MzhjXHU4MzhkXHU4MzhmXHU4MzkwXHU4MzkxXHU4Mzk0XHU4Mzk1XHU4Mzk2XHU4Mzk3XHU4Mzk5XHU4MzlhXHU4MzlkXHU4MzlmXHU4M2ExXHU4M2EyXHU4M2EzXHU4M2E0XHU4M2E1XHU4M2E2XHU4M2E3XHU4M2FjXHU4M2FkXHU4M2FlXHVmZmZkXHU4M2Fm'@;
put 'XHU4M2I1XHU4M2JiXHU4M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0XHU4M2M2XHU4M2M4XHU4M2M5XHU4M2NiXHU4M2NkXHU4M2NlXHU4M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0XHU4M2U2XHU4'@;
put 'M2U3XHU4M2U4XHU4M2ViXHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIw'@;
put 'XHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2'@;
put 'MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3'@;
put 'XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTk5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTldW2ddLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihJW3lbMTk5XVtnXV09NTA5NDQrZyxfWzUwOTQ0K2ddPXlbMTk5XVtnXSk7Zm9yKHlbMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2VlXHU4M2VmXHU4M2YzXHU4M2Y0XHU4M2Y1XHU4M2Y2XHU4M2Y3XHU4M2Zh'@;
put 'XHU4M2ZiXHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyXHU4NDEzXHU4NDE0XHU4NDE1XHU4NDE2XHU4NDE3XHU4NDE5XHU4NDFhXHU4NDFiXHU4NDFlXHU4NDFmXHU4NDIwXHU4NDIxXHU4NDIyXHU4NDIzXHU4'@;
put 'NDI5XHU4NDJhXHU4NDJiXHU4NDJjXHU4NDJkXHU4NDJlXHU4NDJmXHU4NDMwXHU4NDMyXHU4NDMzXHU4NDM0XHU4NDM1XHU4NDM2XHU4NDM3XHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlXHU4NDNmXHU4NDQwXHU4NDQxXHU4NDQyXHU4NDQzXHU4NDQ0XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDQ5'@;
put 'XHVmZmZkXHU4NDRhXHU4NDRiXHU4NDRjXHU4NDRkXHU4NDRlXHU4NDRmXHU4NDUwXHU4NDUyXHU4NDUzXHU4NDU0XHU4NDU1XHU4NDU2XHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0XHU4NDY1XHU4NDY2XHU4NDY3XHU4NDY4XHU4NDZhXHU4NDZlXHU4NDZmXHU4'@;
put 'NDcwXHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRh'@;
put 'XHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1'@;
put 'OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1'@;
put 'XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjAwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDBd'@;
put 'W2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjAwXVtnXV09NTEyMDArZyxfWzUxMjAwK2ddPXlbMjAwXVtnXSk7Zm9yKHlbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NDdkXHU4NDdlXHU4NDdmXHU4NDgwXHU4NDgxXHU4NDgz'@;
put 'XHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhhXHU4NDhkXHU4NDhmXHU4NDkwXHU4NDkxXHU4NDkyXHU4NDkzXHU4NDk0XHU4NDk1XHU4NDk2XHU4NDk4XHU4NDlhXHU4NDliXHU4NDlkXHU4NDllXHU4NDlmXHU4NGEwXHU4NGEyXHU4NGEzXHU4NGE0XHU4NGE1XHU4NGE2XHU4NGE3XHU4NGE4XHU4'@;
put 'NGE5XHU4NGFhXHU4NGFiXHU4NGFjXHU4NGFkXHU4NGFlXHU4NGIwXHU4NGIxXHU4NGIzXHU4NGI1XHU4NGI2XHU4NGI3XHU4NGJiXHU4NGJjXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGMzXHU4NGM1XHU4NGM2XHU4NGM3XHU4NGM4XHU4NGNiXHU4NGNjXHU4NGNlXHU4NGNmXHU4NGQyXHU4NGQ0'@;
put 'XHU4NGQ1XHU4NGQ3XHVmZmZkXHU4NGQ4XHU4NGQ5XHU4NGRhXHU4NGRiXHU4NGRjXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3XHU4NGU4XHU4NGU5XHU4NGVhXHU4NGViXHU4NGVkXHU4NGVlXHU4NGVmXHU4NGYxXHU4NGYyXHU4NGYzXHU4NGY0XHU4NGY1XHU4NGY2XHU4NGY3XHU4'@;
put 'NGY4XHU4NGY5XHU4NGZhXHU4NGZiXHU4NGZkXHU4NGZlXHU4NTAwXHU4NTAxXHU4NTAyXHU0ZjFlXHU2NTYzXHU2ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5'@;
put 'XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIwXHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0'@;
put 'ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMz'@;
put 'XHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFhXHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjAxXS5sZW5ndGg7KytnKTY1'@;
put 'NTMzIT09eVsyMDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjAxXVtnXV09NTE0NTYrZyxfWzUxNDU2K2ddPXlbMjAxXVtnXSk7Zm9yKHlbMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTAzXHU4NTA0XHU4NTA1XHU4NTA2'@;
put 'XHU4NTA3XHU4NTA4XHU4NTA5XHU4NTBhXHU4NTBiXHU4NTBkXHU4NTBlXHU4NTBmXHU4NTEwXHU4NTEyXHU4NTE0XHU4NTE1XHU4NTE2XHU4NTE4XHU4NTE5XHU4NTFiXHU4NTFjXHU4NTFkXHU4NTFlXHU4NTIwXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI2XHU4NTI3XHU4NTI4XHU4'@;
put 'NTI5XHU4NTJhXHU4NTJkXHU4NTJlXHU4NTJmXHU4NTMwXHU4NTMxXHU4NTMyXHU4NTMzXHU4NTM0XHU4NTM1XHU4NTM2XHU4NTNlXHU4NTNmXHU4NTQwXHU4NTQxXHU4NTQyXHU4NTQ0XHU4NTQ1XHU4NTQ2XHU4NTQ3XHU4NTRiXHU4NTRjXHU4NTRkXHU4NTRlXHU4NTRmXHU4NTUwXHU4NTUx'@;
put 'XHU4NTUyXHU4NTUzXHU4NTU0XHU4NTU1XHVmZmZkXHU4NTU3XHU4NTU4XHU4NTVhXHU4NTViXHU4NTVjXHU4NTVkXHU4NTVmXHU4NTYwXHU4NTYxXHU4NTYyXHU4NTYzXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5XHU4NTZhXHU4NTZiXHU4NTZjXHU4NTZkXHU4NTZlXHU4NTZmXHU4NTcwXHU4'@;
put 'NTcxXHU4NTczXHU4NTc1XHU4NTc2XHU4NTc3XHU4NTc4XHU4NTdjXHU4NTdkXHU4NTdmXHU4NTgwXHU4NTgxXHU3NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2'@;
put 'XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5'@;
put 'MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThm'@;
put 'XHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjAyXS5s'@;
put 'ZW5ndGg7KytnKTY1NTMzIT09eVsyMDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjAyXVtnXV09NTE3MTIrZyxfWzUxNzEyK2ddPXlbMjAyXVtnXSk7Zm9yKHlbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTgyXHU4NTgz'@;
put 'XHU4NTg2XHU4NTg4XHU4NTg5XHU4NThhXHU4NThiXHU4NThjXHU4NThkXHU4NThlXHU4NTkwXHU4NTkxXHU4NTkyXHU4NTkzXHU4NTk0XHU4NTk1XHU4NTk2XHU4NTk3XHU4NTk4XHU4NTk5XHU4NTlhXHU4NTlkXHU4NTllXHU4NTlmXHU4NWEwXHU4NWExXHU4NWEyXHU4NWEzXHU4NWE1XHU4'@;
put 'NWE2XHU4NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxXHU4NWIyXHU4NWIzXHU4NWI0XHU4NWI1XHU4NWI2XHU4NWI4XHU4NWJhXHU4NWJiXHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMwXHU4NWMyXHU4NWMzXHU4NWM0XHU4NWM1XHU4NWM2XHU4NWM3XHU4NWM4XHU4NWNh'@;
put 'XHU4NWNiXHU4NWNjXHU4NWNkXHU4NWNlXHU4NWQxXHU4NWQyXHVmZmZkXHU4NWQ0XHU4NWQ2XHU4NWQ3XHU4NWQ4XHU4NWQ5XHU4NWRhXHU4NWRiXHU4NWRkXHU4NWRlXHU4NWRmXHU4NWUwXHU4NWUxXHU4NWUyXHU4NWUzXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhXHU4NWViXHU4'@;
put 'NWVjXHU4NWVkXHU4NWVlXHU4NWVmXHU4NWYwXHU4NWYxXHU4NWYyXHU4NWYzXHU4NWY0XHU4NWY1XHU4NWY2XHU4NWY3XHU4NWY4XHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYx'@;
put 'XHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2'@;
put 'MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5Njhm'@;
put 'XHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksZz0w'@;
put 'O2chPXlbMjAzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjAzXVtnXV09NTE5NjgrZyxfWzUxOTY4K2ddPXlbMjAzXVtnXSk7Zm9yKHlbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU4NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwXHU4NjAxXHU4NjAyXHU4NjAzXHU4NjA0XHU4NjA2XHU4NjA3XHU4NjA4XHU4NjA5XHU4NjBhXHU4NjBiXHU4NjBjXHU4NjBkXHU4NjBlXHU4NjBmXHU4NjEwXHU4NjEyXHU4NjEzXHU4NjE0XHU4NjE1XHU4NjE3XHU4NjE4XHU4'@;
put 'NjE5XHU4NjFhXHU4NjFiXHU4NjFjXHU4NjFkXHU4NjFlXHU4NjFmXHU4NjIwXHU4NjIxXHU4NjIyXHU4NjIzXHU4NjI0XHU4NjI1XHU4NjI2XHU4NjI4XHU4NjJhXHU4NjJiXHU4NjJjXHU4NjJkXHU4NjJlXHU4NjJmXHU4NjMwXHU4NjMxXHU4NjMyXHU4NjMzXHU4NjM0XHU4NjM1XHU4NjM2'@;
put 'XHU4NjM3XHU4NjM5XHU4NjNhXHU4NjNiXHU4NjNkXHU4NjNlXHU4NjNmXHU4NjQwXHVmZmZkXHU4NjQxXHU4NjQyXHU4NjQzXHU4NjQ0XHU4NjQ1XHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4NjQ5XHU4NjRhXHU4NjRiXHU4NjRjXHU4NjUyXHU4NjUzXHU4NjU1XHU4NjU2XHU4NjU3XHU4NjU4XHU4'@;
put 'NjU5XHU4NjViXHU4NjVjXHU4NjVkXHU4NjVmXHU4NjYwXHU4NjYxXHU4NjYzXHU4NjY0XHU4NjY1XHU4NjY2XHU4NjY3XHU4NjY4XHU4NjY5XHU4NjZhXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2Yzcw'@;
put 'XHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4'@;
put 'ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdj'@;
put 'XHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksZz0wO2chPXlbMjA0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjA0XVtnXV09NTIyMjQrZyxfWzUyMjI0K2ddPXlbMjA0XVtnXSk7Zm9yKHlbMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU4NjZkXHU4NjZmXHU4NjcwXHU4NjcyXHU4NjczXHU4Njc0XHU4Njc1XHU4Njc2XHU4Njc3XHU4Njc4XHU4NjgzXHU4Njg0XHU4Njg1XHU4Njg2XHU4Njg3XHU4Njg4XHU4Njg5XHU4NjhlXHU4NjhmXHU4NjkwXHU4NjkxXHU4NjkyXHU4Njk0XHU4Njk2XHU4Njk3XHU4'@;
put 'Njk4XHU4Njk5XHU4NjlhXHU4NjliXHU4NjllXHU4NjlmXHU4NmEwXHU4NmExXHU4NmEyXHU4NmE1XHU4NmE2XHU4NmFiXHU4NmFkXHU4NmFlXHU4NmIyXHU4NmIzXHU4NmI3XHU4NmI4XHU4NmI5XHU4NmJiXHU4NmJjXHU4NmJkXHU4NmJlXHU4NmJmXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1'@;
put 'XHU4NmM4XHU4NmNjXHU4NmNkXHU4NmQyXHU4NmQzXHU4NmQ1XHU4NmQ2XHU4NmQ3XHU4NmRhXHU4NmRjXHVmZmZkXHU4NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4NmY3XHU4'@;
put 'NmZhXHU4NmZiXHU4NmZjXHU4NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4NzBiXHU4NzBjXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2Iz'@;
put 'XHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5'@;
put 'ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2'@;
put 'XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1'@;
put 'YTAxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjA1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjA1XVtnXV09NTI0ODArZyxfWzUyNDgwK2ddPXlbMjA1XVtnXSk7Zm9yKHlbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4'@;
put 'NzNkXHU4NzQwXHU4NzQxXHU4NzQyXHU4NzQzXHU4NzQ0XHU4NzQ1XHU4NzQ2XHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhXHU4NzViXHU4NzVjXHU4NzVkXHU4NzVlXHU4NzVmXHU4NzYxXHU4NzYyXHU4NzY2'@;
put 'XHU4NzY3XHU4NzY4XHU4NzY5XHU4NzZhXHU4NzZiXHU4NzZjXHU4NzZkXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1XHVmZmZkXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlXHU4'@;
put 'NzhmXHU4NzkwXHU4NzkxXHU4NzkyXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4XHU4Nzk5XHU4NzlhXHU4NzliXHU4NzljXHU4NzlkXHU4NzllXHU4N2EwXHU4N2ExXHU4N2EyXHU4N2EzXHU4N2E0XHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRm'@;
put 'XHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5'@;
put 'NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3'@;
put 'XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1'@;
put 'NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjA2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjA2XVtnXV09NTI3MzYrZyxfWzUyNzM2K2ddPXlbMjA2XVtnXSk7Zm9yKHlbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxXHU4N2MyXHU4N2MzXHU4'@;
put 'N2M0XHU4N2M1XHU4N2M3XHU4N2M4XHU4N2M5XHU4N2NjXHU4N2NkXHU4N2NlXHU4N2NmXHU4N2QwXHU4N2Q0XHU4N2Q1XHU4N2Q2XHU4N2Q3XHU4N2Q4XHU4N2Q5XHU4N2RhXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4'@;
put 'XHU4N2U5XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmXHU4N2YwXHU4N2YxXHU4N2YyXHU4N2YzXHU4N2Y0XHU4N2Y1XHU4N2Y2XHU4N2Y3XHU4N2Y4XHVmZmZkXHU4N2ZhXHU4N2ZiXHU4N2ZjXHU4N2ZkXHU4N2ZmXHU4ODAwXHU4ODAxXHU4ODAyXHU4ODA0XHU4ODA1XHU4ODA2XHU4ODA3XHU4'@;
put 'ODA4XHU4ODA5XHU4ODBiXHU4ODBjXHU4ODBkXHU4ODBlXHU4ODBmXHU4ODEwXHU4ODExXHU4ODEyXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjXHU4ODFkXHU4ODFlXHU4ODFmXHU4ODIwXHU4ODIzXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRj'@;
put 'XHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTljXHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1'@;
put 'M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUw'@;
put 'XHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5'@;
put 'NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjA3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjA3XVtnXV09NTI5OTIrZyxfWzUyOTkyK2ddPXlbMjA3XVtnXSk7Zm9yKHlbMjA4XT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ODI0XHU4ODI1XHU4ODI2XHU4ODI3XHU4ODI4XHU4ODI5XHU4ODJhXHU4ODJiXHU4ODJjXHU4ODJkXHU4ODJlXHU4ODJmXHU4ODMwXHU4ODMxXHU4ODMzXHU4ODM0XHU4ODM1XHU4ODM2XHU4ODM3XHU4'@;
put 'ODM4XHU4ODNhXHU4ODNiXHU4ODNkXHU4ODNlXHU4ODNmXHU4ODQxXHU4ODQyXHU4ODQzXHU4ODQ2XHU4ODQ3XHU4ODQ4XHU4ODQ5XHU4ODRhXHU4ODRiXHU4ODRlXHU4ODRmXHU4ODUwXHU4ODUxXHU4ODUyXHU4ODUzXHU4ODU1XHU4ODU2XHU4ODU4XHU4ODVhXHU4ODViXHU4ODVjXHU4ODVk'@;
put 'XHU4ODVlXHU4ODVmXHU4ODYwXHU4ODY2XHU4ODY3XHU4ODZhXHU4ODZkXHU4ODZmXHU4ODcxXHU4ODczXHU4ODc0XHU4ODc1XHU4ODc2XHU4ODc4XHU4ODc5XHU4ODdhXHVmZmZkXHU4ODdiXHU4ODdjXHU4ODgwXHU4ODgzXHU4ODg2XHU4ODg3XHU4ODg5XHU4ODhhXHU4ODhjXHU4ODhlXHU4'@;
put 'ODhmXHU4ODkwXHU4ODkxXHU4ODkzXHU4ODk0XHU4ODk1XHU4ODk3XHU4ODk4XHU4ODk5XHU4ODlhXHU4ODliXHU4ODlkXHU4ODllXHU4ODlmXHU4OGEwXHU4OGExXHU4OGEzXHU4OGE1XHU4OGE2XHU4OGE3XHU4OGE4XHU4OGE5XHU4OGFhXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4'@;
put 'XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4'@;
put 'ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThh'@;
put 'XHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3'@;
put 'ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjA4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjA4XVtnXV09NTMyNDgrZyxfWzUzMjQ4K2ddPXlbMjA4XVtnXSk7Zm9yKHlb'@;
put 'MjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyXHU4OGIzXHU4OGI0XHU4OGI1XHU4OGI2XHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4'@;
put 'OGMzXHU4OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhXHU4OGRiXHU4OGRjXHU4OGRkXHU4OGRlXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5XHU4OGVhXHU4OGViXHU4OGVjXHU4OGVk'@;
put 'XHU4OGVlXHU4OGVmXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzXHU4OTA0XHU4OTA1XHU4OTA2XHU4OTA3XHU4OTA4XHVmZmZkXHU4OTA5XHU4OTBiXHU4OTBjXHU4OTBkXHU4OTBlXHU4OTBmXHU4OTExXHU4OTE0XHU4'@;
put 'OTE1XHU4OTE2XHU4OTE3XHU4OTE4XHU4OTFjXHU4OTFkXHU4OTFlXHU4OTFmXHU4OTIwXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5'@;
put 'XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4'@;
put 'MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5'@;
put 'XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0'@;
put 'ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjA5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjA5XVtnXV09NTM1MDQrZyxfWzUzNTA0K2ddPXlbMjA5'@;
put 'XVtnXSk7Zm9yKHlbMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTM4XHU4OTM5XHU4OTNhXHU4OTNiXHU4OTNjXHU4OTNkXHU4OTNlXHU4OTNmXHU4OTQwXHU4OTQyXHU4OTQzXHU4OTQ1XHU4OTQ2XHU4OTQ3XHU4OTQ4XHU4'@;
put 'OTQ5XHU4OTRhXHU4OTRiXHU4OTRjXHU4OTRkXHU4OTRlXHU4OTRmXHU4OTUwXHU4OTUxXHU4OTUyXHU4OTUzXHU4OTU0XHU4OTU1XHU4OTU2XHU4OTU3XHU4OTU4XHU4OTU5XHU4OTVhXHU4OTViXHU4OTVjXHU4OTVkXHU4OTYwXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTY0XHU4OTY1XHU4OTY3'@;
put 'XHU4OTY4XHU4OTY5XHU4OTZhXHU4OTZiXHU4OTZjXHU4OTZkXHU4OTZlXHU4OTZmXHU4OTcwXHU4OTcxXHU4OTcyXHU4OTczXHU4OTc0XHU4OTc1XHU4OTc2XHU4OTc3XHU4OTc4XHU4OTc5XHU4OTdhXHU4OTdjXHVmZmZkXHU4OTdkXHU4OTdlXHU4OTgwXHU4OTgyXHU4OTg0XHU4OTg1XHU4'@;
put 'OTg3XHU4OTg4XHU4OTg5XHU4OThhXHU4OThiXHU4OThjXHU4OThkXHU4OThlXHU4OThmXHU4OTkwXHU4OTkxXHU4OTkyXHU4OTkzXHU4OTk0XHU4OTk1XHU4OTk2XHU4OTk3XHU4OTk4XHU4OTk5XHU4OTlhXHU4OTliXHU4OTljXHU4OTlkXHU4OTllXHU4OTlmXHU4OWEwXHU4OWExXHU2NDQ3'@;
put 'XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1'@;
put 'MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkx'@;
put 'XHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5'@;
put 'N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjEwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjEwXVtnXV09NTM3NjArZyxfWzUz'@;
put 'NzYwK2ddPXlbMjEwXVtnXSk7Zm9yKHlbMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWEyXHU4OWEzXHU4OWE0XHU4OWE1XHU4OWE2XHU4OWE3XHU4OWE4XHU4OWE5XHU4OWFhXHU4OWFiXHU4OWFjXHU4OWFkXHU4OWFlXHU4'@;
put 'OWFmXHU4OWIwXHU4OWIxXHU4OWIyXHU4OWIzXHU4OWI0XHU4OWI1XHU4OWI2XHU4OWI3XHU4OWI4XHU4OWI5XHU4OWJhXHU4OWJiXHU4OWJjXHU4OWJkXHU4OWJlXHU4OWJmXHU4OWMwXHU4OWMzXHU4OWNkXHU4OWQzXHU4OWQ0XHU4OWQ1XHU4OWQ3XHU4OWQ4XHU4OWQ5XHU4OWRiXHU4OWRk'@;
put 'XHU4OWRmXHU4OWUwXHU4OWUxXHU4OWUyXHU4OWU0XHU4OWU3XHU4OWU4XHU4OWU5XHU4OWVhXHU4OWVjXHU4OWVkXHU4OWVlXHU4OWYwXHU4OWYxXHU4OWYyXHU4OWY0XHU4OWY1XHU4OWY2XHU4OWY3XHU4OWY4XHU4OWY5XHU4OWZhXHVmZmZkXHU4OWZiXHU4OWZjXHU4OWZkXHU4OWZlXHU4'@;
put 'OWZmXHU4YTAxXHU4YTAyXHU4YTAzXHU4YTA0XHU4YTA1XHU4YTA2XHU4YTA4XHU4YTA5XHU4YTBhXHU4YTBiXHU4YTBjXHU4YTBkXHU4YTBlXHU4YTBmXHU4YTEwXHU4YTExXHU4YTEyXHU4YTEzXHU4YTE0XHU4YTE1XHU4YTE2XHU4YTE3XHU4YTE4XHU4YTE5XHU4YTFhXHU4YTFiXHU4YTFj'@;
put 'XHU4YTFkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4'@;
put 'ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4'@;
put 'XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1'@;
put 'N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjExXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjExXVtnXV09'@;
put 'NTQwMTYrZyxfWzU0MDE2K2ddPXlbMjExXVtnXSk7Zm9yKHlbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTFlXHU4YTFmXHU4YTIwXHU4YTIxXHU4YTIyXHU4YTIzXHU4YTI0XHU4YTI1XHU4YTI2XHU4YTI3XHU4YTI4XHU4'@;
put 'YTI5XHU4YTJhXHU4YTJiXHU4YTJjXHU4YTJkXHU4YTJlXHU4YTJmXHU4YTMwXHU4YTMxXHU4YTMyXHU4YTMzXHU4YTM0XHU4YTM1XHU4YTM2XHU4YTM3XHU4YTM4XHU4YTM5XHU4YTNhXHU4YTNiXHU4YTNjXHU4YTNkXHU4YTNmXHU4YTQwXHU4YTQxXHU4YTQyXHU4YTQzXHU4YTQ0XHU4YTQ1'@;
put 'XHU4YTQ2XHU4YTQ3XHU4YTQ5XHU4YTRhXHU4YTRiXHU4YTRjXHU4YTRkXHU4YTRlXHU4YTRmXHU4YTUwXHU4YTUxXHU4YTUyXHU4YTUzXHU4YTU0XHU4YTU1XHU4YTU2XHU4YTU3XHU4YTU4XHU4YTU5XHU4YTVhXHU4YTViXHU4YTVjXHU4YTVkXHU4YTVlXHVmZmZkXHU4YTVmXHU4YTYwXHU4'@;
put 'YTYxXHU4YTYyXHU4YTYzXHU4YTY0XHU4YTY1XHU4YTY2XHU4YTY3XHU4YTY4XHU4YTY5XHU4YTZhXHU4YTZiXHU4YTZjXHU4YTZkXHU4YTZlXHU4YTZmXHU4YTcwXHU4YTcxXHU4YTcyXHU4YTczXHU4YTc0XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc4XHU4YTdhXHU4YTdiXHU4YTdjXHU4YTdk'@;
put 'XHU4YTdlXHU4YTdmXHU4YTgwXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2'@;
put 'MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNk'@;
put 'XHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4'@;
put 'ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjEyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJ'@;
put 'W3lbMjEyXVtnXV09NTQyNzIrZyxfWzU0MjcyK2ddPXlbMjEyXVtnXSk7Zm9yKHlbMjEzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTgxXHU4YTgyXHU4YTgzXHU4YTg0XHU4YTg1XHU4YTg2XHU4YTg3XHU4YTg4XHU4YThiXHU4'@;
put 'YThjXHU4YThkXHU4YThlXHU4YThmXHU4YTkwXHU4YTkxXHU4YTkyXHU4YTk0XHU4YTk1XHU4YTk2XHU4YTk3XHU4YTk4XHU4YTk5XHU4YTlhXHU4YTliXHU4YTljXHU4YTlkXHU4YTllXHU4YTlmXHU4YWEwXHU4YWExXHU4YWEyXHU4YWEzXHU4YWE0XHU4YWE1XHU4YWE2XHU4YWE3XHU4YWE4'@;
put 'XHU4YWE5XHU4YWFhXHU4YWFiXHU4YWFjXHU4YWFkXHU4YWFlXHU4YWFmXHU4YWIwXHU4YWIxXHU4YWIyXHU4YWIzXHU4YWI0XHU4YWI1XHU4YWI2XHU4YWI3XHU4YWI4XHU4YWI5XHU4YWJhXHU4YWJiXHU4YWJjXHU4YWJkXHU4YWJlXHU4YWJmXHU4YWMwXHU4YWMxXHU4YWMyXHVmZmZkXHU4'@;
put 'YWMzXHU4YWM0XHU4YWM1XHU4YWM2XHU4YWM3XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWNiXHU4YWNjXHU4YWNkXHU4YWNlXHU4YWNmXHU4YWQwXHU4YWQxXHU4YWQyXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ2XHU4YWQ3XHU4YWQ4XHU4YWQ5XHU4YWRhXHU4YWRiXHU4YWRjXHU4YWRkXHU4YWRl'@;
put 'XHU4YWRmXHU4YWUwXHU4YWUxXHU4YWUyXHU4YWUzXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4'@;
put 'Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2Mjdl'@;
put 'XHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3'@;
put 'NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjEzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTNdW2ddLmNoYXJD'@;
put 'b2RlQXQoMCkmJihJW3lbMjEzXVtnXV09NTQ1MjgrZyxfWzU0NTI4K2ddPXlbMjEzXVtnXSk7Zm9yKHlbMjE0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWU0XHU4YWU1XHU4YWU2XHU4YWU3XHU4YWU4XHU4YWU5XHU4YWVhXHU4'@;
put 'YWViXHU4YWVjXHU4YWVkXHU4YWVlXHU4YWVmXHU4YWYwXHU4YWYxXHU4YWYyXHU4YWYzXHU4YWY0XHU4YWY1XHU4YWY2XHU4YWY3XHU4YWY4XHU4YWY5XHU4YWZhXHU4YWZiXHU4YWZjXHU4YWZkXHU4YWZlXHU4YWZmXHU4YjAwXHU4YjAxXHU4YjAyXHU4YjAzXHU4YjA0XHU4YjA1XHU4YjA2'@;
put 'XHU4YjA4XHU4YjA5XHU4YjBhXHU4YjBiXHU4YjBjXHU4YjBkXHU4YjBlXHU4YjBmXHU4YjEwXHU4YjExXHU4YjEyXHU4YjEzXHU4YjE0XHU4YjE1XHU4YjE2XHU4YjE3XHU4YjE4XHU4YjE5XHU4YjFhXHU4YjFiXHU4YjFjXHU4YjFkXHU4YjFlXHU4YjFmXHU4YjIwXHU4YjIxXHU4YjIyXHU4'@;
put 'YjIzXHVmZmZkXHU4YjI0XHU4YjI1XHU4YjI3XHU4YjI4XHU4YjI5XHU4YjJhXHU4YjJiXHU4YjJjXHU4YjJkXHU4YjJlXHU4YjJmXHU4YjMwXHU4YjMxXHU4YjMyXHU4YjMzXHU4YjM0XHU4YjM1XHU4YjM2XHU4YjM3XHU4YjM4XHU4YjM5XHU4YjNhXHU4YjNiXHU4YjNjXHU4YjNkXHU4YjNl'@;
put 'XHU4YjNmXHU4YjQwXHU4YjQxXHU4YjQyXHU4YjQzXHU4YjQ0XHU4YjQ1XHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1'@;
put 'MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJk'@;
put 'XHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2'@;
put 'NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjE0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsy'@;
put 'MTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjE0XVtnXV09NTQ3ODQrZyxfWzU0Nzg0K2ddPXlbMjE0XVtnXSk7Zm9yKHlbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjQ2XHU4YjQ3XHU4YjQ4XHU4YjQ5XHU4YjRhXHU4'@;
put 'YjRiXHU4YjRjXHU4YjRkXHU4YjRlXHU4YjRmXHU4YjUwXHU4YjUxXHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU1XHU4YjU2XHU4YjU3XHU4YjU4XHU4YjU5XHU4YjVhXHU4YjViXHU4YjVjXHU4YjVkXHU4YjVlXHU4YjVmXHU4YjYwXHU4YjYxXHU4YjYyXHU4YjYzXHU4YjY0XHU4YjY1XHU4YjY3'@;
put 'XHU4YjY4XHU4YjY5XHU4YjZhXHU4YjZiXHU4YjZkXHU4YjZlXHU4YjZmXHU4YjcwXHU4YjcxXHU4YjcyXHU4YjczXHU4Yjc0XHU4Yjc1XHU4Yjc2XHU4Yjc3XHU4Yjc4XHU4Yjc5XHU4YjdhXHU4YjdiXHU4YjdjXHU4YjdkXHU4YjdlXHU4YjdmXHU4YjgwXHU4YjgxXHU4YjgyXHU4YjgzXHU4'@;
put 'Yjg0XHU4Yjg1XHU4Yjg2XHVmZmZkXHU4Yjg3XHU4Yjg4XHU4Yjg5XHU4YjhhXHU4YjhiXHU4YjhjXHU4YjhkXHU4YjhlXHU4YjhmXHU4YjkwXHU4YjkxXHU4YjkyXHU4YjkzXHU4Yjk0XHU4Yjk1XHU4Yjk2XHU4Yjk3XHU4Yjk4XHU4Yjk5XHU4YjlhXHU4YjliXHU4YjljXHU4YjlkXHU4Yjll'@;
put 'XHU4YjlmXHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1'@;
put 'OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVj'@;
put 'XHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5'@;
put 'NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjE1XS5sZW5ndGg7Kytn'@;
put 'KTY1NTMzIT09eVsyMTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjE1XVtnXV09NTUwNDArZyxfWzU1MDQwK2ddPXlbMjE1XVtnXSk7Zm9yKHlbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzM4XHU4YzM5XHU4YzNhXHU4'@;
put 'YzNiXHU4YzNjXHU4YzNkXHU4YzNlXHU4YzNmXHU4YzQwXHU4YzQyXHU4YzQzXHU4YzQ0XHU4YzQ1XHU4YzQ4XHU4YzRhXHU4YzRiXHU4YzRkXHU4YzRlXHU4YzRmXHU4YzUwXHU4YzUxXHU4YzUyXHU4YzUzXHU4YzU0XHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViXHU4YzVjXHU4YzVk'@;
put 'XHU4YzVlXHU4YzVmXHU4YzYwXHU4YzYzXHU4YzY0XHU4YzY1XHU4YzY2XHU4YzY3XHU4YzY4XHU4YzY5XHU4YzZjXHU4YzZkXHU4YzZlXHU4YzZmXHU4YzcwXHU4YzcxXHU4YzcyXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiXHU4YzdjXHU4YzdkXHU4YzdlXHU4YzdmXHU4YzgwXHU4'@;
put 'YzgxXHU4YzgzXHU4Yzg0XHU4Yzg2XHU4Yzg3XHVmZmZkXHU4Yzg4XHU4YzhiXHU4YzhkXHU4YzhlXHU4YzhmXHU4YzkwXHU4YzkxXHU4YzkyXHU4YzkzXHU4Yzk1XHU4Yzk2XHU4Yzk3XHU4Yzk5XHU4YzlhXHU4YzliXHU4YzljXHU4YzlkXHU4YzllXHU4YzlmXHU4Y2EwXHU4Y2ExXHU4Y2Ey'@;
put 'XHU4Y2EzXHU4Y2E0XHU4Y2E1XHU4Y2E2XHU4Y2E3XHU4Y2E4XHU4Y2E5XHU4Y2FhXHU4Y2FiXHU4Y2FjXHU4Y2FkXHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0'@;
put 'ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1'@;
put 'XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3'@;
put 'ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjE2'@;
put 'XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjE2XVtnXV09NTUyOTYrZyxfWzU1Mjk2K2ddPXlbMjE2XVtnXSk7Zm9yKHlbMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FlXHU4'@;
put 'Y2FmXHU4Y2IwXHU4Y2IxXHU4Y2IyXHU4Y2IzXHU4Y2I0XHU4Y2I1XHU4Y2I2XHU4Y2I3XHU4Y2I4XHU4Y2I5XHU4Y2JhXHU4Y2JiXHU4Y2JjXHU4Y2JkXHU4Y2JlXHU4Y2JmXHU4Y2MwXHU4Y2MxXHU4Y2MyXHU4Y2MzXHU4Y2M0XHU4Y2M1XHU4Y2M2XHU4Y2M3XHU4Y2M4XHU4Y2M5XHU4Y2Nh'@;
put 'XHU4Y2NiXHU4Y2NjXHU4Y2NkXHU4Y2NlXHU4Y2NmXHU4Y2QwXHU4Y2QxXHU4Y2QyXHU4Y2QzXHU4Y2Q0XHU4Y2Q1XHU4Y2Q2XHU4Y2Q3XHU4Y2Q4XHU4Y2Q5XHU4Y2RhXHU4Y2RiXHU4Y2RjXHU4Y2RkXHU4Y2RlXHU4Y2RmXHU4Y2UwXHU4Y2UxXHU4Y2UyXHU4Y2UzXHU4Y2U0XHU4Y2U1XHU4'@;
put 'Y2U2XHU4Y2U3XHU4Y2U4XHU4Y2U5XHU4Y2VhXHU4Y2ViXHU4Y2VjXHVmZmZkXHU4Y2VkXHU4Y2VlXHU4Y2VmXHU4Y2YwXHU4Y2YxXHU4Y2YyXHU4Y2YzXHU4Y2Y0XHU4Y2Y1XHU4Y2Y2XHU4Y2Y3XHU4Y2Y4XHU4Y2Y5XHU4Y2ZhXHU4Y2ZiXHU4Y2ZjXHU4Y2ZkXHU4Y2ZlXHU4Y2ZmXHU4ZDAw'@;
put 'XHU4ZDAxXHU4ZDAyXHU4ZDAzXHU4ZDA0XHU4ZDA1XHU4ZDA2XHU4ZDA3XHU4ZDA4XHU4ZDA5XHU4ZDBhXHU4ZDBiXHU4ZDBjXHU4ZDBkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0'@;
put 'ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4'@;
put 'XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1'@;
put 'MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIiks'@;
put 'Zz0wO2chPXlbMjE3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjE3XVtnXV09NTU1NTIrZyxfWzU1NTUyK2ddPXlbMjE3XVtnXSk7Zm9yKHlbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU4ZDBlXHU4ZDBmXHU4ZDEwXHU4ZDExXHU4ZDEyXHU4ZDEzXHU4ZDE0XHU4ZDE1XHU4ZDE2XHU4ZDE3XHU4ZDE4XHU4ZDE5XHU4ZDFhXHU4ZDFiXHU4ZDFjXHU4ZDIwXHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZhXHU4ZDZjXHU4ZDZlXHU4ZDZm'@;
put 'XHU4ZDcxXHU4ZDcyXHU4ZDc4XHU4ZDc5XHU4ZDdhXHU4ZDdiXHU4ZDdjXHU4ZDdkXHU4ZDdlXHU4ZDdmXHU4ZDgwXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjXHU4ZDhkXHU4ZDhlXHU4ZDhmXHU4ZDkwXHU4ZDkyXHU4ZDkzXHU4ZDk1XHU4ZDk2XHU4ZDk3XHU4'@;
put 'ZDk4XHU4ZDk5XHU4ZDlhXHU4ZDliXHU4ZDljXHU4ZDlkXHU4ZDllXHU4ZGEwXHU4ZGExXHVmZmZkXHU4ZGEyXHU4ZGE0XHU4ZGE1XHU4ZGE2XHU4ZGE3XHU4ZGE4XHU4ZGE5XHU4ZGFhXHU4ZGFiXHU4ZGFjXHU4ZGFkXHU4ZGFlXHU4ZGFmXHU4ZGIwXHU4ZGIyXHU4ZGI2XHU4ZGI3XHU4ZGI5'@;
put 'XHU4ZGJiXHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4'@;
put 'YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBj'@;
put 'XHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5'@;
put 'NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksZz0wO2chPXlbMjE4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjE4XVtnXV09NTU4MDgrZyxfWzU1ODA4K2ddPXlbMjE4XVtnXSk7Zm9yKHlbMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU4ZGQ1XHU4ZGQ4XHU4ZGQ5XHU4ZGRjXHU4ZGUwXHU4ZGUxXHU4ZGUyXHU4ZGU1XHU4ZGU2XHU4ZGU3XHU4ZGU5XHU4ZGVkXHU4ZGVlXHU4ZGYwXHU4ZGYxXHU4ZGYyXHU4ZGY0XHU4ZGY2XHU4ZGZjXHU4ZGZlXHU4ZGZmXHU4ZTAwXHU4ZTAxXHU4ZTAyXHU4ZTAz'@;
put 'XHU4ZTA0XHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4ZTE1XHU4ZTE2XHU4ZTE3XHU4ZTE4XHU4ZTE5XHU4ZTFhXHU4ZTFiXHU4ZTFjXHU4ZTIwXHU4ZTIxXHU4ZTI0XHU4ZTI1XHU4ZTI2XHU4ZTI3XHU4ZTI4XHU4ZTJiXHU4'@;
put 'ZTJkXHU4ZTMwXHU4ZTMyXHU4ZTMzXHU4ZTM0XHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTNiXHU4ZTNjXHU4ZTNlXHVmZmZkXHU4ZTNmXHU4ZTQzXHU4ZTQ1XHU4ZTQ2XHU4ZTRjXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTUwXHU4ZTUzXHU4ZTU0XHU4ZTU1XHU4ZTU2XHU4ZTU3XHU4ZTU4XHU4ZTVh'@;
put 'XHU4ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTVmXHU4ZTYwXHU4ZTYxXHU4ZTYyXHU4ZTYzXHU4ZTY0XHU4ZTY1XHU4ZTY3XHU4ZTY4XHU4ZTZhXHU4ZTZiXHU4ZTZlXHU4ZTcxXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5'@;
put 'MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVl'@;
put 'XHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1'@;
put 'Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0'@;
put 'XHU1N2RkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjE5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjE5XVtnXV09NTYwNjQrZyxfWzU2MDY0K2ddPXlbMjE5XVtnXSk7Zm9yKHlbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTczXHU4ZTc1XHU4ZTc3XHU4ZTc4XHU4ZTc5XHU4ZTdhXHU4ZTdiXHU4ZTdkXHU4ZTdlXHU4ZTgwXHU4ZTgyXHU4ZTgzXHU4ZTg0XHU4ZTg2XHU4ZTg4XHU4ZTg5XHU4ZThhXHU4ZThiXHU4ZThjXHU4ZThkXHU4ZThlXHU4ZTkxXHU4ZTky'@;
put 'XHU4ZTkzXHU4ZTk1XHU4ZTk2XHU4ZTk3XHU4ZTk4XHU4ZTk5XHU4ZTlhXHU4ZTliXHU4ZTlkXHU4ZTlmXHU4ZWEwXHU4ZWExXHU4ZWEyXHU4ZWEzXHU4ZWE0XHU4ZWE1XHU4ZWE2XHU4ZWE3XHU4ZWE4XHU4ZWE5XHU4ZWFhXHU4ZWFkXHU4ZWFlXHU4ZWIwXHU4ZWIxXHU4ZWIzXHU4ZWI0XHU4'@;
put 'ZWI1XHU4ZWI2XHU4ZWI3XHU4ZWI4XHU4ZWI5XHU4ZWJiXHU4ZWJjXHU4ZWJkXHU4ZWJlXHU4ZWJmXHU4ZWMwXHU4ZWMxXHU4ZWMyXHVmZmZkXHU4ZWMzXHU4ZWM0XHU4ZWM1XHU4ZWM2XHU4ZWM3XHU4ZWM4XHU4ZWM5XHU4ZWNhXHU4ZWNiXHU4ZWNjXHU4ZWNkXHU4ZWNmXHU4ZWQwXHU4ZWQx'@;
put 'XHU4ZWQyXHU4ZWQzXHU4ZWQ0XHU4ZWQ1XHU4ZWQ2XHU4ZWQ3XHU4ZWQ4XHU4ZWQ5XHU4ZWRhXHU4ZWRiXHU4ZWRjXHU4ZWRkXHU4ZWRlXHU4ZWRmXHU4ZWUwXHU4ZWUxXHU4ZWUyXHU4ZWUzXHU4ZWU0XHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1'@;
put 'ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUz'@;
put 'XHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4'@;
put 'MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNh'@;
put 'XHU4MzMzXHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjIwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjIwXVtnXV09NTYzMjArZyxfWzU2MzIwK2ddPXlbMjIwXVtnXSk7Zm9yKHlbMjIxXT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWU1XHU4ZWU2XHU4ZWU3XHU4ZWU4XHU4ZWU5XHU4ZWVhXHU4ZWViXHU4ZWVjXHU4ZWVkXHU4ZWVlXHU4ZWVmXHU4ZWYwXHU4ZWYxXHU4ZWYyXHU4ZWYzXHU4ZWY0XHU4ZWY1XHU4ZWY2XHU4ZWY3XHU4ZWY4XHU4ZWY5'@;
put 'XHU4ZWZhXHU4ZWZiXHU4ZWZjXHU4ZWZkXHU4ZWZlXHU4ZWZmXHU4ZjAwXHU4ZjAxXHU4ZjAyXHU4ZjAzXHU4ZjA0XHU4ZjA1XHU4ZjA2XHU4ZjA3XHU4ZjA4XHU4ZjA5XHU4ZjBhXHU4ZjBiXHU4ZjBjXHU4ZjBkXHU4ZjBlXHU4ZjBmXHU4ZjEwXHU4ZjExXHU4ZjEyXHU4ZjEzXHU4ZjE0XHU4'@;
put 'ZjE1XHU4ZjE2XHU4ZjE3XHU4ZjE4XHU4ZjE5XHU4ZjFhXHU4ZjFiXHU4ZjFjXHU4ZjFkXHU4ZjFlXHU4ZjFmXHU4ZjIwXHU4ZjIxXHU4ZjIyXHU4ZjIzXHVmZmZkXHU4ZjI0XHU4ZjI1XHU4ZjI2XHU4ZjI3XHU4ZjI4XHU4ZjI5XHU4ZjJhXHU4ZjJiXHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjJm'@;
put 'XHU4ZjMwXHU4ZjMxXHU4ZjMyXHU4ZjMzXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjM4XHU4ZjM5XHU4ZjNhXHU4ZjNiXHU4ZjNjXHU4ZjNkXHU4ZjNlXHU4ZjNmXHU4ZjQwXHU4ZjQxXHU4ZjQyXHU4ZjQzXHU4ZjQ0XHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4'@;
put 'MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBi'@;
put 'XHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4'@;
put 'NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBk'@;
put 'XHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjIxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjIxXVtnXV09NTY1NzYrZyxfWzU2NTc2K2ddPXlbMjIxXVtnXSk7Zm9yKHlbMjIyXT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjQ1XHU4ZjQ2XHU4ZjQ3XHU4ZjQ4XHU4ZjQ5XHU4ZjRhXHU4ZjRiXHU4ZjRjXHU4ZjRkXHU4ZjRlXHU4ZjRmXHU4ZjUwXHU4ZjUxXHU4ZjUyXHU4ZjUzXHU4ZjU0XHU4ZjU1XHU4ZjU2XHU4ZjU3'@;
put 'XHU4ZjU4XHU4ZjU5XHU4ZjVhXHU4ZjViXHU4ZjVjXHU4ZjVkXHU4ZjVlXHU4ZjVmXHU4ZjYwXHU4ZjYxXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjY1XHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4'@;
put 'ZmFjXHU4ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2XHVmZmZkXHU4ZmM5XHU4ZmNhXHU4ZmNiXHU4ZmNjXHU4ZmNkXHU4ZmNmXHU4ZmQyXHU4ZmQ2XHU4ZmQ3XHU4ZmRh'@;
put 'XHU4ZmUwXHU4ZmUxXHU4ZmUzXHU4ZmU3XHU4ZmVjXHU4ZmVmXHU4ZmYxXHU4ZmYyXHU4ZmY0XHU4ZmY1XHU4ZmY2XHU4ZmZhXHU4ZmZiXHU4ZmZjXHU4ZmZlXHU4ZmZmXHU5MDA3XHU5MDA4XHU5MDBjXHU5MDBlXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4'@;
put 'NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5'@;
put 'XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBmXHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2'@;
put 'MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIw'@;
put 'XHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjIyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjIyXVtnXV09NTY4MzIrZyxfWzU2ODMyK2ddPXlbMjIyXVtnXSk7Zm9y'@;
put 'KHlbMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDE5XHU5MDFjXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3XHU5MDI4XHU5MDI5XHU5MDJhXHU5MDJiXHU5MDJjXHU5MDMwXHU5MDMxXHU5MDMyXHU5MDMzXHU5MDM0XHU5MDM3'@;
put 'XHU5MDM5XHU5MDNhXHU5MDNkXHU5MDNmXHU5MDQwXHU5MDQzXHU5MDQ1XHU5MDQ2XHU5MDQ4XHU5MDQ5XHU5MDRhXHU5MDRiXHU5MDRjXHU5MDRlXHU5MDU0XHU5MDU1XHU5MDU2XHU5MDU5XHU5MDVhXHU5MDVjXHU5MDVkXHU5MDVlXHU5MDVmXHU5MDYwXHU5MDYxXHU5MDY0XHU5MDY2XHU5'@;
put 'MDY3XHU5MDY5XHU5MDZhXHU5MDZiXHU5MDZjXHU5MDZmXHU5MDcwXHU5MDcxXHU5MDcyXHU5MDczXHU5MDc2XHU5MDc3XHU5MDc4XHU5MDc5XHU5MDdhXHU5MDdiXHU5MDdjXHU5MDdlXHU5MDgxXHVmZmZkXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhhXHU5MDhjXHU5MDhk'@;
put 'XHU5MDhlXHU5MDhmXHU5MDkwXHU5MDkyXHU5MDk0XHU5MDk2XHU5MDk4XHU5MDlhXHU5MDljXHU5MDllXHU5MDlmXHU5MGEwXHU5MGE0XHU5MGE1XHU5MGE3XHU5MGE4XHU5MGE5XHU5MGFiXHU5MGFkXHU5MGIyXHU5MGI3XHU5MGJjXHU5MGJkXHU5MGJmXHU5MGMwXHU2NDdhXHU2NGI3XHU2'@;
put 'NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0'@;
put 'XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1'@;
put 'NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3'@;
put 'XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjIzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjIzXVtnXV09NTcwODgrZyxfWzU3MDg4K2ddPXlb'@;
put 'MjIzXVtnXSk7Zm9yKHlbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRh'@;
put 'XHU5MGRlXHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5MTAxXHU5MTAzXHU5MTA1XHU5MTA2XHU5'@;
put 'MTA3XHU5MTA4XHU5MTA5XHU5MTBhXHU5MTBiXHU5MTBjXHU5MTBkXHU5MTBlXHU5MTBmXHU5MTEwXHU5MTExXHU5MTEyXHU5MTEzXHU5MTE0XHU5MTE1XHU5MTE2XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFiXHU5MTFjXHVmZmZkXHU5MTFkXHU5MTFmXHU5MTIwXHU5MTIxXHU5MTI0XHU5MTI1'@;
put 'XHU5MTI2XHU5MTI3XHU5MTI4XHU5MTI5XHU5MTJhXHU5MTJiXHU5MTJjXHU5MTJkXHU5MTJlXHU5MTMwXHU5MTMyXHU5MTMzXHU5MTM0XHU5MTM1XHU5MTM2XHU5MTM3XHU5MTM4XHU5MTNhXHU5MTNiXHU5MTNjXHU5MTNkXHU5MTNlXHU5MTNmXHU5MTQwXHU5MTQxXHU5MTQyXHU5MTQ0XHU1'@;
put 'NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5'@;
put 'XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1'@;
put 'NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZm'@;
put 'XHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI0XVtnXV09NTczNDQrZyxf'@;
put 'WzU3MzQ0K2ddPXlbMjI0XVtnXSk7Zm9yKHlbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTQ1XHU5MTQ3XHU5MTQ4XHU5MTUxXHU5MTUzXHU5MTU0XHU5MTU1XHU5MTU2XHU5MTU4XHU5MTU5XHU5MTViXHU5MTVjXHU5MTVm'@;
put 'XHU5MTYwXHU5MTY2XHU5MTY3XHU5MTY4XHU5MTZiXHU5MTZkXHU5MTczXHU5MTdhXHU5MTdiXHU5MTdjXHU5MTgwXHU5MTgxXHU5MTgyXHU5MTgzXHU5MTg0XHU5MTg2XHU5MTg4XHU5MThhXHU5MThlXHU5MThmXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk2XHU5MTk3XHU5MTk4XHU5MTk5XHU5'@;
put 'MTljXHU5MTlkXHU5MTllXHU5MTlmXHU5MWEwXHU5MWExXHU5MWE0XHU5MWE1XHU5MWE2XHU5MWE3XHU5MWE4XHU5MWE5XHU5MWFiXHU5MWFjXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWI3XHU5MWI4XHU5MWI5XHU5MWJiXHVmZmZkXHU5MWJjXHU5MWJkXHU5MWJlXHU5MWJm'@;
put 'XHU5MWMwXHU5MWMxXHU5MWMyXHU5MWMzXHU5MWM0XHU5MWM1XHU5MWM2XHU5MWM4XHU5MWNiXHU5MWQwXHU5MWQyXHU5MWQzXHU5MWQ0XHU5MWQ1XHU5MWQ2XHU5MWQ3XHU5MWQ4XHU5MWQ5XHU5MWRhXHU5MWRiXHU5MWRkXHU5MWRlXHU5MWRmXHU5MWUwXHU5MWUxXHU5MWUyXHU5MWUzXHU5'@;
put 'MWU0XHU5MWU1XHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3'@;
put 'XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1'@;
put 'ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMx'@;
put 'XHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYzXHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI1XVtn'@;
put 'XV09NTc2MDArZyxfWzU3NjAwK2ddPXlbMjI1XVtnXSk7Zm9yKHlbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MWU2XHU5MWU3XHU5MWU4XHU5MWU5XHU5MWVhXHU5MWViXHU5MWVjXHU5MWVkXHU5MWVlXHU5MWVmXHU5MWYw'@;
put 'XHU5MWYxXHU5MWYyXHU5MWYzXHU5MWY0XHU5MWY1XHU5MWY2XHU5MWY3XHU5MWY4XHU5MWY5XHU5MWZhXHU5MWZiXHU5MWZjXHU5MWZkXHU5MWZlXHU5MWZmXHU5MjAwXHU5MjAxXHU5MjAyXHU5MjAzXHU5MjA0XHU5MjA1XHU5MjA2XHU5MjA3XHU5MjA4XHU5MjA5XHU5MjBhXHU5MjBiXHU5'@;
put 'MjBjXHU5MjBkXHU5MjBlXHU5MjBmXHU5MjEwXHU5MjExXHU5MjEyXHU5MjEzXHU5MjE0XHU5MjE1XHU5MjE2XHU5MjE3XHU5MjE4XHU5MjE5XHU5MjFhXHU5MjFiXHU5MjFjXHU5MjFkXHU5MjFlXHU5MjFmXHU5MjIwXHU5MjIxXHU5MjIyXHU5MjIzXHU5MjI0XHVmZmZkXHU5MjI1XHU5MjI2'@;
put 'XHU5MjI3XHU5MjI4XHU5MjI5XHU5MjJhXHU5MjJiXHU5MjJjXHU5MjJkXHU5MjJlXHU5MjJmXHU5MjMwXHU5MjMxXHU5MjMyXHU5MjMzXHU5MjM0XHU5MjM1XHU5MjM2XHU5MjM3XHU5MjM4XHU5MjM5XHU5MjNhXHU5MjNiXHU5MjNjXHU5MjNkXHU5MjNlXHU5MjNmXHU5MjQwXHU5MjQxXHU5'@;
put 'MjQyXHU5MjQzXHU5MjQ0XHU5MjQ1XHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3'@;
put 'XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1'@;
put 'ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5'@;
put 'XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjZdW2ddLmNoYXJDb2RlQXQoMCkm'@;
put 'JihJW3lbMjI2XVtnXV09NTc4NTYrZyxfWzU3ODU2K2ddPXlbMjI2XVtnXSk7Zm9yKHlbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MjQ2XHU5MjQ3XHU5MjQ4XHU5MjQ5XHU5MjRhXHU5MjRiXHU5MjRjXHU5MjRkXHU5MjRl'@;
put 'XHU5MjRmXHU5MjUwXHU5MjUxXHU5MjUyXHU5MjUzXHU5MjU0XHU5MjU1XHU5MjU2XHU5MjU3XHU5MjU4XHU5MjU5XHU5MjVhXHU5MjViXHU5MjVjXHU5MjVkXHU5MjVlXHU5MjVmXHU5MjYwXHU5MjYxXHU5MjYyXHU5MjYzXHU5MjY0XHU5MjY1XHU5MjY2XHU5MjY3XHU5MjY4XHU5MjY5XHU5'@;
put 'MjZhXHU5MjZiXHU5MjZjXHU5MjZkXHU5MjZlXHU5MjZmXHU5MjcwXHU5MjcxXHU5MjcyXHU5MjczXHU5Mjc1XHU5Mjc2XHU5Mjc3XHU5Mjc4XHU5Mjc5XHU5MjdhXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdlXHU5MjdmXHU5MjgwXHU5MjgxXHU5MjgyXHU5MjgzXHU5Mjg0XHU5Mjg1XHVmZmZk'@;
put 'XHU5Mjg2XHU5Mjg3XHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhiXHU5MjhjXHU5MjhkXHU5MjhmXHU5MjkwXHU5MjkxXHU5MjkyXHU5MjkzXHU5Mjk0XHU5Mjk1XHU5Mjk2XHU5Mjk3XHU5Mjk4XHU5Mjk5XHU5MjlhXHU5MjliXHU5MjljXHU5MjlkXHU5MjllXHU5MjlmXHU5MmEwXHU5MmExXHU5'@;
put 'MmEyXHU5MmEzXHU5MmE0XHU5MmE1XHU5MmE2XHU5MmE3XHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIz'@;
put 'XHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5'@;
put 'NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5'@;
put 'XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjddW2ddLmNo'@;
put 'YXJDb2RlQXQoMCkmJihJW3lbMjI3XVtnXV09NTgxMTIrZyxfWzU4MTEyK2ddPXlbMjI3XVtnXSk7Zm9yKHlbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MmE4XHU5MmE5XHU5MmFhXHU5MmFiXHU5MmFjXHU5MmFkXHU5MmFm'@;
put 'XHU5MmIwXHU5MmIxXHU5MmIyXHU5MmIzXHU5MmI0XHU5MmI1XHU5MmI2XHU5MmI3XHU5MmI4XHU5MmI5XHU5MmJhXHU5MmJiXHU5MmJjXHU5MmJkXHU5MmJlXHU5MmJmXHU5MmMwXHU5MmMxXHU5MmMyXHU5MmMzXHU5MmM0XHU5MmM1XHU5MmM2XHU5MmM3XHU5MmM5XHU5MmNhXHU5MmNiXHU5'@;
put 'MmNjXHU5MmNkXHU5MmNlXHU5MmNmXHU5MmQwXHU5MmQxXHU5MmQyXHU5MmQzXHU5MmQ0XHU5MmQ1XHU5MmQ2XHU5MmQ3XHU5MmQ4XHU5MmQ5XHU5MmRhXHU5MmRiXHU5MmRjXHU5MmRkXHU5MmRlXHU5MmRmXHU5MmUwXHU5MmUxXHU5MmUyXHU5MmUzXHU5MmU0XHU5MmU1XHU5MmU2XHU5MmU3'@;
put 'XHU5MmU4XHVmZmZkXHU5MmU5XHU5MmVhXHU5MmViXHU5MmVjXHU5MmVkXHU5MmVlXHU5MmVmXHU5MmYwXHU5MmYxXHU5MmYyXHU5MmYzXHU5MmY0XHU5MmY1XHU5MmY2XHU5MmY3XHU5MmY4XHU5MmY5XHU5MmZhXHU5MmZiXHU5MmZjXHU5MmZkXHU5MmZlXHU5MmZmXHU5MzAwXHU5MzAxXHU5'@;
put 'MzAyXHU5MzAzXHU5MzA0XHU5MzA1XHU5MzA2XHU5MzA3XHU5MzA4XHU5MzA5XHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZm'@;
put 'XHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2'@;
put 'ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2'@;
put 'XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI4XS5sZW5ndGg7KytnKTY1NTMzIT09'@;
put 'eVsyMjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI4XVtnXV09NTgzNjgrZyxfWzU4MzY4K2ddPXlbMjI4XVtnXSk7Zm9yKHlbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzBhXHU5MzBiXHU5MzBjXHU5MzBkXHU5MzBl'@;
put 'XHU5MzBmXHU5MzEwXHU5MzExXHU5MzEyXHU5MzEzXHU5MzE0XHU5MzE1XHU5MzE2XHU5MzE3XHU5MzE4XHU5MzE5XHU5MzFhXHU5MzFiXHU5MzFjXHU5MzFkXHU5MzFlXHU5MzFmXHU5MzIwXHU5MzIxXHU5MzIyXHU5MzIzXHU5MzI0XHU5MzI1XHU5MzI2XHU5MzI3XHU5MzI4XHU5MzI5XHU5'@;
put 'MzJhXHU5MzJiXHU5MzJjXHU5MzJkXHU5MzJlXHU5MzJmXHU5MzMwXHU5MzMxXHU5MzMyXHU5MzMzXHU5MzM0XHU5MzM1XHU5MzM2XHU5MzM3XHU5MzM4XHU5MzM5XHU5MzNhXHU5MzNiXHU5MzNjXHU5MzNkXHU5MzNmXHU5MzQwXHU5MzQxXHU5MzQyXHU5MzQzXHU5MzQ0XHU5MzQ1XHU5MzQ2'@;
put 'XHU5MzQ3XHU5MzQ4XHU5MzQ5XHVmZmZkXHU5MzRhXHU5MzRiXHU5MzRjXHU5MzRkXHU5MzRlXHU5MzRmXHU5MzUwXHU5MzUxXHU5MzUyXHU5MzUzXHU5MzU0XHU5MzU1XHU5MzU2XHU5MzU3XHU5MzU4XHU5MzU5XHU5MzVhXHU5MzViXHU5MzVjXHU5MzVkXHU5MzVlXHU5MzVmXHU5MzYwXHU5'@;
put 'MzYxXHU5MzYyXHU5MzYzXHU5MzY0XHU5MzY1XHU5MzY2XHU5MzY3XHU5MzY4XHU5MzY5XHU5MzZiXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1Yjgw'@;
put 'XHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5'@;
put 'MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4'@;
put 'XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI5XS5sZW5ndGg7'@;
put 'KytnKTY1NTMzIT09eVsyMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI5XVtnXV09NTg2MjQrZyxfWzU4NjI0K2ddPXlbMjI5XVtnXSk7Zm9yKHlbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzZjXHU5MzZkXHU5MzZl'@;
put 'XHU5MzZmXHU5MzcwXHU5MzcxXHU5MzcyXHU5MzczXHU5Mzc0XHU5Mzc1XHU5Mzc2XHU5Mzc3XHU5Mzc4XHU5Mzc5XHU5MzdhXHU5MzdiXHU5MzdjXHU5MzdkXHU5MzdlXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5MzgzXHU5Mzg0XHU5Mzg1XHU5Mzg2XHU5Mzg3XHU5Mzg4XHU5Mzg5XHU5'@;
put 'MzhhXHU5MzhiXHU5MzhjXHU5MzhkXHU5MzhlXHU5MzkwXHU5MzkxXHU5MzkyXHU5MzkzXHU5Mzk0XHU5Mzk1XHU5Mzk2XHU5Mzk3XHU5Mzk4XHU5Mzk5XHU5MzlhXHU5MzliXHU5MzljXHU5MzlkXHU5MzllXHU5MzlmXHU5M2EwXHU5M2ExXHU5M2EyXHU5M2EzXHU5M2E0XHU5M2E1XHU5M2E2'@;
put 'XHU5M2E3XHU5M2E4XHU5M2E5XHU5M2FhXHU5M2FiXHVmZmZkXHU5M2FjXHU5M2FkXHU5M2FlXHU5M2FmXHU5M2IwXHU5M2IxXHU5M2IyXHU5M2IzXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2I3XHU5M2I4XHU5M2I5XHU5M2JhXHU5M2JiXHU5M2JjXHU5M2JkXHU5M2JlXHU5M2JmXHU5M2MwXHU5'@;
put 'M2MxXHU5M2MyXHU5M2MzXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M4XHU5M2M5XHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4'@;
put 'XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1'@;
put 'YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgx'@;
put 'XHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlb'@;
put 'MjMwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjMwXVtnXV09NTg4ODArZyxfWzU4ODgwK2ddPXlbMjMwXVtnXSk7Zm9yKHlbMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2Nl'@;
put 'XHU5M2NmXHU5M2QwXHU5M2QxXHU5M2QyXHU5M2QzXHU5M2Q0XHU5M2Q1XHU5M2Q3XHU5M2Q4XHU5M2Q5XHU5M2RhXHU5M2RiXHU5M2RjXHU5M2RkXHU5M2RlXHU5M2RmXHU5M2UwXHU5M2UxXHU5M2UyXHU5M2UzXHU5M2U0XHU5M2U1XHU5M2U2XHU5M2U3XHU5M2U4XHU5M2U5XHU5M2VhXHU5'@;
put 'M2ViXHU5M2VjXHU5M2VkXHU5M2VlXHU5M2VmXHU5M2YwXHU5M2YxXHU5M2YyXHU5M2YzXHU5M2Y0XHU5M2Y1XHU5M2Y2XHU5M2Y3XHU5M2Y4XHU5M2Y5XHU5M2ZhXHU5M2ZiXHU5M2ZjXHU5M2ZkXHU5M2ZlXHU5M2ZmXHU5NDAwXHU5NDAxXHU5NDAyXHU5NDAzXHU5NDA0XHU5NDA1XHU5NDA2'@;
put 'XHU5NDA3XHU5NDA4XHU5NDA5XHU5NDBhXHU5NDBiXHU5NDBjXHU5NDBkXHVmZmZkXHU5NDBlXHU5NDBmXHU5NDEwXHU5NDExXHU5NDEyXHU5NDEzXHU5NDE0XHU5NDE1XHU5NDE2XHU5NDE3XHU5NDE4XHU5NDE5XHU5NDFhXHU5NDFiXHU5NDFjXHU5NDFkXHU5NDFlXHU5NDFmXHU5NDIwXHU5'@;
put 'NDIxXHU5NDIyXHU5NDIzXHU5NDI0XHU5NDI1XHU5NDI2XHU5NDI3XHU5NDI4XHU5NDI5XHU5NDJhXHU5NDJiXHU5NDJjXHU5NDJkXHU5NDJlXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUw'@;
put 'XHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZiXHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3'@;
put 'ZjIxXHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2Nm'@;
put 'XHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBhXHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgi'@;
put 'IiksZz0wO2chPXlbMjMxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjMxXVtnXV09NTkxMzYrZyxfWzU5MTM2K2ddPXlbMjMxXVtnXSk7Zm9yKHlbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU5NDJmXHU5NDMwXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDM1XHU5NDM2XHU5NDM3XHU5NDM4XHU5NDM5XHU5NDNhXHU5NDNiXHU5NDNjXHU5NDNkXHU5NDNmXHU5NDQwXHU5NDQxXHU5NDQyXHU5NDQzXHU5NDQ0XHU5NDQ1XHU5NDQ2XHU5NDQ3XHU5NDQ4XHU5NDQ5XHU5'@;
put 'NDRhXHU5NDRiXHU5NDRjXHU5NDRkXHU5NDRlXHU5NDRmXHU5NDUwXHU5NDUxXHU5NDUyXHU5NDUzXHU5NDU0XHU5NDU1XHU5NDU2XHU5NDU3XHU5NDU4XHU5NDU5XHU5NDVhXHU5NDViXHU5NDVjXHU5NDVkXHU5NDVlXHU5NDVmXHU5NDYwXHU5NDYxXHU5NDYyXHU5NDYzXHU5NDY0XHU5NDY1'@;
put 'XHU5NDY2XHU5NDY3XHU5NDY4XHU5NDY5XHU5NDZhXHU5NDZjXHU5NDZkXHU5NDZlXHU5NDZmXHVmZmZkXHU5NDcwXHU5NDcxXHU5NDcyXHU5NDczXHU5NDc0XHU5NDc1XHU5NDc2XHU5NDc3XHU5NDc4XHU5NDc5XHU5NDdhXHU5NDdiXHU5NDdjXHU5NDdkXHU5NDdlXHU5NDdmXHU5NDgwXHU5'@;
put 'NDgxXHU5NDgyXHU5NDgzXHU5NDg0XHU5NDkxXHU5NDk2XHU5NDk4XHU5NGM3XHU5NGNmXHU5NGQzXHU5NGQ0XHU5NGRhXHU5NGU2XHU5NGZiXHU5NTFjXHU5NTIwXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhl'@;
put 'XHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2'@;
put 'NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYx'@;
put 'XHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjMyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjMyXVtnXV09NTkzOTIrZyxfWzU5MzkyK2ddPXlbMjMyXVtnXSk7Zm9yKHlbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3XHU5NTc4XHU5NTc5XHU5NTdhXHU5NTdiXHU5NTdjXHU5NTdkXHU5NTdlXHU5NTgwXHU5NTgxXHU5NTgyXHU5NTgzXHU5'@;
put 'NTg0XHU5NTg1XHU5NTg2XHU5NTg3XHU5NTg4XHU5NTg5XHU5NThhXHU5NThiXHU5NThjXHU5NThkXHU5NThlXHU5NThmXHU5NTkwXHU5NTkxXHU5NTkyXHU5NTkzXHU5NTk0XHU5NTk1XHU5NTk2XHU5NTk3XHU5NTk4XHU5NTk5XHU5NTlhXHU5NTliXHU5NTljXHU5NTlkXHU5NTllXHU5NTlm'@;
put 'XHU5NWEwXHU5NWExXHU5NWEyXHU5NWEzXHU5NWE0XHU5NWE1XHU5NWE2XHU5NWE3XHU5NWE4XHU5NWE5XHU5NWFhXHVmZmZkXHU5NWFiXHU5NWFjXHU5NWFkXHU5NWFlXHU5NWFmXHU5NWIwXHU5NWIxXHU5NWIyXHU5NWIzXHU5NWI0XHU5NWI1XHU5NWI2XHU5NWI3XHU5NWI4XHU5NWI5XHU5'@;
put 'NWJhXHU5NWJiXHU5NWJjXHU5NWJkXHU5NWJlXHU5NWJmXHU5NWMwXHU5NWMxXHU5NWMyXHU5NWMzXHU5NWM0XHU5NWM1XHU5NWM2XHU5NWM3XHU5NWM4XHU5NWM5XHU5NWNhXHU5NWNiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYw'@;
put 'XHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2'@;
put 'OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUy'@;
put 'XHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4'@;
put 'Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjMzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjMzXVtnXV09NTk2NDgrZyxfWzU5NjQ4K2ddPXlbMjMzXVtnXSk7Zm9yKHlbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NWNjXHU5NWNkXHU5NWNlXHU5NWNmXHU5NWQwXHU5NWQxXHU5NWQyXHU5NWQzXHU5NWQ0XHU5NWQ1XHU5NWQ2XHU5NWQ3XHU5NWQ4XHU5NWQ5XHU5NWRhXHU5NWRiXHU5NWRjXHU5NWRkXHU5NWRlXHU5NWRmXHU5NWUwXHU5NWUxXHU5'@;
put 'NWUyXHU5NWUzXHU5NWU0XHU5NWU1XHU5NWU2XHU5NWU3XHU5NWVjXHU5NWZmXHU5NjA3XHU5NjEzXHU5NjE4XHU5NjFiXHU5NjFlXHU5NjIwXHU5NjIzXHU5NjI0XHU5NjI1XHU5NjI2XHU5NjI3XHU5NjI4XHU5NjI5XHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4'@;
put 'XHU5NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3XHVmZmZkXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkXHU5NjZlXHU5'@;
put 'NjZmXHU5NjcwXHU5NjcxXHU5NjczXHU5Njc4XHU5Njc5XHU5NjdhXHU5NjdiXHU5NjdjXHU5NjdkXHU5NjdlXHU5NjdmXHU5NjgwXHU5NjgxXHU5NjgyXHU5NjgzXHU5Njg0XHU5Njg3XHU5Njg5XHU5NjhhXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3'@;
put 'XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZmXHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2'@;
put 'NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQw'@;
put 'XHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNiXHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3'@;
put 'MjkyXHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM0XVtnXV09NTk5MDQrZyxfWzU5OTA0K2ddPXlbMjM0XVtnXSk7Zm9yKHlbMjM1XT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjhjXHU5NjhlXHU5NjkxXHU5NjkyXHU5NjkzXHU5Njk1XHU5Njk2XHU5NjlhXHU5NjliXHU5NjlkXHU5NjllXHU5NjlmXHU5NmEwXHU5NmExXHU5NmEyXHU5NmEzXHU5NmE0XHU5NmE1XHU5NmE2XHU5NmE4XHU5'@;
put 'NmE5XHU5NmFhXHU5NmFiXHU5NmFjXHU5NmFkXHU5NmFlXHU5NmFmXHU5NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2XHU5NmQ3XHU5NmQ4'@;
put 'XHU5NmQ5XHU5NmRhXHU5NmRiXHU5NmRjXHU5NmRkXHU5NmRlXHU5NmRmXHU5NmUxXHU5NmUyXHU5NmUzXHU5NmU0XHU5NmU1XHU5NmU2XHU5NmU3XHU5NmViXHVmZmZkXHU5NmVjXHU5NmVkXHU5NmVlXHU5NmYwXHU5NmYxXHU5NmYyXHU5NmY0XHU5NmY1XHU5NmY4XHU5NmZhXHU5NmZiXHU5'@;
put 'NmZjXHU5NmZkXHU5NmZmXHU5NzAyXHU5NzAzXHU5NzA1XHU5NzBhXHU5NzBiXHU5NzBjXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5NzE3XHU5NzE4XHU5NzE5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzFmXHU5NzIwXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZk'@;
put 'XHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4'@;
put 'MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZj'@;
put 'XHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4'@;
put 'MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM1XVtnXV09NjAxNjArZyxfWzYwMTYwK2ddPXlbMjM1XVtnXSk7Zm9yKHlbMjM2XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI0XHU5NzI1XHU5NzI2XHU5NzI3XHU5NzI4XHU5NzI5XHU5NzJiXHU5NzJjXHU5NzJlXHU5NzJmXHU5NzMxXHU5NzMzXHU5NzM0XHU5NzM1XHU5NzM2XHU5'@;
put 'NzM3XHU5NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmXHU5NzQwXHU5NzQxXHU5NzQyXHU5NzQzXHU5NzQ0XHU5NzQ1XHU5NzQ2XHU5NzQ3XHU5NzQ4XHU5NzQ5XHU5NzRhXHU5NzRiXHU5NzRjXHU5NzRkXHU5NzRlXHU5NzRmXHU5NzUwXHU5NzUxXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4'@;
put 'XHU5NzVhXHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3XHU5NzY4XHU5NzZhXHU5NzZiXHU5NzZjXHU5NzZkXHU5NzZlXHU5NzZmXHU5NzcwXHU5NzcxXHVmZmZkXHU5NzcyXHU5Nzc1XHU5Nzc3XHU5Nzc4XHU5Nzc5XHU5NzdhXHU5NzdiXHU5NzdkXHU5NzdlXHU5'@;
put 'NzdmXHU5NzgwXHU5NzgxXHU5NzgyXHU5NzgzXHU5Nzg0XHU5Nzg2XHU5Nzg3XHU5Nzg4XHU5Nzg5XHU5NzhhXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzliXHU5NzljXHU5NzlkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3'@;
put 'XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3'@;
put 'MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUw'@;
put 'XHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3'@;
put 'OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM2XVtnXV09NjA0MTYrZyxfWzYwNDE2K2ddPXlbMjM2XVtnXSk7'@;
put 'Zm9yKHlbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlmXHU5N2ExXHU5N2EyXHU5N2E0XHU5N2E1XHU5N2E2XHU5N2E3XHU5N2E4XHU5N2E5XHU5N2FhXHU5N2FjXHU5N2FlXHU5N2IwXHU5N2IxXHU5N2IzXHU5'@;
put 'N2I1XHU5N2I2XHU5N2I3XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JiXHU5N2JjXHU5N2JkXHU5N2JlXHU5N2JmXHU5N2MwXHU5N2MxXHU5N2MyXHU5N2MzXHU5N2M0XHU5N2M1XHU5N2M2XHU5N2M3XHU5N2M4XHU5N2M5XHU5N2NhXHU5N2NiXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2NmXHU5N2Qw'@;
put 'XHU5N2QxXHU5N2QyXHU5N2QzXHU5N2Q0XHU5N2Q1XHU5N2Q2XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RhXHU5N2RiXHU5N2RjXHU5N2RkXHU5N2RlXHU5N2RmXHU5N2UwXHU5N2UxXHU5N2UyXHU5N2UzXHVmZmZkXHU5N2U0XHU5N2U1XHU5N2U4XHU5N2VlXHU5N2VmXHU5N2YwXHU5N2YxXHU5'@;
put 'N2YyXHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5N2Y5XHU5N2ZhXHU5N2ZiXHU5N2ZjXHU5N2ZkXHU5N2ZlXHU5N2ZmXHU5ODAwXHU5ODAxXHU5ODAyXHU5ODAzXHU5ODA0XHU5ODA1XHU5ODA2XHU5ODA3XHU5ODA4XHU5ODA5XHU5ODBhXHU5ODBiXHU5ODBjXHU5ODBkXHU5ODBlXHU2MDNjXHU2MDVk'@;
put 'XHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3'@;
put 'ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEz'@;
put 'XHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3'@;
put 'NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM3XVtnXV09NjA2NzIrZyxfWzYwNjcyK2dd'@;
put 'PXlbMjM3XVtnXSk7Zm9yKHlbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODBmXHU5ODEwXHU5ODExXHU5ODEyXHU5ODEzXHU5ODE0XHU5ODE1XHU5ODE2XHU5ODE3XHU5ODE4XHU5ODE5XHU5ODFhXHU5ODFiXHU5ODFjXHU5'@;
put 'ODFkXHU5ODFlXHU5ODFmXHU5ODIwXHU5ODIxXHU5ODIyXHU5ODIzXHU5ODI0XHU5ODI1XHU5ODI2XHU5ODI3XHU5ODI4XHU5ODI5XHU5ODJhXHU5ODJiXHU5ODJjXHU5ODJkXHU5ODJlXHU5ODJmXHU5ODMwXHU5ODMxXHU5ODMyXHU5ODMzXHU5ODM0XHU5ODM1XHU5ODM2XHU5ODM3XHU5ODM4'@;
put 'XHU5ODM5XHU5ODNhXHU5ODNiXHU5ODNjXHU5ODNkXHU5ODNlXHU5ODNmXHU5ODQwXHU5ODQxXHU5ODQyXHU5ODQzXHU5ODQ0XHU5ODQ1XHU5ODQ2XHU5ODQ3XHU5ODQ4XHU5ODQ5XHU5ODRhXHU5ODRiXHU5ODRjXHU5ODRkXHVmZmZkXHU5ODRlXHU5ODRmXHU5ODUwXHU5ODUxXHU5ODUyXHU5'@;
put 'ODUzXHU5ODU0XHU5ODU1XHU5ODU2XHU5ODU3XHU5ODU4XHU5ODU5XHU5ODVhXHU5ODViXHU5ODVjXHU5ODVkXHU5ODVlXHU5ODVmXHU5ODYwXHU5ODYxXHU5ODYyXHU5ODYzXHU5ODY0XHU5ODY1XHU5ODY2XHU5ODY3XHU5ODY4XHU5ODY5XHU5ODZhXHU5ODZiXHU5ODZjXHU5ODZkXHU5ODZl'@;
put 'XHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3'@;
put 'Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFk'@;
put 'XHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5'@;
put 'NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM4XVtnXV09NjA5Mjgr'@;
put 'ZyxfWzYwOTI4K2ddPXlbMjM4XVtnXSk7Zm9yKHlbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODZmXHU5ODcwXHU5ODcxXHU5ODcyXHU5ODczXHU5ODc0XHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5'@;
put 'OGE4XHU5OGE5XHU5OGFhXHU5OGFiXHU5OGFjXHU5OGFkXHU5OGFlXHU5OGFmXHU5OGIwXHU5OGIxXHU5OGIyXHU5OGIzXHU5OGI0XHU5OGI1XHU5OGI2XHU5OGI3XHU5OGI4XHU5OGI5XHU5OGJhXHU5OGJiXHU5OGJjXHU5OGJkXHU5OGJlXHU5OGJmXHU5OGMwXHU5OGMxXHU5OGMyXHU5OGMz'@;
put 'XHU5OGM0XHU5OGM1XHU5OGM2XHU5OGM3XHU5OGM4XHU5OGM5XHU5OGNhXHU5OGNiXHU5OGNjXHU5OGNkXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwXHU5OGUxXHU5OGUyXHU5OGUzXHU5OGU0XHVmZmZkXHU5OGU1XHU5OGU2XHU5OGU5XHU5'@;
put 'OGVhXHU5OGViXHU5OGVjXHU5OGVkXHU5OGVlXHU5OGVmXHU5OGYwXHU5OGYxXHU5OGYyXHU5OGYzXHU5OGY0XHU5OGY1XHU5OGY2XHU5OGY3XHU5OGY4XHU5OGY5XHU5OGZhXHU5OGZiXHU5OGZjXHU5OGZkXHU5OGZlXHU5OGZmXHU5OTAwXHU5OTAxXHU5OTAyXHU5OTAzXHU5OTA0XHU5OTA1'@;
put 'XHU5OTA2XHU5OTA3XHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5'@;
put 'NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRl'@;
put 'XHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5'@;
put 'NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM5'@;
put 'XVtnXV09NjExODQrZyxfWzYxMTg0K2ddPXlbMjM5XVtnXSk7Zm9yKHlbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTA4XHU5OTA5XHU5OTBhXHU5OTBiXHU5OTBjXHU5OTBlXHU5OTBmXHU5OTExXHU5OTEyXHU5OTEzXHU5'@;
put 'OTE0XHU5OTE1XHU5OTE2XHU5OTE3XHU5OTE4XHU5OTE5XHU5OTFhXHU5OTFiXHU5OTFjXHU5OTFkXHU5OTFlXHU5OTFmXHU5OTIwXHU5OTIxXHU5OTIyXHU5OTIzXHU5OTI0XHU5OTI1XHU5OTI2XHU5OTI3XHU5OTI4XHU5OTI5XHU5OTJhXHU5OTJiXHU5OTJjXHU5OTJkXHU5OTJmXHU5OTMw'@;
put 'XHU5OTMxXHU5OTMyXHU5OTMzXHU5OTM0XHU5OTM1XHU5OTM2XHU5OTM3XHU5OTM4XHU5OTM5XHU5OTNhXHU5OTNiXHU5OTNjXHU5OTNkXHU5OTNlXHU5OTNmXHU5OTQwXHU5OTQxXHU5OTQyXHU5OTQzXHU5OTQ0XHU5OTQ1XHU5OTQ2XHU5OTQ3XHU5OTQ4XHU5OTQ5XHVmZmZkXHU5OTRhXHU5'@;
put 'OTRiXHU5OTRjXHU5OTRkXHU5OTRlXHU5OTRmXHU5OTUwXHU5OTUxXHU5OTUyXHU5OTUzXHU5OTU2XHU5OTU3XHU5OTU4XHU5OTU5XHU5OTVhXHU5OTViXHU5OTVjXHU5OTVkXHU5OTVlXHU5OTVmXHU5OTYwXHU5OTYxXHU5OTYyXHU5OTY0XHU5OTY2XHU5OTczXHU5OTc4XHU5OTc5XHU5OTdi'@;
put 'XHU5OTdlXHU5OTgyXHU5OTgzXHU5OTg5XHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5'@;
put 'ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5'@;
put 'XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlkXHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3'@;
put 'NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDBdW2ddLmNoYXJDb2RlQXQo'@;
put 'MCkmJihJW3lbMjQwXVtnXV09NjE0NDArZyxfWzYxNDQwK2ddPXlbMjQwXVtnXSk7Zm9yKHlbMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OThjXHU5OThlXHU5OTlhXHU5OTliXHU5OTljXHU5OTlkXHU5OTllXHU5OTlmXHU5'@;
put 'OWEwXHU5OWExXHU5OWEyXHU5OWEzXHU5OWE0XHU5OWE2XHU5OWE3XHU5OWE5XHU5OWFhXHU5OWFiXHU5OWFjXHU5OWFkXHU5OWFlXHU5OWFmXHU5OWIwXHU5OWIxXHU5OWIyXHU5OWIzXHU5OWI0XHU5OWI1XHU5OWI2XHU5OWI3XHU5OWI4XHU5OWI5XHU5OWJhXHU5OWJiXHU5OWJjXHU5OWJk'@;
put 'XHU5OWJlXHU5OWJmXHU5OWMwXHU5OWMxXHU5OWMyXHU5OWMzXHU5OWM0XHU5OWM1XHU5OWM2XHU5OWM3XHU5OWM4XHU5OWM5XHU5OWNhXHU5OWNiXHU5OWNjXHU5OWNkXHU5OWNlXHU5OWNmXHU5OWQwXHU5OWQxXHU5OWQyXHU5OWQzXHU5OWQ0XHU5OWQ1XHU5OWQ2XHU5OWQ3XHU5OWQ4XHVm'@;
put 'ZmZkXHU5OWQ5XHU5OWRhXHU5OWRiXHU5OWRjXHU5OWRkXHU5OWRlXHU5OWRmXHU5OWUwXHU5OWUxXHU5OWUyXHU5OWUzXHU5OWU0XHU5OWU1XHU5OWU2XHU5OWU3XHU5OWU4XHU5OWU5XHU5OWVhXHU5OWViXHU5OWVjXHU5OWVkXHU5OWVlXHU5OWVmXHU5OWYwXHU5OWYxXHU5OWYyXHU5OWYz'@;
put 'XHU5OWY0XHU5OWY1XHU5OWY2XHU5OWY3XHU5OWY4XHU5OWY5XHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3'@;
put 'YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYx'@;
put 'XHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4'@;
put 'MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDFdW2dd'@;
put 'LmNoYXJDb2RlQXQoMCkmJihJW3lbMjQxXVtnXV09NjE2OTYrZyxfWzYxNjk2K2ddPXlbMjQxXVtnXSk7Zm9yKHlbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OWZhXHU5OWZiXHU5OWZjXHU5OWZkXHU5OWZlXHU5OWZmXHU5'@;
put 'YTAwXHU5YTAxXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTA1XHU5YTA2XHU5YTA3XHU5YTA4XHU5YTA5XHU5YTBhXHU5YTBiXHU5YTBjXHU5YTBkXHU5YTBlXHU5YTBmXHU5YTEwXHU5YTExXHU5YTEyXHU5YTEzXHU5YTE0XHU5YTE1XHU5YTE2XHU5YTE3XHU5YTE4XHU5YTE5XHU5YTFhXHU5YTFi'@;
put 'XHU5YTFjXHU5YTFkXHU5YTFlXHU5YTFmXHU5YTIwXHU5YTIxXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI1XHU5YTI2XHU5YTI3XHU5YTI4XHU5YTI5XHU5YTJhXHU5YTJiXHU5YTJjXHU5YTJkXHU5YTJlXHU5YTJmXHU5YTMwXHU5YTMxXHU5YTMyXHU5YTMzXHU5YTM0XHU5YTM1XHU5YTM2XHU5'@;
put 'YTM3XHU5YTM4XHVmZmZkXHU5YTM5XHU5YTNhXHU5YTNiXHU5YTNjXHU5YTNkXHU5YTNlXHU5YTNmXHU5YTQwXHU5YTQxXHU5YTQyXHU5YTQzXHU5YTQ0XHU5YTQ1XHU5YTQ2XHU5YTQ3XHU5YTQ4XHU5YTQ5XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRkXHU5YTRlXHU5YTRmXHU5YTUwXHU5YTUx'@;
put 'XHU5YTUyXHU5YTUzXHU5YTU0XHU5YTU1XHU5YTU2XHU5YTU3XHU5YTU4XHU5YTU5XHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4'@;
put 'NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYz'@;
put 'XHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4'@;
put 'NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQyXS5sZW5ndGg7KytnKTY1NTMz'@;
put 'IT09eVsyNDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQyXVtnXV09NjE5NTIrZyxfWzYxOTUyK2ddPXlbMjQyXVtnXSk7Zm9yKHlbMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YTVhXHU5YTViXHU5YTVjXHU5YTVkXHU5'@;
put 'YTVlXHU5YTVmXHU5YTYwXHU5YTYxXHU5YTYyXHU5YTYzXHU5YTY0XHU5YTY1XHU5YTY2XHU5YTY3XHU5YTY4XHU5YTY5XHU5YTZhXHU5YTZiXHU5YTcyXHU5YTgzXHU5YTg5XHU5YThkXHU5YThlXHU5YTk0XHU5YTk1XHU5YTk5XHU5YWE2XHU5YWE5XHU5YWFhXHU5YWFiXHU5YWFjXHU5YWFk'@;
put 'XHU5YWFlXHU5YWFmXHU5YWIyXHU5YWIzXHU5YWI0XHU5YWI1XHU5YWI5XHU5YWJiXHU5YWJkXHU5YWJlXHU5YWJmXHU5YWMzXHU5YWM0XHU5YWM2XHU5YWM3XHU5YWM4XHU5YWM5XHU5YWNhXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5'@;
put 'YWQ5XHU5YWRhXHU5YWRiXHU5YWRjXHVmZmZkXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVjXHU5YWVlXHU5YWYwXHU5YWYxXHU5YWYyXHU5YWYzXHU5YWY0XHU5YWY1XHU5YWY2XHU5YWY3XHU5YWY4XHU5YWZh'@;
put 'XHU5YWZjXHU5YWZkXHU5YWZlXHU5YWZmXHU5YjAwXHU5YjAxXHU5YjAyXHU5YjA0XHU5YjA1XHU5YjA2XHU4N2M2XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4'@;
put 'N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4'@;
put 'XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3'@;
put 'YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQzXS5sZW5n'@;
put 'dGg7KytnKTY1NTMzIT09eVsyNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQzXVtnXV09NjIyMDgrZyxfWzYyMjA4K2ddPXlbMjQzXVtnXSk7Zm9yKHlbMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjA3XHU5YjA5XHU5'@;
put 'YjBhXHU5YjBiXHU5YjBjXHU5YjBkXHU5YjBlXHU5YjEwXHU5YjExXHU5YjEyXHU5YjE0XHU5YjE1XHU5YjE2XHU5YjE3XHU5YjE4XHU5YjE5XHU5YjFhXHU5YjFiXHU5YjFjXHU5YjFkXHU5YjFlXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0XHU5YjI1XHU5YjI2XHU5YjI3XHU5YjI4XHU5YjI5'@;
put 'XHU5YjJhXHU5YjJiXHU5YjJjXHU5YjJkXHU5YjJlXHU5YjMwXHU5YjMxXHU5YjMzXHU5YjM0XHU5YjM1XHU5YjM2XHU5YjM3XHU5YjM4XHU5YjM5XHU5YjNhXHU5YjNkXHU5YjNlXHU5YjNmXHU5YjQwXHU5YjQ2XHU5YjRhXHU5YjRiXHU5YjRjXHU5YjRlXHU5YjUwXHU5YjUyXHU5YjUzXHU5'@;
put 'YjU1XHU5YjU2XHU5YjU3XHU5YjU4XHU5YjU5XHU5YjVhXHVmZmZkXHU5YjViXHU5YjVjXHU5YjVkXHU5YjVlXHU5YjVmXHU5YjYwXHU5YjYxXHU5YjYyXHU5YjYzXHU5YjY0XHU5YjY1XHU5YjY2XHU5YjY3XHU5YjY4XHU5YjY5XHU5YjZhXHU5YjZiXHU5YjZjXHU5YjZkXHU5YjZlXHU5YjZm'@;
put 'XHU5YjcwXHU5YjcxXHU5YjcyXHU5YjczXHU5Yjc0XHU5Yjc1XHU5Yjc2XHU5Yjc3XHU5Yjc4XHU5Yjc5XHU5YjdhXHU5YjdiXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4'@;
put 'MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIy'@;
put 'XHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3'@;
put 'ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch'@;
put 'PXlbMjQ0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQ0XVtnXV09NjI0NjQrZyxfWzYyNDY0K2ddPXlbMjQ0XVtnXSk7Zm9yKHlbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5'@;
put 'YjdjXHU5YjdkXHU5YjdlXHU5YjdmXHU5YjgwXHU5YjgxXHU5YjgyXHU5YjgzXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3XHU5Yjg4XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhjXHU5YjhkXHU5YjhlXHU5YjhmXHU5YjkwXHU5YjkxXHU5YjkyXHU5YjkzXHU5Yjk0XHU5Yjk1XHU5Yjk2XHU5Yjk3'@;
put 'XHU5Yjk4XHU5Yjk5XHU5YjlhXHU5YjliXHU5YjljXHU5YjlkXHU5YjllXHU5YjlmXHU5YmEwXHU5YmExXHU5YmEyXHU5YmEzXHU5YmE0XHU5YmE1XHU5YmE2XHU5YmE3XHU5YmE4XHU5YmE5XHU5YmFhXHU5YmFiXHU5YmFjXHU5YmFkXHU5YmFlXHU5YmFmXHU5YmIwXHU5YmIxXHU5YmIyXHU5'@;
put 'YmIzXHU5YmI0XHU5YmI1XHU5YmI2XHU5YmI3XHU5YmI4XHU5YmI5XHU5YmJhXHVmZmZkXHU5YmJiXHU5YmJjXHU5YmJkXHU5YmJlXHU5YmJmXHU5YmMwXHU5YmMxXHU5YmMyXHU5YmMzXHU5YmM0XHU5YmM1XHU5YmM2XHU5YmM3XHU5YmM4XHU5YmM5XHU5YmNhXHU5YmNiXHU5YmNjXHU5YmNk'@;
put 'XHU5YmNlXHU5YmNmXHU5YmQwXHU5YmQxXHU5YmQyXHU5YmQzXHU5YmQ0XHU5YmQ1XHU5YmQ2XHU5YmQ3XHU5YmQ4XHU5YmQ5XHU5YmRhXHU5YmRiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5'@;
put 'MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNl'@;
put 'XHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4'@;
put 'ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksZz0wO2chPXlbMjQ1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQ1XVtnXV09NjI3MjArZyxfWzYyNzIwK2ddPXlbMjQ1XVtnXSk7Zm9yKHlbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU5YmRjXHU5YmRkXHU5YmRlXHU5YmRmXHU5YmUwXHU5YmUxXHU5YmUyXHU5YmUzXHU5YmU0XHU5YmU1XHU5YmU2XHU5YmU3XHU5YmU4XHU5YmU5XHU5YmVhXHU5YmViXHU5YmVjXHU5YmVkXHU5YmVlXHU5YmVmXHU5YmYwXHU5YmYxXHU5YmYyXHU5YmYzXHU5YmY0XHU5YmY1'@;
put 'XHU5YmY2XHU5YmY3XHU5YmY4XHU5YmY5XHU5YmZhXHU5YmZiXHU5YmZjXHU5YmZkXHU5YmZlXHU5YmZmXHU5YzAwXHU5YzAxXHU5YzAyXHU5YzAzXHU5YzA0XHU5YzA1XHU5YzA2XHU5YzA3XHU5YzA4XHU5YzA5XHU5YzBhXHU5YzBiXHU5YzBjXHU5YzBkXHU5YzBlXHU5YzBmXHU5YzEwXHU5'@;
put 'YzExXHU5YzEyXHU5YzEzXHU5YzE0XHU5YzE1XHU5YzE2XHU5YzE3XHU5YzE4XHU5YzE5XHU5YzFhXHVmZmZkXHU5YzFiXHU5YzFjXHU5YzFkXHU5YzFlXHU5YzFmXHU5YzIwXHU5YzIxXHU5YzIyXHU5YzIzXHU5YzI0XHU5YzI1XHU5YzI2XHU5YzI3XHU5YzI4XHU5YzI5XHU5YzJhXHU5YzJi'@;
put 'XHU5YzJjXHU5YzJkXHU5YzJlXHU5YzJmXHU5YzMwXHU5YzMxXHU5YzMyXHU5YzMzXHU5YzM0XHU5YzM1XHU5YzM2XHU5YzM3XHU5YzM4XHU5YzM5XHU5YzNhXHU5YzNiXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5'@;
put 'NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFl'@;
put 'XHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5'@;
put 'Y2EyXHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2Ni'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQ2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQ2XVtnXV09NjI5NzYrZyxfWzYyOTc2K2ddPXlbMjQ2XVtnXSk7Zm9yKHlbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YzNjXHU5YzNkXHU5YzNlXHU5YzNmXHU5YzQwXHU5YzQxXHU5YzQyXHU5YzQzXHU5YzQ0XHU5YzQ1XHU5YzQ2XHU5YzQ3XHU5YzQ4XHU5YzQ5XHU5YzRhXHU5YzRiXHU5YzRjXHU5YzRkXHU5YzRlXHU5YzRmXHU5YzUwXHU5YzUxXHU5YzUyXHU5YzUz'@;
put 'XHU5YzU0XHU5YzU1XHU5YzU2XHU5YzU3XHU5YzU4XHU5YzU5XHU5YzVhXHU5YzViXHU5YzVjXHU5YzVkXHU5YzVlXHU5YzVmXHU5YzYwXHU5YzYxXHU5YzYyXHU5YzYzXHU5YzY0XHU5YzY1XHU5YzY2XHU5YzY3XHU5YzY4XHU5YzY5XHU5YzZhXHU5YzZiXHU5YzZjXHU5YzZkXHU5YzZlXHU5'@;
put 'YzZmXHU5YzcwXHU5YzcxXHU5YzcyXHU5YzczXHU5Yzc0XHU5Yzc1XHU5Yzc2XHU5Yzc3XHU5Yzc4XHU5Yzc5XHU5YzdhXHVmZmZkXHU5YzdiXHU5YzdkXHU5YzdlXHU5YzgwXHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2XHU5Yzk3XHU5Yzk4XHU5Yzk5'@;
put 'XHU5YzlkXHU5Y2FhXHU5Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlXHU5Y2JmXHU5Y2MwXHU5Y2MxXHU5Y2MyXHU5Y2M4XHU5Y2M5XHU5Y2QxXHU5Y2QyXHU5Y2RhXHU5Y2RiXHU5Y2UwXHU5Y2UxXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5'@;
put 'Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNi'@;
put 'XHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5'@;
put 'ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNk'@;
put 'XHU5ZjNlXHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQ3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQ3XVtnXV09NjMyMzIrZyxfWzYzMjMyK2ddPXlbMjQ3XVtnXSk7Zm9yKHlbMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2UzXHU5Y2U0XHU5Y2U1XHU5Y2U2XHU5Y2U3XHU5Y2U4XHU5Y2U5XHU5Y2VhXHU5Y2ViXHU5Y2VjXHU5Y2VkXHU5Y2VlXHU5Y2VmXHU5Y2YwXHU5Y2YxXHU5Y2YyXHU5Y2YzXHU5Y2Y0XHU5Y2Y1XHU5Y2Y2XHU5Y2Y3XHU5Y2Y4'@;
put 'XHU5Y2Y5XHU5Y2ZhXHU5Y2ZiXHU5Y2ZjXHU5Y2ZkXHU5Y2ZlXHU5Y2ZmXHU5ZDAwXHU5ZDAxXHU5ZDAyXHU5ZDAzXHU5ZDA0XHU5ZDA1XHU5ZDA2XHU5ZDA3XHU5ZDA4XHU5ZDA5XHU5ZDBhXHU5ZDBiXHU5ZDBjXHU5ZDBkXHU5ZDBlXHU5ZDBmXHU5ZDEwXHU5ZDExXHU5ZDEyXHU5ZDEzXHU5'@;
put 'ZDE0XHU5ZDE1XHU5ZDE2XHU5ZDE3XHU5ZDE4XHU5ZDE5XHU5ZDFhXHU5ZDFiXHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDFmXHU5ZDIwXHU5ZDIxXHVmZmZkXHU5ZDIyXHU5ZDIzXHU5ZDI0XHU5ZDI1XHU5ZDI2XHU5ZDI3XHU5ZDI4XHU5ZDI5XHU5ZDJhXHU5ZDJiXHU5ZDJjXHU5ZDJkXHU5ZDJl'@;
put 'XHU5ZDJmXHU5ZDMwXHU5ZDMxXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDM1XHU5ZDM2XHU5ZDM3XHU5ZDM4XHU5ZDM5XHU5ZDNhXHU5ZDNiXHU5ZDNjXHU5ZDNkXHU5ZDNlXHU5ZDNmXHU5ZDQwXHU5ZDQxXHU5ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQ4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQ4XVtnXV09NjM0ODgrZyxfWzYzNDg4K2ddPXlbMjQ4XVtnXSk7Zm9yKHlbMjQ5XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQzXHU5ZDQ0XHU5ZDQ1XHU5ZDQ2XHU5ZDQ3XHU5ZDQ4XHU5ZDQ5XHU5ZDRhXHU5ZDRiXHU5ZDRjXHU5ZDRkXHU5ZDRlXHU5ZDRmXHU5ZDUwXHU5ZDUxXHU5ZDUyXHU5ZDUzXHU5ZDU0XHU5ZDU1XHU5ZDU2'@;
put 'XHU5ZDU3XHU5ZDU4XHU5ZDU5XHU5ZDVhXHU5ZDViXHU5ZDVjXHU5ZDVkXHU5ZDVlXHU5ZDVmXHU5ZDYwXHU5ZDYxXHU5ZDYyXHU5ZDYzXHU5ZDY0XHU5ZDY1XHU5ZDY2XHU5ZDY3XHU5ZDY4XHU5ZDY5XHU5ZDZhXHU5ZDZiXHU5ZDZjXHU5ZDZkXHU5ZDZlXHU5ZDZmXHU5ZDcwXHU5ZDcxXHU5'@;
put 'ZDcyXHU5ZDczXHU5ZDc0XHU5ZDc1XHU5ZDc2XHU5ZDc3XHU5ZDc4XHU5ZDc5XHU5ZDdhXHU5ZDdiXHU5ZDdjXHU5ZDdkXHU5ZDdlXHU5ZDdmXHU5ZDgwXHU5ZDgxXHVmZmZkXHU5ZDgyXHU5ZDgzXHU5ZDg0XHU5ZDg1XHU5ZDg2XHU5ZDg3XHU5ZDg4XHU5ZDg5XHU5ZDhhXHU5ZDhiXHU5ZDhj'@;
put 'XHU5ZDhkXHU5ZDhlXHU5ZDhmXHU5ZDkwXHU5ZDkxXHU5ZDkyXHU5ZDkzXHU5ZDk0XHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZDk5XHU5ZDlhXHU5ZDliXHU5ZDljXHU5ZDlkXHU5ZDllXHU5ZDlmXHU5ZGEwXHU5ZGExXHU5ZGEyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQ5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQ5XVtnXV09NjM3NDQrZyxfWzYzNzQ0K2ddPXlbMjQ5XVtnXSk7Zm9yKHlbMjUw'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEzXHU5ZGE0XHU5ZGE1XHU5ZGE2XHU5ZGE3XHU5ZGE4XHU5ZGE5XHU5ZGFhXHU5ZGFiXHU5ZGFjXHU5ZGFkXHU5ZGFlXHU5ZGFmXHU5ZGIwXHU5ZGIxXHU5ZGIyXHU5ZGIzXHU5ZGI0'@;
put 'XHU5ZGI1XHU5ZGI2XHU5ZGI3XHU5ZGI4XHU5ZGI5XHU5ZGJhXHU5ZGJiXHU5ZGJjXHU5ZGJkXHU5ZGJlXHU5ZGJmXHU5ZGMwXHU5ZGMxXHU5ZGMyXHU5ZGMzXHU5ZGM0XHU5ZGM1XHU5ZGM2XHU5ZGM3XHU5ZGM4XHU5ZGM5XHU5ZGNhXHU5ZGNiXHU5ZGNjXHU5ZGNkXHU5ZGNlXHU5ZGNmXHU5'@;
put 'ZGQwXHU5ZGQxXHU5ZGQyXHU5ZGQzXHU5ZGQ0XHU5ZGQ1XHU5ZGQ2XHU5ZGQ3XHU5ZGQ4XHU5ZGQ5XHU5ZGRhXHU5ZGRiXHU5ZGRjXHU5ZGRkXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGUxXHVmZmZkXHU5ZGUyXHU5ZGUzXHU5ZGU0XHU5ZGU1XHU5ZGU2XHU5ZGU3XHU5ZGU4XHU5ZGU5XHU5ZGVh'@;
put 'XHU5ZGViXHU5ZGVjXHU5ZGVkXHU5ZGVlXHU5ZGVmXHU5ZGYwXHU5ZGYxXHU5ZGYyXHU5ZGYzXHU5ZGY0XHU5ZGY1XHU5ZGY2XHU5ZGY3XHU5ZGY4XHU5ZGY5XHU5ZGZhXHU5ZGZiXHU5ZGZjXHU5ZGZkXHU5ZGZlXHU5ZGZmXHU5ZTAwXHU5ZTAxXHU5ZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjUwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjUwXVtnXV09NjRlMytnLF9bNjRlMytnXT15WzI1MF1bZ10p'@;
put 'O2Zvcih5WzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWUwM1x1OWUwNFx1OWUwNVx1OWUwNlx1OWUwN1x1OWUwOFx1OWUwOVx1OWUwYVx1OWUwYlx1OWUwY1x1OWUwZFx1OWUwZVx1OWUwZlx1OWUxMFx1OWUxMVx1OWUxMlx1'@;
put 'OWUxM1x1OWUxNFx1OWUxNVx1OWUxNlx1OWUxN1x1OWUxOFx1OWUxOVx1OWUxYVx1OWUxYlx1OWUxY1x1OWUxZFx1OWUxZVx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1'@;
put 'ZFx1OWU1Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NFx1OWU3NVx1OWU3Nlx1OWU3N1x1OWU3OFx1OWU3OVx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU3ZFx1OWU4MFx1ZmZmZFx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1'@;
put 'OWU4Y1x1OWU4ZFx1OWU4ZVx1OWU4Zlx1OWU5MFx1OWU5MVx1OWU5NFx1OWU5NVx1OWU5Nlx1OWU5N1x1OWU5OFx1OWU5OVx1OWU5YVx1OWU5Ylx1OWU5Y1x1OWU5ZVx1OWVhMFx1OWVhMVx1OWVhMlx1OWVhM1x1OWVhNFx1OWVhNVx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYVx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI1MV1bZ11dPTY0MjU2K2csX1s2NDI1Nitn'@;
put 'XT15WzI1MV1bZ10pO2Zvcih5WzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWVhYlx1OWVhY1x1OWVhZFx1OWVhZVx1OWVhZlx1OWViMFx1OWViMVx1OWViMlx1OWViM1x1OWViNVx1OWViNlx1OWViN1x1OWViOVx1OWViYVx1'@;
put 'OWViY1x1OWViZlx1OWVjMFx1OWVjMVx1OWVjMlx1OWVjM1x1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVl'@;
put 'Ylx1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMFx1OWVmMVx1OWVmMlx1OWVmM1x1OWVmNFx1OWVmNVx1OWVmNlx1OWVmN1x1OWVmOFx1OWVmYVx1OWVmZFx1OWVmZlx1OWYwMFx1OWYwMVx1OWYwMlx1OWYwM1x1OWYwNFx1OWYwNVx1ZmZmZFx1OWYwNlx1OWYwN1x1OWYwOFx1OWYwOVx1OWYwYVx1'@;
put 'OWYwY1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYVx1OWYxYlx1OWYxY1x1OWYxZFx1OWYxZVx1OWYxZlx1OWYyMVx1OWYyM1x1OWYyNFx1OWYyNVx1OWYyNlx1OWYyN1x1OWYyOFx1OWYyOVx1OWYyYVx1OWYyYlx1OWYyZFx1OWYyZVx1OWYzMFx1OWYz'@;
put 'MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI1Ml1bZ11dPTY0NTEy'@;
put 'K2csX1s2NDUxMitnXT15WzI1Ml1bZ10pO2Zvcih5WzI1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWYzMlx1OWYzM1x1OWYzNFx1OWYzNVx1OWYzNlx1OWYzOFx1OWYzYVx1OWYzY1x1OWYzZlx1OWY0MFx1OWY0MVx1OWY0Mlx1'@;
put 'OWY0M1x1OWY0NVx1OWY0Nlx1OWY0N1x1OWY0OFx1OWY0OVx1OWY0YVx1OWY0Ylx1OWY0Y1x1OWY0ZFx1OWY0ZVx1OWY0Zlx1OWY1Mlx1OWY1M1x1OWY1NFx1OWY1NVx1OWY1Nlx1OWY1N1x1OWY1OFx1OWY1OVx1OWY1YVx1OWY1Ylx1OWY1Y1x1OWY1ZFx1OWY1ZVx1OWY1Zlx1OWY2MFx1OWY2'@;
put 'MVx1OWY2Mlx1OWY2M1x1OWY2NFx1OWY2NVx1OWY2Nlx1OWY2N1x1OWY2OFx1OWY2OVx1OWY2YVx1OWY2Ylx1OWY2Y1x1OWY2ZFx1OWY2ZVx1OWY2Zlx1OWY3MFx1OWY3MVx1OWY3Mlx1OWY3M1x1OWY3NFx1OWY3NVx1OWY3Nlx1OWY3N1x1OWY3OFx1ZmZmZFx1OWY3OVx1OWY3YVx1OWY3Ylx1'@;
put 'OWY3Y1x1OWY3ZFx1OWY3ZVx1OWY4MVx1OWY4Mlx1OWY4ZFx1OWY4ZVx1OWY4Zlx1OWY5MFx1OWY5MVx1OWY5Mlx1OWY5M1x1OWY5NFx1OWY5NVx1OWY5Nlx1OWY5N1x1OWY5OFx1OWY5Y1x1OWY5ZFx1OWY5ZVx1OWZhMVx1OWZhMlx1OWZhM1x1OWZhNFx1OWZhNVx1ZjkyY1x1Zjk3OVx1Zjk5'@;
put 'NVx1ZjllN1x1ZjlmMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI1M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjUzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI1'@;
put 'M11bZ11dPTY0NzY4K2csX1s2NDc2OCtnXT15WzI1M11bZ10pO2Zvcih5WzI1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1'@;
put 'ZmEyMVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI1NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjU0XVtnXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoSVt5WzI1NF1bZ11dPTY1MDI0K2csX1s2NTAyNCtnXT15WzI1NF1bZ10pO3JldHVybntlbmM6SSxkZWM6X319KCkscVs5NDldPWZ1bmN0aW9uKCl7dmFyIGcsXz1bXSxJPXt9LHk9W107Zm9yKHlbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4'@;
put 'MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8'@;
put 'fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMF1bZ10u'@;
put 'Y2hhckNvZGVBdCgwKSYmKElbeVswXVtnXV09MCtnLF9bMCtnXT15WzBdW2ddKTtmb3IoeVsxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMDJcdWFjMDNcdWFjMDVcdWFjMDZcdWFjMGJcdWFjMGNcdWFjMGRcdWFj'@;
put 'MGVcdWFjMGZcdWFjMThcdWFjMWVcdWFjMWZcdWFjMjFcdWFjMjJcdWFjMjNcdWFjMjVcdWFjMjZcdWFjMjdcdWFjMjhcdWFjMjlcdWFjMmFcdWFjMmJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFjMzVcdWFjMzZcdWFjMzdc'@;
put 'dWFjM2FcdWFjM2JcdWFjM2RcdWFjM2VcdWFjM2ZcdWFjNDFcdWFjNDJcdWFjNDNcdWFjNDRcdWFjNDVcdWFjNDZcdWFjNDdcdWFjNDhcdWFjNDlcdWFjNGFcdWFjNGNcdWFjNGVcdWFjNGZcdWFjNTBcdWFjNTFcdWFjNTJcdWFjNTNcdWFjNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWFjNTZcdWFjNTdcdWFjNTlcdWFjNWFcdWFjNWJcdWFjNWRcdWFjNWVcdWFjNWZcdWFjNjBcdWFjNjFcdWFjNjJcdWFjNjNcdWFjNjRcdWFjNjVcdWFjNjZcdWFjNjdcdWFjNjhcdWFjNjlcdWFjNmFcdWFjNmJcdWFjNmNcdWFjNmRcdWFjNmVcdWFjNmZcdWFjNzJcdWFjNzNc'@;
put 'dWFjNzVcdWFjNzZcdWFjNzlcdWFjN2JcdWFjN2NcdWFjN2RcdWFjN2VcdWFjN2ZcdWFjODJcdWFjODdcdWFjODhcdWFjOGRcdWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFjOTNcdWFjOTVcdWFjOTZcdWFjOTdcdWFjOThcdWFjOTlcdWFjOWFcdWFjOWJcdWFjOWVcdWFjYTJcdWFjYTNcdWFj'@;
put 'YTRcdWFjYTVcdWFjYTZcdWFjYTdcdWFjYWJcdWFjYWRcdWFjYWVcdWFjYjFcdWFjYjJcdWFjYjNcdWFjYjRcdWFjYjVcdWFjYjZcdWFjYjdcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJcdWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFjY2JcdWFjY2RcdWFjY2Vc'@;
put 'dWFjY2ZcdWFjZDBcdWFjZDFcdWFjZDJcdWFjZDNcdWFjZDRcdWFjZDZcdWFjZDhcdWFjZDlcdWFjZGFcdWFjZGJcdWFjZGNcdWFjZGRcdWFjZGVcdWFjZGZcdWFjZTJcdWFjZTNcdWFjZTVcdWFjZTZcdWFjZTlcdWFjZWJcdWFjZWRcdWFjZWVcdWFjZjJcdWFjZjRcdWFjZjdcdWFjZjhcdWFj'@;
put 'ZjlcdWFjZmFcdWFjZmJcdWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJcdWFkMDNcdWFkMDVcdWFkMDdcdWFkMDhcdWFkMDlcdWFkMGFcdWFkMGJcdWFkMGVcdWFkMTBcdWFkMTJcdWFkMTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMjldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEyOV1bZ10u'@;
put 'Y2hhckNvZGVBdCgwKSYmKElbeVsxMjldW2ddXT0zMzAyNCtnLF9bMzMwMjQrZ109eVsxMjldW2ddKTtmb3IoeVsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFk'@;
put 'MWFcdWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjFcdWFkMjJcdWFkMjNcdWFkMjRcdWFkMjVcdWFkMjZcdWFkMjdcdWFkMjhcdWFkMmFcdWFkMmJcdWFkMmVcdWFkMmZcdWFkMzBcdWFkMzFcdWFkMzJcdWFkMzNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMzZc'@;
put 'dWFkMzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2RcdWFkM2VcdWFkM2ZcdWFkNDBcdWFkNDFcdWFkNDJcdWFkNDNcdWFkNDZcdWFkNDhcdWFkNGFcdWFkNGJcdWFkNGNcdWFkNGRcdWFkNGVcdWFkNGZcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTdcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkNTlcdWFkNWFcdWFkNWJcdWFkNWNcdWFkNWRcdWFkNWVcdWFkNWZcdWFkNjBcdWFkNjJcdWFkNjRcdWFkNjVcdWFkNjZcdWFkNjdcdWFkNjhcdWFkNjlcdWFkNmFcdWFkNmJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlc'@;
put 'dWFkN2FcdWFkN2VcdWFkODBcdWFkODNcdWFkODRcdWFkODVcdWFkODZcdWFkODdcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTFcdWFkOTJcdWFkOTNcdWFkOTRcdWFkOTVcdWFkOTZcdWFkOTdcdWFkOThcdWFkOTlcdWFkOWFcdWFkOWJcdWFkOWVcdWFkOWZcdWFkYTBcdWFk'@;
put 'YTFcdWFkYTJcdWFkYTNcdWFkYTVcdWFkYTZcdWFkYTdcdWFkYThcdWFkYTlcdWFkYWFcdWFkYWJcdWFkYWNcdWFkYWRcdWFkYWVcdWFkYWZcdWFkYjBcdWFkYjFcdWFkYjJcdWFkYjNcdWFkYjRcdWFkYjVcdWFkYjZcdWFkYjhcdWFkYjlcdWFkYmFcdWFkYmJcdWFkYmNcdWFkYmRcdWFkYmVc'@;
put 'dWFkYmZcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzlcdWFkY2FcdWFkY2JcdWFkY2NcdWFkY2RcdWFkY2VcdWFkY2ZcdWFkZDJcdWFkZDRcdWFkZDVcdWFkZDZcdWFkZDdcdWFkZDhcdWFkZDlcdWFkZGFcdWFkZGJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFk'@;
put 'ZTNcdWFkZTVcdWFkZTZcdWFkZTdcdWFkZThcdWFkZTlcdWFkZWFcdWFkZWJcdWFkZWNcdWFkZWRcdWFkZWVcdWFkZWZcdWFkZjBcdWFkZjFcdWFkZjJcdWFkZjNcdWFkZjRcdWFkZjVcdWFkZjZcdWFkZjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzBdLmxlbmd0aDsrK2cpNjU1MzMh'@;
put 'PT15WzEzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzBdW2ddXT0zMzI4MCtnLF9bMzMyODArZ109eVsxMzBdW2ddKTtmb3IoeVsxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkZmFcdWFkZmJcdWFkZmRcdWFk'@;
put 'ZmVcdWFlMDJcdWFlMDNcdWFlMDRcdWFlMDVcdWFlMDZcdWFlMDdcdWFlMGFcdWFlMGNcdWFlMGVcdWFlMGZcdWFlMTBcdWFlMTFcdWFlMTJcdWFlMTNcdWFlMTVcdWFlMTZcdWFlMTdcdWFlMThcdWFlMTlcdWFlMWFcdWFlMWJcdWFlMWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWFlMWRcdWFlMWVcdWFlMWZcdWFlMjBcdWFlMjFcdWFlMjJcdWFlMjNcdWFlMjRcdWFlMjVcdWFlMjZcdWFlMjdcdWFlMjhcdWFlMjlcdWFlMmFcdWFlMmJcdWFlMmNcdWFlMmRcdWFlMmVcdWFlMmZcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2NcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFlNDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTdcdWFlNThcdWFlNTlcdWFlNWFcdWFlNWJcdWFlNWVcdWFlNjJcdWFlNjNc'@;
put 'dWFlNjRcdWFlNjZcdWFlNjdcdWFlNmFcdWFlNmJcdWFlNmRcdWFlNmVcdWFlNmZcdWFlNzFcdWFlNzJcdWFlNzNcdWFlNzRcdWFlNzVcdWFlNzZcdWFlNzdcdWFlN2FcdWFlN2VcdWFlN2ZcdWFlODBcdWFlODFcdWFlODJcdWFlODNcdWFlODZcdWFlODdcdWFlODhcdWFlODlcdWFlOGFcdWFl'@;
put 'OGJcdWFlOGRcdWFlOGVcdWFlOGZcdWFlOTBcdWFlOTFcdWFlOTJcdWFlOTNcdWFlOTRcdWFlOTVcdWFlOTZcdWFlOTdcdWFlOThcdWFlOTlcdWFlOWFcdWFlOWJcdWFlOWNcdWFlOWRcdWFlOWVcdWFlOWZcdWFlYTBcdWFlYTFcdWFlYTJcdWFlYTNcdWFlYTRcdWFlYTVcdWFlYTZcdWFlYTdc'@;
put 'dWFlYThcdWFlYTlcdWFlYWFcdWFlYWJcdWFlYWNcdWFlYWRcdWFlYWVcdWFlYWZcdWFlYjBcdWFlYjFcdWFlYjJcdWFlYjNcdWFlYjRcdWFlYjVcdWFlYjZcdWFlYjdcdWFlYjhcdWFlYjlcdWFlYmFcdWFlYmJcdWFlYmZcdWFlYzFcdWFlYzJcdWFlYzNcdWFlYzVcdWFlYzZcdWFlYzdcdWFl'@;
put 'YzhcdWFlYzlcdWFlY2FcdWFlY2JcdWFlY2VcdWFlZDJcdWFlZDNcdWFlZDRcdWFlZDVcdWFlZDZcdWFlZDdcdWFlZGFcdWFlZGJcdWFlZGRcdWFlZGVcdWFlZGZcdWFlZTBcdWFlZTFcdWFlZTJcdWFlZTNcdWFlZTRcdWFlZTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzFdLmxlbmd0'@;
put 'aDsrK2cpNjU1MzMhPT15WzEzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzFdW2ddXT0zMzUzNitnLF9bMzM1MzYrZ109eVsxMzFdW2ddKTtmb3IoeVsxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFlZTZcdWFl'@;
put 'ZTdcdWFlZTlcdWFlZWFcdWFlZWNcdWFlZWVcdWFlZWZcdWFlZjBcdWFlZjFcdWFlZjJcdWFlZjNcdWFlZjVcdWFlZjZcdWFlZjdcdWFlZjlcdWFlZmFcdWFlZmJcdWFlZmRcdWFlZmVcdWFlZmZcdWFmMDBcdWFmMDFcdWFmMDJcdWFmMDNcdWFmMDRcdWFmMDVcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJcdWFmMGNcdWFmMGVcdWFmMGZcdWFmMTFcdWFmMTJcdWFmMTNcdWFmMTRcdWFmMTVcdWFmMTZcdWFmMTdcdWFmMThcdWFmMTlcdWFmMWFcdWFmMWJcdWFmMWNcdWFmMWRcdWFmMWVcdWFmMWZcdWFmMjBcdWFmMjFcdWFm'@;
put 'MjJcdWFmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmMjRcdWFmMjVcdWFmMjZcdWFmMjdcdWFmMjhcdWFmMjlcdWFmMmFcdWFmMmJcdWFmMmVcdWFmMmZcdWFmMzFcdWFmMzNcdWFmMzVcdWFmMzZcdWFmMzdcdWFmMzhcdWFmMzlcdWFmM2FcdWFmM2JcdWFmM2Vc'@;
put 'dWFmNDBcdWFmNDRcdWFmNDVcdWFmNDZcdWFmNDdcdWFmNGFcdWFmNGJcdWFmNGNcdWFmNGRcdWFmNGVcdWFmNGZcdWFmNTFcdWFmNTJcdWFmNTNcdWFmNTRcdWFmNTVcdWFmNTZcdWFmNTdcdWFmNThcdWFmNTlcdWFmNWFcdWFmNWJcdWFmNWVcdWFmNWZcdWFmNjBcdWFmNjFcdWFmNjJcdWFm'@;
put 'NjNcdWFmNjZcdWFmNjdcdWFmNjhcdWFmNjlcdWFmNmFcdWFmNmJcdWFmNmNcdWFmNmRcdWFmNmVcdWFmNmZcdWFmNzBcdWFmNzFcdWFmNzJcdWFmNzNcdWFmNzRcdWFmNzVcdWFmNzZcdWFmNzdcdWFmNzhcdWFmN2FcdWFmN2JcdWFmN2NcdWFmN2RcdWFmN2VcdWFmN2ZcdWFmODFcdWFmODJc'@;
put 'dWFmODNcdWFmODVcdWFmODZcdWFmODdcdWFmODlcdWFmOGFcdWFmOGJcdWFmOGNcdWFmOGRcdWFmOGVcdWFmOGZcdWFmOTJcdWFmOTNcdWFmOTRcdWFmOTZcdWFmOTdcdWFmOThcdWFmOTlcdWFmOWFcdWFmOWJcdWFmOWRcdWFmOWVcdWFmOWZcdWFmYTBcdWFmYTFcdWFmYTJcdWFmYTNcdWFm'@;
put 'YTRcdWFmYTVcdWFmYTZcdWFmYTdcdWFmYThcdWFmYTlcdWFmYWFcdWFmYWJcdWFmYWNcdWFmYWRcdWFmYWVcdWFmYWZcdWFmYjBcdWFmYjFcdWFmYjJcdWFmYjNcdWFmYjRcdWFmYjVcdWFmYjZcdWFmYjdcdWFmYmFcdWFmYmJcdWFmYmRcdWFmYmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9'@;
put 'eVsxMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzJdW2ddXT0zMzc5MitnLF9bMzM3OTIrZ109eVsxMzJdW2ddKTtmb3IoeVsxMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWFmYmZcdWFmYzFcdWFmYzJcdWFmYzNcdWFmYzRcdWFmYzVcdWFmYzZcdWFmY2FcdWFmY2NcdWFmY2ZcdWFmZDBcdWFmZDFcdWFmZDJcdWFmZDNcdWFmZDVcdWFmZDZcdWFmZDdcdWFmZDhcdWFmZDlcdWFmZGFcdWFmZGJcdWFmZGRcdWFmZGVcdWFmZGZcdWFmZTBcdWFmZTFcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmZTJcdWFmZTNcdWFmZTRcdWFmZTVcdWFmZTZcdWFmZTdcdWFmZWFcdWFmZWJcdWFmZWNcdWFmZWRcdWFmZWVcdWFmZWZcdWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFmZjlcdWFmZmFcdWFmZmJcdWFmZmNcdWFmZmRcdWFm'@;
put 'ZmVcdWFmZmZcdWIwMDJcdWIwMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwMDVcdWIwMDZcdWIwMDdcdWIwMDhcdWIwMDlcdWIwMGFcdWIwMGJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTVcdWIwMTZcdWIwMTdcdWIwMThcdWIwMTlc'@;
put 'dWIwMWFcdWIwMWJcdWIwMWVcdWIwMWZcdWIwMjBcdWIwMjFcdWIwMjJcdWIwMjNcdWIwMjRcdWIwMjVcdWIwMjZcdWIwMjdcdWIwMjlcdWIwMmFcdWIwMmJcdWIwMmNcdWIwMmRcdWIwMmVcdWIwMmZcdWIwMzBcdWIwMzFcdWIwMzJcdWIwMzNcdWIwMzRcdWIwMzVcdWIwMzZcdWIwMzdcdWIw'@;
put 'MzhcdWIwMzlcdWIwM2FcdWIwM2JcdWIwM2NcdWIwM2RcdWIwM2VcdWIwM2ZcdWIwNDBcdWIwNDFcdWIwNDJcdWIwNDNcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIwNGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWVcdWIwNWZc'@;
put 'dWIwNjBcdWIwNjFcdWIwNjJcdWIwNjNcdWIwNjRcdWIwNjVcdWIwNjZcdWIwNjdcdWIwNjhcdWIwNjlcdWIwNmFcdWIwNmJcdWIwNmNcdWIwNmRcdWIwNmVcdWIwNmZcdWIwNzBcdWIwNzFcdWIwNzJcdWIwNzNcdWIwNzRcdWIwNzVcdWIwNzZcdWIwNzdcdWIwNzhcdWIwNzlcdWIwN2FcdWIw'@;
put 'N2JcdWIwN2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODVcdWIwODZcdWIwODdcdWIwODhcdWIwODlcdWIwOGFcdWIwOGJcdWIwOGVcdWIwOTBcdWIwOTJcdWIwOTNcdWIwOTRcdWIwOTVcdWIwOTZcdWIwOTdcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTRcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxnPTA7ZyE9eVsxMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzNdW2ddXT0zNDA0OCtnLF9bMzQwNDgrZ109eVsxMzNdW2ddKTtmb3IoeVsxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWIwYTVcdWIwYTZcdWIwYTdcdWIwYWFcdWIwYjBcdWIwYjJcdWIwYjZcdWIwYjdcdWIwYjlcdWIwYmFcdWIwYmJcdWIwYmRcdWIwYmVcdWIwYmZcdWIwYzBcdWIwYzFcdWIwYzJcdWIwYzNcdWIwYzZcdWIwY2FcdWIwY2JcdWIwY2NcdWIwY2RcdWIwY2VcdWIwY2Zc'@;
put 'dWIwZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDlcdWIwZGFcdWIwZGJcdWIwZGNcdWIwZGRcdWIwZGVcdWIwZGZcdWIwZTFcdWIwZTJcdWIwZTNcdWIwZTRcdWIwZTZcdWIwZTdcdWIwZThcdWIwZTlcdWIwZWFcdWIw'@;
put 'ZWJcdWIwZWNcdWIwZWRcdWIwZWVcdWIwZWZcdWIwZjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwZjFcdWIwZjJcdWIwZjNcdWIwZjRcdWIwZjVcdWIwZjZcdWIwZjdcdWIwZjhcdWIwZjlcdWIwZmFcdWIwZmJcdWIwZmNcdWIwZmRcdWIwZmVcdWIwZmZcdWIxMDBc'@;
put 'dWIxMDFcdWIxMDJcdWIxMDNcdWIxMDRcdWIxMDVcdWIxMDZcdWIxMDdcdWIxMGFcdWIxMGRcdWIxMGVcdWIxMGZcdWIxMTFcdWIxMTRcdWIxMTVcdWIxMTZcdWIxMTdcdWIxMWFcdWIxMWVcdWIxMWZcdWIxMjBcdWIxMjFcdWIxMjJcdWIxMjZcdWIxMjdcdWIxMjlcdWIxMmFcdWIxMmJcdWIx'@;
put 'MmRcdWIxMmVcdWIxMmZcdWIxMzBcdWIxMzFcdWIxMzJcdWIxMzNcdWIxMzZcdWIxM2FcdWIxM2JcdWIxM2NcdWIxM2RcdWIxM2VcdWIxM2ZcdWIxNDJcdWIxNDNcdWIxNDVcdWIxNDZcdWIxNDdcdWIxNDlcdWIxNGFcdWIxNGJcdWIxNGNcdWIxNGRcdWIxNGVcdWIxNGZcdWIxNTJcdWIxNTNc'@;
put 'dWIxNTZcdWIxNTdcdWIxNTlcdWIxNWFcdWIxNWJcdWIxNWRcdWIxNWVcdWIxNWZcdWIxNjFcdWIxNjJcdWIxNjNcdWIxNjRcdWIxNjVcdWIxNjZcdWIxNjdcdWIxNjhcdWIxNjlcdWIxNmFcdWIxNmJcdWIxNmNcdWIxNmRcdWIxNmVcdWIxNmZcdWIxNzBcdWIxNzFcdWIxNzJcdWIxNzNcdWIx'@;
put 'NzRcdWIxNzVcdWIxNzZcdWIxNzdcdWIxN2FcdWIxN2JcdWIxN2RcdWIxN2VcdWIxN2ZcdWIxODFcdWIxODNcdWIxODRcdWIxODVcdWIxODZcdWIxODdcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZcdWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWRc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzRdW2ddXT0zNDMwNCtnLF9bMzQzMDQrZ109eVsxMzRdW2ddKTtmb3IoeVsxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxOWVcdWIxOWZcdWIxYTBcdWIxYTFcdWIxYTJcdWIxYTNcdWIxYTRcdWIxYTVcdWIxYTZcdWIxYTdcdWIxYTlcdWIxYWFcdWIxYWJcdWIxYWNcdWIxYWRcdWIxYWVcdWIxYWZcdWIxYjBcdWIxYjFcdWIxYjJcdWIxYjNcdWIxYjRcdWIxYjVc'@;
put 'dWIxYjZcdWIxYjdcdWIxYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxYjlcdWIxYmFcdWIxYmJcdWIxYmNcdWIxYmRcdWIxYmVcdWIxYmZcdWIxYzBcdWIxYzFcdWIxYzJcdWIxYzNcdWIxYzRcdWIxYzVcdWIxYzZcdWIxYzdcdWIxYzhcdWIxYzlcdWIxY2FcdWIx'@;
put 'Y2JcdWIxY2RcdWIxY2VcdWIxY2ZcdWIxZDFcdWIxZDJcdWIxZDNcdWIxZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIxZDZcdWIxZDdcdWIxZDhcdWIxZDlcdWIxZGFcdWIxZGJcdWIxZGVcdWIxZTBcdWIxZTFcdWIxZTJcdWIxZTNcdWIxZTRcdWIxZTVcdWIxZTZc'@;
put 'dWIxZTdcdWIxZWFcdWIxZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjFcdWIxZjJcdWIxZjNcdWIxZjRcdWIxZjVcdWIxZjZcdWIxZjdcdWIxZjhcdWIxZmFcdWIxZmNcdWIxZmVcdWIxZmZcdWIyMDBcdWIyMDFcdWIyMDJcdWIyMDNcdWIyMDZcdWIyMDdcdWIyMDlcdWIyMGFcdWIyMGRcdWIy'@;
put 'MGVcdWIyMGZcdWIyMTBcdWIyMTFcdWIyMTJcdWIyMTNcdWIyMTZcdWIyMThcdWIyMWFcdWIyMWJcdWIyMWNcdWIyMWRcdWIyMWVcdWIyMWZcdWIyMjFcdWIyMjJcdWIyMjNcdWIyMjRcdWIyMjVcdWIyMjZcdWIyMjdcdWIyMjhcdWIyMjlcdWIyMmFcdWIyMmJcdWIyMmNcdWIyMmRcdWIyMmVc'@;
put 'dWIyMmZcdWIyMzBcdWIyMzFcdWIyMzJcdWIyMzNcdWIyMzVcdWIyMzZcdWIyMzdcdWIyMzhcdWIyMzlcdWIyM2FcdWIyM2JcdWIyM2RcdWIyM2VcdWIyM2ZcdWIyNDBcdWIyNDFcdWIyNDJcdWIyNDNcdWIyNDRcdWIyNDVcdWIyNDZcdWIyNDdcdWIyNDhcdWIyNDlcdWIyNGFcdWIyNGJcdWIy'@;
put 'NGNcdWIyNGRcdWIyNGVcdWIyNGZcdWIyNTBcdWIyNTFcdWIyNTJcdWIyNTNcdWIyNTRcdWIyNTVcdWIyNTZcdWIyNTdcdWIyNTlcdWIyNWFcdWIyNWJcdWIyNWRcdWIyNWVcdWIyNWZcdWIyNjFcdWIyNjJcdWIyNjNcdWIyNjRcdWIyNjVcdWIyNjZcdWIyNjdcdWIyNmFcdWIyNmJcdWIyNmNc'@;
put 'dWIyNmRcdWIyNmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzVdW2ddXT0zNDU2MCtnLF9bMzQ1NjArZ109eVsxMzVdW2ddKTtmb3IoeVsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyNmZcdWIyNzBcdWIyNzFcdWIyNzJcdWIyNzNcdWIyNzZcdWIyNzdcdWIyNzhcdWIyNzlcdWIyN2FcdWIyN2JcdWIyN2RcdWIyN2VcdWIyN2ZcdWIyODBcdWIyODFcdWIyODJcdWIyODNcdWIyODZcdWIyODdcdWIyODhc'@;
put 'dWIyOGFcdWIyOGJcdWIyOGNcdWIyOGRcdWIyOGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIyOTdcdWIyOWJcdWIyOWNcdWIyOWRcdWIyOWVcdWIyOWZcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIy'@;
put 'YWJcdWIyYWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyYjhcdWIyYjlcdWIyYmFcdWIyYmJcdWIyYmNcdWIyYmRcdWIyYmVcdWIyYmZcdWIyYzBcdWIyYzFcdWIyYzJcdWIyYzNc'@;
put 'dWIyYzRcdWIyYzVcdWIyYzZcdWIyYzdcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDNcdWIyZDRcdWIyZDVcdWIyZDZcdWIyZDdcdWIyZGFcdWIyZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIy'@;
put 'ZjJcdWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIzMDlcdWIzMGFcdWIzMGJcdWIzMGNcdWIzMGRcdWIzMGVcdWIzMGZcdWIzMTJcdWIzMTZcdWIzMTdcdWIzMThcdWIzMTlcdWIzMWFcdWIzMWJcdWIzMWRcdWIzMWVcdWIzMWZcdWIzMjBc'@;
put 'dWIzMjFcdWIzMjJcdWIzMjNcdWIzMjRcdWIzMjVcdWIzMjZcdWIzMjdcdWIzMjhcdWIzMjlcdWIzMmFcdWIzMmJcdWIzMmNcdWIzMmRcdWIzMmVcdWIzMmZcdWIzMzBcdWIzMzFcdWIzMzJcdWIzMzNcdWIzMzRcdWIzMzVcdWIzMzZcdWIzMzdcdWIzMzhcdWIzMzlcdWIzM2FcdWIzM2JcdWIz'@;
put 'M2NcdWIzM2RcdWIzM2VcdWIzM2ZcdWIzNDBcdWIzNDFcdWIzNDJcdWIzNDNcdWIzNDRcdWIzNDVcdWIzNDZcdWIzNDdcdWIzNDhcdWIzNDlcdWIzNGFcdWIzNGJcdWIzNGNcdWIzNGRcdWIzNGVcdWIzNGZcdWIzNTBcdWIzNTFcdWIzNTJcdWIzNTNcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRc'@;
put 'dWIzNjBcdWIzNjFcdWIzNjJcdWIzNjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzZdW2ddXT0zNDgxNitnLF9bMzQ4MTYrZ109eVsxMzZdW2ddKTtmb3IoeVsxMzddPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIzNzdcdWIzNzlcdWIzN2FcdWIzN2JcdWIzN2NcdWIzN2RcdWIzN2VcdWIzN2ZcdWIzODJc'@;
put 'dWIzODZcdWIzODdcdWIzODhcdWIzODlcdWIzOGFcdWIzOGJcdWIzOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzOGVcdWIzOGZcdWIzOTFcdWIzOTJcdWIzOTNcdWIzOTVcdWIzOTZcdWIzOTdcdWIzOThcdWIzOTlcdWIzOWFcdWIzOWJcdWIzOWNcdWIzOWRcdWIz'@;
put 'OWVcdWIzOWZcdWIzYTJcdWIzYTNcdWIzYTRcdWIzYTVcdWIzYTZcdWIzYTdcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIzYWVcdWIzYWZcdWIzYjBcdWIzYjFcdWIzYjJcdWIzYjNcdWIzYjRcdWIzYjVcdWIzYjZcdWIzYjdc'@;
put 'dWIzYjhcdWIzYjlcdWIzYmFcdWIzYmJcdWIzYmNcdWIzYmRcdWIzYmVcdWIzYmZcdWIzYzBcdWIzYzFcdWIzYzJcdWIzYzNcdWIzYzZcdWIzYzdcdWIzYzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIz'@;
put 'ZTFcdWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTlcdWIzZWFcdWIzZWJcdWIzZWNcdWIzZWRcdWIzZWVcdWIzZWZcdWIzZjBcdWIzZjFcdWIzZjJcdWIzZjNcdWIzZjRcdWIzZjVcdWIzZjZcdWIzZjdcdWIzZjhcdWIzZjlcdWIzZmFcdWIzZmJcdWIzZmRcdWIzZmVcdWIzZmZc'@;
put 'dWI0MDBcdWI0MDFcdWI0MDJcdWI0MDNcdWI0MDRcdWI0MDVcdWI0MDZcdWI0MDdcdWI0MDhcdWI0MDlcdWI0MGFcdWI0MGJcdWI0MGNcdWI0MGRcdWI0MGVcdWI0MGZcdWI0MTFcdWI0MTJcdWI0MTNcdWI0MTRcdWI0MTVcdWI0MTZcdWI0MTdcdWI0MTlcdWI0MWFcdWI0MWJcdWI0MWRcdWI0'@;
put 'MWVcdWI0MWZcdWI0MjFcdWI0MjJcdWI0MjNcdWI0MjRcdWI0MjVcdWI0MjZcdWI0MjdcdWI0MmFcdWI0MmNcdWI0MmRcdWI0MmVcdWI0MmZcdWI0MzBcdWI0MzFcdWI0MzJcdWI0MzNcdWI0MzVcdWI0MzZcdWI0MzdcdWI0MzhcdWI0MzlcdWI0M2FcdWI0M2JcdWI0M2NcdWI0M2RcdWI0M2Vc'@;
put 'dWI0M2ZcdWI0NDBcdWI0NDFcdWI0NDJcdWI0NDNcdWI0NDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzddW2ddXT0zNTA3MitnLF9bMzUwNzIrZ109eVsxMzddW2ddKTtmb3IoeVsxMzhd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NDVcdWI0NDZcdWI0NDdcdWI0NDhcdWI0NDlcdWI0NGFcdWI0NGJcdWI0NGNcdWI0NGRcdWI0NGVcdWI0NGZcdWI0NTJcdWI0NTNcdWI0NTVcdWI0NTZcdWI0NTdcdWI0NTlc'@;
put 'dWI0NWFcdWI0NWJcdWI0NWNcdWI0NWRcdWI0NWVcdWI0NWZcdWI0NjJcdWI0NjRcdWI0NjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0NjdcdWI0NjhcdWI0NjlcdWI0NmFcdWI0NmJcdWI0NmRcdWI0NmVcdWI0NmZcdWI0NzBcdWI0NzFcdWI0NzJcdWI0NzNcdWI0'@;
put 'NzRcdWI0NzVcdWI0NzZcdWI0NzdcdWI0NzhcdWI0NzlcdWI0N2FcdWI0N2JcdWI0N2NcdWI0N2RcdWI0N2VcdWI0N2ZcdWI0ODFcdWI0ODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI0ODNcdWI0ODRcdWI0ODVcdWI0ODZcdWI0ODdcdWI0ODlcdWI0OGFcdWI0OGJc'@;
put 'dWI0OGNcdWI0OGRcdWI0OGVcdWI0OGZcdWI0OTBcdWI0OTFcdWI0OTJcdWI0OTNcdWI0OTRcdWI0OTVcdWI0OTZcdWI0OTdcdWI0OThcdWI0OTlcdWI0OWFcdWI0OWJcdWI0OWNcdWI0OWVcdWI0OWZcdWI0YTBcdWI0YTFcdWI0YTJcdWI0YTNcdWI0YTVcdWI0YTZcdWI0YTdcdWI0YTlcdWI0'@;
put 'YWFcdWI0YWJcdWI0YWRcdWI0YWVcdWI0YWZcdWI0YjBcdWI0YjFcdWI0YjJcdWI0YjNcdWI0YjRcdWI0YjZcdWI0YjhcdWI0YmFcdWI0YmJcdWI0YmNcdWI0YmRcdWI0YmVcdWI0YmZcdWI0YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZcdWI0YzdcdWI0YzlcdWI0Y2FcdWI0Y2JcdWI0Y2Nc'@;
put 'dWI0Y2RcdWI0Y2VcdWI0Y2ZcdWI0ZDFcdWI0ZDJcdWI0ZDNcdWI0ZDRcdWI0ZDZcdWI0ZDdcdWI0ZDhcdWI0ZDlcdWI0ZGFcdWI0ZGJcdWI0ZGVcdWI0ZGZcdWI0ZTFcdWI0ZTJcdWI0ZTVcdWI0ZTdcdWI0ZThcdWI0ZTlcdWI0ZWFcdWI0ZWJcdWI0ZWVcdWI0ZjBcdWI0ZjJcdWI0ZjNcdWI0'@;
put 'ZjRcdWI0ZjVcdWI0ZjZcdWI0ZjdcdWI0ZjlcdWI0ZmFcdWI0ZmJcdWI0ZmNcdWI0ZmRcdWI0ZmVcdWI0ZmZcdWI1MDBcdWI1MDFcdWI1MDJcdWI1MDNcdWI1MDRcdWI1MDVcdWI1MDZcdWI1MDdcdWI1MDhcdWI1MDlcdWI1MGFcdWI1MGJcdWI1MGNcdWI1MGRcdWI1MGVcdWI1MGZcdWI1MTBc'@;
put 'dWI1MTFcdWI1MTJcdWI1MTNcdWI1MTZcdWI1MTdcdWI1MTlcdWI1MWFcdWI1MWRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzhdW2ddXT0zNTMyOCtnLF9bMzUzMjgrZ109eVsxMzhdW2dd'@;
put 'KTtmb3IoeVsxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1MWVcdWI1MWZcdWI1MjBcdWI1MjFcdWI1MjJcdWI1MjNcdWI1MjZcdWI1MmJcdWI1MmNcdWI1MmRcdWI1MmVcdWI1MmZcdWI1MzJcdWI1MzNcdWI1MzVc'@;
put 'dWI1MzZcdWI1MzdcdWI1MzlcdWI1M2FcdWI1M2JcdWI1M2NcdWI1M2RcdWI1M2VcdWI1M2ZcdWI1NDJcdWI1NDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTVcdWI1'@;
put 'NTZcdWI1NTdcdWI1NThcdWI1NTlcdWI1NWFcdWI1NWJcdWI1NWVcdWI1NjJcdWI1NjNcdWI1NjRcdWI1NjVcdWI1NjZcdWI1NjdcdWI1NjhcdWI1NjlcdWI1NmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NmJcdWI1NmNcdWI1NmRcdWI1NmVcdWI1NmZcdWI1NzBc'@;
put 'dWI1NzFcdWI1NzJcdWI1NzNcdWI1NzRcdWI1NzVcdWI1NzZcdWI1NzdcdWI1NzhcdWI1NzlcdWI1N2FcdWI1N2JcdWI1N2NcdWI1N2RcdWI1N2VcdWI1N2ZcdWI1ODBcdWI1ODFcdWI1ODJcdWI1ODNcdWI1ODRcdWI1ODVcdWI1ODZcdWI1ODdcdWI1ODhcdWI1ODlcdWI1OGFcdWI1OGJcdWI1'@;
put 'OGNcdWI1OGRcdWI1OGVcdWI1OGZcdWI1OTBcdWI1OTFcdWI1OTJcdWI1OTNcdWI1OTRcdWI1OTVcdWI1OTZcdWI1OTdcdWI1OThcdWI1OTlcdWI1OWFcdWI1OWJcdWI1OWNcdWI1OWRcdWI1OWVcdWI1OWZcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRc'@;
put 'dWI1YWVcdWI1YWZcdWI1YjJcdWI1YjZcdWI1YjdcdWI1YjhcdWI1YjlcdWI1YmFcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJcdWI1YzNcdWI1YzVcdWI1YzZcdWI1YzdcdWI1YzhcdWI1YzlcdWI1Y2FcdWI1Y2JcdWI1Y2VcdWI1ZDJcdWI1ZDNcdWI1ZDRcdWI1ZDVcdWI1ZDZcdWI1ZDdcdWI1'@;
put 'ZDlcdWI1ZGFcdWI1ZGJcdWI1ZGNcdWI1ZGRcdWI1ZGVcdWI1ZGZcdWI1ZTBcdWI1ZTFcdWI1ZTJcdWI1ZTNcdWI1ZTRcdWI1ZTVcdWI1ZTZcdWI1ZTdcdWI1ZThcdWI1ZTlcdWI1ZWFcdWI1ZWJcdWI1ZWRcdWI1ZWVcdWI1ZWZcdWI1ZjBcdWI1ZjFcdWI1ZjJcdWI1ZjNcdWI1ZjRcdWI1ZjVc'@;
put 'dWI1ZjZcdWI1ZjdcdWI1ZjhcdWI1ZjlcdWI1ZmFcdWI1ZmJcdWI1ZmNcdWI1ZmRcdWI1ZmVcdWI1ZmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzldW2ddXT0zNTU4NCtnLF9bMzU1ODQr'@;
put 'Z109eVsxMzldW2ddKTtmb3IoeVsxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MDBcdWI2MDFcdWI2MDJcdWI2MDNcdWI2MDRcdWI2MDVcdWI2MDZcdWI2MDdcdWI2MDhcdWI2MDlcdWI2MGFcdWI2MGJcdWI2MGNc'@;
put 'dWI2MGRcdWI2MGVcdWI2MGZcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTlcdWI2MWFcdWI2MWJcdWI2MWNcdWI2MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2MWVcdWI2MWZcdWI2MjBcdWI2MjFcdWI2MjJcdWI2MjNcdWI2MjRcdWI2MjZcdWI2'@;
put 'MjdcdWI2MjhcdWI2MjlcdWI2MmFcdWI2MmJcdWI2MmRcdWI2MmVcdWI2MmZcdWI2MzBcdWI2MzFcdWI2MzJcdWI2MzNcdWI2MzVcdWI2MzZcdWI2MzdcdWI2MzhcdWI2MzlcdWI2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2M2JcdWI2M2NcdWI2M2RcdWI2M2Vc'@;
put 'dWI2M2ZcdWI2NDBcdWI2NDFcdWI2NDJcdWI2NDNcdWI2NDRcdWI2NDVcdWI2NDZcdWI2NDdcdWI2NDlcdWI2NGFcdWI2NGJcdWI2NGNcdWI2NGRcdWI2NGVcdWI2NGZcdWI2NTBcdWI2NTFcdWI2NTJcdWI2NTNcdWI2NTRcdWI2NTVcdWI2NTZcdWI2NTdcdWI2NThcdWI2NTlcdWI2NWFcdWI2'@;
put 'NWJcdWI2NWNcdWI2NWRcdWI2NWVcdWI2NWZcdWI2NjBcdWI2NjFcdWI2NjJcdWI2NjNcdWI2NjVcdWI2NjZcdWI2NjdcdWI2NjlcdWI2NmFcdWI2NmJcdWI2NmNcdWI2NmRcdWI2NmVcdWI2NmZcdWI2NzBcdWI2NzFcdWI2NzJcdWI2NzNcdWI2NzRcdWI2NzVcdWI2NzZcdWI2NzdcdWI2Nzhc'@;
put 'dWI2NzlcdWI2N2FcdWI2N2JcdWI2N2NcdWI2N2RcdWI2N2VcdWI2N2ZcdWI2ODBcdWI2ODFcdWI2ODJcdWI2ODNcdWI2ODRcdWI2ODVcdWI2ODZcdWI2ODdcdWI2ODhcdWI2ODlcdWI2OGFcdWI2OGJcdWI2OGNcdWI2OGRcdWI2OGVcdWI2OGZcdWI2OTBcdWI2OTFcdWI2OTJcdWI2OTNcdWI2'@;
put 'OTRcdWI2OTVcdWI2OTZcdWI2OTdcdWI2OThcdWI2OTlcdWI2OWFcdWI2OWJcdWI2OWVcdWI2OWZcdWI2YTFcdWI2YTJcdWI2YTNcdWI2YTVcdWI2YTZcdWI2YTdcdWI2YThcdWI2YTlcdWI2YWFcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjJcdWI2YjNcdWI2YjRcdWI2YjVcdWI2YjZc'@;
put 'dWI2YjdcdWI2YjhcdWI2YjlcdWI2YmFcdWI2YmJcdWI2YmNcdWI2YmRcdWI2YmVcdWI2YmZcdWI2YzBcdWI2YzFcdWI2YzJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDBdW2ddXT0zNTg0'@;
put 'MCtnLF9bMzU4NDArZ109eVsxNDBdW2ddKTtmb3IoeVsxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2YzNcdWI2YzRcdWI2YzVcdWI2YzZcdWI2YzdcdWI2YzhcdWI2YzlcdWI2Y2FcdWI2Y2JcdWI2Y2NcdWI2Y2Rc'@;
put 'dWI2Y2VcdWI2Y2ZcdWI2ZDBcdWI2ZDFcdWI2ZDJcdWI2ZDNcdWI2ZDVcdWI2ZDZcdWI2ZDdcdWI2ZDhcdWI2ZDlcdWI2ZGFcdWI2ZGJcdWI2ZGNcdWI2ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZGVcdWI2ZGZcdWI2ZTBcdWI2ZTFcdWI2ZTJcdWI2ZTNcdWI2'@;
put 'ZTRcdWI2ZTVcdWI2ZTZcdWI2ZTdcdWI2ZThcdWI2ZTlcdWI2ZWFcdWI2ZWJcdWI2ZWNcdWI2ZWRcdWI2ZWVcdWI2ZWZcdWI2ZjFcdWI2ZjJcdWI2ZjNcdWI2ZjVcdWI2ZjZcdWI2ZjdcdWI2ZjlcdWI2ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI2ZmJcdWI2ZmNc'@;
put 'dWI2ZmRcdWI2ZmVcdWI2ZmZcdWI3MDJcdWI3MDNcdWI3MDRcdWI3MDZcdWI3MDdcdWI3MDhcdWI3MDlcdWI3MGFcdWI3MGJcdWI3MGNcdWI3MGRcdWI3MGVcdWI3MGZcdWI3MTBcdWI3MTFcdWI3MTJcdWI3MTNcdWI3MTRcdWI3MTVcdWI3MTZcdWI3MTdcdWI3MThcdWI3MTlcdWI3MWFcdWI3'@;
put 'MWJcdWI3MWNcdWI3MWRcdWI3MWVcdWI3MWZcdWI3MjBcdWI3MjFcdWI3MjJcdWI3MjNcdWI3MjRcdWI3MjVcdWI3MjZcdWI3MjdcdWI3MmFcdWI3MmJcdWI3MmRcdWI3MmVcdWI3MzFcdWI3MzJcdWI3MzNcdWI3MzRcdWI3MzVcdWI3MzZcdWI3MzdcdWI3M2FcdWI3M2NcdWI3M2RcdWI3M2Vc'@;
put 'dWI3M2ZcdWI3NDBcdWI3NDFcdWI3NDJcdWI3NDNcdWI3NDVcdWI3NDZcdWI3NDdcdWI3NDlcdWI3NGFcdWI3NGJcdWI3NGRcdWI3NGVcdWI3NGZcdWI3NTBcdWI3NTFcdWI3NTJcdWI3NTNcdWI3NTZcdWI3NTdcdWI3NThcdWI3NTlcdWI3NWFcdWI3NWJcdWI3NWNcdWI3NWRcdWI3NWVcdWI3'@;
put 'NWZcdWI3NjFcdWI3NjJcdWI3NjNcdWI3NjVcdWI3NjZcdWI3NjdcdWI3NjlcdWI3NmFcdWI3NmJcdWI3NmNcdWI3NmRcdWI3NmVcdWI3NmZcdWI3NzJcdWI3NzRcdWI3NzZcdWI3NzdcdWI3NzhcdWI3NzlcdWI3N2FcdWI3N2JcdWI3N2VcdWI3N2ZcdWI3ODFcdWI3ODJcdWI3ODNcdWI3ODVc'@;
put 'dWI3ODZcdWI3ODdcdWI3ODhcdWI3ODlcdWI3OGFcdWI3OGJcdWI3OGVcdWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3OWJcdWI3OWRcdWI3OWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsx'@;
put 'NDFdW2ddXT0zNjA5NitnLF9bMzYwOTYrZ109eVsxNDFdW2ddKTtmb3IoeVsxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3OWZcdWI3YTFcdWI3YTJcdWI3YTNcdWI3YTRcdWI3YTVcdWI3YTZcdWI3YTdcdWI3YWFc'@;
put 'dWI3YWVcdWI3YWZcdWI3YjBcdWI3YjFcdWI3YjJcdWI3YjNcdWI3YjZcdWI3YjdcdWI3YjlcdWI3YmFcdWI3YmJcdWI3YmNcdWI3YmRcdWI3YmVcdWI3YmZcdWI3YzBcdWI3YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3YzJcdWI3YzNcdWI3YzRcdWI3YzVcdWI3'@;
put 'YzZcdWI3YzhcdWI3Y2FcdWI3Y2JcdWI3Y2NcdWI3Y2RcdWI3Y2VcdWI3Y2ZcdWI3ZDBcdWI3ZDFcdWI3ZDJcdWI3ZDNcdWI3ZDRcdWI3ZDVcdWI3ZDZcdWI3ZDdcdWI3ZDhcdWI3ZDlcdWI3ZGFcdWI3ZGJcdWI3ZGNcdWI3ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWI3ZGVcdWI3ZGZcdWI3ZTBcdWI3ZTFcdWI3ZTJcdWI3ZTNcdWI3ZTRcdWI3ZTVcdWI3ZTZcdWI3ZTdcdWI3ZThcdWI3ZTlcdWI3ZWFcdWI3ZWJcdWI3ZWVcdWI3ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjVcdWI3ZjZcdWI3ZjdcdWI3ZjhcdWI3ZjlcdWI3ZmFcdWI3ZmJcdWI3ZmVcdWI4'@;
put 'MDJcdWI4MDNcdWI4MDRcdWI4MDVcdWI4MDZcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4MGZcdWI4MTFcdWI4MTJcdWI4MTNcdWI4MTRcdWI4MTVcdWI4MTZcdWI4MTdcdWI4MWFcdWI4MWNcdWI4MWVcdWI4MWZcdWI4MjBcdWI4MjFcdWI4MjJcdWI4MjNcdWI4MjZcdWI4MjdcdWI4Mjlc'@;
put 'dWI4MmFcdWI4MmJcdWI4MmRcdWI4MmVcdWI4MmZcdWI4MzBcdWI4MzFcdWI4MzJcdWI4MzNcdWI4MzZcdWI4M2FcdWI4M2JcdWI4M2NcdWI4M2RcdWI4M2VcdWI4M2ZcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDVcdWI4NDZcdWI4NDdcdWI4NDhcdWI4NDlcdWI4NGFcdWI4NGJcdWI4NGNcdWI4'@;
put 'NGRcdWI4NGVcdWI4NGZcdWI4NTBcdWI4NTJcdWI4NTRcdWI4NTVcdWI4NTZcdWI4NTdcdWI4NThcdWI4NTlcdWI4NWFcdWI4NWJcdWI4NWVcdWI4NWZcdWI4NjFcdWI4NjJcdWI4NjNcdWI4NjVcdWI4NjZcdWI4NjdcdWI4NjhcdWI4NjlcdWI4NmFcdWI4NmJcdWI4NmVcdWI4NzBcdWI4NzJc'@;
put 'dWI4NzNcdWI4NzRcdWI4NzVcdWI4NzZcdWI4NzdcdWI4NzlcdWI4N2FcdWI4N2JcdWI4N2RcdWI4N2VcdWI4N2ZcdWI4ODBcdWI4ODFcdWI4ODJcdWI4ODNcdWI4ODRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0Ml1bZ10uY2hhckNvZGVB'@;
put 'dCgwKSYmKElbeVsxNDJdW2ddXT0zNjM1MitnLF9bMzYzNTIrZ109eVsxNDJdW2ddKTtmb3IoeVsxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4ODVcdWI4ODZcdWI4ODdcdWI4ODhcdWI4ODlcdWI4OGFcdWI4OGJc'@;
put 'dWI4OGNcdWI4OGVcdWI4OGZcdWI4OTBcdWI4OTFcdWI4OTJcdWI4OTNcdWI4OTRcdWI4OTVcdWI4OTZcdWI4OTdcdWI4OThcdWI4OTlcdWI4OWFcdWI4OWJcdWI4OWNcdWI4OWRcdWI4OWVcdWI4OWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI4YTBcdWI4YTFcdWI4'@;
put 'YTJcdWI4YTNcdWI4YTRcdWI4YTVcdWI4YTZcdWI4YTdcdWI4YTlcdWI4YWFcdWI4YWJcdWI4YWNcdWI4YWRcdWI4YWVcdWI4YWZcdWI4YjFcdWI4YjJcdWI4YjNcdWI4YjVcdWI4YjZcdWI4YjdcdWI4YjlcdWI4YmFcdWI4YmJcdWI4YmNcdWI4YmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzZcdWI4YzdcdWI4YzhcdWI4YzlcdWI4Y2FcdWI4Y2JcdWI4Y2RcdWI4Y2VcdWI4Y2ZcdWI4ZDFcdWI4ZDJcdWI4ZDNcdWI4ZDVcdWI4ZDZcdWI4ZDdcdWI4ZDhcdWI4ZDlcdWI4ZGFcdWI4ZGJcdWI4ZGNcdWI4ZGVcdWI4'@;
put 'ZTBcdWI4ZTJcdWI4ZTNcdWI4ZTRcdWI4ZTVcdWI4ZTZcdWI4ZTdcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjFcdWI4ZjJcdWI4ZjNcdWI4ZjRcdWI4ZjVcdWI4ZjZcdWI4ZjdcdWI4ZmFcdWI4ZmNcdWI4ZmVcdWI4ZmZcdWI5MDBcdWI5MDFcdWI5MDJcdWI5MDNcdWI5MDVc'@;
put 'dWI5MDZcdWI5MDdcdWI5MDhcdWI5MDlcdWI5MGFcdWI5MGJcdWI5MGNcdWI5MGRcdWI5MGVcdWI5MGZcdWI5MTBcdWI5MTFcdWI5MTJcdWI5MTNcdWI5MTRcdWI5MTVcdWI5MTZcdWI5MTdcdWI5MTlcdWI5MWFcdWI5MWJcdWI5MWNcdWI5MWRcdWI5MWVcdWI5MWZcdWI5MjFcdWI5MjJcdWI5'@;
put 'MjNcdWI5MjRcdWI5MjVcdWI5MjZcdWI5MjdcdWI5MjhcdWI5MjlcdWI5MmFcdWI5MmJcdWI5MmNcdWI5MmRcdWI5MmVcdWI5MmZcdWI5MzBcdWI5MzFcdWI5MzJcdWI5MzNcdWI5MzRcdWI5MzVcdWI5MzZcdWI5MzdcdWI5MzhcdWI5MzlcdWI5M2FcdWI5M2JcdWI5M2VcdWI5M2ZcdWI5NDFc'@;
put 'dWI5NDJcdWI5NDNcdWI5NDVcdWI5NDZcdWI5NDdcdWI5NDhcdWI5NDlcdWI5NGFcdWI5NGJcdWI5NGRcdWI5NGVcdWI5NTBcdWI5NTJcdWI5NTNcdWI5NTRcdWI5NTVcdWI5NTZcdWI5NTdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0M11b'@;
put 'Z10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDNdW2ddXT0zNjYwOCtnLF9bMzY2MDgrZ109eVsxNDNdW2ddKTtmb3IoeVsxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5NWFcdWI5NWJcdWI5NWRcdWI5NWVcdWI5NWZc'@;
put 'dWI5NjFcdWI5NjJcdWI5NjNcdWI5NjRcdWI5NjVcdWI5NjZcdWI5NjdcdWI5NmFcdWI5NmNcdWI5NmVcdWI5NmZcdWI5NzBcdWI5NzFcdWI5NzJcdWI5NzNcdWI5NzZcdWI5NzdcdWI5NzlcdWI5N2FcdWI5N2JcdWI5N2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5'@;
put 'N2VcdWI5N2ZcdWI5ODBcdWI5ODFcdWI5ODJcdWI5ODNcdWI5ODZcdWI5ODhcdWI5OGJcdWI5OGNcdWI5OGZcdWI5OTBcdWI5OTFcdWI5OTJcdWI5OTNcdWI5OTRcdWI5OTVcdWI5OTZcdWI5OTdcdWI5OThcdWI5OTlcdWI5OWFcdWI5OWJcdWI5OWNcdWI5OWRcdWI5OWVcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI5OWZcdWI5YTBcdWI5YTFcdWI5YTJcdWI5YTNcdWI5YTRcdWI5YTVcdWI5YTZcdWI5YTdcdWI5YThcdWI5YTlcdWI5YWFcdWI5YWJcdWI5YWVcdWI5YWZcdWI5YjFcdWI5YjJcdWI5YjNcdWI5YjVcdWI5YjZcdWI5YjdcdWI5YjhcdWI5YjlcdWI5'@;
put 'YmFcdWI5YmJcdWI5YmVcdWI5YzBcdWI5YzJcdWI5YzNcdWI5YzRcdWI5YzVcdWI5YzZcdWI5YzdcdWI5Y2FcdWI5Y2JcdWI5Y2RcdWI5ZDNcdWI5ZDRcdWI5ZDVcdWI5ZDZcdWI5ZDdcdWI5ZGFcdWI5ZGNcdWI5ZGZcdWI5ZTBcdWI5ZTJcdWI5ZTZcdWI5ZTdcdWI5ZTlcdWI5ZWFcdWI5ZWJc'@;
put 'dWI5ZWRcdWI5ZWVcdWI5ZWZcdWI5ZjBcdWI5ZjFcdWI5ZjJcdWI5ZjNcdWI5ZjZcdWI5ZmJcdWI5ZmNcdWI5ZmRcdWI5ZmVcdWI5ZmZcdWJhMDJcdWJhMDNcdWJhMDRcdWJhMDVcdWJhMDZcdWJhMDdcdWJhMDlcdWJhMGFcdWJhMGJcdWJhMGNcdWJhMGRcdWJhMGVcdWJhMGZcdWJhMTBcdWJh'@;
put 'MTFcdWJhMTJcdWJhMTNcdWJhMTRcdWJhMTZcdWJhMTdcdWJhMThcdWJhMTlcdWJhMWFcdWJhMWJcdWJhMWNcdWJhMWRcdWJhMWVcdWJhMWZcdWJhMjBcdWJhMjFcdWJhMjJcdWJhMjNcdWJhMjRcdWJhMjVcdWJhMjZcdWJhMjdcdWJhMjhcdWJhMjlcdWJhMmFcdWJhMmJcdWJhMmNcdWJhMmRc'@;
put 'dWJhMmVcdWJhMmZcdWJhMzBcdWJhMzFcdWJhMzJcdWJhMzNcdWJhMzRcdWJhMzVcdWJhMzZcdWJhMzdcdWJhM2FcdWJhM2JcdWJhM2RcdWJhM2VcdWJhM2ZcdWJhNDFcdWJhNDNcdWJhNDRcdWJhNDVcdWJhNDZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDRdLmxlbmd0aDsrK2cpNjU1'@;
put 'MzMhPT15WzE0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDRdW2ddXT0zNjg2NCtnLF9bMzY4NjQrZ109eVsxNDRdW2ddKTtmb3IoeVsxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNDdcdWJhNGFcdWJhNGNc'@;
put 'dWJhNGZcdWJhNTBcdWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWRcdWJhNWVcdWJhNWZcdWJhNjBcdWJhNjFcdWJhNjJcdWJhNjNcdWJhNjZcdWJhNmFcdWJhNmJcdWJhNmNcdWJhNmRcdWJhNmVcdWJhNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzlcdWJhN2FcdWJhN2JcdWJhN2NcdWJhN2RcdWJhN2VcdWJhN2ZcdWJhODBcdWJhODFcdWJhODJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGRcdWJhOGVcdWJhOGZcdWJhOTBcdWJhOTFcdWJhOTJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhOTNcdWJhOTRcdWJhOTVcdWJhOTZcdWJhOTdcdWJhOThcdWJhOTlcdWJhOWFcdWJhOWJcdWJhOWNcdWJhOWRcdWJhOWVcdWJhOWZcdWJhYTBcdWJhYTFcdWJhYTJcdWJhYTNcdWJhYTRcdWJhYTVcdWJhYTZcdWJhYTdcdWJh'@;
put 'YWFcdWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjNcdWJhYjRcdWJhYjVcdWJhYjZcdWJhYjdcdWJhYmFcdWJhYmNcdWJhYmVcdWJhYmZcdWJhYzBcdWJhYzFcdWJhYzJcdWJhYzNcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzlcdWJhY2FcdWJhY2JcdWJhY2NcdWJhY2RcdWJhY2VcdWJhY2Zc'@;
put 'dWJhZDBcdWJhZDFcdWJhZDJcdWJhZDNcdWJhZDRcdWJhZDVcdWJhZDZcdWJhZDdcdWJhZGFcdWJhZGJcdWJhZGNcdWJhZGRcdWJhZGVcdWJhZGZcdWJhZTBcdWJhZTFcdWJhZTJcdWJhZTNcdWJhZTRcdWJhZTVcdWJhZTZcdWJhZTdcdWJhZThcdWJhZTlcdWJhZWFcdWJhZWJcdWJhZWNcdWJh'@;
put 'ZWRcdWJhZWVcdWJhZWZcdWJhZjBcdWJhZjFcdWJhZjJcdWJhZjNcdWJhZjRcdWJhZjVcdWJhZjZcdWJhZjdcdWJhZjhcdWJhZjlcdWJhZmFcdWJhZmJcdWJhZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDVcdWJiMDZcdWJiMDdcdWJiMDhcdWJiMDlcdWJiMGFcdWJiMGJc'@;
put 'dWJiMGNcdWJiMGVcdWJiMTBcdWJiMTJcdWJiMTNcdWJiMTRcdWJiMTVcdWJiMTZcdWJiMTdcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZcdWJiMjFcdWJiMjJcdWJiMjNcdWJiMjRcdWJiMjVcdWJiMjZcdWJiMjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDVdLmxl'@;
put 'bmd0aDsrK2cpNjU1MzMhPT15WzE0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDVdW2ddXT0zNzEyMCtnLF9bMzcxMjArZ109eVsxNDVdW2ddKTtmb3IoeVsxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiMjhc'@;
put 'dWJiMmFcdWJiMmNcdWJiMmRcdWJiMmVcdWJiMmZcdWJiMzBcdWJiMzFcdWJiMzJcdWJiMzNcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2ZcdWJiNDBcdWJiNDFcdWJiNDJcdWJiNDNcdWJiNDZcdWJiNDhcdWJiNGFcdWJiNGJcdWJiNGNcdWJiNGVcdWJiNTFcdWJiNTJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNTNcdWJiNTVcdWJiNTZcdWJiNTdcdWJiNTlcdWJiNWFcdWJiNWJcdWJiNWNcdWJiNWRcdWJiNWVcdWJiNWZcdWJiNjBcdWJiNjJcdWJiNjRcdWJiNjVcdWJiNjZcdWJiNjdcdWJiNjhcdWJiNjlcdWJiNmFcdWJiNmJcdWJiNmRcdWJiNmVcdWJiNmZc'@;
put 'dWJiNzBcdWJiNzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJiNzJcdWJiNzNcdWJiNzRcdWJiNzVcdWJiNzZcdWJiNzdcdWJiNzhcdWJiNzlcdWJiN2FcdWJiN2JcdWJiN2NcdWJiN2RcdWJiN2VcdWJiN2ZcdWJiODBcdWJiODFcdWJiODJcdWJiODNcdWJiODRcdWJi'@;
put 'ODVcdWJiODZcdWJiODdcdWJiODlcdWJiOGFcdWJiOGJcdWJiOGRcdWJiOGVcdWJiOGZcdWJiOTFcdWJiOTJcdWJiOTNcdWJiOTRcdWJiOTVcdWJiOTZcdWJiOTdcdWJiOThcdWJiOTlcdWJiOWFcdWJiOWJcdWJiOWNcdWJiOWRcdWJiOWVcdWJiOWZcdWJiYTBcdWJiYTFcdWJiYTJcdWJiYTNc'@;
put 'dWJiYTVcdWJiYTZcdWJiYTdcdWJiYTlcdWJiYWFcdWJiYWJcdWJiYWRcdWJiYWVcdWJiYWZcdWJiYjBcdWJiYjFcdWJiYjJcdWJiYjNcdWJiYjVcdWJiYjZcdWJiYjhcdWJiYjlcdWJiYmFcdWJiYmJcdWJiYmNcdWJiYmRcdWJiYmVcdWJiYmZcdWJiYzFcdWJiYzJcdWJiYzNcdWJiYzVcdWJi'@;
put 'YzZcdWJiYzdcdWJiYzlcdWJiY2FcdWJiY2JcdWJiY2NcdWJiY2RcdWJiY2VcdWJiY2ZcdWJiZDFcdWJiZDJcdWJiZDRcdWJiZDVcdWJiZDZcdWJiZDdcdWJiZDhcdWJiZDlcdWJiZGFcdWJiZGJcdWJiZGNcdWJiZGRcdWJiZGVcdWJiZGZcdWJiZTBcdWJiZTFcdWJiZTJcdWJiZTNcdWJiZTRc'@;
put 'dWJiZTVcdWJiZTZcdWJiZTdcdWJiZThcdWJiZTlcdWJiZWFcdWJiZWJcdWJiZWNcdWJiZWRcdWJiZWVcdWJiZWZcdWJiZjBcdWJiZjFcdWJiZjJcdWJiZjNcdWJiZjRcdWJiZjVcdWJiZjZcdWJiZjdcdWJiZmFcdWJiZmJcdWJiZmRcdWJiZmVcdWJjMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7'@;
put 'ZyE9eVsxNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDZdW2ddXT0zNzM3NitnLF9bMzczNzYrZ109eVsxNDZdW2ddKTtmb3IoeVsxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWJjMDNcdWJjMDRcdWJjMDVcdWJjMDZcdWJjMDdcdWJjMGFcdWJjMGVcdWJjMTBcdWJjMTJcdWJjMTNcdWJjMTlcdWJjMWFcdWJjMjBcdWJjMjFcdWJjMjJcdWJjMjNcdWJjMjZcdWJjMjhcdWJjMmFcdWJjMmJcdWJjMmNcdWJjMmVcdWJjMmZcdWJjMzJcdWJjMzNcdWJjMzVcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjMzZcdWJjMzdcdWJjMzlcdWJjM2FcdWJjM2JcdWJjM2NcdWJjM2RcdWJjM2VcdWJjM2ZcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFcdWJjNGJcdWJjNGVcdWJjNGZcdWJjNTFcdWJjNTJcdWJjNTNcdWJjNTRcdWJjNTVc'@;
put 'dWJjNTZcdWJjNTdcdWJjNThcdWJjNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjNWFcdWJjNWJcdWJjNWNcdWJjNWVcdWJjNWZcdWJjNjBcdWJjNjFcdWJjNjJcdWJjNjNcdWJjNjRcdWJjNjVcdWJjNjZcdWJjNjdcdWJjNjhcdWJjNjlcdWJjNmFcdWJjNmJcdWJj'@;
put 'NmNcdWJjNmRcdWJjNmVcdWJjNmZcdWJjNzBcdWJjNzFcdWJjNzJcdWJjNzNcdWJjNzRcdWJjNzVcdWJjNzZcdWJjNzdcdWJjNzhcdWJjNzlcdWJjN2FcdWJjN2JcdWJjN2NcdWJjN2RcdWJjN2VcdWJjN2ZcdWJjODBcdWJjODFcdWJjODJcdWJjODNcdWJjODZcdWJjODdcdWJjODlcdWJjOGFc'@;
put 'dWJjOGRcdWJjOGZcdWJjOTBcdWJjOTFcdWJjOTJcdWJjOTNcdWJjOTZcdWJjOThcdWJjOWJcdWJjOWNcdWJjOWRcdWJjOWVcdWJjOWZcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTlcdWJjYWFcdWJjYWJcdWJjYWNcdWJjYWRcdWJjYWVcdWJjYWZcdWJjYjJcdWJjYjZcdWJjYjdcdWJj'@;
put 'YjhcdWJjYjlcdWJjYmFcdWJjYmJcdWJjYmVcdWJjYmZcdWJjYzFcdWJjYzJcdWJjYzNcdWJjYzVcdWJjYzZcdWJjYzdcdWJjYzhcdWJjYzlcdWJjY2FcdWJjY2JcdWJjY2NcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFcdWJjZGJcdWJjZGRcdWJjZGVc'@;
put 'dWJjZGZcdWJjZTBcdWJjZTFcdWJjZTJcdWJjZTNcdWJjZTRcdWJjZTVcdWJjZTZcdWJjZTdcdWJjZThcdWJjZTlcdWJjZWFcdWJjZWJcdWJjZWNcdWJjZWRcdWJjZWVcdWJjZWZcdWJjZjBcdWJjZjFcdWJjZjJcdWJjZjNcdWJjZjdcdWJjZjlcdWJjZmFcdWJjZmJcdWJjZmRcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxnPTA7ZyE9eVsxNDddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDddW2ddXT0zNzYzMitnLF9bMzc2MzIrZ109eVsxNDddW2ddKTtmb3IoeVsxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWJjZmVcdWJjZmZcdWJkMDBcdWJkMDFcdWJkMDJcdWJkMDNcdWJkMDZcdWJkMDhcdWJkMGFcdWJkMGJcdWJkMGNcdWJkMGRcdWJkMGVcdWJkMGZcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTVcdWJkMTZcdWJkMTdcdWJkMThcdWJkMTlcdWJkMWFcdWJkMWJcdWJk'@;
put 'MWNcdWJkMWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkMWVcdWJkMWZcdWJkMjBcdWJkMjFcdWJkMjJcdWJkMjNcdWJkMjVcdWJkMjZcdWJkMjdcdWJkMjhcdWJkMjlcdWJkMmFcdWJkMmJcdWJkMmRcdWJkMmVcdWJkMmZcdWJkMzBcdWJkMzFcdWJkMzJcdWJkMzNc'@;
put 'dWJkMzRcdWJkMzVcdWJkMzZcdWJkMzdcdWJkMzhcdWJkMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkM2FcdWJkM2JcdWJkM2NcdWJkM2RcdWJkM2VcdWJkM2ZcdWJkNDFcdWJkNDJcdWJkNDNcdWJkNDRcdWJkNDVcdWJkNDZcdWJkNDdcdWJkNGFcdWJkNGJcdWJk'@;
put 'NGRcdWJkNGVcdWJkNGZcdWJkNTFcdWJkNTJcdWJkNTNcdWJkNTRcdWJkNTVcdWJkNTZcdWJkNTdcdWJkNWFcdWJkNWJcdWJkNWNcdWJkNWRcdWJkNWVcdWJkNWZcdWJkNjBcdWJkNjFcdWJkNjJcdWJkNjNcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjlcdWJkNmFcdWJkNmJcdWJkNmNcdWJkNmRc'@;
put 'dWJkNmVcdWJkNmZcdWJkNzBcdWJkNzFcdWJkNzJcdWJkNzNcdWJkNzRcdWJkNzVcdWJkNzZcdWJkNzdcdWJkNzhcdWJkNzlcdWJkN2FcdWJkN2JcdWJkN2NcdWJkN2RcdWJkN2VcdWJkN2ZcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGJcdWJkOGNcdWJkOGRcdWJkOGVcdWJkOGZcdWJk'@;
put 'OTJcdWJkOTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWRcdWJkOWVcdWJkOWZcdWJkYTBcdWJkYTFcdWJkYTJcdWJkYTNcdWJkYTVcdWJkYTZcdWJkYTdcdWJkYThcdWJkYTlcdWJkYWFcdWJkYWJcdWJkYWNcdWJkYWRcdWJkYWVcdWJkYWZcdWJkYjFcdWJkYjJcdWJkYjNcdWJkYjRc'@;
put 'dWJkYjVcdWJkYjZcdWJkYjdcdWJkYjlcdWJkYmFcdWJkYmJcdWJkYmNcdWJkYmRcdWJkYmVcdWJkYmZcdWJkYzBcdWJkYzFcdWJkYzJcdWJkYzNcdWJkYzRcdWJkYzVcdWJkYzZcdWJkYzdcdWJkYzhcdWJkYzlcdWJkY2FcdWJkY2JcdWJkY2NcdWJkY2RcdWJkY2VcdWJkY2ZcdWJkZDBcdWJk'@;
put 'ZDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDhdW2ddXT0zNzg4OCtnLF9bMzc4ODgrZ109eVsxNDhdW2ddKTtmb3IoeVsxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZDJcdWJkZDNcdWJkZDZcdWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGRcdWJkZGVcdWJkZGZcdWJkZTBcdWJkZTFcdWJkZTJcdWJkZTNcdWJkZTRcdWJkZTVcdWJkZTZcdWJkZTdcdWJkZThcdWJkZWFcdWJkZWJcdWJkZWNcdWJk'@;
put 'ZWRcdWJkZWVcdWJkZWZcdWJkZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkZjJcdWJkZjNcdWJkZjVcdWJkZjZcdWJkZjdcdWJkZjlcdWJkZmFcdWJkZmJcdWJkZmNcdWJkZmRcdWJkZmVcdWJkZmZcdWJlMDFcdWJlMDJcdWJlMDRcdWJlMDZcdWJlMDdcdWJlMDhc'@;
put 'dWJlMDlcdWJlMGFcdWJlMGJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlMTVcdWJlMTZcdWJlMTdcdWJlMThcdWJlMTlcdWJlMWFcdWJlMWJcdWJlMWVcdWJlMjBcdWJlMjFcdWJlMjJcdWJlMjNcdWJlMjRcdWJl'@;
put 'MjVcdWJlMjZcdWJlMjdcdWJlMjhcdWJlMjlcdWJlMmFcdWJlMmJcdWJlMmNcdWJlMmRcdWJlMmVcdWJlMmZcdWJlMzBcdWJlMzFcdWJlMzJcdWJlMzNcdWJlMzRcdWJlMzVcdWJlMzZcdWJlMzdcdWJlMzhcdWJlMzlcdWJlM2FcdWJlM2JcdWJlM2NcdWJlM2RcdWJlM2VcdWJlM2ZcdWJlNDBc'@;
put 'dWJlNDFcdWJlNDJcdWJlNDNcdWJlNDZcdWJlNDdcdWJlNDlcdWJlNGFcdWJlNGJcdWJlNGRcdWJlNGZcdWJlNTBcdWJlNTFcdWJlNTJcdWJlNTNcdWJlNTZcdWJlNThcdWJlNWNcdWJlNWRcdWJlNWVcdWJlNWZcdWJlNjJcdWJlNjNcdWJlNjVcdWJlNjZcdWJlNjdcdWJlNjlcdWJlNmJcdWJl'@;
put 'NmNcdWJlNmRcdWJlNmVcdWJlNmZcdWJlNzJcdWJlNzZcdWJlNzdcdWJlNzhcdWJlNzlcdWJlN2FcdWJlN2VcdWJlN2ZcdWJlODFcdWJlODJcdWJlODNcdWJlODVcdWJlODZcdWJlODdcdWJlODhcdWJlODlcdWJlOGFcdWJlOGJcdWJlOGVcdWJlOTJcdWJlOTNcdWJlOTRcdWJlOTVcdWJlOTZc'@;
put 'dWJlOTdcdWJlOWFcdWJlOWJcdWJlOWNcdWJlOWRcdWJlOWVcdWJlOWZcdWJlYTBcdWJlYTFcdWJlYTJcdWJlYTNcdWJlYTRcdWJlYTVcdWJlYTZcdWJlYTdcdWJlYTlcdWJlYWFcdWJlYWJcdWJlYWNcdWJlYWRcdWJlYWVcdWJlYWZcdWJlYjBcdWJlYjFcdWJlYjJcdWJlYjNcdWJlYjRcdWJl'@;
put 'YjVcdWJlYjZcdWJlYjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDldW2ddXT0zODE0NCtnLF9bMzgxNDQrZ109eVsxNDldW2ddKTtmb3IoeVsxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlYjhcdWJlYjlcdWJlYmFcdWJlYmJcdWJlYmNcdWJlYmRcdWJlYmVcdWJlYmZcdWJlYzBcdWJlYzFcdWJlYzJcdWJlYzNcdWJlYzRcdWJlYzVcdWJlYzZcdWJlYzdcdWJlYzhcdWJlYzlcdWJlY2FcdWJlY2JcdWJl'@;
put 'Y2NcdWJlY2RcdWJlY2VcdWJlY2ZcdWJlZDJcdWJlZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZDVcdWJlZDZcdWJlZDlcdWJlZGFcdWJlZGJcdWJlZGNcdWJlZGRcdWJlZGVcdWJlZGZcdWJlZTFcdWJlZTJcdWJlZTZcdWJlZTdcdWJlZThcdWJlZTlcdWJlZWFc'@;
put 'dWJlZWJcdWJlZWRcdWJlZWVcdWJlZWZcdWJlZjBcdWJlZjFcdWJlZjJcdWJlZjNcdWJlZjRcdWJlZjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJlZjZcdWJlZjdcdWJlZjhcdWJlZjlcdWJlZmFcdWJlZmJcdWJlZmNcdWJlZmRcdWJlZmVcdWJlZmZcdWJmMDBcdWJm'@;
put 'MDJcdWJmMDNcdWJmMDRcdWJmMDVcdWJmMDZcdWJmMDdcdWJmMGFcdWJmMGJcdWJmMGNcdWJmMGRcdWJmMGVcdWJmMGZcdWJmMTBcdWJmMTFcdWJmMTJcdWJmMTNcdWJmMTRcdWJmMTVcdWJmMTZcdWJmMTdcdWJmMWFcdWJmMWVcdWJmMWZcdWJmMjBcdWJmMjFcdWJmMjJcdWJmMjNcdWJmMjRc'@;
put 'dWJmMjVcdWJmMjZcdWJmMjdcdWJmMjhcdWJmMjlcdWJmMmFcdWJmMmJcdWJmMmNcdWJmMmRcdWJmMmVcdWJmMmZcdWJmMzBcdWJmMzFcdWJmMzJcdWJmMzNcdWJmMzRcdWJmMzVcdWJmMzZcdWJmMzdcdWJmMzhcdWJmMzlcdWJmM2FcdWJmM2JcdWJmM2NcdWJmM2RcdWJmM2VcdWJmM2ZcdWJm'@;
put 'NDJcdWJmNDNcdWJmNDVcdWJmNDZcdWJmNDdcdWJmNDlcdWJmNGFcdWJmNGJcdWJmNGNcdWJmNGRcdWJmNGVcdWJmNGZcdWJmNTJcdWJmNTNcdWJmNTRcdWJmNTZcdWJmNTdcdWJmNThcdWJmNTlcdWJmNWFcdWJmNWJcdWJmNWNcdWJmNWRcdWJmNWVcdWJmNWZcdWJmNjBcdWJmNjFcdWJmNjJc'@;
put 'dWJmNjNcdWJmNjRcdWJmNjVcdWJmNjZcdWJmNjdcdWJmNjhcdWJmNjlcdWJmNmFcdWJmNmJcdWJmNmNcdWJmNmRcdWJmNmVcdWJmNmZcdWJmNzBcdWJmNzFcdWJmNzJcdWJmNzNcdWJmNzRcdWJmNzVcdWJmNzZcdWJmNzdcdWJmNzhcdWJmNzlcdWJmN2FcdWJmN2JcdWJmN2NcdWJmN2RcdWJm'@;
put 'N2VcdWJmN2ZcdWJmODBcdWJmODFcdWJmODJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTBdW2ddXT0zODQwMCtnLF9bMzg0MDArZ109eVsxNTBdW2ddKTtmb3IoeVsxNTFdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmODNcdWJmODRcdWJmODVcdWJmODZcdWJmODdcdWJmODhcdWJmODlcdWJmOGFcdWJmOGJcdWJmOGNcdWJmOGRcdWJmOGVcdWJmOGZcdWJmOTBcdWJmOTFcdWJmOTJcdWJmOTNcdWJmOTVcdWJm'@;
put 'OTZcdWJmOTdcdWJmOThcdWJmOTlcdWJmOWFcdWJmOWJcdWJmOWNcdWJmOWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmOWVcdWJmOWZcdWJmYTBcdWJmYTFcdWJmYTJcdWJmYTNcdWJmYTRcdWJmYTVcdWJmYTZcdWJmYTdcdWJmYThcdWJmYTlcdWJmYWFcdWJmYWJc'@;
put 'dWJmYWNcdWJmYWRcdWJmYWVcdWJmYWZcdWJmYjFcdWJmYjJcdWJmYjNcdWJmYjRcdWJmYjVcdWJmYjZcdWJmYjdcdWJmYjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmYjlcdWJmYmFcdWJmYmJcdWJmYmNcdWJmYmRcdWJmYmVcdWJmYmZcdWJmYzBcdWJmYzFcdWJm'@;
put 'YzJcdWJmYzNcdWJmYzRcdWJmYzZcdWJmYzdcdWJmYzhcdWJmYzlcdWJmY2FcdWJmY2JcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJmZDVcdWJmZDZcdWJmZDdcdWJmZDhcdWJmZDlcdWJmZGFcdWJmZGJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTJcdWJmZTNcdWJmZTRcdWJmZTVc'@;
put 'dWJmZTZcdWJmZTdcdWJmZThcdWJmZTlcdWJmZWFcdWJmZWJcdWJmZWNcdWJmZWRcdWJmZWVcdWJmZWZcdWJmZjBcdWJmZjFcdWJmZjJcdWJmZjNcdWJmZjRcdWJmZjVcdWJmZjZcdWJmZjdcdWJmZjhcdWJmZjlcdWJmZmFcdWJmZmJcdWJmZmNcdWJmZmRcdWJmZmVcdWJmZmZcdWMwMDBcdWMw'@;
put 'MDFcdWMwMDJcdWMwMDNcdWMwMDRcdWMwMDVcdWMwMDZcdWMwMDdcdWMwMDhcdWMwMDlcdWMwMGFcdWMwMGJcdWMwMGNcdWMwMGRcdWMwMGVcdWMwMGZcdWMwMTBcdWMwMTFcdWMwMTJcdWMwMTNcdWMwMTRcdWMwMTVcdWMwMTZcdWMwMTdcdWMwMThcdWMwMTlcdWMwMWFcdWMwMWJcdWMwMWNc'@;
put 'dWMwMWRcdWMwMWVcdWMwMWZcdWMwMjBcdWMwMjFcdWMwMjJcdWMwMjNcdWMwMjRcdWMwMjVcdWMwMjZcdWMwMjdcdWMwMjhcdWMwMjlcdWMwMmFcdWMwMmJcdWMwMmNcdWMwMmRcdWMwMmVcdWMwMmZcdWMwMzBcdWMwMzFcdWMwMzJcdWMwMzNcdWMwMzRcdWMwMzVcdWMwMzZcdWMwMzdcdWMw'@;
put 'MzhcdWMwMzlcdWMwM2FcdWMwM2JcdWMwM2RcdWMwM2VcdWMwM2ZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTFdW2ddXT0zODY1NitnLF9bMzg2NTYrZ109eVsxNTFdW2ddKTtmb3IoeVsx'@;
put 'NTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNDBcdWMwNDFcdWMwNDJcdWMwNDNcdWMwNDRcdWMwNDVcdWMwNDZcdWMwNDdcdWMwNDhcdWMwNDlcdWMwNGFcdWMwNGJcdWMwNGNcdWMwNGRcdWMwNGVcdWMwNGZcdWMw'@;
put 'NTBcdWMwNTJcdWMwNTNcdWMwNTRcdWMwNTVcdWMwNTZcdWMwNTdcdWMwNTlcdWMwNWFcdWMwNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwNWRcdWMwNWVcdWMwNWZcdWMwNjFcdWMwNjJcdWMwNjNcdWMwNjRcdWMwNjVcdWMwNjZcdWMwNjdcdWMwNmFcdWMwNmJc'@;
put 'dWMwNmNcdWMwNmRcdWMwNmVcdWMwNmZcdWMwNzBcdWMwNzFcdWMwNzJcdWMwNzNcdWMwNzRcdWMwNzVcdWMwNzZcdWMwNzdcdWMwNzhcdWMwNzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMwN2FcdWMwN2JcdWMwN2NcdWMwN2RcdWMwN2VcdWMwN2ZcdWMwODBcdWMw'@;
put 'ODFcdWMwODJcdWMwODNcdWMwODRcdWMwODVcdWMwODZcdWMwODdcdWMwODhcdWMwODlcdWMwOGFcdWMwOGJcdWMwOGNcdWMwOGRcdWMwOGVcdWMwOGZcdWMwOTJcdWMwOTNcdWMwOTVcdWMwOTZcdWMwOTdcdWMwOTlcdWMwOWFcdWMwOWJcdWMwOWNcdWMwOWRcdWMwOWVcdWMwOWZcdWMwYTJc'@;
put 'dWMwYTRcdWMwYTZcdWMwYTdcdWMwYThcdWMwYTlcdWMwYWFcdWMwYWJcdWMwYWVcdWMwYjFcdWMwYjJcdWMwYjdcdWMwYjhcdWMwYjlcdWMwYmFcdWMwYmJcdWMwYmVcdWMwYzJcdWMwYzNcdWMwYzRcdWMwYzZcdWMwYzdcdWMwY2FcdWMwY2JcdWMwY2RcdWMwY2VcdWMwY2ZcdWMwZDFcdWMw'@;
put 'ZDJcdWMwZDNcdWMwZDRcdWMwZDVcdWMwZDZcdWMwZDdcdWMwZGFcdWMwZGVcdWMwZGZcdWMwZTBcdWMwZTFcdWMwZTJcdWMwZTNcdWMwZTZcdWMwZTdcdWMwZTlcdWMwZWFcdWMwZWJcdWMwZWRcdWMwZWVcdWMwZWZcdWMwZjBcdWMwZjFcdWMwZjJcdWMwZjNcdWMwZjZcdWMwZjhcdWMwZmFc'@;
put 'dWMwZmJcdWMwZmNcdWMwZmRcdWMwZmVcdWMwZmZcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDlcdWMxMGFcdWMxMGJcdWMxMGNcdWMxMGRcdWMxMGVcdWMxMGZcdWMxMTFcdWMxMTJcdWMxMTNcdWMxMTRcdWMxMTZcdWMxMTdcdWMxMThcdWMxMTlcdWMxMWFcdWMx'@;
put 'MWJcdWMxMjFcdWMxMjJcdWMxMjVcdWMxMjhcdWMxMjlcdWMxMmFcdWMxMmJcdWMxMmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTJdW2ddXT0zODkxMitnLF9bMzg5MTIrZ109eVsxNTJd'@;
put 'W2ddKTtmb3IoeVsxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxMzJcdWMxMzNcdWMxMzRcdWMxMzVcdWMxMzdcdWMxM2FcdWMxM2JcdWMxM2RcdWMxM2VcdWMxM2ZcdWMxNDFcdWMxNDJcdWMxNDNcdWMxNDRcdWMx'@;
put 'NDVcdWMxNDZcdWMxNDdcdWMxNGFcdWMxNGVcdWMxNGZcdWMxNTBcdWMxNTFcdWMxNTJcdWMxNTNcdWMxNTZcdWMxNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxNTlcdWMxNWFcdWMxNWJcdWMxNWRcdWMxNWVcdWMxNWZcdWMxNjBcdWMxNjFcdWMxNjJcdWMxNjNc'@;
put 'dWMxNjZcdWMxNmFcdWMxNmJcdWMxNmNcdWMxNmRcdWMxNmVcdWMxNmZcdWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMxNzZcdWMxNzdcdWMxNzlcdWMxN2FcdWMxN2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMxN2NcdWMxN2RcdWMxN2VcdWMxN2ZcdWMxODBcdWMx'@;
put 'ODFcdWMxODJcdWMxODNcdWMxODRcdWMxODZcdWMxODdcdWMxODhcdWMxODlcdWMxOGFcdWMxOGJcdWMxOGZcdWMxOTFcdWMxOTJcdWMxOTNcdWMxOTVcdWMxOTdcdWMxOThcdWMxOTlcdWMxOWFcdWMxOWJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNcdWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFc'@;
put 'dWMxYWJcdWMxYWRcdWMxYWVcdWMxYWZcdWMxYjFcdWMxYjJcdWMxYjNcdWMxYjRcdWMxYjVcdWMxYjZcdWMxYjdcdWMxYjhcdWMxYjlcdWMxYmFcdWMxYmJcdWMxYmNcdWMxYmVcdWMxYmZcdWMxYzBcdWMxYzFcdWMxYzJcdWMxYzNcdWMxYzVcdWMxYzZcdWMxYzdcdWMxYzlcdWMxY2FcdWMx'@;
put 'Y2JcdWMxY2RcdWMxY2VcdWMxY2ZcdWMxZDBcdWMxZDFcdWMxZDJcdWMxZDNcdWMxZDVcdWMxZDZcdWMxZDlcdWMxZGFcdWMxZGJcdWMxZGNcdWMxZGRcdWMxZGVcdWMxZGZcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTlcdWMxZWFcdWMxZWJcdWMxZWNcdWMxZWRc'@;
put 'dWMxZWVcdWMxZWZcdWMxZjJcdWMxZjRcdWMxZjVcdWMxZjZcdWMxZjdcdWMxZjhcdWMxZjlcdWMxZmFcdWMxZmJcdWMxZmVcdWMxZmZcdWMyMDFcdWMyMDJcdWMyMDNcdWMyMDVcdWMyMDZcdWMyMDdcdWMyMDhcdWMyMDlcdWMyMGFcdWMyMGJcdWMyMGVcdWMyMTBcdWMyMTJcdWMyMTNcdWMy'@;
put 'MTRcdWMyMTVcdWMyMTZcdWMyMTdcdWMyMWFcdWMyMWJcdWMyMWRcdWMyMWVcdWMyMjFcdWMyMjJcdWMyMjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTNdW2ddXT0zOTE2OCtnLF9bMzkx'@;
put 'NjgrZ109eVsxNTNdW2ddKTtmb3IoeVsxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzVcdWMyMzZcdWMyMzdcdWMy'@;
put 'MzhcdWMyMzlcdWMyM2FcdWMyM2JcdWMyM2NcdWMyM2RcdWMyM2VcdWMyM2ZcdWMyNDBcdWMyNDFcdWMyNDJcdWMyNDNcdWMyNDRcdWMyNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNDZcdWMyNDdcdWMyNDlcdWMyNGFcdWMyNGJcdWMyNGNcdWMyNGRcdWMyNGVc'@;
put 'dWMyNGZcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTlcdWMyNWFcdWMyNWJcdWMyNWNcdWMyNWRcdWMyNWVcdWMyNWZcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNjdcdWMyNjhcdWMyNjlcdWMy'@;
put 'NmFcdWMyNmJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMyNzVcdWMyNzZcdWMyNzdcdWMyNzhcdWMyNzlcdWMyN2FcdWMyN2JcdWMyN2VcdWMyODBcdWMyODJcdWMyODNcdWMyODRcdWMyODVcdWMyODZcdWMyODdcdWMyOGFcdWMyOGJcdWMyOGNcdWMyOGRcdWMyOGVcdWMyOGZc'@;
put 'dWMyOTFcdWMyOTJcdWMyOTNcdWMyOTRcdWMyOTVcdWMyOTZcdWMyOTdcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWVcdWMyOWZcdWMyYTBcdWMyYTFcdWMyYTJcdWMyYTNcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWVcdWMyYWZcdWMyYjBcdWMyYjFcdWMyYjJcdWMyYjNcdWMy'@;
put 'YjZcdWMyYjhcdWMyYmFcdWMyYmJcdWMyYmNcdWMyYmRcdWMyYmVcdWMyYmZcdWMyYzBcdWMyYzFcdWMyYzJcdWMyYzNcdWMyYzRcdWMyYzVcdWMyYzZcdWMyYzdcdWMyYzhcdWMyYzlcdWMyY2FcdWMyY2JcdWMyY2NcdWMyY2RcdWMyY2VcdWMyY2ZcdWMyZDBcdWMyZDFcdWMyZDJcdWMyZDNc'@;
put 'dWMyZDRcdWMyZDVcdWMyZDZcdWMyZDdcdWMyZDhcdWMyZDlcdWMyZGFcdWMyZGJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTVcdWMyZTZcdWMyZTdcdWMyZThcdWMyZTlcdWMyZWFcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMy'@;
put 'ZmVcdWMyZmZcdWMzMDFcdWMzMDJcdWMzMDNcdWMzMDRcdWMzMDVcdWMzMDZcdWMzMDdcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTRdW2ddXT0z'@;
put 'OTQyNCtnLF9bMzk0MjQrZ109eVsxNTRdW2ddKTtmb3IoeVsxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWRcdWMzMWVcdWMz'@;
put 'MWZcdWMzMjBcdWMzMjFcdWMzMjJcdWMzMjNcdWMzMjZcdWMzMjdcdWMzMmFcdWMzMmJcdWMzMmNcdWMzMmRcdWMzMmVcdWMzMmZcdWMzMzBcdWMzMzFcdWMzMzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzMzNcdWMzMzRcdWMzMzVcdWMzMzZcdWMzMzdcdWMzMzhc'@;
put 'dWMzMzlcdWMzM2FcdWMzM2JcdWMzM2NcdWMzM2RcdWMzM2VcdWMzM2ZcdWMzNDBcdWMzNDFcdWMzNDJcdWMzNDNcdWMzNDRcdWMzNDZcdWMzNDdcdWMzNDhcdWMzNDlcdWMzNGFcdWMzNGJcdWMzNGNcdWMzNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzNGVcdWMz'@;
put 'NGZcdWMzNTBcdWMzNTFcdWMzNTJcdWMzNTNcdWMzNTRcdWMzNTVcdWMzNTZcdWMzNTdcdWMzNThcdWMzNTlcdWMzNWFcdWMzNWJcdWMzNWNcdWMzNWRcdWMzNWVcdWMzNWZcdWMzNjBcdWMzNjFcdWMzNjJcdWMzNjNcdWMzNjRcdWMzNjVcdWMzNjZcdWMzNjdcdWMzNmFcdWMzNmJcdWMzNmRc'@;
put 'dWMzNmVcdWMzNmZcdWMzNzFcdWMzNzNcdWMzNzRcdWMzNzVcdWMzNzZcdWMzNzdcdWMzN2FcdWMzN2JcdWMzN2VcdWMzN2ZcdWMzODBcdWMzODFcdWMzODJcdWMzODNcdWMzODVcdWMzODZcdWMzODdcdWMzODlcdWMzOGFcdWMzOGJcdWMzOGRcdWMzOGVcdWMzOGZcdWMzOTBcdWMzOTFcdWMz'@;
put 'OTJcdWMzOTNcdWMzOTRcdWMzOTVcdWMzOTZcdWMzOTdcdWMzOThcdWMzOTlcdWMzOWFcdWMzOWJcdWMzOWNcdWMzOWRcdWMzOWVcdWMzOWZcdWMzYTBcdWMzYTFcdWMzYTJcdWMzYTNcdWMzYTRcdWMzYTVcdWMzYTZcdWMzYTdcdWMzYThcdWMzYTlcdWMzYWFcdWMzYWJcdWMzYWNcdWMzYWRc'@;
put 'dWMzYWVcdWMzYWZcdWMzYjBcdWMzYjFcdWMzYjJcdWMzYjNcdWMzYjRcdWMzYjVcdWMzYjZcdWMzYjdcdWMzYjhcdWMzYjlcdWMzYmFcdWMzYmJcdWMzYmNcdWMzYmRcdWMzYmVcdWMzYmZcdWMzYzFcdWMzYzJcdWMzYzNcdWMzYzRcdWMzYzVcdWMzYzZcdWMzYzdcdWMzYzhcdWMzYzlcdWMz'@;
put 'Y2FcdWMzY2JcdWMzY2NcdWMzY2RcdWMzY2VcdWMzY2ZcdWMzZDBcdWMzZDFcdWMzZDJcdWMzZDNcdWMzZDRcdWMzZDVcdWMzZDZcdWMzZDdcdWMzZGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1NV1bZ10uY2hhckNvZGVBdCgwKSYmKElb'@;
put 'eVsxNTVdW2ddXT0zOTY4MCtnLF9bMzk2ODArZ109eVsxNTVdW2ddKTtmb3IoeVsxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZGJcdWMzZGRcdWMzZGVcdWMzZTFcdWMzZTNcdWMzZTRcdWMzZTVcdWMzZTZcdWMz'@;
put 'ZTdcdWMzZWFcdWMzZWJcdWMzZWNcdWMzZWVcdWMzZWZcdWMzZjBcdWMzZjFcdWMzZjJcdWMzZjNcdWMzZjZcdWMzZjdcdWMzZjlcdWMzZmFcdWMzZmJcdWMzZmNcdWMzZmRcdWMzZmVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMzZmZcdWM0MDBcdWM0MDFcdWM0MDJc'@;
put 'dWM0MDNcdWM0MDRcdWM0MDVcdWM0MDZcdWM0MDdcdWM0MDlcdWM0MGFcdWM0MGJcdWM0MGNcdWM0MGRcdWM0MGVcdWM0MGZcdWM0MTFcdWM0MTJcdWM0MTNcdWM0MTRcdWM0MTVcdWM0MTZcdWM0MTdcdWM0MThcdWM0MTlcdWM0MWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWM0MWJcdWM0MWNcdWM0MWRcdWM0MWVcdWM0MWZcdWM0MjBcdWM0MjFcdWM0MjJcdWM0MjNcdWM0MjVcdWM0MjZcdWM0MjdcdWM0MjhcdWM0MjlcdWM0MmFcdWM0MmJcdWM0MmRcdWM0MmVcdWM0MmZcdWM0MzFcdWM0MzJcdWM0MzNcdWM0MzVcdWM0MzZcdWM0MzdcdWM0MzhcdWM0Mzlc'@;
put 'dWM0M2FcdWM0M2JcdWM0M2VcdWM0M2ZcdWM0NDBcdWM0NDFcdWM0NDJcdWM0NDNcdWM0NDRcdWM0NDVcdWM0NDZcdWM0NDdcdWM0NDlcdWM0NGFcdWM0NGJcdWM0NGNcdWM0NGRcdWM0NGVcdWM0NGZcdWM0NTBcdWM0NTFcdWM0NTJcdWM0NTNcdWM0NTRcdWM0NTVcdWM0NTZcdWM0NTdcdWM0'@;
put 'NThcdWM0NTlcdWM0NWFcdWM0NWJcdWM0NWNcdWM0NWRcdWM0NWVcdWM0NWZcdWM0NjBcdWM0NjFcdWM0NjJcdWM0NjNcdWM0NjZcdWM0NjdcdWM0NjlcdWM0NmFcdWM0NmJcdWM0NmRcdWM0NmVcdWM0NmZcdWM0NzBcdWM0NzFcdWM0NzJcdWM0NzNcdWM0NzZcdWM0NzdcdWM0NzhcdWM0N2Fc'@;
put 'dWM0N2JcdWM0N2NcdWM0N2RcdWM0N2VcdWM0N2ZcdWM0ODFcdWM0ODJcdWM0ODNcdWM0ODRcdWM0ODVcdWM0ODZcdWM0ODdcdWM0ODhcdWM0ODlcdWM0OGFcdWM0OGJcdWM0OGNcdWM0OGRcdWM0OGVcdWM0OGZcdWM0OTBcdWM0OTFcdWM0OTJcdWM0OTNcdWM0OTVcdWM0OTZcdWM0OTdcdWM0'@;
put 'OThcdWM0OTlcdWM0OWFcdWM0OWJcdWM0OWRcdWM0OWVcdWM0OWZcdWM0YTBcdWM0YTFcdWM0YTJcdWM0YTNcdWM0YTRcdWM0YTVcdWM0YTZcdWM0YTdcdWM0YThcdWM0YTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1Nl1bZ10uY2hhckNv'@;
put 'ZGVBdCgwKSYmKElbeVsxNTZdW2ddXT0zOTkzNitnLF9bMzk5MzYrZ109eVsxNTZdW2ddKTtmb3IoeVsxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YWFcdWM0YWJcdWM0YWNcdWM0YWRcdWM0YWVcdWM0YWZcdWM0'@;
put 'YjBcdWM0YjFcdWM0YjJcdWM0YjNcdWM0YjRcdWM0YjVcdWM0YjZcdWM0YjdcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmRcdWM0YmVcdWM0YmZcdWM0YzBcdWM0YzFcdWM0YzJcdWM0YzNcdWM0YzRcdWM0YzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YzZcdWM0Yzdc'@;
put 'dWM0YzhcdWM0YzlcdWM0Y2FcdWM0Y2JcdWM0Y2NcdWM0Y2RcdWM0Y2VcdWM0Y2ZcdWM0ZDBcdWM0ZDFcdWM0ZDJcdWM0ZDNcdWM0ZDRcdWM0ZDVcdWM0ZDZcdWM0ZDdcdWM0ZDhcdWM0ZDlcdWM0ZGFcdWM0ZGJcdWM0ZGNcdWM0ZGRcdWM0ZGVcdWM0ZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWM0ZTBcdWM0ZTFcdWM0ZTJcdWM0ZTNcdWM0ZTRcdWM0ZTVcdWM0ZTZcdWM0ZTdcdWM0ZThcdWM0ZWFcdWM0ZWJcdWM0ZWNcdWM0ZWRcdWM0ZWVcdWM0ZWZcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVc'@;
put 'dWM1MDJcdWM1MDNcdWM1MDRcdWM1MDVcdWM1MDZcdWM1MDdcdWM1MDhcdWM1MDlcdWM1MGFcdWM1MGJcdWM1MGRcdWM1MGVcdWM1MGZcdWM1MTFcdWM1MTJcdWM1MTNcdWM1MTVcdWM1MTZcdWM1MTdcdWM1MThcdWM1MTlcdWM1MWFcdWM1MWJcdWM1MWRcdWM1MWVcdWM1MWZcdWM1MjBcdWM1'@;
put 'MjFcdWM1MjJcdWM1MjNcdWM1MjRcdWM1MjVcdWM1MjZcdWM1MjdcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzFcdWM1MzJcdWM1MzNcdWM1MzRcdWM1MzVcdWM1MzZcdWM1MzdcdWM1M2FcdWM1M2NcdWM1M2VcdWM1M2ZcdWM1NDBcdWM1NDFcdWM1NDJcdWM1NDNcdWM1NDZc'@;
put 'dWM1NDdcdWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNcdWM1NjVcdWM1NjZcdWM1NjdcdWM1NjlcdWM1NmFcdWM1NmJcdWM1NmNcdWM1NmRcdWM1NmVcdWM1NmZcdWM1NzJcdWM1NzZcdWM1NzdcdWM1NzhcdWM1'@;
put 'NzlcdWM1N2FcdWM1N2JcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1'@;
put 'N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTddW2ddXT00MDE5MitnLF9bNDAxOTIrZ109eVsxNTddW2ddKTtmb3IoeVsxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1'@;
put 'OWRcdWM1OWVcdWM1OWZcdWM1YTFcdWM1YTJcdWM1YTNcdWM1YTRcdWM1YTVcdWM1YTZcdWM1YTdcdWM1YThcdWM1YWFcdWM1YWJcdWM1YWNcdWM1YWRcdWM1YWVcdWM1YWZcdWM1YjBcdWM1YjFcdWM1YjJcdWM1YjNcdWM1YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWM1YjdcdWM1YmFcdWM1YmZcdWM1YzBcdWM1YzFcdWM1YzJcdWM1YzNcdWM1Y2JcdWM1Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDlcdWM1ZGFcdWM1ZGJcdWM1ZGNcdWM1ZGRcdWM1ZGVcdWM1ZGZcdWM1ZTJcdWM1ZTRcdWM1ZTZcdWM1ZTdcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM1ZThcdWM1ZTlcdWM1ZWFcdWM1ZWJcdWM1ZWZcdWM1ZjFcdWM1ZjJcdWM1ZjNcdWM1ZjVcdWM1ZjhcdWM1ZjlcdWM1ZmFcdWM1ZmJcdWM2MDJcdWM2MDNcdWM2MDRcdWM2MDlcdWM2MGFcdWM2MGJcdWM2MGRcdWM2MGVcdWM2MGZcdWM2MTFc'@;
put 'dWM2MTJcdWM2MTNcdWM2MTRcdWM2MTVcdWM2MTZcdWM2MTdcdWM2MWFcdWM2MWRcdWM2MWVcdWM2MWZcdWM2MjBcdWM2MjFcdWM2MjJcdWM2MjNcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2'@;
put 'M2VcdWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDlcdWM2NGFcdWM2NGJcdWM2NGNcdWM2NGRcdWM2NGVcdWM2NGZcdWM2NTJcdWM2NTZcdWM2NTdcdWM2NThcdWM2NTlcdWM2NWFcdWM2NWJcdWM2NWVcdWM2NWZcdWM2NjFcdWM2NjJcdWM2NjNcdWM2NjRcdWM2NjVc'@;
put 'dWM2NjZcdWM2NjdcdWM2NjhcdWM2NjlcdWM2NmFcdWM2NmJcdWM2NmRcdWM2NmVcdWM2NzBcdWM2NzJcdWM2NzNcdWM2NzRcdWM2NzVcdWM2NzZcdWM2NzdcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODFcdWM2ODJcdWM2ODNcdWM2ODRcdWM2ODVcdWM2ODZcdWM2ODdcdWM2'@;
put 'OGFcdWM2OGNcdWM2OGVcdWM2OGZcdWM2OTBcdWM2OTFcdWM2OTJcdWM2OTNcdWM2OTZcdWM2OTdcdWM2OTlcdWM2OWFcdWM2OWJcdWM2OWRcdWM2OWVcdWM2OWZcdWM2YTBcdWM2YTFcdWM2YTJcdWM2YTNcdWM2YTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNThdLmxlbmd0aDsrK2cp'@;
put 'NjU1MzMhPT15WzE1OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNThdW2ddXT00MDQ0OCtnLF9bNDA0NDgrZ109eVsxNThdW2ddKTtmb3IoeVsxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2YThcdWM2YWFcdWM2'@;
put 'YWJcdWM2YWNcdWM2YWRcdWM2YWVcdWM2YWZcdWM2YjJcdWM2YjNcdWM2YjVcdWM2YjZcdWM2YjdcdWM2YmJcdWM2YmNcdWM2YmRcdWM2YmVcdWM2YmZcdWM2YzJcdWM2YzRcdWM2YzZcdWM2YzdcdWM2YzhcdWM2YzlcdWM2Y2FcdWM2Y2JcdWM2Y2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWM2Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDVcdWM2ZDZcdWM2ZDdcdWM2ZDhcdWM2ZDlcdWM2ZGFcdWM2ZGJcdWM2ZGVcdWM2ZGZcdWM2ZTJcdWM2ZTNcdWM2ZTRcdWM2ZTVcdWM2ZTZcdWM2ZTdcdWM2ZWFcdWM2ZWJcdWM2ZWRcdWM2ZWVcdWM2ZWZcdWM2ZjFcdWM2'@;
put 'ZjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM2ZjNcdWM2ZjRcdWM2ZjVcdWM2ZjZcdWM2ZjdcdWM2ZmFcdWM2ZmJcdWM2ZmNcdWM2ZmVcdWM2ZmZcdWM3MDBcdWM3MDFcdWM3MDJcdWM3MDNcdWM3MDZcdWM3MDdcdWM3MDlcdWM3MGFcdWM3MGJcdWM3MGRcdWM3MGVc'@;
put 'dWM3MGZcdWM3MTBcdWM3MTFcdWM3MTJcdWM3MTNcdWM3MTZcdWM3MThcdWM3MWFcdWM3MWJcdWM3MWNcdWM3MWRcdWM3MWVcdWM3MWZcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3MjdcdWM3MjlcdWM3MmFcdWM3MmJcdWM3MmNcdWM3MmRcdWM3MmVcdWM3MmZcdWM3MzJcdWM3MzRcdWM3'@;
put 'MzZcdWM3MzhcdWM3MzlcdWM3M2FcdWM3M2JcdWM3M2VcdWM3M2ZcdWM3NDFcdWM3NDJcdWM3NDNcdWM3NDVcdWM3NDZcdWM3NDdcdWM3NDhcdWM3NDlcdWM3NGJcdWM3NGVcdWM3NTBcdWM3NTlcdWM3NWFcdWM3NWJcdWM3NWRcdWM3NWVcdWM3NWZcdWM3NjFcdWM3NjJcdWM3NjNcdWM3NjRc'@;
put 'dWM3NjVcdWM3NjZcdWM3NjdcdWM3NjlcdWM3NmFcdWM3NmNcdWM3NmRcdWM3NmVcdWM3NmZcdWM3NzBcdWM3NzFcdWM3NzJcdWM3NzNcdWM3NzZcdWM3NzdcdWM3NzlcdWM3N2FcdWM3N2JcdWM3N2ZcdWM3ODBcdWM3ODFcdWM3ODJcdWM3ODZcdWM3OGJcdWM3OGNcdWM3OGRcdWM3OGZcdWM3'@;
put 'OTJcdWM3OTNcdWM3OTVcdWM3OTlcdWM3OWJcdWM3OWNcdWM3OWRcdWM3OWVcdWM3OWZcdWM3YTJcdWM3YTdcdWM3YThcdWM3YTlcdWM3YWFcdWM3YWJcdWM3YWVcdWM3YWZcdWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3YjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTld'@;
put 'Lmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTldW2ddXT00MDcwNCtnLF9bNDA3MDQrZ109eVsxNTldW2ddKTtmb3IoeVsxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3'@;
put 'YjhcdWM3YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzJcdWM3YzNcdWM3YzRcdWM3YzVcdWM3YzZcdWM3YzdcdWM3Y2FcdWM3Y2JcdWM3Y2RcdWM3Y2ZcdWM3ZDFcdWM3ZDJcdWM3ZDNcdWM3ZDRcdWM3ZDVcdWM3ZDZcdWM3ZDdcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGNcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZGVcdWM3ZGZcdWM3ZTBcdWM3ZTFcdWM3ZTJcdWM3ZTNcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWRcdWM3ZWVcdWM3ZWZcdWM3ZjBcdWM3ZjFcdWM3ZjJcdWM3ZjNcdWM3ZjRcdWM3ZjVcdWM3ZjZcdWM3ZjdcdWM3'@;
put 'ZjhcdWM3ZjlcdWM3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZmJcdWM3ZmNcdWM3ZmRcdWM3ZmVcdWM3ZmZcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGJcdWM4MGNcdWM4MGRcdWM4MGVcdWM4MGZcdWM4MTJcdWM4MTRcdWM4MTdc'@;
put 'dWM4MThcdWM4MTlcdWM4MWFcdWM4MWJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4MjJcdWM4MjNcdWM4MjVcdWM4MjZcdWM4MjdcdWM4MjhcdWM4MjlcdWM4MmFcdWM4MmJcdWM4MmVcdWM4MzBcdWM4MzJcdWM4MzNcdWM4MzRcdWM4MzVcdWM4MzZcdWM4MzdcdWM4MzlcdWM4M2FcdWM4M2JcdWM4'@;
put 'M2RcdWM4M2VcdWM4M2ZcdWM4NDFcdWM4NDJcdWM4NDNcdWM4NDRcdWM4NDVcdWM4NDZcdWM4NDdcdWM4NGFcdWM4NGJcdWM4NGVcdWM4NGZcdWM4NTBcdWM4NTFcdWM4NTJcdWM4NTNcdWM4NTVcdWM4NTZcdWM4NTdcdWM4NThcdWM4NTlcdWM4NWFcdWM4NWJcdWM4NWNcdWM4NWRcdWM4NWVc'@;
put 'dWM4NWZcdWM4NjBcdWM4NjFcdWM4NjJcdWM4NjNcdWM4NjRcdWM4NjVcdWM4NjZcdWM4NjdcdWM4NjhcdWM4NjlcdWM4NmFcdWM4NmJcdWM4NmNcdWM4NmRcdWM4NmVcdWM4NmZcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2JcdWM4N2NcdWM4N2RcdWM4N2VcdWM4'@;
put 'N2ZcdWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGVcdWM4OGZcdWM4OTBcdWM4OTFcdWM4OTJcdWM4OTNcdWM4OTVcdWM4OTZcdWM4OTdcdWM4OThcdWM4OTlcdWM4OWFcdWM4OWJcdWM4OWNcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTRcdWZmZmQiLnNwbGl0KCIiKSxn'@;
put 'PTA7ZyE9eVsxNjBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjBdW2ddXT00MDk2MCtnLF9bNDA5NjArZ109eVsxNjBdW2ddKTtmb3IoeVsxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWM4YTVcdWM4YTZcdWM4YTdcdWM4YTlcdWM4YWFcdWM4YWJcdWM4YWNcdWM4YWRcdWM4YWVcdWM4YWZcdWM4YjBcdWM4YjFcdWM4YjJcdWM4YjNcdWM4YjRcdWM4YjVcdWM4YjZcdWM4YjdcdWM4YjhcdWM4YjlcdWM4YmFcdWM4YmJcdWM4YmVcdWM4YmZcdWM4YzBcdWM4YzFc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4YzJcdWM4YzNcdWM4YzVcdWM4YzZcdWM4YzdcdWM4YzlcdWM4Y2FcdWM4Y2JcdWM4Y2RcdWM4Y2VcdWM4Y2ZcdWM4ZDBcdWM4ZDFcdWM4ZDJcdWM4ZDNcdWM4ZDZcdWM4ZDhcdWM4ZGFcdWM4ZGJcdWM4ZGNcdWM4ZGRcdWM4'@;
put 'ZGVcdWM4ZGZcdWM4ZTJcdWM4ZTNcdWM4ZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM4ZTZcdWM4ZTdcdWM4ZThcdWM4ZTlcdWM4ZWFcdWM4ZWJcdWM4ZWNcdWM4ZWRcdWM4ZWVcdWM4ZWZcdWM4ZjBcdWM4ZjFcdWM4ZjJcdWM4ZjNcdWM4ZjRcdWM4ZjZcdWM4Zjdc'@;
put 'dWM4ZjhcdWM4ZjlcdWM4ZmFcdWM4ZmJcdWM4ZmVcdWM4ZmZcdWM5MDFcdWM5MDJcdWM5MDNcdWM5MDdcdWM5MDhcdWM5MDlcdWM5MGFcdWM5MGJcdWM5MGVcdTMwMDBcdTMwMDFcdTMwMDJceGI3XHUyMDI1XHUyMDI2XHhhOFx1MzAwM1x4YWRcdTIwMTVcdTIyMjVcdWZmM2NcdTIyM2NcdTIw'@;
put 'MThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVm'@;
put 'ZmUwXHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1'@;
put 'MjE5MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn'@;
put 'IT15WzE2MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTYxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2MV1bZ11dPTQxMjE2K2csX1s0MTIxNitnXT15WzE2MV1bZ10pO2Zvcih5WzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1YzkxMFx1YzkxMlx1YzkxM1x1YzkxNFx1YzkxNVx1YzkxNlx1YzkxN1x1YzkxOVx1YzkxYVx1YzkxYlx1YzkxY1x1YzkxZFx1YzkxZVx1YzkxZlx1YzkyMFx1YzkyMVx1YzkyMlx1YzkyM1x1YzkyNFx1YzkyNVx1YzkyNlx1YzkyN1x1YzkyOFx1YzkyOVx1YzkyYVx1YzkyYlx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzkyZFx1YzkyZVx1YzkyZlx1YzkzMFx1YzkzMVx1YzkzMlx1YzkzM1x1YzkzNVx1YzkzNlx1YzkzN1x1YzkzOFx1YzkzOVx1YzkzYVx1YzkzYlx1YzkzY1x1YzkzZFx1YzkzZVx1YzkzZlx1Yzk0MFx1Yzk0MVx1Yzk0Mlx1Yzk0M1x1'@;
put 'Yzk0NFx1Yzk0NVx1Yzk0Nlx1Yzk0N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yzk0OFx1Yzk0OVx1Yzk0YVx1Yzk0Ylx1Yzk0Y1x1Yzk0ZFx1Yzk0ZVx1Yzk0Zlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1Yzk1N1x1Yzk1OVx1Yzk1YVx1Yzk1Ylx1Yzk1Y1x1Yzk1'@;
put 'ZFx1Yzk1ZVx1Yzk1Zlx1Yzk2Mlx1Yzk2NFx1Yzk2NVx1Yzk2Nlx1Yzk2N1x1Yzk2OFx1Yzk2OVx1Yzk2YVx1Yzk2Ylx1Yzk2ZFx1Yzk2ZVx1Yzk2Zlx1MjFkMlx1MjFkNFx1MjIwMFx1MjIwM1x4YjRcdWZmNWVcdTAyYzdcdTAyZDhcdTAyZGRcdTAyZGFcdTAyZDlceGI4XHUwMmRiXHhhMVx4'@;
put 'YmZcdTAyZDBcdTIyMmVcdTIyMTFcdTIyMGZceGE0XHUyMTA5XHUyMDMwXHUyNWMxXHUyNWMwXHUyNWI3XHUyNWI2XHUyNjY0XHUyNjYwXHUyNjYxXHUyNjY1XHUyNjY3XHUyNjYzXHUyMjk5XHUyNWM4XHUyNWEzXHUyNWQwXHUyNWQxXHUyNTkyXHUyNWE0XHUyNWE1XHUyNWE4XHUyNWE3XHUy'@;
put 'NWE2XHUyNWE5XHUyNjY4XHUyNjBmXHUyNjBlXHUyNjFjXHUyNjFlXHhiNlx1MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2ZFx1MjY2OVx1MjY2YVx1MjY2Y1x1MzI3Zlx1MzIxY1x1MjExNlx1MzNjN1x1MjEyMlx1MzNjMlx1MzNkOFx1MjEyMVx1MjBhY1x4'@;
put 'YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9'@;
put 'eVsxNjJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjJdW2ddXT00MTQ3MitnLF9bNDE0NzIrZ109eVsxNjJdW2ddKTtmb3IoeVsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWM5NzFcdWM5NzJcdWM5NzNcdWM5NzVcdWM5NzZcdWM5NzdcdWM5NzhcdWM5NzlcdWM5N2FcdWM5N2JcdWM5N2RcdWM5N2VcdWM5N2ZcdWM5ODBcdWM5ODFcdWM5ODJcdWM5ODNcdWM5ODRcdWM5ODVcdWM5ODZcdWM5ODdcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGZcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5OTFcdWM5OTJcdWM5OTNcdWM5OTRcdWM5OTVcdWM5OTZcdWM5OTdcdWM5OWFcdWM5OWNcdWM5OWVcdWM5OWZcdWM5YTBcdWM5YTFcdWM5YTJcdWM5YTNcdWM5YTRcdWM5YTVcdWM5YTZcdWM5YTdcdWM5YThcdWM5YTlcdWM5YWFcdWM5'@;
put 'YWJcdWM5YWNcdWM5YWRcdWM5YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5YWZcdWM5YjBcdWM5YjFcdWM5YjJcdWM5YjNcdWM5YjRcdWM5YjVcdWM5YjZcdWM5YjdcdWM5YjhcdWM5YjlcdWM5YmFcdWM5YmJcdWM5YmNcdWM5YmRcdWM5YmVcdWM5YmZcdWM5YzJc'@;
put 'dWM5YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2JcdWM5Y2NcdWM5Y2RcdWM5Y2VcdWM5Y2ZcdWM5ZDJcdWM5ZDRcdWM5ZDdcdWM5ZDhcdWM5ZGJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmMDRcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZm'@;
put 'MGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlc'@;
put 'dWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmZTZcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZm'@;
put 'NDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxnPTA7ZyE9eVsxNjNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjNdW2ddXT00MTcyOCtnLF9bNDE3MjgrZ109eVsxNjNdW2ddKTtmb3IoeVsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWM5ZGVcdWM5ZGZcdWM5ZTFcdWM5ZTNcdWM5ZTVcdWM5ZTZcdWM5ZThcdWM5ZTlcdWM5ZWFcdWM5ZWJcdWM5ZWVcdWM5ZjJcdWM5ZjNcdWM5ZjRcdWM5ZjVcdWM5ZjZcdWM5ZjdcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNc'@;
put 'dWNhMDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNhMGVcdWNhMGZcdWNhMTBcdWNhMTFcdWNhMTJcdWNhMTNcdWNhMTVcdWNhMTZcdWNhMTdcdWNhMTlcdWNhMWFcdWNhMWJcdWNhMWNcdWNhMWRcdWNhMWVcdWNhMWZcdWNh'@;
put 'MjBcdWNhMjFcdWNhMjJcdWNhMjNcdWNhMjRcdWNhMjVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhMjZcdWNhMjdcdWNhMjhcdWNhMmFcdWNhMmJcdWNhMmNcdWNhMmRcdWNhMmVcdWNhMmZcdWNhMzBcdWNhMzFcdWNhMzJcdWNhMzNcdWNhMzRcdWNhMzVcdWNhMzZc'@;
put 'dWNhMzdcdWNhMzhcdWNhMzlcdWNhM2FcdWNhM2JcdWNhM2NcdWNhM2RcdWNhM2VcdWNhM2ZcdWNhNDBcdWNhNDFcdWNhNDJcdWNhNDNcdWNhNDRcdWNhNDVcdWNhNDZcdTMxMzFcdTMxMzJcdTMxMzNcdTMxMzRcdTMxMzVcdTMxMzZcdTMxMzdcdTMxMzhcdTMxMzlcdTMxM2FcdTMxM2JcdTMx'@;
put 'M2NcdTMxM2RcdTMxM2VcdTMxM2ZcdTMxNDBcdTMxNDFcdTMxNDJcdTMxNDNcdTMxNDRcdTMxNDVcdTMxNDZcdTMxNDdcdTMxNDhcdTMxNDlcdTMxNGFcdTMxNGJcdTMxNGNcdTMxNGRcdTMxNGVcdTMxNGZcdTMxNTBcdTMxNTFcdTMxNTJcdTMxNTNcdTMxNTRcdTMxNTVcdTMxNTZcdTMxNTdc'@;
put 'dTMxNThcdTMxNTlcdTMxNWFcdTMxNWJcdTMxNWNcdTMxNWRcdTMxNWVcdTMxNWZcdTMxNjBcdTMxNjFcdTMxNjJcdTMxNjNcdTMxNjRcdTMxNjVcdTMxNjZcdTMxNjdcdTMxNjhcdTMxNjlcdTMxNmFcdTMxNmJcdTMxNmNcdTMxNmRcdTMxNmVcdTMxNmZcdTMxNzBcdTMxNzFcdTMxNzJcdTMx'@;
put 'NzNcdTMxNzRcdTMxNzVcdTMxNzZcdTMxNzdcdTMxNzhcdTMxNzlcdTMxN2FcdTMxN2JcdTMxN2NcdTMxN2RcdTMxN2VcdTMxN2ZcdTMxODBcdTMxODFcdTMxODJcdTMxODNcdTMxODRcdTMxODVcdTMxODZcdTMxODdcdTMxODhcdTMxODlcdTMxOGFcdTMxOGJcdTMxOGNcdTMxOGRcdTMxOGVc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjRdW2ddXT00MTk4NCtnLF9bNDE5ODQrZ109eVsxNjRdW2ddKTtmb3IoeVsxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNDdcdWNhNDhcdWNhNDlcdWNhNGFcdWNhNGJcdWNhNGVcdWNhNGZcdWNhNTFcdWNhNTJcdWNhNTNcdWNhNTVcdWNhNTZcdWNhNTdcdWNhNThcdWNhNTlcdWNhNWFcdWNhNWJcdWNhNWVcdWNhNjJcdWNhNjNcdWNhNjRcdWNhNjVcdWNhNjZc'@;
put 'dWNhNjdcdWNhNjlcdWNhNmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhNmJcdWNhNmNcdWNhNmRcdWNhNmVcdWNhNmZcdWNhNzBcdWNhNzFcdWNhNzJcdWNhNzNcdWNhNzRcdWNhNzVcdWNhNzZcdWNhNzdcdWNhNzhcdWNhNzlcdWNhN2FcdWNhN2JcdWNhN2NcdWNh'@;
put 'N2VcdWNhN2ZcdWNhODBcdWNhODFcdWNhODJcdWNhODNcdWNhODVcdWNhODZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhODdcdWNhODhcdWNhODlcdWNhOGFcdWNhOGJcdWNhOGNcdWNhOGRcdWNhOGVcdWNhOGZcdWNhOTBcdWNhOTFcdWNhOTJcdWNhOTNcdWNhOTRc'@;
put 'dWNhOTVcdWNhOTZcdWNhOTdcdWNhOTlcdWNhOWFcdWNhOWJcdWNhOWNcdWNhOWRcdWNhOWVcdWNhOWZcdWNhYTBcdWNhYTFcdWNhYTJcdWNhYTNcdWNhYTRcdWNhYTVcdWNhYTZcdWNhYTdcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIx'@;
put 'NzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVc'@;
put 'dTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAz'@;
put 'YjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjVdW2ddXT00MjI0MCtnLF9bNDIyNDArZ109eVsxNjVdW2ddKTtmb3IoeVsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYThcdWNhYTlcdWNhYWFcdWNhYWJcdWNhYWNcdWNhYWRcdWNhYWVcdWNhYWZcdWNhYjBcdWNhYjFcdWNhYjJcdWNhYjNcdWNhYjRcdWNhYjVcdWNhYjZcdWNhYjdcdWNhYjhcdWNhYjlcdWNhYmFcdWNhYmJcdWNhYmVc'@;
put 'dWNhYmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYzZcdWNhYzdcdWNhYzhcdWNhYzlcdWNhY2FcdWNhY2JcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGFcdWNhZGJcdWNhZGNcdWNh'@;
put 'ZGRcdWNhZGVcdWNhZGZcdWNhZTFcdWNhZTJcdWNhZTNcdWNhZTRcdWNhZTVcdWNhZTZcdWNhZTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWRcdWNhZWVcdWNhZWZcdWNhZjBcdWNhZjFcdWNhZjJcdWNhZjNcdWNhZjVc'@;
put 'dWNhZjZcdWNhZjdcdWNhZjhcdWNhZjlcdWNhZmFcdWNhZmJcdWNhZmNcdWNhZmRcdWNhZmVcdWNhZmZcdWNiMDBcdWNiMDFcdWNiMDJcdWNiMDNcdWNiMDRcdWNiMDVcdWNiMDZcdWNiMDdcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1'@;
put 'MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFc'@;
put 'dTI1MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDNcdTI1NDRcdTI1'@;
put 'NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjZdW2ddXT00MjQ5NitnLF9bNDI0OTYrZ109eVsxNjZdW2ddKTtmb3IoeVsxNjddPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMGJcdWNiMGNcdWNiMGRcdWNiMGVcdWNiMGZcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTlcdWNiMWFcdWNiMWJcdWNiMWNcdWNiMWRcdWNiMWVcdWNiMWZcdWNiMjJc'@;
put 'dWNiMjNcdWNiMjRcdWNiMjVcdWNiMjZcdWNiMjdcdWNiMjhcdWNiMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiMmFcdWNiMmJcdWNiMmNcdWNiMmRcdWNiMmVcdWNiMmZcdWNiMzBcdWNiMzFcdWNiMzJcdWNiMzNcdWNiMzRcdWNiMzVcdWNiMzZcdWNiMzdcdWNi'@;
put 'MzhcdWNiMzlcdWNiM2FcdWNiM2JcdWNiM2NcdWNiM2RcdWNiM2VcdWNiM2ZcdWNiNDBcdWNiNDJcdWNiNDNcdWNiNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNDVcdWNiNDZcdWNiNDdcdWNiNGFcdWNiNGJcdWNiNGRcdWNiNGVcdWNiNGZcdWNiNTFcdWNiNTJc'@;
put 'dWNiNTNcdWNiNTRcdWNiNTVcdWNiNTZcdWNiNTdcdWNiNWFcdWNiNWJcdWNiNWNcdWNiNWVcdWNiNWZcdWNiNjBcdWNiNjFcdWNiNjJcdWNiNjNcdWNiNjVcdWNiNjZcdWNiNjdcdWNiNjhcdWNiNjlcdWNiNmFcdWNiNmJcdWNiNmNcdTMzOTVcdTMzOTZcdTMzOTdcdTIxMTNcdTMzOThcdTMz'@;
put 'YzRcdTMzYTNcdTMzYTRcdTMzYTVcdTMzYTZcdTMzOTlcdTMzOWFcdTMzOWJcdTMzOWNcdTMzOWRcdTMzOWVcdTMzOWZcdTMzYTBcdTMzYTFcdTMzYTJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjBcdTMzYjFcdTMzYjJc'@;
put 'dTMzYjNcdTMzYjRcdTMzYjVcdTMzYjZcdTMzYjdcdTMzYjhcdTMzYjlcdTMzODBcdTMzODFcdTMzODJcdTMzODNcdTMzODRcdTMzYmFcdTMzYmJcdTMzYmNcdTMzYmRcdTMzYmVcdTMzYmZcdTMzOTBcdTMzOTFcdTMzOTJcdTMzOTNcdTMzOTRcdTIxMjZcdTMzYzBcdTMzYzFcdTMzOGFcdTMz'@;
put 'OGJcdTMzOGNcdTMzZDZcdTMzYzVcdTMzYWRcdTMzYWVcdTMzYWZcdTMzZGJcdTMzYTlcdTMzYWFcdTMzYWJcdTMzYWNcdTMzZGRcdTMzZDBcdTMzZDNcdTMzYzNcdTMzYzlcdTMzZGNcdTMzYzZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjddW2ddXT00Mjc1MitnLF9bNDI3NTIrZ109eVsxNjddW2ddKTtmb3IoeVsxNjhd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiNmRcdWNiNmVcdWNiNmZcdWNiNzBcdWNiNzFcdWNiNzJcdWNiNzNcdWNiNzRcdWNiNzVcdWNiNzZcdWNiNzdcdWNiN2FcdWNiN2JcdWNiN2NcdWNiN2RcdWNiN2VcdWNiN2Zc'@;
put 'dWNiODBcdWNiODFcdWNiODJcdWNiODNcdWNiODRcdWNiODVcdWNiODZcdWNiODdcdWNiODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiODlcdWNiOGFcdWNiOGJcdWNiOGNcdWNiOGRcdWNiOGVcdWNiOGZcdWNiOTBcdWNiOTFcdWNiOTJcdWNiOTNcdWNiOTRcdWNi'@;
put 'OTVcdWNiOTZcdWNiOTdcdWNiOThcdWNiOTlcdWNiOWFcdWNiOWJcdWNiOWRcdWNiOWVcdWNiOWZcdWNiYTBcdWNiYTFcdWNiYTJcdWNiYTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYTRcdWNiYTVcdWNiYTZcdWNiYTdcdWNiYThcdWNiYTlcdWNiYWFcdWNiYWJc'@;
put 'dWNiYWNcdWNiYWRcdWNiYWVcdWNiYWZcdWNiYjBcdWNiYjFcdWNiYjJcdWNiYjNcdWNiYjRcdWNiYjVcdWNiYjZcdWNiYjdcdWNiYjlcdWNiYmFcdWNiYmJcdWNiYmNcdWNiYmRcdWNiYmVcdWNiYmZcdWNiYzBcdWNiYzFcdWNiYzJcdWNiYzNcdWNiYzRceGM2XHhkMFx4YWFcdTAxMjZcdWZm'@;
put 'ZmRcdTAxMzJcdWZmZmRcdTAxM2ZcdTAxNDFceGQ4XHUwMTUyXHhiYVx4ZGVcdTAxNjZcdTAxNGFcdWZmZmRcdTMyNjBcdTMyNjFcdTMyNjJcdTMyNjNcdTMyNjRcdTMyNjVcdTMyNjZcdTMyNjdcdTMyNjhcdTMyNjlcdTMyNmFcdTMyNmJcdTMyNmNcdTMyNmRcdTMyNmVcdTMyNmZcdTMyNzBc'@;
put 'dTMyNzFcdTMyNzJcdTMyNzNcdTMyNzRcdTMyNzVcdTMyNzZcdTMyNzdcdTMyNzhcdTMyNzlcdTMyN2FcdTMyN2JcdTI0ZDBcdTI0ZDFcdTI0ZDJcdTI0ZDNcdTI0ZDRcdTI0ZDVcdTI0ZDZcdTI0ZDdcdTI0ZDhcdTI0ZDlcdTI0ZGFcdTI0ZGJcdTI0ZGNcdTI0ZGRcdTI0ZGVcdTI0ZGZcdTI0'@;
put 'ZTBcdTI0ZTFcdTI0ZTJcdTI0ZTNcdTI0ZTRcdTI0ZTVcdTI0ZTZcdTI0ZTdcdTI0ZThcdTI0ZTlcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdTI0NmFcdTI0NmJcdTI0NmNcdTI0NmRcdTI0NmVceGJkXHUyMTUzXHUyMTU0XHhi'@;
put 'Y1x4YmVcdTIxNWJcdTIxNWNcdTIxNWRcdTIxNWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjhdW2ddXT00MzAwOCtnLF9bNDMwMDgrZ109eVsxNjhdW2ddKTtmb3IoeVsxNjldPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYzVcdWNiYzZcdWNiYzdcdWNiYzhcdWNiYzlcdWNiY2FcdWNiY2JcdWNiY2NcdWNiY2RcdWNiY2VcdWNiY2ZcdWNiZDBcdWNiZDFcdWNiZDJcdWNiZDNcdWNiZDVcdWNiZDZcdWNiZDdc'@;
put 'dWNiZDhcdWNiZDlcdWNiZGFcdWNiZGJcdWNiZGNcdWNiZGRcdWNiZGVcdWNiZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWFcdWNiZWJcdWNiZWNcdWNiZWRcdWNiZWVcdWNiZWZcdWNi'@;
put 'ZjBcdWNiZjFcdWNiZjJcdWNiZjNcdWNiZjRcdWNiZjVcdWNiZjZcdWNiZjdcdWNiZjhcdWNiZjlcdWNiZmFcdWNiZmJcdWNiZmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZmRcdWNiZmVcdWNiZmZcdWNjMDBcdWNjMDFcdWNjMDJcdWNjMDNcdWNjMDRcdWNjMDVc'@;
put 'dWNjMDZcdWNjMDdcdWNjMDhcdWNjMDlcdWNjMGFcdWNjMGJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJcdWNjMTNcdWNjMTVcdWNjMTZcdWNjMTdcdWNjMThcdWNjMTlcdWNjMWFcdWNjMWJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1'@;
put 'MDEzM1x1MDEzOFx1MDE0MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMFx1MzIwMVx1MzIwMlx1MzIwM1x1MzIwNFx1MzIwNVx1MzIwNlx1MzIwN1x1MzIwOFx1MzIwOVx1MzIwYVx1MzIwYlx1MzIwY1x1MzIwZFx1MzIwZVx1MzIwZlx1MzIxMFx1MzIx'@;
put 'MVx1MzIxMlx1MzIxM1x1MzIxNFx1MzIxNVx1MzIxNlx1MzIxN1x1MzIxOFx1MzIxOVx1MzIxYVx1MzIxYlx1MjQ5Y1x1MjQ5ZFx1MjQ5ZVx1MjQ5Zlx1MjRhMFx1MjRhMVx1MjRhMlx1MjRhM1x1MjRhNFx1MjRhNVx1MjRhNlx1MjRhN1x1MjRhOFx1MjRhOVx1MjRhYVx1MjRhYlx1MjRhY1x1'@;
put 'MjRhZFx1MjRhZVx1MjRhZlx1MjRiMFx1MjRiMVx1MjRiMlx1MjRiM1x1MjRiNFx1MjRiNVx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3'@;
put 'Zlx1MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2OV1bZ11dPTQzMjY0K2csX1s0MzI2NCtnXT15WzE2OV1bZ10pO2Zvcih5WzE3MF09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1Y2MyZFx1Y2MyZlx1Y2MzMVx1Y2MzMlx1Y2MzM1x1Y2MzNFx1Y2MzNVx1Y2MzNlx1Y2MzN1x1Y2MzYVx1Y2MzZlx1Y2M0MFx1Y2M0MVx1Y2M0Mlx1Y2M0'@;
put 'M1x1Y2M0Nlx1Y2M0N1x1Y2M0OVx1Y2M0YVx1Y2M0Ylx1Y2M0ZFx1Y2M0ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M0Zlx1Y2M1MFx1Y2M1MVx1Y2M1Mlx1Y2M1M1x1Y2M1Nlx1Y2M1YVx1Y2M1Ylx1Y2M1Y1x1Y2M1ZFx1Y2M1ZVx1Y2M1Zlx1Y2M2MVx1Y2M2Mlx1'@;
put 'Y2M2M1x1Y2M2NVx1Y2M2N1x1Y2M2OVx1Y2M2YVx1Y2M2Ylx1Y2M2Y1x1Y2M2ZFx1Y2M2ZVx1Y2M2Zlx1Y2M3MVx1Y2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M3M1x1Y2M3NFx1Y2M3Nlx1Y2M3N1x1Y2M3OFx1Y2M3OVx1Y2M3YVx1Y2M3Ylx1Y2M3Y1x1Y2M3'@;
put 'ZFx1Y2M3ZVx1Y2M3Zlx1Y2M4MFx1Y2M4MVx1Y2M4Mlx1Y2M4M1x1Y2M4NFx1Y2M4NVx1Y2M4Nlx1Y2M4N1x1Y2M4OFx1Y2M4OVx1Y2M4YVx1Y2M4Ylx1Y2M4Y1x1Y2M4ZFx1Y2M4ZVx1Y2M4Zlx1Y2M5MFx1Y2M5MVx1Y2M5Mlx1Y2M5M1x1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1'@;
put 'MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2'@;
put 'MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1'@;
put 'MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTcwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3MF1bZ11dPTQzNTIwK2csX1s0MzUyMCtnXT15WzE3MF1bZ10pO2Zvcih5WzE3'@;
put 'MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2M5NFx1Y2M5NVx1Y2M5Nlx1Y2M5N1x1Y2M5YVx1Y2M5Ylx1Y2M5ZFx1Y2M5ZVx1Y2M5Zlx1Y2NhMVx1Y2NhMlx1Y2NhM1x1Y2NhNFx1Y2NhNVx1Y2NhNlx1Y2NhN1x1Y2Nh'@;
put 'YVx1Y2NhZVx1Y2NhZlx1Y2NiMFx1Y2NiMVx1Y2NiMlx1Y2NiM1x1Y2NiNlx1Y2NiN1x1Y2NiOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NiYVx1Y2NiYlx1Y2NiZFx1Y2NiZVx1Y2NiZlx1Y2NjMFx1Y2NjMVx1Y2NjMlx1Y2NjM1x1Y2NjNlx1Y2NjOFx1Y2NjYVx1'@;
put 'Y2NjYlx1Y2NjY1x1Y2NjZFx1Y2NjZVx1Y2NjZlx1Y2NkMVx1Y2NkMlx1Y2NkM1x1Y2NkNVx1Y2NkNlx1Y2NkN1x1Y2NkOFx1Y2NkOVx1Y2NkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NkYlx1Y2NkY1x1Y2NkZFx1Y2NkZVx1Y2NkZlx1Y2NlMFx1Y2NlMVx1Y2Nl'@;
put 'Mlx1Y2NlM1x1Y2NlNVx1Y2NlNlx1Y2NlN1x1Y2NlOFx1Y2NlOVx1Y2NlYVx1Y2NlYlx1Y2NlZFx1Y2NlZVx1Y2NlZlx1Y2NmMVx1Y2NmMlx1Y2NmM1x1Y2NmNFx1Y2NmNVx1Y2NmNlx1Y2NmN1x1Y2NmOFx1Y2NmOVx1Y2NmYVx1Y2NmYlx1Y2NmY1x1Y2NmZFx1MzBhMVx1MzBhMlx1MzBhM1x1'@;
put 'MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBi'@;
put 'Zlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1'@;
put 'MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBm'@;
put 'Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTcxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3MV1bZ11dPTQzNzc2K2csX1s0Mzc3NitnXT15WzE3MV1b'@;
put 'Z10pO2Zvcih5WzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMlx1Y2QwM1x1Y2QwNFx1Y2QwNVx1Y2QwNlx1Y2QwN1x1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2Qx'@;
put 'MVx1Y2QxMlx1Y2QxM1x1Y2QxNFx1Y2QxNVx1Y2QxNlx1Y2QxN1x1Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1Y2QyMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZFx1'@;
put 'Y2QyZVx1Y2QyZlx1Y2QzMFx1Y2QzMVx1Y2QzMlx1Y2QzM1x1Y2QzNFx1Y2QzNVx1Y2QzNlx1Y2QzN1x1Y2QzOFx1Y2QzYVx1Y2QzYlx1Y2QzY1x1Y2QzZFx1Y2QzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QzZlx1Y2Q0MFx1Y2Q0MVx1Y2Q0Mlx1Y2Q0M1x1Y2Q0'@;
put 'NFx1Y2Q0NVx1Y2Q0Nlx1Y2Q0N1x1Y2Q0OFx1Y2Q0OVx1Y2Q0YVx1Y2Q0Ylx1Y2Q0Y1x1Y2Q0ZFx1Y2Q0ZVx1Y2Q0Zlx1Y2Q1MFx1Y2Q1MVx1Y2Q1Mlx1Y2Q1M1x1Y2Q1NFx1Y2Q1NVx1Y2Q1Nlx1Y2Q1N1x1Y2Q1OFx1Y2Q1OVx1Y2Q1YVx1Y2Q1Ylx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMFx1'@;
put 'MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQy'@;
put 'Ylx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1'@;
put 'MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTcyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3Ml1bZ11dPTQ0MDMyK2csX1s0NDAz'@;
put 'MitnXT15WzE3Ml1bZ10pO2Zvcih5WzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q2MVx1Y2Q2Mlx1Y2Q2M1x1Y2Q2NVx1Y2Q2Nlx1Y2Q2N1x1Y2Q2OFx1Y2Q2OVx1Y2Q2YVx1Y2Q2Ylx1Y2Q2ZVx1Y2Q3MFx1Y2Q3'@;
put 'Mlx1Y2Q3M1x1Y2Q3NFx1Y2Q3NVx1Y2Q3Nlx1Y2Q3N1x1Y2Q3OVx1Y2Q3YVx1Y2Q3Ylx1Y2Q3Y1x1Y2Q3ZFx1Y2Q3ZVx1Y2Q3Zlx1Y2Q4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Q4MVx1Y2Q4Mlx1Y2Q4M1x1Y2Q4NFx1Y2Q4NVx1Y2Q4Nlx1Y2Q4N1x1Y2Q4OVx1'@;
put 'Y2Q4YVx1Y2Q4Ylx1Y2Q4Y1x1Y2Q4ZFx1Y2Q4ZVx1Y2Q4Zlx1Y2Q5MFx1Y2Q5MVx1Y2Q5Mlx1Y2Q5M1x1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2Rh'@;
put 'M1x1Y2RhNlx1Y2RhOFx1Y2RhYVx1Y2RhYlx1Y2RhY1x1Y2RhZFx1Y2RhZVx1Y2RhZlx1Y2RiMVx1Y2RiMlx1Y2RiM1x1Y2RiNFx1Y2RiNVx1Y2RiNlx1Y2RiN1x1Y2RiOFx1Y2RiOVx1Y2RiYVx1Y2RiYlx1Y2RiY1x1Y2RiZFx1Y2RiZVx1Y2RiZlx1Y2RjMFx1Y2RjMVx1Y2RjMlx1Y2RjM1x1'@;
put 'Y2RjNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTczXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3M11bZ11dPTQ0'@;
put 'Mjg4K2csX1s0NDI4OCtnXT15WzE3M11bZ10pO2Zvcih5WzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RjNlx1Y2RjN1x1Y2RjOFx1Y2RjOVx1Y2RjYVx1Y2RjYlx1Y2RjZFx1Y2RjZVx1Y2RjZlx1Y2RkMVx1Y2Rk'@;
put 'Mlx1Y2RkM1x1Y2RkNFx1Y2RkNVx1Y2RkNlx1Y2RkN1x1Y2RkOFx1Y2RkOVx1Y2RkYVx1Y2RkYlx1Y2RkY1x1Y2RkZFx1Y2RkZVx1Y2RkZlx1Y2RlMFx1Y2RlMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2RlMlx1Y2RlM1x1Y2RlNFx1Y2RlNVx1Y2RlNlx1Y2RlN1x1'@;
put 'Y2RlOVx1Y2RlYVx1Y2RlYlx1Y2RlZFx1Y2RlZVx1Y2RlZlx1Y2RmMVx1Y2RmMlx1Y2RmM1x1Y2RmNFx1Y2RmNVx1Y2RmNlx1Y2RmN1x1Y2RmYVx1Y2RmY1x1Y2RmZVx1Y2RmZlx1Y2UwMFx1Y2UwMVx1Y2UwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UwM1x1Y2Uw'@;
put 'NVx1Y2UwNlx1Y2UwN1x1Y2UwOVx1Y2UwYVx1Y2UwYlx1Y2UwZFx1Y2UwZVx1Y2UwZlx1Y2UxMFx1Y2UxMVx1Y2UxMlx1Y2UxM1x1Y2UxNVx1Y2UxNlx1Y2UxN1x1Y2UxOFx1Y2UxYVx1Y2UxYlx1Y2UxY1x1Y2UxZFx1Y2UxZVx1Y2UxZlx1Y2UyMlx1Y2UyM1x1Y2UyNVx1Y2UyNlx1Y2UyN1x1'@;
put 'Y2UyOVx1Y2UyYVx1Y2UyYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5'@;
put 'WzE3NF1bZ11dPTQ0NTQ0K2csX1s0NDU0NCtnXT15WzE3NF1bZ10pO2Zvcih5WzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNlx1Y2UzN1x1Y2Uz'@;
put 'OFx1Y2UzOVx1Y2UzYVx1Y2UzYlx1Y2UzY1x1Y2UzZFx1Y2UzZVx1Y2UzZlx1Y2U0MFx1Y2U0MVx1Y2U0Mlx1Y2U0M1x1Y2U0NFx1Y2U0NVx1Y2U0Nlx1Y2U0N1x1Y2U0OFx1Y2U0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U0YVx1Y2U0Ylx1Y2U0Y1x1Y2U0ZFx1'@;
put 'Y2U0ZVx1Y2U0Zlx1Y2U1MFx1Y2U1MVx1Y2U1Mlx1Y2U1M1x1Y2U1NFx1Y2U1NVx1Y2U1Nlx1Y2U1N1x1Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2Mlx1Y2U2M1x1Y2U2NFx1Y2U2NVx1Y2U2Nlx1Y2U2N1x1Y2U2YVx1Y2U2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1Y2U2ZVx1Y2U2Zlx1Y2U3MFx1Y2U3MVx1Y2U3Mlx1Y2U3M1x1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3YVx1Y2U3Ylx1Y2U3ZFx1Y2U3ZVx1Y2U3Zlx1Y2U4MFx1Y2U4MVx1Y2U4Mlx1Y2U4M1x1Y2U4Nlx1Y2U4OFx1Y2U4YVx1Y2U4Ylx1Y2U4Y1x1Y2U4ZFx1Y2U4ZVx1Y2U4Zlx1Y2U5Mlx1'@;
put 'Y2U5M1x1Y2U5NVx1Y2U5Nlx1Y2U5N1x1Y2U5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc1XVtnXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoSVt5WzE3NV1bZ11dPTQ0ODAwK2csX1s0NDgwMCtnXT15WzE3NV1bZ10pO2Zvcih5WzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U5YVx1Y2U5Ylx1Y2U5Y1x1Y2U5ZFx1Y2U5ZVx1Y2U5Zlx1Y2Vh'@;
put 'Mlx1Y2VhNlx1Y2VhN1x1Y2VhOFx1Y2VhOVx1Y2VhYVx1Y2VhYlx1Y2VhZVx1Y2VhZlx1Y2ViMFx1Y2ViMVx1Y2ViMlx1Y2ViM1x1Y2ViNFx1Y2ViNVx1Y2ViNlx1Y2ViN1x1Y2ViOFx1Y2ViOVx1Y2ViYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ViYlx1Y2ViY1x1'@;
put 'Y2ViZFx1Y2ViZVx1Y2ViZlx1Y2VjMFx1Y2VjMlx1Y2VjM1x1Y2VjNFx1Y2VjNVx1Y2VjNlx1Y2VjN1x1Y2VjOFx1Y2VjOVx1Y2VjYVx1Y2VjYlx1Y2VjY1x1Y2VjZFx1Y2VjZVx1Y2VjZlx1Y2VkMFx1Y2VkMVx1Y2VkMlx1Y2VkM1x1Y2VkNFx1Y2VkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1Y2VkNlx1Y2VkN1x1Y2VkOFx1Y2VkOVx1Y2VkYVx1Y2VkYlx1Y2VkY1x1Y2VkZFx1Y2VkZVx1Y2VkZlx1Y2VlMFx1Y2VlMVx1Y2VlMlx1Y2VlM1x1Y2VlNlx1Y2VlN1x1Y2VlOVx1Y2VlYVx1Y2VlZFx1Y2VlZVx1Y2VlZlx1Y2VmMFx1Y2VmMVx1Y2VmMlx1Y2VmM1x1'@;
put 'Y2VmNlx1Y2VmYVx1Y2VmYlx1Y2VmY1x1Y2VmZFx1Y2VmZVx1Y2VmZlx1YWMwMFx1YWMwMVx1YWMwNFx1YWMwN1x1YWMwOFx1YWMwOVx1YWMwYVx1YWMxMFx1YWMxMVx1YWMxMlx1YWMxM1x1YWMxNFx1YWMxNVx1YWMxNlx1YWMxN1x1YWMxOVx1YWMxYVx1YWMxYlx1YWMxY1x1YWMxZFx1YWMy'@;
put 'MFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1'@;
put 'YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNk'@;
put 'N1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc2'@;
put 'XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3Nl1bZ11dPTQ1MDU2K2csX1s0NTA1NitnXT15WzE3Nl1bZ10pO2Zvcih5WzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2Yw'@;
put 'N1x1Y2YwOVx1Y2YwYVx1Y2YwYlx1Y2YwY1x1Y2YwZFx1Y2YwZVx1Y2YwZlx1Y2YxMlx1Y2YxNFx1Y2YxNlx1Y2YxN1x1Y2YxOFx1Y2YxOVx1Y2YxYVx1Y2YxYlx1Y2YxZFx1Y2YxZVx1Y2YxZlx1Y2YyMVx1Y2YyMlx1Y2YyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'Y2YyNVx1Y2YyNlx1Y2YyN1x1Y2YyOFx1Y2YyOVx1Y2YyYVx1Y2YyYlx1Y2YyZVx1Y2YzMlx1Y2YzM1x1Y2YzNFx1Y2YzNVx1Y2YzNlx1Y2YzN1x1Y2YzOVx1Y2YzYVx1Y2YzYlx1Y2YzY1x1Y2YzZFx1Y2YzZVx1Y2YzZlx1Y2Y0MFx1Y2Y0MVx1Y2Y0Mlx1Y2Y0M1x1Y2Y0NFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y0NVx1Y2Y0Nlx1Y2Y0N1x1Y2Y0OFx1Y2Y0OVx1Y2Y0YVx1Y2Y0Ylx1Y2Y0Y1x1Y2Y0ZFx1Y2Y0ZVx1Y2Y0Zlx1Y2Y1MFx1Y2Y1MVx1Y2Y1Mlx1Y2Y1M1x1Y2Y1Nlx1Y2Y1N1x1Y2Y1OVx1Y2Y1YVx1Y2Y1Ylx1Y2Y1ZFx1Y2Y1ZVx1Y2Y1Zlx1'@;
put 'Y2Y2MFx1Y2Y2MVx1Y2Y2Mlx1Y2Y2M1x1Y2Y2Nlx1Y2Y2OFx1Y2Y2YVx1Y2Y2Ylx1Y2Y2Y1x1YWQwY1x1YWQwZFx1YWQwZlx1YWQxMVx1YWQxOFx1YWQxY1x1YWQyMFx1YWQyOVx1YWQyY1x1YWQyZFx1YWQzNFx1YWQzNVx1YWQzOFx1YWQzY1x1YWQ0NFx1YWQ0NVx1YWQ0N1x1YWQ0OVx1YWQ1'@;
put 'MFx1YWQ1NFx1YWQ1OFx1YWQ2MVx1YWQ2M1x1YWQ2Y1x1YWQ2ZFx1YWQ3MFx1YWQ3M1x1YWQ3NFx1YWQ3NVx1YWQ3Nlx1YWQ3Ylx1YWQ3Y1x1YWQ3ZFx1YWQ3Zlx1YWQ4MVx1YWQ4Mlx1YWQ4OFx1YWQ4OVx1YWQ4Y1x1YWQ5MFx1YWQ5Y1x1YWQ5ZFx1YWRhNFx1YWRiN1x1YWRjMFx1YWRjMVx1'@;
put 'YWRjNFx1YWRjOFx1YWRkMFx1YWRkMVx1YWRkM1x1YWRkY1x1YWRlMFx1YWRlNFx1YWRmOFx1YWRmOVx1YWRmY1x1YWRmZlx1YWUwMFx1YWUwMVx1YWUwOFx1YWUwOVx1YWUwYlx1YWUwZFx1YWUxNFx1YWUzMFx1YWUzMVx1YWUzNFx1YWUzN1x1YWUzOFx1YWUzYVx1YWU0MFx1YWU0MVx1YWU0'@;
put 'M1x1YWU0NVx1YWU0Nlx1YWU0YVx1YWU0Y1x1YWU0ZFx1YWU0ZVx1YWU1MFx1YWU1NFx1YWU1Nlx1YWU1Y1x1YWU1ZFx1YWU1Zlx1YWU2MFx1YWU2MVx1YWU2NVx1YWU2OFx1YWU2OVx1YWU2Y1x1YWU3MFx1YWU3OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3N10ubGVuZ3RoOysrZyk2'@;
put 'NTUzMyE9PXlbMTc3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3N11bZ11dPTQ1MzEyK2csX1s0NTMxMitnXT15WzE3N11bZ10pO2Zvcih5WzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2'@;
put 'Zlx1Y2Y3Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OVx1Y2Y3YVx1Y2Y3Ylx1Y2Y3Y1x1Y2Y3ZFx1Y2Y3ZVx1Y2Y3Zlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4Nlx1Y2Y4N1x1Y2Y4OFx1Y2Y4OVx1Y2Y4YVx1Y2Y4Ylx1Y2Y4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1Y2Y4ZVx1Y2Y4Zlx1Y2Y5MFx1Y2Y5MVx1Y2Y5Mlx1Y2Y5M1x1Y2Y5NFx1Y2Y5NVx1Y2Y5Nlx1Y2Y5N1x1Y2Y5OFx1Y2Y5OVx1Y2Y5YVx1Y2Y5Ylx1Y2Y5Y1x1Y2Y5ZFx1Y2Y5ZVx1Y2Y5Zlx1Y2ZhMFx1Y2ZhMlx1Y2ZhM1x1Y2ZhNFx1Y2ZhNVx1Y2ZhNlx1Y2ZhN1x1Y2Zh'@;
put 'OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZhYVx1Y2ZhYlx1Y2ZhY1x1Y2ZhZFx1Y2ZhZVx1Y2ZhZlx1Y2ZiMVx1Y2ZiMlx1Y2ZiM1x1Y2ZiNFx1Y2ZiNVx1Y2ZiNlx1Y2ZiN1x1Y2ZiOFx1Y2ZiOVx1Y2ZiYVx1Y2ZiYlx1Y2ZiY1x1Y2ZiZFx1Y2ZiZVx1Y2ZiZlx1'@;
put 'Y2ZjMFx1Y2ZjMVx1Y2ZjMlx1Y2ZjM1x1Y2ZjNVx1Y2ZjNlx1Y2ZjN1x1Y2ZjOFx1Y2ZjOVx1Y2ZjYVx1Y2ZjYlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVk'@;
put 'MVx1YWVkOFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1'@;
put 'YWY1Y1x1YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZm'@;
put 'MVx1YWZmNFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3OF0u'@;
put 'bGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3OF1bZ11dPTQ1NTY4K2csX1s0NTU2OCtnXT15WzE3OF1bZ10pO2Zvcih5WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Zj'@;
put 'Y1x1Y2ZjZFx1Y2ZjZVx1Y2ZjZlx1Y2ZkMFx1Y2ZkMVx1Y2ZkMlx1Y2ZkM1x1Y2ZkNFx1Y2ZkNVx1Y2ZkNlx1Y2ZkN1x1Y2ZkOFx1Y2ZkOVx1Y2ZkYVx1Y2ZkYlx1Y2ZkY1x1Y2ZkZFx1Y2ZkZVx1Y2ZkZlx1Y2ZlMlx1Y2ZlM1x1Y2ZlNVx1Y2ZlNlx1Y2ZlN1x1Y2ZlOVx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZlYVx1Y2ZlYlx1Y2ZlY1x1Y2ZlZFx1Y2ZlZVx1Y2ZlZlx1Y2ZmMlx1Y2ZmNFx1Y2ZmNlx1Y2ZmN1x1Y2ZmOFx1Y2ZmOVx1Y2ZmYVx1Y2ZmYlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNVx1ZDAwNlx1ZDAwN1x1ZDAw'@;
put 'OFx1ZDAwOVx1ZDAwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDAwYlx1ZDAwY1x1ZDAwZFx1ZDAwZVx1ZDAwZlx1ZDAxMFx1ZDAxMlx1ZDAxM1x1ZDAxNFx1ZDAxNVx1ZDAxNlx1ZDAxN1x1ZDAxOVx1ZDAxYVx1ZDAxYlx1ZDAxY1x1ZDAxZFx1ZDAxZVx1ZDAxZlx1'@;
put 'ZDAyMFx1ZDAyMVx1ZDAyMlx1ZDAyM1x1ZDAyNFx1ZDAyNVx1ZDAyNlx1ZDAyN1x1ZDAyOFx1ZDAyOVx1ZDAyYVx1ZDAyYlx1ZDAyY1x1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBh'@;
put 'MFx1YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBhYlx1YjBhY1x1YjBhZFx1YjBhZVx1YjBhZlx1YjBiMVx1YjBiM1x1YjBiNFx1YjBiNVx1YjBiOFx1YjBiY1x1YjBjNFx1YjBjNVx1YjBjN1x1YjBjOFx1YjBjOVx1YjBkMFx1YjBkMVx1YjBkNFx1YjBkOFx1YjBlMFx1YjBlNVx1YjEwOFx1'@;
put 'YjEwOVx1YjEwYlx1YjEwY1x1YjExMFx1YjExMlx1YjExM1x1YjExOFx1YjExOVx1YjExYlx1YjExY1x1YjExZFx1YjEyM1x1YjEyNFx1YjEyNVx1YjEyOFx1YjEyY1x1YjEzNFx1YjEzNVx1YjEzN1x1YjEzOFx1YjEzOVx1YjE0MFx1YjE0MVx1YjE0NFx1YjE0OFx1YjE1MFx1YjE1MVx1YjE1'@;
put 'NFx1YjE1NVx1YjE1OFx1YjE1Y1x1YjE2MFx1YjE3OFx1YjE3OVx1YjE3Y1x1YjE4MFx1YjE4Mlx1YjE4OFx1YjE4OVx1YjE4Ylx1YjE4ZFx1YjE5Mlx1YjE5M1x1YjE5NFx1YjE5OFx1YjE5Y1x1YjFhOFx1YjFjY1x1YjFkMFx1YjFkNFx1YjFkY1x1YjFkZFx1ZmZmZCIuc3BsaXQoIiIpLGc9'@;
put 'MDtnIT15WzE3OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3OV1bZ11dPTQ1ODI0K2csX1s0NTgyNCtnXT15WzE3OV1bZ10pO2Zvcih5WzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZDAyZVx1ZDAyZlx1ZDAzMFx1ZDAzMVx1ZDAzMlx1ZDAzM1x1ZDAzNlx1ZDAzN1x1ZDAzOVx1ZDAzYVx1ZDAzYlx1ZDAzZFx1ZDAzZVx1ZDAzZlx1ZDA0MFx1ZDA0MVx1ZDA0Mlx1ZDA0M1x1ZDA0Nlx1ZDA0OFx1ZDA0YVx1ZDA0Ylx1ZDA0Y1x1ZDA0ZFx1ZDA0ZVx1ZDA0Zlx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA1MVx1ZDA1Mlx1ZDA1M1x1ZDA1NVx1ZDA1Nlx1ZDA1N1x1ZDA1OVx1ZDA1YVx1ZDA1Ylx1ZDA1Y1x1ZDA1ZFx1ZDA1ZVx1ZDA1Zlx1ZDA2MVx1ZDA2Mlx1ZDA2M1x1ZDA2NFx1ZDA2NVx1ZDA2Nlx1ZDA2N1x1ZDA2OFx1ZDA2'@;
put 'OVx1ZDA2YVx1ZDA2Ylx1ZDA2ZVx1ZDA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA3MVx1ZDA3Mlx1ZDA3M1x1ZDA3NVx1ZDA3Nlx1ZDA3N1x1ZDA3OFx1ZDA3OVx1ZDA3YVx1ZDA3Ylx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4Mlx1ZDA4M1x1ZDA4NFx1ZDA4NVx1'@;
put 'ZDA4Nlx1ZDA4N1x1ZDA4OFx1ZDA4OVx1ZDA4YVx1ZDA4Ylx1ZDA4Y1x1ZDA4ZFx1ZDA4ZVx1ZDA4Zlx1ZDA5MFx1ZDA5MVx1ZDA5Mlx1ZDA5M1x1ZDA5NFx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIw'@;
put 'Y1x1YjIxNFx1YjIxNVx1YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIzY1x1YjI1OFx1YjI1Y1x1YjI2MFx1YjI2OFx1YjI2OVx1YjI3NFx1YjI3NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1'@;
put 'YjJhNVx1YjJhNlx1YjJhYVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1YjJjOVx1YjJjY1x1YjJkMFx1YjJkMlx1YjJkOFx1YjJkOVx1YjJkYlx1YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1YjJlOFx1YjJlYlx1YjJlY1x1YjJlZFx1YjJlZVx1YjJlZlx1YjJmM1x1YjJmNFx1YjJm'@;
put 'NVx1YjJmN1x1YjJmOFx1YjJmOVx1YjJmYVx1YjJmYlx1YjJmZlx1YjMwMFx1YjMwMVx1YjMwNFx1YjMwOFx1YjMxMFx1YjMxMVx1YjMxM1x1YjMxNFx1YjMxNVx1YjMxY1x1YjM1NFx1YjM1NVx1YjM1Nlx1YjM1OFx1YjM1Ylx1YjM1Y1x1YjM1ZVx1YjM1Zlx1YjM2NFx1YjM2NVx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLGc9MDtnIT15WzE4MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTgwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4MF1bZ11dPTQ2MDgwK2csX1s0NjA4MCtnXT15WzE4MF1bZ10pO2Zvcih5WzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA5NVx1ZDA5Nlx1ZDA5N1x1ZDA5OFx1ZDA5OVx1ZDA5YVx1ZDA5Ylx1ZDA5Y1x1ZDA5ZFx1ZDA5ZVx1ZDA5Zlx1ZDBhMFx1ZDBhMVx1ZDBhMlx1ZDBhM1x1ZDBhNlx1ZDBhN1x1ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZFx1ZDBhZVx1ZDBhZlx1ZDBiMFx1'@;
put 'ZDBiMVx1ZDBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBiYVx1ZDBiYlx1ZDBiY1x1ZDBiZFx1ZDBiZVx1ZDBiZlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYVx1ZDBjYlx1ZDBjY1x1ZDBjZFx1ZDBjZVx1ZDBj'@;
put 'Zlx1ZDBkMlx1ZDBkNlx1ZDBkN1x1ZDBkOFx1ZDBkOVx1ZDBkYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNVx1ZDBlNlx1ZDBlN1x1ZDBlOFx1ZDBlOVx1ZDBlYVx1ZDBlYlx1ZDBlZVx1ZDBmMlx1'@;
put 'ZDBmM1x1ZDBmNFx1ZDBmNVx1ZDBmNlx1ZDBmN1x1ZDBmOVx1ZDBmYVx1ZDBmYlx1ZDBmY1x1ZDBmZFx1ZDBmZVx1ZDBmZlx1ZDEwMFx1ZDEwMVx1ZDEwMlx1ZDEwM1x1ZDEwNFx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4'@;
put 'M1x1YjM4NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNhY1x1YjNjNFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1'@;
put 'YjQxOFx1YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1YjQ1NFx1YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRj'@;
put 'OFx1YjRkMFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRlY1x1YjRlZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1'@;
put 'YjUzOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTgxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4MV1bZ11dPTQ2MzM2K2csX1s0NjMzNitnXT15WzE4MV1bZ10pO2Zvcih5WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEwNVx1ZDEwNlx1ZDEwN1x1ZDEwOFx1ZDEwOVx1ZDEwYVx1ZDEwYlx1ZDEwY1x1ZDEwZVx1ZDEwZlx1ZDExMFx1ZDExMVx1ZDExMlx1ZDExM1x1ZDExNFx1ZDExNVx1ZDExNlx1ZDExN1x1ZDExOFx1ZDExOVx1ZDExYVx1ZDExYlx1'@;
put 'ZDExY1x1ZDExZFx1ZDExZVx1ZDExZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEyMFx1ZDEyMVx1ZDEyMlx1ZDEyM1x1ZDEyNFx1ZDEyNVx1ZDEyNlx1ZDEyN1x1ZDEyOFx1ZDEyOVx1ZDEyYVx1ZDEyYlx1ZDEyY1x1ZDEyZFx1ZDEyZVx1ZDEyZlx1ZDEzMlx1ZDEz'@;
put 'M1x1ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDEzZlx1ZDE0Mlx1ZDE0Nlx1ZDE0N1x1ZDE0OFx1ZDE0OVx1ZDE0YVx1ZDE0Ylx1ZDE0ZVx1ZDE0Zlx1ZDE1MVx1ZDE1Mlx1ZDE1M1x1'@;
put 'ZDE1NVx1ZDE1Nlx1ZDE1N1x1ZDE1OFx1ZDE1OVx1ZDE1YVx1ZDE1Ylx1ZDE1ZVx1ZDE2MFx1ZDE2Mlx1ZDE2M1x1ZDE2NFx1ZDE2NVx1ZDE2Nlx1ZDE2N1x1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1'@;
put 'MFx1YjU1NFx1YjU1Y1x1YjU1ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1'@;
put 'YjVkOFx1YjVlY1x1YjYxMFx1YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1Yjcy'@;
put 'OVx1YjcyY1x1YjcyZlx1YjczMFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1'@;
put 'Yjc5Mlx1Yjc5Nlx1Yjc5N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTgyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4Ml1bZ11dPTQ2NTkyK2csX1s0NjU5MitnXT15WzE4Ml1bZ10pO2Zvcih5WzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE2ZVx1ZDE2Zlx1ZDE3MFx1ZDE3MVx1ZDE3Mlx1ZDE3M1x1ZDE3NFx1ZDE3NVx1ZDE3Nlx1ZDE3N1x1ZDE3OFx1ZDE3OVx1ZDE3YVx1ZDE3Ylx1ZDE3ZFx1ZDE3ZVx1ZDE3Zlx1ZDE4MFx1ZDE4MVx1ZDE4Mlx1'@;
put 'ZDE4M1x1ZDE4NVx1ZDE4Nlx1ZDE4N1x1ZDE4OVx1ZDE4YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDE4Ylx1ZDE4Y1x1ZDE4ZFx1ZDE4ZVx1ZDE4Zlx1ZDE5MFx1ZDE5MVx1ZDE5Mlx1ZDE5M1x1ZDE5NFx1ZDE5NVx1ZDE5Nlx1ZDE5N1x1ZDE5OFx1ZDE5OVx1ZDE5'@;
put 'YVx1ZDE5Ylx1ZDE5Y1x1ZDE5ZFx1ZDE5ZVx1ZDE5Zlx1ZDFhMlx1ZDFhM1x1ZDFhNVx1ZDFhNlx1ZDFhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFhOVx1ZDFhYVx1ZDFhYlx1ZDFhY1x1ZDFhZFx1ZDFhZVx1ZDFhZlx1ZDFiMlx1ZDFiNFx1ZDFiNlx1ZDFiN1x1'@;
put 'ZDFiOFx1ZDFiOVx1ZDFiYlx1ZDFiZFx1ZDFiZVx1ZDFiZlx1ZDFjMVx1ZDFjMlx1ZDFjM1x1ZDFjNFx1ZDFjNVx1ZDFjNlx1ZDFjN1x1ZDFjOFx1ZDFjOVx1ZDFjYVx1ZDFjYlx1ZDFjY1x1ZDFjZFx1ZDFjZVx1ZDFjZlx1Yjc5OFx1Yjc5OVx1Yjc5Y1x1YjdhMFx1YjdhOFx1YjdhOVx1Yjdh'@;
put 'Ylx1YjdhY1x1YjdhZFx1YjdiNFx1YjdiNVx1YjdiOFx1YjdjN1x1YjdjOVx1YjdlY1x1YjdlZFx1YjdmMFx1YjdmNFx1YjdmY1x1YjdmZFx1YjdmZlx1YjgwMFx1YjgwMVx1YjgwN1x1YjgwOFx1YjgwOVx1YjgwY1x1YjgxMFx1YjgxOFx1YjgxOVx1YjgxYlx1YjgxZFx1YjgyNFx1YjgyNVx1'@;
put 'YjgyOFx1YjgyY1x1YjgzNFx1YjgzNVx1YjgzN1x1YjgzOFx1YjgzOVx1Yjg0MFx1Yjg0NFx1Yjg1MVx1Yjg1M1x1Yjg1Y1x1Yjg1ZFx1Yjg2MFx1Yjg2NFx1Yjg2Y1x1Yjg2ZFx1Yjg2Zlx1Yjg3MVx1Yjg3OFx1Yjg3Y1x1Yjg4ZFx1YjhhOFx1YjhiMFx1YjhiNFx1YjhiOFx1YjhjMFx1Yjhj'@;
put 'MVx1YjhjM1x1YjhjNVx1YjhjY1x1YjhkMFx1YjhkNFx1YjhkZFx1YjhkZlx1YjhlMVx1YjhlOFx1YjhlOVx1YjhlY1x1YjhmMFx1YjhmOFx1YjhmOVx1YjhmYlx1YjhmZFx1YjkwNFx1YjkxOFx1YjkyMFx1YjkzY1x1YjkzZFx1Yjk0MFx1Yjk0NFx1Yjk0Y1x1Yjk0Zlx1Yjk1MVx1Yjk1OFx1'@;
put 'Yjk1OVx1Yjk1Y1x1Yjk2MFx1Yjk2OFx1Yjk2OVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTgzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4M11bZ11dPTQ2ODQ4K2csX1s0Njg0OCtnXT15WzE4M11bZ10pO2Zvcih5WzE4NF09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFkMFx1ZDFkMVx1ZDFkMlx1ZDFkM1x1ZDFkNFx1ZDFkNVx1ZDFkNlx1ZDFkN1x1ZDFkOVx1ZDFkYVx1ZDFkYlx1ZDFkY1x1ZDFkZFx1ZDFkZVx1ZDFkZlx1ZDFlMFx1ZDFlMVx1ZDFlMlx1'@;
put 'ZDFlM1x1ZDFlNFx1ZDFlNVx1ZDFlNlx1ZDFlN1x1ZDFlOFx1ZDFlOVx1ZDFlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFlYlx1ZDFlY1x1ZDFlZFx1ZDFlZVx1ZDFlZlx1ZDFmMFx1ZDFmMVx1ZDFmMlx1ZDFmM1x1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOVx1ZDFm'@;
put 'YVx1ZDFmYlx1ZDFmY1x1ZDFmZFx1ZDFmZVx1ZDFmZlx1ZDIwMFx1ZDIwMVx1ZDIwMlx1ZDIwM1x1ZDIwNFx1ZDIwNVx1ZDIwNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIwOFx1ZDIwYVx1ZDIwYlx1ZDIwY1x1ZDIwZFx1ZDIwZVx1ZDIwZlx1ZDIxMVx1ZDIxMlx1'@;
put 'ZDIxM1x1ZDIxNFx1ZDIxNVx1ZDIxNlx1ZDIxN1x1ZDIxOFx1ZDIxOVx1ZDIxYVx1ZDIxYlx1ZDIxY1x1ZDIxZFx1ZDIxZVx1ZDIxZlx1ZDIyMFx1ZDIyMVx1ZDIyMlx1ZDIyM1x1ZDIyNFx1ZDIyNVx1ZDIyNlx1ZDIyN1x1ZDIyOFx1ZDIyOVx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3'@;
put 'OFx1Yjk3Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZVx1YjljZlx1YjlkMFx1YjlkMVx1YjlkMlx1YjlkOFx1YjlkOVx1YjlkYlx1'@;
put 'YjlkZFx1YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1YjlmNFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0'@;
put 'ZVx1YmE1M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1'@;
put 'YmFiYlx1YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4NF1bZ11dPTQ3MTA0K2csX1s0NzEwNCtnXT15WzE4NF1bZ10pO2Zvcih5'@;
put 'WzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIzMVx1ZDIzMlx1ZDIzM1x1ZDIzNVx1ZDIzNlx1ZDIzN1x1ZDIzOFx1ZDIzOVx1ZDIzYVx1ZDIzYlx1ZDIzZVx1ZDI0MFx1'@;
put 'ZDI0Mlx1ZDI0M1x1ZDI0NFx1ZDI0NVx1ZDI0Nlx1ZDI0N1x1ZDI0OVx1ZDI0YVx1ZDI0Ylx1ZDI0Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI0ZFx1ZDI0ZVx1ZDI0Zlx1ZDI1MFx1ZDI1MVx1ZDI1Mlx1ZDI1M1x1ZDI1NFx1ZDI1NVx1ZDI1Nlx1ZDI1N1x1ZDI1'@;
put 'OFx1ZDI1OVx1ZDI1YVx1ZDI1Ylx1ZDI1ZFx1ZDI1ZVx1ZDI1Zlx1ZDI2MFx1ZDI2MVx1ZDI2Mlx1ZDI2M1x1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2OVx1ZDI2YVx1ZDI2Ylx1ZDI2Y1x1ZDI2ZFx1ZDI2ZVx1ZDI2Zlx1'@;
put 'ZDI3MFx1ZDI3MVx1ZDI3Mlx1ZDI3M1x1ZDI3NFx1ZDI3NVx1ZDI3Nlx1ZDI3N1x1ZDI3OFx1ZDI3OVx1ZDI3YVx1ZDI3Ylx1ZDI3Y1x1ZDI3ZFx1ZDI3ZVx1ZDI3Zlx1ZDI4Mlx1ZDI4M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIw'@;
put 'ZFx1YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1'@;
put 'YmI4OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMwMFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNFx1YmMx'@;
put 'NVx1YmMxNlx1YmMxN1x1YmMxOFx1YmMxYlx1YmMxY1x1YmMxZFx1YmMxZVx1YmMxZlx1YmMyNFx1YmMyNVx1YmMyN1x1YmMyOVx1YmMyZFx1YmMzMFx1YmMzMVx1YmMzNFx1YmMzOFx1YmM0MFx1YmM0MVx1YmM0M1x1YmM0NFx1YmM0NVx1YmM0OVx1YmM0Y1x1YmM0ZFx1YmM1MFx1YmM1ZFx1'@;
put 'YmM4NFx1YmM4NVx1YmM4OFx1YmM4Ylx1YmM4Y1x1YmM4ZVx1YmM5NFx1YmM5NVx1YmM5N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4NV1bZ11dPTQ3MzYwK2csX1s0NzM2MCtnXT15WzE4'@;
put 'NV1bZ10pO2Zvcih5WzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI4ZFx1ZDI4ZVx1ZDI4Zlx1ZDI5Mlx1ZDI5M1x1ZDI5NFx1ZDI5Nlx1ZDI5N1x1ZDI5OFx1ZDI5OVx1ZDI5YVx1ZDI5Ylx1ZDI5ZFx1ZDI5ZVx1'@;
put 'ZDI5Zlx1ZDJhMVx1ZDJhMlx1ZDJhM1x1ZDJhNVx1ZDJhNlx1ZDJhN1x1ZDJhOFx1ZDJhOVx1ZDJhYVx1ZDJhYlx1ZDJhZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJhZVx1ZDJhZlx1ZDJiMFx1ZDJiMlx1ZDJiM1x1ZDJiNFx1ZDJiNVx1ZDJiNlx1ZDJiN1x1ZDJi'@;
put 'YVx1ZDJiYlx1ZDJiZFx1ZDJiZVx1ZDJjMVx1ZDJjM1x1ZDJjNFx1ZDJjNVx1ZDJjNlx1ZDJjN1x1ZDJjYVx1ZDJjY1x1ZDJjZFx1ZDJjZVx1ZDJjZlx1ZDJkMFx1ZDJkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJkMlx1ZDJkM1x1ZDJkNVx1ZDJkNlx1ZDJkN1x1'@;
put 'ZDJkOVx1ZDJkYVx1ZDJkYlx1ZDJkZFx1ZDJkZVx1ZDJkZlx1ZDJlMFx1ZDJlMVx1ZDJlMlx1ZDJlM1x1ZDJlNlx1ZDJlN1x1ZDJlOFx1ZDJlOVx1ZDJlYVx1ZDJlYlx1ZDJlY1x1ZDJlZFx1ZDJlZVx1ZDJlZlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5'@;
put 'OVx1YmM5YVx1YmNhMFx1YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNiMFx1YmNiMVx1YmNiM1x1YmNiNFx1YmNiNVx1YmNiY1x1YmNiZFx1YmNjMFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNkMFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1'@;
put 'YmQwNFx1YmQwNVx1YmQwN1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1YmQyY1x1YmQ0MFx1YmQ0OFx1YmQ0OVx1YmQ0Y1x1YmQ1MFx1YmQ1OFx1YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5'@;
put 'NVx1YmQ5OVx1YmQ5YVx1YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRkNFx1YmRkNVx1YmRkOFx1YmRkY1x1YmRlOVx1YmRmMFx1YmRmNFx1YmRmOFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUwY1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1'@;
put 'YmU0Y1x1YmU0ZVx1YmU1NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1YmU1Ylx1YmU2MFx1YmU2MVx1YmU2NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4Nl1bZ11dPTQ3NjE2K2csX1s0'@;
put 'NzYxNitnXT15WzE4Nl1bZ10pO2Zvcih5WzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJmYlx1ZDJmY1x1ZDJmZFx1ZDJmZVx1ZDJmZlx1ZDMwMlx1ZDMwNFx1ZDMwNlx1ZDMwN1x1ZDMwOFx1ZDMwOVx1ZDMwYVx1'@;
put 'ZDMwYlx1ZDMwZlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxN1x1ZDMxOFx1ZDMxOVx1ZDMxYVx1ZDMxYlx1ZDMxZVx1ZDMyMlx1ZDMyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMy'@;
put 'Zlx1ZDMzMVx1ZDMzMlx1ZDMzM1x1ZDMzNFx1ZDMzNVx1ZDMzNlx1ZDMzN1x1ZDMzYVx1ZDMzZVx1ZDMzZlx1ZDM0MFx1ZDM0MVx1ZDM0Mlx1ZDM0M1x1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM0YVx1ZDM0Ylx1ZDM0Y1x1'@;
put 'ZDM0ZFx1ZDM0ZVx1ZDM0Zlx1ZDM1MFx1ZDM1MVx1ZDM1Mlx1ZDM1M1x1ZDM1NFx1ZDM1NVx1ZDM1Nlx1ZDM1N1x1ZDM1OFx1ZDM1OVx1ZDM1YVx1ZDM1Ylx1ZDM1Y1x1ZDM1ZFx1ZDM1ZVx1ZDM1Zlx1ZDM2MFx1ZDM2MVx1ZDM2Mlx1ZDM2M1x1ZDM2NFx1ZDM2NVx1ZDM2Nlx1ZDM2N1x1ZDM2'@;
put 'OFx1ZDM2OVx1YmU2OFx1YmU2YVx1YmU3MFx1YmU3MVx1YmU3M1x1YmU3NFx1YmU3NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1'@;
put 'YmVlM1x1YmVlNFx1YmVlNVx1YmVlY1x1YmYwMVx1YmYwOFx1YmYwOVx1YmYxOFx1YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZk'@;
put 'Zlx1YmZlMVx1YzAzY1x1YzA1MVx1YzA1OFx1YzA1Y1x1YzA2MFx1YzA2OFx1YzA2OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1'@;
put 'YzBjMFx1YzBjMVx1YzBjNVx1YzBjOFx1YzBjOVx1YzBjY1x1YzBkMFx1YzBkOFx1YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4N10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4N11bZ11d'@;
put 'PTQ3ODcyK2csX1s0Nzg3MitnXT15WzE4N11bZ10pO2Zvcih5WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM2YVx1ZDM2Ylx1ZDM2Y1x1ZDM2ZFx1ZDM2ZVx1ZDM2Zlx1ZDM3MFx1ZDM3MVx1ZDM3Mlx1ZDM3M1x1'@;
put 'ZDM3NFx1ZDM3NVx1ZDM3Nlx1ZDM3N1x1ZDM3OFx1ZDM3OVx1ZDM3YVx1ZDM3Ylx1ZDM3ZVx1ZDM3Zlx1ZDM4MVx1ZDM4Mlx1ZDM4M1x1ZDM4NVx1ZDM4Nlx1ZDM4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM4OFx1ZDM4OVx1ZDM4YVx1ZDM4Ylx1ZDM4ZVx1ZDM5'@;
put 'Mlx1ZDM5M1x1ZDM5NFx1ZDM5NVx1ZDM5Nlx1ZDM5N1x1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMVx1ZDNhMlx1ZDNhM1x1ZDNhNFx1ZDNhNVx1ZDNhNlx1ZDNhN1x1ZDNhYVx1ZDNhY1x1ZDNhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNhZlx1'@;
put 'ZDNiMFx1ZDNiMVx1ZDNiMlx1ZDNiM1x1ZDNiNVx1ZDNiNlx1ZDNiN1x1ZDNiOVx1ZDNiYVx1ZDNiYlx1ZDNiZFx1ZDNiZVx1ZDNiZlx1ZDNjMFx1ZDNjMVx1ZDNjMlx1ZDNjM1x1ZDNjNlx1ZDNjN1x1ZDNjYVx1ZDNjYlx1ZDNjY1x1ZDNjZFx1ZDNjZVx1ZDNjZlx1ZDNkMVx1ZDNkMlx1ZDNk'@;
put 'M1x1ZDNkNFx1ZDNkNVx1ZDNkNlx1YzBlNVx1YzBlOFx1YzBlY1x1YzBmNFx1YzBmNVx1YzBmN1x1YzBmOVx1YzEwMFx1YzEwNFx1YzEwOFx1YzExMFx1YzExNVx1YzExY1x1YzExZFx1YzExZVx1YzExZlx1YzEyMFx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1'@;
put 'YzEzMFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4'@;
put 'ZVx1YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFlMFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1'@;
put 'YzIwMFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg4XVtnXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'SVt5WzE4OF1bZ11dPTQ4MTI4K2csX1s0ODEyOCtnXT15WzE4OF1bZ10pO2Zvcih5WzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNkN1x1ZDNkOVx1ZDNkYVx1ZDNkYlx1ZDNkY1x1ZDNkZFx1ZDNkZVx1ZDNkZlx1'@;
put 'ZDNlMFx1ZDNlMlx1ZDNlNFx1ZDNlNVx1ZDNlNlx1ZDNlN1x1ZDNlOFx1ZDNlOVx1ZDNlYVx1ZDNlYlx1ZDNlZVx1ZDNlZlx1ZDNmMVx1ZDNmMlx1ZDNmM1x1ZDNmNVx1ZDNmNlx1ZDNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDNmOFx1ZDNmOVx1ZDNmYVx1ZDNm'@;
put 'Ylx1ZDNmZVx1ZDQwMFx1ZDQwMlx1ZDQwM1x1ZDQwNFx1ZDQwNVx1ZDQwNlx1ZDQwN1x1ZDQwOVx1ZDQwYVx1ZDQwYlx1ZDQwY1x1ZDQwZFx1ZDQwZVx1ZDQwZlx1ZDQxMFx1ZDQxMVx1ZDQxMlx1ZDQxM1x1ZDQxNFx1ZDQxNVx1ZDQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZDQxN1x1ZDQxOFx1ZDQxOVx1ZDQxYVx1ZDQxYlx1ZDQxY1x1ZDQxZVx1ZDQxZlx1ZDQyMFx1ZDQyMVx1ZDQyMlx1ZDQyM1x1ZDQyNFx1ZDQyNVx1ZDQyNlx1ZDQyN1x1ZDQyOFx1ZDQyOVx1ZDQyYVx1ZDQyYlx1ZDQyY1x1ZDQyZFx1ZDQyZVx1ZDQyZlx1ZDQzMFx1ZDQzMVx1ZDQz'@;
put 'Mlx1ZDQzM1x1ZDQzNFx1ZDQzNVx1ZDQzNlx1ZDQzN1x1YzIyZlx1YzIzMVx1YzIzMlx1YzIzNFx1YzI0OFx1YzI1MFx1YzI1MVx1YzI1NFx1YzI1OFx1YzI2MFx1YzI2NVx1YzI2Y1x1YzI2ZFx1YzI3MFx1YzI3NFx1YzI3Y1x1YzI3ZFx1YzI3Zlx1YzI4MVx1YzI4OFx1YzI4OVx1YzI5MFx1'@;
put 'YzI5OFx1YzI5Ylx1YzI5ZFx1YzJhNFx1YzJhNVx1YzJhOFx1YzJhY1x1YzJhZFx1YzJiNFx1YzJiNVx1YzJiN1x1YzJiOVx1YzJkY1x1YzJkZFx1YzJlMFx1YzJlM1x1YzJlNFx1YzJlYlx1YzJlY1x1YzJlZFx1YzJlZlx1YzJmMVx1YzJmNlx1YzJmOFx1YzJmOVx1YzJmYlx1YzJmY1x1YzMw'@;
put 'MFx1YzMwOFx1YzMwOVx1YzMwY1x1YzMwZFx1YzMxM1x1YzMxNFx1YzMxNVx1YzMxOFx1YzMxY1x1YzMyNFx1YzMyNVx1YzMyOFx1YzMyOVx1YzM0NVx1YzM2OFx1YzM2OVx1YzM2Y1x1YzM3MFx1YzM3Mlx1YzM3OFx1YzM3OVx1YzM3Y1x1YzM3ZFx1YzM4NFx1YzM4OFx1YzM4Y1x1YzNjMFx1'@;
put 'YzNkOFx1YzNkOVx1YzNkY1x1YzNkZlx1YzNlMFx1YzNlMlx1YzNlOFx1YzNlOVx1YzNlZFx1YzNmNFx1YzNmNVx1YzNmOFx1YzQwOFx1YzQxMFx1YzQyNFx1YzQyY1x1YzQzMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg5XVtnXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoSVt5WzE4OV1bZ11dPTQ4Mzg0K2csX1s0ODM4NCtnXT15WzE4OV1bZ10pO2Zvcih5WzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQzOFx1ZDQzOVx1ZDQzYVx1ZDQzYlx1ZDQzY1x1ZDQzZFx1'@;
put 'ZDQzZVx1ZDQzZlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NVx1ZDQ0Nlx1ZDQ0N1x1ZDQ0OFx1ZDQ0OVx1ZDQ0YVx1ZDQ0Ylx1ZDQ0Y1x1ZDQ0ZFx1ZDQ0ZVx1ZDQ0Zlx1ZDQ1MFx1ZDQ1MVx1ZDQ1Mlx1ZDQ1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ1NFx1ZDQ1'@;
put 'NVx1ZDQ1Nlx1ZDQ1N1x1ZDQ1OFx1ZDQ1OVx1ZDQ1YVx1ZDQ1Ylx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NVx1ZDQ2Nlx1ZDQ2N1x1ZDQ2OFx1ZDQ2OVx1ZDQ2YVx1ZDQ2Ylx1ZDQ2Y1x1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ3M1x1ZDQ3NFx1ZDQ3NVx1ZDQ3Nlx1ZDQ3N1x1ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4M1x1ZDQ4NFx1ZDQ4NVx1ZDQ4Nlx1ZDQ4N1x1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZVx1ZDQ4Zlx1ZDQ5MFx1ZDQ5MVx1ZDQ5Mlx1ZDQ5M1x1ZDQ5NVx1ZDQ5'@;
put 'Nlx1ZDQ5N1x1ZDQ5OFx1ZDQ5OVx1ZDQ5YVx1ZDQ5Ylx1ZDQ5Y1x1ZDQ5ZFx1YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1'@;
put 'YzRmOFx1YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUxNFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1'@;
put 'NVx1YzU1N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1'@;
put 'YzVhMFx1YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzViY1x1YzViZFx1YzViZVx1YzVjNFx1YzVjNVx1YzVjNlx1YzVjN1x1YzVjOFx1YzVjOVx1YzVjYVx1YzVjY1x1YzVjZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlb'@;
put 'MTkwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5MF1bZ11dPTQ4NjQwK2csX1s0ODY0MCtnXT15WzE5MF1bZ10pO2Zvcih5WzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ5ZVx1ZDQ5Zlx1ZDRhMFx1ZDRhMVx1'@;
put 'ZDRhMlx1ZDRhM1x1ZDRhNFx1ZDRhNVx1ZDRhNlx1ZDRhN1x1ZDRhOFx1ZDRhYVx1ZDRhYlx1ZDRhY1x1ZDRhZFx1ZDRhZVx1ZDRhZlx1ZDRiMFx1ZDRiMVx1ZDRiMlx1ZDRiM1x1ZDRiNFx1ZDRiNVx1ZDRiNlx1ZDRiN1x1ZDRiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZDRiOVx1ZDRiYVx1ZDRiYlx1ZDRiY1x1ZDRiZFx1ZDRiZVx1ZDRiZlx1ZDRjMFx1ZDRjMVx1ZDRjMlx1ZDRjM1x1ZDRjNFx1ZDRjNVx1ZDRjNlx1ZDRjN1x1ZDRjOFx1ZDRjOVx1ZDRjYVx1ZDRjYlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRkNlx1ZDRkN1x1ZDRkOFx1ZDRkOVx1ZDRkYVx1ZDRkYlx1ZDRkZFx1ZDRkZVx1ZDRlMFx1ZDRlMVx1ZDRlMlx1ZDRlM1x1ZDRlNFx1ZDRlNVx1ZDRlNlx1ZDRlN1x1ZDRlOVx1ZDRlYVx1ZDRlYlx1ZDRlZFx1ZDRlZVx1ZDRlZlx1ZDRm'@;
put 'MVx1ZDRmMlx1ZDRmM1x1ZDRmNFx1ZDRmNVx1ZDRmNlx1ZDRmN1x1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmY1x1YzVmZFx1YzVmZVx1'@;
put 'YzVmZlx1YzYwMFx1YzYwMVx1YzYwNVx1YzYwNlx1YzYwN1x1YzYwOFx1YzYwY1x1YzYxMFx1YzYxOFx1YzYxOVx1YzYxYlx1YzYxY1x1YzYyNFx1YzYyNVx1YzYyOFx1YzYyY1x1YzYyZFx1YzYyZVx1YzYzMFx1YzYzM1x1YzYzNFx1YzYzNVx1YzYzN1x1YzYzOVx1YzYzYlx1YzY0MFx1YzY0'@;
put 'MVx1YzY0NFx1YzY0OFx1YzY1MFx1YzY1MVx1YzY1M1x1YzY1NFx1YzY1NVx1YzY1Y1x1YzY1ZFx1YzY2MFx1YzY2Y1x1YzY2Zlx1YzY3MVx1YzY3OFx1YzY3OVx1YzY3Y1x1YzY4MFx1YzY4OFx1YzY4OVx1YzY4Ylx1YzY4ZFx1YzY5NFx1YzY5NVx1YzY5OFx1YzY5Y1x1YzZhNFx1YzZhNVx1'@;
put 'YzZhN1x1YzZhOVx1YzZiMFx1YzZiMVx1YzZiNFx1YzZiOFx1YzZiOVx1YzZiYVx1YzZjMFx1YzZjMVx1YzZjM1x1YzZjNVx1YzZjY1x1YzZjZFx1YzZkMFx1YzZkNFx1YzZkY1x1YzZkZFx1YzZlMFx1YzZlMVx1YzZlOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5MV0ubGVuZ3RoOysr'@;
put 'Zyk2NTUzMyE9PXlbMTkxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5MV1bZ11dPTQ4ODk2K2csX1s0ODg5NitnXT15WzE5MV1bZ10pO2Zvcih5WzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDRmZVx1ZDRmZlx1'@;
put 'ZDUwMFx1ZDUwMVx1ZDUwMlx1ZDUwM1x1ZDUwNVx1ZDUwNlx1ZDUwN1x1ZDUwOVx1ZDUwYVx1ZDUwYlx1ZDUwZFx1ZDUwZVx1ZDUwZlx1ZDUxMFx1ZDUxMVx1ZDUxMlx1ZDUxM1x1ZDUxNlx1ZDUxOFx1ZDUxOVx1ZDUxYVx1ZDUxYlx1ZDUxY1x1ZDUxZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZDUxZVx1ZDUxZlx1ZDUyMFx1ZDUyMVx1ZDUyMlx1ZDUyM1x1ZDUyNFx1ZDUyNVx1ZDUyNlx1ZDUyN1x1ZDUyOFx1ZDUyOVx1ZDUyYVx1ZDUyYlx1ZDUyY1x1ZDUyZFx1ZDUyZVx1ZDUyZlx1ZDUzMFx1ZDUzMVx1ZDUzMlx1ZDUzM1x1ZDUzNFx1ZDUzNVx1ZDUzNlx1'@;
put 'ZDUzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDUzOFx1ZDUzOVx1ZDUzYVx1ZDUzYlx1ZDUzZVx1ZDUzZlx1ZDU0MVx1ZDU0Mlx1ZDU0M1x1ZDU0NVx1ZDU0Nlx1ZDU0N1x1ZDU0OFx1ZDU0OVx1ZDU0YVx1ZDU0Ylx1ZDU0ZVx1ZDU1MFx1ZDU1Mlx1ZDU1M1x1ZDU1'@;
put 'NFx1ZDU1NVx1ZDU1Nlx1ZDU1N1x1ZDU1YVx1ZDU1Ylx1ZDU1ZFx1ZDU1ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZmZFx1YzcwNFx1YzcwNVx1YzcwOFx1YzcwY1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1'@;
put 'YzcyNFx1YzcyOFx1YzczMFx1YzczMVx1YzczM1x1YzczNVx1YzczN1x1YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MVx1Yzc1Mlx1Yzc1M1x1Yzc1NFx1Yzc1NVx1Yzc1Nlx1Yzc1N1x1Yzc1OFx1Yzc1Y1x1Yzc2MFx1Yzc2OFx1Yzc2Ylx1Yzc3'@;
put 'NFx1Yzc3NVx1Yzc3OFx1Yzc3Y1x1Yzc3ZFx1Yzc3ZVx1Yzc4M1x1Yzc4NFx1Yzc4NVx1Yzc4N1x1Yzc4OFx1Yzc4OVx1Yzc4YVx1Yzc4ZVx1Yzc5MFx1Yzc5MVx1Yzc5NFx1Yzc5Nlx1Yzc5N1x1Yzc5OFx1Yzc5YVx1YzdhMFx1YzdhMVx1YzdhM1x1YzdhNFx1YzdhNVx1YzdhNlx1YzdhY1x1'@;
put 'YzdhZFx1YzdiMFx1YzdiNFx1YzdiY1x1YzdiZFx1YzdiZlx1YzdjMFx1YzdjMVx1YzdjOFx1YzdjOVx1YzdjY1x1YzdjZVx1YzdkMFx1YzdkOFx1YzdkZFx1YzdlNFx1YzdlOFx1YzdlY1x1YzgwMFx1YzgwMVx1YzgwNFx1YzgwOFx1YzgwYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5'@;
put 'Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTkyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5Ml1bZ11dPTQ5MTUyK2csX1s0OTE1MitnXT15WzE5Ml1bZ10pO2Zvcih5WzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZDU2NFx1ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZVx1ZDU2Zlx1ZDU3MFx1ZDU3MVx1ZDU3Mlx1ZDU3M1x1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZFx1ZDU3ZVx1ZDU3Zlx1ZDU4MFx1ZDU4MVx1ZDU4Mlx1ZDU4M1x1ZDU4Nlx1ZDU4YVx1ZDU4Ylx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MVx1ZDU5Mlx1ZDU5M1x1ZDU5NFx1ZDU5NVx1ZDU5Nlx1ZDU5N1x1ZDU5OFx1ZDU5OVx1ZDU5YVx1ZDU5Ylx1ZDU5Y1x1ZDU5ZFx1ZDU5ZVx1ZDU5Zlx1ZDVhMFx1ZDVhMVx1ZDVhMlx1ZDVhM1x1'@;
put 'ZDVhNFx1ZDVhNlx1ZDVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVhOFx1ZDVhOVx1ZDVhYVx1ZDVhYlx1ZDVhY1x1ZDVhZFx1ZDVhZVx1ZDVhZlx1ZDViMFx1ZDViMVx1ZDViMlx1ZDViM1x1ZDViNFx1ZDViNVx1ZDViNlx1ZDViN1x1ZDViOFx1ZDViOVx1ZDVi'@;
put 'YVx1ZDViYlx1ZDViY1x1ZDViZFx1ZDViZVx1ZDViZlx1ZDVjMFx1ZDVjMVx1ZDVjMlx1ZDVjM1x1ZDVjNFx1ZDVjNVx1ZDVjNlx1ZDVjN1x1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1'@;
put 'YzgzY1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1Yzhi'@;
put 'ZFx1YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1'@;
put 'Yzk1OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkM1x1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LGc9MDtnIT15WzE5M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTkzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5M11bZ11dPTQ5NDA4K2csX1s0OTQwOCtnXT15WzE5M11bZ10pO2Zvcih5WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkM1x1ZDVkNFx1ZDVkNVx1ZDVkNlx1ZDVkN1x1ZDVkYVx1ZDVkY1x1ZDVkZVx1ZDVkZlx1ZDVlMFx1ZDVlMVx1ZDVlMlx1ZDVlM1x1ZDVlNlx1ZDVlN1x1ZDVlOVx1ZDVlYVx1ZDVlYlx1ZDVlZFx1ZDVl'@;
put 'ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDVlZlx1ZDVmMFx1ZDVmMVx1ZDVmMlx1ZDVmM1x1ZDVmNlx1ZDVmOFx1ZDVmYVx1ZDVmYlx1ZDVmY1x1ZDVmZFx1ZDVmZVx1ZDVmZlx1ZDYwMlx1ZDYwM1x1ZDYwNVx1ZDYwNlx1ZDYwN1x1ZDYwOVx1ZDYwYVx1ZDYwYlx1'@;
put 'ZDYwY1x1ZDYwZFx1ZDYwZVx1ZDYwZlx1ZDYxMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYxNlx1ZDYxN1x1ZDYxOFx1ZDYxOVx1ZDYxYVx1ZDYxYlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNVx1ZDYyNlx1ZDYyN1x1ZDYyOFx1ZDYy'@;
put 'OVx1ZDYyYVx1ZDYyYlx1ZDYyY1x1ZDYyZVx1ZDYyZlx1ZDYzMFx1ZDYzMVx1ZDYzMlx1ZDYzM1x1ZDYzNFx1ZDYzNVx1ZDYzNlx1ZDYzN1x1ZDYzYVx1ZDYzYlx1YzlkNVx1YzlkNlx1YzlkOVx1YzlkYVx1YzlkY1x1YzlkZFx1YzllMFx1YzllMlx1YzllNFx1YzllN1x1YzllY1x1YzllZFx1'@;
put 'YzllZlx1YzlmMFx1YzlmMVx1YzlmOFx1YzlmOVx1YzlmY1x1Y2EwMFx1Y2EwOFx1Y2EwOVx1Y2EwYlx1Y2EwY1x1Y2EwZFx1Y2ExNFx1Y2ExOFx1Y2EyOVx1Y2E0Y1x1Y2E0ZFx1Y2E1MFx1Y2E1NFx1Y2E1Y1x1Y2E1ZFx1Y2E1Zlx1Y2E2MFx1Y2E2MVx1Y2E2OFx1Y2E3ZFx1Y2E4NFx1Y2E5'@;
put 'OFx1Y2FiY1x1Y2FiZFx1Y2FjMFx1Y2FjNFx1Y2FjY1x1Y2FjZFx1Y2FjZlx1Y2FkMVx1Y2FkM1x1Y2FkOFx1Y2FkOVx1Y2FlMFx1Y2FlY1x1Y2FmNFx1Y2IwOFx1Y2IxMFx1Y2IxNFx1Y2IxOFx1Y2IyMFx1Y2IyMVx1Y2I0MVx1Y2I0OFx1Y2I0OVx1Y2I0Y1x1Y2I1MFx1Y2I1OFx1Y2I1OVx1'@;
put 'Y2I1ZFx1Y2I2NFx1Y2I3OFx1Y2I3OVx1Y2I5Y1x1Y2JiOFx1Y2JkNFx1Y2JlNFx1Y2JlN1x1Y2JlOVx1Y2MwY1x1Y2MwZFx1Y2MxMFx1Y2MxNFx1Y2MxY1x1Y2MxZFx1Y2MyMVx1Y2MyMlx1Y2MyN1x1Y2MyOFx1Y2MyOVx1Y2MyY1x1Y2MyZVx1Y2MzMFx1Y2MzOFx1Y2MzOVx1Y2MzYlx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5NF1bZ11dPTQ5NjY0K2csX1s0OTY2NCtnXT15WzE5NF1bZ10pO2Zvcih5WzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDYzZFx1ZDYzZVx1ZDYzZlx1ZDY0MVx1ZDY0Mlx1ZDY0M1x1ZDY0NFx1ZDY0Nlx1ZDY0N1x1ZDY0YVx1ZDY0Y1x1ZDY0ZVx1ZDY0Zlx1ZDY1MFx1ZDY1Mlx1ZDY1M1x1ZDY1Nlx1ZDY1N1x1ZDY1OVx1ZDY1YVx1ZDY1Ylx1ZDY1ZFx1ZDY1ZVx1ZDY1'@;
put 'Zlx1ZDY2MFx1ZDY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY2Mlx1ZDY2M1x1ZDY2NFx1ZDY2NVx1ZDY2Nlx1ZDY2OFx1ZDY2YVx1ZDY2Ylx1ZDY2Y1x1ZDY2ZFx1ZDY2ZVx1ZDY2Zlx1ZDY3Mlx1ZDY3M1x1ZDY3NVx1ZDY3Nlx1ZDY3N1x1ZDY3OFx1ZDY3OVx1'@;
put 'ZDY3YVx1ZDY3Ylx1ZDY3Y1x1ZDY3ZFx1ZDY3ZVx1ZDY3Zlx1ZDY4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDY4MVx1ZDY4Mlx1ZDY4NFx1ZDY4Nlx1ZDY4N1x1ZDY4OFx1ZDY4OVx1ZDY4YVx1ZDY4Ylx1ZDY4ZVx1ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5'@;
put 'NVx1ZDY5Nlx1ZDY5N1x1ZDY5OFx1ZDY5OVx1ZDY5YVx1ZDY5Ylx1ZDY5Y1x1ZDY5ZVx1ZDZhMFx1ZDZhMlx1ZDZhM1x1ZDZhNFx1ZDZhNVx1ZDZhNlx1ZDZhN1x1ZDZhOVx1ZDZhYVx1Y2MzY1x1Y2MzZFx1Y2MzZVx1Y2M0NFx1Y2M0NVx1Y2M0OFx1Y2M0Y1x1Y2M1NFx1Y2M1NVx1Y2M1N1x1'@;
put 'Y2M1OFx1Y2M1OVx1Y2M2MFx1Y2M2NFx1Y2M2Nlx1Y2M2OFx1Y2M3MFx1Y2M3NVx1Y2M5OFx1Y2M5OVx1Y2M5Y1x1Y2NhMFx1Y2NhOFx1Y2NhOVx1Y2NhYlx1Y2NhY1x1Y2NhZFx1Y2NiNFx1Y2NiNVx1Y2NiOFx1Y2NiY1x1Y2NjNFx1Y2NjNVx1Y2NjN1x1Y2NjOVx1Y2NkMFx1Y2NkNFx1Y2Nl'@;
put 'NFx1Y2NlY1x1Y2NmMFx1Y2QwMVx1Y2QwOFx1Y2QwOVx1Y2QwY1x1Y2QxMFx1Y2QxOFx1Y2QxOVx1Y2QxYlx1Y2QxZFx1Y2QyNFx1Y2QyOFx1Y2QyY1x1Y2QzOVx1Y2Q1Y1x1Y2Q2MFx1Y2Q2NFx1Y2Q2Y1x1Y2Q2ZFx1Y2Q2Zlx1Y2Q3MVx1Y2Q3OFx1Y2Q4OFx1Y2Q5NFx1Y2Q5NVx1Y2Q5OFx1'@;
put 'Y2Q5Y1x1Y2RhNFx1Y2RhNVx1Y2RhN1x1Y2RhOVx1Y2RiMFx1Y2RjNFx1Y2RjY1x1Y2RkMFx1Y2RlOFx1Y2RlY1x1Y2RmMFx1Y2RmOFx1Y2RmOVx1Y2RmYlx1Y2RmZFx1Y2UwNFx1Y2UwOFx1Y2UwY1x1Y2UxNFx1Y2UxOVx1Y2UyMFx1Y2UyMVx1Y2UyNFx1Y2UyOFx1Y2UzMFx1Y2UzMVx1Y2Uz'@;
put 'M1x1Y2UzNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5NV1bZ11dPTQ5OTIwK2csX1s0OTkyMCtnXT15WzE5NV1bZ10pO2Zvcih5WzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZhYlx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMVx1ZDZiMlx1ZDZiM1x1ZDZiNFx1ZDZiNVx1ZDZiNlx1ZDZiN1x1ZDZiOFx1ZDZiYVx1ZDZiY1x1ZDZiZFx1ZDZiZVx1ZDZiZlx1ZDZjMFx1ZDZjMVx1ZDZjMlx1ZDZjM1x1ZDZj'@;
put 'Nlx1ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYVx1ZDZkYlx1ZDZkY1x1ZDZkZFx1ZDZkZVx1ZDZkZlx1ZDZlMVx1ZDZlMlx1'@;
put 'ZDZlM1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOVx1ZDZlYVx1ZDZlYlx1ZDZlY1x1ZDZlZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNlx1ZDZmN1x1ZDZmOFx1ZDZmOVx1ZDZmYVx1ZDZmYlx1ZDZm'@;
put 'ZVx1ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNVx1ZDcwNlx1ZDcwN1x1ZDcwOFx1ZDcwOVx1ZDcwYVx1ZDcwYlx1ZDcwY1x1ZDcwZFx1ZDcwZVx1ZDcwZlx1ZDcxMFx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1'@;
put 'Y2U2Ylx1Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2Vm'@;
put 'NFx1Y2VmNVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1'@;
put 'Y2Y2N1x1Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAz'@;
put 'NFx1ZDAzNVx1ZDAzOFx1ZDAzY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5Nl1bZ11dPTUwMTc2K2csX1s1MDE3NitnXT15WzE5Nl1bZ10pO2Zvcih5WzE5N109Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDcxNVx1ZDcxNlx1ZDcxN1x1ZDcxYVx1ZDcxYlx1ZDcxZFx1ZDcxZVx1ZDcxZlx1ZDcyMVx1ZDcyMlx1ZDcyM1x1ZDcyNFx1ZDcyNVx1ZDcyNlx1ZDcyN1x1ZDcyYVx1ZDcyY1x1ZDcyZVx1ZDcyZlx1ZDcz'@;
put 'MFx1ZDczMVx1ZDczMlx1ZDczM1x1ZDczNlx1ZDczN1x1ZDczOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDczYVx1ZDczYlx1ZDczZFx1ZDczZVx1ZDczZlx1ZDc0MFx1ZDc0MVx1ZDc0Mlx1ZDc0M1x1ZDc0NVx1ZDc0Nlx1ZDc0OFx1ZDc0YVx1ZDc0Ylx1ZDc0Y1x1'@;
put 'ZDc0ZFx1ZDc0ZVx1ZDc0Zlx1ZDc1Mlx1ZDc1M1x1ZDc1NVx1ZDc1YVx1ZDc1Ylx1ZDc1Y1x1ZDc1ZFx1ZDc1ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2'@;
put 'Zlx1ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NVx1ZDc3Nlx1ZDc3N1x1ZDc3OFx1ZDc3OVx1ZDc3YVx1ZDc3Ylx1ZDc3ZVx1ZDc3Zlx1ZDc4MFx1ZDc4Mlx1ZDc4M1x1ZDc4NFx1ZDc4NVx1ZDc4Nlx1ZDc4N1x1ZDc4YVx1ZDc4Ylx1ZDA0NFx1ZDA0NVx1ZDA0N1x1ZDA0OVx1ZDA1MFx1ZDA1NFx1'@;
put 'ZDA1OFx1ZDA2MFx1ZDA2Y1x1ZDA2ZFx1ZDA3MFx1ZDA3NFx1ZDA3Y1x1ZDA3ZFx1ZDA4MVx1ZDBhNFx1ZDBhNVx1ZDBhOFx1ZDBhY1x1ZDBiNFx1ZDBiNVx1ZDBiN1x1ZDBiOVx1ZDBjMFx1ZDBjMVx1ZDBjNFx1ZDBjOFx1ZDBjOVx1ZDBkMFx1ZDBkMVx1ZDBkM1x1ZDBkNFx1ZDBkNVx1ZDBk'@;
put 'Y1x1ZDBkZFx1ZDBlMFx1ZDBlNFx1ZDBlY1x1ZDBlZFx1ZDBlZlx1ZDBmMFx1ZDBmMVx1ZDBmOFx1ZDEwZFx1ZDEzMFx1ZDEzMVx1ZDEzNFx1ZDEzOFx1ZDEzYVx1ZDE0MFx1ZDE0MVx1ZDE0M1x1ZDE0NFx1ZDE0NVx1ZDE0Y1x1ZDE0ZFx1ZDE1MFx1ZDE1NFx1ZDE1Y1x1ZDE1ZFx1ZDE1Zlx1'@;
put 'ZDE2MVx1ZDE2OFx1ZDE2Y1x1ZDE3Y1x1ZDE4NFx1ZDE4OFx1ZDFhMFx1ZDFhMVx1ZDFhNFx1ZDFhOFx1ZDFiMFx1ZDFiMVx1ZDFiM1x1ZDFiNVx1ZDFiYVx1ZDFiY1x1ZDFjMFx1ZDFkOFx1ZDFmNFx1ZDFmOFx1ZDIwN1x1ZDIwOVx1ZDIxMFx1ZDIyY1x1ZDIyZFx1ZDIzMFx1ZDIzNFx1ZDIz'@;
put 'Y1x1ZDIzZFx1ZDIzZlx1ZDI0MVx1ZDI0OFx1ZDI1Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5N10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5N11bZ11dPTUwNDMyK2csX1s1MDQzMitnXT15WzE5N11bZ10pO2Zvcih5WzE5OF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDc4ZFx1ZDc4ZVx1ZDc4Zlx1ZDc5MVx1ZDc5Mlx1ZDc5M1x1ZDc5NFx1ZDc5NVx1ZDc5Nlx1ZDc5N1x1ZDc5YVx1ZDc5Y1x1ZDc5ZVx1ZDc5Zlx1ZDdhMFx1ZDdhMVx1ZDdhMlx1ZDdh'@;
put 'M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDI2NFx1ZDI4MFx1ZDI4MVx1ZDI4NFx1'@;
put 'ZDI4OFx1ZDI5MFx1ZDI5MVx1ZDI5NVx1ZDI5Y1x1ZDJhMFx1ZDJhNFx1ZDJhY1x1ZDJiMVx1ZDJiOFx1ZDJiOVx1ZDJiY1x1ZDJiZlx1ZDJjMFx1ZDJjMlx1ZDJjOFx1ZDJjOVx1ZDJjYlx1ZDJkNFx1ZDJkOFx1ZDJkY1x1ZDJlNFx1ZDJlNVx1ZDJmMFx1ZDJmMVx1ZDJmNFx1ZDJmOFx1ZDMw'@;
put 'MFx1ZDMwMVx1ZDMwM1x1ZDMwNVx1ZDMwY1x1ZDMwZFx1ZDMwZVx1ZDMxMFx1ZDMxNFx1ZDMxNlx1ZDMxY1x1ZDMxZFx1ZDMxZlx1ZDMyMFx1ZDMyMVx1ZDMyNVx1ZDMyOFx1ZDMyOVx1ZDMyY1x1ZDMzMFx1ZDMzOFx1ZDMzOVx1ZDMzYlx1ZDMzY1x1ZDMzZFx1ZDM0NFx1ZDM0NVx1ZDM3Y1x1'@;
put 'ZDM3ZFx1ZDM4MFx1ZDM4NFx1ZDM4Y1x1ZDM4ZFx1ZDM4Zlx1ZDM5MFx1ZDM5MVx1ZDM5OFx1ZDM5OVx1ZDM5Y1x1ZDNhMFx1ZDNhOFx1ZDNhOVx1ZDNhYlx1ZDNhZFx1ZDNiNFx1ZDNiOFx1ZDNiY1x1ZDNjNFx1ZDNjNVx1ZDNjOFx1ZDNjOVx1ZDNkMFx1ZDNkOFx1ZDNlMVx1ZDNlM1x1ZDNl'@;
put 'Y1x1ZDNlZFx1ZDNmMFx1ZDNmNFx1ZDNmY1x1ZDNmZFx1ZDNmZlx1ZDQwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5OF1bZ11dPTUwNjg4K2csX1s1MDY4OCtnXT15WzE5OF1bZ10pO2Zv'@;
put 'cih5WzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQwOFx1ZDQxZFx1'@;
put 'ZDQ0MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRm'@;
put 'OFx1ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUxNFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1'@;
put 'ZDU3OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYw'@;
put 'MVx1ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYxNFx1ZDYxNVx1ZDYxY1x1ZDYyMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5OV1bZ11dPTUwOTQ0K2csX1s1MDk0NCtnXT15'@;
put 'WzE5OV1bZ10pO2Zvcih5WzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZDYyNFx1ZDYyZFx1ZDYzOFx1ZDYzOVx1ZDYzY1x1ZDY0MFx1ZDY0NVx1ZDY0OFx1ZDY0OVx1ZDY0Ylx1ZDY0ZFx1ZDY1MVx1ZDY1NFx1ZDY1NVx1ZDY1OFx1ZDY1Y1x1ZDY2N1x1ZDY2OVx1ZDY3MFx1ZDY3MVx1ZDY3NFx1ZDY4M1x1ZDY4NVx1ZDY4Y1x1ZDY4ZFx1ZDY5MFx1ZDY5NFx1ZDY5'@;
put 'ZFx1ZDY5Zlx1ZDZhMVx1ZDZhOFx1ZDZhY1x1ZDZiMFx1ZDZiOVx1ZDZiYlx1ZDZjNFx1ZDZjNVx1ZDZjOFx1ZDZjY1x1ZDZkMVx1ZDZkNFx1ZDZkN1x1ZDZkOVx1ZDZlMFx1ZDZlNFx1ZDZlOFx1ZDZmMFx1ZDZmNVx1ZDZmY1x1ZDZmZFx1ZDcwMFx1ZDcwNFx1ZDcxMVx1ZDcxOFx1ZDcxOVx1'@;
put 'ZDcxY1x1ZDcyMFx1ZDcyOFx1ZDcyOVx1ZDcyYlx1ZDcyZFx1ZDczNFx1ZDczNVx1ZDczOFx1ZDczY1x1ZDc0NFx1ZDc0N1x1ZDc0OVx1ZDc1MFx1ZDc1MVx1ZDc1NFx1ZDc1Nlx1ZDc1N1x1ZDc1OFx1ZDc1OVx1ZDc2MFx1ZDc2MVx1ZDc2M1x1ZDc2NVx1ZDc2OVx1ZDc2Y1x1ZDc3MFx1ZDc3'@;
put 'NFx1ZDc3Y1x1ZDc3ZFx1ZDc4MVx1ZDc4OFx1ZDc4OVx1ZDc4Y1x1ZDc5MFx1ZDc5OFx1ZDc5OVx1ZDc5Ylx1ZDc5ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjAwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwMF1bZ11dPTUxMjAwK2cs'@;
put 'X1s1MTIwMCtnXT15WzIwMF1bZ10pO2Zvcih5WzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1NGYzZFx1NGY3M1x1NTA0N1x1NTBmOVx1NTJhMFx1NTNlZlx1NTQ3NVx1NTRlNVx1NTYwOVx1NWFjMVx1NWJiNlx1NjY4N1x1NjdiNlx1NjdiN1x1NjdlZlx1NmI0Y1x1NzNjMlx1NzVjMlx1N2EzY1x1ODJkYlx1ODMwNFx1ODg1N1x1ODg4OFx1OGEzNlx1OGNjOFx1OGRj'@;
put 'Zlx1OGVmYlx1OGZlNlx1OTlkNVx1NTIzYlx1NTM3NFx1NTQwNFx1NjA2YVx1NjE2NFx1NmJiY1x1NzNjZlx1ODExYVx1ODliYVx1ODlkMlx1OTVhM1x1NGY4M1x1NTIwYVx1NThiZVx1NTk3OFx1NTllNlx1NWU3Mlx1NWU3OVx1NjFjN1x1NjNjMFx1Njc0Nlx1NjdlY1x1Njg3Zlx1NmY5N1x1'@;
put 'NzY0ZVx1NzcwYlx1NzhmNVx1N2EwOFx1N2FmZlx1N2MyMVx1ODA5ZFx1ODI2ZVx1ODI3MVx1OGFlYlx1OTU5M1x1NGU2Ylx1NTU5ZFx1NjZmN1x1NmUzNFx1NzhhM1x1N2FlZFx1ODQ1Ylx1ODkxMFx1ODc0ZVx1OTdhOFx1NTJkOFx1NTc0ZVx1NTgyYVx1NWQ0Y1x1NjExZlx1NjFiZVx1NjIy'@;
put 'MVx1NjU2Mlx1NjdkMVx1NmE0NFx1NmUxYlx1NzUxOFx1NzViM1x1NzZlM1x1NzdiMFx1N2QzYVx1OTBhZlx1OTQ1MVx1OTQ1Mlx1OWY5NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwMl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjAyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwMl1b'@;
put 'Z11dPTUxNzEyK2csX1s1MTcxMitnXT15WzIwMl1bZ10pO2Zvcih5WzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMyM1x1NWNhY1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1NFx1ODIy'@;
put 'MVx1ODU5MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1NTU4MFx1'@;
put 'NWJhMlx1NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFiNVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRmZVx1NWVm'@;
put 'YVx1NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwM10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjAzXVtnXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoSVt5WzIwM11bZ11dPTUxOTY4K2csX1s1MTk2OCtnXT15WzIwM11bZ10pO2Zvcih5WzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiY1x1OTIxMFx1OWVkNFx1NTJhYlx1NjAyZlx1OGZmMlx1NTA0OFx1NjFhOVx1NjNlZFx1NjRjYVx1NjgzY1x1NmE4NFx1NmZjMFx1ODE4OFx1ODlhMVx1OTY5NFx1NTgwNVx1NzI3ZFx1NzJhY1x1NzUwNFx1N2Q3OVx1N2U2'@;
put 'ZFx1ODBhOVx1ODk4Ylx1OGI3NFx1OTA2M1x1OWQ1MVx1NjI4OVx1NmM3YVx1NmY1NFx1N2Q1MFx1N2YzYVx1OGEyM1x1NTE3Y1x1NjE0YVx1N2I5ZFx1OGIxOVx1OTI1N1x1OTM4Y1x1NGVhY1x1NGZkM1x1NTAxZVx1NTBiZVx1NTEwNlx1NTJjMVx1NTJjZFx1NTM3Zlx1NTc3MFx1NTg4M1x1'@;
put 'NWU5YVx1NWY5MVx1NjE3Nlx1NjFhY1x1NjRjZVx1NjU2Y1x1NjY2Zlx1NjZiYlx1NjZmNFx1Njg5N1x1NmQ4N1x1NzA4NVx1NzBmMVx1NzQ5Zlx1NzRhNVx1NzRjYVx1NzVkOVx1Nzg2Y1x1NzhlY1x1N2FkZlx1N2FmNlx1N2Q0NVx1N2Q5M1x1ODAxNVx1ODAzZlx1ODExYlx1ODM5Nlx1OGI2'@;
put 'Nlx1OGYxNVx1OTAxNVx1OTNlMVx1OTgwM1x1OTgzOFx1OWE1YVx1OWJlOFx1NGZjMlx1NTU1M1x1NTgzYVx1NTk1MVx1NWI2M1x1NWM0Nlx1NjBiOFx1NjIxMlx1Njg0Mlx1NjhiMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA0XVtnXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoSVt5WzIwNF1bZ11dPTUyMjI0K2csX1s1MjIyNCtnXT15WzIwNF1bZ10pO2Zvcih5WzIwNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhlOFx1NmVhYVx1NzU0Y1x1NzY3OFx1NzhjZVx1N2EzZFx1N2NmYlx1N2U2Ylx1N2U3Y1x1OGEwOFx1OGFhMVx1OGMzZlx1OTY4ZVx1OWRjNFx1NTNlNFx1NTNlOVx1NTQ0YVx1NTQ3MVx1NTZmYVx1NTlk'@;
put 'MVx1NWI2NFx1NWMzYlx1NWVhYlx1NjJmN1x1NjUzN1x1NjU0NVx1NjU3Mlx1NjZhMFx1NjdhZlx1NjljMVx1NmNiZFx1NzVmY1x1NzY5MFx1Nzc3ZVx1N2EzZlx1N2Y5NFx1ODAwM1x1ODBhMVx1ODE4Zlx1ODJlNlx1ODJmZFx1ODNmMFx1ODVjMVx1ODgzMVx1ODhiNFx1OGFhNVx1ZjkwM1x1'@;
put 'OGY5Y1x1OTMyZVx1OTZjN1x1OTg2N1x1OWFkOFx1OWYxM1x1NTRlZFx1NjU5Ylx1NjZmMlx1Njg4Zlx1N2E0MFx1OGMzN1x1OWQ2MFx1NTZmMFx1NTc2NFx1NWQxMVx1NjYwNlx1NjhiMVx1NjhjZFx1NmVmZVx1NzQyOFx1ODg5ZVx1OWJlNFx1NmM2OFx1ZjkwNFx1OWFhOFx1NGY5Ylx1NTE2'@;
put 'Y1x1NTE3MVx1NTI5Zlx1NWI1NFx1NWRlNVx1NjA1MFx1NjA2ZFx1NjJmMVx1NjNhN1x1NjUzYlx1NzNkOVx1N2E3YVx1ODZhM1x1OGNhMlx1OTc4Zlx1NGUzMlx1NWJlMVx1NjIwOFx1Njc5Y1x1NzRkY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwNV0ubGVuZ3RoOysrZyk2NTUzMyE9'@;
put 'PXlbMjA1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwNV1bZ11dPTUyNDgwK2csX1s1MjQ4MCtnXT15WzIwNV1bZ10pO2Zvcih5WzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1Njhm'@;
put 'YVx1NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2JhMVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1'@;
put 'OTQ1Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0'@;
put 'Ylx1NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2ZmOVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwNl0ubGVuZ3Ro'@;
put 'OysrZyk2NTUzMyE9PXlbMjA2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwNl1bZ11dPTUyNzM2K2csX1s1MjczNitnXT15WzIwNl1bZ10pO2Zvcih5WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTM0MFx1NTNlM1x1NTNlNVx1NTQ4ZVx1NTYxNFx1NTc3NVx1NTdhMlx1NWJjN1x1NWQ4N1x1NWVkMFx1NjFmY1x1NjJkOFx1NjU1MVx1NjdiOFx1NjdlOVx1Njlj'@;
put 'Ylx1NmI1MFx1NmJjNlx1NmJlY1x1NmM0Mlx1NmU5ZFx1NzA3OFx1NzJkN1x1NzM5Nlx1NzQwM1x1NzdiZlx1NzdlOVx1N2E3Nlx1N2Q3Zlx1ODAwOVx1ODFmY1x1ODIwNVx1ODIwYVx1ODJkZlx1ODg2Mlx1OGIzM1x1OGNmY1x1OGVjMFx1OTAxMVx1OTBiMVx1OTI2NFx1OTJiNlx1OTlkMlx1'@;
put 'OWE0NVx1OWNlOVx1OWRkN1x1OWY5Y1x1NTcwYlx1NWM0MFx1ODNjYVx1OTdhMFx1OTdhYlx1OWViNFx1NTQxYlx1N2E5OFx1N2ZhNFx1ODhkOVx1OGVjZFx1OTBlMVx1NTgwMFx1NWM0OFx1NjM5OFx1N2E5Zlx1NWJhZVx1NWYxM1x1N2E3OVx1N2FhZVx1ODI4ZVx1OGVhY1x1NTAyNlx1NTIz'@;
put 'OFx1NTJmOFx1NTM3N1x1NTcwOFx1NjJmM1x1NjM3Mlx1NmIwYVx1NmRjM1x1NzczN1x1NTNhNVx1NzM1N1x1ODU2OFx1OGU3Nlx1OTVkNVx1NjczYVx1NmFjM1x1NmY3MFx1OGE2ZFx1OGVjY1x1OTk0Ylx1ZjkwNlx1NjY3N1x1NmI3OFx1OGNiNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15'@;
put 'WzIwN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwN11bZ11dPTUyOTkyK2csX1s1Mjk5MitnXT15WzIwN11bZ10pO2Zvcih5WzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIzY1x1ZjkwN1x1NTNlYlx1NTcyZFx1NTk0ZVx1NjNjNlx1NjlmYlx1NzNlYVx1Nzg0NVx1N2FiYVx1N2FjNVx1N2NmZVx1ODQ3NVx1ODk4'@;
put 'Zlx1OGQ3M1x1OTAzNVx1OTVhOFx1NTJmYlx1NTc0N1x1NzU0N1x1N2I2MFx1ODNjY1x1OTIxZVx1ZjkwOFx1NmE1OFx1NTE0Ylx1NTI0Ylx1NTI4N1x1NjIxZlx1NjhkOFx1Njk3NVx1OTY5OVx1NTBjNVx1NTJhNFx1NTJlNFx1NjFjM1x1NjVhNFx1NjgzOVx1NjlmZlx1NzQ3ZVx1N2I0Ylx1'@;
put 'ODJiOVx1ODNlYlx1ODliMlx1OGIzOVx1OGZkMVx1OTk0OVx1ZjkwOVx1NGVjYVx1NTk5N1x1NjRkMlx1NjYxMVx1NmE4ZVx1NzQzNFx1Nzk4MVx1NzliZFx1ODJhOVx1ODg3ZVx1ODg3Zlx1ODk1Zlx1ZjkwYVx1OTMyNlx1NGYwYlx1NTNjYVx1NjAyNVx1NjI3MVx1NmM3Mlx1N2QxYVx1N2Q2'@;
put 'Nlx1NGU5OFx1NTE2Mlx1NzdkY1x1ODBhZlx1NGYwMVx1NGYwZVx1NTE3Nlx1NTE4MFx1NTVkY1x1NTY2OFx1NTczYlx1NTdmYVx1NTdmY1x1NTkxNFx1NTk0N1x1NTk5M1x1NWJjNFx1NWM5MFx1NWQwZVx1NWRmMVx1NWU3ZVx1NWZjY1x1NjI4MFx1NjVkN1x1NjVlM1x1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLGc9MDtnIT15WzIwOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwOF1bZ11dPTUzMjQ4K2csX1s1MzI0OCtnXT15WzIwOF1bZ10pO2Zvcih5WzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5'@;
put 'OFx1NzQyNlx1NzQyYVx1NzQ4Mlx1NzRhM1x1NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1'@;
put 'OWEwZVx1OWEwZlx1OWE2NVx1OWU5Mlx1N2RjYVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZVx1ZjkwZlx1ZjkxMFx1ZjkxMVx1ZjkxMlx1ZjkxM1x1OTBhM1x1ZjkxNFx1Zjkx'@;
put 'NVx1ZjkxNlx1ZjkxN1x1ZjkxOFx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNVx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwOV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwOV1bZ11dPTUzNTA0K2csX1s1MzUwNCtnXT15WzIwOV1bZ10pO2Zvcih5WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOFx1ZjkyOVx1ZjkyYVx1Zjky'@;
put 'Ylx1ZjkyY1x1NGU0M1x1ZjkyZFx1NTE2N1x1NTk0OFx1NjdmMFx1ODAxMFx1ZjkyZVx1NTk3M1x1NWU3NFx1NjQ5YVx1NzljYVx1NWZmNVx1NjA2Y1x1NjJjOFx1NjM3Ylx1NWJlN1x1NWJkN1x1NTJhYVx1ZjkyZlx1NTk3NFx1NWYyOVx1NjAxMlx1ZjkzMFx1ZjkzMVx1ZjkzMlx1NzQ1OVx1'@;
put 'ZjkzM1x1ZjkzNFx1ZjkzNVx1ZjkzNlx1ZjkzN1x1ZjkzOFx1OTlkMVx1ZjkzOVx1ZjkzYVx1ZjkzYlx1ZjkzY1x1ZjkzZFx1ZjkzZVx1ZjkzZlx1Zjk0MFx1Zjk0MVx1Zjk0Mlx1Zjk0M1x1NmZjM1x1Zjk0NFx1Zjk0NVx1ODFiZlx1OGZiMlx1NjBmMVx1Zjk0Nlx1Zjk0N1x1ODE2Nlx1Zjk0'@;
put 'OFx1Zjk0OVx1NWMzZlx1Zjk0YVx1Zjk0Ylx1Zjk0Y1x1Zjk0ZFx1Zjk0ZVx1Zjk0Zlx1Zjk1MFx1Zjk1MVx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1Mlx1Zjk1M1x1Zjk1NFx1Zjk1NVx1Zjk1Nlx1Zjk1N1x1ODBmZFx1Zjk1OFx1Zjk1OVx1NWMzY1x1NmNlNVx1NTMzZlx1NmViYVx1'@;
put 'NTkxYVx1ODMzNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjEwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxMF1bZ11dPTUzNzYwK2csX1s1Mzc2MCtnXT15WzIxMF1bZ10pO2Zvcih5WzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUzOVx1NGViNlx1NGY0Nlx1NTVhZVx1NTcxOFx1NThjN1x1NWY1Nlx1NjVi'@;
put 'N1x1NjVlNlx1NmE4MFx1NmJiNVx1NmU0ZFx1NzdlZFx1N2FlZlx1N2MxZVx1N2RkZVx1ODZjYlx1ODg5Mlx1OTEzMlx1OTM1Ylx1NjRiYlx1NmZiZVx1NzM3YVx1NzViOFx1OTA1NFx1NTU1Nlx1NTc0ZFx1NjFiYVx1NjRkNFx1NjZjN1x1NmRlMVx1NmU1Ylx1NmY2ZFx1NmZiOVx1NzVmMFx1'@;
put 'ODA0M1x1ODFiZFx1ODU0MVx1ODk4M1x1OGFjN1x1OGI1YVx1OTMxZlx1NmM5M1x1NzU1M1x1N2I1NFx1OGUwZlx1OTA1ZFx1NTUxMFx1NTgwMlx1NTg1OFx1NWU2Mlx1NjIwN1x1NjQ5ZVx1NjhlMFx1NzU3Nlx1N2NkNlx1ODdiM1x1OWVlOFx1NGVlM1x1NTc4OFx1NTc2ZVx1NTkyN1x1NWMw'@;
put 'ZFx1NWNiMVx1NWUzNlx1NWY4NVx1NjIzNFx1NjRlMVx1NzNiM1x1ODFmYVx1ODg4Ylx1OGNiOFx1OTY4YVx1OWVkYlx1NWI4NVx1NWZiN1x1NjBiM1x1NTAxMlx1NTIwMFx1NTIzMFx1NTcxNlx1NTgzNVx1NTg1N1x1NWMwZVx1NWM2MFx1NWNmNlx1NWQ4Ylx1NWVhNlx1NWY5Mlx1NjBiY1x1'@;
put 'NjMxMVx1NjM4OVx1NjQxN1x1Njg0M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxMV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjExXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxMV1bZ11dPTU0MDE2K2csX1s1NDAxNitnXT15WzIxMV1bZ10pO2Zvcih5WzIxMl09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZl'@;
put 'NFx1NzFmZVx1NzZkY1x1Nzc3OVx1NzliMVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1'@;
put 'NThhOVx1NjBjN1x1NjU2Nlx1NjVmZFx1NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2'@;
put 'M1x1OTI4NVx1NTE1Y1x1NjU5N1x1Njc1Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1'@;
put 'OWEzMFx1NTU4N1x1NjFmNlx1Zjk1Ylx1NzY2OVx1N2Y4NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxMl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjEyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxMl1bZ11dPTU0MjcyK2csX1s1NDI3MitnXT15WzIxMl1bZ10pO2Zvcih5WzIxM109'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODYzZlx1ODdiYVx1ODhmOFx1OTA4'@;
put 'Zlx1Zjk1Y1x1NmQxYlx1NzBkOVx1NzNkZVx1N2Q2MVx1ODQzZFx1Zjk1ZFx1OTE2YVx1OTlmMVx1Zjk1ZVx1NGU4Mlx1NTM3NVx1NmIwNFx1NmIxMlx1NzAzZVx1NzIxYlx1ODYyZFx1OWUxZVx1NTI0Y1x1OGZhM1x1NWQ1MFx1NjRlNVx1NjUyY1x1NmIxNlx1NmZlYlx1N2M0M1x1N2U5Y1x1'@;
put 'ODVjZFx1ODk2NFx1ODliZFx1NjJjOVx1ODFkOFx1ODgxZlx1NWVjYVx1NjcxN1x1NmQ2YVx1NzJmY1x1NzQwNVx1NzQ2Zlx1ODc4Mlx1OTBkZVx1NGY4Nlx1NWQwZFx1NWZhMFx1ODQwYVx1NTFiN1x1NjNhMFx1NzU2NVx1NGVhZVx1NTAwNlx1NTE2OVx1NTFjOVx1Njg4MVx1NmExMVx1N2Nh'@;
put 'ZVx1N2NiMVx1N2NlN1x1ODI2Zlx1OGFkMlx1OGYxYlx1OTFjZlx1NGZiNlx1NTEzN1x1NTJmNVx1NTQ0Mlx1NWVlY1x1NjE2ZVx1NjIzZVx1NjVjNVx1NmFkYVx1NmZmZVx1NzkyYVx1ODVkY1x1ODgyM1x1OTVhZFx1OWE2Mlx1OWE2YVx1OWU5N1x1OWVjZVx1NTI5Ylx1NjZjNlx1NmI3N1x1'@;
put 'NzAxZFx1NzkyYlx1OGY2Mlx1OTc0Mlx1NjE5MFx1NjIwMFx1NjUyM1x1NmYyM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxM10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjEzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxM11bZ11dPTU0NTI4K2csX1s1NDUyOCtnXT15WzIxM11bZ10p'@;
put 'O2Zvcih5WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0OVx1NzQ4'@;
put 'OVx1N2RmNFx1ODA2Zlx1ODRlZVx1OGYyNlx1OTAyM1x1OTM0YVx1NTFiZFx1NTIxN1x1NTJhM1x1NmQwY1x1NzBjOFx1ODhjMlx1NWVjOVx1NjU4Mlx1NmJhZVx1NmZjMlx1N2MzZVx1NzM3NVx1NGVlNFx1NGYzNlx1NTZmOVx1Zjk1Zlx1NWNiYVx1NWRiYVx1NjAxY1x1NzNiMlx1N2IyZFx1'@;
put 'N2Y5YVx1N2ZjZVx1ODA0Nlx1OTAxZVx1OTIzNFx1OTZmNlx1OTc0OFx1OTgxOFx1OWY2MVx1NGY4Ylx1NmZhN1x1NzlhZVx1OTFiNFx1OTZiN1x1NTJkZVx1Zjk2MFx1NjQ4OFx1NjRjNFx1NmFkM1x1NmY1ZVx1NzAxOFx1NzIxMFx1NzZlN1x1ODAwMVx1ODYwNlx1ODY1Y1x1OGRlZlx1OGYw'@;
put 'NVx1OTczMlx1OWI2Zlx1OWRmYVx1OWU3NVx1Nzg4Y1x1Nzk3Zlx1N2RhMFx1ODNjOVx1OTMwNFx1OWU3Zlx1OWU5M1x1OGFkNlx1NThkZlx1NWYwNFx1NjcyN1x1NzAyN1x1NzRjZlx1N2M2MFx1ODA3ZVx1NTEyMVx1NzAyOFx1NzI2Mlx1NzhjYVx1OGNjMlx1OGNkYVx1OGNmNFx1OTZmN1x1'@;
put 'NGU4Nlx1NTBkYVx1NWJlZVx1NWVkNlx1NjU5OVx1NzFjZVx1NzY0Mlx1NzdhZFx1ODA0YVx1ODRmY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxNF1bZ11dPTU0Nzg0K2csX1s1NDc4NCtn'@;
put 'XT15WzIxNF1bZ10pO2Zvcih5WzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1OTA3Y1x1OWIyN1x1OWY4ZFx1NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1'@;
put 'Nzg2Ylx1OGIyY1x1OTg1ZVx1NTE2ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIy'@;
put 'OVx1NTM5OFx1NTQwZlx1NTUwZVx1NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1'@;
put 'NzQ5OFx1ODVmYVx1OGVhYVx1OTZhM1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1NzgyY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxNV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxNV1bZ11dPTU1MDQw'@;
put 'K2csX1s1NTA0MCtnXT15WzIxNV1bZ10pO2Zvcih5WzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1N2FjYlx1N2IyMFx1N2M5Mlx1NjQ2OVx1NzQ2YVx1NzVmMlx1NzhiY1x1NzhlOFx1OTlhY1x1OWI1NFx1OWViYlx1NWJkZVx1NWU1NVx1NmYyMFx1ODE5Y1x1ODNhYlx1OTA4OFx1NGUwN1x1NTM0ZFx1NWEyOVx1NWRkMlx1NWY0ZVx1NjE2Mlx1NjMzZFx1NjY2OVx1'@;
put 'NjZmY1x1NmVmZlx1NmYyYlx1NzA2M1x1Nzc5ZVx1ODQyY1x1ODUxM1x1ODgzYlx1OGYxM1x1OTk0NVx1OWMzYlx1NTUxY1x1NjJiOVx1NjcyYlx1NmNhYlx1ODMwOVx1ODk2YVx1OTc3YVx1NGVhMVx1NTk4NFx1NWZkOFx1NWZkOVx1NjcxYlx1N2RiMlx1N2Y1NFx1ODI5Mlx1ODMyYlx1ODNi'@;
put 'ZFx1OGYxZVx1OTA5OVx1NTdjYlx1NTliOVx1NWE5Mlx1NWJkMFx1NjYyN1x1Njc5YVx1Njg4NVx1NmJjZlx1NzE2NFx1N2Y3NVx1OGNiN1x1OGNlM1x1OTA4MVx1OWI0NVx1ODEwOFx1OGM4YVx1OTY0Y1x1OWE0MFx1OWVhNVx1NWI1Zlx1NmMxM1x1NzMxYlx1NzZmMlx1NzZkZlx1ODQwY1x1'@;
put 'NTFhYVx1ODk5M1x1NTE0ZFx1NTE5NVx1NTJjOVx1NjhjOVx1NmM5NFx1NzcwNFx1NzcyMFx1N2RiZlx1N2RlY1x1OTc2Mlx1OWViNVx1NmVjNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxNl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIx'@;
put 'Nl1bZ11dPTU1Mjk2K2csX1s1NTI5NitnXT15WzIxNl1bZ10pO2Zvcih5WzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUxMVx1NTFhNVx1NTQwZFx1NTQ3ZFx1NjYwZVx1NjY5ZFx1NjkyN1x1NmU5Zlx1NzZiZlx1Nzc5MVx1ODMxN1x1ODRjMlx1ODc5Zlx1OTE2OVx1OTI5OFx1OWNmNFx1ODg4Mlx1NGZhZVx1NTE5Mlx1NTJkZlx1NTljNlx1NWUzZFx1NjE1NVx1'@;
put 'NjQ3OFx1NjQ3OVx1NjZhZVx1NjdkMFx1NmEyMVx1NmJjZFx1NmJkYlx1NzI1Zlx1NzI2MVx1NzQ0MVx1NzczOFx1NzdkYlx1ODAxN1x1ODJiY1x1ODMwNVx1OGIwMFx1OGIyOFx1OGM4Y1x1NjcyOFx1NmM5MFx1NzI2N1x1NzZlZVx1Nzc2Nlx1N2E0Nlx1OWRhOVx1NmI3Zlx1NmM5Mlx1NTky'@;
put 'Mlx1NjcyNlx1ODQ5OVx1NTM2Zlx1NTg5M1x1NTk5OVx1NWVkZlx1NjNjZlx1NjYzNFx1Njc3M1x1NmUzYVx1NzMyYlx1N2FkN1x1ODJkN1x1OTMyOFx1NTJkOVx1NWRlYlx1NjFhZVx1NjFjYlx1NjIwYVx1NjJjN1x1NjRhYlx1NjVlMFx1Njk1OVx1NmI2Nlx1NmJjYlx1NzEyMVx1NzNmN1x1'@;
put 'NzU1ZFx1N2U0Nlx1ODIxZVx1ODMwMlx1ODU2YVx1OGFhM1x1OGNiZlx1OTcyN1x1OWQ2MVx1NThhOFx1OWVkOFx1NTAxMVx1NTIwZVx1NTQzYlx1NTU0Zlx1NjU4N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE3XVtnXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoSVt5WzIxN11bZ11dPTU1NTUyK2csX1s1NTU1MitnXT15WzIxN11bZ10pO2Zvcih5WzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1Njk2M1x1NmUzY1x1NmU0NFx1'@;
put 'NzcwOVx1N2M3M1x1N2Y4ZVx1ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1ZFx1NTM1YVx1NjJjZFx1NjQw'@;
put 'Zlx1NjRiMlx1NjczNFx1NmEzOFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1NmNlZVx1NmY1OFx1NzNlZFx1'@;
put 'NzU1NFx1NzYyMlx1NzZlNFx1NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE4XVtn'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxOF1bZ11dPTU1ODA4K2csX1s1NTgwOCtnXT15WzIxOF1bZ10pO2Zvcih5WzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY3Y1x1OGRjYlx1OTFiMVx1OTI2Mlx1OWFlZVx1OWI0M1x1NTAyM1x1NTA4ZFx1NTc0YVx1NTlhOFx1NWMyOFx1NWU0N1x1NWY3N1x1NjIzZlx1NjUzZVx1NjViOVx1NjVjMVx1NjYwOVx1Njc4Ylx1'@;
put 'Njk5Y1x1NmVjMlx1NzhjNVx1N2QyMVx1ODBhYVx1ODE4MFx1ODIyYlx1ODJiM1x1ODRhMVx1ODY4Y1x1OGEyYVx1OGIxN1x1OTBhNlx1OTYzMlx1OWY5MFx1NTAwZFx1NGZmM1x1Zjk2M1x1NTdmOVx1NWY5OFx1NjJkY1x1NjM5Mlx1Njc2Zlx1NmU0M1x1NzExOVx1NzZjM1x1ODBjY1x1ODBk'@;
put 'YVx1ODhmNFx1ODhmNVx1ODkxOVx1OGNlMFx1OGYyOVx1OTE0ZFx1OTY2YVx1NGYyZlx1NGY3MFx1NWUxYlx1NjdjZlx1NjgyMlx1NzY3ZFx1NzY3ZVx1OWI0NFx1NWU2MVx1NmEwYVx1NzE2OVx1NzFkNFx1NzU2YVx1Zjk2NFx1N2U0MVx1ODU0M1x1ODVlOVx1OThkY1x1NGYxMFx1N2I0Zlx1'@;
put 'N2Y3MFx1OTVhNVx1NTFlMVx1NWUwNlx1NjhiNVx1NmMzZVx1NmM0ZVx1NmNkYlx1NzJhZlx1N2JjNFx1ODMwM1x1NmNkNVx1NzQzYVx1NTBmYlx1NTI4OFx1NThjMVx1NjRkOFx1NmE5N1x1NzRhN1x1NzY1Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxOV0ubGVuZ3RoOysrZyk2NTUz'@;
put 'MyE9PXlbMjE5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxOV1bZ11dPTU2MDY0K2csX1s1NjA2NCtnXT15WzIxOV1bZ10pO2Zvcih5WzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzhhN1x1ODYxN1x1OTVlMlx1OTczOVx1Zjk2NVx1NTM1ZVx1NWYwMVx1OGI4YVx1OGZhOFx1OGZhZlx1OTA4YVx1NTIyNVx1NzdhNVx1OWM0OVx1OWYwOFx1NGUxOVx1NTAwMlx1'@;
put 'NTE3NVx1NWM1Ylx1NWU3N1x1NjYxZVx1NjYzYVx1NjdjNFx1NjhjNVx1NzBiM1x1NzUwMVx1NzVjNVx1NzljOVx1N2FkZFx1OGYyN1x1OTkyMFx1OWEwOFx1NGZkZFx1NTgyMVx1NTgzMVx1NWJmNlx1NjY2ZVx1NmI2NVx1NmQxMVx1NmU3YVx1NmY3ZFx1NzNlNFx1NzUyYlx1ODNlOVx1ODhk'@;
put 'Y1x1ODkxM1x1OGI1Y1x1OGYxNFx1NGYwZlx1NTBkNVx1NTMxMFx1NTM1Y1x1NWI5M1x1NWZhOVx1NjcwZFx1Nzk4Zlx1ODE3OVx1ODMyZlx1ODUxNFx1ODkwN1x1ODk4Nlx1OGYzOVx1OGYzYlx1OTlhNVx1OWMxMlx1NjcyY1x1NGU3Nlx1NGZmOFx1NTk0OVx1NWMwMVx1NWNlZlx1NWNmMFx1'@;
put 'NjM2N1x1NjhkMlx1NzBmZFx1NzFhMlx1NzQyYlx1N2UyYlx1ODRlY1x1ODcwMlx1OTAyMlx1OTJkMlx1OWNmM1x1NGUwZFx1NGVkOFx1NGZlZlx1NTA4NVx1NTI1Nlx1NTI2Zlx1NTQyNlx1NTQ5MFx1NTdlMFx1NTkyYlx1NWE2Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyMF0ubGVu'@;
put 'Z3RoOysrZyk2NTUzMyE9PXlbMjIwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyMF1bZ11dPTU2MzIwK2csX1s1NjMyMCtnXT15WzIyMF1bZ10pO2Zvcih5WzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1'@;
put 'ODE1MVx1ODE5YVx1ODI0MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYx'@;
put 'MFx1NmM3ZVx1NzExYVx1NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1'@;
put 'NWU4N1x1NjBiMlx1NjE4YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn'@;
put 'IT15WzIyMV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjIxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyMV1bZ11dPTU2NTc2K2csX1s1NjU3NitnXT15WzIyMV1bZ10pO2Zvcih5WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODEzZVx1ODFjMlx1ODNmMlx1ODcxYVx1ODhlOFx1OGFiOVx1OGI2Y1x1OGNiYlx1OTExOVx1OTc1ZVx1OThkYlx1OWYzYlx1NTZhY1x1'@;
put 'NWIyYVx1NWY2Y1x1NjU4Y1x1NmFiM1x1NmJhZlx1NmQ1Y1x1NmZmMVx1NzAxNVx1NzI1ZFx1NzNhZFx1OGNhN1x1OGNkM1x1OTgzYlx1NjE5MVx1NmMzN1x1ODA1OFx1OWEwMVx1NGU0ZFx1NGU4Ylx1NGU5Ylx1NGVkNVx1NGYzYVx1NGYzY1x1NGY3Zlx1NGZkZlx1NTBmZlx1NTNmMlx1NTNm'@;
put 'OFx1NTUwNlx1NTVlM1x1NTZkYlx1NThlYlx1NTk2Mlx1NWExMVx1NWJlYlx1NWJmYVx1NWMwNFx1NWRmM1x1NWUyYlx1NWY5OVx1NjAxZFx1NjM2OFx1NjU5Y1x1NjVhZlx1NjdmNlx1NjdmYlx1NjhhZFx1NmI3Ylx1NmM5OVx1NmNkN1x1NmUyM1x1NzAwOVx1NzM0NVx1NzgwMlx1NzkzZVx1'@;
put 'Nzk0MFx1Nzk2MFx1NzljMVx1N2JlOVx1N2QxN1x1N2Q3Mlx1ODA4Nlx1ODIwZFx1ODM4ZVx1ODRkMVx1ODZjN1x1ODhkZlx1OGE1MFx1OGE1ZVx1OGIxZFx1OGNkY1x1OGQ2Nlx1OGZhZFx1OTBhYVx1OThmY1x1OTlkZlx1OWU5ZFx1NTI0YVx1Zjk2OVx1NjcxNFx1Zjk2YVx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLGc9MDtnIT15WzIyMl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjIyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyMl1bZ11dPTU2ODMyK2csX1s1NjgzMitnXT15WzIyMl1bZ10pO2Zvcih5WzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTA5OFx1NTIyYVx1NWM3MVx1NjU2M1x1NmM1NVx1NzNjYVx1NzUyM1x1NzU5ZFx1N2I5N1x1ODQ5Y1x1OTE3OFx1'@;
put 'OTczMFx1NGU3N1x1NjQ5Mlx1NmJiYVx1NzE1ZVx1ODVhOVx1NGUwOVx1Zjk2Ylx1Njc0OVx1NjhlZVx1NmUxN1x1ODI5Zlx1ODUxOFx1ODg2Ylx1NjNmN1x1NmY4MVx1OTIxMlx1OThhZlx1NGUwYVx1NTBiN1x1NTBjZlx1NTExZlx1NTU0Nlx1NTVhYVx1NTYxN1x1NWI0MFx1NWMxOVx1NWNl'@;
put 'MFx1NWUzOFx1NWU4YVx1NWVhMFx1NWVjMlx1NjBmM1x1Njg1MVx1NmE2MVx1NmU1OFx1NzIzZFx1NzI0MFx1NzJjMFx1NzZmOFx1Nzk2NVx1N2JiMVx1N2ZkNFx1ODhmM1x1ODlmNFx1OGE3M1x1OGM2MVx1OGNkZVx1OTcxY1x1NTg1ZVx1NzRiZFx1OGNmZFx1NTVjN1x1Zjk2Y1x1N2E2MVx1'@;
put 'N2QyMlx1ODI3Mlx1NzI3Mlx1NzUxZlx1NzUyNVx1Zjk2ZFx1N2IxOVx1NTg4NVx1NThmYlx1NWRiY1x1NWU4Zlx1NWViNlx1NWY5MFx1NjA1NVx1NjI5Mlx1NjM3Zlx1NjU0ZFx1NjY5MVx1NjZkOVx1NjZmOFx1NjgxNlx1NjhmMlx1NzI4MFx1NzQ1ZVx1N2I2ZVx1N2Q2ZVx1N2RkNlx1N2Y3'@;
put 'Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyM10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjIzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyM11bZ11dPTU3MDg4K2csX1s1NzA4OCtnXT15WzIyM11bZ10pO2Zvcih5WzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1'@;
put 'NTkxNVx1NTk2ZFx1NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0'@;
put 'NFx1NzQ4N1x1NzRiZlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1'@;
put 'ODkzYlx1OGEyZFx1OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZk'@;
put 'Ylx1NzcwMVx1N2I2Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyNF1bZ11dPTU3MzQ0K2csX1s1NzM0NCtnXT15WzIyNF1bZ10pO2Zvcih5WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA1Nlx1ODA3Mlx1ODE2NVx1OGFhMFx1OTE5Mlx1NGUxNlx1NTJlMlx1'@;
put 'NmI3Mlx1NmQxN1x1N2EwNVx1N2IzOVx1N2QzMFx1Zjk2Zlx1OGNiMFx1NTNlY1x1NTYyZlx1NTg1MVx1NWJiNVx1NWMwZlx1NWMxMVx1NWRlMlx1NjI0MFx1NjM4M1x1NjQxNFx1NjYyZFx1NjhiM1x1NmNiY1x1NmQ4OFx1NmVhZlx1NzAxZlx1NzBhNFx1NzFkMlx1NzUyNlx1NzU4Zlx1NzU4'@;
put 'ZVx1NzYxOVx1N2IxMVx1N2JlMFx1N2MyYlx1N2QyMFx1N2QzOVx1ODUyY1x1ODU2ZFx1ODYwN1x1OGEzNFx1OTAwZFx1OTA2MVx1OTBiNVx1OTJiN1x1OTdmNlx1OWEzN1x1NGZkN1x1NWM2Y1x1Njc1Zlx1NmQ5MVx1N2M5Zlx1N2U4Y1x1OGIxNlx1OGQxNlx1OTAxZlx1NWI2Ylx1NWRmZFx1'@;
put 'NjQwZFx1ODRjMFx1OTA1Y1x1OThlMVx1NzM4N1x1NWI4Ylx1NjA5YVx1Njc3ZVx1NmRkZVx1OGExZlx1OGFhNlx1OTAwMVx1OTgwY1x1NTIzN1x1Zjk3MFx1NzA1MVx1Nzg4ZVx1OTM5Nlx1ODg3MFx1OTFkN1x1NGZlZVx1NTNkN1x1NTVmZFx1NTZkYVx1NTc4Mlx1NThmZFx1NWFjMlx1NWI4'@;
put 'OFx1NWNhYlx1NWNjMFx1NWUyNVx1NjEwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyNV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyNV1bZ11dPTU3NjAwK2csX1s1NzYwMCtnXT15WzIyNV1bZ10pO2Zvcih5WzIyNl09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIwZFx1NjI0Ylx1NjM4OFx1NjQxY1x1NjUzNlx1'@;
put 'NjU3OFx1NmEzOVx1NmI4YVx1NmMzNFx1NmQxOVx1NmYzMVx1NzFlN1x1NzJlOVx1NzM3OFx1NzQwN1x1NzRiMlx1NzYyNlx1Nzc2MVx1NzljMFx1N2E1N1x1N2FlYVx1N2NiOVx1N2Q4Zlx1N2RhY1x1N2U2MVx1N2Y5ZVx1ODEyOVx1ODMzMVx1ODQ5MFx1ODRkYVx1ODVlYVx1ODg5Nlx1OGFi'@;
put 'MFx1OGI5MFx1OGYzOFx1OTA0Mlx1OTA4M1x1OTE2Y1x1OTI5Nlx1OTJiOVx1OTY4Ylx1OTZhN1x1OTZhOFx1OTZkNlx1OTcwMFx1OTgwOFx1OTk5Nlx1OWFkM1x1OWIxYVx1NTNkNFx1NTg3ZVx1NTkxOVx1NWI3MFx1NWJiZlx1NmRkMVx1NmY1YVx1NzE5Zlx1NzQyMVx1NzRiOVx1ODA4NVx1'@;
put 'ODNmZFx1NWRlMVx1NWY4N1x1NWZhYVx1NjA0Mlx1NjVlY1x1NjgxMlx1Njk2Zlx1NmE1M1x1NmI4OVx1NmQzNVx1NmRmM1x1NzNlM1x1NzZmZVx1NzdhY1x1N2I0ZFx1N2QxNFx1ODEyM1x1ODIxY1x1ODM0MFx1ODRmNFx1ODU2M1x1OGE2Mlx1OGFjNFx1OTE4N1x1OTMxZVx1OTgwNlx1OTli'@;
put 'NFx1NjIwY1x1ODg1M1x1OGZmMFx1OTI2NVx1NWQwN1x1NWQyN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyNl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyNl1bZ11dPTU3ODU2K2csX1s1Nzg1NitnXT15WzIyNl1bZ10pO2Zvcih5WzIy'@;
put 'N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1'@;
put 'ODc2OFx1NmZkNVx1NjJmZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjVi'@;
put 'ZFx1NjYyZlx1NjY0Mlx1NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1'@;
put 'OGI1OFx1OGVmZVx1OThkZlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZj'@;
put 'NVx1NTkzMVx1NWJhNFx1NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyN11bZ11dPTU4MTEyK2csX1s1ODExMitnXT15WzIyN11b'@;
put 'Z10pO2Zvcih5WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk3Mlx1'@;
put 'NmRmMVx1NzAwYlx1NzUxYVx1ODJhZlx1OGFmNlx1NGVjMFx1NTM0MVx1Zjk3M1x1OTZkOVx1NmMwZlx1NGU5ZVx1NGZjNFx1NTE1Mlx1NTU1ZVx1NWEyNVx1NWNlOFx1NjIxMVx1NzI1OVx1ODJiZFx1ODNhYVx1ODZmZVx1ODg1OVx1OGExZFx1OTYzZlx1OTZjNVx1OTkxM1x1OWQwOVx1OWQ1'@;
put 'ZFx1NTgwYVx1NWNiM1x1NWRiZFx1NWU0NFx1NjBlMVx1NjExNVx1NjNlMVx1NmEwMlx1NmUyNVx1OTEwMlx1OTM1NFx1OTg0ZVx1OWMxMFx1OWY3N1x1NWI4OVx1NWNiOFx1NjMwOVx1NjY0Zlx1Njg0OFx1NzczY1x1OTZjMVx1OTc4ZFx1OTg1NFx1OWI5Zlx1NjVhMVx1OGIwMVx1OGVjYlx1'@;
put 'OTViY1x1NTUzNVx1NWNhOVx1NWRkNlx1NWViNVx1NjY5N1x1NzY0Y1x1ODNmNFx1OTVjN1x1NThkM1x1NjJiY1x1NzJjZVx1OWQyOFx1NGVmMFx1NTkyZVx1NjAwZlx1NjYzYlx1NmI4M1x1NzllN1x1OWQyNlx1NTM5M1x1NTRjMFx1NTdjM1x1NWQxNlx1NjExYlx1NjZkNlx1NmRhZlx1Nzg4'@;
put 'ZFx1ODI3ZVx1OTY5OFx1OTc0NFx1NTM4NFx1NjI3Y1x1NjM5Nlx1NmRiMlx1N2UwYVx1ODE0Ylx1OTg0ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyOF1bZ11dPTU4MzY4K2csX1s1ODM2'@;
put 'OCtnXT15WzIyOF1bZ10pO2Zvcih5WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NmFmYlx1N2Y0Y1x1OWRhZlx1OWUxYVx1NGU1Zlx1NTAzYlx1NTFiNlx1NTkxY1x1NjBmOVx1NjNmNlx1NjkzMFx1NzIzYVx1ODAzNlx1Zjk3NFx1OTFjZVx1NWYzMVx1Zjk3NVx1Zjk3Nlx1N2QwNFx1ODJlNVx1ODQ2Zlx1ODRiYlx1ODVlNVx1OGU4ZFx1Zjk3N1x1NGY2Zlx1Zjk3'@;
put 'OFx1Zjk3OVx1NThlNFx1NWI0M1x1NjA1OVx1NjNkYVx1NjUxOFx1NjU2ZFx1NjY5OFx1Zjk3YVx1Njk0YVx1NmEyM1x1NmQwYlx1NzAwMVx1NzE2Y1x1NzVkMlx1NzYwZFx1NzliM1x1N2E3MFx1Zjk3Ylx1N2Y4YVx1Zjk3Y1x1ODk0NFx1Zjk3ZFx1OGI5M1x1OTFjMFx1OTY3ZFx1Zjk3ZVx1'@;
put 'OTkwYVx1NTcwNFx1NWZhMVx1NjViY1x1NmYwMVx1NzYwMFx1NzlhNlx1OGE5ZVx1OTlhZFx1OWI1YVx1OWY2Y1x1NTEwNFx1NjFiNlx1NjI5MVx1NmE4ZFx1ODFjNlx1NTA0M1x1NTgzMFx1NWY2Nlx1NzEwOVx1OGEwMFx1OGFmYVx1NWI3Y1x1ODYxNlx1NGZmYVx1NTEzY1x1NTZiNFx1NTk0'@;
put 'NFx1NjNhOVx1NmRmOVx1NWRhYVx1Njk2ZFx1NTE4Nlx1NGU4OFx1NGY1OVx1Zjk3Zlx1Zjk4MFx1Zjk4MVx1NTk4Mlx1Zjk4Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyOV1bZ11dPTU4'@;
put 'NjI0K2csX1s1ODYyNCtnXT15WzIyOV1bZ10pO2Zvcih5WzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVh'@;
put 'Ylx1N2U3OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1'@;
put 'NzE1OVx1Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFi'@;
put 'MVx1ZjlhMFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5'@;
put 'WzIzMF1bZ11dPTU4ODgwK2csX1s1ODg4MCtnXT15WzIzMF1bZ10pO2Zvcih5WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlhNlx1OTViYlx1OWFlNVx1OWU3ZFx1NjZjNFx1ZjlhN1x1NzFjMVx1ODQ0OVx1ZjlhOFx1ZjlhOVx1NTg0Ylx1ZjlhYVx1ZjlhYlx1NWRiOFx1NWY3MVx1ZjlhY1x1NjYyMFx1NjY4ZVx1Njk3OVx1NjlhZVx1NmMzOFx1NmNmM1x1NmUz'@;
put 'Nlx1NmY0MVx1NmZkYVx1NzAxYlx1NzAyZlx1NzE1MFx1NzFkZlx1NzM3MFx1ZjlhZFx1NzQ1Ylx1ZjlhZVx1NzRkNFx1NzZjOFx1N2E0ZVx1N2U5M1x1ZjlhZlx1ZjliMFx1ODJmMVx1OGE2MFx1OGZjZVx1ZjliMVx1OTM0OFx1ZjliMlx1OTcxOVx1ZjliM1x1ZjliNFx1NGU0Mlx1NTAyYVx1'@;
put 'ZjliNVx1NTIwOFx1NTNlMVx1NjZmM1x1NmM2ZFx1NmZjYVx1NzMwYVx1Nzc3Zlx1N2E2Mlx1ODJhZVx1ODVkZFx1ODYwMlx1ZjliNlx1ODhkNFx1OGE2M1x1OGI3ZFx1OGM2Ylx1ZjliN1x1OTJiM1x1ZjliOFx1OTcxM1x1OTgxMFx1NGU5NFx1NGYwZFx1NGZjOVx1NTBiMlx1NTM0OFx1NTQz'@;
put 'ZVx1NTQzM1x1NTVkYVx1NTg2Mlx1NThiYVx1NTk2N1x1NWExYlx1NWJlNFx1NjA5Zlx1ZjliOVx1NjFjYVx1NjU1Nlx1NjVmZlx1NjY2NFx1NjhhN1x1NmM1YVx1NmZiM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjMxXVtnXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoSVt5WzIzMV1bZ11dPTU5MTM2K2csX1s1OTEzNitnXT15WzIzMV1bZ10pO2Zvcih5WzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzBjZlx1NzFhY1x1NzM1Mlx1N2I3ZFx1ODcwOFx1OGFhNFx1OWMzMlx1OWYwN1x1NWM0Ylx1NmM4M1x1NzM0NFx1NzM4OVx1OTIzYVx1NmVhYlx1NzQ2NVx1NzYxZlx1N2E2OVx1N2UxNVx1ODYwYVx1NTE0MFx1NThj'@;
put 'NVx1NjRjMVx1NzRlZVx1NzUxNVx1NzY3MFx1N2ZjMVx1OTA5NVx1OTZjZFx1OTk1NFx1NmUyNlx1NzRlNlx1N2FhOVx1N2FhYVx1ODFlNVx1ODZkOVx1ODc3OFx1OGExYlx1NWE0OVx1NWI4Y1x1NWI5Ylx1NjhhMVx1NjkwMFx1NmQ2M1x1NzNhOVx1NzQxM1x1NzQyY1x1Nzg5N1x1N2RlOVx1'@;
put 'N2ZlYlx1ODExOFx1ODE1NVx1ODM5ZVx1OGM0Y1x1OTYyZVx1OTgxMVx1NjZmMFx1NWY4MFx1NjVmYVx1Njc4OVx1NmM2YVx1NzM4Ylx1NTAyZFx1NWEwM1x1NmI2YVx1NzdlZVx1NTkxNlx1NWQ2Y1x1NWRjZFx1NzMyNVx1NzU0Zlx1ZjliYVx1ZjliYlx1NTBlNVx1NTFmOVx1NTgyZlx1NTky'@;
put 'ZFx1NTk5Nlx1NTlkYVx1NWJlNVx1ZjliY1x1ZjliZFx1NWRhMlx1NjJkN1x1NjQxNlx1NjQ5M1x1NjRmZVx1ZjliZVx1NjZkY1x1ZjliZlx1NmE0OFx1ZjljMFx1NzFmZlx1NzQ2NFx1ZjljMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjMy'@;
put 'XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzMl1bZ11dPTU5MzkyK2csX1s1OTM5MitnXT15WzIzMl1bZ10pO2Zvcih5WzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODky'@;
put 'NVx1OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1'@;
put 'NTA3Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4'@;
put 'NVx1OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzM10ubGVuZ3RoOysrZyk2'@;
put 'NTUzMyE9PXlbMjMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzM11bZ11dPTU5NjQ4K2csX1s1OTY0OCtnXT15WzIzM11bZ10pO2Zvcih5WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0Ylx1OTY5NVx1OTZmMlx1OTdmYlx1ODUxYVx1OWIzMVx1NGU5MFx1NzE4YVx1OTZjNFx1NTE0M1x1NTM5Zlx1NTRlMVx1NTcxM1x1NTcxMlx1NTdhM1x1NWE5Ylx1NWFj'@;
put 'NFx1NWJjM1x1NjAyOFx1NjEzZlx1NjNmNFx1NmM4NVx1NmQzOVx1NmU3Mlx1NmU5MFx1NzIzMFx1NzMzZlx1NzQ1N1x1ODJkMVx1ODg4MVx1OGY0NVx1OTA2MFx1ZjljNlx1OTY2Mlx1OTg1OFx1OWQxYlx1NjcwOFx1OGQ4YVx1OTI1ZVx1NGY0ZFx1NTA0OVx1NTBkZVx1NTM3MVx1NTcwZFx1'@;
put 'NTlkNFx1NWEwMVx1NWMwOVx1NjE3MFx1NjY5MFx1NmUyZFx1NzIzMlx1NzQ0Ylx1N2RlZlx1ODBjM1x1ODQwZVx1ODQ2Nlx1ODUzZlx1ODc1Zlx1ODg1Ylx1ODkxOFx1OGIwMlx1OTA1NVx1OTdjYlx1OWI0Zlx1NGU3M1x1NGY5MVx1NTExMlx1NTE2YVx1ZjljN1x1NTUyZlx1NTVhOVx1NWI3'@;
put 'YVx1NWJhNVx1NWU3Y1x1NWU3ZFx1NWViZVx1NjBhMFx1NjBkZlx1NjEwOFx1NjEwOVx1NjNjNFx1NjUzOFx1NjcwOVx1ZjljOFx1NjdkNFx1NjdkYVx1ZjljOVx1Njk2MVx1Njk2Mlx1NmNiOVx1NmQyN1x1ZjljYVx1NmUzOFx1ZjljYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzNF0u'@;
put 'bGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzNF1bZ11dPTU5OTA0K2csX1s1OTkwNCtnXT15WzIzNF1bZ10pO2Zvcih5WzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlMVx1NzMzNlx1NzMzN1x1ZjljY1x1NzQ1Y1x1NzUzMVx1ZjljZFx1NzY1Mlx1ZjljZVx1ZjljZlx1N2RhZFx1ODFmZVx1ODQzOFx1ODhkNVx1OGE5'@;
put 'OFx1OGFkYlx1OGFlZFx1OGUzMFx1OGU0Mlx1OTA0YVx1OTAzZVx1OTA3YVx1OTE0OVx1OTFjOVx1OTM2ZVx1ZjlkMFx1ZjlkMVx1NTgwOVx1ZjlkMlx1NmJkM1x1ODA4OVx1ODBiMlx1ZjlkM1x1ZjlkNFx1NTE0MVx1NTk2Ylx1NWMzOVx1ZjlkNVx1ZjlkNlx1NmY2NFx1NzNhN1x1ODBlNFx1'@;
put 'OGQwN1x1ZjlkN1x1OTIxN1x1OTU4Zlx1ZjlkOFx1ZjlkOVx1ZjlkYVx1ZjlkYlx1ODA3Zlx1NjIwZVx1NzAxY1x1N2Q2OFx1ODc4ZFx1ZjlkY1x1NTdhMFx1NjA2OVx1NjE0N1x1NmJiN1x1OGFiZVx1OTI4MFx1OTZiMVx1NGU1OVx1NTQxZlx1NmRlYlx1ODUyZFx1OTY3MFx1OTdmM1x1OThl'@;
put 'ZVx1NjNkNlx1NmNlM1x1OTA5MVx1NTFkZFx1NjFjOVx1ODFiYVx1OWRmOVx1NGY5ZFx1NTAxYVx1NTEwMFx1NWI5Y1x1NjEwZlx1NjFmZlx1NjRlY1x1NjkwNVx1NmJjNVx1NzU5MVx1NzdlM1x1N2ZhOVx1ODI2NFx1ODU4Zlx1ODdmYlx1ODg2M1x1OGFiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9'@;
put 'MDtnIT15WzIzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzNV1bZ11dPTYwMTYwK2csX1s2MDE2MCtnXT15WzIzNV1bZ10pO2Zvcih5WzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1'@;
put 'Ylx1NjAyMVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1'@;
put 'ZjllYlx1ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1Zjlm'@;
put 'MVx1OTc2ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLGc9MDtnIT15WzIzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzNl1bZ11dPTYwNDE2K2csX1s2MDQxNitnXT15WzIzNl1bZ10pO2Zvcih5WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZjlmN1x1ZjlmOFx1ZjlmOVx1NGVjZFx1NTI2OVx1NWI1NVx1ODJiZlx1NGVkNFx1NTIzYVx1NTRhOFx1NTlj'@;
put 'OVx1NTlmZlx1NWI1MFx1NWI1N1x1NWI1Y1x1NjA2M1x1NjE0OFx1NmVjYlx1NzA5OVx1NzE2ZVx1NzM4Nlx1NzRmN1x1NzViNVx1NzhjMVx1N2QyYlx1ODAwNVx1ODFlYVx1ODMyOFx1ODUxN1x1ODVjOVx1OGFlZVx1OGNjN1x1OTZjY1x1NGY1Y1x1NTJmYVx1NTZiY1x1NjVhYlx1NjYyOFx1'@;
put 'NzA3Y1x1NzBiOFx1NzIzNVx1N2RiZFx1ODI4ZFx1OTE0Y1x1OTZjMFx1OWQ3Mlx1NWI3MVx1NjhlN1x1NmI5OFx1NmY3YVx1NzZkZVx1NWM5MVx1NjZhYlx1NmY1Ylx1N2JiNFx1N2MyYVx1ODgzNlx1OTZkY1x1NGUwOFx1NGVkN1x1NTMyMFx1NTgzNFx1NThiYlx1NThlZlx1NTk2Y1x1NWMw'@;
put 'N1x1NWUzM1x1NWU4NFx1NWYzNVx1NjM4Y1x1NjZiMlx1Njc1Nlx1NmExZlx1NmFhM1x1NmIwY1x1NmYzZlx1NzI0Nlx1ZjlmYVx1NzM1MFx1NzQ4Ylx1N2FlMFx1N2NhN1x1ODE3OFx1ODFkZlx1ODFlN1x1ODM4YVx1ODQ2Y1x1ODUyM1x1ODU5NFx1ODVjZlx1ODhkZFx1OGQxM1x1OTFhY1x1'@;
put 'OTU3N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzN11bZ11dPTYwNjcyK2csX1s2MDY3MitnXT15WzIzN11bZ10pO2Zvcih5WzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY5Y1x1NTE4ZFx1NTRjOVx1NTcyOFx1NWJiMFx1NjI0ZFx1Njc1MFx1NjgzZFx1Njg5'@;
put 'M1x1NmUzZFx1NmVkM1x1NzA3ZFx1N2UyMVx1ODhjMVx1OGNhMVx1OGYwOVx1OWY0Ylx1OWY0ZVx1NzIyZFx1N2I4Zlx1OGFjZFx1OTMxYVx1NGY0N1x1NGY0ZVx1NTEzMlx1NTQ4MFx1NTlkMFx1NWU5NVx1NjJiNVx1Njc3NVx1Njk2ZVx1NmExN1x1NmNhZVx1NmUxYVx1NzJkOVx1NzMyYVx1'@;
put 'NzViZFx1N2JiOFx1N2QzNVx1ODJlN1x1ODNmOVx1ODQ1N1x1ODVmN1x1OGE1Ylx1OGNhZlx1OGU4N1x1OTAxOVx1OTBiOFx1OTZjZVx1OWY1Zlx1NTJlM1x1NTQwYVx1NWFlMVx1NWJjMlx1NjQ1OFx1NjU3NVx1NmVmNFx1NzJjNFx1ZjlmYlx1NzY4NFx1N2E0ZFx1N2IxYlx1N2M0ZFx1N2Uz'@;
put 'ZVx1N2ZkZlx1ODM3Ylx1OGIyYlx1OGNjYVx1OGQ2NFx1OGRlMVx1OGU1Zlx1OGZlYVx1OGZmOVx1OTA2OVx1OTNkMVx1NGY0M1x1NGY3YVx1NTBiM1x1NTE2OFx1NTE3OFx1NTI0ZFx1NTI2YVx1NTg2MVx1NTg3Y1x1NTk2MFx1NWMwOFx1NWM1NVx1NWVkYlx1NjA5Ylx1NjIzMFx1NjgxM1x1'@;
put 'NmJiZlx1NmMwOFx1NmZiMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzOF1bZ11dPTYwOTI4K2csX1s2MDkyOCtnXT15WzIzOF1bZ10pO2Zvcih5WzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1N2I0'@;
put 'Y1x1N2I4Ylx1N2JhZFx1N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYzOFx1'@;
put 'NzBiOVx1N2M5OFx1OTcxMVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1Njdm'@;
put 'ZVx1Njk2OFx1NmE4OVx1NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFkOFx1'@;
put 'OTI2Nlx1OTJjY1x1OTMyMFx1OTcwNlx1OTc1Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzOV1bZ11dPTYxMTg0K2csX1s2MTE4NCtnXT15WzIzOV1bZ10pO2Zvcih5WzI0MF09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc1Y1x1OTgwMlx1OWYwZVx1NTIzNlx1NTI5'@;
put 'MVx1NTU3Y1x1NTgyNFx1NWUxZFx1NWYxZlx1NjA4Y1x1NjNkMFx1NjhhZlx1NmZkZlx1Nzk2ZFx1N2IyY1x1ODFjZFx1ODViYVx1ODhmZFx1OGFmOFx1OGU0NFx1OTE4ZFx1OTY2NFx1OTY5Ylx1OTczZFx1OTg0Y1x1OWY0YVx1NGZjZVx1NTE0Nlx1NTFjYlx1NTJhOVx1NTYzMlx1NWYxNFx1'@;
put 'NWY2Ylx1NjNhYVx1NjRjZFx1NjVlOVx1NjY0MVx1NjZmYVx1NjZmOVx1NjcxZFx1Njg5ZFx1NjhkN1x1NjlmZFx1NmYxNVx1NmY2ZVx1NzE2N1x1NzFlNVx1NzIyYVx1NzRhYVx1NzczYVx1Nzk1Nlx1Nzk1YVx1NzlkZlx1N2EyMFx1N2E5NVx1N2M5N1x1N2NkZlx1N2Q0NFx1N2U3MFx1ODA4'@;
put 'N1x1ODVmYlx1ODZhNFx1OGE1NFx1OGFiZlx1OGQ5OVx1OGU4MVx1OTAyMFx1OTA2ZFx1OTFlM1x1OTYzYlx1OTZkNVx1OWNlNVx1NjVjZlx1N2MwN1x1OGRiM1x1OTNjM1x1NWI1OFx1NWMwYVx1NTM1Mlx1NjJkOVx1NzMxZFx1NTAyN1x1NWI5N1x1NWY5ZVx1NjBiMFx1NjE2Ylx1NjhkNVx1'@;
put 'NmRkOVx1NzQyZVx1N2EyZVx1N2Q0Mlx1N2Q5Y1x1N2UzMVx1ODE2Ylx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0MF1bZ11dPTYxNDQwK2csX1s2MTQ0MCtnXT15WzI0MF1bZ10pO2Zvcih5'@;
put 'WzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUyYVx1OGUzNVx1OTM3'@;
put 'ZVx1OTQxOFx1NGY1MFx1NTc1MFx1NWRlNlx1NWVhN1x1NjMyYlx1N2Y2YVx1NGUzYlx1NGY0Zlx1NGY4Zlx1NTA1YVx1NTlkZFx1ODBjNFx1NTQ2YVx1NTQ2OFx1NTVmZVx1NTk0Zlx1NWI5OVx1NWRkZVx1NWVkYVx1NjY1ZFx1NjczMVx1NjdmMVx1NjgyYVx1NmNlOFx1NmQzMlx1NmU0YVx1'@;
put 'NmY4ZFx1NzBiN1x1NzNlMFx1NzU4N1x1N2M0Y1x1N2QwMlx1N2QyY1x1N2RhMlx1ODIxZlx1ODZkYlx1OGEzYlx1OGE4NVx1OGQ3MFx1OGU4YVx1OGYzM1x1OTAzMVx1OTE0ZVx1OTE1Mlx1OTQ0NFx1OTlkMFx1N2FmOVx1N2NhNVx1NGZjYVx1NTEwMVx1NTFjNlx1NTdjOFx1NWJlZlx1NWNm'@;
put 'Ylx1NjY1OVx1NmEzZFx1NmQ1YVx1NmU5Nlx1NmZlY1x1NzEwY1x1NzU2Zlx1N2FlM1x1ODgyMlx1OTAyMVx1OTA3NVx1OTZjYlx1OTlmZlx1ODMwMVx1NGUyZFx1NGVmMlx1ODg0Nlx1OTFjZFx1NTM3ZFx1NmFkYlx1Njk2Ylx1NmM0MVx1ODQ3YVx1NTg5ZVx1NjE4ZVx1NjZmZVx1NjJlZlx1'@;
put 'NzBkZFx1NzUxMVx1NzVjN1x1N2U1Mlx1ODRiOFx1OGI0OVx1OGQwOFx1NGU0Ylx1NTNlYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0MV1bZ11dPTYxNjk2K2csX1s2MTY5NitnXT15WzI0'@;
put 'MV1bZ10pO2Zvcih5WzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRh'@;
put 'Ylx1NTczMFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1OGE4Y1x1'@;
put 'ZjlmY1x1OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZlMVx1Nzcx'@;
put 'ZVx1Nzc4Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1ODFhM1x1'@;
put 'ODZlZFx1OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0Ml1bZ11dPTYxOTUyK2csX1s2'@;
put 'MTk1MitnXT15WzI0Ml1bZ10pO2Zvcih5WzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1OTNmNlx1OTZjNlx1NWZiNVx1NjFmMlx1NmY4NFx1NGUxNFx1NGY5OFx1NTAxZlx1NTNjOVx1NTVkZlx1NWQ2Zlx1NWRlZVx1NmIyMVx1NmI2NFx1NzhjYlx1N2I5YVx1ZjlmZVx1OGU0OVx1OGVjYVx1OTA2ZVx1NjM0OVx1NjQzZVx1Nzc0MFx1N2E4NFx1OTMyZlx1OTQ3Zlx1'@;
put 'OWY2YVx1NjRiMFx1NmZhZlx1NzFlNlx1NzRhOFx1NzRkYVx1N2FjNFx1N2MxMlx1N2U4Mlx1N2NiMlx1N2U5OFx1OGI5YVx1OGQwYVx1OTQ3ZFx1OTkxMFx1OTk0Y1x1NTIzOVx1NWJkZlx1NjRlNlx1NjcyZFx1N2QyZVx1NTBlZFx1NTNjM1x1NTg3OVx1NjE1OFx1NjE1OVx1NjFmYVx1NjVh'@;
put 'Y1x1N2FkOVx1OGI5Mlx1OGI5Nlx1NTAwOVx1NTAyMVx1NTI3NVx1NTUzMVx1NWEzY1x1NWVlMFx1NWY3MFx1NjEzNFx1NjU1ZVx1NjYwY1x1NjYzNlx1NjZhMlx1NjljZFx1NmVjNFx1NmYzMlx1NzMxNlx1NzYyMVx1N2E5M1x1ODEzOVx1ODI1OVx1ODNkNlx1ODRiY1x1NTBiNVx1NTdmMFx1'@;
put 'NWJjMFx1NWJlOFx1NWY2OVx1NjNhMVx1NzgyNlx1N2RiNVx1ODNkY1x1ODUyMVx1OTFjN1x1OTFmNVx1NTE4YVx1NjdmNVx1N2I1Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0M11bZ11d'@;
put 'PTYyMjA4K2csX1s2MjIwOCtnXT15WzI0M11bZ10pO2Zvcih5WzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhY1x1NTFjNFx1NTliYlx1NjBiZFx1ODY1NVx1NTAxY1x1ZjlmZlx1NTI1NFx1NWMzYVx1NjE3ZFx1NjIxYVx1NjJkM1x1NjRmMlx1NjVhNVx1NmVjY1x1NzYyMFx1ODEwYVx1OGU2MFx1OTY1Zlx1OTZiYlx1NGVkZlx1NTM0M1x1NTU5OFx1NTkyOVx1'@;
put 'NWRkZFx1NjRjNVx1NmNjOVx1NmRmYVx1NzM5NFx1N2E3Zlx1ODIxYlx1ODVhNlx1OGNlNFx1OGUxMFx1OTA3N1x1OTFlN1x1OTVlMVx1OTYyMVx1OTdjNlx1NTFmOFx1NTRmMlx1NTU4Nlx1NWZiOVx1NjRhNFx1NmY4OFx1N2RiNFx1OGYxZlx1OGY0ZFx1OTQzNVx1NTBjOVx1NWMxNlx1NmNi'@;
put 'ZVx1NmRmYlx1NzUxYlx1NzdiYlx1N2MzZFx1N2M2NFx1OGE3OVx1OGFjMlx1NTgxZVx1NTliZVx1NWUxNlx1NjM3N1x1NzI1Mlx1NzU4YVx1Nzc2Ylx1OGFkY1x1OGNiY1x1OGYxMlx1NWVmM1x1NjY3NFx1NmRmOFx1ODA3ZFx1ODNjMVx1OGFjYlx1OTc1MVx1OWJkNlx1ZmEwMFx1NTI0M1x1'@;
put 'NjZmZlx1NmQ5NVx1NmVlZlx1N2RlMFx1OGFlNlx1OTAyZVx1OTA1ZVx1OWFkNFx1NTIxZFx1NTI3Zlx1NTRlOFx1NjE5NFx1NjI4NFx1NjJkYlx1NjhhMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ0XVtnXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'SVt5WzI0NF1bZ11dPTYyNDY0K2csX1s2MjQ2NCtnXT15WzI0NF1bZ10pO2Zvcih5WzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZjM1x1NTZkMVx1'@;
put 'NzFlZFx1NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1Njk3OFx1NmEx'@;
put 'ZVx1NmU2Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1OVx1OGU3NFx1'@;
put 'OGVmOFx1OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ1XVtnXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoSVt5WzI0NV1bZ11dPTYyNzIwK2csX1s2MjcyMCtnXT15WzI0NV1bZ10pO2Zvcih5WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwNVx1NTNkNlx1NTQzOVx1NTYzNFx1NWEzNlx1NWMzMVx1NzA4YVx1N2ZlMFx1ODA1YVx1ODEwNlx1ODFlZFx1OGRhM1x1OTE4OVx1OWE1Zlx1OWRmMlx1NTA3NFx1NGVjNFx1NTNhMFx1NjBmYlx1NmUyY1x1'@;
put 'NWM2NFx1NGY4OFx1NTAyNFx1NTVlNFx1NWNkOVx1NWU1Zlx1NjA2NVx1Njg5NFx1NmNiYlx1NmRjNFx1NzFiZVx1NzVkNFx1NzVmNFx1NzY2MVx1N2ExYVx1N2E0OVx1N2RjN1x1N2RmYlx1N2Y2ZVx1ODFmNFx1ODZhOVx1OGYxY1x1OTZjOVx1OTliM1x1OWY1Mlx1NTI0N1x1NTJjNVx1OThl'@;
put 'ZFx1ODlhYVx1NGUwM1x1NjdkMlx1NmYwNlx1NGZiNVx1NWJlMlx1Njc5NVx1NmM4OFx1NmQ3OFx1NzQxYlx1NzgyN1x1OTFkZFx1OTM3Y1x1ODdjNFx1NzllNFx1N2EzMVx1NWZlYlx1NGVkNlx1NTRhNFx1NTUzZVx1NThhZVx1NTlhNVx1NjBmMFx1NjI1M1x1NjJkNlx1NjczNlx1Njk1NVx1'@;
put 'ODIzNVx1OTY0MFx1OTliMVx1OTlkZFx1NTAyY1x1NTM1M1x1NTU0NFx1NTc3Y1x1ZmEwMVx1NjI1OFx1ZmEwMlx1NjRlMlx1NjY2Ylx1NjdkZFx1NmZjMVx1NmZlZlx1NzQyMlx1NzQzOFx1OGExN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlb'@;
put 'MjQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0Nl1bZ11dPTYyOTc2K2csX1s2Mjk3NitnXT15WzI0Nl1bZ10pO2Zvcih5WzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQzOFx1NTQ1MVx1NTYwNlx1NTc2Nlx1NWY0OFx1NjE5YVx1NmI0ZVx1NzA1OFx1NzBhZFx1N2RiYlx1OGE5NVx1NTk2YVx1ODEyYlx1NjNhMlx1NzcwOFx1ODAzZFx1OGNhYVx1NTg1NFx1'@;
put 'NjQyZFx1NjliYlx1NWI5NVx1NWUxMVx1NmU2Zlx1ZmEwM1x1ODU2OVx1NTE0Y1x1NTNmMFx1NTkyYVx1NjAyMFx1NjE0Ylx1NmI4Nlx1NmM3MFx1NmNmMFx1N2IxZVx1ODBjZVx1ODJkNFx1OGRjNlx1OTBiMFx1OThiMVx1ZmEwNFx1NjRjN1x1NmZhNFx1NjQ5MVx1NjUwNFx1NTE0ZVx1NTQx'@;
put 'MFx1NTcxZlx1OGEwZVx1NjE1Zlx1Njg3Nlx1ZmEwNVx1NzVkYlx1N2I1Mlx1N2Q3MVx1OTAxYVx1NTgwNlx1NjljY1x1ODE3Zlx1ODkyYVx1OTAwMFx1OTgzOVx1NTA3OFx1NTk1N1x1NTlhY1x1NjI5NVx1OTAwZlx1OWIyYVx1NjE1ZFx1NzI3OVx1OTVkNlx1NTc2MVx1NWE0Nlx1NWRmNFx1'@;
put 'NjI4YVx1NjRhZFx1NjRmYVx1Njc3N1x1NmNlMlx1NmQzZVx1NzIyY1x1NzQzNlx1NzgzNFx1N2Y3N1x1ODJhZFx1OGRkYlx1OTgxN1x1NTIyNFx1NTc0Mlx1Njc3Zlx1NzI0OFx1NzRlM1x1OGNhOVx1OGZhNlx1OTIxMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0N10ubGVuZ3RoOysr'@;
put 'Zyk2NTUzMyE9PXlbMjQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0N11bZ11dPTYzMjMyK2csX1s2MzIzMitnXT15WzI0N11bZ10pO2Zvcih5WzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1OGM5ZFx1NWY2ZFx1'@;
put 'NmY4ZVx1NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4M1x1ODBiYVx1ODUz'@;
put 'ZFx1OTU4OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1ODkxMlx1OTAwYlx1'@;
put 'OTJlYVx1OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0'@;
put 'OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0OF1bZ11dPTYzNDg4K2csX1s2MzQ4OCtnXT15WzI0OF1bZ10pO2Zvcih5WzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjMVx1N2ExZlx1Njk1M1x1OGFmN1x1OGM0YVx1OThhOFx1OTlhZVx1NWY3Y1x1NjJhYlx1NzViMlx1NzZhZVx1ODhhYlx1OTA3Zlx1OTY0Mlx1'@;
put 'NTMzOVx1NWYzY1x1NWZjNVx1NmNjY1x1NzNjY1x1NzU2Mlx1NzU4Ylx1N2I0Nlx1ODJmZVx1OTk5ZFx1NGU0Zlx1OTAzY1x1NGUwYlx1NGY1NVx1NTNhNlx1NTkwZlx1NWVjOFx1NjYzMFx1NmNiM1x1NzQ1NVx1ODM3N1x1ODc2Nlx1OGNjMFx1OTA1MFx1OTcxZVx1OWMxNVx1NThkMVx1NWI3'@;
put 'OFx1ODY1MFx1OGIxNFx1OWRiNFx1NWJkMlx1NjA2OFx1NjA4ZFx1NjVmMVx1NmM1N1x1NmYyMlx1NmZhM1x1NzAxYVx1N2Y1NVx1N2ZmMFx1OTU5MVx1OTU5Mlx1OTY1MFx1OTdkM1x1NTI3Mlx1OGY0NFx1NTFmZFx1NTQyYlx1NTRiOFx1NTU2M1x1NTU4YVx1NmFiYlx1NmRiNVx1N2RkOFx1'@;
put 'ODI2Nlx1OTI5Y1x1OTY3N1x1OWU3OVx1NTQwOFx1NTRjOFx1NzZkMlx1ODZlNFx1OTVhNFx1OTVkNFx1OTY1Y1x1NGVhMlx1NGYwOVx1NTllZVx1NWFlNlx1NWRmN1x1NjA1Mlx1NjI5N1x1Njc2ZFx1Njg0MVx1NmM4Nlx1NmUyZlx1N2YzOFx1ODA5Ylx1ODIyYVx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LGc9MDtnIT15WzI0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0OV1bZ11dPTYzNzQ0K2csX1s2Mzc0NCtnXT15WzI0OV1bZ10pO2Zvcih5WzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwOFx1ZmEwOVx1OTgwNVx1NGVhNVx1NTA1NVx1NTRiM1x1NTc5M1x1NTk1YVx1NWI2OVx1NWJiM1x1NjFjOFx1Njk3N1x1'@;
put 'NmQ3N1x1NzAyM1x1ODdmOVx1ODllM1x1OGE3Mlx1OGFlN1x1OTA4Mlx1OTllZFx1OWFiOFx1NTJiZVx1NjgzOFx1NTAxNlx1NWU3OFx1Njc0Zlx1ODM0N1x1ODg0Y1x1NGVhYlx1NTQxMVx1NTZhZVx1NzNlNlx1OTExNVx1OTdmZlx1OTkwOVx1OTk1N1x1OTk5OVx1NTY1M1x1NTg5Zlx1ODY1'@;
put 'Ylx1OGEzMVx1NjFiMlx1NmFmNlx1NzM3Ylx1OGVkMlx1NmI0N1x1OTZhYVx1OWE1N1x1NTk1NVx1NzIwMFx1OGQ2Ylx1OTc2OVx1NGZkNFx1NWNmNFx1NWYyNlx1NjFmOFx1NjY1Ylx1NmNlYlx1NzBhYlx1NzM4NFx1NzNiOVx1NzNmZVx1NzcyOVx1Nzc0ZFx1N2Q0M1x1N2Q2Mlx1N2UyM1x1'@;
put 'ODIzN1x1ODg1Mlx1ZmEwYVx1OGNlMlx1OTI0OVx1OTg2Zlx1NWI1MVx1N2E3NFx1ODg0MFx1OTgwMVx1NWFjY1x1NGZlMFx1NTM1NFx1NTkzZVx1NWNmZFx1NjMzZVx1NmQ3OVx1NzJmOVx1ODEwNVx1ODEwN1x1ODNhMlx1OTJjZlx1OTgzMFx1NGVhOFx1NTE0NFx1NTIxMVx1NTc4Ylx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI1MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjUwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI1MF1bZ11dPTY0ZTMrZyxfWzY0ZTMrZ109eVsyNTBdW2ddKTtmb3IoeVsyNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmNjJcdTZjYzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlcdTc0NjlcdTgzNGFcdTg3'@;
put 'YTJcdTg4NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2MGFcdTY2NjdcdTZiZWJc'@;
put 'dTZkNjlcdTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFcdTkzYWNcdTk4MDBcdTk4'@;
put 'NjVcdTYwZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTViMDVcdTZhM2FcdTcwNmJc'@;
put 'dTc1NzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI1MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNTFdW2ddXT02NDI1NitnLF9bNjQyNTYrZ109eVsyNTFdW2ddKTtmb3IoeVsyNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OGRcdTc5YmVcdTgyYjFcdTgzZWZcdThhNzFcdThiNDFcdThjYThcdTk3NzRcdWZh'@;
put 'MGJcdTY0ZjRcdTY1MmJcdTc4YmFcdTc4YmJcdTdhNmJcdTRlMzhcdTU1OWFcdTU5NTBcdTViYTZcdTVlN2JcdTYwYTNcdTYzZGJcdTZiNjFcdTY2NjVcdTY4NTNcdTZlMTlcdTcxNjVcdTc0YjBcdTdkMDhcdTkwODRcdTlhNjlcdTljMjVcdTZkM2JcdTZlZDFcdTczM2VcdThjNDFcdTk1Y2Fc'@;
put 'dTUxZjBcdTVlNGNcdTVmYThcdTYwNGRcdTYwZjZcdTYxMzBcdTYxNGNcdTY2NDNcdTY2NDRcdTY5YTVcdTZjYzFcdTZlNWZcdTZlYzlcdTZmNjJcdTcxNGNcdTc0OWNcdTc2ODdcdTdiYzFcdTdjMjdcdTgzNTJcdTg3NTdcdTkwNTFcdTk2OGRcdTllYzNcdTUzMmZcdTU2ZGVcdTVlZmJcdTVm'@;
put 'OGFcdTYwNjJcdTYwOTRcdTYxZjdcdTY2NjZcdTY3MDNcdTZhOWNcdTZkZWVcdTZmYWVcdTcwNzBcdTczNmFcdTdlNmFcdTgxYmVcdTgzMzRcdTg2ZDRcdThhYThcdThjYzRcdTUyODNcdTczNzJcdTViOTZcdTZhNmJcdTk0MDRcdTU0ZWVcdTU2ODZcdTViNWRcdTY1NDhcdTY1ODVcdTY2Yzlc'@;
put 'dTY4OWZcdTZkOGRcdTZkYzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNTJdW2ddXT02NDUxMitnLF9bNjQ1MTIrZ109eVsyNTJdW2ddKTtmb3IoeVsyNTNdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyM2JcdTgwYjRcdTkxNzVcdTlhNGRcdTRmYWZcdTUwMTlcdTUz'@;
put 'OWFcdTU0MGVcdTU0M2NcdTU1ODlcdTU1YzVcdTVlM2ZcdTVmOGNcdTY3M2RcdTcxNjZcdTczZGRcdTkwMDVcdTUyZGJcdTUyZjNcdTU4NjRcdTU4Y2VcdTcxMDRcdTcxOGZcdTcxZmJcdTg1YjBcdThhMTNcdTY2ODhcdTg1YThcdTU1YTdcdTY2ODRcdTcxNGFcdTg0MzFcdTUzNDlcdTU1OTlc'@;
put 'dTZiYzFcdTVmNTlcdTVmYmRcdTYzZWVcdTY2ODlcdTcxNDdcdThhZjFcdThmMWRcdTllYmVcdTRmMTFcdTY0M2FcdTcwY2JcdTc1NjZcdTg2NjdcdTYwNjRcdThiNGVcdTlkZjhcdTUxNDdcdTUxZjZcdTUzMDhcdTZkMzZcdTgwZjhcdTllZDFcdTY2MTVcdTZiMjNcdTcwOThcdTc1ZDVcdTU0'@;
put 'MDNcdTVjNzlcdTdkMDdcdThhMTZcdTZiMjBcdTZiM2RcdTZiNDZcdTU0MzhcdTYwNzBcdTZkM2RcdTdmZDVcdTgyMDhcdTUwZDZcdTUxZGVcdTU1OWNcdTU2NmJcdTU2Y2RcdTU5ZWNcdTViMDlcdTVlMGNcdTYxOTlcdTYxOThcdTYyMzFcdTY2NWVcdTY2ZTZcdTcxOTlcdTcxYjlcdTcxYmFc'@;
put 'dTcyYTdcdTc5YTdcdTdhMDBcdTdmYjJcdThhNzBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNTNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNTNdW2ddXT02NDc2OCtnLF9bNjQ3NjgrZ109eVsyNTNdW2ddKTtyZXR1cm57ZW5jOkksZGVj'@;
put 'Ol99fSgpLHFbOTUwXT1mdW5jdGlvbigpe3ZhciBnLF89W10sST17fSx5PVtdO2Zvcih5WzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgx'@;
put 'ZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMF1bZ11dPTArZyxfWzArZ109eVswXVtnXSk7Zm9yKHlbMTYxXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1'@;
put 'Nlx1ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1'@;
put 'ZmUzZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1'@;
put 'MjAxOVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAxZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVc'@;
put 'eGFmXHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYy'@;
put 'XHVmZTYzXHVmZTY0XHVmZTY1XHVmZTY2XHVmZjVlXHUyMjI5XHUyMjJhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUzM2QyXHUzM2QxXHUyMjJiXHUyMjJlXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUy'@;
put 'MTk5XHUyMTk4XHUyMjI1XHUyMjIzXHVmZjBmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTYxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTYxXVtnXV09NDEyMTYrZyxfWzQxMjE2K2ddPXlbMTYxXVtnXSk7Zm9yKHlbMTYyXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjNjXHUyMjE1XHVmZTY4XHVmZjA0XHVmZmU1XHUzMDEyXHVmZmUwXHVmZmUxXHVmZjA1XHVmZjIwXHUyMTAzXHUyMTA5XHVmZTY5XHVmZTZhXHVmZTZiXHUzM2Q1XHUzMzljXHUzMzlkXHUzMzllXHUz'@;
put 'M2NlXHUzM2ExXHUzMzhlXHUzMzhmXHUzM2M0XHhiMFx1NTE1OVx1NTE1Ylx1NTE1ZVx1NTE1ZFx1NTE2MVx1NTE2M1x1NTVlN1x1NzRlOVx1N2NjZVx1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1MjU4OFx1MjU4Zlx1MjU4ZVx1MjU4ZFx1MjU4Y1x1MjU4Ylx1'@;
put 'MjU4YVx1MjU4OVx1MjUzY1x1MjUzNFx1MjUyY1x1MjUyNFx1MjUxY1x1MjU5NFx1MjUwMFx1MjUwMlx1MjU5NVx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU1MFx1MjU1ZVx1'@;
put 'MjU2YVx1MjU2MVx1MjVlMlx1MjVlM1x1MjVlNVx1MjVlNFx1MjU3MVx1MjU3Mlx1MjU3M1x1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2'@;
put 'OFx1MjE2OVx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAyOFx1MzAyOVx1NTM0MVx1NTM0NFx1NTM0NVx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1'@;
put 'ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1ZmYzOVx1ZmYzYVx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1'@;
put 'MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1NFx1ZmY1NVx1ZmY1Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTYyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2Ml1bZ11dPTQxNDcyK2csX1s0MTQ3MitnXT15WzE2Ml1bZ10pO2Zvcih5WzE2'@;
put 'M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5'@;
put 'ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1'@;
put 'MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzExMFx1MzExMVx1MzExMlx1'@;
put 'MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1MDJkOVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJj'@;
put 'Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTYzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2M11bZ11dPTQxNzI4K2csX1s0MTcyOCtnXT15WzE2M11b'@;
put 'Z10pO2Zvcih5WzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMFx1NGU1OVx1NGUwMVx1NGUwM1x1NGU0M1x1NGU1ZFx1NGU4Nlx1NGU4Y1x1NGViYVx1NTEzZlx1NTE2NVx1NTE2Ylx1NTFlMFx1NTIwMFx1NTIwMVx1NTI5'@;
put 'Ylx1NTMxNVx1NTM0MVx1NTM1Y1x1NTNjOFx1NGUwOVx1NGUwYlx1NGUwOFx1NGUwYVx1NGUyYlx1NGUzOFx1NTFlMVx1NGU0NVx1NGU0OFx1NGU1Zlx1NGU1ZVx1NGU4ZVx1NGVhMVx1NTE0MFx1NTIwM1x1NTJmYVx1NTM0M1x1NTNjOVx1NTNlM1x1NTcxZlx1NThlYlx1NTkxNVx1NTkyN1x1'@;
put 'NTk3M1x1NWI1MFx1NWI1MVx1NWI1M1x1NWJmOFx1NWMwZlx1NWMyMlx1NWMzOFx1NWM3MVx1NWRkZFx1NWRlNVx1NWRmMVx1NWRmMlx1NWRmM1x1NWRmZVx1NWU3Mlx1NWVmZVx1NWYwYlx1NWYxM1x1NjI0ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxMVx1'@;
put 'NGUxMFx1NGUwZFx1NGUyZFx1NGUzMFx1NGUzOVx1NGU0Ylx1NWMzOVx1NGU4OFx1NGU5MVx1NGU5NVx1NGU5Mlx1NGU5NFx1NGVhMlx1NGVjMVx1NGVjMFx1NGVjM1x1NGVjNlx1NGVjN1x1NGVjZFx1NGVjYVx1NGVjYlx1NGVjNFx1NTE0M1x1NTE0MVx1NTE2N1x1NTE2ZFx1NTE2ZVx1NTE2'@;
put 'Y1x1NTE5N1x1NTFmNlx1NTIwNlx1NTIwN1x1NTIwOFx1NTJmYlx1NTJmZVx1NTJmZlx1NTMxNlx1NTMzOVx1NTM0OFx1NTM0N1x1NTM0NVx1NTM1ZVx1NTM4NFx1NTNjYlx1NTNjYVx1NTNjZFx1NThlY1x1NTkyOVx1NTkyYlx1NTkyYVx1NTkyZFx1NWI1NFx1NWMxMVx1NWMyNFx1NWMzYVx1'@;
put 'NWM2Zlx1NWRmNFx1NWU3Ylx1NWVmZlx1NWYxNFx1NWYxNVx1NWZjM1x1NjIwOFx1NjIzNlx1NjI0Ylx1NjI0ZVx1NjUyZlx1NjU4N1x1NjU5N1x1NjVhNFx1NjViOVx1NjVlNVx1NjZmMFx1NjcwOFx1NjcyOFx1NmIyMFx1NmI2Mlx1NmI3OVx1NmJjYlx1NmJkNFx1NmJkYlx1NmMwZlx1NmMz'@;
put 'NFx1NzA2Ylx1NzIyYVx1NzIzNlx1NzIzYlx1NzI0N1x1NzI1OVx1NzI1Ylx1NzJhY1x1NzM4Ylx1NGUxOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2NF1bZ11dPTQxOTg0K2csX1s0MTk4'@;
put 'NCtnXT15WzE2NF1bZ10pO2Zvcih5WzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUxNlx1NGUxNVx1NGUxNFx1NGUxOFx1NGUzYlx1NGU0ZFx1NGU0Zlx1NGU0ZVx1NGVlNVx1NGVkOFx1NGVkNFx1NGVkNVx1NGVkNlx1NGVk'@;
put 'N1x1NGVlM1x1NGVlNFx1NGVkOVx1NGVkZVx1NTE0NVx1NTE0NFx1NTE4OVx1NTE4YVx1NTFhY1x1NTFmOVx1NTFmYVx1NTFmOFx1NTIwYVx1NTJhMFx1NTI5Zlx1NTMwNVx1NTMwNlx1NTMxN1x1NTMxZFx1NGVkZlx1NTM0YVx1NTM0OVx1NTM2MVx1NTM2MFx1NTM2Zlx1NTM2ZVx1NTNiYlx1'@;
put 'NTNlZlx1NTNlNFx1NTNmM1x1NTNlY1x1NTNlZVx1NTNlOVx1NTNlOFx1NTNmY1x1NTNmOFx1NTNmNVx1NTNlYlx1NTNlNlx1NTNlYVx1NTNmMlx1NTNmMVx1NTNmMFx1NTNlNVx1NTNlZFx1NTNmYlx1NTZkYlx1NTZkYVx1NTkxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NTkyZVx1NTkzMVx1NTk3NFx1NTk3Nlx1NWI1NVx1NWI4M1x1NWMzY1x1NWRlOFx1NWRlN1x1NWRlNlx1NWUwMlx1NWUwM1x1NWU3M1x1NWU3Y1x1NWYwMVx1NWYxOFx1NWYxN1x1NWZjNVx1NjIwYVx1NjI1M1x1NjI1NFx1NjI1Mlx1NjI1MVx1NjVhNVx1NjVlNlx1NjcyZVx1Njcy'@;
put 'Y1x1NjcyYVx1NjcyYlx1NjcyZFx1NmI2M1x1NmJjZFx1NmMxMVx1NmMxMFx1NmMzOFx1NmM0MVx1NmM0MFx1NmMzZVx1NzJhZlx1NzM4NFx1NzM4OVx1NzRkY1x1NzRlNlx1NzUxOFx1NzUxZlx1NzUyOFx1NzUyOVx1NzUzMFx1NzUzMVx1NzUzMlx1NzUzM1x1NzU4Ylx1NzY3ZFx1NzZhZVx1'@;
put 'NzZiZlx1NzZlZVx1NzdkYlx1NzdlMlx1NzdmM1x1NzkzYVx1NzliZVx1N2E3NFx1N2FjYlx1NGUxZVx1NGUxZlx1NGU1Mlx1NGU1M1x1NGU2OVx1NGU5OVx1NGVhNFx1NGVhNlx1NGVhNVx1NGVmZlx1NGYwOVx1NGYxOVx1NGYwYVx1NGYxNVx1NGYwZFx1NGYxMFx1NGYxMVx1NGYwZlx1NGVm'@;
put 'Mlx1NGVmNlx1NGVmYlx1NGVmMFx1NGVmM1x1NGVmZFx1NGYwMVx1NGYwYlx1NTE0OVx1NTE0N1x1NTE0Nlx1NTE0OFx1NTE2OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2NV1bZ11dPTQy'@;
put 'MjQwK2csX1s0MjI0MCtnXT15WzE2NV1bZ10pO2Zvcih5WzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMy'@;
put 'MFx1NTM3MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcyOFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1'@;
put 'NTkxOVx1NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1NWU3NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2'@;
put 'NFx1NmI3Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2ZiZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1'@;
put 'ODAzM1x1ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1'@;
put 'ZVx1NGYzNFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5'@;
put 'WzE2Nl1bZ11dPTQyNDk2K2csX1s0MjQ5NitnXT15WzE2Nl1bZ10pO2Zvcih5WzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY1Y1x1NGY2MFx1NGYyZlx1NGY0ZVx1NGYzNlx1NGY1OVx1NGY1ZFx1NGY0OFx1NGY1YVx1NTE0'@;
put 'Y1x1NTE0Ylx1NTE0ZFx1NTE3NVx1NTFiNlx1NTFiN1x1NTIyNVx1NTIyNFx1NTIyOVx1NTIyYVx1NTIyOFx1NTJhYlx1NTJhOVx1NTJhYVx1NTJhY1x1NTMyM1x1NTM3M1x1NTM3NVx1NTQxZFx1NTQyZFx1NTQxZVx1NTQzZVx1NTQyNlx1NTQ0ZVx1NTQyN1x1NTQ0Nlx1NTQ0M1x1NTQzM1x1'@;
put 'NTQ0OFx1NTQ0Mlx1NTQxYlx1NTQyOVx1NTQ0YVx1NTQzOVx1NTQzYlx1NTQzOFx1NTQyZVx1NTQzNVx1NTQzNlx1NTQyMFx1NTQzY1x1NTQ0MFx1NTQzMVx1NTQyYlx1NTQxZlx1NTQyY1x1NTZlYVx1NTZmMFx1NTZlNFx1NTZlYlx1NTc0YVx1NTc1MVx1NTc0MFx1NTc0ZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc0N1x1NTc0ZVx1NTczZVx1NTc1MFx1NTc0Zlx1NTczYlx1NThlZlx1NTkzZVx1NTk5ZFx1NTk5Mlx1NTlhOFx1NTk5ZVx1NTlhM1x1NTk5OVx1NTk5Nlx1NTk4ZFx1NTlhNFx1NTk5M1x1NTk4YVx1NTlhNVx1NWI1ZFx1NWI1Y1x1NWI1'@;
put 'YVx1NWI1Ylx1NWI4Y1x1NWI4Ylx1NWI4Zlx1NWMyY1x1NWM0MFx1NWM0MVx1NWMzZlx1NWMzZVx1NWM5MFx1NWM5MVx1NWM5NFx1NWM4Y1x1NWRlYlx1NWUwY1x1NWU4Zlx1NWU4N1x1NWU4YVx1NWVmN1x1NWYwNFx1NWYxZlx1NWY2NFx1NWY2Mlx1NWY3N1x1NWY3OVx1NWZkOFx1NWZjY1x1'@;
put 'NWZkN1x1NWZjZFx1NWZmMVx1NWZlYlx1NWZmOFx1NWZlYVx1NjIxMlx1NjIxMVx1NjI4NFx1NjI5N1x1NjI5Nlx1NjI4MFx1NjI3Nlx1NjI4OVx1NjI2ZFx1NjI4YVx1NjI3Y1x1NjI3ZVx1NjI3OVx1NjI3M1x1NjI5Mlx1NjI2Zlx1NjI5OFx1NjI2ZVx1NjI5NVx1NjI5M1x1NjI5MVx1NjI4'@;
put 'Nlx1NjUzOVx1NjUzYlx1NjUzOFx1NjVmMVx1NjZmNFx1Njc1Zlx1Njc0ZVx1Njc0Zlx1Njc1MFx1Njc1MVx1Njc1Y1x1Njc1Nlx1Njc1ZVx1Njc0OVx1Njc0Nlx1Njc2MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2N10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY3XVtnXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoSVt5WzE2N11bZ11dPTQyNzUyK2csX1s0Mjc1MitnXT15WzE2N11bZ10pO2Zvcih5WzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1M1x1Njc1N1x1NmI2NVx1NmJjZlx1NmM0Mlx1NmM1ZVx1NmM5OVx1NmM4'@;
put 'MVx1NmM4OFx1NmM4OVx1NmM4NVx1NmM5Ylx1NmM2YVx1NmM3YVx1NmM5MFx1NmM3MFx1NmM4Y1x1NmM2OFx1NmM5Nlx1NmM5Mlx1NmM3ZFx1NmM4M1x1NmM3Mlx1NmM3ZVx1NmM3NFx1NmM4Nlx1NmM3Nlx1NmM4ZFx1NmM5NFx1NmM5OFx1NmM4Mlx1NzA3Nlx1NzA3Y1x1NzA3ZFx1NzA3OFx1'@;
put 'NzI2Mlx1NzI2MVx1NzI2MFx1NzJjNFx1NzJjMlx1NzM5Nlx1NzUyY1x1NzUyYlx1NzUzN1x1NzUzOFx1NzY4Mlx1NzZlZlx1NzdlM1x1NzljMVx1NzljMFx1NzliZlx1N2E3Nlx1N2NmYlx1N2Y1NVx1ODA5Nlx1ODA5M1x1ODA5ZFx1ODA5OFx1ODA5Ylx1ODA5YVx1ODBiMlx1ODI2Zlx1ODI5'@;
put 'Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4Ylx1ODI4ZFx1ODk4Ylx1ODlkMlx1OGEwMFx1OGMzN1x1OGM0Nlx1OGM1NVx1OGM5ZFx1OGQ2NFx1OGQ3MFx1OGRiM1x1OGVhYlx1OGVjYVx1OGY5Ylx1OGZiMFx1OGZjMlx1OGZjNlx1OGZjNVx1OGZjNFx1NWRl'@;
put 'MVx1OTA5MVx1OTBhMlx1OTBhYVx1OTBhNlx1OTBhM1x1OTE0OVx1OTFjNlx1OTFjY1x1OTYzMlx1OTYyZVx1OTYzMVx1OTYyYVx1OTYyY1x1NGUyNlx1NGU1Nlx1NGU3M1x1NGU4Ylx1NGU5Ylx1NGU5ZVx1NGVhYlx1NGVhY1x1NGY2Zlx1NGY5ZFx1NGY4ZFx1NGY3M1x1NGY3Zlx1NGY2Y1x1'@;
put 'NGY5Ylx1NGY4Ylx1NGY4Nlx1NGY4M1x1NGY3MFx1NGY3NVx1NGY4OFx1NGY2OVx1NGY3Ylx1NGY5Nlx1NGY3ZVx1NGY4Zlx1NGY5MVx1NGY3YVx1NTE1NFx1NTE1Mlx1NTE1NVx1NTE2OVx1NTE3N1x1NTE3Nlx1NTE3OFx1NTFiZFx1NTFmZFx1NTIzYlx1NTIzOFx1NTIzN1x1NTIzYVx1NTIz'@;
put 'MFx1NTIyZVx1NTIzNlx1NTI0MVx1NTJiZVx1NTJiYlx1NTM1Mlx1NTM1NFx1NTM1M1x1NTM1MVx1NTM2Nlx1NTM3N1x1NTM3OFx1NTM3OVx1NTNkNlx1NTNkNFx1NTNkN1x1NTQ3M1x1NTQ3NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY4'@;
put 'XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2OF1bZ11dPTQzMDA4K2csX1s0MzAwOCtnXT15WzE2OF1bZ10pO2Zvcih5WzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQ5Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3'@;
put 'N1x1NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1'@;
put 'NTk0NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMx'@;
put 'YVx1NWM0OFx1NWM0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUxMVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5'@;
put 'NVx1NWU5Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1'@;
put 'NjIxNVx1NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJkOVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJi'@;
put 'MVx1NjJkOFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2OV0ubGVuZ3RoOysrZyk2'@;
put 'NTUzMyE9PXlbMTY5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2OV1bZ11dPTQzMjY0K2csX1s0MzI2NCtnXT15WzE2OV1bZ10pO2Zvcih5WzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjYwN1x1NjcwZFx1NjcwYlx1Njc2'@;
put 'ZFx1Njc4Ylx1Njc5NVx1Njc3MVx1Njc5Y1x1Njc3M1x1Njc3N1x1Njc4N1x1Njc5ZFx1Njc5N1x1Njc2Zlx1Njc3MFx1Njc3Zlx1Njc4OVx1Njc3ZVx1Njc5MFx1Njc3NVx1Njc5YVx1Njc5M1x1Njc3Y1x1Njc2YVx1Njc3Mlx1NmIyM1x1NmI2Nlx1NmI2N1x1NmI3Zlx1NmMxM1x1NmMxYlx1'@;
put 'NmNlM1x1NmNlOFx1NmNmM1x1NmNiMVx1NmNjY1x1NmNlNVx1NmNiM1x1NmNiZFx1NmNiZVx1NmNiY1x1NmNlMlx1NmNhYlx1NmNkNVx1NmNkM1x1NmNiOFx1NmNjNFx1NmNiOVx1NmNjMVx1NmNhZVx1NmNkN1x1NmNjNVx1NmNmMVx1NmNiZlx1NmNiYlx1NmNlMVx1NmNkYlx1NmNjYVx1NmNh'@;
put 'Y1x1NmNlZlx1NmNkY1x1NmNkNlx1NmNlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzA5NVx1NzA4ZVx1NzA5Mlx1NzA4YVx1NzA5OVx1NzIyY1x1NzIyZFx1NzIzOFx1NzI0OFx1NzI2N1x1NzI2OVx1NzJjMFx1NzJjZVx1NzJkOVx1NzJkN1x1NzJkMFx1NzNh'@;
put 'OVx1NzNhOFx1NzM5Zlx1NzNhYlx1NzNhNVx1NzUzZFx1NzU5ZFx1NzU5OVx1NzU5YVx1NzY4NFx1NzZjMlx1NzZmMlx1NzZmNFx1NzdlNVx1NzdmZFx1NzkzZVx1Nzk0MFx1Nzk0MVx1NzljOVx1NzljOFx1N2E3YVx1N2E3OVx1N2FmYVx1N2NmZVx1N2Y1NFx1N2Y4Y1x1N2Y4Ylx1ODAwNVx1'@;
put 'ODBiYVx1ODBhNVx1ODBhMlx1ODBiMVx1ODBhMVx1ODBhYlx1ODBhOVx1ODBiNFx1ODBhYVx1ODBhZlx1ODFlNVx1ODFmZVx1ODIwZFx1ODJiM1x1ODI5ZFx1ODI5OVx1ODJhZFx1ODJiZFx1ODI5Zlx1ODJiOVx1ODJiMVx1ODJhY1x1ODJhNVx1ODJhZlx1ODJiOFx1ODJhM1x1ODJiMFx1ODJi'@;
put 'ZVx1ODJiN1x1ODY0ZVx1ODY3MVx1NTIxZFx1ODg2OFx1OGVjYlx1OGZjZVx1OGZkNFx1OGZkMVx1OTBiNVx1OTBiOFx1OTBiMVx1OTBiNlx1OTFjN1x1OTFkMVx1OTU3N1x1OTU4MFx1OTYxY1x1OTY0MFx1OTYzZlx1OTYzYlx1OTY0NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3MF0u'@;
put 'bGVuZ3RoOysrZyk2NTUzMyE9PXlbMTcwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3MF1bZ11dPTQzNTIwK2csX1s0MzUyMCtnXT15WzE3MF1bZ10pO2Zvcih5WzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY0Mlx1OTZi'@;
put 'OVx1OTZlOFx1OTc1Mlx1OTc1ZVx1NGU5Zlx1NGVhZFx1NGVhZVx1NGZlMVx1NGZiNVx1NGZhZlx1NGZiZlx1NGZlMFx1NGZkMVx1NGZjZlx1NGZkZFx1NGZjM1x1NGZiNlx1NGZkOFx1NGZkZlx1NGZjYVx1NGZkN1x1NGZhZVx1NGZkMFx1NGZjNFx1NGZjMlx1NGZkYVx1NGZjZVx1NGZkZVx1'@;
put 'NGZiN1x1NTE1N1x1NTE5Mlx1NTE5MVx1NTFhMFx1NTI0ZVx1NTI0M1x1NTI0YVx1NTI0ZFx1NTI0Y1x1NTI0Ylx1NTI0N1x1NTJjN1x1NTJjOVx1NTJjM1x1NTJjMVx1NTMwZFx1NTM1N1x1NTM3Ylx1NTM5YVx1NTNkYlx1NTRhY1x1NTRjMFx1NTRhOFx1NTRjZVx1NTRjOVx1NTRiOFx1NTRh'@;
put 'Nlx1NTRiM1x1NTRjN1x1NTRjMlx1NTRiZFx1NTRhYVx1NTRjMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjNFx1NTRjOFx1NTRhZlx1NTRhYlx1NTRiMVx1NTRiYlx1NTRhOVx1NTRhN1x1NTRiZlx1NTZmZlx1NTc4Mlx1NTc4Ylx1NTdhMFx1NTdhM1x1NTdh'@;
put 'Mlx1NTdjZVx1NTdhZVx1NTc5M1x1NTk1NVx1NTk1MVx1NTk0Zlx1NTk0ZVx1NTk1MFx1NTlkY1x1NTlkOFx1NTlmZlx1NTllM1x1NTllOFx1NWEwM1x1NTllNVx1NTllYVx1NTlkYVx1NTllNlx1NWEwMVx1NTlmYlx1NWI2OVx1NWJhM1x1NWJhNlx1NWJhNFx1NWJhMlx1NWJhNVx1NWMwMVx1'@;
put 'NWM0ZVx1NWM0Zlx1NWM0ZFx1NWM0Ylx1NWNkOVx1NWNkMlx1NWRmN1x1NWUxZFx1NWUyNVx1NWUxZlx1NWU3ZFx1NWVhMFx1NWVhNlx1NWVmYVx1NWYwOFx1NWYyZFx1NWY2NVx1NWY4OFx1NWY4NVx1NWY4YVx1NWY4Ylx1NWY4N1x1NWY4Y1x1NWY4OVx1NjAxMlx1NjAxZFx1NjAyMFx1NjAy'@;
put 'NVx1NjAwZVx1NjAyOFx1NjA0ZFx1NjA3MFx1NjA2OFx1NjA2Mlx1NjA0Nlx1NjA0M1x1NjA2Y1x1NjA2Ylx1NjA2YVx1NjA2NFx1NjI0MVx1NjJkY1x1NjMxNlx1NjMwOVx1NjJmY1x1NjJlZFx1NjMwMVx1NjJlZVx1NjJmZFx1NjMwN1x1NjJmMVx1NjJmN1x1ZmZmZCIuc3BsaXQoIiIpLGc9'@;
put 'MDtnIT15WzE3MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTcxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3MV1bZ11dPTQzNzc2K2csX1s0Mzc3NitnXT15WzE3MV1bZ10pO2Zvcih5WzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NjJlZlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1NjdmZlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1'@;
put 'NjdiNlx1NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQw'@;
put 'Ylx1NmQzMlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQw'@;
put 'ZVx1NmQyYlx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNjZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1'@;
put 'NzU0Y1x1NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1Nzgw'@;
put 'Y1x1NzgwZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2QwNlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLGc9MDtnIT15WzE3Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTcyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3Ml1bZ11dPTQ0MDMyK2csX1s0NDAzMitnXT15WzE3Ml1bZ10pO2Zvcih5WzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ODAxMFx1ODAwZFx1ODAxMVx1ODAzNlx1ODBkNlx1ODBlNVx1ODBkYVx1ODBjM1x1ODBjNFx1ODBjY1x1ODBlMVx1ODBkYlx1ODBjZVx1ODBkZVx1ODBlNFx1ODBkZFx1ODFmNFx1ODIyMlx1ODJlN1x1ODMwM1x1ODMwNVx1ODJlM1x1ODJkYlx1ODJlNlx1ODMwNFx1'@;
put 'ODJlNVx1ODMwMlx1ODMwOVx1ODJkMlx1ODJkN1x1ODJmMVx1ODMwMVx1ODJkY1x1ODJkNFx1ODJkMVx1ODJkZVx1ODJkM1x1ODJkZlx1ODJlZlx1ODMwNlx1ODY1MFx1ODY3OVx1ODY3Ylx1ODY3YVx1ODg0ZFx1ODg2Ylx1ODk4MVx1ODlkNFx1OGEwOFx1OGEwMlx1OGEwM1x1OGM5ZVx1OGNh'@;
put 'MFx1OGQ3NFx1OGQ3M1x1OGRiNFx1OGVjZFx1OGVjY1x1OGZmMFx1OGZlNlx1OGZlMlx1OGZlYVx1OGZlNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGZlZFx1OGZlYlx1OGZlNFx1OGZlOFx1OTBjYVx1OTBjZVx1OTBjMVx1OTBjM1x1OTE0Ylx1OTE0YVx1OTFj'@;
put 'ZFx1OTU4Mlx1OTY1MFx1OTY0Ylx1OTY0Y1x1OTY0ZFx1OTc2Mlx1OTc2OVx1OTdjYlx1OTdlZFx1OTdmM1x1OTgwMVx1OThhOFx1OThkYlx1OThkZlx1OTk5Nlx1OTk5OVx1NGU1OFx1NGViM1x1NTAwY1x1NTAwZFx1NTAyM1x1NGZlZlx1NTAyNlx1NTAyNVx1NGZmOFx1NTAyOVx1NTAxNlx1'@;
put 'NTAwNlx1NTAzY1x1NTAxZlx1NTAxYVx1NTAxMlx1NTAxMVx1NGZmYVx1NTAwMFx1NTAxNFx1NTAyOFx1NGZmMVx1NTAyMVx1NTAwYlx1NTAxOVx1NTAxOFx1NGZmM1x1NGZlZVx1NTAyZFx1NTAyYVx1NGZmZVx1NTAyYlx1NTAwOVx1NTE3Y1x1NTFhNFx1NTFhNVx1NTFhMlx1NTFjZFx1NTFj'@;
put 'Y1x1NTFjNlx1NTFjYlx1NTI1Nlx1NTI1Y1x1NTI1NFx1NTI1Ylx1NTI1ZFx1NTMyYVx1NTM3Zlx1NTM5Zlx1NTM5ZFx1NTNkZlx1NTRlOFx1NTUxMFx1NTUwMVx1NTUzN1x1NTRmY1x1NTRlNVx1NTRmMlx1NTUwNlx1NTRmYVx1NTUxNFx1NTRlOVx1NTRlZFx1NTRlMVx1NTUwOVx1NTRlZVx1'@;
put 'NTRlYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTczXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3M11bZ11dPTQ0Mjg4K2csX1s0NDI4OCtnXT15WzE3M11bZ10pO2Zvcih5WzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRlNlx1NTUyN1x1NTUwN1x1NTRmZFx1NTUwZlx1NTcwM1x1NTcwNFx1NTdjMlx1NTdkNFx1NTdjYlx1NTdjM1x1NTgwOVx1NTkwZlx1NTk1N1x1NTk1OFx1NTk1YVx1NWExMVx1NWExOFx1NWExY1x1NWExZlx1NWExYlx1NWExM1x1NTllY1x1'@;
put 'NWEyMFx1NWEyM1x1NWEyOVx1NWEyNVx1NWEwY1x1NWEwOVx1NWI2Ylx1NWM1OFx1NWJiMFx1NWJiM1x1NWJiNlx1NWJiNFx1NWJhZVx1NWJiNVx1NWJiOVx1NWJiOFx1NWMwNFx1NWM1MVx1NWM1NVx1NWM1MFx1NWNlZFx1NWNmZFx1NWNmYlx1NWNlYVx1NWNlOFx1NWNmMFx1NWNmNlx1NWQw'@;
put 'MVx1NWNmNFx1NWRlZVx1NWUyZFx1NWUyYlx1NWVhYlx1NWVhZFx1NWVhN1x1NWYzMVx1NWY5Mlx1NWY5MVx1NWY5MFx1NjA1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2M1x1NjA2NVx1NjA1MFx1NjA1NVx1NjA2ZFx1NjA2OVx1NjA2Zlx1NjA4NFx1NjA5'@;
put 'Zlx1NjA5YVx1NjA4ZFx1NjA5NFx1NjA4Y1x1NjA4NVx1NjA5Nlx1NjI0N1x1NjJmM1x1NjMwOFx1NjJmZlx1NjM0ZVx1NjMzZVx1NjMyZlx1NjM1NVx1NjM0Mlx1NjM0Nlx1NjM0Zlx1NjM0OVx1NjMzYVx1NjM1MFx1NjMzZFx1NjMyYVx1NjMyYlx1NjMyOFx1NjM0ZFx1NjM0Y1x1NjU0OFx1'@;
put 'NjU0OVx1NjU5OVx1NjVjMVx1NjVjNVx1NjY0Mlx1NjY0OVx1NjY0Zlx1NjY0M1x1NjY1Mlx1NjY0Y1x1NjY0NVx1NjY0MVx1NjZmOFx1NjcxNFx1NjcxNVx1NjcxN1x1NjgyMVx1NjgzOFx1Njg0OFx1Njg0Nlx1Njg1M1x1NjgzOVx1Njg0Mlx1Njg1NFx1NjgyOVx1NjhiM1x1NjgxN1x1Njg0'@;
put 'Y1x1Njg1MVx1NjgzZFx1NjdmNFx1Njg1MFx1Njg0MFx1NjgzY1x1Njg0M1x1NjgyYVx1Njg0NVx1NjgxM1x1NjgxOFx1Njg0MVx1NmI4YVx1NmI4OVx1NmJiN1x1NmMyM1x1NmMyN1x1NmMyOFx1NmMyNlx1NmMyNFx1NmNmMFx1NmQ2YVx1NmQ5NVx1NmQ4OFx1NmQ4N1x1NmQ2Nlx1NmQ3OFx1'@;
put 'NmQ3N1x1NmQ1OVx1NmQ5M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3NF1bZ11dPTQ0NTQ0K2csX1s0NDU0NCtnXT15WzE3NF1bZ10pO2Zvcih5WzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1'@;
put 'NzJmOVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzViZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZi'@;
put 'MFx1NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzgyNVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1'@;
put 'MFx1Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1'@;
put 'N2QxMFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBmMFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBm'@;
put 'M1x1ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1'@;
put 'ODMxN1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3NV1bZ11dPTQ0ODAwK2csX1s0NDgwMCtnXT15WzE3NV1bZ10pO2Zvcih5WzE3Nl09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY1NFx1ODY4YVx1ODZhYVx1ODY5M1x1ODZhNFx1ODZhOVx1ODY4Y1x1ODZhM1x1ODY5Y1x1ODg3MFx1ODg3N1x1ODg4MVx1ODg4Mlx1ODg3ZFx1ODg3OVx1OGExOFx1OGExMFx1OGEwZVx1OGEwY1x1'@;
put 'OGExNVx1OGEwYVx1OGExN1x1OGExM1x1OGExNlx1OGEwZlx1OGExMVx1OGM0OFx1OGM3YVx1OGM3OVx1OGNhMVx1OGNhMlx1OGQ3N1x1OGVhY1x1OGVkMlx1OGVkNFx1OGVjZlx1OGZiMVx1OTAwMVx1OTAwNlx1OGZmN1x1OTAwMFx1OGZmYVx1OGZmNFx1OTAwM1x1OGZmZFx1OTAwNVx1OGZm'@;
put 'OFx1OTA5NVx1OTBlMVx1OTBkZFx1OTBlMlx1OTE1Mlx1OTE0ZFx1OTE0Y1x1OTFkOFx1OTFkZFx1OTFkN1x1OTFkY1x1OTFkOVx1OTU4M1x1OTY2Mlx1OTY2M1x1OTY2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY1Ylx1OTY1ZFx1OTY2NFx1OTY1OFx1OTY1'@;
put 'ZVx1OTZiYlx1OThlMlx1OTlhY1x1OWFhOFx1OWFkOFx1OWIyNVx1OWIzMlx1OWIzY1x1NGU3ZVx1NTA3YVx1NTA3ZFx1NTA1Y1x1NTA0N1x1NTA0M1x1NTA0Y1x1NTA1YVx1NTA0OVx1NTA2NVx1NTA3Nlx1NTA0ZVx1NTA1NVx1NTA3NVx1NTA3NFx1NTA3N1x1NTA0Zlx1NTAwZlx1NTA2Zlx1'@;
put 'NTA2ZFx1NTE1Y1x1NTE5NVx1NTFmMFx1NTI2YVx1NTI2Zlx1NTJkMlx1NTJkOVx1NTJkOFx1NTJkNVx1NTMxMFx1NTMwZlx1NTMxOVx1NTMzZlx1NTM0MFx1NTMzZVx1NTNjM1x1NjZmY1x1NTU0Nlx1NTU2YVx1NTU2Nlx1NTU0NFx1NTU1ZVx1NTU2MVx1NTU0M1x1NTU0YVx1NTUzMVx1NTU1'@;
put 'Nlx1NTU0Zlx1NTU1NVx1NTUyZlx1NTU2NFx1NTUzOFx1NTUyZVx1NTU1Y1x1NTUyY1x1NTU2M1x1NTUzM1x1NTU0MVx1NTU1N1x1NTcwOFx1NTcwYlx1NTcwOVx1NTdkZlx1NTgwNVx1NTgwYVx1NTgwNlx1NTdlMFx1NTdlNFx1NTdmYVx1NTgwMlx1NTgzNVx1NTdmN1x1NTdmOVx1NTkyMFx1'@;
put 'NTk2Mlx1NWEzNlx1NWE0MVx1NWE0OVx1NWE2Nlx1NWE2YVx1NWE0MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3Nl1bZ11dPTQ1MDU2K2csX1s0NTA1NitnXT15WzE3Nl1bZ10pO2Zvcih5'@;
put 'WzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWEzY1x1NWE2Mlx1NWE1YVx1NWE0Nlx1NWE0YVx1NWI3MFx1NWJjN1x1NWJjNVx1NWJjNFx1NWJjMlx1NWJiZlx1NWJjNlx1NWMwOVx1NWMwOFx1NWMwN1x1NWM2MFx1NWM1Y1x1'@;
put 'NWM1ZFx1NWQwN1x1NWQwNlx1NWQwZVx1NWQxYlx1NWQxNlx1NWQyMlx1NWQxMVx1NWQyOVx1NWQxNFx1NWQxOVx1NWQyNFx1NWQyN1x1NWQxN1x1NWRlMlx1NWUzOFx1NWUzNlx1NWUzM1x1NWUzN1x1NWViN1x1NWViOFx1NWViNlx1NWViNVx1NWViZVx1NWYzNVx1NWYzN1x1NWY1N1x1NWY2'@;
put 'Y1x1NWY2OVx1NWY2Ylx1NWY5N1x1NWY5OVx1NWY5ZVx1NWY5OFx1NWZhMVx1NWZhMFx1NWY5Y1x1NjA3Zlx1NjBhM1x1NjA4OVx1NjBhMFx1NjBhOFx1NjBjYlx1NjBiNFx1NjBlNlx1NjBiZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBjNVx1NjBiYlx1NjBi'@;
put 'NVx1NjBkY1x1NjBiY1x1NjBkOFx1NjBkNVx1NjBjNlx1NjBkZlx1NjBiOFx1NjBkYVx1NjBjN1x1NjIxYVx1NjIxYlx1NjI0OFx1NjNhMFx1NjNhN1x1NjM3Mlx1NjM5Nlx1NjNhMlx1NjNhNVx1NjM3N1x1NjM2N1x1NjM5OFx1NjNhYVx1NjM3MVx1NjNhOVx1NjM4OVx1NjM4M1x1NjM5Ylx1'@;
put 'NjM2Ylx1NjNhOFx1NjM4NFx1NjM4OFx1NjM5OVx1NjNhMVx1NjNhY1x1NjM5Mlx1NjM4Zlx1NjM4MFx1NjM3Ylx1NjM2OVx1NjM2OFx1NjM3YVx1NjU1ZFx1NjU1Nlx1NjU1MVx1NjU1OVx1NjU1N1x1NTU1Zlx1NjU0Zlx1NjU1OFx1NjU1NVx1NjU1NFx1NjU5Y1x1NjU5Ylx1NjVhY1x1NjVj'@;
put 'Zlx1NjVjYlx1NjVjY1x1NjVjZVx1NjY1ZFx1NjY1YVx1NjY2NFx1NjY2OFx1NjY2Nlx1NjY1ZVx1NjZmOVx1NTJkN1x1NjcxYlx1Njg4MVx1NjhhZlx1NjhhMlx1Njg5M1x1NjhiNVx1Njg3Zlx1Njg3Nlx1NjhiMVx1NjhhN1x1Njg5N1x1NjhiMFx1Njg4M1x1NjhjNFx1NjhhZFx1Njg4Nlx1'@;
put 'Njg4NVx1Njg5NFx1Njg5ZFx1NjhhOFx1Njg5Zlx1NjhhMVx1Njg4Mlx1NmIzMlx1NmJiYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3N10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3N11bZ11dPTQ1MzEyK2csX1s0NTMxMitnXT15WzE3'@;
put 'N11bZ10pO2Zvcih5WzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRlMVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1'@;
put 'NmRjYlx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEw'@;
put 'OVx1NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRm'@;
put 'N1x1NzUxY1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1NzczOFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1'@;
put 'Nzk2ZFx1NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2Qz'@;
put 'Mlx1N2QzMVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIzNlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1'@;
put 'ODM5Nlx1ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3OF1bZ11dPTQ1NTY4K2csX1s0'@;
put 'NTU2OCtnXT15WzE3OF1bZ10pO2Zvcih5WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM4Nlx1ODNhN1x1ODY1NVx1NWY2YVx1ODZjN1x1ODZjMFx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjNlx1ODZjYlx1ODZiMVx1ODZhZlx1'@;
put 'ODZjOVx1ODg1M1x1ODg5ZVx1ODg4OFx1ODhhYlx1ODg5Mlx1ODg5Nlx1ODg4ZFx1ODg4Ylx1ODk5M1x1ODk4Zlx1OGEyYVx1OGExZFx1OGEyM1x1OGEyNVx1OGEzMVx1OGEyZFx1OGExZlx1OGExYlx1OGEyMlx1OGM0OVx1OGM1YVx1OGNhOVx1OGNhY1x1OGNhYlx1OGNhOFx1OGNhYVx1OGNh'@;
put 'N1x1OGQ2N1x1OGQ2Nlx1OGRiZVx1OGRiYVx1OGVkYlx1OGVkZlx1OTAxOVx1OTAwZFx1OTAxYVx1OTAxN1x1OTAyM1x1OTAxZlx1OTAxZFx1OTAxMFx1OTAxNVx1OTAxZVx1OTAyMFx1OTAwZlx1OTAyMlx1OTAxNlx1OTAxYlx1OTAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1OTBlOFx1OTBlZFx1OTBmZFx1OTE1N1x1OTFjZVx1OTFmNVx1OTFlNlx1OTFlM1x1OTFlN1x1OTFlZFx1OTFlOVx1OTU4OVx1OTY2YVx1OTY3NVx1OTY3M1x1OTY3OFx1OTY3MFx1OTY3NFx1OTY3Nlx1OTY3N1x1OTY2Y1x1OTZjMFx1OTZlYVx1OTZlOVx1N2FlMFx1N2FkZlx1'@;
put 'OTgwMlx1OTgwM1x1OWI1YVx1OWNlNVx1OWU3NVx1OWU3Zlx1OWVhNVx1OWViYlx1NTBhMlx1NTA4ZFx1NTA4NVx1NTA5OVx1NTA5MVx1NTA4MFx1NTA5Nlx1NTA5OFx1NTA5YVx1NjcwMFx1NTFmMVx1NTI3Mlx1NTI3NFx1NTI3NVx1NTI2OVx1NTJkZVx1NTJkZFx1NTJkYlx1NTM1YVx1NTNh'@;
put 'NVx1NTU3Ylx1NTU4MFx1NTVhN1x1NTU3Y1x1NTU4YVx1NTU5ZFx1NTU5OFx1NTU4Mlx1NTU5Y1x1NTVhYVx1NTU5NFx1NTU4N1x1NTU4Ylx1NTU4M1x1NTViM1x1NTVhZVx1NTU5Zlx1NTUzZVx1NTViMlx1NTU5YVx1NTViYlx1NTVhY1x1NTViMVx1NTU3ZVx1NTU4OVx1NTVhYlx1NTU5OVx1'@;
put 'NTcwZFx1NTgyZlx1NTgyYVx1NTgzNFx1NTgyNFx1NTgzMFx1NTgzMVx1NTgyMVx1NTgxZFx1NTgyMFx1NThmOVx1NThmYVx1NTk2MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3OV1bZ11d'@;
put 'PTQ1ODI0K2csX1s0NTgyNCtnXT15WzE3OV1bZ10pO2Zvcih5WzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWE3N1x1NWE5YVx1NWE3Zlx1NWE5Mlx1NWE5Ylx1NWFhN1x1NWI3M1x1NWI3MVx1NWJkMlx1NWJjY1x1NWJkM1x1'@;
put 'NWJkMFx1NWMwYVx1NWMwYlx1NWMzMVx1NWQ0Y1x1NWQ1MFx1NWQzNFx1NWQ0N1x1NWRmZFx1NWU0NVx1NWUzZFx1NWU0MFx1NWU0M1x1NWU3ZVx1NWVjYVx1NWVjMVx1NWVjMlx1NWVjNFx1NWYzY1x1NWY2ZFx1NWZhOVx1NWZhYVx1NWZhOFx1NjBkMVx1NjBlMVx1NjBiMlx1NjBiNlx1NjBl'@;
put 'MFx1NjExY1x1NjEyM1x1NjBmYVx1NjExNVx1NjBmMFx1NjBmYlx1NjBmNFx1NjE2OFx1NjBmMVx1NjEwZVx1NjBmNlx1NjEwOVx1NjEwMFx1NjExMlx1NjIxZlx1NjI0OVx1NjNhM1x1NjM4Y1x1NjNjZlx1NjNjMFx1NjNlOVx1NjNjOVx1NjNjNlx1NjNjZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjNkMlx1NjNlM1x1NjNkMFx1NjNlMVx1NjNkNlx1NjNlZFx1NjNlZVx1NjM3Nlx1NjNmNFx1NjNlYVx1NjNkYlx1NjQ1Mlx1NjNkYVx1NjNmOVx1NjU1ZVx1NjU2Nlx1NjU2Mlx1NjU2M1x1NjU5MVx1NjU5MFx1NjVhZlx1NjY2ZVx1NjY3MFx1NjY3NFx1'@;
put 'NjY3Nlx1NjY2Zlx1NjY5MVx1NjY3YVx1NjY3ZVx1NjY3N1x1NjZmZVx1NjZmZlx1NjcxZlx1NjcxZFx1NjhmYVx1NjhkNVx1NjhlMFx1NjhkOFx1NjhkN1x1NjkwNVx1NjhkZlx1NjhmNVx1NjhlZVx1NjhlN1x1NjhmOVx1NjhkMlx1NjhmMlx1NjhlM1x1NjhjYlx1NjhjZFx1NjkwZFx1Njkx'@;
put 'Mlx1NjkwZVx1NjhjOVx1NjhkYVx1Njk2ZVx1NjhmYlx1NmIzZVx1NmIzYVx1NmIzZFx1NmI5OFx1NmI5Nlx1NmJiY1x1NmJlZlx1NmMyZVx1NmMyZlx1NmMyY1x1NmUyZlx1NmUzOFx1NmU1NFx1NmUyMVx1NmUzMlx1NmU2N1x1NmU0YVx1NmUyMFx1NmUyNVx1NmUyM1x1NmUxYlx1NmU1Ylx1'@;
put 'NmU1OFx1NmUyNFx1NmU1Nlx1NmU2ZVx1NmUyZFx1NmUyNlx1NmU2Zlx1NmUzNFx1NmU0ZFx1NmUzYVx1NmUyY1x1NmU0M1x1NmUxZFx1NmUzZVx1NmVjYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTgwXVtnXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'SVt5WzE4MF1bZ11dPTQ2MDgwK2csX1s0NjA4MCtnXT15WzE4MF1bZ10pO2Zvcih5WzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU4OVx1NmUxOVx1NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1'@;
put 'NzExYVx1NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQzNlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUy'@;
put 'Nlx1NzU2Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1'@;
put 'N2Q3Mlx1N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNm'@;
put 'OFx1ODQwZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1'@;
put 'ODZkNFx1ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTgxXVtnXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoSVt5WzE4MV1bZ11dPTQ2MzM2K2csX1s0NjMzNitnXT15WzE4MV1bZ10pO2Zvcih5WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE1NFx1OGE1Ylx1OGE1MFx1OGE0Nlx1OGEzNFx1OGEzYVx1OGEzNlx1'@;
put 'OGE1Nlx1OGM2MVx1OGM4Mlx1OGNhZlx1OGNiY1x1OGNiM1x1OGNiZFx1OGNjMVx1OGNiYlx1OGNjMFx1OGNiNFx1OGNiN1x1OGNiNlx1OGNiZlx1OGNiOFx1OGQ4YVx1OGQ4NVx1OGQ4MVx1OGRjZVx1OGRkZFx1OGRjYlx1OGRkYVx1OGRkMVx1OGRjY1x1OGRkYlx1OGRjNlx1OGVmYlx1OGVm'@;
put 'OFx1OGVmY1x1OGY5Y1x1OTAyZVx1OTAzNVx1OTAzMVx1OTAzOFx1OTAzMlx1OTAzNlx1OTEwMlx1OTBmNVx1OTEwOVx1OTBmZVx1OTE2M1x1OTE2NVx1OTFjZlx1OTIxNFx1OTIxNVx1OTIyM1x1OTIwOVx1OTIxZVx1OTIwZFx1OTIxMFx1OTIwN1x1OTIxMVx1OTU5NFx1OTU4Zlx1OTU4Ylx1'@;
put 'OTU5MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTU5M1x1OTU5Mlx1OTU4ZVx1OTY4YVx1OTY4ZVx1OTY4Ylx1OTY3ZFx1OTY4NVx1OTY4Nlx1OTY4ZFx1OTY3Mlx1OTY4NFx1OTZjMVx1OTZjNVx1OTZjNFx1OTZjNlx1OTZjN1x1OTZlZlx1OTZmMlx1OTdjY1x1'@;
put 'OTgwNVx1OTgwNlx1OTgwOFx1OThlN1x1OThlYVx1OThlZlx1OThlOVx1OThmMlx1OThlZFx1OTlhZVx1OTlhZFx1OWVjM1x1OWVjZFx1OWVkMVx1NGU4Mlx1NTBhZFx1NTBiNVx1NTBiMlx1NTBiM1x1NTBjNVx1NTBiZVx1NTBhY1x1NTBiN1x1NTBiYlx1NTBhZlx1NTBjN1x1NTI3Zlx1NTI3'@;
put 'N1x1NTI3ZFx1NTJkZlx1NTJlNlx1NTJlNFx1NTJlMlx1NTJlM1x1NTMyZlx1NTVkZlx1NTVlOFx1NTVkM1x1NTVlNlx1NTVjZVx1NTVkY1x1NTVjN1x1NTVkMVx1NTVlM1x1NTVlNFx1NTVlZlx1NTVkYVx1NTVlMVx1NTVjNVx1NTVjNlx1NTVlNVx1NTVjOVx1NTcxMlx1NTcxM1x1NTg1ZVx1'@;
put 'NTg1MVx1NTg1OFx1NTg1N1x1NTg1YVx1NTg1NFx1NTg2Ylx1NTg0Y1x1NTg2ZFx1NTg0YVx1NTg2Mlx1NTg1Mlx1NTg0Ylx1NTk2N1x1NWFjMVx1NWFjOVx1NWFjY1x1NWFiZVx1NWFiZFx1NWFiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlb'@;
put 'MTgyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4Ml1bZ11dPTQ2NTkyK2csX1s0NjU5MitnXT15WzE4Ml1bZ10pO2Zvcih5WzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiM1x1NWFjMlx1NWFiMlx1NWQ2OVx1NWQ2Zlx1'@;
put 'NWU0Y1x1NWU3OVx1NWVjOVx1NWVjOFx1NWYxMlx1NWY1OVx1NWZhY1x1NWZhZVx1NjExYVx1NjEwZlx1NjE0OFx1NjExZlx1NjBmM1x1NjExYlx1NjBmOVx1NjEwMVx1NjEwOFx1NjE0ZVx1NjE0Y1x1NjE0NFx1NjE0ZFx1NjEzZVx1NjEzNFx1NjEyN1x1NjEwZFx1NjEwNlx1NjEzN1x1NjIy'@;
put 'MVx1NjIyMlx1NjQxM1x1NjQzZVx1NjQxZVx1NjQyYVx1NjQyZFx1NjQzZFx1NjQyY1x1NjQwZlx1NjQxY1x1NjQxNFx1NjQwZFx1NjQzNlx1NjQxNlx1NjQxN1x1NjQwNlx1NjU2Y1x1NjU5Zlx1NjViMFx1NjY5N1x1NjY4OVx1NjY4N1x1NjY4OFx1NjY5Nlx1NjY4NFx1NjY5OFx1NjY4ZFx1'@;
put 'NjcwM1x1Njk5NFx1Njk2ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk1YVx1Njk3N1x1Njk2MFx1Njk1NFx1Njk3NVx1NjkzMFx1Njk4Mlx1Njk0YVx1Njk2OFx1Njk2Ylx1Njk1ZVx1Njk1M1x1Njk3OVx1Njk4Nlx1Njk1ZFx1Njk2M1x1Njk1Ylx1NmI0N1x1'@;
put 'NmI3Mlx1NmJjMFx1NmJiZlx1NmJkM1x1NmJmZFx1NmVhMlx1NmVhZlx1NmVkM1x1NmViNlx1NmVjMlx1NmU5MFx1NmU5ZFx1NmVjN1x1NmVjNVx1NmVhNVx1NmU5OFx1NmViY1x1NmViYVx1NmVhYlx1NmVkMVx1NmU5Nlx1NmU5Y1x1NmVjNFx1NmVkNFx1NmVhYVx1NmVhN1x1NmViNFx1NzE0'@;
put 'ZVx1NzE1OVx1NzE2OVx1NzE2NFx1NzE0OVx1NzE2N1x1NzE1Y1x1NzE2Y1x1NzE2Nlx1NzE0Y1x1NzE2NVx1NzE1ZVx1NzE0Nlx1NzE2OFx1NzE1Nlx1NzIzYVx1NzI1Mlx1NzMzN1x1NzM0NVx1NzMzZlx1NzMzZVx1NzQ2Zlx1NzQ1YVx1NzQ1NVx1NzQ1Zlx1NzQ1ZVx1NzQ0MVx1NzQzZlx1'@;
put 'NzQ1OVx1NzQ1Ylx1NzQ1Y1x1NzU3Nlx1NzU3OFx1NzYwMFx1NzVmMFx1NzYwMVx1NzVmMlx1NzVmMVx1NzVmYVx1NzVmZlx1NzVmNFx1NzVmM1x1NzZkZVx1NzZkZlx1Nzc1Ylx1Nzc2Ylx1Nzc2Nlx1Nzc1ZVx1Nzc2M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4M10ubGVuZ3RoOysr'@;
put 'Zyk2NTUzMyE9PXlbMTgzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4M11bZ11dPTQ2ODQ4K2csX1s0Njg0OCtnXT15WzE4M11bZ10pO2Zvcih5WzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1'@;
put 'Nzc1Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2Fh'@;
put 'MFx1N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2ZhOFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1'@;
put 'ODE3OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQzMVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1'@;
put 'ODQzNVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhl'@;
put 'MVx1ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1'@;
put 'OGM4OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1OGYwOVx1OGVmZVx1OGYwYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4'@;
put 'NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4NF1bZ11dPTQ3MTA0K2csX1s0NzEwNCtnXT15WzE4NF1bZ10pO2Zvcih5WzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY5Zlx1'@;
put 'OGZiMlx1OTA0Ylx1OTA0YVx1OTA1M1x1OTA0Mlx1OTA1NFx1OTAzY1x1OTA1NVx1OTA1MFx1OTA0N1x1OTA0Zlx1OTA0ZVx1OTA0ZFx1OTA1MVx1OTAzZVx1OTA0MVx1OTExMlx1OTExN1x1OTE2Y1x1OTE2YVx1OTE2OVx1OTFjOVx1OTIzN1x1OTI1N1x1OTIzOFx1OTIzZFx1OTI0MFx1OTIz'@;
put 'ZVx1OTI1Ylx1OTI0Ylx1OTI2NFx1OTI1MVx1OTIzNFx1OTI0OVx1OTI0ZFx1OTI0NVx1OTIzOVx1OTIzZlx1OTI1YVx1OTU5OFx1OTY5OFx1OTY5NFx1OTY5NVx1OTZjZFx1OTZjYlx1OTZjOVx1OTZjYVx1OTZmN1x1OTZmYlx1OTZmOVx1OTZmNlx1OTc1Nlx1OTc3NFx1OTc3Nlx1OTgxMFx1'@;
put 'OTgxMVx1OTgxM1x1OTgwYVx1OTgxMlx1OTgwY1x1OThmY1x1OThmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OThmZFx1OThmZVx1OTliM1x1OTliMVx1OTliNFx1OWFlMVx1OWNlOVx1OWU4Mlx1OWYwZVx1OWYxM1x1OWYyMFx1NTBlN1x1NTBlZVx1NTBlNVx1'@;
put 'NTBkNlx1NTBlZFx1NTBkYVx1NTBkNVx1NTBjZlx1NTBkMVx1NTBmMVx1NTBjZVx1NTBlOVx1NTE2Mlx1NTFmM1x1NTI4M1x1NTI4Mlx1NTMzMVx1NTNhZFx1NTVmZVx1NTYwMFx1NTYxYlx1NTYxN1x1NTVmZFx1NTYxNFx1NTYwNlx1NTYwOVx1NTYwZFx1NTYwZVx1NTVmN1x1NTYxNlx1NTYx'@;
put 'Zlx1NTYwOFx1NTYxMFx1NTVmNlx1NTcxOFx1NTcxNlx1NTg3NVx1NTg3ZVx1NTg4M1x1NTg5M1x1NTg4YVx1NTg3OVx1NTg4NVx1NTg3ZFx1NThmZFx1NTkyNVx1NTkyMlx1NTkyNFx1NTk2YVx1NTk2OVx1NWFlMVx1NWFlNlx1NWFlOVx1NWFkN1x1NWFkNlx1NWFkOFx1NWFlM1x1NWI3NVx1'@;
put 'NWJkZVx1NWJlN1x1NWJlMVx1NWJlNVx1NWJlNlx1NWJlOFx1NWJlMlx1NWJlNFx1NWJkZlx1NWMwZFx1NWM2Mlx1NWQ4NFx1NWQ4N1x1NWU1Ylx1NWU2M1x1NWU1NVx1NWU1N1x1NWU1NFx1NWVkM1x1NWVkNlx1NWYwYVx1NWY0Nlx1NWY3MFx1NWZiOVx1NjE0N1x1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LGc9MDtnIT15WzE4NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4NV1bZ11dPTQ3MzYwK2csX1s0NzM2MCtnXT15WzE4NV1bZ10pO2Zvcih5WzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NjEzZlx1NjE0Ylx1NjE3N1x1NjE2Mlx1NjE2M1x1NjE1Zlx1NjE1YVx1NjE1OFx1NjE3NVx1NjIyYVx1NjQ4N1x1NjQ1OFx1NjQ1NFx1NjRhNFx1NjQ3OFx1NjQ1Zlx1NjQ3YVx1NjQ1MVx1NjQ2N1x1NjQzNFx1NjQ2ZFx1NjQ3Ylx1NjU3Mlx1NjVhMVx1NjVkN1x1NjVkNlx1NjZh'@;
put 'Mlx1NjZhOFx1NjY5ZFx1Njk5Y1x1NjlhOFx1Njk5NVx1NjljMVx1NjlhZVx1NjlkM1x1NjljYlx1Njk5Ylx1NjliN1x1NjliYlx1NjlhYlx1NjliNFx1NjlkMFx1NjljZFx1NjlhZFx1NjljY1x1NjlhNlx1NjljM1x1NjlhM1x1NmI0OVx1NmI0Y1x1NmMzM1x1NmYzM1x1NmYxNFx1NmVmZVx1'@;
put 'NmYxM1x1NmVmNFx1NmYyOVx1NmYzZVx1NmYyMFx1NmYyY1x1NmYwZlx1NmYwMlx1NmYyMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmVmZlx1NmVlZlx1NmYwNlx1NmYzMVx1NmYzOFx1NmYzMlx1NmYyM1x1NmYxNVx1NmYyYlx1NmYyZlx1NmY4OFx1NmYyYVx1'@;
put 'NmVlY1x1NmYwMVx1NmVmMlx1NmVjY1x1NmVmN1x1NzE5NFx1NzE5OVx1NzE3ZFx1NzE4YVx1NzE4NFx1NzE5Mlx1NzIzZVx1NzI5Mlx1NzI5Nlx1NzM0NFx1NzM1MFx1NzQ2NFx1NzQ2M1x1NzQ2YVx1NzQ3MFx1NzQ2ZFx1NzUwNFx1NzU5MVx1NzYyN1x1NzYwZFx1NzYwYlx1NzYwOVx1NzYx'@;
put 'M1x1NzZlMVx1NzZlM1x1Nzc4NFx1Nzc3ZFx1Nzc3Zlx1Nzc2MVx1NzhjMVx1Nzg5Zlx1NzhhN1x1NzhiM1x1NzhhOVx1NzhhM1x1Nzk4ZVx1Nzk4Zlx1Nzk4ZFx1N2EyZVx1N2EzMVx1N2FhYVx1N2FhOVx1N2FlZFx1N2FlZlx1N2JhMVx1N2I5NVx1N2I4Ylx1N2I3NVx1N2I5N1x1N2I5ZFx1'@;
put 'N2I5NFx1N2I4Zlx1N2JiOFx1N2I4N1x1N2I4NFx1N2NiOVx1N2NiZFx1N2NiZVx1N2RiYlx1N2RiMFx1N2Q5Y1x1N2RiZFx1N2RiZVx1N2RhMFx1N2RjYVx1N2RiNFx1N2RiMlx1N2RiMVx1N2RiYVx1N2RhMlx1N2RiZlx1N2RiNVx1N2RiOFx1N2RhZFx1N2RkMlx1N2RjN1x1N2RhY1x1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4Nl1bZ11dPTQ3NjE2K2csX1s0NzYxNitnXT15WzE4Nl1bZ10pO2Zvcih5WzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIwN1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5'@;
put 'OVx1ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1'@;
put 'ODhlOFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFhYVx1OGFhNVx1OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1'@;
put 'OGNkM1x1OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3'@;
put 'NFx1OTI3OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVhOFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1'@;
put 'OTgxOFx1OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEwNFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEw'@;
put 'NVx1NTFkY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4N10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4N11bZ11dPTQ3ODcyK2csX1s0Nzg3MitnXT15WzE4N11bZ10pO2Zvcih5WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTI4N1x1NTI4OFx1NTI4OVx1NTI4ZFx1NTI4YVx1NTJmMFx1NTNiMlx1NTYyZVx1NTYzYlx1NTYzOVx1NTYzMlx1NTYzZlx1NTYzNFx1NTYyOVx1NTY1M1x1NTY0ZVx1NTY1N1x1NTY3NFx1NTYzNlx1NTYyZlx1NTYzMFx1NTg4MFx1NTg5'@;
put 'Zlx1NTg5ZVx1NThiM1x1NTg5Y1x1NThhZVx1NThhOVx1NThhNlx1NTk2ZFx1NWIwOVx1NWFmYlx1NWIwYlx1NWFmNVx1NWIwY1x1NWIwOFx1NWJlZVx1NWJlY1x1NWJlOVx1NWJlYlx1NWM2NFx1NWM2NVx1NWQ5ZFx1NWQ5NFx1NWU2Mlx1NWU1Zlx1NWU2MVx1NWVlMlx1NWVkYVx1NWVkZlx1'@;
put 'NWVkZFx1NWVlM1x1NWVlMFx1NWY0OFx1NWY3MVx1NWZiN1x1NWZiNVx1NjE3Nlx1NjE2N1x1NjE2ZVx1NjE1ZFx1NjE1NVx1NjE4Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE3Y1x1NjE3MFx1NjE2Ylx1NjE3ZVx1NjFhN1x1NjE5MFx1NjFhYlx1NjE4ZVx1'@;
put 'NjFhY1x1NjE5YVx1NjFhNFx1NjE5NFx1NjFhZVx1NjIyZVx1NjQ2OVx1NjQ2Zlx1NjQ3OVx1NjQ5ZVx1NjRiMlx1NjQ4OFx1NjQ5MFx1NjRiMFx1NjRhNVx1NjQ5M1x1NjQ5NVx1NjRhOVx1NjQ5Mlx1NjRhZVx1NjRhZFx1NjRhYlx1NjQ5YVx1NjRhY1x1NjQ5OVx1NjRhMlx1NjRiM1x1NjU3'@;
put 'NVx1NjU3N1x1NjU3OFx1NjZhZVx1NjZhYlx1NjZiNFx1NjZiMVx1NmEyM1x1NmExZlx1NjllOFx1NmEwMVx1NmExZVx1NmExOVx1NjlmZFx1NmEyMVx1NmExM1x1NmEwYVx1NjlmM1x1NmEwMlx1NmEwNVx1NjllZFx1NmExMVx1NmI1MFx1NmI0ZVx1NmJhNFx1NmJjNVx1NmJjNlx1NmYzZlx1'@;
put 'NmY3Y1x1NmY4NFx1NmY1MVx1NmY2Nlx1NmY1NFx1NmY4Nlx1NmY2ZFx1NmY1Ylx1NmY3OFx1NmY2ZVx1NmY4ZVx1NmY3YVx1NmY3MFx1NmY2NFx1NmY5N1x1NmY1OFx1NmVkNVx1NmY2Zlx1NmY2MFx1NmY1Zlx1NzE5Zlx1NzFhY1x1NzFiMVx1NzFhOFx1NzI1Nlx1NzI5Ylx1NzM0ZVx1NzM1'@;
put 'N1x1NzQ2OVx1NzQ4Ylx1NzQ4M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4OF1bZ11dPTQ4MTI4K2csX1s0ODEyOCtnXT15WzE4OF1bZ10pO2Zvcih5WzE4OV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQ3ZVx1NzQ4MFx1NzU3Zlx1NzYyMFx1NzYyOVx1NzYxZlx1NzYyNFx1NzYyNlx1NzYyMVx1NzYyMlx1NzY5YVx1NzZiYVx1NzZlNFx1Nzc4ZVx1Nzc4N1x1Nzc4Y1x1Nzc5MVx1Nzc4Ylx1NzhjYlx1NzhjNVx1Nzhi'@;
put 'YVx1NzhjYVx1NzhiZVx1NzhkNVx1NzhiY1x1NzhkMFx1N2EzZlx1N2EzY1x1N2E0MFx1N2EzZFx1N2EzN1x1N2EzYlx1N2FhZlx1N2FhZVx1N2JhZFx1N2JiMVx1N2JjNFx1N2JiNFx1N2JjNlx1N2JjN1x1N2JjMVx1N2JhMFx1N2JjY1x1N2NjYVx1N2RlMFx1N2RmNFx1N2RlZlx1N2RmYlx1'@;
put 'N2RkOFx1N2RlY1x1N2RkZFx1N2RlOFx1N2RlM1x1N2RkYVx1N2RkZVx1N2RlOVx1N2Q5ZVx1N2RkOVx1N2RmMlx1N2RmOVx1N2Y3NVx1N2Y3N1x1N2ZhZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlOVx1ODAyNlx1ODE5Ylx1ODE5Y1x1ODE5ZFx1ODFhMFx1'@;
put 'ODE5YVx1ODE5OFx1ODUxN1x1ODUzZFx1ODUxYVx1ODRlZVx1ODUyY1x1ODUyZFx1ODUxM1x1ODUxMVx1ODUyM1x1ODUyMVx1ODUxNFx1ODRlY1x1ODUyNVx1ODRmZlx1ODUwNlx1ODc4Mlx1ODc3NFx1ODc3Nlx1ODc2MFx1ODc2Nlx1ODc3OFx1ODc2OFx1ODc1OVx1ODc1N1x1ODc0Y1x1ODc1'@;
put 'M1x1ODg1Ylx1ODg1ZFx1ODkxMFx1ODkwN1x1ODkxMlx1ODkxM1x1ODkxNVx1ODkwYVx1OGFiY1x1OGFkMlx1OGFjN1x1OGFjNFx1OGE5NVx1OGFjYlx1OGFmOFx1OGFiMlx1OGFjOVx1OGFjMlx1OGFiZlx1OGFiMFx1OGFkNlx1OGFjZFx1OGFiNlx1OGFiOVx1OGFkYlx1OGM0Y1x1OGM0ZVx1'@;
put 'OGM2Y1x1OGNlMFx1OGNkZVx1OGNlNlx1OGNlNFx1OGNlY1x1OGNlZFx1OGNlMlx1OGNlM1x1OGNkY1x1OGNlYVx1OGNlMVx1OGQ2ZFx1OGQ5Zlx1OGRhM1x1OGUyYlx1OGUxMFx1OGUxZFx1OGUyMlx1OGUwZlx1OGUyOVx1OGUxZlx1OGUyMVx1OGUxZVx1OGViYVx1OGYxZFx1OGYxYlx1OGYx'@;
put 'Zlx1OGYyOVx1OGYyNlx1OGYyYVx1OGYxY1x1OGYxZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4OV1bZ11dPTQ4Mzg0K2csX1s0ODM4NCtnXT15WzE4OV1bZ10pO2Zvcih5WzE5MF09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJh'@;
put 'Y1x1OTJlNFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgyMVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1'@;
put 'OTlkMFx1OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1'@;
put 'NThhOFx1OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThj'@;
put 'MVx1NThiZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFjOFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1'@;
put 'NjRjN1x1NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1'@;
put 'Zlx1NmE0OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZhMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTkwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5MF1bZ11dPTQ4NjQwK2csX1s0ODY0MCtnXT15WzE5MF1bZ10pO2Zv'@;
put 'cih5WzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZjM1x1NmZhNFx1NmZjMVx1NmZhN1x1NmZiM1x1NmZjMFx1NmZiOVx1NmZiNlx1NmZhNlx1NmZhMFx1NmZiNFx1NzFiZVx1NzFjOVx1NzFkMFx1NzFkMlx1NzFjOFx1NzFk'@;
put 'NVx1NzFiOVx1NzFjZVx1NzFkOVx1NzFkY1x1NzFjM1x1NzFjNFx1NzM2OFx1NzQ5Y1x1NzRhM1x1NzQ5OFx1NzQ5Zlx1NzQ5ZVx1NzRlMlx1NzUwY1x1NzUwZFx1NzYzNFx1NzYzOFx1NzYzYVx1NzZlN1x1NzZlNVx1NzdhMFx1Nzc5ZVx1Nzc5Zlx1NzdhNVx1NzhlOFx1NzhkYVx1NzhlY1x1'@;
put 'NzhlN1x1NzlhNlx1N2E0ZFx1N2E0ZVx1N2E0Nlx1N2E0Y1x1N2E0Ylx1N2FiYVx1N2JkOVx1N2MxMVx1N2JjOVx1N2JlNFx1N2JkYlx1N2JlMVx1N2JlOVx1N2JlNlx1N2NkNVx1N2NkNlx1N2UwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2UxMVx1N2UwOFx1'@;
put 'N2UxYlx1N2UyM1x1N2UxZVx1N2UxZFx1N2UwOVx1N2UxMFx1N2Y3OVx1N2ZiMlx1N2ZmMFx1N2ZmMVx1N2ZlZVx1ODAyOFx1ODFiM1x1ODFhOVx1ODFhOFx1ODFmYlx1ODIwOFx1ODI1OFx1ODI1OVx1ODU0YVx1ODU1OVx1ODU0OFx1ODU2OFx1ODU2OVx1ODU0M1x1ODU0OVx1ODU2ZFx1ODU2'@;
put 'YVx1ODU1ZVx1ODc4M1x1ODc5Zlx1ODc5ZVx1ODdhMlx1ODc4ZFx1ODg2MVx1ODkyYVx1ODkzMlx1ODkyNVx1ODkyYlx1ODkyMVx1ODlhYVx1ODlhNlx1OGFlNlx1OGFmYVx1OGFlYlx1OGFmMVx1OGIwMFx1OGFkY1x1OGFlN1x1OGFlZVx1OGFmZVx1OGIwMVx1OGIwMlx1OGFmN1x1OGFlZFx1'@;
put 'OGFmM1x1OGFmNlx1OGFmY1x1OGM2Ylx1OGM2ZFx1OGM5M1x1OGNmNFx1OGU0NFx1OGUzMVx1OGUzNFx1OGU0Mlx1OGUzOVx1OGUzNVx1OGYzYlx1OGYyZlx1OGYzOFx1OGYzM1x1OGZhOFx1OGZhNlx1OTA3NVx1OTA3NFx1OTA3OFx1OTA3Mlx1OTA3Y1x1OTA3YVx1OTEzNFx1OTE5Mlx1OTMy'@;
put 'MFx1OTMzNlx1OTJmOFx1OTMzM1x1OTMyZlx1OTMyMlx1OTJmY1x1OTMyYlx1OTMwNFx1OTMxYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTkxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5MV1bZ11dPTQ4ODk2K2csX1s0ODg5NitnXT15'@;
put 'WzE5MV1bZ10pO2Zvcih5WzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMxMFx1OTMyNlx1OTMyMVx1OTMxNVx1OTMyZVx1OTMxOVx1OTViYlx1OTZhN1x1OTZhOFx1OTZhYVx1OTZkNVx1OTcwZVx1OTcxMVx1OTcxNlx1OTcw'@;
put 'ZFx1OTcxM1x1OTcwZlx1OTc1Ylx1OTc1Y1x1OTc2Nlx1OTc5OFx1OTgzMFx1OTgzOFx1OTgzYlx1OTgzN1x1OTgyZFx1OTgzOVx1OTgyNFx1OTkxMFx1OTkyOFx1OTkxZVx1OTkxYlx1OTkyMVx1OTkxYVx1OTllZFx1OTllMlx1OTlmMVx1OWFiOFx1OWFiY1x1OWFmYlx1OWFlZFx1OWIyOFx1'@;
put 'OWI5MVx1OWQxNVx1OWQyM1x1OWQyNlx1OWQyOFx1OWQxMlx1OWQxYlx1OWVkOFx1OWVkNFx1OWY4ZFx1OWY5Y1x1NTEyYVx1NTExZlx1NTEyMVx1NTEzMlx1NTJmNVx1NTY4ZVx1NTY4MFx1NTY5MFx1NTY4NVx1NTY4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NTY4Zlx1NThkNVx1NThkM1x1NThkMVx1NThjZVx1NWIzMFx1NWIyYVx1NWIyNFx1NWI3YVx1NWMzN1x1NWM2OFx1NWRiY1x1NWRiYVx1NWRiZFx1NWRiOFx1NWU2Ylx1NWY0Y1x1NWZiZFx1NjFjOVx1NjFjMlx1NjFjN1x1NjFlNlx1NjFjYlx1NjIzMlx1NjIzNFx1NjRjZVx1NjRjYVx1NjRk'@;
put 'OFx1NjRlMFx1NjRmMFx1NjRlNlx1NjRlY1x1NjRmMVx1NjRlMlx1NjRlZFx1NjU4Mlx1NjU4M1x1NjZkOVx1NjZkNlx1NmE4MFx1NmE5NFx1NmE4NFx1NmFhMlx1NmE5Y1x1NmFkYlx1NmFhM1x1NmE3ZVx1NmE5N1x1NmE5MFx1NmFhMFx1NmI1Y1x1NmJhZVx1NmJkYVx1NmMwOFx1NmZkOFx1'@;
put 'NmZmMVx1NmZkZlx1NmZlMFx1NmZkYlx1NmZlNFx1NmZlYlx1NmZlZlx1NmY4MFx1NmZlY1x1NmZlMVx1NmZlOVx1NmZkNVx1NmZlZVx1NmZmMFx1NzFlN1x1NzFkZlx1NzFlZVx1NzFlNlx1NzFlNVx1NzFlZFx1NzFlY1x1NzFmNFx1NzFlMFx1NzIzNVx1NzI0Nlx1NzM3MFx1NzM3Mlx1NzRh'@;
put 'OVx1NzRiMFx1NzRhNlx1NzRhOFx1NzY0Nlx1NzY0Mlx1NzY0Y1x1NzZlYVx1NzdiM1x1NzdhYVx1NzdiMFx1NzdhY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTkyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5Ml1bZ11dPTQ5MTUyK2cs'@;
put 'X1s0OTE1MitnXT15WzE5Ml1bZ10pO2Zvcih5WzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdhN1x1NzdhZFx1NzdlZlx1NzhmN1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2Mw'@;
put 'N1x1N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1'@;
put 'N2UzZlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFiZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdhYlx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkz'@;
put 'ZFx1ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1'@;
put 'OGYzZlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMxOFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVj'@;
put 'Y1x1OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkzNVx1OWEwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTkzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5M11b'@;
put 'Z11dPTQ5NDA4K2csX1s0OTQwOCtnXT15WzE5M11bZ10pO2Zvcih5WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTlmZlx1OWJhZVx1OWJhYlx1OWJhYVx1OWJhZFx1OWQzYlx1OWQzZlx1OWU4Ylx1OWVjZlx1OWVkZVx1OWVk'@;
put 'Y1x1OWVkZFx1OWVkYlx1OWYzZVx1OWY0Ylx1NTNlMlx1NTY5NVx1NTZhZVx1NThkOVx1NThkOFx1NWIzOFx1NWY1ZFx1NjFlM1x1NjIzM1x1NjRmNFx1NjRmMlx1NjRmZVx1NjUwNlx1NjRmYVx1NjRmYlx1NjRmN1x1NjViN1x1NjZkY1x1NjcyNlx1NmFiM1x1NmFhY1x1NmFjM1x1NmFiYlx1'@;
put 'NmFiOFx1NmFjMlx1NmFhZVx1NmFhZlx1NmI1Zlx1NmI3OFx1NmJhZlx1NzAwOVx1NzAwYlx1NmZmZVx1NzAwNlx1NmZmYVx1NzAxMVx1NzAwZlx1NzFmYlx1NzFmY1x1NzFmZVx1NzFmOFx1NzM3N1x1NzM3NVx1NzRhN1x1NzRiZlx1NzUxNVx1NzY1Nlx1NzY1OFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY1Mlx1NzdiZFx1NzdiZlx1NzdiYlx1NzdiY1x1NzkwZVx1NzlhZVx1N2E2MVx1N2E2Mlx1N2E2MFx1N2FjNFx1N2FjNVx1N2MyYlx1N2MyN1x1N2MyYVx1N2MxZVx1N2MyM1x1N2MyMVx1N2NlN1x1N2U1NFx1N2U1NVx1N2U1ZVx1N2U1YVx1N2U2'@;
put 'MVx1N2U1Mlx1N2U1OVx1N2Y0OFx1N2ZmOVx1N2ZmYlx1ODA3N1x1ODA3Nlx1ODFjZFx1ODFjZlx1ODIwYVx1ODVjZlx1ODVhOVx1ODVjZFx1ODVkMFx1ODVjOVx1ODViMFx1ODViYVx1ODViOVx1ODVhNlx1ODdlZlx1ODdlY1x1ODdmMlx1ODdlMFx1ODk4Nlx1ODliMlx1ODlmNFx1OGIyOFx1'@;
put 'OGIzOVx1OGIyY1x1OGIyYlx1OGM1MFx1OGQwNVx1OGU1OVx1OGU2M1x1OGU2Nlx1OGU2NFx1OGU1Zlx1OGU1NVx1OGVjMFx1OGY0OVx1OGY0ZFx1OTA4N1x1OTA4M1x1OTA4OFx1OTFhYlx1OTFhY1x1OTFkMFx1OTM5NFx1OTM4YVx1OTM5Nlx1OTNhMlx1OTNiM1x1OTNhZVx1OTNhY1x1OTNi'@;
put 'MFx1OTM5OFx1OTM5YVx1OTM5N1x1OTVkNFx1OTVkNlx1OTVkMFx1OTVkNVx1OTZlMlx1OTZkY1x1OTZkOVx1OTZkYlx1OTZkZVx1OTcyNFx1OTdhM1x1OTdhNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk0XVtnXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoSVt5WzE5NF1bZ11dPTQ5NjY0K2csX1s0OTY2NCtnXT15WzE5NF1bZ10pO2Zvcih5WzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhZFx1OTdmOVx1OTg0ZFx1OTg0Zlx1OTg0Y1x1OTg0ZVx1OTg1M1x1OThiYVx1OTkz'@;
put 'ZVx1OTkzZlx1OTkzZFx1OTkyZVx1OTlhNVx1OWEwZVx1OWFjMVx1OWIwM1x1OWIwNlx1OWI0Zlx1OWI0ZVx1OWI0ZFx1OWJjYVx1OWJjOVx1OWJmZFx1OWJjOFx1OWJjMFx1OWQ1MVx1OWQ1ZFx1OWQ2MFx1OWVlMFx1OWYxNVx1OWYyY1x1NTEzM1x1NTZhNVx1NThkZVx1NThkZlx1NThlMlx1'@;
put 'NWJmNVx1OWY5MFx1NWVlY1x1NjFmMlx1NjFmN1x1NjFmNlx1NjFmNVx1NjUwMFx1NjUwZlx1NjZlMFx1NjZkZFx1NmFlNVx1NmFkZFx1NmFkYVx1NmFkM1x1NzAxYlx1NzAxZlx1NzAyOFx1NzAxYVx1NzAxZFx1NzAxNVx1NzAxOFx1NzIwNlx1NzIwZFx1NzI1OFx1NzJhMlx1NzM3OFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3YVx1NzRiZFx1NzRjYVx1NzRlM1x1NzU4N1x1NzU4Nlx1NzY1Zlx1NzY2MVx1NzdjN1x1NzkxOVx1NzliMVx1N2E2Ylx1N2E2OVx1N2MzZVx1N2MzZlx1N2MzOFx1N2MzZFx1N2MzN1x1N2M0MFx1N2U2Ylx1N2U2ZFx1N2U3'@;
put 'OVx1N2U2OVx1N2U2YVx1N2Y4NVx1N2U3M1x1N2ZiNlx1N2ZiOVx1N2ZiOFx1ODFkOFx1ODVlOVx1ODVkZFx1ODVlYVx1ODVkNVx1ODVlNFx1ODVlNVx1ODVmN1x1ODdmYlx1ODgwNVx1ODgwZFx1ODdmOVx1ODdmZVx1ODk2MFx1ODk1Zlx1ODk1Nlx1ODk1ZVx1OGI0MVx1OGI1Y1x1OGI1OFx1'@;
put 'OGI0OVx1OGI1YVx1OGI0ZVx1OGI0Zlx1OGI0Nlx1OGI1OVx1OGQwOFx1OGQwYVx1OGU3Y1x1OGU3Mlx1OGU4N1x1OGU3Nlx1OGU2Y1x1OGU3YVx1OGU3NFx1OGY1NFx1OGY0ZVx1OGZhZFx1OTA4YVx1OTA4Ylx1OTFiMVx1OTFhZVx1OTNlMVx1OTNkMVx1OTNkZlx1OTNjM1x1OTNjOFx1OTNk'@;
put 'Y1x1OTNkZFx1OTNkNlx1OTNlMlx1OTNjZFx1OTNkOFx1OTNlNFx1OTNkN1x1OTNlOFx1OTVkY1x1OTZiNFx1OTZlM1x1OTcyYVx1OTcyN1x1OTc2MVx1OTdkY1x1OTdmYlx1OTg1ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk1XVtnXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoSVt5WzE5NV1bZ11dPTQ5OTIwK2csX1s0OTkyMCtnXT15WzE5NV1bZ10pO2Zvcih5WzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWEx'@;
put 'OVx1OWIwZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZiNlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1'@;
put 'NjFmYVx1NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3'@;
put 'ZFx1N2U3Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2'@;
put 'Y1x1OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThjNFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1'@;
put 'OWU3OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZjMlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJh'@;
put 'N1x1NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODliZFx1OGI3NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5Nl0ubGVuZ3RoOysrZyk2NTUzMyE9'@;
put 'PXlbMTk2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5Nl1bZ11dPTUwMTc2K2csX1s1MDE3NitnXT15WzE5Nl1bZ10pO2Zvcih5WzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3N1x1OGI3ZFx1OGQxM1x1OGU4YVx1OGU4'@;
put 'ZFx1OGU4Ylx1OGY1Zlx1OGZhZlx1OTFiYVx1OTQyZVx1OTQzM1x1OTQzNVx1OTQzYVx1OTQzOFx1OTQzMlx1OTQyYlx1OTVlMlx1OTczOFx1OTczOVx1OTczMlx1OTdmZlx1OTg2N1x1OTg2NVx1OTk1N1x1OWE0NVx1OWE0M1x1OWE0MFx1OWEzZVx1OWFjZlx1OWI1NFx1OWI1MVx1OWMyZFx1'@;
put 'OWMyNVx1OWRhZlx1OWRiNFx1OWRjMlx1OWRiOFx1OWU5ZFx1OWVlZlx1OWYxOVx1OWY1Y1x1OWY2Nlx1OWY2N1x1NTEzY1x1NTEzYlx1NTZjOFx1NTZjYVx1NTZjOVx1NWI3Zlx1NWRkNFx1NWRkMlx1NWY0ZVx1NjFmZlx1NjUyNFx1NmIwYVx1NmI2MVx1NzA1MVx1NzA1OFx1NzM4MFx1NzRl'@;
put 'NFx1NzU4YVx1NzY2ZVx1NzY2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliM1x1N2M2MFx1N2M1Zlx1ODA3ZVx1ODA3ZFx1ODFkZlx1ODk3Mlx1ODk2Zlx1ODlmY1x1OGI4MFx1OGQxNlx1OGQxN1x1OGU5MVx1OGU5M1x1OGY2MVx1OTE0OFx1OTQ0NFx1OTQ1'@;
put 'MVx1OTQ1Mlx1OTczZFx1OTczZVx1OTdjM1x1OTdjMVx1OTg2Ylx1OTk1NVx1OWE1NVx1OWE0ZFx1OWFkMlx1OWIxYVx1OWM0OVx1OWMzMVx1OWMzZVx1OWMzYlx1OWRkM1x1OWRkN1x1OWYzNFx1OWY2Y1x1OWY2YVx1OWY5NFx1NTZjY1x1NWRkNlx1NjIwMFx1NjUyM1x1NjUyYlx1NjUyYVx1'@;
put 'NjZlY1x1NmIxMFx1NzRkYVx1N2FjYVx1N2M2NFx1N2M2M1x1N2M2NVx1N2U5M1x1N2U5Nlx1N2U5NFx1ODFlMlx1ODYzOFx1ODYzZlx1ODgzMVx1OGI4YVx1OTA5MFx1OTA4Zlx1OTQ2M1x1OTQ2MFx1OTQ2NFx1OTc2OFx1OTg2Zlx1OTk1Y1x1OWE1YVx1OWE1Ylx1OWE1N1x1OWFkM1x1OWFk'@;
put 'NFx1OWFkMVx1OWM1NFx1OWM1N1x1OWM1Nlx1OWRlNVx1OWU5Zlx1OWVmNFx1NTZkMVx1NThlOVx1NjUyY1x1NzA1ZVx1NzY3MVx1NzY3Mlx1NzdkN1x1N2Y1MFx1N2Y4OFx1ODgzNlx1ODgzOVx1ODg2Mlx1OGI5M1x1OGI5Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5N10ubGVuZ3Ro'@;
put 'OysrZyk2NTUzMyE9PXlbMTk3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5N11bZ11dPTUwNDMyK2csX1s1MDQzMitnXT15WzE5N11bZ10pO2Zvcih5WzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI5Nlx1ODI3N1x1OGQx'@;
put 'Ylx1OTFjMFx1OTQ2YVx1OTc0Mlx1OTc0OFx1OTc0NFx1OTdjNlx1OTg3MFx1OWE1Zlx1OWIyMlx1OWI1OFx1OWM1Zlx1OWRmOVx1OWRmYVx1OWU3Y1x1OWU3ZFx1OWYwN1x1OWY3N1x1OWY3Mlx1NWVmM1x1NmIxNlx1NzA2M1x1N2M2Y1x1N2M2ZVx1ODgzYlx1ODljMFx1OGVhMVx1OTFjMVx1'@;
put 'OTQ3Mlx1OTQ3MFx1OTg3MVx1OTk1ZVx1OWFkNlx1OWIyM1x1OWVjY1x1NzA2NFx1NzdkYVx1OGI5YVx1OTQ3N1x1OTdjOVx1OWE2Mlx1OWE2NVx1N2U5Y1x1OGI5Y1x1OGVhYVx1OTFjNVx1OTQ3ZFx1OTQ3ZVx1OTQ3Y1x1OWM3N1x1OWM3OFx1OWVmN1x1OGM1NFx1OTQ3Zlx1OWUxYVx1NzIy'@;
put 'OFx1OWE2YVx1OWIzMVx1OWUxYlx1OWUxZVx1N2M3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15'@;
put 'WzE5OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5OF1bZ11dPTUwNjg4K2csX1s1MDY4OCtnXT15WzE5OF1bZ10pO2Zvcih5WzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU0'@;
put 'Mlx1NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1'@;
put 'NWMxMFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVlOVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3'@;
put 'M1x1NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmMzNlx1NmM0M1x1NmMzZlx1NmMzYlx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVm'@;
put 'NVx1NGYxNFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1'@;
put 'NTczNFx1NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2'@;
put 'NFx1NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0Ylx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLGc9MDtnIT15WzIwMV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjAxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwMV1bZ11dPTUxNDU2K2csX1s1MTQ1NitnXT15WzIwMV1bZ10pO2Zvcih5WzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NmM0Y1x1NzA3MVx1NzI1ZVx1NzJiNFx1NzJiNVx1NzM4ZVx1NzUyYVx1NzY3Zlx1N2E3NVx1N2Y1MVx1ODI3OFx1ODI3Y1x1ODI4MFx1ODI3ZFx1ODI3Zlx1ODY0ZFx1ODk3ZVx1OTA5OVx1OTA5N1x1OTA5OFx1OTA5Ylx1OTA5NFx1OTYyMlx1OTYyNFx1OTYyMFx1OTYyM1x1'@;
put 'NGY1Nlx1NGYzYlx1NGY2Mlx1NGY0OVx1NGY1M1x1NGY2NFx1NGYzZVx1NGY2N1x1NGY1Mlx1NGY1Zlx1NGY0MVx1NGY1OFx1NGYyZFx1NGYzM1x1NGYzZlx1NGY2MVx1NTE4Zlx1NTFiOVx1NTIxY1x1NTIxZVx1NTIyMVx1NTJhZFx1NTJhZVx1NTMwOVx1NTM2M1x1NTM3Mlx1NTM4ZVx1NTM4'@;
put 'Zlx1NTQzMFx1NTQzN1x1NTQyYVx1NTQ1NFx1NTQ0NVx1NTQxOVx1NTQxY1x1NTQyNVx1NTQxOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQzZFx1NTQ0Zlx1NTQ0MVx1NTQyOFx1NTQyNFx1NTQ0N1x1NTZlZVx1NTZlN1x1NTZlNVx1NTc0MVx1NTc0NVx1NTc0'@;
put 'Y1x1NTc0OVx1NTc0Ylx1NTc1Mlx1NTkwNlx1NTk0MFx1NTlhNlx1NTk5OFx1NTlhMFx1NTk5N1x1NTk4ZVx1NTlhMlx1NTk5MFx1NTk4Zlx1NTlhN1x1NTlhMVx1NWI4ZVx1NWI5Mlx1NWMyOFx1NWMyYVx1NWM4ZFx1NWM4Zlx1NWM4OFx1NWM4Ylx1NWM4OVx1NWM5Mlx1NWM4YVx1NWM4Nlx1'@;
put 'NWM5M1x1NWM5NVx1NWRlMFx1NWUwYVx1NWUwZVx1NWU4Ylx1NWU4OVx1NWU4Y1x1NWU4OFx1NWU4ZFx1NWYwNVx1NWYxZFx1NWY3OFx1NWY3Nlx1NWZkMlx1NWZkMVx1NWZkMFx1NWZlZFx1NWZlOFx1NWZlZVx1NWZmM1x1NWZlMVx1NWZlNFx1NWZlM1x1NWZmYVx1NWZlZlx1NWZmN1x1NWZm'@;
put 'Ylx1NjAwMFx1NWZmNFx1NjIzYVx1NjI4M1x1NjI4Y1x1NjI4ZVx1NjI4Zlx1NjI5NFx1NjI4N1x1NjI3MVx1NjI3Ylx1NjI3YVx1NjI3MFx1NjI4MVx1NjI4OFx1NjI3N1x1NjI3ZFx1NjI3Mlx1NjI3NFx1NjUzN1x1NjVmMFx1NjVmNFx1NjVmM1x1NjVmMlx1NjVmNVx1Njc0NVx1Njc0N1x1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwMl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjAyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwMl1bZ11dPTUxNzEyK2csX1s1MTcxMitnXT15WzIwMl1bZ10pO2Zvcih5WzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njc1OVx1Njc1NVx1Njc0Y1x1Njc0OFx1Njc1ZFx1Njc0ZFx1Njc1YVx1Njc0Ylx1NmJkMFx1NmMxOVx1NmMxYVx1NmM3OFx1NmM2N1x1NmM2Ylx1NmM4NFx1NmM4Ylx1NmM4Zlx1NmM3MVx1NmM2Zlx1NmM2OVx1NmM5YVx1NmM2ZFx1NmM4N1x1NmM5NVx1'@;
put 'NmM5Y1x1NmM2Nlx1NmM3M1x1NmM2NVx1NmM3Ylx1NmM4ZVx1NzA3NFx1NzA3YVx1NzI2M1x1NzJiZlx1NzJiZFx1NzJjM1x1NzJjNlx1NzJjMVx1NzJiYVx1NzJjNVx1NzM5NVx1NzM5N1x1NzM5M1x1NzM5NFx1NzM5Mlx1NzUzYVx1NzUzOVx1NzU5NFx1NzU5NVx1NzY4MVx1NzkzZFx1ODAz'@;
put 'NFx1ODA5NVx1ODA5OVx1ODA5MFx1ODA5Mlx1ODA5Y1x1ODI5MFx1ODI4Zlx1ODI4NVx1ODI4ZVx1ODI5MVx1ODI5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI4YVx1ODI4M1x1ODI4NFx1OGM3OFx1OGZjOVx1OGZiZlx1OTA5Zlx1OTBhMVx1OTBhNVx1OTA5'@;
put 'ZVx1OTBhN1x1OTBhMFx1OTYzMFx1OTYyOFx1OTYyZlx1OTYyZFx1NGUzM1x1NGY5OFx1NGY3Y1x1NGY4NVx1NGY3ZFx1NGY4MFx1NGY4N1x1NGY3Nlx1NGY3NFx1NGY4OVx1NGY4NFx1NGY3N1x1NGY0Y1x1NGY5N1x1NGY2YVx1NGY5YVx1NGY3OVx1NGY4MVx1NGY3OFx1NGY5MFx1NGY5Y1x1'@;
put 'NGY5NFx1NGY5ZVx1NGY5Mlx1NGY4Mlx1NGY5NVx1NGY2Ylx1NGY2ZVx1NTE5ZVx1NTFiY1x1NTFiZVx1NTIzNVx1NTIzMlx1NTIzM1x1NTI0Nlx1NTIzMVx1NTJiY1x1NTMwYVx1NTMwYlx1NTMzY1x1NTM5Mlx1NTM5NFx1NTQ4N1x1NTQ3Zlx1NTQ4MVx1NTQ5MVx1NTQ4Mlx1NTQ4OFx1NTQ2'@;
put 'Ylx1NTQ3YVx1NTQ3ZVx1NTQ2NVx1NTQ2Y1x1NTQ3NFx1NTQ2Nlx1NTQ4ZFx1NTQ2Zlx1NTQ2MVx1NTQ2MFx1NTQ5OFx1NTQ2M1x1NTQ2N1x1NTQ2NFx1NTZmN1x1NTZmOVx1NTc2Zlx1NTc3Mlx1NTc2ZFx1NTc2Ylx1NTc3MVx1NTc3MFx1NTc3Nlx1NTc4MFx1NTc3NVx1NTc3Ylx1NTc3M1x1'@;
put 'NTc3NFx1NTc2Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwM10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjAzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwM11bZ11dPTUxOTY4K2csX1s1MTk2OCtnXT15WzIwM11bZ10pO2Zvcih5WzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTliNlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1'@;
put 'NWI2NVx1NWI5M1x1NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYy'@;
put 'Mlx1NWYyM1x1NWYyNFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAy'@;
put 'Mlx1NjAwZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJjYVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1'@;
put 'NjYwOVx1NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3'@;
put 'YVx1Njc5Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNlYlx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1'@;
put 'NmNjM1x1NmNjNlx1NmNlZFx1NmNmMlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwNF1bZ11dPTUyMjI0K2csX1s1MjIyNCtnXT15WzIwNF1bZ10pO2Zvcih5WzIwNV09Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmNkMlx1NmNkZFx1NmNiNFx1NmM4YVx1NmM5ZFx1NmM4MFx1NmNkZVx1NmNjMFx1NmQzMFx1NmNjZFx1NmNjN1x1NmNiMFx1NmNmOVx1NmNjZlx1NmNlOVx1NmNkMVx1NzA5NFx1NzA5OFx1NzA4NVx1NzA5M1x1'@;
put 'NzA4Nlx1NzA4NFx1NzA5MVx1NzA5Nlx1NzA4Mlx1NzA5YVx1NzA4M1x1NzI2YVx1NzJkNlx1NzJjYlx1NzJkOFx1NzJjOVx1NzJkY1x1NzJkMlx1NzJkNFx1NzJkYVx1NzJjY1x1NzJkMVx1NzNhNFx1NzNhMVx1NzNhZFx1NzNhNlx1NzNhMlx1NzNhMFx1NzNhY1x1NzM5ZFx1NzRkZFx1NzRl'@;
put 'OFx1NzUzZlx1NzU0MFx1NzUzZVx1NzU4Y1x1NzU5OFx1NzZhZlx1NzZmM1x1NzZmMVx1NzZmMFx1NzZmNVx1NzdmOFx1NzdmY1x1NzdmOVx1NzdmYlx1NzdmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdmN1x1Nzk0Mlx1NzkzZlx1NzljNVx1N2E3OFx1N2E3'@;
put 'Ylx1N2FmYlx1N2M3NVx1N2NmZFx1ODAzNVx1ODA4Zlx1ODBhZVx1ODBhM1x1ODBiOFx1ODBiNVx1ODBhZFx1ODIyMFx1ODJhMFx1ODJjMFx1ODJhYlx1ODI5YVx1ODI5OFx1ODI5Ylx1ODJiNVx1ODJhN1x1ODJhZVx1ODJiY1x1ODI5ZVx1ODJiYVx1ODJiNFx1ODJhOFx1ODJhMVx1ODJhOVx1'@;
put 'ODJjMlx1ODJhNFx1ODJjM1x1ODJiNlx1ODJhMlx1ODY3MFx1ODY2Zlx1ODY2ZFx1ODY2ZVx1OGM1Nlx1OGZkMlx1OGZjYlx1OGZkM1x1OGZjZFx1OGZkNlx1OGZkNVx1OGZkN1x1OTBiMlx1OTBiNFx1OTBhZlx1OTBiM1x1OTBiMFx1OTYzOVx1OTYzZFx1OTYzY1x1OTYzYVx1OTY0M1x1NGZj'@;
put 'ZFx1NGZjNVx1NGZkM1x1NGZiMlx1NGZjOVx1NGZjYlx1NGZjMVx1NGZkNFx1NGZkY1x1NGZkOVx1NGZiYlx1NGZiM1x1NGZkYlx1NGZjN1x1NGZkNlx1NGZiYVx1NGZjMFx1NGZiOVx1NGZlY1x1NTI0NFx1NTI0OVx1NTJjMFx1NTJjMlx1NTMzZFx1NTM3Y1x1NTM5N1x1NTM5Nlx1NTM5OVx1'@;
put 'NTM5OFx1NTRiYVx1NTRhMVx1NTRhZFx1NTRhNVx1NTRjZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwNV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwNV1bZ11dPTUyNDgwK2csX1s1MjQ4MCtnXT15WzIwNV1bZ10pO2Zvcih5WzIwNl09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRjM1x1ODMwZFx1NTRiN1x1NTRhZVx1NTRkNlx1NTRiNlx1NTRjNVx1NTRjNlx1NTRhMFx1NTQ3MFx1NTRiY1x1NTRhMlx1NTRiZVx1NTQ3Mlx1NTRkZVx1NTRiMFx1NTdiNVx1NTc5ZVx1'@;
put 'NTc5Zlx1NTdhNFx1NTc4Y1x1NTc5N1x1NTc5ZFx1NTc5Ylx1NTc5NFx1NTc5OFx1NTc4Zlx1NTc5OVx1NTdhNVx1NTc5YVx1NTc5NVx1NThmNFx1NTkwZFx1NTk1M1x1NTllMVx1NTlkZVx1NTllZVx1NWEwMFx1NTlmMVx1NTlkZFx1NTlmYVx1NTlmZFx1NTlmY1x1NTlmNlx1NTllNFx1NTlm'@;
put 'Mlx1NTlmN1x1NTlkYlx1NTllOVx1NTlmM1x1NTlmNVx1NTllMFx1NTlmZVx1NTlmNFx1NTllZFx1NWJhOFx1NWM0Y1x1NWNkMFx1NWNkOFx1NWNjY1x1NWNkN1x1NWNjYlx1NWNkYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWNkZVx1NWNkYVx1NWNjOVx1NWNj'@;
put 'N1x1NWNjYVx1NWNkNlx1NWNkM1x1NWNkNFx1NWNjZlx1NWNjOFx1NWNjNlx1NWNjZVx1NWNkZlx1NWNmOFx1NWRmOVx1NWUyMVx1NWUyMlx1NWUyM1x1NWUyMFx1NWUyNFx1NWViMFx1NWVhNFx1NWVhMlx1NWU5Ylx1NWVhM1x1NWVhNVx1NWYwN1x1NWYyZVx1NWY1Nlx1NWY4Nlx1NjAzN1x1'@;
put 'NjAzOVx1NjA1NFx1NjA3Mlx1NjA1ZVx1NjA0NVx1NjA1M1x1NjA0N1x1NjA0OVx1NjA1Ylx1NjA0Y1x1NjA0MFx1NjA0Mlx1NjA1Zlx1NjAyNFx1NjA0NFx1NjA1OFx1NjA2Nlx1NjA2ZVx1NjI0Mlx1NjI0M1x1NjJjZlx1NjMwZFx1NjMwYlx1NjJmNVx1NjMwZVx1NjMwM1x1NjJlYlx1NjJm'@;
put 'OVx1NjMwZlx1NjMwY1x1NjJmOFx1NjJmNlx1NjMwMFx1NjMxM1x1NjMxNFx1NjJmYVx1NjMxNVx1NjJmYlx1NjJmMFx1NjU0MVx1NjU0M1x1NjVhYVx1NjViZlx1NjYzNlx1NjYyMVx1NjYzMlx1NjYzNVx1NjYxY1x1NjYyNlx1NjYyMlx1NjYzM1x1NjYyYlx1NjYzYVx1NjYxZFx1NjYzNFx1'@;
put 'NjYzOVx1NjYyZVx1NjcwZlx1NjcxMFx1NjdjMVx1NjdmMlx1NjdjOFx1NjdiYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwNl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwNl1bZ11dPTUyNzM2K2csX1s1MjczNitnXT15WzIwNl1bZ10p'@;
put 'O2Zvcih5WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1'@;
put 'NjdlM1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1NjdjYVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMy'@;
put 'MFx1NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1NmQwMFx1NmQxZFx1NmQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQwMVx1NmQx'@;
put 'OFx1NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1'@;
put 'NzJjYVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNiNFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUy'@;
put 'ZVx1NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1'@;
put 'Nzk0Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwN11bZ11dPTUyOTkyK2csX1s1Mjk5Mitn'@;
put 'XT15WzIwN11bZ10pO2Zvcih5WzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E3ZVx1N2FkMVx1N2IwMFx1N2IwMVx1N2M3YVx1N2M3OFx1N2M3OVx1N2M3Zlx1N2M4MFx1N2M4MVx1N2QwM1x1N2QwOFx1N2QwMVx1N2Y1OFx1'@;
put 'N2Y5MVx1N2Y4ZFx1N2ZiZVx1ODAwN1x1ODAwZVx1ODAwZlx1ODAxNFx1ODAzN1x1ODBkOFx1ODBjN1x1ODBlMFx1ODBkMVx1ODBjOFx1ODBjMlx1ODBkMFx1ODBjNVx1ODBlM1x1ODBkOVx1ODBkY1x1ODBjYVx1ODBkNVx1ODBjOVx1ODBjZlx1ODBkN1x1ODBlNlx1ODBjZFx1ODFmZlx1ODIy'@;
put 'MVx1ODI5NFx1ODJkOVx1ODJmZVx1ODJmOVx1ODMwN1x1ODJlOFx1ODMwMFx1ODJkNVx1ODMzYVx1ODJlYlx1ODJkNlx1ODJmNFx1ODJlY1x1ODJlMVx1ODJmMlx1ODJmNVx1ODMwY1x1ODJmYlx1ODJmNlx1ODJmMFx1ODJlYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ODJlNFx1ODJlMFx1ODJmYVx1ODJmM1x1ODJlZFx1ODY3N1x1ODY3NFx1ODY3Y1x1ODY3M1x1ODg0MVx1ODg0ZVx1ODg2N1x1ODg2YVx1ODg2OVx1ODlkM1x1OGEwNFx1OGEwN1x1OGQ3Mlx1OGZlM1x1OGZlMVx1OGZlZVx1OGZlMFx1OTBmMVx1OTBiZFx1OTBiZlx1OTBkNVx1OTBjNVx1'@;
put 'OTBiZVx1OTBjN1x1OTBjYlx1OTBjOFx1OTFkNFx1OTFkM1x1OTY1NFx1OTY0Zlx1OTY1MVx1OTY1M1x1OTY0YVx1OTY0ZVx1NTAxZVx1NTAwNVx1NTAwN1x1NTAxM1x1NTAyMlx1NTAzMFx1NTAxYlx1NGZmNVx1NGZmNFx1NTAzM1x1NTAzN1x1NTAyY1x1NGZmNlx1NGZmN1x1NTAxN1x1NTAx'@;
put 'Y1x1NTAyMFx1NTAyN1x1NTAzNVx1NTAyZlx1NTAzMVx1NTAwZVx1NTE1YVx1NTE5NFx1NTE5M1x1NTFjYVx1NTFjNFx1NTFjNVx1NTFjOFx1NTFjZVx1NTI2MVx1NTI1YVx1NTI1Mlx1NTI1ZVx1NTI1Zlx1NTI1NVx1NTI2Mlx1NTJjZFx1NTMwZVx1NTM5ZVx1NTUyNlx1NTRlMlx1NTUxN1x1'@;
put 'NTUxMlx1NTRlN1x1NTRmM1x1NTRlNFx1NTUxYVx1NTRmZlx1NTUwNFx1NTUwOFx1NTRlYlx1NTUxMVx1NTUwNVx1NTRmMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwOF1bZ11dPTUzMjQ4'@;
put 'K2csX1s1MzI0OCtnXT15WzIwOF1bZ10pO2Zvcih5WzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwYVx1NTRmYlx1NTRmN1x1NTRmOFx1NTRlMFx1NTUwZVx1NTUwM1x1NTUwYlx1NTcwMVx1NTcwMlx1NTdjY1x1NTgzMlx1'@;
put 'NTdkNVx1NTdkMlx1NTdiYVx1NTdjNlx1NTdiZFx1NTdiY1x1NTdiOFx1NTdiNlx1NTdiZlx1NTdjN1x1NTdkMFx1NTdiOVx1NTdjMVx1NTkwZVx1NTk0YVx1NWExOVx1NWExNlx1NWEyZFx1NWEyZVx1NWExNVx1NWEwZlx1NWExN1x1NWEwYVx1NWExZVx1NWEzM1x1NWI2Y1x1NWJhN1x1NWJh'@;
put 'ZFx1NWJhY1x1NWMwM1x1NWM1Nlx1NWM1NFx1NWNlY1x1NWNmZlx1NWNlZVx1NWNmMVx1NWNmN1x1NWQwMFx1NWNmOVx1NWUyOVx1NWUyOFx1NWVhOFx1NWVhZVx1NWVhYVx1NWVhY1x1NWYzM1x1NWYzMFx1NWY2N1x1NjA1ZFx1NjA1YVx1NjA2N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NjA0MVx1NjBhMlx1NjA4OFx1NjA4MFx1NjA5Mlx1NjA4MVx1NjA5ZFx1NjA4M1x1NjA5NVx1NjA5Ylx1NjA5N1x1NjA4N1x1NjA5Y1x1NjA4ZVx1NjIxOVx1NjI0Nlx1NjJmMlx1NjMxMFx1NjM1Nlx1NjMyY1x1NjM0NFx1NjM0NVx1NjMzNlx1NjM0M1x1NjNlNFx1'@;
put 'NjMzOVx1NjM0Ylx1NjM0YVx1NjMzY1x1NjMyOVx1NjM0MVx1NjMzNFx1NjM1OFx1NjM1NFx1NjM1OVx1NjMyZFx1NjM0N1x1NjMzM1x1NjM1YVx1NjM1MVx1NjMzOFx1NjM1N1x1NjM0MFx1NjM0OFx1NjU0YVx1NjU0Nlx1NjVjNlx1NjVjM1x1NjVjNFx1NjVjMlx1NjY0YVx1NjY1Zlx1NjY0'@;
put 'N1x1NjY1MVx1NjcxMlx1NjcxM1x1NjgxZlx1NjgxYVx1Njg0OVx1NjgzMlx1NjgzM1x1NjgzYlx1Njg0Ylx1Njg0Zlx1NjgxNlx1NjgzMVx1NjgxY1x1NjgzNVx1NjgyYlx1NjgyZFx1NjgyZlx1Njg0ZVx1Njg0NFx1NjgzNFx1NjgxZFx1NjgxMlx1NjgxNFx1NjgyNlx1NjgyOFx1NjgyZVx1'@;
put 'Njg0ZFx1NjgzYVx1NjgyNVx1NjgyMFx1NmIyY1x1NmIyZlx1NmIyZFx1NmIzMVx1NmIzNFx1NmI2ZFx1ODA4Mlx1NmI4OFx1NmJlNlx1NmJlNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwOV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIw'@;
put 'OV1bZ11dPTUzNTA0K2csX1s1MzUwNCtnXT15WzIwOV1bZ10pO2Zvcih5WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1'@;
put 'NmQ2MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4'@;
put 'M1x1NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBkNFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNkOVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1'@;
put 'NzNkYVx1NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1Nzcx'@;
put 'MVx1NzcxNVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1NzgzM1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1'@;
put 'NzllMFx1NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjEwXVtnXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoSVt5WzIxMF1bZ11dPTUzNzYwK2csX1s1Mzc2MCtnXT15WzIxMF1bZ10pO2Zvcih5WzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IwNFx1N2IxM1x1N2IwNVx1N2IwZlx1N2IwOFx1N2IwYVx1N2IwZVx1N2IwOVx1'@;
put 'N2IxMlx1N2M4NFx1N2M5MVx1N2M4YVx1N2M4Y1x1N2M4OFx1N2M4ZFx1N2M4NVx1N2QxZVx1N2QxZFx1N2QxMVx1N2QwZVx1N2QxOFx1N2QxNlx1N2QxM1x1N2QxZlx1N2QxMlx1N2QwZlx1N2QwY1x1N2Y1Y1x1N2Y2MVx1N2Y1ZVx1N2Y2MFx1N2Y1ZFx1N2Y1Ylx1N2Y5Nlx1N2Y5Mlx1N2Zj'@;
put 'M1x1N2ZjMlx1N2ZjMFx1ODAxNlx1ODAzZVx1ODAzOVx1ODBmYVx1ODBmMlx1ODBmOVx1ODBmNVx1ODEwMVx1ODBmYlx1ODEwMFx1ODIwMVx1ODIyZlx1ODIyNVx1ODMzM1x1ODMyZFx1ODM0NFx1ODMxOVx1ODM1MVx1ODMyNVx1ODM1Nlx1ODMzZlx1ODM0MVx1ODMyNlx1ODMxY1x1ODMyMlx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM0Mlx1ODM0ZVx1ODMxYlx1ODMyYVx1ODMwOFx1ODMzY1x1ODM0ZFx1ODMxNlx1ODMyNFx1ODMyMFx1ODMzN1x1ODMyZlx1ODMyOVx1ODM0N1x1ODM0NVx1ODM0Y1x1ODM1M1x1ODMxZVx1ODMyY1x1ODM0Ylx1ODMyN1x1'@;
put 'ODM0OFx1ODY1M1x1ODY1Mlx1ODZhMlx1ODZhOFx1ODY5Nlx1ODY4ZFx1ODY5MVx1ODY5ZVx1ODY4N1x1ODY5N1x1ODY4Nlx1ODY4Ylx1ODY5YVx1ODY4NVx1ODZhNVx1ODY5OVx1ODZhMVx1ODZhN1x1ODY5NVx1ODY5OFx1ODY4ZVx1ODY5ZFx1ODY5MFx1ODY5NFx1ODg0M1x1ODg0NFx1ODg2'@;
put 'ZFx1ODg3NVx1ODg3Nlx1ODg3Mlx1ODg4MFx1ODg3MVx1ODg3Zlx1ODg2Zlx1ODg4M1x1ODg3ZVx1ODg3NFx1ODg3Y1x1OGExMlx1OGM0N1x1OGM1N1x1OGM3Ylx1OGNhNFx1OGNhM1x1OGQ3Nlx1OGQ3OFx1OGRiNVx1OGRiN1x1OGRiNlx1OGVkMVx1OGVkM1x1OGZmZVx1OGZmNVx1OTAwMlx1'@;
put 'OGZmZlx1OGZmYlx1OTAwNFx1OGZmY1x1OGZmNlx1OTBkNlx1OTBlMFx1OTBkOVx1OTBkYVx1OTBlM1x1OTBkZlx1OTBlNVx1OTBkOFx1OTBkYlx1OTBkN1x1OTBkY1x1OTBlNFx1OTE1MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxMV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjExXVtn'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxMV1bZ11dPTU0MDE2K2csX1s1NDAxNitnXT15WzIxMV1bZ10pO2Zvcih5WzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0ZVx1OTE0Zlx1OTFkNVx1OTFlMlx1OTFkYVx1OTY1Y1x1'@;
put 'OTY1Zlx1OTZiY1x1OThlM1x1OWFkZlx1OWIyZlx1NGU3Zlx1NTA3MFx1NTA2YVx1NTA2MVx1NTA1ZVx1NTA2MFx1NTA1M1x1NTA0Ylx1NTA1ZFx1NTA3Mlx1NTA0OFx1NTA0ZFx1NTA0MVx1NTA1Ylx1NTA0YVx1NTA2Mlx1NTAxNVx1NTA0NVx1NTA1Zlx1NTA2OVx1NTA2Ylx1NTA2M1x1NTA2'@;
put 'NFx1NTA0Nlx1NTA0MFx1NTA2ZVx1NTA3M1x1NTA1N1x1NTA1MVx1NTFkMFx1NTI2Ylx1NTI2ZFx1NTI2Y1x1NTI2ZVx1NTJkNlx1NTJkM1x1NTMyZFx1NTM5Y1x1NTU3NVx1NTU3Nlx1NTUzY1x1NTU0ZFx1NTU1MFx1NTUzNFx1NTUyYVx1NTU1MVx1NTU2Mlx1NTUzNlx1NTUzNVx1NTUzMFx1'@;
put 'NTU1Mlx1NTU0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUwY1x1NTUzMlx1NTU2NVx1NTU0ZVx1NTUzOVx1NTU0OFx1NTUyZFx1NTUzYlx1NTU0MFx1NTU0Ylx1NTcwYVx1NTcwN1x1NTdmYlx1NTgxNFx1NTdlMlx1NTdmNlx1NTdkY1x1NTdmNFx1NTgwMFx1'@;
put 'NTdlZFx1NTdmZFx1NTgwOFx1NTdmOFx1NTgwYlx1NTdmM1x1NTdjZlx1NTgwN1x1NTdlZVx1NTdlM1x1NTdmMlx1NTdlNVx1NTdlY1x1NTdlMVx1NTgwZVx1NTdmY1x1NTgxMFx1NTdlN1x1NTgwMVx1NTgwY1x1NTdmMVx1NTdlOVx1NTdmMFx1NTgwZFx1NTgwNFx1NTk1Y1x1NWE2MFx1NWE1'@;
put 'OFx1NWE1NVx1NWE2N1x1NWE1ZVx1NWEzOFx1NWEzNVx1NWE2ZFx1NWE1MFx1NWE1Zlx1NWE2NVx1NWE2Y1x1NWE1M1x1NWE2NFx1NWE1N1x1NWE0M1x1NWE1ZFx1NWE1Mlx1NWE0NFx1NWE1Ylx1NWE0OFx1NWE4ZVx1NWEzZVx1NWE0ZFx1NWEzOVx1NWE0Y1x1NWE3MFx1NWE2OVx1NWE0N1x1'@;
put 'NWE1MVx1NWE1Nlx1NWE0Mlx1NWE1Y1x1NWI3Mlx1NWI2ZVx1NWJjMVx1NWJjMFx1NWM1OVx1NWQxZVx1NWQwYlx1NWQxZFx1NWQxYVx1NWQyMFx1NWQwY1x1NWQyOFx1NWQwZFx1NWQyNlx1NWQyNVx1NWQwZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxMl0ubGVuZ3RoOysrZyk2NTUz'@;
put 'MyE9PXlbMjEyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxMl1bZ11dPTU0MjcyK2csX1s1NDI3MitnXT15WzIxMl1bZ10pO2Zvcih5WzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1'@;
put 'NWQyZVx1NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBk'@;
put 'Ylx1NjBiN1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1'@;
put 'NjM3Y1x1NjNhNFx1NjMzYlx1NjM5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1'@;
put 'Njg5MFx1Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1Njhh'@;
put 'MFx1Njg4OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1'@;
put 'NmRmNlx1NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRlZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxM10ubGVu'@;
put 'Z3RoOysrZyk2NTUzMyE9PXlbMjEzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxM11bZ11dPTU0NTI4K2csX1s1NDUyOCtnXT15WzIxM11bZ10pO2Zvcih5WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmRkMFx1NmRmMlx1'@;
put 'NmRkM1x1NmRmZFx1NmRkN1x1NmRjZFx1NmRlM1x1NmRiYlx1NzBmYVx1NzEwZFx1NzBmN1x1NzExN1x1NzBmNFx1NzEwY1x1NzBmMFx1NzEwNFx1NzBmM1x1NzExMFx1NzBmY1x1NzBmZlx1NzEwNlx1NzExM1x1NzEwMFx1NzBmOFx1NzBmNlx1NzEwYlx1NzEwMlx1NzEwZVx1NzI3ZVx1NzI3'@;
put 'Ylx1NzI3Y1x1NzI3Zlx1NzMxZFx1NzMxN1x1NzMwN1x1NzMxMVx1NzMxOFx1NzMwYVx1NzMwOFx1NzJmZlx1NzMwZlx1NzMxZVx1NzM4OFx1NzNmNlx1NzNmOFx1NzNmNVx1NzQwNFx1NzQwMVx1NzNmZFx1NzQwN1x1NzQwMFx1NzNmYVx1NzNmY1x1NzNmZlx1NzQwY1x1NzQwYlx1NzNmNFx1'@;
put 'NzQwOFx1NzU2NFx1NzU2M1x1NzVjZVx1NzVkMlx1NzVjZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzVjYlx1NzVjY1x1NzVkMVx1NzVkMFx1NzY4Zlx1NzY4OVx1NzZkM1x1NzczOVx1NzcyZlx1NzcyZFx1NzczMVx1NzczMlx1NzczNFx1NzczM1x1NzczZFx1'@;
put 'NzcyNVx1NzczYlx1NzczNVx1Nzg0OFx1Nzg1Mlx1Nzg0OVx1Nzg0ZFx1Nzg0YVx1Nzg0Y1x1NzgyNlx1Nzg0NVx1Nzg1MFx1Nzk2NFx1Nzk2N1x1Nzk2OVx1Nzk2YVx1Nzk2M1x1Nzk2Ylx1Nzk2MVx1NzliYlx1NzlmYVx1NzlmOFx1NzlmNlx1NzlmN1x1N2E4Zlx1N2E5NFx1N2E5MFx1N2Iz'@;
put 'NVx1N2I0N1x1N2IzNFx1N2IyNVx1N2IzMFx1N2IyMlx1N2IyNFx1N2IzM1x1N2IxOFx1N2IyYVx1N2IxZFx1N2IzMVx1N2IyYlx1N2IyZFx1N2IyZlx1N2IzMlx1N2IzOFx1N2IxYVx1N2IyM1x1N2M5NFx1N2M5OFx1N2M5Nlx1N2NhM1x1N2QzNVx1N2QzZFx1N2QzOFx1N2QzNlx1N2QzYVx1'@;
put 'N2Q0NVx1N2QyY1x1N2QyOVx1N2Q0MVx1N2Q0N1x1N2QzZVx1N2QzZlx1N2Q0YVx1N2QzYlx1N2QyOFx1N2Y2M1x1N2Y5NVx1N2Y5Y1x1N2Y5ZFx1N2Y5Ylx1N2ZjYVx1N2ZjYlx1N2ZjZFx1N2ZkMFx1N2ZkMVx1N2ZjN1x1N2ZjZlx1N2ZjOVx1ODAxZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn'@;
put 'IT15WzIxNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxNF1bZ11dPTU0Nzg0K2csX1s1NDc4NCtnXT15WzIxNF1bZ10pO2Zvcih5WzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ODAxZVx1ODAxYlx1ODA0N1x1ODA0M1x1ODA0OFx1ODExOFx1ODEyNVx1ODExOVx1ODExYlx1ODEyZFx1ODExZlx1ODEyY1x1ODExZVx1ODEyMVx1ODExNVx1ODEyN1x1ODExZFx1ODEyMlx1ODIxMVx1ODIzOFx1ODIzM1x1ODIzYVx1ODIzNFx1ODIzMlx1ODI3NFx1ODM5MFx1ODNhM1x1ODNh'@;
put 'OFx1ODM4ZFx1ODM3YVx1ODM3M1x1ODNhNFx1ODM3NFx1ODM4Zlx1ODM4MVx1ODM5NVx1ODM5OVx1ODM3NVx1ODM5NFx1ODNhOVx1ODM3ZFx1ODM4M1x1ODM4Y1x1ODM5ZFx1ODM5Ylx1ODNhYVx1ODM4Ylx1ODM3ZVx1ODNhNVx1ODNhZlx1ODM4OFx1ODM5N1x1ODNiMFx1ODM3Zlx1ODNhNlx1'@;
put 'ODM4N1x1ODNhZVx1ODM3Nlx1ODM5YVx1ODY1OVx1ODY1Nlx1ODZiZlx1ODZiN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODZjMlx1ODZjMVx1ODZjNVx1ODZiYVx1ODZiMFx1ODZjOFx1ODZiOVx1ODZiM1x1ODZiOFx1ODZjY1x1ODZiNFx1ODZiYlx1ODZiY1x1'@;
put 'ODZjM1x1ODZiZFx1ODZiZVx1ODg1Mlx1ODg4OVx1ODg5NVx1ODhhOFx1ODhhMlx1ODhhYVx1ODg5YVx1ODg5MVx1ODhhMVx1ODg5Zlx1ODg5OFx1ODhhN1x1ODg5OVx1ODg5Ylx1ODg5N1x1ODhhNFx1ODhhY1x1ODg4Y1x1ODg5M1x1ODg4ZVx1ODk4Mlx1ODlkNlx1ODlkOVx1ODlkNVx1OGEz'@;
put 'MFx1OGEyN1x1OGEyY1x1OGExZVx1OGMzOVx1OGMzYlx1OGM1Y1x1OGM1ZFx1OGM3ZFx1OGNhNVx1OGQ3ZFx1OGQ3Ylx1OGQ3OVx1OGRiY1x1OGRjMlx1OGRiOVx1OGRiZlx1OGRjMVx1OGVkOFx1OGVkZVx1OGVkZFx1OGVkY1x1OGVkN1x1OGVlMFx1OGVlMVx1OTAyNFx1OTAwYlx1OTAxMVx1'@;
put 'OTAxY1x1OTAwY1x1OTAyMVx1OTBlZlx1OTBlYVx1OTBmMFx1OTBmNFx1OTBmMlx1OTBmM1x1OTBkNFx1OTBlYlx1OTBlY1x1OTBlOVx1OTE1Nlx1OTE1OFx1OTE1YVx1OTE1M1x1OTE1NVx1OTFlY1x1OTFmNFx1OTFmMVx1OTFmM1x1OTFmOFx1OTFlNFx1OTFmOVx1OTFlYVx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLGc9MDtnIT15WzIxNV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxNV1bZ11dPTU1MDQwK2csX1s1NTA0MCtnXT15WzIxNV1bZ10pO2Zvcih5WzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4'@;
put 'ZVx1NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVhNVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1'@;
put 'NTU3ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgyOVx1NTgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1'@;
put 'NTgzZlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4'@;
put 'Ylx1NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJjZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1'@;
put 'NWQzM1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjEx'@;
put 'NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxNl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxNl1bZ11dPTU1Mjk2K2csX1s1NTI5NitnXT15WzIxNl1bZ10pO2Zvcih5WzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjBmMlx1NjEwYVx1NjExNlx1NjEwNVx1NjBmNVx1NjExM1x1NjBmOFx1NjBmY1x1NjBmZVx1NjBjMVx1NjEwM1x1NjExOFx1NjExZFx1NjExMFx1NjBmZlx1NjEwNFx1NjEwYlx1NjI0YVx1NjM5NFx1NjNiMVx1NjNiMFx1NjNjZVx1NjNlNVx1NjNl'@;
put 'OFx1NjNlZlx1NjNjM1x1NjQ5ZFx1NjNmM1x1NjNjYVx1NjNlMFx1NjNmNlx1NjNkNVx1NjNmMlx1NjNmNVx1NjQ2MVx1NjNkZlx1NjNiZVx1NjNkZFx1NjNkY1x1NjNjNFx1NjNkOFx1NjNkM1x1NjNjMlx1NjNjN1x1NjNjY1x1NjNjYlx1NjNjOFx1NjNmMFx1NjNkN1x1NjNkOVx1NjUzMlx1'@;
put 'NjU2N1x1NjU2YVx1NjU2NFx1NjU1Y1x1NjU2OFx1NjU2NVx1NjU4Y1x1NjU5ZFx1NjU5ZVx1NjVhZVx1NjVkMFx1NjVkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjY3Y1x1NjY2Y1x1NjY3Ylx1NjY4MFx1NjY3MVx1NjY3OVx1NjY2YVx1NjY3Mlx1NjcwMVx1'@;
put 'NjkwY1x1NjhkM1x1NjkwNFx1NjhkY1x1NjkyYVx1NjhlY1x1NjhlYVx1NjhmMVx1NjkwZlx1NjhkNlx1NjhmN1x1NjhlYlx1NjhlNFx1NjhmNlx1NjkxM1x1NjkxMFx1NjhmM1x1NjhlMVx1NjkwN1x1NjhjY1x1NjkwOFx1Njk3MFx1NjhiNFx1NjkxMVx1NjhlZlx1NjhjNlx1NjkxNFx1Njhm'@;
put 'OFx1NjhkMFx1NjhmZFx1NjhmY1x1NjhlOFx1NjkwYlx1NjkwYVx1NjkxN1x1NjhjZVx1NjhjOFx1NjhkZFx1NjhkZVx1NjhlNlx1NjhmNFx1NjhkMVx1NjkwNlx1NjhkNFx1NjhlOVx1NjkxNVx1NjkyNVx1NjhjN1x1NmIzOVx1NmIzYlx1NmIzZlx1NmIzY1x1NmI5NFx1NmI5N1x1NmI5OVx1'@;
put 'NmI5NVx1NmJiZFx1NmJmMFx1NmJmMlx1NmJmM1x1NmMzMFx1NmRmY1x1NmU0Nlx1NmU0N1x1NmUxZlx1NmU0OVx1NmU4OFx1NmUzY1x1NmUzZFx1NmU0NVx1NmU2Mlx1NmUyYlx1NmUzZlx1NmU0MVx1NmU1ZFx1NmU3M1x1NmUxY1x1NmUzM1x1NmU0Ylx1NmU0MFx1NmU1MVx1NmUzYlx1NmUw'@;
put 'M1x1NmUyZVx1NmU1ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxN11bZ11dPTU1NTUyK2csX1s1NTU1MitnXT15WzIxN11bZ10pO2Zvcih5WzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU2OFx1NmU1Y1x1NmU2MVx1NmUzMVx1NmUyOFx1NmU2MFx1NmU3MVx1NmU2Ylx1NmUzOVx1NmUyMlx1NmUzMFx1NmU1M1x1NmU2NVx1NmUyN1x1NmU3OFx1NmU2NFx1NmU3N1x1NmU1NVx1NmU3OVx1NmU1Mlx1NmU2Nlx1NmUz'@;
put 'NVx1NmUzNlx1NmU1YVx1NzEyMFx1NzExZVx1NzEyZlx1NzBmYlx1NzEyZVx1NzEzMVx1NzEyM1x1NzEyNVx1NzEyMlx1NzEzMlx1NzExZlx1NzEyOFx1NzEzYVx1NzExYlx1NzI0Ylx1NzI1YVx1NzI4OFx1NzI4OVx1NzI4Nlx1NzI4NVx1NzI4Ylx1NzMxMlx1NzMwYlx1NzMzMFx1NzMyMlx1'@;
put 'NzMzMVx1NzMzM1x1NzMyN1x1NzMzMlx1NzMyZFx1NzMyNlx1NzMyM1x1NzMzNVx1NzMwY1x1NzQyZVx1NzQyY1x1NzQzMFx1NzQyYlx1NzQxNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzQxYVx1NzQyMVx1NzQyZFx1NzQzMVx1NzQyNFx1NzQyM1x1NzQxZFx1'@;
put 'NzQyOVx1NzQyMFx1NzQzMlx1NzRmYlx1NzUyZlx1NzU2Zlx1NzU2Y1x1NzVlN1x1NzVkYVx1NzVlMVx1NzVlNlx1NzVkZFx1NzVkZlx1NzVlNFx1NzVkN1x1NzY5NVx1NzY5Mlx1NzZkYVx1Nzc0Nlx1Nzc0N1x1Nzc0NFx1Nzc0ZFx1Nzc0NVx1Nzc0YVx1Nzc0ZVx1Nzc0Ylx1Nzc0Y1x1Nzdk'@;
put 'ZVx1NzdlY1x1Nzg2MFx1Nzg2NFx1Nzg2NVx1Nzg1Y1x1Nzg2ZFx1Nzg3MVx1Nzg2YVx1Nzg2ZVx1Nzg3MFx1Nzg2OVx1Nzg2OFx1Nzg1ZVx1Nzg2Mlx1Nzk3NFx1Nzk3M1x1Nzk3Mlx1Nzk3MFx1N2EwMlx1N2EwYVx1N2EwM1x1N2EwY1x1N2EwNFx1N2E5OVx1N2FlNlx1N2FlNFx1N2I0YVx1'@;
put 'N2IzYlx1N2I0NFx1N2I0OFx1N2I0Y1x1N2I0ZVx1N2I0MFx1N2I1OFx1N2I0NVx1N2NhMlx1N2M5ZVx1N2NhOFx1N2NhMVx1N2Q1OFx1N2Q2Zlx1N2Q2M1x1N2Q1M1x1N2Q1Nlx1N2Q2N1x1N2Q2YVx1N2Q0Zlx1N2Q2ZFx1N2Q1Y1x1N2Q2Ylx1N2Q1Mlx1N2Q1NFx1N2Q2OVx1N2Q1MVx1N2Q1'@;
put 'Zlx1N2Q0ZVx1N2YzZVx1N2YzZlx1N2Y2NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxOF1bZ11dPTU1ODA4K2csX1s1NTgwOCtnXT15WzIxOF1bZ10pO2Zvcih5WzIxOV09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFl'@;
put 'ZVx1ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1'@;
put 'ODNlNVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNjMlx1ODNmM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1'@;
put 'ODQxM1x1ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZkM1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1'@;
put 'Nlx1ODg1NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1'@;
put 'OGE0NFx1OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNiOVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRk'@;
put 'OVx1OGRjOFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxOV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxOV1bZ11dPTU2MDY0K2csX1s1NjA2NCtnXT15WzIxOV1bZ10pO2Zvcih5WzIy'@;
put 'MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVmOVx1OGVlNlx1OGVlZVx1OGVlNVx1OGVmNVx1OGVlN1x1OGVlOFx1OGVmNlx1OGVlYlx1OGVmMVx1OGVlY1x1OGVmNFx1OGVlOVx1OTAyZFx1OTAzNFx1OTAyZlx1OTEwNlx1OTEy'@;
put 'Y1x1OTEwNFx1OTBmZlx1OTBmY1x1OTEwOFx1OTBmOVx1OTBmYlx1OTEwMVx1OTEwMFx1OTEwN1x1OTEwNVx1OTEwM1x1OTE2MVx1OTE2NFx1OTE1Zlx1OTE2Mlx1OTE2MFx1OTIwMVx1OTIwYVx1OTIyNVx1OTIwM1x1OTIxYVx1OTIyNlx1OTIwZlx1OTIwY1x1OTIwMFx1OTIxMlx1OTFmZlx1'@;
put 'OTFmZFx1OTIwNlx1OTIwNFx1OTIyN1x1OTIwMlx1OTIxY1x1OTIyNFx1OTIxOVx1OTIxN1x1OTIwNVx1OTIxNlx1OTU3Ylx1OTU4ZFx1OTU4Y1x1OTU5MFx1OTY4N1x1OTY3ZVx1OTY4OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4OVx1OTY4M1x1OTY4MFx1'@;
put 'OTZjMlx1OTZjOFx1OTZjM1x1OTZmMVx1OTZmMFx1OTc2Y1x1OTc3MFx1OTc2ZVx1OTgwN1x1OThhOVx1OThlYlx1OWNlNlx1OWVmOVx1NGU4M1x1NGU4NFx1NGViNlx1NTBiZFx1NTBiZlx1NTBjNlx1NTBhZVx1NTBjNFx1NTBjYVx1NTBiNFx1NTBjOFx1NTBjMlx1NTBiMFx1NTBjMVx1NTBi'@;
put 'YVx1NTBiMVx1NTBjYlx1NTBjOVx1NTBiNlx1NTBiOFx1NTFkN1x1NTI3YVx1NTI3OFx1NTI3Ylx1NTI3Y1x1NTVjM1x1NTVkYlx1NTVjY1x1NTVkMFx1NTVjYlx1NTVjYVx1NTVkZFx1NTVjMFx1NTVkNFx1NTVjNFx1NTVlOVx1NTViZlx1NTVkMlx1NTU4ZFx1NTVjZlx1NTVkNVx1NTVlMlx1'@;
put 'NTVkNlx1NTVjOFx1NTVmMlx1NTVjZFx1NTVkOVx1NTVjMlx1NTcxNFx1NTg1M1x1NTg2OFx1NTg2NFx1NTg0Zlx1NTg0ZFx1NTg0OVx1NTg2Zlx1NTg1NVx1NTg0ZVx1NTg1ZFx1NTg1OVx1NTg2NVx1NTg1Ylx1NTgzZFx1NTg2M1x1NTg3MVx1NThmY1x1NWFjN1x1NWFjNFx1NWFjYlx1NWFi'@;
put 'YVx1NWFiOFx1NWFiMVx1NWFiNVx1NWFiMFx1NWFiZlx1NWFjOFx1NWFiYlx1NWFjNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjIwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyMF1bZ11dPTU2MzIwK2csX1s1NjMyMCtnXT15WzIyMF1b'@;
put 'Z10pO2Zvcih5WzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWFiN1x1NWFjMFx1NWFjYVx1NWFiNFx1NWFiNlx1NWFjZFx1NWFiOVx1NWE5MFx1NWJkNlx1NWJkOFx1NWJkOVx1NWMxZlx1NWMzM1x1NWQ3MVx1NWQ2M1x1NWQ0'@;
put 'YVx1NWQ2NVx1NWQ3Mlx1NWQ2Y1x1NWQ1ZVx1NWQ2OFx1NWQ2N1x1NWQ2Mlx1NWRmMFx1NWU0Zlx1NWU0ZVx1NWU0YVx1NWU0ZFx1NWU0Ylx1NWVjNVx1NWVjY1x1NWVjNlx1NWVjYlx1NWVjN1x1NWY0MFx1NWZhZlx1NWZhZFx1NjBmN1x1NjE0OVx1NjE0YVx1NjEyYlx1NjE0NVx1NjEzNlx1'@;
put 'NjEzMlx1NjEyZVx1NjE0Nlx1NjEyZlx1NjE0Zlx1NjEyOVx1NjE0MFx1NjIyMFx1OTE2OFx1NjIyM1x1NjIyNVx1NjIyNFx1NjNjNVx1NjNmMVx1NjNlYlx1NjQxMFx1NjQxMlx1NjQwOVx1NjQyMFx1NjQyNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjQzM1x1'@;
put 'NjQ0M1x1NjQxZlx1NjQxNVx1NjQxOFx1NjQzOVx1NjQzN1x1NjQyMlx1NjQyM1x1NjQwY1x1NjQyNlx1NjQzMFx1NjQyOFx1NjQ0MVx1NjQzNVx1NjQyZlx1NjQwYVx1NjQxYVx1NjQ0MFx1NjQyNVx1NjQyN1x1NjQwYlx1NjNlN1x1NjQxYlx1NjQyZVx1NjQyMVx1NjQwZVx1NjU2Zlx1NjU5'@;
put 'Mlx1NjVkM1x1NjY4Nlx1NjY4Y1x1NjY5NVx1NjY5MFx1NjY4Ylx1NjY4YVx1NjY5OVx1NjY5NFx1NjY3OFx1NjcyMFx1Njk2Nlx1Njk1Zlx1NjkzOFx1Njk0ZVx1Njk2Mlx1Njk3MVx1NjkzZlx1Njk0NVx1Njk2YVx1NjkzOVx1Njk0Mlx1Njk1N1x1Njk1OVx1Njk3YVx1Njk0OFx1Njk0OVx1'@;
put 'NjkzNVx1Njk2Y1x1NjkzM1x1NjkzZFx1Njk2NVx1NjhmMFx1Njk3OFx1NjkzNFx1Njk2OVx1Njk0MFx1Njk2Zlx1Njk0NFx1Njk3Nlx1Njk1OFx1Njk0MVx1Njk3NFx1Njk0Y1x1NjkzYlx1Njk0Ylx1NjkzN1x1Njk1Y1x1Njk0Zlx1Njk1MVx1NjkzMlx1Njk1Mlx1NjkyZlx1Njk3Ylx1Njkz'@;
put 'Y1x1NmI0Nlx1NmI0NVx1NmI0M1x1NmI0Mlx1NmI0OFx1NmI0MVx1NmI5Ylx1ZmEwZFx1NmJmYlx1NmJmY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyMV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjIxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyMV1bZ11dPTU2NTc2K2csX1s1NjU3'@;
put 'NitnXT15WzIyMV1bZ10pO2Zvcih5WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmVi'@;
put 'OVx1NmVjNlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVjM1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1'@;
put 'NmVhZVx1NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0'@;
put 'Mlx1NzQ0Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYwM1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1'@;
put 'NzZkZFx1Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3'@;
put 'Ylx1Nzk3Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyMl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjIyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyMl1bZ11dPTU2'@;
put 'ODMyK2csX1s1NjgzMitnXT15WzIyMl1bZ10pO2Zvcih5WzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExYlx1N2ExMFx1N2FhM1x1N2FhMlx1N2E5ZVx1N2FlYlx1N2I2Nlx1N2I2NFx1N2I2ZFx1N2I3NFx1N2I2OVx1N2I3'@;
put 'Mlx1N2I2NVx1N2I3M1x1N2I3MVx1N2I3MFx1N2I2MVx1N2I3OFx1N2I3Nlx1N2I2M1x1N2NiMlx1N2NiNFx1N2NhZlx1N2Q4OFx1N2Q4Nlx1N2Q4MFx1N2Q4ZFx1N2Q3Zlx1N2Q4NVx1N2Q3YVx1N2Q4ZVx1N2Q3Ylx1N2Q4M1x1N2Q3Y1x1N2Q4Y1x1N2Q5NFx1N2Q4NFx1N2Q3ZFx1N2Q5Mlx1'@;
put 'N2Y2ZFx1N2Y2Ylx1N2Y2N1x1N2Y2OFx1N2Y2Y1x1N2ZhNlx1N2ZhNVx1N2ZhN1x1N2ZkYlx1N2ZkY1x1ODAyMVx1ODE2NFx1ODE2MFx1ODE3N1x1ODE1Y1x1ODE2OVx1ODE1Ylx1ODE2Mlx1ODE3Mlx1NjcyMVx1ODE1ZVx1ODE3Nlx1ODE2N1x1ODE2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0NFx1ODE2MVx1ODIxZFx1ODI0OVx1ODI0NFx1ODI0MFx1ODI0Mlx1ODI0NVx1ODRmMVx1ODQzZlx1ODQ1Nlx1ODQ3Nlx1ODQ3OVx1ODQ4Zlx1ODQ4ZFx1ODQ2NVx1ODQ1MVx1ODQ0MFx1ODQ4Nlx1ODQ2N1x1ODQzMFx1ODQ0ZFx1ODQ3ZFx1ODQ1YVx1ODQ1'@;
put 'OVx1ODQ3NFx1ODQ3M1x1ODQ1ZFx1ODUwN1x1ODQ1ZVx1ODQzN1x1ODQzYVx1ODQzNFx1ODQ3YVx1ODQ0M1x1ODQ3OFx1ODQzMlx1ODQ0NVx1ODQyOVx1ODNkOVx1ODQ0Ylx1ODQyZlx1ODQ0Mlx1ODQyZFx1ODQ1Zlx1ODQ3MFx1ODQzOVx1ODQ0ZVx1ODQ0Y1x1ODQ1Mlx1ODQ2Zlx1ODRjNVx1'@;
put 'ODQ4ZVx1ODQzYlx1ODQ0N1x1ODQzNlx1ODQzM1x1ODQ2OFx1ODQ3ZVx1ODQ0NFx1ODQyYlx1ODQ2MFx1ODQ1NFx1ODQ2ZVx1ODQ1MFx1ODcwYlx1ODcwNFx1ODZmN1x1ODcwY1x1ODZmYVx1ODZkNlx1ODZmNVx1ODc0ZFx1ODZmOFx1ODcwZVx1ODcwOVx1ODcwMVx1ODZmNlx1ODcwZFx1ODcw'@;
put 'NVx1ODhkNlx1ODhjYlx1ODhjZFx1ODhjZVx1ODhkZVx1ODhkYlx1ODhkYVx1ODhjY1x1ODhkMFx1ODk4NVx1ODk5Ylx1ODlkZlx1ODllNVx1ODllNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyM10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjIzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5'@;
put 'WzIyM11bZ11dPTU3MDg4K2csX1s1NzA4OCtnXT15WzIyM11bZ10pO2Zvcih5WzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODllMVx1ODllMFx1ODllMlx1ODlkY1x1ODllNlx1OGE3Nlx1OGE4Nlx1OGE3Zlx1OGE2MVx1OGEz'@;
put 'Zlx1OGE3N1x1OGE4Mlx1OGE4NFx1OGE3NVx1OGE4M1x1OGE4MVx1OGE3NFx1OGE3YVx1OGMzY1x1OGM0Ylx1OGM0YVx1OGM2NVx1OGM2NFx1OGM2Nlx1OGM4Nlx1OGM4NFx1OGM4NVx1OGNjY1x1OGQ2OFx1OGQ2OVx1OGQ5MVx1OGQ4Y1x1OGQ4ZVx1OGQ4Zlx1OGQ4ZFx1OGQ5M1x1OGQ5NFx1'@;
put 'OGQ5MFx1OGQ5Mlx1OGRmMFx1OGRlMFx1OGRlY1x1OGRmMVx1OGRlZVx1OGRkMFx1OGRlOVx1OGRlM1x1OGRlMlx1OGRlN1x1OGRmMlx1OGRlYlx1OGRmNFx1OGYwNlx1OGVmZlx1OGYwMVx1OGYwMFx1OGYwNVx1OGYwN1x1OGYwOFx1OGYwMlx1OGYwYlx1OTA1Mlx1OTAzZlx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA0NFx1OTA0OVx1OTAzZFx1OTExMFx1OTEwZFx1OTEwZlx1OTExMVx1OTExNlx1OTExNFx1OTEwYlx1OTEwZVx1OTE2ZVx1OTE2Zlx1OTI0OFx1OTI1Mlx1OTIzMFx1OTIzYVx1OTI2Nlx1OTIzM1x1OTI2NVx1OTI1ZVx1OTI4M1x1OTIy'@;
put 'ZVx1OTI0YVx1OTI0Nlx1OTI2ZFx1OTI2Y1x1OTI0Zlx1OTI2MFx1OTI2N1x1OTI2Zlx1OTIzNlx1OTI2MVx1OTI3MFx1OTIzMVx1OTI1NFx1OTI2M1x1OTI1MFx1OTI3Mlx1OTI0ZVx1OTI1M1x1OTI0Y1x1OTI1Nlx1OTIzMlx1OTU5Zlx1OTU5Y1x1OTU5ZVx1OTU5Ylx1OTY5Mlx1OTY5M1x1'@;
put 'OTY5MVx1OTY5N1x1OTZjZVx1OTZmYVx1OTZmZFx1OTZmOFx1OTZmNVx1OTc3M1x1OTc3N1x1OTc3OFx1OTc3Mlx1OTgwZlx1OTgwZFx1OTgwZVx1OThhY1x1OThmNlx1OThmOVx1OTlhZlx1OTliMlx1OTliMFx1OTliNVx1OWFhZFx1OWFhYlx1OWI1Ylx1OWNlYVx1OWNlZFx1OWNlN1x1OWU4'@;
put 'MFx1OWVmZFx1NTBlNlx1NTBkNFx1NTBkN1x1NTBlOFx1NTBmM1x1NTBkYlx1NTBlYVx1NTBkZFx1NTBlNFx1NTBkM1x1NTBlY1x1NTBmMFx1NTBlZlx1NTBlM1x1NTBlMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI0XVtnXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoSVt5WzIyNF1bZ11dPTU3MzQ0K2csX1s1NzM0NCtnXT15WzIyNF1bZ10pO2Zvcih5WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYy'@;
put 'N1x1NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1'@;
put 'NTg3Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFkYVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJl'@;
put 'MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVk'@;
put 'OFx1NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1'@;
put 'NjE2NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1'@;
put 'MFx1NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyNV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI1'@;
put 'XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyNV1bZ11dPTU3NjAwK2csX1s1NzYwMCtnXT15WzIyNV1bZ10pO2Zvcih5WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjlhMFx1NjljZVx1Njk5Nlx1NjliMFx1NjlhY1x1Njli'@;
put 'Y1x1Njk5MVx1Njk5OVx1Njk4ZVx1NjlhN1x1Njk4ZFx1NjlhOVx1NjliZVx1NjlhZlx1NjliZlx1NjljNFx1NjliZFx1NjlhNFx1NjlkNFx1NjliOVx1NjljYVx1Njk5YVx1NjljZlx1NjliM1x1Njk5M1x1NjlhYVx1NjlhMVx1Njk5ZVx1NjlkOVx1Njk5N1x1Njk5MFx1NjljMlx1NjliNVx1'@;
put 'NjlhNVx1NjljNlx1NmI0YVx1NmI0ZFx1NmI0Ylx1NmI5ZVx1NmI5Zlx1NmJhMFx1NmJjM1x1NmJjNFx1NmJmZVx1NmVjZVx1NmVmNVx1NmVmMVx1NmYwM1x1NmYyNVx1NmVmOFx1NmYzN1x1NmVmYlx1NmYyZVx1NmYwOVx1NmY0ZVx1NmYxOVx1NmYxYVx1NmYyN1x1NmYxOFx1NmYzYlx1NmYx'@;
put 'Mlx1NmVlZFx1NmYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzNlx1NmY3M1x1NmVmOVx1NmVlZVx1NmYyZFx1NmY0MFx1NmYzMFx1NmYzY1x1NmYzNVx1NmVlYlx1NmYwN1x1NmYwZVx1NmY0M1x1NmYwNVx1NmVmZFx1NmVmNlx1NmYzOVx1NmYxY1x1NmVm'@;
put 'Y1x1NmYzYVx1NmYxZlx1NmYwZFx1NmYxZVx1NmYwOFx1NmYyMVx1NzE4N1x1NzE5MFx1NzE4OVx1NzE4MFx1NzE4NVx1NzE4Mlx1NzE4Zlx1NzE3Ylx1NzE4Nlx1NzE4MVx1NzE5N1x1NzI0NFx1NzI1M1x1NzI5N1x1NzI5NVx1NzI5M1x1NzM0M1x1NzM0ZFx1NzM1MVx1NzM0Y1x1NzQ2Mlx1'@;
put 'NzQ3M1x1NzQ3MVx1NzQ3NVx1NzQ3Mlx1NzQ2N1x1NzQ2ZVx1NzUwMFx1NzUwMlx1NzUwM1x1NzU3ZFx1NzU5MFx1NzYxNlx1NzYwOFx1NzYwY1x1NzYxNVx1NzYxMVx1NzYwYVx1NzYxNFx1NzZiOFx1Nzc4MVx1Nzc3Y1x1Nzc4NVx1Nzc4Mlx1Nzc2ZVx1Nzc4MFx1Nzc2Zlx1Nzc3ZVx1Nzc4'@;
put 'M1x1NzhiMlx1NzhhYVx1NzhiNFx1NzhhZFx1NzhhOFx1Nzg3ZVx1NzhhYlx1Nzg5ZVx1NzhhNVx1NzhhMFx1NzhhY1x1NzhhMlx1NzhhNFx1Nzk5OFx1Nzk4YVx1Nzk4Ylx1Nzk5Nlx1Nzk5NVx1Nzk5NFx1Nzk5M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyNl0ubGVuZ3RoOysrZyk2'@;
put 'NTUzMyE9PXlbMjI2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyNl1bZ11dPTU3ODU2K2csX1s1Nzg1NitnXT15WzIyNl1bZ10pO2Zvcih5WzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5N1x1Nzk4OFx1Nzk5Mlx1Nzk5'@;
put 'MFx1N2EyYlx1N2E0YVx1N2EzMFx1N2EyZlx1N2EyOFx1N2EyNlx1N2FhOFx1N2FhYlx1N2FhY1x1N2FlZVx1N2I4OFx1N2I5Y1x1N2I4YVx1N2I5MVx1N2I5MFx1N2I5Nlx1N2I4ZFx1N2I4Y1x1N2I5Ylx1N2I4ZVx1N2I4NVx1N2I5OFx1NTI4NFx1N2I5OVx1N2JhNFx1N2I4Mlx1N2NiYlx1'@;
put 'N2NiZlx1N2NiY1x1N2NiYVx1N2RhN1x1N2RiN1x1N2RjMlx1N2RhM1x1N2RhYVx1N2RjMVx1N2RjMFx1N2RjNVx1N2Q5ZFx1N2RjZVx1N2RjNFx1N2RjNlx1N2RjYlx1N2RjY1x1N2RhZlx1N2RiOVx1N2Q5Nlx1N2RiY1x1N2Q5Zlx1N2RhNlx1N2RhZVx1N2RhOVx1N2RhMVx1N2RjOVx1N2Y3'@;
put 'M1x1N2ZlMlx1N2ZlM1x1N2ZlNVx1N2ZkZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODAyNFx1ODA1ZFx1ODA1Y1x1ODE4OVx1ODE4Nlx1ODE4M1x1ODE4N1x1ODE4ZFx1ODE4Y1x1ODE4Ylx1ODIxNVx1ODQ5N1x1ODRhNFx1ODRhMVx1ODQ5Zlx1ODRiYVx1ODRj'@;
put 'ZVx1ODRjMlx1ODRhY1x1ODRhZVx1ODRhYlx1ODRiOVx1ODRiNFx1ODRjMVx1ODRjZFx1ODRhYVx1ODQ5YVx1ODRiMVx1ODRkMFx1ODQ5ZFx1ODRhN1x1ODRiYlx1ODRhMlx1ODQ5NFx1ODRjN1x1ODRjY1x1ODQ5Ylx1ODRhOVx1ODRhZlx1ODRhOFx1ODRkNlx1ODQ5OFx1ODRiNlx1ODRjZlx1'@;
put 'ODRhMFx1ODRkN1x1ODRkNFx1ODRkMlx1ODRkYlx1ODRiMFx1ODQ5MVx1ODY2MVx1ODczM1x1ODcyM1x1ODcyOFx1ODc2Ylx1ODc0MFx1ODcyZVx1ODcxZVx1ODcyMVx1ODcxOVx1ODcxYlx1ODc0M1x1ODcyY1x1ODc0MVx1ODczZVx1ODc0Nlx1ODcyMFx1ODczMlx1ODcyYVx1ODcyZFx1ODcz'@;
put 'Y1x1ODcxMlx1ODczYVx1ODczMVx1ODczNVx1ODc0Mlx1ODcyNlx1ODcyN1x1ODczOFx1ODcyNFx1ODcxYVx1ODczMFx1ODcxMVx1ODhmN1x1ODhlN1x1ODhmMVx1ODhmMlx1ODhmYVx1ODhmZVx1ODhlZVx1ODhmY1x1ODhmNlx1ODhmYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyN10u'@;
put 'bGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyN11bZ11dPTU4MTEyK2csX1s1ODExMitnXT15WzIyN11bZ10pO2Zvcih5WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhmMFx1ODhl'@;
put 'Y1x1ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1'@;
put 'OGUwM1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3'@;
put 'Nlx1OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJh'@;
put 'MVx1OTI4YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZhMVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1'@;
put 'OTgxNlx1OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBm'@;
put 'Zlx1NTEwM1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OFx1ZmZmZCIuc3BsaXQoIiIpLGc9'@;
put 'MDtnIT15WzIyOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyOF1bZ11dPTU4MzY4K2csX1s1ODM2OCtnXT15WzIyOF1bZ10pO2Zvcih5WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NTY1YVx1NTY0MFx1NTYzM1x1NTYzZFx1NTYyY1x1NTYzZVx1NTYzOFx1NTYyYVx1NTYzYVx1NTcxYVx1NThhYlx1NTg5ZFx1NThiMVx1NThhMFx1NThhM1x1NThhZlx1NThhY1x1NThhNVx1NThhMVx1NThmZlx1NWFmZlx1NWFmNFx1NWFmZFx1NWFmN1x1NWFmNlx1NWIwM1x1NWFmOFx1'@;
put 'NWIwMlx1NWFmOVx1NWIwMVx1NWIwN1x1NWIwNVx1NWIwZlx1NWM2N1x1NWQ5OVx1NWQ5N1x1NWQ5Zlx1NWQ5Mlx1NWRhMlx1NWQ5M1x1NWQ5NVx1NWRhMFx1NWQ5Y1x1NWRhMVx1NWQ5YVx1NWQ5ZVx1NWU2OVx1NWU1ZFx1NWU2MFx1NWU1Y1x1N2RmM1x1NWVkYlx1NWVkZVx1NWVlMVx1NWY0'@;
put 'OVx1NWZiMlx1NjE4Ylx1NjE4M1x1NjE3OVx1NjFiMVx1NjFiMFx1NjFhMlx1NjE4OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjE5Ylx1NjE5M1x1NjFhZlx1NjFhZFx1NjE5Zlx1NjE5Mlx1NjFhYVx1NjFhMVx1NjE4ZFx1NjE2Nlx1NjFiM1x1NjIyZFx1NjQ2'@;
put 'ZVx1NjQ3MFx1NjQ5Nlx1NjRhMFx1NjQ4NVx1NjQ5N1x1NjQ5Y1x1NjQ4Zlx1NjQ4Ylx1NjQ4YVx1NjQ4Y1x1NjRhM1x1NjQ5Zlx1NjQ2OFx1NjRiMVx1NjQ5OFx1NjU3Nlx1NjU3YVx1NjU3OVx1NjU3Ylx1NjViMlx1NjViM1x1NjZiNVx1NjZiMFx1NjZhOVx1NjZiMlx1NjZiN1x1NjZhYVx1'@;
put 'NjZhZlx1NmEwMFx1NmEwNlx1NmExN1x1NjllNVx1NjlmOFx1NmExNVx1NjlmMVx1NjllNFx1NmEyMFx1NjlmZlx1NjllY1x1NjllMlx1NmExYlx1NmExZFx1NjlmZVx1NmEyN1x1NjlmMlx1NjllZVx1NmExNFx1NjlmN1x1NjllN1x1NmE0MFx1NmEwOFx1NjllNlx1NjlmYlx1NmEwZFx1Njlm'@;
put 'Y1x1NjllYlx1NmEwOVx1NmEwNFx1NmExOFx1NmEyNVx1NmEwZlx1NjlmNlx1NmEyNlx1NmEwN1x1NjlmNFx1NmExNlx1NmI1MVx1NmJhNVx1NmJhM1x1NmJhMlx1NmJhNlx1NmMwMVx1NmMwMFx1NmJmZlx1NmMwMlx1NmY0MVx1NmYyNlx1NmY3ZVx1NmY4N1x1NmZjNlx1NmY5Mlx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLGc9MDtnIT15WzIyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyOV1bZ11dPTU4NjI0K2csX1s1ODYyNCtnXT15WzIyOV1bZ10pO2Zvcih5WzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1NmY4ZFx1NmY4OVx1NmY4Y1x1NmY2Mlx1NmY0Zlx1NmY4NVx1NmY1YVx1NmY5Nlx1NmY3Nlx1NmY2Y1x1NmY4Mlx1NmY1NVx1NmY3Mlx1NmY1Mlx1NmY1MFx1NmY1N1x1NmY5NFx1NmY5M1x1NmY1ZFx1NmYwMFx1NmY2MVx1NmY2Ylx1NmY3ZFx1NmY2N1x1NmY5MFx1'@;
put 'NmY1M1x1NmY4Ylx1NmY2OVx1NmY3Zlx1NmY5NVx1NmY2M1x1NmY3N1x1NmY2YVx1NmY3Ylx1NzFiMlx1NzFhZlx1NzE5Ylx1NzFiMFx1NzFhMFx1NzE5YVx1NzFhOVx1NzFiNVx1NzE5ZFx1NzFhNVx1NzE5ZVx1NzFhNFx1NzFhMVx1NzFhYVx1NzE5Y1x1NzFhN1x1NzFiM1x1NzI5OFx1NzI5'@;
put 'YVx1NzM1OFx1NzM1Mlx1NzM1ZVx1NzM1Zlx1NzM2MFx1NzM1ZFx1NzM1Ylx1NzM2MVx1NzM1YVx1NzM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM2Mlx1NzQ4N1x1NzQ4OVx1NzQ4YVx1NzQ4Nlx1NzQ4MVx1NzQ3ZFx1NzQ4NVx1NzQ4OFx1NzQ3Y1x1NzQ3'@;
put 'OVx1NzUwOFx1NzUwN1x1NzU3ZVx1NzYyNVx1NzYxZVx1NzYxOVx1NzYxZFx1NzYxY1x1NzYyM1x1NzYxYVx1NzYyOFx1NzYxYlx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Ylx1Nzc4ZFx1Nzc4Zlx1Nzc4OVx1Nzc4OFx1NzhjZFx1NzhiYlx1NzhjZlx1NzhjY1x1NzhkMVx1NzhjZVx1NzhkNFx1'@;
put 'NzhjOFx1NzhjM1x1NzhjNFx1NzhjOVx1Nzk5YVx1NzlhMVx1NzlhMFx1Nzk5Y1x1NzlhMlx1Nzk5Ylx1NmI3Nlx1N2EzOVx1N2FiMlx1N2FiNFx1N2FiM1x1N2JiN1x1N2JjYlx1N2JiZVx1N2JhY1x1N2JjZVx1N2JhZlx1N2JiOVx1N2JjYVx1N2JiNVx1N2NjNVx1N2NjOFx1N2NjY1x1N2Nj'@;
put 'Ylx1N2RmN1x1N2RkYlx1N2RlYVx1N2RlN1x1N2RkN1x1N2RlMVx1N2UwM1x1N2RmYVx1N2RlNlx1N2RmNlx1N2RmMVx1N2RmMFx1N2RlZVx1N2RkZlx1N2Y3Nlx1N2ZhY1x1N2ZiMFx1N2ZhZFx1N2ZlZFx1N2ZlYlx1N2ZlYVx1N2ZlY1x1N2ZlNlx1N2ZlOFx1ODA2NFx1ODA2N1x1ODFhM1x1'@;
put 'ODE5Zlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzMF1bZ11dPTU4ODgwK2csX1s1ODg4MCtnXT15WzIzMF1bZ10pO2Zvcih5WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1'@;
put 'ODUxY1x1ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRmM1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUy'@;
put 'Nlx1ODRlN1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1'@;
put 'Ylx1ODc1Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1'@;
put 'ODkwYlx1ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkxNlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODllZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFk'@;
put 'OFx1OGFjM1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1'@;
put 'OGUxOVx1OGUyNlx1OGUyN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzMV1bZ11dPTU5MTM2K2csX1s1OTEzNitnXT15WzIzMV1bZ10pO2Zvcih5WzIzMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGUxNFx1OGUxMlx1OGUxOFx1OGUxM1x1OGUxY1x1OGUxN1x1OGUxYVx1OGYyY1x1OGYyNFx1OGYxOFx1OGYxYVx1OGYyMFx1OGYyM1x1OGYxNlx1OGYxN1x1OTA3M1x1OTA3MFx1OTA2Zlx1OTA2N1x1OTA2Ylx1OTEyZlx1'@;
put 'OTEyYlx1OTEyOVx1OTEyYVx1OTEzMlx1OTEyNlx1OTEyZVx1OTE4NVx1OTE4Nlx1OTE4YVx1OTE4MVx1OTE4Mlx1OTE4NFx1OTE4MFx1OTJkMFx1OTJjM1x1OTJjNFx1OTJjMFx1OTJkOVx1OTJiNlx1OTJjZlx1OTJmMVx1OTJkZlx1OTJkOFx1OTJlOVx1OTJkN1x1OTJkZFx1OTJjY1x1OTJl'@;
put 'Zlx1OTJjMlx1OTJlOFx1OTJjYVx1OTJjOFx1OTJjZVx1OTJlNlx1OTJjZFx1OTJkNVx1OTJjOVx1OTJlMFx1OTJkZVx1OTJlN1x1OTJkMVx1OTJkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJiNVx1OTJlMVx1OTJjNlx1OTJiNFx1OTU3Y1x1OTVhY1x1OTVh'@;
put 'Ylx1OTVhZVx1OTViMFx1OTZhNFx1OTZhMlx1OTZkM1x1OTcwNVx1OTcwOFx1OTcwMlx1OTc1YVx1OTc4YVx1OTc4ZVx1OTc4OFx1OTdkMFx1OTdjZlx1OTgxZVx1OTgxZFx1OTgyNlx1OTgyOVx1OTgyOFx1OTgyMFx1OTgxYlx1OTgyN1x1OThiMlx1OTkwOFx1OThmYVx1OTkxMVx1OTkxNFx1'@;
put 'OTkxNlx1OTkxN1x1OTkxNVx1OTlkY1x1OTljZFx1OTljZlx1OTlkM1x1OTlkNFx1OTljZVx1OTljOVx1OTlkNlx1OTlkOFx1OTljYlx1OTlkN1x1OTljY1x1OWFiM1x1OWFlY1x1OWFlYlx1OWFmM1x1OWFmMlx1OWFmMVx1OWI0Nlx1OWI0M1x1OWI2N1x1OWI3NFx1OWI3MVx1OWI2Nlx1OWI3'@;
put 'Nlx1OWI3NVx1OWI3MFx1OWI2OFx1OWI2NFx1OWI2Y1x1OWNmY1x1OWNmYVx1OWNmZFx1OWNmZlx1OWNmN1x1OWQwN1x1OWQwMFx1OWNmOVx1OWNmYlx1OWQwOFx1OWQwNVx1OWQwNFx1OWU4M1x1OWVkM1x1OWYwZlx1OWYxMFx1NTExY1x1NTExM1x1NTExN1x1NTExYVx1NTExMVx1NTFkZVx1'@;
put 'NTMzNFx1NTNlMVx1NTY3MFx1NTY2MFx1NTY2ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzMl1bZ11dPTU5MzkyK2csX1s1OTM5MitnXT15WzIzMl1bZ10pO2Zvcih5WzIzM109Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTY3M1x1NTY2Nlx1NTY2M1x1NTY2ZFx1NTY3Mlx1NTY1ZVx1NTY3N1x1NTcxY1x1NTcxYlx1NThjOFx1NThiZFx1NThjOVx1NThiZlx1NThiYVx1NThjMlx1NThiY1x1NThjNlx1NWIxN1x1NWIxOVx1'@;
put 'NWIxYlx1NWIyMVx1NWIxNFx1NWIxM1x1NWIxMFx1NWIxNlx1NWIyOFx1NWIxYVx1NWIyMFx1NWIxZVx1NWJlZlx1NWRhY1x1NWRiMVx1NWRhOVx1NWRhN1x1NWRiNVx1NWRiMFx1NWRhZVx1NWRhYVx1NWRhOFx1NWRiMlx1NWRhZFx1NWRhZlx1NWRiNFx1NWU2N1x1NWU2OFx1NWU2Nlx1NWU2'@;
put 'Zlx1NWVlOVx1NWVlN1x1NWVlNlx1NWVlOFx1NWVlNVx1NWY0Ylx1NWZiY1x1NjE5ZFx1NjFhOFx1NjE5Nlx1NjFjNVx1NjFiNFx1NjFjNlx1NjFjMVx1NjFjY1x1NjFiYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjFiZlx1NjFiOFx1NjE4Y1x1NjRkN1x1NjRk'@;
put 'Nlx1NjRkMFx1NjRjZlx1NjRjOVx1NjRiZFx1NjQ4OVx1NjRjM1x1NjRkYlx1NjRmM1x1NjRkOVx1NjUzM1x1NjU3Zlx1NjU3Y1x1NjVhMlx1NjZjOFx1NjZiZVx1NjZjMFx1NjZjYVx1NjZjYlx1NjZjZlx1NjZiZFx1NjZiYlx1NjZiYVx1NjZjY1x1NjcyM1x1NmEzNFx1NmE2Nlx1NmE0OVx1'@;
put 'NmE2N1x1NmEzMlx1NmE2OFx1NmEzZVx1NmE1ZFx1NmE2ZFx1NmE3Nlx1NmE1Ylx1NmE1MVx1NmEyOFx1NmE1YVx1NmEzYlx1NmEzZlx1NmE0MVx1NmE2YVx1NmE2NFx1NmE1MFx1NmE0Zlx1NmE1NFx1NmE2Zlx1NmE2OVx1NmE2MFx1NmEzY1x1NmE1ZVx1NmE1Nlx1NmE1NVx1NmE0ZFx1NmE0'@;
put 'ZVx1NmE0Nlx1NmI1NVx1NmI1NFx1NmI1Nlx1NmJhN1x1NmJhYVx1NmJhYlx1NmJjOFx1NmJjN1x1NmMwNFx1NmMwM1x1NmMwNlx1NmZhZFx1NmZjYlx1NmZhM1x1NmZjN1x1NmZiY1x1NmZjZVx1NmZjOFx1NmY1ZVx1NmZjNFx1NmZiZFx1NmY5ZVx1NmZjYVx1NmZhOFx1NzAwNFx1NmZhNVx1'@;
put 'NmZhZVx1NmZiYVx1NmZhY1x1NmZhYVx1NmZjZlx1NmZiZlx1NmZiOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzM10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzM11bZ11dPTU5NjQ4K2csX1s1OTY0OCtnXT15WzIzM11bZ10pO2Zvcih5'@;
put 'WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZhMlx1NmZjOVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1'@;
put 'NzFjN1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYy'@;
put 'ZFx1NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1NzdhMVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc5N1x1NzhkZFx1Nzhl'@;
put 'OVx1NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1'@;
put 'N2JmOVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2Ux'@;
put 'Nlx1N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAyOVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1'@;
put 'ODI1Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzNF1bZ11dPTU5OTA0K2csX1s1OTkwNCtnXT15WzIz'@;
put 'NF1bZ10pO2Zvcih5WzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU0MFx1ODU0Nlx1ODU2NFx1ODU0MVx1ODU2Mlx1ODU0NFx1ODU1MVx1ODU0N1x1ODU2M1x1ODUzZVx1ODU1Ylx1ODU3MVx1ODU0ZVx1ODU2ZVx1ODU3NVx1'@;
put 'ODU1NVx1ODU2N1x1ODU2MFx1ODU4Y1x1ODU2Nlx1ODU1ZFx1ODU1NFx1ODU2NVx1ODU2Y1x1ODY2M1x1ODY2NVx1ODY2NFx1ODc5Ylx1ODc4Zlx1ODc5N1x1ODc5M1x1ODc5Mlx1ODc4OFx1ODc4MVx1ODc5Nlx1ODc5OFx1ODc3OVx1ODc4N1x1ODdhM1x1ODc4NVx1ODc5MFx1ODc5MVx1ODc5'@;
put 'ZFx1ODc4NFx1ODc5NFx1ODc5Y1x1ODc5YVx1ODc4OVx1ODkxZVx1ODkyNlx1ODkzMFx1ODkyZFx1ODkyZVx1ODkyN1x1ODkzMVx1ODkyMlx1ODkyOVx1ODkyM1x1ODkyZlx1ODkyY1x1ODkxZlx1ODlmMVx1OGFlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFl'@;
put 'Mlx1OGFmMlx1OGFmNFx1OGFmNVx1OGFkZFx1OGIxNFx1OGFlNFx1OGFkZlx1OGFmMFx1OGFjOFx1OGFkZVx1OGFlMVx1OGFlOFx1OGFmZlx1OGFlZlx1OGFmYlx1OGM5MVx1OGM5Mlx1OGM5MFx1OGNmNVx1OGNlZVx1OGNmMVx1OGNmMFx1OGNmM1x1OGQ2Y1x1OGQ2ZVx1OGRhNVx1OGRhN1x1'@;
put 'OGUzM1x1OGUzZVx1OGUzOFx1OGU0MFx1OGU0NVx1OGUzNlx1OGUzY1x1OGUzZFx1OGU0MVx1OGUzMFx1OGUzZlx1OGViZFx1OGYzNlx1OGYyZVx1OGYzNVx1OGYzMlx1OGYzOVx1OGYzN1x1OGYzNFx1OTA3Nlx1OTA3OVx1OTA3Ylx1OTA4Nlx1OTBmYVx1OTEzM1x1OTEzNVx1OTEzNlx1OTE5'@;
put 'M1x1OTE5MFx1OTE5MVx1OTE4ZFx1OTE4Zlx1OTMyN1x1OTMxZVx1OTMwOFx1OTMxZlx1OTMwNlx1OTMwZlx1OTM3YVx1OTMzOFx1OTMzY1x1OTMxYlx1OTMyM1x1OTMxMlx1OTMwMVx1OTM0Nlx1OTMyZFx1OTMwZVx1OTMwZFx1OTJjYlx1OTMxZFx1OTJmYVx1OTMyNVx1OTMxM1x1OTJmOVx1'@;
put 'OTJmN1x1OTMzNFx1OTMwMlx1OTMyNFx1OTJmZlx1OTMyOVx1OTMzOVx1OTMzNVx1OTMyYVx1OTMxNFx1OTMwY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzNV1bZ11dPTYwMTYwK2csX1s2'@;
put 'MDE2MCtnXT15WzIzNV1bZ10pO2Zvcih5WzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTMwYlx1OTJmZVx1OTMwOVx1OTMwMFx1OTJmYlx1OTMxNlx1OTViY1x1OTVjZFx1OTViZVx1OTViOVx1OTViYVx1OTViNlx1OTViZlx1'@;
put 'OTViNVx1OTViZFx1OTZhOVx1OTZkNFx1OTcwYlx1OTcxMlx1OTcxMFx1OTc5OVx1OTc5N1x1OTc5NFx1OTdmMFx1OTdmOFx1OTgzNVx1OTgyZlx1OTgzMlx1OTkyNFx1OTkxZlx1OTkyN1x1OTkyOVx1OTk5ZVx1OTllZVx1OTllY1x1OTllNVx1OTllNFx1OTlmMFx1OTllM1x1OTllYVx1OTll'@;
put 'OVx1OTllN1x1OWFiOVx1OWFiZlx1OWFiNFx1OWFiYlx1OWFmNlx1OWFmYVx1OWFmOVx1OWFmN1x1OWIzM1x1OWI4MFx1OWI4NVx1OWI4N1x1OWI3Y1x1OWI3ZVx1OWI3Ylx1OWI4Mlx1OWI5M1x1OWI5Mlx1OWI5MFx1OWI3YVx1OWI5NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1OWI3ZFx1OWI4OFx1OWQyNVx1OWQxN1x1OWQyMFx1OWQxZVx1OWQxNFx1OWQyOVx1OWQxZFx1OWQxOFx1OWQyMlx1OWQxMFx1OWQxOVx1OWQxZlx1OWU4OFx1OWU4Nlx1OWU4N1x1OWVhZVx1OWVhZFx1OWVkNVx1OWVkNlx1OWVmYVx1OWYxMlx1OWYzZFx1NTEyNlx1NTEyNVx1'@;
put 'NTEyMlx1NTEyNFx1NTEyMFx1NTEyOVx1NTJmNFx1NTY5M1x1NTY4Y1x1NTY4ZFx1NTY4Nlx1NTY4NFx1NTY4M1x1NTY3ZVx1NTY4Mlx1NTY3Zlx1NTY4MVx1NThkNlx1NThkNFx1NThjZlx1NThkMlx1NWIyZFx1NWIyNVx1NWIzMlx1NWIyM1x1NWIyY1x1NWIyN1x1NWIyNlx1NWIyZlx1NWIy'@;
put 'ZVx1NWI3Ylx1NWJmMVx1NWJmMlx1NWRiN1x1NWU2Y1x1NWU2YVx1NWZiZVx1NWZiYlx1NjFjM1x1NjFiNVx1NjFiY1x1NjFlN1x1NjFlMFx1NjFlNVx1NjFlNFx1NjFlOFx1NjFkZVx1NjRlZlx1NjRlOVx1NjRlM1x1NjRlYlx1NjRlNFx1NjRlOFx1NjU4MVx1NjU4MFx1NjViNlx1NjVkYVx1'@;
put 'NjZkMlx1NmE4ZFx1NmE5Nlx1NmE4MVx1NmFhNVx1NmE4OVx1NmE5Zlx1NmE5Ylx1NmFhMVx1NmE5ZVx1NmE4N1x1NmE5M1x1NmE4ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzNl1bZ11d'@;
put 'PTYwNDE2K2csX1s2MDQxNitnXT15WzIzNl1bZ10pO2Zvcih5WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1'@;
put 'NmI1Ylx1NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZlNlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5'@;
put 'N1x1NzRiMlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1'@;
put 'N2FjMVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2MwMlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0'@;
put 'OFx1N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1'@;
put 'ODI1Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3Ylx1ODVhNFx1ODU5YVx1ODU5ZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM3XVtnXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'SVt5WzIzN11bZ11dPTYwNjcyK2csX1s2MDY3MitnXT15WzIzN11bZ10pO2Zvcih5WzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU3N1x1ODU3Y1x1ODU4OVx1ODVhMVx1ODU3YVx1ODU3OFx1ODU1N1x1ODU4ZVx1ODU5Nlx1'@;
put 'ODU4Nlx1ODU4ZFx1ODU5OVx1ODU5ZFx1ODU4MVx1ODVhMlx1ODU4Mlx1ODU4OFx1ODU4NVx1ODU3OVx1ODU3Nlx1ODU5OFx1ODU5MFx1ODU5Zlx1ODY2OFx1ODdiZVx1ODdhYVx1ODdhZFx1ODdjNVx1ODdiMFx1ODdhY1x1ODdiOVx1ODdiNVx1ODdiY1x1ODdhZVx1ODdjOVx1ODdjM1x1ODdj'@;
put 'Mlx1ODdjY1x1ODdiN1x1ODdhZlx1ODdjNFx1ODdjYVx1ODdiNFx1ODdiNlx1ODdiZlx1ODdiOFx1ODdiZFx1ODdkZVx1ODdiMlx1ODkzNVx1ODkzM1x1ODkzY1x1ODkzZVx1ODk0MVx1ODk1Mlx1ODkzN1x1ODk0Mlx1ODlhZFx1ODlhZlx1ODlhZVx1ODlmMlx1ODlmM1x1OGIxZVx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGIxOFx1OGIxNlx1OGIxMVx1OGIwNVx1OGIwYlx1OGIyMlx1OGIwZlx1OGIxMlx1OGIxNVx1OGIwN1x1OGIwZFx1OGIwOFx1OGIwNlx1OGIxY1x1OGIxM1x1OGIxYVx1OGM0Zlx1OGM3MFx1OGM3Mlx1OGM3MVx1OGM2Zlx1OGM5NVx1'@;
put 'OGM5NFx1OGNmOVx1OGQ2Zlx1OGU0ZVx1OGU0ZFx1OGU1M1x1OGU1MFx1OGU0Y1x1OGU0N1x1OGY0M1x1OGY0MFx1OTA4NVx1OTA3ZVx1OTEzOFx1OTE5YVx1OTFhMlx1OTE5Ylx1OTE5OVx1OTE5Zlx1OTFhMVx1OTE5ZFx1OTFhMFx1OTNhMVx1OTM4M1x1OTNhZlx1OTM2NFx1OTM1Nlx1OTM0'@;
put 'N1x1OTM3Y1x1OTM1OFx1OTM1Y1x1OTM3Nlx1OTM0OVx1OTM1MFx1OTM1MVx1OTM2MFx1OTM2ZFx1OTM4Zlx1OTM0Y1x1OTM2YVx1OTM3OVx1OTM1N1x1OTM1NVx1OTM1Mlx1OTM0Zlx1OTM3MVx1OTM3N1x1OTM3Ylx1OTM2MVx1OTM1ZVx1OTM2M1x1OTM2N1x1OTM4MFx1OTM0ZVx1OTM1OVx1'@;
put 'OTVjN1x1OTVjMFx1OTVjOVx1OTVjM1x1OTVjNVx1OTViN1x1OTZhZVx1OTZiMFx1OTZhY1x1OTcyMFx1OTcxZlx1OTcxOFx1OTcxZFx1OTcxOVx1OTc5YVx1OTdhMVx1OTc5Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM4XVtnXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoSVt5WzIzOF1bZ11dPTYwOTI4K2csX1s2MDkyOCtnXT15WzIzOF1bZ10pO2Zvcih5WzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5ZFx1OTdkNVx1OTdkNFx1OTdmMVx1OTg0MVx1OTg0NFx1'@;
put 'OTg0YVx1OTg0OVx1OTg0NVx1OTg0M1x1OTkyNVx1OTkyYlx1OTkyY1x1OTkyYVx1OTkzM1x1OTkzMlx1OTkyZlx1OTkyZFx1OTkzMVx1OTkzMFx1OTk5OFx1OTlhM1x1OTlhMVx1OWEwMlx1OTlmYVx1OTlmNFx1OTlmN1x1OTlmOVx1OTlmOFx1OTlmNlx1OTlmYlx1OTlmZFx1OTlmZVx1OTlm'@;
put 'Y1x1OWEwM1x1OWFiZVx1OWFmZVx1OWFmZFx1OWIwMVx1OWFmY1x1OWI0OFx1OWI5YVx1OWJhOFx1OWI5ZVx1OWI5Ylx1OWJhNlx1OWJhMVx1OWJhNVx1OWJhNFx1OWI4Nlx1OWJhMlx1OWJhMFx1OWJhZlx1OWQzM1x1OWQ0MVx1OWQ2N1x1OWQzNlx1OWQyZVx1OWQyZlx1OWQzMVx1OWQzOFx1'@;
put 'OWQzMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0NVx1OWQ0Mlx1OWQ0M1x1OWQzZVx1OWQzN1x1OWQ0MFx1OWQzZFx1N2ZmNVx1OWQyZFx1OWU4YVx1OWU4OVx1OWU4ZFx1OWViMFx1OWVjOFx1OWVkYVx1OWVmYlx1OWVmZlx1OWYyNFx1OWYyM1x1OWYyMlx1'@;
put 'OWY1NFx1OWZhMFx1NTEzMVx1NTEyZFx1NTEyZVx1NTY5OFx1NTY5Y1x1NTY5N1x1NTY5YVx1NTY5ZFx1NTY5OVx1NTk3MFx1NWIzY1x1NWM2OVx1NWM2YVx1NWRjMFx1NWU2ZFx1NWU2ZVx1NjFkOFx1NjFkZlx1NjFlZFx1NjFlZVx1NjFmMVx1NjFlYVx1NjFmMFx1NjFlYlx1NjFkNlx1NjFl'@;
put 'OVx1NjRmZlx1NjUwNFx1NjRmZFx1NjRmOFx1NjUwMVx1NjUwM1x1NjRmY1x1NjU5NFx1NjVkYlx1NjZkYVx1NjZkYlx1NjZkOFx1NmFjNVx1NmFiOVx1NmFiZFx1NmFlMVx1NmFjNlx1NmFiYVx1NmFiNlx1NmFiN1x1NmFjN1x1NmFiNFx1NmFhZFx1NmI1ZVx1NmJjOVx1NmMwYlx1NzAwN1x1'@;
put 'NzAwY1x1NzAwZFx1NzAwMVx1NzAwNVx1NzAxNFx1NzAwZVx1NmZmZlx1NzAwMFx1NmZmYlx1NzAyNlx1NmZmY1x1NmZmN1x1NzAwYVx1NzIwMVx1NzFmZlx1NzFmOVx1NzIwM1x1NzFmZFx1NzM3Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzOV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlb'@;
put 'MjM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzOV1bZ11dPTYxMTg0K2csX1s2MTE4NCtnXT15WzIzOV1bZ10pO2Zvcih5WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1'@;
put 'NzRiNlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1'@;
put 'Zlx1N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2MyNVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1'@;
put 'ODA3NVx1ODFkMVx1ODFkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkMFx1ODI1Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1'@;
put 'ODViMVx1ODViNlx1ODVkMlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgw'@;
put 'MVx1ODdmNFx1ODdlOFx1ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1'@;
put 'OGIyNFx1OGIzYlx1OGIzZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0MF0ubGVuZ3RoOysr'@;
put 'Zyk2NTUzMyE9PXlbMjQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0MF1bZ11dPTYxNDQwK2csX1s2MTQ0MCtnXT15WzI0MF1bZ10pO2Zvcih5WzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU1Ylx1OGU1YVx1OGU2MVx1'@;
put 'OGU1ZFx1OGU2OVx1OGU1NFx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0Ylx1OTEyOFx1OTEzYVx1OTEzYlx1OTEzZVx1OTFhOFx1OTFhNVx1OTFhN1x1OTFhZlx1OTFhYVx1OTNiNVx1OTM4Y1x1OTM5Mlx1OTNiN1x1OTM5Ylx1OTM5ZFx1OTM4OVx1OTNhN1x1OTM4ZVx1OTNhYVx1OTM5ZVx1OTNh'@;
put 'Nlx1OTM5NVx1OTM4OFx1OTM5OVx1OTM5Zlx1OTM4ZFx1OTNiMVx1OTM5MVx1OTNiMlx1OTNhNFx1OTNhOFx1OTNiNFx1OTNhM1x1OTNhNVx1OTVkMlx1OTVkM1x1OTVkMVx1OTZiM1x1OTZkN1x1OTZkYVx1NWRjMlx1OTZkZlx1OTZkOFx1OTZkZFx1OTcyM1x1OTcyMlx1OTcyNVx1OTdhY1x1'@;
put 'OTdhZVx1OTdhOFx1OTdhYlx1OTdhNFx1OTdhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdhMlx1OTdhNVx1OTdkN1x1OTdkOVx1OTdkNlx1OTdkOFx1OTdmYVx1OTg1MFx1OTg1MVx1OTg1Mlx1OThiOFx1OTk0MVx1OTkzY1x1OTkzYVx1OWEwZlx1OWEwYlx1'@;
put 'OWEwOVx1OWEwZFx1OWEwNFx1OWExMVx1OWEwYVx1OWEwNVx1OWEwN1x1OWEwNlx1OWFjMFx1OWFkY1x1OWIwOFx1OWIwNFx1OWIwNVx1OWIyOVx1OWIzNVx1OWI0YVx1OWI0Y1x1OWI0Ylx1OWJjN1x1OWJjNlx1OWJjM1x1OWJiZlx1OWJjMVx1OWJiNVx1OWJiOFx1OWJkM1x1OWJiNlx1OWJj'@;
put 'NFx1OWJiOVx1OWJiZFx1OWQ1Y1x1OWQ1M1x1OWQ0Zlx1OWQ0YVx1OWQ1Ylx1OWQ0Ylx1OWQ1OVx1OWQ1Nlx1OWQ0Y1x1OWQ1N1x1OWQ1Mlx1OWQ1NFx1OWQ1Zlx1OWQ1OFx1OWQ1YVx1OWU4ZVx1OWU4Y1x1OWVkZlx1OWYwMVx1OWYwMFx1OWYxNlx1OWYyNVx1OWYyYlx1OWYyYVx1OWYyOVx1'@;
put 'OWYyOFx1OWY0Y1x1OWY1NVx1NTEzNFx1NTEzNVx1NTI5Nlx1NTJmN1x1NTNiNFx1NTZhYlx1NTZhZFx1NTZhNlx1NTZhN1x1NTZhYVx1NTZhY1x1NThkYVx1NThkZFx1NThkYlx1NTkxMlx1NWIzZFx1NWIzZVx1NWIzZlx1NWRjM1x1NWU3MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0'@;
put 'MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0MV1bZ11dPTYxNjk2K2csX1s2MTY5NitnXT15WzI0MV1bZ10pO2Zvcih5WzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWZiZlx1'@;
put 'NjFmYlx1NjUwN1x1NjUxMFx1NjUwZFx1NjUwOVx1NjUwY1x1NjUwZVx1NjU4NFx1NjVkZVx1NjVkZFx1NjZkZVx1NmFlN1x1NmFlMFx1NmFjY1x1NmFkMVx1NmFkOVx1NmFjYlx1NmFkZlx1NmFkY1x1NmFkMFx1NmFlYlx1NmFjZlx1NmFjZFx1NmFkZVx1NmI2MFx1NmJiMFx1NmMwY1x1NzAx'@;
put 'OVx1NzAyN1x1NzAyMFx1NzAxNlx1NzAyYlx1NzAyMVx1NzAyMlx1NzAyM1x1NzAyOVx1NzAxN1x1NzAyNFx1NzAxY1x1NzAyYVx1NzIwY1x1NzIwYVx1NzIwN1x1NzIwMlx1NzIwNVx1NzJhNVx1NzJhNlx1NzJhNFx1NzJhM1x1NzJhMVx1NzRjYlx1NzRjNVx1NzRiN1x1NzRjM1x1NzUxNlx1'@;
put 'NzY2MFx1NzdjOVx1NzdjYVx1NzdjNFx1NzdmMVx1NzkxZFx1NzkxYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkyMVx1NzkxY1x1NzkxN1x1NzkxZVx1NzliMFx1N2E2N1x1N2E2OFx1N2MzM1x1N2MzY1x1N2MzOVx1N2MyY1x1N2MzYlx1N2NlY1x1N2NlYVx1'@;
put 'N2U3Nlx1N2U3NVx1N2U3OFx1N2U3MFx1N2U3N1x1N2U2Zlx1N2U3YVx1N2U3Mlx1N2U3NFx1N2U2OFx1N2Y0Ylx1N2Y0YVx1N2Y4M1x1N2Y4Nlx1N2ZiN1x1N2ZmZFx1N2ZmZVx1ODA3OFx1ODFkN1x1ODFkNVx1ODI2NFx1ODI2MVx1ODI2M1x1ODVlYlx1ODVmMVx1ODVlZFx1ODVkOVx1ODVl'@;
put 'MVx1ODVlOFx1ODVkYVx1ODVkN1x1ODVlY1x1ODVmMlx1ODVmOFx1ODVkOFx1ODVkZlx1ODVlM1x1ODVkY1x1ODVkMVx1ODVmMFx1ODVlNlx1ODVlZlx1ODVkZVx1ODVlMlx1ODgwMFx1ODdmYVx1ODgwM1x1ODdmNlx1ODdmN1x1ODgwOVx1ODgwY1x1ODgwYlx1ODgwNlx1ODdmY1x1ODgwOFx1'@;
put 'ODdmZlx1ODgwYVx1ODgwMlx1ODk2Mlx1ODk1YVx1ODk1Ylx1ODk1N1x1ODk2MVx1ODk1Y1x1ODk1OFx1ODk1ZFx1ODk1OVx1ODk4OFx1ODliN1x1ODliNlx1ODlmNlx1OGI1MFx1OGI0OFx1OGI0YVx1OGI0MFx1OGI1M1x1OGI1Nlx1OGI1NFx1OGI0Ylx1OGI1NVx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LGc9MDtnIT15WzI0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0Ml1bZ11dPTYxOTUyK2csX1s2MTk1MitnXT15WzI0Ml1bZ10pO2Zvcih5WzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1OGI1MVx1OGI0Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQwN1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1'@;
put 'M1x1OGZiNFx1OTE0MFx1OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1'@;
put 'OTU3ZFx1OTVkYVx1OTVkYlx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1'@;
put 'OThiYlx1OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWExZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJl'@;
put 'Ylx1OWJlMFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1'@;
put 'OWQ2Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMlx1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0M11bZ11dPTYyMjA4K2csX1s2MjIwOCtnXT15WzI0M11bZ10pO2Zvcih5WzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NTZiNVx1NTZiM1x1NThlM1x1NWI0NVx1NWRjNlx1NWRjN1x1NWVlZVx1NWVlZlx1NWZjMFx1NWZjMVx1NjFmOVx1NjUxN1x1NjUxNlx1NjUxNVx1NjUxM1x1NjVkZlx1NjZlOFx1NjZlM1x1NjZlNFx1NmFmM1x1NmFmMFx1NmFlYVx1NmFlOFx1NmFmOVx1NmFm'@;
put 'MVx1NmFlZVx1NmFlZlx1NzAzY1x1NzAzNVx1NzAyZlx1NzAzN1x1NzAzNFx1NzAzMVx1NzA0Mlx1NzAzOFx1NzAzZlx1NzAzYVx1NzAzOVx1NzA0MFx1NzAzYlx1NzAzM1x1NzA0MVx1NzIxM1x1NzIxNFx1NzJhOFx1NzM3ZFx1NzM3Y1x1NzRiYVx1NzZhYlx1NzZhYVx1NzZiZVx1NzZlZFx1'@;
put 'NzdjY1x1NzdjZVx1NzdjZlx1NzdjZFx1NzdmMlx1NzkyNVx1NzkyM1x1NzkyN1x1NzkyOFx1NzkyNFx1NzkyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzliMlx1N2E2ZVx1N2E2Y1x1N2E2ZFx1N2FmN1x1N2M0OVx1N2M0OFx1N2M0YVx1N2M0N1x1N2M0NVx1'@;
put 'N2NlZVx1N2U3Ylx1N2U3ZVx1N2U4MVx1N2U4MFx1N2ZiYVx1N2ZmZlx1ODA3OVx1ODFkYlx1ODFkOVx1ODIwYlx1ODI2OFx1ODI2OVx1ODYyMlx1ODVmZlx1ODYwMVx1ODVmZVx1ODYxYlx1ODYwMFx1ODVmNlx1ODYwNFx1ODYwOVx1ODYwNVx1ODYwY1x1ODVmZFx1ODgxOVx1ODgxMFx1ODgx'@;
put 'MVx1ODgxN1x1ODgxM1x1ODgxNlx1ODk2M1x1ODk2Nlx1ODliOVx1ODlmN1x1OGI2MFx1OGI2YVx1OGI1ZFx1OGI2OFx1OGI2M1x1OGI2NVx1OGI2N1x1OGI2ZFx1OGRhZVx1OGU4Nlx1OGU4OFx1OGU4NFx1OGY1OVx1OGY1Nlx1OGY1N1x1OGY1NVx1OGY1OFx1OGY1YVx1OTA4ZFx1OTE0M1x1'@;
put 'OTE0MVx1OTFiN1x1OTFiNVx1OTFiMlx1OTFiM1x1OTQwYlx1OTQxM1x1OTNmYlx1OTQyMFx1OTQwZlx1OTQxNFx1OTNmZVx1OTQxNVx1OTQxMFx1OTQyOFx1OTQxOVx1OTQwZFx1OTNmNVx1OTQwMFx1OTNmN1x1OTQwN1x1OTQwZVx1OTQxNlx1OTQxMlx1OTNmYVx1OTQwOVx1OTNmOFx1OTQw'@;
put 'YVx1OTNmZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0NF1bZ11dPTYyNDY0K2csX1s2MjQ2NCtnXT15WzI0NF1bZ10pO2Zvcih5WzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNmY1x1OTQwY1x1OTNmNlx1OTQxMVx1OTQwNlx1OTVkZVx1OTVlMFx1OTVkZlx1OTcyZVx1OTcyZlx1OTdiOVx1OTdiYlx1OTdmZFx1OTdmZVx1OTg2MFx1OTg2Mlx1OTg2M1x1OTg1Zlx1OThjMVx1OThjMlx1OTk1MFx1OTk0ZVx1OTk1'@;
put 'OVx1OTk0Y1x1OTk0Ylx1OTk1M1x1OWEzMlx1OWEzNFx1OWEzMVx1OWEyY1x1OWEyYVx1OWEzNlx1OWEyOVx1OWEyZVx1OWEzOFx1OWEyZFx1OWFjN1x1OWFjYVx1OWFjNlx1OWIxMFx1OWIxMlx1OWIxMVx1OWMwYlx1OWMwOFx1OWJmN1x1OWMwNVx1OWMxMlx1OWJmOFx1OWM0MFx1OWMwN1x1'@;
put 'OWMwZVx1OWMwNlx1OWMxN1x1OWMxNFx1OWMwOVx1OWQ5Zlx1OWQ5OVx1OWRhNFx1OWQ5ZFx1OWQ5Mlx1OWQ5OFx1OWQ5MFx1OWQ5Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhMFx1OWQ5NFx1OWQ5Y1x1OWRhYVx1OWQ5N1x1OWRhMVx1OWQ5YVx1OWRhMlx1'@;
put 'OWRhOFx1OWQ5ZVx1OWRhM1x1OWRiZlx1OWRhOVx1OWQ5Nlx1OWRhNlx1OWRhN1x1OWU5OVx1OWU5Ylx1OWU5YVx1OWVlNVx1OWVlNFx1OWVlN1x1OWVlNlx1OWYzMFx1OWYyZVx1OWY1Ylx1OWY2MFx1OWY1ZVx1OWY1ZFx1OWY1OVx1OWY5MVx1NTEzYVx1NTEzOVx1NTI5OFx1NTI5N1x1NTZj'@;
put 'M1x1NTZiZFx1NTZiZVx1NWI0OFx1NWI0N1x1NWRjYlx1NWRjZlx1NWVmMVx1NjFmZFx1NjUxYlx1NmIwMlx1NmFmY1x1NmIwM1x1NmFmOFx1NmIwMFx1NzA0M1x1NzA0NFx1NzA0YVx1NzA0OFx1NzA0OVx1NzA0NVx1NzA0Nlx1NzIxZFx1NzIxYVx1NzIxOVx1NzM3ZVx1NzUxN1x1NzY2YVx1'@;
put 'NzdkMFx1NzkyZFx1NzkzMVx1NzkyZlx1N2M1NFx1N2M1M1x1N2NmMlx1N2U4YVx1N2U4N1x1N2U4OFx1N2U4Ylx1N2U4Nlx1N2U4ZFx1N2Y0ZFx1N2ZiYlx1ODAzMFx1ODFkZFx1ODYxOFx1ODYyYVx1ODYyNlx1ODYxZlx1ODYyM1x1ODYxY1x1ODYxOVx1ODYyN1x1ODYyZVx1ODYyMVx1ODYy'@;
put 'MFx1ODYyOVx1ODYxZVx1ODYyNVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0NV1bZ11dPTYyNzIwK2csX1s2MjcyMCtnXT15WzI0NV1bZ10pO2Zvcih5WzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyOVx1ODgxZFx1ODgxYlx1ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRh'@;
put 'Zlx1OGU4ZVx1OGU4Y1x1OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1OTFiOVx1OTQzZlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1'@;
put 'OTdiZlx1OTdlMVx1OTg2NFx1OThjOVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEzOVx1OWEzZFx1OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1'@;
put 'OWIzYVx1OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1OWMyMVx1OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRj'@;
put 'OFx1OWRiMVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVlZVx1OWVlZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1'@;
put 'NWRkMVx1NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3'@;
put 'MVx1N2M1N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0Nl1bZ11dPTYyOTc2K2csX1s2Mjk3NitnXT15WzI0Nl1bZ10pO2Zvcih5WzI0N109Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NmNFx1N2NmMVx1N2U5MVx1N2Y0Zlx1N2Y4N1x1ODFkZVx1ODI2Ylx1ODYzNFx1ODYzNVx1ODYzM1x1ODYyY1x1ODYzMlx1ODYzNlx1ODgyY1x1ODgyOFx1ODgyNlx1ODgyYVx1ODgyNVx1ODk3'@;
put 'MVx1ODliZlx1ODliZVx1ODlmYlx1OGI3ZVx1OGI4NFx1OGI4Mlx1OGI4Nlx1OGI4NVx1OGI3Zlx1OGQxNVx1OGU5NVx1OGU5NFx1OGU5YVx1OGU5Mlx1OGU5MFx1OGU5Nlx1OGU5N1x1OGY2MFx1OGY2Mlx1OTE0N1x1OTQ0Y1x1OTQ1MFx1OTQ0YVx1OTQ0Ylx1OTQ0Zlx1OTQ0N1x1OTQ0NVx1'@;
put 'OTQ0OFx1OTQ0OVx1OTQ0Nlx1OTczZlx1OTdlM1x1OTg2YVx1OTg2OVx1OThjYlx1OTk1NFx1OTk1Ylx1OWE0ZVx1OWE1M1x1OWE1NFx1OWE0Y1x1OWE0Zlx1OWE0OFx1OWE0YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE0OVx1OWE1Mlx1OWE1MFx1OWFkMFx1'@;
put 'OWIxOVx1OWIyYlx1OWIzYlx1OWI1Nlx1OWI1NVx1OWM0Nlx1OWM0OFx1OWMzZlx1OWM0NFx1OWMzOVx1OWMzM1x1OWM0MVx1OWMzY1x1OWMzN1x1OWMzNFx1OWMzMlx1OWMzZFx1OWMzNlx1OWRkYlx1OWRkMlx1OWRkZVx1OWRkYVx1OWRjYlx1OWRkMFx1OWRkY1x1OWRkMVx1OWRkZlx1OWRl'@;
put 'OVx1OWRkOVx1OWRkOFx1OWRkNlx1OWRmNVx1OWRkNVx1OWRkZFx1OWViNlx1OWVmMFx1OWYzNVx1OWYzM1x1OWYzMlx1OWY0Mlx1OWY2Ylx1OWY5NVx1OWZhMlx1NTEzZFx1NTI5OVx1NThlOFx1NThlN1x1NTk3Mlx1NWI0ZFx1NWRkOFx1ODgyZlx1NWY0Zlx1NjIwMVx1NjIwM1x1NjIwNFx1'@;
put 'NjUyOVx1NjUyNVx1NjU5Nlx1NjZlYlx1NmIxMVx1NmIxMlx1NmIwZlx1NmJjYVx1NzA1Ylx1NzA1YVx1NzIyMlx1NzM4Mlx1NzM4MVx1NzM4M1x1NzY3MFx1NzdkNFx1N2M2N1x1N2M2Nlx1N2U5NVx1ODI2Y1x1ODYzYVx1ODY0MFx1ODYzOVx1ODYzY1x1ODYzMVx1ODYzYlx1ODYzZVx1ODgz'@;
put 'MFx1ODgzMlx1ODgyZVx1ODgzM1x1ODk3Nlx1ODk3NFx1ODk3M1x1ODlmZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0N10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0N11bZ11dPTYzMjMyK2csX1s2MzIzMitnXT15WzI0N11bZ10pO2Zv'@;
put 'cih5WzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI4Y1x1OGI4ZVx1OGI4Ylx1OGI4OFx1OGM0NVx1OGQxOVx1OGU5OFx1OGY2NFx1OGY2M1x1OTFiY1x1OTQ2Mlx1OTQ1NVx1OTQ1ZFx1OTQ1N1x1OTQ1ZVx1OTdjNFx1OTdj'@;
put 'NVx1OTgwMFx1OWE1Nlx1OWE1OVx1OWIxZVx1OWIxZlx1OWIyMFx1OWM1Mlx1OWM1OFx1OWM1MFx1OWM0YVx1OWM0ZFx1OWM0Ylx1OWM1NVx1OWM1OVx1OWM0Y1x1OWM0ZVx1OWRmYlx1OWRmN1x1OWRlZlx1OWRlM1x1OWRlYlx1OWRmOFx1OWRlNFx1OWRmNlx1OWRlMVx1OWRlZVx1OWRlNlx1'@;
put 'OWRmMlx1OWRmMFx1OWRlMlx1OWRlY1x1OWRmNFx1OWRmM1x1OWRlOFx1OWRlZFx1OWVjMlx1OWVkMFx1OWVmMlx1OWVmM1x1OWYwNlx1OWYxY1x1OWYzOFx1OWYzN1x1OWYzNlx1OWY0M1x1OWY0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWY3MVx1OWY3MFx1'@;
put 'OWY2ZVx1OWY2Zlx1NTZkM1x1NTZjZFx1NWI0ZVx1NWM2ZFx1NjUyZFx1NjZlZFx1NjZlZVx1NmIxM1x1NzA1Zlx1NzA2MVx1NzA1ZFx1NzA2MFx1NzIyM1x1NzRkYlx1NzRlNVx1NzdkNVx1NzkzOFx1NzliN1x1NzliNlx1N2M2YVx1N2U5N1x1N2Y4OVx1ODI2ZFx1ODY0M1x1ODgzOFx1ODgz'@;
put 'N1x1ODgzNVx1ODg0Ylx1OGI5NFx1OGI5NVx1OGU5ZVx1OGU5Zlx1OGVhMFx1OGU5ZFx1OTFiZVx1OTFiZFx1OTFjMlx1OTQ2Ylx1OTQ2OFx1OTQ2OVx1OTZlNVx1OTc0Nlx1OTc0M1x1OTc0N1x1OTdjN1x1OTdlNVx1OWE1ZVx1OWFkNVx1OWI1OVx1OWM2M1x1OWM2N1x1OWM2Nlx1OWM2Mlx1'@;
put 'OWM1ZVx1OWM2MFx1OWUwMlx1OWRmZVx1OWUwN1x1OWUwM1x1OWUwNlx1OWUwNVx1OWUwMFx1OWUwMVx1OWUwOVx1OWRmZlx1OWRmZFx1OWUwNFx1OWVhMFx1OWYxZVx1OWY0Nlx1OWY3NFx1OWY3NVx1OWY3Nlx1NTZkNFx1NjUyZVx1NjViOFx1NmIxOFx1NmIxOVx1NmIxN1x1NmIxYVx1NzA2'@;
put 'Mlx1NzIyNlx1NzJhYVx1NzdkOFx1NzdkOVx1NzkzOVx1N2M2OVx1N2M2Ylx1N2NmNlx1N2U5YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0OF1bZ11dPTYzNDg4K2csX1s2MzQ4OCtnXT15'@;
put 'WzI0OF1bZ10pO2Zvcih5WzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5'@;
put 'OVx1OGVhNVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1'@;
put 'OWY3OVx1NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'OWZhNFx1NzA2OFx1NzA2NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIy'@;
put 'N1x1ODY0Y1x1OGVhOFx1OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1'@;
put 'ODhjZlx1NThiYlx1NjA1Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2'@;
put 'Ylx1MjU2Mlx1MjU1OVx1MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1MjU2Zlx1MjU5M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0OV1bZ11dPTYzNzQ0K2cs'@;
put 'X1s2Mzc0NCtnXT15WzI0OV1bZ10pO3JldHVybntlbmM6SSxkZWM6X319KCkscVsxMjUwXT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5'@;
put 'XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIw'@;
put 'MjBcdTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAxNzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUw'@;
put 'MmQ4XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRceGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4'@;
put 'YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUw'@;
put 'MTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5IixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1'@;
put 'MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVsxMjUxXT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEw'@;
put 'XHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0'@;
put 'MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2Fc'@;
put 'dTA0NWFcdTA0NWNcdTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0'@;
put 'NThcdTA0MDVcdTA0NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0Mjdc'@;
put 'dTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0'@;
put 'NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0'@;
put 'dXJue2VuYzp5LGRlYzpJfX0oKSxxWzEyNTJdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYg'@;
put 'IVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2'@;
put 'MFx1MjAzOVx1MDE1Mlx1ZmZmZFx1MDE3ZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x1ZmZmZFx1MDE3ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4'@;
put 'YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhk'@;
put 'Mlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZi'@;
put 'XHhmY1x4ZmRceGZlXHhmZiIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbMTI1M109ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4'@;
put 'MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ'@;
put 'WltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUy'@;
put 'MDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4'@;
put 'YjVceGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVm'@;
put 'ZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2Jk'@;
put 'XHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18u'@;
put 'Y2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVsxMjU0XT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgx'@;
put 'N1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVc'@;
put 'dTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEw'@;
put 'XHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4Yzlc'@;
put 'eGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4'@;
put 'ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRl'@;
put 'YzpJfX0oKSxxWzEyNTVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSor'@;
put 'LC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBceGExXHhhMlx4YTNcdTIwYWFceGE1XHhhNlx4YTdceGE4XHhhOVx4ZDdceGFi'@;
put 'XHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGY3XHhiYlx4YmNceGJkXHhiZVx4YmZcdTA1YjBcdTA1YjFcdTA1YjJcdTA1YjNcdTA1YjRcdTA1YjVcdTA1YjZcdTA1YjdcdTA1YjhcdTA1YjlcdWZmZmRcdTA1YmJcdTA1YmNcdTA1YmRc'@;
put 'dTA1YmVcdTA1YmZcdTA1YzBcdTA1YzFcdTA1YzJcdTA1YzNcdTA1ZjBcdTA1ZjFcdTA1ZjJcdTA1ZjNcdTA1ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA1ZDBcdTA1ZDFcdTA1ZDJcdTA1ZDNcdTA1ZDRcdTA1ZDVcdTA1ZDZcdTA1ZDdcdTA1ZDhcdTA1'@;
put 'ZDlcdTA1ZGFcdTA1ZGJcdTA1ZGNcdTA1ZGRcdTA1ZGVcdTA1ZGZcdTA1ZTBcdTA1ZTFcdTA1ZTJcdTA1ZTNcdTA1ZTRcdTA1ZTVcdTA1ZTZcdTA1ZTdcdTA1ZThcdTA1ZTlcdTA1ZWFcdWZmZmRcdWZmZmRcdTIwMGVcdTIwMGZcdWZmZmQiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUz'@;
put 'MyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzEyNTZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc'@;
put 'eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBh'@;
put 'Y1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1'@;
put 'MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFc'@;
put 'dTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQw'@;
put 'XHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNc'@;
put 'dTIwMGVcdTIwMGZcdTA2ZDIiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzEyNTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFc'@;
put 'eDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldY'@;
put 'WVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFk'@;
put 'XHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhi'@;
put 'N1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3'@;
put 'XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhm'@;
put 'NVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgp'@;
put 'LHFbMTI1OF09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEy'@;
put 'MzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHUwMTUyXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRc'@;
put 'eGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAxMDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1'@;
put 'MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhm'@;
put 'YVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbMWU0XT1mdW5jdGlvbigpe2Zvcih2YXIgXz0i'@;
put 'XDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BR'@;
put 'UlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhm'@;
put 'YVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4'@;
put 'ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFc'@;
put 'dWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEk9'@;
put 'W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzEwMDA2XT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZc'@;
put 'eDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWpr'@;
put 'bG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhiOVx4YjJceGM5XHhiM1x4ZDZceGRjXHUwMzg1XHhlMFx4ZTJceGU0XHUwMzg0XHhhOFx4ZTdceGU5XHhlOFx4ZWFceGViXHhhM1x1MjEyMlx4ZWVceGVmXHUyMDIyXHhiZFx1MjAzMFx4ZjRceGY2XHhhNlx4YWRceGY5XHhmYlx4ZmNcdTIw'@;
put 'MjBcdTAzOTNcdTAzOTRcdTAzOThcdTAzOWJcdTAzOWVcdTAzYTBceGRmXHhhZVx4YTlcdTAzYTNcdTAzYWFceGE3XHUyMjYwXHhiMFx1MDM4N1x1MDM5MVx4YjFcdTIyNjRcdTIyNjVceGE1XHUwMzkyXHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk5XHUwMzlhXHUwMzljXHUwM2E2XHUwM2FiXHUw'@;
put 'M2E4XHUwM2E5XHUwM2FjXHUwMzlkXHhhY1x1MDM5Zlx1MDNhMVx1MjI0OFx1MDNhNFx4YWJceGJiXHUyMDI2XHhhMFx1MDNhNVx1MDNhN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTAzODlcdTAzOGFcdTAzOGNcdTAzOGVcdTAz'@;
put 'YWRcdTAzYWVcdTAzYWZcdTAzY2NcdTAzOGZcdTAzY2RcdTAzYjFcdTAzYjJcdTAzYzhcdTAzYjRcdTAzYjVcdTAzYzZcdTAzYjNcdTAzYjdcdTAzYjlcdTAzYmVcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmZcdTAzYzBcdTAzY2VcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYjhcdTAzYzlc'@;
put 'dTAzYzJcdTAzYzdcdTAzYzVcdTAzYjZcdTAzY2FcdTAzY2JcdTAzOTBcdTAzYjBcdWZmZmQiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxx'@;
put 'WzEwMDA3XT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIz'@;
put 'NDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRc'@;
put 'dTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx1MDQwNlx4YWVceGE5XHUyMTIyXHUwNDAy'@;
put 'XHUwNDUyXHUyMjYwXHUwNDAzXHUwNDUzXHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx1MDQ1Nlx4YjVcdTIyMDJcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MGFcdTA0NWFcdTA0NThcdTA0MDVceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJc'@;
put 'dTIwMjZceGEwXHUwNDBiXHUwNDViXHUwNDBjXHUwNDVjXHUwNDU1XHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjAxZVx1MDQwZVx1MDQ1ZVx1MDQwZlx1MDQ1Zlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Zlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1'@;
put 'MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx4YTQiLEk9W10s'@;
put 'eT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzEwMDA4XT1mdW5jdGlvbigpe3ZhciBnLF89W10sST17fSx5PVtdO2Zvcih5WzBdPSJcMFx4MDFceDAy'@;
put 'XHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpb'@;
put 'XFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4ODBcdWY4ZDhcdWY4ZDlcdWY4ZGFcdWY4ZGJcdWY4ZGNcdWY4ZGRcdWY4ZGVcdWY4ZGZcdWY4ZTBcdWY4ZTFcdWY4ZTJcdWY4ZTNcdWY4ZTRcdWY4ZTVcdWY4ZTZcdWY4ZTdcdWY4ZThcdWY4ZTlcdWY4ZWFcdWY4ZWJc'@;
put 'dWY4ZWNcdWY4ZWRcdWY4ZWVcdWY4ZWZcdWY4ZjBcdWY4ZjFcdWY4ZjJcdWY4ZjNcdWY4ZjRcdWY4ZjVcdWY4ZjZcdWY4ZjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY4ZjhcdWY4ZjlcdWY4ZmFcdWY4ZmJcdWY4ZmNcdWY4ZmRcdWY4ZmVcdWY4ZmYiLnNwbGl0KCIiKSxnPTA7ZyE9'@;
put 'eVswXS5sZW5ndGg7KytnKTY1NTMzIT09eVswXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzBdW2ddXT0wK2csX1swK2ddPXlbMF1bZ10pO2Zvcih5WzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx1MzBmYlx1MDJjOVx1MDJjN1x4YThcdTMwMDNcdTMwMDVcdTIwMTVcdWZmNWVcdWZmZmRcdTIwMjZcdTIwMThcdTIwMTlcdTIwMWNcdTIw'@;
put 'MWRcdTMwMTRcdTMwMTVcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIxXHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVc'@;
put 'dTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1'@;
put 'ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIwM2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjFdLmxlbmd0aDsrK2cp'@;
put 'NjU1MzMhPT15WzE2MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjFdW2ddXT00MTIxNitnLF9bNDEyMTYrZ109eVsxNjFdW2ddKTtmb3IoeVsxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0'@;
put 'ODhcdTI0ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2Jc'@;
put 'dTI0N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJcdTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMy'@;
put 'MjNcdTMyMjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjJd'@;
put 'Lmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjJdW2ddXT00MTQ3MitnLF9bNDE0NzIrZ109eVsxNjJdW2ddKTtmb3IoeVsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZm'@;
put 'MGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFc'@;
put 'dWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZm'@;
put 'NDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxn'@;
put 'PTA7ZyE9eVsxNjNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjNdW2ddXT00MTcyOCtnLF9bNDE3MjgrZ109eVsxNjNdW2ddKTtmb3IoeVsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMw'@;
put 'NGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhc'@;
put 'dTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMw'@;
put 'ODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjRdW2ddXT00MTk4NCtnLF9bNDE5ODQrZ109eVsxNjRdW2ddKTtmb3IoeVsxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMw'@;
put 'YWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZc'@;
put 'dTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMw'@;
put 'ZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjVdW2ddXT00MjI0MCtnLF9bNDIyNDArZ109eVsxNjVdW2ddKTtmb3IoeVsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAz'@;
put 'OTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRc'@;
put 'dTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjZdW2ddXT00MjQ5NitnLF9bNDI0OTYrZ109eVsxNjZdW2ddKTtmb3IoeVsxNjddPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0'@;
put 'MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0'@;
put 'M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjddW2ddXT00Mjc1MitnLF9bNDI3NTIrZ109eVsxNjddW2ddKTtmb3IoeVsxNjhdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4'@;
put 'ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMx'@;
put 'MjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjhdW2ddXT00MzAwOCtnLF9bNDMwMDgrZ109eVsxNjhdW2ddKTtmb3IoeVsxNjldPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1MDJcdTI1'@;
put 'MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRcdTI1MWVc'@;
put 'dTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1MzlcdTI1'@;
put 'M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjldW2ddXT00MzI2NCtnLF9bNDMyNjQrZ109eVsxNjldW2ddKTtmb3IoeVsxNzZdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NGFcdTk2M2ZcdTU3YzNcdTYzMjhcdTU0'@;
put 'Y2VcdTU1MDlcdTU0YzBcdTc2OTFcdTc2NGNcdTg1M2NcdTc3ZWVcdTgyN2VcdTc4OGRcdTcyMzFcdTk2OThcdTk3OGRcdTZjMjhcdTViODlcdTRmZmFcdTYzMDlcdTY2OTdcdTVjYjhcdTgwZmFcdTY4NDhcdTgwYWVcdTY2MDJcdTc2Y2VcdTUxZjlcdTY1NTZcdTcxYWNcdTdmZjFcdTg4ODRc'@;
put 'dTUwYjJcdTU5NjVcdTYxY2FcdTZmYjNcdTgyYWRcdTYzNGNcdTYyNTJcdTUzZWRcdTU0MjdcdTdiMDZcdTUxNmJcdTc1YTRcdTVkZjRcdTYyZDRcdThkY2JcdTk3NzZcdTYyOGFcdTgwMTlcdTU3NWRcdTk3MzhcdTdmNjJcdTcyMzhcdTc2N2RcdTY3Y2ZcdTc2N2VcdTY0NDZcdTRmNzBcdThk'@;
put 'MjVcdTYyZGNcdTdhMTdcdTY1OTFcdTczZWRcdTY0MmNcdTYyNzNcdTgyMmNcdTk4ODFcdTY3N2ZcdTcyNDhcdTYyNmVcdTYyY2NcdTRmMzRcdTc0ZTNcdTUzNGFcdTUyOWVcdTdlY2FcdTkwYTZcdTVlMmVcdTY4ODZcdTY5OWNcdTgxODBcdTdlZDFcdTY4ZDJcdTc4YzVcdTg2OGNcdTk1NTFc'@;
put 'dTUwOGRcdThjMjRcdTgyZGVcdTgwZGVcdTUzMDVcdTg5MTJcdTUyNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzZdW2ddXT00NTA1NitnLF9bNDUwNTYrZ109eVsxNzZdW2ddKTtmb3Io'@;
put 'eVsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTk2ZjlcdTRm'@;
put 'ZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNc'@;
put 'dTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4'@;
put 'YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThc'@;
put 'dTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzddW2ddXT00NTMxMitnLF9bNDUzMTIrZ109eVsx'@;
put 'NzddW2ddKTtmb3IoeVsxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1'@;
put 'YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRmMmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNc'@;
put 'dTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdcdTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1'@;
put 'Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYzZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBc'@;
put 'dTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzhdW2ddXT00NTU2OCtnLF9b'@;
put 'NDU1NjgrZ109eVsxNzhdW2ddKTtmb3IoeVsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTU3M2FcdTVjMWRcdTVlMzhcdTk1N2ZcdTUwN2ZcdTgwYTBcdTUzODJcdTY1NWVcdTc1NDVcdTU1MzFcdTUwMjFcdThkODVcdTYyODRcdTk0OWVcdTY3MWRcdTU2MzJcdTZmNmVcdTVkZTJcdTU0MzVcdTcwOTJcdThmNjZcdTYyNmZcdTY0YTRcdTYzYTNcdTVmN2JcdTZmODhc'@;
put 'dTkwZjRcdTgxZTNcdThmYjBcdTVjMThcdTY2NjhcdTVmZjFcdTZjODlcdTk2NDhcdThkODFcdTg4NmNcdTY0OTFcdTc5ZjBcdTU3Y2VcdTZhNTlcdTYyMTBcdTU0NDhcdTRlNThcdTdhMGJcdTYwZTlcdTZmODRcdThiZGFcdTYyN2ZcdTkwMWVcdTlhOGJcdTc5ZTRcdTU0MDNcdTc1ZjRcdTYz'@;
put 'MDFcdTUzMTlcdTZjNjBcdThmZGZcdTVmMWJcdTlhNzBcdTgwM2JcdTlmN2ZcdTRmODhcdTVjM2FcdThkNjRcdTdmYzVcdTY1YTVcdTcwYmRcdTUxNDVcdTUxYjJcdTg2NmJcdTVkMDdcdTViYTBcdTYyYmRcdTkxNmNcdTc1NzRcdThlMGNcdTdhMjBcdTYxMDFcdTdiNzlcdTRlYzdcdTdlZjhc'@;
put 'dTc3ODVcdTRlMTFcdTgxZWRcdTUyMWRcdTUxZmFcdTZhNzFcdTUzYThcdThlODdcdTk1MDRcdTk2Y2ZcdTZlYzFcdTk2NjRcdTY5NWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzldW2dd'@;
put 'XT00NTgyNCtnLF9bNDU4MjQrZ109eVsxNzldW2ddKTtmb3IoeVsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRc'@;
put 'dTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRl'@;
put 'MWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVc'@;
put 'dTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4MF1bZ10uY2hhckNvZGVBdCgwKSYm'@;
put 'KElbeVsxODBdW2ddXT00NjA4MCtnLF9bNDYwODArZ109eVsxODBdW2ddKTtmb3IoeVsxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhcdTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBc'@;
put 'dTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVmOTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcy'@;
put 'YzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRcdTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBc'@;
put 'dTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4MV1bZ10uY2hh'@;
put 'ckNvZGVBdCgwKSYmKElbeVsxODFdW2ddXT00NjMzNitnLF9bNDYzMzYrZ109eVsxODFdW2ddKTtmb3IoeVsxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNcdTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVc'@;
put 'dTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgwOWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdm'@;
put 'MGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJcdThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThc'@;
put 'dTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRlOGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODJdLmxlbmd0aDsrK2cpNjU1MzMhPT15'@;
put 'WzE4Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODJdW2ddXT00NjU5MitnLF9bNDY1OTIrZ109eVsxODJdW2ddKTtmb3IoeVsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJcdTdlNDFcdTUxZTFc'@;
put 'dTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThiZmRcdTU0MjBcdTgw'@;
put 'YmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2VcdTc1YWZcdTcwZmRc'@;
put 'dTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODNdLmxlbmd0aDsr'@;
put 'K2cpNjU1MzMhPT15WzE4M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODNdW2ddXT00Njg0OCtnLF9bNDY4NDgrZ109eVsxODNdW2ddKTtmb3IoeVsxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRc'@;
put 'dTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNcdTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3'@;
put 'ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgwOWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVc'@;
put 'dTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFcdTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsx'@;
put 'ODRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODRdW2ddXT00NzEwNCtnLF9bNDcxMDQrZ109eVsxODRdW2ddKTtmb3IoeVsxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3YzJcdTgwM2ZcdTY4OTdcdTVkZTVcdTY1M2JcdTUyOWZcdTYwNmRcdTlmOWFcdTRmOWJcdThlYWNcdTUxNmNcdTViYWJcdTVmMTNcdTVkZTlc'@;
put 'dTZjNWVcdTYyZjFcdThkMjFcdTUxNzFcdTk0YTlcdTUyZmVcdTZjOWZcdTgyZGZcdTcyZDdcdTU3YTJcdTY3ODRcdThkMmRcdTU5MWZcdThmOWNcdTgzYzdcdTU0OTVcdTdiOGRcdTRmMzBcdTZjYmRcdTViNjRcdTU5ZDFcdTlmMTNcdTUzZTRcdTg2Y2FcdTlhYThcdThjMzdcdTgwYTFcdTY1'@;
put 'NDVcdTk4N2VcdTU2ZmFcdTk2YzdcdTUyMmVcdTc0ZGNcdTUyNTBcdTViZTFcdTYzMDJcdTg5MDJcdTRlNTZcdTYyZDBcdTYwMmFcdTY4ZmFcdTUxNzNcdTViOThcdTUxYTBcdTg5YzJcdTdiYTFcdTk5ODZcdTdmNTBcdTYwZWZcdTcwNGNcdThkMmZcdTUxNDlcdTVlN2ZcdTkwMWJcdTc0NzBc'@;
put 'dTg5YzRcdTU3MmRcdTc4NDVcdTVmNTJcdTlmOWZcdTk1ZmFcdThmNjhcdTliM2NcdThiZTFcdTc2NzhcdTY4NDJcdTY3ZGNcdThkZWFcdThkMzVcdTUyM2RcdThmOGFcdTZlZGFcdTY4Y2RcdTk1MDVcdTkwZWRcdTU2ZmRcdTY3OWNcdTg4ZjlcdThmYzdcdTU0YzhcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxnPTA7ZyE9eVsxODVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODVdW2ddXT00NzM2MCtnLF9bNDczNjArZ109eVsxODVdW2ddKTtmb3IoeVsxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJc'@;
put 'dTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1'@;
put 'OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJc'@;
put 'dThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTZcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODZdW2ddXT00NzYxNitnLF9bNDc2MTYrZ109eVsxODZdW2ddKTtmb3IoeVsxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVc'@;
put 'dTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZiMjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTll'@;
put 'YzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVcdTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFc'@;
put 'dTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThjNDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5'@;
put 'ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODddW2ddXT00Nzg3MitnLF9bNDc4NzIrZ109eVsxODddW2ddKTtmb3IoeVsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwOGNcdTk5NjVcdThmZjlcdTZmYzBcdThiYTVcdTllMjFcdTU5ZWNcdTdlZTlc'@;
put 'dTdmMDlcdTU0MDlcdTY3ODFcdTY4ZDhcdThmOTFcdTdjNGRcdTk2YzZcdTUzY2FcdTYwMjVcdTc1YmVcdTZjNzJcdTUzNzNcdTVhYzlcdTdlYTdcdTYzMjRcdTUxZTBcdTgxMGFcdTVkZjFcdTg0ZGZcdTYyODBcdTUxODBcdTViNjNcdTRmMGVcdTc5NmRcdTUyNDJcdTYwYjhcdTZkNGVcdTVi'@;
put 'YzRcdTViYzJcdThiYTFcdThiYjBcdTY1ZTJcdTVmY2NcdTk2NDVcdTU5OTNcdTdlZTdcdTdlYWFcdTU2MDlcdTY3YjdcdTU5MzlcdTRmNzNcdTViYjZcdTUyYTBcdTgzNWFcdTk4OGFcdThkM2VcdTc1MzJcdTk0YmVcdTUwNDdcdTdhM2NcdTRlZjdcdTY3YjZcdTlhN2VcdTVhYzFcdTZiN2Nc'@;
put 'dTc2ZDFcdTU3NWFcdTVjMTZcdTdiM2FcdTk1ZjRcdTcxNGVcdTUxN2NcdTgwYTlcdTgyNzBcdTU5NzhcdTdmMDRcdTgzMjdcdTY4YzBcdTY3ZWNcdTc4YjFcdTc4NzdcdTYyZTNcdTYzNjFcdTdiODBcdTRmZWRcdTUyNmFcdTUxY2ZcdTgzNTBcdTY5ZGJcdTkyNzRcdThkZjVcdThkMzFcdTg5'@;
put 'YzFcdTk1MmVcdTdiYWRcdTRlZjZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODhdW2ddXT00ODEyOCtnLF9bNDgxMjgrZ109eVsxODhdW2ddKTtmb3IoeVsxODldPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwNjVcdTgyMzBcdTUyNTFcdTk5NmZcdTZlMTBcdTZlODVc'@;
put 'dTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVhMDdcdTU2YmNcdTY0MDVcdTk0'@;
put 'ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJcdTY4NTRcdTY3NzBcdTYzNzdc'@;
put 'dTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRlYzVcdThjMjhcdThmZGJcdTk3'@;
put 'NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODldW2ddXT00ODM4NCtnLF9bNDgzODQrZ109eVsxODldW2ddKTtmb3IoeVsxOTBdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJc'@;
put 'dTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZcdTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdl'@;
put 'YTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgyMDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFc'@;
put 'dTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNcdTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThi'@;
put 'YzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTBdW2ddXT00ODY0MCtnLF9bNDg2NDArZ109eVsxOTBdW2ddKTtm'@;
put 'b3IoeVsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmY2FcdTdhZTNc'@;
put 'dTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcw'@;
put 'ZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNcdTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBc'@;
put 'dTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1'@;
put 'ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTFdW2ddXT00ODg5NitnLF9bNDg4OTYrZ109'@;
put 'eVsxOTFdW2ddKTtmb3IoeVsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZcdTYyZTZcdTdiZWVcdTk2MTFcdTUx'@;
put 'NzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZkOWRcdTUyZDJcdTRlNTBcdTk2Zjdc'@;
put 'dTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2NcdTljYTRcdTc5M2NcdTgzODlcdTgz'@;
put 'NTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTJdW2ddXT00OTE1Mitn'@;
put 'LF9bNDkxNTIrZ109eVsxOTJdW2ddKTtmb3IoeVsxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRmZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4'@;
put 'ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFcdTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNc'@;
put 'dTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYyY2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5'@;
put 'YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJcdTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTNd'@;
put 'W2ddXT00OTQwOCtnLF9bNDk0MDgrZ109eVsxOTNdW2ddKTtmb3IoeVsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODZcdTU3ODRcdTYyZTJcdTk2NDdcdTY5N2NcdTVhMDRcdTY0MDJcdTdiZDNcdTZmMGZcdTk2NGJcdTgyYTZcdTUzNjJcdTk4ODVcdTVlOTBcdTcwODlcdTYzYjNcdTUzNjRcdTg2NGZcdTljODFcdTllOTNcdTc4OGNcdTk3MzJcdThkZWZcdThk'@;
put 'NDJcdTllN2ZcdTZmNWVcdTc5ODRcdTVmNTVcdTk2NDZcdTYyMmVcdTlhNzRcdTU0MTVcdTk0ZGRcdTRmYTNcdTY1YzVcdTVjNjVcdTVjNjFcdTdmMTVcdTg2NTFcdTZjMmZcdTVmOGJcdTczODdcdTZlZTRcdTdlZmZcdTVjZTZcdTYzMWJcdTViNmFcdTZlZTZcdTUzNzVcdTRlNzFcdTYzYTBc'@;
put 'dTc1NjVcdTYyYTFcdThmNmVcdTRmMjZcdTRlZDFcdTZjYTZcdTdlYjZcdThiYmFcdTg0MWRcdTg3YmFcdTdmNTdcdTkwM2JcdTk1MjNcdTdiYTlcdTlhYTFcdTg4ZjhcdTg0M2RcdTZkMWJcdTlhODZcdTdlZGNcdTU5ODhcdTllYmJcdTczOWJcdTc4MDFcdTg2ODJcdTlhNmNcdTlhODJcdTU2'@;
put 'MWJcdTU0MTdcdTU3Y2JcdTRlNzBcdTllYTZcdTUzNTZcdThmYzhcdTgxMDlcdTc3OTJcdTk5OTJcdTg2ZWVcdTZlZTFcdTg1MTNcdTY2ZmNcdTYxNjJcdTZmMmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5NF1bZ10uY2hhckNvZGVBdCgw'@;
put 'KSYmKElbeVsxOTRdW2ddXT00OTY2NCtnLF9bNDk2NjQrZ109eVsxOTRdW2ddKTtmb3IoeVsxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThjOGNcdThkMzhcdTRlNDhcdTczYWJcdTY3'@;
put 'OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJcdTY4YTZcdTViNWZcdTc3MmZcdTkxOWFc'@;
put 'dTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVl'@;
put 'OTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5NV1bZ10u'@;
put 'Y2hhckNvZGVBdCgwKSYmKElbeVsxOTVdW2ddXT00OTkyMCtnLF9bNDk5MjArZ109eVsxOTVdW2ddKTtmb3IoeVsxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NzlcdTg2MTFcdTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYy'@;
put 'YzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdc'@;
put 'dTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFcdTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4'@;
put 'YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTViN2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTZdLmxlbmd0aDsrK2cpNjU1MzMh'@;
put 'PT15WzE5Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTZdW2ddXT01MDE3NitnLF9bNTAxNzYrZ109eVsxOTZdW2ddKTtmb3IoeVsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZTdcdTZjZGVcdTcyNWJcdTYyNmRcdTk0YWVcdTdlYmRcdTgxMTNcdTZkNTNcdTUxOWNcdTVmMDRcdTU5NzRcdTUyYWFcdTYwMTJcdTU5NzNcdTY2OTZcdTg2NTBcdTc1OWZcdTYz'@;
put 'MmFcdTYxZTZcdTdjZWZcdThiZmFcdTU0ZTZcdTZiMjdcdTllMjVcdTZiYjRcdTg1ZDVcdTU0NTVcdTUwNzZcdTZjYTRcdTU1NmFcdThkYjRcdTcyMmNcdTVlMTVcdTYwMTVcdTc0MzZcdTYyY2RcdTYzOTJcdTcyNGNcdTVmOThcdTZlNDNcdTZkM2VcdTY1MDBcdTZmNThcdTc2ZDhcdTc4ZDBc'@;
put 'dTc2ZmNcdTc1NTRcdTUyMjRcdTUzZGJcdTRlNTNcdTVlOWVcdTY1YzFcdTgwMmFcdTgwZDZcdTYyOWJcdTU0ODZcdTUyMjhcdTcwYWVcdTg4OGRcdThkZDFcdTZjZTFcdTU0NzhcdTgwZGFcdTU3ZjlcdTg4ZjRcdThkNTRcdTk2NmFcdTkxNGRcdTRmNjlcdTZjOWJcdTU1YjdcdTc2YzZcdTc4'@;
put 'MzBcdTYyYThcdTcwZjlcdTZmOGVcdTVmNmRcdTg0ZWNcdTY4ZGFcdTc4N2NcdTdiZjdcdTgxYThcdTY3MGJcdTllNGZcdTYzNjdcdTc4YjBcdTU3NmZcdTc4MTJcdTk3MzlcdTYyNzlcdTYyYWJcdTUyODhcdTc0MzVcdTZiZDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTddLmxlbmd0'@;
put 'aDsrK2cpNjU1MzMhPT15WzE5N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTddW2ddXT01MDQzMitnLF9bNTA0MzIrZ109eVsxOTddW2ddKTtmb3IoeVsxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0'@;
put 'ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFc'@;
put 'dTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZi'@;
put 'NjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9'@;
put 'eVsxOThdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOThdW2ddXT01MDY4OCtnLF9bNTA2ODgrZ109eVsxOThdW2ddKTtmb3IoeVsxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0'@;
put 'YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBcdTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdc'@;
put 'dTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYwMmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZl'@;
put 'MDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdcdTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxnPTA7ZyE9eVsxOTldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTldW2ddXT01MDk0NCtnLF9bNTA5NDQrZ109eVsxOTldW2ddKTtmb3IoeVsyMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzZDZcdTVhMzZcdTlmOGJcdThkYTNcdTUzYmJcdTU3MDhcdTk4YTdcdTY3NDNcdTkxOWJcdTZjYzlcdTUxNjhcdTc1'@;
put 'Y2FcdTYyZjNcdTcyYWNcdTUyMzhcdTUyOWRcdTdmM2FcdTcwOTRcdTc2MzhcdTUzNzRcdTllNGFcdTY5YjdcdTc4NmVcdTk2YzBcdTg4ZDlcdTdmYTRcdTcxMzZcdTcxYzNcdTUxODlcdTY3ZDNcdTc0ZTRcdTU4ZTRcdTY1MThcdTU2YjdcdThiYTlcdTk5NzZcdTYyNzBcdTdlZDVcdTYwZjlc'@;
put 'dTcwZWRcdTU4ZWNcdTRlYzFcdTRlYmFcdTVmY2RcdTk3ZTdcdTRlZmJcdThiYTRcdTUyMDNcdTU5OGFcdTdlYWJcdTYyNTRcdTRlY2RcdTY1ZTVcdTYyMGVcdTgzMzhcdTg0YzlcdTgzNjNcdTg3OGRcdTcxOTRcdTZlYjZcdTViYjlcdTdlZDJcdTUxOTdcdTYzYzlcdTY3ZDRcdTgwODlcdTgz'@;
put 'MzlcdTg4MTVcdTUxMTJcdTViN2FcdTU5ODJcdThmYjFcdTRlNzNcdTZjNWRcdTUxNjVcdTg5MjVcdThmNmZcdTk2MmVcdTg1NGFcdTc0NWVcdTk1MTBcdTk1ZjBcdTZkYTZcdTgyZTVcdTVmMzFcdTY0OTJcdTZkMTJcdTg0MjhcdTgxNmVcdTljYzNcdTU4NWVcdThkNWJcdTRlMDlcdTUzYzFc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDBdW2ddXT01MTIwMCtnLF9bNTEyMDArZ109eVsyMDBdW2ddKTtmb3IoeVsyMDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0'@;
put 'NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNc'@;
put 'dTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgy'@;
put 'MGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJc'@;
put 'dTUzNDdcdTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDFdW2ddXT01MTQ1NitnLF9bNTE0NTYrZ109eVsyMDFdW2ddKTtmb3IoeVsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcy'@;
put 'ZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRc'@;
put 'dThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1'@;
put 'MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZc'@;
put 'dTU4ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDJdW2ddXT01MTcxMitnLF9bNTE3MTIrZ109eVsyMDJdW2ddKTtmb3IoeVsyMDNdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNTVcdTUyMzdcdTgwMGRcdTY0NTRcdTg4NzBcdTc1'@;
put 'MjlcdTVlMDVcdTY4MTNcdTYyZjRcdTk3MWNcdTUzY2NcdTcyM2RcdThjMDFcdTZjMzRcdTc3NjFcdTdhMGVcdTU0MmVcdTc3YWNcdTk4N2FcdTgyMWNcdThiZjRcdTc4NTVcdTY3MTRcdTcwYzFcdTY1YWZcdTY0OTVcdTU2MzZcdTYwMWRcdTc5YzFcdTUzZjhcdTRlMWRcdTZiN2JcdTgwODZc'@;
put 'dTViZmFcdTU1ZTNcdTU2ZGJcdTRmM2FcdTRmM2NcdTk5NzJcdTVkZjNcdTY3N2VcdTgwMzhcdTYwMDJcdTk4ODJcdTkwMDFcdTViOGJcdThiYmNcdThiZjVcdTY0MWNcdTgyNThcdTY0ZGVcdTU1ZmRcdTgyY2ZcdTkxNjVcdTRmZDdcdTdkMjBcdTkwMWZcdTdjOWZcdTUwZjNcdTU4NTFcdTZl'@;
put 'YWZcdTViYmZcdThiYzlcdTgwODNcdTkxNzhcdTg0OWNcdTdiOTdcdTg2N2RcdTk2OGJcdTk2OGZcdTdlZTVcdTlhZDNcdTc4OGVcdTVjODFcdTdhNTdcdTkwNDJcdTk2YTdcdTc5NWZcdTViNTlcdTYzNWZcdTdiMGJcdTg0ZDFcdTY4YWRcdTU1MDZcdTdmMjlcdTc0MTBcdTdkMjJcdTk1MDFc'@;
put 'dTYyNDBcdTU4NGNcdTRlZDZcdTViODNcdTU5NzlcdTU4NTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDNdW2ddXT01MTk2OCtnLF9bNTE5NjgrZ109eVsyMDNdW2ddKTtmb3IoeVsyMDRd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNmRcdTYzMWVcdThlNGJcdThl'@;
put 'MGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZiZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRc'@;
put 'dTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZcdThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1'@;
put 'YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYwNmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJc'@;
put 'dTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDRdW2ddXT01MjIyNCtnLF9bNTIyMjQrZ109eVsyMDRdW2dd'@;
put 'KTtmb3IoeVsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNDBcdTVl'@;
put 'ZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVcdTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJc'@;
put 'dTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYzYThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1'@;
put 'M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFcdTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFc'@;
put 'dTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDVdW2ddXT01MjQ4MCtnLF9bNTI0ODAr'@;
put 'Z109eVsyMDVdW2ddKTtmb3IoeVsyMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTVkY2RcdTVmYWVcdTUzNzFcdTk3ZTZcdThmZGRcdTY4NDVcdTU2ZjRcdTU1MmZcdTYwZGZcdTRlM2FcdTZmNGRcdTdlZjRcdTgyYzdcdTg0MGVcdTU5ZDRcdTRmMWZcdTRmMmFcdTVjM2VcdTdlYWNcdTY3MmFcdTg1MWFcdTU0NzNcdTc1NGZcdTgwYzNcdTU1ODJcdTliNGZcdTRmNGRc'@;
put 'dTZlMmRcdThjMTNcdTVjMDlcdTYxNzBcdTUzNmJcdTc2MWZcdTZlMjlcdTg2OGFcdTY1ODdcdTk1ZmJcdTdlYjlcdTU0M2JcdTdhMzNcdTdkMGFcdTk1ZWVcdTU1ZTFcdTdmYzFcdTc0ZWVcdTYzMWRcdTg3MTdcdTZkYTFcdTdhOWRcdTYyMTFcdTY1YTFcdTUzNjdcdTYzZTFcdTZjODNcdTVk'@;
put 'ZWJcdTU0NWNcdTk0YThcdTRlNGNcdTZjNjFcdThiZWNcdTVjNGJcdTY1ZTBcdTgyOWNcdTY4YTdcdTU0M2VcdTU0MzRcdTZiY2JcdTZiNjZcdTRlOTRcdTYzNDJcdTUzNDhcdTgyMWVcdTRmMGRcdTRmYWVcdTU3NWVcdTYyMGFcdTk2ZmVcdTY2NjRcdTcyNjlcdTUyZmZcdTUyYTFcdTYwOWZc'@;
put 'dThiZWZcdTY2MTRcdTcxOTlcdTY3OTBcdTg5N2ZcdTc4NTJcdTc3ZmRcdTY2NzBcdTU2M2JcdTU0MzhcdTk1MjFcdTcyN2FcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDZdW2ddXT01Mjcz'@;
put 'NitnLF9bNTI3MzYrZ109eVsyMDZdW2ddKTtmb3IoeVsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVc'@;
put 'dTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2'@;
put 'NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFc'@;
put 'dTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsy'@;
put 'MDddW2ddXT01Mjk5MitnLF9bNTI5OTIrZ109eVsyMDddW2ddKTtmb3IoeVsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjMGZcdTViNWRcdTY4MjFcdTgwOTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3Zjlc'@;
put 'dTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNcdTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3'@;
put 'NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRc'@;
put 'dTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2ZcdTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwOF1bZ10uY2hhckNvZGVB'@;
put 'dCgwKSYmKElbeVsyMDhdW2ddXT01MzI0OCtnLF9bNTMyNDgrZ109eVsyMDhdW2ddKTtmb3IoeVsyMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwMDlcdTc2NjNcdTc3MjlcdTdlZGFcdTk3NzRcdTg1OWJcdTViNjZcdTdhNzRcdTk2ZWFcdTg4NDBcdTUyY2JcdTcxOGZcdTVmYWFcdTY1ZWNcdThiZTJcdTViZmJcdTlhNmZcdTVkZTFcdTZiODlcdTZjNWJcdThiYWRc'@;
put 'dThiYWZcdTkwMGFcdThmYzVcdTUzOGJcdTYyYmNcdTllMjZcdTllMmRcdTU0NDBcdTRlMmJcdTgyYmRcdTcyNTlcdTg2OWNcdTVkMTZcdTg4NTlcdTZkYWZcdTk2YzVcdTU0ZDFcdTRlOWFcdThiYjZcdTcxMDlcdTU0YmRcdTk2MDlcdTcwZGZcdTZkZjlcdTc2ZDBcdTRlMjVcdTc4MTRcdTg3'@;
put 'MTJcdTVjYTlcdTVlZjZcdThhMDBcdTk4OWNcdTk2MGVcdTcwOGVcdTZjYmZcdTU5NDRcdTYzYTlcdTc3M2NcdTg4NGRcdTZmMTRcdTgyNzNcdTU4MzBcdTcxZDVcdTUzOGNcdTc4MWFcdTk2YzFcdTU1MDFcdTVmNjZcdTcxMzBcdTViYjRcdThjMWFcdTlhOGNcdTZiODNcdTU5MmVcdTllMmZc'@;
put 'dTc5ZTdcdTY3NjhcdTYyNmNcdTRmNmZcdTc1YTFcdTdmOGFcdTZkMGJcdTk2MzNcdTZjMjdcdTRlZjBcdTc1ZDJcdTUxN2JcdTY4MzdcdTZmM2VcdTkwODBcdTgxNzBcdTU5OTZcdTc0NzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwOV1b'@;
put 'Z10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDldW2ddXT01MzUwNCtnLF9bNTM1MDQrZ109eVsyMDldW2ddKTtmb3IoeVsyMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVc'@;
put 'dTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBcdTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2'@;
put 'ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVmYzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFc'@;
put 'dThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTBdLmxlbmd0aDsrK2cpNjU1'@;
put 'MzMhPT15WzIxMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTBdW2ddXT01Mzc2MCtnLF9bNTM3NjArZ109eVsyMTBdW2ddKTtmb3IoeVsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZc'@;
put 'dTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVlYjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZj'@;
put 'YjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlcdThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhc'@;
put 'dTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdmYmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTFdLmxl'@;
put 'bmd0aDsrK2cpNjU1MzMhPT15WzIxMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTFdW2ddXT01NDAxNitnLF9bNTQwMTYrZ109eVsyMTFdW2ddKTtmb3IoeVsyMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNcdTg4ODFcdTUzOWZcdTYzZjRcdThmOTVc'@;
put 'dTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkwZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThm'@;
put 'ZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRcdTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNc'@;
put 'dTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThmNjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7'@;
put 'ZyE9eVsyMTJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTJdW2ddXT01NDI3MitnLF9bNTQyNzIrZ109eVsyMTJdW2ddKTtmb3IoeVsyMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJcdTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRc'@;
put 'dTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdhZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRl'@;
put 'MDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBcdThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2Rc'@;
put 'dTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRlODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxnPTA7ZyE9eVsyMTNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTNdW2ddXT01NDUyOCtnLF9bNTQ1MjgrZ109eVsyMTNdW2ddKTtmb3IoeVsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJc'@;
put 'dTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRcdTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2'@;
put 'N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZjYmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThc'@;
put 'dTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBcdTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdi'@;
put 'NTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTRdW2ddXT01NDc4NCtnLF9bNTQ3ODQrZ109eVsyMTRdW2ddKTtmb3IoeVsyMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZc'@;
put 'dThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZcdTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3'@;
put 'NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZkYzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZc'@;
put 'dTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2JcdTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTdcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTVdW2ddXT01NTA0MCtnLF9bNTUwNDArZ109eVsyMTVdW2ddKTtmb3IoeVsyMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVc'@;
put 'dTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdcdTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTVi'@;
put 'NWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUyMDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVc'@;
put 'dTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNcdTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRm'@;
put 'NWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTZdW2ddXT01NTI5NitnLF9bNTUyOTYrZ109eVsyMTZdW2ddKTtmb3IoeVsyMTddPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZc'@;
put 'dTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRmN2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUw'@;
put 'MmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThc'@;
put 'dTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVkZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTVi'@;
put 'MzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTddW2ddXT01NTU1MitnLF9bNTU1NTIrZ109eVsyMTddW2ddKTtmb3IoeVsy'@;
put 'MThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxYzdcdTUxOTZcdTUxYTJc'@;
put 'dTUxYTVcdThiYTBcdThiYTZcdThiYTdcdThiYWFcdThiYjRcdThiYjVcdThiYjdcdThiYzJcdThiYzNcdThiY2JcdThiY2ZcdThiY2VcdThiZDJcdThiZDNcdThiZDRcdThiZDZcdThiZDhcdThiZDlcdThiZGNcdThiZGZcdThiZTBcdThiZTRcdThiZThcdThiZTlcdThiZWVcdThiZjBcdThi'@;
put 'ZjNcdThiZjZcdThiZjlcdThiZmNcdThiZmZcdThjMDBcdThjMDJcdThjMDRcdThjMDdcdThjMGNcdThjMGZcdThjMTFcdThjMTJcdThjMTRcdThjMTVcdThjMTZcdThjMTlcdThjMWJcdThjMThcdThjMWRcdThjMWZcdThjMjBcdThjMjFcdThjMjVcdThjMjdcdThjMmFcdThjMmJcdThjMmVc'@;
put 'dThjMmZcdThjMzJcdThjMzNcdThjMzVcdThjMzZcdTUzNjlcdTUzN2FcdTk2MWRcdTk2MjJcdTk2MjFcdTk2MzFcdTk2MmFcdTk2M2RcdTk2M2NcdTk2NDJcdTk2NDlcdTk2NTRcdTk2NWZcdTk2NjdcdTk2NmNcdTk2NzJcdTk2NzRcdTk2ODhcdTk2OGRcdTk2OTdcdTk2YjBcdTkwOTdcdTkw'@;
put 'OWJcdTkwOWRcdTkwOTlcdTkwYWNcdTkwYTFcdTkwYjRcdTkwYjNcdTkwYjZcdTkwYmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMThdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMThdW2ddXT01NTgwOCtnLF9bNTU4MDgrZ109eVsyMThd'@;
put 'W2ddKTtmb3IoeVsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhc'@;
put 'dTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUy'@;
put 'YTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNc'@;
put 'dTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3'@;
put 'ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTldW2ddXT01NjA2NCtnLF9bNTYw'@;
put 'NjQrZ109eVsyMTldW2ddKTtmb3IoeVsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBcdTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgy'@;
put 'OTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgyYjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRc'@;
put 'dTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhcdTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgz'@;
put 'MmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgzMTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjBdW2ddXT01'@;
put 'NjMyMCtnLF9bNTYzMjArZ109eVsyMjBdW2ddKTtmb3IoeVsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTgzNjhcdTgzMWJcdTgzNjlcdTgzNmNcdTgzNmFcdTgzNmRcdTgzNmVcdTgzYjBcdTgzNzhcdTgzYjNcdTgzYjRcdTgzYTBcdTgzYWFcdTgzOTNcdTgzOWNcdTgzODVcdTgzN2NcdTgzYjZcdTgzYTlcdTgzN2RcdTgzYjhcdTgzN2JcdTgzOThcdTgzOWVcdTgz'@;
put 'YThcdTgzYmFcdTgzYmNcdTgzYzFcdTg0MDFcdTgzZTVcdTgzZDhcdTU4MDdcdTg0MThcdTg0MGJcdTgzZGRcdTgzZmRcdTgzZDZcdTg0MWNcdTg0MzhcdTg0MTFcdTg0MDZcdTgzZDRcdTgzZGZcdTg0MGZcdTg0MDNcdTgzZjhcdTgzZjlcdTgzZWFcdTgzYzVcdTgzYzBcdTg0MjZcdTgzZjBc'@;
put 'dTgzZTFcdTg0NWNcdTg0NTFcdTg0NWFcdTg0NTlcdTg0NzNcdTg0ODdcdTg0ODhcdTg0N2FcdTg0ODlcdTg0NzhcdTg0M2NcdTg0NDZcdTg0NjlcdTg0NzZcdTg0OGNcdTg0OGVcdTg0MzFcdTg0NmRcdTg0YzFcdTg0Y2RcdTg0ZDBcdTg0ZTZcdTg0YmRcdTg0ZDNcdTg0Y2FcdTg0YmZcdTg0'@;
put 'YmFcdTg0ZTBcdTg0YTFcdTg0YjlcdTg0YjRcdTg0OTdcdTg0ZTVcdTg0ZTNcdTg1MGNcdTc1MGRcdTg1MzhcdTg0ZjBcdTg1MzlcdTg1MWZcdTg1M2FcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyMV1bZ10uY2hhckNvZGVBdCgwKSYmKElb'@;
put 'eVsyMjFdW2ddXT01NjU3NitnLF9bNTY1NzYrZ109eVsyMjFdW2ddKTtmb3IoeVsyMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2JcdTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1'@;
put 'YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZc'@;
put 'dTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFcdTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYz'@;
put 'ZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyMl1bZ10uY2hhckNv'@;
put 'ZGVBdCgwKSYmKElbeVsyMjJdW2ddXT01NjgzMitnLF9bNTY4MzIrZ109eVsyMjJdW2ddKTtmb3IoeVsyMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUz'@;
put 'ZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZcdTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRc'@;
put 'dTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0'@;
put 'ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZcdTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIy'@;
put 'M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjNdW2ddXT01NzA4OCtnLF9bNTcwODgrZ109eVsyMjNdW2ddKTtmb3IoeVsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1'@;
put 'OTFcdTU1N2JcdTU1ZGZcdTU1YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRc'@;
put 'dTU2MWVcdTU2MDhcdTU2MGNcdTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2'@;
put 'OTNcdTU2YWZcdTU2ZDRcdTU2ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjRdLmxlbmd0aDsrK2cp'@;
put 'NjU1MzMhPT15WzIyNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjRdW2ddXT01NzM0NCtnLF9bNTczNDQrZ109eVsyMjRdW2ddKTtmb3IoeVsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVj'@;
put 'OWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2Rc'@;
put 'dTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVm'@;
put 'YmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjVd'@;
put 'Lmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjVdW2ddXT01NzYwMCtnLF9bNTc2MDArZ109eVsyMjVdW2ddKTtmb3IoeVsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTcz'@;
put 'NTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBc'@;
put 'dTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBcdTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYw'@;
put 'MDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYwMDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxn'@;
put 'PTA7ZyE9eVsyMjZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjZdW2ddXT01Nzg1NitnLF9bNTc4NTYrZ109eVsyMjZdW2ddKTtmb3IoeVsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNmFcdTYwN2RcdTYwOTZcdTYwOWFcdTYwYWRcdTYwOWRcdTYwODNcdTYwOTJcdTYwOGNcdTYwOWJcdTYwZWNcdTYwYmJcdTYw'@;
put 'YjFcdTYwZGRcdTYwZDhcdTYwYzZcdTYwZGFcdTYwYjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwZjRcdTYxMDBcdTYxMGVcdTYxMmJcdTYxNGFcdTYxNzVcdTYxYWNcdTYxOTRcdTYxYTdcdTYxYjdcdTYxZDRcdTYxZjVcdTVmZGRcdTk2YjNcdTk1ZTlcdTk1ZWJcdTk1ZjFcdTk1ZjNc'@;
put 'dTk1ZjVcdTk1ZjZcdTk1ZmNcdTk1ZmVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MGFcdTk2MGJcdTk2MGNcdTk2MGRcdTk2MGZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MWFcdTRlMmNcdTcyM2ZcdTYyMTVcdTZjMzVcdTZjNTRcdTZjNWNcdTZjNGFcdTZjYTNcdTZj'@;
put 'ODVcdTZjOTBcdTZjOTRcdTZjOGNcdTZjNjhcdTZjNjlcdTZjNzRcdTZjNzZcdTZjODZcdTZjYTlcdTZjZDBcdTZjZDRcdTZjYWRcdTZjZjdcdTZjZjhcdTZjZjFcdTZjZDdcdTZjYjJcdTZjZTBcdTZjZDZcdTZjZmFcdTZjZWJcdTZjZWVcdTZjYjFcdTZjZDNcdTZjZWZcdTZjZmVcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjddW2ddXT01ODExMitnLF9bNTgxMTIrZ109eVsyMjddW2ddKTtmb3IoeVsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZk'@;
put 'NGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZc'@;
put 'dTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZl'@;
put 'YmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2Fc'@;
put 'dTZmZDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjhdW2ddXT01ODM2OCtnLF9bNTgzNjgrZ109eVsyMjhdW2ddKTtmb3IoeVsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZm'@;
put 'ZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVc'@;
put 'dThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkw'@;
put 'NzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRc'@;
put 'dTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjldW2ddXT01ODYyNCtnLF9bNTg2MjQrZ109eVsyMjldW2ddKTtmb3IoeVsyMzBdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5'@;
put 'YjJcdTU5YWZcdTU5ZDdcdTU5YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJc'@;
put 'dTVhNzdcdTVhN2FcdTVhYmVcdTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTVi'@;
put 'NTNcdTViNjJcdTlhNzVcdTlhNzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZc'@;
put 'dTdlYTFcdTdlYTNcdTdlYTVcdTdlYThcdTdlYTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzBdW2ddXT01ODg4MCtnLF9bNTg4ODArZ109eVsyMzBdW2ddKTtmb3IoeVsyMzFdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdl'@;
put 'YzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRcdTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJc'@;
put 'dTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJcdTdmMjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdmMmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1'@;
put 'N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFc'@;
put 'dTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzFdW2ddXT01OTEzNitnLF9bNTkxMzYrZ109eVsyMzFdW2ddKTtmb3Io'@;
put 'eVsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0MWJcdTc0MWFcdTc0'@;
put 'NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhc'@;
put 'dTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3'@;
put 'YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRc'@;
put 'dTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzJdW2ddXT01OTM5MitnLF9bNTkzOTIrZ109eVsy'@;
put 'MzJdW2ddKTtmb3IoeVsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5'@;
put 'MjRcdTY4ZjBcdTY5MGJcdTY5MDFcdTY5NTdcdTY4ZTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NWRcdTY5ODRcdTY5NmJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Y2NcdTY5ODdcdTY5ODhcdTY5Y2VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OWJcdTY5YTdc'@;
put 'dTY5YmJcdTY5YWJcdTY5YWRcdTY5ZDRcdTY5YjFcdTY5YzFcdTY5Y2FcdTY5ZGZcdTY5OTVcdTY5ZTBcdTY5OGRcdTY5ZmZcdTZhMmZcdTY5ZWRcdTZhMTdcdTZhMThcdTZhNjVcdTY5ZjJcdTZhNDRcdTZhM2VcdTZhYTBcdTZhNTBcdTZhNWJcdTZhMzVcdTZhOGVcdTZhNzlcdTZhM2RcdTZh'@;
put 'MjhcdTZhNThcdTZhN2NcdTZhOTFcdTZhOTBcdTZhYTlcdTZhOTdcdTZhYWJcdTczMzdcdTczNTJcdTZiODFcdTZiODJcdTZiODdcdTZiODRcdTZiOTJcdTZiOTNcdTZiOGRcdTZiOWFcdTZiOWJcdTZiYTFcdTZiYWFcdThmNmJcdThmNmRcdThmNzFcdThmNzJcdThmNzNcdThmNzVcdThmNzZc'@;
put 'dThmNzhcdThmNzdcdThmNzlcdThmN2FcdThmN2NcdThmN2VcdThmODFcdThmODJcdThmODRcdThmODdcdThmOGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzNdW2ddXT01OTY0OCtnLF9b'@;
put 'NTk2NDgrZ109eVsyMzNdW2ddKTtmb3IoeVsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBc'@;
put 'dTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2'@;
put 'ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZc'@;
put 'dTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzRdW2dd'@;
put 'XT01OTkwNCtnLF9bNTk5MDQrZ109eVsyMzRdW2ddKTtmb3IoeVsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJc'@;
put 'dTcyNGRcdTcyNTJcdTcyNTZcdTcyMzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3'@;
put 'MTBcdTgwZGRcdTgwZWJcdTgwZjFcdTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2Nc'@;
put 'dTgxN2RcdTgxNmRcdTgxNjdcdTU4NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzNV1bZ10uY2hhckNvZGVBdCgwKSYm'@;
put 'KElbeVsyMzVdW2ddXT02MDE2MCtnLF9bNjAxNjArZ109eVsyMzVdW2ddKTtmb3IoeVsyMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1OTNcdTY1YmNc'@;
put 'dTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhcdTcxNDVcdTcx'@;
put 'NzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5NDZcdTc5NDlc'@;
put 'dTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzNl1bZ10uY2hh'@;
put 'ckNvZGVBdCgwKSYmKElbeVsyMzZdW2ddXT02MDQxNitnLF9bNjA0MTYrZ109eVsyMzZdW2ddKTtmb3IoeVsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZcdTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZc'@;
put 'dTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4'@;
put 'NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNcdTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNc'@;
put 'dTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzddLmxlbmd0aDsrK2cpNjU1MzMhPT15'@;
put 'WzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzddW2ddXT02MDY3MitnLF9bNjA2NzIrZ109eVsyMzddW2ddKTtmb3IoeVsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhc'@;
put 'dTc1NWJcdTc1NzJcdTc1NzlcdTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0'@;
put 'OTdcdTk0OTVcdTk0OWFcdTk0OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2Jc'@;
put 'dTk0Y2NcdTk0Y2RcdTk0Y2VcdTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzhdLmxlbmd0aDsr'@;
put 'K2cpNjU1MzMhPT15WzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzhdW2ddXT02MDkyOCtnLF9bNjA5MjgrZ109eVsyMzhdW2ddKTtmb3IoeVsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdc'@;
put 'dTk1MDlcdTk1MGFcdTk1MGRcdTk1MGVcdTk1MGZcdTk1MTJcdTk1MTNcdTk1MTRcdTk1MTVcdTk1MTZcdTk1MThcdTk1MWJcdTk1MWRcdTk1MWVcdTk1MWZcdTk1MjJcdTk1MmFcdTk1MmJcdTk1MjlcdTk1MmNcdTk1MzFcdTk1MzJcdTk1MzRcdTk1MzZcdTk1MzdcdTk1MzhcdTk1M2NcdTk1'@;
put 'M2VcdTk1M2ZcdTk1NDJcdTk1MzVcdTk1NDRcdTk1NDVcdTk1NDZcdTk1NDlcdTk1NGNcdTk1NGVcdTk1NGZcdTk1NTJcdTk1NTNcdTk1NTRcdTk1NTZcdTk1NTdcdTk1NThcdTk1NTlcdTk1NWJcdTk1NWVcdTk1NWZcdTk1NWRcdTk1NjFcdTk1NjJcdTk1NjRcdTk1NjVcdTk1NjZcdTk1Njdc'@;
put 'dTk1NjhcdTk1NjlcdTk1NmFcdTk1NmJcdTk1NmNcdTk1NmZcdTk1NzFcdTk1NzJcdTk1NzNcdTk1M2FcdTc3ZTdcdTc3ZWNcdTk2YzlcdTc5ZDVcdTc5ZWRcdTc5ZTNcdTc5ZWJcdTdhMDZcdTVkNDdcdTdhMDNcdTdhMDJcdTdhMWVcdTdhMTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsy'@;
put 'MzldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzldW2ddXT02MTE4NCtnLF9bNjExODQrZ109eVsyMzldW2ddKTtmb3IoeVsyNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMzlcdTdhMzdcdTdhNTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNc'@;
put 'dTllMjBcdTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFcdTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTll'@;
put 'NTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlcdTllNmFcdTllNmJcdTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFc'@;
put 'dTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxnPTA7ZyE9eVsyNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDBdW2ddXT02MTQ0MCtnLF9bNjE0NDArZ109eVsyNDBdW2ddKTtmb3IoeVsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNc'@;
put 'dTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4'@;
put 'YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVc'@;
put 'dTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDFdW2ddXT02MTY5NitnLF9bNjE2OTYrZ109eVsyNDFdW2ddKTtmb3IoeVsyNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFc'@;
put 'dTk4YTJcdTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2'@;
put 'YjFcdTg2YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVc'@;
put 'dTg3MmVcdTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3'@;
put 'YThcdTg3ZDJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDJdW2ddXT02MTk1MitnLF9bNjE5NTIrZ109eVsyNDJdW2ddKTtmb3IoeVsyNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVc'@;
put 'dTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdh'@;
put 'ZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVcdTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVc'@;
put 'dTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdiYWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdi'@;
put 'ZmNcdTdjMGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDNdW2ddXT02MjIwOCtnLF9bNjIyMDgrZ109eVsyNDNdW2ddKTtmb3IoeVsyNDRdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBc'@;
put 'dTgxZmVcdTgyMDFcdTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4'@;
put 'ODhcdTg4ZDhcdTg4ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThc'@;
put 'dTgyNmVcdTY2YThcdTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThj'@;
put 'NDlcdTkxNGFcdTkxNTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDRdW2ddXT02MjQ2NCtnLF9bNjI0NjQrZ109eVsyNDRdW2ddKTtmb3IoeVsyNDVdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxNjJcdTkxNjFcdTkxNzBcdTkxNjlc'@;
put 'dTkxNmZcdTkxN2RcdTkxN2VcdTkxNzJcdTkxNzRcdTkxNzlcdTkxOGNcdTkxODVcdTkxOTBcdTkxOGRcdTkxOTFcdTkxYTJcdTkxYTNcdTkxYWFcdTkxYWRcdTkxYWVcdTkxYWZcdTkxYjVcdTkxYjRcdTkxYmFcdThjNTVcdTllN2VcdThkYjhcdThkZWJcdThlMDVcdThlNTlcdThlNjlcdThk'@;
put 'YjVcdThkYmZcdThkYmNcdThkYmFcdThkYzRcdThkZDZcdThkZDdcdThkZGFcdThkZGVcdThkY2VcdThkY2ZcdThkZGJcdThkYzZcdThkZWNcdThkZjdcdThkZjhcdThkZTNcdThkZjlcdThkZmJcdThkZTRcdThlMDlcdThkZmRcdThlMTRcdThlMWRcdThlMWZcdThlMmNcdThlMmVcdThlMjNc'@;
put 'dThlMmZcdThlM2FcdThlNDBcdThlMzlcdThlMzVcdThlM2RcdThlMzFcdThlNDlcdThlNDFcdThlNDJcdThlNTFcdThlNTJcdThlNGFcdThlNzBcdThlNzZcdThlN2NcdThlNmZcdThlNzRcdThlODVcdThlOGZcdThlOTRcdThlOTBcdThlOWNcdThlOWVcdThjNzhcdThjODJcdThjOGFcdThj'@;
put 'ODVcdThjOThcdThjOTRcdTY1OWJcdTg5ZDZcdTg5ZGVcdTg5ZGFcdTg5ZGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDVdW2ddXT02MjcyMCtnLF9bNjI3MjArZ109eVsyNDVdW2ddKTtm'@;
put 'b3IoeVsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTVcdTg5ZWJc'@;
put 'dTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBcdTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlm'@;
put 'MGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFc'@;
put 'dTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTljYTFcdTljYTJcdTljYTNcdTljYTVcdTljYTZcdTljYTdcdTljYThcdTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTlj'@;
put 'YmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDZdW2ddXT02Mjk3NitnLF9bNjI5NzYrZ109'@;
put 'eVsyNDZdW2ddKTtmb3IoeVsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTljY2NcdTljY2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlh'@;
put 'YjdcdTllNThcdTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZc'@;
put 'dTlhZWJcdTlhZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTll'@;
put 'ZTdcdTllZTVcdTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDddW2ddXT02MzIzMitn'@;
put 'LF9bNjMyMzIrZ109eVsyNDddW2ddKTtyZXR1cm57ZW5jOkksZGVjOl99fSgpLHFbMTAwMjldPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4'@;
put 'MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRcdTAxMDBcdTAxMDFceGM5XHUwMTA0XHhkNlx4ZGNceGUx'@;
put 'XHUwMTA1XHUwMTBjXHhlNFx1MDEwZFx1MDEwNlx1MDEwN1x4ZTlcdTAxNzlcdTAxN2FcdTAxMGVceGVkXHUwMTBmXHUwMTEyXHUwMTEzXHUwMTE2XHhmM1x1MDExN1x4ZjRceGY2XHhmNVx4ZmFcdTAxMWFcdTAxMWJceGZjXHUyMDIwXHhiMFx1MDExOFx4YTNceGE3XHUyMDIyXHhiNlx4ZGZc'@;
put 'eGFlXHhhOVx1MjEyMlx1MDExOVx4YThcdTIyNjBcdTAxMjNcdTAxMmVcdTAxMmZcdTAxMmFcdTIyNjRcdTIyNjVcdTAxMmJcdTAxMzZcdTIyMDJcdTIyMTFcdTAxNDJcdTAxM2JcdTAxM2NcdTAxM2RcdTAxM2VcdTAxMzlcdTAxM2FcdTAxNDVcdTAxNDZcdTAxNDNceGFjXHUyMjFhXHUwMTQ0'@;
put 'XHUwMTQ3XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHUwMTQ4XHUwMTUwXHhkNVx1MDE1MVx1MDE0Y1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FcdTAxNGRcdTAxNTRcdTAxNTVcdTAxNThcdTIwMzlcdTIwM2FcdTAxNTlcdTAxNTZcdTAxNTdcdTAxNjBc'@;
put 'dTIwMWFcdTIwMWVcdTAxNjFcdTAxNWFcdTAxNWJceGMxXHUwMTY0XHUwMTY1XHhjZFx1MDE3ZFx1MDE3ZVx1MDE2YVx4ZDNceGQ0XHUwMTZiXHUwMTZlXHhkYVx1MDE2Zlx1MDE3MFx1MDE3MVx1MDE3Mlx1MDE3M1x4ZGRceGZkXHUwMTM3XHUwMTdiXHUwMTQxXHUwMTdjXHUwMTIyXHUwMmM3'@;
put 'IixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVsxMDA3OV09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVc'@;
put 'eDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZn'@;
put 'aGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNceGRkXHhiMFx4'@;
put 'YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5'@;
put 'Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUyMDQ0XHhhNFx4ZDBceGYwXHhkZVx4ZmVceGZkXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4'@;
put 'YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNo'@;
put 'YXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVsxMDA4MV09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEy'@;
put 'XHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3'@;
put 'XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEy'@;
put 'Mlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4'@;
put 'YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhj'@;
put 'ZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQo'@;
put 'ZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzI4NTkxXT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThc'@;
put 'eDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhc'@;
put 'eDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4'@;
put 'YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhk'@;
put 'Ylx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZiIsST1bXSx5PXt9LGc9MDsyNTYh'@;
put 'PWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHVlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1IiYmKHVlLmV4cG9ydHM9cSksZnVuY3Rpb24oXyxJ'@;
put 'KXsidXNlIHN0cmljdCI7aWYodHlwZW9mIHE+InUiKXt2YXIgeT1xO3VlLmV4cG9ydHMmJnR5cGVvZiBET19OT1RfRVhQT1JUX0NPREVQQUdFPiJ1Ij91ZS5leHBvcnRzPUkoeSk6Xy5jcHRhYmxlPUkoeSl9ZWxzZSBxPUkocSl9KHRoaXMsZnVuY3Rpb24oXyl7InVzZSBzdHJpY3QiO3ZhciBJ'@;
put 'PXsxMjAwOiJ1dGYxNmxlIiwxMjAxOiJ1dGYxNmJlIiwxMmUzOiJ1dGYzMmxlIiwxMjAwMToidXRmMzJiZSIsMTY5Njk6InV0ZjY0bGUiLDIwMTI3OiJhc2NpaSIsNjVlMzoidXRmNyIsNjUwMDE6InV0ZjgifSx5PVs4NzQsMTI1MCwxMjUxLDEyNTIsMTI1MywxMjU0LDEyNTUsMTI1NiwxZTRd'@;
put 'LGc9WzkzMiw5MzYsOTQ5LDk1MF0sQj1bNjUwMDFdLHc9e30sUD17fSxGPXt9LE89e30sej1mdW5jdGlvbihqKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShqKX0sTj1mdW5jdGlvbihqKXtyZXR1cm4gai5jaGFyQ29kZUF0KDApfSxMPXR5cGVvZiBCdWZmZXI8InUiLEs9ZnVuY3Rpb24o'@;
put 'KXt9O2lmKEwpe3ZhciBVPSFCdWZmZXIuZnJvbTtpZighVSl0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtVPSEwfUs9VT9mdW5jdGlvbihILGope3JldHVybiBqP25ldyBCdWZmZXIoSCxqKTpuZXcgQnVmZmVyKEgpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVy'@;
put 'LmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKEgpe3JldHVybiBuZXcgQnVmZmVyKEgpfSk7dmFyIFc9MTAyNCxZPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSxlZT1mdW5jdGlvbihqKXt2YXIgRT1mdW5jdGlvbihqKXtmb3IodmFyIEU9QnVmZmVyLmFsbG9jVW5zYWZl'@;
put 'KDY1NTM2KSxtPTA7bTw2NTUzNjsrK20pRVttXT0wO2Zvcih2YXIgQT1PYmplY3Qua2V5cyhqKSxvZT1BLmxlbmd0aCx0ZT0wLHNlPUFbdGVdO3RlPG9lOysrdGUpKHNlPUFbdGVdKSYmKEVbc2UuY2hhckNvZGVBdCgwKV09altzZV0pO3JldHVybiBFfShfW2pdLmVuYyk7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKEEsb2Upe3ZhciBzZSx0ZT1BLmxlbmd0aCx3ZT0wLFVlPTAsSmU9MCxhdD0wO2lmKCJzdHJpbmciPT10eXBlb2YgQSlmb3Ioc2U9QnVmZmVyLmFsbG9jVW5zYWZlKHRlKSx3ZT0wO3dlPHRlOysrd2Upc2Vbd2VdPUVbQS5jaGFyQ29kZUF0KHdlKV07ZWxzZSBpZihCdWZmZXIuaXNCdWZm'@;
put 'ZXIoQSkpe2ZvcihzZT1CdWZmZXIuYWxsb2NVbnNhZmUoMip0ZSksVWU9MCx3ZT0wO3dlPHRlOysrd2UpKEplPUFbd2VdKTwxMjg/c2VbVWUrK109RVtKZV06SmU8MjI0PyhzZVtVZSsrXT1FWygoMzEmSmUpPDw2KSsoNjMmQVt3ZSsxXSldLCsrd2UpOkplPDI0MD8oc2VbVWUrK109RVsoKDE1'@;
put 'JkplKTw8MTIpKygoNjMmQVt3ZSsxXSk8PDYpKyg2MyZBW3dlKzJdKV0sd2UrPTIpOihhdD0oKDcmSmUpPDwxOCkrKCg2MyZBW3dlKzFdKTw8MTIpKygoNjMmQVt3ZSsyXSk8PDYpKyg2MyZBW3dlKzNdKSx3ZSs9MyxhdDw2NTUzNj9zZVtVZSsrXT1FW2F0XTooc2VbVWUrK109RVs1NTI5Niso'@;
put 'KGF0LT02NTUzNik+PjEwJjEwMjMpXSxzZVtVZSsrXT1FWzU2MzIwKygxMDIzJmF0KV0pKTtzZT1zZS5zbGljZSgwLFVlKX1lbHNlIGZvcihzZT1CdWZmZXIuYWxsb2NVbnNhZmUodGUpLHdlPTA7d2U8dGU7Kyt3ZSlzZVt3ZV09RVtBW3dlXS5jaGFyQ29kZUF0KDApXTtyZXR1cm4gb2UmJiJi'@;
put 'dWYiIT09b2U/ImFyciIhPT1vZT9zZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChzZSk6c2V9fSxKPWZ1bmN0aW9uKGope3ZhciBFPV9bal0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksQT0wLG9lPSIiO2ZvcihBPTA7QTxFLmxlbmd0aDsrK0EpaWYob2U9RVtB'@;
put 'XSl7dmFyIHRlPW9lLmNoYXJDb2RlQXQoMCk7bVsyKkFdPTI1NSZ0ZSxtWzIqQSsxXT10ZT4+OH1yZXR1cm4gZnVuY3Rpb24od2Upe3ZhciBVZT13ZS5sZW5ndGgsSmU9MCxhdD0wO2lmKDIqVWU+VyYmKFc9MipVZSxZPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSksQnVmZmVyLmlzQnVmZmVyKHdl'@;
put 'KSlmb3IoSmU9MDtKZTxVZTtKZSsrKVlbMipKZV09bVthdD0yKndlW0plXV0sWVsyKkplKzFdPW1bYXQrMV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHdlKWZvcihKZT0wO0plPFVlO0plKyspYXQ9Mip3ZS5jaGFyQ29kZUF0KEplKSxZWzIqSmVdPW1bYXRdLFlbMipKZSsxXT1tW2F0KzFd'@;
put 'O2Vsc2UgZm9yKEplPTA7SmU8VWU7SmUrKylZWzIqSmVdPW1bYXQ9Mip3ZVtKZV1dLFlbMipKZSsxXT1tW2F0KzFdO3JldHVybiBZLnNsaWNlKDAsMipVZSkudG9TdHJpbmcoInVjczIiKX19LHJlPWZ1bmN0aW9uKGope2Zvcih2YXIgRT1fW2pdLmVuYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgx'@;
put 'MzEwNzIpLEE9MDtBPDEzMTA3MjsrK0EpbVtBXT0wO2Zvcih2YXIgb2U9T2JqZWN0LmtleXMoRSksdGU9MCxzZT1vZVt0ZV07dGU8b2UubGVuZ3RoOysrdGUpaWYoc2U9b2VbdGVdKXt2YXIgd2U9c2UuY2hhckNvZGVBdCgwKTttWzIqd2VdPTI1NSZFW3NlXSxtWzIqd2UrMV09RVtzZV0+Pjh9'@;
put 'cmV0dXJuIGZ1bmN0aW9uKEplLGF0KXt2YXIgTWU9SmUubGVuZ3RoLHZlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKk1lKSxYZT0wLGplPTAsRGU9MCxGZT0wLFJlPTA7aWYoInN0cmluZyI9PXR5cGVvZiBKZSl7Zm9yKFhlPUZlPTA7WGU8TWU7KytYZSlqZT0yKkplLmNoYXJDb2RlQXQoWGUpLHZl'@;
put 'W0ZlKytdPW1bamUrMV18fG1bamVdLG1bamUrMV0+MCYmKHZlW0ZlKytdPW1bamVdKTt2ZT12ZS5zbGljZSgwLEZlKX1lbHNlIGlmKEJ1ZmZlci5pc0J1ZmZlcihKZSkpe2ZvcihYZT1GZT0wO1hlPE1lOysrWGUpKFJlPUplW1hlXSk8MTI4P2plPVJlOlJlPDIyND8oamU9KCgzMSZSZSk8PDYp'@;
put 'Kyg2MyZKZVtYZSsxXSksKytYZSk6UmU8MjQwPyhqZT0oKDE1JlJlKTw8MTIpKygoNjMmSmVbWGUrMV0pPDw2KSsoNjMmSmVbWGUrMl0pLFhlKz0yKTooamU9KCg3JlJlKTw8MTgpKygoNjMmSmVbWGUrMV0pPDwxMikrKCg2MyZKZVtYZSsyXSk8PDYpKyg2MyZKZVtYZSszXSksWGUrPTMpLGpl'@;
put 'PDY1NTM2Pyh2ZVtGZSsrXT1tWzErKGplKj0yKV18fG1bamVdLG1bamUrMV0+MCYmKHZlW0ZlKytdPW1bamVdKSk6KHZlW0ZlKytdPW1bMSsoamU9MiooNTUyOTYrKChEZT1qZS02NTUzNik+PjEwJjEwMjMpKSldfHxtW2plXSxtW2plKzFdPjAmJih2ZVtGZSsrXT1tW2plXSksdmVbRmUrK109'@;
put 'bVsxKyhqZT0yKig1NjMyMCsoMTAyMyZEZSkpKV18fG1bamVdLG1bamUrMV0+MCYmKHZlW0ZlKytdPW1bamVdKSk7dmU9dmUuc2xpY2UoMCxGZSl9ZWxzZSBmb3IoWGU9RmU9MDtYZTxNZTtYZSsrKWplPTIqSmVbWGVdLmNoYXJDb2RlQXQoMCksdmVbRmUrK109bVtqZSsxXXx8bVtqZV0sbVtq'@;
put 'ZSsxXT4wJiYodmVbRmUrK109bVtqZV0pO3JldHVybiBhdCYmImJ1ZiIhPT1hdD8iYXJyIiE9PWF0P3ZlLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKHZlKTp2ZX19LGllPWZ1bmN0aW9uKGope3ZhciBvZSxFPV9bal0uZGVjLG09QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3Miks'@;
put 'QT0wLHRlPTAsc2U9MCx3ZT0wO2Zvcih3ZT0wO3dlPDY1NTM2Oysrd2UpbVsyKndlXT0yNTUsbVsyKndlKzFdPTI1Mztmb3IoQT0wO0E8RS5sZW5ndGg7KytBKShvZT1FW0FdKSYmKHRlPW9lLmNoYXJDb2RlQXQoMCksbVtzZT0yKkFdPTI1NSZ0ZSxtW3NlKzFdPXRlPj44KTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24oSmUpe3ZhciBhdD1KZS5sZW5ndGgsTWU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqYXQpLHZlPTAsWGU9MCxqZT0wO2lmKEJ1ZmZlci5pc0J1ZmZlcihKZSkpZm9yKHZlPTA7dmU8YXQ7dmUrKykyNTU9PT1tW1hlPTIqSmVbdmVdXSYmMjUzPT09bVtYZSsxXSYmKFhlPTIqKChKZVt2ZV08'@;
put 'PDgpK0plW3ZlKzFdKSwrK3ZlKSxNZVtqZSsrXT1tW1hlXSxNZVtqZSsrXT1tW1hlKzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBKZSlmb3IodmU9MDt2ZTxhdDt2ZSsrKVhlPTIqSmUuY2hhckNvZGVBdCh2ZSksMjU1PT09bVtYZV0mJjI1Mz09PW1bWGUrMV0mJihYZT0yKigoSmUuY2hh'@;
put 'ckNvZGVBdCh2ZSk8PDgpK0plLmNoYXJDb2RlQXQodmUrMSkpLCsrdmUpLE1lW2plKytdPW1bWGVdLE1lW2plKytdPW1bWGUrMV07ZWxzZSBmb3IodmU9MDt2ZTxhdDt2ZSsrKTI1NT09PW1bWGU9MipKZVt2ZV1dJiYyNTM9PT1tW1hlKzFdJiYoWGU9MiooKEplW3ZlXTw8OCkrSmVbdmUrMV0p'@;
put 'LCsrdmUpLE1lW2plKytdPW1bWGVdLE1lW2plKytdPW1bWGUrMV07cmV0dXJuIE1lLnNsaWNlKDAsamUpLnRvU3RyaW5nKCJ1Y3MyIil9fTt3WzY1MDAxXT1mdW5jdGlvbiBIKGope2lmKCJzdHJpbmciPT10eXBlb2YgailyZXR1cm4gSChqLnNwbGl0KCIiKS5tYXAoTikpO3ZhciBFPWoubGVu'@;
put 'Z3RoLG09MCxBPTA7NCpFPlcmJihXPTQqRSxZPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSk7dmFyIG9lPTA7RT49MyYmMjM5PT1qWzBdJiYxODc9PWpbMV0mJjE5MT09alsyXSYmKG9lPTMpO2Zvcih2YXIgdGU9MSxzZT0wLHdlPTA7b2U8RTtvZSs9dGUpdGU9MSwod2U9altvZV0pPDEyOD9tPXdl'@;
put 'OndlPDIyND8obT02NCooMzEmd2UpKyg2MyZqW29lKzFdKSx0ZT0yKTp3ZTwyNDA/KG09KCgxNSZ3ZSk8PDEyKSs2NCooNjMmaltvZSsxXSkrKDYzJmpbb2UrMl0pLHRlPTMpOihtPTI2MjE0NCooNyZ3ZSkrKCg2MyZqW29lKzFdKTw8MTIpKzY0Kig2MyZqW29lKzJdKSsoNjMmaltvZSszXSks'@;
put 'dGU9NCksbTw2NTUzNj8oWVtzZSsrXT0yNTUmbSxZW3NlKytdPW0+PjgpOihBPTU1Mjk2KygobS09NjU1MzYpPj4xMCYxMDIzKSxtPTU2MzIwKygxMDIzJm0pLFlbc2UrK109MjU1JkEsWVtzZSsrXT1BPj4+OCxZW3NlKytdPTI1NSZtLFlbc2UrK109bT4+PjgmMjU1KTtyZXR1cm4gWS5zbGlj'@;
put 'ZSgwLHNlKS50b1N0cmluZygidWNzMiIpfSxQWzY1MDAxXT1mdW5jdGlvbihqLEUpe2lmKEwmJkJ1ZmZlci5pc0J1ZmZlcihqKSlyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9qLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKGopOmo7dmFyIG09ai5sZW5ndGgsQT0wLG9l'@;
put 'PTAsdGU9MCxzZT0ic3RyaW5nIj09dHlwZW9mIGo7NCptPlcmJihXPTQqbSxZPUJ1ZmZlci5hbGxvY1Vuc2FmZShXKSk7Zm9yKHZhciB3ZT0wO3dlPG07Kyt3ZSkoQT1zZT9qLmNoYXJDb2RlQXQod2UpOmpbd2VdLmNoYXJDb2RlQXQoMCkpPD0xMjc/WVt0ZSsrXT1BOkE8PTIwNDc/KFlbdGUr'@;
put 'K109MTkyKyhBPj42KSxZW3RlKytdPTEyOCsoNjMmQSkpOkE+PTU1Mjk2JiZBPD01NzM0Mz8oQS09NTUyOTYsKyt3ZSxvZT0oc2U/ai5jaGFyQ29kZUF0KHdlKTpqW3dlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsoQTw8MTApLFlbdGUrK109MjQwKyhvZT4+PjE4JjcpLFlbdGUrK109MTQ0Kyhv'@;
put 'ZT4+PjEyJjYzKSxZW3RlKytdPTEyOCsob2U+Pj42JjYzKSxZW3RlKytdPTEyOCsoNjMmb2UpKTooWVt0ZSsrXT0yMjQrKEE+PjEyKSxZW3RlKytdPTEyOCsoQT4+NiY2MyksWVt0ZSsrXT0xMjgrKDYzJkEpKTtyZXR1cm4gRSYmImJ1ZiIhPT1FPyJhcnIiIT09RT9ZLnNsaWNlKDAsdGUpLnRv'@;
put 'U3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKFksMCx0ZSk6WS5zbGljZSgwLHRlKX19dmFyIGxlPWZ1bmN0aW9uKCl7aWYoTCl7aWYoRlt5WzBdXSlyZXR1cm47dmFyIGo9MCxFPTA7Zm9yKGo9MDtqPHkubGVuZ3RoOysrailfW0U9eVtqXV0mJihGW0VdPUooRSksT1tFXT1lZShFKSk7'@;
put 'Zm9yKGo9MDtqPGcubGVuZ3RoOysrailfW0U9Z1tqXV0mJihGW0VdPWllKEUpLE9bRV09cmUoRSkpO2ZvcihqPTA7ajxCLmxlbmd0aDsrK2opd1tFPUJbal1dJiYoRltFXT13W0VdKSxQW0VdJiYoT1tFXT1QW0VdKX19LG1lPWZ1bmN0aW9uKEgsail7cmV0dXJuIiJ9LF9lPWZ1bmN0aW9uKGop'@;
put 'e2RlbGV0ZSBGW2pdLGRlbGV0ZSBPW2pdfSxTZT17ZW5jYWNoZTpsZSxkZWNhY2hlOmZ1bmN0aW9uKCl7aWYoTCl7aWYoIUZbeVswXV0pcmV0dXJuO3kuZm9yRWFjaChfZSksZy5mb3JFYWNoKF9lKSxCLmZvckVhY2goX2UpfXA9bWUsYj0wfSxzYmNzOnksZGJjczpnfTtsZSgpO3ZhciB6ZT0i'@;
put 'QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscD1tZSxiPTA7cmV0dXJuIF8udXRpbHM9e2RlY29kZTpmdW5jdGlvbiBIKGosRSl7dmFyIG07aWYobT1GW2pdKXJldHVybiBtKEUpO2lmKCJzdHJpbmciPT10eXBlb2YgRSly'@;
put 'ZXR1cm4gSChqLEUuc3BsaXQoIiIpLm1hcChOKSk7dmFyIHZlLEE9RS5sZW5ndGgsb2U9bmV3IEFycmF5KEEpLHRlPSIiLHNlPTAsd2U9MCxVZT0xLEplPTAsYXQ9MCxNZT1fW2pdLFhlPSIiO2lmKE1lJiYodmU9TWUuZGVjKSlmb3Iod2U9MDt3ZTxBO3dlKz1VZSl7aWYoVWU9MiwodGU9dmVb'@;
put 'KEVbd2VdPDw4KStFW3dlKzFdXSl8fChVZT0xLHRlPXZlW0Vbd2VdXSksIXRlKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGNvZGU6ICIrRVt3ZV0rIiAiK0Vbd2UrVWUtMV0rIiAiK3dlKyIgIitVZSsiICIrdmVbRVt3ZV1dKTtvZVtKZSsrXT10ZX1lbHNle2lmKCEoWGU9SVtqXSkp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIraik7c3dpdGNoKFhlKXtjYXNlInV0ZjgiOmZvcihBPj0zJiYyMzk9PUVbMF0mJjE4Nz09RVsxXSYmMTkxPT1FWzJdJiYod2U9Myk7d2U8QTt3ZSs9VWUpVWU9MSxFW3dlXTwxMjg/c2U9RVt3ZV06RVt3ZV08MjI0PyhzZT02NCoo'@;
put 'MzEmRVt3ZV0pKyg2MyZFW3dlKzFdKSxVZT0yKTpFW3dlXTwyNDA/KHNlPSgoMTUmRVt3ZV0pPDwxMikrNjQqKDYzJkVbd2UrMV0pKyg2MyZFW3dlKzJdKSxVZT0zKTooc2U9MjYyMTQ0Kig3JkVbd2VdKSsoKDYzJkVbd2UrMV0pPDwxMikrNjQqKDYzJkVbd2UrMl0pKyg2MyZFW3dlKzNdKSxV'@;
put 'ZT00KSxzZTw2NTUzNnx8KGF0PTU1Mjk2Kygoc2UtPTY1NTM2KT4+MTAmMTAyMyksc2U9NTYzMjArKDEwMjMmc2UpLG9lW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoYXQpKSxvZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztjYXNlImFzY2lpIjppZihMJiZCdWZmZXIu'@;
put 'aXNCdWZmZXIoRSkpcmV0dXJuIEUudG9TdHJpbmcoWGUpO2Zvcih3ZT0wO3dlPEE7d2UrKylvZVt3ZV09U3RyaW5nLmZyb21DaGFyQ29kZShFW3dlXSk7SmU9QTticmVhaztjYXNlInV0ZjE2bGUiOmlmKEE+PTImJjI1NT09RVswXSYmMjU0PT1FWzFdJiYod2U9MiksTCYmQnVmZmVyLmlzQnVm'@;
put 'ZmVyKEUpKXJldHVybiBFLnRvU3RyaW5nKFhlKTtmb3IoVWU9Mjt3ZSsxPEE7d2UrPVVlKW9lW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKEVbd2UrMV08PDgpK0Vbd2VdKTticmVhaztjYXNlInV0ZjE2YmUiOmZvcihBPj0yJiYyNTQ9PUVbMF0mJjI1NT09RVsxXSYmKHdlPTIpLFVlPTI7'@;
put 'd2UrMTxBO3dlKz1VZSlvZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChFW3dlXTw8OCkrRVt3ZSsxXSk7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3IoQT49NCYmMjU1PT1FWzBdJiYyNTQ9PUVbMV0mJjA9PT1FWzJdJiYwPT09RVszXSYmKHdlPTQpLFVlPTQ7d2U8QTt3ZSs9VWUpKHNlPShF'@;
put 'W3dlKzNdPDwyNCkrKEVbd2UrMl08PDE2KSsoRVt3ZSsxXTw8OCkrRVt3ZV0pPjY1NTM1PyhzZS09NjU1MzYsb2VbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nisoc2U+PjEwJjEwMjMpKSxvZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJnNlKSkpOm9lW0pl'@;
put 'KytdPVN0cmluZy5mcm9tQ2hhckNvZGUoc2UpO2JyZWFrO2Nhc2UidXRmMzJiZSI6Zm9yKEE+PTQmJjI1NT09RVszXSYmMjU0PT1FWzJdJiYwPT09RVsxXSYmMD09PUVbMF0mJih3ZT00KSxVZT00O3dlPEE7d2UrPVVlKShzZT0oRVt3ZV08PDI0KSsoRVt3ZSsxXTw8MTYpKyhFW3dlKzJdPDw4'@;
put 'KStFW3dlKzNdKT42NTUzNT8oc2UtPTY1NTM2LG9lW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKHNlPj4xMCYxMDIzKSksb2VbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZzZSkpKTpvZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztj'@;
put 'YXNlInV0ZjciOmZvcihBPj00JiY0Mz09RVswXSYmNDc9PUVbMV0mJjExOD09RVsyXSYmKEE+PTUmJjU2PT1FWzNdJiY0NT09RVs0XT93ZT01Oig1Nj09RVszXXx8NTc9PUVbM118fDQzPT1FWzNdfHw0Nz09RVszXSkmJih3ZT00KSk7d2U8QTt3ZSs9VWUpaWYoNDM9PT1FW3dlXSlpZihVZT0x'@;
put 'LDQ1IT09RVt3ZSsxXSl7Zm9yKDtTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrVWVdKS5tYXRjaCgvW0EtWmEtejAtOStcL10vKTspVWUrKzt2YXIgamU9MDs0NT09PUVbd2UrVWVdJiYoKytVZSxqZT0xKTtmb3IodmFyIERlPVtdLEZlPSIiLGtlPTAsQWU9MCxfdD0wLG50PTAsUWU9MTtRZTxV'@;
put 'ZS1qZSYmKGtlPXplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShFW3dlK1FlKytdKSksQWU9emUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrUWUrK10pKSxEZS5wdXNoKGtlPDwyfEFlPj40KSwtMSE9PShfdD16ZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVt3'@;
put 'ZStRZSsrXSkpKSYmKERlLnB1c2goKDE1JkFlKTw8NHxfdD4+MiksLTEhPT0obnQ9emUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrUWUrK10pKSkpKTspbnQ8NjQmJkRlLnB1c2goKDMmX3QpPDw2fG50KTtmb3IoRmU9SCgxMjAxLERlKSxRZT0wO1FlPEZlLmxlbmd0aDsrK1Fl'@;
put 'KW9lW0plKytdPUZlLmNoYXJBdChRZSl9ZWxzZSBVZT0yLG9lW0plKytdPSIrIjtlbHNlIFVlPTEsb2VbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZShFW3dlXSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIG1hZ2ljOiAiK2orIiAiK0lbal0pfX1yZXR1cm4g'@;
put 'b2Uuc2xpY2UoMCxKZSkuam9pbigiIil9LGVuY29kZTpmdW5jdGlvbiBIKGosRSxtKXtpZihqPT09YiYmcClyZXR1cm4gcChFLG0pO2lmKE9bal0pcmV0dXJuKHA9T1tiPWpdKShFLG0pO0wmJkJ1ZmZlci5pc0J1ZmZlcihFKSYmKEU9RS50b1N0cmluZygidXRmOCIpKTt2YXIgYXQsQT1FLmxl'@;
put 'bmd0aCxvZT1MP0J1ZmZlci5hbGxvY1Vuc2FmZSg0KkEpOltdLHRlPTAsc2U9MCx3ZT0wLFVlPTAsSmU9X1tqXSxNZT0iIix2ZT0ic3RyaW5nIj09dHlwZW9mIEU7aWYoSmUmJihhdD1KZS5lbmMpKWZvcihzZT0wO3NlPEE7KytzZSwrK3dlKSh0ZT1hdFt2ZT9FLmNoYXJBdChzZSk6RVtzZV1d'@;
put 'KT4yNTU/KG9lW3dlXT10ZT4+OCxvZVsrK3dlXT0yNTUmdGUpOm9lW3dlXT0yNTUmdGU7ZWxzZXtpZighKE1lPUlbal0pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK2opO3N3aXRjaChNZSl7Y2FzZSJ1dGY4IjppZihMJiZ2ZSl7d2U9KG9lPUsoRSxNZSkpLmxlbmd0aDti'@;
put 'cmVha31mb3Ioc2U9MDtzZTxBOysrc2UsKyt3ZSkodGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKTw9MTI3P29lW3dlXT10ZTp0ZTw9MjA0Nz8ob2Vbd2VdPTE5MisodGU+PjYpLG9lWysrd2VdPTEyOCsoNjMmdGUpKTp0ZT49NTUyOTYmJnRlPD01NzM0Mz8odGUt'@;
put 'PTU1Mjk2LFVlPSh2ZT9FLmNoYXJDb2RlQXQoKytzZSk6RVsrK3NlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsodGU8PDEwKSxvZVt3ZV09MjQwKyhVZT4+PjE4JjcpLG9lWysrd2VdPTE0NCsoVWU+Pj4xMiY2Myksb2VbKyt3ZV09MTI4KyhVZT4+PjYmNjMpLG9lWysrd2VdPTEyOCsoNjMmVWUp'@;
put 'KToob2Vbd2VdPTIyNCsodGU+PjEyKSxvZVsrK3dlXT0xMjgrKHRlPj42JjYzKSxvZVsrK3dlXT0xMjgrKDYzJnRlKSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoTCYmInN0cmluZyI9PXR5cGVvZiBFKXt3ZT0ob2U9SyhFLE1lKSkubGVuZ3RoO2JyZWFrfWZvcihzZT0wO3NlPEE7KytzZSwrK3dl'@;
put 'KXtpZighKCh0ZT12ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCkpPD0xMjcpKXRocm93IG5ldyBFcnJvcigiYmFkIGFzY2lpICIrdGUpO29lW3dlXT10ZX1icmVhaztjYXNlInV0ZjE2bGUiOmlmKEwmJiJzdHJpbmciPT10eXBlb2YgRSl7d2U9KG9lPUsoRSxNZSkpLmxl'@;
put 'bmd0aDticmVha31mb3Ioc2U9MDtzZTxBOysrc2UpdGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApLG9lW3dlKytdPTI1NSZ0ZSxvZVt3ZSsrXT10ZT4+ODticmVhaztjYXNlInV0ZjE2YmUiOmZvcihzZT0wO3NlPEE7KytzZSl0ZT12ZT9FLmNoYXJDb2RlQXQoc2Up'@;
put 'OkVbc2VdLmNoYXJDb2RlQXQoMCksb2Vbd2UrK109dGU+Pjgsb2Vbd2UrK109MjU1JnRlO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKHNlPTA7c2U8QTsrK3NlKSh0ZT12ZT9FLmNoYXJDb2RlQXQoc2UpOkVbc2VdLmNoYXJDb2RlQXQoMCkpPj01NTI5NiYmdGU8PTU3MzQzJiYodGU9NjU1MzYr'@;
put 'KHRlLTU1Mjk2PDwxMCkrKEVbKytzZV0uY2hhckNvZGVBdCgwKS01NjMyMCkpLG9lW3dlKytdPTI1NSZ0ZSxvZVt3ZSsrXT0yNTUmKHRlPj49OCksb2Vbd2UrK109MjU1Jih0ZT4+PTgpLG9lW3dlKytdPTI1NSYodGU+Pj04KTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihzZT0wO3NlPEE7Kytz'@;
put 'ZSkodGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKT49NTUyOTYmJnRlPD01NzM0MyYmKHRlPTY1NTM2Kyh0ZS01NTI5Njw8MTApKyhFWysrc2VdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxvZVt3ZSszXT0yNTUmdGUsb2Vbd2UrMl09MjU1Jih0ZT4+PTgpLG9lW3dl'@;
put 'KzFdPTI1NSYodGU+Pj04KSxvZVt3ZV09MjU1Jih0ZT4+PTgpLHdlKz00O2JyZWFrO2Nhc2UidXRmNyI6Zm9yKHNlPTA7c2U8QTtzZSsrKXt2YXIgWGU9dmU/RS5jaGFyQXQoc2UpOkVbc2VdLmNoYXJBdCgwKTtpZigiKyIhPT1YZSlpZigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNk'@;
put 'ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKCksLS4vOj8iLmluZGV4T2YoWGUpPi0xKW9lW3dlKytdPVhlLmNoYXJDb2RlQXQoMCk7ZWxzZXt2YXIgamU9SCgxMjAxLFhlKTtvZVt3ZSsrXT00MyxvZVt3ZSsrXT16ZS5jaGFyQ29kZUF0KGplWzBdPj4yKSxvZVt3ZSsrXT16ZS5j'@;
put 'aGFyQ29kZUF0KCgoMyZqZVswXSk8PDQpKygoamVbMV18fDApPj40KSksb2Vbd2UrK109emUuY2hhckNvZGVBdCgoKDE1JmplWzFdKTw8MikrKChqZVsyXXx8MCk+PjYpKSxvZVt3ZSsrXT00NX1lbHNlIG9lW3dlKytdPTQzLG9lW3dlKytdPTQ1fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVy'@;
put 'cm9yKCJVbnN1cHBvcnRlZCBtYWdpYzogIitqKyIgIitJW2pdKX19cmV0dXJuIG9lPW9lLnNsaWNlKDAsd2UpLEw/bSYmImJ1ZiIhPT1tPyJhcnIiIT09bT9vZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChvZSk6b2U6InN0ciI9PW0/b2UubWFwKHopLmpvaW4oIiIpOm9lfSxo'@;
put 'YXNjcDpmdW5jdGlvbihqKXtyZXR1cm4hKCFfW2pdJiYhSVtqXSl9LG1hZ2ljOkksY2FjaGU6U2V9LF99KX0sMzE3OToodWUscSk9Pnt2YXIgXyxJLHk7IWZ1bmN0aW9uKGcpe2lmKHR5cGVvZiBET19OT1RfRVhQT1JUX0pTWklQPiJ1Iil1ZS5leHBvcnRzPWcoKTtlbHNlIGlmKHR5cGVvZiBE'@;
put 'T19OT1RfRVhQT1JUX0pTWklQPiJ1IilKU1ppcFN5bmM9ZygpLEk9W10sdm9pZCAwIT09KHk9ImZ1bmN0aW9uIj09dHlwZW9mKF89Zyk/Xy5hcHBseShxLEkpOl8pJiYodWUuZXhwb3J0cz15KTtlbHNle3ZhciBCO3R5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9CPWdsb2JhbFRoaXM6dHlwZW9mIHdp'@;
put 'bmRvdzwidSI/Qj13aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Qj1nbG9iYWw6dHlwZW9mICQ8InUiJiYkLmdsb2JhbD9CPSQuZ2xvYmFsOnR5cGVvZiBzZWxmPCJ1IiYmKEI9c2VsZiksQi5KU1ppcFN5bmM9ZygpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gUChGLE8seil7ZnVuY3Rp'@;
put 'b24gTihVLFcpe2lmKCFPW1VdKXtpZighRltVXSl7aWYoTClyZXR1cm4gTChVLCEwKTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitVKyInIil9dmFyIFg9T1tVXT17ZXhwb3J0czp7fX07RltVXVswXS5jYWxsKFguZXhwb3J0cyxmdW5jdGlvbihlZSl7cmV0dXJuIE4o'@;
put 'RltVXVsxXVtlZV18fGVlKX0sWCxYLmV4cG9ydHMsUCxGLE8seil9cmV0dXJuIE9bVV0uZXhwb3J0c31mb3IodmFyIEw9dm9pZCAwLEs9MDtLPHoubGVuZ3RoO0srKylOKHpbS10pO3JldHVybiBOfSh7MTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej0iQUJDREVGR0hJSktM'@;
put 'TU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO08uZW5jb2RlPWZ1bmN0aW9uKE4sTCl7Zm9yKHZhciBVLFcsWSxYLGVlLEoscmUsSz0iIixpZT0wO2llPE4ubGVuZ3RoOylYPShVPU4uY2hhckNvZGVBdChpZSsrKSk+PjIsZWU9KDMmVSk8PDR8'@;
put 'KFc9Ti5jaGFyQ29kZUF0KGllKyspKT4+NCxKPSgxNSZXKTw8MnwoWT1OLmNoYXJDb2RlQXQoaWUrKykpPj42LHJlPTYzJlksaXNOYU4oVyk/Sj1yZT02NDppc05hTihZKSYmKHJlPTY0KSxLPUsrei5jaGFyQXQoWCkrei5jaGFyQXQoZWUpK3ouY2hhckF0KEopK3ouY2hhckF0KHJlKTtyZXR1'@;
put 'cm4gS30sTy5kZWNvZGU9ZnVuY3Rpb24oTixMKXt2YXIgVyxZLFgsZWUsSixyZSxLPSIiLGllPTA7Zm9yKE49Ti5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7aWU8Ti5sZW5ndGg7KVg9ei5pbmRleE9mKE4uY2hhckF0KGllKyspKSxXPSgxNSYoZWU9ei5pbmRleE9mKE4uY2hh'@;
put 'ckF0KGllKyspKSkpPDw0fChKPXouaW5kZXhPZihOLmNoYXJBdChpZSsrKSkpPj4yLFk9KDMmSik8PDZ8KHJlPXouaW5kZXhPZihOLmNoYXJBdChpZSsrKSkpLEsrPVN0cmluZy5mcm9tQ2hhckNvZGUoWDw8MnxlZT4+NCksNjQhPUomJihLKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFcpKSw2NCE9'@;
put 'cmUmJihLKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFkpKTtyZXR1cm4gS319LHt9XSwyOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHooKXt0aGlzLmNvbXByZXNzZWRTaXplPTAsdGhpcy51bmNvbXByZXNzZWRTaXplPTAsdGhpcy5jcmMzMj0wLHRoaXMuY29tcHJlc3Np'@;
put 'b25NZXRob2Q9bnVsbCx0aGlzLmNvbXByZXNzZWRDb250ZW50PW51bGx9ei5wcm90b3R5cGU9e2dldENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZ2V0Q29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH19LEYuZXhwb3J0cz16fSx7fV0sMzpbZnVuY3Rpb24o'@;
put 'UCxGLE8peyJ1c2Ugc3RyaWN0IjtPLlNUT1JFPXttYWdpYzoiXDBcMCIsY29tcHJlc3M6ZnVuY3Rpb24oeil7cmV0dXJuIHp9LHVuY29tcHJlc3M6ZnVuY3Rpb24oeil7cmV0dXJuIHp9LGNvbXByZXNzSW5wdXRUeXBlOm51bGwsdW5jb21wcmVzc0lucHV0VHlwZTpudWxsfSxPLkRFRkxBVEU9'@;
put 'UCgiLi9mbGF0ZSIpfSx7Ii4vZmxhdGUiOjh9XSw0OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKSxOPVswLDE5OTY5NTk4OTQsMzk5MzkxOTc4OCwyNTY3NTI0Nzk0LDEyNDYzNDEzNywxODg2MDU3NjE1LDM5MTU2MjE2ODUsMjY1NzM5MjAzNSwyNDky'@;
put 'NjgyNzQsMjA0NDUwODMyNCwzNzcyMTE1MjMwLDI1NDcxNzc4NjQsMTYyOTQxOTk1LDIxMjU1NjEwMjEsMzg4NzYwNzA0NywyNDI4NDQ0MDQ5LDQ5ODUzNjU0OCwxNzg5OTI3NjY2LDQwODkwMTY2NDgsMjIyNzA2MTIxNCw0NTA1NDg4NjEsMTg0MzI1ODYwMyw0MTA3NTgwNzUzLDIyMTE2Nzc2'@;
put 'MzksMzI1ODgzOTkwLDE2ODQ3NzcxNTIsNDI1MTEyMjA0MiwyMzIxOTI2NjM2LDMzNTYzMzQ4NywxNjYxMzY1NDY1LDQxOTUzMDI3NTUsMjM2NjExNTMxNyw5OTcwNzMwOTYsMTI4MTk1Mzg4NiwzNTc5ODU1MzMyLDI3MjQ2ODgyNDIsMTAwNjg4ODE0NSwxMjU4NjA3Njg3LDM1MjQxMDE2Mjks'@;
put 'Mjc2ODk0MjQ0Myw5MDEwOTc3MjIsMTExOTAwMDY4NCwzNjg2NTE3MjA2LDI4OTgwNjU3MjgsODUzMDQ0NDUxLDExNzIyNjYxMDEsMzcwNTAxNTc1OSwyODgyNjE2NjY1LDY1MTc2Nzk4MCwxMzczNTAzNTQ2LDMzNjk1NTQzMDQsMzIxODEwNDU5OCw1NjU1MDcyNTMsMTQ1NDYyMTczMSwzNDg1'@;
put 'MTExNzA1LDMwOTk0MzYzMDMsNjcxMjY2OTc0LDE1OTQxOTgwMjQsMzMyMjczMDkzMCwyOTcwMzQ3ODEyLDc5NTgzNTUyNywxNDgzMjMwMjI1LDMyNDQzNjcyNzUsMzA2MDE0OTU2NSwxOTk0MTQ2MTkyLDMxMTU4NTM0LDI1NjM5MDc3NzIsNDAyMzcxNzkzMCwxOTA3NDU5NDY1LDExMjYzNzIx'@;
put 'NSwyNjgwMTUzMjUzLDM5MDQ0MjcwNTksMjAxMzc3NjI5MCwyNTE3MjIwMzYsMjUxNzIxNTM3NCwzNzc1ODMwMDQwLDIxMzc2NTY3NjMsMTQxMzc2ODEzLDI0MzkyNzc3MTksMzg2NTI3MTI5NywxODAyMTk1NDQ0LDQ3Njg2NDg2NiwyMjM4MDAxMzY4LDQwNjY1MDg4NzgsMTgxMjM3MDkyNSw0'@;
put 'NTMwOTI3MzEsMjE4MTYyNTAyNSw0MTExNDUxMjIzLDE3MDYwODg5MDIsMzE0MDQyNzA0LDIzNDQ1MzIyMDIsNDI0MDAxNzUzMiwxNjU4NjU4MjcxLDM2NjYxOTk3NywyMzYyNjcwMzIzLDQyMjQ5OTQ0MDUsMTMwMzUzNTk2MCw5ODQ5NjE0ODYsMjc0NzAwNzA5MiwzNTY5MDM3NTM4LDEyNTYx'@;
put 'NzA4MTcsMTAzNzYwNDMxMSwyNzY1MjEwNzMzLDM1NTQwNzk5OTUsMTEzMTAxNDUwNiw4Nzk2Nzk5OTYsMjkwOTI0MzQ2MiwzNjYzNzcxODU2LDExNDExMjQ0NjcsODU1ODQyMjc3LDI4NTI4MDE2MzEsMzcwODY0ODY0OSwxMzQyNTMzOTQ4LDY1NDQ1OTMwNiwzMTg4Mzk2MDQ4LDMzNzMwMTUx'@;
put 'NzQsMTQ2NjQ3OTkwOSw1NDQxNzk2MzUsMzExMDUyMzkxMywzNDYyNTIyMDE1LDE1OTE2NzEwNTQsNzAyMTM4Nzc2LDI5NjY0NjA0NTAsMzM1Mjc5OTQxMiwxNTA0OTE4ODA3LDc4MzU1MTg3MywzMDgyNjQwNDQzLDMyMzM0NDI5ODksMzk4ODI5MjM4NCwyNTk2MjU0NjQ2LDYyMzE3MDY4LDE5'@;
put 'NTc4MTA4NDIsMzkzOTg0NTk0NSwyNjQ3ODE2MTExLDgxNDcwOTk3LDE5NDM4MDM1MjMsMzgxNDkxODkzMCwyNDg5NTk2ODA0LDIyNTI3NDQzMCwyMDUzNzkwMzc2LDM4MjYxNzU3NTUsMjQ2NjkwNjAxMywxNjc4MTY3NDMsMjA5NzY1MTM3Nyw0MDI3NTUyNTgwLDIyNjU0OTAzODYsNTAzNDQ0'@;
put 'MDcyLDE3NjIwNTA4MTQsNDE1MDQxNzI0NSwyMTU0MTI5MzU1LDQyNjUyMjIyNSwxODUyNTA3ODc5LDQyNzUzMTM1MjYsMjMxMjMxNzkyMCwyODI3NTM2MjYsMTc0MjU1NTg1Miw0MTg5NzA4MTQzLDIzOTQ4Nzc5NDUsMzk3OTE3NzYzLDE2MjIxODM2MzcsMzYwNDM5MDg4OCwyNzE0ODY2NTU4'@;
put 'LDk1MzcyOTczMiwxMzQwMDc2NjI2LDM1MTg3MTk5ODUsMjc5NzM2MDk5OSwxMDY4ODI4MzgxLDEyMTk2Mzg4NTksMzYyNDc0MTg1MCwyOTM2Njc1MTQ4LDkwNjE4NTQ2MiwxMDkwODEyNTEyLDM3NDc2NzIwMDMsMjgyNTM3OTY2OSw4MjkzMjkxMzUsMTE4MTMzNTE2MSwzNDEyMTc3ODA0LDMx'@;
put 'NjA4MzQ4NDIsNjI4MDg1NDA4LDEzODI2MDUzNjYsMzQyMzM2OTEwOSwzMTM4MDc4NDY3LDU3MDU2MjIzMywxNDI2NDAwODE1LDMzMTczMTY1NDIsMjk5ODczMzYwOCw3MzMyMzk5NTQsMTU1NTI2MTk1NiwzMjY4OTM1NTkxLDMwNTAzNjA2MjUsNzUyNDU5NDAzLDE1NDEzMjAyMjEsMjYwNzA3'@;
put 'MTkyMCwzOTY1OTczMDMwLDE5Njk5MjI5NzIsNDA3MzU0OTgsMjYxNzgzNzIyNSwzOTQzNTc3MTUxLDE5MTMwODc4NzcsODM5MDgzNzEsMjUxMjM0MTYzNCwzODAzNzQwNjkyLDIwNzUyMDg2MjIsMjEzMjYxMTEyLDI0NjMyNzI2MDMsMzg1NTk5MDI4NSwyMDk0ODU0MDcxLDE5ODk1ODg4MSwy'@;
put 'MjYyMDI5MDEyLDQwNTcyNjA2MTAsMTc1OTM1OTk5Miw1MzQ0MTQxOTAsMjE3NjcxODU0MSw0MTM5MzI5MTE1LDE4NzM4MzYwMDEsNDE0NjY0NTY3LDIyODIyNDg5MzQsNDI3OTIwMDM2OCwxNzExNjg0NTU0LDI4NTI4MTExNiwyNDA1ODAxNzI3LDQxNjcyMTY3NDUsMTYzNDQ2Nzc5NSwzNzYy'@;
put 'Mjk3MDEsMjY4NTA2Nzg5NiwzNjA4MDA3NDA2LDEzMDg5MTg2MTIsOTU2NTQzOTM4LDI4MDg1NTUxMDUsMzQ5NTk1ODI2MywxMjMxNjM2MzAxLDEwNDc0MjcwMzUsMjkzMjk1OTgxOCwzNjU0NzAzODM2LDEwODgzNTkyNzAsOTM2OTE4ZTMsMjg0NzcxNDg5OSwzNzM2ODM3ODI5LDEyMDI5MDA4'@;
put 'NjMsODE3MjMzODk3LDMxODMzNDIxMDgsMzQwMTIzNzEzMCwxNDA0Mjc3NTUyLDYxNTgxODE1MCwzMTM0MjA3NDkzLDM0NTM0MjEyMDMsMTQyMzg1NzQ0OSw2MDE0NTA0MzEsMzAwOTgzNzYxNCwzMjk0NzEwNDU2LDE1NjcxMDM3NDYsNzExOTI4NzI0LDMwMjA2Njg0NzEsMzI3MjM4MDA2NSwx'@;
put 'NTEwMzM0MjM1LDc1NTE2NzExN107Ri5leHBvcnRzPWZ1bmN0aW9uKEssVSl7aWYodHlwZW9mIEs+InUifHwhSy5sZW5ndGgpcmV0dXJuIDA7dmFyIFc9InN0cmluZyIhPT16LmdldFR5cGVPZihLKTt0eXBlb2YgVT4idSImJihVPTApO3ZhciBlZT0wO1U9flU7Zm9yKHZhciBKPTAscmU9Sy5s'@;
put 'ZW5ndGg7SjxyZTtKKyspZWU9Vz9LW0pdOksuY2hhckNvZGVBdChKKSxVPVU+Pj44Xk5bMjU1JihVXmVlKV07cmV0dXJuflV9fSx7Ii4vdXRpbHMiOjIxfV0sNTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIik7ZnVuY3Rpb24gTihMKXt0aGlzLmRhdGE9'@;
put 'bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuaW5kZXg9MH1OLnByb3RvdHlwZT17Y2hlY2tPZmZzZXQ6ZnVuY3Rpb24oTCl7dGhpcy5jaGVja0luZGV4KHRoaXMuaW5kZXgrTCl9LGNoZWNrSW5kZXg6ZnVuY3Rpb24oTCl7aWYodGhpcy5sZW5ndGg8THx8TDwwKXRocm93IG5ldyBFcnJvcigiRW5k'@;
put 'IG9mIGRhdGEgcmVhY2hlZCAoZGF0YSBsZW5ndGggPSAiK3RoaXMubGVuZ3RoKyIsIGFza2VkIGluZGV4ID0gIitMKyIpLiBDb3JydXB0ZWQgemlwID8iKX0sc2V0SW5kZXg6ZnVuY3Rpb24oTCl7dGhpcy5jaGVja0luZGV4KEwpLHRoaXMuaW5kZXg9TH0sc2tpcDpmdW5jdGlvbihMKXt0aGlz'@;
put 'LnNldEluZGV4KHRoaXMuaW5kZXgrTCl9LGJ5dGVBdDpmdW5jdGlvbihMKXt9LHJlYWRJbnQ6ZnVuY3Rpb24oTCl7dmFyIFUsSz0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KEwpLFU9dGhpcy5pbmRleCtMLTE7VT49dGhpcy5pbmRleDtVLS0pSz0oSzw8OCkrdGhpcy5ieXRlQXQoVSk7cmV0dXJu'@;
put 'IHRoaXMuaW5kZXgrPUwsS30scmVhZFN0cmluZzpmdW5jdGlvbihMKXtyZXR1cm4gei50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnJlYWREYXRhKEwpKX0scmVhZERhdGE6ZnVuY3Rpb24oTCl7fSxsYXN0SW5kZXhPZlNpZ25hdHVyZTpmdW5jdGlvbihMKXt9LHJlYWREYXRlOmZ1bmN0aW9u'@;
put 'KCl7dmFyIEw9dGhpcy5yZWFkSW50KDQpO3JldHVybiBuZXcgRGF0ZSgxOTgwKyhMPj4yNSYxMjcpLChMPj4yMSYxNSktMSxMPj4xNiYzMSxMPj4xMSYzMSxMPj41JjYzLCgzMSZMKTw8MSl9fSxGLmV4cG9ydHM9Tn0seyIuL3V0aWxzIjoyMX1dLDY6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0'@;
put 'cmljdCI7Ty5iYXNlNjQ9ITEsTy5iaW5hcnk9ITEsTy5kaXI9ITEsTy5jcmVhdGVGb2xkZXJzPSExLE8uZGF0ZT1udWxsLE8uY29tcHJlc3Npb249bnVsbCxPLmNvbW1lbnQ9bnVsbH0se31dLDc6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91dGlscyIpO08uc3Ry'@;
put 'aW5nMmJpbmFyeT1mdW5jdGlvbihOKXtyZXR1cm4gei5zdHJpbmcyYmluYXJ5KE4pfSxPLnN0cmluZzJVaW50OEFycmF5PWZ1bmN0aW9uKE4pe3JldHVybiB6LnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixOKX0sTy51aW50OEFycmF5MlN0cmluZz1mdW5jdGlvbihOKXtyZXR1cm4gei50cmFu'@;
put 'c2Zvcm1Ubygic3RyaW5nIixOKX0sTy5zdHJpbmcyQmxvYj1mdW5jdGlvbihOKXt2YXIgTD16LnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsTik7cmV0dXJuIHouYXJyYXlCdWZmZXIyQmxvYihMKX0sTy5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKE4pe3JldHVybiB6LmFycmF5QnVmZmVy'@;
put 'MkJsb2IoTil9LE8udHJhbnNmb3JtVG89ZnVuY3Rpb24oTixMKXtyZXR1cm4gei50cmFuc2Zvcm1UbyhOLEwpfSxPLmdldFR5cGVPZj1mdW5jdGlvbihOKXtyZXR1cm4gei5nZXRUeXBlT2YoTil9LE8uY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKE4pe3JldHVybiB6LmNoZWNrU3VwcG9ydChOKX0s'@;
put 'Ty5NQVhfVkFMVUVfMTZCSVRTPXouTUFYX1ZBTFVFXzE2QklUUyxPLk1BWF9WQUxVRV8zMkJJVFM9ei5NQVhfVkFMVUVfMzJCSVRTLE8ucHJldHR5PWZ1bmN0aW9uKE4pe3JldHVybiB6LnByZXR0eShOKX0sTy5maW5kQ29tcHJlc3Npb249ZnVuY3Rpb24oTil7cmV0dXJuIHouZmluZENvbXBy'@;
put 'ZXNzaW9uKE4pfSxPLmlzUmVnRXhwPWZ1bmN0aW9uKE4pe3JldHVybiB6LmlzUmVnRXhwKE4pfX0seyIuL3V0aWxzIjoyMX1dLDg6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9dHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2Yg'@;
put 'VWludDMyQXJyYXk8InUiLE49UCgicGFrbyIpO08udW5jb21wcmVzc0lucHV0VHlwZT16PyJ1aW50OGFycmF5IjoiYXJyYXkiLE8uY29tcHJlc3NJbnB1dFR5cGU9ej8idWludDhhcnJheSI6ImFycmF5IixPLm1hZ2ljPSJcYlwwIixPLmNvbXByZXNzPWZ1bmN0aW9uKEwpe3JldHVybiBOLmRl'@;
put 'ZmxhdGVSYXcoTCl9LE8udW5jb21wcmVzcz1mdW5jdGlvbihMKXtyZXR1cm4gTi5pbmZsYXRlUmF3KEwpfX0se3Bha286MjR9XSw5OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vYmFzZTY0Iik7ZnVuY3Rpb24gTihMLEspe2lmKCEodGhpcyBpbnN0YW5jZW9mIE4p'@;
put 'KXJldHVybiBuZXcgTihMLEspO3RoaXMuZmlsZXM9e30sdGhpcy5jb21tZW50PW51bGwsdGhpcy5yb290PSIiLEwmJnRoaXMubG9hZChMLEspLHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgVT1uZXcgTjtmb3IodmFyIFcgaW4gdGhpcykiZnVuY3Rpb24iIT10eXBlb2YgdGhpc1tXXSYmKFVb'@;
put 'V109dGhpc1tXXSk7cmV0dXJuIFV9fShOLnByb3RvdHlwZT1QKCIuL29iamVjdCIpKS5sb2FkPVAoIi4vbG9hZCIpLE4uc3VwcG9ydD1QKCIuL3N1cHBvcnQiKSxOLmRlZmF1bHRzPVAoIi4vZGVmYXVsdHMiKSxOLnV0aWxzPVAoIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIiksTi5iYXNlNjQ9'@;
put 'e2VuY29kZTpmdW5jdGlvbihMKXtyZXR1cm4gei5lbmNvZGUoTCl9LGRlY29kZTpmdW5jdGlvbihMKXtyZXR1cm4gei5kZWNvZGUoTCl9fSxOLmNvbXByZXNzaW9ucz1QKCIuL2NvbXByZXNzaW9ucyIpLEYuZXhwb3J0cz1OfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzaW9ucyI6MywiLi9k'@;
put 'ZWZhdWx0cyI6NiwiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiOjcsIi4vbG9hZCI6MTAsIi4vb2JqZWN0IjoxMywiLi9zdXBwb3J0IjoxN31dLDEwOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vYmFzZTY0IiksTj1QKCIuL3ppcEVudHJpZXMiKTtGLmV4cG9ydHM9'@;
put 'ZnVuY3Rpb24oTCxLKXt2YXIgVSxXLFksWDtmb3IoKEs9S3x8e30pLmJhc2U2NCYmKEw9ei5kZWNvZGUoTCkpLFU9KFc9bmV3IE4oTCxLKSkuZmlsZXMsWT0wO1k8VS5sZW5ndGg7WSsrKXRoaXMuZmlsZSgoWD1VW1ldKS5maWxlTmFtZSxYLmRlY29tcHJlc3NlZCx7YmluYXJ5OiEwLG9wdGlt'@;
put 'aXplZEJpbmFyeVN0cmluZzohMCxkYXRlOlguZGF0ZSxkaXI6WC5kaXIsY29tbWVudDpYLmZpbGVDb21tZW50Lmxlbmd0aD9YLmZpbGVDb21tZW50Om51bGwsY3JlYXRlRm9sZGVyczpLLmNyZWF0ZUZvbGRlcnN9KTtyZXR1cm4gVy56aXBDb21tZW50Lmxlbmd0aCYmKHRoaXMuY29tbWVudD1X'@;
put 'LnppcENvbW1lbnQpLHRoaXN9fSx7Ii4vYmFzZTY0IjoxLCIuL3ppcEVudHJpZXMiOjIyfV0sMTE6W2Z1bmN0aW9uKFAsRixPKXsoZnVuY3Rpb24oeil7InVzZSBzdHJpY3QiO3ZhciBOPWZ1bmN0aW9uKCl7fTtpZih0eXBlb2YgejwidSIpe3ZhciBMPSF6LmZyb207aWYoIUwpdHJ5e3ouZnJv'@;
put 'bSgiZm9vIiwidXRmOCIpfWNhdGNoe0w9ITB9Tj1MP2Z1bmN0aW9uKEssVSl7cmV0dXJuIFU/bmV3IHooSyxVKTpuZXcgeihLKX06ei5mcm9tLmJpbmQoeiksei5hbGxvY3x8KHouYWxsb2M9ZnVuY3Rpb24oSyl7cmV0dXJuIG5ldyB6KEspfSl9Ri5leHBvcnRzPWZ1bmN0aW9uKEssVSl7cmV0'@;
put 'dXJuIm51bWJlciI9PXR5cGVvZiBLP3ouYWxsb2MoSyk6TihLLFUpfSxGLmV4cG9ydHMudGVzdD1mdW5jdGlvbihLKXtyZXR1cm4gei5pc0J1ZmZlcihLKX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxMjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgej1QKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKTtmdW5jdGlvbiBOKEwpe3RoaXMuZGF0YT1MLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShOLnByb3RvdHlwZT1uZXcgeikucmVhZERhdGE9ZnVuY3Rpb24oTCl7dGhpcy5jaGVja09mZnNldChM'@;
put 'KTt2YXIgSz10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K0wpO3JldHVybiB0aGlzLmluZGV4Kz1MLEt9LEYuZXhwb3J0cz1OfSx7Ii4vdWludDhBcnJheVJlYWRlciI6MTh9XSwxMzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3N1cHBvcnQi'@;
put 'KSxOPVAoIi4vdXRpbHMiKSxMPVAoIi4vY3JjMzIiKSxLPVAoIi4vc2lnbmF0dXJlIiksVT1QKCIuL2RlZmF1bHRzIiksVz1QKCIuL2Jhc2U2NCIpLFk9UCgiLi9jb21wcmVzc2lvbnMiKSxYPVAoIi4vY29tcHJlc3NlZE9iamVjdCIpLGVlPVAoIi4vbm9kZUJ1ZmZlciIpLEo9UCgiLi91dGY4'@;
put 'IikscmU9UCgiLi9zdHJpbmdXcml0ZXIiKSxpZT1QKCIuL3VpbnQ4QXJyYXlXcml0ZXIiKSxsZT1mdW5jdGlvbihqKXtpZihqLl9kYXRhIGluc3RhbmNlb2YgWCYmKGouX2RhdGE9ai5fZGF0YS5nZXRDb250ZW50KCksai5vcHRpb25zLmJpbmFyeT0hMCxqLm9wdGlvbnMuYmFzZTY0PSExLCJ1'@;
put 'aW50OGFycmF5Ij09PU4uZ2V0VHlwZU9mKGouX2RhdGEpKSl7dmFyIEU9ai5fZGF0YTtqLl9kYXRhPW5ldyBVaW50OEFycmF5KEUubGVuZ3RoKSwwIT09RS5sZW5ndGgmJmouX2RhdGEuc2V0KEUsMCl9cmV0dXJuIGouX2RhdGF9LG1lPWZ1bmN0aW9uKGope3ZhciBFPWxlKGopO3JldHVybiJz'@;
put 'dHJpbmciPT09Ti5nZXRUeXBlT2YoRSk/IWoub3B0aW9ucy5iaW5hcnkmJnoubm9kZWJ1ZmZlcj9lZShFLCJ1dGYtOCIpOmouYXNCaW5hcnkoKTpFfSxfZT1mdW5jdGlvbihqKXt2YXIgRT1sZSh0aGlzKTtyZXR1cm4gbnVsbD09PUV8fHR5cGVvZiBFPiJ1Ij8iIjoodGhpcy5vcHRpb25zLmJh'@;
put 'c2U2NCYmKEU9Vy5kZWNvZGUoRSkpLEU9aiYmdGhpcy5vcHRpb25zLmJpbmFyeT9ILnV0ZjhkZWNvZGUoRSk6Ti50cmFuc2Zvcm1Ubygic3RyaW5nIixFKSwhaiYmIXRoaXMub3B0aW9ucy5iaW5hcnkmJihFPU4udHJhbnNmb3JtVG8oInN0cmluZyIsSC51dGY4ZW5jb2RlKEUpKSksRSl9LFRl'@;
put 'PWZ1bmN0aW9uKGosRSxtKXt0aGlzLm5hbWU9aix0aGlzLmRpcj1tLmRpcix0aGlzLmRhdGU9bS5kYXRlLHRoaXMuY29tbWVudD1tLmNvbW1lbnQsdGhpcy5fZGF0YT1FLHRoaXMub3B0aW9ucz1tLHRoaXMuX2luaXRpYWxNZXRhZGF0YT17ZGlyOm0uZGlyLGRhdGU6bS5kYXRlfX07VGUucHJv'@;
put 'dG90eXBlPXthc1RleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gX2UuY2FsbCh0aGlzLCEwKX0sYXNCaW5hcnk6ZnVuY3Rpb24oKXtyZXR1cm4gX2UuY2FsbCh0aGlzLCExKX0sYXNOb2RlQnVmZmVyOmZ1bmN0aW9uKCl7dmFyIGo9bWUodGhpcyk7cmV0dXJuIE4udHJhbnNmb3JtVG8oIm5vZGVidWZm'@;
put 'ZXIiLGopfSxhc1VpbnQ4QXJyYXk6ZnVuY3Rpb24oKXt2YXIgaj1tZSh0aGlzKTtyZXR1cm4gTi50cmFuc2Zvcm1UbygidWludDhhcnJheSIsail9LGFzQXJyYXlCdWZmZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hc1VpbnQ4QXJyYXkoKS5idWZmZXJ9fTt2YXIgU2U9ZnVuY3Rpb24oaixF'@;
put 'KXt2YXIgQSxtPSIiO2ZvcihBPTA7QTxFO0ErKyltKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDI1NSZqKSxqPj4+PTg7cmV0dXJuIG19LHplPWZ1bmN0aW9uKCl7dmFyIEUsbSxqPXt9O2ZvcihFPTA7RTxhcmd1bWVudHMubGVuZ3RoO0UrKylmb3IobSBpbiBhcmd1bWVudHNbRV0pYXJndW1lbnRz'@;
put 'W0VdLmhhc093blByb3BlcnR5KG0pJiZ0eXBlb2YgalttXT4idSImJihqW21dPWFyZ3VtZW50c1tFXVttXSk7cmV0dXJuIGp9LHA9ZnVuY3Rpb24oaixFLG0pe3ZhciBvZSxBPU4uZ2V0VHlwZU9mKEUpO2lmKG09ZnVuY3Rpb24oail7cmV0dXJuITA9PT0oaj1qfHx7fSkuYmFzZTY0JiZudWxs'@;
put 'PT1qLmJpbmFyeSYmKGouYmluYXJ5PSEwKSwoaj16ZShqLFUpKS5kYXRlPWouZGF0ZXx8bmV3IERhdGUsbnVsbCE9PWouY29tcHJlc3Npb24mJihqLmNvbXByZXNzaW9uPWouY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSksan0obSksbS5jcmVhdGVGb2xkZXJzJiYob2U9YihqKSkmJnguY2Fs'@;
put 'bCh0aGlzLG9lLCEwKSxtLmRpcnx8bnVsbD09PUV8fHR5cGVvZiBFPiJ1IiltLmJhc2U2ND0hMSxtLmJpbmFyeT0hMSxFPW51bGw7ZWxzZSBpZigic3RyaW5nIj09PUEpbS5iaW5hcnkmJiFtLmJhc2U2NCYmITAhPT1tLm9wdGltaXplZEJpbmFyeVN0cmluZyYmKEU9Ti5zdHJpbmcyYmluYXJ5'@;
put 'KEUpKTtlbHNle2lmKG0uYmFzZTY0PSExLG0uYmluYXJ5PSEwLCEoQXx8RSBpbnN0YW5jZW9mIFgpKXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgb2YgJyIraisiJyBpcyBpbiBhbiB1bnN1cHBvcnRlZCBmb3JtYXQgISIpOyJhcnJheWJ1ZmZlciI9PT1BJiYoRT1OLnRyYW5zZm9ybVRvKCJ1'@;
put 'aW50OGFycmF5IixFKSl9dmFyIHRlPW5ldyBUZShqLEUsbSk7cmV0dXJuIHRoaXMuZmlsZXNbal09dGUsdGV9LGI9ZnVuY3Rpb24oail7Ii8iPT1qLnNsaWNlKC0xKSYmKGo9ai5zdWJzdHJpbmcoMCxqLmxlbmd0aC0xKSk7dmFyIEU9ai5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBFPjA/ai5z'@;
put 'dWJzdHJpbmcoMCxFKToiIn0seD1mdW5jdGlvbihqLEUpe3JldHVybiIvIiE9ai5zbGljZSgtMSkmJihqKz0iLyIpLEU9dHlwZW9mIEU8InUiJiZFLHRoaXMuZmlsZXNbal18fHAuY2FsbCh0aGlzLGosbnVsbCx7ZGlyOiEwLGNyZWF0ZUZvbGRlcnM6RX0pLHRoaXMuZmlsZXNbal19LEM9ZnVu'@;
put 'Y3Rpb24oaixFKXt2YXIgQSxtPW5ldyBYO3JldHVybiBqLl9kYXRhIGluc3RhbmNlb2YgWD8obS51bmNvbXByZXNzZWRTaXplPWouX2RhdGEudW5jb21wcmVzc2VkU2l6ZSxtLmNyYzMyPWouX2RhdGEuY3JjMzIsMD09PW0udW5jb21wcmVzc2VkU2l6ZXx8ai5kaXI/KEU9WS5TVE9SRSxtLmNv'@;
put 'bXByZXNzZWRDb250ZW50PSIiLG0uY3JjMzI9MCk6ai5fZGF0YS5jb21wcmVzc2lvbk1ldGhvZD09PUUubWFnaWM/bS5jb21wcmVzc2VkQ29udGVudD1qLl9kYXRhLmdldENvbXByZXNzZWRDb250ZW50KCk6KEE9ai5fZGF0YS5nZXRDb250ZW50KCksbS5jb21wcmVzc2VkQ29udGVudD1FLmNv'@;
put 'bXByZXNzKE4udHJhbnNmb3JtVG8oRS5jb21wcmVzc0lucHV0VHlwZSxBKSkpKTooKCEoQT1tZShqKSl8fDA9PT1BLmxlbmd0aHx8ai5kaXIpJiYoRT1ZLlNUT1JFLEE9IiIpLG0udW5jb21wcmVzc2VkU2l6ZT1BLmxlbmd0aCxtLmNyYzMyPUwoQSksbS5jb21wcmVzc2VkQ29udGVudD1FLmNv'@;
put 'bXByZXNzKE4udHJhbnNmb3JtVG8oRS5jb21wcmVzc0lucHV0VHlwZSxBKSkpLG0uY29tcHJlc3NlZFNpemU9bS5jb21wcmVzc2VkQ29udGVudC5sZW5ndGgsbS5jb21wcmVzc2lvbk1ldGhvZD1FLm1hZ2ljLG19LFQ9ZnVuY3Rpb24oaixFLG0sQSl7dmFyIE1lLHZlLEZlLFJlLHRlPU4udHJh'@;
put 'bnNmb3JtVG8oInN0cmluZyIsSi51dGY4ZW5jb2RlKEUubmFtZSkpLHNlPUUuY29tbWVudHx8IiIsd2U9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIixKLnV0ZjhlbmNvZGUoc2UpKSxVZT10ZS5sZW5ndGghPT1FLm5hbWUubGVuZ3RoLEplPXdlLmxlbmd0aCE9PXNlLmxlbmd0aCxhdD1FLm9wdGlv'@;
put 'bnMsWGU9IiIsamU9IiIsRGU9IiI7RmU9RS5faW5pdGlhbE1ldGFkYXRhLmRpciE9PUUuZGlyP0UuZGlyOmF0LmRpcixNZT0oUmU9RS5faW5pdGlhbE1ldGFkYXRhLmRhdGUhPT1FLmRhdGU/RS5kYXRlOmF0LmRhdGUpLmdldEhvdXJzKCksTWU8PD02LE1lfD1SZS5nZXRNaW51dGVzKCksTWU8'@;
put 'PD01LE1lfD1SZS5nZXRTZWNvbmRzKCkvMix2ZT1SZS5nZXRGdWxsWWVhcigpLTE5ODAsdmU8PD00LHZlfD1SZS5nZXRNb250aCgpKzEsdmU8PD01LHZlfD1SZS5nZXREYXRlKCksVWUmJihqZT1TZSgxLDEpK1NlKEwodGUpLDQpK3RlLFhlKz0idXAiK1NlKGplLmxlbmd0aCwyKStqZSksSmUm'@;
put 'JihEZT1TZSgxLDEpK1NlKHRoaXMuY3JjMzIod2UpLDQpK3dlLFhlKz0idWMiK1NlKERlLmxlbmd0aCwyKStEZSk7dmFyIEllPSIiO3JldHVybiBJZSs9IlxuXDAiLEllKz1VZXx8SmU/IlwwXGIiOiJcMFwwIixJZSs9bS5jb21wcmVzc2lvbk1ldGhvZCxJZSs9U2UoTWUsMiksSWUrPVNlKHZl'@;
put 'LDIpLEllKz1TZShtLmNyYzMyLDQpLEllKz1TZShtLmNvbXByZXNzZWRTaXplLDQpLEllKz1TZShtLnVuY29tcHJlc3NlZFNpemUsNCksSWUrPVNlKHRlLmxlbmd0aCwyKSxJZSs9U2UoWGUubGVuZ3RoLDIpLHtmaWxlUmVjb3JkOksuTE9DQUxfRklMRV9IRUFERVIrSWUrdGUrWGUsZGlyUmVj'@;
put 'b3JkOksuQ0VOVFJBTF9GSUxFX0hFQURFUisiXHgxNFwwIitJZStTZSh3ZS5sZW5ndGgsMikrIlwwXDBcMFwwIisoITA9PT1GZT8iXHgxMFwwXDBcMCI6IlwwXDBcMFwwIikrU2UoQSw0KSt0ZStYZSt3ZSxjb21wcmVzc2VkT2JqZWN0Om19fSxIPXtsb2FkOmZ1bmN0aW9uKGosRSl7dGhyb3cg'@;
put 'bmV3IEVycm9yKCJMb2FkIG1ldGhvZCBpcyBub3QgZGVmaW5lZC4gSXMgdGhlIGZpbGUganN6aXAtbG9hZC5qcyBpbmNsdWRlZCA/Iil9LGZpbHRlcjpmdW5jdGlvbihqKXt2YXIgbSxBLG9lLHRlLEU9W107Zm9yKG0gaW4gdGhpcy5maWxlcyl0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KG0p'@;
put 'JiYodGU9bmV3IFRlKChvZT10aGlzLmZpbGVzW21dKS5uYW1lLG9lLl9kYXRhLHplKG9lLm9wdGlvbnMpKSxBPW0uc2xpY2UodGhpcy5yb290Lmxlbmd0aCxtLmxlbmd0aCksbS5zbGljZSgwLHRoaXMucm9vdC5sZW5ndGgpPT09dGhpcy5yb290JiZqKEEsdGUpJiZFLnB1c2godGUpKTtyZXR1'@;
put 'cm4gRX0sZmlsZTpmdW5jdGlvbihqLEUsbSl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKE4uaXNSZWdFeHAoaikpe3ZhciBBPWo7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKG9lLHRlKXtyZXR1cm4hdGUuZGlyJiZBLnRlc3Qob2UpfSl9cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0'@;
put 'aW9uKG9lLHRlKXtyZXR1cm4hdGUuZGlyJiZvZT09PWp9KVswXXx8bnVsbH1yZXR1cm4gcC5jYWxsKHRoaXMsaj10aGlzLnJvb3QraixFLG0pLHRoaXN9LGZvbGRlcjpmdW5jdGlvbihqKXtpZighailyZXR1cm4gdGhpcztpZihOLmlzUmVnRXhwKGopKXJldHVybiB0aGlzLmZpbHRlcihmdW5j'@;
put 'dGlvbihvZSx0ZSl7cmV0dXJuIHRlLmRpciYmai50ZXN0KG9lKX0pO3ZhciBtPXguY2FsbCh0aGlzLHRoaXMucm9vdCtqKSxBPXRoaXMuY2xvbmUoKTtyZXR1cm4gQS5yb290PW0ubmFtZSxBfSxyZW1vdmU6ZnVuY3Rpb24oail7dmFyIEU9dGhpcy5maWxlc1tqPXRoaXMucm9vdCtqXTtpZihF'@;
put 'fHwoIi8iIT1qLnNsaWNlKC0xKSYmKGorPSIvIiksRT10aGlzLmZpbGVzW2pdKSxFJiYhRS5kaXIpZGVsZXRlIHRoaXMuZmlsZXNbal07ZWxzZSBmb3IodmFyIG09dGhpcy5maWx0ZXIoZnVuY3Rpb24ob2UsdGUpe3JldHVybiB0ZS5uYW1lLnNsaWNlKDAsai5sZW5ndGgpPT09an0pLEE9MDtB'@;
put 'PG0ubGVuZ3RoO0ErKylkZWxldGUgdGhpcy5maWxlc1ttW0FdLm5hbWVdO3JldHVybiB0aGlzfSxnZW5lcmF0ZTpmdW5jdGlvbihqKXtqPXplKGp8fHt9LHtiYXNlNjQ6ITAsY29tcHJlc3Npb246IlNUT1JFIix0eXBlOiJiYXNlNjQiLGNvbW1lbnQ6bnVsbH0pLE4uY2hlY2tTdXBwb3J0KGou'@;
put 'dHlwZSk7dmFyIG9lLHRlLFhlLEU9W10sbT0wLEE9MCxzZT1OLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMudXRmOGVuY29kZShqLmNvbW1lbnR8fHRoaXMuY29tbWVudHx8IiIpKTtmb3IodmFyIHdlIGluIHRoaXMuZmlsZXMpaWYodGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eSh3ZSkpe3Zh'@;
put 'ciBVZT10aGlzLmZpbGVzW3dlXSxKZT1VZS5vcHRpb25zLmNvbXByZXNzaW9ufHxqLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNlKCksYXQ9WVtKZV07aWYoIWF0KXRocm93IG5ldyBFcnJvcihKZSsiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhIik7dmFyIE1lPUMuY2FsbCh0'@;
put 'aGlzLFVlLGF0KSx2ZT1ULmNhbGwodGhpcyx3ZSxVZSxNZSxtKTttKz12ZS5maWxlUmVjb3JkLmxlbmd0aCtNZS5jb21wcmVzc2VkU2l6ZSxBKz12ZS5kaXJSZWNvcmQubGVuZ3RoLEUucHVzaCh2ZSl9WGU9Sy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQrIlwwXDBcMFwwIitTZShFLmxlbmd0aCwy'@;
put 'KStTZShFLmxlbmd0aCwyKStTZShBLDQpK1NlKG0sNCkrU2Uoc2UubGVuZ3RoLDIpK3NlO3ZhciBqZT1qLnR5cGUudG9Mb3dlckNhc2UoKTtmb3Iob2U9InVpbnQ4YXJyYXkiPT09amV8fCJhcnJheWJ1ZmZlciI9PT1qZXx8ImJsb2IiPT09amV8fCJub2RlYnVmZmVyIj09PWplP25ldyBpZSht'@;
put 'K0ErWGUubGVuZ3RoKTpuZXcgcmUobStBK1hlLmxlbmd0aCksdGU9MDt0ZTxFLmxlbmd0aDt0ZSsrKW9lLmFwcGVuZChFW3RlXS5maWxlUmVjb3JkKSxvZS5hcHBlbmQoRVt0ZV0uY29tcHJlc3NlZE9iamVjdC5jb21wcmVzc2VkQ29udGVudCk7Zm9yKHRlPTA7dGU8RS5sZW5ndGg7dGUrKylv'@;
put 'ZS5hcHBlbmQoRVt0ZV0uZGlyUmVjb3JkKTtvZS5hcHBlbmQoWGUpO3ZhciBEZT1vZS5maW5hbGl6ZSgpO3N3aXRjaChqLnR5cGUudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1aW50OGFycmF5IjpjYXNlImFycmF5YnVmZmVyIjpjYXNlIm5vZGVidWZmZXIiOnJldHVybiBOLnRyYW5zZm9ybVRvKGou'@;
put 'dHlwZS50b0xvd2VyQ2FzZSgpLERlKTtjYXNlImJsb2IiOnJldHVybiBOLmFycmF5QnVmZmVyMkJsb2IoTi50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLERlKSk7Y2FzZSJiYXNlNjQiOnJldHVybiBqLmJhc2U2ND9XLmVuY29kZShEZSk6RGU7ZGVmYXVsdDpyZXR1cm4gRGV9fSxjcmMzMjpm'@;
put 'dW5jdGlvbihqLEUpe3JldHVybiBMKGosRSl9LHV0ZjhlbmNvZGU6ZnVuY3Rpb24oail7cmV0dXJuIE4udHJhbnNmb3JtVG8oInN0cmluZyIsSi51dGY4ZW5jb2RlKGopKX0sdXRmOGRlY29kZTpmdW5jdGlvbihqKXtyZXR1cm4gSi51dGY4ZGVjb2RlKGopfX07Ri5leHBvcnRzPUh9LHsiLi9i'@;
put 'YXNlNjQiOjEsIi4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9jb21wcmVzc2lvbnMiOjMsIi4vY3JjMzIiOjQsIi4vZGVmYXVsdHMiOjYsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdXcml0ZXIiOjE2LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlXcml0'@;
put 'ZXIiOjE5LCIuL3V0ZjgiOjIwLCIuL3V0aWxzIjoyMX1dLDE0OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO08uTE9DQUxfRklMRV9IRUFERVI9IlBLXHgwM1x4MDQiLE8uQ0VOVFJBTF9GSUxFX0hFQURFUj0iUEtceDAxXHgwMiIsTy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLXHgw'@;
put 'NVx4MDYiLE8uWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUj0iUEtceDA2XHgwNyIsTy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLXHgwNlx4MDYiLE8uREFUQV9ERVNDUklQVE9SPSJQS1x4MDdcYiJ9LHt9XSwxNTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgej1QKCIuL2RhdGFSZWFkZXIiKSxOPVAoIi4vdXRpbHMiKTtmdW5jdGlvbiBMKEssVSl7dGhpcy5kYXRhPUssVXx8KHRoaXMuZGF0YT1OLnN0cmluZzJiaW5hcnkodGhpcy5kYXRhKSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KEwucHJvdG90eXBlPW5l'@;
put 'dyB6KS5ieXRlQXQ9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMuZGF0YS5jaGFyQ29kZUF0KEspfSxMLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihLKXtyZXR1cm4gdGhpcy5kYXRhLmxhc3RJbmRleE9mKEspfSxMLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihL'@;
put 'KXt0aGlzLmNoZWNrT2Zmc2V0KEspO3ZhciBVPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrSyk7cmV0dXJuIHRoaXMuaW5kZXgrPUssVX0sRi5leHBvcnRzPUx9LHsiLi9kYXRhUmVhZGVyIjo1LCIuL3V0aWxzIjoyMX1dLDE2OltmdW5jdGlvbihQLEYsTyl7InVzZSBz'@;
put 'dHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKSxOPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPVtdfTtOLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKEwpe0w9ei50cmFuc2Zvcm1Ubygic3RyaW5nIixMKSx0aGlzLmRhdGEucHVzaChMKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5k'@;
put 'YXRhLmpvaW4oIiIpfX0sRi5leHBvcnRzPU59LHsiLi91dGlscyI6MjF9XSwxNzpbZnVuY3Rpb24oUCxGLE8peyhmdW5jdGlvbih6KXsidXNlIHN0cmljdCI7aWYoTy5iYXNlNjQ9ITAsTy5hcnJheT0hMCxPLnN0cmluZz0hMCxPLmFycmF5YnVmZmVyPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSIm'@;
put 'JnR5cGVvZiBVaW50OEFycmF5PCJ1IixPLm5vZGVidWZmZXI9dHlwZW9mIHo8InUiLE8udWludDhhcnJheT10eXBlb2YgVWludDhBcnJheTwidSIsdHlwZW9mIEFycmF5QnVmZmVyPiJ1IilPLmJsb2I9ITE7ZWxzZXt2YXIgTj1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e08uYmxvYj0wPT09bmV3'@;
put 'IEJsb2IoW05dLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSkuc2l6ZX1jYXRjaHt0cnl7dmFyIEs9bmV3KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTtLLmFwcGVuZChOKSxP'@;
put 'LmJsb2I9MD09PUsuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIikuc2l6ZX1jYXRjaHtPLmJsb2I9ITF9fX19KS5jYWxsKHRoaXMsdHlwZW9mIEJ1ZmZlcjwidSI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxODpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2RhdGFSZWFk'@;
put 'ZXIiKTtmdW5jdGlvbiBOKEwpe0wmJih0aGlzLmRhdGE9TCx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MCl9KE4ucHJvdG90eXBlPW5ldyB6KS5ieXRlQXQ9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMuZGF0YVtMXX0sTi5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWdu'@;
put 'YXR1cmU9ZnVuY3Rpb24oTCl7Zm9yKHZhciBLPUwuY2hhckNvZGVBdCgwKSxVPUwuY2hhckNvZGVBdCgxKSxXPUwuY2hhckNvZGVBdCgyKSxZPUwuY2hhckNvZGVBdCgzKSxYPXRoaXMubGVuZ3RoLTQ7WD49MDstLVgpaWYodGhpcy5kYXRhW1hdPT09SyYmdGhpcy5kYXRhW1grMV09PT1VJiZ0'@;
put 'aGlzLmRhdGFbWCsyXT09PVcmJnRoaXMuZGF0YVtYKzNdPT09WSlyZXR1cm4gWDtyZXR1cm4tMX0sTi5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oTCl7aWYodGhpcy5jaGVja09mZnNldChMKSwwPT09TClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIEs9dGhpcy5kYXRhLnN1YmFy'@;
put 'cmF5KHRoaXMuaW5kZXgsdGhpcy5pbmRleCtMKTtyZXR1cm4gdGhpcy5pbmRleCs9TCxLfSxGLmV4cG9ydHM9Tn0seyIuL2RhdGFSZWFkZXIiOjV9XSwxOTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIiksTj1mdW5jdGlvbihMKXt0aGlzLmRhdGE9bmV3'@;
put 'IFVpbnQ4QXJyYXkoTCksdGhpcy5pbmRleD0wfTtOLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKEwpezAhPT1MLmxlbmd0aCYmKEw9ei50cmFuc2Zvcm1UbygidWludDhhcnJheSIsTCksdGhpcy5kYXRhLnNldChMLHRoaXMuaW5kZXgpLHRoaXMuaW5kZXgrPUwubGVuZ3RoKX0sZmluYWxp'@;
put 'emU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sRi5leHBvcnRzPU59LHsiLi91dGlscyI6MjF9XSwyMDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIHo9UCgiLi91dGlscyIpLE49UCgiLi9zdXBwb3J0IiksTD1QKCIuL25vZGVCdWZmZXIiKSxLPW5ldyBBcnJh'@;
put 'eSgyNTYpLFU9MDtVPDI1NjtVKyspS1tVXT1VPj0yNTI/NjpVPj0yNDg/NTpVPj0yNDA/NDpVPj0yMjQ/MzpVPj0xOTI/MjoxO0tbMjU0XT1LWzI1NF09MTt2YXIgWT1mdW5jdGlvbihlZSxKKXt2YXIgcmU7Zm9yKChKPUp8fGVlLmxlbmd0aCk+ZWUubGVuZ3RoJiYoSj1lZS5sZW5ndGgpLHJl'@;
put 'PUotMTtyZT49MCYmMTI4PT0oMTkyJmVlW3JlXSk7KXJlLS07cmV0dXJuIHJlPDB8fDA9PT1yZT9KOnJlK0tbZWVbcmVdXT5KP3JlOkp9LFg9ZnVuY3Rpb24oZWUpe3ZhciByZSxpZSxsZSxtZSxfZT1lZS5sZW5ndGgsVGU9bmV3IEFycmF5KDIqX2UpO2ZvcihpZT0wLHJlPTA7cmU8X2U7KWlm'@;
put 'KChsZT1lZVtyZSsrXSk8MTI4KVRlW2llKytdPWxlO2Vsc2UgaWYoKG1lPUtbbGVdKT40KVRlW2llKytdPTY1NTMzLHJlKz1tZS0xO2Vsc2V7Zm9yKGxlJj0yPT09bWU/MzE6Mz09PW1lPzE1Ojc7bWU+MSYmcmU8X2U7KWxlPWxlPDw2fDYzJmVlW3JlKytdLG1lLS07bWU+MT9UZVtpZSsrXT02'@;
put 'NTUzMzpsZTw2NTUzNj9UZVtpZSsrXT1sZTooVGVbaWUrK109NTUyOTZ8KGxlLT02NTUzNik+PjEwJjEwMjMsVGVbaWUrK109NTYzMjB8MTAyMyZsZSl9cmV0dXJuIFRlLmxlbmd0aCE9PWllJiYoVGUuc3ViYXJyYXk/VGU9VGUuc3ViYXJyYXkoMCxpZSk6VGUubGVuZ3RoPWllKSx6LmFwcGx5'@;
put 'RnJvbUNoYXJDb2RlKFRlKX07Ty51dGY4ZW5jb2RlPWZ1bmN0aW9uKEope3JldHVybiBOLm5vZGVidWZmZXI/TChKLCJ1dGYtOCIpOmZ1bmN0aW9uKGVlKXt2YXIgSixyZSxpZSxsZSxtZSxfZT1lZS5sZW5ndGgsVGU9MDtmb3IobGU9MDtsZTxfZTtsZSsrKTU1Mjk2PT0oNjQ1MTImKHJlPWVl'@;
put 'LmNoYXJDb2RlQXQobGUpKSkmJmxlKzE8X2UmJjU2MzIwPT0oNjQ1MTImKGllPWVlLmNoYXJDb2RlQXQobGUrMSkpKSYmKHJlPTY1NTM2KyhyZS01NTI5Njw8MTApKyhpZS01NjMyMCksbGUrKyksVGUrPXJlPDEyOD8xOnJlPDIwNDg/MjpyZTw2NTUzNj8zOjQ7Zm9yKEo9Ti51aW50OGFycmF5'@;
put 'P25ldyBVaW50OEFycmF5KFRlKTpuZXcgQXJyYXkoVGUpLG1lPTAsbGU9MDttZTxUZTtsZSsrKTU1Mjk2PT0oNjQ1MTImKHJlPWVlLmNoYXJDb2RlQXQobGUpKSkmJmxlKzE8X2UmJjU2MzIwPT0oNjQ1MTImKGllPWVlLmNoYXJDb2RlQXQobGUrMSkpKSYmKHJlPTY1NTM2KyhyZS01NTI5Njw8'@;
put 'MTApKyhpZS01NjMyMCksbGUrKykscmU8MTI4P0pbbWUrK109cmU6cmU8MjA0OD8oSlttZSsrXT0xOTJ8cmU+Pj42LEpbbWUrK109MTI4fDYzJnJlKTpyZTw2NTUzNj8oSlttZSsrXT0yMjR8cmU+Pj4xMixKW21lKytdPTEyOHxyZT4+PjYmNjMsSlttZSsrXT0xMjh8NjMmcmUpOihKW21lKytd'@;
put 'PTI0MHxyZT4+PjE4LEpbbWUrK109MTI4fHJlPj4+MTImNjMsSlttZSsrXT0xMjh8cmU+Pj42JjYzLEpbbWUrK109MTI4fDYzJnJlKTtyZXR1cm4gSn0oSil9LE8udXRmOGRlY29kZT1mdW5jdGlvbihKKXtpZihOLm5vZGVidWZmZXIpcmV0dXJuIHoudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIi'@;
put 'LEopLnRvU3RyaW5nKCJ1dGYtOCIpO2Zvcih2YXIgcmU9W10saWU9MCxsZT0oSj16LnRyYW5zZm9ybVRvKE4udWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IixKKSkubGVuZ3RoO2llPGxlOyl7dmFyIF9lPVkoSixNYXRoLm1pbihpZSs2NTUzNixsZSkpO3JlLnB1c2goWChOLnVpbnQ4'@;
put 'YXJyYXk/Si5zdWJhcnJheShpZSxfZSk6Si5zbGljZShpZSxfZSkpKSxpZT1fZX1yZXR1cm4gcmUuam9pbigiIil9fSx7Ii4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTcsIi4vdXRpbHMiOjIxfV0sMjE6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdXBw'@;
put 'b3J0IiksTj1QKCIuL2NvbXByZXNzaW9ucyIpLEw9UCgiLi9ub2RlQnVmZmVyIik7ZnVuY3Rpb24gSyhlZSl7cmV0dXJuIGVlfWZ1bmN0aW9uIFUoZWUsSil7Zm9yKHZhciByZT0wO3JlPGVlLmxlbmd0aDsrK3JlKUpbcmVdPTI1NSZlZS5jaGFyQ29kZUF0KHJlKTtyZXR1cm4gSn1mdW5jdGlv'@;
put 'biBXKGVlKXt2YXIgSj02NTUzNixyZT1bXSxpZT1lZS5sZW5ndGgsbGU9Ty5nZXRUeXBlT2YoZWUpLG1lPTAsX2U9ITA7dHJ5e3N3aXRjaChsZSl7Y2FzZSJ1aW50OGFycmF5IjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMCkpO2JyZWFrO2Nhc2Uibm9k'@;
put 'ZWJ1ZmZlciI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLEwoMCkpfX1jYXRjaHtfZT0hMX1pZighX2Upe2Zvcih2YXIgVGU9IiIsU2U9MDtTZTxlZS5sZW5ndGg7U2UrKylUZSs9U3RyaW5nLmZyb21DaGFyQ29kZShlZVtTZV0pO3JldHVybiBUZX1mb3IoO21lPGllJiZKPjE7KXRy'@;
put 'eXtyZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwiYXJyYXkiPT09bGV8fCJub2RlYnVmZmVyIj09PWxlP2VlLnNsaWNlKG1lLE1hdGgubWluKG1lK0osaWUpKTplZS5zdWJhcnJheShtZSxNYXRoLm1pbihtZStKLGllKSkpKSxtZSs9Sn1jYXRjaHtKPU1hdGguZmxvb3Io'@;
put 'Si8yKX1yZXR1cm4gcmUuam9pbigiIil9ZnVuY3Rpb24gWShlZSxKKXtmb3IodmFyIHJlPTA7cmU8ZWUubGVuZ3RoO3JlKyspSltyZV09ZWVbcmVdO3JldHVybiBKfU8uc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihlZSl7Zm9yKHZhciBKPSIiLHJlPTA7cmU8ZWUubGVuZ3RoO3JlKyspSis9U3Ry'@;
put 'aW5nLmZyb21DaGFyQ29kZSgyNTUmZWUuY2hhckNvZGVBdChyZSkpO3JldHVybiBKfSxPLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oZWUpe08uY2hlY2tTdXBwb3J0KCJibG9iIik7dHJ5e3JldHVybiBuZXcgQmxvYihbZWVdLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSl9Y2F0Y2h7dHJ5'@;
put 'e3ZhciByZT1uZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO3JldHVybiByZS5hcHBlbmQoZWUpLHJlLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpfWNhdGNoe3Rocm93'@;
put 'IG5ldyBFcnJvcigiQnVnIDogY2FuJ3QgY29uc3RydWN0IHRoZSBCbG9iLiIpfX19LE8uYXBwbHlGcm9tQ2hhckNvZGU9Vzt2YXIgWD17fTtYLnN0cmluZz17c3RyaW5nOkssYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBVKGVlLG5ldyBBcnJheShlZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6'@;
put 'ZnVuY3Rpb24oZWUpe3JldHVybiBYLnN0cmluZy51aW50OGFycmF5KGVlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBVKGVlLG5ldyBVaW50OEFycmF5KGVlLmxlbmd0aCkpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gVShlZSxMKGVlLmxlbmd0aCkp'@;
put 'fX0sWC5hcnJheT17c3RyaW5nOlcsYXJyYXk6SyxhcnJheWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGVlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBuZXcgVWludDhBcnJheShlZSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3Jl'@;
put 'dHVybiBMKGVlKX19LFguYXJyYXlidWZmZXI9e3N0cmluZzpmdW5jdGlvbihlZSl7cmV0dXJuIFcobmV3IFVpbnQ4QXJyYXkoZWUpKX0sYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBZKG5ldyBVaW50OEFycmF5KGVlKSxuZXcgQXJyYXkoZWUuYnl0ZUxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpL'@;
put 'LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBuZXcgVWludDhBcnJheShlZSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBMKG5ldyBVaW50OEFycmF5KGVlKSl9fSxYLnVpbnQ4YXJyYXk9e3N0cmluZzpXLGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gWShlZSxuZXcg'@;
put 'QXJyYXkoZWUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gZWUuYnVmZmVyfSx1aW50OGFycmF5Okssbm9kZWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIEwoZWUpfX0sWC5ub2RlYnVmZmVyPXtzdHJpbmc6VyxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFko'@;
put 'ZWUsbmV3IEFycmF5KGVlLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIFgubm9kZWJ1ZmZlci51aW50OGFycmF5KGVlKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBZKGVlLG5ldyBVaW50OEFycmF5KGVlLmxlbmd0aCkpfSxub2RlYnVm'@;
put 'ZmVyOkt9LE8udHJhbnNmb3JtVG89ZnVuY3Rpb24oZWUsSil7aWYoSnx8KEo9IiIpLCFlZSlyZXR1cm4gSjtPLmNoZWNrU3VwcG9ydChlZSk7dmFyIHJlPU8uZ2V0VHlwZU9mKEopO3JldHVybiBYW3JlXVtlZV0oSil9LE8uZ2V0VHlwZU9mPWZ1bmN0aW9uKGVlKXtyZXR1cm4ic3RyaW5nIj09'@;
put 'dHlwZW9mIGVlPyJzdHJpbmciOiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZWUpPyJhcnJheSI6ei5ub2RlYnVmZmVyJiZMLnRlc3QoZWUpPyJub2RlYnVmZmVyIjp6LnVpbnQ4YXJyYXkmJmVlIGluc3RhbmNlb2YgVWludDhBcnJheT8idWludDhh'@;
put 'cnJheSI6ei5hcnJheWJ1ZmZlciYmZWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj8iYXJyYXlidWZmZXIiOnZvaWQgMH0sTy5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oZWUpe2lmKCF6W2VlLnRvTG93ZXJDYXNlKCldKXRocm93IG5ldyBFcnJvcihlZSsiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhp'@;
put 'cyBicm93c2VyIil9LE8uTUFYX1ZBTFVFXzE2QklUUz02NTUzNSxPLk1BWF9WQUxVRV8zMkJJVFM9LTEsTy5wcmV0dHk9ZnVuY3Rpb24oZWUpe3ZhciByZSxpZSxKPSIiO2ZvcihpZT0wO2llPChlZXx8IiIpLmxlbmd0aDtpZSsrKUorPSJcXHgiKygocmU9ZWUuY2hhckNvZGVBdChpZSkpPDE2'@;
put 'PyIwIjoiIikrcmUudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIEp9LE8uZmluZENvbXByZXNzaW9uPWZ1bmN0aW9uKGVlKXtmb3IodmFyIEogaW4gTilpZihOLmhhc093blByb3BlcnR5KEopJiZOW0pdLm1hZ2ljPT09ZWUpcmV0dXJuIE5bSl07cmV0dXJuIG51bGx9LE8uaXNS'@;
put 'ZWdFeHA9ZnVuY3Rpb24oZWUpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVlKX19LHsiLi9jb21wcmVzc2lvbnMiOjMsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTd9XSwyMjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgej1QKCIuL3N0cmluZ1JlYWRlciIpLE49UCgiLi9ub2RlQnVmZmVyUmVhZGVyIiksTD1QKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKSxLPVAoIi4vdXRpbHMiKSxVPVAoIi4vc2lnbmF0dXJlIiksVz1QKCIuL3ppcEVudHJ5IiksWT1QKCIuL3N1cHBvcnQiKSxYPVAoIi4vb2JqZWN0'@;
put 'Iik7ZnVuY3Rpb24gZWUoSixyZSl7dGhpcy5maWxlcz1bXSx0aGlzLmxvYWRPcHRpb25zPXJlLEomJnRoaXMubG9hZChKKX1lZS5wcm90b3R5cGU9e2NoZWNrU2lnbmF0dXJlOmZ1bmN0aW9uKEope3ZhciByZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpO2lmKHJlIT09Sil0aHJvdyBuZXcg'@;
put 'RXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnIDogdW5leHBlY3RlZCBzaWduYXR1cmUgKCIrSy5wcmV0dHkocmUpKyIsIGV4cGVjdGVkICIrSy5wcmV0dHkoSikrIikiKX0scmVhZEJsb2NrRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJ'@;
put 'bnQoMiksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMu'@;
put 'Y2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnppcENvbW1lbnRMZW5ndGg9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLnppcENvbW1lbnQ9dGhpcy5yZWFkZXIucmVhZFN0cmlu'@;
put 'Zyh0aGlzLnppcENvbW1lbnRMZW5ndGgpLHRoaXMuemlwQ29tbWVudD1YLnV0ZjhkZWNvZGUodGhpcy56aXBDb21tZW50KX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMu'@;
put 'dmVyc2lvbk1hZGVCeT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVh'@;
put 'ZEludCg0KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFs'@;
put 'RGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhPXt9O2Zvcih2YXIgaWUsbGUsbWUsSj10aGlzLnppcDY0RW5kT2ZDZW50cmFsU2l6ZS00NDswPEo7KWllPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksbGU9dGhpcy5yZWFkZXIucmVhZEludCg0'@;
put 'KSxtZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKGxlKSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGFbaWVdPXtpZDppZSxsZW5ndGg6bGUsdmFsdWU6bWV9fSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3I6ZnVuY3Rpb24oKXtpZih0aGlzLmRpc2tXaXRoWmlwNjRDZW50cmFsRGly'@;
put 'U3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXI9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmRpc2tzQ291bnQ9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0aGlzLmRpc2tzQ291bnQ+MSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'Ik11bHRpLXZvbHVtZXMgemlwIGFyZSBub3Qgc3VwcG9ydGVkIil9LHJlYWRMb2NhbEZpbGVzOmZ1bmN0aW9uKCl7dmFyIEoscmU7Zm9yKEo9MDtKPHRoaXMuZmlsZXMubGVuZ3RoO0orKyl0aGlzLnJlYWRlci5zZXRJbmRleCgocmU9dGhpcy5maWxlc1tKXSkubG9jYWxIZWFkZXJPZmZzZXQp'@;
put 'LHRoaXMuY2hlY2tTaWduYXR1cmUoVS5MT0NBTF9GSUxFX0hFQURFUikscmUucmVhZExvY2FsUGFydCh0aGlzLnJlYWRlcikscmUuaGFuZGxlVVRGOCgpfSxyZWFkQ2VudHJhbERpcjpmdW5jdGlvbigpe3ZhciBKO2Zvcih0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZz'@;
put 'ZXQpO3RoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk9PT1VLkNFTlRSQUxfRklMRV9IRUFERVI7KShKPW5ldyBXKHt6aXA2NDp0aGlzLnppcDY0fSx0aGlzLmxvYWRPcHRpb25zKSkucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKSx0aGlzLmZpbGVzLnB1c2goSil9LHJlYWRFbmRPZkNlbnRy'@;
put 'YWw6ZnVuY3Rpb24oKXt2YXIgSj10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShVLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoLTE9PT1KKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5Iik7aWYodGhp'@;
put 'cy5yZWFkZXIuc2V0SW5kZXgoSiksdGhpcy5jaGVja1NpZ25hdHVyZShVLkNFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2tFbmRPZkNlbnRyYWwoKSx0aGlzLmRpc2tOdW1iZXI9PT1LLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9PT1L'@;
put 'Lk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPT09Sy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPT09Sy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJTaXplPT09Sy5NQVhfVkFMVUVfMzJCSVRTfHx0aGlz'@;
put 'LmNlbnRyYWxEaXJPZmZzZXQ9PT1LLk1BWF9WQUxVRV8zMkJJVFMpe2lmKHRoaXMuemlwNjQ9ITAsLTE9PT0oSj10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShVLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAg'@;
put 'OiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciIpO3RoaXMucmVhZGVyLnNldEluZGV4KEopLHRoaXMuY2hlY2tTaWduYXR1cmUoVS5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50'@;
put 'cmFsTG9jYXRvcigpLHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciksdGhpcy5jaGVja1NpZ25hdHVyZShVLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCgpfX0scHJl'@;
put 'cGFyZVJlYWRlcjpmdW5jdGlvbihKKXt2YXIgcmU9Sy5nZXRUeXBlT2YoSik7dGhpcy5yZWFkZXI9InN0cmluZyIhPT1yZXx8WS51aW50OGFycmF5PyJub2RlYnVmZmVyIj09PXJlP25ldyBOKEopOm5ldyBMKEsudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEopKTpuZXcgeihKLHRoaXMubG9h'@;
put 'ZE9wdGlvbnMub3B0aW1pemVkQmluYXJ5U3RyaW5nKX0sbG9hZDpmdW5jdGlvbihKKXt0aGlzLnByZXBhcmVSZWFkZXIoSiksdGhpcy5yZWFkRW5kT2ZDZW50cmFsKCksdGhpcy5yZWFkQ2VudHJhbERpcigpLHRoaXMucmVhZExvY2FsRmlsZXMoKX19LEYuZXhwb3J0cz1lZX0seyIuL25vZGVC'@;
put 'dWZmZXJSZWFkZXIiOjEyLCIuL29iamVjdCI6MTMsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdSZWFkZXIiOjE1LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4LCIuL3V0aWxzIjoyMSwiLi96aXBFbnRyeSI6MjN9XSwyMzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgej1QKCIuL3N0cmluZ1JlYWRlciIpLE49UCgiLi91dGlscyIpLEw9UCgiLi9jb21wcmVzc2VkT2JqZWN0IiksSz1QKCIuL29iamVjdCIpO2Z1bmN0aW9uIFUoVyxZKXt0aGlzLm9wdGlvbnM9Vyx0aGlzLmxvYWRPcHRpb25zPVl9VS5wcm90b3R5cGU9e2lzRW5jcnlwdGVkOmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLmJpdEZsYWcpfSx1c2VVVEY4OmZ1bmN0aW9uKCl7cmV0dXJuISgyMDQ4Jn50aGlzLmJpdEZsYWcpfSxwcmVwYXJlQ29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oVyxZLFgpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlZT1XLmluZGV4O1cuc2V0SW5k'@;
put 'ZXgoWSk7dmFyIEo9Vy5yZWFkRGF0YShYKTtyZXR1cm4gVy5zZXRJbmRleChlZSksSn19LHByZXBhcmVDb250ZW50OmZ1bmN0aW9uKFcsWSxYLGVlLEope3JldHVybiBmdW5jdGlvbigpe3ZhciByZT1OLnRyYW5zZm9ybVRvKGVlLnVuY29tcHJlc3NJbnB1dFR5cGUsdGhpcy5nZXRDb21wcmVz'@;
put 'c2VkQ29udGVudCgpKSxpZT1lZS51bmNvbXByZXNzKHJlKTtpZihpZS5sZW5ndGghPT1KKXRocm93IG5ldyBFcnJvcigiQnVnIDogdW5jb21wcmVzc2VkIGRhdGEgc2l6ZSBtaXNtYXRjaCIpO3JldHVybiBpZX19LHJlYWRMb2NhbFBhcnQ6ZnVuY3Rpb24oVyl7dmFyIFksWDtpZihXLnNraXAo'@;
put 'MjIpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Vy5yZWFkSW50KDIpLFg9Vy5yZWFkSW50KDIpLHRoaXMuZmlsZU5hbWU9Vy5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5ndGgpLFcuc2tpcChYKSwtMT09dGhpcy5jb21wcmVzc2VkU2l6ZXx8LTE9PXRoaXMudW5jb21wcmVzc2VkU2l6ZSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkJ1ZyBvciBjb3JydXB0ZWQgemlwIDogZGlkbid0IGdldCBlbm91Z2ggaW5mb3JtYXRpb25zIGZyb20gdGhlIGNlbnRyYWwgZGlyZWN0b3J5IChjb21wcmVzc2VkU2l6ZSA9PSAtMSB8fCB1bmNvbXByZXNzZWRTaXplID09IC0xKSIpO2lmKG51bGw9PT0oWT1OLmZpbmRD'@;
put 'b21wcmVzc2lvbih0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY29tcHJlc3Npb24gIitOLnByZXR0eSh0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSsiIHVua25vd24gKGlubmVyIGZpbGUgOiAiK3RoaXMuZmlsZU5hbWUrIikiKTtpZih0'@;
put 'aGlzLmRlY29tcHJlc3NlZD1uZXcgTCx0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2VkU2l6ZT10aGlzLmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLnVuY29tcHJlc3NlZFNpemU9dGhpcy51bmNvbXByZXNzZWRTaXplLHRoaXMuZGVjb21wcmVzc2VkLmNyYzMyPXRoaXMuY3Jj'@;
put 'MzIsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3Npb25NZXRob2Q9dGhpcy5jb21wcmVzc2lvbk1ldGhvZCx0aGlzLmRlY29tcHJlc3NlZC5nZXRDb21wcmVzc2VkQ29udGVudD10aGlzLnByZXBhcmVDb21wcmVzc2VkQ29udGVudChXLFcuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxZKSx0'@;
put 'aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50PXRoaXMucHJlcGFyZUNvbnRlbnQoVyxXLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsWSx0aGlzLnVuY29tcHJlc3NlZFNpemUpLHRoaXMubG9hZE9wdGlvbnMuY2hlY2tDUkMzMiYmKHRoaXMuZGVjb21wcmVzc2VkPU4udHJhbnNmb3JtVG8o'@;
put 'InN0cmluZyIsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudCgpKSxLLmNyYzMyKHRoaXMuZGVjb21wcmVzc2VkKSE9PXRoaXMuY3JjMzIpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IENSQzMyIG1pc21hdGNoIil9LHJlYWRDZW50cmFsUGFydDpmdW5jdGlvbihXKXtpZih0'@;
put 'aGlzLnZlcnNpb25NYWRlQnk9Vy5yZWFkU3RyaW5nKDIpLHRoaXMudmVyc2lvbk5lZWRlZD1XLnJlYWRJbnQoMiksdGhpcy5iaXRGbGFnPVcucmVhZEludCgyKSx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPVcucmVhZFN0cmluZygyKSx0aGlzLmRhdGU9Vy5yZWFkRGF0ZSgpLHRoaXMuY3JjMzI9'@;
put 'Vy5yZWFkSW50KDQpLHRoaXMuY29tcHJlc3NlZFNpemU9Vy5yZWFkSW50KDQpLHRoaXMudW5jb21wcmVzc2VkU2l6ZT1XLnJlYWRJbnQoNCksdGhpcy5maWxlTmFtZUxlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5leHRyYUZpZWxkc0xlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5maWxlQ29tbWVu'@;
put 'dExlbmd0aD1XLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9Vy5yZWFkSW50KDIpLHRoaXMuaW50ZXJuYWxGaWxlQXR0cmlidXRlcz1XLnJlYWRJbnQoMiksdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzPVcucmVhZEludCg0KSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PVcucmVh'@;
put 'ZEludCg0KSx0aGlzLmlzRW5jcnlwdGVkKCkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0ZWQgemlwIGFyZSBub3Qgc3VwcG9ydGVkIik7dGhpcy5maWxlTmFtZT1XLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksdGhpcy5yZWFkRXh0cmFGaWVsZHMoVyksdGhpcy5wYXJzZVpJUDY0'@;
put 'RXh0cmFGaWVsZChXKSx0aGlzLmZpbGVDb21tZW50PVcucmVhZFN0cmluZyh0aGlzLmZpbGVDb21tZW50TGVuZ3RoKSx0aGlzLmRpcj0hISgxNiZ0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXMpfSxwYXJzZVpJUDY0RXh0cmFGaWVsZDpmdW5jdGlvbihXKXtpZih0aGlzLmV4dHJhRmllbGRz'@;
put 'WzFdKXt2YXIgWT1uZXcgeih0aGlzLmV4dHJhRmllbGRzWzFdLnZhbHVlKTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1OLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLnVuY29tcHJlc3NlZFNpemU9WS5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09Ti5NQVhfVkFMVUVfMzJCSVRT'@;
put 'JiYodGhpcy5jb21wcmVzc2VkU2l6ZT1ZLnJlYWRJbnQoOCkpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9PT1OLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PVkucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1OLk1BWF9WQUxVRV8zMkJJVFMmJih0'@;
put 'aGlzLmRpc2tOdW1iZXJTdGFydD1ZLnJlYWRJbnQoNCkpfX0scmVhZEV4dHJhRmllbGRzOmZ1bmN0aW9uKFcpe3ZhciBYLGVlLEosWT1XLmluZGV4O2Zvcih0aGlzLmV4dHJhRmllbGRzPXRoaXMuZXh0cmFGaWVsZHN8fHt9O1cuaW5kZXg8WSt0aGlzLmV4dHJhRmllbGRzTGVuZ3RoOylYPVcu'@;
put 'cmVhZEludCgyKSxlZT1XLnJlYWRJbnQoMiksSj1XLnJlYWRTdHJpbmcoZWUpLHRoaXMuZXh0cmFGaWVsZHNbWF09e2lkOlgsbGVuZ3RoOmVlLHZhbHVlOkp9fSxoYW5kbGVVVEY4OmZ1bmN0aW9uKCl7aWYodGhpcy51c2VVVEY4KCkpdGhpcy5maWxlTmFtZT1LLnV0ZjhkZWNvZGUodGhpcy5m'@;
put 'aWxlTmFtZSksdGhpcy5maWxlQ29tbWVudD1LLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7ZWxzZXt2YXIgVz10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtudWxsIT09VyYmKHRoaXMuZmlsZU5hbWU9Vyk7dmFyIFk9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVDb21t'@;
put 'ZW50KCk7bnVsbCE9PVkmJih0aGlzLmZpbGVDb21tZW50PVkpfX0sZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aDpmdW5jdGlvbigpe3ZhciBXPXRoaXMuZXh0cmFGaWVsZHNbMjg3ODldO2lmKFcpe3ZhciBZPW5ldyB6KFcudmFsdWUpO3JldHVybiAxIT09WS5yZWFkSW50KDEpfHxLLmNyYzMy'@;
put 'KHRoaXMuZmlsZU5hbWUpIT09WS5yZWFkSW50KDQpP251bGw6Sy51dGY4ZGVjb2RlKFkucmVhZFN0cmluZyhXLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9LGZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQ6ZnVuY3Rpb24oKXt2YXIgVz10aGlzLmV4dHJhRmllbGRzWzI1NDYxXTtpZihXKXt2'@;
put 'YXIgWT1uZXcgeihXLnZhbHVlKTtyZXR1cm4gMSE9PVkucmVhZEludCgxKXx8Sy5jcmMzMih0aGlzLmZpbGVDb21tZW50KSE9PVkucmVhZEludCg0KT9udWxsOksudXRmOGRlY29kZShZLnJlYWRTdHJpbmcoVy5sZW5ndGgtNSkpfXJldHVybiBudWxsfX0sRi5leHBvcnRzPVV9LHsiLi9jb21w'@;
put 'cmVzc2VkT2JqZWN0IjoyLCIuL29iamVjdCI6MTMsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi91dGlscyI6MjF9XSwyNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgVT17fTsoMCxQKCIuL2xpYi91dGlscy9jb21tb24iKS5hc3NpZ24pKFUsUCgiLi9saWIvZGVmbGF0ZSIpLFAo'@;
put 'Ii4vbGliL2luZmxhdGUiKSxQKCIuL2xpYi96bGliL2NvbnN0YW50cyIpKSxGLmV4cG9ydHM9VX0seyIuL2xpYi9kZWZsYXRlIjoyNSwiLi9saWIvaW5mbGF0ZSI6MjYsIi4vbGliL3V0aWxzL2NvbW1vbiI6MjcsIi4vbGliL3psaWIvY29uc3RhbnRzIjozMH1dLDI1OltmdW5jdGlvbihQLEYs'@;
put 'Tyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vemxpYi9kZWZsYXRlLmpzIiksTj1QKCIuL3V0aWxzL2NvbW1vbiIpLEw9UCgiLi91dGlscy9zdHJpbmdzIiksSz1QKCIuL3psaWIvbWVzc2FnZXMiKSxVPVAoIi4vemxpYi96c3RyZWFtIiksbGU9ZnVuY3Rpb24oU2Upe3RoaXMub3B0aW9ucz1O'@;
put 'LmFzc2lnbih7bGV2ZWw6LTEsbWV0aG9kOjgsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTowLHRvOiIifSxTZXx8e30pO3ZhciB6ZT10aGlzLm9wdGlvbnM7emUucmF3JiZ6ZS53aW5kb3dCaXRzPjA/emUud2luZG93Qml0cz0temUud2luZG93Qml0'@;
put 'czp6ZS5nemlwJiZ6ZS53aW5kb3dCaXRzPjAmJnplLndpbmRvd0JpdHM8MTYmJih6ZS53aW5kb3dCaXRzKz0xNiksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgVSx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIFY9ei5k'@;
put 'ZWZsYXRlSW5pdDIodGhpcy5zdHJtLHplLmxldmVsLHplLm1ldGhvZCx6ZS53aW5kb3dCaXRzLHplLm1lbUxldmVsLHplLnN0cmF0ZWd5KTtpZigwIT09Vil0aHJvdyBuZXcgRXJyb3IoS1tWXSk7emUuaGVhZGVyJiZ6LmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLHplLmhlYWRlcil9O2Z1'@;
put 'bmN0aW9uIG1lKFNlLHplKXt2YXIgVj1uZXcgbGUoemUpO2lmKFYucHVzaChTZSwhMCksVi5lcnIpdGhyb3cgVi5tc2c7cmV0dXJuIFYucmVzdWx0fWxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKFNlLHplKXt2YXIgYix4LFY9dGhpcy5zdHJtLHA9dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtp'@;
put 'Zih0aGlzLmVuZGVkKXJldHVybiExO3g9emU9PT1+fnplP3plOiEwPT09emU/NDowLFYuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiBTZT9MLnN0cmluZzJidWYoU2UpOlNlLFYubmV4dF9pbj0wLFYuYXZhaWxfaW49Vi5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PVYuYXZhaWxfb3V0JiYoVi5vdXRw'@;
put 'dXQ9bmV3IE4uQnVmOChwKSxWLm5leHRfb3V0PTAsVi5hdmFpbF9vdXQ9cCksMSE9PShiPXouZGVmbGF0ZShWLHgpKSYmMCE9PWIpcmV0dXJuIHRoaXMub25FbmQoYiksdGhpcy5lbmRlZD0hMCwhMTsoMD09PVYuYXZhaWxfb3V0fHwwPT09Vi5hdmFpbF9pbiYmND09PXgpJiZ0aGlzLm9uRGF0'@;
put 'YSgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz9MLmJ1ZjJiaW5zdHJpbmcoTi5zaHJpbmtCdWYoVi5vdXRwdXQsVi5uZXh0X291dCkpOk4uc2hyaW5rQnVmKFYub3V0cHV0LFYubmV4dF9vdXQpKX13aGlsZSgoVi5hdmFpbF9pbj4wfHwwPT09Vi5hdmFpbF9vdXQpJiYxIT09Yik7cmV0dXJu'@;
put 'IDQhPT14fHwoYj16LmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKGIpLHRoaXMuZW5kZWQ9ITAsMD09PWIpfSxsZS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKFNlKXt0aGlzLmNodW5rcy5wdXNoKFNlKX0sbGUucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKFNlKXswPT09U2Um'@;
put 'Jih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpOLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1TZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxPLkRlZmxhdGU9bGUsTy5kZWZsYXRl'@;
put 'PW1lLE8uZGVmbGF0ZVJhdz1mdW5jdGlvbiBfZShTZSx6ZSl7cmV0dXJuKHplPXplfHx7fSkucmF3PSEwLG1lKFNlLHplKX0sTy5nemlwPWZ1bmN0aW9uIFRlKFNlLHplKXtyZXR1cm4oemU9emV8fHt9KS5nemlwPSEwLG1lKFNlLHplKX19LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxz'@;
put 'L3N0cmluZ3MiOjI4LCIuL3psaWIvZGVmbGF0ZS5qcyI6MzIsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1dLDI2OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vemxpYi9pbmZsYXRlLmpzIiksTj1QKCIuL3V0aWxzL2NvbW1vbiIpLEw9'@;
put 'UCgiLi91dGlscy9zdHJpbmdzIiksSz1QKCIuL3psaWIvY29uc3RhbnRzIiksVT1QKCIuL3psaWIvbWVzc2FnZXMiKSxXPVAoIi4vemxpYi96c3RyZWFtIiksWT1QKCIuL3psaWIvZ3poZWFkZXIiKSxYPWZ1bmN0aW9uKHJlKXt0aGlzLm9wdGlvbnM9Ti5hc3NpZ24oe2NodW5rU2l6ZToxNjM4'@;
put 'NCx3aW5kb3dCaXRzOjAsdG86IiJ9LHJlfHx7fSk7dmFyIGllPXRoaXMub3B0aW9ucztpZS5yYXcmJmllLndpbmRvd0JpdHM+PTAmJmllLndpbmRvd0JpdHM8MTYmJihpZS53aW5kb3dCaXRzPS1pZS53aW5kb3dCaXRzLDA9PT1pZS53aW5kb3dCaXRzJiYoaWUud2luZG93Qml0cz0tMTUpKSxp'@;
put 'ZS53aW5kb3dCaXRzPj0wJiZpZS53aW5kb3dCaXRzPDE2JiYhKHJlJiZyZS53aW5kb3dCaXRzKSYmKGllLndpbmRvd0JpdHMrPTMyKSxpZS53aW5kb3dCaXRzPjE1JiZpZS53aW5kb3dCaXRzPDQ4JiYoMTUmaWUud2luZG93Qml0c3x8KGllLndpbmRvd0JpdHN8PTE1KSksdGhpcy5lcnI9MCx0'@;
put 'aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgVyx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIGxlPXouaW5mbGF0ZUluaXQyKHRoaXMuc3RybSxpZS53aW5kb3dCaXRzKTtpZihsZSE9PUsuWl9PSyl0aHJvdyBuZXcgRXJyb3IoVVtsZV0pO3Ro'@;
put 'aXMuaGVhZGVyPW5ldyBZLHouaW5mbGF0ZUdldEhlYWRlcih0aGlzLnN0cm0sdGhpcy5oZWFkZXIpfTtmdW5jdGlvbiBlZShyZSxpZSl7dmFyIGxlPW5ldyBYKGllKTtpZihsZS5wdXNoKHJlLCEwKSxsZS5lcnIpdGhyb3cgbGUubXNnO3JldHVybiBsZS5yZXN1bHR9WC5wcm90b3R5cGUucHVz'@;
put 'aD1mdW5jdGlvbihyZSxpZSl7dmFyIF9lLFRlLFNlLHplLFYsbGU9dGhpcy5zdHJtLG1lPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtUZT1pZT09PX5+aWU/aWU6ITA9PT1pZT9LLlpfRklOSVNIOksuWl9OT19GTFVTSCxsZS5pbnB1dD0ic3RyaW5nIj09'@;
put 'dHlwZW9mIHJlP0wuYmluc3RyaW5nMmJ1ZihyZSk6cmUsbGUubmV4dF9pbj0wLGxlLmF2YWlsX2luPWxlLmlucHV0Lmxlbmd0aDtkb3tpZigwPT09bGUuYXZhaWxfb3V0JiYobGUub3V0cHV0PW5ldyBOLkJ1ZjgobWUpLGxlLm5leHRfb3V0PTAsbGUuYXZhaWxfb3V0PW1lKSwoX2U9ei5pbmZs'@;
put 'YXRlKGxlLEsuWl9OT19GTFVTSCkpIT09Sy5aX1NUUkVBTV9FTkQmJl9lIT09Sy5aX09LKXJldHVybiB0aGlzLm9uRW5kKF9lKSx0aGlzLmVuZGVkPSEwLCExO2xlLm5leHRfb3V0JiYoMD09PWxlLmF2YWlsX291dHx8X2U9PT1LLlpfU1RSRUFNX0VORHx8MD09PWxlLmF2YWlsX2luJiZUZT09'@;
put 'PUsuWl9GSU5JU0gpJiYoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/KFNlPUwudXRmOGJvcmRlcihsZS5vdXRwdXQsbGUubmV4dF9vdXQpLHplPWxlLm5leHRfb3V0LVNlLFY9TC5idWYyc3RyaW5nKGxlLm91dHB1dCxTZSksbGUubmV4dF9vdXQ9emUsbGUuYXZhaWxfb3V0PW1lLXplLHpl'@;
put 'JiZOLmFycmF5U2V0KGxlLm91dHB1dCxsZS5vdXRwdXQsU2UsemUsMCksdGhpcy5vbkRhdGEoVikpOnRoaXMub25EYXRhKE4uc2hyaW5rQnVmKGxlLm91dHB1dCxsZS5uZXh0X291dCkpKX13aGlsZShsZS5hdmFpbF9pbj4wJiZfZSE9PUsuWl9TVFJFQU1fRU5EKTtyZXR1cm4gX2U9PT1LLlpf'@;
put 'U1RSRUFNX0VORCYmKFRlPUsuWl9GSU5JU0gpLFRlIT09Sy5aX0ZJTklTSHx8KF9lPXouaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoX2UpLHRoaXMuZW5kZWQ9ITAsX2U9PT1LLlpfT0spfSxYLnByb3RvdHlwZS5vbkRhdGE9ZnVuY3Rpb24ocmUpe3RoaXMuY2h1bmtzLnB1c2go'@;
put 'cmUpfSxYLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihyZSl7cmU9PT1LLlpfT0smJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpOLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1y'@;
put 'ZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxPLkluZmxhdGU9WCxPLmluZmxhdGU9ZWUsTy5pbmZsYXRlUmF3PWZ1bmN0aW9uIEoocmUsaWUpe3JldHVybihpZT1pZXx8e30pLnJhdz0hMCxlZShyZSxpZSl9LE8udW5nemlwPWVlfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJp'@;
put 'bmdzIjoyOCwiLi96bGliL2NvbnN0YW50cyI6MzAsIi4vemxpYi9nemhlYWRlciI6MzMsIi4vemxpYi9pbmZsYXRlLmpzIjozNSwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9dHlwZW9mIFVp'@;
put 'bnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgSW50MzJBcnJheTwidSI7Ty5hc3NpZ249ZnVuY3Rpb24oSyl7Zm9yKHZhciBVPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtVLmxlbmd0aDspe3ZhciBXPVUuc2hpZnQoKTtpZihXKXtp'@;
put 'Zigib2JqZWN0IiE9dHlwZW9mIFcpdGhyb3cgbmV3IFR5cGVFcnJvcihXKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIFkgaW4gVylXLmhhc093blByb3BlcnR5KFkpJiYoS1tZXT1XW1ldKX19cmV0dXJuIEt9LE8uc2hyaW5rQnVmPWZ1bmN0aW9uKEssVSl7cmV0dXJuIEsubGVuZ3Ro'@;
put 'PT09VT9LOksuc3ViYXJyYXk/Sy5zdWJhcnJheSgwLFUpOihLLmxlbmd0aD1VLEspfTt2YXIgTj17YXJyYXlTZXQ6ZnVuY3Rpb24oSyxVLFcsWSxYKXtpZihVLnN1YmFycmF5JiZLLnN1YmFycmF5KUsuc2V0KFUuc3ViYXJyYXkoVyxXK1kpLFgpO2Vsc2UgZm9yKHZhciBlZT0wO2VlPFk7ZWUr'@;
put 'KylLW1grZWVdPVVbVytlZV19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oSyl7dmFyIFUsVyxZLFgsZWUsSjtmb3IoWT0wLFU9MCxXPUsubGVuZ3RoO1U8VztVKyspWSs9S1tVXS5sZW5ndGg7Zm9yKEo9bmV3IFVpbnQ4QXJyYXkoWSksWD0wLFU9MCxXPUsubGVuZ3RoO1U8VztVKyspSi5zZXQo'@;
put 'ZWU9S1tVXSxYKSxYKz1lZS5sZW5ndGg7cmV0dXJuIEp9fSxMPXthcnJheVNldDpmdW5jdGlvbihLLFUsVyxZLFgpe2Zvcih2YXIgZWU9MDtlZTxZO2VlKyspS1tYK2VlXT1VW1crZWVdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKEspe3JldHVybltdLmNvbmNhdC5hcHBseShbXSxLKX19O08u'@;
put 'c2V0VHlwZWQ9ZnVuY3Rpb24oSyl7Sz8oTy5CdWY4PVVpbnQ4QXJyYXksTy5CdWYxNj1VaW50MTZBcnJheSxPLkJ1ZjMyPUludDMyQXJyYXksTy5hc3NpZ24oTyxOKSk6KE8uQnVmOD1BcnJheSxPLkJ1ZjE2PUFycmF5LE8uQnVmMzI9QXJyYXksTy5hc3NpZ24oTyxMKSl9LE8uc2V0VHlwZWQo'@;
put 'eil9LHt9XSwyODpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2NvbW1vbiIpLE49ITAsTD0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2h7Tj0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50'@;
put 'OEFycmF5KDEpKX1jYXRjaHtMPSExfWZvcih2YXIgSz1uZXcgei5CdWY4KDI1NiksVT0wO1U8MjU2O1UrKylLW1VdPVU+PTI1Mj82OlU+PTI0OD81OlU+PTI0MD80OlU+PTIyND8zOlU+PTE5Mj8yOjE7ZnVuY3Rpb24gVyhZLFgpe2lmKFg8NjU1MzcmJihZLnN1YmFycmF5JiZMfHwhWS5zdWJh'@;
put 'cnJheSYmTikpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx6LnNocmlua0J1ZihZLFgpKTtmb3IodmFyIGVlPSIiLEo9MDtKPFg7SisrKWVlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFlbSl0pO3JldHVybiBlZX1LWzI1NF09S1syNTRdPTEsTy5zdHJpbmcyYnVmPWZ1bmN0'@;
put 'aW9uKFkpe3ZhciBYLGVlLEoscmUsaWUsbGU9WS5sZW5ndGgsbWU9MDtmb3IocmU9MDtyZTxsZTtyZSsrKTU1Mjk2PT0oNjQ1MTImKGVlPVkuY2hhckNvZGVBdChyZSkpKSYmcmUrMTxsZSYmNTYzMjA9PSg2NDUxMiYoSj1ZLmNoYXJDb2RlQXQocmUrMSkpKSYmKGVlPTY1NTM2KyhlZS01NTI5'@;
put 'Njw8MTApKyhKLTU2MzIwKSxyZSsrKSxtZSs9ZWU8MTI4PzE6ZWU8MjA0OD8yOmVlPDY1NTM2PzM6NDtmb3IoWD1uZXcgei5CdWY4KG1lKSxpZT0wLHJlPTA7aWU8bWU7cmUrKyk1NTI5Nj09KDY0NTEyJihlZT1ZLmNoYXJDb2RlQXQocmUpKSkmJnJlKzE8bGUmJjU2MzIwPT0oNjQ1MTImKEo9'@;
put 'WS5jaGFyQ29kZUF0KHJlKzEpKSkmJihlZT02NTUzNisoZWUtNTUyOTY8PDEwKSsoSi01NjMyMCkscmUrKyksZWU8MTI4P1hbaWUrK109ZWU6ZWU8MjA0OD8oWFtpZSsrXT0xOTJ8ZWU+Pj42LFhbaWUrK109MTI4fDYzJmVlKTplZTw2NTUzNj8oWFtpZSsrXT0yMjR8ZWU+Pj4xMixYW2llKytd'@;
put 'PTEyOHxlZT4+PjYmNjMsWFtpZSsrXT0xMjh8NjMmZWUpOihYW2llKytdPTI0MHxlZT4+PjE4LFhbaWUrK109MTI4fGVlPj4+MTImNjMsWFtpZSsrXT0xMjh8ZWU+Pj42JjYzLFhbaWUrK109MTI4fDYzJmVlKTtyZXR1cm4gWH0sTy5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKFkpe3JldHVybiBX'@;
put 'KFksWS5sZW5ndGgpfSxPLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oWSl7Zm9yKHZhciBYPW5ldyB6LkJ1ZjgoWS5sZW5ndGgpLGVlPTAsSj1YLmxlbmd0aDtlZTxKO2VlKyspWFtlZV09WS5jaGFyQ29kZUF0KGVlKTtyZXR1cm4gWH0sTy5idWYyc3RyaW5nPWZ1bmN0aW9uKFksWCl7dmFyIGVl'@;
put 'LEoscmUsaWUsbGU9WHx8WS5sZW5ndGgsbWU9bmV3IEFycmF5KDIqbGUpO2ZvcihKPTAsZWU9MDtlZTxsZTspaWYoKHJlPVlbZWUrK10pPDEyOCltZVtKKytdPXJlO2Vsc2UgaWYoKGllPUtbcmVdKT40KW1lW0orK109NjU1MzMsZWUrPWllLTE7ZWxzZXtmb3IocmUmPTI9PT1pZT8zMTozPT09'@;
put 'aWU/MTU6NztpZT4xJiZlZTxsZTspcmU9cmU8PDZ8NjMmWVtlZSsrXSxpZS0tO2llPjE/bWVbSisrXT02NTUzMzpyZTw2NTUzNj9tZVtKKytdPXJlOihtZVtKKytdPTU1Mjk2fChyZS09NjU1MzYpPj4xMCYxMDIzLG1lW0orK109NTYzMjB8MTAyMyZyZSl9cmV0dXJuIFcobWUsSil9LE8udXRm'@;
put 'OGJvcmRlcj1mdW5jdGlvbihZLFgpe3ZhciBlZTtmb3IoKFg9WHx8WS5sZW5ndGgpPlkubGVuZ3RoJiYoWD1ZLmxlbmd0aCksZWU9WC0xO2VlPj0wJiYxMjg9PSgxOTImWVtlZV0pOyllZS0tO3JldHVybiBlZTwwfHwwPT09ZWU/WDplZStLW1lbZWVdXT5YP2VlOlh9fSx7Ii4vY29tbW9uIjoy'@;
put 'N31dLDI5OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbiB6KE4sTCxLLFUpe2Zvcih2YXIgVz02NTUzNSZOLFk9Tj4+PjE2JjY1NTM1LFg9MDswIT09Szspe0stPVg9Sz4yZTM/MmUzOks7ZG97WT1ZKyhXPVcrTFtVKytdfDApfDB9d2hpbGUoLS1YKTtX'@;
put 'JT02NTUyMSxZJT02NTUyMX1yZXR1cm4gV3xZPDwxNn19LHt9XSwzMDpbZnVuY3Rpb24oUCxGLE8pe0YuZXhwb3J0cz17Wl9OT19GTFVTSDowLFpfUEFSVElBTF9GTFVTSDoxLFpfU1lOQ19GTFVTSDoyLFpfRlVMTF9GTFVTSDozLFpfRklOSVNIOjQsWl9CTE9DSzo1LFpfVFJFRVM6NixaX09L'@;
put 'OjAsWl9TVFJFQU1fRU5EOjEsWl9ORUVEX0RJQ1Q6MixaX0VSUk5POi0xLFpfU1RSRUFNX0VSUk9SOi0yLFpfREFUQV9FUlJPUjotMyxaX0JVRl9FUlJPUjotNSxaX05PX0NPTVBSRVNTSU9OOjAsWl9CRVNUX1NQRUVEOjEsWl9CRVNUX0NPTVBSRVNTSU9OOjksWl9ERUZBVUxUX0NPTVBSRVNT'@;
put 'SU9OOi0xLFpfRklMVEVSRUQ6MSxaX0hVRkZNQU5fT05MWToyLFpfUkxFOjMsWl9GSVhFRDo0LFpfREVGQVVMVF9TVFJBVEVHWTowLFpfQklOQVJZOjAsWl9URVhUOjEsWl9VTktOT1dOOjIsWl9ERUZMQVRFRDo4fX0se31dLDMxOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciBO'@;
put 'PWZ1bmN0aW9uIHooKXtmb3IodmFyIEssVT1bXSxXPTA7VzwyNTY7VysrKXtLPVc7Zm9yKHZhciBZPTA7WTw4O1krKylLPTEmSz8zOTg4MjkyMzg0Xks+Pj4xOks+Pj4xO1VbV109S31yZXR1cm4gVX0oKTtGLmV4cG9ydHM9ZnVuY3Rpb24gTChLLFUsVyxZKXt2YXIgWD1OLGVlPVkrVztLPX5L'@;
put 'O2Zvcih2YXIgSj1ZO0o8ZWU7SisrKUs9Sz4+PjheWFsyNTUmKEteVVtKXSldO3JldHVybn5LfX0se31dLDMyOltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpLE49UCgiLi90cmVlcyIpLEw9UCgiLi9hZGxlcjMyIiksSz1QKCIuL2NyYzMy'@;
put 'IiksVT1QKCIuL21lc3NhZ2VzIiksVz0wLHJlPTAsbGU9LTIseD0yLEM9OCxBPTI4NixvZT0zMCx0ZT0xOSxzZT0yKkErMSx3ZT0xNSxVZT0zLEplPTI1OCxhdD1KZStVZSsxLHZlPTQyLFJlPTExMztmdW5jdGlvbiBRZShXZSxUdCl7cmV0dXJuIFdlLm1zZz1VW1R0XSxUdH1mdW5jdGlvbiB1'@;
put 'bihXZSl7cmV0dXJuKFdlPDwxKS0oV2U+ND85OjApfWZ1bmN0aW9uIHl0KFdlKXtmb3IodmFyIFR0PVdlLmxlbmd0aDstLVR0Pj0wOylXZVtUdF09MH1mdW5jdGlvbiBNdChXZSl7dmFyIFR0PVdlLnN0YXRlLG5yPVR0LnBlbmRpbmc7bnI+V2UuYXZhaWxfb3V0JiYobnI9V2UuYXZhaWxfb3V0'@;
put 'KSwwIT09bnImJih6LmFycmF5U2V0KFdlLm91dHB1dCxUdC5wZW5kaW5nX2J1ZixUdC5wZW5kaW5nX291dCxucixXZS5uZXh0X291dCksV2UubmV4dF9vdXQrPW5yLFR0LnBlbmRpbmdfb3V0Kz1ucixXZS50b3RhbF9vdXQrPW5yLFdlLmF2YWlsX291dC09bnIsVHQucGVuZGluZy09bnIsMD09'@;
put 'PVR0LnBlbmRpbmcmJihUdC5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gRHQoV2UsVHQpe04uX3RyX2ZsdXNoX2Jsb2NrKFdlLFdlLmJsb2NrX3N0YXJ0Pj0wP1dlLmJsb2NrX3N0YXJ0Oi0xLFdlLnN0cnN0YXJ0LVdlLmJsb2NrX3N0YXJ0LFR0KSxXZS5ibG9ja19zdGFydD1XZS5zdHJzdGFy'@;
put 'dCxNdChXZS5zdHJtKX1mdW5jdGlvbiBpdChXZSxUdCl7V2UucGVuZGluZ19idWZbV2UucGVuZGluZysrXT1UdH1mdW5jdGlvbiAkZShXZSxUdCl7V2UucGVuZGluZ19idWZbV2UucGVuZGluZysrXT1UdD4+PjgmMjU1LFdlLnBlbmRpbmdfYnVmW1dlLnBlbmRpbmcrK109MjU1JlR0fWZ1bmN0'@;
put 'aW9uIHR0KFdlLFR0LG5yLGh0KXt2YXIgeHQ9V2UuYXZhaWxfaW47cmV0dXJuIHh0Pmh0JiYoeHQ9aHQpLDA9PT14dD8wOihXZS5hdmFpbF9pbi09eHQsei5hcnJheVNldChUdCxXZS5pbnB1dCxXZS5uZXh0X2luLHh0LG5yKSwxPT09V2Uuc3RhdGUud3JhcD9XZS5hZGxlcj1MKFdlLmFkbGVy'@;
put 'LFR0LHh0LG5yKToyPT09V2Uuc3RhdGUud3JhcCYmKFdlLmFkbGVyPUsoV2UuYWRsZXIsVHQseHQsbnIpKSxXZS5uZXh0X2luKz14dCxXZS50b3RhbF9pbis9eHQseHQpfWZ1bmN0aW9uIEhlKFdlLFR0KXt2YXIgeHQsQm4sbnI9V2UubWF4X2NoYWluX2xlbmd0aCxodD1XZS5zdHJzdGFydCxy'@;
put 'bj1XZS5wcmV2X2xlbmd0aCx6dD1XZS5uaWNlX21hdGNoLGhpPVdlLnN0cnN0YXJ0PldlLndfc2l6ZS1hdD9XZS5zdHJzdGFydC0oV2Uud19zaXplLWF0KTowLGNuPVdlLndpbmRvdyxmbj1XZS53X21hc2ssSWk9V2UucHJldixYdD1XZS5zdHJzdGFydCtKZSxlbj1jbltodCtybi0xXSxobz1j'@;
put 'bltodCtybl07V2UucHJldl9sZW5ndGg+PVdlLmdvb2RfbWF0Y2gmJihucj4+PTIpLHp0PldlLmxvb2thaGVhZCYmKHp0PVdlLmxvb2thaGVhZCk7ZG97aWYoY25bKHh0PVR0KStybl09PT1obyYmY25beHQrcm4tMV09PT1lbiYmY25beHRdPT09Y25baHRdJiZjblsrK3h0XT09PWNuW2h0KzFd'@;
put 'KXtodCs9Mix4dCsrO2Rve313aGlsZShjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZjblsrK2h0XT09PWNuWysr'@;
put 'eHRdJiZjblsrK2h0XT09PWNuWysreHRdJiZodDxYdCk7aWYoQm49SmUtKFh0LWh0KSxodD1YdC1KZSxCbj5ybil7aWYoV2UubWF0Y2hfc3RhcnQ9VHQscm49Qm4sQm4+PXp0KWJyZWFrO2VuPWNuW2h0K3JuLTFdLGhvPWNuW2h0K3JuXX19fXdoaWxlKChUdD1JaVtUdCZmbl0pPmhpJiYwIT0t'@;
put 'LW5yKTtyZXR1cm4gcm48PVdlLmxvb2thaGVhZD9ybjpXZS5sb29rYWhlYWR9ZnVuY3Rpb24gdXQoV2Upe3ZhciBucixodCx4dCxCbixybixUdD1XZS53X3NpemU7ZG97aWYoQm49V2Uud2luZG93X3NpemUtV2UubG9va2FoZWFkLVdlLnN0cnN0YXJ0LFdlLnN0cnN0YXJ0Pj1UdCsoVHQtYXQp'@;
put 'KXt6LmFycmF5U2V0KFdlLndpbmRvdyxXZS53aW5kb3csVHQsVHQsMCksV2UubWF0Y2hfc3RhcnQtPVR0LFdlLnN0cnN0YXJ0LT1UdCxXZS5ibG9ja19zdGFydC09VHQsbnI9aHQ9V2UuaGFzaF9zaXplO2Rve3h0PVdlLmhlYWRbLS1ucl0sV2UuaGVhZFtucl09eHQ+PVR0P3h0LVR0OjB9d2hp'@;
put 'bGUoLS1odCk7bnI9aHQ9VHQ7ZG97eHQ9V2UucHJldlstLW5yXSxXZS5wcmV2W25yXT14dD49VHQ/eHQtVHQ6MH13aGlsZSgtLWh0KTtCbis9VHR9aWYoMD09PVdlLnN0cm0uYXZhaWxfaW4pYnJlYWs7aWYoaHQ9dHQoV2Uuc3RybSxXZS53aW5kb3csV2Uuc3Ryc3RhcnQrV2UubG9va2FoZWFk'@;
put 'LEJuKSxXZS5sb29rYWhlYWQrPWh0LFdlLmxvb2thaGVhZCtXZS5pbnNlcnQ+PVVlKWZvcihXZS5pbnNfaD1XZS53aW5kb3dbcm49V2Uuc3Ryc3RhcnQtV2UuaW5zZXJ0XSxXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W3JuKzFdKSZXZS5oYXNoX21hc2s7V2Uu'@;
put 'aW5zZXJ0JiYoV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tybitVZS0xXSkmV2UuaGFzaF9tYXNrLFdlLnByZXZbcm4mV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1ybixybisrLFdlLmluc2VydC0tLCEoV2UubG9va2Fo'@;
put 'ZWFkK1dlLmluc2VydDxVZSkpOyk7fXdoaWxlKFdlLmxvb2thaGVhZDxhdCYmMCE9PVdlLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIFJ0KFdlLFR0KXtmb3IodmFyIG5yLGh0Ozspe2lmKFdlLmxvb2thaGVhZDxhdCl7aWYodXQoV2UpLFdlLmxvb2thaGVhZDxhdCYmVHQ9PT1XKXJldHVybiAx'@;
put 'O2lmKDA9PT1XZS5sb29rYWhlYWQpYnJlYWt9aWYobnI9MCxXZS5sb29rYWhlYWQ+PVVlJiYoV2UuaW5zX2g9KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCtVZS0xXSkmV2UuaGFzaF9tYXNrLG5yPVdlLnByZXZbV2Uuc3Ryc3RhcnQmV2Uud19tYXNrXT1X'@;
put 'ZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1XZS5zdHJzdGFydCksMCE9PW5yJiZXZS5zdHJzdGFydC1ucjw9V2Uud19zaXplLWF0JiYoV2UubWF0Y2hfbGVuZ3RoPUhlKFdlLG5yKSksV2UubWF0Y2hfbGVuZ3RoPj1VZSlpZihodD1OLl90cl90YWxseShXZSxXZS5zdHJzdGFy'@;
put 'dC1XZS5tYXRjaF9zdGFydCxXZS5tYXRjaF9sZW5ndGgtVWUpLFdlLmxvb2thaGVhZC09V2UubWF0Y2hfbGVuZ3RoLFdlLm1hdGNoX2xlbmd0aDw9V2UubWF4X2xhenlfbWF0Y2gmJldlLmxvb2thaGVhZD49VWUpe1dlLm1hdGNoX2xlbmd0aC0tO2Rve1dlLnN0cnN0YXJ0KyssV2UuaW5zX2g9'@;
put 'KFdlLmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCtVZS0xXSkmV2UuaGFzaF9tYXNrLG5yPVdlLnByZXZbV2Uuc3Ryc3RhcnQmV2Uud19tYXNrXT1XZS5oZWFkW1dlLmluc19oXSxXZS5oZWFkW1dlLmluc19oXT1XZS5zdHJzdGFydH13aGlsZSgwIT0tLVdlLm1h'@;
put 'dGNoX2xlbmd0aCk7V2Uuc3Ryc3RhcnQrK31lbHNlIFdlLnN0cnN0YXJ0Kz1XZS5tYXRjaF9sZW5ndGgsV2UubWF0Y2hfbGVuZ3RoPTAsV2UuaW5zX2g9V2Uud2luZG93W1dlLnN0cnN0YXJ0XSxXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0'@;
put 'KzFdKSZXZS5oYXNoX21hc2s7ZWxzZSBodD1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0Kys7aWYoaHQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gV2UuaW5zZXJ0PVdl'@;
put 'LnN0cnN0YXJ0PFVlLTE/V2Uuc3Ryc3RhcnQ6VWUtMSw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiBQdChXZSxUdCl7Zm9yKHZhciBucixodCx4dDs7'@;
put 'KXtpZihXZS5sb29rYWhlYWQ8YXQpe2lmKHV0KFdlKSxXZS5sb29rYWhlYWQ8YXQmJlR0PT09VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKG5yPTAsV2UubG9va2FoZWFkPj1VZSYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uu'@;
put 'c3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxucj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpLFdlLnByZXZfbGVuZ3RoPVdlLm1hdGNoX2xlbmd0aCxXZS5wcmV2X21hdGNoPVdlLm1hdGNo'@;
put 'X3N0YXJ0LFdlLm1hdGNoX2xlbmd0aD1VZS0xLDAhPT1uciYmV2UucHJldl9sZW5ndGg8V2UubWF4X2xhenlfbWF0Y2gmJldlLnN0cnN0YXJ0LW5yPD1XZS53X3NpemUtYXQmJihXZS5tYXRjaF9sZW5ndGg9SGUoV2UsbnIpLFdlLm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1XZS5zdHJhdGVneXx8'@;
put 'V2UubWF0Y2hfbGVuZ3RoPT09VWUmJldlLnN0cnN0YXJ0LVdlLm1hdGNoX3N0YXJ0PjQwOTYpJiYoV2UubWF0Y2hfbGVuZ3RoPVVlLTEpKSxXZS5wcmV2X2xlbmd0aD49VWUmJldlLm1hdGNoX2xlbmd0aDw9V2UucHJldl9sZW5ndGgpe3h0PVdlLnN0cnN0YXJ0K1dlLmxvb2thaGVhZC1VZSxo'@;
put 'dD1OLl90cl90YWxseShXZSxXZS5zdHJzdGFydC0xLVdlLnByZXZfbWF0Y2gsV2UucHJldl9sZW5ndGgtVWUpLFdlLmxvb2thaGVhZC09V2UucHJldl9sZW5ndGgtMSxXZS5wcmV2X2xlbmd0aC09Mjtkb3srK1dlLnN0cnN0YXJ0PD14dCYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9z'@;
put 'aGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxucj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpfXdoaWxlKDAhPS0tV2UucHJldl9sZW5ndGgpO2lmKFdlLm1h'@;
put 'dGNoX2F2YWlsYWJsZT0wLFdlLm1hdGNoX2xlbmd0aD1VZS0xLFdlLnN0cnN0YXJ0KyssaHQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1lbHNlIGlmKFdlLm1hdGNoX2F2YWlsYWJsZSl7aWYoKGh0PU4uX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0'@;
put 'cnN0YXJ0LTFdKSkmJkR0KFdlLCExKSxXZS5zdHJzdGFydCsrLFdlLmxvb2thaGVhZC0tLDA9PT1XZS5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIFdlLm1hdGNoX2F2YWlsYWJsZT0xLFdlLnN0cnN0YXJ0KyssV2UubG9va2FoZWFkLS19cmV0dXJuIFdlLm1hdGNoX2F2YWlsYWJsZSYm'@;
put 'KGh0PU4uX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0LTFdKSxXZS5tYXRjaF9hdmFpbGFibGU9MCksV2UuaW5zZXJ0PVdlLnN0cnN0YXJ0PFVlLTE/V2Uuc3Ryc3RhcnQ6VWUtMSw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0'@;
put 'X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn12YXIgUmksc249ZnVuY3Rpb24oV2UsVHQsbnIsaHQseHQpe3RoaXMuZ29vZF9sZW5ndGg9V2UsdGhpcy5tYXhfbGF6eT1UdCx0aGlzLm5pY2VfbGVuZ3RoPW5yLHRoaXMubWF4X2NoYWluPWh0LHRoaXMuZnVuYz14'@;
put 'dH07ZnVuY3Rpb24gZnQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5k'@;
put 'ZXg9MCx0aGlzLm1ldGhvZD1DLHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5o'@;
put 'YXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5t'@;
put 'YXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMu'@;
put 'ZHluX2x0cmVlPW5ldyB6LkJ1ZjE2KDIqc2UpLHRoaXMuZHluX2R0cmVlPW5ldyB6LkJ1ZjE2KDIqKDIqb2UrMSkpLHRoaXMuYmxfdHJlZT1uZXcgei5CdWYxNigyKigyKnRlKzEpKSx5dCh0aGlzLmR5bl9sdHJlZSkseXQodGhpcy5keW5fZHRyZWUpLHl0KHRoaXMuYmxfdHJlZSksdGhpcy5s'@;
put 'X2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMuYmxfZGVzYz1udWxsLHRoaXMuYmxfY291bnQ9bmV3IHouQnVmMTYod2UrMSksdGhpcy5oZWFwPW5ldyB6LkJ1ZjE2KDIqQSsxKSx5dCh0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1u'@;
put 'ZXcgei5CdWYxNigyKkErMSkseXQodGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9i'@;
put 'dWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gT3IoV2Upe3ZhciBUdDtyZXR1cm4gV2UmJldlLnN0YXRlPyhXZS50b3RhbF9pbj1XZS50b3RhbF9vdXQ9MCxXZS5kYXRhX3R5cGU9eCwoVHQ9V2Uuc3RhdGUpLnBlbmRpbmc9MCxUdC5wZW5kaW5nX291dD0wLFR0LndyYXA8MCYmKFR0Lndy'@;
put 'YXA9LVR0LndyYXApLFR0LnN0YXR1cz1UdC53cmFwP3ZlOlJlLFdlLmFkbGVyPTI9PT1UdC53cmFwPzA6MSxUdC5sYXN0X2ZsdXNoPVcsTi5fdHJfaW5pdChUdCkscmUpOlFlKFdlLGxlKX1mdW5jdGlvbiBXdChXZSl7dmFyIFR0PU9yKFdlKTtyZXR1cm4gVHQ9PT1yZSYmZnVuY3Rpb24gaG4o'@;
put 'V2Upe1dlLndpbmRvd19zaXplPTIqV2Uud19zaXplLHl0KFdlLmhlYWQpLFdlLm1heF9sYXp5X21hdGNoPVJpW1dlLmxldmVsXS5tYXhfbGF6eSxXZS5nb29kX21hdGNoPVJpW1dlLmxldmVsXS5nb29kX2xlbmd0aCxXZS5uaWNlX21hdGNoPVJpW1dlLmxldmVsXS5uaWNlX2xlbmd0aCxXZS5t'@;
put 'YXhfY2hhaW5fbGVuZ3RoPVJpW1dlLmxldmVsXS5tYXhfY2hhaW4sV2Uuc3Ryc3RhcnQ9MCxXZS5ibG9ja19zdGFydD0wLFdlLmxvb2thaGVhZD0wLFdlLmluc2VydD0wLFdlLm1hdGNoX2xlbmd0aD1XZS5wcmV2X2xlbmd0aD1VZS0xLFdlLm1hdGNoX2F2YWlsYWJsZT0wLFdlLmluc19oPTB9'@;
put 'KFdlLnN0YXRlKSxUdH1mdW5jdGlvbiBSbihXZSxUdCxucixodCx4dCxCbil7aWYoIVdlKXJldHVybiBsZTt2YXIgcm49MTtpZigtMT09PVR0JiYoVHQ9NiksaHQ8MD8ocm49MCxodD0taHQpOmh0PjE1JiYocm49MixodC09MTYpLHh0PDF8fHh0Pjl8fG5yIT09Q3x8aHQ8OHx8aHQ+MTV8fFR0'@;
put 'PDB8fFR0Pjl8fEJuPDB8fEJuPjQpcmV0dXJuIFFlKFdlLGxlKTs4PT09aHQmJihodD05KTt2YXIgenQ9bmV3IGZ0O3JldHVybiBXZS5zdGF0ZT16dCx6dC5zdHJtPVdlLHp0LndyYXA9cm4senQuZ3poZWFkPW51bGwsenQud19iaXRzPWh0LHp0Lndfc2l6ZT0xPDx6dC53X2JpdHMsenQud19t'@;
put 'YXNrPXp0Lndfc2l6ZS0xLHp0Lmhhc2hfYml0cz14dCs3LHp0Lmhhc2hfc2l6ZT0xPDx6dC5oYXNoX2JpdHMsenQuaGFzaF9tYXNrPXp0Lmhhc2hfc2l6ZS0xLHp0Lmhhc2hfc2hpZnQ9fn4oKHp0Lmhhc2hfYml0cytVZS0xKS9VZSksenQud2luZG93PW5ldyB6LkJ1ZjgoMip6dC53X3NpemUp'@;
put 'LHp0LmhlYWQ9bmV3IHouQnVmMTYoenQuaGFzaF9zaXplKSx6dC5wcmV2PW5ldyB6LkJ1ZjE2KHp0Lndfc2l6ZSksenQubGl0X2J1ZnNpemU9MTw8eHQrNix6dC5wZW5kaW5nX2J1Zl9zaXplPTQqenQubGl0X2J1ZnNpemUsenQucGVuZGluZ19idWY9bmV3IHouQnVmOCh6dC5wZW5kaW5nX2J1'@;
put 'Zl9zaXplKSx6dC5kX2J1Zj16dC5saXRfYnVmc2l6ZT4+MSx6dC5sX2J1Zj0zKnp0LmxpdF9idWZzaXplLHp0LmxldmVsPVR0LHp0LnN0cmF0ZWd5PUJuLHp0Lm1ldGhvZD1ucixXdChXZSl9Umk9W25ldyBzbigwLDAsMCwwLGZ1bmN0aW9uIHF0KFdlLFR0KXt2YXIgbnI9NjU1MzU7Zm9yKG5y'@;
put 'PldlLnBlbmRpbmdfYnVmX3NpemUtNSYmKG5yPVdlLnBlbmRpbmdfYnVmX3NpemUtNSk7Oyl7aWYoV2UubG9va2FoZWFkPD0xKXtpZih1dChXZSksMD09PVdlLmxvb2thaGVhZCYmVHQ9PT1XKXJldHVybiAxO2lmKDA9PT1XZS5sb29rYWhlYWQpYnJlYWt9V2Uuc3Ryc3RhcnQrPVdlLmxvb2th'@;
put 'aGVhZCxXZS5sb29rYWhlYWQ9MDt2YXIgaHQ9V2UuYmxvY2tfc3RhcnQrbnI7aWYoKDA9PT1XZS5zdHJzdGFydHx8V2Uuc3Ryc3RhcnQ+PWh0KSYmKFdlLmxvb2thaGVhZD1XZS5zdHJzdGFydC1odCxXZS5zdHJzdGFydD1odCxEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KXx8V2Uu'@;
put 'c3Ryc3RhcnQtV2UuYmxvY2tfc3RhcnQ+PVdlLndfc2l6ZS1hdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTooV2Uuc3Ryc3RhcnQ+V2UuYmxv'@;
put 'Y2tfc3RhcnQmJkR0KFdlLCExKSwxKX0pLG5ldyBzbig0LDQsOCw0LFJ0KSxuZXcgc24oNCw1LDE2LDgsUnQpLG5ldyBzbig0LDYsMzIsMzIsUnQpLG5ldyBzbig0LDQsMTYsMTYsUHQpLG5ldyBzbig4LDE2LDMyLDMyLFB0KSxuZXcgc24oOCwxNiwxMjgsMTI4LFB0KSxuZXcgc24oOCwzMiwx'@;
put 'MjgsMjU2LFB0KSxuZXcgc24oMzIsMTI4LDI1OCwxMDI0LFB0KSxuZXcgc24oMzIsMjU4LDI1OCw0MDk2LFB0KV0sTy5kZWZsYXRlSW5pdD1mdW5jdGlvbiBzdChXZSxUdCl7cmV0dXJuIFJuKFdlLFR0LEMsMTUsOCwwKX0sTy5kZWZsYXRlSW5pdDI9Um4sTy5kZWZsYXRlUmVzZXQ9V3QsTy5k'@;
put 'ZWZsYXRlUmVzZXRLZWVwPU9yLE8uZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbiBBdChXZSxUdCl7cmV0dXJuIFdlJiZXZS5zdGF0ZSYmMj09PVdlLnN0YXRlLndyYXA/KFdlLnN0YXRlLmd6aGVhZD1UdCxyZSk6bGV9LE8uZGVmbGF0ZT1mdW5jdGlvbiBVdChXZSxUdCl7dmFyIG5yLGh0LHh0'@;
put 'LEJuO2lmKCFXZXx8IVdlLnN0YXRlfHxUdD41fHxUdDwwKXJldHVybiBXZT9RZShXZSxsZSk6bGU7aWYoaHQ9V2Uuc3RhdGUsIVdlLm91dHB1dHx8IVdlLmlucHV0JiYwIT09V2UuYXZhaWxfaW58fDY2Nj09PWh0LnN0YXR1cyYmNCE9PVR0KXJldHVybiBRZShXZSwwPT09V2UuYXZhaWxfb3V0'@;
put 'Py01OmxlKTtpZihodC5zdHJtPVdlLG5yPWh0Lmxhc3RfZmx1c2gsaHQubGFzdF9mbHVzaD1UdCxodC5zdGF0dXM9PT12ZSlpZigyPT09aHQud3JhcClXZS5hZGxlcj0wLGl0KGh0LDMxKSxpdChodCwxMzkpLGl0KGh0LDgpLGh0Lmd6aGVhZD8oaXQoaHQsKGh0Lmd6aGVhZC50ZXh0PzE6MCkr'@;
put 'KGh0Lmd6aGVhZC5oY3JjPzI6MCkrKGh0Lmd6aGVhZC5leHRyYT80OjApKyhodC5nemhlYWQubmFtZT84OjApKyhodC5nemhlYWQuY29tbWVudD8xNjowKSksaXQoaHQsMjU1Jmh0Lmd6aGVhZC50aW1lKSxpdChodCxodC5nemhlYWQudGltZT4+OCYyNTUpLGl0KGh0LGh0Lmd6aGVhZC50aW1l'@;
put 'Pj4xNiYyNTUpLGl0KGh0LGh0Lmd6aGVhZC50aW1lPj4yNCYyNTUpLGl0KGh0LDk9PT1odC5sZXZlbD8yOmh0LnN0cmF0ZWd5Pj0yfHxodC5sZXZlbDwyPzQ6MCksaXQoaHQsMjU1Jmh0Lmd6aGVhZC5vcyksaHQuZ3poZWFkLmV4dHJhJiZodC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoaXQoaHQs'@;
put 'MjU1Jmh0Lmd6aGVhZC5leHRyYS5sZW5ndGgpLGl0KGh0LGh0Lmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1KSksaHQuZ3poZWFkLmhjcmMmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcsMCkpLGh0Lmd6aW5kZXg9MCxodC5zdGF0dXM9NjkpOihpdCho'@;
put 'dCwwKSxpdChodCwwKSxpdChodCwwKSxpdChodCwwKSxpdChodCwwKSxpdChodCw5PT09aHQubGV2ZWw/MjpodC5zdHJhdGVneT49Mnx8aHQubGV2ZWw8Mj80OjApLGl0KGh0LDMpLGh0LnN0YXR1cz1SZSk7ZWxzZXt2YXIgcm49QysoaHQud19iaXRzLTg8PDQpPDw4O3JufD0oaHQuc3RyYXRl'@;
put 'Z3k+PTJ8fGh0LmxldmVsPDI/MDpodC5sZXZlbDw2PzE6Nj09PWh0LmxldmVsPzI6Myk8PDYsMCE9PWh0LnN0cnN0YXJ0JiYocm58PTMyKSxybis9MzEtcm4lMzEsaHQuc3RhdHVzPVJlLCRlKGh0LHJuKSwwIT09aHQuc3Ryc3RhcnQmJigkZShodCxXZS5hZGxlcj4+PjE2KSwkZShodCw2NTUz'@;
put 'NSZXZS5hZGxlcikpLFdlLmFkbGVyPTF9aWYoNjk9PT1odC5zdGF0dXMpaWYoaHQuZ3poZWFkLmV4dHJhKXtmb3IoeHQ9aHQucGVuZGluZztodC5nemluZGV4PCg2NTUzNSZodC5nemhlYWQuZXh0cmEubGVuZ3RoKSYmKGh0LnBlbmRpbmchPT1odC5wZW5kaW5nX2J1Zl9zaXplfHwoaHQuZ3po'@;
put 'ZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxNdChXZSkseHQ9aHQucGVuZGluZyxodC5wZW5kaW5nIT09aHQucGVuZGluZ19idWZfc2l6ZSkpOylpdChodCwyNTUmaHQuZ3poZWFkLmV4dHJhW2h0'@;
put 'Lmd6aW5kZXhdKSxodC5nemluZGV4Kys7aHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxodC5nemluZGV4PT09aHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGh0Lmd6aW5kZXg9MCxodC5z'@;
put 'dGF0dXM9NzMpfWVsc2UgaHQuc3RhdHVzPTczO2lmKDczPT09aHQuc3RhdHVzKWlmKGh0Lmd6aGVhZC5uYW1lKXt4dD1odC5wZW5kaW5nO2Rve2lmKGh0LnBlbmRpbmc9PT1odC5wZW5kaW5nX2J1Zl9zaXplJiYoaHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdl'@;
put 'LmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxNdChXZSkseHQ9aHQucGVuZGluZyxodC5wZW5kaW5nPT09aHQucGVuZGluZ19idWZfc2l6ZSkpe0JuPTE7YnJlYWt9Qm49aHQuZ3ppbmRleDxodC5nemhlYWQubmFtZS5sZW5ndGg/MjU1Jmh0Lmd6aGVhZC5uYW1lLmNo'@;
put 'YXJDb2RlQXQoaHQuZ3ppbmRleCsrKTowLGl0KGh0LEJuKX13aGlsZSgwIT09Qm4pO2h0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksMD09PUJuJiYoaHQuZ3ppbmRleD0wLGh0LnN0YXR1'@;
put 'cz05MSl9ZWxzZSBodC5zdGF0dXM9OTE7aWYoOTE9PT1odC5zdGF0dXMpaWYoaHQuZ3poZWFkLmNvbW1lbnQpe3h0PWh0LnBlbmRpbmc7ZG97aWYoaHQucGVuZGluZz09PWh0LnBlbmRpbmdfYnVmX3NpemUmJihodC5nemhlYWQuaGNyYyYmaHQucGVuZGluZz54dCYmKFdlLmFkbGVyPUsoV2Uu'@;
put 'YWRsZXIsaHQucGVuZGluZ19idWYsaHQucGVuZGluZy14dCx4dCkpLE10KFdlKSx4dD1odC5wZW5kaW5nLGh0LnBlbmRpbmc9PT1odC5wZW5kaW5nX2J1Zl9zaXplKSl7Qm49MTticmVha31Cbj1odC5nemluZGV4PGh0Lmd6aGVhZC5jb21tZW50Lmxlbmd0aD8yNTUmaHQuZ3poZWFkLmNvbW1l'@;
put 'bnQuY2hhckNvZGVBdChodC5nemluZGV4KyspOjAsaXQoaHQsQm4pfXdoaWxlKDAhPT1Cbik7aHQuZ3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSwwPT09Qm4mJihodC5zdGF0dXM9MTAzKX1l'@;
put 'bHNlIGh0LnN0YXR1cz0xMDM7aWYoMTAzPT09aHQuc3RhdHVzJiYoaHQuZ3poZWFkLmhjcmM/KGh0LnBlbmRpbmcrMj5odC5wZW5kaW5nX2J1Zl9zaXplJiZNdChXZSksaHQucGVuZGluZysyPD1odC5wZW5kaW5nX2J1Zl9zaXplJiYoaXQoaHQsMjU1JldlLmFkbGVyKSxpdChodCxXZS5hZGxl'@;
put 'cj4+OCYyNTUpLFdlLmFkbGVyPTAsaHQuc3RhdHVzPVJlKSk6aHQuc3RhdHVzPVJlKSwwIT09aHQucGVuZGluZyl7aWYoTXQoV2UpLDA9PT1XZS5hdmFpbF9vdXQpcmV0dXJuIGh0Lmxhc3RfZmx1c2g9LTEscmV9ZWxzZSBpZigwPT09V2UuYXZhaWxfaW4mJnVuKFR0KTw9dW4obnIpJiY0IT09'@;
put 'VHQpcmV0dXJuIFFlKFdlLC01KTtpZig2NjY9PT1odC5zdGF0dXMmJjAhPT1XZS5hdmFpbF9pbilyZXR1cm4gUWUoV2UsLTUpO2lmKDAhPT1XZS5hdmFpbF9pbnx8MCE9PWh0Lmxvb2thaGVhZHx8VHQhPT1XJiY2NjYhPT1odC5zdGF0dXMpe3ZhciBoaT0yPT09aHQuc3RyYXRlZ3k/ZnVuY3Rp'@;
put 'b24gUXQoV2UsVHQpe2Zvcih2YXIgbnI7Oyl7aWYoMD09PVdlLmxvb2thaGVhZCYmKHV0KFdlKSwwPT09V2UubG9va2FoZWFkKSl7aWYoVHQ9PT1XKXJldHVybiAxO2JyZWFrfWlmKFdlLm1hdGNoX2xlbmd0aD0wLG5yPU4uX3RyX3RhbGx5KFdlLDAsV2Uud2luZG93W1dlLnN0cnN0YXJ0XSks'@;
put 'V2UubG9va2FoZWFkLS0sV2Uuc3Ryc3RhcnQrKyxuciYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSww'@;
put 'PT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn0oaHQsVHQpOjM9PT1odC5zdHJhdGVneT9mdW5jdGlvbiBzaShXZSxUdCl7Zm9yKHZhciBucixodCx4dCxCbixybj1XZS53aW5kb3c7Oyl7aWYoV2UubG9va2FoZWFkPD1KZSl7aWYodXQoV2UpLFdlLmxvb2thaGVhZDw9SmUmJlR0PT09VylyZXR1'@;
put 'cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKFdlLm1hdGNoX2xlbmd0aD0wLFdlLmxvb2thaGVhZD49VWUmJldlLnN0cnN0YXJ0PjAmJihodD1yblt4dD1XZS5zdHJzdGFydC0xXSk9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSYmaHQ9PT1yblsrK3h0XSl7Qm49V2Uuc3Ryc3Rh'@;
put 'cnQrSmU7ZG97fXdoaWxlKGh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJmh0PT09cm5bKyt4dF0mJnh0PEJuKTtXZS5tYXRjaF9sZW5ndGg9SmUtKEJu'@;
put 'LXh0KSxXZS5tYXRjaF9sZW5ndGg+V2UubG9va2FoZWFkJiYoV2UubWF0Y2hfbGVuZ3RoPVdlLmxvb2thaGVhZCl9aWYoV2UubWF0Y2hfbGVuZ3RoPj1VZT8obnI9Ti5fdHJfdGFsbHkoV2UsMSxXZS5tYXRjaF9sZW5ndGgtVWUpLFdlLmxvb2thaGVhZC09V2UubWF0Y2hfbGVuZ3RoLFdlLnN0'@;
put 'cnN0YXJ0Kz1XZS5tYXRjaF9sZW5ndGgsV2UubWF0Y2hfbGVuZ3RoPTApOihucj1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0KyspLG5yJiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9'@;
put 'cmV0dXJuIFdlLmluc2VydD0wLDQ9PT1UdD8oRHQoV2UsITApLDA9PT1XZS5zdHJtLmF2YWlsX291dD8zOjQpOldlLmxhc3RfbGl0JiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCk/MToyfShodCxUdCk6UmlbaHQubGV2ZWxdLmZ1bmMoaHQsVHQpO2lmKCgzPT09aGl8fDQ9PT1o'@;
put 'aSkmJihodC5zdGF0dXM9NjY2KSwxPT09aGl8fDM9PT1oaSlyZXR1cm4gMD09PVdlLmF2YWlsX291dCYmKGh0Lmxhc3RfZmx1c2g9LTEpLHJlO2lmKDI9PT1oaSYmKDE9PT1UdD9OLl90cl9hbGlnbihodCk6NSE9PVR0JiYoTi5fdHJfc3RvcmVkX2Jsb2NrKGh0LDAsMCwhMSksMz09PVR0JiYo'@;
put 'eXQoaHQuaGVhZCksMD09PWh0Lmxvb2thaGVhZCYmKGh0LnN0cnN0YXJ0PTAsaHQuYmxvY2tfc3RhcnQ9MCxodC5pbnNlcnQ9MCkpKSxNdChXZSksMD09PVdlLmF2YWlsX291dCkpcmV0dXJuIGh0Lmxhc3RfZmx1c2g9LTEscmV9cmV0dXJuIDQhPT1UdD9yZTpodC53cmFwPD0wPzE6KDI9PT1o'@;
put 'dC53cmFwPyhpdChodCwyNTUmV2UuYWRsZXIpLGl0KGh0LFdlLmFkbGVyPj44JjI1NSksaXQoaHQsV2UuYWRsZXI+PjE2JjI1NSksaXQoaHQsV2UuYWRsZXI+PjI0JjI1NSksaXQoaHQsMjU1JldlLnRvdGFsX2luKSxpdChodCxXZS50b3RhbF9pbj4+OCYyNTUpLGl0KGh0LFdlLnRvdGFsX2lu'@;
put 'Pj4xNiYyNTUpLGl0KGh0LFdlLnRvdGFsX2luPj4yNCYyNTUpKTooJGUoaHQsV2UuYWRsZXI+Pj4xNiksJGUoaHQsNjU1MzUmV2UuYWRsZXIpKSxNdChXZSksaHQud3JhcD4wJiYoaHQud3JhcD0taHQud3JhcCksMCE9PWh0LnBlbmRpbmc/cmU6MSl9LE8uZGVmbGF0ZUVuZD1mdW5jdGlvbiBy'@;
put 'aShXZSl7dmFyIFR0O3JldHVybiBXZSYmV2Uuc3RhdGU/KFR0PVdlLnN0YXRlLnN0YXR1cykhPT12ZSYmNjkhPT1UdCYmNzMhPT1UdCYmOTEhPT1UdCYmMTAzIT09VHQmJlR0IT09UmUmJjY2NiE9PVR0P1FlKFdlLGxlKTooV2Uuc3RhdGU9bnVsbCxUdD09PVJlP1FlKFdlLC0zKTpyZSk6bGV9'@;
put 'LE8uZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL21lc3NhZ2VzIjozNywiLi90cmVlcyI6Mzh9XSwzMzpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0'@;
put 'IjtGLmV4cG9ydHM9ZnVuY3Rpb24geigpe3RoaXMudGV4dD0wLHRoaXMudGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfX0se31d'@;
put 'LDM0OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbihLLFUpe3ZhciBXLFksWCxlZSxKLHJlLGllLGxlLG1lLF9lLFRlLFNlLHplLFYscCxiLHgsQyxULEgsaixFLG0sQSxvZTtBPUsuaW5wdXQsWD0oWT1LLm5leHRfaW4pKyhLLmF2YWlsX2luLTUpLG9l'@;
put 'PUsub3V0cHV0LEo9KGVlPUsubmV4dF9vdXQpLShVLUsuYXZhaWxfb3V0KSxyZT1lZSsoSy5hdmFpbF9vdXQtMjU3KSxpZT0oVz1LLnN0YXRlKS5kbWF4LGxlPVcud3NpemUsbWU9Vy53aGF2ZSxfZT1XLnduZXh0LFRlPVcud2luZG93LFNlPVcuaG9sZCx6ZT1XLmJpdHMsVj1XLmxlbmNvZGUs'@;
put 'cD1XLmRpc3Rjb2RlLGI9KDE8PFcubGVuYml0cyktMSx4PSgxPDxXLmRpc3RiaXRzKS0xO2U6ZG97emU8MTUmJihTZSs9QVtZKytdPDx6ZSxTZSs9QVtZKytdPDwoemUrPTgpLHplKz04KSxDPVZbU2UmYl07dDpmb3IoOzspe2lmKFNlPj4+PVQ9Qz4+PjI0LHplLT1ULDA9PShUPUM+Pj4xNiYy'@;
put 'NTUpKW9lW2VlKytdPTY1NTM1JkM7ZWxzZXtpZighKDE2JlQpKXtpZig2NCZUKXtpZigzMiZUKXtXLm1vZGU9MTI7YnJlYWsgZX1LLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixXLm1vZGU9MzA7YnJlYWsgZX1DPVZbKDY1NTM1JkMpKyhTZSYoMTw8VCktMSldO2NvbnRpbnVl'@;
put 'IHR9Zm9yKEg9NjU1MzUmQywoVCY9MTUpJiYoemU8VCYmKFNlKz1BW1krK108PHplLHplKz04KSxIKz1TZSYoMTw8VCktMSxTZT4+Pj1ULHplLT1UKSx6ZTwxNSYmKFNlKz1BW1krK108PHplLFNlKz1BW1krK108PCh6ZSs9OCksemUrPTgpLEM9cFtTZSZ4XTs7KXtpZihTZT4+Pj1UPUM+Pj4y'@;
put 'NCx6ZS09VCwxNiYoVD1DPj4+MTYmMjU1KSl7aWYoaj02NTUzNSZDLHplPChUJj0xNSkmJihTZSs9QVtZKytdPDx6ZSwoemUrPTgpPFQmJihTZSs9QVtZKytdPDx6ZSx6ZSs9OCkpLChqKz1TZSYoMTw8VCktMSk+aWUpe0subXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVy5t'@;
put 'b2RlPTMwO2JyZWFrIGV9aWYoU2U+Pj49VCx6ZS09VCxqPihUPWVlLUopKXtpZigoVD1qLVQpPm1lJiZXLnNhbmUpe0subXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsVy5tb2RlPTMwO2JyZWFrIGV9aWYoRT0wLG09VGUsMD09PV9lKXtpZihFKz1sZS1ULFQ8SCl7SC09VDtk'@;
put 'b3tvZVtlZSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1lZS1qLG09b2V9fWVsc2UgaWYoX2U8VCl7aWYoRSs9bGUrX2UtVCwoVC09X2UpPEgpe0gtPVQ7ZG97b2VbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO2lmKEU9MCxfZTxIKXtILT1UPV9lO2Rve29lW2VlKytdPVRlW0UrK119d2hpbGUo'@;
put 'LS1UKTtFPWVlLWosbT1vZX19fWVsc2UgaWYoRSs9X2UtVCxUPEgpe0gtPVQ7ZG97b2VbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO0U9ZWUtaixtPW9lfWZvcig7SD4yOylvZVtlZSsrXT1tW0UrK10sb2VbZWUrK109bVtFKytdLG9lW2VlKytdPW1bRSsrXSxILT0zO0gmJihvZVtlZSsrXT1t'@;
put 'W0UrK10sSD4xJiYob2VbZWUrK109bVtFKytdKSl9ZWxzZXtFPWVlLWo7ZG97b2VbZWUrK109b2VbRSsrXSxvZVtlZSsrXT1vZVtFKytdLG9lW2VlKytdPW9lW0UrK10sSC09M313aGlsZShIPjIpO0gmJihvZVtlZSsrXT1vZVtFKytdLEg+MSYmKG9lW2VlKytdPW9lW0UrK10pKX1icmVha31p'@;
put 'Zig2NCZUKXtLLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixXLm1vZGU9MzA7YnJlYWsgZX1DPXBbKDY1NTM1JkMpKyhTZSYoMTw8VCktMSldfX1icmVha319d2hpbGUoWTxYJiZlZTxyZSk7U2UmPSgxPDwoemUtPShIPXplPj4zKTw8MykpLTEsSy5uZXh0X2luPVktPUgsSy5uZXh0X291'@;
put 'dD1lZSxLLmF2YWlsX2luPVk8WD9YLVkrNTo1LShZLVgpLEsuYXZhaWxfb3V0PWVlPHJlP3JlLWVlKzI1NzoyNTctKGVlLXJlKSxXLmhvbGQ9U2UsVy5iaXRzPXplfX0se31dLDM1OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4uL3V0aWxzL2NvbW1vbiIpLE49UCgi'@;
put 'Li9hZGxlcjMyIiksTD1QKCIuL2NyYzMyIiksSz1QKCIuL2luZmZhc3QiKSxVPVAoIi4vaW5mdHJlZXMiKSxpZT0wLF9lPS0yLHA9MSx5dD04NTIsTXQ9NTkyO2Z1bmN0aW9uICRlKEF0KXtyZXR1cm4oQXQ+Pj4yNCYyNTUpKyhBdD4+PjgmNjUyODApKygoNjUyODAmQXQpPDw4KSsoKDI1NSZB'@;
put 'dCk8PDI0KX1mdW5jdGlvbiB0dCgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXpl'@;
put 'PTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRo'@;
put 'aXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgei5CdWYxNigzMjApLHRoaXMud29yaz1uZXcgei5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51'@;
put 'bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiBIZShBdCl7dmFyIFJuO3JldHVybiBBdCYmQXQuc3RhdGU/KEF0LnRvdGFsX2luPUF0LnRvdGFsX291dD0oUm49QXQuc3RhdGUpLnRvdGFsPTAsQXQubXNnPSIiLFJuLndyYXAmJihBdC5hZGxlcj0xJlJuLndy'@;
put 'YXApLFJuLm1vZGU9cCxSbi5sYXN0PTAsUm4uaGF2ZWRpY3Q9MCxSbi5kbWF4PTMyNzY4LFJuLmhlYWQ9bnVsbCxSbi5ob2xkPTAsUm4uYml0cz0wLFJuLmxlbmNvZGU9Um4ubGVuZHluPW5ldyB6LkJ1ZjMyKHl0KSxSbi5kaXN0Y29kZT1Sbi5kaXN0ZHluPW5ldyB6LkJ1ZjMyKE10KSxSbi5z'@;
put 'YW5lPTEsUm4uYmFjaz0tMSxpZSk6X2V9ZnVuY3Rpb24gdXQoQXQpe3ZhciBSbjtyZXR1cm4gQXQmJkF0LnN0YXRlPygoUm49QXQuc3RhdGUpLndzaXplPTAsUm4ud2hhdmU9MCxSbi53bmV4dD0wLEhlKEF0KSk6X2V9ZnVuY3Rpb24gcXQoQXQsUm4pe3ZhciBzdCxVdDtyZXR1cm4hQXR8fCFB'@;
put 'dC5zdGF0ZXx8KFV0PUF0LnN0YXRlLFJuPDA/KHN0PTAsUm49LVJuKTooc3Q9MSsoUm4+PjQpLFJuPDQ4JiYoUm4mPTE1KSksUm4mJihSbjw4fHxSbj4xNSkpP19lOihudWxsIT09VXQud2luZG93JiZVdC53Yml0cyE9PVJuJiYoVXQud2luZG93PW51bGwpLFV0LndyYXA9c3QsVXQud2JpdHM9'@;
put 'Um4sdXQoQXQpKX1mdW5jdGlvbiBSdChBdCxSbil7dmFyIHN0LFV0O3JldHVybiBBdD8oVXQ9bmV3IHR0LEF0LnN0YXRlPVV0LFV0LndpbmRvdz1udWxsLChzdD1xdChBdCxSbikpIT09aWUmJihBdC5zdGF0ZT1udWxsKSxzdCk6X2V9dmFyIFF0LHNuLHNpPSEwO2Z1bmN0aW9uIFJpKEF0KXtp'@;
put 'ZihzaSl7dmFyIFJuO2ZvcihRdD1uZXcgei5CdWYzMig1MTIpLHNuPW5ldyB6LkJ1ZjMyKDMyKSxSbj0wO1JuPDE0NDspQXQubGVuc1tSbisrXT04O2Zvcig7Um48MjU2OylBdC5sZW5zW1JuKytdPTk7Zm9yKDtSbjwyODA7KUF0LmxlbnNbUm4rK109Nztmb3IoO1JuPDI4ODspQXQubGVuc1tS'@;
put 'bisrXT04O2ZvcihVKDEsQXQubGVucywwLDI4OCxRdCwwLEF0Lndvcmsse2JpdHM6OX0pLFJuPTA7Um48MzI7KUF0LmxlbnNbUm4rK109NTtVKDIsQXQubGVucywwLDMyLHNuLDAsQXQud29yayx7Yml0czo1fSksc2k9ITF9QXQubGVuY29kZT1RdCxBdC5sZW5iaXRzPTksQXQuZGlzdGNvZGU9'@;
put 'c24sQXQuZGlzdGJpdHM9NX1PLmluZmxhdGVSZXNldD11dCxPLmluZmxhdGVSZXNldDI9cXQsTy5pbmZsYXRlUmVzZXRLZWVwPUhlLE8uaW5mbGF0ZUluaXQ9ZnVuY3Rpb24gUHQoQXQpe3JldHVybiBSdChBdCwxNSl9LE8uaW5mbGF0ZUluaXQyPVJ0LE8uaW5mbGF0ZT1mdW5jdGlvbiBmdChB'@;
put 'dCxSbil7dmFyIHN0LFV0LHJpLFdlLFR0LG5yLGh0LHh0LEJuLHJuLHp0LGhpLGNuLGZuLFh0LGVuLGhvLE1pLHZyLFduLCRpLGVpLFZpLE5pLElpPTAsUXI9bmV3IHouQnVmOCg0KSxJbz1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIUF0fHwh'@;
put 'QXQuc3RhdGV8fCFBdC5vdXRwdXR8fCFBdC5pbnB1dCYmMCE9PUF0LmF2YWlsX2luKXJldHVybiBfZTsxMj09PShzdD1BdC5zdGF0ZSkubW9kZSYmKHN0Lm1vZGU9MTMpLFR0PUF0Lm5leHRfb3V0LHJpPUF0Lm91dHB1dCxXZT1BdC5uZXh0X2luLFV0PUF0LmlucHV0LHh0PXN0LmhvbGQsQm49'@;
put 'c3QuYml0cyxybj1ucj1BdC5hdmFpbF9pbix6dD1odD1BdC5hdmFpbF9vdXQsZWk9aWU7ZTpmb3IoOzspc3dpdGNoKHN0Lm1vZGUpe2Nhc2UgcDppZigwPT09c3Qud3JhcCl7c3QubW9kZT0xMzticmVha31mb3IoO0JuPDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108'@;
put 'PEJuLEJuKz04fWlmKDImc3Qud3JhcCYmMzU2MTU9PT14dCl7c3QuY2hlY2s9MCxRclswXT0yNTUmeHQsUXJbMV09eHQ+Pj44JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDIsMCkseHQ9MCxCbj0wLHN0Lm1vZGU9MjticmVha31pZihzdC5mbGFncz0wLHN0LmhlYWQmJihzdC5oZWFkLmRv'@;
put 'bmU9ITEpLCEoMSZzdC53cmFwKXx8KCgoMjU1Jnh0KTw8OCkrKHh0Pj44KSklMzEpe0F0Lm1zZz0iaW5jb3JyZWN0IGhlYWRlciBjaGVjayIsc3QubW9kZT0zMDticmVha31pZig4IT0oMTUmeHQpKXtBdC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixzdC5tb2RlPTMwO2JyZWFr'@;
put 'fWlmKEJuLT00LCRpPTgrKDE1Jih4dD4+Pj00KSksMD09PXN0LndiaXRzKXN0LndiaXRzPSRpO2Vsc2UgaWYoJGk+c3Qud2JpdHMpe0F0Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsc3QubW9kZT0zMDticmVha31zdC5kbWF4PTE8PCRpLEF0LmFkbGVyPXN0LmNoZWNrPTEsc3QubW9kZT01'@;
put 'MTImeHQ/MTA6MTIseHQ9MCxCbj0wO2JyZWFrO2Nhc2UgMjpmb3IoO0JuPDE2Oyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PEJuLEJuKz04fWlmKHN0LmZsYWdzPXh0LDghPSgyNTUmc3QuZmxhZ3MpKXtBdC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixz'@;
put 'dC5tb2RlPTMwO2JyZWFrfWlmKDU3MzQ0JnN0LmZsYWdzKXtBdC5tc2c9InVua25vd24gaGVhZGVyIGZsYWdzIHNldCIsc3QubW9kZT0zMDticmVha31zdC5oZWFkJiYoc3QuaGVhZC50ZXh0PXh0Pj44JjEpLDUxMiZzdC5mbGFncyYmKFFyWzBdPTI1NSZ4dCxRclsxXT14dD4+PjgmMjU1LHN0'@;
put 'LmNoZWNrPUwoc3QuY2hlY2ssUXIsMiwwKSkseHQ9MCxCbj0wLHN0Lm1vZGU9MztjYXNlIDM6Zm9yKDtCbjwzMjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxCbixCbis9OH1zdC5oZWFkJiYoc3QuaGVhZC50aW1lPXh0KSw1MTImc3QuZmxhZ3MmJihRclswXT0yNTUm'@;
put 'eHQsUXJbMV09eHQ+Pj44JjI1NSxRclsyXT14dD4+PjE2JjI1NSxRclszXT14dD4+PjI0JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDQsMCkpLHh0PTAsQm49MCxzdC5tb2RlPTQ7Y2FzZSA0OmZvcig7Qm48MTY7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8Qm4s'@;
put 'Qm4rPTh9c3QuaGVhZCYmKHN0LmhlYWQueGZsYWdzPTI1NSZ4dCxzdC5oZWFkLm9zPXh0Pj44KSw1MTImc3QuZmxhZ3MmJihRclswXT0yNTUmeHQsUXJbMV09eHQ+Pj44JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLFFyLDIsMCkpLHh0PTAsQm49MCxzdC5tb2RlPTU7Y2FzZSA1OmlmKDEwMjQm'@;
put 'c3QuZmxhZ3Mpe2Zvcig7Qm48MTY7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8Qm4sQm4rPTh9c3QubGVuZ3RoPXh0LHN0LmhlYWQmJihzdC5oZWFkLmV4dHJhX2xlbj14dCksNTEyJnN0LmZsYWdzJiYoUXJbMF09MjU1Jnh0LFFyWzFdPXh0Pj4+OCYyNTUsc3QuY2hl'@;
put 'Y2s9TChzdC5jaGVjayxRciwyLDApKSx4dD0wLEJuPTB9ZWxzZSBzdC5oZWFkJiYoc3QuaGVhZC5leHRyYT1udWxsKTtzdC5tb2RlPTY7Y2FzZSA2OmlmKDEwMjQmc3QuZmxhZ3MmJigoaGk9c3QubGVuZ3RoKT5uciYmKGhpPW5yKSxoaSYmKHN0LmhlYWQmJigkaT1zdC5oZWFkLmV4dHJhX2xl'@;
put 'bi1zdC5sZW5ndGgsc3QuaGVhZC5leHRyYXx8KHN0LmhlYWQuZXh0cmE9bmV3IEFycmF5KHN0LmhlYWQuZXh0cmFfbGVuKSksei5hcnJheVNldChzdC5oZWFkLmV4dHJhLFV0LFdlLGhpLCRpKSksNTEyJnN0LmZsYWdzJiYoc3QuY2hlY2s9TChzdC5jaGVjayxVdCxoaSxXZSkpLG5yLT1oaSxX'@;
put 'ZSs9aGksc3QubGVuZ3RoLT1oaSksc3QubGVuZ3RoKSlicmVhayBlO3N0Lmxlbmd0aD0wLHN0Lm1vZGU9NztjYXNlIDc6aWYoMjA0OCZzdC5mbGFncyl7aWYoMD09PW5yKWJyZWFrIGU7aGk9MDtkb3skaT1VdFtXZStoaSsrXSxzdC5oZWFkJiYkaSYmc3QubGVuZ3RoPDY1NTM2JiYoc3QuaGVh'@;
put 'ZC5uYW1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCRpKSl9d2hpbGUoJGkmJmhpPG5yKTtpZig1MTImc3QuZmxhZ3MmJihzdC5jaGVjaz1MKHN0LmNoZWNrLFV0LGhpLFdlKSksbnItPWhpLFdlKz1oaSwkaSlicmVhayBlfWVsc2Ugc3QuaGVhZCYmKHN0LmhlYWQubmFtZT1udWxsKTtzdC5sZW5n'@;
put 'dGg9MCxzdC5tb2RlPTg7Y2FzZSA4OmlmKDQwOTYmc3QuZmxhZ3Mpe2lmKDA9PT1ucilicmVhayBlO2hpPTA7ZG97JGk9VXRbV2UraGkrK10sc3QuaGVhZCYmJGkmJnN0Lmxlbmd0aDw2NTUzNiYmKHN0LmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZSgkaSkpfXdoaWxlKCRpJiZo'@;
put 'aTxucik7aWYoNTEyJnN0LmZsYWdzJiYoc3QuY2hlY2s9TChzdC5jaGVjayxVdCxoaSxXZSkpLG5yLT1oaSxXZSs9aGksJGkpYnJlYWsgZX1lbHNlIHN0LmhlYWQmJihzdC5oZWFkLmNvbW1lbnQ9bnVsbCk7c3QubW9kZT05O2Nhc2UgOTppZig1MTImc3QuZmxhZ3Mpe2Zvcig7Qm48MTY7KXtp'@;
put 'ZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8Qm4sQm4rPTh9aWYoeHQhPT0oNjU1MzUmc3QuY2hlY2spKXtBdC5tc2c9ImhlYWRlciBjcmMgbWlzbWF0Y2giLHN0Lm1vZGU9MzA7YnJlYWt9eHQ9MCxCbj0wfXN0LmhlYWQmJihzdC5oZWFkLmhjcmM9c3QuZmxhZ3M+PjkmMSxz'@;
put 'dC5oZWFkLmRvbmU9ITApLEF0LmFkbGVyPXN0LmNoZWNrPTAsc3QubW9kZT0xMjticmVhaztjYXNlIDEwOmZvcig7Qm48MzI7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8Qm4sQm4rPTh9QXQuYWRsZXI9c3QuY2hlY2s9JGUoeHQpLHh0PTAsQm49MCxzdC5tb2RlPTEx'@;
put 'O2Nhc2UgMTE6aWYoMD09PXN0LmhhdmVkaWN0KXJldHVybiBBdC5uZXh0X291dD1UdCxBdC5hdmFpbF9vdXQ9aHQsQXQubmV4dF9pbj1XZSxBdC5hdmFpbF9pbj1ucixzdC5ob2xkPXh0LHN0LmJpdHM9Qm4sMjtBdC5hZGxlcj1zdC5jaGVjaz0xLHN0Lm1vZGU9MTI7Y2FzZSAxMjppZig1PT09'@;
put 'Um58fDY9PT1SbilicmVhayBlO2Nhc2UgMTM6aWYoc3QubGFzdCl7eHQ+Pj49NyZCbixCbi09NyZCbixzdC5tb2RlPTI3O2JyZWFrfWZvcig7Qm48Mzspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxCbixCbis9OH1zd2l0Y2goc3QubGFzdD0xJnh0LEJuLT0xLDMmKHh0'@;
put 'Pj4+PTEpKXtjYXNlIDA6c3QubW9kZT0xNDticmVhaztjYXNlIDE6aWYoUmkoc3QpLHN0Lm1vZGU9MjAsNj09PVJuKXt4dD4+Pj0yLEJuLT0yO2JyZWFrIGV9YnJlYWs7Y2FzZSAyOnN0Lm1vZGU9MTc7YnJlYWs7Y2FzZSAzOkF0Lm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixzdC5tb2RlPTMw'@;
put 'fXh0Pj4+PTIsQm4tPTI7YnJlYWs7Y2FzZSAxNDpmb3IoeHQ+Pj49NyZCbixCbi09NyZCbjtCbjwzMjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxCbixCbis9OH1pZigoNjU1MzUmeHQpIT0oeHQ+Pj4xNl42NTUzNSkpe0F0Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxv'@;
put 'Y2sgbGVuZ3RocyIsc3QubW9kZT0zMDticmVha31pZihzdC5sZW5ndGg9NjU1MzUmeHQseHQ9MCxCbj0wLHN0Lm1vZGU9MTUsNj09PVJuKWJyZWFrIGU7Y2FzZSAxNTpzdC5tb2RlPTE2O2Nhc2UgMTY6aWYoaGk9c3QubGVuZ3RoKXtpZihoaT5uciYmKGhpPW5yKSxoaT5odCYmKGhpPWh0KSww'@;
put 'PT09aGkpYnJlYWsgZTt6LmFycmF5U2V0KHJpLFV0LFdlLGhpLFR0KSxuci09aGksV2UrPWhpLGh0LT1oaSxUdCs9aGksc3QubGVuZ3RoLT1oaTticmVha31zdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTc6Zm9yKDtCbjwxNDspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxC'@;
put 'bixCbis9OH1pZihzdC5ubGVuPTI1NysoMzEmeHQpLEJuLT01LHN0Lm5kaXN0PTErKDMxJih4dD4+Pj01KSksQm4tPTUsc3QubmNvZGU9NCsoMTUmKHh0Pj4+PTUpKSx4dD4+Pj00LEJuLT00LHN0Lm5sZW4+Mjg2fHxzdC5uZGlzdD4zMCl7QXQubXNnPSJ0b28gbWFueSBsZW5ndGggb3IgZGlz'@;
put 'dGFuY2Ugc3ltYm9scyIsc3QubW9kZT0zMDticmVha31zdC5oYXZlPTAsc3QubW9kZT0xODtjYXNlIDE4OmZvcig7c3QuaGF2ZTxzdC5uY29kZTspe2Zvcig7Qm48Mzspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxCbixCbis9OH1zdC5sZW5zW0lvW3N0LmhhdmUrK11d'@;
put 'PTcmeHQseHQ+Pj49MyxCbi09M31mb3IoO3N0LmhhdmU8MTk7KXN0LmxlbnNbSW9bc3QuaGF2ZSsrXV09MDtpZihzdC5sZW5jb2RlPXN0LmxlbmR5bixzdC5sZW5iaXRzPTcsZWk9VSgwLHN0LmxlbnMsMCwxOSxzdC5sZW5jb2RlLDAsc3Qud29yayxWaT17Yml0czpzdC5sZW5iaXRzfSksc3Qu'@;
put 'bGVuYml0cz1WaS5iaXRzLGVpKXtBdC5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsc3QubW9kZT0zMDticmVha31zdC5oYXZlPTAsc3QubW9kZT0xOTtjYXNlIDE5OmZvcig7c3QuaGF2ZTxzdC5ubGVuK3N0Lm5kaXN0Oyl7Zm9yKDtlbj0oSWk9c3QubGVuY29kZVt4dCYoMTw8c3Qu'@;
put 'bGVuYml0cyktMV0pPj4+MTYmMjU1LGhvPTY1NTM1JklpLCEoKFh0PUlpPj4+MjQpPD1Cbik7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8Qm4sQm4rPTh9aWYoaG88MTYpeHQ+Pj49WHQsQm4tPVh0LHN0LmxlbnNbc3QuaGF2ZSsrXT1obztlbHNle2lmKDE2PT09aG8p'@;
put 'e2ZvcihOaT1YdCsyO0JuPE5pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PEJuLEJuKz04fWlmKHh0Pj4+PVh0LEJuLT1YdCwwPT09c3QuaGF2ZSl7QXQubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixzdC5tb2RlPTMwO2JyZWFrfSRpPXN0LmxlbnNbc3Qu'@;
put 'aGF2ZS0xXSxoaT0zKygzJnh0KSx4dD4+Pj0yLEJuLT0yfWVsc2UgaWYoMTc9PT1obyl7Zm9yKE5pPVh0KzM7Qm48Tmk7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8Qm4sQm4rPTh9Qm4tPVh0LCRpPTAsaGk9MysoNyYoeHQ+Pj49WHQpKSx4dD4+Pj0zLEJuLT0zfWVs'@;
put 'c2V7Zm9yKE5pPVh0Kzc7Qm48Tmk7KXtpZigwPT09bnIpYnJlYWsgZTtuci0tLHh0Kz1VdFtXZSsrXTw8Qm4sQm4rPTh9Qm4tPVh0LCRpPTAsaGk9MTErKDEyNyYoeHQ+Pj49WHQpKSx4dD4+Pj03LEJuLT03fWlmKHN0LmhhdmUraGk+c3QubmxlbitzdC5uZGlzdCl7QXQubXNnPSJpbnZhbGlk'@;
put 'IGJpdCBsZW5ndGggcmVwZWF0IixzdC5tb2RlPTMwO2JyZWFrfWZvcig7aGktLTspc3QubGVuc1tzdC5oYXZlKytdPSRpfX1pZigzMD09PXN0Lm1vZGUpYnJlYWs7aWYoMD09PXN0LmxlbnNbMjU2XSl7QXQubXNnPSJpbnZhbGlkIGNvZGUgLS0gbWlzc2luZyBlbmQtb2YtYmxvY2siLHN0Lm1v'@;
put 'ZGU9MzA7YnJlYWt9aWYoc3QubGVuYml0cz05LGVpPVUoMSxzdC5sZW5zLDAsc3QubmxlbixzdC5sZW5jb2RlLDAsc3Qud29yayxWaT17Yml0czpzdC5sZW5iaXRzfSksc3QubGVuYml0cz1WaS5iaXRzLGVpKXtBdC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGhzIHNldCIsc3QubW9kZT0z'@;
put 'MDticmVha31pZihzdC5kaXN0Yml0cz02LHN0LmRpc3Rjb2RlPXN0LmRpc3RkeW4sZWk9VSgyLHN0LmxlbnMsc3QubmxlbixzdC5uZGlzdCxzdC5kaXN0Y29kZSwwLHN0LndvcmssVmk9e2JpdHM6c3QuZGlzdGJpdHN9KSxzdC5kaXN0Yml0cz1WaS5iaXRzLGVpKXtBdC5tc2c9ImludmFsaWQg'@;
put 'ZGlzdGFuY2VzIHNldCIsc3QubW9kZT0zMDticmVha31pZihzdC5tb2RlPTIwLDY9PT1SbilicmVhayBlO2Nhc2UgMjA6c3QubW9kZT0yMTtjYXNlIDIxOmlmKG5yPj02JiZodD49MjU4KXtBdC5uZXh0X291dD1UdCxBdC5hdmFpbF9vdXQ9aHQsQXQubmV4dF9pbj1XZSxBdC5hdmFpbF9pbj1u'@;
put 'cixzdC5ob2xkPXh0LHN0LmJpdHM9Qm4sSyhBdCx6dCksVHQ9QXQubmV4dF9vdXQscmk9QXQub3V0cHV0LGh0PUF0LmF2YWlsX291dCxXZT1BdC5uZXh0X2luLFV0PUF0LmlucHV0LG5yPUF0LmF2YWlsX2luLHh0PXN0LmhvbGQsQm49c3QuYml0cywxMj09PXN0Lm1vZGUmJihzdC5iYWNrPS0x'@;
put 'KTticmVha31mb3Ioc3QuYmFjaz0wO2VuPShJaT1zdC5sZW5jb2RlW3h0JigxPDxzdC5sZW5iaXRzKS0xXSk+Pj4xNiYyNTUsaG89NjU1MzUmSWksISgoWHQ9SWk+Pj4yNCk8PUJuKTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxCbixCbis9OH1pZihlbiYmISgyNDAm'@;
put 'ZW4pKXtmb3IoTWk9WHQsdnI9ZW4sV249aG87ZW49KElpPXN0LmxlbmNvZGVbV24rKCh4dCYoMTw8TWkrdnIpLTEpPj5NaSldKT4+PjE2JjI1NSxobz02NTUzNSZJaSwhKE1pKyhYdD1JaT4+PjI0KTw9Qm4pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PEJuLEJuKz04'@;
put 'fXh0Pj4+PU1pLEJuLT1NaSxzdC5iYWNrKz1NaX1pZih4dD4+Pj1YdCxCbi09WHQsc3QuYmFjays9WHQsc3QubGVuZ3RoPWhvLDA9PT1lbil7c3QubW9kZT0yNjticmVha31pZigzMiZlbil7c3QuYmFjaz0tMSxzdC5tb2RlPTEyO2JyZWFrfWlmKDY0JmVuKXtBdC5tc2c9ImludmFsaWQgbGl0'@;
put 'ZXJhbC9sZW5ndGggY29kZSIsc3QubW9kZT0zMDticmVha31zdC5leHRyYT0xNSZlbixzdC5tb2RlPTIyO2Nhc2UgMjI6aWYoc3QuZXh0cmEpe2ZvcihOaT1zdC5leHRyYTtCbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxCbixCbis9OH1zdC5sZW5ndGgrPXh0'@;
put 'JigxPDxzdC5leHRyYSktMSx4dD4+Pj1zdC5leHRyYSxCbi09c3QuZXh0cmEsc3QuYmFjays9c3QuZXh0cmF9c3Qud2FzPXN0Lmxlbmd0aCxzdC5tb2RlPTIzO2Nhc2UgMjM6Zm9yKDtlbj0oSWk9c3QuZGlzdGNvZGVbeHQmKDE8PHN0LmRpc3RiaXRzKS0xXSk+Pj4xNiYyNTUsaG89NjU1MzUm'@;
put 'SWksISgoWHQ9SWk+Pj4yNCk8PUJuKTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxCbixCbis9OH1pZighKDI0MCZlbikpe2ZvcihNaT1YdCx2cj1lbixXbj1obztlbj0oSWk9c3QuZGlzdGNvZGVbV24rKCh4dCYoMTw8TWkrdnIpLTEpPj5NaSldKT4+PjE2JjI1NSxo'@;
put 'bz02NTUzNSZJaSwhKE1pKyhYdD1JaT4+PjI0KTw9Qm4pOyl7aWYoMD09PW5yKWJyZWFrIGU7bnItLSx4dCs9VXRbV2UrK108PEJuLEJuKz04fXh0Pj4+PU1pLEJuLT1NaSxzdC5iYWNrKz1NaX1pZih4dD4+Pj1YdCxCbi09WHQsc3QuYmFjays9WHQsNjQmZW4pe0F0Lm1zZz0iaW52YWxpZCBk'@;
put 'aXN0YW5jZSBjb2RlIixzdC5tb2RlPTMwO2JyZWFrfXN0Lm9mZnNldD1obyxzdC5leHRyYT0xNSZlbixzdC5tb2RlPTI0O2Nhc2UgMjQ6aWYoc3QuZXh0cmEpe2ZvcihOaT1zdC5leHRyYTtCbjxOaTspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dlKytdPDxCbixCbis9OH1zdC5v'@;
put 'ZmZzZXQrPXh0JigxPDxzdC5leHRyYSktMSx4dD4+Pj1zdC5leHRyYSxCbi09c3QuZXh0cmEsc3QuYmFjays9c3QuZXh0cmF9aWYoc3Qub2Zmc2V0PnN0LmRtYXgpe0F0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLHN0Lm1vZGU9MzA7YnJlYWt9c3QubW9kZT0yNTtjYXNl'@;
put 'IDI1OmlmKDA9PT1odClicmVhayBlO2lmKHN0Lm9mZnNldD4oaGk9enQtaHQpKXtpZigoaGk9c3Qub2Zmc2V0LWhpKT5zdC53aGF2ZSYmc3Quc2FuZSl7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsc3QubW9kZT0zMDticmVha31jbj1oaT5zdC53bmV4dD9zdC53c2l6'@;
put 'ZS0oaGktPXN0LnduZXh0KTpzdC53bmV4dC1oaSxoaT5zdC5sZW5ndGgmJihoaT1zdC5sZW5ndGgpLGZuPXN0LndpbmRvd31lbHNlIGZuPXJpLGNuPVR0LXN0Lm9mZnNldCxoaT1zdC5sZW5ndGg7aGk+aHQmJihoaT1odCksaHQtPWhpLHN0Lmxlbmd0aC09aGk7ZG97cmlbVHQrK109Zm5bY24r'@;
put 'K119d2hpbGUoLS1oaSk7MD09PXN0Lmxlbmd0aCYmKHN0Lm1vZGU9MjEpO2JyZWFrO2Nhc2UgMjY6aWYoMD09PWh0KWJyZWFrIGU7cmlbVHQrK109c3QubGVuZ3RoLGh0LS0sc3QubW9kZT0yMTticmVhaztjYXNlIDI3OmlmKHN0LndyYXApe2Zvcig7Qm48MzI7KXtpZigwPT09bnIpYnJlYWsg'@;
put 'ZTtuci0tLHh0fD1VdFtXZSsrXTw8Qm4sQm4rPTh9aWYoQXQudG90YWxfb3V0Kz16dC09aHQsc3QudG90YWwrPXp0LHp0JiYoQXQuYWRsZXI9c3QuY2hlY2s9c3QuZmxhZ3M/TChzdC5jaGVjayxyaSx6dCxUdC16dCk6TihzdC5jaGVjayxyaSx6dCxUdC16dCkpLHp0PWh0LChzdC5mbGFncz94'@;
put 'dDokZSh4dCkpIT09c3QuY2hlY2spe0F0Lm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLHN0Lm1vZGU9MzA7YnJlYWt9eHQ9MCxCbj0wfXN0Lm1vZGU9Mjg7Y2FzZSAyODppZihzdC53cmFwJiZzdC5mbGFncyl7Zm9yKDtCbjwzMjspe2lmKDA9PT1ucilicmVhayBlO25yLS0seHQrPVV0W1dl'@;
put 'KytdPDxCbixCbis9OH1pZih4dCE9PSg0Mjk0OTY3Mjk1JnN0LnRvdGFsKSl7QXQubXNnPSJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIixzdC5tb2RlPTMwO2JyZWFrfXh0PTAsQm49MH1zdC5tb2RlPTI5O2Nhc2UgMjk6ZWk9MTticmVhayBlO2Nhc2UgMzA6ZWk9LTM7YnJlYWsgZTtjYXNlIDMx'@;
put 'OnJldHVybi00O2RlZmF1bHQ6cmV0dXJuIF9lfXJldHVybiBBdC5uZXh0X291dD1UdCxBdC5hdmFpbF9vdXQ9aHQsQXQubmV4dF9pbj1XZSxBdC5hdmFpbF9pbj1ucixzdC5ob2xkPXh0LHN0LmJpdHM9Qm4sKHN0LndzaXplfHx6dCE9PUF0LmF2YWlsX291dCYmc3QubW9kZTwzMCYmKHN0Lm1v'@;
put 'ZGU8Mjd8fDQhPT1SbikpJiZmdW5jdGlvbiBobihBdCxSbixzdCxVdCl7dmFyIHJpLFdlPUF0LnN0YXRlO3JldHVybiBudWxsPT09V2Uud2luZG93JiYoV2Uud3NpemU9MTw8V2Uud2JpdHMsV2Uud25leHQ9MCxXZS53aGF2ZT0wLFdlLndpbmRvdz1uZXcgei5CdWY4KFdlLndzaXplKSksVXQ+'@;
put 'PVdlLndzaXplPyh6LmFycmF5U2V0KFdlLndpbmRvdyxSbixzdC1XZS53c2l6ZSxXZS53c2l6ZSwwKSxXZS53bmV4dD0wLFdlLndoYXZlPVdlLndzaXplKTooKHJpPVdlLndzaXplLVdlLnduZXh0KT5VdCYmKHJpPVV0KSx6LmFycmF5U2V0KFdlLndpbmRvdyxSbixzdC1VdCxyaSxXZS53bmV4'@;
put 'dCksKFV0LT1yaSk/KHouYXJyYXlTZXQoV2Uud2luZG93LFJuLHN0LVV0LFV0LDApLFdlLnduZXh0PVV0LFdlLndoYXZlPVdlLndzaXplKTooV2Uud25leHQrPXJpLFdlLnduZXh0PT09V2Uud3NpemUmJihXZS53bmV4dD0wKSxXZS53aGF2ZTxXZS53c2l6ZSYmKFdlLndoYXZlKz1yaSkpKSww'@;
put 'fShBdCxBdC5vdXRwdXQsQXQubmV4dF9vdXQsenQtQXQuYXZhaWxfb3V0KT8oc3QubW9kZT0zMSwtNCk6KHp0LT1BdC5hdmFpbF9vdXQsQXQudG90YWxfaW4rPXJuLT1BdC5hdmFpbF9pbixBdC50b3RhbF9vdXQrPXp0LHN0LnRvdGFsKz16dCxzdC53cmFwJiZ6dCYmKEF0LmFkbGVyPXN0LmNo'@;
put 'ZWNrPXN0LmZsYWdzP0woc3QuY2hlY2sscmksenQsQXQubmV4dF9vdXQtenQpOk4oc3QuY2hlY2sscmksenQsQXQubmV4dF9vdXQtenQpKSxBdC5kYXRhX3R5cGU9c3QuYml0cysoc3QubGFzdD82NDowKSsoMTI9PT1zdC5tb2RlPzEyODowKSsoMjA9PT1zdC5tb2RlfHwxNT09PXN0Lm1vZGU/'@;
put 'MjU2OjApLCgwPT09cm4mJjA9PT16dHx8ND09PVJuKSYmZWk9PT1pZSYmKGVpPS01KSxlaSl9LE8uaW5mbGF0ZUVuZD1mdW5jdGlvbiBPcihBdCl7aWYoIUF0fHwhQXQuc3RhdGUpcmV0dXJuIF9lO3ZhciBSbj1BdC5zdGF0ZTtyZXR1cm4gUm4ud2luZG93JiYoUm4ud2luZG93PW51bGwpLEF0'@;
put 'LnN0YXRlPW51bGwsaWV9LE8uaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbiBXdChBdCxSbil7dmFyIHN0O3JldHVybiBBdCYmQXQuc3RhdGUmJjImKHN0PUF0LnN0YXRlKS53cmFwPyhzdC5oZWFkPVJuLFJuLmRvbmU9ITEsaWUpOl9lfSxPLmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZy'@;
put 'b20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9pbmZmYXN0IjozNCwiLi9pbmZ0cmVlcyI6MzZ9XSwzNjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKSxY'@;
put 'PVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0sZWU9WzE2LDE2LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIw'@;
put 'LDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSxKPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxyZT1bMTYsMTYsMTYsMTYsMTcs'@;
put 'MTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO0YuZXhwb3J0cz1mdW5jdGlvbihsZSxtZSxfZSxUZSxTZSx6ZSxWLHApe3ZhciBzZSx3ZSxVZSxKZSxhdCxYZSxJZSxWZSxrZSxiPXAuYml0cyx4'@;
put 'PTAsQz0wLFQ9MCxIPTAsaj0wLEU9MCxtPTAsQT0wLG9lPTAsdGU9MCxNZT1udWxsLHZlPTAsamU9bmV3IHouQnVmMTYoMTYpLERlPW5ldyB6LkJ1ZjE2KDE2KSxGZT1udWxsLFJlPTA7Zm9yKHg9MDt4PD0xNTt4KyspamVbeF09MDtmb3IoQz0wO0M8VGU7QysrKWplW21lW19lK0NdXSsrO2Zv'@;
put 'cihqPWIsSD0xNTtIPj0xJiYwPT09amVbSF07SC0tKTtpZihqPkgmJihqPUgpLDA9PT1IKXJldHVybiBTZVt6ZSsrXT0yMDk3MTUyMCxTZVt6ZSsrXT0yMDk3MTUyMCxwLmJpdHM9MSwwO2ZvcihUPTE7VDxIJiYwPT09amVbVF07VCsrKTtmb3IoajxUJiYoaj1UKSxBPTEseD0xO3g8PTE1O3gr'@;
put 'KylpZihBPDw9MSwoQS09amVbeF0pPDApcmV0dXJuLTE7aWYoQT4wJiYoMD09PWxlfHwxIT09SCkpcmV0dXJuLTE7Zm9yKERlWzFdPTAseD0xO3g8MTU7eCsrKURlW3grMV09RGVbeF0ramVbeF07Zm9yKEM9MDtDPFRlO0MrKykwIT09bWVbX2UrQ10mJihWW0RlW21lW19lK0NdXSsrXT1DKTtp'@;
put 'ZigwPT09bGU/KE1lPUZlPVYsWGU9MTkpOjE9PT1sZT8oTWU9WCx2ZS09MjU3LEZlPWVlLFJlLT0yNTcsWGU9MjU2KTooTWU9SixGZT1yZSxYZT0tMSksdGU9MCxDPTAseD1ULGF0PXplLEU9aixtPTAsVWU9LTEsSmU9KG9lPTE8PGopLTEsMT09PWxlJiZvZT44NTJ8fDI9PT1sZSYmb2U+NTky'@;
put 'KXJldHVybiAxO2Zvcig7Oyl7SWU9eC1tLFZbQ108WGU/KFZlPTAsa2U9VltDXSk6VltDXT5YZT8oVmU9RmVbUmUrVltDXV0sa2U9TWVbdmUrVltDXV0pOihWZT05NixrZT0wKSxzZT0xPDx4LW0sVD13ZT0xPDxFO2Rve1NlW2F0Kyh0ZT4+bSkrKHdlLT1zZSldPUllPDwyNHxWZTw8MTZ8a2V9'@;
put 'd2hpbGUoMCE9PXdlKTtmb3Ioc2U9MTw8eC0xO3RlJnNlOylzZT4+PTE7aWYoMCE9PXNlPyh0ZSY9c2UtMSx0ZSs9c2UpOnRlPTAsQysrLDA9PS0tamVbeF0pe2lmKHg9PT1IKWJyZWFrO3g9bWVbX2UrVltDXV19aWYoeD5qJiYodGUmSmUpIT09VWUpe2ZvcigwPT09bSYmKG09aiksYXQrPVQs'@;
put 'QT0xPDwoRT14LW0pO0UrbTxIJiYhKChBLT1qZVtFK21dKTw9MCk7KUUrKyxBPDw9MTtpZihvZSs9MTw8RSwxPT09bGUmJm9lPjg1Mnx8Mj09PWxlJiZvZT41OTIpcmV0dXJuIDE7U2VbVWU9dGUmSmVdPWo8PDI0fEU8PDE2fGF0LXplfX1yZXR1cm4gMCE9PXRlJiYoU2VbYXQrdGVdPXgtbTw8'@;
put 'MjR8NjQ8PDE2KSxwLmJpdHM9aiwwfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzc6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ri5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVy'@;
put 'cm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJpbnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKTtm'@;
put 'dW5jdGlvbiBXKGZ0KXtmb3IodmFyIE9yPWZ0Lmxlbmd0aDstLU9yPj0wOylmdFtPcl09MH12YXIgemU9MTUsVj0xNixIPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLGo9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYs'@;
put 'Nyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLEU9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLG09WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLG9lPW5ldyBBcnJheSg1NzYpO1cob2UpO3ZhciB0ZT1uZXcg'@;
put 'QXJyYXkoNjApO1codGUpO3ZhciBzZT1uZXcgQXJyYXkoNTEyKTtXKHNlKTt2YXIgd2U9bmV3IEFycmF5KDI1Nik7Vyh3ZSk7dmFyIFVlPW5ldyBBcnJheSgyOSk7VyhVZSk7dmFyIEplPW5ldyBBcnJheSgzMCk7VyhKZSk7dmFyIE1lLHZlLFhlLGF0PWZ1bmN0aW9uKGZ0LE9yLFd0LEF0LFJu'@;
put 'KXt0aGlzLnN0YXRpY190cmVlPWZ0LHRoaXMuZXh0cmFfYml0cz1Pcix0aGlzLmV4dHJhX2Jhc2U9V3QsdGhpcy5lbGVtcz1BdCx0aGlzLm1heF9sZW5ndGg9Um4sdGhpcy5oYXNfc3RyZWU9ZnQmJmZ0Lmxlbmd0aH0samU9ZnVuY3Rpb24oZnQsT3Ipe3RoaXMuZHluX3RyZWU9ZnQsdGhpcy5t'@;
put 'YXhfY29kZT0wLHRoaXMuc3RhdF9kZXNjPU9yfTtmdW5jdGlvbiBEZShmdCl7cmV0dXJuIGZ0PDI1Nj9zZVtmdF06c2VbMjU2KyhmdD4+PjcpXX1mdW5jdGlvbiBGZShmdCxPcil7ZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT0yNTUmT3IsZnQucGVuZGluZ19idWZbZnQucGVuZGluZysr'@;
put 'XT1Pcj4+PjgmMjU1fWZ1bmN0aW9uIFJlKGZ0LE9yLFd0KXtmdC5iaV92YWxpZD5WLVd0PyhmdC5iaV9idWZ8PU9yPDxmdC5iaV92YWxpZCY2NTUzNSxGZShmdCxmdC5iaV9idWYpLGZ0LmJpX2J1Zj1Pcj4+Vi1mdC5iaV92YWxpZCxmdC5iaV92YWxpZCs9V3QtVik6KGZ0LmJpX2J1Znw9T3I8'@;
put 'PGZ0LmJpX3ZhbGlkJjY1NTM1LGZ0LmJpX3ZhbGlkKz1XdCl9ZnVuY3Rpb24gSWUoZnQsT3IsV3Qpe1JlKGZ0LFd0WzIqT3JdLFd0WzIqT3IrMV0pfWZ1bmN0aW9uIFZlKGZ0LE9yKXt2YXIgV3Q9MDtkb3tXdHw9MSZmdCxmdD4+Pj0xLFd0PDw9MX13aGlsZSgtLU9yPjApO3JldHVybiBXdD4+'@;
put 'PjF9ZnVuY3Rpb24gX3QoZnQsT3IsV3Qpe3ZhciBzdCxVdCxBdD1uZXcgQXJyYXkoemUrMSksUm49MDtmb3Ioc3Q9MTtzdDw9emU7c3QrKylBdFtzdF09Um49Um4rV3Rbc3QtMV08PDE7Zm9yKFV0PTA7VXQ8PU9yO1V0Kyspe3ZhciByaT1mdFsyKlV0KzFdOzAhPT1yaSYmKGZ0WzIqVXRdPVZl'@;
put 'KEF0W3JpXSsrLHJpKSl9fWZ1bmN0aW9uIFFlKGZ0KXt2YXIgT3I7Zm9yKE9yPTA7T3I8Mjg2O09yKyspZnQuZHluX2x0cmVlWzIqT3JdPTA7Zm9yKE9yPTA7T3I8MzA7T3IrKylmdC5keW5fZHRyZWVbMipPcl09MDtmb3IoT3I9MDtPcjwxOTtPcisrKWZ0LmJsX3RyZWVbMipPcl09MDtmdC5k'@;
put 'eW5fbHRyZWVbNTEyXT0xLGZ0Lm9wdF9sZW49ZnQuc3RhdGljX2xlbj0wLGZ0Lmxhc3RfbGl0PWZ0Lm1hdGNoZXM9MH1mdW5jdGlvbiB1bihmdCl7ZnQuYmlfdmFsaWQ+OD9GZShmdCxmdC5iaV9idWYpOmZ0LmJpX3ZhbGlkPjAmJihmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPWZ0LmJp'@;
put 'X2J1ZiksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MH1mdW5jdGlvbiBNdChmdCxPcixXdCxBdCl7dmFyIFJuPTIqT3Isc3Q9MipXdDtyZXR1cm4gZnRbUm5dPGZ0W3N0XXx8ZnRbUm5dPT09ZnRbc3RdJiZBdFtPcl08PUF0W1d0XX1mdW5jdGlvbiBEdChmdCxPcixXdCl7Zm9yKHZhciBBdD1m'@;
put 'dC5oZWFwW1d0XSxSbj1XdDw8MTtSbjw9ZnQuaGVhcF9sZW4mJihSbjxmdC5oZWFwX2xlbiYmTXQoT3IsZnQuaGVhcFtSbisxXSxmdC5oZWFwW1JuXSxmdC5kZXB0aCkmJlJuKyssIU10KE9yLEF0LGZ0LmhlYXBbUm5dLGZ0LmRlcHRoKSk7KWZ0LmhlYXBbV3RdPWZ0LmhlYXBbUm5dLFd0PVJu'@;
put 'LFJuPDw9MTtmdC5oZWFwW1d0XT1BdH1mdW5jdGlvbiBpdChmdCxPcixXdCl7dmFyIEF0LFJuLFV0LHJpLHN0PTA7aWYoMCE9PWZ0Lmxhc3RfbGl0KWRve0F0PWZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqc3RdPDw4fGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqc3QrMV0sUm49ZnQucGVu'@;
put 'ZGluZ19idWZbZnQubF9idWYrc3RdLHN0KyssMD09PUF0P0llKGZ0LFJuLE9yKTooSWUoZnQsKFV0PXdlW1JuXSkrMjU2KzEsT3IpLDAhPT0ocmk9SFtVdF0pJiZSZShmdCxSbi09VWVbVXRdLHJpKSxJZShmdCxVdD1EZSgtLUF0KSxXdCksMCE9PShyaT1qW1V0XSkmJlJlKGZ0LEF0LT1KZVtV'@;
put 'dF0scmkpKX13aGlsZShzdDxmdC5sYXN0X2xpdCk7SWUoZnQsMjU2LE9yKX1mdW5jdGlvbiAkZShmdCxPcil7dmFyIFV0LHJpLFR0LFd0PU9yLmR5bl90cmVlLEF0PU9yLnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxSbj1Pci5zdGF0X2Rlc2MuaGFzX3N0cmVlLHN0PU9yLnN0YXRfZGVzYy5lbGVt'@;
put 'cyxXZT0tMTtmb3IoZnQuaGVhcF9sZW49MCxmdC5oZWFwX21heD01NzMsVXQ9MDtVdDxzdDtVdCsrKTAhPT1XdFsyKlV0XT8oZnQuaGVhcFsrK2Z0LmhlYXBfbGVuXT1XZT1VdCxmdC5kZXB0aFtVdF09MCk6V3RbMipVdCsxXT0wO2Zvcig7ZnQuaGVhcF9sZW48MjspV3RbMiooVHQ9ZnQuaGVh'@;
put 'cFsrK2Z0LmhlYXBfbGVuXT1XZTwyPysrV2U6MCldPTEsZnQuZGVwdGhbVHRdPTAsZnQub3B0X2xlbi0tLFJuJiYoZnQuc3RhdGljX2xlbi09QXRbMipUdCsxXSk7Zm9yKE9yLm1heF9jb2RlPVdlLFV0PWZ0LmhlYXBfbGVuPj4xO1V0Pj0xO1V0LS0pRHQoZnQsV3QsVXQpO1R0PXN0O2Rve1V0'@;
put 'PWZ0LmhlYXBbMV0sZnQuaGVhcFsxXT1mdC5oZWFwW2Z0LmhlYXBfbGVuLS1dLER0KGZ0LFd0LDEpLHJpPWZ0LmhlYXBbMV0sZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1VdCxmdC5oZWFwWy0tZnQuaGVhcF9tYXhdPXJpLFd0WzIqVHRdPVd0WzIqVXRdK1d0WzIqcmldLGZ0LmRlcHRoW1R0XT0o'@;
put 'ZnQuZGVwdGhbVXRdPj1mdC5kZXB0aFtyaV0/ZnQuZGVwdGhbVXRdOmZ0LmRlcHRoW3JpXSkrMSxXdFsyKlV0KzFdPVd0WzIqcmkrMV09VHQsZnQuaGVhcFsxXT1UdCsrLER0KGZ0LFd0LDEpfXdoaWxlKGZ0LmhlYXBfbGVuPj0yKTtmdC5oZWFwWy0tZnQuaGVhcF9tYXhdPWZ0LmhlYXBbMV0s'@;
put 'ZnVuY3Rpb24gQWUoZnQsT3Ipe3ZhciBUdCxucixodCx4dCxCbixybixXdD1Pci5keW5fdHJlZSxBdD1Pci5tYXhfY29kZSxSbj1Pci5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsc3Q9T3Iuc3RhdF9kZXNjLmhhc19zdHJlZSxVdD1Pci5zdGF0X2Rlc2MuZXh0cmFfYml0cyxyaT1Pci5zdGF0X2Rl'@;
put 'c2MuZXh0cmFfYmFzZSxXZT1Pci5zdGF0X2Rlc2MubWF4X2xlbmd0aCx6dD0wO2Zvcih4dD0wO3h0PD16ZTt4dCsrKWZ0LmJsX2NvdW50W3h0XT0wO2ZvcihXdFsyKmZ0LmhlYXBbZnQuaGVhcF9tYXhdKzFdPTAsVHQ9ZnQuaGVhcF9tYXgrMTtUdDw1NzM7VHQrKykoeHQ9V3RbMipXdFsyKihu'@;
put 'cj1mdC5oZWFwW1R0XSkrMV0rMV0rMSk+V2UmJih4dD1XZSx6dCsrKSxXdFsyKm5yKzFdPXh0LCEobnI+QXQpJiYoZnQuYmxfY291bnRbeHRdKyssQm49MCxucj49cmkmJihCbj1VdFtuci1yaV0pLGZ0Lm9wdF9sZW4rPShybj1XdFsyKm5yXSkqKHh0K0JuKSxzdCYmKGZ0LnN0YXRpY19sZW4r'@;
put 'PXJuKihSblsyKm5yKzFdK0JuKSkpO2lmKDAhPT16dCl7ZG97Zm9yKHh0PVdlLTE7MD09PWZ0LmJsX2NvdW50W3h0XTspeHQtLTtmdC5ibF9jb3VudFt4dF0tLSxmdC5ibF9jb3VudFt4dCsxXSs9MixmdC5ibF9jb3VudFtXZV0tLSx6dC09Mn13aGlsZSh6dD4wKTtmb3IoeHQ9V2U7MCE9PXh0'@;
put 'O3h0LS0pZm9yKG5yPWZ0LmJsX2NvdW50W3h0XTswIT09bnI7KSEoKGh0PWZ0LmhlYXBbLS1UdF0pPkF0KSYmKFd0WzIqaHQrMV0hPT14dCYmKGZ0Lm9wdF9sZW4rPSh4dC1XdFsyKmh0KzFdKSpXdFsyKmh0XSxXdFsyKmh0KzFdPXh0KSxuci0tKX19KGZ0LE9yKSxfdChXdCxXZSxmdC5ibF9j'@;
put 'b3VudCl9ZnVuY3Rpb24gdHQoZnQsT3IsV3Qpe3ZhciBBdCxzdCxSbj0tMSxVdD1PclsxXSxyaT0wLFdlPTcsVHQ9NDtmb3IoMD09PVV0JiYoV2U9MTM4LFR0PTMpLE9yWzIqKFd0KzEpKzFdPTY1NTM1LEF0PTA7QXQ8PVd0O0F0Kyspc3Q9VXQsVXQ9T3JbMiooQXQrMSkrMV0sISgrK3JpPFdl'@;
put 'JiZzdD09PVV0KSYmKHJpPFR0P2Z0LmJsX3RyZWVbMipzdF0rPXJpOjAhPT1zdD8oc3QhPT1SbiYmZnQuYmxfdHJlZVsyKnN0XSsrLGZ0LmJsX3RyZWVbMzJdKyspOnJpPD0xMD9mdC5ibF90cmVlWzM0XSsrOmZ0LmJsX3RyZWVbMzZdKysscmk9MCxSbj1zdCwwPT09VXQ/KFdlPTEzOCxUdD0z'@;
put 'KTpzdD09PVV0PyhXZT02LFR0PTMpOihXZT03LFR0PTQpKX1mdW5jdGlvbiBIZShmdCxPcixXdCl7dmFyIEF0LHN0LFJuPS0xLFV0PU9yWzFdLHJpPTAsV2U9NyxUdD00O2ZvcigwPT09VXQmJihXZT0xMzgsVHQ9MyksQXQ9MDtBdDw9V3Q7QXQrKylpZihzdD1VdCxVdD1PclsyKihBdCsxKSsx'@;
put 'XSwhKCsrcmk8V2UmJnN0PT09VXQpKXtpZihyaTxUdClkb3tJZShmdCxzdCxmdC5ibF90cmVlKX13aGlsZSgwIT0tLXJpKTtlbHNlIDAhPT1zdD8oc3QhPT1SbiYmKEllKGZ0LHN0LGZ0LmJsX3RyZWUpLHJpLS0pLEllKGZ0LDE2LGZ0LmJsX3RyZWUpLFJlKGZ0LHJpLTMsMikpOnJpPD0xMD8o'@;
put 'SWUoZnQsMTcsZnQuYmxfdHJlZSksUmUoZnQscmktMywzKSk6KEllKGZ0LDE4LGZ0LmJsX3RyZWUpLFJlKGZ0LHJpLTExLDcpKTtyaT0wLFJuPXN0LDA9PT1VdD8oV2U9MTM4LFR0PTMpOnN0PT09VXQ/KFdlPTYsVHQ9Myk6KFdlPTcsVHQ9NCl9fXZhciBQdD0hMTtmdW5jdGlvbiBRdChmdCxP'@;
put 'cixXdCxBdCl7UmUoZnQsMCsoQXQ/MTowKSwzKSxmdW5jdGlvbiB5dChmdCxPcixXdCxBdCl7dW4oZnQpLEF0JiYoRmUoZnQsV3QpLEZlKGZ0LH5XdCkpLHouYXJyYXlTZXQoZnQucGVuZGluZ19idWYsZnQud2luZG93LE9yLFd0LGZ0LnBlbmRpbmcpLGZ0LnBlbmRpbmcrPVd0fShmdCxPcixX'@;
put 'dCwhMCl9Ty5fdHJfaW5pdD1mdW5jdGlvbiBzaShmdCl7UHR8fChmdW5jdGlvbiBudCgpe3ZhciBmdCxPcixXdCxBdCxSbixzdD1uZXcgQXJyYXkoemUrMSk7Zm9yKFd0PTAsQXQ9MDtBdDwyODtBdCsrKWZvcihVZVtBdF09V3QsZnQ9MDtmdDwxPDxIW0F0XTtmdCsrKXdlW1d0KytdPUF0O2Zv'@;
put 'cih3ZVtXdC0xXT1BdCxSbj0wLEF0PTA7QXQ8MTY7QXQrKylmb3IoSmVbQXRdPVJuLGZ0PTA7ZnQ8MTw8altBdF07ZnQrKylzZVtSbisrXT1BdDtmb3IoUm4+Pj03O0F0PDMwO0F0KyspZm9yKEplW0F0XT1Sbjw8NyxmdD0wO2Z0PDE8PGpbQXRdLTc7ZnQrKylzZVsyNTYrUm4rK109QXQ7Zm9y'@;
put 'KE9yPTA7T3I8PXplO09yKyspc3RbT3JdPTA7Zm9yKGZ0PTA7ZnQ8PTE0Mzspb2VbMipmdCsxXT04LGZ0Kyssc3RbOF0rKztmb3IoO2Z0PD0yNTU7KW9lWzIqZnQrMV09OSxmdCsrLHN0WzldKys7Zm9yKDtmdDw9Mjc5OylvZVsyKmZ0KzFdPTcsZnQrKyxzdFs3XSsrO2Zvcig7ZnQ8PTI4Nzsp'@;
put 'b2VbMipmdCsxXT04LGZ0Kyssc3RbOF0rKztmb3IoX3Qob2UsMjg3LHN0KSxmdD0wO2Z0PDMwO2Z0KyspdGVbMipmdCsxXT01LHRlWzIqZnRdPVZlKGZ0LDUpO01lPW5ldyBhdChvZSxILDI1NywyODYsemUpLHZlPW5ldyBhdCh0ZSxqLDAsMzAsemUpLFhlPW5ldyBhdChuZXcgQXJyYXkoMCks'@;
put 'RSwwLDE5LDcpfSgpLFB0PSEwKSxmdC5sX2Rlc2M9bmV3IGplKGZ0LmR5bl9sdHJlZSxNZSksZnQuZF9kZXNjPW5ldyBqZShmdC5keW5fZHRyZWUsdmUpLGZ0LmJsX2Rlc2M9bmV3IGplKGZ0LmJsX3RyZWUsWGUpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTAsUWUoZnQpfSxPLl90cl9zdG9y'@;
put 'ZWRfYmxvY2s9UXQsTy5fdHJfZmx1c2hfYmxvY2s9ZnVuY3Rpb24gUmkoZnQsT3IsV3QsQXQpe3ZhciBSbixzdCxVdD0wO2Z0LmxldmVsPjA/KDI9PT1mdC5zdHJtLmRhdGFfdHlwZSYmKGZ0LnN0cm0uZGF0YV90eXBlPWZ1bmN0aW9uIFJ0KGZ0KXt2YXIgV3QsT3I9NDA5MzYyNDQ0Nztmb3Io'@;
put 'V3Q9MDtXdDw9MzE7V3QrKyxPcj4+Pj0xKWlmKDEmT3ImJjAhPT1mdC5keW5fbHRyZWVbMipXdF0pcmV0dXJuIDA7aWYoMCE9PWZ0LmR5bl9sdHJlZVsxOF18fDAhPT1mdC5keW5fbHRyZWVbMjBdfHwwIT09ZnQuZHluX2x0cmVlWzI2XSlyZXR1cm4gMTtmb3IoV3Q9MzI7V3Q8MjU2O1d0Kysp'@;
put 'aWYoMCE9PWZ0LmR5bl9sdHJlZVsyKld0XSlyZXR1cm4gMTtyZXR1cm4gMH0oZnQpKSwkZShmdCxmdC5sX2Rlc2MpLCRlKGZ0LGZ0LmRfZGVzYyksVXQ9ZnVuY3Rpb24gdXQoZnQpe3ZhciBPcjtmb3IodHQoZnQsZnQuZHluX2x0cmVlLGZ0LmxfZGVzYy5tYXhfY29kZSksdHQoZnQsZnQuZHlu'@;
put 'X2R0cmVlLGZ0LmRfZGVzYy5tYXhfY29kZSksJGUoZnQsZnQuYmxfZGVzYyksT3I9MTg7T3I+PTMmJjA9PT1mdC5ibF90cmVlWzIqbVtPcl0rMV07T3ItLSk7cmV0dXJuIGZ0Lm9wdF9sZW4rPTMqKE9yKzEpKzUrNSs0LE9yfShmdCksKHN0PWZ0LnN0YXRpY19sZW4rMys3Pj4+Myk8PShSbj1m'@;
put 'dC5vcHRfbGVuKzMrNz4+PjMpJiYoUm49c3QpKTpSbj1zdD1XdCs1LFd0KzQ8PVJuJiYtMSE9PU9yP1F0KGZ0LE9yLFd0LEF0KTo0PT09ZnQuc3RyYXRlZ3l8fHN0PT09Um4/KFJlKGZ0LDIrKEF0PzE6MCksMyksaXQoZnQsb2UsdGUpKTooUmUoZnQsNCsoQXQ/MTowKSwzKSxmdW5jdGlvbiBx'@;
put 'dChmdCxPcixXdCxBdCl7dmFyIFJuO2ZvcihSZShmdCxPci0yNTcsNSksUmUoZnQsV3QtMSw1KSxSZShmdCxBdC00LDQpLFJuPTA7Um48QXQ7Um4rKylSZShmdCxmdC5ibF90cmVlWzIqbVtSbl0rMV0sMyk7SGUoZnQsZnQuZHluX2x0cmVlLE9yLTEpLEhlKGZ0LGZ0LmR5bl9kdHJlZSxXdC0x'@;
put 'KX0oZnQsZnQubF9kZXNjLm1heF9jb2RlKzEsZnQuZF9kZXNjLm1heF9jb2RlKzEsVXQrMSksaXQoZnQsZnQuZHluX2x0cmVlLGZ0LmR5bl9kdHJlZSkpLFFlKGZ0KSxBdCYmdW4oZnQpfSxPLl90cl90YWxseT1mdW5jdGlvbiBobihmdCxPcixXdCl7cmV0dXJuIGZ0LnBlbmRpbmdfYnVmW2Z0'@;
put 'LmRfYnVmKzIqZnQubGFzdF9saXRdPU9yPj4+OCYyNTUsZnQucGVuZGluZ19idWZbZnQuZF9idWYrMipmdC5sYXN0X2xpdCsxXT0yNTUmT3IsZnQucGVuZGluZ19idWZbZnQubF9idWYrZnQubGFzdF9saXRdPTI1NSZXdCxmdC5sYXN0X2xpdCsrLDA9PT1Pcj9mdC5keW5fbHRyZWVbMipXdF0r'@;
put 'KzooZnQubWF0Y2hlcysrLE9yLS0sZnQuZHluX2x0cmVlWzIqKHdlW1d0XSsyNTYrMSldKyssZnQuZHluX2R0cmVlWzIqRGUoT3IpXSsrKSxmdC5sYXN0X2xpdD09PWZ0LmxpdF9idWZzaXplLTF9LE8uX3RyX2FsaWduPWZ1bmN0aW9uIHNuKGZ0KXtSZShmdCwyLDMpLEllKGZ0LDI1NixvZSks'@;
put 'ZnVuY3Rpb24ga2UoZnQpezE2PT09ZnQuYmlfdmFsaWQ/KEZlKGZ0LGZ0LmJpX2J1ZiksZnQuYmlfYnVmPTAsZnQuYmlfdmFsaWQ9MCk6ZnQuYmlfdmFsaWQ+PTgmJihmdC5wZW5kaW5nX2J1ZltmdC5wZW5kaW5nKytdPTI1NSZmdC5iaV9idWYsZnQuYmlfYnVmPj49OCxmdC5iaV92YWxpZC09'@;
put 'OCl9KGZ0KX19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM5OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz1mdW5jdGlvbiB6KCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9'@;
put 'bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XX0se30sWzldKSg5KX0pfSw2MzU3ODoodWUscSxfKT0+eyFmdW5jdGlvbiB5KHcp'@;
put 'e3cudmVyc2lvbj0iMS4yMDIxMTEyMi4xIjt2YXIgUD0xMjAwLEY9MTI1Mjt0eXBlb2YgY3B0YWJsZT4idSImJih0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWwuY3B0YWJsZT1fKDQyOTI0KTp0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5jcHRhYmxlPV8oNDI5MjQpKSk7Zm9yKHZhciBPPVs4'@;
put 'NzQsOTMyLDkzNiw5NDksOTUwLDFlNF0sej0wO3o8PTg7Kyt6KU8ucHVzaCgxMjUwK3opO3ZhciBOPXswOjEyNTIsMTo2NTAwMSwyOjY1MDAxLDc3OjFlNCwxMjg6OTMyLDEyOTo5NDksMTMwOjEzNjEsMTM0OjkzNiwxMzY6OTUwLDE2MToxMjUzLDE2MjoxMjU0LDE2MzoxMjU4LDE3NzoxMjU1'@;
put 'LDE3ODoxMjU2LDE4NjoxMjU3LDIwNDoxMjUxLDIyMjo4NzQsMjM4OjEyNTAsMjU1OjEyNTIsNjk6Njk2OX0sTD1mdW5jdGlvbihTKXstMSE9Ty5pbmRleE9mKFMpJiYoRj1OWzBdPVMpfSxVPWZ1bmN0aW9uKFMpe1A9UyxMKFMpfTtmdW5jdGlvbiBXKCl7VSgxMjAwKSxmdW5jdGlvbiBLKCl7'@;
put 'TCgxMjUyKX0oKX1mdW5jdGlvbiBZKFMpe2Zvcih2YXIgUj1bXSxrPTAsRz1TLmxlbmd0aDtrPEc7KytrKVJba109Uy5jaGFyQ29kZUF0KGspO3JldHVybiBSfXZhciBKPWZ1bmN0aW9uKFMpe3ZhciBSPVMuY2hhckNvZGVBdCgwKSxrPVMuY2hhckNvZGVBdCgxKTtyZXR1cm4gMjU1PT1SJiYy'@;
put 'NTQ9PWs/ZnVuY3Rpb24gWChTKXtmb3IodmFyIFI9W10saz0wO2s8Uy5sZW5ndGg+PjE7KytrKVJba109U3RyaW5nLmZyb21DaGFyQ29kZShTLmNoYXJDb2RlQXQoMiprKSsoUy5jaGFyQ29kZUF0KDIqaysxKTw8OCkpO3JldHVybiBSLmpvaW4oIiIpfShTLnNsaWNlKDIpKToyNTQ9PVImJjI1'@;
put 'NT09az9mdW5jdGlvbiBlZShTKXtmb3IodmFyIFI9W10saz0wO2s8Uy5sZW5ndGg+PjE7KytrKVJba109U3RyaW5nLmZyb21DaGFyQ29kZShTLmNoYXJDb2RlQXQoMiprKzEpKyhTLmNoYXJDb2RlQXQoMiprKTw8OCkpO3JldHVybiBSLmpvaW4oIiIpfShTLnNsaWNlKDIpKTo2NTI3OT09Uj9T'@;
put 'LnNsaWNlKDEpOlN9LHJlPWZ1bmN0aW9uKFIpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKFIpfSxpZT1mdW5jdGlvbihSKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShSKX07dHlwZW9mIGNwdGFibGU8InUiJiYoVT1mdW5jdGlvbihTKXtQPVMsTChTKX0sSj1mdW5jdGlvbihTKXty'@;
put 'ZXR1cm4gMjU1PT09Uy5jaGFyQ29kZUF0KDApJiYyNTQ9PT1TLmNoYXJDb2RlQXQoMSk/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxZKFMuc2xpY2UoMikpKTpTfSxyZT1mdW5jdGlvbihSKXtyZXR1cm4gMTIwMD09PVA/U3RyaW5nLmZyb21DaGFyQ29kZShSKTpjcHRhYmxlLnV0aWxzLmRl'@;
put 'Y29kZShQLFsyNTUmUixSPj44XSlbMF19LGllPWZ1bmN0aW9uKFIpe3JldHVybiBjcHRhYmxlLnV0aWxzLmRlY29kZShGLFtSXSlbMF19KTt2YXIgbGU9bnVsbCxfZT1mdW5jdGlvbigpe3ZhciBSPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6'@;
put 'MDEyMzQ1Njc4OSsvPSI7cmV0dXJue2VuY29kZTpmdW5jdGlvbihrKXtmb3IodmFyIEc9IiIsUT0wLGFlPTAsZ2U9MCxwZT0wLHllPTAsUGU9MCxOZT0wLFllPTA7WWU8ay5sZW5ndGg7KXBlPShRPWsuY2hhckNvZGVBdChZZSsrKSk+PjIseWU9KDMmUSk8PDR8KGFlPWsuY2hhckNvZGVBdChZ'@;
put 'ZSsrKSk+PjQsUGU9KDE1JmFlKTw8MnwoZ2U9ay5jaGFyQ29kZUF0KFllKyspKT4+NixOZT02MyZnZSxpc05hTihhZSk/UGU9TmU9NjQ6aXNOYU4oZ2UpJiYoTmU9NjQpLEcrPVIuY2hhckF0KHBlKStSLmNoYXJBdCh5ZSkrUi5jaGFyQXQoUGUpK1IuY2hhckF0KE5lKTtyZXR1cm4gR30sZGVj'@;
put 'b2RlOmZ1bmN0aW9uKEcpe3ZhciBRPSIiLHllPTAsUGU9MCxOZT0wLFllPTA7Rz1HLnJlcGxhY2UoL1teXHdcK1wvXD1dL2csIiIpO2Zvcih2YXIgZXQ9MDtldDxHLmxlbmd0aDspeWU9Ui5pbmRleE9mKEcuY2hhckF0KGV0KyspKSxQZT1SLmluZGV4T2YoRy5jaGFyQXQoZXQrKykpLFErPVN0'@;
put 'cmluZy5mcm9tQ2hhckNvZGUoeWU8PDJ8UGU+PjQpLDY0IT09KE5lPVIuaW5kZXhPZihHLmNoYXJBdChldCsrKSkpJiYoUSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmUGUpPDw0fE5lPj4yKSksNjQhPT0oWWU9Ui5pbmRleE9mKEcuY2hhckF0KGV0KyspKSkmJihRKz1TdHJpbmcuZnJvbUNo'@;
put 'YXJDb2RlKCgzJk5lKTw8NnxZZSkpO3JldHVybiBRfX19KCksVGU9dHlwZW9mIEJ1ZmZlcjwidSImJnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYhIXByb2Nlc3MudmVyc2lvbnMubm9kZSxTZT1mdW5jdGlvbigpe307aWYodHlwZW9mIEJ1ZmZlcjwi'@;
put 'dSIpe3ZhciB6ZT0hQnVmZmVyLmZyb207aWYoIXplKXRyeXtCdWZmZXIuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe3plPSEwfVNlPXplP2Z1bmN0aW9uKFMsUil7cmV0dXJuIFI/bmV3IEJ1ZmZlcihTLFIpOm5ldyBCdWZmZXIoUyl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIu'@;
put 'YWxsb2N8fChCdWZmZXIuYWxsb2M9ZnVuY3Rpb24oUyl7cmV0dXJuIG5ldyBCdWZmZXIoUyl9KSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oUyl7cmV0dXJuIG5ldyBCdWZmZXIoUyl9KX1mdW5jdGlvbiBWKFMpe3JldHVybiBUZT9CdWZmZXIuYWxs'@;
put 'b2MoUyk6bmV3IEFycmF5KFMpfWZ1bmN0aW9uIHAoUyl7cmV0dXJuIFRlP0J1ZmZlci5hbGxvY1Vuc2FmZShTKTpuZXcgQXJyYXkoUyl9dmFyIGI9ZnVuY3Rpb24oUil7cmV0dXJuIFRlP1NlKFIsImJpbmFyeSIpOlIuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gMjU1JmsuY2hh'@;
put 'ckNvZGVBdCgwKX0pfTtmdW5jdGlvbiB4KFMpe2lmKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpcmV0dXJuIGIoUyk7Zm9yKHZhciBSPW5ldyBBcnJheUJ1ZmZlcihTLmxlbmd0aCksaz1uZXcgVWludDhBcnJheShSKSxHPTA7RyE9Uy5sZW5ndGg7KytHKWtbR109MjU1JlMuY2hhckNvZGVBdChH'@;
put 'KTtyZXR1cm4gUn1mdW5jdGlvbiBDKFMpe2lmKEFycmF5LmlzQXJyYXkoUykpcmV0dXJuIFMubWFwKGZ1bmN0aW9uKEcpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKEcpfSkuam9pbigiIik7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoOysraylSW2tdPVN0cmluZy5mcm9tQ2hhckNv'@;
put 'ZGUoU1trXSk7cmV0dXJuIFIuam9pbigiIil9ZnVuY3Rpb24gSChTKXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQiKTtpZihTIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIEgobmV3IFVpbnQ4QXJyYXkoUykpO2Zvcih2YXIgUj1u'@;
put 'ZXcgQXJyYXkoUy5sZW5ndGgpLGs9MDtrPFMubGVuZ3RoOysraylSW2tdPVNba107cmV0dXJuIFJ9dmFyIGo9ZnVuY3Rpb24oUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXtBcnJheS5pc0FycmF5KGspP1I9Ui5jb25jYXQoayk6KHR5cGVvZiBVaW50OEFycmF5PCJ1'@;
put 'IiYmayBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJmsgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikmJihSPVIuY29uY2F0KEgoaykpKX0pLFJ9LEU9L1x1MDAwMC9nLG09L1tcdTAwMDEtXHUwMDA2XS9nLEE9e30sb2U9ZnVuY3Rpb24oUil7ZnVuY3Rpb24g'@;
put 'ayhsbil7Zm9yKHZhciBFbj0iIixVbj1sbi5sZW5ndGgtMTtVbj49MDspRW4rPWxuLmNoYXJBdChVbi0tKTtyZXR1cm4gRW59ZnVuY3Rpb24gRyhsbixFbil7Zm9yKHZhciBVbj0iIjtVbi5sZW5ndGg8RW47KVVuKz1sbjtyZXR1cm4gVW59ZnVuY3Rpb24gUShsbixFbil7dmFyIFVuPSIiK2xu'@;
put 'O3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOkcoIjAiLEVuLVVuLmxlbmd0aCkrVW59ZnVuY3Rpb24gYWUobG4sRW4pe3ZhciBVbj0iIitsbjtyZXR1cm4gVW4ubGVuZ3RoPj1Fbj9VbjpHKCIgIixFbi1Vbi5sZW5ndGgpK1VufWZ1bmN0aW9uIGdlKGxuLEVuKXt2YXIgVW49IiIrbG47cmV0dXJu'@;
put 'IFVuLmxlbmd0aD49RW4/VW46VW4rRygiICIsRW4tVW4ubGVuZ3RoKX1SLnZlcnNpb249IjEuMjAyMTA3MjYuMSI7dmFyIFBlPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIE5lKGxuLEVuKXtyZXR1cm4gbG4+UGV8fGxuPC1QZT9mdW5jdGlvbiBwZShsbixFbil7dmFyIFVuPSIiK01hdGgucm91'@;
put 'bmQobG4pO3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOkcoIjAiLEVuLVVuLmxlbmd0aCkrVW59KGxuLEVuKTpmdW5jdGlvbiB5ZShsbixFbil7dmFyIFVuPSIiK2xuO3JldHVybiBVbi5sZW5ndGg+PUVuP1VuOkcoIjAiLEVuLVVuLmxlbmd0aCkrVW59KE1hdGgucm91bmQobG4pLEVuKX1mdW5j'@;
put 'dGlvbiBZZShsbixFbil7cmV0dXJuIGxuLmxlbmd0aD49NysoRW49RW58fDApJiYxMDM9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKSkmJjEwMT09KDMyfGxuLmNoYXJDb2RlQXQoRW4rMSkpJiYxMTA9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzIpKSYmMTAxPT0oMzJ8bG4uY2hhckNvZGVBdChFbisz'@;
put 'KSkmJjExND09KDMyfGxuLmNoYXJDb2RlQXQoRW4rNCkpJiY5Nz09KDMyfGxuLmNoYXJDb2RlQXQoRW4rNSkpJiYxMDg9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzYpKX1mdW5jdGlvbiBldChsbil7Zm9yKHZhciBFbj1bXSxVbj1PYmplY3Qua2V5cyhsbiksU2k9MDtTaSE9PVVuLmxlbmd0aDsr'@;
put 'K1NpKUVuW2xuW1VuW1NpXV1dPVVuW1NpXTtyZXR1cm4gRW59dmFyIGN0PVtbIlN1biIsIlN1bmRheSJdLFsiTW9uIiwiTW9uZGF5Il0sWyJUdWUiLCJUdWVzZGF5Il0sWyJXZWQiLCJXZWRuZXNkYXkiXSxbIlRodSIsIlRodXJzZGF5Il0sWyJGcmkiLCJGcmlkYXkiXSxbIlNhdCIsIlNhdHVy'@;
put 'ZGF5Il1dLEV0PVtbIkoiLCJKYW4iLCJKYW51YXJ5Il0sWyJGIiwiRmViIiwiRmVicnVhcnkiXSxbIk0iLCJNYXIiLCJNYXJjaCJdLFsiQSIsIkFwciIsIkFwcmlsIl0sWyJNIiwiTWF5IiwiTWF5Il0sWyJKIiwiSnVuIiwiSnVuZSJdLFsiSiIsIkp1bCIsIkp1bHkiXSxbIkEiLCJBdWciLCJB'@;
put 'dWd1c3QiXSxbIlMiLCJTZXAiLCJTZXB0ZW1iZXIiXSxbIk8iLCJPY3QiLCJPY3RvYmVyIl0sWyJOIiwiTm92IiwiTm92ZW1iZXIiXSxbIkQiLCJEZWMiLCJEZWNlbWJlciJdXTtmdW5jdGlvbiBvdChsbil7bG5bMF09IkdlbmVyYWwiLGxuWzFdPSIwIixsblsyXT0iMC4wMCIsbG5bM109IiMs'@;
put 'IyMwIixsbls0XT0iIywjIzAuMDAiLGxuWzldPSIwJSIsbG5bMTBdPSIwLjAwJSIsbG5bMTFdPSIwLjAwRSswMCIsbG5bMTJdPSIjID8vPyIsbG5bMTNdPSIjID8/Lz8/IixsblsxNF09Im0vZC95eSIsbG5bMTVdPSJkLW1tbS15eSIsbG5bMTZdPSJkLW1tbSIsbG5bMTddPSJtbW0teXkiLGxu'@;
put 'WzE4XT0iaDptbSBBTS9QTSIsbG5bMTldPSJoOm1tOnNzIEFNL1BNIixsblsyMF09Img6bW0iLGxuWzIxXT0iaDptbTpzcyIsbG5bMjJdPSJtL2QveXkgaDptbSIsbG5bMzddPSIjLCMjMCA7KCMsIyMwKSIsbG5bMzhdPSIjLCMjMCA7W1JlZF0oIywjIzApIixsblszOV09IiMsIyMwLjAwOygj'@;
put 'LCMjMC4wMCkiLGxuWzQwXT0iIywjIzAuMDA7W1JlZF0oIywjIzAuMDApIixsbls0NV09Im1tOnNzIixsbls0Nl09IltoXTptbTpzcyIsbG5bNDddPSJtbXNzLjAiLGxuWzQ4XT0iIyMwLjBFKzAiLGxuWzQ5XT0iQCIsbG5bNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2'@;
put 'NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsRm4obG4pfXZhciBidD17fTtvdChidCk7dmFyIGp0PVtdLGt0PTA7Zm9yKGt0PTU7a3Q8PTg7KytrdClqdFtrdF09MzIra3Q7Zm9yKGt0PTIzO2t0PD0yNjsrK2t0KWp0W2t0XT0wO2ZvcihrdD0yNztrdDw9MzE7KytrdClqdFtrdF09MTQ7Zm9y'@;
put 'KGt0PTUwO2t0PD01ODsrK2t0KWp0W2t0XT0xNDtmb3Ioa3Q9NTk7a3Q8PTYyOysra3QpanRba3RdPWt0LTU4O2ZvcihrdD02NztrdDw9Njg7KytrdClqdFtrdF09a3QtNTg7Zm9yKGt0PTcyO2t0PD03NTsrK2t0KWp0W2t0XT1rdC01ODtmb3Ioa3Q9Njc7a3Q8PTY4Oysra3QpanRba3RdPWt0'@;
put 'LTU3O2ZvcihrdD03NjtrdDw9Nzg7KytrdClqdFtrdF09a3QtNTY7Zm9yKGt0PTc5O2t0PD04MTsrK2t0KWp0W2t0XT1rdC0zNDt2YXIgT3Q9W107ZnVuY3Rpb24gS3QobG4sRW4sVW4pe2Zvcih2YXIgU2k9bG48MD8tMToxLGFyPWxuKlNpLE9pPTAsU3I9MSxQaT0wLFdvPTEsSGk9MCxtbz0w'@;
put 'LERpPU1hdGguZmxvb3IoYXIpO0hpPEVuJiYoUGk9KERpPU1hdGguZmxvb3IoYXIpKSpTcitPaSxtbz1EaSpIaStXbywhKGFyLURpPDVlLTgpKTspYXI9MS8oYXItRGkpLE9pPVNyLFNyPVBpLFdvPUhpLEhpPW1vO2lmKG1vPkVuJiYoSGk+RW4/KG1vPVdvLFBpPU9pKToobW89SGksUGk9U3Ip'@;
put 'KSwhVW4pcmV0dXJuWzAsU2kqUGksbW9dO3ZhciBzcz1NYXRoLmZsb29yKFNpKlBpL21vKTtyZXR1cm5bc3MsU2kqUGktc3MqbW8sbW9dfWZ1bmN0aW9uIFRuKGxuLEVuLFVuKXtpZihsbj4yOTU4NDY1fHxsbjwwKXJldHVybiBudWxsO3ZhciBTaT0wfGxuLGFyPU1hdGguZmxvb3IoODY0MDAq'@;
put 'KGxuLVNpKSksT2k9MCxTcj1bXSxQaT17RDpTaSxUOmFyLHU6ODY0MDAqKGxuLVNpKS1hcix5OjAsbTowLGQ6MCxIOjAsTTowLFM6MCxxOjB9O2lmKE1hdGguYWJzKFBpLnUpPDFlLTYmJihQaS51PTApLEVuJiZFbi5kYXRlMTkwNCYmKFNpKz0xNDYyKSxQaS51Pi45OTk5JiYoUGkudT0wLDg2'@;
put 'NDAwPT0rK2FyJiYoUGkuVD1hcj0wLCsrU2ksKytQaS5EKSksNjA9PT1TaSlTcj1Vbj9bMTMxNywxMCwyOV06WzE5MDAsMiwyOV0sT2k9MztlbHNlIGlmKDA9PT1TaSlTcj1Vbj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLE9pPTY7ZWxzZXtTaT42MCYmLS1TaTt2YXIgV289bmV3IERhdGUoMTkw'@;
put 'MCwwLDEpO1dvLnNldERhdGUoV28uZ2V0RGF0ZSgpK1NpLTEpLFNyPVtXby5nZXRGdWxsWWVhcigpLFdvLmdldE1vbnRoKCkrMSxXby5nZXREYXRlKCldLE9pPVdvLmdldERheSgpLFNpPDYwJiYoT2k9KE9pKzYpJTcpLFVuJiYoT2k9ZnVuY3Rpb24gc2EobG4sRW4pe0VuWzBdLT01ODE7dmFy'@;
put 'IFVuPWxuLmdldERheSgpO3JldHVybiBsbjw2MCYmKFVuPShVbis2KSU3KSxVbn0oV28sU3IpKX1yZXR1cm4gUGkueT1TclswXSxQaS5tPVNyWzFdLFBpLmQ9U3JbMl0sUGkuUz1hciU2MCxhcj1NYXRoLmZsb29yKGFyLzYwKSxQaS5NPWFyJTYwLGFyPU1hdGguZmxvb3IoYXIvNjApLFBpLkg9'@;
put 'YXIsUGkucT1PaSxQaX1PdFs1XT1PdFs2M109JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLE90WzZdPU90WzY0XT0nIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyxPdFs3XT1PdFs2NV09JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLE90WzhdPU90WzY2XT0nIiQi'@;
put 'IywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxPdFs0MV09J18oKiAjLCMjMF8pO18oKiBcXCgjLCMjMFxcKTtfKCogIi0iXyk7XyhAXyknLE90WzQyXT0nXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsT3RbNDNdPSdfKCogIywj'@;
put 'IzAuMDBfKTtfKCogXFwoIywjIzAuMDBcXCk7XygqICItIj8/Xyk7XyhAXyknLE90WzQ0XT0nXygiJCIqICMsIyMwLjAwXyk7XygiJCIqIFxcKCMsIyMwLjAwXFwpO18oIiQiKiAiLSI/P18pO18oQF8pJyxSLnBhcnNlX2RhdGVfY29kZT1Ubjt2YXIgcnI9bmV3IERhdGUoMTg5OSwxMSwzMSww'@;
put 'LDAsMCksU249cnIuZ2V0VGltZSgpLGxyPW5ldyBEYXRlKDE5MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiBYbihsbixFbil7dmFyIFVuPWxuLmdldFRpbWUoKTtyZXR1cm4gRW4/VW4tPTEyNjIzMDRlNTpsbj49bHImJihVbis9ODY0ZTUpLChVbi0oU24rNmU0Kihsbi5nZXRUaW1lem9uZU9mZnNl'@;
put 'dCgpLXJyLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9dmFyIFZuPSIiLGhyPXsiZW4tdXMiOnt5OiJ5IixkOiJkIiwiLCI6IiwiLCIuIjoiLiIsZGF0ZToiXy8ifSwiZGUtZGUiOnt5OiJqIixkOiJ0IiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy4ifSwiaXQtaXQiOnt5OiJ5IixkOiJk'@;
put 'IiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy8ifX0sYnI9aHJbVm4udG9Mb3dlckNhc2UoKV18fGhyWyJlbi11cyJdLGVyPWV0KGJyKSxDaT0iJCIsRmk9IiIsTGk9IiwiLGtyPSIuIixObj0iLyI7ZnVuY3Rpb24gRm4obG4pe3N3aXRjaCgoVm58fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpo'@;
put 'LXR3IjpsblsyN109IlskLTQwNF1lL20vZCIsbG5bMjhdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblsyOV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMwXT0nbSIvImQiLyJ5eScsbG5bMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJk'@;
put 'Ilx1NjVlNSInLGxuWzMyXT0naGgiXHU2NjQyIm1tIlx1NTIwNiInLGxuWzMzXT0naGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLGxuWzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1'@;
put 'NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM2XT0iWyQtNDA0XWUvbS9kIixsbls1MF09IlskLTQwNF1lL20vZCIsbG5bNTFdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1Ml09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2'@;
put 'NjQyIm1tIlx1NTIwNiInLGxuWzUzXT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzU0XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1'@;
put 'NjY0MiJtbSJcdTUyMDYiJyxsbls1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsbls1N109IlskLTQwNF1lL20vZCIsbG5bNThdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlInpoLWNu'@;
put 'IjpsblsyN109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bMjhdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzI5XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMF09J20iLSJkIi0ieXknLGxuWzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMl09J2giXHU2NWY2'@;
put 'Im1tIlx1NTIwNiInLGxuWzMzXT0naCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzM0XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxsblszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1'@;
put 'NzlkMiInLGxuWzM2XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1MF09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTFdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1M109J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTRdPSdt'@;
put 'Ilx1NjcwOCJkIlx1NjVlNSInLGxuWzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxsbls1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLGxuWzU3XT0neXl5eSJcdTVlNzQibSJcdTY3'@;
put 'MDgiJyxsbls1OF09J20iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJqYS1qcCI6bG5bMjddPSdbJC00MTFdZ2UiLiJtIi4iZCcsbG5bMjhdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblsyOV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1'@;
put 'NjVlNSInLGxuWzMwXT0nbSIvImQiLyJ5eScsbG5bMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzMyXT0naCJcdTY2NDIibW0iXHU1MjA2IicsbG5bMzNdPSdoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsbG5bMzRdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCIn'@;
put 'LGxuWzM1XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszNl09J1skLTQxMV1nZSIuIm0iLiJkJyxsbls1MF09J1skLTQxMV1nZSIuIm0iLiJkJyxsbls1MV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsbls1'@;
put 'M109J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTRdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1NV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTZdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU3XT0nWyQtNDExXWdlIi4ibSIuImQnLGxuWzU4XT0n'@;
put 'WyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJrby1rciI6bG5bMjddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxsblsyOF09Im1tLWRkIixsblsyOV09Im1tLWRkIixsblszMF09Im1tLWRkLXl5IixsblszMV09J3l5eXkiXHVi'@;
put 'MTQ0IiBtbSJcdWM2ZDQiIGRkIlx1Yzc3YyInLGxuWzMyXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCInLGxuWzMzXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCIgc3MiXHVjZDA4IicsbG5bMzRdPSJ5eXl5LW1tLWRkIixsblszNV09Inl5eXktbW0tZGQiLGxuWzM2XT0neXl5eSJcdTVlNzQiIG1tIlx1'@;
put 'NjcwOCIgZGQiXHU2NWU1IicsbG5bNTBdPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxsbls1MV09Im1tLWRkIixsbls1Ml09Inl5eXktbW0tZGQiLGxuWzUzXT0ieXl5eS1tbS1kZCIsbG5bNTRdPSJtbS1kZCIsbG5bNTVdPSJ5eXl5LW1tLWRkIixsbls1Nl09Inl5eXkt'@;
put 'bW0tZGQiLGxuWzU3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsbG5bNThdPSJtbS1kZCI7YnJlYWs7Y2FzZSJ0aC10aCI6bG5bNTldPScidCIwJyxsbls2MF09JyJ0IjAuMDAnLGxuWzYxXT0nInQiIywjIzAnLGxuWzYyXT0nInQiIywjIzAuMDAnLGxuWzY3XT0idDAl'@;
put 'Iixsbls2OF09InQwLjAwJSIsbG5bNjldPSJ0IyA/Lz8iLGxuWzcwXT0idCMgPz8vPz8iLGxuWzcxXT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiJyxsbls3Ml09J1x1MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsbG5bNzNdPSdc'@;
put 'dTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQnLGxuWzc0XT0nXHUwZTE0XHUwZTE0XHUwZTE0Ii0iXHUwZTFiXHUwZTFiJyxsbls3NV09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOScsbG5bNzZdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLGxuWzc3XT0nXHUwZTI3Ii8i'@;
put 'XHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiIFx1MGUwYSI6Ilx1MGUxOVx1MGUxOScsbG5bNzhdPSdcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLGxuWzc5XT0nW1x1MGUwYV1cdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLGxuWzgwXT0nXHUwZTE5XHUwZTE5IjoiXHUw'@;
put 'ZTE3XHUwZTE3LjAnLGxuWzgxXT0iZC9tL2JiIn19Ui5fZ2VuZXJhbF9pbnQ9ZnVuY3Rpb24gWmkobG4pe3JldHVybiBsbi50b1N0cmluZygxMCl9O3ZhciB5aT1mdW5jdGlvbigpe3ZhciBFbj0vKD86XC4wKnwoXC5cZCpbMS05XSkwKykkLztmdW5jdGlvbiBVbihIaSl7cmV0dXJuLTE9PUhp'@;
put 'LmluZGV4T2YoIi4iKT9IaTpIaS5yZXBsYWNlKEVuLCIkMSIpfXZhciBTaT0vKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLyxhcj0vKEVbKy1dKShcZCkkLztyZXR1cm4gZnVuY3Rpb24obW8pe3ZhciBEaT1mdW5jdGlvbiBXbyhIaSl7dmFyIERpLG1vPU1hdGguZmxvb3IoTWF0aC5sb2co'@;
put 'TWF0aC5hYnMoSGkpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIERpPW1vPj0tNCYmbW88PS0xP0hpLnRvUHJlY2lzaW9uKDEwK21vKTpNYXRoLmFicyhtbyk8PTk/ZnVuY3Rpb24gU3IoSGkpe3ZhciBtbz1IaTwwPzEyOjExLERpPVVuKEhpLnRvRml4ZWQoMTIpKTtyZXR1cm4gRGkubGVuZ3RoPD1t'@;
put 'b3x8KERpPUhpLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD1tbz9EaTpIaS50b0V4cG9uZW50aWFsKDUpfShIaSk6MTA9PT1tbz9IaS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gUGkoSGkpe3ZhciBtbz1VbihIaS50b0ZpeGVkKDExKSk7cmV0dXJuIG1vLmxlbmd0aD4oSGk8'@;
put 'MD8xMjoxMSl8fCIwIj09PW1vfHwiLTAiPT09bW8/SGkudG9QcmVjaXNpb24oNik6bW99KEhpKSxVbihmdW5jdGlvbiBPaShIaSl7cmV0dXJuLTE9PUhpLmluZGV4T2YoIkUiKT9IaTpIaS5yZXBsYWNlKFNpLCIkMUUiKS5yZXBsYWNlKGFyLCIkMTAkMiIpfShEaS50b1VwcGVyQ2FzZSgpKSl9'@;
put 'KG1vKTtyZXR1cm4iLCI9PT1MaSYmIi4iPT09a3I/RGk6RGkucmVwbGFjZSgvWywuXS9nLGZ1bmN0aW9uKHNzKXtyZXR1cm4iLCI9PXNzP0xpOmtyfSl9fSgpO2Z1bmN0aW9uIHdvKGxuLEVuKXtzd2l0Y2godHlwZW9mIGxuKXtjYXNlInN0cmluZyI6cmV0dXJuIGxuO2Nhc2UiYm9vbGVhbiI6'@;
put 'cmV0dXJuIGxuPyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxsbik9PT1sbj9sbi50b1N0cmluZygxMCk6eWkobG4pO2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4iIjtjYXNlIm9iamVjdCI6aWYobnVsbD09bG4pcmV0dXJuIiI7aWYobG4gaW5zdGFuY2VvZiBEYXRlKXJldHVy'@;
put 'biBidSgxNCxYbihsbixFbiYmRW4uZGF0ZTE5MDQpLEVuKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHZhbHVlIGluIEdlbmVyYWwgZm9ybWF0OiAiK2xuKX1SLl9nZW5lcmFsX251bT15aSxSLl9nZW5lcmFsPXdvO3ZhciBvbz0iXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0'@;
put 'XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5Ii5zcGxpdCgiIik7ZnVuY3Rpb24gTGEobG4sRW4sVW4sU2kpe3ZhciBXbyxhcj0iIixPaT0wLFNyPTAsUGk9VW4ueSxIaT0wO3N3aXRjaChsbil7Y2FzZSA5ODpQaT1Vbi55KzU0MztjYXNlIDEyMTpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNl'@;
put 'IDE6Y2FzZSAyOldvPVBpJTEwMCxIaT0yO2JyZWFrO2RlZmF1bHQ6V289UGklMWU0LEhpPTR9YnJlYWs7Y2FzZSAxMDk6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpXbz1Vbi5tLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIEV0W1VuLm0tMV1bMV07Y2FzZSA1OnJl'@;
put 'dHVybiBFdFtVbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIEV0W1VuLm0tMV1bMl19YnJlYWs7Y2FzZSAxMDA6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpXbz1Vbi5kLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIGN0W1VuLnFdWzBdO2RlZmF1bHQ6cmV0dXJuIGN0'@;
put 'W1VuLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6V289MSsoVW4uSCsxMSklMTIsSGk9RW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK0VufWJyZWFrO2Nhc2UgNzI6c3dpdGNoKEVuLmxlbmd0aCl7Y2Fz'@;
put 'ZSAxOmNhc2UgMjpXbz1Vbi5ILEhpPUVuLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIitFbn1icmVhaztjYXNlIDc3OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6V289VW4uTSxIaT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQg'@;
put 'bWludXRlIGZvcm1hdDogIitFbn1icmVhaztjYXNlIDExNTppZigicyIhPUVuJiYic3MiIT1FbiYmIi4wIiE9RW4mJiIuMDAiIT1FbiYmIi4wMDAiIT1Fbil0aHJvdyJiYWQgc2Vjb25kIGZvcm1hdDogIitFbjtyZXR1cm4gMCE9PVVuLnV8fCJzIiE9RW4mJiJzcyIhPUVuPyhTcj1TaT49Mj8z'@;
put 'PT09U2k/MWUzOjEwMDoxPT09U2k/MTA6MSwoT2k9TWF0aC5yb3VuZChTciooVW4uUytVbi51KSkpPj02MCpTciYmKE9pPTApLCJzIj09PUVuPzA9PT1PaT8iMCI6IiIrT2kvU3I6KGFyPVEoT2ksMitTaSksInNzIj09PUVuP2FyLnN1YnN0cigwLDIpOiIuIithci5zdWJzdHIoMixFbi5sZW5n'@;
put 'dGgtMSkpKTpRKFVuLlMsRW4ubGVuZ3RoKTtjYXNlIDkwOnN3aXRjaChFbil7Y2FzZSJbaF0iOmNhc2UiW2hoXSI6Y2FzZSJbXHUwZTBhXSI6Y2FzZSJbXHUwZTBhXHUwZTBhXSI6V289MjQqVW4uRCtVbi5IO2JyZWFrO2Nhc2UiW21dIjpjYXNlIlttbV0iOmNhc2UiW1x1MGUxOV0iOmNhc2Ui'@;
put 'W1x1MGUxOVx1MGUxOV0iOldvPTYwKigyNCpVbi5EK1VuLkgpK1VuLk07YnJlYWs7Y2FzZSJbc10iOmNhc2UiW3NzXSI6Y2FzZSJbXHUwZTE3XSI6Y2FzZSJbXHUwZTE3XHUwZTE3XSI6V289NjAqKDYwKigyNCpVbi5EK1VuLkgpK1VuLk0pK01hdGgucm91bmQoVW4uUytVbi51KTticmVhaztk'@;
put 'ZWZhdWx0OnRocm93ImJhZCBhYnN0aW1lIGZvcm1hdDogIitFbn1IaT0zPT09RW4ubGVuZ3RoPzE6MjticmVhaztjYXNlIDEwMTpXbz1QaSxIaT0xO2JyZWFrO2Nhc2UgMzYyMzpXbz1Vbi5kLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM2MDQ6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNh'@;
put 'c2UgMjpXbz1Vbi5tLEhpPUVuLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIEV0W1VuLm0tMV1bMV07Y2FzZSA1OnJldHVybiBFdFtVbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIEV0W1VuLm0tMV1bMl19YnJlYWs7Y2FzZSAzNjExOnN3aXRjaChQaT1Vbi55KzU0MyxFbi5sZW5ndGgpe2Nh'@;
put 'c2UgMTpjYXNlIDI6V289UGklMTAwLEhpPTI7YnJlYWs7ZGVmYXVsdDpXbz1QaSUxZTQsSGk9NH1icmVhaztjYXNlIDM1OTQ6V289VW4uSCxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA5OldvPVVuLk0sSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwNzpXbz1Vbi5TLEhpPUVuLmxlbmd0'@;
put 'aDticmVhaztkZWZhdWx0OnRocm93IGxuLnRvU3RyaW5nKDE2KX12YXIgbW89SGk+MD9RKFdvLEhpKToiIjtyZXR1cm4oOTA9PWxuP0VuLmNoYXJDb2RlQXQoMSk8MzU4NDpsbjwzNTg0KT9tbzptby5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKERpKXtyZXR1cm4gb29bK0RpXX0pfWZ1bmN0'@;
put 'aW9uIFBvKGxuKXtpZihsbi5sZW5ndGg8PTMpcmV0dXJuIGxuO2Zvcih2YXIgVW49bG4ubGVuZ3RoJTMsU2k9bG4uc3Vic3RyKDAsVW4pO1VuIT1sbi5sZW5ndGg7VW4rPTMpU2krPShTaS5sZW5ndGg+MD8iLCI6IiIpK2xuLnN1YnN0cihVbiwzKTtyZXR1cm4gU2l9dmFyIGhhPWZ1bmN0aW9u'@;
put 'KCl7dmFyIEVuPS8lL2c7ZnVuY3Rpb24gYXIod24sWnQpe3ZhciBubix4bj13bi5pbmRleE9mKCJFIiktd24uaW5kZXhPZigiLiIpLTE7aWYod24ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVp0KXJldHVybiIwLjBFKzAiO2lmKFp0PDApcmV0dXJuIi0iK2FyKHduLC1adCk7dmFyIHpu'@;
put 'PXduLmluZGV4T2YoIi4iKTstMT09PXpuJiYoem49d24uaW5kZXhPZigiRSIpKTt2YXIgeXI9TWF0aC5mbG9vcihNYXRoLmxvZyhadCkqTWF0aC5MT0cxMEUpJXpuO2lmKHlyPDAmJih5cis9em4pLC0xPT09KG5uPShadC9NYXRoLnBvdygxMCx5cikpLnRvUHJlY2lzaW9uKHhuKzErKHpuK3ly'@;
put 'KSV6bikpLmluZGV4T2YoImUiKSl7dmFyIFdyPU1hdGguZmxvb3IoTWF0aC5sb2coWnQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1ubi5pbmRleE9mKCIuIik/bm49bm4uY2hhckF0KDApKyIuIitubi5zdWJzdHIoMSkrIkUrIisoV3Itbm4ubGVuZ3RoK3lyKTpubis9IkUrIisoV3IteXIpOyIw'@;
put 'LiI9PT1ubi5zdWJzdHIoMCwyKTspbm49KG5uPW5uLmNoYXJBdCgwKStubi5zdWJzdHIoMix6bikrIi4iK25uLnN1YnN0cigyK3puKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO25uPW5uLnJlcGxhY2UoL1wrLS8sIi0iKX1ubj1ubi5yZXBsYWNl'@;
put 'KC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0aW9uKGFpLG5pLFhpLFVpKXtyZXR1cm4gbmkrWGkrVWkuc3Vic3RyKDAsKHpuK3lyKSV6bikrIi4iK1VpLnN1YnN0cih5cikrIkUifSl9ZWxzZSBubj1adC50b0V4cG9uZW50aWFsKHhuKTtyZXR1cm4gd24ubWF0Y2goL0VcKzAwJC8p'@;
put 'JiZubi5tYXRjaCgvZVsrLV1cZCQvKSYmKG5uPW5uLnN1YnN0cigwLG5uLmxlbmd0aC0xKSsiMCIrbm4uY2hhckF0KG5uLmxlbmd0aC0xKSksd24ubWF0Y2goL0VcLS8pJiZubi5tYXRjaCgvZVwrLykmJihubj1ubi5yZXBsYWNlKC9lXCsvLCJlIikpLG5uLnJlcGxhY2UoImUiLCJFIil9dmFy'@;
put 'IE9pPS8jIChcPyspKCA/KVwvKCA/KShcZCspLyxXbz0vXiMqMCpcLihbMCNdKykvLEhpPS9cKS4qWzAjXS8sbW89L1woIyMjXCkgIyMjXFw/LSMjIyMvO2Z1bmN0aW9uIERpKHduKXtmb3IodmFyIG5uLFp0PSIiLHhuPTA7eG4hPXduLmxlbmd0aDsrK3huKXN3aXRjaChubj13bi5jaGFyQ29k'@;
put 'ZUF0KHhuKSl7Y2FzZSAzNTpicmVhaztjYXNlIDYzOlp0Kz0iICI7YnJlYWs7Y2FzZSA0ODpadCs9IjAiO2JyZWFrO2RlZmF1bHQ6WnQrPVN0cmluZy5mcm9tQ2hhckNvZGUobm4pfXJldHVybiBadH1mdW5jdGlvbiBzcyh3bixadCl7dmFyIG5uPU1hdGgucG93KDEwLFp0KTtyZXR1cm4iIitN'@;
put 'YXRoLnJvdW5kKHduKm5uKS9ubn1mdW5jdGlvbiBZYSh3bixadCl7aWYoWnQ+MTEpcmV0dXJuIFlhKHduLDExKSpNYXRoLnBvdygxMCxadC0xMSk7dmFyIG5uPXduLU1hdGguZmxvb3Iod24pLHhuPU1hdGgucG93KDEwLFp0KTtyZXR1cm4gWnQ8KCIiK01hdGgucm91bmQobm4qeG4pKS5sZW5n'@;
put 'dGg/MDpNYXRoLnJvdW5kKG5uKnhuKX1mdW5jdGlvbiBFbCh3bixadCxubil7aWYoNDA9PT13bi5jaGFyQ29kZUF0KDApJiYhWnQubWF0Y2goSGkpKXt2YXIgeG49WnQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIG5uPj0wP0Vs'@;
put 'KCJuIix4bixubik6IigiK0VsKCJuIix4biwtbm4pKyIpIn1pZig0ND09PVp0LmNoYXJDb2RlQXQoWnQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBTaSh3bixadCxubil7Zm9yKHZhciB4bj1adC5sZW5ndGgtMTs0ND09PVp0LmNoYXJDb2RlQXQoeG4tMSk7KS0teG47cmV0dXJuIGhhKHdu'@;
put 'LFp0LnN1YnN0cigwLHhuKSxubi9NYXRoLnBvdygxMCwzKihadC5sZW5ndGgteG4pKSl9KHduLFp0LG5uKTtpZigtMSE9PVp0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gVW4od24sWnQsbm4pe3ZhciB4bj1adC5yZXBsYWNlKEVuLCIiKSx6bj1adC5sZW5ndGgteG4ubGVuZ3RoO3Jl'@;
put 'dHVybiBoYSh3bix4bixubipNYXRoLnBvdygxMCwyKnpuKSkrRygiJSIsem4pfSh3bixadCxubik7aWYoLTEhPT1adC5pbmRleE9mKCJFIikpcmV0dXJuIGFyKFp0LG5uKTtpZigzNj09PVp0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK0VsKHduLFp0LnN1YnN0cigiICI9PVp0LmNoYXJBdCgx'@;
put 'KT8yOjEpLG5uKTt2YXIgem4seXIsV3IsYWksbmk9TWF0aC5hYnMobm4pLFhpPW5uPDA/Ii0iOiIiO2lmKFp0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBYaStOZShuaSxadC5sZW5ndGgpO2lmKFp0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIjAiPT09KHpuPU5lKG5uLDApKSYmKHpuPSIiKSx6'@;
put 'bi5sZW5ndGg+WnQubGVuZ3RoP3puOkRpKFp0LnN1YnN0cigwLFp0Lmxlbmd0aC16bi5sZW5ndGgpKSt6bjtpZih5cj1adC5tYXRjaChPaSkpcmV0dXJuIGZ1bmN0aW9uIFNyKHduLFp0LG5uKXt2YXIgeG49cGFyc2VJbnQod25bNF0sMTApLHpuPU1hdGgucm91bmQoWnQqeG4pLHlyPU1hdGgu'@;
put 'Zmxvb3Ioem4veG4pLFdyPXpuLXlyKnhuLGFpPXhuO3JldHVybiBubisoMD09PXlyPyIiOiIiK3lyKSsiICIrKDA9PT1Xcj9HKCIgIix3blsxXS5sZW5ndGgrMSt3bls0XS5sZW5ndGgpOmFlKFdyLHduWzFdLmxlbmd0aCkrd25bMl0rIi8iK3duWzNdK1EoYWksd25bNF0ubGVuZ3RoKSl9KHly'@;
put 'LG5pLFhpKTtpZihadC5tYXRjaCgvXiMrMCskLykpcmV0dXJuIFhpK05lKG5pLFp0Lmxlbmd0aC1adC5pbmRleE9mKCIwIikpO2lmKHlyPVp0Lm1hdGNoKFdvKSlyZXR1cm4gem49c3Mobm4seXJbMV0ubGVuZ3RoKS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitEaSh5clsxXSkpLnJlcGxh'@;
put 'Y2UoL1wuJC8sIi4iK0RpKHlyWzFdKSkucmVwbGFjZSgvXC4oXGQqKSQvLGZ1bmN0aW9uKFRhLE1zKXtyZXR1cm4iLiIrTXMrRygiMCIsRGkoeXJbMV0pLmxlbmd0aC1Ncy5sZW5ndGgpfSksLTEhPT1adC5pbmRleE9mKCIwLiIpP3puOnpuLnJlcGxhY2UoL14wXC4vLCIuIik7aWYoWnQ9WnQu'@;
put 'cmVwbGFjZSgvXiMrKFswLl0pLywiJDEiKSx5cj1adC5tYXRjaCgvXigwKilcLigjKikkLykpcmV0dXJuIFhpK3NzKG5pLHlyWzJdLmxlbmd0aCkucmVwbGFjZSgvXC4oXGQqWzEtOV0pMCokLywiLiQxIikucmVwbGFjZSgvXigtP1xkKikkLywiJDEuIikucmVwbGFjZSgvXjBcLi8seXJbMV0u'@;
put 'bGVuZ3RoPyIwLiI6Ii4iKTtpZih5cj1adC5tYXRjaCgvXiN7MSwzfSwjIzAoXC4/KSQvKSlyZXR1cm4gWGkrUG8oTmUobmksMCkpO2lmKHlyPVp0Lm1hdGNoKC9eIywjIzBcLihbIzBdKjApJC8pKXJldHVybiBubjwwPyItIitFbCh3bixadCwtbm4pOlBvKCIiKyhNYXRoLmZsb29yKG5uKStm'@;
put 'dW5jdGlvbiB4bCh3bixadCl7cmV0dXJuIFp0PCgiIitNYXRoLnJvdW5kKCh3bi1NYXRoLmZsb29yKHduKSkqTWF0aC5wb3coMTAsWnQpKSkubGVuZ3RoPzE6MH0obm4seXJbMV0ubGVuZ3RoKSkpKyIuIitRKFlhKG5uLHlyWzFdLmxlbmd0aCkseXJbMV0ubGVuZ3RoKTtpZih5cj1adC5tYXRj'@;
put 'aCgvXiMsIyosIzAvKSlyZXR1cm4gRWwod24sWnQucmVwbGFjZSgvXiMsIyosLywiIiksbm4pO2lmKHlyPVp0Lm1hdGNoKC9eKFswI10rKShcXD8tKFswI10rKSkrJC8pKXJldHVybiB6bj1rKEVsKHduLFp0LnJlcGxhY2UoL1tcXC1dL2csIiIpLG5uKSksV3I9MCxrKGsoWnQucmVwbGFjZSgv'@;
put 'XFwvZywiIikpLnJlcGxhY2UoL1swI10vZyxmdW5jdGlvbihUYSl7cmV0dXJuIFdyPHpuLmxlbmd0aD96bi5jaGFyQXQoV3IrKyk6IjAiPT09VGE/IjAiOiIifSkpO2lmKFp0Lm1hdGNoKG1vKSlyZXR1cm4iKCIrKHpuPUVsKHduLCIjIyMjIyMjIyMjIixubikpLnN1YnN0cigwLDMpKyIpICIr'@;
put 'em4uc3Vic3RyKDMsMykrIi0iK3puLnN1YnN0cig2KTt2YXIgVWk9IiI7aWYoeXI9WnQubWF0Y2goL14oWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBXcj1NYXRoLm1pbih5cls0XS5sZW5ndGgsNyksYWk9S3QobmksTWF0aC5wb3coMTAsV3IpLTEsITEpLHpuPSIiK1hpLCIg'@;
put 'Ij09KFVpPWhhKCJuIix5clsxXSxhaVsxXSkpLmNoYXJBdChVaS5sZW5ndGgtMSkmJihVaT1VaS5zdWJzdHIoMCxVaS5sZW5ndGgtMSkrIjAiKSx6bis9VWkreXJbMl0rIi8iK3lyWzNdLChVaT1nZShhaVsyXSxXcikpLmxlbmd0aDx5cls0XS5sZW5ndGgmJihVaT1EaSh5cls0XS5zdWJzdHIo'@;
put 'eXJbNF0ubGVuZ3RoLVVpLmxlbmd0aCkpK1VpKSx6bis9VWk7aWYoeXI9WnQubWF0Y2goL14jIChbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFdyPU1hdGgubWluKE1hdGgubWF4KHlyWzFdLmxlbmd0aCx5cls0XS5sZW5ndGgpLDcpLFhpKygoYWk9S3QobmksTWF0aC5wb3co'@;
put 'MTAsV3IpLTEsITApKVswXXx8KGFpWzFdPyIiOiIwIikpKyIgIisoYWlbMV0/YWUoYWlbMV0sV3IpK3lyWzJdKyIvIit5clszXStnZShhaVsyXSxXcik6RygiICIsMipXcisxK3lyWzJdLmxlbmd0aCt5clszXS5sZW5ndGgpKTtpZih5cj1adC5tYXRjaCgvXlsjMD9dKyQvKSlyZXR1cm4gem49'@;
put 'TmUobm4sMCksWnQubGVuZ3RoPD16bi5sZW5ndGg/em46RGkoWnQuc3Vic3RyKDAsWnQubGVuZ3RoLXpuLmxlbmd0aCkpK3puO2lmKHlyPVp0Lm1hdGNoKC9eKFsjMD9dKylcLihbIzBdKykkLykpe3puPSIiK25uLnRvRml4ZWQoTWF0aC5taW4oeXJbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgv'@;
put 'KFteMF0pMCskLywiJDEiKSxXcj16bi5pbmRleE9mKCIuIik7dmFyIHJhPVp0LmluZGV4T2YoIi4iKS1Xcix6bz1adC5sZW5ndGgtem4ubGVuZ3RoLXJhO3JldHVybiBEaShadC5zdWJzdHIoMCxyYSkrem4rWnQuc3Vic3RyKFp0Lmxlbmd0aC16bykpfWlmKHlyPVp0Lm1hdGNoKC9eMDAsMDAw'@;
put 'XC4oWyMwXSowKSQvKSlyZXR1cm4gV3I9WWEobm4seXJbMV0ubGVuZ3RoKSxubjwwPyItIitFbCh3bixadCwtbm4pOlBvKGZ1bmN0aW9uIHl1KHduKXtyZXR1cm4gd248MjE0NzQ4MzY0NyYmd24+LTIxNDc0ODM2NDg/IiIrKHduPj0wPzB8d246d24tMXwwKToiIitNYXRoLmZsb29yKHduKX0o'@;
put 'bm4pKS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKFRhKXtyZXR1cm4iMDAsIisoVGEubGVuZ3RoPDM/USgwLDMtVGEubGVuZ3RoKToiIikrVGF9KSsiLiIrUShXcix5clsxXS5sZW5ndGgpO3N3aXRjaChadCl7Y2FzZSIjIyMsIyMwLjAwIjpy'@;
put 'ZXR1cm4gRWwod24sIiMsIyMwLjAwIixubik7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2FzZSIjLCMjIyI6dmFyIGJvPVBvKE5lKG5pLDApKTtyZXR1cm4iMCIhPT1ibz9YaStibzoiIjtjYXNlIiMjIywjIyMuMDAiOnJldHVybiBFbCh3biwiIyMjLCMjMC4wMCIsbm4pLnJlcGxhY2Uo'@;
put 'L14wXC4vLCIuIik7Y2FzZSIjLCMjIy4wMCI6cmV0dXJuIEVsKHduLCIjLCMjMC4wMCIsbm4pLnJlcGxhY2UoL14wXC4vLCIuIil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrWnQrInwiKX1mdW5jdGlvbiBnbih3bixadCl7dmFyIG5uLHhuPXduLmluZGV4T2YoIkUi'@;
put 'KS13bi5pbmRleE9mKCIuIiktMTtpZih3bi5tYXRjaCgvXiMrMC4wRVwrMCQvKSl7aWYoMD09WnQpcmV0dXJuIjAuMEUrMCI7aWYoWnQ8MClyZXR1cm4iLSIrZ24od24sLVp0KTt2YXIgem49d24uaW5kZXhPZigiLiIpOy0xPT09em4mJih6bj13bi5pbmRleE9mKCJFIikpO3ZhciB5cj1NYXRo'@;
put 'LmZsb29yKE1hdGgubG9nKFp0KSpNYXRoLkxPRzEwRSklem47aWYoeXI8MCYmKHlyKz16biksIShubj0oWnQvTWF0aC5wb3coMTAseXIpKS50b1ByZWNpc2lvbih4bisxKyh6bit5ciklem4pKS5tYXRjaCgvW0VlXS8pKXt2YXIgV3I9TWF0aC5mbG9vcihNYXRoLmxvZyhadCkqTWF0aC5MT0cx'@;
put 'MEUpOy0xPT09bm4uaW5kZXhPZigiLiIpP25uPW5uLmNoYXJBdCgwKSsiLiIrbm4uc3Vic3RyKDEpKyJFKyIrKFdyLW5uLmxlbmd0aCt5cik6bm4rPSJFKyIrKFdyLXlyKSxubj1ubi5yZXBsYWNlKC9cKy0vLCItIil9bm49bm4ucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxm'@;
put 'dW5jdGlvbihhaSxuaSxYaSxVaSl7cmV0dXJuIG5pK1hpK1VpLnN1YnN0cigwLCh6bit5ciklem4pKyIuIitVaS5zdWJzdHIoeXIpKyJFIn0pfWVsc2Ugbm49WnQudG9FeHBvbmVudGlhbCh4bik7cmV0dXJuIHduLm1hdGNoKC9FXCswMCQvKSYmbm4ubWF0Y2goL2VbKy1dXGQkLykmJihubj1u'@;
put 'bi5zdWJzdHIoMCxubi5sZW5ndGgtMSkrIjAiK25uLmNoYXJBdChubi5sZW5ndGgtMSkpLHduLm1hdGNoKC9FXC0vKSYmbm4ubWF0Y2goL2VcKy8pJiYobm49bm4ucmVwbGFjZSgvZVwrLywiZSIpKSxubi5yZXBsYWNlKCJlIiwiRSIpfWZ1bmN0aW9uIGtuKHduLFp0LG5uKXtpZig0MD09PXdu'@;
put 'LmNoYXJDb2RlQXQoMCkmJiFadC5tYXRjaChIaSkpe3ZhciB4bj1adC5yZXBsYWNlKC9cKCAqLywiIikucmVwbGFjZSgvIFwpLywiIikucmVwbGFjZSgvXCkvLCIiKTtyZXR1cm4gbm4+PTA/a24oIm4iLHhuLG5uKToiKCIra24oIm4iLHhuLC1ubikrIikifWlmKDQ0PT09WnQuY2hhckNvZGVB'@;
put 'dChadC5sZW5ndGgtMSkpcmV0dXJuIGZ1bmN0aW9uIExmKHduLFp0LG5uKXtmb3IodmFyIHhuPVp0Lmxlbmd0aC0xOzQ0PT09WnQuY2hhckNvZGVBdCh4bi0xKTspLS14bjtyZXR1cm4gaGEod24sWnQuc3Vic3RyKDAseG4pLG5uL01hdGgucG93KDEwLDMqKFp0Lmxlbmd0aC14bikpKX0od24s'@;
put 'WnQsbm4pO2lmKC0xIT09WnQuaW5kZXhPZigiJSIpKXJldHVybiBmdW5jdGlvbiBfZCh3bixadCxubil7dmFyIHhuPVp0LnJlcGxhY2UoRW4sIiIpLHpuPVp0Lmxlbmd0aC14bi5sZW5ndGg7cmV0dXJuIGhhKHduLHhuLG5uKk1hdGgucG93KDEwLDIqem4pKStHKCIlIix6bil9KHduLFp0LG5u'@;
put 'KTtpZigtMSE9PVp0LmluZGV4T2YoIkUiKSlyZXR1cm4gZ24oWnQsbm4pO2lmKDM2PT09WnQuY2hhckNvZGVBdCgwKSlyZXR1cm4iJCIra24od24sWnQuc3Vic3RyKCIgIj09WnQuY2hhckF0KDEpPzI6MSksbm4pO3ZhciB6bix5cixXcixhaSxuaT1NYXRoLmFicyhubiksWGk9bm48MD8iLSI6'@;
put 'IiI7aWYoWnQubWF0Y2goL14wMCskLykpcmV0dXJuIFhpK1EobmksWnQubGVuZ3RoKTtpZihadC5tYXRjaCgvXlsjP10rJC8pKXJldHVybiB6bj0iIitubiwwPT09bm4mJih6bj0iIiksem4ubGVuZ3RoPlp0Lmxlbmd0aD96bjpEaShadC5zdWJzdHIoMCxadC5sZW5ndGgtem4ubGVuZ3RoKSkr'@;
put 'em47aWYoeXI9WnQubWF0Y2goT2kpKXJldHVybiBmdW5jdGlvbiBQaSh3bixadCxubil7cmV0dXJuIG5uKygwPT09WnQ/IiI6IiIrWnQpK0coIiAiLHduWzFdLmxlbmd0aCsyK3duWzRdLmxlbmd0aCl9KHlyLG5pLFhpKTtpZihadC5tYXRjaCgvXiMrMCskLykpcmV0dXJuIFhpK1EobmksWnQu'@;
put 'bGVuZ3RoLVp0LmluZGV4T2YoIjAiKSk7aWYoeXI9WnQubWF0Y2goV28pKXJldHVybiB6bj0oem49KCIiK25uKS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitEaSh5clsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK0RpKHlyWzFdKSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihUYSxN'@;
put 'cyl7cmV0dXJuIi4iK01zK0coIjAiLERpKHlyWzFdKS5sZW5ndGgtTXMubGVuZ3RoKX0pLC0xIT09WnQuaW5kZXhPZigiMC4iKT96bjp6bi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFp0PVp0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIikseXI9WnQubWF0Y2goL14oMCopXC4oIyopJC8pKXJl'@;
put 'dHVybiBYaSsoIiIrbmkpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLHlyWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYoeXI9WnQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIFhpK1BvKCIi'@;
put 'K25pKTtpZih5cj1adC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gbm48MD8iLSIra24od24sWnQsLW5uKTpQbygiIitubikrIi4iK0coIjAiLHlyWzFdLmxlbmd0aCk7aWYoeXI9WnQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIGtuKHduLFp0LnJlcGxhY2UoL14jLCMqLC8s'@;
put 'IiIpLG5uKTtpZih5cj1adC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gem49ayhrbih3bixadC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxubikpLFdyPTAsayhrKFp0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oVGEpe3JldHVybiBX'@;
put 'cjx6bi5sZW5ndGg/em4uY2hhckF0KFdyKyspOiIwIj09PVRhPyIwIjoiIn0pKTtpZihadC5tYXRjaChtbykpcmV0dXJuIigiKyh6bj1rbih3biwiIyMjIyMjIyMjIyIsbm4pKS5zdWJzdHIoMCwzKSsiKSAiK3puLnN1YnN0cigzLDMpKyItIit6bi5zdWJzdHIoNik7dmFyIFVpPSIiO2lmKHly'@;
put 'PVp0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gV3I9TWF0aC5taW4oeXJbNF0ubGVuZ3RoLDcpLGFpPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCExKSx6bj0iIitYaSwiICI9PShVaT1oYSgibiIseXJbMV0sYWlbMV0pKS5jaGFyQXQoVWkubGVuZ3RoLTEp'@;
put 'JiYoVWk9VWkuc3Vic3RyKDAsVWkubGVuZ3RoLTEpKyIwIiksem4rPVVpK3lyWzJdKyIvIit5clszXSwoVWk9Z2UoYWlbMl0sV3IpKS5sZW5ndGg8eXJbNF0ubGVuZ3RoJiYoVWk9RGkoeXJbNF0uc3Vic3RyKHlyWzRdLmxlbmd0aC1VaS5sZW5ndGgpKStVaSksem4rPVVpO2lmKHlyPVp0Lm1h'@;
put 'dGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiBXcj1NYXRoLm1pbihNYXRoLm1heCh5clsxXS5sZW5ndGgseXJbNF0ubGVuZ3RoKSw3KSxYaSsoKGFpPUt0KG5pLE1hdGgucG93KDEwLFdyKS0xLCEwKSlbMF18fChhaVsxXT8iIjoiMCIpKSsiICIrKGFpWzFdP2Fl'@;
put 'KGFpWzFdLFdyKSt5clsyXSsiLyIreXJbM10rZ2UoYWlbMl0sV3IpOkcoIiAiLDIqV3IrMSt5clsyXS5sZW5ndGgreXJbM10ubGVuZ3RoKSk7aWYoeXI9WnQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIFp0Lmxlbmd0aDw9KHpuPSIiK25uKS5sZW5ndGg/em46RGkoWnQuc3Vic3RyKDAsWnQu'@;
put 'bGVuZ3RoLXpuLmxlbmd0aCkpK3puO2lmKHlyPVp0Lm1hdGNoKC9eKFsjMF0rKVwuKFsjMF0rKSQvKSl7em49IiIrbm4udG9GaXhlZChNYXRoLm1pbih5clsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLFdyPXpuLmluZGV4T2YoIi4iKTt2YXIgcmE9WnQuaW5kZXhP'@;
put 'ZigiLiIpLVdyLHpvPVp0Lmxlbmd0aC16bi5sZW5ndGgtcmE7cmV0dXJuIERpKFp0LnN1YnN0cigwLHJhKSt6bitadC5zdWJzdHIoWnQubGVuZ3RoLXpvKSl9aWYoeXI9WnQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBubjwwPyItIitrbih3bixadCwtbm4pOlBvKCIiK25u'@;
put 'KS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQmIikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKFRhKXtyZXR1cm4iMDAsIisoVGEubGVuZ3RoPDM/USgwLDMtVGEubGVuZ3RoKToiIikrVGF9KSsiLiIrUSgwLHlyWzFdLmxlbmd0aCk7dmFyIGJvPVBvKCIiK25pKTtzd2l0Y2goWnQpe2Nhc2Ui'@;
put 'IyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnJldHVybiIwIiE9PWJvP1hpK2JvOiIiO2Nhc2UiIywjMDAiOnJldHVybiIwMCIhPT0oYm89UShibywyKSk/WGkrYm86IiI7ZGVmYXVsdDppZihadC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIGtuKHduLFp0LnNsaWNlKDAsWnQu'@;
put 'bGFzdEluZGV4T2YoIi4iKSksbm4pK0RpKFp0LnNsaWNlKFp0Lmxhc3RJbmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitadCsifCIpfXJldHVybiBmdW5jdGlvbihadCxubix4bil7cmV0dXJuIjAsMCI9PW5uJiYobm49IiMsIzAwIiksKDB8eG4p'@;
put 'PT09eG4/a24oWnQsbm4seG4pOkVsKFp0LG5uLHhuKX19KCk7ZnVuY3Rpb24gSm8obG4pe2Zvcih2YXIgRW49W10sVW49ITEsU2k9MCxhcj0wO1NpPGxuLmxlbmd0aDsrK1NpKXN3aXRjaChsbi5jaGFyQ29kZUF0KFNpKSl7Y2FzZSAzNDpVbj0hVW47YnJlYWs7Y2FzZSA5NTpjYXNlIDQyOmNh'@;
put 'c2UgOTI6KytTaTticmVhaztjYXNlIDU5OkVuW0VuLmxlbmd0aF09bG4uc3Vic3RyKGFyLFNpLWFyKSxhcj1TaSsxfWlmKEVuW0VuLmxlbmd0aF09bG4uc3Vic3RyKGFyKSwhMD09PVVuKXRocm93IG5ldyBFcnJvcigiRm9ybWF0IHwiK2xuKyJ8IHVudGVybWluYXRlZCBzdHJpbmcgIik7cmV0'@;
put 'dXJuIEVufVIuX3NwbGl0PUpvO3ZhciBCaT0vXFtbSGhNbVNzXHUwRTBBXHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gSXMobG4pe2Zvcih2YXIgRW49MCxVbj0iIixTaT0iIjtFbjxsbi5sZW5ndGg7KXN3aXRjaChVbj1sbi5jaGFyQXQoRW4pKXtjYXNlIkciOlllKGxuLEVuKSYmKEVuKz02'@;
put 'KSxFbisrO2JyZWFrO2Nhc2UnIic6Zm9yKDszNCE9PWxuLmNoYXJDb2RlQXQoKytFbikmJkVuPGxuLmxlbmd0aDspOysrRW47YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjpFbis9MjticmVhaztjYXNlIkAiOisrRW47YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PWxuLmNoYXJBdChFbisx'@;
put 'KXx8IjIiPT09bG4uY2hhckF0KEVuKzEpKXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNh'@;
put 'c2UiXHU0ZTBhIjppZigiQS9QIj09PWxuLnN1YnN0cihFbiwzKS50b1VwcGVyQ2FzZSgpfHwiQU0vUE0iPT09bG4uc3Vic3RyKEVuLDUpLnRvVXBwZXJDYXNlKCl8fCJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PWxuLnN1YnN0cihFbiw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysr'@;
put 'RW47YnJlYWs7Y2FzZSJbIjpmb3IoU2k9VW47Il0iIT09bG4uY2hhckF0KEVuKyspJiZFbjxsbi5sZW5ndGg7KVNpKz1sbi5jaGFyQXQoRW4pO2lmKFNpLm1hdGNoKEJpKSlyZXR1cm4hMDticmVhaztjYXNlIi4iOmNhc2UiMCI6Y2FzZSIjIjpmb3IoO0VuPGxuLmxlbmd0aCYmKCIwIz8uLEUr'@;
put 'LSUiLmluZGV4T2YoVW49bG4uY2hhckF0KCsrRW4pKT4tMXx8IlxcIj09VW4mJiItIj09bG4uY2hhckF0KEVuKzEpJiYiMCMiLmluZGV4T2YobG4uY2hhckF0KEVuKzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7bG4uY2hhckF0KCsrRW4pPT09VW47KTticmVhaztjYXNlIioiOisrRW4s'@;
put 'KCIgIj09bG4uY2hhckF0KEVuKXx8IioiPT1sbi5jaGFyQXQoRW4pKSYmKytFbjticmVhaztjYXNlIigiOmNhc2UiKSI6KytFbjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoO0VuPGxuLmxl'@;
put 'bmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YobG4uY2hhckF0KCsrRW4pKT4tMTspO2JyZWFrO2RlZmF1bHQ6KytFbn1yZXR1cm4hMX1mdW5jdGlvbiBQbihsbixFbixVbixTaSl7Zm9yKHZhciBIaSxtbyxEaSxhcj1bXSxPaT0iIixTcj0wLFBpPSIiLFdvPSJ0Iixzcz0iSCI7U3I8bG4ubGVu'@;
put 'Z3RoOylzd2l0Y2goUGk9bG4uY2hhckF0KFNyKSl7Y2FzZSJHIjppZighWWUobG4sU3IpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK1BpKyIgaW4gIitsbik7YXJbYXIubGVuZ3RoXT17dDoiRyIsdjoiR2VuZXJhbCJ9LFNyKz03O2JyZWFrO2Nhc2UnIic6Zm9y'@;
put 'KE9pPSIiOzM0IT09KERpPWxuLmNoYXJDb2RlQXQoKytTcikpJiZTcjxsbi5sZW5ndGg7KU9pKz1TdHJpbmcuZnJvbUNoYXJDb2RlKERpKTthclthci5sZW5ndGhdPXt0OiJ0Iix2Ok9pfSwrK1NyO2JyZWFrO2Nhc2UiXFwiOnZhciBZYT1sbi5jaGFyQXQoKytTcik7YXJbYXIubGVuZ3RoXT17'@;
put 'dDoiKCI9PT1ZYXx8IikiPT09WWE/WWE6InQiLHY6WWF9LCsrU3I7YnJlYWs7Y2FzZSJfIjphclthci5sZW5ndGhdPXt0OiJ0Iix2OiIgIn0sU3IrPTI7YnJlYWs7Y2FzZSJAIjphclthci5sZW5ndGhdPXt0OiJUIix2OkVufSwrK1NyO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1s'@;
put 'bi5jaGFyQXQoU3IrMSl8fCIyIj09PWxuLmNoYXJBdChTcisxKSl7aWYobnVsbD09SGkmJm51bGw9PShIaT1UbihFbixVbiwiMiI9PT1sbi5jaGFyQXQoU3IrMSkpKSlyZXR1cm4iIjthclthci5sZW5ndGhdPXt0OiJYIix2OmxuLnN1YnN0cihTciwyKX0sV289UGksU3IrPTI7YnJlYWt9Y2Fz'@;
put 'ZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6UGk9UGkudG9Mb3dlckNhc2UoKTtjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2Ui'@;
put 'XHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2FzZSJcdTBlMTciOmlmKEVuPDB8fG51bGw9PUhpJiZudWxsPT0oSGk9VG4oRW4sVW4pKSlyZXR1cm4iIjtmb3IoT2k9UGk7KytTcjxsbi5sZW5ndGgmJmxuLmNoYXJBdChTcikudG9Mb3dlckNhc2UoKT09PVBpOylPaSs9UGk7Im0iPT09UGkmJiJoIj09'@;
put 'PVdvLnRvTG93ZXJDYXNlKCkmJihQaT0iTSIpLCJoIj09PVBpJiYoUGk9c3MpLGFyW2FyLmxlbmd0aF09e3Q6UGksdjpPaX0sV289UGk7YnJlYWs7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjp2YXIgeXU9e3Q6UGksdjpQaX07aWYobnVsbD09SGkmJihIaT1UbihFbixVbikpLCJBL1Ai'@;
put 'PT09bG4uc3Vic3RyKFNyLDMpLnRvVXBwZXJDYXNlKCk/KG51bGwhPUhpJiYoeXUudj1IaS5IPj0xMj8iUCI6IkEiKSx5dS50PSJUIixzcz0iaCIsU3IrPTMpOiJBTS9QTSI9PT1sbi5zdWJzdHIoU3IsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9SGkmJih5dS52PUhpLkg+PTEyPyJQTSI6IkFN'@;
put 'IikseXUudD0iVCIsU3IrPTUsc3M9ImgiKToiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT1sbi5zdWJzdHIoU3IsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9SGkmJih5dS52PUhpLkg+PTEyPyJcdTRlMGJcdTUzNDgiOiJcdTRlMGFcdTUzNDgiKSx5dS50PSJUIixTcis9NSxzcz0iaCIp'@;
put 'Oih5dS50PSJ0IiwrK1NyKSxudWxsPT1IaSYmIlQiPT09eXUudClyZXR1cm4iIjthclthci5sZW5ndGhdPXl1LFdvPVBpO2JyZWFrO2Nhc2UiWyI6Zm9yKE9pPVBpOyJdIiE9PWxuLmNoYXJBdChTcisrKSYmU3I8bG4ubGVuZ3RoOylPaSs9bG4uY2hhckF0KFNyKTtpZigiXSIhPT1PaS5zbGlj'@;
put 'ZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVkICJbIiBibG9jazogfCcrT2krInwiO2lmKE9pLm1hdGNoKEJpKSl7aWYobnVsbD09SGkmJm51bGw9PShIaT1UbihFbixVbikpKXJldHVybiIiO2FyW2FyLmxlbmd0aF09e3Q6IloiLHY6T2kudG9Mb3dlckNhc2UoKX0sV289T2kuY2hhckF0KDEpfWVs'@;
put 'c2UgT2kuaW5kZXhPZigiJCIpPi0xJiYoT2k9KE9pLm1hdGNoKC9cJChbXi1cW1xdXSopLyl8fFtdKVsxXXx8IiQiLElzKGxuKXx8KGFyW2FyLmxlbmd0aF09e3Q6InQiLHY6T2l9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1IaSl7Zm9yKE9pPVBpOysrU3I8bG4ubGVuZ3RoJiYiMCI9PT0o'@;
put 'UGk9bG4uY2hhckF0KFNyKSk7KU9pKz1QaTthclthci5sZW5ndGhdPXt0OiJzIix2Ok9pfTticmVha31jYXNlIjAiOmNhc2UiIyI6Zm9yKE9pPVBpOysrU3I8bG4ubGVuZ3RoJiYiMCM/LixFKy0lIi5pbmRleE9mKFBpPWxuLmNoYXJBdChTcikpPi0xOylPaSs9UGk7YXJbYXIubGVuZ3RoXT17'@;
put 'dDoibiIsdjpPaX07YnJlYWs7Y2FzZSI/Ijpmb3IoT2k9UGk7bG4uY2hhckF0KCsrU3IpPT09UGk7KU9pKz1QaTthclthci5sZW5ndGhdPXt0OlBpLHY6T2l9LFdvPVBpO2JyZWFrO2Nhc2UiKiI6KytTciwoIiAiPT1sbi5jaGFyQXQoU3IpfHwiKiI9PWxuLmNoYXJBdChTcikpJiYrK1NyO2Jy'@;
put 'ZWFrO2Nhc2UiKCI6Y2FzZSIpIjphclthci5sZW5ndGhdPXt0OjE9PT1TaT8idCI6UGksdjpQaX0sKytTcjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoT2k9UGk7U3I8bG4ubGVuZ3RoJiYi'@;
put 'MDEyMzQ1Njc4OSIuaW5kZXhPZihsbi5jaGFyQXQoKytTcikpPi0xOylPaSs9bG4uY2hhckF0KFNyKTthclthci5sZW5ndGhdPXt0OiJEIix2Ok9pfTticmVhaztjYXNlIiAiOmFyW2FyLmxlbmd0aF09e3Q6UGksdjpQaX0sKytTcjticmVhaztjYXNlIiQiOmFyW2FyLmxlbmd0aF09e3Q6InQi'@;
put 'LHY6Q2l9LCsrU3I7YnJlYWs7Y2FzZSIvIjphclthci5sZW5ndGhdPWFyLmxlbmd0aD4wJiZJcyhhclthci5sZW5ndGgtMV0udik/e3Q6InQiLHY6Tm59Ont0OiJ0Iix2OiIvIn0sKytTcjticmVhaztkZWZhdWx0OmlmKC0xPT09IiwkLSsvKCk6IV4mJ357fTw+PVx1MjBhY2FjZmlqa2xvcHFy'@;
put 'dHV2d3h6UCIuaW5kZXhPZihQaSkpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrUGkrIiBpbiAiK2xuKTthclthci5sZW5ndGhdPXt0OiJ0Iix2OlBpfSwrK1NyfXZhciBfZCxFbD0wLExmPTA7Zm9yKFNyPWFyLmxlbmd0aC0xLFdvPSJ0IjtTcj49MDstLVNyKXN3'@;
put 'aXRjaChhcltTcl0udCl7Y2FzZSJoIjpjYXNlIkgiOmFyW1NyXS50PXNzLFdvPSJoIixFbDwxJiYoRWw9MSk7YnJlYWs7Y2FzZSJzIjooX2Q9YXJbU3JdLnYubWF0Y2goL1wuMCskLykpJiYoTGY9TWF0aC5tYXgoTGYsX2RbMF0ubGVuZ3RoLTEpKSxFbDwzJiYoRWw9Myk7Y2FzZSJkIjpjYXNl'@;
put 'InkiOmNhc2UiTSI6Y2FzZSJlIjpXbz1hcltTcl0udDticmVhaztjYXNlIm0iOiJzIj09PVdvJiYoYXJbU3JdLnQ9Ik0iLEVsPDImJihFbD0yKSk7YnJlYWs7Y2FzZSJYIjpicmVhaztjYXNlIloiOkVsPDEmJmFyW1NyXS52Lm1hdGNoKC9bSGhdLykmJihFbD0xKSxFbDwyJiZhcltTcl0udi5t'@;
put 'YXRjaCgvW01tXS8pJiYoRWw9MiksRWw8MyYmYXJbU3JdLnYubWF0Y2goL1tTc10vKSYmKEVsPTMpfXN3aXRjaChFbCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTpIaS51Pj0uNSYmKEhpLnU9MCwrK0hpLlMpLEhpLlM+PTYwJiYoSGkuUz0wLCsrSGkuTSksSGkuTT49NjAmJihIaS5NPTAsKytIaS5I'@;
put 'KTticmVhaztjYXNlIDI6SGkudT49LjUmJihIaS51PTAsKytIaS5TKSxIaS5TPj02MCYmKEhpLlM9MCwrK0hpLk0pfXZhciBrbixnbj0iIjtmb3IoU3I9MDtTcjxhci5sZW5ndGg7KytTcilzd2l0Y2goYXJbU3JdLnQpe2Nhc2UidCI6Y2FzZSJUIjpjYXNlIiAiOmNhc2UiRCI6YnJlYWs7Y2Fz'@;
put 'ZSJYIjphcltTcl0udj0iIixhcltTcl0udD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUw'@;
put 'YSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3IjphcltTcl0udj1MYShhcltTcl0udC5jaGFyQ29kZUF0KDApLGFyW1NyXS52LEhpLExmKSxhcltTcl0udD0idCI7YnJlYWs7Y2FzZSJuIjpjYXNlIj8iOmZvcihrbj1TcisxO251bGwhPWFyW2tuXSYmKCI/Ij09PShQaT1hcltrbl0udCl8fCJE'@;
put 'Ij09PVBpfHwoIiAiPT09UGl8fCJ0Ij09PVBpKSYmbnVsbCE9YXJba24rMV0mJigiPyI9PT1hcltrbisxXS50fHwidCI9PT1hcltrbisxXS50JiYiLyI9PT1hcltrbisxXS52KXx8IigiPT09YXJbU3JdLnQmJigiICI9PT1QaXx8Im4iPT09UGl8fCIpIj09PVBpKXx8InQiPT09UGkmJigiLyI9'@;
put 'PT1hcltrbl0udnx8IiAiPT09YXJba25dLnYmJm51bGwhPWFyW2tuKzFdJiYiPyI9PWFyW2tuKzFdLnQpKTspYXJbU3JdLnYrPWFyW2tuXS52LGFyW2tuXT17djoiIix0OiI7In0sKytrbjtnbis9YXJbU3JdLnYsU3I9a24tMTticmVhaztjYXNlIkciOmFyW1NyXS50PSJ0IixhcltTcl0udj13'@;
put 'byhFbixVbil9dmFyIFp0LG5uLHduPSIiO2lmKGduLmxlbmd0aD4wKXs0MD09Z24uY2hhckNvZGVBdCgwKT8oWnQ9RW48MCYmNDU9PT1nbi5jaGFyQ29kZUF0KDApPy1FbjpFbixubj1oYSgibiIsZ24sWnQpKToobm49aGEoIm4iLGduLFp0PUVuPDAmJlNpPjE/LUVuOkVuKSxadDwwJiZhclsw'@;
put 'XSYmInQiPT1hclswXS50JiYobm49bm4uc3Vic3RyKDEpLGFyWzBdLnY9Ii0iK2FyWzBdLnYpKSxrbj0obm49bm4ucmVwbGFjZSgvWyxcLl0vZyxmdW5jdGlvbihXcil7cmV0dXJuIi4iPT1Xcj9rcjpMaX0pKS5sZW5ndGgtMTt2YXIgeG49YXIubGVuZ3RoO2ZvcihTcj0wO1NyPGFyLmxlbmd0'@;
put 'aDsrK1NyKWlmKG51bGwhPWFyW1NyXSYmInQiIT1hcltTcl0udCYmYXJbU3JdLnYuaW5kZXhPZigiLiIpPi0xKXt4bj1TcjticmVha312YXIgem49YXIubGVuZ3RoO2lmKHhuPT09YXIubGVuZ3RoJiYtMT09PW5uLmluZGV4T2YoIkUiKSl7Zm9yKFNyPWFyLmxlbmd0aC0xO1NyPj0wOy0tU3Ip'@;
put 'bnVsbD09YXJbU3JdfHwtMT09PSJuPyIuaW5kZXhPZihhcltTcl0udCl8fChrbj49YXJbU3JdLnYubGVuZ3RoLTE/YXJbU3JdLnY9bm4uc3Vic3RyKDErKGtuLT1hcltTcl0udi5sZW5ndGgpLGFyW1NyXS52Lmxlbmd0aCk6a248MD9hcltTcl0udj0iIjooYXJbU3JdLnY9bm4uc3Vic3RyKDAs'@;
put 'a24rMSksa249LTEpLGFyW1NyXS50PSJ0Iix6bj1Tcik7a24+PTAmJnpuPGFyLmxlbmd0aCYmKGFyW3puXS52PW5uLnN1YnN0cigwLGtuKzEpK2FyW3puXS52KX1lbHNlIGlmKHhuIT09YXIubGVuZ3RoJiYtMT09PW5uLmluZGV4T2YoIkUiKSl7Zm9yKGtuPW5uLmluZGV4T2Yoa3IpLTEsU3I9'@;
put 'eG47U3I+PTA7LS1TcilpZihudWxsIT1hcltTcl0mJi0xIT09Im4/Ii5pbmRleE9mKGFyW1NyXS50KSl7Zm9yKG1vPWFyW1NyXS52LmluZGV4T2YoIi4iKT4tMSYmU3I9PT14bj9hcltTcl0udi5pbmRleE9mKCIuIiktMTphcltTcl0udi5sZW5ndGgtMSx3bj1hcltTcl0udi5zdWJzdHIobW8r'@;
put 'MSk7bW8+PTA7LS1tbylrbj49MCYmKCIwIj09PWFyW1NyXS52LmNoYXJBdChtbyl8fCIjIj09PWFyW1NyXS52LmNoYXJBdChtbykpJiYod249bm4uY2hhckF0KGtuLS0pK3duKTthcltTcl0udj13bixhcltTcl0udD0idCIsem49U3J9Zm9yKGtuPj0wJiZ6bjxhci5sZW5ndGgmJihhclt6bl0u'@;
put 'dj1ubi5zdWJzdHIoMCxrbisxKSthclt6bl0udiksa249bm4uaW5kZXhPZihrcikrMSxTcj14bjtTcjxhci5sZW5ndGg7KytTcilpZihudWxsIT1hcltTcl0mJigtMSE9PSJuPygiLmluZGV4T2YoYXJbU3JdLnQpfHxTcj09PXhuKSl7Zm9yKG1vPWFyW1NyXS52LmluZGV4T2Yoa3IpPi0xJiZT'@;
put 'cj09PXhuP2FyW1NyXS52LmluZGV4T2Yoa3IpKzE6MCx3bj1hcltTcl0udi5zdWJzdHIoMCxtbyk7bW88YXJbU3JdLnYubGVuZ3RoOysrbW8pa248bm4ubGVuZ3RoJiYod24rPW5uLmNoYXJBdChrbisrKSk7YXJbU3JdLnY9d24sYXJbU3JdLnQ9InQiLHpuPVNyfX19Zm9yKFNyPTA7U3I8YXIu'@;
put 'bGVuZ3RoOysrU3IpbnVsbCE9YXJbU3JdJiYibj8iLmluZGV4T2YoYXJbU3JdLnQpPi0xJiYoYXJbU3JdLnY9aGEoYXJbU3JdLnQsYXJbU3JdLnYsWnQ9U2k+MSYmRW48MCYmU3I+MCYmIi0iPT09YXJbU3ItMV0udj8tRW46RW4pLnJlcGxhY2UoL1wuL2csa3IpLnJlcGxhY2UoLywvLExpKSxh'@;
put 'cltTcl0udD0idCIpO3ZhciB5cj0iIjtmb3IoU3I9MDtTciE9PWFyLmxlbmd0aDsrK1NyKW51bGwhPWFyW1NyXSYmKHlyKz1hcltTcl0udik7cmV0dXJuIHlyfVIuaXNfZGF0ZT1JcyxSLl9ldmFsPVBuO3ZhciBmcj0vXFtbPTw+XS8sWGw9L1xbKD18Pls9XT98PFs+PV0/KSgtP1xkKyg/Olwu'@;
put 'XGQqKT8pXF0vO2Z1bmN0aW9uIFdsKGxuLEVuKXtpZihudWxsPT1FbilyZXR1cm4hMTt2YXIgVW49cGFyc2VGbG9hdChFblsyXSk7c3dpdGNoKEVuWzFdKXtjYXNlIj0iOmlmKGxuPT1VbilyZXR1cm4hMDticmVhaztjYXNlIj4iOmlmKGxuPlVuKXJldHVybiEwO2JyZWFrO2Nhc2UiPCI6aWYo'@;
put 'bG48VW4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PiI6aWYobG4hPVVuKXJldHVybiEwO2JyZWFrO2Nhc2UiPj0iOmlmKGxuPj1VbilyZXR1cm4hMDticmVhaztjYXNlIjw9IjppZihsbjw9VW4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gYnUobG4sRW4sVW4pe251bGw9PVVuJiYoVW49e30p'@;
put 'O3ZhciBTaT0iIjtzd2l0Y2godHlwZW9mIGxuKXtjYXNlInN0cmluZyI6U2k9Im0vZC95eSI9PWxuJiZVbi5kYXRlTkY/VW4uZGF0ZU5GOmxuO2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oU2k9MTQ9PWxuJiZVbi5kYXRlTkY/VW4uZGF0ZU5GOihudWxsIT1Vbi50YWJsZT9Vbi50YWJsZTpi'@;
put 'dClbbG5dKSYmKFNpPVVuLnRhYmxlJiZVbi50YWJsZVtqdFtsbl1dfHxidFtqdFtsbl1dKSxudWxsPT1TaSYmKFNpPU90W2xuXXx8IkdlbmVyYWwiKX1pZihZZShTaSwwKSlyZXR1cm4gd28oRW4sVW4pO0VuIGluc3RhbmNlb2YgRGF0ZSYmKEVuPVhuKEVuLFVuLmRhdGUxOTA0KSk7dmFyIGFy'@;
put 'PWZ1bmN0aW9uIFlsKGxuLEVuKXt2YXIgVW49Sm8obG4pLFNpPVVuLmxlbmd0aCxhcj1VbltTaS0xXS5pbmRleE9mKCJAIik7aWYoU2k8NCYmYXI+LTEmJi0tU2ksVW4ubGVuZ3RoPjQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZmluZCByaWdodCBmb3JtYXQgZm9yIHwiK1VuLmpvaW4oInwi'@;
put 'KSsifCIpO2lmKCJudW1iZXIiIT10eXBlb2YgRW4pcmV0dXJuWzQsND09PVVuLmxlbmd0aHx8YXI+LTE/VW5bVW4ubGVuZ3RoLTFdOiJAIl07c3dpdGNoKFVuLmxlbmd0aCl7Y2FzZSAxOlVuPWFyPi0xP1siR2VuZXJhbCIsIkdlbmVyYWwiLCJHZW5lcmFsIixVblswXV06W1VuWzBdLFVuWzBd'@;
put 'LFVuWzBdLCJAIl07YnJlYWs7Y2FzZSAyOlVuPWFyPi0xP1tVblswXSxVblswXSxVblswXSxVblsxXV06W1VuWzBdLFVuWzFdLFVuWzBdLCJAIl07YnJlYWs7Y2FzZSAzOlVuPWFyPi0xP1tVblswXSxVblsxXSxVblswXSxVblsyXV06W1VuWzBdLFVuWzFdLFVuWzJdLCJAIl19dmFyIE9pPUVu'@;
put 'PjA/VW5bMF06RW48MD9VblsxXTpVblsyXTtpZigtMT09PVVuWzBdLmluZGV4T2YoIlsiKSYmLTE9PT1VblsxXS5pbmRleE9mKCJbIikpcmV0dXJuW1NpLE9pXTtpZihudWxsIT1VblswXS5tYXRjaChmcil8fG51bGwhPVVuWzFdLm1hdGNoKGZyKSl7dmFyIFNyPVVuWzBdLm1hdGNoKFhsKSxQ'@;
put 'aT1VblsxXS5tYXRjaChYbCk7cmV0dXJuIFdsKEVuLFNyKT9bU2ksVW5bMF1dOldsKEVuLFBpKT9bU2ksVW5bMV1dOltTaSxVbltudWxsIT1TciYmbnVsbCE9UGk/MjoxXV19cmV0dXJuW1NpLE9pXX0oU2ksRW4pO2lmKFllKGFyWzFdKSlyZXR1cm4gd28oRW4sVW4pO2lmKCEwPT09RW4pRW49'@;
put 'IlRSVUUiO2Vsc2UgaWYoITE9PT1FbilFbj0iRkFMU0UiO2Vsc2UgaWYoIiI9PT1Fbnx8bnVsbD09RW4pcmV0dXJuIiI7cmV0dXJuIFBuKGFyWzFdLEVuLFVuLGFyWzBdKX1mdW5jdGlvbiBNbChsbixFbil7aWYoIm51bWJlciIhPXR5cGVvZiBFbil7RW49K0VufHwtMTtmb3IodmFyIFVuPTA7'@;
put 'VW48MzkyOysrVW4paWYobnVsbCE9YnRbVW5dKXtpZihidFtVbl09PWxuKXtFbj1VbjticmVha319ZWxzZSBFbjwwJiYoRW49VW4pO0VuPDAmJihFbj0zOTEpfXJldHVybiBidFtFbl09bG4sRW59Ui5sb2FkPU1sLFIuX3RhYmxlPWJ0LFIuZ2V0X3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIGJ0'@;
put 'fSxSLmxvYWRfdGFibGU9ZnVuY3Rpb24oRW4pe2Zvcih2YXIgVW49MDszOTIhPVVuOysrVW4pdm9pZCAwIT09RW5bVW5dJiZNbChFbltVbl0sVW4pfSxSLmluaXRfdGFibGU9b3QsUi5mb3JtYXQ9YnUsUi5nZXRsb2NhbGU9ZnVuY3Rpb24gQnIoKXtyZXR1cm4gVm58fCJlbi1VUyJ9LFIuc2V0'@;
put 'bG9jYWxlPWZ1bmN0aW9uIF9yKGxuKXtpZihmdW5jdGlvbiBqcihsbil7dmFyIEVuPTA7c3dpdGNoKChWbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiemgtdHciOmNhc2UiemgtY24iOmNhc2UiamEtanAiOmNhc2Uia28ta3IiOmZvcihFbj0yNztFbjw9MzY7KytFbilkZWxldGUgbG5bRW5d'@;
put 'O2ZvcihFbj01MDtFbjw9NTg7KytFbilkZWxldGUgbG5bRW5dO2JyZWFrO2Nhc2UidGgtdGgiOmZvcihFbj01OTtFbjw9NjI7KytFbilkZWxldGUgbG5bRW5dO2ZvcihFbj02NztFbjw9ODE7KytFbilkZWxldGUgbG5bRW5dfX0oYnQpLFZuPWxuLEZuKGJ0KSx0eXBlb2YgSW50bDwidSIpe3Zh'@;
put 'ciBFbj1JbnRsLkRhdGVUaW1lRm9ybWF0KGxuKTtpZihFbi5mb3JtYXRUb1BhcnRzKXtmb3IodmFyIFVuPUVuLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUsMCwwLDApKSxTaT0wO1NpPDc7KytTaSljdFtTaV1bMV09SW50bC5EYXRlVGltZUZvcm1hdChsbix7d2Vla2RheToibG9u'@;
put 'ZyJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1K1NpLDAsMCwwKSlbMF0udmFsdWUsY3RbU2ldWzBdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se3dlZWtkYXk6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUrU2ksMCwwLDApKVswXS52YWx1ZTtmb3Io'@;
put 'dmFyIGFyPTA7YXI8MTI7KythcilFdFthcl1bMl09SW50bC5EYXRlVGltZUZvcm1hdChsbix7bW9udGg6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLGFyLDIsMCwwLDApKVswXS52YWx1ZSxFdFthcl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChsbix7bW9udGg6InNob3J0'@;
put 'In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxhciwyLDAsMCwwKSlbMF0udmFsdWUsRXRbYXJdWzBdPUV0W2FyXVsxXS5zbGljZSgwLDEpO2Zvcih2YXIgT2k9IiIsU3I9MDtTcjxVbi5sZW5ndGg7KytTcil7dmFyIFBpPVVuW1NyXS52YWx1ZTtzd2l0Y2goVW5bU3JdLnR5cGUpe2Nh'@;
put 'c2UieWVhciI6T2krPTI9PVBpLmxlbmd0aD8ieXkiOiJ5eXl5IjticmVhaztjYXNlIm1vbnRoIjpPaSs9IjEiPT1QaT8ibSI6IjAxIj09UGk/Im1tIjpQaT09RXRbMF1bMV0/Im1tbSI6UGk9PUV0WzBdWzJdPyJtbW1tIjpQaT09RXRbMF1bMF0/Im1tbW1tIjoibW0iO2JyZWFrO2Nhc2UiZGF5'@;
put 'IjpPaSs9IjUiPT1QaT8iZCI6IjA1Ij09UGk/ImRkIjpQaT09Y3RbMF1bMF0/ImRkZCI6UGk9PWN0WzBdWzFdPyJkZGRkIjoiZGQiO2JyZWFrO2Nhc2UibGl0ZXJhbCI6T2krPVBpLnJlcGxhY2UoLy4vZywiXFwkJiIpLDE9PVBpLmxlbmd0aCYmKE5uPVBpKX19KGxuLm1hdGNoKC9lbi9pKSYm'@;
put 'bG4ubWF0Y2goL3VzL2kpfHwhbG4pJiYoT2k9Im0vZC95eSIpLGJ0WzE0XT1PaX1lbHNlImphLWpwIj09bG4udG9Mb3dlckNhc2UoKSYmKGJ0WzE0XT0ieXl5eVxcL21cXC9kIik7dmFyIFdvPUludGwuTnVtYmVyRm9ybWF0KGxuLHt9KS5mb3JtYXQoMTIzNDU2Ny44OSk7V28mJihMaT0oV28u'@;
put 'bWF0Y2goLzEoLiopMi8pfHxbXSlbMV0sa3I9KFdvLm1hdGNoKC83KC4qKTgvKXx8W10pWzFdKX1ocltsbi50b0xvd2VyQ2FzZSgpXXx8KGhyW2xuLnRvTG93ZXJDYXNlKCldPXsiLiI6a3IsIiwiOkxpfSksZXI9ZXQoYnI9aHJbbG4udG9Mb3dlckNhc2UoKV18fGhyWyJlbi11cyJdKX0sUi5u'@;
put 'b3JtYWxpemU9ZnVuY3Rpb24gV2EobG4pe2Zvcih2YXIgRW49MCxVbj0wLFNpPSIiLGFyPSIiLE9pPSIiLFNyPWJyLnl8fCJ5IixQaT1Tci50b1VwcGVyQ2FzZSgpLFdvPWJyLmR8fCJkIixIaT1Xby50b1VwcGVyQ2FzZSgpLG1vPWJyWyIuIl0sRGk9YnJbIiwiXSxzcz0iMCM/RSstJSIrYnJb'@;
put 'IiwiXSttbztFbjxsbi5sZW5ndGg7KXN3aXRjaChTaT1sbi5jaGFyQXQoRW4pKXtjYXNlIkciOkVuKyssT2krPVNpO2JyZWFrO2Nhc2UnIic6Zm9yKE9pKz1TaTszNCE9PShVbj1sbi5jaGFyQ29kZUF0KCsrRW4pKSYmRW48bG4ubGVuZ3RoOylPaSs9U3RyaW5nLmZyb21DaGFyQ29kZShVbik7'@;
put 'T2krPSciJywrK0VuO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6T2krPWxuLnNsaWNlKEVuLEVuKzIpLEVuKz0yO2JyZWFrO2Nhc2UiQCI6T2krPVNpLCsrRW47YnJlYWs7Y2FzZSJCIjpjYXNlImIiOisrRW4sT2krPVNpO2JyZWFrO2Nhc2UgU3I6Y2FzZSBQaTpjYXNlIFdvOmNhc2UgSGk6T2kr'@;
put 'PWVyW1NpLnRvTG93ZXJDYXNlKCldLCsrRW47YnJlYWs7Y2FzZSJNIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJBIjpjYXNlImEiOk9pKz1TaSwrK0VuO2JyZWFrO2Nhc2UiWyI6Zm9yKGFyPVNpOyJdIiE9PWxu'@;
put 'LmNoYXJBdChFbisrKSYmRW48bG4ubGVuZ3RoOylhcis9bG4uY2hhckF0KEVuKTtPaSs9YXI7YnJlYWs7Y2FzZSBEaTpPaSs9JyInK1NpKyciJywrK0VuO2JyZWFrO2Nhc2UgbW86aWYoIShFbjxsbi5sZW5ndGgmJihzcy5pbmRleE9mKFNpPWxuLmNoYXJBdCgrK0VuKSk+LTF8fCJcXCI9PVNp'@;
put 'JiYiLSI9PWxuLmNoYXJBdChFbisxKSYmIjAjIi5pbmRleE9mKGxuLmNoYXJBdChFbisyKSk+LTEpKSl7T2krPSciJyttbysnIic7YnJlYWt9U2k9bW8sLS1FbjtjYXNlIjAiOmNhc2UiIyI6Zm9yKE9pKz1lcltTaS50b0xvd2VyQ2FzZSgpXXx8U2k7RW48bG4ubGVuZ3RoJiYoc3MuaW5kZXhP'@;
put 'ZihTaT1sbi5jaGFyQXQoKytFbikpPi0xfHwiXFwiPT1TaSYmIi0iPT1sbi5jaGFyQXQoRW4rMSkmJiIwIyIuaW5kZXhPZihsbi5jaGFyQXQoRW4rMikpPi0xKTspT2krPWVyW1NpLnRvTG93ZXJDYXNlKCldfHxTaTticmVhaztjYXNlIj8iOmZvcihPaSs9U2k7bG4uY2hhckF0KCsrRW4pPT09'@;
put 'U2k7KU9pKz1TaTticmVhaztjYXNlIioiOk9pKz1TaSwrK0VuLCgiICI9PWxuLmNoYXJBdChFbil8fCIqIj09bG4uY2hhckF0KEVuKSkmJihPaSs9bG4uY2hhckF0KEVuKSwrK0VuKTticmVhaztjYXNlIigiOmNhc2UiKSI6T2krPVNpLCsrRW47YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2Ui'@;
put 'MyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKE9pKz1TaTtFbjxsbi5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKGxuLmNoYXJBdCgrK0VuKSk+LTE7KU9pKz1sbi5jaGFyQXQoRW4pO2JyZWFrO2RlZmF1bHQ6T2krPVNpLCsrRW59cmV0'@;
put 'dXJuIE9pfSxSLmdldGN1cnJlbmN5PWZ1bmN0aW9uIHJvKCl7cmV0dXJuIEZpfHwiVVNEIn0sUi5zZXRjdXJyZW5jeT1mdW5jdGlvbiB1byhsbil7Rmk9bG4sQ2k9dHlwZW9mIEludGw8InUiP0ludGwuTnVtYmVyRm9ybWF0KFZuLHtzdHlsZToiY3VycmVuY3kiLGN1cnJlbmN5RGlzcGxheToi'@;
put 'c3ltYm9sIixjdXJyZW5jeTpsbn0pLmZvcm1hdCgwKS5yZXBsYWNlKC9bMFwuXCxcc10vZywiIik6IiQifX07b2UoQSk7dmFyIE1lLHRlPXsiR2VuZXJhbCBOdW1iZXIiOiJHZW5lcmFsIiwiR2VuZXJhbCBEYXRlIjpBLl90YWJsZVsyMl0sIkxvbmcgRGF0ZSI6ImRkZGQsIG1tbW0gZGQsIHl5'@;
put 'eXkiLCJNZWRpdW0gRGF0ZSI6QS5fdGFibGVbMTVdLCJTaG9ydCBEYXRlIjpBLl90YWJsZVsxNF0sIkxvbmcgVGltZSI6QS5fdGFibGVbMTldLCJNZWRpdW0gVGltZSI6QS5fdGFibGVbMThdLCJTaG9ydCBUaW1lIjpBLl90YWJsZVsyMF0sQ3VycmVuY3k6JyIkIiMsIyMwLjAwXyk7W1JlZF1c'@;
put 'XCgiJCIjLCMjMC4wMFxcKScsRml4ZWQ6QS5fdGFibGVbMl0sU3RhbmRhcmQ6QS5fdGFibGVbNF0sUGVyY2VudDpBLl90YWJsZVsxMF0sU2NpZW50aWZpYzpBLl90YWJsZVsxMV0sIlllcy9ObyI6JyJZZXMiOyJZZXMiOyJObyI7QCcsIlRydWUvRmFsc2UiOiciVHJ1ZSI7IlRydWUiOyJGYWxz'@;
put 'ZSI7QCcsIk9uL09mZiI6JyJZZXMiOyJZZXMiOyJObyI7QCd9LHNlPXs1OiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDc6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDg6JyIkIiMsIyMwLjAwXyk7W1JlZF1c'@;
put 'XCgiJCIjLCMjMC4wMFxcKScsMjM6IkdlbmVyYWwiLDI0OiJHZW5lcmFsIiwyNToiR2VuZXJhbCIsMjY6IkdlbmVyYWwiLDI3OiJtL2QveXkiLDI4OiJtL2QveXkiLDI5OiJtL2QveXkiLDMwOiJtL2QveXkiLDMxOiJtL2QveXkiLDMyOiJoOm1tOnNzIiwzMzoiaDptbTpzcyIsMzQ6Img6bW06'@;
put 'c3MiLDM1OiJoOm1tOnNzIiwzNjoibS9kL3l5Iiw0MTonXygqICMsIyMwXyk7XygqICgjLCMjMCk7XygqICItIl8pO18oQF8pJyw0MjonXygiJCIqICMsIyMwXyk7XygiJCIqICgjLCMjMCk7XygiJCIqICItIl8pO18oQF8pJyw0MzonXygqICMsIyMwLjAwXyk7XygqICgjLCMjMC4wMCk7Xygq'@;
put 'ICItIj8/Xyk7XyhAXyknLDQ0OidfKCIkIiogIywjIzAuMDBfKTtfKCIkIiogKCMsIyMwLjAwKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsNTA6Im0vZC95eSIsNTE6Im0vZC95eSIsNTI6Im0vZC95eSIsNTM6Im0vZC95eSIsNTQ6Im0vZC95eSIsNTU6Im0vZC95eSIsNTY6Im0vZC95eSIsNTc6'@;
put 'Im0vZC95eSIsNTg6Im0vZC95eSIsNTk6IjAiLDYwOiIwLjAwIiw2MToiIywjIzAiLDYyOiIjLCMjMC4wMCIsNjM6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY0OiciJCIjLCMjMF8pO1tSZWRdXFwoIiQiIywjIzBcXCknLDY1OiciJCIjLCMjMC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwp'@;
put 'Jyw2NjonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyw2NzoiMCUiLDY4OiIwLjAwJSIsNjk6IiMgPy8/Iiw3MDoiIyA/Py8/PyIsNzE6Im0vZC95eSIsNzI6Im0vZC95eSIsNzM6ImQtbW1tLXl5Iiw3NDoiZC1tbW0iLDc1OiJtbW0teXkiLDc2OiJoOm1tIiw3NzoiaDpt'@;
put 'bTpzcyIsNzg6Im0vZC95eSBoOm1tIiw3OToibW06c3MiLDgwOiJbaF06bW06c3MiLDgxOiJtbXNzLjAifSx3ZT0vW2REXSt8W21NXSt8W3lZZUVdK3xbSGhdK3xbU3NdKy9nOyFmdW5jdGlvbihTKXtTLnZlcnNpb249IjEuMi4wIjt2YXIgaz1mdW5jdGlvbiBSKCl7Zm9yKHZhciBwZT0wLHll'@;
put 'PW5ldyBBcnJheSgyNTYpLFBlPTA7MjU2IT1QZTsrK1BlKXllW1BlXT1wZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT0xJihwZT1QZSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4x'@;
put 'OnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjE7cmV0dXJuIHR5cGVvZiBJbnQzMkFycmF5PCJ1'@;
put 'Ij9uZXcgSW50MzJBcnJheSh5ZSk6eWV9KCk7Uy50YWJsZT1rLFMuYnN0cj1mdW5jdGlvbiBHKHBlLHllKXtmb3IodmFyIFBlPX55ZSxOZT1wZS5sZW5ndGgtMSxZZT0wO1llPE5lOylQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV5wZS5jaGFyQ29kZUF0KFllKyspKV0pPj4+OF5rWzI1NSYoUGVe'@;
put 'cGUuY2hhckNvZGVBdChZZSsrKSldO3JldHVybiBZZT09PU5lJiYoUGU9UGU+Pj44XmtbMjU1JihQZV5wZS5jaGFyQ29kZUF0KFllKSldKSx+UGV9LFMuYnVmPWZ1bmN0aW9uIFEocGUseWUpe2lmKHBlLmxlbmd0aD4xZTQpcmV0dXJuIGZ1bmN0aW9uIGFlKHBlLHllKXtmb3IodmFyIFBlPX55'@;
put 'ZSxOZT1wZS5sZW5ndGgtNyxZZT0wO1llPE5lOylQZT0oUGU9KFBlPShQZT0oUGU9KFBlPShQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSld'@;
put 'KT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV07Zm9yKDtZZTxOZSs3OylQZT1QZT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV07cmV0dXJuflBlfShwZSx5'@;
put 'ZSk7Zm9yKHZhciBQZT1+eWUsTmU9cGUubGVuZ3RoLTMsWWU9MDtZZTxOZTspUGU9KFBlPShQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSld'@;
put 'O2Zvcig7WWU8TmUrMzspUGU9UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO3JldHVybn5QZX0sUy5zdHI9ZnVuY3Rpb24gZ2UocGUseWUpe2Zvcih2YXIgZXQsY3QsUGU9fnllLE5lPTAsWWU9cGUubGVuZ3RoO05lPFllOykoZXQ9cGUuY2hhckNvZGVBdChOZSsrKSk8MTI4P1BlPVBlPj4+'@;
put 'OF5rWzI1NSYoUGVeZXQpXTpldDwyMDQ4P1BlPShQZT1QZT4+Pjhea1syNTUmKFBlXigxOTJ8ZXQ+PjYmMzEpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHw2MyZldCkpXTpldD49NTUyOTYmJmV0PDU3MzQ0PyhldD02NCsoMTAyMyZldCksY3Q9MTAyMyZwZS5jaGFyQ29kZUF0KE5lKyspLFBlPShQ'@;
put 'ZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVeKDI0MHxldD4+OCY3KSldKT4+Pjhea1syNTUmKFBlXigxMjh8ZXQ+PjImNjMpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHxjdD4+NiYxNXwoMyZldCk8PDQpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHw2MyZjdCkpXSk6UGU9KFBlPShQZT1QZT4+Pjhe'@;
put 'a1syNTUmKFBlXigyMjR8ZXQ+PjEyJjE1KSldKT4+Pjhea1syNTUmKFBlXigxMjh8ZXQ+PjYmNjMpKV0pPj4+OF5rWzI1NSYoUGVeKDEyOHw2MyZldCkpXTtyZXR1cm5+UGV9fShNZT17fSk7dmFyIFhlLHZlPWZ1bmN0aW9uKCl7dmFyIHllLFI9e307ZnVuY3Rpb24gRyhnbil7aWYoIi8iPT1n'@;
put 'bi5jaGFyQXQoZ24ubGVuZ3RoLTEpKXJldHVybi0xPT09Z24uc2xpY2UoMCwtMSkuaW5kZXhPZigiLyIpP2duOkcoZ24uc2xpY2UoMCwtMSkpO3ZhciBrbj1nbi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09a24/Z246Z24uc2xpY2UoMCxrbisxKX1mdW5jdGlvbiBRKGduKXtpZigiLyI9'@;
put 'PWduLmNoYXJBdChnbi5sZW5ndGgtMSkpcmV0dXJuIFEoZ24uc2xpY2UoMCwtMSkpO3ZhciBrbj1nbi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09a24/Z246Z24uc2xpY2Uoa24rMSl9ZnVuY3Rpb24gYWUoZ24sa24peyJzdHJpbmciPT10eXBlb2Yga24mJihrbj1uZXcgRGF0ZShrbikp'@;
put 'O3ZhciB3bj1rbi5nZXRIb3VycygpO3duPSh3bj13bjw8Nnxrbi5nZXRNaW51dGVzKCkpPDw1fGtuLmdldFNlY29uZHMoKT4+PjEsZ24ud3JpdGVfc2hpZnQoMix3bik7dmFyIFp0PWtuLmdldEZ1bGxZZWFyKCktMTk4MDtadD0oWnQ9WnQ8PDR8a24uZ2V0TW9udGgoKSsxKTw8NXxrbi5nZXRE'@;
put 'YXRlKCksZ24ud3JpdGVfc2hpZnQoMixadCl9ZnVuY3Rpb24gcGUoZ24pe21uKGduLDApO2Zvcih2YXIga249e30sd249MDtnbi5sPD1nbi5sZW5ndGgtNDspe3ZhciBadD1nbi5yZWFkX3NoaWZ0KDIpLG5uPWduLnJlYWRfc2hpZnQoMikseG49Z24ubCtubix6bj17fTsyMTU4OT09PVp0JiYo'@;
put 'MSYod249Z24ucmVhZF9zaGlmdCgxKSkmJih6bi5tdGltZT1nbi5yZWFkX3NoaWZ0KDQpKSxubj41JiYoMiZ3biYmKHpuLmF0aW1lPWduLnJlYWRfc2hpZnQoNCkpLDQmd24mJih6bi5jdGltZT1nbi5yZWFkX3NoaWZ0KDQpKSksem4ubXRpbWUmJih6bi5tdD1uZXcgRGF0ZSgxZTMqem4ubXRp'@;
put 'bWUpKSksZ24ubD14bixrbltadF09em59cmV0dXJuIGtufWZ1bmN0aW9uIFBlKCl7cmV0dXJuIHllfHwoeWU9Xyg4MzMzNykpfWZ1bmN0aW9uIE5lKGduLGtuKXtpZig4MD09Z25bMF0mJjc1PT1nblsxXSlyZXR1cm4gRGkoZ24sa24pO2lmKGduLmxlbmd0aDw1MTIpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJDRkIgZmlsZSBzaXplICIrZ24ubGVuZ3RoKyIgPCA1MTIiKTt2YXIgd24sbm4seG4sem4seXIsV3IsWnQ9NTEyLGFpPVtdLG5pPWduLnNsaWNlKDAsNTEyKTttbihuaSwwKTt2YXIgWGk9ZnVuY3Rpb24gWWUoZ24pe2lmKDgwPT1nbltnbi5sXSYmNzU9PWduW2duLmwrMV0pcmV0dXJuWzAs'@;
put 'MF07Z24uY2hrKENpLCJIZWFkZXIgU2lnbmF0dXJlOiAiKSxnbi5sKz0xNjt2YXIga249Z24ucmVhZF9zaGlmdCgyLCJ1Iik7cmV0dXJuW2duLnJlYWRfc2hpZnQoMiwidSIpLGtuXX0obmkpO3N3aXRjaCh3bj1YaVswXSl7Y2FzZSAzOlp0PTUxMjticmVhaztjYXNlIDQ6WnQ9NDA5NjticmVh'@;
put 'aztjYXNlIDA6aWYoMD09WGlbMV0pcmV0dXJuIERpKGduLGtuKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiTWFqb3IgVmVyc2lvbjogRXhwZWN0ZWQgMyBvciA0IHNhdyAiK3duKX01MTIhPT1adCYmbW4obmk9Z24uc2xpY2UoMCxadCksMjgpO3ZhciBVaT1nbi5zbGljZSgwLFp0KTshZnVu'@;
put 'Y3Rpb24gZXQoZ24sa24pe3ZhciB3bjtzd2l0Y2goZ24ubCs9Mix3bj1nbi5yZWFkX3NoaWZ0KDIpKXtjYXNlIDk6aWYoMyE9a24pdGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgc2F3ICIrd24pO2JyZWFrO2Nhc2UgMTI6aWYoNCE9a24pdGhyb3cgbmV3IEVycm9y'@;
put 'KCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDEyIHNhdyAiK3duKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IG9yIDEyIHNhdyAiK3duKX1nbi5jaGsoIjA2MDAiLCJNaW5pIFNlY3RvciBTaGlmdDogIiksZ24uY2hrKCIwMDAwMDAwMDAw'@;
put 'MDAiLCJSZXNlcnZlZDogIil9KG5pLHduKTt2YXIgcmE9bmkucmVhZF9zaGlmdCg0LCJpIik7aWYoMz09PXduJiYwIT09cmEpdGhyb3cgbmV3IEVycm9yKCIjIERpcmVjdG9yeSBTZWN0b3JzOiBFeHBlY3RlZCAwIHNhdyAiK3JhKTtuaS5sKz00LHpuPW5pLnJlYWRfc2hpZnQoNCwiaSIpLG5p'@;
put 'LmwrPTQsbmkuY2hrKCIwMDEwMDAwMCIsIk1pbmkgU3RyZWFtIEN1dG9mZiBTaXplOiAiKSx5cj1uaS5yZWFkX3NoaWZ0KDQsImkiKSxubj1uaS5yZWFkX3NoaWZ0KDQsImkiKSxXcj1uaS5yZWFkX3NoaWZ0KDQsImkiKSx4bj1uaS5yZWFkX3NoaWZ0KDQsImkiKTtmb3IodmFyIHpvPS0xLGJv'@;
put 'PTA7Ym88MTA5JiYhKCh6bz1uaS5yZWFkX3NoaWZ0KDQsImkiKSk8MCk7KytibylhaVtib109em87dmFyIFRhPWZ1bmN0aW9uIGN0KGduLGtuKXtmb3IodmFyIHduPU1hdGguY2VpbChnbi5sZW5ndGgva24pLTEsWnQ9W10sbm49MTtubjx3bjsrK25uKVp0W25uLTFdPWduLnNsaWNlKG5uKmtu'@;
put 'LChubisxKSprbik7cmV0dXJuIFp0W3duLTFdPWduLnNsaWNlKHduKmtuKSxadH0oZ24sWnQpO2J0KFdyLHhuLFRhLFp0LGFpKTt2YXIgTXM9ZnVuY3Rpb24ga3QoZ24sa24sd24sWnQpe3ZhciBubj1nbi5sZW5ndGgseG49W10sem49W10seXI9W10sV3I9W10sYWk9WnQtMSxuaT0wLFhpPTAs'@;
put 'VWk9MCxyYT0wO2ZvcihuaT0wO25pPG5uOysrbmkpaWYoeXI9W10sKFVpPW5pK2tuKT49bm4mJihVaS09bm4pLCF6bltVaV0pe1dyPVtdO3ZhciB6bz1bXTtmb3IoWGk9VWk7WGk+PTA7KXt6b1tYaV09ITAsem5bWGldPSEwLHlyW3lyLmxlbmd0aF09WGksV3IucHVzaChnbltYaV0pO3ZhciBi'@;
put 'bz13bltNYXRoLmZsb29yKDQqWGkvWnQpXTtpZihadDw0KyhyYT00KlhpJmFpKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK1hpKyIgNCAiK1p0KTtpZighZ25bYm9dfHx6b1tYaT1Wcyhnbltib10scmEpXSlicmVha314bltVaV09e25vZGVzOnlyLGRhdGE6YjAo'@;
put 'W1dyXSl9fXJldHVybiB4bn0oVGEsem4sYWksWnQpO01zW3puXS5uYW1lPSIhRGlyZWN0b3J5Iixubj4wJiZ5ciE9PWVyJiYoTXNbeXJdLm5hbWU9IiFNaW5pRkFUIiksTXNbYWlbMF1dLm5hbWU9IiFGQVQiLE1zLmZhdF9hZGRycz1haSxNcy5zc3o9WnQ7dmFyIGwwPVtdLG8xPVtdLFY4PVtd'@;
put 'OyhmdW5jdGlvbiBPdChnbixrbix3bixadCxubix4bix6bix5cil7Zm9yKHZhciByYSxXcj0wLGFpPVp0Lmxlbmd0aD8yOjAsbmk9a25bZ25dLmRhdGEsWGk9MCxVaT0wO1hpPG5pLmxlbmd0aDtYaSs9MTI4KXt2YXIgem89bmkuc2xpY2UoWGksWGkrMTI4KTttbih6byw2NCksVWk9em8ucmVh'@;
put 'ZF9zaGlmdCgyKSxyYT1PbCh6bywwLFVpLWFpKSxadC5wdXNoKHJhKTt2YXIgYm89e25hbWU6cmEsdHlwZTp6by5yZWFkX3NoaWZ0KDEpLGNvbG9yOnpvLnJlYWRfc2hpZnQoMSksTDp6by5yZWFkX3NoaWZ0KDQsImkiKSxSOnpvLnJlYWRfc2hpZnQoNCwiaSIpLEM6em8ucmVhZF9zaGlmdCg0'@;
put 'LCJpIiksY2xzaWQ6em8ucmVhZF9zaGlmdCgxNiksc3RhdGU6em8ucmVhZF9zaGlmdCg0LCJpIiksc3RhcnQ6MCxzaXplOjB9OzAhPT16by5yZWFkX3NoaWZ0KDIpK3pvLnJlYWRfc2hpZnQoMikrem8ucmVhZF9zaGlmdCgyKSt6by5yZWFkX3NoaWZ0KDIpJiYoYm8uY3Q9S3Qoem8sem8ubC04'@;
put 'KSksMCE9PXpvLnJlYWRfc2hpZnQoMikrem8ucmVhZF9zaGlmdCgyKSt6by5yZWFkX3NoaWZ0KDIpK3pvLnJlYWRfc2hpZnQoMikmJihiby5tdD1LdCh6byx6by5sLTgpKSxiby5zdGFydD16by5yZWFkX3NoaWZ0KDQsImkiKSxiby5zaXplPXpvLnJlYWRfc2hpZnQoNCwiaSIpLGJvLnNpemU8'@;
put 'MCYmYm8uc3RhcnQ8MCYmKGJvLnNpemU9Ym8udHlwZT0wLGJvLnN0YXJ0PWVyLGJvLm5hbWU9IiIpLDU9PT1iby50eXBlPyhXcj1iby5zdGFydCxubj4wJiZXciE9PWVyJiYoa25bV3JdLm5hbWU9IiFTdHJlYW1EYXRhIikpOmJvLnNpemU+PTQwOTY/KGJvLnN0b3JhZ2U9ImZhdCIsdm9pZCAw'@;
put 'PT09a25bYm8uc3RhcnRdJiYoa25bYm8uc3RhcnRdPWp0KHduLGJvLnN0YXJ0LGtuLmZhdF9hZGRycyxrbi5zc3opKSxrbltiby5zdGFydF0ubmFtZT1iby5uYW1lLGJvLmNvbnRlbnQ9a25bYm8uc3RhcnRdLmRhdGEuc2xpY2UoMCxiby5zaXplKSk6KGJvLnN0b3JhZ2U9Im1pbmlmYXQiLGJv'@;
put 'LnNpemU8MD9iby5zaXplPTA6V3IhPT1lciYmYm8uc3RhcnQhPT1lciYma25bV3JdJiYoYm8uY29udGVudD1vdChibyxrbltXcl0uZGF0YSwoa25beXJdfHx7fSkuZGF0YSkpKSxiby5jb250ZW50JiZtbihiby5jb250ZW50LDApLHhuW3JhXT1ibyx6bi5wdXNoKGJvKX19KSh6bixNcyxUYSxs'@;
put 'MCxubix7fSxvMSx5ciksZnVuY3Rpb24gRXQoZ24sa24sd24pe2Zvcih2YXIgWnQ9MCxubj0wLHhuPTAsem49MCx5cj0wLFdyPXduLmxlbmd0aCxhaT1bXSxuaT1bXTtadDxXcjsrK1p0KWFpW1p0XT1uaVtadF09WnQsa25bWnRdPXduW1p0XTtmb3IoO3lyPG5pLmxlbmd0aDsrK3lyKW5uPWdu'@;
put 'W1p0PW5pW3lyXV0uTCx4bj1nbltadF0uUix6bj1nbltadF0uQyxhaVtadF09PT1adCYmKC0xIT09bm4mJmFpW25uXSE9PW5uJiYoYWlbWnRdPWFpW25uXSksLTEhPT14biYmYWlbeG5dIT09eG4mJihhaVtadF09YWlbeG5dKSksLTEhPT16biYmKGFpW3puXT1adCksLTEhPT1ubiYmWnQhPWFp'@;
put 'W1p0XSYmKGFpW25uXT1haVtadF0sbmkubGFzdEluZGV4T2Yobm4pPHlyJiZuaS5wdXNoKG5uKSksLTEhPT14biYmWnQhPWFpW1p0XSYmKGFpW3huXT1haVtadF0sbmkubGFzdEluZGV4T2YoeG4pPHlyJiZuaS5wdXNoKHhuKSk7Zm9yKFp0PTE7WnQ8V3I7KytadClhaVtadF09PT1adCYmKC0x'@;
put 'IT09eG4mJmFpW3huXSE9PXhuP2FpW1p0XT1haVt4bl06LTEhPT1ubiYmYWlbbm5dIT09bm4mJihhaVtadF09YWlbbm5dKSk7Zm9yKFp0PTE7WnQ8V3I7KytadClpZigwIT09Z25bWnRdLnR5cGUpe2lmKCh5cj1adCkhPWFpW3lyXSlkb3trbltadF09a25beXI9YWlbeXJdXSsiLyIra25bWnRd'@;
put 'fXdoaWxlKDAhPT15ciYmLTEhPT1haVt5cl0mJnlyIT1haVt5cl0pO2FpW1p0XT0tMX1mb3Ioa25bMF0rPSIvIixadD0xO1p0PFdyOysrWnQpMiE9PWduW1p0XS50eXBlJiYoa25bWnRdKz0iLyIpfShvMSxWOCxsMCksbDAuc2hpZnQoKTt2YXIgcTU9e0ZpbGVJbmRleDpvMSxGdWxsUGF0aHM6'@;
put 'Vjh9O3JldHVybiBrbiYma24ucmF3JiYocTUucmF3PXtoZWFkZXI6VWksc2VjdG9yczpUYX0pLHE1fWZ1bmN0aW9uIG90KGduLGtuLHduKXtmb3IodmFyIG5uPWduLnNpemUseG49W10sem49Z24uc3RhcnQ7d24mJm5uPjAmJnpuPj0wOyl4bi5wdXNoKGtuLnNsaWNlKHpuKmJyLHpuKmJyK2Jy'@;
put 'KSksbm4tPWJyLHpuPVZzKHduLDQqem4pO3JldHVybiAwPT09eG4ubGVuZ3RoP2JuKDApOmooeG4pLnNsaWNlKDAsZ24uc2l6ZSl9ZnVuY3Rpb24gYnQoZ24sa24sd24sWnQsbm4pe3ZhciB4bj1lcjtpZihnbj09PWVyKXtpZigwIT09a24pdGhyb3cgbmV3IEVycm9yKCJESUZBVCBjaGFpbiBz'@;
put 'aG9ydGVyIHRoYW4gZXhwZWN0ZWQiKX1lbHNlIGlmKC0xIT09Z24pe3ZhciB6bj13bltnbl0seXI9KFp0Pj4+MiktMTtpZighem4pcmV0dXJuO2Zvcih2YXIgV3I9MDtXcjx5ciYmKHhuPVZzKHpuLDQqV3IpKSE9PWVyOysrV3Ipbm4ucHVzaCh4bik7YnQoVnMoem4sWnQtNCksa24tMSx3bixa'@;
put 'dCxubil9fWZ1bmN0aW9uIGp0KGduLGtuLHduLFp0LG5uKXt2YXIgeG49W10sem49W107bm58fChubj1bXSk7dmFyIHlyPVp0LTEsV3I9MCxhaT0wO2ZvcihXcj1rbjtXcj49MDspe25uW1dyXT0hMCx4blt4bi5sZW5ndGhdPVdyLHpuLnB1c2goZ25bV3JdKTt2YXIgbmk9d25bTWF0aC5mbG9v'@;
put 'cig0KldyL1p0KV07aWYoWnQ8NCsoYWk9NCpXciZ5cikpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitXcisiIDQgIitadCk7aWYoIWduW25pXSlicmVhaztXcj1WcyhnbltuaV0sYWkpfXJldHVybntub2Rlczp4bixkYXRhOmIwKFt6bl0pfX1mdW5jdGlvbiBLdChn'@;
put 'bixrbil7cmV0dXJuIG5ldyBEYXRlKDFlMyooemEoZ24sa24rNCkvMWU3Kk1hdGgucG93KDIsMzIpK3phKGduLGtuKS8xZTctMTE2NDQ0NzM2MDApKX1mdW5jdGlvbiBTbihnbixrbil7dmFyIHduPWtufHx7fSxadD13bi5yb290fHwiUm9vdCBFbnRyeSI7aWYoZ24uRnVsbFBhdGhzfHwoZ24u'@;
put 'RnVsbFBhdGhzPVtdKSxnbi5GaWxlSW5kZXh8fChnbi5GaWxlSW5kZXg9W10pLGduLkZ1bGxQYXRocy5sZW5ndGghPT1nbi5GaWxlSW5kZXgubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiaW5jb25zaXN0ZW50IENGQiBzdHJ1Y3R1cmUiKTswPT09Z24uRnVsbFBhdGhzLmxlbmd0aCYmKGduLkZ1'@;
put 'bGxQYXRoc1swXT1adCsiLyIsZ24uRmlsZUluZGV4WzBdPXtuYW1lOlp0LHR5cGU6NX0pLHduLkNMU0lEJiYoZ24uRmlsZUluZGV4WzBdLmNsc2lkPXduLkNMU0lEKSxmdW5jdGlvbiBscihnbil7dmFyIGtuPSJceDAxU2gzM3RKNSI7aWYoIXZlLmZpbmQoZ24sIi8iK2tuKSl7dmFyIHduPWJu'@;
put 'KDQpO3duWzBdPTU1LHduWzFdPXduWzNdPTUwLHduWzJdPTU0LGduLkZpbGVJbmRleC5wdXNoKHtuYW1lOmtuLHR5cGU6Mixjb250ZW50OnduLHNpemU6NCxMOjY5LFI6NjksQzo2OX0pLGduLkZ1bGxQYXRocy5wdXNoKGduLkZ1bGxQYXRoc1swXStrbiksWG4oZ24pfX0oZ24pfWZ1bmN0aW9u'@;
put 'IFhuKGduLGtuKXtTbihnbik7Zm9yKHZhciB3bj0hMSxadD0hMSxubj1nbi5GdWxsUGF0aHMubGVuZ3RoLTE7bm4+PTA7LS1ubil7dmFyIHhuPWduLkZpbGVJbmRleFtubl07c3dpdGNoKHhuLnR5cGUpe2Nhc2UgMDpadD93bj0hMDooZ24uRmlsZUluZGV4LnBvcCgpLGduLkZ1bGxQYXRocy5w'@;
put 'b3AoKSk7YnJlYWs7Y2FzZSAxOmNhc2UgMjpjYXNlIDU6WnQ9ITAsaXNOYU4oeG4uUip4bi5MKnhuLkMpJiYod249ITApLHhuLlI+LTEmJnhuLkw+LTEmJnhuLlI9PXhuLkwmJih3bj0hMCk7YnJlYWs7ZGVmYXVsdDp3bj0hMH19aWYod258fGtuKXt2YXIgem49bmV3IERhdGUoMTk4NywxLDE5'@;
put 'KSx5cj0wLFdyPVtdO2Zvcihubj0wO25uPGduLkZ1bGxQYXRocy5sZW5ndGg7KytubikwIT09Z24uRmlsZUluZGV4W25uXS50eXBlJiZXci5wdXNoKFtnbi5GdWxsUGF0aHNbbm5dLGduLkZpbGVJbmRleFtubl1dKTtmb3Iobm49MDtubjxXci5sZW5ndGg7Kytubil7dmFyIGFpPUcoV3Jbbm5d'@;
put 'WzBdKTtmb3IoWnQ9ITEseXI9MDt5cjxXci5sZW5ndGg7Kyt5cilXclt5cl1bMF09PT1haSYmKFp0PSEwKTtadHx8V3IucHVzaChbYWkse25hbWU6UShhaSkucmVwbGFjZSgiLyIsIiIpLHR5cGU6MSxjbHNpZDpybyxjdDp6bixtdDp6bixjb250ZW50Om51bGx9XSl9Zm9yKFdyLnNvcnQoZnVu'@;
put 'Y3Rpb24oVWkscmEpe3JldHVybiBmdW5jdGlvbiBrKGduLGtuKXtmb3IodmFyIHduPWduLnNwbGl0KCIvIiksWnQ9a24uc3BsaXQoIi8iKSxubj0wLHhuPTAsem49TWF0aC5taW4od24ubGVuZ3RoLFp0Lmxlbmd0aCk7bm48em47Kytubil7aWYoeG49d25bbm5dLmxlbmd0aC1adFtubl0ubGVu'@;
put 'Z3RoKXJldHVybiB4bjtpZih3bltubl0hPVp0W25uXSlyZXR1cm4gd25bbm5dPFp0W25uXT8tMToxfXJldHVybiB3bi5sZW5ndGgtWnQubGVuZ3RofShVaVswXSxyYVswXSl9KSxnbi5GdWxsUGF0aHM9W10sZ24uRmlsZUluZGV4PVtdLG5uPTA7bm48V3IubGVuZ3RoOysrbm4pZ24uRnVsbFBh'@;
put 'dGhzW25uXT1Xcltubl1bMF0sZ24uRmlsZUluZGV4W25uXT1Xcltubl1bMV07Zm9yKG5uPTA7bm48V3IubGVuZ3RoOysrbm4pe3ZhciBuaT1nbi5GaWxlSW5kZXhbbm5dLFhpPWduLkZ1bGxQYXRoc1tubl07aWYobmkubmFtZT1RKFhpKS5yZXBsYWNlKCIvIiwiIiksbmkuTD1uaS5SPW5pLkM9'@;
put 'LShuaS5jb2xvcj0xKSxuaS5zaXplPW5pLmNvbnRlbnQ/bmkuY29udGVudC5sZW5ndGg6MCxuaS5zdGFydD0wLG5pLmNsc2lkPW5pLmNsc2lkfHxybywwPT09bm4pbmkuQz1Xci5sZW5ndGg+MT8xOi0xLG5pLnNpemU9MCxuaS50eXBlPTU7ZWxzZSBpZigiLyI9PVhpLnNsaWNlKC0xKSl7Zm9y'@;
put 'KHlyPW5uKzE7eXI8V3IubGVuZ3RoJiZHKGduLkZ1bGxQYXRoc1t5cl0pIT1YaTsrK3lyKTtmb3IobmkuQz15cj49V3IubGVuZ3RoPy0xOnlyLHlyPW5uKzE7eXI8V3IubGVuZ3RoJiZHKGduLkZ1bGxQYXRoc1t5cl0pIT1HKFhpKTsrK3lyKTtuaS5SPXlyPj1Xci5sZW5ndGg/LTE6eXIsbmku'@;
put 'dHlwZT0xfWVsc2UgRyhnbi5GdWxsUGF0aHNbbm4rMV18fCIiKT09RyhYaSkmJihuaS5SPW5uKzEpLG5pLnR5cGU9Mn19fWZ1bmN0aW9uIFZuKGduLGtuKXt2YXIgd249a258fHt9O2lmKFhuKGduKSwiemlwIj09d24uZmlsZVR5cGUpcmV0dXJuIGZ1bmN0aW9uIFlhKGduLGtuKXt2YXIgd249'@;
put 'a258fHt9LFp0PVtdLG5uPVtdLHhuPWJuKDEpLHpuPXduLmNvbXByZXNzaW9uPzg6MCx5cj0wLGFpPTAsbmk9MCxYaT0wLFVpPTAscmE9Z24uRnVsbFBhdGhzWzBdLHpvPXJhLGJvPWduLkZpbGVJbmRleFswXSxUYT1bXSxNcz0wO2ZvcihhaT0xO2FpPGduLkZ1bGxQYXRocy5sZW5ndGg7Kyth'@;
put 'aSlpZih6bz1nbi5GdWxsUGF0aHNbYWldLnNsaWNlKHJhLmxlbmd0aCksKGJvPWduLkZpbGVJbmRleFthaV0pLnNpemUmJmJvLmNvbnRlbnQmJiJceDAxU2gzM3RKNSIhPXpvKXt2YXIgcjE9WGksbDA9Ym4oem8ubGVuZ3RoKTtmb3Iobmk9MDtuaTx6by5sZW5ndGg7KytuaSlsMC53cml0ZV9z'@;
put 'aGlmdCgxLDEyNyZ6by5jaGFyQ29kZUF0KG5pKSk7bDA9bDAuc2xpY2UoMCxsMC5sKSxUYVtVaV09TWUuYnVmKGJvLmNvbnRlbnQsMCk7dmFyIG8xPWJvLmNvbnRlbnQ7OD09em4mJihvMT1qcihvMSkpLCh4bj1ibigzMCkpLndyaXRlX3NoaWZ0KDQsNjczMjQ3NTIpLHhuLndyaXRlX3NoaWZ0'@;
put 'KDIsMjApLHhuLndyaXRlX3NoaWZ0KDIseXIpLHhuLndyaXRlX3NoaWZ0KDIsem4pLGJvLm10P2FlKHhuLGJvLm10KTp4bi53cml0ZV9zaGlmdCg0LDApLHhuLndyaXRlX3NoaWZ0KC00LDgmeXI/MDpUYVtVaV0pLHhuLndyaXRlX3NoaWZ0KDQsOCZ5cj8wOm8xLmxlbmd0aCkseG4ud3JpdGVf'@;
put 'c2hpZnQoNCw4JnlyPzA6Ym8uY29udGVudC5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDIsbDAubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLDApLFhpKz14bi5sZW5ndGgsWnQucHVzaCh4biksWGkrPWwwLmxlbmd0aCxadC5wdXNoKGwwKSxYaSs9bzEubGVuZ3RoLFp0LnB1c2gobzEpLDgmeXIm'@;
put 'JigoeG49Ym4oMTIpKS53cml0ZV9zaGlmdCgtNCxUYVtVaV0pLHhuLndyaXRlX3NoaWZ0KDQsbzEubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCg0LGJvLmNvbnRlbnQubGVuZ3RoKSxYaSs9eG4ubCxadC5wdXNoKHhuKSksKHhuPWJuKDQ2KSkud3JpdGVfc2hpZnQoNCwzMzYzOTI0OCkseG4ud3Jp'@;
put 'dGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLDIwKSx4bi53cml0ZV9zaGlmdCgyLHlyKSx4bi53cml0ZV9zaGlmdCgyLHpuKSx4bi53cml0ZV9zaGlmdCg0LDApLHhuLndyaXRlX3NoaWZ0KC00LFRhW1VpXSkseG4ud3JpdGVfc2hpZnQoNCxvMS5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0'@;
put 'KDQsYm8uY29udGVudC5sZW5ndGgpLHhuLndyaXRlX3NoaWZ0KDIsbDAubGVuZ3RoKSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMiwwKSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDQsMCkseG4ud3JpdGVfc2hpZnQo'@;
put 'NCxyMSksTXMrPXhuLmwsbm4ucHVzaCh4biksTXMrPWwwLmxlbmd0aCxubi5wdXNoKGwwKSwrK1VpfXJldHVybih4bj1ibigyMikpLndyaXRlX3NoaWZ0KDQsMTAxMDEwMjU2KSx4bi53cml0ZV9zaGlmdCgyLDApLHhuLndyaXRlX3NoaWZ0KDIsMCkseG4ud3JpdGVfc2hpZnQoMixVaSkseG4u'@;
put 'd3JpdGVfc2hpZnQoMixVaSkseG4ud3JpdGVfc2hpZnQoNCxNcykseG4ud3JpdGVfc2hpZnQoNCxYaSkseG4ud3JpdGVfc2hpZnQoMiwwKSxqKFtqKFp0KSxqKG5uKSx4bl0pfShnbix3bik7dmFyIFp0PWZ1bmN0aW9uKHJhKXtmb3IodmFyIHpvPTAsYm89MCxUYT0wO1RhPHJhLkZpbGVJbmRl'@;
put 'eC5sZW5ndGg7KytUYSl7dmFyIE1zPXJhLkZpbGVJbmRleFtUYV07aWYoTXMuY29udGVudCl7dmFyIHIxPU1zLmNvbnRlbnQubGVuZ3RoO3IxPjAmJihyMTw0MDk2P3pvKz1yMSs2Mz4+Njpibys9cjErNTExPj45KX19Zm9yKHZhciBsMD1yYS5GdWxsUGF0aHMubGVuZ3RoKzM+PjIsVjg9em8r'@;
put 'MTI3Pj43LHE1PSh6bys3Pj4zKStibytsMCtWOCxYNT1xNSsxMjc+PjcseGU9WDU8PTEwOT8wOk1hdGguY2VpbCgoWDUtMTA5KS8xMjcpO3E1K1g1K3hlKzEyNz4+Nz5YNTspeGU9KytYNTw9MTA5PzA6TWF0aC5jZWlsKChYNS0xMDkpLzEyNyk7dmFyIGZoPVsxLHhlLFg1LFY4LGwwLGJvLHpv'@;
put 'LDBdO3JldHVybiByYS5GaWxlSW5kZXhbMF0uc2l6ZT16bzw8NixmaFs3XT0ocmEuRmlsZUluZGV4WzBdLnN0YXJ0PWZoWzBdK2ZoWzFdK2ZoWzJdK2ZoWzNdK2ZoWzRdK2ZoWzVdKSsoZmhbNl0rNz4+MyksZmh9KGduKSxubj1ibihadFs3XTw8OSkseG49MCx6bj0wO2Zvcih4bj0wO3huPDg7'@;
put 'Kyt4bilubi53cml0ZV9zaGlmdCgxLEZpW3huXSk7Zm9yKHhuPTA7eG48ODsrK3huKW5uLndyaXRlX3NoaWZ0KDIsMCk7Zm9yKG5uLndyaXRlX3NoaWZ0KDIsNjIpLG5uLndyaXRlX3NoaWZ0KDIsMyksbm4ud3JpdGVfc2hpZnQoMiw2NTUzNCksbm4ud3JpdGVfc2hpZnQoMiw5KSxubi53cml0'@;
put 'ZV9zaGlmdCgyLDYpLHhuPTA7eG48MzsrK3huKW5uLndyaXRlX3NoaWZ0KDIsMCk7Zm9yKG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCxadFsyXSksbm4ud3JpdGVfc2hpZnQoNCxadFswXStadFsxXStadFsyXStadFszXS0xKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndy'@;
put 'aXRlX3NoaWZ0KDQsNDA5Niksbm4ud3JpdGVfc2hpZnQoNCxadFszXT9adFswXStadFsxXStadFsyXS0xOmVyKSxubi53cml0ZV9zaGlmdCg0LFp0WzNdKSxubi53cml0ZV9zaGlmdCgtNCxadFsxXT9adFswXS0xOmVyKSxubi53cml0ZV9zaGlmdCg0LFp0WzFdKSx4bj0wO3huPDEwOTsrK3hu'@;
put 'KW5uLndyaXRlX3NoaWZ0KC00LHhuPFp0WzJdP1p0WzFdK3huOi0xKTtpZihadFsxXSlmb3Ioem49MDt6bjxadFsxXTsrK3puKXtmb3IoO3huPDIzNisxMjcqem47Kyt4bilubi53cml0ZV9zaGlmdCgtNCx4bjxadFsyXT9adFsxXSt4bjotMSk7bm4ud3JpdGVfc2hpZnQoLTQsem49PT1adFsx'@;
put 'XS0xP2VyOnpuKzEpfXZhciB5cj1mdW5jdGlvbihyYSl7Zm9yKHpuKz1yYTt4bjx6bi0xOysreG4pbm4ud3JpdGVfc2hpZnQoLTQseG4rMSk7cmEmJigrK3huLG5uLndyaXRlX3NoaWZ0KC00LGVyKSl9O2Zvcih6bj14bj0wLHpuKz1adFsxXTt4bjx6bjsrK3huKW5uLndyaXRlX3NoaWZ0KC00'@;
put 'LHVvLkRJRlNFQ1QpO2Zvcih6bis9WnRbMl07eG48em47Kyt4bilubi53cml0ZV9zaGlmdCgtNCx1by5GQVRTRUNUKTt5cihadFszXSkseXIoWnRbNF0pO2Zvcih2YXIgV3I9MCxhaT0wLG5pPWduLkZpbGVJbmRleFswXTtXcjxnbi5GaWxlSW5kZXgubGVuZ3RoOysrV3IpKG5pPWduLkZpbGVJ'@;
put 'bmRleFtXcl0pLmNvbnRlbnQmJiEoKGFpPW5pLmNvbnRlbnQubGVuZ3RoKTw0MDk2KSYmKG5pLnN0YXJ0PXpuLHlyKGFpKzUxMT4+OSkpO2Zvcih5cihadFs2XSs3Pj4zKTs1MTEmbm4ubDspbm4ud3JpdGVfc2hpZnQoLTQsdW8uRU5ET0ZDSEFJTik7Zm9yKHpuPXhuPTAsV3I9MDtXcjxnbi5G'@;
put 'aWxlSW5kZXgubGVuZ3RoOysrV3IpKG5pPWduLkZpbGVJbmRleFtXcl0pLmNvbnRlbnQmJihhaT1uaS5jb250ZW50Lmxlbmd0aCkmJiEoYWk+PTQwOTYpJiYobmkuc3RhcnQ9em4seXIoYWkrNjM+PjYpKTtmb3IoOzUxMSZubi5sOylubi53cml0ZV9zaGlmdCgtNCx1by5FTkRPRkNIQUlOKTtm'@;
put 'b3IoeG49MDt4bjxadFs0XTw8MjsrK3huKXt2YXIgWGk9Z24uRnVsbFBhdGhzW3huXTtpZihYaSYmMCE9PVhpLmxlbmd0aCl7bmk9Z24uRmlsZUluZGV4W3huXSwwPT09eG4mJihuaS5zdGFydD1uaS5zaXplP25pLnN0YXJ0LTE6ZXIpO3ZhciBVaT0wPT09eG4mJnduLnJvb3R8fG5pLm5hbWU7'@;
put 'aWYoYWk9MiooVWkubGVuZ3RoKzEpLG5uLndyaXRlX3NoaWZ0KDY0LFVpLCJ1dGYxNmxlIiksbm4ud3JpdGVfc2hpZnQoMixhaSksbm4ud3JpdGVfc2hpZnQoMSxuaS50eXBlKSxubi53cml0ZV9zaGlmdCgxLG5pLmNvbG9yKSxubi53cml0ZV9zaGlmdCgtNCxuaS5MKSxubi53cml0ZV9zaGlm'@;
put 'dCgtNCxuaS5SKSxubi53cml0ZV9zaGlmdCgtNCxuaS5DKSxuaS5jbHNpZClubi53cml0ZV9zaGlmdCgxNixuaS5jbHNpZCwiaGV4Iik7ZWxzZSBmb3IoV3I9MDtXcjw0OysrV3Ipbm4ud3JpdGVfc2hpZnQoNCwwKTtubi53cml0ZV9zaGlmdCg0LG5pLnN0YXRlfHwwKSxubi53cml0ZV9zaGlm'@;
put 'dCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsbmkuc3RhcnQpLG5uLndyaXRlX3NoaWZ0KDQsbmkuc2l6ZSksbm4ud3JpdGVfc2hpZnQoNCwwKX1lbHNle2ZvcihXcj0wO1dyPDE3OysrV3Ip'@;
put 'bm4ud3JpdGVfc2hpZnQoNCwwKTtmb3IoV3I9MDtXcjwzOysrV3Ipbm4ud3JpdGVfc2hpZnQoNCwtMSk7Zm9yKFdyPTA7V3I8MTI7KytXcilubi53cml0ZV9zaGlmdCg0LDApfX1mb3IoeG49MTt4bjxnbi5GaWxlSW5kZXgubGVuZ3RoOysreG4paWYoKG5pPWduLkZpbGVJbmRleFt4bl0pLnNp'@;
put 'emU+PTQwOTYpe2Zvcihubi5sPW5pLnN0YXJ0KzE8PDksV3I9MDtXcjxuaS5zaXplOysrV3Ipbm4ud3JpdGVfc2hpZnQoMSxuaS5jb250ZW50W1dyXSk7Zm9yKDs1MTEmV3I7KytXcilubi53cml0ZV9zaGlmdCgxLDApfWZvcih4bj0xO3huPGduLkZpbGVJbmRleC5sZW5ndGg7Kyt4bilpZigo'@;
put 'bmk9Z24uRmlsZUluZGV4W3huXSkuc2l6ZT4wJiZuaS5zaXplPDQwOTYpe2ZvcihXcj0wO1dyPG5pLnNpemU7KytXcilubi53cml0ZV9zaGlmdCgxLG5pLmNvbnRlbnRbV3JdKTtmb3IoOzYzJldyOysrV3Ipbm4ud3JpdGVfc2hpZnQoMSwwKX1mb3IoO25uLmw8bm4ubGVuZ3RoOylubi53cml0'@;
put 'ZV9zaGlmdCgxLDApO3JldHVybiBubn1SLnZlcnNpb249IjEuMS40Ijt2YXIgQnIsYnI9NjQsZXI9LTIsQ2k9ImQwY2YxMWUwYTFiMTFhZTEiLEZpPVsyMDgsMjA3LDE3LDIyNCwxNjEsMTc3LDI2LDIyNV0scm89IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIix1bz17TUFYUkVH'@;
put 'U0VDVDotNixESUZTRUNUOi00LEZBVFNFQ1Q6LTMsRU5ET0ZDSEFJTjplcixGUkVFU0VDVDotMSxIRUFERVJfU0lHTkFUVVJFOkNpLEhFQURFUl9NSU5PUl9WRVJTSU9OOiIzZTAwIixNQVhSRUdTSUQ6LTYsTk9TVFJFQU06LTEsSEVBREVSX0NMU0lEOnJvLEVudHJ5VHlwZXM6WyJ1bmtub3du'@;
put 'Iiwic3RvcmFnZSIsInN0cmVhbSIsImxvY2tieXRlcyIsInByb3BlcnR5Iiwicm9vdCJdfTtmdW5jdGlvbiBrcihnbil7Zm9yKHZhciBrbj1uZXcgQXJyYXkoZ24ubGVuZ3RoKSx3bj0wO3duPGduLmxlbmd0aDsrK3duKWtuW3duXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGduW3duXSk7cmV0dXJu'@;
put 'IGtuLmpvaW4oIiIpfWZ1bmN0aW9uIGpyKGduKXtyZXR1cm4gQnI/QnIuZGVmbGF0ZVJhd1N5bmMoZ24pOllsKGduKX1mb3IodmFyIGduLGtuLFppPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSx5aT1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwx'@;
put 'NywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OF0sd289WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwx'@;
put 'NjM4NSwyNDU3N10sb289dHlwZW9mIFVpbnQ4QXJyYXk8InUiLExhPW9vP25ldyBVaW50OEFycmF5KDI1Nik6W10sUG89MDtQbzwyNTY7KytQbylMYVtQb109KHZvaWQgMCwyNTUmKChrbj0xMzk1MzYmKChnbj1Qbyk8PDF8Z248PDExKXw1NTgxNDQmKGduPDw1fGduPDwxNSkpPj4xNnxrbj4+'@;
put 'OHxrbikpO2Z1bmN0aW9uIGhhKGduLGtuKXt2YXIgd249TGFbMjU1JmduXTtyZXR1cm4ga248PTg/d24+Pj44LWtuOih3bj13bjw8OHxMYVtnbj4+OCYyNTVdLGtuPD0xNj93bj4+PjE2LWtuOih3bj13bjw8OHxMYVtnbj4+MTYmMjU1XSk+Pj4yNC1rbil9ZnVuY3Rpb24gSm8oZ24sa24pe3Zh'@;
put 'ciB3bj03JmtuLFp0PWtuPj4+MztyZXR1cm4oZ25bWnRdfCh3bjw9Nj8wOmduW1p0KzFdPDw4KSk+Pj53biYzfWZ1bmN0aW9uIEJpKGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTU/MDpnbltadCsxXTw8OCkpPj4+d24mN31mdW5jdGlvbiBQbihnbixr'@;
put 'bil7dmFyIHduPTcma24sWnQ9a24+Pj4zO3JldHVybihnbltadF18KHduPD0zPzA6Z25bWnQrMV08PDgpKT4+PnduJjMxfWZ1bmN0aW9uIFdhKGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTE/MDpnbltadCsxXTw8OCkpPj4+d24mMTI3fWZ1bmN0aW9u'@;
put 'IGZyKGduLGtuLHduKXt2YXIgWnQ9NyZrbixubj1rbj4+PjMsem49Z25bbm5dPj4+WnQ7cmV0dXJuIHduPDgtWnR8fCh6bnw9Z25bbm4rMV08PDgtWnQsd248MTYtWnQpfHwoem58PWduW25uKzJdPDwxNi1adCx3bjwyNC1adCl8fCh6bnw9Z25bbm4rM108PDI0LVp0KSx6biYoMTw8d24pLTF9'@;
put 'ZnVuY3Rpb24gWGwoZ24sa24pe3ZhciB3bj1nbi5sZW5ndGgsWnQ9Mip3bj5rbj8yKnduOmtuKzUsbm49MDtpZih3bj49a24pcmV0dXJuIGduO2lmKFRlKXt2YXIgeG49cChadCk7aWYoZ24uY29weSlnbi5jb3B5KHhuKTtlbHNlIGZvcig7bm48Z24ubGVuZ3RoOysrbm4peG5bbm5dPWduW25u'@;
put 'XTtyZXR1cm4geG59aWYob28pe3ZhciB6bj1uZXcgVWludDhBcnJheShadCk7aWYoem4uc2V0KXpuLnNldChnbik7ZWxzZSBmb3IoO25uPGduLmxlbmd0aDsrK25uKXpuW25uXT1nbltubl07cmV0dXJuIHpufXJldHVybiBnbi5sZW5ndGg9WnQsZ259ZnVuY3Rpb24gV2woZ24pe2Zvcih2YXIg'@;
put 'a249bmV3IEFycmF5KGduKSx3bj0wO3duPGduOysrd24pa25bd25dPTA7cmV0dXJuIGtufXZhciBZbD1mdW5jdGlvbigpe3ZhciBnbj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih3bixadCl7Zm9yKHZhciBubj0wO25uPHduLmxlbmd0aDspe3ZhciB4bj1NYXRoLm1pbig2NTUzNSx3bi5s'@;
put 'ZW5ndGgtbm4pO2ZvcihadC53cml0ZV9zaGlmdCgxLCsobm4reG49PXduLmxlbmd0aCkpLFp0LndyaXRlX3NoaWZ0KDIseG4pLFp0LndyaXRlX3NoaWZ0KDIsNjU1MzUmfnhuKTt4bi0tID4wOyladFtadC5sKytdPXduW25uKytdfXJldHVybiBadC5sfX0oKTtyZXR1cm4gZnVuY3Rpb24oa24p'@;
put 'e3ZhciB3bj1ibig1MCtNYXRoLmZsb29yKDEuMSprbi5sZW5ndGgpKSxadD1nbihrbix3bik7cmV0dXJuIHduLnNsaWNlKDAsWnQpfX0oKTtmdW5jdGlvbiBidShnbixrbix3bil7dmFyIFp0PTEsbm49MCx4bj0wLHpuPTAseXI9MCxXcj1nbi5sZW5ndGgsYWk9b28/bmV3IFVpbnQxNkFycmF5'@;
put 'KDMyKTpXbCgzMik7Zm9yKHhuPTA7eG48MzI7Kyt4bilhaVt4bl09MDtmb3IoeG49V3I7eG48d247Kyt4bilnblt4bl09MDtXcj1nbi5sZW5ndGg7dmFyIG5pPW9vP25ldyBVaW50MTZBcnJheShXcik6V2woV3IpO2Zvcih4bj0wO3huPFdyOysreG4pYWlbbm49Z25beG5dXSsrLFp0PG5uJiYo'@;
put 'WnQ9bm4pLG5pW3huXT0wO2ZvcihhaVswXT0wLHhuPTE7eG48PVp0OysreG4pYWlbeG4rMTZdPXlyPXlyK2FpW3huLTFdPDwxO2Zvcih4bj0wO3huPFdyOysreG4pMCE9KHlyPWduW3huXSkmJihuaVt4bl09YWlbeXIrMTZdKyspO3ZhciBYaT0wO2Zvcih4bj0wO3huPFdyOysreG4paWYoMCE9'@;
put 'KFhpPWduW3huXSkpZm9yKHlyPWhhKG5pW3huXSxadCk+Plp0LVhpLHpuPSgxPDxadCs0LVhpKS0xO3puPj0wOy0tem4pa25beXJ8em48PFhpXT0xNSZYaXx4bjw8NDtyZXR1cm4gWnR9dmFyIE1sPW9vP25ldyBVaW50MTZBcnJheSg1MTIpOldsKDUxMiksbG49b28/bmV3IFVpbnQxNkFycmF5'@;
put 'KDMyKTpXbCgzMik7aWYoIW9vKXtmb3IodmFyIEVuPTA7RW48NTEyOysrRW4pTWxbRW5dPTA7Zm9yKEVuPTA7RW48MzI7KytFbilsbltFbl09MH0hZnVuY3Rpb24oKXtmb3IodmFyIGduPVtdLGtuPTA7a248MzI7a24rKylnbi5wdXNoKDUpO2J1KGduLGxuLDMyKTt2YXIgd249W107Zm9yKGtu'@;
put 'PTA7a248PTE0MztrbisrKXduLnB1c2goOCk7Zm9yKDtrbjw9MjU1O2tuKyspd24ucHVzaCg5KTtmb3IoO2tuPD0yNzk7a24rKyl3bi5wdXNoKDcpO2Zvcig7a248PTI4NztrbisrKXduLnB1c2goOCk7YnUod24sTWwsMjg4KX0oKTt2YXIgVW49b28/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTpX'@;
put 'bCgzMjc2OCksU2k9b28/bmV3IFVpbnQxNkFycmF5KDMyNzY4KTpXbCgzMjc2OCksYXI9b28/bmV3IFVpbnQxNkFycmF5KDEyOCk6V2woMTI4KSxPaT0xLFNyPTE7ZnVuY3Rpb24gUGkoZ24sa24pe3ZhciB3bj1QbihnbixrbikrMjU3LFp0PVBuKGduLGtuKz01KSsxLG5uPWZ1bmN0aW9uIElz'@;
put 'KGduLGtuKXt2YXIgd249NyZrbixadD1rbj4+PjM7cmV0dXJuKGduW1p0XXwod248PTQ/MDpnbltadCsxXTw8OCkpPj4+d24mMTV9KGduLGtuKz01KSs0O2tuKz00O2Zvcih2YXIgeG49MCx6bj1vbz9uZXcgVWludDhBcnJheSgxOSk6V2woMTkpLHlyPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAs'@;
put 'MCwwLDAsMCwwLDAsMCwwXSxXcj0xLGFpPW9vP25ldyBVaW50OEFycmF5KDgpOldsKDgpLG5pPW9vP25ldyBVaW50OEFycmF5KDgpOldsKDgpLFhpPXpuLmxlbmd0aCxVaT0wO1VpPG5uOysrVWkpem5bWmlbVWldXT14bj1CaShnbixrbiksV3I8eG4mJihXcj14biksYWlbeG5dKyssa24rPTM7'@;
put 'dmFyIHJhPTA7Zm9yKGFpWzBdPTAsVWk9MTtVaTw9V3I7KytVaSluaVtVaV09cmE9cmErYWlbVWktMV08PDE7Zm9yKFVpPTA7VWk8WGk7KytVaSkwIT0ocmE9em5bVWldKSYmKHlyW1VpXT1uaVtyYV0rKyk7dmFyIHpvPTA7Zm9yKFVpPTA7VWk8WGk7KytVaSlpZigwIT0oem89em5bVWldKSl7'@;
put 'cmE9TGFbeXJbVWldXT4+OC16bztmb3IodmFyIGJvPSgxPDw3LXpvKS0xO2JvPj0wOy0tYm8pYXJbcmF8Ym88PHpvXT03JnpvfFVpPDwzfXZhciBUYT1bXTtmb3IoV3I9MTtUYS5sZW5ndGg8d24rWnQ7KXN3aXRjaChyYT1hcltXYShnbixrbildLGtuKz03JnJhLHJhPj4+PTMpe2Nhc2UgMTY6'@;
put 'Zm9yKHhuPTMrSm8oZ24sa24pLGtuKz0yLHJhPVRhW1RhLmxlbmd0aC0xXTt4bi0tID4wOylUYS5wdXNoKHJhKTticmVhaztjYXNlIDE3OmZvcih4bj0zK0JpKGduLGtuKSxrbis9Mzt4bi0tID4wOylUYS5wdXNoKDApO2JyZWFrO2Nhc2UgMTg6Zm9yKHhuPTExK1dhKGduLGtuKSxrbis9Nzt4'@;
put 'bi0tID4wOylUYS5wdXNoKDApO2JyZWFrO2RlZmF1bHQ6VGEucHVzaChyYSksV3I8cmEmJihXcj1yYSl9dmFyIE1zPVRhLnNsaWNlKDAsd24pLHIxPVRhLnNsaWNlKHduKTtmb3IoVWk9d247VWk8Mjg2OysrVWkpTXNbVWldPTA7Zm9yKFVpPVp0O1VpPDMwOysrVWkpcjFbVWldPTA7cmV0dXJu'@;
put 'IE9pPWJ1KE1zLFVuLDI4NiksU3I9YnUocjEsU2ksMzApLGtufWZ1bmN0aW9uIEhpKGduLGtuKXt2YXIgWnQ9ZnVuY3Rpb24gV28oZ24sa24pe2lmKDM9PWduWzBdJiYhKDMmZ25bMV0pKXJldHVybltWKGtuKSwyXTtmb3IodmFyIHduPTAsWnQ9MCxubj1wKGtufHwxPDwxOCkseG49MCx6bj1u'@;
put 'bi5sZW5ndGg+Pj4wLHlyPTAsV3I9MDshKDEmWnQpOylpZihadD1CaShnbix3biksd24rPTMsWnQ+Pj4xKWZvcihadD4+PjE9PTE/KHlyPTksV3I9NSk6KHduPVBpKGduLHduKSx5cj1PaSxXcj1TciksIWtuJiZ6bjx4biszMjc2NyYmKHpuPShubj1YbChubix4biszMjc2NykpLmxlbmd0aCk7'@;
put 'Oyl7dmFyIG5pPWZyKGduLHduLHlyKSxYaT1adD4+PjE9PTE/TWxbbmldOlVuW25pXTtpZih3bis9MTUmWGksKFhpPj4+PTQpPj4+OCYyNTUpe2lmKDI1Nj09WGkpYnJlYWs7dmFyIFVpPShYaS09MjU3KTw4PzA6WGktND4+MjtVaT41JiYoVWk9MCk7dmFyIHJhPXhuK3lpW1hpXTtVaT4wJiYo'@;
put 'cmErPWZyKGduLHduLFVpKSx3bis9VWkpLG5pPWZyKGduLHduLFdyKSx3bis9MTUmKFhpPVp0Pj4+MT09MT9sbltuaV06U2lbbmldKTt2YXIgem89KFhpPj4+PTQpPDQ/MDpYaS0yPj4xLGJvPXdvW1hpXTtmb3Ioem8+MCYmKGJvKz1mcihnbix3bix6byksd24rPXpvKSwha24mJnpuPHJhJiYo'@;
put 'em49KG5uPVhsKG5uLHJhKSkubGVuZ3RoKTt4bjxyYTspbm5beG5dPW5uW3huLWJvXSwrK3hufWVsc2Ugbm5beG4rK109WGl9ZWxzZXs3JnduJiYod24rPTgtKDcmd24pKTt2YXIgYWk9Z25bd24+Pj4zXXxnblsxKyh3bj4+PjMpXTw8ODtpZih3bis9MzIsIWtuJiZ6bjx4bithaSYmKHpuPShu'@;
put 'bj1YbChubix4bithaSkpLmxlbmd0aCksImZ1bmN0aW9uIj09dHlwZW9mIGduLmNvcHkpZ24uY29weShubix4bix3bj4+PjMsKHduPj4+MykrYWkpLHhuKz1haSx3bis9OCphaTtlbHNlIGZvcig7YWktLSA+MDspbm5beG4rK109Z25bd24+Pj4zXSx3bis9OH1yZXR1cm5ba24/bm46bm4uc2xp'@;
put 'Y2UoMCx4biksd24rNz4+PjNdfShnbi5zbGljZShnbi5sfHwwKSxrbik7cmV0dXJuIGduLmwrPVp0WzFdLFp0WzBdfWZ1bmN0aW9uIG1vKGduLGtuKXtpZighZ24pdGhyb3cgbmV3IEVycm9yKGtuKTt0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUuZXJyb3Ioa24pfWZ1bmN0aW9uIERpKGdu'@;
put 'LGtuKXt2YXIgd249Z247bW4od24sMCk7dmFyIHhuPXtGaWxlSW5kZXg6W10sRnVsbFBhdGhzOltdfTtTbih4bix7cm9vdDprbi5yb290fSk7Zm9yKHZhciB6bj13bi5sZW5ndGgtNDsoODAhPXduW3puXXx8NzUhPXduW3puKzFdfHw1IT13blt6bisyXXx8NiE9d25bem4rM10pJiZ6bj49MDsp'@;
put 'LS16bjt3bi5sPXpuKzQsd24ubCs9NDt2YXIgeXI9d24ucmVhZF9zaGlmdCgyKTt3bi5sKz02O3ZhciBXcj13bi5yZWFkX3NoaWZ0KDQpO2Zvcih3bi5sPVdyLHpuPTA7em48eXI7Kyt6bil7d24ubCs9MjA7dmFyIGFpPXduLnJlYWRfc2hpZnQoNCksbmk9d24ucmVhZF9zaGlmdCg0KSxYaT13'@;
put 'bi5yZWFkX3NoaWZ0KDIpLFVpPXduLnJlYWRfc2hpZnQoMikscmE9d24ucmVhZF9zaGlmdCgyKTt3bi5sKz04O3ZhciB6bz13bi5yZWFkX3NoaWZ0KDQpLGJvPXBlKHduLnNsaWNlKHduLmwrWGksd24ubCtYaStVaSkpO3duLmwrPVhpK1VpK3JhO3ZhciBUYT13bi5sO3duLmw9em8rNCxzcyh3'@;
put 'bixhaSxuaSx4bixibyksd24ubD1UYX1yZXR1cm4geG59ZnVuY3Rpb24gc3MoZ24sa24sd24sWnQsbm4pe2duLmwrPTI7dmFyIHhuPWduLnJlYWRfc2hpZnQoMiksem49Z24ucmVhZF9zaGlmdCgyKSx5cj1mdW5jdGlvbiBnZShnbil7dmFyIGtuPTY1NTM1JmduLnJlYWRfc2hpZnQoMiksd249'@;
put 'NjU1MzUmZ24ucmVhZF9zaGlmdCgyKSxadD1uZXcgRGF0ZSxubj0zMSZ3bix4bj0xNSYod24+Pj49NSk7d24+Pj49NCxadC5zZXRNaWxsaXNlY29uZHMoMCksWnQuc2V0RnVsbFllYXIod24rMTk4MCksWnQuc2V0TW9udGgoeG4tMSksWnQuc2V0RGF0ZShubik7dmFyIHpuPTMxJmtuLHlyPTYz'@;
put 'Jihrbj4+Pj01KTtyZXR1cm4gWnQuc2V0SG91cnMoa24+Pj49NiksWnQuc2V0TWludXRlcyh5ciksWnQuc2V0U2Vjb25kcyh6bjw8MSksWnR9KGduKTtpZig4MjU3JnhuKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgWklQIGVuY3J5cHRpb24iKTtmb3IodmFyIFdyPWduLnJlYWRfc2hp'@;
put 'ZnQoNCksYWk9Z24ucmVhZF9zaGlmdCg0KSxuaT1nbi5yZWFkX3NoaWZ0KDQpLFhpPWduLnJlYWRfc2hpZnQoMiksVWk9Z24ucmVhZF9zaGlmdCgyKSxyYT0iIix6bz0wO3pvPFhpOysrem8pcmErPVN0cmluZy5mcm9tQ2hhckNvZGUoZ25bZ24ubCsrXSk7aWYoVWkpe3ZhciBibz1wZShnbi5z'@;
put 'bGljZShnbi5sLGduLmwrVWkpKTsoYm9bMjE1ODldfHx7fSkubXQmJih5cj1ib1syMTU4OV0ubXQpLCgobm58fHt9KVsyMTU4OV18fHt9KS5tdCYmKHlyPW5uWzIxNTg5XS5tdCl9Z24ubCs9VWk7dmFyIFRhPWduLnNsaWNlKGduLmwsZ24ubCthaSk7c3dpdGNoKHpuKXtjYXNlIDg6VGE9ZnVu'@;
put 'Y3Rpb24gRm4oZ24sa24pe2lmKCFCcilyZXR1cm4gSGkoZ24sa24pO3ZhciBadD1uZXcoMCxCci5JbmZsYXRlUmF3KSxubj1adC5fcHJvY2Vzc0NodW5rKGduLnNsaWNlKGduLmwpLFp0Ll9maW5pc2hGbHVzaEZsYWcpO3JldHVybiBnbi5sKz1adC5ieXRlc1JlYWQsbm59KGduLG5pKTticmVh'@;
put 'aztjYXNlIDA6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBDb21wcmVzc2lvbiBtZXRob2QgIit6bil9dmFyIE1zPSExOzgmeG4mJigxMzQ2OTU3NjA9PShXcj1nbi5yZWFkX3NoaWZ0KDQpKSYmKFdyPWduLnJlYWRfc2hpZnQoNCksTXM9ITApLGFpPWdu'@;
put 'LnJlYWRfc2hpZnQoNCksbmk9Z24ucmVhZF9zaGlmdCg0KSksYWkhPWtuJiZtbyhNcywiQmFkIGNvbXByZXNzZWQgc2l6ZTogIitrbisiICE9ICIrYWkpLG5pIT13biYmbW8oTXMsIkJhZCB1bmNvbXByZXNzZWQgc2l6ZTogIit3bisiICE9ICIrbmkpO3ZhciByMT1NZS5idWYoVGEsMCk7KDB8'@;
put 'V3IpIT0oMHxyMSkmJm1vKE1zLCJCYWQgQ1JDMzIgY2hlY2tzdW06ICIrV3IrIiAhPSAiK3IxKSx5dShadCxyYSxUYSx7dW5zYWZlOiEwLG10OnlyfSl9ZnVuY3Rpb24geXUoZ24sa24sd24sWnQpe3ZhciBubj1adCYmWnQudW5zYWZlO25ufHxTbihnbik7dmFyIHhuPSFubiYmdmUuZmluZChn'@;
put 'bixrbik7aWYoIXhuKXt2YXIgem49Z24uRnVsbFBhdGhzWzBdO2tuLnNsaWNlKDAsem4ubGVuZ3RoKT09em4/em49a246KCIvIiE9em4uc2xpY2UoLTEpJiYoem4rPSIvIiksem49KHpuK2tuKS5yZXBsYWNlKCIvLyIsIi8iKSkseG49e25hbWU6UShrbiksdHlwZToyfSxnbi5GaWxlSW5kZXgu'@;
put 'cHVzaCh4biksZ24uRnVsbFBhdGhzLnB1c2goem4pLG5ufHx2ZS51dGlscy5jZmJfZ2MoZ24pfXJldHVybiB4bi5jb250ZW50PXduLHhuLnNpemU9d24/d24ubGVuZ3RoOjAsWnQmJihadC5DTFNJRCYmKHhuLmNsc2lkPVp0LkNMU0lEKSxadC5tdCYmKHhuLm10PVp0Lm10KSxadC5jdCYmKHhu'@;
put 'LmN0PVp0LmN0KSkseG59cmV0dXJuIFIuZmluZD1mdW5jdGlvbiBocihnbixrbil7dmFyIHduPWduLkZ1bGxQYXRocy5tYXAoZnVuY3Rpb24oV3Ipe3JldHVybiBXci50b1VwcGVyQ2FzZSgpfSksWnQ9d24ubWFwKGZ1bmN0aW9uKFdyKXt2YXIgYWk9V3Iuc3BsaXQoIi8iKTtyZXR1cm4gYWlb'@;
put 'YWkubGVuZ3RoLSgiLyI9PVdyLnNsaWNlKC0xKT8yOjEpXX0pLG5uPSExOzQ3PT09a24uY2hhckNvZGVBdCgwKT8obm49ITAsa249d25bMF0uc2xpY2UoMCwtMSkra24pOm5uPS0xIT09a24uaW5kZXhPZigiLyIpO3ZhciB4bj1rbi50b1VwcGVyQ2FzZSgpLHpuPSEwPT09bm4/d24uaW5kZXhP'@;
put 'Zih4bik6WnQuaW5kZXhPZih4bik7aWYoLTEhPT16bilyZXR1cm4gZ24uRmlsZUluZGV4W3puXTt2YXIgeXI9IXhuLm1hdGNoKG0pO2Zvcih4bj14bi5yZXBsYWNlKEUsIiIpLHlyJiYoeG49eG4ucmVwbGFjZShtLCIhIikpLHpuPTA7em48d24ubGVuZ3RoOysrem4paWYoKHlyP3duW3puXS5y'@;
put 'ZXBsYWNlKG0sIiEiKTp3blt6bl0pLnJlcGxhY2UoRSwiIik9PXhufHwoeXI/WnRbem5dLnJlcGxhY2UobSwiISIpOlp0W3puXSkucmVwbGFjZShFLCIiKT09eG4pcmV0dXJuIGduLkZpbGVJbmRleFt6bl07cmV0dXJuIG51bGx9LFIucmVhZD1mdW5jdGlvbiBycihnbixrbil7c3dpdGNoKGtu'@;
put 'JiZrbi50eXBlfHwiYmFzZTY0Iil7Y2FzZSJmaWxlIjpyZXR1cm4gZnVuY3Rpb24gVG4oZ24sa24pe3JldHVybiBQZSgpLE5lKHllLnJlYWRGaWxlU3luYyhnbiksa24pfShnbixrbik7Y2FzZSJiYXNlNjQiOnJldHVybiBOZShiKF9lLmRlY29kZShnbikpLGtuKTtjYXNlImJpbmFyeSI6cmV0'@;
put 'dXJuIE5lKGIoZ24pLGtuKX1yZXR1cm4gTmUoZ24sa24pfSxSLnBhcnNlPU5lLFIud3JpdGU9ZnVuY3Rpb24gTm4oZ24sa24pe3ZhciB3bj1Wbihnbixrbik7c3dpdGNoKGtuJiZrbi50eXBlKXtjYXNlImZpbGUiOnJldHVybiBQZSgpLHllLndyaXRlRmlsZVN5bmMoa24uZmlsZW5hbWUsd24p'@;
put 'LHduO2Nhc2UiYmluYXJ5IjpyZXR1cm4ga3Iod24pO2Nhc2UiYmFzZTY0IjpyZXR1cm4gX2UuZW5jb2RlKGtyKHduKSl9cmV0dXJuIHdufSxSLndyaXRlRmlsZT1mdW5jdGlvbiBMaShnbixrbix3bil7UGUoKTt2YXIgWnQ9Vm4oZ24sd24pO3llLndyaXRlRmlsZVN5bmMoa24sWnQpfSxSLnV0'@;
put 'aWxzPXtjZmJfbmV3OmZ1bmN0aW9uIHhsKGduKXt2YXIga249e307cmV0dXJuIFNuKGtuLGduKSxrbn0sY2ZiX2FkZDp5dSxjZmJfZGVsOmZ1bmN0aW9uIEVsKGduLGtuKXtTbihnbik7dmFyIHduPXZlLmZpbmQoZ24sa24pO2lmKHduKWZvcih2YXIgWnQ9MDtadDxnbi5GaWxlSW5kZXgubGVu'@;
put 'Z3RoOysrWnQpaWYoZ24uRmlsZUluZGV4W1p0XT09d24pcmV0dXJuIGduLkZpbGVJbmRleC5zcGxpY2UoWnQsMSksZ24uRnVsbFBhdGhzLnNwbGljZShadCwxKSwhMDtyZXR1cm4hMX0sY2ZiX21vdjpmdW5jdGlvbiBMZihnbixrbix3bil7U24oZ24pO3ZhciBadD12ZS5maW5kKGduLGtuKTtp'@;
put 'ZihadClmb3IodmFyIG5uPTA7bm48Z24uRmlsZUluZGV4Lmxlbmd0aDsrK25uKWlmKGduLkZpbGVJbmRleFtubl09PVp0KXJldHVybiBnbi5GaWxlSW5kZXhbbm5dLm5hbWU9USh3biksZ24uRnVsbFBhdGhzW25uXT13biwhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIF9kKGduKXtYbihn'@;
put 'biwhMCl9LFJlYWRTaGlmdDpCbCxDaGVja0ZpZWxkOl9uLHByZXBfYmxvYjptbixiY29uY2F0OmosdXNlX3psaWI6ZnVuY3Rpb24gX3IoZ24pe3RyeXt2YXIgd249bmV3KDAsZ24uSW5mbGF0ZVJhdyk7aWYod24uX3Byb2Nlc3NDaHVuayhuZXcgVWludDhBcnJheShbMywwXSksd24uX2Zpbmlz'@;
put 'aEZsdXNoRmxhZyksIXduLmJ5dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO0JyPWdufWNhdGNoKFp0KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyhadC5tZXNzYWdlfHxadCkpfX0sX2RlZmxhdGVSYXc6'@;
put 'WWwsX2luZmxhdGVSYXc6SGksY29uc3RzOnVvfSxSfSgpO3RyeXtYZT1fKDgzMzM3KX1jYXRjaHt9ZnVuY3Rpb24gamUoUyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBTP3goUyk6QXJyYXkuaXNBcnJheShTKT9mdW5jdGlvbiBUKFMpe2lmKHR5cGVvZiBVaW50OEFycmF5PiJ1Iil0aHJvdyBu'@;
put 'ZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7cmV0dXJuIG5ldyBVaW50OEFycmF5KFMpfShTKTpTfWZ1bmN0aW9uIERlKFMsUixrKXtpZih0eXBlb2YgWGU8InUiJiZYZS53cml0ZUZpbGVTeW5jKXJldHVybiBrP1hlLndyaXRlRmlsZVN5bmMoUyxSLGspOlhlLndyaXRlRmlsZVN5bmMoUyxSKTt2'@;
put 'YXIgRz0idXRmOCI9PWs/TnMoUik6UjtpZih0eXBlb2YgSUVfU2F2ZUZpbGU8InUiKXJldHVybiBJRV9TYXZlRmlsZShHLFMpO2lmKHR5cGVvZiBCbG9iPCJ1Iil7dmFyIFE9bmV3IEJsb2IoW2plKEcpXSx7dHlwZToiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIn0pO2lmKHR5cGVvZiBuYXZp'@;
put 'Z2F0b3I8InUiJiZuYXZpZ2F0b3IubXNTYXZlQmxvYilyZXR1cm4gbmF2aWdhdG9yLm1zU2F2ZUJsb2IoUSxTKTtpZih0eXBlb2Ygc2F2ZUFzPCJ1IilyZXR1cm4gc2F2ZUFzKFEsUyk7aWYodHlwZW9mIFVSTDwidSImJnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1l'@;
put 'bnQmJlVSTC5jcmVhdGVPYmplY3RVUkwpe3ZhciBhZT1VUkwuY3JlYXRlT2JqZWN0VVJMKFEpO2lmKCJvYmplY3QiPT10eXBlb2YgY2hyb21lJiYiZnVuY3Rpb24iPT10eXBlb2YoY2hyb21lLmRvd25sb2Fkc3x8e30pLmRvd25sb2FkKXJldHVybiBVUkwucmV2b2tlT2JqZWN0VVJMJiZ0eXBl'@;
put 'b2Ygc2V0VGltZW91dDwidSImJnNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKGFlKX0sNmU0KSxjaHJvbWUuZG93bmxvYWRzLmRvd25sb2FkKHt1cmw6YWUsZmlsZW5hbWU6UyxzYXZlQXM6ITB9KTt2YXIgZ2U9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2lm'@;
put 'KG51bGwhPWdlLmRvd25sb2FkKXJldHVybiBnZS5kb3dubG9hZD1TLGdlLmhyZWY9YWUsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChnZSksZ2UuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGdlKSxVUkwucmV2b2tlT2JqZWN0VVJMJiZ0eXBlb2Ygc2V0VGltZW91dDwidSIm'@;
put 'JnNldFRpbWVvdXQoZnVuY3Rpb24oKXtVUkwucmV2b2tlT2JqZWN0VVJMKGFlKX0sNmU0KSxhZX19aWYodHlwZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBGb2xkZXI8InUiKXRyeXt2YXIgcGU9RmlsZShTKTtyZXR1cm4gcGUub3BlbigidyIpLHBlLmVuY29kaW5nPSJiaW5h'@;
put 'cnkiLEFycmF5LmlzQXJyYXkoUikmJihSPUMoUikpLHBlLndyaXRlKFIpLHBlLmNsb3NlKCksUn1jYXRjaCh5ZSl7aWYoIXllLm1lc3NhZ2V8fCF5ZS5tZXNzYWdlLm1hdGNoKC9vbnN0cnVjdC8pKXRocm93IHllfXRocm93IG5ldyBFcnJvcigiY2Fubm90IHNhdmUgZmlsZSAiK1MpfWZ1bmN0'@;
put 'aW9uIFJlKFMpe2Zvcih2YXIgUj1PYmplY3Qua2V5cyhTKSxrPVtdLEc9MDtHPFIubGVuZ3RoOysrRylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxSW0ddKSYmay5wdXNoKFJbR10pO3JldHVybiBrfWZ1bmN0aW9uIEllKFMsUil7Zm9yKHZhciBrPVtdLEc9UmUoUyks'@;
put 'UT0wO1EhPT1HLmxlbmd0aDsrK1EpbnVsbD09a1tTW0dbUV1dW1JdXSYmKGtbU1tHW1FdXVtSXV09R1tRXSk7cmV0dXJuIGt9ZnVuY3Rpb24gVmUoUyl7Zm9yKHZhciBSPVtdLGs9UmUoUyksRz0wO0chPT1rLmxlbmd0aDsrK0cpUltTW2tbR11dXT1rW0ddO3JldHVybiBSfWZ1bmN0aW9uIGtl'@;
put 'KFMpe2Zvcih2YXIgUj1bXSxrPVJlKFMpLEc9MDtHIT09ay5sZW5ndGg7KytHKVJbU1trW0ddXV09cGFyc2VJbnQoa1tHXSwxMCk7cmV0dXJuIFJ9dmFyIFFlLHVuLF90PW5ldyBEYXRlKDE4OTksMTEsMzAsMCwwLDApLG50PTA7ZnVuY3Rpb24geXQoKXtudD1fdC5nZXRUaW1lKCkrNmU0Kigo'@;
put 'bmV3IERhdGUpLmdldFRpbWV6b25lT2Zmc2V0KCktX3QuZ2V0VGltZXpvbmVPZmZzZXQoKSksUWU9ZnVuY3Rpb24oUixrKXt2YXIgRz1SLmdldFRpbWUoKTtyZXR1cm4gayYmKEctPTEyNjMxNjhlNSksKEctbnQpLzg2NGU1fSx1bj1mdW5jdGlvbihSKXt2YXIgaz1uZXcgRGF0ZTtyZXR1cm4g'@;
put 'ay5zZXRUaW1lKDI0KlIqNjAqNjAqMWUzK250KSxrfX1mdW5jdGlvbiBpdChTKXt2YXIgUj0wLGs9MCxHPSExLFE9Uy5tYXRjaCgvUChbMC05XC5dK1kpPyhbMC05XC5dK00pPyhbMC05XC5dK0QpP1QoWzAtOVwuXStIKT8oWzAtOVwuXStNKT8oWzAtOVwuXStTKT8vKTtpZighUSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoInwiK1MrInwgaXMgbm90IGFuIElTTzg2MDEgRHVyYXRpb24iKTtmb3IodmFyIGFlPTE7YWUhPVEubGVuZ3RoOysrYWUpaWYoUVthZV0pe3N3aXRjaChrPTEsYWU+MyYmKEc9ITApLFFbYWVdLnNsaWNlKFFbYWVdLmxlbmd0aC0xKSl7Y2FzZSJZIjp0aHJvdyBuZXcgRXJyb3Io'@;
put 'IlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogIitRW2FlXS5zbGljZShRW2FlXS5sZW5ndGgtMSkpO2Nhc2UiRCI6ayo9MjQ7Y2FzZSJIIjprKj02MDtjYXNlIk0iOmlmKCFHKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiBNIik7ayo9NjB9'@;
put 'Uis9aypwYXJzZUludChRW2FlXSwxMCl9cmV0dXJuIFJ9eXQoKTt2YXIgJGU9bmV3IERhdGUoIjIwMTctMDItMTlUMTk6MDY6MDkuMDAwWiIpO2lzTmFOKCRlLmdldEZ1bGxZZWFyKCkpJiYoJGU9bmV3IERhdGUoIjIvMTkvMTciKSk7dmFyIHR0PTIwMTc9PSRlLmdldEZ1bGxZZWFyKCk7ZnVu'@;
put 'Y3Rpb24gSGUoUyxSKXt2YXIgaz1uZXcgRGF0ZShTKTtpZih0dClyZXR1cm4gUj4wP2suc2V0VGltZShrLmdldFRpbWUoKSs2MCprLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKTpSPDAmJmsuc2V0VGltZShrLmdldFRpbWUoKS02MCprLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSxrO2lmKFMg'@;
put 'aW5zdGFuY2VvZiBEYXRlKXJldHVybiBTO2lmKDE5MTc9PSRlLmdldEZ1bGxZZWFyKCkmJiFpc05hTihrLmdldEZ1bGxZZWFyKCkpKXt2YXIgRz1rLmdldEZ1bGxZZWFyKCk7cmV0dXJuIFMuaW5kZXhPZigiIitHKT4tMXx8ay5zZXRGdWxsWWVhcihrLmdldEZ1bGxZZWFyKCkrMTAwKSxrfXZh'@;
put 'ciBRPVMubWF0Y2goL1xkKy9nKXx8WyIyMDE3IiwiMiIsIjE5IiwiMCIsIjAiLCIwIl0sYWU9bmV3IERhdGUoK1FbMF0sK1FbMV0tMSwrUVsyXSwrUVszXXx8MCwrUVs0XXx8MCwrUVs1XXx8MCk7cmV0dXJuIFMuaW5kZXhPZigiWiIpPi0xJiYoYWU9bmV3IERhdGUoYWUuZ2V0VGltZSgpLTYw'@;
put 'KmFlLmdldFRpbWV6b25lT2Zmc2V0KCkqMWUzKSksYWV9ZnVuY3Rpb24gdXQoUyl7Zm9yKHZhciBSPSIiLGs9MDtrIT1TLmxlbmd0aDsrK2spUis9U3RyaW5nLmZyb21DaGFyQ29kZShTW2tdKTtyZXR1cm4gUn1mdW5jdGlvbiBxdChTKXtpZigib2JqZWN0IiE9dHlwZW9mIFN8fG51bGw9PVMp'@;
put 'cmV0dXJuIFM7aWYoUyBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKFMuZ2V0VGltZSgpKTtpZihBcnJheS5pc0FycmF5KFMpKXJldHVybiBmdW5jdGlvbiBSdChTKXtmb3IodmFyIFI9W10saz0wO2s8Uy5sZW5ndGg7KytrKXt2YXIgRz1TW2tdOyJvYmplY3QiPT10eXBlb2YgRz9S'@;
put 'W2tdPXF0KEcpOm51bGwhPUcmJihSW2tdPUcpfXJldHVybiBSfShTKTt2YXIgUj17fTtmb3IodmFyIGsgaW4gUylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxrKSYmKFJba109cXQoU1trXSkpO3JldHVybiBSfWZ1bmN0aW9uIFB0KFMsUil7aWYoIm9iamVjdCIhPXR5'@;
put 'cGVvZiBSfHxudWxsPT1SKXJldHVybiBTO2Zvcih2YXIgayBpbiBSKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSLGspJiYoU1trXT1xdChSW2tdKSk7cmV0dXJuIFN9ZnVuY3Rpb24gc2koUyxSKXtmb3IodmFyIGs9IiI7ay5sZW5ndGg8Ujspays9UztyZXR1cm4ga31m'@;
put 'dW5jdGlvbiBRdChTKXt2YXIgUj1OdW1iZXIoUyk7aWYoIWlzTmFOKFIpKXJldHVybiBpc0Zpbml0ZShSKT9SOk5hTjtpZighL1xkLy50ZXN0KFMpKXJldHVybiBSO3ZhciBrPTEsRz1TLnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZywiJDEkMiIpLnJlcGxhY2UoL1skXS9nLCIiKS5yZXBsYWNl'@;
put 'KC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBrKj0xMDAsIiJ9KTtyZXR1cm4gaXNOYU4oUj1OdW1iZXIoRykpJiYoRz1HLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKFEsYWUpe3JldHVybiBrPS1rLGFlfSksaXNOYU4oUj1OdW1iZXIoRykpKT9SOlIva31mdW5jdGlvbiBzbihTKXt2'@;
put 'YXIgUj1uZXcgRGF0ZShTKSxrPW5ldyBEYXRlKE5hTiksRz1SLmdldFllYXIoKSxRPVIuZ2V0TW9udGgoKSxhZT1SLmdldERhdGUoKTtyZXR1cm4gaXNOYU4oYWUpfHxHPDB8fEc+ODA5OT9rOihRPjB8fGFlPjEpJiYxMDEhPUd8fFMudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8'@;
put 'YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKT9SOlMubWF0Y2goL1teLTAtOTosXC9cXF0vKT9rOlJ9ZnVuY3Rpb24gUmkoUyxSKXtpZihSJiZSLnJhdylyZXR1cm57dDoicyIsdjpTfTtpZighUylyZXR1cm57dDoieiJ9O2lmKCJUUlVFIj09PVMpcmV0dXJue3Q6ImIiLHY6'@;
put 'ITB9O2lmKCJGQUxTRSI9PT1TKXJldHVybnt0OiJiIix2OiExfTt2YXIgaz0iIixHPU51bWJlcihTKTtpZihpc0Zpbml0ZShHKSlyZXR1cm57dDoibiIsdjpHfTtpZihpc05hTihHKSYmL1xkLy50ZXN0KFMpKXt2YXIgUT0xLGFlPVMucmVwbGFjZSgvKFtcZF0pLChbXGRdKS9nLGZ1bmN0aW9u'@;
put 'KGV0LGN0LEV0KXtyZXR1cm4ga3x8KGs9IiMsIyMwIiksY3QrRXR9KS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvXC5cZCovLGZ1bmN0aW9uKGV0KXtrfHwoaz0iMCIpLGsrPSIuIjtmb3IodmFyIGN0PTI7Y3Q8PWV0Lmxlbmd0aDsrK2N0KWsrPSIwIjtyZXR1cm4gZXR9KS5yZXBsYWNl'@;
put 'KC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBRKj0xMDAsa3x8KGs9IjAiKSxrKz0iJSIsIiJ9KTtpZighaXNOYU4oRz1OdW1iZXIoYWUpKSlyZXR1cm57dDoibiIsdjpHL1EsejprfTtpZihhZT1hZS5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihldCxjdCl7cmV0dXJuIFE9LVEsY3R9'@;
put 'KSwhaXNOYU4oRz1OdW1iZXIoYWUpKSlyZXR1cm57dDoibiIsdjpHL1Esejooa3x8IjAiKSsiXyk7KCIrKGt8fCIwIikrIik7QCJ9fWU6aWYoIVJ8fCFSLnJhd0RhdGVzKXt2YXIgZ2U9UiYmUi5jZWxsRGF0ZXMscGU9bmV3IERhdGUoUyksUGU9cGUuZ2V0WWVhcigpLE5lPXBlLmdldE1vbnRo'@;
put 'KCksWWU9cGUuZ2V0RGF0ZSgpO2lmKGlzTmFOKFllKXx8UGU8MHx8UGU+ODA5OSlicmVhayBlO2lmKChOZT4wfHxZZT4xKSYmMTAxIT1QZSlyZXR1cm57dDpnZT8iZCI6Im4iLHY6Z2U/cGU6UWUocGUpLHo6Ui5kYXRlTkZ8fEEuX3RhYmxlWzE0XX07aWYoUy50b0xvd2VyQ2FzZSgpLm1hdGNo'@;
put 'KC9qYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYy8pKXJldHVybnt0OmdlPyJkIjoibiIsdjpnZT9wZTpRZShwZSksejpSLmRhdGVORnx8QS5fdGFibGVbMTRdfTtpZihTLm1hdGNoKC9bXi0wLTk6LFwvXFxdLykpYnJlYWsgZTtyZXR1cm4gcGV9cmV0dXJu'@;
put 'e3Q6InMiLHY6U319dmFyIHp0LGhuPTU9PSJhYmFjYWJhIi5zcGxpdCgvKDo/YikvaSkubGVuZ3RoO2Z1bmN0aW9uIFd0KFMpe3JldHVybiBudWxsIT1TJiYhU31mdW5jdGlvbiBBdChTKXtyZXR1cm4gUy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStTLnNsaWNlKDEpfWZ1bmN0aW9uIFJuKFMp'@;
put 'e3JldHVybiBTP1MuZGF0YT9KKFMuZGF0YSk6Uy5hc05vZGVCdWZmZXImJlRlP0ooUy5hc05vZGVCdWZmZXIoKS50b1N0cmluZygiYmluYXJ5IikpOlMuYXNCaW5hcnk/SihTLmFzQmluYXJ5KCkpOlMuX2RhdGEmJlMuX2RhdGEuZ2V0Q29udGVudD9KKHV0KEFycmF5LnByb3RvdHlwZS5zbGlj'@;
put 'ZS5jYWxsKFMuX2RhdGEuZ2V0Q29udGVudCgpLDApKSk6Uy5jb250ZW50JiZTLnR5cGU/Sih1dChTLmNvbnRlbnQpKTpudWxsOm51bGx9ZnVuY3Rpb24gc3QoUyl7aWYoIVMpcmV0dXJuIG51bGw7aWYoUy5kYXRhKXJldHVybiBZKFMuZGF0YSk7aWYoUy5hc05vZGVCdWZmZXImJlRlKXJldHVy'@;
put 'biBTLmFzTm9kZUJ1ZmZlcigpO2lmKFMuX2RhdGEmJlMuX2RhdGEuZ2V0Q29udGVudCl7dmFyIFI9Uy5fZGF0YS5nZXRDb250ZW50KCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBSP1koUik6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUil9cmV0dXJuIFMuY29udGVudCYmUy50eXBlP1Mu'@;
put 'Y29udGVudDpudWxsfWZ1bmN0aW9uIHJpKFMsUil7Zm9yKHZhciBrPVMuRnVsbFBhdGhzfHxSZShTLmZpbGVzKSxHPVIudG9Mb3dlckNhc2UoKSxRPUcucmVwbGFjZSgvXC8vZywiXFwiKSxhZT0wO2FlPGsubGVuZ3RoOysrYWUpe3ZhciBnZT1rW2FlXS50b0xvd2VyQ2FzZSgpO2lmKEc9PWdl'@;
put 'fHxRPT1nZSlyZXR1cm4gUy5maWxlc1trW2FlXV19cmV0dXJuIG51bGx9ZnVuY3Rpb24gV2UoUyxSKXt2YXIgaz1yaShTLFIpO2lmKG51bGw9PWspdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBmaWxlICIrUisiIGluIHppcCIpO3JldHVybiBrfWZ1bmN0aW9uIFR0KFMsUixrKXtpZigh'@;
put 'aylyZXR1cm4gZnVuY3Rpb24gVXQoUyl7cmV0dXJuIFMmJiIuYmluIj09PVMubmFtZS5zbGljZSgtNCk/c3QoUyk6Um4oUyl9KFdlKFMsUikpO2lmKCFSKXJldHVybiBudWxsO3RyeXtyZXR1cm4gVHQoUyxSKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gbnIoUyxSLGspe2lmKCFrKXJl'@;
put 'dHVybiBSbihXZShTLFIpKTtpZighUilyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIG5yKFMsUil9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIGh0KFMsUixrKXtpZighaylyZXR1cm4gc3QoV2UoUyxSKSk7aWYoIVIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBodChTLFIpfWNhdGNoe3JldHVy'@;
put 'biBudWxsfX1mdW5jdGlvbiBCbihTLFIsayl7Uy5GdWxsUGF0aHM/dmUudXRpbHMuY2ZiX2FkZChTLFIsayk6Uy5maWxlKFIsayl9ZnVuY3Rpb24gaGkoKXtyZXR1cm4genQ/bmV3IHp0OnZlLnV0aWxzLmNmYl9uZXcoKX1mdW5jdGlvbiBjbihTLFIpe3ZhciBrO2lmKHp0KXN3aXRjaChSLnR5'@;
put 'cGUpe2Nhc2UiYmFzZTY0IjprPW5ldyB6dChTLHtiYXNlNjQ6ITB9KTticmVhaztjYXNlImJpbmFyeSI6Y2FzZSJhcnJheSI6az1uZXcgenQoUyx7YmFzZTY0OiExfSk7YnJlYWs7Y2FzZSJidWZmZXIiOms9bmV3IHp0KFMpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29n'@;
put 'bml6ZWQgdHlwZSAiK1IudHlwZSl9ZWxzZSBzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6az12ZS5yZWFkKFMse3R5cGU6ImJhc2U2NCJ9KTticmVhaztjYXNlImJpbmFyeSI6az12ZS5yZWFkKFMse3R5cGU6ImJpbmFyeSJ9KTticmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6az12'@;
put 'ZS5yZWFkKFMse3R5cGU6ImJ1ZmZlciJ9KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfXJldHVybiBrfWZ1bmN0aW9uIGZuKFMsUil7aWYoIi8iPT1TLmNoYXJBdCgwKSlyZXR1cm4gUy5zbGljZSgxKTt2YXIgaz1SLnNwbGl0KCIv'@;
put 'Iik7Ii8iIT1SLnNsaWNlKC0xKSYmay5wb3AoKTtmb3IodmFyIEc9Uy5zcGxpdCgiLyIpOzAhPT1HLmxlbmd0aDspe3ZhciBRPUcuc2hpZnQoKTsiLi4iPT09UT9rLnBvcCgpOiIuIiE9PVEmJmsucHVzaChRKX1yZXR1cm4gay5qb2luKCIvIil9dHlwZW9mIEpTWmlwU3luYzwidSImJih6dD1K'@;
put 'U1ppcFN5bmMpLHVlLmV4cG9ydHMmJnR5cGVvZiB6dD4idSImJih6dD1fKDMxNzkpKTt2YXIgSWk9Jzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz5cclxuJyxYdD0vKD86W14iXHM/PlwvXSspXHMqPVxzKigoPzoiKSg/OlteIl0qPykoPzoi'@;
put 'KXwoPzonKSg/OlteJ10qPykoPzonKXwoPzpbXiciPlxzXSspKS9nLGVuPS88W1wvXD9dP1thLXpBLVowLTk6Xy1dKyg/OlxzK1teIlxzPz5cL10rXHMqPVxzKig/OiJbXiJdKiJ8J1teJ10qJ3xbXiciPlxzPV0rKSkqXHM/W1wvXD9dPz4vZztJaS5tYXRjaChlbil8fChlbj0vPFtePl0qPi9n'@;
put 'KTt2YXIgaG89Lzxcdyo6LyxNaT0vPChcLz8pXHcrOi87ZnVuY3Rpb24gdnIoUyxSLGspe2Zvcih2YXIgRz17fSxRPTAsYWU9MDtRIT09Uy5sZW5ndGgmJjMyIT09KGFlPVMuY2hhckNvZGVBdChRKSkmJjEwIT09YWUmJjEzIT09YWU7KytRKTtpZihSfHwoR1swXT1TLnNsaWNlKDAsUSkpLFE9'@;
put 'PT1TLmxlbmd0aClyZXR1cm4gRzt2YXIgZ2U9Uy5tYXRjaChYdCkscGU9MCx5ZT0iIixQZT0wLE5lPSIiLFllPSIiLGV0PTE7aWYoZ2UpZm9yKFBlPTA7UGUhPWdlLmxlbmd0aDsrK1BlKXtmb3IoWWU9Z2VbUGVdLGFlPTA7YWUhPVllLmxlbmd0aCYmNjEhPT1ZZS5jaGFyQ29kZUF0KGFlKTsr'@;
put 'K2FlKTtmb3IoTmU9WWUuc2xpY2UoMCxhZSkudHJpbSgpOzMyPT1ZZS5jaGFyQ29kZUF0KGFlKzEpOykrK2FlO2ZvcihldD0zND09KFE9WWUuY2hhckNvZGVBdChhZSsxKSl8fDM5PT1RPzE6MCx5ZT1ZZS5zbGljZShhZSsxK2V0LFllLmxlbmd0aC1ldCkscGU9MDtwZSE9TmUubGVuZ3RoJiY1'@;
put 'OCE9PU5lLmNoYXJDb2RlQXQocGUpOysrcGUpO2lmKHBlPT09TmUubGVuZ3RoKU5lLmluZGV4T2YoIl8iKT4wJiYoTmU9TmUuc2xpY2UoMCxOZS5pbmRleE9mKCJfIikpKSxHW05lXT15ZSxrfHwoR1tOZS50b0xvd2VyQ2FzZSgpXT15ZSk7ZWxzZXt2YXIgY3Q9KDU9PT1wZSYmInhtbG5zIj09'@;
put 'PU5lLnNsaWNlKDAsNSk/InhtbG5zIjoiIikrTmUuc2xpY2UocGUrMSk7aWYoR1tjdF0mJiJleHQiPT1OZS5zbGljZShwZS0zLHBlKSljb250aW51ZTtHW2N0XT15ZSxrfHwoR1tjdC50b0xvd2VyQ2FzZSgpXT15ZSl9fXJldHVybiBHfWZ1bmN0aW9uIFduKFMpe3JldHVybiBTLnJlcGxhY2Uo'@;
put 'TWksIjwkMSIpfXZhciAkaT17IiZxdW90OyI6JyInLCImYXBvczsiOiInIiwiJmd0OyI6Ij4iLCImbHQ7IjoiPCIsIiZhbXA7IjoiJiJ9LGVpPVZlKCRpKSxRcj1mdW5jdGlvbigpe3ZhciBTPS8mKD86cXVvdHxhcG9zfGd0fGx0fGFtcHwjeD8oW1xkYS1mQS1GXSspKTsvZ2ksUj0vX3goW1xk'@;
put 'YS1mQS1GXXs0fSlfL2dpO3JldHVybiBmdW5jdGlvbiBrKEcpe3ZhciBRPUcrIiIsYWU9US5pbmRleE9mKCI8IVtDREFUQVsiKTtpZigtMT09YWUpcmV0dXJuIFEucmVwbGFjZShTLGZ1bmN0aW9uKHBlLHllKXtyZXR1cm4gJGlbcGVdfHxTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHll'@;
put 'LHBlLmluZGV4T2YoIngiKT4tMT8xNjoxMCkpfHxwZX0pLnJlcGxhY2UoUixmdW5jdGlvbihwZSx5ZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoeWUsMTYpKX0pO3ZhciBnZT1RLmluZGV4T2YoIl1dPiIpO3JldHVybiBrKFEuc2xpY2UoMCxhZSkpK1Euc2xpY2UoYWUr'@;
put 'OSxnZSkrayhRLnNsaWNlKGdlKzMpKX19KCksVmk9L1smPD4nIl0vZyxOaT0vW1x1MDAwMC1cdTAwMDhcdTAwMGItXHUwMDFmXS9nLElvPS9feFswLTlhLWZBLUZdezR9Xy9nO2Z1bmN0aW9uIExyKFMpe3JldHVybihTKyIiKS5yZXBsYWNlKElvLCJfeDAwNUYkJiIpLnJlcGxhY2UoVmksZnVu'@;
put 'Y3Rpb24oayl7cmV0dXJuIGVpW2tdfSkucmVwbGFjZShOaSxmdW5jdGlvbihrKXtyZXR1cm4iX3giKygiMDAwIitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIl8ifSl9ZnVuY3Rpb24gV2koUyl7cmV0dXJuIExyKFMpLnJlcGxhY2UoL1xuL2csIl94MDAwYV8iKX1m'@;
put 'dW5jdGlvbiBnbyhTKXtyZXR1cm4gTHIoUykucmVwbGFjZSgvIC9nLCJfeDAwMjBfIil9dmFyIFFuPS9bXHUwMDAwLVx1MDAxZl0vZztmdW5jdGlvbiBjbyhTKXtyZXR1cm4oUysiIikucmVwbGFjZShWaSxmdW5jdGlvbihrKXtyZXR1cm4gZWlba119KS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIp'@;
put 'LnJlcGxhY2UoUW4sZnVuY3Rpb24oayl7cmV0dXJuIiYjeCIrKCIwMDAiK2suY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiOyJ9KX1mdW5jdGlvbiBfbyhTKXtyZXR1cm4oUysiIikucmVwbGFjZShWaSxmdW5jdGlvbihrKXtyZXR1cm4gZWlba119KS5yZXBsYWNlKFFu'@;
put 'LGZ1bmN0aW9uKGspe3JldHVybiImI3giK2suY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSsiOyJ9KX12YXIgT289ZnVuY3Rpb24oKXt2YXIgUz0vJiMoXGQrKTsvZztmdW5jdGlvbiBSKGssRyl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoRywx'@;
put 'MCkpfXJldHVybiBmdW5jdGlvbihHKXtyZXR1cm4gRy5yZXBsYWNlKFMsUil9fSgpLEhvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKFIpe3JldHVybiBSLnJlcGxhY2UoLyhcclxufFtcclxuXSkvZywiJiMxMDsiKX19KCk7ZnVuY3Rpb24gdGkoUyl7c3dpdGNoKFMpe2Nhc2UgMTpjYXNl'@;
put 'ITA6Y2FzZSIxIjpjYXNlInRydWUiOmNhc2UiVFJVRSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19dmFyIGdhPWZ1bmN0aW9uKFIpe2Zvcih2YXIgaz0iIixHPTAsUT0wLGFlPTAsZ2U9MCxwZT0wLHllPTA7RzxSLmxlbmd0aDspKFE9Ui5jaGFyQ29kZUF0KEcrKykpPDEyOD9rKz1TdHJp'@;
put 'bmcuZnJvbUNoYXJDb2RlKFEpOihhZT1SLmNoYXJDb2RlQXQoRysrKSxRPjE5MSYmUTwyMjQ/KHBlPSgzMSZRKTw8NixwZXw9NjMmYWUsays9U3RyaW5nLmZyb21DaGFyQ29kZShwZSkpOihnZT1SLmNoYXJDb2RlQXQoRysrKSxRPDI0MD9rKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZRKTw8'@;
put 'MTJ8KDYzJmFlKTw8Nnw2MyZnZSk6KHllPSgoNyZRKTw8MTh8KDYzJmFlKTw8MTJ8KDYzJmdlKTw8Nnw2MyYocGU9Ui5jaGFyQ29kZUF0KEcrKykpKS02NTUzNixrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2Kyh5ZT4+PjEwJjEwMjMpKSxrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIw'@;
put 'KygxMDIzJnllKSkpKSk7cmV0dXJuIGt9LE5zPWZ1bmN0aW9uKFMpe2Zvcih2YXIgUj1bXSxrPTAsRz0wLFE9MDtrPFMubGVuZ3RoOylzd2l0Y2goRz1TLmNoYXJDb2RlQXQoaysrKSwhMCl7Y2FzZSBHPDEyODpSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShHKSk7YnJlYWs7Y2FzZSBHPDIw'@;
put 'NDg6Ui5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTkyKyhHPj42KSkpLFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmRykpKTticmVhaztjYXNlIEc+PTU1Mjk2JiZHPDU3MzQ0OkctPTU1Mjk2LFE9Uy5jaGFyQ29kZUF0KGsrKyktNTYzMjArKEc8PDEwKSxSLnB1c2goU3Ry'@;
put 'aW5nLmZyb21DaGFyQ29kZSgyNDArKFE+PjE4JjcpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTQ0KyhRPj4xMiY2MykpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKFE+PjYmNjMpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZRKSkpO2JyZWFr'@;
put 'O2RlZmF1bHQ6Ui5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjI0KyhHPj4xMikpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKEc+PjYmNjMpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4Kyg2MyZHKSkpfXJldHVybiBSLmpvaW4oIiIpfTtpZihUZSl7dmFyIGJs'@;
put 'PWZ1bmN0aW9uKFIpe3ZhciBHLFEseWUsaz1CdWZmZXIuYWxsb2MoMipSLmxlbmd0aCksYWU9MSxnZT0wLHBlPTA7Zm9yKFE9MDtRPFIubGVuZ3RoO1ErPWFlKWFlPTEsKHllPVIuY2hhckNvZGVBdChRKSk8MTI4P0c9eWU6eWU8MjI0PyhHPTY0KigzMSZ5ZSkrKDYzJlIuY2hhckNvZGVBdChR'@;
put 'KzEpKSxhZT0yKTp5ZTwyNDA/KEc9NDA5NiooMTUmeWUpKzY0Kig2MyZSLmNoYXJDb2RlQXQoUSsxKSkrKDYzJlIuY2hhckNvZGVBdChRKzIpKSxhZT0zKTooYWU9NCxHPTI2MjE0NCooNyZ5ZSkrNDA5NiooNjMmUi5jaGFyQ29kZUF0KFErMSkpKzY0Kig2MyZSLmNoYXJDb2RlQXQoUSsyKSkr'@;
put 'KDYzJlIuY2hhckNvZGVBdChRKzMpKSxwZT01NTI5NisoKEctPTY1NTM2KT4+PjEwJjEwMjMpLEc9NTYzMjArKDEwMjMmRykpLDAhPT1wZSYmKGtbZ2UrK109MjU1JnBlLGtbZ2UrK109cGU+Pj44LHBlPTApLGtbZ2UrK109RyUyNTYsa1tnZSsrXT1HPj4+ODtyZXR1cm4gay5zbGljZSgwLGdl'@;
put 'KS50b1N0cmluZygidWNzMiIpfSxmdT0iZm9vIGJhciBiYXpceGUyXHg5OFx4ODNceGYwXHg5Zlx4OGRceGEzIjtnYShmdSk9PWJsKGZ1KSYmKGdhPWJsKTt2YXIgUmM9ZnVuY3Rpb24oUil7cmV0dXJuIFNlKFIsImJpbmFyeSIpLnRvU3RyaW5nKCJ1dGY4Iil9O2dhKGZ1KT09UmMoZnUpJiYo'@;
put 'Z2E9UmMpLE5zPWZ1bmN0aW9uKFMpe3JldHVybiBTZShTLCJ1dGY4IikudG9TdHJpbmcoImJpbmFyeSIpfX12YXIgUyxrMD1mdW5jdGlvbigpe3ZhciBTPXt9O3JldHVybiBmdW5jdGlvbihrLEcpe3ZhciBRPWsrInwiKyhHfHwiIik7cmV0dXJuIFNbUV0/U1tRXTpTW1FdPW5ldyBSZWdFeHAo'@;
put 'IjwoPzpcXHcrOik/IitrKycoPzogeG1sOnNwYWNlPSJwcmVzZXJ2ZSIpPyg/OltePl0qKT4oW1xcc1xcU10qPyk8Lyg/Olxcdys6KT8nK2srIj4iLEd8fCIiKX19KCksaXI9KFM9W1sibmJzcCIsIiAiXSxbIm1pZGRvdCIsIlx4YjciXSxbInF1b3QiLCciJ10sWyJhcG9zIiwiJyJdLFsiZ3Qi'@;
put 'LCI+Il0sWyJsdCIsIjwiXSxbImFtcCIsIiYiXV0ubWFwKGZ1bmN0aW9uKFIpe3JldHVybltuZXcgUmVnRXhwKCImIitSWzBdKyI7IiwiaWciKSxSWzFdXX0pLGZ1bmN0aW9uKGspe2Zvcih2YXIgRz1rLnJlcGxhY2UoL15bXHRcblxyIF0rLywiIikucmVwbGFjZSgvW1x0XG5cciBdKyQvLCIi'@;
put 'KS5yZXBsYWNlKC9bXHRcblxyIF0rL2csIiAiKS5yZXBsYWNlKC88XHMqW2JCXVtyUl1ccypcLz8+L2csIlxuIikucmVwbGFjZSgvPFtePl0qPi9nLCIiKSxRPTA7UTxTLmxlbmd0aDsrK1EpRz1HLnJlcGxhY2UoU1tRXVswXSxTW1FdWzFdKTtyZXR1cm4gR30pLEVvPWZ1bmN0aW9uKCl7dmFy'@;
put 'IFM9e307cmV0dXJuIGZ1bmN0aW9uKGspe3JldHVybiB2b2lkIDAhPT1TW2tdP1Nba106U1trXT1uZXcgUmVnRXhwKCI8KD86dnQ6KT8iK2srIj4oW1xcc1xcU10qPyk8Lyg/OnZ0Oik/IitrKyI+IiwiZyIpfX0oKSxsaT0vPFwvPyg/OnZ0Oik/dmFyaWFudD4vZyxWdD0vPCg/OnZ0OikoW14+'@;
put 'XSopPihbXHNcU10qKTwvO2Z1bmN0aW9uIEpyKFMsUil7dmFyIGs9dnIoUyksRz1TLm1hdGNoKEVvKGsuYmFzZVR5cGUpKXx8W10sUT1bXTtpZihHLmxlbmd0aCE9ay5zaXplKXtpZihSLldURil0aHJvdyBuZXcgRXJyb3IoInVuZXhwZWN0ZWQgdmVjdG9yIGxlbmd0aCAiK0cubGVuZ3RoKyIg'@;
put 'IT0gIitrLnNpemUpO3JldHVybiBRfXJldHVybiBHLmZvckVhY2goZnVuY3Rpb24oYWUpe3ZhciBnZT1hZS5yZXBsYWNlKGxpLCIiKS5tYXRjaChWdCk7Z2UmJlEucHVzaCh7djpnYShnZVsyXSksdDpnZVsxXX0pfSksUX12YXIgdjA9LyheXHN8XHMkfFxuKS87ZnVuY3Rpb24gTm8oUyxSKXty'@;
put 'ZXR1cm4iPCIrUysoUi5tYXRjaCh2MCk/JyB4bWw6c3BhY2U9InByZXNlcnZlIic6IiIpKyI+IitSKyI8LyIrUysiPiJ9ZnVuY3Rpb24gSXUoUyl7cmV0dXJuIFJlKFMpLm1hcChmdW5jdGlvbihSKXtyZXR1cm4iICIrUisnPSInK1NbUl0rJyInfSkuam9pbigiIil9ZnVuY3Rpb24gUHIoUyxS'@;
put 'LGspe3JldHVybiI8IitTKyhudWxsIT1rP0l1KGspOiIiKSsobnVsbCE9Uj8oUi5tYXRjaCh2MCk/JyB4bWw6c3BhY2U9InByZXNlcnZlIic6IiIpKyI+IitSKyI8LyIrUzoiLyIpKyI+In1mdW5jdGlvbiBhZihTLFIpe3RyeXtyZXR1cm4gUy50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQq'@;
put 'LywiIil9Y2F0Y2goayl7aWYoUil0aHJvdyBrfXJldHVybiIifXZhciAkaCxLaCxZaT17ZGM6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIixkY3Rlcm1zOiJodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvIixkY21pdHlwZToiaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlLyIs'@;
put 'bXg6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL21hYy9leGNlbC8yMDA4L21haW4iLHI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMiLHNqczoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1h'@;
put 'dHMub3JnL3BhY2thZ2UvMjAwNi9zaGVldGpzL2NvcmUtcHJvcGVydGllcyIsdnQ6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2RvY1Byb3BzVlR5cGVzIix4c2k6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNl'@;
put 'Iix4c2Q6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIixtYWluOlsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVhZHNoZWV0bWwvMjAwNi9tYWluIiwiaHR0cDovL3B1cmwub2NsYy5vcmcvb294bWwvc3ByZWFkc2hlZXRtbC9tYWluIiwiaHR0cDovL3Nj'@;
put 'aGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi9tYWluIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvZXhjZWwvMjAwNi8yIl19LHlsPXtvOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpvZmZpY2UiLHg6InVybjpzY2hlbWFzLW1pY3Jv'@;
put 'c29mdC1jb206b2ZmaWNlOmV4Y2VsIixzczoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6c3ByZWFkc2hlZXQiLGR0OiJ1dWlkOkMyRjQxMDEwLTY1QjMtMTFkMS1BMjlGLTAwQUEwMEMxNDg4MiIsbXY6Imh0dHA6Ly9tYWNWbWxTY2hlbWFVcmkiLHY6InVybjpzY2hlbWFzLW1p'@;
put 'Y3Jvc29mdC1jb206dm1sIixodG1sOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0sYjA9ZnVuY3Rpb24oUyl7Zm9yKHZhciBSPVtdLEc9MDtHPFNbMF0ubGVuZ3RoOysrRylpZihTWzBdW0ddKWZvcih2YXIgUT0wLGFlPVNbMF1bR10ubGVuZ3RoO1E8YWU7USs9MTAyNDApUi5w'@;
put 'dXNoLmFwcGx5KFIsU1swXVtHXS5zbGljZShRLFErMTAyNDApKTtyZXR1cm4gUn0sbjU9YjAsT2w9ZnVuY3Rpb24oUyxSLGspe2Zvcih2YXIgRz1bXSxRPVI7UTxrO1ErPTIpRy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZWEoUyxRKSkpO3JldHVybiBHLmpvaW4oIiIpLnJlcGxhY2UoRSwi'@;
put 'Iil9LHNmPU9sLGxkPWZ1bmN0aW9uKFMsUixrKXtmb3IodmFyIEc9W10sUT1SO1E8UitrOysrUSlHLnB1c2goKCIwIitTW1FdLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpKTtyZXR1cm4gRy5qb2luKCIiKX0sbGY9bGQsazE9ZnVuY3Rpb24oUyxSLGspe2Zvcih2YXIgRz1bXSxRPVI7UTxrO1Er'@;
put 'KylHLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShQYShTLFEpKSk7cmV0dXJuIEcuam9pbigiIil9LGNmPWsxLHRoPWZ1bmN0aW9uKFMsUil7dmFyIGs9emEoUyxSKTtyZXR1cm4gaz4wP2sxKFMsUis0LFIrNCtrLTEpOiIifSx1Zj10aCxHaD1mdW5jdGlvbihTLFIpe3ZhciBrPXphKFMsUik7'@;
put 'cmV0dXJuIGs+MD9rMShTLFIrNCxSKzQray0xKToiIn0sTGM9R2gsVm89ZnVuY3Rpb24oUyxSKXt2YXIgaz0yKnphKFMsUik7cmV0dXJuIGs+MD9rMShTLFIrNCxSKzQray0xKToiIn0sRDM9Vm87JGg9S2g9ZnVuY3Rpb24oUixrKXt2YXIgRz16YShSLGspO3JldHVybiBHPjA/T2woUixrKzQs'@;
put 'ays0K0cpOiIifTt2YXIgb24sbWkscWg9ZnVuY3Rpb24oUyxSKXt2YXIgaz16YShTLFIpO3JldHVybiBrPjA/azEoUyxSKzQsUis0K2spOiIifSxBbj1xaDtvbj1taT1mdW5jdGlvbihTLFIpe3JldHVybiBmdW5jdGlvbiBKYyhTLFIpe2Zvcih2YXIgaz0xLTIqKFNbUis3XT4+PjcpLEc9KCgx'@;
put 'MjcmU1tSKzddKTw8NCkrKFNbUis2XT4+PjQmMTUpLFE9MTUmU1tSKzZdLGFlPTU7YWU+PTA7LS1hZSlRPTI1NipRK1NbUithZV07cmV0dXJuIDIwNDc9PUc/MD09UT9rKigxLzApOk5hTjooMD09Rz9HPS0xMDIyOihHLT0xMDIzLFErPU1hdGgucG93KDIsNTIpKSxrKk1hdGgucG93KDIsRy01'@;
put 'MikqUSl9KFMsUil9O3ZhciBBcj1mdW5jdGlvbihSKXtyZXR1cm4gQXJyYXkuaXNBcnJheShSKX07VGUmJihPbD1mdW5jdGlvbihTLFIsayl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihTKT9TLnRvU3RyaW5nKCJ1dGYxNmxlIixSLGspLnJlcGxhY2UoRSwiIik6c2YoUyxSLGspfSxsZD1mdW5j'@;
put 'dGlvbihTLFIsayl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihTKT9TLnRvU3RyaW5nKCJoZXgiLFIsUitrKTpsZihTLFIsayl9LHRoPWZ1bmN0aW9uKFIsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihSKSlyZXR1cm4gdWYoUixrKTt2YXIgRz1SLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gRz4wP1Iu'@;
put 'dG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrRy0xKToiIn0sR2g9ZnVuY3Rpb24oUixrKXtpZighQnVmZmVyLmlzQnVmZmVyKFIpKXJldHVybiBMYyhSLGspO3ZhciBHPVIucmVhZFVJbnQzMkxFKGspO3JldHVybiBHPjA/Ui50b1N0cmluZygidXRmOCIsays0LGsrNCtHLTEpOiIifSxWbz1mdW5j'@;
put 'dGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoUikpcmV0dXJuIEQzKFIsayk7dmFyIEc9MipSLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gUi50b1N0cmluZygidXRmMTZsZSIsays0LGsrNCtHLTEpfSwkaD1mdW5jdGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoUikpcmV0dXJuIEto'@;
put 'KFIsayk7dmFyIEc9Ui5yZWFkVUludDMyTEUoayk7cmV0dXJuIFIudG9TdHJpbmcoInV0ZjE2bGUiLGsrNCxrKzQrRyl9LHFoPWZ1bmN0aW9uKFIsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihSKSlyZXR1cm4gQW4oUixrKTt2YXIgRz1SLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gUi50b1N0cmlu'@;
put 'ZygidXRmOCIsays0LGsrNCtHKX0sazE9ZnVuY3Rpb24oUixrLEcpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUik/Ui50b1N0cmluZygidXRmOCIsayxHKTpjZihSLGssRyl9LGIwPWZ1bmN0aW9uKFMpe3JldHVybiBTWzBdLmxlbmd0aD4wJiZCdWZmZXIuaXNCdWZmZXIoU1swXVswXSk/QnVm'@;
put 'ZmVyLmNvbmNhdChTWzBdKTpuNShTKX0saj1mdW5jdGlvbihTKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFNbMF0pP0J1ZmZlci5jb25jYXQoUyk6W10uY29uY2F0LmFwcGx5KFtdLFMpfSxvbj1mdW5jdGlvbihSLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUik/Ui5yZWFkRG91YmxlTEUo'@;
put 'ayk6bWkoUixrKX0sQXI9ZnVuY3Rpb24oUil7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihSKXx8QXJyYXkuaXNBcnJheShSKX0pLHR5cGVvZiBjcHRhYmxlPCJ1IiYmKE9sPWZ1bmN0aW9uKFMsUixrKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxTLnNsaWNlKFIsaykpLnJlcGxh'@;
put 'Y2UoRSwiIil9LGsxPWZ1bmN0aW9uKFMsUixrKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsUy5zbGljZShSLGspKX0sdGg9ZnVuY3Rpb24oUyxSKXt2YXIgaz16YShTLFIpO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoRixTLnNsaWNlKFIrNCxSKzQray0xKSk6'@;
put 'IiJ9LEdoPWZ1bmN0aW9uKFMsUil7dmFyIGs9emEoUyxSKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKFAsUy5zbGljZShSKzQsUis0K2stMSkpOiIifSxWbz1mdW5jdGlvbihTLFIpe3ZhciBrPTIqemEoUyxSKTtyZXR1cm4gaz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAs'@;
put 'Uy5zbGljZShSKzQsUis0K2stMSkpOiIifSwkaD1mdW5jdGlvbihTLFIpe3ZhciBrPXphKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFMuc2xpY2UoUis0LFIrNCtrKSk6IiJ9LHFoPWZ1bmN0aW9uKFMsUil7dmFyIGs9emEoUyxSKTtyZXR1cm4gaz4wP2NwdGFi'@;
put 'bGUudXRpbHMuZGVjb2RlKDY1MDAxLFMuc2xpY2UoUis0LFIrNCtrKSk6IiJ9KTt2YXIgUGE9ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSXX0sZWE9ZnVuY3Rpb24oUyxSKXtyZXR1cm4gMjU2KlNbUisxXStTW1JdfSxhbD1mdW5jdGlvbihTLFIpe3ZhciBrPTI1NipTW1IrMV0rU1tSXTtyZXR1'@;
put 'cm4gazwzMjc2OD9rOi0xKig2NTUzNS1rKzEpfSx6YT1mdW5jdGlvbihTLFIpe3JldHVybiBTW1IrM10qKDE8PDI0KSsoU1tSKzJdPDwxNikrKFNbUisxXTw8OCkrU1tSXX0sVnM9ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSKzNdPDwyNHxTW1IrMl08PDE2fFNbUisxXTw8OHxTW1JdfSxDcz1m'@;
put 'dW5jdGlvbihTLFIpe3JldHVybiBTW1JdPDwyNHxTW1IrMV08PDE2fFNbUisyXTw8OHxTW1IrM119O2Z1bmN0aW9uIEJsKFMsUil7dmFyIEcsUSxnZSxwZSx5ZSxQZSxrPSIiLGFlPVtdO3N3aXRjaChSKXtjYXNlImRiY3MiOmlmKFBlPXRoaXMubCxUZSYmQnVmZmVyLmlzQnVmZmVyKHRoaXMp'@;
put 'KWs9dGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqUykudG9TdHJpbmcoInV0ZjE2bGUiKTtlbHNlIGZvcih5ZT0wO3llPFM7Kyt5ZSlrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVhKHRoaXMsUGUpKSxQZSs9MjtTKj0yO2JyZWFrO2Nhc2UidXRmOCI6az1rMSh0aGlzLHRoaXMubCx0aGlzLmwr'@;
put 'Uyk7YnJlYWs7Y2FzZSJ1dGYxNmxlIjprPU9sKHRoaXMsdGhpcy5sLHRoaXMubCsoUyo9MikpO2JyZWFrO2Nhc2Uid3N0ciI6aWYoISh0eXBlb2YgY3B0YWJsZTwidSIpKXJldHVybiBCbC5jYWxsKHRoaXMsUywiZGJjcyIpO2s9Y3B0YWJsZS51dGlscy5kZWNvZGUoUCx0aGlzLnNsaWNlKHRo'@;
put 'aXMubCx0aGlzLmwrMipTKSksUyo9MjticmVhaztjYXNlImxwc3RyLWFuc2kiOms9dGgodGhpcyx0aGlzLmwpLFM9NCt6YSh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHN0ci1jcCI6az1HaCh0aGlzLHRoaXMubCksUz00K3phKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwd3N0ciI6az1W'@;
put 'byh0aGlzLHRoaXMubCksUz00KzIqemEodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBwNCI6Uz00K3phKHRoaXMsdGhpcy5sKSxrPSRoKHRoaXMsdGhpcy5sKSwyJlMmJihTKz0yKTticmVhaztjYXNlIjhscHA0IjpTPTQremEodGhpcyx0aGlzLmwpLGs9cWgodGhpcyx0aGlzLmwpLDMmUyYm'@;
put 'KFMrPTQtKDMmUykpO2JyZWFrO2Nhc2UiY3N0ciI6Zm9yKFM9MCxrPSIiOzAhPT0oZ2U9UGEodGhpcyx0aGlzLmwrUysrKSk7KWFlLnB1c2gocmUoZ2UpKTtrPWFlLmpvaW4oIiIpO2JyZWFrO2Nhc2UiX3dzdHIiOmZvcihTPTAsaz0iIjswIT09KGdlPWVhKHRoaXMsdGhpcy5sK1MpKTspYWUu'@;
put 'cHVzaChyZShnZSkpLFMrPTI7Uys9MixrPWFlLmpvaW4oIiIpO2JyZWFrO2Nhc2UiZGJjcy1jb250Ijpmb3Ioaz0iIixQZT10aGlzLmwseWU9MDt5ZTxTOysreWUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihQZSkpcmV0dXJuIGdlPVBhKHRoaXMsUGUpLHRoaXMubD1Q'@;
put 'ZSsxLHBlPUJsLmNhbGwodGhpcyxTLXllLGdlPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxhZS5qb2luKCIiKStwZTthZS5wdXNoKHJlKGVhKHRoaXMsUGUpKSksUGUrPTJ9az1hZS5qb2luKCIiKSxTKj0yO2JyZWFrO2Nhc2UiY3BzdHIiOmlmKHR5cGVvZiBjcHRhYmxlPCJ1Iil7az1jcHRh'@;
put 'YmxlLnV0aWxzLmRlY29kZShQLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCtTKSk7YnJlYWt9Y2FzZSJzYmNzLWNvbnQiOmZvcihrPSIiLFBlPXRoaXMubCx5ZT0wO3llIT1TOysreWUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihQZSkpcmV0dXJuIGdlPVBhKHRoaXMs'@;
put 'UGUpLHRoaXMubD1QZSsxLHBlPUJsLmNhbGwodGhpcyxTLXllLGdlPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxhZS5qb2luKCIiKStwZTthZS5wdXNoKHJlKFBhKHRoaXMsUGUpKSksUGUrPTF9az1hZS5qb2luKCIiKTticmVhaztkZWZhdWx0OnN3aXRjaChTKXtjYXNlIDE6cmV0dXJuIEc9'@;
put 'UGEodGhpcyx0aGlzLmwpLHRoaXMubCsrLEc7Y2FzZSAyOnJldHVybiBHPSgiaSI9PT1SP2FsOmVhKSh0aGlzLHRoaXMubCksdGhpcy5sKz0yLEc7Y2FzZSA0OmNhc2UtNDpyZXR1cm4iaSIhPT1SJiYxMjgmdGhpc1t0aGlzLmwrM10/KFE9emEodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxRKToo'@;
put 'Rz0oUz4wP1ZzOkNzKSh0aGlzLHRoaXMubCksdGhpcy5sKz00LEcpO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09UilyZXR1cm4gUT04PT1TP29uKHRoaXMsdGhpcy5sKTpvbihbdGhpc1t0aGlzLmwrN10sdGhpc1t0aGlzLmwrNl0sdGhpc1t0aGlzLmwrNV0sdGhpc1t0aGlzLmwrNF0sdGhpc1t0'@;
put 'aGlzLmwrM10sdGhpc1t0aGlzLmwrMl0sdGhpc1t0aGlzLmwrMV0sdGhpc1t0aGlzLmwrMF1dLDApLHRoaXMubCs9OCxRO1M9ODtjYXNlIDE2Oms9bGQodGhpcyx0aGlzLmwsUyl9fXJldHVybiB0aGlzLmwrPVMsa312YXIgSGE9ZnVuY3Rpb24oUyxSLGspe1Nba109MjU1JlIsU1trKzFdPVI+'@;
put 'Pj44JjI1NSxTW2srMl09Uj4+PjE2JjI1NSxTW2srM109Uj4+PjI0JjI1NX0sa2E9ZnVuY3Rpb24oUyxSLGspe1Nba109MjU1JlIsU1trKzFdPVI+PjgmMjU1LFNbaysyXT1SPj4xNiYyNTUsU1trKzNdPVI+PjI0JjI1NX0sU3Q9ZnVuY3Rpb24oUyxSLGspe1Nba109MjU1JlIsU1trKzFdPVI+'@;
put 'Pj44JjI1NX07ZnVuY3Rpb24gQnQoUyxSLGspe3ZhciBHPTAsUT0wO2lmKCJkYmNzIj09PWspe2ZvcihRPTA7USE9Ui5sZW5ndGg7KytRKVN0KHRoaXMsUi5jaGFyQ29kZUF0KFEpLHRoaXMubCsyKlEpO0c9MipSLmxlbmd0aH1lbHNlIGlmKCJzYmNzIj09PWspe2lmKHR5cGVvZiBjcHRhYmxl'@;
put 'PCJ1IiYmODc0PT1GKWZvcihRPTA7USE9Ui5sZW5ndGg7KytRKXt2YXIgYWU9Y3B0YWJsZS51dGlscy5lbmNvZGUoRixSLmNoYXJBdChRKSk7dGhpc1t0aGlzLmwrUV09YWVbMF19ZWxzZSBmb3IoUj1SLnJlcGxhY2UoL1teXHgwMC1ceDdGXS9nLCJfIiksUT0wO1EhPVIubGVuZ3RoOysrUSl0'@;
put 'aGlzW3RoaXMubCtRXT0yNTUmUi5jaGFyQ29kZUF0KFEpO0c9Ui5sZW5ndGh9ZWxzZXtpZigiaGV4Ij09PWspe2Zvcig7UTxTOysrUSl0aGlzW3RoaXMubCsrXT1wYXJzZUludChSLnNsaWNlKDIqUSwyKlErMiksMTYpfHwwO3JldHVybiB0aGlzfWlmKCJ1dGYxNmxlIj09PWspe3ZhciBnZT1N'@;
put 'YXRoLm1pbih0aGlzLmwrUyx0aGlzLmxlbmd0aCk7Zm9yKFE9MDtRPE1hdGgubWluKFIubGVuZ3RoLFMpOysrUSl7dmFyIHBlPVIuY2hhckNvZGVBdChRKTt0aGlzW3RoaXMubCsrXT0yNTUmcGUsdGhpc1t0aGlzLmwrK109cGU+Pjh9Zm9yKDt0aGlzLmw8Z2U7KXRoaXNbdGhpcy5sKytdPTA7'@;
put 'cmV0dXJuIHRoaXN9c3dpdGNoKFMpe2Nhc2UgMTpHPTEsdGhpc1t0aGlzLmxdPTI1NSZSO2JyZWFrO2Nhc2UgMjpHPTIsdGhpc1t0aGlzLmxdPTI1NSZSLHRoaXNbdGhpcy5sKzFdPTI1NSYoUj4+Pj04KTticmVhaztjYXNlIDM6Rz0zLHRoaXNbdGhpcy5sXT0yNTUmUix0aGlzW3RoaXMubCsx'@;
put 'XT0yNTUmKFI+Pj49OCksdGhpc1t0aGlzLmwrMl09MjU1JihSPj4+PTgpO2JyZWFrO2Nhc2UgNDpHPTQsSGEodGhpcyxSLHRoaXMubCk7YnJlYWs7Y2FzZSA4OmlmKEc9OCwiZiI9PT1rKXshZnVuY3Rpb24gdDUoUyxSLGspe3ZhciBHPShSPDB8fDEvUj09LTEvMD8xOjApPDw3LFE9MCxhZT0w'@;
put 'LGdlPUc/LVI6Ujtpc0Zpbml0ZShnZSk/MD09Z2U/UT1hZT0wOihRPU1hdGguZmxvb3IoTWF0aC5sb2coZ2UpL01hdGguTE4yKSxhZT1nZSpNYXRoLnBvdygyLDUyLVEpLFE8PS0xMDIzJiYoIWlzRmluaXRlKGFlKXx8YWU8TWF0aC5wb3coMiw1MikpP1E9LTEwMjI6KGFlLT1NYXRoLnBvdygy'@;
put 'LDUyKSxRKz0xMDIzKSk6KFE9MjA0NyxhZT1pc05hTihSKT8yNjk4NTowKTtmb3IodmFyIHBlPTA7cGU8PTU7KytwZSxhZS89MjU2KVNbaytwZV09MjU1JmFlO1Nbays2XT0oMTUmUSk8PDR8MTUmYWUsU1trKzddPVE+PjR8R30odGhpcyxSLHRoaXMubCk7YnJlYWt9Y2FzZSAxNjpicmVhaztj'@;
put 'YXNlLTQ6Rz00LGthKHRoaXMsUix0aGlzLmwpfX1yZXR1cm4gdGhpcy5sKz1HLHRoaXN9ZnVuY3Rpb24gX24oUyxSKXt2YXIgaz1sZCh0aGlzLHRoaXMubCxTLmxlbmd0aD4+MSk7aWYoayE9PVMpdGhyb3cgbmV3IEVycm9yKFIrIkV4cGVjdGVkICIrUysiIHNhdyAiK2spO3RoaXMubCs9Uy5s'@;
put 'ZW5ndGg+PjF9ZnVuY3Rpb24gbW4oUyxSKXtTLmw9UixTLnJlYWRfc2hpZnQ9QmwsUy5jaGs9X24sUy53cml0ZV9zaGlmdD1CdH1mdW5jdGlvbiBJbihTLFIpe1MubCs9Un1mdW5jdGlvbiBibihTKXt2YXIgUj1WKFMpO3JldHVybiBtbihSLDApLFJ9ZnVuY3Rpb24gdXIoUyxSLGspe2lmKFMp'@;
put 'e3ZhciBHLFEsYWU7bW4oUyxTLmx8fDApO2Zvcih2YXIgZ2U9Uy5sZW5ndGgscGU9MCx5ZT0wO1MubDxnZTspezEyOCYocGU9Uy5yZWFkX3NoaWZ0KDEpKSYmKHBlPSgxMjcmcGUpKygoMTI3JlMucmVhZF9zaGlmdCgxKSk8PDcpKTt2YXIgUGU9UjhbcGVdfHxSOFs2NTUzNV07Zm9yKGFlPTEy'@;
put 'NyYoRz1TLnJlYWRfc2hpZnQoMSkpLFE9MTtRPDQmJjEyOCZHOysrUSlhZSs9KDEyNyYoRz1TLnJlYWRfc2hpZnQoMSkpKTw8NypRO3llPVMubCthZTt2YXIgTmU9KFBlLmZ8fEluKShTLGFlLGspO2lmKFMubD15ZSxSKE5lLFBlLm4scGUpKXJldHVybn19fWZ1bmN0aW9uIHZpKCl7dmFyIFM9'@;
put 'W10sUj1UZT8yNTY6MjA0OCxrPWZ1bmN0aW9uKFBlKXt2YXIgTmU9Ym4oUGUpO3JldHVybiBtbihOZSwwKSxOZX0sRz1rKFIpLFE9ZnVuY3Rpb24oKXtHJiYoRy5sZW5ndGg+Ry5sJiYoKEc9Ry5zbGljZSgwLEcubCkpLmw9Ry5sZW5ndGgpLEcubGVuZ3RoPjAmJlMucHVzaChHKSxHPW51bGwp'@;
put 'fSxhZT1mdW5jdGlvbihQZSl7cmV0dXJuIEcmJlBlPEcubGVuZ3RoLUcubD9HOihRKCksRz1rKE1hdGgubWF4KFBlKzEsUikpKX07cmV0dXJue25leHQ6YWUscHVzaDpmdW5jdGlvbihQZSl7USgpLG51bGw9PShHPVBlKS5sJiYoRy5sPUcubGVuZ3RoKSxhZShSKX0sZW5kOmZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIFEoKSxiMChbU10pfSxfYnVmczpTfX1mdW5jdGlvbiBGcihTLFIsayxHKXt2YXIgYWUsUT0rRnpbUl07aWYoIWlzTmFOKFEpKXtHfHwoRz1SOFtRXS5wfHwoa3x8W10pLmxlbmd0aHx8MCksYWU9MSsoUT49MTI4PzE6MCkrMSxHPj0xMjgmJisrYWUsRz49MTYzODQmJisrYWUsRz49'@;
put 'MjA5NzE1MiYmKythZTt2YXIgZ2U9Uy5uZXh0KGFlKTtRPD0xMjc/Z2Uud3JpdGVfc2hpZnQoMSxRKTooZ2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZRKSksZ2Uud3JpdGVfc2hpZnQoMSxRPj43KSk7Zm9yKHZhciBwZT0wOzQhPXBlOysrcGUpe2lmKCEoRz49MTI4KSl7Z2Uud3JpdGVfc2hp'@;
put 'ZnQoMSxHKTticmVha31nZS53cml0ZV9zaGlmdCgxLDEyOCsoMTI3JkcpKSxHPj49N31HPjAmJkFyKGspJiZTLnB1c2goayl9fWZ1bmN0aW9uIG5vKFMsUixrKXt2YXIgRz1xdChTKTtpZihSLnM/KEcuY1JlbCYmKEcuYys9Ui5zLmMpLEcuclJlbCYmKEcucis9Ui5zLnIpKTooRy5jUmVsJiYo'@;
put 'Ry5jKz1SLmMpLEcuclJlbCYmKEcucis9Ui5yKSksIWt8fGsuYmlmZjwxMil7Zm9yKDtHLmM+PTI1NjspRy5jLT0yNTY7Zm9yKDtHLnI+PTY1NTM2OylHLnItPTY1NTM2fXJldHVybiBHfWZ1bmN0aW9uIHNvKFMsUixrKXt2YXIgRz1xdChTKTtyZXR1cm4gRy5zPW5vKEcucyxSLnMsayksRy5l'@;
put 'PW5vKEcuZSxSLnMsayksR31mdW5jdGlvbiBCbyhTLFIpe2lmKFMuY1JlbCYmUy5jPDApZm9yKFM9cXQoUyk7Uy5jPDA7KVMuYys9Uj44PzE2Mzg0OjI1NjtpZihTLnJSZWwmJlMucjwwKWZvcihTPXF0KFMpO1MucjwwOylTLnIrPVI+OD8xMDQ4NTc2OlI+NT82NTUzNjoxNjM4NDtpZihTLmNS'@;
put 'ZWwmJlMuYz49KFI+OD8xNjM4NDoyNTYpKWZvcihTPXF0KFMpO1MuYz49KFI+OD8xNjM4NDoyNTYpOylTLmMtPVI+OD8xNjM4NDoyNTY7aWYoUy5yUmVsJiZTLnI+PTEwNDg1NzYpZm9yKFM9cXQoUyk7Uy5yPj0xMDQ4NTc2OylTLnItPTEwNDg1NzY7dmFyIGs9cWkoUyk7cmV0dXJuIVMuY1Jl'@;
put 'bCYmbnVsbCE9Uy5jUmVsJiYoaz1mdW5jdGlvbiBYaChTKXtyZXR1cm4gUy5yZXBsYWNlKC9eKFtBLVpdKS8sIiQkJDEiKX0oaykpLCFTLnJSZWwmJm51bGwhPVMuclJlbCYmKGs9ZnVuY3Rpb24gT2MoUyl7cmV0dXJuIFMucmVwbGFjZSgvKFtBLVpdfF4pKFxkKykkLywiJDEkJCQyIil9KGsp'@;
put 'KSxrfWZ1bmN0aW9uICRhKFMsUil7cmV0dXJuIDAhPVMucy5yfHxTLnMuclJlbHx8Uy5lLnIhPShSLmJpZmY+PTEyPzEwNDg1NzU6Ui5iaWZmPj04PzY1NTM2OjE2Mzg0KXx8Uy5lLnJSZWw/MCE9Uy5zLmN8fFMucy5jUmVsfHxTLmUuYyE9KFIuYmlmZj49MTI/MTYzODM6MjU1KXx8Uy5lLmNS'@;
put 'ZWw/Qm8oUy5zLFIuYmlmZikrIjoiK0JvKFMuZSxSLmJpZmYpOihTLnMuclJlbD8iIjoiJCIpK2ppKFMucy5yKSsiOiIrKFMuZS5yUmVsPyIiOiIkIikramkoUy5lLnIpOihTLnMuY1JlbD8iIjoiJCIpK0FvKFMucy5jKSsiOiIrKFMuZS5jUmVsPyIiOiIkIikrQW8oUy5lLmMpfXZhciBLbD17'@;
put 'fTtmdW5jdGlvbiBfYShTKXtyZXR1cm4gcGFyc2VJbnQoZnVuY3Rpb24gamwoUyl7cmV0dXJuIFMucmVwbGFjZSgvXCQoXGQrKSQvLCIkMSIpfShTKSwxMCktMX1mdW5jdGlvbiBqaShTKXtyZXR1cm4iIisoUysxKX1mdW5jdGlvbiBTbyhTKXtmb3IodmFyIFI9ZnVuY3Rpb24gRzAoUyl7cmV0'@;
put 'dXJuIFMucmVwbGFjZSgvXlwkKFtBLVpdKS8sIiQxIil9KFMpLGs9MCxHPTA7RyE9PVIubGVuZ3RoOysrRylrPTI2KmsrUi5jaGFyQ29kZUF0KEcpLTY0O3JldHVybiBrLTF9ZnVuY3Rpb24gQW8oUyl7aWYoUzwwKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjb2x1bW4gIitTKTt2YXIgUj0i'@;
put 'Ijtmb3IoKytTO1M7Uz1NYXRoLmZsb29yKChTLTEpLzI2KSlSPVN0cmluZy5mcm9tQ2hhckNvZGUoKFMtMSklMjYrNjUpK1I7cmV0dXJuIFJ9ZnVuY3Rpb24gTmEoUyl7Zm9yKHZhciBSPTAsaz0wLEc9MDtHPFMubGVuZ3RoOysrRyl7dmFyIFE9Uy5jaGFyQ29kZUF0KEcpO1E+PTQ4JiZRPD01'@;
put 'Nz9SPTEwKlIrKFEtNDgpOlE+PTY1JiZRPD05MCYmKGs9MjYqaysoUS02NCkpfXJldHVybntjOmstMSxyOlItMX19ZnVuY3Rpb24gcWkoUyl7Zm9yKHZhciBSPVMuYysxLGs9IiI7UjtSPShSLTEpLzI2fDApaz1TdHJpbmcuZnJvbUNoYXJDb2RlKChSLTEpJTI2KzY1KStrO3JldHVybiBrKyhT'@;
put 'LnIrMSl9ZnVuY3Rpb24gU3MoUyl7dmFyIFI9Uy5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PVI/e3M6TmEoUyksZTpOYShTKX06e3M6TmEoUy5zbGljZSgwLFIpKSxlOk5hKFMuc2xpY2UoUisxKSl9fWZ1bmN0aW9uIGlvKFMsUil7cmV0dXJuIHR5cGVvZiBSPiJ1Inx8Im51bWJlciI9PXR5cGVv'@;
put 'ZiBSP2lvKFMucyxTLmUpOigic3RyaW5nIiE9dHlwZW9mIFMmJihTPXFpKFMpKSwic3RyaW5nIiE9dHlwZW9mIFImJihSPXFpKFIpKSxTPT1SP1M6UysiOiIrUil9ZnVuY3Rpb24gYWEoUyl7dmFyIFI9SlNPTi5wYXJzZSgneyJzIjp7ImMiOjAsInIiOjB9LCJlIjp7ImMiOjAsInIiOjB9fScp'@;
put 'LGs9MCxHPTAsUT0wLGFlPVMubGVuZ3RoO2ZvcihrPTA7RzxhZSYmISgoUT1TLmNoYXJDb2RlQXQoRyktNjQpPDF8fFE+MjYpOysrRylrPTI2KmsrUTtmb3IoUi5zLmM9LS1rLGs9MDtHPGFlJiYhKChRPVMuY2hhckNvZGVBdChHKS00OCk8MHx8UT45KTsrK0cpaz0xMCprK1E7aWYoUi5zLnI9'@;
put 'LS1rLEc9PT1hZXx8NTg9PT1TLmNoYXJDb2RlQXQoKytHKSlyZXR1cm4gUi5lLmM9Ui5zLmMsUi5lLnI9Ui5zLnIsUjtmb3Ioaz0wO0chPWFlJiYhKChRPVMuY2hhckNvZGVBdChHKS02NCk8MXx8UT4yNik7KytHKWs9MjYqaytRO2ZvcihSLmUuYz0tLWssaz0wO0chPWFlJiYhKChRPVMuY2hh'@;
put 'ckNvZGVBdChHKS00OCk8MHx8UT45KTsrK0cpaz0xMCprK1E7cmV0dXJuIFIuZS5yPS0tayxSfWZ1bmN0aW9uIHI1KFMsUil7dmFyIGs9ImQiPT1TLnQmJlIgaW5zdGFuY2VvZiBEYXRlO2lmKG51bGwhPVMueil0cnl7cmV0dXJuIFMudz1BLmZvcm1hdChTLnosaz9RZShSKTpSKX1jYXRjaHt9'@;
put 'dHJ5e3JldHVybiBTLnc9QS5mb3JtYXQoKFMuWEZ8fHt9KS5udW1GbXRJZHx8KGs/MTQ6MCksaz9RZShSKTpSKX1jYXRjaHtyZXR1cm4iIitSfX1mdW5jdGlvbiBfbChTLFIsayl7cmV0dXJuIG51bGw9PVN8fG51bGw9PVMudHx8InoiPT1TLnQ/IiI6dm9pZCAwIT09Uy53P1MudzooImQiPT1T'@;
put 'LnQmJiFTLnomJmsmJmsuZGF0ZU5GJiYoUy56PWsuZGF0ZU5GKSwiZSI9PVMudD9NY1tTLnZdfHxTLnY6cjUoUyxudWxsPT1SP1MudjpSKSl9ZnVuY3Rpb24gbmgoUyxSKXt2YXIgaz1SJiZSLnNoZWV0P1Iuc2hlZXQ6IlNoZWV0MSIsRz17fTtyZXR1cm4gR1trXT1TLHtTaGVldE5hbWVzOltr'@;
put 'XSxTaGVldHM6R319ZnVuY3Rpb24gZjQoUyxSLGspe3ZhciBHPWt8fHt9LFE9Uz9BcnJheS5pc0FycmF5KFMpOkcuZGVuc2U7bnVsbCE9bGUmJm51bGw9PVEmJihRPWxlKTt2YXIgYWU9U3x8KFE/W106e30pLGdlPTAscGU9MDtpZihhZSYmbnVsbCE9Ry5vcmlnaW4pe2lmKCJudW1iZXIiPT10'@;
put 'eXBlb2YgRy5vcmlnaW4pZ2U9Ry5vcmlnaW47ZWxzZXt2YXIgeWU9InN0cmluZyI9PXR5cGVvZiBHLm9yaWdpbj9OYShHLm9yaWdpbik6Ry5vcmlnaW47Z2U9eWUucixwZT15ZS5jfWFlWyIhcmVmIl18fChhZVsiIXJlZiJdPSJBMTpBMSIpfXZhciBQZT17czp7YzoxZTcscjoxZTd9LGU6e2M6'@;
put 'MCxyOjB9fTtpZihhZVsiIXJlZiJdKXt2YXIgTmU9YWEoYWVbIiFyZWYiXSk7UGUucy5jPU5lLnMuYyxQZS5zLnI9TmUucy5yLFBlLmUuYz1NYXRoLm1heChQZS5lLmMsTmUuZS5jKSxQZS5lLnI9TWF0aC5tYXgoUGUuZS5yLE5lLmUuciksLTE9PWdlJiYoUGUuZS5yPWdlPU5lLmUucisxKX1m'@;
put 'b3IodmFyIFllPTA7WWUhPVIubGVuZ3RoOysrWWUpaWYoUltZZV0pe2lmKCFBcnJheS5pc0FycmF5KFJbWWVdKSl0aHJvdyBuZXcgRXJyb3IoImFvYV90b19zaGVldCBleHBlY3RzIGFuIGFycmF5IG9mIGFycmF5cyIpO2Zvcih2YXIgZXQ9MDtldCE9UltZZV0ubGVuZ3RoOysrZXQpaWYoISh0'@;
put 'eXBlb2YgUltZZV1bZXRdPiJ1Iikpe3ZhciBjdD17djpSW1llXVtldF19LEV0PWdlK1llLG90PXBlK2V0O2lmKFBlLnMucj5FdCYmKFBlLnMucj1FdCksUGUucy5jPm90JiYoUGUucy5jPW90KSxQZS5lLnI8RXQmJihQZS5lLnI9RXQpLFBlLmUuYzxvdCYmKFBlLmUuYz1vdCksIVJbWWVdW2V0'@;
put 'XXx8Im9iamVjdCIhPXR5cGVvZiBSW1llXVtldF18fEFycmF5LmlzQXJyYXkoUltZZV1bZXRdKXx8UltZZV1bZXRdaW5zdGFuY2VvZiBEYXRlKWlmKEFycmF5LmlzQXJyYXkoY3QudikmJihjdC5mPVJbWWVdW2V0XVsxXSxjdC52PWN0LnZbMF0pLG51bGw9PT1jdC52KWlmKGN0LmYpY3QudD0i'@;
put 'biI7ZWxzZSBpZihHLm51bGxFcnJvciljdC50PSJlIixjdC52PTA7ZWxzZXtpZighRy5zaGVldFN0dWJzKWNvbnRpbnVlO2N0LnQ9InoifWVsc2UibnVtYmVyIj09dHlwZW9mIGN0LnY/Y3QudD0ibiI6ImJvb2xlYW4iPT10eXBlb2YgY3Qudj9jdC50PSJiIjpjdC52IGluc3RhbmNlb2YgRGF0'@;
put 'ZT8oY3Quej1HLmRhdGVORnx8QS5fdGFibGVbMTRdLEcuY2VsbERhdGVzPyhjdC50PSJkIixjdC53PUEuZm9ybWF0KGN0LnosUWUoY3QudikpKTooY3QudD0ibiIsY3Qudj1RZShjdC52KSxjdC53PUEuZm9ybWF0KGN0LnosY3QudikpKTpjdC50PSJzIjtlbHNlIGN0PVJbWWVdW2V0XTtpZihj'@;
put 'dCYmY3QuaCl0cnl7Y3QuUj12ZC5odG1sX3RvX3JzKGN0LmgpLGN0LnY9IiI7Zm9yKHZhciBidD0wO2J0PGN0LlIubGVuZ3RoOysrYnQpY3Qudis9Y3QuUltidF0udnx8IiJ9Y2F0Y2h7fWlmKFEpYWVbRXRdfHwoYWVbRXRdPVtdKSxhZVtFdF1bb3RdJiZhZVtFdF1bb3RdLnMmJihjdC5zPWFl'@;
put 'W0V0XVtvdF0ucyksYWVbRXRdW290XSYmYWVbRXRdW290XS56JiYoY3Quej1hZVtFdF1bb3RdLnopLGFlW0V0XVtvdF09Y3Q7ZWxzZXt2YXIganQ9cWkoe2M6b3QscjpFdH0pO2FlW2p0XSYmYWVbanRdLnMmJihjdC5zPWFlW2p0XS5zKSxhZVtqdF0mJmFlW2p0XS56JiYoY3Quej1hZVtqdF0u'@;
put 'eiksYWVbanRdPWN0fX19cmV0dXJuIFBlLnMuYzwxZTcmJihhZVsiIXJlZiJdPWlvKFBlKSksYWV9ZnVuY3Rpb24gcDQoUyxSKXtyZXR1cm4gZjQobnVsbCxTLFIpfWZ1bmN0aW9uIEswKFMsUil7cmV0dXJuIFJ8fChSPWJuKDQpKSxSLndyaXRlX3NoaWZ0KDQsUyksUn1mdW5jdGlvbiBwdShT'@;
put 'KXt2YXIgUj1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1SPyIiOlMucmVhZF9zaGlmdChSLCJkYmNzIil9ZnVuY3Rpb24gUGMoUyxSKXt2YXIgaz0hMTtyZXR1cm4gbnVsbD09UiYmKGs9ITAsUj1ibig0KzIqUy5sZW5ndGgpKSxSLndyaXRlX3NoaWZ0KDQsUy5sZW5ndGgpLFMubGVuZ3Ro'@;
put 'PjAmJlIud3JpdGVfc2hpZnQoMCxTLCJkYmNzIiksaz9SLnNsaWNlKDAsUi5sKTpSfWZ1bmN0aW9uIFJ3KFMpe3JldHVybntpY2g6Uy5yZWFkX3NoaWZ0KDIpLGlmbnQ6Uy5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBzbChTLFIpe3ZhciBrPVMubCxHPVMucmVhZF9zaGlmdCgxKSxRPXB1KFMp'@;
put 'LGFlPVtdLGdlPXt0OlEsaDpRfTtpZigxJkcpe2Zvcih2YXIgcGU9Uy5yZWFkX3NoaWZ0KDQpLHllPTA7eWUhPXBlOysreWUpYWUucHVzaChSdyhTKSk7Z2Uucj1hZX1lbHNlIGdlLnI9W3tpY2g6MCxpZm50OjB9XTtyZXR1cm4gUy5sPWsrUixnZX0hZnVuY3Rpb24oUyxSKXt2YXIgaztpZih0'@;
put 'eXBlb2YgY3J5cHRvQnJvd3NlcmlmeTwidSIpaz1jcnlwdG9Ccm93c2VyaWZ5O2Vsc2UgaWYodHlwZW9mIFI8InUiKWs9UjtlbHNlIHRyeXtrPV8oOTE0MjYpfWNhdGNoe2s9bnVsbH1TLnJjND1mdW5jdGlvbihHLFEpe3ZhciBhZT1uZXcgQXJyYXkoMjU2KSxnZT0wLHBlPTAseWU9MCxQZT0w'@;
put 'O2ZvcihwZT0wOzI1NiE9cGU7KytwZSlhZVtwZV09cGU7Zm9yKHBlPTA7MjU2IT1wZTsrK3BlKXllPXllK2FlW3BlXStHW3BlJUcubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NSxQZT1hZVtwZV0sYWVbcGVdPWFlW3llXSxhZVt5ZV09UGU7cGU9eWU9MDt2YXIgTmU9VihRLmxlbmd0aCk7Zm9y'@;
put 'KGdlPTA7Z2UhPVEubGVuZ3RoOysrZ2UpUGU9YWVbcGU9cGUrMSYyNTVdLGFlW3BlXT1hZVt5ZT0oeWUrYWVbcGVdKSUyNTZdLGFlW3llXT1QZSxOZVtnZV09UVtnZV1eYWVbYWVbcGVdK2FlW3llXSYyNTVdO3JldHVybiBOZX0sUy5tZDU9ZnVuY3Rpb24oRyl7aWYoIWspdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJVbnN1cHBvcnRlZCBjcnlwdG8iKTtyZXR1cm4gay5jcmVhdGVIYXNoKCJtZDUiKS51cGRhdGUoQnVmZmVyLmZyb20oRykpLmRpZ2VzdCgiaGV4Iil9fShLbCx0eXBlb2YgY3J5cHRvPCJ1Ij9jcnlwdG86dm9pZCAwKTt2YXIgTHc9c2w7ZnVuY3Rpb24gRDEoUyl7dmFyIFI9Uy5yZWFk'@;
put 'X3NoaWZ0KDQpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBrKz1TLnJlYWRfc2hpZnQoMSk8PDE2LFMubCsrLHtjOlIsaVN0eWxlUmVmOmt9fWZ1bmN0aW9uIHhyKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDgpKSxSLndyaXRlX3NoaWZ0KC00LFMuYyksUi53cml0ZV9zaGlmdCgzLFMu'@;
put 'aVN0eWxlUmVmfHxTLnMpLFIud3JpdGVfc2hpZnQoMSwwKSxSfWZ1bmN0aW9uIEpoKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUis9Uy5yZWFkX3NoaWZ0KDEpPDwxNixTLmwrKyx7YzotMSxpU3R5bGVSZWY6Un19ZnVuY3Rpb24gZmkoUyxSKXtyZXR1cm4gbnVsbD09UiYmKFI9'@;
put 'Ym4oNCkpLFIud3JpdGVfc2hpZnQoMyxTLmlTdHlsZVJlZnx8Uy5zKSxSLndyaXRlX3NoaWZ0KDEsMCksUn12YXIgbzU9cHUsYTU9UGM7ZnVuY3Rpb24gZTAoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09Unx8NDI5NDk2NzI5NT09PVI/IiI6Uy5yZWFkX3NoaWZ0KFIsImRi'@;
put 'Y3MiKX1mdW5jdGlvbiBkZihTLFIpe3ZhciBrPSExO3JldHVybiBudWxsPT1SJiYoaz0hMCxSPWJuKDEyNykpLFIud3JpdGVfc2hpZnQoNCxTLmxlbmd0aD4wP1MubGVuZ3RoOjQyOTQ5NjcyOTUpLFMubGVuZ3RoPjAmJlIud3JpdGVfc2hpZnQoMCxTLCJkYmNzIiksaz9SLnNsaWNlKDAsUi5s'@;
put 'KTpSfXZhciBzNT1wdSxnND1lMCxsNT1kZjtmdW5jdGlvbiBJMShTKXt2YXIgUj1TLnNsaWNlKFMubCxTLmwrNCksaz0xJlJbMF0sRz0yJlJbMF07Uy5sKz00LFJbMF0mPTI1Mjt2YXIgUT0wPT09Rz9vbihbMCwwLDAsMCxSWzBdLFJbMV0sUlsyXSxSWzNdXSwwKTpWcyhSLDApPj4yO3JldHVy'@;
put 'biBrP1EvMTAwOlF9ZnVuY3Rpb24gbHYoUyxSKXtudWxsPT1SJiYoUj1ibig0KSk7dmFyIGs9MCxHPTAsUT0xMDAqUztpZihTPT0oMHxTKSYmUz49LSgxPDwyOSkmJlM8MTw8Mjk/Rz0xOlE9PSgwfFEpJiZRPj0tKDE8PDI5KSYmUTwxPDwyOSYmKEc9MSxrPTEpLCFHKXRocm93IG5ldyBFcnJv'@;
put 'cigidW5zdXBwb3J0ZWQgUmtOdW1iZXIgIitTKTtSLndyaXRlX3NoaWZ0KC00LCgoaz9ROlMpPDwyKSsoaysyKSl9ZnVuY3Rpb24gY2QoUyl7dmFyIFI9e3M6e30sZTp7fX07cmV0dXJuIFIucy5yPVMucmVhZF9zaGlmdCg0KSxSLmUucj1TLnJlYWRfc2hpZnQoNCksUi5zLmM9Uy5yZWFkX3No'@;
put 'aWZ0KDQpLFIuZS5jPVMucmVhZF9zaGlmdCg0KSxSfXZhciBndT1jZCxoZj1mdW5jdGlvbiBFNihTLFIpe3JldHVybiBSfHwoUj1ibigxNikpLFIud3JpdGVfc2hpZnQoNCxTLnMuciksUi53cml0ZV9zaGlmdCg0LFMuZS5yKSxSLndyaXRlX3NoaWZ0KDQsUy5zLmMpLFIud3JpdGVfc2hpZnQo'@;
put 'NCxTLmUuYyksUn07ZnVuY3Rpb24gdDAoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdLEc9MDtHPFI7KytHKXt2YXIgUT1ndShTKTtrLnB1c2goaW8oUSkpfXJldHVybiBrLmpvaW4oIiwiKX1mdW5jdGlvbiBQbChTKXtpZihTLmxlbmd0aC1TLmw8OCl0aHJvdyJYTFMgWG51bSBC'@;
put 'dWZmZXIgdW5kZXJmbG93IjtyZXR1cm4gUy5yZWFkX3NoaWZ0KDgsImYiKX1mdW5jdGlvbiBSdShTLFIpe3JldHVybihSfHxibig4KSkud3JpdGVfc2hpZnQoOCxTLCJmIil9ZnVuY3Rpb24gUWgoUyl7dmFyIFI9e30sRz1TLnJlYWRfc2hpZnQoMSk+Pj4xLFE9Uy5yZWFkX3NoaWZ0KDEpLGFl'@;
put 'PVMucmVhZF9zaGlmdCgyLCJpIiksZ2U9Uy5yZWFkX3NoaWZ0KDEpLHBlPVMucmVhZF9zaGlmdCgxKSx5ZT1TLnJlYWRfc2hpZnQoMSk7c3dpdGNoKFMubCsrLEcpe2Nhc2UgMDpSLmF1dG89MTticmVhaztjYXNlIDE6Ui5pbmRleD1RO3ZhciBQZT1uMFtRXTtQZSYmKFIucmdiPWZkKFBlKSk7'@;
put 'YnJlYWs7Y2FzZSAyOlIucmdiPWZkKFtnZSxwZSx5ZV0pO2JyZWFrO2Nhc2UgMzpSLnRoZW1lPVF9cmV0dXJuIDAhPWFlJiYoUi50aW50PWFlPjA/YWUvMzI3Njc6YWUvMzI3NjgpLFJ9ZnVuY3Rpb24gZmYoUyxSKXtpZihSfHwoUj1ibig4KSksIVN8fFMuYXV0bylyZXR1cm4gUi53cml0ZV9z'@;
put 'aGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSxSO251bGwhPVMuaW5kZXg/KFIud3JpdGVfc2hpZnQoMSwyKSxSLndyaXRlX3NoaWZ0KDEsUy5pbmRleCkpOm51bGwhPVMudGhlbWU/KFIud3JpdGVfc2hpZnQoMSw2KSxSLndyaXRlX3NoaWZ0KDEsUy50aGVtZSkpOihSLndyaXRlX3NoaWZ0'@;
put 'KDEsNSksUi53cml0ZV9zaGlmdCgxLDApKTt2YXIgaz1TLnRpbnR8fDA7aWYoaz4wP2sqPTMyNzY3Oms8MCYmKGsqPTMyNzY4KSxSLndyaXRlX3NoaWZ0KDIsayksUy5yZ2ImJm51bGw9PVMudGhlbWUpe3ZhciBHPVMucmdifHwiRkZGRkZGIjsibnVtYmVyIj09dHlwZW9mIEcmJihHPSgiMDAw'@;
put 'MDAwIitHLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpKSxSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoRy5zbGljZSgwLDIpLDE2KSksUi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEcuc2xpY2UoMiw0KSwxNikpLFIud3JpdGVfc2hpZnQoMSxwYXJzZUludChHLnNsaWNlKDQsNiksMTYpKSxSLndy'@;
put 'aXRlX3NoaWZ0KDEsMjU1KX1lbHNlIFIud3JpdGVfc2hpZnQoMiwwKSxSLndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlmdCgxLDApO3JldHVybiBSfWZ1bmN0aW9uIE93KFMpe3ZhciBSPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sKysse2ZCb2xkOjEmUixmSXRhbGljOjImUixmVW5k'@;
put 'ZXJsaW5lOjQmUixmU3RyaWtlb3V0OjgmUixmT3V0bGluZToxNiZSLGZTaGFkb3c6MzImUixmQ29uZGVuc2U6NjQmUixmRXh0ZW5kOjEyOCZSfX1mdW5jdGlvbiBQdyhTLFIpe3ZhciBHPVMucmVhZF9zaGlmdCg0KTtzd2l0Y2goRyl7Y2FzZSAwOnJldHVybiIiO2Nhc2UgNDI5NDk2NzI5NTpj'@;
put 'YXNlIDQyOTQ5NjcyOTQ6cmV0dXJuezI6IkJJVE1BUCIsMzoiTUVUQUZJTEVQSUNUIiw4OiJESUIiLDE0OiJFTkhNRVRBRklMRSJ9W1MucmVhZF9zaGlmdCg0KV18fCIifWlmKEc+NDAwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ2xpcGJvYXJkOiAiK0cudG9TdHJpbmcoMTYpKTty'@;
put 'ZXR1cm4gUy5sLT00LFMucmVhZF9zaGlmdCgwLDE9PVI/Imxwc3RyIjoibHB3c3RyIil9dmFyIGUyPTIscWw9MyxEMD0xMixqbj04MSxGdz1bODAsam5dLG00PXsxOntuOiJDb2RlUGFnZSIsdDplMn0sMjp7bjoiQ2F0ZWdvcnkiLHQ6ODB9LDM6e246IlByZXNlbnRhdGlvbkZvcm1hdCIsdDo4'@;
put 'MH0sNDp7bjoiQnl0ZUNvdW50Iix0OnFsfSw1OntuOiJMaW5lQ291bnQiLHQ6cWx9LDY6e246IlBhcmFncmFwaENvdW50Iix0OnFsfSw3OntuOiJTbGlkZUNvdW50Iix0OnFsfSw4OntuOiJOb3RlQ291bnQiLHQ6cWx9LDk6e246IkhpZGRlbkNvdW50Iix0OnFsfSwxMDp7bjoiTXVsdGltZWRp'@;
put 'YUNsaXBDb3VudCIsdDpxbH0sMTE6e246IlNjYWxlQ3JvcCIsdDoxMX0sMTI6e246IkhlYWRpbmdQYWlycyIsdDo0MDk2fEQwfSwxMzp7bjoiVGl0bGVzT2ZQYXJ0cyIsdDo0MTI2fSwxNDp7bjoiTWFuYWdlciIsdDo4MH0sMTU6e246IkNvbXBhbnkiLHQ6ODB9LDE2OntuOiJMaW5rc1VwVG9E'@;
put 'YXRlIix0OjExfSwxNzp7bjoiQ2hhcmFjdGVyQ291bnQiLHQ6cWx9LDE5OntuOiJTaGFyZWREb2MiLHQ6MTF9LDIyOntuOiJIeXBlcmxpbmtzQ2hhbmdlZCIsdDoxMX0sMjM6e246IkFwcFZlcnNpb24iLHQ6cWwscDoidmVyc2lvbiJ9LDI0OntuOiJEaWdTaWciLHQ6NjV9LDI2OntuOiJDb250'@;
put 'ZW50VHlwZSIsdDo4MH0sMjc6e246IkNvbnRlbnRTdGF0dXMiLHQ6ODB9LDI4OntuOiJMYW5ndWFnZSIsdDo4MH0sMjk6e246IlZlcnNpb24iLHQ6ODB9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0'@;
put 'Ont9fSx1NT17MTp7bjoiQ29kZVBhZ2UiLHQ6ZTJ9LDI6e246IlRpdGxlIix0OjgwfSwzOntuOiJTdWJqZWN0Iix0OjgwfSw0OntuOiJBdXRob3IiLHQ6ODB9LDU6e246IktleXdvcmRzIix0OjgwfSw2OntuOiJDb21tZW50cyIsdDo4MH0sNzp7bjoiVGVtcGxhdGUiLHQ6ODB9LDg6e246Ikxh'@;
put 'c3RBdXRob3IiLHQ6ODB9LDk6e246IlJldk51bWJlciIsdDo4MH0sMTA6e246IkVkaXRUaW1lIix0OjY0fSwxMTp7bjoiTGFzdFByaW50ZWQiLHQ6NjR9LDEyOntuOiJDcmVhdGVkRGF0ZSIsdDo2NH0sMTM6e246Ik1vZGlmaWVkRGF0ZSIsdDo2NH0sMTQ6e246IlBhZ2VDb3VudCIsdDpxbH0s'@;
put 'MTU6e246IldvcmRDb3VudCIsdDpxbH0sMTY6e246IkNoYXJDb3VudCIsdDpxbH0sMTc6e246IlRodW1ibmFpbCIsdDo3MX0sMTg6e246IkFwcGxpY2F0aW9uIix0OjgwfSwxOTp7bjoiRG9jU2VjdXJpdHkiLHQ6cWx9LDI1NTp7fSwyMTQ3NDgzNjQ4OntuOiJMb2NhbGUiLHQ6MTl9LDIxNDc0'@;
put 'ODM2NTE6e246IkJlaGF2aW9yIix0OjE5fSwxOTE5MDU0NDM0Ont9fSxkNT1JZShtNCwibiIpLHBmPUllKHU1LCJuIiksazY9ezE6IlVTIiwyOiJDQSIsMzoiIiw3OiJSVSIsMjA6IkVHIiwzMDoiR1IiLDMxOiJOTCIsMzI6IkJFIiwzMzoiRlIiLDM0OiJFUyIsMzY6IkhVIiwzOToiSVQiLDQx'@;
put 'OiJDSCIsNDM6IkFUIiw0NDoiR0IiLDQ1OiJESyIsNDY6IlNFIiw0NzoiTk8iLDQ4OiJQTCIsNDk6IkRFIiw1MjoiTVgiLDU1OiJCUiIsNjE6IkFVIiw2NDoiTloiLDY2OiJUSCIsODE6IkpQIiw4MjoiS1IiLDg0OiJWTiIsODY6IkNOIiw5MDoiVFIiLDEwNToiSlMiLDIxMzoiRFoiLDIxNjoi'@;
put 'TUEiLDIxODoiTFkiLDM1MToiUFQiLDM1NDoiSVMiLDM1ODoiRkkiLDQyMDoiQ1oiLDg4NjoiVFciLDk2MToiTEIiLDk2MjoiSk8iLDk2MzoiU1kiLDk2NDoiSVEiLDk2NToiS1ciLDk2NjoiU0EiLDk3MToiQUUiLDk3MjoiSUwiLDk3NDoiUUEiLDk4MToiSVIiLDY1NTM1OiJVUyJ9LHV2PVtu'@;
put 'dWxsLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtIb3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0'@;
put 'RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1IiwiZ3JheTA2MjUiXTtmdW5jdGlvbiBENihTKXtyZXR1cm4gUy5tYXAoZnVuY3Rpb24oUil7cmV0dXJuW1I+PjE2JjI1NSxSPj44JjI1NSwyNTUmUl19KX12YXIgdjQ9RDYoWzAsMTY3NzcyMTUsMTY3'@;
put 'MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDgzODg2MDgsMzI3NjgsMTI4LDg0MjEzNzYsODM4ODczNiwzMjg5NiwxMjYzMjI1Niw4NDIxNTA0LDEwMDY2NDMxLDEwMDQw'@;
put 'MTY2LDE2Nzc3MTY0LDEzNDM0ODc5LDY2ODQ3NzQsMTY3NDQ1NzYsMjYzMTYsMTM0MjE4MjMsMTI4LDE2NzExOTM1LDE2Nzc2OTYwLDY1NTM1LDgzODg3MzYsODM4ODYwOCwzMjg5NiwyNTUsNTI0NzksMTM0MzQ4NzksMTM0MzQ4MjgsMTY3NzcxMTMsMTAwNzk0ODcsMTY3NTEwNTIsMTM0MDg3'@;
put 'NjcsMTY3NjQwNTcsMzM2ODcwMywzMzk0NzY0LDEwMDc5MjMyLDE2NzYzOTA0LDE2NzUwODQ4LDE2NzM3NzkyLDY3MTA5MzcsOTg2ODk1MCwxMzE1OCwzMzgxNjA2LDEzMDU2LDMzNTUzOTIsMTAwNDAwNjQsMTAwNDAxNjYsMzM1NTU0NSwzMzU1NDQzLDAsMTY3NzcyMTUsMCwwLDAsMCwwLDAs'@;
put 'MCwwLDAsMCwwLDAsMCwwLDAsMF0pLG4wPXF0KHY0KSxIdz1ENihbMTI2MzIyNTYsOTg2ODk1MCw4NDIxNTA0LDY3MTA4ODYsMzM1NTQ0MywxNjcxMTY4MCwzMjc2OCwxMzM2OTQ5NywxMjgsMzM5NDU2MCwyNjM2NywxMDAyNzIxMiwxMDA1MzE3MSwxMjgsMzI3NjgsODM4ODYwOCwzMjg5Niw4'@;
put 'Mzg4NzM2LDg0MjEzNzYsMTM2MzE0ODgsMTQ1Mzk5OTQsMTMwNjg4NTAsMTM5MjQzNTIsOTk2NzQ5Niw5MTc1MjY3LDkxOTUwMDgsMzY4MzUzNywxMDY5MjU4LDg4ODA4OTksNzQ5NDY0LDI4OTM0NzYsMTE3NDU3MzAsMzc1MDIwMSwxNTU1OTUwMywxODM3OTQxLDEyMDg0MzU5LDc2MzIyNTAs'@;
put 'NzM2MzMyOCw5NTE0NTg4LDgyODg2MTcsMzAzNjgxNCwxMTE4NDgxMF0pLE1jPXswOiIjTlVMTCEiLDc6IiNESVYvMCEiLDE1OiIjVkFMVUUhIiwyMzoiI1JFRiEiLDI5OiIjTkFNRT8iLDM2OiIjTlVNISIsNDI6IiNOL0EiLDQzOiIjR0VUVElOR19EQVRBIiwyNTU6IiNXVEY/In0sUDM9a2Uo'@;
put 'TWMpLGI0PXsiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiOiJ3b3JrYm9va3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYmluSW5kZXhXcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhj'@;
put 'ZWwuaW50bG1hY3Jvc2hlZXQiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4TXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuY29yZS1wcm9wZXJ0aWVzK3htbCI6ImNvcmVwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVu'@;
put 'eG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b20tcHJvcGVydGllcyt4bWwiOiJjdXN0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZXh0ZW5kZWQtcHJvcGVydGllcyt4bWwiOiJleHRwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVu'@;
put 'eG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b21YbWxQcm9wZXJ0aWVzK3htbCI6ImN1c3RvbXhtbHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY3VzdG9tUHJvcGVydHkiOiJUT0RPIiwiYXBwbGljYXRpb24v'@;
put 'dm5kLm1zLWV4Y2VsLnBpdm90VGFibGUiOiJwaXZvdHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdFRhYmxlK3htbCI6InBpdm90cyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu'@;
put 'dC5kcmF3aW5nbWwuY2hhcnQreG1sIjoiY2hhcnRvYmpzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGNvbG9yc3R5bGUreG1sIjoiY2hhcnRjb2xvcnMiLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmNoYXJ0c3R5bGUreG1sIjoiY2hhcnRzdHlsZXMiLCJhcHBsaWNhdGlv'@;
put 'bi92bmQubXMtb2ZmaWNlLmNoYXJ0ZXgreG1sIjoiY2hhcnRleHMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2FsY0NoYWluIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNhbGNDaGFpbit4bWwi'@;
put 'OiJjYWxjY2hhaW5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucHJpbnRlclNldHRpbmdzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZlWCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2Zm'@;
put 'aWNlLmFjdGl2ZVgreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hdHRhY2hlZFRvb2xiYXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt'@;
put 'ZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIjoiY29ubnMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5leHRlcm5hbExpbmsr'@;
put 'eG1sIjoibGlua3MiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXRNZXRhZGF0YSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldE1ldGFkYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu'@;
put 'bXMtZXhjZWwucGl2b3RDYWNoZURlZmluaXRpb24iOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1s'@;
put 'LnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCI6InBpdm90Y2FjaGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIjoicGl2b3RyZWNvcmRzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2Vs'@;
put 'LnF1ZXJ5VGFibGUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnlUYWJsZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnVzZXJOYW1lcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu'@;
put 'bXMtZXhjZWwucmV2aXNpb25IZWFkZXJzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5yZXZpc2lvbkxvZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkhlYWRlcnMreG1sIjoiVE9E'@;
put 'TyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnJldmlzaW9uTG9nK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VyTmFtZXMreG1sIjoi'@;
put 'VE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC50YWJsZVNpbmdsZUNlbGxzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlU2luZ2xlQ2VsbHMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t'@;
put 'cy1leGNlbC5zbGljZXIiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNsaWNlckNhY2hlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXIreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSt4bWwiOiJUT0RPIiwi'@;
put 'YXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLndzU29ydE1hcCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUiOiJ0YWJsZXMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiOiJ0YWJsZXMi'@;
put 'LCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWUreG1sIjoidGhlbWVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lT3ZlcnJpZGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNl'@;
put 'bC5UaW1lbGluZSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlRpbWVsaW5lQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCI6InZiYSIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdFNpZ25hdHVy'@;
put 'ZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZvbGF0aWxlRGVwZW5kZW5jaWVzIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnZvbGF0aWxlRGVwZW5kZW5jaWVzK3htbCI6IlRPRE8iLCJhcHBs'@;
put 'aWNhdGlvbi92bmQubXMtZXhjZWwuY29udHJvbHByb3BlcnRpZXMreG1sIjoiY3RybHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50Lm1vZGVsK2RhdGEiOiJkYXRhbW9kZWxzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLlN1cnZleSt4bWwi'@;
put 'OiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmcreG1sIjoiZHJhd2luZ3MiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0c2hhcGVzK3htbCI6IlRPRE8iLCJhcHBs'@;
put 'aWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1Db2xvcnMreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbURhdGEreG1sIjoiVE9ETyIsImFwcGxp'@;
put 'Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuZGlhZ3JhbUxheW91dCt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtU3R5bGUreG1sIjoiVE9ETyIsImFwcGxp'@;
put 'Y2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC52bWxEcmF3aW5nIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sIjoicmVscyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vk'@;
put 'b2N1bWVudC5vbGVPYmplY3QiOiJUT0RPIiwiaW1hZ2UvcG5nIjoiVE9ETyIsc2hlZXQ6ImpzIn0sZHY9ZnVuY3Rpb24oKXt2YXIgUz17d29ya2Jvb2tzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWlu'@;
put 'K3htbCIseGxzbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiIseGxhbToiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmFkZGlu'@;
put 'Lm1hY3JvRW5hYmxlZC5tYWluK3htbCIseGx0eDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUubWFpbit4bWwifSxzdHJzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1l'@;
put 'bnQuc3ByZWFkc2hlZXRtbC5zaGFyZWRTdHJpbmdzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoYXJlZFN0cmluZ3MifSxjb21tZW50czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVu'@;
put 'dHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29tbWVudHMifSxzaGVldHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLndvcmtzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1l'@;
put 'eGNlbC53b3Jrc2hlZXQifSxjaGFydHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY2hhcnRzaGVldCJ9LGRpYWxvZ3M6e3hsc3g6'@;
put 'ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmRpYWxvZ3NoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmRpYWxvZ3NoZWV0In0sbWFjcm9zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFj'@;
put 'cm9zaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5tYWNyb3NoZWV0In0sdGFibGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5t'@;
put 'cy1leGNlbC50YWJsZSJ9LHBpdm90czp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIn0scGl2b3RjYWNoZXM6e3hs'@;
put 'c3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVEZWZpbml0aW9uK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIn0scGl2b3RyZWNvcmRzOnt4bHN4OiJh'@;
put 'cHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlUmVjb3Jkcyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hlUmVjb3JkcyJ9LGNvbm5zOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3Bl'@;
put 'bnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jb25uZWN0aW9ucyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5jb25uZWN0aW9ucyJ9LGxpbmtzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3By'@;
put 'ZWFkc2hlZXRtbC5leHRlcm5hbExpbmsreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuZXh0ZXJuYWxMaW5rIn0sc3R5bGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zdHlsZXMreG1sIix4bHNi'@;
put 'OiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc3R5bGVzIn19O3JldHVybiBSZShTKS5mb3JFYWNoKGZ1bmN0aW9uKFIpe1sieGxzbSIsInhsYW0iXS5mb3JFYWNoKGZ1bmN0aW9uKGspe1NbUl1ba118fChTW1JdW2tdPVNbUl0ueGxzeCl9KX0pLFJlKFMpLmZvckVhY2goZnVuY3Rpb24oUil7'@;
put 'UmUoU1tSXSkuZm9yRWFjaChmdW5jdGlvbihrKXtiNFtTW1JdW2tdXT1SfSl9KSxTfSgpLGh2PWZ1bmN0aW9uIEFlKFMpe2Zvcih2YXIgUj1bXSxrPVJlKFMpLEc9MDtHIT09ay5sZW5ndGg7KytHKW51bGw9PVJbU1trW0ddXV0mJihSW1Nba1tHXV1dPVtdKSxSW1Nba1tHXV1dLnB1c2goa1tH'@;
put 'XSk7cmV0dXJuIFJ9KGI0KTtZaS5DVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9jb250ZW50LXR5cGVzIjt2YXIgcHY9UHIoIlR5cGVzIixudWxsLHt4bWxuczpZaS5DVCwieG1sbnM6eHNkIjpZaS54c2QsInhtbG5zOnhzaSI6WWkueHNpfSksVnc9'@;
put 'W1sieG1sIiwiYXBwbGljYXRpb24veG1sIl0sWyJiaW4iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2hlZXQuYmluYXJ5Lm1hY3JvRW5hYmxlZC5tYWluIl0sWyJ2bWwiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyJdLFsiZGF0'@;
put 'YSIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5tb2RlbCtkYXRhIl0sWyJibXAiLCJpbWFnZS9ibXAiXSxbInBuZyIsImltYWdlL3BuZyJdLFsiZ2lmIiwiaW1hZ2UvZ2lmIl0sWyJlbWYiLCJpbWFnZS94LWVtZiJdLFsid21mIiwiaW1hZ2UveC13bWYi'@;
put 'XSxbImpwZyIsImltYWdlL2pwZWciXSxbImpwZWciLCJpbWFnZS9qcGVnIl0sWyJ0aWYiLCJpbWFnZS90aWZmIl0sWyJ0aWZmIiwiaW1hZ2UvdGlmZiJdLFsicGRmIiwiYXBwbGljYXRpb24vcGRmIl0sWyJyZWxzIixodi5yZWxzWzBdXV0ubWFwKGZ1bmN0aW9uKFMpe3JldHVybiBQcigiRGVm'@;
put 'YXVsdCIsbnVsbCx7RXh0ZW5zaW9uOlNbMF0sQ29udGVudFR5cGU6U1sxXX0pfSkscW89e1dCOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL29mZmljZURvY3VtZW50IixTSEVFVDoiaHR0cDovL3NoZWV0anMub3Bl'@;
put 'bnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VEb2N1bWVudCIsSExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaHlwZXJsaW5rIixWTUw6Imh0dHA6Ly9z'@;
put 'Y2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvdm1sRHJhd2luZyIsWFBBVEg6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZXJuYWxMaW5rUGF0aCIs'@;
put 'WE1JU1M6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bEV4dGVybmFsTGlua1BhdGgveGxQYXRoTWlzc2luZyIsWExJTks6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9u'@;
put 'c2hpcHMvZXh0ZXJuYWxMaW5rIixDWE1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbCIsQ1hNTFA6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2'@;
put 'L3JlbGF0aW9uc2hpcHMvY3VzdG9tWG1sUHJvcHMiLFZCQToiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3ZiYVByb2plY3QifTtmdW5jdGlvbiBWcihTKXt2YXIgUj1TLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIFMuc2xpY2UoMCxSKzEp'@;
put 'KyJfcmVscy8iK1Muc2xpY2UoUisxKSsiLnJlbHMifWZ1bmN0aW9uIGdmKFMsUil7dmFyIGs9eyIhaWQiOnt9fTtpZighUylyZXR1cm4gazsiLyIhPT1SLmNoYXJBdCgwKSYmKFI9Ii8iK1IpO3ZhciBHPXt9O3JldHVybihTLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFy'@;
put 'IGFlPXZyKFEpO2lmKCI8UmVsYXRpb25zaGlwIj09PWFlWzBdKXt2YXIgZ2U9e307Z2UuVHlwZT1hZS5UeXBlLGdlLlRhcmdldD1hZS5UYXJnZXQsZ2UuSWQ9YWUuSWQsZ2UuVGFyZ2V0TW9kZT1hZS5UYXJnZXRNb2RlO3ZhciBwZT0iRXh0ZXJuYWwiPT09YWUuVGFyZ2V0TW9kZT9hZS5UYXJn'@;
put 'ZXQ6Zm4oYWUuVGFyZ2V0LFIpO2tbcGVdPWdlLEdbYWUuSWRdPWdlfX0pLGtbIiFpZCJdPUcsa31ZaS5SRUxTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiO3ZhciBoNT1QcigiUmVsYXRpb25zaGlwcyIsbnVsbCx7eG1sbnM6'@;
put 'WWkuUkVMU30pO2Z1bmN0aW9uIGtpKFMpe3ZhciBSPVtJaSxoNV07cmV0dXJuIFJlKFNbIiFpZCJdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe1JbUi5sZW5ndGhdPVByKCJSZWxhdGlvbnNoaXAiLG51bGwsU1siIWlkIl1ba10pfSksUi5sZW5ndGg+MiYmKFJbUi5sZW5ndGhdPSI8L1JlbGF0aW9u'@;
put 'c2hpcHM+IixSWzFdPVJbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFIuam9pbigiIil9dmFyIHk0PVtxby5ITElOSyxxby5YUEFUSCxxby5YTUlTU107ZnVuY3Rpb24gRXIoUyxSLGssRyxRLGFlKXtpZihRfHwoUT17fSksU1siIWlkIl18fChTWyIhaWQiXT17fSksUjwwKWZvcihSPTE7U1siIWlk'@;
put 'Il1bInJJZCIrUl07KytSKTtpZihRLklkPSJySWQiK1IsUS5UeXBlPUcsUS5UYXJnZXQ9ayxhZT9RLlRhcmdldE1vZGU9YWU6eTQuaW5kZXhPZihRLlR5cGUpPi0xJiYoUS5UYXJnZXRNb2RlPSJFeHRlcm5hbCIpLFNbIiFpZCJdW1EuSWRdKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJld3Jp'@;
put 'dGUgcklkICIrUik7cmV0dXJuIFNbIiFpZCJdW1EuSWRdPVEsU1soIi8iK1EuVGFyZ2V0KS5yZXBsYWNlKCIvLyIsIi8iKV09USxSfXZhciBsbD0iYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCI7ZnVuY3Rpb24gUWMoUyxSLGspe3JldHVyblsnICA8cmRm'@;
put 'OkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJytTKyciPlxuJywnICAgIDxyZGY6dHlwZSByZGY6cmVzb3VyY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS8nKyhrfHwib2RmIikrIiMiK1IrJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5cbiJdLmpv'@;
put 'aW4oIiIpfWZ1bmN0aW9uIG4yKFMsUil7cmV0dXJuWycgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSInK1MrJyI+XG4nLCcgICAgPG5zMDpoYXNQYXJ0IHhtbG5zOm5zMD0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhL3BrZyMiIHJkZjpyZXNvdXJj'@;
put 'ZT0iJytSKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX12YXIgSTY9ZnVuY3Rpb24oKXt2YXIgUz0nPG9mZmljZTpkb2N1bWVudC1tZXRhIHhtbG5zOm9mZmljZT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiB4bWxu'@;
put 'czptZXRhPSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1ldGE6MS4wIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBvZmZpY2U6dmVyc2lvbj0iMS4yIj48'@;
put 'b2ZmaWNlOm1ldGE+PG1ldGE6Z2VuZXJhdG9yPlNoZWV0SlMgJyt3LnZlcnNpb24rIjwvbWV0YTpnZW5lcmF0b3I+PC9vZmZpY2U6bWV0YT48L29mZmljZTpkb2N1bWVudC1tZXRhPiI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFN9fSgpLEkwPVtbImNwOmNhdGVnb3J5IiwiQ2F0ZWdvcnki'@;
put 'XSxbImNwOmNvbnRlbnRTdGF0dXMiLCJDb250ZW50U3RhdHVzIl0sWyJjcDprZXl3b3JkcyIsIktleXdvcmRzIl0sWyJjcDpsYXN0TW9kaWZpZWRCeSIsIkxhc3RBdXRob3IiXSxbImNwOmxhc3RQcmludGVkIiwiTGFzdFByaW50ZWQiXSxbImNwOnJldmlzaW9uIiwiUmV2TnVtYmVyIl0sWyJj'@;
put 'cDp2ZXJzaW9uIiwiVmVyc2lvbiJdLFsiZGM6Y3JlYXRvciIsIkF1dGhvciJdLFsiZGM6ZGVzY3JpcHRpb24iLCJDb21tZW50cyJdLFsiZGM6aWRlbnRpZmllciIsIklkZW50aWZpZXIiXSxbImRjOmxhbmd1YWdlIiwiTGFuZ3VhZ2UiXSxbImRjOnN1YmplY3QiLCJTdWJqZWN0Il0sWyJkYzp0'@;
put 'aXRsZSIsIlRpdGxlIl0sWyJkY3Rlcm1zOmNyZWF0ZWQiLCJDcmVhdGVkRGF0ZSIsImRhdGUiXSxbImRjdGVybXM6bW9kaWZpZWQiLCJNb2RpZmllZERhdGUiLCJkYXRlIl1dO1lpLkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvbWV0'@;
put 'YWRhdGEvY29yZS1wcm9wZXJ0aWVzIixxby5DT1JFX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMvbWV0YWRhdGEvY29yZS1wcm9wZXJ0aWVzIjt2YXIgZjU9ZnVuY3Rpb24oKXtmb3IodmFyIFM9bmV3IEFycmF5KEkw'@;
put 'Lmxlbmd0aCksUj0wO1I8STAubGVuZ3RoOysrUil7dmFyIGs9STBbUl0sRz0iKD86IitrWzBdLnNsaWNlKDAsa1swXS5pbmRleE9mKCI6IikpKyI6KSIra1swXS5zbGljZShrWzBdLmluZGV4T2YoIjoiKSsxKTtTW1JdPW5ldyBSZWdFeHAoIjwiK0crIltePl0qPihbXFxzXFxTXSo/KTwvIitH'@;
put 'KyI+Iil9cmV0dXJuIFN9KCk7ZnVuY3Rpb24gZ3YoUyl7dmFyIFI9e307Uz1nYShTKTtmb3IodmFyIGs9MDtrPEkwLmxlbmd0aDsrK2spe3ZhciBHPUkwW2tdLFE9Uy5tYXRjaChmNVtrXSk7bnVsbCE9USYmUS5sZW5ndGg+MCYmKFJbR1sxXV09UXIoUVsxXSkpLCJkYXRlIj09PUdbMl0mJlJb'@;
put 'R1sxXV0mJihSW0dbMV1dPUhlKFJbR1sxXV0pKX1yZXR1cm4gUn12YXIganc9UHIoImNwOmNvcmVQcm9wZXJ0aWVzIixudWxsLHsieG1sbnM6Y3AiOllpLkNPUkVfUFJPUFMsInhtbG5zOmRjIjpZaS5kYywieG1sbnM6ZGN0ZXJtcyI6WWkuZGN0ZXJtcywieG1sbnM6ZGNtaXR5cGUiOllpLmRj'@;
put 'bWl0eXBlLCJ4bWxuczp4c2kiOllpLnhzaX0pO2Z1bmN0aW9uIG1mKFMsUixrLEcsUSl7bnVsbCE9UVtTXXx8bnVsbD09Unx8IiI9PT1SfHwoUVtTXT1SLFI9THIoUiksR1tHLmxlbmd0aF09az9QcihTLFIsayk6Tm8oUyxSKSl9dmFyIGloPVtbIkFwcGxpY2F0aW9uIiwiQXBwbGljYXRpb24i'@;
put 'LCJzdHJpbmciXSxbIkFwcFZlcnNpb24iLCJBcHBWZXJzaW9uIiwic3RyaW5nIl0sWyJDb21wYW55IiwiQ29tcGFueSIsInN0cmluZyJdLFsiRG9jU2VjdXJpdHkiLCJEb2NTZWN1cml0eSIsInN0cmluZyJdLFsiTWFuYWdlciIsIk1hbmFnZXIiLCJzdHJpbmciXSxbIkh5cGVybGlua3NDaGFu'@;
put 'Z2VkIiwiSHlwZXJsaW5rc0NoYW5nZWQiLCJib29sIl0sWyJTaGFyZWREb2MiLCJTaGFyZWREb2MiLCJib29sIl0sWyJMaW5rc1VwVG9EYXRlIiwiTGlua3NVcFRvRGF0ZSIsImJvb2wiXSxbIlNjYWxlQ3JvcCIsIlNjYWxlQ3JvcCIsImJvb2wiXSxbIkhlYWRpbmdQYWlycyIsIkhlYWRpbmdQ'@;
put 'YWlycyIsInJhdyJdLFsiVGl0bGVzT2ZQYXJ0cyIsIlRpdGxlc09mUGFydHMiLCJyYXciXV07ZnVuY3Rpb24gXzQoUyxSLGssRyl7dmFyIFE9W107aWYoInN0cmluZyI9PXR5cGVvZiBTKVE9SnIoUyxHKTtlbHNlIGZvcih2YXIgYWU9MDthZTxTLmxlbmd0aDsrK2FlKVE9US5jb25jYXQoU1th'@;
put 'ZV0ubWFwKGZ1bmN0aW9uKE5lKXtyZXR1cm57djpOZX19KSk7dmFyIGdlPSJzdHJpbmciPT10eXBlb2YgUj9KcihSLEcpLm1hcChmdW5jdGlvbihOZSl7cmV0dXJuIE5lLnZ9KTpSLHBlPTAseWU9MDtpZihnZS5sZW5ndGg+MClmb3IodmFyIFBlPTA7UGUhPT1RLmxlbmd0aDtQZSs9Mil7c3dp'@;
put 'dGNoKHllPStRW1BlKzFdLnYsUVtQZV0udil7Y2FzZSJXb3Jrc2hlZXRzIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Y2FzZSJcdTA0MWJcdTA0MzhcdTA0NDFcdTA0NDJcdTA0NGIiOmNhc2UiXHUwNjIzXHUwNjQ4XHUwNjMxXHUwNjI3XHUwNjQyIFx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0'@;
put 'NVx1MDY0NCI6Y2FzZSJcdTMwZWZcdTMwZmNcdTMwYWZcdTMwYjdcdTMwZmNcdTMwYzgiOmNhc2UiXHUwNWQyXHUwNWRjXHUwNWQ5XHUwNWQ1XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVlMlx1MDVkMVx1MDVkNVx1MDVkM1x1MDVkNCI6Y2FzZSJBcmJlaXRzYmxceGU0dHRlciI6Y2FzZSJceGM3'@;
put 'YWxcdTAxMzFcdTAxNWZtYSBTYXlmYWxhclx1MDEzMSI6Y2FzZSJGZXVpbGxlcyBkZSBjYWxjdWwiOmNhc2UiRm9nbGkgZGkgbGF2b3JvIjpjYXNlIkZvbGhhcyBkZSBjXHhlMWxjdWxvIjpjYXNlIlBsYW5pbGhhcyI6Y2FzZSJSZWduZWFyayI6Y2FzZSJIb2phcyBkZSBjXHhlMWxjdWxvIjpj'@;
put 'YXNlIldlcmtibGFkZW4iOmsuV29ya3NoZWV0cz15ZSxrLlNoZWV0TmFtZXM9Z2Uuc2xpY2UocGUscGUreWUpO2JyZWFrO2Nhc2UiTmFtZWQgUmFuZ2VzIjpjYXNlIlJhbmdvcyBjb24gbm9tYnJlIjpjYXNlIlx1NTQwZFx1NTI0ZFx1NGVkOFx1MzA0ZFx1NGUwMFx1ODlhNyI6Y2FzZSJCZW5h'@;
put 'bm50ZSBCZXJlaWNoZSI6Y2FzZSJOYXZuZ2l2bmUgb21yXHhlNWRlciI6ay5OYW1lZFJhbmdlcz15ZSxrLkRlZmluZWROYW1lcz1nZS5zbGljZShwZSxwZSt5ZSk7YnJlYWs7Y2FzZSJDaGFydHMiOmNhc2UiRGlhZ3JhbW1lIjprLkNoYXJ0c2hlZXRzPXllLGsuQ2hhcnROYW1lcz1nZS5zbGlj'@;
put 'ZShwZSxwZSt5ZSl9cGUrPXllfX1ZaS5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2V4dGVuZGVkLXByb3BlcnRpZXMiLHFvLkVYVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURv'@;
put 'Y3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9leHRlbmRlZC1wcm9wZXJ0aWVzIjt2YXIgUjY9UHIoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOllpLkVYVF9QUk9QUywieG1sbnM6dnQiOllpLnZ0fSk7WWkuQ1VTVF9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29m'@;
put 'ZmljZURvY3VtZW50LzIwMDYvY3VzdG9tLXByb3BlcnRpZXMiLHFvLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY3VzdG9tLXByb3BlcnRpZXMiO3ZhciBMNj0vPFtePl0rPltePF0qL2csYnY9'@;
put 'UHIoIlByb3BlcnRpZXMiLG51bGwse3htbG5zOllpLkNVU1RfUFJPUFMsInhtbG5zOnZ0IjpZaS52dH0pO3ZhciBPNj17VGl0bGU6IlRpdGxlIixTdWJqZWN0OiJTdWJqZWN0IixBdXRob3I6IkF1dGhvciIsS2V5d29yZHM6IktleXdvcmRzIixDb21tZW50czoiRGVzY3JpcHRpb24iLExhc3RB'@;
put 'dXRob3I6Ikxhc3RBdXRob3IiLFJldk51bWJlcjoiUmV2aXNpb24iLEFwcGxpY2F0aW9uOiJBcHBOYW1lIixMYXN0UHJpbnRlZDoiTGFzdFByaW50ZWQiLENyZWF0ZWREYXRlOiJDcmVhdGVkIixNb2RpZmllZERhdGU6Ikxhc3RTYXZlZCIsQ2F0ZWdvcnk6IkNhdGVnb3J5IixNYW5hZ2VyOiJN'@;
put 'YW5hZ2VyIixDb21wYW55OiJDb21wYW55IixBcHBWZXJzaW9uOiJWZXJzaW9uIixDb250ZW50U3RhdHVzOiJDb250ZW50U3RhdHVzIixJZGVudGlmaWVyOiJJZGVudGlmaWVyIixMYW5ndWFnZToiTGFuZ3VhZ2UifSxQNj1WZShPNik7ZnVuY3Rpb24gRjMoUyxSLGspe1NbUj1QNltSXXx8Ul09'@;
put 'a31mdW5jdGlvbiBIMyhTKXt2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuIG5ldyBEYXRlKDFlMyooay8xZTcqTWF0aC5wb3coMiwzMikrUi8xZTctMTE2NDQ0NzM2MDApKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuMDAwLywiIil9ZnVuY3Rpb24gdWQo'@;
put 'UyxSLGspe3ZhciBHPVMubCxRPVMucmVhZF9zaGlmdCgwLCJscHN0ci1jcCIpO2lmKGspZm9yKDtTLmwtRyYzOykrK1MubDtyZXR1cm4gUX1mdW5jdGlvbiBwNShTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpO3JldHVybiBrJiYoUy5sKz00LShHLmxlbmd0aCsxJjMpJjMp'@;
put 'LEd9ZnVuY3Rpb24geXYoUyxSLGspe3JldHVybiAzMT09PVI/cDUoUyk6dWQoUywwLGspfWZ1bmN0aW9uIEg2KFMsUixrKXtyZXR1cm4geXYoUyxSLCExPT09az8wOjQpfWZ1bmN0aW9uIHd2KFMpe3ZhciBSPVMubCxrPWJmKFMsam4pO3JldHVybiAwPT1TW1MubF0mJjA9PVNbUy5sKzFdJiZT'@;
put 'LmwtUiYyJiYoUy5sKz0yKSxbayxiZihTLHFsKV19ZnVuY3Rpb24gZzUoUyxSKXtmb3IodmFyIGs9Uy5yZWFkX3NoaWZ0KDQpLEc9e30sUT0wO1EhPWs7KytRKXt2YXIgYWU9Uy5yZWFkX3NoaWZ0KDQpLGdlPVMucmVhZF9zaGlmdCg0KTtHW2FlXT1TLnJlYWRfc2hpZnQoZ2UsMTIwMD09PVI/'@;
put 'InV0ZjE2bGUiOiJ1dGY4IikucmVwbGFjZShFLCIiKS5yZXBsYWNlKG0sIiEiKSwxMjAwPT09UiYmZ2UlMiYmKFMubCs9Mil9cmV0dXJuIDMmUy5sJiYoUy5sPVMubD4+Mzw8MiksR31mdW5jdGlvbiBxMChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1TLnNsaWNlKFMubCxTLmwrUik7cmV0'@;
put 'dXJuIFMubCs9UiwoMyZSKT4wJiYoUy5sKz00LSgzJlIpJjMpLGt9ZnVuY3Rpb24gYmYoUyxSLGspe3ZhciBRLEc9Uy5yZWFkX3NoaWZ0KDIpLGFlPWt8fHt9O2lmKFMubCs9MixSIT09RDAmJkchPT1SJiYtMT09PUZ3LmluZGV4T2YoUikmJig0MTI2IT0oNjU1MzQmUil8fDQxMjYhPSg2NTUz'@;
put 'NCZHKSkpdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCB0eXBlICIrUisiIHNhdyAiK0cpO3N3aXRjaChSPT09RDA/RzpSKXtjYXNlIDI6cmV0dXJuIFE9Uy5yZWFkX3NoaWZ0KDIsImkiKSxhZS5yYXd8fChTLmwrPTIpLFE7Y2FzZSAzOnJldHVybiBTLnJlYWRfc2hpZnQoNCwiaSIpO2Nhc2Ug'@;
put 'MTE6cmV0dXJuIDAhPT1TLnJlYWRfc2hpZnQoNCk7Y2FzZSAxOTpyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpO2Nhc2UgMzA6cmV0dXJuIHVkKFMsMCw0KS5yZXBsYWNlKEUsIiIpO2Nhc2UgMzE6cmV0dXJuIHA1KFMpO2Nhc2UgNjQ6cmV0dXJuIEgzKFMpO2Nhc2UgNjU6cmV0dXJuIHEwKFMpO2Nh'@;
put 'c2UgNzE6cmV0dXJuIGZ1bmN0aW9uIEN2KFMpe3ZhciBSPXt9O3JldHVybiBSLlNpemU9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9Ui5TaXplKzMtKFIuU2l6ZS0xKSU0LFJ9KFMpO2Nhc2UgODA6cmV0dXJuIEg2KFMsRywhYWUucmF3KS5yZXBsYWNlKEUsIiIpO2Nhc2UgODE6cmV0dXJuIGZ1bmN0'@;
put 'aW9uIF92KFMsUil7aWYoIVIpdGhyb3cgbmV3IEVycm9yKCJWdFVuYWxpZ25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIHl2KFMsUiwwKX0oUyxHKS5yZXBsYWNlKEUsIiIpO2Nhc2UgNDEwODpyZXR1cm4gZnVuY3Rpb24gWXcoUyl7Zm9yKHZhciBSPVMucmVh'@;
put 'ZF9zaGlmdCg0KSxrPVtdLEc9MDtHPFIvMjsrK0cpay5wdXNoKHd2KFMpKTtyZXR1cm4ga30oUyk7Y2FzZSA0MTI2OmNhc2UgNDEyNzpyZXR1cm4gNDEyNz09Rz9mdW5jdGlvbiBOMyhTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9W10sRz0wO0chPVI7KytHKXt2YXIgUT1TLmw7a1tH'@;
put 'XT1TLnJlYWRfc2hpZnQoMCwibHB3c3RyIikucmVwbGFjZShFLCIiKSxTLmwtUSYyJiYoUy5sKz0yKX1yZXR1cm4ga30oUyk6ZnVuY3Rpb24gV3coUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdLEc9MDtHIT1SOysrRylrW0ddPVMucmVhZF9zaGlmdCgwLCJscHN0ci1jcCIpLnJl'@;
put 'cGxhY2UoRSwiIik7cmV0dXJuIGt9KFMpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIitSKyIgIitHKX19ZnVuY3Rpb24geWYoUyxSKXt2YXIgaz1ibig0KSxHPWJuKDQpO3N3aXRjaChrLndyaXRlX3NoaWZ0KDQsODA9PVM/'@;
put 'MzE6UyksUyl7Y2FzZSAzOkcud3JpdGVfc2hpZnQoLTQsUik7YnJlYWs7Y2FzZSA1OihHPWJuKDgpKS53cml0ZV9zaGlmdCg4LFIsImYiKTticmVhaztjYXNlIDExOkcud3JpdGVfc2hpZnQoNCxSPzE6MCk7YnJlYWs7Y2FzZSA2NDpHPWZ1bmN0aW9uIGhjKFMpe3ZhciBrPSgic3RyaW5nIj09'@;
put 'dHlwZW9mIFM/bmV3IERhdGUoRGF0ZS5wYXJzZShTKSk6UykuZ2V0VGltZSgpLzFlMysxMTY0NDQ3MzYwMCxHPWslTWF0aC5wb3coMiwzMiksUT0oay1HKS9NYXRoLnBvdygyLDMyKTtRKj0xZTc7dmFyIGFlPShHKj0xZTcpL01hdGgucG93KDIsMzIpfDA7YWU+MCYmKEclPU1hdGgucG93KDIs'@;
put 'MzIpLFErPWFlKTt2YXIgZ2U9Ym4oOCk7cmV0dXJuIGdlLndyaXRlX3NoaWZ0KDQsRyksZ2Uud3JpdGVfc2hpZnQoNCxRKSxnZX0oUik7YnJlYWs7Y2FzZSAzMTpjYXNlIDgwOmZvcigoRz1ibig0KzIqKFIubGVuZ3RoKzEpKyhSLmxlbmd0aCUyPzA6MikpKS53cml0ZV9zaGlmdCg0LFIubGVu'@;
put 'Z3RoKzEpLEcud3JpdGVfc2hpZnQoMCxSLCJkYmNzIik7Ry5sIT1HLmxlbmd0aDspRy53cml0ZV9zaGlmdCgxLDApO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIitTKyIgIitSKX1yZXR1cm4gaihbayxHXSl9ZnVu'@;
put 'Y3Rpb24gb2goUyxSKXt2YXIgaz1TLmwsRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCksYWU9W10sZ2U9MCxwZT0wLHllPS0xLFBlPXt9O2ZvcihnZT0wO2dlIT1ROysrZ2Upe3ZhciBOZT1TLnJlYWRfc2hpZnQoNCksWWU9Uy5yZWFkX3NoaWZ0KDQpO2FlW2dlXT1bTmUsWWUr'@;
put 'a119YWUuc29ydChmdW5jdGlvbihrdCxPdCl7cmV0dXJuIGt0WzFdLU90WzFdfSk7dmFyIGV0PXt9O2ZvcihnZT0wO2dlIT1ROysrZ2Upe2lmKFMubCE9PWFlW2dlXVsxXSl7dmFyIGN0PSEwO2lmKGdlPjAmJlIpc3dpdGNoKFJbYWVbZ2UtMV1bMF1dLnQpe2Nhc2UgMjpTLmwrMj09PWFlW2dl'@;
put 'XVsxXSYmKFMubCs9MixjdD0hMSk7YnJlYWs7Y2FzZSA4MDpjYXNlIDQxMDg6Uy5sPD1hZVtnZV1bMV0mJihTLmw9YWVbZ2VdWzFdLGN0PSExKX1pZigoIVJ8fDA9PWdlKSYmUy5sPD1hZVtnZV1bMV0mJihjdD0hMSxTLmw9YWVbZ2VdWzFdKSxjdCl0aHJvdyBuZXcgRXJyb3IoIlJlYWQgRXJy'@;
put 'b3I6IEV4cGVjdGVkIGFkZHJlc3MgIithZVtnZV1bMV0rIiBhdCAiK1MubCsiIDoiK2dlKX1pZihSKXt2YXIgRXQ9UlthZVtnZV1bMF1dO2lmKGV0W0V0Lm5dPWJmKFMsRXQudCx7cmF3OiEwfSksInZlcnNpb24iPT09RXQucCYmKGV0W0V0Lm5dPVN0cmluZyhldFtFdC5uXT4+MTYpKyIuIiso'@;
put 'IjAwMDAiK1N0cmluZyg2NTUzNSZldFtFdC5uXSkpLnNsaWNlKC00KSksIkNvZGVQYWdlIj09RXQubilzd2l0Y2goZXRbRXQubl0pe2Nhc2UgMDpldFtFdC5uXT0xMjUyO2Nhc2UgODc0OmNhc2UgOTMyOmNhc2UgOTM2OmNhc2UgOTQ5OmNhc2UgOTUwOmNhc2UgMTI1MDpjYXNlIDEyNTE6Y2Fz'@;
put 'ZSAxMjUzOmNhc2UgMTI1NDpjYXNlIDEyNTU6Y2FzZSAxMjU2OmNhc2UgMTI1NzpjYXNlIDEyNTg6Y2FzZSAxZTQ6Y2FzZSAxMjAwOmNhc2UgMTIwMTpjYXNlIDEyNTI6Y2FzZSA2NWUzOmNhc2UtNTM2OmNhc2UgNjUwMDE6Y2FzZS01MzU6VShwZT1ldFtFdC5uXT4+PjAmNjU1MzUpO2JyZWFr'@;
put 'O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2RlUGFnZTogIitldFtFdC5uXSl9fWVsc2UgaWYoMT09PWFlW2dlXVswXSl7aWYocGU9ZXQuQ29kZVBhZ2U9YmYoUyxlMiksVShwZSksLTEhPT15ZSl7dmFyIG90PVMubDtTLmw9YWVbeWVdWzFdLFBlPWc1KFMscGUpLFMu'@;
put 'bD1vdH19ZWxzZSBpZigwPT09YWVbZ2VdWzBdKXtpZigwPT09cGUpe3llPWdlLFMubD1hZVtnZSsxXVsxXTtjb250aW51ZX1QZT1nNShTLHBlKX1lbHNle3ZhciBqdCxidD1QZVthZVtnZV1bMF1dO3N3aXRjaChTW1MubF0pe2Nhc2UgNjU6Uy5sKz00LGp0PXEwKFMpO2JyZWFrO2Nhc2UgMzA6'@;
put 'Y2FzZSAzMTpTLmwrPTQsanQ9SDYoUyxTW1MubC00XSkucmVwbGFjZSgvXHUwMDAwKyQvLCIiKTticmVhaztjYXNlIDM6Uy5sKz00LGp0PVMucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSAxOTpTLmwrPTQsanQ9Uy5yZWFkX3NoaWZ0KDQpO2JyZWFrO2Nhc2UgNTpTLmwrPTQsanQ9Uy5y'@;
put 'ZWFkX3NoaWZ0KDgsImYiKTticmVhaztjYXNlIDExOlMubCs9NCxqdD1kYShTLDQpO2JyZWFrO2Nhc2UgNjQ6Uy5sKz00LGp0PUhlKEgzKFMpKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5wYXJzZWQgdmFsdWU6ICIrU1tTLmxdKX1ldFtidF09anR9fXJldHVybiBTLmw9aytH'@;
put 'LGV0fXZhciBONj1bIkNvZGVQYWdlIiwiVGh1bWJuYWlsIiwiX1BJRF9MSU5LQkFTRSIsIl9QSURfSExJTktTIiwiU3lzdGVtSWRlbnRpZmllciIsIkZNVElEIl0uY29uY2F0KFsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiLCJOYW1lZFJhbmdlcyIsIkRlZmluZWROYW1lcyIsIkNoYXJ0c2hl'@;
put 'ZXRzIiwiQ2hhcnROYW1lcyJdKTtmdW5jdGlvbiBGYyhTKXtzd2l0Y2godHlwZW9mIFMpe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIDExO2Nhc2UibnVtYmVyIjpyZXR1cm4oMHxTKT09Uz8zOjU7Y2FzZSJzdHJpbmciOnJldHVybiAzMTtjYXNlIm9iamVjdCI6aWYoUyBpbnN0YW5jZW9mIERhdGUp'@;
put 'cmV0dXJuIDY0fXJldHVybi0xfWZ1bmN0aW9uIFY2KFMsUixrKXt2YXIgRz1ibig4KSxRPVtdLGFlPVtdLGdlPTgscGU9MCx5ZT1ibig4KSxQZT1ibig4KTtpZih5ZS53cml0ZV9zaGlmdCg0LDIpLHllLndyaXRlX3NoaWZ0KDQsMTIwMCksUGUud3JpdGVfc2hpZnQoNCwxKSxhZS5wdXNoKHll'@;
put 'KSxRLnB1c2goUGUpLGdlKz04K3llLmxlbmd0aCwhUil7KFBlPWJuKDgpKS53cml0ZV9zaGlmdCg0LDApLFEudW5zaGlmdChQZSk7dmFyIE5lPVtibig0KV07Zm9yKE5lWzBdLndyaXRlX3NoaWZ0KDQsUy5sZW5ndGgpLHBlPTA7cGU8Uy5sZW5ndGg7KytwZSl7dmFyIFllPVNbcGVdWzBdO2Zv'@;
put 'cigoeWU9Ym4oOCsyKihZZS5sZW5ndGgrMSkrKFllLmxlbmd0aCUyPzA6MikpKS53cml0ZV9zaGlmdCg0LHBlKzIpLHllLndyaXRlX3NoaWZ0KDQsWWUubGVuZ3RoKzEpLHllLndyaXRlX3NoaWZ0KDAsWWUsImRiY3MiKTt5ZS5sIT15ZS5sZW5ndGg7KXllLndyaXRlX3NoaWZ0KDEsMCk7TmUu'@;
put 'cHVzaCh5ZSl9eWU9aihOZSksYWUudW5zaGlmdCh5ZSksZ2UrPTgreWUubGVuZ3RofWZvcihwZT0wO3BlPFMubGVuZ3RoOysrcGUpaWYoKCFSfHxSW1NbcGVdWzBdXSkmJiEoTjYuaW5kZXhPZihTW3BlXVswXSk+LTEpJiZudWxsIT1TW3BlXVsxXSl7dmFyIGV0PVNbcGVdWzFdLGN0PTA7aWYo'@;
put 'Uil7dmFyIEV0PWtbY3Q9K1JbU1twZV1bMF1dXTtpZigidmVyc2lvbiI9PUV0LnAmJiJzdHJpbmciPT10eXBlb2YgZXQpe3ZhciBvdD1ldC5zcGxpdCgiLiIpO2V0PSgrb3RbMF08PDE2KSsoK290WzFdfHwwKX15ZT15ZihFdC50LGV0KX1lbHNle3ZhciBidD1GYyhldCk7LTE9PWJ0JiYoYnQ9'@;
put 'MzEsZXQ9U3RyaW5nKGV0KSkseWU9eWYoYnQsZXQpfWFlLnB1c2goeWUpLChQZT1ibig4KSkud3JpdGVfc2hpZnQoNCxSP2N0OjIrcGUpLFEucHVzaChQZSksZ2UrPTgreWUubGVuZ3RofXZhciBqdD04KihhZS5sZW5ndGgrMSk7Zm9yKHBlPTA7cGU8YWUubGVuZ3RoOysrcGUpUVtwZV0ud3Jp'@;
put 'dGVfc2hpZnQoNCxqdCksanQrPWFlW3BlXS5sZW5ndGg7cmV0dXJuIEcud3JpdGVfc2hpZnQoNCxnZSksRy53cml0ZV9zaGlmdCg0LGFlLmxlbmd0aCksaihbR10uY29uY2F0KFEpLmNvbmNhdChhZSkpfWZ1bmN0aW9uIEI2KFMsUixrKXt2YXIgRz1TLmNvbnRlbnQ7aWYoIUcpcmV0dXJue307'@;
put 'bW4oRywwKTt2YXIgUSxhZSxnZSxwZSx5ZT0wO0cuY2hrKCJmZWZmIiwiQnl0ZSBPcmRlcjogIiksRy5yZWFkX3NoaWZ0KDIpO3ZhciBQZT1HLnJlYWRfc2hpZnQoNCksTmU9Ry5yZWFkX3NoaWZ0KDE2KTtpZihOZSE9PXZlLnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQmJk5lIT09ayl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkJhZCBQcm9wZXJ0eVNldCBDTFNJRCAiK05lKTtpZigxIT09KFE9Ry5yZWFkX3NoaWZ0KDQpKSYmMiE9PVEpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIrUSk7aWYoYWU9Ry5yZWFkX3NoaWZ0KDE2KSxwZT1HLnJlYWRfc2hpZnQoNCksMT09PVEm'@;
put 'JnBlIT09Ry5sKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoOiAiK3BlKyIgIT09ICIrRy5sKTsyPT09USYmKGdlPUcucmVhZF9zaGlmdCgxNikseWU9Ry5yZWFkX3NoaWZ0KDQpKTt2YXIgRXQsWWU9b2goRyxSKSxldD17U3lzdGVtSWRlbnRpZmllcjpQZX07Zm9yKHZhciBjdCBp'@;
put 'biBZZSlldFtjdF09WWVbY3RdO2lmKGV0LkZNVElEPWFlLDE9PT1RKXJldHVybiBldDtpZih5ZS1HLmw9PTImJihHLmwrPTIpLEcubCE9PXllKXRocm93IG5ldyBFcnJvcigiTGVuZ3RoIG1pc21hdGNoIDI6ICIrRy5sKyIgIT09ICIreWUpO3RyeXtFdD1vaChHLG51bGwpfWNhdGNoe31mb3Io'@;
put 'Y3QgaW4gRXQpZXRbY3RdPUV0W2N0XTtyZXR1cm4gZXQuRk1USUQ9W2FlLGdlXSxldH1mdW5jdGlvbiB6aShTLFIsayxHLFEsYWUpe3ZhciBnZT1ibihRPzY4OjQ4KSxwZT1bZ2VdO2dlLndyaXRlX3NoaWZ0KDIsNjU1MzQpLGdlLndyaXRlX3NoaWZ0KDIsMCksZ2Uud3JpdGVfc2hpZnQoNCw4'@;
put 'NDI0MTI1OTkpLGdlLndyaXRlX3NoaWZ0KDE2LHZlLnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQsImhleCIpLGdlLndyaXRlX3NoaWZ0KDQsUT8yOjEpLGdlLndyaXRlX3NoaWZ0KDE2LFIsImhleCIpLGdlLndyaXRlX3NoaWZ0KDQsUT82ODo0OCk7dmFyIHllPVY2KFMsayxHKTtpZihwZS5w'@;
put 'dXNoKHllKSxRKXt2YXIgUGU9VjYoUSxudWxsLG51bGwpO2dlLndyaXRlX3NoaWZ0KDE2LGFlLCJoZXgiKSxnZS53cml0ZV9zaGlmdCg0LDY4K3llLmxlbmd0aCkscGUucHVzaChQZSl9cmV0dXJuIGoocGUpfWZ1bmN0aW9uIHIyKFMsUil7cmV0dXJuIFMucmVhZF9zaGlmdChSKSxudWxsfWZ1'@;
put 'bmN0aW9uIGRhKFMsUil7cmV0dXJuIDE9PT1TLnJlYWRfc2hpZnQoUil9ZnVuY3Rpb24gZXUoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oMikpLFIud3JpdGVfc2hpZnQoMiwrISFTKSxSfWZ1bmN0aW9uIEVjKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiwidSIpfWZ1bmN0aW9uIHIwKFMsUil7cmV0'@;
put 'dXJuIFJ8fChSPWJuKDIpKSxSLndyaXRlX3NoaWZ0KDIsUyksUn1mdW5jdGlvbiB3NChTLFIpe3JldHVybiBmdW5jdGlvbiBTdihTLFIsayl7Zm9yKHZhciBHPVtdLFE9Uy5sK1I7Uy5sPFE7KUcucHVzaChrKFMsUS1TLmwpKTtpZihRIT09Uy5sKXRocm93IG5ldyBFcnJvcigiU2x1cnAgZXJy'@;
put 'b3IiKTtyZXR1cm4gR30oUyxSLEVjKX1mdW5jdGlvbiBLaShTLFIsayl7cmV0dXJuIGt8fChrPWJuKDIpKSxrLndyaXRlX3NoaWZ0KDEsImUiPT1SPytTOishIVMpLGsud3JpdGVfc2hpZnQoMSwiZSI9PVI/MTowKSxrfWZ1bmN0aW9uIFpvKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoayYm'@;
put 'ay5iaWZmPj0xMj8yOjEpLFE9InNiY3MtY29udCIsYWU9UDtrJiZrLmJpZmY+PTgmJihQPTEyMDApLGsmJjghPWsuYmlmZj8xMj09ay5iaWZmJiYoUT0id3N0ciIpOlMucmVhZF9zaGlmdCgxKSYmKFE9ImRiY3MtY29udCIpLGsuYmlmZj49MiYmay5iaWZmPD01JiYoUT0iY3BzdHIiKTt2YXIg'@;
put 'cGU9Rz9TLnJlYWRfc2hpZnQoRyxRKToiIjtyZXR1cm4gUD1hZSxwZX1mdW5jdGlvbiBmYyhTKXt2YXIgUj1QO1A9MTIwMDt2YXIgeWUsaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoMSksUT00JkcsYWU9OCZHLGdlPTErKDEmRykscGU9MCxQZT17fTthZSYmKHBlPVMucmVhZF9z'@;
put 'aGlmdCgyKSksUSYmKHllPVMucmVhZF9zaGlmdCg0KSk7dmFyIFllPTA9PT1rPyIiOlMucmVhZF9zaGlmdChrLDI9PWdlPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtpZihhZSlmb3IoUGUuX1I9W107cGUtLSA+MDspUGUuX1IucHVzaCh7aWR4OlMucmVhZF9zaGlmdCgyKSxpZm50OlMucmVh'@;
put 'ZF9zaGlmdCgyKX0pO3JldHVybiBRJiYoUy5sKz15ZSksUGUudD1ZZSxhZXx8KFBlLnI9Ijx0PiIrUGUudCsiPC90PiIpLFA9UixQZX1mdW5jdGlvbiBIYyhTLFIpe3ZhciBrPVMuUiYmUy5SLmxlbmd0aHx8Uy5yO1MuciYmKFMuUj1fNShTLnIpKTt2YXIgRz0iIixRPTA7az9TLlIuZm9yRWFj'@;
put 'aChmdW5jdGlvbihFdCl7USsrLEcrPUV0LnZ8fCIifSk6KEc9Uy50fHwiIixRPTEpO3ZhciBhZT1ibigzKyhRPjE/MjowKSk7YWUud3JpdGVfc2hpZnQoMixHLmxlbmd0aCksYWUud3JpdGVfc2hpZnQoMSwxfChRPjE/ODowKSksUT4xJiZhZS53cml0ZV9zaGlmdCgyLFEpO3ZhciBnZT1ibigy'@;
put 'KkcubGVuZ3RoKTtnZS53cml0ZV9zaGlmdCgyKkcubGVuZ3RoLEcsInV0ZjE2bGUiKTt2YXIgcGU9W2FlLGdlXTtpZihrKXt2YXIgeWU9Ym4oNCpTLlIubGVuZ3RoKSxQZT0wO3BlLnB1c2goeWUpO2Zvcih2YXIgTmU9MDtOZTxTLlIubGVuZ3RoOysrTmUpe3ZhciBZZT1TLlJbTmVdO3llLndy'@;
put 'aXRlX3NoaWZ0KDIsUGUpLFBlKz0oWWUudnx8IiIpLmxlbmd0aDt2YXIgZXQ9WWUucz9zMChSLmNlbGxYZnMsUi5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlllLnN9LFIpOjAsY3Q9Ui5jZWxsWGZzW2V0XS5mb250SWQ7eWUud3JpdGVfc2hpZnQoMixjdDw0P2N0OmN0KzEpfX1yZXR1cm4g'@;
put 'aihwZSl9ZnVuY3Rpb24gcmMoUyxSLGspe2lmKGspe2lmKGsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiBTLnJlYWRfc2hpZnQoUiwiY3BzdHIiKTtpZihrLmJpZmY+PTEyKXJldHVybiBTLnJlYWRfc2hpZnQoUiwiZGJjcy1jb250Iil9dmFyIFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBT'@;
put 'LnJlYWRfc2hpZnQoUiwwPT09UT8ic2Jjcy1jb250IjoiZGJjcy1jb250Iil9ZnVuY3Rpb24gdHUoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKTtyZXR1cm4gMD09PUc/KFMubCsrLCIiKTpyYyhTLEcsayl9ZnVuY3Rpb24gWDAoUyxSLGspe2lmKGsuYmlmZj41'@;
put 'KXJldHVybiB0dShTLDAsayk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09Rz8oUy5sKyssIiIpOlMucmVhZF9zaGlmdChHLGsuYmlmZjw9NHx8IVMubGVucz8iY3BzdHIiOiJzYmNzLWNvbnQiKX1mdW5jdGlvbiBjbChTLFIsayl7cmV0dXJuIGt8fChrPWJuKDMrMipTLmxlbmd0'@;
put 'aCkpLGsud3JpdGVfc2hpZnQoMixTLmxlbmd0aCksay53cml0ZV9zaGlmdCgxLDEpLGsud3JpdGVfc2hpZnQoMzEsUywidXRmMTZsZSIpLGt9ZnVuY3Rpb24gQzQoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBSPjA/Uy5yZWFkX3NoaWZ0KFIsInV0ZjE2bGUiKS5yZXBsYWNlKEUs'@;
put 'IiIpOiIifWZ1bmN0aW9uIG8wKFMsUil7Unx8KFI9Ym4oNisyKlMubGVuZ3RoKSksUi53cml0ZV9zaGlmdCg0LDErUy5sZW5ndGgpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKVIud3JpdGVfc2hpZnQoMixTLmNoYXJDb2RlQXQoaykpO3JldHVybiBSLndyaXRlX3NoaWZ0KDIsMCksUn1m'@;
put 'dW5jdGlvbiBTNChTKXt2YXIgUj1ibig1MTIpLGs9MCxHPVMuVGFyZ2V0OyJmaWxlOi8vIj09Ry5zbGljZSgwLDcpJiYoRz1HLnNsaWNlKDcpKTt2YXIgUT1HLmluZGV4T2YoIiMiKSxhZT1RPi0xPzMxOjIzO3N3aXRjaChHLmNoYXJBdCgwKSl7Y2FzZSIjIjphZT0yODticmVhaztjYXNlIi4i'@;
put 'OmFlJj0tM31SLndyaXRlX3NoaWZ0KDQsMiksUi53cml0ZV9zaGlmdCg0LGFlKTt2YXIgZ2U9WzgsNjgxNTgyNyw2NjE5MjM3LDQ4NDk3ODAsODNdO2ZvcihrPTA7azxnZS5sZW5ndGg7KytrKVIud3JpdGVfc2hpZnQoNCxnZVtrXSk7aWYoMjg9PWFlKW8wKEc9Ry5zbGljZSgxKSxSKTtlbHNl'@;
put 'IGlmKDImYWUpe2ZvcihnZT0iZTAgYzkgZWEgNzkgZjkgYmEgY2UgMTEgOGMgODIgMDAgYWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIgIiksaz0wO2s8Z2UubGVuZ3RoOysraylSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoZ2Vba10sMTYpKTt2YXIgcGU9UT4tMT9HLnNsaWNlKDAsUSk6Rztmb3Io'@;
put 'Ui53cml0ZV9zaGlmdCg0LDIqKHBlLmxlbmd0aCsxKSksaz0wO2s8cGUubGVuZ3RoOysraylSLndyaXRlX3NoaWZ0KDIscGUuY2hhckNvZGVBdChrKSk7Ui53cml0ZV9zaGlmdCgyLDApLDgmYWUmJm8wKFE+LTE/Ry5zbGljZShRKzEpOiIiLFIpfWVsc2V7Zm9yKGdlPSIwMyAwMyAwMCAwMCAw'@;
put 'MCAwMCAwMCAwMCBjMCAwMCAwMCAwMCAwMCAwMCAwMCA0NiIuc3BsaXQoIiAiKSxrPTA7azxnZS5sZW5ndGg7KytrKVIud3JpdGVfc2hpZnQoMSxwYXJzZUludChnZVtrXSwxNikpO2Zvcih2YXIgeWU9MDsiLi4vIj09Ry5zbGljZSgzKnllLDMqeWUrMyl8fCIuLlxcIj09Ry5zbGljZSgzKnll'@;
put 'LDMqeWUrMyk7KSsreWU7Zm9yKFIud3JpdGVfc2hpZnQoMix5ZSksUi53cml0ZV9zaGlmdCg0LEcubGVuZ3RoLTMqeWUrMSksaz0wO2s8Ry5sZW5ndGgtMyp5ZTsrK2spUi53cml0ZV9zaGlmdCgxLDI1NSZHLmNoYXJDb2RlQXQoayszKnllKSk7Zm9yKFIud3JpdGVfc2hpZnQoMSwwKSxSLndy'@;
put 'aXRlX3NoaWZ0KDIsNjU1MzUpLFIud3JpdGVfc2hpZnQoMiw1NzAwNSksaz0wO2s8NjsrK2spUi53cml0ZV9zaGlmdCg0LDApfXJldHVybiBSLnNsaWNlKDAsUi5sKX1mdW5jdGlvbiB3ZihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSks'@;
put 'Uy5yZWFkX3NoaWZ0KDEpXX1mdW5jdGlvbiBkZChTLFIpe3ZhciBrPXdmKFMpO3JldHVybiBrWzNdPTAsa31mdW5jdGlvbiBfMChTKXtyZXR1cm57cjpTLnJlYWRfc2hpZnQoMiksYzpTLnJlYWRfc2hpZnQoMiksaXhmZTpTLnJlYWRfc2hpZnQoMil9fWZ1bmN0aW9uIG8yKFMsUixrLEcpe3Jl'@;
put 'dHVybiBHfHwoRz1ibig2KSksRy53cml0ZV9zaGlmdCgyLFMpLEcud3JpdGVfc2hpZnQoMixSKSxHLndyaXRlX3NoaWZ0KDIsa3x8MCksR31mdW5jdGlvbiBDZihTLFIsayl7dmFyIEc9ay5iaWZmPjg/NDoyO3JldHVybltTLnJlYWRfc2hpZnQoRyksUy5yZWFkX3NoaWZ0KEcsImkiKSxTLnJl'@;
put 'YWRfc2hpZnQoRywiaSIpXX1mdW5jdGlvbiB3YShTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDIpLEkxKFMpXX1mdW5jdGlvbiBzMihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6Uy5yZWFkX3NoaWZ0KDIpLHI6Un0sZTp7YzpTLnJlYWRfc2hp'@;
put 'ZnQoMikscjprfX19ZnVuY3Rpb24gbXUoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oOCkpLFIud3JpdGVfc2hpZnQoMixTLnMuciksUi53cml0ZV9zaGlmdCgyLFMuZS5yKSxSLndyaXRlX3NoaWZ0KDIsUy5zLmMpLFIud3JpdGVfc2hpZnQoMixTLmUuYyksUn1mdW5jdGlvbiBNNChTKXt2YXIgUj1T'@;
put 'LnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3M6e2M6Uy5yZWFkX3NoaWZ0KDEpLHI6Un0sZTp7YzpTLnJlYWRfc2hpZnQoMSkscjprfX19dmFyIGdjPU00O2Z1bmN0aW9uIHY1KFMpe1MubCs9NDt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiks'@;
put 'Rz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9MTIsW2ssUixHXX1mdW5jdGlvbiBudShTKXtTLmwrPTIsUy5sKz1TLnJlYWRfc2hpZnQoMil9dmFyIFNmPXswOm51LDQ6bnUsNTpudSw2Om51LDc6ZnVuY3Rpb24gUHUoUyl7cmV0dXJuIFMubCs9NCxTLmNmPVMucmVhZF9zaGlmdCgyKSx7'@;
put 'fX0sODpudSw5Om51LDEwOm51LDExOm51LDEyOm51LDEzOmZ1bmN0aW9uIE91KFMpe3ZhciBSPXt9O3JldHVybiBTLmwrPTQsUy5sKz0xNixSLmZTaGFyZWROb3RlPVMucmVhZF9zaGlmdCgyKSxTLmwrPTQsUn0sMTQ6bnUsMTU6bnUsMTY6bnUsMTc6bnUsMTg6bnUsMTk6bnUsMjA6bnUsMjE6'@;
put 'djV9O2Z1bmN0aW9uIE5jKFMsUil7dmFyIGs9e0JJRkZWZXI6MCxkdDowfTtzd2l0Y2goay5CSUZGVmVyPVMucmVhZF9zaGlmdCgyKSwoUi09Mik+PTImJihrLmR0PVMucmVhZF9zaGlmdCgyKSxTLmwtPTIpLGsuQklGRlZlcil7Y2FzZSAxNTM2OmNhc2UgMTI4MDpjYXNlIDEwMjQ6Y2FzZSA3'@;
put 'Njg6Y2FzZSA1MTI6Y2FzZSAyOmNhc2UgNzpicmVhaztkZWZhdWx0OmlmKFI+Nil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgQklGRiBWZXIgIitrLkJJRkZWZXIpfXJldHVybiBTLnJlYWRfc2hpZnQoUiksa31mdW5jdGlvbiB4NChTLFIsayl7dmFyIEc9MTUzNixRPTE2O3N3aXRjaChr'@;
put 'LmJvb2tUeXBlKXtjYXNlImJpZmY4IjpjYXNlInhsYSI6YnJlYWs7Y2FzZSJiaWZmNSI6Rz0xMjgwLFE9ODticmVhaztjYXNlImJpZmY0IjpHPTQsUT02O2JyZWFrO2Nhc2UiYmlmZjMiOkc9MyxRPTY7YnJlYWs7Y2FzZSJiaWZmMiI6Rz0yLFE9NDticmVhaztkZWZhdWx0OnRocm93IG5ldyBF'@;
put 'cnJvcigidW5zdXBwb3J0ZWQgQklGRiB2ZXJzaW9uIil9dmFyIGFlPWJuKFEpO3JldHVybiBhZS53cml0ZV9zaGlmdCgyLEcpLGFlLndyaXRlX3NoaWZ0KDIsUiksUT40JiZhZS53cml0ZV9zaGlmdCgyLDI5MjgyKSxRPjYmJmFlLndyaXRlX3NoaWZ0KDIsMTk5NyksUT44JiYoYWUud3JpdGVf'@;
put 'c2hpZnQoMiw0OTE2MSksYWUud3JpdGVfc2hpZnQoMiwxKSxhZS53cml0ZV9zaGlmdCgyLDE3OTgpLGFlLndyaXRlX3NoaWZ0KDIsMCkpLGFlfWZ1bmN0aW9uIGwyKFMsUil7dmFyIGs9IVJ8fFIuYmlmZj49OD8yOjEsRz1ibig4K2sqUy5uYW1lLmxlbmd0aCk7Ry53cml0ZV9zaGlmdCg0LFMu'@;
put 'cG9zKSxHLndyaXRlX3NoaWZ0KDEsUy5oc3x8MCksRy53cml0ZV9zaGlmdCgxLFMuZHQpLEcud3JpdGVfc2hpZnQoMSxTLm5hbWUubGVuZ3RoKSxSLmJpZmY+PTgmJkcud3JpdGVfc2hpZnQoMSwxKSxHLndyaXRlX3NoaWZ0KGsqUy5uYW1lLmxlbmd0aCxTLm5hbWUsUi5iaWZmPDg/InNiY3Mi'@;
put 'OiJ1dGYxNmxlIik7dmFyIFE9Ry5zbGljZSgwLEcubCk7cmV0dXJuIFEubD1HLmwsUX1mdW5jdGlvbiBpaShTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLGd1KFMpfWZ1bmN0aW9uIFNhKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoNCksdDAoUyl9ZnVuY3Rpb24gRnUoUyxSLGspe3JldHVybiBT'@;
put 'LnJlYWRfc2hpZnQoNCkscUIoUywwLGspfWZ1bmN0aW9uIGMyKFMsUixrKXt2YXIgRz0wO2smJjI9PWsuYmlmZnx8KEc9Uy5yZWFkX3NoaWZ0KDIpKTt2YXIgUT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIGsmJjI9PWsuYmlmZiYmKEc9MS0oUT4+MTUpLFEmPTMyNzY3KSxbe1Vuc3luY2VkOjEm'@;
put 'RyxEeVplcm86KDImRyk+PjEsRXhBc2M6KDQmRyk+PjIsRXhEc2M6KDgmRyk+PjN9LFFdfWZ1bmN0aW9uIGlWKFMsUixrLEcpe3ZhciBRPWsmJjU9PWsuYmlmZjtHfHwoRz1ibihRPzMrUi5sZW5ndGg6NSsyKlIubGVuZ3RoKSksRy53cml0ZV9zaGlmdCgyLFMpLEcud3JpdGVfc2hpZnQoUT8x'@;
put 'OjIsUi5sZW5ndGgpLFF8fEcud3JpdGVfc2hpZnQoMSwxKSxHLndyaXRlX3NoaWZ0KChRPzE6MikqUi5sZW5ndGgsUixRPyJzYmNzIjoidXRmMTZsZSIpO3ZhciBhZT1HLmxlbmd0aD5HLmw/Ry5zbGljZSgwLEcubCk6RztyZXR1cm4gbnVsbD09YWUubCYmKGFlLmw9YWUubGVuZ3RoKSxhZX12'@;
put 'YXIgdTI9WDA7ZnVuY3Rpb24gWHcoUyxSLGspe3ZhciBHPVMubCtSLFE9OCE9ay5iaWZmJiZrLmJpZmY/Mjo0LGFlPVMucmVhZF9zaGlmdChRKSxnZT1TLnJlYWRfc2hpZnQoUSkscGU9Uy5yZWFkX3NoaWZ0KDIpLHllPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sPUcse3M6e3I6YWUsYzpw'@;
put 'ZX0sZTp7cjpnZSxjOnllfX19ZnVuY3Rpb24gYjUoUyxSLGssRyl7dmFyIGFlPSFrfHwhay5iaWZmfHw4PT1rLmJpZmY7R3x8KEc9Ym4oayYmNT09ay5iaWZmPzE2OjIwKSksRy53cml0ZV9zaGlmdCgyLGFlJiZrLmNlbGxTdHlsZXMmJlMuZm9udElkJiYoUy5mb250SWQ8ND9TLmZvbnRJZDpT'@;
put 'LmZvbnRJZCsxKXx8MCk7dmFyIGdlPTE7Uy5wcm90ZWN0aW9uJiYoUy5wcm90ZWN0aW9uLmVkaXRhYmxlJiYoZ2UmPS0yKSxTLnByb3RlY3Rpb24uaGlkZGVuJiYoZ2V8PTIpKSxTLnN0eWxlPyhHLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksRy53cml0ZV9zaGlmdCgyLDY1NTI0fGdl'@;
put 'KSk6KEcud3JpdGVfc2hpZnQoMixTLm51bUZtdElkfHwwKSxHLndyaXRlX3NoaWZ0KDIsUjw8NHxnZSkpO3ZhciBwZT1TLmFsaWdubWVudHx8e307aWYoYWUpe3ZhciB5ZT0wLFBlPTA7azUuaW5kZXhPZihwZS5ob3Jpem9udGFsKT4tMSYmKHllfD1rNS5pbmRleE9mKHBlLmhvcml6b250YWwp'@;
put 'KSxwZS53cmFwVGV4dCYmKHllfD04KSxlOC5pbmRleE9mKHBlLnZlcnRpY2FsKT4tMT95ZXw9ZTguaW5kZXhPZihwZS52ZXJ0aWNhbCk8PDQ6bnVsbD09cGUudmVydGljYWwmJih5ZXw9MzIpLEcud3JpdGVfc2hpZnQoMSx5ZSksRy53cml0ZV9zaGlmdCgxLDApLHBlLnNocmlua1RvRml0JiYo'@;
put 'UGV8PTE2KSxHLndyaXRlX3NoaWZ0KDIsUGUpO3ZhciBOZT1udWxsO251bGwhPVMuYm9yZGVySWQmJihOZT1rLkJvcmRlcnMmJmsuQm9yZGVyc1tTLmJvcmRlcklkfHwwXXx8e30pO3ZhciBZZT0wLGV0PTAsY3Q9MDtOZSYmKG51bGwhPU5lLmxlZnQmJk5lLmxlZnQuc3R5bGUmJihZZXw9KGN0'@;
put 'PWdkLmluZGV4T2YoTmUubGVmdC5zdHlsZSkpPi0xP2N0OjApLG51bGwhPU5lLnJpZ2h0JiZOZS5yaWdodC5zdHlsZSYmKFllfD0oKGN0PWdkLmluZGV4T2YoTmUucmlnaHQuc3R5bGUpKT4tMT9jdDowKTw8NCksbnVsbCE9TmUudG9wJiZOZS50b3Auc3R5bGUmJihldHw9KGN0PWdkLmluZGV4'@;
put 'T2YoTmUudG9wLnN0eWxlKSk+LTE/Y3Q6MCksbnVsbCE9TmUuYm90dG9tJiZOZS5ib3R0b20uc3R5bGUmJihldHw9KChjdD1nZC5pbmRleE9mKE5lLmJvdHRvbS5zdHlsZSkpPi0xP2N0OjApPDw0KSksRy53cml0ZV9zaGlmdCgxLFllKSxHLndyaXRlX3NoaWZ0KDEsZXQpLEcud3JpdGVfc2hp'@;
put 'ZnQoMiwwKSxHLndyaXRlX3NoaWZ0KDIsMCksRy53cml0ZV9zaGlmdCgxLDApO3ZhciBFdD0wLG90PWsuRmlsbHMmJmsuRmlsbHNbUy5maWxsSWR8fDBdfHx7fTsob3QuZmdDb2xvcnx8b3QuYmdDb2xvcikmJihFdHw9NCksRy53cml0ZV9zaGlmdCgxLEV0KTt2YXIgYnQ9MDtidHw9UDQob3Qu'@;
put 'ZmdDb2xvciw2NSksYnR8PVA0KG90LmJnQ29sb3IsNjUpPDw3LEcud3JpdGVfc2hpZnQoMixidCl9ZWxzZSBHLndyaXRlX3NoaWZ0KDQsMCksRy53cml0ZV9zaGlmdCg0LDApLEcud3JpdGVfc2hpZnQoMiwwKTtyZXR1cm4gR31mdW5jdGlvbiBFNChTLFIsayl7dmFyIEc9XzAoUyk7KDI9PWsu'@;
put 'YmlmZnx8OT09UikmJisrUy5sO3ZhciBRPWZ1bmN0aW9uIHpsKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMT09PVMucmVhZF9zaGlmdCgxKT9SOjE9PT1SfShTKTtyZXR1cm4gRy52YWw9USxHLnQ9ITA9PT1RfHwhMT09PVE/ImIiOiJlIixHfXZhciBxQT1mdW5jdGlvbiBtNShT'@;
put 'LFIsayl7cmV0dXJuIDA9PT1SPyIiOlgwKFMsMCxrKX07ZnVuY3Rpb24gZUMoUyxSLGspe3ZhciBRLEc9Uy5yZWFkX3NoaWZ0KDIpLGFlPXtmQnVpbHRJbjoxJkcsZldhbnRBZHZpc2U6Rz4+PjEmMSxmV2FudFBpY3Q6Rz4+PjImMSxmT2xlOkc+Pj4zJjEsZk9sZUxpbms6Rz4+PjQmMSxjZjpH'@;
put 'Pj4+NSYxMDIzLGZJY29uOkc+Pj4xNSYxfTtyZXR1cm4gMTQ4NDk9PT1rLnNiY2NoJiYoUT1mdW5jdGlvbiBqNihTLFIsayl7Uy5sKz00O3ZhciBHPVMubCsoUi09NCksUT1abyhTLDAsayksYWU9Uy5yZWFkX3NoaWZ0KDIpO2lmKGFlIT09KEctPVMubCkpdGhyb3cgbmV3IEVycm9yKCJNYWxm'@;
put 'b3JtZWQgQWRkaW5VZGY6IHBhZGRpbmcgPSAiK0crIiAhPSAiK2FlKTtyZXR1cm4gUy5sKz1hZSxRfShTLFItMixrKSksYWUuYm9keT1RfHxTLnJlYWRfc2hpZnQoUi0yKSwic3RyaW5nIj09dHlwZW9mIFEmJihhZS5OYW1lPVEpLGFlfXZhciBsVj1bIl94bG5tLkNvbnNvbGlkYXRlX0FyZWEi'@;
put 'LCJfeGxubS5BdXRvX09wZW4iLCJfeGxubS5BdXRvX0Nsb3NlIiwiX3hsbm0uRXh0cmFjdCIsIl94bG5tLkRhdGFiYXNlIiwiX3hsbm0uQ3JpdGVyaWEiLCJfeGxubS5QcmludF9BcmVhIiwiX3hsbm0uUHJpbnRfVGl0bGVzIiwiX3hsbm0uUmVjb3JkZXIiLCJfeGxubS5EYXRhX0Zvcm0iLCJf'@;
put 'eGxubS5BdXRvX0FjdGl2YXRlIiwiX3hsbm0uQXV0b19EZWFjdGl2YXRlIiwiX3hsbm0uU2hlZXRfVGl0bGUiLCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiXTtmdW5jdGlvbiB0QyhTLFIsayl7dmFyIEc9Uy5sK1IsUT1TLnJlYWRfc2hpZnQoMiksYWU9Uy5yZWFkX3NoaWZ0KDEpLGdlPVMucmVh'@;
put 'ZF9zaGlmdCgxKSxwZT1TLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MikseWU9MDsoIWt8fGsuYmlmZj49NSkmJig1IT1rLmJpZmYmJihTLmwrPTIpLHllPVMucmVhZF9zaGlmdCgyKSw1PT1rLmJpZmYmJihTLmwrPTIpLFMubCs9NCk7dmFyIFBlPXJjKFMsZ2Usayk7MzImUSYmKFBlPWxW'@;
put 'W1BlLmNoYXJDb2RlQXQoMCldKTt2YXIgTmU9Ry1TLmw7ayYmMj09ay5iaWZmJiYtLU5lO3ZhciBZZT1HIT1TLmwmJjAhPT1wZSYmTmU+MD9mdW5jdGlvbiBFbmUoUyxSLGssRyl7dmFyIGdlLFE9Uy5sK1IsYWU9Y2goUyxHLGspO3JldHVybiBRIT09Uy5sJiYoZ2U9QjQoUyxRLVMubCxhZSxr'@;
put 'KSksW2FlLGdlXX0oUyxOZSxrLHBlKTpbXTtyZXR1cm57Y2hLZXk6YWUsTmFtZTpQZSxpdGFiOnllLHJnY2U6WWV9fWZ1bmN0aW9uIHh2KFMsUixrKXtpZihrLmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gbkMoUyxSLGspezM9PVNbUy5sKzFdJiZTW1MubF0rKzt2YXIgRz1abyhTLDAsayk7cmV0'@;
put 'dXJuIDM9PUcuY2hhckNvZGVBdCgwKT9HLnNsaWNlKDEpOkd9KFMsMCxrKTtmb3IodmFyIEc9W10sUT1TLmwrUixhZT1TLnJlYWRfc2hpZnQoay5iaWZmPjg/NDoyKTswIT1hZS0tOylHLnB1c2goQ2YoUywwLGspKTtpZihTLmwhPVEpdGhyb3cgbmV3IEVycm9yKCJCYWQgRXh0ZXJuU2hlZXQ6'@;
put 'ICIrUy5sKyIgIT0gIitRKTtyZXR1cm4gR31mdW5jdGlvbiBUdihTLFIsayl7dmFyIEc9Z2MoUyw2KTtzd2l0Y2goay5iaWZmKXtjYXNlIDI6Uy5sKyssUi09NzticmVhaztjYXNlIDM6Y2FzZSA0OlMubCs9MixSLT04O2JyZWFrO2RlZmF1bHQ6Uy5sKz02LFItPTEyfXJldHVybltHLHNEKFMs'@;
put 'UixrKV19dmFyIEpBPVtdO2Z1bmN0aW9uIGhWKFMpe3ZhciBSPWJuKDI0KSxrPU5hKFNbMF0pO1Iud3JpdGVfc2hpZnQoMixrLnIpLFIud3JpdGVfc2hpZnQoMixrLnIpLFIud3JpdGVfc2hpZnQoMixrLmMpLFIud3JpdGVfc2hpZnQoMixrLmMpO2Zvcih2YXIgRz0iZDAgYzkgZWEgNzkgZjkg'@;
put 'YmEgY2UgMTEgOGMgODIgMDAgYWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIgIiksUT0wO1E8MTY7KytRKVIud3JpdGVfc2hpZnQoMSxwYXJzZUludChHW1FdLDE2KSk7cmV0dXJuIGooW1IsUzQoU1sxXSldKX1mdW5jdGlvbiBwVihTKXt2YXIgUj1TWzFdLlRvb2x0aXAsaz1ibigxMCsyKihSLmxl'@;
put 'bmd0aCsxKSk7ay53cml0ZV9zaGlmdCgyLDIwNDgpO3ZhciBHPU5hKFNbMF0pO2sud3JpdGVfc2hpZnQoMixHLnIpLGsud3JpdGVfc2hpZnQoMixHLnIpLGsud3JpdGVfc2hpZnQoMixHLmMpLGsud3JpdGVfc2hpZnQoMixHLmMpO2Zvcih2YXIgUT0wO1E8Ui5sZW5ndGg7KytRKWsud3JpdGVf'@;
put 'c2hpZnQoMixSLmNoYXJDb2RlQXQoUSkpO3JldHVybiBrLndyaXRlX3NoaWZ0KDIsMCksa31mdW5jdGlvbiByQyhTLFIsayl7aWYoIWsuY2VsbFN0eWxlcylyZXR1cm4gSW4oUyxSKTt2YXIgRz1rJiZrLmJpZmY+PTEyPzQ6MixRPVMucmVhZF9zaGlmdChHKSxhZT1TLnJlYWRfc2hpZnQoRyks'@;
put 'Z2U9Uy5yZWFkX3NoaWZ0KEcpLHBlPVMucmVhZF9zaGlmdChHKSx5ZT1TLnJlYWRfc2hpZnQoMik7Mj09RyYmKFMubCs9Mik7dmFyIFBlPXtzOlEsZTphZSx3OmdlLGl4ZmU6cGUsZmxhZ3M6eWV9O3JldHVybihrLmJpZmY+PTV8fCFrLmJpZmYpJiYoUGUubGV2ZWw9eWU+PjgmNyksUGV9SkFb'@;
put 'OF09ZnVuY3Rpb24oUyxSKXt2YXIgaz1TLmwrUjtTLmwrPTEwO3ZhciBHPVMucmVhZF9zaGlmdCgyKTtTLmwrPTQsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz00O3ZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5sKz1RLFMubD1rLHtmbXQ6R319O3ZhciBYdGU9XzAsZWs9dzQsTDA9'@;
put 'dHU7dmFyIEIzPWZ1bmN0aW9uKCl7dmFyIFM9ezE6NDM3LDI6ODUwLDM6MTI1Miw0OjFlNCwxMDA6ODUyLDEwMTo4NjYsMTAyOjg2NSwxMDM6ODYxLDEwNDo4OTUsMTA1OjYyMCwxMDY6NzM3LDEwNzo4NTcsMTIwOjk1MCwxMjE6OTQ5LDEyMjo5MzYsMTIzOjkzMiwxMjQ6ODc0LDEyNToxMjU1'@;
put 'LDEyNjoxMjU2LDE1MDoxMDAwNywxNTE6MTAwMjksMTUyOjEwMDA2LDIwMDoxMjUwLDIwMToxMjUxLDIwMjoxMjU0LDIwMzoxMjUzLDA6MjAxMjcsODo4NjUsOTo0MzcsMTA6ODUwLDExOjQzNywxMzo0MzcsMTQ6ODUwLDE1OjQzNywxNjo4NTAsMTc6NDM3LDE4Ojg1MCwxOTo5MzIsMjA6ODUw'@;
put 'LDIxOjQzNywyMjo4NTAsMjM6ODY1LDI0OjQzNywyNTo0MzcsMjY6ODUwLDI3OjQzNywyODo4NjMsMjk6ODUwLDMxOjg1MiwzNDo4NTIsMzU6ODUyLDM2Ojg2MCwzNzo4NTAsMzg6ODY2LDU1Ojg1MCw2NDo4NTIsNzc6OTM2LDc4Ojk0OSw3OTo5NTAsODA6ODc0LDg3OjEyNTIsODg6MTI1Miw4'@;
put 'OToxMjUyLDEwODo4NjMsMTM0OjczNywxMzU6ODUyLDEzNjo4NTcsMjA0OjEyNTcsMjU1OjE2OTY5fSxSPVZlKHsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIx'@;
put 'Ojk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3fSk7ZnVuY3Rpb24gUSh5ZSxQZSl7dmFyIE5lPVBlfHx7fTtyZXR1cm4gTmUu'@;
put 'ZGF0ZU5GfHwoTmUuZGF0ZU5GPSJ5eXl5bW1kZCIpLHA0KGZ1bmN0aW9uIEcoeWUsUGUpe3ZhciBOZT1bXSxZZT1WKDEpO3N3aXRjaChQZS50eXBlKXtjYXNlImJhc2U2NCI6WWU9YihfZS5kZWNvZGUoeWUpKTticmVhaztjYXNlImJpbmFyeSI6WWU9Yih5ZSk7YnJlYWs7Y2FzZSJidWZmZXIi'@;
put 'OmNhc2UiYXJyYXkiOlllPXllfW1uKFllLDApO3ZhciBldD1ZZS5yZWFkX3NoaWZ0KDEpLGN0PSEhKDEzNiZldCksRXQ9ITEsb3Q9ITE7c3dpdGNoKGV0KXtjYXNlIDI6Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMjQ1OmJyZWFrO2Nhc2UgNDg6Y2FzZSA0OTpFdD0hMCxjdD0hMDti'@;
put 'cmVhaztjYXNlIDE0MDpvdD0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIFZlcnNpb246ICIrZXQudG9TdHJpbmcoMTYpKX12YXIgYnQ9MCxqdD01MjE7Mj09ZXQmJihidD1ZZS5yZWFkX3NoaWZ0KDIpKSxZZS5sKz0zLDIhPWV0JiYoYnQ9WWUucmVh'@;
put 'ZF9zaGlmdCg0KSksYnQ+MTA0ODU3NiYmKGJ0PTFlNiksMiE9ZXQmJihqdD1ZZS5yZWFkX3NoaWZ0KDIpKTt2YXIga3Q9WWUucmVhZF9zaGlmdCgyKSxPdD1QZS5jb2RlcGFnZXx8MTI1MjsyIT1ldCYmKFllLmwrPTE2LFllLnJlYWRfc2hpZnQoMSksMCE9PVllW1llLmxdJiYoT3Q9U1tZZVtZ'@;
put 'ZS5sXV0pLFllLmwrPTEsWWUubCs9Miksb3QmJihZZS5sKz0zNik7Zm9yKHZhciBLdD1bXSxUbj17fSxycj1NYXRoLm1pbihZZS5sZW5ndGgsMj09ZXQ/NTIxOmp0LTEwLShFdD8yNjQ6MCkpLFNuPW90PzMyOjExO1llLmw8cnImJjEzIT1ZZVtZZS5sXTspc3dpdGNoKFRuPXt9LFRuLm5hbWU9'@;
put 'Y3B0YWJsZS51dGlscy5kZWNvZGUoT3QsWWUuc2xpY2UoWWUubCxZZS5sK1NuKSkucmVwbGFjZSgvW1x1MDAwMFxyXG5dLiokL2csIiIpLFllLmwrPVNuLFRuLnR5cGU9U3RyaW5nLmZyb21DaGFyQ29kZShZZS5yZWFkX3NoaWZ0KDEpKSwyIT1ldCYmIW90JiYoVG4ub2Zmc2V0PVllLnJlYWRf'@;
put 'c2hpZnQoNCkpLFRuLmxlbj1ZZS5yZWFkX3NoaWZ0KDEpLDI9PWV0JiYoVG4ub2Zmc2V0PVllLnJlYWRfc2hpZnQoMikpLFRuLmRlYz1ZZS5yZWFkX3NoaWZ0KDEpLFRuLm5hbWUubGVuZ3RoJiZLdC5wdXNoKFRuKSwyIT1ldCYmKFllLmwrPW90PzEzOjE0KSxUbi50eXBlKXtjYXNlIkIiOigh'@;
put 'RXR8fDghPVRuLmxlbikmJlBlLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrVG4ubmFtZSsiOiIrVG4udHlwZSk7YnJlYWs7Y2FzZSJHIjpjYXNlIlAiOlBlLldURiYmY29uc29sZS5sb2coIlNraXBwaW5nICIrVG4ubmFtZSsiOiIrVG4udHlwZSk7YnJlYWs7Y2FzZSIrIjpjYXNlIjAi'@;
put 'OmNhc2UiQCI6Y2FzZSJDIjpjYXNlIkQiOmNhc2UiRiI6Y2FzZSJJIjpjYXNlIkwiOmNhc2UiTSI6Y2FzZSJOIjpjYXNlIk8iOmNhc2UiVCI6Y2FzZSJZIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBGaWVsZCBUeXBlOiAiK1RuLnR5cGUpfWlmKDEzIT09WWVbWWUu'@;
put 'bF0mJihZZS5sPWp0LTEpLDEzIT09WWUucmVhZF9zaGlmdCgxKSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBUZXJtaW5hdG9yIG5vdCBmb3VuZCAiK1llLmwrIiAiK1llW1llLmxdKTtZZS5sPWp0O3ZhciBscj0wLFhuPTA7Zm9yKE5lWzBdPVtdLFhuPTA7WG4hPUt0Lmxlbmd0aDsrK1huKU5lWzBd'@;
put 'W1huXT1LdFtYbl0ubmFtZTtmb3IoO2J0LS0gPjA7KWlmKDQyIT09WWVbWWUubF0pZm9yKCsrWWUubCxOZVsrK2xyXT1bXSxYbj0wLFhuPTA7WG4hPUt0Lmxlbmd0aDsrK1huKXt2YXIgVm49WWUuc2xpY2UoWWUubCxZZS5sK0t0W1huXS5sZW4pO1llLmwrPUt0W1huXS5sZW4sbW4oVm4sMCk7'@;
put 'dmFyIGhyPWNwdGFibGUudXRpbHMuZGVjb2RlKE90LFZuKTtzd2l0Y2goS3RbWG5dLnR5cGUpe2Nhc2UiQyI6aHIudHJpbSgpLmxlbmd0aCYmKE5lW2xyXVtYbl09aHIucmVwbGFjZSgvXHMrJC8sIiIpKTticmVhaztjYXNlIkQiOk5lW2xyXVtYbl09OD09PWhyLmxlbmd0aD9uZXcgRGF0ZSgr'@;
put 'aHIuc2xpY2UoMCw0KSwraHIuc2xpY2UoNCw2KS0xLCtoci5zbGljZSg2LDgpKTpocjticmVhaztjYXNlIkYiOk5lW2xyXVtYbl09cGFyc2VGbG9hdChoci50cmltKCkpO2JyZWFrO2Nhc2UiKyI6Y2FzZSJJIjpOZVtscl1bWG5dPW90PzIxNDc0ODM2NDheVm4ucmVhZF9zaGlmdCgtNCwiaSIp'@;
put 'OlZuLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UiTCI6c3dpdGNoKGhyLnRyaW0oKS50b1VwcGVyQ2FzZSgpKXtjYXNlIlkiOmNhc2UiVCI6TmVbbHJdW1huXT0hMDticmVhaztjYXNlIk4iOmNhc2UiRiI6TmVbbHJdW1huXT0hMTticmVhaztjYXNlIiI6Y2FzZSI/IjpicmVhaztkZWZh'@;
put 'dWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVucmVjb2duaXplZCBMOnwiK2hyKyJ8Iil9YnJlYWs7Y2FzZSJNIjppZighY3QpdGhyb3cgbmV3IEVycm9yKCJEQkYgVW5leHBlY3RlZCBNRU1PIGZvciB0eXBlICIrZXQudG9TdHJpbmcoMTYpKTtOZVtscl1bWG5dPSIjI01FTU8jIyIrKG90P3Bh'@;
put 'cnNlSW50KGhyLnRyaW0oKSwxMCk6Vm4ucmVhZF9zaGlmdCg0KSk7YnJlYWs7Y2FzZSJOIjooaHI9aHIucmVwbGFjZSgvXHUwMDAwL2csIiIpLnRyaW0oKSkmJiIuIiE9aHImJihOZVtscl1bWG5dPStocnx8MCk7YnJlYWs7Y2FzZSJAIjpOZVtscl1bWG5dPW5ldyBEYXRlKFZuLnJlYWRfc2hp'@;
put 'ZnQoLTgsImYiKS02MjEzNTY4MzJlNSk7YnJlYWs7Y2FzZSJUIjpOZVtscl1bWG5dPW5ldyBEYXRlKDg2NGU1KihWbi5yZWFkX3NoaWZ0KDQpLTI0NDA1ODgpK1ZuLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiWSI6TmVbbHJdW1huXT1Wbi5yZWFkX3NoaWZ0KDQsImkiKS8xZTQ7YnJlYWs7'@;
put 'Y2FzZSJPIjpOZVtscl1bWG5dPS1Wbi5yZWFkX3NoaWZ0KC04LCJmIik7YnJlYWs7Y2FzZSJCIjppZihFdCYmOD09S3RbWG5dLmxlbil7TmVbbHJdW1huXT1Wbi5yZWFkX3NoaWZ0KDgsImYiKTticmVha31jYXNlIkciOmNhc2UiUCI6Vm4ubCs9S3RbWG5dLmxlbjticmVhaztjYXNlIjAiOmlm'@;
put 'KCJfTnVsbEZsYWdzIj09PUt0W1huXS5uYW1lKWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgZGF0YSB0eXBlICIrS3RbWG5dLnR5cGUpfX1lbHNlIFllLmwrPWt0O2lmKDIhPWV0JiZZZS5sPFllLmxlbmd0aCYmMjYhPVllW1llLmwrK10pdGhyb3cgbmV3'@;
put 'IEVycm9yKCJEQkYgRU9GIE1hcmtlciBtaXNzaW5nICIrKFllLmwtMSkrIiBvZiAiK1llLmxlbmd0aCsiICIrWWVbWWUubC0xXS50b1N0cmluZygxNikpO3JldHVybiBQZSYmUGUuc2hlZXRSb3dzJiYoTmU9TmUuc2xpY2UoMCxQZS5zaGVldFJvd3MpKSxOZX0oeWUsTmUpLE5lKX12YXIgZ2U9'@;
put 'e0I6OCxDOjI1MCxMOjEsRDo4LCI/IjowLCIiOjB9O3JldHVybnt2ZXJzaW9uczpbMiwzLDQ4LDQ5LDEzMSwxMzksMTQwLDI0NV0sdG9fd29ya2Jvb2s6ZnVuY3Rpb24gYWUoeWUsUGUpe3RyeXtyZXR1cm4gbmgoUSh5ZSxQZSksUGUpfWNhdGNoKE5lKXtpZihQZSYmUGUuV1RGKXRocm93IE5l'@;
put 'fXJldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LHRvX3NoZWV0OlEsZnJvbV9zaGVldDpmdW5jdGlvbiBwZSh5ZSxQZSl7dmFyIE5lPVBlfHx7fTtpZigrTmUuY29kZXBhZ2U+PTAmJlUoK05lLmNvZGVwYWdlKSwic3RyaW5nIj09TmUudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5v'@;
put 'dCB3cml0ZSBEQkYgdG8gSlMgc3RyaW5nIik7dmFyIFllPXZpKCksZXQ9SzQoeWUse2hlYWRlcjoxLHJhdzohMCxjZWxsRGF0ZXM6ITB9KSxjdD1ldFswXSxFdD1ldC5zbGljZSgxKSxvdD0wLGJ0PTAsanQ9MCxrdD0xO2ZvcihvdD0wO290PGN0Lmxlbmd0aDsrK290KWlmKG51bGwhPW90KXtp'@;
put 'ZigrK2p0LCJudW1iZXIiPT10eXBlb2YgY3Rbb3RdJiYoY3Rbb3RdPWN0W290XS50b1N0cmluZygxMCkpLCJzdHJpbmciIT10eXBlb2YgY3Rbb3RdKXRocm93IG5ldyBFcnJvcigiREJGIEludmFsaWQgY29sdW1uIG5hbWUgIitjdFtvdF0rIiB8Iit0eXBlb2YgY3Rbb3RdKyJ8Iik7aWYoY3Qu'@;
put 'aW5kZXhPZihjdFtvdF0pIT09b3QpZm9yKGJ0PTA7YnQ8MTAyNDsrK2J0KWlmKC0xPT1jdC5pbmRleE9mKGN0W290XSsiXyIrYnQpKXtjdFtvdF0rPSJfIitidDticmVha319dmFyIE90PWFhKHllWyIhcmVmIl0pLEt0PVtdO2ZvcihvdD0wO290PD1PdC5lLmMtT3Qucy5jOysrb3Qpe3ZhciBU'@;
put 'bj1bXTtmb3IoYnQ9MDtidDxFdC5sZW5ndGg7KytidCludWxsIT1FdFtidF1bb3RdJiZUbi5wdXNoKEV0W2J0XVtvdF0pO2lmKDAhPVRuLmxlbmd0aCYmbnVsbCE9Y3Rbb3RdKXt2YXIgcnI9IiIsU249IiI7Zm9yKGJ0PTA7YnQ8VG4ubGVuZ3RoOysrYnQpe3N3aXRjaCh0eXBlb2YgVG5bYnRd'@;
put 'KXtjYXNlIm51bWJlciI6U249IkIiO2JyZWFrO2Nhc2Uic3RyaW5nIjpkZWZhdWx0OlNuPSJDIjticmVhaztjYXNlImJvb2xlYW4iOlNuPSJMIjticmVhaztjYXNlIm9iamVjdCI6U249VG5bYnRdaW5zdGFuY2VvZiBEYXRlPyJEIjoiQyJ9aWYoIkMiPT0ocnI9cnImJnJyIT1Tbj8iQyI6U24p'@;
put 'KWJyZWFrfWt0Kz1nZVtycl18fDAsS3Rbb3RdPXJyfWVsc2UgS3Rbb3RdPSI/In12YXIgbHI9WWUubmV4dCgzMik7Zm9yKGxyLndyaXRlX3NoaWZ0KDQsMzE4OTAyNTc2KSxsci53cml0ZV9zaGlmdCg0LEV0Lmxlbmd0aCksbHIud3JpdGVfc2hpZnQoMiwyOTYrMzIqanQpLGxyLndyaXRlX3No'@;
put 'aWZ0KDIsa3QpLG90PTA7b3Q8NDsrK290KWxyLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKGxyLndyaXRlX3NoaWZ0KDQsKCtSW0ZdfHwzKTw8OCksb3Q9MCxidD0wO290PGN0Lmxlbmd0aDsrK290KWlmKG51bGwhPWN0W290XSl7dmFyIFhuPVllLm5leHQoMzIpLFZuPShjdFtvdF0uc2xpY2UoLTEw'@;
put 'KSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIpLnNsaWNlKDAsMTEpO1huLndyaXRlX3NoaWZ0KDEsVm4sInNiY3MiKSxYbi53cml0ZV9zaGlmdCgxLCI/Ij09S3Rbb3RdPyJDIjpLdFtvdF0sInNiY3MiKSxYbi53cml0ZV9zaGlmdCg0LGJ0KSxYbi53cml0ZV9zaGlmdCgxLGdlW0t0W290XV18'@;
put 'fDApLFhuLndyaXRlX3NoaWZ0KDEsMCksWG4ud3JpdGVfc2hpZnQoMSwyKSxYbi53cml0ZV9zaGlmdCg0LDApLFhuLndyaXRlX3NoaWZ0KDEsMCksWG4ud3JpdGVfc2hpZnQoNCwwKSxYbi53cml0ZV9zaGlmdCg0LDApLGJ0Kz1nZVtLdFtvdF1dfHwwfXZhciBocj1ZZS5uZXh0KDI2NCk7Zm9y'@;
put 'KGhyLndyaXRlX3NoaWZ0KDQsMTMpLG90PTA7b3Q8NjU7KytvdCloci53cml0ZV9zaGlmdCg0LDApO2ZvcihvdD0wO290PEV0Lmxlbmd0aDsrK290KXt2YXIgYnI9WWUubmV4dChrdCk7Zm9yKGJyLndyaXRlX3NoaWZ0KDEsMCksYnQ9MDtidDxjdC5sZW5ndGg7KytidClpZihudWxsIT1jdFti'@;
put 'dF0pc3dpdGNoKEt0W2J0XSl7Y2FzZSJMIjpici53cml0ZV9zaGlmdCgxLG51bGw9PUV0W290XVtidF0/NjM6RXRbb3RdW2J0XT84NDo3MCk7YnJlYWs7Y2FzZSJCIjpici53cml0ZV9zaGlmdCg4LEV0W290XVtidF18fDAsImYiKTticmVhaztjYXNlIkQiOkV0W290XVtidF0/KGJyLndyaXRl'@;
put 'X3NoaWZ0KDQsKCIwMDAwIitFdFtvdF1bYnRdLmdldEZ1bGxZZWFyKCkpLnNsaWNlKC00KSwic2JjcyIpLGJyLndyaXRlX3NoaWZ0KDIsKCIwMCIrKEV0W290XVtidF0uZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpLCJzYmNzIiksYnIud3JpdGVfc2hpZnQoMiwoIjAwIitFdFtvdF1bYnRdLmdl'@;
put 'dERhdGUoKSkuc2xpY2UoLTIpLCJzYmNzIikpOmJyLndyaXRlX3NoaWZ0KDgsIjAwMDAwMDAwIiwic2JjcyIpO2JyZWFrO2Nhc2UiQyI6dmFyIGVyPVN0cmluZyhFdFtvdF1bYnRdfHwiIik7Zm9yKGJyLndyaXRlX3NoaWZ0KDEsZXIsInNiY3MiKSxqdD0wO2p0PDI1MC1lci5sZW5ndGg7Kytq'@;
put 'dClici53cml0ZV9zaGlmdCgxLDMyKX19cmV0dXJuIFllLm5leHQoMSkud3JpdGVfc2hpZnQoMSwyNiksWWUuZW5kKCl9fX0oKSxjQz1mdW5jdGlvbigpe3ZhciBTPXtBQToiXHhjMCIsQkE6Ilx4YzEiLENBOiJceGMyIixEQToxOTUsSEE6Ilx4YzQiLEpBOjE5NyxBRToiXHhjOCIsQkU6Ilx4'@;
put 'YzkiLENFOiJceGNhIixIRToiXHhjYiIsQUk6Ilx4Y2MiLEJJOiJceGNkIixDSToiXHhjZSIsSEk6Ilx4Y2YiLEFPOiJceGQyIixCTzoiXHhkMyIsQ086Ilx4ZDQiLERPOjIxMyxITzoiXHhkNiIsQVU6Ilx4ZDkiLEJVOiJceGRhIixDVToiXHhkYiIsSFU6Ilx4ZGMiLEFhOiJceGUwIixCYToi'@;
put 'XHhlMSIsQ2E6Ilx4ZTIiLERhOjIyNyxIYToiXHhlNCIsSmE6MjI5LEFlOiJceGU4IixCZToiXHhlOSIsQ2U6Ilx4ZWEiLEhlOiJceGViIixBaToiXHhlYyIsQmk6Ilx4ZWQiLENpOiJceGVlIixIaToiXHhlZiIsQW86Ilx4ZjIiLEJvOiJceGYzIixDbzoiXHhmNCIsRG86MjQ1LEhvOiJceGY2'@;
put 'IixBdToiXHhmOSIsQnU6Ilx4ZmEiLEN1OiJceGZiIixIdToiXHhmYyIsS0M6Ilx4YzciLEtjOiJceGU3IixxOiJceGU2Iix6OiJcdTAxNTMiLGE6Ilx4YzYiLGo6Ilx1MDE1MiIsRE46MjA5LERuOjI0MSxIeToyNTUsUzoxNjksYzoxNzAsUjoxNzQsIkIgIjoxODAsMDoxNzYsMToxNzcsMjox'@;
put 'NzgsMzoxNzksNToxODEsNjoxODIsNzoxODMsUToxODUsazoxODYsYjoyMDgsaToyMTYsbDoyMjIsczoyNDAseToyNDgsIiEiOjE2MSwnIic6MTYyLCIjIjoxNjMsIigiOjE2NCwiJSI6MTY1LCInIjoxNjcsIkggIjoxNjgsIisiOjE3MSwiOyI6MTg3LCI8IjoxODgsIj0iOjE4OSwiPiI6MTkw'@;
put 'LCI/IjoxOTEsInsiOjIyM30sUj1uZXcgUmVnRXhwKCJceDFiTigiK1JlKFMpLmpvaW4oInwiKS5yZXBsYWNlKC9cfFx8XHwvLCJ8XFx8fCIpLnJlcGxhY2UoLyhbPygpK10pL2csIlxcJDEiKSsifFxcfCkiLCJnbSIpLGs9ZnVuY3Rpb24oZXQsY3Qpe3ZhciBFdD1TW2N0XTtyZXR1cm4ibnVt'@;
put 'YmVyIj09dHlwZW9mIEV0P2llKEV0KTpFdH0sRz1mdW5jdGlvbihldCxjdCxFdCl7dmFyIG90PWN0LmNoYXJDb2RlQXQoMCktMzI8PDR8RXQuY2hhckNvZGVBdCgwKS00ODtyZXR1cm4gNTk9PW90P2V0OmllKG90KX07ZnVuY3Rpb24gYWUoZXQsY3Qpe3ZhciBocixFdD1ldC5zcGxpdCgvW1xu'@;
put 'XHJdKy8pLG90PS0xLGJ0PS0xLGp0PTAsa3Q9MCxPdD1bXSxLdD1bXSxUbj1udWxsLHJyPXt9LFNuPVtdLGxyPVtdLFhuPVtdLFZuPTA7Zm9yKCtjdC5jb2RlcGFnZT49MCYmVSgrY3QuY29kZXBhZ2UpO2p0IT09RXQubGVuZ3RoOysranQpe1ZuPTA7dmFyIEZpLGJyPUV0W2p0XS50cmltKCku'@;
put 'cmVwbGFjZSgvXHgxQihbXHgyMC1ceDJGXSkoW1x4MzAtXHgzRl0pL2csRykucmVwbGFjZShSLGspLGVyPWJyLnJlcGxhY2UoLzs7L2csIlwwIikuc3BsaXQoIjsiKS5tYXAoZnVuY3Rpb24oWmkpe3JldHVybiBaaS5yZXBsYWNlKC9cdTAwMDAvZywiOyIpfSk7aWYoYnIubGVuZ3RoPjApc3dp'@;
put 'dGNoKGVyWzBdKXtjYXNlIklEIjpjYXNlIkUiOmNhc2UiQiI6Y2FzZSJPIjpjYXNlIlciOmJyZWFrO2Nhc2UiUCI6IlAiPT1lclsxXS5jaGFyQXQoMCkmJkt0LnB1c2goYnIuc2xpY2UoMykucmVwbGFjZSgvOzsvZywiOyIpKTticmVhaztjYXNlIkMiOnZhciBybz0hMSx1bz0hMSxMaT0hMSxr'@;
put 'cj0hMSxObj0tMSxCcj0tMTtmb3Ioa3Q9MTtrdDxlci5sZW5ndGg7KytrdClzd2l0Y2goZXJba3RdLmNoYXJBdCgwKSl7Y2FzZSJBIjpjYXNlIkciOmJyZWFrO2Nhc2UiWCI6YnQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xLHVvPSEwO2JyZWFrO2Nhc2UiWSI6Zm9yKG90PXBhcnNlSW50'@;
put 'KGVyW2t0XS5zbGljZSgxKSktMSx1b3x8KGJ0PTApLGhyPU90Lmxlbmd0aDtocjw9b3Q7KytocilPdFtocl09W107YnJlYWs7Y2FzZSJLIjonIic9PT0oRmk9ZXJba3RdLnNsaWNlKDEpKS5jaGFyQXQoMCk/Rmk9Rmkuc2xpY2UoMSxGaS5sZW5ndGgtMSk6IlRSVUUiPT09Rmk/Rmk9ITA6IkZB'@;
put 'TFNFIj09PUZpP0ZpPSExOmlzTmFOKFF0KEZpKSk/aXNOYU4oc24oRmkpLmdldERhdGUoKSl8fChGaT1IZShGaSkpOihGaT1RdChGaSksbnVsbCE9PVRuJiZBLmlzX2RhdGUoVG4pJiYoRmk9dW4oRmkpKSksdHlwZW9mIGNwdGFibGU8InUiJiYic3RyaW5nIj09dHlwZW9mIEZpJiYic3RyaW5n'@;
put 'IiE9KGN0fHx7fSkudHlwZSYmKGN0fHx7fSkuY29kZXBhZ2UmJihGaT1jcHRhYmxlLnV0aWxzLmRlY29kZShjdC5jb2RlcGFnZSxGaSkpLHJvPSEwO2JyZWFrO2Nhc2UiRSI6a3I9ITA7dmFyIF9yPUY1KGVyW2t0XS5zbGljZSgxKSx7cjpvdCxjOmJ0fSk7T3Rbb3RdW2J0XT1bT3Rbb3RdW2J0'@;
put 'XSxfcl07YnJlYWs7Y2FzZSJTIjpMaT0hMCxPdFtvdF1bYnRdPVtPdFtvdF1bYnRdLCJTNVMiXTticmVhaztjYXNlIlIiOk5uPXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMTticmVhaztjYXNlIkMiOkJyPXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMTticmVhaztkZWZhdWx0OmlmKGN0'@;
put 'JiZjdC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIiticil9aWYocm8mJihPdFtvdF1bYnRdJiYyPT1PdFtvdF1bYnRdLmxlbmd0aD9PdFtvdF1bYnRdWzBdPUZpOk90W290XVtidF09RmksVG49bnVsbCksTGkpe2lmKGtyKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFy'@;
put 'ZWQgZm9ybXVsYSBjYW5ub3QgaGF2ZSBvd24gZm9ybXVsYSIpO3ZhciBGbj1Obj4tMSYmT3RbTm5dW0JyXTtpZighRm58fCFGblsxXSl0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGZpbmQgYmFzZSIpO090W290XVtidF1bMV09V2soRm5bMV0se3I6b3QtTm4s'@;
put 'YzpidC1Ccn0pfWJyZWFrO2Nhc2UiRiI6dmFyIGpyPTA7Zm9yKGt0PTE7a3Q8ZXIubGVuZ3RoOysra3Qpc3dpdGNoKGVyW2t0XS5jaGFyQXQoMCkpe2Nhc2UiWCI6YnQ9cGFyc2VJbnQoZXJba3RdLnNsaWNlKDEpKS0xLCsranI7YnJlYWs7Y2FzZSJZIjpmb3Iob3Q9cGFyc2VJbnQoZXJba3Rd'@;
put 'LnNsaWNlKDEpKS0xLGhyPU90Lmxlbmd0aDtocjw9b3Q7KytocilPdFtocl09W107YnJlYWs7Y2FzZSJNIjpWbj1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLzIwO2JyZWFrO2Nhc2UiRiI6Y2FzZSJHIjpjYXNlIlMiOmNhc2UiRCI6Y2FzZSJOIjpicmVhaztjYXNlIlAiOlRuPUt0W3BhcnNl'@;
put 'SW50KGVyW2t0XS5zbGljZSgxKSldO2JyZWFrO2Nhc2UiVyI6Zm9yKFhuPWVyW2t0XS5zbGljZSgxKS5zcGxpdCgiICIpLGhyPXBhcnNlSW50KFhuWzBdLDEwKTtocjw9cGFyc2VJbnQoWG5bMV0sMTApOysraHIpVm49cGFyc2VJbnQoWG5bMl0sMTApLGxyW2hyLTFdPTA9PT1Wbj97aGlkZGVu'@;
put 'OiEwfTp7d2NoOlZufSxRMChscltoci0xXSk7YnJlYWs7Y2FzZSJDIjpscltidD1wYXJzZUludChlcltrdF0uc2xpY2UoMSkpLTFdfHwobHJbYnRdPXt9KTticmVhaztjYXNlIlIiOlNuW290PXBhcnNlSW50KGVyW2t0XS5zbGljZSgxKSktMV18fChTbltvdF09e30pLFZuPjA/KFNuW290XS5o'@;
put 'cHQ9Vm4sU25bb3RdLmhweD1saChWbikpOjA9PT1WbiYmKFNuW290XS5oaWRkZW49ITApO2JyZWFrO2RlZmF1bHQ6aWYoY3QmJmN0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2JyKX1qcjwxJiYoVG49bnVsbCk7YnJlYWs7ZGVmYXVsdDppZihjdCYmY3QuV1RGKXRo'@;
put 'cm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrYnIpfX1yZXR1cm4gU24ubGVuZ3RoPjAmJihyclsiIXJvd3MiXT1TbiksbHIubGVuZ3RoPjAmJihyclsiIWNvbHMiXT1sciksY3QmJmN0LnNoZWV0Um93cyYmKE90PU90LnNsaWNlKDAsY3Quc2hlZXRSb3dzKSksW090LHJyXX1mdW5j'@;
put 'dGlvbiBnZShldCxjdCl7dmFyIEV0PWZ1bmN0aW9uIFEoZXQsY3Qpe3N3aXRjaChjdC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIGFlKF9lLmRlY29kZShldCksY3QpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gYWUoZXQsY3QpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gYWUoZXQudG9TdHJpbmcoImJp'@;
put 'bmFyeSIpLGN0KTtjYXNlImFycmF5IjpyZXR1cm4gYWUodXQoZXQpLGN0KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrY3QudHlwZSl9KGV0LGN0KSxidD1FdFsxXSxqdD1wNChFdFswXSxjdCk7cmV0dXJuIFJlKGJ0KS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtqdFtrdF09'@;
put 'YnRba3RdfSksanR9ZnVuY3Rpb24geWUoZXQsY3QsRXQsb3Qpe3ZhciBidD0iQztZIisoRXQrMSkrIjtYIisob3QrMSkrIjtLIjtzd2l0Y2goZXQudCl7Y2FzZSJuIjpidCs9ZXQudnx8MCxldC5mJiYhZXQuRiYmKGJ0Kz0iO0UiK0g0KGV0LmYse3I6RXQsYzpvdH0pKTticmVhaztjYXNlImIi'@;
put 'OmJ0Kz1ldC52PyJUUlVFIjoiRkFMU0UiO2JyZWFrO2Nhc2UiZSI6YnQrPWV0Lnd8fGV0LnY7YnJlYWs7Y2FzZSJkIjpidCs9JyInKyhldC53fHxldC52KSsnIic7YnJlYWs7Y2FzZSJzIjpidCs9JyInK2V0LnYucmVwbGFjZSgvIi9nLCIiKSsnIid9cmV0dXJuIGJ0fXJldHVybiBTWyJ8Il09'@;
put 'MjU0LHt0b193b3JrYm9vazpmdW5jdGlvbiBwZShldCxjdCl7cmV0dXJuIG5oKGdlKGV0LGN0KSxjdCl9LHRvX3NoZWV0OmdlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gWWUoZXQsY3Qpe3ZhciBqdCxFdD1bIklEO1BTaGVldEpTO047RSJdLG90PVtdLGJ0PWFhKGV0WyIhcmVmIl0pLGt0PUFycmF5'@;
put 'LmlzQXJyYXkoZXQpLE90PSJcclxuIjtFdC5wdXNoKCJQO1BHZW5lcmFsIiksRXQucHVzaCgiRjtQMDtERzBHODtNMjU1IiksZXRbIiFjb2xzIl0mJmZ1bmN0aW9uIFBlKGV0LGN0KXtjdC5mb3JFYWNoKGZ1bmN0aW9uKEV0LG90KXt2YXIgYnQ9IkY7VyIrKG90KzEpKyIgIisob3QrMSkrIiAi'@;
put 'O0V0LmhpZGRlbj9idCs9IjAiOigibnVtYmVyIj09dHlwZW9mIEV0LndpZHRoJiYhRXQud3B4JiYoRXQud3B4PVM1KEV0LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiBFdC53cHgmJiFFdC53Y2gmJihFdC53Y2g9TTUoRXQud3B4KSksIm51bWJlciI9PXR5cGVvZiBFdC53Y2gmJihidCs9TWF0'@;
put 'aC5yb3VuZChFdC53Y2gpKSksIiAiIT1idC5jaGFyQXQoYnQubGVuZ3RoLTEpJiZldC5wdXNoKGJ0KX0pfShFdCxldFsiIWNvbHMiXSksZXRbIiFyb3dzIl0mJmZ1bmN0aW9uIE5lKGV0LGN0KXtjdC5mb3JFYWNoKGZ1bmN0aW9uKEV0LG90KXt2YXIgYnQ9IkY7IjtFdC5oaWRkZW4/YnQrPSJN'@;
put 'MDsiOkV0LmhwdD9idCs9Ik0iKzIwKkV0LmhwdCsiOyI6RXQuaHB4JiYoYnQrPSJNIisyMCpVMyhFdC5ocHgpKyI7IiksYnQubGVuZ3RoPjImJmV0LnB1c2goYnQrIlIiKyhvdCsxKSl9KX0oRXQsZXRbIiFyb3dzIl0pLEV0LnB1c2goIkI7WSIrKGJ0LmUuci1idC5zLnIrMSkrIjtYIisoYnQu'@;
put 'ZS5jLWJ0LnMuYysxKSsiO0QiK1tidC5zLmMsYnQucy5yLGJ0LmUuYyxidC5lLnJdLmpvaW4oIiAiKSk7Zm9yKHZhciBLdD1idC5zLnI7S3Q8PWJ0LmUucjsrK0t0KWZvcih2YXIgVG49YnQucy5jO1RuPD1idC5lLmM7KytUbil7dmFyIHJyPXFpKHtyOkt0LGM6VG59KTsoanQ9a3Q/KGV0W0t0'@;
put 'XXx8W10pW1RuXTpldFtycl0pJiYobnVsbCE9anQudnx8anQuZiYmIWp0LkYpJiZvdC5wdXNoKHllKGp0LDAsS3QsVG4pKX1yZXR1cm4gRXQuam9pbihPdCkrT3Qrb3Quam9pbihPdCkrT3QrIkUiK090fX19KCksQXY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBSKGFlLGdlKXtmb3IodmFyIHBlPWFl'@;
put 'LnNwbGl0KCJcbiIpLHllPS0xLFBlPS0xLE5lPTAsWWU9W107TmUhPT1wZS5sZW5ndGg7KytOZSlpZigiQk9UIiE9PXBlW05lXS50cmltKCkpe2lmKCEoeWU8MCkpe2Zvcih2YXIgZXQ9cGVbTmVdLnRyaW0oKS5zcGxpdCgiLCIpLGN0PWV0WzBdLEV0PWV0WzFdLG90PXBlWysrTmVdfHwiIjsx'@;
put 'JihvdC5tYXRjaCgvWyJdL2cpfHxbXSkubGVuZ3RoJiZOZTxwZS5sZW5ndGgtMTspb3QrPSJcbiIrcGVbKytOZV07c3dpdGNoKG90PW90LnRyaW0oKSwrY3Qpe2Nhc2UtMTppZigiQk9UIj09PW90KXtZZVsrK3llXT1bXSxQZT0wO2NvbnRpbnVlfWlmKCJFT0QiIT09b3QpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK290KTticmVhaztjYXNlIDA6WWVbeWVdW1BlXT0iVFJVRSI9PT1vdHx8IkZBTFNFIiE9PW90JiYoaXNOYU4oUXQoRXQpKT9pc05hTihzbihFdCkuZ2V0RGF0ZSgpKT9FdDpIZShFdCk6UXQoRXQpKSwrK1BlO2JyZWFrO2Nh'@;
put 'c2UgMToob3Q9KG90PW90LnNsaWNlKDEsb3QubGVuZ3RoLTEpKS5yZXBsYWNlKC8iIi9nLCciJykpJiZvdC5tYXRjaCgvXj0iLioiJC8pJiYob3Q9b3Quc2xpY2UoMiwtMSkpLFllW3llXVtQZSsrXT0iIiE9PW90P290Om51bGx9aWYoIkVPRCI9PT1vdClicmVha319ZWxzZSBZZVsrK3llXT1b'@;
put 'XSxQZT0wO3JldHVybiBnZSYmZ2Uuc2hlZXRSb3dzJiYoWWU9WWUuc2xpY2UoMCxnZS5zaGVldFJvd3MpKSxZZX1mdW5jdGlvbiBrKGFlLGdlKXtyZXR1cm4gcDQoZnVuY3Rpb24gUyhhZSxnZSl7c3dpdGNoKGdlLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gUihfZS5kZWNvZGUoYWUpLGdl'@;
put 'KTtjYXNlImJpbmFyeSI6cmV0dXJuIFIoYWUsZ2UpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gUihhZS50b1N0cmluZygiYmluYXJ5IiksZ2UpO2Nhc2UiYXJyYXkiOnJldHVybiBSKHV0KGFlKSxnZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK2dlLnR5cGUpfShhZSxnZSks'@;
put 'Z2UpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBHKGFlLGdlKXtyZXR1cm4gbmgoayhhZSxnZSksZ2UpfSx0b19zaGVldDprLGZyb21fc2hlZXQ6ZnVuY3Rpb24oKXt2YXIgYWU9ZnVuY3Rpb24oeWUsUGUsTmUsWWUsZXQpe3llLnB1c2goUGUpLHllLnB1c2goTmUrIiwiK1llKSx5ZS5w'@;
put 'dXNoKCciJytldC5yZXBsYWNlKC8iL2csJyIiJykrJyInKX0sZ2U9ZnVuY3Rpb24oeWUsUGUsTmUsWWUpe3llLnB1c2goUGUrIiwiK05lKSx5ZS5wdXNoKDE9PVBlPyciJytZZS5yZXBsYWNlKC8iL2csJyIiJykrJyInOlllKX07cmV0dXJuIGZ1bmN0aW9uKHllKXt2YXIgWWUsUGU9W10sTmU9'@;
put 'YWEoeWVbIiFyZWYiXSksZXQ9QXJyYXkuaXNBcnJheSh5ZSk7YWUoUGUsIlRBQkxFIiwwLDEsInNoZWV0anMiKSxhZShQZSwiVkVDVE9SUyIsMCxOZS5lLnItTmUucy5yKzEsIiIpLGFlKFBlLCJUVVBMRVMiLDAsTmUuZS5jLU5lLnMuYysxLCIiKSxhZShQZSwiREFUQSIsMCwwLCIiKTtmb3Io'@;
put 'dmFyIGN0PU5lLnMucjtjdDw9TmUuZS5yOysrY3Qpe2dlKFBlLC0xLDAsIkJPVCIpO2Zvcih2YXIgRXQ9TmUucy5jO0V0PD1OZS5lLmM7KytFdCl7dmFyIG90PXFpKHtyOmN0LGM6RXR9KTtpZihZZT1ldD8oeWVbY3RdfHxbXSlbRXRdOnllW290XSlzd2l0Y2goWWUudCl7Y2FzZSJuIjp2YXIg'@;
put 'YnQ9WWUudzshYnQmJm51bGwhPVllLnYmJihidD1ZZS52KSxudWxsPT1idD9nZShQZSwxLDAsWWUuZiYmIVllLkY/Ij0iK1llLmY6IiIpOmdlKFBlLDAsYnQsIlYiKTticmVhaztjYXNlImIiOmdlKFBlLDAsWWUudj8xOjAsWWUudj8iVFJVRSI6IkZBTFNFIik7YnJlYWs7Y2FzZSJzIjpnZShQ'@;
put 'ZSwxLDAsaXNOYU4oWWUudik/WWUudjonPSInK1llLnYrJyInKTticmVhaztjYXNlImQiOlllLnd8fChZZS53PUEuZm9ybWF0KFllLnp8fEEuX3RhYmxlWzE0XSxRZShIZShZZS52KSkpKSxnZShQZSwwLFllLncsIlYiKTticmVhaztkZWZhdWx0OmdlKFBlLDEsMCwiIil9ZWxzZSBnZShQZSwx'@;
put 'LDAsIiIpfX1yZXR1cm4gZ2UoUGUsLTEsMCwiRU9EIiksUGUuam9pbigiXHJcbiIpfX0oKX19KCksJDY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKFllKXtyZXR1cm4gWWUucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9cXG4vZywiXG4iKX1mdW5jdGlv'@;
put 'biBSKFllKXtyZXR1cm4gWWUucmVwbGFjZSgvXFwvZywiXFxiIikucmVwbGFjZSgvOi9nLCJcXGMiKS5yZXBsYWNlKC9cbi9nLCJcXG4iKX1mdW5jdGlvbiBHKFllLGV0KXtyZXR1cm4gcDQoZnVuY3Rpb24gayhZZSxldCl7Zm9yKHZhciBjdD1ZZS5zcGxpdCgiXG4iKSxFdD0tMSxvdD0tMSxi'@;
put 'dD0wLGp0PVtdO2J0IT09Y3QubGVuZ3RoOysrYnQpe3ZhciBrdD1jdFtidF0udHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09a3RbMF0pe3ZhciBPdD1OYShrdFsxXSk7aWYoanQubGVuZ3RoPD1PdC5yKWZvcihFdD1qdC5sZW5ndGg7RXQ8PU90LnI7KytFdClqdFtFdF18fChqdFtFdF09'@;
put 'W10pO3N3aXRjaChFdD1PdC5yLG90PU90LmMsa3RbMl0pe2Nhc2UidCI6anRbRXRdW290XT1TKGt0WzNdKTticmVhaztjYXNlInYiOmp0W0V0XVtvdF09K2t0WzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgS3Q9a3Rba3QubGVuZ3RoLTFdO2Nhc2UidnRjIjpqdFtFdF1bb3RdPSJubCI9PT1rdFsz'@;
put 'XT8hIStrdFs0XTora3RbNF0sInZ0ZiI9PWt0WzJdJiYoanRbRXRdW290XT1banRbRXRdW290XSxLdF0pfX19cmV0dXJuIGV0JiZldC5zaGVldFJvd3MmJihqdD1qdC5zbGljZSgwLGV0LnNoZWV0Um93cykpLGp0fShZZSxldCksZXQpfXZhciBhZT1bInNvY2lhbGNhbGM6dmVyc2lvbjoxLjUi'@;
put 'LCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIiksZ2U9WyItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlIiwiQ29udGVudC10eXBlOiB0'@;
put 'ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Il0uam9pbigiXG4iKSsiXG4iLHBlPVsiIyBTb2NpYWxDYWxjIFNwcmVhZHNoZWV0IENvbnRyb2wgU2F2ZSIsInBhcnQ6c2hlZXQiXS5qb2luKCJcbiIpLHllPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZlLS0iO2Z1bmN0aW9uIFBl'@;
put 'KFllKXtpZighWWV8fCFZZVsiIXJlZiJdKXJldHVybiIiO2Zvcih2YXIgRXQsZXQ9W10sY3Q9W10sb3Q9IiIsYnQ9U3MoWWVbIiFyZWYiXSksanQ9QXJyYXkuaXNBcnJheShZZSksa3Q9YnQucy5yO2t0PD1idC5lLnI7KytrdClmb3IodmFyIE90PWJ0LnMuYztPdDw9YnQuZS5jOysrT3QpaWYo'@;
put 'b3Q9cWkoe3I6a3QsYzpPdH0pLChFdD1qdD8oWWVba3RdfHxbXSlbT3RdOlllW290XSkmJm51bGwhPUV0LnYmJiJ6IiE9PUV0LnQpe3N3aXRjaChjdD1bImNlbGwiLG90LCJ0Il0sRXQudCl7Y2FzZSJzIjpjYXNlInN0ciI6Y3QucHVzaChSKEV0LnYpKTticmVhaztjYXNlIm4iOkV0LmY/KGN0'@;
put 'WzJdPSJ2dGYiLGN0WzNdPSJuIixjdFs0XT1FdC52LGN0WzVdPVIoRXQuZikpOihjdFsyXT0idiIsY3RbM109RXQudik7YnJlYWs7Y2FzZSJiIjpjdFsyXT0idnQiKyhFdC5mPyJmIjoiYyIpLGN0WzNdPSJubCIsY3RbNF09RXQudj8iMSI6IjAiLGN0WzVdPVIoRXQuZnx8KEV0LnY/IlRSVUUi'@;
put 'OiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBLdD1RZShIZShFdC52KSk7Y3RbMl09InZ0YyIsY3RbM109Im5kIixjdFs0XT0iIitLdCxjdFs1XT1FdC53fHxBLmZvcm1hdChFdC56fHxBLl90YWJsZVsxNF0sS3QpO2JyZWFrO2Nhc2UiZSI6Y29udGludWV9ZXQucHVzaChjdC5qb2luKCI6'@;
put 'IikpfXJldHVybiBldC5wdXNoKCJzaGVldDpjOiIrKGJ0LmUuYy1idC5zLmMrMSkrIjpyOiIrKGJ0LmUuci1idC5zLnIrMSkrIjp0dmY6MSIpLGV0LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIiksZXQuam9pbigiXG4iKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gUShZZSxl'@;
put 'dCl7cmV0dXJuIG5oKEcoWWUsZXQpLGV0KX0sdG9fc2hlZXQ6Ryxmcm9tX3NoZWV0OmZ1bmN0aW9uIE5lKFllKXtyZXR1cm5bYWUsZ2UscGUsZ2UsUGUoWWUpLHllXS5qb2luKCJcbiIpfX19KCksajM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKE5lLFllLGV0LGN0LEV0KXtFdC5yYXc/WWVbZXRd'@;
put 'W2N0XT1OZToiIj09PU5lfHwoWWVbZXRdW2N0XT1SaShOZSxFdCk/UmkoTmUsRXQpLnY6TmUpfXZhciBrPXs0NDoiLCIsOToiXHQiLDU5OiI7In0sRz17NDQ6Myw5OjIsNTk6MX07ZnVuY3Rpb24gUShOZSl7Zm9yKHZhciBZZT17fSxldD0hMSxjdD0wLEV0PTA7Y3Q8TmUubGVuZ3RoOysrY3Qp'@;
put 'MzQ9PShFdD1OZS5jaGFyQ29kZUF0KGN0KSk/ZXQ9IWV0OiFldCYmRXQgaW4gayYmKFllW0V0XT0oWWVbRXRdfHwwKSsxKTtmb3IoY3QgaW4gRXQ9W10sWWUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFllLGN0KSYmRXQucHVzaChbWWVbY3RdLGN0XSk7aWYoIUV0Lmxl'@;
put 'bmd0aClmb3IoY3QgaW4gWWU9RylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWWUsY3QpJiZFdC5wdXNoKFtZZVtjdF0sY3RdKTtyZXR1cm4gRXQuc29ydChmdW5jdGlvbihvdCxidCl7cmV0dXJuIG90WzBdLWJ0WzBdfHxHW290WzFdXS1HW2J0WzFdXX0pLGtbRXQucG9w'@;
put 'KClbMV1dfWZ1bmN0aW9uIGdlKE5lLFllKXtyZXR1cm4hWWV8fCFZZS5QUk58fCJzZXA9Ij09TmUuc2xpY2UoMCw0KXx8TmUuaW5kZXhPZigiXHQiKT49MHx8TmUuaW5kZXhPZigiLCIpPj0wfHxOZS5pbmRleE9mKCI7Iik+PTA/ZnVuY3Rpb24gYWUoTmUsWWUpe3ZhciBldD1ZZXx8e30sY3Q9'@;
put 'IiI7bnVsbCE9bGUmJm51bGw9PWV0LmRlbnNlJiYoZXQuZGVuc2U9bGUpO3ZhciBFdD1ldC5kZW5zZT9bXTp7fSxvdD17czp7YzowLHI6MH0sZTp7YzowLHI6MH19OyJzZXA9Ij09TmUuc2xpY2UoMCw0KT8xMz09TmUuY2hhckNvZGVBdCg1KSYmMTA9PU5lLmNoYXJDb2RlQXQoNik/KGN0PU5l'@;
put 'LmNoYXJBdCg0KSxOZT1OZS5zbGljZSg3KSk6MTM9PU5lLmNoYXJDb2RlQXQoNSl8fDEwPT1OZS5jaGFyQ29kZUF0KDUpPyhjdD1OZS5jaGFyQXQoNCksTmU9TmUuc2xpY2UoNikpOmN0PVEoTmUuc2xpY2UoMCwxMDI0KSk6Y3Q9UShOZS5zbGljZSgwLDEwMjQpKTt2YXIgYnQ9MCxqdD0wLGt0'@;
put 'PTAsT3Q9MCxLdD0wLFRuPWN0LmNoYXJDb2RlQXQoMCkscnI9ITEsU249MCxscj1OZS5jaGFyQ29kZUF0KDApO05lPU5lLnJlcGxhY2UoL1xyXG4vZ20sIlxuIik7dmFyIFhuPW51bGwhPWV0LmRhdGVORj9mdW5jdGlvbiBVZShTKXt2YXIgUj0ibnVtYmVyIj09dHlwZW9mIFM/QS5fdGFibGVb'@;
put 'U106UztyZXR1cm4gUj1SLnJlcGxhY2Uod2UsIihcXGQrKSIpLG5ldyBSZWdFeHAoIl4iK1IrIiQiKX0oZXQuZGF0ZU5GKTpudWxsO2Z1bmN0aW9uIFZuKCl7dmFyIGhyPU5lLnNsaWNlKE90LEt0KSxicj17fTtpZignIic9PWhyLmNoYXJBdCgwKSYmJyInPT1oci5jaGFyQXQoaHIubGVuZ3Ro'@;
put 'LTEpJiYoaHI9aHIuc2xpY2UoMSwtMSkucmVwbGFjZSgvIiIvZywnIicpKSwwPT09aHIubGVuZ3RoKWJyLnQ9InoiO2Vsc2UgaWYoZXQucmF3KWJyLnQ9InMiLGJyLnY9aHI7ZWxzZSBpZigwPT09aHIudHJpbSgpLmxlbmd0aClici50PSJzIixici52PWhyO2Vsc2UgaWYoNjE9PWhyLmNoYXJD'@;
put 'b2RlQXQoMCkpMzQ9PWhyLmNoYXJDb2RlQXQoMSkmJjM0PT1oci5jaGFyQ29kZUF0KGhyLmxlbmd0aC0xKT8oYnIudD0icyIsYnIudj1oci5zbGljZSgyLC0xKS5yZXBsYWNlKC8iIi9nLCciJykpOmZ1bmN0aW9uIHVuZShTKXtyZXR1cm4gMSE9Uy5sZW5ndGh9KGhyKT8oYnIudD0ibiIsYnIu'@;
put 'Zj1oci5zbGljZSgxKSk6KGJyLnQ9InMiLGJyLnY9aHIpO2Vsc2UgaWYoIlRSVUUiPT1ocilici50PSJiIixici52PSEwO2Vsc2UgaWYoIkZBTFNFIj09aHIpYnIudD0iYiIsYnIudj0hMTtlbHNlIGlmKGlzTmFOKGt0PVF0KGhyKSkpaWYoIWlzTmFOKHNuKGhyKS5nZXREYXRlKCkpfHxYbiYm'@;
put 'aHIubWF0Y2goWG4pKXtici56PWV0LmRhdGVORnx8QS5fdGFibGVbMTRdO3ZhciBlcj0wO1huJiZoci5tYXRjaChYbikmJihocj1mdW5jdGlvbiBKZShTLFIsayl7dmFyIEc9LTEsUT0tMSxhZT0tMSxnZT0tMSxwZT0tMSx5ZT0tMTsoUi5tYXRjaCh3ZSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9u'@;
put 'KFllLGV0KXt2YXIgY3Q9cGFyc2VJbnQoa1tldCsxXSwxMCk7c3dpdGNoKFllLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApKXtjYXNlInkiOkc9Y3Q7YnJlYWs7Y2FzZSJkIjphZT1jdDticmVhaztjYXNlImgiOmdlPWN0O2JyZWFrO2Nhc2UicyI6eWU9Y3Q7YnJlYWs7Y2FzZSJtIjpnZT49MD9w'@;
put 'ZT1jdDpRPWN0fX0pLHllPj0wJiYtMT09cGUmJlE+PTAmJihwZT1RLFE9LTEpO3ZhciBQZT0oIiIrKEc+PTA/RzoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCkpKS5zbGljZSgtNCkrIi0iKygiMDAiKyhRPj0xP1E6MSkpLnNsaWNlKC0yKSsiLSIrKCIwMCIrKGFlPj0xP2FlOjEpKS5zbGljZSgt'@;
put 'Mik7Nz09UGUubGVuZ3RoJiYoUGU9IjAiK1BlKSw4PT1QZS5sZW5ndGgmJihQZT0iMjAiK1BlKTt2YXIgTmU9KCIwMCIrKGdlPj0wP2dlOjApKS5zbGljZSgtMikrIjoiKygiMDAiKyhwZT49MD9wZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisoeWU+PTA/eWU6MCkpLnNsaWNlKC0yKTtyZXR1'@;
put 'cm4tMT09Z2UmJi0xPT1wZSYmLTE9PXllP1BlOi0xPT1HJiYtMT09USYmLTE9PWFlP05lOlBlKyJUIitOZX0oMCxldC5kYXRlTkYsaHIubWF0Y2goWG4pfHxbXSksZXI9MSksZXQuY2VsbERhdGVzPyhici50PSJkIixici52PUhlKGhyLGVyKSk6KGJyLnQ9Im4iLGJyLnY9UWUoSGUoaHIsZXIp'@;
put 'KSksITEhPT1ldC5jZWxsVGV4dCYmKGJyLnc9QS5mb3JtYXQoYnIueixici52IGluc3RhbmNlb2YgRGF0ZT9RZShici52KTpici52KSksZXQuY2VsbE5GfHxkZWxldGUgYnIuen1lbHNlIGJyLnQ9InMiLGJyLnY9aHI7ZWxzZSBici50PSJuIiwhMSE9PWV0LmNlbGxUZXh0JiYoYnIudz1ociks'@;
put 'YnIudj1rdDtpZigieiI9PWJyLnR8fChldC5kZW5zZT8oRXRbYnRdfHwoRXRbYnRdPVtdKSxFdFtidF1banRdPWJyKTpFdFtxaSh7YzpqdCxyOmJ0fSldPWJyKSxscj1OZS5jaGFyQ29kZUF0KE90PUt0KzEpLG90LmUuYzxqdCYmKG90LmUuYz1qdCksb3QuZS5yPGJ0JiYob3QuZS5yPWJ0KSxT'@;
put 'bj09VG4pKytqdDtlbHNlIGlmKGp0PTAsKytidCxldC5zaGVldFJvd3MmJmV0LnNoZWV0Um93czw9YnQpcmV0dXJuITB9ZTpmb3IoO0t0PE5lLmxlbmd0aDsrK0t0KXN3aXRjaChTbj1OZS5jaGFyQ29kZUF0KEt0KSl7Y2FzZSAzNDozND09PWxyJiYocnI9IXJyKTticmVhaztjYXNlIFRuOmNh'@;
put 'c2UgMTA6Y2FzZSAxMzppZighcnImJlZuKCkpYnJlYWsgZX1yZXR1cm4gS3QtT3Q+MCYmVm4oKSxFdFsiIXJlZiJdPWlvKG90KSxFdH0oTmUsWWUpOnA0KGZ1bmN0aW9uIFIoTmUsWWUpe3ZhciBldD1ZZXx8e30sY3Q9W107aWYoIU5lfHwwPT09TmUubGVuZ3RoKXJldHVybiBjdDtmb3IodmFy'@;
put 'IEV0PU5lLnNwbGl0KC9bXHJcbl0vKSxvdD1FdC5sZW5ndGgtMTtvdD49MCYmMD09PUV0W290XS5sZW5ndGg7KS0tb3Q7Zm9yKHZhciBidD0xMCxqdD0wLGt0PTA7a3Q8PW90Oysra3QpLTE9PShqdD1FdFtrdF0uaW5kZXhPZigiICIpKT9qdD1FdFtrdF0ubGVuZ3RoOmp0KyssYnQ9TWF0aC5t'@;
put 'YXgoYnQsanQpO2ZvcihrdD0wO2t0PD1vdDsrK2t0KXtjdFtrdF09W107dmFyIE90PTA7Zm9yKFMoRXRba3RdLnNsaWNlKDAsYnQpLnRyaW0oKSxjdCxrdCxPdCxldCksT3Q9MTtPdDw9KEV0W2t0XS5sZW5ndGgtYnQpLzEwKzE7KytPdClTKEV0W2t0XS5zbGljZShidCsxMCooT3QtMSksYnQr'@;
put 'MTAqT3QpLnRyaW0oKSxjdCxrdCxPdCxldCl9cmV0dXJuIGV0LnNoZWV0Um93cyYmKGN0PWN0LnNsaWNlKDAsZXQuc2hlZXRSb3dzKSksY3R9KE5lLFllKSxZZSl9ZnVuY3Rpb24gcGUoTmUsWWUpe3ZhciBldD0iIixjdD0ic3RyaW5nIj09WWUudHlwZT9bMCwwLDAsMF06UVMoTmUsWWUpO3N3'@;
put 'aXRjaChZZS50eXBlKXtjYXNlImJhc2U2NCI6ZXQ9X2UuZGVjb2RlKE5lKTticmVhaztjYXNlImJpbmFyeSI6Y2FzZSJzdHJpbmciOmV0PU5lO2JyZWFrO2Nhc2UiYnVmZmVyIjpldD02NTAwMT09WWUuY29kZXBhZ2U/TmUudG9TdHJpbmcoInV0ZjgiKTpZZS5jb2RlcGFnZSYmdHlwZW9mIGNw'@;
put 'dGFibGU8InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKFllLmNvZGVwYWdlLE5lKTpOZS50b1N0cmluZygiYmluYXJ5Iik7YnJlYWs7Y2FzZSJhcnJheSI6ZXQ9dXQoTmUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1llLnR5cGUpfXJldHVybiAy'@;
put 'Mzk9PWN0WzBdJiYxODc9PWN0WzFdJiYxOTE9PWN0WzJdP2V0PWdhKGV0LnNsaWNlKDMpKToiYmluYXJ5Ij09WWUudHlwZSYmdHlwZW9mIGNwdGFibGU8InUiJiZZZS5jb2RlcGFnZSYmKGV0PWNwdGFibGUudXRpbHMuZGVjb2RlKFllLmNvZGVwYWdlLGNwdGFibGUudXRpbHMuZW5jb2RlKDI4'@;
put 'NTkxLGV0KSkpLCJzb2NpYWxjYWxjOnZlcnNpb246Ij09ZXQuc2xpY2UoMCwxOSk/JDYudG9fc2hlZXQoInN0cmluZyI9PVllLnR5cGU/ZXQ6Z2EoZXQpLFllKTpnZShldCxZZSl9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIHllKE5lLFllKXtyZXR1cm4gbmgocGUoTmUsWWUpLFllKX0s'@;
put 'dG9fc2hlZXQ6cGUsZnJvbV9zaGVldDpmdW5jdGlvbiBQZShOZSl7Zm9yKHZhciBjdCxZZT1bXSxldD1hYShOZVsiIXJlZiJdKSxFdD1BcnJheS5pc0FycmF5KE5lKSxvdD1ldC5zLnI7b3Q8PWV0LmUucjsrK290KXtmb3IodmFyIGJ0PVtdLGp0PWV0LnMuYztqdDw9ZXQuZS5jOysranQpe3Zh'@;
put 'ciBrdD1xaSh7cjpvdCxjOmp0fSk7aWYoKGN0PUV0PyhOZVtvdF18fFtdKVtqdF06TmVba3RdKSYmbnVsbCE9Y3Qudil7Zm9yKHZhciBPdD0oY3Qud3x8KF9sKGN0KSxjdC53KXx8IiIpLnNsaWNlKDAsMTApO090Lmxlbmd0aDwxMDspT3QrPSIgIjtidC5wdXNoKE90KygwPT09anQ/IiAiOiIi'@;
put 'KSl9ZWxzZSBidC5wdXNoKCIgICAgICAgICAgIil9WWUucHVzaChidC5qb2luKCIiKSl9cmV0dXJuIFllLmpvaW4oIlxuIil9fX0oKSxrdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoTm4sQnIsX3Ipe2lmKE5uKXttbihObixObi5sfHwwKTtmb3IodmFyIEZuPV9yLkVudW18fExpO05uLmw8Tm4u'@;
put 'bGVuZ3RoOyl7dmFyIGpyPU5uLnJlYWRfc2hpZnQoMiksWmk9Rm5banJdfHxGbls2NTUzNV0seWk9Tm4ucmVhZF9zaGlmdCgyKSx3bz1Obi5sK3lpLHNhPVppLmYmJlppLmYoTm4seWksX3IpO2lmKE5uLmw9d28sQnIoc2EsWmksanIpKXJldHVybn19fWZ1bmN0aW9uIGsoTm4sQnIpe2lmKCFO'@;
put 'bilyZXR1cm4gTm47dmFyIF9yPUJyfHx7fTtudWxsIT1sZSYmbnVsbD09X3IuZGVuc2UmJihfci5kZW5zZT1sZSk7dmFyIEZuPV9yLmRlbnNlP1tdOnt9LGpyPSJTaGVldDEiLFppPTAseWk9e30sd289W2pyXSxzYT1bXSxvbz17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LExhPV9yLnNoZWV0'@;
put 'Um93c3x8MDtpZigyPT1OblsyXSlfci5FbnVtPUxpLFMoTm4sZnVuY3Rpb24oQmksSXMsUG4pe3N3aXRjaChQbil7Y2FzZSAwOl9yLnZlcnM9QmksQmk+PTQwOTYmJihfci5xcHJvPSEwKTticmVhaztjYXNlIDY6b289Qmk7YnJlYWs7Y2FzZSAxNTpjYXNlIDUxOl9yLnFwcm98fChCaVsxXS52'@;
put 'PUJpWzFdLnYuc2xpY2UoMSkpO2Nhc2UgMTM6Y2FzZSAxNDpjYXNlIDE2OjE0PT1QbiYmISgxMTImfkJpWzJdKSYmKDE1JkJpWzJdKT4xJiYoMTUmQmlbMl0pPDE1JiYoQmlbMV0uej1fci5kYXRlTkZ8fEEuX3RhYmxlWzE0XSxfci5jZWxsRGF0ZXMmJihCaVsxXS50PSJkIixCaVsxXS52PXVu'@;
put 'KEJpWzFdLnYpKSk7dmFyIFdhPV9yLmRlbnNlPyhGbltCaVswXS5yXXx8W10pW0JpWzBdLmNdOkZuW3FpKEJpWzBdKV07aWYoV2Epe1dhLnQ9QmlbMV0udCxXYS52PUJpWzFdLnYsbnVsbCE9QmlbMV0ueiYmKFdhLno9QmlbMV0ueiksbnVsbCE9QmlbMV0uZiYmKFdhLmY9QmlbMV0uZik7YnJl'@;
put 'YWt9X3IuZGVuc2U/KEZuW0JpWzBdLnJdfHwoRm5bQmlbMF0ucl09W10pLEZuW0JpWzBdLnJdW0JpWzBdLmNdPUJpWzFdKTpGbltxaShCaVswXSldPUJpWzFdfX0sX3IpO2Vsc2V7aWYoMjYhPU5uWzJdJiYxNCE9Tm5bMl0pdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgTE9UVVMgQk9G'@;
put 'ICIrTm5bMl0pO19yLkVudW09a3IsMTQ9PU5uWzJdJiYoX3IucXBybz0hMCxObi5sPTApLFMoTm4sZnVuY3Rpb24oQmksSXMsUG4pe3N3aXRjaChQbil7Y2FzZSAyMjpCaVsxXS52PUJpWzFdLnYuc2xpY2UoMSk7Y2FzZSAyMzpjYXNlIDI0OmNhc2UgMjU6Y2FzZSAzNzpjYXNlIDM5OmNhc2Ug'@;
put 'NDA6aWYoQmlbM10+WmkmJihGblsiIXJlZiJdPWlvKG9vKSx5aVtqcl09Rm4sRm49X3IuZGVuc2U/W106e30sb289e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSx3by5wdXNoKGpyPSJTaGVldCIrKChaaT1CaVszXSkrMSkpKSxMYT4wJiZCaVswXS5yPj1MYSlicmVhaztfci5kZW5zZT8oRm5b'@;
put 'QmlbMF0ucl18fChGbltCaVswXS5yXT1bXSksRm5bQmlbMF0ucl1bQmlbMF0uY109QmlbMV0pOkZuW3FpKEJpWzBdKV09QmlbMV0sb28uZS5jPEJpWzBdLmMmJihvby5lLmM9QmlbMF0uYyksb28uZS5yPEJpWzBdLnImJihvby5lLnI9QmlbMF0ucik7YnJlYWs7Y2FzZSAyNzpCaVsxNGUzXSYm'@;
put 'KHNhW0JpWzE0ZTNdWzBdXT1CaVsxNGUzXVsxXSl9fSxfcil9aWYoRm5bIiFyZWYiXT1pbyhvbykseWlbanJdPUZuLCFzYS5sZW5ndGgpcmV0dXJue1NoZWV0TmFtZXM6d28sU2hlZXRzOnlpfTtmb3IodmFyIFBvPXt9LGhhPVtdLEpvPTA7Sm88c2EubGVuZ3RoOysrSm8peWlbd29bSm9dXSYm'@;
put 'KGhhLnB1c2goc2FbSm9dKSxQb1tzYVtKb11dPXlpW3dvW0pvXV0pO3JldHVybntTaGVldE5hbWVzOmhhLFNoZWV0czpQb319ZnVuY3Rpb24gUGUoTm4sQnIsX3Ipe3ZhciBGbj1be2M6MCxyOjB9LHt0OiJuIix2OjB9LDBdO3JldHVybiBfci5xcHJvJiYyMDc2OCE9X3IudmVycz8oRm5bMF0u'@;
put 'Yz1Obi5yZWFkX3NoaWZ0KDEpLE5uLmwrKyxGblswXS5yPU5uLnJlYWRfc2hpZnQoMiksTm4ubCs9Mik6KEZuWzJdPU5uLnJlYWRfc2hpZnQoMSksRm5bMF0uYz1Obi5yZWFkX3NoaWZ0KDIpLEZuWzBdLnI9Tm4ucmVhZF9zaGlmdCgyKSksRm59ZnVuY3Rpb24gTmUoTm4sQnIsX3Ipe3ZhciBG'@;
put 'bj1Obi5sK0JyLGpyPVBlKE5uLDAsX3IpO2lmKGpyWzFdLnQ9InMiLDIwNzY4PT1fci52ZXJzKXtObi5sKys7dmFyIFppPU5uLnJlYWRfc2hpZnQoMSk7cmV0dXJuIGpyWzFdLnY9Tm4ucmVhZF9zaGlmdChaaSwidXRmOCIpLGpyfXJldHVybiBfci5xcHJvJiZObi5sKyssanJbMV0udj1Obi5y'@;
put 'ZWFkX3NoaWZ0KEZuLU5uLmwsImNzdHIiKSxqcn1mdW5jdGlvbiBZZShObixCcixfcil7dmFyIEZuPWJuKDcrX3IubGVuZ3RoKTtGbi53cml0ZV9zaGlmdCgxLDI1NSksRm4ud3JpdGVfc2hpZnQoMixCciksRm4ud3JpdGVfc2hpZnQoMixObiksRm4ud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZh'@;
put 'ciBqcj0wO2pyPEZuLmxlbmd0aDsrK2pyKXt2YXIgWmk9X3IuY2hhckNvZGVBdChqcik7Rm4ud3JpdGVfc2hpZnQoMSxaaT49MTI4Pzk1OlppKX1yZXR1cm4gRm4ud3JpdGVfc2hpZnQoMSwwKSxGbn1mdW5jdGlvbiBjdChObixCcixfcil7dmFyIEZuPWJuKDcpO3JldHVybiBGbi53cml0ZV9z'@;
put 'aGlmdCgxLDI1NSksRm4ud3JpdGVfc2hpZnQoMixCciksRm4ud3JpdGVfc2hpZnQoMixObiksRm4ud3JpdGVfc2hpZnQoMixfciwiaSIpLEZufWZ1bmN0aW9uIG90KE5uLEJyLF9yKXt2YXIgRm49Ym4oMTMpO3JldHVybiBGbi53cml0ZV9zaGlmdCgxLDI1NSksRm4ud3JpdGVfc2hpZnQoMixC'@;
put 'ciksRm4ud3JpdGVfc2hpZnQoMixObiksRm4ud3JpdGVfc2hpZnQoOCxfciwiZiIpLEZufWZ1bmN0aW9uIGp0KE5uLEJyLF9yKXt2YXIgRm49MzI3NjgmQnI7cmV0dXJuIEJyPShGbj9ObjowKSsoKEJyJj0tMzI3NjkpPj04MTkyP0JyLTE2Mzg0OkJyKSwoRm4/IiI6IiQiKSsoX3I/QW8oQnIp'@;
put 'OmppKEJyKSl9dmFyIE90PXs1MTpbIkZBTFNFIiwwXSw1MjpbIlRSVUUiLDBdLDcwOlsiTEVOIiwxXSw4MDpbIlNVTSIsNjldLDgxOlsiQVZFUkFHRUEiLDY5XSw4MjpbIkNPVU5UQSIsNjldLDgzOlsiTUlOQSIsNjldLDg0OlsiTUFYQSIsNjldLDExMTpbIlQiLDFdfSxLdD1bIiIsIiIsIiIs'@;
put 'IiIsIiIsIiIsIiIsIiIsIiIsIisiLCItIiwiKiIsIi8iLCJeIiwiPSIsIjw+IiwiPD0iLCI+PSIsIjwiLCI+IiwiIiwiIiwiIiwiIiwiJiIsIiIsIiIsIiIsIiIsIiIsIiIsIiJdO2Z1bmN0aW9uIHJyKE5uKXt2YXIgQnI9W3tjOjAscjowfSx7dDoibiIsdjowfSwwXTtyZXR1cm4gQnJbMF0u'@;
put 'cj1Obi5yZWFkX3NoaWZ0KDIpLEJyWzNdPU5uW05uLmwrK10sQnJbMF0uYz1ObltObi5sKytdLEJyfWZ1bmN0aW9uIGxyKE5uLEJyLF9yLEZuKXt2YXIganI9Ym4oNitGbi5sZW5ndGgpO2pyLndyaXRlX3NoaWZ0KDIsTm4pLGpyLndyaXRlX3NoaWZ0KDEsX3IpLGpyLndyaXRlX3NoaWZ0KDEs'@;
put 'QnIpLGpyLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgWmk9MDtaaTxGbi5sZW5ndGg7KytaaSl7dmFyIHlpPUZuLmNoYXJDb2RlQXQoWmkpO2pyLndyaXRlX3NoaWZ0KDEseWk+PTEyOD85NTp5aSl9cmV0dXJuIGpyLndyaXRlX3NoaWZ0KDEsMCksanJ9ZnVuY3Rpb24gVm4oTm4sQnIpe3Zh'@;
put 'ciBfcj1ycihObiksRm49Tm4ucmVhZF9zaGlmdCg0KSxqcj1Obi5yZWFkX3NoaWZ0KDQpLFppPU5uLnJlYWRfc2hpZnQoMik7aWYoNjU1MzU9PVppKXJldHVybiAwPT09Rm4mJjMyMjEyMjU0NzI9PT1qcj8oX3JbMV0udD0iZSIsX3JbMV0udj0xNSk6MD09PUZuJiYzNDg5NjYwOTI4PT09anI/'@;
put 'KF9yWzFdLnQ9ImUiLF9yWzFdLnY9NDIpOl9yWzFdLnY9MCxfcjt2YXIgeWk9MzI3NjgmWmk7cmV0dXJuIFppPSgzMjc2NyZaaSktMTY0NDYsX3JbMV0udj0oMS0yKnlpKSooanIqTWF0aC5wb3coMixaaSszMikrRm4qTWF0aC5wb3coMixaaSkpLF9yfWZ1bmN0aW9uIGhyKE5uLEJyLF9yLEZu'@;
put 'KXt2YXIganI9Ym4oMTQpO2lmKGpyLndyaXRlX3NoaWZ0KDIsTm4pLGpyLndyaXRlX3NoaWZ0KDEsX3IpLGpyLndyaXRlX3NoaWZ0KDEsQnIpLDA9PUZuKXJldHVybiBqci53cml0ZV9zaGlmdCg0LDApLGpyLndyaXRlX3NoaWZ0KDQsMCksanIud3JpdGVfc2hpZnQoMiw2NTUzNSksanI7dmFy'@;
put 'IFppPTAseWk9MCxzYT0wO3JldHVybiBGbjwwJiYoWmk9MSxGbj0tRm4pLHlpPTB8TWF0aC5sb2cyKEZuKSwyMTQ3NDgzNjQ4JihzYT0oRm4vPU1hdGgucG93KDIseWktMzEpKT4+PjApfHwoKyt5aSxzYT0oRm4vPTIpPj4+MCksRm4tPXNhLHNhfD0yMTQ3NDgzNjQ4LHNhPj4+PTAsRm4qPU1h'@;
put 'dGgucG93KDIsMzIpLGpyLndyaXRlX3NoaWZ0KDQsRm4+Pj4wKSxqci53cml0ZV9zaGlmdCg0LHNhKSxqci53cml0ZV9zaGlmdCgyLHlpKz0xNjM4MysoWmk/MzI3Njg6MCkpLGpyfWZ1bmN0aW9uIENpKE5uLEJyKXt2YXIgX3I9cnIoTm4pLEZuPU5uLnJlYWRfc2hpZnQoOCwiZiIpO3JldHVy'@;
put 'biBfclsxXS52PUZuLF9yfWZ1bmN0aW9uIHVvKE5uLEJyKXt2YXIgX3I9Ym4oNStObi5sZW5ndGgpO19yLndyaXRlX3NoaWZ0KDIsMTRlMyksX3Iud3JpdGVfc2hpZnQoMixCcik7Zm9yKHZhciBGbj0wO0ZuPE5uLmxlbmd0aDsrK0ZuKXt2YXIganI9Tm4uY2hhckNvZGVBdChGbik7X3JbX3Iu'@;
put 'bCsrXT1qcj4xMjc/OTU6anJ9cmV0dXJuIF9yW19yLmwrK109MCxfcn12YXIgTGk9ezA6e246IkJPRiIsZjpFY30sMTp7bjoiRU9GIn0sMjp7bjoiQ0FMQ01PREUifSwzOntuOiJDQUxDT1JERVIifSw0OntuOiJTUExJVCJ9LDU6e246IlNZTkMifSw2OntuOiJSQU5HRSIsZjpmdW5jdGlvbiBw'@;
put 'ZShObil7dmFyIEJyPXtzOntjOjAscjowfSxlOntjOjAscjowfX07cmV0dXJuIEJyLnMuYz1Obi5yZWFkX3NoaWZ0KDIpLEJyLnMucj1Obi5yZWFkX3NoaWZ0KDIpLEJyLmUuYz1Obi5yZWFkX3NoaWZ0KDIpLEJyLmUucj1Obi5yZWFkX3NoaWZ0KDIpLDY1NTM1PT1Cci5zLmMmJihCci5zLmM9'@;
put 'QnIuZS5jPUJyLnMucj1Cci5lLnI9MCksQnJ9fSw3OntuOiJXSU5ET1cxIn0sODp7bjoiQ09MVzEifSw5OntuOiJXSU5UV08ifSwxMDp7bjoiQ09MVzIifSwxMTp7bjoiTkFNRSJ9LDEyOntuOiJCTEFOSyJ9LDEzOntuOiJJTlRFR0VSIixmOmZ1bmN0aW9uIGV0KE5uLEJyLF9yKXt2YXIgRm49'@;
put 'UGUoTm4sMCxfcik7cmV0dXJuIEZuWzFdLnY9Tm4ucmVhZF9zaGlmdCgyLCJpIiksRm59fSwxNDp7bjoiTlVNQkVSIixmOmZ1bmN0aW9uIEV0KE5uLEJyLF9yKXt2YXIgRm49UGUoTm4sMCxfcik7cmV0dXJuIEZuWzFdLnY9Tm4ucmVhZF9zaGlmdCg4LCJmIiksRm59fSwxNTp7bjoiTEFCRUwi'@;
put 'LGY6TmV9LDE2OntuOiJGT1JNVUxBIixmOmZ1bmN0aW9uIGJ0KE5uLEJyLF9yKXt2YXIgRm49Tm4ubCtCcixqcj1QZShObiwwLF9yKTtpZihqclsxXS52PU5uLnJlYWRfc2hpZnQoOCwiZiIpLF9yLnFwcm8pTm4ubD1GbjtlbHNle3ZhciBaaT1Obi5yZWFkX3NoaWZ0KDIpOyhmdW5jdGlvbiBU'@;
put 'bihObixCcil7bW4oTm4sMCk7Zm9yKHZhciBfcj1bXSxGbj0wLGpyPSIiLFppPSIiO05uLmw8Tm4ubGVuZ3RoOyl7dmFyIHlpPU5uW05uLmwrK107c3dpdGNoKHlpKXtjYXNlIDA6X3IucHVzaChObi5yZWFkX3NoaWZ0KDgsImYiKSk7YnJlYWs7Y2FzZSAxOlppPWp0KEJyWzBdLmMsTm4ucmVh'@;
put 'ZF9zaGlmdCgyKSwhMCksanI9anQoQnJbMF0ucixObi5yZWFkX3NoaWZ0KDIpLCExKSxfci5wdXNoKFppK2pyKTticmVhaztjYXNlIDI6dmFyIHdvPWp0KEJyWzBdLmMsTm4ucmVhZF9zaGlmdCgyKSwhMCksc2E9anQoQnJbMF0ucixObi5yZWFkX3NoaWZ0KDIpLCExKTtaaT1qdChCclswXS5j'@;
put 'LE5uLnJlYWRfc2hpZnQoMiksITApLGpyPWp0KEJyWzBdLnIsTm4ucmVhZF9zaGlmdCgyKSwhMSksX3IucHVzaCh3bytzYSsiOiIrWmkranIpO2JyZWFrO2Nhc2UgMzppZihObi5sPE5uLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJXSzEgcHJlbWF0dXJlIGZvcm11bGEgZW5k'@;
put 'Iik7YnJlYWs7Y2FzZSA0Ol9yLnB1c2goIigiK19yLnBvcCgpKyIpIik7YnJlYWs7Y2FzZSA1Ol9yLnB1c2goTm4ucmVhZF9zaGlmdCgyKSk7YnJlYWs7Y2FzZSA2OmZvcih2YXIgb289IiI7eWk9Tm5bTm4ubCsrXTspb28rPVN0cmluZy5mcm9tQ2hhckNvZGUoeWkpO19yLnB1c2goJyInK29v'@;
put 'LnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UgODpfci5wdXNoKCItIitfci5wb3AoKSk7YnJlYWs7Y2FzZSAyMzpfci5wdXNoKCIrIitfci5wb3AoKSk7YnJlYWs7Y2FzZSAyMjpfci5wdXNoKCJOT1QoIitfci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgMjA6Y2FzZSAyMTp2YXIg'@;
put 'TGE9X3IucG9wKCksUG89X3IucG9wKCk7X3IucHVzaChbIkFORCIsIk9SIl1beWktMjBdKyIoIitQbysiLCIrTGErIikiKTticmVhaztkZWZhdWx0OmlmKHlpPDMyJiZLdFt5aV0pTGE9X3IucG9wKCksUG89X3IucG9wKCksX3IucHVzaChQbytLdFt5aV0rTGEpO2Vsc2V7aWYoIU90W3lpXSly'@;
put 'ZXR1cm4geWk8PTc/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2RlICIreWkudG9TdHJpbmcoMTYpKTp5aTw9MjQ/Y29uc29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIG9wICIreWkudG9TdHJpbmcoMTYpKTp5aTw9MzA/Y29uc29sZS5lcnJvcigiV0sxIGludmFsaWQgb3Bjb2Rl'@;
put 'ICIreWkudG9TdHJpbmcoMTYpKTp5aTw9MTE1P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBmdW5jdGlvbiBvcGNvZGUgIit5aS50b1N0cmluZygxNikpOmNvbnNvbGUuZXJyb3IoIldLMSB1bnJlY29nbml6ZWQgb3Bjb2RlICIreWkudG9TdHJpbmcoMTYpKTtpZig2OT09KEZuPU90'@;
put 'W3lpXVsxXSkmJihGbj1ObltObi5sKytdKSxGbj5fci5sZW5ndGgpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIDB4Iit5aS50b1N0cmluZygxNikrIjp8Iitfci5qb2luKCJ8IikrInwiKTt2YXIgaGE9X3Iuc2xpY2UoLUZuKTtfci5sZW5ndGgtPUZu'@;
put 'LF9yLnB1c2goT3RbeWldWzBdKyIoIitoYS5qb2luKCIsIikrIikiKX19fTE9PV9yLmxlbmd0aD9CclsxXS5mPSIiK19yWzBdOmNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSB8Iitfci5qb2luKCJ8IikrInwiKX0pKE5uLnNsaWNlKE5uLmwsTm4ubCtaaSksanIpLE5uLmwr'@;
put 'PVppfXJldHVybiBqcn19LDI0OntuOiJUQUJMRSJ9LDI1OntuOiJPUkFOR0UifSwyNjp7bjoiUFJBTkdFIn0sMjc6e246IlNSQU5HRSJ9LDI4OntuOiJGUkFOR0UifSwyOTp7bjoiS1JBTkdFMSJ9LDMyOntuOiJIUkFOR0UifSwzNTp7bjoiS1JBTkdFMiJ9LDM2OntuOiJQUk9URUMifSwzNzp7'@;
put 'bjoiRk9PVEVSIn0sMzg6e246IkhFQURFUiJ9LDM5OntuOiJTRVRVUCJ9LDQwOntuOiJNQVJHSU5TIn0sNDE6e246IkxBQkVMRk1UIn0sNDI6e246IlRJVExFUyJ9LDQzOntuOiJTSEVFVEpTIn0sNDU6e246IkdSQVBIIn0sNDY6e246Ik5HUkFQSCJ9LDQ3OntuOiJDQUxDQ09VTlQifSw0ODp7'@;
put 'bjoiVU5GT1JNQVRURUQifSw0OTp7bjoiQ1VSU09SVzEyIn0sNTA6e246IldJTkRPVyJ9LDUxOntuOiJTVFJJTkciLGY6TmV9LDU1OntuOiJQQVNTV09SRCJ9LDU2OntuOiJMT0NLRUQifSw2MDp7bjoiUVVFUlkifSw2MTp7bjoiUVVFUllOQU1FIn0sNjI6e246IlBSSU5UIn0sNjM6e246IlBS'@;
put 'SU5UTkFNRSJ9LDY0OntuOiJHUkFQSDIifSw2NTp7bjoiR1JBUEhOQU1FIn0sNjY6e246IlpPT00ifSw2Nzp7bjoiU1lNU1BMSVQifSw2ODp7bjoiTlNST1dTIn0sNjk6e246Ik5TQ09MUyJ9LDcwOntuOiJSVUxFUiJ9LDcxOntuOiJOTkFNRSJ9LDcyOntuOiJBQ09NTSJ9LDczOntuOiJBTUFD'@;
put 'Uk8ifSw3NDp7bjoiUEFSU0UifSwxMDI6e246IlBSQU5HRVM/PyJ9LDEwMzp7bjoiUlJBTkdFUz8/In0sMTA0OntuOiJGTkFNRT8/In0sMTA1OntuOiJNUkFOR0VTPz8ifSw2NTUzNTp7bjoiIn19LGtyPXswOntuOiJCT0YifSwxOntuOiJFT0YifSwyOntuOiJQQVNTV09SRCJ9LDM6e246IkNB'@;
put 'TENTRVQifSw0OntuOiJXSU5ET1dTRVQifSw1OntuOiJTSEVFVENFTExQVFIifSw2OntuOiJTSEVFVExBWU9VVCJ9LDc6e246IkNPTFVNTldJRFRIIn0sODp7bjoiSElEREVOQ09MVU1OIn0sOTp7bjoiVVNFUlJBTkdFIn0sMTA6e246IlNZU1RFTVJBTkdFIn0sMTE6e246IlpFUk9GT1JDRSJ9'@;
put 'LDEyOntuOiJTT1JUS0VZRElSIn0sMTM6e246IkZJTEVTRUFMIn0sMTQ6e246IkRBVEFGSUxMTlVNUyJ9LDE1OntuOiJQUklOVE1BSU4ifSwxNjp7bjoiUFJJTlRTVFJJTkcifSwxNzp7bjoiR1JBUEhNQUlOIn0sMTg6e246IkdSQVBIU1RSSU5HIn0sMTk6e246Ij8/In0sMjA6e246IkVSUkNF'@;
put 'TEwifSwyMTp7bjoiTkFDRUxMIn0sMjI6e246IkxBQkVMMTYiLGY6ZnVuY3Rpb24gU24oTm4sQnIpe3ZhciBfcj1ycihObik7cmV0dXJuIF9yWzFdLnQ9InMiLF9yWzFdLnY9Tm4ucmVhZF9zaGlmdChCci00LCJjc3RyIiksX3J9fSwyMzp7bjoiTlVNQkVSMTciLGY6Vm59LDI0OntuOiJOVU1C'@;
put 'RVIxOCIsZjpmdW5jdGlvbiBYbihObixCcil7dmFyIF9yPXJyKE5uKTtfclsxXS52PU5uLnJlYWRfc2hpZnQoMik7dmFyIEZuPV9yWzFdLnY+PjE7aWYoMSZfclsxXS52KXN3aXRjaCg3JkZuKXtjYXNlIDA6Rm49NWUzKihGbj4+Myk7YnJlYWs7Y2FzZSAxOkZuPTUwMCooRm4+PjMpO2JyZWFr'@;
put 'O2Nhc2UgMjpGbj0oRm4+PjMpLzIwO2JyZWFrO2Nhc2UgMzpGbj0oRm4+PjMpLzIwMDticmVhaztjYXNlIDQ6Rm49KEZuPj4zKS8yZTM7YnJlYWs7Y2FzZSA1OkZuPShGbj4+MykvMmU0O2JyZWFrO2Nhc2UgNjpGbj0oRm4+PjMpLzE2O2JyZWFrO2Nhc2UgNzpGbj0oRm4+PjMpLzY0fXJldHVy'@;
put 'biBfclsxXS52PUZuLF9yfX0sMjU6e246IkZPUk1VTEExOSIsZjpmdW5jdGlvbiBicihObixCcil7dmFyIF9yPVZuKE5uKTtyZXR1cm4gTm4ubCs9QnItMTQsX3J9fSwyNjp7bjoiRk9STVVMQTFBIn0sMjc6e246IlhGT1JNQVQiLGY6ZnVuY3Rpb24gcm8oTm4sQnIpe2Zvcih2YXIgX3I9e30s'@;
put 'Rm49Tm4ubCtCcjtObi5sPEZuOyl7dmFyIGpyPU5uLnJlYWRfc2hpZnQoMik7aWYoMTRlMz09anIpe2Zvcihfcltqcl09WzAsIiJdLF9yW2pyXVswXT1Obi5yZWFkX3NoaWZ0KDIpO05uW05uLmxdOylfcltqcl1bMV0rPVN0cmluZy5mcm9tQ2hhckNvZGUoTm5bTm4ubF0pLE5uLmwrKztObi5s'@;
put 'Kyt9fXJldHVybiBfcn19LDI4OntuOiJEVExBQkVMTUlTQyJ9LDI5OntuOiJEVExBQkVMQ0VMTCJ9LDMwOntuOiJHUkFQSFdJTkRPVyJ9LDMxOntuOiJDUEEifSwzMjp7bjoiTFBMQVVUTyJ9LDMzOntuOiJRVUVSWSJ9LDM0OntuOiJISURERU5TSEVFVCJ9LDM1OntuOiI/PyJ9LDM3OntuOiJO'@;
put 'VU1CRVIyNSIsZjpmdW5jdGlvbiBlcihObixCcil7dmFyIF9yPXJyKE5uKSxGbj1Obi5yZWFkX3NoaWZ0KDQpO3JldHVybiBfclsxXS52PUZuPj42LF9yfX0sMzg6e246Ij8/In0sMzk6e246Ik5VTUJFUjI3IixmOkNpfSw0MDp7bjoiRk9STVVMQTI4IixmOmZ1bmN0aW9uIEZpKE5uLEJyKXt2'@;
put 'YXIgX3I9Q2koTm4pO3JldHVybiBObi5sKz1Cci0xMCxfcn19LDE0Mjp7bjoiPz8ifSwxNDc6e246Ij8/In0sMTUwOntuOiI/PyJ9LDE1MTp7bjoiPz8ifSwxNTI6e246Ij8/In0sMTUzOntuOiI/PyJ9LDE1NDp7bjoiPz8ifSwxNTU6e246Ij8/In0sMTU2OntuOiI/PyJ9LDE2Mzp7bjoiPz8i'@;
put 'fSwxNzQ6e246Ij8/In0sMTc1OntuOiI/PyJ9LDE3Njp7bjoiPz8ifSwxNzc6e246Ij8/In0sMTg0OntuOiI/PyJ9LDE4NTp7bjoiPz8ifSwxODY6e246Ij8/In0sMTg3OntuOiI/PyJ9LDE4ODp7bjoiPz8ifSwxOTU6e246Ij8/In0sMjAxOntuOiI/PyJ9LDIwNTp7bjoiPz8ifSwyMDY6e246'@;
put 'Ij8/In0sMjA3OntuOiI/PyJ9LDIwODp7bjoiPz8ifSwyNTY6e246Ij8/In0sMjU5OntuOiI/PyJ9LDI2MDp7bjoiPz8ifSwyNjE6e246Ij8/In0sMjYyOntuOiI/PyJ9LDI2Mzp7bjoiPz8ifSwyNjU6e246Ij8/In0sMjY2OntuOiI/PyJ9LDI2Nzp7bjoiPz8ifSwyNjg6e246Ij8/In0sMjcw'@;
put 'OntuOiI/PyJ9LDI3MTp7bjoiPz8ifSwzODQ6e246Ij8/In0sMzg5OntuOiI/PyJ9LDM5MDp7bjoiPz8ifSwzOTM6e246Ij8/In0sMzk2OntuOiI/PyJ9LDUxMjp7bjoiPz8ifSw1MTQ6e246Ij8/In0sNTEzOntuOiI/PyJ9LDUxNjp7bjoiPz8ifSw1MTc6e246Ij8/In0sNjQwOntuOiI/PyJ9'@;
put 'LDY0MTp7bjoiPz8ifSw2NDI6e246Ij8/In0sNjQzOntuOiI/PyJ9LDY0NDp7bjoiPz8ifSw2NDU6e246Ij8/In0sNjQ2OntuOiI/PyJ9LDY0Nzp7bjoiPz8ifSw2NDg6e246Ij8/In0sNjU4OntuOiI/PyJ9LDY1OTp7bjoiPz8ifSw2NjA6e246Ij8/In0sNjYxOntuOiI/PyJ9LDY2Mjp7bjoi'@;
put 'Pz8ifSw2NjU6e246Ij8/In0sNjY2OntuOiI/PyJ9LDc2ODp7bjoiPz8ifSw3NzI6e246Ij8/In0sMTYwMDp7bjoiPz8ifSwxNjAyOntuOiI/PyJ9LDE3OTM6e246Ij8/In0sMTc5NDp7bjoiPz8ifSwxNzk1OntuOiI/PyJ9LDE3OTY6e246Ij8/In0sMTkyMDp7bjoiPz8ifSwyMDQ4OntuOiI/'@;
put 'PyJ9LDIwNDk6e246Ij8/In0sMjA1Mjp7bjoiPz8ifSwyNjg4OntuOiI/PyJ9LDEwOTk4OntuOiI/PyJ9LDEyODQ5OntuOiI/PyJ9LDI4MjMzOntuOiI/PyJ9LDI4NDg0OntuOiI/PyJ9LDY1NTM1OntuOiIifX07cmV0dXJue3NoZWV0X3RvX3drMTpmdW5jdGlvbiBHKE5uLEJyKXt2YXIgX3I9'@;
put 'QnJ8fHt9O2lmKCtfci5jb2RlcGFnZT49MCYmVSgrX3IuY29kZXBhZ2UpLCJzdHJpbmciPT1fci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMSB0byBKUyBzdHJpbmciKTt2YXIgRm49dmkoKSxqcj1hYShOblsiIXJlZiJdKSxaaT1BcnJheS5pc0FycmF5KE5uKSx5aT1b'@;
put 'XTtHaShGbiwwLGZ1bmN0aW9uIGFlKE5uKXt2YXIgQnI9Ym4oMik7cmV0dXJuIEJyLndyaXRlX3NoaWZ0KDIsTm4pLEJyfSgxMDMwKSksR2koRm4sNixmdW5jdGlvbiB5ZShObil7dmFyIEJyPWJuKDgpO3JldHVybiBCci53cml0ZV9zaGlmdCgyLE5uLnMuYyksQnIud3JpdGVfc2hpZnQoMixO'@;
put 'bi5zLnIpLEJyLndyaXRlX3NoaWZ0KDIsTm4uZS5jKSxCci53cml0ZV9zaGlmdCgyLE5uLmUuciksQnJ9KGpyKSk7Zm9yKHZhciB3bz1qci5zLnI7d288PWpyLmUucjsrK3dvKWZvcih2YXIgc2E9amkod28pLG9vPWpyLnMuYztvbzw9anIuZS5jOysrb28pe3dvPT09anIucy5yJiYoeWlbb29d'@;
put 'PUFvKG9vKSk7dmFyIFBvPVppPyhOblt3b118fFtdKVtvb106Tm5beWlbb29dK3NhXTtQbyYmInoiIT1Qby50JiYoIm4iPT1Qby50PygwfFBvLnYpPT1Qby52JiZQby52Pj0tMzI3NjgmJlBvLnY8PTMyNzY3P0dpKEZuLDEzLGN0KHdvLG9vLFBvLnYpKTpHaShGbiwxNCxvdCh3byxvbyxQby52'@;
put 'KSk6R2koRm4sMTUsWWUod28sb28sX2woUG8pLnNsaWNlKDAsMjM5KSkpKX1yZXR1cm4gR2koRm4sMSksRm4uZW5kKCl9LGJvb2tfdG9fd2szOmZ1bmN0aW9uIFEoTm4sQnIpe3ZhciBfcj1Ccnx8e307aWYoK19yLmNvZGVwYWdlPj0wJiZVKCtfci5jb2RlcGFnZSksInN0cmluZyI9PV9yLnR5'@;
put 'cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0szIHRvIEpTIHN0cmluZyIpO3ZhciBGbj12aSgpO0dpKEZuLDAsZnVuY3Rpb24gZ2UoTm4pe3ZhciBCcj1ibigyNik7QnIud3JpdGVfc2hpZnQoMiw0MDk2KSxCci53cml0ZV9zaGlmdCgyLDQpLEJyLndyaXRlX3NoaWZ0KDQsMCk7'@;
put 'Zm9yKHZhciBfcj0wLEZuPTAsanI9MCxaaT0wO1ppPE5uLlNoZWV0TmFtZXMubGVuZ3RoOysrWmkpe3ZhciB3bz1Obi5TaGVldHNbTm4uU2hlZXROYW1lc1taaV1dO2lmKHdvJiZ3b1siIXJlZiJdKXsrK2pyO3ZhciBzYT1Tcyh3b1siIXJlZiJdKTtfcjxzYS5lLnImJihfcj1zYS5lLnIpLEZu'@;
put 'PHNhLmUuYyYmKEZuPXNhLmUuYyl9fXJldHVybiBCci53cml0ZV9zaGlmdCgyLF9yKSxCci53cml0ZV9zaGlmdCgxLGpyKSxCci53cml0ZV9zaGlmdCgxLEZuKSxCci53cml0ZV9zaGlmdCgyLDApLEJyLndyaXRlX3NoaWZ0KDIsMCksQnIud3JpdGVfc2hpZnQoMSwxKSxCci53cml0ZV9zaGlm'@;
put 'dCgxLDIpLEJyLndyaXRlX3NoaWZ0KDQsMCksQnIud3JpdGVfc2hpZnQoNCwwKSxCcn0oTm4pKTtmb3IodmFyIGpyPTAsWmk9MDtqcjxObi5TaGVldE5hbWVzLmxlbmd0aDsrK2pyKShObi5TaGVldHNbTm4uU2hlZXROYW1lc1tqcl1dfHx7fSlbIiFyZWYiXSYmR2koRm4sMjcsdW8oTm4uU2hl'@;
put 'ZXROYW1lc1tqcl0sWmkrKykpO3ZhciB5aT0wO2Zvcihqcj0wO2pyPE5uLlNoZWV0TmFtZXMubGVuZ3RoOysranIpe3ZhciB3bz1Obi5TaGVldHNbTm4uU2hlZXROYW1lc1tqcl1dO2lmKHdvJiZ3b1siIXJlZiJdKXtmb3IodmFyIHNhPWFhKHdvWyIhcmVmIl0pLG9vPUFycmF5LmlzQXJyYXko'@;
put 'd28pLExhPVtdLFBvPXNhLnMucjtQbzw9c2EuZS5yOysrUG8pZm9yKHZhciBoYT1qaShQbyksSm89c2Eucy5jO0pvPD1zYS5lLmM7KytKbyl7UG89PT1zYS5zLnImJihMYVtKb109QW8oSm8pKTt2YXIgSXM9b28/KHdvW1BvXXx8W10pW0pvXTp3b1tMYVtKb10raGFdO0lzJiYieiIhPUlzLnQm'@;
put 'JigibiI9PUlzLnQ/R2koRm4sMjMsaHIoUG8sSm8seWksSXMudikpOkdpKEZuLDIyLGxyKFBvLEpvLHlpLF9sKElzKS5zbGljZSgwLDIzOSkpKSl9Kyt5aX19cmV0dXJuIEdpKEZuLDEpLEZuLmVuZCgpfSx0b193b3JrYm9vazpmdW5jdGlvbiBSKE5uLEJyKXtzd2l0Y2goQnIudHlwZSl7Y2Fz'@;
put 'ZSJiYXNlNjQiOnJldHVybiBrKGIoX2UuZGVjb2RlKE5uKSksQnIpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gayhiKE5uKSxCcik7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybiBrKE5uLEJyKX10aHJvdyJVbnN1cHBvcnRlZCB0eXBlICIrQnIudHlwZX19fSgpLF81PWZ1bmN0aW9uKCl7'@;
put 'dmFyIFM9azAoInQiKSxSPWswKCJyUHIiKTtmdW5jdGlvbiBrKGFlKXt2YXIgZ2U9YWUubWF0Y2goUyk7aWYoIWdlKXJldHVybnt0OiJzIix2OiIifTt2YXIgcGU9e3Q6InMiLHY6UXIoZ2VbMV0pfSx5ZT1hZS5tYXRjaChSKTtyZXR1cm4geWUmJihwZS5zPWZ1bmN0aW9uIGlrKFMpe3ZhciBS'@;
put 'PXt9LGs9Uy5tYXRjaChlbiksRz0wLFE9ITE7aWYoaylmb3IoO0chPWsubGVuZ3RoOysrRyl7dmFyIGFlPXZyKGtbR10pO3N3aXRjaChhZVswXS5yZXBsYWNlKC9cdyo6L2csIiIpKXtjYXNlIjxjb25kZW5zZSI6Y2FzZSI8ZXh0ZW5kIjpicmVhaztjYXNlIjxzaGFkb3ciOmlmKCFhZS52YWwp'@;
put 'YnJlYWs7Y2FzZSI8c2hhZG93PiI6Y2FzZSI8c2hhZG93Lz4iOlIuc2hhZG93PTE7YnJlYWs7Y2FzZSI8L3NoYWRvdz4iOmJyZWFrO2Nhc2UiPGNoYXJzZXQiOmlmKCIxIj09YWUudmFsKWJyZWFrO1IuY3A9TltwYXJzZUludChhZS52YWwsMTApXTticmVhaztjYXNlIjxvdXRsaW5lIjppZigh'@;
put 'YWUudmFsKWJyZWFrO2Nhc2UiPG91dGxpbmU+IjpjYXNlIjxvdXRsaW5lLz4iOlIub3V0bGluZT0xO2JyZWFrO2Nhc2UiPC9vdXRsaW5lPiI6YnJlYWs7Y2FzZSI8ckZvbnQiOlIubmFtZT1hZS52YWw7YnJlYWs7Y2FzZSI8c3oiOlIuc3o9YWUudmFsO2JyZWFrO2Nhc2UiPHN0cmlrZSI6aWYo'@;
put 'IWFlLnZhbClicmVhaztjYXNlIjxzdHJpa2U+IjpjYXNlIjxzdHJpa2UvPiI6Ui5zdHJpa2U9MTticmVhaztjYXNlIjwvc3RyaWtlPiI6YnJlYWs7Y2FzZSI8dSI6aWYoIWFlLnZhbClicmVhaztzd2l0Y2goYWUudmFsKXtjYXNlImRvdWJsZSI6Ui51bmRlcmxpbmU9MjticmVhaztjYXNlInNp'@;
put 'bmdsZUFjY291bnRpbmciOlIudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6Ui51bmRlcmxpbmU9MzR9Y2FzZSI8dT4iOmNhc2UiPHUvPiI6Ui51bmRlcmxpbmV8fChSLnVuZGVybGluZT0xKTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPGIiOmlmKCIwIj09'@;
put 'YWUudmFsKWJyZWFrO2Nhc2UiPGI+IjpjYXNlIjxiLz4iOlIuYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6aWYoIjAiPT1hZS52YWwpYnJlYWs7Y2FzZSI8aT4iOmNhc2UiPGkvPiI6Ui5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPGNvbG9yIjph'@;
put 'ZS5yZ2ImJihSLmNvbG9yPXtyZ2I6OD09YWUucmdiLmxlbmd0aD9hZS5yZ2Iuc2xpY2UoMiw4KTooIjAwMDAwMCIrYWUucmdiKS5zbGljZSgtNil9KTticmVhaztjYXNlIjxmYW1pbHkiOlIuZmFtaWx5PWFlLnZhbDticmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KGFlLnZhbHx8Im5v'@;
put 'bmUiKSYmKFIudmFsaWduPWFlLnZhbC5yZXBsYWNlKCJzY3JpcHQiLCIiKSk7YnJlYWs7Y2FzZSI8c2NoZW1lIjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVm'@;
put 'YXVsdDppZig0NyE9PWFlWzBdLmNoYXJDb2RlQXQoMSkmJiFRKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHJpY2ggZm9ybWF0ICIrYWVbMF0pfX1yZXR1cm4gUn0oeWVbMV0pKSxwZX12YXIgRz0vPCg/Olx3KzopP3I+L2csUT0vPFwvKD86XHcrOik/cj4vO3JldHVybiBmdW5jdGlv'@;
put 'bihnZSl7cmV0dXJuIGdlLnJlcGxhY2UoRywiIikuc3BsaXQoUSkubWFwKGspLmZpbHRlcihmdW5jdGlvbihwZSl7cmV0dXJuIHBlLnZ9KX19KCksX1Y9ezE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlLWFjY291bnRpbmciLDM0OiJkb3VibGUtYWNjb3VudGluZyJ9LEh1PWZ1bmN0'@;
put 'aW9uKCl7dmFyIFI9LyhcclxufFxuKS9nO2Z1bmN0aW9uIEcoUSl7dmFyIGFlPVtbXSxRLnYsW11dO3JldHVybiBRLnY/KFEucyYmZnVuY3Rpb24gayhRLGFlLGdlKXt2YXIgcGU9W107US51bmRlcmxpbmUmJnBlLnB1c2goInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIpLFEudW5kZXJs'@;
put 'aW5lPjEmJnBlLnB1c2goInRleHQtdW5kZXJsaW5lLXN0eWxlOiIrX1ZbUS51bmRlcmxpbmVdKyI7IiksUS5zeiYmcGUucHVzaCgiZm9udC1zaXplOiIrUS5zeisicHQ7IiksUS5vdXRsaW5lJiZwZS5wdXNoKCJ0ZXh0LWVmZmVjdDogb3V0bGluZTsiKSxRLnNoYWRvdyYmcGUucHVzaCgidGV4'@;
put 'dC1zaGFkb3c6IGF1dG87IiksUS5jb2xvciYmUS5jb2xvci5yZ2ImJnBlLnB1c2goImNvbG9yOiAjIitPMChRLmNvbG9yLnJnYikrIjsiKSxhZS5wdXNoKCc8c3BhbiBzdHlsZT0iJytwZS5qb2luKCIiKSsnIj4nKSxRLmJvbGQmJihhZS5wdXNoKCI8Yj4iKSxnZS5wdXNoKCI8L2I+IikpLFEu'@;
put 'aXRhbGljJiYoYWUucHVzaCgiPGk+IiksZ2UucHVzaCgiPC9pPiIpKSxRLnN0cmlrZSYmKGFlLnB1c2goIjxzPiIpLGdlLnB1c2goIjwvcz4iKSk7dmFyIHllPVEudmFsaWdufHwiIjsic3VwZXJzY3JpcHQiPT15ZXx8InN1cGVyIj09eWU/eWU9InN1cCI6InN1YnNjcmlwdCI9PXllJiYoeWU9'@;
put 'InN1YiIpLCIiIT15ZSYmKGFlLnB1c2goIjwiK3llKyI+IiksZ2UucHVzaCgiPC8iK3llKyI+IikpLGdlLnB1c2goIjwvc3Bhbj4iKX0oUS5zLGFlWzBdLGFlWzJdKSxhZVswXS5qb2luKCIiKSthZVsxXS5yZXBsYWNlKFIsIjxici8+IikrYWVbMl0uam9pbigiIikpOiIifXJldHVybiBmdW5j'@;
put 'dGlvbihhZSl7cmV0dXJuIGFlLm1hcChHKS5qb2luKCIiKX19KCk7ZnVuY3Rpb24gSnMoUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKGspe3JldHVybiBmdW5jdGlvbiBBNChTKXt2YXIgUj0iIixrPVtdO3JldHVybiBTLnMmJihTLnMuYm9sZCYmay5wdXNoKCI8Yi8+IiksUy5zLml0YWxpYyYm'@;
put 'ay5wdXNoKCI8aS8+IiksUy5zLnN0cmlrZSYmay5wdXNoKCI8c3RyaWtlLz4iKSxTLnMudW5kZXJsaW5lJiZrLnB1c2goJzx1IHZhbD0iJysoVDVbUy5zLnVuZGVybGluZV18fCJzaW5nbGUiKSsnIi8+JyksUy5zLmNvbG9yJiZrLnB1c2gobWQoUy5zLmNvbG9yKSksUy5zLnN6JiZrLnB1c2go'@;
put 'JzxzeiB2YWw9IicrUy5zLnN6KyciLz4nKSxTLnMubmFtZSYmay5wdXNoKCc8ckZvbnQgdmFsPSInK1Mucy5uYW1lKyciLz4nKSwoInN1cGVyIj09Uy5zLnZhbGlnbnx8InN1YiI9PVMucy52YWxpZ24pJiZrLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK1Mucy52YWxpZ24rJ3NjcmlwdCIvPicp'@;
put 'KSxrLmxlbmd0aCYmKFIrPSI8clByPiIray5qb2luKCIiKSsiPC9yUHI+IiksIjxyPiIrKFIrPVByKCJ0IixMcihTLnYpLG51bGwpKSsiPC9yPiJ9KGspfSkuam9pbigiIil9dmFyIHdWPS88KD86XHcrOik/dFtePl0qPihbXjxdKik8XC8oPzpcdys6KT90Pi9nLENWPS88KD86XHcrOik/clxi'@;
put 'W14+XSo+LyxTVj0vPCg/Olx3KzopP3JQaC4qPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/clBoPi9nO2Z1bmN0aW9uIHVDKFMsUil7dmFyIGs9IVJ8fFIuY2VsbEhUTUwsRz17fTtyZXR1cm4gUz8oUy5tYXRjaCgvXlxzKjwoPzpcdys6KT90W14+XSo+Lyk/KEcudD1RcihnYShTLnNsaWNlKFMu'@;
put 'aW5kZXhPZigiPiIpKzEpLnNwbGl0KC88XC8oPzpcdys6KT90Pi8pWzBdfHwiIikpLEcucj1nYShTKSxrJiYoRy5oPWNvKEcudCkpKTpTLm1hdGNoKENWKSYmKEcucj1nYShTKSxHLnQ9UXIoZ2EoKFMucmVwbGFjZShTViwiIikubWF0Y2god1YpfHxbXSkuam9pbigiIikucmVwbGFjZShlbiwi'@;
put 'IikpKSxHLlI9XzUoRy5yKSxrJiYoRy5oPUh1KEcuUikpKSxHKTp7dDoiIn19dmFyIG9rPS88KD86XHcrOik/c3N0KFtePl0qKT4oW1xzXFNdKik8XC8oPzpcdys6KT9zc3Q+Lyxhaz0vPCg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi9nLEs2PS88XC8oPzpcdys6KT8oPzpzaXxzc3RJdGVtKT4v'@;
put 'O3FvLlNTVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zaGFyZWRTdHJpbmdzIjt2YXIgTVY9L15cc3xccyR8W1x0XG5ccl0vO2Z1bmN0aW9uIER2KFMsUil7aWYoIVIuYm9va1NTVClyZXR1cm4iIjt2YXIgaz1b'@;
put 'SWldO2tbay5sZW5ndGhdPVByKCJzc3QiLG51bGwse3htbG5zOllpLm1haW5bMF0sY291bnQ6Uy5Db3VudCx1bmlxdWVDb3VudDpTLlVuaXF1ZX0pO2Zvcih2YXIgRz0wO0chPVMubGVuZ3RoOysrRylpZihudWxsIT1TW0ddKXt2YXIgUT1TW0ddLGFlPSI8c2k+IjtRLnI/YWUrPVEucjooYWUr'@;
put 'PSI8dCIsUS50fHwoUS50PSIiKSxRLnQubWF0Y2goTVYpJiYoYWUrPScgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInKSxhZSs9Ij4iK0xyKFEudCkrIjwvdD4iKSxrW2subGVuZ3RoXT1hZSs9Ijwvc2k+In1yZXR1cm4gay5sZW5ndGg+MiYmKGtbay5sZW5ndGhdPSI8L3NzdD4iLGtbMV09a1sxXS5y'@;
put 'ZXBsYWNlKCIvPiIsIj4iKSksay5qb2luKCIiKX12YXIgc2s9ZnVuY3Rpb24gSTMoUyxSLGspe3ZhciBHPTEzKzQqUy50Lmxlbmd0aCxRPVMuUiYmUy5SLmxlbmd0aHx8Uy5yO1MuciYmKFMuUj1fNShTLnIpKSxRJiYoRys9NCs0KlMuUi5sZW5ndGgpO3ZhciBhZT0hMTtpZihudWxsPT1rJiYo'@;
put 'YWU9ITAsaz1ibihHKSksay53cml0ZV9zaGlmdCgxLFE/MTowKSxQYyhTLnQsayksUSl7ay53cml0ZV9zaGlmdCg0LFMuUi5sZW5ndGgpO2Zvcih2YXIgZ2U9MCxwZT0wO3BlPFMuUi5sZW5ndGg7KytwZSl7dmFyIHllPVMuUltwZV07ay53cml0ZV9zaGlmdCgyLGdlKSxnZSs9KHllLnZ8fCIi'@;
put 'KS5sZW5ndGg7dmFyIFBlPXllLnM/czAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczp5ZS5zfSxSKTowO2sud3JpdGVfc2hpZnQoMixSLmNlbGxYZnNbUGVdLmZvbnRJZCl9fXJldHVybiBhZT9rLnNsaWNlKDAsay5sKTprfTtmdW5jdGlvbiBsayhTLFIpe3ZhciBrPXZp'@;
put 'KCk7RnIoaywiQnJ0QmVnaW5Tc3QiLGZ1bmN0aW9uIGRDKFMsUil7cmV0dXJuIFJ8fChSPWJuKDgpKSxSLndyaXRlX3NoaWZ0KDQsUy5Db3VudCksUi53cml0ZV9zaGlmdCg0LFMuVW5pcXVlKSxSfShTKSk7Zm9yKHZhciBHPTA7RzxTLmxlbmd0aDsrK0cpRnIoaywiQnJ0U1NUSXRlbSIsc2so'@;
put 'U1tHXSxSKSk7cmV0dXJuIEZyKGssIkJydEVuZFNzdCIpLGsuZW5kKCl9ZnVuY3Rpb24gazQoUyl7aWYodHlwZW9mIGNwdGFibGU8InUiKXJldHVybiBjcHRhYmxlLnV0aWxzLmVuY29kZShGLFMpO2Zvcih2YXIgUj1bXSxrPVMuc3BsaXQoIiIpLEc9MDtHPGsubGVuZ3RoOysrRylSW0ddPWtb'@;
put 'R10uY2hhckNvZGVBdCgwKTtyZXR1cm4gUn1mdW5jdGlvbiBQMShTLFIpe3ZhciBrPXt9O3JldHVybiBrLk1ham9yPVMucmVhZF9zaGlmdCgyKSxrLk1pbm9yPVMucmVhZF9zaGlmdCgyKSxSPj00JiYoUy5sKz1SLTQpLGt9ZnVuY3Rpb24gaEMoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0'@;
put 'KSxrPVMubCtSLTQsRz17fSxRPVMucmVhZF9zaGlmdCg0KSxhZT1bXTtRLS0gPjA7KWFlLnB1c2goe3Q6Uy5yZWFkX3NoaWZ0KDQpLHY6Uy5yZWFkX3NoaWZ0KDAsImxwcDQiKX0pO2lmKEcubmFtZT1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLEcuY29tcHM9YWUsUy5sIT1rKXRocm93IG5ldyBF'@;
put 'cnJvcigiQmFkIERhdGFTcGFjZU1hcEVudHJ5OiAiK1MubCsiICE9ICIrayk7cmV0dXJuIEd9ZnVuY3Rpb24gRFYoUyxSKXt2YXIgaz1TLmwrUixHPXt9O0cuRmxhZ3M9NjMmUy5yZWFkX3NoaWZ0KDQpLFMubCs9NCxHLkFsZ0lEPVMucmVhZF9zaGlmdCg0KTt2YXIgUT0hMTtzd2l0Y2goRy5B'@;
put 'bGdJRCl7Y2FzZSAyNjEyNjpjYXNlIDI2MTI3OmNhc2UgMjYxMjg6UT0zNj09Ry5GbGFnczticmVhaztjYXNlIDI2NjI1OlE9ND09KDUyJkcuRmxhZ3MpO2JyZWFrO2Nhc2UgMDpRPTE2PT1HLkZsYWdzfHw0PT1HLkZsYWdzfHwzNj09Ry5GbGFnczticmVhaztkZWZhdWx0OnRocm93IlVucmVj'@;
put 'b2duaXplZCBlbmNyeXB0aW9uIGFsZ29yaXRobTogIitHLkFsZ0lEfWlmKCFRKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBGbGFncy9BbGdJRCBtaXNtYXRjaCIpO3JldHVybiBHLkFsZ0lESGFzaD1TLnJlYWRfc2hpZnQoNCksRy5LZXlTaXplPVMucmVhZF9zaGlmdCg0KSxHLlByb3Zp'@;
put 'ZGVyVHlwZT1TLnJlYWRfc2hpZnQoNCksUy5sKz04LEcuQ1NQTmFtZT1TLnJlYWRfc2hpZnQoay1TLmw+PjEsInV0ZjE2bGUiKSxTLmw9ayxHfWZ1bmN0aW9uIEx2KFMsUil7dmFyIGs9e30sRz1TLmwrUjtyZXR1cm4gUy5sKz00LGsuU2FsdD1TLnNsaWNlKFMubCxTLmwrMTYpLFMubCs9MTYs'@;
put 'ay5WZXJpZmllcj1TLnNsaWNlKFMubCxTLmwrMTYpLFMubCs9MTYsUy5yZWFkX3NoaWZ0KDQpLGsuVmVyaWZpZXJIYXNoPVMuc2xpY2UoUy5sLEcpLFMubD1HLGt9ZnVuY3Rpb24gSVYoUyl7aWYoMzYhPSg2MyZTLnJlYWRfc2hpZnQoNCkpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbklu'@;
put 'Zm8gbWlzbWF0Y2giKTt2YXIgaz1TLnJlYWRfc2hpZnQoNCk7cmV0dXJue3Q6IlN0ZCIsaDpEVihTLGspLHY6THYoUyxTLmxlbmd0aC1TLmwpfX1mdW5jdGlvbiBYNigpe3Rocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQ6IEVDTUEtMzc2IEV4dGVuc2libGUiKX1m'@;
put 'dW5jdGlvbiBmQyhTKXt2YXIgUj1bInNhbHRTaXplIiwiYmxvY2tTaXplIiwia2V5Qml0cyIsImhhc2hTaXplIiwiY2lwaGVyQWxnb3JpdGhtIiwiY2lwaGVyQ2hhaW5pbmciLCJoYXNoQWxnb3JpdGhtIiwic2FsdFZhbHVlIl07Uy5sKz00O3ZhciBrPVMucmVhZF9zaGlmdChTLmxlbmd0aC1T'@;
put 'LmwsInV0ZjgiKSxHPXt9O3JldHVybiBrLnJlcGxhY2UoZW4sZnVuY3Rpb24oYWUpe3ZhciBnZT12cihhZSk7c3dpdGNoKFduKGdlWzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZW5jcnlwdGlvbiI6Y2FzZSI8L2VuY3J5cHRpb24+IjpjYXNlIjwva2V5RW5jcnlwdG9ycz4iOmNhc2UiPC9rZXlF'@;
put 'bmNyeXB0b3I+IjpicmVhaztjYXNlIjxrZXlEYXRhIjpSLmZvckVhY2goZnVuY3Rpb24ocGUpe0dbcGVdPWdlW3BlXX0pO2JyZWFrO2Nhc2UiPGRhdGFJbnRlZ3JpdHkiOkcuZW5jcnlwdGVkSG1hY0tleT1nZS5lbmNyeXB0ZWRIbWFjS2V5LEcuZW5jcnlwdGVkSG1hY1ZhbHVlPWdlLmVuY3J5'@;
put 'cHRlZEhtYWNWYWx1ZTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3JzPiI6Y2FzZSI8a2V5RW5jcnlwdG9ycyI6Ry5lbmNzPVtdO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvciI6Ry51cmk9Z2UudXJpO2JyZWFrO2Nhc2UiPGVuY3J5cHRlZEtleSI6Ry5lbmNzLnB1c2goZ2UpO2JyZWFrO2RlZmF1'@;
put 'bHQ6dGhyb3cgZ2VbMF19fSksR31mdW5jdGlvbiBQdihTKXt2YXIgayxhZSxSPTAsRz1rNChTKSxRPUcubGVuZ3RoKzE7Zm9yKChrPVYoUSkpWzBdPUcubGVuZ3RoLGFlPTE7YWUhPVE7KythZSlrW2FlXT1HW2FlLTFdO2ZvcihhZT1RLTE7YWU+PTA7LS1hZSlSPSgoMTYzODQmUj8xOjApfFI8'@;
put 'PDEmMzI3NjcpXmtbYWVdO3JldHVybiA1MjgxMV5SfXZhciBwQz1mdW5jdGlvbigpe3ZhciBTPVsxODcsMjU1LDI1NSwxODYsMjU1LDI1NSwxODUsMTI4LDAsMTkwLDE1LDAsMTkxLDE1LDBdLFI9WzU3ODQwLDc0MzksNTIzODAsMzM5ODQsNDM2NCwzNjAwLDYxOTAyLDEyNjA2LDYyNTgsNTc2'@;
put 'NTcsNTQyODcsMzQwNDEsMTAyNTIsNDMzNzAsMjAxNjNdLGs9WzQ0Nzk2LDE5OTI5LDM5ODU4LDEwMDUzLDIwMTA2LDQwMjEyLDEwNzYxLDMxNTg1LDYzMTcwLDY0OTMzLDYwMjY3LDUwOTM1LDQwMzk5LDExMTk5LDE3NzYzLDM1NTI2LDE0NTMsMjkwNiw1ODEyLDExNjI0LDIzMjQ4LDg4NSwx'@;
put 'NzcwLDM1NDAsNzA4MCwxNDE2MCwyODMyMCw1NjY0MCw1NTM2OSw0MTEzOSwyMDgwNyw0MTYxNCwyMTgyMSw0MzY0MiwxNzYyMSwyODQ4NSw1Njk3MCw0NDM0MSwxOTAxOSwzODAzOCwxNDYwNSwyOTIxMCw2MDE5NSw1MDc5MSw0MDE3NSwxMDc1MSwyMTUwMiw0MzAwNCwyNDUzNywxODM4Nywz'@;
put 'Njc3NCwzOTQ5LDc4OTgsMTU3OTYsMzE1OTIsNjMxODQsNDcyMDEsMjQ4MDMsNDk2MDYsMzc4MDUsMTQyMDMsMjg0MDYsNTY4MTIsMTc4MjQsMzU2NDgsMTY5NywzMzk0LDY3ODgsMTM1NzYsMjcxNTIsNDM2MDEsMTc1MzksMzUwNzgsNTU3LDExMTQsMjIyOCw0NDU2LDMwMzg4LDYwNzc2LDUx'@;
put 'OTUzLDM0MjQzLDcwNzksMTQxNTgsMjgzMTYsMTQxMjgsMjgyNTYsNTY1MTIsNDM0MjUsMTcyNTEsMzQ1MDIsNzU5NywxMzEwNSwyNjIxMCw1MjQyMCwzNTI0MSw4ODMsMTc2NiwzNTMyLDQxMjksODI1OCwxNjUxNiwzMzAzMiw0NjU3LDkzMTQsMTg2MjhdLFE9ZnVuY3Rpb24oZ2UscGUpe3Jl'@;
put 'dHVybiBmdW5jdGlvbihnZSl7cmV0dXJuIDI1NSYoZ2U+PjF8Z2U8PDcpfShnZV5wZSl9O3JldHVybiBmdW5jdGlvbihwZSl7Zm9yKHZhciB5ZT1rNChwZSksUGU9ZnVuY3Rpb24oZ2Upe2Zvcih2YXIgcGU9UltnZS5sZW5ndGgtMV0seWU9MTA0LFBlPWdlLmxlbmd0aC0xO1BlPj0wOy0tUGUp'@;
put 'Zm9yKHZhciBOZT1nZVtQZV0sWWU9MDs3IT1ZZTsrK1llKTY0Jk5lJiYocGVePWtbeWVdKSxOZSo9MiwtLXllO3JldHVybiBwZX0oeWUpLE5lPXllLmxlbmd0aCxZZT1WKDE2KSxldD0wOzE2IT1ldDsrK2V0KVllW2V0XT0wO3ZhciBvdDtmb3IoISgxJn5OZSkmJihZZVtOZV09UShTWzBdLFBl'@;
put 'Pj44KSxZZVstLU5lXT1RKHllW3llLmxlbmd0aC0xXSwyNTUmUGUpKTtOZT4wOylZZVstLU5lXT1RKHllW05lXSxQZT4+OCksWWVbLS1OZV09USh5ZVtOZV0sMjU1JlBlKTtmb3IoTmU9MTUsb3Q9MTUteWUubGVuZ3RoO290PjA7KVllW05lXT1RKFNbb3RdLFBlPj44KSwtLW90LFllWy0tTmVd'@;
put 'PVEoeWVbTmVdLDI1NSZQZSksLS1OZSwtLW90O3JldHVybiBZZX19KCk7dmFyIEh2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUyhRLGFlKXtzd2l0Y2goYWUudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBSKF9lLmRlY29kZShRKSxhZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBSKFEsYWUpO2Nhc2Ui'@;
put 'YnVmZmVyIjpyZXR1cm4gUihRLnRvU3RyaW5nKCJiaW5hcnkiKSxhZSk7Y2FzZSJhcnJheSI6cmV0dXJuIFIodXQoUSksYWUpfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIithZS50eXBlKX1mdW5jdGlvbiBSKFEsYWUpe3ZhciBwZT0oYWV8fHt9KS5kZW5zZT9bXTp7fTtp'@;
put 'ZighUS5tYXRjaCgvXFx0cm93ZC8pKXRocm93IG5ldyBFcnJvcigiUlRGIG1pc3NpbmcgdGFibGUiKTtyZXR1cm4gcGVbIiFyZWYiXT1pbyh7czp7YzowLHI6MH0sZTp7YzowLHI6MH19KSxwZX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gayhRLGFlKXtyZXR1cm4gbmgoUyhRLGFlKSxh'@;
put 'ZSl9LHRvX3NoZWV0OlMsZnJvbV9zaGVldDpmdW5jdGlvbiBHKFEpe2Zvcih2YXIgcGUsYWU9WyJ7XFxydGYxXFxhbnNpIl0sZ2U9YWEoUVsiIXJlZiJdKSx5ZT1BcnJheS5pc0FycmF5KFEpLFBlPWdlLnMucjtQZTw9Z2UuZS5yOysrUGUpe2FlLnB1c2goIlxcdHJvd2RcXHRyYXV0b2ZpdDEi'@;
put 'KTtmb3IodmFyIE5lPWdlLnMuYztOZTw9Z2UuZS5jOysrTmUpYWUucHVzaCgiXFxjZWxseCIrKE5lKzEpKTtmb3IoYWUucHVzaCgiXFxwYXJkXFxpbnRibCIpLE5lPWdlLnMuYztOZTw9Z2UuZS5jOysrTmUpe3ZhciBZZT1xaSh7cjpQZSxjOk5lfSk7KHBlPXllPyhRW1BlXXx8W10pW05lXTpR'@;
put 'W1llXSkmJihudWxsIT1wZS52fHxwZS5mJiYhcGUuRikmJihhZS5wdXNoKCIgIisocGUud3x8KF9sKHBlKSxwZS53KSkpLGFlLnB1c2goIlxcY2VsbCIpKX1hZS5wdXNoKCJcXHBhcmRcXGludGJsXFxyb3ciKX1yZXR1cm4gYWUuam9pbigiIikrIn0ifX19KCk7ZnVuY3Rpb24gdzUoUyl7dmFy'@;
put 'IFI9Uy5zbGljZSgiIyI9PT1TWzBdPzE6MCkuc2xpY2UoMCw2KTtyZXR1cm5bcGFyc2VJbnQoUi5zbGljZSgwLDIpLDE2KSxwYXJzZUludChSLnNsaWNlKDIsNCksMTYpLHBhcnNlSW50KFIuc2xpY2UoNCw2KSwxNildfWZ1bmN0aW9uIGZkKFMpe2Zvcih2YXIgUj0wLGs9MTszIT1SOysrUilr'@;
put 'PTI1NiprKyhTW1JdPjI1NT8yNTU6U1tSXTwwPzA6U1tSXSk7cmV0dXJuIGsudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gc2goUyxSKXtpZihudWxsPT1TKXJldHVybiBudWxsIT1SO2lmKG51bGw9PVIpcmV0dXJuITA7aWYoMT09Uy5hdXRvJiYxPT1SLmF1'@;
put 'dG8pcmV0dXJuITE7aWYoISFTLmF1dG8hPSEhUi5hdXRvfHxudWxsPT1TLnRoZW1lIT0obnVsbD09Ui50aGVtZSkpcmV0dXJuITA7aWYobnVsbCE9Uy50aGVtZSlyZXR1cm4gUy50aGVtZSE9Ui50aGVtZXx8Uy50aW50IT1SLnRpbnQ7aWYobnVsbD09Uy5yZ2ImJm51bGw9PVIucmdiKXJldHVy'@;
put 'biExO3ZhciBrPVMucmdiOyJudW1iZXIiPT10eXBlb2YgayYmKGs9ay50b1N0cmluZygxNikpLGs9ay5zbGljZSgtNik7dmFyIEc9Ui5yZ2I7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBHJiYoRz1HLnRvU3RyaW5nKDE2KSksRz1HLnNsaWNlKC02KSxrLnRvTG93ZXJDYXNlKCkhPUcudG9Mb3dl'@;
put 'ckNhc2UoKX1mdW5jdGlvbiB1ayhTLFIpe3JldHVybiBudWxsPT1TP251bGwhPVI6bnVsbD09Uj9udWxsIT1TOlMuc3R5bGUhPVIuc3R5bGV8fHNoKFMuY29sb3IsUi5jb2xvcil9ZnVuY3Rpb24gQzUoUyxSKXtpZigwPT09UilyZXR1cm4gUzt2YXIgaz1mdW5jdGlvbiBPVihTKXt2YXIgUj1T'@;
put 'WzBdLzI1NSxrPVNbMV0vMjU1LEc9U1syXS8yNTUsUT1NYXRoLm1heChSLGssRyksYWU9TWF0aC5taW4oUixrLEcpLGdlPVEtYWU7aWYoMD09PWdlKXJldHVyblswLDAsUl07dmFyIHllLHBlPTAsUGU9USthZTtzd2l0Y2goeWU9Z2UvKFBlPjE/Mi1QZTpQZSksUSl7Y2FzZSBSOnBlPSgoay1H'@;
put 'KS9nZSs2KSU2O2JyZWFrO2Nhc2UgazpwZT0oRy1SKS9nZSsyO2JyZWFrO2Nhc2UgRzpwZT0oUi1rKS9nZSs0fXJldHVybltwZS82LHllLFBlLzJdfSh3NShTKSk7cmV0dXJuIGtbMl09UjwwP2tbMl0qKDErUik6MS0oMS1rWzJdKSooMS1SKSxmZChmdW5jdGlvbiBjayhTKXt2YXIgeWUsaz1T'@;
put 'WzFdLEc9U1syXSxRPTIqayooRzwuNT9HOjEtRyksYWU9Ry1RLzIsZ2U9W2FlLGFlLGFlXSxwZT02KlNbMF07aWYoMCE9PWspc3dpdGNoKDB8cGUpe2Nhc2UgMDpjYXNlIDY6eWU9USpwZSxnZVswXSs9USxnZVsxXSs9eWU7YnJlYWs7Y2FzZSAxOmdlWzBdKz15ZT1RKigyLXBlKSxnZVsxXSs9'@;
put 'UTticmVhaztjYXNlIDI6eWU9USoocGUtMiksZ2VbMV0rPVEsZ2VbMl0rPXllO2JyZWFrO2Nhc2UgMzpnZVsxXSs9eWU9USooNC1wZSksZ2VbMl0rPVE7YnJlYWs7Y2FzZSA0OnllPVEqKHBlLTQpLGdlWzJdKz1RLGdlWzBdKz15ZTticmVhaztjYXNlIDU6Z2VbMl0rPXllPVEqKDYtcGUpLGdl'@;
put 'WzBdKz1RfWZvcih2YXIgUGU9MDszIT1QZTsrK1BlKWdlW1BlXT1NYXRoLnJvdW5kKDI1NSpnZVtQZV0pO3JldHVybiBnZX0oaykpfXZhciBkaz02LFRjPWRrO2Z1bmN0aW9uIFM1KFMpe3JldHVybiBNYXRoLmZsb29yKChTK01hdGgucm91bmQoMTI4L1RjKS8yNTYpKlRjKX1mdW5jdGlvbiBN'@;
put 'NShTKXtyZXR1cm4gTWF0aC5mbG9vcigoUy01KS9UYyoxMDArLjUpLzEwMH1mdW5jdGlvbiBFZihTKXtyZXR1cm4gTWF0aC5yb3VuZCgoUypUYys1KS9UYyoyNTYpLzI1Nn1mdW5jdGlvbiBRMChTKXtTLmJlc3RGaXQmJmRlbGV0ZSBTLmJlc3RGaXQsUy53aWR0aD8oUy53cHg9UzUoUy53aWR0'@;
put 'aCksUy53Y2g9TTUoUy53cHgpLFMuTURXPVRjKTpTLndweD8oUy53Y2g9TTUoUy53cHgpLFMud2lkdGg9RWYoUy53Y2gpLFMuTURXPVRjKToibnVtYmVyIj09dHlwZW9mIFMud2NoJiYoUy53aWR0aD1FZihTLndjaCksUy53cHg9UzUoUy53aWR0aCksUy5NRFc9VGMpLFMuY3VzdG9tV2lkdGgm'@;
put 'JmRlbGV0ZSBTLmN1c3RvbVdpZHRofXZhciBXcz05NixUZj1XcztmdW5jdGlvbiBVMyhTKXtyZXR1cm4gNzIqUy9UZn1mdW5jdGlvbiBsaChTKXtyZXR1cm4gUypUZi83Mn1mdW5jdGlvbiBBZihTKXtUZj1TPXtvc3g6NzIsd2luOjk2LHdpbjEwMDo5Nix3aW4xMjU6MTIwLHdpbjE1MDoxNDR9'@;
put 'W1NdfHxTfHxXcyxiQz1FNVtTXX1mdW5jdGlvbiBWdihTKXtTLmhweD9TLmhwdD1VMyhTLmhweCk6Uy5ocHQmJihTLmhweD1saChTLmhwdCkpfXZhciBtQz17Tm9uZToibm9uZSIsU29saWQ6InNvbGlkIixHcmF5NTA6Im1lZGl1bUdyYXkiLEdyYXk3NToiZGFya0dyYXkiLEdyYXkyNToibGln'@;
put 'aHRHcmF5IixIb3J6U3RyaXBlOiJkYXJrSG9yaXpvbnRhbCIsVmVydFN0cmlwZToiZGFya1ZlcnRpY2FsIixSZXZlcnNlRGlhZ1N0cmlwZToiZGFya0Rvd24iLERpYWdTdHJpcGU6ImRhcmtVcCIsRGlhZ0Nyb3NzOiJkYXJrR3JpZCIsVGhpY2tEaWFnQ3Jvc3M6ImRhcmtUcmVsbGlzIixUaGlu'@;
put 'SG9yelN0cmlwZToibGlnaHRIb3Jpem9udGFsIixUaGluVmVydFN0cmlwZToibGlnaHRWZXJ0aWNhbCIsVGhpblJldmVyc2VEaWFnU3RyaXBlOiJsaWdodERvd24iLFRoaW5Ib3J6Q3Jvc3M6ImxpZ2h0R3JpZCJ9LHZDPVZlKG1DKSxKNj17b3JhbmdlOjE2NzUzOTIwLGJsYWNrOjAsbmF2eTox'@;
put 'MjgsYmx1ZToyNTUsZ3JlZW46MzI3NjgsdGVhbDozMjg5NixsaW1lOjY1MjgwLGFxdWE6NjU1MzUsc2lsdmVyOjEyNjMyMjU2LG1hcm9vbjo4Mzg4NjA4LHB1cnBsZTo4Mzg4NzM2LG9saXZlOjg0MjEzNzYsZ3JheTo4NDIxNTA0LHJlZDoxNjcxMTY4MCxmdWNoc2lhOjE2NzExOTM1LHllbGxv'@;
put 'dzoxNjc3Njk2MCx3aGl0ZToxNjc3NzIxNX07ZnVuY3Rpb24geDUoUyxSKXtpZihTLnJlcGxhY2UoIiMiLCIiKS5tYXRjaCgvXlswLTlhLWZBLUZdezZ9JC8pKXJldHVybiBwYXJzZUludChTLnJlcGxhY2UoIiMiLCIiKSwxNik7aWYoSjZbU10pcmV0dXJuIEo2W1NdO3ZhciBrPVMubWF0Y2go'@;
put 'L3JnYlwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccypcKS8pO2lmKGspcmV0dXJuKCtrWzFdPDwxNikrKCtrWzJdPDw4KSsgK2tbM107aWYoaz1TLm1hdGNoKC9yZ2JhXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxzKihcZCopLykpcmV0dXJuIDAhPShrWzRd'@;
put 'JiZrWzRdLmxlbmd0aD4wJiYra1s0XXx8MCl8fCtrWzFdPjB8fCtrWzJdPjB8fCtrWzNdPjA/KCtrWzFdPDwxNikrKCtrWzJdPDw4KSsgK2tbM106Uj8tMToxNjc3NzIxNTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSFRNTCBjb2xvciAiK1MpfXZhciBFNT17fTtmdW5jdGlvbiBCdihTKXtT'@;
put 'PVN8fDk2O3ZhciBSPXtDYWxpYnJpOltdLEFyaWFsOltdLCJTcGFya2Fzc2UgUmciOltdLFx1NWI4Ylx1NGY1MzpbXSxcdTZlMzhcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWY6W10sIkNlbnR1cnkgR290aGljIjpbXX07cmV0dXJuIFIuQ2FsaWJyaVsxMV09NyxSLkNhbGlicmlbMTJdPXs3Mjo2'@;
put 'LDk2OjgsMTIwOjEwLDE0NDoxMn1bU118fDgsUi5DYWxpYnJpWzEzXT0xMCxSLkNhbGlicmlbMTRdPTExLFIuQ2FsaWJyaVsxNl09MTIsUi5DYWxpYnJpWzE4XT0xNCxSLkNhbGlicmlbMjBdPTE2LFIuXHU1YjhiXHU0ZjUzWzExXT04LFIuXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFm'@;
put 'WzExXT04LFJbIlNwYXJrYXNzZSBSZyJdWzExXT03LFIuQXJpYWxbMTBdPTcsUlsiQ2VudHVyeSBHb3RoaWMiXVsxMl09OSxSfUU1WzcyXT1Cdig3MiksRTVbOTZdPUJ2KDk2KSxFNVsxMjBdPUJ2KDEyMCksRTVbMTQ0XT1CdigxNDQpO3ZhciBiQz1FNVs5Nl07ZnVuY3Rpb24geUMoUyl7cmV0'@;
put 'dXJuKGJDW1MubmFtZXx8Uy5Gb250TmFtZV18fFtdKVtTLnN6fHxTLlNpemVdfWZ1bmN0aW9uIEk0KFMpe2lmKFMpe3ZhciBSPXlDKFMpO2lmKFIpcmV0dXJuIFRjPVJ9cmV0dXJuIFRjPTZ9ZnVuY3Rpb24gX0MoUyxSLGspe3JldHVybiBmZChmdW5jdGlvbiBoayhTLFIsayl7cmV0dXJuW01h'@;
put 'dGgucm91bmQoUlswXSprK1NbMF0qKDEtaykpLE1hdGgucm91bmQoUlsxXSprK1NbMV0qKDEtaykpLE1hdGgucm91bmQoUlsyXSprK1NbMl0qKDEtaykpXX0odzUoIm51bWJlciI9PXR5cGVvZiBTLnJnYj8oIjAwMDAwIitTLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOlMucmdiKSx3NSgibnVt'@;
put 'YmVyIj09dHlwZW9mIFIucmdiPygiMDAwMDAiK1IudG9TdHJpbmcoMTYpKS5zbGljZSgtNik6Ui5yZ2IpLGspKX1mdW5jdGlvbiBqdihTLFIsayl7aWYoaylzd2l0Y2goK1Mpe2Nhc2UgNjQ6Uz02NTticmVhaztjYXNlIDY1OlM9NjR9dmFyIEc9UiYmUlsrU118fG4wWytTXXx8SHdbK1MtMjAw'@;
put 'XTtpZig4MT09K1MmJihHPW4wWzFdKSxHfHwoRz1uMFsxXSksIUcpdGhyb3cgbmV3IEVycm9yKCJiYWQgSUNWIGluZGV4ICIrUyk7cmV0dXJuIGZkKEcpfWZ1bmN0aW9uIGZrKFMsUixrKXt2YXIgRz17fTtyZXR1cm4gbnVsbCE9Uy5pbmRleGVkJiYoRy5pbmRleD1wYXJzZUludChTLmluZGV4'@;
put 'ZWQsMTApLEcucmdiPWp2KEcuaW5kZXgsUi5JbmRleGVkKSksbnVsbCE9Uy50aGVtZSYmKEcudGhlbWU9cGFyc2VJbnQoUy50aGVtZSwxMCkpLG51bGwhPVMudGludCYmKEcudGludD1wYXJzZUZsb2F0KFMudGludCkpLG51bGwhPVMucmdiJiYoRy5yZ2I9Uy5yZ2Iuc2xpY2UoLTYpKSxudWxs'@;
put 'IT1HLnRoZW1lJiYhRy5yZ2ImJmsudGhlbWVFbGVtZW50cyYmKEcucmdiPUM1KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbRy50aGVtZV0ucmdiLEcudGludHx8MCksRy5yYXdfcmdiPWsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbRy50aGVtZV0ucmdiKSxHfWZ1bmN0aW9uIHdDKFMsUixr'@;
put 'LEcpe1IuQm9yZGVycz1bXTt2YXIgUT17fSxhZT17fSxnZT0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgeWU9dnIocGUpO3N3aXRjaChXbih5ZVswXSkpe2Nhc2UiPGJvcmRlcnMiOmNhc2UiPGJvcmRlcnM+IjpjYXNlIjwvYm9yZGVycz4iOmNhc2Ui'@;
put 'PC9ib3JkZXI+IjpjYXNlIjxsZWZ0Lz4iOmNhc2UiPC9sZWZ0PiI6Y2FzZSI8cmlnaHQvPiI6Y2FzZSI8L3JpZ2h0PiI6Y2FzZSI8dG9wLz4iOmNhc2UiPC90b3A+IjpjYXNlIjxib3R0b20vPiI6Y2FzZSI8L2JvdHRvbT4iOmNhc2UiPGRpYWdvbmFsIjpjYXNlIjxkaWFnb25hbD4iOmNhc2Ui'@;
put 'PGRpYWdvbmFsLz4iOmNhc2UiPGhvcml6b250YWwiOmNhc2UiPGhvcml6b250YWw+IjpjYXNlIjxob3Jpem9udGFsLz4iOmNhc2UiPHZlcnRpY2FsIjpjYXNlIjx2ZXJ0aWNhbD4iOmNhc2UiPHZlcnRpY2FsLz4iOmNhc2UiPHN0YXJ0IjpjYXNlIjxzdGFydD4iOmNhc2UiPHN0YXJ0Lz4iOmNh'@;
put 'c2UiPC9zdGFydD4iOmNhc2UiPGVuZCI6Y2FzZSI8ZW5kPiI6Y2FzZSI8ZW5kLz4iOmNhc2UiPC9lbmQ+IjpjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxib3JkZXIiOmNhc2UiPGJv'@;
put 'cmRlcj4iOmNhc2UiPGJvcmRlci8+IjpRPXt9LHllLmRpYWdvbmFsVXAmJihRLmRpYWdvbmFsVXA9dGkoeWUuZGlhZ29uYWxVcCkpLHllLmRpYWdvbmFsRG93biYmKFEuZGlhZ29uYWxEb3duPXRpKHllLmRpYWdvbmFsRG93bikpLFIuQm9yZGVycy5wdXNoKFEpO2JyZWFrO2Nhc2UiPGxlZnQi'@;
put 'OmNhc2UiPGxlZnQ+IjphZT1RLmxlZnQ9e30seWUuc3R5bGUmJihhZS5zdHlsZT15ZS5zdHlsZSk7YnJlYWs7Y2FzZSI8cmlnaHQiOmNhc2UiPHJpZ2h0PiI6YWU9US5yaWdodD17fSx5ZS5zdHlsZSYmKGFlLnN0eWxlPXllLnN0eWxlKTticmVhaztjYXNlIjx0b3AiOmNhc2UiPHRvcD4iOmFl'@;
put 'PVEudG9wPXt9LHllLnN0eWxlJiYoYWUuc3R5bGU9eWUuc3R5bGUpO2JyZWFrO2Nhc2UiPGJvdHRvbSI6Y2FzZSI8Ym90dG9tPiI6YWU9US5ib3R0b209e30seWUuc3R5bGUmJihhZS5zdHlsZT15ZS5zdHlsZSk7YnJlYWs7Y2FzZSI8L2RpYWdvbmFsPiI6US5kaWFnb25hbD1hZSxhZT17fTti'@;
put 'cmVhaztjYXNlIjwvaG9yaXpvbnRhbD4iOlEuaG9yaXpvbnRhbD1hZSxhZT17fTticmVhaztjYXNlIjwvdmVydGljYWw+IjpRLnZlcnRpY2FsPWFlLGFlPXt9O2JyZWFrO2Nhc2UiPGNvbG9yIjpjYXNlIjxjb2xvcj4iOmFlLmNvbG9yfHwoYWUuY29sb3I9e30pLHllLmF1dG8mJihhZS5jb2xv'@;
put 'ci5hdXRvPXRpKHllLmF1dG8pKSxudWxsIT15ZS5yZ2I/YWUuY29sb3IucmdiPXllLnJnYi5zbGljZSgtNik6eWUuaW5kZXhlZD8oYWUuY29sb3IuaW5kZXg9cGFyc2VJbnQoeWUuaW5kZXhlZCwxMCksYWUuY29sb3IucmdiPWp2KGFlLmNvbG9yLmluZGV4LFIuSW5kZXhlZCwhMSkpOnllLnRo'@;
put 'ZW1lJiYoYWUuY29sb3IudGhlbWU9cGFyc2VJbnQoeWUudGhlbWUsMTApLHllLnRpbnQmJihhZS5jb2xvci50aW50PXBhcnNlRmxvYXQoeWUudGludCkpLHllLnRoZW1lJiZrLnRoZW1lRWxlbWVudHMmJmsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihhZS5jb2xvci5yZ2I9QzUoay50aGVt'@;
put 'ZUVsZW1lbnRzLmNsclNjaGVtZVthZS5jb2xvci50aGVtZV0ucmdiLGFlLmNvbG9yLnRpbnR8fDApKSksIXllLmF1dG8mJm51bGw9PXllLnJnYiYmIXllLmluZGV4ZWQmJmRlbGV0ZSBhZS5jb2xvcjticmVhaztjYXNlIjxleHQiOmdlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpnZT0hMTticmVh'@;
put 'aztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhZ2UpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIit5ZVswXSsiIGluIGJvcmRlcnMiKX19KX1mdW5jdGlvbiBSNChTLFIpe3ZhciBrPVsiPCIrUl07cmV0dXJuIFMmJlMuc3R5bGU/KGsucHVzaCgnIHN0eWxlPSInK1Muc3R5bGUrJyInKSxT'@;
put 'LmNvbG9yPyhrLnB1c2goIj4iKSxrLnB1c2gobWQoUy5jb2xvciwhMCkpLGsuam9pbigiIikrIjwvIitSKyI+Iik6ay5qb2luKCIiKSsiLz4iKTprWzBdKyIvPiJ9ZnVuY3Rpb24gUFYoUyxSLGssRyl7Ui5GaWxscz1bXTt2YXIgUT17fSxhZT17fSxnZT0hMSxwZT0hMTsoU1swXS5tYXRjaChl'@;
put 'bil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHllKXt2YXIgUGU9dnIoeWUpO3N3aXRjaChXbihQZVswXSkpe2Nhc2UiPGZpbGxzIjpjYXNlIjxmaWxscz4iOmNhc2UiPC9maWxscz4iOmNhc2UiPC9maWxsPiI6Y2FzZSI8L2dyYWRpZW50RmlsbD4iOmNhc2UiPGJnQ29sb3IvPiI6Y2FzZSI8L2Jn'@;
put 'Q29sb3I+IjpjYXNlIjxmZ0NvbG9yLz4iOmNhc2UiPC9mZ0NvbG9yPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8c3RvcC8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxmaWxsPiI6Y2FzZSI8ZmlsbCI6Y2Fz'@;
put 'ZSI8ZmlsbC8+IjpSLkZpbGxzLnB1c2goUT17fSk7YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsPiI6US5zdG9wcz1bXTticmVhaztjYXNlIjxncmFkaWVudEZpbGwiOlEuc3RvcHM9W10sUGUuZGVncmVlJiYoUS5hbmdsZT0rUGUuZGVncmVlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbCI6Y2Fz'@;
put 'ZSI8cGF0dGVybkZpbGw+IjpQZS5wYXR0ZXJuVHlwZSYmKFEucGF0dGVyblR5cGU9UGUucGF0dGVyblR5cGUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsLz4iOmNhc2UiPC9wYXR0ZXJuRmlsbD4iOmlmKGdlKXRocm93IG5ldyBFcnJvcigiYmFkIHN0b3AiKTticmVhaztjYXNlIjxjb2xvciI6'@;
put 'Y2FzZSI8YmdDb2xvciI6Y2FzZSI8ZmdDb2xvciI6dmFyIE5lPVduKFBlWzBdKS5zbGljZSgxKTsiY29sb3IiIT1OZSYmIVFbTmVdJiYoUVtOZV09e30pO3ZhciBZZT1nZT9hZTpRW05lXTtudWxsIT1QZS5pbmRleGVkJiYoWWUuaW5kZXg9cGFyc2VJbnQoUGUuaW5kZXhlZCwxMCksWWUucmdi'@;
put 'PWp2KFllLmluZGV4LFIuSW5kZXhlZCkpLG51bGwhPVBlLnRoZW1lJiYoWWUudGhlbWU9cGFyc2VJbnQoUGUudGhlbWUsMTApKSxudWxsIT1QZS50aW50JiYoWWUudGludD1wYXJzZUZsb2F0KFBlLnRpbnQpKSxudWxsIT1QZS5yZ2ImJihZZS5yZ2I9UGUucmdiLnNsaWNlKC02KSksbnVsbCE9'@;
put 'UGUuYXV0byYmZGVsZXRlIFFbTmVdLG51bGwhPVllLnRoZW1lJiYhWWUucmdiJiZrLnRoZW1lRWxlbWVudHMmJihZZS5yZ2I9QzUoay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtZZS50aGVtZV0ucmdiLFllLnRpbnR8fDApLEcuV1RGJiYoWWUucmF3X3JnYj1rLnRoZW1lRWxlbWVudHMuY2xy'@;
put 'U2NoZW1lW1llLnRoZW1lXS5yZ2IpKTticmVhaztjYXNlIjxzdG9wPiI6Z2U9ITAsYWU9e307YnJlYWs7Y2FzZSI8c3RvcCI6Z2U9ITAsYWU9e30sbnVsbCE9UGUucG9zaXRpb24mJihhZS52PXBhcnNlRmxvYXQoUGUucG9zaXRpb24pKTticmVhaztjYXNlIjwvc3RvcD4iOmdlPSExLFEuc3Rv'@;
put 'cHMucHVzaChhZSk7YnJlYWs7Y2FzZSI8ZXh0IjpwZT0hMDticmVhaztjYXNlIjwvZXh0PiI6cGU9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIXBlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrUGVbMF0rIiBpbiBmaWxscyIpfX0pfWZ1bmN0aW9uIEZWKFMsUixrLEcp'@;
put 'e1IuRm9udHM9W107dmFyIFE9e30sYWU9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihnZSl7dmFyIHBlPXZyKGdlKTtzd2l0Y2goV24ocGVbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+IjpicmVhaztjYXNlIjxmb250IjpjYXNl'@;
put 'Ijxmb250PiI6aWYoIi8+IiE9Z2Uuc2xpY2UoLTIpKWJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+IjpSLkZvbnRzLnB1c2goUSksUT17fTticmVhaztjYXNlIjxuYW1lIjpwZS52YWwmJihRLm5hbWU9Z2EocGUudmFsKSk7YnJlYWs7Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4i'@;
put 'OmJyZWFrO2Nhc2UiPGIiOlEuYm9sZD1wZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPGIvPiI6Y2FzZSI8Yj4iOlEuYm9sZD0xO2JyZWFrO2Nhc2UiPC9iPiI6YnJlYWs7Y2FzZSI8aSI6US5pdGFsaWM9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxpLz4iOmNhc2UiPGk+'@;
put 'IjpRLml0YWxpYz0xO2JyZWFrO2Nhc2UiPC9pPiI6YnJlYWs7Y2FzZSI8dSI6c3dpdGNoKHBlLnZhbCl7Y2FzZSJub25lIjpRLnVuZGVybGluZT0wO2JyZWFrO2Nhc2Uic2luZ2xlIjpRLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiZG91YmxlIjpRLnVuZGVybGluZT0yO2JyZWFrO2Nhc2Uic2lu'@;
put 'Z2xlQWNjb3VudGluZyI6US51bmRlcmxpbmU9MzM7YnJlYWs7Y2FzZSJkb3VibGVBY2NvdW50aW5nIjpRLnVuZGVybGluZT0zNH1icmVhaztjYXNlIjx1Lz4iOmNhc2UiPHU+IjpRLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiPC91PiI6YnJlYWs7Y2FzZSI8c3RyaWtlIjpRLnN0cmlrZT1wZS52'@;
put 'YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPHN0cmlrZS8+IjpRLnN0cmlrZT0xO2JyZWFrO2Nhc2UiPG91dGxpbmUiOlEub3V0bGluZT1wZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPG91dGxpbmUvPiI6US5vdXRsaW5lPTE7YnJlYWs7Y2FzZSI8c2hhZG93IjpRLnNoYWRvdz1w'@;
put 'ZS52YWw/dGkocGUudmFsKToxO2JyZWFrO2Nhc2UiPHNoYWRvdy8+IjpRLnNoYWRvdz0xO2JyZWFrO2Nhc2UiPGNvbmRlbnNlIjpRLmNvbmRlbnNlPXBlLnZhbD90aShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8Y29uZGVuc2UvPiI6US5jb25kZW5zZT0xO2JyZWFrO2Nhc2UiPGV4dGVuZCI6US5l'@;
put 'eHRlbmQ9cGUudmFsP3RpKHBlLnZhbCk6MTticmVhaztjYXNlIjxleHRlbmQvPiI6US5leHRlbmQ9MTticmVhaztjYXNlIjxzeiI6cGUudmFsJiYoUS5zej0rcGUudmFsKTticmVhaztjYXNlIjxzei8+IjpjYXNlIjwvc3o+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KHBlLnZh'@;
put 'bHx8Im5vbmUiKSYmKFEudmFsaWduPXBlLnZhbC5yZXBsYWNlKCJzY3JpcHQiLCIiKSk7YnJlYWs7Y2FzZSI8dmVydEFsaWduLz4iOmNhc2UiPC92ZXJ0QWxpZ24+IjpicmVhaztjYXNlIjxmYW1pbHkiOnBlLnZhbCYmKFEuZmFtaWx5PXBhcnNlSW50KHBlLnZhbCwxMCkpO2JyZWFrO2Nhc2Ui'@;
put 'PGZhbWlseS8+IjpjYXNlIjwvZmFtaWx5PiI6YnJlYWs7Y2FzZSI8c2NoZW1lIjpwZS52YWwmJihRLnNjaGVtZT1wZS52YWwpO2JyZWFrO2Nhc2UiPHNjaGVtZS8+IjpjYXNlIjwvc2NoZW1lPiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT1wZS52YWwpYnJlYWs7cGUuY29kZXBhZ2U9'@;
put 'TltwYXJzZUludChwZS52YWwsMTApXTticmVhaztjYXNlIjxjb2xvciI6US5jb2xvcnx8KFEuY29sb3I9e30pLHBlLmF1dG8mJihRLmNvbG9yLmF1dG89dGkocGUuYXV0bykpLHBlLnJnYj9RLmNvbG9yLnJnYj1wZS5yZ2Iuc2xpY2UoLTYpOnBlLmluZGV4ZWQ/KFEuY29sb3IuaW5kZXg9cGFy'@;
put 'c2VJbnQocGUuaW5kZXhlZCwxMCksUS5jb2xvci5yZ2I9anYoUS5jb2xvci5pbmRleCxSLkluZGV4ZWQpKTpwZS50aGVtZSYmKFEuY29sb3IudGhlbWU9cGFyc2VJbnQocGUudGhlbWUsMTApLHBlLnRpbnQmJihRLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdChwZS50aW50KSkscGUudGhlbWUmJmsu'@;
put 'dGhlbWVFbGVtZW50cyYmay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKFEuY29sb3IucmdiPUM1KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbUS5jb2xvci50aGVtZV0ucmdiLFEuY29sb3IudGludHx8MCkpKTticmVhaztjYXNlIjxjb2xvci8+IjpjYXNlIjwvY29sb3I+IjpicmVhaztj'@;
put 'YXNlIjxBbHRlcm5hdGVDb250ZW50IjphZT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOmFlPSExO2JyZWFrO2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6YWU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmFlPSEx'@;
put 'O2JyZWFrO2RlZmF1bHQ6aWYoRyYmRy5XVEYmJiFhZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3BlWzBdKyIgaW4gZm9udHMiKX19KX12YXIgVDU9ezA6Im5vbmUiLDE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlQWNjb3VudGluZyIsMzQ6ImRvdWJsZUFjY291bnRp'@;
put 'bmcifSxaMz1bIm51bUZtdElkIiwiZmlsbElkIiwiZm9udElkIiwiYm9yZGVySWQiLCJ4ZklkIl0sVzM9WyJhcHBseUFsaWdubWVudCIsImFwcGx5Qm9yZGVyIiwiYXBwbHlGaWxsIiwiYXBwbHlGb250IiwiYXBwbHlOdW1iZXJGb3JtYXQiLCJhcHBseVByb3RlY3Rpb24iLCJwaXZvdEJ1dHRv'@;
put 'biIsInF1b3RlUHJlZml4Il0sTDQ9ZnVuY3Rpb24oKXt2YXIgUz0vPCg/Olx3KzopP2ZvbnQoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udD4vLFI9LzwoPzpcdys6KT9udW1GbXQoW14+XSopXC8+LyxrPS88KD86XHcrOik/ZmlsbChbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9m'@;
put 'aWxsPi8sUT0vPCg/Olx3KzopP2JvcmRlcihbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9ib3JkZXI+LztyZXR1cm4gZnVuY3Rpb24ocGUseWUsUGUsTmUpe3ZhciBjdCxFdCxZZT17fSxldD17fTtyZXR1cm4oY3Q9cGUubWF0Y2goUykpJiYoRlYoY3QsWWUsUGUsTmUpLChZZS5Gb250c3x8'@;
put 'W10pWzBdJiZQdChldCxZZS5Gb250c1swXSkpLChjdD1wZS5tYXRjaChSKSkmJihFdD12cihnYShjdFswXSkpLGV0Lno9RXQuZm9ybWF0Q29kZT9RcihFdC5mb3JtYXRDb2RlKTooeWUuTnVtYmVyRm10fHxbXSlbK0V0Lm51bUZtdElkXXx8IkdlbmVyYWwiKSwoY3Q9cGUubWF0Y2goaykpJiYo'@;
put 'UFYoY3QsWWUsUGUsTmUpLChZZS5GaWxsc3x8W10pWzBdJiZQdChldCxZZS5GaWxsc1swXSkpLChjdD1wZS5tYXRjaChRKSkmJih3QyhjdCxZZSxQZSxOZSksKFllLkJvcmRlcnN8fFtdKVswXSYmUHQoZXQsWWUuQm9yZGVyc1swXSkpLGV0fX0oKSxKaT0vPCg/Olx3KzopP2R4Zj5bXFNcc10q'@;
put 'PzxcLyg/Olx3KzopP2R4Zj4vZyxYcj0vPCg/Olx3KzopP3RhYmxlU3R5bGVcYi4qPz5bXFNcc10qPzxcLyg/Olx3KzopP3RhYmxlU3R5bGU+L2c7dmFyIGJrPWZ1bmN0aW9uKCl7dmFyIFI9LzwoPzpcdys6KT9udW1GbXRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP251bUZtdHM+Lyxr'@;
put 'PS88KD86XHcrOik/Y2VsbFN0eWxlWGZzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxTdHlsZVhmcz4vLEc9LzwoPzpcdys6KT9jZWxsU3R5bGVzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2NlbGxTdHlsZXM+LyxRPS88KD86XHcrOik/Y2VsbFhmcyhbXj5dKik+W1xTXHNd'@;
put 'Kj88XC8oPzpcdys6KT9jZWxsWGZzPi8sYWU9LzwoPzpcdys6KT9maWxscyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxscz4vLGdlPS88KD86XHcrOik/Zm9udHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udHM+LyxwZT0vPCg/Olx3KzopP2JvcmRlcnMoW14+XSopPltc'@;
put 'U1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vLHllPS88KD86XHcrOik/aW5kZXhlZENvbG9ycyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9pbmRleGVkQ29sb3JzPi8sUGU9LzwoPzpcdys6KT90YWJsZVN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlcz4v'@;
put 'LE5lPS88KD86XHcrOik/ZHhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9keGZzPi87cmV0dXJuIGZ1bmN0aW9uKGV0LGN0LEV0KXt2YXIgYnQsb3Q9e307cmV0dXJuIGV0PygoYnQ9KGV0PWV0LnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZ'@;
put 'UEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIikpLm1hdGNoKHllKSkmJmZ1bmN0aW9uIEhWKFMsUixrKXtSLkluZGV4ZWR8fChSLkluZGV4ZWQ9W10pO3ZhciBHPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIGFlPXZyKFEpO3N3aXRjaChXbihhZVswXSkp'@;
put 'e2Nhc2UiPGluZGV4ZWRDb2xvcnM+IjpjYXNlIjxpbmRleGVkQ29sb3JzIjpjYXNlIjxpbmRleGVkQ29sb3JzLz4iOmNhc2UiPC9pbmRleGVkQ29sb3JzPiI6Y2FzZSI8L3JnYkNvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8'@;
put 'cmdiQ29sb3IiOmRlbGV0ZSBhZVswXTt2YXIgZ2U9cGFyc2VJbnQoYWUucmdiLnNsaWNlKC02KSwxNik7Ui5JbmRleGVkLnB1c2goW2dlPj4xNiYyNTUsZ2U+PjgmMjU1LDI1NSZnZV0pO2JyZWFrO2Nhc2UiPGV4dCI6Rz0hMDticmVhaztjYXNlIjwvZXh0PiI6Rz0hMTticmVhaztkZWZhdWx0'@;
put 'OmlmKGsmJmsuV1RGJiYhRyl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2FlWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShidCxvdCxFdCksKGJ0PWV0Lm1hdGNoKFIpKSYmZnVuY3Rpb24gZ2soUyxSLGspe1IuTnVtYmVyRm10PVtdO2Zvcih2YXIgRz1SZShBLl90YWJsZSksUT0w'@;
put 'O1E8Ry5sZW5ndGg7KytRKVIuTnVtYmVyRm10W0dbUV1dPUEuX3RhYmxlW0dbUV1dO3ZhciBhZT1TWzBdLm1hdGNoKGVuKTtpZihhZSlmb3IoUT0wO1E8YWUubGVuZ3RoOysrUSl7dmFyIGdlPXZyKGFlW1FdKTtzd2l0Y2goV24oZ2VbMF0pKXtjYXNlIjxudW1GbXRzIjpjYXNlIjwvbnVtRm10'@;
put 'cz4iOmNhc2UiPG51bUZtdHMvPiI6Y2FzZSI8bnVtRm10cz4iOmNhc2UiPC9udW1GbXQ+IjpicmVhaztjYXNlIjxudW1GbXQiOnZhciBwZT1RcihnYShnZS5mb3JtYXRDb2RlKSkseWU9cGFyc2VJbnQoZ2UubnVtRm10SWQsMTApO2lmKFIuTnVtYmVyRm10W3llXT1wZSx5ZT4wKXtpZih5ZT4z'@;
put 'OTIpe2Zvcih5ZT0zOTI7eWU+NjAmJm51bGwhPVIuTnVtYmVyRm10W3llXTstLXllKTtSLk51bWJlckZtdFt5ZV09cGV9QS5sb2FkKHBlLHllKX1icmVhaztkZWZhdWx0OmlmKGsuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZ2VbMF0rIiBpbiBudW1GbXRzIil9fX0oYnQs'@;
put 'b3QsRXQpLChidD1ldC5tYXRjaChnZSkpJiZGVihidCxvdCxjdCxFdCksKGJ0PWV0Lm1hdGNoKGFlKSkmJlBWKGJ0LG90LGN0LEV0KSwoYnQ9ZXQubWF0Y2gocGUpKSYmd0MoYnQsb3QsY3QsRXQpLChidD1ldC5tYXRjaChrKSkmJmZ1bmN0aW9uIHRuZShTLFIsayl7Ui5DZWxsU3R5bGVYZj1b'@;
put 'XTt2YXIgRyxRPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oYWUpe3ZhciBnZT12cihhZSkscGU9MDtzd2l0Y2goV24oZ2VbMF0pKXtjYXNlIjxjZWxsU3R5bGVYZnMiOmNhc2UiPGNlbGxTdHlsZVhmcz4iOmNhc2UiPGNlbGxTdHlsZVhmcy8+IjpjYXNlIjwvY2Vs'@;
put 'bFN0eWxlWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0'@;
put 'ZShHPWdlKVswXSxwZT0wO3BlPFozLmxlbmd0aDsrK3BlKUdbWjNbcGVdXSYmKEdbWjNbcGVdXT1wYXJzZUludChHW1ozW3BlXV0sMTApKTtmb3IocGU9MDtwZTxXMy5sZW5ndGg7KytwZSlHW1czW3BlXV0mJihHW1czW3BlXV09dGkoR1tXM1twZV1dKSk7aWYoUi5OdW1iZXJGbXQmJkcubnVt'@;
put 'Rm10SWQ+MzkyKWZvcihwZT0zOTI7cGU+NjA7LS1wZSlpZihSLk51bWJlckZtdFtHLm51bUZtdElkXT09Ui5OdW1iZXJGbXRbcGVdKXtHLm51bUZtdElkPXBlO2JyZWFrfVIuQ2VsbFN0eWxlWGYucHVzaChHKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIg'@;
put 'eWU9e307Z2UudmVydGljYWwmJih5ZS52ZXJ0aWNhbD1nZS52ZXJ0aWNhbCksZ2UuaG9yaXpvbnRhbCYmKHllLmhvcml6b250YWw9Z2UuaG9yaXpvbnRhbCksbnVsbCE9Z2UudGV4dFJvdGF0aW9uJiYoeWUudGV4dFJvdGF0aW9uPWdlLnRleHRSb3RhdGlvbiksZ2UuaW5kZW50JiYoeWUuaW5k'@;
put 'ZW50PWdlLmluZGVudCksZ2Uud3JhcFRleHQmJih5ZS53cmFwVGV4dD1nZS53cmFwVGV4dCksZ2Uuc2hyaW5rVG9GaXQmJih5ZS5zaHJpbmtUb0ZpdD10aShnZS5zaHJpbmtUb0ZpdCkpLEcuYWxpZ25tZW50PXllO2JyZWFrO2Nhc2UiPHByb3RlY3Rpb24iOkcucHJvdGVjdGlvbj17fSx0aShn'@;
put 'ZS5oaWRkZW4pJiYoRy5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9Z2UubG9ja2VkJiYoRy5wcm90ZWN0aW9uLmVkaXRhYmxlPSF0aShnZS5sb2NrZWQpKTticmVhaztjYXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYm'@;
put 'IVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitnZVswXSsiIGluIGNlbGxTdHlsZVhmcyIpfX0pfShidCxvdCxFdCksKGJ0PWV0Lm1hdGNoKEcpKSYmZnVuY3Rpb24gcm5lKFMsUixrKXtSLkNlbGxTdHlsZVhmfHwoUi5DZWxsU3R5bGVYZj1bXSk7dmFyIEc9ITE7KFNbMF0ubWF0'@;
put 'Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgYWU9dnIoUSk7c3dpdGNoKFduKGFlWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlcyI6Y2FzZSI8Y2VsbFN0eWxlcz4iOmNhc2UiPGNlbGxTdHlsZXMvPiI6Y2FzZSI8L2NlbGxTdHlsZXM+IjpjYXNlIjwveGY+IjpjYXNlIjwvY2VsbFN0'@;
put 'eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Y2VsbFN0eWxlIjpjYXNlIjxjZWxsU3R5bGUvPiI6ZGVsZXRlIGFlWzBdO3ZhciBnZT0rYWUueGZJZDtpZihSLkNlbGxTdHlsZVhmW2dlXSlSLkNlbGxTdHlsZVhmW2dlXS5zdHls'@;
put 'ZT1nYShhZS5uYW1lKTtlbHNlIGlmKCFhZS5idWlsdGluSWQpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBDZWxsU3R5bGUgIitnZSk7YnJlYWs7Y2FzZSI8ZXh0IjpHPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpHPSExO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYmJiFHKXRocm93'@;
put 'IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrYWVbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KGJ0LG90LEV0KSwoYnQ9ZXQubWF0Y2goUSkpJiZmdW5jdGlvbiBtayhTLFIsayl7Ui5DZWxsWGY9W107dmFyIEcsUT0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGFl'@;
put 'KXt2YXIgZ2U9dnIoYWUpLHBlPTA7c3dpdGNoKFduKGdlWzBdKSl7Y2FzZSI8Y2VsbFhmcyI6Y2FzZSI8Y2VsbFhmcz4iOmNhc2UiPGNlbGxYZnMvPiI6Y2FzZSI8L2NlbGxYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxpZ25tZW50PiI6Y2FzZSI8L3Byb3RlY3Rpb24+IjpjYXNlIjxwcm90'@;
put 'ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRlKEc9Z2UpWzBdLHBlPTA7cGU8WjMubGVuZ3RoOysrcGUpR1taM1twZV1dJiYoR1taM1twZV1dPXBhcnNlSW50KEdbWjNbcGVd'@;
put 'XSwxMCkpO2ZvcihwZT0wO3BlPFczLmxlbmd0aDsrK3BlKUdbVzNbcGVdXSYmKEdbVzNbcGVdXT10aShHW1czW3BlXV0pKTtpZihSLk51bWJlckZtdCYmRy5udW1GbXRJZD4zOTIpZm9yKHBlPTM5MjtwZT42MDstLXBlKWlmKFIuTnVtYmVyRm10W0cubnVtRm10SWRdPT1SLk51bWJlckZtdFtw'@;
put 'ZV0pe0cubnVtRm10SWQ9cGU7YnJlYWt9Ui5DZWxsU3R5bGVYZiYmRy54ZklkJiZSLkNlbGxTdHlsZVhmW0cueGZJZF0mJlIuQ2VsbFN0eWxlWGZbRy54ZklkXS5zdHlsZSYmKEcuc3R5bGU9Ui5DZWxsU3R5bGVYZltHLnhmSWRdLnN0eWxlKSxSLkNlbGxYZi5wdXNoKEcpO2JyZWFrO2Nhc2Ui'@;
put 'PGFsaWdubWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciB5ZT17fTtnZS52ZXJ0aWNhbCYmKHllLnZlcnRpY2FsPWdlLnZlcnRpY2FsKSxnZS5ob3Jpem9udGFsJiYoeWUuaG9yaXpvbnRhbD1nZS5ob3Jpem9udGFsKSxudWxsIT1nZS50ZXh0Um90YXRpb24mJih5ZS50ZXh0Um90YXRpb249'@;
put 'Z2UudGV4dFJvdGF0aW9uKSxnZS5pbmRlbnQmJih5ZS5pbmRlbnQ9Z2UuaW5kZW50KSxnZS53cmFwVGV4dCYmKHllLndyYXBUZXh0PXRpKGdlLndyYXBUZXh0KSksZ2Uuc2hyaW5rVG9GaXQmJih5ZS5zaHJpbmtUb0ZpdD10aShnZS5zaHJpbmtUb0ZpdCkpLEcuYWxpZ25tZW50PXllO2JyZWFr'@;
put 'O2Nhc2UiPHByb3RlY3Rpb24iOkcucHJvdGVjdGlvbj17fSx0aShnZS5oaWRkZW4pJiYoRy5wcm90ZWN0aW9uLmhpZGRlbj0hMCksbnVsbCE9Z2UubG9ja2VkJiYoRy5wcm90ZWN0aW9uLmVkaXRhYmxlPSF0aShnZS5sb2NrZWQpKTticmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpjYXNl'@;
put 'IjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpjYXNlIjwvZXh0PiI6UT0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYhUSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2dlWzBdKyIgaW4gY2VsbFhmcyIpfX0pfShidCxvdCxFdCksKGJ0PWV0'@;
put 'Lm1hdGNoKE5lKSkmJmZ1bmN0aW9uIHZrKFMsUixrLEcpe1IuRFhGfHwoUi5EWEY9W10pLChTWzBdLm1hdGNoKEppKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7Ui5EWEYucHVzaChMNChRLFIsayxHKSl9KX0oYnQsb3QsY3QsRXQpLChidD1ldC5tYXRjaChQZSkpJiZmdW5jdGlvbiBWVihT'@;
put 'LFIsayxHKXtSLlRhYmxlfHwoUi5UYWJsZT1bXSksKFNbMF0ubWF0Y2goWHIpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXtSLlRhYmxlLnB1c2goZnVuY3Rpb24gTlYoUyxSLGssRyl7dmFyIFE9ITEsYWU9e307cmV0dXJuKFMubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihnZSl7'@;
put 'dmFyIHBlPXZyKGdlKTtzd2l0Y2goV24ocGVbMF0pKXtjYXNlIjx0YWJsZVN0eWxlPiI6Y2FzZSI8dGFibGVTdHlsZSI6YWUubmFtZT1wZS5uYW1lLnJlcGxhY2UoL14oVGFibGV8UGl2b3QpU3R5bGUvLCIiKSxhZS5yYXduYW1lPXBlLm5hbWUsYWUucGl2b3Q9IXBlLnBpdm90fHx0aShwZS5w'@;
put 'aXZvdCksYWUudGFibGU9IXBlLnRhYmxlfHx0aShwZS50YWJsZSk7YnJlYWs7Y2FzZSI8dGFibGVTdHlsZS8+IjpjYXNlIjwvdGFibGVTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHRhYmxlU3R5bGVFbGVtZW50IjppZihw'@;
put 'ZS50eXBlJiZwZS5keGZJZCl7aWYoIVIuRFhGfHwhUi5EWEZbK3BlLmR4ZklkXSl0aHJvdyBuZXcgRXJyb3IoZ2UrIiBjYW5ub3QgZmluZCBEWEYiKTthZVtwZS50eXBlXT1SLkRYRlsrcGUuZHhmSWRdfWJyZWFrO2Nhc2UiPGV4dCI6UT0hMDticmVhaztjYXNlIjwvZXh0PiI6UT0hMTticmVh'@;
put 'aztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhUSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3BlWzBdKyIgaW4gdGFibGVTdHlsZSIpfX0pLGFlfShRLFIsMCxHKSl9KX0oYnQsb3QsMCxFdCksKG90LkZvbnRzfHxbXSlbMF0mJkk0KG90LkZvbnRzWzBdKSxvdCk6b3R9fSgpLHlrPVBy'@;
put 'KCJzdHlsZVNoZWV0IixudWxsLHt4bWxuczpZaS5tYWluWzBdLCJ4bWxuczp2dCI6WWkudnR9KTtmdW5jdGlvbiB6dihTLFIpe3ZhciBHLGs9W0lpLHlrXTtTLlNTRiYmbnVsbCE9KEc9ZnVuY3Rpb24gQTUoUyl7dmFyIFI9WyI8bnVtRm10cz4iXTtyZXR1cm5bWzUsOF0sWzIzLDI2XSxbNDEs'@;
put 'NDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9uKGspe2Zvcih2YXIgRz1rWzBdO0c8PWtbMV07KytHKW51bGwhPVNbR10mJihSW1IubGVuZ3RoXT1QcigibnVtRm10IixudWxsLHtudW1GbXRJZDpHLGZvcm1hdENvZGU6THIoU1tHXSl9KSl9KSwxPT09Ui5sZW5ndGg/IiI6KFJbUi5sZW5n'@;
put 'dGhdPSI8L251bUZtdHM+IixSWzBdPVByKCJudW1GbXRzIixudWxsLHtjb3VudDpSLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksUi5qb2luKCIiKSl9KFMuU1NGKSkmJihrW2subGVuZ3RoXT1HKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBnMihTKXt2YXIgUj1bXTtyZXR1cm4gUy5mb3JF'@;
put 'YWNoKGZ1bmN0aW9uKGspe3ZhciBHPVsiPGZvbnQ+Il07ay5ib2xkJiZHLnB1c2goIjxiLz4iKSxrLml0YWxpYyYmRy5wdXNoKCI8aS8+Iiksay5zdHJpa2UmJkcucHVzaCgiPHN0cmlrZS8+Iiksay5zaGFkb3cmJkcucHVzaCgiPHNoYWRvdy8+IiksVDVbK2sudW5kZXJsaW5lXSYmRy5wdXNo'@;
put 'KCc8dSB2YWw9IicrVDVbK2sudW5kZXJsaW5lXSsnIi8+Jyksay5zeiYmRy5wdXNoKCc8c3ogdmFsPSInK2suc3orJyIvPicpLGsuY29sb3ImJkcucHVzaChtZChrLmNvbG9yLCEwKSksay5uYW1lJiZHLnB1c2goJzxuYW1lIHZhbD0iJytrLm5hbWUrJyIvPicpLGsuZmFtaWx5JiZHLnB1c2go'@;
put 'JzxmYW1pbHkgdmFsPSInK2suZmFtaWx5KyciLz4nKSxrLnNjaGVtZSYmRy5wdXNoKCc8c2NoZW1lIHZhbD0iJytrLnNjaGVtZSsnIi8+Jyksay52YWxpZ24mJkcucHVzaCgnPHZlcnRBbGlnbiB2YWw9Iicray52YWxpZ24rKCJzdWIiPT1rLnZhbGlnbnx8InN1cGVyIj09ay52YWxpZ24/InNj'@;
put 'cmlwdCI6IiIpKyciLz4nKSxSLnB1c2goRy5qb2luKCIiKSsiPC9mb250PiIpfSksJzxmb250cyBjb3VudD0iJytSLmxlbmd0aCsnIj4nK1Iuam9pbigiIikrIjwvZm9udHM+In0oKFMuU3R5bGVzfHx7fSkuRm9udHN8fFtdKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBwayhTKXt2YXIgUj1bXTty'@;
put 'ZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPW51bGw7aWYoay5zdG9wcyYmay5zdG9wcy5sZW5ndGgpe3ZhciBRPXt9O2suYW5nbGUmJihRLmRlZ3JlZT1NYXRoLnJvdW5kKGsuYW5nbGUpKSxHPWsuc3RvcHMubWFwKGZ1bmN0aW9uKGFlKXtyZXR1cm4gUHIoInN0b3AiLG1kKGFl'@;
put 'LCJjb2xvciIsITApLG51bGwhPWFlLnY/e3Bvc2l0aW9uOmFlLnZ9Ont9KX0pLFIucHVzaCgiPGZpbGw+IitQcigiZ3JhZGllbnRGaWxsIixHLmpvaW4oIiIpLFEpKyI8L2ZpbGw+Iil9ZWxzZXtpZihrLmZnQ29sb3Ipe2lmKEc9KEd8fCIiKSsiPGZnQ29sb3IgIixrLmZnQ29sb3IudGhlbWUp'@;
put 'Rys9J3RoZW1lPSInK2suZmdDb2xvci50aGVtZSsnIicrKGsuZmdDb2xvci50aW50PycgdGludD0iJytrLmZnQ29sb3IudGludCsnIic6IiIpKyIvPiI7ZWxzZSBpZihudWxsIT1rLmZnQ29sb3IuaW5kZXgmJm51bGw9PWsuZmdDb2xvci5yZ2IpRys9J2luZGV4ZWQ9Iicray5mZ0NvbG9yLmlu'@;
put 'ZGV4KyciLz4nO2Vsc2UgaWYoay5mZ0NvbG9yLmF1dG8pRys9J2F1dG89IjEiLz4nO2Vsc2V7aWYobnVsbD09ay5mZ0NvbG9yLnJnYil0aHJvdyBuZXcgRXJyb3IoIkJhZCBjb2xvciAiK1JlKGsuZmdDb2xvcikuam9pbigifCIpKTtHKz0ncmdiPSJGRicrTzAoay5mZ0NvbG9yLnJnYikrJyIv'@;
put 'Pid9InNvbGlkIj09ay5wYXR0ZXJuVHlwZSYmIWsuYmdDb2xvciYmKGsuYmdDb2xvcj17aW5kZXg6NjR9KX1pZihrLmJnQ29sb3IpaWYoRz0oR3x8IiIpKyI8YmdDb2xvciAiLGsuYmdDb2xvci50aGVtZSlHKz0ndGhlbWU9Iicray5iZ0NvbG9yLnRoZW1lKyciLz4nO2Vsc2UgaWYobnVsbCE9'@;
put 'ay5iZ0NvbG9yLmluZGV4JiZudWxsPT1rLmJnQ29sb3IucmdiKUcrPSdpbmRleGVkPSInK2suYmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKGsuYmdDb2xvci5hdXRvKUcrPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PWsuYmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29s'@;
put 'b3IgIitSZShrLmJnQ29sb3IpLmpvaW4oInwiKSk7Rys9J3JnYj0iRkYnK08wKGsuYmdDb2xvci5yZ2IpKyciLz4nfVIucHVzaCgiPGZpbGw+IitQcigicGF0dGVybkZpbGwiLEcse3BhdHRlcm5UeXBlOmsucGF0dGVyblR5cGV9KSsiPC9maWxsPiIpfX0pLCc8ZmlsbHMgY291bnQ9IicrUi5s'@;
put 'ZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2ZpbGxzPiJ9KChTLlN0eWxlc3x8e30pLkZpbGxzfHxbXSksa1trLmxlbmd0aF09ZnVuY3Rpb24gRHMoUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1bXTtHLnB1c2goUjQoay5sZWZ0LCJsZWZ0IikpLEcucHVz'@;
put 'aChSNChrLnJpZ2h0LCJyaWdodCIpKSxHLnB1c2goUjQoay50b3AsInRvcCIpKSxHLnB1c2goUjQoay5ib3R0b20sImJvdHRvbSIpKSxHLnB1c2goUjQoay5kaWFnb25hbCwiZGlhZ29uYWwiKSksUi5wdXNoKCI8Ym9yZGVyPiIrRy5qb2luKCIiKSsiPC9ib3JkZXI+Iil9KSwnPGJvcmRlcnMg'@;
put 'Y291bnQ9IicrUi5sZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2JvcmRlcnM+In0oKFMuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGtbay5sZW5ndGhdPWZ1bmN0aW9uIG5uZShTKXt2YXIgUj1bJzx4ZiBudW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIi8+'@;
put 'J107aWYoUylmb3IodmFyIGs9MTtrPFMubGVuZ3RoOysraylSLnB1c2goUHIoInhmIixudWxsLHtudW1GbXRJZDpTW2tdLm51bUZtdElkfHwwLGZvbnRJZDpTW2tdLmZvbnRJZHx8MCxmaWxsSWQ6U1trXS5maWxsSWR8fDAsYm9yZGVySWQ6U1trXS5ib3JkZXJJZHx8MH0pKTtyZXR1cm4nPGNl'@;
put 'bGxTdHlsZVhmcyBjb3VudD0iJytSLmxlbmd0aCsnIj4nK1Iuam9pbigiIikrIjwvY2VsbFN0eWxlWGZzPiJ9KFIuY2VsbFN0eWxlWGZzKSwoRz1mdW5jdGlvbiBlbmUoUyl7dmFyIFI9W107cmV0dXJuIFJbUi5sZW5ndGhdPVByKCJjZWxsWGZzIixudWxsKSxTLmZvckVhY2goZnVuY3Rpb24o'@;
put 'ayl7dmFyIEc9ay5hbGlnbm1lbnQ7ZGVsZXRlIGsuYWxpZ25tZW50O3ZhciBRPWsucHJvdGVjdGlvbjtkZWxldGUgay5wcm90ZWN0aW9uO3ZhciBhZT1HP1ByKCJhbGlnbm1lbnQiLG51bGwsRyk6IiI7YWUrPVE/UHIoInByb3RlY3Rpb24iLG51bGwse2hpZGRlbjpRLmhpZGRlbj8xOjAsbG9j'@;
put 'a2VkOlEuZWRpdGFibGU/MDoxfSk6IiIsUltSLmxlbmd0aF09UHIoInhmIixhZXx8bnVsbCxrKSxHJiYoay5hbGlnbm1lbnQ9RyksUSYmKGsucHJvdGVjdGlvbj1RKX0pLFJbUi5sZW5ndGhdPSI8L2NlbGxYZnM+IiwyPT09Ui5sZW5ndGg/IiI6KFJbMF09UHIoImNlbGxYZnMiLG51bGwse2Nv'@;
put 'dW50OlIubGVuZ3RoLTJ9KS5yZXBsYWNlKCIvPiIsIj4iKSxSLmpvaW4oIiIpKX0oUi5jZWxsWGZzKSkmJihrW2subGVuZ3RoXT1HKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBpbmUoUyl7dmFyIFI9Wyc8Y2VsbFN0eWxlIG5hbWU9Ik5vcm1hbCIgeGZJZD0iMCIgYnVpbHRpbklkPSIwIi8+J107'@;
put 'aWYoUylmb3IodmFyIGs9MTtrPFMubGVuZ3RoOysraylSLnB1c2goUHIoImNlbGxTdHlsZSIsbnVsbCx7bmFtZTpTW2tdLm5hbWUseGZJZDprfSkpO3JldHVybic8Y2VsbFN0eWxlcyBjb3VudD0iJytSLmxlbmd0aCsnIj4nK1Iuam9pbigiIikrIjwvY2VsbFN0eWxlcz4ifShSLmNlbGxTdHls'@;
put 'ZVhmcyksUy5TdHlsZXMuRFhGfHwoUy5TdHlsZXMuRFhGPVtdKTt2YXIgUT1mdW5jdGlvbiBwZChTLFIsayl7dmFyIEc9Wyc8dGFibGVTdHlsZXMgY291bnQ9IicrKFN8fFtdKS5sZW5ndGgrJyIgZGVmYXVsdFRhYmxlU3R5bGU9IlRhYmxlU3R5bGVNZWRpdW05IiBkZWZhdWx0UGl2b3RTdHls'@;
put 'ZT0iUGl2b3RTdHlsZU1lZGl1bTQiJ107cmV0dXJuIFMmJlMubGVuZ3RoPyhHWzBdKz0iPiIsUy5mb3JFYWNoKGZ1bmN0aW9uKFEpe0cucHVzaChmdW5jdGlvbiBDQyhTLFIsayl7dmFyIEc9W107WyJ3aG9sZVRhYmxlIiwiaGVhZGVyUm93IiwidG90YWxSb3ciLCJmaXJzdENvbHVtbiIsImxh'@;
put 'c3RDb2x1bW4iLCJmaXJzdFJvd1N0cmlwZSIsInNlY29uZFJvd1N0cmlwZSIsImZpcnN0Q29sdW1uU3RyaXBlIiwic2Vjb25kQ29sdW1uU3RyaXBlIiwiZmlyc3RIZWFkZXJDZWxsIiwibGFzdEhlYWRlckNlbGwiLCJmaXJzdFRvdGFsQ2VsbCIsImxhc3RUb3RhbENlbGwiLCJmaXJzdFN1YnRv'@;
put 'dGFsQ29sdW1uIiwic2Vjb25kU3VidG90YWxDb2x1bW4iLCJ0aGlyZFN1YnRvdGFsQ29sdW1uIiwiZmlyc3RTdWJ0b3RhbFJvdyIsInNlY29uZFN1YnRvdGFsUm93IiwidGhpcmRTdWJ0b3RhbFJvdyIsImJsYW5rUm93IiwiZmlyc3RDb2x1bW5TdWJoZWFkaW5nIiwic2Vjb25kQ29sdW1uU3Vi'@;
put 'aGVhZGluZyIsInRoaXJkQ29sdW1uU3ViaGVhZGluZyIsImZpcnN0Um93U3ViaGVhZGluZyIsInNlY29uZFJvd1N1YmhlYWRpbmciLCJ0aGlyZFJvd1N1YmhlYWRpbmciLCJwYWdlRmllbGRMYWJlbHMiLCJwYWdlRmllbGRWYWx1ZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGFlKXtpZihTW2FlXSl7'@;
put 'dmFyIGdlPWxTKFIsU1thZV0pO0cucHVzaCgnPHRhYmxlU3R5bGVFbGVtZW50IGR4ZklkPSInK2dlKyciIHR5cGU9IicrYWUrJyIvPicpfX0pO3ZhciBRPSc8dGFibGVTdHlsZSBjb3VudD0iJytHLmxlbmd0aCsnIiBwaXZvdD0iJysgKyEhUy5waXZvdCsnIiBuYW1lPSInK1MubmFtZSsnIic7'@;
put 'cmV0dXJuIEcubGVuZ3RoP1ErIj4iK0cuam9pbigiIikrIjwvdGFibGVTdHlsZT4iOlErIi8+In0oUSxSKSl9KSxHLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGVzPiIpOkdbMF0rIi8+In0oKFMuU3R5bGVzfHx7fSkuVGFibGV8fFtdLFMuU3R5bGVzLkRYRik7cmV0dXJuIGtbay5sZW5ndGhdPWZ1'@;
put 'bmN0aW9uIEJWKFMsUil7aWYoIVMubGVuZ3RoKXJldHVybic8ZHhmcyBjb3VudD0iMCIvPic7dmFyIGs9Wyc8ZHhmcyBjb3VudD0iJytTLmxlbmd0aCsnIj4nXTtyZXR1cm4gUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe2sucHVzaChmdW5jdGlvbiBRNihTLFIpe3ZhciBrPXtib2xkOiJiIixpdGFs'@;
put 'aWM6ImkiLHZhbGlnbjoidmVydEFsaWduIn0sRz1bIjxkeGY+Il0sUT1bXSxhZT1bXSxnZT1bXSx5ZT1bXTtyZXR1cm4gUmUoUykuZm9yRWFjaChmdW5jdGlvbihOZSl7c3dpdGNoKE5lKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJ1bmRlcmxpbmUiOmNhc2Ui'@;
put 'Y29sb3IiOmNhc2UidmFsaWduIjpjYXNlInN6IjpjYXNlIm5hbWUiOmNhc2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2UiY2hhcnNldCI6Y2FzZSJmYW1pbHkiOmNhc2UiY29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpjYXNlInNjaGVtZSI6US5wdXNoKE5lKTticmVhaztjYXNlImJnQ29sb3Ii'@;
put 'OmNhc2UiZmdDb2xvciI6Z2UucHVzaChOZSk7YnJlYWs7Y2FzZSJ6IjphZS5wdXNoKE5lKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmNhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJkaWFnb25hbCI6Y2FzZSJ2ZXJ0aWNhbCI6Y2FzZSJob3Jpem9udGFsIjp5ZS5wdXNoKE5lKTti'@;
put 'cmVhaztjYXNlInBhdHRlcm5UeXBlIjpjYXNlImRpYWdvbmFsRG93biI6Y2FzZSJkaWFnb25hbFVwIjpjYXNlInN0b3BzIjpjYXNlImRlZ3JlZSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgIitOZSsiIGluIERYRiJ9fSksUS5sZW5ndGg+MCYmKEcucHVzaCgiPGZvbnQ+Iiks'@;
put 'US5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtzd2l0Y2goTmUpe2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6Ry5wdXNoKCI8Iisoa1tOZV18fE5lKSsnIHZhbD0iJysoU1tOZV0/'@;
put 'IjEiOiIwIikrJyIvPicpO2JyZWFrO2Nhc2UiY29sb3IiOkcucHVzaChtZChTW05lXSxOZSwhMCkpO2JyZWFrO2Nhc2UiZmFtaWx5IjpjYXNlIm5hbWUiOmNhc2Uic3oiOmNhc2Uic2NoZW1lIjpHLnB1c2goIjwiKyhrW05lXXx8TmUpKycgdmFsPSInK1NbTmVdKyciLz4nKTticmVhaztjYXNl'@;
put 'InVuZGVybGluZSI6Ry5wdXNoKCc8dSB2YWw9IicrVDVbU1tOZV18fDBdKyciLz4nKTticmVhaztjYXNlInZhbGlnbiI6Ry5wdXNoKCc8dmVydEFsaWduIHZhbD0iJytTLnZhbGlnbisoInN1YiI9PVMudmFsaWdufHwic3VwZXIiPT1TLnZhbGlnbj8ic2NyaXB0IjoiIikrJyIvPicpO2JyZWFr'@;
put 'O2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitOZSsiIDogZm9udCBEWEYifX0pLEcucHVzaCgiPC9mb250PiIpKSxhZS5sZW5ndGg+MCYmRy5wdXNoKCc8bnVtRm10IGZvcm1hdENvZGU9IicrTHIoUy56KSsnIiBudW1GbXRJZD0iJytmdW5jdGlvbiBzUyhTLFIpe2lmKCJudW1iZXIiPT10'@;
put 'eXBlb2YgUylyZXR1cm4gUzt2YXIgaz1SLnJldnNzZltTPz8iR2VuZXJhbCJdLEc9NjA7aWYobnVsbD09aylmb3IoO0c8MzkyOysrRylpZihudWxsPT1SLnNzZltHXSlyZXR1cm4gQS5sb2FkKFMsRyksUi5zc2ZbR109UyxSLnJldnNzZltTXT1HLEc7cmV0dXJuIGt9KFMueixSKSsnIi8+Jyks'@;
put 'Z2UubGVuZ3RoPjAmJihHLnB1c2goIjxmaWxsPiIpLEcucHVzaCgiPHBhdHRlcm5GaWxsIisoUy5wYXR0ZXJuVHlwZT8nIHBhdHRlcm5UeXBlPSInK1MucGF0dGVyblR5cGUrJyI+JzoiPiIpKSxnZS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXtzd2l0Y2goTmUpe2Nhc2UicGF0dGVyblR5cGUiOmJy'@;
put 'ZWFrO2Nhc2UiZmdDb2xvciI6Y2FzZSJiZ0NvbG9yIjpHLnB1c2gobWQoU1tOZV0sTmUsITApKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrTmUrIiA6IGZpbGwgRFhGIn19KSxHLnB1c2goIjwvcGF0dGVybkZpbGw+IiksRy5wdXNoKCI8L2ZpbGw+IikpLHllLmxlbmd0aD4w'@;
put 'PyhHLnB1c2goWyI8Ym9yZGVyIixudWxsIT1TLmRpYWdvbmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysgKyEhUy5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPVMuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIVMuZGlhZ29uYWxVcCsnIic6IiIsIj4iXS5qb2luKCIiKSkseWUuZm9y'@;
put 'RWFjaChmdW5jdGlvbihOZSl7Ry5wdXNoKFI0KFNbTmVdLE5lKSl9KSxHLnB1c2goIjwvYm9yZGVyPiIpKToobnVsbCE9Uy5kaWFnb25hbERvd258fG51bGwhPVMuZGlhZ29uYWxVcCkmJkcucHVzaChbIjxib3JkZXIiLG51bGwhPVMuZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSInKyAr'@;
put 'ISFTLmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9Uy5kaWFnb25hbFVwPycgZGlhZ29uYWxVcD0iJysgKyEhUy5kaWFnb25hbFVwKyciJzoiIiwiLz4iXS5qb2luKCIiKSksMT09Ry5sZW5ndGg/IjxkeGYvPiI6Ry5qb2luKCIiKSsiPC9keGY+In0oRyxSKSl9KSxrLmpvaW4oIiIpKyI8L2R4'@;
put 'ZnM+In0oUy5TdHlsZXMuRFhGLFIpLGtbay5sZW5ndGhdPVEsay5sZW5ndGg+MiYmKGtbay5sZW5ndGhdPSI8L3N0eWxlU2hlZXQ+IixrWzFdPWtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGsuam9pbigiIil9ZnVuY3Rpb24gU0MoUyxSLGspe2t8fChrPWJuKDYrNCpSLmxlbmd0aCkpLGsud3Jp'@;
put 'dGVfc2hpZnQoMixTKSxQYyhSLGspO3ZhciBHPWsubGVuZ3RoPmsubD9rLnNsaWNlKDAsay5sKTprO3JldHVybiBudWxsPT1rLmwmJihrLmw9ay5sZW5ndGgpLEd9ZnVuY3Rpb24gVVYoUyl7cmV0dXJue2NvbG9yOlFoKFMpLHBvczpQbChTKX19cW8uU1RZPSJodHRwOi8vc2NoZW1hcy5vcGVu'@;
put 'eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3N0eWxlcyI7dmFyIE1DPVsibm9uZSIsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtV'@;
put 'cCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdLFpWPVZlKE1DKSxrNT1bImdlbmVyYWwiLCJsZWZ0Iiwi'@;
put 'Y2VudGVyIiwicmlnaHQiLCJmaWxsIiwianVzdGlmeSIsImNlbnRlckNvbnRpbnVvdXMiLCJkaXN0cmlidXRlZCJdLGU4PVsidG9wIiwiY2VudGVyIiwiYm90dG9tIiwianVzdGlmeSIsImRpc3RyaWJ1dGVkIl07ZnVuY3Rpb24gVnUoUyxSLGspe2t8fChrPWJuKDE2KSksay53cml0ZV9zaGlm'@;
put 'dCgyLFJ8fDApLGsud3JpdGVfc2hpZnQoMixTLm51bUZtdElkfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5mb250SWR8fDApLGsud3JpdGVfc2hpZnQoMixTLmZpbGxJZHx8MCksay53cml0ZV9zaGlmdCgyLFMuYm9yZGVySWR8fDApLGsud3JpdGVfc2hpZnQoMSxTLmFsaWdubWVudCYmUy5hbGln'@;
put 'bm1lbnQudGV4dFJvdGF0aW9ufHwwKSxrLndyaXRlX3NoaWZ0KDEsUy5hbGlnbm1lbnQmJlMuYWxpZ25tZW50LmluZGVudHx8MCk7dmFyIEc9MCxRPTA7aWYoUy5hbGlnbm1lbnQpe2lmKFMuYWxpZ25tZW50Lmhvcml6b250YWwpe3ZhciBhZT1rNS5pbmRleE9mKFMuYWxpZ25tZW50Lmhvcml6'@;
put 'b250YWwpO2FlPDAmJihhZT0wKSxHfD1hZX1pZihTLmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIGdlPWU4LmluZGV4T2YoUy5hbGlnbm1lbnQudmVydGljYWwpO2dlPDAmJihnZT0yKSxHfD1nZTw8M31TLmFsaWdubWVudC53cmFwVGV4dCYmKEd8PTY0KSxTLmFsaWdubWVudC5zaHJpbmtUb0Zp'@;
put 'dCYmKFF8PTEpfXJldHVybiBrLndyaXRlX3NoaWZ0KDEsRyksay53cml0ZV9zaGlmdCgxLFEpLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDEsMCksa312YXIgZ2Q9WyJub25lIiwidGhpbiIsIm1lZGl1bSIsImRhc2hlZCIsImRvdHRlZCIsInRoaWNrIiwiZG91YmxlIiwiaGFp'@;
put 'ciIsIm1lZGl1bURhc2hlZCIsImRhc2hEb3QiLCJtZWRpdW1EYXNoRG90IiwiZGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3REb3QiLCJzbGFudERhc2hEb3QiXTtmdW5jdGlvbiBENShTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk7Uy5sKz0xO3ZhciBrPVFoKFMpO3JldHVybntzdHlsZTpnZFtS'@;
put 'XSxjb2xvcjprfX1mdW5jdGlvbiBJNShTLFIpe3JldHVybiBSfHwoUj1ibigxMCkpLFMmJlMuc3R5bGUmJiIiIT1TLnN0eWxlJiYibm9uZSIhPVMuc3R5bGUmJi0xIT09Z2QuaW5kZXhPZihTLnN0eWxlKT8oUi53cml0ZV9zaGlmdCgxLGdkLmluZGV4T2YoUy5zdHlsZSkpLFIud3JpdGVfc2hp'@;
put 'ZnQoMSwwKSxTLmNvbG9yP2ZmKFMuY29sb3IsUik6KFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCkpKTooUi53cml0ZV9zaGlmdCgxLDApLFIud3JpdGVfc2hpZnQoMSwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApKSxSfWZ1bmN0aW9uIHdrKFMs'@;
put 'Uil7cmV0dXJuIFJ8fChSPWJuKDUyKSksUi53cml0ZV9zaGlmdCg0LFMueGZJZCksUi53cml0ZV9zaGlmdCgyLDEpLFIud3JpdGVfc2hpZnQoMSwrUy5idWlsdGluSWQpLFIud3JpdGVfc2hpZnQoMSwwKSxkZihTLm5hbWV8fCIiLFIpLFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfWZ1'@;
put 'bmN0aW9uIFp2KFMsUil7IVJ8fCFSLnRoZW1lRWxlbWVudHN8fCFSLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lfHxudWxsIT1TLnRoZW1lJiYoUy5yZ2I9QzUoUi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtTLnRoZW1lXS5yZ2IsUy50aW50fHwwKSl9ZnVuY3Rpb24gQWsoUyxSKXt2YXIgaz12'@;
put 'aSgpO3JldHVybiBGcihrLCJCcnRCZWdpblN0eWxlU2hlZXQiKSxmdW5jdGlvbiBHVihTLFIpe2lmKFIpe3ZhciBrPTA7W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihHKXtmb3IodmFyIFE9R1swXTtRPD1HWzFdOysrUSludWxsIT1SW1FdJiYrK2t9'@;
put 'KSwwIT1rJiYoRnIoUywiQnJ0QmVnaW5GbXRzIixLMChrKSksW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihHKXtmb3IodmFyIFE9R1swXTtRPD1HWzFdOysrUSludWxsIT1SW1FdJiZGcihTLCJCcnRGbXQiLFNDKFEsUltRXSkpfSksRnIoUywiQnJ0'@;
put 'RW5kRm10cyIpKX19KGssUy5TU0YpLGZ1bmN0aW9uICRWKFMsUil7dmFyIGs9Ui5sZW5ndGg7MCE9ayYmKEZyKFMsIkJydEJlZ2luRm9udHMiLEswKGspKSxSLmZvckVhY2goZnVuY3Rpb24oRyl7RnIoUywiQnJ0Rm9udCIsZnVuY3Rpb24gelYoUyxSKXtSfHwoUj1ibigxNTMpKSxSLndyaXRl'@;
put 'X3NoaWZ0KDIsMjAqUy5zeiksZnVuY3Rpb24gY3YoUyxSKXtSfHwoUj1ibigyKSksUi53cml0ZV9zaGlmdCgxLChTLml0YWxpYz8yOjApfChTLnN0cmlrZT84OjApfChTLm91dGxpbmU/MTY6MCl8KFMuc2hhZG93PzMyOjApfChTLmNvbmRlbnNlPzY0OjApfChTLmV4dGVuZD8xMjg6MCkpLFIu'@;
put 'd3JpdGVfc2hpZnQoMSwwKX0oUyxSKSxSLndyaXRlX3NoaWZ0KDIsUy5ib2xkPzcwMDo0MDApO3ZhciBrPTA7InN1cGVyIj09Uy52YWxpZ24/az0xOiJzdWIiPT1TLnZhbGlnbiYmKGs9MiksUi53cml0ZV9zaGlmdCgyLGspLFIud3JpdGVfc2hpZnQoMSxTLnVuZGVybGluZXx8MCksUi53cml0'@;
put 'ZV9zaGlmdCgxLFMuZmFtaWx5fHwwKSxSLndyaXRlX3NoaWZ0KDEsUy5jaGFyc2V0fHwwKSxSLndyaXRlX3NoaWZ0KDEsMCksZmYoUy5jb2xvcixSKTt2YXIgRz0wO3JldHVybiJtYWpvciI9PVMuc2NoZW1lJiYoRz0xKSwibWlub3IiPT1TLnNjaGVtZSYmKEc9MiksUi53cml0ZV9zaGlmdCgx'@;
put 'LEcpLFBjKFMubmFtZSxSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un0oRykpfSksRnIoUywiQnJ0RW5kRm9udHMiKSl9KGssKFMuU3R5bGVzfHx7fSkuRm9udHN8fFtdKSxmdW5jdGlvbiBLVihTLFIpe3ZhciBrPVIubGVuZ3RoOzAhPWsmJihGcihTLCJCcnRCZWdpbkZpbGxzIixL'@;
put 'MChrKSksUi5mb3JFYWNoKGZ1bmN0aW9uKEcpe0ZyKFMsIkJydEZpbGwiLGZ1bmN0aW9uIGUxKFMsUil7Unx8KFI9Ym4oODQpKTt2YXIgaz1aVltTLnBhdHRlcm5UeXBlXTtudWxsPT1rJiYoaz00MCksUi53cml0ZV9zaGlmdCg0LGs9K2spO3ZhciBHPTA7aWYoNDAhPWspZm9yKGZmKFMuZmdD'@;
put 'b2xvcnx8e2luZGV4OjY0fSxSKSxmZihTLmJnQ29sb3J8fHtpbmRleDo2NX0sUik7RzwxMjsrK0cpUi53cml0ZV9zaGlmdCg0LDApO2Vsc2V7Zm9yKDtHPDQ7KytHKVIud3JpdGVfc2hpZnQoNCwwKTtmb3IoO0c8MTI7KytHKVIud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gUi5sZW5ndGg+Ui5s'@;
put 'P1Iuc2xpY2UoMCxSLmwpOlJ9KEcpKX0pLEZyKFMsIkJydEVuZEZpbGxzIikpfShrLChTLlN0eWxlc3x8e30pLkZpbGxzfHxbXSksZnVuY3Rpb24gcVYoUyxSKXt2YXIgaz1SLmxlbmd0aDswIT1rJiYoRnIoUywiQnJ0QmVnaW5Cb3JkZXJzIixLMChrKSksUi5mb3JFYWNoKGZ1bmN0aW9uKEcp'@;
put 'e0ZyKFMsIkJydEJvcmRlciIsZnVuY3Rpb24gX2soUyxSKXtyZXR1cm4gUnx8KFI9Ym4oNTEpKSxSLndyaXRlX3NoaWZ0KDEsMCksSTUoUy50b3AsUiksSTUoUy5ib3R0b20sUiksSTUoUy5sZWZ0LFIpLEk1KFMucmlnaHQsUiksSTUobnVsbCxSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIu'@;
put 'bCk6Un0oRykpfSksRnIoUywiQnJ0RW5kQm9yZGVycyIpKX0oaywoUy5TdHlsZXN8fHt9KS5Cb3JkZXJzfHxbXSksZnVuY3Rpb24gTWsoUyxSKXt2YXIgaz0xO2lmKFImJihrPVIubGVuZ3RoKSxGcihTLCJCcnRCZWdpbkNlbGxTdHlsZVhGcyIsSzAoaykpLEZyKFMsIkJydFhGIixWdSh7bnVt'@;
put 'Rm10SWQ6MCxmb250SWQ6MCxmaWxsSWQ6MCxib3JkZXJJZDowfSw2NTUzNSkpLFIpZm9yKHZhciBHPTE7RzxSLmxlbmd0aDsrK0cpRnIoUywiQnJ0WEYiLFZ1KHtudW1GbXRJZDpSW0ddLm51bUZtdElkfHwwLGZvbnRJZDpSW0ddLmZvbnRJZHx8MCxmaWxsSWQ6UltHXS5maWxsSWR8fDAsYm9y'@;
put 'ZGVySWQ6UltHXS5ib3JkZXJJZHx8MH0sNjU1MzUpKTtGcihTLCJCcnRFbmRDZWxsU3R5bGVYRnMiKX0oayxSLmNlbGxTdHlsZVhmcyksZnVuY3Rpb24geGsoUyxSKXtGcihTLCJCcnRCZWdpbkNlbGxYRnMiLEswKFIubGVuZ3RoKSksUi5mb3JFYWNoKGZ1bmN0aW9uKGspe0ZyKFMsIkJydFhG'@;
put 'IixWdShrLDApKX0pLEZyKFMsIkJydEVuZENlbGxYRnMiKX0oayxSLmNlbGxYZnMpLGZ1bmN0aW9uIEVrKFMsUil7dmFyIGs9MTtpZihSJiYoaz1SLmxlbmd0aCksRnIoUywiQnJ0QmVnaW5TdHlsZXMiLEswKGspKSxGcihTLCJCcnRTdHlsZSIsd2soe3hmSWQ6MCxidWlsdGluSWQ6MCxuYW1l'@;
put 'OiJOb3JtYWwifSkpLFIpZm9yKHZhciBHPTE7RzxSLmxlbmd0aDsrK0cpRnIoUywiQnJ0U3R5bGUiLHdrKHt4ZklkOkcsYnVpbHRpbklkOjAsbmFtZTpSW0ddLm5hbWV9KSk7RnIoUywiQnJ0RW5kU3R5bGVzIil9KGssUi5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIFd2KFMpe0ZyKFMsIkJydEJl'@;
put 'Z2luRFhGcyIsSzAoMCkpLEZyKFMsIkJydEVuZERYRnMiKX0oayksZnVuY3Rpb24gVGsoUyl7RnIoUywiQnJ0QmVnaW5UYWJsZVN0eWxlcyIsZnVuY3Rpb24gQ2soUyxSLGspe3ZhciBHPWJuKDIwNTIpO3JldHVybiBHLndyaXRlX3NoaWZ0KDQsUyksZGYoUixHKSxkZihrLEcpLEcubGVuZ3Ro'@;
put 'PkcubD9HLnNsaWNlKDAsRy5sKTpHfSgwLCJUYWJsZVN0eWxlTWVkaXVtOSIsIlBpdm90U3R5bGVNZWRpdW00IikpLEZyKFMsIkJydEVuZFRhYmxlU3R5bGVzIil9KGspLEZyKGssIkJydEVuZFN0eWxlU2hlZXQiKSxrLmVuZCgpfXFvLlRIRU1FPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9y'@;
put 'bWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RoZW1lIjt2YXIga2s9WyI8L2E6bHQxPiIsIjwvYTpkazE+IiwiPC9hOmx0Mj4iLCI8L2E6ZGsyPiIsIjwvYTphY2NlbnQxPiIsIjwvYTphY2NlbnQyPiIsIjwvYTphY2NlbnQzPiIsIjwvYTphY2NlbnQ0PiIsIjwv'@;
put 'YTphY2NlbnQ1PiIsIjwvYTphY2NlbnQ2PiIsIjwvYTpobGluaz4iLCI8L2E6Zm9sSGxpbms+Il07ZnVuY3Rpb24gSlYoUyxSLGspe1IudGhlbWVFbGVtZW50cy5jbHJTY2hlbWU9W107dmFyIEc9e307KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgYWU9dnIo'@;
put 'USk7c3dpdGNoKGFlWzBdKXtjYXNlIjxhOmNsclNjaGVtZSI6Y2FzZSI8L2E6Y2xyU2NoZW1lPiI6Y2FzZSI8L2E6c3JnYkNscj4iOmNhc2UiPC9hOnN5c0Nscj4iOmJyZWFrO2Nhc2UiPGE6c3JnYkNsciI6Ry5yZ2I9YWUudmFsO2JyZWFrO2Nhc2UiPGE6c3lzQ2xyIjpHLnJnYj1hZS5sYXN0'@;
put 'Q2xyO2JyZWFrO2Nhc2UiPGE6ZGsxPiI6Y2FzZSI8L2E6ZGsxPiI6Y2FzZSI8YTpsdDE+IjpjYXNlIjwvYTpsdDE+IjpjYXNlIjxhOmRrMj4iOmNhc2UiPC9hOmRrMj4iOmNhc2UiPGE6bHQyPiI6Y2FzZSI8L2E6bHQyPiI6Y2FzZSI8YTphY2NlbnQxPiI6Y2FzZSI8L2E6YWNjZW50MT4iOmNh'@;
put 'c2UiPGE6YWNjZW50Mj4iOmNhc2UiPC9hOmFjY2VudDI+IjpjYXNlIjxhOmFjY2VudDM+IjpjYXNlIjwvYTphY2NlbnQzPiI6Y2FzZSI8YTphY2NlbnQ0PiI6Y2FzZSI8L2E6YWNjZW50ND4iOmNhc2UiPGE6YWNjZW50NT4iOmNhc2UiPC9hOmFjY2VudDU+IjpjYXNlIjxhOmFjY2VudDY+Ijpj'@;
put 'YXNlIjwvYTphY2NlbnQ2PiI6Y2FzZSI8YTpobGluaz4iOmNhc2UiPC9hOmhsaW5rPiI6Y2FzZSI8YTpmb2xIbGluaz4iOmNhc2UiPC9hOmZvbEhsaW5rPiI6Ii8iPT09YWVbMF0uY2hhckF0KDEpPyhSLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2trLmluZGV4T2YoYWVbMF0pXT1HLEc9e30p'@;
put 'OkcubmFtZT1hZVswXS5zbGljZSgzLGFlWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICIrYWVbMF0rIiBpbiBjbHJTY2hlbWUiKX19KX1mdW5jdGlvbiBRVigpe31mdW5jdGlvbiBlQigpe312YXIgdEI9LzxhOmNs'@;
put 'clNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Y2xyU2NoZW1lPi8sRGs9LzxhOmZvbnRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZvbnRTY2hlbWU+LyxvbmU9LzxhOmZtdFNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Zm10U2NoZW1lPi8sbkI9LzxhOnRoZW1lRWxlbWVudHMoW14+XSop'@;
put 'Pltcc1xTXSo8XC9hOnRoZW1lRWxlbWVudHM+LztmdW5jdGlvbiBFQyhTLFIpe2lmKCFTfHwwPT09Uy5sZW5ndGgpcmV0dXJuIEVDKHJCKCkpO3ZhciBrLEc9e307aWYoIShrPVMubWF0Y2gobkIpKSl0aHJvdyBuZXcgRXJyb3IoInRoZW1lRWxlbWVudHMgbm90IGZvdW5kIGluIHRoZW1lIik7'@;
put 'cmV0dXJuIGZ1bmN0aW9uIElrKFMsUixrKXt2YXIgRztSLnRoZW1lRWxlbWVudHM9e30sW1siY2xyU2NoZW1lIix0QixKVl0sWyJmb250U2NoZW1lIixEayxRVl0sWyJmbXRTY2hlbWUiLG9uZSxlQl1dLmZvckVhY2goZnVuY3Rpb24oUSl7aWYoIShHPVMubWF0Y2goUVsxXSkpKXRocm93IG5l'@;
put 'dyBFcnJvcihRWzBdKyIgbm90IGZvdW5kIGluIHRoZW1lRWxlbWVudHMiKTtRWzJdKEcsUixrKX0pfShrWzBdLEcsUiksRy5yYXc9UyxHfWZ1bmN0aW9uIHJCKFMsUil7aWYoUiYmUi50aGVtZVhMU1gpcmV0dXJuIFIudGhlbWVYTFNYO2lmKFMmJiJzdHJpbmciPT10eXBlb2YgUy5yYXcpcmV0'@;
put 'dXJuIFMucmF3O3ZhciBrPVtJaV07cmV0dXJuIGtbay5sZW5ndGhdPSc8YTp0aGVtZSB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgbmFtZT0iT2ZmaWNlIFRoZW1lIj4nLGtbay5sZW5ndGhdPSI8YTp0aGVtZUVsZW1lbnRz'@;
put 'PiIsa1trLmxlbmd0aF09JzxhOmNsclNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09JzxhOmRrMT48YTpzeXNDbHIgdmFsPSJ3aW5kb3dUZXh0IiBsYXN0Q2xyPSIwMDAwMDAiLz48L2E6ZGsxPicsa1trLmxlbmd0aF09JzxhOmx0MT48YTpzeXNDbHIgdmFsPSJ3aW5kb3ciIGxh'@;
put 'c3RDbHI9IkZGRkZGRiIvPjwvYTpsdDE+JyxrW2subGVuZ3RoXT0nPGE6ZGsyPjxhOnNyZ2JDbHIgdmFsPSIxRjQ5N0QiLz48L2E6ZGsyPicsa1trLmxlbmd0aF09JzxhOmx0Mj48YTpzcmdiQ2xyIHZhbD0iRUVFQ0UxIi8+PC9hOmx0Mj4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQxPjxhOnNy'@;
put 'Z2JDbHIgdmFsPSI0RjgxQkQiLz48L2E6YWNjZW50MT4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQyPjxhOnNyZ2JDbHIgdmFsPSJDMDUwNEQiLz48L2E6YWNjZW50Mj4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQzPjxhOnNyZ2JDbHIgdmFsPSI5QkJCNTkiLz48L2E6YWNjZW50Mz4nLGtbay5s'@;
put 'ZW5ndGhdPSc8YTphY2NlbnQ0PjxhOnNyZ2JDbHIgdmFsPSI4MDY0QTIiLz48L2E6YWNjZW50ND4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQ1PjxhOnNyZ2JDbHIgdmFsPSI0QkFDQzYiLz48L2E6YWNjZW50NT4nLGtbay5sZW5ndGhdPSc8YTphY2NlbnQ2PjxhOnNyZ2JDbHIgdmFsPSJGNzk2'@;
put 'NDYiLz48L2E6YWNjZW50Nj4nLGtbay5sZW5ndGhdPSc8YTpobGluaz48YTpzcmdiQ2xyIHZhbD0iMDAwMEZGIi8+PC9hOmhsaW5rPicsa1trLmxlbmd0aF09JzxhOmZvbEhsaW5rPjxhOnNyZ2JDbHIgdmFsPSI4MDAwODAiLz48L2E6Zm9sSGxpbms+JyxrW2subGVuZ3RoXT0iPC9hOmNsclNj'@;
put 'aGVtZT4iLGtbay5sZW5ndGhdPSc8YTpmb250U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxrW2subGVuZ3RoXT0iPGE6bWFqb3JGb250PiIsa1trLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYW1icmlhIi8+JyxrW2subGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0'@;
put 'aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlwZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1'@;
put 'YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIgdHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+Jyxr'@;
put 'W2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0'@;
put 'eXBlZmFjZT0iVGFob21hIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIi'@;
put 'IHR5cGVmYWNlPSJTaHJ1dGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9Ik1vb2xCb3JhbiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0i'@;
put 'R3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLGtbay5sZW5ndGhd'@;
put 'PSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVm'@;
put 'YWNlPSJNViBCb2xpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIg'@;
put 'dHlwZWZhY2U9IkxhdGhhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQg'@;
put 'c2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9rQ2hhbXBhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLGtbay5sZW5n'@;
put 'dGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJWaWV0IiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNl'@;
put 'PSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3IiIHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxrW2subGVuZ3RoXT0iPC9hOm1ham9yRm9udD4iLGtbay5sZW5ndGhdPSI8YTptaW5vckZvbnQ+IixrW2subGVuZ3RoXT0nPGE6bGF0aW4gdHlwZWZh'@;
put 'Y2U9IkNhbGlicmkiLz4nLGtbay5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxrW2subGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1ZmYzMFx1MzBiNFx1MzBiN1x1MzBj'@;
put 'M1x1MzBhZiIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUzIi8+JyxrW2subGVuZ3RoXT0nPGE6'@;
put 'Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IkFyaWFsIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJBcmlhbCIv'@;
put 'Picsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFpIiB0eXBlZmFjZT0iVGFob21hIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkV0aGkiIHR5cGVmYWNlPSJOeWFsYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJCZW5nIiB0eXBlZmFjZT0iVnJpbmRh'@;
put 'Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1anIiIHR5cGVmYWNlPSJTaHJ1dGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS2htciIgdHlwZWZhY2U9IkRhdW5QZW5oIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJU'@;
put 'dW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNl'@;
put 'PSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLGtb'@;
put 'ay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIv'@;
put 'Picsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVm'@;
put 'YWNlPSJLYWxpbmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tDaGFtcGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2lu'@;
put 'aCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlZpZXQiIHR5cGVmYWNlPSJBcmlhbCIvPicsa1trLmxlbmd0aF09Jzxh'@;
put 'OmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicsa1trLmxlbmd0aF09IjwvYTptaW5vckZvbnQ+IixrW2subGVuZ3RoXT0iPC9hOmZvbnRTY2hlbWU+'@;
put 'IixrW2subGVuZ3RoXT0nPGE6Zm10U2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxrW2subGVuZ3RoXT0iPGE6ZmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxrW2subGVuZ3RoXT0nPGE6Z3JhZEZp'@;
put 'bGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4n'@;
put 'LGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjM1MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjM3MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVt'@;
put 'ZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTUwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMSIvPicsa1trLmxl'@;
put 'bmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxMDAwMDAiLz48'@;
put 'YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjEzMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAw'@;
put 'MDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6bGluIGFuZz0iMTYyMDAwMDAiIHNjYWxlZD0iMCIvPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhd'@;
put 'PSI8L2E6ZmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmxuU3R5bGVMc3Q+IixrW2subGVuZ3RoXT0nPGE6bG4gdz0iOTUyNSIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9Ijk1'@;
put 'MDAwIi8+PGE6c2F0TW9kIHZhbD0iMTA1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxrW2subGVuZ3RoXT0nPGE6bG4gdz0iMjU0MDAiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmls'@;
put 'bD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLGtbay5sZW5ndGhdPSc8YTpsbiB3PSIzODEwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2'@;
put 'YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsa1trLmxlbmd0aF09IjwvYTpsblN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09'@;
put 'IjxhOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIwMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzODAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpv'@;
put 'dXRlclNoZHc+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0'@;
put 'MDAwMCIgZGlzdD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09'@;
put 'IjwvYTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxh'@;
put 'OnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZhbD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Picsa1trLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6c2NlbmUzZD48YTpjYW1lcmEgcHJzdD0ib3J0aG9ncmFwaGljRnJvbnQiPjxhOnJv'@;
put 'dCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIwIi8+PC9hOmNhbWVyYT48YTpsaWdodFJpZyByaWc9InRocmVlUHQiIGRpcj0idCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjEyMDAwMDAiLz48L2E6bGlnaHRSaWc+PC9hOnNjZW5lM2Q+JyxrW2subGVuZ3RoXT0nPGE6c3AzZD48YTpiZXZl'@;
put 'bFQgdz0iNjM1MDAiIGg9IjI1NDAwIi8+PC9hOnNwM2Q+JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTpiZ0ZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2No'@;
put 'ZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPicsa1trLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2'@;
put 'YWw9IjQwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSI0MDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI0NTAwMCIvPjxhOnNoYWRlIHZhbD0iOTkwMDAiLz48YTpzYXRN'@;
put 'b2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMjAwMDAiLz48YTpzYXRNb2QgdmFsPSIyNTUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4n'@;
put 'LGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9Ii04MDAwMCIgcj0iNTAwMDAiIGI9IjE4MDAwMCIvPjwvYTpwYXRoPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5n'@;
put 'dGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI4MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hl'@;
put 'bWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIzMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjIwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09IjwvYTpnc0xzdD4i'@;
put 'LGtbay5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIgdD0iNTAwMDAiIHI9IjUwMDAwIiBiPSI1MDAwMCIvPjwvYTpwYXRoPicsa1trLmxlbmd0aF09IjwvYTpncmFkRmlsbD4iLGtbay5sZW5ndGhdPSI8L2E6YmdGaWxsU3R5bGVMc3Q+Iixr'@;
put 'W2subGVuZ3RoXT0iPC9hOmZtdFNjaGVtZT4iLGtbay5sZW5ndGhdPSI8L2E6dGhlbWVFbGVtZW50cz4iLGtbay5sZW5ndGhdPSI8YTpvYmplY3REZWZhdWx0cz4iLGtbay5sZW5ndGhdPSI8YTpzcERlZj4iLGtbay5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48'@;
put 'YTpzdHlsZT48YTpsblJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+PGE6ZmlsbFJlZiBpZHg9IjMiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2Nl'@;
put 'bnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9Imx0MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLGtbay5sZW5ndGhdPSI8L2E6c3BEZWY+IixrW2subGVuZ3RoXT0iPGE6bG5EZWY+IixrW2subGVuZ3RoXT0nPGE6c3BQci8+PGE6'@;
put 'Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIyIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIwIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+PGE6ZWZmZWN0UmVmIGlkeD0iMSI+'@;
put 'PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJ0eDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxrW2subGVuZ3RoXT0iPC9hOmxuRGVmPiIsa1trLmxlbmd0aF09IjwvYTpvYmplY3REZWZh'@;
put 'dWx0cz4iLGtbay5sZW5ndGhdPSI8YTpleHRyYUNsclNjaGVtZUxzdC8+IixrW2subGVuZ3RoXT0iPC9hOnRoZW1lPiIsay5qb2luKCIiKX1mdW5jdGlvbiBZdihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiktNCxHPVtSXTtzd2l0Y2goUil7Y2FzZSA0OmNhc2Ug'@;
put 'NTpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzpHWzFdPWZ1bmN0aW9uIFRDKFMpe3ZhciBSPXt9O3N3aXRjaChSLnhjbHJUeXBlPVMucmVhZF9zaGlmdCgyKSxSLm5UaW50U2hhZGU9Uy5yZWFkX3NoaWZ0KDIpLFIueGNsclR5cGUpe2Nhc2UgMDpjYXNlIDQ6'@;
put 'Uy5sKz00O2JyZWFrO2Nhc2UgMTpSLnhjbHJWYWx1ZT1mdW5jdGlvbiBvQihTLFIpe3JldHVybiBJbihTLFIpfShTLDQpO2JyZWFrO2Nhc2UgMjpSLnhjbHJWYWx1ZT13ZihTKTticmVhaztjYXNlIDM6Ui54Y2xyVmFsdWU9ZnVuY3Rpb24gUmsoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KX0o'@;
put 'Uyl9cmV0dXJuIFMubCs9OCxSfShTKTticmVhaztjYXNlIDY6R1sxXT1mdW5jdGlvbiBZMyhTLFIpe3JldHVybiBJbihTLFIpfShTLGspO2JyZWFrO2Nhc2UgMTQ6Y2FzZSAxNTpHWzFdPVMucmVhZF9zaGlmdCgxPT09az8xOjIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJl'@;
put 'Y29nbml6ZWQgRXh0UHJvcCB0eXBlOiAiK1IrIiAiK2spfXJldHVybiBHfWZ1bmN0aW9uIExrKFMsUil7Ui5mb3JFYWNoKGZ1bmN0aW9uKGspe3N3aXRjaChrWzBdKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxNDpjYXNl'@;
put 'IDE1OmJyZWFrO2Nhc2UgMTM6Uy5mb250JiZTLmZvbnQuY29sb3ImJkFycmF5LmlzQXJyYXkoa1sxXS54Y2xyVmFsdWUpJiYoUy5mb250LmNvbG9yLnJnYj1mZChrWzFdLnhjbHJWYWx1ZSkpfX0pfWZ1bmN0aW9uIG9hKFMpe3JldHVybiBTLzkxNDQwMCpUZn1mdW5jdGlvbiBPayhTLFIpe3Zh'@;
put 'ciBrPXt9O2lmKFMucG9zKWsueD1vYShTLnBvcy54KSxrLnk9b2EoUy5wb3MueSk7ZWxzZXtpZighUy5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO2sucj1TLmZyb20ucnx8MCxrLmM9Uy5mcm9tLmN8fDAsUy5mcm9tLmNPZmYmJihrLng9b2EoUy5mcm9tLmNPZmYpKSxTLmZyb20uck9m'@;
put 'ZiYmKGsueT1vYShTLmZyb20uck9mZikpfWlmKFMuZXh0KWsudz1vYShTLmV4dC54KSxrLmg9b2EoUy5leHQueSk7ZWxzZXtpZighUy50byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7ay5DPVMudG8uYyxrLlI9Uy50by5yLFMudG8uY09mZiYmKGsuWD1vYShTLnRvLmNPZmYpKSxTLnRvLnJPZmYm'@;
put 'JihrLlk9b2EoUy50by5yT2ZmKSl9cmV0dXJuIGt9ZnVuY3Rpb24gUjUoUyxSKXt2YXIgaz17eDotMSx5Oi0xLHc6LTEsaDotMX07aWYoUy5wb3Mpay54PW9hKFMucG9zLngpLGsueT1vYShTLnBvcy55KTtlbHNle2lmKCFTLmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFydCI7ay54PUw1KFIs'@;
put 'Uy5mcm9tLmMsIkMiKStvYShTLmZyb20uY09mZiksay55PUw1KFIsUy5mcm9tLnIsIlIiKStvYShTLmZyb20uck9mZil9aWYoUy5leHQpay53PW9hKFMuZXh0LngpLGsuaD1vYShTLmV4dC55KTtlbHNle2lmKCFTLnRvKXRocm93ImJhZCBhbmNob3IgZW5kIjtrLnc9TDUoUixTLnRvLmMsIkMi'@;
put 'KStvYShTLnRvLmNPZmYpLWsueCxrLmg9TDUoUixTLnRvLnIsIlIiKStvYShTLnRvLnJPZmYpLWsueX1yZXR1cm4ga31mdW5jdGlvbiBBQyhTLFIpe3ZhciBrPXtyOi0xLGM6LTEseDotMSx5Oi0xLFI6LTEsQzotMSxYOi0xLFk6LTF9O3N3aXRjaChTLnR5cGUpe2Nhc2UidHdvQ2VsbEFuY2hv'@;
put 'ciI6ay5yPVMuZnJvbS5yLGsueT1vYShTLmZyb20uck9mZiksay5SPVMudG8ucixrLlk9b2EoUy50by5yT2ZmKSxrLmM9Uy5mcm9tLmMsay54PW9hKFMuZnJvbS5jT2ZmKSxrLkM9Uy50by5jLGsuWD1vYShTLnRvLmNPZmYpO2JyZWFrO2Nhc2Uib25lQ2VsbEFuY2hvciI6ay5yPVMuZnJvbS5y'@;
put 'LGsueT1vYShTLmZyb20uck9mZik7dmFyIEc9a2YoUixrLnIsay55K29hKFMuZXh0LnkpKTtrLlI9R1swXSxrLlk9R1sxXSxrLmM9Uy5mcm9tLmMsay54PW9hKFMuZnJvbS5jT2ZmKTt2YXIgUT1HMyhSLGsuYyxrLngrb2EoUy5leHQueCkpO2suQz1RWzBdLGsuWD1RWzFdO2JyZWFrO2Nhc2Ui'@;
put 'YWJzb2x1dGVBbmNob3IiOnZhciBhZT1rZihSLDAsb2EoUy5wb3MueSkpO2sucj1hZVswXSxrLnk9YWVbMV07dmFyIGdlPWtmKFIsay5yLGsueStvYShTLmV4dC55KSk7ay5SPWdlWzBdLGsuWT1nZVsxXTt2YXIgcGU9a2YoUiwwLG9hKFMucG9zLngpKTtrLmM9cGVbMF0say54PXBlWzFdO3Zh'@;
put 'ciB5ZT1rZihSLGsuYyxrLngrb2EoUy5leHQueCkpO2suQz15ZVswXSxrLlg9eWVbMV07YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYW5jaG9yIHR5cGUgIitTLnR5cGV9cmV0dXJuIGt9ZnVuY3Rpb24gUGsoUyxSKXt2YXIgaz1TLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pO1JbIiFwb3MiXT17'@;
put 'Yzora1swXSx4OitrWzFdLHI6K2tbMl0seTora1szXSxDOitrWzRdLFg6K2tbNV0sUjora1s2XSxZOitrWzddfX1mdW5jdGlvbiBzQihTLFIsayl7dmFyIEc9LTE7aWYobnVsbCE9Uy5SfHxudWxsIT1TLkMpRz0wO2Vsc2V7aWYobnVsbD09Uy54fHxudWxsPT1TLnl8fG51bGw9PVMud3x8bnVs'@;
put 'bD09Uy5oKXRocm93ImNhbm5vdCBwYXJzZSBhbmNob3IgIitKU09OLnN0cmluZ2lmeShTKTtHPTErMiohKFMuY3x8Uy5yKX1pZihHIT1SKXtzd2l0Y2goUil7Y2FzZSAwOmNhc2UgMTppZigzIT1HKWJyZWFrO3ZhciBRPUczKGssUy5jfHwwLFMueHx8MCk7Uy5jPVFbMF0sUy54PVFbMV07dmFy'@;
put 'IGFlPWtmKGssUy5yfHwwLFMueXx8MCk7Uy5yPWFlWzBdLFMueT1hZVsxXTticmVhaztjYXNlIDM6aWYoMz09RylicmVhazt2YXIgZ2U9Uy5jfHwwLHBlPVMueHx8MDtkZWxldGUgUy5jLGRlbGV0ZSBTLngsUy54PShnZT9HdihrLGdlKTowKStwZTt2YXIgeWU9Uy5yfHwwLFBlPVMueXx8MDtk'@;
put 'ZWxldGUgUy5yLGRlbGV0ZSBTLnksUy55PSh5ZT9PNChrLHllKTowKStQZTticmVhaztkZWZhdWx0OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrUn1zd2l0Y2goUil7Y2FzZSAwOmlmKDA9PUcpYnJlYWs7dmFyIE5lPUczKGssUy5jfHwwLChTLnh8fDApK1Mudyk7'@;
put 'ZGVsZXRlIFMudyxTLkM9TmVbMF0sUy5YPU5lWzFdO3ZhciBZZT1rZihrLFMucnx8MCwoUy55fHwwKStTLmgpO2RlbGV0ZSBTLmgsUy5SPVllWzBdLFMuWT1ZZVsxXTticmVhaztjYXNlIDE6Y2FzZSAzOmlmKDAhPUcpYnJlYWs7dmFyIGV0PVMuQ3x8MCxjdD1TLlh8fDA7ZGVsZXRlIFMuQyxk'@;
put 'ZWxldGUgUy5YLFMudz1HdihrLGV0KStjdC0oUy5jP0d2KGssUy5jKTowKS0oUy54fHwwKTt2YXIgRXQ9Uy5SfHwwLG90PVMuWXx8MDtkZWxldGUgUy5SLGRlbGV0ZSBTLlksUy5oPU80KGssRXQpK290LShTLnI/TzQoayxTLnIpOjApLShTLnl8fDApO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29u'@;
put 'dmVydF9hbmNob3IgdW5yZWNvZ25pemVkIHR5cGUgIitSfX19ZnVuY3Rpb24gbEIoUyl7dmFyIFI9W1MuY3x8MCxNYXRoLnJvdW5kKFMueHx8MCksUy5yfHwwLE1hdGgucm91bmQoUy55fHwwKV07cmV0dXJuKFI9Ui5jb25jYXQoUy5oJiZTLnc/W1JbMF0sTWF0aC5yb3VuZChSWzFdK1Mudyks'@;
put 'UlsyXSxNYXRoLnJvdW5kKFJbM10rUy5oKV06W1MuQ3x8MCxNYXRoLnJvdW5kKFMuWHx8MCksUy5SfHwwLE1hdGgucm91bmQoUy5ZfHwwKV0pKS5qb2luKCIsICIpfWZ1bmN0aW9uIE80KFMsUil7aWYoIVMpcmV0dXJuIDA7Zm9yKHZhciBrPTA7LS1SPj0wOyl7dmFyIEc9KChTWyIhcm93cyJd'@;
put 'fHxbXSlbUl18fHt9KS5ocHg7bnVsbD09RyYmKEc9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09RyYmKEc9MjQpLGsrPUd9cmV0dXJuIGt9ZnVuY3Rpb24gR3YoUyxSKXtpZighUylyZXR1cm4gMDtmb3IodmFyIGs9MDstLVI+PTA7KXt2YXIgRz0oKFNbIiFj'@;
put 'b2xzIl18fFtdKVtSXXx8e30pLndweDtpZihudWxsPT1HJiYoRz0oKFNbIiFzaGVldEZvcm1hdCJdfHx7fSkuY29sfHx7fSkud3B4KSxudWxsPT1HKXt2YXIgUT17d2NoOjguNDN9O1EwKFEpLFNbIiFjb2xzIl0mJihTWyIhY29scyJdW1JdPVEpLEc9US53cHh9ays9R31yZXR1cm4ga31mdW5j'@;
put 'dGlvbiBMNShTLFIsayl7cmV0dXJuIkMiPT1rP0d2KFMsUik6TzQoUyxSKX1mdW5jdGlvbiBrZihTLFIsayl7dmFyIEc9W1Isa107aWYoIVMpcmV0dXJuIEc7Zm9yKDs7KXt2YXIgUT0oU1siIXJvd3MiXXx8W10pW0dbMF1dfHx7fTtpZihRLmhpZGRlbikrK0dbMF07ZWxzZXt2YXIgYWU9US5o'@;
put 'cHg7aWYobnVsbD09YWUmJihhZT0oKFNbIiFzaGVldEZvcm1hdCJdfHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1hZSYmKGFlPWxoKDE1KSksR1sxXTxhZSlicmVhaztHWzBdKyssR1sxXS09YWV9fXJldHVybiBHfWZ1bmN0aW9uIEczKFMsUixrKXt2YXIgRz1bUixrXTtpZighUylyZXR1cm4g'@;
put 'Rztmb3IoOzspe3ZhciBRPShTWyIhY29scyJdfHxbXSlbR1swXV18fHt9O2lmKFEuaGlkZGVufHwwPT09US53cHgpKytHWzBdO2Vsc2V7dmFyIGFlPVEud3B4O2lmKG51bGw9PWFlJiYoYWU9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCksbnVsbD09YWUpe3ZhciBnZT17'@;
put 'd2NoOjguNDN9O1EwKGdlKSxTWyIhY29scyJdJiYoU1siIWNvbHMiXVtHWzBdXT1nZSksYWU9Z2Uud3B4fWlmKEdbMV08YWUpYnJlYWs7R1swXSsrLEdbMV0tPWFlfX1yZXR1cm4gR31mdW5jdGlvbiBPMChTKXtyZXR1cm4oIjAwMDAwMCIrKCJudW1iZXIiPT10eXBlb2YgUz9TLnRvU3RyaW5n'@;
put 'KDE2KTpTKSkuc2xpY2UoLTYpfWZ1bmN0aW9uIG1kKFMsUixrKXt2YXIgRz0ic3RyaW5nIj09dHlwZW9mIFI/ISFrOiEhUjsic3RyaW5nIiE9dHlwZW9mIFImJihSPSJjb2xvciIpO3ZhciBRPSI8IitSKyIgIjtyZXR1cm4gUy5hdXRvP1ErJ2F1dG89IjEiLz4nOlMuaW5kZXgmJm51bGw9PVMu'@;
put 'cmdiP1ErJ2luZGV4ZWQ9IicrUy5pbmRleCsnIi8+JzpudWxsIT1TLnRoZW1lP1ErJ3RoZW1lPSInK1MudGhlbWUrJyInKyhTLnRpbnQ/JyB0aW50PSInK1MudGludCsnIic6IiIpKyIvPiI6bnVsbCE9Uy5yZ2I/USsncmdiPSInKyhHPyJGRiI6IiIpK08wKFMucmdiKSsnIi8+JzpRKyIvPiJ9'@;
put 'ZnVuY3Rpb24gUDQoUyxSKXtpZighU3x8bnVsbD09Uy5yZ2IpcmV0dXJuIFI7Zm9yKHZhciBrPSgiMDAwMDAwIitTLnJnYi50b1N0cmluZygxNikpLnNsaWNlKC02KSxHPVtrLnNsaWNlKDAsMiksay5zbGljZSgyLDQpLGsuc2xpY2UoNCw2KV0ubWFwKGZ1bmN0aW9uKGdlKXtyZXR1cm4gcGFy'@;
put 'c2VJbnQoZ2UsMTYpfSksUT0wO1E8bjAubGVuZ3RoOysrUSl7dmFyIGFlPW4wW1FdO2lmKGFlWzBdPT1HWzBdJiZhZVsxXT09R1sxXSYmYWVbMl09PUdbMl0pcmV0dXJuIFF9cmV0dXJuIG4wLmxlbmd0aDw2ND8objAucHVzaChbR1swXSxHWzFdLEdbMl1dKSxuMC5sZW5ndGgtMSk6Un1mdW5j'@;
put 'dGlvbiB0MShTKXt2YXIgUj1bIiIsIiIsIiJdO2lmKCFTKXJldHVybltdO3ZhciBrPSIiLEc9UyYmUy5zP2Z1bmN0aW9uICR2KFMpe3ZhciBSPVsiIiwiIl07aWYoIVMpcmV0dXJuIFI7aWYoUy5zeiYmKFJbMF0rPSImIitTLnN6LFJbMV09IiYxMiIrUlsxXSksUy5uYW1lJiYoUlswXSs9JyYi'@;
put 'JytTLm5hbWUrJyxSZWd1bGFyIicsUlsxXT0nJiItLFJlZ3VsYXIiJytSWzFdKSxTLmJvbGQmJihSWzBdKz0iJkIiLFJbMV09IiZCIitSWzFdKSxTLnVuZGVybGluZSl7dmFyIGs9Mj09Uy51bmRlcmxpbmU/IiZFIjoiJlUiO1JbMF0rPWssUlsxXT1rK1JbMV19cmV0dXJuIFMuaXRhbGljJiYo'@;
put 'UlswXSs9IiZJIixSWzFdPSImSSIrUlsxXSksUy5jb2xvciYmbnVsbCE9Uy5jb2xvci5yZ2ImJihSWzBdKz0iJksiK08wKFMuY29sb3IucmdiKSxSWzFdKz0iJkswMDAwMDAiKSxTLnN0cmlrZSYmKFJbMF0rPSImUyIsUlsxXT0iJlMiK1JbMV0pLCJzdXBlciI9PVMudmFsaWduJiYoUlswXSs9'@;
put 'IiZYIixSWzFdPSImWCIrUlsxXSksInN1YiI9PVMudmFsaWduJiYoUlswXSs9IiZZIixSWzFdPSImWSIrUlsxXSksUn0oUy5zKTpbIiIsIiJdO3JldHVybiJzdHJpbmciPT10eXBlb2YgUz9bUyxTLFNdOm51bGwhPVMuZmlyc3R8fG51bGwhPVMuZXZlbnx8bnVsbCE9Uy5vZGQ/KG51bGwhPVMu'@;
put 'b2RkJiYoUlswXT10MShTLm9kZClbMF0pLHZvaWQgMD09PVMuZmlyc3QmJlJbMF0mJihSWzFdPVJbMF0pLG51bGwhPVMuZmlyc3QmJihSWzFdPXQxKFMuZmlyc3QpWzBdKSxudWxsIT1TLmV2ZW4mJihSWzJdPXQxKFMuZXZlbilbMF0pLFIpOlMubGVmdHx8Uy5jZW50ZXJ8fFMucmlnaHQ/KFMu'@;
put 'bGVmdCYmKGsrPSImTCIrdDEoUy5sZWZ0KVswXSksUy5jZW50ZXImJihrKz0iJkMiK3QxKFMuY2VudGVyKVswXSksUy5yaWdodCYmKGsrPSImUiIrdDEoUy5yaWdodClbMF0pLFtrLGssa10pOm51bGwhPVMudj9baz1HWzBdK1Mudi5yZXBsYWNlKC8mL2csIiYmIikrR1sxXSxrLGtdOm51bGwh'@;
put 'PVMudz9baz1HWzBdK1MudytHWzFdLGssa106QXJyYXkuaXNBcnJheShTLlIpPyhTLlIuZm9yRWFjaChmdW5jdGlvbihRKXtrKz10MShRKVswXX0pLFtrLGssa10pOltdfXZhciB0OD17MToiTGV0dGVyIiwzOiJUYWJsb2lkIiw1OiJMZWdhbCIsNzoiRXhlY3V0aXZlIiw4OiJBMyIsOToiQTQi'@;
put 'LDExOiJBNSIsMTI6IkI0IiwxMzoiQjUiLDE0OiJGb2xpbyIsMjA6IkVudmVsb3BlIiwzNzoiTW9uYXJjaCIsNzA6IkE2In0sY0I9VmUodDgpO3FvLkNPTk49Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY29ubmVj'@;
put 'dGlvbnMiO3ZhciBkQj1QcigiZXh0ZXJuYWxMaW5rIixudWxsLHt4bWxuczpZaS5tYWluWzBdfSk7cW8uSU1HPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2ltYWdlIixxby5EUkFXPSJodHRwOi8vc2NoZW1hcy5v'@;
put 'cGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RyYXdpbmciO3ZhciBmQj17dDoidG9wIixjdHI6ImNlbnRlciIsYjoiYm90dG9tIixqdXN0OiJ0b3AiLGRpc3Q6InRvcCJ9LE81PXtjdHI6ImNlbnRlciIsZGlzdDoiY2VudGVyIixqdXN0OiJjZW50'@;
put 'ZXIiLGp1c3RMb3c6ImNlbnRlciIsbDoibGVmdCIscjoicmlnaHQiLHRoYWlEaXN0OiJjZW50ZXIifTtmdW5jdGlvbiBnQigpe3ZhciBTPVtJaV07cmV0dXJuIFMucHVzaCgnPHhkcjp3c0RyIHhtbG5zOnhkcj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8y'@;
put 'MDA2L3NwcmVhZHNoZWV0RHJhd2luZyIgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iLz4nKSxTLmpvaW4oIiIpfWZ1bmN0aW9uIHNuZShTKXt2YXIgayxSPVNbIiFkYXRhIl07cmV0dXJuImJhc2U2NCI9PT1TWyIhZGF0YXR5'@;
put 'cGUiXT8oKGs9Ui5tYXRjaCgvXmRhdGE6LiosLykpJiYoUj1SLnNsaWNlKGtbMF0ubGVuZ3RoKSksX2UuZGVjb2RlKFIpKTpSfXFvLlRBQkxFPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3RhYmxlIjt2YXIgdkI9'@;
put 'LzwoPzpcdys6KT9zaGFwZSg/OlteXHddW14+XSopPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/c2hhcGU+L2c7ZnVuY3Rpb24gT0MoUyxSLGssRyl7dmFyIFE9WzIxNjAwLDIxNjAwXSxhZT1bIm0wLDBsMCIsUVsxXSxRWzBdLFFbMV0sUVswXSwiMHhlIl0uam9pbigiLCIpLGdlPVtQcigieG1s'@;
put 'IixudWxsLHsieG1sbnM6diI6eWwudiwieG1sbnM6byI6eWwubywieG1sbnM6eCI6eWwueCwieG1sbnM6bXYiOnlsLm12fSkucmVwbGFjZSgvXC8+LywiPiIpLFByKCJvOnNoYXBlbGF5b3V0IixQcigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCJ9KSx7InY6ZXh0IjoiZWRpdCJ9KV0s'@;
put 'cGU9MTAyNCpTLHllPWt8fFtdO3llLmxlbmd0aD4wJiZnZS5wdXNoKFByKCJ2OnNoYXBldHlwZSIsW1ByKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxQcigidjpwYXRoIixudWxsLHtzaGFkb3dvazoiZiIsZXh0cnVzaW9ub2s6ImYiLHN0cm9rZW9rOiJmIixmaWxsb2s6'@;
put 'ImYiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KSxQcigibzpsb2NrIixudWxsLHsidjpleHQiOiJlZGl0IixzaGFwZXR5cGU6InQifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDEiLGNvb3Jkc2l6ZTpRLmpvaW4oIiwiKSwibzpzcHQiOjIwMSxwYXRoOmFlfSkpLHllLmZvckVhY2goZnVu'@;
put 'Y3Rpb24oTmUpeysrcGUsZ2U9Z2UuY29uY2F0KGZ1bmN0aW9uIHI4KFMsUil7dmFyIGs9e2lkOiJfeDAwMDBfcyIrUix0eXBlOiIjX3gwMDAwX3QyMDEiLHN0eWxlOiJtc28td3JhcC1zdHlsZTp0aWdodCJ9OygiUmFkaW8iPT1TWyIhdHlwZSJdfHwiQ2hlY2tib3giPT1TWyIhdHlwZSJdfHwi'@;
put 'TGlzdCI9PVNbIiF0eXBlIl18fCJEcm9wIj09U1siIXR5cGUiXSkmJihrLnN0cm9rZWQ9ImYiKSwiTGFiZWwiPT1TWyIhdHlwZSJdJiYoay5maWxsZWQ9ImYiKTt2YXIgRz0iIjtTLnQmJlBDW1NbIiF0eXBlIl1dJiYoRz1QQ1tTWyIhdHlwZSJdXS5yZXBsYWNlKC8jIyMjLyxMcihTLnQpKSk7'@;
put 'dmFyIFE9W107cmV0dXJuIFMubWFjcm8mJlEucHVzaChObygieDpGbWxhTWFjcm8iLFMubWFjcm8pKSxTLmxpbmsmJlEucHVzaChObygieDpGbWxhTGluayIsUy5saW5rKSksUy52YWwmJlEucHVzaChObygiUmFkaW8iPT1TWyIhdHlwZSJdfHwiQ2hlY2tib3giPT1TWyIhdHlwZSJdPyJ4OkNo'@;
put 'ZWNrZWQiOiJ4OlZhbCIsU3RyaW5nKFMudmFsKSkpLFMucmVmJiZRLnB1c2goTm8oIng6Rm1sYVJhbmdlIixTLnJlZikpLFMuc2VsJiYiTGlzdCI9PVNbIiF0eXBlIl0mJlEucHVzaChObygieDpTZWxUeXBlIixTLnNlbCkpLFMubWluJiZRLnB1c2goTm8oIng6TWluIixTdHJpbmcoUy5taW4p'@;
put 'KSksUy5tYXgmJlEucHVzaChObygieDpNYXgiLFN0cmluZyhTLm1heCkpKSxTLnN0ZXAmJlEucHVzaChObygieDpJbmMiLFN0cmluZyhTLnN0ZXApKSksUy5wYWdlJiZRLnB1c2goTm8oIng6UGFnZSIsU3RyaW5nKFMucGFnZSkpKSxbXS5jb25jYXQoWyI8djpzaGFwZSIrSXUoaykrIj4iXSku'@;
put 'Y29uY2F0KEZDW1NbIiF0eXBlIl1dfHxbXSkuY29uY2F0KFtHXSkuY29uY2F0KFsnPHg6Q2xpZW50RGF0YSBPYmplY3RUeXBlPSInK1NbIiF0eXBlIl0rJyI+JyxObygieDpBbmNob3IiLGxCKFNbIiFwb3MiXSkpLE5vKCJ4OlByaW50T2JqZWN0IiwiRmFsc2UiKV0pLmNvbmNhdChRKS5jb25j'@;
put 'YXQoYkJbU1siIXR5cGUiXV18fFtdKS5jb25jYXQoWyI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il0pfShOZSxwZSkpfSk7dmFyIFBlPVJ8fFtdO3JldHVybiBQZS5sZW5ndGg+MCYmZ2UucHVzaChQcigidjpzaGFwZXR5cGUiLFtQcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToi'@;
put 'bWl0ZXIifSksUHIoInY6cGF0aCIsbnVsbCx7Z3JhZGllbnRzaGFwZW9rOiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDIiLGNvb3Jkc2l6ZTpRLmpvaW4oIiwiKSwibzpzcHQiOjIwMixwYXRoOmFlfSkpLFBlLmZvckVhY2goZnVuY3Rpb24o'@;
put 'TmUpeysrcGUsZ2U9Z2UuY29uY2F0KGZ1bmN0aW9uIHF2KFMsUixrKXt2YXIgRz1OYShTWzBdKSxRPVNbMV0uZmlsbHx8e307U1sxXS5zJiYoUT17dHlwZTpTWzFdLnMucGF0dGVyblR5cGV8fCJzb2xpZCJ9LFNbMV0ucy5mZ0NvbG9yJiYoUS5jb2xvcjI9US5jb2xvcjE9IiMiK08wKFNbMV0u'@;
put 'cy5mZ0NvbG9yLnJnYikpLFNbMV0ucy5iZ0NvbG9yJiYoUS5jb2xvcjI9IiMiK08wKFNbMV0ucy5iZ0NvbG9yLnJnYikpKTt2YXIgYWU9e2NvbG9yMjpRLmNvbG9yMnx8IiNCRUZGODIiLHR5cGU6US50eXBlfHwiZ3JhZGllbnQifTsiZ3JhZGllbnQiPT1hZS50eXBlJiYoYWUuYW5nbGU9Ii0x'@;
put 'ODAiKTt2YXIgZ2U9ImdyYWRpZW50Ij09YWUudHlwZT9QcigibzpmaWxsIixudWxsLHt0eXBlOiJncmFkaWVudFVuc2NhbGVkIiwidjpleHQiOiJ2aWV3In0pOm51bGwscGU9UHIoInY6ZmlsbCIsZ2UsYWUpLHllPXt9O1NbMV0uc2hhZG93JiYoU1sxXS5zaGFkb3cuY29sb3ImJih5ZS5jb2xv'@;
put 'cj1TWzFdLnNoYWRvdy5jb2xvciksU1sxXS5zaGFkb3cub24mJih5ZS5vbj1TWzFdLnNoYWRvdy5vbikpLHllLm9ic2N1cmVkPSJ0Ijt2YXIgUGU9ITAsTmU9ITAsWWU9U1sxXVsiIXBvcyJdP3F0KFNbMV1bIiFwb3MiXSk6bnVsbDtyZXR1cm4gWWUmJihOZT1udWxsPT1ZZS5SJiZudWxsPT1Z'@;
put 'ZS5DJiZudWxsPT1ZZS5YJiZudWxsPT1ZZS5ZLFBlPSFZZS5yJiYhWWUuYyxzQihZZSwwLGspKSxbIjx2OnNoYXBlIitJdSh7aWQ6Il94MDAwMF9zIitSLHR5cGU6IiNfeDAwMDBfdDIwMiIsc3R5bGU6InBvc2l0aW9uOmFic29sdXRlOyBtYXJnaW4tbGVmdDo4MHB0O21hcmdpbi10b3A6NXB0'@;
put 'O3dpZHRoOjEwNHB0O2hlaWdodDo2NHB0O3otaW5kZXg6MTAiKyhTWzFdLmhpZGRlbj8iO3Zpc2liaWxpdHk6aGlkZGVuIjoiIiksZmlsbGNvbG9yOlEuY29sb3IxfHwiI0VDRkFENCIsc3Ryb2tlY29sb3I6KFNbMV0uc3Ryb2tlfHx7fSkuY29sb3J8fCIjZWRlYWExIn0pKyI+IixwZSxQcigi'@;
put 'djpzaGFkb3ciLG51bGwseWUpLFByKCJ2OnBhdGgiLG51bGwseyJvOmNvbm5lY3R0eXBlIjoibm9uZSJ9KSwnPHY6dGV4dGJveD48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvZGl2Pjwvdjp0ZXh0Ym94PicsJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iTm90ZSI+JyxQZT8iPHg6'@;
put 'TW92ZVdpdGhDZWxscy8+IjoiIixOZT8iPHg6U2l6ZVdpdGhDZWxscy8+IjoiIixObygieDpBbmNob3IiLFllP2xCKFllKTpTWzFdLnJhd2FuY2hvcnx8W0cuYysxLDAsRy5yKzEsMCxHLmMrMywyMCxHLnIrNSwyMF0uam9pbigiLCIpKSxObygieDpBdXRvRmlsbCIsIkZhbHNlIiksTm8oIng6'@;
put 'Um93IixTdHJpbmcoRy5yKSksTm8oIng6Q29sdW1uIixTdHJpbmcoRy5jKSksU1sxXS5oaWRkZW4/IiI6Ijx4OlZpc2libGUvPiIsIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXX0oTmUscGUsRykpfSksZ2UucHVzaCgiPC94bWw+IiksZ2Uuam9pbigiIil9dmFyIGJCPXtCdXR0b246'@;
put 'WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpUZXh0SEFsaWduPkNlbnRlcjwveDpUZXh0SEFsaWduPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+Il0sR0JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9G'@;
put 'aWxsPiIsIjx4Ok5vVGhyZWVELz4iXSxMYWJlbDpbIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiJdLFJhZGlvOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0'@;
put 'b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sQ2hlY2tib3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwv'@;
put 'eDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxEcm9wOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpTZWxUeXBlPlNpbmdsZTwv'@;
put 'eDpTZWxUeXBlPiIsIjx4OkRyb3BTdHlsZT5Db21ibzwveDpEcm9wU3R5bGU+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6RHJvcExpbmVzPjQ8L3g6RHJvcExpbmVzPiJdLExpc3Q6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8'@;
put 'eDpOb1RocmVlRDIvPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4OlZhbD4wPC94OlZhbD4iLCI8eDpNaW4+MDwveDpNaW4+IiwiPHg6TWF4PjU8L3g6TWF4PiIsIjx4OkluYz4xPC94OkluYz4iLCI8eDpQYWdlPjQ8L3g6UGFnZT4iLCI8eDpEeD4xNTwveDpEeD4iXSxTY3JvbGw6WyI8'@;
put 'eDpTaXplV2l0aENlbGxzLz4iLCI8eDpIb3Jpei8+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU3BpbjpbIjx4OkR4PjE1PC94OkR4PiJdfSxQQz17QnV0dG9uOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0'@;
put 'LWFsaWduOmNlbnRlcic+PGZvbnQgZmFjZT0nQ2FsaWJyaScgc2l6ZT0nMjQwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLEdCb3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYg'@;
put 'c3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLFJhZGlvOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmds'@;
put 'ZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9J2F1dG8nPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixMYWJlbDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6'@;
put 'YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsQ2hlY2tib3g6Ijx2OnRleHRib3ggc3R5bGU9'@;
put 'J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLHNoZWV0anM6'@;
put 'ImRhZnVxIn0sRkM9e0J1dHRvbjpbJzx2OmZpbGwgY29sb3IyPSIjZjBmMGYwIFs2N10iIG86ZGV0ZWN0bW91c2VjbGljaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sR0JveDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sRHJv'@;
put 'cDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGlzdDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU3BpbjpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU2Nyb2xs'@;
put 'OlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiIHRleHQ9InQiLz4nXSxMYWJlbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sUmFkaW86Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4'@;
put 'dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxDaGVja2JveDpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLHNoZWV0anM6W119O2Z1bmN0aW9uIE5rKFMsUixrLEcpe3ZhciBRPXsi'@;
put 'IWlkIjp7fX0sYWU9W1ByKCJ4bWwiLG51bGwseyJ4bWxuczp2Ijp5bC52LCJ4bWxuczpvIjp5bC5vLCJ4bWxuczp4Ijp5bC54fSkucmVwbGFjZSgvXC8+LywiPiIpLFByKCJvOnNoYXBlbGF5b3V0IixQcigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsZGF0YToxfSkseyJ2OmV4dCI6'@;
put 'ImVkaXQifSksJzx2OnNoYXBldHlwZSBpZD0iX3gwMDAwX3Q3NSIgY29vcmRzaXplPSIyMTYwMCwyMTYwMCIgbzpzcHQ9Ijc1IiBvOnByZWZlcnJlbGF0aXZlPSJ0IiBwYXRoPSJtQDRANWxANEAxMUA5QDExQDlANXhlIiBmaWxsZWQ9ImYiIHN0cm9rZWQ9ImYiPicsJzx2OnN0cm9rZSBqb2lu'@;
put 'c3R5bGU9Im1pdGVyIi8+JywiPHY6Zm9ybXVsYXM+IiwnPHY6ZiBlcW49ImlmIGxpbmVEcmF3biBwaXhlbExpbmVXaWR0aCAwIi8+JywnPHY6ZiBlcW49InN1bSBAMCAxIDAiLz4nLCc8djpmIGVxbj0ic3VtIDAgMCBAMSIvPicsJzx2OmYgZXFuPSJwcm9kIEAyIDEgMiIvPicsJzx2OmYgZXFu'@;
put 'PSJwcm9kIEAzIDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMCAxIi8+JywnPHY6ZiBlcW49InByb2QgQDYgMSAyIi8+JywnPHY6ZiBlcW49InByb2QgQDcgMjE2MDAgcGl4ZWxXaWR0aCIvPics'@;
put 'Jzx2OmYgZXFuPSJzdW0gQDggMjE2MDAgMCIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsSGVpZ2h0Ii8+JywnPHY6ZiBlcW49InN1bSBAMTAgMjE2MDAgMCIvPicsIjwvdjpmb3JtdWxhcz4iLCc8djpwYXRoIG86ZXh0cnVzaW9ub2s9ImYiIGdyYWRpZW50c2hhcGVvaz0idCIg'@;
put 'bzpjb25uZWN0dHlwZT0icmVjdCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIGFzcGVjdHJhdGlvPSJ0Ii8+JywiPC92OnNoYXBldHlwZT4iXSxnZT0xO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihwZSl7R1twZV0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFj'@;
put 'aChmdW5jdGlvbih5ZSl7R1twZV1beWVdJiZbImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oUGUpe2lmKEFycmF5LmlzQXJyYXkoR1twZV1beWVdW1BlXSkpZm9yKHZhciBOZT0wO05lPEdbcGVdW3llXVtQZV0ubGVuZ3RoOysrTmUpaWYoR1twZV1beWVdW1BlXVtO'@;
put 'ZV0pe3ZhciBZZT1HW3BlXVt5ZV1bUGVdW05lXTtpZigicmVtb3RlIj09WWVbIiFkYXRhdHlwZSJdKXRocm93IkNhbm5vdCB1c2UgbGlua2VkIGltYWdlIGluIGhlYWRlciBvciBmb290ZXIiO2Zvcig7cmkoUywieGwvbWVkaWEvaW1hZ2UiK2dlKyIuanBnIik7KSsrZ2U7Uy5maWxlKCJ4bC9t'@;
put 'ZWRpYS9pbWFnZSIrZ2UrIi5qcGciLHNuZShZZSkse2JpbmFyeTohMH0pLEVyKFEsLTEsIi4uL21lZGlhL2ltYWdlIitnZSsiLmpwZyIscW8uSU1HKTt2YXIgZXQ9Il94MDAwMF9zIisoMTAyNStZZS5fY250KSxjdD0icG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9w'@;
put 'OjA7ei1pbmRleDoiKyhZZS5fY250KzEpKyI7IjtjdCs9IndpZHRoOiIrWWVbIiFwb3MiXS53KyJweDsiLGN0Kz0iaGVpZ2h0OiIrWWVbIiFwb3MiXS5oKyJweDsiO3ZhciBFdD1QZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTsib2RkIiE9PXll'@;
put 'JiYoRXQrPXllLnRvVXBwZXJDYXNlKCkpLEdbcGVdW3llXVtQZV0ubGVuZ3RoPjEmJihFdCs9TmUpLGFlLnB1c2goUHIoInY6c2hhcGUiLFsnPHY6aW1hZ2VkYXRhIG86cmVsaWQ9InJJZCcrKFllLl9jbnQrMSkrJyIgbzp0aXRsZT0ic2hlZXRqcyIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQi'@;
put 'IHJvdGF0aW9uPSJ0Ii8+J10uam9pbigiIikse2lkOkV0LCJvOnNwaWQiOmV0LHR5cGU6IiNfeDAwMDBfdDc1IixzdHlsZTpjdH0pKX19KX0pfSksYWUucHVzaCgiPC94bWw+IiksUy5maWxlKCJ4bC9kcmF3aW5ncy92bWxEcmF3aW5nIitrKyJIRi52bWwiLGFlLmpvaW4oIiIpKSxTLmZpbGUo'@;
put 'InhsL2RyYXdpbmdzL19yZWxzL3ZtbERyYXdpbmciK2srIkhGLnZtbC5yZWxzIixraShRKSl9cW8uQ01OVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb21tZW50cyI7dmFyIFh2PVByKCJjb21tZW50cyIsbnVs'@;
put 'bCx7eG1sbnM6WWkubWFpblswXX0pO2Z1bmN0aW9uIEhDKFMpe3ZhciBSPVtJaSxYdl0saz1bXTtyZXR1cm4gUi5wdXNoKCI8YXV0aG9ycz4iKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBhZT1McihRLmEpO2suaW5kZXhPZihhZSk+LTF8fChr'@;
put 'LnB1c2goYWUpLFIucHVzaCgiPGF1dGhvcj4iK2FlKyI8L2F1dGhvcj4iKSl9KX0pLFIucHVzaCgiPC9hdXRob3JzPiIpLFIucHVzaCgiPGNvbW1lbnRMaXN0PiIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24oUSl7Ui5wdXNoKCc8Y29tbWVudCByZWY9Iicr'@;
put 'R1swXSsnIiBhdXRob3JJZD0iJytrLmluZGV4T2YoTHIoUS5hKSkrJyI+PHRleHQ+JyksUi5wdXNoKFEuUj9KcyhRLlIpOk5vKCJ0IixudWxsPT1RLnQ/IiI6THIoUS50KSkpLFIucHVzaCgiPC90ZXh0PjwvY29tbWVudD4iKX0pfSksUi5wdXNoKCI8L2NvbW1lbnRMaXN0PiIpLFIubGVuZ3Ro'@;
put 'PjImJihSW1IubGVuZ3RoXT0iPC9jb21tZW50cz4iLFJbMV09UlsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUi5qb2luKCIiKX12YXIgX0I9cHU7ZnVuY3Rpb24gTkMoUyl7dmFyIFI9dmkoKSxrPVtdO3JldHVybiBGcihSLCJCcnRCZWdpbkNvbW1lbnRzIiksRnIoUiwiQnJ0QmVnaW5Db21tZW50'@;
put 'QXV0aG9ycyIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24oUSl7ay5pbmRleE9mKFEuYSk+LTF8fChrLnB1c2goUS5hLnNsaWNlKDAsNTQpKSxGcihSLCJCcnRDb21tZW50QXV0aG9yIixmdW5jdGlvbiBsbmUoUyl7cmV0dXJuIFBjKFMuc2xpY2UoMCw1NCkp'@;
put 'fShRLmEpKSl9KX0pLEZyKFIsIkJydEVuZENvbW1lbnRBdXRob3JzIiksRnIoUiwiQnJ0QmVnaW5Db21tZW50TGlzdCIpLFMuZm9yRWFjaChmdW5jdGlvbihHKXtHWzFdLmZvckVhY2goZnVuY3Rpb24oUSl7US5pYXV0aG9yPWsuaW5kZXhPZihRLmEpO3ZhciBhZT17czpOYShHWzBdKSxlOk5h'@;
put 'KEdbMF0pfTtGcihSLCJCcnRCZWdpbkNvbW1lbnQiLGZ1bmN0aW9uIHlCKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDM2KSksUi53cml0ZV9zaGlmdCg0LFNbMV0uaWF1dGhvciksaGYoU1swXSxSKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hp'@;
put 'ZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUn0oW2FlLFFdKSksUS50JiZRLnQubGVuZ3RoPjAmJkZyKFIsIkJydENvbW1lbnRUZXh0IixmdW5jdGlvbiByaChTLFIpe3ZhciBrPSExO3JldHVybiBudWxsPT1SJiYoaz0hMCxSPWJuKDIzKzQqUy50Lmxlbmd0aCkpLFIud3JpdGVfc2hpZnQo'@;
put 'MSwxKSxQYyhTLnQsUiksUi53cml0ZV9zaGlmdCg0LDEpLGZ1bmN0aW9uIHN2KFMsUil7Unx8KFI9Ym4oNCkpLFIud3JpdGVfc2hpZnQoMixTLmljaHx8MCksUi53cml0ZV9zaGlmdCgyLFMuaWZudHx8MCl9KHtpY2g6MCxpZm50OjB9LFIpLGs/Ui5zbGljZSgwLFIubCk6Un0oUSkpLEZyKFIs'@;
put 'IkJydEVuZENvbW1lbnQiKSxkZWxldGUgUS5pYXV0aG9yfSl9KSxGcihSLCJCcnRFbmRDb21tZW50TGlzdCIpLEZyKFIsIkJydEVuZENvbW1lbnRzIiksUi5lbmQoKX12YXIgams9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsWms9WyJ4bHNiIiwieGxzbSIsInhsYW0i'@;
put 'LCJiaWZmOCIsInhsYSJdO3FvLkRTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0Iixxby5NUz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBz'@;
put 'L3hsTWFjcm9zaGVldCI7dmFyIEY1PWZ1bmN0aW9uKCl7dmFyIFM9LyhefFteQS1aYS16X10pUihcWz8tP1xkK1xdfFsxLTldXGQqfClDKFxbPy0/XGQrXF18WzEtOV1cZCp8KSg/IVtBLVphLXowLTlfXSkvZyxSPXtyOjAsYzowfTtmdW5jdGlvbiBrKEcsUSxhZSxnZSl7dmFyIHBlPSExLHll'@;
put 'PSExOzA9PWFlLmxlbmd0aD95ZT0hMDoiWyI9PWFlLmNoYXJBdCgwKSYmKHllPSEwLGFlPWFlLnNsaWNlKDEsLTEpKSwwPT1nZS5sZW5ndGg/cGU9ITA6IlsiPT1nZS5jaGFyQXQoMCkmJihwZT0hMCxnZT1nZS5zbGljZSgxLC0xKSk7dmFyIFBlPWFlLmxlbmd0aD4wPzB8cGFyc2VJbnQoYWUs'@;
put 'MTApOjAsTmU9Z2UubGVuZ3RoPjA/MHxwYXJzZUludChnZSwxMCk6MDtyZXR1cm4gcGU/TmUrPVIuYzotLU5lLHllP1BlKz1SLnI6LS1QZSxRKyhwZT8iIjoiJCIpK0FvKE5lKSsoeWU/IiI6IiQiKStqaShQZSl9cmV0dXJuIGZ1bmN0aW9uKFEsYWUpe3JldHVybiBSPWFlLFEucmVwbGFjZShT'@;
put 'LGspfX0oKSxtMj0vKF58W14uX0EtWjAtOV0pKFskXT8pKFtBLVpdezEsMn18W0EtV11bQS1aXXsyfXxYW0EtRV1bQS1aXXxYRltBLURdKShbJF0/KSgxMFswLTNdXGR7NH18MTA0WzAtN11cZHszfXwxMDQ4WzAtNF1cZHsyfXwxMDQ4NVswLTZdXGR8MTA0ODU3WzAtNl18WzEtOV1cZHswLDV9'@;
put 'KSg/IVtfLlwoQS1aYS16MC05XSkvZyxIND1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihSLGspe3JldHVybiBSLnJlcGxhY2UobTIsZnVuY3Rpb24oRyxRLGFlLGdlLHBlLHllKXt2YXIgUGU9U28oZ2UpLShhZT8wOmsuYyksTmU9X2EoeWUpLShwZT8wOmsucik7cmV0dXJuIFErIlIiKygw'@;
put 'PT1OZT8iIjpwZT9OZSsxOiJbIitOZSsiXSIpKyJDIisoMD09UGU/IiI6YWU/UGUrMToiWyIrUGUrIl0iKX0pfX0oKTtmdW5jdGlvbiBXayhTLFIpe3JldHVybiBTLnJlcGxhY2UobTIsZnVuY3Rpb24oayxHLFEsYWUsZ2UscGUpe3JldHVybiBHKygiJCI9PVE/USthZTpBbyhTbyhhZSkrUi5j'@;
put 'KSkrKCIkIj09Z2U/Z2UrcGU6amkoX2EocGUpK1IucikpfSkucmVwbGFjZSgvKFxkKyk6KFxkKykvZyxmdW5jdGlvbihrLEcsUSl7cmV0dXJuIGppKF9hKEcpK1IucikrIjoiK2ppKF9hKFEpK1Iucil9KX1mdW5jdGlvbiBjbmUoUyxSLGspe3ZhciBRPVNzKFIpLnMsYWU9TmEoayk7cmV0dXJu'@;
put 'IFdrKFMse3I6YWUuci1RLnIsYzphZS5jLVEuY30pfWZ1bmN0aW9uIHhCKFMpe3JldHVybiBTLnJlcGxhY2UoL194bGZuXC4vZywiIil9ZnVuY3Rpb24gdnUoUyl7Uy5sKz0xfWZ1bmN0aW9uIE40KFMsUil7dmFyIGs9Uy5yZWFkX3NoaWZ0KDE9PVI/MToyKTtyZXR1cm5bMTYzODMmayxrPj4x'@;
put 'NCYxLGs+PjE1JjFdfWZ1bmN0aW9uIFZDKFMsUixrKXt2YXIgRz0yO2lmKGspe2lmKGsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiBZayhTKTsxMj09ay5iaWZmJiYoRz00KX12YXIgUT1TLnJlYWRfc2hpZnQoRyksYWU9Uy5yZWFkX3NoaWZ0KEcpLGdlPU40KFMsMikscGU9TjQoUywyKTty'@;
put 'ZXR1cm57czp7cjpRLGM6Z2VbMF0sY1JlbDpnZVsxXSxyUmVsOmdlWzJdfSxlOntyOmFlLGM6cGVbMF0sY1JlbDpwZVsxXSxyUmVsOnBlWzJdfX19ZnVuY3Rpb24gWWsoUyl7dmFyIFI9TjQoUywyKSxrPU40KFMsMiksRz1TLnJlYWRfc2hpZnQoMSksUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJu'@;
put 'e3M6e3I6UlswXSxjOkcsY1JlbDpSWzFdLHJSZWw6UlsyXX0sZTp7cjprWzBdLGM6USxjUmVsOmtbMV0sclJlbDprWzJdfX19ZnVuY3Rpb24gR2soUyxSLGspe2lmKGsmJmsuYmlmZj49MiYmay5iaWZmPD01KXJldHVybiBmdW5jdGlvbiBUQihTKXt2YXIgUj1ONChTLDIpLGs9Uy5yZWFkX3No'@;
put 'aWZ0KDEpO3JldHVybntyOlJbMF0sYzprLGNSZWw6UlsxXSxyUmVsOlJbMl19fShTKTt2YXIgRz1TLnJlYWRfc2hpZnQoayYmMTI9PWsuYmlmZj80OjIpLFE9TjQoUywyKTtyZXR1cm57cjpHLGM6UVswXSxjUmVsOlFbMV0sclJlbDpRWzJdfX1mdW5jdGlvbiBCQyhTKXt2YXIgUj1TLnJlYWRf'@;
put 'c2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue3I6UixjOjI1NSZrLGZRdW90ZWQ6ISEoMTYzODQmayksY1JlbDprPj4xNSxyUmVsOms+PjE1fX1mdW5jdGlvbiBKayhTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gWkMoUyxSKXt2YXIg'@;
put 'az1bUy5yZWFkX3NoaWZ0KDEpXTtpZigxMj09Uilzd2l0Y2goa1swXSl7Y2FzZSAyOmtbMF09NDticmVhaztjYXNlIDQ6a1swXT0xNjticmVhaztjYXNlIDA6a1swXT0xO2JyZWFrO2Nhc2UgMTprWzBdPTJ9c3dpdGNoKGtbMF0pe2Nhc2UgNDprWzFdPWRhKFMsMSk/IlRSVUUiOiJGQUxTRSIs'@;
put 'MTIhPVImJihTLmwrPTcpO2JyZWFrO2Nhc2UgMzc6Y2FzZSAxNjprWzFdPU1jW1NbUy5sXV0sUy5sKz0xMj09Uj80Ojg7YnJlYWs7Y2FzZSAwOlMubCs9ODticmVhaztjYXNlIDE6a1sxXT1QbChTKTticmVhaztjYXNlIDI6a1sxXT1YMChTLDAse2JpZmY6Uj4wJiZSPDg/MjpSfSk7YnJlYWs7'@;
put 'ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBTZXJBcjogIitrWzBdKX1yZXR1cm4ga31mdW5jdGlvbiBuRChTLFIsayl7Zm9yKHZhciBHPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6MiksUT1bXSxhZT0wO2FlIT1HOysrYWUpUS5wdXNoKCgxMj09ay5iaWZmP2d1OnMyKShTLDgpKTty'@;
put 'ZXR1cm4gUX1mdW5jdGlvbiBIQihTLFIsayl7dmFyIEc9MCxRPTA7MTI9PWsuYmlmZj8oRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCkpOihRPTErUy5yZWFkX3NoaWZ0KDEpLEc9MStTLnJlYWRfc2hpZnQoMikpLGsuYmlmZj49MiYmay5iaWZmPDgmJigtLUcsMD09LS1RJiYo'@;
put 'UT0yNTYpKTtmb3IodmFyIGFlPTAsZ2U9W107YWUhPUcmJihnZVthZV09W10pOysrYWUpZm9yKHZhciBwZT0wO3BlIT1ROysrcGUpZ2VbYWVdW3BlXT1aQyhTLGsuYmlmZik7cmV0dXJuIGdlfWZ1bmN0aW9uIE41KFMsUixrKXtyZXR1cm4gUy5sKz0yLFtCQyhTKV19ZnVuY3Rpb24gV0MoUyl7'@;
put 'cmV0dXJuIFMubCs9NixbXX12YXIgWkI9TjUsV0I9V0MsWUI9V0MsR0I9TjU7ZnVuY3Rpb24gaUQoUyl7cmV0dXJuIFMubCs9MixbRWMoUyksMSZTLnJlYWRfc2hpZnQoMildfXZhciBZQz1ONSxibmU9aUQseW5lPVdDLEdDPU41LF9uZT1ONSx3bmU9WyJEYXRhIiwiQWxsIiwiSGVhZGVycyIs'@;
put 'Ij8/IiwiP0RhdGEyIiwiPz8iLCI/RGF0YUhlYWRlcnMiLCI/PyIsIlRvdGFscyIsIj8/IiwiPz8iLCI/PyIsIj9EYXRhVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0N1cnJlbnQiXSxuYj17MTp7bjoiUHRnRXhwIixmOmZ1bmN0aW9uIE9CKFMsUixrKXtyZXR1cm4gUy5sKyssayYmMTI9PWsu'@;
put 'YmlmZj9bUy5yZWFkX3NoaWZ0KDQsImkiKSwwXTpbUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwyOntuOiJQdGdUYmwiLGY6SW59LDM6e246IlB0Z0FkZCIsZjp2dX0sNDp7bjoiUHRnU3ViIixmOnZ1fSw1OntuOiJQdGdNdWwiLGY6dnV9LDY6e246'@;
put 'IlB0Z0RpdiIsZjp2dX0sNzp7bjoiUHRnUG93ZXIiLGY6dnV9LDg6e246IlB0Z0NvbmNhdCIsZjp2dX0sOTp7bjoiUHRnTHQiLGY6dnV9LDEwOntuOiJQdGdMZSIsZjp2dX0sMTE6e246IlB0Z0VxIixmOnZ1fSwxMjp7bjoiUHRnR2UiLGY6dnV9LDEzOntuOiJQdGdHdCIsZjp2dX0sMTQ6e246'@;
put 'IlB0Z05lIixmOnZ1fSwxNTp7bjoiUHRnSXNlY3QiLGY6dnV9LDE2OntuOiJQdGdVbmlvbiIsZjp2dX0sMTc6e246IlB0Z1JhbmdlIixmOnZ1fSwxODp7bjoiUHRnVXBsdXMiLGY6dnV9LDE5OntuOiJQdGdVbWludXMiLGY6dnV9LDIwOntuOiJQdGdQZXJjZW50IixmOnZ1fSwyMTp7bjoiUHRn'@;
put 'UGFyZW4iLGY6dnV9LDIyOntuOiJQdGdNaXNzQXJnIixmOnZ1fSwyMzp7bjoiUHRnU3RyIixmOmZ1bmN0aW9uIEZCKFMsUixrKXtyZXR1cm4gUy5sKyssWm8oUywwLGspfX0sMjY6e246IlB0Z1NoZWV0IixmOmZ1bmN0aW9uIE1uZShTLFIsayl7cmV0dXJuIFMubCs9NSxTLmwrPTIsUy5sKz0y'@;
put 'PT1rLmJpZmY/MTo0LFsiUFRHU0hFRVQiXX19LDI3OntuOiJQdGdFbmRTaGVldCIsZjpmdW5jdGlvbiAkQihTLFIsayl7cmV0dXJuIFMubCs9Mj09ay5iaWZmPzQ6NSxbIlBUR0VORFNIRUVUIl19fSwyODp7bjoiUHRnRXJyIixmOmZ1bmN0aW9uIFVDKFMpe3JldHVybiBTLmwrKyxNY1tTLnJl'@;
put 'YWRfc2hpZnQoMSldfX0sMjk6e246IlB0Z0Jvb2wiLGY6ZnVuY3Rpb24gSDUoUyl7cmV0dXJuIFMubCsrLDAhPT1TLnJlYWRfc2hpZnQoMSl9fSwzMDp7bjoiUHRnSW50IixmOmZ1bmN0aW9uIFBCKFMpe3JldHVybiBTLmwrKyxTLnJlYWRfc2hpZnQoMil9fSwzMTp7bjoiUHRnTnVtIixmOmZ1'@;
put 'bmN0aW9uIFY0KFMpe3JldHVybiBTLmwrKyxQbChTKX19LDMyOntuOiJQdGdBcnJheSIsZjpmdW5jdGlvbiBmbmUoUyxSLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjU7cmV0dXJuIFMubCs9Mj09ay5iaWZmPzY6MTI9PWsuYmlmZj8xNDo3LFtHXX19LDMzOntuOiJQdGdGdW5jIixmOmZ1bmN0'@;
put 'aW9uIFJCKFMsUixrKXt2YXIgRz0oOTYmU1tTLmxdKT4+NTtTLmwrPTE7dmFyIFE9Uy5yZWFkX3NoaWZ0KGsmJmsuYmlmZjw9Mz8xOjIpO3JldHVybltRQltRXSxoRFtRXSxHXX19LDM0OntuOiJQdGdGdW5jVmFyIixmOmZ1bmN0aW9uIExCKFMsUixrKXt2YXIgRz1TW1MubCsrXSxRPVMucmVh'@;
put 'ZF9zaGlmdCgxKSxhZT1rJiZrLmJpZmY8PTM/Wzg4PT1HPy0xOjAsUy5yZWFkX3NoaWZ0KDEpXTpmdW5jdGlvbiB0RChTKXtyZXR1cm5bU1tTLmwrMV0+PjcsMzI3NjcmUy5yZWFkX3NoaWZ0KDIpXX0oUyk7cmV0dXJuW1EsKDA9PT1hZVswXT9oRDpyUylbYWVbMV1dXX19LDM1OntuOiJQdGdO'@;
put 'YW1lIixmOmZ1bmN0aW9uIE5CKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoMSk+Pj41JjMsYWU9Uy5yZWFkX3NoaWZ0KCFrfHxrLmJpZmY+PTg/NDoyKTtzd2l0Y2goay5iaWZmKXtjYXNlIDI6Uy5sKz01O2JyZWFrO2Nhc2UgMzpjYXNlIDQ6Uy5sKz04O2JyZWFrO2Nhc2UgNTpTLmwrPTEy'@;
put 'fXJldHVybltHLDAsYWVdfX0sMzY6e246IlB0Z1JlZiIsZjpmdW5jdGlvbiBJQihTLFIsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7cmV0dXJuIFMubCs9MSxbRyxHayhTLDAsayldfX0sMzc6e246IlB0Z0FyZWEiLGY6ZnVuY3Rpb24gJGsoUyxSLGspe3JldHVyblsoOTYmU1tTLmwrK10pPj41'@;
put 'LFZDKFMsMCxrKV19fSwzODp7bjoiUHRnTWVtQXJlYSIsZjpmdW5jdGlvbiByRChTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBTLmwrPWsmJjI9PWsuYmlmZj8zOjQsW0csUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDM5OntuOiJQdGdNZW1FcnIi'@;
put 'LGY6SW59LDQwOntuOiJQdGdNZW1Ob01lbSIsZjpJbn0sNDE6e246IlB0Z01lbUZ1bmMiLGY6ZnVuY3Rpb24gbW5lKFMsUixrKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSw0Mjp7bjoiUHRnUmVmRXJyIixmOmZ1bmN0aW9u'@;
put 'IHZuZShTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBTLmwrPTQsay5iaWZmPDgmJlMubC0tLDEyPT1rLmJpZmYmJihTLmwrPTIpLFtHXX19LDQzOntuOiJQdGdBcmVhRXJyIixmOmZ1bmN0aW9uIHFrKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41O3JldHVy'@;
put 'biBTLmwrPWsmJmsuYmlmZj44PzEyOmsuYmlmZjw4PzY6OCxbR119fSw0NDp7bjoiUHRnUmVmTiIsZjpmdW5jdGlvbiBRayhTLFIsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBRPWZ1bmN0aW9uIERmKFMsUixrKXt2YXIgRz1rJiZrLmJpZmY/ay5iaWZmOjg7aWYoRz49MiYm'@;
put 'Rzw9NSlyZXR1cm4gZnVuY3Rpb24gaTgoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDEpLEc9KDMyNzY4JlIpPj4xNSxRPSgxNjM4NCZSKT4+MTQ7cmV0dXJuIFImPTE2MzgzLDE9PUcmJlI+PTgxOTImJihSLT0xNjM4NCksMT09USYmaz49MTI4JiYoay09MjU2KSx7'@;
put 'cjpSLGM6ayxjUmVsOlEsclJlbDpHfX0oUyk7dmFyIFE9Uy5yZWFkX3NoaWZ0KEc+PTEyPzQ6MiksYWU9Uy5yZWFkX3NoaWZ0KDIpLGdlPSgxNjM4NCZhZSk+PjE0LHBlPSgzMjc2OCZhZSk+PjE1O2lmKGFlJj0xNjM4MywxPT1wZSlmb3IoO1E+NTI0Mjg3OylRLT0xMDQ4NTc2O2lmKDE9PWdl'@;
put 'KWZvcig7YWU+ODE5MTspYWUtPTE2Mzg0O3JldHVybntyOlEsYzphZSxjUmVsOmdlLHJSZWw6cGV9fShTLDAsayk7cmV0dXJuW0csUV19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gaG5lKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41LFE9ZnVuY3Rpb24gRUIoUyxSLGspe2lm'@;
put 'KGsuYmlmZjw4KXJldHVybiBZayhTKTt2YXIgRz1TLnJlYWRfc2hpZnQoMTI9PWsuYmlmZj80OjIpLFE9Uy5yZWFkX3NoaWZ0KDEyPT1rLmJpZmY/NDoyKSxhZT1ONChTLDIpLGdlPU40KFMsMik7cmV0dXJue3M6e3I6RyxjOmFlWzBdLGNSZWw6YWVbMV0sclJlbDphZVsyXX0sZTp7cjpRLGM6'@;
put 'Z2VbMF0sY1JlbDpnZVsxXSxyUmVsOmdlWzJdfX19KFMsMCxrKTtyZXR1cm5bRyxRXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBlYihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdCgyKV19fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0'@;
put 'aW9uIHRiKFMpe3JldHVybltTLnJlYWRfc2hpZnQoMSk+Pj41JjMsUy5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBWQihTLFIsayl7cmV0dXJuIDU9PWsuYmlmZj9mdW5jdGlvbiBCQihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk+Pj41JjMsaz1TLnJlYWRf'@;
put 'c2hpZnQoMiwiaSIpO1MubCs9ODt2YXIgRz1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9MTIsW1IsayxHXX0oUyk6W1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDQpXX19LDU4OntuOiJQdGdSZWYzZCIsZjpmdW5jdGlvbiBlRChTLFIsayl7'@;
put 'dmFyIEc9KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gayYmNT09ay5iaWZmJiYoUy5sKz0xMiksW0csUSxHayhTLDAsayldfX0sNTk6e246IlB0Z0FyZWEzZCIsZjpmdW5jdGlvbiBLayhTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPVMu'@;
put 'cmVhZF9zaGlmdCgyLCJpIik7aWYoayYmNT09PWsuYmlmZilTLmwrPTEyO3JldHVybltHLFEsVkMoUywwLGspXX19LDYwOntuOiJQdGdSZWZFcnIzZCIsZjpmdW5jdGlvbiBvOChTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NSxRPVMucmVhZF9zaGlmdCgyKSxhZT00O2lmKGspc3dpdGNo'@;
put 'KGsuYmlmZil7Y2FzZSA1OmFlPTE1O2JyZWFrO2Nhc2UgMTI6YWU9Nn1yZXR1cm4gUy5sKz1hZSxbRyxRXX19LDYxOntuOiJQdGdBcmVhRXJyM2QiLGY6ZnVuY3Rpb24gZG5lKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41LFE9Uy5yZWFkX3NoaWZ0KDIpLGFlPTg7aWYoaylzd2l0Y2go'@;
put 'ay5iaWZmKXtjYXNlIDU6Uy5sKz0xMixhZT02O2JyZWFrO2Nhc2UgMTI6YWU9MTJ9cmV0dXJuIFMubCs9YWUsW0csUV19fSwyNTU6e319LEtDPXs2NDozMiw5NjozMiw2NTozMyw5NzozMyw2NjozNCw5ODozNCw2NzozNSw5OTozNSw2ODozNiwxMDA6MzYsNjk6MzcsMTAxOjM3LDcwOjM4LDEw'@;
put 'MjozOCw3MTozOSwxMDM6MzksNzI6NDAsMTA0OjQwLDczOjQxLDEwNTo0MSw3NDo0MiwxMDY6NDIsNzU6NDMsMTA3OjQzLDc2OjQ0LDEwODo0NCw3Nzo0NSwxMDk6NDUsNzg6NDYsMTEwOjQ2LDc5OjQ3LDExMTo0Nyw4ODozNCwxMjA6MzQsODk6NTcsMTIxOjU3LDkwOjU4LDEyMjo1OCw5MTo1'@;
put 'OSwxMjM6NTksOTI6NjAsMTI0OjYwLDkzOjYxLDEyNTo2MX07IWZ1bmN0aW9uKCl7Zm9yKHZhciBTIGluIEtDKW5iW1NdPW5iW0tDW1NdXX0oKTt2YXIgcUM9ezE6e246IlB0Z0VsZkxlbCIsZjppRH0sMjp7bjoiUHRnRWxmUnciLGY6R0N9LDM6e246IlB0Z0VsZkNvbCIsZjpaQn0sNjp7bjoi'@;
put 'UHRnRWxmUndWIixmOl9uZX0sNzp7bjoiUHRnRWxmQ29sViIsZjpHQn0sMTA6e246IlB0Z0VsZlJhZGljYWwiLGY6WUN9LDExOntuOiJQdGdFbGZSYWRpY2FsUyIsZjp5bmV9LDEzOntuOiJQdGdFbGZDb2xTIixmOldCfSwxNTp7bjoiUHRnRWxmQ29sU1YiLGY6WUJ9LDE2OntuOiJQdGdFbGZS'@;
put 'YWRpY2FsTGVsIixmOmJuZX0sMjU6e246IlB0Z0xpc3QiLGY6ZnVuY3Rpb24gQ25lKFMpe1MubCs9Mjt2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1TLnJlYWRfc2hpZnQoMiksRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoMiksYWU9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntpeHRp'@;
put 'OlIsY29sdHlwZTozJmsscnQ6d25lW2s+PjImMzFdLGlkeDpHLGM6USxDOmFlfX19LDI5OntuOiJQdGdTeE5hbWUiLGY6ZnVuY3Rpb24gU25lKFMpe3JldHVybiBTLmwrPTIsW1MucmVhZF9zaGlmdCg0KV19fSwyNTU6e319LCQzPXswOntuOiJQdGdBdHRyTm9vcCIsZjpmdW5jdGlvbiAkQyhT'@;
put 'KXtyZXR1cm4gUy5sKz00LFswLDBdfX0sMTp7bjoiUHRnQXR0clNlbWkiLGY6ZnVuY3Rpb24gQUIoUyxSLGspe3ZhciBHPTI1NSZTW1MubCsxXT8xOjA7cmV0dXJuIFMubCs9ayYmMj09ay5iaWZmPzM6NCxbR119fSwyOntuOiJQdGdBdHRySWYiLGY6ZnVuY3Rpb24gZ25lKFMsUixrKXt2YXIg'@;
put 'Rz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPTIsW0csUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpXX19LDQ6e246IlB0Z0F0dHJDaG9vc2UiLGY6ZnVuY3Rpb24gekMoUyxSLGspe1MubCs9Mjtmb3IodmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpLFE9W10s'@;
put 'YWU9MDthZTw9RzsrK2FlKVEucHVzaChTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MikpO3JldHVybiBRfX0sODp7bjoiUHRnQXR0ckdvdG8iLGY6ZnVuY3Rpb24gcG5lKFMsUixrKXt2YXIgRz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPTIsW0csUy5yZWFkX3NoaWZ0KGsmJjI9'@;
put 'PWsuYmlmZj8xOjIpXX19LDE2OntuOiJQdGdBdHRyU3VtIixmOmZ1bmN0aW9uIFF2KFMsUixrKXtTLmwrPWsmJjI9PWsuYmlmZj8zOjR9fSwzMjp7bjoiUHRnQXR0ckJheGNlbCIsZjpmdW5jdGlvbiBqQyhTKXt2YXIgUj0xJlNbUy5sKzFdO3JldHVybiBTLmwrPTQsW1IsMV19fSw2NDp7bjoi'@;
put 'UHRnQXR0clNwYWNlIixmOmZ1bmN0aW9uIGtCKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoMiksSmsoUyl9fSw2NTp7bjoiUHRnQXR0clNwYWNlU2VtaSIsZjpmdW5jdGlvbiBEQihTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLEprKFMpfX0sMTI4OntuOiJQdGdBdHRySWZFcnJvciIsZjpmdW5j'@;
put 'dGlvbiBYayhTKXt2YXIgUj0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPTIsW1IsUy5yZWFkX3NoaWZ0KDIpXX19LDI1NTp7fX07ZnVuY3Rpb24gQjQoUyxSLGssRyxRKXtpZihHLmJpZmY8OClyZXR1cm4gSW4oUyxSKTtmb3IodmFyIGFlPVMubCtSLGdlPVtdLHBlPTA7cGUhPT1rLmxl'@;
put 'bmd0aDsrK3BlKXN3aXRjaChrW3BlXVswXSl7Y2FzZSJQdGdBcnJheSI6a1twZV1bMV09SEIoUywwLEcpLGdlLnB1c2goa1twZV1bMV0pO2JyZWFrO2Nhc2UiUHRnTWVtQXJlYSI6a1twZV1bMl09bkQoUywwLEcpLGdlLnB1c2goa1twZV1bMl0pO2JyZWFrO2Nhc2UiUHRnRXhwIjpHJiYxMj09'@;
put 'Ry5iaWZmJiYoa1twZV1bMV1bMV09Uy5yZWFkX3NoaWZ0KDQpLGdlLnB1c2goa1twZV1bMV0pKTticmVhaztjYXNlIlB0Z0xpc3QiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6dGhyb3ciVW5zdXBwb3J0ZWQgIitrW3BlXVswXX1yZXR1'@;
put 'cm4gUj1hZS1TLmwsIVEmJjAhPT1SJiZnZS5wdXNoKEluKFMsUikpLGdlfWZ1bmN0aW9uIGNoKFMsUixrKXtmb3IodmFyIFEsYWUsRz1TLmwrUixnZT1bXTtHIT1TLmw7KVI9Ry1TLmwsUT1uYlthZT1TW1MubF1dLCgyND09PWFlfHwyNT09PWFlKSYmKFE9KDI0PT09YWU/cUM6JDMpW1NbUy5s'@;
put 'KzFdXSksUSYmUS5mP2dlLnB1c2goW1EubixRLmYoUyxSLGspXSk6SW4oUyxSKTtyZXR1cm4gZ2V9ZnVuY3Rpb24gRjEoUyl7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoOysrayl7Zm9yKHZhciBHPVNba10sUT1bXSxhZT0wO2FlPEcubGVuZ3RoOysrYWUpe3ZhciBnZT1HW2FlXTtRLnB1'@;
put 'c2goZ2U/Mj09PWdlWzBdPyciJytnZVsxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOmdlWzFdOiIiKX1SLnB1c2goUS5qb2luKCIsIikpfXJldHVybiBSLmpvaW4oIjsiKX0kM1szM109JDNbMzJdO3ZhciB1aD17UHRnQWRkOiIrIixQdGdDb25jYXQ6IiYiLFB0Z0RpdjoiLyIsUHRnRXE6Ij0i'@;
put 'LFB0Z0dlOiI+PSIsUHRnR3Q6Ij4iLFB0Z0xlOiI8PSIsUHRnTHQ6IjwiLFB0Z011bDoiKiIsUHRnTmU6Ijw+IixQdGdQb3dlcjoiXiIsUHRnU3ViOiItIn0sb0Q9bmV3IFJlZ0V4cCgvW15cd1x1NEUwMC1cdTlGRkZcdTMwNDAtXHUzMEZGXS8pO2Z1bmN0aW9uIGFEKFMsUixrKXtpZighUyly'@;
put 'ZXR1cm4iU0gzM1RKU0VSUjAiO2lmKGsuYmlmZj44JiYoIVMuWFRJfHwhUy5YVElbUl0pKXJldHVybiBTLlNoZWV0TmFtZXNbUl07aWYoIVMuWFRJKXJldHVybiJTSDMzVEpTRVJSNiI7dmFyIEc9Uy5YVElbUl07aWYoay5iaWZmPDgpcmV0dXJuIFI+MWU0JiYoUi09NjU1MzYpLFI8MCYmKFI9'@;
put 'LVIpLDA9PVI/IiI6Uy5YVElbUi0xXTtpZighRylyZXR1cm4iU0gzM1RKU0VSUjEiO3ZhciBRPSIiO2lmKGsuYmlmZj44KXN3aXRjaChTW0dbMF1dWzBdKXtjYXNlIDM1NzpyZXR1cm4gUT0tMT09R1sxXT8iI1JFRiI6Uy5TaGVldE5hbWVzW0dbMV1dLEdbMV09PUdbMl0/UTpRKyI6IitTLlNo'@;
put 'ZWV0TmFtZXNbR1syXV07Y2FzZSAzNTg6cmV0dXJuIG51bGwhPWsuU0lEP1MuU2hlZXROYW1lc1trLlNJRF06IlNIMzNUSlNTQU1FIitTW0dbMF1dWzBdO2RlZmF1bHQ6cmV0dXJuIlNIMzNUSlNTUkMiK1NbR1swXV1bMF19c3dpdGNoKFNbR1swXV1bMF1bMF0pe2Nhc2UgMTAyNTpyZXR1cm4g'@;
put 'UT0tMT09R1sxXT8iI1JFRiI6Uy5TaGVldE5hbWVzW0dbMV1dfHwiU0gzM1RKU0VSUjMiLEdbMV09PUdbMl0/UTpRKyI6IitTLlNoZWV0TmFtZXNbR1syXV07Y2FzZSAxNDg0OTpyZXR1cm4gU1tHWzBdXS5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYWUpe3JldHVybiBhZS5OYW1lfSkuam9pbigi'@;
put 'OzsiKTtkZWZhdWx0OnJldHVybiBTW0dbMF1dWzBdWzNdPyhRPS0xPT1HWzFdPyIjUkVGIjpTW0dbMF1dWzBdWzNdW0dbMV1dfHwiU0gzM1RKU0VSUjQiLEdbMV09PUdbMl0/UTpRKyI6IitTW0dbMF1dWzBdWzNdW0dbMl1dKToiU0gzM1RKU0VSUjIifX1mdW5jdGlvbiBLQihTLFIsayl7cmV0'@;
put 'dXJuIGZ1bmN0aW9uIHhuZShTLFIpe2lmKCEoU3x8UiYmUi5iaWZmPD01JiZSLmJpZmY+PTIpKXRocm93IG5ldyBFcnJvcigiZW1wdHkgc2hlZXQgbmFtZSIpO3JldHVybi8jUkVGLy50ZXN0KFMpP1M6b0QudGVzdChTKT8iJyIrUysiJyI6U30oYUQoUyxSLGspLGspfWZ1bmN0aW9uIGEwKFMs'@;
put 'UixrLEcsUSxhZSl7dmFyIFBlLE5lLFllLEV0LGdlPVEmJlEuYmlmZnx8OCxwZT1hZSYmbnVsbCE9Uj9SOntzOntjOjAscjowfSxlOntjOjAscjowfX0seWU9W10sZXQ9MCxjdD0wLG90PSIiO2lmKCFTWzBdfHwhU1swXVswXSlyZXR1cm4iIjtmb3IodmFyIGJ0PS0xLGp0PSIiLGt0PTAsT3Q9'@;
put 'U1swXS5sZW5ndGg7a3Q8T3Q7KytrdCl7dmFyIEt0PVNbMF1ba3RdO3N3aXRjaChLdFswXSl7Y2FzZSJQdGdVbWludXMiOnllLnB1c2goIi0iK3llLnBvcCgpKTticmVhaztjYXNlIlB0Z1VwbHVzIjp5ZS5wdXNoKCIrIit5ZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdQZXJjZW50Ijp5ZS5wdXNo'@;
put 'KHllLnBvcCgpKyIlIik7YnJlYWs7Y2FzZSJQdGdBZGQiOmNhc2UiUHRnQ29uY2F0IjpjYXNlIlB0Z0RpdiI6Y2FzZSJQdGdFcSI6Y2FzZSJQdGdHZSI6Y2FzZSJQdGdHdCI6Y2FzZSJQdGdMZSI6Y2FzZSJQdGdMdCI6Y2FzZSJQdGdNdWwiOmNhc2UiUHRnTmUiOmNhc2UiUHRnUG93ZXIiOmNh'@;
put 'c2UiUHRnU3ViIjppZihQZT15ZS5wb3AoKSxOZT15ZS5wb3AoKSxidD49MCl7c3dpdGNoKFNbMF1bYnRdWzFdWzBdKXtjYXNlIDA6anQ9c2koIiAiLFNbMF1bYnRdWzFdWzFdKTticmVhaztjYXNlIDE6anQ9c2koIlxyIixTWzBdW2J0XVsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihqdD0iIixR'@;
put 'LldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK1NbMF1bYnRdWzFdWzBdKX1OZSs9anQsYnQ9LTF9eWUucHVzaChOZSt1aFtLdFswXV0rUGUpO2JyZWFrO2Nhc2UiUHRnSXNlY3QiOlBlPXllLnBvcCgpLE5lPXllLnBvcCgpLHllLnB1c2goTmUrIiAi'@;
put 'K1BlKTticmVhaztjYXNlIlB0Z1VuaW9uIjpQZT15ZS5wb3AoKSxOZT15ZS5wb3AoKSx5ZS5wdXNoKE5lKyIsIitQZSk7YnJlYWs7Y2FzZSJQdGdSYW5nZSI6UGU9eWUucG9wKCksTmU9eWUucG9wKCkseWUucHVzaChOZSsiOiIrUGUpO2JyZWFrO2Nhc2UiUHRnQXR0ckNob29zZSI6Y2FzZSJQ'@;
put 'dGdBdHRyR290byI6Y2FzZSJQdGdBdHRySWYiOmNhc2UiUHRnQXR0cklmRXJyb3IiOmNhc2UiUHRnQXR0ckJheGNlbCI6Y2FzZSJQdGdBdHRyU2VtaSI6Y2FzZSJQdGdNZW1BcmVhIjpjYXNlIlB0Z1RibCI6Y2FzZSJQdGdNZW1FcnIiOmNhc2UiUHRnTWVtQXJlYU4iOmNhc2UiUHRnTWVtTm9N'@;
put 'ZW1OIjpjYXNlIlB0Z0F0dHJOb29wIjpjYXNlIlB0Z1NoZWV0IjpjYXNlIlB0Z0VuZFNoZWV0IjpjYXNlIlB0Z01lbUZ1bmMiOmNhc2UiUHRnTWVtTm9NZW0iOmJyZWFrO2Nhc2UiUHRnUmVmIjpZZT1ubyhLdFsxXVsxXSxwZSxRKSx5ZS5wdXNoKEJvKFllLGdlKSk7YnJlYWs7Y2FzZSJQdGdS'@;
put 'ZWZOIjpZZT1rP25vKEt0WzFdWzFdLGssUSk6S3RbMV1bMV0seWUucHVzaChCbyhZZSxnZSkpO2JyZWFrO2Nhc2UiUHRnUmVmM2QiOmV0PUt0WzFdWzFdLFllPW5vKEt0WzFdWzJdLHBlLFEpLG90PUtCKEcsZXQsUSkseWUucHVzaChvdCsiISIrQm8oWWUsZ2UpKTticmVhaztjYXNlIlB0Z0Z1'@;
put 'bmMiOmNhc2UiUHRnRnVuY1ZhciI6dmFyIHJyPUt0WzFdWzBdLFNuPUt0WzFdWzFdO3JyfHwocnI9MCk7dmFyIGxyPTA9PShyciY9MTI3KT9bXTp5ZS5zbGljZSgtcnIpO3llLmxlbmd0aC09cnIsIlVzZXIiPT09U24mJihTbj1sci5zaGlmdCgpKSx5ZS5wdXNoKFNuKyIoIitsci5qb2luKCIs'@;
put 'IikrIikiKTticmVhaztjYXNlIlB0Z0Jvb2wiOnllLnB1c2goS3RbMV0/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UiUHRnSW50IjpjYXNlIlB0Z051bSI6eWUucHVzaChTdHJpbmcoS3RbMV0pKTticmVhaztjYXNlIlB0Z1N0ciI6eWUucHVzaCgnIicrS3RbMV0ucmVwbGFjZSgvIi9nLCci'@;
put 'IicpKyciJyk7YnJlYWs7Y2FzZSJQdGdFcnIiOnllLnB1c2goS3RbMV0pO2JyZWFrO2Nhc2UiUHRnQXJlYU4iOkV0PXNvKEt0WzFdWzFdLGs/e3M6a306cGUsUSkseWUucHVzaCgkYShFdCxRKSk7YnJlYWs7Y2FzZSJQdGdBcmVhIjpFdD1zbyhLdFsxXVsxXSxwZSxRKSx5ZS5wdXNoKCRhKEV0'@;
put 'LFEpKTticmVhaztjYXNlIlB0Z0FyZWEzZCI6ZXQ9S3RbMV1bMV0sRXQ9c28oS3RbMV1bMl0scGUsUSksb3Q9S0IoRyxldCxRKSx5ZS5wdXNoKG90KyIhIiskYShFdCxRKSk7YnJlYWs7Y2FzZSJQdGdBdHRyU3VtIjp5ZS5wdXNoKCJTVU0oIit5ZS5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UiUHRn'@;
put 'TmFtZSI6dmFyIFhuPShHLm5hbWVzfHxbXSlbKGN0PUt0WzFdWzJdKS0xXXx8KEdbMF18fFtdKVtjdF0sVm49WG4/WG4uTmFtZToiU0gzM1RKU05BTUUiK1N0cmluZyhjdCk7Vm4gaW4gcmImJihWbj1yYltWbl0pLHllLnB1c2goVm4pO2JyZWFrO2Nhc2UiUHRnTmFtZVgiOnZhciBicixocj1L'@;
put 'dFsxXVsxXTtpZihjdD1LdFsxXVsyXSwhKFEuYmlmZjw9NSkpe3ZhciBlcj0iIjtpZigxNDg0OT09KChHW2hyXXx8W10pWzBdfHxbXSlbMF18fCgxMDI1PT0oKEdbaHJdfHxbXSlbMF18fFtdKVswXT9HW2hyXVtjdF0mJkdbaHJdW2N0XS5pdGFiPjAmJihlcj1HLlNoZWV0TmFtZXNbR1tocl1b'@;
put 'Y3RdLml0YWItMV0rIiEiKTplcj1HLlNoZWV0TmFtZXNbY3QtMV0rIiEiKSxHW2hyXSYmR1tocl1bY3RdKWVyKz1HW2hyXVtjdF0uTmFtZTtlbHNlIGlmKEdbMF0mJkdbMF1bY3RdKWVyKz1HWzBdW2N0XS5OYW1lO2Vsc2V7dmFyIEZpPShhRChHLGhyLFEpfHwiIikuc3BsaXQoIjs7Iik7Rmlb'@;
put 'Y3QtMV0/ZXI9RmlbY3QtMV06ZXIrPSJTSDMzVEpTRVJSWCJ9eWUucHVzaChlcik7YnJlYWt9aHI8MCYmKGhyPS1ociksR1tocl0mJihicj1HW2hyXVtjdF0pLGJyfHwoYnI9e05hbWU6IlNIMzNUSlNFUlJZIn0pLHllLnB1c2goYnIuTmFtZSk7YnJlYWs7Y2FzZSJQdGdQYXJlbiI6dmFyIHJv'@;
put 'PSIoIix1bz0iKSI7aWYoYnQ+PTApe3N3aXRjaChqdD0iIixTWzBdW2J0XVsxXVswXSl7Y2FzZSAyOnJvPXNpKCIgIixTWzBdW2J0XVsxXVsxXSkrcm87YnJlYWs7Y2FzZSAzOnJvPXNpKCJcciIsU1swXVtidF1bMV1bMV0pK3JvO2JyZWFrO2Nhc2UgNDp1bz1zaSgiICIsU1swXVtidF1bMV1b'@;
put 'MV0pK3VvO2JyZWFrO2Nhc2UgNTp1bz1zaSgiXHIiLFNbMF1bYnRdWzFdWzFdKSt1bzticmVhaztkZWZhdWx0OmlmKFEuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrU1swXVtidF1bMV1bMF0pfWJ0PS0xfXllLnB1c2gocm8reWUucG9wKCkrdW8p'@;
put 'O2JyZWFrO2Nhc2UiUHRnUmVmRXJyIjpjYXNlIlB0Z0FyZWFFcnIiOmNhc2UiUHRnQXJlYUVycjNkIjpjYXNlIlB0Z1JlZkVycjNkIjp5ZS5wdXNoKCIjUkVGISIpO2JyZWFrO2Nhc2UiUHRnRXhwIjp2YXIga3I9e2M6ay5jLHI6ay5yfTtpZihHLnNoYXJlZGZbcWkoWWU9e2M6S3RbMV1bMV0s'@;
put 'cjpLdFsxXVswXX0pXSl7dmFyIE5uPUcuc2hhcmVkZltxaShZZSldO3llLnB1c2goYTAoTm4scGUsa3IsRyxRKSl9ZWxzZXt2YXIgQnI9ITE7Zm9yKFBlPTA7UGUhPUcuYXJyYXlmLmxlbmd0aDsrK1BlKWlmKCEoWWUuYzwoTmU9Ry5hcnJheWZbUGVdKVswXS5zLmN8fFllLmM+TmVbMF0uZS5j'@;
put 'fHxZZS5yPE5lWzBdLnMucnx8WWUucj5OZVswXS5lLnIpKXt5ZS5wdXNoKGEwKE5lWzFdLHBlLGtyLEcsUSkpLEJyPSEwO2JyZWFrfUJyfHx5ZS5wdXNoKEt0WzFdKX1icmVhaztjYXNlIlB0Z0FycmF5Ijp5ZS5wdXNoKCJ7IitGMShLdFsxXSkrIn0iKTticmVhaztjYXNlIlB0Z0F0dHJTcGFj'@;
put 'ZSI6Y2FzZSJQdGdBdHRyU3BhY2VTZW1pIjpidD1rdDticmVhaztjYXNlIlB0Z01pc3NBcmciOnllLnB1c2goIiIpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6eWUucHVzaCgiVGFibGUiK0t0WzFdLmlkeCsiWyMiK0t0WzFdLnJ0KyJdIik7YnJlYWs7Y2FzZSJQdGdFbGZDb2wiOmNhc2UiUHRnRWxm'@;
put 'Q29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6Y2FzZSJQdGdFbGZDb2xWIjpjYXNlIlB0Z0VsZkxlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsIjpjYXNlIlB0Z0VsZlJhZGljYWxMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmUnciOmNhc2UiUHRnRWxmUndWIjp0aHJvdyBuZXcgRXJy'@;
put 'b3IoIlVuc3VwcG9ydGVkIEVMRnMiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEZvcm11bGEgVG9rZW46ICIrU3RyaW5nKEt0KSl9aWYoMyE9US5iaWZmJiZidD49MCYmLTE9PVsiUHRnQXR0clNwYWNlIiwiUHRnQXR0clNwYWNlU2VtaSIsIlB0Z0F0dHJHb3RvIl0u'@;
put 'aW5kZXhPZihTWzBdW2t0XVswXSkpe3ZhciBGbj0hMDtzd2l0Y2goKEt0PVNbMF1bYnRdKVsxXVswXSl7Y2FzZSA0OkZuPSExO2Nhc2UgMDpqdD1zaSgiICIsS3RbMV1bMV0pO2JyZWFrO2Nhc2UgNTpGbj0hMTtjYXNlIDE6anQ9c2koIlxyIixLdFsxXVsxXSk7YnJlYWs7ZGVmYXVsdDppZihq'@;
put 'dD0iIixRLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK0t0WzFdWzBdKX15ZS5wdXNoKChGbj9qdDoiIikreWUucG9wKCkrKEZuPyIiOmp0KSksYnQ9LTF9fWlmKHllLmxlbmd0aD4xJiZRLldURil0aHJvdyBuZXcgRXJyb3IoImJhZCBmb3JtdWxh'@;
put 'IHN0YWNrIik7cmV0dXJuIHllWzBdfWZ1bmN0aW9uIHNEKFMsUixrKXt2YXIgYWUsRz1TLmwrUixRPTI9PWsuYmlmZj8xOjIsZ2U9Uy5yZWFkX3NoaWZ0KFEpO2lmKDY1NTM1PT1nZSlyZXR1cm5bW10sSW4oUyxSLTIpXTt2YXIgcGU9Y2goUyxnZSxrKTtyZXR1cm4gUiE9PWdlK1EmJihhZT1C'@;
put 'NChTLFItZ2UtUSxwZSxrKSksUy5sPUcsW3BlLGFlXX1mdW5jdGlvbiBLMyhTLFIsayl7dmFyIFEsRz1TLmwrUixhZT1TLnJlYWRfc2hpZnQoMiksZ2U9Y2goUyxhZSxrKTtyZXR1cm4gNjU1MzU9PWFlP1tbXSxJbihTLFItMildOihSIT09YWUrMiYmKFE9QjQoUyxHLWFlLTIsZ2UsaykpLFtn'@;
put 'ZSxRXSl9ZnVuY3Rpb24gUUMoUyxSLGspe3ZhciBHPVMubCtSLFE9XzAoUyk7Mj09ay5iaWZmJiYrK1MubDt2YXIgYWU9ZnVuY3Rpb24gWEMoUyl7dmFyIFI7aWYoNjU1MzUhPT1lYShTLFMubCs2KSlyZXR1cm5bUGwoUyksIm4iXTtzd2l0Y2goU1tTLmxdKXtjYXNlIDA6cmV0dXJuIFMubCs9'@;
put 'OCxbIlN0cmluZyIsInMiXTtjYXNlIDE6cmV0dXJuIFI9MT09PVNbUy5sKzJdLFMubCs9OCxbUiwiYiJdO2Nhc2UgMjpyZXR1cm4gUj1TW1MubCsyXSxTLmwrPTgsW1IsImUiXTtjYXNlIDM6cmV0dXJuIFMubCs9OCxbIiIsInMiXX1yZXR1cm5bXX0oUyksZ2U9Uy5yZWFkX3NoaWZ0KDEpOzIh'@;
put 'PWsuYmlmZiYmKFMucmVhZF9zaGlmdCgxKSxrLmJpZmY+PTUmJlMucmVhZF9zaGlmdCg0KSk7dmFyIHBlPWZ1bmN0aW9uIGxEKFMsUixrKXt2YXIgYWUsRz1TLmwrUixRPTI9PWsuYmlmZj8xOjIsZ2U9Uy5yZWFkX3NoaWZ0KFEpO2lmKDY1NTM1PT1nZSlyZXR1cm5bW10sSW4oUyxSLTIpXTt2'@;
put 'YXIgcGU9Y2goUyxnZSxrKTtyZXR1cm4gUiE9PWdlK1EmJihhZT1CNChTLFItZ2UtUSxwZSxrKSksUy5sPUcsW3BlLGFlXX0oUyxHLVMubCxrKTtyZXR1cm57Y2VsbDpRLHZhbDphZVswXSxmb3JtdWxhOnBlLHNoYXJlZDpnZT4+MyYxLHR0OmFlWzFdfX1mdW5jdGlvbiBqNChTLFIsayl7dmFy'@;
put 'IEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Y2goUyxHLGspLGFlPVMucmVhZF9zaGlmdCg0KTtyZXR1cm5bUSxhZT4wP0I0KFMsYWUsUSxrLCEwKTpudWxsXX12YXIgZVM9ajQsejQ9ajQsdUQ9ajQscUI9ZnVuY3Rpb24gY0QoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPVMucmVhZF9zaGlm'@;
put 'dCg0KSxhZT1jaChTLEcsayk7cmV0dXJuW2FlLFE+MD9CNChTLFEsYWUsaywhMCk6bnVsbF19LGREPWo0LFhCPWo0O2Z1bmN0aW9uIHRTKFMpe2lmKCgwfFMpPT1TJiZTPE1hdGgucG93KDIsMTYpJiZTPj0wKXt2YXIgUj1ibigxMSk7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCwzKSxSLndyaXRl'@;
put 'X3NoaWZ0KDEsMzApLFIud3JpdGVfc2hpZnQoMixTKSxSLndyaXRlX3NoaWZ0KDQsMCksUn12YXIgaz1ibigxNyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoNCwxMSksay53cml0ZV9zaGlmdCgxLDMxKSxrLndyaXRlX3NoaWZ0KDgsUyksay53cml0ZV9zaGlmdCg0LDApLGt9ZnVuY3Rpb24gblMo'@;
put 'Uyl7dmFyIFI9Ym4oNyk7Ui53cml0ZV9zaGlmdCg0LDMrMipTLmxlbmd0aCksUi53cml0ZV9zaGlmdCgxLDIzKSxSLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpO3ZhciBrPWJuKDIqUy5sZW5ndGgpO2sud3JpdGVfc2hpZnQoMipTLmxlbmd0aCxTLCJ1dGYxNmxlIik7dmFyIEc9Ym4oNCk7cmV0'@;
put 'dXJuIEcud3JpdGVfc2hpZnQoNCwwKSxqKFtSLGssR10pfWZ1bmN0aW9uIFU0KFMpe2lmKFMubWF0Y2goL14jKERJVlwvMCF8R0VUVElOR19EQVRBfE5cL0F8TkFNRVw/fE5VTEwhfE5VTSF8UkVGIXxWQUxVRSEpJC8pKXJldHVybiBmdW5jdGlvbiBKQihTKXt2YXIgUj1ibigxMCk7cmV0dXJu'@;
put 'IFIud3JpdGVfc2hpZnQoNCwyKSxSLndyaXRlX3NoaWZ0KDEsMjgpLFIud3JpdGVfc2hpZnQoMSxTKSxSLndyaXRlX3NoaWZ0KDQsMCksUn0oK1AzW1NdKTtpZihTLm1hdGNoKC9eXCQ/KD86W0EtV11bQS1aXXsyfXxYW0EtRV1bQS1aXXxYRltBLURdfFtBLVpdezEsMn0pXCQ/KD86MTBbMC0z'@;
put 'XVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkkLykpcmV0dXJuIGZ1bmN0aW9uIGE4KFMpe3ZhciBSPU5hKFMpLGs9Ym4oMTUpO3JldHVybiBrLndyaXRlX3NoaWZ0KDQsNyksay53cml0ZV9zaGlmdCgxLDM2'@;
put 'KSxrLndyaXRlX3NoaWZ0KDQsUi5yKSxrLndyaXRlX3NoaWZ0KDIsUi5jfCgiJCI9PVMuY2hhckF0KDApPzA6MSk8PDE0fChTLm1hdGNoKC9cJFxkLyk/MDoxKTw8MTUpLGsud3JpdGVfc2hpZnQoNCwwKSxrfShTKTtpZihTLm1hdGNoKC9eIi4qIiQvKSlyZXR1cm4gblMoUyk7dGhyb3ciRm9y'@;
put 'bXVsYSB8IitTKyJ8IG5vdCBzdXBwb3J0ZWQgZm9yIFhMU0IifXZhciByUz17MDoiQkVFUCIsMToiT1BFTiIsMjoiT1BFTi5MSU5LUyIsMzoiQ0xPU0UuQUxMIiw0OiJTQVZFIiw1OiJTQVZFLkFTIiw2OiJGSUxFLkRFTEVURSIsNzoiUEFHRS5TRVRVUCIsODoiUFJJTlQiLDk6IlBSSU5URVIu'@;
put 'U0VUVVAiLDEwOiJRVUlUIiwxMToiTkVXLldJTkRPVyIsMTI6IkFSUkFOR0UuQUxMIiwxMzoiV0lORE9XLlNJWkUiLDE0OiJXSU5ET1cuTU9WRSIsMTU6IkZVTEwiLDE2OiJDTE9TRSIsMTc6IlJVTiIsMjI6IlNFVC5QUklOVC5BUkVBIiwyMzoiU0VULlBSSU5ULlRJVExFUyIsMjQ6IlNFVC5Q'@;
put 'QUdFLkJSRUFLIiwyNToiUkVNT1ZFLlBBR0UuQlJFQUsiLDI2OiJGT05UIiwyNzoiRElTUExBWSIsMjg6IlBST1RFQ1QuRE9DVU1FTlQiLDI5OiJQUkVDSVNJT04iLDMwOiJBMS5SMUMxIiwzMToiQ0FMQ1VMQVRFLk5PVyIsMzI6IkNBTENVTEFUSU9OIiwzNDoiREFUQS5GSU5EIiwzNToiRVhU'@;
put 'UkFDVCIsMzY6IkRBVEEuREVMRVRFIiwzNzoiU0VULkRBVEFCQVNFIiwzODoiU0VULkNSSVRFUklBIiwzOToiU09SVCIsNDA6IkRBVEEuU0VSSUVTIiw0MToiVEFCTEUiLDQyOiJGT1JNQVQuTlVNQkVSIiw0MzoiQUxJR05NRU5UIiw0NDoiU1RZTEUiLDQ1OiJCT1JERVIiLDQ2OiJDRUxMLlBS'@;
put 'T1RFQ1RJT04iLDQ3OiJDT0xVTU4uV0lEVEgiLDQ4OiJVTkRPIiw0OToiQ1VUIiw1MDoiQ09QWSIsNTE6IlBBU1RFIiw1MjoiQ0xFQVIiLDUzOiJQQVNURS5TUEVDSUFMIiw1NDoiRURJVC5ERUxFVEUiLDU1OiJJTlNFUlQiLDU2OiJGSUxMLlJJR0hUIiw1NzoiRklMTC5ET1dOIiw2MToiREVG'@;
put 'SU5FLk5BTUUiLDYyOiJDUkVBVEUuTkFNRVMiLDYzOiJGT1JNVUxBLkdPVE8iLDY0OiJGT1JNVUxBLkZJTkQiLDY1OiJTRUxFQ1QuTEFTVC5DRUxMIiw2NjoiU0hPVy5BQ1RJVkUuQ0VMTCIsNjc6IkdBTExFUlkuQVJFQSIsNjg6IkdBTExFUlkuQkFSIiw2OToiR0FMTEVSWS5DT0xVTU4iLDcw'@;
put 'OiJHQUxMRVJZLkxJTkUiLDcxOiJHQUxMRVJZLlBJRSIsNzI6IkdBTExFUlkuU0NBVFRFUiIsNzM6IkNPTUJJTkFUSU9OIiw3NDoiUFJFRkVSUkVEIiw3NToiQURELk9WRVJMQVkiLDc2OiJHUklETElORVMiLDc3OiJTRVQuUFJFRkVSUkVEIiw3ODoiQVhFUyIsNzk6IkxFR0VORCIsODA6IkFU'@;
put 'VEFDSC5URVhUIiw4MToiQURELkFSUk9XIiw4MjoiU0VMRUNULkNIQVJUIiw4MzoiU0VMRUNULlBMT1QuQVJFQSIsODQ6IlBBVFRFUk5TIiw4NToiTUFJTi5DSEFSVCIsODY6Ik9WRVJMQVkiLDg3OiJTQ0FMRSIsODg6IkZPUk1BVC5MRUdFTkQiLDg5OiJGT1JNQVQuVEVYVCIsOTA6IkVESVQu'@;
put 'UkVQRUFUIiw5MToiUEFSU0UiLDkyOiJKVVNUSUZZIiw5MzoiSElERSIsOTQ6IlVOSElERSIsOTU6IldPUktTUEFDRSIsOTY6IkZPUk1VTEEiLDk3OiJGT1JNVUxBLkZJTEwiLDk4OiJGT1JNVUxBLkFSUkFZIiw5OToiREFUQS5GSU5ELk5FWFQiLDEwMDoiREFUQS5GSU5ELlBSRVYiLDEwMToi'@;
put 'Rk9STVVMQS5GSU5ELk5FWFQiLDEwMjoiRk9STVVMQS5GSU5ELlBSRVYiLDEwMzoiQUNUSVZBVEUiLDEwNDoiQUNUSVZBVEUuTkVYVCIsMTA1OiJBQ1RJVkFURS5QUkVWIiwxMDY6IlVOTE9DS0VELk5FWFQiLDEwNzoiVU5MT0NLRUQuUFJFViIsMTA4OiJDT1BZLlBJQ1RVUkUiLDEwOToiU0VM'@;
put 'RUNUIiwxMTA6IkRFTEVURS5OQU1FIiwxMTE6IkRFTEVURS5GT1JNQVQiLDExMjoiVkxJTkUiLDExMzoiSExJTkUiLDExNDoiVlBBR0UiLDExNToiSFBBR0UiLDExNjoiVlNDUk9MTCIsMTE3OiJIU0NST0xMIiwxMTg6IkFMRVJUIiwxMTk6Ik5FVyIsMTIwOiJDQU5DRUwuQ09QWSIsMTIxOiJT'@;
put 'SE9XLkNMSVBCT0FSRCIsMTIyOiJNRVNTQUdFIiwxMjQ6IlBBU1RFLkxJTksiLDEyNToiQVBQLkFDVElWQVRFIiwxMjY6IkRFTEVURS5BUlJPVyIsMTI3OiJST1cuSEVJR0hUIiwxMjg6IkZPUk1BVC5NT1ZFIiwxMjk6IkZPUk1BVC5TSVpFIiwxMzA6IkZPUk1VTEEuUkVQTEFDRSIsMTMxOiJT'@;
put 'RU5ELktFWVMiLDEzMjoiU0VMRUNULlNQRUNJQUwiLDEzMzoiQVBQTFkuTkFNRVMiLDEzNDoiUkVQTEFDRS5GT05UIiwxMzU6IkZSRUVaRS5QQU5FUyIsMTM2OiJTSE9XLklORk8iLDEzNzoiU1BMSVQiLDEzODoiT04uV0lORE9XIiwxMzk6Ik9OLkRBVEEiLDE0MDoiRElTQUJMRS5JTlBVVCIs'@;
put 'MTQyOiJPVVRMSU5FIiwxNDM6IkxJU1QuTkFNRVMiLDE0NDoiRklMRS5DTE9TRSIsMTQ1OiJTQVZFLldPUktCT09LIiwxNDY6IkRBVEEuRk9STSIsMTQ3OiJDT1BZLkNIQVJUIiwxNDg6Ik9OLlRJTUUiLDE0OToiV0FJVCIsMTUwOiJGT1JNQVQuRk9OVCIsMTUxOiJGSUxMLlVQIiwxNTI6IkZJ'@;
put 'TEwuTEVGVCIsMTUzOiJERUxFVEUuT1ZFUkxBWSIsMTU1OiJTSE9SVC5NRU5VUyIsMTU5OiJTRVQuVVBEQVRFLlNUQVRVUyIsMTYxOiJDT0xPUi5QQUxFVFRFIiwxNjI6IkRFTEVURS5TVFlMRSIsMTYzOiJXSU5ET1cuUkVTVE9SRSIsMTY0OiJXSU5ET1cuTUFYSU1JWkUiLDE2NjoiQ0hBTkdF'@;
put 'LkxJTksiLDE2NzoiQ0FMQ1VMQVRFLkRPQ1VNRU5UIiwxNjg6Ik9OLktFWSIsMTY5OiJBUFAuUkVTVE9SRSIsMTcwOiJBUFAuTU9WRSIsMTcxOiJBUFAuU0laRSIsMTcyOiJBUFAuTUlOSU1JWkUiLDE3MzoiQVBQLk1BWElNSVpFIiwxNzQ6IkJSSU5HLlRPLkZST05UIiwxNzU6IlNFTkQuVE8u'@;
put 'QkFDSyIsMTg1OiJNQUlOLkNIQVJULlRZUEUiLDE4NjoiT1ZFUkxBWS5DSEFSVC5UWVBFIiwxODc6IlNFTEVDVC5FTkQiLDE4ODoiT1BFTi5NQUlMIiwxODk6IlNFTkQuTUFJTCIsMTkwOiJTVEFOREFSRC5GT05UIiwxOTE6IkNPTlNPTElEQVRFIiwxOTI6IlNPUlQuU1BFQ0lBTCIsMTkzOiJH'@;
put 'QUxMRVJZLjNELkFSRUEiLDE5NDoiR0FMTEVSWS4zRC5DT0xVTU4iLDE5NToiR0FMTEVSWS4zRC5MSU5FIiwxOTY6IkdBTExFUlkuM0QuUElFIiwxOTc6IlZJRVcuM0QiLDE5ODoiR09BTC5TRUVLIiwxOTk6IldPUktHUk9VUCIsMjAwOiJGSUxMLkdST1VQIiwyMDE6IlVQREFURS5MSU5LIiwy'@;
put 'MDI6IlBST01PVEUiLDIwMzoiREVNT1RFIiwyMDQ6IlNIT1cuREVUQUlMIiwyMDY6IlVOR1JPVVAiLDIwNzoiT0JKRUNULlBST1BFUlRJRVMiLDIwODoiU0FWRS5ORVcuT0JKRUNUIiwyMDk6IlNIQVJFIiwyMTA6IlNIQVJFLk5BTUUiLDIxMToiRFVQTElDQVRFIiwyMTI6IkFQUExZLlNUWUxF'@;
put 'IiwyMTM6IkFTU0lHTi5UTy5PQkpFQ1QiLDIxNDoiT0JKRUNULlBST1RFQ1RJT04iLDIxNToiSElERS5PQkpFQ1QiLDIxNjoiU0VULkVYVFJBQ1QiLDIxNzoiQ1JFQVRFLlBVQkxJU0hFUiIsMjE4OiJTVUJTQ1JJQkUuVE8iLDIxOToiQVRUUklCVVRFUyIsMjIwOiJTSE9XLlRPT0xCQVIiLDIy'@;
put 'MjoiUFJJTlQuUFJFVklFVyIsMjIzOiJFRElULkNPTE9SIiwyMjQ6IlNIT1cuTEVWRUxTIiwyMjU6IkZPUk1BVC5NQUlOIiwyMjY6IkZPUk1BVC5PVkVSTEFZIiwyMjc6Ik9OLlJFQ0FMQyIsMjI4OiJFRElULlNFUklFUyIsMjI5OiJERUZJTkUuU1RZTEUiLDI0MDoiTElORS5QUklOVCIsMjQz'@;
put 'OiJFTlRFUi5EQVRBIiwyNDk6IkdBTExFUlkuUkFEQVIiLDI1MDoiTUVSR0UuU1RZTEVTIiwyNTE6IkVESVRJT04uT1BUSU9OUyIsMjUyOiJQQVNURS5QSUNUVVJFIiwyNTM6IlBBU1RFLlBJQ1RVUkUuTElOSyIsMjU0OiJTUEVMTElORyIsMjU2OiJaT09NIiwyNTk6IklOU0VSVC5PQkpFQ1Qi'@;
put 'LDI2MDoiV0lORE9XLk1JTklNSVpFIiwyNjU6IlNPVU5ELk5PVEUiLDI2NjoiU09VTkQuUExBWSIsMjY3OiJGT1JNQVQuU0hBUEUiLDI2ODoiRVhURU5ELlBPTFlHT04iLDI2OToiRk9STUFULkFVVE8iLDI3MjoiR0FMTEVSWS4zRC5CQVIiLDI3MzoiR0FMTEVSWS4zRC5TVVJGQUNFIiwyNzQ6'@;
put 'IkZJTEwuQVVUTyIsMjc2OiJDVVNUT01JWkUuVE9PTEJBUiIsMjc3OiJBREQuVE9PTCIsMjc4OiJFRElULk9CSkVDVCIsMjc5OiJPTi5ET1VCTEVDTElDSyIsMjgwOiJPTi5FTlRSWSIsMjgxOiJXT1JLQk9PSy5BREQiLDI4MjoiV09SS0JPT0suTU9WRSIsMjgzOiJXT1JLQk9PSy5DT1BZIiwy'@;
put 'ODQ6IldPUktCT09LLk9QVElPTlMiLDI4NToiU0FWRS5XT1JLU1BBQ0UiLDI4ODoiQ0hBUlQuV0laQVJEIiwyODk6IkRFTEVURS5UT09MIiwyOTA6Ik1PVkUuVE9PTCIsMjkxOiJXT1JLQk9PSy5TRUxFQ1QiLDI5MjoiV09SS0JPT0suQUNUSVZBVEUiLDI5MzoiQVNTSUdOLlRPLlRPT0wiLDI5'@;
put 'NToiQ09QWS5UT09MIiwyOTY6IlJFU0VULlRPT0wiLDI5NzoiQ09OU1RSQUlOLk5VTUVSSUMiLDI5ODoiUEFTVEUuVE9PTCIsMzAyOiJXT1JLQk9PSy5ORVciLDMwNToiU0NFTkFSSU8uQ0VMTFMiLDMwNjoiU0NFTkFSSU8uREVMRVRFIiwzMDc6IlNDRU5BUklPLkFERCIsMzA4OiJTQ0VOQVJJ'@;
put 'Ty5FRElUIiwzMDk6IlNDRU5BUklPLlNIT1ciLDMxMDoiU0NFTkFSSU8uU0hPVy5ORVhUIiwzMTE6IlNDRU5BUklPLlNVTU1BUlkiLDMxMjoiUElWT1QuVEFCTEUuV0laQVJEIiwzMTM6IlBJVk9ULkZJRUxELlBST1BFUlRJRVMiLDMxNDoiUElWT1QuRklFTEQiLDMxNToiUElWT1QuSVRFTSIs'@;
put 'MzE2OiJQSVZPVC5BREQuRklFTERTIiwzMTg6Ik9QVElPTlMuQ0FMQ1VMQVRJT04iLDMxOToiT1BUSU9OUy5FRElUIiwzMjA6Ik9QVElPTlMuVklFVyIsMzIxOiJBRERJTi5NQU5BR0VSIiwzMjI6Ik1FTlUuRURJVE9SIiwzMjM6IkFUVEFDSC5UT09MQkFSUyIsMzI0OiJWQkFBY3RpdmF0ZSIs'@;
put 'MzI1OiJPUFRJT05TLkNIQVJUIiwzMjg6IlZCQS5JTlNFUlQuRklMRSIsMzMwOiJWQkEuUFJPQ0VEVVJFLkRFRklOSVRJT04iLDMzNjoiUk9VVElORy5TTElQIiwzMzg6IlJPVVRFLkRPQ1VNRU5UIiwzMzk6Ik1BSUwuTE9HT04iLDM0MjoiSU5TRVJULlBJQ1RVUkUiLDM0MzoiRURJVC5UT09M'@;
put 'IiwzNDQ6IkdBTExFUlkuRE9VR0hOVVQiLDM1MDoiQ0hBUlQuVFJFTkQiLDM1MjoiUElWT1QuSVRFTS5QUk9QRVJUSUVTIiwzNTQ6IldPUktCT09LLklOU0VSVCIsMzU1OiJPUFRJT05TLlRSQU5TSVRJT04iLDM1NjoiT1BUSU9OUy5HRU5FUkFMIiwzNzA6IkZJTFRFUi5BRFZBTkNFRCIsMzcz'@;
put 'OiJNQUlMLkFERC5NQUlMRVIiLDM3NDoiTUFJTC5ERUxFVEUuTUFJTEVSIiwzNzU6Ik1BSUwuUkVQTFkiLDM3NjoiTUFJTC5SRVBMWS5BTEwiLDM3NzoiTUFJTC5GT1JXQVJEIiwzNzg6Ik1BSUwuTkVYVC5MRVRURVIiLDM3OToiREFUQS5MQUJFTCIsMzgwOiJJTlNFUlQuVElUTEUiLDM4MToi'@;
put 'Rk9OVC5QUk9QRVJUSUVTIiwzODI6Ik1BQ1JPLk9QVElPTlMiLDM4MzoiV09SS0JPT0suSElERSIsMzg0OiJXT1JLQk9PSy5VTkhJREUiLDM4NToiV09SS0JPT0suREVMRVRFIiwzODY6IldPUktCT09LLk5BTUUiLDM4ODoiR0FMTEVSWS5DVVNUT00iLDM5MDoiQURELkNIQVJULkFVVE9GT1JN'@;
put 'QVQiLDM5MToiREVMRVRFLkNIQVJULkFVVE9GT1JNQVQiLDM5MjoiQ0hBUlQuQURELkRBVEEiLDM5MzoiQVVUTy5PVVRMSU5FIiwzOTQ6IlRBQi5PUkRFUiIsMzk1OiJTSE9XLkRJQUxPRyIsMzk2OiJTRUxFQ1QuQUxMIiwzOTc6IlVOR1JPVVAuU0hFRVRTIiwzOTg6IlNVQlRPVEFMLkNSRUFU'@;
put 'RSIsMzk5OiJTVUJUT1RBTC5SRU1PVkUiLDQwMDoiUkVOQU1FLk9CSkVDVCIsNDEyOiJXT1JLQk9PSy5TQ1JPTEwiLDQxMzoiV09SS0JPT0suTkVYVCIsNDE0OiJXT1JLQk9PSy5QUkVWIiw0MTU6IldPUktCT09LLlRBQi5TUExJVCIsNDE2OiJGVUxMLlNDUkVFTiIsNDE3OiJXT1JLQk9PSy5Q'@;
put 'Uk9URUNUIiw0MjA6IlNDUk9MTEJBUi5QUk9QRVJUSUVTIiw0MjE6IlBJVk9ULlNIT1cuUEFHRVMiLDQyMjoiVEVYVC5UTy5DT0xVTU5TIiw0MjM6IkZPUk1BVC5DSEFSVFRZUEUiLDQyNDoiTElOSy5GT1JNQVQiLDQyNToiVFJBQ0VSLkRJU1BMQVkiLDQzMDoiVFJBQ0VSLk5BVklHQVRFIiw0'@;
put 'MzE6IlRSQUNFUi5DTEVBUiIsNDMyOiJUUkFDRVIuRVJST1IiLDQzMzoiUElWT1QuRklFTEQuR1JPVVAiLDQzNDoiUElWT1QuRklFTEQuVU5HUk9VUCIsNDM1OiJDSEVDS0JPWC5QUk9QRVJUSUVTIiw0MzY6IkxBQkVMLlBST1BFUlRJRVMiLDQzNzoiTElTVEJPWC5QUk9QRVJUSUVTIiw0Mzg6'@;
put 'IkVESVRCT1guUFJPUEVSVElFUyIsNDM5OiJQSVZPVC5SRUZSRVNIIiw0NDA6IkxJTksuQ09NQk8iLDQ0MToiT1BFTi5URVhUIiw0NDI6IkhJREUuRElBTE9HIiw0NDM6IlNFVC5ESUFMT0cuRk9DVVMiLDQ0NDoiRU5BQkxFLk9CSkVDVCIsNDQ1OiJQVVNIQlVUVE9OLlBST1BFUlRJRVMiLDQ0'@;
put 'NjoiU0VULkRJQUxPRy5ERUZBVUxUIiw0NDc6IkZJTFRFUiIsNDQ4OiJGSUxURVIuU0hPVy5BTEwiLDQ0OToiQ0xFQVIuT1VUTElORSIsNDUwOiJGVU5DVElPTi5XSVpBUkQiLDQ1MToiQURELkxJU1QuSVRFTSIsNDUyOiJTRVQuTElTVC5JVEVNIiw0NTM6IlJFTU9WRS5MSVNULklURU0iLDQ1'@;
put 'NDoiU0VMRUNULkxJU1QuSVRFTSIsNDU1OiJTRVQuQ09OVFJPTC5WQUxVRSIsNDU2OiJTQVZFLkNPUFkuQVMiLDQ1ODoiT1BUSU9OUy5MSVNUUy5BREQiLDQ1OToiT1BUSU9OUy5MSVNUUy5ERUxFVEUiLDQ2MDoiU0VSSUVTLkFYRVMiLDQ2MToiU0VSSUVTLlgiLDQ2MjoiU0VSSUVTLlkiLDQ2'@;
put 'MzoiRVJST1JCQVIuWCIsNDY0OiJFUlJPUkJBUi5ZIiw0NjU6IkZPUk1BVC5DSEFSVCIsNDY2OiJTRVJJRVMuT1JERVIiLDQ2NzoiTUFJTC5MT0dPRkYiLDQ2ODoiQ0xFQVIuUk9VVElORy5TTElQIiw0Njk6IkFQUC5BQ1RJVkFURS5NSUNST1NPRlQiLDQ3MDoiTUFJTC5FRElULk1BSUxFUiIs'@;
put 'NDcxOiJPTi5TSEVFVCIsNDcyOiJTVEFOREFSRC5XSURUSCIsNDczOiJTQ0VOQVJJTy5NRVJHRSIsNDc0OiJTVU1NQVJZLklORk8iLDQ3NToiRklORC5GSUxFIiw0NzY6IkFDVElWRS5DRUxMLkZPTlQiLDQ3NzoiRU5BQkxFLlRJUFdJWkFSRCIsNDc4OiJWQkEuTUFLRS5BRERJTiIsNDgwOiJJ'@;
put 'TlNFUlREQVRBVEFCTEUiLDQ4MToiV09SS0dST1VQLk9QVElPTlMiLDQ4MjoiTUFJTC5TRU5ELk1BSUxFUiIsNDg1OiJBVVRPQ09SUkVDVCIsNDg5OiJQT1NULkRPQ1VNRU5UIiw0OTE6IlBJQ0tMSVNUIiw0OTM6IlZJRVcuU0hPVyIsNDk0OiJWSUVXLkRFRklORSIsNDk1OiJWSUVXLkRFTEVU'@;
put 'RSIsNTA5OiJTSEVFVC5CQUNLR1JPVU5EIiw1MTA6IklOU0VSVC5NQVAuT0JKRUNUIiw1MTE6Ik9QVElPTlMuTUVOT05PIiw1MTc6Ik1TT0NIRUNLUyIsNTE4OiJOT1JNQUwiLDUxOToiTEFZT1VUIiw1MjA6IlJNLlBSSU5ULkFSRUEiLDUyMToiQ0xFQVIuUFJJTlQuQVJFQSIsNTIyOiJBREQu'@;
put 'UFJJTlQuQVJFQSIsNTIzOiJNT1ZFLkJSSyIsNTQ1OiJISURFQ1VSUi5OT1RFIiw1NDY6IkhJREVBTEwuTk9URVMiLDU0NzoiREVMRVRFLk5PVEUiLDU0ODoiVFJBVkVSU0UuTk9URVMiLDU0OToiQUNUSVZBVEUuTk9URVMiLDYyMDoiUFJPVEVDVC5SRVZJU0lPTlMiLDYyMToiVU5QUk9URUNU'@;
put 'LlJFVklTSU9OUyIsNjQ3OiJPUFRJT05TLk1FIiw2NTM6IldFQi5QVUJMSVNIIiw2Njc6Ik5FV1dFQlFVRVJZIiw2NzM6IlBJVk9ULlRBQkxFLkNIQVJUIiw3NTM6Ik9QVElPTlMuU0FWRSIsNzU1OiJPUFRJT05TLlNQRUxMIiw4MDg6IkhJREVBTEwuSU5LQU5OT1RTIn0saEQ9ezA6IkNPVU5U'@;
put 'IiwxOiJJRiIsMjoiSVNOQSIsMzoiSVNFUlJPUiIsNDoiU1VNIiw1OiJBVkVSQUdFIiw2OiJNSU4iLDc6Ik1BWCIsODoiUk9XIiw5OiJDT0xVTU4iLDEwOiJOQSIsMTE6Ik5QViIsMTI6IlNUREVWIiwxMzoiRE9MTEFSIiwxNDoiRklYRUQiLDE1OiJTSU4iLDE2OiJDT1MiLDE3OiJUQU4iLDE4'@;
put 'OiJBVEFOIiwxOToiUEkiLDIwOiJTUVJUIiwyMToiRVhQIiwyMjoiTE4iLDIzOiJMT0cxMCIsMjQ6IkFCUyIsMjU6IklOVCIsMjY6IlNJR04iLDI3OiJST1VORCIsMjg6IkxPT0tVUCIsMjk6IklOREVYIiwzMDoiUkVQVCIsMzE6Ik1JRCIsMzI6IkxFTiIsMzM6IlZBTFVFIiwzNDoiVFJVRSIs'@;
put 'MzU6IkZBTFNFIiwzNjoiQU5EIiwzNzoiT1IiLDM4OiJOT1QiLDM5OiJNT0QiLDQwOiJEQ09VTlQiLDQxOiJEU1VNIiw0MjoiREFWRVJBR0UiLDQzOiJETUlOIiw0NDoiRE1BWCIsNDU6IkRTVERFViIsNDY6IlZBUiIsNDc6IkRWQVIiLDQ4OiJURVhUIiw0OToiTElORVNUIiw1MDoiVFJFTkQi'@;
put 'LDUxOiJMT0dFU1QiLDUyOiJHUk9XVEgiLDUzOiJHT1RPIiw1NDoiSEFMVCIsNTU6IlJFVFVSTiIsNTY6IlBWIiw1NzoiRlYiLDU4OiJOUEVSIiw1OToiUE1UIiw2MDoiUkFURSIsNjE6Ik1JUlIiLDYyOiJJUlIiLDYzOiJSQU5EIiw2NDoiTUFUQ0giLDY1OiJEQVRFIiw2NjoiVElNRSIsNjc6'@;
put 'IkRBWSIsNjg6Ik1PTlRIIiw2OToiWUVBUiIsNzA6IldFRUtEQVkiLDcxOiJIT1VSIiw3MjoiTUlOVVRFIiw3MzoiU0VDT05EIiw3NDoiTk9XIiw3NToiQVJFQVMiLDc2OiJST1dTIiw3NzoiQ09MVU1OUyIsNzg6Ik9GRlNFVCIsNzk6IkFCU1JFRiIsODA6IlJFTFJFRiIsODE6IkFSR1VNRU5U'@;
put 'Iiw4MjoiU0VBUkNIIiw4MzoiVFJBTlNQT1NFIiw4NDoiRVJST1IiLDg1OiJTVEVQIiw4NjoiVFlQRSIsODc6IkVDSE8iLDg4OiJTRVQuTkFNRSIsODk6IkNBTExFUiIsOTA6IkRFUkVGIiw5MToiV0lORE9XUyIsOTI6IlNFUklFUyIsOTM6IkRPQ1VNRU5UUyIsOTQ6IkFDVElWRS5DRUxMIiw5'@;
put 'NToiU0VMRUNUSU9OIiw5NjoiUkVTVUxUIiw5NzoiQVRBTjIiLDk4OiJBU0lOIiw5OToiQUNPUyIsMTAwOiJDSE9PU0UiLDEwMToiSExPT0tVUCIsMTAyOiJWTE9PS1VQIiwxMDM6IkxJTktTIiwxMDQ6IklOUFVUIiwxMDU6IklTUkVGIiwxMDY6IkdFVC5GT1JNVUxBIiwxMDc6IkdFVC5OQU1F'@;
put 'IiwxMDg6IlNFVC5WQUxVRSIsMTA5OiJMT0ciLDExMDoiRVhFQyIsMTExOiJDSEFSIiwxMTI6IkxPV0VSIiwxMTM6IlVQUEVSIiwxMTQ6IlBST1BFUiIsMTE1OiJMRUZUIiwxMTY6IlJJR0hUIiwxMTc6IkVYQUNUIiwxMTg6IlRSSU0iLDExOToiUkVQTEFDRSIsMTIwOiJTVUJTVElUVVRFIiwx'@;
put 'MjE6IkNPREUiLDEyMjoiTkFNRVMiLDEyMzoiRElSRUNUT1JZIiwxMjQ6IkZJTkQiLDEyNToiQ0VMTCIsMTI2OiJJU0VSUiIsMTI3OiJJU1RFWFQiLDEyODoiSVNOVU1CRVIiLDEyOToiSVNCTEFOSyIsMTMwOiJUIiwxMzE6Ik4iLDEzMjoiRk9QRU4iLDEzMzoiRkNMT1NFIiwxMzQ6IkZTSVpF'@;
put 'IiwxMzU6IkZSRUFETE4iLDEzNjoiRlJFQUQiLDEzNzoiRldSSVRFTE4iLDEzODoiRldSSVRFIiwxMzk6IkZQT1MiLDE0MDoiREFURVZBTFVFIiwxNDE6IlRJTUVWQUxVRSIsMTQyOiJTTE4iLDE0MzoiU1lEIiwxNDQ6IkREQiIsMTQ1OiJHRVQuREVGIiwxNDY6IlJFRlRFWFQiLDE0NzoiVEVY'@;
put 'VFJFRiIsMTQ4OiJJTkRJUkVDVCIsMTQ5OiJSRUdJU1RFUiIsMTUwOiJDQUxMIiwxNTE6IkFERC5CQVIiLDE1MjoiQURELk1FTlUiLDE1MzoiQURELkNPTU1BTkQiLDE1NDoiRU5BQkxFLkNPTU1BTkQiLDE1NToiQ0hFQ0suQ09NTUFORCIsMTU2OiJSRU5BTUUuQ09NTUFORCIsMTU3OiJTSE9X'@;
put 'LkJBUiIsMTU4OiJERUxFVEUuTUVOVSIsMTU5OiJERUxFVEUuQ09NTUFORCIsMTYwOiJHRVQuQ0hBUlQuSVRFTSIsMTYxOiJESUFMT0cuQk9YIiwxNjI6IkNMRUFOIiwxNjM6Ik1ERVRFUk0iLDE2NDoiTUlOVkVSU0UiLDE2NToiTU1VTFQiLDE2NjoiRklMRVMiLDE2NzoiSVBNVCIsMTY4OiJQ'@;
put 'UE1UIiwxNjk6IkNPVU5UQSIsMTcwOiJDQU5DRUwuS0VZIiwxNzE6IkZPUiIsMTcyOiJXSElMRSIsMTczOiJCUkVBSyIsMTc0OiJORVhUIiwxNzU6IklOSVRJQVRFIiwxNzY6IlJFUVVFU1QiLDE3NzoiUE9LRSIsMTc4OiJFWEVDVVRFIiwxNzk6IlRFUk1JTkFURSIsMTgwOiJSRVNUQVJUIiwx'@;
put 'ODE6IkhFTFAiLDE4MjoiR0VULkJBUiIsMTgzOiJQUk9EVUNUIiwxODQ6IkZBQ1QiLDE4NToiR0VULkNFTEwiLDE4NjoiR0VULldPUktTUEFDRSIsMTg3OiJHRVQuV0lORE9XIiwxODg6IkdFVC5ET0NVTUVOVCIsMTg5OiJEUFJPRFVDVCIsMTkwOiJJU05PTlRFWFQiLDE5MToiR0VULk5PVEUi'@;
put 'LDE5MjoiTk9URSIsMTkzOiJTVERFVlAiLDE5NDoiVkFSUCIsMTk1OiJEU1RERVZQIiwxOTY6IkRWQVJQIiwxOTc6IlRSVU5DIiwxOTg6IklTTE9HSUNBTCIsMTk5OiJEQ09VTlRBIiwyMDA6IkRFTEVURS5CQVIiLDIwMToiVU5SRUdJU1RFUiIsMjA0OiJVU0RPTExBUiIsMjA1OiJGSU5EQiIs'@;
put 'MjA2OiJTRUFSQ0hCIiwyMDc6IlJFUExBQ0VCIiwyMDg6IkxFRlRCIiwyMDk6IlJJR0hUQiIsMjEwOiJNSURCIiwyMTE6IkxFTkIiLDIxMjoiUk9VTkRVUCIsMjEzOiJST1VORERPV04iLDIxNDoiQVNDIiwyMTU6IkRCQ1MiLDIxNjoiUkFOSyIsMjE5OiJBRERSRVNTIiwyMjA6IkRBWVMzNjAi'@;
put 'LDIyMToiVE9EQVkiLDIyMjoiVkRCIiwyMjM6IkVMU0UiLDIyNDoiRUxTRS5JRiIsMjI1OiJFTkQuSUYiLDIyNjoiRk9SLkNFTEwiLDIyNzoiTUVESUFOIiwyMjg6IlNVTVBST0RVQ1QiLDIyOToiU0lOSCIsMjMwOiJDT1NIIiwyMzE6IlRBTkgiLDIzMjoiQVNJTkgiLDIzMzoiQUNPU0giLDIz'@;
put 'NDoiQVRBTkgiLDIzNToiREdFVCIsMjM2OiJDUkVBVEUuT0JKRUNUIiwyMzc6IlZPTEFUSUxFIiwyMzg6IkxBU1QuRVJST1IiLDIzOToiQ1VTVE9NLlVORE8iLDI0MDoiQ1VTVE9NLlJFUEVBVCIsMjQxOiJGT1JNVUxBLkNPTlZFUlQiLDI0MjoiR0VULkxJTksuSU5GTyIsMjQzOiJURVhULkJP'@;
put 'WCIsMjQ0OiJJTkZPIiwyNDU6IkdST1VQIiwyNDY6IkdFVC5PQkpFQ1QiLDI0NzoiREIiLDI0ODoiUEFVU0UiLDI1MToiUkVTVU1FIiwyNTI6IkZSRVFVRU5DWSIsMjUzOiJBREQuVE9PTEJBUiIsMjU0OiJERUxFVEUuVE9PTEJBUiIsMjU1OiJVc2VyIiwyNTY6IlJFU0VULlRPT0xCQVIiLDI1'@;
put 'NzoiRVZBTFVBVEUiLDI1ODoiR0VULlRPT0xCQVIiLDI1OToiR0VULlRPT0wiLDI2MDoiU1BFTExJTkcuQ0hFQ0siLDI2MToiRVJST1IuVFlQRSIsMjYyOiJBUFAuVElUTEUiLDI2MzoiV0lORE9XLlRJVExFIiwyNjQ6IlNBVkUuVE9PTEJBUiIsMjY1OiJFTkFCTEUuVE9PTCIsMjY2OiJQUkVT'@;
put 'Uy5UT09MIiwyNjc6IlJFR0lTVEVSLklEIiwyNjg6IkdFVC5XT1JLQk9PSyIsMjY5OiJBVkVERVYiLDI3MDoiQkVUQURJU1QiLDI3MToiR0FNTUFMTiIsMjcyOiJCRVRBSU5WIiwyNzM6IkJJTk9NRElTVCIsMjc0OiJDSElESVNUIiwyNzU6IkNISUlOViIsMjc2OiJDT01CSU4iLDI3NzoiQ09O'@;
put 'RklERU5DRSIsMjc4OiJDUklUQklOT00iLDI3OToiRVZFTiIsMjgwOiJFWFBPTkRJU1QiLDI4MToiRkRJU1QiLDI4MjoiRklOViIsMjgzOiJGSVNIRVIiLDI4NDoiRklTSEVSSU5WIiwyODU6IkZMT09SIiwyODY6IkdBTU1BRElTVCIsMjg3OiJHQU1NQUlOViIsMjg4OiJDRUlMSU5HIiwyODk6'@;
put 'IkhZUEdFT01ESVNUIiwyOTA6IkxPR05PUk1ESVNUIiwyOTE6IkxPR0lOViIsMjkyOiJORUdCSU5PTURJU1QiLDI5MzoiTk9STURJU1QiLDI5NDoiTk9STVNESVNUIiwyOTU6Ik5PUk1JTlYiLDI5NjoiTk9STVNJTlYiLDI5NzoiU1RBTkRBUkRJWkUiLDI5ODoiT0REIiwyOTk6IlBFUk1VVCIs'@;
put 'MzAwOiJQT0lTU09OIiwzMDE6IlRESVNUIiwzMDI6IldFSUJVTEwiLDMwMzoiU1VNWE1ZMiIsMzA0OiJTVU1YMk1ZMiIsMzA1OiJTVU1YMlBZMiIsMzA2OiJDSElURVNUIiwzMDc6IkNPUlJFTCIsMzA4OiJDT1ZBUiIsMzA5OiJGT1JFQ0FTVCIsMzEwOiJGVEVTVCIsMzExOiJJTlRFUkNFUFQi'@;
put 'LDMxMjoiUEVBUlNPTiIsMzEzOiJSU1EiLDMxNDoiU1RFWVgiLDMxNToiU0xPUEUiLDMxNjoiVFRFU1QiLDMxNzoiUFJPQiIsMzE4OiJERVZTUSIsMzE5OiJHRU9NRUFOIiwzMjA6IkhBUk1FQU4iLDMyMToiU1VNU1EiLDMyMjoiS1VSVCIsMzIzOiJTS0VXIiwzMjQ6IlpURVNUIiwzMjU6IkxB'@;
put 'UkdFIiwzMjY6IlNNQUxMIiwzMjc6IlFVQVJUSUxFIiwzMjg6IlBFUkNFTlRJTEUiLDMyOToiUEVSQ0VOVFJBTksiLDMzMDoiTU9ERSIsMzMxOiJUUklNTUVBTiIsMzMyOiJUSU5WIiwzMzQ6Ik1PVklFLkNPTU1BTkQiLDMzNToiR0VULk1PVklFIiwzMzY6IkNPTkNBVEVOQVRFIiwzMzc6IlBP'@;
put 'V0VSIiwzMzg6IlBJVk9ULkFERC5EQVRBIiwzMzk6IkdFVC5QSVZPVC5UQUJMRSIsMzQwOiJHRVQuUElWT1QuRklFTEQiLDM0MToiR0VULlBJVk9ULklURU0iLDM0MjoiUkFESUFOUyIsMzQzOiJERUdSRUVTIiwzNDQ6IlNVQlRPVEFMIiwzNDU6IlNVTUlGIiwzNDY6IkNPVU5USUYiLDM0Nzoi'@;
put 'Q09VTlRCTEFOSyIsMzQ4OiJTQ0VOQVJJTy5HRVQiLDM0OToiT1BUSU9OUy5MSVNUUy5HRVQiLDM1MDoiSVNQTVQiLDM1MToiREFURURJRiIsMzUyOiJEQVRFU1RSSU5HIiwzNTM6Ik5VTUJFUlNUUklORyIsMzU0OiJST01BTiIsMzU1OiJPUEVOLkRJQUxPRyIsMzU2OiJTQVZFLkRJQUxPRyIs'@;
put 'MzU3OiJWSUVXLkdFVCIsMzU4OiJHRVRQSVZPVERBVEEiLDM1OToiSFlQRVJMSU5LIiwzNjA6IlBIT05FVElDIiwzNjE6IkFWRVJBR0VBIiwzNjI6Ik1BWEEiLDM2MzoiTUlOQSIsMzY0OiJTVERFVlBBIiwzNjU6IlZBUlBBIiwzNjY6IlNUREVWQSIsMzY3OiJWQVJBIiwzNjg6IkJBSFRURVhU'@;
put 'IiwzNjk6IlRIQUlEQVlPRldFRUsiLDM3MDoiVEhBSURJR0lUIiwzNzE6IlRIQUlNT05USE9GWUVBUiIsMzcyOiJUSEFJTlVNU09VTkQiLDM3MzoiVEhBSU5VTVNUUklORyIsMzc0OiJUSEFJU1RSSU5HTEVOR1RIIiwzNzU6IklTVEhBSURJR0lUIiwzNzY6IlJPVU5EQkFIVERPV04iLDM3Nzoi'@;
put 'Uk9VTkRCQUhUVVAiLDM3ODoiVEhBSVlFQVIiLDM3OToiUlREIiwzODA6IkNVQkVWQUxVRSIsMzgxOiJDVUJFTUVNQkVSIiwzODI6IkNVQkVNRU1CRVJQUk9QRVJUWSIsMzgzOiJDVUJFUkFOS0VETUVNQkVSIiwzODQ6IkhFWDJCSU4iLDM4NToiSEVYMkRFQyIsMzg2OiJIRVgyT0NUIiwzODc6'@;
put 'IkRFQzJCSU4iLDM4ODoiREVDMkhFWCIsMzg5OiJERUMyT0NUIiwzOTA6Ik9DVDJCSU4iLDM5MToiT0NUMkhFWCIsMzkyOiJPQ1QyREVDIiwzOTM6IkJJTjJERUMiLDM5NDoiQklOMk9DVCIsMzk1OiJCSU4ySEVYIiwzOTY6IklNU1VCIiwzOTc6IklNRElWIiwzOTg6IklNUE9XRVIiLDM5OToi'@;
put 'SU1BQlMiLDQwMDoiSU1TUVJUIiw0MDE6IklNTE4iLDQwMjoiSU1MT0cyIiw0MDM6IklNTE9HMTAiLDQwNDoiSU1TSU4iLDQwNToiSU1DT1MiLDQwNjoiSU1FWFAiLDQwNzoiSU1BUkdVTUVOVCIsNDA4OiJJTUNPTkpVR0FURSIsNDA5OiJJTUFHSU5BUlkiLDQxMDoiSU1SRUFMIiw0MTE6IkNP'@;
put 'TVBMRVgiLDQxMjoiSU1TVU0iLDQxMzoiSU1QUk9EVUNUIiw0MTQ6IlNFUklFU1NVTSIsNDE1OiJGQUNURE9VQkxFIiw0MTY6IlNRUlRQSSIsNDE3OiJRVU9USUVOVCIsNDE4OiJERUxUQSIsNDE5OiJHRVNURVAiLDQyMDoiSVNFVkVOIiw0MjE6IklTT0REIiw0MjI6Ik1ST1VORCIsNDIzOiJF'@;
put 'UkYiLDQyNDoiRVJGQyIsNDI1OiJCRVNTRUxKIiw0MjY6IkJFU1NFTEsiLDQyNzoiQkVTU0VMWSIsNDI4OiJCRVNTRUxJIiw0Mjk6IlhJUlIiLDQzMDoiWE5QViIsNDMxOiJQUklDRU1BVCIsNDMyOiJZSUVMRE1BVCIsNDMzOiJJTlRSQVRFIiw0MzQ6IlJFQ0VJVkVEIiw0MzU6IkRJU0MiLDQz'@;
put 'NjoiUFJJQ0VESVNDIiw0Mzc6IllJRUxERElTQyIsNDM4OiJUQklMTEVRIiw0Mzk6IlRCSUxMUFJJQ0UiLDQ0MDoiVEJJTExZSUVMRCIsNDQxOiJQUklDRSIsNDQyOiJZSUVMRCIsNDQzOiJET0xMQVJERSIsNDQ0OiJET0xMQVJGUiIsNDQ1OiJOT01JTkFMIiw0NDY6IkVGRkVDVCIsNDQ3OiJD'@;
put 'VU1QUklOQyIsNDQ4OiJDVU1JUE1UIiw0NDk6IkVEQVRFIiw0NTA6IkVPTU9OVEgiLDQ1MToiWUVBUkZSQUMiLDQ1MjoiQ09VUERBWUJTIiw0NTM6IkNPVVBEQVlTIiw0NTQ6IkNPVVBEQVlTTkMiLDQ1NToiQ09VUE5DRCIsNDU2OiJDT1VQTlVNIiw0NTc6IkNPVVBQQ0QiLDQ1ODoiRFVSQVRJ'@;
put 'T04iLDQ1OToiTURVUkFUSU9OIiw0NjA6Ik9ERExQUklDRSIsNDYxOiJPRERMWUlFTEQiLDQ2MjoiT0RERlBSSUNFIiw0NjM6Ik9EREZZSUVMRCIsNDY0OiJSQU5EQkVUV0VFTiIsNDY1OiJXRUVLTlVNIiw0NjY6IkFNT1JERUdSQyIsNDY3OiJBTU9STElOQyIsNDY4OiJDT05WRVJUIiw3MjQ6'@;
put 'IlNIRUVUSlMiLDQ2OToiQUNDUklOVCIsNDcwOiJBQ0NSSU5UTSIsNDcxOiJXT1JLREFZIiw0NzI6Ik5FVFdPUktEQVlTIiw0NzM6IkdDRCIsNDc0OiJNVUxUSU5PTUlBTCIsNDc1OiJMQ00iLDQ3NjoiRlZTQ0hFRFVMRSIsNDc3OiJDVUJFS1BJTUVNQkVSIiw0Nzg6IkNVQkVTRVQiLDQ3OToi'@;
put 'Q1VCRVNFVENPVU5UIiw0ODA6IklGRVJST1IiLDQ4MToiQ09VTlRJRlMiLDQ4MjoiU1VNSUZTIiw0ODM6IkFWRVJBR0VJRiIsNDg0OiJBVkVSQUdFSUZTIn0sUUI9ezI6MSwzOjEsMTA6MCwxNToxLDE2OjEsMTc6MSwxODoxLDE5OjAsMjA6MSwyMToxLDIyOjEsMjM6MSwyNDoxLDI1OjEsMjY6'@;
put 'MSwyNzoyLDMwOjIsMzE6MywzMjoxLDMzOjEsMzQ6MCwzNTowLDM4OjEsMzk6Miw0MDozLDQxOjMsNDI6Myw0MzozLDQ0OjMsNDU6Myw0NzozLDQ4OjIsNTM6MSw2MTozLDYzOjAsNjU6Myw2NjozLDY3OjEsNjg6MSw2OToxLDcwOjEsNzE6MSw3MjoxLDczOjEsNzQ6MCw3NToxLDc2OjEsNzc6'@;
put 'MSw3OToyLDgwOjIsODM6MSw4NTowLDg2OjEsODk6MCw5MDoxLDk0OjAsOTU6MCw5NzoyLDk4OjEsOTk6MSwxMDE6MywxMDI6MywxMDU6MSwxMDY6MSwxMDg6MiwxMTE6MSwxMTI6MSwxMTM6MSwxMTQ6MSwxMTc6MiwxMTg6MSwxMTk6NCwxMjE6MSwxMjY6MSwxMjc6MSwxMjg6MSwxMjk6MSwx'@;
put 'MzA6MSwxMzE6MSwxMzM6MSwxMzQ6MSwxMzU6MSwxMzY6MiwxMzc6MiwxMzg6MiwxNDA6MSwxNDE6MSwxNDI6MywxNDM6NCwxNDQ6NCwxNjE6MSwxNjI6MSwxNjM6MSwxNjQ6MSwxNjU6MiwxNzI6MSwxNzU6MiwxNzY6MiwxNzc6MywxNzg6MiwxNzk6MSwxODQ6MSwxODY6MSwxODk6MywxOTA6'@;
put 'MSwxOTU6MywxOTY6MywxOTc6MSwxOTg6MSwxOTk6MywyMDE6MSwyMDc6NCwyMTA6MywyMTE6MSwyMTI6MiwyMTM6MiwyMTQ6MSwyMTU6MSwyMjU6MCwyMjk6MSwyMzA6MSwyMzE6MSwyMzI6MSwyMzM6MSwyMzQ6MSwyMzU6MywyNDQ6MSwyNDc6NCwyNTI6MiwyNTc6MSwyNjE6MSwyNzE6MSwy'@;
put 'NzM6NCwyNzQ6MiwyNzU6MiwyNzY6MiwyNzc6MywyNzg6MywyNzk6MSwyODA6MywyODE6MywyODI6MywyODM6MSwyODQ6MSwyODU6MiwyODY6NCwyODc6MywyODg6MiwyODk6NCwyOTA6MywyOTE6MywyOTI6MywyOTM6NCwyOTQ6MSwyOTU6MywyOTY6MSwyOTc6MywyOTg6MSwyOTk6MiwzMDA6'@;
put 'MywzMDE6MywzMDI6NCwzMDM6MiwzMDQ6MiwzMDU6MiwzMDY6MiwzMDc6MiwzMDg6MiwzMDk6MywzMTA6MiwzMTE6MiwzMTI6MiwzMTM6MiwzMTQ6MiwzMTU6MiwzMTY6NCwzMjU6MiwzMjY6MiwzMjc6MiwzMjg6MiwzMzE6MiwzMzI6MiwzMzc6MiwzNDI6MSwzNDM6MSwzNDY6MiwzNDc6MSwz'@;
put 'NTA6NCwzNTE6MywzNTI6MSwzNTM6MiwzNjA6MSwzNjg6MSwzNjk6MSwzNzA6MSwzNzE6MSwzNzI6MSwzNzM6MSwzNzQ6MSwzNzU6MSwzNzY6MSwzNzc6MSwzNzg6MSwzODI6MywzODU6MSwzOTI6MSwzOTM6MSwzOTY6MiwzOTc6MiwzOTg6MiwzOTk6MSw0MDA6MSw0MDE6MSw0MDI6MSw0MDM6'@;
put 'MSw0MDQ6MSw0MDU6MSw0MDY6MSw0MDc6MSw0MDg6MSw0MDk6MSw0MTA6MSw0MTQ6NCw0MTU6MSw0MTY6MSw0MTc6Miw0MjA6MSw0MjE6MSw0MjI6Miw0MjQ6MSw0MjU6Miw0MjY6Miw0Mjc6Miw0Mjg6Miw0MzA6Myw0Mzg6Myw0Mzk6Myw0NDA6Myw0NDM6Miw0NDQ6Miw0NDU6Miw0NDY6Miw0'@;
put 'NDc6Niw0NDg6Niw0NDk6Miw0NTA6Miw0NjQ6Miw0Njg6Myw0NzY6Miw0Nzk6MSw0ODA6Miw2NTUzNTowfSxyYj17Il94bGZuLkFDT1QiOiJBQ09UIiwiX3hsZm4uQUNPVEgiOiJBQ09USCIsIl94bGZuLkFHR1JFR0FURSI6IkFHR1JFR0FURSIsIl94bGZuLkFSQUJJQyI6IkFSQUJJQyIsIl94'@;
put 'bGZuLkFWRVJBR0VJRiI6IkFWRVJBR0VJRiIsIl94bGZuLkFWRVJBR0VJRlMiOiJBVkVSQUdFSUZTIiwiX3hsZm4uQkFTRSI6IkJBU0UiLCJfeGxmbi5CRVRBLkRJU1QiOiJCRVRBLkRJU1QiLCJfeGxmbi5CRVRBLklOViI6IkJFVEEuSU5WIiwiX3hsZm4uQklOT00uRElTVCI6IkJJTk9NLkRJ'@;
put 'U1QiLCJfeGxmbi5CSU5PTS5ESVNULlJBTkdFIjoiQklOT00uRElTVC5SQU5HRSIsIl94bGZuLkJJTk9NLklOViI6IkJJTk9NLklOViIsIl94bGZuLkJJVEFORCI6IkJJVEFORCIsIl94bGZuLkJJVExTSElGVCI6IkJJVExTSElGVCIsIl94bGZuLkJJVE9SIjoiQklUT1IiLCJfeGxmbi5CSVRS'@;
put 'U0hJRlQiOiJCSVRSU0hJRlQiLCJfeGxmbi5CSVRYT1IiOiJCSVRYT1IiLCJfeGxmbi5DRUlMSU5HLk1BVEgiOiJDRUlMSU5HLk1BVEgiLCJfeGxmbi5DRUlMSU5HLlBSRUNJU0UiOiJDRUlMSU5HLlBSRUNJU0UiLCJfeGxmbi5DSElTUS5ESVNUIjoiQ0hJU1EuRElTVCIsIl94bGZuLkNISVNR'@;
put 'LkRJU1QuUlQiOiJDSElTUS5ESVNULlJUIiwiX3hsZm4uQ0hJU1EuSU5WIjoiQ0hJU1EuSU5WIiwiX3hsZm4uQ0hJU1EuSU5WLlJUIjoiQ0hJU1EuSU5WLlJUIiwiX3hsZm4uQ0hJU1EuVEVTVCI6IkNISVNRLlRFU1QiLCJfeGxmbi5DT01CSU5BIjoiQ09NQklOQSIsIl94bGZuLkNPTkNBVCI6'@;
put 'IkNPTkNBVCIsIl94bGZuLkNPTkZJREVOQ0UuTk9STSI6IkNPTkZJREVOQ0UuTk9STSIsIl94bGZuLkNPTkZJREVOQ0UuVCI6IkNPTkZJREVOQ0UuVCIsIl94bGZuLkNPVCI6IkNPVCIsIl94bGZuLkNPVEgiOiJDT1RIIiwiX3hsZm4uQ09VTlRJRlMiOiJDT1VOVElGUyIsIl94bGZuLkNPVkFS'@;
put 'SUFOQ0UuUCI6IkNPVkFSSUFOQ0UuUCIsIl94bGZuLkNPVkFSSUFOQ0UuUyI6IkNPVkFSSUFOQ0UuUyIsIl94bGZuLkNTQyI6IkNTQyIsIl94bGZuLkNTQ0giOiJDU0NIIiwiX3hsZm4uREFZUyI6IkRBWVMiLCJfeGxmbi5ERUNJTUFMIjoiREVDSU1BTCIsIl94bGZuLkVDTUEuQ0VJTElORyI6'@;
put 'IkVDTUEuQ0VJTElORyIsIl94bGZuLkVSRi5QUkVDSVNFIjoiRVJGLlBSRUNJU0UiLCJfeGxmbi5FUkZDLlBSRUNJU0UiOiJFUkZDLlBSRUNJU0UiLCJfeGxmbi5FWFBPTi5ESVNUIjoiRVhQT04uRElTVCIsIl94bGZuLkYuRElTVCI6IkYuRElTVCIsIl94bGZuLkYuRElTVC5SVCI6IkYuRElT'@;
put 'VC5SVCIsIl94bGZuLkYuSU5WIjoiRi5JTlYiLCJfeGxmbi5GLklOVi5SVCI6IkYuSU5WLlJUIiwiX3hsZm4uRi5URVNUIjoiRi5URVNUIiwiX3hsZm4uRklMVEVSWE1MIjoiRklMVEVSWE1MIiwiX3hsZm4uRkxPT1IuTUFUSCI6IkZMT09SLk1BVEgiLCJfeGxmbi5GTE9PUi5QUkVDSVNFIjoi'@;
put 'RkxPT1IuUFJFQ0lTRSIsIl94bGZuLkZPUkVDQVNULkVUUyI6IkZPUkVDQVNULkVUUyIsIl94bGZuLkZPUkVDQVNULkVUUy5DT05GSU5UIjoiRk9SRUNBU1QuRVRTLkNPTkZJTlQiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFkiOiJGT1JFQ0FTVC5FVFMuU0VBU09OQUxJVFkiLCJf'@;
put 'eGxmbi5GT1JFQ0FTVC5FVFMuU1RBVCI6IkZPUkVDQVNULkVUUy5TVEFUIiwiX3hsZm4uRk9SRUNBU1QuTElORUFSIjoiRk9SRUNBU1QuTElORUFSIiwiX3hsZm4uRk9STVVMQVRFWFQiOiJGT1JNVUxBVEVYVCIsIl94bGZuLkdBTU1BIjoiR0FNTUEiLCJfeGxmbi5HQU1NQS5ESVNUIjoiR0FN'@;
put 'TUEuRElTVCIsIl94bGZuLkdBTU1BLklOViI6IkdBTU1BLklOViIsIl94bGZuLkdBTU1BTE4uUFJFQ0lTRSI6IkdBTU1BTE4uUFJFQ0lTRSIsIl94bGZuLkdBVVNTIjoiR0FVU1MiLCJfeGxmbi5IWVBHRU9NLkRJU1QiOiJIWVBHRU9NLkRJU1QiLCJfeGxmbi5JRkVSUk9SIjoiSUZFUlJPUiIs'@;
put 'Il94bGZuLklGTkEiOiJJRk5BIiwiX3hsZm4uSUZTIjoiSUZTIiwiX3hsZm4uSU1DT1NIIjoiSU1DT1NIIiwiX3hsZm4uSU1DT1QiOiJJTUNPVCIsIl94bGZuLklNQ1NDIjoiSU1DU0MiLCJfeGxmbi5JTUNTQ0giOiJJTUNTQ0giLCJfeGxmbi5JTVNFQyI6IklNU0VDIiwiX3hsZm4uSU1TRUNI'@;
put 'IjoiSU1TRUNIIiwiX3hsZm4uSU1TSU5IIjoiSU1TSU5IIiwiX3hsZm4uSU1UQU4iOiJJTVRBTiIsIl94bGZuLklTRk9STVVMQSI6IklTRk9STVVMQSIsIl94bGZuLklTTy5DRUlMSU5HIjoiSVNPLkNFSUxJTkciLCJfeGxmbi5JU09XRUVLTlVNIjoiSVNPV0VFS05VTSIsIl94bGZuLkxPR05P'@;
put 'Uk0uRElTVCI6IkxPR05PUk0uRElTVCIsIl94bGZuLkxPR05PUk0uSU5WIjoiTE9HTk9STS5JTlYiLCJfeGxmbi5NQVhJRlMiOiJNQVhJRlMiLCJfeGxmbi5NSU5JRlMiOiJNSU5JRlMiLCJfeGxmbi5NT0RFLk1VTFQiOiJNT0RFLk1VTFQiLCJfeGxmbi5NT0RFLlNOR0wiOiJNT0RFLlNOR0wi'@;
put 'LCJfeGxmbi5NVU5JVCI6Ik1VTklUIiwiX3hsZm4uTkVHQklOT00uRElTVCI6Ik5FR0JJTk9NLkRJU1QiLCJfeGxmbi5ORVRXT1JLREFZUy5JTlRMIjoiTkVUV09SS0RBWVMuSU5UTCIsIl94bGZuLk5JR0JJTk9NIjoiTklHQklOT00iLCJfeGxmbi5OT1JNLkRJU1QiOiJOT1JNLkRJU1QiLCJf'@;
put 'eGxmbi5OT1JNLklOViI6Ik5PUk0uSU5WIiwiX3hsZm4uTk9STS5TLkRJU1QiOiJOT1JNLlMuRElTVCIsIl94bGZuLk5PUk0uUy5JTlYiOiJOT1JNLlMuSU5WIiwiX3hsZm4uTlVNQkVSVkFMVUUiOiJOVU1CRVJWQUxVRSIsIl94bGZuLlBEVVJBVElPTiI6IlBEVVJBVElPTiIsIl94bGZuLlBF'@;
put 'UkNFTlRJTEUuRVhDIjoiUEVSQ0VOVElMRS5FWEMiLCJfeGxmbi5QRVJDRU5USUxFLklOQyI6IlBFUkNFTlRJTEUuSU5DIiwiX3hsZm4uUEVSQ0VOVFJBTksuRVhDIjoiUEVSQ0VOVFJBTksuRVhDIiwiX3hsZm4uUEVSQ0VOVFJBTksuSU5DIjoiUEVSQ0VOVFJBTksuSU5DIiwiX3hsZm4uUEVS'@;
put 'TVVUQVRJT05BIjoiUEVSTVVUQVRJT05BIiwiX3hsZm4uUEhJIjoiUEhJIiwiX3hsZm4uUE9JU1NPTi5ESVNUIjoiUE9JU1NPTi5ESVNUIiwiX3hsZm4uUVVBUlRJTEUuRVhDIjoiUVVBUlRJTEUuRVhDIiwiX3hsZm4uUVVBUlRJTEUuSU5DIjoiUVVBUlRJTEUuSU5DIiwiX3hsZm4uUVVFUllT'@;
put 'VFJJTkciOiJRVUVSWVNUUklORyIsIl94bGZuLlJBTksuQVZHIjoiUkFOSy5BVkciLCJfeGxmbi5SQU5LLkVRIjoiUkFOSy5FUSIsIl94bGZuLlJSSSI6IlJSSSIsIl94bGZuLlNFQyI6IlNFQyIsIl94bGZuLlNFQ0giOiJTRUNIIiwiX3hsZm4uU0hFRVQiOiJTSEVFVCIsIl94bGZuLlNIRUVU'@;
put 'UyI6IlNIRUVUUyIsIl94bGZuLlNLRVcuUCI6IlNLRVcuUCIsIl94bGZuLlNUREVWLlAiOiJTVERFVi5QIiwiX3hsZm4uU1RERVYuUyI6IlNUREVWLlMiLCJfeGxmbi5TVU1JRlMiOiJTVU1JRlMiLCJfeGxmbi5TV0lUQ0giOiJTV0lUQ0giLCJfeGxmbi5ULkRJU1QiOiJULkRJU1QiLCJfeGxm'@;
put 'bi5ULkRJU1QuMlQiOiJULkRJU1QuMlQiLCJfeGxmbi5ULkRJU1QuUlQiOiJULkRJU1QuUlQiLCJfeGxmbi5ULklOViI6IlQuSU5WIiwiX3hsZm4uVC5JTlYuMlQiOiJULklOVi4yVCIsIl94bGZuLlQuVEVTVCI6IlQuVEVTVCIsIl94bGZuLlRFWFRKT0lOIjoiVEVYVEpPSU4iLCJfeGxmbi5V'@;
put 'TklDSEFSIjoiVU5JQ0hBUiIsIl94bGZuLlVOSUNPREUiOiJVTklDT0RFIiwiX3hsZm4uVkFSLlAiOiJWQVIuUCIsIl94bGZuLlZBUi5TIjoiVkFSLlMiLCJfeGxmbi5XRUJTRVJWSUNFIjoiV0VCU0VSVklDRSIsIl94bGZuLldFSUJVTEwuRElTVCI6IldFSUJVTEwuRElTVCIsIl94bGZuLldP'@;
put 'UktEQVkuSU5UTCI6IldPUktEQVkuSU5UTCIsIl94bGZuLlhPUiI6IlhPUiIsIl94bGZuLlouVEVTVCI6IlouVEVTVCJ9O2Z1bmN0aW9uIGlTKFMpe3JldHVybiJvZjoiPT1TLnNsaWNlKDAsMykmJihTPVMuc2xpY2UoMykpLDYxPT1TLmNoYXJDb2RlQXQoMCkmJjYxPT0oUz1TLnNsaWNlKDEp'@;
put 'KS5jaGFyQ29kZUF0KDApJiYoUz1TLnNsaWNlKDEpKSwoUz0oUz0oUz1TLnJlcGxhY2UoL0NPTVwuTUlDUk9TT0ZUXC4vZywiIikpLnJlcGxhY2UoL1xbKCg/OlwuW0EtWl0rWzAtOV0rKSg/OjpcLltBLVpdK1swLTldKyk/KVxdL2csZnVuY3Rpb24oUixrKXtyZXR1cm4gay5yZXBsYWNlKC9c'@;
put 'Li9nLCIiKX0pKS5yZXBsYWNlKC9cWy4oI1tBLVpdKls/IV0pXF0vZywiJDEiKSkucmVwbGFjZSgvWzt+XS9nLCIsIikucmVwbGFjZSgvXHwvZywiOyIpfWZ1bmN0aW9uIFo0KFMpe3JldHVybigib2Y6PSIrUy5yZXBsYWNlKG0yLCIkMVsuJDIkMyQ0JDVdIikucmVwbGFjZSgvXF06XFsvZywi'@;
put 'OiIpKS5yZXBsYWNlKC87L2csInwiKS5yZXBsYWNlKC8sL2csIjsiKX1mdW5jdGlvbiBpYihTKXt2YXIgUj1TLnNwbGl0KCI6Iik7cmV0dXJuW1JbMF0uc3BsaXQoIi4iKVswXSxSWzBdLnNwbGl0KCIuIilbMV0rKFIubGVuZ3RoPjE/IjoiKyhSWzFdLnNwbGl0KCIuIilbMV18fFJbMV0uc3Bs'@;
put 'aXQoIi4iKVswXSk6IiIpXX1mdW5jdGlvbiBmRChTKXtyZXR1cm4gUy5yZXBsYWNlKC9cLi8sIiEiKX12YXIgczg9e30sbDg9e307cW8uV1M9WyJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCIsImh0'@;
put 'dHA6Ly9wdXJsLm9jbGMub3JnL29veG1sL29mZmljZURvY3VtZW50L3JlbGF0aW9uc2hpcHMvd29ya3NoZWV0Il07dmFyIHEzPXR5cGVvZiBNYXA8InUiO2Z1bmN0aW9uIG9TKFMsUixrLEcpe3ZhciBRPTAsYWU9Uy5sZW5ndGg7aWYoRyl7aWYocTM/Ry5oYXMoUik6T2JqZWN0LnByb3RvdHlw'@;
put 'ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsUikpZm9yKHZhciBnZT1xMz9HLmdldChSKTpHW1JdO1E8Z2UubGVuZ3RoOysrUSlpZihTW2dlW1FdXS50PT09UiYmKCFTW2dlW1FdXS5yJiYha3x8U1tnZVtRXV0ucj09aykpcmV0dXJuIFMuQ291bnQrKyxnZVtRXX1lbHNlIGZvcig7UTxhZTsrK1Ep'@;
put 'aWYoU1tRXS50PT09UiYmKCFTW1FdLnImJiFrfHxTW1FdLnI9PWspKXJldHVybiBTLkNvdW50KyssUTtyZXR1cm4gU1thZV09e3Q6UixyOmt9LFMuQ291bnQrKyxTLlVuaXF1ZSsrLEcmJihxMz8oRy5oYXMoUil8fEcuc2V0KFIsW10pLEcuZ2V0KFIpLnB1c2goYWUpKTooT2JqZWN0LnByb3Rv'@;
put 'dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsUil8fChHW1JdPVtdKSxHW1JdLnB1c2goYWUpKSksYWV9ZnVuY3Rpb24gYzgoUyxSKXt2YXIgaz17bWluOlMrMSxtYXg6UysxfSxHPVRjO2lmKCFSKXJldHVybiBSO3ZhciBRPS0xO3JldHVybiBSLmF1dG8mJihrLmJlc3RGaXQ9MSxSLmJlc3R3'@;
put 'aWR0aCYmKFE9Ui5iZXN0d2lkdGgpLGRlbGV0ZSBSLmJlc3R3aWR0aCksbnVsbCE9Ui53cHg/UT1NNShSLndweCk6bnVsbCE9Ui53Y2g/UT1SLndjaDpudWxsIT1SLndpZHRoJiYoay5jdXN0b21XaWR0aD0xKSxRPi0xPyhrLndpZHRoPUVmKFEpLGsuY3VzdG9tV2lkdGg9MSk6bnVsbCE9Ui53'@;
put 'aWR0aCYmKGsud2lkdGg9Ui53aWR0aCksUi5oaWRkZW4mJihrLmhpZGRlbj0hMCksay5iZXN0Rml0JiZkZWxldGUgay5jdXN0b21XaWR0aCxUYz1HLG51bGwhPVIubGV2ZWwmJihrLm91dGxpbmVMZXZlbD1rLmxldmVsPVIubGV2ZWwpLG51bGwhPVIuc3R5bGUmJihrLnN0eWxlPVIuc3R5bGUp'@;
put 'LGt9ZnVuY3Rpb24gYVMoUyxSLGspe3ZhciBHPVNzKFNbIiFyZWYiXSksUT0wLGFlPVNbIiFtZXJnZXMiXXx8W10sZ2U9QXJyYXkuaXNBcnJheShTKTtlOmZvcih2YXIgcGU9MDtwZTw9Ry5lLnI7KytwZSl7Zm9yKHZhciB5ZT0wO3llPGFlLmxlbmd0aDsrK3llKWlmKGFlW3llXS5zLnI8PXBl'@;
put 'JiZwZTw9YWVbeWVdLmUuciYmYWVbeWVdLnMuYzw9ayYmazw9YWVbeWVdLmUuYyljb250aW51ZSBlO3ZhciBQZT1nZT8oU1twZV18fFtdKVtrXTpTW3FpKHtyOnBlLGM6a30pXTtpZihQZSl7dmFyIE5lPTE7aWYoUGUucyYmKE5lPXlDKFBlLnMpL2JDLkNhbGlicmlbMTJdfHwxKSxQZS53KVE9'@;
put 'TWF0aC5tYXgoUSxQZS53Lmxlbmd0aCpOZSk7ZWxzZSBzd2l0Y2goUGUudCl7Y2FzZSJiIjpjYXNlImUiOlE9TWF0aC5tYXgoUSw1Kk5lKTticmVhaztjYXNlInMiOlE9TWF0aC5tYXgoUSxQZS52Lmxlbmd0aCpOZSoxLjJ8MCk7YnJlYWs7Y2FzZSJuIjpyNShQZSxQZS52KSxRPU1hdGgubWF4'@;
put 'KFEsU3RyaW5nKFBlLnd8fFBlLnYpLmxlbmd0aCpOZSk7YnJlYWs7Y2FzZSJkIjpRPU1hdGgubWF4KFEsOCpOZSl9fX1RPDEmJihRPTEpLFIuYmVzdHdpZHRoPVF9ZnVuY3Rpb24gWDMoUyxSKXtpZihTKXt2YXIgaz1bLjcsLjcsLjc1LC43NSwuMywuM107InhsbWwiPT1SJiYoaz1bMSwxLDEs'@;
put 'MSwuNSwuNV0pLG51bGw9PVMubGVmdCYmKFMubGVmdD1rWzBdKSxudWxsPT1TLnJpZ2h0JiYoUy5yaWdodD1rWzFdKSxudWxsPT1TLnRvcCYmKFMudG9wPWtbMl0pLG51bGw9PVMuYm90dG9tJiYoUy5ib3R0b209a1szXSksbnVsbD09Uy5oZWFkZXImJihTLmhlYWRlcj1rWzRdKSxudWxsPT1T'@;
put 'LmZvb3RlciYmKFMuZm9vdGVyPWtbNV0pfX1mdW5jdGlvbiBsUyhTLFIpe2Zvcih2YXIgaz1SZShSKSxHPTA7RzxTLmxlbmd0aDsrK0cpe3ZhciBRPSEwLGFlPVNbR107aWYoYWUmJmsubGVuZ3RoPT1SZShhZSkubGVuZ3RoJiYoay5mb3JFYWNoKGZ1bmN0aW9uKGdlKXtpZihRKXtpZihudWxs'@;
put 'PT09UltnZV0hPShudWxsPT09YWVbZ2VdKSlyZXR1cm4gdm9pZChRPSExKTtpZigib2JqZWN0Ij09dHlwZW9mIFJbZ2VdKWlmKFsiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJdLmluZGV4T2YoZ2UpPi0xKXtpZihzaChSW2dlXSxhZVtnZV0pKXJldHVybiB2b2lkKFE9ITEpfWVsc2V7aWYo'@;
put 'IShbImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdLmluZGV4T2YoZ2UpPi0xKSlyZXR1cm4gdm9pZChRPSExKTtpZih1ayhSW2dlXSxhZVtnZV0pKXJldHVybiB2b2lkKFE9ITEpfWlmKFJbZ2VdIT1hZVtnZV0pcmV0dXJuIHZvaWQoUT0hMSl9fSksUSkpcmV0dXJuIEd9cmV0dXJuIFNb'@;
put 'Uy5sZW5ndGhdPXF0KFIpLFMubGVuZ3RoLTF9ZnVuY3Rpb24gczAoUyxSLGssRyl7dmFyIFE9Ry5yZXZzc2ZbbnVsbCE9ay56P2suejoiR2VuZXJhbCJdLGFlPTYwLGdlPVMubGVuZ3RoO2lmKG51bGw9PVEmJkcuc3NmKWZvcig7YWU8MzkyOysrYWUpaWYobnVsbD09Ry5zc2ZbYWVdKXtBLmxv'@;
put 'YWQoay56LGFlKSxHLnNzZlthZV09ay56LEcucmV2c3NmW2suel09UT1hZTticmVha312YXIgcGU9MCx5ZT0wLFBlPTAsTmU9MDtpZihHLmNlbGxTdHlsZXMpe2lmKGsucyl7aWYoRy5Gb250cyl7ay5zLmNvbG9yfHwoay5zLmNvbG9yPXt0aGVtZToxLHJnYjoiMDAwMDAwIn0pO2Zvcih2YXIg'@;
put 'WWU9KGsucy5ib2xkPzE6MCl8KGsucy5pdGFsaWM/MjowKXwoay5zLnN0cmlrZT80OjApfChrLnMuc2hhZG93Pzg6MCk7cGU8Ry5Gb250cy5sZW5ndGg7KytwZSl7dmFyIGV0PUcuRm9udHNbcGVdO2lmKG51bGw9PWV0LmZvbnRoYXNoJiYoZXQuZm9udGhhc2g9KGV0LmJvbGQ/MTowKXwoZXQu'@;
put 'aXRhbGljPzI6MCl8KGV0LnN0cmlrZT80OjApfChldC5zaGFkb3c/ODowKSksIShZZSE9ZXQuZm9udGhhc2h8fCEhay5zLmNvbG9yIT0hIWV0LmNvbG9yfHxrLnMudmFsaWduIT1ldC52YWxpZ258fChrLnMuc3p8fGV0LnN6KSYmKGsucy5zenx8MTIpIT0oZXQuc3p8fDEyKXx8ay5zLm5hbWUm'@;
put 'Jmsucy5uYW1lIT1ldC5uYW1lfHwoay5zLnVuZGVybGluZXx8MCkhPShldC51bmRlcmxpbmV8fDApfHxrLnMuY29sb3ImJnNoKGsucy5jb2xvcixldC5jb2xvcikpKWJyZWFrfXBlPT1HLkZvbnRzLmxlbmd0aCYmKEcuRm9udHMucHVzaCh7c3o6ay5zLnN6fHwxMixjb2xvcjprLnMuY29sb3J8'@;
put 'fHt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZTprLnMubmFtZXx8IkNhbGlicmkiLGZhbWlseTprLnMuZmFtaWx5fHwyLHNjaGVtZTprLnMuc2NoZW1lLGJvbGQ6ay5zLmJvbGQsaXRhbGljOmsucy5pdGFsaWMsc3RyaWtlOmsucy5zdHJpa2Usc2hhZG93Omsucy5zaGFkb3csdmFsaWduOmsu'@;
put 'cy52YWxpZ24sdW5kZXJsaW5lOmsucy51bmRlcmxpbmV9KSwxPT1HLkZvbnRzLmxlbmd0aCYmSTQoRy5Gb250c1swXSkpfWlmKEcuRmlsbHMpe2Zvcig7eWU8Ry5GaWxscy5sZW5ndGg7Kyt5ZSl7dmFyIGN0PUcuRmlsbHNbeWVdO2lmKCEhay5zLnN0b3BzPT0hIWN0LnN0b3BzKXtpZihrLnMu'@;
put 'c3RvcHMpe2lmKGsucy5hbmdsZSE9Y3QuYW5nbGUpY29udGludWU7dmFyIEV0PSEwO2lmKGsucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0LE90KXtzaChrdCxjdC5zdG9wc1tPdF0pJiYoRXQ9ITEpLGt0LnYhPWN0LnN0b3BzW090XS52JiYoRXQ9ITEpfSksIUV0KWNvbnRpbnVlfWVsc2V7'@;
put 'aWYobnVsbD09ay5zLnBhdHRlcm5UeXBlJiZrLnMuZmdDb2xvciYmKGsucy5wYXR0ZXJuVHlwZT0ic29saWQiKSxudWxsPT1rLnMucGF0dGVyblR5cGUpYnJlYWs7aWYoay5zLnBhdHRlcm5UeXBlIT1jdC5wYXR0ZXJuVHlwZXx8c2goay5zLmZnQ29sb3IsY3QuZmdDb2xvcil8fHNoKGsucy5i'@;
put 'Z0NvbG9yLGN0LmJnQ29sb3IpKWNvbnRpbnVlfWJyZWFrfX1pZih5ZT09Ry5GaWxscy5sZW5ndGgpe3ZhciBvdD17fTtrLnMuc3RvcHM/KG51bGwhPWsucy5hbmdsZSYmKG90LmFuZ2xlPWsucy5hbmdsZSksb3Quc3RvcHM9W10say5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oa3Qpe290LnN0'@;
put 'b3BzLnB1c2gocXQoa3QpKX0pKTpvdD17cGF0dGVyblR5cGU6ay5zLnBhdHRlcm5UeXBlLGZnQ29sb3I6ay5zLmZnQ29sb3IsYmdDb2xvcjprLnMuYmdDb2xvcn0sRy5GaWxscy5wdXNoKG90KX19aWYoRy5Cb3JkZXJzKXtmb3IoO1BlPEcuQm9yZGVycy5sZW5ndGg7KytQZSl7dmFyIGJ0PUcu'@;
put 'Qm9yZGVyc1tQZV0sanQ9InRvcCI7aWYoay5zW2p0XSl7aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0eWxlfHxzaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7aWYoay5zW2p0PSJib3R0b20iXSl7'@;
put 'aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0eWxlfHxzaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7aWYoay5zW2p0PSJsZWZ0Il0pe2lmKCFidFtqdF18fGsuc1tqdF0uc3R5bGUhPWJ0W2p0XS5z'@;
put 'dHlsZXx8c2goay5zW2p0XS5jb2xvcixidFtqdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbanRdKWNvbnRpbnVlO2lmKGsuc1tqdD0icmlnaHQiXSl7aWYoIWJ0W2p0XXx8ay5zW2p0XS5zdHlsZSE9YnRbanRdLnN0eWxlfHxzaChrLnNbanRdLmNvbG9yLGJ0W2p0XS5jb2xv'@;
put 'cikpY29udGludWV9ZWxzZSBpZihudWxsIT1idFtqdF0pY29udGludWU7YnJlYWt9UGU9PUcuQm9yZGVycy5sZW5ndGgmJkcuQm9yZGVycy5wdXNoKHt0b3A6ay5zLnRvcCYmcXQoay5zLnRvcCl8fHZvaWQgMCxib3R0b206ay5zLmJvdHRvbSYmcXQoay5zLmJvdHRvbSl8fHZvaWQgMCxsZWZ0'@;
put 'Omsucy5sZWZ0JiZxdChrLnMubGVmdCl8fHZvaWQgMCxyaWdodDprLnMucmlnaHQmJnF0KGsucy5yaWdodCl8fHZvaWQgMH0pfWlmKFImJmsucy5zdHlsZSYmIk5vcm1hbCIhPT1rLnMuc3R5bGUpe2ZvcihOZT0xO05lPFIubGVuZ3RoJiZSW05lXS5uYW1lIT1rLnMuc3R5bGU7KytOZSk7TmU9'@;
put 'PVIubGVuZ3RoJiZSLnB1c2goe25hbWU6ay5zLnN0eWxlLG51bUZtdElkOlEsZm9udElkOnBlLGZpbGxJZDp5ZSxib3JkZXJJZDpQZX0pfX1mb3IoYWU9MDthZSE9Z2U7KythZSlpZihTW2FlXS5udW1GbXRJZD09USYmU1thZV0uZm9udElkPT1wZSYmU1thZV0uZmlsbElkPT15ZSYmU1thZV0u'@;
put 'Ym9yZGVySWQ9PVBlJiZTW2FlXS54ZklkPT1OZSl7aWYoay5zJiZrLnMuYWxpZ25tZW50KXtpZighU1thZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKGsucy5hbGlnbm1lbnQuaG9yaXpvbnRhbCE9U1thZV0uYWxpZ25tZW50Lmhvcml6b250YWx8fGsucy5hbGlnbm1lbnQudmVydGljYWwhPVNb'@;
put 'YWVdLmFsaWdubWVudC52ZXJ0aWNhbHx8ay5zLmFsaWdubWVudC53cmFwVGV4dCE9U1thZV0uYWxpZ25tZW50LndyYXBUZXh0fHxrLnMuYWxpZ25tZW50LnNocmlua1RvRml0IT1TW2FlXS5hbGlnbm1lbnQuc2hyaW5rVG9GaXR8fGsucy5hbGlnbm1lbnQudGV4dFJvdGF0aW9uIT1TW2FlXS5h'@;
put 'bGlnbm1lbnQudGV4dFJvdGF0aW9ufHxrLnMuYWxpZ25tZW50LmluZGVudCE9U1thZV0uYWxpZ25tZW50LmluZGVudCljb250aW51ZX1lbHNlIGlmKFNbYWVdLmFsaWdubWVudCljb250aW51ZTtpZihrLnMpe2lmKCEhay5zLmhpZGRlbj09KCFTW2FlXS5wcm90ZWN0aW9ufHwhU1thZV0ucHJv'@;
put 'dGVjdGlvbi5oaWRkZW4pfHwhIWsucy5lZGl0YWJsZT09KCFTW2FlXS5wcm90ZWN0aW9ufHwhU1thZV0ucHJvdGVjdGlvbi5lZGl0YWJsZSkpY29udGludWV9ZWxzZSBpZihTW2FlXS5wcm90ZWN0aW9uKWNvbnRpbnVlO3JldHVybiBhZX19ZWxzZSBmb3IoYWU9MDthZSE9Z2U7KythZSlpZihT'@;
put 'W2FlXS5udW1GbXRJZD09PVEpcmV0dXJuIGFlO3JldHVybiBTW2dlXT17bnVtRm10SWQ6USxmb250SWQ6cGUsZmlsbElkOnllLGJvcmRlcklkOlBlLHhmSWQ6TmUsYXBwbHlOdW1iZXJGb3JtYXQ6MX0scGU+MCYmKFNbZ2VdLmFwcGx5Rm9udD0xKSx5ZT4wJiYoU1tnZV0uYXBwbHlGaWxsPTEp'@;
put 'LFBlPjAmJihTW2dlXS5hcHBseUJvcmRlcj0xKSwhUiYmay5zJiZrLnMuc3R5bGUmJiJOb3JtYWwiIT1rLnMuc3R5bGUmJihTW2dlXS5zdHlsZT1rLnMuc3R5bGUpLGsucyYmay5zLmFsaWdubWVudCYmKFNbZ2VdLmFsaWdubWVudD17fSxbImhvcml6b250YWwiLCJ2ZXJ0aWNhbCIsIndyYXBU'@;
put 'ZXh0Iiwic2hyaW5rVG9GaXQiLCJpbmRlbnQiLCJ0ZXh0Um90YXRpb24iXS5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtudWxsIT1rLnMuYWxpZ25tZW50W2t0XSYmKFNbZ2VdLmFsaWdubWVudFtrdF09ay5zLmFsaWdubWVudFtrdF0pfSkpLGsucyYmay5zLmhpZGRlbiYmKFNbZ2VdLnByb3RlY3Rp'@;
put 'b258fChTW2dlXS5wcm90ZWN0aW9uPXt9KSxTW2dlXS5wcm90ZWN0aW9uLmhpZGRlbj0hMCksay5zJiZrLnMuZWRpdGFibGUmJihTW2dlXS5wcm90ZWN0aW9ufHwoU1tnZV0ucHJvdGVjdGlvbj17fSksU1tnZV0ucHJvdGVjdGlvbi5lZGl0YWJsZT0hMCksZ2V9ZnVuY3Rpb24gSjMoUyxSLGss'@;
put 'RyxRLGFlLGdlLHBlKXsiZCI9PT1TLnQmJiJzdHJpbmciPT10eXBlb2YgUy52JiYoUy52PUhlKFMudikpO3RyeXthZS5jZWxsTkYmJihTLno9QS5fdGFibGVbUl0pfWNhdGNoKFBlKXtpZihhZS5XVEYpdGhyb3cgUGV9aWYoKCFhZXx8ITEhPT1hZS5jZWxsVGV4dCkmJiJ6IiE9Uy50KXRyeXtp'@;
put 'ZihudWxsPT1BLl90YWJsZVtSXSYmQS5sb2FkKHNlW1JdfHwiR2VuZXJhbCIsUiksImUiPT09Uy50KVMudz1TLnd8fE1jW1Mudl07ZWxzZSBpZigwPT09UilpZigibiI9PT1TLnQpUy53PSgwfFMudik9PT1TLnY/QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShTLnYpO2Vsc2Ug'@;
put 'aWYoImQiPT09Uy50KXt2YXIgeWU9UWUoUy52KTtTLnc9KDB8eWUpPT09eWU/QS5fZ2VuZXJhbF9pbnQoeWUpOkEuX2dlbmVyYWxfbnVtKHllKX1lbHNle2lmKHZvaWQgMD09PVMudilyZXR1cm4iIjtTLnc9QS5fZ2VuZXJhbChTLnYsbDgpfWVsc2UgUy53PUEuZm9ybWF0KFIsImQiPT09Uy50'@;
put 'P1FlKFMudik6Uy52LGw4KX1jYXRjaChQZSl7aWYoYWUuV1RGKXRocm93IFBlfWlmKGFlLmNlbGxTdHlsZXMmJnBlKXtpZihTLnM9e30sbnVsbCE9ayYmcGUuRmlsbHMpdHJ5e1B0KFMucyxwZS5GaWxsc1trXSl9Y2F0Y2goUGUpe2lmKGFlLldURil0aHJvdyBQZX1pZihudWxsIT1HJiZwZS5G'@;
put 'b250cyl0cnl7UHQoUy5zLHBlLkZvbnRzW0ddKX1jYXRjaChQZSl7aWYoYWUuV1RGKXRocm93IFBlfWlmKG51bGwhPVEmJnBlLkJvcmRlcnMpdHJ5e1B0KFMucyxwZS5Cb3JkZXJzW1FdKX1jYXRjaChQZSl7aWYoYWUuV1RGKXRocm93IFBlfX19ZnVuY3Rpb24gcEQoUyxSLGspe2lmKFMmJlNb'@;
put 'IiFyZWYiXSl7dmFyIEc9YWEoU1siIXJlZiJdKTtpZihHLmUuYzxHLnMuY3x8Ry5lLnI8Ry5zLnIpdGhyb3cgbmV3IEVycm9yKCJCYWQgcmFuZ2UgKCIraysiKTogIitTWyIhcmVmIl0pfX12YXIgdTg9LzwoPzpcdzopP21lcmdlQ2VsbCByZWY9IltBLVowLTk6XSsiXHMqW1wvXT8+L2csZ0Q9'@;
put 'LzwoPzpcdys6KT9zaGVldERhdGFbXj5dKj4oW1xzXFNdKik8XC8oPzpcdys6KT9zaGVldERhdGE+Lyx1Uz0vPCg/Olx3Oik/aHlwZXJsaW5rIFtePl0qPi9nbSxvYj0vIihcdyo6XHcqKSIvLGVqPS88KD86XHc6KT9jb2xcYltePl0qW1wvXT8+L2csbUQ9LzwoPzpcdzopP2NvbnRyb2xcYlte'@;
put 'Pl0qW1wvXT8+L2csdGo9LzwoPzpcdzopP2F1dG9GaWx0ZXJbXj5dKihbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP2F1dG9GaWx0ZXIpPi9nLHZEPS88KD86XHc6KT9wYWdlTWFyZ2luc1tePl0qXC8+L2csYkQ9LzwoPzpcdzopP3NoZWV0UHJcYig/OltePmEtel1bXj5dKik/XC8+Lyx5RD0v'@;
put 'PCg/Olx3Oik/c2hlZXRQcm90ZWN0aW9uXGIoPzpbXj5hLXpdW14+XSopP1wvPi8sX0Q9LzwoPzpcdzopP3NoZWV0UHJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRQcik+LyxSYT0vPCg/Olx3Oik/c2hlZXRWaWV3c1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86'@;
put 'XHc6KT9zaGVldFZpZXdzKT4vLGZlPS88KD86XHcrOik/ZGF0YVZhbGlkYXRpb25zW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/ZGF0YVZhbGlkYXRpb25zKT4vLGRTPS88KD86XHcrOik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nXGJbXj5dKig/OltcL118PihbXHNcU10qPyk8'@;
put 'XC8oPzpcdys6KT9jb25kaXRpb25hbEZvcm1hdHRpbmcpPi9nLEdlPS88KD86XHc6KT9zaGVldEZvcm1hdFByW14+XSpcLz4vLHdEPS88KD86XHcrOik/dGFibGVQYXJ0cy4qPz4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGFibGVQYXJ0cz4vLENEPS88KD86XHc6KT9wYWdlU2V0dXBbXj5dKlwv'@;
put 'Pi8sbmo9LzwoPzpcdzopP3Jvd0JyZWFrc1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9yb3dCcmVha3MpPi8sYWI9LzwoPzpcdzopP2NvbEJyZWFrc1tePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9jb2xCcmVha3MpPi8sQjU9LzwoPzpcdzopP2hlYWRlckZvb3Rl'@;
put 'cltePl0qKD86W1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9oZWFkZXJGb290ZXIpPi8saFM9LzwoPzpcdzopP3ByaW50T3B0aW9uc1xiW14+XC9dKlwvPi87dmFyIGZTPS88KD86XHc6KT90YWJsZVBhcnRcYlteXC8+XSpbXC9dPz4vZztmdW5jdGlvbiBzYihTLFIsayxHKXt2YXIgUT12cihT'@;
put 'KTtrLlNoZWV0c1tHXXx8KGsuU2hlZXRzW0ddPXt9KSxRLmNvZGVOYW1lJiYoay5TaGVldHNbR10uQ29kZU5hbWU9US5jb2RlTmFtZSl9dmFyIG1TPS88KD86XHc6KT90YWJDb2xvcltePl0qW1wvXT8+Lyxyaj0vPCg/Olx3Oik/cGFnZVNldFVwUHJbXj5dKltcL10/Pi8saWo9LzwoPzpcdzop'@;
put 'P291dGxpbmVQcltePl0qW1wvXT8+Lyx4RD17ZGlzcGxheWVkOiJhc0Rpc3BsYXllZCIsZW5kOiJhdEVuZCIsbm9uZToibm9uZSJ9LEVEPVZlKHhEKSxURD17ZGlzcGxheWVkOiJkaXNwbGF5ZWQiLG5vbmU6ImJsYW5rIixkYXNoOiJkYXNoIiwibi9hIjoiTkEifSxBRD1WZShURCksUDA9Lzwo'@;
put 'PzpcdzopP2Jya1tePl0qXC8+L2csYlM9WyJvYmplY3RzIiwic2NlbmFyaW9zIiwic2VsZWN0TG9ja2VkQ2VsbHMiLCJzZWxlY3RVbmxvY2tlZENlbGxzIl0sSUQ9WyJmb3JtYXRDb2x1bW5zIiwiZm9ybWF0Um93cyIsImZvcm1hdENlbGxzIiwiaW5zZXJ0Q29sdW1ucyIsImluc2VydFJvd3Mi'@;
put 'LCJpbnNlcnRIeXBlcmxpbmtzIiwiZGVsZXRlQ29sdW1ucyIsImRlbGV0ZVJvd3MiLCJzb3J0IiwiYXV0b0ZpbHRlciIsInBpdm90VGFibGVzIl07ZnVuY3Rpb24gTEQoUyl7dmFyIFI9e307cmV0dXJuWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXS5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKGspe1Nba10mJihSW2tdPXBhcnNlRmxvYXQoU1trXSkpfSksUn12YXIgZGg9e0N1c3RvbToiY3VzdG9tIixEYXRlOiJkYXRlIixUaW1lOiJ0aW1lIixMZW5ndGg6InRleHRMZW5ndGgiLExpc3Q6Imxpc3QiLERlY2ltYWw6ImRlY2ltYWwiLFdob2xlOiJ3aG9sZSIs'@;
put 'QW55OiJub25lIn0sX1M9VmUoZGgpLGxiPXtJTjoiYmV0d2VlbiIsT1Q6Im5vdEJldHdlZW4iLEVROiJlcXVhbCIsTkU6Im5vdEVxdWFsIixHVDoiZ3JlYXRlclRoYW4iLExUOiJsZXNzVGhhbiIsR0U6ImdyZWF0ZXJUaGFuT3JFcXVhbCIsTEU6Imxlc3NUaGFuT3JFcXVhbCJ9LE9EPVZlKGxi'@;
put 'KTtmdW5jdGlvbiB3UyhTLFIsayl7dmFyIEc9W10sUT17fSxhZT0iIixnZT0hMSxwZT0wLHllPTA7cmV0dXJuIFMucmVwbGFjZShlbixmdW5jdGlvbihQZSxOZSl7dmFyIFllPXZyKFBlKTtzd2l0Y2goV24oWWVbMF0pKXtjYXNlIjxkYXRhVmFsaWRhdGlvbnMiOmNhc2UiPGRhdGFWYWxpZGF0'@;
put 'aW9ucz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbnM+IjpicmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbiI6UT17dDpfU1tZZS50eXBlfHwibm9uZSJdLHJlZjooYWU9WWUuc3FyZWYpP2FlLmluZGV4T2YoIiAiKT4tMT9hZTphYShhZSk6IiJ9LFllLm9wZXJhdG9yJiYoUS5vcD1PRFtZZS5vcGVy'@;
put 'YXRvcl0pLFEuYmxhbms9ISFZZS5hbGxvd0JsYW5rJiZ0aShZZS5hbGxvd0JsYW5rKSwoIVllLnNob3dJbnB1dE1lc3NhZ2V8fCF0aShZZS5zaG93SW5wdXRNZXNzYWdlKSkmJihRLmlucHV0PSExKSxZZS5wcm9tcHRUaXRsZSYmKChRLmlucHV0fHwoUS5pbnB1dD17fSkpLnRpdGxlPVFyKFll'@;
put 'LnByb21wdFRpdGxlKSksWWUucHJvbXB0JiYoKFEuaW5wdXR8fChRLmlucHV0PXt9KSkubWVzc2FnZT1RcihZZS5wcm9tcHQpKSwoIVllLnNob3dFcnJvck1lc3NhZ2V8fCF0aShZZS5zaG93RXJyb3JNZXNzYWdlKSkmJihRLmVycm9yPSExKSxZZS5lcnJvclRpdGxlJiYoKFEuZXJyb3J8fChR'@;
put 'LmVycm9yPXt9KSkudGl0bGU9UXIoWWUuZXJyb3JUaXRsZSkpLFllLmVycm9yJiYoKFEuZXJyb3J8fChRLmVycm9yPXt9KSkubWVzc2FnZT1RcihZZS5lcnJvcikpLFEuZXJyb3I/US5lcnJvci5zdHlsZT1ZZS5lcnJvclN0eWxlfHwic3RvcCI6WWUuZXJyb3JTdHlsZSYmKFEuZXJyb3I9e3N0'@;
put 'eWxlOlllLmVycm9yU3R5bGV9KSxRLnQmJkcucHVzaChRKTticmVhaztjYXNlIjxkYXRhVmFsaWRhdGlvbi8+IjpjYXNlIjwvZGF0YVZhbGlkYXRpb24+IjpicmVhaztjYXNlIjxzcXJlZj4iOnllPU5lK1BlLmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+IjphZT1TLnNsaWNlKHllLE5lKSxR'@;
put 'LnJlZj1hZT9hZS5pbmRleE9mKCIgIik+LTE/YWU6YWEoYWUpOiIiO2JyZWFrO2Nhc2UiPGY+IjpjYXNlIjxmb3JtdWxhMSI6Y2FzZSI8Zm9ybXVsYTE+IjpjYXNlIjxmb3JtdWxhMiI6Y2FzZSI8Zm9ybXVsYTI+IjpwZT1OZStQZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGExPiI6Y2Fz'@;
put 'ZSI8L2Zvcm11bGEyPiI6aWYoaylicmVhaztjYXNlIjwvZj4iOnZhciBldD1RcihnYShTLnNsaWNlKHBlLE5lKSkpO3N3aXRjaChRLnQpe2Nhc2UiTGlzdCI6aWYoUS5sfHxRLmYpYnJlYWs7aWYoMzQ9PWV0LmNoYXJDb2RlQXQoMCkpe1EubD1ldC5zbGljZSgxLC0xKS5zcGxpdCgiLCIpO2Jy'@;
put 'ZWFrfWNhc2UiQ3VzdG9tIjpudWxsPT1RLmYmJihRLmY9ZXQpO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJUaW1lIjpjYXNlIldob2xlIjpRLm9wfHwoUS5vcD0iSU4iKSxudWxsPT1RLnY/US52PWlzTmFOKCtldCk/ZXQ6K2V0OihRLm1pbj1RLnYs'@;
put 'US5tYXg9aXNOYU4oK2V0KT9ldDorZXQsZGVsZXRlIFEudil9YnJlYWs7Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZihSJiZSLldURiYmIWdl'@;
put 'KXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrWWVbMF0rIiBpbiBkYXRhIHZhbGlkYXRpb24iKX1yZXR1cm4gUGV9KSxHfXZhciBoOD17SU46ImNvbnRhaW5zVGV4dCIsT1Q6Im5vdENvbnRhaW5zVGV4dCIsU1Q6ImJlZ2luc1dpdGgiLE5EOiJlbmRzV2l0aCJ9LGNiPVZlKGg4KSxi'@;
put 'aj17TE06Imxhc3RNb250aCIsTFM6Imxhc3Q3RGF5cyIsTFc6Imxhc3RXZWVrIixOTToibmV4dE1vbnRoIixOVzoibmV4dFdlZWsiLFRNOiJ0aGlzTW9udGgiLFRXOiJ0aGlzV2VlayIsVEQ6InRvZGF5IixUTzoidG9tb3Jyb3ciLFlTOiJ5ZXN0ZXJkYXkifSxGRD1WZShiaik7ZnVuY3Rpb24g'@;
put 'ZjgoUyl7dmFyIFI9e307cmV0dXJuIG51bGwhPVMudmFsJiYoaXNOYU4oK1MudmFsKT9SLmY9Uy52YWw6Ui52PStTLnZhbCksUi50PVMudHlwZSxSfWZ1bmN0aW9uIFc0KFMpe3JldHVybiBQcigiY2Z2byIsbnVsbCx7dHlwZTpTLnQsdmFsOm51bGwhPVMudj9TLnY6THIoUy5mKX0pfWZ1bmN0'@;
put 'aW9uIGo1KFMsUixrLEcpe3ZhciBRPWY4KFMpO3JldHVybiBRLmNvbG9yPWZrKFIsayxHKSxRfWZ1bmN0aW9uIHYyKFMsUixrLEcsUSl7dmFyIGFlPShTLm1hdGNoKC9zcXJlZj0iKFtcdzokIF0qKSIvKXx8W10pWzFdO3JldHVybiBmdW5jdGlvbiBDUyhTLFIsayxHLFEsYWUpe3ZhciBnZT0h'@;
put 'MSxwZT1bXSx5ZT17ZjpbXX0sUGU9MCxOZT0wLFllPXtjZnZvczpbXSxjb2xvcnM6W119LGV0PXt9LGN0PS0xLEV0PTAsb3Q9IiI7cmV0dXJuIFMucmVwbGFjZShlbixmdW5jdGlvbihidCxqdCl7dmFyIGt0PXZyKGJ0KTtzd2l0Y2goV24oa3RbMF0pKXtjYXNlIjxjb25kaXRpb25hbEZvcm1h'@;
put 'dHRpbmciOmNhc2UiPC9jb25kaXRpb25hbEZvcm1hdHRpbmc+IjpicmVhaztjYXNlIjxjZlJ1bGUiOmNhc2UiPGNmUnVsZT4iOmlmKE5lPWp0LGV0PWt0LHllPXtyZWY6UixmOltdfSwhYnQubWF0Y2goL1wvPi8pKWJyZWFrO2Nhc2UiPC9jZlJ1bGU+Ijpzd2l0Y2goZXQuZHhmSWQmJlEmJlEu'@;
put 'RFhGJiYoeWUucz1RLkRYRlsrZXQuZHhmSWRdKSxldC50eXBlKXtjYXNlImR1cGxpY2F0ZVZhbHVlcyI6eWUudD0iZHVwIjticmVhaztjYXNlInVuaXF1ZVZhbHVlcyI6eWUudD0idW5pcXVlIjticmVhaztjYXNlImNvbnRhaW5zQmxhbmtzIjp5ZS50PSJibGFuayIseWUudj0hMDticmVhaztj'@;
put 'YXNlIm5vdENvbnRhaW5zQmxhbmtzIjp5ZS50PSJibGFuayIseWUudj0hMTticmVhaztjYXNlImNvbnRhaW5zRXJyb3JzIjp5ZS50PSJlcnJvciIseWUudj0hMDticmVhaztjYXNlIm5vdENvbnRhaW5zRXJyb3JzIjp5ZS50PSJlcnJvciIseWUudj0hMTticmVhaztjYXNlImNlbGxJcyI6c3dp'@;
put 'dGNoKGV0Lm9wZXJhdG9yKXtjYXNlImNvbnRhaW5zVGV4dCI6Y2FzZSJub3RDb250YWlucyI6Y2FzZSJiZWdpbnNXaXRoIjpjYXNlImVuZHNXaXRoIjppZih5ZS50PSJ0ZXh0Iix5ZS5vcD1jYltldC5vcGVyYXRvcl0sbnVsbD09ZXQudGV4dCl0aHJvdyBuZXcgRXJyb3IoIkNGIFRleHQgUnVs'@;
put 'ZSAiK3llLm9wKyIgbWlzc2luZyB0ZXh0Iik7eWUudj1ldC50ZXh0LHllLmY9eWUuZlswXSxudWxsPT15ZS5mJiZkZWxldGUgeWUuZjticmVhaztkZWZhdWx0OnllLnQ9InZhbCIseWUub3A9T0RbZXQub3BlcmF0b3JdLDE9PXllLmYubGVuZ3RoP2lzTmFOKCt5ZS5mWzBdKT95ZS5mPXllLmZb'@;
put 'MF06KHllLnY9K3llLmZbMF0sZGVsZXRlIHllLmYpOih5ZS5taW49aXNOYU4oK3llLmZbMF0pP3llLmZbMF06K3llLmZbMF0seWUubWF4PWlzTmFOKCt5ZS5mWzFdKT95ZS5mWzFdOit5ZS5mWzFdLGRlbGV0ZSB5ZS5mKX1icmVhaztjYXNlImV4cHJlc3Npb24iOnllLnQ9ImZvcm11bGEiLHll'@;
put 'LmY9eWUuZlswXTticmVhaztjYXNlImNvbnRhaW5zVGV4dCI6Y2FzZSJub3RDb250YWluc1RleHQiOmNhc2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRzV2l0aCI6aWYoeWUudD0idGV4dCIseWUub3A9Y2JbZXQudHlwZV0sbnVsbD09ZXQudGV4dCYmeWUuZi5sZW5ndGg8Mil0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkNGIFRleHQgUnVsZSAiK3llLm9wKyIgbWlzc2luZyB0ZXh0Iik7eWUudj1udWxsIT1ldC50ZXh0P2V0LnRleHQ6eWUuZlsxXS5tYXRjaCgvIi4qIi8pP3llLmZbMV0uc2xpY2UoMSwtMSk6eWUuZlsxXSx5ZS5mPXllLmZbMF0sbnVsbD09eWUuZiYmZGVsZXRlIHllLmY7YnJlYWs7Y2Fz'@;
put 'ZSJjb2xvclNjYWxlIjppZih5ZS50PSJzY2FsZSIsIXllLmNvbG9yU2NhbGUpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGNvbG9yU2NhbGUiKTt5ZS5jbWluPWo1KChZZT15ZS5jb2xvclNjYWxlKS5jZnZvc1swXSxZZS5jb2xvcnNbMF0sUSxHKSwzPT1ZZS5jZnZvcy5sZW5ndGgmJih5ZS5j'@;
put 'bWlkPWo1KFllLmNmdm9zWzFdLFllLmNvbG9yc1sxXSxRLEcpKSx5ZS5jbWF4PWo1KFllLmNmdm9zW1llLmNmdm9zLmxlbmd0aC0xXSxZZS5jb2xvcnNbWWUuY2Z2b3MubGVuZ3RoLTFdLFEsRyk7YnJlYWs7Y2FzZSJkYXRhQmFyIjppZih5ZS50PSJiYXIiLCF5ZS5kYXRhQmFyKXRocm93IG5l'@;
put 'dyBFcnJvcigibWlzc2luZyBkYXRhQmFyIik7KFllPXllLmRhdGFCYXIpLmNvbG9yc1swXSYmKHllLmNvbG9yPWZrKFllLmNvbG9yc1swXSxRLEcpKSx5ZS5jbWluPWY4KFllLmNmdm9zWzBdKSx5ZS5jbWF4PWY4KFllLmNmdm9zWzFdKTticmVhaztjYXNlImljb25TZXQiOmlmKHllLnQ9Imlj'@;
put 'b24iLCF5ZS5pY29uU2V0KXRocm93IG5ldyBFcnJvcigibWlzc2luZyBpY29uU2V0Iik7eWUudGhyZXNoPShZZT15ZS5pY29uU2V0KS5jZnZvcy5tYXAoZnVuY3Rpb24oT3Qpe3JldHVybiBmOChPdCl9KSx5ZS52PVllLnRhZyYmWWUudGFnLmljb25TZXR8fCIzVHJhZmZpY0xpZ2h0czEiLHll'@;
put 'LnJldj10aShZZS50YWcucmV2ZXJzZXx8ImZhbHNlIikseWUucGN0PXRpKFllLnRhZy5wZXJjZW50fHwidHJ1ZSIpLHllLmhpZGRlbj0hdGkoWWUudGFnLnNob3dWYWx1ZXx8InRydWUiKTticmVhaztjYXNlInRpbWVQZXJpb2QiOnllLnQ9ImRhdGUiLHllLm9wPUZEW2V0LnRpbWVQZXJpb2Rd'@;
put 'O2JyZWFrO2Nhc2UiYWJvdmVBdmVyYWdlIjp5ZS50PSJhdmciLHllLm9wPSIwIj09ZXQuYWJvdmVBdmVyYWdlPyJMIjoiRyIseWUub3ArPWV0LnN0ZERldj9ldC5zdGREZXY6dGkoZXQuZXF1YWxBdmVyYWdlfHwiMCIpPyJFIjoiVCI7YnJlYWs7Y2FzZSJ0b3AxMCI6eWUudD0icmFuayIseWUu'@;
put 'b3A9KHRpKGV0LmJvdHRvbXx8IjAiKT8iQiI6IlQiKSsodGkoZXQucGVyY2VudHx8IjAiKT8iUCI6IlYiKSx5ZS52PStldC5yYW5rO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgQ0YgVHlwZSAiK2V0LnR5cGV9aWYoZGVsZXRlIHllLmNvbG9yU2NhbGUsZGVsZXRlIHllLmRhdGFC'@;
put 'YXIsZGVsZXRlIHllLmljb25TZXQsIXllLnQpdGhyb3cgY29uc29sZS5sb2coUy5zbGljZShOZSxqdCtidC5sZW5ndGgpKSwiYmFkIENGIHJ1bGUiO251bGwhPXllLmYmJiF5ZS5mLmxlbmd0aCYmZGVsZXRlIHllLmYseWUuZGVsfHxwZS5wdXNoKHllKTticmVhaztjYXNlIjxmb3JtdWxhIjpj'@;
put 'YXNlIjxmb3JtdWxhPiI6UGU9anQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mb3JtdWxhPiI6eWUuZi5wdXNoKFFyKFMuc2xpY2UoUGUsanQpKSk7YnJlYWs7Y2FzZSI8ZiI6Y2FzZSI8Zj4iOlBlPWp0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvZj4iOnllLmYucHVzaChRcihTLnNsaWNlKFBl'@;
put 'LGp0KSkpO2JyZWFrO2Nhc2UiPHNxcmVmPiI6RXQ9anQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOm90PVMuc2xpY2UoRXQsanQpLFI9b3Q/b3QuaW5kZXhPZigiICIpPi0xP290OmFhKG90KToiIix5ZS5yZWY9UixwZS5mb3JFYWNoKGZ1bmN0aW9uKE90KXtPdC5yZWY9Un0pO2Jy'@;
put 'ZWFrO2Nhc2UiPGNvbG9yU2NhbGUiOmNhc2UiPGNvbG9yU2NhbGU+IjpjYXNlIjxkYXRhQmFyIjpjYXNlIjxkYXRhQmFyPiI6Y2FzZSI8aWNvblNldCI6Y2FzZSI8aWNvblNldD4iOlllPXtjZnZvczpbXSxjb2xvcnM6W10sdGFnOmt0fSxQZT1qdCtidC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Nv'@;
put 'bG9yU2NhbGU+Ijp5ZS5jb2xvclNjYWxlPVllO2JyZWFrO2Nhc2UiPC9kYXRhQmFyPiI6eWUuZGF0YUJhcj1ZZTticmVhaztjYXNlIjwvaWNvblNldD4iOnllLmljb25TZXQ9WWU7YnJlYWs7Y2FzZSI8Y2Z2byI6Y2FzZSI8Y2Z2by8+IjpZZS5jZnZvcy5wdXNoKGt0KTticmVhaztjYXNlIjwv'@;
put 'Y2Z2bz4iOmJyZWFrO2Nhc2UiPGNvbG9yIjpZZS5jb2xvcnMucHVzaChrdCk7YnJlYWs7Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7'@;
put 'Y2FzZSI8bmVnYXRpdmVGaWxsQ29sb3IiOmNhc2UiPGF4aXNDb2xvciI6Y2FzZSI8Ym9yZGVyQ29sb3IiOmNhc2UiPG5lZ2F0aXZlQm9yZGVyQ29sb3IiOmNhc2UiPGNmSWNvbiI6eWUuZGVsPSEwO2JyZWFrO2Nhc2UiPGR4Zj4iOmdlPSEwLGN0PWp0O2JyZWFrO2Nhc2UiPC9keGY+IjpnZT0h'@;
put 'MSx5ZS5zPUw0KFMuc2xpY2UoY3QsanQrYnQubGVuZ3RoKSxRLEcsayk7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURil7aWYoYWUpYnJlYWs7aWYoIWdlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIra3RbMF0rIiBpbiBjb25kZm10Iil9fXJldHVybiBidH0pLHBlfShTLGFlLFIs'@;
put 'ayxHLFEpfXZhciBTUz0vPCg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9cLz8+L2c7ZnVuY3Rpb24gZzgoUyxSKXt2YXIgaz0wLEc9MCxRPTAsYWU9MDtpZighUnx8IVIuQ2VsbFhmKXJldHVybiBudWxsO3ZhciBnZT1SLkNlbGxYZltTXTtudWxsIT1nZSYmKG51bGwhPWdlLm51'@;
put 'bUZtdElkJiYoaz1nZS5udW1GbXRJZCksbnVsbCE9Z2UuZmlsbElkJiYoRz1nZS5maWxsSWQpLG51bGwhPWdlLmZvbnRJZCYmKFE9Z2UuZm9udElkKSxudWxsIT1nZS5ib3JkZXJJZCYmKGFlPWdlLmJvcmRlcklkKSk7dmFyIHBlPXt0OiJ6In07dHJ5e0ozKHBlLGssRyxRLGFlLHtXVEY6MSxj'@;
put 'ZWxsU3R5bGVzOiEwfSwwLFIpfWNhdGNoe31yZXR1cm4gcGUuc31mdW5jdGlvbiB6NShTLFIsayxHKXtpZih2b2lkIDA9PT1TLnYmJnZvaWQgMD09PVMuZiYmbnVsbD09Uy5zJiYhUy5jfHwieiI9PT1TLnQmJiFTLmMmJiFHLnNoZWV0U3R1YnMpcmV0dXJuIiI7dmFyIFE9IiIsYWU9Uy50LGdl'@;
put 'PVMudjtpZigieiIhPT1TLnQpc3dpdGNoKFMudCl7Y2FzZSJiIjpRPVMudj8iMSI6IjAiO2JyZWFrO2Nhc2UibiI6UT0iIitTLnY7YnJlYWs7Y2FzZSJlIjpRPU1jW1Mudl07YnJlYWs7Y2FzZSJkIjpHJiZHLmNlbGxEYXRlcz9RPUhlKFMudiwtMSkudG9JU09TdHJpbmcoKTooKFM9cXQoUykp'@;
put 'LnQ9Im4iLFE9IiIrKFMudj1RZShIZShTLnYpKSkpLHR5cGVvZiBTLno+InUiJiYoUy56PUEuX3RhYmxlWzE0XSk7YnJlYWs7ZGVmYXVsdDpRPVMudn12YXIgcGU9InoiPT1TLnQ/IiI6Tm8oInYiLExyKFEpKSx5ZT17cjpSfSxQZT1HP3MwKEcuY2VsbFhmcyxHLmNlbGxTdHlsZVhmcyxTLEcp'@;
put 'OjA7c3dpdGNoKDAhPT1QZSYmKHllLnM9UGUpLFMudCl7Y2FzZSJuIjpjYXNlInoiOmJyZWFrO2Nhc2UiZCI6eWUudD0iZCI7YnJlYWs7Y2FzZSJiIjp5ZS50PSJiIjticmVhaztjYXNlImUiOnllLnQ9ImUiO2JyZWFrO2RlZmF1bHQ6aWYobnVsbD09Uy52KXtkZWxldGUgUy50O2JyZWFrfWlm'@;
put 'KEcmJkcuYm9va1NTVCl7cGU9Tm8oInYiLCIiK29TKEcuU3RyaW5ncyxTLnYsUy5SP1Mucj1KcyhTLlIpOm51bGwsRy5yZXZTdHJpbmdzKSkseWUudD0icyI7YnJlYWt9QXJyYXkuaXNBcnJheShTLlIpPyhwZT0iPGlzPiIrSnMoUy5SKSsiPC9pcz4iLHllLnQ9ImlubGluZVN0ciIpOnllLnQ9'@;
put 'InN0ciJ9aWYoUy50IT1hZSYmKFMudD1hZSxTLnY9Z2UpLFMuZil7dmFyIE5lPVMuRiYmUy5GLnNsaWNlKDAsUi5sZW5ndGgpPT1SP3t0OiJhcnJheSIscmVmOlMuRn06bnVsbDtwZT1QcigiZiIsTHIoUy5mKSxOZSkrKG51bGwhPVMudj9wZToiIil9cmV0dXJuIFMubCYma1siIWxpbmtzIl0u'@;
put 'cHVzaChbUixTLmxdKSxTLmMmJmtbIiFjb21tZW50cyJdLnB1c2goW1IsUy5jXSksUHIoImMiLHBlLHllKX12YXIgbTg9ZnVuY3Rpb24oKXt2YXIgUz0vPCg/Olx3KzopP2NbIFwvPl0vLFI9LzxcLyg/Olx3KzopP3Jvdz4vLGs9L3I9WyInXShbXiInXSopWyInXS8sRz0vPCg/Olx3KzopP2lz'@;
put 'PihbXFNcc10qPyk8XC8oPzpcdys6KT9pcz4vLFE9L3JlZj1bIiddKFteIiddKilbIiddLyxhZT1rMCgidiIpLGdlPWswKCJmIik7cmV0dXJuIGZ1bmN0aW9uKHllLFBlLE5lLFllLGV0LGN0LEV0KXtmb3IodmFyIFNuLGxyLGhyLGJyLExpLG90PTAsYnQ9IiIsanQ9W10sa3Q9W10sT3Q9MCxL'@;
put 'dD0wLFRuPTAscnI9IiIsWG49MCxWbj0wLGVyPTAsQ2k9MCxGaT0wLHJvPTAsdW89QXJyYXkuaXNBcnJheShFdC5DZWxsWGYpLGtyPVtdLE5uPVtdLEJyPUFycmF5LmlzQXJyYXkoTmUpLF9yPVtdLEZuPXt9LGpyPSExLFppPXllLnNwbGl0KFIpLHlpPSEhWWUuc2hlZXRTdHVicyx3bz0hIVll'@;
put 'LmNlbGxIVE1MLHNhPSEoITE9PT1ZZS5jZWxsVGV4dCYmIVllLmNlbGxORiYmIVllLmNlbGxTdHlsZXMpLG9vPTAsTGE9WmkubGVuZ3RoO29vIT1MYTsrK29vKXt2YXIgUG89KGJ0PVppW29vXS50cmltKCkpLmxlbmd0aDtpZigwIT09UG8pe3ZhciBoYT0wO2U6Zm9yKG90PTA7b3Q8UG87Kytv'@;
put 'dClzd2l0Y2goYnRbb3RdKXtjYXNlIj4iOmlmKCIvIiE9YnRbb3QtMV0peysrb3Q7YnJlYWsgZX1ZZS5jZWxsU3R5bGVzJiZudWxsIT0obHI9dnIoYnQuc2xpY2UoaGEsb3QpLCEwKSkuciYmcGFyc2VJbnQobHIuciwxMCkmJihYbj1wYXJzZUludChsci5yLDEwKSxGbj17fSxqcj0hMSxsci5o'@;
put 'dCYmKGpyPSEwLEZuLmhwdD1wYXJzZUZsb2F0KGxyLmh0KSxGbi5ocHg9bGgoRm4uaHB0KSksbHIuZHlEZXNjZW50JiYoanI9ITAsRm4uZHlEZXNjZW50PWxyLmR5RGVzY2VudCksIjEiPT1sci5oaWRkZW4mJihqcj0hMCxGbi5oaWRkZW49ITApLG51bGwhPWxyLm91dGxpbmVMZXZlbCYmKGpy'@;
put 'PSEwLEZuLmxldmVsPStsci5vdXRsaW5lTGV2ZWwpLGxyLnMmJkV0JiZFdC5DZWxsWGYmJihqcj0hMCxGbi5zPWc4KGxyLnMsRXQpKSxqciYmKF9yW1huLTFdPUZuKSk7YnJlYWs7Y2FzZSI8IjpoYT1vdH1pZihoYT49b3QpYnJlYWs7aWYoWG49bnVsbCE9KGxyPXZyKGJ0LnNsaWNlKGhhLG90'@;
put 'KSwhMCkpLnI/cGFyc2VJbnQobHIuciwxMCk6WG4rMSxWbj0tMSwhKFllLnNoZWV0Um93cyYmWWUuc2hlZXRSb3dzPFhuKSl7WWUubm9kaW18fChldC5zLnI+WG4tMSYmKGV0LnMucj1Ybi0xKSxldC5lLnI8WG4tMSYmKGV0LmUucj1Ybi0xKSk7dmFyIEpvPXt0OiJyb3ciLHJvdzpbXSxSOlhu'@;
put 'LTEsaWR4OlBlfTtZZS5jZWxsU3R5bGVzJiYoRm49e30sanI9ITEsbHIuaHQmJihqcj0hMCxGbi5ocHQ9cGFyc2VGbG9hdChsci5odCksRm4uaHB4PWxoKEZuLmhwdCkpLGxyLmR5RGVzY2VudCYmKGpyPSEwLEZuLmR5RGVzY2VudD1sci5keURlc2NlbnQpLCIxIj09bHIuaGlkZGVuJiYoanI9'@;
put 'ITAsRm4uaGlkZGVuPSEwKSxudWxsIT1sci5vdXRsaW5lTGV2ZWwmJihqcj0hMCxGbi5sZXZlbD0rbHIub3V0bGluZUxldmVsKSxsci5zJiYoanI9ITAsRm4ucz1nOChsci5zLEV0KSksanImJihZZS5jYWxsYmFjaz9Kby5wcm9wcz1GbjpfcltYbi0xXT1GbikpLGp0PWJ0LnNsaWNlKG90KS5z'@;
put 'cGxpdChTKTtmb3IodmFyIEJpPTA7QmkhPWp0Lmxlbmd0aCYmIjwiPT1qdFtCaV0udHJpbSgpLmNoYXJBdCgwKTsrK0JpKTtmb3IoanQ9anQuc2xpY2UoQmkpLG90PTA7b3QhPWp0Lmxlbmd0aDsrK290KWlmKDAhPT0oYnQ9anRbb3RdLnRyaW0oKSkubGVuZ3RoKXtpZihrdD1idC5tYXRjaChr'@;
put 'KSxPdD1vdCxLdD0wLFRuPTAsYnQ9IjxjICIrKCI8Ij09YnQuc2xpY2UoMCwxKT8iPiI6IiIpK2J0LG51bGwhPWt0JiYyPT09a3QubGVuZ3RoKXtmb3IoT3Q9MCxycj1rdFsxXSxLdD0wO0t0IT1yci5sZW5ndGgmJiEoKFRuPXJyLmNoYXJDb2RlQXQoS3QpLTY0KTwxfHxUbj4yNik7KytLdClP'@;
put 'dD0yNipPdCtUbjtWbj0tLU90fWVsc2UrK1ZuO2ZvcihLdD0wO0t0IT1idC5sZW5ndGgmJjYyIT09YnQuY2hhckNvZGVBdChLdCk7KytLdCk7aWYoKytLdCwobHI9dnIoYnQuc2xpY2UoMCxLdCksITApKS5yfHwobHIucj1xaSh7cjpYbi0xLGM6Vm59KSksU249e3Q6IiJ9LG51bGwhPShrdD0o'@;
put 'cnI9YnQuc2xpY2UoS3QpKS5tYXRjaChhZSkpJiYiIiE9PWt0WzFdJiYoU24udj1RcihrdFsxXSkpLFllLmNlbGxGb3JtdWxhKXtpZihudWxsIT0oa3Q9cnIubWF0Y2goZ2UpKSYmIiIhPT1rdFsxXSl7aWYoU24uZj1RcihnYShrdFsxXSkpLnJlcGxhY2UoL1xyXG4vZywiXG4iKSxZZS54bGZu'@;
put 'fHwoU24uZj14QihTbi5mKSksa3RbMF0uaW5kZXhPZigndD0iYXJyYXkiJyk+LTEpU24uRj0ocnIubWF0Y2goUSl8fFtdKVsxXSxTbi5GLmluZGV4T2YoIjoiKT4tMSYma3IucHVzaChbYWEoU24uRiksU24uRl0pO2Vsc2UgaWYoa3RbMF0uaW5kZXhPZigndD0ic2hhcmVkIicpPi0xKXticj12'@;
put 'cihrdFswXSk7dmFyIElzPVFyKGdhKGt0WzFdKSk7WWUueGxmbnx8KElzPXhCKElzKSksTm5bcGFyc2VJbnQoYnIuc2ksMTApXT1bYnIsSXMsbHIucl19fWVsc2Uoa3Q9cnIubWF0Y2goLzxmW14+XSpcLz4vKSkmJk5uWyhicj12cihrdFswXSkpLnNpXSYmKFNuLmY9Y25lKE5uW2JyLnNpXVsx'@;
put 'XSxObltici5zaV1bMl0sbHIucikpO3ZhciBQbj1OYShsci5yKTtmb3IoS3Q9MDtLdDxrci5sZW5ndGg7KytLdClQbi5yPj1rcltLdF1bMF0ucy5yJiZQbi5yPD1rcltLdF1bMF0uZS5yJiZQbi5jPj1rcltLdF1bMF0ucy5jJiZQbi5jPD1rcltLdF1bMF0uZS5jJiYoU24uRj1rcltLdF1bMV0p'@;
put 'fWlmKG51bGw9PWxyLnQmJnZvaWQgMD09PVNuLnYpaWYoU24uZnx8U24uRilTbi52PTAsU24udD0ibiI7ZWxzZXtpZigheWkpY29udGludWU7U24udD0ieiJ9ZWxzZSBTbi50PWxyLnR8fCJuIjtzd2l0Y2goZXQucy5jPlZuJiYoZXQucy5jPVZuKSxldC5lLmM8Vm4mJihldC5lLmM9Vm4pLFNu'@;
put 'LnQpe2Nhc2UibiI6aWYoIiI9PVNuLnZ8fG51bGw9PVNuLnYpe2lmKCF5aSljb250aW51ZTtTbi50PSJ6In1lbHNlIFNuLnY9cGFyc2VGbG9hdChTbi52KTticmVhaztjYXNlInMiOmlmKHR5cGVvZiBTbi52PiJ1Iil7aWYoIXlpKWNvbnRpbnVlO1NuLnQ9InoifWVsc2UgaHI9czhbcGFyc2VJ'@;
put 'bnQoU24udiwxMCldLFNuLnY9aHIudCxTbi5yPWhyLnIsaHIuUiYmKFNuLlI9aHIuUiksd28mJihTbi5oPWhyLmgpO2JyZWFrO2Nhc2Uic3RyIjpTbi50PSJzIixTbi52PW51bGwhPVNuLnY/Z2EoU24udik6IiIsd28mJihTbi5oPWNvKFNuLnYpKTticmVhaztjYXNlImlubGluZVN0ciI6a3Q9'@;
put 'cnIubWF0Y2goRyksU24udD0icyIsbnVsbCE9a3QmJihocj11QyhrdFsxXSkpPyhTbi52PWhyLnQsaHIuUiYmKFNuLlI9aHIuUiksd28mJihTbi5oPWhyLmgpKTpTbi52PSIiO2JyZWFrO2Nhc2UiYiI6U24udj10aShTbi52KTticmVhaztjYXNlImQiOlllLmNlbGxEYXRlcz9Tbi52PUhlKFNu'@;
put 'LnYsMSk6KFNuLnY9UWUoSGUoU24udiwxKSksU24udD0ibiIpO2JyZWFrO2Nhc2UiZSI6ITEhPT1ZZS5jZWxsVGV4dCYmKFNuLnc9U24udiksU24udj1QM1tTbi52XX1pZihzYSl7ZXI9Q2k9Rmk9cm89MCxMaT1udWxsLHVvJiZ2b2lkIDAhPT1sci5zJiZudWxsIT0oTGk9RXQuQ2VsbFhmW2xy'@;
put 'LnNdKSYmKG51bGwhPUxpLm51bUZtdElkJiYoZXI9TGkubnVtRm10SWQpLFllLmNlbGxTdHlsZXMmJihudWxsIT1MaS5maWxsSWQmJihDaT1MaS5maWxsSWQpLG51bGwhPUxpLmZvbnRJZCYmKEZpPUxpLmZvbnRJZCksbnVsbCE9TGkuYm9yZGVySWQmJihybz1MaS5ib3JkZXJJZCkpKTt0cnl7'@;
put 'SjMoU24sZXIsQ2ksRmkscm8sWWUsMCxFdCl9Y2F0Y2h7fVllLmNlbGxTdHlsZXMmJlNuLnMmJihMaSYmTGkuYWxpZ25tZW50JiYoU24ucy5hbGlnbm1lbnQ9cXQoTGkuYWxpZ25tZW50KSksTGkmJkxpLnByb3RlY3Rpb24mJihudWxsIT1MaS5wcm90ZWN0aW9uLmhpZGRlbiYmKFNuLnMuaGlk'@;
put 'ZGVuPUxpLnByb3RlY3Rpb24uaGlkZGVuKSxudWxsIT1MaS5wcm90ZWN0aW9uLmVkaXRhYmxlJiYoU24ucy5lZGl0YWJsZT1MaS5wcm90ZWN0aW9uLmVkaXRhYmxlKSksTGkmJkxpLnN0eWxlJiYoU24ucy5zdHlsZT1MaS5zdHlsZSkpLFllLmNlbGxEYXRlcyYmdW8mJiJuIj09U24udCYmQS5p'@;
put 'c19kYXRlKEEuX3RhYmxlW2VyXSkmJihTbi50PSJkIixTbi52PXVuKFNuLnYpKX12YXIgV2E7WWUubm9kaW0mJihXYT1OYShsci5yKSxldC5zLnI+V2EuciYmKGV0LnMucj1XYS5yKSxldC5lLnI8V2EuciYmKGV0LmUucj1XYS5yKSksWWUuY2FsbGJhY2s/KFdhPU5hKGxyLnIpLEpvLnJvd1tX'@;
put 'YS5jXT1Tbik6QnI/KE5lWyhXYT1OYShsci5yKSkucl18fChOZVtXYS5yXT1bXSksTmVbV2Eucl1bV2EuY109U24pOk5lW2xyLnJdPVNufVllLmNhbGxiYWNrJiZZZS5jYWxsYmFjayhKbyl9fX15aSYmIVllLmNhbGxiYWNrJiZnOCgwLEV0KSxfci5sZW5ndGg+MCYmKE5lWyIhcm93cyJdPV9y'@;
put 'KX19KCksdjg9UHIoIndvcmtzaGVldCIsbnVsbCx7eG1sbnM6WWkubWFpblswXSwieG1sbnM6ciI6WWkuciwieG1sbnM6eDE0YWMiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9zcHJlYWRzaGVldG1sLzIwMDkvOS9hYyIsInhtbG5zOm1jIjoiaHR0cDovL3NjaGVtYXMu'@;
put 'b3BlbnhtbGZvcm1hdHMub3JnL21hcmt1cC1jb21wYXRpYmlsaXR5LzIwMDYiLCJtYzpJZ25vcmFibGUiOiJ4MTRhYyJ9KTtmdW5jdGlvbiBIRChTLFIsayxHKXt2YXIgZ2UsUT1bSWksdjhdLHBlPSIiLHllPWsuU2hlZXRzW2suU2hlZXROYW1lc1tTXV07bnVsbD09eWUmJih5ZT17fSk7dmFy'@;
put 'IFBlPXllWyIhcmVmIl18fCJBMSIsTmU9YWEoUGUpO2lmKE5lLmUuYz4xNjM4M3x8TmUuZS5yPjEwNDg1NzUpe2lmKFIuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIitQZSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOlhGRDEwNDg1NzYiKTtOZS5lLmM9TWF0aC5taW4oTmUuZS5jLDE2'@;
put 'MzgzKSxOZS5lLnI9TWF0aC5taW4oTmUuZS5jLDEwNDg1NzUpLFBlPWlvKE5lKX1HfHwoRz17fSkseWVbIiFjb21tZW50cyJdPVtdO3ZhciBZZT1bXSxldD15ZVsiIXByaW50Il07aWYoZnVuY3Rpb24gTUQoUyxSLGssRyxRKXt2YXIgYWU9ITEsZ2U9e30scGU9bnVsbDtpZigieGxzeCIhPT1H'@;
put 'LmJvb2tUeXBlJiZSLnZiYXJhdyl7dmFyIHllPVIuU2hlZXROYW1lc1trXTt0cnl7Ui5Xb3JrYm9vayYmKHllPVIuV29ya2Jvb2suU2hlZXRzW2tdLkNvZGVOYW1lfHx5ZSl9Y2F0Y2h7fWFlPSEwLGdlLmNvZGVOYW1lPUxyKHllKX1TJiZTWyIhY29uZGZtdCJdJiYoZ2UuZW5hYmxlRm9ybWF0'@;
put 'Q29uZGl0aW9uc0NhbGN1bGF0aW9uPSIxIiksUyYmU1siIXRhYmNvbG9yIl0mJihwZT0ocGV8fCIiKSsnPHRhYkNvbG9yIHJnYj0iRkYnK08wKFNbIiF0YWJjb2xvciJdLnJnYikrJyIvPicpO3ZhciBQZT0hMSxOZT17fTtpZigoKChTfHx7fSlbIiFwcmludCJdfHx7fSkucHJvcHN8fHt9KS5m'@;
put 'aXQmJihQZT0hMCxOZS5maXRUb1BhZ2U9MSksUGUmJihwZT0ocGV8fCIiKStQcigicGFnZVNldFVwUHIiLG51bGwsTmUpKSxTJiZTWyIhb3V0bGluZSJdKXt2YXIgWWU9e3N1bW1hcnlCZWxvdzoxLHN1bW1hcnlSaWdodDoxfTtTWyIhb3V0bGluZSJdLmFib3ZlJiYoWWUuc3VtbWFyeUJlbG93'@;
put 'PTApLFNbIiFvdXRsaW5lIl0ubGVmdCYmKFllLnN1bW1hcnlSaWdodD0wKSxwZT0ocGV8fCIiKStQcigib3V0bGluZVByIixudWxsLFllKX0hYWUmJiFwZXx8KFFbUS5sZW5ndGhdPVByKCJzaGVldFByIixwZSxnZSkpfSh5ZSxrLFMsUixRKSxRW1EubGVuZ3RoXT1QcigiZGltZW5zaW9uIixu'@;
put 'dWxsLHtyZWY6UGV9KSxRW1EubGVuZ3RoXT1mdW5jdGlvbiBwOChTLFIsayxHKXt2YXIgUT17d29ya2Jvb2tWaWV3SWQ6IjAifTtpZigoKChHfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pLmxlbmd0aCl7dmFyIGFlPUcuV29ya2Jvb2suVmlld3MsZ2U9YWVba118fGFlWzBdO1Eucmln'@;
put 'aHRUb0xlZnQ9Z2UuUlRMPyIxIjoiMCIsZ2Uuem9vbSYmKFEuem9vbVNjYWxlPWdlLnpvb20pLG51bGwhPWdlLmdyaWQmJihRLnNob3dHcmlkTGluZXM9Z2UuZ3JpZCksZ2UudmlldyYmKFEudmlldz1nZS52aWV3KX1udWxsIT1TWyIhZ3JpZGxpbmVzIl0mJihRLnNob3dHcmlkTGluZXM9ISFT'@;
put 'WyIhZ3JpZGxpbmVzIl0pO3ZhciBwZT0iIix5ZT17cjowLGM6MH07aWYoU1siIXNlbCJdKXtpZighKHllPVNbIiFzZWwiXS5jZWxsKSl7aWYoIVNbIiFzZWwiXS5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7eWU9U3MoU1si'@;
put 'IXNlbCJdLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnN9InN0cmluZyI9PXR5cGVvZiB5ZSYmKHllPU5hKHllKSl9dmFyIE5lPVNbIiFmcmVlemUiXT8ic3RyaW5nIj09dHlwZW9mIFNbIiFmcmVlemUiXT9OYShTWyIhZnJlZXplIl0pOlNbIiFmcmVlemUiXTp7YzowLHI6MH07aWYoU1si'@;
put 'IWZyZWV6ZSJdKXt2YXIgWWU9cWkoTmUpLGV0PXtzdGF0ZToiZnJvemVuIix4U3BsaXQ6TmUuYyx5U3BsaXQ6TmUucix0b3BMZWZ0Q2VsbDpZZX07U1siIXNlbCJdJiYoZXQuYWN0aXZlUGFuZT0oeWUucj49TmUuciYmTmUucj4wPyJib3R0b20iOiJ0b3AiKSsoeWUuYz49TmUuYyYmTmUuYz4w'@;
put 'PyJSaWdodCI6IkxlZnQiKSkscGU9UHIoInBhbmUiLG51bGwsZXQpfWlmKFNbIiFzZWwiXSl7dmFyIGN0PXthY3RpdmVDZWxsOiJzdHJpbmciPT10eXBlb2YgeWU/eWU6cWkoeWUpfTtjdC5zcXJlZj1TWyIhc2VsIl0ucmFuZ2U/U1siIXNlbCJdLnJhbmdlOmN0LmFjdGl2ZUNlbGwrIjoiK2N0'@;
put 'LmFjdGl2ZUNlbGwscGUrPVByKCJzZWxlY3Rpb24iLG51bGwsY3QpLFNbIiFmcmVlemUiXSYmKE5lLmM+MCYmKGN0LnBhbmU9InRvcFJpZ2h0IixwZSs9UHIoInNlbGVjdGlvbiIsbnVsbCxjdCkpLE5lLnI+MCYmKGN0LnBhbmU9ImJvdHRvbUxlZnQiLHBlKz1Qcigic2VsZWN0aW9uIixudWxs'@;
put 'LGN0KSksTmUuYz4wJiZOZS5yPjAmJihjdC5wYW5lPSJib3R0b21SaWdodCIscGUrPVByKCJzZWxlY3Rpb24iLG51bGwsY3QpKSl9cmV0dXJuIFByKCJzaGVldFZpZXdzIixQcigic2hlZXRWaWV3IixwZXx8bnVsbCxRKSx7fSl9KHllLDAsUyxrKSxSLnNoZWV0Rm9ybWF0KXt2YXIgY3Q9e2Rl'@;
put 'ZmF1bHRSb3dIZWlnaHQ6Ui5zaGVldEZvcm1hdC5kZWZhdWx0Um93SGVpZ2h0fHwiMTYiLGJhc2VDb2xXaWR0aDpSLnNoZWV0Rm9ybWF0LmJhc2VDb2xXaWR0aHx8IjEwIn07bnVsbCE9Ui5zaGVldEZvcm1hdC5vdXRsaW5lTGV2ZWxSb3cmJihjdC5vdXRsaW5lTGV2ZWxSb3c9Ui5zaGVldEZv'@;
put 'cm1hdC5vdXRsaW5lTGV2ZWxSb3cpLFFbUS5sZW5ndGhdPVByKCJzaGVldEZvcm1hdFByIixudWxsLGN0KX1lbHNlIGlmKHllWyIhc2hlZXRGb3JtYXQiXSl7dmFyIEV0PXt9LG90PSExO3llWyIhc2hlZXRGb3JtYXQiXS5yb3cmJih5ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdD8ob3Q9ITAs'@;
put 'RXQuZGVmYXVsdFJvd0hlaWdodD15ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdCxFdC5jdXN0b21IZWlnaHQ9MSk6eWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHg/KG90PSEwLEV0LmRlZmF1bHRSb3dIZWlnaHQ9VTMoeWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHgpLEV0LmN1c3RvbUhlaWdo'@;
put 'dD0xKTooMD09PXllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB0fHwwPT09eWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHh8fHllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaGlkZGVuKSYmKG90PSEwLEV0LmRlZmF1bHRSb3dIZWlnaHQ9RXQuZGVmYXVsdFJvd0hlaWdodHx8MTYsRXQuY3VzdG9tSGVp'@;
put 'Z2h0PTEsRXQuemVyb0hlaWdodD0xKSx5ZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50JiYoRXRbIngxNGFjOmR5RGVzY2VudCJdPXllWyIhc2hlZXRGb3JtYXQiXS5keURlc2NlbnQpKSx5ZVsiIXNoZWV0Rm9ybWF0Il0uY29sJiYoeWVbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2h8fFEwKHll'@;
put 'WyIhc2hlZXRGb3JtYXQiXS5jb2wpLEV0LmRlZmF1bHRDb2xXaWR0aD15ZVsiIXNoZWV0Rm9ybWF0Il0uY29sLndjaCs1L1RjfHwwLG90PSEwKSxudWxsPT1FdC5kZWZhdWx0Um93SGVpZ2h0JiYoRXQuZGVmYXVsdFJvd0hlaWdodD0xNiksbnVsbD09RXQuZGVmYXVsdENvbFdpZHRoJiYoRXQu'@;
put 'ZGVmYXVsdENvbFdpZHRoPTEwKSxFdC5vdXRsaW5lTGV2ZWxSb3c9RXQub3V0bGluZUxldmVsUm93fHw3LG90JiYoUVtRLmxlbmd0aF09UHIoInNoZWV0Rm9ybWF0UHIiLG51bGwsRXQpKX1udWxsIT15ZVsiIWNvbHMiXSYmeWVbIiFjb2xzIl0ubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT1mdW5j'@;
put 'dGlvbiBmaihTLFIsayl7Zm9yKHZhciBRLEc9WyI8Y29scz4iXSxhZT0wO2FlIT1SLmxlbmd0aDsrK2FlKWlmKFE9UlthZV0pe2lmKFEuYXV0byYmYVMoUyxRLGFlKSxRLnN8fFEueil7dmFyIGdlPXt0OiJ6In07bnVsbCE9US5zJiYoZ2Uucz1RLnMpLG51bGwhPVEueiYmKGdlLno9US56KSxR'@;
put 'LnN0eWxlPXMwKGsuY2VsbFhmcyxrLmNlbGxTdHlsZVhmcyxnZSxrKX1HW0cubGVuZ3RoXT1QcigiY29sIixudWxsLGM4KGFlLFEpKX1yZXR1cm4gR1tHLmxlbmd0aF09IjwvY29scz4iLEcuam9pbigiIil9KHllLHllWyIhY29scyJdLFIpKSxRW2dlPVEubGVuZ3RoXT0iPHNoZWV0RGF0YS8+'@;
put 'Iix5ZVsiIWxpbmtzIl09W10sbnVsbCE9eWVbIiFyZWYiXSYmKHBlPWZ1bmN0aW9uIE1TKFMsUixrLEcpe3ZhciB5ZSxidCxRPVtdLGFlPVtdLGdlPWFhKFNbIiFyZWYiXSkscGU9IiIsUGU9IiIsTmU9W10sWWU9MCxldD0wLGN0PVNbIiFyb3dzIl0sRXQ9QXJyYXkuaXNBcnJheShTKSxvdD17'@;
put 'cjpQZX0sanQ9LTE7Zm9yKGV0PWdlLnMuYztldDw9Z2UuZS5jOysrZXQpTmVbZXRdPUFvKGV0KTtmb3IoWWU9Z2Uucy5yO1llPD1nZS5lLnI7KytZZSl7Zm9yKGFlPVtdLFBlPWppKFllKSxldD1nZS5zLmM7ZXQ8PWdlLmUuYzsrK2V0KXt5ZT1OZVtldF0rUGU7dmFyIGt0PUV0PyhTW1llXXx8'@;
put 'W10pW2V0XTpTW3llXTt2b2lkIDAhPT1rdCYmbnVsbCE9KHBlPXo1KGt0LHllLFMsUikpJiZhZS5wdXNoKHBlKX0oYWUubGVuZ3RoPjB8fGN0JiZjdFtZZV0pJiYob3Q9e3I6UGV9LGN0JiZjdFtZZV0mJigoYnQ9Y3RbWWVdKS5oaWRkZW4mJihvdC5oaWRkZW49MSksanQ9LTEsYnQuaHB4P2p0'@;
put 'PVUzKGJ0LmhweCk6YnQuaHB0JiYoanQ9YnQuaHB0KSxqdD4tMSYmKG90Lmh0PWp0LG90LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKG90Lm91dGxpbmVMZXZlbD1idC5sZXZlbCksYnQuZHlEZXNjZW50JiYob3RbIngxNGFjOmR5RGVzY2VudCJdPWJ0LmR5RGVzY2VudCksYnQucyYmKG90'@;
put 'LnM9czAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt0OiJ6IixzOmJ0LnN9LFIpLG90LmN1c3RvbUZvcm1hdD0xKSksUVtRLmxlbmd0aF09UHIoInJvdyIsYWUuam9pbigiIiksb3QpKX1pZihjdClmb3IoO1llPGN0Lmxlbmd0aDsrK1llKWN0JiZjdFtZZV0mJihvdD17cjpZZSsxfSwoYnQ9'@;
put 'Y3RbWWVdKS5oaWRkZW4mJihvdC5oaWRkZW49MSksanQ9LTEsYnQuaHB4P2p0PVUzKGJ0LmhweCk6YnQuaHB0JiYoanQ9YnQuaHB0KSxqdD4tMSYmKG90Lmh0PWp0LG90LmN1c3RvbUhlaWdodD0xKSxidC5sZXZlbCYmKG90Lm91dGxpbmVMZXZlbD1idC5sZXZlbCksUVtRLmxlbmd0aF09UHIo'@;
put 'InJvdyIsIiIsb3QpKTtyZXR1cm4gUS5qb2luKCIiKX0oeWUsUikscGUubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT1wZSkpLFEubGVuZ3RoPmdlKzEmJihRW1EubGVuZ3RoXT0iPC9zaGVldERhdGE+IixRW2dlXT1RW2dlXS5yZXBsYWNlKCIvPiIsIj4iKSkseWVbIiFwcm90ZWN0Il0mJihRW1Eu'@;
put 'bGVuZ3RoXT1mdW5jdGlvbiB1aihTKXt2YXIgUj17c2hlZXQ6MX07cmV0dXJuIGJTLmZvckVhY2goZnVuY3Rpb24oayl7bnVsbCE9U1trXSYmU1trXSYmKFJba109IjEiKX0pLElELmZvckVhY2goZnVuY3Rpb24oayl7bnVsbCE9U1trXSYmIVNba10mJihSW2tdPSIwIil9KSxTLnBhc3N3b3Jk'@;
put 'P1IucGFzc3dvcmQ9UHYoUy5wYXNzd29yZCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk6Uy5lbmNyeXB0aW9uJiYoUi5hbGdvcml0aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdvLFIuaGFzaFZhbHVlPVMuZW5jcnlwdGlvbi5oYXNoLFIuc2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0LFIu'@;
put 'c3BpbkNvdW50PVMuZW5jcnlwdGlvbi5zcGluKSxQcigic2hlZXRQcm90ZWN0aW9uIixudWxsLFIpfSh5ZVsiIXByb3RlY3QiXSkpLG51bGwhPXllWyIhYXV0b2ZpbHRlciJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gZ2ooUyxSLGssRyl7dmFyIFE9InN0cmluZyI9PXR5cGVvZiBTLnJlZj9T'@;
put 'LnJlZjppbyhTLnJlZik7ay5Xb3JrYm9va3x8KGsuV29ya2Jvb2s9e1NoZWV0czpbXX0pLGsuV29ya2Jvb2suTmFtZXN8fChrLldvcmtib29rLk5hbWVzPVtdKTt2YXIgYWU9ay5Xb3JrYm9vay5OYW1lcyxnZT1TcyhRKTtnZS5zLnI9PWdlLmUuciYmKGdlLmUucj1TcyhSWyIhcmVmIl0pLmUu'@;
put 'cixRPWlvKGdlKSk7Zm9yKHZhciBwZT0wO3BlPGFlLmxlbmd0aDsrK3BlKXt2YXIgeWU9YWVbcGVdO2lmKCJfeGxubS5fRmlsdGVyRGF0YWJhc2UiPT15ZS5OYW1lJiZ5ZS5TaGVldD09Ryl7eWUuUmVmPSInIitrLlNoZWV0TmFtZXNbR10rIichIitRO2JyZWFrfX1yZXR1cm4gcGU9PWFlLmxl'@;
put 'bmd0aCYmYWUucHVzaCh7TmFtZToiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIixTaGVldDpHLFJlZjoiJyIray5TaGVldE5hbWVzW0ddKyInISIrUX0pLFByKCJhdXRvRmlsdGVyIixudWxsLHtyZWY6UX0pfSh5ZVsiIWF1dG9maWx0ZXIiXSx5ZSxrLFMpKSxudWxsIT15ZVsiIW1lcmdlcyJdJiZ5'@;
put 'ZVsiIW1lcmdlcyJdLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gZ1MoUyl7aWYoMD09PVMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUj0nPG1lcmdlQ2VsbHMgY291bnQ9IicrUy5sZW5ndGgrJyI+JyxrPTA7ayE9Uy5sZW5ndGg7KytrKVIrPSc8bWVyZ2VDZWxsIHJlZj0iJytp'@;
put 'byhTW2tdKSsnIi8+JztyZXR1cm4gUisiPC9tZXJnZUNlbGxzPiJ9KHllWyIhbWVyZ2VzIl0pKSx5ZVsiIWNvbmRmbXQiXSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIF9qKFMsUil7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKGssRyl7cmV0dXJuIGZ1bmN0aW9uIHlqKFMsUixrKXt2YXIgRz1TLnM/'@;
put 'bFMoay5EWEYsUy5zKTotMSxRPSJzdHJpbmciPT10eXBlb2YgUy5yZWY/Uy5yZWY6aW8oUy5yZWYpLGdlPWFhKFEucmVwbGFjZSgvXHMuKiQvLCIiKSkucztnZS5yPDAmJihnZS5yPTApLGdlLmM8MCYmKGdlLmM9MCk7dmFyIHBlPSIiLHllPXtwcmlvcml0eTpSKzF9O3N3aXRjaChHPi0xJiYo'@;
put 'eWUuZHhmSWQ9RyksUy50KXtjYXNlInVuaXF1ZSI6eWUudHlwZT0idW5pcXVlVmFsdWVzIjticmVhaztjYXNlImR1cCI6eWUudHlwZT0iZHVwbGljYXRlVmFsdWVzIjticmVhaztjYXNlImJsYW5rIjp5ZS50eXBlPShTLnY/ImMiOiJub3RDIikrIm9udGFpbnNCbGFua3MiLHBlPSI8Zm9ybXVs'@;
put 'YT5MRU4oVFJJTSgiK3FpKGdlKSsiKSkiKyhTLnY/Ij0iOiImZ3Q7IikrIjA8L2Zvcm11bGE+IjticmVhaztjYXNlImVycm9yIjp5ZS50eXBlPShTLnY/ImMiOiJub3RDIikrIm9udGFpbnNFcnJvcnMiO2JyZWFrO2Nhc2UiZm9ybXVsYSI6eWUudHlwZT0iZXhwcmVzc2lvbiIscGU9UHIoImZv'@;
put 'cm11bGEiLExyKFMuZikse30pO2JyZWFrO2Nhc2UiZGF0ZSI6eWUudHlwZT0idGltZVBlcmlvZCIseWUudGltZVBlcmlvZD1ialtTLm9wXTticmVhaztjYXNlInRleHQiOnN3aXRjaCh5ZS50eXBlPXllLm9wZXJhdG9yPWg4W1Mub3BdLHllLnRleHQ9Uy52LFMub3Ape2Nhc2UiSU4iOnBlPSc8'@;
put 'Zm9ybXVsYT5OT1QoSVNFUlJPUihTRUFSQ0goIicrTHIoUy52KSsnIiwnK3FpKGdlKSsiKSkpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJPVCI6cGU9Jzxmb3JtdWxhPklTRVJST1IoU0VBUkNIKCInK0xyKFMudikrJyIsJytxaShnZSkrIikpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJTVCI6cGU9'@;
put 'Ijxmb3JtdWxhPkxFRlQoIitxaShnZSkrJyxMRU4oIicrTHIoUy52KSsnIikpPSInK0xyKFMudikrJyI8L2Zvcm11bGE+JzticmVhaztjYXNlIk5EIjpwZT0iPGZvcm11bGE+UklHSFQoIitxaShnZSkrJyxMRU4oIicrTHIoUy52KSsnIikpPSInK0xyKFMudikrJyI8L2Zvcm11bGE+J31icmVh'@;
put 'aztjYXNlInZhbCI6eWUudHlwZT0iY2VsbElzIix5ZS5vcGVyYXRvcj1sYltTLm9wXSxwZT1udWxsIT1TLm1pbj9QcigiZm9ybXVsYSIsTHIoU3RyaW5nKFMubWluKSkse30pK1ByKCJmb3JtdWxhIixMcihTdHJpbmcoUy5tYXgpKSx7fSk6UHIoImZvcm11bGEiLExyKG51bGwhPVMudj9TdHJp'@;
put 'bmcoInN0cmluZyI9PXR5cGVvZiBTLnY/JyInK1Mudi5yZXBsYWNlKC8iL2csJyIiJykrJyInOlMudik6Uy5mKSx7fSk7YnJlYWs7Y2FzZSJhdmciOnN3aXRjaCh5ZS50eXBlPSJhYm92ZUF2ZXJhZ2UiLHllLmFib3ZlQXZlcmFnZT0iTCI9PVMub3AuY2hhckF0KDApPyIwIjoiMSIsUy5vcC5j'@;
put 'aGFyQXQoMSkpe2Nhc2UiVCI6eWUuZXF1YWxBdmVyYWdlPSIwIjticmVhaztjYXNlIkUiOnllLmVxdWFsQXZlcmFnZT0iMSI7YnJlYWs7ZGVmYXVsdDp5ZS5zdGREZXY9Uy5vcC5jaGFyQXQoMSl9YnJlYWs7Y2FzZSJyYW5rIjp5ZS50eXBlPSJ0b3AxMCIseWUuYm90dG9tPSJCIj09Uy5vcC5j'@;
put 'aGFyQXQoMCk/IjEiOiIwIix5ZS5wZXJjZW50PSJQIj09Uy5vcC5jaGFyQXQoMSk/IjEiOiIwIix5ZS5yYW5rPVMudjticmVhaztjYXNlImljb24iOnllLnR5cGU9Imljb25TZXQiO3ZhciBQZT17aWNvblNldDpTLnYscGVyY2VudDpTLnBjdD8idHJ1ZSI6ImZhbHNlIn07Uy5yZXYmJihQZS5y'@;
put 'ZXZlcnNlPSJ0cnVlIiksUy5oaWRkZW4mJihQZS5zaG93VmFsdWU9ImZhbHNlIikscGU9UHIoImljb25TZXQiLFMudGhyZXNoLm1hcChXNCkuam9pbigiIiksUGUpO2JyZWFrO2Nhc2Uic2NhbGUiOnllLnR5cGU9ImNvbG9yU2NhbGUiLHBlKz1XNChTLmNtaW4pLFMuY21pZCYmKHBlKz1XNChT'@;
put 'LmNtaWQpKSxwZSs9VzQoUy5jbWF4KSxwZSs9bWQoUy5jbWluLmNvbG9yKSxTLmNtaWQmJihwZSs9bWQoUy5jbWlkLmNvbG9yKSkscGU9UHIoImNvbG9yU2NhbGUiLHBlKz1tZChTLmNtYXguY29sb3IpLHt9KTticmVhaztjYXNlImJhciI6eWUudHlwZT0iZGF0YUJhciIscGUrPVc0KFMuY21p'@;
put 'bikscGUrPVc0KFMuY21heCkscGU9UHIoImRhdGFCYXIiLHBlKz1tZChTLmNvbG9yKSx7fSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBjb25zb2xlLmxvZyhTKSwiQ0YgbWlzc2luZyB0eXBlICIrUy50fXJldHVybic8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIHNxcmVmPSInK1ErJyI+JytQcigiY2ZS'@;
put 'dWxlIiwiIj09cGU/bnVsbDpwZSx5ZSkrIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiJ9KGssRyxSKX0pLmpvaW4oIiIpfSh5ZVsiIWNvbmRmbXQiXSxSKSkseWVbIiF2YWxpZGF0aW9ucyJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gUEQoUyl7aWYoIVN8fDA9PVMubGVuZ3RoKXJldHVybiIi'@;
put 'O2Zvcih2YXIgUj1bXSxrPTAsRz0wO0c8Uy5sZW5ndGg7KytHKXt2YXIgUT1TW0ddLGFlPWRoW1EudF07aWYoUS5yZWYmJigic3RyaW5nIiE9dHlwZW9mIFEucmVmfHwtMSE9US5yZWYuaW5kZXhPZigiICIpfHwoUS5yZWY9YWEoUS5yZWYpLFEucmVmLnMmJiEoUS5yZWYucy5jPDApKSkpeysr'@;
put 'azt2YXIgZ2U9e3R5cGU6YWUsYWxsb3dCbGFuazorKDAhPVEuYmxhbmspLHNob3dJbnB1dE1lc3NhZ2U6KygwIT1RLmlucHV0KSxzaG93RXJyb3JNZXNzYWdlOisoMCE9US5lcnJvciksc3FyZWY6InN0cmluZyI9PXR5cGVvZiBRLnJlZj9RLnJlZjppbyhRLnJlZil9O2lmKFEuaW5wdXQmJihR'@;
put 'LmlucHV0LnRpdGxlJiYoZ2UucHJvbXB0VGl0bGU9V2koUS5pbnB1dC50aXRsZSkpLFEuaW5wdXQubWVzc2FnZSYmKGdlLnByb21wdD1XaShRLmlucHV0Lm1lc3NhZ2UpKSksUS5lcnJvciYmKFEuZXJyb3IudGl0bGUmJihnZS5lcnJvclRpdGxlPVdpKFEuZXJyb3IudGl0bGUpKSxRLmVycm9y'@;
put 'Lm1lc3NhZ2UmJihnZS5lcnJvcj1XaShRLmVycm9yLm1lc3NhZ2UpKSxRLmVycm9yLnN0eWxlJiYoZ2UuZXJyb3JTdHlsZT1RLmVycm9yLnN0eWxlKSksIWFlKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIrUS50KTt2YXIgcGU9IiI7c3dpdGNo'@;
put 'KFEudCl7Y2FzZSJBbnkiOmJyZWFrO2Nhc2UiTGlzdCI6Y2FzZSJDdXN0b20iOmlmKFEubCl7aWYoUS5sLmpvaW4oIiwiKS5sZW5ndGg+MjUwKXRocm93IG5ldyBFcnJvcigiRFYgbGVuZ3RoID4gMjUwIHRyaWdnZXJzIGNvcnJ1cHRpb24gZXJyb3JzIGluIEV4Y2VsLiAgVXNlIGEgbG9va3Vw'@;
put 'IHRhYmxlIik7cGU9Jzxmb3JtdWxhMT4iJytMcihRLmwuam9pbigiLCIpKSsnIjwvZm9ybXVsYTE+J31lbHNlIHBlPSI8Zm9ybXVsYTE+IitMcihRLmYpKyI8L2Zvcm11bGExPiI7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIlRpbWUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hv'@;
put 'bGUiOmlmKCFsYltRLm9wXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK1Eub3ArIiBmb3IgIitRLnQpO2lmKGdlLm9wZXJhdG9yPWxiW1Eub3BdLG51bGwhPVEudilwZT0iPGZvcm11bGExPiIrTHIoU3RyaW5nKFEudiBpbnN0YW5jZW9mIERhdGU/UWUoUS52'@;
put 'KTpRLnYpKSsiPC9mb3JtdWxhMT4iO2Vsc2V7aWYobnVsbD09US5taW58fG51bGw9PVEubWF4KXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5gK2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIrUS50KTtwZT0iPGZvcm11bGExPiIrTHIoU3RyaW5nKFEu'@;
put 'bWluIGluc3RhbmNlb2YgRGF0ZT9RZShRLm1pbik6US5taW4pKSsiPC9mb3JtdWxhMT48Zm9ybXVsYTI+IitMcihTdHJpbmcoUS5tYXggaW5zdGFuY2VvZiBEYXRlP1FlKFEubWF4KTpRLm1heCkpKyI8L2Zvcm11bGEyPiJ9fVIucHVzaChQcigiZGF0YVZhbGlkYXRpb24iLHBlfHxudWxsLGdl'@;
put 'KSl9fXJldHVybiBrPjA/JzxkYXRhVmFsaWRhdGlvbnMgY291bnQ9IicraysnIj4nK1Iuam9pbigiIikrIjwvZGF0YVZhbGlkYXRpb25zPiI6IiJ9KHllWyIhdmFsaWRhdGlvbnMiXSkpO3ZhciBqdCxidD0tMSxrdD0tMTtpZih5ZVsiIWxpbmtzIl0ubGVuZ3RoPjAmJihRW1EubGVuZ3RoXT0i'@;
put 'PGh5cGVybGlua3M+Iix5ZVsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihTbil7U25bMV0uVGFyZ2V0JiYoanQ9e3JlZjpTblswXX0sIiMiIT1TblsxXS5UYXJnZXQuY2hhckF0KDApJiYoa3Q9RXIoRywtMSxMcihTblsxXS5UYXJnZXQpLnJlcGxhY2UoLyMuKiQvLCIiKSxxby5ITElOSyks'@;
put 'anRbInI6aWQiXT0icklkIitrdCksKGJ0PVNuWzFdLlRhcmdldC5pbmRleE9mKCIjIikpPi0xJiYoanQubG9jYXRpb249THIoU25bMV0uVGFyZ2V0LnNsaWNlKGJ0KzEpKSksU25bMV0uVG9vbHRpcCYmKGp0LnRvb2x0aXA9THIoU25bMV0uVG9vbHRpcCkpLFFbUS5sZW5ndGhdPVByKCJoeXBl'@;
put 'cmxpbmsiLG51bGwsanQpKX0pLFFbUS5sZW5ndGhdPSI8L2h5cGVybGlua3M+IiksZGVsZXRlIHllWyIhbGlua3MiXSxldCl7dmFyIE90PWZ1bmN0aW9uIHNqKFMpe2lmKFMucHJvcHMpe3ZhciBSPXt9LGs9Uy5wcm9wcztyZXR1cm4gay5ncmlkbGluZXMmJihSLmdyaWRMaW5lcz1SLmdyaWRM'@;
put 'aW5lc1NldD0xKSxrLmhlYWRpbmdzJiYoUi5oZWFkaW5ncz0xKSxrLmNlbnRlclgmJihSLmhvcml6b250YWxDZW50ZXJlZD0xKSxrLmNlbnRlclkmJihSLnZlcnRpY2FsQ2VudGVyZWQ9MSksUHIoInByaW50T3B0aW9ucyIsbnVsbCxSKX1yZXR1cm4iIn0oZXQpO090Lmxlbmd0aCYmKFFbUS5s'@;
put 'ZW5ndGhdPU90KX1pZigobnVsbCE9eWVbIiFtYXJnaW5zIl18fGV0JiZldC5tYXJnaW5zKSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIGhqKFMpe3JldHVybiBYMyhTKSxQcigicGFnZU1hcmdpbnMiLG51bGwsUyl9KHllWyIhbWFyZ2lucyJdfHxldC5tYXJnaW5zKSksZXQpe3ZhciBLdD1mdW5j'@;
put 'dGlvbiBERChTKXtpZihTLnByb3BzKXt2YXIgUj17fSxrPVMucHJvcHM7aWYoay5vcmllbnRhdGlvbiYmKFIub3JpZW50YXRpb249ay5vcmllbnRhdGlvbiksay5zY2FsZSYmKFIuc2NhbGU9ay5zY2FsZSksay5maXQmJihudWxsIT1rLmZpdC5oZWlnaHQmJihSLmZpdFRvSGVpZ2h0PWsuZml0'@;
put 'LmhlaWdodCksbnVsbCE9ay5maXQud2lkdGgmJihSLmZpdFRvV2lkdGg9ay5maXQud2lkdGgpKSxrLmRwaSYmKFIuaG9yaXpvbnRhbERwaT1SLnZlcnRpY2FsRHBpPWsuZHBpKSxudWxsIT1rLmZpcnN0JiYoUi5maXJzdFBhZ2VOdW1iZXI9ay5maXJzdCxSLnVzZUZpcnN0UGFnZU51bWJlcj0x'@;
put 'KSxrLmJ3JiYoUi5ibGFja0FuZFdoaXRlPTEpLGsuZHJhZnQmJihSLmRyYWZ0PTEpLGsuY29tbWVudHMmJihSLmNlbGxDb21tZW50cz14RFtrLmNvbW1lbnRzXXx8Im5vbmUiKSxrLmVycm9ycyYmKFIuZXJyb3JzPVREW2suZXJyb3JzXXx8Im5vbmUiKSxrLnBhcGVyKXN3aXRjaCh0eXBlb2Yg'@;
put 'ay5wYXBlcil7Y2FzZSJudW1iZXIiOlIucGFwZXJTaXplPWsucGFwZXI7YnJlYWs7Y2FzZSJzdHJpbmciOmNCW2sucGFwZXJdP1IucGFwZXJTaXplPWNCW2sucGFwZXJdOitrLnBhcGVyJiYoUi5wYXBlclNpemU9K2sucGFwZXIpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZighay5wYXBlci5oZWln'@;
put 'aHR8fCFrLnBhcGVyLndpZHRoKXRocm93IkN1c3RvbSBQYXBlciBTaXplIG11c3QgaW5jbHVkZSB3aWR0aCBhbmQgaGVpZ2h0ISI7Ui5wYXBlckhlaWdodD1rLnBhcGVyLmhlaWdodCxSLnBhcGVyV2lkdGg9ay5wYXBlci53aWR0aH1yZXR1cm5bMSwhMCwidHJ1ZSIsIm92ZXIiXS5pbmRleE9m'@;
put 'KGsub3JkZXIpPi0xJiYoUi5wYWdlT3JkZXI9Im92ZXJUaGVuRG93biIpLFByKCJwYWdlU2V0dXAiLG51bGwsUil9cmV0dXJuIiJ9KGV0KTtLdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1LdCksS3Q9ZnVuY3Rpb24gdmooUyl7dmFyIFI9W10saz0iIixHPSIiLFE9IiIsYWU9IiIsZ2U9IiIscGU9'@;
put 'IiIseWU9IiIsUGU9dDEoUy5oZWFkZXIpO1BlLmxlbmd0aCYmKEc9UGVbMF0scGU9UGVbMV0sYWU9UGVbMl0pO3ZhciBOZT10MShTLmZvb3Rlcik7cmV0dXJuIE5lLmxlbmd0aCYmKFE9TmVbMF0seWU9TmVbMV0sZ2U9TmVbMl0pLEcmJlIucHVzaCgiPG9kZEhlYWRlcj4iK0xyKEcpKyI8L29k'@;
put 'ZEhlYWRlcj4iKSxRJiZSLnB1c2goIjxvZGRGb290ZXI+IitMcihRKSsiPC9vZGRGb290ZXI+IiksKGdlIT1RfHxhZSE9RykmJihrKz0nIGRpZmZlcmVudE9kZEV2ZW49IjEiJyxSLnB1c2goIjxldmVuSGVhZGVyPiIrTHIoYWUpKyI8L2V2ZW5IZWFkZXI+IiksUi5wdXNoKCI8ZXZlbkZvb3Rl'@;
put 'cj4iK0xyKGdlKSsiPC9ldmVuRm9vdGVyPiIpKSwoeWUhPVF8fHBlIT1HKSYmKGsrPScgZGlmZmVyZW50Rmlyc3Q9IjEiJyxSLnB1c2goIjxmaXJzdEhlYWRlcj4iK0xyKHBlKSsiPC9maXJzdEhlYWRlcj4iKSxSLnB1c2goIjxmaXJzdEZvb3Rlcj4iK0xyKHllKSsiPC9maXJzdEZvb3Rlcj4i'@;
put 'KSksUi5sZW5ndGg/IjxoZWFkZXJGb290ZXIiK2srIj4iK1Iuam9pbigiIikrIjwvaGVhZGVyRm9vdGVyPiI6IiJ9KGV0KSxLdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1LdCl9aWYoKG51bGwhPXllWyIhcm93QnJlYWtzIl18fGV0JiZldC5yb3dCcmVha3MpJiYoUVtRLmxlbmd0aF09ZnVuY3Rp'@;
put 'b24gY2ooUyl7aWYoMD09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBSPVsnPHJvd0JyZWFrcyBjb3VudD0iJytTLmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK1MubGVuZ3RoKyciPiddLGs9MDtrPFMubGVuZ3RoOysraylSLnB1c2goJzxicmsgaWQ9IicrU1trXS5SKyciIG1hbj0i'@;
put 'MSIvPicpO3JldHVybiBSLmpvaW4oIiIpKyI8L3Jvd0JyZWFrcz4ifSh5ZVsiIXJvd0JyZWFrcyJdfHxldC5yb3dCcmVha3MpKSwobnVsbCE9eWVbIiFjb2xCcmVha3MiXXx8ZXQmJmV0LmNvbEJyZWFrcykmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiB2UyhTKXtpZigwPT1TLmxlbmd0aClyZXR1'@;
put 'cm4iIjtmb3IodmFyIFI9Wyc8Y29sQnJlYWtzIGNvdW50PSInK1MubGVuZ3RoKyciIG1hbnVhbEJyZWFrQ291bnQ9IicrUy5sZW5ndGgrJyI+J10saz0wO2s8Uy5sZW5ndGg7KytrKVIucHVzaCgnPGJyayBpZD0iJytTW2tdLkMrJyIgbWFuPSIxIi8+Jyk7cmV0dXJuIFIuam9pbigiIikrIjwv'@;
put 'Y29sQnJlYWtzPiJ9KHllWyIhY29sQnJlYWtzIl18fGV0LmNvbEJyZWFrcykpLCghUnx8Ui5pZ25vcmVFQ3x8bnVsbD09Ui5pZ25vcmVFQykmJihRW1EubGVuZ3RoXT1ObygiaWdub3JlZEVycm9ycyIsUHIoImlnbm9yZWRFcnJvciIsbnVsbCx7bnVtYmVyU3RvcmVkQXNUZXh0OjEsc3FyZWY6'@;
put 'UGV9KSkpLHllWyIhY2hhcnRzIl0mJlllLnB1c2guYXBwbHkoWWUseWVbIiFjaGFydHMiXSkseWVbIiFpbWFnZXMiXSYmWWUucHVzaC5hcHBseShZZSx5ZVsiIWltYWdlcyJdKSx5ZVsiIXNoYXBlcyJdJiZZZS5wdXNoLmFwcGx5KFllLHllWyIhc2hhcGVzIl0pLFllLmxlbmd0aD4wJiYoa3Q9'@;
put 'RXIoRywtMSwiLi4vZHJhd2luZ3MvZHJhd2luZyIrKFMrMSkrIi54bWwiLHFvLkRSQVcpLFFbUS5sZW5ndGhdPVByKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSx5ZVsiIWRyYXdpbmciXT1ZZSksKHllWyIhY29tbWVudHMiXS5sZW5ndGg+MHx8KHllWyIhY29udHJvbHMiXXx8'@;
put 'W10pLmxlbmd0aD4wKSYmKGt0PUVyKEcsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhTKzEpKyIudm1sIixxby5WTUwpLFFbUS5sZW5ndGhdPVByKCJsZWdhY3lEcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIra3R9KSx5ZVsiIWxlZ2FjeSJdPWt0KSx5ZVsiIXByaW50Il0mJnllWyIh'@;
put 'cHJpbnQiXS5pbWFnZXMpe3ZhciBUbj15ZVsiIXByaW50Il0uaW1hZ2VzLHJyPTA7WyJoZWFkZXIiLCJmb290ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFNuKXtUbltTbl0mJlsib2RkIiwiZXZlbiIsImZpcnN0Il0uZm9yRWFjaChmdW5jdGlvbihscil7VG5bU25dW2xyXSYmWyJsZWZ0Iiwicmln'@;
put 'aHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFhuKXtpZihBcnJheS5pc0FycmF5KFRuW1NuXVtscl1bWG5dKSlmb3IodmFyIFZuPTA7Vm48VG5bU25dW2xyXVtYbl0ubGVuZ3RoOysrVm4pVG5bU25dW2xyXVtYbl1bVm5dJiYoVG5bU25dW2xyXVtYbl1bVm5dLl9jbnQ9cnIrKyl9KX0p'@;
put 'fSkscnI+MCYmKGt0PUVyKEcsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhTKzEpKyJIRi52bWwiLHFvLlZNTCksUVtRLmxlbmd0aF09UHIoImxlZ2FjeURyYXdpbmdIRiIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSkseWVbIiFsZWdhY3lIRiJdPWt0KX1yZXR1cm4oeWVbIiF0YWJsZXMi'@;
put 'XXx8W10pLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09Jzx0YWJsZVBhcnRzIGNvdW50PSInK3llWyIhdGFibGVzIl0ubGVuZ3RoKyciPicseWVbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKFNuLGxyKXtrdD1FcihHLC0xLCIuLi90YWJsZXMvdGFibGUiKyhTKzEpKyJfIitscisiLnhtbCIs'@;
put 'cW8uVEFCTEUpLFFbUS5sZW5ndGhdPSc8dGFibGVQYXJ0IHI6aWQ9InJJZCcra3QrJyIvPid9KSxRW1EubGVuZ3RoXT0iPC90YWJsZVBhcnRzPiIpLFEubGVuZ3RoPjEmJihRW1EubGVuZ3RoXT0iPC93b3Jrc2hlZXQ+IixRWzFdPVFbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFEuam9pbigiIil9'@;
put 'ZnVuY3Rpb24gU2ooUyxSLGssRyl7dmFyIFE9ZnVuY3Rpb24gQ2ooUyxSLGspe3ZhciBHPWJuKDE0NSksUT0oa1siIXJvd3MiXXx8W10pW1NdfHx7fTtHLndyaXRlX3NoaWZ0KDQsUyksRy53cml0ZV9zaGlmdCg0LDApO3ZhciBhZT0zMjA7US5ocHg/YWU9MjAqVTMoUS5ocHgpOlEuaHB0JiYo'@;
put 'YWU9MjAqUS5ocHQpLEcud3JpdGVfc2hpZnQoMixhZSksRy53cml0ZV9zaGlmdCgxLDApO3ZhciBnZT0wO1EubGV2ZWwmJihnZXw9US5sZXZlbCksUS5oaWRkZW4mJihnZXw9MTYpLChRLmhweHx8US5ocHQpJiYoZ2V8PTMyKSxHLndyaXRlX3NoaWZ0KDEsZ2UpLEcud3JpdGVfc2hpZnQoMSww'@;
put 'KTt2YXIgcGU9MCx5ZT1HLmw7Ry5sKz00O2Zvcih2YXIgUGU9e3I6UyxjOjB9LE5lPTA7TmU8MTY7KytOZSlpZighKFIucy5jPk5lKzE8PDEwfHxSLmUuYzxOZTw8MTApKXtmb3IodmFyIFllPS0xLGV0PS0xLGN0PU5lPDwxMDtjdDxOZSsxPDwxMDsrK2N0KVBlLmM9Y3QsKEFycmF5LmlzQXJy'@;
put 'YXkoayk/KGtbUGUucl18fFtdKVtQZS5jXTprW3FpKFBlKV0pJiYoWWU8MCYmKFllPWN0KSxldD1jdCk7WWU8MHx8KCsrcGUsRy53cml0ZV9zaGlmdCg0LFllKSxHLndyaXRlX3NoaWZ0KDQsZXQpKX12YXIgb3Q9Ry5sO3JldHVybiBHLmw9eWUsRy53cml0ZV9zaGlmdCg0LHBlKSxHLmw9b3Qs'@;
put 'Ry5sZW5ndGg+Ry5sP0cuc2xpY2UoMCxHLmwpOkd9KEcsayxSKTsoUS5sZW5ndGg+MTd8fChSWyIhcm93cyJdfHxbXSlbR10pJiZGcihTLCJCcnRSb3dIZHIiLFEpfXZhciBNaj1ndSx4aj1oZjtmdW5jdGlvbiBQaihTKXtyZXR1cm5bSmgoUyksUGwoUyksIm4iXX12YXIgVUQ9Z3Usdzg9aGYs'@;
put 'R0Q9WyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJoZWFkZXIiLCJmb290ZXIiXSwkRD1bIkFueSIsIldob2xlIiwiRGVjaW1hbCIsIkxpc3QiLCJEYXRlIiwiVGltZSIsIkxlbmd0aCIsIkN1c3RvbSJdLERTPVsiSU4iLCJPVCIsIkVRIiwiTkUiLCJHVCIsIkxUIiwiR0UiLCJMRSJd'@;
put 'O2Z1bmN0aW9uIEtEKFMpe3ZhciBSPWJuKDQpLGs9W1JdLEc9JEQuaW5kZXhPZihTLnQpO2lmKEc8MCl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9uOiB1bnJlY29nbml6ZWQgdHlwZSAiK1MudCk7dmFyIGFlPURTLmluZGV4T2YoUy5vcCk7c3dpdGNoKEcpe2Nhc2UgMDpjYXNlIDM6'@;
put 'Y2FzZSA3OmFlPTA7YnJlYWs7ZGVmYXVsdDppZigtMT09YWUpdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLm9wKyIgZm9yICIrUy50KX1SLndyaXRlX3NoaWZ0KDEsMHxHKSxSLndyaXRlX3NoaWZ0KDEsMSksUi53cml0ZV9zaGlmdCgxLDEyfGFlPDw0KSxS'@;
put 'LndyaXRlX3NoaWZ0KDEsMCksay5wdXNoKGZ1bmN0aW9uIFIzKFMpe3ZhciBSPVMuc3BsaXQoL1xzKixccyovKSxrPWJuKDQpO2sud3JpdGVfc2hpZnQoNCxSLmxlbmd0aCk7dmFyIEc9W2tdO3JldHVybiBSLmZvckVhY2goZnVuY3Rpb24oUSl7Ry5wdXNoKGhmKGFhKFEpKSl9KSxqKEcpfSgi'@;
put 'c3RyaW5nIj09dHlwZW9mIFMucmVmP1MucmVmOmlvKFMucmVmKSkpO3ZhciBnZT1ibigxNik7Z2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxnZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLGdlLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksZ2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3'@;
put 'Mjk1KSxrLnB1c2goZ2UpO3ZhciBwZT1ibig4KTtwZS53cml0ZV9zaGlmdCg0LDApLHBlLndyaXRlX3NoaWZ0KDQsMCk7dmFyIHllPTE7c3dpdGNoKFMudCl7Y2FzZSJBbnkiOmsucHVzaChwZSksay5wdXNoKHBlKTticmVhaztjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xl'@;
put 'IjppZihudWxsIT1TLnZ8fG51bGwhPVMuZilrLnB1c2goIm51bWJlciI9PXR5cGVvZiBTLnY/dFMoUy52KTpVNChudWxsPT1TLnY/Uy5mOlMudikpO2Vsc2V7aWYobnVsbD09Uy5taW58fG51bGw9PVMubWF4KXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjogYHZgIG9yIGBtaW5g'@;
put 'K2BtYXhgIHJlcXVpcmVkIGZvciBUeXBlICIrUy50O2sucHVzaCgibnVtYmVyIj09dHlwZW9mIFMubWluP3RTKFMubWluKTpVNChTLm1pbikpLGsucHVzaCgibnVtYmVyIj09dHlwZW9mIFMubWF4P3RTKFMubWF4KTpVNChTLm1heCkpLHllPTJ9YnJlYWs7Y2FzZSJMaXN0IjppZihudWxsIT1T'@;
put 'Lmwpe2sucHVzaChuUyhTLmwuam9pbigiLCIpKSk7YnJlYWt9Y2FzZSJDdXN0b20iOmlmKCJudWxsIiE9Uy5mKXtrLnB1c2goVTQoUy5mKSk7YnJlYWt9dGhyb3ciVW5zdXBwb3J0ZWQgRGF0YSBWYWxpZGF0aW9uOiBgZmAiKygiTGlzdCI9PVMudD8iIG9yIGBsYCI6IiIpKyIgcmVxdWlyZWQg'@;
put 'Zm9yIFR5cGUgIitTLnQ7ZGVmYXVsdDp0aHJvdyJYTFNCIGRvZXMgbm90IHN1cHBvcnQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitTLnR9cmV0dXJuIDE9PXllJiZrLnB1c2gocGUpLGooayl9ZnVuY3Rpb24gUWooUyxSLGssRyxRLGFlLGdlKXtpZih2b2lkIDA9PT1SLnYmJm51bGw9PVIuc3x8'@;
put 'InoiPT09Ui50JiYhUS5zaGVldFN0dWJzKXJldHVybiExO3ZhciBwZT0iIjtzd2l0Y2goUi50KXtjYXNlImIiOnBlPVIudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZCI6KFI9cXQoUikpLno9Ui56fHxBLl90YWJsZVsxNF0sUi52PVFlKEhlKFIudikpLFIudD0ibiI7YnJlYWs7Y2FzZSJuIjpjYXNl'@;
put 'ImUiOnBlPSIiK1IudjticmVhaztkZWZhdWx0OnBlPVIudn12YXIgeWU9e3I6ayxjOkd9O3N3aXRjaCh5ZS5zPXMwKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyxSLFEpLFIubCYmYWVbIiFsaW5rcyJdLnB1c2goW3FpKHllKSxSLmxdKSxSLmMmJmFlWyIhY29tbWVudHMiXS5wdXNoKFtxaSh5'@;
put 'ZSksUi5jXSksUi50KXtjYXNlInMiOmNhc2Uic3RyIjppZihRLmJvb2tTU1Qpe2lmKHBlPW9TKFEuU3RyaW5ncyxSLnYsUi5SP1Iucj1KcyhSLlIpOm51bGwsUS5yZXZTdHJpbmdzKSxSLlIpZm9yKHZhciBQZT0wO1BlPFIuUi5sZW5ndGg7KytQZSlSLlJbUGVdLnMmJnMwKFEuY2VsbFhmcyxR'@;
put 'LmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6Ui5SW1BlXS5zfSxRKTt5ZS50PSJzIix5ZS52PXBlLGdlP0ZyKFMsIkJydFNob3J0SXNzdCIsZnVuY3Rpb24gZGIoUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig4KSksZmkoUixrKSxrLndyaXRlX3NoaWZ0KDQsUi52KSxrfSgwLHllKSk6'@;
put 'RnIoUywiQnJ0Q2VsbElzc3QiLGZ1bmN0aW9uIFJqKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oMTIpKSx4cihSLGspLGsud3JpdGVfc2hpZnQoNCxSLnYpLGt9KDAseWUpKX1lbHNlIHllLnQ9InN0ciIsZ2U/RnIoUywiQnJ0U2hvcnRTdCIsZnVuY3Rpb24gamooUyxSLGspe3JldHVy'@;
put 'biBudWxsPT1rJiYoaz1ibig4KzQqUy52Lmxlbmd0aCkpLGZpKFIsayksUGMoUy52LGspLGsubGVuZ3RoPmsubD9rLnNsaWNlKDAsay5sKTprfShSLHllKSk6RnIoUywiQnJ0Q2VsbFN0IixmdW5jdGlvbiBWaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKzQqUy52Lmxlbmd0aCkp'@;
put 'LHhyKFIsayksUGMoUy52LGspLGsubGVuZ3RoPmsubD9rLnNsaWNlKDAsay5sKTprfShSLHllKSk7cmV0dXJuITA7Y2FzZSJuIjpyZXR1cm4gUi52PT0oMHxSLnYpJiZSLnY+LTFlMyYmUi52PDFlMz9nZT9GcihTLCJCcnRTaG9ydFJrIixmdW5jdGlvbiBOaihTLFIsayl7cmV0dXJuIG51bGw9'@;
put 'PWsmJihrPWJuKDgpKSxmaShSLGspLGx2KFMudixrKSxrfShSLHllKSk6RnIoUywiQnJ0Q2VsbFJrIixmdW5jdGlvbiBIaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKSkseHIoUixrKSxsdihTLnYsayksa30oUix5ZSkpOmdlP0ZyKFMsIkJydFNob3J0UmVhbCIsZnVuY3Rpb24g'@;
put 'a25lKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oMTIpKSxmaShSLGspLFJ1KFMudixrKSxrfShSLHllKSk6RnIoUywiQnJ0Q2VsbFJlYWwiLGZ1bmN0aW9uIE9qKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oMTYpKSx4cihSLGspLFJ1KFMudixrKSxrfShSLHllKSksITA7Y2Fz'@;
put 'ZSJiIjpyZXR1cm4geWUudD0iYiIsZ2U/RnIoUywiQnJ0U2hvcnRCb29sIixmdW5jdGlvbiB4UyhTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDUpKSxmaShSLGspLGsud3JpdGVfc2hpZnQoMSxTLnY/MTowKSxrfShSLHllKSk6RnIoUywiQnJ0Q2VsbEJvb2wiLGZ1bmN0aW9uIERqKFMs'@;
put 'UixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oOSkpLHhyKFIsayksay53cml0ZV9zaGlmdCgxLFMudj8xOjApLGt9KFIseWUpKSwhMDtjYXNlImUiOnJldHVybiB5ZS50PSJlIixnZT9GcihTLCJCcnRTaG9ydEVycm9yIixmdW5jdGlvbiBTbChTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJu'@;
put 'KDgpKSxmaShSLGspLGsud3JpdGVfc2hpZnQoMSxTLnYpLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDEsMCksa30oUix5ZSkpOkZyKFMsIkJydENlbGxFcnJvciIsZnVuY3Rpb24gYjgoUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig5KSkseHIoUixrKSxrLndyaXRlX3No'@;
put 'aWZ0KDEsUy52KSxrfShSLHllKSksITB9cmV0dXJuIGdlP0ZyKFMsIkJydFNob3J0QmxhbmsiLGZ1bmN0aW9uIEJEKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oNCkpLGZpKFIsayl9KDAseWUpKTpGcihTLCJCcnRDZWxsQmxhbmsiLGZ1bmN0aW9uIFRqKFMsUixrKXtyZXR1cm4gbnVs'@;
put 'bD09ayYmKGs9Ym4oOCkpLHhyKFIsayl9KDAseWUpKSwhMH1mdW5jdGlvbiBaNShTLFIsayxHKXt2YXIgUT12aSgpLGFlPWsuU2hlZXROYW1lc1tTXSxnZT1rLlNoZWV0c1thZV18fHt9LHBlPWFlO3RyeXtrJiZrLldvcmtib29rJiYocGU9ay5Xb3JrYm9vay5TaGVldHNbU10uQ29kZU5hbWV8'@;
put 'fHBlKX1jYXRjaHt9dmFyIHllPWFhKGdlWyIhcmVmIl18fCJBMSIpO2lmKHllLmUuYz4xNjM4M3x8eWUuZS5yPjEwNDg1NzUpe2lmKFIuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoZ2VbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7'@;
put 'eWUuZS5jPU1hdGgubWluKHllLmUuYywxNjM4MykseWUuZS5yPU1hdGgubWluKHllLmUuYywxMDQ4NTc1KX1yZXR1cm4gZ2VbIiFsaW5rcyJdPVtdLGdlWyIhY29tbWVudHMiXT1bXSxGcihRLCJCcnRCZWdpblNoZWV0IiksKGsudmJhcmF3fHxnZVsiIW91dGxpbmUiXSkmJkZyKFEsIkJydFdz'@;
put 'UHJvcCIsZnVuY3Rpb24gRWooUyxSLGspe251bGw9PWsmJihrPWJuKDg0KzQqUy5sZW5ndGgpKTt2YXIgRz0xOTI7UiYmKFIuYWJvdmUmJihHJj0tNjUpLFIubGVmdCYmKEcmPS0xMjkpKSxrLndyaXRlX3NoaWZ0KDEsRyk7Zm9yKHZhciBRPTE7UTwzOysrUSlrLndyaXRlX3NoaWZ0KDEsMCk7'@;
put 'cmV0dXJuIGZmKHthdXRvOjF9LGspLGsud3JpdGVfc2hpZnQoLTQsLTEpLGsud3JpdGVfc2hpZnQoLTQsLTEpLGE1KFMsayksay5zbGljZSgwLGsubCl9KHBlLGdlWyIhb3V0bGluZSJdKSksRnIoUSwiQnJ0V3NEaW0iLHhqKHllKSksZnVuY3Rpb24gcnooUyxSLGspe0ZyKFMsIkJydEJlZ2lu'@;
put 'V3NWaWV3cyIpLEZyKFMsIkJydEJlZ2luV3NWaWV3IixmdW5jdGlvbiBTOChTLFIsayl7bnVsbD09ayYmKGs9Ym4oMzApKTt2YXIgRz05MjQ7cmV0dXJuKCgoUnx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJihHfD0zMiksV3QoU1siIWdyaWRsaW5lcyJdKSYmKEcmPS01KSxXdCgoKChS'@;
put 'fHx7fSkuVmlld3N8fFtdKVswXXx8e30pLmdyaWQpJiYoRyY9LTUpLGsud3JpdGVfc2hpZnQoMixHKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hp'@;
put 'ZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMTAwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDQsMCksa30oUixrKSksUlsiIWZyZWV6ZSJdJiZGcihTLCJCcnRQYW5lIixmdW5jdGlvbiBVaihTKXt2YXIgUj1O'@;
put 'YShTWyIhZnJlZXplIl0pLGs9Ym4oMjkpO3JldHVybiBrLndyaXRlX3NoaWZ0KDgsUi5jLCJmIiksay53cml0ZV9zaGlmdCg4LFIuciwiZiIpLGsud3JpdGVfc2hpZnQoNCxSLnIpLGsud3JpdGVfc2hpZnQoNCxSLmMpLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDEsMyksa30o'@;
put 'UikpLFJbIiFzZWwiXSYmRnIoUywiQnJ0U2VsIixmdW5jdGlvbiBaaihTLFIpe3ZhciBrPWJuKDM2KSxHPVMuY2VsbDtpZighRyl7aWYoIVMucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO0c9cWkoU3MoUy5yYW5nZS5yZXBs'@;
put 'YWNlKC9ccy4qJC8sIiIpKS5zKX12YXIgUT0ic3RyaW5nIj09dHlwZW9mIEc/TmEoRyk6RztpZihSKXt2YXIgYWU9InN0cmluZyI9PXR5cGVvZiBSP05hKFIpOlI7ay53cml0ZV9zaGlmdCg0LFEucj49YWUuciYmUS5jPj1hZS5jPzA6US5yPj1hZS5yJiZRLmM8YWUuYz8yOlEucjxhZS5yJiZR'@;
put 'LmM+PWFlLmM/MTozKX1lbHNlIGsud3JpdGVfc2hpZnQoNCwzKTtyZXR1cm4gay53cml0ZV9zaGlmdCg0LFEuciksay53cml0ZV9zaGlmdCg0LFEuYyksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwxKSxrLndyaXRlX3NoaWZ0KDQsUS5yKSxrLndyaXRlX3NoaWZ0KDQsUS5y'@;
put 'KSxrLndyaXRlX3NoaWZ0KDQsUS5jKSxrLndyaXRlX3NoaWZ0KDQsUS5jKSxrfShSWyIhc2VsIl0sUlsiIWZyZWV6ZSJdKSksRnIoUywiQnJ0RW5kV3NWaWV3IiksRnIoUywiQnJ0RW5kV3NWaWV3cyIpfShRLGdlLGsuV29ya2Jvb2spLGZ1bmN0aW9uIHR6KFMsUil7IVJ8fCFSWyIhY29scyJd'@;
put 'fHwoRnIoUywiQnJ0QmVnaW5Db2xJbmZvcyIpLFJbIiFjb2xzIl0uZm9yRWFjaChmdW5jdGlvbihrLEcpe2smJkZyKFMsIkJydENvbEluZm8iLGZ1bmN0aW9uIFlqKFMsUixrKXtudWxsPT1rJiYoaz1ibigxOCkpO3ZhciBHPWM4KFMsUik7ay53cml0ZV9zaGlmdCgtNCxTKSxrLndyaXRlX3No'@;
put 'aWZ0KC00LFMpLGsud3JpdGVfc2hpZnQoNCwyNTYqKEcud2lkdGh8fDEwKSksay53cml0ZV9zaGlmdCg0LDApO3ZhciBRPTA7cmV0dXJuIFIuaGlkZGVuJiYoUXw9MSksIm51bWJlciI9PXR5cGVvZiBHLndpZHRoJiYoUXw9MiksUi5sZXZlbCYmKFF8PVIubGV2ZWw8PDgpLGsud3JpdGVfc2hp'@;
put 'ZnQoMixRKSxrfShHLGspKX0pLEZyKFMsIkJydEVuZENvbEluZm9zIikpfShRLGdlKSxmdW5jdGlvbiBxRChTLFIsayxHKXt2YXIgUT1hYShSWyIhcmVmIl18fCJBMSIpLGdlPSIiLHBlPVtdO0ZyKFMsIkJydEJlZ2luU2hlZXREYXRhIik7dmFyIHllPUFycmF5LmlzQXJyYXkoUiksUGU9US5l'@;
put 'LnI7UlsiIXJvd3MiXSYmKFBlPU1hdGgubWF4KFEuZS5yLFJbIiFyb3dzIl0ubGVuZ3RoLTEpKTtmb3IodmFyIE5lPVEucy5yO05lPD1QZTsrK05lKXtnZT1qaShOZSksU2ooUyxSLFEsTmUpO3ZhciBZZT0hMTtpZihOZTw9US5lLnIpZm9yKHZhciBldD1RLnMuYztldDw9US5lLmM7KytldCl7'@;
put 'TmU9PT1RLnMuciYmKHBlW2V0XT1BbyhldCkpO3ZhciBjdD15ZT8oUltOZV18fFtdKVtldF06UltwZVtldF0rZ2VdO1llPSEhY3QmJlFqKFMsY3QsTmUsZXQsRyxSLFllKX19RnIoUywiQnJ0RW5kU2hlZXREYXRhIil9KFEsZ2UsMCxSKSxmdW5jdGlvbiBSbmUoUyxSKXtSWyIhcHJvdGVjdCJd'@;
put 'JiZGcihTLCJCcnRTaGVldFByb3RlY3Rpb24iLGZ1bmN0aW9uIHBiKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDY2KSksUi53cml0ZV9zaGlmdCgyLFMucGFzc3dvcmQ/UHYoUy5wYXNzd29yZCk6MCksUi53cml0ZV9zaGlmdCg0LDEpLFtbIm9iamVjdHMiLCExXSxbInNjZW5hcmlvcyIs'@;
put 'ITFdLFsiZm9ybWF0Q2VsbHMiLCEwXSxbImZvcm1hdENvbHVtbnMiLCEwXSxbImZvcm1hdFJvd3MiLCEwXSxbImluc2VydENvbHVtbnMiLCEwXSxbImluc2VydFJvd3MiLCEwXSxbImluc2VydEh5cGVybGlua3MiLCEwXSxbImRlbGV0ZUNvbHVtbnMiLCEwXSxbImRlbGV0ZVJvd3MiLCEwXSxb'@;
put 'InNlbGVjdExvY2tlZENlbGxzIiwhMV0sWyJzb3J0IiwhMF0sWyJhdXRvRmlsdGVyIiwhMF0sWyJwaXZvdFRhYmxlcyIsITBdLFsic2VsZWN0VW5sb2NrZWRDZWxscyIsITFdXS5mb3JFYWNoKGZ1bmN0aW9uKGspe1Iud3JpdGVfc2hpZnQoNCxrWzFdP251bGw9PVNba1swXV18fFNba1swXV0/'@;
put 'MDoxOm51bGwhPVNba1swXV0mJlNba1swXV0/MDoxKX0pLFJ9KFJbIiFwcm90ZWN0Il0pKX0oUSxnZSksZnVuY3Rpb24gWEQoUyxSLGssRyl7aWYoUlsiIWF1dG9maWx0ZXIiXSl7dmFyIFE9UlsiIWF1dG9maWx0ZXIiXSxhZT0ic3RyaW5nIj09dHlwZW9mIFEucmVmP1EucmVmOmlvKFEucmVm'@;
put 'KTtrLldvcmtib29rfHwoay5Xb3JrYm9vaz17U2hlZXRzOltdfSksay5Xb3JrYm9vay5OYW1lc3x8KGsuV29ya2Jvb2suTmFtZXM9W10pO3ZhciBnZT1rLldvcmtib29rLk5hbWVzLHBlPVNzKGFlKTtwZS5zLnI9PXBlLmUuciYmKHBlLmUucj1TcyhSWyIhcmVmIl0pLmUucixhZT1pbyhwZSkp'@;
put 'O2Zvcih2YXIgeWU9MDt5ZTxnZS5sZW5ndGg7Kyt5ZSl7dmFyIFBlPWdlW3llXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09UGUuTmFtZSYmUGUuU2hlZXQ9PUcpe1BlLlJlZj0iJyIray5TaGVldE5hbWVzW0ddKyInISIrYWU7YnJlYWt9fXllPT1nZS5sZW5ndGgmJmdlLnB1c2goe05h'@;
put 'bWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6RyxSZWY6IiciK2suU2hlZXROYW1lc1tHXSsiJyEiK2FlfSksRnIoUywiQnJ0QmVnaW5BRmlsdGVyIixoZihhYShhZSkpKSxGcihTLCJCcnRFbmRBRmlsdGVyIil9fShRLGdlLGssUyksZnVuY3Rpb24gZXooUyxSKXshUnx8IVJbIiFt'@;
put 'ZXJnZXMiXXx8KEZyKFMsIkJydEJlZ2luTWVyZ2VDZWxscyIsZnVuY3Rpb24gWkQoUyxSKXtyZXR1cm4gbnVsbD09UiYmKFI9Ym4oNCkpLFIud3JpdGVfc2hpZnQoNCxTKSxSfShSWyIhbWVyZ2VzIl0ubGVuZ3RoKSksUlsiIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24oayl7RnIoUywiQnJ0'@;
put 'TWVyZ2VDZWxsIix3OChrKSl9KSxGcihTLCJCcnRFbmRNZXJnZUNlbGxzIikpfShRLGdlKSxmdW5jdGlvbiBveihTLFIpe2lmKFIpe0ZyKFMsIkJydEJlZ2luRFZhbHMiLGZ1bmN0aW9uIGdiKFMsUil7bnVsbD09UiYmKFI9Ym4oMTgpKSxSLndyaXRlX3NoaWZ0KDIsMCksUi53cml0ZV9zaGlm'@;
put 'dCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBrPTAsRz0wO0c8Uy5sZW5ndGg7KytHKSgoU1tHXXx8e30pLnJlZnx8e30pLnMmJlNbR10ucmVmLnMuYzwwfHwrK2s7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCxrKSxSfShSKSk7Zm9yKHZhciBrPTA7'@;
put 'azxSLmxlbmd0aDsrK2spKChSW2tdfHx7fSkucmVmfHx7fSkucyYmUltrXS5yZWYucy5jPDB8fEZyKFMsIkJydERWYWwiLEtEKFJba10pKTtGcihTLCJCcnRFbmREVmFscyIpfX0oUSxnZVsiIXZhbGlkYXRpb25zIl0pLGZ1bmN0aW9uIG1iKFMsUixrKXtSWyIhbGlua3MiXS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKEcpe2lmKEdbMV0uVGFyZ2V0KXt2YXIgUT1FcihrLC0xLEdbMV0uVGFyZ2V0LnJlcGxhY2UoLyMuKiQvLCIiKSxxby5ITElOSyk7RnIoUywiQnJ0SExpbmsiLGZ1bmN0aW9uIEM4KFMsUil7dmFyIGs9Ym4oNTArNCooU1sxXS5UYXJnZXQubGVuZ3RoKyhTWzFdLlRvb2x0aXB8fCIi'@;
put 'KS5sZW5ndGgpKTtoZih7czpOYShTWzBdKSxlOk5hKFNbMF0pfSxrKSxsNSgicklkIitSLGspO3ZhciBHPVNbMV0uVGFyZ2V0LmluZGV4T2YoIiMiKTtyZXR1cm4gUGMoKC0xPT1HPyIiOlNbMV0uVGFyZ2V0LnNsaWNlKEcrMSkpfHwiIixrKSxQYyhTWzFdLlRvb2x0aXB8fCIiLGspLFBjKCIi'@;
put 'LGspLGsuc2xpY2UoMCxrLmwpfShHLFEpKX19KSxkZWxldGUgUlsiIWxpbmtzIl19KFEsZ2UsRyksZ2VbIiFtYXJnaW5zIl0mJkZyKFEsIkJydE1hcmdpbnMiLGZ1bmN0aW9uICRqKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDQ4KSksWDMoUyksR0QuZm9yRWFjaChmdW5jdGlvbihrKXtS'@;
put 'dShTW2tdLFIpfSksUn0oZ2VbIiFtYXJnaW5zIl0pKSwoIVJ8fFIuaWdub3JlRUN8fG51bGw9PVIuaWdub3JlRUMpJiZmdW5jdGlvbiBVNShTLFIpeyFSfHwhUlsiIXJlZiJdfHwoRnIoUywiQnJ0QmVnaW5DZWxsSWdub3JlRUNzIiksRnIoUywiQnJ0Q2VsbElnbm9yZUVDIixmdW5jdGlvbiBL'@;
put 'aihTKXt2YXIgUj1ibigyNCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCw0KSxSLndyaXRlX3NoaWZ0KDQsMSksaGYoUyxSKSxSfShhYShSWyIhcmVmIl0pKSksRnIoUywiQnJ0RW5kQ2VsbElnbm9yZUVDcyIpKX0oUSxnZSksZnVuY3Rpb24gbnooUyxSLGssRyl7aWYoUlsiIWNvbW1lbnRzIl0u'@;
put 'bGVuZ3RoPjApe3ZhciBRPUVyKEcsLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhrKzEpKyIudm1sIixxby5WTUwpO0ZyKFMsIkJydExlZ2FjeURyYXdpbmciLGw1KCJySWQiK1EpKSxSWyIhbGVnYWN5Il09UX19KFEsZ2UsUyxHKSxGcihRLCJCcnRFbmRTaGVldCIpLFEuZW5kKCl9ZnVu'@;
put 'Y3Rpb24gTTgoUyl7dmFyIEcsUj1bXSxrPVMubWF0Y2goL148YzpudW1DYWNoZT4vKTsoUy5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqKSI+KC4qPyk8XC9jOnB0Pi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGFlKXt2YXIgZ2U9YWUubWF0Y2goLzxjOnB0IGlkeD0iKFxkKj8pIj48Yzp2Pigu'@;
put 'Kik8XC9jOnY+PFwvYzpwdD4vKTtnZSYmKFJbK2dlWzFdXT1rPytnZVsyXTpnZVsyXSl9KTt2YXIgUT1RcigoUy5tYXRjaCgvPGM6Zm9ybWF0Q29kZT4oW1xzXFNdKj8pPFwvYzpmb3JtYXRDb2RlPi8pfHxbIiIsIkdlbmVyYWwiXSlbMV0pO3JldHVybihTLm1hdGNoKC88YzpmPiguKj8pPFwv'@;
put 'YzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGFlKXtHPWFlLnJlcGxhY2UoLzwuKj8+L2csIiIpfSksW1IsUSxHXX1xby5DSEFSVD0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydCIscW8uQ0hBUlRF'@;
put 'WD0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAxNC9yZWxhdGlvbnNoaXBzL2NoYXJ0RXgiO3ZhciBzej0vPCg/Olx3KzopP2NoYXJ0PihbXHNcU10qPyk8XC8oPzpcdys6KT9jaGFydD4vLFJTPS88KD86XHcrOik/cGxvdEFyZWE+KFtcc1xTXSo/KTxcLyg/Olx3Kzop'@;
put 'P3Bsb3RBcmVhPi8sTG5lPS88KD86XHcrOik/bGVnZW5kPihbXHNcU10qPyk8XC8oPzpcdys6KT9sZWdlbmQ+LyxKRD0vPCg/Olx3KzopP3RpdGxlPihbXHNcU10qPyk8XC8oPzpcdys6KT90aXRsZT4vO2Z1bmN0aW9uIGIyKFMsUixrLEcsUSxhZSxnZSxwZSl7dmFyIHllPWFlfHx7IiF0eXBl'@;
put 'IjoiY2hhcnQifTtpZighUylyZXR1cm4gYWU7Z2UmJmdlLkFuY2hvciYmKHllWyIhcG9zIl09UjUoZ2UuQW5jaG9yLHBlKSx5ZVsiIXBvc1R5cGUiXT1nZS5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSx5ZVsiIWFic3BvcyJdPVI1KGdlLkFuY2hvcixwZSkseWVbIiFyZWxwb3Mi'@;
put 'XT1BQyhnZS5BbmNob3IscGUpKSx5ZVsiIXBsb3QiXT1bXTt2YXIgUGU9IiIsTmU9IiIsWWU9Uy5tYXRjaChzeik7WWU/KFBlPVMuc2xpY2UoMCxZZS5pbmRleCksTmU9Uy5zbGljZShZZS5pbmRleCtZZVswXS5sZW5ndGgpKTpQZT1OZT1TO3ZhciBldD1bXSxjdD1QZS5tYXRjaCgvPGM6bGFu'@;
put 'Zy4qPz4vKXx8Uy5tYXRjaCgvPGM6bGFuZy4qPz4vKXx8TmUubWF0Y2goLzxjOmxhbmcuKj8+Lyk7cmV0dXJuIGN0JiYoeWVbIiFsYW5nIl09KHZyKGN0WzBdKXx8e30pLnZhbHx8ImVuLVVTIiksWWUmJigoZXQ9WWVbMV0ubWF0Y2goSkQpKSYmZnVuY3Rpb24gYXooUyxSKXt2YXIgaz0iIjtT'@;
put 'Lm1hdGNoKC88YzpyaWNoPi8pJiZTLnJlcGxhY2UoLzxhOnQ+KFtcc1xTXSo/KTxcL2E6dD4vZyxmdW5jdGlvbihHLFEpe2srPVF9KSxSWyIhdGl0bGUiXT1rfHwiQ2hhcnQgVGl0bGUifShldFsxXSx5ZSksZnVuY3Rpb24gT25lKFMsUil7aWYoUyl7dmFyIGs9MCxHPTAsUT0iQSIsYWU9e3M6'@;
put 'e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX07Uy5yZXBsYWNlKFFELGZ1bmN0aW9uKGdlLHBlKXt2YXIgeWU9e3Q6cGUsYzprLHc6MCxzZXI6W119LFBlPVtdLE5lPShnZS5tYXRjaCgvPGM6c2VyLyl8fFtdKS5pbmRleCxZZT1OZT9nZS5zbGljZSgwLE5lKTpnZTsic2NhdHRlciI9PXBlJiYo'@;
put 'UGU9Z2UubWF0Y2goLzxjOnNjYXR0ZXJTdHlsZShbXlwvPl0qKVwvPi9tKSkmJnZyKFBlWzBdKSwiYmFyIj09cGUmJihQZT1nZS5tYXRjaCgvPGM6YmFyRGlyKFteXC8+XSopXC8+L20pKSYmKHllLmJhckRpcj0iYmFyIj09dnIoUGVbMF0pLnZhbD8iaCI6InYiKSwoUGU9WWUubWF0Y2goLzxj'@;
put 'Omdyb3VwaW5nKFteXC8+XSopXC8+L20pKSYmKHllLmdyb3VwaW5nPXZyKFBlWzBdKS52YWx8fCJzdGFuZGFyZCIpLChnZS5tYXRjaChseil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGN0KXt2YXIgRXQ9W10sb3Q9e30sYnQ9W107aWYoY3QubWF0Y2goLzxjOnR4Pi8pKXt2YXIganQ9TTgoKGN0'@;
put 'Lm1hdGNoKC88Yzp0eD4oW1xzXFNdKj8pPFwvYzp0eD4vKXx8W10pWzFdfHwiIil8fFtdO2p0WzBdJiZqdFswXVswXSYmKG90Lm5hbWU9anRbMF1bMF0pLGp0WzJdJiYob3QubmFtZXJlZj1qdFsyXSl9WyJ4VmFsIiwieVZhbCIsImNhdCIsInZhbCIsImJ1YmJsZVNpemUiXS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKGt0KXt2YXIgS3QsT3Q9Y3QubWF0Y2gobmV3IFJlZ0V4cCgiPGM6IitrdCsiPltcXHNcXFNdKj88XFwvYzoiK2t0KyI+IiwiZ20iKSk7T3QmJigoT3RbMF0ubWF0Y2goLzxjOmY+KC4qPyk8XC9jOmY+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oVG4pe0t0PVRuLnJlcGxhY2Uo'@;
put 'LzwuKj8+L2csIiIpfSksKE90WzBdLm1hdGNoKC88YzooPzpcdyopQ2FjaGU+W1xzXFNdKj88XC9jOig/Olx3KilDYWNoZT4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihUbil7dmFyIHJyPU04KFRuKTthZS5zLnI9YWUucy5jPTAsYWUuZS5jPWssUT1BbyhrKSxyclswXS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKFNuLGxyKXtSW1EramkobHIpXT17dDoibnVtYmVyIj09dHlwZW9mIFNuPyJuIjoicyIsdjpTbix6OnJyWzFdfSxHPWxyfSksYWUuZS5yPEcmJihhZS5lLnI9RyksKytrLHllLncrKyxFdC5wdXNoKGt0KSwocnJbMl18fEt0KSYmYnQucHVzaChyclsyXXx8S3QpLCJ2YWwiPT1rdCYm'@;
put 'KG90Lno9cnJbMV18fCJHZW5lcmFsIil9KSl9KSwoUGU9Z2UubWF0Y2goLzxjOnNtb290aChbXlwvPl0qKVwvPi9tKSkmJihvdC5zbW9vdGg9bnVsbD09dnIoUGVbMF0pLnZhbHx8dGkodnIoUGVbMF0pLnZhbCkpLG90LmNvbHM9RXQsb3QucmFuZ2VzPWJ0LHllLnNlci5wdXNoKG90KX0pLCJk'@;
put 'b3VnaG51dCI9PXBlJiYoUGU9Z2UubWF0Y2goLzxjOmhvbGVTaXplKFteXC8+XSopXC8+L20pKSYmKHllLmhvbGU9KHZyKFBlWzBdKS52YWx8fDEwKS8xMDApLFJbIiFwbG90Il0ucHVzaCh5ZSl9KSxrPjAmJihSWyIhcmVmIl09aW8oYWUpKX19KChZZVsxXS5tYXRjaChSUyl8fFtdKVsxXSx5'@;
put 'ZSksbnVsbCE9KGV0PVllWzFdLm1hdGNoKExuZSkpJiZmdW5jdGlvbiBFYShTLFIpe3ZhciBrO1JbIiFsZWdlbmQiXT17cG9zOiJyIn0sKGs9Uy5tYXRjaCgvPGM6bGVnZW5kUG9zKFteXC8+XSopXC8+L20pKSYmKFJbIiFsZWdlbmQiXS5wb3M9dnIoa1swXSkudmFsfHwiciIpfShldFswXSx5'@;
put 'ZSkpLHllfXZhciBRRD0vPGM6KCg/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3VnaG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpPylDaGFydFtePl0qPihbXHNcU10qPyk8XC9jOig/OmFyZWF8bGluZXxzdG9ja3xyYWRhcnxzY2F0dGVyfHBpZXxkb3Vn'@;
put 'aG51dHxiYXJ8b2ZQaWV8c3VyZmFjZXxidWJibGUpKD86M0QpP0NoYXJ0Pi9nbSxsej0vPGM6c2VyPihbXHNcU10qPyk8XC9jOnNlcj4vZ207cW8uQ1M9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnRzaGVl'@;
put 'dCI7dmFyIFlvPVByKCJjaGFydHNoZWV0IixudWxsLHt4bWxuczpZaS5tYWluWzBdLCJ4bWxuczpyIjpZaS5yfSk7ZnVuY3Rpb24gTFMoUyxSLGssRyl7dmFyIFE9W0lpLFlvXTtyZXR1cm4gUS5wdXNoKCI8c2hlZXRQci8+IiksUS5wdXNoKCc8c2hlZXRWaWV3cz48c2hlZXRWaWV3IHpvb21T'@;
put 'Y2FsZT0iMTAwIiB3b3JrYm9va1ZpZXdJZD0iMCIgem9vbVRvRml0PSIxIi8+PC9zaGVldFZpZXdzPicpLFFbUS5sZW5ndGhdPVByKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZDEifSksRXIoRywtMSwiLi4vZHJhd2luZ3MvZHJhd2luZyIrKFMrMSkrIi54bWwiLHFvLkRSQVcpLFEubGVu'@;
put 'Z3RoPjImJihRW1EubGVuZ3RoXT0iPC9jaGFydHNoZWV0PiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfWZ1bmN0aW9uIE9TKCl7dmFyIFM9dmkoKTtyZXR1cm4gRnIoUywiQnJ0QmVnaW5TaGVldCIpLEZyKFMsIkJydEVuZFNoZWV0IiksUy5lbmQoKX12YXIgdmI9'@;
put 'W1siYWxsb3dSZWZyZXNoUXVlcnkiLCExLCJib29sIl0sWyJhdXRvQ29tcHJlc3NQaWN0dXJlcyIsITAsImJvb2wiXSxbImJhY2t1cEZpbGUiLCExLCJib29sIl0sWyJjaGVja0NvbXBhdGliaWxpdHkiLCExLCJib29sIl0sWyJDb2RlTmFtZSIsIiJdLFsiZGF0ZTE5MDQiLCExLCJib29sIl0s'@;
put 'WyJkZWZhdWx0VGhlbWVWZXJzaW9uIiwwLCJpbnQiXSxbImZpbHRlclByaXZhY3kiLCExLCJib29sIl0sWyJoaWRlUGl2b3RGaWVsZExpc3QiLCExLCJib29sIl0sWyJwcm9tcHRlZFNvbHV0aW9ucyIsITEsImJvb2wiXSxbInB1Ymxpc2hJdGVtcyIsITEsImJvb2wiXSxbInJlZnJlc2hBbGxD'@;
put 'b25uZWN0aW9ucyIsITEsImJvb2wiXSxbInNhdmVFeHRlcm5hbExpbmtWYWx1ZXMiLCEwLCJib29sIl0sWyJzaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcyIsITAsImJvb2wiXSxbInNob3dJbmtBbm5vdGF0aW9uIiwhMCwiYm9vbCJdLFsic2hvd09iamVjdHMiLCJhbGwiXSxbInNob3dQaXZv'@;
put 'dENoYXJ0RmlsdGVyIiwhMSwiYm9vbCJdLFsidXBkYXRlTGlua3MiLCJ1c2VyU2V0Il1dLGVJPVtbImFjdGl2ZVRhYiIsMCwiaW50Il0sWyJhdXRvRmlsdGVyRGF0ZUdyb3VwaW5nIiwhMCwiYm9vbCJdLFsiZmlyc3RTaGVldCIsMCwiaW50Il0sWyJtaW5pbWl6ZWQiLCExLCJib29sIl0sWyJz'@;
put 'aG93SG9yaXpvbnRhbFNjcm9sbCIsITAsImJvb2wiXSxbInNob3dTaGVldFRhYnMiLCEwLCJib29sIl0sWyJzaG93VmVydGljYWxTY3JvbGwiLCEwLCJib29sIl0sWyJ0YWJSYXRpbyIsNjAwLCJpbnQiXSxbInZpc2liaWxpdHkiLCJ2aXNpYmxlIl1dLHRJPVtdLGh6PVtbImNhbGNDb21wbGV0'@;
put 'ZWQiLCJ0cnVlIl0sWyJjYWxjTW9kZSIsImF1dG8iXSxbImNhbGNPblNhdmUiLCJ0cnVlIl0sWyJjb25jdXJyZW50Q2FsYyIsInRydWUiXSxbImZ1bGxDYWxjT25Mb2FkIiwiZmFsc2UiXSxbImZ1bGxQcmVjaXNpb24iLCJ0cnVlIl0sWyJpdGVyYXRlIiwiZmFsc2UiXSxbIml0ZXJhdGVDb3Vu'@;
put 'dCIsIjEwMCJdLFsiaXRlcmF0ZURlbHRhIiwiMC4wMDEiXSxbInJlZk1vZGUiLCJBMSJdXTtmdW5jdGlvbiBuSShTLFIpe2Zvcih2YXIgaz0wO2shPVMubGVuZ3RoOysraylmb3IodmFyIEc9U1trXSxRPTA7USE9Ui5sZW5ndGg7KytRKXt2YXIgYWU9UltRXTtpZihudWxsPT1HW2FlWzBdXSlH'@;
put 'W2FlWzBdXT1hZVsxXTtlbHNlIHN3aXRjaChhZVsyXSl7Y2FzZSJib29sIjoic3RyaW5nIj09dHlwZW9mIEdbYWVbMF1dJiYoR1thZVswXV09dGkoR1thZVswXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBHW2FlWzBdXSYmKEdbYWVbMF1dPXBhcnNlSW50KEdbYWVbMF1d'@;
put 'LDEwKSl9fX1mdW5jdGlvbiBRMyhTLFIpe2Zvcih2YXIgaz0wO2shPVIubGVuZ3RoOysrayl7dmFyIEc9UltrXTtpZihudWxsPT1TW0dbMF1dKVNbR1swXV09R1sxXTtlbHNlIHN3aXRjaChHWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgU1tHWzBdXSYmKFNbR1swXV09dGkoU1tH'@;
put 'WzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIFNbR1swXV0mJihTW0dbMF1dPXBhcnNlSW50KFNbR1swXV0sMTApKX19fWZ1bmN0aW9uIFBTKFMpe1EzKFMuV0JQcm9wcyx2YiksUTMoUy5DYWxjUHIsaHopLG5JKFMuV0JWaWV3LGVJKSxuSShTLlNoZWV0cyx0SSksbDgu'@;
put 'ZGF0ZTE5MDQ9dGkoUy5XQlByb3BzLmRhdGUxOTA0KX12YXIgZno9Il1bKj8vXFwiLnNwbGl0KCIiKTtmdW5jdGlvbiBiYihTLFIpe2lmKFMubGVuZ3RoPjMxKXtpZihSKXJldHVybiExO3Rocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZXMgY2Fubm90IGV4Y2VlZCAzMSBjaGFycyIpfXZhciBr'@;
put 'PSEwO3JldHVybiBmei5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKC0xIT1TLmluZGV4T2YoRykpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiU2hlZXQgbmFtZSBjYW5ub3QgY29udGFpbiA6IFxcIC8gPyAqIFsgXSIpO2s9ITF9fSksa312YXIgeDg9Lzxcdys6d29ya2Jvb2svLG9JPVByKCJ3b3Jr'@;
put 'Ym9vayIsbnVsbCx7eG1sbnM6WWkubWFpblswXSwieG1sbnM6ciI6WWkucn0pO2Z1bmN0aW9uIEU4KFMsUil7dmFyIGs9Unx8e30sRz1bSWldO0dbRy5sZW5ndGhdPW9JO3ZhciBRPVMuV29ya2Jvb2smJihTLldvcmtib29rLk5hbWVzfHxbXSkubGVuZ3RoPjA7Uy5Xb3JrYm9vayYmUy5Xb3Jr'@;
put 'Ym9vay5Nb2RpZnkmJihHW0cubGVuZ3RoXT1mdW5jdGlvbiBlcChTKXt2YXIgUj17fTtyZXR1cm4gUy53YXJuJiYoUi5yZWFkT25seVJlY29tbWVuZGVkPTEpLFIudXNlck5hbWU9Uy51c2VyfHwiU2hlZXQgSlMiLFMuZW5jcnlwdGlvbiYmKFMuZW5jcnlwdGlvbi5hbGdvJiYoUi5hbGdvcml0'@;
put 'aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdvKSxTLmVuY3J5cHRpb24uaGFzaCYmKFIuaGFzaFZhbHVlPVMuZW5jcnlwdGlvbi5oYXNoKSxTLmVuY3J5cHRpb24uc2FsdCYmKFIuc2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0KSxTLmVuY3J5cHRpb24uc3BpbiYmKFIuc3BpbkNvdW50PVMuZW5j'@;
put 'cnlwdGlvbi5zcGluKSksUHIoImZpbGVTaGFyaW5nIixudWxsLFIpfShTLldvcmtib29rLk1vZGlmeSkpO3ZhciBhZT17Y29kZU5hbWU6IlRoaXNXb3JrYm9vayJ9O1MuV29ya2Jvb2smJlMuV29ya2Jvb2suV0JQcm9wcyYmKHZiLmZvckVhY2goZnVuY3Rpb24oUGUpe251bGwhPVMuV29ya2Jv'@;
put 'b2suV0JQcm9wc1tQZVswXV0mJlMuV29ya2Jvb2suV0JQcm9wc1tQZVswXV0hPVBlWzFdJiYoYWVbUGVbMF1dPVMuV29ya2Jvb2suV0JQcm9wc1tQZVswXV0pfSksUy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lJiYoYWUuY29kZU5hbWU9Uy5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lLGRl'@;
put 'bGV0ZSBhZS5Db2RlTmFtZSkpLEdbRy5sZW5ndGhdPVByKCJ3b3JrYm9va1ByIixudWxsLGFlKSxTLldvcmtib29rJiZTLldvcmtib29rLlByb3RlY3Rpb24mJihHW0cubGVuZ3RoXT1mdW5jdGlvbiB5YihTKXt2YXIgUj17fTtyZXR1cm4gUy5sb2NrU3RydWN0dXJlJiYoUi5sb2NrU3RydWN0'@;
put 'dXJlPTEpLFMubG9ja1dpbmRvd3MmJihSLmxvY2tXaW5kb3dzPTEpLFMuZW5jcnlwdGlvbiYmKFMuZW5jcnlwdGlvbi5hbGdvJiYoUi53b3JrYm9va0FsZ29yaXRobU5hbWU9Uy5lbmNyeXB0aW9uLmFsZ28pLFMuZW5jcnlwdGlvbi5oYXNoJiYoUi53b3JrYm9va0hhc2hWYWx1ZT1TLmVuY3J5'@;
put 'cHRpb24uaGFzaCksUy5lbmNyeXB0aW9uLnNhbHQmJihSLndvcmtib29rU2FsdFZhbHVlPVMuZW5jcnlwdGlvbi5zYWx0KSxTLmVuY3J5cHRpb24uc3BpbiYmKFIud29ya2Jvb2tTcGluQ291bnQ9Uy5lbmNyeXB0aW9uLnNwaW4pKSxQcigid29ya2Jvb2tQcm90ZWN0aW9uIixudWxsLFIpfShT'@;
put 'Lldvcmtib29rLlByb3RlY3Rpb24pKTt2YXIgZ2U9Uy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5TaGVldHN8fFtdLHBlPTA7aWYoZ2UmJmdlWzBdJiZnZVswXS5IaWRkZW4pe2ZvcihHW0cubGVuZ3RoXT0iPGJvb2tWaWV3cz4iLHBlPTA7cGUhPVMuU2hlZXROYW1lcy5sZW5ndGgmJmdlW3BlXSYm'@;
put 'Z2VbcGVdLkhpZGRlbjsrK3BlKTtwZT09Uy5TaGVldE5hbWVzLmxlbmd0aCYmKHBlPTApLEdbRy5sZW5ndGhdPSc8d29ya2Jvb2tWaWV3IGZpcnN0U2hlZXQ9IicrcGUrJyIgYWN0aXZlVGFiPSInK3BlKyciLz4nLEdbRy5sZW5ndGhdPSI8L2Jvb2tWaWV3cz4ifWZvcihHW0cubGVuZ3RoXT0i'@;
put 'PHNoZWV0cz4iLHBlPTA7cGUhPVMuU2hlZXROYW1lcy5sZW5ndGg7KytwZSl7dmFyIHllPXtuYW1lOkxyKFMuU2hlZXROYW1lc1twZV0uc2xpY2UoMCwzMSkpfTtpZih5ZS5zaGVldElkPSIiKyhwZSsxKSx5ZVsicjppZCJdPSJySWQiKyhwZSsxKSxnZVtwZV0pc3dpdGNoKGdlW3BlXS5IaWRk'@;
put 'ZW4pe2Nhc2UgMTp5ZS5zdGF0ZT0iaGlkZGVuIjticmVhaztjYXNlIDI6eWUuc3RhdGU9InZlcnlIaWRkZW4ifUdbRy5sZW5ndGhdPVByKCJzaGVldCIsbnVsbCx5ZSl9cmV0dXJuIEdbRy5sZW5ndGhdPSI8L3NoZWV0cz4iLFMuRXh0ZXJuYWxXQiYmUy5FeHRlcm5hbFdCLmxlbmd0aCYmKEdb'@;
put 'Ry5sZW5ndGhdPSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiIsKFMuRXh0ZXJuYWxXQnx8W10pLmZvckVhY2goZnVuY3Rpb24oUGUsTmUpe3ZhciBZZT1FcihrLndicmVscywtMSwiZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhOZSsxKSsiLnhtbCIscW8uWExJTkspO0dbRy5sZW5ndGhdPSc8'@;
put 'ZXh0ZXJuYWxSZWZlcmVuY2UgcjppZD0icklkJytZZSsnIi8+J30pLEdbRy5sZW5ndGhdPSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iKSxRJiYoR1tHLmxlbmd0aF09IjxkZWZpbmVkTmFtZXM+IixTLldvcmtib29rJiZTLldvcmtib29rLk5hbWVzJiZTLldvcmtib29rLk5hbWVzLmZvckVhY2go'@;
put 'ZnVuY3Rpb24oUGUpe3ZhciBOZT17bmFtZTpQZS5OYW1lfTtQZS5Db21tZW50JiYoTmUuY29tbWVudD1QZS5Db21tZW50KSxudWxsIT1QZS5TaGVldCYmKE5lLmxvY2FsU2hlZXRJZD0iIitQZS5TaGVldCksUGUuSGlkZGVuJiYoTmUuaGlkZGVuPSIxIiksUGUuUmVmJiYoR1tHLmxlbmd0aF09'@;
put 'UHIoImRlZmluZWROYW1lIixMcihQZS5SZWYpLE5lKSl9KSxHW0cubGVuZ3RoXT0iPC9kZWZpbmVkTmFtZXM+IiksayYmay5waXZvdHMmJmsucGl2b3RzLmxlbmd0aD4wJiYoRy5wdXNoKCI8cGl2b3RDYWNoZXM+Iiksay5waXZvdHMuZm9yRWFjaChmdW5jdGlvbihQZSxOZSl7Ry5wdXNoKCc8'@;
put 'cGl2b3RDYWNoZSBjYWNoZUlkPSInKyhOZSsxKSsnIiByOmlkPSJySWQnK1BlWzJdKyciLz4nKX0pLEcucHVzaCgiPC9waXZvdENhY2hlcz4iKSksRy5sZW5ndGg+MiYmKEdbRy5sZW5ndGhdPSI8L3dvcmtib29rPiIsR1sxXT1HWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxHLmpvaW4oIiIpfWZ1'@;
put 'bmN0aW9uIGd6KFMsUil7cmV0dXJuIFJ8fChSPWJuKDEyNykpLFIud3JpdGVfc2hpZnQoNCxTLkhpZGRlbiksUi53cml0ZV9zaGlmdCg0LFMuaVRhYklEKSxsNShTLnN0clJlbElELFIpLFBjKFMubmFtZS5zbGljZSgwLDMxKSxSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un1mdW5j'@;
put 'dGlvbiB0cChTLFIpe3ZhciBrPXt9O3JldHVybiBTLnJlYWRfc2hpZnQoNCksay5BcmNoSUQ9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9Ui04LGt9ZnVuY3Rpb24gd2IoUyxSKXt2YXIgaz12aSgpO3JldHVybiBGcihrLCJCcnRCZWdpbkJvb2siKSxGcihrLCJCcnRGaWxlVmVyc2lvbiIsZnVuY3Rp'@;
put 'b24gc0koUyxSKXtSfHwoUj1ibigxMjcpKTtmb3IodmFyIGs9MDs0IT1rOysraylSLndyaXRlX3NoaWZ0KDQsMCk7cmV0dXJuIFBjKCJTaGVldEpTIixSKSxQYyh3LnZlcnNpb24sUiksUGMody52ZXJzaW9uLFIpLFBjKCI3MjYyIixSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un0o'@;
put 'KSksRnIoaywiQnJ0V2JQcm9wIixmdW5jdGlvbiBhSShTLFIpe1J8fChSPWJuKDcyKSk7dmFyIGs9MDtyZXR1cm4gUyYmUy5maWx0ZXJQcml2YWN5JiYoa3w9OCksUi53cml0ZV9zaGlmdCg0LGspLFIud3JpdGVfc2hpZnQoNCwwKSxhNShTJiZTLkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIixS'@;
put 'KSxSLnNsaWNlKDAsUi5sKX0oUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5XQlByb3BzfHxudWxsKSksZnVuY3Rpb24gbXooUyxSKXtpZihSLldvcmtib29rJiZSLldvcmtib29rLlNoZWV0cyl7Zm9yKHZhciBrPVIuV29ya2Jvb2suU2hlZXRzLEc9MCxRPS0xLGFlPS0xO0c8ay5sZW5ndGg7KytH'@;
put 'KSFrW0ddfHwha1tHXS5IaWRkZW4mJi0xPT1RP1E9RzoxPT1rW0ddLkhpZGRlbiYmLTE9PWFlJiYoYWU9Ryk7YWU+UXx8KEZyKFMsIkJydEJlZ2luQm9va1ZpZXdzIiksRnIoUywiQnJ0Qm9va1ZpZXciLGZ1bmN0aW9uIGxJKFMsUil7cmV0dXJuIFJ8fChSPWJuKDI5KSksUi53cml0ZV9zaGlm'@;
put 'dCgtNCwwKSxSLndyaXRlX3NoaWZ0KC00LDQ2MCksUi53cml0ZV9zaGlmdCg0LDI4ODAwKSxSLndyaXRlX3NoaWZ0KDQsMTc2MDApLFIud3JpdGVfc2hpZnQoNCw1MDApLFIud3JpdGVfc2hpZnQoNCxTKSxSLndyaXRlX3NoaWZ0KDQsUyksUi53cml0ZV9zaGlmdCgxLDEyMCksUi5sZW5ndGg+'@;
put 'Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KFEpKSxGcihTLCJCcnRFbmRCb29rVmlld3MiKSl9fShrLFMpLGZ1bmN0aW9uIF9iKFMsUil7RnIoUywiQnJ0QmVnaW5CdW5kbGVTaHMiKTtmb3IodmFyIGs9MDtrIT1SLlNoZWV0TmFtZXMubGVuZ3RoOysraylGcihTLCJCcnRCdW5kbGVTaCIsZ3ooe0hp'@;
put 'ZGRlbjpSLldvcmtib29rJiZSLldvcmtib29rLlNoZWV0cyYmUi5Xb3JrYm9vay5TaGVldHNba10mJlIuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbnx8MCxpVGFiSUQ6aysxLHN0clJlbElEOiJySWQiKyhrKzEpLG5hbWU6Ui5TaGVldE5hbWVzW2tdfSkpO0ZyKFMsIkJydEVuZEJ1bmRsZVNo'@;
put 'cyIpfShrLFMpLEZyKGssIkJydEVuZEJvb2siKSxrLmVuZCgpfWZ1bmN0aW9uIGNJKFMsUixrLEcsUSl7cmV0dXJuKCIuYmluIj09PVIuc2xpY2UoLTQpP1o1OkhEKShTLGssRyxRKX1mdW5jdGlvbiB1SShTLFIsayxHLFEpe3JldHVybigiLmJpbiI9PT1SLnNsaWNlKC00KT9PUzpMUykoUyxr'@;
put 'LEcsUSl9ZnVuY3Rpb24gZEkoUyxSLGspe3JldHVybigiLmJpbiI9PT1SLnNsaWNlKC00KT9sazpEdikoUyxrKX1mdW5jdGlvbiBUeihTLFIsayl7cmV0dXJuKCIuYmluIj09PVIuc2xpY2UoLTQpP05DOkhDKShTLGspfXZhciBCUz0vKFtcdzpdKyk9KCg/OiIpKFteIl0qKSg/OiIpfCg/Oicp'@;
put 'KFteJ10qKSg/OicpKS9nLENiPS8oW1x3Ol0rKT0oKD86IikoPzpbXiJdKikoPzoiKXwoPzonKSg/OlteJ10qKSg/OicpKS87ZnVuY3Rpb24gRjAoUyxSKXt2YXIgaz1TLnNwbGl0KC9ccysvKSxHPVtdO2lmKFJ8fChHWzBdPWtbMF0pLDE9PT1rLmxlbmd0aClyZXR1cm4gRzt2YXIgYWUsZ2Us'@;
put 'eWUsUT1TLm1hdGNoKEJTKTtpZihRKWZvcih5ZT0wO3llIT1RLmxlbmd0aDsrK3llKS0xPT09KGdlPShhZT1RW3llXS5tYXRjaChDYikpWzFdLmluZGV4T2YoIjoiKSk/R1thZVsxXV09YWVbMl0uc2xpY2UoMSxhZVsyXS5sZW5ndGgtMSk6R1sieG1sbnM6Ij09PWFlWzFdLnNsaWNlKDAsNik/'@;
put 'InhtbG5zIithZVsxXS5zbGljZSg2KTphZVsxXS5zbGljZShnZSsxKV09YWVbMl0uc2xpY2UoMSxhZVsyXS5sZW5ndGgtMSk7cmV0dXJuIEd9ZnVuY3Rpb24galMoUyl7dmFyIGs9e307aWYoMT09PVMuc3BsaXQoL1xzKy8pLmxlbmd0aClyZXR1cm4gazt2YXIgUSxhZSxwZSxHPVMubWF0Y2go'@;
put 'QlMpO2lmKEcpZm9yKHBlPTA7cGUhPUcubGVuZ3RoOysrcGUpLTE9PT0oYWU9KFE9R1twZV0ubWF0Y2goQ2IpKVsxXS5pbmRleE9mKCI6IikpP2tbUVsxXV09UVsyXS5zbGljZSgxLFFbMl0ubGVuZ3RoLTEpOmtbInhtbG5zOiI9PT1RWzFdLnNsaWNlKDAsNik/InhtbG5zIitRWzFdLnNsaWNl'@;
put 'KDYpOlFbMV0uc2xpY2UoYWUrMSldPVFbMl0uc2xpY2UoMSxRWzJdLmxlbmd0aC0xKTtyZXR1cm4ga31mdW5jdGlvbiBBeihTKXt2YXIgUj17fTtpZihTLkRlZmF1bHRSb3dIZWlnaHQpe3ZhciBrPXtocHg6NCpwYXJzZUludChTLkRlZmF1bHRSb3dIZWlnaHQpLzN9O1Z2KGspLFIucm93PWt9'@;
put 'aWYoUy5EZWZhdWx0Q29sV2lkdGgpe3ZhciBHPXt3cHg6NCpwYXJzZUludChTLkRlZmF1bHRDb2xXaWR0aCkvM307UTAoRyksUi5jb2w9R31yZXR1cm4gUn1mdW5jdGlvbiBEeihTLFIsayxHKXt2YXIgUT1HO3N3aXRjaCgoa1swXS5tYXRjaCgvZHQ6ZHQ9IihbXHcuXSspIi8pfHxbIiIsIiJd'@;
put 'KVsxXSl7Y2FzZSJib29sZWFuIjpRPXRpKEcpO2JyZWFrO2Nhc2UiaTIiOmNhc2UiaW50IjpRPXBhcnNlSW50KEcsMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UiZmxvYXQiOlE9cGFyc2VGbG9hdChHKTticmVhaztjYXNlImRhdGUiOmNhc2UiZGF0ZVRpbWUudHoiOlE9SGUoRyk7YnJlYWs7Y2Fz'@;
put 'ZSJpOCI6Y2FzZSJzdHJpbmciOmNhc2UiZml4ZWQiOmNhc2UidXVpZCI6Y2FzZSJiaW4uYmFzZTY0IjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiYmFkIGN1c3Rwcm9wOiIra1swXSl9U1tRcihSKV09UX12YXIgU2I9ezA6Ik5vbmUiLDE6IlNpbmdsZSIsMjoiRG91YmxlIiwzMzoi'@;
put 'U2luZ2xlQWNjb3VudGluZyIsMzQ6IkRvdWJsZUFjY291bnRpbmcifSxoST1rZShTYik7ZnVuY3Rpb24gVVMoUyxSLGssRyl7aWYoRy5jZWxsU3R5bGVzKXtpZihrPWsucmVwbGFjZSgvXHMrL2csIiAiKSxSLkludGVyaW9yKXt2YXIgUT1SLkludGVyaW9yO1EuUGF0dGVybiYmKFEucGF0dGVy'@;
put 'blR5cGU9bUNbUS5QYXR0ZXJuXXx8US5QYXR0ZXJuKSxRLkNvbG9yJiZRLkNvbG9yLm1hdGNoKC8jWzAtOUEtRmEtZl0qLykmJihRLmZnQ29sb3I9e3JnYjpRLkNvbG9yLnNsaWNlKDEpfSl9IWZ1bmN0aW9uIEl6KFMpe1MuQm9yZGVycyYmKFMuQm9yZGVycy5mb3JFYWNoKGZ1bmN0aW9uKFIp'@;
put 'e3ZhciBrPVIuUG9zaXRpb24udG9Mb3dlckNhc2UoKTtTW2tdPXtzdHlsZTpaUyhSLkxpbmVTdHlsZSwrUi5XZWlnaHQpLGNvbG9yOntyZ2I6KFIuQ29sb3J8fCIjMDAwMDAwIikuc2xpY2UoMSl9fX0pLGRlbGV0ZSBTLkJvcmRlcnMpfShSKTt2YXIgZ2UsYWU9ay5tYXRjaCgvPCg/Olx3Kzop'@;
put 'P0ZvbnRcc1tePl0qPi8pO2FlJiYodGkoKGdlPXZyKGFlWzBdKSkuQm9sZCkmJihSLkJvbGQ9ITApLHRpKGdlLkl0YWxpYykmJihSLkl0YWxpYz0hMCksdGkoZ2UuU3RyaWtlVGhyb3VnaCkmJihSLlN0cmlrZT0hMCksZ2UuU2l6ZSYmKFIuU2l6ZT0rZ2UuU2l6ZSksUi5Gb250TmFtZT1nZS5G'@;
put 'b250TmFtZT9nZS5Gb250TmFtZToiQXJpYWwiLGdlLlVuZGVybGluZSYmKFIuVW5kZXJsaW5lPWhJW2dlLlVuZGVybGluZV0pLGdlLkNvbG9yJiYoUi5SR0I9Z2UuQ29sb3Iuc2xpY2UoLTYpKSksUi5BbGlnbm1lbnQmJihSLmFsaWdubWVudD17fSxSLkFsaWdubWVudC5WZXJ0aWNhbCYmKFIu'@;
put 'YWxpZ25tZW50LnZlcnRpY2FsPVIuQWxpZ25tZW50LlZlcnRpY2FsLnRvTG93ZXJDYXNlKCkpLFIuQWxpZ25tZW50Lkhvcml6b250YWwmJihSLmFsaWdubWVudC5ob3Jpem9udGFsPVIuQWxpZ25tZW50Lkhvcml6b250YWwudG9Mb3dlckNhc2UoKSksdGkoUi5BbGlnbm1lbnQuV3JhcFRleHR8'@;
put 'fCIwIik/Ui5hbGlnbm1lbnQud3JhcFRleHQ9ITA6bnVsbD09Ui5BbGlnbm1lbnQuV3JhcFRleHQmJmRlbGV0ZSBSLmFsaWdubWVudC53cmFwVGV4dCx0aShSLkFsaWdubWVudC5TaHJpbmtUb0ZpdHx8IjAiKSYmKFIuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSwrUi5BbGlnbm1lbnQuSW5k'@;
put 'ZW50JiYoUi5hbGlnbm1lbnQuaW5kZW50PStSLkFsaWdubWVudC5JbmRlbnR8fDApLCtSLkFsaWdubWVudC5Sb3RhdGUmJihSLmFsaWdubWVudC50ZXh0Um90YXRpb249K1IuQWxpZ25tZW50LlJvdGF0ZXx8MCkpfVNbUi5JRF09UiwoIkRlZmF1bHQiPT1SLklEfHwiTm9ybWFsIj09Ui5OYW1l'@;
put 'KSYmSTQoUil9ZnVuY3Rpb24gWlMoUyxSKXtzd2l0Y2goUyl7Y2FzZSJOb25lIjpyZXR1cm4ibm9uZSI7Y2FzZSJEYXNoIjpyZXR1cm4iZGFzaGVkIjtjYXNlIkRvdCI6cmV0dXJuImRvdHRlZCI7Y2FzZSJEYXNoRG90IjpyZXR1cm4iZGFzaERvdCI7Y2FzZSJEYXNoRG90RG90IjpyZXR1cm4i'@;
put 'ZGFzaERvdERvdCI7Y2FzZSJTbGFudERhc2hEb3QiOnJldHVybiJzbGFudERhc2hEb3QiO2Nhc2UiRG91YmxlIjpyZXR1cm4iZG91YmxlIjtjYXNlIkNvbnRpbnVvdXMiOnN3aXRjaCgrUnx8MCl7Y2FzZSAwOnJldHVybiJoYWlyIjtjYXNlIDE6cmV0dXJuInRoaW4iO2Nhc2UgMjpyZXR1cm4i'@;
put 'bWVkaXVtIjtjYXNlIDM6cmV0dXJuInRoaWNrIn1yZXR1cm4idGhpbiJ9cmV0dXJuIFN9ZnVuY3Rpb24gZkkoUyxSLGssRyxRLGFlLGdlLHBlLHllLFBlKXt2YXIgTmU9IkdlbmVyYWwiLFllPUcuU3R5bGVJRCxldD17fTtQZT1QZXx8e307dmFyIGN0PVtdLEV0PTA7Zm9yKHZvaWQgMD09PVll'@;
put 'JiZwZSYmKFllPXBlLlN0eWxlSUQpLHZvaWQgMD09PVllJiZnZSYmKFllPWdlLlN0eWxlSUQpO3ZvaWQgMCE9PWFlW1llXTspe3ZhciBvdD1hZVtZZV07aWYoIkdlbmVyYWwiPT1OZSYmb3QubmYmJihOZT1hZVtZZV0ubmYpLG90LkludGVyaW9yJiZjdC5wdXNoKGFlW1llXS5JbnRlcmlvciks'@;
put 'b3QuYWxpZ25tZW50JiYoZXQuYWxpZ25tZW50fHwoZXQuYWxpZ25tZW50PXF0KG90LmFsaWdubWVudCkpKSxudWxsPT1ldC5ib2xkJiZvdC5Cb2xkJiYoZXQuYm9sZD0hMCksbnVsbD09ZXQuaXRhbGljJiZvdC5JdGFsaWMmJihldC5pdGFsaWM9ITApLG51bGw9PWV0LnN0cmlrZSYmb3QuU3Ry'@;
put 'aWtlJiYoZXQuc3RyaWtlPSEwKSxudWxsPT1ldC5zeiYmb3QuU2l6ZSYmKGV0LnN6PW90LlNpemUpLG51bGw9PWV0Lm5hbWUmJm90LkZvbnROYW1lJiYoZXQubmFtZT1vdC5Gb250TmFtZSksbnVsbD09ZXQudW5kZXJsaW5lJiZvdC5VbmRlcmxpbmUmJihldC51bmRlcmxpbmU9b3QuVW5kZXJs'@;
put 'aW5lKSxudWxsPT1ldC5jb2xvciYmb3QuUkdCJiYoZXQuY29sb3I9e3JnYjpvdC5SR0J9KSxbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oT3Qpe251bGw9PWV0W090XSYmb3RbT3RdJiYoZXRbT3RdPXF0KG90W090XSkpfSksIkRlZmF1bHQiPT1ZZSli'@;
put 'cmVhaztZZT1vdC5QYXJlbnR8fCJEZWZhdWx0In1ldC5uYW1lfHwoZXQubmFtZT1hZS5EZWZhdWx0JiZhZS5EZWZhdWx0LkZvbnROYW1lfHwiQXJpYWwiKSxldC5zenx8KGV0LnN6PWFlLkRlZmF1bHQmJmFlLkRlZmF1bHQuU2l6ZXx8MTIpO3ZhciBidD0iIjtpZihTfHxHLkZvcm11bGF8fCJT'@;
put 'dHJpbmciPT1rLlR5cGV8fCJOdW1iZXIiPT1rLlR5cGUpc3dpdGNoKGsuVHlwZSl7Y2FzZSJCb29sZWFuIjpHLnQ9ImIiLEcudj10aShTKTticmVhaztjYXNlIlN0cmluZyI6Ry50PSJzIixidD1PbyhRcihTKSksRy52PVMuaW5kZXhPZigiPCIpPi0xP1FyKFJ8fFMpLnJlcGxhY2UoLzxbXl0q'@;
put 'Pz4vZywiIik6YnQsUy5pbmRleE9mKCI8Iik+LTEmJihHLlI9dmQuaHRtbF90b19ycyhRcihTKSkpO2JyZWFrO2Nhc2UiRGF0ZVRpbWUiOiJaIiE9Uy5zbGljZSgtMSkmJihTKz0iWiIpLEcudj0oSGUoUyktbmV3IERhdGUoRGF0ZS5VVEMoMTg5OSwxMSwzMCkpKS84NjRlNSxHLnYhPUcudj9H'@;
put 'LnY9UXIoUyk6Ry52PDYwJiYoRy52PUcudi0xKSwoIU5lfHwiR2VuZXJhbCI9PU5lKSYmKE5lPSJ5eXl5LW1tLWRkIik7Y2FzZSJOdW1iZXIiOnZvaWQgMD09PUcudiYmKEcudj0rUyksRy50fHwoRy50PSJuIik7YnJlYWs7Y2FzZSJFcnJvciI6Ry50PSJlIixHLnY9UDNbU10sITEhPT1QZS5j'@;
put 'ZWxsVGV4dCYmKEcudz1TKTticmVhaztkZWZhdWx0OiIiPT1TJiYiIj09Uj9HLnQ9InoiOihHLnQ9InMiLGJ0PU9vKFFyKFMpKSxHLnY9Uy5pbmRleE9mKCI8Iik+LTE/UXIoUnx8UykucmVwbGFjZSgvPFteXSo/Pi9nLCIiKTpidCxTLmluZGV4T2YoIjwiKT4tMSYmKEcuUj12ZC5odG1sX3Rv'@;
put 'X3JzKFFyKFMpKSkpfWVsc2UgRy50PSJ6IixkZWxldGUgRy52O2lmKGZ1bmN0aW9uIHpTKFMsUixrKXtpZigieiIhPT1TLnQpe2lmKCFrfHwhMSE9PWsuY2VsbFRleHQpdHJ5e1Mudz0iZSI9PT1TLnQ/Uy53fHxNY1tTLnZdOiJHZW5lcmFsIj09PVI/Im4iPT09Uy50PygwfFMudik9PT1TLnY/'@;
put 'QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShTLnYpOkEuX2dlbmVyYWwoUy52KTpmdW5jdGlvbiBreihTLFIpe3ZhciBrPXRlW1NdfHxRcihTKTtyZXR1cm4iR2VuZXJhbCI9PT1rP0EuX2dlbmVyYWwoUik6QS5mb3JtYXQoayxSKX0oUnx8IkdlbmVyYWwiLFMudil9Y2F0Y2go'@;
put 'YWUpe2lmKGsuV1RGKXRocm93IGFlfXRyeXt2YXIgRz10ZVtSXXx8Unx8IkdlbmVyYWwiO2lmKGsuY2VsbE5GJiYoUy56PUcpLGsuY2VsbERhdGVzJiYibiI9PVMudCYmQS5pc19kYXRlKEcpKXt2YXIgUT1BLnBhcnNlX2RhdGVfY29kZShTLnYpO1EmJihTLnQ9ImQiLFMudj1uZXcgRGF0ZShR'@;
put 'LnksUS5tLTEsUS5kLFEuSCxRLk0sUS5TLFEudSkpfX1jYXRjaChhZSl7aWYoay5XVEYpdGhyb3cgYWV9fX0oRyxOZSxQZSksITEhPT1QZS5jZWxsRm9ybXVsYSlpZihHLkZvcm11bGEpe3ZhciBqdD1RcihHLkZvcm11bGEpOzYxPT1qdC5jaGFyQ29kZUF0KDApJiYoanQ9anQuc2xpY2UoMSkp'@;
put 'LEcuZj1GNShqdCxRKSxkZWxldGUgRy5Gb3JtdWxhLCJSQyI9PUcuQXJyYXlSYW5nZT9HLkY9RjUoIlJDOlJDIixRKTpHLkFycmF5UmFuZ2UmJihHLkY9RjUoRy5BcnJheVJhbmdlLFEpLHllLnB1c2goW2FhKEcuRiksRy5GXSkpfWVsc2UgZm9yKEV0PTA7RXQ8eWUubGVuZ3RoOysrRXQpUS5y'@;
put 'Pj15ZVtFdF1bMF0ucy5yJiZRLnI8PXllW0V0XVswXS5lLnImJlEuYz49eWVbRXRdWzBdLnMuYyYmUS5jPD15ZVtFdF1bMF0uZS5jJiYoRy5GPXllW0V0XVsxXSk7aWYoUGUuY2VsbFN0eWxlcyYmKGN0LmZvckVhY2goZnVuY3Rpb24oT3QpeyFldC5wYXR0ZXJuVHlwZSYmT3QucGF0dGVyblR5'@;
put 'cGUmJihldC5wYXR0ZXJuVHlwZT1PdC5wYXR0ZXJuVHlwZSksIWV0LmZnQ29sb3ImJk90LmZnQ29sb3ImJihldC5mZ0NvbG9yPU90LmZnQ29sb3IpfSksRy5zPWV0KSx2b2lkIDAhPT1HLlN0eWxlSUQmJihHLml4ZmU9Ry5TdHlsZUlEKSxHLlImJkcucyl7dmFyIGt0PXF0KEcucyk7ZGVsZXRl'@;
put 'IGt0LmJvbGQsZGVsZXRlIGt0Lml0YWxpYyxkZWxldGUga3QudW5kZXJsaW5lLGRlbGV0ZSBrdC5zdHJpa2UsRy5SLmZvckVhY2goZnVuY3Rpb24oT3Qpe090LnM9UHQocXQoa3QpLE90LnMpfSl9fWZ1bmN0aW9uIFJ6KFMpe1MudD1TLnZ8fCIiLFMudD1TLnQucmVwbGFjZSgvXHJcbi9nLCJc'@;
put 'biIpLnJlcGxhY2UoL1xyL2csIlxuIiksUy52PVMudz1TLml4ZmU9dm9pZCAwfWZ1bmN0aW9uIFdTKFMpe2lmKFRlJiZCdWZmZXIuaXNCdWZmZXIoUykpcmV0dXJuIFMudG9TdHJpbmcoInV0ZjgiKTtpZigic3RyaW5nIj09dHlwZW9mIFMpcmV0dXJuIFM7aWYodHlwZW9mIFVpbnQ4QXJyYXk8'@;
put 'InUiJiZTIGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZ2EoQyhIKFMpKSk7dGhyb3cgbmV3IEVycm9yKCJCYWQgaW5wdXQgZm9ybWF0OiBleHBlY3RlZCBCdWZmZXIgb3Igc3RyaW5nIil9dmFyIFc1PS88KFwvPykoW15ccz8+PCFcLzpdKjp8KShbXlxzPzw+OlwvXFtdKykoPzpbXHM/'@;
put 'OjxcL11bXj5dKik/Pi9nbTtmdW5jdGlvbiBrOChTLFIpe3ZhciBrPVJ8fHt9LEc9SihXUyhTKSk7KCJiaW5hcnkiPT1rLnR5cGV8fCJhcnJheSI9PWsudHlwZXx8ImJhc2U2NCI9PWsudHlwZSkmJihHPXR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxZKEcp'@;
put 'KTpnYShHKSk7dmFyIFE9Ry5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCksYWU9ITE7aWYoKDEwMjMmUS5pbmRleE9mKCI+IikpPk1hdGgubWluKDEwMjMmUS5pbmRleE9mKCIsIiksMTAyMyZRLmluZGV4T2YoIjsiKSkpe3ZhciBnZT1xdChrKTtyZXR1cm4gZ2UudHlwZT0ic3RyaW5nIixq'@;
put 'My50b193b3JrYm9vayhHLGdlKX1pZigtMT09US5pbmRleE9mKCI8P3htbCIpJiZbImh0bWwiLCJ0YWJsZSIsImhlYWQiLCJtZXRhIiwic2NyaXB0Iiwic3R5bGUiLCJkaXYiXS5mb3JFYWNoKGZ1bmN0aW9uKGJ1KXtRLmluZGV4T2YoIjwiK2J1KT49MCYmKGFlPSEwKX0pLGFlKXJldHVybiB2'@;
put 'ZC50b193b3JrYm9vayhHLGspO3ZhciBwZSxQZSx5ZT1bXTtudWxsIT1sZSYmbnVsbD09ay5kZW5zZSYmKGsuZGVuc2U9bGUpO3ZhciBrcixOZT17fSxZZT1bXSxldD1rLmRlbnNlP1tdOnt9LGN0PSIiLEV0PXt9LG90PXt9LGJ0PXt9LGp0PUYwKCc8RGF0YSBzczpUeXBlPSJTdHJpbmciPicp'@;
put 'LGt0PTAsT3Q9MCxLdD0wLFRuPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LHJyPXt9LFNuPXt9LGxyPSIiLFhuPTAsVm49W10saHI9e30sYnI9e30sZXI9MCxDaT1bXSxGaT17fSxybz1bXSx1bz17fSxMaT1bXSxObj0hMSxCcj1bXSxfcj1bXSxGbj17fSxqcj0wLFppPTAseWk9e1No'@;
put 'ZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX19LHdvPXt9O1c1Lmxhc3RJbmRleD0wLEc9Ry5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIik7Zm9yKHZhciBzYT0iIjtwZT1XNS5leGVjKEcpOylzd2l0Y2gocGVbM109KHNhPXBlWzNdKS50b0xvd2VyQ2FzZSgpKXtjYXNlImRh'@;
put 'dGEiOmlmKCJkYXRhIj09c2Epe2lmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmeWUucHVzaChbcGVbM10sITBd'@;
put 'KTticmVha31pZih5ZVt5ZS5sZW5ndGgtMV1bMV0pYnJlYWs7Ii8iPT09cGVbMV0/ZkkoRy5zbGljZShrdCxwZS5pbmRleCksbHIsanQsImNvbW1lbnQiPT15ZVt5ZS5sZW5ndGgtMV1bMF0/dW86b3Qse2M6T3QscjpLdH0scnIsTGlbT3RdLGJ0LEJyLGspOihscj0iIixqdD1GMChwZVswXSks'@;
put 'a3Q9cGUuaW5kZXgrcGVbMF0ubGVuZ3RoKTticmVhaztjYXNlImNlbGwiOmlmKCIvIj09PXBlWzFdfHwiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXtpZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXtpZigob3Q9alMocGVbMF0pKS5JbmRleCYmKE90PStvdC5JbmRleC0xKSxPdDxUbi5zLmMmJihU'@;
put 'bi5zLmM9T3QpLE90PlRuLmUuYyYmKFRuLmUuYz1PdCkscm89W10sIWsuc2hlZXRTdHVicyl7KytPdDticmVha31mSSgiIiwiIix7fSwiY29tbWVudCI9PXllW3llLmxlbmd0aC0xXVswXT91bzpvdCx7YzpPdCxyOkt0fSxycixMaVtPdF0sYnQsQnIsayl9aWYocm8ubGVuZ3RoPjAmJihvdC5j'@;
put 'PXJvKSwoIWsuc2hlZXRSb3dzfHxrLnNoZWV0Um93cz5LdCkmJih2b2lkIDAhPT1vdC52fHxrLnNoZWV0U3R1YnMpJiYoay5kZW5zZT8oZXRbS3RdfHwoZXRbS3RdPVtdKSxldFtLdF1bT3RdPW90KTpldFtBbyhPdCkramkoS3QpXT1vdCksb3QuSFJlZiYmKG90Lmw9e1RhcmdldDpRcihvdC5I'@;
put 'UmVmKX0sb3QuSFJlZlNjcmVlblRpcCYmKG90LmwuVG9vbHRpcD1vdC5IUmVmU2NyZWVuVGlwKSxkZWxldGUgb3QuSFJlZixkZWxldGUgb3QuSFJlZlNjcmVlblRpcCksKG90Lk1lcmdlQWNyb3NzfHxvdC5NZXJnZURvd24pJiYoanI9T3QrKDB8cGFyc2VJbnQob3QuTWVyZ2VBY3Jvc3MsMTAp'@;
put 'KSxaaT1LdCsoMHxwYXJzZUludChvdC5NZXJnZURvd24sMTApKSwoanI+T3R8fFppPkt0KSYmVm4ucHVzaCh7czp7YzpPdCxyOkt0fSxlOntjOmpyLHI6Wml9fSkpLGsuc2hlZXRTdHVicylpZihvdC5NZXJnZUFjcm9zc3x8b3QuTWVyZ2VEb3duKXtmb3IodmFyIG9vPU90O29vPD1qcjsrK29v'@;
put 'KWZvcih2YXIgTGE9S3Q7TGE8PVppOysrTGEpKG9vPk90fHxMYT5LdCkmJihrLmRlbnNlPyhldFtMYV18fChldFtMYV09W10pLGV0W0xhXVtvb109e3Q6InoifSk6ZXRbQW8ob28pK2ppKExhKV09e3Q6InoifSk7T3Q9anIrMX1lbHNlKytPdDtlbHNlIG90Lk1lcmdlQWNyb3NzP090PWpyKzE6'@;
put 'KytPdH1lbHNlKG90PWpTKHBlWzBdKSkuSW5kZXgmJihPdD0rb3QuSW5kZXgtMSksT3Q8VG4ucy5jJiYoVG4ucy5jPU90KSxPdD5Ubi5lLmMmJihUbi5lLmM9T3QpLCIvPiI9PT1wZVswXS5zbGljZSgtMikmJisrT3Qscm89W107YnJlYWs7Y2FzZSJyb3ciOiIvIj09PXBlWzFdfHwiLz4iPT09'@;
put 'cGVbMF0uc2xpY2UoLTIpPyhLdDxUbi5zLnImJihUbi5zLnI9S3QpLEt0PlRuLmUuciYmKFRuLmUucj1LdCksIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSYmKGJ0PUYwKHBlWzBdKSkuSW5kZXgmJihLdD0rYnQuSW5kZXgtMSksT3Q9MCwrK0t0KTooKGJ0PUYwKHBlWzBdKSkuSW5kZXgmJihLdD0r'@;
put 'YnQuSW5kZXgtMSksRm49e30sKCIwIj09YnQuQXV0b0ZpdEhlaWdodHx8YnQuSGVpZ2h0KSYmKEZuLmhwdD1wYXJzZUZsb2F0KGJ0LkhlaWdodCksRm4uaHB4PWxoKEZuLmhwdCksX3JbS3RdPUZuKSwiMSI9PWJ0LkhpZGRlbiYmKEZuLmhpZGRlbj0hMCxfcltLdF09Rm4pKTticmVhaztjYXNl'@;
put 'IndvcmtzaGVldCI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpO1llLnB1c2goY3QpLFRuLnMucjw9VG4uZS5yJiZUbi5zLmM8PVRuLmUuYyYmKGV0WyIhcmVmIl09aW8oVG4pLGsu'@;
put 'c2hlZXRSb3dzJiZrLnNoZWV0Um93czw9VG4uZS5yJiYoZXRbIiFmdWxscmVmIl09ZXRbIiFyZWYiXSxUbi5lLnI9ay5zaGVldFJvd3MtMSxldFsiIXJlZiJdPWlvKFRuKSkpLFZuLmxlbmd0aCYmKGV0WyIhbWVyZ2VzIl09Vm4pLExpLmxlbmd0aD4wJiYoZXRbIiFjb2xzIl09TGkpLF9yLmxl'@;
put 'bmd0aD4wJiYoZXRbIiFyb3dzIl09X3IpLEV0JiYoZXRbIiFzaGVldEZvcm1hdCJdPUF6KEV0KSksTmVbY3RdPWV0fWVsc2UgVG49e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0sS3Q9T3Q9MCx5ZS5wdXNoKFtwZVszXSwhMV0pLFBlPUYwKHBlWzBdKSxjdD1RcihQZS5OYW1lKSxldD1r'@;
put 'LmRlbnNlP1tdOnt9LFZuPVtdLEJyPVtdLF9yPVtdLHlpLlNoZWV0cy5wdXNoKHdvPXtuYW1lOmN0LEhpZGRlbjowfSk7YnJlYWs7Y2FzZSJ0YWJsZSI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5q'@;
put 'b2luKCJ8IikpfWVsc2V7aWYoIi8+Ij09cGVbMF0uc2xpY2UoLTIpKWJyZWFrO0V0PUYwKHBlWzBdKSx5ZS5wdXNoKFtwZVszXSwhMV0pLExpPVtdLE5uPSExfWJyZWFrO2Nhc2Uic3R5bGUiOiIvIj09PXBlWzFdP1VTKHJyLFNuLGxyLGspOihTbj1GMChwZVswXSksbHI9IiIpO2JyZWFrO2Nh'@;
put 'c2UibnVtYmVyZm9ybWF0IjpTbi5uZj1RcihGMChwZVswXSkuRm9ybWF0fHwiR2VuZXJhbCIpLHRlW1NuLm5mXSYmKFNuLm5mPXRlW1NuLm5mXSk7Zm9yKHZhciBQbz0wOzM5MiE9UG8mJkEuX3RhYmxlW1BvXSE9U24ubmY7KytQbyk7aWYoMzkyPT1Qbylmb3IoUG89NTc7MzkyIT1QbzsrK1Bv'@;
put 'KWlmKG51bGw9PUEuX3RhYmxlW1BvXSl7QS5sb2FkKFNuLm5mLFBvKTticmVha31icmVhaztjYXNlImNvbHVtbiI6aWYoInRhYmxlIiE9PXllW3llLmxlbmd0aC0xXVswXXx8Ii8iPT09cGVbMV0pYnJlYWs7aWYoKGtyPUYwKHBlWzBdKSkuSGlkZGVuJiYoa3IuaGlkZGVuPSEwLGRlbGV0ZSBr'@;
put 'ci5IaWRkZW4pLGtyLldpZHRoP2tyLndweD00KnBhcnNlSW50KGtyLldpZHRoLDEwKS8zOitrci5BdXRvRml0V2lkdGgmJihrci5hdXRvPTEpLCFObiYma3Iud3B4PjEwKXtObj0hMCxUYz1kaztmb3IodmFyIGhhPTA7aGE8TGkubGVuZ3RoOysraGEpTGlbaGFdJiZRMChMaVtoYV0pfU5uJiZR'@;
put 'MChrciksTGlba3IuSW5kZXgtMXx8TGkubGVuZ3RoXT1rcjtmb3IodmFyIEpvPTA7Sm88K2tyLlNwYW47KytKbylMaVtMaS5sZW5ndGhdPXF0KGtyKTticmVhaztjYXNlIm5hbWVkcmFuZ2UiOmlmKCIvIj09PXBlWzFdKWJyZWFrO3lpLk5hbWVzfHwoeWkuTmFtZXM9W10pO3ZhciBCaT12cihw'@;
put 'ZVswXSksSXM9e05hbWU6QmkuTmFtZSxSZWY6RjUoQmkuUmVmZXJzVG8uc2xpY2UoMSkse3I6MCxjOjB9KX07eWkuU2hlZXRzLmxlbmd0aD4wJiYoSXMuU2hlZXQ9eWkuU2hlZXRzLmxlbmd0aC0xKSx5aS5OYW1lcy5wdXNoKElzKTticmVhaztjYXNlIm5hbWVkY2VsbCI6Y2FzZSJiIjpjYXNl'@;
put 'ImkiOmNhc2UidSI6Y2FzZSJzIjpjYXNlImVtIjpjYXNlImgyIjpjYXNlImgzIjpjYXNlInN1YiI6Y2FzZSJzdXAiOmNhc2Uic3BhbiI6Y2FzZSJwcm90ZWN0aW9uIjpjYXNlInBhcmFncmFwaHMiOmNhc2UibmFtZSI6YnJlYWs7Y2FzZSJhbGlnbm1lbnQiOmlmKCFrLmNlbGxTdHlsZXN8fCIv'@;
put 'Ij09PXBlWzFdKWJyZWFrO1NuLkFsaWdubWVudD1GMChwZVswXSk7YnJlYWs7Y2FzZSJib3JkZXJzIjoiLyIhPT1wZVsxXSYmKFNuLkJvcmRlcnM9W10pO2JyZWFrO2Nhc2UiYm9yZGVyIjppZigiLyI9PT1wZVsxXSlicmVhaztTbi5Cb3JkZXJzfHwoU24uQm9yZGVycz1bXSksU24uQm9yZGVy'@;
put 'cy5wdXNoKEYwKHBlWzBdKSk7YnJlYWs7Y2FzZSJmb250IjppZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKXtscis9cGVbMF07YnJlYWt9Ii8iPT09cGVbMV0/bHIrPUcuc2xpY2UoWG4scGUuaW5kZXgrcGVbMF0ubGVuZ3RoKTpYbj1wZS5pbmRleDticmVhaztjYXNlImludGVyaW9yIjppZigh'@;
put 'ay5jZWxsU3R5bGVzfHwiLyI9PT1wZVsxXSlicmVhaztTbi5JbnRlcmlvcj1GMChwZVswXSk7YnJlYWs7Y2FzZSJhdXRob3IiOmNhc2UidGl0bGUiOmNhc2UiZGVzY3JpcHRpb24iOmNhc2UiY3JlYXRlZCI6Y2FzZSJrZXl3b3JkcyI6Y2FzZSJzdWJqZWN0IjpjYXNlImNhdGVnb3J5IjpjYXNl'@;
put 'ImNvbXBhbnkiOmNhc2UibGFzdGF1dGhvciI6Y2FzZSJsYXN0c2F2ZWQiOmNhc2UibGFzdHByaW50ZWQiOmNhc2UidmVyc2lvbiI6Y2FzZSJyZXZpc2lvbiI6Y2FzZSJ0b3RhbHRpbWUiOmNhc2UiaHlwZXJsaW5rYmFzZSI6Y2FzZSJtYW5hZ2VyIjpjYXNlImNvbnRlbnRzdGF0dXMiOmNhc2Ui'@;
put 'aWRlbnRpZmllciI6Y2FzZSJsYW5ndWFnZSI6Y2FzZSJhcHBuYW1lIjppZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXBlWzFdP0YzKGhyLHNhLEcuc2xpY2UoZXIscGUuaW5kZXgpKTplcj1wZS5pbmRleCtwZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJzdHlsZXMiOmNhc2Ui'@;
put 'd29ya2Jvb2siOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIHllLnB1c2goW3BlWzNdLCExXSk7YnJlYWs7Y2FzZSJjb21tZW50IjppZigiLyI9PT1wZVsxXSl7aWYoKFBl'@;
put 'PXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSk7UnoodW8pLHJvLnB1c2godW8pfWVsc2UgeWUucHVzaChbcGVbM10sITFdKSx1bz17YTooUGU9RjAocGVbMF0pKS5BdXRob3J9O2JyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6aWYo'@;
put 'Ii8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UgaWYoIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSl7dmFyIFBuPUYwKHBlWzBdKTtldFsiIWF1dG9maWx0ZXIiXT17'@;
put 'cmVmOkY1KFBuLlJhbmdlKS5yZXBsYWNlKC9cJC9nLCIiKX0seWUucHVzaChbcGVbM10sITBdKX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjppZihldFsiIXZhbGlkYXRpb25zIl18fChldFsiIXZhbGlkYXRpb25zIl09W10pLCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09'@;
put 'cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIi8iIT09cGVbMF0uY2hhckF0KHBlWzBdLmxlbmd0aC0yKSYmeWUucHVzaChbcGVbM10sITBdKSxGaT17fTticmVhaztjYXNlInBpeGVsc3BlcmluY2giOmlmKCIvIj09PXBlWzFdKXt2YXIgV2E9'@;
put 'K0cuc2xpY2Uoa3QscGUuaW5kZXgpOyg3Mj09V2F8fDk2PT1XYSkmJkFmKFdhKX1lbHNlIGt0PXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOmNhc2UiZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI6Y2Fz'@;
put 'ZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpjYXNlInBpdm90dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6Y2FzZSJuYW1lcyI6Y2FzZSJtYXBpbmZvIjpjYXNlInBhZ2VicmVha3MiOmNhc2UicXVlcnl0YWJsZSI6Y2FzZSJzb3J0aW5nIjpjYXNlInNjaGVtYSI6Y2FzZSJjb25kaXRpb25hbGZv'@;
put 'cm1hdHRpbmciOmNhc2Uic21hcnR0YWd0eXBlIjpjYXNlInNtYXJ0dGFncyI6Y2FzZSJleGNlbHdvcmtib29rIjpjYXNlIndvcmtib29rb3B0aW9ucyI6Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBF'@;
put 'cnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXBlWzBdLmNoYXJBdChwZVswXS5sZW5ndGgtMikmJnllLnB1c2goW3BlWzNdLCEwXSk7YnJlYWs7ZGVmYXVsdDppZigwPT15ZS5sZW5ndGgmJiJkb2N1bWVudCI9PXBlWzNdfHwwPT15ZS5sZW5ndGgmJiJ1b2YiPT1w'@;
put 'ZVszXSlyZXR1cm4ga0koRyxrKTt2YXIgZnI9ITA7c3dpdGNoKHllW3llLmxlbmd0aC0xXVswXSl7Y2FzZSJvZmZpY2Vkb2N1bWVudHNldHRpbmdzIjpzd2l0Y2gocGVbM10pe2Nhc2UiYWxsb3dwbmciOmNhc2UicmVtb3ZlcGVyc29uYWxpbmZvcm1hdGlvbiI6Y2FzZSJkb3dubG9hZGNvbXBv'@;
put 'bmVudHMiOmNhc2UibG9jYXRpb25vZmNvbXBvbmVudHMiOmNhc2UiY29sb3JzIjpjYXNlImNvbG9yIjpjYXNlImluZGV4IjpjYXNlInJnYiI6Y2FzZSJ0YXJnZXRzY3JlZW5zaXplIjpjYXNlInJlYWRvbmx5cmVjb21tZW5kZWQiOmJyZWFrO2RlZmF1bHQ6ZnI9ITF9YnJlYWs7Y2FzZSJjb21w'@;
put 'b25lbnRvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2UidG9vbGJhciI6Y2FzZSJoaWRlb2ZmaWNlbG9nbyI6Y2FzZSJzcHJlYWRzaGVldGF1dG9maXQiOmNhc2UibGFiZWwiOmNhc2UiY2FwdGlvbiI6Y2FzZSJtYXhoZWlnaHQiOmNhc2UibWF4d2lkdGgiOmNhc2UibmV4dHNoZWV0bnVtYmVy'@;
put 'IjpicmVhaztkZWZhdWx0OmZyPSExfWJyZWFrO2Nhc2UiZXhjZWx3b3JrYm9vayI6c3dpdGNoKHBlWzNdKXtjYXNlImRhdGUxOTA0Ijp5aS5XQlByb3BzLmRhdGUxOTA0PSEwO2JyZWFrO2Nhc2Uid2luZG93aGVpZ2h0IjpjYXNlIndpbmRvd3dpZHRoIjpjYXNlIndpbmRvd3RvcHgiOmNhc2Ui'@;
put 'd2luZG93dG9weSI6Y2FzZSJ0YWJyYXRpbyI6Y2FzZSJwcm90ZWN0c3RydWN0dXJlIjpjYXNlInByb3RlY3R3aW5kb3ciOmNhc2UicHJvdGVjdHdpbmRvd3MiOmNhc2UiYWN0aXZlc2hlZXQiOmNhc2UiZGlzcGxheWlua25vdGVzIjpjYXNlImZpcnN0dmlzaWJsZXNoZWV0IjpjYXNlInN1cGJv'@;
put 'b2siOmNhc2Uic2hlZXRuYW1lIjpjYXNlInNoZWV0aW5kZXgiOmNhc2Uic2hlZXRpbmRleGZpcnN0IjpjYXNlInNoZWV0aW5kZXhsYXN0IjpjYXNlImRsbCI6Y2FzZSJhY2NlcHRsYWJlbHNpbmZvcm11bGFzIjpjYXNlImRvbm90c2F2ZWxpbmt2YWx1ZXMiOmNhc2UiaXRlcmF0aW9uIjpjYXNl'@;
put 'Im1heGl0ZXJhdGlvbnMiOmNhc2UibWF4Y2hhbmdlIjpjYXNlInBhdGgiOmNhc2UieGN0IjpjYXNlImNvdW50IjpjYXNlInNlbGVjdGVkc2hlZXRzIjpjYXNlImNhbGN1bGF0aW9uIjpjYXNlInVuY2FsY2VkIjpjYXNlInN0YXJ0dXBwcm9tcHQiOmNhc2UiY3JuIjpjYXNlImV4dGVybm5hbWUi'@;
put 'OmNhc2UiZm9ybXVsYSI6Y2FzZSJjb2xmaXJzdCI6Y2FzZSJjb2xsYXN0IjpjYXNlIndhbnRhZHZpc2UiOmNhc2UiYm9vbGVhbiI6Y2FzZSJlcnJvciI6Y2FzZSJ0ZXh0IjpjYXNlIm9sZSI6Y2FzZSJub2F1dG9yZWNvdmVyIjpjYXNlInB1Ymxpc2hvYmplY3RzIjpjYXNlImRvbm90Y2FsY3Vs'@;
put 'YXRlYmVmb3Jlc2F2ZSI6Y2FzZSJudW1iZXIiOmNhc2UicmVmbW9kZXIxYzEiOmNhc2UiZW1iZWRzYXZlc21hcnR0YWdzIjpicmVhaztkZWZhdWx0OmZyPSExfWJyZWFrO2Nhc2Uid29ya2Jvb2tvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2Uib3djdmVyc2lvbiI6Y2FzZSJoZWlnaHQiOmNh'@;
put 'c2Uid2lkdGgiOmJyZWFrO2RlZmF1bHQ6ZnI9ITF9YnJlYWs7Y2FzZSJ3b3Jrc2hlZXRvcHRpb25zIjpzd2l0Y2gocGVbM10pe2Nhc2UidmlzaWJsZSI6aWYoIi8+IiE9PXBlWzBdLnNsaWNlKC0yKSlpZigiLyI9PT1wZVsxXSlzd2l0Y2goRy5zbGljZShlcixwZS5pbmRleCkpe2Nhc2UiU2hl'@;
put 'ZXRIaWRkZW4iOndvLkhpZGRlbj0xO2JyZWFrO2Nhc2UiU2hlZXRWZXJ5SGlkZGVuIjp3by5IaWRkZW49Mn1lbHNlIGVyPXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImhlYWRlciI6ZXRbIiFtYXJnaW5zIl18fFgzKGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksZXRbIiFtYXJn'@;
put 'aW5zIl0uaGVhZGVyPXZyKHBlWzBdKS5NYXJnaW47YnJlYWs7Y2FzZSJmb290ZXIiOmV0WyIhbWFyZ2lucyJdfHxYMyhldFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLGV0WyIhbWFyZ2lucyJdLmZvb3Rlcj12cihwZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UicGFnZW1hcmdpbnMiOnZhciBYbD12'@;
put 'cihwZVswXSk7ZXRbIiFtYXJnaW5zIl18fFgzKGV0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksWGwuVG9wJiYoZXRbIiFtYXJnaW5zIl0udG9wPVhsLlRvcCksWGwuTGVmdCYmKGV0WyIhbWFyZ2lucyJdLmxlZnQ9WGwuTGVmdCksWGwuUmlnaHQmJihldFsiIW1hcmdpbnMiXS5yaWdodD1YbC5S'@;
put 'aWdodCksWGwuQm90dG9tJiYoZXRbIiFtYXJnaW5zIl0uYm90dG9tPVhsLkJvdHRvbSk7YnJlYWs7Y2FzZSJkaXNwbGF5cmlnaHR0b2xlZnQiOnlpLlZpZXdzfHwoeWkuVmlld3M9W10pLHlpLlZpZXdzWzBdfHwoeWkuVmlld3NbMF09e30pLHlpLlZpZXdzWzBdLlJUTD0hMDticmVhaztjYXNl'@;
put 'ImZyZWV6ZXBhbmVzIjpjYXNlImZyb3plbm5vc3BsaXQiOmNhc2UiYWN0aXZlcm93IjpjYXNlImFjdGl2ZWNvbCI6Y2FzZSJ0b3Byb3dib3R0b21wYW5lIjpjYXNlImxlZnRjb2x1bW5yaWdodHBhbmUiOmNhc2UidW5zeW5jZWQiOmNhc2UicHJpbnQiOmNhc2UicHJpbnRlcnJvcnMiOmNhc2Ui'@;
put 'cGFuZXMiOmNhc2Uic2NhbGUiOmNhc2UicGFuZSI6Y2FzZSJudW1iZXIiOmNhc2UibGF5b3V0IjpjYXNlInBhZ2VzZXR1cCI6Y2FzZSJzZWxlY3RlZCI6Y2FzZSJwcm90ZWN0b2JqZWN0cyI6Y2FzZSJlbmFibGVzZWxlY3Rpb24iOmNhc2UicHJvdGVjdHNjZW5hcmlvcyI6Y2FzZSJ2YWxpZHBy'@;
put 'aW50ZXJpbmZvIjpjYXNlImhvcml6b250YWxyZXNvbHV0aW9uIjpjYXNlInZlcnRpY2FscmVzb2x1dGlvbiI6Y2FzZSJudW1iZXJvZmNvcGllcyI6Y2FzZSJhY3RpdmVwYW5lIjpjYXNlInRvcHJvd3Zpc2libGUiOmNhc2UibGVmdGNvbHVtbnZpc2libGUiOmNhc2UiZml0dG9wYWdlIjpjYXNl'@;
put 'InJhbmdlc2VsZWN0aW9uIjpjYXNlInBhcGVyc2l6ZWluZGV4IjpjYXNlInBhZ2VsYXlvdXR6b29tIjpjYXNlInBhZ2VicmVha3pvb20iOmNhc2UiZmlsdGVyb24iOmNhc2UiZml0d2lkdGgiOmNhc2UiZml0aGVpZ2h0IjpjYXNlImNvbW1lbnRzbGF5b3V0IjpjYXNlInpvb20iOmNhc2UibGVm'@;
put 'dHRvcmlnaHQiOmNhc2UiZ3JpZGxpbmVzIjpjYXNlImFsbG93c29ydCI6Y2FzZSJhbGxvd2ZpbHRlciI6Y2FzZSJhbGxvd2luc2VydHJvd3MiOmNhc2UiYWxsb3dkZWxldGVyb3dzIjpjYXNlImFsbG93aW5zZXJ0Y29scyI6Y2FzZSJhbGxvd2RlbGV0ZWNvbHMiOmNhc2UiYWxsb3dpbnNlcnRo'@;
put 'eXBlcmxpbmtzIjpjYXNlImFsbG93Zm9ybWF0Y2VsbHMiOmNhc2UiYWxsb3dzaXplY29scyI6Y2FzZSJhbGxvd3NpemVyb3dzIjpjYXNlInRhYmNvbG9yaW5kZXgiOmNhc2UiZG9ub3RkaXNwbGF5aGVhZGluZ3MiOmNhc2Uic2hvd3BhZ2VsYXlvdXR6b29tIjpjYXNlImJsYWNrYW5kd2hpdGUi'@;
put 'OmNhc2UiZG9ub3RkaXNwbGF5emVyb3MiOmNhc2UiZGlzcGxheXBhZ2VicmVhayI6Y2FzZSJyb3djb2xoZWFkaW5ncyI6Y2FzZSJkb25vdGRpc3BsYXlvdXRsaW5lIjpjYXNlIm5vb3JpZW50YXRpb24iOmNhc2UiYWxsb3d1c2VwaXZvdHRhYmxlcyI6Y2FzZSJ6ZXJvaGVpZ2h0IjpjYXNlInZp'@;
put 'ZXdhYmxlcmFuZ2UiOmNhc2Uic2VsZWN0aW9uIjpjYXNlInByb3RlY3Rjb250ZW50cyI6YnJlYWs7Y2FzZSJzcGxpdGhvcml6b250YWwiOmNhc2Uic3BsaXR2ZXJ0aWNhbCI6aWYoIi8+IiE9PXBlWzBdLnNsaWNlKC0yKSlpZigiLyI9PXBlWzFdKXtldFsiIWZyZWV6ZSJdfHwoZXRbIiFmcmVl'@;
put 'emUiXT0iQTEiKTt2YXIgV2w9TmEoZXRbIiFmcmVlemUiXSk7InNwbGl0aG9yaXpvbnRhbCI9PXBlWzNdP1dsLnI9K0cuc2xpY2UoZXIscGUuaW5kZXgpOldsLmM9K0cuc2xpY2UoZXIscGUuaW5kZXgpLGV0WyIhZnJlZXplIl09cWkoV2wpfWVsc2UgZXI9cGUuaW5kZXgrcGVbMF0ubGVuZ3Ro'@;
put 'O2JyZWFrO2Nhc2UiZG9ub3RkaXNwbGF5Z3JpZGxpbmVzIjpldFsiIWdyaWRsaW5lcyJdPSExO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5cm93c2JlbG93ZGV0YWlsIjpldFsiIW91dGxpbmUiXXx8KGV0WyIhb3V0bGluZSJdPXt9KSxldFsiIW91dGxpbmUiXS5hYm92ZT0hMDticmVhaztjYXNlIm5v'@;
put 'c3VtbWFyeWNvbHVtbnNyaWdodGRldGFpbCI6ZXRbIiFvdXRsaW5lIl18fChldFsiIW91dGxpbmUiXT17fSksZXRbIiFvdXRsaW5lIl0ubGVmdD0hMDticmVhaztkZWZhdWx0OmZyPSExfWJyZWFrO2Nhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpzd2l0Y2gocGVbM10pe2Nhc2Ui'@;
put 'aW1tZWRpYXRlaXRlbXNvbmRyb3AiOmNhc2Uic2hvd3BhZ2VtdWx0aXBsZWl0ZW1sYWJlbCI6Y2FzZSJjb21wYWN0cm93aW5kZW50IjpjYXNlImxvY2F0aW9uIjpjYXNlInBpdm90ZmllbGQiOmNhc2Uib3JpZW50YXRpb24iOmNhc2UibGF5b3V0Zm9ybSI6Y2FzZSJsYXlvdXRzdWJ0b3RhbGxv'@;
put 'Y2F0aW9uIjpjYXNlImxheW91dGNvbXBhY3Ryb3ciOmNhc2UicG9zaXRpb24iOmNhc2UicGl2b3RpdGVtIjpjYXNlImRhdGF0eXBlIjpjYXNlImRhdGFmaWVsZCI6Y2FzZSJzb3VyY2VuYW1lIjpjYXNlInBhcmVudGZpZWxkIjpjYXNlInB0bGluZWl0ZW1zIjpjYXNlInB0bGluZWl0ZW0iOmNh'@;
put 'c2UiY291bnRvZnNhbWVpdGVtcyI6Y2FzZSJpdGVtIjpjYXNlIml0ZW10eXBlIjpjYXNlInB0c291cmNlIjpjYXNlImNhY2hlaW5kZXgiOmNhc2UiY29uc29saWRhdGlvbnJlZmVyZW5jZSI6Y2FzZSJmaWxlbmFtZSI6Y2FzZSJyZWZlcmVuY2UiOmNhc2Uibm9jb2x1bW5ncmFuZCI6Y2FzZSJu'@;
put 'b3Jvd2dyYW5kIjpjYXNlImJsYW5rbGluZWFmdGVyaXRlbXMiOmNhc2UiaGlkZGVuIjpjYXNlInN1YnRvdGFsIjpjYXNlImJhc2VmaWVsZCI6Y2FzZSJtYXBjaGlsZGl0ZW1zIjpjYXNlImZ1bmN0aW9uIjpjYXNlInJlZnJlc2hvbmZpbGVvcGVuIjpjYXNlInByaW50c2V0dGl0bGVzIjpjYXNl'@;
put 'Im1lcmdlbGFiZWxzIjpjYXNlImRlZmF1bHR2ZXJzaW9uIjpjYXNlInJlZnJlc2huYW1lIjpjYXNlInJlZnJlc2hkYXRlIjpjYXNlInJlZnJlc2hkYXRlY29weSI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmNhc2UidmVyc2lvbmxhc3R1cGRhdGUiOmNhc2UidmVyc2lvbnVwZGF0ZWFibGVt'@;
put 'aW4iOmNhc2UidmVyc2lvbnJlZnJlc2hhYmxlbWluIjpjYXNlImNhbGN1bGF0aW9uIjpicmVhaztkZWZhdWx0OmZyPSExfWJyZWFrO2Nhc2UicGFnZWJyZWFrcyI6c3dpdGNoKHBlWzNdKXtjYXNlImNvbGJyZWFrcyI6Y2FzZSJjb2xicmVhayI6Y2FzZSJyb3dicmVha3MiOmNhc2Uicm93YnJl'@;
put 'YWsiOmNhc2UiY29sc3RhcnQiOmNhc2UiY29sZW5kIjpjYXNlInJvd2VuZCI6YnJlYWs7ZGVmYXVsdDpmcj0hMX1icmVhaztjYXNlImF1dG9maWx0ZXIiOnN3aXRjaChwZVszXSl7Y2FzZSJhdXRvZmlsdGVyY29sdW1uIjpjYXNlImF1dG9maWx0ZXJjb25kaXRpb24iOmNhc2UiYXV0b2ZpbHRl'@;
put 'cmFuZCI6Y2FzZSJhdXRvZmlsdGVyb3IiOmJyZWFrO2RlZmF1bHQ6ZnI9ITF9YnJlYWs7Y2FzZSJxdWVyeXRhYmxlIjpzd2l0Y2gocGVbM10pe2Nhc2UiaWQiOmNhc2UiYXV0b2Zvcm1hdGZvbnQiOmNhc2UiYXV0b2Zvcm1hdHBhdHRlcm4iOmNhc2UicXVlcnlzb3VyY2UiOmNhc2UicXVlcnl0'@;
put 'eXBlIjpjYXNlImVuYWJsZXJlZGlyZWN0aW9ucyI6Y2FzZSJyZWZyZXNoZWRpbnhsOSI6Y2FzZSJ1cmxzdHJpbmciOmNhc2UiaHRtbHRhYmxlcyI6Y2FzZSJjb25uZWN0aW9uIjpjYXNlImNvbW1hbmR0ZXh0IjpjYXNlInJlZnJlc2hpbmZvIjpjYXNlIm5vdGl0bGVzIjpjYXNlIm5leHRpZCI6'@;
put 'Y2FzZSJjb2x1bW5pbmZvIjpjYXNlIm92ZXJ3cml0ZWNlbGxzIjpjYXNlImRvbm90cHJvbXB0Zm9yZmlsZSI6Y2FzZSJ0ZXh0d2l6YXJkc2V0dGluZ3MiOmNhc2Uic291cmNlIjpjYXNlIm51bWJlciI6Y2FzZSJkZWNpbWFsIjpjYXNlInRob3VzYW5kc2VwYXJhdG9yIjpjYXNlInRyYWlsaW5n'@;
put 'bWludXNudW1iZXJzIjpjYXNlImZvcm1hdHNldHRpbmdzIjpjYXNlImZpZWxkdHlwZSI6Y2FzZSJkZWxpbWl0ZXJzIjpjYXNlInRhYiI6Y2FzZSJjb21tYSI6Y2FzZSJhdXRvZm9ybWF0bmFtZSI6Y2FzZSJ2ZXJzaW9ubGFzdGVkaXQiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpicmVhaztk'@;
put 'ZWZhdWx0OmZyPSExfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOnN3aXRjaChwZVszXSl7Y2FzZSJyYW5nZSI6RmkucmVmPXBlO2JyZWFrO2Nhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vu'@;
put 'c2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9yc3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVh'@;
put 'bGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNhc2UiZm9ybWF0IjpjYXNlImNlbGxyYW5nZWxpc3QiOmJyZWFrO2RlZmF1bHQ6ZnI9ITF9YnJlYWs7Y2FzZSJzb3J0aW5nIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6c3dpdGNoKHBlWzNdKXtj'@;
put 'YXNlInJhbmdlIjpjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxl'@;
put 'IjpjYXNlImNlbGxyYW5nZWxpc3QiOmNhc2UiaW5wdXRtZXNzYWdlIjpjYXNlImlucHV0dGl0bGUiOmNhc2UiY29tYm9oaWRlIjpjYXNlImlucHV0aGlkZSI6Y2FzZSJjb25kaXRpb24iOmNhc2UicXVhbGlmaWVyIjpjYXNlInVzZWJsYW5rIjpjYXNlInZhbHVlMSI6Y2FzZSJ2YWx1ZTIiOmNh'@;
put 'c2UiZm9ybWF0IjpicmVhaztkZWZhdWx0OmZyPSExfWJyZWFrO2Nhc2UibWFwaW5mbyI6Y2FzZSJzY2hlbWEiOmNhc2UiZGF0YSI6c3dpdGNoKHBlWzNdKXtjYXNlIm1hcCI6Y2FzZSJlbnRyeSI6Y2FzZSJyYW5nZSI6Y2FzZSJ4cGF0aCI6Y2FzZSJmaWVsZCI6Y2FzZSJ4c2R0eXBlIjpjYXNl'@;
put 'ImZpbHRlcm9uIjpjYXNlImFnZ3JlZ2F0ZSI6Y2FzZSJlbGVtZW50dHlwZSI6Y2FzZSJhdHRyaWJ1dGV0eXBlIjpjYXNlInNjaGVtYSI6Y2FzZSJlbGVtZW50IjpjYXNlImNvbXBsZXh0eXBlIjpjYXNlImRhdGF0eXBlIjpjYXNlImFsbCI6Y2FzZSJhdHRyaWJ1dGUiOmNhc2UiZXh0ZW5kcyI6'@;
put 'Y2FzZSJyb3ciOmJyZWFrO2RlZmF1bHQ6ZnI9ITF9YnJlYWs7Y2FzZSJzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6ZnI9ITF9aWYoZnJ8fHBlWzNdLm1hdGNoKC8hXFtDREFUQS8pKWJyZWFrO2lmKCF5ZVt5ZS5sZW5ndGgtMV1bMV0pdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIitwZVszXSsi'@;
put 'fCIreWUuam9pbigifCIpO2lmKCJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiPT09eWVbeWUubGVuZ3RoLTFdWzBdKXtpZigiLz4iPT09cGVbMF0uc2xpY2UoLTIpKWJyZWFrOyIvIj09PXBlWzFdP0R6KGJyLHNhLENpLEcuc2xpY2UoZXIscGUuaW5kZXgpKTooQ2k9cGUsZXI9cGUuaW5kZXgr'@;
put 'cGVbMF0ubGVuZ3RoKTticmVha31pZihrLldURil0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3BlWzNdKyJ8Iit5ZS5qb2luKCJ8Iil9dmFyIFlsPXt9O3JldHVybiFrLmJvb2tTaGVldHMmJiFrLmJvb2tQcm9wcyYmKFlsLlNoZWV0cz1OZSksWWwuU2hlZXROYW1lcz1ZZSxZbC5Xb3JrYm9v'@;
put 'az15aSxZbC5TU0Y9QS5nZXRfdGFibGUoKSxZbC5Qcm9wcz1ocixZbC5DdXN0cHJvcHM9YnIsWWwuU2hlZXRzJiZZbC5TaGVldE5hbWVzLmZvckVhY2goZnVuY3Rpb24oYnUpe3ZhciBNbD1ZbC5TaGVldHNbYnVdO01sWyIhbWVyZ2VzIl0mJk1sWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlv'@;
put 'bihsbil7InN0cmluZyI9PXR5cGVvZiBsbiYmKGxuPXcudXRpbHMuZGVjb2RlX3JhbmdlKGxuKSk7dmFyIEVuPXcudXRpbHMuZW5jb2RlX2NlbGwobG4ucyksVW49QXJyYXkuaXNBcnJheShNbCk/KE1sW2xuLnMucl18fFtdKVtsbi5zLmNdOk1sW0VuXTtVbiYmVW4ucyYmKG51bGwhPVVuLnMu'@;
put 'dG9wJiZCdS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoTWwsbG4se3RvcDpVbi5zLnRvcH0pLG51bGwhPVVuLnMuYm90dG9tJiZCdS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoTWwsbG4se2JvdHRvbTpVbi5zLmJvdHRvbX0pLG51bGwhPVVuLnMubGVmdCYmQnUuc2hlZXRfc2V0X3JhbmdlX3N0eWxl'@;
put 'KE1sLGxuLHtsZWZ0OlVuLnMubGVmdH0pLG51bGwhPVVuLnMucmlnaHQmJkJ1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShNbCxsbix7cmlnaHQ6VW4ucy5yaWdodH0pKX0pfSksWWx9ZnVuY3Rpb24gRDgoUyxSKXtzd2l0Y2goRkkoUj1SfHx7fSksUi50eXBlfHwiYmFzZTY0Iil7Y2FzZSJiYXNl'@;
put 'NjQiOnJldHVybiBrOChfZS5kZWNvZGUoUyksUik7Y2FzZSJiaW5hcnkiOmNhc2UiYnVmZmVyIjpjYXNlImZpbGUiOnJldHVybiBrOChTLFIpO2Nhc2UiYXJyYXkiOnJldHVybiBrOChDKFMpLFIpfX1mdW5jdGlvbiB2SShTKXtyZXR1cm4gUHIoIk5hbWVkUmFuZ2UiLG51bGwseyJzczpOYW1l'@;
put 'IjpTLk5hbWUsInNzOlJlZmVyc1RvIjoiPSIrSDQoUy5SZWYse3I6MCxjOjB9KX0pfWZ1bmN0aW9uIEZuZShTLFIsayxHLFEsYWUsZ2Upe2lmKCFTfHxudWxsPT1TLnYmJm51bGw9PVMuZiYmIUcuc2hlZXRTdHVicylyZXR1cm4iIjt2YXIgcGU9e307aWYoUy5mJiYocGVbInNzOkZvcm11bGEi'@;
put 'XT0iPSIrTHIoSDQoUy5mLGdlKSkpLFMuRiYmUy5GLnNsaWNlKDAsUi5sZW5ndGgpPT1SKXt2YXIgeWU9TmEoUy5GLnNsaWNlKFIubGVuZ3RoKzEpKTtwZVsic3M6QXJyYXlSYW5nZSJdPSJSQzpSIisoeWUucj09Z2Uucj8iIjoiWyIrKHllLnItZ2UucikrIl0iKSsiQyIrKHllLmM9PWdlLmM/'@;
put 'IiI6IlsiKyh5ZS5jLWdlLmMpKyJdIil9aWYoUy5sJiZTLmwuVGFyZ2V0JiYocGVbInNzOkhSZWYiXT1McihTLmwuVGFyZ2V0KSxTLmwuVG9vbHRpcCYmKHBlWyJ4OkhSZWZTY3JlZW5UaXAiXT1McihTLmwuVG9vbHRpcCkpKSxrWyIhbWVyZ2VzIl0pZm9yKHZhciBQZT1rWyIhbWVyZ2VzIl0s'@;
put 'TmU9MDtOZSE9UGUubGVuZ3RoOysrTmUpUGVbTmVdLnMuYyE9Z2UuY3x8UGVbTmVdLnMuciE9Z2Uucnx8KFBlW05lXS5lLmM+UGVbTmVdLnMuYyYmKHBlWyJzczpNZXJnZUFjcm9zcyJdPVBlW05lXS5lLmMtUGVbTmVdLnMuYyksUGVbTmVdLmUucj5QZVtOZV0ucy5yJiYocGVbInNzOk1lcmdl'@;
put 'RG93biJdPVBlW05lXS5lLnItUGVbTmVdLnMucikpO3ZhciBZZT0iIixldD0iIjtzd2l0Y2goUy50KXtjYXNlInoiOmlmKCFHLnNoZWV0U3R1YnMpcmV0dXJuIiI7YnJlYWs7Y2FzZSJuIjpZZT0iTnVtYmVyIixldD1TdHJpbmcoUy52KTticmVhaztjYXNlImIiOlllPSJCb29sZWFuIixldD1T'@;
put 'LnY/IjEiOiIwIjticmVhaztjYXNlImUiOlllPSJFcnJvciIsZXQ9TWNbUy52XTticmVhaztjYXNlImQiOlllPSJEYXRlVGltZSIsZXQ9bmV3IERhdGUoUy52KS50b0lTT1N0cmluZygpLG51bGw9PVMueiYmKFMuej1TLnp8fEEuX3RhYmxlWzE0XSk7YnJlYWs7Y2FzZSJzIjpZZT0iU3RyaW5n'@;
put 'IixldD1fbyhTLnZ8fCIiKX12YXIgY3Q9czAoRy5jZWxsWGZzLG51bGwsUyxHKTtwZVsic3M6U3R5bGVJRCJdPSJzIisoMjErY3QpLHBlWyJzczpJbmRleCJdPWdlLmMrMTt2YXIgRXQ9bnVsbCE9Uy52P2V0OiIiLG90PSJ6Ij09Uy50PyIiOlMuUj9mdW5jdGlvbiBNYihTKXtyZXR1cm4nPHNz'@;
put 'OkRhdGEgc3M6VHlwZT0iU3RyaW5nIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCI+JytTLm1hcChmdW5jdGlvbihrKXt2YXIgRz1fbyhrLnYpO3JldHVybiBrLnMmJihrLnMuYm9sZCYmKEc9IjxCPiIrRysiPC9CPiIpLGsucy5pdGFsaWMmJihHPSI8ST4iK0crIjwv'@;
put 'ST4iKSxrLnMuc3RyaWtlJiYoRz0iPFM+IitHKyI8L1M+Iiksay5zLnVuZGVybGluZSYmKEc9IjxVPiIrRysiPC9VPiIpLCJzdXBlciI9PWsucy52YWxpZ24mJihHPSI8U3VwPiIrRysiPC9TdXA+IiksInN1YiI9PWsucy52YWxpZ24mJihHPSI8U3ViPiIrRysiPC9TdWI+IiksKGsucy5uYW1l'@;
put 'fHxrLnMuc3p8fGsucy5jb2xvciYmbnVsbCE9ay5zLmNvbG9yLnJnYikmJihHPVsiPEZvbnQiLGsucy5uYW1lPycgaHRtbDpGYWNlPSInK2sucy5uYW1lKyciJzoiIixrLnMuc3o/JyBodG1sOlNpemU9Iicray5zLnN6KyciJzoiIixrLnMuY29sb3I/JyBodG1sOkNvbG9yPSIjJysoIjAwMDAw'@;
put 'MCIrKCJudW1iZXIiPT10eXBlb2Ygay5zLmNvbG9yLnJnYj9rLnMuY29sb3IucmdiLnRvU3RyaW5nKDE2KTprLnMuY29sb3IucmdiKSkuc2xpY2UoLTYpKyciJzoiIiwiPiIsRywiPC9Gb250PiJdLmpvaW4oIiIpKSksR30pLmpvaW4oIiIpKyI8L0RhdGE+In0oUy5SKTonPERhdGEgc3M6VHlw'@;
put 'ZT0iJytZZSsnIj4nK0V0KyI8L0RhdGE+IjtyZXR1cm4oUy5jfHxbXSkubGVuZ3RoPjAmJihvdCs9ZnVuY3Rpb24geUkoUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKFIpe3ZhciBHPVByKCJzczpEYXRhIixIbyhSLnR8fCIiKSx7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1s'@;
put 'NDAifSk7cmV0dXJuIFByKCJDb21tZW50IixHLHsic3M6QXV0aG9yIjpSLmF9KX0pLmpvaW4oIiIpfShTLmMpKSxQcigiQ2VsbCIsb3QscGUpfWZ1bmN0aW9uIEhuZShTLFIpe3ZhciBrPSc8Um93IHNzOkluZGV4PSInKyhTKzEpKyciJztyZXR1cm4gUiYmKFIuaHB4JiYhUi5ocHQmJihSLmhw'@;
put 'dD1VMyhSLmhweCkpLFIuaHB0JiYoays9JyBzczpBdXRvRml0SGVpZ2h0PSIwIiBzczpIZWlnaHQ9IicrUi5ocHQrJyInKSxSLmhpZGRlbiYmKGsrPScgc3M6SGlkZGVuPSIxIicpKSxrKyI+In1mdW5jdGlvbiBfSShTLFIsayl7dmFyIEc9W10sYWU9ay5TaGVldHNbay5TaGVldE5hbWVzW1Nd'@;
put 'XSxnZT1hZT9mdW5jdGlvbiBMeihTLFIsayxHKXtpZighU3x8ISgoR3x8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJuIiI7Zm9yKHZhciBRPUcuV29ya2Jvb2suTmFtZXMsYWU9W10sZ2U9MDtnZTxRLmxlbmd0aDsrK2dlKXt2YXIgcGU9UVtnZV07cGUuU2hlZXQ9PWsmJihwZS5OYW1l'@;
put 'Lm1hdGNoKC9eX3hsZm5cLi8pfHxhZS5wdXNoKHZJKHBlKSkpfXJldHVybiBhZS5qb2luKCIiKX0oYWUsMCxTLGspOiIiO3JldHVybiBnZS5sZW5ndGg+MCYmRy5wdXNoKCI8TmFtZXM+IitnZSsiPC9OYW1lcz4iKSxnZT1hZT9mdW5jdGlvbiBPeihTLFIsayxHKXtpZighU1siIXJlZiJdKXJl'@;
put 'dHVybiIiO3ZhciBRPWFhKFNbIiFyZWYiXSksYWU9U1siIW1lcmdlcyJdfHxbXSxnZT0wLHBlPVtdO1NbIiFjb2xzIl0mJlNbIiFjb2xzIl0uZm9yRWFjaChmdW5jdGlvbihidCxqdCl7UTAoYnQpO3ZhciBrdD0hIWJ0LndpZHRoLE90PWM4KGp0LGJ0KSxLdD17InNzOkluZGV4IjpqdCsxfTtr'@;
put 'dCYmKEt0WyJzczpXaWR0aCJdPVM1KE90LndpZHRoKSksYnQuaGlkZGVuJiYoS3RbInNzOkhpZGRlbiJdPSIxIikscGUucHVzaChQcigiQ29sdW1uIixudWxsLEt0KSl9KTtmb3IodmFyIHllPUFycmF5LmlzQXJyYXkoUyksUGU9US5zLnI7UGU8PVEuZS5yOysrUGUpe2Zvcih2YXIgTmU9W0hu'@;
put 'ZShQZSwoU1siIXJvd3MiXXx8W10pW1BlXSldLFllPVEucy5jO1llPD1RLmUuYzsrK1llKXt2YXIgZXQ9ITE7Zm9yKGdlPTA7Z2UhPWFlLmxlbmd0aDsrK2dlKWlmKCEoYWVbZ2VdLnMuYz5ZZXx8YWVbZ2VdLnMucj5QZXx8YWVbZ2VdLmUuYzxZZXx8YWVbZ2VdLmUucjxQZSkpeyhhZVtnZV0u'@;
put 'cy5jIT1ZZXx8YWVbZ2VdLnMuciE9UGUpJiYoZXQ9ITApO2JyZWFrfWlmKCFldCl7dmFyIGN0PXtyOlBlLGM6WWV9LEV0PXFpKGN0KTtOZS5wdXNoKEZuZSh5ZT8oU1tQZV18fFtdKVtZZV06U1tFdF0sRXQsUyxSLDAsMCxjdCkpfX1OZS5wdXNoKCI8L1Jvdz4iKSxOZS5sZW5ndGg+MiYmcGUu'@;
put 'cHVzaChOZS5qb2luKCIiKSl9cmV0dXJuIHBlLmpvaW4oIiIpfShhZSxSKToiIixnZS5sZW5ndGg+MCYmRy5wdXNoKCI8VGFibGU+IitnZSsiPC9UYWJsZT4iKSxHLnB1c2goZnVuY3Rpb24gWVMoUyxSLGssRyl7aWYoIVMpcmV0dXJuIiI7dmFyIFE9W107aWYoU1siIW1hcmdpbnMiXSYmKFEu'@;
put 'cHVzaCgiPFBhZ2VTZXR1cD4iKSxTWyIhbWFyZ2lucyJdLmhlYWRlciYmUS5wdXNoKFByKCJIZWFkZXIiLG51bGwseyJ4Ok1hcmdpbiI6U1siIW1hcmdpbnMiXS5oZWFkZXJ9KSksU1siIW1hcmdpbnMiXS5mb290ZXImJlEucHVzaChQcigiRm9vdGVyIixudWxsLHsieDpNYXJnaW4iOlNbIiFt'@;
put 'YXJnaW5zIl0uZm9vdGVyfSkpLFEucHVzaChQcigiUGFnZU1hcmdpbnMiLG51bGwseyJ4OkJvdHRvbSI6U1siIW1hcmdpbnMiXS5ib3R0b218fCIwLjc1IiwieDpMZWZ0IjpTWyIhbWFyZ2lucyJdLmxlZnR8fCIwLjciLCJ4OlJpZ2h0IjpTWyIhbWFyZ2lucyJdLnJpZ2h0fHwiMC43IiwieDpU'@;
put 'b3AiOlNbIiFtYXJnaW5zIl0udG9wfHwiMC43NSJ9KSksUS5wdXNoKCI8L1BhZ2VTZXR1cD4iKSksRyYmRy5Xb3JrYm9vayYmRy5Xb3JrYm9vay5TaGVldHMmJkcuV29ya2Jvb2suU2hlZXRzW2tdKWlmKEcuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbilRLnB1c2goUHIoIlZpc2libGUiLDE9'@;
put 'PUcuV29ya2Jvb2suU2hlZXRzW2tdLkhpZGRlbj8iU2hlZXRIaWRkZW4iOiJTaGVldFZlcnlIaWRkZW4iLHt9KSk7ZWxzZXtmb3IodmFyIGFlPTA7YWU8ayYmKCFHLldvcmtib29rLlNoZWV0c1thZV18fEcuV29ya2Jvb2suU2hlZXRzW2FlXS5IaWRkZW4pOysrYWUpO2FlPT1rJiZRLnB1c2go'@;
put 'IjxTZWxlY3RlZC8+Iil9aWYoKCgoKEd8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJlEucHVzaCgiPERpc3BsYXlSaWdodFRvTGVmdC8+IiksV3QoU1siIWdyaWRsaW5lcyJdKSYmUS5wdXNoKCI8RG9Ob3REaXNwbGF5R3JpZGxpbmVzLz4iKSxTWyIhZnJlZXpl'@;
put 'Il0pe1EucHVzaCgiPEZyZWV6ZVBhbmVzLz4iKSxRLnB1c2goIjxGcm96ZW5Ob1NwbGl0Lz4iKTt2YXIgZ2U9TmEoU1siIWZyZWV6ZSJdKTtnZS5yPjAmJihRLnB1c2goTm8oIlNwbGl0SG9yaXpvbnRhbCIsIiIrZ2UucikpLFEucHVzaChObygiVG9wUm93Qm90dG9tUGFuZSIsIiIrZ2Uucikp'@;
put 'KSxnZS5jPjAmJihRLnB1c2goTm8oIlNwbGl0VmVydGljYWwiLCIiK2dlLmMpKSxRLnB1c2goTm8oIkxlZnRDb2x1bW5SaWdodFBhbmUiLCIiK2dlLmMpKSl9cmV0dXJuIFNbIiFwcm90ZWN0Il0mJihRLnB1c2goTm8oIlByb3RlY3RDb250ZW50cyIsIlRydWUiKSksU1siIXByb3RlY3QiXS5v'@;
put 'YmplY3RzJiZRLnB1c2goTm8oIlByb3RlY3RPYmplY3RzIiwiVHJ1ZSIpKSxTWyIhcHJvdGVjdCJdLnNjZW5hcmlvcyYmUS5wdXNoKE5vKCJQcm90ZWN0U2NlbmFyaW9zIiwiVHJ1ZSIpKSxudWxsPT1TWyIhcHJvdGVjdCJdLnNlbGVjdExvY2tlZENlbGxzfHxTWyIhcHJvdGVjdCJdLnNlbGVj'@;
put 'dExvY2tlZENlbGxzP251bGwhPVNbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxscyYmIVNbIiFwcm90ZWN0Il0uc2VsZWN0VW5sb2NrZWRDZWxscyYmUS5wdXNoKE5vKCJFbmFibGVTZWxlY3Rpb24iLCJVbmxvY2tlZENlbGxzIikpOlEucHVzaChObygiRW5hYmxlU2VsZWN0aW9uIiwi'@;
put 'Tm9TZWxlY3Rpb24iKSksW1siZm9ybWF0Q2VsbHMiLCJBbGxvd0Zvcm1hdENlbGxzIl0sWyJmb3JtYXRDb2x1bW5zIiwiQWxsb3dTaXplQ29scyJdLFsiZm9ybWF0Um93cyIsIkFsbG93U2l6ZVJvd3MiXSxbImluc2VydENvbHVtbnMiLCJBbGxvd0luc2VydENvbHMiXSxbImluc2VydFJvd3Mi'@;
put 'LCJBbGxvd0luc2VydFJvd3MiXSxbImluc2VydEh5cGVybGlua3MiLCJBbGxvd0luc2VydEh5cGVybGlua3MiXSxbImRlbGV0ZUNvbHVtbnMiLCJBbGxvd0RlbGV0ZUNvbHMiXSxbImRlbGV0ZVJvd3MiLCJBbGxvd0RlbGV0ZVJvd3MiXSxbInNvcnQiLCJBbGxvd1NvcnQiXSxbImF1dG9GaWx0'@;
put 'ZXIiLCJBbGxvd0ZpbHRlciJdLFsicGl2b3RUYWJsZXMiLCJBbGxvd1VzZVBpdm90VGFibGVzIl1dLmZvckVhY2goZnVuY3Rpb24ocGUpe1NbIiFwcm90ZWN0Il1bcGVbMF1dJiZRLnB1c2goIjwiK3BlWzFdKyIvPiIpfSkpLDA9PVEubGVuZ3RoPyIiOlByKCJXb3Jrc2hlZXRPcHRpb25zIixR'@;
put 'LmpvaW4oIiIpLHt4bWxuczp5bC54fSl9KGFlLDAsUyxrKSksRy5qb2luKCIiKX1mdW5jdGlvbiB3SShTLFIpe1J8fChSPXt9KSxTLlNTRnx8KFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMuU1NGJiYob2UoQSksQS5sb2FkX3RhYmxlKFMuU1NGKSxSLnJldnNzZj1rZShTLlNTRiksUi5yZXZzc2Zb'@;
put 'Uy5TU0ZbNjU1MzVdXT0wLFIuc3NmPVMuU1NGLFMuU3R5bGVzPXtGb250czpSLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOlIuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9'@;
put 'LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOlIuQm9yZGVycz1be31dfSxSLmNlbGxYZnM9W10sUi5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sczAoUi5jZWxsWGZzLG51bGwse30se3JldnNzZjp7R2VuZXJhbDowfX0pKTt2YXIgaz1bXTtrLnB1c2goZnVuY3Rpb24g'@;
put 'cEkoUyxSKXt2YXIgaz1bXTtyZXR1cm4gUy5Qcm9wcyYmay5wdXNoKGZ1bmN0aW9uIFp3KFMsUil7dmFyIGs9W107cmV0dXJuIFJlKE82KS5tYXAoZnVuY3Rpb24oRyl7Zm9yKHZhciBRPTA7UTxJMC5sZW5ndGg7KytRKWlmKEkwW1FdWzFdPT1HKXJldHVybiBJMFtRXTtmb3IoUT0wO1E8aWgu'@;
put 'bGVuZ3RoOysrUSlpZihpaFtRXVsxXT09RylyZXR1cm4gaWhbUV07dGhyb3cgR30pLmZvckVhY2goZnVuY3Rpb24oRyl7aWYobnVsbCE9U1tHWzFdXSl7dmFyIFE9UiYmUi5Qcm9wcyYmbnVsbCE9Ui5Qcm9wc1tHWzFdXT9SLlByb3BzW0dbMV1dOlNbR1sxXV07ImRhdGUiPT09R1syXSYmKFE9'@;
put 'bmV3IERhdGUoUSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKlovLCJaIikpLCJudW1iZXIiPT10eXBlb2YgUT9RPVN0cmluZyhRKTohMD09PVF8fCExPT09UT9RPVE/IjEiOiIwIjpRIGluc3RhbmNlb2YgRGF0ZSYmKFE9bmV3IERhdGUoUSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9c'@;
put 'LlxkKlovLCIiKSksay5wdXNoKE5vKE82W0dbMV1dfHxHWzFdLFEpKX19KSxQcigiRG9jdW1lbnRQcm9wZXJ0aWVzIixrLmpvaW4oIiIpLHt4bWxuczp5bC5vfSl9KFMuUHJvcHMsUikpLFMuQ3VzdHByb3BzJiZrLnB1c2goZnVuY3Rpb24gRjYoUyxSKXt2YXIgaz1bIldvcmtzaGVldHMiLCJT'@;
put 'aGVldE5hbWVzIl0sRz0iQ3VzdG9tRG9jdW1lbnRQcm9wZXJ0aWVzIixRPVtdO3JldHVybiBTJiZSZShTKS5mb3JFYWNoKGZ1bmN0aW9uKGFlKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxhZSkpe2Zvcih2YXIgZ2U9MDtnZTxJMC5sZW5ndGg7KytnZSlpZihh'@;
put 'ZT09STBbZ2VdWzFdKXJldHVybjtmb3IoZ2U9MDtnZTxpaC5sZW5ndGg7KytnZSlpZihhZT09aWhbZ2VdWzFdKXJldHVybjtmb3IoZ2U9MDtnZTxrLmxlbmd0aDsrK2dlKWlmKGFlPT1rW2dlXSlyZXR1cm47dmFyIHBlPVNbYWVdLHllPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgcGU/KHll'@;
put 'PSJmbG9hdCIscGU9U3RyaW5nKHBlKSk6ITA9PT1wZXx8ITE9PT1wZT8oeWU9ImJvb2xlYW4iLHBlPXBlPyIxIjoiMCIpOnBlPVN0cmluZyhwZSksUS5wdXNoKFByKGdvKGFlKSxwZSx7ImR0OmR0Ijp5ZX0pKX19KSxSJiZSZShSKS5mb3JFYWNoKGZ1bmN0aW9uKGFlKXtpZihPYmplY3QucHJv'@;
put 'dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixhZSkmJighU3x8IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChTLGFlKSkpe3ZhciBnZT1SW2FlXSxwZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIGdlPyhwZT0iZmxvYXQiLGdlPVN0cmluZyhnZSkpOiEwPT09Z2V8'@;
put 'fCExPT09Z2U/KHBlPSJib29sZWFuIixnZT1nZT8iMSI6IjAiKTpnZSBpbnN0YW5jZW9mIERhdGU/KHBlPSJkYXRlVGltZS50eiIsZ2U9Z2UudG9JU09TdHJpbmcoKSk6Z2U9U3RyaW5nKGdlKSxRLnB1c2goUHIoZ28oYWUpLGdlLHsiZHQ6ZHQiOnBlfSkpfX0pLCI8IitHKycgeG1sbnM9Iicr'@;
put 'eWwubysnIj4nK1Euam9pbigiIikrIjwvIitHKyI+In0oUy5Qcm9wcyxTLkN1c3Rwcm9wcykpLGsuam9pbigiIil9KFMsUikpLGsucHVzaCgiIiksay5wdXNoKCIiKSxrLnB1c2goIiIpO2Zvcih2YXIgRz0wO0c8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK0cpay5wdXNoKFByKCJXb3Jrc2hlZXQi'@;
put 'LF9JKEcsUixTKSx7InNzOk5hbWUiOkxyKFMuU2hlZXROYW1lc1tHXSl9KSk7cmV0dXJuIGtbMl09ZnVuY3Rpb24gbUkoUyxSKXt2YXIgRz1bWyc8U3R5bGUgc3M6SUQ9IkRlZmF1bHQiIHNzOk5hbWU9Ik5vcm1hbCI+JywnPEFsaWdubWVudCBzczpWZXJ0aWNhbD0iQm90dG9tIi8+JywiPEJv'@;
put 'cmRlcnMvPiIsJzxGb250IHNzOkZvbnROYW1lPSJDYWxpYnJpIiB4OkZhbWlseT0iU3dpc3MiIHNzOlNpemU9IjEyIiBzczpDb2xvcj0iIzAwMDAwMCIvPicsIjxJbnRlcmlvci8+IiwiPE51bWJlckZvcm1hdC8+IiwiPFByb3RlY3Rpb24vPiIsIjwvU3R5bGU+Il0uam9pbigiIildO3JldHVy'@;
put 'biBSLmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihRLGFlKXt2YXIgZ2U9W107aWYoUS5hbGlnbm1lbnQpe3ZhciBwZT17fTtRLmFsaWdubWVudC5zaHJpbmtUb0ZpdCYmKHBlWyJzczpTaHJpbmtUb0ZpdCJdPSIxIiksUS5hbGlnbm1lbnQud3JhcFRleHQmJihwZVsic3M6V3JhcFRleHQiXT0i'@;
put 'MSIpLFEuYWxpZ25tZW50LnZlcnRpY2FsJiYocGVbInNzOlZlcnRpY2FsIl09QXQoUS5hbGlnbm1lbnQudmVydGljYWwpKSxRLmFsaWdubWVudC5ob3Jpem9udGFsJiYocGVbInNzOkhvcml6b250YWwiXT1BdChRLmFsaWdubWVudC5ob3Jpem9udGFsKSksUS5hbGlnbm1lbnQuaW5kZW50JiYo'@;
put 'cGVbInNzOkluZGVudCJdPVEuYWxpZ25tZW50LmluZGVudCksUS5hbGlnbm1lbnQudGV4dFJvdGF0aW9uJiYocGVbInNzOlJvdGF0ZSJdPVEuYWxpZ25tZW50LnRleHRSb3RhdGlvbiksZ2UucHVzaChQcigiQWxpZ25tZW50IixudWxsLHBlKSl9ZTppZihudWxsIT1RLmZvbnRJZCl7dmFyIHll'@;
put 'PVIuRm9udHNbUS5mb250SWRdO2lmKCF5ZSlicmVhayBlO3ZhciBQZT17InNzOkZvbnROYW1lIjoiQ2FsaWJyaSIsInNzOlNpemUiOiIxMiJ9LE5lPSExO3llLmJvbGQmJihOZT0hMCxQZVsic3M6Qm9sZCJdPSIxIikseWUuaXRhbGljJiYoTmU9ITAsUGVbInNzOkl0YWxpYyJdPSIxIikseWUu'@;
put 'c3RyaWtlJiYoTmU9ITAsUGVbInNzOlN0cmlrZVRocm91Z2giXT0iMSIpLG51bGwhPXllLnVuZGVybGluZSYmKE5lPSEwLFBlWyJzczpVbmRlcmxpbmUiXT1TYlt5ZS51bmRlcmxpbmVdfHwoeWUudW5kZXJsaW5lPyJTaW5nbGUiOiJOb25lIikpLG51bGwhPXllLnN6JiYoTmU9ITAsUGVbInNz'@;
put 'OlNpemUiXT15ZS5zeiksbnVsbCE9eWUubmFtZSYmKE5lPSEwLFBlWyJzczpGb250TmFtZSJdPXllLm5hbWUpLHllLmNvbG9yJiZudWxsIT15ZS5jb2xvci5yZ2ImJihOZT0hMCxQZVsic3M6Q29sb3IiXT0iIyIrKCJudW1iZXIiPT10eXBlb2YgeWUuY29sb3IucmdiPyIwMDAwMDAiK3llLmNv'@;
put 'bG9yLnJnYi50b1N0cmluZygxNik6eWUuY29sb3IucmdiKS5zbGljZSgtNikpLFsic3ViIiwic3VwZXIiXS5pbmRleE9mKHllLnZhbGlnbik+LTEmJihQZVsic3M6VmVydGljYWxBbGlnbiJdPUF0KHllLnZhbGlnbikrInNjcmlwdCIpLE5lJiZnZS5wdXNoKFByKCJGb250IixudWxsLFBlKSl9'@;
put 'ZTppZihRLmZpbGxJZD4wKXt2YXIgWWU9Ui5GaWxsc1tRLmZpbGxJZF07aWYoIVllfHwhWWUuZmdDb2xvcnx8bnVsbD09WWUuZmdDb2xvci5yZ2IpYnJlYWsgZTtnZS5wdXNoKFByKCJJbnRlcmlvciIsbnVsbCx7InNzOlBhdHRlcm4iOnZDW1llLnBhdHRlcm5UeXBlXXx8IlNvbGlkIiwic3M6'@;
put 'Q29sb3IiOiIjIisoIm51bWJlciI9PXR5cGVvZiBZZS5mZ0NvbG9yLnJnYj8iMDAiK1llLmZnQ29sb3IucmdiLnRvU3RyaW5nKDE2KTpZZS5mZ0NvbG9yLnJnYikuc2xpY2UoLTYpfSkpfWdlLnB1c2goUHIoIk51bWJlckZvcm1hdCIsbnVsbCx7InNzOkZvcm1hdCI6THIoQS5fdGFibGVbUS5u'@;
put 'dW1GbXRJZF0pfSkpO3ZhciBldD17InNzOklEIjoicyIrKDIxK2FlKX07US5zdHlsZSYmKGV0WyJzczpOYW1lIl09US5zdHlsZSksRy5wdXNoKFByKCJTdHlsZSIsZ2Uuam9pbigiIiksZXQpKX0pLFByKCJTdHlsZXMiLEcuam9pbigiIikpfSgwLFIpLGtbM109ZnVuY3Rpb24gYkkoUyl7aWYo'@;
put 'ISgoU3x8e30pLldvcmtib29rfHx7fSkuTmFtZXMpcmV0dXJuIiI7Zm9yKHZhciBSPVMuV29ya2Jvb2suTmFtZXMsaz1bXSxHPTA7RzxSLmxlbmd0aDsrK0cpe3ZhciBRPVJbR107bnVsbD09US5TaGVldCYmKFEuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8ay5wdXNoKHZJKFEpKSl9cmV0dXJu'@;
put 'IFByKCJOYW1lcyIsay5qb2luKCIiKSl9KFMpLElpK1ByKCJXb3JrYm9vayIsay5qb2luKCIiKSx7eG1sbnM6eWwuc3MsInhtbG5zOm8iOnlsLm8sInhtbG5zOngiOnlsLngsInhtbG5zOnNzIjp5bC5zcywieG1sbnM6ZHQiOnlsLmR0LCJ4bWxuczpodG1sIjp5bC5odG1sfSl9ZnVuY3Rpb24g'@;
put 'Q0koUyxSLGssRyl7dmFyIFE9ayxhZT1bXSxnZT1SLnNsaWNlKFIubCxSLmwrUSk7aWYoRyYmRy5lbmMmJkcuZW5jLmluc2l0dSYmZ2UubGVuZ3RoPjApc3dpdGNoKFMubil7Y2FzZSJCT0YiOmNhc2UiRmlsZVBhc3MiOmNhc2UiRmlsZUxvY2siOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNlIlJS'@;
put 'REluZm8iOmNhc2UiUlJESGVhZCI6Y2FzZSJVc3JFeGNsIjpjYXNlIkVPRiI6Ry5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6Z2UubGVuZ3RofSksInNraXAiKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjpHLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDo0fSksInNraXAiKSxnZT1CdWZmZXIuY29uY2F0'@;
put 'KFtCdWZmZXIuZnJvbShnZS5zbGljZSgwLDQpKSxCdWZmZXIuZnJvbShHLmVuYy5pbnNpdHUoZ2Uuc2xpY2UoNCkpKV0pO2JyZWFrO2RlZmF1bHQ6Z2U9Ry5lbmMuaW5zaXR1KGdlKX1BcnJheS5pc0FycmF5KFIpJiYhQXJyYXkuaXNBcnJheShnZSkmJihnZT1BcnJheS5mcm9tKGdlKSksYWUu'@;
put 'cHVzaChnZSksUi5sKz1RO2Zvcih2YXIgcGU9S1NbZWEoUixSLmwpXSx5ZT0wO251bGwhPXBlJiYiQ29udGludWUiPT09cGUubi5zbGljZSgwLDgpOylRPWVhKFIsUi5sKzIpLHllPVIubCs0LEcmJkcuZW5jJiZHLmVuYy5pbnNpdHUmJkcuZW5jLmluc2l0dShTZSh7bGVuZ3RoOjR9KSwic2tp'@;
put 'cCIpLCJDb250aW51ZUZydCI9PXBlLm4/eWUrPTQ6IkNvbnRpbnVlRnJ0Ij09cGUubi5zbGljZSgwLDExKSYmKHllKz0xMixHJiZHLmVuYyYmRy5lbmMuaW5zaXR1JiZHLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDo4fSksInNraXAiKSksZ2U9Ui5zbGljZSh5ZSxSLmwrNCtRKSxHJiZHLmVuYyYm'@;
put 'Ry5lbmMuaW5zaXR1JiZnZS5sZW5ndGg+MCYmKGdlPUcuZW5jLmluc2l0dShnZSkpLGFlLnB1c2goZ2UpLFIubCs9NCtRLHBlPUtTW2VhKFIsUi5sKV07dmFyIFBlPWooYWUpO21uKFBlLDApO3ZhciBOZT0wO1BlLmxlbnM9W107Zm9yKHZhciBZZT0wO1llPGFlLmxlbmd0aDsrK1llKVBlLmxl'@;
put 'bnMucHVzaChOZSksTmUrPWFlW1llXS5sZW5ndGg7aWYoUGUubGVuZ3RoPGspdGhyb3ciWExTIFJlY29yZCAiKyhTJiZTLm58fCI/PyIpKyIgVHJ1bmNhdGVkOiAiK1BlLmxlbmd0aCsiIDwgIitrO3JldHVybiBTLmYoUGUsUGUubGVuZ3RoLEcpfWZ1bmN0aW9uIGhoKFMsUixrKXtpZigieiIh'@;
put 'PT1TLnQmJlMuWEYpe3ZhciBHPTA7dHJ5e0c9Uy56fHxTLlhGLm51bUZtdElkfHwwLFIuY2VsbE5GJiYoUy56PUEuX3RhYmxlW0ddKX1jYXRjaChhZSl7aWYoUi5XVEYpdGhyb3cgYWV9aWYoIVJ8fCExIT09Ui5jZWxsVGV4dCl0cnl7Uy53PSJlIj09PVMudD9TLnd8fE1jW1Mudl06MD09PUd8'@;
put 'fCJHZW5lcmFsIj09Rz8ibiI9PT1TLnQ/KDB8Uy52KT09PVMudj9BLl9nZW5lcmFsX2ludChTLnYpOkEuX2dlbmVyYWxfbnVtKFMudik6QS5fZ2VuZXJhbChTLnYpOkEuZm9ybWF0KEcsUy52LHtkYXRlMTkwNDohIWssZGF0ZU5GOlImJlIuZGF0ZU5GfSl9Y2F0Y2goYWUpe2lmKFIuV1RGKXRo'@;
put 'cm93IGFlfWlmKFIuY2VsbERhdGVzJiZHJiYibiI9PVMudCYmQS5pc19kYXRlKEEuX3RhYmxlW0ddfHxTdHJpbmcoRykpKXt2YXIgUT1BLnBhcnNlX2RhdGVfY29kZShTLnYpO1EmJihTLnQ9ImQiLFMudj1uZXcgRGF0ZShRLnksUS5tLTEsUS5kLFEuSCxRLk0sUS5TLFEudSkpfX19ZnVuY3Rp'@;
put 'b24gSTgoUyxSLGspe3JldHVybnt2OlMsaXhmZTpSLHQ6a319dmFyIFNJPWZ1bmN0aW9uKFMsUixrKXtSWyIhb2JqZWN0cyJdPVN9LHhiPXtTSToiZTA4NTlmZjJmOTRmNjgxMGFiOTEwODAwMmIyN2IzZDkiLERTSToiMDJkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUiLFVESToiMDVk'@;
put 'NWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUifTtmdW5jdGlvbiAkUyhTLFIpe3ZhciBrLEcsUSxhZTtpZihSfHwoUj17fSksRkkoUiksVygpLFIuY29kZXBhZ2UmJkwoUi5jb2RlcGFnZSksUy5GdWxsUGF0aHMpe2lmKHZlLmZpbmQoUywiL2VuY3J5cHRpb24iKSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIik7az12ZS5maW5kKFMsIiFDb21wT2JqIiksRz12ZS5maW5kKFMsIi9Xb3JrYm9vayIpfHx2ZS5maW5kKFMsIi9Cb29rIil9ZWxzZXtzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6Uz1iKF9lLmRlY29kZShTKSk7YnJlYWs7Y2FzZSJi'@;
put 'aW5hcnkiOlM9YihTKTticmVhaztjYXNlImJ1ZmZlciI6YnJlYWs7Y2FzZSJhcnJheSI6QXJyYXkuaXNBcnJheShTKXx8KFM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoUykpfW1uKFMsMCksRz17Y29udGVudDpTfX1pZihrJiZmdW5jdGlvbiBHUyhTKXt2YXIgUj17fSxrPVMuY29udGVu'@;
put 'dDtpZihrLmw9MjgsUi5BbnNpVXNlclR5cGU9ay5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSxSLkFuc2lDbGlwYm9hcmRGb3JtYXQ9ZnVuY3Rpb24geTAoUyl7cmV0dXJuIFB3KFMsMSl9KGspLGsubGVuZ3RoLWsubDw9NClyZXR1cm4gUjt2YXIgRz1rLnJlYWRfc2hpZnQoNCk7aWYoMD09'@;
put 'R3x8Rz40MHx8KGsubC09NCxSLlJlc2VydmVkMT1rLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpLGsubGVuZ3RoLWsubDw9NCl8fDE5MDc1MDU2NTIhPT0oRz1rLnJlYWRfc2hpZnQoNCkpfHwoUi5Vbmljb2RlQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIFQ2KFMpe3JldHVybiBQdyhTLDIp'@;
put 'fShrKSwwPT0oRz1rLnJlYWRfc2hpZnQoNCkpfHxHPjQwKSlyZXR1cm4gUjtrLmwtPTQsUi5SZXNlcnZlZDI9ay5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpfShrKSxSLmJvb2tQcm9wcyYmIVIuYm9va1NoZWV0cylRPXt9O2Vsc2V7dmFyIGdlPVRlPyJidWZmZXIiOiJhcnJheSI7aWYoRyYmRy5j'@;
put 'b250ZW50KVE9ZnVuY3Rpb24gUHooUyxSKXt2YXIgaz17b3B0czp7fX0sRz17fTtudWxsIT1sZSYmbnVsbD09Ui5kZW5zZSYmKFIuZGVuc2U9bGUpO3ZhciBZZSxjdCxvdCxidCxPdCxLdCxRPVIuZGVuc2U/W106e30sYWU9e30sZ2U9e30scGU9bnVsbCx5ZT1bXSxQZT0iIixOZT17fSxldD0i'@;
put 'IixqdD17fSxrdD1bXSxUbj1bXSxycj1bXSxTbj17U2hlZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfSxWaWV3czpbe31dfSxscj17fSxYbj17Rm9udHM6W119LFZuPWZ1bmN0aW9uKERpKXtyZXR1cm4gRGk8OD9uMFtEaV06RGk8NjQmJnJyW0RpLThdfHxuMFtEaV19LGhyPWZ1bmN0aW9u'@;
put 'KERpLHNzKXt2YXIgeGwsWWE9RGkuWEYuZGF0YTtZYSYmKFlhLnBhdHRlcm5UeXBlfHxudWxsIT1ZYS5pY3ZGb3JlKSYmc3MmJnNzLmNlbGxTdHlsZXMmJihEaS5zPXt9LERpLnMucGF0dGVyblR5cGU9WWEucGF0dGVyblR5cGUsRGkuWEYuZm9udCYmUHQoRGkucyxEaS5YRi5mb250KSxZYS5m'@;
put 'V3JhcCYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkud3JhcFRleHQ9ITApLFlhLmZTaHJpbmtUb0ZpdCYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkuc2hyaW5rVG9GaXQ9ITApLFlhLmhhbGlnbiYmKChEaS5zLmFsaWdubWVudHx8KERpLnMu'@;
put 'YWxpZ25tZW50PXt9KSkuaG9yaXpvbnRhbD1ZYS5oYWxpZ24pLFlhLnZhbGlnbiYmKChEaS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkudmVydGljYWw9WWEudmFsaWduKSxZYS5jSW5kZW50JiYoKERpLnMuYWxpZ25tZW50fHwoRGkucy5hbGlnbm1lbnQ9e30pKS5pbmRlbnQ9'@;
put 'WWEuY0luZGVudCksNjQhPVlhLmljdkZvcmUmJjY1IT1ZYS5pY3ZCYWNrJiYoKHhsPWZkKFZuKFlhLmljdkZvcmUpKSkmJihEaS5zLmZnQ29sb3I9e3JnYjp4bH0pLCh4bD1mZChWbihZYS5pY3ZCYWNrKSkpJiYoRGkucy5iZ0NvbG9yPXtyZ2I6eGx9KSksWyJMZWZ0IiwiUmlnaHQiLCJUb3Ai'@;
put 'LCJCb3R0b20iXS5mb3JFYWNoKGZ1bmN0aW9uKHl1KXtZYVsiZGciK3l1XSYmKERpLnNbeXUudG9Mb3dlckNhc2UoKV09e3N0eWxlOmdkW1lhWyJkZyIreXVdXSxjb2xvcjp7cmdiOmZkKFZuKFlhWyJpY3YiK3l1XSkpfX0pfSkpfSxicj1mdW5jdGlvbihEaSxzcyxZYSl7aWYoIShaaT4xfHxZ'@;
put 'YS5zaGVldFJvd3MmJkRpLnI+PVlhLnNoZWV0Um93cykpe2lmKFlhLmNlbGxTdHlsZXMmJnNzLlhGJiZzcy5YRi5kYXRhJiZocihzcyxZYSksZGVsZXRlIHNzLml4ZmUsZGVsZXRlIHNzLlhGLFllPURpLGV0PXFpKERpKSwoIWdlfHwhZ2Uuc3x8IWdlLmUpJiYoZ2U9e3M6e3I6MCxjOjB9LGU6'@;
put 'e3I6MCxjOjB9fSksRGkucjxnZS5zLnImJihnZS5zLnI9RGkuciksRGkuYzxnZS5zLmMmJihnZS5zLmM9RGkuYyksRGkucisxPmdlLmUuciYmKGdlLmUucj1EaS5yKzEpLERpLmMrMT5nZS5lLmMmJihnZS5lLmM9RGkuYysxKSxZYS5jZWxsRm9ybXVsYSYmc3MuZilmb3IodmFyIHhsPTA7eGw8'@;
put 'a3QubGVuZ3RoOysreGwpaWYoIShrdFt4bF1bMF0ucy5jPkRpLmN8fGt0W3hsXVswXS5zLnI+RGkucnx8a3RbeGxdWzBdLmUuYzxEaS5jfHxrdFt4bF1bMF0uZS5yPERpLnIpKXtzcy5GPWlvKGt0W3hsXVswXSksKGt0W3hsXVswXS5zLmMhPURpLmN8fGt0W3hsXVswXS5zLnIhPURpLnIpJiZk'@;
put 'ZWxldGUgc3MuZixzcy5mJiYoc3MuZj0iIithMChrdFt4bF1bMV0sZ2UsRGksRm4sZXIpKTticmVha31ZYS5kZW5zZT8oUVtEaS5yXXx8KFFbRGkucl09W10pLFFbRGkucl1bRGkuY109c3MpOlFbZXRdPXNzfX0sZXI9e2VuYzohMSxzYmNjaDowLHNuYW1lczpbXSxzaGFyZWRmOmp0LGFycmF5'@;
put 'ZjprdCxycnRhYmlkOltdLGxhc3R1c2VyOiIiLGJpZmY6OCxjb2RlcGFnZTowLHdpbmxvY2tlZDowLGNlbGxTdHlsZXM6ISFSJiYhIVIuY2VsbFN0eWxlcyxXVEY6ISFSJiYhIVIud3RmfTtlci5wYXNzd29yZD1SLnBhc3N3b3JkP1IucGFzc3dvcmQ6IlZlbHZldFN3ZWF0c2hvcCI7dmFyIEZp'@;
put 'LENpPW51bGwscm89W10sdW89W10sTGk9W10sa3I9W10sX3I9ITEsRm49W107Rm4uU2hlZXROYW1lcz1lci5zbmFtZXMsRm4uc2hhcmVkZj1lci5zaGFyZWRmLEZuLmFycmF5Zj1lci5hcnJheWYsRm4ubmFtZXM9W10sRm4uWFRJPVtdO3ZhciBvbyxqcj0iIixaaT0wLHlpPTAsd289W10sc2E9'@;
put 'W107ZXIuY29kZXBhZ2U9MTIwMCxVKDEyMDApO2Zvcih2YXIgTGE9ITE7Uy5sPFMubGVuZ3RoLTE7KXt2YXIgUG89Uy5sLGhhPVMucmVhZF9zaGlmdCgyKTtpZihlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDBdKSwiaGVhZGVyLTAiKSwwPT09aGEmJiJF'@;
put 'T0YiPT09anIpYnJlYWs7dmFyIEpvPVMubD09PVMubGVuZ3RoPzA6Uy5yZWFkX3NoaWZ0KDIpO2VyJiZlci5lbmMmJmVyLmVuYy5pbnNpdHUmJmVyLmVuYy5pbnNpdHUoU2UoWzAsMF0pLCJsZW5ndGgtMCIpO3ZhciBCaT1LU1toYV07aWYoQmkmJkJpLmYpe2lmKFIuYm9va1NoZWV0cyYmIkJv'@;
put 'dW5kU2hlZXQ4Ij09PWpyJiYiQm91bmRTaGVldDgiIT09QmkubilicmVhaztpZihqcj1CaS5uLDI9PT1CaS5yfHwxMj09Qmkucil7dmFyIElzPVMucmVhZF9zaGlmdCgyKTtpZihKby09MixlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDBdKSksIWVyLmVu'@;
put 'YyYmSXMhPT1oYSYmKCgyNTUmSXMpPDw4fElzPj44KSE9PWhhKXRocm93IG5ldyBFcnJvcigicnQgbWlzbWF0Y2g6ICIrSXMrIiE9IitoYSk7MTI9PUJpLnImJihTLmwrPTEwLEpvLT0xMCxlciYmZXIuZW5jJiZlci5lbmMuaW5zaXR1JiZlci5lbmMuaW5zaXR1KFNlKFswLDAsMCwwLDAsMCww'@;
put 'LDAsMCwwXSkpKX12YXIgUG49Q0koQmksUyxKbyxlciksV2E9QmkubjtpZigwPT1aaSYmIkJPRiIhPVdhKWNvbnRpbnVlO3N3aXRjaChXYSl7Y2FzZSJEYXRlMTkwNCI6ay5vcHRzLkRhdGUxOTA0PVNuLldCUHJvcHMuZGF0ZTE5MDQ9UG47YnJlYWs7Y2FzZSJXcml0ZVByb3RlY3QiOmsub3B0'@;
put 'cy5Xcml0ZVByb3RlY3Q9ITA7YnJlYWs7Y2FzZSJGaWxlUGFzcyI6aWYoZXIuZW5jfHwoUy5sPTAsWmk9MCksZXIuZW5jPVBuLCFSLnBhc3N3b3JkJiZudWxsPT1Qbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMgcGFzc3dvcmQtcHJvdGVjdGVkIik7aWYobnVsbD09UG4udmFsaWQp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIHNjaGVtZSB1bnN1cHBvcnRlZCIpO2lmKCFQbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIlBhc3N3b3JkIGlzIGluY29ycmVjdCIpO2JyZWFrO2Nhc2UiV3JpdGVBY2Nlc3MiOmVyLmxhc3R1c2VyPVBuO2JyZWFrO2Nhc2UiRmlsZVNoYXJpbmci'@;
put 'OmNhc2UiVGVtcGxhdGUiOmNhc2UiQm9va0Jvb2wiOmNhc2UiVXNlc0VMRnMiOmNhc2UiTVRSU2V0dGluZ3MiOmNhc2UiVW5jYWxjZWQiOmNhc2UiRXh0U1NUIjpjYXNlIkJvb2tFeHQiOmNhc2UiUmljaFRleHRTdHJlYW0iOmNhc2UiQmtIaW0iOmNhc2UiSW5kZXgiOmNhc2UiUHJvdDRSZXYi'@;
put 'OmNhc2UiUHJvdDRSZXZQYXNzIjpicmVhaztjYXNlIkNvZGVQYWdlIjp2YXIgZnI9TnVtYmVyKFBuKTtzd2l0Y2goZnIpe2Nhc2UgMjEwMTA6ZnI9MTIwMDticmVhaztjYXNlIDMyNzY4OmZyPTFlNDticmVhaztjYXNlIDMyNzY5OmZyPTEyNTJ9VShlci5jb2RlcGFnZT1mciksTGE9ITA7YnJl'@;
put 'YWs7Y2FzZSJSUlRhYklkIjplci5ycnRhYmlkPVBuO2JyZWFrO2Nhc2UiV2luUHJvdGVjdCI6ZXIud2lubG9ja2VkPVBuO2JyZWFrO2Nhc2UiUmVmcmVzaEFsbCI6Y2FzZSJDYWxjQ291bnQiOmNhc2UiQ2FsY0RlbHRhIjpjYXNlIkNhbGNJdGVyIjpjYXNlIkNhbGNNb2RlIjpjYXNlIkNhbGNQ'@;
put 'cmVjaXNpb24iOmNhc2UiQ2FsY1NhdmVSZWNhbGMiOmsub3B0c1tXYV09UG47YnJlYWs7Y2FzZSJDYWxjUmVmTW9kZSI6ZXIuQ2FsY1JlZk1vZGU9UG47YnJlYWs7Y2FzZSJGb3JjZUZ1bGxDYWxjdWxhdGlvbiI6ay5vcHRzLkZ1bGxDYWxjPVBuO2JyZWFrO2Nhc2UiV3NCb29sIjpQbi5mRGlh'@;
put 'bG9nJiYoUVsiIXR5cGUiXT0iZGlhbG9nIiksUG4uZkJlbG93fHwoKFFbIiFvdXRsaW5lIl18fChRWyIhb3V0bGluZSJdPXt9KSkuYWJvdmU9ITApLFBuLmZSaWdodHx8KChRWyIhb3V0bGluZSJdfHwoUVsiIW91dGxpbmUiXT17fSkpLmxlZnQ9ITApO2JyZWFrO2Nhc2UiWEYiOlBuLmZvbnQ9'@;
put 'WG4uRm9udHNbUG4uaWZudDw0P1BuLmlmbnQ6UG4uaWZudC0xXSxUbi5wdXNoKFBuKTticmVhaztjYXNlIlN1cEJvb2siOkZuLnB1c2goW1BuXSksRm5bRm4ubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIkV4dGVybk5hbWUiOkZuW0ZuLmxlbmd0aC0xXS5wdXNoKFBuKTticmVhaztjYXNl'@;
put 'IkxibCI6b289e05hbWU6UG4uTmFtZSxSZWY6YTAoUG4ucmdjZSxnZSxudWxsLEZuLGVyKX0sUG4uaXRhYj4wJiYob28uU2hlZXQ9UG4uaXRhYi0xKSxGbi5uYW1lcy5wdXNoKG9vKSxGblswXXx8KEZuWzBdPVtdLEZuWzBdLlhUST1bXSksRm5bRm4ubGVuZ3RoLTFdLnB1c2goUG4pLCJfeGxu'@;
put 'bS5fRmlsdGVyRGF0YWJhc2UiPT1Qbi5OYW1lJiZQbi5pdGFiPjAmJlBuLnJnY2UmJlBuLnJnY2VbMF0mJlBuLnJnY2VbMF1bMF0mJiJQdGdBcmVhM2QiPT1Qbi5yZ2NlWzBdWzBdWzBdJiYoc2FbUG4uaXRhYi0xXT17cmVmOmlvKFBuLnJnY2VbMF1bMF1bMV1bMl0pfSk7YnJlYWs7Y2FzZSJF'@;
put 'eHRlcm5Db3VudCI6ZXIuRXh0ZXJuQ291bnQ9UG47YnJlYWs7Y2FzZSJFeHRlcm5TaGVldCI6MD09Rm4ubGVuZ3RoJiYoRm5bMF09W10sRm5bMF0uWFRJPVtdKSxGbltGbi5sZW5ndGgtMV0uWFRJPUZuW0ZuLmxlbmd0aC0xXS5YVEkuY29uY2F0KFBuKSxGbi5YVEk9Rm4uWFRJLmNvbmNhdChQ'@;
put 'bik7YnJlYWs7Y2FzZSJOYW1lQ210IjppZihlci5iaWZmPDgpYnJlYWs7bnVsbCE9b28mJihvby5Db21tZW50PVBuWzFdKTticmVhaztjYXNlIlByb3RlY3QiOlFbIiFwcm90ZWN0Il09UG47YnJlYWs7Y2FzZSJQYXNzd29yZCI6MCE9PVBuJiZlci5XVEYmJmNvbnNvbGUuZXJyb3IoIlBhc3N3'@;
put 'b3JkIHZlcmlmaWVyOiAiK1BuKTticmVhaztjYXNlIkJvdW5kU2hlZXQ4IjphZVtQbi5wb3NdPVBuLGVyLnNuYW1lcy5wdXNoKFBuLm5hbWUpO2JyZWFrO2Nhc2UiRU9GIjppZihRWyIhZ3JpZGxpbmVzIl09IUNpfHxDaS5ncmlkLENpPW51bGwsLS1aaSlicmVhaztpZihnZS5lKXtpZihnZS5l'@;
put 'LnI+MCYmZ2UuZS5jPjApe2lmKGdlLmUuci0tLGdlLmUuYy0tLFFbIiFyZWYiXT1pbyhnZSksUi5zaGVldFJvd3MmJlIuc2hlZXRSb3dzPD1nZS5lLnIpe3ZhciBYbD1nZS5lLnI7Z2UuZS5yPVIuc2hlZXRSb3dzLTEsUVsiIWZ1bGxyZWYiXT1RWyIhcmVmIl0sUVsiIXJlZiJdPWlvKGdlKSxn'@;
put 'ZS5lLnI9WGx9Z2UuZS5yKyssZ2UuZS5jKyt9cm8ubGVuZ3RoPjAmJihRWyIhbWVyZ2VzIl09cm8pLHVvLmxlbmd0aD4wJiZTSSh1byxRLFhuKSxMaS5sZW5ndGg+MCYmKFFbIiFjb2xzIl09TGkpLGtyLmxlbmd0aD4wJiYoUVsiIXJvd3MiXT1rciksU24uU2hlZXRzLnB1c2gobHIpfSIiPT09'@;
put 'UGU/TmU9UTpHW1BlXT1RLFE9Ui5kZW5zZT9bXTp7fTticmVhaztjYXNlIkJPRiI6aWYoOD09PWVyLmJpZmYmJihlci5iaWZmPXs5OjIsNTIxOjMsMTAzMzo0fVtoYV18fHs1MTI6Miw3Njg6MywxMDI0OjQsMTI4MDo1LDE1MzY6OCwyOjIsNzoyfVtQbi5CSUZGVmVyXXx8OCksZXIuYmlmZmd1'@;
put 'ZXNzPTA9PVBuLkJJRkZWZXIsMD09UG4uQklGRlZlciYmNDA5Nj09UG4uZHQmJihlci5iaWZmPTUsTGE9ITAsVShlci5jb2RlcGFnZT0yODU5MSkpLDg9PWVyLmJpZmYmJjA9PVBuLkJJRkZWZXImJjE2PT1Qbi5kdCYmKGVyLmJpZmY9MiksWmkrKylicmVhaztpZihRPVIuZGVuc2U/W106e30s'@;
put 'ZXIuYmlmZjw4JiYhTGEmJihMYT0hMCxVKGVyLmNvZGVwYWdlPVIuY29kZXBhZ2V8fDEyNTIpKSxlci5iaWZmPDV8fDA9PVBuLkJJRkZWZXImJjQwOTY9PVBuLmR0KXsiIj09PVBlJiYoUGU9IlNoZWV0MSIpLGdlPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07dmFyIFdsPXtwb3M6Uy5sLUpv'@;
put 'LG5hbWU6UGV9O2FlW1dsLnBvc109V2wsZXIuc25hbWVzLnB1c2goUGUpfWVsc2UgUGU9KGFlW1BvXXx8e25hbWU6IiJ9KS5uYW1lOzMyPT1Qbi5kdCYmKFFbIiF0eXBlIl09ImNoYXJ0IiksNjQ9PVBuLmR0JiYoUVsiIXR5cGUiXT0ibWFjcm8iKSxybz1bXSx1bz1bXSxlci5hcnJheWY9a3Q9'@;
put 'W10sTGk9W10sa3I9W10sX3I9ITEsbHI9e0hpZGRlbjooYWVbUG9dfHx7aHM6MH0pLmhzLG5hbWU6UGV9O2JyZWFrO2Nhc2UiTnVtYmVyIjpjYXNlIkJJRkYyTlVNIjpjYXNlIkJJRkYySU5UIjoiY2hhcnQiPT1RWyIhdHlwZSJdJiYoUi5kZW5zZT8oUVtQbi5yXXx8W10pW1BuLmNdOlFbcWko'@;
put 'e2M6UG4uYyxyOlBuLnJ9KV0pJiYrK1BuLmMsT3Q9e2l4ZmU6UG4uaXhmZSxYRjpUbltQbi5peGZlXXx8e30sdjpQbi52YWwsdDoibiJ9LHlpPjAmJihPdC56PXdvW090Lml4ZmU+PjgmNjNdKSxoaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6UG4uYyxyOlBuLnJ9LE90LFIpO2JyZWFr'@;
put 'O2Nhc2UiQm9vbEVyciI6T3Q9e2l4ZmU6UG4uaXhmZSxYRjpUbltQbi5peGZlXSx2OlBuLnZhbCx0OlBuLnR9LHlpPjAmJihPdC56PXdvW090Lml4ZmU+PjgmNjNdKSxoaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6UG4uYyxyOlBuLnJ9LE90LFIpO2JyZWFrO2Nhc2UiUksiOk90PXtp'@;
put 'eGZlOlBuLml4ZmUsWEY6VG5bUG4uaXhmZV0sdjpQbi5ya251bSx0OiJuIn0seWk+MCYmKE90Lno9d29bT3QuaXhmZT4+OCY2M10pLGhoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3QsUik7YnJlYWs7Y2FzZSJNdWxSayI6Zm9yKHZhciBZbD1Qbi5jO1lsPD1Q'@;
put 'bi5DOysrWWwpe3ZhciBidT1Qbi5ya3JlY1tZbC1Qbi5jXVswXTtPdD17aXhmZTpidSxYRjpUbltidV0sdjpQbi5ya3JlY1tZbC1Qbi5jXVsxXSx0OiJuIn0seWk+MCYmKE90Lno9d29bT3QuaXhmZT4+OCY2M10pLGhoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpZbCxyOlBuLnJ9LE90'@;
put 'LFIpfWJyZWFrO2Nhc2UiRm9ybXVsYSI6aWYoIlN0cmluZyI9PVBuLnZhbCl7cGU9UG47YnJlYWt9aWYoKE90PUk4KFBuLnZhbCxQbi5jZWxsLml4ZmUsUG4udHQpKS5YRj1UbltPdC5peGZlXSxSLmNlbGxGb3JtdWxhKXt2YXIgTWw9UG4uZm9ybXVsYTtpZihNbCYmTWxbMF0mJk1sWzBdWzBd'@;
put 'JiYiUHRnRXhwIj09TWxbMF1bMF1bMF0pe3ZhciBsbj1NbFswXVswXVsxXVswXSxFbj1NbFswXVswXVsxXVsxXSxVbj1xaSh7cjpsbixjOkVufSk7anRbVW5dP090LmY9IiIrYTAoUG4uZm9ybXVsYSxnZSxQbi5jZWxsLEZuLGVyKTpPdC5GPSgoUi5kZW5zZT8oUVtsbl18fFtdKVtFbl06UVtV'@;
put 'bl0pfHx7fSkuRn1lbHNlIE90LmY9IiIrYTAoUG4uZm9ybXVsYSxnZSxQbi5jZWxsLEZuLGVyKX15aT4wJiYoT3Quej13b1tPdC5peGZlPj44JjYzXSksaGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKFBuLmNlbGwsT3QsUikscGU9UG47YnJlYWs7Y2FzZSJTdHJpbmciOmlmKCFwZSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIlN0cmluZyByZWNvcmQgZXhwZWN0cyBGb3JtdWxhIik7cGUudmFsPVBuLChPdD1JOChQbixwZS5jZWxsLml4ZmUsInMiKSkuWEY9VG5bT3QuaXhmZV0sUi5jZWxsRm9ybXVsYSYmKE90LmY9IiIrYTAocGUuZm9ybXVsYSxnZSxwZS5jZWxsLEZuLGVyKSkseWk+MCYmKE90'@;
put 'Lno9d29bT3QuaXhmZT4+OCY2M10pLGhoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicihwZS5jZWxsLE90LFIpLHBlPW51bGw7YnJlYWs7Y2FzZSJBcnJheSI6a3QucHVzaChQbik7dmFyIFNpPXFpKFBuWzBdLnMpO2lmKGN0PVIuZGVuc2U/KFFbUG5bMF0ucy5yXXx8W10pW1BuWzBdLnMuY106'@;
put 'UVtTaV0sUi5jZWxsRm9ybXVsYSYmY3Qpe2lmKCFwZXx8IVNpfHwhY3QpYnJlYWs7Y3QuZj0iIithMChQblsxXSxnZSxQblswXSxGbixlciksY3QuRj1pbyhQblswXSl9YnJlYWs7Y2FzZSJTaHJGbWxhIjppZighUi5jZWxsRm9ybXVsYSlicmVhaztpZihldCl7aWYoIXBlKWJyZWFrO2p0W3Fp'@;
put 'KHBlLmNlbGwpXT1QblswXSwoKGN0PVIuZGVuc2U/KFFbcGUuY2VsbC5yXXx8W10pW3BlLmNlbGwuY106UVtxaShwZS5jZWxsKV0pfHx7fSkuZj0iIithMChQblswXSxnZSxZZSxGbixlcil9YnJlYWs7Y2FzZSJMYWJlbFNzdCI6T3Q9STgoeWVbUG4uaXNzdF0udCxQbi5peGZlLCJzIikseWVb'@;
put 'UG4uaXNzdF0uaCYmKE90Lmg9eWVbUG4uaXNzdF0uaCksT3QuWEY9VG5bT3QuaXhmZV0seWk+MCYmKE90Lno9d29bT3QuaXhmZT4+OCY2M10pLGhoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxicih7YzpQbi5jLHI6UG4ucn0sT3QsUikseWVbUG4uaXNzdF0uUiYmKE90LlI9eWVbUG4uaXNzdF0u'@;
put 'Ui5tYXAoZnVuY3Rpb24obW8pe3ZhciBEaT1xdChtbyk7cmV0dXJuIG1vLnM9PVhuLkZvbnRzWzBdJiYoRGkucz1PdC5zKSxEaX0pKTticmVhaztjYXNlIkJsYW5rIjpSLnNoZWV0U3R1YnMmJihPdD17aXhmZTpQbi5peGZlLFhGOlRuW1BuLml4ZmVdLHQ6InoifSx5aT4wJiYoT3Quej13b1tP'@;
put 'dC5peGZlPj44JjYzXSksaGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlBuLmMscjpQbi5yfSxPdCxSKSk7YnJlYWs7Y2FzZSJNdWxCbGFuayI6aWYoUi5zaGVldFN0dWJzKWZvcih2YXIgYXI9UG4uYzthcjw9UG4uQzsrK2FyKXt2YXIgT2k9UG4uaXhmZVthci1Qbi5jXTtPdD17aXhm'@;
put 'ZTpPaSxYRjpUbltPaV0sdDoieiJ9LHlpPjAmJihPdC56PXdvW090Lml4ZmU+PjgmNjNdKSxoaChPdCxSLGsub3B0cy5EYXRlMTkwNCksYnIoe2M6YXIscjpQbi5yfSxPdCxSKX1icmVhaztjYXNlIlJTdHJpbmciOmNhc2UiTGFiZWwiOmNhc2UiQklGRjJTVFIiOihPdD1JOChQbi52YWwsUG4u'@;
put 'aXhmZSwicyIpKS5YRj1UbltPdC5peGZlXSx5aT4wJiYoT3Quej13b1tPdC5peGZlPj44JjYzXSksaGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGJyKHtjOlBuLmMscjpQbi5yfSxPdCxSKTticmVhaztjYXNlIkRpbWVuc2lvbnMiOjE9PT1aaSYmKGdlPVBuKTticmVhaztjYXNlIlNTVCI6KHll'@;
put 'PVBuKS5mb3JFYWNoKGZ1bmN0aW9uKG1vKXttby5fUj8obW8uX1JbMF0mJm1vLl9SWzBdLmlkeD4wJiZtby5fUi51bnNoaWZ0KHtpZHg6MCxpZm50OjB9KSxtby5SPW1vLl9SLm1hcChmdW5jdGlvbihEaSxzcyl7cmV0dXJue3Q6InMiLHY6bW8udC5zbGljZShEaS5pZHgsKG1vLl9SW3NzKzFd'@;
put 'fHx7fSkuaWR4KSxzOlhuLkZvbnRzW0RpLmlmbnQ8ND9EaS5pZm50OkRpLmlmbnQtMV19fSksUi5jZWxsSFRNTCYmKG1vLmg9SHUobW8uUikpKTpSLmNlbGxIVE1MJiYobW8uaD1jbyhtby50KSksZGVsZXRlIG1vLl9SfSk7YnJlYWs7Y2FzZSJGb3JtYXQiOmlmKDQ9PWVyLmJpZmYpe3dvW3lp'@;
put 'KytdPVBuWzFdO2Zvcih2YXIgU3I9MDtTcjx5aSsxNjMmJkEuX3RhYmxlW1NyXSE9UG5bMV07KytTcik7U3I+PTE2MyYmQS5sb2FkKFBuWzFdLHlpKzE2Myl9ZWxzZSBBLmxvYWQoUG5bMV0sUG5bMF0pO2JyZWFrO2Nhc2UiQklGRjJGT1JNQVQiOndvW3lpKytdPVBuO2Zvcih2YXIgUGk9MDtQ'@;
put 'aTx5aSsxNjMmJkEuX3RhYmxlW1BpXSE9UG47KytQaSk7UGk+PTE2MyYmQS5sb2FkKFBuLHlpKzE2Myk7YnJlYWs7Y2FzZSJNZXJnZUNlbGxzIjpybz1yby5jb25jYXQoUG4pO2JyZWFrO2Nhc2UiT2JqIjp1b1tQbi5jbW9bMF1dPWVyLmxhc3RvYmo9UG47YnJlYWs7Y2FzZSJUeE8iOmVyLmxh'@;
put 'c3RvYmouVHhPPVBuO2JyZWFrO2Nhc2UiSW1EYXRhIjplci5sYXN0b2JqLkltRGF0YT1QbjticmVhaztjYXNlIkhMaW5rIjpmb3IoYnQ9UG5bMF0ucy5yO2J0PD1QblswXS5lLnI7KytidClmb3Iob3Q9UG5bMF0ucy5jO290PD1QblswXS5lLmM7KytvdCkoY3Q9Ui5kZW5zZT8oUVtidF18fFtd'@;
put 'KVtvdF06UVtxaSh7YzpvdCxyOmJ0fSldKSYmKGN0Lmw9UG5bMV0pO2JyZWFrO2Nhc2UiSExpbmtUb29sdGlwIjpmb3IoYnQ9UG5bMF0ucy5yO2J0PD1QblswXS5lLnI7KytidClmb3Iob3Q9UG5bMF0ucy5jO290PD1QblswXS5lLmM7KytvdCkoY3Q9Ui5kZW5zZT8oUVtidF18fFtdKVtvdF06'@;
put 'UVtxaSh7YzpvdCxyOmJ0fSldKSYmY3QubCYmKGN0LmwuVG9vbHRpcD1QblsxXSk7YnJlYWs7Y2FzZSJOb3RlIjppZihlci5iaWZmPD01JiZlci5iaWZmPj0yKWJyZWFrO2N0PVIuZGVuc2U/KFFbUG5bMF0ucl18fFtdKVtQblswXS5jXTpRW3FpKFBuWzBdKV07dmFyIFdvPXVvW1BuWzJdXTtj'@;
put 'dHx8KFIuZGVuc2U/KFFbUG5bMF0ucl18fChRW1BuWzBdLnJdPVtdKSxjdD1RW1BuWzBdLnJdW1BuWzBdLmNdPXt0OiJ6In0pOmN0PVFbcWkoUG5bMF0pXT17dDoieiJ9LGdlLmUucj1NYXRoLm1heChnZS5lLnIsUG5bMF0uciksZ2Uucy5yPU1hdGgubWluKGdlLnMucixQblswXS5yKSxnZS5l'@;
put 'LmM9TWF0aC5tYXgoZ2UuZS5jLFBuWzBdLmMpLGdlLnMuYz1NYXRoLm1pbihnZS5zLmMsUG5bMF0uYykpLGN0LmN8fChjdC5jPVtdKSxjdC5jLnB1c2goe2E6UG5bMV0sdDpXby5UeE8udH0pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKEJpLm4pe2Nhc2UiQ2xydENsaWVudCI6Y2FzZSJIZWFkZXIi'@;
put 'OmNhc2UiRm9vdGVyIjpjYXNlIkhDZW50ZXIiOmNhc2UiVkNlbnRlciI6Y2FzZSJQbHMiOmNhc2UiR0NXIjpjYXNlIkxIUmVjb3JkIjpjYXNlIkRCQ2VsbCI6Y2FzZSJFbnRFeFUyIjpjYXNlIlN4VmlldyI6Y2FzZSJTeHZkIjpjYXNlIlNYVkkiOmNhc2UiU1hWREV4IjpjYXNlIlN4SXZkIjpj'@;
put 'YXNlIlNYU3RyaW5nIjpjYXNlIlN5bmMiOmNhc2UiQWRkaW4iOmNhc2UiU1hESSI6Y2FzZSJTWExJIjpjYXNlIlNYRXgiOmNhc2UiUXNpU1hUYWciOmNhc2UiRmVhdCI6Y2FzZSJGZWF0SGRyIjpjYXNlIkZlYXRIZHIxMSI6Y2FzZSJGZWF0dXJlMTEiOmNhc2UiRmVhdHVyZTEyIjpjYXNlIkxp'@;
put 'c3QxMiI6Y2FzZSJSZWNhbGNJZCI6Y2FzZSJEeEdDb2wiOmNhc2UiRmJpIjpjYXNlIkZiaTIiOmNhc2UiR2VsRnJhbWUiOmNhc2UiWEZDUkMiOmNhc2UiU3R5bGUiOmNhc2UiU3R5bGVFeHQiOmNhc2UiU2NlbmFyaW9Qcm90ZWN0IjpjYXNlIk9ialByb3RlY3QiOmNhc2UiQ29uZEZtdDEyIjpj'@;
put 'YXNlIlRhYmxlIjpjYXNlIlRhYmxlU3R5bGVzIjpjYXNlIlRhYmxlU3R5bGUiOmNhc2UiVGFibGVTdHlsZUVsZW1lbnQiOmNhc2UiU1hTdHJlYW1JRCI6Y2FzZSJTWFZTIjpjYXNlIkRDb25SZWYiOmNhc2UiU1hBZGRsIjpjYXNlIkRDb25CaW4iOmNhc2UiRENvbk5hbWUiOmNhc2UiU1hQSSI6'@;
put 'Y2FzZSJTeEZvcm1hdCI6Y2FzZSJTeFNlbGVjdCI6Y2FzZSJTeFJ1bGUiOmNhc2UiU3hGaWx0IjpjYXNlIlN4SXRtIjpjYXNlIlN4RFhGIjpjYXNlIlNjZW5NYW4iOmNhc2UiRENvbiI6Y2FzZSJDZWxsV2F0Y2giOmNhc2UiUHJpbnRSb3dDb2wiOmNhc2UiUHJpbnRHcmlkIjpjYXNlIlByaW50'@;
put 'U2l6ZSI6Y2FzZSJYQ1QiOmNhc2UiQ1JOIjpjYXNlIlNjbCI6Y2FzZSJTaGVldEV4dCI6Y2FzZSJTaGVldEV4dE9wdGlvbmFsIjpjYXNlIk9iTm9NYWNyb3MiOmNhc2UiT2JQcm9qIjpjYXNlIkdVSURUeXBlTGliIjpjYXNlIldPcHQiOmNhc2UiUGhvbmV0aWNJbmZvIjpjYXNlIk9sZU9iamVj'@;
put 'dFNpemUiOmNhc2UiRFhGIjpjYXNlIkRYRk4iOmNhc2UiRFhGTjEyIjpjYXNlIkRYRk4xMkxpc3QiOmNhc2UiRFhGTjEyTm9DQiI6Y2FzZSJEdiI6Y2FzZSJEVmFsIjpjYXNlIkJSQUkiOmNhc2UiU2VyaWVzIjpjYXNlIlNlcmllc1RleHQiOmNhc2UiRENvbm4iOmNhc2UiRGJPclBhcmFtUXJ5'@;
put 'IjpjYXNlIkRCUXVlcnlFeHQiOmNhc2UiT2xlRGJDb25uIjpjYXNlIkV4dFN0cmluZyI6Y2FzZSJJRm10UmVjb3JkIjpjYXNlIkNvbmRGbXQiOmNhc2UiQ0YiOmNhc2UiQ0YxMiI6Y2FzZSJDRkV4IjpjYXNlIkV4Y2VsOUZpbGUiOmNhc2UiVW5pdHMiOmNhc2UiSW50ZXJmYWNlSGRyIjpjYXNl'@;
put 'Ik1tcyI6Y2FzZSJJbnRlcmZhY2VFbmQiOmNhc2UiRFNGIjpjYXNlIkJ1aWx0SW5Gbkdyb3VwQ291bnQiOmNhc2UiV2luZG93MSI6Y2FzZSJIaWRlT2JqIjpjYXNlIkdyaWRTZXQiOmNhc2UiR3V0cyI6Y2FzZSJVc2VyQlZpZXciOmNhc2UiVXNlclNWaWV3QmVnaW4iOmNhc2UiVXNlclNWaWV3'@;
put 'RW5kIjpjYXNlIkRlZkNvbFdpZHRoIjpjYXNlIkRlZmF1bHRSb3dIZWlnaHQiOmJyZWFrO2Nhc2UiWEZFeHQiOkxrKFRuW1BuLml4ZmVdLFBuLmV4dCk7YnJlYWs7Y2FzZSJDb2xJbmZvIjppZighZXIuY2VsbFN0eWxlcylicmVhaztmb3IoO1BuLmU+PVBuLnM7KUxpW1BuLmUtLV09e3dpZHRo'@;
put 'OlBuLncvMjU2LGxldmVsOlBuLmxldmVsfHwwLGhpZGRlbjohISgxJlBuLmZsYWdzKX0sX3J8fChfcj0hMCksUTAoTGlbUG4uZSsxXSk7YnJlYWs7Y2FzZSJSb3ciOnZhciBIaT17fTtudWxsIT1Qbi5sZXZlbCYmKGtyW1BuLnJdPUhpLEhpLmxldmVsPVBuLmxldmVsKSxQbi5oaWRkZW4mJihr'@;
put 'cltQbi5yXT1IaSxIaS5oaWRkZW49ITApLFBuLmhwdCYmKGtyW1BuLnJdPUhpLEhpLmhwdD1Qbi5ocHQsSGkuaHB4PWxoKFBuLmhwdCkpLFBuLml4ZmUmJihrcltQbi5yXT1IaSxocihPdD17aXhmZTpQbi5peGZlLFhGOlRuW1BuLml4ZmVdfHx7fSx2OjAsdDoibiJ9LFIpLEhpLnM9T3Qucyk7'@;
put 'YnJlYWs7Y2FzZSJMZWZ0TWFyZ2luIjpjYXNlIlJpZ2h0TWFyZ2luIjpjYXNlIlRvcE1hcmdpbiI6Y2FzZSJCb3R0b21NYXJnaW4iOlFbIiFtYXJnaW5zIl18fFgzKFFbIiFtYXJnaW5zIl09e30pLFFbIiFtYXJnaW5zIl1bV2Euc2xpY2UoMCwtNikudG9Mb3dlckNhc2UoKV09UG47YnJlYWs7'@;
put 'Y2FzZSJTZWxlY3Rpb24iOlFbIiFzZWwiXT1QbjticmVhaztjYXNlIlNldHVwIjpRWyIhbWFyZ2lucyJdfHxYMyhRWyIhbWFyZ2lucyJdPXt9KSxRWyIhbWFyZ2lucyJdLmhlYWRlcj1Qbi5oZWFkZXIsUVsiIW1hcmdpbnMiXS5mb290ZXI9UG4uZm9vdGVyO2JyZWFrO2Nhc2UiV2luZG93MiI6'@;
put 'UG4uUlRMJiYoU24uVmlld3NbMF0uUlRMPSEwKSxDaT1QbjticmVhaztjYXNlIkNvdW50cnkiOkt0PVBuO2JyZWFrO2Nhc2UiRm9udCI6UG4uaWN2JiZWbihQbi5pY3YpJiYoUG4uY29sb3I9e3JnYjpmZChWbihQbi5pY3YpKX0pLGRlbGV0ZSBQbi5pY3YsMD09WG4uRm9udHMubGVuZ3RoJiZJ'@;
put 'NChQbiksWG4uRm9udHMucHVzaChQbik7YnJlYWs7Y2FzZSJQYWxldHRlIjpycj1QbjticmVhaztjYXNlIlRoZW1lIjpGaT1QbjticmVhaztjYXNlIkNvZGVOYW1lIjpQZT9sci5Db2RlTmFtZT1Qbnx8bHIubmFtZTpTbi5XQlByb3BzLkNvZGVOYW1lPVBufHwiVGhpc1dvcmtib29rIjticmVh'@;
put 'aztjYXNlIlBhbmUiOihDaXx8e30pLmZyb3plbiYmKFFbIiFmcmVlemUiXT1xaSh7cjpQbi55fHwwLGM6UG4ueHx8MH0pKTticmVhaztkZWZhdWx0OnN3aXRjaChCaS5uKXtjYXNlIkRhdCI6Y2FzZSJCZWdpbiI6Y2FzZSJFbmQiOmNhc2UiU3RhcnRCbG9jayI6Y2FzZSJFbmRCbG9jayI6Y2Fz'@;
put 'ZSJGcmFtZSI6Y2FzZSJBcmVhIjpjYXNlIkF4aXMiOmNhc2UiQXhpc0xpbmUiOmNhc2UiVGljayI6Y2FzZSJBeGVzVXNlZCI6Y2FzZSJDcnRMYXlvdXQxMiI6Y2FzZSJDcnRMYXlvdXQxMkEiOmNhc2UiQ3J0TGluayI6Y2FzZSJDcnRMaW5lIjpjYXNlIkNydE1sRnJ0IjpjYXNlIkNydE1sRnJ0'@;
put 'Q29udGludWUiOmNhc2UiTGluZUZvcm1hdCI6Y2FzZSJBcmVhRm9ybWF0IjpjYXNlIkNoYXJ0IjpjYXNlIkNoYXJ0M2QiOmNhc2UiQ2hhcnQzREJhclNoYXBlIjpjYXNlIkNoYXJ0Rm9ybWF0IjpjYXNlIkNoYXJ0RnJ0SW5mbyI6Y2FzZSJQbG90QXJlYSI6Y2FzZSJQbG90R3Jvd3RoIjpjYXNl'@;
put 'IlNlcmllc0xpc3QiOmNhc2UiU2VyUGFyZW50IjpjYXNlIlNlckF1eFRyZW5kIjpjYXNlIkRhdGFGb3JtYXQiOmNhc2UiU2VyVG9DcnQiOmNhc2UiRm9udFgiOmNhc2UiQ2F0U2VyUmFuZ2UiOmNhc2UiQXhjRXh0IjpjYXNlIlNlckZtdCI6Y2FzZSJTaHRQcm9wcyI6Y2FzZSJEZWZhdWx0VGV4'@;
put 'dCI6Y2FzZSJUZXh0IjpjYXNlIkNhdExhYiI6Y2FzZSJEYXRhTGFiRXh0Q29udGVudHMiOmNhc2UiTGVnZW5kIjpjYXNlIkxlZ2VuZEV4Y2VwdGlvbiI6Y2FzZSJQaWUiOmNhc2UiU2NhdHRlciI6Y2FzZSJQaWVGb3JtYXQiOmNhc2UiTWFya2VyRm9ybWF0IjpjYXNlIlN0YXJ0T2JqZWN0Ijpj'@;
put 'YXNlIkVuZE9iamVjdCI6Y2FzZSJBbFJ1bnMiOmNhc2UiT2JqZWN0TGluayI6Y2FzZSJTSUluZGV4IjpjYXNlIkF0dGFjaGVkTGFiZWwiOmNhc2UiWU11bHQiOmNhc2UiTGluZSI6Y2FzZSJCYXIiOmNhc2UiU3VyZiI6Y2FzZSJBeGlzUGFyZW50IjpjYXNlIlBvcyI6Y2FzZSJWYWx1ZVJhbmdl'@;
put 'IjpjYXNlIlNYVmlld0V4OSI6Y2FzZSJTWFZpZXdMaW5rIjpjYXNlIlBpdm90Q2hhcnRCaXRzIjpjYXNlIlNCYXNlUmVmIjpjYXNlIlRleHRQcm9wc1N0cmVhbSI6Y2FzZSJMbkV4dCI6Y2FzZSJNa3JFeHQiOmNhc2UiQ3J0Q29vcHQiOmNhc2UiUXNpIjpjYXNlIlFzaWYiOmNhc2UiUXNpciI6'@;
put 'Y2FzZSJRc2lTWFRhZyI6Y2FzZSJUeHRRcnkiOmNhc2UiRmlsdGVyTW9kZSI6Y2FzZSJBdXRvRmlsdGVyIjpjYXNlIkF1dG9GaWx0ZXJJbmZvIjpjYXNlIkF1dG9GaWx0ZXIxMiI6Y2FzZSJEcm9wRG93bk9iaklkcyI6Y2FzZSJTb3J0IjpjYXNlIlNvcnREYXRhIjpjYXNlIlNoYXBlUHJvcHNT'@;
put 'dHJlYW0iOmNhc2UiTXNvRHJhd2luZyI6Y2FzZSJNc29EcmF3aW5nR3JvdXAiOmNhc2UiTXNvRHJhd2luZ1NlbGVjdGlvbiI6Y2FzZSJXZWJQdWIiOmNhc2UiQXV0b1dlYlB1YiI6Y2FzZSJIZWFkZXJGb290ZXIiOmNhc2UiSEZQaWN0dXJlIjpjYXNlIlBMViI6Y2FzZSJIb3Jpem9udGFsUGFn'@;
put 'ZUJyZWFrcyI6Y2FzZSJWZXJ0aWNhbFBhZ2VCcmVha3MiOmNhc2UiQmFja3VwIjpjYXNlIkNvbXByZXNzUGljdHVyZXMiOmNhc2UiQ29tcGF0MTIiOmNhc2UiQ29udGludWUiOmNhc2UiQ29udGludWVGcnQxMiI6Y2FzZSJGcnRGb250TGlzdCI6Y2FzZSJGcnRXcmFwcGVyIjpicmVhaztkZWZh'@;
put 'dWx0OnN3aXRjaChCaS5uKXtjYXNlIlRhYklkQ29uZiI6Y2FzZSJSYWRhciI6Y2FzZSJSYWRhckFyZWEiOmNhc2UiRHJvcEJhciI6Y2FzZSJJbnRsIjpjYXNlIkNvb3JkTGlzdCI6Y2FzZSJTZXJBdXhFcnJCYXIiOmNhc2UiQklGRjJGT05UQ0xSIjpjYXNlIkJJRkYyRk1UQ05UIjpjYXNlIkJJ'@;
put 'RkYyRk9OVFhUUkEiOmNhc2UiQklGRjJYRiI6Y2FzZSJCSUZGM1hGIjpjYXNlIkJJRkY0WEYiOmNhc2UiQklGRjJYRklOREVYIjpjYXNlIkJJRkY0Rk1UQ05UIjpjYXNlIkJJRkYyUk9XIjpjYXNlIkJJRkYyV0lORE9XMiI6Y2FzZSJTQ0VOQVJJTyI6Y2FzZSJEQ29uQmluIjpjYXNlIlBpY0Yi'@;
put 'OmNhc2UiRGF0YUxhYkV4dCI6Y2FzZSJMZWwiOmNhc2UiQm9wUG9wIjpjYXNlIkJvcFBvcEN1c3RvbSI6Y2FzZSJSZWFsVGltZURhdGEiOmNhc2UiTmFtZSI6Y2FzZSJMSE5HcmFwaCI6Y2FzZSJGbkdyb3VwTmFtZSI6Y2FzZSJBZGRNZW51IjpjYXNlIkxQciI6Y2FzZSJMaXN0T2JqIjpjYXNl'@;
put 'Ikxpc3RGaWVsZCI6Y2FzZSJSUlNvcnQiOmNhc2UiQmlnTmFtZSI6Y2FzZSJUb29sYmFySGRyIjpjYXNlIlRvb2xiYXJFbmQiOmNhc2UiRERFT2JqTmFtZSI6Y2FzZSJGUlRBcmNoSWQkIjpicmVhaztkZWZhdWx0OmlmKFIuV1RGKXRocm93IlVucmVjb2duaXplZCBSZWNvcmQgIitCaS5ufX19'@;
put 'fX1lbHNlIFMubCs9Sm8sZXImJmVyLmVuYyYmZXIuZW5jLmluc2l0dSYmZXIuZW5jLmluc2l0dShTZSh7bGVuZ3RoOkpvfSkpfXJldHVybiBrLlNoZWV0TmFtZXM9UmUoYWUpLnNvcnQoZnVuY3Rpb24obW8sRGkpe3JldHVybiBOdW1iZXIobW8pLU51bWJlcihEaSl9KS5tYXAoZnVuY3Rpb24o'@;
put 'bW8pe3JldHVybiBhZVttb10ubmFtZX0pLFIuYm9va1NoZWV0c3x8KGsuU2hlZXRzPUcpLCFrLlNoZWV0TmFtZXMubGVuZ3RoJiZOZVsiIXJlZiJdPyhrLlNoZWV0TmFtZXMucHVzaCgiU2hlZXQxIiksay5TaGVldHMmJihrLlNoZWV0cy5TaGVldDE9TmUpKTprLlByZWFtYmxlPU5lLGsuU2hl'@;
put 'ZXRzJiZzYS5mb3JFYWNoKGZ1bmN0aW9uKG1vLERpKXtrLlNoZWV0c1trLlNoZWV0TmFtZXNbRGldXVsiIWF1dG9maWx0ZXIiXT1tb30pLGsuU3RyaW5ncz15ZSxrLlNTRj1BLmdldF90YWJsZSgpLGVyLmVuYyYmKGsuRW5jcnlwdGlvbj1lci5lbmMpLEZpJiYoay5UaGVtZXM9RmkpLGsuTWV0'@;
put 'YWRhdGE9e30sdm9pZCAwIT09S3QmJihrLk1ldGFkYXRhLkNvdW50cnk9S3QpLEZuLm5hbWVzLmxlbmd0aD4wJiYoU24uTmFtZXM9Rm4ubmFtZXMpLGsuV29ya2Jvb2s9U24sa30oRy5jb250ZW50LFIpO2Vsc2UgaWYoKGFlPXZlLmZpbmQoUywiUGVyZmVjdE9mZmljZV9NQUlOIikpJiZhZS5j'@;
put 'b250ZW50KVE9a3YudG9fd29ya2Jvb2soYWUuY29udGVudCwoUi50eXBlPWdlLFIpKTtlbHNle2lmKCEoYWU9dmUuZmluZChTLCJOYXRpdmVDb250ZW50X01BSU4iKSl8fCFhZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgV29ya2Jvb2sgc3RyZWFtIik7UT1rdi50b193'@;
put 'b3JrYm9vayhhZS5jb250ZW50LChSLnR5cGU9Z2UsUikpfVIuYm9va1ZCQSYmUy5GdWxsUGF0aHMmJnZlLmZpbmQoUywiL19WQkFfUFJPSkVDVF9DVVIvVkJBL2RpciIpJiYoUS52YmFyYXc9ZnVuY3Rpb24gemsoUyl7dmFyIFI9dmUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4g'@;
put 'Uy5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihrLEcpe2lmKCIvIiE9PWsuc2xpY2UoLTEpJiZrLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciBRPWsucmVwbGFjZSgvXlteXC9dKi8sIlIiKS5yZXBsYWNlKC9cL19WQkFfUFJPSkVDVF9DVVJcdTAwMDAqLywiIik7dmUudXRpbHMu'@;
put 'Y2ZiX2FkZChSLFEsUy5GaWxlSW5kZXhbR10uY29udGVudCl9fSksdmUud3JpdGUoUil9KFMpKX12YXIgcGU9e307cmV0dXJuIFMuRnVsbFBhdGhzJiZmdW5jdGlvbiBObmUoUyxSLGspe3ZhciBHPXZlLmZpbmQoUywiIURvY3VtZW50U3VtbWFyeUluZm9ybWF0aW9uIik7aWYoRyYmRy5zaXpl'@;
put 'PjApdHJ5e3ZhciBRPUI2KEcsbTQseGIuRFNJKTtmb3IodmFyIGFlIGluIFEpUlthZV09UVthZV19Y2F0Y2goUGUpe2lmKGsuV1RGKXRocm93IFBlfXZhciBnZT12ZS5maW5kKFMsIiFTdW1tYXJ5SW5mb3JtYXRpb24iKTtpZihnZSYmZ2Uuc2l6ZT4wKXRyeXt2YXIgcGU9QjYoZ2UsdTUseGIu'@;
put 'U0kpO2Zvcih2YXIgeWUgaW4gcGUpbnVsbD09Ult5ZV0mJihSW3llXT1wZVt5ZV0pfWNhdGNoKFBlKXtpZihrLldURil0aHJvdyBQZX1SLkhlYWRpbmdQYWlycyYmUi5UaXRsZXNPZlBhcnRzJiYoXzQoUi5IZWFkaW5nUGFpcnMsUi5UaXRsZXNPZlBhcnRzLFIsayksZGVsZXRlIFIuSGVhZGlu'@;
put 'Z1BhaXJzLGRlbGV0ZSBSLlRpdGxlc09mUGFydHMpfShTLHBlLFIpLFEuUHJvcHM9US5DdXN0cHJvcHM9cGUsUi5ib29rRmlsZXMmJihRLmNmYj1TKSxRfXZhciBSOD17MDp7bjoiQnJ0Um93SGRyIixmOmZ1bmN0aW9uIE5EKFMsUil7dmFyIGs9e30sRz1TLmwrUjtrLnI9Uy5yZWFkX3NoaWZ0'@;
put 'KDQpLFMubCs9NDt2YXIgUT1TLnJlYWRfc2hpZnQoMik7Uy5sKz0xO3ZhciBhZT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubD1HLDcmYWUmJihrLmxldmVsPTcmYWUpLDE2JmFlJiYoay5oaWRkZW49ITApLDMyJmFlJiYoay5ocHQ9US8yMCksa319LDE6e246IkJydENlbGxCbGFuayIsZjpm'@;
put 'dW5jdGlvbiBBbmUoUyl7cmV0dXJuW0QxKFMpXX19LDI6e246IkJydENlbGxSayIsZjpmdW5jdGlvbiBGaihTKXtyZXR1cm5bRDEoUyksSTEoUyksIm4iXX19LDM6e246IkJydENlbGxFcnJvciIsZjpmdW5jdGlvbiB6RChTKXtyZXR1cm5bRDEoUyksUy5yZWFkX3NoaWZ0KDEpLCJlIl19fSw0'@;
put 'OntuOiJCcnRDZWxsQm9vbCIsZjpmdW5jdGlvbiBraihTKXtyZXR1cm5bRDEoUyksUy5yZWFkX3NoaWZ0KDEpLCJiIl19fSw1OntuOiJCcnRDZWxsUmVhbCIsZjpmdW5jdGlvbiBFUyhTKXtyZXR1cm5bRDEoUyksUGwoUyksIm4iXX19LDY6e246IkJydENlbGxTdCIsZjpmdW5jdGlvbiBJbmUo'@;
put 'Uyl7cmV0dXJuW0QxKFMpLHB1KFMpLCJzdHIiXX19LDc6e246IkJydENlbGxJc3N0IixmOmZ1bmN0aW9uIElqKFMpe3JldHVybltEMShTKSxTLnJlYWRfc2hpZnQoNCksInMiXX19LDg6e246IkJydEZtbGFTdHJpbmciLGY6ZnVuY3Rpb24gaGIoUyxSLGspe3ZhciBHPVMubCtSLFE9RDEoUyk7'@;
put 'US5yPWtbIiFyb3ciXTt2YXIgZ2U9W1EscHUoUyksInN0ciJdO2lmKGsuY2VsbEZvcm11bGEpe1MubCs9Mjt2YXIgcGU9ejQoUyxHLVMubCxrKTtnZVszXT1hMChwZSxudWxsLFEsay5zdXBib29rcyxrKX1lbHNlIFMubD1HO3JldHVybiBnZX19LDk6e246IkJydEZtbGFOdW0iLGY6ZnVuY3Rp'@;
put 'b24gQVMoUyxSLGspe3ZhciBHPVMubCtSLFE9RDEoUyk7US5yPWtbIiFyb3ciXTt2YXIgZ2U9W1EsUGwoUyksIm4iXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPXo0KFMsRy1TLmwsayk7Z2VbM109YTAocGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4g'@;
put 'Z2V9fSwxMDp7bjoiQnJ0Rm1sYUJvb2wiLGY6ZnVuY3Rpb24gVFMoUyxSLGspe3ZhciBHPVMubCtSLFE9RDEoUyk7US5yPWtbIiFyb3ciXTt2YXIgZ2U9W1EsUy5yZWFkX3NoaWZ0KDEpLCJiIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT16NChTLEctUy5sLGspO2dlWzNdPWEw'@;
put 'KHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUc7cmV0dXJuIGdlfX0sMTE6e246IkJydEZtbGFFcnJvciIsZjpmdW5jdGlvbiBfOChTLFIsayl7dmFyIEc9Uy5sK1IsUT1EMShTKTtRLnI9a1siIXJvdyJdO3ZhciBnZT1bUSxTLnJlYWRfc2hpZnQoMSksImUiXTtpZihrLmNlbGxG'@;
put 'b3JtdWxhKXtTLmwrPTI7dmFyIHBlPXo0KFMsRy1TLmwsayk7Z2VbM109YTAocGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBTLmw9RztyZXR1cm4gZ2V9fSwxMjp7bjoiQnJ0U2hvcnRCbGFuayIsZjpmdW5jdGlvbiBBaihTKXtyZXR1cm5bSmgoUyldfX0sMTM6e246IkJydFNob3J0Umsi'@;
put 'LGY6ZnVuY3Rpb24gRG5lKFMpe3JldHVybltKaChTKSxJMShTKSwibiJdfX0sMTQ6e246IkJydFNob3J0RXJyb3IiLGY6ZnVuY3Rpb24geTgoUyl7cmV0dXJuW0poKFMpLFMucmVhZF9zaGlmdCgxKSwiZSJdfX0sMTU6e246IkJydFNob3J0Qm9vbCIsZjpmdW5jdGlvbiBqRChTKXtyZXR1cm5b'@;
put 'SmgoUyksUy5yZWFkX3NoaWZ0KDEpLCJiIl19fSwxNjp7bjoiQnJ0U2hvcnRSZWFsIixmOlBqfSwxNzp7bjoiQnJ0U2hvcnRTdCIsZjpmdW5jdGlvbiBCaihTKXtyZXR1cm5bSmgoUykscHUoUyksInN0ciJdfX0sMTg6e246IkJydFNob3J0SXNzdCIsZjpmdW5jdGlvbiBMaihTKXtyZXR1cm5b'@;
put 'SmgoUyksUy5yZWFkX3NoaWZ0KDQpLCJzIl19fSwxOTp7bjoiQnJ0U1NUSXRlbSIsZjpzbH0sMjA6e246IkJydFBDRElNaXNzaW5nIn0sMjE6e246IkJydFBDRElOdW1iZXIifSwyMjp7bjoiQnJ0UENESUJvb2xlYW4ifSwyMzp7bjoiQnJ0UENESUVycm9yIn0sMjQ6e246IkJydFBDRElTdHJp'@;
put 'bmcifSwyNTp7bjoiQnJ0UENESURhdGV0aW1lIn0sMjY6e246IkJydFBDRElJbmRleCJ9LDI3OntuOiJCcnRQQ0RJQU1pc3NpbmcifSwyODp7bjoiQnJ0UENESUFOdW1iZXIifSwyOTp7bjoiQnJ0UENESUFCb29sZWFuIn0sMzA6e246IkJydFBDRElBRXJyb3IifSwzMTp7bjoiQnJ0UENESUFT'@;
put 'dHJpbmcifSwzMjp7bjoiQnJ0UENESUFEYXRldGltZSJ9LDMzOntuOiJCcnRQQ1JSZWNvcmQifSwzNDp7bjoiQnJ0UENSUmVjb3JkRHQifSwzNTp7bjoiQnJ0RlJUQmVnaW4ifSwzNjp7bjoiQnJ0RlJURW5kIn0sMzc6e246IkJydEFDQmVnaW4ifSwzODp7bjoiQnJ0QUNFbmQifSwzOTp7bjoi'@;
put 'QnJ0TmFtZSIsZjpmdW5jdGlvbiBUOChTLFIsayl7dmFyIEc9Uy5sK1I7Uy5sKz00LFMubCs9MTt2YXIgUT1TLnJlYWRfc2hpZnQoNCksYWU9czUoUyksZ2U9ZEQoUywwLGspLHBlPWUwKFMpO1MubD1HO3ZhciB5ZT17TmFtZTphZSxQdGc6Z2V9O3JldHVybiBRPDI2ODQzNTQ1NSYmKHllLlNo'@;
put 'ZWV0PVEpLHBlJiYoeWUuQ29tbWVudD1wZSkseWV9fSw0MDp7bjoiQnJ0SW5kZXhSb3dCbG9jayJ9LDQyOntuOiJCcnRJbmRleEJsb2NrIn0sNDM6e246IkJydEZvbnQiLGY6ZnVuY3Rpb24galYoUyxSLGspe3ZhciBHPXt9O0cuc3o9Uy5yZWFkX3NoaWZ0KDIpLzIwO3ZhciBRPU93KFMpO3N3'@;
put 'aXRjaChRLmZCb2xkJiYoRy5ib2xkPTEpLFEuZkl0YWxpYyYmKEcuaXRhbGljPTEpLFEuZlVuZGVybGluZSYmKEcudW5kZXJsaW5lPTEpLFEuZkNvbmRlbnNlJiYoRy5jb25kZW5zZT0xKSxRLmZFeHRlbmQmJihHLmV4dGVuZD0xKSxRLmZTaGFkb3cmJihHLnNoYWRvdz0xKSxRLmZPdXRsaW5l'@;
put 'JiYoRy5vdXRsaW5lPTEpLFEuZlN0cmlrZW91dCYmKEcuc3RyaWtlPTEpLDcwMD09PVMucmVhZF9zaGlmdCgyKSYmKEcuYm9sZD0xKSxTLnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpHLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpHLnZhbGlnbj0ic3ViIn12YXIgZ2U9Uy5yZWFkX3NoaWZ0'@;
put 'KDEpOzAhPWdlJiYoRy51bmRlcmxpbmU9Z2UpO3ZhciBwZT1TLnJlYWRfc2hpZnQoMSk7cGU+MCYmKEcuZmFtaWx5PXBlKTt2YXIgeWU9Uy5yZWFkX3NoaWZ0KDEpO3N3aXRjaCh5ZT4wJiYoRy5jaGFyc2V0PXllKSxTLmwrKyxHLmNvbG9yPVFoKFMpLFMucmVhZF9zaGlmdCgxKSl7Y2FzZSAx'@;
put 'Okcuc2NoZW1lPSJtYWpvciI7YnJlYWs7Y2FzZSAyOkcuc2NoZW1lPSJtaW5vciJ9cmV0dXJuIEcubmFtZT1wdShTKSxHfX0sNDQ6e246IkJydEZtdCIsZjpmdW5jdGlvbiBVdihTLFIpe3JldHVybltTLnJlYWRfc2hpZnQoMikscHUoUyldfX0sNDU6e246IkJydEZpbGwiLGY6ZnVuY3Rpb24g'@;
put 'V1YoUyxSKXt2YXIgaz1TLmwrUixHPXt9LFE9Uy5yZWFkX3NoaWZ0KDQpO2lmKDQwIT1RKXtHLnBhdHRlcm5UeXBlPU1DW1FdO3ZhciBhZT1RaChTKTs2NCE9YWUuaW5kZXgmJihHLmZnQ29sb3I9YWUpO3ZhciBnZT1RaChTKTs2NSE9Z2UuaW5kZXgmJihHLmJnQ29sb3I9Z2UpfWVsc2V7Uy5s'@;
put 'Kz0xNixTLnJlYWRfc2hpZnQoNCksUGwoUyksUGwoUyksUGwoUyksUGwoUyksUGwoUyk7Zm9yKHZhciBwZT1TLnJlYWRfc2hpZnQoNCkseWU9W10sUGU9MDtQZTxwZTsrK1BlKXllLnB1c2goVVYoUykpfXJldHVybiBTLmw9ayxHfX0sNDY6e246IkJydEJvcmRlciIsZjpmdW5jdGlvbiBZVihT'@;
put 'KXt2YXIgUj17fTtTLnJlYWRfc2hpZnQoMSk7dmFyIGs9RDUoUyk7Im5vbmUiIT1rLnN0eWxlJiYoUi50b3A9ayk7dmFyIEc9RDUoUyk7Im5vbmUiIT1HLnN0eWxlJiYoUi5ib3R0b209Ryk7dmFyIFE9RDUoUyk7Im5vbmUiIT1RLnN0eWxlJiYoUi5sZWZ0PVEpO3ZhciBhZT1ENShTKTsibm9u'@;
put 'ZSIhPWFlLnN0eWxlJiYoUi5yaWdodD1hZSk7dmFyIGdlPUQ1KFMpO3JldHVybiJub25lIiE9Z2Uuc3R5bGUmJihSLmRpYWc9Z2UpLFJ9fSw0Nzp7bjoiQnJ0WEYiLGY6ZnVuY3Rpb24geEMoUyxSKXt2YXIgaz1TLmwrUixHPXt9LFE9Uy5yZWFkX3NoaWZ0KDIpLGFlPVMucmVhZF9zaGlmdCgy'@;
put 'KSxnZT1TLnJlYWRfc2hpZnQoMikscGU9Uy5yZWFkX3NoaWZ0KDIpLHllPVMucmVhZF9zaGlmdCgyKSxQZT1TLnJlYWRfc2hpZnQoMSk7Uy5yZWFkX3NoaWZ0KDEpO3ZhciBOZT1TLnJlYWRfc2hpZnQoMiksWWU9Uy5yZWFkX3NoaWZ0KDEpO1MubD1rLEcueGZJZD1RLEcubnVtRm10SWQ9YWUs'@;
put 'Ry5mb250SWQ9Z2UsRy5maWxsSWQ9cGUsRy5ib3JkZXJJZD15ZSwxJlllJiYwIT1HLm51bUZtdElkJiYoRy5hcHBseU51bWJlckZvcm1hdD0hMCksRy5hbGlnbm1lbnQ9e30sUGU+MCYmKEcuYWxpZ25tZW50LnRleHRSb3RhdGlvbj1QZSk7dmFyIGV0PSExO3JldHVybiA3Jk5lJiYoZXQ9ITAs'@;
put 'Ry5hbGlnbm1lbnQuaG9yaXpvbnRhbD1rNVs3Jk5lXSksRy5hbGlnbm1lbnQudmVydGljYWw9ZThbTmU+Pj4zJjddLEcuYWxpZ25tZW50LnZlcnRpY2FsJiYoZXQ9ITApLE5lPj4+NiYxJiYoRy5hbGlnbm1lbnQud3JhcFRleHQ9ITApLE5lPj4+OCYxJiYoRy5hbGlnbm1lbnQuc2hyaW5rVG9G'@;
put 'aXQ9ITApLGV0fHxkZWxldGUgRy5hbGlnbm1lbnQsNCZZZSYmZXQmJihHLmFwcGx5QWxpZ25tZW50PSEwKSxHfX0sNDg6e246IkJydFN0eWxlIn0sNDk6e246IkJydENlbGxNZXRhIn0sNTA6e246IkJydFZhbHVlTWV0YSJ9LDUxOntuOiJCcnRNZGIifSw1Mjp7bjoiQnJ0QmVnaW5GbWQifSw1'@;
put 'Mzp7bjoiQnJ0RW5kRm1kIn0sNTQ6e246IkJydEJlZ2luTWR4In0sNTU6e246IkJydEVuZE1keCJ9LDU2OntuOiJCcnRCZWdpbk1keFR1cGxlIn0sNTc6e246IkJydEVuZE1keFR1cGxlIn0sNTg6e246IkJydE1keE1icklzdHIifSw1OTp7bjoiQnJ0U3RyIn0sNjA6e246IkJydENvbEluZm8i'@;
put 'LGY6ckN9LDYyOntuOiJCcnRDZWxsUlN0cmluZyJ9LDYzOntuOiJCcnRDYWxjQ2hhaW5JdGVtJCIsZjpmdW5jdGlvbiBuOChTKXt2YXIgUj17fTtSLmk9Uy5yZWFkX3NoaWZ0KDQpO3ZhciBrPXt9O2sucj1TLnJlYWRfc2hpZnQoNCksay5jPVMucmVhZF9zaGlmdCg0KSxSLnI9cWkoayk7dmFy'@;
put 'IEc9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAyJkcmJihSLmw9IjEiKSw4JkcmJihSLmE9IjEiKSxSfX0sNjQ6e246IkJydERWYWwiLGY6ZnVuY3Rpb24gcWooUyxSLGspe3ZhciBHPVMubCtSLFE9Uy5yZWFkX3NoaWZ0KDQpLGFlPXQwKFMpLGdlPWUwKFMpLHBlPWUwKFMpLHllPWUwKFMpLFBl'@;
put 'PWUwKFMpLE5lPXVEKFMsUixrKSxZZT1TLmw8Rz91RChTLFIsayk6bnVsbCxldD0xNSZRLGN0PXt0OiREW2V0XSxzcXJmeDphZSxzOltnZSxwZSx5ZSxQZV19O3JldHVybiBOZSYmKGN0LmYxPU5lKSxZZSYmKGN0LmYyPVllKSwwPT1ldHx8Mz09ZXR8fDc9PWV0fHwoY3Qub3A9RFNbUT4+MjAm'@;
put 'MTVdKSxjdH19LDY1OntuOiJCcnRTeHZjZWxsTnVtIn0sNjY6e246IkJydFN4dmNlbGxTdHIifSw2Nzp7bjoiQnJ0U3h2Y2VsbEJvb2wifSw2ODp7bjoiQnJ0U3h2Y2VsbEVyciJ9LDY5OntuOiJCcnRTeHZjZWxsRGF0ZSJ9LDcwOntuOiJCcnRTeHZjZWxsTmlsIn0sMTI4OntuOiJCcnRGaWxl'@;
put 'VmVyc2lvbiJ9LDEyOTp7bjoiQnJ0QmVnaW5TaGVldCJ9LDEzMDp7bjoiQnJ0RW5kU2hlZXQifSwxMzE6e246IkJydEJlZ2luQm9vayIsZjpJbixwOjB9LDEzMjp7bjoiQnJ0RW5kQm9vayJ9LDEzMzp7bjoiQnJ0QmVnaW5Xc1ZpZXdzIn0sMTM0OntuOiJCcnRFbmRXc1ZpZXdzIn0sMTM1Ontu'@;
put 'OiJCcnRCZWdpbkJvb2tWaWV3cyJ9LDEzNjp7bjoiQnJ0RW5kQm9va1ZpZXdzIn0sMTM3OntuOiJCcnRCZWdpbldzVmlldyIsZjpmdW5jdGlvbiBrUyhTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubCs9Mjgse1JUTDozMiZSLGdyaWQ6ISEoNCZSKX19fSwxMzg6e246IkJydEVu'@;
put 'ZFdzVmlldyJ9LDEzOTp7bjoiQnJ0QmVnaW5Dc1ZpZXdzIn0sMTQwOntuOiJCcnRFbmRDc1ZpZXdzIn0sMTQxOntuOiJCcnRCZWdpbkNzVmlldyJ9LDE0Mjp7bjoiQnJ0RW5kQ3NWaWV3In0sMTQzOntuOiJCcnRCZWdpbkJ1bmRsZVNocyJ9LDE0NDp7bjoiQnJ0RW5kQnVuZGxlU2hzIn0sMTQ1'@;
put 'OntuOiJCcnRCZWdpblNoZWV0RGF0YSJ9LDE0Njp7bjoiQnJ0RW5kU2hlZXREYXRhIn0sMTQ3OntuOiJCcnRXc1Byb3AiLGY6ZnVuY3Rpb24gdWIoUyxSKXt2YXIgaz17fSxHPVNbUy5sXTtyZXR1cm4rK1MubCxrLmFib3ZlPSEoNjQmRyksay5sZWZ0PSEoMTI4JkcpLFMubCs9MTgsay5uYW1l'@;
put 'PW81KFMsUi0xOSksa319LDE0ODp7bjoiQnJ0V3NEaW0iLGY6TWoscDoxNn0sMTUxOntuOiJCcnRQYW5lIixmOmZ1bmN0aW9uIFdEKFMsUil7dmFyIGs9Uy5sK1I7UGwoUyksUGwoUyk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDQsImkiKSxRPVMucmVhZF9zaGlmdCg0LCJpIik7aWYoUy5yZWFkX3No'@;
put 'aWZ0KDQpLFMucmVhZF9zaGlmdCgxKSxrIT1TLmwpdGhyb3cgbmV3IEVycm9yKCJCYWQgQnJ0UGFuZTogIitrKyIgIT0gIitTLmwpO3JldHVybltxaSh7cjpHLGM6UX0pXX19LDE1Mjp7bjoiQnJ0U2VsIixmOmZ1bmN0aW9uIFlEKFMsUil7cmV0dXJuIFMucmVhZF9zaGlmdCg0KSx7Y2VsbDpx'@;
put 'aSh7cjpTLnJlYWRfc2hpZnQoNCksYzpTLnJlYWRfc2hpZnQoNCl9KX19fSwxNTM6e246IkJydFdiUHJvcCIsZjpmdW5jdGlvbiBOUyhTLFIpe3ZhciBrPXt9LEc9Uy5yZWFkX3NoaWZ0KDQpO2suZGVmYXVsdFRoZW1lVmVyc2lvbj1TLnJlYWRfc2hpZnQoNCk7dmFyIFE9Uj44P3B1KFMpOiIi'@;
put 'O3JldHVybiBRLmxlbmd0aD4wJiYoay5Db2RlTmFtZT1RKSxrLmF1dG9Db21wcmVzc1BpY3R1cmVzPSEhKDY1NTM2JkcpLGsuYmFja3VwRmlsZT0hISg2NCZHKSxrLmNoZWNrQ29tcGF0aWJpbGl0eT0hISg0MDk2JkcpLGsuZGF0ZTE5MDQ9ISEoMSZHKSxrLmZpbHRlclByaXZhY3k9ISEoOCZH'@;
put 'KSxrLmhpZGVQaXZvdEZpZWxkTGlzdD0hISgxMDI0JkcpLGsucHJvbXB0ZWRTb2x1dGlvbnM9ISEoMTYmRyksay5wdWJsaXNoSXRlbXM9ISEoMjA0OCZHKSxrLnJlZnJlc2hBbGxDb25uZWN0aW9ucz0hISgyNjIxNDQmRyksay5zYXZlRXh0ZXJuYWxMaW5rVmFsdWVzPSEhKDEyOCZHKSxrLnNo'@;
put 'b3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzPSEhKDQmRyksay5zaG93SW5rQW5ub3RhdGlvbj0hISgzMiZHKSxrLnNob3dPYmplY3RzPVsiYWxsIiwicGxhY2Vob2xkZXJzIiwibm9uZSJdW0c+PjEzJjNdLGsuc2hvd1Bpdm90Q2hhcnRGaWx0ZXI9ISEoMzI3NjgmRyksay51cGRhdGVMaW5rcz1b'@;
put 'InVzZXJTZXQiLCJuZXZlciIsImFsd2F5cyJdW0c+PjgmM10sa319LDE1NDp7bjoiQnJ0V2JGYWN0b2lkIn0sMTU1OntuOiJCcnRGaWxlUmVjb3ZlciJ9LDE1Njp7bjoiQnJ0QnVuZGxlU2giLGY6ZnVuY3Rpb24gcHooUyxSKXt2YXIgaz17fTtyZXR1cm4gay5IaWRkZW49Uy5yZWFkX3NoaWZ0'@;
put 'KDQpLGsuaVRhYklEPVMucmVhZF9zaGlmdCg0KSxrLnN0clJlbElEPWc0KFMsUi04KSxrLm5hbWU9cHUoUyksa319LDE1Nzp7bjoiQnJ0Q2FsY1Byb3AifSwxNTg6e246IkJydEJvb2tWaWV3In0sMTU5OntuOiJCcnRCZWdpblNzdCIsZjpmdW5jdGlvbiBJdihTKXtyZXR1cm5bUy5yZWFkX3No'@;
put 'aWZ0KDQpLFMucmVhZF9zaGlmdCg0KV19fSwxNjA6e246IkJydEVuZFNzdCJ9LDE2MTp7bjoiQnJ0QmVnaW5BRmlsdGVyIixmOmd1fSwxNjI6e246IkJydEVuZEFGaWx0ZXIifSwxNjM6e246IkJydEJlZ2luRmlsdGVyQ29sdW1uIn0sMTY0OntuOiJCcnRFbmRGaWx0ZXJDb2x1bW4ifSwxNjU6'@;
put 'e246IkJydEJlZ2luRmlsdGVycyJ9LDE2Njp7bjoiQnJ0RW5kRmlsdGVycyJ9LDE2Nzp7bjoiQnJ0RmlsdGVyIn0sMTY4OntuOiJCcnRDb2xvckZpbHRlciJ9LDE2OTp7bjoiQnJ0SWNvbkZpbHRlciJ9LDE3MDp7bjoiQnJ0VG9wMTBGaWx0ZXIifSwxNzE6e246IkJydER5bmFtaWNGaWx0ZXIi'@;
put 'fSwxNzI6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVycyJ9LDE3Mzp7bjoiQnJ0RW5kQ3VzdG9tRmlsdGVycyJ9LDE3NDp7bjoiQnJ0Q3VzdG9tRmlsdGVyIn0sMTc1OntuOiJCcnRBRmlsdGVyRGF0ZUdyb3VwSXRlbSJ9LDE3Njp7bjoiQnJ0TWVyZ2VDZWxsIixmOlVEfSwxNzc6e246IkJydEJl'@;
put 'Z2luTWVyZ2VDZWxscyJ9LDE3ODp7bjoiQnJ0RW5kTWVyZ2VDZWxscyJ9LDE3OTp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlRGVmIn0sMTgwOntuOiJCcnRFbmRQaXZvdENhY2hlRGVmIn0sMTgxOntuOiJCcnRCZWdpblBDREZpZWxkcyJ9LDE4Mjp7bjoiQnJ0RW5kUENERmllbGRzIn0sMTgzOntu'@;
put 'OiJCcnRCZWdpblBDREZpZWxkIn0sMTg0OntuOiJCcnRFbmRQQ0RGaWVsZCJ9LDE4NTp7bjoiQnJ0QmVnaW5QQ0RTb3VyY2UifSwxODY6e246IkJydEVuZFBDRFNvdXJjZSJ9LDE4Nzp7bjoiQnJ0QmVnaW5QQ0RTUmFuZ2UifSwxODg6e246IkJydEVuZFBDRFNSYW5nZSJ9LDE4OTp7bjoiQnJ0'@;
put 'QmVnaW5QQ0RGQXRibCJ9LDE5MDp7bjoiQnJ0RW5kUENERkF0YmwifSwxOTE6e246IkJydEJlZ2luUENESVJ1biJ9LDE5Mjp7bjoiQnJ0RW5kUENESVJ1biJ9LDE5Mzp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlUmVjb3JkcyJ9LDE5NDp7bjoiQnJ0RW5kUGl2b3RDYWNoZVJlY29yZHMifSwxOTU6'@;
put 'e246IkJydEJlZ2luUENESGllcmFyY2hpZXMifSwxOTY6e246IkJydEVuZFBDREhpZXJhcmNoaWVzIn0sMTk3OntuOiJCcnRCZWdpblBDREhpZXJhcmNoeSJ9LDE5ODp7bjoiQnJ0RW5kUENESGllcmFyY2h5In0sMTk5OntuOiJCcnRCZWdpblBDREhGaWVsZHNVc2FnZSJ9LDIwMDp7bjoiQnJ0'@;
put 'RW5kUENESEZpZWxkc1VzYWdlIn0sMjAxOntuOiJCcnRCZWdpbkV4dENvbm5lY3Rpb24ifSwyMDI6e246IkJydEVuZEV4dENvbm5lY3Rpb24ifSwyMDM6e246IkJydEJlZ2luRUNEYlByb3BzIn0sMjA0OntuOiJCcnRFbmRFQ0RiUHJvcHMifSwyMDU6e246IkJydEJlZ2luRUNPbGFwUHJvcHMi'@;
put 'fSwyMDY6e246IkJydEVuZEVDT2xhcFByb3BzIn0sMjA3OntuOiJCcnRCZWdpblBDRFNDb25zb2wifSwyMDg6e246IkJydEVuZFBDRFNDb25zb2wifSwyMDk6e246IkJydEJlZ2luUENEU0NQYWdlcyJ9LDIxMDp7bjoiQnJ0RW5kUENEU0NQYWdlcyJ9LDIxMTp7bjoiQnJ0QmVnaW5QQ0RTQ1Bh'@;
put 'Z2UifSwyMTI6e246IkJydEVuZFBDRFNDUGFnZSJ9LDIxMzp7bjoiQnJ0QmVnaW5QQ0RTQ1BJdGVtIn0sMjE0OntuOiJCcnRFbmRQQ0RTQ1BJdGVtIn0sMjE1OntuOiJCcnRCZWdpblBDRFNDU2V0cyJ9LDIxNjp7bjoiQnJ0RW5kUENEU0NTZXRzIn0sMjE3OntuOiJCcnRCZWdpblBDRFNDU2V0'@;
put 'In0sMjE4OntuOiJCcnRFbmRQQ0RTQ1NldCJ9LDIxOTp7bjoiQnJ0QmVnaW5QQ0RGR3JvdXAifSwyMjA6e246IkJydEVuZFBDREZHcm91cCJ9LDIyMTp7bjoiQnJ0QmVnaW5QQ0RGR0l0ZW1zIn0sMjIyOntuOiJCcnRFbmRQQ0RGR0l0ZW1zIn0sMjIzOntuOiJCcnRCZWdpblBDREZHUmFuZ2Ui'@;
put 'fSwyMjQ6e246IkJydEVuZFBDREZHUmFuZ2UifSwyMjU6e246IkJydEJlZ2luUENERkdEaXNjcmV0ZSJ9LDIyNjp7bjoiQnJ0RW5kUENERkdEaXNjcmV0ZSJ9LDIyNzp7bjoiQnJ0QmVnaW5QQ0RTRFR1cGxlQ2FjaGUifSwyMjg6e246IkJydEVuZFBDRFNEVHVwbGVDYWNoZSJ9LDIyOTp7bjoi'@;
put 'QnJ0QmVnaW5QQ0RTRFRDRW50cmllcyJ9LDIzMDp7bjoiQnJ0RW5kUENEU0RUQ0VudHJpZXMifSwyMzE6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXJzIn0sMjMyOntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlcnMifSwyMzM6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXIifSwyMzQ6e246IkJy'@;
put 'dEVuZFBDRFNEVENFTWVtYmVyIn0sMjM1OntuOiJCcnRCZWdpblBDRFNEVENRdWVyaWVzIn0sMjM2OntuOiJCcnRFbmRQQ0RTRFRDUXVlcmllcyJ9LDIzNzp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcnkifSwyMzg6e246IkJydEVuZFBDRFNEVENRdWVyeSJ9LDIzOTp7bjoiQnJ0QmVnaW5QQ0RT'@;
put 'RFRDU2V0cyJ9LDI0MDp7bjoiQnJ0RW5kUENEU0RUQ1NldHMifSwyNDE6e246IkJydEJlZ2luUENEU0RUQ1NldCJ9LDI0Mjp7bjoiQnJ0RW5kUENEU0RUQ1NldCJ9LDI0Mzp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbXMifSwyNDQ6e246IkJydEVuZFBDRENhbGNJdGVtcyJ9LDI0NTp7bjoiQnJ0'@;
put 'QmVnaW5QQ0RDYWxjSXRlbSJ9LDI0Njp7bjoiQnJ0RW5kUENEQ2FsY0l0ZW0ifSwyNDc6e246IkJydEJlZ2luUFJ1bGUifSwyNDg6e246IkJydEVuZFBSdWxlIn0sMjQ5OntuOiJCcnRCZWdpblBSRmlsdGVycyJ9LDI1MDp7bjoiQnJ0RW5kUFJGaWx0ZXJzIn0sMjUxOntuOiJCcnRCZWdpblBS'@;
put 'RmlsdGVyIn0sMjUyOntuOiJCcnRFbmRQUkZpbHRlciJ9LDI1Mzp7bjoiQnJ0QmVnaW5QTmFtZXMifSwyNTQ6e246IkJydEVuZFBOYW1lcyJ9LDI1NTp7bjoiQnJ0QmVnaW5QTmFtZSJ9LDI1Njp7bjoiQnJ0RW5kUE5hbWUifSwyNTc6e246IkJydEJlZ2luUE5QYWlycyJ9LDI1ODp7bjoiQnJ0'@;
put 'RW5kUE5QYWlycyJ9LDI1OTp7bjoiQnJ0QmVnaW5QTlBhaXIifSwyNjA6e246IkJydEVuZFBOUGFpciJ9LDI2MTp7bjoiQnJ0QmVnaW5FQ1dlYlByb3BzIn0sMjYyOntuOiJCcnRFbmRFQ1dlYlByb3BzIn0sMjYzOntuOiJCcnRCZWdpbkVjV3BUYWJsZXMifSwyNjQ6e246IkJydEVuZEVDV1BU'@;
put 'YWJsZXMifSwyNjU6e246IkJydEJlZ2luRUNQYXJhbXMifSwyNjY6e246IkJydEVuZEVDUGFyYW1zIn0sMjY3OntuOiJCcnRCZWdpbkVDUGFyYW0ifSwyNjg6e246IkJydEVuZEVDUGFyYW0ifSwyNjk6e246IkJydEJlZ2luUENES1BJcyJ9LDI3MDp7bjoiQnJ0RW5kUENES1BJcyJ9LDI3MTp7'@;
put 'bjoiQnJ0QmVnaW5QQ0RLUEkifSwyNzI6e246IkJydEVuZFBDREtQSSJ9LDI3Mzp7bjoiQnJ0QmVnaW5EaW1zIn0sMjc0OntuOiJCcnRFbmREaW1zIn0sMjc1OntuOiJCcnRCZWdpbkRpbSJ9LDI3Njp7bjoiQnJ0RW5kRGltIn0sMjc3OntuOiJCcnRJbmRleFBhcnRFbmQifSwyNzg6e246IkJy'@;
put 'dEJlZ2luU3R5bGVTaGVldCJ9LDI3OTp7bjoiQnJ0RW5kU3R5bGVTaGVldCJ9LDI4MDp7bjoiQnJ0QmVnaW5TWFZpZXcifSwyODE6e246IkJydEVuZFNYVkkifSwyODI6e246IkJydEJlZ2luU1hWSSJ9LDI4Mzp7bjoiQnJ0QmVnaW5TWFZJcyJ9LDI4NDp7bjoiQnJ0RW5kU1hWSXMifSwyODU6'@;
put 'e246IkJydEJlZ2luU1hWRCJ9LDI4Njp7bjoiQnJ0RW5kU1hWRCJ9LDI4Nzp7bjoiQnJ0QmVnaW5TWFZEcyJ9LDI4ODp7bjoiQnJ0RW5kU1hWRHMifSwyODk6e246IkJydEJlZ2luU1hQSSJ9LDI5MDp7bjoiQnJ0RW5kU1hQSSJ9LDI5MTp7bjoiQnJ0QmVnaW5TWFBJcyJ9LDI5Mjp7bjoiQnJ0'@;
put 'RW5kU1hQSXMifSwyOTM6e246IkJydEJlZ2luU1hESSJ9LDI5NDp7bjoiQnJ0RW5kU1hESSJ9LDI5NTp7bjoiQnJ0QmVnaW5TWERJcyJ9LDI5Njp7bjoiQnJ0RW5kU1hESXMifSwyOTc6e246IkJydEJlZ2luU1hMSSJ9LDI5ODp7bjoiQnJ0RW5kU1hMSSJ9LDI5OTp7bjoiQnJ0QmVnaW5TWExJ'@;
put 'UndzIn0sMzAwOntuOiJCcnRFbmRTWExJUndzIn0sMzAxOntuOiJCcnRCZWdpblNYTElDb2xzIn0sMzAyOntuOiJCcnRFbmRTWExJQ29scyJ9LDMwMzp7bjoiQnJ0QmVnaW5TWEZvcm1hdCJ9LDMwNDp7bjoiQnJ0RW5kU1hGb3JtYXQifSwzMDU6e246IkJydEJlZ2luU1hGb3JtYXRzIn0sMzA2'@;
put 'OntuOiJCcnRFbmRTeEZvcm1hdHMifSwzMDc6e246IkJydEJlZ2luU3hTZWxlY3QifSwzMDg6e246IkJydEVuZFN4U2VsZWN0In0sMzA5OntuOiJCcnRCZWdpbklTWFZEUndzIn0sMzEwOntuOiJCcnRFbmRJU1hWRFJ3cyJ9LDMxMTp7bjoiQnJ0QmVnaW5JU1hWRENvbHMifSwzMTI6e246IkJy'@;
put 'dEVuZElTWFZEQ29scyJ9LDMxMzp7bjoiQnJ0RW5kU1hMb2NhdGlvbiJ9LDMxNDp7bjoiQnJ0QmVnaW5TWExvY2F0aW9uIn0sMzE1OntuOiJCcnRFbmRTWFZpZXcifSwzMTY6e246IkJydEJlZ2luU1hUSHMifSwzMTc6e246IkJydEVuZFNYVEhzIn0sMzE4OntuOiJCcnRCZWdpblNYVEgifSwz'@;
put 'MTk6e246IkJydEVuZFNYVEgifSwzMjA6e246IkJydEJlZ2luSVNYVEhSd3MifSwzMjE6e246IkJydEVuZElTWFRIUndzIn0sMzIyOntuOiJCcnRCZWdpbklTWFRIQ29scyJ9LDMyMzp7bjoiQnJ0RW5kSVNYVEhDb2xzIn0sMzI0OntuOiJCcnRCZWdpblNYVERNUFMifSwzMjU6e246IkJydEVu'@;
put 'ZFNYVERNUHMifSwzMjY6e246IkJydEJlZ2luU1hURE1QIn0sMzI3OntuOiJCcnRFbmRTWFRETVAifSwzMjg6e246IkJydEJlZ2luU1hUSEl0ZW1zIn0sMzI5OntuOiJCcnRFbmRTWFRISXRlbXMifSwzMzA6e246IkJydEJlZ2luU1hUSEl0ZW0ifSwzMzE6e246IkJydEVuZFNYVEhJdGVtIn0s'@;
put 'MzMyOntuOiJCcnRCZWdpbk1ldGFkYXRhIn0sMzMzOntuOiJCcnRFbmRNZXRhZGF0YSJ9LDMzNDp7bjoiQnJ0QmVnaW5Fc21kdGluZm8ifSwzMzU6e246IkJydE1kdGluZm8ifSwzMzY6e246IkJydEVuZEVzbWR0aW5mbyJ9LDMzNzp7bjoiQnJ0QmVnaW5Fc21kYiJ9LDMzODp7bjoiQnJ0RW5k'@;
put 'RXNtZGIifSwzMzk6e246IkJydEJlZ2luRXNmbWQifSwzNDA6e246IkJydEVuZEVzZm1kIn0sMzQxOntuOiJCcnRCZWdpblNpbmdsZUNlbGxzIn0sMzQyOntuOiJCcnRFbmRTaW5nbGVDZWxscyJ9LDM0Mzp7bjoiQnJ0QmVnaW5MaXN0In0sMzQ0OntuOiJCcnRFbmRMaXN0In0sMzQ1OntuOiJC'@;
put 'cnRCZWdpbkxpc3RDb2xzIn0sMzQ2OntuOiJCcnRFbmRMaXN0Q29scyJ9LDM0Nzp7bjoiQnJ0QmVnaW5MaXN0Q29sIn0sMzQ4OntuOiJCcnRFbmRMaXN0Q29sIn0sMzQ5OntuOiJCcnRCZWdpbkxpc3RYbWxDUHIifSwzNTA6e246IkJydEVuZExpc3RYbWxDUHIifSwzNTE6e246IkJydExpc3RD'@;
put 'Q0ZtbGEifSwzNTI6e246IkJydExpc3RUckZtbGEifSwzNTM6e246IkJydEJlZ2luRXh0ZXJuYWxzIn0sMzU0OntuOiJCcnRFbmRFeHRlcm5hbHMifSwzNTU6e246IkJydFN1cEJvb2tTcmMiLGY6ZzR9LDM1Nzp7bjoiQnJ0U3VwU2VsZiJ9LDM1ODp7bjoiQnJ0U3VwU2FtZSJ9LDM1OTp7bjoi'@;
put 'QnJ0U3VwVGFicyJ9LDM2MDp7bjoiQnJ0QmVnaW5TdXBCb29rIn0sMzYxOntuOiJCcnRQbGFjZWhvbGRlck5hbWUifSwzNjI6e246IkJydEV4dGVyblNoZWV0IixmOnh2fSwzNjM6e246IkJydEV4dGVyblRhYmxlU3RhcnQifSwzNjQ6e246IkJydEV4dGVyblRhYmxlRW5kIn0sMzY2OntuOiJC'@;
put 'cnRFeHRlcm5Sb3dIZHIifSwzNjc6e246IkJydEV4dGVybkNlbGxCbGFuayJ9LDM2ODp7bjoiQnJ0RXh0ZXJuQ2VsbFJlYWwifSwzNjk6e246IkJydEV4dGVybkNlbGxCb29sIn0sMzcwOntuOiJCcnRFeHRlcm5DZWxsRXJyb3IifSwzNzE6e246IkJydEV4dGVybkNlbGxTdHJpbmcifSwzNzI6'@;
put 'e246IkJydEJlZ2luRXNtZHgifSwzNzM6e246IkJydEVuZEVzbWR4In0sMzc0OntuOiJCcnRCZWdpbk1keFNldCJ9LDM3NTp7bjoiQnJ0RW5kTWR4U2V0In0sMzc2OntuOiJCcnRCZWdpbk1keE1iclByb3AifSwzNzc6e246IkJydEVuZE1keE1iclByb3AifSwzNzg6e246IkJydEJlZ2luTWR4'@;
put 'S1BJIn0sMzc5OntuOiJCcnRFbmRNZHhLUEkifSwzODA6e246IkJydEJlZ2luRXNzdHIifSwzODE6e246IkJydEVuZEVzc3RyIn0sMzgyOntuOiJCcnRCZWdpblBSRkl0ZW0ifSwzODM6e246IkJydEVuZFBSRkl0ZW0ifSwzODQ6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEcyJ9LDM4NTp7bjoi'@;
put 'QnJ0RW5kUGl2b3RDYWNoZUlEcyJ9LDM4Njp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlSUQifSwzODc6e246IkJydEVuZFBpdm90Q2FjaGVJRCJ9LDM4ODp7bjoiQnJ0QmVnaW5JU1hWSXMifSwzODk6e246IkJydEVuZElTWFZJcyJ9LDM5MDp7bjoiQnJ0QmVnaW5Db2xJbmZvcyJ9LDM5MTp7bjoi'@;
put 'QnJ0RW5kQ29sSW5mb3MifSwzOTI6e246IkJydEJlZ2luUndCcmsifSwzOTM6e246IkJydEVuZFJ3QnJrIn0sMzk0OntuOiJCcnRCZWdpbkNvbEJyayJ9LDM5NTp7bjoiQnJ0RW5kQ29sQnJrIn0sMzk2OntuOiJCcnRCcmsifSwzOTc6e246IkJydFVzZXJCb29rVmlldyJ9LDM5ODp7bjoiQnJ0'@;
put 'SW5mbyJ9LDM5OTp7bjoiQnJ0Q1VzciJ9LDQwMDp7bjoiQnJ0VXNyIn0sNDAxOntuOiJCcnRCZWdpblVzZXJzIn0sNDAzOntuOiJCcnRFT0YifSw0MDQ6e246IkJydFVDUiJ9LDQwNTp7bjoiQnJ0UlJJbnNEZWwifSw0MDY6e246IkJydFJSRW5kSW5zRGVsIn0sNDA3OntuOiJCcnRSUk1vdmUi'@;
put 'fSw0MDg6e246IkJydFJSRW5kTW92ZSJ9LDQwOTp7bjoiQnJ0UlJDaGdDZWxsIn0sNDEwOntuOiJCcnRSUkVuZENoZ0NlbGwifSw0MTE6e246IkJydFJSSGVhZGVyIn0sNDEyOntuOiJCcnRSUlVzZXJWaWV3In0sNDEzOntuOiJCcnRSUlJlblNoZWV0In0sNDE0OntuOiJCcnRSUkluc2VydFNo'@;
put 'In0sNDE1OntuOiJCcnRSUkRlZk5hbWUifSw0MTY6e246IkJydFJSTm90ZSJ9LDQxNzp7bjoiQnJ0UlJDb25mbGljdCJ9LDQxODp7bjoiQnJ0UlJUUVNJRiJ9LDQxOTp7bjoiQnJ0UlJGb3JtYXQifSw0MjA6e246IkJydFJSRW5kRm9ybWF0In0sNDIxOntuOiJCcnRSUkF1dG9GbXQifSw0MjI6'@;
put 'e246IkJydEJlZ2luVXNlclNoVmlld3MifSw0MjM6e246IkJydEJlZ2luVXNlclNoVmlldyJ9LDQyNDp7bjoiQnJ0RW5kVXNlclNoVmlldyJ9LDQyNTp7bjoiQnJ0RW5kVXNlclNoVmlld3MifSw0MjY6e246IkJydEFyckZtbGEiLGY6ZnVuY3Rpb24gZmIoUyxSLGspe3ZhciBHPVMubCtSLFE9'@;
put 'Y2QoUyksYWU9Uy5yZWFkX3NoaWZ0KDEpLGdlPVtRXTtpZihnZVsyXT1hZSxrLmNlbGxGb3JtdWxhKXt2YXIgcGU9ZVMoUyxHLVMubCxrKTtnZVsxXT1wZX1lbHNlIFMubD1HO3JldHVybiBnZX19LDQyNzp7bjoiQnJ0U2hyRm1sYSIsZjpmdW5jdGlvbiBXaihTLFIsayl7dmFyIEc9Uy5sK1Is'@;
put 'YWU9W2d1KFMsMTYpXTtpZihrLmNlbGxGb3JtdWxhKXt2YXIgZ2U9WEIoUyxHLVMubCxrKTthZVsxXT1nZSxTLmw9R31lbHNlIFMubD1HO3JldHVybiBhZX19LDQyODp7bjoiQnJ0VGFibGUifSw0Mjk6e246IkJydEJlZ2luRXh0Q29ubmVjdGlvbnMifSw0MzA6e246IkJydEVuZEV4dENvbm5l'@;
put 'Y3Rpb25zIn0sNDMxOntuOiJCcnRCZWdpblBDRENhbGNNZW1zIn0sNDMyOntuOiJCcnRFbmRQQ0RDYWxjTWVtcyJ9LDQzMzp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtIn0sNDM0OntuOiJCcnRFbmRQQ0RDYWxjTWVtIn0sNDM1OntuOiJCcnRCZWdpblBDREhHTGV2ZWxzIn0sNDM2OntuOiJCcnRF'@;
put 'bmRQQ0RIR0xldmVscyJ9LDQzNzp7bjoiQnJ0QmVnaW5QQ0RIR0xldmVsIn0sNDM4OntuOiJCcnRFbmRQQ0RIR0xldmVsIn0sNDM5OntuOiJCcnRCZWdpblBDREhHTEdyb3VwcyJ9LDQ0MDp7bjoiQnJ0RW5kUENESEdMR3JvdXBzIn0sNDQxOntuOiJCcnRCZWdpblBDREhHTEdyb3VwIn0sNDQy'@;
put 'OntuOiJCcnRFbmRQQ0RIR0xHcm91cCJ9LDQ0Mzp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVycyJ9LDQ0NDp7bjoiQnJ0RW5kUENESEdMR01lbWJlcnMifSw0NDU6e246IkJydEJlZ2luUENESEdMR01lbWJlciJ9LDQ0Njp7bjoiQnJ0RW5kUENESEdMR01lbWJlciJ9LDQ0Nzp7bjoiQnJ0QmVn'@;
put 'aW5RU0kifSw0NDg6e246IkJydEVuZFFTSSJ9LDQ0OTp7bjoiQnJ0QmVnaW5RU0lSIn0sNDUwOntuOiJCcnRFbmRRU0lSIn0sNDUxOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lcyJ9LDQ1Mjp7bjoiQnJ0RW5kRGVsZXRlZE5hbWVzIn0sNDUzOntuOiJCcnRCZWdpbkRlbGV0ZWROYW1lIn0sNDU0'@;
put 'OntuOiJCcnRFbmREZWxldGVkTmFtZSJ9LDQ1NTp7bjoiQnJ0QmVnaW5RU0lGcyJ9LDQ1Njp7bjoiQnJ0RW5kUVNJRnMifSw0NTc6e246IkJydEJlZ2luUVNJRiJ9LDQ1ODp7bjoiQnJ0RW5kUVNJRiJ9LDQ1OTp7bjoiQnJ0QmVnaW5BdXRvU29ydFNjb3BlIn0sNDYwOntuOiJCcnRFbmRBdXRv'@;
put 'U29ydFNjb3BlIn0sNDYxOntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZyJ9LDQ2Mjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYzOntuOiJCcnRCZWdpbkNGUnVsZSJ9LDQ2NDp7bjoiQnJ0RW5kQ0ZSdWxlIn0sNDY1OntuOiJCcnRCZWdpbkljb25TZXQifSw0'@;
put 'NjY6e246IkJydEVuZEljb25TZXQifSw0Njc6e246IkJydEJlZ2luRGF0YWJhciJ9LDQ2ODp7bjoiQnJ0RW5kRGF0YWJhciJ9LDQ2OTp7bjoiQnJ0QmVnaW5Db2xvclNjYWxlIn0sNDcwOntuOiJCcnRFbmRDb2xvclNjYWxlIn0sNDcxOntuOiJCcnRDRlZPIn0sNDcyOntuOiJCcnRFeHRlcm5W'@;
put 'YWx1ZU1ldGEifSw0NzM6e246IkJydEJlZ2luQ29sb3JQYWxldHRlIn0sNDc0OntuOiJCcnRFbmRDb2xvclBhbGV0dGUifSw0NzU6e246IkJydEluZGV4ZWRDb2xvciJ9LDQ3Njp7bjoiQnJ0TWFyZ2lucyIsZjpmdW5jdGlvbiBHaihTKXt2YXIgUj17fTtyZXR1cm4gR0QuZm9yRWFjaChmdW5j'@;
put 'dGlvbihrKXtSW2tdPVBsKFMpfSksUn19LDQ3Nzp7bjoiQnJ0UHJpbnRPcHRpb25zIn0sNDc4OntuOiJCcnRQYWdlU2V0dXAifSw0Nzk6e246IkJydEJlZ2luSGVhZGVyRm9vdGVyIn0sNDgwOntuOiJCcnRFbmRIZWFkZXJGb290ZXIifSw0ODE6e246IkJydEJlZ2luU1hDcnRGb3JtYXQifSw0'@;
put 'ODI6e246IkJydEVuZFNYQ3J0Rm9ybWF0In0sNDgzOntuOiJCcnRCZWdpblNYQ3J0Rm9ybWF0cyJ9LDQ4NDp7bjoiQnJ0RW5kU1hDcnRGb3JtYXRzIn0sNDg1OntuOiJCcnRXc0ZtdEluZm8iLGY6ZnVuY3Rpb24gVkQoUyl7dmFyIFI9e30saz17fSxHPXt9LFE9Uy5yZWFkX3NoaWZ0KDQpLGFl'@;
put 'PVMucmVhZF9zaGlmdCgyKTtHLndjaD1RPD02NTUzNj9RLzI1NjphZTt2YXIgZ2U9Uy5yZWFkX3NoaWZ0KDIpO2suaHB0PWdlLzIwO3ZhciBwZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIDImcGUmJihrLmhpZGRlbj0hMCksNCZwZSYmKFIudG9wdGhpY2s9ITApLDgmcGUmJihSLmJvdHRoaWNr'@;
put 'PSEwKSxSLnJvd291dGxpbmU9Uy5yZWFkX3NoaWZ0KDEpLFIuY29sb3V0bGluZT1TLnJlYWRfc2hpZnQoMSksVnYoayksUi5yb3c9ayxRMChHKSxSLmNvbD1HLFJ9fSw0ODY6e246IkJydEJlZ2luTWdzIn0sNDg3OntuOiJCcnRFbmRNR3MifSw0ODg6e246IkJydEJlZ2luTUdNYXBzIn0sNDg5'@;
put 'OntuOiJCcnRFbmRNR01hcHMifSw0OTA6e246IkJydEJlZ2luTUcifSw0OTE6e246IkJydEVuZE1HIn0sNDkyOntuOiJCcnRCZWdpbk1hcCJ9LDQ5Mzp7bjoiQnJ0RW5kTWFwIn0sNDk0OntuOiJCcnRITGluayIsZjpmdW5jdGlvbiB6aihTLFIpe3ZhciBrPVMubCtSLEc9Z3UoUywxNiksUT1l'@;
put 'MChTKSxhZT1wdShTKSxnZT1wdShTKSxwZT1wdShTKTtTLmw9azt2YXIgeWU9e3JmeDpHLHJlbElkOlEsbG9jOmFlLGRpc3BsYXk6cGV9O3JldHVybiBnZSYmKHllLlRvb2x0aXA9Z2UpLHllfX0sNDk1OntuOiJCcnRCZWdpbkRDb24ifSw0OTY6e246IkJydEVuZERDb24ifSw0OTc6e246IkJy'@;
put 'dEJlZ2luRFJlZnMifSw0OTg6e246IkJydEVuZERSZWZzIn0sNDk5OntuOiJCcnREUmVmIn0sNTAwOntuOiJCcnRCZWdpblNjZW5NYW4ifSw1MDE6e246IkJydEVuZFNjZW5NYW4ifSw1MDI6e246IkJydEJlZ2luU2N0In0sNTAzOntuOiJCcnRFbmRTY3QifSw1MDQ6e246IkJydFNsYyJ9LDUw'@;
put 'NTp7bjoiQnJ0QmVnaW5EWEZzIn0sNTA2OntuOiJCcnRFbmREWEZzIn0sNTA3OntuOiJCcnREWEYifSw1MDg6e246IkJydEJlZ2luVGFibGVTdHlsZXMifSw1MDk6e246IkJydEVuZFRhYmxlU3R5bGVzIn0sNTEwOntuOiJCcnRCZWdpblRhYmxlU3R5bGUifSw1MTE6e246IkJydEVuZFRhYmxl'@;
put 'U3R5bGUifSw1MTI6e246IkJydFRhYmxlU3R5bGVFbGVtZW50In0sNTEzOntuOiJCcnRUYWJsZVN0eWxlQ2xpZW50In0sNTE0OntuOiJCcnRCZWdpblZvbERlcHMifSw1MTU6e246IkJydEVuZFZvbERlcHMifSw1MTY6e246IkJydEJlZ2luVm9sVHlwZSJ9LDUxNzp7bjoiQnJ0RW5kVm9sVHlw'@;
put 'ZSJ9LDUxODp7bjoiQnJ0QmVnaW5Wb2xNYWluIn0sNTE5OntuOiJCcnRFbmRWb2xNYWluIn0sNTIwOntuOiJCcnRCZWdpblZvbFRvcGljIn0sNTIxOntuOiJCcnRFbmRWb2xUb3BpYyJ9LDUyMjp7bjoiQnJ0Vm9sU3VidG9waWMifSw1MjM6e246IkJydFZvbFJlZiJ9LDUyNDp7bjoiQnJ0Vm9s'@;
put 'TnVtIn0sNTI1OntuOiJCcnRWb2xFcnIifSw1MjY6e246IkJydFZvbFN0ciJ9LDUyNzp7bjoiQnJ0Vm9sQm9vbCJ9LDUyODp7bjoiQnJ0QmVnaW5DYWxjQ2hhaW4kIn0sNTI5OntuOiJCcnRFbmRDYWxjQ2hhaW4kIn0sNTMwOntuOiJCcnRCZWdpblNvcnRTdGF0ZSJ9LDUzMTp7bjoiQnJ0RW5k'@;
put 'U29ydFN0YXRlIn0sNTMyOntuOiJCcnRCZWdpblNvcnRDb25kIn0sNTMzOntuOiJCcnRFbmRTb3J0Q29uZCJ9LDUzNDp7bjoiQnJ0Qm9va1Byb3RlY3Rpb24ifSw1MzU6e246IkJydFNoZWV0UHJvdGVjdGlvbiJ9LDUzNjp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uIn0sNTM3OntuOiJCcnRQaG9u'@;
put 'ZXRpY0luZm8ifSw1Mzg6e246IkJydEJlZ2luRUNUeHRXaXoifSw1Mzk6e246IkJydEVuZEVDVHh0V2l6In0sNTQwOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0In0sNTQxOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdCJ9LDU0Mjp7bjoiQnJ0QmVnaW5FQ1R3RmxkSW5mbyJ9LDU0ODp7bjoi'@;
put 'QnJ0RmlsZVNoYXJpbmcifSw1NDk6e246IkJydE9sZVNpemUifSw1NTA6e246IkJydERyYXdpbmciLGY6ZzR9LDU1MTp7bjoiQnJ0TGVnYWN5RHJhd2luZyJ9LDU1Mjp7bjoiQnJ0TGVnYWN5RHJhd2luZ0hGIn0sNTUzOntuOiJCcnRXZWJPcHQifSw1NTQ6e246IkJydEJlZ2luV2ViUHViSXRl'@;
put 'bXMifSw1NTU6e246IkJydEVuZFdlYlB1Ykl0ZW1zIn0sNTU2OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW0ifSw1NTc6e246IkJydEVuZFdlYlB1Ykl0ZW0ifSw1NTg6e246IkJydEJlZ2luU1hDb25kRm10In0sNTU5OntuOiJCcnRFbmRTWENvbmRGbXQifSw1NjA6e246IkJydEJlZ2luU1hDb25k'@;
put 'Rm10cyJ9LDU2MTp7bjoiQnJ0RW5kU1hDb25kRm10cyJ9LDU2Mjp7bjoiQnJ0QmtIaW0ifSw1NjQ6e246IkJydENvbG9yIn0sNTY1OntuOiJCcnRCZWdpbkluZGV4ZWRDb2xvcnMifSw1NjY6e246IkJydEVuZEluZGV4ZWRDb2xvcnMifSw1Njk6e246IkJydEJlZ2luTVJVQ29sb3JzIn0sNTcw'@;
put 'OntuOiJCcnRFbmRNUlVDb2xvcnMifSw1NzI6e246IkJydE1SVUNvbG9yIn0sNTczOntuOiJCcnRCZWdpbkRWYWxzIn0sNTc0OntuOiJCcnRFbmREVmFscyJ9LDU3Nzp7bjoiQnJ0U3VwTmFtZVN0YXJ0In0sNTc4OntuOiJCcnRTdXBOYW1lVmFsdWVTdGFydCJ9LDU3OTp7bjoiQnJ0U3VwTmFt'@;
put 'ZVZhbHVlRW5kIn0sNTgwOntuOiJCcnRTdXBOYW1lTnVtIn0sNTgxOntuOiJCcnRTdXBOYW1lRXJyIn0sNTgyOntuOiJCcnRTdXBOYW1lU3QifSw1ODM6e246IkJydFN1cE5hbWVOaWwifSw1ODQ6e246IkJydFN1cE5hbWVCb29sIn0sNTg1OntuOiJCcnRTdXBOYW1lRm1sYSJ9LDU4Njp7bjoi'@;
put 'QnJ0U3VwTmFtZUJpdHMifSw1ODc6e246IkJydFN1cE5hbWVFbmQifSw1ODg6e246IkJydEVuZFN1cEJvb2sifSw1ODk6e246IkJydENlbGxTbWFydFRhZ1Byb3BlcnR5In0sNTkwOntuOiJCcnRCZWdpbkNlbGxTbWFydFRhZyJ9LDU5MTp7bjoiQnJ0RW5kQ2VsbFNtYXJ0VGFnIn0sNTkyOntu'@;
put 'OiJCcnRCZWdpbkNlbGxTbWFydFRhZ3MifSw1OTM6e246IkJydEVuZENlbGxTbWFydFRhZ3MifSw1OTQ6e246IkJydEJlZ2luU21hcnRUYWdzIn0sNTk1OntuOiJCcnRFbmRTbWFydFRhZ3MifSw1OTY6e246IkJydFNtYXJ0VGFnVHlwZSJ9LDU5Nzp7bjoiQnJ0QmVnaW5TbWFydFRhZ1R5cGVz'@;
put 'In0sNTk4OntuOiJCcnRFbmRTbWFydFRhZ1R5cGVzIn0sNTk5OntuOiJCcnRCZWdpblNYRmlsdGVycyJ9LDYwMDp7bjoiQnJ0RW5kU1hGaWx0ZXJzIn0sNjAxOntuOiJCcnRCZWdpblNYRklMVEVSIn0sNjAyOntuOiJCcnRFbmRTWEZpbHRlciJ9LDYwMzp7bjoiQnJ0QmVnaW5GaWxscyJ9LDYw'@;
put 'NDp7bjoiQnJ0RW5kRmlsbHMifSw2MDU6e246IkJydEJlZ2luQ2VsbFdhdGNoZXMifSw2MDY6e246IkJydEVuZENlbGxXYXRjaGVzIn0sNjA3OntuOiJCcnRDZWxsV2F0Y2gifSw2MDg6e246IkJydEJlZ2luQ1JFcnJzIn0sNjA5OntuOiJCcnRFbmRDUkVycnMifSw2MTA6e246IkJydENyYXNo'@;
put 'UmVjRXJyIn0sNjExOntuOiJCcnRCZWdpbkZvbnRzIn0sNjEyOntuOiJCcnRFbmRGb250cyJ9LDYxMzp7bjoiQnJ0QmVnaW5Cb3JkZXJzIn0sNjE0OntuOiJCcnRFbmRCb3JkZXJzIn0sNjE1OntuOiJCcnRCZWdpbkZtdHMifSw2MTY6e246IkJydEVuZEZtdHMifSw2MTc6e246IkJydEJlZ2lu'@;
put 'Q2VsbFhGcyJ9LDYxODp7bjoiQnJ0RW5kQ2VsbFhGcyJ9LDYxOTp7bjoiQnJ0QmVnaW5TdHlsZXMifSw2MjA6e246IkJydEVuZFN0eWxlcyJ9LDYyNTp7bjoiQnJ0QmlnTmFtZSJ9LDYyNjp7bjoiQnJ0QmVnaW5DZWxsU3R5bGVYRnMifSw2Mjc6e246IkJydEVuZENlbGxTdHlsZVhGcyJ9LDYy'@;
put 'ODp7bjoiQnJ0QmVnaW5Db21tZW50cyJ9LDYyOTp7bjoiQnJ0RW5kQ29tbWVudHMifSw2MzA6e246IkJydEJlZ2luQ29tbWVudEF1dGhvcnMifSw2MzE6e246IkJydEVuZENvbW1lbnRBdXRob3JzIn0sNjMyOntuOiJCcnRDb21tZW50QXV0aG9yIixmOl9CfSw2MzM6e246IkJydEJlZ2luQ29t'@;
put 'bWVudExpc3QifSw2MzQ6e246IkJydEVuZENvbW1lbnRMaXN0In0sNjM1OntuOiJCcnRCZWdpbkNvbW1lbnQiLGY6ZnVuY3Rpb24gUDUoUyl7dmFyIFI9e307Ui5pYXV0aG9yPVMucmVhZF9zaGlmdCg0KTt2YXIgaz1ndShTLDE2KTtyZXR1cm4gUi5yZng9ay5zLFIucmVmPXFpKGsucyksUy5s'@;
put 'Kz0xNixSfX0sNjM2OntuOiJCcnRFbmRDb21tZW50In0sNjM3OntuOiJCcnRDb21tZW50VGV4dCIsZjpMd30sNjM4OntuOiJCcnRCZWdpbk9sZU9iamVjdHMifSw2Mzk6e246IkJydE9sZU9iamVjdCJ9LDY0MDp7bjoiQnJ0RW5kT2xlT2JqZWN0cyJ9LDY0MTp7bjoiQnJ0QmVnaW5TeHJ1bGVz'@;
put 'In0sNjQyOntuOiJCcnRFbmRTeFJ1bGVzIn0sNjQzOntuOiJCcnRCZWdpbkFjdGl2ZVhDb250cm9scyJ9LDY0NDp7bjoiQnJ0QWN0aXZlWCJ9LDY0NTp7bjoiQnJ0RW5kQWN0aXZlWENvbnRyb2xzIn0sNjQ2OntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVyc1NvcnRCeSJ9LDY0ODp7bjoiQnJ0'@;
put 'QmVnaW5DZWxsSWdub3JlRUNzIn0sNjQ5OntuOiJCcnRDZWxsSWdub3JlRUMifSw2NTA6e246IkJydEVuZENlbGxJZ25vcmVFQ3MifSw2NTE6e246IkJydENzUHJvcCIsZjpmdW5jdGlvbiB1eihTLFIpe3JldHVybiBTLmwrPTEwLHtuYW1lOnB1KFMpfX19LDY1Mjp7bjoiQnJ0Q3NQYWdlU2V0'@;
put 'dXAifSw2NTM6e246IkJydEJlZ2luVXNlckNzVmlld3MifSw2NTQ6e246IkJydEVuZFVzZXJDc1ZpZXdzIn0sNjU1OntuOiJCcnRCZWdpblVzZXJDc1ZpZXcifSw2NTY6e246IkJydEVuZFVzZXJDc1ZpZXcifSw2NTc6e246IkJydEJlZ2luUGNkU0ZDSUVudHJpZXMifSw2NTg6e246IkJydEVu'@;
put 'ZFBDRFNGQ0lFbnRyaWVzIn0sNjU5OntuOiJCcnRQQ0RTRkNJRW50cnkifSw2NjA6e246IkJydEJlZ2luTGlzdFBhcnRzIn0sNjYxOntuOiJCcnRMaXN0UGFydCJ9LDY2Mjp7bjoiQnJ0RW5kTGlzdFBhcnRzIn0sNjYzOntuOiJCcnRTaGVldENhbGNQcm9wIn0sNjY0OntuOiJCcnRCZWdpbkZu'@;
put 'R3JvdXAifSw2NjU6e246IkJydEZuR3JvdXAifSw2NjY6e246IkJydEVuZEZuR3JvdXAifSw2Njc6e246IkJydFN1cEFkZGluIn0sNjY4OntuOiJCcnRTWFRETVBPcmRlciJ9LDY2OTp7bjoiQnJ0Q3NQcm90ZWN0aW9uIn0sNjcxOntuOiJCcnRCZWdpbldzU29ydE1hcCJ9LDY3Mjp7bjoiQnJ0'@;
put 'RW5kV3NTb3J0TWFwIn0sNjczOntuOiJCcnRCZWdpblJSU29ydCJ9LDY3NDp7bjoiQnJ0RW5kUlJTb3J0In0sNjc1OntuOiJCcnRSUlNvcnRJdGVtIn0sNjc2OntuOiJCcnRGaWxlU2hhcmluZ0lzbyJ9LDY3Nzp7bjoiQnJ0Qm9va1Byb3RlY3Rpb25Jc28ifSw2Nzg6e246IkJydFNoZWV0UHJv'@;
put 'dGVjdGlvbklzbyJ9LDY3OTp7bjoiQnJ0Q3NQcm90ZWN0aW9uSXNvIn0sNjgwOntuOiJCcnRSYW5nZVByb3RlY3Rpb25Jc28ifSw2ODE6e246IkJydERWYWxMaXN0In0sMTAyNDp7bjoiQnJ0UndEZXNjZW50In0sMTAyNTp7bjoiQnJ0S25vd25Gb250cyJ9LDEwMjY6e246IkJydEJlZ2luU1hU'@;
put 'dXBsZVNldCJ9LDEwMjc6e246IkJydEVuZFNYVHVwbGVTZXQifSwxMDI4OntuOiJCcnRCZWdpblNYVHVwbGVTZXRIZWFkZXIifSwxMDI5OntuOiJCcnRFbmRTWFR1cGxlU2V0SGVhZGVyIn0sMTAzMDp7bjoiQnJ0U1hUdXBsZVNldEhlYWRlckl0ZW0ifSwxMDMxOntuOiJCcnRCZWdpblNYVHVw'@;
put 'bGVTZXREYXRhIn0sMTAzMjp7bjoiQnJ0RW5kU1hUdXBsZVNldERhdGEifSwxMDMzOntuOiJCcnRCZWdpblNYVHVwbGVTZXRSb3cifSwxMDM0OntuOiJCcnRFbmRTWFR1cGxlU2V0Um93In0sMTAzNTp7bjoiQnJ0U1hUdXBsZVNldFJvd0l0ZW0ifSwxMDM2OntuOiJCcnROYW1lRXh0In0sMTAz'@;
put 'Nzp7bjoiQnJ0UENESDE0In0sMTAzODp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtMTQifSwxMDM5OntuOiJCcnRFbmRQQ0RDYWxjTWVtMTQifSwxMDQwOntuOiJCcnRTWFRIMTQifSwxMDQxOntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwIn0sMTA0Mjp7bjoiQnJ0RW5kU3BhcmtsaW5lR3JvdXAi'@;
put 'fSwxMDQzOntuOiJCcnRTcGFya2xpbmUifSwxMDQ0OntuOiJCcnRTWERJMTQifSwxMDQ1OntuOiJCcnRXc0ZtdEluZm9FeDE0In0sMTA0Njp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDc6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZzE0In0sMTA0ODp7'@;
put 'bjoiQnJ0QmVnaW5DRlJ1bGUxNCJ9LDEwNDk6e246IkJydEVuZENGUnVsZTE0In0sMTA1MDp7bjoiQnJ0Q0ZWTzE0In0sMTA1MTp7bjoiQnJ0QmVnaW5EYXRhYmFyMTQifSwxMDUyOntuOiJCcnRCZWdpbkljb25TZXQxNCJ9LDEwNTM6e246IkJydERWYWwxNCIsZjpmdW5jdGlvbiBJUyhTLFIs'@;
put 'ayl7dmFyIEc9ZnVuY3Rpb24gZG4oUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPXt9O3JldHVybiAxJkcmJihRLnJlZnM9ZnVuY3Rpb24gcW4oUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVtdO1ItLSA+MDspay5wdXNoKGlpKFMpKTtyZXR1cm4ga30oUykpLDImRyYmKFEu'@;
put 'c3FyZWZzPWZ1bmN0aW9uIFJvKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXTtSLS0gPjA7KWsucHVzaChTYShTKSk7cmV0dXJuIGt9KFMpKSw0JkcmJihRLmZvcm11bGFzPWZ1bmN0aW9uIGZzKFMsUixrKXtmb3IodmFyIEc9Uy5yZWFkX3NoaWZ0KDQpLFE9W107Ry0tID4wOylR'@;
put 'LnB1c2goRnUoUywwLGspKTtyZXR1cm4gUX0oUywwLGspKSw4JkcmJihRLnJlbElEPWZ1bmN0aW9uIGF2KFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gMD09PVI/IiI6Uy5yZWFkX3NoaWZ0KFIsInV0ZjE2bGUiKX0oUykpLFF9KFMsMCxrKSxRPVMucmVhZF9zaGlmdCg0KSxhZT1l'@;
put 'MChTKSxnZT1lMChTKSxwZT1lMChTKSx5ZT1lMChTKSxQZT0oRy5mb3JtdWxhc3x8W10pWzBdLE5lPShHLmZvcm11bGFzfHxbXSlbMV0sWWU9MTUmUSxldD17dDokRFtZZV0sc3FyZng6Ry5zcXJlZnNbMF0sczpbYWUsZ2UscGUseWVdfTtyZXR1cm4gUGUmJihldC5mMT1QZSksTmUmJihldC5m'@;
put 'Mj1OZSksMD09WWV8fDM9PVllfHw3PT1ZZXx8KGV0Lm9wPURTW1E+PjIwJjE1XSksZXR9fSwxMDU0OntuOiJCcnRCZWdpbkRWYWxzMTQifSwxMDU1OntuOiJCcnRDb2xvcjE0In0sMTA1Njp7bjoiQnJ0QmVnaW5TcGFya2xpbmVzIn0sMTA1Nzp7bjoiQnJ0RW5kU3BhcmtsaW5lcyJ9LDEwNTg6'@;
put 'e246IkJydEJlZ2luU3BhcmtsaW5lR3JvdXBzIn0sMTA1OTp7bjoiQnJ0RW5kU3BhcmtsaW5lR3JvdXBzIn0sMTA2MTp7bjoiQnJ0U1hWRDE0In0sMTA2Mjp7bjoiQnJ0QmVnaW5TWFZpZXcxNCJ9LDEwNjM6e246IkJydEVuZFNYVmlldzE0In0sMTA2NDp7bjoiQnJ0QmVnaW5TWFZpZXcxNiJ9'@;
put 'LDEwNjU6e246IkJydEVuZFNYVmlldzE2In0sMTA2Njp7bjoiQnJ0QmVnaW5QQ0QxNCJ9LDEwNjc6e246IkJydEVuZFBDRDE0In0sMTA2ODp7bjoiQnJ0QmVnaW5FeHRDb25uMTQifSwxMDY5OntuOiJCcnRFbmRFeHRDb25uMTQifSwxMDcwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlSURzIn0s'@;
put 'MTA3MTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRHMifSwxMDcyOntuOiJCcnRCZWdpblNsaWNlckNhY2hlSUQifSwxMDczOntuOiJCcnRFbmRTbGljZXJDYWNoZUlEIn0sMTA3NTp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZSJ9LDEwNzY6e246IkJydEVuZFNsaWNlckNhY2hlIn0sMTA3Nzp7bjoi'@;
put 'QnJ0QmVnaW5TbGljZXJDYWNoZURlZiJ9LDEwNzg6e246IkJydEVuZFNsaWNlckNhY2hlRGVmIn0sMTA3OTp7bjoiQnJ0QmVnaW5TbGljZXJzRXgifSwxMDgwOntuOiJCcnRFbmRTbGljZXJzRXgifSwxMDgxOntuOiJCcnRCZWdpblNsaWNlckV4In0sMTA4Mjp7bjoiQnJ0RW5kU2xpY2VyRXgi'@;
put 'fSwxMDgzOntuOiJCcnRCZWdpblNsaWNlciJ9LDEwODQ6e246IkJydEVuZFNsaWNlciJ9LDEwODU6e246IkJydFNsaWNlckNhY2hlUGl2b3RUYWJsZXMifSwxMDg2OntuOiJCcnRCZWdpblNsaWNlckNhY2hlT2xhcEltcGwifSwxMDg3OntuOiJCcnRFbmRTbGljZXJDYWNoZU9sYXBJbXBsIn0s'@;
put 'MTA4ODp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsc0RhdGEifSwxMDg5OntuOiJCcnRFbmRTbGljZXJDYWNoZUxldmVsc0RhdGEifSwxMDkwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5MTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbERhdGEifSwxMDkyOntu'@;
put 'OiJCcnRCZWdpblNsaWNlckNhY2hlU2lSYW5nZXMifSwxMDkzOntuOiJCcnRFbmRTbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5NDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2UifSwxMDk1OntuOiJCcnRFbmRTbGljZXJDYWNoZVNpUmFuZ2UifSwxMDk2OntuOiJCcnRTbGljZXJDYWNo'@;
put 'ZU9sYXBJdGVtIn0sMTA5Nzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMDk4OntuOiJCcnRTbGljZXJDYWNoZVNlbGVjdGlvbiJ9LDEwOTk6e246IkJydEVuZFNsaWNlckNhY2hlU2VsZWN0aW9ucyJ9LDExMDA6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVOYXRpdmUifSwx'@;
put 'MTAxOntuOiJCcnRFbmRTbGljZXJDYWNoZU5hdGl2ZSJ9LDExMDI6e246IkJydFNsaWNlckNhY2hlTmF0aXZlSXRlbSJ9LDExMDM6e246IkJydFJhbmdlUHJvdGVjdGlvbjE0In0sMTEwNDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvMTQifSwxMTA1OntuOiJCcnRDZWxsSWdub3JlRUMxNCJ9'@;
put 'LDExMTE6e246IkJydExpc3QxNCJ9LDExMTI6e246IkJydENGSWNvbiJ9LDExMTM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEcyJ9LDExMTQ6e246IkJydEVuZFNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE1OntuOiJCcnRCZWdpblNsaWNlcnMifSwxMTE2Ontu'@;
put 'OiJCcnRFbmRTbGljZXJzIn0sMTExNzp7bjoiQnJ0V2JQcm9wMTQifSwxMTE4OntuOiJCcnRCZWdpblNYRWRpdCJ9LDExMTk6e246IkJydEVuZFNYRWRpdCJ9LDExMjA6e246IkJydEJlZ2luU1hFZGl0cyJ9LDExMjE6e246IkJydEVuZFNYRWRpdHMifSwxMTIyOntuOiJCcnRCZWdpblNYQ2hh'@;
put 'bmdlIn0sMTEyMzp7bjoiQnJ0RW5kU1hDaGFuZ2UifSwxMTI0OntuOiJCcnRCZWdpblNYQ2hhbmdlcyJ9LDExMjU6e246IkJydEVuZFNYQ2hhbmdlcyJ9LDExMjY6e246IkJydFNYVHVwbGVJdGVtcyJ9LDExMjg6e246IkJydEJlZ2luU2xpY2VyU3R5bGUifSwxMTI5OntuOiJCcnRFbmRTbGlj'@;
put 'ZXJTdHlsZSJ9LDExMzA6e246IkJydFNsaWNlclN0eWxlRWxlbWVudCJ9LDExMzE6e246IkJydEJlZ2luU3R5bGVTaGVldEV4dDE0In0sMTEzMjp7bjoiQnJ0RW5kU3R5bGVTaGVldEV4dDE0In0sMTEzMzp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZXNQaXZvdENhY2hlSUQifSwxMTM0OntuOiJC'@;
put 'cnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSUQifSwxMTM1OntuOiJCcnRCZWdpbkNvbmRpdGlvbmFsRm9ybWF0dGluZ3MifSwxMTM2OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmdzIn0sMTEzNzp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtRXh0In0sMTEzODp7bjoiQnJ0RW5kUENE'@;
put 'Q2FsY01lbUV4dCJ9LDExMzk6e246IkJydEJlZ2luUENEQ2FsY01lbXNFeHQifSwxMTQwOntuOiJCcnRFbmRQQ0RDYWxjTWVtc0V4dCJ9LDExNDE6e246IkJydFBDREZpZWxkMTQifSwxMTQyOntuOiJCcnRCZWdpblNsaWNlclN0eWxlcyJ9LDExNDM6e246IkJydEVuZFNsaWNlclN0eWxlcyJ9'@;
put 'LDExNDQ6e246IkJydEJlZ2luU2xpY2VyU3R5bGVFbGVtZW50cyJ9LDExNDU6e246IkJydEVuZFNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ2OntuOiJCcnRDRlJ1bGVFeHQifSwxMTQ3OntuOiJCcnRCZWdpblNYQ29uZEZtdDE0In0sMTE0ODp7bjoiQnJ0RW5kU1hDb25kRm10MTQifSwxMTQ5'@;
put 'OntuOiJCcnRCZWdpblNYQ29uZEZtdHMxNCJ9LDExNTA6e246IkJydEVuZFNYQ29uZEZtdHMxNCJ9LDExNTI6e246IkJydEJlZ2luU29ydENvbmQxNCJ9LDExNTM6e246IkJydEVuZFNvcnRDb25kMTQifSwxMTU0OntuOiJCcnRFbmREVmFsczE0In0sMTE1NTp7bjoiQnJ0RW5kSWNvblNldDE0'@;
put 'In0sMTE1Njp7bjoiQnJ0RW5kRGF0YWJhcjE0In0sMTE1Nzp7bjoiQnJ0QmVnaW5Db2xvclNjYWxlMTQifSwxMTU4OntuOiJCcnRFbmRDb2xvclNjYWxlMTQifSwxMTU5OntuOiJCcnRCZWdpblN4cnVsZXMxNCJ9LDExNjA6e246IkJydEVuZFN4cnVsZXMxNCJ9LDExNjE6e246IkJydEJlZ2lu'@;
put 'UFJ1bGUxNCJ9LDExNjI6e246IkJydEVuZFBSdWxlMTQifSwxMTYzOntuOiJCcnRCZWdpblBSRmlsdGVyczE0In0sMTE2NDp7bjoiQnJ0RW5kUFJGaWx0ZXJzMTQifSwxMTY1OntuOiJCcnRCZWdpblBSRmlsdGVyMTQifSwxMTY2OntuOiJCcnRFbmRQUkZpbHRlcjE0In0sMTE2Nzp7bjoiQnJ0'@;
put 'QmVnaW5QUkZJdGVtMTQifSwxMTY4OntuOiJCcnRFbmRQUkZJdGVtMTQifSwxMTY5OntuOiJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MxNCJ9LDExNzA6e246IkJydEVuZENlbGxJZ25vcmVFQ3MxNCJ9LDExNzE6e246IkJydER4ZjE0In0sMTE3Mjp7bjoiQnJ0QmVnaW5EeEYxNHMifSwxMTczOntu'@;
put 'OiJCcnRFbmREeGYxNHMifSwxMTc3OntuOiJCcnRGaWx0ZXIxNCJ9LDExNzg6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVyczE0In0sMTE4MDp7bjoiQnJ0Q3VzdG9tRmlsdGVyMTQifSwxMTgxOntuOiJCcnRJY29uRmlsdGVyMTQifSwxMTgyOntuOiJCcnRQaXZvdENhY2hlQ29ubmVjdGlvbk5h'@;
put 'bWUifSwyMDQ4OntuOiJCcnRCZWdpbkRlY291cGxlZFBpdm90Q2FjaGVJRHMifSwyMDQ5OntuOiJCcnRFbmREZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA1MDp7bjoiQnJ0RGVjb3VwbGVkUGl2b3RDYWNoZUlEIn0sMjA1MTp7bjoiQnJ0QmVnaW5QaXZvdFRhYmxlUmVmcyJ9LDIwNTI6e246'@;
put 'IkJydEVuZFBpdm90VGFibGVSZWZzIn0sMjA1Mzp7bjoiQnJ0UGl2b3RUYWJsZVJlZiJ9LDIwNTQ6e246IkJydFNsaWNlckNhY2hlQm9va1Bpdm90VGFibGVzIn0sMjA1NTp7bjoiQnJ0QmVnaW5TeHZjZWxscyJ9LDIwNTY6e246IkJydEVuZFN4dmNlbGxzIn0sMjA1Nzp7bjoiQnJ0QmVnaW5T'@;
put 'eFJvdyJ9LDIwNTg6e246IkJydEVuZFN4Um93In0sMjA2MDp7bjoiQnJ0UGNkQ2FsY01lbTE1In0sMjA2Nzp7bjoiQnJ0UXNpMTUifSwyMDY4OntuOiJCcnRCZWdpbldlYkV4dGVuc2lvbnMifSwyMDY5OntuOiJCcnRFbmRXZWJFeHRlbnNpb25zIn0sMjA3MDp7bjoiQnJ0V2ViRXh0ZW5zaW9u'@;
put 'In0sMjA3MTp7bjoiQnJ0QWJzUGF0aDE1In0sMjA3Mjp7bjoiQnJ0QmVnaW5QaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzM6e246IkJydEVuZFBpdm90VGFibGVVSVNldHRpbmdzIn0sMjA3NTp7bjoiQnJ0VGFibGVTbGljZXJDYWNoZUlEcyJ9LDIwNzY6e246IkJydFRhYmxlU2xpY2VyQ2Fj'@;
put 'aGVJRCJ9LDIwNzc6e246IkJydEJlZ2luVGFibGVTbGljZXJDYWNoZSJ9LDIwNzg6e246IkJydEVuZFRhYmxlU2xpY2VyQ2FjaGUifSwyMDc5OntuOiJCcnRTeEZpbHRlcjE1In0sMjA4MDp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODE6e246IkJydEVuZFRp'@;
put 'bWVsaW5lQ2FjaGVQaXZvdENhY2hlSURzIn0sMjA4Mjp7bjoiQnJ0VGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRCJ9LDIwODM6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZUlEcyJ9LDIwODQ6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVJRHMifSwyMDg1OntuOiJCcnRCZWdpblRpbWVsaW5lQ2Fj'@;
put 'aGVJRCJ9LDIwODY6e246IkJydEVuZFRpbWVsaW5lQ2FjaGVJRCJ9LDIwODc6e246IkJydEJlZ2luVGltZWxpbmVzRXgifSwyMDg4OntuOiJCcnRFbmRUaW1lbGluZXNFeCJ9LDIwODk6e246IkJydEJlZ2luVGltZWxpbmVFeCJ9LDIwOTA6e246IkJydEVuZFRpbWVsaW5lRXgifSwyMDkxOntu'@;
put 'OiJCcnRXb3JrQm9va1ByMTUifSwyMDkyOntuOiJCcnRQQ0RIMTUifSwyMDkzOntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGUifSwyMDk0OntuOiJCcnRFbmRUaW1lbGluZVN0eWxlIn0sMjA5NTp7bjoiQnJ0VGltZWxpbmVTdHlsZUVsZW1lbnQifSwyMDk2OntuOiJCcnRCZWdpblRpbWVsaW5l'@;
put 'U3R5bGVzaGVldEV4dDE1In0sMjA5Nzp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZXNoZWV0RXh0MTUifSwyMDk4OntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGVzIn0sMjA5OTp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZXMifSwyMTAwOntuOiJCcnRCZWdpblRpbWVsaW5lU3R5bGVFbGVtZW50cyJ9'@;
put 'LDIxMDE6e246IkJydEVuZFRpbWVsaW5lU3R5bGVFbGVtZW50cyJ9LDIxMDI6e246IkJydER4ZjE1In0sMjEwMzp7bjoiQnJ0QmVnaW5EeGZzMTUifSwyMTA0OntuOiJicnRFbmREeGZzMTUifSwyMTA1OntuOiJCcnRTbGljZXJDYWNoZUhpZGVJdGVtc1dpdGhOb0RhdGEifSwyMTA2OntuOiJC'@;
put 'cnRCZWdpbkl0ZW1VbmlxdWVOYW1lcyJ9LDIxMDc6e246IkJydEVuZEl0ZW1VbmlxdWVOYW1lcyJ9LDIxMDg6e246IkJydEl0ZW1VbmlxdWVOYW1lIn0sMjEwOTp7bjoiQnJ0QmVnaW5FeHRDb25uMTUifSwyMTEwOntuOiJCcnRFbmRFeHRDb25uMTUifSwyMTExOntuOiJCcnRCZWdpbk9sZWRi'@;
put 'UHIxNSJ9LDIxMTI6e246IkJydEVuZE9sZWRiUHIxNSJ9LDIxMTM6e246IkJydEJlZ2luRGF0YUZlZWRQcjE1In0sMjExNDp7bjoiQnJ0RW5kRGF0YUZlZWRQcjE1In0sMjExNTp7bjoiQnJ0VGV4dFByMTUifSwyMTE2OntuOiJCcnRSYW5nZVByMTUifSwyMTE3OntuOiJCcnREYkNvbW1hbmQx'@;
put 'NSJ9LDIxMTg6e246IkJydEJlZ2luRGJUYWJsZXMxNSJ9LDIxMTk6e246IkJydEVuZERiVGFibGVzMTUifSwyMTIwOntuOiJCcnREYlRhYmxlMTUifSwyMTIxOntuOiJCcnRCZWdpbkRhdGFNb2RlbCJ9LDIxMjI6e246IkJydEVuZERhdGFNb2RlbCJ9LDIxMjM6e246IkJydEJlZ2luTW9kZWxU'@;
put 'YWJsZXMifSwyMTI0OntuOiJCcnRFbmRNb2RlbFRhYmxlcyJ9LDIxMjU6e246IkJydE1vZGVsVGFibGUifSwyMTI2OntuOiJCcnRCZWdpbk1vZGVsUmVsYXRpb25zaGlwcyJ9LDIxMjc6e246IkJydEVuZE1vZGVsUmVsYXRpb25zaGlwcyJ9LDIxMjg6e246IkJydE1vZGVsUmVsYXRpb25zaGlw'@;
put 'In0sMjEyOTp7bjoiQnJ0QmVnaW5FQ1R4dFdpejE1In0sMjEzMDp7bjoiQnJ0RW5kRUNUeHRXaXoxNSJ9LDIxMzE6e246IkJydEJlZ2luRUNUV0ZsZEluZm9Mc3QxNSJ9LDIxMzI6e246IkJydEVuZEVDVFdGbGRJbmZvTHN0MTUifSwyMTMzOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvMTUifSwy'@;
put 'MTM0OntuOiJCcnRGaWVsZExpc3RBY3RpdmVJdGVtIn0sMjEzNTp7bjoiQnJ0UGl2b3RDYWNoZUlkVmVyc2lvbiJ9LDIxMzY6e246IkJydFNYREkxNSJ9LDIxMzc6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmdzIn0sMjEzODp7bjoiQnJ0RW5kTW9kZWxUaW1lR3JvdXBpbmdzIn0sMjEz'@;
put 'OTp7bjoiQnJ0QmVnaW5Nb2RlbFRpbWVHcm91cGluZyJ9LDIxNDA6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5nIn0sMjE0MTp7bjoiQnJ0TW9kZWxUaW1lR3JvdXBpbmdDYWxjQ29sIn0sMzA3Mjp7bjoiQnJ0VWlkIn0sMzA3Mzp7bjoiQnJ0UmV2aXNpb25QdHIifSw1MDk1OntuOiJCcnRC'@;
put 'ZWdpbkNhbGNGZWF0dXJlcyJ9LDUwOTY6e246IkJydEVuZENhbGNGZWF0dXJlcyJ9LDUwOTc6e246IkJydENhbGNGZWF0dXJlIn0sNjU1MzU6e246IiJ9fSxGej1JZShSOCwibiIpO0Z6LkJydEZSVEFyY2hJRCQ9MTY7dmFyIEtTPXs2OntuOiJGb3JtdWxhIixmOlFDfSwxMDp7bjoiRU9GIixm'@;
put 'OnIyfSwxMjp7bjoiQ2FsY0NvdW50IixmOkVjfSwxMzp7bjoiQ2FsY01vZGUiLGY6RWN9LDE0OntuOiJDYWxjUHJlY2lzaW9uIixmOmRhfSwxNTp7bjoiQ2FsY1JlZk1vZGUiLGY6ZGF9LDE2OntuOiJDYWxjRGVsdGEiLGY6UGx9LDE3OntuOiJDYWxjSXRlciIsZjpkYX0sMTg6e246IlByb3Rl'@;
put 'Y3QiLGY6ZGF9LDE5OntuOiJQYXNzd29yZCIsZjpFY30sMjA6e246IkhlYWRlciIsZjpxQX0sMjE6e246IkZvb3RlciIsZjpxQX0sMjM6e246IkV4dGVyblNoZWV0IixmOnh2fSwyNDp7bjoiTGJsIixmOnRDfSwyNTp7bjoiV2luUHJvdGVjdCIsZjpkYX0sMjY6e246IlZlcnRpY2FsUGFnZUJy'@;
put 'ZWFrcyJ9LDI3OntuOiJIb3Jpem9udGFsUGFnZUJyZWFrcyJ9LDI4OntuOiJOb3RlIixmOmZ1bmN0aW9uIFhBKFMsUixrKXtyZXR1cm4gZnVuY3Rpb24gQ2EoUyxSLGspe2lmKCEoay5iaWZmPDgpKXt2YXIgRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksYWU9Uy5yZWFkX3No'@;
put 'aWZ0KDIpLGdlPVMucmVhZF9zaGlmdCgyKSxwZT1YMChTLDAsayk7cmV0dXJuIGsuYmlmZjw4JiZTLnJlYWRfc2hpZnQoMSksW3tyOkcsYzpRfSxwZSxnZSxhZV19fShTLDAsayl9fSwyOTp7bjoiU2VsZWN0aW9uIixmOmZ1bmN0aW9uIE1mKFMsUixrKXtyZXR1cm4gayYmay5iaWZmPDU/KFMu'@;
put 'bCs9Uix7Y2VsbDp7cjowLGM6MH19KTooUy5yZWFkX3NoaWZ0KDEpLHtjZWxsOnFpKHtyOlMucmVhZF9zaGlmdCgyKSxjOlMucmVhZF9zaGlmdCgyKX0pfSl9fSwzNDp7bjoiRGF0ZTE5MDQiLGY6ZGF9LDM1OntuOiJFeHRlcm5OYW1lIixmOmVDfSwzODp7bjoiTGVmdE1hcmdpbiIsZjpQbH0s'@;
put 'Mzk6e246IlJpZ2h0TWFyZ2luIixmOlBsfSw0MDp7bjoiVG9wTWFyZ2luIixmOlBsfSw0MTp7bjoiQm90dG9tTWFyZ2luIixmOlBsfSw0Mjp7bjoiUHJpbnRSb3dDb2wiLGY6ZGF9LDQzOntuOiJQcmludEdyaWQiLGY6ZGF9LDQ3OntuOiJGaWxlUGFzcyIsZjpmdW5jdGlvbiBnQyhTLFIsayl7'@;
put 'aWYoay5lbmMpcmV0dXJuIGsuZW5jO3ZhciBHPXtUeXBlOmsuYmlmZj49OD9TLnJlYWRfc2hpZnQoMik6MH07cmV0dXJuIEcuVHlwZT9mdW5jdGlvbiBGdihTLFIsayxHKXt2YXIgUT1HfHx7fTtpZihRLkluZm89Uy5yZWFkX3NoaWZ0KDIpLFMubC09MiwxPT09US5JbmZvKXtpZihRLkRhdGE9'@;
put 'ZnVuY3Rpb24gUXRlKFMpe3ZhciBSPXt9LGs9Ui5FbmNyeXB0aW9uVmVyc2lvbkluZm89UDEoUyw0KTtpZigxIT1rLk1ham9yfHwxIT1rLk1pbm9yKXRocm93InVucmVjb2duaXplZCB2ZXJzaW9uIGNvZGUgIitrLk1ham9yKyIgOiAiK2suTWlub3I7cmV0dXJuIFIuU2FsdD1TLnJlYWRfc2hp'@;
put 'ZnQoMTYpLFIuRW5jcnlwdGVkVmVyaWZpZXI9Uy5yZWFkX3NoaWZ0KDE2KSxSLkVuY3J5cHRlZFZlcmlmaWVySGFzaD1TLnJlYWRfc2hpZnQoMTYpLFJ9KFMpLGsucGFzc3dvcmQmJnR5cGVvZiBHNDwidSIpe3ZhciBhZT1HNChrLnBhc3N3b3JkLFEuRGF0YS5TYWx0LCIwMDAwMDAwMCIpLGdl'@;
put 'PVNlKFEuRGF0YS5FbmNyeXB0ZWRWZXJpZmllcitRLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXJIYXNoLCJoZXgiKSxwZT1LbC5yYzQoU2UoYWUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSxnZSk7Ry52YWxpZD1LbC5tZDUocGUuc2xpY2UoMCwxNikpPT1CdWZmZXIuZnJvbShwZS5zbGljZSgx'@;
put 'NikpLnRvU3RyaW5nKCJoZXgiKSxRLkRhdGEuS2V5PWFlLEcuaW5zaXR1PWZ1bmN0aW9uIEt6KFMsUil7dmFyIGs9bmV3IEFycmF5KDI1NiksRz0wLFE9MCxhZT0wLGdlPTA7ZnVuY3Rpb24gcGUoZXQpe2ZvcihHPTAsUT0wLGFlPTAsZ2U9MCxRPTA7MjU2IT1ROysrUSlrW1FdPVE7Zm9yKGFl'@;
put 'PTAsUT0wOzI1NiE9UTsrK1Epe3RyeXthZT1hZStrW1FdK2V0W1ElZXQubGVuZ3RoXS5jaGFyQ29kZUF0KDApJjI1NX1jYXRjaChjdCl7dGhyb3cgY29uc29sZS5sb2coUSxldFtRJWV0Lmxlbmd0aF0pLGN0fWdlPWtbUV0sa1tRXT1rW2FlXSxrW2FlXT1nZX1RPWFlPTB9ZnVuY3Rpb24geWUo'@;
put 'ZXQpe3ZhciBjdD1WKGV0Lmxlbmd0aCk7Zm9yKEc9MDtHIT1ldC5sZW5ndGg7KytHKWdlPWtbUT1RKzEmMjU1XSxrW1FdPWtbYWU9KGFlK2tbUV0pJTI1Nl0sa1thZV09Z2UsY3RbR109ZXRbR11ea1trW1FdK2tbYWVdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKGN0KX12YXIgUGU9Uy5LZXks'@;
put 'TmU9MDtwZShTZShQZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgWWU9MDtyZXR1cm4gZnVuY3Rpb24oZXQpe2lmKFllK2V0Lmxlbmd0aDwxMDI0KXJldHVybiBZZSs9ZXQubGVuZ3RoLHllKGV0KTt2YXIgb3Q9MCxidD1TZShldC5zbGljZShvdCxvdCsoRXQ9MTAyNC1ZZSkpKTtv'@;
put 'dCs9RXQsWWU9MDt2YXIganQ9eWUoYnQpO2ZvcihvdD09ZXQubGVuZ3RoJiYoKytOZSxQZT1HNChSLFMuU2FsdCxQOChOZSkpLHBlKFNlKFBlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTtvdDxldC5sZW5ndGg7KXsrK05lLFBlPUc0KFIsUy5TYWx0LFA4KE5lKSkscGUoQnVmZmVyLmZy'@;
put 'b20oUGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIEV0PU1hdGgubWluKDEwMjQsZXQubGVuZ3RoLW90KTtidD1TZShldC5zbGljZShvdCxvdCtFdCkpLG90Kz1FdCxZZT1FdCxqdD1CdWZmZXIuY29uY2F0KFtqdCx5ZShidCldKX1yZXR1cm4ganR9fShRLkRhdGEsay5wYXNzd29y'@;
put 'ZCl9fWVsc2UgaWYoUS5EYXRhPWZ1bmN0aW9uIE92KFMsUil7dmFyIGs9e30sRz1rLkVuY3J5cHRpb25WZXJzaW9uSW5mbz1QMShTLDQpO2lmKFItPTQsMiE9Ry5NaW5vcil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBtaW5vciB2ZXJzaW9uIGNvZGU6ICIrRy5NaW5vcik7aWYoRy5N'@;
put 'YWpvcj40fHxHLk1ham9yPDIpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWFqb3IgdmVyc2lvbiBjb2RlOiAiK0cuTWFqb3IpO2suRmxhZ3M9Uy5yZWFkX3NoaWZ0KDQpLFItPTQ7dmFyIFE9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBSLT00LGsuRW5jcnlwdGlvbkhlYWRlcj1EVihT'@;
put 'LFEpLGsuRW5jcnlwdGlvblZlcmlmaWVyPUx2KFMsUi09USksa30oUyxSKSxRLkRhdGEmJlEuRGF0YS5FbmNyeXB0aW9uSGVhZGVyJiYyNjYyNT09PVEuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLkFsZ0lEJiZrLnBhc3N3b3JkJiZ0eXBlb2YgJDQ8InUiKXt2YXIgeWU9JDQoay5wYXNzd29yZCxR'@;
put 'LkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQudG9TdHJpbmcoImhleCIpLCIwMDAwMDAwMCIpLFBlPVEuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zOzU9PVBlfHxQZTx5ZS5sZW5ndGgmJih5ZT15ZS5zbGljZSgwLFBlKSk7dmFyIE5lPVNlKFEuRGF0YS5FbmNyeXB0aW9u'@;
put 'VmVyaWZpZXIuVmVyaWZpZXIudG9TdHJpbmcoImhleCIpK1EuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIuVmVyaWZpZXJIYXNoLnRvU3RyaW5nKCJoZXgiKSwiaGV4IiksWWU9S2wucmM0KHllLnRvU3RyaW5nKCJiaW5hcnkiKSxOZSk7Ry52YWxpZD1tYyhZZS5zbGljZSgwLFBlKSwiU0hBMSIp'@;
put 'LnRvU3RyaW5nKCJoZXgiKT09WWUuc2xpY2UoUGUpLnRvU3RyaW5nKCJoZXgiKSxRLkRhdGEuS2V5PXllLEcudmFsaWQmJihHLmluc2l0dT1mdW5jdGlvbiBRbmUoUyxSKXt2YXIgaz1uZXcgQXJyYXkoMjU2KSxHPTAsUT0wLGFlPTAsZ2U9MCxwZT1TLkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6'@;
put 'ZT4+PjM7ZnVuY3Rpb24geWUoY3Qpe2ZvcihjdD1CdWZmZXIuZnJvbShjdC5zbGljZSgwLHBlKSksRz0wLFE9MCxhZT0wLGdlPTAsUT0wOzI1NiE9UTsrK1Epa1tRXT1RO2ZvcihhZT0wLFE9MDsyNTYhPVE7KytRKXt2YXIgRXQ9Y3RbUSVjdC5sZW5ndGhdO2FlPWFlK2tbUV0rKCJzdHJpbmci'@;
put 'PT10eXBlb2YgRXQ/RXQuY2hhckNvZGVBdCgwKTpFdCkmMjU1LGdlPWtbUV0sa1tRXT1rW2FlXSxrW2FlXT1nZX1RPWFlPTB9ZnVuY3Rpb24gUGUoY3Qpe3ZhciBFdD1WKGN0Lmxlbmd0aCk7Zm9yKEc9MDtHIT1jdC5sZW5ndGg7KytHKWdlPWtbUT1RKzEmMjU1XSxrW1FdPWtbYWU9KGFlK2tb'@;
put 'UV0pJTI1Nl0sa1thZV09Z2UsRXRbR109Y3RbR11ea1trW1FdK2tbYWVdJjI1NV07cmV0dXJuIEJ1ZmZlci5mcm9tKEV0KX12YXIgTmU9Uy5LZXksWWU9MDt5ZShTZShOZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2YXIgZXQ9MDtyZXR1cm4gZnVuY3Rpb24oY3Qpe2lmKGV0K2N0Lmxl'@;
put 'bmd0aDwxMDI0KXJldHVybiBldCs9Y3QubGVuZ3RoLFBlKGN0KTt2YXIgb3Q9MTAyNC1ldCxidD0wLGp0PUJ1ZmZlci5mcm9tKGN0LnNsaWNlKGJ0LGJ0K290KSk7YnQrPW90LGV0PTA7dmFyIGt0PVBlKGp0KTtmb3IoYnQ9PWN0Lmxlbmd0aCYmKCsrWWUsTmU9JDQoUixTLkVuY3J5cHRpb25W'@;
put 'ZXJpZmllci5TYWx0LFA4KFllKSkseWUoQnVmZmVyLmZyb20oTmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO2J0PGN0Lmxlbmd0aDspKytZZSxOZT0kNChSLFMuRW5jcnlwdGlvblZlcmlmaWVyLlNhbHQsUDgoWWUpKSx5ZShCdWZmZXIuZnJvbShOZSwiaGV4IikudG9TdHJpbmcoImJp'@;
put 'bmFyeSIpKSxvdD1NYXRoLm1pbigxMDI0LGN0Lmxlbmd0aC1idCksanQ9QnVmZmVyLmZyb20oY3Quc2xpY2UoYnQsYnQrb3QpKSxidCs9b3Qsb3Q8MTAyNCYmKGV0PW90KSxrdD1CdWZmZXIuY29uY2F0KFtrdCxQZShqdCldKTtyZXR1cm4ga3R9fShRLkRhdGEsay5wYXNzd29yZCkpfXJldHVy'@;
put 'biBRfShTLFItMixrLEcpOmZ1bmN0aW9uIExWKFMsUixrLEcpe3ZhciBRPXtrZXk6RWMoUyksdmVyaWZpY2F0aW9uQnl0ZXM6RWMoUyl9O2sucGFzc3dvcmQmJihRLnZlcmlmaWVyPVB2KGsucGFzc3dvcmQpKSxHLnZhbGlkPVEudmVyaWZpY2F0aW9uQnl0ZXM9PT1RLnZlcmlmaWVyLEcudmFs'@;
put 'aWQmJihHLmluc2l0dT1mdW5jdGlvbihTLFIpe3ZhciBrPVJ8fDAsRz1wQyhTKTtyZXR1cm4gZnVuY3Rpb24oUSl7dmFyIGFlPWZ1bmN0aW9uKFMsUixrLEcsUSl7dmFyIGFlLGdlO2ZvcihRfHwoUT1SKSxHfHwoRz1wQygiIikpLGFlPTA7YWUhPVIubGVuZ3RoOysrYWUpZ2U9MjU1JigoZ2U9'@;
put 'UlthZV0pPj41fGdlPDwzKSxRW2FlXT1nZV49R1trXSxrPWsrMSYxNTtyZXR1cm5bUSxrLEddfSgwLFEsayxHKTtyZXR1cm4gaz1hZVsxXSxhZVswXX19KGsucGFzc3dvcmQsMCkpfShTLDAsayxHKSxHfX0sNDk6e246IkZvbnQiLGY6ZnVuY3Rpb24gV0EoUyxSLGspe3ZhciBHPXtzejpTLnJl'@;
put 'YWRfc2hpZnQoMikvMjB9LFE9T3coUyk7US5mQm9sZCYmKEcuYm9sZD0xKSxRLmZJdGFsaWMmJihHLml0YWxpYz0xKSxRLmZVbmRlcmxpbmUmJihHLnVuZGVybGluZT0xKSxRLmZDb25kZW5zZSYmKEcuY29uZGVuc2U9MSksUS5mRXh0ZW5kJiYoRy5leHRlbmQ9MSksUS5mU2hhZG93JiYoRy5z'@;
put 'aGFkb3c9MSksUS5mT3V0bGluZSYmKEcub3V0bGluZT0xKSxRLmZTdHJpa2VvdXQmJihHLnN0cmlrZT0xKTt2YXIgYWU9ayYmay5iaWZmfHw4O2lmKDIhPWFlJiYoRy5pY3Y9Uy5yZWFkX3NoaWZ0KDIpLDMhPWFlJiY0IT1hZSkpe3N3aXRjaCg3MDA9PT1TLnJlYWRfc2hpZnQoMikmJihHLmJv'@;
put 'bGQ9MSksUy5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6Ry52YWxpZ249InN1cGVyIjticmVhaztjYXNlIDI6Ry52YWxpZ249InN1YiJ9dmFyIHBlPVMucmVhZF9zaGlmdCgxKTswIT1wZSYmKEcudW5kZXJsaW5lPXBlKTt2YXIgeWU9Uy5yZWFkX3NoaWZ0KDEpO3llPjAmJihHLmZhbWlseT15ZSk7'@;
put 'dmFyIFBlPVMucmVhZF9zaGlmdCgxKTtQZT4wJiYoRy5jaGFyc2V0PVBlKSxTLmwrPTF9cmV0dXJuIEcubmFtZT1abyhTLDAsayksR319LDUxOntuOiJQcmludFNpemUiLGY6RWN9LDYwOntuOiJDb250aW51ZSJ9LDYxOntuOiJXaW5kb3cxIixmOmZ1bmN0aW9uIFl0ZShTKXtyZXR1cm57UG9z'@;
put 'OltTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXSxEaW06W1MucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoMildLEZsYWdzOlMucmVhZF9zaGlmdCgyKSxDdXJUYWI6Uy5yZWFkX3NoaWZ0KDIpLEZpcnN0VGFiOlMucmVhZF9zaGlmdCgyKSxTZWxlY3RlZDpTLnJlYWRfc2hpZnQo'@;
put 'MiksVGFiUmF0aW86Uy5yZWFkX3NoaWZ0KDIpfX19LDY0OntuOiJCYWNrdXAiLGY6ZGF9LDY1OntuOiJQYW5lIixmOmZ1bmN0aW9uIFpBKFMsUixrKXtpZihrJiZrLmJpZmY8NSlyZXR1cm57fTt2YXIgRz17fTtyZXR1cm4gRy54PVMucmVhZF9zaGlmdCgyKSxHLnk9Uy5yZWFkX3NoaWZ0KDIp'@;
put 'LEcucndUb3A9Uy5yZWFkX3NoaWZ0KDIpLEcuY29sTGVmdD1TLnJlYWRfc2hpZnQoMiksRy5wbm5BY2N0PVMucmVhZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSksR319LDY2OntuOiJDb2RlUGFnZSIsZjpFY30sNzc6e246IlBscyIsZjpJbn0sODA6e246IkRDb24ifSw4MTp7bjoiRENvblJl'@;
put 'ZiJ9LDgyOntuOiJEQ29uTmFtZSJ9LDg1OntuOiJEZWZDb2xXaWR0aCIsZjpFY30sODk6e246IlhDVCJ9LDkwOntuOiJDUk4ifSw5MTp7bjoiRmlsZVNoYXJpbmcifSw5Mjp7bjoiV3JpdGVBY2Nlc3MiLGY6ZnVuY3Rpb24gS3coUyxSLGspe2lmKGsuZW5jKXJldHVybiBTLmwrPVIsIiI7dmFy'@;
put 'IEc9Uy5sLFE9WDAoUywwLGspO3JldHVybiBTLnJlYWRfc2hpZnQoUitHLVMubCksUX19LDkzOntuOiJPYmoiLGY6ZnVuY3Rpb24gdVYoUyxSLGspe2lmKGsmJmsuYmlmZjw4KXJldHVybiBmdW5jdGlvbiBRQShTLFIsayl7Uy5sKz00O3ZhciBHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9z'@;
put 'aGlmdCgyKSxhZT1TLnJlYWRfc2hpZnQoMik7Uy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz02O3ZhciBnZT1bXTtyZXR1cm4gZ2UucHVzaCgoSkFbR118fEluKShTLFItPTM2LGspKSx7Y21vOltRLEcsYWVdLGZ0Omdl'@;
put 'fX0oUyxSLGspO3ZhciBHPXY1KFMpLFE9ZnVuY3Rpb24gSjAoUyxSLGspe2Zvcih2YXIgRz1TLmwrUixRPVtdO1MubDxHOyl7dmFyIGFlPVMucmVhZF9zaGlmdCgyKTtTLmwtPTI7dHJ5e1FbYWVdPVNmW2FlXShTLEctUy5sKX1jYXRjaHtyZXR1cm4gUy5sPUcsUX19cmV0dXJuIFMubCE9RyYm'@;
put 'KFMubD1HKSxRfShTLFItMjIpO3JldHVybntjbW86RyxmdDpRfX19LDk0OntuOiJVbmNhbGNlZCJ9LDk1OntuOiJDYWxjU2F2ZVJlY2FsYyIsZjpkYX0sOTY6e246IlRlbXBsYXRlIn0sOTc6e246IkludGwifSw5OTp7bjoiT2JqUHJvdGVjdCIsZjpkYX0sMTI1OntuOiJDb2xJbmZvIixmOnJD'@;
put 'fSwxMjg6e246Ikd1dHMiLGY6ZnVuY3Rpb24gYVYoUyl7Uy5sKz00O3ZhciBSPVtTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXTtpZigwIT09UlswXSYmUlswXS0tLDAhPT1SWzFdJiZSWzFdLS0sUlswXT43fHxSWzFdPjcpdGhyb3cgbmV3IEVycm9yKCJCYWQgR3V0dGVyczogIitS'@;
put 'LmpvaW4oInwiKSk7cmV0dXJuIFJ9fSwxMjk6e246IldzQm9vbCIsZjpmdW5jdGlvbiBNdihTLFIsayl7dmFyIEc9ayYmOD09ay5iaWZmfHwyPT1SP1MucmVhZF9zaGlmdCgyKTooUy5sKz1SLDApO3JldHVybntmRGlhbG9nOjE2JkcsZkJlbG93OjY0JkcsZlJpZ2h0OjEyOCZHfX19LDEzMDp7'@;
put 'bjoiR3JpZFNldCIsZjpFY30sMTMxOntuOiJIQ2VudGVyIixmOmRhfSwxMzI6e246IlZDZW50ZXIiLGY6ZGF9LDEzMzp7bjoiQm91bmRTaGVldDgiLGY6ZnVuY3Rpb24gVTYoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPTMmUy5yZWFkX3NoaWZ0KDEpLGFlPVMucmVhZF9zaGlmdCgx'@;
put 'KTtzd2l0Y2goYWUpe2Nhc2UgMDphZT0iV29ya3NoZWV0IjticmVhaztjYXNlIDE6YWU9Ik1hY3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjphZT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2OmFlPSJWQkFNb2R1bGUifXZhciBnZT1abyhTLDAsayk7cmV0dXJuIDA9PT1nZS5sZW5ndGgmJihnZT0i'@;
put 'U2hlZXQxIikse3BvczpHLGhzOlEsZHQ6YWUsbmFtZTpnZX19fSwxMzQ6e246IldyaXRlUHJvdGVjdCJ9LDE0MDp7bjoiQ291bnRyeSIsZjpmdW5jdGlvbiBnVihTKXt2YXIgayxSPVswLDBdO3JldHVybiBrPVMucmVhZF9zaGlmdCgyKSxSWzBdPWs2W2tdfHxrLGs9Uy5yZWFkX3NoaWZ0KDIp'@;
put 'LFJbMV09azZba118fGssUn19LDE0MTp7bjoiSGlkZU9iaiIsZjpFY30sMTQ0OntuOiJTb3J0In0sMTQ2OntuOiJQYWxldHRlIixmOmZ1bmN0aW9uIHd0KFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1bXTtSLS0gPjA7KWsucHVzaChkZChTKSk7cmV0dXJuIGt9fSwxNTE6e246IlN5'@;
put 'bmMifSwxNTI6e246IkxQciJ9LDE1Mzp7bjoiRHhHQ29sIn0sMTU0OntuOiJGbkdyb3VwTmFtZSJ9LDE1NTp7bjoiRmlsdGVyTW9kZSJ9LDE1Njp7bjoiQnVpbHRJbkZuR3JvdXBDb3VudCIsZjpFY30sMTU3OntuOiJBdXRvRmlsdGVySW5mbyJ9LDE1ODp7bjoiQXV0b0ZpbHRlciJ9LDE2MDp7'@;
put 'bjoiU2NsIixmOmVrfSwxNjE6e246IlNldHVwIixmOmZ1bmN0aW9uIGgyKFMsUil7dmFyIGs9e307cmV0dXJuIFI8MzJ8fChTLmwrPTE2LGsuaGVhZGVyPVBsKFMpLGsuZm9vdGVyPVBsKFMpLFMubCs9Miksa319LDE3NDp7bjoiU2Nlbk1hbiJ9LDE3NTp7bjoiU0NFTkFSSU8ifSwxNzY6e246'@;
put 'IlN4VmlldyJ9LDE3Nzp7bjoiU3h2ZCJ9LDE3ODp7bjoiU1hWSSJ9LDE4MDp7bjoiU3hJdmQifSwxODE6e246IlNYTEkifSwxODI6e246IlNYUEkifSwxODQ6e246IkRvY1JvdXRlIn0sMTg1OntuOiJSZWNpcE5hbWUifSwxODk6e246Ik11bFJrIixmOmZ1bmN0aW9uIG9WKFMsUil7Zm9yKHZh'@;
put 'ciBrPVMubCtSLTIsRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksYWU9W107Uy5sPGs7KWFlLnB1c2god2EoUykpO2lmKFMubCE9PWspdGhyb3cgbmV3IEVycm9yKCJNdWxSSyByZWFkIGVycm9yIik7dmFyIGdlPVMucmVhZF9zaGlmdCgyKTtpZihhZS5sZW5ndGghPWdlLVEr'@;
put 'MSl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOkcsYzpRLEM6Z2UscmtyZWM6YWV9fX0sMTkwOntuOiJNdWxCbGFuayIsZjpmdW5jdGlvbiBLdGUoUyxSKXtmb3IodmFyIGs9Uy5sK1ItMixHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgy'@;
put 'KSxhZT1bXTtTLmw8azspYWUucHVzaChTLnJlYWRfc2hpZnQoMikpO2lmKFMubCE9PWspdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayByZWFkIGVycm9yIik7dmFyIGdlPVMucmVhZF9zaGlmdCgyKTtpZihhZS5sZW5ndGghPWdlLVErMSl0aHJvdyBuZXcgRXJyb3IoIk11bEJsYW5rIGxlbmd0'@;
put 'aCBtaXNtYXRjaCIpO3JldHVybntyOkcsYzpRLEM6Z2UsaXhmZTphZX19fSwxOTM6e246Ik1tcyIsZjpyMn0sMTk3OntuOiJTWERJIn0sMTk4OntuOiJTWERCIn0sMTk5OntuOiJTWEZEQiJ9LDIwMDp7bjoiU1hEQkIifSwyMDE6e246IlNYTnVtIn0sMjAyOntuOiJTeEJvb2wiLGY6ZGF9LDIw'@;
put 'Mzp7bjoiU3hFcnIifSwyMDQ6e246IlNYSW50In0sMjA1OntuOiJTWFN0cmluZyJ9LDIwNjp7bjoiU1hEdHIifSwyMDc6e246IlN4TmlsIn0sMjA4OntuOiJTWFRibCJ9LDIwOTp7bjoiU1hUQlJHSUlUTSJ9LDIxMDp7bjoiU3hUYnBnIn0sMjExOntuOiJPYlByb2oifSwyMTM6e246IlNYU3Ry'@;
put 'ZWFtSUQifSwyMTU6e246IkRCQ2VsbCJ9LDIxNjp7bjoiU1hSbmcifSwyMTc6e246IlN4SXN4b3BlciJ9LDIxODp7bjoiQm9va0Jvb2wiLGY6RWN9LDIyMDp7bjoiRGJPclBhcmFtUXJ5In0sMjIxOntuOiJTY2VuYXJpb1Byb3RlY3QiLGY6ZGF9LDIyMjp7bjoiT2xlT2JqZWN0U2l6ZSJ9LDIy'@;
put 'NDp7bjoiWEYiLGY6ZnVuY3Rpb24gSncoUyxSLGspe3ZhciBHPXt9O3JldHVybiBHLmlmbnQ9Uy5yZWFkX3NoaWZ0KDIpLEcubnVtRm10SWQ9Uy5yZWFkX3NoaWZ0KDIpLEcuZmxhZ3M9Uy5yZWFkX3NoaWZ0KDIpLEcuZlN0eWxlPUcuZmxhZ3M+PjImMSxHLmRhdGE9ZnVuY3Rpb24gQ2woUyxS'@;
put 'LGssRyl7dmFyIFE9e30sYWU9Uy5yZWFkX3NoaWZ0KDQpLGdlPVMucmVhZF9zaGlmdCg0KSxwZT1TLnJlYWRfc2hpZnQoNCkseWU9Uy5yZWFkX3NoaWZ0KDIpO2lmKFEucGF0dGVyblR5cGU9dXZbcGU+PjI2XSwhRy5jZWxsU3R5bGVzKXJldHVybiBRO3ZhciBQZT03JmFlO3N3aXRjaChQZSl7'@;
put 'Y2FzZSAxOlEuaGFsaWduPSJsZWZ0IjticmVhaztjYXNlIDI6US5oYWxpZ249ImNlbnRlciI7YnJlYWs7Y2FzZSAzOlEuaGFsaWduPSJyaWdodCJ9c3dpdGNoKFEuZldyYXA9YWU+PjMmMSxQZT1hZT4+NCY3KXtjYXNlIDA6US52YWxpZ249InRvcCI7YnJlYWs7Y2FzZSAxOlEudmFsaWduPSJj'@;
put 'ZW50ZXIiO2JyZWFrO2Nhc2UgMjpRLnZhbGlnbj0iYm90dG9tIn1yZXR1cm4gUS5mSnVzdExhc3Q9YWU+PjcmMSxRLnRyb3Q9YWU+PjgmMjU1LFEuY0luZGVudD1hZT4+MTYmMTUsUS5mU2hyaW5rVG9GaXQ9YWU+PjIwJjEsUS5pUmVhZE9yZGVyPWFlPj4yMiYyLFEuZkF0ck51bT1hZT4+MjYm'@;
put 'MSxRLmZBdHJGbnQ9YWU+PjI3JjEsUS5mQXRyQWxjPWFlPj4yOCYxLFEuZkF0ckJkcj1hZT4+MjkmMSxRLmZBdHJQYXQ9YWU+PjMwJjEsUS5mQXRyUHJvdD1hZT4+MzEmMSxRLmRnTGVmdD0xNSZnZSxRLmRnUmlnaHQ9Z2U+PjQmMTUsUS5kZ1RvcD1nZT4+OCYxNSxRLmRnQm90dG9tPWdlPj4x'@;
put 'MiYxNSxRLmljdkxlZnQ9Z2U+PjE2JjEyNyxRLmljdlJpZ2h0PWdlPj4yMyYxMjcsUS5ncmJpdERpYWc9Z2U+PjMwJjMsUS5pY3ZUb3A9MTI3JnBlLFEuaWN2Qm90dG9tPXBlPj43JjEyNyxRLmljdkRpYWc9cGU+PjE0JjEyNyxRLmRnRGlhZz1wZT4+MjEmMTUsUS5pY3ZGb3JlPTEyNyZ5ZSxR'@;
put 'LmljdkJhY2s9eWU+PjcmMTI3LFEuZnN4QnV0dG9uPXllPj4xNCYxLFF9KFMsMCwwLGspLEd9fSwyMjU6e246IkludGVyZmFjZUhkciIsZjpmdW5jdGlvbiAkdyhTLFIpe3JldHVybiAwPT09Unx8Uy5yZWFkX3NoaWZ0KDIpLDEyMDB9fSwyMjY6e246IkludGVyZmFjZUVuZCIsZjpyMn0sMjI3'@;
put 'OntuOiJTWFZTIn0sMjI5OntuOiJNZXJnZUNlbGxzIixmOmZ1bmN0aW9uIHF0ZShTLFIpe2Zvcih2YXIgaz1bXSxHPVMucmVhZF9zaGlmdCgyKTtHLS07KWsucHVzaChzMihTKSk7cmV0dXJuIGt9fSwyMzM6e246IkJrSGltIn0sMjM1OntuOiJNc29EcmF3aW5nR3JvdXAifSwyMzY6e246Ik1z'@;
put 'b0RyYXdpbmcifSwyMzc6e246Ik1zb0RyYXdpbmdTZWxlY3Rpb24ifSwyMzk6e246IlBob25ldGljSW5mbyJ9LDI0MDp7bjoiU3hSdWxlIn0sMjQxOntuOiJTWEV4In0sMjQyOntuOiJTeEZpbHQifSwyNDQ6e246IlN4RFhGIn0sMjQ1OntuOiJTeEl0bSJ9LDI0Njp7bjoiU3hOYW1lIn0sMjQ3'@;
put 'OntuOiJTeFNlbGVjdCJ9LDI0ODp7bjoiU1hQYWlyIn0sMjQ5OntuOiJTeEZtbGEifSwyNTE6e246IlN4Rm9ybWF0In0sMjUyOntuOiJTU1QiLGY6ZnVuY3Rpb24gWjYoUyxSKXtmb3IodmFyIGs9Uy5sK1IsRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCksYWU9W10sZ2U9MDtn'@;
put 'ZSE9USYmUy5sPGs7KytnZSlhZS5wdXNoKGZjKFMpKTtyZXR1cm4gYWUuQ291bnQ9RyxhZS5VbmlxdWU9USxhZX19LDI1Mzp7bjoiTGFiZWxTc3QiLGY6ZnVuY3Rpb24gblYoUyl7dmFyIFI9XzAoUyk7cmV0dXJuIFIuaXNzdD1TLnJlYWRfc2hpZnQoNCksUn19LDI1NTp7bjoiRXh0U1NUIixm'@;
put 'OmZ1bmN0aW9uIENlKFMsUil7dmFyIGs9e307cmV0dXJuIGsuZHNzdD1TLnJlYWRfc2hpZnQoMiksUy5sKz1SLTIsa319LDI1Njp7bjoiU1hWREV4In0sMjU5OntuOiJTWEZvcm11bGEifSwyOTA6e246IlNYREJFeCJ9LDMxMTp7bjoiUlJESW5zRGVsIn0sMzEyOntuOiJSUkRIZWFkIn0sMzE1'@;
put 'OntuOiJSUkRDaGdDZWxsIn0sMzE3OntuOiJSUlRhYklkIixmOnc0fSwzMTg6e246IlJSRFJlblNoZWV0In0sMzE5OntuOiJSUlNvcnQifSwzMjA6e246IlJSRE1vdmUifSwzMzA6e246IlJSRm9ybWF0In0sMzMxOntuOiJSUkF1dG9GbXQifSwzMzM6e246IlJSSW5zZXJ0U2gifSwzMzQ6e246'@;
put 'IlJSRE1vdmVCZWdpbiJ9LDMzNTp7bjoiUlJETW92ZUVuZCJ9LDMzNjp7bjoiUlJESW5zRGVsQmVnaW4ifSwzMzc6e246IlJSREluc0RlbEVuZCJ9LDMzODp7bjoiUlJEQ29uZmxpY3QifSwzMzk6e246IlJSRERlZk5hbWUifSwzNDA6e246IlJSRFJzdEV0eHAifSwzNTE6e246IkxSbmcifSwz'@;
put 'NTI6e246IlVzZXNFTEZzIixmOmRhfSwzNTM6e246IkRTRiIsZjpyMn0sNDAxOntuOiJDVXNyIn0sNDAyOntuOiJDYlVzciJ9LDQwMzp7bjoiVXNySW5mbyJ9LDQwNDp7bjoiVXNyRXhjbCJ9LDQwNTp7bjoiRmlsZUxvY2sifSw0MDY6e246IlJSREluZm8ifSw0MDc6e246IkJDVXNycyJ9LDQw'@;
put 'ODp7bjoiVXNyQ2hrIn0sNDI1OntuOiJVc2VyQlZpZXcifSw0MjY6e246IlVzZXJTVmlld0JlZ2luIn0sNDI3OntuOiJVc2VyU1ZpZXdFbmQifSw0Mjg6e246IlJSRFVzZXJWaWV3In0sNDI5OntuOiJRc2kifSw0MzA6e246IlN1cEJvb2siLGY6ZnVuY3Rpb24gZDIoUyxSLGspe3ZhciBHPVMu'@;
put 'bCtSLFE9Uy5yZWFkX3NoaWZ0KDIpLGFlPVMucmVhZF9zaGlmdCgyKTtpZihrLnNiY2NoPWFlLDEwMjU9PWFlfHwxNDg0OT09YWUpcmV0dXJuW2FlLFFdO2lmKGFlPDF8fGFlPjI1NSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgU3VwQm9vayB0eXBlOiAiK2FlKTtmb3IodmFyIGdlPXJj'@;
put 'KFMsYWUpLHBlPVtdO0c+Uy5sOylwZS5wdXNoKHR1KFMpKTtyZXR1cm5bYWUsUSxnZSxwZV19fSw0MzE6e246IlByb3Q0UmV2IixmOmRhfSw0MzI6e246IkNvbmRGbXQifSw0MzM6e246IkNGIn0sNDM0OntuOiJEVmFsIn0sNDM3OntuOiJEQ29uQmluIn0sNDM4OntuOiJUeE8iLGY6ZnVuY3Rp'@;
put 'b24geTUoUyxSLGspe3ZhciBHPVMubCxRPSIiLGFlPS0xO3RyeXtTLmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoay5sYXN0b2JqfHx7Y21vOlswLDBdfSkuY21vWzFdKT9TLmwrPTY6ZnVuY3Rpb24gcGMoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpO1MubCsrO3ZhciBrPVMu'@;
put 'cmVhZF9zaGlmdCgyKTtTLmwrPTJ9KFMpO3ZhciB5ZT1TLnJlYWRfc2hpZnQoMik7Uy5yZWFkX3NoaWZ0KDIpLGFlPVMucmVhZF9zaGlmdCgyKTt2YXIgTmU9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9TmU7Zm9yKHZhciBZZT0xO1llPFMubGVucy5sZW5ndGgtMTsrK1llKXtpZihTLmwtRyE9Uy5s'@;
put 'ZW5zW1llXSl0aHJvdyBuZXcgRXJyb3IoIlR4TzogYmFkIGNvbnRpbnVlIHJlY29yZCIpO3ZhciBldD1TW1MubF07aWYoKFErPXJjKFMsUy5sZW5zW1llKzFdLVMubGVuc1tZZV0tMSkpLmxlbmd0aD49KGV0P3llOjIqeWUpKWJyZWFrfWlmKFEubGVuZ3RoIT09eWUmJlEubGVuZ3RoIT09Mip5'@;
put 'ZSl0aHJvdyBuZXcgRXJyb3IoImNjaFRleHQ6ICIreWUrIiAhPSAiK1EubGVuZ3RoKTtyZXR1cm4gUy5sPUcrUix7dDpRLGlmbnQ6YWV9fWNhdGNoe3JldHVybiBTLmw9RytSLHt0OlEsaWZudDphZX19fX0sNDM5OntuOiJSZWZyZXNoQWxsIixmOmRhfSw0NDA6e246IkhMaW5rIixmOmZ1bmN0'@;
put 'aW9uIGRWKFMsUil7dmFyIGs9czIoUyk7Uy5sKz0xNjt2YXIgRz1mdW5jdGlvbiBVbChTLFIpe3ZhciBrPVMubCtSLEc9Uy5yZWFkX3NoaWZ0KDQpO2lmKDIhPT1HKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHN0cmVhbVZlcnNpb246ICIrRyk7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIp'@;
put 'O1MubCs9Mjt2YXIgYWUsZ2UscGUseWUsTmUsWWUsUGU9IiI7MTYmUSYmKGFlPUM0KFMpKSwxMjgmUSYmKGdlPUM0KFMpKSwhKDI1NyZ+USkmJihwZT1DNChTKSksMT09KDI1NyZRKSYmKHllPWZ1bmN0aW9uIF9mKFMsUil7dmFyIGs9Uy5yZWFkX3NoaWZ0KDE2KTtzd2l0Y2goayl7Y2FzZSJl'@;
put 'MGM5ZWE3OWY5YmFjZTExOGM4MjAwYWEwMDRiYTkwYiI6cmV0dXJuIGZ1bmN0aW9uIEwxKFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVMubCxHPSExO1I+MjQmJihTLmwrPVItMjQsIjc5NTg4MWY0M2IxZDdmNDhhZjJjODI1ZGM0ODUyNzYzIj09PVMucmVhZF9zaGlmdCgxNikmJihHPSEw'@;
put 'KSxTLmw9ayk7dmFyIFE9Uy5yZWFkX3NoaWZ0KChHP1ItMjQ6Uik+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKEUsIiIpO3JldHVybiBHJiYoUy5sKz0yNCksUX0oUyk7Y2FzZSIwMzAzMDAwMDAwMDAwMDAwYzAwMDAwMDAwMDAwMDA0NiI6cmV0dXJuIGZ1bmN0aW9uIGJhKFMpe2Zvcih2YXIgUj1T'@;
put 'LnJlYWRfc2hpZnQoMiksaz0iIjtSLS0gPjA7KWsrPSIuLi8iO3ZhciBHPVMucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIik7aWYoUy5sKz0yLDU3MDA1IT1TLnJlYWRfc2hpZnQoMikpdGhyb3cgbmV3IEVycm9yKCJCYWQgRmlsZU1vbmlrZXIiKTtpZigwPT09Uy5yZWFkX3NoaWZ0KDQpKXJl'@;
put 'dHVybiBrK0cucmVwbGFjZSgvXFwvZywiLyIpO3ZhciBhZT1TLnJlYWRfc2hpZnQoNCk7aWYoMyE9Uy5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7cmV0dXJuIGsrUy5yZWFkX3NoaWZ0KGFlPj4xLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKX0oUyk7'@;
put 'ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE1vbmlrZXIgIitrKX19KFMpKSw4JlEmJihQZT1DNChTKSksMzImUSYmKE5lPVMucmVhZF9zaGlmdCgxNikpLDY0JlEmJihZZT1IMyhTKSksUy5sPWs7dmFyIGV0PWdlfHxwZXx8eWV8fCIiO2V0JiZQZSYmKGV0Kz0iIyIrUGUp'@;
put 'LGV0fHwoZXQ9IiMiK1BlKSwyJlEmJiIvIj09ZXQuY2hhckF0KDApJiYiLyIhPWV0LmNoYXJBdCgxKSYmKGV0PSJmaWxlOi8vIitldCk7dmFyIGN0PXtUYXJnZXQ6ZXR9O3JldHVybiBOZSYmKGN0Lmd1aWQ9TmUpLFllJiYoY3QudGltZT1ZZSksYWUmJihjdC5Ub29sdGlwPWFlKSxjdH0oUyxS'@;
put 'LTI0KTtyZXR1cm5bayxHXX19LDQ0MTp7bjoiTGVsIn0sNDQyOntuOiJDb2RlTmFtZSIsZjp0dX0sNDQzOntuOiJTWEZEQlR5cGUifSw0NDQ6e246IlByb3Q0UmV2UGFzcyIsZjpFY30sNDQ1OntuOiJPYk5vTWFjcm9zIn0sNDQ2OntuOiJEdiJ9LDQ0ODp7bjoiRXhjZWw5RmlsZSIsZjpyMn0s'@;
put 'NDQ5OntuOiJSZWNhbGNJZCIsZjpmdW5jdGlvbiBoZChTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCg0KX0scjoyfSw0NTA6e246IkVudEV4VTIiLGY6cjJ9LDUxMjp7bjoiRGltZW5zaW9ucyIsZjpYd30sNTEzOntuOiJCbGFuayIsZjpYdGV9LDUxNTp7bjoiTnVtYmVy'@;
put 'IixmOmZ1bmN0aW9uIHNWKFMsUixrKXtrLmJpZmZndWVzcyYmMj09ay5iaWZmJiYoay5iaWZmPTUpO3ZhciBHPV8wKFMpLFE9UGwoUyk7cmV0dXJuIEcudmFsPVEsR319LDUxNjp7bjoiTGFiZWwiLGY6ZnVuY3Rpb24gR0EoUyxSLGspe2suYmlmZmd1ZXNzJiYyPT1rLmJpZmYmJihrLmJpZmY9'@;
put 'NSk7dmFyIFE9XzAoUyk7Mj09ay5iaWZmJiZTLmwrKzt2YXIgYWU9dHUoUywwLGspO3JldHVybiBRLnZhbD1hZSxRfX0sNTE3OntuOiJCb29sRXJyIixmOkU0fSw1MTk6e246IlN0cmluZyIsZjpMMH0sNTIwOntuOiJSb3ciLGY6ZnVuY3Rpb24gS2UoUyl7dmFyIFI9e307Ui5yPVMucmVhZF9z'@;
put 'aGlmdCgyKSxSLmM9Uy5yZWFkX3NoaWZ0KDIpLFIuY250PVMucmVhZF9zaGlmdCgyKS1SLmM7dmFyIGs9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9NDt2YXIgRz1TLnJlYWRfc2hpZnQoMSk7Uy5sKz0xO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUi5peGZlPTQwOTUmUSw3JkcmJihSLmxl'@;
put 'dmVsPTcmRyksMzImRyYmKFIuaGlkZGVuPSEwKSw2NCZHJiYoUi5ocHQ9ay8yMCksUn19LDUyMzp7bjoiSW5kZXgifSw1NDU6e246IkFycmF5IixmOlR2fSw1NDk6e246IkRlZmF1bHRSb3dIZWlnaHQiLGY6YzJ9LDU2Njp7bjoiVGFibGUifSw1NzQ6e246IldpbmRvdzIiLGY6ZnVuY3Rpb24g'@;
put 'JHRlKFMsUixrKXtpZihrJiZrLmJpZmY+PTImJmsuYmlmZjw1KXJldHVybnt9O3ZhciBHPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57UlRMOjY0JkcsZ3JpZDohISgyJkcpLGZyb3plbjohISg4JkcpfX19LDYzODp7bjoiUksiLGY6ZnVuY3Rpb24gS0EoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIp'@;
put 'LGs9Uy5yZWFkX3NoaWZ0KDIpLEc9d2EoUyk7cmV0dXJue3I6UixjOmssaXhmZTpHWzBdLHJrbnVtOkdbMV19fX0sNjU5OntuOiJTdHlsZSIsZjpmdW5jdGlvbiBSMChTLFIsayl7cmV0dXJuIFMubCs9Uix7fX19LDEwNDg6e246IkJpZ05hbWUifSwxMDU0OntuOiJGb3JtYXQiLGY6ZnVuY3Rp'@;
put 'b24gcXcoUyxSLGspe3JldHVybltTLnJlYWRfc2hpZnQoMiksWDAoUywwLGspXX19LDEwODQ6e246IkNvbnRpbnVlQmlnTmFtZSJ9LDEyMTI6e246IlNockZtbGEiLGY6ZnVuY3Rpb24gRXYoUyxSLGspe3ZhciBHPU00KFMpO1MubCsrO3ZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm5bSzMo'@;
put 'UyxSLT04LGspLFEsR119fSwyMDQ4OntuOiJITGlua1Rvb2x0aXAiLGY6ZnVuY3Rpb24gZlYoUyxSKXtTLnJlYWRfc2hpZnQoMik7dmFyIGs9czIoUyksRz1TLnJlYWRfc2hpZnQoKFItMTApLzIsImRiY3MtY29udCIpO3JldHVybltrLEc9Ry5yZXBsYWNlKEUsIiIpXX19LDIwNDk6e246Ildl'@;
put 'YlB1YiJ9LDIwNTA6e246IlFzaVNYVGFnIn0sMjA1MTp7bjoiREJRdWVyeUV4dCJ9LDIwNTI6e246IkV4dFN0cmluZyJ9LDIwNTM6e246IlR4dFFyeSJ9LDIwNTQ6e246IlFzaXIifSwyMDU1OntuOiJRc2lmIn0sMjA1Njp7bjoiUlJEVFFTSUYifSwyMDU3OntuOiJCT0YiLGY6TmN9LDIwNTg6'@;
put 'e246Ik9sZURiQ29ubiJ9LDIwNTk6e246IldPcHQifSwyMDYwOntuOiJTWFZpZXdFeCJ9LDIwNjE6e246IlNYVEgifSwyMDYyOntuOiJTWFBJRXgifSwyMDYzOntuOiJTWFZEVEV4In0sMjA2NDp7bjoiU1hWaWV3RXg5In0sMjA2Njp7bjoiQ29udGludWVGcnQifSwyMDY3OntuOiJSZWFsVGlt'@;
put 'ZURhdGEifSwyMTI4OntuOiJDaGFydEZydEluZm8ifSwyMTI5OntuOiJGcnRXcmFwcGVyIn0sMjEzMDp7bjoiU3RhcnRCbG9jayJ9LDIxMzE6e246IkVuZEJsb2NrIn0sMjEzMjp7bjoiU3RhcnRPYmplY3QifSwyMTMzOntuOiJFbmRPYmplY3QifSwyMTM0OntuOiJDYXRMYWIifSwyMTM1Ontu'@;
put 'OiJZTXVsdCJ9LDIxMzY6e246IlNYVmlld0xpbmsifSwyMTM3OntuOiJQaXZvdENoYXJ0Qml0cyJ9LDIxMzg6e246IkZydEZvbnRMaXN0In0sMjE0Njp7bjoiU2hlZXRFeHQifSwyMTQ3OntuOiJCb29rRXh0IixyOjEyfSwyMTQ4OntuOiJTWEFkZGwifSwyMTQ5OntuOiJDckVyciJ9LDIxNTA6'@;
put 'e246IkhGUGljdHVyZSJ9LDIxNTE6e246IkZlYXRIZHIiLGY6cjJ9LDIxNTI6e246IkZlYXQifSwyMTU0OntuOiJEYXRhTGFiRXh0In0sMjE1NTp7bjoiRGF0YUxhYkV4dENvbnRlbnRzIn0sMjE1Njp7bjoiQ2VsbFdhdGNoIn0sMjE2MTp7bjoiRmVhdEhkcjExIn0sMjE2Mjp7bjoiRmVhdHVy'@;
put 'ZTExIn0sMjE2NDp7bjoiRHJvcERvd25PYmpJZHMifSwyMTY1OntuOiJDb250aW51ZUZydDExIn0sMjE2Njp7bjoiRENvbm4ifSwyMTY3OntuOiJMaXN0MTIifSwyMTY4OntuOiJGZWF0dXJlMTIifSwyMTY5OntuOiJDb25kRm10MTIifSwyMTcwOntuOiJDRjEyIn0sMjE3MTp7bjoiQ0ZFeCJ9'@;
put 'LDIxNzI6e246IlhGQ1JDIixmOmZ1bmN0aW9uIHVsKFMpe1MubCs9Mjt2YXIgUj17Y3hmczowLGNyYzowfTtyZXR1cm4gUi5jeGZzPVMucmVhZF9zaGlmdCgyKSxSLmNyYz1TLnJlYWRfc2hpZnQoNCksUn0scjoxMn0sMjE3Mzp7bjoiWEZFeHQiLGY6ZnVuY3Rpb24gYUIoUyxSKXtTLmwrPTI7'@;
put 'dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9Mjtmb3IodmFyIFE9Uy5yZWFkX3NoaWZ0KDIpLGFlPVtdO1EtLSA+MDspYWUucHVzaChZdihTKSk7cmV0dXJue2l4ZmU6RyxleHQ6YWV9fSxyOjEyfSwyMTc0OntuOiJBdXRvRmlsdGVyMTIifSwyMTc1OntuOiJDb250aW51ZUZydDEyIn0sMjE4'@;
put 'MDp7bjoiTURUSW5mbyJ9LDIxODE6e246Ik1EWFN0ciJ9LDIxODI6e246Ik1EWFR1cGxlIn0sMjE4Mzp7bjoiTURYU2V0In0sMjE4NDp7bjoiTURYUHJvcCJ9LDIxODU6e246Ik1EWEtQSSJ9LDIxODY6e246Ik1EQiJ9LDIxODc6e246IlBMViJ9LDIxODg6e246IkNvbXBhdDEyIixmOmRhLHI6'@;
put 'MTJ9LDIxODk6e246IkRYRiJ9LDIxOTA6e246IlRhYmxlU3R5bGVzIixyOjEyfSwyMTkxOntuOiJUYWJsZVN0eWxlIn0sMjE5Mjp7bjoiVGFibGVTdHlsZUVsZW1lbnQifSwyMTk0OntuOiJTdHlsZUV4dCJ9LDIxOTU6e246Ik5hbWVQdWJsaXNoIn0sMjE5Njp7bjoiTmFtZUNtdCIsZjpmdW5j'@;
put 'dGlvbiBZNihTLFIsayl7aWYoIShrLmJpZmY8OCkpe3ZhciBHPVMucmVhZF9zaGlmdCgyKSxRPVMucmVhZF9zaGlmdCgyKTtyZXR1cm5bcmMoUyxHLGspLHJjKFMsUSxrKV19Uy5sKz1SfSxyOjEyfSwyMTk3OntuOiJTb3J0RGF0YSJ9LDIxOTg6e246IlRoZW1lIixmOmZ1bmN0aW9uIGlCKFMs'@;
put 'UixrKXt2YXIgRz1TLmwrUjtpZigxMjQyMjYhPT1TLnJlYWRfc2hpZnQoNCkpe2lmKCFrLmNlbGxTdHlsZXMpcmV0dXJuIHZvaWQoUy5sPUcpO3ZhciBnZSxhZT1TLnNsaWNlKFMubCk7Uy5sPUc7dHJ5e2dlPWNuKGFlLHt0eXBlOiJhcnJheSJ9KX1jYXRjaHtyZXR1cm59dmFyIHBlPW5yKGdl'@;
put 'LCJ0aGVtZS90aGVtZS90aGVtZTEueG1sIiwhMCk7aWYocGUpcmV0dXJuIEVDKHBlLGspfX0scjoxMn0sMjE5OTp7bjoiR1VJRFR5cGVMaWIifSwyMjAwOntuOiJGbkdycDEyIn0sMjIwMTp7bjoiTmFtZUZuR3JwMTIifSwyMjAyOntuOiJNVFJTZXR0aW5ncyIsZjpmdW5jdGlvbiBUNChTKXty'@;
put 'ZXR1cm5bMCE9PVMucmVhZF9zaGlmdCg0KSwwIT09Uy5yZWFkX3NoaWZ0KDQpLFMucmVhZF9zaGlmdCg0KV19LHI6MTJ9LDIyMDM6e246IkNvbXByZXNzUGljdHVyZXMiLGY6cjJ9LDIyMDQ6e246IkhlYWRlckZvb3RlciJ9LDIyMDU6e246IkNydExheW91dDEyIn0sMjIwNjp7bjoiQ3J0TWxG'@;
put 'cnQifSwyMjA3OntuOiJDcnRNbEZydENvbnRpbnVlIn0sMjIxMTp7bjoiRm9yY2VGdWxsQ2FsY3VsYXRpb24iLGY6ZnVuY3Rpb24gSXQoUyl7dmFyIFI9ZnVuY3Rpb24gYTIoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTgse3R5cGU6Uixm'@;
put 'bGFnczprfX0oUyk7aWYoMjIxMSE9Ui50eXBlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBGdXR1cmUgUmVjb3JkICIrUi50eXBlKTtyZXR1cm4gMCE9PVMucmVhZF9zaGlmdCg0KX19LDIyMTI6e246IlNoYXBlUHJvcHNTdHJlYW0ifSwyMjEzOntuOiJUZXh0UHJvcHNTdHJlYW0ifSwyMjE0'@;
put 'OntuOiJSaWNoVGV4dFN0cmVhbSJ9LDIyMTU6e246IkNydExheW91dDEyQSJ9LDQwOTc6e246IlVuaXRzIn0sNDA5ODp7bjoiQ2hhcnQifSw0MDk5OntuOiJTZXJpZXMifSw0MTAyOntuOiJEYXRhRm9ybWF0In0sNDEwMzp7bjoiTGluZUZvcm1hdCJ9LDQxMDU6e246Ik1hcmtlckZvcm1hdCJ9'@;
put 'LDQxMDY6e246IkFyZWFGb3JtYXQifSw0MTA3OntuOiJQaWVGb3JtYXQifSw0MTA4OntuOiJBdHRhY2hlZExhYmVsIn0sNDEwOTp7bjoiU2VyaWVzVGV4dCJ9LDQxMTY6e246IkNoYXJ0Rm9ybWF0In0sNDExNzp7bjoiTGVnZW5kIn0sNDExODp7bjoiU2VyaWVzTGlzdCJ9LDQxMTk6e246IkJh'@;
put 'ciJ9LDQxMjA6e246IkxpbmUifSw0MTIxOntuOiJQaWUifSw0MTIyOntuOiJBcmVhIn0sNDEyMzp7bjoiU2NhdHRlciJ9LDQxMjQ6e246IkNydExpbmUifSw0MTI1OntuOiJBeGlzIn0sNDEyNjp7bjoiVGljayJ9LDQxMjc6e246IlZhbHVlUmFuZ2UifSw0MTI4OntuOiJDYXRTZXJSYW5nZSJ9'@;
put 'LDQxMjk6e246IkF4aXNMaW5lIn0sNDEzMDp7bjoiQ3J0TGluayJ9LDQxMzI6e246IkRlZmF1bHRUZXh0In0sNDEzMzp7bjoiVGV4dCJ9LDQxMzQ6e246IkZvbnRYIixmOkVjfSw0MTM1OntuOiJPYmplY3RMaW5rIn0sNDE0Njp7bjoiRnJhbWUifSw0MTQ3OntuOiJCZWdpbiJ9LDQxNDg6e246'@;
put 'IkVuZCJ9LDQxNDk6e246IlBsb3RBcmVhIn0sNDE1NDp7bjoiQ2hhcnQzZCJ9LDQxNTY6e246IlBpY0YifSw0MTU3OntuOiJEcm9wQmFyIn0sNDE1ODp7bjoiUmFkYXIifSw0MTU5OntuOiJTdXJmIn0sNDE2MDp7bjoiUmFkYXJBcmVhIn0sNDE2MTp7bjoiQXhpc1BhcmVudCJ9LDQxNjM6e246'@;
put 'IkxlZ2VuZEV4Y2VwdGlvbiJ9LDQxNjQ6e246IlNodFByb3BzIixmOmZ1bmN0aW9uIG9DKFMsUixrKXt2YXIgRz17YXJlYTohMX07aWYoNSE9ay5iaWZmKXJldHVybiBTLmwrPVIsRzt2YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIFMubCs9MywxNiZRJiYoRy5hcmVhPSEwKSxHfX0sNDE2'@;
put 'NTp7bjoiU2VyVG9DcnQifSw0MTY2OntuOiJBeGVzVXNlZCJ9LDQxNjg6e246IlNCYXNlUmVmIn0sNDE3MDp7bjoiU2VyUGFyZW50In0sNDE3MTp7bjoiU2VyQXV4VHJlbmQifSw0MTc0OntuOiJJRm10UmVjb3JkIn0sNDE3NTp7bjoiUG9zIn0sNDE3Njp7bjoiQWxSdW5zIn0sNDE3Nzp7bjoi'@;
put 'QlJBSSJ9LDQxODc6e246IlNlckF1eEVyckJhciJ9LDQxODg6e246IkNscnRDbGllbnQiLGY6ZnVuY3Rpb24gYXMoUyl7Zm9yKHZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVtdO1ItLSA+MDspay5wdXNoKGRkKFMpKTtyZXR1cm4ga319LDQxODk6e246IlNlckZtdCJ9LDQxOTE6e246IkNoYXJ0'@;
put 'M0RCYXJTaGFwZSJ9LDQxOTI6e246IkZiaSJ9LDQxOTM6e246IkJvcFBvcCJ9LDQxOTQ6e246IkF4Y0V4dCJ9LDQxOTU6e246IkRhdCJ9LDQxOTY6e246IlBsb3RHcm93dGgifSw0MTk3OntuOiJTSUluZGV4In0sNDE5ODp7bjoiR2VsRnJhbWUifSw0MTk5OntuOiJCb3BQb3BDdXN0b20ifSw0'@;
put 'MjAwOntuOiJGYmkyIn0sMDp7bjoiRGltZW5zaW9ucyIsZjpYd30sMTp7bjoiQklGRjJCTEFOSyJ9LDI6e246IkJJRkYySU5UIixmOmZ1bmN0aW9uIGJWKFMpe3ZhciBSPV8wKFMpOysrUy5sO3ZhciBrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUi50PSJuIixSLnZhbD1rLFJ9fSwzOntuOiJC'@;
put 'SUZGMk5VTSIsZjpmdW5jdGlvbiB2VihTKXt2YXIgUj1fMChTKTsrK1MubDt2YXIgaz1QbChTKTtyZXR1cm4gUi50PSJuIixSLnZhbD1rLFJ9fSw0OntuOiJCSUZGMlNUUiIsZjpmdW5jdGlvbiB4ZihTLFIsayl7ay5iaWZmZ3Vlc3MmJjU9PWsuYmlmZiYmKGsuYmlmZj0yKTt2YXIgRz1fMChT'@;
put 'KTsrK1MubDt2YXIgUT1YMChTLDAsayk7cmV0dXJuIEcudD0ic3RyIixHLnZhbD1RLEd9fSw1OntuOiJCb29sRXJyIixmOkU0fSw3OntuOiJTdHJpbmciLGY6ZnVuY3Rpb24gYUMoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiAwPT09Uj8oUy5sKyssIiIpOlMucmVhZF9zaGlmdChS'@;
put 'LCJzYmNzLWNvbnQiKX19LDg6e246IkJJRkYyUk9XIn0sOTp7bjoiQk9GIixmOk5jfSwxMTp7bjoiSW5kZXgifSwyMjp7bjoiRXh0ZXJuQ291bnQiLGY6RWN9LDMwOntuOiJCSUZGMkZPUk1BVCIsZjp1Mn0sMzE6e246IkJJRkYyRk1UQ05UIn0sMzI6e246IkJJRkYyQ09MSU5GTyJ9LDMzOntu'@;
put 'OiJBcnJheSIsZjpUdn0sMzY6e246IkNPTFdJRFRIIn0sMzc6e246IkRlZmF1bHRSb3dIZWlnaHQiLGY6YzJ9LDUwOntuOiJCSUZGMkZPTlRYVFJBIixmOmZ1bmN0aW9uIHNDKFMsUil7Uy5sKz02LFMubCs9MixTLmwrPTEsUy5sKz0zLFMubCs9MSxTLmwrPVItMTN9fSw2Mjp7bjoiQklGRjJX'@;
put 'SU5ET1cyIn0sNTI6e246IkRERU9iak5hbWUifSw2Nzp7bjoiQklGRjJYRiJ9LDY4OntuOiJCSUZGMlhGSU5ERVgiLGY6RWN9LDY5OntuOiJCSUZGMkZPTlRDTFIifSw4Njp7bjoiQklGRjRGTVRDTlQifSwxMjY6e246IlJLIn0sMTI3OntuOiJJbURhdGEiLGY6ZnVuY3Rpb24gYWgoUyl7dmFy'@;
put 'IFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9e2ZtdDpSLGVudjprLGxlbjpHLGRhdGE6Uy5zbGljZShTLmwsUy5sK0cpfTtyZXR1cm4gUy5sKz1HLFF9fSwxMzU6e246IkFkZGluIn0sMTM2OntuOiJFZGcifSwxMzc6e246IlB1YiJ9LDE0'@;
put 'NTp7bjoiU3ViIn0sMTQ4OntuOiJMSFJlY29yZCJ9LDE0OTp7bjoiTEhOR3JhcGgifSwxNTA6e246IlNvdW5kIn0sMTY5OntuOiJDb29yZExpc3QifSwxNzE6e246IkdDVyJ9LDE4ODp7bjoiU2hyRm1sYSJ9LDE5MTp7bjoiVG9vbGJhckhkciJ9LDE5Mjp7bjoiVG9vbGJhckVuZCJ9LDE5NDp7'@;
put 'bjoiQWRkTWVudSJ9LDE5NTp7bjoiRGVsTWVudSJ9LDIxNDp7bjoiUlN0cmluZyIsZjpmdW5jdGlvbiBsQyhTLFIsayl7dmFyIEc9Uy5sK1IsUT1fMChTKSxhZT1TLnJlYWRfc2hpZnQoMiksZ2U9cmMoUyxhZSxrKTtyZXR1cm4gUy5sPUcsUS50PSJzdHIiLFEudmFsPWdlLFF9fSwyMjM6e246'@;
put 'IlVERGVzYyJ9LDIzNDp7bjoiVGFiSWRDb25mIn0sMzU0OntuOiJYTDVNb2RpZnkifSw0MjE6e246IkZpbGVTaGFyaW5nMiJ9LDUxODp7bjoiRm9ybXVsYSIsZjpRQ30sNTIxOntuOiJCT0YiLGY6TmN9LDUzNjp7bjoiTGJsIixmOnRDfSw1NDc6e246IkV4dGVybk5hbWUiLGY6ZUN9LDU2MTp7'@;
put 'bjoiRm9udCJ9LDU3OTp7bjoiQklGRjNYRiJ9LDEwMzA6e246IkZvcm11bGEiLGY6UUN9LDEwMzM6e246IkJPRiIsZjpOY30sMTA5MTp7bjoiQklGRjRYRiJ9LDIxNTc6e246IkZlYXRJbmZvIn0sMjE2Mzp7bjoiRmVhdEluZm8xMSJ9LDIxNzc6e246IlNYQWRkbDEyIn0sMjI0MDp7bjoiQXV0'@;
put 'b1dlYlB1YiJ9LDIyNDE6e246Ikxpc3RPYmoifSwyMjQyOntuOiJMaXN0RmllbGQifSwyMjQzOntuOiJMaXN0RFYifSwyMjQ0OntuOiJMaXN0Q29uZEZtdCJ9LDIyNDU6e246Ikxpc3RDRiJ9LDIyNDY6e246IkZNUXJ5In0sMjI0Nzp7bjoiRk1TUXJ5In0sMjI0ODp7bjoiUExWIn0sMjI0OTp7'@;
put 'bjoiTG5FeHQifSwyMjUwOntuOiJNa3JFeHQifSwyMjUxOntuOiJDcnRDb29wdCJ9LDIyNjI6e246IkZSVEFyY2hJZCQiLHI6MTJ9LDI5MjgyOnt9fSxxUz1JZShLUywibiIpO2Z1bmN0aW9uIEdpKFMsUixrLEcpe3ZhciBRPStSfHwrcVNbUl07aWYoIWlzTmFOKFEpKXt2YXIgYWU9R3x8KGt8'@;
put 'fFtdKS5sZW5ndGh8fDAsZ2U9Uy5uZXh0KDQpO2dlLndyaXRlX3NoaWZ0KDIsUSksZ2Uud3JpdGVfc2hpZnQoMixhZSksYWU+MCYmQXIoaykmJlMucHVzaChrKX19ZnVuY3Rpb24gRWIoUyxSLGspe3JldHVybiBTfHwoUz1ibig3KSksUy53cml0ZV9zaGlmdCgyLFIpLFMud3JpdGVfc2hpZnQo'@;
put 'MixrKSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgxLDApLFN9ZnVuY3Rpb24gWm5lKFMsUixrLEcpe2lmKG51bGwhPVIudilzd2l0Y2goUi50KXtjYXNlImQiOmNhc2UibiI6dmFyIFE9ImQiPT1SLnQ/UWUoSGUoUi52KSk6Ui52O3JldHVybiB2b2lkKFE9PSgwfFEpJiZRPj0w'@;
put 'JiZRPDY1NTM2P0dpKFMsMixmdW5jdGlvbiB5VihTLFIsayl7dmFyIEc9Ym4oOSk7cmV0dXJuIEViKEcsUyxSKSxHLndyaXRlX3NoaWZ0KDIsayksR30oayxHLFEpKTpHaShTLDMsZnVuY3Rpb24gbmsoUyxSLGspe3ZhciBHPWJuKDE1KTtyZXR1cm4gRWIoRyxTLFIpLEcud3JpdGVfc2hpZnQo'@;
put 'OCxrLCJmIiksR30oayxHLFEpKSk7Y2FzZSJiIjpjYXNlImUiOnJldHVybiB2b2lkIEdpKFMsNSxmdW5jdGlvbiB6bmUoUyxSLGssRyl7dmFyIFE9Ym4oOSk7cmV0dXJuIEViKFEsUyxSKSxLaShrLEd8fCJiIixRKSxRfShrLEcsUi52LFIudCkpO2Nhc2UicyI6Y2FzZSJzdHIiOnJldHVybiB2'@;
put 'b2lkIEdpKFMsNCxmdW5jdGlvbiBVbmUoUyxSLGspe3ZhciBHPWJuKDgrMiprLmxlbmd0aCk7cmV0dXJuIEViKEcsUyxSKSxHLndyaXRlX3NoaWZ0KDEsay5sZW5ndGgpLEcud3JpdGVfc2hpZnQoay5sZW5ndGgsaywic2JjcyIpLEcubDxHLmxlbmd0aD9HLnNsaWNlKDAsRy5sKTpHfShrLEcs'@;
put 'KFIudnx8IiIpLnNsaWNlKDAsMjU1KSkpfUdpKFMsMSxFYihudWxsLGssRykpfWZ1bmN0aW9uIEtuZShTLFIsayxHLFEpe3ZhciBhZT0xNitzMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMsUixRKTtpZihudWxsIT1SLnZ8fFIuYmYpaWYoUi5iZilHaShTLCJGb3JtdWxhIixmdW5jdGlvbiBW'@;
put 'NShTLFIsayxHLFEpe3ZhciBhZT1vMihSLGssUSksZ2U9ZnVuY3Rpb24gSkMoUyl7aWYobnVsbD09Uyl7dmFyIFI9Ym4oOCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoMSwzKSxSLndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlmdCgyLDApLFIud3JpdGVfc2hpZnQoMiwwKSxSLndyaXRlX3No'@;
put 'aWZ0KDIsNjU1MzUpLFJ9cmV0dXJuIFJ1KCJudW1iZXIiPT10eXBlb2YgUz9TOjApfShTLnYpLHBlPWJuKDYpO3BlLndyaXRlX3NoaWZ0KDIsMzMpLHBlLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBQZT1ibihTLmJmLmxlbmd0aCksTmU9MDtOZTxTLmJmLmxlbmd0aDsrK05lKVBlW05lXT1T'@;
put 'LmJmW05lXTtyZXR1cm4gaihbYWUsZ2UscGUsUGVdKX0oUixrLEcsMCxhZSkpO2Vsc2Ugc3dpdGNoKFIudCl7Y2FzZSJkIjpjYXNlIm4iOkdpKFMsIk51bWJlciIsZnVuY3Rpb24gUXcoUyxSLGssRyl7dmFyIFE9Ym4oMTQpO3JldHVybiBvMihTLFIsRyxRKSxSdShrLFEpLFF9KGssRywiZCI9'@;
put 'PVIudD9RZShIZShSLnYpKTpSLnYsYWUpKTticmVhaztjYXNlImIiOmNhc2UiZSI6R2koUyw1MTcsZnVuY3Rpb24gTzEoUyxSLGssRyxRLGFlKXt2YXIgZ2U9Ym4oOCk7cmV0dXJuIG8yKFMsUixHLGdlKSxLaShrLGFlLGdlKSxnZX0oayxHLFIudixhZSwwLFIudCkpO2JyZWFrO2Nhc2UicyI6'@;
put 'Y2FzZSJzdHIiOmlmKFEuYm9va1NTVCl7dmFyIHBlPW9TKFEuU3RyaW5ncyxSLnYsUi5SP1Iucj1KcyhSLlIpOm51bGwsUS5yZXZTdHJpbmdzKTtpZihSLlIpZm9yKHZhciB5ZT0wO3llPFIuUi5sZW5ndGg7Kyt5ZSlSLlJbeWVdLnMmJnMwKFEuY2VsbFhmcyxRLmNlbGxTdHlsZVhmcyx7dDoi'@;
put 'biIsdjowLHM6Ui5SW3llXS5zfSxRKTtHaShTLCJMYWJlbFNzdCIsZnVuY3Rpb24gWUEoUyxSLGssRyl7dmFyIFE9Ym4oMTApO3JldHVybiBvMihTLFIsRyxRKSxRLndyaXRlX3NoaWZ0KDQsayksUX0oayxHLHBlLGFlKSl9ZWxzZSBHaShTLCJMYWJlbCIsZnVuY3Rpb24gclYoUyxSLGssRyxR'@;
put 'KXt2YXIgYWU9IVF8fDg9PVEuYmlmZixnZT1ibigrYWUrOCsoMSthZSkqay5sZW5ndGgpO3JldHVybiBvMihTLFIsRyxnZSksZ2Uud3JpdGVfc2hpZnQoMixrLmxlbmd0aCksYWUmJmdlLndyaXRlX3NoaWZ0KDEsMSksZ2Uud3JpdGVfc2hpZnQoKDErYWUpKmsubGVuZ3RoLGssYWU/InV0ZjE2'@;
put 'bGUiOiJzYmNzIiksZ2V9KGssRywoUi52fHwiIikuc2xpY2UoMCwyNTUpLGFlLFEpKTticmVhaztkZWZhdWx0OkdpKFMsIkJsYW5rIixvMihrLEcsYWUpKX1lbHNlIEdpKFMsIkJsYW5rIixvMihrLEcsYWUpKX1mdW5jdGlvbiBNSShTLFIsayl7dmFyIE5lLEc9dmkoKSxRPWsuU2hlZXROYW1l'@;
put 'c1tTXSxhZT1rLlNoZWV0c1tRXXx8e30sZ2U9KGt8fHt9KS5Xb3JrYm9va3x8e30scGU9KGdlLlNoZWV0c3x8W10pW1NdfHx7fSx5ZT1BcnJheS5pc0FycmF5KGFlKSxQZT04PT1SLmJpZmYsWWU9IiIsZXQ9W10sY3Q9YWEoYWVbIiFyZWYiXXx8IkExIiksRXQ9UGU/NjU1MzY6MTYzODQ7aWYo'@;
put 'Y3QuZS5jPjI1NXx8Y3QuZS5yPj1FdCl7aWYoUi5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhhZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtjdC5lLmM9TWF0aC5taW4oY3QuZS5jLDI1NSksY3QuZS5yPU1hdGgubWluKGN0LmUuYyxF'@;
put 'dC0xKX1HaShHLDIwNTcseDQoMCwxNixSKSksR2koRywiQ2FsY01vZGUiLHIwKDEpKSxHaShHLCJDYWxjQ291bnQiLHIwKDEwMCkpLEdpKEcsIkNhbGNSZWZNb2RlIixldSghMCkpLEdpKEcsIkNhbGNJdGVyIixldSghMSkpLEdpKEcsIkNhbGNEZWx0YSIsUnUoLjAwMSkpLEdpKEcsIkNhbGNT'@;
put 'YXZlUmVjYWxjIixldSghMCkpLEdpKEcsIlByaW50Um93Q29sIixldSghMSkpLEdpKEcsIlByaW50R3JpZCIsZXUoITEpKSxHaShHLCJHcmlkU2V0IixyMCgxKSksR2koRywiR3V0cyIsZnVuY3Rpb24gVzYoUyl7dmFyIFI9Ym4oOCk7cmV0dXJuIFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRl'@;
put 'X3NoaWZ0KDIsU1swXT9TWzBdKzE6MCksUi53cml0ZV9zaGlmdCgyLFNbMV0/U1sxXSsxOjApLFJ9KFswLDBdKSksR2koRywiSENlbnRlciIsZXUoITEpKSxHaShHLCJWQ2VudGVyIixldSghMSkpO3ZhciBvdD1hZVsiIXByaW50Il0mJmFlWyIhcHJpbnQiXS5tYXJnaW5zfHxhZVsiIW1hcmdp'@;
put 'bnMiXTtvdCYmKG51bGwhPW90LmxlZnQmJkdpKEcsIkxlZnRNYXJnaW4iLFJ1KG90LmxlZnQpKSxudWxsIT1vdC5yaWdodCYmR2koRywiUmlnaHRNYXJnaW4iLFJ1KG90LnJpZ2h0KSksbnVsbCE9b3QudG9wJiZHaShHLCJUb3BNYXJnaW4iLFJ1KG90LnRvcCkpLG51bGwhPW90LmJvdHRvbSYm'@;
put 'R2koRywiQm90dG9tTWFyZ2luIixSdShvdC5ib3R0b20pKSwobnVsbCE9b3QuaGVhZGVyfHxudWxsIT1vdC5mb290ZXIpJiZHaShHLCJTZXR1cCIsZnVuY3Rpb24gaUMoUyxSKXt2YXIgaz1ibigzNCksRz0hMSxRPTcwO3JldHVybiJsYW5kc2NhcGUiPT0oUi5wcm9wc3x8e30pLm9yaWVudGF0'@;
put 'aW9uJiYoRz0hMCxRJj0tNjcpLEcmJihRJj0tNSksay53cml0ZV9zaGlmdCgyLDEpLGsud3JpdGVfc2hpZnQoMiwxMDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMSxRKSxrLndyaXRlX3NoaWZ0KDEsMCks'@;
put 'ay53cml0ZV9zaGlmdCgyLDYwMCksay53cml0ZV9zaGlmdCgyLDYwMCksUnUobnVsbD09Uy5oZWFkZXI/LjU6Uy5oZWFkZXIsayksUnUobnVsbD09Uy5mb290ZXI/LjU6Uy5mb290ZXIsayksay53cml0ZV9zaGlmdCgyLDEpLGt9KG90LGFlWyIhcHJpbnQiXXx8e30pKSksUGUmJmZ1bmN0aW9u'@;
put 'IE56KFMsUixrKXtpZihSKXt2YXIgRz0wO1IuZm9yRWFjaChmdW5jdGlvbihRLGFlKXsrK0c8PTI1NiYmUSYmKFEuYXV0byYmYVMoayxRLGFlKSxHaShTLCJDb2xJbmZvIixmdW5jdGlvbiBHNihTLFIpe3ZhciBrPWJuKDEyKTtrLndyaXRlX3NoaWZ0KDIsUiksay53cml0ZV9zaGlmdCgyLFIp'@;
put 'LGsud3JpdGVfc2hpZnQoMiwyNTYqUy53aWR0aCksay53cml0ZV9zaGlmdCgyLDApO3ZhciBHPTA7cmV0dXJuIFMuaGlkZGVuJiYoR3w9MSksay53cml0ZV9zaGlmdCgxLEcpLGsud3JpdGVfc2hpZnQoMSxHPVMubGV2ZWx8fDApLGsud3JpdGVfc2hpZnQoMiwwKSxrfShjOChhZSxRKSxhZSkp'@;
put 'KX0pfX0oRyxhZVsiIWNvbHMiXSxhZSksR2koRywiRGltZW5zaW9ucyIsZnVuY3Rpb24gJEEoUyxSKXt2YXIgaz04IT1SLmJpZmYmJlIuYmlmZj8yOjQsRz1ibigyKmsrNik7cmV0dXJuIEcud3JpdGVfc2hpZnQoayxTLnMuciksRy53cml0ZV9zaGlmdChrLFMuZS5yKzEpLEcud3JpdGVfc2hp'@;
put 'ZnQoMixTLnMuYyksRy53cml0ZV9zaGlmdCgyLFMuZS5jKzEpLEcud3JpdGVfc2hpZnQoMiwwKSxHfShjdCxSKSksUGUmJihhZVsiIWxpbmtzIl09W10pLGFlWyIhcm93cyJdJiZQZSYmYWVbIiFyb3dzIl0uZm9yRWFjaChmdW5jdGlvbihLdCxUbil7Zm9yKHZhciBycj1qaShUbiksU249MjU2'@;
put 'LGxyPTAsWG49S3Qucz8xNitzMChSLmNlbGxYZnMsUi5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOkt0LnN9LFIpOjAsVm49Y3Qucy5jO1ZuPD1jdC5lLmM7KytWbikoeWU/KGFlW1RuXXx8W10pW1ZuXTphZVtldFtWbl0rcnJdKSYmKFZuPFNuJiYoU249Vm4pLFZuPmxyJiYobHI9Vm4pKTts'@;
put 'cjxTbiYmKFNuPWxyPTApLEdpKEcsIlJvdyIsZnVuY3Rpb24gZ3QoUyxSLGspe3ZhciBHPWJuKDE2KTtHLndyaXRlX3NoaWZ0KDIsUiksRy53cml0ZV9zaGlmdCgyLGtbMF0pLEcud3JpdGVfc2hpZnQoMixrWzFdKzEpLEcud3JpdGVfc2hpZnQoMiwyMCpTLmhwdHx8MjAqVTMoUy5ocHgpfHwz'@;
put 'MzApLEcud3JpdGVfc2hpZnQoNCwwKTt2YXIgUT0wO3JldHVybiBRfD0wfFMubGV2ZWwsUy5oaWRkZW4mJihRfD0zMiksUXw9NjQsa1syXSYmKFF8PTEyOCksRy53cml0ZV9zaGlmdCgxLFEpLEcud3JpdGVfc2hpZnQoMSwxKSxHLndyaXRlX3NoaWZ0KDIsa1syXXx8MCksR30oS3QsVG4sW1Nu'@;
put 'LGxyLFhuXSkpfSk7Zm9yKHZhciBidD1jdC5zLnI7YnQ8PWN0LmUucjsrK2J0KXtZZT1qaShidCk7Zm9yKHZhciBqdD1jdC5zLmM7anQ8PWN0LmUuYzsrK2p0KXtidD09PWN0LnMuciYmKGV0W2p0XT1BbyhqdCkpLE5lPWV0W2p0XStZZTt2YXIga3Q9eWU/KGFlW2J0XXx8W10pW2p0XTphZVtO'@;
put 'ZV07a3QmJihLbmUoRyxrdCxidCxqdCxSKSxQZSYma3QubCYmYWVbIiFsaW5rcyJdLnB1c2goW05lLGt0LmxdKSl9fXZhciBPdD1wZS5Db2RlTmFtZXx8cGUubmFtZXx8UTtyZXR1cm4oUGV8fDU9PVIuYmlmZiYmYWVbIiFmcmVlemUiXSkmJkdpKEcsIldpbmRvdzIiLGZ1bmN0aW9uIGVWKFMs'@;
put 'UixrLEcpe3ZhciBRPUcmJkcuYmlmZnx8OCxhZT1ibig4PT1RPzE4OjEwKSxnZT0xNzE4O3JldHVybiBrPjAmJihnZSY9LTUxMyksV3QoUlsiIWdyaWRsaW5lcyJdKSYmKGdlJj0tMyksUlsiIWZyZWV6ZSJdJiYoZ2V8PTgpLFMmJlMuUlRMJiYoZ2V8PTY0KSw1PT1RJiYoZ2U9NDQ2KSxhZS53'@;
put 'cml0ZV9zaGlmdCgyLGdlKSw4PT1RPyhhZS53cml0ZV9zaGlmdCg0LDApLGFlLndyaXRlX3NoaWZ0KDQsNjQpLGFlLndyaXRlX3NoaWZ0KDQsMCksYWUud3JpdGVfc2hpZnQoNCwwKSk6KGFlLndyaXRlX3NoaWZ0KDQsMCksYWUud3JpdGVfc2hpZnQoNCwwKSksYWV9KChnZS5WaWV3c3x8W10p'@;
put 'WzBdLGFlLFMpKSwoUGV8fDU9PVIuYmlmZikmJmFlWyIhZnJlZXplIl0mJkdpKEcsIlBhbmUiLGZ1bmN0aW9uIHdsKFMpeyJzdHJpbmciPT10eXBlb2YgUyYmKFM9TmEoUykpO3ZhciBSPWJuKDEwKTtyZXR1cm4gUi53cml0ZV9zaGlmdCgyLFMuYyksUi53cml0ZV9zaGlmdCgyLFMuciksUi53'@;
put 'cml0ZV9zaGlmdCgyLFMuciksUi53cml0ZV9zaGlmdCgyLFMuYyksUi53cml0ZV9zaGlmdCgxLDMpLFIud3JpdGVfc2hpZnQoMSwwKSxSfShhZVsiIWZyZWV6ZSJdKSksUGUmJmFlWyIhc2VsIl0mJkdpKEcsIlNlbGVjdGlvbiIsZnVuY3Rpb24gdGsoUyxSKXt2YXIgaz1ibigxNSksRz1TLmNl'@;
put 'bGw7aWYoIUcpe2lmKCFTLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2VsZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtHPXFpKFNzKFMucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkucyl9dmFyIFE9InN0cmluZyI9PXR5cGVvZiBHP05hKEcpOkc7aWYoUil7dmFyIGFl'@;
put 'PSJzdHJpbmciPT10eXBlb2YgUj9OYShSKTpSO2sud3JpdGVfc2hpZnQoMSxRLnI+PWFlLnImJlEuYz49YWUuYz8wOlEucj49YWUuciYmUS5jPGFlLmM/MjpRLnI8YWUuciYmUS5jPj1hZS5jPzE6Myl9ZWxzZSBrLndyaXRlX3NoaWZ0KDEsMyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoMixRLnIp'@;
put 'LGsud3JpdGVfc2hpZnQoMixRLmMpLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMSksZnVuY3Rpb24gVjMoUyxSKXtSfHwoUj1ibig2KSksUi53cml0ZV9zaGlmdCgyLFMucz9TLnMucjpTLnIpLFIud3JpdGVfc2hpZnQoMixTLmU/Uy5lLnI6Uy5yKSxSLndyaXRlX3NoaWZ0'@;
put 'KDEsUy5zP1Mucy5jOlMuYyksUi53cml0ZV9zaGlmdCgxLFMuZT9TLmUuYzpTLmMpfSh7czpRLGU6UX0sayksa30oYWVbIiFzZWwiXSxhZVsiIWZyZWV6ZSJdKSksUGUmJihhZVsiIW1lcmdlcyJdfHxbXSkubGVuZ3RoJiZHaShHLCJNZXJnZUNlbGxzIixmdW5jdGlvbiBjVihTKXt2YXIgUj1i'@;
put 'bigyKzgqUy5sZW5ndGgpO1Iud3JpdGVfc2hpZnQoMixTLmxlbmd0aCk7Zm9yKHZhciBrPTA7azxTLmxlbmd0aDsrK2spbXUoU1trXSxSKTtyZXR1cm4gUn0oYWVbIiFtZXJnZXMiXSkpLFBlJiZmdW5jdGlvbiBMOChTLFIpe2Zvcih2YXIgaz0wO2s8UlsiIWxpbmtzIl0ubGVuZ3RoOysrayl7'@;
put 'dmFyIEc9UlsiIWxpbmtzIl1ba107R2koUywiSExpbmsiLGhWKEcpKSxHWzFdLlRvb2x0aXAmJkdpKFMsIkhMaW5rVG9vbHRpcCIscFYoRykpfWRlbGV0ZSBSWyIhbGlua3MiXX0oRyxhZSksR2koRywiQ29kZU5hbWUiLGNsKE90KSksUGUmJmZ1bmN0aW9uIEh6KFMsUil7dmFyIGs9Ym4oMTkp'@;
put 'O2sud3JpdGVfc2hpZnQoNCwyMTUxKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwzKSxrLndyaXRlX3NoaWZ0KDEsMSksay53cml0ZV9zaGlmdCg0LDApLEdpKFMsIkZlYXRIZHIiLGspLChrPWJuKDM5KSkud3JpdGVfc2hpZnQoNCwyMTUy'@;
put 'KSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwzKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoMiwxKSxrLndyaXRlX3NoaWZ0KDQsNCksay53cml0ZV9zaGlmdCgyLDApLG11KGFhKFJbIiFy'@;
put 'ZWYiXXx8IkExIiksayksay53cml0ZV9zaGlmdCg0LDQpLEdpKFMsIkZlYXQiLGspfShHLGFlKSxHaShHLCJFT0YiKSxHLmVuZCgpfWZ1bmN0aW9uIFZ6KFMsUixrKXt2YXIgRz12aSgpLFE9KFN8fHt9KS5Xb3JrYm9va3x8e30sYWU9US5TaGVldHN8fFtdLGdlPVEuV0JQcm9wc3x8e30scGU9'@;
put 'OD09ay5iaWZmLHllPTU9PWsuYmlmZjtHaShHLDIwNTcseDQoMCw1LGspKSwieGxhIj09ay5ib29rVHlwZSYmR2koRywiQWRkaW4iKSxHaShHLCJJbnRlcmZhY2VIZHIiLHBlP3IwKDEyMDApOm51bGwpLEdpKEcsIk1tcyIsZnVuY3Rpb24gR3coUyxSKXtSfHwoUj1ibihTKSk7Zm9yKHZhciBr'@;
put 'PTA7azxTOysraylSLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIFJ9KDIpKSx5ZSYmR2koRywiVG9vbGJhckhkciIpLHllJiZHaShHLCJUb29sYmFyRW5kIiksR2koRywiSW50ZXJmYWNlRW5kIiksR2koRywiV3JpdGVBY2Nlc3MiLGZ1bmN0aW9uIHo2KFMsUil7dmFyIGs9IVJ8fDg9PVIuYmlm'@;
put 'ZixHPWJuKGs/MTEyOjU0KTtmb3IoRy53cml0ZV9zaGlmdCg4PT1SLmJpZmY/MjoxLDcpLGsmJkcud3JpdGVfc2hpZnQoMSwwKSxHLndyaXRlX3NoaWZ0KDQsODU5MDA3MDU5KSxHLndyaXRlX3NoaWZ0KDQsNTQ1ODU0OHwoaz8wOjUzNjg3MDkxMikpO0cubDxHLmxlbmd0aDspRy53cml0ZV9z'@;
put 'aGlmdCgxLGs/MDozMik7cmV0dXJuIEd9KDAsaykpLEdpKEcsIkNvZGVQYWdlIixyMChwZT8xMjAwOjEyNTIpKSxwZSYmR2koRywiRFNGIixyMCgwKSkscGUmJkdpKEcsIkV4Y2VsOUZpbGUiKSxHaShHLCJSUlRhYklkIixmdW5jdGlvbiBtVihTKXtmb3IodmFyIFI9Ym4oMipTKSxrPTA7azxT'@;
put 'OysraylSLndyaXRlX3NoaWZ0KDIsaysxKTtyZXR1cm4gUn0oUy5TaGVldE5hbWVzLmxlbmd0aCkpLHBlJiZTLnZiYXJhdyYmR2koRywiT2JQcm9qIikscGUmJlMudmJhcmF3JiZHaShHLCJDb2RlTmFtZSIsY2woZ2UuQ29kZU5hbWV8fCJUaGlzV29ya2Jvb2siKSksR2koRywiQnVpbHRJbkZu'@;
put 'R3JvdXBDb3VudCIscjAoMTcpKSxHaShHLCJXaW5Qcm90ZWN0IixldSghMSkpLEdpKEcsIlByb3RlY3QiLGV1KCExKSksR2koRywiUGFzc3dvcmQiLHIwKDApKSxwZSYmR2koRywiUHJvdDRSZXYiLGV1KCExKSkscGUmJkdpKEcsIlByb3Q0UmV2UGFzcyIscjAoMCkpLEdpKEcsIldpbmRvdzEi'@;
put 'LGZ1bmN0aW9uIEd0ZSgpe3ZhciBTPWJuKDE4KTtyZXR1cm4gUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMjkyODApLFMud3JpdGVfc2hpZnQoMiwxNzYwMCksUy53cml0ZV9zaGlmdCgyLDU2KSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0'@;
put 'ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwxKSxTLndyaXRlX3NoaWZ0KDIsNTAwKSxTfSgpKSxHaShHLCJCYWNrdXAiLGV1KCExKSksR2koRywiSGlkZU9iaiIscjAoMCkpLEdpKEcsIkRhdGUxOTA0IixldSgidHJ1ZSI9PWZ1bmN0aW9uIEZTKFMpe3JldHVybiBTLldvcmtib29rJiZT'@;
put 'Lldvcmtib29rLldCUHJvcHMmJnRpKFMuV29ya2Jvb2suV0JQcm9wcy5kYXRlMTkwNCk/InRydWUiOiJmYWxzZSJ9KFMpKSksR2koRywiQ2FsY1ByZWNpc2lvbiIsZXUoITApKSxwZSYmR2koRywiUmVmcmVzaEFsbCIsZXUoITEpKSxHaShHLCJCb29rQm9vbCIscjAoMCkpLG4wPUQ2KFswLDE2'@;
put 'Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNV0pLGZ1bmN0aW9uIEduZShTLFIsayl7KCgoUnx8e30pLlN0eWxlc3x8e30pLkZvbnRzfHxbe3N6OjEyLGNv'@;
put 'bG9yOnt0aGVtZToxfSxuYW1lOiJBcmlhbCIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSkuZm9yRWFjaChmdW5jdGlvbihHKXtHaShTLCJGb250IixmdW5jdGlvbiB0VihTLFIpe3ZhciBrPVMubmFtZXx8IkFyaWFsIixHPVImJjU9PVIuYmlmZixhZT1ibihHPzE1K2subGVuZ3RoOjE2KzIq'@;
put 'ay5sZW5ndGgpO2FlLndyaXRlX3NoaWZ0KDIsMjAqKFMuc3p8fDEyKSk7dmFyIGdlPTA7cmV0dXJuIFMuYm9sZCYmKGdlfD0xKSxTLml0YWxpYyYmKGdlfD0yKSxTLnN0cmlrZSYmKGdlfD04KSxTLnNoYWRvdyYmKGdlfD0zMiksYWUud3JpdGVfc2hpZnQoMSxnZSksYWUud3JpdGVfc2hpZnQo'@;
put 'MSwwKSxhZS53cml0ZV9zaGlmdCgyLFMuY29sb3I/UDQoUy5jb2xvciw2NCk6NjQpLGFlLndyaXRlX3NoaWZ0KDIsUy5ib2xkPzcwMDo0MDApLGFlLndyaXRlX3NoaWZ0KDIsInN1cGVyIj09Uy52YWxpZ24/MToic3ViIj09Uy52YWxpZ24/MjowKSxhZS53cml0ZV9zaGlmdCgxLFMudW5kZXJs'@;
put 'aW5lfHwwKSxhZS53cml0ZV9zaGlmdCgxLGFlLmZhbWlseXx8MCksYWUud3JpdGVfc2hpZnQoMSxhZS5jaGFyc2V0fHwwKSxhZS53cml0ZV9zaGlmdCgxLDApLGFlLndyaXRlX3NoaWZ0KDEsay5sZW5ndGgpLEd8fGFlLndyaXRlX3NoaWZ0KDEsMSksYWUud3JpdGVfc2hpZnQoKEc/MToyKSpr'@;
put 'Lmxlbmd0aCxrLEc/InNiY3MiOiJ1dGYxNmxlIiksYWV9KEcsaykpfSl9KEcsUyxrKSxmdW5jdGlvbiAkbmUoUyxSLGspe1ImJltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oRyl7Zm9yKHZhciBRPUdbMF07UTw9R1sxXTsrK1EpbnVsbCE9UltRXSYm'@;
put 'R2koUywiRm9ybWF0IixpVihRLFJbUV0saykpfSl9KEcsUy5TU0YsayksZnVuY3Rpb24gWTUoUyxSKXtmb3IodmFyIGs9MDtrPDE2OysraylHaShTLCJYRiIsYjUoe251bUZtdElkOjAsc3R5bGU6ITB9LDAsUikpO1IuY2VsbFhmcy5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dpKFMsIlhGIixiNShH'@;
put 'LDAsUikpfSl9KEcsayksR2koRywiUGFsZXR0ZSIsZnVuY3Rpb24gQ3QoUyl7dmFyIFI9Ym4oMjI2KTtSLndyaXRlX3NoaWZ0KDIsNTYpO2Zvcih2YXIgaz0wO2s8NTY7KytrKXt2YXIgRz1TW2srOF18fHY0W2srOF07Ui53cml0ZV9zaGlmdCgxLEdbMF0pLFIud3JpdGVfc2hpZnQoMSxHWzFd'@;
put 'KSxSLndyaXRlX3NoaWZ0KDEsR1syXSksUi53cml0ZV9zaGlmdCgxLDApfXJldHVybiBSfShuMCkpLG4wPXF0KHY0KSxwZSYmR2koRywiVXNlc0VMRnMiLGV1KCExKSk7dmFyIE5lPUcuZW5kKCksWWU9dmkoKTtwZSYmR2koWWUsIkNvdW50cnkiLGZ1bmN0aW9uIGRpKFMpe3JldHVybiBTfHwo'@;
put 'Uz1ibig0KSksUy53cml0ZV9zaGlmdCgyLDEpLFMud3JpdGVfc2hpZnQoMiwxKSxTfSgpKSxwZSYmay5TdHJpbmdzJiZmdW5jdGlvbiBqbmUoUyxSLGssRyl7dmFyIFE9R3x8KGt8fFtdKS5sZW5ndGh8fDA7aWYoUTw9ODIyNClyZXR1cm4gR2koUyxSLGssUSk7dmFyIGFlPStSfHwrcVNbUl07'@;
put 'aWYoIWlzTmFOKGFlKSl7Zm9yKHZhciBnZT1rLnBhcnRzfHxbXSxwZT0wLHllPTAsUGU9MDtQZSsoZ2VbcGVdfHw4MjI0KTw9ODIyNDspUGUrPWdlW3BlXXx8ODIyNCxwZSsrO3ZhciBOZT1TLm5leHQoNCk7Zm9yKE5lLndyaXRlX3NoaWZ0KDIsYWUpLE5lLndyaXRlX3NoaWZ0KDIsUGUpLFMu'@;
put 'cHVzaChrLnNsaWNlKHllLHllK1BlKSkseWUrPVBlO3llPFE7KXtmb3IoKE5lPVMubmV4dCg0KSkud3JpdGVfc2hpZnQoMiw2MCksUGU9MDtQZSsoZ2VbcGVdfHw4MjI0KTw9ODIyNDspUGUrPWdlW3BlXXx8ODIyNCxwZSsrO05lLndyaXRlX3NoaWZ0KDIsUGUpLFMucHVzaChrLnNsaWNlKHll'@;
put 'LHllK1BlKSkseWUrPVBlfX19KFllLCJTU1QiLGZ1bmN0aW9uIG1zKFMsUil7dmFyIGs9Ym4oOCk7ay53cml0ZV9zaGlmdCg0LFMuQ291bnQpLGsud3JpdGVfc2hpZnQoNCxTLlVuaXF1ZSk7Zm9yKHZhciBHPVtdLFE9MDtRPFMubGVuZ3RoOysrUSlHW1FdPUhjKFNbUV0sUik7dmFyIGFlPWoo'@;
put 'W2tdLmNvbmNhdChHKSk7cmV0dXJuIGFlLnBhcnRzPVtrLmxlbmd0aF0uY29uY2F0KEcubWFwKGZ1bmN0aW9uKGdlKXtyZXR1cm4gZ2UubGVuZ3RofSkpLGFlfShrLlN0cmluZ3MsaykpLEdpKFllLCJFT0YiKTt2YXIgZXQ9WWUuZW5kKCksY3Q9dmkoKSxFdD0wLG90PTA7Zm9yKG90PTA7b3Q8'@;
put 'Uy5TaGVldE5hbWVzLmxlbmd0aDsrK290KUV0Kz0ocGU/MTI6MTEpKyhwZT8yOjEpKlMuU2hlZXROYW1lc1tvdF0ubGVuZ3RoO3ZhciBidD1OZS5sZW5ndGgrRXQrZXQubGVuZ3RoO2ZvcihvdD0wO290PFMuU2hlZXROYW1lcy5sZW5ndGg7KytvdClHaShjdCwiQm91bmRTaGVldDgiLGwyKHtw'@;
put 'b3M6YnQsaHM6KGFlW290XXx8e30pLkhpZGRlbnx8MCxkdDowLG5hbWU6Uy5TaGVldE5hbWVzW290XX0saykpLGJ0Kz1SW290XS5sZW5ndGg7dmFyIGt0PWN0LmVuZCgpO2lmKEV0IT1rdC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJCUzggIitFdCsiICE9ICIra3QubGVuZ3RoKTt2YXIgT3Q9'@;
put 'W107cmV0dXJuIE5lLmxlbmd0aCYmT3QucHVzaChOZSksa3QubGVuZ3RoJiZPdC5wdXNoKGt0KSxldC5sZW5ndGgmJk90LnB1c2goZXQpLGIwKFtPdF0pfWZ1bmN0aW9uIHhJKFMsUil7dmFyIGs9Unx8e307c3dpdGNoKGsuYmlmZnx8Mil7Y2FzZSA4OmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24g'@;
put 'cW5lKFMsUil7dmFyIGs9Unx8e30sRz1bXTtBZihSJiZSLlBQSXx8OTYpLFMmJiFTLlNTRiYmKFMuU1NGPUEuZ2V0X3RhYmxlKCkpLFMmJlMuU1NGJiYob2UoQSksQS5sb2FkX3RhYmxlKFMuU1NGKSxrLnJldnNzZj1rZShTLlNTRiksay5yZXZzc2ZbUy5TU0ZbNjU1MzVdXT0wLGsuc3NmPVMu'@;
put 'U1NGKSxTLlN0eWxlcz17Rm9udHM6ay5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczprLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUi'@;
put 'fV0sQm9yZGVyczprLkJvcmRlcnM9W3t9XSxEWEY6ay5EWEY9Uy5TdHlsZXMmJlMuU3R5bGVzLkRYRnx8W119LEk0KGsuRm9udHNbMF0pLGsuU3RyaW5ncz1bXSxrLlN0cmluZ3MuQ291bnQ9MCxrLlN0cmluZ3MuVW5pcXVlPTAscTM/ay5yZXZTdHJpbmdzPW5ldyBNYXA6KGsucmV2U3RyaW5n'@;
put 'cz17fSxrLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBrLnJldlN0cmluZ3MuZm9vKSxSZihrKSxrLmNlbGxYZnM9W10say5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sczAoay5jZWxsWGZzLGsuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSxTLlByb3BzfHwo'@;
put 'Uy5Qcm9wcz17fSk7Zm9yKHZhciBRPTA7UTxTLlNoZWV0TmFtZXMubGVuZ3RoOysrUSlHW0cubGVuZ3RoXT1NSShRLGssUyk7cmV0dXJuIEcudW5zaGlmdChWeihTLEcsaykpLGIwKFtHXSl9KFMsUik7Y2FzZSA0OmNhc2UgMzpjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uIFluZShTLFIpe3ZhciBr'@;
put 'PVJ8fHt9O251bGwhPWxlJiZudWxsPT1rLmRlbnNlJiYoay5kZW5zZT1sZSk7Zm9yKHZhciBHPXZpKCksUT0wLGFlPTA7YWU8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK2FlKVMuU2hlZXROYW1lc1thZV09PWsuc2hlZXQmJihRPWFlKTtpZigwPT1RJiZrLnNoZWV0JiZTLlNoZWV0TmFtZXNbMF0h'@;
put 'PWsuc2hlZXQpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6ICIray5zaGVldCk7cmV0dXJuIEdpKEcsND09ay5iaWZmPzEwMzM6Mz09ay5iaWZmPzUyMTo5LHg0KDAsMTYsaykpLGZ1bmN0aW9uIFduZShTLFIsayxHKXt2YXIgZ2UsUT1BcnJheS5pc0FycmF5KFIpLGFlPWFhKFJb'@;
put 'IiFyZWYiXXx8IkExIikscGU9IiIseWU9W107aWYoYWUuZS5jPjI1NXx8YWUuZS5yPjE2MzgzKXtpZihHLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKFJbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7YWUuZS5jPU1hdGgubWluKGFlLmUu'@;
put 'YywyNTUpLGFlLmUucj1NYXRoLm1pbihhZS5lLmMsMTYzODMpLGdlPWlvKGFlKX1mb3IodmFyIFBlPWFlLnMucjtQZTw9YWUuZS5yOysrUGUpe3BlPWppKFBlKTtmb3IodmFyIE5lPWFlLnMuYztOZTw9YWUuZS5jOysrTmUpe1BlPT09YWUucy5yJiYoeWVbTmVdPUFvKE5lKSksZ2U9eWVbTmVd'@;
put 'K3BlO3ZhciBZZT1RPyhSW1BlXXx8W10pW05lXTpSW2dlXTtZZSYmWm5lKFMsWWUsUGUsTmUpfX19KEcsUy5TaGVldHNbUy5TaGVldE5hbWVzW1FdXSwwLGspLEdpKEcsMTApLEcuZW5kKCl9KFMsUil9dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR5cGUgIitrLmJvb2tUeXBlKyIgZm9yIEJJ'@;
put 'RkYiKX12YXIgdmQ9ZnVuY3Rpb24oKXt2YXIgUz17Y2VudGVyQ29udGludW91czoiY2VudGVyIixqdXN0aWZ5OiJsZWZ0In07ZnVuY3Rpb24gayhZZSxldCl7dmFyIGN0PWV0fHx7fTtudWxsIT1sZSYmbnVsbD09Y3QuZGVuc2UmJihjdC5kZW5zZT1sZSk7dmFyIEV0PWN0LmRlbnNlP1tdOnt9'@;
put 'LG90PShZZT1ZZS5yZXBsYWNlKC88IS0tLio/LS0+L2csIiIpKS5tYXRjaCgvPHRhYmxlL2kpO2lmKCFvdCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgSFRNTDogY291bGQgbm90IGZpbmQgPHRhYmxlPiIpO3ZhciBidD1ZZS5tYXRjaCgvPFwvdGFibGUvaSksanQ9b3QuaW5kZXgsa3Q9YnQm'@;
put 'JmJ0LmluZGV4fHxZZS5sZW5ndGgsT3Q9ZnVuY3Rpb24gZnQoUyxSLGspe2lmKGhufHwic3RyaW5nIj09dHlwZW9mIFIpcmV0dXJuIFMuc3BsaXQoUik7Zm9yKHZhciBHPVMuc3BsaXQoUiksUT1bR1swXV0sYWU9MTthZTxHLmxlbmd0aDsrK2FlKVEucHVzaChrKSxRLnB1c2goR1thZV0pO3Jl'@;
put 'dHVybiBRfShZZS5zbGljZShqdCxrdCksLyg6Pzx0cltePl0qPikvaSwiPHRyPiIpLEt0PS0xLFRuPTAscnI9MCxTbj0wLGxyPXtzOntyOjFlNyxjOjFlN30sZTp7cjowLGM6MH19LFhuPVtdO2ZvcihqdD0wO2p0PE90Lmxlbmd0aDsrK2p0KXt2YXIgVm49T3RbanRdLnRyaW0oKSxocj1Wbi5z'@;
put 'bGljZSgwLDMpLnRvTG93ZXJDYXNlKCk7aWYoIjx0ciIhPWhyKXtpZigiPHRkIj09aHJ8fCI8dGgiPT1ocil7dmFyIGJyPVZuLnNwbGl0KC88XC90W2RoXT4vaSk7Zm9yKGt0PTA7a3Q8YnIubGVuZ3RoOysra3Qpe3ZhciBlcj1icltrdF0udHJpbSgpO2lmKGVyLm1hdGNoKC88dFtkaF0vaSkp'@;
put 'e2Zvcih2YXIgQ2k9ZXIsRmk9MDsiPCI9PUNpLmNoYXJBdCgwKSYmKEZpPUNpLmluZGV4T2YoIj4iKSk+LTE7KUNpPUNpLnNsaWNlKEZpKzEpO2Zvcih2YXIgcm89MDtybzxYbi5sZW5ndGg7Kytybyl7dmFyIHVvPVhuW3JvXTt1by5zLmM9PVRuJiZ1by5zLnI8S3QmJkt0PD11by5lLnImJihU'@;
put 'bj11by5lLmMrMSxybz0tMSl9dmFyIExpPXZyKGVyLnNsaWNlKDAsZXIuaW5kZXhPZigiPiIpKSk7U249TGkuY29sc3Bhbj8rTGkuY29sc3BhbjoxLCgocnI9K0xpLnJvd3NwYW4pPjF8fFNuPjEpJiZYbi5wdXNoKHtzOntyOkt0LGM6VG59LGU6e3I6S3QrKHJyfHwxKS0xLGM6VG4rU24tMX19'@;
put 'KTt2YXIga3I9TGkudHx8TGlbImRhdGEtdCJdfHwiIjtpZighQ2kubGVuZ3RoKXtUbis9U247Y29udGludWV9aWYoQ2k9aXIoQ2kpLGxyLnMucj5LdCYmKGxyLnMucj1LdCksbHIuZS5yPEt0JiYobHIuZS5yPUt0KSxsci5zLmM+VG4mJihsci5zLmM9VG4pLGxyLmUuYzxUbiYmKGxyLmUuYz1U'@;
put 'biksQ2kubGVuZ3RoKXt2YXIgTm49e3Q6InMiLHY6Q2l9O2N0LnJhd3x8IUNpLnRyaW0oKS5sZW5ndGh8fCJzIj09a3J8fChObj1SaShDaSxjdCkpLGN0LmRlbnNlPyhFdFtLdF18fChFdFtLdF09W10pLEV0W0t0XVtUbl09Tm4pOkV0W3FpKHtyOkt0LGM6VG59KV09Tm4sVG4rPVNufX19fX1l'@;
put 'bHNle2lmKCsrS3QsY3Quc2hlZXRSb3dzJiZjdC5zaGVldFJvd3M8PUt0KXstLUt0O2JyZWFrfVRuPTB9fXJldHVybiBFdFsiIXJlZiJdPWlvKGxyKSxYbi5sZW5ndGgmJihFdFsiIW1lcmdlcyJdPVhuKSxFdH1mdW5jdGlvbiBRKFllLGV0LGN0LEV0LG90LGJ0KXt2YXIgT3QsanQ9WWVbIiFt'@;
put 'ZXJnZXMiXXx8W10sa3Q9W10sS3Q9e3N0eWxlOltdfSxUbj0hMTtmdW5jdGlvbiBycihvbyxMYSxQbyl7dmFyIGhhPSIiLEpvPTA7aWYoT3Rbb29dKXN3aXRjaChPdFtvb10uc3R5bGUpe2Nhc2UidGhpbiI6Y2FzZSJoYWlyIjpoYT0ic29saWQiLEpvPTE7YnJlYWs7Y2FzZSJtZWRpdW0iOmhh'@;
put 'PSJzb2xpZCIsSm89MjticmVhaztjYXNlInRoaWNrIjpoYT0ic29saWQiLEpvPTM7YnJlYWs7Y2FzZSJkb3VibGUiOmhhPSJkb3VibGUiLEpvPTM7YnJlYWs7Y2FzZSJkb3R0ZWQiOmNhc2UiZGFzaERvdERvdCI6aGE9ImRvdHRlZCIsSm89MTticmVhaztjYXNlIm1lZGl1bURhc2hEb3REb3Qi'@;
put 'OmhhPSJkb3R0ZWQiLEpvPTI7YnJlYWs7Y2FzZSJkYXNoZWQiOmNhc2UiZGFzaERvdCI6Y2FzZSJzbGFudERhc2hEb3QiOmhhPSJkYXNoZWQiLEpvPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoZWQiOmNhc2UibWVkaXVtRGFzaERvdCI6aGE9ImRhc2hlZCIsSm89Mn1lOmlmKDA9PUpvKXtzd2l0'@;
put 'Y2gob28pe2Nhc2UidG9wIjotLUxhO2JyZWFrO2Nhc2UibGVmdCI6LS1QbzticmVhaztjYXNlImJvdHRvbSI6KytMYTticmVhaztjYXNlInJpZ2h0IjorK1BvfXZhciBCaT1MYT49MCYmUG8+PTA/RXQuZGVuc2U/KFllW0xhXXx8W10pW1BvXTpZZVtxaSh7cjpMYSxjOlBvfSldOm51bGw7aWYo'@;
put 'Qmkpe2lmKEJpLnMmJkJpLnNbe3RvcDoiYm90dG9tIixib3R0b206InRvcCIsbGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0In1bb29dXSlicmVhayBlO0JpLnMmJkJpLnMuZmdDb2xvciYmKEpvPTEpfU90LmZnQ29sb3ImJihKbz0xKSwhQmkmJlRuJiYwPT1KbyYmKEpvPTEpfTAhPUpvJiZKbyYm'@;
put 'KEt0LnN0eWxlLnB1c2goImJvcmRlci0iK29vKyItc3R5bGU6IisoaGF8fCJ0cmFuc3BhcmVudCIpKSxLdC5zdHlsZS5wdXNoKCJib3JkZXItIitvbysiLXdpZHRoOiIrSm8rInB4IiksIiI9PWhhP0t0LnN0eWxlLnB1c2goImJvcmRlci0iK29vKyItY29sb3I6IHRyYW5zcGFyZW50Iik6T3Rb'@;
put 'b29dLmNvbG9yJiZPdFtvb10uY29sb3IucmdiJiZLdC5zdHlsZS5wdXNoKCJib3JkZXItIitvbysiLWNvbG9yOiMiK08wKE90W29vXS5jb2xvci5yZ2IpKSl9Zm9yKHZhciBTbj1ldC5zLmM7U248PWV0LmUuYzsrK1NuKXtmb3IodmFyIGxyPTAsWG49MCxWbj0wO1ZuPGp0Lmxlbmd0aDsrK1Zu'@;
put 'KWlmKCEoanRbVm5dLnMucj5jdHx8anRbVm5dLnMuYz5Tbnx8anRbVm5dLmUucjxjdHx8anRbVm5dLmUuYzxTbikpe2lmKGp0W1ZuXS5zLnI8Y3R8fGp0W1ZuXS5zLmM8U24pe2xyPS0xO2JyZWFrfWxyPWp0W1ZuXS5lLnItanRbVm5dLnMucisxLFhuPWp0W1ZuXS5lLmMtanRbVm5dLnMuYysx'@;
put 'O2JyZWFrfWlmKCEobHI8MCkpe3ZhciBocj1xaSh7cjpjdCxjOlNufSksYnI9RXQuZGVuc2U/KFllW2N0XXx8W10pW1NuXTpZZVtocl07YnI/VG49ITE6KFRuPSEwLGJyPXt0OiJ6IixzOnt9fSk7dmFyIGVyPSJ6Ij09YnIudD8iIjpici5ofHxjbyhici53fHwoX2woYnIpLGJyLncpfHwiIik7'@;
put 'aWYoS3Q9e3N0eWxlOltdfSxPdD1ici5zKXt2YXIgQ2k9MTtpZigoInN1cGVyIj09T3QudmFsaWdufHwic3ViIj09T3QudmFsaWduKSYmKENpPS44Myxlcj1Qcigic3BhbiIsZXIse3N0eWxlOiJ2ZXJ0aWNhbC1hbGlnbjogIitPdC52YWxpZ259KSksS3Quc3R5bGUucHVzaCgiZm9udC13ZWln'@;
put 'aHQ6IisoT3QuYm9sZD83MDA6NDAwKSksT3QuaXRhbGljJiZLdC5zdHlsZS5wdXNoKCJmb250LXN0eWxlOiBpdGFsaWMiKSwoT3QudW5kZXJsaW5lfHxPdC5zdHJpa2UpJiZLdC5zdHlsZS5wdXNoKCJ0ZXh0LWRlY29yYXRpb246IisoT3QudW5kZXJsaW5lPyIgdW5kZXJsaW5lIjoiIikrKE90'@;
put 'LnN0cmlrZT8iIGxpbmUtdGhyb3VnaCI6IiIpKSxPdC5jb2xvciYmT3QuY29sb3IucmdiJiZLdC5zdHlsZS5wdXNoKCJjb2xvcjogIyIrTzAoT3QuY29sb3IucmdiKSksT3QubmFtZSYmS3Quc3R5bGUucHVzaCgiZm9udC1mYW1pbHk6IitPdC5uYW1lKyIsIHNhbnMtc2VyaWYiKSxPdC5zeiYm'@;
put 'S3Quc3R5bGUucHVzaCgiZm9udC1zaXplOiIrT3Quc3oqQ2krInB0IiksbnVsbCE9PU90LnBhdHRlcm5UeXBlJiZPdC5mZ0NvbG9yJiZPdC5mZ0NvbG9yLnJnYiYmS3Quc3R5bGUucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIrTzAoT3QuZmdDb2xvci5yZ2IpKSxbInRvcCIsImxlZnQiXS5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKG9vKXtycihvbyxjdCxTbil9KSxscj4xfHxYbj4xKXt2YXIgRmk9cWkoe3I6Y3QrbHItMSxjOlNuK1huLTF9KSxybz1FdC5kZW5zZT8oWWVbY3QrbHItMV18fFtdKVtTbitYbi0xXTpZZVtGaV0sTGk9T3Q7T3Q9cm8mJnJvLnN8fE90LFsiYm90dG9tIiwicmlnaHQi'@;
put 'XS5mb3JFYWNoKGZ1bmN0aW9uKG9vKXtycihvbyxjdCxTbil9KSxPdD1MaX1lbHNlWyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24ob28pe3JyKG9vLGN0LFNuKX0pO2lmKE90LmFsaWdubWVudCl7aWYoT3QuYWxpZ25tZW50Lmhvcml6b250YWw/S3Quc3R5bGUucHVzaCgidGV4'@;
put 'dC1hbGlnbjogIisoU1tPdC5hbGlnbm1lbnQuaG9yaXpvbnRhbF18fE90LmFsaWdubWVudC5ob3Jpem9udGFsKSk6Im4iPT1ici50JiZLdC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIpLE90LmFsaWdubWVudC52ZXJ0aWNhbCl7dmFyIGtyPU90LmFsaWdubWVudC52ZXJ0aWNhbDtL'@;
put 'dC5zdHlsZS5wdXNoKCJ2ZXJ0aWNhbC1hbGlnbjogIisoImNlbnRlciI9PWtyPyJtaWRkbGUiOmtyKSl9aWYoT3QuYWxpZ25tZW50LndyYXBUZXh0KUt0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpO2Vsc2V7dmFyIE5uPUV0LmRlbnNlPyhZZVtjdF18fFtdKVtTbisxXTpZ'@;
put 'ZVtxaSh7cjpjdCxjOlNuKzF9KV07Tm4mJiJ6IiE9Tm4udCYmS3Quc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIil9fWVsc2UibiI9PWJyLnQmJkt0LnN0eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0Iik7dmFyIEJyPSgoWWVbIiFjb2xzIl18fFtdKVtTbl18fHt9KS53cHg7'@;
put 'bnVsbD09QnImJihCcj0oKFllWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCl9dmFyIF9yPTA7aWYoWG48PTEmJmxyPD0xJiYoX3I9KChZZVsiIWNvbHMiXXx8W10pW1NuXXx8e30pLndweCkmJkt0LnN0eWxlLnB1c2goIndpZHRoOiAiK19yKyJweCIpLFllWyIhY29uZGZtdCJd'@;
put 'JiZhZShicixjdCxTbixZZVsiIWNvbmRmbXQiXSxLdC5zdHlsZSxZZSksMD09S3Quc3R5bGUubGVuZ3RoP2RlbGV0ZSBLdC5zdHlsZTpLdC5zdHlsZT1LdC5zdHlsZS5qb2luKCI7IiksRXQuY3NzKXt2YXIgRm49b3QuaW5kZXhPZihLdC5zdHlsZSk7LTE9PUZuJiYob3QucHVzaChLdC5zdHls'@;
put 'ZSksRm49b3QubGVuZ3RoLTEpLGRlbGV0ZSBLdC5zdHlsZSxLdC5jbGFzcz0ic2pzIisoYnR8fCIiKSsiLSIrRm59bHI+MSYmKEt0LnJvd3NwYW49bHIpLFhuPjEmJihLdC5jb2xzcGFuPVhuKSxFdC5lZGl0YWJsZT9lcj0nPHNwYW4gY29udGVudGVkaXRhYmxlPSJ0cnVlIj4nK2VyKyI8L3Nw'@;
put 'YW4+IjpiciYmKEt0WyJkYXRhLXQiXT1iciYmYnIudHx8InoiLG51bGwhPWJyLnYmJihLdFsiZGF0YS12Il09YnIudiksbnVsbCE9YnIueiYmKEt0WyJkYXRhLXoiXT1ici56KSksS3QuaWQ9KEV0LmlkfHwic2pzIikrIi0iK2hyLGt0LnB1c2goUHIoInRkIixlcixLdCkpfX12YXIgWmksanI9'@;
put 'e3N0eWxlOltdfTsoWmk9WWVbIiFzaGVldEZvcm1hdCJdKSYmWmkucm93JiYoVnYoWmkucm93KSxaaS5yb3cuaHB4JiYoanIuc3R5bGUucHVzaChbImhlaWdodCIsWmkucm93LmhweCsicHgiXSksanIuaGVpZ2h0PU1hdGgucm91bmQoWmkucm93LmhweCkpKTt2YXIgeWk9WWVbIiFyb3dzIl07'@;
put 'aWYoeWkmJnlpW2N0XSl7dmFyIHdvPXlpW2N0XTt3by5ocHgmJihqci5zdHlsZS5wdXNoKFsiaGVpZ2h0Iiwrd28uaHB4KyJweCJdKSxqci5oZWlnaHQ9TWF0aC5yb3VuZCh3by5ocHgpKSx3by5oaWRkZW4mJmpyLnN0eWxlLnB1c2goWyJkaXNwbGF5Iiwibm9uZSJdKX12YXIgc2E9W107cmV0'@;
put 'dXJuIGpyLnN0eWxlPWpyLnN0eWxlLnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24ob28pe3JldHVybiEoc2EuaW5kZXhPZihvb1swXSk+LTF8fChzYS5wdXNoKG9vWzBdKSwwKSl9KS5tYXAoZnVuY3Rpb24ob28pe3JldHVybiBvb1swXSsiOiIrb29bMV19KSwwPT1qci5zdHlsZS5sZW5ndGg/'@;
put 'ZGVsZXRlIGpyLnN0eWxlOmpyLnN0eWxlPWpyLnN0eWxlLmpvaW4oIjsiKSxQcigidHIiLGt0LmpvaW4oIiIpLGpyKX1mdW5jdGlvbiBhZShZZSxldCxjdCxFdCxvdCxidCl7RXQuZm9yRWFjaChmdW5jdGlvbihqdCl7aWYoanQuX3JlZnx8KGp0Ll9yZWY9InN0cmluZyI9PXR5cGVvZiBqdC5y'@;
put 'ZWY/U3MoanQucmVmKTpqdC5yZWYpLCEoanQuX3JlZi5zLmM+Y3R8fGp0Ll9yZWYuZS5jPGN0fHxqdC5fcmVmLnMucj5ldHx8anQuX3JlZi5lLnI8ZXR8fCJzY2FsZSIhPT1qdC50KSl7aWYoIm4iIT1ZZS50KXJldHVybjt2YXIga3Q7aWYobnVsbD09anQuX21pbil7anQuX3ZhbHVlcz1bXTtm'@;
put 'b3IodmFyIE90PWp0Ll9yZWYucy5yO090PD1qdC5fcmVmLmUucjsrK090KWZvcih2YXIgS3Q9anQuX3JlZi5zLmM7S3Q8PWp0Ll9yZWYuZS5jOysrS3Qpe3ZhciBUbj1BcnJheS5pc0FycmF5KGJ0KT8oYnRbT3RdfHxbXSlbS3RdOmJ0W3FpKHtyOk90LGM6S3R9KV07VG4mJiJuIj09VG4udCYm'@;
put 'anQuX3ZhbHVlcy5wdXNoKFRuLnYpfWlmKGp0Ll92YWx1ZXMuc29ydChmdW5jdGlvbihycixTbil7cmV0dXJuIHJyLVNufSksanQuX21pbj1qdC5fdmFsdWVzWzBdLGp0Ll9tYXg9anQuX3ZhbHVlcy5zbGljZSgtMSlbMF0sanQuX2JhbmQ9anQuX21heC1qdC5fbWluLGp0LmNtaWQpe3N3aXRj'@;
put 'aChqdC5jbWlkLnQpe2Nhc2UibnVtIjpqdC5fbWlkPWp0LmNtaWQudjticmVhaztjYXNlInBlcmNlbnQiOmp0Ll9taWQ9anQuY21pZC52LzEwMCpqdC5fYmFuZCtqdC5fbWluO2JyZWFrO2Nhc2UicGVyY2VudGlsZSI6anQuX21pZD1mdW5jdGlvbiBPcihTLFIpe2lmKDA9PVIpcmV0dXJuIFNb'@;
put 'MF07aWYoMTAwPT1SKXJldHVybiBTW1MubGVuZ3RoLTFdO3ZhciBHPVIvMTAwKihTLmxlbmd0aC0xKSxRPUctTWF0aC5mbG9vcihHKTtyZXR1cm4gUSpTW01hdGguY2VpbChHKV0rKDEtUSkqU1tNYXRoLmZsb29yKEcpXX0oanQuX3ZhbHVlcyxqdC5jbWlkLnYpfWp0Ll9iYW5kaD1qdC5fbWF4'@;
put 'LWp0Ll9taWQsanQuX2JhbmRsPWp0Ll9taWQtanQuX21pbn19KGt0PWp0LmNtaWQ/WWUudj49anQuX21pZD9fQyhqdC5jbWlkLmNvbG9yLGp0LmNtYXguY29sb3IsKFllLnYtanQuX21pZCkvanQuX2JhbmRoKTpfQyhqdC5jbWluLmNvbG9yLGp0LmNtaWQuY29sb3IsKFllLnYtanQuX21pbikv'@;
put 'anQuX2JhbmRsKTpfQyhqdC5jbWluLmNvbG9yLGp0LmNtYXguY29sb3IsKFllLnYtanQuX21pbikvanQuX2JhbmQpKSYmb3QucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIra3QpfX0pfWZ1bmN0aW9uIGdlKFllLGV0KXt2YXIgY3Q9e3NwYW46ZXR8fDEsc3R5bGU6IiJ9LEV0PVtdO3JldHVy'@;
put 'biBZZSYmWWUud3B4JiYoY3Qud2lkdGg9TWF0aC5yb3VuZCg0KlllLndweC8zKSxFdC5wdXNoKCJ3aWR0aDoiKyhZZS53cHh8fDApKyJweCIpKSxFdC5sZW5ndGg+MCYmKGN0LnN0eWxlPUV0LmpvaW4oIjsiKSksUHIoImNvbCIsbnVsbCxjdCl9ZnVuY3Rpb24gcGUoWWUsZXQsY3Qpe3ZhciBF'@;
put 'dD17Ym9yZGVyOjAsY2VsbHBhZGRpbmc6MCxjZWxsc3BhY2luZzowLHN0eWxlOlsiYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIiwidGFibGUtbGF5b3V0OmZpeGVkIl0uam9pbigiOyIpfTtjdCYmY3QuaWQmJihFdC5pZD1jdC5pZCk7dmFyIG90PVllWyIhY29scyJdLGJ0PVllWyIhc2hlZXRG'@;
put 'b3JtYXQiXTtpZihZZSYmb3Qpe2Zvcih2YXIganQ9MCxPdD1ldC5zLmM7T3Q8PWV0LmUuYzsrK090KXt2YXIgS3Q9b3RbT3RdO2p0Kz1LdCYmS3Qud3B4P0t0LndweDpidCYmYnQuY29sJiZidC5jb2wud3B4P2J0LmNvbC53cHg6NTN9RXQuc3R5bGUrPSI7d2lkdGg6IitqdCsicHgifXZhciBy'@;
put 'cixUbj1bIjx0YWJsZSIrSXUoRXQpKyI+Il07aWYoVG4ucHVzaCgiPHN0eWxlPnRkIHsgcGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1yaWdodDoxcHg7IHBhZGRpbmctbGVmdDoxcHg7IHRleHQtYWxpZ246Z2VuZXJhbDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyBib3JkZXI6MXB4IHNvbGlk'@;
put 'OyBib3JkZXItY29sb3I6IisoY3QmJmN0LmdyaWRjb2xvcj9jdC5ncmlkY29sb3I6V3QoWWVbIiFncmlkbGluZXMiXSk/InRyYW5zcGFyZW50IjoiYmxhY2siKSsiOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9PC9zdHlsZT4iKSxUbi5wdXNoKCc8Y29sZ3Jv'@;
put 'dXAgc3Bhbj0iJysoZXQuZS5jLWV0LnMuYysxKSsnIj4nKSxvdCl7Zm9yKHZhciBTbj1ldC5zLmM7U248TWF0aC5taW4ob3QubGVuZ3RoLGV0LmUuYysxKTsrK1NuKSEocnI9b3RbU25dKSYmYnQmJmJ0LmNvbCYmKHJyPWJ0LmNvbCkscnJ8fChycj17d3B4OjUzfSksVG4ucHVzaChnZShyciwx'@;
put 'KSk7ZXQuZS5jLWV0LnMuYysxPm90Lmxlbmd0aCYmKHJyPW51bGwsYnQmJmJ0LmNvbCYmKHJyPWJ0LmNvbCkscnJ8fChycj17d3B4OjUzfSksVG4ucHVzaChnZShycixldC5lLmMtZXQucy5jKzEtb3QubGVuZ3RoKSkpfWVsc2UgcnI9bnVsbCxidCYmYnQuY29sJiYocnI9YnQuY29sKSxycnx8'@;
put 'KHJyPXt3cHg6NTN9KSxUbi5wdXNoKGdlKHJyLGV0LmUuYy1ldC5zLmMrMSkpO3JldHVybiBUbi5wdXNoKCI8L2NvbGdyb3VwPiIpLFRuLmpvaW4oIiIpfXZhciB5ZT0nPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNldD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxl'@;
put 'PjwvaGVhZD48Ym9keT4nLFBlPSI8L2JvZHk+PC9odG1sPiI7cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIEcoWWUsZXQpe3JldHVybiBuaChrKFllLGV0KSxldCl9LHRvX3NoZWV0OmssX3JvdzpRLEJFR0lOOnllLEVORDpQZSxfcHJlYW1ibGU6cGUsaHRtbF90b19yczpmdW5jdGlvbiBS'@;
put 'KFllKXt2YXIgZXQ9W10sY3Q9e30sRXQ9MDtyZXR1cm4gWWUucmVwbGFjZSgvPChcLz8pKFteXHM/PiFcLzpdKjp8KShbXlxzPz46XC9dKylbXj5dKj4vZ20sZnVuY3Rpb24ob3QsYnQsanQsa3QsT3Qpe3ZhciBUbj1Xbih2cihvdClbMF0pLnJlcGxhY2UoL1s8XC8+XS9nLCIiKSxycj1ZZS5z'@;
put 'bGljZShFdCxPdCkucmVwbGFjZSgvXHMvZywiICIpO3N3aXRjaChyci5sZW5ndGg+MCYmKGV0LnB1c2goe3Q6InMiLHY6cnIsczpjdH0pLGN0PXF0KGN0KSksVG4udG9Mb3dlckNhc2UoKSl7Y2FzZSJiIjoiLyIhPWJ0P2N0LmJvbGQ9ITA6ZGVsZXRlIGN0LmJvbGQ7YnJlYWs7Y2FzZSJpIjoi'@;
put 'LyIhPWJ0P2N0Lml0YWxpYz0hMDpkZWxldGUgY3QuaXRhbGljO2JyZWFrO2Nhc2UidSI6Ii8iIT1idD9jdC51bmRlcmxpbmU9MTpkZWxldGUgY3QudW5kZXJsaW5lO2JyZWFrO2Nhc2UicyI6Ii8iIT1idD9jdC5zdHJpa2U9ITA6ZGVsZXRlIGN0LnN0cmlrZX1yZXR1cm4gRXQ9T3Qrb3QubGVu'@;
put 'Z3RoLG90fSksZXR9LGZyb21fc2hlZXQ6ZnVuY3Rpb24gTmUoWWUsZXQpe3ZhciBjdD1ldHx8e30sb3Q9bnVsbCE9Y3QuZm9vdGVyP2N0LmZvb3RlcjpQZSxidD1bbnVsbCE9Y3QuaGVhZGVyP2N0LmhlYWRlcjp5ZSwiIl0sanQ9W10sa3Q9KG5ldyBEYXRlKS52YWx1ZU9mKCk7WWV8fChZZT17'@;
put 'fSksWWVbIiFyZWYiXXx8KFllWyIhcmVmIl09IkExOkExIik7dmFyIE90PVNzKFllWyIhcmVmIl0pO2lmKGN0LmRlbnNlPUFycmF5LmlzQXJyYXkoWWUpLGN0LnNraXBlbmQpe3ZhciBLdD1PdC5lLnI7ZTpmb3IoO0t0Pj1PdC5zLnI7LS1LdClmb3IodmFyIFRuPU90LmUuYztUbj49T3Qucy5j'@;
put 'Oy0tVG4paWYobnVsbCE9KChjdC5kZW5zZT8oWWVbS3RdfHxbXSlbVG5dOlllW3FpKHtyOkt0LGM6VG59KV0pfHx7fSkudilicmVhayBlO090LmUucj1LdDt2YXIgcnI9T3QuZS5jO2U6Zm9yKDtycj49T3Qucy5jOy0tcnIpZm9yKHZhciBTbj1PdC5lLnI7U24+PU90LnMucjstLVNuKWlmKG51'@;
put 'bGwhPSgoY3QuZGVuc2U/KFllW1NuXXx8W10pW3JyXTpZZVtxaSh7cjpTbixjOnJyfSldKXx8e30pLnYpYnJlYWsgZTtPdC5lLmM9cnJ9YnQucHVzaChwZShZZSxPdCxjdCkpO2Zvcih2YXIgbHI9T3Qucy5yO2xyPD1PdC5lLnI7KytscilidC5wdXNoKFEoWWUsT3QsbHIsY3QsanQsa3QpKTty'@;
put 'ZXR1cm4gYnQucHVzaCgiPC90YWJsZT4iK290KSxjdC5jc3MmJihidFsxXT0iPHN0eWxlPlxuIitqdC5tYXAoZnVuY3Rpb24oWG4sVm4pe3JldHVybiIuc2pzIitrdCsiLSIrVm4rIiB7IitYbisifSJ9KS5qb2luKCJcbiIpKyI8L3N0eWxlPiIpLGJ0LmpvaW4oIiIpfX19KCk7ZnVuY3Rpb24g'@;
put 'RUkoUyxSLGspe3ZhciBHPXt9O2lmKHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPiJ1IilyZXR1cm4gRzt2YXIgUT1nZXRDb21wdXRlZFN0eWxlKFMpO2lmKCg3MDA9PVFbImZvbnQtd2VpZ2h0Il18fCJib2xkIj09UVsiZm9udC13ZWlnaHQiXSkmJihHLmJvbGQ9ITApLChRWyJmb250LXN0eWxl'@;
put 'Il18fCIiKS5tYXRjaCgvaXRhbGljLykmJihHLml0YWxpYz0hMCksKFFbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL3VuZGVybGluZS8pJiYoRy51bmRlcmxpbmU9MSksKFFbInRleHQtZGVjb3JhdGlvbiJdfHwiIikubWF0Y2goL2xpbmUtdGhyb3VnaC8pJiYoRy5zdHJpa2U9MSks'@;
put 'cGFyc2VJbnQoUVsiZm9udC1zaXplIl0pJiYoRy5zej1wYXJzZUZsb2F0KFFbImZvbnQtc2l6ZSJdKSooUVsiZm9udC1zaXplIl0ubWF0Y2goL3B4Lyk/My80OjEpKSxRWyJmb250LWZhbWlseSJdJiYoRy5uYW1lPVFbImZvbnQtZmFtaWx5Il0uc3BsaXQoIiwiKVswXS5yZXBsYWNlKC9ccyoi'@;
put 'XHMqL2csIiIpKSxRLmNvbG9yKXt2YXIgYWU9eDUoUS5jb2xvci50b0xvd2VyQ2FzZSgpLCEwKTthZT49MCYmKEcuY29sb3I9e3JnYjphZX0pfXN3aXRjaChRWyJ0ZXh0LXRyYW5zZm9ybSJdJiYoRy50ZXh0X3RyYW5zZm9ybT1RWyJ0ZXh0LXRyYW5zZm9ybSJdLnRvTG93ZXJDYXNlKCkpLCJu'@;
put 'b25lIiE9KFFbInRleHQtc2hhZG93Il18fCJub25lIikmJihHLnNoYWRvdz0hMCksUVsidGV4dC1hbGlnbiJdKXtjYXNlImNlbnRlciI6Ry5hbGlnbm1lbnQ9e2hvcml6b250YWw6ImNlbnRlciJ9O2JyZWFrO2Nhc2UicmlnaHQiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJyaWdodCJ9O2Jy'@;
put 'ZWFrO2Nhc2UibGVmdCI6Ry5hbGlnbm1lbnQ9e2hvcml6b250YWw6ImxlZnQifTticmVhaztjYXNlImp1c3RpZnkiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJqdXN0aWZ5In19c3dpdGNoKFFbInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UidG9wIjpjYXNlIm1pZGRsZSI6Y2FzZSJib3R0b20i'@;
put 'OkcuYWxpZ25tZW50fHwoRy5hbGlnbm1lbnQ9e30pLEcuYWxpZ25tZW50LnZlcnRpY2FsPVFbInZlcnRpY2FsLWFsaWduIl0sIm1pZGRsZSI9PUcuYWxpZ25tZW50LnZlcnRpY2FsJiYoRy5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciIpO2JyZWFrO2Nhc2Uic3ViIjpjYXNlInN1cGVyIjpH'@;
put 'LnZhbGlnbj1RWyJ2ZXJ0aWNhbC1hbGlnbiJdLEcuc3omJihHLnN6Lz0uODMpfXZhciBnZT1SJiZnZXRDb21wdXRlZFN0eWxlKFIpO3JldHVybiBnZSYmayYmUiYmWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgeWU9cGUuY2hhckF0KDAp'@;
put 'LnRvVXBwZXJDYXNlKCkrcGUuc2xpY2UoMSksUGU9Z2VbImJvcmRlci0iK3BlKyItc3R5bGUiXTtpZigoIm5vbmUiPT1QZXx8IVBlKSYmKFBlPWdlWyJib3JkZXIiK3llKyJTdHlsZSJdKSwibm9uZSIhPVBlJiZQZSl7dmFyIE5lPXBhcnNlSW50KGdlWyJib3JkZXItIitwZSsiLXdpZHRoIl18'@;
put 'fGdlWyJib3JkZXIiK3llKyJXaWR0aCJdLDEwKSxZZT0idGhpbiI7aWYoTmU+MCl7c3dpdGNoKFBlKXtjYXNlImRvdWJsZSI6WWU9ImRvdWJsZSI7YnJlYWs7Y2FzZSJkYXNoZWQiOlllPU5lPj0yPyJtZWRpdW1EYXNoZWQiOiJkYXNoZWQiO2JyZWFrO2Nhc2UiZG90dGVkIjpZZT1OZT49Mj8i'@;
put 'bWVkaXVtRGFzaERvdERvdCI6ImRvdHRlZCI7YnJlYWs7Y2FzZSJzb2xpZCI6WWU9TmU+PTM/InRoaWNrIjpOZT49Mj8ibWVkaXVtIjoidGhpbiJ9aWYoR1twZV09e3N0eWxlOlllfSxnZVsiYm9yZGVyLSIrcGUrIi1jb2xvciJdfHxnZVsiYm9yZGVyIit5ZSsiQ29sb3IiXSl7dmFyIGV0PXg1'@;
put 'KChnZVsiYm9yZGVyLSIrcGUrIi1jb2xvciJdfHxnZVsiYm9yZGVyIit5ZSsiQ29sb3IiXSkudG9Mb3dlckNhc2UoKSwhMCk7ZXQ+PTAmJihHW3BlXS5jb2xvcj17cmdiOmV0fSl9fX19KSxHfWZ1bmN0aW9uIEFJKFMsUixrKXt2YXIgRz1TLmNoaWxkTm9kZXM7aWYoMT09Uy5ub2RlVHlwZSlz'@;
put 'd2l0Y2goUy50YWdOYW1lLnRvTG93ZXJDYXNlKCkpe2Nhc2UicCI6Ui5sZW5ndGg+MCYmUi5wdXNoKHt0OiJ0Iix2OiJcbiIsczprfSk7YnJlYWs7Y2FzZSJzZWxlY3QiOnJldHVybiBmdW5jdGlvbiBUSShTLFIsayl7Ui5wdXNoKHt0OiJ0Iix2OlMuY2hpbGRyZW5bUy5zZWxlY3RlZEluZGV4'@;
put 'XS5pbm5lclRleHQsczprfSl9KFMsUixrKX1pZihHLmxlbmd0aD4wKXt2YXIgUT1FSShTLG51bGwsITEpO2smJihrLnVuZGVybGluZSYmKFEudW5kZXJsaW5lPWsudW5kZXJsaW5lKSxrLnN0cmlrZSYmKFEuc3RyaWtlPWsuc3RyaWtlKSk7Zm9yKHZhciBhZT0wO2FlPEcubGVuZ3RoOysrYWUp'@;
put 'e3RyeXtpZihHW2FlXS5nZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIikpY29udGludWV9Y2F0Y2h7fUFJKEdbYWVdLFIsUSl9ZGVsZXRlIFEudGV4dF90cmFuc2Zvcm19ZWxzZSBpZigzPT1TLm5vZGVUeXBlKXt2YXIgZ2U9e3Q6InQiLHY6Uy5ub2RlVmFsdWUucmVwbGFjZSgvXltcbiBdKy8s'@;
put 'IiAiKS5yZXBsYWNlKC9bXG4gXSskLywiICIpLHM6a307c3dpdGNoKGsudGV4dF90cmFuc2Zvcm0pe2Nhc2UidXBwZXJjYXNlIjpnZS52PWdlLnYudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6Z2Uudj1nZS52LnRvTG93ZXJDYXNlKCl9KFIubGVuZ3RoPjB8fGdlLnYmJiIg'@;
put 'IiE9Z2UudikmJlIucHVzaChnZSl9ZWxzZSAxPT1TLm5vZGVUeXBlJiYiYnIiPT09Uy50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJlIucHVzaCh7dDoidCIsdjoiXG4iLHM6a30pfWZ1bmN0aW9uIEFiKFMsUixrLEcsUSl7dmFyIGdlLGFlPVMuaW5uZXJIVE1MO2lmKHR5cGVvZiBnZXRDb21wdXRl'@;
put 'ZFN0eWxlPCJ1Iilzd2l0Y2goZ2U9Z2V0Q29tcHV0ZWRTdHlsZShTKSwoZ2VbIndoaXRlLXNwYWNlIl18fCIiKS5tYXRjaCgvcHJlLykmJihhZT1hZS5yZXBsYWNlKC9cbi9nLCI8YnIvPiIpKSwoZ2VbInRleHQtdHJhbnNmb3JtIl18fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInVwcGVyY2Fz'@;
put 'ZSI6YWU9YWUudG9VcHBlckNhc2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6YWU9YWUudG9Mb3dlckNhc2UoKX12YXIgcGU9ZnVuY3Rpb24gVGIoUyxSLGssRyl7dmFyIFE9e3Q6InMiLHY6Un0sYWU9IiI7aWYoUyl7az1TLmdldEF0dHJpYnV0ZSgiZGF0YS10Iil8fFMuZ2V0QXR0cmlidXRl'@;
put 'KCJ0Iik7dmFyIGdlPVMuZ2V0QXR0cmlidXRlKCJkYXRhLXYiKXx8Uy5nZXRBdHRyaWJ1dGUoInYiKTtpZihudWxsIT0oYWU9Uy5nZXRBdHRyaWJ1dGUoImRhdGEteiIpfHxTLmdldEF0dHJpYnV0ZSgieiIpKSYmKFEuej1hZSksbnVsbCE9ayYmbnVsbCE9Z2UpcmV0dXJuIFEudD1rLFEudj1n'@;
put 'ZSxRfXJldHVybiBudWxsIT1SJiYoMD09Ui5sZW5ndGg/US50PWt8fCJ6IjpHLnJhd3x8IVIudHJpbSgpLmxlbmd0aHx8InMiPT1rfHwoUT1SaShSLEcpKSksYWUmJihRLno9YWUpLFF9KFMsaXIoYWUpLGssUSk7aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiJiYocGUucz1FSShTLFIs'@;
put 'US5ib3JkZXJzKSxkZWxldGUgcGUucy50ZXh0X3RyYW5zZm9ybSxTLmNoaWxkTm9kZXMubGVuZ3RoPjF8fDE9PVMuY2hpbGROb2Rlcy5sZW5ndGgmJjMhPVMuY2hpbGROb2Rlc1swXS5ub2RlVHlwZSkpc3dpdGNoKEFJKFMscGUuUj1bXSxudWxsKSxwZS5SJiZwZS5SW3BlLlIubGVuZ3RoLTFd'@;
put 'JiYiXG4iPT1wZS5SW3BlLlIubGVuZ3RoLTFdLnYmJnBlLlIubGVuZ3RoLS0sKGdlWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnBlLlIuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQudj1ldC52LnRvVXBwZXJDYXNlKCl9KTticmVhaztjYXNl'@;
put 'Imxvd2VyY2FzZSI6cGUuUi5mb3JFYWNoKGZ1bmN0aW9uKGV0KXtldC52PWV0LnYudG9Mb3dlckNhc2UoKX0pfWlmKCJzIj09cGUudCl7dmFyIHllPXBlLnYubWF0Y2goL1xuLyk7IXllJiZwZS5SJiZwZS5SLmZvckVhY2goZnVuY3Rpb24oZXQpeyJzdHJpbmciPT10eXBlb2YgZXQudiYmZXQu'@;
put 'di5tYXRjaCgvXG4vKSYmKHllPSEwKX0pLCJzIj09cGUudCYmeWUmJihwZS5zfHwocGUucz17fSkscGUucy5hbGlnbm1lbnR8fChwZS5zLmFsaWdubWVudD17fSkscGUucy5hbGlnbm1lbnQud3JhcFRleHQ9ITApfWlmKFIpe3ZhciBQZT0iIixOZT1SLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJB'@;
put 'Iik7aWYoTmUmJk5lLmxlbmd0aClmb3IodmFyIFllPTA7WWU8TmUubGVuZ3RoJiYoIU5lW1llXS5oYXNBdHRyaWJ1dGUoImhyZWYiKXx8IiMiPT0oUGU9TmVbWWVdLmdldEF0dHJpYnV0ZSgiaHJlZiIpKS5jaGFyQXQoMCkpOysrWWUpO1BlJiYiIyIhPVBlLmNoYXJBdCgwKSYmKHBlLmw9e1Rh'@;
put 'cmdldDpQZX0pfXJldHVybiBwZX1mdW5jdGlvbiBrYihTLFIsayl7dmFyIFEsRz1SLnJvd3M7aWYoIUcpe2lmKGsmJm51bGwhPWsub3JpZ2luKXRocm93IlVuc3VwcG9ydGVkIG9yaWdpbiB3aGVuICIrUi50YWdOYW1lKyIgaXMgbm90IGEgVEFCTEUiO3JldHVybiBmdW5jdGlvbiBYbmUoUyxS'@;
put 'LGspe2s9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShrfHx7fSkpO3ZhciBhZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O1NbIiFtZXJnZXMiXXx8KFNbIiFtZXJnZXMiXT1bXSk7Zm9yKHZhciBwZSxnZT1SLmNoaWxkcmVuLHllPTAsUGU9MDtQZTxnZS5sZW5ndGg7KytQZSl7dmFyIGV0'@;
put 'LE5lPWdlW1BlXSxZZT0iIjt0cnl7dHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiP2V0PWdldENvbXB1dGVkU3R5bGU6TmUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIE5lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYm'@;
put 'KGV0PU5lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7fWlmKCFldHx8Im5vbmUiIT1ldChOZSkuZGlzcGxheSlzd2l0Y2goTmUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKXtjYXNlIlRBQkxFIjp5ZT0tMSxTWyIhcmVmIl0mJihrLm9yaWdpbj0tMSks'@;
put 'a2IoUyxOZSxrKTticmVhaztjYXNlIkJSIjpjYXNlIkhSIjp5ZT0tMSxTWyIhcmVmIl0/KCsrKGFlPVNzKFNbIiFyZWYiXSkpLmUucixTWyIhcmVmIl09aW8oYWUpKTpTWyIhcmVmIl09IkExOkExIjticmVhaztjYXNlIkRJViI6Y2FzZSJQIjpjYXNlIkgxIjpjYXNlIkgyIjpjYXNlIkgzIjpj'@;
put 'YXNlIkg0IjpjYXNlIkg1IjpjYXNlIkg2Ijp5ZT0tMSxwZT1BYihOZSxudWxsLCIiLDAsayksU1siIXJlZiJdPyhrLm9yaWdpbj0tMSxmNChTLFtbcGVdXSxrKSk6KFNbIiFyZWYiXT0iQTEiLEFycmF5LmlzQXJyYXkoUyk/KFNbMF18fChTWzBdPVtdKSxTWzBdWzBdPXBlKTpTLkExPXBlKSxT'@;
put 'WyIhcm93cyJdfHwoU1siIXJvd3MiXT1bXSksZXQmJihhZT1TcyhTWyIhcmVmIl0pLChZZT1ldChOZSkuaGVpZ2h0KSYmImF1dG8iIT1ZZSYmKFNbIiFyb3dzIl1bYWUuZS5yXT17aHB0OnBhcnNlSW50KFllLDEwKX0pKTticmVhaztjYXNlIlNQQU4iOmNhc2UiQSI6Y2FzZSJCIjpjYXNlIkVN'@;
put 'IjpjYXNlIkkiOmNhc2UiRk9OVCI6Y2FzZSJTIjpjYXNlIlNVQiI6Y2FzZSJTVVAiOmNhc2UiVSI6cGU9QWIoTmUsbnVsbCwiIiwwLGspLFNbIiFyZWYiXXx8KFNbIiFyZWYiXT0iQTE6QTEiKSxmNChTLFtbcGVdXSx7b3JpZ2luOnFpKHtyOih5ZTwwPzE6MCkrKGFlPVNzKFNbIiFyZWYiXSkp'@;
put 'LmUucixjOisreWV9KX0pO2JyZWFrO2Nhc2UiREwiOmNhc2UiVUwiOmNhc2UiT0wiOnllPS0xLGNvbnNvbGUuZXJyb3IoIkhUTUwgQ29udmVyc2lvbiBkb2VzIG5vdCBzdXBwb3J0IGxpc3QgZWxlbWVudCAiK05lLnRhZ05hbWUudG9VcHBlckNhc2UoKSk7YnJlYWs7ZGVmYXVsdDp5ZT0tMSxj'@;
put 'b25zb2xlLmVycm9yKCJTa2lwcGluZyAiK05lLnRhZ05hbWUudG9VcHBlckNhc2UoKSl9fXJldHVybiBTfShTLFIsayl9dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9RPWdldENvbXB1dGVkU3R5bGU6Ui5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3JiYiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgUi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihRPVIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKX1jYXRjaHt9dmFyIGFlPWt8fHt9O251bGwhPWxlJiYoYWUuZGVuc2U9bGUpO3ZhciBnZT0wLHBlPTA7aWYobnVsbCE9'@;
put 'YWUub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgYWUub3JpZ2luKWdlPWFlLm9yaWdpbjtlbHNle3ZhciB5ZT0ic3RyaW5nIj09dHlwZW9mIGFlLm9yaWdpbj9OYShhZS5vcmlnaW4pOmFlLm9yaWdpbjtnZT15ZS5yLHBlPXllLmN9dmFyIFBlPU1hdGgubWluKGFlLnNoZWV0Um93c3x8MWU3'@;
put 'LEcubGVuZ3RoKSxOZT17czp7cjowLGM6MH0sZTp7cjpnZSxjOnBlfX07aWYoU1siIXJlZiJdKXt2YXIgWWU9U3MoU1siIXJlZiJdKTtOZS5zLnI9TWF0aC5taW4oTmUucy5yLFllLnMuciksTmUucy5jPU1hdGgubWluKE5lLnMuYyxZZS5zLmMpLE5lLmUucj1NYXRoLm1heChOZS5lLnIsWWUu'@;
put 'ZS5yKSxOZS5lLmM9TWF0aC5tYXgoTmUuZS5jLFllLmUuYyksLTE9PWdlJiYoTmUuZS5yPWdlPVllLmUucisxKX12YXIgZXQ9W10sY3Q9MCxFdD1TWyIhcm93cyJdfHwoU1siIXJvd3MiXT1bXSksb3Q9MCxidD0wLGp0PTAsa3Q9MCxPdD0wLEt0PTA7Zm9yKFNbIiFjb2xzIl18fChTWyIhY29s'@;
put 'cyJdPVtdKTtvdDxHLmxlbmd0aCYmYnQ8UGU7KytvdCl7Zm9yKHZhciBUbj1HW290XSxycj1Ubi5wYXJlbnRFbGVtZW50OyJUQUJMRSIhPXJyLnRhZ05hbWUudG9VcHBlckNhc2UoKTspcnI9cnIucGFyZW50RWxlbWVudDtpZihycj09Uil7ZTppZih0eXBlb2YgUTwidSIpe3ZhciBTbj1RKFRu'@;
put 'KTtpZihudWxsPT1TbilicmVhayBlO2lmKFNuLnN0eWxlfHwoU24uc3R5bGU9e30pLGFlLmRpc3BsYXkmJiJub25lIj09KFNuLmRpc3BsYXl8fFNuLnN0eWxlLmRpc3BsYXkpKWNvbnRpbnVlOyJub25lIj09KFNuLmRpc3BsYXl8fFNuLnN0eWxlLmRpc3BsYXkpJiYoKEV0W2J0XXx8KEV0W2J0'@;
put 'XT17fSkpLmhpZGRlbj0hMCl9dmFyIGxyPVRuLmNlbGxzO2ZvcihqdD1rdD0wO2p0PGxyLmxlbmd0aDsrK2p0KXt2YXIgWG49bHJbanRdLFZuPW51bGw7aWYoISh0eXBlb2YgUTwidSImJihudWxsPT1WbiYmKFZuPVEoWG4pKSxWbi5zdHlsZXx8KFZuLnN0eWxlPXt9KSxhZS5kaXNwbGF5JiZu'@;
put 'dWxsIT1WbiYmIm5vbmUiPT0oVm4uZGlzcGxheXx8Vm4uc3R5bGUuZGlzcGxheSkpKSl7Zm9yKEt0PStYbi5nZXRBdHRyaWJ1dGUoImNvbHNwYW4iKXx8MSxjdD0wO2N0PGV0Lmxlbmd0aDsrK2N0KXt2YXIgaHI9ZXRbY3RdO2hyLnMuYz09a3QrcGUmJmhyLnMucjxidCtnZSYmYnQrZ2U8PWhy'@;
put 'LmUuciYmKGt0PWhyLmUuYysxLXBlLGN0PS0xKX0oKE90PStYbi5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKXx8MSk+MXx8S3Q+MSkmJmV0LnB1c2goe3M6e3I6YnQrZ2UsYzprdCtwZX0sZTp7cjpidCtnZSsoT3R8fDEpLTEsYzprdCtwZSsoS3R8fDEpLTF9fSk7dmFyIGJyPVhuLmdldEF0dHJp'@;
put 'YnV0ZSgidCIpfHwiIixlcj1Ybi5nZXRBdHRyaWJ1dGUoImJnY29sb3IiKTtlOmlmKHR5cGVvZiBRPCJ1Iil7aWYobnVsbD09Vm4mJihWbj1RKFhuKSksbnVsbD09Vm4pYnJlYWsgZTtpZihWbi5zdHlsZXx8KFZuLnN0eWxlPXt9KSwxPT1LdCYmVm4ud2lkdGgmJihTWyIhY29scyJdW2t0K3Bl'@;
put 'XT1TWyIhY29scyJdW2t0K3BlXXx8e30sVm4ud2lkdGgubWF0Y2goL3B4Lyk/U1siIWNvbHMiXVtrdCtwZV0ud3B4PU1hdGgubWF4KHBhcnNlSW50KFZuLndpZHRoLDEwKSs1LFNbIiFjb2xzIl1ba3QrcGVdLndweHx8MCk6Vm4ud2lkdGgubWF0Y2goL3B0LykmJihTWyIhY29scyJdW2t0K3Bl'@;
put 'XS53cHg9TWF0aC5tYXgoNCpwYXJzZUludChWbi53aWR0aCwxMCkvMys1LFNbIiFjb2xzIl1ba3QrcGVdLndweHx8MCkpKSxPdDw9MSl7RXRbYnQrZ2VdfHwoRXRbYnQrZ2VdPXt9KTt2YXIgQ2k9Vm4uaGVpZ2h0OyhDaT1DaS5tYXRjaCgvcHQvKT9saChwYXJzZUludChDaSwxMCkpOnBhcnNl'@;
put 'SW50KENpLDEwKSk+KEV0W2J0K2dlXS5ocHh8fGxoKEV0W2J0K2dlXS5ocHQpfHwwKSYmKGRlbGV0ZSBFdFtidCtnZV0uaHB0LEV0W2J0K2dlXS5ocHg9Q2kpfX12YXIgRmk9WG47aWYoWG4uZmlyc3RFbGVtZW50Q2hpbGQmJjE9PVhuLmNoaWxkcmVuLmxlbmd0aCYmInNwYW4iPT1Ybi5maXJz'@;
put 'dEVsZW1lbnRDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmb3IodmFyIHJvPTAsdW89WG4uY2hpbGROb2RlcyxMaT0wO0xpPHVvLmxlbmd0aDsrK0xpKTM9PXVvW0xpXS5ub2RlVHlwZSYmKytybzswPT1ybyYmKFhuPVhuLmZpcnN0RWxlbWVudENoaWxkKX12YXIga3I9QWIoWG4sRmks'@;
put 'YnIsMCxhZSk7aWYoVm4pe3ZhciBObj1RKFhuKTtpZihObiYmIU5uLnN0eWxlJiYoTm4uc3R5bGU9e30pLChObiYmTm5bImJhY2tncm91bmQtY29sb3IiXXx8Vm5bImJhY2tncm91bmQtY29sb3IiXSkmJihrci5zfHwoa3Iucz17fSksIWtyLnMuZmdDb2xvcikpdHJ5e3ZhciBCcj1ObiYmTm5b'@;
put 'ImJhY2tncm91bmQtY29sb3IiXXx8Vm5bImJhY2tncm91bmQtY29sb3IiXTtCci5tYXRjaCgvcmdiYVsoXVxzKjAuKlspXS9pKSYmKEJyPVZuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pO3ZhciBfcj14NShCci50b0xvd2VyQ2FzZSgpLCEwKTtfcj49MCYmKGtyLnMuZmdDb2xvcj17cmdiOl9yfSl9'@;
put 'Y2F0Y2h7fXN3aXRjaChWblsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJtaWRkbGUiOmNhc2UiYmFzZWxpbmUiOmtyLnN8fChrci5zPXt9KSxrci5zLmFsaWdubWVudHx8KGtyLnMuYWxpZ25tZW50PXt9KSxrci5zLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIn19aWYoZXImJihrci5zfHwo'@;
put 'a3Iucz17fSksIWtyLnMuZmdDb2xvcikpdHJ5e3ZhciBGbj14NShlci50b0xvd2VyQ2FzZSgpLCEwKTtGbj49MCYmKGtyLnMuZmdDb2xvcj17cmdiOkZufSl9Y2F0Y2h7fWlmKGFlLmRlbnNlPyhTW2J0K2dlXXx8KFNbYnQrZ2VdPVtdKSxTW2J0K2dlXVtrdCtwZV09a3IpOlNbcWkoe2M6a3Qr'@;
put 'cGUscjpidCtnZX0pXT1rcixPdD4xfHxLdD4xKWZvcih2YXIganI9YnQ7anI8YnQrT3Q7Kytqcilmb3IodmFyIFppPWt0O1ppPGt0K0t0OysrWmkpYnQ9PWpyJiZrdD09Wml8fChhZS5kZW5zZT8oU1tqcitnZV18fChTW2pyK2dlXT1bXSksU1tqcitnZV1bWmkrcGVdPXt0OiJ6IixzOnF0KGty'@;
put 'LnN8fHt9KX0pOlNbcWkoe2M6WmkrcGUscjpqcitnZX0pXT17dDoieiIsczpxdChrci5zfHx7fSl9KTtOZS5lLmM8a3QrcGUmJihOZS5lLmM9a3QrcGUpLGt0Kz1LdH19KytidH19aWYoZXQubGVuZ3RoJiYoU1siIW1lcmdlcyJdPShTWyIhbWVyZ2VzIl18fFtdKS5jb25jYXQoZXQpKSxOZS5l'@;
put 'LnI9TWF0aC5tYXgoTmUuZS5yLGJ0LTErZ2UpLFNbIiFyZWYiXT1pbyhOZSksYnQ+PVBlJiYoU1siIWZ1bGxyZWYiXT1pbygoTmUuZS5yPUcubGVuZ3RoLW90K2J0LTErZ2UsTmUpKSksYWUuYm9yZGVycylmb3IoYnQ9TmUucy5yO2J0PD1OZS5lLnI7KytidClmb3Ioa3Q9TmUucy5jO2t0PD1O'@;
put 'ZS5lLmM7KytrdClpZighYWUuZGVuc2Upe3ZhciB5aT1TW3FpKHtyOmJ0LGM6a3R9KV07aWYoIXlpfHwheWkucyljb250aW51ZTtpZihidD4wKXt2YXIgd289U1txaSh7cjpidC0xLGM6a3R9KV07d28mJndvLnMmJndvLnMuYm90dG9tJiZkZWxldGUgeWkucy50b3B9aWYoa3Q+MCl7dmFyIHNh'@;
put 'PVNbcWkoe3I6YnQsYzprdC0xfSldO3NhJiZzYS5zJiZzYS5zLmJvdHRvbSYmZGVsZXRlIHlpLnMubGVmdH19cmV0dXJuIFN9ZnVuY3Rpb24gQnooUyxSKXtyZXR1cm4ga2IoKFJ8fHt9KS5kZW5zZT9bXTp7fSxTLFIpfXZhciBYUz1mdW5jdGlvbigpe3ZhciBTPWZ1bmN0aW9uKEcsUSxhZSl7'@;
put 'dmFyIGdlPUcucmVwbGFjZSgvW1x0XHJcbl0vZywiICIpLnRyaW0oKS5yZXBsYWNlKC8gKy9nLCIgIikucmVwbGFjZSgvPHRleHQ6c1wvPi9nLCIgIikucmVwbGFjZSgvPHRleHQ6cyB0ZXh0OmM9IihcZCspIlwvPi9nLGZ1bmN0aW9uKE5lLFllKXtyZXR1cm4gQXJyYXkocGFyc2VJbnQoWWUs'@;
put 'MTApKzEpLmpvaW4oIiAiKX0pLnJlcGxhY2UoLzx0ZXh0OnRhYltePl0qXC8+L2csIlx0IikucmVwbGFjZSgvPHRleHQ6bGluZS1icmVha1wvPi9nLCJcbiIpLHBlPVFyKGdlLnJlcGxhY2UoLzxbXj5dKj4vZywiIikpLHllPVtdLFBlPTA7cmV0dXJuIGdlLnJlcGxhY2UoLyg8dGV4dDpzcGFu'@;
put 'Lio/PikoLio/KTxbXC9ddGV4dDpzcGFuPi9nLGZ1bmN0aW9uKE5lLFllLGV0LGN0KXtjdCE9UGUmJnllLnB1c2goe3Q6InMiLHY6UXIoZ2Uuc2xpY2UoUGUsY3QpKX0pO3ZhciBFdD17dDoicyIsdjpRcihldCl9LG90PXZyKFllKVsic3R5bGUtbmFtZSJdO3JldHVybiBvdCYmYWVbb3RdJiYo'@;
put 'RXQucz1xdChhZVtvdF0pKSx5ZS5wdXNoKEV0KSxQZT1jdCtOZS5sZW5ndGgsIiJ9KSxQZTxnZS5sZW5ndGgmJnllLnB1c2goe3Q6InMiLHY6UXIoZ2Uuc2xpY2UoUGUpKX0pLFtwZSx5ZV19LFI9e2RheTpbImQiLCJkZCJdLG1vbnRoOlsibSIsIm1tIl0seWVhcjpbInkiLCJ5eSJdLGhvdXJz'@;
put 'OlsiaCIsImhoIl0sbWludXRlczpbIm0iLCJtbSJdLHNlY29uZHM6WyJzIiwic3MiXSwiYW0tcG0iOlsiQS9QIiwiQU0vUE0iXSwiZGF5LW9mLXdlZWsiOlsiZGRkIiwiZGRkZCJdLGVyYTpbImUiLCJlZSJdLHF1YXJ0ZXI6WyJcXFFtIiwnbVxcInRoIHF1YXJ0ZXIiJ119LGs9ZnVuY3Rpb24o'@;
put 'RyxRKXt2YXIgYWU9dnIoRy5zbGljZSgwLEcuaW5kZXhPZigiPiIpKSksZ2U9Ry5zbGljZShHLmluZGV4T2YoIj4iKSsxKSxwZT17bmFtZTphZS5uYW1lLGZhbWlseTphZS5mYW1pbHl9O1tbInBhcmVudCIsInBhcmVudC1zdHlsZS1uYW1lIl0sWyJkYXRhbmFtZSIsImRhdGEtc3R5bGUtbmFt'@;
put 'ZSJdLFsibXBuYW1lIiwibWFzdGVyLXBhZ2UtbmFtZSJdXS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXthZVtQZVsxXV0mJihwZVtQZVswXV09YWVbUGVbMV1dKX0pO3ZhciB5ZT17fTtnZS5yZXBsYWNlKGVuLGZ1bmN0aW9uKFBlKXt2YXIgTmU9dnIoUGUpO2lmKCI8c3R5bGU6dGV4dC1wcm9wZXJ0'@;
put 'aWVzIj09PU5lWzBdKXtpZihOZVsiZm9udC13ZWlnaHQiXSYmKHllLmJvbGQ9KygiYm9sZCI9PU5lWyJmb250LXdlaWdodCJdfHwiNzAwIj09TmVbImZvbnQtd2VpZ2h0Il0pKSwoIml0YWxpYyI9PU5lWyJmb250LXN0eWxlIl18fCJvYmxpcXVlIj09TmVbImZvbnQtc3R5bGUiXSkmJih5ZS5p'@;
put 'dGFsaWM9MSksIm5vbmUiIT0oTmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIik/eWUudW5kZXJsaW5lPSJkb3VibGUiPT1OZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdPzI6MTooTmVbInRleHQtdW5kZXJsaW5lLXN0eWxlIl18fCJub25lIj09TmVbInRleHQtdW5kZXJsaW5lLXR5'@;
put 'cGUiXSkmJih5ZS51bmRlcmxpbmU9MCksKE5lWyJmb250LXNpemUiXXx8IiIpLm1hdGNoKC9wdCQvKSYmKHllLnN6PStOZVsiZm9udC1zaXplIl0ucmVwbGFjZSgicHQiLCIiKSksIm5vbmUiIT0oTmVbInRleHQtbGluZS10aHJvdWdoLXN0eWxlIl18fCJub25lIikmJih5ZS5zdHJpa2U9MSks'@;
put 'TmVbImZvbnQtbmFtZSJdJiYoeWUubmFtZT1OZVsiZm9udC1uYW1lIl0pLE5lLmNvbG9yKXt2YXIgWWU9eDUoTmUuY29sb3IsITApO1llPj0wJiYoeWUuY29sb3I9WWUpfXN3aXRjaChOZVsidGV4dC1wb3NpdGlvbiJdKXtjYXNlInN1cGVyIjp5ZS52YWxpZ249InN1cGVyIjticmVhaztjYXNl'@;
put 'InN1YiI6eWUudmFsaWduPSJzdWIiO2JyZWFrO2RlZmF1bHQ6KE5lWyJ0ZXh0LXBvc2l0aW9uIl18fCIiKS5tYXRjaCgvJS8pJiYoeWUudmFsaWduPSItIj09TmVbInRleHQtcG9zaXRpb24iXS5jaGFyQXQoMCk/InN1YiI6InN1cGVyIil9Im5vbmUiIT0oTmVbInRleHQtc2hhZG93Il18fCJu'@;
put 'b25lIikmJih5ZS5zaGFkb3c9MSl9cmV0dXJuIiJ9KSxRW2FlLm5hbWVdPXllfTtyZXR1cm4gZnVuY3Rpb24oUSxhZSl7dmFyIGdlPWFlfHx7fTtudWxsIT1sZSYmbnVsbD09Z2UuZGVuc2UmJihnZS5kZW5zZT1sZSk7dmFyIFBlLE5lLEV0LG90LE90LEt0LHBlPVdTKFEpLHllPVtdLFllPXtu'@;
put 'YW1lOiIifSxldD0iIixjdD0wLGJ0PXt9LGp0PVtdLGt0PWdlLmRlbnNlP1tdOnt9LFRuPXt2YWx1ZToiIn0scnI9IiIsU249MCxYbj1bXSxWbj0tMSxocj0tMSxicj17czp7cjoxZTYsYzoxZTd9LGU6e3I6MCxjOjB9fSxlcj0wLENpPXt9LEZpPVtdLHJvPXt9LHVvPTAsTGk9MCxrcj1bXSxO'@;
put 'bj0xLEJyPTEsX3I9W10sRm49e05hbWVzOltdfSxqcj17fSxaaT1bIiIsIiJdLHlpPVtdLHdvPXt9LHNhPXt9LG9vPTAsTGE9IiIsUG89MCxoYT0hMSxKbz0hMSxCaT0wO2ZvcihXNS5sYXN0SW5kZXg9MCxwZT1wZS5yZXBsYWNlKC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgv'@;
put 'PCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpO090PVc1LmV4ZWMocGUpOylzd2l0Y2goT3RbM109T3RbM10ucmVwbGFjZSgvXy4qJC8sIiIpKXtjYXNlInRhYmxlIjpjYXNlIlx1NWRlNVx1NGY1Y1x1ODg2OCI6Ii8iPT09T3RbMV0/KGt0WyIhcmVmIl09YnIuZS5jPj1ici5zLmMm'@;
put 'JmJyLmUucj49YnIucy5yP2lvKGJyKToiQTE6QTEiLGdlLnNoZWV0Um93cz4wJiZnZS5zaGVldFJvd3M8PWJyLmUuciYmKGt0WyIhZnVsbHJlZiJdPWt0WyIhcmVmIl0sYnIuZS5yPWdlLnNoZWV0Um93cy0xLGt0WyIhcmVmIl09aW8oYnIpKSxGaS5sZW5ndGgmJihrdFsiIW1lcmdlcyJdPUZp'@;
put 'KSxrci5sZW5ndGgmJihrdFsiIXJvd3MiXT1rciksRXQubmFtZT1FdC5cdTU0MGRcdTc5ZjB8fEV0Lm5hbWUsdHlwZW9mIEpTT048InUiJiZKU09OLnN0cmluZ2lmeShFdCksanQucHVzaChFdC5uYW1lKSxidFtFdC5uYW1lXT1rdCxKbz0hMSk6Ii8iIT09T3RbMF0uY2hhckF0KE90WzBdLmxl'@;
put 'bmd0aC0yKSYmKEV0PXZyKE90WzBdLCExKSxWbj1ocj0tMSxici5zLnI9YnIucy5jPTFlNyxici5lLnI9YnIuZS5jPTAsa3Q9Z2UuZGVuc2U/W106e30sRmk9W10sa3I9W10sSm89ITApO2JyZWFrO2Nhc2UidGFibGUtcm93LWdyb3VwIjoiLyI9PT1PdFsxXT8tLWVyOisrZXI7YnJlYWs7Y2Fz'@;
put 'ZSJ0YWJsZS1yb3ciOmNhc2UiXHU4ODRjIjppZigiLyI9PT1PdFsxXSl7Vm4rPU5uLE5uPTE7YnJlYWt9aWYoKG90PXZyKE90WzBdLCExKSkuXHU4ODRjXHU1M2Y3P1ZuPW90Llx1ODg0Y1x1NTNmNy0xOi0xPT1WbiYmKFZuPTApLChObj0rb3RbIm51bWJlci1yb3dzLXJlcGVhdGVkIl18fDEp'@;
put 'PDEwKWZvcihCaT0wO0JpPE5uOysrQmkpZXI+MCYmKGtyW1ZuK0JpXT17bGV2ZWw6ZXJ9KTtocj0tMTticmVhaztjYXNlImNvdmVyZWQtdGFibGUtY2VsbCI6Ii8iIT09T3RbMV0mJisraHIsZ2Uuc2hlZXRTdHVicyYmKGdlLmRlbnNlPyhrdFtWbl18fChrdFtWbl09W10pLGt0W1ZuXVtocl09'@;
put 'e3Q6InoifSk6a3RbcWkoe3I6Vm4sYzpocn0pXT17dDoieiJ9KSxycj0iIixYbj1bXTticmVhaztjYXNlInRhYmxlLWNlbGwiOmNhc2UiXHU2NTcwXHU2MzZlIjppZigiLyI9PT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpKSsraHIsVG49dnIoT3RbMF0sITEpLEJyPXBhcnNlSW50KFRu'@;
put 'WyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApLEt0PXt0OiJ6Iix2Om51bGx9LFRuLmZvcm11bGEmJjAhPWdlLmNlbGxGb3JtdWxhJiYoS3QuZj1pUyhRcihUbi5mb3JtdWxhKSkpLCJzdHJpbmciPT0oVG4uXHU2NTcwXHU2MzZlXHU3YzdiXHU1NzhifHxUblsidmFsdWUtdHlw'@;
put 'ZSJdKSYmKEt0LnQ9InMiLEt0LnY9UXIoVG5bInN0cmluZy12YWx1ZSJdfHwiIiksZ2UuZGVuc2U/KGt0W1ZuXXx8KGt0W1ZuXT1bXSksa3RbVm5dW2hyXT1LdCk6a3RbcWkoe3I6Vm4sYzpocn0pXT1LdCksaHIrPUJyLTE7ZWxzZSBpZigiLyIhPT1PdFsxXSl7QnI9MTt2YXIgSXM9Tm4/Vm4r'@;
put 'Tm4tMTpWbjtpZigrK2hyPmJyLmUuYyYmKGJyLmUuYz1ociksaHI8YnIucy5jJiYoYnIucy5jPWhyKSxWbjxici5zLnImJihici5zLnI9Vm4pLElzPmJyLmUuciYmKGJyLmUucj1JcykseWk9W10sd289e30sS3Q9e3Q6KFRuPXZyKE90WzBdLCExKSkuXHU2NTcwXHU2MzZlXHU3YzdiXHU1Nzhi'@;
put 'fHxUblsidmFsdWUtdHlwZSJdLHY6bnVsbH0sZ2UuY2VsbEZvcm11bGEpaWYoVG4uZm9ybXVsYSYmKFRuLmZvcm11bGE9UXIoVG4uZm9ybXVsYSkpLFRuWyJudW1iZXItbWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdJiZUblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSYmKHVvPXBhcnNl'@;
put 'SW50KFRuWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxMaT1wYXJzZUludChUblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAsS3QuRj1pbyhybz17czp7cjpWbixjOmhyfSxlOntyOlZuK3VvLTEsYzpocitMaS0xfX0pLF9yLnB1c2goW3JvLEt0'@;
put 'LkZdKSksVG4uZm9ybXVsYSlLdC5mPWlTKFRuLmZvcm11bGEpO2Vsc2UgZm9yKEJpPTA7Qmk8X3IubGVuZ3RoOysrQmkpVm4+PV9yW0JpXVswXS5zLnImJlZuPD1fcltCaV1bMF0uZS5yJiZocj49X3JbQmldWzBdLnMuYyYmaHI8PV9yW0JpXVswXS5lLmMmJihLdC5GPV9yW0JpXVsxXSk7c3dp'@;
put 'dGNoKChUblsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdfHxUblsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdKSYmKHVvPXBhcnNlSW50KFRuWyJudW1iZXItcm93cy1zcGFubmVkIl0sMTApfHwwLExpPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl0sMTApfHwwLEZpLnB1c2go'@;
put 'cm89e3M6e3I6Vm4sYzpocn0sZTp7cjpWbit1by0xLGM6aHIrTGktMX19KSksVG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0mJihCcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXSwxMCkpLEt0LnQpe2Nhc2UiYm9vbGVhbiI6S3QudD0iYiIsS3Qudj10aShUblsi'@;
put 'Ym9vbGVhbi12YWx1ZSJdKTticmVhaztjYXNlImZsb2F0IjpjYXNlInBlcmNlbnRhZ2UiOmNhc2UiY3VycmVuY3kiOkt0LnQ9Im4iLEt0LnY9cGFyc2VGbG9hdChUbi52YWx1ZSk7YnJlYWs7Y2FzZSJkYXRlIjpLdC50PSJkIixLdC52PUhlKFRuWyJkYXRlLXZhbHVlIl0pLGdlLmNlbGxEYXRl'@;
put 'c3x8KEt0LnQ9Im4iLEt0LnY9UWUoS3QudikpLEt0Lno9Im0vZC95eSI7YnJlYWs7Y2FzZSJ0aW1lIjpLdC50PSJuIixLdC52PWl0KFRuWyJ0aW1lLXZhbHVlIl0pLzg2NDAwLGdlLmNlbGxEYXRlcyYmKEt0LnQ9ImQiLEt0LnY9dW4oS3QudikpLEt0Lno9IkhIOk1NOlNTIjticmVhaztjYXNl'@;
put 'Im51bWJlciI6S3QudD0ibiIsS3Qudj1wYXJzZUZsb2F0KFRuLlx1NjU3MFx1NjM2ZVx1NjU3MFx1NTAzYyk7YnJlYWs7ZGVmYXVsdDppZigic3RyaW5nIiE9PUt0LnQmJiJ0ZXh0IiE9PUt0LnQmJkt0LnQpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCB2YWx1ZSB0eXBlICIrS3QudCk7'@;
put 'S3QudD0icyIsbnVsbCE9VG5bInN0cmluZy12YWx1ZSJdJiYocnI9UXIoVG5bInN0cmluZy12YWx1ZSJdKSxYbj1bXSl9fWVsc2V7aWYoaGE9ITEsInMiPT09S3QudCYmKEt0LnY9cnJ8fCIiLFhuLmxlbmd0aCYmKEt0LlI9WG4pLGhhPTA9PVNuKSxqci5UYXJnZXQmJihLdC5sPWpyKSx5aS5s'@;
put 'ZW5ndGg+MCYmKEt0LmM